tangled
alpha
login
or
join now
tjh.dev
/
kernel
Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1
fork
atom
overview
issues
pulls
pipelines
Merge branch 'core/debugobjects' into core/urgent
Ingo Molnar
17 years ago
d7ee5605
1b7558e4
+6
-9
1 changed file
expand all
collapse all
unified
split
lib
debugobjects.c
+6
-9
lib/debugobjects.c
···
68
{
69
gfp_t gfp = GFP_ATOMIC | __GFP_NORETRY | __GFP_NOWARN;
70
struct debug_obj *new;
0
71
72
if (likely(obj_pool_free >= ODEBUG_POOL_MIN_LEVEL))
73
return obj_pool_free;
···
82
if (!new)
83
return obj_pool_free;
84
85
-
spin_lock(&pool_lock);
86
hlist_add_head(&new->node, &obj_pool);
87
obj_pool_free++;
88
-
spin_unlock(&pool_lock);
89
}
90
return obj_pool_free;
91
}
···
111
}
112
113
/*
114
-
* Allocate a new object. If the pool is empty and no refill possible,
115
-
* switch off the debugger.
116
*/
117
static struct debug_obj *
118
alloc_object(void *addr, struct debug_bucket *b, struct debug_obj_descr *descr)
119
{
120
struct debug_obj *obj = NULL;
121
-
int retry = 0;
122
123
-
repeat:
124
spin_lock(&pool_lock);
125
if (obj_pool.first) {
126
obj = hlist_entry(obj_pool.first, typeof(*obj), node);
···
138
obj_pool_min_free = obj_pool_free;
139
}
140
spin_unlock(&pool_lock);
141
-
142
-
if (fill_pool() && !obj && !retry++)
143
-
goto repeat;
144
145
return obj;
146
}
···
255
struct debug_bucket *db;
256
struct debug_obj *obj;
257
unsigned long flags;
0
0
258
259
db = get_bucket((unsigned long) addr);
260
···
68
{
69
gfp_t gfp = GFP_ATOMIC | __GFP_NORETRY | __GFP_NOWARN;
70
struct debug_obj *new;
71
+
unsigned long flags;
72
73
if (likely(obj_pool_free >= ODEBUG_POOL_MIN_LEVEL))
74
return obj_pool_free;
···
81
if (!new)
82
return obj_pool_free;
83
84
+
spin_lock_irqsave(&pool_lock, flags);
85
hlist_add_head(&new->node, &obj_pool);
86
obj_pool_free++;
87
+
spin_unlock_irqrestore(&pool_lock, flags);
88
}
89
return obj_pool_free;
90
}
···
110
}
111
112
/*
113
+
* Allocate a new object. If the pool is empty, switch off the debugger.
0
114
*/
115
static struct debug_obj *
116
alloc_object(void *addr, struct debug_bucket *b, struct debug_obj_descr *descr)
117
{
118
struct debug_obj *obj = NULL;
0
119
0
120
spin_lock(&pool_lock);
121
if (obj_pool.first) {
122
obj = hlist_entry(obj_pool.first, typeof(*obj), node);
···
140
obj_pool_min_free = obj_pool_free;
141
}
142
spin_unlock(&pool_lock);
0
0
0
143
144
return obj;
145
}
···
260
struct debug_bucket *db;
261
struct debug_obj *obj;
262
unsigned long flags;
263
+
264
+
fill_pool();
265
266
db = get_bucket((unsigned long) addr);
267