From 85254c7cd879d4e13aadc64b85ee199e052d4748 Mon Sep 17 00:00:00 2001 From: Wen Congyang Date: Fri, 22 Feb 2013 16:32:50 -0800 Subject: [PATCH] --- yaml --- r: 356511 b: refs/heads/master c: 993c1aad8f316dbafae6a0ec660ec846676838d6 h: refs/heads/master i: 356509: ae553118d05d09786c74b9394b4303e4d52e1d31 356507: 147739c9644045238c5dda8b0ac58fb436caa53d 356503: 5c38a8c6987af2a3627766582f46ccbdf6140240 356495: dd0a07d762f70ae3685f3836a21424a59a3dbc06 356479: d8827093bd6f65a286a36b10efaa6badf49690bd v: v3 --- [refs] | 2 +- trunk/mm/memory_hotplug.c | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 0b6b3b1bccfa..ebe88504b58c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a864b9d06c71456470b3544fe4cc07bcdd29828d +refs/heads/master: 993c1aad8f316dbafae6a0ec660ec846676838d6 diff --git a/trunk/mm/memory_hotplug.c b/trunk/mm/memory_hotplug.c index 302291429953..6a82972aeae5 100644 --- a/trunk/mm/memory_hotplug.c +++ b/trunk/mm/memory_hotplug.c @@ -1387,10 +1387,13 @@ int remove_memory(u64 start, u64 size) unsigned long start_pfn, end_pfn; unsigned long pfn, section_nr; int ret; + int return_on_error = 0; + int retry = 0; start_pfn = PFN_DOWN(start); end_pfn = start_pfn + PFN_DOWN(size); +repeat: for (pfn = start_pfn; pfn < end_pfn; pfn += PAGES_PER_SECTION) { section_nr = pfn_to_section_nr(pfn); if (!present_section_nr(section_nr)) @@ -1409,14 +1412,23 @@ int remove_memory(u64 start, u64 size) ret = offline_memory_block(mem); if (ret) { - kobject_put(&mem->dev.kobj); - return ret; + if (return_on_error) { + kobject_put(&mem->dev.kobj); + return ret; + } else { + retry = 1; + } } } if (mem) kobject_put(&mem->dev.kobj); + if (retry) { + return_on_error = 1; + goto repeat; + } + return 0; } #else