summaryrefslogtreecommitdiff
path: root/mm/memblock.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/memblock.c')
-rw-r--r--mm/memblock.c16
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)