Loading drivers/base/dma-removed.c +3 −2 Original line number Diff line number Diff line Loading @@ -181,15 +181,16 @@ static void removed_region_fixup(struct removed_region *dma_mem, int index) { unsigned long fixup_size; unsigned long base_pfn; unsigned long flags; if (index > dma_mem->nr_pages) return; /* carve-out */ memblock_region_resize_late_begin(); flags = memblock_region_resize_late_begin(); memblock_free(dma_mem->base, dma_mem->nr_pages * PAGE_SIZE); memblock_remove(dma_mem->base, index * PAGE_SIZE); memblock_region_resize_late_end(); memblock_region_resize_late_end(flags); /* clear page-mappings */ base_pfn = dma_mem->base >> PAGE_SHIFT; Loading include/linux/memblock.h +2 −2 Original line number Diff line number Diff line Loading @@ -93,8 +93,8 @@ int memblock_clear_hotplug(phys_addr_t base, phys_addr_t size); int memblock_mark_mirror(phys_addr_t base, phys_addr_t size); int memblock_mark_nomap(phys_addr_t base, phys_addr_t size); ulong choose_memblock_flags(void); void memblock_region_resize_late_begin(void); void memblock_region_resize_late_end(void); unsigned long memblock_region_resize_late_begin(void); void memblock_region_resize_late_end(unsigned long); /* Low level functions */ int memblock_add_range(struct memblock_type *type, Loading mm/memblock.c +11 −5 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include <linux/memblock.h> #include <linux/preempt.h> #include <linux/seqlock.h> #include <linux/irqflags.h> #include <asm/sections.h> #include <linux/io.h> Loading Loading @@ -1734,30 +1735,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) Loading Loading
drivers/base/dma-removed.c +3 −2 Original line number Diff line number Diff line Loading @@ -181,15 +181,16 @@ static void removed_region_fixup(struct removed_region *dma_mem, int index) { unsigned long fixup_size; unsigned long base_pfn; unsigned long flags; if (index > dma_mem->nr_pages) return; /* carve-out */ memblock_region_resize_late_begin(); flags = memblock_region_resize_late_begin(); memblock_free(dma_mem->base, dma_mem->nr_pages * PAGE_SIZE); memblock_remove(dma_mem->base, index * PAGE_SIZE); memblock_region_resize_late_end(); memblock_region_resize_late_end(flags); /* clear page-mappings */ base_pfn = dma_mem->base >> PAGE_SHIFT; Loading
include/linux/memblock.h +2 −2 Original line number Diff line number Diff line Loading @@ -93,8 +93,8 @@ int memblock_clear_hotplug(phys_addr_t base, phys_addr_t size); int memblock_mark_mirror(phys_addr_t base, phys_addr_t size); int memblock_mark_nomap(phys_addr_t base, phys_addr_t size); ulong choose_memblock_flags(void); void memblock_region_resize_late_begin(void); void memblock_region_resize_late_end(void); unsigned long memblock_region_resize_late_begin(void); void memblock_region_resize_late_end(unsigned long); /* Low level functions */ int memblock_add_range(struct memblock_type *type, Loading
mm/memblock.c +11 −5 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include <linux/memblock.h> #include <linux/preempt.h> #include <linux/seqlock.h> #include <linux/irqflags.h> #include <asm/sections.h> #include <linux/io.h> Loading Loading @@ -1734,30 +1735,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) Loading