From: Sean Christopherson <sean.j.christopherson@intel.com>
To: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Cc: linux-sgx@vger.kernel.org,
Shay Katz-zamir <shay.katz-zamir@intel.com>,
Serge Ayoun <serge.ayoun@intel.com>
Subject: Re: [PATCH v3 12/17] x86/sgx: Open code sgx_reclaimer_get() and sgx_reclaimer_put()
Date: Tue, 17 Sep 2019 16:07:40 -0700 [thread overview]
Message-ID: <20190917230740.GE10319@linux.intel.com> (raw)
In-Reply-To: <20190916101803.30726-13-jarkko.sakkinen@linux.intel.com>
On Mon, Sep 16, 2019 at 01:17:58PM +0300, Jarkko Sakkinen wrote:
> Open code sgx_reclaimer_get() and sgx_reclaimer_put(). They are legacy
> from the callback interface. Wrapping a function call inside a function
> does not make sense.
I actually like the functions, IMO they make the loops more readable.
They should be static, and probably static inline, but I doubt either
annotation affects the compiler output.
> Cc: Sean Christopherson <sean.j.christopherson@intel.com>
> Cc: Shay Katz-zamir <shay.katz-zamir@intel.com>
> Cc: Serge Ayoun <serge.ayoun@intel.com>
> Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> ---
> arch/x86/kernel/cpu/sgx/reclaim.c | 47 ++++++++++++-------------------
> 1 file changed, 18 insertions(+), 29 deletions(-)
>
> diff --git a/arch/x86/kernel/cpu/sgx/reclaim.c b/arch/x86/kernel/cpu/sgx/reclaim.c
> index c2a85db68307..5a4d44dd02d7 100644
> --- a/arch/x86/kernel/cpu/sgx/reclaim.c
> +++ b/arch/x86/kernel/cpu/sgx/reclaim.c
> @@ -121,22 +121,6 @@ void sgx_mark_page_reclaimable(struct sgx_epc_page *page)
> spin_unlock(&sgx_active_page_list_lock);
> }
>
> -bool sgx_reclaimer_get(struct sgx_epc_page *epc_page)
> -{
> - struct sgx_encl_page *encl_page = epc_page->owner;
> - struct sgx_encl *encl = encl_page->encl;
> -
> - return kref_get_unless_zero(&encl->refcount) != 0;
> -}
> -
> -void sgx_reclaimer_put(struct sgx_epc_page *epc_page)
> -{
> - struct sgx_encl_page *encl_page = epc_page->owner;
> - struct sgx_encl *encl = encl_page->encl;
> -
> - kref_put(&encl->refcount, sgx_encl_release);
> -}
> -
> static bool sgx_reclaimer_evict(struct sgx_epc_page *epc_page)
> {
> struct sgx_encl_page *page = epc_page->owner;
> @@ -392,6 +376,7 @@ void sgx_reclaim_pages(void)
> {
> struct sgx_epc_page *chunk[SGX_NR_TO_SCAN + 1];
> struct sgx_epc_section *section;
> + struct sgx_encl_page *encl_page;
> struct sgx_epc_page *epc_page;
> int cnt = 0;
> int i;
> @@ -404,8 +389,9 @@ void sgx_reclaim_pages(void)
> epc_page = list_first_entry(&sgx_active_page_list,
> struct sgx_epc_page, list);
> list_del_init(&epc_page->list);
> + encl_page = epc_page->owner;
>
> - if (sgx_reclaimer_get(epc_page))
> + if (kref_get_unless_zero(&encl_page->encl->refcount) != 0)
> chunk[cnt++] = epc_page;
> else
> /* The owner is freeing the page. No need to add the
> @@ -417,10 +403,12 @@ void sgx_reclaim_pages(void)
>
> for (i = 0; i < cnt; i++) {
> epc_page = chunk[i];
> + encl_page = epc_page->owner;
> +
> if (sgx_reclaimer_evict(epc_page))
> continue;
>
> - sgx_reclaimer_put(epc_page);
> + kref_put(&encl_page->encl->refcount, sgx_encl_release);
>
> spin_lock(&sgx_active_page_list_lock);
> list_add_tail(&epc_page->list, &sgx_active_page_list);
> @@ -437,19 +425,20 @@ void sgx_reclaim_pages(void)
>
> for (i = 0; i < cnt; i++) {
> epc_page = chunk[i];
> - if (epc_page) {
> - sgx_reclaimer_write(epc_page);
> - sgx_reclaimer_put(epc_page);
> - epc_page->desc &= ~SGX_EPC_PAGE_RECLAIMABLE;
> + if (!epc_page)
> + continue;
>
> - section = sgx_epc_section(epc_page);
>
> - spin_lock(§ion->lock);
> - list_add_tail(&epc_page->list,
> - §ion->page_list);
> - section->free_cnt++;
> - spin_unlock(§ion->lock);
> - }
> + encl_page = epc_page->owner;
> + sgx_reclaimer_write(epc_page);
> + kref_put(&encl_page->encl->refcount, sgx_encl_release);
> + epc_page->desc &= ~SGX_EPC_PAGE_RECLAIMABLE;
> +
> + section = sgx_epc_section(epc_page);
> + spin_lock(§ion->lock);
> + list_add_tail(&epc_page->list, §ion->page_list);
> + section->free_cnt++;
> + spin_unlock(§ion->lock);
> }
> }
>
> --
> 2.20.1
>
next prev parent reply other threads:[~2019-09-17 23:07 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-16 10:17 [PATCH v3 00/17] Fixes and updates for v23 Jarkko Sakkinen
2019-09-16 10:17 ` [PATCH v3 01/17] selftest/x86/sgx: Remove encl_piggy.h Jarkko Sakkinen
2019-09-16 10:17 ` [PATCH v3 02/17] x86/sgx: Clean up internal includes Jarkko Sakkinen
2019-09-16 10:17 ` [PATCH v3 03/17] x86/sgx: Write backing storage only if EWB is successful Jarkko Sakkinen
2019-09-16 10:17 ` [PATCH v3 04/17] x86/sgx: Rename 'j' as 'cnt' in sgx_reclaim_pages() Jarkko Sakkinen
2019-09-16 10:17 ` [PATCH v3 05/17] x86/sgx: Turn encls_failed() as inline function Jarkko Sakkinen
2019-09-16 10:17 ` [PATCH v3 06/17] x86/sgx: Move sgx_einit() to encls.c Jarkko Sakkinen
2019-09-16 10:17 ` [PATCH v3 07/17] x86/sgx: Remove pages in sgx_reclaimer_write() Jarkko Sakkinen
2019-09-16 10:17 ` [PATCH v3 08/17] x86/sgx: Calculate page index " Jarkko Sakkinen
2019-09-16 10:17 ` [PATCH v3 09/17] x86/sgx: Move SGX_ENCL_DEAD check to sgx_reclaimer_write() Jarkko Sakkinen
2019-09-17 23:13 ` Sean Christopherson
2019-09-18 4:15 ` Jarkko Sakkinen
2019-09-17 23:21 ` Sean Christopherson
2019-09-18 4:16 ` Jarkko Sakkinen
2019-09-16 10:17 ` [PATCH v3 10/17] x86/sgx: Free VA slot when the EWB flow fails Jarkko Sakkinen
2019-09-16 10:17 ` [PATCH v3 11/17] x86/sgx: Call sgx_encl_destroy() " Jarkko Sakkinen
2019-09-16 10:17 ` [PATCH v3 12/17] x86/sgx: Open code sgx_reclaimer_get() and sgx_reclaimer_put() Jarkko Sakkinen
2019-09-17 23:07 ` Sean Christopherson [this message]
2019-09-18 4:12 ` Jarkko Sakkinen
2019-09-20 13:38 ` Jarkko Sakkinen
2019-09-16 10:17 ` [PATCH v3 13/17] x86/sgx: Introduce sgx_can_reclaim() Jarkko Sakkinen
2019-09-17 23:25 ` Sean Christopherson
2019-09-25 18:28 ` Sean Christopherson
2019-09-27 15:33 ` Jarkko Sakkinen
2019-09-16 10:18 ` [PATCH v3 14/17] x86/sgx: Replace section->free_cnt with a global sgx_nr_free_pages Jarkko Sakkinen
2019-09-17 22:50 ` Sean Christopherson
2019-09-18 4:07 ` Jarkko Sakkinen
2019-09-16 10:18 ` [PATCH v3 15/17] x86/sgx: sgx_vma_access(): Do not return -ECANCELED on invalid TCS pages Jarkko Sakkinen
2019-09-16 10:18 ` [PATCH v3 16/17] x86/sgx: Introduce sgx_encl_get_backing() Jarkko Sakkinen
2019-09-17 23:05 ` Sean Christopherson
2019-09-18 4:10 ` Jarkko Sakkinen
2019-09-16 10:18 ` [PATCH v3 17/17] x86/sgx: Fix pages in the BLOCKED state ending up to the free pool Jarkko Sakkinen
2019-09-17 23:34 ` Sean Christopherson
2019-09-18 4:21 ` Jarkko Sakkinen
2019-09-25 0:27 ` Jarkko Sakkinen
2019-09-25 18:33 ` Sean Christopherson
2019-09-27 15:39 ` Jarkko Sakkinen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190917230740.GE10319@linux.intel.com \
--to=sean.j.christopherson@intel.com \
--cc=jarkko.sakkinen@linux.intel.com \
--cc=linux-sgx@vger.kernel.org \
--cc=serge.ayoun@intel.com \
--cc=shay.katz-zamir@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.