diff mbox series

x86/sgx: Improve comments for sgx_encl_lookup/alloc_backing()

Message ID 20220720182120.1160956-1-kristen@linux.intel.com (mailing list archive)
State New, archived
Headers show
Series x86/sgx: Improve comments for sgx_encl_lookup/alloc_backing() | expand

Commit Message

Kristen Carlson Accardi July 20, 2022, 6:21 p.m. UTC
Modify the comments for sgx_encl_lookup_backing() and for
sgx_encl_alloc_backing() to indicate that they take a reference
which must be dropped with a call to sgx_encl_put_backing().
Make sgx_encl_lookup_backing() static for now, and change the
name of sgx_encl_get_backing() to __sgx_encl_get_backing() to
make it more clear that sgx_encl_get_backing() is an internal
function.

Signed-off-by: Kristen Carlson Accardi <kristen@linux.intel.com>
---
 arch/x86/kernel/cpu/sgx/encl.c | 21 ++++++++++++++-------
 arch/x86/kernel/cpu/sgx/encl.h |  2 --
 2 files changed, 14 insertions(+), 9 deletions(-)

Comments

Jarkko Sakkinen July 28, 2022, 7:58 a.m. UTC | #1
On Wed, Jul 20, 2022 at 11:21:19AM -0700, Kristen Carlson Accardi wrote:
> Modify the comments for sgx_encl_lookup_backing() and for
> sgx_encl_alloc_backing() to indicate that they take a reference
> which must be dropped with a call to sgx_encl_put_backing().
> Make sgx_encl_lookup_backing() static for now, and change the
> name of sgx_encl_get_backing() to __sgx_encl_get_backing() to
> make it more clear that sgx_encl_get_backing() is an internal
> function.
> 
> Signed-off-by: Kristen Carlson Accardi <kristen@linux.intel.com>

The rename is unnecessary.

> ---
>  arch/x86/kernel/cpu/sgx/encl.c | 21 ++++++++++++++-------
>  arch/x86/kernel/cpu/sgx/encl.h |  2 --
>  2 files changed, 14 insertions(+), 9 deletions(-)
> 
> diff --git a/arch/x86/kernel/cpu/sgx/encl.c b/arch/x86/kernel/cpu/sgx/encl.c
> index 19876ebfb504..325c2d59e6b4 100644
> --- a/arch/x86/kernel/cpu/sgx/encl.c
> +++ b/arch/x86/kernel/cpu/sgx/encl.c
> @@ -12,6 +12,9 @@
>  #include "encls.h"
>  #include "sgx.h"
>  
> +static int sgx_encl_lookup_backing(struct sgx_encl *encl, unsigned long page_index,
> +			    struct sgx_backing *backing);
> +
>  #define PCMDS_PER_PAGE (PAGE_SIZE / sizeof(struct sgx_pcmd))
>  /*
>   * 32 PCMD entries share a PCMD page. PCMD_FIRST_MASK is used to
> @@ -706,7 +709,7 @@ static struct page *sgx_encl_get_backing_page(struct sgx_encl *encl,
>  }
>  
>  /**
> - * sgx_encl_get_backing() - Pin the backing storage
> + * __sgx_encl_get_backing() - Pin the backing storage
>   * @encl:	an enclave pointer
>   * @page_index:	enclave page index
>   * @backing:	data for accessing backing storage for the page
> @@ -718,7 +721,7 @@ static struct page *sgx_encl_get_backing_page(struct sgx_encl *encl,
>   *   0 on success,
>   *   -errno otherwise.
>   */
> -static int sgx_encl_get_backing(struct sgx_encl *encl, unsigned long page_index,
> +static int __sgx_encl_get_backing(struct sgx_encl *encl, unsigned long page_index,
>  			 struct sgx_backing *backing)
>  {
>  	pgoff_t page_pcmd_off = sgx_encl_get_backing_page_pcmd_offset(encl, page_index);
> @@ -794,7 +797,7 @@ static struct mem_cgroup *sgx_encl_get_mem_cgroup(struct sgx_encl *encl)
>  }
>  
>  /**
> - * sgx_encl_alloc_backing() - allocate a new backing storage page
> + * sgx_encl_alloc_backing() - create a new backing storage page
>   * @encl:	an enclave pointer
>   * @page_index:	enclave page index
>   * @backing:	data for accessing backing storage for the page
> @@ -802,7 +805,9 @@ static struct mem_cgroup *sgx_encl_get_mem_cgroup(struct sgx_encl *encl)
>   * When called from ksgxd, sets the active memcg from one of the
>   * mms in the enclave's mm_list prior to any backing page allocation,
>   * in order to ensure that shmem page allocations are charged to the
> - * enclave.
> + * enclave.  Create a backing page for loading data back into an EPC page with
> + * ELDU.  This function takes a reference on a new backing page which
> + * must be dropped with a corresponding call to sgx_encl_put_backing().
>   *
>   * Return:
>   *   0 on success,
> @@ -815,7 +820,7 @@ int sgx_encl_alloc_backing(struct sgx_encl *encl, unsigned long page_index,
>  	struct mem_cgroup *memcg = set_active_memcg(encl_memcg);
>  	int ret;
>  
> -	ret = sgx_encl_get_backing(encl, page_index, backing);
> +	ret = __sgx_encl_get_backing(encl, page_index, backing);
>  
>  	set_active_memcg(memcg);
>  	mem_cgroup_put(encl_memcg);
> @@ -833,15 +838,17 @@ int sgx_encl_alloc_backing(struct sgx_encl *encl, unsigned long page_index,
>   * It is the caller's responsibility to ensure that it is appropriate to use
>   * sgx_encl_lookup_backing() rather than sgx_encl_alloc_backing(). If lookup is
>   * not used correctly, this will cause an allocation which is not accounted for.
> + * This function takes a reference on an existing backing page which must be
> + * dropped with a corresponding call to sgx_encl_put_backing().
>   *
>   * Return:
>   *   0 on success,
>   *   -errno otherwise.
>   */
> -int sgx_encl_lookup_backing(struct sgx_encl *encl, unsigned long page_index,
> +static int sgx_encl_lookup_backing(struct sgx_encl *encl, unsigned long page_index,
>  			   struct sgx_backing *backing)
>  {
> -	return sgx_encl_get_backing(encl, page_index, backing);
> +	return __sgx_encl_get_backing(encl, page_index, backing);
>  }
>  
>  /**
> diff --git a/arch/x86/kernel/cpu/sgx/encl.h b/arch/x86/kernel/cpu/sgx/encl.h
> index 332ef3568267..d731ef53f815 100644
> --- a/arch/x86/kernel/cpu/sgx/encl.h
> +++ b/arch/x86/kernel/cpu/sgx/encl.h
> @@ -106,8 +106,6 @@ int sgx_encl_may_map(struct sgx_encl *encl, unsigned long start,
>  bool current_is_ksgxd(void);
>  void sgx_encl_release(struct kref *ref);
>  int sgx_encl_mm_add(struct sgx_encl *encl, struct mm_struct *mm);
> -int sgx_encl_lookup_backing(struct sgx_encl *encl, unsigned long page_index,
> -			    struct sgx_backing *backing);
>  int sgx_encl_alloc_backing(struct sgx_encl *encl, unsigned long page_index,
>  			   struct sgx_backing *backing);
>  void sgx_encl_put_backing(struct sgx_backing *backing);
> -- 
> 2.36.1
> 

BR, JArkko
Dave Hansen July 28, 2022, 1:47 p.m. UTC | #2
On 7/28/22 00:58, Jarkko Sakkinen wrote:
> On Wed, Jul 20, 2022 at 11:21:19AM -0700, Kristen Carlson Accardi wrote:
>> Modify the comments for sgx_encl_lookup_backing() and for
>> sgx_encl_alloc_backing() to indicate that they take a reference
>> which must be dropped with a call to sgx_encl_put_backing().
>> Make sgx_encl_lookup_backing() static for now, and change the
>> name of sgx_encl_get_backing() to __sgx_encl_get_backing() to
>> make it more clear that sgx_encl_get_backing() is an internal
>> function.
>>
>> Signed-off-by: Kristen Carlson Accardi <kristen@linux.intel.com>
> The rename is unnecessary.

Well, it was done to address some reviewer confusion:

	https://lore.kernel.org/all/YtUs3MKLzFg+rqEV@zn.tnic/

I wouldn't call it unnecessary.  Heck, I'd argue that the one of the
main reasons that this code leaked memory in the first place was the
naming and lack of comments.
Jarkko Sakkinen Aug. 1, 2022, 4:40 p.m. UTC | #3
On Thu, Jul 28, 2022 at 06:47:01AM -0700, Dave Hansen wrote:
> On 7/28/22 00:58, Jarkko Sakkinen wrote:
> > On Wed, Jul 20, 2022 at 11:21:19AM -0700, Kristen Carlson Accardi wrote:
> >> Modify the comments for sgx_encl_lookup_backing() and for
> >> sgx_encl_alloc_backing() to indicate that they take a reference
> >> which must be dropped with a call to sgx_encl_put_backing().
> >> Make sgx_encl_lookup_backing() static for now, and change the
> >> name of sgx_encl_get_backing() to __sgx_encl_get_backing() to
> >> make it more clear that sgx_encl_get_backing() is an internal
> >> function.
> >>
> >> Signed-off-by: Kristen Carlson Accardi <kristen@linux.intel.com>
> > The rename is unnecessary.
> 
> Well, it was done to address some reviewer confusion:
> 
> 	https://lore.kernel.org/all/YtUs3MKLzFg+rqEV@zn.tnic/
> 
> I wouldn't call it unnecessary.  Heck, I'd argue that the one of the
> main reasons that this code leaked memory in the first place was the
> naming and lack of comments.

Maybe the rename should be its own patch with this tag in the commit:

Link: https://lore.kernel.org/all/YtUs3MKLzFg+rqEV@zn.tnic/

BR, Jarkko
Jarkko Sakkinen Aug. 1, 2022, 4:41 p.m. UTC | #4
On Mon, Aug 01, 2022 at 07:40:42PM +0300, Jarkko Sakkinen wrote:
> On Thu, Jul 28, 2022 at 06:47:01AM -0700, Dave Hansen wrote:
> > On 7/28/22 00:58, Jarkko Sakkinen wrote:
> > > On Wed, Jul 20, 2022 at 11:21:19AM -0700, Kristen Carlson Accardi wrote:
> > >> Modify the comments for sgx_encl_lookup_backing() and for
> > >> sgx_encl_alloc_backing() to indicate that they take a reference
> > >> which must be dropped with a call to sgx_encl_put_backing().
> > >> Make sgx_encl_lookup_backing() static for now, and change the
> > >> name of sgx_encl_get_backing() to __sgx_encl_get_backing() to
> > >> make it more clear that sgx_encl_get_backing() is an internal
> > >> function.
> > >>
> > >> Signed-off-by: Kristen Carlson Accardi <kristen@linux.intel.com>
> > > The rename is unnecessary.
> > 
> > Well, it was done to address some reviewer confusion:
> > 
> > 	https://lore.kernel.org/all/YtUs3MKLzFg+rqEV@zn.tnic/
> > 
> > I wouldn't call it unnecessary.  Heck, I'd argue that the one of the
> > main reasons that this code leaked memory in the first place was the
> > naming and lack of comments.
> 
> Maybe the rename should be its own patch with this tag in the commit:
> 
> Link: https://lore.kernel.org/all/YtUs3MKLzFg+rqEV@zn.tnic/

Actually, just adding this to the current patch would be fine
(no need to split necessariy).

BR, Jarkko
diff mbox series

Patch

diff --git a/arch/x86/kernel/cpu/sgx/encl.c b/arch/x86/kernel/cpu/sgx/encl.c
index 19876ebfb504..325c2d59e6b4 100644
--- a/arch/x86/kernel/cpu/sgx/encl.c
+++ b/arch/x86/kernel/cpu/sgx/encl.c
@@ -12,6 +12,9 @@ 
 #include "encls.h"
 #include "sgx.h"
 
+static int sgx_encl_lookup_backing(struct sgx_encl *encl, unsigned long page_index,
+			    struct sgx_backing *backing);
+
 #define PCMDS_PER_PAGE (PAGE_SIZE / sizeof(struct sgx_pcmd))
 /*
  * 32 PCMD entries share a PCMD page. PCMD_FIRST_MASK is used to
@@ -706,7 +709,7 @@  static struct page *sgx_encl_get_backing_page(struct sgx_encl *encl,
 }
 
 /**
- * sgx_encl_get_backing() - Pin the backing storage
+ * __sgx_encl_get_backing() - Pin the backing storage
  * @encl:	an enclave pointer
  * @page_index:	enclave page index
  * @backing:	data for accessing backing storage for the page
@@ -718,7 +721,7 @@  static struct page *sgx_encl_get_backing_page(struct sgx_encl *encl,
  *   0 on success,
  *   -errno otherwise.
  */
-static int sgx_encl_get_backing(struct sgx_encl *encl, unsigned long page_index,
+static int __sgx_encl_get_backing(struct sgx_encl *encl, unsigned long page_index,
 			 struct sgx_backing *backing)
 {
 	pgoff_t page_pcmd_off = sgx_encl_get_backing_page_pcmd_offset(encl, page_index);
@@ -794,7 +797,7 @@  static struct mem_cgroup *sgx_encl_get_mem_cgroup(struct sgx_encl *encl)
 }
 
 /**
- * sgx_encl_alloc_backing() - allocate a new backing storage page
+ * sgx_encl_alloc_backing() - create a new backing storage page
  * @encl:	an enclave pointer
  * @page_index:	enclave page index
  * @backing:	data for accessing backing storage for the page
@@ -802,7 +805,9 @@  static struct mem_cgroup *sgx_encl_get_mem_cgroup(struct sgx_encl *encl)
  * When called from ksgxd, sets the active memcg from one of the
  * mms in the enclave's mm_list prior to any backing page allocation,
  * in order to ensure that shmem page allocations are charged to the
- * enclave.
+ * enclave.  Create a backing page for loading data back into an EPC page with
+ * ELDU.  This function takes a reference on a new backing page which
+ * must be dropped with a corresponding call to sgx_encl_put_backing().
  *
  * Return:
  *   0 on success,
@@ -815,7 +820,7 @@  int sgx_encl_alloc_backing(struct sgx_encl *encl, unsigned long page_index,
 	struct mem_cgroup *memcg = set_active_memcg(encl_memcg);
 	int ret;
 
-	ret = sgx_encl_get_backing(encl, page_index, backing);
+	ret = __sgx_encl_get_backing(encl, page_index, backing);
 
 	set_active_memcg(memcg);
 	mem_cgroup_put(encl_memcg);
@@ -833,15 +838,17 @@  int sgx_encl_alloc_backing(struct sgx_encl *encl, unsigned long page_index,
  * It is the caller's responsibility to ensure that it is appropriate to use
  * sgx_encl_lookup_backing() rather than sgx_encl_alloc_backing(). If lookup is
  * not used correctly, this will cause an allocation which is not accounted for.
+ * This function takes a reference on an existing backing page which must be
+ * dropped with a corresponding call to sgx_encl_put_backing().
  *
  * Return:
  *   0 on success,
  *   -errno otherwise.
  */
-int sgx_encl_lookup_backing(struct sgx_encl *encl, unsigned long page_index,
+static int sgx_encl_lookup_backing(struct sgx_encl *encl, unsigned long page_index,
 			   struct sgx_backing *backing)
 {
-	return sgx_encl_get_backing(encl, page_index, backing);
+	return __sgx_encl_get_backing(encl, page_index, backing);
 }
 
 /**
diff --git a/arch/x86/kernel/cpu/sgx/encl.h b/arch/x86/kernel/cpu/sgx/encl.h
index 332ef3568267..d731ef53f815 100644
--- a/arch/x86/kernel/cpu/sgx/encl.h
+++ b/arch/x86/kernel/cpu/sgx/encl.h
@@ -106,8 +106,6 @@  int sgx_encl_may_map(struct sgx_encl *encl, unsigned long start,
 bool current_is_ksgxd(void);
 void sgx_encl_release(struct kref *ref);
 int sgx_encl_mm_add(struct sgx_encl *encl, struct mm_struct *mm);
-int sgx_encl_lookup_backing(struct sgx_encl *encl, unsigned long page_index,
-			    struct sgx_backing *backing);
 int sgx_encl_alloc_backing(struct sgx_encl *encl, unsigned long page_index,
 			   struct sgx_backing *backing);
 void sgx_encl_put_backing(struct sgx_backing *backing);