On Thu, Feb 24, 2022 at 04:18:31PM +0100, Jan Beulich wrote: > On 15.02.2022 16:25, Rahul Singh wrote: > > @@ -170,31 +170,7 @@ bool vpci_msix_read(struct vpci_msix *msix, unsigned > > long addr, > > return true; > > > > if ( VMSIX_ADDR_IN_RANGE(addr, msix->pdev->vpci, VPCI_MSIX_PBA) ) > > - { > > - /* > > - * Access to PBA. > > - * > > - * TODO: note that this relies on having the PBA identity mapped > > to the > > - * guest address space. If this changes the address will need to be > > - * translated. > > - */ > > - switch ( len ) > > - { > > - case 4: > > - *data = readl(addr); > > - break; > > - > > - case 8: > > - *data = readq(addr); > > - break; > > - > > - default: > > - ASSERT_UNREACHABLE(); > > - break; > > - } > > ... in the comment ahead of this switch() (and the assumption is likely > wrong for DomU). > > But then, Roger: What "identity mapped" is meant here? Surely not GVA -> > GPA, but rather GPA -> HPA? The address here is a guest physical one, > but read{l,q}() act on (host) virtual addresses. This would have been > easier to notice as wrong if read{l,q}() weren't allowing unsigned long > arguments to be passed to them.
Urg, indeed, thanks for noticing. I will send a patch to fix this right now. Roger.