Received: by 10.223.148.5 with SMTP id 5csp6566867wrq; Wed, 17 Jan 2018 15:42:38 -0800 (PST) X-Google-Smtp-Source: ACJfBosyk23FiV4/P9zIwKT9M9sNhVApDKgaW1Mmhelo4xKmSWceyxUNZPl90XDeVch0qtZ24g0m X-Received: by 10.84.133.198 with SMTP id f64mr43381417plf.266.1516232558169; Wed, 17 Jan 2018 15:42:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516232558; cv=none; d=google.com; s=arc-20160816; b=dlJPM1YrcvEfhVfXdDC5bsmtzfTx2YQSjPCburUpR4ABgQsDRkTrSYK11VSuCaHj8g 5ZZKfqocSffVkZYWa12YJ4soxyXrT0uSBFHDRP2bDNTWNl9UUd3JCD+wUETVdXk86TAC Sf5um/pNVLjminbNqnYfD2GsbgcgH2B0pPfVr7qM2dpWJRLVNDjAWQWBRoVzzJ2f7obM iKXuOP/agF7pSQfhPbauvqM/YcCV2gk+FlSmGp9g3Kx7XJOROgC1U/jXxdAZludnCl8b JmOstfk/HoblKnGklG5nJIUeMeU11oGqIWrHLZ5QwNR6moF5BvYmhrv0NBItYKBZKUGY DoyQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:spamdiagnosticmetadata :spamdiagnosticoutput:content-transfer-encoding:mime-version :user-agent:message-id:date:cc:to:subject:from:dkim-signature :arc-authentication-results; bh=9AZpzNTnlazlyLmn0+4QleKShkymUNK6eLGRm5aeDKY=; b=L+Vc1p0QqYq/TjK68U51n/BOCqN3SgBTiz1FjrrND4M4ecpfc+LU9m8iMiQk2o/CAk x1uz4A72eunjMKNiggQ4JMoZrqzzm15Svg7eIIjpICFRMNMCEBl/mw4cqmD7N6WpoZve M+pxBnqqgGGG3ozZEMPhVrEDLUxCT6OgJRZ2Ri3+oubo8xcPr0VFaWVF1lI64tNLKH/c 7MMoXv0x6OUTsC79GWP7V4OXE2xKXtjYlZyxer4mKFnRhfjTUJxsL6GaXbYjE68wAexn FZvFUaZZuEXr7PbUwCZyQ82y2tEwYymoji2dwSKTYMAGolgh7+xO+CqkuCa9RDOf4wGP 1/Xg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amdcloud.onmicrosoft.com header.s=selector1-amd-com header.b=M/jPuWbb; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n3si5848384plp.487.2018.01.17.15.42.24; Wed, 17 Jan 2018 15:42:38 -0800 (PST) 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; dkim=pass header.i=@amdcloud.onmicrosoft.com header.s=selector1-amd-com header.b=M/jPuWbb; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754422AbeAQXlv (ORCPT + 99 others); Wed, 17 Jan 2018 18:41:51 -0500 Received: from mail-bl2nam02on0043.outbound.protection.outlook.com ([104.47.38.43]:24160 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754275AbeAQXlt (ORCPT ); Wed, 17 Jan 2018 18:41:49 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=9AZpzNTnlazlyLmn0+4QleKShkymUNK6eLGRm5aeDKY=; b=M/jPuWbbAuSn3RMQVXjimMR/QASlhRNAFXZTBmcGTlWTHhUGv7ZbD/eVeHlBY9h2UaRKhdR4a0AL+Yw+BUaTw2bF/euHsQjPyySNSAg7BXJvq9UJXqUEXns03JnCMAJlUUuQw1KmJyizo1hd+zKrgJHVC6KYh26mcAWSJYAHr2o= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Thomas.Lendacky@amd.com; Received: from tlendack-t1.amdoffice.net (165.204.77.1) by CY4PR12MB1143.namprd12.prod.outlook.com (10.168.164.135) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.407.7; Wed, 17 Jan 2018 23:41:45 +0000 From: Tom Lendacky Subject: [PATCH] x86/mm: Rework wbinvd, hlt operation in stop_this_cpu() To: x86@kernel.org, linux-kernel@vger.kernel.org Cc: Juergen Gross , Tony Luck , Arjan van de Ven , Yu Chen , Baoquan He , Linus Torvalds , Ingo Molnar , kexec@lists.infradead.org, Rui Zhang , ebiederm@redhat.com, Borislav Petkov , "H. Peter Anvin" , Thomas Gleixner , Dave Young , Boris Ostrovsky , Dan Williams Date: Wed, 17 Jan 2018 17:41:41 -0600 Message-ID: <20180117234141.21184.44067.stgit@tlendack-t1.amdoffice.net> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: CO1PR15CA0066.namprd15.prod.outlook.com (10.175.176.34) To CY4PR12MB1143.namprd12.prod.outlook.com (10.168.164.135) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 613f8304-2832-405b-8515-08d55e03dfd2 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(2017052603307)(7153060)(7193020);SRVR:CY4PR12MB1143; X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1143;3:UFJxKQPeA4IQKBdkG3wfUKBHVlUJiyaaItfFbiWQHFZEJR+AF5ca2PMCEuHpuAYKDxE9iv2W40DyY6uLp2IAZSVG722h3VvXcTsZ6NBwzZfGUjatjvfVZMEzWDnS/VvqK+9qNpDWh+StxVva71tD63kXbAixO9YXWigN4AN4aH4aEQ9ZEh7O3+8g/pgrgoMEUrqBxuxeiFrp6QYjQPjadZqq84fjGmvMBw+RA7gI44RFqi4xdJ2nbaQH6YkXyJio;25:QlbIBS2aatZA0pIH9xO0Hi+Dl2vXqOM3ZVw3g56SWpIlcavmiGzyRM87wwoSJaDXV6/LH373LMewTPGh512/nutOA/+7KyG+hPmwGwaqTvCZggieX6bFUwieFUMbXjlYMa6Qo9RRKFo2b8tttPEq18iERypT5L7m8bs7YLaIjn117DObIvxMKcUSsExmuq2tsyhIhBOyMD/PiQ0D05MV4krzUYkpBjeiswx/FcSw/db1ely2cf1wmhMWX3oXXF+zqEA0txXYlGH63JiTrUilcxL7vNtsnaC7wG6TiPQypJikxDBrs7UjrF9Ty0EhCMZ9xoPXwRgjCeso71WXggLb4w==;31:lzMx31d9EqBENKw9T1UtaOoJxIT7rKFD+JMaP6X9P0QCFm0WtpIkeix+rOzmkQ06Ct3e5lUESh94lwdI2W9TFk5G226gJkQANGBEPm+CKWBsla1EzL554C0yTsfybpUu3Tpt3tpJR0fU0jmNnl9jzrpSZcoyBBxcWksOIhQKXHSgExzrSsPTY4Km6QoHSJC1+O/qg2f//HbtPz21BeDaE0cqORR7NimeOwii3/Xijj8= X-MS-TrafficTypeDiagnostic: CY4PR12MB1143: X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1143;20:FJUw7y+8rt3Nd1b1EyItOH0axwjKguBFAuszAau1YTe5PreKUA5CI5tpRt/hN4og58aNWow5R4A7Jbfe7OSjiPlgJSl4jDgJP4/Xb5qr5TTezTFQUNgMZvmxfww728NSs1BQcvBdoCvtGHr1ui5B2HRJpNs6s6SKpFe4+4DzLSjXUqwVYtQRv0pm9kOHi9puF6fPRR4ZNC8GLqwKGV19/pgHayK96L4hK3T3SfaswE5hjP4RO8DEijE3NiI2DgyQcuuLtfE3A6044Bo2J3MYAT81WYa/Oos1N8/ZwSUUzw2/xdJTMyUoBNbho4WGa55aiSz89MMjjFBzkNdc5aBZIQVeED9oETy6xHSA4Ael71PtwlAF2AuXSQl+uHssrULL/qQXGBSVqHSrWTHFKDzzQ/tFK0J4sD/Nx0HR6DpZ1SnQFtV/uCHWcKb9k+L+KoyiaYylpU6Cxy3Ki1vlT+9l1qY/k1i8klOpUkMz/mWb/CbsjfkQjowf9v53mVsK1DqH;4:xvTsILIpeBNWdA4ycov03mUVeGDjlc9jsyIjkZV9LSv7TvexUTH6eJ+Ao+bFVDfU69S3ba/UQpW31jviFMTF5HI5Qxl5Y4V/F912HtmgMbgZd3dB2HrWjJ0czWbmPuWHmZRpR31eYYEOTNUIVBm4XGdRaLneA1Zy65E5s5SJSuNl94tboPBshAHid33BtfUeTwANdL8u9OHX5Yv+Iu+mZjMfPeBQE6XNYVf3y3/dNRZMDD7ai/sbtESU9gVtzHwIcOYDmI2U8oXMWIGCklGzJIPHfbej3pZHpixj41O1KTXC5UWcclnm/8yDUX2zl+IfieExdnJAsVnU4uS2b05Biw== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(9452136761055)(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040470)(2401047)(8121501046)(5005006)(3002001)(10201501046)(93006095)(93001095)(3231023)(944501161)(6055026)(6041268)(20161123558120)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123560045)(6072148)(201708071742011);SRVR:CY4PR12MB1143;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:CY4PR12MB1143; X-Forefront-PRVS: 0555EC8317 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(376002)(366004)(39380400002)(346002)(39860400002)(396003)(199004)(189003)(50466002)(97736004)(106356001)(81166006)(47776003)(105586002)(81156014)(8676002)(72206003)(305945005)(83506002)(6666003)(478600001)(97746001)(8936002)(25786009)(86362001)(55016002)(66066001)(4326008)(53936002)(53416004)(230700001)(26005)(52116002)(6506007)(316002)(68736007)(7416002)(54906003)(69596002)(58126008)(23676004)(386003)(7736002)(2906002)(2486003)(9686003)(1076002)(6116002)(3846002)(16526018)(7696005)(59450400001)(103116003)(5660300001);DIR:OUT;SFP:1101;SCL:1;SRVR:CY4PR12MB1143;H:tlendack-t1.amdoffice.net;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjEyTUIxMTQzOzIzOnVWT2JZRUV6dHRiR1VwT3FaakZkUFBVQzJ5?= =?utf-8?B?aGMzWTlwaytTV2ZYMUlSeThiWWo3bG1aVTlndEpoSXJIa09LRGR4d0ZxZmZE?= =?utf-8?B?WUo0eFdrYW4rWmExdXZ6OURUcEd1QWNaWGYzZDVNdWthWTc2VURQUWRyTUlj?= =?utf-8?B?ODNxeHRlaXBIK0h0ZHRYbnF6dFBsRGR1anhJZXdid1RJc01JSXlmVnZ5bmc2?= =?utf-8?B?Wm5RZEhtcm5JMWl0SmZLZUo2cE4xWVdxeitSQVMwa0N4QStUOXNHcjJwbnEr?= =?utf-8?B?ZkdtN2tGRFR6UzlENzFLTXZ1Z0ZKcTBaU0hCOVJFTk1zQzhmSjh1Q0prQllL?= =?utf-8?B?ZDQwQ1hKWEEva1BjajVxWGNoS1JsR3NiTExwUm9zU0R6R2JLS3Y3U1hOZ1lQ?= =?utf-8?B?eEVhMXpIOWUrWWg4bUxsTW1JUzhRUVlXcTlHcUNPSEVWb0pCY3p3WW9rZStV?= =?utf-8?B?d0dFS09DSE5IcDczSEViNjhWMDlxTFl6Y1RadTRFZGJxSkVhbWZPbzR5YUNu?= =?utf-8?B?bE0zYVVzc0huZFNYeDhKbU1PdnBzUzZPMEdWVDRaQ2dna3VZK0JYLzlrc3Ra?= =?utf-8?B?cmRsQnhVbkRROG0vQklncDZpTjA2ZXMyZDFwNUxWYnBoN3dOczAwd0w4ZW1P?= =?utf-8?B?cWhsaUl1ZjcxcVlNdmZIVjlQdDZzZXNQUlR6WDVjbmpNYzQybjN4Y2VJczU4?= =?utf-8?B?UUZtOExPVmVldzc4TlZnZTNsbEI4bmt6cUZSSzIvVlFHcTVhTytJdHJCSE1y?= =?utf-8?B?a2F0a0lzK2E0c1dWOHlwQ2xQaEdUWlc4aks0SXpLblNjWlVuVnJWZG5PLzEz?= =?utf-8?B?M1RxV25sZ1JSUVo3dllONGRENGR6SVY0VTZtejUzTWVHMFdVUkVZT3NGelV4?= =?utf-8?B?eUhTcmNZcVpTMnpMcHk1UHhrN0g3T01yQW4zMlZ4dURNNW0yaWsyTkgrMjJn?= =?utf-8?B?ZVVVZzk5RWxERnRmeWRmVHNEc3Vpc3ZnalpZUHA2SURsbThTNzk0ejNPREZG?= =?utf-8?B?OWR3VEExcTZTMFRIZ2ZxVjFkNEFHTFU1bm5Od01ZRkNPeVc3aXVTbjRjRUcz?= =?utf-8?B?SE8wTWkvOEx2SjMrdm11WVJZWDF2Z3BZMFVvM3VlMkNOUmNkalNPTUlLQ1hX?= =?utf-8?B?bi9iRitScXV2UEpXTnJudmtiY1J1ZUNCZFk3cnAyS1FmaGhHN1lVdGVYVXdL?= =?utf-8?B?MUkxakJpQ0JCTkZtWUFsVUo2ZVZWcFlydFpmT2NsN0pJUWNJY3IrbnhjazJ2?= =?utf-8?B?TWhkRmkzb0dPRFdBTThoWmFSWHE2Tk1VblFQdnVkZUxwYUlUN0Q0cmswVWY4?= =?utf-8?B?dklMQnNkVDgyWGYxWUIvT1ArOUJKSVZQQVU0aU5weVczZ3RHRzh5a1liNEhk?= =?utf-8?B?L211RW5uem8xbHBodnFKWkZySCt4b3dtTTl5WGpJYnBPM0hya1o1NEJwazI0?= =?utf-8?B?akRyd2RLSnB4Mm5oR3J2U0NSdE9oQWltSk5wK0tJR3J6Z1hnWlJTVlhIeDNW?= =?utf-8?B?bUR1azlLUzZFUmpDQTBESDFidDByZVYrTWppZjYrV0Juek9zendzTnUrWTVl?= =?utf-8?B?UFpjMDV4d080Q0hvZDFxeUFuazI5bklrZFNENVRGZitTS3R0TWEvelhBa3BB?= =?utf-8?B?SGlVUWgwWjdCQWpFQis4OVlTUnAyazlxNSt5Y3NJRDM0Y3Z5NDdldDBRPT0=?= X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1143;6:9sGy0ox8SwuX0JKX+aCEQM4iPsNlzSTWdUtHqyEkGapO5XtjrC7ezBGuywfdfT30glWx3iomecOIgFBGrSb5j1RYquiEVa94qlYm+AXxGXn0XY1wXn/zIo1jUpV/BUDWIaMg4ojkahPx029EBjM0dGqXT84hVxRuCjStO9rlxBLjwIqn8f4drY1RulvqPkXFP0Y4x6G/HQqUfJt90EHJNWItS40xD3tj5roDN6PLILH4U5PKZTiAVjKt2MFFAbeSalTQDIBKHVLuviXoLTuGIvboBj4bsIYG4fjnCk8A2xTsopEZuOJrW+A+QCg5eNsdf+79Ds9OyxpEz4tObUdyH81OUhxStdJYYLOHOu38Awk=;5:0gASZxTdIkZuMb8M3+0BdzjTpjcm9/x72uOIH10vjseIu+jhRb+Lj+Tc9lS47qZzYzRUvHEpR11h8Izb4bt9PjNxRj7exaGDs8E4RiV1ydG2GXylQDeXQRHFX0nvNjt2jfreda5Dc/qIAa/yK8KfWWrIXYIqwMX+9ESKP+p3kns=;24:IfWyFJklpjKrcGVlUap2i/HYILNuYaV7cEHDx1qEhvlXueU5Vb4/0rFf9lzbgzZSO7aZ8hj7Apc751KWDRFjoeykbsm3D7CVCBEMzc0jzT0=;7:fap5CBlgPDw0dGiNHqvECn3kfhRS92+WZd8HYjw8kxFrOK8ypzqscjIrwBPv41u4U4NpaSuBz760wJbv8rKeMwVbbLfNDXH9zI2WtxnXfjJyE2YXvyvnC9jm9LLfwuBquC52svqq7yub2wNgLUPJKUhfIs+y5wPqdS7ps/fdL+fxC8YaTPLy5swviKOtTCXeBR+WIdH2hDakIFYJNp1gZGjSKdJ3FdNLVplSUcxu704ngX3pDFHGjrdITB3wfdrP SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1143;20:dvdBx8OroUtAdDUnDhCwuTrcyJ4bTfCx3TauUlegfKfSBwtrooqtHfz+0rA5TZuGSfBF0fMtTZLo+TywttjXDhq9NwKhMPdndT03JZIkuQWOwFFjdFqY50izbXku1cjhFI/42+rx11oCIaI6byU9tpH1ef0zSe/Avnri59pYwRa1z5Tbwh1J/i/ZFscKA++ddwLgWfAX+ApLyI9tQP2yDAbjCffDndigsX4aRsui9eISZMNkmyBgjf0jtN0MalM2 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2018 23:41:45.7227 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 613f8304-2832-405b-8515-08d55e03dfd2 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1143 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Some issues have been reported with the for loop in stop_this_cpu() that issues the 'wbinvd; hlt' sequence. Reverting this sequence to halt() has been shown to resolve the issue. However, the wbinvd is needed when running with SME. The reason for the wbinvd is to prevent cache flush races between encrypted and non-encrypted entries that have the same physical address. This can occur when kexec'ing from memory encryption active to inactive or vice-versa. The important thing is to not have outside of kernel text memory references (such as stack usage), so the usage of the native_*() functions is needed since these expand as inline asm sequences. So instead of reverting the change, rework the sequence. Move the wbinvd instruction outside of the for loop as native_wbinvd() and make its execution conditional on X86_FEATURE_SME. In the for loop, change the asm 'wbinvd; hlt' sequence back to a halt sequence but use the native_halt() call. Cc: # 4.14.x Fixes: bba4ed011a52 ("x86/mm, kexec: Allow kexec to be used with SME") Reported-by: Dave Young Signed-off-by: Tom Lendacky --- arch/x86/kernel/process.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index 63711fe..03408b9 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -379,19 +379,24 @@ void stop_this_cpu(void *dummy) disable_local_APIC(); mcheck_cpu_clear(this_cpu_ptr(&cpu_info)); + /* + * Use wbinvd on processors that support SME. This provides support + * for performing a successful kexec when going from SME inactive + * to SME active (or vice-versa). The cache must be cleared so that + * if there are entries with the same physical address, both with and + * without the encryption bit, they don't race each other when flushed + * and potentially end up with the wrong entry being committed to + * memory. + */ + if (boot_cpu_has(X86_FEATURE_SME)) + native_wbinvd(); for (;;) { /* - * Use wbinvd followed by hlt to stop the processor. This - * provides support for kexec on a processor that supports - * SME. With kexec, going from SME inactive to SME active - * requires clearing cache entries so that addresses without - * the encryption bit set don't corrupt the same physical - * address that has the encryption bit set when caches are - * flushed. To achieve this a wbinvd is performed followed by - * a hlt. Even if the processor is not in the kexec/SME - * scenario this only adds a wbinvd to a halting processor. + * Use native_halt() so that memory contents don't change + * (stack usage and variables) after possibly issuing the + * native_wbinvd() above. */ - asm volatile("wbinvd; hlt" : : : "memory"); + native_halt(); } }