From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751999AbdF0HX4 (ORCPT ); Tue, 27 Jun 2017 03:23:56 -0400 Received: from terminus.zytor.com ([65.50.211.136]:33023 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751492AbdF0HXt (ORCPT ); Tue, 27 Jun 2017 03:23:49 -0400 Date: Tue, 27 Jun 2017 00:19:10 -0700 From: "tip-bot for =?UTF-8?Q?J=C3=A9r=C3=B4me?= Glisse" Message-ID: Cc: luto@kernel.org, linux-kernel@vger.kernel.org, mingo@kernel.org, kirill.shutemov@linux.intel.com, tglx@linutronix.de, jglisse@redhat.com, hpa@zytor.com, akpm@linux-foundation.org, peterz@infradead.org, logang@deltatee.com, torvalds@linux-foundation.org Reply-To: akpm@linux-foundation.org, torvalds@linux-foundation.org, logang@deltatee.com, peterz@infradead.org, mingo@kernel.org, luto@kernel.org, linux-kernel@vger.kernel.org, jglisse@redhat.com, hpa@zytor.com, tglx@linutronix.de, kirill.shutemov@linux.intel.com In-Reply-To: <20170624180514.3821-1-jglisse@redhat.com> References: <20170624180514.3821-1-jglisse@redhat.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/urgent] x86/mm/hotplug: Fix BUG_ON() after hot-remove by not freeing PUD Git-Commit-ID: 98fe3633c5a44e5ee3d642907739eb0210407886 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 98fe3633c5a44e5ee3d642907739eb0210407886 Gitweb: http://git.kernel.org/tip/98fe3633c5a44e5ee3d642907739eb0210407886 Author: Jérôme Glisse AuthorDate: Sat, 24 Jun 2017 14:05:14 -0400 Committer: Ingo Molnar CommitDate: Mon, 26 Jun 2017 11:44:19 +0200 x86/mm/hotplug: Fix BUG_ON() after hot-remove by not freeing PUD Since commit: af2cf278ef4f ("x86/mm/hotplug: Don't remove PGD entries in remove_pagetable()") we no longer free PUDs so that we do not have to synchronize all PGDs on hot-remove/vfree(). But the new 5-level page table patchset reverted that for 4-level page tables, in the following commit: f2a6a7050109: ("x86: Convert the rest of the code to support p4d_t") This patch restores the damage and disables free_pud() if we are in the 4-level page table case, thus avoiding BUG_ON() after hot-remove. Signed-off-by: Jérôme Glisse [ Clarified the changelog and the code comments. ] Reviewed-by: Kirill A. Shutemov Cc: Andrew Morton Cc: Andy Lutomirski Cc: Linus Torvalds Cc: Logan Gunthorpe Cc: Peter Zijlstra Cc: Thomas Gleixner Cc: linux-mm@kvack.org Link: http://lkml.kernel.org/r/20170624180514.3821-1-jglisse@redhat.com Signed-off-by: Ingo Molnar --- arch/x86/mm/init_64.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 95651dc..0a59daf 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c @@ -990,7 +990,13 @@ remove_p4d_table(p4d_t *p4d_start, unsigned long addr, unsigned long end, pud_base = pud_offset(p4d, 0); remove_pud_table(pud_base, addr, next, direct); - free_pud_table(pud_base, p4d); + /* + * For 4-level page tables we do not want to free PUDs, but in the + * 5-level case we should free them. This code will have to change + * to adapt for boot-time switching between 4 and 5 level page tables. + */ + if (CONFIG_PGTABLE_LEVELS == 5) + free_pud_table(pud_base, p4d); } if (direct)