All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Seongsu Park" <sgsu.park@samsung.com>
To: "'Will Deacon'" <will@kernel.org>
Cc: <catalin.marinas@arm.com>, <mark.rutland@arm.com>,
	<linux-arm-kernel@lists.infradead.org>,
	<linux-kernel@vger.kernel.org>,
	"'Leem	ChaeHoon'" <infinite.run@gmail.com>,
	"'Gyeonggeon Choi'" <gychoi@student.42seoul.kr>,
	"'Soomin Cho'" <to.soomin@gmail.com>,
	"'DaeRo Lee'" <skseofh@gmail.com>,
	"'kmasta'" <kmasta.study@gmail.com>
Subject: RE: [PATCH v3] arm64: Cleanup __cpu_set_tcr_t0sz()
Date: Thu, 11 Apr 2024 21:34:24 +0900	[thread overview]
Message-ID: <09b201da8c0c$95e8d050$c1ba70f0$@samsung.com> (raw)
In-Reply-To: <20240410161217.GB25225@willie-the-truck>



> 
> On Mon, Apr 08, 2024 at 11:40:16AM +0900, Seongsu Park wrote:
> > In cpu_set_default_tcr_t0sz(), it is an error to shift TCR_T0SZ_OFFSET
> > twice form TCR_T0SZ() and __cpu_set_tcr_t0sz().
> > Since TCR_T0SZ_OFFSET is 0, no error occurred.
> > We need to clarify whether the parameter of __cpu_set_tcr_t0sz is a
> > shifted value or an unshifted value.
> >
> > We have already shifted the value of t0sz in TCR_T0SZ by
TCR_T0SZ_OFFSET.
> > This is necessary for consistency with TCR_T1SZ.
> > Therefore, the parameter of __cpu_set_tcr_t0sz is clarified as a
> > shifted value.
> 
> This commit message needs reworking. I would suggest something like:
> 
>   The T0SZ field of TCR_EL1 occupies bits 0-5 of the register and
>   encodes the virtual address space translated by TTBR0_EL1. When
>   updating the field (for example, because we are switching to/from
>   the idmap page-table), __cpu_set_tcr_t0sz() erroneously treats its
>   't0sz' argument as unshifted, resulting in harmless but confusing
>   double shifts by 0 in the code.
> 
>   Remove the unnecessary shifts.
> 

Thank you for great feedback.
Please check title and description. 
If these are appropriate, I will write the same in v4.

[Title]
arm64: Cleanup __cpu_set_tcr_t0sz()

[Description]
The T0SZ field of TCR_EL1 occupies bits 0-5 of the register and
encodes the virtual address space translated by TTBR0_EL1. When
updating the field, for example because we are switching to/from
the idmap page-table, __cpu_set_tcr_t0sz() erroneously treats its
't0sz' argument as unshifted, resulting in harmless but confusing
double shifts by 0 in the code. Therefore, Remove the unnecessary
shifts.

> > Co-developed-by: Leem ChaeHoon <infinite.run@gmail.com>
> > Signed-off-by: Leem ChaeHoon <infinite.run@gmail.com>
> > Co-developed-by: Gyeonggeon Choi <gychoi@student.42seoul.kr>
> > Signed-off-by: Gyeonggeon Choi <gychoi@student.42seoul.kr>
> > Co-developed-by: Soomin Cho <to.soomin@gmail.com>
> > Signed-off-by: Soomin Cho <to.soomin@gmail.com>
> > Co-developed-by: DaeRo Lee <skseofh@gmail.com>
> > Signed-off-by: DaeRo Lee <skseofh@gmail.com>
> > Co-developed-by: kmasta <kmasta.study@gmail.com>
> > Signed-off-by: kmasta <kmasta.study@gmail.com>
> > Signed-off-by: Seongsu Park <sgsu.park@samsung.com>
> 
> Honestly, although it's great that you all meet up to look at the kernel,
> this long list of credits is a little absurd for a trivial patch like
this.
> Please can you decide who did the most work and give them the credit?
> Hopefully there will be future opportunities for you all to contribute!
> 

Okay. I got it.
In v4, I'll leave only Leem ChaeHoon and me.

> > ---
> >
> > v2:
> >  - Condition is updated
> > v3:
> >  - Commit message is updated
> >  - cpu_set_tcr_t0sz macro is added
> >
> > ---
> >  arch/arm64/include/asm/mmu_context.h | 7 ++++---
> >  1 file changed, 4 insertions(+), 3 deletions(-)
> >
> > diff --git a/arch/arm64/include/asm/mmu_context.h
> > b/arch/arm64/include/asm/mmu_context.h
> > index c768d16b81a4..fb603ec7f61f 100644
> > --- a/arch/arm64/include/asm/mmu_context.h
> > +++ b/arch/arm64/include/asm/mmu_context.h
> > @@ -72,15 +72,16 @@ static inline void __cpu_set_tcr_t0sz(unsigned
> > long t0sz)  {
> >  	unsigned long tcr = read_sysreg(tcr_el1);
> >
> > -	if ((tcr & TCR_T0SZ_MASK) >> TCR_T0SZ_OFFSET == t0sz)
> > +	if ((tcr & TCR_T0SZ_MASK) == t0sz)
> >  		return;
> >
> >  	tcr &= ~TCR_T0SZ_MASK;
> > -	tcr |= t0sz << TCR_T0SZ_OFFSET;
> > +	tcr |= t0sz;
> >  	write_sysreg(tcr, tcr_el1);
> >  	isb();
> >  }
> >
> > +#define cpu_set_tcr_t0sz(t0sz)
> 	__cpu_set_tcr_t0sz(TCR_T0SZ(t0sz))
> >  #define cpu_set_default_tcr_t0sz()
> 	__cpu_set_tcr_t0sz(TCR_T0SZ(vabits_actual))
> >  #define cpu_set_idmap_tcr_t0sz()	__cpu_set_tcr_t0sz(idmap_t0sz)
> >
> > @@ -134,7 +135,7 @@ static inline void cpu_install_ttbr0(phys_addr_t
> > ttbr0, unsigned long t0sz)  {
> >  	cpu_set_reserved_ttbr0();
> >  	local_flush_tlb_all();
> > -	__cpu_set_tcr_t0sz(t0sz);
> > +	cpu_set_tcr_t0sz(t0sz);
> 
> Sorry, but this is wrong. Please have a look at how cpu_install_ttbr0() is
> called; specifically how trans_pgd_idmap_page() sets up 't0sz'.
> 
> So I don't think you should change cpu_install_ttbr0() at all and adding a
> cpu_set_tcr_t0sz() macro which calls TCR_T0SZ on the 't0sz' argument is a
> mistake.
> 
> Will

Oops. You're right. My mistake.
In v4, I'll remove this.


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

WARNING: multiple messages have this Message-ID (diff)
From: "Seongsu Park" <sgsu.park@samsung.com>
To: "'Will Deacon'" <will@kernel.org>
Cc: <catalin.marinas@arm.com>, <mark.rutland@arm.com>,
	<linux-arm-kernel@lists.infradead.org>,
	<linux-kernel@vger.kernel.org>,
	"'Leem	ChaeHoon'" <infinite.run@gmail.com>,
	"'Gyeonggeon Choi'" <gychoi@student.42seoul.kr>,
	"'Soomin Cho'" <to.soomin@gmail.com>,
	"'DaeRo Lee'" <skseofh@gmail.com>,
	"'kmasta'" <kmasta.study@gmail.com>
Subject: RE: [PATCH v3] arm64: Cleanup __cpu_set_tcr_t0sz()
Date: Thu, 11 Apr 2024 21:34:24 +0900	[thread overview]
Message-ID: <09b201da8c0c$95e8d050$c1ba70f0$@samsung.com> (raw)
In-Reply-To: <20240410161217.GB25225@willie-the-truck>



> 
> On Mon, Apr 08, 2024 at 11:40:16AM +0900, Seongsu Park wrote:
> > In cpu_set_default_tcr_t0sz(), it is an error to shift TCR_T0SZ_OFFSET
> > twice form TCR_T0SZ() and __cpu_set_tcr_t0sz().
> > Since TCR_T0SZ_OFFSET is 0, no error occurred.
> > We need to clarify whether the parameter of __cpu_set_tcr_t0sz is a
> > shifted value or an unshifted value.
> >
> > We have already shifted the value of t0sz in TCR_T0SZ by
TCR_T0SZ_OFFSET.
> > This is necessary for consistency with TCR_T1SZ.
> > Therefore, the parameter of __cpu_set_tcr_t0sz is clarified as a
> > shifted value.
> 
> This commit message needs reworking. I would suggest something like:
> 
>   The T0SZ field of TCR_EL1 occupies bits 0-5 of the register and
>   encodes the virtual address space translated by TTBR0_EL1. When
>   updating the field (for example, because we are switching to/from
>   the idmap page-table), __cpu_set_tcr_t0sz() erroneously treats its
>   't0sz' argument as unshifted, resulting in harmless but confusing
>   double shifts by 0 in the code.
> 
>   Remove the unnecessary shifts.
> 

Thank you for great feedback.
Please check title and description. 
If these are appropriate, I will write the same in v4.

[Title]
arm64: Cleanup __cpu_set_tcr_t0sz()

[Description]
The T0SZ field of TCR_EL1 occupies bits 0-5 of the register and
encodes the virtual address space translated by TTBR0_EL1. When
updating the field, for example because we are switching to/from
the idmap page-table, __cpu_set_tcr_t0sz() erroneously treats its
't0sz' argument as unshifted, resulting in harmless but confusing
double shifts by 0 in the code. Therefore, Remove the unnecessary
shifts.

> > Co-developed-by: Leem ChaeHoon <infinite.run@gmail.com>
> > Signed-off-by: Leem ChaeHoon <infinite.run@gmail.com>
> > Co-developed-by: Gyeonggeon Choi <gychoi@student.42seoul.kr>
> > Signed-off-by: Gyeonggeon Choi <gychoi@student.42seoul.kr>
> > Co-developed-by: Soomin Cho <to.soomin@gmail.com>
> > Signed-off-by: Soomin Cho <to.soomin@gmail.com>
> > Co-developed-by: DaeRo Lee <skseofh@gmail.com>
> > Signed-off-by: DaeRo Lee <skseofh@gmail.com>
> > Co-developed-by: kmasta <kmasta.study@gmail.com>
> > Signed-off-by: kmasta <kmasta.study@gmail.com>
> > Signed-off-by: Seongsu Park <sgsu.park@samsung.com>
> 
> Honestly, although it's great that you all meet up to look at the kernel,
> this long list of credits is a little absurd for a trivial patch like
this.
> Please can you decide who did the most work and give them the credit?
> Hopefully there will be future opportunities for you all to contribute!
> 

Okay. I got it.
In v4, I'll leave only Leem ChaeHoon and me.

> > ---
> >
> > v2:
> >  - Condition is updated
> > v3:
> >  - Commit message is updated
> >  - cpu_set_tcr_t0sz macro is added
> >
> > ---
> >  arch/arm64/include/asm/mmu_context.h | 7 ++++---
> >  1 file changed, 4 insertions(+), 3 deletions(-)
> >
> > diff --git a/arch/arm64/include/asm/mmu_context.h
> > b/arch/arm64/include/asm/mmu_context.h
> > index c768d16b81a4..fb603ec7f61f 100644
> > --- a/arch/arm64/include/asm/mmu_context.h
> > +++ b/arch/arm64/include/asm/mmu_context.h
> > @@ -72,15 +72,16 @@ static inline void __cpu_set_tcr_t0sz(unsigned
> > long t0sz)  {
> >  	unsigned long tcr = read_sysreg(tcr_el1);
> >
> > -	if ((tcr & TCR_T0SZ_MASK) >> TCR_T0SZ_OFFSET == t0sz)
> > +	if ((tcr & TCR_T0SZ_MASK) == t0sz)
> >  		return;
> >
> >  	tcr &= ~TCR_T0SZ_MASK;
> > -	tcr |= t0sz << TCR_T0SZ_OFFSET;
> > +	tcr |= t0sz;
> >  	write_sysreg(tcr, tcr_el1);
> >  	isb();
> >  }
> >
> > +#define cpu_set_tcr_t0sz(t0sz)
> 	__cpu_set_tcr_t0sz(TCR_T0SZ(t0sz))
> >  #define cpu_set_default_tcr_t0sz()
> 	__cpu_set_tcr_t0sz(TCR_T0SZ(vabits_actual))
> >  #define cpu_set_idmap_tcr_t0sz()	__cpu_set_tcr_t0sz(idmap_t0sz)
> >
> > @@ -134,7 +135,7 @@ static inline void cpu_install_ttbr0(phys_addr_t
> > ttbr0, unsigned long t0sz)  {
> >  	cpu_set_reserved_ttbr0();
> >  	local_flush_tlb_all();
> > -	__cpu_set_tcr_t0sz(t0sz);
> > +	cpu_set_tcr_t0sz(t0sz);
> 
> Sorry, but this is wrong. Please have a look at how cpu_install_ttbr0() is
> called; specifically how trans_pgd_idmap_page() sets up 't0sz'.
> 
> So I don't think you should change cpu_install_ttbr0() at all and adding a
> cpu_set_tcr_t0sz() macro which calls TCR_T0SZ on the 't0sz' argument is a
> mistake.
> 
> Will

Oops. You're right. My mistake.
In v4, I'll remove this.


  reply	other threads:[~2024-04-11 12:34 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20240408024022epcas1p176f9509f6f85fd8dbfa2dd17067a8aee@epcas1p1.samsung.com>
2024-04-08  2:40 ` [PATCH v3] arm64: Cleanup __cpu_set_tcr_t0sz() Seongsu Park
2024-04-08  2:40   ` Seongsu Park
2024-04-10 16:12   ` Will Deacon
2024-04-10 16:12     ` Will Deacon
2024-04-11 12:34     ` Seongsu Park [this message]
2024-04-11 12:34       ` Seongsu Park

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='09b201da8c0c$95e8d050$c1ba70f0$@samsung.com' \
    --to=sgsu.park@samsung.com \
    --cc=catalin.marinas@arm.com \
    --cc=gychoi@student.42seoul.kr \
    --cc=infinite.run@gmail.com \
    --cc=kmasta.study@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=skseofh@gmail.com \
    --cc=to.soomin@gmail.com \
    --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.