From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753541AbdI0PPw (ORCPT ); Wed, 27 Sep 2017 11:15:52 -0400 Received: from mail-by2nam03on0084.outbound.protection.outlook.com ([104.47.42.84]:59616 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753372AbdI0POT (ORCPT ); Wed, 27 Sep 2017 11:14:19 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; From: Brijesh Singh To: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, x86@kernel.org Cc: Brijesh Singh , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , Borislav Petkov , Arnd Bergmann , Tejun Heo , Christoph Lameter , linux-arch@vger.kernel.org, Tom Lendacky Subject: [Part1 PATCH v5 15/17] percpu: Introduce DEFINE_PER_CPU_DECRYPTED Date: Wed, 27 Sep 2017 10:13:27 -0500 Message-Id: <20170927151329.70011-16-brijesh.singh@amd.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20170927151329.70011-1-brijesh.singh@amd.com> References: <20170927151329.70011-1-brijesh.singh@amd.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [165.204.78.1] X-ClientProxiedBy: BN6PR04CA0033.namprd04.prod.outlook.com (10.174.93.150) To CY1PR12MB0152.namprd12.prod.outlook.com (10.161.173.22) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2006320b-3dd3-4088-5c37-08d505ba6812 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(2017030254152)(48565401081)(2017052603199)(201703131423075)(201703031133081)(201702281549075);SRVR:CY1PR12MB0152; X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0152;3:yuYd4Q1J8uIQRf2oRHL/kjl1f7UaFp40nVo6GjeDsXOmNtbmqcL9ZkBNyXfwku93T88lcdzGhIYbPef2xMBbz4duWxB4M13Kw5baPG2dGmQEF4qTn68PjsCXZ6eVxoiXn6GmOb+xo6+yuJHjTSza1havzIV2HKY2vzQCcPzJPAmth6Ye0MT4HAv101EN6YWlZHbll181FaI/fnXYacFKJI5hP2luP+NnfZ8S9dGmFE2gL1sDhuapPnmUKc+TTKzH;25:Dqx/+ZVYbc/xdJtMaxUdKKQIOXvERsGlP7kPr1AKp0SRTMhGXV7dyMgppbxnw2zaEGx0P6n1LnO5MuFe+k2+yJsi74kQjInqhl7+vFJUGIOhwF9PztVlYB1SAvS8XMxR6hb3P31EMCydeHkMb2CyzTeZXWvKfymKivEJCxYVUaMSmwC9uTVxoDQ8JzC+vBHgAjrxcDvicag+Ql+DH58D7T1YpTc/UgZJPTnqHOa2tc85/z6V+giS29nGtmFarombhOQXQe0GvgtcKhqgTVBO4fXsBPHaTb4gJ0+/9WM3k/I/B3n5AyJuDcegULBkrUheGSb/75Rrvl066DnPxI6ahg==;31:uRrmu42bagaSkf/DcLgIpWrH5m2SMEVlfyBkxesqYXzgZPzEy2kZKxf41PxYEXRJyPLAALPHq4Hx7GpuCWoQRTi47A6FLQ4pvYEHf2q52awwDGIbhvHf0pxz2O/gRjoogutUtR708szlO++pUSJkwi43h7/aG92xTUhZUOrrZng+G0zb54Djnsp6GLnJt5N5uWZQxTeZOgtmlbamTP9Z3TlvoDG4YTiuD2W9Vl83Zug= X-MS-TrafficTypeDiagnostic: CY1PR12MB0152: X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0152;20:tDTe1oJs4hQaHj5iq7+lNdV6c9Bta1/2S5qCPnvtGuATlt/ztoWIHmPvCPlQl3++PH95jEdxnr5v4v0/6uPolRp8VWCmk79JdUUJLdSKs5MFuifRDFdPeJg9peWwFE+V2CmJMHNJ3qf6RFIIYMSK1Whd27LouoKMxhiPMiVMVum9X+JdBJ8NJq4LLhdbwXkeb541OX7s4jBDZ+H+YstsrKFcelwwkhgcgyKzdCmh5sJ8EmGIrYVmh7XA0g7r5LSkWT9rSkHOsKErjRaY8Ss7zn5UrPvfiAMn7N4hsl1dwN3AReblnF/73ZZ7NSDb8GP84jPY3KdJ3rBDZJ8X3+TcRdw4NjuBs29HhqC4V4Wxq+dR+4HVMue8twu3LXOqtDmn1UMzAz+cOSzxa5xhDN0/E2DNHc0XsLSHeEt3UM0ynfuCMil3+AP/D5GlOQ32+sEm70caQYaQmMt72a64BqSzcFW5NlnHWRZZCO+uGCVEvNHlJ82WRUpbEg/XhO9l+fU8;4:s+A6RR5t7QqE2aIIzNV4Q0LvlMoL0SMAklpXdHCdVg6kz9TnvoQLKGh90sC5QM8FrO7uXUHdZMOEc4whCt+vM7476kGcT3vzZpjZNBOmOjc7DPS2RLi36JM4AE9P2OzxJ4Vx5f2ssb9NCsRakopEjtcdMFsWRJD7ZvM9JhHT88OpAR4nF3UFc1A0NLL6yzlni7Y5ByhMW9/dtDS3jPufGu+iP0ip18eLJtLpdjKfmR6Rl1JerZj9cnRUX+DXmsaYFynAGeGysAZ8yzWIS4Lb5BDTfaDDC7osqHVwFC3XptRhDP7o9/Y4UvWvSIitC/LFPm1N1gersDFRfXM7y/RzMw== X-Exchange-Antispam-Report-Test: UriScan:(9452136761055)(767451399110); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(10201501046)(3002001)(93006095)(93001095)(100000703101)(100105400095)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123555025)(20161123562025)(20161123564025)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:CY1PR12MB0152;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:CY1PR12MB0152; X-Forefront-PRVS: 04433051BF X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(346002)(376002)(39860400002)(199003)(189002)(3846002)(25786009)(6116002)(53416004)(106356001)(8936002)(4326008)(54906003)(1076002)(6486002)(50226002)(8676002)(305945005)(50466002)(5003940100001)(81156014)(48376002)(81166006)(6666003)(68736007)(36756003)(189998001)(7736002)(105586002)(97736004)(53936002)(7416002)(2950100002)(101416001)(478600001)(16526017)(16586007)(76176999)(50986999)(316002)(47776003)(66066001)(86362001)(33646002)(5660300001)(2906002);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR12MB0152;H:ubuntu-010236106000.amd.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR12MB0152;23:t3ikuMRfFJYCcepCx2hf0oiH0v+hK4XOAc+6yr4uH?= =?us-ascii?Q?7vG6ybNgpBSL/eFF0R0B9Kgf+2TB9zSFMaMWi37Ofd14T2Oc/N49wkV2QLKb?= =?us-ascii?Q?BFfzY5z4RauGpse1CVO+SWIX+HAUKFZX2D4uI8q1QRKAe/jxEAOKWN03zmHL?= =?us-ascii?Q?ZkV9aAiBCGwPd2xuFWakw2L1vJRui2JndgLDeVZAsWiiExuUyqBIvq33AUEh?= =?us-ascii?Q?zTsz76D7VlMD2fqJRHQTy3SBPJ7TIazGW7pG8EyjM/bPLjcEBvrLj9zOoEfD?= =?us-ascii?Q?ZOCVy14y+koeYxEqDpA3zLEZRLO8b/rrynbrPIELJDp6wx6OFn8zu5Dm28kZ?= =?us-ascii?Q?J0G5utaUOGy2w8FtjfQck23ohLNsYKrcXQOapzcF0kGmsdM0kgg9nNESpSMa?= =?us-ascii?Q?clIE252v+Czotiqdb8MBdHtPbpqtZvcp98uu5NdI2CSDgfqO2Es/cwtdyYrN?= =?us-ascii?Q?ubZl6JgC3ehBzqiuzx8iw0NGM+dDdZYgw8gosPUqquAj5wH7SxfDXC5PCVuk?= =?us-ascii?Q?cFRIWuCRBd2SGeiasWhqt5iO1gvpkDRbRNBRiM3uaxExN6TeTqdqJ6VGfrEn?= =?us-ascii?Q?ovm1nFQwU66qr6Cp8Qq/hgPDWLRJvb+J/daf71yIKZBtaF9ARKS2MgKBMd7W?= =?us-ascii?Q?8YOPdfTCh8oTsVZWdSAWj8UIG5QutKAU/+bNWxrT5JHhP4XbDPMMlZ8EJGZJ?= =?us-ascii?Q?TcnFZ1+A2Sa7nBaXHsYMJLfAJ+TzZXYcUF7P+nNHwkByytpjjAPxWWPM9ieu?= =?us-ascii?Q?8HRVjJ031IzFq17vj448CrbSjlPMudMv92KYCdc3a4OmFcbSNHLOQ0LM7/iK?= =?us-ascii?Q?kVWmGp95TeM3KamngDe80ahWRQQlp0W7fRESibiYWHiZAjXQvrkWzzSvPwRH?= =?us-ascii?Q?wF/7RckZkcs3VvQ0i8ngfpH4jPX6anPSU2TPffxgpDrImwjoapkPKEKY/eKL?= =?us-ascii?Q?GkW68W+WOnC6+X3a7pBIMRPhvHg/QmeS5lkW92rcdx9OcM9bj9FzeFPafpp3?= =?us-ascii?Q?JKECSkOaCnt+phzJCraMo3ECGKntldRivrzd8voqywmJ1O7dCi4Ec9qS8Ijl?= =?us-ascii?Q?1yAK8x/iIxK8KhDzl6ZDET2gj250QiJC1zQQ96rqyy+U9q5ahdbTdQoP7Cvt?= =?us-ascii?Q?M8FVXzxgMw=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0152;6:AWzwsX7XCAub8uVlCcGhhwAlVJl4sfhW/9WQVkbXxh1+UA6/tzVdobQL0TLiBTcbZACjqT5yEm83d4Vs1GJ8BklW9CR6Ar5yCRqoFwLLxW6+2IzAUj3gee9EFyiPvpRa9TH7e8octdRDt/qdbz+4wUVDHMtYwvtSaS3C5C3Et2Vl1VDQq7mbwzGqsbfqr1Owc7n3PnOnkHr7W9xdhfdr0v9MSdQlRv1sZv57W0ydPewMEQjCgoJzuDd+Whw7ru/QbtWadzVvhMZq5R+AhR7V2ibt8B7BSE41gfFHiJQPmNk/4tbtAvYxQFcVvX8VRA881/q5rB6tf5p33Q60WNXzjg==;5:HpTcZiqf/viwI9nlaw0Dm7E9eSywG4m/UWzdodpevSim4qny9Otu395Mdv3tQF1DQHGECLwu8UkiWcqFrvX8Ju8/jRYV8UOc+YxXrqZ/d4b3ZM2zhVZqlheTsg3Q33HsUmeMgaLDFyj8eQb3uOT5qQ==;24:YwzgdUXSDWtoKDV6gX9jGgrf7J62PsL3M2BNYw/tMViuEt8WufieU1ZA/MQAaOmULmLvmb8ljIUjrydgYWoBRrffQqz62yFi21YwMnyQH60=;7:eMLsNI9XU/vumADFnphM2XcZewx37j2LIWf5ShUo2TgL3QSWtrvXpZ6zfCoqDNT4StGC8R4edRjO9ux5L0VnoaKMLm9lWLYib97yNfih76ME28yLWXaD32pDhansHojtJwEgpGoxsERmDcamYqV2dJiS0XBn5qIUk02DV9uGzPbJ1QvuKCJ/RsF3thqRmtEnXmY0ikBZJV6BmS0eMGz2/RcIwTR3oR7xEzInMkoVnz0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0152;20:DfyX+h58lH8oGDynJy4Kg3BoYM336Djz1sPbpyhxNnm2q8w13siAIJIAz6V09dkjUPnDxNls/88XDwLjxKoY3kZwIdvUbmID02kWyIYUSHvL4v4cXSQyru20VfURqz2E9jnUbe04oVegLyFPdfZHis7Ft/nNraYpREiuTbK81uk/LAUWQDMsZ+gxeKJnYKpfdkgwYpawtPJ7RIQJJMPCAcfVS1tuNaER3Cdk8juK2s6VDvdlXJ1iUrE9zp0MRfyl X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Sep 2017 15:14:09.6820 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR12MB0152 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org KVM guest defines three per-CPU variables (steal-time, apf_reason, and avic_eio) which are shared between a guest and a hypervisor. When SEV is active, memory is encrypted with a guest-specific key, and if the guest OS wants to share the memory region with the hypervisor then it must clear the C-bit (i.e set decrypted) before sharing it. DEFINE_PER_CPU_DECRYPTED can be used to define the per-CPU variables which will be shared between a guest and a hypervisor. Cc: Thomas Gleixner Cc: Ingo Molnar Cc: "H. Peter Anvin" Cc: Borislav Petkov Cc: Arnd Bergmann Cc: Tejun Heo Cc: Christoph Lameter Cc: linux-arch@vger.kernel.org Cc: x86@kernel.org Cc: linux-kernel@vger.kernel.org Cc: Tom Lendacky Signed-off-by: Brijesh Singh Acked-by: Tejun Heo --- include/asm-generic/vmlinux.lds.h | 19 +++++++++++++++++++ include/linux/percpu-defs.h | 15 +++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 8acfc1e099e1..2dd54c3e1a8a 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -778,6 +778,24 @@ #endif /* + * Memory encryption operates on a page basis. Since we need to clear + * the memory encryption mask for this section, it needs to be aligned + * on a page boundary and be a page-size multiple in length. + * + * Note: We use a separate section so that only this section gets + * decrypted to avoid exposing more than we wish. + */ +#ifdef CONFIG_AMD_MEM_ENCRYPT +#define PERCPU_DECRYPTED_SECTION \ + . = ALIGN(PAGE_SIZE); \ + *(.data..percpu..decrypted) \ + . = ALIGN(PAGE_SIZE); +#else +#define PERCPU_DECRYPTED_SECTION +#endif + + +/* * Default discarded sections. * * Some archs want to discard exit text/data at runtime rather than @@ -815,6 +833,7 @@ . = ALIGN(cacheline); \ *(.data..percpu) \ *(.data..percpu..shared_aligned) \ + PERCPU_DECRYPTED_SECTION \ VMLINUX_SYMBOL(__per_cpu_end) = .; /** diff --git a/include/linux/percpu-defs.h b/include/linux/percpu-defs.h index 8f16299ca068..2d2096ba1cfe 100644 --- a/include/linux/percpu-defs.h +++ b/include/linux/percpu-defs.h @@ -173,6 +173,21 @@ DEFINE_PER_CPU_SECTION(type, name, "..read_mostly") /* + * Declaration/definition used for per-CPU variables that should be accessed + * as decrypted when memory encryption is enabled in the guest. + */ +#if defined(CONFIG_VIRTUALIZATION) && defined(CONFIG_AMD_MEM_ENCRYPT) + +#define DECLARE_PER_CPU_DECRYPTED(type, name) \ + DECLARE_PER_CPU_SECTION(type, name, "..decrypted") + +#define DEFINE_PER_CPU_DECRYPTED(type, name) \ + DEFINE_PER_CPU_SECTION(type, name, "..decrypted") +#else +#define DEFINE_PER_CPU_DECRYPTED(type, name) DEFINE_PER_CPU(type, name) +#endif + +/* * Intermodule exports for per-CPU variables. sparse forgets about * address space across EXPORT_SYMBOL(), change EXPORT_SYMBOL() to * noop if __CHECKER__. -- 2.9.5