Subject: Re: linux-next: manual merge of the rust tree with the tip tree

From: Stephen Rothwell <[email-masked]>
Date: Mon, 4 Aug 2025 12:10:58 +1000

Hi all,

On Wed, 23 Jul 2025 11:16:09 +1000 Stephen Rothwell <[email-masked]> wrote:
> 
> Today's linux-next merge of the rust tree got a conflict in:
> 
>   arch/x86/include/asm/bug.h
> 
> between commits:
> 
>   aec58b48517c ("bugs/core: Extend __WARN_FLAGS() with the 'cond_str' parameter")
>   407b9076c147 ("bugs/x86: Extend _BUG_FLAGS() with the 'cond_str' parameter")
>   48ede5be5c07 ("bugs/x86: Augment warnings output by concatenating 'cond_str' with the regular __FILE__ string in _BUG_FLAGS()")
> 
> from the tip tree and commit:
> 
>   8c8efa93db68 ("x86/bug: Add ARCH_WARN_ASM macro for BUG/WARN asm code sharing with Rust")
> 
> from the rust tree.
> 
> I fixed it up (see below) and can carry the fix as necessary. This
> is now fixed as far as linux-next is concerned, but any non trivial
> conflicts should be mentioned to your upstream maintainer when your tree
> is submitted for merging.  You may also want to consider cooperating
> with the maintainer of the conflicting tree to minimise any particularly
> complex conflicts.
> 
> 
> diff --cc arch/x86/include/asm/bug.h
> index 8593976b32cb,20fcb8507ad1..000000000000
> --- a/arch/x86/include/asm/bug.h
> +++ b/arch/x86/include/asm/bug.h
> @@@ -38,19 -38,30 +38,30 @@@
>   #endif
>   
>   #ifdef CONFIG_DEBUG_BUGVERBOSE
> + #define __BUG_ENTRY(file, line, flags)					\
> + 	"2:\t" __BUG_REL("1b") "\t# bug_entry::bug_addr\n"		\
> + 	"\t" __BUG_REL(file)   "\t# bug_entry::file\n"			\
> + 	"\t.word " line        "\t# bug_entry::line\n"			\
> + 	"\t.word " flags       "\t# bug_entry::flags\n"
> + #else
> + #define __BUG_ENTRY(file, line, flags)					\
> + 	"2:\t" __BUG_REL("1b") "\t# bug_entry::bug_addr\n"		\
> + 	"\t.word " flags       "\t# bug_entry::flags\n"
> + #endif
> + 
> + #define _BUG_FLAGS_ASM(ins, file, line, flags, size, extra)		\
> + 	"1:\t" ins "\n"							\
> + 	".pushsection __bug_table,\"aw\"\n"				\
> + 	__BUG_ENTRY(file, line, flags)					\
> + 	"\t.org 2b + " size "\n"					\
> + 	".popsection\n"							\
> + 	extra
>   
>  -#define _BUG_FLAGS(ins, flags, extra)					\
>  +#define _BUG_FLAGS(cond_str, ins, flags, extra)				\
>   do {									\
> - 	asm_inline volatile("1:\t" ins "\n"				\
> - 		     ".pushsection __bug_table,\"aw\"\n"		\
> - 		     "2:\t" __BUG_REL(1b) "\t# bug_entry::bug_addr\n"	\
> - 		     "\t"  __BUG_REL(%c0) "\t# bug_entry::file\n"	\
> - 		     "\t.word %c1"        "\t# bug_entry::line\n"	\
> - 		     "\t.word %c2"        "\t# bug_entry::flags\n"	\
> - 		     "\t.org 2b+%c3\n"					\
> - 		     ".popsection\n"					\
> - 		     extra						\
> + 	asm_inline volatile(_BUG_FLAGS_ASM(ins, "%c0",			\
> + 					   "%c1", "%c2", "%c3", extra)	\
>  -		     : : "i" (__FILE__), "i" (__LINE__),		\
>  +		     : : "i" (WARN_CONDITION_STR(cond_str) __FILE__), "i" (__LINE__),		\
>   			 "i" (flags),					\
>   			 "i" (sizeof(struct bug_entry)));		\
>   } while (0)
> @@@ -92,11 -89,14 +89,14 @@@ do {								
>    * were to trigger, we'd rather wreck the machine in an attempt to get the
>    * message out than not know about it.
>    */
> + 
> + #define ARCH_WARN_REACHABLE	ANNOTATE_REACHABLE(1b)
> + 
>  -#define __WARN_FLAGS(flags)					\
>  +#define __WARN_FLAGS(cond_str, flags)				\
>   do {								\
>   	__auto_type __flags = BUGFLAG_WARNING|(flags);		\
>   	instrumentation_begin();				\
> - 	_BUG_FLAGS(cond_str, ASM_UD2, __flags, ANNOTATE_REACHABLE(1b)); \
>  -	_BUG_FLAGS(ASM_UD2, __flags, ARCH_WARN_REACHABLE);	\
> ++	_BUG_FLAGS(cond_str, ASM_UD2, __flags, ARCH_WARN_REACHABLE);	\
>   	instrumentation_end();					\
>   } while (0)
>   

This is now a conflict between the tip tree and Linus' tree.

-- 
Cheers,
Stephen Rothwell