diff options
| author | Ingo Molnar <mingo@kernel.org> | 2024-07-11 10:42:33 +0200 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2024-07-11 10:42:33 +0200 |
| commit | 011b1134b82c2750d83a299a1369c678845de45a (patch) | |
| tree | a6a2ba6bfa62b02cb7b00a67c6f449d965140e5a /lib/closure.c | |
| parent | d329605287020c3d1c3b0dadc63d8208e7251382 (diff) | |
| parent | ddae0ca2a8fe12d0e24ab10ba759c3fbd755ada8 (diff) | |
Merge branch 'sched/urgent' into sched/core, to pick up fixes and refresh the branch
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'lib/closure.c')
| -rw-r--r-- | lib/closure.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/closure.c b/lib/closure.c index 07409e9e35a5..2e1ee9fdec08 100644 --- a/lib/closure.c +++ b/lib/closure.c @@ -17,12 +17,18 @@ static inline void closure_put_after_sub(struct closure *cl, int flags) { int r = flags & CLOSURE_REMAINING_MASK; - BUG_ON(flags & CLOSURE_GUARD_MASK); - BUG_ON(!r && (flags & ~CLOSURE_DESTRUCTOR)); + if (WARN(flags & CLOSURE_GUARD_MASK, + "closure has guard bits set: %x (%u)", + flags & CLOSURE_GUARD_MASK, (unsigned) __fls(r))) + r &= ~CLOSURE_GUARD_MASK; if (!r) { smp_acquire__after_ctrl_dep(); + WARN(flags & ~CLOSURE_DESTRUCTOR, + "closure ref hit 0 with incorrect flags set: %x (%u)", + flags & ~CLOSURE_DESTRUCTOR, (unsigned) __fls(flags)); + cl->closure_get_happened = false; if (cl->fn && !(flags & CLOSURE_DESTRUCTOR)) { |