[PATCH] RISC-V: uaccess: Wrap the get_user_8 uaccess macro

Palmer Dabbelt posted 1 patch 4 months ago
arch/riscv/include/asm/uaccess.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
[PATCH] RISC-V: uaccess: Wrap the get_user_8 uaccess macro
Posted by Palmer Dabbelt 4 months ago
From: Palmer Dabbelt <palmer@dabbelt.com>

I must have lost this rebasing things during the merge window, I know I
got it at some point but it's not here now.  Without this I get warnings
along the lines of

    include/linux/fs.h:3975:15: warning: label followed by a declaration is a C23 extension [-Wc23-extensions]
     3975 |         if (unlikely(get_user(c, path)))
          |                      ^
    arch/riscv/include/asm/uaccess.h:274:3: note: expanded from macro 'get_user'
      274 |                 __get_user((x), __p) :                          \
          |                 ^
    arch/riscv/include/asm/uaccess.h:244:2: note: expanded from macro '__get_user'
      244 |         __get_user_error(__gu_val, __gu_ptr, __gu_err);         \
          |         ^
    arch/riscv/include/asm/uaccess.h:207:2: note: expanded from macro '__get_user_error'
      207 |         __ge  LD [M]  net/802/psnap.ko
    t_user_nocheck(x, ptr, __gu_failed);                        \
          |         ^
    arch/riscv/include/asm/uaccess.h:196:3: note: expanded from macro '__get_user_nocheck'
      196 |                 __get_user_8((x), __gu_ptr, label);             \
          |                 ^
    arch/riscv/include/asm/uaccess.h:130:2: note: expanded from macro '__get_user_8'
      130 |         u32 __user *__ptr = (u32 __user *)(ptr);                \
          |         ^

Signed-off-by: Palmer Dabbelt <palmer@dabbelt.com>
---
 arch/riscv/include/asm/uaccess.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/riscv/include/asm/uaccess.h b/arch/riscv/include/asm/uaccess.h
index d472da4450e6..525e50db24f7 100644
--- a/arch/riscv/include/asm/uaccess.h
+++ b/arch/riscv/include/asm/uaccess.h
@@ -127,6 +127,7 @@ do {								\
 
 #ifdef CONFIG_CC_HAS_ASM_GOTO_OUTPUT
 #define __get_user_8(x, ptr, label)				\
+do {								\
 	u32 __user *__ptr = (u32 __user *)(ptr);		\
 	u32 __lo, __hi;						\
 	asm_goto_output(					\
@@ -141,7 +142,7 @@ do {								\
 		: : label);                                     \
 	(x) = (__typeof__(x))((__typeof__((x) - (x)))(		\
 		(((u64)__hi << 32) | __lo)));			\
-
+} while (0)
 #else /* !CONFIG_CC_HAS_ASM_GOTO_OUTPUT */
 #define __get_user_8(x, ptr, label)				\
 do {								\
-- 
2.39.5 (Apple Git-154)
Re: [PATCH] RISC-V: uaccess: Wrap the get_user_8 uaccess macro
Posted by Alexandre Ghiti 4 months ago
On 6/10/25 23:30, Palmer Dabbelt wrote:
> From: Palmer Dabbelt <palmer@dabbelt.com>
>
> I must have lost this rebasing things during the merge window, I know I
> got it at some point but it's not here now.  Without this I get warnings
> along the lines of
>
>      include/linux/fs.h:3975:15: warning: label followed by a declaration is a C23 extension [-Wc23-extensions]
>       3975 |         if (unlikely(get_user(c, path)))
>            |                      ^
>      arch/riscv/include/asm/uaccess.h:274:3: note: expanded from macro 'get_user'
>        274 |                 __get_user((x), __p) :                          \
>            |                 ^
>      arch/riscv/include/asm/uaccess.h:244:2: note: expanded from macro '__get_user'
>        244 |         __get_user_error(__gu_val, __gu_ptr, __gu_err);         \
>            |         ^
>      arch/riscv/include/asm/uaccess.h:207:2: note: expanded from macro '__get_user_error'
>        207 |         __ge  LD [M]  net/802/psnap.ko
>      t_user_nocheck(x, ptr, __gu_failed);                        \
>            |         ^
>      arch/riscv/include/asm/uaccess.h:196:3: note: expanded from macro '__get_user_nocheck'
>        196 |                 __get_user_8((x), __gu_ptr, label);             \
>            |                 ^
>      arch/riscv/include/asm/uaccess.h:130:2: note: expanded from macro '__get_user_8'
>        130 |         u32 __user *__ptr = (u32 __user *)(ptr);                \
>            |         ^
>
> Signed-off-by: Palmer Dabbelt <palmer@dabbelt.com>
> ---
>   arch/riscv/include/asm/uaccess.h | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/arch/riscv/include/asm/uaccess.h b/arch/riscv/include/asm/uaccess.h
> index d472da4450e6..525e50db24f7 100644
> --- a/arch/riscv/include/asm/uaccess.h
> +++ b/arch/riscv/include/asm/uaccess.h
> @@ -127,6 +127,7 @@ do {								\
>   
>   #ifdef CONFIG_CC_HAS_ASM_GOTO_OUTPUT
>   #define __get_user_8(x, ptr, label)				\
> +do {								\
>   	u32 __user *__ptr = (u32 __user *)(ptr);		\
>   	u32 __lo, __hi;						\
>   	asm_goto_output(					\
> @@ -141,7 +142,7 @@ do {								\
>   		: : label);                                     \
>   	(x) = (__typeof__(x))((__typeof__((x) - (x)))(		\
>   		(((u64)__hi << 32) | __lo)));			\
> -
> +} while (0)
>   #else /* !CONFIG_CC_HAS_ASM_GOTO_OUTPUT */
>   #define __get_user_8(x, ptr, label)				\
>   do {								\


I had come up with the same fix so:

Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com>
Re: [PATCH] RISC-V: uaccess: Wrap the get_user_8 uaccess macro
Posted by Palmer Dabbelt 4 months ago
On Wed, 11 Jun 2025 00:31:18 PDT (-0700), Alexandre Ghiti wrote:
> On 6/10/25 23:30, Palmer Dabbelt wrote:
>> From: Palmer Dabbelt <palmer@dabbelt.com>
>>
>> I must have lost this rebasing things during the merge window, I know I
>> got it at some point but it's not here now.  Without this I get warnings
>> along the lines of
>>
>>      include/linux/fs.h:3975:15: warning: label followed by a declaration is a C23 extension [-Wc23-extensions]
>>       3975 |         if (unlikely(get_user(c, path)))
>>            |                      ^
>>      arch/riscv/include/asm/uaccess.h:274:3: note: expanded from macro 'get_user'
>>        274 |                 __get_user((x), __p) :                          \
>>            |                 ^
>>      arch/riscv/include/asm/uaccess.h:244:2: note: expanded from macro '__get_user'
>>        244 |         __get_user_error(__gu_val, __gu_ptr, __gu_err);         \
>>            |         ^
>>      arch/riscv/include/asm/uaccess.h:207:2: note: expanded from macro '__get_user_error'
>>        207 |         __ge  LD [M]  net/802/psnap.ko
>>      t_user_nocheck(x, ptr, __gu_failed);                        \
>>            |         ^
>>      arch/riscv/include/asm/uaccess.h:196:3: note: expanded from macro '__get_user_nocheck'
>>        196 |                 __get_user_8((x), __gu_ptr, label);             \
>>            |                 ^
>>      arch/riscv/include/asm/uaccess.h:130:2: note: expanded from macro '__get_user_8'
>>        130 |         u32 __user *__ptr = (u32 __user *)(ptr);                \
>>            |         ^
>>
>> Signed-off-by: Palmer Dabbelt <palmer@dabbelt.com>
>> ---
>>   arch/riscv/include/asm/uaccess.h | 3 ++-
>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/arch/riscv/include/asm/uaccess.h b/arch/riscv/include/asm/uaccess.h
>> index d472da4450e6..525e50db24f7 100644
>> --- a/arch/riscv/include/asm/uaccess.h
>> +++ b/arch/riscv/include/asm/uaccess.h
>> @@ -127,6 +127,7 @@ do {								\
>>
>>   #ifdef CONFIG_CC_HAS_ASM_GOTO_OUTPUT
>>   #define __get_user_8(x, ptr, label)				\
>> +do {								\
>>   	u32 __user *__ptr = (u32 __user *)(ptr);		\
>>   	u32 __lo, __hi;						\
>>   	asm_goto_output(					\
>> @@ -141,7 +142,7 @@ do {								\
>>   		: : label);                                     \
>>   	(x) = (__typeof__(x))((__typeof__((x) - (x)))(		\
>>   		(((u64)__hi << 32) | __lo)));			\
>> -
>> +} while (0)
>>   #else /* !CONFIG_CC_HAS_ASM_GOTO_OUTPUT */
>>   #define __get_user_8(x, ptr, label)				\
>>   do {								\
>
>
> I had come up with the same fix so:
>
> Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com>

Thanks, and I guess it should also be

Fixes: f6bff7827a48 ("riscv: uaccess: use 'asm_goto_output' for get_user()")

I'm going to put it on fixes.