On 08/02/2019 17:47, Roger Pau Monné wrote: > On Fri, Feb 08, 2019 at 05:15:22PM +0100, Sander Eikelenboom wrote: >> On 08/02/2019 16:10, Roger Pau Monné wrote: >>> On Fri, Jan 25, 2019 at 07:44:40PM +0100, Sander Eikelenboom wrote: >>>> On 25/01/2019 15:38, Roger Pau Monné wrote: >>>>> On Thu, Jan 24, 2019 at 01:04:31PM +0100, Roger Pau Monné wrote: >>>>> Sorry, fixing that error took longer than expected, and requires >>>>> modifying quite a lot of code, so I'm not sure whether it's something >>>>> to consider for 4.12, I have to think about it. >>>> >>>> I understand, especially since PVH dom0 is marked as experimental. >>>> >>>>> In the meantime, can you please test the following branch: >>>>> >>>>> git://xenbits.xen.org/people/royger/xen.git iommu-fixes-v2 >>>>> >>>>> I've been able to successfully create a PVH guest from a PVH dom0 on >>>>> AMD hardware using this branch. >>>> >>>> On the other hand, with a quick test I can confirm that booting a PVH guest from a PVH dom0 now works for me as well ! >>>> (and booting this build as PV dom0, with my normal PVH/HVM mix of guests still works, no regressions for me so far) >> >> >> >>> Sorry for bothering you again, but could you give the following branch >>> a test: >> >> No problem, happy to keep testing until it works and is in good enough shape to get committed. >> >> And fortunately you asked, because unfortunately it doesn't boot as pvhdom0, serial log is attached. > > Thanks! > > Can you try with the following debug patch on top? This should print a > message before hitting the assert, hopefully giving us more > information. > > Roger. Sure, I was also missing a sync_console on the Xen cmdline, serial log attached. -- Sander > ---8<--- > diff --git a/xen/arch/x86/mm/p2m-pt.c b/xen/arch/x86/mm/p2m-pt.c > index 5ad7a36269..bf647e7d26 100644 > --- a/xen/arch/x86/mm/p2m-pt.c > +++ b/xen/arch/x86/mm/p2m-pt.c > @@ -648,8 +648,13 @@ p2m_pt_set_entry(struct p2m_domain *p2m, gfn_t gfn_, mfn_t mfn, > !rangeset_overlaps_range(mmio_ro_ranges, mfn_x(mfn), > mfn_x(mfn) + PFN_DOWN(MB(2)))); > else > + { > + if ( !mfn_valid(mfn) && (!mfn_eq(mfn, INVALID_MFN) || > + !p2m_allows_invalid_mfn(p2mt)) ) > + printk("mfn: %#lx type: %d\n", mfn_x(mfn), p2mt); > ASSERT(mfn_valid(mfn) || (mfn_eq(mfn, INVALID_MFN) && > p2m_allows_invalid_mfn(p2mt))); > + } > l2e_content = mfn_valid(mfn) || p2m_allows_invalid_mfn(p2mt) > ? p2m_l2e_from_pfn(mfn_x(mfn), > p2m_type_to_flags(p2m, p2mt, mfn, 1)) >