[RFC PATCH v1 00/15] firmware loader: introduce cache/uncache firmware

From: Ming Lei
Date: Sat Aug 04 2012 - 00:01:37 EST


Hi,

In [1][2], the problem below has been discussed for some time:

device's firmware may be lost during suspend/resume
cycle because device might be unplugged and plugged again
or device experiences system power loss during the period.
But in resume path, system is still not ready(process
frozen, rootfs not usable, ...) to complete loading firmware
from user space for devices.

The conclusion is that caching firmware during suspend/resume cycle
is capable of solving the problem.

This patchset implements cache/uncache firmware mechanism,
and apply the mechnism to cache device's firmware in kernel memory
space automatically during suspend/resume cyclye, so device can
load its firmware easily in its resume path. When resume is completed
and system is ready, the cached firmware will be removed from
kernel memory later.

The patch 15/15 is one example to apply the firmware cache mechanism on
ath9k-htc driver.

Even there are some corener cases[3] which can't be solved by the
cache approach, but as discussed in[4], the problem can be easily
fixed by a simple patch written by Linus.

This patch set is against 3.6.0-rc1-next-20120803.

[1]. http://marc.info/?t=134278790800004&r=1&w=2
[2]. http://marc.info/?t=132528956000002&r=10&w=2
[3]. http://marc.info/?l=linux-usb&m=132554118928398&w=2
[4]. http://marc.info/?l=linux-kernel&m=134323730805443&w=2

--
V1:
-handle vmap failure case(1/15)
-fix a memory leak of 'firmware_buf'(5/15)
-fix oops during failure path of requesting firmware(6/15)
-fix vmap more than one time(6/15)
-introduce __fw_lookup_buf to avoid code duplication(7/15)
-fix comment of request_firmware_nowait(9/15)
-avoid releasing lock in devres_for_each_res(11/15)
-use new devres iterator API to create fw cache entry(12/15)
-rename some functions and data structures(12/15)
-some code style fixes

Thanks for Borislav's review!

--
drivers/base/devres.c | 42 ++
drivers/base/firmware_class.c | 764 ++++++++++++++++++++++++++----
drivers/net/wireless/ath/ath9k/hif_usb.c | 34 +-
drivers/net/wireless/ath/ath9k/hif_usb.h | 4 +-
include/linux/device.h | 4 +
include/linux/firmware.h | 15 +
6 files changed, 747 insertions(+), 116 deletions(-)


Thanks,
--
Ming Lei


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/