DORMANTno replies

[PATCH] sbni -- get rid of check_region

From: Stephen Hemminger <hidden>
Date: 2003-10-03 18:31:06

In sbni driver for 2.6.0-test6
Replace check_region with appropriate request_region, and make sure to
do release_region as required in error unwinds.

diff -Nru a/drivers/net/wan/sbni.c b/drivers/net/wan/sbni.c
--- a/drivers/net/wan/sbni.c	Fri Oct  3 11:27:51 2003
+++ b/drivers/net/wan/sbni.c	Fri Oct  3 11:27:51 2003
@@ -292,7 +292,6 @@
 	       != NULL ) {
 		int  pci_irq_line;
 		unsigned long  pci_ioaddr;
-		u16  subsys;
 
 		if( pdev->vendor != SBNI_PCI_VENDOR
 		    &&  pdev->device != SBNI_PCI_DEVICE )
@@ -302,10 +301,13 @@
 		pci_irq_line = pdev->irq;
 
 		/* Avoid already found cards from previous calls */
-		if( !request_region( pci_ioaddr, SBNI_IO_EXTENT, dev->name ) ) {
-			pci_read_config_word( pdev, PCI_SUBSYSTEM_ID, &subsys );
+		if( !request_region( pci_ioaddr, SBNI_IO_EXTENT, dev->name )) {
+			u16  subsys;
+			pci_read_config_word( pdev, PCI_SUBSYSTEM_ID, &subsys);
+
 			if( subsys != 2  ||	/* Dual adapter is present */
-			    check_region( pci_ioaddr += 4, SBNI_IO_EXTENT ) )
+			    !request_region(pci_ioaddr += 4, SBNI_IO_EXTENT,
+					    dev->name) )
 				continue;
 		}
 
@@ -318,10 +320,15 @@
 				pci_irq_line );
 
 		/* avoiding re-enable dual adapters */
-		if( (pci_ioaddr & 7) == 0  &&  pci_enable_device( pdev ) )
-			return  -EIO;
-		if( sbni_probe1( dev, pci_ioaddr, pci_irq_line ) )
+		if( (pci_ioaddr & 7) == 0  &&  pci_enable_device( pdev ) ) {
+			release_region( pci_ioaddr, SBNI_IO_EXTENT);
+			return -EIO;
+		}
+			
+		else if( sbni_probe1( dev, pci_ioaddr, pci_irq_line ) )
 			return  0;
+
+		release_region( pci_ioaddr, SBNI_IO_EXTENT);
 	}
 	return  -ENODEV;
 }
@@ -332,10 +339,8 @@
 {
 	struct net_local  *nl;
 
-	if( sbni_card_probe( ioaddr ) ) {
-		release_region( ioaddr, SBNI_IO_EXTENT );
+	if( sbni_card_probe( ioaddr ) ) 
 		return  0;
-	}
 
 	outb( 0, ioaddr + CSR0 );
 
@@ -352,7 +357,6 @@
 		if( !irq ) {
 			printk( KERN_ERR "%s: can't detect device irq!\n",
 				dev->name );
-			release_region( ioaddr, SBNI_IO_EXTENT );
 			return  0;
 		}
 	} else if( irq == 2 )
@@ -365,7 +369,6 @@
 	nl = dev->priv;
 	if( !nl ) {
 		printk( KERN_ERR "%s: unable to get memory!\n", dev->name );
-		release_region( ioaddr, SBNI_IO_EXTENT );
 		return  0;
 	}
 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help