All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [RFC] brcm80211: smac: remove firmware requests from init_module syscall
       [not found] <1329770668-6484-1-git-send-email-arend@broadcom.com>
@ 2012-02-20 21:26 ` Larry Finger
  0 siblings, 0 replies; only message in thread
From: Larry Finger @ 2012-02-20 21:26 UTC (permalink / raw)
  To: Arend van Spriel; +Cc: linux-wireless, Arend van Spriel, Kay Sievers

On 02/20/2012 02:44 PM, Arend van Spriel wrote:
> As indicated in [1] on netdev mailing list drivers should not block
> on the init_module() syscall. This patch defers the actual driver
> registration to a workqueue so the init_module() syscall can complete
> without delay.
>
> [1] http://article.gmane.org/gmane.linux.network/217729/
>
> Cc: Kay Sievers<kay.sievers@vrfy.org>
> Cc: Larry Finger<Larry.Finger@lwfinger.net>
> Signed-off-by: Arend van Spriel<arend@broadcom.com>
> ---
> Here is the patch I came up with to avoid udev blocking on init_module().
> It is pretty straightforward, but maybe I am overlooking things here. So
> feel free to comment.
>
> Gr. AvS

Arend,

Despite the simplicity, this patch looks right to me. As a side benefit, I 
learned about the DECLARE_WORK macro. Handy for this purpose.

Larry

> ---
>   .../net/wireless/brcm80211/brcmsmac/mac80211_if.c  |   17 ++++++++++-------
>   1 files changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
> index fec0f10..fe73451 100644
> --- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
> +++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
> @@ -1173,21 +1173,24 @@ static struct bcma_driver brcms_bcma_driver = {
>    * and if so, performs a brcms_attach() on it.
>    *
>    */
> -static int __init brcms_module_init(void)
> +static void brcms_driver_init(struct work_struct *work)
>   {
>   	int error = -ENODEV;
>
> +	error = bcma_driver_register(&brcms_bcma_driver);
> +	pr_err("%s: register returned %d\n", __func__, error);
> +}
> +
> +DECLARE_WORK(brcms_driver_work, brcms_driver_init);
> +
> +static int __init brcms_module_init(void)
> +{
>   #ifdef DEBUG
>   	if (msglevel != 0xdeadbeef)
>   		brcm_msg_level = msglevel;
>   #endif				/* DEBUG */
>
> -	error = bcma_driver_register(&brcms_bcma_driver);
> -	pr_err("%s: register returned %d\n", __func__, error);
> -	if (!error)
> -		return 0;
> -
> -	return error;
> +	return schedule_work(&brcms_driver_work);
>   }
>
>   /**


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2012-02-20 21:26 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <1329770668-6484-1-git-send-email-arend@broadcom.com>
2012-02-20 21:26 ` [RFC] brcm80211: smac: remove firmware requests from init_module syscall Larry Finger

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.