From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751870AbbJFDqI (ORCPT ); Mon, 5 Oct 2015 23:46:08 -0400 Received: from mgwym04.jp.fujitsu.com ([211.128.242.43]:56429 "EHLO mgwym04.jp.fujitsu.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751388AbbJFDqG (ORCPT ); Mon, 5 Oct 2015 23:46:06 -0400 X-Greylist: delayed 616 seconds by postgrey-1.27 at vger.kernel.org; Mon, 05 Oct 2015 23:46:06 EDT X-SecurityPolicyCheck: OK by SHieldMailChecker v2.3.2 X-SHieldMailCheckerPolicyVersion: FJ-ISEC-20150223 X-SHieldMailCheckerMailID: cf47f8a3835641e4b1ca1c48fb3b7f3b Subject: Re: [PATCH 03/11] x86/mm/hotplug: Don't remove PGD entries in remove_pagetable() To: Ingo Molnar , linux-kernel@vger.kernel.org, linux-mm@kvack.org, =?UTF-8?B?SXNoaW1hdHN1LCBZYXN1YWtpL+efs+adviDpnZbnq6A=?= , Tang Chen References: <1442903021-3893-1-git-send-email-mingo@kernel.org> <1442903021-3893-4-git-send-email-mingo@kernel.org> Cc: Andy Lutomirski , Andrew Morton , Denys Vlasenko , Brian Gerst , Peter Zijlstra , Borislav Petkov , "H. Peter Anvin" , Linus Torvalds , Oleg Nesterov , Waiman Long , Thomas Gleixner , =?UTF-8?B?SXp1bWksIFRha3Uv5rOJIOaLkw==?= From: Kamezawa Hiroyuki Message-ID: <56134169.1070500@jp.fujitsu.com> Date: Tue, 6 Oct 2015 12:35:05 +0900 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: <1442903021-3893-4-git-send-email-mingo@kernel.org> Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit X-TM-AS-MML: disable Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2015/09/22 15:23, Ingo Molnar wrote: > So when memory hotplug removes a piece of physical memory from pagetable > mappings, it also frees the underlying PGD entry. > > This complicates PGD management, so don't do this. We can keep the > PGD mapped and the PUD table all clear - it's only a single 4K page > per 512 GB of memory hotplugged. > > Cc: Andrew Morton > Cc: Andy Lutomirski > Cc: Borislav Petkov > Cc: Brian Gerst > Cc: Denys Vlasenko > Cc: H. Peter Anvin > Cc: Linus Torvalds > Cc: Oleg Nesterov > Cc: Peter Zijlstra > Cc: Rik van Riel > Cc: Thomas Gleixner > Cc: Waiman Long > Cc: linux-mm@kvack.org > Signed-off-by: Ingo Molnar Ishimatsu-san, Tang-san, please check. Doesn't this patch affects the issues of 5255e0a79fcc0ff47b387af92bd9ef5729b1b859 9661d5bcd058fe15b4138a00d96bd36516134543 ? -Kame > --- > arch/x86/mm/init_64.c | 27 --------------------------- > 1 file changed, 27 deletions(-) > > diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c > index 7129e7647a76..60b0cc3f2819 100644 > --- a/arch/x86/mm/init_64.c > +++ b/arch/x86/mm/init_64.c > @@ -780,27 +780,6 @@ static void __meminit free_pmd_table(pmd_t *pmd_start, pud_t *pud) > spin_unlock(&init_mm.page_table_lock); > } > > -/* Return true if pgd is changed, otherwise return false. */ > -static bool __meminit free_pud_table(pud_t *pud_start, pgd_t *pgd) > -{ > - pud_t *pud; > - int i; > - > - for (i = 0; i < PTRS_PER_PUD; i++) { > - pud = pud_start + i; > - if (pud_val(*pud)) > - return false; > - } > - > - /* free a pud table */ > - free_pagetable(pgd_page(*pgd), 0); > - spin_lock(&init_mm.page_table_lock); > - pgd_clear(pgd); > - spin_unlock(&init_mm.page_table_lock); > - > - return true; > -} > - > static void __meminit > remove_pte_table(pte_t *pte_start, unsigned long addr, unsigned long end, > bool direct) > @@ -992,7 +971,6 @@ remove_pagetable(unsigned long start, unsigned long end, bool direct) > unsigned long addr; > pgd_t *pgd; > pud_t *pud; > - bool pgd_changed = false; > > for (addr = start; addr < end; addr = next) { > next = pgd_addr_end(addr, end); > @@ -1003,13 +981,8 @@ remove_pagetable(unsigned long start, unsigned long end, bool direct) > > pud = (pud_t *)pgd_page_vaddr(*pgd); > remove_pud_table(pud, addr, next, direct); > - if (free_pud_table(pud, pgd)) > - pgd_changed = true; > } > > - if (pgd_changed) > - sync_global_pgds(start, end - 1, 1); > - > flush_tlb_all(); > } > >