Page MenuHomeFreeBSD

D41729.id126878.diff
No OneTemporary

D41729.id126878.diff

diff --git a/sys/compat/linuxkpi/common/src/linux_firmware.c b/sys/compat/linuxkpi/common/src/linux_firmware.c
--- a/sys/compat/linuxkpi/common/src/linux_firmware.c
+++ b/sys/compat/linuxkpi/common/src/linux_firmware.c
@@ -94,11 +94,11 @@
fwimg++;
if (fwimg == NULL || *fwimg == '\0')
fwimg = fw_name;
- fbdfw = firmware_get_flags(fwimg, flags);
+ fbdfw = firmware_get_flags(fw_name, fwimg, flags);
/* (2) Try the original name if we have not yet. */
if (fbdfw == NULL && fwimg != fw_name) {
fwimg = fw_name;
- fbdfw = firmware_get_flags(fwimg, flags);
+ fbdfw = firmware_get_flags(fw_name, fwimg, flags);
}
/* (3) Flatten '/', '.' and '-' to '_' and try with adjusted name. */
if (fbdfw == NULL &&
@@ -108,16 +108,16 @@
if (fwimg != NULL) {
while ((p = strchr(fwimg, '/')) != NULL)
*p = '_';
- fbdfw = firmware_get_flags(fwimg, flags);
+ fbdfw = firmware_get_flags(fw_name, fwimg, flags);
if (fbdfw == NULL) {
while ((p = strchr(fwimg, '.')) != NULL)
*p = '_';
- fbdfw = firmware_get_flags(fwimg, flags);
+ fbdfw = firmware_get_flags(fw_name, fwimg, flags);
}
if (fbdfw == NULL) {
while ((p = strchr(fwimg, '-')) != NULL)
*p = '_';
- fbdfw = firmware_get_flags(fwimg, flags);
+ fbdfw = firmware_get_flags(fw_name, fwimg, flags);
}
free(__DECONST(void *, fwimg), M_LKPI_FW);
}
diff --git a/sys/kern/subr_firmware.c b/sys/kern/subr_firmware.c
--- a/sys/kern/subr_firmware.c
+++ b/sys/kern/subr_firmware.c
@@ -237,6 +237,7 @@
}
struct fw_loadimage {
+ const char *fwname;
const char *imagename;
uint32_t flags;
};
@@ -259,7 +260,7 @@
}
mtx_lock(&firmware_mtx);
- fp = lookup(fwli->imagename);
+ fp = lookup(fwli->fwname);
if (fp == NULL || fp->file != NULL) {
mtx_unlock(&firmware_mtx);
if (fp == NULL)
@@ -283,14 +284,14 @@
* release this reference for the image to be eligible for removal/unload.
*/
const struct firmware *
-firmware_get_flags(const char *imagename, uint32_t flags)
+firmware_get_flags(const char *fwname, const char *imagename, uint32_t flags)
{
struct task fwload_task;
struct thread *td;
struct priv_fw *fp;
mtx_lock(&firmware_mtx);
- fp = lookup(imagename);
+ fp = lookup(fwname);
if (fp != NULL)
goto found;
/*
@@ -312,6 +313,7 @@
if (!cold) {
struct fw_loadimage fwli;
+ fwli.fwname = fwname;
fwli.imagename = imagename;
fwli.flags = flags;
TASK_INIT(&fwload_task, 0, loadimage, (void *)&fwli);
@@ -323,7 +325,7 @@
/*
* After attempting to load the module, see if the image is registered.
*/
- fp = lookup(imagename);
+ fp = lookup(fwname);
if (fp == NULL) {
mtx_unlock(&firmware_mtx);
return NULL;
@@ -340,7 +342,7 @@
firmware_get(const char *imagename)
{
- return (firmware_get_flags(imagename, 0));
+ return (firmware_get_flags(imagename, imagename, 0));
}
/*
diff --git a/sys/sys/firmware.h b/sys/sys/firmware.h
--- a/sys/sys/firmware.h
+++ b/sys/sys/firmware.h
@@ -60,7 +60,8 @@
int firmware_unregister(const char *);
#define FIRMWARE_GET_NOWARN 0x0001 /* Do not warn if firmware not found. */
-const struct firmware *firmware_get_flags(const char *, uint32_t flags);
+const struct firmware *firmware_get_flags(const char *,
+ const char *, uint32_t flags);
const struct firmware *firmware_get(const char *);
#define FIRMWARE_UNLOAD 0x0001 /* unload if unreferenced */

File Metadata

Mime Type
text/plain
Expires
Fri, Feb 20, 1:03 PM (11 h, 21 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28899448
Default Alt Text
D41729.id126878.diff (3 KB)

Event Timeline