WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] iommu: make interrupt remapping more gene

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] iommu: make interrupt remapping more generic
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 11 Jul 2008 07:50:16 -0700
Delivery-date: Fri, 11 Jul 2008 07:51:10 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1215776954 -3600
# Node ID bcef824afe1afd049148f9ade1361a0e8695bc20
# Parent  1e24033fb775b74c85df0dddd9bde632bd576151
iommu: make interrupt remapping more generic
Signed-off-by: Wei Wang <wei.wang2@xxxxxxx>
---
 xen/arch/x86/msi.c                          |    4 +--
 xen/drivers/passthrough/amd/pci_amd_iommu.c |    2 +
 xen/drivers/passthrough/iommu.c             |   37 ++++++++++++++++++++++++++++
 xen/drivers/passthrough/vtd/iommu.c         |    2 +
 xen/include/asm-x86/io_apic.h               |    4 +--
 xen/include/xen/iommu.h                     |    4 +++
 6 files changed, 49 insertions(+), 4 deletions(-)

diff -r 1e24033fb775 -r bcef824afe1a xen/arch/x86/msi.c
--- a/xen/arch/x86/msi.c        Fri Jul 11 12:48:45 2008 +0100
+++ b/xen/arch/x86/msi.c        Fri Jul 11 12:49:14 2008 +0100
@@ -173,8 +173,8 @@ static int unset_vector_msi(int vector)
 
 static void write_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
 {
-    if ( vtd_enabled )
-        msi_msg_write_remap_rte(entry, msg);
+    if ( iommu_enabled )
+        iommu_update_ire_from_msi(entry, msg);
 
     switch ( entry->msi_attrib.type )
     {
diff -r 1e24033fb775 -r bcef824afe1a xen/drivers/passthrough/amd/pci_amd_iommu.c
--- a/xen/drivers/passthrough/amd/pci_amd_iommu.c       Fri Jul 11 12:48:45 
2008 +0100
+++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c       Fri Jul 11 12:49:14 
2008 +0100
@@ -649,4 +649,6 @@ struct iommu_ops amd_iommu_ops = {
     .unmap_page = amd_iommu_unmap_page,
     .reassign_device = amd_iommu_return_device,
     .get_device_group_id = amd_iommu_group_id,
+    .update_ire_from_apic = amd_iommu_ioapic_update_ire,
+    .update_ire_from_msi = amd_iommu_msi_msg_update_ire,
 };
diff -r 1e24033fb775 -r bcef824afe1a xen/drivers/passthrough/iommu.c
--- a/xen/drivers/passthrough/iommu.c   Fri Jul 11 12:48:45 2008 +0100
+++ b/xen/drivers/passthrough/iommu.c   Fri Jul 11 12:49:14 2008 +0100
@@ -290,6 +290,43 @@ int iommu_get_device_group(struct domain
 
     return i;
 }
+
+void iommu_update_ire_from_apic(
+    unsigned int apic, unsigned int reg, unsigned int value)
+{
+    struct iommu_ops *ops = NULL;
+
+    switch ( boot_cpu_data.x86_vendor )
+    {
+    case X86_VENDOR_INTEL:
+        ops = &intel_iommu_ops;
+        break;
+    case X86_VENDOR_AMD:
+        ops = &amd_iommu_ops;
+        break;
+    default:
+        BUG();
+    }
+    ops->update_ire_from_apic(apic, reg, value);
+}
+void iommu_update_ire_from_msi(
+    struct msi_desc *msi_desc, struct msi_msg *msg)
+{
+    struct iommu_ops *ops = NULL;
+
+    switch ( boot_cpu_data.x86_vendor )
+    {
+    case X86_VENDOR_INTEL:
+        ops = &intel_iommu_ops;
+        break;
+    case X86_VENDOR_AMD:
+        ops = &amd_iommu_ops;
+        break;
+    default:
+        BUG();
+    }
+    ops->update_ire_from_msi(msi_desc, msg);
+}
 /*
  * Local variables:
  * mode: C
diff -r 1e24033fb775 -r bcef824afe1a xen/drivers/passthrough/vtd/iommu.c
--- a/xen/drivers/passthrough/vtd/iommu.c       Fri Jul 11 12:48:45 2008 +0100
+++ b/xen/drivers/passthrough/vtd/iommu.c       Fri Jul 11 12:49:14 2008 +0100
@@ -1883,6 +1883,8 @@ struct iommu_ops intel_iommu_ops = {
     .unmap_page = intel_iommu_unmap_page,
     .reassign_device = reassign_device_ownership,
     .get_device_group_id = intel_iommu_group_id,
+    .update_ire_from_apic = io_apic_write_remap_rte,
+    .update_ire_from_msi = msi_msg_write_remap_rte,
 };
 
 /*
diff -r 1e24033fb775 -r bcef824afe1a xen/include/asm-x86/io_apic.h
--- a/xen/include/asm-x86/io_apic.h     Fri Jul 11 12:48:45 2008 +0100
+++ b/xen/include/asm-x86/io_apic.h     Fri Jul 11 12:49:14 2008 +0100
@@ -133,8 +133,8 @@ static inline unsigned int io_apic_read(
 
 static inline void io_apic_write(unsigned int apic, unsigned int reg, unsigned 
int value)
 {
-       if (vtd_enabled)
-               return io_apic_write_remap_rte(apic, reg, value);
+       if (iommu_enabled)
+               return iommu_update_ire_from_apic(apic, reg, value);
        *IO_APIC_BASE(apic) = reg;
        *(IO_APIC_BASE(apic)+4) = value;
 }
diff -r 1e24033fb775 -r bcef824afe1a xen/include/xen/iommu.h
--- a/xen/include/xen/iommu.h   Fri Jul 11 12:48:45 2008 +0100
+++ b/xen/include/xen/iommu.h   Fri Jul 11 12:49:14 2008 +0100
@@ -103,6 +103,10 @@ struct iommu_ops {
     int (*reassign_device)(struct domain *s, struct domain *t,
                           u8 bus, u8 devfn);
     int (*get_device_group_id)(u8 bus, u8 devfn);
+    void (*update_ire_from_apic)(unsigned int apic, unsigned int reg, unsigned 
int value);
+    void (*update_ire_from_msi)(struct msi_desc *msi_desc, struct msi_msg 
*msg);
 };
 
+void iommu_update_ire_from_apic(unsigned int apic, unsigned int reg, unsigned 
int value);
+void iommu_update_ire_from_msi(struct msi_desc *msi_desc, struct msi_msg *msg);
 #endif /* _IOMMU_H_ */

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] iommu: make interrupt remapping more generic, Xen patchbot-unstable <=