On 31.07.2025 17:58, Oleksii Kurochko wrote: > --- a/xen/arch/riscv/include/asm/p2m.h > +++ b/xen/arch/riscv/include/asm/p2m.h > @@ -3,11 +3,45 @@ > #define ASM__RISCV__P2M_H > > #include <xen/errno.h> > +#include <xen/mm.h> > +#include <xen/rwlock.h> > +#include <xen/types.h> > > #include <asm/page-bits.h> > > #define paddr_bits PADDR_BITS > > +/* Get host p2m table */ > +#define p2m_get_hostp2m(d) (&(d)->arch.p2m) > + > +/* Per-p2m-table state */ > +struct p2m_domain { > + /* > + * Lock that protects updates to the p2m. > + */ > + rwlock_t lock; > + > + /* Pages used to construct the p2m */ > + struct page_list_head pages; > + > + /* Indicate if it is required to clean the cache when writing an entry */ > + bool clean_pte;
I'm a little puzzled by this field still being here, despite the extensive revlog commentary. If you really feel you need to keep it, please ... > + /* Back pointer to domain */ > + struct domain *domain; > + > + /* > + * P2M updates may required TLBs to be flushed (invalidated). > + * > + * Flushes may be deferred by setting 'need_flush' and then flushing > + * when the p2m write lock is released. > + * > + * If an immediate flush is required (e.g, if a super page is > + * shattered), call p2m_tlb_flush_sync(). > + */ > + bool need_flush; ... group booleans together, for better packing. Jan