[RFC PATCH 1/4] meminfo: add memory details for armv8
Tom Rini
trini at konsulko.com
Thu Jan 30 17:03:50 CET 2025
On Thu, Jan 30, 2025 at 02:36:40PM +0100, Heinrich Schuchardt wrote:
> On 1/30/25 10:35, Ilias Apalodimas wrote:
> > HI Heinrich
> >
> > On Thu, 30 Jan 2025 at 12:01, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
> > >
> > > On 1/30/25 07:20, Ilias Apalodimas wrote:
> > > > Upcoming patches are mapping memory with RO, RW^X etc permsissions.
> > > > Fix the meminfo command to display them properly
> > > >
> > > > Signed-off-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
> > > > ---
> > > > arch/arm/cpu/armv8/cache_v8.c | 18 +++++++++++++++++-
> > > > arch/arm/include/asm/armv8/mmu.h | 2 ++
> > > > cmd/meminfo.c | 5 +++++
> > > > 3 files changed, 24 insertions(+), 1 deletion(-)
> > > >
> > > > diff --git a/arch/arm/cpu/armv8/cache_v8.c b/arch/arm/cpu/armv8/cache_v8.c
> > > > index 5d6953ffedd1..a4ca56c8ed42 100644
> > > > --- a/arch/arm/cpu/armv8/cache_v8.c
> > > > +++ b/arch/arm/cpu/armv8/cache_v8.c
> > > > @@ -421,7 +421,7 @@ static int count_ranges(void)
> > > > return count;
> > > > }
> > > >
> > > > -#define ALL_ATTRS (3 << 8 | PMD_ATTRINDX_MASK)
> > > > +#define ALL_ATTRS (3 << 8 | PMD_ATTRMASK)
> > > > #define PTE_IS_TABLE(pte, level) (pte_type(&(pte)) == PTE_TYPE_TABLE && (level) < 3)
> > > >
> > > > enum walker_state {
> > > > @@ -568,6 +568,17 @@ static void pretty_print_table_attrs(u64 pte)
> > > > static void pretty_print_block_attrs(u64 pte)
> > > > {
> > > > u64 attrs = pte & PMD_ATTRINDX_MASK;
> > > > + u64 perm_attrs = pte & PMD_ATTRMASK;
> > >
> > > The variable perm_attrs is not needed. You could use pte directly.
> > >
> > > > +
> > > > + if ((perm_attrs & PTE_BLOCK_PXN) && (perm_attrs & PTE_BLOCK_UXN) &&
> > > > + perm_attrs & PTE_BLOCK_RO)
> > > > + printf("%-5s", " | RO");
> > > > + else if ((perm_attrs & PTE_BLOCK_PXN) && (perm_attrs & PTE_BLOCK_UXN))
> > > > + printf("%-5s", " | RW");
> > > > + else if (perm_attrs & PTE_BLOCK_RO)
> > > > + printf("%-5s", " | RX");
> > > > + else
> > > > + printf("%-5s", " | RWX");
> > >
> > > The string has 6 characters. "%-5s" does not match!
> >
> > Ah thanks! That's the misalignment i was chasing
> >
> > > As the string length is known using a length identifier is superfluous.
> > >
> > > It would be helpful to add descriptions to the flags in
> > > arch/arm/include/asm/armv8/mmu.h.
> > >
> > > https://documentation-service.arm.com/static/5efa1d23dbdee951c1ccdec5
> > > describes:
> > >
> > > "The Unprivileged Execute Never (UXN) and Privileged Execute Never (PXN)
> > > attributes can be set separately. This is used to prevent, for example,
> > > application code running with kernel privilege, or attempts to execute
> > > kernel code while in an unprivileged state."
> > >
> > > Shouldn't we show the values of UXN and PXN separately?
> >
> > I had that on my initial patches. But then I decided it's too Arm
> > specific to print it.
> > I was hoping more archs would fix that so I preferred RO, RW, RX since
> > it's arch agnosticI don't mind re-adding it.
>
> This code in arch/arm/cpu/armv8/cache_v8.c is architecture specific.
>
> RISC-V has flags R, W, X, U where U controls access by user mode.
>
> When printing the flags I guess we should use an architecture specific
> notation.
... and update doc/usage/cmd/meminfo.rst to note that it's printing
arch-specific flags here, perhaps with an arm64 subsection explaining
any shorthand and links to appropriate documentation ?
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20250130/db2fa8fc/attachment.sig>
More information about the U-Boot
mailing list