mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-10 22:22:51 -04:00
Merge tag 'core-debugobjects-2023-05-28' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull debugobjects fixes from Thomas Gleixner:
"Two fixes for debugobjects:
- Prevent the allocation path from waking up kswapd.
That's a long standing issue due to the GFP_ATOMIC allocation flag.
As debug objects can be invoked from pretty much any context waking
kswapd can end up in arbitrary lock chains versus the waitqueue
lock
- Correct the explicit lockdep wait-type violation in
debug_object_fill_pool()"
* tag 'core-debugobjects-2023-05-28' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
debugobjects: Don't wake up kswapd from fill_pool()
debugobjects,locking: Annotate debug_object_fill_pool() wait type violation
This commit is contained in:
@@ -126,7 +126,7 @@ static const char *obj_states[ODEBUG_STATE_MAX] = {
|
||||
|
||||
static void fill_pool(void)
|
||||
{
|
||||
gfp_t gfp = GFP_ATOMIC | __GFP_NORETRY | __GFP_NOWARN;
|
||||
gfp_t gfp = __GFP_HIGH | __GFP_NOWARN;
|
||||
struct debug_obj *obj;
|
||||
unsigned long flags;
|
||||
|
||||
@@ -591,10 +591,21 @@ static void debug_objects_fill_pool(void)
|
||||
{
|
||||
/*
|
||||
* On RT enabled kernels the pool refill must happen in preemptible
|
||||
* context:
|
||||
* context -- for !RT kernels we rely on the fact that spinlock_t and
|
||||
* raw_spinlock_t are basically the same type and this lock-type
|
||||
* inversion works just fine.
|
||||
*/
|
||||
if (!IS_ENABLED(CONFIG_PREEMPT_RT) || preemptible())
|
||||
if (!IS_ENABLED(CONFIG_PREEMPT_RT) || preemptible()) {
|
||||
/*
|
||||
* Annotate away the spinlock_t inside raw_spinlock_t warning
|
||||
* by temporarily raising the wait-type to WAIT_SLEEP, matching
|
||||
* the preemptible() condition above.
|
||||
*/
|
||||
static DEFINE_WAIT_OVERRIDE_MAP(fill_pool_map, LD_WAIT_SLEEP);
|
||||
lock_map_acquire_try(&fill_pool_map);
|
||||
fill_pool();
|
||||
lock_map_release(&fill_pool_map);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
Reference in New Issue
Block a user