Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b4050790 authored by Ben Hutchings's avatar Ben Hutchings Committed by John W. Linville
Browse files

ipw2200: Fix order of device registration



Currently cfg80211 fails to create a "phy80211" symlink in sysfs from
the net device to the wiphy device.  The latter needs to be registered
first.

Compile-tested only.

Reported-by: default avatarCesare Leonardi <celeonar@gmail.com>
Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent f2bd7f16
Loading
Loading
Loading
Loading
+12 −11
Original line number Original line Diff line number Diff line
@@ -11840,16 +11840,17 @@ static int __devinit ipw_pci_probe(struct pci_dev *pdev,
	}
	}


	mutex_unlock(&priv->mutex);
	mutex_unlock(&priv->mutex);
	err = register_netdev(net_dev);

	err = ipw_wdev_init(net_dev);
	if (err) {
	if (err) {
		IPW_ERROR("failed to register network device\n");
		IPW_ERROR("failed to register wireless device\n");
		goto out_remove_sysfs;
		goto out_remove_sysfs;
	}
	}


	err = ipw_wdev_init(net_dev);
	err = register_netdev(net_dev);
	if (err) {
	if (err) {
		IPW_ERROR("failed to register wireless device\n");
		IPW_ERROR("failed to register network device\n");
		goto out_unregister_netdev;
		goto out_unregister_wiphy;
	}
	}


#ifdef CONFIG_IPW2200_PROMISCUOUS
#ifdef CONFIG_IPW2200_PROMISCUOUS
@@ -11858,10 +11859,8 @@ static int __devinit ipw_pci_probe(struct pci_dev *pdev,
		if (err) {
		if (err) {
			IPW_ERROR("Failed to register promiscuous network "
			IPW_ERROR("Failed to register promiscuous network "
				  "device (error %d).\n", err);
				  "device (error %d).\n", err);
			wiphy_unregister(priv->ieee->wdev.wiphy);
			unregister_netdev(priv->net_dev);
			kfree(priv->ieee->a_band.channels);
			goto out_unregister_wiphy;
			kfree(priv->ieee->bg_band.channels);
			goto out_unregister_netdev;
		}
		}
	}
	}
#endif
#endif
@@ -11873,8 +11872,10 @@ static int __devinit ipw_pci_probe(struct pci_dev *pdev,


	return 0;
	return 0;


      out_unregister_netdev:
      out_unregister_wiphy:
	unregister_netdev(priv->net_dev);
	wiphy_unregister(priv->ieee->wdev.wiphy);
	kfree(priv->ieee->a_band.channels);
	kfree(priv->ieee->bg_band.channels);
      out_remove_sysfs:
      out_remove_sysfs:
	sysfs_remove_group(&pdev->dev.kobj, &ipw_attribute_group);
	sysfs_remove_group(&pdev->dev.kobj, &ipw_attribute_group);
      out_release_irq:
      out_release_irq: