On 11/14/23 04:13, Jan Beulich wrote: > On 13.11.2023 23:21, Stewart Hildebrand wrote: >> --- a/xen/arch/x86/include/asm/domain.h >> +++ b/xen/arch/x86/include/asm/domain.h >> @@ -503,6 +503,8 @@ struct arch_domain >> #define has_vpit(d) (!!((d)->arch.emulation_flags & X86_EMU_PIT)) >> #define has_pirq(d) (!!((d)->arch.emulation_flags & >> X86_EMU_USE_PIRQ)) >> >> +#define arch_needs_vpci(d) ({ (void)(d); false; }) > > See my comments on the v5 thread on both this and ...
So, the goal here is to return true for a PVH dom0, and false otherwise (for now). Since dom0 can't feasibly be full HVM, and is_hvm_domain(d) returns true for PVH, how about the following? /* TODO: re-visit when vPCI is enabled for PVH domUs. */ #define arch_needs_vpci(d) ({ \ const struct domain *_d = (d); \ is_hardware_domain(_d) && is_hvm_domain(_d); }) Link to v5 thread for reference [1] [1] https://lists.xenproject.org/archives/html/xen-devel/2023-11/msg00968.html > >> --- a/xen/drivers/passthrough/pci.c >> +++ b/xen/drivers/passthrough/pci.c >> @@ -1542,6 +1542,18 @@ void iommu_dev_iotlb_flush_timeout(struct domain *d, >> struct pci_dev *pdev) >> pcidevs_unlock(); >> } >> >> +static bool needs_vpci(const struct domain *d) >> +{ >> + if ( is_hardware_domain(d) ) >> + return false; > > ... this. I'll move this check to the Arm arch_needs_vpci() in xen/arch/arm/include/asm/domain.h > (It is generally a good idea to wait a little with sending new > versions, when you can't be sure yet whether the earlier discussion has > settled.) (Sorry, I'll be better about this going forward.) > > Jan