lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Thu, 16 May 2024 11:28:06 -0400 (EDT)
From: Nicolas Pitre <nico@...xnic.net>
To: Thorsten Blum <thorsten.blum@...lux.com>
cc: "David S. Miller" <davem@...emloft.net>, 
    Eric Dumazet <edumazet@...gle.com>, Jakub Kicinski <kuba@...nel.org>, 
    Paolo Abeni <pabeni@...hat.com>, 
    John Paul Adrian Glaubitz <glaubitz@...sik.fu-berlin.de>, 
    Arnd Bergmann <arnd@...db.de>, Andrew Lunn <andrew@...n.ch>, 
    netdev@...r.kernel.org, linux-kernel@...r.kernel.org, 
    kernel test robot <lkp@...el.com>
Subject: Re: [PATCH] net: smc91x: Fix pointer types

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@...lux.com>
> Reported-by: kernel test robot <lkp@...el.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202405160853.3qyaSj8w-lkp@intel.com/

Acked-by: Nicolas Pitre <nico@...xnic.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
> 
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ