Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp2634888ybh; Mon, 16 Mar 2020 06:58:04 -0700 (PDT) X-Google-Smtp-Source: ADFU+vtjsLIuTQ1JJut4BOxLVAhwKdj+8ZHXWyaxwSWLqthNs8yXfovubtXqIa+sZLjjfQr4TyUL X-Received: by 2002:a9d:7a47:: with SMTP id z7mr23815673otm.341.1584367084090; Mon, 16 Mar 2020 06:58:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1584367084; cv=none; d=google.com; s=arc-20160816; b=elCp9eOiEIh2AgVN7l3+rCG7cU4MY4Oti7VBZBHjfFPBJgILWPdHjxlTOlDy79M1AS avvTVMqtP9M4IwD6ifsK5Yf5df5b8B2f7yhr7ge5Fhw71nGMN7nPJJZAHP6TvXipqxOZ 84K8HZwGLFJ137dfOHuuQ+tWl3MaKOwtmgUfcxQWkESQ2bzQQWHsDsWDIFUClcM6X8WD pgoTW0c5LdrQV/xzet5xYXNCE95MGDyso2k+CFSIA5wt3MZiLUez8JVWgMfTqqL3XzV+ UMsnoZprnAxkAPVlDnWBuIJYL+uzWwY84ti+T1iKB5GXe8er4zTTmIWEN/DiJAplNUeL xQIg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:organization:references:in-reply-to:date:cc:to:from :subject:message-id:ironport-sdr:ironport-sdr; bh=XTUWIag/A5hm2sJT+XmQw7L9JEgoFoXL3lYVrvuVjP4=; b=IdLtUdQqfmT30pvB57MxkOyh8wwj+wnEV/L7i8tkl4qrDOlqhkyiedl/BOYPrtgr9j 41xiCn46Zd5H/LNVsNLRpM3oW+cIphtTBWRT7i3TA7IOdJlLwz80XSsASgoTcnAPCTDD ZsGI8E3oaWjLgUXEO5J4dcrKnrZRrhf//QfZmQPkQA96V2waTPxg398XZnLTHAosJWw+ eJGUo3+ER9gHapCr/QJMYfqtmiXvaLCwGEmaVa8wYnRPvUwvnSwrexJ3Xturen9JwwzU 1KEWgm2ZCmsMZ+UHQ7/NVVoqedVruhnAmzNPPn5uCuZKzf2chpRXYXGkDbpHLSW68kYs O9qA== ARC-Authentication-Results: i=1; mx.google.com; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e18si31879oie.189.2020.03.16.06.57.50; Mon, 16 Mar 2020 06:58:04 -0700 (PDT) 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; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731413AbgCPN4r (ORCPT + 99 others); Mon, 16 Mar 2020 09:56:47 -0400 Received: from mga06.intel.com ([134.134.136.31]:4449 "EHLO mga06.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731110AbgCPN4r (ORCPT ); Mon, 16 Mar 2020 09:56:47 -0400 IronPort-SDR: X3aBeBnVSKtzArek4ILMPFhHlM2wm6lzGJGa4wjiFnxxeu7nW5nnQrxmw9dHkiwjSA29eaPlAn GjnGvm4LRFCQ== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Mar 2020 06:56:46 -0700 IronPort-SDR: /SUHAXr9ZbR3tCMwpyjXlQOI9q2Src6Jid+g9z5mmueuqmBQgyXAsG0Xkqdmizj0DuQTtuc0XH oahoNkjdbz7A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,560,1574150400"; d="scan'208";a="443347986" Received: from zidelson-mobl1.ger.corp.intel.com ([10.251.163.156]) by fmsmga005.fm.intel.com with ESMTP; 16 Mar 2020 06:56:32 -0700 Message-ID: <94ce05323c4de721c4a6347223885f2ad9f541af.camel@linux.intel.com> Subject: Re: [PATCH v28 21/22] x86/vdso: Implement a vDSO for Intel SGX enclave call From: Jarkko Sakkinen To: Nathaniel McCallum Cc: linux-kernel@vger.kernel.org, x86@kernel.org, linux-sgx@vger.kernel.org, akpm@linux-foundation.org, dave.hansen@intel.com, "Christopherson, Sean J" , Neil Horman , "Huang, Haitao" , andriy.shevchenko@linux.intel.com, tglx@linutronix.de, "Svahn, Kai" , bp@alien8.de, Josh Triplett , luto@kernel.org, kai.huang@intel.com, David Rientjes , cedric.xing@intel.com, Patrick Uiterwijk , Andy Lutomirski , Jethro Beekman , Connor Kuehl , Harald Hoyer , Lily Sturmann Date: Mon, 16 Mar 2020 15:56:30 +0200 In-Reply-To: References: <20200303233609.713348-1-jarkko.sakkinen@linux.intel.com> <20200303233609.713348-22-jarkko.sakkinen@linux.intel.com> <20200315012523.GC208715@linux.intel.com> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.35.92-1 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, 2020-03-15 at 13:53 -0400, Nathaniel McCallum wrote: > On Sat, Mar 14, 2020 at 9:25 PM Jarkko Sakkinen > wrote: > > On Wed, Mar 11, 2020 at 01:30:07PM -0400, Nathaniel McCallum wrote: > > > Currently, the selftest has a wrapper around > > > __vdso_sgx_enter_enclave() which preserves all x86-64 ABI callee-saved > > > registers (CSRs), though it uses none of them. Then it calls this > > > function which uses %rbx but preserves none of the CSRs. Then it jumps > > > into an enclave which zeroes all these registers before returning. > > > Thus: > > > > > > 1. wrapper saves all CSRs > > > 2. wrapper repositions stack arguments > > > 3. __vdso_sgx_enter_enclave() modifies, but does not save %rbx > > > 4. selftest zeros all CSRs > > > 5. wrapper loads all CSRs > > > > > > I'd like to propose instead that the enclave be responsible for saving > > > and restoring CSRs. So instead of the above we have: > > > 1. __vdso_sgx_enter_enclave() saves %rbx > > > 2. enclave saves CSRs > > > 3. enclave loads CSRs > > > 4. __vdso_sgx_enter_enclave() loads %rbx > > > > > > I know that lots of other stuff happens during enclave transitions, > > > but at the very least we could reduce the number of instructions > > > through this critical path. > > > > What Jethro said and also that it is a good general principle to cut > > down the semantics of any vdso as minimal as possible. > > > > I.e. even if saving RBX would make somehow sense it *can* be left > > out without loss in terms of what can be done with the vDSO. > > Please read the rest of the thread. Sean and I have hammered out some > sensible and effective changes. Have skimmed through that discussion but it comes down how much you get by obviously degrading some of the robustness. Complexity of the calling pattern is not something that should be emphasized as that is something that is anyway hidden inside the runtime. /Jarkko