linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Larry Finger <Larry.Finger@lwfinger.net>
To: wireless <linux-wireless@vger.kernel.org>
Subject: Drivers that use synchronous firmware loading
Date: Sat, 28 Jan 2012 21:39:48 -0600	[thread overview]
Message-ID: <4F24BF84.1020209@lwfinger.net> (raw)

To all wireless developers:

As you may have noticed, the udev layer is being changed. One of the side 
effects is that the kernel may timeout when a driver uses synchronous firmware 
loading. My rtlwifi drivers were affected, and a kernel bugzilla has been logged 
against rtl8192se. I suggest that the maintainers should be proactive, and 
convert to asynchronous loading as soon as possible.

In wireless-testing, the files listed below contain calls to read_firmware() 
rather than read_firmware_nowait():

drivers/net/wireless/at76c50x-usb.c
drivers/net/wireless/ath/ath6kl/init.c
drivers/net/wireless/ath/ath9k/hif_usb.c
drivers/net/wireless/atmel.c
drivers/net/wireless/b43/main.c
drivers/net/wireless/b43legacy/main.c
drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c
drivers/net/wireless/ipw2x00/ipw2100.c
drivers/net/wireless/iwlegacy/3945-mac.c
drivers/net/wireless/iwlegacy/4965-mac.c
drivers/net/wireless/iwlwifi/iwl-agn.c
drivers/net/wireless/libertas/main.c
drivers/net/wireless/libertas/if_usb.c
drivers/net/wireless/libertas_tf/if_usb.c
drivers/net/wireless/mwifiex/main.c
drivers/net/wireless/mwl8k.c
drivers/net/wireless/orinoco/fw.c
drivers/net/wireless/orinoco/orinoco_usb.c
drivers/net/wireless/p54/p54spi.c
drivers/net/wireless/p54/p54usb.c
drivers/net/wireless/p54/p54pci.c
drivers/net/wireless/prism54/islpci_dev.c
drivers/net/wireless/rt2x00/rt2x00firmware.c
drivers/net/wireless/wl1251/main.c
drivers/net/wireless/zd1201.c
drivers/net/wireless/zd1211rw/zd_usb.c

Some of the drivers above may be exempt as their firmware is built into the 
kernel. I did not check for that case.

When your driver loads only a single firmware file, the procedure is relatively 
easy. I copied the flow used in iwlagn. In the firmware callback routine, the 
kernel has loaded a copy of the firmware file. All you need to do is copy that 
info into the driver's cached version of the firmware and free the kernel's 
copy. Once the firmware is loaded, then start mac80211 with the 
ieee80211_register_hw() call.

One additional step is to create a completion queue entry, that is initialized 
in the probe routine. Once the firmware callback routine is entered, then you 
call the complete() routine for that queue, and check for completion before the 
driver is unloaded. This way, the case where the driver is unloaded while a 
callback is pending is prevented.

I am currently working on b43legacy, which loads 4 different firmware files. 
Using only a single callback routine is proving to be a little difficult, but I 
hope to find a way to handle this case as well. Once I have b43legacy solved, 
b43 will be easy.

Thanks,

Larry

             reply	other threads:[~2012-01-29  3:39 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-29  3:39 Larry Finger [this message]
2012-01-29 17:35 ` Drivers that use synchronous firmware loading Kalle Valo
2012-01-29 18:00   ` Larry Finger
2012-01-30  7:01     ` Luciano Coelho

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4F24BF84.1020209@lwfinger.net \
    --to=larry.finger@lwfinger.net \
    --cc=linux-wireless@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).