Skip to contentSkip to conversation

staging: vc04_services: address W=1 warnings

PATCH In review Gaston Gonzalez 3 participants 7 messages Mar 2, 2022 – Mar 14, 2022

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

cover staging: vc04_services: address W=1 warnings

This set comprises two patches that fix two "no previous prototype" warnings in vc04_services.

Gaston Gonzalez (2):
staging: vchiq_arm: make vchiq_platform_get_arm_state() static
staging: vchiq_arm: add prototype of function vchiq_platform_init()

 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | 3 +--
 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.h | 2 ++
 2 files changed, 3 insertions(+), 2 deletions(-)
Signature · 1 line
2.35.1
#1 lore raw

PATCH 1/2 staging: vchiq_arm: make vchiq_platform_get_arm_state() static

Fix "no previous prototype" W=1 warning by making the function vchiq_platform_get_arm_state() static.

While at it, realign the function declaration in one line and reposition the asterisk symbol to fulfill the 'foo *bar' syntax.

---
 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c +1 -2
index 54ab6208ddae..f0bfacfdea80 100644
@@ -593,8 +593,7 @@ vchiq_platform_init_state(struct vchiq_state *state)
 	return 0;
 }
 
-struct vchiq_arm_state*
-vchiq_platform_get_arm_state(struct vchiq_state *state)
+static struct vchiq_arm_state *vchiq_platform_get_arm_state(struct vchiq_state *state)
 {
 	struct vchiq_2835_state *platform_state;
 
Signature · 1 line
2.35.1
#2 lore raw

PATCH 2/2 staging: vchiq_arm: add prototype of function vchiq_platform_init()

In reply to Gaston Gonzalez

Fix "no previous prototype" W=1 warning by adding the prototype of the function vchiq_platform_init().

Note: vchiq_platform_init() is only called once in vchiq_probe(), so presumably should be static function. However, making the function static breaks the build.

---
 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.h | 2 ++
 1 file changed, 2 insertions(+)
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.h +2 -0
index 2aa46b119a46..d72edaf7e5e9 100644
@@ -122,6 +122,8 @@ vchiq_instance_get_trace(struct vchiq_instance *instance);
 extern void
 vchiq_instance_set_trace(struct vchiq_instance *instance, int trace);
 
+int vchiq_platform_init(struct platform_device *pdev, struct vchiq_state *state);
+
 #if IS_ENABLED(CONFIG_VCHIQ_CDEV)
 
 extern void
Signature · 1 line
2.35.1
#3 lore raw

Re: [PATCH 2/2] staging: vchiq_arm: add prototype of function vchiq_platform_init()

Quoted 7 lines · Gaston Gonzalez

Fix "no previous prototype" W=1 warning by adding the prototype of the function vchiq_platform_init().

Note: vchiq_platform_init() is only called once in vchiq_probe(), so presumably should be static function. However, making the function static breaks the build.

That's weird. I don't have an ARM cross compile set up. How does the build break?

regards,
dan carpenter

#4 lore raw

Re: [PATCH 2/2] staging: vchiq_arm: add prototype of function vchiq_platform_init()

Quoted 9 lines · Dan Carpenter
Quoted 7 lines · Gaston Gonzalez

Fix "no previous prototype" W=1 warning by adding the prototype of the function vchiq_platform_init().

Note: vchiq_platform_init() is only called once in vchiq_probe(), so presumably should be static function. However, making the function static breaks the build.

Quoted 6 lines

That's weird. I don't have an ARM cross compile set up. How does the build break?

regards,
dan carpenter

Hi Dan,

Test building the driver in x86 I get the error pasted below.

However, now that you mention it, I made an ARM (64 bit) cross
compilation: making the function static builds OK without the warning. I'll to do the same for a 32 bit setup.

So I suppose that making the function static is the right approach ?

FWIW, branch and cross-compiler:

- Remote: https://github.com/raspberrypi/linux.git
- Branch: rpi-5.17.y
- gcc: aarch64-linux-gnu-gcc (Debian 10.2.1-6) 10.2.1 20210110

-> x86 build error:

CC [M] drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.o
In function ‘free_pagelist’,
inlined from ‘vchiq_complete_bulk’ at drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c:650:3:
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c:434:4: error: argument 2 null where non-null expected [-Werror=nonnull]

  434 |    memcpy((char *)kmap(pages[0]) +
      |    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  435 |     pagelist->offset,
      |     ~~~~~~~~~~~~~~~~~
  436 |     fragments,
      |     ~~~~~~~~~~
  437 |     head_bytes);
      |     ~~~~~~~~~~~
In file included from ./arch/x86/include/asm/string.h:5,
                 from ./include/linux/string.h:20,
                 from ./include/linux/bitmap.h:11,
                 from ./include/linux/cpumask.h:12,
                 from ./arch/x86/include/asm/cpumask.h:5,
                 from ./arch/x86/include/asm/msr.h:11,
                 from ./arch/x86/include/asm/processor.h:22,
                 from ./arch/x86/include/asm/timex.h:5,
                 from ./include/linux/timex.h:65,
                 from ./include/linux/time32.h:13,
                 from ./include/linux/time.h:60,
                 from ./include/linux/stat.h:19,
                 from ./include/linux/module.h:13,
                 from drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c:8:
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c: In function ‘vchiq_complete_bulk’:
./arch/x86/include/asm/string_64.h:14:14: note: in a call to function ‘memcpy’ declared here
   14 | extern void *memcpy(void *to, const void *from, size_t len);
      |              ^~~~~~

cc1: all warnings being treated as errors
make[1]: *** [scripts/Makefile.build:288: drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.o] Error 1
make: *** [Makefile:1831: drivers/staging/vc04_services] Error 2

regards,

Gaston

#5 lore raw

Re: [PATCH 2/2] staging: vchiq_arm: add prototype of function vchiq_platform_init()

Quoted 66 lines · Gaston Gonzalez
Quoted 9 lines · Dan Carpenter
Quoted 7 lines · Gaston Gonzalez

Fix "no previous prototype" W=1 warning by adding the prototype of the function vchiq_platform_init().

Note: vchiq_platform_init() is only called once in vchiq_probe(), so presumably should be static function. However, making the function static breaks the build.

Quoted 6 lines

That's weird. I don't have an ARM cross compile set up. How does the build break?

regards,
dan carpenter

Hi Dan,

Test building the driver in x86 I get the error pasted below.

However, now that you mention it, I made an ARM (64 bit) cross
compilation: making the function static builds OK without the warning. I'll to do the same for a 32 bit setup.

So I suppose that making the function static is the right approach ?

FWIW, branch and cross-compiler:

- Remote: https://github.com/raspberrypi/linux.git
- Branch: rpi-5.17.y
- gcc: aarch64-linux-gnu-gcc (Debian 10.2.1-6) 10.2.1 20210110

-> x86 build error:

CC [M] drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.o
In function ‘free_pagelist’,
inlined from ‘vchiq_complete_bulk’ at drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c:650:3:
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c:434:4: error: argument 2 null where non-null expected [-Werror=nonnull]

  434 |    memcpy((char *)kmap(pages[0]) +
      |    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  435 |     pagelist->offset,
      |     ~~~~~~~~~~~~~~~~~
  436 |     fragments,
      |     ~~~~~~~~~~
  437 |     head_bytes);
      |     ~~~~~~~~~~~
In file included from ./arch/x86/include/asm/string.h:5,
                 from ./include/linux/string.h:20,
                 from ./include/linux/bitmap.h:11,
                 from ./include/linux/cpumask.h:12,
                 from ./arch/x86/include/asm/cpumask.h:5,
                 from ./arch/x86/include/asm/msr.h:11,
                 from ./arch/x86/include/asm/processor.h:22,
                 from ./arch/x86/include/asm/timex.h:5,
                 from ./include/linux/timex.h:65,
                 from ./include/linux/time32.h:13,
                 from ./include/linux/time.h:60,
                 from ./include/linux/stat.h:19,
                 from ./include/linux/module.h:13,
                 from drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c:8:
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c: In function ‘vchiq_complete_bulk’:
./arch/x86/include/asm/string_64.h:14:14: note: in a call to function ‘memcpy’ declared here
   14 | extern void *memcpy(void *to, const void *from, size_t len);
      |              ^~~~~~
Quoted 3 lines

cc1: all warnings being treated as errors
make[1]: *** [scripts/Makefile.build:288: drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.o] Error 1
make: *** [Makefile:1831: drivers/staging/vc04_services] Error 2

That's so weird.

1) The GCC warning is a false positive, but -Werror means we have to deal with it.
2) I can't explain the false positive.
3) My guess is that making the function static affects how it is inlined so it gives the compiler more visibility into how free_pagelist()? is called so that's why it gets triggered because of the patch?
4) This is an x86 config and it's an ARM driver, but nothing in the Kconfig file says that vchiq_arm needs ARM or raspberry pi. Should there be? And a COMPILE_TEST option?

Anyway, we don't paper over warnings like this so the patch is not the correct thing. Especially we don't paper over it without a giant comment explaining how we filed a bug with GCC or whatever and a link to bugzilla and all that other stuff.

regards,
dan carpenter

maintainer
#6 lore raw

Re: [PATCH 2/2] staging: vchiq_arm: add prototype of function vchiq_platform_init()

In reply to Gaston Gonzalez
Quoted 17 lines · Gaston Gonzalez

Fix "no previous prototype" W=1 warning by adding the prototype of the function vchiq_platform_init().

Note: vchiq_platform_init() is only called once in vchiq_probe(), so presumably should be static function. However, making the function static breaks the build.

---
 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.h | 2 ++
 1 file changed, 2 insertions(+)
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.h +0 -0
index 2aa46b119a46..d72edaf7e5e9 100644

drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.h vchiq_instance_get_trace(struct vchiq_instance *instance); · line 126

Quoted 5 lines
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.h +2 -0
@@ -122,6 +122,8 @@ vchiq_instance_get_trace(struct vchiq_instance *instance);
 extern void
 vchiq_instance_set_trace(struct vchiq_instance *instance, int trace);
 
+int vchiq_platform_init(struct platform_device *pdev, struct vchiq_state *state);
+

It is a static function, so don't add a prototype here to say it is not :(

thanks,

greg k-h