Message ID | 20170614030125.45899-1-aik@ozlabs.ru (mailing list archive) |
---|---|
State | Accepted |
Commit | a093c92dc7f96a15de98ec8cfe38e6f7610a5969 |
Headers | show |
Alexey Kardashevskiy <aik@ozlabs.ru> writes: > When trapped on WARN_ON(), report_bug() is expected to return > BUG_TRAP_TYPE_WARN so the caller could increment NIP by 4 and continue. > The __builtin_constant_p() path of the PPC's WARN_ON() calls (indirectly) > __WARN_FLAGS() which has BUGFLAG_WARNING set, however the other branch > does not which makes report_bug() report a bug rather than a warning. > > Fixes: 19d436268dde95389 ("debug: Add _ONCE() logic to report_bug()") > Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> > --- > > Actually 19d436268dde95389 replaced __WARN_TAINT() with __WARN_FLAGS() > and lost BUGFLAG_TAINT() and this is not in the commit log so it is > unclear: > 1) why I think the rename is because previously the argument was a taint value, whereas now it is a flags value (which is a superset of taint). > 2) whether this particular patch should be doing > BUGFLAG_WARNING|BUGFLAG_TAINT(TAINT_WARN) > or > BUGFLAG_WARNING|(flags) There is no flags here so the latter won't work AFAICS. > Any ideas? Thanks. Your patch looks correct to me. I assume it works? The bug isn't introduced by 19d436268dde ("debug: Add _ONCE() logic to report_bug()") as far as I can see. If you check out that revision you see that BUGFLAG_TAINT still contains BUGFLAG_WARNING: #define BUGFLAG_TAINT(taint) (BUGFLAG_WARNING | ((taint) << 8)) But that was removed in f26dee15103f ("debug: Avoid setting BUGFLAG_WARNING twice"). So I think the Fixes: tag should point at that commit. cheers > diff --git a/arch/powerpc/include/asm/bug.h b/arch/powerpc/include/asm/bug.h > index f2c562a0a427..0151af6c2a50 100644 > --- a/arch/powerpc/include/asm/bug.h > +++ b/arch/powerpc/include/asm/bug.h > @@ -104,7 +104,7 @@ > "1: "PPC_TLNEI" %4,0\n" \ > _EMIT_BUG_ENTRY \ > : : "i" (__FILE__), "i" (__LINE__), \ > - "i" (BUGFLAG_TAINT(TAINT_WARN)), \ > + "i" (BUGFLAG_WARNING|BUGFLAG_TAINT(TAINT_WARN)),\ > "i" (sizeof(struct bug_entry)), \ > "r" (__ret_warn_on)); \ > } \ > -- > 2.11.0
On 14/06/17 21:04, Michael Ellerman wrote: > Alexey Kardashevskiy <aik@ozlabs.ru> writes: > >> When trapped on WARN_ON(), report_bug() is expected to return >> BUG_TRAP_TYPE_WARN so the caller could increment NIP by 4 and continue. >> The __builtin_constant_p() path of the PPC's WARN_ON() calls (indirectly) >> __WARN_FLAGS() which has BUGFLAG_WARNING set, however the other branch >> does not which makes report_bug() report a bug rather than a warning. >> >> Fixes: 19d436268dde95389 ("debug: Add _ONCE() logic to report_bug()") >> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> >> --- >> >> Actually 19d436268dde95389 replaced __WARN_TAINT() with __WARN_FLAGS() >> and lost BUGFLAG_TAINT() and this is not in the commit log so it is >> unclear: >> 1) why > > I think the rename is because previously the argument was a taint value, > whereas now it is a flags value (which is a superset of taint). > >> 2) whether this particular patch should be doing >> BUGFLAG_WARNING|BUGFLAG_TAINT(TAINT_WARN) >> or >> BUGFLAG_WARNING|(flags) > > There is no flags here so the latter won't work AFAICS. > >> Any ideas? Thanks. > > Your patch looks correct to me. I assume it works? Yes, it does. > > > The bug isn't introduced by 19d436268dde ("debug: Add _ONCE() logic to > report_bug()") as far as I can see. > > If you check out that revision you see that BUGFLAG_TAINT still contains > BUGFLAG_WARNING: > > #define BUGFLAG_TAINT(taint) (BUGFLAG_WARNING | ((taint) << 8)) > > But that was removed in f26dee15103f ("debug: Avoid setting > BUGFLAG_WARNING twice"). So I think the Fixes: tag should point at that > commit. Ah, you're right. Should I repost the patch with the updated "fixes:" clause? > > cheers > >> diff --git a/arch/powerpc/include/asm/bug.h b/arch/powerpc/include/asm/bug.h >> index f2c562a0a427..0151af6c2a50 100644 >> --- a/arch/powerpc/include/asm/bug.h >> +++ b/arch/powerpc/include/asm/bug.h >> @@ -104,7 +104,7 @@ >> "1: "PPC_TLNEI" %4,0\n" \ >> _EMIT_BUG_ENTRY \ >> : : "i" (__FILE__), "i" (__LINE__), \ >> - "i" (BUGFLAG_TAINT(TAINT_WARN)), \ >> + "i" (BUGFLAG_WARNING|BUGFLAG_TAINT(TAINT_WARN)),\ >> "i" (sizeof(struct bug_entry)), \ >> "r" (__ret_warn_on)); \ >> } \ >> -- >> 2.11.0
Alexey Kardashevskiy <aik@ozlabs.ru> writes: > On 14/06/17 21:04, Michael Ellerman wrote: >> Alexey Kardashevskiy <aik@ozlabs.ru> writes: >> >>> When trapped on WARN_ON(), report_bug() is expected to return >>> BUG_TRAP_TYPE_WARN so the caller could increment NIP by 4 and continue. >>> The __builtin_constant_p() path of the PPC's WARN_ON() calls (indirectly) >>> __WARN_FLAGS() which has BUGFLAG_WARNING set, however the other branch >>> does not which makes report_bug() report a bug rather than a warning. >>> >>> Fixes: 19d436268dde95389 ("debug: Add _ONCE() logic to report_bug()") >>> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> >>> --- >>> >>> Actually 19d436268dde95389 replaced __WARN_TAINT() with __WARN_FLAGS() >>> and lost BUGFLAG_TAINT() and this is not in the commit log so it is >>> unclear: >>> 1) why >> >> I think the rename is because previously the argument was a taint value, >> whereas now it is a flags value (which is a superset of taint). >> >>> 2) whether this particular patch should be doing >>> BUGFLAG_WARNING|BUGFLAG_TAINT(TAINT_WARN) >>> or >>> BUGFLAG_WARNING|(flags) >> >> There is no flags here so the latter won't work AFAICS. >> >>> Any ideas? Thanks. >> >> Your patch looks correct to me. I assume it works? > > Yes, it does. Thanks. >> The bug isn't introduced by 19d436268dde ("debug: Add _ONCE() logic to >> report_bug()") as far as I can see. >> >> If you check out that revision you see that BUGFLAG_TAINT still contains >> BUGFLAG_WARNING: >> >> #define BUGFLAG_TAINT(taint) (BUGFLAG_WARNING | ((taint) << 8)) >> >> But that was removed in f26dee15103f ("debug: Avoid setting >> BUGFLAG_WARNING twice"). So I think the Fixes: tag should point at that >> commit. > > Ah, you're right. Should I repost the patch with the updated "fixes:" clause? No that's fine I can update it. cheers
On Wed, 2017-06-14 at 03:01:25 UTC, Alexey Kardashevskiy wrote: > When trapped on WARN_ON(), report_bug() is expected to return > BUG_TRAP_TYPE_WARN so the caller could increment NIP by 4 and continue. > The __builtin_constant_p() path of the PPC's WARN_ON() calls (indirectly) > __WARN_FLAGS() which has BUGFLAG_WARNING set, however the other branch > does not which makes report_bug() report a bug rather than a warning. > > Fixes: f26dee15103f ("debug: Avoid setting BUGFLAG_WARNING twice") > Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Applied to powerpc fixes, thanks. https://git.kernel.org/powerpc/c/a093c92dc7f96a15de98ec8cfe38e6 cheers
diff --git a/arch/powerpc/include/asm/bug.h b/arch/powerpc/include/asm/bug.h index f2c562a0a427..0151af6c2a50 100644 --- a/arch/powerpc/include/asm/bug.h +++ b/arch/powerpc/include/asm/bug.h @@ -104,7 +104,7 @@ "1: "PPC_TLNEI" %4,0\n" \ _EMIT_BUG_ENTRY \ : : "i" (__FILE__), "i" (__LINE__), \ - "i" (BUGFLAG_TAINT(TAINT_WARN)), \ + "i" (BUGFLAG_WARNING|BUGFLAG_TAINT(TAINT_WARN)),\ "i" (sizeof(struct bug_entry)), \ "r" (__ret_warn_on)); \ } \
When trapped on WARN_ON(), report_bug() is expected to return BUG_TRAP_TYPE_WARN so the caller could increment NIP by 4 and continue. The __builtin_constant_p() path of the PPC's WARN_ON() calls (indirectly) __WARN_FLAGS() which has BUGFLAG_WARNING set, however the other branch does not which makes report_bug() report a bug rather than a warning. Fixes: 19d436268dde95389 ("debug: Add _ONCE() logic to report_bug()") Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> --- Actually 19d436268dde95389 replaced __WARN_TAINT() with __WARN_FLAGS() and lost BUGFLAG_TAINT() and this is not in the commit log so it is unclear: 1) why 2) whether this particular patch should be doing BUGFLAG_WARNING|BUGFLAG_TAINT(TAINT_WARN) or BUGFLAG_WARNING|(flags) Any ideas? Thanks. --- arch/powerpc/include/asm/bug.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)