[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Weird altp2m behaviour when switching early to a new view
On 04/17/2018 03:21 PM, Razvan Cojocaru wrote: > On 04/17/2018 04:53 PM, George Dunlap wrote: >> On 04/17/2018 11:50 AM, Razvan Cojocaru wrote: >>> void p2m_init_altp2m_ept(struct domain *d, unsigned int i) >>> { >>> struct p2m_domain *p2m = d->arch.altp2m_p2m[i]; >>> + struct p2m_domain *hostp2m = p2m_get_hostp2m(d); >>> struct ept_data *ept; >>> >>> + p2m->max_mapped_pfn = hostp2m->max_mapped_pfn; >>> + p2m->default_access = hostp2m->default_access; >>> + p2m->domain = hostp2m->domain; >>> + p2m->logdirty_ranges = hostp2m->logdirty_ranges; >>> + p2m->global_logdirty = hostp2m->global_logdirty; >> >> This would certainly be one approach. But then we'd need to keep a lot >> more of these things in sync -- for instance, we'd have to have similar >> code to enable and disable global_logdirty on all active altp2m entries. >> >> I also don't think the max_mapped_pfn should be copied here; the fact >> that updates got filtered out before was a red herring I think. > > I initially thought so too, and now I've commented out just that one > line to remember why I couldn't remove, and the reason is this: > > (XEN) Assertion 's <= e' failed at rangeset.c:121 > (XEN) ----[ Xen-4.11-unstable x86_64 debug=y Not tainted ]---- > (XEN) CPU: 0 > (XEN) RIP: e008:[<ffff82d080228826>] rangeset_add_range+0x5/0x1e6 > (XEN) RFLAGS: 0000000000010206 CONTEXT: hypervisor (d0v0) > (XEN) rax: 0000000000000000 rbx: ffff830b577f92e0 rcx: 00000000000f0000 > (XEN) rdx: 0000000000000000 rsi: 00000000000f0000 rdi: ffff830ad6a1ce50 > (XEN) rbp: ffff83007ce87c78 rsp: ffff83007ce87c20 r8: 0000000000000000 > (XEN) r9: 0000000000000000 r10: 000000000000006f r11: 0000000000000028 > (XEN) r12: 0000000000000002 r13: 0000000000000000 r14: 0000000000000001 > (XEN) r15: ffff830ad6ddd000 cr0: 0000000080050033 cr4: 00000000003526e0 > (XEN) cr3: 0000000ad714f000 cr2: 0000000000c12000 > (XEN) fsb: 00007f794c7b2700 gsb: ffff880276c00000 gss: 0000000000000000 > (XEN) ds: 0000 es: 0000 fs: 0000 gs: 0000 ss: e010 cs: e008 > (XEN) Xen code around <ffff82d080228826> (rangeset_add_range+0x5/0x1e6): > (XEN) 00 5d c3 48 39 d6 76 02 <0f> 0b 55 48 89 e5 41 56 41 55 41 54 53 > 49 89 d5 > (XEN) Xen stack trace from rsp=ffff83007ce87c20: > (XEN) ffff82d08032c644 0000000000000206 0000000000000010 0000000000000028 > (XEN) 00000000000f0000 ffff82c000217000 0000000000000000 ffff830ad6ddd000 > (XEN) 00000000000f0240 0000000000000000 0000000000000002 ffff83007ce87cc8 > (XEN) ffff82d08032c7ac 0000000000000240 00000000000f0000 ffff82c000217000 > (XEN) ffff830ad6ddd000 00000000000f0240 0000000000000048 ffff82c000217000 > (XEN) 00000000000f0000 ffff83007ce87d38 ffff82d080362ade ffff830c5bb20000 > (XEN) ffff830ad6ddd650 0000000000000000 0000000000000000 00007f794c7bd004 > (XEN) 0000000000000048 ffff830c5bb20000 0000000000000000 ffff83007ce87e00 > (XEN) ffffffffffffffea ffff82d0802e9c64 deadbeefdeadf00d ffff83007ce87de8 > (XEN) ffff82d0802e92c1 ffff830c5bb20000 ffff83007d616000 0000000000000000 > (XEN) ffff83007ce87dd8 0000000000000000 ffff83007ce87df8 ffff83007ce87df4 > (XEN) ffff82e016a5de40 ffff83007d616000 0000000000000007 0000000000000240 > (XEN) 00000000000f0000 ffff83007ce87dc8 ffff830ad6ddd000 ffff83007ce87dc8 > (XEN) 0000000000000002 0000000000000001 00007f794c7bf004 ffff82d0802e9c64 > (XEN) deadbeefdeadf00d ffff83007ce87e48 ffff82d0802e9ce1 ffff82d080374434 > (XEN) 0000000280370001 00007f794c7be004 0000000000000020 00007f794c7bd004 > (XEN) 0000000000000048 ffff82d080374434 ffff83007ce87ef8 ffff83007d616000 > (XEN) 0000000000000029 ffff83007ce87ee8 ffff82d08036d8a6 03ff82d080374434 > (XEN) 0000000000000001 0000000000000002 00007f794c7bf004 deadbeefdeadf00d > (XEN) deadbeefdeadf00d ffff82d080374434 ffff82d080374428 ffff82d080374434 > (XEN) Xen call trace: > (XEN) [<ffff82d080228826>] rangeset_add_range+0x5/0x1e6 > (XEN) [<ffff82d08032c7ac>] p2m_change_type_range+0x66/0x7f > (XEN) [<ffff82d080362ade>] hap_track_dirty_vram+0x240/0x491 > (XEN) [<ffff82d0802e92c1>] dm.c#dm_op+0x45c/0xd06 > (XEN) [<ffff82d0802e9ce1>] do_dm_op+0x7d/0xb3 > (XEN) [<ffff82d08036d8a6>] pv_hypercall+0x1f4/0x440 > (XEN) [<ffff82d080374495>] lstar_enter+0x115/0x120 > (XEN) > (XEN) > (XEN) **************************************** > (XEN) Panic on CPU 0: > (XEN) Assertion 's <= e' failed at rangeset.c:121 > (XEN) **************************************** Right, but this is basically a bug in p2m_change_type_range(), where it handles end > max_mapped_pfn, but not start > max_mapped_pfn. It should check the latter just after grabbing the lock and bail if true. (This should probably be in a separate patch, as it's really a generic bug in p2m_change_type_range().) >> Another approach would be to maintain the logdirty_ranges and >> global_logdirty only for the host p2m, but to misconfigure entries for >> all the p2ms; and then on a misconfiguration, handle the >> misconfiguration for the hostp2m and then do a lazy propagate for the >> altp2m. On the whole that's probably more error-prone than just doing a >> for() loop, though, and not that much faster. :-) > We can try that too. If you want -- but as I said, arguably your approach is more robust; just incomplete. >> The other thing that seems to be missing from synchronization is that in >> p2m-ept.c:ept_enable_pml() sets the p2m->ept.ad bit (which ends up being >> part of the eptp). The code seems to indicate that this is required for >> PML (hardware-assisted logdirty), but I don't see anywhere this is set >> or copied from the host p2m. >> >> It might be nice to have a more structured way of keeping all these >> changes in sync, rather than relying on this open-coding everywhere. > > Very true. It has also occured to me that some of these issues would be > at least partially mitigated if altp2m was always on, but of course I > can also see why that would be frowned upon at this time. How would having it enabled all the time have helped in this situation? -George _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |