Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F145438175
D41729.id126878.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D41729.id126878.diff
View Options
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
Details
Attached
Mime Type
text/plain
Expires
Fri, Feb 20, 9:46 PM (20 h, 5 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28899448
Default Alt Text
D41729.id126878.diff (3 KB)
Attached To
Mode
D41729: GPU firmware: Load i915 and amdgpu firmware failed.
Attached
Detach File
Event Timeline
Log In to Comment