|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 04/17] xen/riscv: construct the P2M pages pool for guests
On 25.06.2025 16:48, Oleksii Kurochko wrote:
>
> On 6/18/25 5:53 PM, Jan Beulich wrote:
>> On 10.06.2025 15:05, Oleksii Kurochko wrote:
>>> @@ -18,10 +20,20 @@ struct arch_vcpu_io {
>>> struct arch_vcpu {
>>> };
>>>
>>> +struct paging_domain {
>>> + spinlock_t lock;
>>> + /* Free P2M pages from the pre-allocated P2M pool */
>>> + struct page_list_head p2m_freelist;
>>> + /* Number of pages from the pre-allocated P2M pool */
>>> + unsigned long p2m_total_pages;
>>> +};
>>> +
>>> struct arch_domain {
>>> struct hvm_domain hvm;
>>>
>>> struct p2m_domain p2m;
>>> +
>>> + struct paging_domain paging;
>> With the separate structures, do you have plans to implement e.g. shadow
>> paging?
>> Or some other paging mode beyond the basic one based on the H extension?
>
> No, there is no such plans.
>
>> If the
>> structures are to remain separate, may I suggest that you keep things
>> properly
>> separated (no matter how e.g. Arm may have it) in terms of naming? I.e. no
>> single "p2m" inside struct paging_domain.
>
> Arm doesn't implement shadow paging too (AFAIK) and probably this approach was
> copied from x86, and then to RISC-V.
> I thought that a reason for that was just to have two separate entities: one
> which
> covers page tables and which covers the full available guest memory.
> And if the only idea of that was to have shadow paging then I don't how it
> should
> be done better. As p2m code is based on Arm's, perhaps, it makes sense to have
> this stuff separated, so easier porting will be.
>
>>> @@ -105,6 +106,9 @@ int p2m_init(struct domain *d)
>>> struct p2m_domain *p2m = p2m_get_hostp2m(d);
>>> int rc;
>>>
>>> + spin_lock_init(&d->arch.paging.lock);
>>> + INIT_PAGE_LIST_HEAD(&d->arch.paging.p2m_freelist);
>> If you want p2m and paging to be separate, you will want to put these in a
>> new
>> paging_init().
>
> I am not really understand what is wrong to have it here, but likely it is
> because
> I don't really get an initial purpose of having p2m and paging separately.
> It seems like p2m and paging are connected between each other, so it is fine
> to init them together.
If you want to retain the separation, imo you want to follow what x86 has:
paging_domain_init() calling p2m_init(). And d->arch.paging.* would then
be initialized in paging_domain_init(), like x86 has it.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |