Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1511797
| From | Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH 4.4 17/51] mm/hugetlb: fix memory offline with hugepage size > memory block size |
| Date | 2016-10-29 16:30 +0200 |
| Message-ID | <sxCNY-7nb-29@gated-at.bofh.it> (permalink) |
| References | <sxCkW-6TH-31@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gerald Schaefer <gerald.schaefer@de.ibm.com>
commit 2247bb335ab9c40058484cac36ea74ee652f3b7b upstream.
Patch series "mm/hugetlb: memory offline issues with hugepages", v4.
This addresses several issues with hugepages and memory offline. While
the first patch fixes a panic, and is therefore rather important, the
last patch is just a performance optimization.
The second patch fixes a theoretical issue with reserved hugepages,
while still leaving some ugly usability issue, see description.
This patch (of 3):
dissolve_free_huge_pages() will either run into the VM_BUG_ON() or a
list corruption and addressing exception when trying to set a memory
block offline that is part (but not the first part) of a "gigantic"
hugetlb page with a size > memory block size.
When no other smaller hugetlb page sizes are present, the VM_BUG_ON()
will trigger directly. In the other case we will run into an addressing
exception later, because dissolve_free_huge_page() will not work on the
head page of the compound hugetlb page which will result in a NULL
hstate from page_hstate().
To fix this, first remove the VM_BUG_ON() because it is wrong, and then
use the compound head page in dissolve_free_huge_page(). This means
that an unused pre-allocated gigantic page that has any part of itself
inside the memory block that is going offline will be dissolved
completely. Losing an unused gigantic hugepage is preferable to failing
the memory offline, for example in the situation where a (possibly
faulty) memory DIMM needs to go offline.
Changes for v4.4 stable:
- make it apply w/o commit c1470b33 "mm/hugetlb: fix incorrect
hugepages count during mem hotplug"
Fixes: c8721bbb ("mm: memory-hotplug: enable memory hotplug to handle hugepage")
Link: http://lkml.kernel.org/r/20160926172811.94033-2-gerald.schaefer@de.ibm.com
Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Acked-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: "Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Mike Kravetz <mike.kravetz@oracle.com>
Cc: "Aneesh Kumar K . V" <aneesh.kumar@linux.vnet.ibm.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Rui Teng <rui.teng@linux.vnet.ibm.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
mm/hugetlb.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -1416,12 +1416,13 @@ static void dissolve_free_huge_page(stru
{
spin_lock(&hugetlb_lock);
if (PageHuge(page) && !page_count(page)) {
- struct hstate *h = page_hstate(page);
- int nid = page_to_nid(page);
- list_del(&page->lru);
+ struct page *head = compound_head(page);
+ struct hstate *h = page_hstate(head);
+ int nid = page_to_nid(head);
+ list_del(&head->lru);
h->free_huge_pages--;
h->free_huge_pages_node[nid]--;
- update_and_free_page(h, page);
+ update_and_free_page(h, head);
}
spin_unlock(&hugetlb_lock);
}
@@ -1429,7 +1430,8 @@ static void dissolve_free_huge_page(stru
/*
* Dissolve free hugepages in a given pfn range. Used by memory hotplug to
* make specified memory blocks removable from the system.
- * Note that start_pfn should aligned with (minimum) hugepage size.
+ * Note that this will dissolve a free gigantic hugepage completely, if any
+ * part of it lies within the given range.
*/
void dissolve_free_huge_pages(unsigned long start_pfn, unsigned long end_pfn)
{
@@ -1438,7 +1440,6 @@ void dissolve_free_huge_pages(unsigned l
if (!hugepages_supported())
return;
- VM_BUG_ON(!IS_ALIGNED(start_pfn, 1 << minimum_order));
for (pfn = start_pfn; pfn < end_pfn; pfn += 1 << minimum_order)
dissolve_free_huge_page(pfn_to_page(pfn));
}
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH 4.4 00/51] 4.4.29-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:00 +0200 [PATCH 4.4 23/51] powerpc/eeh: Null check uses of eeh_pe_bus_get Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:00 +0200 [PATCH 4.4 36/51] ASoC: dapm: Fix kcontrol creation for output driver widget Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:00 +0200 [PATCH 4.4 28/51] spi: spi-fsl-dspi: Drop extra spi_master_put in device remove function Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:00 +0200 [PATCH 4.4 29/51] mwifiex: correct aid value during tdls setup Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:00 +0200 [PATCH 4.4 16/51] drm/i915: Unalias obj->phys_handle and obj->userptr Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:00 +0200 [PATCH 4.4 13/51] drm/i915/gen9: fix the WaWmMemoryReadLatency implementation Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:00 +0200 [PATCH 4.4 20/51] ipip: Properly mark ipip GRO packets as encapsulated. Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:00 +0200 [PATCH 4.4 06/51] drm/amdgpu/dce11: add missing drm_mode_config_cleanup call Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:00 +0200 [PATCH 4.4 46/51] perf hists browser: Fix event group display Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:00 +0200 [PATCH 4.4 03/51] drm/amdgpu/dce10: disable hpd on local panels Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:00 +0200 [PATCH 4.4 41/51] s390/cio: fix accidental interrupt enabling during resume Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:00 +0200 [PATCH 4.4 50/51] powerpc/nvram: Fix an incorrect partition merge Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 34/51] ASoC: dapm: Fix possible uninitialized variable in snd_soc_dapm_get_volsw() Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 45/51] clk: divider: Fix clk_divider_round_rate() to use clk_readl() Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 47/51] perf symbols: Check symbol_conf.allow_aliases for kallsyms loading too Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 10/51] drm/radeon: change vblank_times calculation method to reduce computational error. Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 21/51] tunnels: Dont apply GRO to multiple layers of encapsulation. Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 04/51] drm/amdgpu/dce8: disable hpd on local panels Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 17/51] mm/hugetlb: fix memory offline with hugepage size > memory block size Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 25/51] genirq/generic_chip: Add irq_unmap callback Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 02/51] drm/amdgpu: fix IB alignment for UVD Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 14/51] Revert "drm/i915: Check live status before reading edid" Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 42/51] s390/con3270: fix use of uninitialised data Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 05/51] drm/amdgpu/dce11: disable hpd on local panels Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 51/51] ARM: pxa: pxa_cplds: fix interrupt handling Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 44/51] clk: qoriq: fix a register offset error Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 26/51] uio: fix dmem_region_start computation Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 32/51] hwrng: omap - Only fail if pm_runtime_get_sync returns < 0 Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 31/51] crypto: arm/ghash-ce - add missing async import/export Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 40/51] x86/mm: Expand the exception table logic to allow new handling options Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 33/51] ASoC: topology: Fix error return code in soc_tplg_dapm_widget_create() Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 22/51] tunnels: Remove encapsulation offloads on decap. Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 08/51] drm/radeon: narrow asic_init for virtualization Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 37/51] staging: r8188eu: Fix scheduling while atomic splat Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 07/51] drm/amdgpu: change vblank_times calculation method to reduce computational error. Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 19/51] posix_acl: Clear SGID bit when setting file permissions Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 09/51] drm/radeon/si/dpm: fix phase shedding setup Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 35/51] ASoC: dapm: Fix value setting for _ENUM_DOUBLE MUXs second channel Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 11/51] drm/vmwgfx: Limit the user-space command buffer size Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 43/51] s390/con3270: fix insufficient space padding Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 49/51] mpt3sas: Dont spam logs if logging level is 0 Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 38/51] power: bq24257: Fix use of uninitialized pointer bq->charger Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 [PATCH 4.4 18/51] brcmfmac: avoid potential stack overflow in brcmf_cfg80211_start_ap() Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-29 16:30 +0200 Re: [PATCH 4.4 00/51] 4.4.29-stable review Shuah Khan <shuah.kh@samsung.com> - 2016-10-30 01:10 +0200 Re: [PATCH 4.4 00/51] 4.4.29-stable review Guenter Roeck <linux@roeck-us.net> - 2016-10-30 02:50 +0200
csiph-web