Print this page
3605 Xen HVM hangs during boot if apix is enabled

@@ -276,10 +276,11 @@
         tmp_hdl.ih_type = type;
         tmp_hdl.ih_inum = inum;
         tmp_hdl.ih_scratch1 = count;
         tmp_hdl.ih_scratch2 = (void *)(uintptr_t)behavior;
         tmp_hdl.ih_dip = dip;
+        tmp_hdl.ih_irq = -1;
 
         if (i_ddi_intr_ops(dip, dip, DDI_INTROP_ALLOC,
             &tmp_hdl, (void *)actualp) != DDI_SUCCESS) {
                 DDI_INTR_APIDBG((CE_CONT, "ddi_intr_alloc: allocation "
                     "failed\n"));

@@ -322,14 +323,18 @@
                 hdlp->ih_cap = cap;
                 hdlp->ih_ver = DDI_INTR_VERSION;
                 hdlp->ih_state = DDI_IHDL_STATE_ALLOC;
                 hdlp->ih_dip = dip;
                 hdlp->ih_inum = i;
+                hdlp->ih_irq = -1;
                 i_ddi_alloc_intr_phdl(hdlp);
-                if (type & DDI_INTR_TYPE_FIXED)
+                if (type & DDI_INTR_TYPE_FIXED) {
+                        if (tmp_hdl.ih_irq != -1)
+                                hdlp->ih_irq = tmp_hdl.ih_irq;
                         i_ddi_set_intr_handle(dip, hdlp->ih_inum,
                             (ddi_intr_handle_t)hdlp);
+                }
 
                 DDI_INTR_APIDBG((CE_CONT, "ddi_intr_alloc: hdlp = 0x%p\n",
                     (void *)h_array[i]));
         }