|
@@ -1685,8 +1685,15 @@ void __init xen_init_IRQ(void)
|
|
|
pirq_needs_eoi = pirq_needs_eoi_flag;
|
|
|
|
|
|
#ifdef CONFIG_X86
|
|
|
- if (xen_hvm_domain()) {
|
|
|
+ if (xen_pv_domain()) {
|
|
|
+ irq_ctx_init(smp_processor_id());
|
|
|
+ if (xen_initial_domain())
|
|
|
+ pci_xen_initial_domain();
|
|
|
+ }
|
|
|
+ if (xen_feature(XENFEAT_hvm_callback_vector))
|
|
|
xen_callback_vector();
|
|
|
+
|
|
|
+ if (xen_hvm_domain()) {
|
|
|
native_init_IRQ();
|
|
|
/* pci_xen_hvm_init must be called after native_init_IRQ so that
|
|
|
* __acpi_register_gsi can point at the right function */
|
|
@@ -1695,13 +1702,10 @@ void __init xen_init_IRQ(void)
|
|
|
int rc;
|
|
|
struct physdev_pirq_eoi_gmfn eoi_gmfn;
|
|
|
|
|
|
- irq_ctx_init(smp_processor_id());
|
|
|
- if (xen_initial_domain())
|
|
|
- pci_xen_initial_domain();
|
|
|
-
|
|
|
pirq_eoi_map = (void *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
|
|
|
eoi_gmfn.gmfn = virt_to_mfn(pirq_eoi_map);
|
|
|
rc = HYPERVISOR_physdev_op(PHYSDEVOP_pirq_eoi_gmfn_v2, &eoi_gmfn);
|
|
|
+ /* TODO: No PVH support for PIRQ EOI */
|
|
|
if (rc != 0) {
|
|
|
free_page((unsigned long) pirq_eoi_map);
|
|
|
pirq_eoi_map = NULL;
|