diff mbox series

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

Message ID 20220401142409.26215-6-cathy.zhang@intel.com (mailing list archive)
State New, archived
Headers show
Series Support microcode updates affecting SGX | expand

Commit Message

Zhang, Cathy April 1, 2022, 2:24 p.m. UTC
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.

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(+)

Comments

Jarkko Sakkinen April 3, 2022, 10:14 a.m. UTC | #1
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.

> 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
Zhang, Cathy April 6, 2022, 4 a.m. UTC | #2
> -----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
Jarkko Sakkinen April 6, 2022, 6:34 a.m. UTC | #3
On Wed, 2022-04-06 at 04:00 +0000, Zhang, Cathy wrote:
> 
> 
> > -----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.

Sounds good to me.

BR, Jarkko
diff mbox series

Patch

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);