Fixes unchecked results from parsecmd
[akaros.git] / kern / drivers / net / bnx2x / bnx2x_dev.c
index 9c9303a..a989290 100644 (file)
@@ -107,6 +107,8 @@ static long bnx2x_ctl(struct ether *edev, void *buf, long n)
                kfree(cb);
                nexterror();
        }
+       if (cb->nf < 1)
+               error("short control request");
 
        /* TODO: handle ctl command somehow.  igbe did the following: */
        //ct = lookupcmd(cb, igbectlmsg, ARRAY_SIZE(igbectlmsg));
@@ -317,9 +319,6 @@ static void bnx2x_attach(struct ether *edev)
        bnx2x_open(ctlr->edev);
        bnx2x_set_rx_mode(edev);
 
-       /* shut it up for now.  too much stats output */
-       ctlr->msg_enable = 0;
-
        ctlr->attached = TRUE;
        qunlock(&ctlr->alock);
        /* not sure if we'll need/want any of the other 9ns stuff */
@@ -381,8 +380,6 @@ static void bnx2x_pci(void)
        struct bnx2x *ctlr;
        const struct pci_device_id *pci_id;
 
-       bnx2x_init();
-
        STAILQ_FOREACH(pcidev, &pci_devices, all_dev) {
                /* This checks that pcidev is a Network Controller for Ethernet */
                if (pcidev->class != 0x02 || pcidev->subclass != 0x00)
@@ -393,6 +390,9 @@ static void bnx2x_pci(void)
                if (!pci_id)
                        continue;
 
+               /* only run bnx2x's __init method once we know we have one */
+               run_once(bnx2x_init());
+
                printk("bnx2x driver found 0x%04x:%04x at %02x:%02x.%x\n",
                           pcidev->ven_id, pcidev->dev_id,
                           pcidev->bus, pcidev->dev, pcidev->func);