Message ID | 20230712230202.47929-4-haitao.huang@linux.intel.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1470829vqm; Wed, 12 Jul 2023 16:12:31 -0700 (PDT) X-Google-Smtp-Source: APBJJlFdK5Vb3VvpF61WSQv5dj4nKvWJW13VKcZvE4hDRa2A8oRZ7rr08COIapMDT+gHXHQqIwTb X-Received: by 2002:a05:6808:2388:b0:3a4:1c0b:85d0 with SMTP id bp8-20020a056808238800b003a41c0b85d0mr6636477oib.55.1689203550854; Wed, 12 Jul 2023 16:12:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689203550; cv=none; d=google.com; s=arc-20160816; b=nju4zjZnINytzabNUxRE1Mi68VqXA11cmAW1r5LYaW1zVnmIt6tPtubuShXu6/HiBm 5e5y0K+qhqIFJ0NQb5p5FYoN4sECgf6CJmAcj1fHNEOZJD2RCSb2nxcE667EBV+fybA0 /m+4qOfu6nV2NDwnZDrzRHunX4IMDKc/8rfo3Ky4eK83XmP/Ottxl/qQVdAE69HlzRzj 5XI4mGLPmfmi9fBouhaumgObs+qA43TLroFRd9Euip7ipdzqPY03t3+K4WIgy7mK0fO0 Kw+LltEy/gVmqKnPRA/8qXdyD0+PwnTFYJ368gAg9sIR8uuI4HpwQXcJyjYwTcaNQPQP swCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=r3IiiiWagHJsOQ3M/VksCyE3D/NVlKL04GAltjpmPH8=; fh=sp9Fy9uDTUYbTQiOiWOfY01qY8ktdO/xQ5V81goPrjk=; b=jf09JdGNFPe9Vatx2JVkX4afHT0LBdYFrQ7t5KV1w06rSH9v6I/zK4rMMC9o+2z7Y7 I2/m6HSSCCbF3c2pEnwz02+14WNj3gUdPT8TAXWWxaDnYH+V3KXtg9RxRRi1/mPeXohi r4KKEcghYx53LeaIVYuAKc0aKO6ugBV+N8VB7mNvO7AIdCcys7HWTdp19VukQO7Sqwqu Cm2RgtDwy5HXtmB6ue8WSPy444VPcO9gb7YUq06js3NF8ZN+eSqPfc+9sdsJsn4TWGQv KzmtCQwlsqhCzueF8qayyWobgOe/a0przMOSAH/AmKUkwem6JeiOeu16rwp5kes300D9 FkOQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=DBICTo6I; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 10-20020a63124a000000b0053f163363c0si3500550pgs.95.2023.07.12.16.12.17; Wed, 12 Jul 2023 16:12:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=DBICTo6I; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232841AbjGLXCX (ORCPT <rfc822;ybw1215001957@gmail.com> + 99 others); Wed, 12 Jul 2023 19:02:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50464 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231461AbjGLXCI (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Wed, 12 Jul 2023 19:02:08 -0400 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D7B5819B; Wed, 12 Jul 2023 16:02:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689202926; x=1720738926; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=I7lZHiacZcvp7bKbGNbGwMPQS1s/EpOcXyFib1sY4o0=; b=DBICTo6IJ+C9g9UaUIyGtYk2G28gm5YT97MVsWZBkSh5HM+Mq1DyHFFx DCQD+ctJvrT3vP60cd+NZVNIDjMRgtwporF8egGsrYk/VGm1hLSScNMrQ rkh1peCMmUwwYKwjMKnZxY9ElA8yvBjlSBjwOw/dHbiyebdrfhyGCKHwL Ai3NkXdoIwvWMDr6c8W+VvNtpcxZymLm7UoCYrAbT+kLLNr0zASfgN3oR 0qhmqB5UqdXuEd4JQY7MM/TLPm6zsdJtSb+dWyfWnNal3NHmE7jjGUdmc bRjTvGALwCHzzVXxhPCzF64uVB5YDmOcMVAZ248dEysnGfR96eCbkj5j8 w==; X-IronPort-AV: E=McAfee;i="6600,9927,10769"; a="428773872" X-IronPort-AV: E=Sophos;i="6.01,200,1684825200"; d="scan'208";a="428773872" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jul 2023 16:02:05 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10769"; a="835338589" X-IronPort-AV: E=Sophos;i="6.01,200,1684825200"; d="scan'208";a="835338589" Received: from b4969161e530.jf.intel.com ([10.165.56.46]) by fmsmga002.fm.intel.com with ESMTP; 12 Jul 2023 16:02:04 -0700 From: Haitao Huang <haitao.huang@linux.intel.com> To: jarkko@kernel.org, dave.hansen@linux.intel.com, tj@kernel.org, linux-kernel@vger.kernel.org, linux-sgx@vger.kernel.org, cgroups@vger.kernel.org, Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>, x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com> Cc: kai.huang@intel.com, reinette.chatre@intel.com, Kristen Carlson Accardi <kristen@linux.intel.com>, zhiquan1.li@intel.com, seanjc@google.com Subject: [PATCH v3 03/28] x86/sgx: Add 'struct sgx_epc_lru_lists' to encapsulate lru list(s) Date: Wed, 12 Jul 2023 16:01:37 -0700 Message-Id: <20230712230202.47929-4-haitao.huang@linux.intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230712230202.47929-1-haitao.huang@linux.intel.com> References: <20230712230202.47929-1-haitao.huang@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771258302584221217 X-GMAIL-MSGID: 1771258302584221217 |
Series |
Add Cgroup support for SGX EPC memory
|
|
Commit Message
Haitao Huang
July 12, 2023, 11:01 p.m. UTC
From: Kristen Carlson Accardi <kristen@linux.intel.com> Introduce a data structure to wrap the existing reclaimable list and its spinlock in a struct to minimize the code changes needed to handle multiple LRUs as well as reclaimable and non-reclaimable lists. The new structure will be used in a following set of patches to implement SGX EPC cgroups. The changes to the structure needed for unreclaimable lists will be added in later patches. Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> Signed-off-by: Kristen Carlson Accardi <kristen@linux.intel.com> Signed-off-by: Haitao Huang <haitao.huang@linux.intel.com> Cc: Sean Christopherson <seanjc@google.com> V3: Removed the helper functions and revised commit messages --- arch/x86/kernel/cpu/sgx/sgx.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
Comments
On Wed Jul 12, 2023 at 11:01 PM UTC, Haitao Huang wrote: > From: Kristen Carlson Accardi <kristen@linux.intel.com> > > Introduce a data structure to wrap the existing reclaimable list > and its spinlock in a struct to minimize the code changes needed > to handle multiple LRUs as well as reclaimable and non-reclaimable > lists. The new structure will be used in a following set of patches to > implement SGX EPC cgroups. > > The changes to the structure needed for unreclaimable lists will be > added in later patches. > > Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> > Signed-off-by: Kristen Carlson Accardi <kristen@linux.intel.com> > Signed-off-by: Haitao Huang <haitao.huang@linux.intel.com> > Cc: Sean Christopherson <seanjc@google.com> > > V3: > Removed the helper functions and revised commit messages > --- > arch/x86/kernel/cpu/sgx/sgx.h | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/arch/x86/kernel/cpu/sgx/sgx.h b/arch/x86/kernel/cpu/sgx/sgx.h > index f6e3c5810eef..77fceba73a25 100644 > --- a/arch/x86/kernel/cpu/sgx/sgx.h > +++ b/arch/x86/kernel/cpu/sgx/sgx.h > @@ -92,6 +92,23 @@ static inline void *sgx_get_epc_virt_addr(struct sgx_epc_page *page) > return section->virt_addr + index * PAGE_SIZE; > } > > +/* > + * This data structure wraps a list of reclaimable EPC pages, and a list of > + * non-reclaimable EPC pages and is used to implement a LRU policy during > + * reclamation. > + */ > +struct sgx_epc_lru_lists { > + /* Must acquire this lock to access */ > + spinlock_t lock; Isn't this self-explanatory, why the inline comment? > + struct list_head reclaimable; > +}; > + > +static inline void sgx_lru_init(struct sgx_epc_lru_lists *lrus) > +{ > + spin_lock_init(&lrus->lock); > + INIT_LIST_HEAD(&lrus->reclaimable); > +} > + > struct sgx_epc_page *__sgx_alloc_epc_page(void); > void sgx_free_epc_page(struct sgx_epc_page *page); > > -- > 2.25.1 BR, Jarkko
On Mon, 17 Jul 2023 07:45:36 -0500, Jarkko Sakkinen <jarkko@kernel.org> wrote: > On Wed Jul 12, 2023 at 11:01 PM UTC, Haitao Huang wrote: >> From: Kristen Carlson Accardi <kristen@linux.intel.com> >> >> Introduce a data structure to wrap the existing reclaimable list >> and its spinlock in a struct to minimize the code changes needed >> to handle multiple LRUs as well as reclaimable and non-reclaimable >> lists. The new structure will be used in a following set of patches to >> implement SGX EPC cgroups. >> >> The changes to the structure needed for unreclaimable lists will be >> added in later patches. >> >> Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> >> Signed-off-by: Kristen Carlson Accardi <kristen@linux.intel.com> >> Signed-off-by: Haitao Huang <haitao.huang@linux.intel.com> >> Cc: Sean Christopherson <seanjc@google.com> >> >> V3: >> Removed the helper functions and revised commit messages >> --- >> arch/x86/kernel/cpu/sgx/sgx.h | 17 +++++++++++++++++ >> 1 file changed, 17 insertions(+) >> >> diff --git a/arch/x86/kernel/cpu/sgx/sgx.h >> b/arch/x86/kernel/cpu/sgx/sgx.h >> index f6e3c5810eef..77fceba73a25 100644 >> --- a/arch/x86/kernel/cpu/sgx/sgx.h >> +++ b/arch/x86/kernel/cpu/sgx/sgx.h >> @@ -92,6 +92,23 @@ static inline void *sgx_get_epc_virt_addr(struct >> sgx_epc_page *page) >> return section->virt_addr + index * PAGE_SIZE; >> } >> >> +/* >> + * This data structure wraps a list of reclaimable EPC pages, and a >> list of >> + * non-reclaimable EPC pages and is used to implement a LRU policy >> during >> + * reclamation. >> + */ >> +struct sgx_epc_lru_lists { >> + /* Must acquire this lock to access */ >> + spinlock_t lock; > > Isn't this self-explanatory, why the inline comment? I got a warning from the checkpatch script complaining this lock needs comments. Thanks Haitao
On Mon Jul 17, 2023 at 1:23 PM UTC, Haitao Huang wrote: > On Mon, 17 Jul 2023 07:45:36 -0500, Jarkko Sakkinen <jarkko@kernel.org> > wrote: > > > On Wed Jul 12, 2023 at 11:01 PM UTC, Haitao Huang wrote: > >> From: Kristen Carlson Accardi <kristen@linux.intel.com> > >> > >> Introduce a data structure to wrap the existing reclaimable list > >> and its spinlock in a struct to minimize the code changes needed > >> to handle multiple LRUs as well as reclaimable and non-reclaimable > >> lists. The new structure will be used in a following set of patches to > >> implement SGX EPC cgroups. > >> > >> The changes to the structure needed for unreclaimable lists will be > >> added in later patches. > >> > >> Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> > >> Signed-off-by: Kristen Carlson Accardi <kristen@linux.intel.com> > >> Signed-off-by: Haitao Huang <haitao.huang@linux.intel.com> > >> Cc: Sean Christopherson <seanjc@google.com> > >> > >> V3: > >> Removed the helper functions and revised commit messages > >> --- > >> arch/x86/kernel/cpu/sgx/sgx.h | 17 +++++++++++++++++ > >> 1 file changed, 17 insertions(+) > >> > >> diff --git a/arch/x86/kernel/cpu/sgx/sgx.h > >> b/arch/x86/kernel/cpu/sgx/sgx.h > >> index f6e3c5810eef..77fceba73a25 100644 > >> --- a/arch/x86/kernel/cpu/sgx/sgx.h > >> +++ b/arch/x86/kernel/cpu/sgx/sgx.h > >> @@ -92,6 +92,23 @@ static inline void *sgx_get_epc_virt_addr(struct > >> sgx_epc_page *page) > >> return section->virt_addr + index * PAGE_SIZE; > >> } > >> > >> +/* > >> + * This data structure wraps a list of reclaimable EPC pages, and a > >> list of > >> + * non-reclaimable EPC pages and is used to implement a LRU policy > >> during > >> + * reclamation. > >> + */ > >> +struct sgx_epc_lru_lists { > >> + /* Must acquire this lock to access */ > >> + spinlock_t lock; > > > > Isn't this self-explanatory, why the inline comment? > > I got a warning from the checkpatch script complaining this lock needs > comments. OK, cool, not a big deal. BR, Jarkko
On Mon, 2023-07-17 at 08:23 -0500, Haitao Huang wrote: > On Mon, 17 Jul 2023 07:45:36 -0500, Jarkko Sakkinen <jarkko@kernel.org> > wrote: > > > On Wed Jul 12, 2023 at 11:01 PM UTC, Haitao Huang wrote: > > > From: Kristen Carlson Accardi <kristen@linux.intel.com> > > > > > > Introduce a data structure to wrap the existing reclaimable list > > > and its spinlock in a struct to minimize the code changes needed > > > to handle multiple LRUs as well as reclaimable and non-reclaimable > > > lists. The new structure will be used in a following set of patches to > > > implement SGX EPC cgroups. Although briefly mentioned in the first patch, it would be better to put more background about the "reclaimable" and "non-reclaimable" thing here, focusing on _why_ we need multiple LRUs (presumably you mean two lists: reclaimable and non- reclaimable). > > > > > > The changes to the structure needed for unreclaimable lists will be > > > added in later patches. > > > > > > Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> > > > Signed-off-by: Kristen Carlson Accardi <kristen@linux.intel.com> > > > Signed-off-by: Haitao Huang <haitao.huang@linux.intel.com> > > > Cc: Sean Christopherson <seanjc@google.com> > > > > > > V3: > > > Removed the helper functions and revised commit messages Please put change history into: --- change history --- So it can be stripped away when applying the patch. > > > --- > > > arch/x86/kernel/cpu/sgx/sgx.h | 17 +++++++++++++++++ > > > 1 file changed, 17 insertions(+) > > > > > > diff --git a/arch/x86/kernel/cpu/sgx/sgx.h > > > b/arch/x86/kernel/cpu/sgx/sgx.h > > > index f6e3c5810eef..77fceba73a25 100644 > > > --- a/arch/x86/kernel/cpu/sgx/sgx.h > > > +++ b/arch/x86/kernel/cpu/sgx/sgx.h > > > @@ -92,6 +92,23 @@ static inline void *sgx_get_epc_virt_addr(struct > > > sgx_epc_page *page) > > > return section->virt_addr + index * PAGE_SIZE; > > > } > > > > > > +/* > > > + * This data structure wraps a list of reclaimable EPC pages, and a > > > list of > > > + * non-reclaimable EPC pages and is used to implement a LRU policy > > > during > > > + * reclamation. > > > + */ I'd prefer to not mention the "non-reclaimable" thing in this patch, but defer to the one actually introduces the "non-reclaimable" list. Actually, I don't think we even need this comment, given you have this in the structure: struct list_head reclaimable; Which already explains the "reclaimable" list. I suppose the non-reclaimable list would be named similarly thus need no comment either. Also, I am wondering why you need to split this out as a separate patch. It basically does nothing. To me you should just merge this to the next patch, which actually does what you claimed in the changelog: Introduce a data structure to wrap the existing reclaimable list andĀ itsĀ spinlock ... Then this can be an infrastructure change patch, which doesn't bring any functional change, to support the non-reclaimable list. > > > +struct sgx_epc_lru_lists { > > > + /* Must acquire this lock to access */ > > > + spinlock_t lock; > > > > Isn't this self-explanatory, why the inline comment? > > I got a warning from the checkpatch script complaining this lock needs > comments. I suspected this, so I applied this patch, removed the comment, generated a new patch, and run checkpatch.pl for it. It didn't report any warning/error in my testing. Are you sure you got a warning?
Hi Kai On Mon, 24 Jul 2023 05:04:48 -0500, Huang, Kai <kai.huang@intel.com> wrote: > On Mon, 2023-07-17 at 08:23 -0500, Haitao Huang wrote: >> On Mon, 17 Jul 2023 07:45:36 -0500, Jarkko Sakkinen <jarkko@kernel.org> >> wrote: >> >> > On Wed Jul 12, 2023 at 11:01 PM UTC, Haitao Huang wrote: >> > > From: Kristen Carlson Accardi <kristen@linux.intel.com> >> > > >> > > Introduce a data structure to wrap the existing reclaimable list >> > > and its spinlock in a struct to minimize the code changes needed >> > > to handle multiple LRUs as well as reclaimable and non-reclaimable >> > > lists. The new structure will be used in a following set of patches >> to >> > > implement SGX EPC cgroups. > > Although briefly mentioned in the first patch, it would be better to put > more > background about the "reclaimable" and "non-reclaimable" thing here, > focusing on > _why_ we need multiple LRUs (presumably you mean two lists: reclaimable > and non- > reclaimable). > Sure I can add a little more background to introduce the reclaimable/unreclaimable concept. But why we need multiple LRUs would be self-evident in later patches, not sure I will add details here. >> > > >> > > The changes to the structure needed for unreclaimable lists will be >> > > added in later patches. >> > > >> > > Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> >> > > Signed-off-by: Kristen Carlson Accardi <kristen@linux.intel.com> >> > > Signed-off-by: Haitao Huang <haitao.huang@linux.intel.com> >> > > Cc: Sean Christopherson <seanjc@google.com> >> > > >> > > V3: >> > > Removed the helper functions and revised commit messages > > Please put change history into: > > --- > change history > --- > > So it can be stripped away when applying the patch. > Will do that. >> > > --- >> > > arch/x86/kernel/cpu/sgx/sgx.h | 17 +++++++++++++++++ >> > > 1 file changed, 17 insertions(+) >> > > >> > > diff --git a/arch/x86/kernel/cpu/sgx/sgx.h >> > > b/arch/x86/kernel/cpu/sgx/sgx.h >> > > index f6e3c5810eef..77fceba73a25 100644 >> > > --- a/arch/x86/kernel/cpu/sgx/sgx.h >> > > +++ b/arch/x86/kernel/cpu/sgx/sgx.h >> > > @@ -92,6 +92,23 @@ static inline void *sgx_get_epc_virt_addr(struct >> > > sgx_epc_page *page) >> > > return section->virt_addr + index * PAGE_SIZE; >> > > } >> > > >> > > +/* >> > > + * This data structure wraps a list of reclaimable EPC pages, and a >> > > list of >> > > + * non-reclaimable EPC pages and is used to implement a LRU policy >> > > during >> > > + * reclamation. >> > > + */ > > I'd prefer to not mention the "non-reclaimable" thing in this patch, but > defer > to the one actually introduces the "non-reclaimable" list. Actually, I > don't > think we even need this comment, given you have this in the structure: > > struct list_head reclaimable; > Agreed. > Which already explains the "reclaimable" list. I suppose the > non-reclaimable > list would be named similarly thus need no comment either. > > Also, I am wondering why you need to split this out as a separate > patch. It > basically does nothing. To me you should just merge this to the next > patch, I think Kristen splitted the original patch based on Dave's comments: https://lore.kernel.org/all/e71d76b2-4368-4627-abd4-2163e6786a20@intel.com/ > which actually does what you claimed in the changelog: > > Introduce a data structure to wrap the existing reclaimable list and > its spinlock ... > > Then this can be an infrastructure change patch, which doesn't bring any > functional change, to support the non-reclaimable list. > > >> > > +struct sgx_epc_lru_lists { >> > > + /* Must acquire this lock to access */ >> > > + spinlock_t lock; >> > >> > Isn't this self-explanatory, why the inline comment? >> >> I got a warning from the checkpatch script complaining this lock needs >> comments. > > I suspected this, so I applied this patch, removed the comment, > generated a new > patch, and run checkpatch.pl for it. It didn't report any warning/error > in my > testing. > > Are you sure you got a warning? I did a reran and it's actually a "CHECK" I got: $ ./scripts/checkpatch.pl --strict 0001-x86-sgx-Add-struct-sgx_epc_lru_lists-to-encapsulate-.patch CHECK: spinlock_t definition without comment #41: FILE: arch/x86/kernel/cpu/sgx/sgx.h:101: + spinlock_t lock; total: 0 errors, 0 warnings, 1 checks, 22 lines checked Thanks Haitao
On Mon, 2023-07-24 at 09:55 -0500, Haitao Huang wrote: > Hi Kai > On Mon, 24 Jul 2023 05:04:48 -0500, Huang, Kai <kai.huang@intel.com> wrote: > > > On Mon, 2023-07-17 at 08:23 -0500, Haitao Huang wrote: > > > On Mon, 17 Jul 2023 07:45:36 -0500, Jarkko Sakkinen <jarkko@kernel.org> > > > wrote: > > > > > > > On Wed Jul 12, 2023 at 11:01 PM UTC, Haitao Huang wrote: > > > > > From: Kristen Carlson Accardi <kristen@linux.intel.com> > > > > > > > > > > Introduce a data structure to wrap the existing reclaimable list > > > > > and its spinlock in a struct to minimize the code changes needed > > > > > to handle multiple LRUs as well as reclaimable and non-reclaimable > > > > > lists. The new structure will be used in a following set of patches > > > to > > > > > implement SGX EPC cgroups. > > > > Although briefly mentioned in the first patch, it would be better to put > > more > > background about the "reclaimable" and "non-reclaimable" thing here, > > focusing on > > _why_ we need multiple LRUs (presumably you mean two lists: reclaimable > > and non- > > reclaimable). > > > Sure I can add a little more background to introduce the > reclaimable/unreclaimable concept. But why we need multiple LRUs would be > self-evident in later patches, not sure I will add details here. In this case people will need to go to that patch to get some idea first. It doesn't seem hurt if you can explain why you need multiple LRUs here first. [...] > > > > > +struct sgx_epc_lru_lists { > > > > > + /* Must acquire this lock to access */ > > > > > + spinlock_t lock; > > > > > > > > Isn't this self-explanatory, why the inline comment? > > > > > > I got a warning from the checkpatch script complaining this lock needs > > > comments. > > > > I suspected this, so I applied this patch, removed the comment, > > generated a new > > patch, and run checkpatch.pl for it. It didn't report any warning/error > > in my > > testing. > > > > Are you sure you got a warning? > > I did a reran and it's actually a "CHECK" I got: > > $ ./scripts/checkpatch.pl --strict > 0001-x86-sgx-Add-struct-sgx_epc_lru_lists-to-encapsulate-.patch > CHECK: spinlock_t definition without comment > #41: FILE: arch/x86/kernel/cpu/sgx/sgx.h:101: > + spinlock_t lock; > > total: 0 errors, 0 warnings, 1 checks, 22 lines checked > I didn't get the CHECK in my testing. Not sure why. Anyway, I guess the comment can be useful if it is to explain why we need to use spinlock or whatever lock. But /* Must acquire this lock to access */ doesn't explain why at all, thus doesn't look helpful to me. I guess you either need a better comment, or just remove it (it's obvious that a lot of kernel code doesn't have a comment around spinlock_t).
On Mon, 24 Jul 2023 18:31:58 -0500, Huang, Kai <kai.huang@intel.com> wrote: ... >> > Although briefly mentioned in the first patch, it would be better to >> put >> > more >> > background about the "reclaimable" and "non-reclaimable" thing here, >> > focusing on >> > _why_ we need multiple LRUs (presumably you mean two lists: >> reclaimable >> > and non- >> > reclaimable). >> > >> Sure I can add a little more background to introduce the >> reclaimable/unreclaimable concept. But why we need multiple LRUs would >> be >> self-evident in later patches, not sure I will add details here. > > In this case people will need to go to that patch to get some idea > first. It > doesn't seem hurt if you can explain why you need multiple LRUs here > first. > Will add. ... > > I didn't get the CHECK in my testing. Not sure why. > > Anyway, I guess the comment can be useful if it is to explain why we > need to use > spinlock or whatever lock. But > > /* Must acquire this lock to access */ > > doesn't explain why at all, thus doesn't look helpful to me. > > I guess you either need a better comment, or just remove it (it's > obvious that a > lot of kernel code doesn't have a comment around spinlock_t). > I'll remove the comments. Thanks Haitao
diff --git a/arch/x86/kernel/cpu/sgx/sgx.h b/arch/x86/kernel/cpu/sgx/sgx.h index f6e3c5810eef..77fceba73a25 100644 --- a/arch/x86/kernel/cpu/sgx/sgx.h +++ b/arch/x86/kernel/cpu/sgx/sgx.h @@ -92,6 +92,23 @@ static inline void *sgx_get_epc_virt_addr(struct sgx_epc_page *page) return section->virt_addr + index * PAGE_SIZE; } +/* + * This data structure wraps a list of reclaimable EPC pages, and a list of + * non-reclaimable EPC pages and is used to implement a LRU policy during + * reclamation. + */ +struct sgx_epc_lru_lists { + /* Must acquire this lock to access */ + spinlock_t lock; + struct list_head reclaimable; +}; + +static inline void sgx_lru_init(struct sgx_epc_lru_lists *lrus) +{ + spin_lock_init(&lrus->lock); + INIT_LIST_HEAD(&lrus->reclaimable); +} + struct sgx_epc_page *__sgx_alloc_epc_page(void); void sgx_free_epc_page(struct sgx_epc_page *page);