Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp1242744imm; Wed, 4 Jul 2018 14:52:30 -0700 (PDT) X-Google-Smtp-Source: AAOMgpegWL2MVzXkPoQkyk5dt1OmIxYhRtl/1yn6lrk+m5fumjt9klPMAjTCaZ59S2rw/zzEg5Mf X-Received: by 2002:a62:3b89:: with SMTP id w9-v6mr3767626pfj.80.1530741150833; Wed, 04 Jul 2018 14:52:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530741150; cv=none; d=google.com; s=arc-20160816; b=Rx4v4/i3p4JHCK/RFPSQqz6FMdvT3NKpLKKmyb033dVulebenKwpj46vvz2/dsdqGP WVuPMwsw9B4nEUB6x7YM6Eqz3VxrG/+9Rvpmv1qCOR61Rc/wcfKii7Uy5+vro/IPb6R0 xiC1diSuLjscF087LGC+gpk77h2O+xKLuMQVhu38GdTJD/MCMmgk+Ayogxi3xfkCuIeV LpuxkaiCA6izLeNr+epKQqhLjvDwM8f+WhPdLu0isyDs0N5VHjxa7tQj7FUxB/RB7bB+ 3kH/DveTS+ezW9VsKXlEjAFPpeFJWR4rxR+qgJU5M9HVUdNES84uhQtVdDjxoNyAtF0H AqEA== 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:mime-version :user-agent:references:in-reply-to:message-id:date:cc:to:from :subject:arc-authentication-results; bh=xUZgIa01soZI+mflDEELoN6k8at8cOVNORNaKGLS5Q4=; b=yjN8+bgu8t7b8ZwFlQ7WIxM13/iuEvuCTXz/7b9SPidr6Zwc/627mlT0S8rOJ8PRjq UukQyF6gBtvN2xs4ytLkf1siQ9Hlkfo/5EyZjdmUbVJqvV/Go9Y9L022hLQQNyEVnYc/ hLG7xx5qz/V+fR4RukggSJc9cLOuY1TYzNUcAdy6FUh3jJj3vNFQkLkEvaCf3xsnMOAF jZc64bcd5WexNA5UYVbarm1TCdOqz+K+tDBa6xBrnTSqUaWw4Dny/HNtPEIjR2d7cdfw A/uYD2qFkJKT7FoRtN144qRWAnNuLqvNqrgA4lzsZ3MATP7D4WCWkQPKBdq1AlPAC5em 5hZQ== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e85-v6si4728297pfl.132.2018.07.04.14.52.16; Wed, 04 Jul 2018 14:52:30 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753456AbeGDVvN (ORCPT + 99 others); Wed, 4 Jul 2018 17:51:13 -0400 Received: from mga02.intel.com ([134.134.136.20]:37638 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752889AbeGDVvJ (ORCPT ); Wed, 4 Jul 2018 17:51:09 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 04 Jul 2018 14:51:08 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,309,1526367600"; d="scan'208";a="64478224" Received: from dwillia2-desk3.jf.intel.com (HELO dwillia2-desk3.amr.corp.intel.com) ([10.54.39.16]) by orsmga003.jf.intel.com with ESMTP; 04 Jul 2018 14:51:08 -0700 Subject: [PATCH v5 09/11] x86/mm/pat: Prepare {reserve, free}_memtype() for "decoy" addresses From: Dan Williams To: linux-nvdimm@lists.01.org Cc: Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , Tony Luck , Borislav Petkov , linux-edac@vger.kernel.org, x86@kernel.org, hch@lst.de, hch@lst.de, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, jack@suse.cz, ross.zwisler@linux.intel.com Date: Wed, 04 Jul 2018 14:41:11 -0700 Message-ID: <153074047123.27838.4050356397245428561.stgit@dwillia2-desk3.amr.corp.intel.com> In-Reply-To: <153074042316.27838.17319837331947007626.stgit@dwillia2-desk3.amr.corp.intel.com> References: <153074042316.27838.17319837331947007626.stgit@dwillia2-desk3.amr.corp.intel.com> User-Agent: StGit/0.18-2-gc94f MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In preparation for using set_memory_uc() instead set_memory_np() for isolating poison from speculation, teach the memtype code to sanitize physical addresses vs __PHYSICAL_MASK. The motivation for using set_memory_uc() for this case is to allow ongoing access to persistent memory pages via the pmem-driver + memcpy_mcsafe() until the poison is repaired. Cc: Thomas Gleixner Cc: Ingo Molnar Cc: "H. Peter Anvin" Cc: Tony Luck Cc: Borislav Petkov Cc: Cc: Signed-off-by: Dan Williams --- arch/x86/mm/pat.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c index 1555bd7d3449..6788ffa990f8 100644 --- a/arch/x86/mm/pat.c +++ b/arch/x86/mm/pat.c @@ -512,6 +512,17 @@ static int free_ram_pages_type(u64 start, u64 end) return 0; } +static u64 sanitize_phys(u64 address) +{ + /* + * When changing the memtype for pages containing poison allow + * for a "decoy" virtual address (bit 63 clear) passed to + * set_memory_X(). __pa() on a "decoy" address results in a + * physical address with it 63 set. + */ + return address & __PHYSICAL_MASK; +} + /* * req_type typically has one of the: * - _PAGE_CACHE_MODE_WB @@ -533,6 +544,8 @@ int reserve_memtype(u64 start, u64 end, enum page_cache_mode req_type, int is_range_ram; int err = 0; + start = sanitize_phys(start); + end = sanitize_phys(end); BUG_ON(start >= end); /* end is exclusive */ if (!pat_enabled()) { @@ -609,6 +622,9 @@ int free_memtype(u64 start, u64 end) if (!pat_enabled()) return 0; + start = sanitize_phys(start); + end = sanitize_phys(end); + /* Low ISA region is always mapped WB. No need to track */ if (x86_platform.is_untracked_pat_range(start, end)) return 0;