From: Sunil Muthuswamy <sunilmut@xxxxxxxxxxxxxxxxxxx> Sent: Wednesday, November 10, 2021 11:45 AM > > Encapsulate arch dependencies in Hyper-V vPCI through a set of > arch-dependent interfaces. Adding these arch specific interfaces will > allow for an implementation for other architectures, such as arm64. > > There are no functional changes expected from this patch. > > Signed-off-by: Sunil Muthuswamy <sunilmut@xxxxxxxxxxxxx> > --- > In v2, v3, v4 & v5: > Changes are described in the cover letter. No change from v4 -> v5. > > arch/x86/include/asm/hyperv-tlfs.h | 33 ++++++++++++ > arch/x86/include/asm/mshyperv.h | 7 --- > drivers/pci/controller/pci-hyperv.c | 79 ++++++++++++++++++++--------- > include/asm-generic/hyperv-tlfs.h | 33 ------------ > 4 files changed, 87 insertions(+), 65 deletions(-) > [snip] > diff --git a/drivers/pci/controller/pci-hyperv.c b/drivers/pci/controller/pci-hyperv.c > index eaec915ffe62..03e07a4f0e3f 100644 > --- a/drivers/pci/controller/pci-hyperv.c > +++ b/drivers/pci/controller/pci-hyperv.c > @@ -43,9 +43,6 @@ > #include <linux/pci-ecam.h> > #include <linux/delay.h> > #include <linux/semaphore.h> > -#include <linux/irqdomain.h> > -#include <asm/irqdomain.h> > -#include <asm/apic.h> > #include <linux/irq.h> > #include <linux/msi.h> > #include <linux/hyperv.h> > @@ -583,6 +580,42 @@ struct hv_pci_compl { > > static void hv_pci_onchannelcallback(void *context); > > +#ifdef CONFIG_X86 > +#define DELIVERY_MODE APIC_DELIVERY_MODE_FIXED > +#define FLOW_HANDLER handle_edge_irq > +#define FLOW_NAME "edge" > + > +static int hv_pci_irqchip_init(void) > +{ > + return 0; > +} > + > +static struct irq_domain *hv_pci_get_root_domain(void) > +{ > + return x86_vector_domain; > +} > + > +static unsigned int hv_msi_get_int_vector(struct irq_data *data) > +{ > + struct irq_cfg *cfg = irqd_cfg(data); > + > + return cfg->vector; > +} > + > +static void hv_set_msi_entry_from_desc(union hv_msi_entry *msi_entry, > + struct msi_desc *msi_desc) > +{ > + msi_entry->address.as_uint32 = msi_desc->msg.address_lo; > + msi_entry->data.as_uint32 = msi_desc->msg.data; > +} > + > +static int hv_msi_prepare(struct irq_domain *domain, struct device *dev, > + int nvec, msi_alloc_info_t *info) > +{ > + return pci_msi_prepare(domain, dev, nvec, info); > +} > +#endif // CONFIG_X86 Nit: Use "C" style comments. I.e.: #endif /* CONFIG_X86 */ Michael