[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH V2 21/23] xen/arm: Add mapcache invalidation handling
On 15.10.2020 18:44, Oleksandr Tyshchenko wrote: > @@ -1067,7 +1068,14 @@ static int __p2m_set_entry(struct p2m_domain *p2m, > */ > if ( p2m_is_valid(orig_pte) && > !mfn_eq(lpae_get_mfn(*entry), lpae_get_mfn(orig_pte)) ) > + { > +#ifdef CONFIG_IOREQ_SERVER > + if ( domain_has_ioreq_server(p2m->domain) && > + (p2m->domain == current->domain) && > p2m_is_ram(orig_pte.p2m.type) ) > + p2m->domain->qemu_mapcache_invalidate = true; > +#endif > p2m_free_entry(p2m, orig_pte, level); > + } For all I have to say here, please bear in mind that I don't know the internals of Arm memory management. The first odd thing here the merely MFN-based condition. It may well be that's sufficient, if there's no way to get a "not present" entry with an MFN matching any valid MFN. (This isn't just with your addition, but even before.) Given how p2m_free_entry() works (or is supposed to work in the long run), is the new code you add guaranteed to only alter leaf entries? If not, the freeing of page tables needs deferring until after qemu has dropped its mappings. And with there being refcounting only for foreign pages, how do you prevent the freeing of the page just unmapped before qemu has dropped its possible mapping? On the x86 side this problem is one of the reasons why PVH Dom0 isn't "supported", yet. At least a respective code comment would seem advisable, so the issue to be addressed won't be forgotten. > --- a/xen/arch/arm/traps.c > +++ b/xen/arch/arm/traps.c > @@ -1442,6 +1442,7 @@ static void do_trap_hypercall(struct cpu_user_regs > *regs, register_t *nr, > const union hsr hsr) > { > arm_hypercall_fn_t call = NULL; > + struct vcpu *v = current; This ought to be named "curr". Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |