From patchwork Thu Jan 17 12:13:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Ellerman X-Patchwork-Id: 1026590 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43gNPz4hkgz9rxp for ; Thu, 17 Jan 2019 23:17:59 +1100 (AEDT) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=ellerman.id.au Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 43gNPz3CsLzDqn4 for ; Thu, 17 Jan 2019 23:17:59 +1100 (AEDT) X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Received: from ozlabs.org (bilbo.ozlabs.org [IPv6:2401:3900:2:1::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 43gNJv6SZyzDqkK for ; Thu, 17 Jan 2019 23:13:35 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dmarc=none (p=none dis=none) header.from=ellerman.id.au Received: by ozlabs.org (Postfix) id 43gNJv0HK7z9sCh; Thu, 17 Jan 2019 23:13:35 +1100 (AEDT) Delivered-To: linuxppc-dev@ozlabs.org Received: by ozlabs.org (Postfix, from userid 1034) id 43gNJt5qnfz9sD4; Thu, 17 Jan 2019 23:13:34 +1100 (AEDT) From: Michael Ellerman To: linuxppc-dev@ozlabs.org Subject: [PATCH 2/4] powerpc/64s: Add slb_full_bitmap rather than hard-coding U32_MAX Date: Thu, 17 Jan 2019 23:13:26 +1100 Message-Id: <20190117121328.13395-2-mpe@ellerman.id.au> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190117121328.13395-1-mpe@ellerman.id.au> References: <20190117121328.13395-1-mpe@ellerman.id.au> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: npiggin@gmail.com Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" The recent rewrite of the SLB code into C included the assumption that all CPUs we run on have at least 32 SLB entries. This is currently true but a bit fragile as the SLB size is actually defined by the device tree and so could theoretically change at any time. The assumption is encoded in the fact that we use U32_MAX as the value for a full SLB bitmap. Instead, calculate what the full bitmap would be based on the SLB size we're given and store it. This still requires the SLB size to be a power of 2. Fixes: 126b11b294d1 ("powerpc/64s/hash: Add SLB allocation status bitmaps") Signed-off-by: Michael Ellerman Reviewed-by: Aneesh Kumar K.V --- arch/powerpc/mm/slb.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/mm/slb.c b/arch/powerpc/mm/slb.c index bc3914d54e26..61450a9cf30d 100644 --- a/arch/powerpc/mm/slb.c +++ b/arch/powerpc/mm/slb.c @@ -506,9 +506,16 @@ void switch_slb(struct task_struct *tsk, struct mm_struct *mm) asm volatile("isync" : : : "memory"); } +static u32 slb_full_bitmap; + void slb_set_size(u16 size) { mmu_slb_size = size; + + if (size >= 32) + slb_full_bitmap = U32_MAX; + else + slb_full_bitmap = (1ul << size) - 1; } void slb_initialize(void) @@ -611,7 +618,7 @@ static enum slb_index alloc_slb_index(bool kernel) * POWER7/8/9 have 32 SLB entries, this could be expanded if a * future CPU has more. */ - if (local_paca->slb_used_bitmap != U32_MAX) { + if (local_paca->slb_used_bitmap != slb_full_bitmap) { index = ffz(local_paca->slb_used_bitmap); local_paca->slb_used_bitmap |= 1U << index; if (kernel)