[PATCH 25/28] staging: wilc1000: change cast type from pointer to uintptr_t

Greg KH gregkh at linuxfoundation.org
Fri Jul 31 20:50:19 UTC 2015


On Fri, Jul 31, 2015 at 04:38:33PM +0900, Tony Cho wrote:
> From: glen lee <glen.lee at atmel.com>
> 
> To use drvHandler as integer operation, cast type to uintptr_t.
> 
> Here is the build warning.
> drivers/staging/wilc1000/wilc_wlan.c:1871:23: warning: cast from pointer to
> integer of different size [-Wpointer-to-int-cast]
>   int driver_handler = (u32)drvHandler;
> 
> Signed-off-by: glen lee <glen.lee at atmel.com>
> Signed-off-by: Tony Cho <tony.cho at atmel.com>
> ---
>  drivers/staging/wilc1000/linux_wlan.c | 2 +-
>  drivers/staging/wilc1000/wilc_wlan.c  | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/staging/wilc1000/linux_wlan.c b/drivers/staging/wilc1000/linux_wlan.c
> index ec80849..14c2071 100644
> --- a/drivers/staging/wilc1000/linux_wlan.c
> +++ b/drivers/staging/wilc1000/linux_wlan.c
> @@ -1056,7 +1056,7 @@ static int linux_wlan_init_test_config(struct net_device *dev, linux_wlan_t *p_n
>  		goto _fail_;
>  	}
>  
> -	*(int *)c_val = (u32)pstrWFIDrv;
> +	*(int *)c_val = (uintptr_t)pstrWFIDrv;

Why is the cast needed at all?

>  
>  	if (!g_linux_wlan->oup.wlan_cfg_set(1, WID_SET_DRV_HANDLER, c_val, 4, 0, 0))
>  		goto _fail_;
> diff --git a/drivers/staging/wilc1000/wilc_wlan.c b/drivers/staging/wilc1000/wilc_wlan.c
> index f5075b26..2cc23d5 100644
> --- a/drivers/staging/wilc1000/wilc_wlan.c
> +++ b/drivers/staging/wilc1000/wilc_wlan.c
> @@ -1868,7 +1868,7 @@ static int wilc_wlan_cfg_commit(int type, WILC_WFIDrvHandle drvHandler)
>  	wilc_cfg_frame_t *cfg = &p->cfg_frame;
>  	int total_len = p->cfg_frame_offset + 4 + DRIVER_HANDLER_SIZE;
>  	int seq_no = p->cfg_seq_no % 256;
> -	int driver_handler = (u32)drvHandler;
> +	int driver_handler = (uintptr_t)drvHandler;

You can't cast a pointer to an integer, it does not work on all systems,
which is what the compiler warnings is telling you.

If this really is a pointer, use a pointer, otherwise, use an integer,
but don't cast between the two.

thanks,

greg k-h


More information about the devel mailing list