Index: pintr.c =================================================================== RCS file: /cvsroot/src/sys/arch/xen/x86/pintr.c,v retrieving revision 1.16 diff -u -p -r1.16 pintr.c --- pintr.c 15 May 2020 07:42:58 -0000 1.16 +++ pintr.c 23 May 2020 10:05:15 -0000 @@ -173,7 +173,6 @@ short irq2port[NR_EVENT_CHANNELS] = {0}; int xen_pic_to_gsi(struct pic *pic, int pin) { - struct physdev_map_pirq map_irq; int ret; int gsi; @@ -199,21 +198,21 @@ xen_pic_to_gsi(struct pic *pic, int pin) break; } - memset(&map_irq, 0, sizeof(map_irq)); - map_irq.domid = DOMID_SELF; - map_irq.type = MAP_PIRQ_TYPE_GSI; - map_irq.index = pin; - map_irq.pirq = gsi; - ret = HYPERVISOR_physdev_op(PHYSDEVOP_map_pirq, &map_irq); - if (ret != 0) - panic("physdev_op(PHYSDEVOP_map_pirq) GSI fail %d", - ret); + struct physdev_irq irq_op; + memset(&irq_op, 0, sizeof(irq_op)); + irq_op.irq = gsi; + if (HYPERVISOR_physdev_op(PHYSDEVOP_alloc_irq_vector, + &irq_op) < 0) { + panic("physdev_op(PHYSDEVOP_alloc_irq_vector) %d", gsi); + } + KASSERT(irq_op.vector == gsi); break; } case PIC_MSI: case PIC_MSIX: #ifdef __HAVE_PCI_MSI_MSIX { + struct physdev_map_pirq map_irq; const struct msipic_pci_info *i = msipic_get_pci_info(pic); memset(&map_irq, 0, sizeof(map_irq));