Skip to contentSkip to conversation

Fix resource size miscalculations

PATCH Applied Joe Perches 7 participants 12 messages Mar 23, 2011 – Apr 10, 2011

Subsystems (7)
lore
Share & tools
lore
#0 lore raw

cover Fix resource size miscalculations

Use resource_size a few places

Joe Perches (2):
trivial: treewide: Fix iomap resource size miscalculations
trivial: arm: mach-u300/gpio: Fix mem_region resource size miscalculations

 arch/arm/mach-u300/gpio.c         |    7 +++----
 arch/arm/mach-ux500/mbox-db5500.c |    6 ++----
 arch/mips/rb532/gpio.c            |    2 +-
 drivers/video/msm/mddi.c          |    2 +-
 drivers/watchdog/bcm63xx_wdt.c    |    2 +-
 5 files changed, 8 insertions(+), 11 deletions(-)
Signature · 1 line
1.7.4.2.g597a6.dirty
#1 lore raw

PATCH 1/2 treewide: Fix iomap resource size miscalculations

Convert off-by-1 r->end - r->start to resource_size(r)

---
 arch/arm/mach-ux500/mbox-db5500.c |    6 ++----
 arch/mips/rb532/gpio.c            |    2 +-
 drivers/video/msm/mddi.c          |    2 +-
 drivers/watchdog/bcm63xx_wdt.c    |    2 +-
 4 files changed, 5 insertions(+), 7 deletions(-)
arch/arm/mach-ux500/mbox-db5500.c +2 -4
index a4ffb9f..2b2d51c 100644
@@ -416,8 +416,7 @@ struct mbox *mbox_setup(u8 mbox_id, mbox_recv_cb_t *mbox_cb, void *priv)
 	dev_dbg(&(mbox->pdev->dev),
 		"Resource name: %s start: 0x%X, end: 0x%X\n",
 		resource->name, resource->start, resource->end);
-	mbox->virtbase_peer =
-		ioremap(resource->start, resource->end - resource->start);
+	mbox->virtbase_peer = ioremap(resource->start, resource_size(resource));
 	if (!mbox->virtbase_peer) {
 		dev_err(&(mbox->pdev->dev), "Unable to ioremap peer mbox\n");
 		mbox = NULL;
@@ -440,8 +439,7 @@ struct mbox *mbox_setup(u8 mbox_id, mbox_recv_cb_t *mbox_cb, void *priv)
 	dev_dbg(&(mbox->pdev->dev),
 		"Resource name: %s start: 0x%X, end: 0x%X\n",
 		resource->name, resource->start, resource->end);
-	mbox->virtbase_local =
-		ioremap(resource->start, resource->end - resource->start);
+	mbox->virtbase_local = ioremap(resource->start, resource_size(resource));
 	if (!mbox->virtbase_local) {
 		dev_err(&(mbox->pdev->dev), "Unable to ioremap local mbox\n");
 		mbox = NULL;
arch/mips/rb532/gpio.c +1 -1
index 37de05d..6c47dfe 100644
@@ -185,7 +185,7 @@ int __init rb532_gpio_init(void)
 	struct resource *r;
 
 	r = rb532_gpio_reg0_res;
-	rb532_gpio_chip->regbase = ioremap_nocache(r->start, r->end - r->start);
+	rb532_gpio_chip->regbase = ioremap_nocache(r->start, resource_size(r));
 
 	if (!rb532_gpio_chip->regbase) {
 		printk(KERN_ERR "rb532: cannot remap GPIO register 0\n");
drivers/video/msm/mddi.c +1 -1
index b66d86a..178b072 100644
@@ -679,7 +679,7 @@ static int __devinit mddi_probe(struct platform_device *pdev)
 		printk(KERN_ERR "mddi: no associated mem resource!\n");
 		return -ENOMEM;
 	}
-	mddi->base = ioremap(resource->start, resource->end - resource->start);
+	mddi->base = ioremap(resource->start, resource_size(resource));
 	if (!mddi->base) {
 		printk(KERN_ERR "mddi: failed to remap base!\n");
 		ret = -EINVAL;
drivers/watchdog/bcm63xx_wdt.c +1 -1
index 3c5045a..5064e83 100644
@@ -248,7 +248,7 @@ static int __devinit bcm63xx_wdt_probe(struct platform_device *pdev)
 		return -ENODEV;
 	}
 
-	bcm63xx_wdt_device.regs = ioremap_nocache(r->start, r->end - r->start);
+	bcm63xx_wdt_device.regs = ioremap_nocache(r->start, resource_size(r));
 	if (!bcm63xx_wdt_device.regs) {
 		dev_err(&pdev->dev, "failed to remap I/O resources\n");
 		return -ENXIO;
Signature · 1 line
1.7.4.2.g597a6.dirty
Acked-by on v1 1/2
#3 lore raw

Re: [trivial PATCH 1/2] treewide: Fix iomap resource size miscalculations

In reply to Joe Perches
Quoted 3 lines · On Wednesday 23 March 2011 20:55:36 Joe Perches wrote:

Convert off-by-1 r->end - r->start to resource_size(r)

(for rb532 and bcm63xx_wdt)

Quoted 70 lines
---
 arch/arm/mach-ux500/mbox-db5500.c |    6 ++----
 arch/mips/rb532/gpio.c            |    2 +-
 drivers/video/msm/mddi.c          |    2 +-
 drivers/watchdog/bcm63xx_wdt.c    |    2 +-
 4 files changed, 5 insertions(+), 7 deletions(-)
(quoted diff) +0 -0

b/arch/arm/mach-ux500/mbox-db5500.c index a4ffb9f..2b2d51c 100644

arch/arm/mach-ux500/mbox-db5500.c +2 -4
@@ -416,8 +416,7 @@ struct mbox *mbox_setup(u8 mbox_id, mbox_recv_cb_t
 *mbox_cb, void *priv) dev_dbg(&(mbox->pdev->dev),
 		"Resource name: %s start: 0x%X, end: 0x%X\n",
 		resource->name, resource->start, resource->end);
-	mbox->virtbase_peer =
-		ioremap(resource->start, resource->end - resource->start);
+	mbox->virtbase_peer = ioremap(resource->start, resource_size(resource));
 	if (!mbox->virtbase_peer) {
 		dev_err(&(mbox->pdev->dev), "Unable to ioremap peer mbox\n");
 		mbox = NULL;
@@ -440,8 +439,7 @@ struct mbox *mbox_setup(u8 mbox_id, mbox_recv_cb_t
 *mbox_cb, void *priv) dev_dbg(&(mbox->pdev->dev),
 		"Resource name: %s start: 0x%X, end: 0x%X\n",
 		resource->name, resource->start, resource->end);
-	mbox->virtbase_local =
-		ioremap(resource->start, resource->end - resource->start);
+	mbox->virtbase_local = ioremap(resource->start, resource_size(resource));
 	if (!mbox->virtbase_local) {
 		dev_err(&(mbox->pdev->dev), "Unable to ioremap local mbox\n");
 		mbox = NULL;
arch/mips/rb532/gpio.c +1 -1
index 37de05d..6c47dfe 100644
@@ -185,7 +185,7 @@ int __init rb532_gpio_init(void)
 	struct resource *r;
 
 	r = rb532_gpio_reg0_res;
-	rb532_gpio_chip->regbase = ioremap_nocache(r->start, r->end - r->start);
+	rb532_gpio_chip->regbase = ioremap_nocache(r->start, resource_size(r));
 
 	if (!rb532_gpio_chip->regbase) {
 		printk(KERN_ERR "rb532: cannot remap GPIO register 0\n");
drivers/video/msm/mddi.c +1 -1
index b66d86a..178b072 100644
@@ -679,7 +679,7 @@ static int __devinit mddi_probe(struct platform_device
 *pdev) printk(KERN_ERR "mddi: no associated mem resource!\n");
 		return -ENOMEM;
 	}
-	mddi->base = ioremap(resource->start, resource->end - resource->start);
+	mddi->base = ioremap(resource->start, resource_size(resource));
 	if (!mddi->base) {
 		printk(KERN_ERR "mddi: failed to remap base!\n");
 		ret = -EINVAL;
(quoted diff) +0 -0

b/drivers/watchdog/bcm63xx_wdt.c index 3c5045a..5064e83 100644

drivers/watchdog/bcm63xx_wdt.c +1 -1
@@ -248,7 +248,7 @@ static int __devinit bcm63xx_wdt_probe(struct
 platform_device *pdev) return -ENODEV;
 	}
 
-	bcm63xx_wdt_device.regs = ioremap_nocache(r->start, r->end - r->start);
+	bcm63xx_wdt_device.regs = ioremap_nocache(r->start, resource_size(r));
 	if (!bcm63xx_wdt_device.regs) {
 		dev_err(&pdev->dev, "failed to remap I/O resources\n");
 		return -ENXIO;
Acked-by on v1 1/2
#4 lore raw

Re: [trivial PATCH 1/2] treewide: Fix iomap resource size miscalculations

In reply to Joe Perches
Quoted 5 lines · Joe Perches

Convert off-by-1 r->end - r->start to resource_size(r)

---
 drivers/video/msm/mddi.c          |    2 +-
Signature · 2 lines
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
Acked-by on v1 1/2
#5 lore raw

Re: [trivial PATCH 1/2] treewide: Fix iomap resource size miscalculations

In reply to Joe Perches

Hi Joe,

Quoted 9 lines

Convert off-by-1 r->end - r->start to resource_size(r)

---
 arch/arm/mach-ux500/mbox-db5500.c |    6 ++----
 arch/mips/rb532/gpio.c            |    2 +-
 drivers/video/msm/mddi.c          |    2 +-
 drivers/watchdog/bcm63xx_wdt.c    |    2 +-
 4 files changed, 5 insertions(+), 7 deletions(-)

Kind regards,
Wim.

Applied
#7 lore raw

Re: [trivial PATCH 1/2] treewide: Fix iomap resource size miscalculations

In reply to Joe Perches
Quoted 9 lines · Joe Perches

Convert off-by-1 r->end - r->start to resource_size(r)

---
 arch/arm/mach-ux500/mbox-db5500.c |    6 ++----
 arch/mips/rb532/gpio.c            |    2 +-
 drivers/video/msm/mddi.c          |    2 +-
 drivers/watchdog/bcm63xx_wdt.c    |    2 +-
 4 files changed, 5 insertions(+), 7 deletions(-)

Applied, thanks

Quoted 67 lines
arch/arm/mach-ux500/mbox-db5500.c +2 -4
index a4ffb9f..2b2d51c 100644
@@ -416,8 +416,7 @@ struct mbox *mbox_setup(u8 mbox_id, mbox_recv_cb_t *mbox_cb, void *priv)
 	dev_dbg(&(mbox->pdev->dev),
 		"Resource name: %s start: 0x%X, end: 0x%X\n",
 		resource->name, resource->start, resource->end);
-	mbox->virtbase_peer =
-		ioremap(resource->start, resource->end - resource->start);
+	mbox->virtbase_peer = ioremap(resource->start, resource_size(resource));
 	if (!mbox->virtbase_peer) {
 		dev_err(&(mbox->pdev->dev), "Unable to ioremap peer mbox\n");
 		mbox = NULL;
@@ -440,8 +439,7 @@ struct mbox *mbox_setup(u8 mbox_id, mbox_recv_cb_t *mbox_cb, void *priv)
 	dev_dbg(&(mbox->pdev->dev),
 		"Resource name: %s start: 0x%X, end: 0x%X\n",
 		resource->name, resource->start, resource->end);
-	mbox->virtbase_local =
-		ioremap(resource->start, resource->end - resource->start);
+	mbox->virtbase_local = ioremap(resource->start, resource_size(resource));
 	if (!mbox->virtbase_local) {
 		dev_err(&(mbox->pdev->dev), "Unable to ioremap local mbox\n");
 		mbox = NULL;
arch/mips/rb532/gpio.c +1 -1
index 37de05d..6c47dfe 100644
@@ -185,7 +185,7 @@ int __init rb532_gpio_init(void)
 	struct resource *r;
 
 	r = rb532_gpio_reg0_res;
-	rb532_gpio_chip->regbase = ioremap_nocache(r->start, r->end - r->start);
+	rb532_gpio_chip->regbase = ioremap_nocache(r->start, resource_size(r));
 
 	if (!rb532_gpio_chip->regbase) {
 		printk(KERN_ERR "rb532: cannot remap GPIO register 0\n");
drivers/video/msm/mddi.c +1 -1
index b66d86a..178b072 100644
@@ -679,7 +679,7 @@ static int __devinit mddi_probe(struct platform_device *pdev)
 		printk(KERN_ERR "mddi: no associated mem resource!\n");
 		return -ENOMEM;
 	}
-	mddi->base = ioremap(resource->start, resource->end - resource->start);
+	mddi->base = ioremap(resource->start, resource_size(resource));
 	if (!mddi->base) {
 		printk(KERN_ERR "mddi: failed to remap base!\n");
 		ret = -EINVAL;
drivers/watchdog/bcm63xx_wdt.c +1 -1
index 3c5045a..5064e83 100644
@@ -248,7 +248,7 @@ static int __devinit bcm63xx_wdt_probe(struct platform_device *pdev)
 		return -ENODEV;
 	}
 
-	bcm63xx_wdt_device.regs = ioremap_nocache(r->start, r->end - r->start);
+	bcm63xx_wdt_device.regs = ioremap_nocache(r->start, resource_size(r));
 	if (!bcm63xx_wdt_device.regs) {
 		dev_err(&pdev->dev, "failed to remap I/O resources\n");
 		return -ENXIO;
Signature · 1 line
1.7.4.2.g597a6.dirty
Signature · 2 lines
Jiri Kosina
SUSE Labs, Novell Inc.
#8 lore raw

PATCH 2/2 arm: mach-u300/gpio: Fix mem_region resource size miscalculations

In reply to Joe Perches

Convert off-by-1 r->end - r->start to resource_size(r)

---
 arch/arm/mach-u300/gpio.c |    7 +++----
 1 files changed, 3 insertions(+), 4 deletions(-)
arch/arm/mach-u300/gpio.c +3 -4
index d927901..94837a4 100644
@@ -581,8 +581,7 @@ static int __init gpio_probe(struct platform_device *pdev)
 	if (!memres)
 		goto err_no_resource;
 
-	if (request_mem_region(memres->start, memres->end - memres->start, "GPIO Controller")
-	    == NULL) {
+	if (!request_mem_region(memres->start, resource_size(memres), "GPIO Controller")) {
 		err = -ENODEV;
 		goto err_no_ioregion;
 	}
@@ -640,7 +639,7 @@ static int __init gpio_probe(struct platform_device *pdev)
 		free_irq(gpio_ports[i].irq, &gpio_ports[i]);
 	iounmap(virtbase);
  err_no_ioremap:
-	release_mem_region(memres->start, memres->end - memres->start);
+	release_mem_region(memres->start, resource_size(memres));
  err_no_ioregion:
  err_no_resource:
 	clk_disable(clk);
@@ -660,7 +659,7 @@ static int __exit gpio_remove(struct platform_device *pdev)
 	for (i = 0 ; i < U300_GPIO_NUM_PORTS; i++)
 		free_irq(gpio_ports[i].irq, &gpio_ports[i]);
 	iounmap(virtbase);
-	release_mem_region(memres->start, memres->end - memres->start);
+	release_mem_region(memres->start, resource_size(memres));
 	clk_disable(clk);
 	clk_put(clk);
 	return 0;
Signature · 1 line
1.7.4.2.g597a6.dirty
#10 lore raw

Re: [trivial PATCH 2/2] arm: mach-u300/gpio: Fix mem_region resource size miscalculations

Quoted 10 lines · Linus Walleij

2011/3/23 Joe Perches <[email protected]>:

Quoted 3 lines

Convert off-by-1 r->end - r->start to resource_size(r)

Oh man, there was one of these lurking in my own beloved mach-u300. How embarrassing. Thanks for catching!

As I don't see it in today's linux-next, I have picked it up. Thanks,

Signature · 2 lines
Jiri Kosina
SUSE Labs, Novell Inc.
#11 lore raw
In reply to Joe Perches
Quoted 1 line · Joe Perches

Use resource_size a few places

Perhaps this relatively common error is too common. It seems to be poor style. A possible better style for struct resource uses could be inline function(s) like:

static inline void __iomem *resource_ioremap(struct resource *r)

{
	return ioremap(r->start, resource_size(r));
}

and maybe

static inline struct resource * resource_request_region(struct resource *r, const char *name)

{
	return __request_region(&ioport_resource, r->start, resource_size(r), name, 0);
}