From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 084C3C3DA78 for ; Fri, 13 Jan 2023 22:56:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7EFE08E0005; Fri, 13 Jan 2023 17:56:49 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 79FEB8E0001; Fri, 13 Jan 2023 17:56:49 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 63FD78E0005; Fri, 13 Jan 2023 17:56:49 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 53A4F8E0001 for ; Fri, 13 Jan 2023 17:56:49 -0500 (EST) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 1131C8078C for ; Fri, 13 Jan 2023 22:56:49 +0000 (UTC) X-FDA: 80351287338.11.DD28754 Received: from mail-il1-f179.google.com (mail-il1-f179.google.com [209.85.166.179]) by imf28.hostedemail.com (Postfix) with ESMTP id 81133C000D for ; Fri, 13 Jan 2023 22:56:47 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=Q5hUBJJQ; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf28.hostedemail.com: domain of alpergun@google.com designates 209.85.166.179 as permitted sender) smtp.mailfrom=alpergun@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1673650607; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=t9OYCY5AQ//JBDxFPYPi4BdHfpgPadouZrXYVbVKOKc=; b=y+wPiEz38Cg9BkLEe/bqRCEox3V2Lkz+xTxLWSUbpVW/9vb4fFQBhaFdM09uKA97Wq4+ZQ wJpvhHccjBPHYzibFxaKb1wy/Y6ibGWTJn/djNSb/Q4GlOEG3RLEvmrwERWZyDO2pyrq+m 6pOg3dhxqE55DFGfL5boKFUmZhr2FHo= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=Q5hUBJJQ; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf28.hostedemail.com: domain of alpergun@google.com designates 209.85.166.179 as permitted sender) smtp.mailfrom=alpergun@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1673650607; a=rsa-sha256; cv=none; b=Ty6v+Gp8dOtTMXa5LaevyrvD4qk7nsjEs8hffBCgjz5B9JRnl3to+x1aq2OViFdDlEB0jT s8OlUPNzi/CTIQn6JXBXt5QEu7XpMWvL5wAH7TzoyRsW347sXlWVp6DCksdDY3d7h00ENm Hg1KSbXDpRFPTMP1zfoN8OHfGyxa0HE= Received: by mail-il1-f179.google.com with SMTP id d10so11459835ilc.12 for ; Fri, 13 Jan 2023 14:56:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=t9OYCY5AQ//JBDxFPYPi4BdHfpgPadouZrXYVbVKOKc=; b=Q5hUBJJQ2kzFMhMCC25IIWPv9X9Auo96vTTq/gyoIPpburCx/8/aziqbndYCIIxFuw gD5jl4yT7v1j9IRyAWKl4yzkZMHouAd8sqXYlf6krcAtjnw7lzWj6agC89tSVC3aN+QJ 6pvSPxFLj5lJ9xDmUfPjt0SWQJNp30OE0fjl/lbJes3MXWWbVolHKswF4K85iqPJH4Bu kAix5XIrDsFcVyAmp3NI1cET1ddc2ZRdJ+yt1yLMFXSycsK20gZNy3qzjVHZUBstxXst G5yztZNjNDZbv9sp5SU/mLpe2Op80Pho9VlGA0A1kO/yBTAE3j7uwGweN1cClY2NYtgL TsPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=t9OYCY5AQ//JBDxFPYPi4BdHfpgPadouZrXYVbVKOKc=; b=Wgo4Q4MLnwf/LYgLD+4vAHwG/j+MVBVHAvAHoZ8lWlV9Ioa3kXHkC6iyKBHo9PS+jR i+Ejc46mK3qFuIBdSIA/haJ5yXlckRLJctKVV6z4uhDtTIFhh5LXCqNN5xUID7MOHN6r +CME+scEehQpU3tM4UrTQIqvDRshtdDsXcECzO4rwBID/wJtgYzv+GFVSZyirrIhM4Zw DYlGn5E+tydoobjvV1z4k/w0kdy1RkmxVf1y2Sbk7ib+DGDuB9x+8hgFsyYYE0/zdS+n jnXuhTvUGywPQjDoeyGBbAjBoy2UEjOzr+Dmn5Ej3/EdvDYC/gNnWdmM68rtDm0uylqh S8Yw== X-Gm-Message-State: AFqh2kqjuEr2kdhKduzAG2U3zbSh4ZOz9UXJmO9pRCGCOs2AAJ2HNFkS uk/1T+BRd/OUHsoPTG1ZioeJ6FkZV4NxMYw89ZiVqg== X-Google-Smtp-Source: AMrXdXt6PNhpMWTCzhJRGnREELU2zzAWx9YzlhAaqnF6nUrsUno+E0GVqcp0lPVWl9HGKEnQbf3SVAgxOlC6yytSd+4= X-Received: by 2002:a05:6e02:b2b:b0:30e:eaf7:e742 with SMTP id e11-20020a056e020b2b00b0030eeaf7e742mr137639ilu.63.1673650606379; Fri, 13 Jan 2023 14:56:46 -0800 (PST) MIME-Version: 1.0 References: <20221214194056.161492-1-michael.roth@amd.com> <20221214194056.161492-24-michael.roth@amd.com> In-Reply-To: <20221214194056.161492-24-michael.roth@amd.com> From: Alper Gun Date: Fri, 13 Jan 2023 14:56:35 -0800 Message-ID: Subject: Re: [PATCH RFC v7 23/64] x86/fault: Add support to dump RMP entry on fault To: Michael Roth Cc: kvm@vger.kernel.org, linux-coco@lists.linux.dev, linux-mm@kvack.org, linux-crypto@vger.kernel.org, x86@kernel.org, linux-kernel@vger.kernel.org, tglx@linutronix.de, mingo@redhat.com, jroedel@suse.de, thomas.lendacky@amd.com, hpa@zytor.com, ardb@kernel.org, pbonzini@redhat.com, seanjc@google.com, vkuznets@redhat.com, wanpengli@tencent.com, jmattson@google.com, luto@kernel.org, dave.hansen@linux.intel.com, slp@redhat.com, pgonda@google.com, peterz@infradead.org, srinivas.pandruvada@linux.intel.com, rientjes@google.com, dovmurik@linux.ibm.com, tobin@ibm.com, bp@alien8.de, vbabka@suse.cz, kirill@shutemov.name, ak@linux.intel.com, tony.luck@intel.com, marcorr@google.com, sathyanarayanan.kuppuswamy@linux.intel.com, dgilbert@redhat.com, jarkko@kernel.org, ashish.kalra@amd.com, harald@profian.com, Brijesh Singh Content-Type: text/plain; charset="UTF-8" X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 81133C000D X-Stat-Signature: pfhn1tjczn14cfjf68yufjsbgmimaszy X-HE-Tag: 1673650607-603348 X-HE-Meta: U2FsdGVkX18BL9i0VJuC/L9EYqer0zAXoVQX0t9VHk53nPDf3n+kg8oBZ/VsjfKKWJaMgJPAeXEVa/znSO5G7bUsWGaWOtwpQPZOIVFjz66N19rHiFoKTNdOkpeo7Cb24Ogjr/lEu6uS9KPSwm58BlT23KWZzve71SDE/ZXrrrScuM6dJ/fqHGKu8+iOLdgzz4WMkdkKSWvmKJbEc3pN4D5/TIISu6TGxQhdoG90JbI/Aisv3QqvxrfNbhVqZesuGR89N1OCUeKg5wEjVsfBDjzCB56Ot08+BvO96RJLb//+dSiPx9QsrRQfZiUydSlO4+fZRsEzm8wsUeL7zmUAWN3q6/TYANT+9M1WsWAbFbg2EJ7C8ruOA1EpySDCjYpdN2UULxmutEX/K/OVzAsxwKVhEwvov+VJvuLye3jFdyokLh/sUulSraf4NfpCy/IJbSWBAdpwLNwqhYGe/7zxDsenSkJgJ1RJC7FODVP4yhfhGKdPIWKTkZi40JPIwv4ZW6yLGKMOaRbR2+Kqv9Cn+U7HChvSRI4u0o1rmn7EW009G0OP6/RCnGb0lOHfuAE+E+zrchFntvkiRgjIkPhwknvS2gKFNLBRJIDdEE8DecGmGi3Yr8Psy/JmWP6htIpENkQKA/BRu0TxhO9lCqlIbQVEXIjZnI20cBC/w3YspcYY79w5DJdTf1Wq3/OmwTfoKVPIpxgunRLnIa05sDFj2X/4OgBKP1iXLO+PCQ+EduFYYTnpyCP6feEDL5i7V/1TlOYkmR9/X8RoeRMXrhUq+5TzXHxGt9AYWHsLPIdptlV2RMbfcUBbu/JUVMreudqEc8XDI6S0bmJDuYoPi4y5KnP7lrTocoBnSugF4vRVAQXFbWverRAIpebwWHM8M/Toh5RjiuH3trHwGw6B3Ym0sGnBjvF3WG2Vx4UwHMOw8Bnvu+Eh7/xBypAV6uaIftRn/mX7Jq6mpkLFQPmeyEo 0y3fMAMh tthuh9UZIi02DW74= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Wed, Dec 14, 2022 at 11:52 AM Michael Roth wrote: > > From: Brijesh Singh > > When SEV-SNP is enabled globally, a write from the host goes through the > RMP check. If the hardware encounters the check failure, then it raises > the #PF (with RMP set). Dump the RMP entry at the faulting pfn to help > the debug. > > Signed-off-by: Brijesh Singh > Signed-off-by: Ashish Kalra > Signed-off-by: Michael Roth > --- > arch/x86/include/asm/sev.h | 2 ++ > arch/x86/kernel/sev.c | 43 ++++++++++++++++++++++++++++++++++++++ > arch/x86/mm/fault.c | 7 ++++++- > 3 files changed, 51 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/include/asm/sev.h b/arch/x86/include/asm/sev.h > index 4eeedcaca593..2916f4150ac7 100644 > --- a/arch/x86/include/asm/sev.h > +++ b/arch/x86/include/asm/sev.h > @@ -215,6 +215,7 @@ int snp_lookup_rmpentry(u64 pfn, int *level); > int psmash(u64 pfn); > int rmp_make_private(u64 pfn, u64 gpa, enum pg_level level, int asid, bool immutable); > int rmp_make_shared(u64 pfn, enum pg_level level); > +void sev_dump_rmpentry(u64 pfn); > #else > static inline void sev_es_ist_enter(struct pt_regs *regs) { } > static inline void sev_es_ist_exit(void) { } > @@ -247,6 +248,7 @@ static inline int rmp_make_private(u64 pfn, u64 gpa, enum pg_level level, int as > return -ENODEV; > } > static inline int rmp_make_shared(u64 pfn, enum pg_level level) { return -ENODEV; } > +static inline void sev_dump_rmpentry(u64 pfn) {} > #endif > > #endif > diff --git a/arch/x86/kernel/sev.c b/arch/x86/kernel/sev.c > index e2b38c3551be..1dd1b36bdfea 100644 > --- a/arch/x86/kernel/sev.c > +++ b/arch/x86/kernel/sev.c > @@ -2508,6 +2508,49 @@ static struct rmpentry *__snp_lookup_rmpentry(u64 pfn, int *level) > return entry; > } > > +void sev_dump_rmpentry(u64 pfn) > +{ > + unsigned long pfn_end; > + struct rmpentry *e; > + int level; > + > + e = __snp_lookup_rmpentry(pfn, &level); > + if (!e) { if (IS_ERR(e)) { > + pr_info("failed to read RMP entry pfn 0x%llx\n", pfn); > + return; > + } > + > + if (rmpentry_assigned(e)) { > + pr_info("RMPEntry paddr 0x%llx [assigned=%d immutable=%d pagesize=%d gpa=0x%lx" > + " asid=%d vmsa=%d validated=%d]\n", pfn << PAGE_SHIFT, > + rmpentry_assigned(e), e->info.immutable, rmpentry_pagesize(e), > + (unsigned long)e->info.gpa, e->info.asid, e->info.vmsa, > + e->info.validated); > + return; > + } > + > + /* > + * If the RMP entry at the faulting pfn was not assigned, then not sure > + * what caused the RMP violation. To get some useful debug information, > + * iterate through the entire 2MB region, and dump the RMP entries if > + * one of the bit in the RMP entry is set. > + */ > + pfn = pfn & ~(PTRS_PER_PMD - 1); > + pfn_end = pfn + PTRS_PER_PMD; > + > + while (pfn < pfn_end) { > + e = __snp_lookup_rmpentry(pfn, &level); > + if (!e) > + return; if (IS_ERR(e)) continue; > + > + if (e->low || e->high) > + pr_info("RMPEntry paddr 0x%llx: [high=0x%016llx low=0x%016llx]\n", > + pfn << PAGE_SHIFT, e->high, e->low); > + pfn++; > + } > +} > +EXPORT_SYMBOL_GPL(sev_dump_rmpentry); > + > /* > * Return 1 if the RMP entry is assigned, 0 if it exists but is not assigned, > * and -errno if there is no corresponding RMP entry. > diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c > index ded53879f98d..f2b16dcfbd9a 100644 > --- a/arch/x86/mm/fault.c > +++ b/arch/x86/mm/fault.c > @@ -536,6 +536,8 @@ static void show_ldttss(const struct desc_ptr *gdt, const char *name, u16 index) > static void > show_fault_oops(struct pt_regs *regs, unsigned long error_code, unsigned long address) > { > + unsigned long pfn; > + > if (!oops_may_print()) > return; > > @@ -608,7 +610,10 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code, unsigned long ad > show_ldttss(&gdt, "TR", tr); > } > > - dump_pagetable(address); > + pfn = dump_pagetable(address); > + > + if (error_code & X86_PF_RMP) > + sev_dump_rmpentry(pfn); > } > > static noinline void > -- > 2.25.1 >