Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp140055pxf; Wed, 17 Mar 2021 01:10:14 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx8DJmuQOJvEo3qTqLG+uYNKy1k1Bn2TwAMIDJXhnZ9jVXhJl2n5mwl44jrHvzxUJlMBZvo X-Received: by 2002:aa7:c654:: with SMTP id z20mr29347832edr.377.1615968614070; Wed, 17 Mar 2021 01:10:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1615968614; cv=none; d=google.com; s=arc-20160816; b=IA31vFFlFD7Bz5jZfG/1A8e1M7clCqreg5bm82MFqzIdoUhrCvyRahHKpN91/sGz5a bgH1mcWPeyVwMC3a0HOjiqA5gieheQZks22Xg6PcMTyrcB93rgqR8UZnJrcn0xfJEkqs dsOIh/4+VGT4eaoMfxBmGic4a0p9Bo2bKcNhNOa2+DJyNKiE+Lcv/RY2t/AxJkH9jytf hG0eVS6IDiCJHDn7SWe3tDNXT5v0JpM1ILbW13VNus+BY1ZKIWefa/elO7p4Oo5S4hiR HdiCANo8sETmWv9w7AOjgIkAEFZyESAF6iaszuXez0KJt+mA2h1c6OH4LUxW47U5B2LJ gDRQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :ironport-sdr:ironport-sdr; bh=2WLci0dgo8jiTJaNp6/M3pXUCLfc9tqSd/JfLSJDNyk=; b=kpMYBNB9fgPVlDC4YI8ypTC6YbV0rmsExDqRuFwIZX8U8cgywI9pxTcAwKtFRmQZVI s+8y3WPr2rss3wJdJgU0dmwYkH2j7Ci8lxLIvPENRjV3mYrVBb2rfTkoz0biDD5QItb4 l88s3mMDlA7JCQKY8uVyxrwODTedg67hdA1qETzuMrh6OzYTRzsCo8GX+Hk/H9j91Ljr ATI9C3eOIdEblmL6UFdpRubyzRIMOt+UjR9XNsELcm9bDy8FAEwrvlWjhlt8se1Ev1Y7 6RzdJ5Zug735kEqF7QOxWXliM3cEJ9ahX9C6ITvRHMlZr7C4VGlTXP2K4ShQoemuFPfP uCww== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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. [23.128.96.18]) by mx.google.com with ESMTP id le26si15883320ejc.659.2021.03.17.01.09.51; Wed, 17 Mar 2021 01:10:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S230250AbhCQIGz (ORCPT + 99 others); Wed, 17 Mar 2021 04:06:55 -0400 Received: from mga18.intel.com ([134.134.136.126]:6247 "EHLO mga18.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230484AbhCQIGj (ORCPT ); Wed, 17 Mar 2021 04:06:39 -0400 IronPort-SDR: QAaGQt/bEyk9zKGoHlwOMVJKJF+nyAzKLaUSbeFhLMktT1LG82Q/fJEZV4EnhBoK0ryk84ecQ1 I1kfLLAjZOnA== X-IronPort-AV: E=McAfee;i="6000,8403,9925"; a="177011795" X-IronPort-AV: E=Sophos;i="5.81,255,1610438400"; d="scan'208";a="177011795" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Mar 2021 01:06:38 -0700 IronPort-SDR: AFfPD6e/qJw85vHEsNRJ78zYJsTaOt+Z9hM4Rf3KL45vIq4fGU7sbZGZIFvrZAHQVNrQgo3oN0 WgyGwZF5VBmw== X-IronPort-AV: E=Sophos;i="5.81,255,1610438400"; d="scan'208";a="405841553" Received: from iweiny-desk2.sc.intel.com (HELO localhost) ([10.3.52.147]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Mar 2021 01:06:38 -0700 Date: Wed, 17 Mar 2021 01:06:38 -0700 From: Ira Weiny To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , x86@kernel.org Cc: Sean Christopherson , Jethro Beekman , Jarkko Sakkinen , Dave Hansen , Dave Hansen , linux-sgx@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v5] x86: Remove unnecessary kmap() from sgx_ioc_enclave_init() Message-ID: <20210317080638.GU3014244@iweiny-DESK2.sc.intel.com> References: <20210306002058.303796-1-ira.weiny@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210306002058.303796-1-ira.weiny@intel.com> User-Agent: Mutt/1.11.1 (2018-12-01) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Mar 05, 2021 at 04:20:58PM -0800, 'Ira Weiny' wrote: > From: Ira Weiny > > kmap is inefficient and we are trying to reduce the usage in the kernel. > There is no readily apparent reason why initp_page needs to be allocated > and kmap'ed() but sigstruct needs to be page aligned and token > 512 byte aligned. Friendly ping, maybe I missed a response? Ira > > kmalloc() can give us this alignment but we need to allocate PAGE_SIZE > bytes to do so. Rather than change this kmap() to kmap_local_page() use > kmalloc() instead. > > Remove the alloc_page()/kmap() and replace with kmalloc(PAGE_SIZE, ...) > to get a page aligned kernel address to use. > > In addition add a comment to document the alignment requirements so that > others like myself don't attempt to 'fix' this again. > > Cc: Sean Christopherson > Cc: Jethro Beekman > Reviewed-by: Jarkko Sakkinen > Acked-by: Dave Hansen > Signed-off-by: Ira Weiny > > --- > Changes from v4[4]: > Add Ack and Reviews > Send to the correct maintainers > > Changes from v3[3]: > Remove BUILD_BUG_ONs > > Changes from v2[2]: > When allocating a power of 2 size kmalloc() now guarantees the > alignment of the respective size. So go back to using kmalloc() but > with a PAGE_SIZE allocation to get the alignment. This also follows > the pattern in sgx_ioc_enclave_create() > > Changes from v1[1]: > Use page_address() instead of kcmalloc() to ensure sigstruct is > page aligned > Use BUILD_BUG_ON to ensure token and sigstruct don't collide. > > [1] https://lore.kernel.org/lkml/20210129001459.1538805-1-ira.weiny@intel.com/ > [2] https://lore.kernel.org/lkml/20210202013725.3514671-1-ira.weiny@intel.com/ > [3] https://lore.kernel.org/lkml/20210205050850.GC5033@iweiny-DESK2.sc.intel.com/#t > [4] https://lore.kernel.org/lkml/YCBY02iEKLVyj7Ix@kernel.org/ > > --- > arch/x86/kernel/cpu/sgx/ioctl.c | 13 +++++++------ > 1 file changed, 7 insertions(+), 6 deletions(-) > > diff --git a/arch/x86/kernel/cpu/sgx/ioctl.c b/arch/x86/kernel/cpu/sgx/ioctl.c > index 90a5caf76939..38e540de5e2a 100644 > --- a/arch/x86/kernel/cpu/sgx/ioctl.c > +++ b/arch/x86/kernel/cpu/sgx/ioctl.c > @@ -604,7 +604,6 @@ static long sgx_ioc_enclave_init(struct sgx_encl *encl, void __user *arg) > { > struct sgx_sigstruct *sigstruct; > struct sgx_enclave_init init_arg; > - struct page *initp_page; > void *token; > int ret; > > @@ -615,11 +614,14 @@ static long sgx_ioc_enclave_init(struct sgx_encl *encl, void __user *arg) > if (copy_from_user(&init_arg, arg, sizeof(init_arg))) > return -EFAULT; > > - initp_page = alloc_page(GFP_KERNEL); > - if (!initp_page) > + /* > + * sigstruct must be on a page boundry and token on a 512 byte boundry > + * kmalloc() gives us this alignment when allocating PAGE_SIZE bytes > + */ > + sigstruct = kmalloc(PAGE_SIZE, GFP_KERNEL); > + if (!sigstruct) > return -ENOMEM; > > - sigstruct = kmap(initp_page); > token = (void *)((unsigned long)sigstruct + PAGE_SIZE / 2); > memset(token, 0, SGX_LAUNCH_TOKEN_SIZE); > > @@ -645,8 +647,7 @@ static long sgx_ioc_enclave_init(struct sgx_encl *encl, void __user *arg) > ret = sgx_encl_init(encl, sigstruct, token); > > out: > - kunmap(initp_page); > - __free_page(initp_page); > + kfree(sigstruct); > return ret; > } > > -- > 2.28.0.rc0.12.gb6a658bd00c9 >