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] PCI passthru various Xen changes.

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] PCI passthru various Xen changes.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 26 Sep 2007 03:40:38 -0700
Delivery-date: Wed, 26 Sep 2007 03:42:04 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
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/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/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 kfraser@xxxxxxxxxxxxxxxxxxxxx
# Date 1190190260 -3600
# Node ID 45548c83daef3c0fce6b9d4dedc39f9422bcc4a0
# Parent  aad813d8a8ad6f9d7d4f0d04a14fe088dd671e96
PCI passthru various Xen changes.
Signed-off-by: Allen Kay <allen.m.kay@xxxxxxxxx>
Signed-off-by: Guy Zana <guy@xxxxxxxxxxxx>
---
 xen/arch/x86/acpi/boot.c               |    6 +++--
 xen/arch/x86/hvm/hvm.c                 |   15 ++++++++-----
 xen/arch/x86/hvm/vmx/vtd/intel-iommu.c |    8 ------
 xen/arch/x86/irq.c                     |   38 ++++++++++++++++++++++++++++++++-
 xen/arch/x86/setup.c                   |    2 +
 xen/include/xen/irq.h                  |    3 ++
 6 files changed, 57 insertions(+), 15 deletions(-)

diff -r aad813d8a8ad -r 45548c83daef xen/arch/x86/acpi/boot.c
--- a/xen/arch/x86/acpi/boot.c  Wed Sep 19 09:12:06 2007 +0100
+++ b/xen/arch/x86/acpi/boot.c  Wed Sep 19 09:24:20 2007 +0100
@@ -1017,5 +1017,7 @@ int __init acpi_boot_init(void)
 
        acpi_table_parse(ACPI_HPET, acpi_parse_hpet);
 
-       return 0;
-}
+       acpi_dmar_init();
+
+       return 0;
+}
diff -r aad813d8a8ad -r 45548c83daef xen/arch/x86/hvm/hvm.c
--- a/xen/arch/x86/hvm/hvm.c    Wed Sep 19 09:12:06 2007 +0100
+++ b/xen/arch/x86/hvm/hvm.c    Wed Sep 19 09:24:20 2007 +0100
@@ -216,21 +216,25 @@ int hvm_domain_initialise(struct domain 
     spin_lock_init(&d->arch.hvm_domain.pbuf_lock);
     spin_lock_init(&d->arch.hvm_domain.irq_lock);
 
+    rc = paging_enable(d, PG_refcounts|PG_translate|PG_external);
+    if ( rc != 0 )
+        return rc;
+
     rc = iommu_domain_init(d);
     if ( rc != 0 )
         return rc;
 
-    rc = paging_enable(d, PG_refcounts|PG_translate|PG_external);
-    if ( rc != 0 )
-        return rc;
-
     vpic_init(d);
     vioapic_init(d);
 
     hvm_init_ioreq_page(d, &d->arch.hvm_domain.ioreq);
     hvm_init_ioreq_page(d, &d->arch.hvm_domain.buf_ioreq);
 
-    return hvm_funcs.domain_initialise(d);
+    rc = hvm_funcs.domain_initialise(d);
+    if ( rc != 0 )
+        release_devices(d);
+
+    return rc;
 }
 
 void hvm_domain_relinquish_resources(struct domain *d)
@@ -246,6 +250,7 @@ void hvm_domain_relinquish_resources(str
 
 void hvm_domain_destroy(struct domain *d)
 {
+    release_devices(d);
     hvm_funcs.domain_destroy(d);
 }
 
diff -r aad813d8a8ad -r 45548c83daef xen/arch/x86/hvm/vmx/vtd/intel-iommu.c
--- a/xen/arch/x86/hvm/vmx/vtd/intel-iommu.c    Wed Sep 19 09:12:06 2007 +0100
+++ b/xen/arch/x86/hvm/vmx/vtd/intel-iommu.c    Wed Sep 19 09:24:20 2007 +0100
@@ -35,12 +35,6 @@
 #include "msi.h"
 
 #define VTDPREFIX
-static inline int request_irq(int vector, void *func,
-                              int flags, char *name, void *data)
-{
-    return -ENOSYS;
-}
-
 extern void print_iommu_regs(struct acpi_drhd_unit *drhd);
 extern void print_vtd_entries(struct domain *d, int bus, int devfn,
                        unsigned long gmfn);
@@ -1676,7 +1670,7 @@ int iommu_setup(void)
     struct acpi_drhd_unit *drhd;
     struct iommu *iommu;
 
-    if (list_empty(&acpi_drhd_units))
+    if (!vtd_enabled)
         return 0;
 
     INIT_LIST_HEAD(&hd->pdev_list);
diff -r aad813d8a8ad -r 45548c83daef xen/arch/x86/irq.c
--- a/xen/arch/x86/irq.c        Wed Sep 19 09:12:06 2007 +0100
+++ b/xen/arch/x86/irq.c        Wed Sep 19 09:24:20 2007 +0100
@@ -16,6 +16,7 @@
 #include <xen/compat.h>
 #include <asm/current.h>
 #include <asm/smpboot.h>
+#include <asm/iommu.h>
 
 /* opt_noirqbalance: If true, software IRQ balancing/affinity is disabled. */
 int opt_noirqbalance = 0;
@@ -96,6 +97,39 @@ asmlinkage void do_IRQ(struct cpu_user_r
  out:
     desc->handler->end(vector);
     spin_unlock(&desc->lock);
+}
+
+int request_irq(unsigned int irq,
+        void (*handler)(int, void *, struct cpu_user_regs *),
+        unsigned long irqflags, const char * devname, void *dev_id)
+{
+    struct irqaction * action;
+    int retval;
+
+    /*
+     * Sanity-check: shared interrupts must pass in a real dev-ID,
+     * otherwise we'll have trouble later trying to figure out
+     * which interrupt is which (messes up the interrupt freeing
+     * logic etc).
+     */
+    if (irq >= NR_IRQS)
+        return -EINVAL;
+    if (!handler)
+        return -EINVAL;
+
+    action = xmalloc(struct irqaction);
+    if (!action)
+        return -ENOMEM;
+
+    action->handler = handler;
+    action->name = devname;
+    action->dev_id = dev_id;
+
+    retval = setup_irq(irq, action);
+    if (retval)
+        xfree(action);
+
+    return retval;
 }
 
 void free_irq(unsigned int irq)
@@ -203,7 +237,9 @@ static void __do_IRQ_guest(int vector)
         if ( (action->ack_type != ACKTYPE_NONE) &&
              !test_and_set_bit(irq, d->pirq_mask) )
             action->in_flight++;
-        send_guest_pirq(d, irq);
+        if (!hvm_do_IRQ_dpci(d, irq))
+            send_guest_pirq(d, irq);
+
     }
 }
 
diff -r aad813d8a8ad -r 45548c83daef xen/arch/x86/setup.c
--- a/xen/arch/x86/setup.c      Wed Sep 19 09:12:06 2007 +0100
+++ b/xen/arch/x86/setup.c      Wed Sep 19 09:24:20 2007 +0100
@@ -1038,6 +1038,8 @@ void __init __start_xen(unsigned long mb
         _initrd_len   = mod[initrdidx].mod_end - mod[initrdidx].mod_start;
     }
 
+    iommu_setup();
+
     /*
      * We're going to setup domain0 using the module(s) that we stashed safely
      * above our heap. The second module, if present, is an initrd ramdisk.
diff -r aad813d8a8ad -r 45548c83daef xen/include/xen/irq.h
--- a/xen/include/xen/irq.h     Wed Sep 19 09:12:06 2007 +0100
+++ b/xen/include/xen/irq.h     Wed Sep 19 09:24:20 2007 +0100
@@ -64,6 +64,9 @@ extern irq_desc_t irq_desc[NR_IRQS];
 
 extern int setup_irq(unsigned int, struct irqaction *);
 extern void free_irq(unsigned int);
+extern int request_irq(unsigned int irq,
+               void (*handler)(int, void *, struct cpu_user_regs *),
+               unsigned long irqflags, const char * devname, void *dev_id);
 
 extern hw_irq_controller no_irq_type;
 extern void no_action(int cpl, void *dev_id, struct cpu_user_regs *regs);

_______________________________________________
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] PCI passthru various Xen changes., Xen patchbot-unstable <=