From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754349AbdJPPgR (ORCPT ); Mon, 16 Oct 2017 11:36:17 -0400 Received: from mail-cys01nam02on0052.outbound.protection.outlook.com ([104.47.37.52]:10176 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754195AbdJPPfN (ORCPT ); Mon, 16 Oct 2017 11:35:13 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; From: Brijesh Singh To: x86@kernel.org Cc: bp@alien8.de, Brijesh Singh , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , Borislav Petkov , Arnd Bergmann , Tejun Heo , Christoph Lameter , linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, Tom Lendacky Subject: [Part1 PATCH v6 15/17] percpu: Introduce DEFINE_PER_CPU_DECRYPTED Date: Mon, 16 Oct 2017 10:34:21 -0500 Message-Id: <20171016153423.2980-16-brijesh.singh@amd.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20171016153423.2980-1-brijesh.singh@amd.com> References: <20171016153423.2980-1-brijesh.singh@amd.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [165.204.78.1] X-ClientProxiedBy: BN6PR16CA0015.namprd16.prod.outlook.com (10.172.212.153) To SN1PR12MB0158.namprd12.prod.outlook.com (10.162.3.145) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 83861cd3-16da-44fc-c9dd-08d514ab7797 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(2017030254152)(48565401081)(2017052603199)(201703131423075)(201703031133081)(201702281549075);SRVR:SN1PR12MB0158; X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0158;3:VHwi0vWbL/J0IFCogsn51LiS5aMlK46+lOueUxd53/D/uzJ94HErtkKYAK+orqZ6bv/jrhUTvdenY2OKKZfLTZrgSZo1mdmWSrGoDRqe9hntQAaWKRc3C8acQ//wn23tCQItPM+TFjLYG06ovjvWTMgUSmfz+rNw6/g8ShpazeUrQWzV5S/7wpn35wBft3aB3gylvc6LdflpQW2YnrynroHyhG97tcC1tnwtoO1rlidbW/VQQ3kyJnvdlQGrIuXg;25:GEyPFrsY/kdWb+X9WqYW6kYYa/wWH8ushZfabvfYG49Z0XEmbsmXlS5TbkJwtLWDRtOctMqqnhdJTHpNbz8GZGfy+BXBmEEba+Lvz6jo83fRj37ZM9/a7kowZLdmnbvB1h9YLW5v+yuo3H8r5WZ2erBKQnU9En4Ovk4e84rcokLI2jrrqDW/bwhwjhkYMUujQ5axh1OkAup+2mh2OsTHpm5ZfM/aghlzMsl+tTHMp5sB4om+320Axs7VzxesclCnCTj4AfT+/66jrzV2NU8QF3QtJ6m6Ys3nOlPL04zgXRDS2hEY2vsFqkHDtQj6SbvU8GhjoFIYNwRizRpewVWqZA==;31:ltHeKv4OEnvSQp1twfSl1/fUYM/Cv7hjgYHho1sfui0OchYtgWRkVDOE3Hq9BiqjjhMww2HHbI0ZrjSNJjaJ4SLFnSsmWr5Pk2FZivyUedvsPGdk6Xjw0L5NpQrkjjhNjdanXNHdiv2oy/s2uCp//Ngfyi9OLtdLp58e5pemQp9kZaWGQdBx53gEZ7yrTJKq1vYF9xNPxz+5a59zEsIG5RE7t4ZFRDT5M1QgpvyOUs4= X-MS-TrafficTypeDiagnostic: SN1PR12MB0158: X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0158;20:GExritsHf1chaW04gb0iqwosPw38rGmGN7/HgyyJH+hOTpipL0hu7tYkPuC/ytqZfWdZoBj00/IzQ9QM9Ae7aCASnQD9d4XEljI6hn7qEsML/xFArCLo0R+L62xIhGXwDKo49hkfD6fU5w5pykMbJcxuVqi+4F5Sf9rRPT58qiCmTWmHf6QDj/IhBte9ustcbt4qY2Urq0Q1S5F+5Yo/Ke8mc+GxycEMTNDVPOJmzikgK7EvP+M3ZPC8kM02O0KADJufcxz7hj7Up6jGkx51IIakDDS5SPi3dSJlYhLQNhh3DX84+DuvUraJFoE+ZB4zh8DOB4G6hBNPcjU++gJEpvkbWW0E7902tylup3QEJb8kJvEZuSawLkI/mfzaiaMAuczkAPV8CyZhi9UF6u0GDCUsBO1MJOfrFsPjP8Fqx42ejSp01U4wedr7+8IxQOpABDU672v4kzxDY5jl7ekLmuN3crEAWZRzvC71KirdtMXGwP4Cx2gAOuW1gJPbAPmm;4:Uu5RXn7liOtqMRMH3fB09YOwlSNIpOa/CHULFf9zxMewqxGk7mus6ssVYzEqfPLThTioz9dMNC5+sTxjsCxNFVft6kG0UntVfbKpf+QlT1YR6pZcGreMpsQF3MaOvmHRg836QoftJ+LFZE0gPfT/DN13ys8VQTmAjaUZFgzH7WMhY/mw6pOLCOp3gP1Erd3lNTlrKTC92XwbvqdFsoyIeOZYk8TWyITgzXOzI8CtZB2v5obso9CPXXocr147jotPQQmTyWjEdsTjH75tY73oaeyTqZhaV7MEJtAXeodeyKWKXe7boYjyx2JELVLyxuAFSOTqFLVcRp099SucAGJVdA== 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)(93006095)(93001095)(100000703101)(100105400095)(3002001)(10201501046)(6055026)(6041248)(20161123562025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123564025)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:SN1PR12MB0158;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:SN1PR12MB0158; X-Forefront-PRVS: 0462918D61 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(346002)(376002)(39860400002)(199003)(189002)(54906003)(7416002)(1076002)(316002)(5660300001)(16586007)(68736007)(2906002)(4326008)(16526018)(7736002)(47776003)(305945005)(6666003)(53936002)(86362001)(33646002)(2950100002)(6916009)(66066001)(189998001)(97736004)(76176999)(106356001)(101416001)(8676002)(53416004)(105586002)(36756003)(3846002)(6486002)(6116002)(8936002)(50226002)(81166006)(81156014)(25786009)(48376002)(478600001)(50986999)(2351001)(5003940100001)(2361001)(50466002);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR12MB0158;H:ubuntu-010236106000.amd.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;SN1PR12MB0158;23:MH6O3ohfYsmI9SnGv/2qeGhq8jYVw0Q13PdNLPqss?= =?us-ascii?Q?YJBMCGAG7VXoc7+ApG1NksjX5j1SJ2uE0igssNL/2VTgwtMsdjY9JREINP7+?= =?us-ascii?Q?2ZkHzN6Ua6TCPOVvWaXN1pV7m8jOhy2UoMsHtHHGnJqWSAznmPxn5rsBhnjp?= =?us-ascii?Q?EoRZnc6ZK/yHO7M8ObAA7su89uTPI8UQ5teG4wyuYLLkYvMYCrImyfQLjeeM?= =?us-ascii?Q?ZFbk3cLYw0qaYdqkKTtXmbykmO23YYOr8HW/UqsGChrDACQ6kxMcJ0PXbtNz?= =?us-ascii?Q?CVMSyn+e6hvph0HQTE2//uJYt0D+x8Ty0GooaXrdUivNlr8tCRcdDSkL4wwg?= =?us-ascii?Q?yh+uZQKYcJ1HFTVkbANlL0W01I0zIGdw5J22sFHufW2YkCfmQ0BegXpZF3LX?= =?us-ascii?Q?uZl7kgR7VqoxI5l5wkx4Z8lduodK7WTEOgpXTrrBMgw2wuKcxnF82t4ffs1K?= =?us-ascii?Q?tth6921t83X6pZ1gE0FPahy4g8/2W19lPTRT9y7iE/q2OIZNugshDkhzP4Se?= =?us-ascii?Q?MnmKQ8JsufxKmAZAVnSrE6SjVRkrmSGoM0mZyCyqzgR1yUcy/9h3+wFGI43b?= =?us-ascii?Q?ffPl+n9TN72mdnnl/mLC4ic1YAkF94NPDC+OoGy73/jEYYEVwfw+kF21Z0me?= =?us-ascii?Q?SjKG4jktt/DaJAtNwEZk7gYJjbgLdlp9TZ6RHTagaenFok1Di/mHdTv9y6mo?= =?us-ascii?Q?E5PfRUHgjxNU5F6YFpuAq3qQvwbxwkivioGik6mrAoItqxWRT8jOGYUmEymd?= =?us-ascii?Q?IVkjlvWIkihIwkNauMs84y39IeQQAoUveb90ipwUTRStVYrFcjWC3AyY6evt?= =?us-ascii?Q?J4bPexqNeMNyrElflzxfUEVi/u00zQsEsR2PxnFKtJ9iRKxruE4dPmvt+lRX?= =?us-ascii?Q?Yc7oMnvnUrdIP10gsaA3PZWSNY2lOA2WNygNYIjcYtGkGRmHbmG3ZmAI37SY?= =?us-ascii?Q?ZOzTE/bCxBO+odi2FiCVgp3XFWr342yAOqcUhivybzPOQ9PVa79UdZYTscro?= =?us-ascii?Q?VYgDU1LgE+cFw720VQV5mHtrxo7owZF32LBsXYiWw2YfI0/hDrtuvvMyK5CR?= =?us-ascii?Q?jaF3vOjhkkVpH6PeFkqJTCa3B5KajY5Pu0cHgEXzaO0RN7WyNk1W4HOCPZqm?= =?us-ascii?Q?U+835+dawIIXv+pzM8C9bt38MKkdokTJu2h5T+MxaLbUSCtNkm8KQ=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0158;6:NFrjq0vfr62vyKGZpbpS7DLEcYwPQDCst1MMPWiqidQlash5fb8gJeqqpgtjQf64kWSz9HaUWNyVRo8uf9GAIZ5SlG1JZMgZBPmgLqnLLDvaX9HBKbaQSSk1+K49p7p4+Y5Oe3eXEpTDhlpzp+CVgLx8zWj6tJ3KybAeJ4EyYBjHG1VCYgmmZ3cXGWI/zC6EmFY2201FR9WfSBnsxUu3vM+EK9te9sU3XilFOYP9Vm43t2j1ywD0as5ecz7VeXIdmH0f0RYLEJ6I8axVyolUKAJPtAf+nFnCbwUO32E5Rw9BS8WMAURDZGMmqXzXaNkDRYJmnV6vJula0kVjHFnvHw==;5:G1au5UTGXJx+rrd3mp9m/b/Iq8w1ivjWzpaN/tHO6If2/ADXf8L3/ZHx2uSIf3qBtR4k3H2KFatgazHFsl5KnXw1QpXtLgs20O/XduC/eSFoyY7LT0yuyahGV2AkH0MAbVPofWZYBRrOkUt59X9fRQ==;24:mYptqHb8Vt8OBh7617GIWxR/eyK6bgX37huU+N3DYu/eF6j55gQpqjCGsYQmmd5Vk+2bv5oW7sZ0qIScTfTsiKDnYKl1dNer5HFl+KrS/QA=;7:CYpc4Xsf/xcYu//+QqUPl8XkkCO75hQOj6j15buMv7P02xZkSBBvEexoRBMHV5mSwv4DjPyfY7GFP9nvzD3eFjbzVVwiGtaWIY8ll/kGGa29QgnVKt6dd7gsEPSg8YFHBB5v1oVSlRpIxcg6gmZ9imB5/evN3vB7h9GS8hqfpBFjq/t0uLaAVzHN0fh0EqTLAAtp/YcowxjiIzgBG87hZZ/lJvggtS7VE2+xU+SB9WI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0158;20:96+KJUc4s+cL4fiBRyQytpcIUlKtK6xbSxOYp9sjbH3UBdD8VKRl11yvDQscihWGt7d6OsH7YjUHJUKbgio/3070cUzBDlcI8ei40GHJHoXl5nLY4GRouf7/rxC9pToX5v1jRmLZ2+Hp/h2V0+7Pu1ZAjaFjnOF1ab5XOlw6USOGa1zLHEH6Mjoob9rwoPA92I0pEfp81Foq+1XtiM0S8E9loCNZ9R07IU1tdXocR2TgeKGrpi1jGpt6ga5qpKn2 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2017 15:35:01.1192 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR12MB0158 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 Reviewed-by: Borislav Petkov --- 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 353f52fdc35e..bdcd1caae092 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -779,6 +779,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 @@ -816,6 +834,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