diff options
| -rw-r--r-- | arch/x86/include/asm/io.h | 1 | ||||
| -rw-r--r-- | arch/x86/mm/ioremap.c | 14 | ||||
| -rw-r--r-- | arch/x86/mm/pgtable_32.c | 1 |
3 files changed, 16 insertions, 0 deletions
diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h index a1dcfa3ab17d..30a3e9776123 100644 --- a/arch/x86/include/asm/io.h +++ b/arch/x86/include/asm/io.h | |||
| @@ -347,6 +347,7 @@ extern void __iomem *early_ioremap(resource_size_t phys_addr, | |||
| 347 | extern void __iomem *early_memremap(resource_size_t phys_addr, | 347 | extern void __iomem *early_memremap(resource_size_t phys_addr, |
| 348 | unsigned long size); | 348 | unsigned long size); |
| 349 | extern void early_iounmap(void __iomem *addr, unsigned long size); | 349 | extern void early_iounmap(void __iomem *addr, unsigned long size); |
| 350 | extern void fixup_early_ioremap(void); | ||
| 350 | 351 | ||
| 351 | #define IO_SPACE_LIMIT 0xffff | 352 | #define IO_SPACE_LIMIT 0xffff |
| 352 | 353 | ||
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c index 5eb1ba74a3a9..12e4d2d3c110 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c | |||
| @@ -448,6 +448,20 @@ static inline void __init early_clear_fixmap(enum fixed_addresses idx) | |||
| 448 | static void __iomem *prev_map[FIX_BTMAPS_SLOTS] __initdata; | 448 | static void __iomem *prev_map[FIX_BTMAPS_SLOTS] __initdata; |
| 449 | static unsigned long prev_size[FIX_BTMAPS_SLOTS] __initdata; | 449 | static unsigned long prev_size[FIX_BTMAPS_SLOTS] __initdata; |
| 450 | 450 | ||
| 451 | void __init fixup_early_ioremap(void) | ||
| 452 | { | ||
| 453 | int i; | ||
| 454 | |||
| 455 | for (i = 0; i < FIX_BTMAPS_SLOTS; i++) { | ||
| 456 | if (prev_map[i]) { | ||
| 457 | WARN_ON(1); | ||
| 458 | break; | ||
| 459 | } | ||
| 460 | } | ||
| 461 | |||
| 462 | early_ioremap_init(); | ||
| 463 | } | ||
| 464 | |||
| 451 | static int __init check_early_ioremap_leak(void) | 465 | static int __init check_early_ioremap_leak(void) |
| 452 | { | 466 | { |
| 453 | int count = 0; | 467 | int count = 0; |
diff --git a/arch/x86/mm/pgtable_32.c b/arch/x86/mm/pgtable_32.c index 1a8faf09afed..26eadaa60e6c 100644 --- a/arch/x86/mm/pgtable_32.c +++ b/arch/x86/mm/pgtable_32.c | |||
| @@ -128,6 +128,7 @@ static int __init parse_reservetop(char *arg) | |||
| 128 | 128 | ||
| 129 | address = memparse(arg, &arg); | 129 | address = memparse(arg, &arg); |
| 130 | reserve_top_address(address); | 130 | reserve_top_address(address); |
| 131 | fixup_early_ioremap(); | ||
| 131 | return 0; | 132 | return 0; |
| 132 | } | 133 | } |
| 133 | early_param("reservetop", parse_reservetop); | 134 | early_param("reservetop", parse_reservetop); |
