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-ia64-devel

[Xen-devel] [patch] PCI: fix for quirk_e100_interrupt()

To: xen-devel@xxxxxxxxxxxxxxxxxxx, xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [patch] PCI: fix for quirk_e100_interrupt()
From: Simon Horman <horms@xxxxxxxxxxxx>
Date: Fri, 04 Apr 2008 15:23:31 +0900
Cc: Ivan Kokshaysky <ink@xxxxxxxxxxxxxxxxxxxx>, Alex Williamson <alex.williamson@xxxxxx>
Delivery-date: Thu, 03 Apr 2008 23:26:16 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
From: Ivan Kokshaysky <ink@xxxxxxxxxxxxxxxxxxxx>

PCI: fix for quirk_e100_interrupt()

Check that the e100 is in the D0 power state. If it's not, it won't
respond to MMIO accesses and we end up with master-abort machine
checks on some platforms.

Signed-off-by: Ivan Kokshaysky <ink@xxxxxxxxxxxxxxxxxxxx>
Cc: Auke Kok <auke-jan.h.kok@xxxxxxxxx>
Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxx>
Signed-off-by: Simon Horman <horms@xxxxxxxxxxxx>

--- 

This is a trivial backport of an upstream-linux patch to xen-linux.
It is needed in order for an kexec to work on an HP rx2620 ia64 machine
when the old Donald Becker driver is used for an eepro100 card. The
Intel e100 driver works both with and without this patch.

The original patch is here:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e64aeccbeca1f7e22174ca3a12ec35a8f5566515

Without it kexec of linux on the machine in question doesn't work
with either the e100 or eepro100 driver.

I have not been able to test this change on x86 hardware.

Note that kexec isn't actually merged for ia64 xen yet. For the game,
please see http://lists.infradead.org/pipermail/kexec/2008-March/001497.html.
I am working on the HVM problem :-)

Index: linux-2.6.18-xen.hg/drivers/pci/quirks.c
===================================================================
--- linux-2.6.18-xen.hg.orig/drivers/pci/quirks.c       2008-04-01 
18:28:15.000000000 +0900
+++ linux-2.6.18-xen.hg/drivers/pci/quirks.c    2008-04-04 15:13:19.000000000 
+0900
@@ -1528,10 +1528,11 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_N
 
 static void __devinit quirk_e100_interrupt(struct pci_dev *dev)
 {
-       u16 command;
+       u16 command, pmcsr;
        u32 bar;
        u8 __iomem *csr;
        u8 cmd_hi;
+       int pm;
 
        switch (dev->device) {
        /* PCI IDs taken from drivers/net/e100.c */
@@ -1566,6 +1567,17 @@ static void __devinit quirk_e100_interru
        if (!(command & PCI_COMMAND_MEMORY) || !bar)
                return;
 
+        /*
+         * Check that the device is in the D0 power state. If it's not,
+         * there is no point to look any further.
+         */
+        pm = pci_find_capability(dev, PCI_CAP_ID_PM);
+        if (pm) {
+                pci_read_config_word(dev, pm + PCI_PM_CTRL, &pmcsr);
+                if ((pmcsr & PCI_PM_CTRL_STATE_MASK) != PCI_D0)
+                        return;
+        }
+
        csr = ioremap(bar, 8);
        if (!csr) {
                printk(KERN_WARNING "PCI: Can't map %s e100 registers\n",

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [patch] PCI: fix for quirk_e100_interrupt(), Simon Horman <=