From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934325AbdJQPnA (ORCPT ); Tue, 17 Oct 2017 11:43:00 -0400 Received: from mail-co1nam03on0073.outbound.protection.outlook.com ([104.47.40.73]:47707 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1763236AbdJQPm5 (ORCPT ); Tue, 17 Oct 2017 11:42:57 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; Cc: brijesh.singh@amd.com, x86@kernel.org, Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , Paolo Bonzini , =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , Tom Lendacky , linux-kernel@vger.kernel.org, kvm@vger.kernel.org Subject: Re: [Part1 PATCH v6 16/17] X86/KVM: Decrypt shared per-cpu variables when SEV is active To: Borislav Petkov References: <20171016153423.2980-1-brijesh.singh@amd.com> <20171016153423.2980-17-brijesh.singh@amd.com> <20171016222416.x26tp222x2ox3tkz@pd.tnic> <20171017082020.ctgjuo4xcvsaitdf@pd.tnic> <57ef6c36-1708-56f2-b0ac-ea2267f6aa9d@amd.com> <20171017133555.de4omyuoveaijkk6@pd.tnic> From: Brijesh Singh Message-ID: <35973f2a-664e-97e8-3dba-00db5f8d9719@amd.com> Date: Tue, 17 Oct 2017 10:42:45 -0500 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 In-Reply-To: <20171017133555.de4omyuoveaijkk6@pd.tnic> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Content-Language: en-US X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: BN6PR04CA0042.namprd04.prod.outlook.com (10.174.93.159) To BY2PR12MB0145.namprd12.prod.outlook.com (10.162.82.18) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c6638bc2-738b-41d6-b97b-08d51575bbc2 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(2017030254152)(48565401081)(2017052603199)(201703131423075)(201703031133081)(201702281549075);SRVR:BY2PR12MB0145; X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0145;3:H06zmZQfP5JLHWk8DCRZDUvL3B/whEa9Rfb6+CqYlCB/mTXlfFsIgaPMOmeX0l6Ai+RFFAd2FW1UHsw+GWaYKRSSgk0o1Ne27CCu3tTdGn4cxdx33Srv8e0ThSpR13i3QUBMbn1PsduxAA+WeYuNNKkpsThwhxvGhZZhVDeJfiPGHMy+7Hym/w2yMf1Zif7krTzpwPnFa4f4Ff4ret6Phw1aMgkKljeQoo3AAW1pL6JXKLpTSDzoVeXQH8y1O9gT;25:mtu2C+DPJRSPIFdDGKPqkLwJ15WPKJtqjalG0JJQknnN+uGSEeL254mW4LVClzqT60jnVMomAjM5MxucNSGxVs2cmljqTDxOwpUtOnTb61/4TYFaUzRuHmAlHz5YRMznuUIKso2g8iOx5cdbdXVzCh0T2qMc/mpLiONUFBeaXGZYVhklay7RA252sq9rMQWZjj4K3wsRpXZmLExcJSsGPQmkX+CFls8MkdGy1pN/iQVqhmSgX2vXWBYrArmPOxSJ1aOJ0M/TIOyZ2PnXs9bWfvAuGMFgNekPYSppEsasWOMswWl+RRCcpv3RSDUuwnluWxN3kjf37r87o3N+Y3H44A==;31:W3wiaRKupu4GKjp+tRMwIdLEDgzX4qX3wZEptFxZFDIhmbM35A3VqwanZdw8OykdwpcrJWs4gHVRi9sb4z2quR4sYpOqZj/2D9KzSPb9x+69Lqqzg1b+RsW/jxYlHqd4VVNsR5vLHKMkZ2bYpm9Dt6Zcb2PUg+X+mpQMjH4CTcLU9RWuxKh/LLX9xLGvyyl7qozpmSheOuSrH2vFiv4XQ7NfLAft9dB9+mhmu1mOOss= X-MS-TrafficTypeDiagnostic: BY2PR12MB0145: X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0145;20:fflp7IgaVciX6vwoebHWqZGj5nwIi6kiLhzbIauK4pg7fUP2Co/LyiXHot7T1Gc14FHXGgxaI38SohlQCmn7m4W3S04g+KVXzr2NguMIXXvTLtBnTM5ietmLdmJY3UeRakwt1N6eEhLoWd1RTGO3RN5e4wFDWoMqw/ojwPold12nJ6+UbG0t536QL7J02/jKnYcHXeNL9itKYPVV1tHs43dLoqcj9q72u7HwZ+1Sl5zQmRBTOQoyLmcSAQ0PCCBxtp+WY2gQ0VdMgmOBhoOTS0gzmMo1/CVSpck/IM/OWibXDQ/MmpHdc0+W5IPG1Y0j6vYtuAKi/KoYPNaytsDD8lvaNRF5VnVFwusFt9M31KgIDHNj9C2eGj+F1j4LIg06DdlLEdzHtw/1mLQQMWFXSC+kR3y4xKI4bPQns8f93psxBW9udJwj1/tw3EEzpnHjG94LuPtPGPgUBBPdC18WEoZROGjxFI5dx9LqWz1sYgd6MZ4meuOGENX6fw3E2iRF;4:3uq+ze7w0CdNmiHvHKjk9Qh1LCtPLUwVwxbpYNQuSFWNqTGLhnBD0Bt+HXwA0t6WdYiUJrjFwCWY6EViQpmrXL8YGBfnuDhIjCj/jpr6Jd5Ee/bHqyjhETnUS/Ve9gKTIBnQ61rW5rXV07W73lMcQwII4EppM1RJpEMk5jw8DImJoPDZOOW3PdtAW2SEo95TeZdikHjzhF6uLmveJJoXHbPAMKRDbiOKzfuUyi/ztMTqb3cRylxaPWYOHpqzxZod X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(10201501046)(3002001)(100000703101)(100105400095)(93006095)(93001095)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123555025)(20161123564025)(20161123562025)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:BY2PR12MB0145;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:BY2PR12MB0145; X-Forefront-PRVS: 04631F8F77 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(346002)(39860400002)(376002)(377454003)(199003)(189002)(24454002)(8936002)(66066001)(106356001)(33646002)(65806001)(53936002)(47776003)(2950100002)(4326008)(65956001)(6916009)(93886005)(68736007)(316002)(229853002)(97736004)(16526018)(36756003)(54906003)(58126008)(83506001)(50986999)(6246003)(54356999)(76176999)(6486002)(6666003)(101416001)(105586002)(53416004)(189998001)(50466002)(8676002)(305945005)(64126003)(81156014)(31696002)(86362001)(7736002)(31686004)(53546010)(25786009)(81166006)(2870700001)(6116002)(2906002)(5660300001)(3846002)(65826007)(23676002)(478600001);DIR:OUT;SFP:1101;SCL:1;SRVR:BY2PR12MB0145;H:wsp094329wss.amd.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCWTJQUjEyTUIwMTQ1OzIzOjF0TjViczFpWDBmUEdiQUtZNWhmRithOGt6?= =?utf-8?B?U3R4eHFYWUMyeWt1NFE1NU94S1YrVVlzSVR4L2JvTDhWQVVIRS9LT1NrdTMv?= =?utf-8?B?Z2VvaERJT3RkajhaNHhFRWhLZnVyMk16SnEyUXdNL2RaSmRLKy9JNU8rR3pU?= =?utf-8?B?MkFuc2VYRnovKzFNbXNMNkFtOU1tZ0prejhwbDRVMlhnbnF5bUxEL0hBQnJx?= =?utf-8?B?QzFxbnBucTBrTXBDRG1XVGxmU2Y1SUQrTUpkUkhxMVJWRHJkbmhDRm1CQlRW?= =?utf-8?B?UXNRTk9BTWpJVHU2L3pSM1gxVk5ubGVVTTdNMitWS2ZpUlB3MmZTZzZuS3ZR?= =?utf-8?B?NmltL2pmdU5qRVkyam1QRTVwWXZZT3ZZVVR2Vll3WFZrL3dnTG1IWjZJZUkv?= =?utf-8?B?bjZGV1NucWUza1pkWlIyejlCb2VCVy9XU0F5WHZpdVNwWDBBcC9PdFV1STVw?= =?utf-8?B?VllERWxyMHMrNTUwbzcwS2YxQnhvR3lMcThPSlBSenB1MGxhQU1hZ0M4emRn?= =?utf-8?B?YlJOZzVKVzYrMkRhWDR2L0svbWkwWDMvbkE3ZVAvTUhmZk0yUzhGY29IUDcr?= =?utf-8?B?UGhEYm5xRHJDQkVZY2NZM0h5UFhGMXhFUjR4WGJCVHpJa0FJOHcwU3kxR1Rs?= =?utf-8?B?dkpXTk45c3k2ZzVXdklYeWlVVlovSmF1RSs1L3BXaFZMN3Y2SHVjNDlNdmxS?= =?utf-8?B?YUFWdlMxcmFXR1dqZUdYZmNjb0VNejVIZEtpdDFtbWs3ZDJSbktBNDdMUnlM?= =?utf-8?B?K3F4bFljUWlVQ0oxZmQxTUZHUHBRcUpORU1xa0s5Q2xpVnQrc29RZHlweTNt?= =?utf-8?B?RlJYV2R6RTJwL3ArQUFYeGJpL3FpNjVSYWY1M2liaGVKb0RwZ2RaVVhOTzJj?= =?utf-8?B?cXFoaHZ4cXd4R0p6RTRMZGFiYkZoZHdmRkdmZDhSa0hCbGJ1VHZWd3NLWUpj?= =?utf-8?B?UHNkdDh3a2F1ZFo4QW9KcFovK3lsMnVVK09CdEVObmR3b21MS0N6OThodnRN?= =?utf-8?B?emJoZE9OTGszV2JhTlFTZXI5TVlsUlBQckZzZUdPNzB3WEU3K0xkODVrNzJG?= =?utf-8?B?dHFSSDZXTE1GUUp3VDE4U000dEtYNXdKY3VGKzkwL1VmdzBPaWNyQTFWQmoz?= =?utf-8?B?TnNFNUhTVFZWc3NSUllPa0EyMlZNR3ZKTjVRNFJKZmxQc1hCVnhrcjBoS29W?= =?utf-8?B?Q1hKVS9GaEtiZWdTYkNwbC95aEJzck5naDcwU2xJS0luUDJyOGhLVzBOUWRy?= =?utf-8?B?a2o4OGdCUmgwa1RRRERZejQycVdQQWNZdFNaVkZiWEVzN1VCMlJNWGlMK0lT?= =?utf-8?B?SWtVSnpGRk5UbFZnUExva3pLSnVoSzIyUnd6M0tJYU9xck9taDExdDYxZkpW?= =?utf-8?B?NUZSbEk1TllRRW1QYVcwcTR3Z0lhRjJkaDNkbHJOTXNxaTZENno4ckl2a3Z1?= =?utf-8?B?RVk2MVJrc0NaZXFQNTF5RFF2VGRUbmQrNEN0V0l6WmNheWdwMEZoT202VXk2?= =?utf-8?B?ZnhKQURSK3Q3NG1aM3pybG1pMTRaMXRWZ1BzSklmNzljeEc4aCttZXpBc3V0?= =?utf-8?B?djhnZWJxeEhLOHN4WEhOZExrNHZDME5paC9aTGRUMVl4VktCTTl0d2F5Lzl2?= =?utf-8?B?djhOejA0R0lzM2FWZ3F2Q2J0cCs5c244aTZWSmZvaDl6ZW9zeEllanMzUFFB?= =?utf-8?B?ZHU1L2tGY3ZrOUhORjJmMGJpY21aVVl0YjN6em5XWWNRWUwvNzY0Z3hsVjhw?= =?utf-8?B?aWE4S2ZoNWRTdEpmdFpGUjZjaENIYXAvbVNkZ3BYdDZ4dStscTNyQXJocmxU?= =?utf-8?B?OUFyb01Ed0xIaHB6RXlqU084d1hWN3RuWHIwMnZiME5XZ3hIdXQ2bGcwUFZv?= =?utf-8?Q?BoWgoAfE6mU=3D?= X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0145;6:l1FyABMt/q+h8no0gSaiJL1BVjMxeMIK8Pa/jGRMWplsKMyc5Pj2CpHJaMpA5We2jjMRkxEtFp1T19Pgi7K8xiTYuUSqjCew1b374JgliqURv8ZDGO8ov8T+zjKcOeBpVrEv3JyNvfCE4BQUTQVvefY4nt06Ay2e1sS8BJ0EROHJTfRjsFpTTh/S6uoPd18bFtBfCos6MjRRVhiwWLBijD0gzXf+JCqGgTz9TofIDyhKU/cFjPfFoA3bNxm6Eht6D7k7ETbZvqnOPPbLy1crJ1pI/po6GqEG+v3Fg4zBVht+vcj4SOaN+z7rBikHIjgusmcmXlBR/529sfNUZ/+/vQ==;5:pRpRw7m/uh829CoZAPxA1XT6MH4pxJ4QTT4htgs0nbs8UL2xcC5F+XivZBojSRdkjQ7pR1ooHmWnAKVYbhRQIQXiTCUsZ3nrKjI35ee8dSDFfG1EeuMYyfWdb8S4yUsC+cXeLUOOhV1YTNt8lOLw2g==;24:B/RlednglChZf81Rd+gpTttxjD/m3Pvday5SRrTnwao5V8xAbe2YYO1S0v/LXNj5so7S0cqNNwNY1b7Y3lN6TTyb9cch5ZCU8sKKCq1dapE=;7:3GkVjfhmsdNAZa9pIKFs/qg46lSR09AaDRKioBj6du0NI6Ey7tXDZnMyFaQ2QdaFqJmGCevRSw3CiaI+LBnYgXpBJ0Qw9VkHJtC2THCn8BkZFjH2+BqZzBYWzxlFa/vL5JWwfKs8L3fI/DknwiZm1eKr13BXgUNefiPQvjkkDrLdVoid0QAbnYVinarOTe0i49AtcPNjTltV8+CIWCROYb2ZIJMaWsjHbqBuAZK3Rps= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0145;20:vDo/KPT8NdoefBdIbsOTy3kQA1cq7AInytgW7T7bu6MHFeYNw54QsG20XinmoQgXXsUPjeIflklSoq96clHDsux07e0Z+HD17H8HI1rRZFTRMZz06BvPgZA7yYfa5dT5aIp9wGIJ6I2p/hnIpCwd1kHPUEXhjIFrLMFXGSNlNiZDwoGbTTLEu4Pm/t0CzPy9pd5gooLi/UNBhUYK2PDlCWzoE/mvXYHgsHRCj4cnwHswjmla+v/8ChXoob/avaDs X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2017 15:42:52.4344 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR12MB0145 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/17/17 8:35 AM, Borislav Petkov wrote: ... >> The second call is for UP cases. The kvm_smp_prepapre_boot_cpu() is >> called only when CONFIG_SMP is enabled. Am I missing something ? > Yes, you are. > > kvm_guest_init() gets called unconditionally from setup_arch(). But then > you said kvm_guest_init() is called before setup_per_cpu_areas() so why > do you need that call there at all? percpu areas are not ready yet, what > makes them ready in the UP case? I believe in the case of UP,  the setup_per_cpu_areas() does not do anything special for the static per-cpu variables hence its fine to access them. If we look at kvm_guest_init() then it directly jumps to kvm_guest_cpu_init() in UP case. But in the case of CONFIG_SMP the kvm_guest_cpu_init() is called from the kvm_smp_prepare_boot_cpu(). > IOW, this sev_map_percpu_data() needs to happen only once, during boot. > So call it only once by finding the right spot and not by adding a > second call for the UP case. > > AFAICT, it looks the easiest if you put it in kvm_guest_cpu_init() and > do something like: > > if (smp_processor_id() == boot_cpu_data.cpu_index) > sev_map_percpu_data(); > > ... > OK, this goes back to your initial feedback during RFC v3 where I tried to do similar thing. But since sev_map_percpu_data() uses __init functions hence we need to mark the kvm_guest_cpu_init() as __ref but you didn't like the idea and asked me to call the sev_map_percpu_data from kvm_smp_prepare_boot_cpu() which is already __init.