diff options
Diffstat (limited to 'arch/powerpc/mm/mem.c')
| -rw-r--r-- | arch/powerpc/mm/mem.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c index 1281c6eb3a85..fe8c61149fb8 100644 --- a/arch/powerpc/mm/mem.c +++ b/arch/powerpc/mm/mem.c | |||
| @@ -127,7 +127,8 @@ int __weak remove_section_mapping(unsigned long start, unsigned long end) | |||
| 127 | return -ENODEV; | 127 | return -ENODEV; |
| 128 | } | 128 | } |
| 129 | 129 | ||
| 130 | int arch_add_memory(int nid, u64 start, u64 size, bool want_memblock) | 130 | int arch_add_memory(int nid, u64 start, u64 size, struct vmem_altmap *altmap, |
| 131 | bool want_memblock) | ||
| 131 | { | 132 | { |
| 132 | unsigned long start_pfn = start >> PAGE_SHIFT; | 133 | unsigned long start_pfn = start >> PAGE_SHIFT; |
| 133 | unsigned long nr_pages = size >> PAGE_SHIFT; | 134 | unsigned long nr_pages = size >> PAGE_SHIFT; |
| @@ -143,15 +144,14 @@ int arch_add_memory(int nid, u64 start, u64 size, bool want_memblock) | |||
| 143 | return -EFAULT; | 144 | return -EFAULT; |
| 144 | } | 145 | } |
| 145 | 146 | ||
| 146 | return __add_pages(nid, start_pfn, nr_pages, want_memblock); | 147 | return __add_pages(nid, start_pfn, nr_pages, altmap, want_memblock); |
| 147 | } | 148 | } |
| 148 | 149 | ||
| 149 | #ifdef CONFIG_MEMORY_HOTREMOVE | 150 | #ifdef CONFIG_MEMORY_HOTREMOVE |
| 150 | int arch_remove_memory(u64 start, u64 size) | 151 | int arch_remove_memory(u64 start, u64 size, struct vmem_altmap *altmap) |
| 151 | { | 152 | { |
| 152 | unsigned long start_pfn = start >> PAGE_SHIFT; | 153 | unsigned long start_pfn = start >> PAGE_SHIFT; |
| 153 | unsigned long nr_pages = size >> PAGE_SHIFT; | 154 | unsigned long nr_pages = size >> PAGE_SHIFT; |
| 154 | struct vmem_altmap *altmap; | ||
| 155 | struct page *page; | 155 | struct page *page; |
| 156 | int ret; | 156 | int ret; |
| 157 | 157 | ||
| @@ -160,11 +160,10 @@ int arch_remove_memory(u64 start, u64 size) | |||
| 160 | * when querying the zone. | 160 | * when querying the zone. |
| 161 | */ | 161 | */ |
| 162 | page = pfn_to_page(start_pfn); | 162 | page = pfn_to_page(start_pfn); |
| 163 | altmap = to_vmem_altmap((unsigned long) page); | ||
| 164 | if (altmap) | 163 | if (altmap) |
| 165 | page += vmem_altmap_offset(altmap); | 164 | page += vmem_altmap_offset(altmap); |
| 166 | 165 | ||
| 167 | ret = __remove_pages(page_zone(page), start_pfn, nr_pages); | 166 | ret = __remove_pages(page_zone(page), start_pfn, nr_pages, altmap); |
| 168 | if (ret) | 167 | if (ret) |
| 169 | return ret; | 168 | return ret; |
| 170 | 169 | ||
