All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oleksii <oleksii.kurochko@gmail.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: Alistair Francis <alistair.francis@wdc.com>,
	Bob Eshleman <bobbyeshleman@gmail.com>,
	Connor Davis <connojdavis@gmail.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	 Julien Grall <julien@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
	 xen-devel@lists.xenproject.org
Subject: Re: [PATCH v3 27/34] xen/riscv: define an address of frame table
Date: Tue, 23 Jan 2024 18:50:54 +0200	[thread overview]
Message-ID: <2267a8dc4b1be495be65c2d7e22378cd2394829c.camel@gmail.com> (raw)
In-Reply-To: <39837f92-d139-49c3-9e5f-a79dd585f050@suse.com>

On Tue, 2024-01-23 at 12:32 +0100, Jan Beulich wrote:
> On 22.12.2023 16:13, Oleksii Kurochko wrote:
> > Also, the patch adds some helpful macros that assist in avoiding
> > the redefinition of memory layout for each MMU mode.
> > 
> > Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
> > ---
> > Changes in V3:
> >  - drop OFFSET_BITS, and use PAGE_SHIFT instead.
> >  - code style fixes.
> >  - add comment how macros are useful.
> >  - move all memory related layout definitions close to comment with
> > memory layout description.
> >  - make memory layout description generic for any MMU mode.
> > ---
> > Changes in V2:
> >  - Nothing changed. Only rebase.
> > ---
> >  xen/arch/riscv/include/asm/config.h | 85 +++++++++++++++++++------
> > ----
> >  1 file changed, 55 insertions(+), 30 deletions(-)
> > 
> > diff --git a/xen/arch/riscv/include/asm/config.h
> > b/xen/arch/riscv/include/asm/config.h
> > index f0544c6a20..fb9fc9daaa 100644
> > --- a/xen/arch/riscv/include/asm/config.h
> > +++ b/xen/arch/riscv/include/asm/config.h
> > @@ -6,6 +6,14 @@
> >  #include <xen/const.h>
> >  #include <xen/page-size.h>
> >  
> > +#ifdef CONFIG_RISCV_64
> > +#define CONFIG_PAGING_LEVELS 3
> > +#define RV_STAGE1_MODE SATP_MODE_SV39
> > +#else
> > +#define CONFIG_PAGING_LEVELS 2
> > +#define RV_STAGE1_MODE SATP_MODE_SV32
> > +#endif
> > +
> >  /*
> >   * RISC-V64 Layout:
> >   *
> > @@ -22,25 +30,56 @@
> >   *
> >   * It means that:
> >   *   top VA bits are simply ignored for the purpose of translating
> > to PA.
> > +#endif
> >   *
> > - *
> > ===================================================================
> > =========
> > - *    Start addr    |   End addr        |  Size  | Slot      
> > |area description
> > - *
> > ===================================================================
> > =========
> > - * FFFFFFFFC0800000 |  FFFFFFFFFFFFFFFF |1016 MB | L2 511     |
> > Unused
> > - * FFFFFFFFC0600000 |  FFFFFFFFC0800000 |  2 MB  | L2 511     |
> > Fixmap
> > - * FFFFFFFFC0200000 |  FFFFFFFFC0600000 |  4 MB  | L2 511     |
> > FDT
> > - * FFFFFFFFC0000000 |  FFFFFFFFC0200000 |  2 MB  | L2 511     |
> > Xen
> > - *                 ...                  |  1 GB  | L2 510     |
> > Unused
> > - * 0000003200000000 |  0000007F80000000 | 309 GB | L2 200-509 |
> > Direct map
> > - *                 ...                  |  1 GB  | L2 199     |
> > Unused
> > - * 0000003100000000 |  00000031C0000000 |  3 GB  | L2 196-198 |
> > Frametable
> > - *                 ...                  |  1 GB  | L2 195     |
> > Unused
> > - * 0000003080000000 |  00000030C0000000 |  1 GB  | L2 194     |
> > VMAP
> > - *                 ...                  | 194 GB | L2 0 - 193 |
> > Unused
> > - *
> > ===================================================================
> > =========
> > + *       SATP_MODE_SV32   | SATP_MODE_SV39   | SATP_MODE_SV48   |
> > SATP_MODE_SV57
> > + *     
> > ==================|==================|==================|==========
> > =======
> > + * BA0 | FFFFFFFFFFE00000 | FFFFFFFFC0000000 | FFFFFF8000000000 |
> > FFFF000000000000
> > + * BA1 | 0000000019000000 | 0000003200000000 | 0000640000000000 |
> > 00C8000000000000
> > + * BA2 | 0000000018800000 | 0000003100000000 | 0000620000000000 |
> > 00C4000000000000
> > + * BA3 | 0000000018400000 | 0000003080000000 | 0000610000000000 |
> > 00C2000000000000
> >   *
> > -#endif
> > + *
> > ===================================================================
> > ============
> > + * Start addr     |   End addr          |  Size  | Root PT slot |
> > Area description
> > + *
> > ===================================================================
> > ============
> > + * BA0 + 0x800000 |  FFFFFFFFFFFFFFFF   |1016 MB |     511      |
> > Unused
> > + * BA0 + 0x400000 |  BA0 + 0x800000     |  2 MB  |     511      |
> > Fixmap
> > + * BA0 + 0x200000 |  BA0 + 0x400000     |  4 MB  |     511      |
> > FDT
> > + * BA0            |  BA0 + 0x200000     |  2 MB  |     511      |
> > Xen
> > + *                 ...                  |  1 GB  |     510      |
> > Unused
> > + * BA1 + 0x000000 |  BA1 + 0x4D80000000 | 309 GB |   200-509    |
> > Direct map
> 
> This definitely can't be right for SV32. Others may be problematic,
> too, like ...
> 
> > + *                 ...                  |  1 GB  |     199      |
> > Unused
> > + * BA2 + 0x000000 |  BA2 + 0xC0000000   |  3 GB  |   196-198    |
> > Frametable
> 
> ... this one. Otoh I'd expect both to potentially be much larger in
> SV48 and SV57 modes.
Regarding Sv32, it looks to me the only BA0 and End addr at the first
line isn't correct as address size is 32.

Regarding other modes, yes, it should be changed Size column. Also, the
size of frame table should be recalculated.

Do we really need size column?

Wouldn't it be enough only have PT slot number?

Would it be better to have separate table for each mode?

Probably, it would be more useful to print memory map to Xen console.

> 
> > + *                 ...                  |  1 GB  |     195      |
> > Unused
> > + * BA3 + 0x000000 |  BA3 + 0x40000000   |  1 GB  |     194      |
> > VMAP
> > + *                 ...                  | 194 GB |   0 - 193    |
> > Unused
> > + *
> > ===================================================================
> > ============
> >   */
> > +#define VPN_BITS    (9)
> 
> This need to move ...
> 
> > +#define HYP_PT_ROOT_LEVEL (CONFIG_PAGING_LEVELS - 1)
> > +
> > +#ifdef CONFIG_RISCV_64
> 
> ... here, I think, for not being applicable to SV32?
You are right, it is not applicable for Sv32. In case of Sv32, it
should be 10.
But I am not sure that it is correct only to move this definition as
RISCV-64 can also use Sv32. So it looks like VPN_BITS should be "#ifdef
RV_STAGE1_MODE == Sv32".

> 
> > +#define SLOTN_ENTRY_BITS        (HYP_PT_ROOT_LEVEL * VPN_BITS +
> > PAGE_SHIFT)
> > +#define SLOTN(slot)             (_AT(vaddr_t, slot) <<
> > SLOTN_ENTRY_BITS)
> > +#define SLOTN_ENTRY_SIZE        SLOTN(1)
> 
> Do you have any example of how/where this going to be used?
Yes, it will be used to define DIRECTMAP_SIZE:
#define DIRECTMAP_SIZE          (SLOTN_ENTRY_SIZE * (509-200))
> 
> > +#define XEN_VIRT_START 0xFFFFFFFFC0000000 /* (_AC(-1, UL) + 1 -
> > GB(1)) */
> 
> Won't /* -GB(1) */ do, thus allowing the line to also be padded such
> that
> it matches neighboring ones in layout?
Could you please clarify what do you mean by padded here? The intention
was to show that 1 GB is used for Xen, FDT and fixmap.

~ Oleksii
> 
> > +#define FRAMETABLE_VIRT_START   SLOTN(196)
> > +#define FRAMETABLE_SIZE         GB(3)
> > +#define FRAMETABLE_NR           (FRAMETABLE_SIZE /
> > sizeof(*frame_table))
> > +#define FRAMETABLE_VIRT_END     (FRAMETABLE_VIRT_START +
> > FRAMETABLE_SIZE - 1)
> > +
> > +#define VMAP_VIRT_START         SLOTN(194)
> > +#define VMAP_VIRT_SIZE          GB(1)
> > [...]
> 



  reply	other threads:[~2024-01-23 16:51 UTC|newest]

Thread overview: 146+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-22 15:12 [PATCH v3 00/34] Enable build of full Xen for RISC-V Oleksii Kurochko
2023-12-22 15:12 ` [PATCH v3 01/34] xen/riscv: disable unnecessary configs Oleksii Kurochko
2023-12-22 15:12 ` [PATCH v3 02/34] xen/riscv: use some asm-generic headers Oleksii Kurochko
2023-12-22 15:12 ` [PATCH v3 03/34] xen: add support in public/hvm/save.h for PPC and RISC-V Oleksii Kurochko
2024-01-04 11:01   ` Jan Beulich
2024-01-08 14:46     ` Oleksii
2023-12-22 15:12 ` [PATCH v3 04/34] xen/riscv: introduce cpufeature.h Oleksii Kurochko
2023-12-22 15:12 ` [PATCH v3 05/34] xen/riscv: introduce guest_atomics.h Oleksii Kurochko
2024-01-11 15:57   ` Jan Beulich
2024-01-15  9:26     ` Oleksii
2023-12-22 15:12 ` [PATCH v3 06/34] xen: avoid generation of empty asm/iommu.h Oleksii Kurochko
2024-01-04 11:04   ` Jan Beulich
2024-01-08 14:47     ` Oleksii
2023-12-22 15:12 ` [PATCH v3 07/34] xen/asm-generic: introdure nospec.h Oleksii Kurochko
2024-01-04 11:06   ` Jan Beulich
2024-01-04 11:13     ` Andrew Cooper
2024-01-04 12:03       ` Jan Beulich
2024-01-08 14:58     ` Oleksii
2024-01-05 19:02   ` Shawn Anastasio
2023-12-22 15:12 ` [PATCH v3 08/34] xen/riscv: introduce setup.h Oleksii Kurochko
2023-12-22 15:12 ` [PATCH v3 09/34] xen/riscv: introduce system.h Oleksii Kurochko
2024-01-11 16:00   ` Jan Beulich
2024-01-15  9:28     ` Oleksii
2023-12-22 15:12 ` [PATCH v3 10/34] xen/riscv: introduce bitops.h Oleksii Kurochko
2024-01-15 16:44   ` Jan Beulich
2024-01-16 13:06     ` Oleksii
2024-01-16 13:24       ` Jan Beulich
2024-01-17 11:13         ` Oleksii
2024-01-17 11:17           ` Jan Beulich
2024-01-17 11:37             ` Oleksii
2024-01-17 13:42               ` Jan Beulich
2024-01-18  9:43                 ` Oleksii
2024-01-18 11:01                   ` Jan Beulich
2024-01-19  9:16                     ` Oleksii
2024-01-19  9:20                       ` Jan Beulich
2024-01-18 11:03   ` Jan Beulich
2024-01-19  9:09     ` Oleksii
2024-01-19  9:14       ` Jan Beulich
2024-01-19  9:30         ` Oleksii
2023-12-22 15:12 ` [PATCH v3 11/34] xen/riscv: introduce flushtlb.h Oleksii Kurochko
2023-12-22 15:12 ` [PATCH v3 12/34] xen/riscv: introduce smp.h Oleksii Kurochko
2024-01-11 16:36   ` Jan Beulich
2024-01-15  9:35     ` Oleksii
2023-12-22 15:12 ` [PATCH v3 13/34] xen/riscv: introduce cmpxchg.h Oleksii Kurochko
2024-01-22 16:27   ` Jan Beulich
2024-01-23 10:15     ` Oleksii
2024-01-23 10:28       ` Jan Beulich
2024-01-23 12:18         ` Oleksii
2024-01-23 13:27           ` Jan Beulich
2024-01-24  9:15             ` Oleksii
2024-01-30 14:57     ` Oleksii
2024-01-30 15:05       ` Jan Beulich
2024-01-30 15:16         ` Oleksii
2023-12-22 15:12 ` [PATCH v3 14/34] xen/riscv: introduce io.h Oleksii Kurochko
2024-01-15 16:57   ` Jan Beulich
2024-01-16 15:20     ` Oleksii
2024-01-16 16:09       ` Jan Beulich
2024-01-31 17:30         ` Oleksii
2023-12-22 15:12 ` [PATCH v3 15/34] xen/riscv: introduce atomic.h Oleksii Kurochko
2024-01-22 16:56   ` Jan Beulich
2024-01-23 10:21     ` Oleksii
2024-01-23 10:30       ` Jan Beulich
2024-01-23 12:24         ` Oleksii
2024-01-23 13:30           ` Jan Beulich
2024-01-24  9:23             ` Oleksii
2024-01-24 11:19               ` Jan Beulich
2024-01-24 14:56                 ` Oleksii
2023-12-22 15:13 ` [PATCH v3 16/34] xen/lib: introduce generic find next bit operations Oleksii Kurochko
2024-01-23 11:14   ` Jan Beulich
2024-01-23 12:34     ` Oleksii
2024-01-23 13:37       ` Jan Beulich
2024-01-24  9:34         ` Oleksii
2024-01-24 11:24           ` Jan Beulich
2024-01-24 15:04             ` Oleksii
2024-01-24 15:32               ` Jan Beulich
2024-01-26  9:44         ` Oleksii
2024-01-26  9:48           ` Jan Beulich
2024-01-26  9:56             ` Oleksii
2023-12-22 15:13 ` [PATCH v3 17/34] xen/riscv: add compilation of generic find-next-bit.c Oleksii Kurochko
2023-12-22 15:13 ` [PATCH v3 18/34] xen/riscv: introduce domain.h Oleksii Kurochko
2023-12-22 15:13 ` [PATCH v3 19/34] xen/riscv: introduce guest_access.h Oleksii Kurochko
2024-01-23 11:16   ` Jan Beulich
2023-12-22 15:13 ` [PATCH v3 20/34] xen/riscv: introduce irq.h Oleksii Kurochko
2024-01-23 11:18   ` Jan Beulich
2024-01-23 12:25     ` Oleksii
2023-12-22 15:13 ` [PATCH v3 21/34] xen/riscv: introduce p2m.h Oleksii Kurochko
2024-01-11 23:11   ` Shawn Anastasio
2024-01-15  9:37     ` Oleksii
2024-01-12 10:39   ` Julien Grall
2024-01-12 11:06     ` Jan Beulich
2024-01-12 11:09       ` Julien Grall
2024-01-15 10:35     ` Oleksii
2024-01-15 11:01       ` Jan Beulich
2024-01-16  9:44         ` Oleksii
2024-01-16 17:12           ` Julien Grall
2024-01-17  9:32             ` Oleksii
2023-12-22 15:13 ` [PATCH v3 22/34] xen/riscv: introduce regs.h Oleksii Kurochko
2024-01-15 17:00   ` Jan Beulich
2024-01-16  9:46     ` Oleksii
2023-12-22 15:13 ` [PATCH v3 23/34] xen/riscv: introduce time.h Oleksii Kurochko
2023-12-22 15:13 ` [PATCH v3 24/34] xen/riscv: introduce event.h Oleksii Kurochko
2023-12-22 15:13 ` [PATCH v3 25/34] xen/riscv: introduce monitor.h Oleksii Kurochko
2023-12-22 15:13 ` [PATCH v3 26/34] xen/riscv: add definition of __read_mostly Oleksii Kurochko
2023-12-22 15:13 ` [PATCH v3 27/34] xen/riscv: define an address of frame table Oleksii Kurochko
2024-01-23 11:32   ` Jan Beulich
2024-01-23 16:50     ` Oleksii [this message]
2024-01-24  8:07       ` Jan Beulich
2024-01-24 10:01         ` Oleksii
2023-12-22 15:13 ` [PATCH v3 28/34] xen/riscv: add required things to current.h Oleksii Kurochko
2024-01-23 11:35   ` Jan Beulich
2024-01-23 16:52     ` Oleksii
2023-12-22 15:13 ` [PATCH v3 29/34] xen/riscv: add minimal stuff to page.h to build full Xen Oleksii Kurochko
2024-01-23 11:36   ` Jan Beulich
2024-01-23 16:54     ` Oleksii
2024-01-24  8:09       ` Jan Beulich
2024-01-24 10:02         ` Oleksii
2023-12-22 15:13 ` [PATCH v3 30/34] xen/riscv: add minimal stuff to processor.h " Oleksii Kurochko
2024-01-23 11:39   ` Jan Beulich
2024-01-23 17:08     ` Oleksii
2024-01-24  8:19       ` Jan Beulich
2024-01-24 10:12         ` Oleksii
2024-01-24 11:27           ` Jan Beulich
2024-01-24 15:33             ` Oleksii
2024-01-24 15:38               ` Jan Beulich
2023-12-22 15:13 ` [PATCH v3 31/34] xen/riscv: add minimal stuff to mm.h " Oleksii Kurochko
2023-12-22 16:32   ` Oleksii
2023-12-22 18:16     ` Oleksii
2024-01-11 16:43     ` Jan Beulich
2024-01-15 10:36       ` Oleksii
2024-01-23 13:03   ` Jan Beulich
2024-01-23 17:27     ` Oleksii
2024-01-24  8:23       ` Jan Beulich
2024-02-02 17:30     ` Oleksii
2024-02-05  7:46       ` Jan Beulich
2024-02-05 12:49         ` Oleksii
2024-02-05 14:05           ` Jan Beulich
2024-02-05 14:40             ` Oleksii
2023-12-22 15:13 ` [PATCH v3 32/34] xen/rirscv: add minimal amount of stubs " Oleksii Kurochko
2024-01-23 13:20   ` Jan Beulich
2024-01-23 17:31     ` Oleksii
2023-12-22 15:13 ` [PATCH v3 33/34] xen/riscv: enable full Xen build Oleksii Kurochko
2023-12-22 15:13 ` [PATCH v3 34/34] xen/README: add compiler and binutils versions for RISC-V64 Oleksii Kurochko
2024-01-23 11:22   ` Jan Beulich
2024-01-23 14:49     ` Oleksii
2024-01-23 17:05       ` Jan Beulich
2024-01-23 17:34         ` Oleksii

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=2267a8dc4b1be495be65c2d7e22378cd2394829c.camel@gmail.com \
    --to=oleksii.kurochko@gmail.com \
    --cc=alistair.francis@wdc.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=bobbyeshleman@gmail.com \
    --cc=connojdavis@gmail.com \
    --cc=george.dunlap@citrix.com \
    --cc=jbeulich@suse.com \
    --cc=julien@xen.org \
    --cc=sstabellini@kernel.org \
    --cc=wl@xen.org \
    --cc=xen-devel@lists.xenproject.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.