aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/mm/ioremap.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2008-07-13 16:52:27 -0400
committerIngo Molnar <mingo@elte.hu>2008-07-13 16:52:27 -0400
commitdbbcfb2211761fa69e831a78119c9288fb87eb9d (patch)
treeb40b103ed250e287bf3d4790f1c87001cf7cf52f /arch/x86/mm/ioremap.c
parentb0356cd0e7497252a2c45ecb07b79d931390c8b2 (diff)
parent9df2fe986770bc4c76e8fe72c20b71268eec39a7 (diff)
Merge branch 'linus' into x86/pci-ioapic-boot-irq-quirks
Conflicts: arch/x86/mm/ioremap.c Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/mm/ioremap.c')
-rw-r--r--arch/x86/mm/ioremap.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
index 45e546c4ba78..115f13ee40c9 100644
--- a/arch/x86/mm/ioremap.c
+++ b/arch/x86/mm/ioremap.c
@@ -300,6 +300,29 @@ void __iomem *ioremap_cache(resource_size_t phys_addr, unsigned long size)
300} 300}
301EXPORT_SYMBOL(ioremap_cache); 301EXPORT_SYMBOL(ioremap_cache);
302 302
303static void __iomem *ioremap_default(resource_size_t phys_addr,
304 unsigned long size)
305{
306 unsigned long flags;
307 void *ret;
308 int err;
309
310 /*
311 * - WB for WB-able memory and no other conflicting mappings
312 * - UC_MINUS for non-WB-able memory with no other conflicting mappings
313 * - Inherit from confliting mappings otherwise
314 */
315 err = reserve_memtype(phys_addr, phys_addr + size, -1, &flags);
316 if (err < 0)
317 return NULL;
318
319 ret = (void *) __ioremap_caller(phys_addr, size, flags,
320 __builtin_return_address(0));
321
322 free_memtype(phys_addr, phys_addr + size);
323 return (void __iomem *)ret;
324}
325
303/** 326/**
304 * iounmap - Free a IO remapping 327 * iounmap - Free a IO remapping
305 * @addr: virtual address from ioremap_* 328 * @addr: virtual address from ioremap_*
@@ -365,7 +388,7 @@ void *xlate_dev_mem_ptr(unsigned long phys)
365 if (page_is_ram(start >> PAGE_SHIFT)) 388 if (page_is_ram(start >> PAGE_SHIFT))
366 return __va(phys); 389 return __va(phys);
367 390
368 addr = (void __force *)ioremap(start, PAGE_SIZE); 391 addr = (void __force *)ioremap_default(start, PAGE_SIZE);
369 if (addr) 392 if (addr)
370 addr = (void *)((unsigned long)addr | (phys & ~PAGE_MASK)); 393 addr = (void *)((unsigned long)addr | (phys & ~PAGE_MASK));
371 394