igbe: abort MSI for a shitty NIC
authorBarret Rhoden <brho@cs.berkeley.edu>
Sat, 29 Mar 2014 00:53:42 +0000 (17:53 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Sat, 29 Mar 2014 01:17:06 +0000 (18:17 -0700)
Not sure if it is HW or us, but MSI works on two other NICs.  On the
82545EM, once we use MSI, the NIC clobbers the RD buffer area with
gibberish.

kern/arch/x86/ioapic.c
kern/arch/x86/msi.c
kern/drivers/net/etherigbe.c

index 0a5809e..ea31140 100644 (file)
@@ -245,7 +245,7 @@ static int acpi_make_rdt(int tbdf, int irq, int busno, int devno)
                        gsi_irq = irq;
                } else {
                        /* Need to query ACPI at some point to handle this */
-                       printk("Non-ISA IRQ %d not found in MADT, aborting", irq);
+                       printk("Non-ISA IRQ %d not found in MADT, aborting\n", irq);
                        return -1;
                }
        }
index 575679d..3b85224 100644 (file)
@@ -106,6 +106,7 @@ blacklist(struct pci_device *p)
 {
        switch(p->ven_id<<16 | p->dev_id){
        case 0x11ab<<16 | 0x6485:
+       case 0x8086<<16 | 0x100f:
                return -1;
        }
        return 0;
index 1e1c0f2..1e8be98 100644 (file)
@@ -619,6 +619,19 @@ static char* statistics[Nstatistics] = {
        "TCP Segmentation Context Fail",
 };
 
+static void igbe_print_rd(struct Rd *rd)
+{
+       printk("Rd %p: stat 0x%02x, err 0x%02x, len 0x%04x, check 0x%04x, "
+              "spec 0x%04x, addr[1] 0x%08x, addr[0] 0x%08x\n", rd,
+                  rd->status,
+                  rd->errors,
+                  rd->length,
+                  rd->checksum,
+                  rd->special,
+                  rd->addr[1],
+                  rd->addr[0]);
+}
+
 static long
 igbeifstat(struct ether* edev, void* a, long n, uint32_t offset)
 {