Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp2778430ybl; Mon, 19 Aug 2019 07:24:37 -0700 (PDT) X-Google-Smtp-Source: APXvYqzCJZD4rHVhusrnjqMK4I8J++xEGT1V33XR2OC6dk1RrPGn914XgrNF6YeBF4wp9tLm/3Jr X-Received: by 2002:a65:6401:: with SMTP id a1mr20087158pgv.42.1566224677293; Mon, 19 Aug 2019 07:24:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1566224677; cv=none; d=google.com; s=arc-20160816; b=vmUrBHTfKgmQ1pti05rP1JBSmNtclDEWRIQPnm/iILr+qmIRWMe3TSFLzjHPyqccLi +AmBt+6XFeKrW/WIs/E4IwsNsbKklszqCAHd9sZpRQsneGVPutW7DdLYp1xRKfAG880a zg0Vzg412PSm1bbrKuYjTcX3GtEaGAX1BirciCc75SP3KTztpltiXG/j+yD6jRnP8M9D TyBvws1mWpq/rqdiKMvPIPC2bhr692uUHeihx7WdnFI8OBOfeEgtMmCAoBQsLSq/tXjr uPZzkQSN9IVj1w/7aJugAI4afARS+bbkL3Xk5pwY2eXij3bLS6d4AGylKd80Q0U9i+bn jVmQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:message-id :user-agent:mime-version:in-reply-to:references:cc:to:subject:from :date:dkim-signature; bh=3wjOzGQNPWx5hJUDuR8UJf29mkLp+KcC5RiCEx0shsw=; b=CiThr6NvYCjoWAd6c5UpTfYxOlBLC9dDDjbdwl8JWufyw5wj/1xyxPw9+167hfHJX4 GSY9U9UMzRoctyfT4KrUiOHcGo1eqbf/wBaMJqnMNXZLnK7jIh/P56PiTzKUz9A9Ptaf 2YdsyEE54jc09PNdmOJ3d5xI+9tnWG07LrgTgrwLdS6Mt64S5528aa7VFAdF1mnRNOaP AM7RAnl4XT0Li0XtQeyNpiNKDyeWo2OpHazcXjlQvUpvcZT7Ij+lOUV2No3sSKOTjFBp 6FtKVbE1FvQtxHq0Dv4CHsAILrNhliFe2/c7Q7lwYtGex9AWdmHkfKMkI0tfwVpQ5BOh dyOQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Gkcgg1MN; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k67si9872678pgc.26.2019.08.19.07.24.21; Mon, 19 Aug 2019 07:24:37 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Gkcgg1MN; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727149AbfHSOWt (ORCPT + 99 others); Mon, 19 Aug 2019 10:22:49 -0400 Received: from mail-pg1-f195.google.com ([209.85.215.195]:42088 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726168AbfHSOWs (ORCPT ); Mon, 19 Aug 2019 10:22:48 -0400 Received: by mail-pg1-f195.google.com with SMTP id p3so1313062pgb.9; Mon, 19 Aug 2019 07:22:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:subject:to:cc:references:in-reply-to:mime-version :user-agent:message-id:content-transfer-encoding; bh=3wjOzGQNPWx5hJUDuR8UJf29mkLp+KcC5RiCEx0shsw=; b=Gkcgg1MNphiD0OdXHe5ZUf+cNOeIc6wntYnShpZa0sVFlcfWgJhoUMECT1paI/2iuV 7SpiJI+5/xSWmsGN6qIxbP2k3i6dmzbo+G21BaKf9CQo12CwhR8xJdrF6+GOpYdKXmVf Nur4YrSil4vn7qW5wBxAdOQZTBuF0uer8BPGLzyJzdxU2y0eOXEaeMfSmdGrlopzpv0q uahO49/dFHhdbb4cDeaUd95T//4dTYBcdePBGJMjil6Kvcs1AX2o+2OOb7vBZCFhuxV7 e51AWLPV3OyAt+n0+2KVNPxeF2GwamjIBNdhjS6trEwJELOSU9ouoak1B5tfK2EBEVQD yUdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:subject:to:cc:references:in-reply-to :mime-version:user-agent:message-id:content-transfer-encoding; bh=3wjOzGQNPWx5hJUDuR8UJf29mkLp+KcC5RiCEx0shsw=; b=Xn+4ONOptRSWUtvhNWuAHDBzSLneCE7t5s7Sv5g9DFfqzLdUcw+d5IEeyb5UXeyLyj Y3a9xJ5uaQ9d8zi5WRpA0nrq/6r2gFtdbbeNOz7J3c5tIFQq8CTJDByxUdamorp4egk4 EZME2P7C4Fg4iM3GGlNeJcZLGB2cF/tL1MZnr3p2+yr4aN2eWs0NhAL9yisAukaKSHF6 y9KjMnRNutCvT22w86/o3jnUHn+ZLaNns/4nYDKLoGZE2cJXES8xmefErJPPdiSrs8qt oWRQfxZFGr/8InqOldT2BgtI80sRQSfOliP+ZNw/BxxjNzRCwKM660+lLwmAP/htQWuB FV5w== X-Gm-Message-State: APjAAAWZB0wnSTtizHDqhNk3zNxEDJoAn+7VTYlo9i5GSSUAyQMSPyOV dJEZUQlbQUGg4Hf3du6FmHc1EZKmVsU= X-Received: by 2002:a17:90a:b115:: with SMTP id z21mr20985896pjq.79.1566224567473; Mon, 19 Aug 2019 07:22:47 -0700 (PDT) Received: from localhost (193-116-95-121.tpgi.com.au. [193.116.95.121]) by smtp.gmail.com with ESMTPSA id o3sm22833492pje.1.2019.08.19.07.22.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Aug 2019 07:22:46 -0700 (PDT) Date: Tue, 20 Aug 2019 00:22:35 +1000 From: Nicholas Piggin Subject: Re: [PATCH v10 2/7] powerpc/mce: Fix MCE handling for huge pages To: Linux Kernel , linuxppc-dev , Santosh Sivaraj Cc: "Aneesh Kumar K.V" , Reza Arbab , Balbir Singh , Chandan Rajendra , christophe leroy , Mahesh Salgaonkar , Mahesh Salgaonkar , Michael Ellerman , stable@vger.kernel.org References: <20190815003941.18655-1-santosh@fossix.org> <20190815003941.18655-3-santosh@fossix.org> In-Reply-To: <20190815003941.18655-3-santosh@fossix.org> MIME-Version: 1.0 User-Agent: astroid/0.15.0 (https://github.com/astroidmail/astroid) Message-Id: <1566223931.kpuwkor3n7.astroid@bobo.none> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Santosh Sivaraj's on August 15, 2019 10:39 am: > From: Balbir Singh >=20 > The current code would fail on huge pages addresses, since the shift woul= d > be incorrect. Use the correct page shift value returned by > __find_linux_pte() to get the correct physical address. The code is more > generic and can handle both regular and compound pages. >=20 > Fixes: ba41e1e1ccb9 ("powerpc/mce: Hookup derror (load/store) UE errors") > Signed-off-by: Balbir Singh > [arbab@linux.ibm.com: Fixup pseries_do_memory_failure()] > Signed-off-by: Reza Arbab > Co-developed-by: Santosh Sivaraj > Signed-off-by: Santosh Sivaraj > Tested-by: Mahesh Salgaonkar > Cc: stable@vger.kernel.org # v4.15+ > --- > arch/powerpc/include/asm/mce.h | 2 +- > arch/powerpc/kernel/mce_power.c | 55 ++++++++++++++-------------- > arch/powerpc/platforms/pseries/ras.c | 9 ++--- > 3 files changed, 32 insertions(+), 34 deletions(-) >=20 > diff --git a/arch/powerpc/include/asm/mce.h b/arch/powerpc/include/asm/mc= e.h > index a4c6a74ad2fb..f3a6036b6bc0 100644 > --- a/arch/powerpc/include/asm/mce.h > +++ b/arch/powerpc/include/asm/mce.h > @@ -209,7 +209,7 @@ extern void release_mce_event(void); > extern void machine_check_queue_event(void); > extern void machine_check_print_event_info(struct machine_check_event *e= vt, > bool user_mode, bool in_guest); > -unsigned long addr_to_pfn(struct pt_regs *regs, unsigned long addr); > +unsigned long addr_to_phys(struct pt_regs *regs, unsigned long addr); > #ifdef CONFIG_PPC_BOOK3S_64 > void flush_and_reload_slb(void); > #endif /* CONFIG_PPC_BOOK3S_64 */ > diff --git a/arch/powerpc/kernel/mce_power.c b/arch/powerpc/kernel/mce_po= wer.c > index a814d2dfb5b0..e74816f045f8 100644 > --- a/arch/powerpc/kernel/mce_power.c > +++ b/arch/powerpc/kernel/mce_power.c > @@ -20,13 +20,14 @@ > #include > =20 > /* > - * Convert an address related to an mm to a PFN. NOTE: we are in real > - * mode, we could potentially race with page table updates. > + * Convert an address related to an mm to a physical address. > + * NOTE: we are in real mode, we could potentially race with page table = updates. > */ > -unsigned long addr_to_pfn(struct pt_regs *regs, unsigned long addr) > +unsigned long addr_to_phys(struct pt_regs *regs, unsigned long addr) > { > - pte_t *ptep; > - unsigned long flags; > + pte_t *ptep, pte; > + unsigned int shift; > + unsigned long flags, phys_addr; > struct mm_struct *mm; > =20 > if (user_mode(regs)) > @@ -35,14 +36,21 @@ unsigned long addr_to_pfn(struct pt_regs *regs, unsig= ned long addr) > mm =3D &init_mm; > =20 > local_irq_save(flags); > - if (mm =3D=3D current->mm) > - ptep =3D find_current_mm_pte(mm->pgd, addr, NULL, NULL); > - else > - ptep =3D find_init_mm_pte(addr, NULL); > + ptep =3D __find_linux_pte(mm->pgd, addr, NULL, &shift); > local_irq_restore(flags); > + > if (!ptep || pte_special(*ptep)) > return ULONG_MAX; > - return pte_pfn(*ptep); > + > + pte =3D *ptep; > + if (shift > PAGE_SHIFT) { > + unsigned long rpnmask =3D (1ul << shift) - PAGE_SIZE; > + > + pte =3D __pte(pte_val(pte) | (addr & rpnmask)); > + } > + phys_addr =3D pte_pfn(pte) << PAGE_SHIFT; > + > + return phys_addr; > } This should remain addr_to_pfn I think. None of the callers care what size page the EA was mapped with. 'pfn' is referring to the Linux pfn, which is the small page number. if (shift > PAGE_SHIFT) return (pte_pfn(*ptep) | ((addr & ((1UL << shift) - 1)) >> PAGE_SHIFT); else return pte_pfn(*ptep); Something roughly like that, then you don't have to change any callers or am I missing something? Thanks, Nick =