On Tue, Aug 13, 2019 at 03:14:17PM -0600, Alex Williamson wrote: > On Tue, 13 Aug 2019 22:37:14 +0200 > Paolo Bonzini wrote: > > > On 13/08/19 22:19, Sean Christopherson wrote: > > > Yes? Shadow pages are stored in a hash table, for_each_valid_sp() walks > > > all entries for a given gfn. The sp->gfn check is there to skip entries > > > that hashed to the same list but for a completely different gfn. > > > > > > Skipping the gfn check would be sort of a lightweight zap all in the > > > sense that it would zap shadow pages that happend to collide with the > > > target memslot/gfn but are otherwise unrelated. > > > > > > What happens if you give just the GPU BAR at 0x80000000 a pass, i.e.: > > > > > > if (sp->gfn != gfn && sp->gfn != 0x80000) > > > continue; > > Not having any luck with this yet. Tried 0x80000, 0x8xxxxx, 0. I've no idea if it would actually be interesting, but something to try would be to zap only emulated mmio SPTEs (in addition to the memslot). If that test passes then I think it might indicate a problem with device enumeration as opposed to the mapping of the device itself ("think" and "might" being the operative words). Patch attached.