diff options
author | Dan Williams <dan.j.williams@intel.com> | 2015-08-10 23:07:06 -0400 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2015-08-10 23:07:06 -0400 |
commit | 92b19ff50e8f242392d78b2aacc5b5b672f1796b (patch) | |
tree | 463927d91228174419ba1fe327f3cec6b9a2615a | |
parent | 2584cf83578c26db144730ef498f4070f82ee3ea (diff) |
cleanup IORESOURCE_CACHEABLE vs ioremap()
Quoting Arnd:
I was thinking the opposite approach and basically removing all uses
of IORESOURCE_CACHEABLE from the kernel. There are only a handful of
them.and we can probably replace them all with hardcoded
ioremap_cached() calls in the cases they are actually useful.
All existing usages of IORESOURCE_CACHEABLE call ioremap() instead of
ioremap_nocache() if the resource is cacheable, however ioremap() is
uncached by default. Clearly none of the existing usages care about the
cacheability. Particularly devm_ioremap_resource() never worked as
advertised since it always fell back to plain ioremap().
Clean this up as the new direction we want is to convert
ioremap_<type>() usages to memremap(..., flags).
Suggested-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
-rw-r--r-- | arch/arm/mach-clps711x/board-cdb89712.c | 2 | ||||
-rw-r--r-- | arch/powerpc/kernel/pci_of_scan.c | 2 | ||||
-rw-r--r-- | arch/sparc/kernel/pci.c | 3 | ||||
-rw-r--r-- | drivers/pci/probe.c | 3 | ||||
-rw-r--r-- | drivers/pnp/manager.c | 2 | ||||
-rw-r--r-- | drivers/scsi/aic94xx/aic94xx_init.c | 7 | ||||
-rw-r--r-- | drivers/scsi/arcmsr/arcmsr_hba.c | 5 | ||||
-rw-r--r-- | drivers/scsi/mvsas/mv_init.c | 15 | ||||
-rw-r--r-- | drivers/video/fbdev/ocfb.c | 1 | ||||
-rw-r--r-- | lib/devres.c | 13 | ||||
-rw-r--r-- | lib/pci_iomap.c | 7 |
11 files changed, 16 insertions, 44 deletions
diff --git a/arch/arm/mach-clps711x/board-cdb89712.c b/arch/arm/mach-clps711x/board-cdb89712.c index 1ec378c334e5..972abdb10028 100644 --- a/arch/arm/mach-clps711x/board-cdb89712.c +++ b/arch/arm/mach-clps711x/board-cdb89712.c | |||
@@ -95,7 +95,7 @@ static struct physmap_flash_data cdb89712_bootrom_pdata __initdata = { | |||
95 | 95 | ||
96 | static struct resource cdb89712_bootrom_resources[] __initdata = { | 96 | static struct resource cdb89712_bootrom_resources[] __initdata = { |
97 | DEFINE_RES_NAMED(CS7_PHYS_BASE, SZ_128, "BOOTROM", IORESOURCE_MEM | | 97 | DEFINE_RES_NAMED(CS7_PHYS_BASE, SZ_128, "BOOTROM", IORESOURCE_MEM | |
98 | IORESOURCE_CACHEABLE | IORESOURCE_READONLY), | 98 | IORESOURCE_READONLY), |
99 | }; | 99 | }; |
100 | 100 | ||
101 | static struct platform_device cdb89712_bootrom_pdev __initdata = { | 101 | static struct platform_device cdb89712_bootrom_pdev __initdata = { |
diff --git a/arch/powerpc/kernel/pci_of_scan.c b/arch/powerpc/kernel/pci_of_scan.c index 42e02a2d570b..d4726addff0b 100644 --- a/arch/powerpc/kernel/pci_of_scan.c +++ b/arch/powerpc/kernel/pci_of_scan.c | |||
@@ -102,7 +102,7 @@ static void of_pci_parse_addrs(struct device_node *node, struct pci_dev *dev) | |||
102 | res = &dev->resource[(i - PCI_BASE_ADDRESS_0) >> 2]; | 102 | res = &dev->resource[(i - PCI_BASE_ADDRESS_0) >> 2]; |
103 | } else if (i == dev->rom_base_reg) { | 103 | } else if (i == dev->rom_base_reg) { |
104 | res = &dev->resource[PCI_ROM_RESOURCE]; | 104 | res = &dev->resource[PCI_ROM_RESOURCE]; |
105 | flags |= IORESOURCE_READONLY | IORESOURCE_CACHEABLE; | 105 | flags |= IORESOURCE_READONLY; |
106 | } else { | 106 | } else { |
107 | printk(KERN_ERR "PCI: bad cfg reg num 0x%x\n", i); | 107 | printk(KERN_ERR "PCI: bad cfg reg num 0x%x\n", i); |
108 | continue; | 108 | continue; |
diff --git a/arch/sparc/kernel/pci.c b/arch/sparc/kernel/pci.c index c928bc64b4ba..04da147e0712 100644 --- a/arch/sparc/kernel/pci.c +++ b/arch/sparc/kernel/pci.c | |||
@@ -231,8 +231,7 @@ static void pci_parse_of_addrs(struct platform_device *op, | |||
231 | res = &dev->resource[(i - PCI_BASE_ADDRESS_0) >> 2]; | 231 | res = &dev->resource[(i - PCI_BASE_ADDRESS_0) >> 2]; |
232 | } else if (i == dev->rom_base_reg) { | 232 | } else if (i == dev->rom_base_reg) { |
233 | res = &dev->resource[PCI_ROM_RESOURCE]; | 233 | res = &dev->resource[PCI_ROM_RESOURCE]; |
234 | flags |= IORESOURCE_READONLY | IORESOURCE_CACHEABLE | 234 | flags |= IORESOURCE_READONLY | IORESOURCE_SIZEALIGN; |
235 | | IORESOURCE_SIZEALIGN; | ||
236 | } else { | 235 | } else { |
237 | printk(KERN_ERR "PCI: bad cfg reg num 0x%x\n", i); | 236 | printk(KERN_ERR "PCI: bad cfg reg num 0x%x\n", i); |
238 | continue; | 237 | continue; |
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index cefd636681b6..8ed37dd04056 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c | |||
@@ -326,8 +326,7 @@ static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom) | |||
326 | struct resource *res = &dev->resource[PCI_ROM_RESOURCE]; | 326 | struct resource *res = &dev->resource[PCI_ROM_RESOURCE]; |
327 | dev->rom_base_reg = rom; | 327 | dev->rom_base_reg = rom; |
328 | res->flags = IORESOURCE_MEM | IORESOURCE_PREFETCH | | 328 | res->flags = IORESOURCE_MEM | IORESOURCE_PREFETCH | |
329 | IORESOURCE_READONLY | IORESOURCE_CACHEABLE | | 329 | IORESOURCE_READONLY | IORESOURCE_SIZEALIGN; |
330 | IORESOURCE_SIZEALIGN; | ||
331 | __pci_read_base(dev, pci_bar_mem32, res, rom); | 330 | __pci_read_base(dev, pci_bar_mem32, res, rom); |
332 | } | 331 | } |
333 | } | 332 | } |
diff --git a/drivers/pnp/manager.c b/drivers/pnp/manager.c index 9357aa779048..7ad3295752ef 100644 --- a/drivers/pnp/manager.c +++ b/drivers/pnp/manager.c | |||
@@ -97,8 +97,6 @@ static int pnp_assign_mem(struct pnp_dev *dev, struct pnp_mem *rule, int idx) | |||
97 | /* ??? rule->flags restricted to 8 bits, all tests bogus ??? */ | 97 | /* ??? rule->flags restricted to 8 bits, all tests bogus ??? */ |
98 | if (!(rule->flags & IORESOURCE_MEM_WRITEABLE)) | 98 | if (!(rule->flags & IORESOURCE_MEM_WRITEABLE)) |
99 | res->flags |= IORESOURCE_READONLY; | 99 | res->flags |= IORESOURCE_READONLY; |
100 | if (rule->flags & IORESOURCE_MEM_CACHEABLE) | ||
101 | res->flags |= IORESOURCE_CACHEABLE; | ||
102 | if (rule->flags & IORESOURCE_MEM_RANGELENGTH) | 100 | if (rule->flags & IORESOURCE_MEM_RANGELENGTH) |
103 | res->flags |= IORESOURCE_RANGELENGTH; | 101 | res->flags |= IORESOURCE_RANGELENGTH; |
104 | if (rule->flags & IORESOURCE_MEM_SHADOWABLE) | 102 | if (rule->flags & IORESOURCE_MEM_SHADOWABLE) |
diff --git a/drivers/scsi/aic94xx/aic94xx_init.c b/drivers/scsi/aic94xx/aic94xx_init.c index 4b135cca42a1..140cb8e6fea2 100644 --- a/drivers/scsi/aic94xx/aic94xx_init.c +++ b/drivers/scsi/aic94xx/aic94xx_init.c | |||
@@ -100,12 +100,7 @@ static int asd_map_memio(struct asd_ha_struct *asd_ha) | |||
100 | pci_name(asd_ha->pcidev)); | 100 | pci_name(asd_ha->pcidev)); |
101 | goto Err; | 101 | goto Err; |
102 | } | 102 | } |
103 | if (io_handle->flags & IORESOURCE_CACHEABLE) | 103 | io_handle->addr = ioremap(io_handle->start, io_handle->len); |
104 | io_handle->addr = ioremap(io_handle->start, | ||
105 | io_handle->len); | ||
106 | else | ||
107 | io_handle->addr = ioremap_nocache(io_handle->start, | ||
108 | io_handle->len); | ||
109 | if (!io_handle->addr) { | 104 | if (!io_handle->addr) { |
110 | asd_printk("couldn't map MBAR%d of %s\n", i==0?0:1, | 105 | asd_printk("couldn't map MBAR%d of %s\n", i==0?0:1, |
111 | pci_name(asd_ha->pcidev)); | 106 | pci_name(asd_ha->pcidev)); |
diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c index 914c39f9f388..e4f77cad9fd8 100644 --- a/drivers/scsi/arcmsr/arcmsr_hba.c +++ b/drivers/scsi/arcmsr/arcmsr_hba.c | |||
@@ -259,10 +259,7 @@ static bool arcmsr_remap_pciregion(struct AdapterControlBlock *acb) | |||
259 | addr = (unsigned long)pci_resource_start(pdev, 0); | 259 | addr = (unsigned long)pci_resource_start(pdev, 0); |
260 | range = pci_resource_len(pdev, 0); | 260 | range = pci_resource_len(pdev, 0); |
261 | flags = pci_resource_flags(pdev, 0); | 261 | flags = pci_resource_flags(pdev, 0); |
262 | if (flags & IORESOURCE_CACHEABLE) | 262 | mem_base0 = ioremap(addr, range); |
263 | mem_base0 = ioremap(addr, range); | ||
264 | else | ||
265 | mem_base0 = ioremap_nocache(addr, range); | ||
266 | if (!mem_base0) { | 263 | if (!mem_base0) { |
267 | pr_notice("arcmsr%d: memory mapping region fail\n", | 264 | pr_notice("arcmsr%d: memory mapping region fail\n", |
268 | acb->host->host_no); | 265 | acb->host->host_no); |
diff --git a/drivers/scsi/mvsas/mv_init.c b/drivers/scsi/mvsas/mv_init.c index d40d734aa53a..e654b5cec69e 100644 --- a/drivers/scsi/mvsas/mv_init.c +++ b/drivers/scsi/mvsas/mv_init.c | |||
@@ -324,13 +324,9 @@ int mvs_ioremap(struct mvs_info *mvi, int bar, int bar_ex) | |||
324 | goto err_out; | 324 | goto err_out; |
325 | 325 | ||
326 | res_flag_ex = pci_resource_flags(pdev, bar_ex); | 326 | res_flag_ex = pci_resource_flags(pdev, bar_ex); |
327 | if (res_flag_ex & IORESOURCE_MEM) { | 327 | if (res_flag_ex & IORESOURCE_MEM) |
328 | if (res_flag_ex & IORESOURCE_CACHEABLE) | 328 | mvi->regs_ex = ioremap(res_start, res_len); |
329 | mvi->regs_ex = ioremap(res_start, res_len); | 329 | else |
330 | else | ||
331 | mvi->regs_ex = ioremap_nocache(res_start, | ||
332 | res_len); | ||
333 | } else | ||
334 | mvi->regs_ex = (void *)res_start; | 330 | mvi->regs_ex = (void *)res_start; |
335 | if (!mvi->regs_ex) | 331 | if (!mvi->regs_ex) |
336 | goto err_out; | 332 | goto err_out; |
@@ -342,10 +338,7 @@ int mvs_ioremap(struct mvs_info *mvi, int bar, int bar_ex) | |||
342 | goto err_out; | 338 | goto err_out; |
343 | 339 | ||
344 | res_flag = pci_resource_flags(pdev, bar); | 340 | res_flag = pci_resource_flags(pdev, bar); |
345 | if (res_flag & IORESOURCE_CACHEABLE) | 341 | mvi->regs = ioremap(res_start, res_len); |
346 | mvi->regs = ioremap(res_start, res_len); | ||
347 | else | ||
348 | mvi->regs = ioremap_nocache(res_start, res_len); | ||
349 | 342 | ||
350 | if (!mvi->regs) { | 343 | if (!mvi->regs) { |
351 | if (mvi->regs_ex && (res_flag_ex & IORESOURCE_MEM)) | 344 | if (mvi->regs_ex && (res_flag_ex & IORESOURCE_MEM)) |
diff --git a/drivers/video/fbdev/ocfb.c b/drivers/video/fbdev/ocfb.c index de9819660ca0..c9293aea8ec3 100644 --- a/drivers/video/fbdev/ocfb.c +++ b/drivers/video/fbdev/ocfb.c | |||
@@ -325,7 +325,6 @@ static int ocfb_probe(struct platform_device *pdev) | |||
325 | dev_err(&pdev->dev, "I/O resource request failed\n"); | 325 | dev_err(&pdev->dev, "I/O resource request failed\n"); |
326 | return -ENXIO; | 326 | return -ENXIO; |
327 | } | 327 | } |
328 | res->flags &= ~IORESOURCE_CACHEABLE; | ||
329 | fbdev->regs = devm_ioremap_resource(&pdev->dev, res); | 328 | fbdev->regs = devm_ioremap_resource(&pdev->dev, res); |
330 | if (IS_ERR(fbdev->regs)) | 329 | if (IS_ERR(fbdev->regs)) |
331 | return PTR_ERR(fbdev->regs); | 330 | return PTR_ERR(fbdev->regs); |
diff --git a/lib/devres.c b/lib/devres.c index fbe2aac522e6..f13a2468ff39 100644 --- a/lib/devres.c +++ b/lib/devres.c | |||
@@ -119,10 +119,9 @@ EXPORT_SYMBOL(devm_iounmap); | |||
119 | * @dev: generic device to handle the resource for | 119 | * @dev: generic device to handle the resource for |
120 | * @res: resource to be handled | 120 | * @res: resource to be handled |
121 | * | 121 | * |
122 | * Checks that a resource is a valid memory region, requests the memory region | 122 | * Checks that a resource is a valid memory region, requests the memory |
123 | * and ioremaps it either as cacheable or as non-cacheable memory depending on | 123 | * region and ioremaps it. All operations are managed and will be undone |
124 | * the resource's flags. All operations are managed and will be undone on | 124 | * on driver detach. |
125 | * driver detach. | ||
126 | * | 125 | * |
127 | * Returns a pointer to the remapped memory or an ERR_PTR() encoded error code | 126 | * Returns a pointer to the remapped memory or an ERR_PTR() encoded error code |
128 | * on failure. Usage example: | 127 | * on failure. Usage example: |
@@ -153,11 +152,7 @@ void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res) | |||
153 | return IOMEM_ERR_PTR(-EBUSY); | 152 | return IOMEM_ERR_PTR(-EBUSY); |
154 | } | 153 | } |
155 | 154 | ||
156 | if (res->flags & IORESOURCE_CACHEABLE) | 155 | dest_ptr = devm_ioremap(dev, res->start, size); |
157 | dest_ptr = devm_ioremap(dev, res->start, size); | ||
158 | else | ||
159 | dest_ptr = devm_ioremap_nocache(dev, res->start, size); | ||
160 | |||
161 | if (!dest_ptr) { | 156 | if (!dest_ptr) { |
162 | dev_err(dev, "ioremap failed for resource %pR\n", res); | 157 | dev_err(dev, "ioremap failed for resource %pR\n", res); |
163 | devm_release_mem_region(dev, res->start, size); | 158 | devm_release_mem_region(dev, res->start, size); |
diff --git a/lib/pci_iomap.c b/lib/pci_iomap.c index bcce5f149310..e1930dbab2da 100644 --- a/lib/pci_iomap.c +++ b/lib/pci_iomap.c | |||
@@ -41,11 +41,8 @@ void __iomem *pci_iomap_range(struct pci_dev *dev, | |||
41 | len = maxlen; | 41 | len = maxlen; |
42 | if (flags & IORESOURCE_IO) | 42 | if (flags & IORESOURCE_IO) |
43 | return __pci_ioport_map(dev, start, len); | 43 | return __pci_ioport_map(dev, start, len); |
44 | if (flags & IORESOURCE_MEM) { | 44 | if (flags & IORESOURCE_MEM) |
45 | if (flags & IORESOURCE_CACHEABLE) | 45 | return ioremap(start, len); |
46 | return ioremap(start, len); | ||
47 | return ioremap_nocache(start, len); | ||
48 | } | ||
49 | /* What? */ | 46 | /* What? */ |
50 | return NULL; | 47 | return NULL; |
51 | } | 48 | } |