According to Documentation/pci.txt in 2.6.18 pci_request_regions()
should be called _before_ pci_enable_device().
And pci_release_regions() should be called after pci_disable_device().

Signed-off-by Ivo van Doorn <[EMAIL PROTECTED]>

---

diff -rU3 wireless-dev-rt2x00/drivers/net/wireless/d80211/rt2x00/rt2400pci.c 
wireless-dev-rt2x00-pci/drivers/net/wireless/d80211/rt2x00/rt2400pci.c
--- wireless-dev-rt2x00/drivers/net/wireless/d80211/rt2x00/rt2400pci.c  
2006-08-08 14:18:32.000000000 +0200
+++ wireless-dev-rt2x00-pci/drivers/net/wireless/d80211/rt2x00/rt2400pci.c      
2006-08-08 14:35:53.000000000 +0200
@@ -2851,10 +2851,16 @@
        struct net_device *net_dev;
        int status;
 
+       status = pci_request_regions(pci_dev, pci_name(pci_dev));
+       if (status) {
+               ERROR("PCI request regions failed.\n");
+               return status;
+       }
+
        status = pci_enable_device(pci_dev);
        if (status) {
                ERROR("Enable device failed.\n");
-               return status;
+               goto exit_release_regions;
        }
 
        pci_set_master(pci_dev);
@@ -2869,17 +2875,11 @@
                goto exit_disable_device;
        }
 
-       status = pci_request_regions(pci_dev, pci_name(pci_dev));
-       if (status) {
-               ERROR("PCI request regions failed.\n");
-               goto exit_disable_device;
-       }
-
        net_dev = ieee80211_alloc_hw(sizeof(struct rt2x00_dev), NULL);
        if (!net_dev) {
                ERROR("Failed to allocate hardware.\n");
                status = -ENOMEM;
-               goto exit_release_regions;
+               goto exit_disable_device;
        }
 
        SET_ETHTOOL_OPS(net_dev, &rt2400pci_ethtool_ops);
@@ -2898,13 +2898,13 @@
 exit_free_device:
        ieee80211_free_hw(net_dev);
 
-exit_release_regions:
-       pci_release_regions(pci_dev);
-
 exit_disable_device:
        if (status != -EBUSY)
                pci_disable_device(pci_dev);
 
+exit_release_regions:
+       pci_release_regions(pci_dev);
+
        pci_set_drvdata(pci_dev, NULL);
 
        return status;
@@ -2927,9 +2927,9 @@
 
        pci_set_drvdata(pci_dev, NULL);
 
-       pci_release_regions(pci_dev);
-
        pci_disable_device(pci_dev);
+
+       pci_release_regions(pci_dev);
 }
 
 #ifdef CONFIG_PM
diff -rU3 wireless-dev-rt2x00/drivers/net/wireless/d80211/rt2x00/rt2500pci.c 
wireless-dev-rt2x00-pci/drivers/net/wireless/d80211/rt2x00/rt2500pci.c
--- wireless-dev-rt2x00/drivers/net/wireless/d80211/rt2x00/rt2500pci.c  
2006-08-08 14:18:32.000000000 +0200
+++ wireless-dev-rt2x00-pci/drivers/net/wireless/d80211/rt2x00/rt2500pci.c      
2006-08-08 14:35:38.000000000 +0200
@@ -3134,10 +3134,16 @@
        struct net_device *net_dev;
        int status;
 
+       status = pci_request_regions(pci_dev, pci_name(pci_dev));
+       if (status) {
+               ERROR("PCI request regions failed.\n");
+               return status;
+       }
+
        status = pci_enable_device(pci_dev);
        if (status) {
                ERROR("Enable device failed.\n");
-               return status;
+               goto exit_release_regions;
        }
 
        pci_set_master(pci_dev);
@@ -3152,17 +3158,11 @@
                goto exit_disable_device;
        }
 
-       status = pci_request_regions(pci_dev, pci_name(pci_dev));
-       if (status) {
-               ERROR("PCI request regions failed.\n");
-               goto exit_disable_device;
-       }
-
        net_dev = ieee80211_alloc_hw(sizeof(struct rt2x00_dev), NULL);
        if (!net_dev) {
                ERROR("Failed to allocate hardware.\n");
                status = -ENOMEM;
-               goto exit_release_regions;
+               goto exit_disable_device;
        }
 
        SET_ETHTOOL_OPS(net_dev, &rt2500pci_ethtool_ops);
@@ -3181,13 +3181,13 @@
 exit_free_device:
        ieee80211_free_hw(net_dev);
 
-exit_release_regions:
-       pci_release_regions(pci_dev);
-
 exit_disable_device:
        if (status != -EBUSY)
                pci_disable_device(pci_dev);
 
+exit_release_regions:
+       pci_release_regions(pci_dev);
+
        pci_set_drvdata(pci_dev, NULL);
 
        return status;
@@ -3210,9 +3210,9 @@
 
        pci_set_drvdata(pci_dev, NULL);
 
-       pci_release_regions(pci_dev);
-
        pci_disable_device(pci_dev);
+
+       pci_release_regions(pci_dev);
 }
 
 #ifdef CONFIG_PM
diff -rU3 wireless-dev-rt2x00/drivers/net/wireless/d80211/rt2x00/rt61pci.c 
wireless-dev-rt2x00-pci/drivers/net/wireless/d80211/rt2x00/rt61pci.c
--- wireless-dev-rt2x00/drivers/net/wireless/d80211/rt2x00/rt61pci.c    
2006-08-08 14:18:32.000000000 +0200
+++ wireless-dev-rt2x00-pci/drivers/net/wireless/d80211/rt2x00/rt61pci.c        
2006-08-08 14:35:44.000000000 +0200
@@ -3665,10 +3665,16 @@
        struct net_device *net_dev;
        int status;
 
+       status = pci_request_regions(pci_dev, pci_name(pci_dev));
+       if (status) {
+               ERROR("PCI request regions failed.\n");
+               return status;
+       }
+
        status = pci_enable_device(pci_dev);
        if (status) {
                ERROR("Enable device failed.\n");
-               return status;
+               goto exit_release_regions;
        }
 
        pci_set_master(pci_dev);
@@ -3683,17 +3689,11 @@
                goto exit_disable_device;
        }
 
-       status = pci_request_regions(pci_dev, pci_name(pci_dev));
-       if (status) {
-               ERROR("PCI request regions failed.\n");
-               goto exit_disable_device;
-       }
-
        net_dev = ieee80211_alloc_hw(sizeof(struct rt2x00_dev), NULL);
        if (!net_dev) {
                ERROR("Failed to allocate hardware.\n");
                status = -ENOMEM;
-               goto exit_release_regions;
+               goto exit_disable_device;
        }
 
        SET_ETHTOOL_OPS(net_dev, &rt61pci_ethtool_ops);
@@ -3712,13 +3712,13 @@
 exit_free_device:
        ieee80211_free_hw(net_dev);
 
-exit_release_regions:
-       pci_release_regions(pci_dev);
-
 exit_disable_device:
        if (status != -EBUSY)
                pci_disable_device(pci_dev);
 
+exit_release_regions:
+       pci_release_regions(pci_dev);
+
        pci_set_drvdata(pci_dev, NULL);
 
        return status;
@@ -3741,9 +3741,9 @@
 
        pci_set_drvdata(pci_dev, NULL);
 
-       pci_release_regions(pci_dev);
-
        pci_disable_device(pci_dev);
+
+       pci_release_regions(pci_dev);
 }
 
 #ifdef CONFIG_PM
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to