select HAVE_TEXT_POKE_SMP
        select HAVE_GENERIC_HARDIRQS
        select HAVE_SPARSE_IRQ
 +      select GENERIC_FIND_FIRST_BIT
 +      select GENERIC_FIND_NEXT_BIT
        select GENERIC_IRQ_PROBE
        select GENERIC_PENDING_IRQ if SMP
+       select GENERIC_IRQ_SHOW
+       select IRQ_FORCED_THREADING
        select USE_GENERIC_SMP_HELPERS if SMP
  
  config INSTRUCTION_DECODER
 
        if (irq == -1)
                goto out;
  
 -      rc = HYPERVISOR_physdev_op(PHYSDEVOP_map_pirq, &map_irq);
 -      if (rc) {
 -              printk(KERN_WARNING "xen map irq failed %d\n", rc);
 -
 -              irq_free_desc(irq);
 -
 -              irq = -1;
 -              goto out;
 -      }
 -      irq_info[irq] = mk_pirq_info(0, map_irq.pirq, 0, map_irq.index);
 -
        set_irq_chip_and_handler_name(irq, &xen_pirq_chip,
 -                      handle_level_irq,
 -                      (type == PCI_CAP_ID_MSIX) ? "msi-x":"msi");
 +                                    handle_level_irq, name);
  
-       ret = set_irq_msi(irq, msidesc);
 +      irq_info[irq] = mk_pirq_info(0, pirq, 0, vector);
 +      pirq_to_irq[pirq] = irq;
++      ret = irq_set_msi_desc(irq, msidesc);
 +      if (ret < 0)
 +              goto error_irq;
  out:
        spin_unlock(&irq_mapping_update_lock);
        return irq;