[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH] evtchn: double per-channel locking can't hit identical channels
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@xxxxxxxx> --- a/xen/common/event_channel.c +++ b/xen/common/event_channel.c @@ -326,23 +326,18 @@ static long evtchn_alloc_unbound(evtchn_ 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); }
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |