From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933815AbeALOCs (ORCPT + 1 other); Fri, 12 Jan 2018 09:02:48 -0500 Received: from mail-by2nam03on0089.outbound.protection.outlook.com ([104.47.42.89]:29775 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933582AbeALOCq (ORCPT ); Fri, 12 Jan 2018 09:02:46 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Thomas.Lendacky@amd.com; Subject: Re: [PATCH v8 03/12] x86/retpoline: Add initial retpoline support To: David Woodhouse , Andi Kleen Cc: Paul Turner , LKML , Linus Torvalds , Greg Kroah-Hartman , Tim Chen , Dave Hansen , tglx@linutronix.de, Kees Cook , Rik van Riel , Peter Zijlstra , Andy Lutomirski , Jiri Kosina , gnomes@lxorguk.ukuu.org.uk, x86@kernel.org, Josh Poimboeuf References: <1515707194-20531-1-git-send-email-dwmw@amazon.co.uk> <1515707194-20531-4-git-send-email-dwmw@amazon.co.uk> <1515752898.22302.432.camel@infradead.org> From: Tom Lendacky Message-ID: <79715cdf-3aef-33b2-772f-985b24fcd1ff@amd.com> Date: Fri, 12 Jan 2018 08:02:39 -0600 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 MIME-Version: 1.0 In-Reply-To: <1515752898.22302.432.camel@infradead.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit X-Originating-IP: [165.204.78.1] X-ClientProxiedBy: DM5PR21CA0049.namprd21.prod.outlook.com (10.175.112.139) To CY4PR12MB1142.namprd12.prod.outlook.com (10.168.163.150) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: ffe05084-90bd-4a6b-d928-08d559c52717 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020082)(4652020)(48565401081)(5600026)(4604075)(2017052603307)(7153060)(7193020);SRVR:CY4PR12MB1142; X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1142;3:n6q+URxxlV/+JCgJy7+NOi/bDSScu/i8M3Nc2fX+jqnF6TGDtTMNhELHWA5Q2Cjjpxojn5GRjcPA0VHAZii6UWBNS/ravhj0hN644Tb4r6eu3J6oRrSMYdDoQ4JS4IbPZ6uFSLDFV99toKWB5KWh66/MejmlN6wQ3wrGd+U2EHNSBbWWrmxUXc1nthakek3bp5igDIrxyPOmmCAtg5Tzv2YscZqsjjO7MJotvat/Z24DR43Ps6s7aM99dD3gzIZn;25:7DhWLA+ag9z3AoUAPWhZsCMSQcTJ/LOH8Ogsw7fnFKy4D10l4/7PK0qCBBB1Ar+6UIoSb7Qtvy5w5Hr1DryvcJcXkJq1ghpWY/VMQdQTWBFvaHlsvjPWxidBGOx65sIl+jMoaxSitq3L8+t0iCPhaaXeGG4vumM9Um4J8fGlEF3zcz5n5Fh7v8HcuDsGkNgQBTx8mT5KW7KArUF51q8qXUjj9cuRg9y+IwvZNZsfXGnu38sxda6zguyKlvp8zphJD5rUMhQzHfZ5PdlQ4gCRdEceg/bqrIVAXCylsExCKVicBsSwn+KtvSxISKZvXh2JkIAWwLV/wYyGfMRa9bMrjQ==;31:mxFscXu1yWXWSuze+Sc30UgJmItvo7loKRWU+KhL5SHVmCJ6ay3AilUF/ue/JiY/n0BV7Lh5xQYXymJMnV2xi9pDW27rjLnfwKok2xn94YvQWlAM0Usr/OW5MyM9l4r0ANz/CMKPZaaH0BamZriTP2zwr2uYddk3KKl/AQfeo9/wrRPwJIktpzlIA25g1eX0jQ7oWtVp10Xtpfqo0U/QVRH0LmZygBhaXAtNYpz++zs= X-MS-TrafficTypeDiagnostic: CY4PR12MB1142: X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1142;20:QF+SIE70casNYzh6xrPSCcU5iQgF053BoyxRwhNPcCVtbZkU+rCbOY6Gsseee+XuhkHqvCWzQRX1iPn3SyQNBClJ2XIzFl4szG+ghBJlHF3UgZCrcneCxitRYfbknGvke1ui6q/CMTWNw/IElkTPO1ufyueV/SjI0NQQbbWhGW0CtJen18P59flOzOSFT7jVb6qlaOo8cxaZCc+l7O32gjzUZyBPQiwSimb/0VA02HJvlnRv3dCHbRBAszqouWMNLg3T3bD+mRPj5eKlCpZLA41zfTF8xWUHNN0Dg6x1kthbEn5v6CT4K4SXMyGs8fjwRlkbWRbwmUnlRJ6CxBlip50AgQM1V9kectvORlp4L44H5JGMQUPm3q4boZZmx4ddEK+gsgZHzFUeUQC4rPUHJQQaMCI5KX26QWKdm2tCyGEVRn+GTtecCEoFmfXLm4KwRF6RBAuXT4XXJVDyqRi8MouxqxcovjMTiU7LbKV5Em4Qlid1hweq8sL7mjK3i2eZ;4:IOT7GHB0q7s2LbT9UvhFhLHghy3XkaoaxQzGX7fatzlZ3PXSfOLGTee8EV4XGDoUMmqWKOkzU5RocSGSG7sA952ZlFLOQMLEu5XF7o9jePqqve8GaX1oo3McZB1oqWyixznqL/KTblhlEW4gyWkqQLbcyAR1S6hs73SfI2aYF8d3LBnfg8G3uEkEoNYa1Vpdb2jfB8Qm93XiOA3a1oGETz+9MAI0xUpySKFkIWYuzPWGii67Q6u1nzHvlJzrtdp9bZWlSx9yRjOa7eaZ2oQL4A== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040470)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(10201501046)(3231023)(944501144)(6055026)(6041268)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123560045)(6072148)(201708071742011);SRVR:CY4PR12MB1142;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:CY4PR12MB1142; X-Forefront-PRVS: 0550778858 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6049001)(366004)(396003)(39860400002)(39380400002)(346002)(376002)(24454002)(199004)(189003)(377424004)(47776003)(31696002)(110136005)(58126008)(36756003)(90366009)(2906002)(478600001)(72206003)(16576012)(316002)(16526018)(6486002)(83506002)(65956001)(64126003)(50466002)(6116002)(7416002)(106356001)(53936002)(77096006)(54906003)(66066001)(3846002)(65806001)(105586002)(31686004)(52146003)(53546011)(2870700001)(81156014)(6246003)(2486003)(4326008)(305945005)(8936002)(8676002)(81166006)(2950100002)(6666003)(65826007)(86362001)(25786009)(52116002)(76176011)(93886005)(386003)(3260700006)(97736004)(5660300001)(68736007)(7736002)(23676004)(229853002)(59450400001);DIR:OUT;SFP:1101;SCL:1;SRVR:CY4PR12MB1142;H:[10.236.65.116];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjEyTUIxMTQyOzIzOm5ETnRUT2tmSGZiSkZ5UEsyVlVsakVlMEF4?= =?utf-8?B?VUNpaHkxQ2xpVVVOeGZvaDBqK0J2ZG14aTFyUTZtL3ZEZmozZ1BaR3BRMmtx?= =?utf-8?B?eUFsVXk5Z09tUXVvNnZyVmlIR01iVnpWU1FGVHRJS0M3b3Z2M1VzRVR6UzBI?= =?utf-8?B?WExaVkdURC8rL05uRG5CeUdsbUxLS3JGZTkrUnNNRW9LdEtVOXp2Z3g0QzB0?= =?utf-8?B?cVR5QThQU2F1M1R3WStUYmJkT012RUZ0WVh1YmgxODdlMnM1ZWNIY0xIZ2lL?= =?utf-8?B?aGlrZzdDaGhhVDRUNHNtcjJHYmFLZEUrY3dCcHhiRlRaUHFiejNwSS9wejhz?= =?utf-8?B?a0lVdWl1bXBvYnVubGVKTEY4clNFU084TWxvSWpINng4OU5WR0RNRVhoRzZz?= =?utf-8?B?SlJjN0kvTjRxT0h4UU5UQzZST1pRM1BlNmlVWEd4ZmZjNDJCSkRJSFR0alNB?= =?utf-8?B?MnZBdGJXV1oweWJvdVkvc3J2TTlKdndwSnRaR2FFN1RuM05QWUZFdUd3SzRi?= =?utf-8?B?bXB1NlBTNTdTR1o5M3RtL2VsRlFKNUFHU25pYjI0YmhrOWZjekRwQ0ZOVTkw?= =?utf-8?B?UVVXdTQvWE9VeGo2eDdHSUZJQ09GcnRiV0Q5bWw2a1dIOW1QNHlvU1BuSTV2?= =?utf-8?B?SW5BdjZDNXBzQ05GTnYyRmwveDBoTTd6TEhjdlc1L1ltRGoxaUhaQ0d2NjRo?= =?utf-8?B?OGw2OGlQcGdWZzBDTXVoTGNqSlQ3ai9PL2pYNmFRSGZTb0pmcHoyTDdSdDNh?= =?utf-8?B?NjZpeGVKL1JCekh5eTk0RnhrdG5TNWlLN0U3TkpJSy9oNUtJUnFMN3h4UDZh?= =?utf-8?B?Ny9KVVpka1NJMCtoTU1laGdXMGFyZStSWENyQmhhVjI2eUlDaGMyVkVIekNy?= =?utf-8?B?ZG9xUVlVbFhrNUpwcTIrM09XVFRVM1RZRmhYQmc5alJ5Vnp3bUdjQjROU1di?= =?utf-8?B?ZDFjVStJVFI4c201elB5SkNUWGV5YVp5QUdWWGo1dVpqbk12Qloxam41WDVp?= =?utf-8?B?ZGpsYnhWT0Q5MEVjT3dpeDZERjJPVUdrejg1aW5WRXpIeFBmRW56dGlmOU4y?= =?utf-8?B?dDFPSkRPakdPRC9NVStmVkdMSXI4S1dYK0IrV04xWDJOaThoSHZ5ay8rc3pw?= =?utf-8?B?Zkh4RWRLYVBDTDBFK3lOQlc2V09iQkRvOVNGYSsyTXQrQXduUDFYWi9DbHAw?= =?utf-8?B?ZXJFOEY3U3dPS0Z6T1FPMWdjY1NDVDczUW9zN0QrTlFWT1lxa0J2N0FUWUc4?= =?utf-8?B?b2JJc1dkeVdoUXVwdnN2MHdDRnVNb3RFSHA5NnVsdm5RN2lHL2VLa2dDYWpV?= =?utf-8?B?SHkydU9WVm1UVVlUWWFQL2Rma1ZWWUZLeFltMlNqcWErcHRNQ2cxTEJpQ3E1?= =?utf-8?B?OU4zWHpJZnBONlZteEV5VlNYOGp4NWFjZVJpeFV6SFN2dzZZZ0E1bVZQSWlo?= =?utf-8?B?bXd2M1Q2aGJhRU9ReHhiemZRWU9lci80MTRnTXZjbHlKV0Y0VGRaZCsydkNJ?= =?utf-8?B?L21iR2VBL2Iyb2FuWFEzaHBYODlIL0hTK2toQ3M3c04xOEFtYVc2c2RXUFZz?= =?utf-8?B?aENTUDR2OUVubCt4T0dLUnVoRXVEa2FBZ1FQSmFXajc0c0Y5Z3BBQ1JTY0pG?= =?utf-8?B?aEFjeVZhMTZXRTFnT0tHR3VkRVI2b3EzRi9iQi9WMXBoWUlLbHMzWElPcENI?= =?utf-8?B?WStiS0JWV0VpanNObXlKaFJaVTIxYlNRdk8zalZaWlhlVGxYdmlxSEJTb1BX?= =?utf-8?B?NXJRUGdpRnB1WEN5Z1ZsdEw0ZSs0ZTlPT3BMNm5kQmRNekVNa3UwZXdQQVpI?= =?utf-8?B?ei9QSm9NdVBzOEdvVUh2UU1JeFJRVlQ3ZDRUNkRONlJJVXNDMEhJdVRVSExQ?= =?utf-8?B?cDA1VnJvbXk2OEZzUy9raVlGY3hacHFwbkdZMzBPMUFobFp6d3IyYm42Vk1h?= =?utf-8?B?SThJa2tzb3lFVWpYU25yQ0Y2N093cGR2VFQyZW1ab3JDVEVycHVGQnVKVmJw?= =?utf-8?B?dnJKcXhXeGVLaTdyaVo0RnpuNTg4eS9mTThSUkVhZ0t2UVdxYVhwRkRRWW9B?= =?utf-8?Q?c6+6ujCnn6I9Cs3DGJKd/WlUT?= X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1142;6:MVEPfFXttnHahZeISRVl0FMj19bhbs3KM573sJKfppbxzqxNvCvpLX5OWhwMLBreZHWpMwm21amLoNFAFdgdgoSg99xdG45gyA2ovVI05bXdKZu1P64V8HfRRJOXMxaX+YVqOK2WOkRojqyXoZ01c2gKhky82HBvxKyTNQWedIGzDXgZPXd3fDuuI1c17sZPkvrUVOV1OuQ/NjkCCIrxS3KP3p9ZAyzyfG6WW/izqKRaALPPigrSg4TeI7rrB+nel8CRycdnBII1FXZ/KMm9iAWwtATxSlDTzN9igCEu2DcNFTqWtSbhK1temwMicqUsiu+n29Oe7Me14a3U2r6AMaCrMD3PbMDg7MMTv4JK9bs=;5:PZ9Y4Z+ij2qut4Lk7rP3x4nQnm3WkEXzQXvsXymPZy1U2pgAIcSADLOQ9JOGZMHJwu6jHQasKzAU9Kda88YbSAz3Zi/xEffaWzI9PoZZhijr4Ma9NGY3AJP4Wid6Sgf0yLOS7D9kelAJT0uti+5Ucr4YPWlRG04Ih6/St6Rc/S4=;24:AQJyTJjHmDicSkdKBRHkyHSWd1ccCGk2jkMeEjAhYFiHYbdlVJcnq7zqaT377K+JuZ3y3XSWF625gNfNr3/0sT5fSD4cfTvxozeiMSoD7p0=;7:Ccu0Gzx/1Z+9U4SnXKMxnjlcZii6idzl26WiBbQR5osGh1X9fNQqMNpw1z2sr8ol9Wi3EOFaNJp+LiuVd1fmt7UBBewvzg7Qb+x8OSbfMfl20RnOOGRvcqaR03VtSN+jCAgEWnJ0ULqmnPnfFE9JDgbCpWHQVLk+YM4IPJsZFjzlPtEmMwKfSUTMp5ylZWMBysWssqPhrTX+dbQWpDVWn5xGzp4e+mmdTBzdpV7YF3sRLcuxx5j2iD3eqpA/XReC SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1142;20:tyHwNkxiaDvb3sNOj5gQhPPak7SYnfLh4H6rXGxbgwtwt8JtBsP34f63ZqxWxNGN+wrFbDle09HM9zicZuW8wlDGdA2ddk30LzhrH+EAuIK6YYldqD2Xqqd9HkgVOV+hzfEip6v7KlJhfv5PpEMPtdhlbMsngxOcHtCOJUDkefG0M+pMb/WigixDlAk5l/oOAHsUaoD8v8PZIMCljqUDSo1PD+66PUitwpE4XSHdII7jPxduV90jNQVgk9rL/CvU X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jan 2018 14:02:43.0221 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ffe05084-90bd-4a6b-d928-08d559c52717 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1142 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: On 1/12/2018 4:28 AM, David Woodhouse wrote: > On Thu, 2018-01-11 at 17:58 -0600, Tom Lendacky wrote: >> >>> + * These are the bare retpoline primitives for indirect jmp and call. >>> + * Do not use these directly; they only exist to make the ALTERNATIVE >>> + * invocation below less ugly. >>> + */ >>> +.macro RETPOLINE_JMP reg:req >>> +     call    .Ldo_rop_\@ >>> +.Lspec_trap_\@: >>> +     pause > > Note that we never use that one on AMD. You just get 'lfence; jmp *reg' > instead because you promised us that would work.... while Intel said it > would work for a month or two and then said "er, oops, no it doesn't in > all cases." — so we're half-waiting for you lot to do the same thing :) In theory we never get that one on AMD. But because of the case where we could be running under a hypervisor and might not be able to verify that lfence was made serializing, we would fall back to the generic retpoline. > > You *do* get the RSB-stuffing one though, which is the same. So... Right. > >> Talked with our engineers some more on using pause vs. lfence.  Pause is >> not serializing on AMD, so the pause/jmp loop will use power as it is >> speculated over waiting for return to mispredict to the correct target. >> Can this be changed back to lfence?  It looked like a very small >> difference in cycles/time. > > That seems reasonable, although at this stage I'm also tempted to > suggest we can do that kind of fine-tuning in a followup patch. Like > the bikeshedding about numbers vs. readable labels. We really need the > IBRS and IBPB patches to be landing on top of this as soon as possible. Yup, I understand. Thanks, Tom > > Paul, the lfence→pause change was only a tiny micro-optimisation on > Intel, wasn't it? Are you happy with changing the implementations of > the RSB stuffing code to use lfence again (or what about 'hlt')? > > It currently looks like this... the capture loop is using 'jmp' to > match the retpoline instead of 'call' as in your examples: > > > #define __FILL_RETURN_BUFFER(reg, nr, sp, uniq) \ > mov $(nr/2), reg; \ > .Ldo_call1_ ## uniq: \ > call .Ldo_call2_ ## uniq; \ > .Ltrap1_ ## uniq: \ > pause; \ > jmp .Ltrap1_ ## uniq; \ > .Ldo_call2_ ## uniq: \ > call .Ldo_loop_ ## uniq; \ > .Ltrap2_ ## uniq: \ > pause; \ > jmp .Ltrap2_ ## uniq; \ > .Ldo_loop_ ## uniq: \ > dec reg; \ > jnz .Ldo_call1_ ## uniq; \ > add $(BITS_PER_LONG/8) * nr, sp; >