All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jisheng Zhang <jszhang@kernel.org>
To: yunhui cui <cuiyunhui@bytedance.com>
Cc: Paul Walmsley <paul.walmsley@sifive.com>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Albert Ou <aou@eecs.berkeley.edu>, Will Deacon <will@kernel.org>,
	"Aneesh Kumar K . V" <aneesh.kumar@linux.ibm.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Nick Piggin <npiggin@gmail.com>,
	Peter Zijlstra <peterz@infradead.org>,
	linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org,
	linux-arch@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [External] [PATCH 2/4] riscv: tlb: convert __p*d_free_tlb() to inline functions
Date: Wed, 20 Dec 2023 20:57:20 +0800	[thread overview]
Message-ID: <ZYLksMHfzH1usBAb@xhacker> (raw)
In-Reply-To: <CAEEQ3wn6j0N-NSQjEqE8Ee9dGzGMJJ4CW2Yhw_njAaOgR8G_eQ@mail.gmail.com>

On Wed, Dec 20, 2023 at 10:59:22AM +0800, yunhui cui wrote:
> Hi Jisheng,

Hi,

> 
> On Wed, Dec 20, 2023 at 2:04 AM Jisheng Zhang <jszhang@kernel.org> wrote:
> >
> > This is to prepare for enabling MMU_GATHER_RCU_TABLE_FREE.
> > No functionality changes.
> >
> > Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
> > ---
> >  arch/riscv/include/asm/pgalloc.h | 54 +++++++++++++++++++-------------
> >  1 file changed, 32 insertions(+), 22 deletions(-)
> >
> > diff --git a/arch/riscv/include/asm/pgalloc.h b/arch/riscv/include/asm/pgalloc.h
> > index a12fb83fa1f5..3c5e3bd15f46 100644
> > --- a/arch/riscv/include/asm/pgalloc.h
> > +++ b/arch/riscv/include/asm/pgalloc.h
> > @@ -95,13 +95,16 @@ static inline void pud_free(struct mm_struct *mm, pud_t *pud)
> >                 __pud_free(mm, pud);
> >  }
> >
> > -#define __pud_free_tlb(tlb, pud, addr)                                 \
> > -do {                                                                   \
> > -       if (pgtable_l4_enabled) {                                       \
> > -               pagetable_pud_dtor(virt_to_ptdesc(pud));                \
> > -               tlb_remove_page_ptdesc((tlb), virt_to_ptdesc(pud));     \
> > -       }                                                               \
> > -} while (0)
> > +static inline void __pud_free_tlb(struct mmu_gather *tlb, pud_t *pud,
> > +                                 unsigned long addr)
> > +{
> > +       if (pgtable_l4_enabled) {
> > +               struct ptdesc *ptdesc = virt_to_ptdesc(pud);
> > +
> > +               pagetable_pud_dtor(ptdesc);
> > +               tlb_remove_page_ptdesc(tlb, ptdesc);
> > +       }
> > +}
> >
> >  #define p4d_alloc_one p4d_alloc_one
> >  static inline p4d_t *p4d_alloc_one(struct mm_struct *mm, unsigned long addr)
> > @@ -130,11 +133,12 @@ static inline void p4d_free(struct mm_struct *mm, p4d_t *p4d)
> >                 __p4d_free(mm, p4d);
> >  }
> >
> > -#define __p4d_free_tlb(tlb, p4d, addr)                                 \
> > -do {                                                                   \
> > -       if (pgtable_l5_enabled)                                         \
> > -               tlb_remove_page_ptdesc((tlb), virt_to_ptdesc(p4d));     \
> > -} while (0)
> > +static inline void __p4d_free_tlb(struct mmu_gather *tlb, p4d_t *p4d,
> > +                                 unsigned long addr)
> > +{
> > +       if (pgtable_l5_enabled)
> > +               tlb_remove_page_ptdesc(tlb, virt_to_ptdesc(p4d));
> > +}
> >  #endif /* __PAGETABLE_PMD_FOLDED */
> >
> >  static inline void sync_kernel_mappings(pgd_t *pgd)
> > @@ -159,19 +163,25 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm)
> >
> >  #ifndef __PAGETABLE_PMD_FOLDED
> >
> > -#define __pmd_free_tlb(tlb, pmd, addr)                         \
> > -do {                                                           \
> > -       pagetable_pmd_dtor(virt_to_ptdesc(pmd));                \
> > -       tlb_remove_page_ptdesc((tlb), virt_to_ptdesc(pmd));     \
> > -} while (0)
> > +static inline void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd,
> > +                                 unsigned long addr)
> > +{
> > +       struct ptdesc *ptdesc = virt_to_ptdesc(pmd);
> > +
> > +       pagetable_pmd_dtor(ptdesc);
> > +       tlb_remove_page_ptdesc(tlb, ptdesc);
> > +}
> >
> >  #endif /* __PAGETABLE_PMD_FOLDED */
> >
> > -#define __pte_free_tlb(tlb, pte, buf)                  \
> > -do {                                                   \
> > -       pagetable_pte_dtor(page_ptdesc(pte));           \
> > -       tlb_remove_page_ptdesc((tlb), page_ptdesc(pte));\
> > -} while (0)
> > +static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t pte,
> > +                                 unsigned long addr)
> > +{
> > +       struct ptdesc *ptdesc = page_ptdesc(pte);
> > +
> > +       pagetable_pte_dtor(ptdesc);
> > +       tlb_remove_page_ptdesc(tlb, ptdesc);
> > +}
> >  #endif /* CONFIG_MMU */
> >
> >  #endif /* _ASM_RISCV_PGALLOC_H */
> > --
> > 2.40.0
> >
> 
> Why is it necessary to convert to inline functions?

Hmm, it's not necessary but a plus, the inline version's readability and
maintainability is better than macros

Regards

WARNING: multiple messages have this Message-ID (diff)
From: Jisheng Zhang <jszhang@kernel.org>
To: yunhui cui <cuiyunhui@bytedance.com>
Cc: Paul Walmsley <paul.walmsley@sifive.com>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Albert Ou <aou@eecs.berkeley.edu>, Will Deacon <will@kernel.org>,
	"Aneesh Kumar K . V" <aneesh.kumar@linux.ibm.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Nick Piggin <npiggin@gmail.com>,
	Peter Zijlstra <peterz@infradead.org>,
	linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org,
	linux-arch@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [External] [PATCH 2/4] riscv: tlb: convert __p*d_free_tlb() to inline functions
Date: Wed, 20 Dec 2023 20:57:20 +0800	[thread overview]
Message-ID: <ZYLksMHfzH1usBAb@xhacker> (raw)
In-Reply-To: <CAEEQ3wn6j0N-NSQjEqE8Ee9dGzGMJJ4CW2Yhw_njAaOgR8G_eQ@mail.gmail.com>

On Wed, Dec 20, 2023 at 10:59:22AM +0800, yunhui cui wrote:
> Hi Jisheng,

Hi,

> 
> On Wed, Dec 20, 2023 at 2:04 AM Jisheng Zhang <jszhang@kernel.org> wrote:
> >
> > This is to prepare for enabling MMU_GATHER_RCU_TABLE_FREE.
> > No functionality changes.
> >
> > Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
> > ---
> >  arch/riscv/include/asm/pgalloc.h | 54 +++++++++++++++++++-------------
> >  1 file changed, 32 insertions(+), 22 deletions(-)
> >
> > diff --git a/arch/riscv/include/asm/pgalloc.h b/arch/riscv/include/asm/pgalloc.h
> > index a12fb83fa1f5..3c5e3bd15f46 100644
> > --- a/arch/riscv/include/asm/pgalloc.h
> > +++ b/arch/riscv/include/asm/pgalloc.h
> > @@ -95,13 +95,16 @@ static inline void pud_free(struct mm_struct *mm, pud_t *pud)
> >                 __pud_free(mm, pud);
> >  }
> >
> > -#define __pud_free_tlb(tlb, pud, addr)                                 \
> > -do {                                                                   \
> > -       if (pgtable_l4_enabled) {                                       \
> > -               pagetable_pud_dtor(virt_to_ptdesc(pud));                \
> > -               tlb_remove_page_ptdesc((tlb), virt_to_ptdesc(pud));     \
> > -       }                                                               \
> > -} while (0)
> > +static inline void __pud_free_tlb(struct mmu_gather *tlb, pud_t *pud,
> > +                                 unsigned long addr)
> > +{
> > +       if (pgtable_l4_enabled) {
> > +               struct ptdesc *ptdesc = virt_to_ptdesc(pud);
> > +
> > +               pagetable_pud_dtor(ptdesc);
> > +               tlb_remove_page_ptdesc(tlb, ptdesc);
> > +       }
> > +}
> >
> >  #define p4d_alloc_one p4d_alloc_one
> >  static inline p4d_t *p4d_alloc_one(struct mm_struct *mm, unsigned long addr)
> > @@ -130,11 +133,12 @@ static inline void p4d_free(struct mm_struct *mm, p4d_t *p4d)
> >                 __p4d_free(mm, p4d);
> >  }
> >
> > -#define __p4d_free_tlb(tlb, p4d, addr)                                 \
> > -do {                                                                   \
> > -       if (pgtable_l5_enabled)                                         \
> > -               tlb_remove_page_ptdesc((tlb), virt_to_ptdesc(p4d));     \
> > -} while (0)
> > +static inline void __p4d_free_tlb(struct mmu_gather *tlb, p4d_t *p4d,
> > +                                 unsigned long addr)
> > +{
> > +       if (pgtable_l5_enabled)
> > +               tlb_remove_page_ptdesc(tlb, virt_to_ptdesc(p4d));
> > +}
> >  #endif /* __PAGETABLE_PMD_FOLDED */
> >
> >  static inline void sync_kernel_mappings(pgd_t *pgd)
> > @@ -159,19 +163,25 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm)
> >
> >  #ifndef __PAGETABLE_PMD_FOLDED
> >
> > -#define __pmd_free_tlb(tlb, pmd, addr)                         \
> > -do {                                                           \
> > -       pagetable_pmd_dtor(virt_to_ptdesc(pmd));                \
> > -       tlb_remove_page_ptdesc((tlb), virt_to_ptdesc(pmd));     \
> > -} while (0)
> > +static inline void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd,
> > +                                 unsigned long addr)
> > +{
> > +       struct ptdesc *ptdesc = virt_to_ptdesc(pmd);
> > +
> > +       pagetable_pmd_dtor(ptdesc);
> > +       tlb_remove_page_ptdesc(tlb, ptdesc);
> > +}
> >
> >  #endif /* __PAGETABLE_PMD_FOLDED */
> >
> > -#define __pte_free_tlb(tlb, pte, buf)                  \
> > -do {                                                   \
> > -       pagetable_pte_dtor(page_ptdesc(pte));           \
> > -       tlb_remove_page_ptdesc((tlb), page_ptdesc(pte));\
> > -} while (0)
> > +static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t pte,
> > +                                 unsigned long addr)
> > +{
> > +       struct ptdesc *ptdesc = page_ptdesc(pte);
> > +
> > +       pagetable_pte_dtor(ptdesc);
> > +       tlb_remove_page_ptdesc(tlb, ptdesc);
> > +}
> >  #endif /* CONFIG_MMU */
> >
> >  #endif /* _ASM_RISCV_PGALLOC_H */
> > --
> > 2.40.0
> >
> 
> Why is it necessary to convert to inline functions?

Hmm, it's not necessary but a plus, the inline version's readability and
maintainability is better than macros

Regards

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

  reply	other threads:[~2023-12-20 13:09 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-19 17:50 [PATCH 0/4] riscv: support fast gup Jisheng Zhang
2023-12-19 17:50 ` Jisheng Zhang
2023-12-19 17:50 ` [PATCH 1/4] riscv: tlb: fix __p*d_free_tlb() Jisheng Zhang
2023-12-19 17:50   ` Jisheng Zhang
2023-12-31  6:21   ` Alexandre Ghiti
2023-12-31  6:21     ` Alexandre Ghiti
2024-02-07  7:28     ` Alexandre Ghiti
2024-02-07  7:28       ` Alexandre Ghiti
2024-01-04 10:55   ` Alexandre Ghiti
2024-01-04 10:55     ` Alexandre Ghiti
2024-01-10 14:52     ` Palmer Dabbelt
2024-01-10 14:52       ` Palmer Dabbelt
2023-12-19 17:50 ` [PATCH 2/4] riscv: tlb: convert __p*d_free_tlb() to inline functions Jisheng Zhang
2023-12-19 17:50   ` Jisheng Zhang
2023-12-20  2:59   ` [External] " yunhui cui
2023-12-20  2:59     ` yunhui cui
2023-12-20 12:57     ` Jisheng Zhang [this message]
2023-12-20 12:57       ` Jisheng Zhang
2023-12-31  6:24   ` Alexandre Ghiti
2023-12-31  6:24     ` Alexandre Ghiti
2023-12-19 17:50 ` [PATCH 3/4] riscv: enable MMU_GATHER_RCU_TABLE_FREE for SMP && MMU Jisheng Zhang
2023-12-19 17:50   ` Jisheng Zhang
2023-12-31  6:32   ` Alexandre Ghiti
2023-12-31  6:32     ` Alexandre Ghiti
2024-01-02  3:23     ` Jisheng Zhang
2024-01-02  3:23       ` Jisheng Zhang
2024-01-04 10:45       ` Alexandre Ghiti
2024-01-04 10:45         ` Alexandre Ghiti
2023-12-19 17:50 ` [PATCH 4/4] riscv: enable HAVE_FAST_GUP if MMU Jisheng Zhang
2023-12-19 17:50   ` Jisheng Zhang
2023-12-31  6:37   ` Alexandre Ghiti
2023-12-31  6:37     ` Alexandre Ghiti
2024-01-02  3:25     ` Jisheng Zhang
2024-01-02  3:25       ` Jisheng Zhang
2024-01-04 10:46       ` Alexandre Ghiti
2024-01-04 10:46         ` Alexandre Ghiti
2024-01-25 21:30 ` [PATCH 0/4] riscv: support fast gup patchwork-bot+linux-riscv
2024-01-25 21:30   ` patchwork-bot+linux-riscv

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=ZYLksMHfzH1usBAb@xhacker \
    --to=jszhang@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=aneesh.kumar@linux.ibm.com \
    --cc=aou@eecs.berkeley.edu \
    --cc=cuiyunhui@bytedance.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=npiggin@gmail.com \
    --cc=palmer@dabbelt.com \
    --cc=paul.walmsley@sifive.com \
    --cc=peterz@infradead.org \
    --cc=will@kernel.org \
    /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.