···6868{6969 gfp_t gfp = GFP_ATOMIC | __GFP_NORETRY | __GFP_NOWARN;7070 struct debug_obj *new;7171+ unsigned long flags;71727273 if (likely(obj_pool_free >= ODEBUG_POOL_MIN_LEVEL))7374 return obj_pool_free;···8281 if (!new)8382 return obj_pool_free;84838585- spin_lock(&pool_lock);8484+ spin_lock_irqsave(&pool_lock, flags);8685 hlist_add_head(&new->node, &obj_pool);8786 obj_pool_free++;8888- spin_unlock(&pool_lock);8787+ spin_unlock_irqrestore(&pool_lock, flags);8988 }9089 return obj_pool_free;9190}···111110}112111113112/*114114- * Allocate a new object. If the pool is empty and no refill possible,115115- * switch off the debugger.113113+ * Allocate a new object. If the pool is empty, switch off the debugger.116114 */117115static struct debug_obj *118116alloc_object(void *addr, struct debug_bucket *b, struct debug_obj_descr *descr)119117{120118 struct debug_obj *obj = NULL;121121- int retry = 0;122119123123-repeat:124120 spin_lock(&pool_lock);125121 if (obj_pool.first) {126122 obj = hlist_entry(obj_pool.first, typeof(*obj), node);···138140 obj_pool_min_free = obj_pool_free;139141 }140142 spin_unlock(&pool_lock);141141-142142- if (fill_pool() && !obj && !retry++)143143- goto repeat;144143145144 return obj;146145}···255260 struct debug_bucket *db;256261 struct debug_obj *obj;257262 unsigned long flags;263263+264264+ fill_pool();258265259266 db = get_bucket((unsigned long) addr);260267