Patchwork mac80211_hwsim: Register and bind to driver

login
register
mail settings
Submitter Martin Pitt
Date April 8, 2013, 3:59 p.m.
Message ID <20130408155926.GC3092@piware.de>
Download mbox | patch
Permalink /patch/235020/
State New
Headers show

Comments

Martin Pitt - April 8, 2013, 3:59 p.m.
Hello kernel team,

today I fixed mac80211_hwsim to get a proper "driver" attribute, so
that it works with NetworkManager. This will allow us to write
integration tests not only for wpa_supplicant and dhclient, but for
the whole NM stack. [1]

I sent the patch upstream this morning, and Johannes Berg applied it
to his tree:

  https://git.kernel.org/cgit/linux/kernel/git/jberg/mac80211-next.git/commit/?id=6d665c5384bbc64c95d87ebde8ce39052a48fa81

If it is appropriate, it would be nice to include it into the raring
kernel. However, it's not necessary to break freeze rules or go
through extraordinary efforts, as we can also apply a workaround to NM
for the time being.

I filed a bug to track this: https://launchpad.net/bugs/1166250

Thanks for considering,

Martin

[1] https://blueprints.launchpad.net/ubuntu/+spec/client-1303-converged-network-stack
Andy Whitcroft - April 9, 2013, 11:48 a.m.
On Mon, Apr 08, 2013 at 05:59:26PM +0200, Martin Pitt wrote:
> Hello kernel team,
> 
> today I fixed mac80211_hwsim to get a proper "driver" attribute, so
> that it works with NetworkManager. This will allow us to write
> integration tests not only for wpa_supplicant and dhclient, but for
> the whole NM stack. [1]
> 
> I sent the patch upstream this morning, and Johannes Berg applied it
> to his tree:
> 
>   https://git.kernel.org/cgit/linux/kernel/git/jberg/mac80211-next.git/commit/?id=6d665c5384bbc64c95d87ebde8ce39052a48fa81
> 
> If it is appropriate, it would be nice to include it into the raring
> kernel. However, it's not necessary to break freeze rules or go
> through extraordinary efforts, as we can also apply a workaround to NM
> for the time being.
> 
> I filed a bug to track this: https://launchpad.net/bugs/1166250
> 
> Thanks for considering,
> 
> Martin
> 
> [1] https://blueprints.launchpad.net/ubuntu/+spec/client-1303-converged-network-stack
> -- 
> Martin Pitt                        | http://www.piware.de
> Ubuntu Developer (www.ubuntu.com)  | Debian Developer  (www.debian.org)

> From 6d665c5384bbc64c95d87ebde8ce39052a48fa81 Mon Sep 17 00:00:00 2001
> From: Martin Pitt <martin.pitt@ubuntu.com>
> Date: Mon, 08 Apr 2013 09:30:01 +0000
> Subject: mac80211_hwsim: Register and bind to driver
> 
> Properly register our mac80211_hwsim_driver, attach it to the platform bus.
> Bind newly created hwsim devices to that driver, so that our wlan devices get
> a proper "driver" sysfs attribute.
> 
> This makes mac80211_hwsim interfaces work with NetworkManager.
> 
> Signed-off-by: Martin Pitt <martin.pitt@ubuntu.com>
> [fix an old and a new message to not be line-broken]
> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
> ---
> diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
> index 70b6ce6..9a0d526 100644
> --- a/drivers/net/wireless/mac80211_hwsim.c
> +++ b/drivers/net/wireless/mac80211_hwsim.c
> @@ -25,6 +25,7 @@
>  #include <linux/if_arp.h>
>  #include <linux/rtnetlink.h>
>  #include <linux/etherdevice.h>
> +#include <linux/platform_device.h>
>  #include <linux/debugfs.h>
>  #include <linux/module.h>
>  #include <linux/ktime.h>
> @@ -1687,6 +1688,7 @@ static void mac80211_hwsim_free(void)
>  		debugfs_remove(data->debugfs_ps);
>  		debugfs_remove(data->debugfs);
>  		ieee80211_unregister_hw(data->hw);
> +		device_release_driver(data->dev);
>  		device_unregister(data->dev);
>  		ieee80211_free_hw(data->hw);
>  	}
> @@ -1695,7 +1697,9 @@ static void mac80211_hwsim_free(void)
>  
>  
>  static struct device_driver mac80211_hwsim_driver = {
> -	.name = "mac80211_hwsim"
> +	.name = "mac80211_hwsim",
> +	.bus = &platform_bus_type,
> +	.owner = THIS_MODULE,
>  };
>  
>  static const struct net_device_ops hwsim_netdev_ops = {
> @@ -2191,6 +2195,8 @@ static int __init init_mac80211_hwsim(void)
>  	if (IS_ERR(hwsim_class))
>  		return PTR_ERR(hwsim_class);
>  
> +	driver_register(&mac80211_hwsim_driver);
> +
>  	memset(addr, 0, ETH_ALEN);
>  	addr[0] = 0x02;
>  
> @@ -2211,12 +2217,20 @@ static int __init init_mac80211_hwsim(void)
>  					  "hwsim%d", i);
>  		if (IS_ERR(data->dev)) {
>  			printk(KERN_DEBUG
> -			       "mac80211_hwsim: device_create "
> -			       "failed (%ld)\n", PTR_ERR(data->dev));
> +			       "mac80211_hwsim: device_create failed (%ld)\n",
> +			       PTR_ERR(data->dev));
>  			err = -ENOMEM;
>  			goto failed_drvdata;
>  		}
>  		data->dev->driver = &mac80211_hwsim_driver;
> +		err = device_bind_driver(data->dev);
> +		if (err != 0) {
> +			printk(KERN_DEBUG
> +			       "mac80211_hwsim: device_bind_driver failed (%d)\n",
> +			       err);
> +			goto failed_hw;
> +		}
> +
>  		skb_queue_head_init(&data->pending);
>  
>  		SET_IEEE80211_DEV(hw, data->dev);
> @@ -2515,6 +2529,7 @@ failed_drvdata:
>  	ieee80211_free_hw(hw);
>  failed:
>  	mac80211_hwsim_free();
> +	driver_unregister(&mac80211_hwsim_driver);
>  	return err;
>  }
>  module_init(init_mac80211_hwsim);
> @@ -2527,5 +2542,6 @@ static void __exit exit_mac80211_hwsim(void)
>  
>  	mac80211_hwsim_free();
>  	unregister_netdev(hwsim_mon);
> +	driver_unregister(&mac80211_hwsim_driver);
>  }
>  module_exit(exit_mac80211_hwsim);
> --
> cgit v0.9.1

Looks to be a fairly simple fix, with us so close to freeze I would be
tempted to say lets take it a SAUCE patch and let it drop out when we
get the real fix from Linus' tree.  The chances of regression are small
as all it appears to do is add some sysfs files for the device, which
can only make it work better with network-manager.

Acked-by: Andy Whitcroft <apw@canonical.com>

-apw
Andy Whitcroft - April 9, 2013, 12:36 p.m.
On Mon, Apr 08, 2013 at 05:59:26PM +0200, Martin Pitt wrote:
> Hello kernel team,
> 
> today I fixed mac80211_hwsim to get a proper "driver" attribute, so
> that it works with NetworkManager. This will allow us to write
> integration tests not only for wpa_supplicant and dhclient, but for
> the whole NM stack. [1]
> 
> I sent the patch upstream this morning, and Johannes Berg applied it
> to his tree:
> 
>   https://git.kernel.org/cgit/linux/kernel/git/jberg/mac80211-next.git/commit/?id=6d665c5384bbc64c95d87ebde8ce39052a48fa81
> 
> If it is appropriate, it would be nice to include it into the raring
> kernel. However, it's not necessary to break freeze rules or go
> through extraordinary efforts, as we can also apply a workaround to NM
> for the time being.
> 
> I filed a bug to track this: https://launchpad.net/bugs/1166250
> 
> Thanks for considering,
> 
> Martin
> 
> [1] https://blueprints.launchpad.net/ubuntu/+spec/client-1303-converged-network-stack
> -- 
> Martin Pitt                        | http://www.piware.de
> Ubuntu Developer (www.ubuntu.com)  | Debian Developer  (www.debian.org)

> From 6d665c5384bbc64c95d87ebde8ce39052a48fa81 Mon Sep 17 00:00:00 2001
> From: Martin Pitt <martin.pitt@ubuntu.com>
> Date: Mon, 08 Apr 2013 09:30:01 +0000
> Subject: mac80211_hwsim: Register and bind to driver
> 
> Properly register our mac80211_hwsim_driver, attach it to the platform bus.
> Bind newly created hwsim devices to that driver, so that our wlan devices get
> a proper "driver" sysfs attribute.
> 
> This makes mac80211_hwsim interfaces work with NetworkManager.
> 
> Signed-off-by: Martin Pitt <martin.pitt@ubuntu.com>
> [fix an old and a new message to not be line-broken]
> Signed-off-by: Johannes Berg <johannes.berg@intel.com>

We do need to shove the BugLink: in here when this is applied.

-apw
Leann Ogasawara - April 9, 2013, 1:30 p.m.
On 04/08/2013 08:59 AM, Martin Pitt wrote:
> Hello kernel team,
>
> today I fixed mac80211_hwsim to get a proper "driver" attribute, so
> that it works with NetworkManager. This will allow us to write
> integration tests not only for wpa_supplicant and dhclient, but for
> the whole NM stack. [1]
>
> I sent the patch upstream this morning, and Johannes Berg applied it
> to his tree:
>
>   https://git.kernel.org/cgit/linux/kernel/git/jberg/mac80211-next.git/commit/?id=6d665c5384bbc64c95d87ebde8ce39052a48fa81
>
> If it is appropriate, it would be nice to include it into the raring
> kernel. However, it's not necessary to break freeze rules or go
> through extraordinary efforts, as we can also apply a workaround to NM
> for the time being.
>
> I filed a bug to track this: https://launchpad.net/bugs/1166250
>
> Thanks for considering,
>
> Martin
>
> [1] https://blueprints.launchpad.net/ubuntu/+spec/client-1303-converged-network-stack

Thanks Martin.

I've applied this to our ubuntu-raring git repo.  I did some minor
changes to the commit message to mark the patch as SAUCE (our team
terminology to indicate the patch is not yet in Linus' tree).  I also
inserted the BugLink as Andy noted.  I anticipate one more upload prior
to Kernel Freeze on Thurs so this patch should be available in that upload.

Thanks,
Leann

Patch

From 6d665c5384bbc64c95d87ebde8ce39052a48fa81 Mon Sep 17 00:00:00 2001
From: Martin Pitt <martin.pitt@ubuntu.com>
Date: Mon, 08 Apr 2013 09:30:01 +0000
Subject: mac80211_hwsim: Register and bind to driver

Properly register our mac80211_hwsim_driver, attach it to the platform bus.
Bind newly created hwsim devices to that driver, so that our wlan devices get
a proper "driver" sysfs attribute.

This makes mac80211_hwsim interfaces work with NetworkManager.

Signed-off-by: Martin Pitt <martin.pitt@ubuntu.com>
[fix an old and a new message to not be line-broken]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index 70b6ce6..9a0d526 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -25,6 +25,7 @@ 
 #include <linux/if_arp.h>
 #include <linux/rtnetlink.h>
 #include <linux/etherdevice.h>
+#include <linux/platform_device.h>
 #include <linux/debugfs.h>
 #include <linux/module.h>
 #include <linux/ktime.h>
@@ -1687,6 +1688,7 @@  static void mac80211_hwsim_free(void)
 		debugfs_remove(data->debugfs_ps);
 		debugfs_remove(data->debugfs);
 		ieee80211_unregister_hw(data->hw);
+		device_release_driver(data->dev);
 		device_unregister(data->dev);
 		ieee80211_free_hw(data->hw);
 	}
@@ -1695,7 +1697,9 @@  static void mac80211_hwsim_free(void)
 
 
 static struct device_driver mac80211_hwsim_driver = {
-	.name = "mac80211_hwsim"
+	.name = "mac80211_hwsim",
+	.bus = &platform_bus_type,
+	.owner = THIS_MODULE,
 };
 
 static const struct net_device_ops hwsim_netdev_ops = {
@@ -2191,6 +2195,8 @@  static int __init init_mac80211_hwsim(void)
 	if (IS_ERR(hwsim_class))
 		return PTR_ERR(hwsim_class);
 
+	driver_register(&mac80211_hwsim_driver);
+
 	memset(addr, 0, ETH_ALEN);
 	addr[0] = 0x02;
 
@@ -2211,12 +2217,20 @@  static int __init init_mac80211_hwsim(void)
 					  "hwsim%d", i);
 		if (IS_ERR(data->dev)) {
 			printk(KERN_DEBUG
-			       "mac80211_hwsim: device_create "
-			       "failed (%ld)\n", PTR_ERR(data->dev));
+			       "mac80211_hwsim: device_create failed (%ld)\n",
+			       PTR_ERR(data->dev));
 			err = -ENOMEM;
 			goto failed_drvdata;
 		}
 		data->dev->driver = &mac80211_hwsim_driver;
+		err = device_bind_driver(data->dev);
+		if (err != 0) {
+			printk(KERN_DEBUG
+			       "mac80211_hwsim: device_bind_driver failed (%d)\n",
+			       err);
+			goto failed_hw;
+		}
+
 		skb_queue_head_init(&data->pending);
 
 		SET_IEEE80211_DEV(hw, data->dev);
@@ -2515,6 +2529,7 @@  failed_drvdata:
 	ieee80211_free_hw(hw);
 failed:
 	mac80211_hwsim_free();
+	driver_unregister(&mac80211_hwsim_driver);
 	return err;
 }
 module_init(init_mac80211_hwsim);
@@ -2527,5 +2542,6 @@  static void __exit exit_mac80211_hwsim(void)
 
 	mac80211_hwsim_free();
 	unregister_netdev(hwsim_mon);
+	driver_unregister(&mac80211_hwsim_driver);
 }
 module_exit(exit_mac80211_hwsim);
--
cgit v0.9.1