Inter-domain channels can't possibly be bound to themselves, there's
always a 2nd channel involved, even when this is a loopback into the
same domain. As a result we can drop one conditional each from the two
involved functions.
With this, the number of evtchn_write_lock() invocations can also be
shrunk by half, swapping the two incoming function arguments instead.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
Acked-by: Julien Grall <jgrall@amazon.com>
static void double_evtchn_lock(struct evtchn *lchn, struct evtchn *rchn)
{
- if ( lchn <= rchn )
- {
- evtchn_write_lock(lchn);
- if ( lchn != rchn )
- evtchn_write_lock(rchn);
- }
- else
- {
- evtchn_write_lock(rchn);
- evtchn_write_lock(lchn);
- }
+ ASSERT(lchn != rchn);
+
+ if ( lchn > rchn )
+ SWAP(lchn, rchn);
+
+ evtchn_write_lock(lchn);
+ evtchn_write_lock(rchn);
}
static void double_evtchn_unlock(struct evtchn *lchn, struct evtchn *rchn)
{
- if ( lchn != rchn )
- evtchn_write_unlock(lchn);
+ evtchn_write_unlock(lchn);
evtchn_write_unlock(rchn);
}