From: Dan Magenheimer Date: Fri, 31 Aug 2012 20:13:39 +0000 (+0100) Subject: tmem: add matching unlock for an about-to-be-destroyed object X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~8000 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=d6a43bb25d1ea2a478eda4222916e5b491894c53;p=xen.git tmem: add matching unlock for an about-to-be-destroyed object A 4.2 changeset forces a preempt_disable/enable with every lock/unlock. Tmem has dynamically allocated "objects" that contain a lock. The lock is held when the object is destroyed. No reason to unlock something that's about to be destroyed! But with the preempt_enable/disable in the generic locking code, and the fact that do_softirq ASSERTs that preempt_count must be zero, a crash occurs soon after any object is destroyed. So force lock to be released before destroying objects. Signed-off-by: Dan Magenheimer Committed-by: Keir Fraser --- diff --git a/xen/common/tmem.c b/xen/common/tmem.c index dd276df327..1a8777c284 100644 --- a/xen/common/tmem.c +++ b/xen/common/tmem.c @@ -952,6 +952,7 @@ static NOINLINE void obj_free(obj_t *obj, int no_rebalance) /* use no_rebalance only if all objects are being destroyed anyway */ if ( !no_rebalance ) rb_erase(&obj->rb_tree_node,&pool->obj_rb_root[oid_hash(&old_oid)]); + tmem_spin_unlock(&obj->obj_spinlock); tmem_free(obj,sizeof(obj_t),pool); }