2023-04-26 13:00:48

by Genjian

[permalink] [raw]
Subject: [PATCH] fix ___SYNC () build error when PROFILE_ALL_BRANCHES is enabled

From: Genjian Zhang <[email protected]>

compiler error (mips-linux-gnu-gcc (Debian 10.2.1-6) 10.2.1 20210110):

{standard input}: Assembler messages:
{standard input}:171: Error: found '(', expected: ')'
{standard input}:171: Error: found '(', expected: ')'
{standard input}:171: Error: non-constant expression in ".if" statement
{standard input}:171: Error: junk at end of line, first unrecognized
character is `('

Preprocessor expand ___SYNC () macros.However,'if' will be wrongly
replaced by C code when PROFILE_ALL_BRANCHES is enabled and ___SYNC
is used in inline assembly.This leads to syntax errors in the code.
Compilers report a lot of errors like the above.
Move '.if' into quoted strings to fix it.

Reported-by: k2ci <[email protected]>
Signed-off-by: Genjian Zhang <[email protected]>
---
arch/mips/include/asm/sync.h | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/arch/mips/include/asm/sync.h b/arch/mips/include/asm/sync.h
index aabd097933fe..d9f5a87424e7 100644
--- a/arch/mips/include/asm/sync.h
+++ b/arch/mips/include/asm/sync.h
@@ -175,7 +175,7 @@
*/
#ifdef CONFIG_CPU_HAS_SYNC
# define ____SYNC(_type, _reason, _else) \
- .if (( _type ) != -1) && ( _reason ); \
+ ((_type) != -1) && (_reason); \
.set push; \
.set MIPS_ISA_LEVEL_RAW; \
.rept __SYNC_rpt(_type); \
@@ -192,13 +192,15 @@
/*
* Preprocessor magic to expand macros used as arguments before we insert them
* into assembly code.
+ * In addition,‘if’ can not be substituted when CONFIG_PROFILE_ALL_BRANCHES is
+ * enabled.
*/
#ifdef __ASSEMBLY__
# define ___SYNC(type, reason, else) \
- ____SYNC(type, reason, else)
+ .if ____SYNC(type, reason, else)
#else
# define ___SYNC(type, reason, else) \
- __stringify(____SYNC(type, reason, else))
+ ".if" __stringify(____SYNC(type, reason, else))
#endif

#define __SYNC(type, reason) \
--
2.25.1


2023-04-26 13:05:30

by Genjian

[permalink] [raw]
Subject: Re: [PATCH] fix ___SYNC () build error when PROFILE_ALL_BRANCHES is enabled

On Wed, Apr 26, 2023 at 8:51 PM Genjian <[email protected]> wrote:
>
> From: Genjian Zhang <[email protected]>
>
> compiler error (mips-linux-gnu-gcc (Debian 10.2.1-6) 10.2.1 20210110):
>
> {standard input}: Assembler messages:
> {standard input}:171: Error: found '(', expected: ')'
> {standard input}:171: Error: found '(', expected: ')'
> {standard input}:171: Error: non-constant expression in ".if" statement
> {standard input}:171: Error: junk at end of line, first unrecognized
> character is `('
>
> Preprocessor expand ___SYNC () macros.However,'if' will be wrongly
> replaced by C code when PROFILE_ALL_BRANCHES is enabled and ___SYNC
> is used in inline assembly.This leads to syntax errors in the code.
> Compilers report a lot of errors like the above.
> Move '.if' into quoted strings to fix it.
>
> Reported-by: k2ci <[email protected]>
> Signed-off-by: Genjian Zhang <[email protected]>
> ---
> arch/mips/include/asm/sync.h | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/arch/mips/include/asm/sync.h b/arch/mips/include/asm/sync.h
> index aabd097933fe..d9f5a87424e7 100644
> --- a/arch/mips/include/asm/sync.h
> +++ b/arch/mips/include/asm/sync.h
> @@ -175,7 +175,7 @@
> */
> #ifdef CONFIG_CPU_HAS_SYNC
> # define ____SYNC(_type, _reason, _else) \
> - .if (( _type ) != -1) && ( _reason ); \
> + ((_type) != -1) && (_reason); \
> .set push; \
> .set MIPS_ISA_LEVEL_RAW; \
> .rept __SYNC_rpt(_type); \
> @@ -192,13 +192,15 @@
> /*
> * Preprocessor magic to expand macros used as arguments before we insert them
> * into assembly code.
> + * In addition,‘if’ can not be substituted when CONFIG_PROFILE_ALL_BRANCHES is
> + * enabled.
> */
> #ifdef __ASSEMBLY__
> # define ___SYNC(type, reason, else) \
> - ____SYNC(type, reason, else)
> + .if ____SYNC(type, reason, else)
> #else
> # define ___SYNC(type, reason, else) \
> - __stringify(____SYNC(type, reason, else))
> + ".if" __stringify(____SYNC(type, reason, else))
> #endif
>
> #define __SYNC(type, reason) \
> --
> 2.25.1
>

Maybe the readability of this modification is not very good. Any
comments and suggestions are welcome. Thanks.

2023-04-27 03:52:01

by Randy Dunlap

[permalink] [raw]
Subject: Re: [PATCH] fix ___SYNC () build error when PROFILE_ALL_BRANCHES is enabled

Hi--

>
> Maybe the readability of this modification is not very good. Any
> comments and suggestions are welcome. Thanks.

Some of the patch description could use some cleaning up,
then I have a question.


On 4/26/23 06:02, genjian zhang wrote:
> On Wed, Apr 26, 2023 at 8:51 PM Genjian <[email protected]> wrote:
>>
>> From: Genjian Zhang <[email protected]>
>>
>> compiler error (mips-linux-gnu-gcc (Debian 10.2.1-6) 10.2.1 20210110):
>>
>> {standard input}: Assembler messages:
>> {standard input}:171: Error: found '(', expected: ')'
>> {standard input}:171: Error: found '(', expected: ')'
>> {standard input}:171: Error: non-constant expression in ".if" statement
>> {standard input}:171: Error: junk at end of line, first unrecognized
>> character is `('
>>
>> Preprocessor expand ___SYNC () macros.However,'if' will be wrongly

expands ___SYNC() macros. However, 'if' will be wrongly

>> replaced by C code when PROFILE_ALL_BRANCHES is enabled and ___SYNC
>> is used in inline assembly.This leads to syntax errors in the code.

assembly. This

>> Compilers report a lot of errors like the above.
>> Move '.if' into quoted strings to fix it.
>>
>> Reported-by: k2ci <[email protected]>
>> Signed-off-by: Genjian Zhang <[email protected]>
>> ---
>> arch/mips/include/asm/sync.h | 8 +++++---
>> 1 file changed, 5 insertions(+), 3 deletions(-)
>>
>> diff --git a/arch/mips/include/asm/sync.h b/arch/mips/include/asm/sync.h
>> index aabd097933fe..d9f5a87424e7 100644
>> --- a/arch/mips/include/asm/sync.h
>> +++ b/arch/mips/include/asm/sync.h
>> @@ -175,7 +175,7 @@
>> */
>> #ifdef CONFIG_CPU_HAS_SYNC
>> # define ____SYNC(_type, _reason, _else) \
>> - .if (( _type ) != -1) && ( _reason ); \
>> + ((_type) != -1) && (_reason); \
>> .set push; \
>> .set MIPS_ISA_LEVEL_RAW; \
>> .rept __SYNC_rpt(_type); \
>> @@ -192,13 +192,15 @@
>> /*
>> * Preprocessor magic to expand macros used as arguments before we insert them
>> * into assembly code.
>> + * In addition,‘if’ can not be substituted when CONFIG_PROFILE_ALL_BRANCHES is

* In addition, 'if' cannot be

>> + * enabled.
>> */
>> #ifdef __ASSEMBLY__
>> # define ___SYNC(type, reason, else) \
>> - ____SYNC(type, reason, else)
>> + .if ____SYNC(type, reason, else)
>> #else
>> # define ___SYNC(type, reason, else) \
>> - __stringify(____SYNC(type, reason, else))
>> + ".if" __stringify(____SYNC(type, reason, else))
>> #endif
>>
>> #define __SYNC(type, reason) \
>> --
>> 2.25.1


Is this problem that you are fixing being aggravated (caused) by
the #define of if() in include/linux/compiler.h when CONFIG_PROFILE_ALL_BRANCHES
is set? I suspect that it is.
It wouldn't hurt to mention that (if I am correct).

Thanks.
--
~Randy

2023-04-27 07:24:15

by Genjian

[permalink] [raw]
Subject: Re: [PATCH] fix ___SYNC () build error when PROFILE_ALL_BRANCHES is enabled

On Thu, Apr 27, 2023 at 11:16 AM Randy Dunlap <[email protected]> wrote:
>
> Hi--
>
> >
> > Maybe the readability of this modification is not very good. Any
> > comments and suggestions are welcome. Thanks.
>
> Some of the patch description could use some cleaning up,
> then I have a question.
>
>
> On 4/26/23 06:02, genjian zhang wrote:
> > On Wed, Apr 26, 2023 at 8:51 PM Genjian <[email protected]> wrote:
> >>
> >> From: Genjian Zhang <[email protected]>
> >>
> >> compiler error (mips-linux-gnu-gcc (Debian 10.2.1-6) 10.2.1 20210110):
> >>
> >> {standard input}: Assembler messages:
> >> {standard input}:171: Error: found '(', expected: ')'
> >> {standard input}:171: Error: found '(', expected: ')'
> >> {standard input}:171: Error: non-constant expression in ".if" statement
> >> {standard input}:171: Error: junk at end of line, first unrecognized
> >> character is `('
> >>
> >> Preprocessor expand ___SYNC () macros.However,'if' will be wrongly
>
> expands ___SYNC() macros. However, 'if' will be wrongly
>
> >> replaced by C code when PROFILE_ALL_BRANCHES is enabled and ___SYNC
> >> is used in inline assembly.This leads to syntax errors in the code.
>
> assembly. This
>
> >> Compilers report a lot of errors like the above.
> >> Move '.if' into quoted strings to fix it.
> >>
> >> Reported-by: k2ci <[email protected]>
> >> Signed-off-by: Genjian Zhang <[email protected]>
> >> ---
> >> arch/mips/include/asm/sync.h | 8 +++++---
> >> 1 file changed, 5 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/arch/mips/include/asm/sync.h b/arch/mips/include/asm/sync.h
> >> index aabd097933fe..d9f5a87424e7 100644
> >> --- a/arch/mips/include/asm/sync.h
> >> +++ b/arch/mips/include/asm/sync.h
> >> @@ -175,7 +175,7 @@
> >> */
> >> #ifdef CONFIG_CPU_HAS_SYNC
> >> # define ____SYNC(_type, _reason, _else) \
> >> - .if (( _type ) != -1) && ( _reason ); \
> >> + ((_type) != -1) && (_reason); \
> >> .set push; \
> >> .set MIPS_ISA_LEVEL_RAW; \
> >> .rept __SYNC_rpt(_type); \
> >> @@ -192,13 +192,15 @@
> >> /*
> >> * Preprocessor magic to expand macros used as arguments before we insert them
> >> * into assembly code.
> >> + * In addition,‘if’ can not be substituted when CONFIG_PROFILE_ALL_BRANCHES is
>
> * In addition, 'if' cannot be
>
> >> + * enabled.
> >> */
> >> #ifdef __ASSEMBLY__
> >> # define ___SYNC(type, reason, else) \
> >> - ____SYNC(type, reason, else)
> >> + .if ____SYNC(type, reason, else)
> >> #else
> >> # define ___SYNC(type, reason, else) \
> >> - __stringify(____SYNC(type, reason, else))
> >> + ".if" __stringify(____SYNC(type, reason, else))
> >> #endif
> >>
> >> #define __SYNC(type, reason) \
> >> --
> >> 2.25.1
>
>
> Is this problem that you are fixing being aggravated (caused) by
> the #define of if() in include/linux/compiler.h when CONFIG_PROFILE_ALL_BRANCHES
> is set? I suspect that it is.

right .

> It wouldn't hurt to mention that (if I am correct).
>
> Thanks.
> --
> ~Randy

Thank you for your suggestions. I will send a patch v2.

2023-04-27 15:09:02

by Genjian

[permalink] [raw]
Subject: [PATCH v2] fix ___SYNC () build error when PROFILE_ALL_BRANCHES is enabled

From: Genjian Zhang <[email protected]>

compiler error (mips-linux-gnu-gcc (Debian 10.2.1-6) 10.2.1 20210110):

{standard input}: Assembler messages:
{standard input}:171: Error: found '(', expected: ')'
{standard input}:171: Error: found '(', expected: ')'
{standard input}:171: Error: non-constant expression in ".if" statement
{standard input}:171: Error: junk at end of line, first unrecognized
character is `('

Expands ___SYNC() macros. However, 'if' statement will be wrong
assembly.This Compilers report a lot of errors like the above.
this problem is caused by the #define of if() in
include/linux/compiler.h when CONFIG_PROFILE_ALL_BRANCHES
is set. Move '.if' into quoted strings to fix it.

Reported-by: k2ci <[email protected]>
Signed-off-by: Genjian Zhang <[email protected]>
---
arch/mips/include/asm/sync.h | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/arch/mips/include/asm/sync.h b/arch/mips/include/asm/sync.h
index aabd097933fe..56a4f6f6cdef 100644
--- a/arch/mips/include/asm/sync.h
+++ b/arch/mips/include/asm/sync.h
@@ -175,7 +175,7 @@
*/
#ifdef CONFIG_CPU_HAS_SYNC
# define ____SYNC(_type, _reason, _else) \
- .if (( _type ) != -1) && ( _reason ); \
+ ((_type) != -1) && (_reason); \
.set push; \
.set MIPS_ISA_LEVEL_RAW; \
.rept __SYNC_rpt(_type); \
@@ -192,13 +192,14 @@
/*
* Preprocessor magic to expand macros used as arguments before we insert them
* into assembly code.
+ * In addition,'if' cannot be enabled.
*/
#ifdef __ASSEMBLY__
# define ___SYNC(type, reason, else) \
- ____SYNC(type, reason, else)
+ .if ____SYNC(type, reason, else)
#else
# define ___SYNC(type, reason, else) \
- __stringify(____SYNC(type, reason, else))
+ ".if" __stringify(____SYNC(type, reason, else))
#endif

#define __SYNC(type, reason) \
--
2.25.1

2023-04-28 05:06:10

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v2] fix ___SYNC () build error when PROFILE_ALL_BRANCHES is enabled

Hi Genjian,

kernel test robot noticed the following build warnings:

[auto build test WARNING on linus/master]
[also build test WARNING on v6.3 next-20230427]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Genjian/fix-___SYNC-build-error-when-PROFILE_ALL_BRANCHES-is-enabled/20230427-230626
base: linus/master
patch link: https://lore.kernel.org/r/20230427150332.2978867-1-zhanggenjian%40kylinos.cn
patch subject: [PATCH v2] fix ___SYNC () build error when PROFILE_ALL_BRANCHES is enabled
config: mips-randconfig-s053-20230427 (https://download.01.org/0day-ci/archive/20230428/[email protected]/config)
compiler: mipsel-linux-gcc (GCC) 12.1.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.4-39-gce1a6720-dirty
# https://github.com/intel-lab-lkp/linux/commit/6eb50851d61ca808629a062e0545704eba5be950
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Genjian/fix-___SYNC-build-error-when-PROFILE_ALL_BRANCHES-is-enabled/20230427-230626
git checkout 6eb50851d61ca808629a062e0545704eba5be950
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=mips olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=mips SHELL=/bin/bash arch/mips/dec/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <[email protected]>
| Link: https://lore.kernel.org/oe-kbuild-all/[email protected]/

sparse warnings: (new ones prefixed by >>)
>> arch/mips/dec/kn01-berr.c:104:34: sparse: sparse: cast removes address space '__user' of expression

vim +/__user +104 arch/mips/dec/kn01-berr.c

69c75fb458cd81 Maciej W. Rozycki 2005-06-22 59
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 60 static int dec_kn01_be_backend(struct pt_regs *regs, int is_fixup, int invoker)
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 61 {
a5fc9c0bbee8b9 Maciej W. Rozycki 2005-07-01 62 volatile u32 *kn01_erraddr = (void *)CKSEG1ADDR(KN01_SLOT_BASE +
a5fc9c0bbee8b9 Maciej W. Rozycki 2005-07-01 63 KN01_ERRADDR);
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 64
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 65 static const char excstr[] = "exception";
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 66 static const char intstr[] = "interrupt";
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 67 static const char cpustr[] = "CPU";
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 68 static const char mreadstr[] = "memory read";
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 69 static const char readstr[] = "read";
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 70 static const char writestr[] = "write";
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 71 static const char timestr[] = "timeout";
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 72 static const char paritystr[] = "parity error";
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 73
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 74 int data = regs->cp0_cause & 4;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 75 unsigned int __user *pc = (unsigned int __user *)regs->cp0_epc +
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 76 ((regs->cp0_cause & CAUSEF_BD) != 0);
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 77 union mips_instruction insn;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 78 unsigned long entrylo, offset;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 79 long asid, entryhi, vaddr;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 80
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 81 const char *kind, *agent, *cycle, *event;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 82 unsigned long address;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 83
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 84 u32 erraddr = *kn01_erraddr;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 85 int action = MIPS_BE_FATAL;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 86
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 87 /* Ack ASAP, so that any subsequent errors get caught. */
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 88 dec_kn01_be_ack();
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 89
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 90 kind = invoker ? intstr : excstr;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 91
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 92 agent = cpustr;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 93
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 94 if (invoker)
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 95 address = erraddr;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 96 else {
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 97 /* Bloody hardware doesn't record the address for reads... */
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 98 if (data) {
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 99 /* This never faults. */
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 100 __get_user(insn.word, pc);
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 101 vaddr = regs->regs[insn.i_format.rs] +
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 102 insn.i_format.simmediate;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 103 } else
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 @104 vaddr = (long)pc;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 105 if (KSEGX(vaddr) == CKSEG0 || KSEGX(vaddr) == CKSEG1)
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 106 address = CPHYSADDR(vaddr);
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 107 else {
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 108 /* Peek at what physical address the CPU used. */
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 109 asid = read_c0_entryhi();
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 110 entryhi = asid & (PAGE_SIZE - 1);
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 111 entryhi |= vaddr & ~(PAGE_SIZE - 1);
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 112 write_c0_entryhi(entryhi);
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 113 BARRIER;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 114 tlb_probe();
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 115 /* No need to check for presence. */
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 116 tlb_read();
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 117 entrylo = read_c0_entrylo0();
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 118 write_c0_entryhi(asid);
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 119 offset = vaddr & (PAGE_SIZE - 1);
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 120 address = (entrylo & ~(PAGE_SIZE - 1)) | offset;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 121 }
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 122 }
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 123
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 124 /* Treat low 256MB as memory, high -- as I/O. */
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 125 if (address < 0x10000000) {
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 126 cycle = mreadstr;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 127 event = paritystr;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 128 } else {
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 129 cycle = invoker ? writestr : readstr;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 130 event = timestr;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 131 }
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 132
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 133 if (is_fixup)
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 134 action = MIPS_BE_FIXUP;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 135
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 136 if (action != MIPS_BE_FIXUP)
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 137 printk(KERN_ALERT "Bus error %s: %s %s %s at %#010lx\n",
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 138 kind, agent, cycle, event, address);
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 139
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 140 return action;
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 141 }
69c75fb458cd81 Maciej W. Rozycki 2005-06-22 142

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests

2023-04-28 07:19:48

by Genjian

[permalink] [raw]
Subject: Re: [PATCH v2] fix ___SYNC () build error when PROFILE_ALL_BRANCHES is enabled

On Thu, Apr 27, 2023 at 11:05 PM Genjian <[email protected]> wrote:
>
> From: Genjian Zhang <[email protected]>
>
> compiler error (mips-linux-gnu-gcc (Debian 10.2.1-6) 10.2.1 20210110):
>
> {standard input}: Assembler messages:
> {standard input}:171: Error: found '(', expected: ')'
> {standard input}:171: Error: found '(', expected: ')'
> {standard input}:171: Error: non-constant expression in ".if" statement
> {standard input}:171: Error: junk at end of line, first unrecognized
> character is `('
>
> Expands ___SYNC() macros. However, 'if' statement will be wrong
> assembly.This Compilers report a lot of errors like the above.
> this problem is caused by the #define of if() in
> include/linux/compiler.h when CONFIG_PROFILE_ALL_BRANCHES
> is set. Move '.if' into quoted strings to fix it.
>
> Reported-by: k2ci <[email protected]>
> Signed-off-by: Genjian Zhang <[email protected]>
> ---
> arch/mips/include/asm/sync.h | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/arch/mips/include/asm/sync.h b/arch/mips/include/asm/sync.h
> index aabd097933fe..56a4f6f6cdef 100644
> --- a/arch/mips/include/asm/sync.h
> +++ b/arch/mips/include/asm/sync.h
> @@ -175,7 +175,7 @@
> */
> #ifdef CONFIG_CPU_HAS_SYNC
> # define ____SYNC(_type, _reason, _else) \
> - .if (( _type ) != -1) && ( _reason ); \
> + ((_type) != -1) && (_reason); \
> .set push; \
> .set MIPS_ISA_LEVEL_RAW; \
> .rept __SYNC_rpt(_type); \
> @@ -192,13 +192,14 @@
> /*
> * Preprocessor magic to expand macros used as arguments before we insert them
> * into assembly code.
> + * In addition,'if' cannot be enabled.
> */
> #ifdef __ASSEMBLY__
> # define ___SYNC(type, reason, else) \
> - ____SYNC(type, reason, else)
> + .if ____SYNC(type, reason, else)
> #else
> # define ___SYNC(type, reason, else) \
> - __stringify(____SYNC(type, reason, else))
> + ".if" __stringify(____SYNC(type, reason, else))
> #endif
>
> #define __SYNC(type, reason) \
> --
> 2.25.1
>

This patch does not take into account the situation that CPU_HAS_SYNC
is not set. I will revise it later.

Thanks.
--
Genjian

2023-04-28 12:08:50

by Thomas Bogendoerfer

[permalink] [raw]
Subject: Re: [PATCH v2] fix ___SYNC () build error when PROFILE_ALL_BRANCHES is enabled

On Fri, Apr 28, 2023 at 03:13:32PM +0800, genjian zhang wrote:
> On Thu, Apr 27, 2023 at 11:05 PM Genjian <[email protected]> wrote:
> >
> > From: Genjian Zhang <[email protected]>
> >
> > compiler error (mips-linux-gnu-gcc (Debian 10.2.1-6) 10.2.1 20210110):
> >
> > {standard input}: Assembler messages:
> > {standard input}:171: Error: found '(', expected: ')'
> > {standard input}:171: Error: found '(', expected: ')'
> > {standard input}:171: Error: non-constant expression in ".if" statement
> > {standard input}:171: Error: junk at end of line, first unrecognized
> > character is `('
> >
> > Expands ___SYNC() macros. However, 'if' statement will be wrong
> > assembly.This Compilers report a lot of errors like the above.
> > this problem is caused by the #define of if() in
> > include/linux/compiler.h when CONFIG_PROFILE_ALL_BRANCHES
> > is set. Move '.if' into quoted strings to fix it.
> >
> > Reported-by: k2ci <[email protected]>
> > Signed-off-by: Genjian Zhang <[email protected]>
> > ---
> > arch/mips/include/asm/sync.h | 7 ++++---
> > 1 file changed, 4 insertions(+), 3 deletions(-)
> >
> > diff --git a/arch/mips/include/asm/sync.h b/arch/mips/include/asm/sync.h
> > index aabd097933fe..56a4f6f6cdef 100644
> > --- a/arch/mips/include/asm/sync.h
> > +++ b/arch/mips/include/asm/sync.h
> > @@ -175,7 +175,7 @@
> > */
> > #ifdef CONFIG_CPU_HAS_SYNC
> > # define ____SYNC(_type, _reason, _else) \
> > - .if (( _type ) != -1) && ( _reason ); \
> > + ((_type) != -1) && (_reason); \
> > .set push; \
> > .set MIPS_ISA_LEVEL_RAW; \
> > .rept __SYNC_rpt(_type); \
> > @@ -192,13 +192,14 @@
> > /*
> > * Preprocessor magic to expand macros used as arguments before we insert them
> > * into assembly code.
> > + * In addition,'if' cannot be enabled.
> > */
> > #ifdef __ASSEMBLY__
> > # define ___SYNC(type, reason, else) \
> > - ____SYNC(type, reason, else)
> > + .if ____SYNC(type, reason, else)
> > #else
> > # define ___SYNC(type, reason, else) \
> > - __stringify(____SYNC(type, reason, else))
> > + ".if" __stringify(____SYNC(type, reason, else))
> > #endif
> >
> > #define __SYNC(type, reason) \
> > --
> > 2.25.1
> >
>
> This patch does not take into account the situation that CPU_HAS_SYNC
> is not set. I will revise it later.

please post as a new mail not as a replay to this thread.

Thomas.

--
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea. [ RFC1925, 2.3 ]

2023-05-13 20:40:28

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v2] fix ___SYNC () build error when PROFILE_ALL_BRANCHES is enabled

Hi Genjian,

kernel test robot noticed the following build warnings:

[auto build test WARNING on linus/master]
[also build test WARNING on v6.4-rc1 next-20230512]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Genjian/fix-___SYNC-build-error-when-PROFILE_ALL_BRANCHES-is-enabled/20230427-230626
base: linus/master
patch link: https://lore.kernel.org/r/20230427150332.2978867-1-zhanggenjian%40kylinos.cn
patch subject: [PATCH v2] fix ___SYNC () build error when PROFILE_ALL_BRANCHES is enabled
config: mips-decstation_defconfig (https://download.01.org/0day-ci/archive/20230514/[email protected]/config)
compiler: mipsel-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/6eb50851d61ca808629a062e0545704eba5be950
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Genjian/fix-___SYNC-build-error-when-PROFILE_ALL_BRANCHES-is-enabled/20230427-230626
git checkout 6eb50851d61ca808629a062e0545704eba5be950
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=mips olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=mips SHELL=/bin/bash arch/mips/mm/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <[email protected]>
| Link: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All warnings (new ones prefixed by >>):

arch/mips/mm/c-r3k.c:28:15: warning: no previous prototype for 'r3k_cache_size' [-Wmissing-prototypes]
28 | unsigned long r3k_cache_size(unsigned long ca_flags)
| ^~~~~~~~~~~~~~
arch/mips/mm/c-r3k.c:63:15: warning: no previous prototype for 'r3k_cache_lsize' [-Wmissing-prototypes]
63 | unsigned long r3k_cache_lsize(unsigned long ca_flags)
| ^~~~~~~~~~~~~~~
arch/mips/mm/c-r3k.c:286:6: warning: no previous prototype for 'r3k_cache_init' [-Wmissing-prototypes]
286 | void r3k_cache_init(void)
| ^~~~~~~~~~~~~~
{standard input}: Assembler messages:
{standard input}:422: Error: non-constant expression in ".if" statement
{standard input}: Error: end of file inside conditional
{standard input}:422: Error: here is the start of the unterminated conditional
>> {standard input}: Warning: missing .end at end of assembly

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests

2023-05-13 23:33:43

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v2] fix ___SYNC () build error when PROFILE_ALL_BRANCHES is enabled

Hi Genjian,

kernel test robot noticed the following build errors:

[auto build test ERROR on linus/master]
[also build test ERROR on v6.4-rc1 next-20230512]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Genjian/fix-___SYNC-build-error-when-PROFILE_ALL_BRANCHES-is-enabled/20230427-230626
base: linus/master
patch link: https://lore.kernel.org/r/20230427150332.2978867-1-zhanggenjian%40kylinos.cn
patch subject: [PATCH v2] fix ___SYNC () build error when PROFILE_ALL_BRANCHES is enabled
config: mips-decstation_defconfig (https://download.01.org/0day-ci/archive/20230514/[email protected]/config)
compiler: mipsel-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/6eb50851d61ca808629a062e0545704eba5be950
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Genjian/fix-___SYNC-build-error-when-PROFILE_ALL_BRANCHES-is-enabled/20230427-230626
git checkout 6eb50851d61ca808629a062e0545704eba5be950
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=mips olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=mips SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <[email protected]>
| Link: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All errors (new ones prefixed by >>):

init/main.c:779:20: warning: no previous prototype for 'arch_post_acpi_subsys_init' [-Wmissing-prototypes]
779 | void __init __weak arch_post_acpi_subsys_init(void) { }
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
init/main.c:791:20: warning: no previous prototype for 'mem_encrypt_init' [-Wmissing-prototypes]
791 | void __init __weak mem_encrypt_init(void) { }
| ^~~~~~~~~~~~~~~~
init/main.c:793:20: warning: no previous prototype for 'poking_init' [-Wmissing-prototypes]
793 | void __init __weak poking_init(void) { }
| ^~~~~~~~~~~
{standard input}: Assembler messages:
{standard input}:2288: Error: non-constant expression in ".if" statement
>> {standard input}: Error: end of file inside conditional
>> {standard input}:2288: Error: here is the start of the unterminated conditional
{standard input}: Warning: missing .end at end of assembly
--
{standard input}: Assembler messages:
{standard input}:131: Error: non-constant expression in ".if" statement
>> {standard input}: Error: end of file inside conditional
{standard input}:131: Error: here is the start of the unterminated conditional
{standard input}: Warning: missing .end at end of assembly
--
{standard input}: Assembler messages:
{standard input}:245: Error: non-constant expression in ".if" statement
>> {standard input}: Error: end of file inside conditional
{standard input}:245: Error: here is the start of the unterminated conditional
{standard input}: Warning: missing .end at end of assembly
--
{standard input}: Assembler messages:
{standard input}:139: Error: non-constant expression in ".if" statement
>> {standard input}: Error: end of file inside conditional
{standard input}:898: Error: here is the start of the unterminated conditional
{standard input}: Warning: missing .end at end of assembly
--
{standard input}: Assembler messages:
{standard input}:67: Error: non-constant expression in ".if" statement
>> {standard input}: Error: end of file inside conditional
{standard input}:149: Error: here is the start of the unterminated conditional
{standard input}: Warning: missing .end at end of assembly
--
arch/mips/kernel/syscall.c:51:16: warning: no previous prototype for 'sysm_pipe' [-Wmissing-prototypes]
51 | asmlinkage int sysm_pipe(void)
| ^~~~~~~~~
{standard input}: Assembler messages:
{standard input}:356: Error: non-constant expression in ".if" statement
>> {standard input}: Error: end of file inside conditional
{standard input}:356: Error: here is the start of the unterminated conditional
{standard input}: Warning: missing .end at end of assembly
--
{standard input}: Assembler messages:
{standard input}:178: Error: non-constant expression in ".if" statement
>> {standard input}: Error: end of file inside conditional
{standard input}:878: Error: here is the start of the unterminated conditional
{standard input}: Warning: missing .end at end of assembly
--
{standard input}: Assembler messages:
{standard input}:90: Error: non-constant expression in ".if" statement
>> {standard input}: Error: end of file inside conditional
{standard input}:169: Error: here is the start of the unterminated conditional
{standard input}: Warning: missing .end at end of assembly
--
{standard input}: Assembler messages:
{standard input}:35: Error: non-constant expression in ".if" statement
>> {standard input}: Error: end of file inside conditional
{standard input}:513: Error: here is the start of the unterminated conditional
{standard input}: Warning: missing .end at end of assembly
--
{standard input}: Assembler messages:
{standard input}:100: Error: non-constant expression in ".if" statement
>> {standard input}: Error: end of file inside conditional
{standard input}:138: Error: here is the start of the unterminated conditional
{standard input}: Warning: missing .end at end of assembly
--
{standard input}: Assembler messages:
{standard input}:44: Error: non-constant expression in ".if" statement
>> {standard input}: Error: end of file inside conditional
{standard input}:332: Error: here is the start of the unterminated conditional
{standard input}: Warning: missing .end at end of assembly
..

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests