[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 3/3] xen/vpci: msix: move read/write call to MSI-X PBA entry to arch file
On 15.02.2022 16:25, Rahul Singh wrote: > {read,write}{l,q} function argument is different for ARM and x86. > ARM {read,wrie}(l,q} function argument is pointer whereas X86 > {read,wrie}(l,q} function argument is address itself. I'm afraid I don't follow: x86 has #define readl(x) (*(volatile uint32_t *)(x)) #define readq(x) (*(volatile uint64_t *)(x)) That's no different from Arm64: #define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; }) #define readl_relaxed(c) ({ u32 __v = le32_to_cpu((__force __le32)__raw_readl(c)); __v; }) static inline u32 __raw_readl(const volatile void __iomem *addr) The difference is whether the address is expressed as a pointer, or _may_ also be expressed as unsigned long. IOW the x86 variant is perfectly fine to be passed e.g. a void * (preferably qualified appropriately). The conversion from unsigned long to a pointer type is actually expressed ... > @@ -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. Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |