Hi, Please consider applying. - Arnaldo --- linux-2.4.0-ac6/drivers/net/lance.c Wed Jan 10 22:31:42 2001 +++ linux-2.4.0-ac6.acme/drivers/net/lance.c Thu Jan 11 15:08:06 2001 @@ -33,6 +33,9 @@ Forward ported v1.14 to 2.1.129, merged the PCI and misc changes from the 2.1 version of the old driver - Alan Cox + + Get rid of check_region, check kmalloc return in lance_probe1 + Arnaldo Carvalho de Melo <[EMAIL PROTECTED]> - 11/01/2001 */ static const char *version = "lance.c:v1.15ac 1999/11/13 [EMAIL PROTECTED], [EMAIL PROTECTED]\n"; @@ -352,17 +355,27 @@ for (port = lance_portlist; *port; port++) { int ioaddr = *port; + struct resource *r = request_region(ioaddr, LANCE_TOTAL_SIZE, + "lance-probe"); - if ( check_region(ioaddr, LANCE_TOTAL_SIZE) == 0) { + if (r) { /* Detect "normal" 0x57 0x57 and the NI6510EB 0x52 0x44 signatures w/ minimal I/O reads */ char offset15, offset14 = inb(ioaddr + 14); if ((offset14 == 0x52 || offset14 == 0x57) && - ((offset15 = inb(ioaddr + 15)) == 0x57 || offset15 == 0x44)) { + ((offset15 = inb(ioaddr + 15)) == 0x57 || + offset15 == 0x44)) { result = lance_probe1(dev, ioaddr, 0, 0); - if ( !result ) return 0; + if (!result) { + struct lance_private *lp = dev->priv; + int ver = lp->chip_version; + + r->name = chip_table[ver].name; + return 0; + } } + release_resource(r); } } return -ENODEV; @@ -444,12 +457,10 @@ printk(" %2.2x", dev->dev_addr[i] = inb(ioaddr + i)); dev->base_addr = ioaddr; - request_region(ioaddr, LANCE_TOTAL_SIZE, chip_table[lance_version].name); - /* Make certain the data structures used by the LANCE are aligned and DMAble. */ lp = (struct lance_private *)(((unsigned long)kmalloc(sizeof(*lp)+7, - GFP_DMA | GFP_KERNEL)+7) & ~7); + GFP_DMA | GFP_KERNEL)+7) & ~7); if(lp==NULL) return -ENODEV; if (lance_debug > 6) printk(" (#0x%05lx)", (unsigned long)lp); @@ -457,11 +468,16 @@ dev->priv = lp; lp->name = chipname; lp->rx_buffs = (unsigned long)kmalloc(PKT_BUF_SZ*RX_RING_SIZE, + + if (!lp->rx_buffs) + goto out_lp; GFP_DMA | GFP_KERNEL); - if (lance_need_isa_bounce_buffers) + if (lance_need_isa_bounce_buffers) { lp->tx_bounce_buffs = kmalloc(PKT_BUF_SZ*TX_RING_SIZE, - GFP_DMA | GFP_KERNEL); - else + GFP_DMA | GFP_KERNEL); + if (!lp->tx_bounce_buffs) + goto out_rx; + } else lp->tx_bounce_buffs = NULL; lp->chip_version = lance_version; @@ -628,6 +644,9 @@ dev->watchdog_timeo = TX_TIMEOUT; return 0; +out_rx: kfree(lp->rx_buffs); +out_lp: kfree(lp); + return -ENOMEM; } static int - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] Please read the FAQ at http://www.tux.org/lkml/