* [PATCH] net: smc91x: Fix pointer types
@ 2024-05-16 12:11 Thorsten Blum
2024-05-16 14:13 ` Andrew Lunn
2024-05-16 15:28 ` [PATCH] " Nicolas Pitre
0 siblings, 2 replies; 11+ messages in thread
From: Thorsten Blum @ 2024-05-16 12:11 UTC (permalink / raw)
To: Nicolas Pitre, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, John Paul Adrian Glaubitz, Arnd Bergmann,
Andrew Lunn
Cc: netdev, linux-kernel, Thorsten Blum, kernel test robot
Use void __iomem pointers as parameters for mcf_insw() and mcf_outsw()
to align with the parameter types of readw() and writew().
Consistently call SMC_outsw(), SMC_outsb(), SMC_insw(), and SMC_insb()
with void __iomem pointers to address the following warnings reported by
kernel test robot:
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: warning: incorrect type in argument 1 (different address spaces)
drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: expected void *a
drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: got void [noderef] __iomem *
Signed-off-by: Thorsten Blum <thorsten.blum@toblux.com>
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202405160853.3qyaSj8w-lkp@intel.com/
---
drivers/net/ethernet/smsc/smc91x.h | 34 +++++++++++++++---------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/drivers/net/ethernet/smsc/smc91x.h b/drivers/net/ethernet/smsc/smc91x.h
index 45ef5ac0788a..204fbb5c975c 100644
--- a/drivers/net/ethernet/smsc/smc91x.h
+++ b/drivers/net/ethernet/smsc/smc91x.h
@@ -142,14 +142,14 @@ static inline void _SMC_outw_align4(u16 val, void __iomem *ioaddr, int reg,
#define SMC_CAN_USE_32BIT 0
#define SMC_NOWAIT 1
-static inline void mcf_insw(void *a, unsigned char *p, int l)
+static inline void mcf_insw(void __iomem *a, unsigned char *p, int l)
{
u16 *wp = (u16 *) p;
while (l-- > 0)
*wp++ = readw(a);
}
-static inline void mcf_outsw(void *a, unsigned char *p, int l)
+static inline void mcf_outsw(void __iomem *a, unsigned char *p, int l)
{
u16 *wp = (u16 *) p;
while (l-- > 0)
@@ -1026,15 +1026,15 @@ static const char * chip_ids[ 16 ] = {
} \
} while (0)
-#define SMC_PUSH_DATA(lp, p, l) \
+#define SMC_PUSH_DATA(lp, p, l) \
do { \
- if (SMC_32BIT(lp)) { \
+ void __iomem *__ioaddr = ioaddr; \
+ if (SMC_32BIT(lp)) { \
void *__ptr = (p); \
int __len = (l); \
- void __iomem *__ioaddr = ioaddr; \
if (__len >= 2 && (unsigned long)__ptr & 2) { \
__len -= 2; \
- SMC_outsw(ioaddr, DATA_REG(lp), __ptr, 1); \
+ SMC_outsw(__ioaddr, DATA_REG(lp), __ptr, 1); \
__ptr += 2; \
} \
if (SMC_CAN_USE_DATACS && lp->datacs) \
@@ -1042,20 +1042,20 @@ static const char * chip_ids[ 16 ] = {
SMC_outsl(__ioaddr, DATA_REG(lp), __ptr, __len>>2); \
if (__len & 2) { \
__ptr += (__len & ~3); \
- SMC_outsw(ioaddr, DATA_REG(lp), __ptr, 1); \
+ SMC_outsw(__ioaddr, DATA_REG(lp), __ptr, 1); \
} \
} else if (SMC_16BIT(lp)) \
- SMC_outsw(ioaddr, DATA_REG(lp), p, (l) >> 1); \
- else if (SMC_8BIT(lp)) \
- SMC_outsb(ioaddr, DATA_REG(lp), p, l); \
+ SMC_outsw(__ioaddr, DATA_REG(lp), p, (l) >> 1); \
+ else if (SMC_8BIT(lp)) \
+ SMC_outsb(__ioaddr, DATA_REG(lp), p, l); \
} while (0)
-#define SMC_PULL_DATA(lp, p, l) \
+#define SMC_PULL_DATA(lp, p, l) \
do { \
- if (SMC_32BIT(lp)) { \
+ void __iomem *__ioaddr = ioaddr; \
+ if (SMC_32BIT(lp)) { \
void *__ptr = (p); \
int __len = (l); \
- void __iomem *__ioaddr = ioaddr; \
if ((unsigned long)__ptr & 2) { \
/* \
* We want 32bit alignment here. \
@@ -1072,7 +1072,7 @@ static const char * chip_ids[ 16 ] = {
*/ \
__ptr -= 2; \
__len += 2; \
- SMC_SET_PTR(lp, \
+ SMC_SET_PTR(lp, \
2|PTR_READ|PTR_RCV|PTR_AUTOINC); \
} \
if (SMC_CAN_USE_DATACS && lp->datacs) \
@@ -1080,9 +1080,9 @@ static const char * chip_ids[ 16 ] = {
__len += 2; \
SMC_insl(__ioaddr, DATA_REG(lp), __ptr, __len>>2); \
} else if (SMC_16BIT(lp)) \
- SMC_insw(ioaddr, DATA_REG(lp), p, (l) >> 1); \
- else if (SMC_8BIT(lp)) \
- SMC_insb(ioaddr, DATA_REG(lp), p, l); \
+ SMC_insw(__ioaddr, DATA_REG(lp), p, (l) >> 1); \
+ else if (SMC_8BIT(lp)) \
+ SMC_insb(__ioaddr, DATA_REG(lp), p, l); \
} while (0)
#endif /* _SMC91X_H_ */
--
2.45.0
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] net: smc91x: Fix pointer types
2024-05-16 12:11 [PATCH] net: smc91x: Fix pointer types Thorsten Blum
@ 2024-05-16 14:13 ` Andrew Lunn
2024-05-16 15:13 ` Thorsten Blum
2024-05-16 15:28 ` [PATCH] " Nicolas Pitre
1 sibling, 1 reply; 11+ messages in thread
From: Andrew Lunn @ 2024-05-16 14:13 UTC (permalink / raw)
To: Thorsten Blum
Cc: Nicolas Pitre, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, John Paul Adrian Glaubitz, Arnd Bergmann, netdev,
linux-kernel, kernel test robot
> -#define SMC_PUSH_DATA(lp, p, l) \
> +#define SMC_PUSH_DATA(lp, p, l) \
> do { \
> - if (SMC_32BIT(lp)) { \
> + void __iomem *__ioaddr = ioaddr; \
ioaddr is not a parameter passed to this macro.
> + if (SMC_32BIT(lp)) { \
> void *__ptr = (p); \
> int __len = (l); \
> - void __iomem *__ioaddr = ioaddr; \
> if (__len >= 2 && (unsigned long)__ptr & 2) { \
> __len -= 2; \
> - SMC_outsw(ioaddr, DATA_REG(lp), __ptr, 1); \
> + SMC_outsw(__ioaddr, DATA_REG(lp), __ptr, 1); \
You probably should use lp->base here, which is passed into this
macro, and should have the correct type.
> @@ -1072,7 +1072,7 @@ static const char * chip_ids[ 16 ] = {
> */ \
> __ptr -= 2; \
> __len += 2; \
> - SMC_SET_PTR(lp, \
> + SMC_SET_PTR(lp, \
> 2|PTR_READ|PTR_RCV|PTR_AUTOINC); \
> } \
> if (SMC_CAN_USE_DATACS && lp->datacs) \
This is just a whitespace change. Please put that into a different
patch.
Andrew
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] net: smc91x: Fix pointer types
2024-05-16 14:13 ` Andrew Lunn
@ 2024-05-16 15:13 ` Thorsten Blum
2024-05-16 15:56 ` [PATCH v2] " Thorsten Blum
0 siblings, 1 reply; 11+ messages in thread
From: Thorsten Blum @ 2024-05-16 15:13 UTC (permalink / raw)
To: Andrew Lunn
Cc: Nicolas Pitre, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, John Paul Adrian Glaubitz, Arnd Bergmann, netdev,
linux-kernel, kernel test robot
On 16. May 2024, at 16:13, Andrew Lunn <andrew@lunn.ch> wrote:
> -#define SMC_PUSH_DATA(lp, p, l) \
>> +#define SMC_PUSH_DATA(lp, p, l) \
>> do { \
>> - if (SMC_32BIT(lp)) { \
>> + void __iomem *__ioaddr = ioaddr; \
>
> ioaddr is not a parameter passed to this macro.
Yes, most (all?) macros in this file rely on ioaddr being implicitly
defined in the surrounding scope.
> + if (SMC_32BIT(lp)) { \
>> void *__ptr = (p); \
>> int __len = (l); \
>> - void __iomem *__ioaddr = ioaddr; \
>> if (__len >= 2 && (unsigned long)__ptr & 2) { \
>> __len -= 2; \
>> - SMC_outsw(ioaddr, DATA_REG(lp), __ptr, 1); \
>> + SMC_outsw(__ioaddr, DATA_REG(lp), __ptr, 1); \
>
> You probably should use lp->base here, which is passed into this
> macro, and should have the correct type.
ioaddr is lp->base:
void __iomem *ioaddr = lp->base;
but the type information for ioaddr gets lost across multiple macro
boundaries which is why either __ioaddr or lp->base must be used when
calling the SMC_* macros. Both __ioaddr and lp->base work, but I guess
you prefer lp->base? I'm fine with both.
> @@ -1072,7 +1072,7 @@ static const char * chip_ids[ 16 ] = {
>> */ \
>> __ptr -= 2; \
>> __len += 2; \
>> - SMC_SET_PTR(lp, \
>> + SMC_SET_PTR(lp, \
>> 2|PTR_READ|PTR_RCV|PTR_AUTOINC); \
>> } \
>> if (SMC_CAN_USE_DATACS && lp->datacs) \
>
> This is just a whitespace change. Please put that into a different
> patch.
Ok, I'll change this in v2.
Thanks,
Thorsten
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] net: smc91x: Fix pointer types
2024-05-16 12:11 [PATCH] net: smc91x: Fix pointer types Thorsten Blum
2024-05-16 14:13 ` Andrew Lunn
@ 2024-05-16 15:28 ` Nicolas Pitre
1 sibling, 0 replies; 11+ messages in thread
From: Nicolas Pitre @ 2024-05-16 15:28 UTC (permalink / raw)
To: Thorsten Blum
Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
John Paul Adrian Glaubitz, Arnd Bergmann, Andrew Lunn, netdev,
linux-kernel, kernel test robot
On Thu, 16 May 2024, Thorsten Blum wrote:
> Use void __iomem pointers as parameters for mcf_insw() and mcf_outsw()
> to align with the parameter types of readw() and writew().
>
> Consistently call SMC_outsw(), SMC_outsb(), SMC_insw(), and SMC_insb()
> with void __iomem pointers to address the following warnings reported by
> kernel test robot:
>
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
> drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: warning: incorrect type in argument 1 (different address spaces)
> drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: expected void *a
> drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: got void [noderef] __iomem *
>
> Signed-off-by: Thorsten Blum <thorsten.blum@toblux.com>
> Reported-by: kernel test robot <lkp@intel.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202405160853.3qyaSj8w-lkp@intel.com/
Acked-by: Nicolas Pitre <nico@fluxnic.net>
> ---
> drivers/net/ethernet/smsc/smc91x.h | 34 +++++++++++++++---------------
> 1 file changed, 17 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/net/ethernet/smsc/smc91x.h b/drivers/net/ethernet/smsc/smc91x.h
> index 45ef5ac0788a..204fbb5c975c 100644
> --- a/drivers/net/ethernet/smsc/smc91x.h
> +++ b/drivers/net/ethernet/smsc/smc91x.h
> @@ -142,14 +142,14 @@ static inline void _SMC_outw_align4(u16 val, void __iomem *ioaddr, int reg,
> #define SMC_CAN_USE_32BIT 0
> #define SMC_NOWAIT 1
>
> -static inline void mcf_insw(void *a, unsigned char *p, int l)
> +static inline void mcf_insw(void __iomem *a, unsigned char *p, int l)
> {
> u16 *wp = (u16 *) p;
> while (l-- > 0)
> *wp++ = readw(a);
> }
>
> -static inline void mcf_outsw(void *a, unsigned char *p, int l)
> +static inline void mcf_outsw(void __iomem *a, unsigned char *p, int l)
> {
> u16 *wp = (u16 *) p;
> while (l-- > 0)
> @@ -1026,15 +1026,15 @@ static const char * chip_ids[ 16 ] = {
> } \
> } while (0)
>
> -#define SMC_PUSH_DATA(lp, p, l) \
> +#define SMC_PUSH_DATA(lp, p, l) \
> do { \
> - if (SMC_32BIT(lp)) { \
> + void __iomem *__ioaddr = ioaddr; \
> + if (SMC_32BIT(lp)) { \
> void *__ptr = (p); \
> int __len = (l); \
> - void __iomem *__ioaddr = ioaddr; \
> if (__len >= 2 && (unsigned long)__ptr & 2) { \
> __len -= 2; \
> - SMC_outsw(ioaddr, DATA_REG(lp), __ptr, 1); \
> + SMC_outsw(__ioaddr, DATA_REG(lp), __ptr, 1); \
> __ptr += 2; \
> } \
> if (SMC_CAN_USE_DATACS && lp->datacs) \
> @@ -1042,20 +1042,20 @@ static const char * chip_ids[ 16 ] = {
> SMC_outsl(__ioaddr, DATA_REG(lp), __ptr, __len>>2); \
> if (__len & 2) { \
> __ptr += (__len & ~3); \
> - SMC_outsw(ioaddr, DATA_REG(lp), __ptr, 1); \
> + SMC_outsw(__ioaddr, DATA_REG(lp), __ptr, 1); \
> } \
> } else if (SMC_16BIT(lp)) \
> - SMC_outsw(ioaddr, DATA_REG(lp), p, (l) >> 1); \
> - else if (SMC_8BIT(lp)) \
> - SMC_outsb(ioaddr, DATA_REG(lp), p, l); \
> + SMC_outsw(__ioaddr, DATA_REG(lp), p, (l) >> 1); \
> + else if (SMC_8BIT(lp)) \
> + SMC_outsb(__ioaddr, DATA_REG(lp), p, l); \
> } while (0)
>
> -#define SMC_PULL_DATA(lp, p, l) \
> +#define SMC_PULL_DATA(lp, p, l) \
> do { \
> - if (SMC_32BIT(lp)) { \
> + void __iomem *__ioaddr = ioaddr; \
> + if (SMC_32BIT(lp)) { \
> void *__ptr = (p); \
> int __len = (l); \
> - void __iomem *__ioaddr = ioaddr; \
> if ((unsigned long)__ptr & 2) { \
> /* \
> * We want 32bit alignment here. \
> @@ -1072,7 +1072,7 @@ static const char * chip_ids[ 16 ] = {
> */ \
> __ptr -= 2; \
> __len += 2; \
> - SMC_SET_PTR(lp, \
> + SMC_SET_PTR(lp, \
> 2|PTR_READ|PTR_RCV|PTR_AUTOINC); \
> } \
> if (SMC_CAN_USE_DATACS && lp->datacs) \
> @@ -1080,9 +1080,9 @@ static const char * chip_ids[ 16 ] = {
> __len += 2; \
> SMC_insl(__ioaddr, DATA_REG(lp), __ptr, __len>>2); \
> } else if (SMC_16BIT(lp)) \
> - SMC_insw(ioaddr, DATA_REG(lp), p, (l) >> 1); \
> - else if (SMC_8BIT(lp)) \
> - SMC_insb(ioaddr, DATA_REG(lp), p, l); \
> + SMC_insw(__ioaddr, DATA_REG(lp), p, (l) >> 1); \
> + else if (SMC_8BIT(lp)) \
> + SMC_insb(__ioaddr, DATA_REG(lp), p, l); \
> } while (0)
>
> #endif /* _SMC91X_H_ */
> --
> 2.45.0
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v2] net: smc91x: Fix pointer types
2024-05-16 15:13 ` Thorsten Blum
@ 2024-05-16 15:56 ` Thorsten Blum
2024-05-16 17:16 ` Andrew Lunn
0 siblings, 1 reply; 11+ messages in thread
From: Thorsten Blum @ 2024-05-16 15:56 UTC (permalink / raw)
To: thorsten.blum
Cc: andrew, arnd, davem, edumazet, glaubitz, kuba, linux-kernel, lkp,
netdev, nico, pabeni
Use void __iomem pointers as parameters for mcf_insw() and mcf_outsw()
to align with the parameter types of readw() and writew().
Use lp->base instead of ioaddr when calling SMC_outsw(), SMC_outsb(),
SMC_insw(), and SMC_insb() to retain its type across macro boundaries
and to fix the following warnings reported by kernel test robot:
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: warning: incorrect type in argument 1 (different address spaces)
drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: expected void *a
drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: got void [noderef] __iomem *
Signed-off-by: Thorsten Blum <thorsten.blum@toblux.com>
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202405160853.3qyaSj8w-lkp@intel.com/
Acked-by: Nicolas Pitre <nico@fluxnic.net>
---
Changes in v2:
- Use lp->base instead of __ioaddr as suggested by Andrew Lunn. They are
essentially the same, but using lp->base results in a smaller diff
- Remove whitespace only changes as suggested by Andrew Lunn
- Preserve Acked-by: Nicolas Pitre tag (please let me know if you
somehow disagree with the changes in v2)
---
drivers/net/ethernet/smsc/smc91x.h | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/net/ethernet/smsc/smc91x.h b/drivers/net/ethernet/smsc/smc91x.h
index 45ef5ac0788a..a1523fb503a3 100644
--- a/drivers/net/ethernet/smsc/smc91x.h
+++ b/drivers/net/ethernet/smsc/smc91x.h
@@ -142,14 +142,14 @@ static inline void _SMC_outw_align4(u16 val, void __iomem *ioaddr, int reg,
#define SMC_CAN_USE_32BIT 0
#define SMC_NOWAIT 1
-static inline void mcf_insw(void *a, unsigned char *p, int l)
+static inline void mcf_insw(void __iomem *a, unsigned char *p, int l)
{
u16 *wp = (u16 *) p;
while (l-- > 0)
*wp++ = readw(a);
}
-static inline void mcf_outsw(void *a, unsigned char *p, int l)
+static inline void mcf_outsw(void __iomem *a, unsigned char *p, int l)
{
u16 *wp = (u16 *) p;
while (l-- > 0)
@@ -1034,7 +1034,7 @@ static const char * chip_ids[ 16 ] = {
void __iomem *__ioaddr = ioaddr; \
if (__len >= 2 && (unsigned long)__ptr & 2) { \
__len -= 2; \
- SMC_outsw(ioaddr, DATA_REG(lp), __ptr, 1); \
+ SMC_outsw(lp->base, DATA_REG(lp), __ptr, 1); \
__ptr += 2; \
} \
if (SMC_CAN_USE_DATACS && lp->datacs) \
@@ -1042,12 +1042,12 @@ static const char * chip_ids[ 16 ] = {
SMC_outsl(__ioaddr, DATA_REG(lp), __ptr, __len>>2); \
if (__len & 2) { \
__ptr += (__len & ~3); \
- SMC_outsw(ioaddr, DATA_REG(lp), __ptr, 1); \
+ SMC_outsw(lp->base, DATA_REG(lp), __ptr, 1); \
} \
} else if (SMC_16BIT(lp)) \
- SMC_outsw(ioaddr, DATA_REG(lp), p, (l) >> 1); \
+ SMC_outsw(lp->base, DATA_REG(lp), p, (l) >> 1); \
else if (SMC_8BIT(lp)) \
- SMC_outsb(ioaddr, DATA_REG(lp), p, l); \
+ SMC_outsb(lp->base, DATA_REG(lp), p, l); \
} while (0)
#define SMC_PULL_DATA(lp, p, l) \
@@ -1080,9 +1080,9 @@ static const char * chip_ids[ 16 ] = {
__len += 2; \
SMC_insl(__ioaddr, DATA_REG(lp), __ptr, __len>>2); \
} else if (SMC_16BIT(lp)) \
- SMC_insw(ioaddr, DATA_REG(lp), p, (l) >> 1); \
+ SMC_insw(lp->base, DATA_REG(lp), p, (l) >> 1); \
else if (SMC_8BIT(lp)) \
- SMC_insb(ioaddr, DATA_REG(lp), p, l); \
+ SMC_insb(lp->base, DATA_REG(lp), p, l); \
} while (0)
#endif /* _SMC91X_H_ */
--
2.45.0
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2] net: smc91x: Fix pointer types
2024-05-16 15:56 ` [PATCH v2] " Thorsten Blum
@ 2024-05-16 17:16 ` Andrew Lunn
2024-05-16 18:03 ` Nicolas Pitre
2024-05-16 22:30 ` [PATCH v3] " Thorsten Blum
0 siblings, 2 replies; 11+ messages in thread
From: Andrew Lunn @ 2024-05-16 17:16 UTC (permalink / raw)
To: Thorsten Blum
Cc: arnd, davem, edumazet, glaubitz, kuba, linux-kernel, lkp, netdev,
nico, pabeni
On Thu, May 16, 2024 at 05:56:12PM +0200, Thorsten Blum wrote:
> Use void __iomem pointers as parameters for mcf_insw() and mcf_outsw()
> to align with the parameter types of readw() and writew().
>
> Use lp->base instead of ioaddr when calling SMC_outsw(), SMC_outsb(),
> SMC_insw(), and SMC_insb() to retain its type across macro boundaries
> and to fix the following warnings reported by kernel test robot:
>
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
> drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: warning: incorrect type in argument 1 (different address spaces)
> drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: expected void *a
> drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: got void [noderef] __iomem *
>
> Signed-off-by: Thorsten Blum <thorsten.blum@toblux.com>
> Reported-by: kernel test robot <lkp@intel.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202405160853.3qyaSj8w-lkp@intel.com/
> Acked-by: Nicolas Pitre <nico@fluxnic.net>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
You could add a follow up patch which removes the
void __iomem *__ioaddr = ioaddr; lines and uses lp->base.
The code will then be more uniform.
Andrew
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2] net: smc91x: Fix pointer types
2024-05-16 17:16 ` Andrew Lunn
@ 2024-05-16 18:03 ` Nicolas Pitre
2024-05-16 22:30 ` [PATCH v3] " Thorsten Blum
1 sibling, 0 replies; 11+ messages in thread
From: Nicolas Pitre @ 2024-05-16 18:03 UTC (permalink / raw)
To: Andrew Lunn
Cc: Thorsten Blum, Arnd Bergmann, davem, edumazet, glaubitz, kuba,
linux-kernel, lkp, netdev, pabeni
On Thu, 16 May 2024, Andrew Lunn wrote:
> You could add a follow up patch which removes the
> void __iomem *__ioaddr = ioaddr; lines and uses lp->base.
> The code will then be more uniform.
Beware, It is sometimes overridden with __ioaddr = lp->datacs.
Nicolas
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v3] net: smc91x: Fix pointer types
2024-05-16 17:16 ` Andrew Lunn
2024-05-16 18:03 ` Nicolas Pitre
@ 2024-05-16 22:30 ` Thorsten Blum
2024-05-16 22:51 ` Andrew Lunn
1 sibling, 1 reply; 11+ messages in thread
From: Thorsten Blum @ 2024-05-16 22:30 UTC (permalink / raw)
To: andrew
Cc: arnd, davem, edumazet, glaubitz, kuba, linux-kernel, lkp, netdev,
nico, pabeni, thorsten.blum
Use void __iomem pointers as parameters for mcf_insw() and mcf_outsw()
to align with the parameter types of readw() and writew() to fix the
following warnings reported by kernel test robot:
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: warning: incorrect type in argument 1 (different address spaces)
drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: expected void *a
drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: got void [noderef] __iomem *
Signed-off-by: Thorsten Blum <thorsten.blum@toblux.com>
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202405160853.3qyaSj8w-lkp@intel.com/
Acked-by: Nicolas Pitre <nico@fluxnic.net>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
---
Changes in v2:
- Use lp->base instead of __ioaddr as suggested by Andrew Lunn. They are
essentially the same, but using lp->base results in a smaller diff
- Remove whitespace only changes as suggested by Andrew Lunn
- Preserve Acked-by: Nicolas Pitre tag (please let me know if you
somehow disagree with the changes in v2 or v3)
Changes in v3:
- Revert changing the macros as this is unnecessary. Neither the types
nor the __iomem attributes get lost across macro boundaries
- Preserve Reviewed-by: Andrew Lunn tag (please let me know if you
somehow disagree with the changes in v3)
---
drivers/net/ethernet/smsc/smc91x.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/smsc/smc91x.h b/drivers/net/ethernet/smsc/smc91x.h
index 45ef5ac0788a..38aa4374e813 100644
--- a/drivers/net/ethernet/smsc/smc91x.h
+++ b/drivers/net/ethernet/smsc/smc91x.h
@@ -142,14 +142,14 @@ static inline void _SMC_outw_align4(u16 val, void __iomem *ioaddr, int reg,
#define SMC_CAN_USE_32BIT 0
#define SMC_NOWAIT 1
-static inline void mcf_insw(void *a, unsigned char *p, int l)
+static inline void mcf_insw(void __iomem *a, unsigned char *p, int l)
{
u16 *wp = (u16 *) p;
while (l-- > 0)
*wp++ = readw(a);
}
-static inline void mcf_outsw(void *a, unsigned char *p, int l)
+static inline void mcf_outsw(void __iomem *a, unsigned char *p, int l)
{
u16 *wp = (u16 *) p;
while (l-- > 0)
--
2.45.0
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3] net: smc91x: Fix pointer types
2024-05-16 22:30 ` [PATCH v3] " Thorsten Blum
@ 2024-05-16 22:51 ` Andrew Lunn
2024-05-16 23:21 ` Thorsten Blum
0 siblings, 1 reply; 11+ messages in thread
From: Andrew Lunn @ 2024-05-16 22:51 UTC (permalink / raw)
To: Thorsten Blum
Cc: arnd, davem, edumazet, glaubitz, kuba, linux-kernel, lkp, netdev,
nico, pabeni
On Fri, May 17, 2024 at 12:30:05AM +0200, Thorsten Blum wrote:
> Use void __iomem pointers as parameters for mcf_insw() and mcf_outsw()
> to align with the parameter types of readw() and writew() to fix the
> following warnings reported by kernel test robot:
>
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
> drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: warning: incorrect type in argument 1 (different address spaces)
> drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: expected void *a
> drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: got void [noderef] __iomem *
>
> Signed-off-by: Thorsten Blum <thorsten.blum@toblux.com>
> Reported-by: kernel test robot <lkp@intel.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202405160853.3qyaSj8w-lkp@intel.com/
> Acked-by: Nicolas Pitre <nico@fluxnic.net>
> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
> ---
> Changes in v2:
> - Use lp->base instead of __ioaddr as suggested by Andrew Lunn. They are
> essentially the same, but using lp->base results in a smaller diff
> - Remove whitespace only changes as suggested by Andrew Lunn
> - Preserve Acked-by: Nicolas Pitre tag (please let me know if you
> somehow disagree with the changes in v2 or v3)
>
> Changes in v3:
> - Revert changing the macros as this is unnecessary. Neither the types
> nor the __iomem attributes get lost across macro boundaries
> - Preserve Reviewed-by: Andrew Lunn tag (please let me know if you
> somehow disagree with the changes in v3)
This fixes the warning, but we still have the macro accessing things
not passed to them. If you are going to brother to fix the warnings,
it would also be good to fix the bad practice. Please make a patchset
to do this.
It would also be good if you read:
https://www.kernel.org/doc/html/latest/process/maintainer-netdev.html
Andrew
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3] net: smc91x: Fix pointer types
2024-05-16 22:51 ` Andrew Lunn
@ 2024-05-16 23:21 ` Thorsten Blum
2024-05-17 10:41 ` Thorsten Blum
0 siblings, 1 reply; 11+ messages in thread
From: Thorsten Blum @ 2024-05-16 23:21 UTC (permalink / raw)
To: Andrew Lunn
Cc: Arnd Bergmann, David S. Miller, edumazet, glaubitz, kuba,
linux-kernel, lkp, netdev, nico, pabeni
On 17. May 2024, at 00:51, Andrew Lunn <andrew@lunn.ch> wrote:
> On Fri, May 17, 2024 at 12:30:05AM +0200, Thorsten Blum wrote:
>> Use void __iomem pointers as parameters for mcf_insw() and mcf_outsw()
>> to align with the parameter types of readw() and writew() to fix the
>> following warnings reported by kernel test robot:
>>
>> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
>> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
>> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
>> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
>> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
>> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
>> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces)
>> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a
>> drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem *
>> drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: warning: incorrect type in argument 1 (different address spaces)
>> drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: expected void *a
>> drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: got void [noderef] __iomem *
>>
>> Signed-off-by: Thorsten Blum <thorsten.blum@toblux.com>
>> Reported-by: kernel test robot <lkp@intel.com>
>> Closes: https://lore.kernel.org/oe-kbuild-all/202405160853.3qyaSj8w-lkp@intel.com/
>> Acked-by: Nicolas Pitre <nico@fluxnic.net>
>> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
>> ---
>> Changes in v2:
>> - Use lp->base instead of __ioaddr as suggested by Andrew Lunn. They are
>> essentially the same, but using lp->base results in a smaller diff
>> - Remove whitespace only changes as suggested by Andrew Lunn
>> - Preserve Acked-by: Nicolas Pitre tag (please let me know if you
>> somehow disagree with the changes in v2 or v3)
>>
>> Changes in v3:
>> - Revert changing the macros as this is unnecessary. Neither the types
>> nor the __iomem attributes get lost across macro boundaries
>> - Preserve Reviewed-by: Andrew Lunn tag (please let me know if you
>> somehow disagree with the changes in v3)
>
> This fixes the warning, but we still have the macro accessing things
> not passed to them. If you are going to brother to fix the warnings,
> it would also be good to fix the bad practice. Please make a patchset
> to do this.
I would prefer to submit another patch to fix the macros. I submitted v3
because the patch description for v2 was wrong (type information or
attributes don't get lost across macro boundaries) and the macro changes
are unnecessary to fix the warnings.
I should never have changed the macros, but after first adding __iomem
to mcf_insw() and mcf_outsw(), I kept getting the same errors and looked
for the problem in the SMC_* macros. I probably didn't do a clean build
or forgot to save my changes and just refactored the macros as a side
effect.
> It would also be good if you read:
>
> https://www.kernel.org/doc/html/latest/process/maintainer-netdev.html
Will do.
Thanks,
Thorsten
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3] net: smc91x: Fix pointer types
2024-05-16 23:21 ` Thorsten Blum
@ 2024-05-17 10:41 ` Thorsten Blum
0 siblings, 0 replies; 11+ messages in thread
From: Thorsten Blum @ 2024-05-17 10:41 UTC (permalink / raw)
To: Andrew Lunn
Cc: Arnd Bergmann, David S. Miller, Eric Dumazet, glaubitz, kuba,
linux-kernel, lkp, netdev, nico, pabeni
On 17. May 2024, at 01:21, Thorsten Blum <thorsten.blum@toblux.com> wrote:
> On 17. May 2024, at 00:51, Andrew Lunn <andrew@lunn.ch> wrote:
>> It would also be good if you read:
>>
>> https://www.kernel.org/doc/html/latest/process/maintainer-netdev.html
>
> Will do.
Reading this was helpful and I learned that:
- net-next is closed during a merge window
- patches should be prefixed with the tree name
I'll submit the patch that cleans up ioaddr from all SMC_* macros when
net-next is open again.
Thanks,
Thorsten
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2024-05-17 10:42 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-16 12:11 [PATCH] net: smc91x: Fix pointer types Thorsten Blum
2024-05-16 14:13 ` Andrew Lunn
2024-05-16 15:13 ` Thorsten Blum
2024-05-16 15:56 ` [PATCH v2] " Thorsten Blum
2024-05-16 17:16 ` Andrew Lunn
2024-05-16 18:03 ` Nicolas Pitre
2024-05-16 22:30 ` [PATCH v3] " Thorsten Blum
2024-05-16 22:51 ` Andrew Lunn
2024-05-16 23:21 ` Thorsten Blum
2024-05-17 10:41 ` Thorsten Blum
2024-05-16 15:28 ` [PATCH] " Nicolas Pitre
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®