Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1557660

Re: [PATCH] power: supply: axp20x_usb_power: fix 64-bit build warning

From Sebastian Reichel <sre@kernel.org>
Newsgroups linux.kernel
Subject Re: [PATCH] power: supply: axp20x_usb_power: fix 64-bit build warning
Date 2017-01-12 18:50 +0100
Message-ID <sYRFE-6Pt-17@gated-at.bofh.it> (permalink)
References <sYsxA-89i-31@gated-at.bofh.it> <sYDMl-6He-13@gated-at.bofh.it> <sYJ5o-1Jo-21@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


[Multipart message — attachments visible in raw view] - view raw

On Thu, Jan 12, 2017 at 09:32:26AM +0100, Arnd Bergmann wrote:
> On Thursday, January 12, 2017 3:58:24 AM CET Sebastian Reichel wrote:
> > On Wed, Jan 11, 2017 at 03:51:55PM +0100, Arnd Bergmann wrote:
> > > Casting a pointer to 'int' is not always valid:
> > > 
> > > drivers/power/supply/axp20x_usb_power.c: In function 'axp20x_usb_power_probe':
> > > drivers/power/supply/axp20x_usb_power.c:297:21: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
> > > 
> > > This makes the code use uintptr_t explicitly.
> > > 
> > > Fixes: 0dcc70ca8644 ("power: supply: axp20x_usb_power: use of_device_id data field instead of device_is_compatible")
> > > Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> > 
> > I queued Michal's patch instead:
> > 
> > https://git.kernel.org/cgit/linux/kernel/git/sre/linux-power-supply.git/commit/?h=for-next&id=15df6d98ec3b40775918fc6ef73d7f1c2d0cf870
> 
> Hmm, that doesn't look right: You can't really rely on an 'enum' type to
> have a specific size, especially not the same size as a pointer, in portable
> code.
> 
> IIRC on many architectures it defaults to 'int' rather than 'long', and
> it might also be 'short' on architectures that default to enums being
> the smallest integer type that fits.

gcc does not generate warnings as far as I can see and the precision
loss itself is not a problem in this case, since we only store the
enum values in the pointer anyways.

I don't mind adding the uintptr_t cast. But in that case it should
probably be added in a few other places, too:

$ git grep of_device_get_match_data | grep "(enum"
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c:		adv7511->type = (enum adv7511_type)of_device_get_match_data(dev);
drivers/i2c/busses/i2c-rcar.c:	priv->devtype = (enum rcar_i2c_type)of_device_get_match_data(dev);
drivers/net/ethernet/renesas/ravb_main.c:	chip_id = (enum ravb_chip_id)of_device_get_match_data(&pdev->dev);
drivers/pci/host/pci-imx6.c:		(enum imx6_pcie_variants)of_device_get_match_data(dev);
drivers/power/supply/axp20x_usb_power.c:	power->axp20x_id = (enum axp20x_variants)of_device_get_match_data(
drivers/reset/hisilicon/hi6220_reset.c:	type = (enum hi6220_reset_ctrl_type)of_device_get_match_data(dev);
drivers/usb/phy/phy-msm-usb.c:	pdata->phy_type = (enum msm_usb_phy_type)of_device_get_match_data(&pdev->dev);

--Sebastian

Back to linux.kernel | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

[PATCH] power: supply: axp20x_usb_power: fix 64-bit build warning Arnd Bergmann <arnd@arndb.de> - 2017-01-11 16:00 +0100
  Re: [PATCH] power: supply: axp20x_usb_power: fix 64-bit build warning Sebastian Reichel <sre@kernel.org> - 2017-01-12 04:00 +0100
    Re: [PATCH] power: supply: axp20x_usb_power: fix 64-bit build warning Arnd Bergmann <arnd@arndb.de> - 2017-01-12 09:40 +0100
      Re: [PATCH] power: supply: axp20x_usb_power: fix 64-bit build warning Arnd Bergmann <arnd@arndb.de> - 2017-01-12 17:20 +0100
      Re: [PATCH] power: supply: axp20x_usb_power: fix 64-bit build  warning Michal Suchánek <msuchanek@suse.de> - 2017-01-12 17:20 +0100
      Re: [PATCH] power: supply: axp20x_usb_power: fix 64-bit build warning Sebastian Reichel <sre@kernel.org> - 2017-01-12 18:50 +0100

csiph-web