On Wed, Jul 25, 2012 at 01:00:06AM +0800, Ming Lei wrote: > This patch always let firmware_buf own the pages buffer allocated > inside firmware_data_write, also add all instances of firmware_buf > into the firmware cache global list. Also introduce one private field > in 'struct firmware', so release_firmware will see the instance of > firmware_buf associated with one firmware instance, then just 'free' > the instance of firmware_buf. > > The firmware_buf instance represents one pages buffer for one > firmware image, so lots of firmware loading requests can share > the same firmware_buf instance if they request the same firmware > image file. > > This patch will make introducing cache_firmware/uncache_firmware > easily. > > In fact, the patch improves request_formware/release_firmware: > > - only request userspace to write firmware image once if > several devices share one same firmware image and its drivers > call request_firmware concurrently. > > Signed-off-by: Ming Lei <ming....@canonical.com> > --- > drivers/base/firmware_class.c | 222 > ++++++++++++++++++++++++++++------------- > include/linux/firmware.h | 3 + > 2 files changed, 157 insertions(+), 68 deletions(-) > > diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c > index 986d9df..225898e 100644 > --- a/drivers/base/firmware_class.c > +++ b/drivers/base/firmware_class.c > @@ -21,6 +21,7 @@ > #include <linux/firmware.h> > #include <linux/slab.h> > #include <linux/sched.h> > +#include <linux/list.h> > > MODULE_AUTHOR("Manuel Estrada Sainz"); > MODULE_DESCRIPTION("Multi purpose firmware loading support"); > @@ -85,13 +86,18 @@ static inline long firmware_loading_timeout(void) > return loading_timeout > 0 ? loading_timeout * HZ : > MAX_SCHEDULE_TIMEOUT; > } > > -/* fw_lock could be moved to 'struct firmware_priv' but since it is just > - * guarding for corner cases a global lock should be OK */ > -static DEFINE_MUTEX(fw_lock); > +struct firmware_cache { > +
Stray newline. Sorry I missed it the first time. > + /* firmware_buf instance will be added into the below list */ > + spinlock_t lock; > + struct list_head head; > +}; [ … ] -- Regards/Gruss, Boris. Advanced Micro Devices GmbH Einsteinring 24, 85609 Dornach GM: Alberto Bozzo Reg: Dornach, Landkreis Muenchen HRB Nr. 43632 WEEE Registernr: 129 19551 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/