diff options
Diffstat (limited to 'mm/memblock.c')
| -rw-r--r-- | mm/memblock.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/mm/memblock.c b/mm/memblock.c index bdeb22faafff..7f0a860a357e 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -21,6 +21,7 @@ #include <linux/memblock.h> #include <linux/preempt.h> #include <linux/seqlock.h> +#include <linux/irqflags.h> #include <asm-generic/sections.h> #include <linux/io.h> @@ -1675,30 +1676,35 @@ void __init memblock_allow_resize(void) memblock_can_resize = 1; } -static void __init_memblock memblock_resize_late(int begin) +static unsigned long __init_memblock +memblock_resize_late(int begin, unsigned long flags) { static int memblock_can_resize_old; if (begin) { preempt_disable(); + local_irq_save(flags); memblock_can_resize_old = memblock_can_resize; memblock_can_resize = 0; raw_write_seqcount_begin(&memblock_seq); } else { raw_write_seqcount_end(&memblock_seq); memblock_can_resize = memblock_can_resize_old; + local_irq_restore(flags); preempt_enable(); } + + return flags; } -void __init_memblock memblock_region_resize_late_begin(void) +unsigned long __init_memblock memblock_region_resize_late_begin(void) { - memblock_resize_late(1); + return memblock_resize_late(1, 0); } -void __init_memblock memblock_region_resize_late_end(void) +void __init_memblock memblock_region_resize_late_end(unsigned long flags) { - memblock_resize_late(0); + memblock_resize_late(0, flags); } static int __init early_memblock(char *p) |
