out1: free_irq(dev->irq, dev); 
static int __init eth16i_probe1(struct net_device *dev, int ioaddr){	struct eth16i_local *lp = netdev_priv(dev);	static unsigned version_printed;	int retval;	/* Let's grab the region */	if (!request_region(ioaddr, ETH16I_IO_EXTENT, cardname))		return -EBUSY;	/*	  The MB86985 chip has on register which holds information in which 	  io address the chip lies. First read this register and compare	  it to our current io address and if match then this could	  be our chip.	  */	if(ioaddr < 0x1000) {		if(eth16i_portlist[(inb(ioaddr + JUMPERLESS_CONFIG) & 0x07)] 		   != ioaddr) {			retval = -ENODEV;			goto out;		}	}	/* Now we will go a bit deeper and try to find the chip's signature */	if(eth16i_check_signature(ioaddr) != 0) {		retval = -ENODEV;		goto out;	}	/* 	   Now it seems that we have found a ethernet chip in this particular	   ioaddr. The MB86985 chip has this feature, that when you read a 	   certain register it will increase it's io base address to next	   configurable slot. Now when we have found the chip, first thing is	   to make sure that the chip's ioaddr will hold still here.	   */	eth16i_select_regbank(TRANSCEIVER_MODE_RB, ioaddr);	outb(0x00, ioaddr + TRANSCEIVER_MODE_REG);	outb(0x00, ioaddr + RESET);             /* Reset some parts of chip */	BITSET(ioaddr + CONFIG_REG_0, BIT(7));  /* Disable the data link */	if( (eth16i_debug & version_printed++) == 0)		printk(KERN_INFO "%s", version);	dev->base_addr = ioaddr;	dev->irq = eth16i_get_irq(ioaddr);	/* Try to obtain interrupt vector */	if ((retval = request_irq(dev->irq, (void *)&eth16i_interrupt, 0, cardname, dev))) {		printk(KERN_WARNING "%s at %#3x, but is unusable due to conflicting IRQ %d.\n", 		       cardname, ioaddr, dev->irq);		goto out;	}	printk(KERN_INFO "%s: %s at %#3x, IRQ %d, ",	       dev->name, cardname, ioaddr, dev->irq);	/* Now we will have to lock the chip's io address */	eth16i_select_regbank(TRANSCEIVER_MODE_RB, ioaddr);	outb(0x38, ioaddr + TRANSCEIVER_MODE_REG); 	eth16i_initialize(dev, 1); /* Initialize rest of the chip's registers */	/* Now let's same some energy by shutting down the chip ;) */	BITCLR(ioaddr + CONFIG_REG_1, POWERUP);	/* Initialize the device structure */	memset(lp, 0, sizeof(struct eth16i_local));	dev->open               = eth16i_open;	dev->stop               = eth16i_close;	dev->hard_start_xmit    = eth16i_tx;	dev->get_stats          = eth16i_get_stats;	dev->set_multicast_list = eth16i_multicast;	dev->tx_timeout 	= eth16i_timeout;	dev->watchdog_timeo	= TX_TIMEOUT;	spin_lock_init(&lp->lock);	return 0;out:	release_region(ioaddr, ETH16I_IO_EXTENT);	return retval;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/b1fc5505e0dbcc3fd7c75bfe6bee39ec50080963/eth16i.c/buggy/drivers/net/eth16i.c