From patchwork Thu Sep 7 05:05:51 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Blanchard X-Patchwork-Id: 810847 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3xnpNX1kNTz9s82 for ; Thu, 7 Sep 2017 15:07:24 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=ozlabs.org header.i=@ozlabs.org header.b="j8uP3Nku"; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3xnpNX0K7SzDrWj for ; Thu, 7 Sep 2017 15:07:24 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=ozlabs.org header.i=@ozlabs.org header.b="j8uP3Nku"; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Received: from ozlabs.org (ozlabs.org [IPv6:2401:3900:2:1::2]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3xnpLt1HLhzDrSs for ; Thu, 7 Sep 2017 15:05:58 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=ozlabs.org header.i=@ozlabs.org header.b="j8uP3Nku"; dkim-atps=neutral Received: by ozlabs.org (Postfix, from userid 1010) id 3xnpLt0RJXz9s8J; Thu, 7 Sep 2017 15:05:57 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ozlabs.org; s=201707; t=1504760758; bh=366dIb817QVqb8VCm9vZzdxFX2/S+zm4uxWyPY6c1Ig=; h=From:To:Cc:Subject:Date:From; b=j8uP3NkuRqwmvWjTT5RkDVz8lJXV8oY3Ps3AAOfVCwZx35ZnVBGlUFDYeisspWFNQ vJ+tb/PQ3ibGt7/qQt3P59xDSN+QmrrTal5jqY2bUpk/jFfqavu2yLdKzcGjGmeYA2 pd5DDRBA/M27CDBvtEIFp3eCeqzEwKUE271ejIbi2wOp4TGXVtaHA2BK+iho5yU34R pzLEaxnqpt8VMwcDm25I0S1EYWQ3MAdFKb3M/KtGMtnzJZFjXE/xZNH7iJv+2BUVBK /6P0nmZqPhHhwXBDnuJbzL/NfQ9mWy1QuSCLx1O5mV4SRWvKZO/bMk8vmDWk07cShx DCYA8IUE2eRYQ== From: Anton Blanchard To: benh@kernel.crashing.org, paulus@samba.org, mpe@ellerman.id.au, bharata@linux.vnet.ibm.com, arbab@linux.vnet.ibm.com, npiggin@gmail.com, mikey@neuling.org, cyrilbur@gmail.com, aneesh.kumar@linux.vnet.ibm.com Subject: [PATCH] powerpc/powernv: Increase memory block size to 1GB on radix Date: Thu, 7 Sep 2017 15:05:51 +1000 Message-Id: <20170907050551.4632-1-anton@ozlabs.org> X-Mailer: git-send-email 2.11.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linuxppc-dev@lists.ozlabs.org Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" From: Anton Blanchard Memory hot unplug on PowerNV radix hosts is broken. Our memory block size is 256MB but since we map the linear region with very large pages, each pte we tear down maps 1GB. A hot unplug of one 256MB memory block results in 768MB of memory getting unintentionally unmapped. At this point we are likely to oops. Fix this by increasing our memory block size to 1GB on PowerNV radix hosts. Signed-off-by: Anton Blanchard --- arch/powerpc/platforms/powernv/setup.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/platforms/powernv/setup.c b/arch/powerpc/platforms/powernv/setup.c index 897aa1400eb8..bbb73aa0eb8f 100644 --- a/arch/powerpc/platforms/powernv/setup.c +++ b/arch/powerpc/platforms/powernv/setup.c @@ -272,7 +272,15 @@ static void pnv_kexec_cpu_down(int crash_shutdown, int secondary) #ifdef CONFIG_MEMORY_HOTPLUG_SPARSE static unsigned long pnv_memory_block_size(void) { - return 256UL * 1024 * 1024; + /* + * We map the kernel linear region with 1GB large pages on radix. For + * memory hot unplug to work our memory block size must be at least + * this size. + */ + if (radix_enabled()) + return 1UL * 1024 * 1024 * 1024; + else + return 256UL * 1024 * 1024; } #endif