From: Konrad Rzeszutek Wilk Date: Fri, 23 Jun 2017 13:12:44 +0000 (+0200) Subject: livepatch: Wrong usage of spinlock on debug console. X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=1e40f87dbbc5a632fd56f430109acd4cc5b5f438;p=people%2Froyger%2Fxen.git livepatch: Wrong usage of spinlock on debug console. If we have a large amount of livepatches and want to print them on the console using 'xl debug-keys x' we eventually hit the preemption check: if ( i && !(i % 64) ) { spin_unlock(&payload_lock); process_pending_softirqs(); if ( spin_trylock(&payload_lock) ) return The effect is that we have just effectively taken the lock and returned without unlocking! Reviewed-by: Ross Lagerwall Reviewed-and-tested-by: Boris Ostrovsky Reviewed-by: Jan Beulich Signed-off-by: Konrad Rzeszutek Wilk master commit: 75dfe7c566c36e0af4714557a666827f49b69191 master date: 2017-06-12 08:59:33 -0400 --- diff --git a/xen/common/livepatch.c b/xen/common/livepatch.c index fc8ef9999a..8aaaad289e 100644 --- a/xen/common/livepatch.c +++ b/xen/common/livepatch.c @@ -1641,7 +1641,7 @@ static void livepatch_printall(unsigned char key) { spin_unlock(&payload_lock); process_pending_softirqs(); - if ( spin_trylock(&payload_lock) ) + if ( !spin_trylock(&payload_lock) ) { printk("Couldn't reacquire lock. Try again.\n"); return;