|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 11/17] xen/riscv: implement p2m_set_entry() and __p2m_set_entry()
On 7/7/25 5:15 PM, Jan Beulich wrote:
On 07.07.2025 17:00, Oleksii Kurochko wrote:On 7/7/25 2:53 PM, Jan Beulich wrote:On 07.07.2025 13:46, Oleksii Kurochko wrote:On 7/7/25 9:20 AM, Jan Beulich wrote:On 04.07.2025 17:01, Oleksii Kurochko wrote:On 7/1/25 3:49 PM, Jan Beulich wrote:On 10.06.2025 15:05, Oleksii Kurochko wrote: Yeah, Arm isn't so strict in definition of p2m_is_valid() and it seems like x86 and Arm have different understanding what is valid. Except what mentioned in the comment that grant types aren't considered valid for x86 (and shouldn't be the same then for Arm?), it isn't clear why x86's p2m_is_valid() is stricter then Arm's one and if other arches should be also so strict. It seems like from the point of view of mapping/unmapping it is enough just to verify a "copy" of PTE's valid bit (in terms of P2M it is p2m_invalid type). Plus can't a guest also arrange for an entry's type to move to p2m_invalid? That's then still an entry that was modified by the guest.I am not really sure that I fully understand the question. Do you ask if a guest can do something which will lead to a call of p2m_set_entry() with p2m_invalid argument?That I'm not asking, but rather stating. I.e. I expect such is possible.If yes, then it seems like it will be done only in case of p2m_remove_mapping() what will mean that alongside with p2m_invalid INVALID_MFN will be also passed, what means this entry isn't expected to be used anymore.Right. But such an entry would still have been "modified" by the guest.Yes, but nothing then is needed to do with it.I understand that. Maybe I'm overly picky, but all of the above was in response to you saying "It is done to track which page was modified by a guest." And I'm simply trying to get you to use precise wording, both in code comments and in discussions. In a case like the one here I simply can't judge whether you simply expressed yourself not clear enough, or whether you indeed meant what you said.+ /* + * Don't take into account the MFN when removing mapping (i.e + * MFN_INVALID) to calculate the correct target order. + * + * XXX: Support superpage mappings if nr is not aligned to a + * superpage size. + */Does this really need leaving as a to-do?I think so, yes. It won’t break the current workflow if|nr| isn’t aligned, a smaller order will simply be chosen.Well, my question was more like "Isn't it simple enough to cover the case right away?" My initial idea was that if something went wrong ( rc != 0 ) then just panic(). But based on your questions it seems like it isn't the best one idea. The only use case I can think of is that the caller might try to map the remaining GFNs again. But that doesn’t seem very useful, if|p2m_set_entry()| wasn’t able to map the full range, it likely indicates a serious issue, and retrying would probably result in the same error. The same applies to rolling back the state. It wouldn’t be difficult to add a local array to track all modified PTEs and then use it to revert the state if needed. But again, what would the caller do after the rollback? At this point, it still seems like the best option is simply to|panic(). | Basically, I don’t see or understand the cases where knowing how many GFNs were successfully mapped, or whether a rollback was performed, would really help — because in most cases, I don’t have a better option than just calling|panic()| at the end.panic()-ing is of course only a last resort. Anything related to domain handling would better crash only the domain in question. And even that only if suitable error handling isn't possible. And if there is no still any runnable domain available, for example, we are creating domain and some p2m mapping is called? Will it be enough just ignore to boot this domain? If yes, then it is enough to return only error code without returning how many GFNs were mapped or rollbacking as domain won't be ran anyway. (just to mention, I am not trying to convince you that rollback or returning of an amount of GFNs isn't necessary, I just trying to understand what is the best implementation of handling none-fully mapped mappings you mentioned) For example, if I call|map_regions_p2mt()| for an MMIO region described in a device tree node, and the mapping fails partway through, I’m left with two options: either ignore the device (if it's not essential for Xen or guest functionality) and continue booting; in which case I’d need to perform a rollback, and simply knowing the number of successfully mapped GFNs may not be enough or, more likely, just panic.Well, no. For example, before even trying to map you could check that the range of P2M entries covered is all empty. Could it be that they aren't all empty? Then it seems like we have overlapping and we can't just do a mapping, right? Won't be this procedure consume a lot of time as it is needed to go through each page tables for each entry. _Then_ you know how to correctly roll back. And yes, doing so may not even require passing back information on how much of a region was successfully mapped. If P2M entries were empty before start of the mapping then it is enough to just go through the same range (sgfn,nr,smfn) and just clean them, right? Thanks. ~ Oleksii
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |