2023-08-08 22:35:23

by Nick Desaulniers

[permalink] [raw]
Subject: [PATCH] i2c/busses: fix -Wmissing-variable-declarations

I'm looking to enable -Wmissing-variable-declarations behind W=1. 0day
bot spotted the following instance:

drivers/i2c/busses/i2c-amd756.c:286:20: warning: no previous extern
declaration for non-static variable 'amd756_smbus'
[-Wmissing-variable-declarations]
286 | struct i2c_adapter amd756_smbus = {
| ^
drivers/i2c/busses/i2c-amd756.c:286:1: note: declare 'static' if the
variable is not intended to be used outside of this translation unit
286 | struct i2c_adapter amd756_smbus = {
| ^

This symbol is referenced by more than one translation unit, so create
then include the correct header for their declarations.

Reported-by: kernel test robot <[email protected]>
Closes: https://lore.kernel.org/llvm/[email protected]/
Signed-off-by: Nick Desaulniers <[email protected]>
---
drivers/i2c/busses/i2c-amd756-s4882.c | 3 +--
drivers/i2c/busses/i2c-amd756.c | 1 +
drivers/i2c/busses/i2c-amd756.h | 3 +++
3 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/i2c/busses/i2c-amd756-s4882.c b/drivers/i2c/busses/i2c-amd756-s4882.c
index 063274388a75..8156cfc43df3 100644
--- a/drivers/i2c/busses/i2c-amd756-s4882.c
+++ b/drivers/i2c/busses/i2c-amd756-s4882.c
@@ -26,8 +26,7 @@
#include <linux/init.h>
#include <linux/i2c.h>
#include <linux/mutex.h>
-
-extern struct i2c_adapter amd756_smbus;
+#include "i2c-amd756.h"

static struct i2c_adapter *s4882_adapter;
static struct i2c_algorithm *s4882_algo;
diff --git a/drivers/i2c/busses/i2c-amd756.c b/drivers/i2c/busses/i2c-amd756.c
index ef1307a258e9..af77374d2ab3 100644
--- a/drivers/i2c/busses/i2c-amd756.c
+++ b/drivers/i2c/busses/i2c-amd756.c
@@ -31,6 +31,7 @@
#include <linux/i2c.h>
#include <linux/acpi.h>
#include <linux/io.h>
+#include "i2c-amd756.h"

/* AMD756 SMBus address offsets */
#define SMB_ADDR_OFFSET 0xE0
diff --git a/drivers/i2c/busses/i2c-amd756.h b/drivers/i2c/busses/i2c-amd756.h
new file mode 100644
index 000000000000..88698266d6d8
--- /dev/null
+++ b/drivers/i2c/busses/i2c-amd756.h
@@ -0,0 +1,3 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#include <linux/i2c.h>
+extern struct i2c_adapter amd756_smbus;

---
base-commit: 14f9643dc90adea074a0ffb7a17d337eafc6a5cc
change-id: 20230808-i2c-amd_static-81e5c27a84ce

Best regards,
--
Nick Desaulniers <[email protected]>



2023-08-09 20:02:42

by Andi Shyti

[permalink] [raw]
Subject: Re: [PATCH] i2c/busses: fix -Wmissing-variable-declarations

Hi Nick,

On Tue, Aug 08, 2023 at 09:56:16AM -0700, Nick Desaulniers wrote:
> I'm looking to enable -Wmissing-variable-declarations behind W=1. 0day
> bot spotted the following instance:
>
> drivers/i2c/busses/i2c-amd756.c:286:20: warning: no previous extern
> declaration for non-static variable 'amd756_smbus'
> [-Wmissing-variable-declarations]
> 286 | struct i2c_adapter amd756_smbus = {
> | ^
> drivers/i2c/busses/i2c-amd756.c:286:1: note: declare 'static' if the
> variable is not intended to be used outside of this translation unit
> 286 | struct i2c_adapter amd756_smbus = {
> | ^
>
> This symbol is referenced by more than one translation unit, so create
> then include the correct header for their declarations.
>
> Reported-by: kernel test robot <[email protected]>
> Closes: https://lore.kernel.org/llvm/[email protected]/
> Signed-off-by: Nick Desaulniers <[email protected]>

You might want to have a Fixes tag here and

Cc: Jean Delvare <[email protected]>

[...]

> --- /dev/null
> +++ b/drivers/i2c/busses/i2c-amd756.h
> @@ -0,0 +1,3 @@
> +/* SPDX-License-Identifier: GPL-2.0 */

Please, leave a space here.

And you might also want to have something like:

#ifndef __I2C_AMD_756_H__
#define __I2C_AMD_756_H__

> +#include <linux/i2c.h>

space here.

> +extern struct i2c_adapter amd756_smbus;

#endif /* __I2C_AMD_756_H__ */

Jean, any opinion on this patch, I don't really know this driver,
but is there a way to avoid this extern declaration.

Thanks,
Andi

2023-08-10 15:57:05

by Jean Delvare

[permalink] [raw]
Subject: Re: [PATCH] i2c/busses: fix -Wmissing-variable-declarations

Hi Andi, Nick,

On Wed, 09 Aug 2023 21:13:10 +0200, Andi Shyti wrote:
> On Tue, Aug 08, 2023 at 09:56:16AM -0700, Nick Desaulniers wrote:
> > I'm looking to enable -Wmissing-variable-declarations behind W=1. 0day
> > bot spotted the following instance:
> >
> > drivers/i2c/busses/i2c-amd756.c:286:20: warning: no previous extern
> > declaration for non-static variable 'amd756_smbus'
> > [-Wmissing-variable-declarations]
> > 286 | struct i2c_adapter amd756_smbus = {
> > | ^
> > drivers/i2c/busses/i2c-amd756.c:286:1: note: declare 'static' if the
> > variable is not intended to be used outside of this translation unit
> > 286 | struct i2c_adapter amd756_smbus = {
> > | ^
> >
> > This symbol is referenced by more than one translation unit, so create
> > then include the correct header for their declarations.
> >
> > Reported-by: kernel test robot <[email protected]>
> > Closes: https://lore.kernel.org/llvm/[email protected]/
> > Signed-off-by: Nick Desaulniers <[email protected]>
>
> You might want to have a Fixes tag here and
>
> Cc: Jean Delvare <[email protected]>

Fixes tag would cause unnecessary worry, with people backporting the
patch while it doesn't actually fix anything. No need for that.

>
> [...]
>
> > --- /dev/null
> > +++ b/drivers/i2c/busses/i2c-amd756.h
> > @@ -0,0 +1,3 @@
> > +/* SPDX-License-Identifier: GPL-2.0 */
>
> Please, leave a space here.
>
> And you might also want to have something like:
>
> #ifndef __I2C_AMD_756_H__
> #define __I2C_AMD_756_H__
>
> > +#include <linux/i2c.h>
>
> space here.
>
> > +extern struct i2c_adapter amd756_smbus;
>
> #endif /* __I2C_AMD_756_H__ */
>
> Jean, any opinion on this patch, I don't really know this driver,
> but is there a way to avoid this extern declaration.

Thanks for your review. I would personally not bother with a header
file, this is unnecessary burden. Just add the extern declaration to
i2c-amd756.c as was already done in i2c-amd756-s4882.c. The whole thing
is a horrible hack anyway and there won't be more occurrences of it, so
the more simple it stays, the better.

Some history: I wrote the pseudo-driver i2c-amd756-s4882 when the
i2c-core did not yet support multiplexing. Nowadays, proper support
would be implemented using i2c-mux-* and i2c-amd756-s4882.c would go
away entirely. Actually, I very much doubt any of these 2007 Tyan
server boards is still in activity today, so maybe we should just
delete the driver.

Note that i2c-nforce2.c will need the same fix as struct i2c_adapter
nforce2_smbus is extern as well.

--
Jean Delvare
SUSE L3 Support