aboutsummaryrefslogtreecommitdiffstats
path: root/xen/include/asm-x86/msi.h
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2013-03-08 14:05:34 +0100
committerJan Beulich <jbeulich@suse.com>2013-03-08 14:05:34 +0100
commit4245d331e0e75de8d1bddbbb518f3a8ce6d0bb7e (patch)
treed83744a83a32179dec1ce6e7c00e3a01e06d29c7 /xen/include/asm-x86/msi.h
parent0f3b02d07e12b76c568ce82d7ec6bf80fdf3870f (diff)
downloadxen-4245d331e0e75de8d1bddbbb518f3a8ce6d0bb7e.tar.gz
xen-4245d331e0e75de8d1bddbbb518f3a8ce6d0bb7e.tar.bz2
xen-4245d331e0e75de8d1bddbbb518f3a8ce6d0bb7e.zip
x86/MSI: add mechanism to fully protect MSI-X table from PV guest accesses
This adds two new physdev operations for Dom0 to invoke when resource allocation for devices is known to be complete, so that the hypervisor can arrange for the respective MMIO ranges to be marked read-only before an eventual guest getting such a device assigned even gets started, such that it won't be able to set up writable mappings for these MMIO ranges before Xen has a chance to protect them. This also addresses another issue with the code being modified here, in that so far write protection for the address ranges in question got set up only once during the lifetime of a device (i.e. until either system shutdown or device hot removal), while teardown happened when the last interrupt was disposed of by the guest (which at least allowed the tables to be writable when the device got assigned to a second guest [instance] after the first terminated). Signed-off-by: Jan Beulich <jbeulich@suse.com>
Diffstat (limited to 'xen/include/asm-x86/msi.h')
-rw-r--r--xen/include/asm-x86/msi.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/xen/include/asm-x86/msi.h b/xen/include/asm-x86/msi.h
index e8e2b3172a..6fe67dc145 100644
--- a/xen/include/asm-x86/msi.h
+++ b/xen/include/asm-x86/msi.h
@@ -76,6 +76,7 @@ struct msi_desc;
/* Helper functions */
extern int pci_enable_msi(struct msi_info *msi, struct msi_desc **desc);
extern void pci_disable_msi(struct msi_desc *desc);
+extern int pci_prepare_msix(u16 seg, u8 bus, u8 devfn, bool_t off);
extern void pci_cleanup_msi(struct pci_dev *pdev);
extern void setup_msi_handler(struct irq_desc *, struct msi_desc *);
extern void setup_msi_irq(struct irq_desc *);