Message ID | 20171221161529.3462263-1-arnd@arndb.de |
---|---|
State | Accepted |
Commit | 0b598e4f877ba28603985031b98d4d592464ade7 |
Headers | show |
Series | [v2] virt: vbox: use %pap format for printing resource_size_t | expand |
From: Arnd Bergmann > Sent: 21 December 2017 16:15 > > resource_size_t may be larger than pointers depending on configuration, > so we can run into this build warning: > > drivers/virt/vboxguest/vboxguest_linux.c: In function 'vbg_pci_probe': > drivers/virt/vboxguest/vboxguest_linux.c:295:4: error: cast to pointer from integer of different size > [-Werror=int-to-pointer-cast] > drivers/virt/vboxguest/vboxguest_linux.c:367:4: error: cast to pointer from integer of different size > [-Werror=int-to-pointer-cast] > > This uses the special %pap to print the address by reference. > > Fixes: 0ba002bc4393 ("virt: Add vboxguest driver for Virtual Box Guest integration") > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > --- > v2: Use %pap instead of the %rR that was just as incorrect, as > pointed out by Joe Perches. > --- > drivers/virt/vboxguest/vboxguest_linux.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/virt/vboxguest/vboxguest_linux.c b/drivers/virt/vboxguest/vboxguest_linux.c > index d045aa51ce03..82e280d38cc2 100644 > --- a/drivers/virt/vboxguest/vboxguest_linux.c > +++ b/drivers/virt/vboxguest/vboxguest_linux.c > @@ -291,8 +291,8 @@ static int vbg_pci_probe(struct pci_dev *pci, const struct pci_device_id *id) > > vmmdev = devm_ioremap(dev, mmio, mmio_len); > if (!vmmdev) { > - vbg_err("vboxguest: Error ioremap failed; MMIO addr=%p size=%d\n", > - (void *)mmio, (int)mmio_len); > + vbg_err("vboxguest: Error ioremap failed; MMIO addr=%pap size=%pap\n", > + &mmio, &mmio_len); Are you sure about the type of mmio_len? While the argument to devm_ioremap() is of type resource_size_t it seems extremely unlikely that the actual value will exceed 2^32. Using a 64bit type for the length on 32bit systems will generate horrid code. I can't see the code in my tree to check. David
On Thu, Dec 21, 2017 at 6:02 PM, David Laight <David.Laight@aculab.com> wrote: > From: Arnd Bergmann >> Sent: 21 December 2017 16:15 >> >> resource_size_t may be larger than pointers depending on configuration, >> so we can run into this build warning: >> >> drivers/virt/vboxguest/vboxguest_linux.c: In function 'vbg_pci_probe': >> drivers/virt/vboxguest/vboxguest_linux.c:295:4: error: cast to pointer from integer of different size >> [-Werror=int-to-pointer-cast] >> drivers/virt/vboxguest/vboxguest_linux.c:367:4: error: cast to pointer from integer of different size >> [-Werror=int-to-pointer-cast] >> >> This uses the special %pap to print the address by reference. >> >> Fixes: 0ba002bc4393 ("virt: Add vboxguest driver for Virtual Box Guest integration") >> Signed-off-by: Arnd Bergmann <arnd@arndb.de> >> --- >> v2: Use %pap instead of the %rR that was just as incorrect, as >> pointed out by Joe Perches. >> --- >> drivers/virt/vboxguest/vboxguest_linux.c | 8 ++++---- >> 1 file changed, 4 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/virt/vboxguest/vboxguest_linux.c b/drivers/virt/vboxguest/vboxguest_linux.c >> index d045aa51ce03..82e280d38cc2 100644 >> --- a/drivers/virt/vboxguest/vboxguest_linux.c >> +++ b/drivers/virt/vboxguest/vboxguest_linux.c >> @@ -291,8 +291,8 @@ static int vbg_pci_probe(struct pci_dev *pci, const struct pci_device_id *id) >> >> vmmdev = devm_ioremap(dev, mmio, mmio_len); >> if (!vmmdev) { >> - vbg_err("vboxguest: Error ioremap failed; MMIO addr=%p size=%d\n", >> - (void *)mmio, (int)mmio_len); >> + vbg_err("vboxguest: Error ioremap failed; MMIO addr=%pap size=%pap\n", >> + &mmio, &mmio_len); > > Are you sure about the type of mmio_len? > While the argument to devm_ioremap() is of type resource_size_t it seems > extremely unlikely that the actual value will exceed 2^32. > Using a 64bit type for the length on 32bit systems will generate horrid code. > > I can't see the code in my tree to check. I made sure the type matches. I thought about changing it to size_t and using %zd, but decided that it didn't matter. Arnd
Hi, On 21-12-17 17:15, Arnd Bergmann wrote: > resource_size_t may be larger than pointers depending on configuration, > so we can run into this build warning: > > drivers/virt/vboxguest/vboxguest_linux.c: In function 'vbg_pci_probe': > drivers/virt/vboxguest/vboxguest_linux.c:295:4: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast] > drivers/virt/vboxguest/vboxguest_linux.c:367:4: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast] > > This uses the special %pap to print the address by reference. > > Fixes: 0ba002bc4393 ("virt: Add vboxguest driver for Virtual Box Guest integration") > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > --- > v2: Use %pap instead of the %rR that was just as incorrect, as > pointed out by Joe Perches. Thank you for fixing this, the fix looks good to me: Acked-by: Hans de Goede <hdegoede@redhat.com> Regards, Hans > --- > drivers/virt/vboxguest/vboxguest_linux.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/virt/vboxguest/vboxguest_linux.c b/drivers/virt/vboxguest/vboxguest_linux.c > index d045aa51ce03..82e280d38cc2 100644 > --- a/drivers/virt/vboxguest/vboxguest_linux.c > +++ b/drivers/virt/vboxguest/vboxguest_linux.c > @@ -291,8 +291,8 @@ static int vbg_pci_probe(struct pci_dev *pci, const struct pci_device_id *id) > > vmmdev = devm_ioremap(dev, mmio, mmio_len); > if (!vmmdev) { > - vbg_err("vboxguest: Error ioremap failed; MMIO addr=%p size=%d\n", > - (void *)mmio, (int)mmio_len); > + vbg_err("vboxguest: Error ioremap failed; MMIO addr=%pap size=%pap\n", > + &mmio, &mmio_len); > goto err_disable_pcidev; > } > > @@ -362,9 +362,9 @@ static int vbg_pci_probe(struct pci_dev *pci, const struct pci_device_id *id) > device_create_file(dev, &dev_attr_host_version); > device_create_file(dev, &dev_attr_host_features); > > - vbg_info("vboxguest: misc device minor %d, IRQ %d, I/O port %x, MMIO at %p (size %d)\n", > + vbg_info("vboxguest: misc device minor %d, IRQ %d, I/O port %x, MMIO at %pap (size %pap)\n", > gdev->misc_device.minor, pci->irq, gdev->io_port, > - (void *)mmio, (int)mmio_len); > + &mmio, &mmio_len); > > return 0; > >
diff --git a/drivers/virt/vboxguest/vboxguest_linux.c b/drivers/virt/vboxguest/vboxguest_linux.c index d045aa51ce03..82e280d38cc2 100644 --- a/drivers/virt/vboxguest/vboxguest_linux.c +++ b/drivers/virt/vboxguest/vboxguest_linux.c @@ -291,8 +291,8 @@ static int vbg_pci_probe(struct pci_dev *pci, const struct pci_device_id *id) vmmdev = devm_ioremap(dev, mmio, mmio_len); if (!vmmdev) { - vbg_err("vboxguest: Error ioremap failed; MMIO addr=%p size=%d\n", - (void *)mmio, (int)mmio_len); + vbg_err("vboxguest: Error ioremap failed; MMIO addr=%pap size=%pap\n", + &mmio, &mmio_len); goto err_disable_pcidev; } @@ -362,9 +362,9 @@ static int vbg_pci_probe(struct pci_dev *pci, const struct pci_device_id *id) device_create_file(dev, &dev_attr_host_version); device_create_file(dev, &dev_attr_host_features); - vbg_info("vboxguest: misc device minor %d, IRQ %d, I/O port %x, MMIO at %p (size %d)\n", + vbg_info("vboxguest: misc device minor %d, IRQ %d, I/O port %x, MMIO at %pap (size %pap)\n", gdev->misc_device.minor, pci->irq, gdev->io_port, - (void *)mmio, (int)mmio_len); + &mmio, &mmio_len); return 0;
resource_size_t may be larger than pointers depending on configuration, so we can run into this build warning: drivers/virt/vboxguest/vboxguest_linux.c: In function 'vbg_pci_probe': drivers/virt/vboxguest/vboxguest_linux.c:295:4: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast] drivers/virt/vboxguest/vboxguest_linux.c:367:4: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast] This uses the special %pap to print the address by reference. Fixes: 0ba002bc4393 ("virt: Add vboxguest driver for Virtual Box Guest integration") Signed-off-by: Arnd Bergmann <arnd@arndb.de> --- v2: Use %pap instead of the %rR that was just as incorrect, as pointed out by Joe Perches. --- drivers/virt/vboxguest/vboxguest_linux.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) -- 2.9.0