|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v1 6/6] xen/riscv: enable DOMAIN_BUILD_HELPERS
On 2/12/26 5:39 PM, Jan Beulich wrote: On 12.02.2026 17:21, Oleksii Kurochko wrote: IPA stands for GPA. (maybe it would better to rename the in common code to gpa too). It was used as common code uses p2m_ipa_bits. Yes, I miss to set p2m_ipa_bits properly in p2m_init() where G-stage MMU mode is set. Judging from the comment at the decl, isn't it PPN width (plus PAGE_SHIFT) that it describes? It is PPN width + PAGE_SHIFT what is equal to PADDR_BITS (44bit PPN + 12 bit PAGE_SHIFT). - With there not being anyone writing to the variable, why is it not const (or even a #define), or at the very least __ro_after_init? And no, "Arm has it like this" doesn't count as an answer. Considering all the review comments you've got so far you should know by now that you shouldn't copy things blindly. It was added because of the usage in common/device-tree/domain-build.c. It was done in the same way as it is also possible that an IOMMU shares the P2M page tables with the CPU's G-stage(stage-2) translation, so GPA size must not exceed what the IOMMU can handle (or G-stage address limitation if it is smaller then IOMMU's). (a) It could be that MMU uses Sv57, IOMMU uses Sv39, so in this case if IOMMU and MMU shares G-stae page tables it is necessary to respect guest address limitation. But considering that according to RISC-V IOMMU spec ... : The IOMMU must support all the virtual memory extensions that are supported by any of the harts in the system. ... (a) isn't real issue as we could always program IOMMU to use the same as MMU mode and then p2m_ipa_bits __ro_after_init should work well. It can't be const as I mentioned above I missed to initialize it properly in p2m_init() code. (It is also a case for RISC-V that IOMMU could use x4 mode, so MMU uses Sv57 and IOMMU uses Sv57x4.) --- a/xen/include/public/arch-riscv.h +++ b/xen/include/public/arch-riscv.h @@ -50,6 +50,14 @@ typedef uint64_t xen_ulong_t;#if defined(__XEN__) || defined(__XEN_TOOLS__) +#define GUEST_RAM_BANKS 1 It is needed for allocate_memory() for guest domains, so it is expected to be compile-time constant with the current code of common dom0less approach. It represents the start of RAM address for DomU and the maximum RAM size (the actual size will be calculated based on what is mentioned in DomU node in dts) and then will be used to generate memory node for DomU (GUEST_RAM0_BASE as RAM start address and min(GUEST_RAM0_SIZE, dts->domU->memory->size) as a RAM size). And if so, why would guests be limited to just 2 Gb? It is enough for guest domain I am using in dom0less mode. That may more efficiently be RV32 guests then, with perhaps just an RV32 hypervisor. I didn't get this point. Could you please explain differently what do you mean? ~ Oleksii
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |