init_evtchn_cpu_bindings();
if (pirq_eoi_does_unmask) {
- struct physdev_pirq_eoi_mfn eoi_mfn;
+ struct physdev_pirq_eoi_gmfn eoi_gmfn;
- eoi_mfn.mfn = virt_to_bus(pirq_needs_eoi) >> PAGE_SHIFT;
- if (HYPERVISOR_physdev_op(PHYSDEVOP_pirq_eoi_mfn, &eoi_mfn))
+ eoi_gmfn.gmfn = arbitrary_virt_to_machine(pirq_needs_eoi)
+ >> PAGE_SHIFT;
+ if (HYPERVISOR_physdev_op(PHYSDEVOP_pirq_eoi_gmfn, &eoi_gmfn))
BUG();
}
void __init xen_init_IRQ(void)
{
unsigned int i;
- struct physdev_pirq_eoi_mfn eoi_mfn;
+ struct physdev_pirq_eoi_gmfn eoi_gmfn;
init_evtchn_cpu_bindings();
BUG_ON(!bitmap_empty(pirq_needs_eoi, PAGE_SIZE * 8));
- eoi_mfn.mfn = virt_to_bus(pirq_needs_eoi) >> PAGE_SHIFT;
- if (HYPERVISOR_physdev_op(PHYSDEVOP_pirq_eoi_mfn, &eoi_mfn) == 0)
+ eoi_gmfn.gmfn = arbitrary_virt_to_machine(pirq_needs_eoi)
+ >> PAGE_SHIFT;
+ if (HYPERVISOR_physdev_op(PHYSDEVOP_pirq_eoi_gmfn, &eoi_gmfn) == 0)
pirq_eoi_does_unmask = 1;
/* No event channels are 'live' right now. */
#define mfn_to_virt(mfn) (__va((mfn) << PAGE_SHIFT))
#define virt_to_mfn(virt) (__pa(virt) >> PAGE_SHIFT)
#define virt_to_machine(virt) __pa(virt) /* for tpmfront.c */
+#define arbitrary_virt_to_machine(virt) virt_to_machine(ia64_imva(virt))
#define set_phys_to_machine(pfn, mfn) do { } while (0)
* will automatically get unmasked. The page registered is used as a bit
* array indexed by Xen's PIRQ value.
*/
-#define PHYSDEVOP_pirq_eoi_mfn 17
-struct physdev_pirq_eoi_mfn {
+#define PHYSDEVOP_pirq_eoi_gmfn 17
+struct physdev_pirq_eoi_gmfn {
/* IN */
- xen_pfn_t mfn;
+ xen_pfn_t gmfn;
};
-typedef struct physdev_pirq_eoi_mfn physdev_pirq_eoi_mfn_t;
-DEFINE_XEN_GUEST_HANDLE(physdev_pirq_eoi_mfn_t);
+typedef struct physdev_pirq_eoi_gmfn physdev_pirq_eoi_gmfn_t;
+DEFINE_XEN_GUEST_HANDLE(physdev_pirq_eoi_gmfn_t);
/*
* Query the status of an IRQ line.