From d6a43bb25d1ea2a478eda4222916e5b491894c53 Mon Sep 17 00:00:00 2001 From: Dan Magenheimer Date: Fri, 31 Aug 2012 21:13:39 +0100 Subject: [PATCH] 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 --- xen/common/tmem.c | 1 + 1 file changed, 1 insertion(+) 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); } -- 2.30.2