]> git.ipfire.org Git - ipfire-2.x.git/blob - src/patches/suse-2.6.27.39/patches.arch/ppc-pseries_pfn-mem-rm.patch
Imported linux-2.6.27.39 suse/xen patches.
[ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.arch / ppc-pseries_pfn-mem-rm.patch
1 Subject: Bug 435181 - DMEM add caused kernel opps after ehca rejected request
2 From: olh@suse.de
3 References: 435181
4
5 ---
6 arch/powerpc/platforms/pseries/hotplug-memory.c | 12 ++++++++++++
7 mm/memory_hotplug.c | 4 ++--
8 2 files changed, 14 insertions(+), 2 deletions(-)
9
10 --- a/arch/powerpc/platforms/pseries/hotplug-memory.c
11 +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
12 @@ -22,6 +22,18 @@ static int pseries_remove_lmb(unsigned l
13 int ret;
14
15 start_pfn = base >> PAGE_SHIFT;
16 +
17 + if (!pfn_valid(start_pfn)) {
18 + /*
19 + * Failing hotplug memory add will end up calling
20 + * remove device node to clean up. Since its already
21 + * added to lmbs, we need to remove it and pretend
22 + * success.
23 + */
24 + lmb_remove(base, lmb_size);
25 + return 0;
26 + }
27 +
28 zone = page_zone(pfn_to_page(start_pfn));
29
30 /*
31 --- a/mm/memory_hotplug.c
32 +++ b/mm/memory_hotplug.c
33 @@ -323,11 +323,11 @@ int __remove_pages(struct zone *zone, un
34 BUG_ON(phys_start_pfn & ~PAGE_SECTION_MASK);
35 BUG_ON(nr_pages % PAGES_PER_SECTION);
36
37 - release_mem_region(phys_start_pfn << PAGE_SHIFT, nr_pages * PAGE_SIZE);
38 -
39 sections_to_remove = nr_pages / PAGES_PER_SECTION;
40 for (i = 0; i < sections_to_remove; i++) {
41 unsigned long pfn = phys_start_pfn + i*PAGES_PER_SECTION;
42 + release_mem_region(pfn << PAGE_SHIFT,
43 + PAGES_PER_SECTION << PAGE_SHIFT);
44 ret = __remove_section(zone, __pfn_to_section(pfn));
45 if (ret)
46 break;