RE: [RFC PATCH v3 05/10] x86/sgx: Save the size of each EPC section

Zhang, Cathy
2022-04-06T14:58:11Z

> -----Original Message-----
> From: Jarkko Sakkinen <jarkko@kernel.org>
> Sent: Sunday, April 3, 2022 6:15 PM
> To: Zhang, Cathy <cathy.zhang@intel.com>
> Cc: linux-sgx@vger.kernel.org; x86@kernel.org; Chatre, Reinette
> <reinette.chatre@intel.com>; Hansen, Dave <dave.hansen@intel.com>; Raj,
> Ashok <ashok.raj@intel.com>
> Subject: Re: [RFC PATCH v3 05/10] x86/sgx: Save the size of each EPC section
>
> On Fri, Apr 01, 2022 at 10:24:04PM +0800, Cathy Zhang wrote:
> > For SGX CPUSVN update process will check all EPC pages in each section
> > to ensure they will be marked as unused, it requires to know the size
> > of each EPC section to end the loop.
>
> Why is the size required to end the loop? It's missing.

How about re-write as follows:

SGX CPUSVN update process should check all EPC pages to ensure they
will be marked as unused. For EPC pages are stored in EPC sections,
it's required to save the size of each section, as the indicator for
the end of each section's traversing.

>
> > Signed-off-by: Cathy Zhang <cathy.zhang@intel.com>
> > ---
> > arch/x86/kernel/cpu/sgx/sgx.h | 1 +
> > arch/x86/kernel/cpu/sgx/main.c | 1 +
> > 2 files changed, 2 insertions(+)
> >
> > diff --git a/arch/x86/kernel/cpu/sgx/sgx.h
> > b/arch/x86/kernel/cpu/sgx/sgx.h index 0b036f19cca1..45ba6fcabfda
> > 100644
> > --- a/arch/x86/kernel/cpu/sgx/sgx.h
> > +++ b/arch/x86/kernel/cpu/sgx/sgx.h
> > @@ -63,6 +63,7 @@ struct sgx_epc_section {
> > void *virt_addr;
> > struct sgx_epc_page *pages;
> > struct sgx_numa_node *node;
> > + u64 size;
> > };
> >
> > extern struct sgx_epc_section sgx_epc_sections[SGX_MAX_EPC_SECTIONS];
> > diff --git a/arch/x86/kernel/cpu/sgx/main.c
> > b/arch/x86/kernel/cpu/sgx/main.c index 10360f06c0df..031c1402cd7e
> > 100644
> > --- a/arch/x86/kernel/cpu/sgx/main.c
> > +++ b/arch/x86/kernel/cpu/sgx/main.c
> > @@ -665,6 +665,7 @@ static bool __init sgx_setup_epc_section(u64
> phys_addr, u64 size,
> > }
> >
> > section->phys_addr = phys_addr;
> > + section->size = size;
> > xa_store_range(&sgx_epc_address_space, section->phys_addr,
> > phys_addr + size - 1, section, GFP_KERNEL);
> >
> > --
> > 2.17.1
> >
>
> BR, Jarkko