diff options
Diffstat (limited to 'drivers/base/firmware_loader/main.c')
-rw-r--r-- | drivers/base/firmware_loader/main.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c index b569d8a09392..2913bb0e5e7b 100644 --- a/drivers/base/firmware_loader/main.c +++ b/drivers/base/firmware_loader/main.c | |||
@@ -431,6 +431,11 @@ static int fw_add_devm_name(struct device *dev, const char *name) | |||
431 | return 0; | 431 | return 0; |
432 | } | 432 | } |
433 | #else | 433 | #else |
434 | static bool fw_cache_is_setup(struct device *dev, const char *name) | ||
435 | { | ||
436 | return false; | ||
437 | } | ||
438 | |||
434 | static int fw_add_devm_name(struct device *dev, const char *name) | 439 | static int fw_add_devm_name(struct device *dev, const char *name) |
435 | { | 440 | { |
436 | return 0; | 441 | return 0; |
@@ -672,6 +677,9 @@ request_firmware_into_buf(const struct firmware **firmware_p, const char *name, | |||
672 | { | 677 | { |
673 | int ret; | 678 | int ret; |
674 | 679 | ||
680 | if (fw_cache_is_setup(device, name)) | ||
681 | return -EOPNOTSUPP; | ||
682 | |||
675 | __module_get(THIS_MODULE); | 683 | __module_get(THIS_MODULE); |
676 | ret = _request_firmware(firmware_p, name, device, buf, size, | 684 | ret = _request_firmware(firmware_p, name, device, buf, size, |
677 | FW_OPT_UEVENT | FW_OPT_NOCACHE); | 685 | FW_OPT_UEVENT | FW_OPT_NOCACHE); |
@@ -769,6 +777,12 @@ request_firmware_nowait( | |||
769 | fw_work->opt_flags = FW_OPT_NOWAIT | | 777 | fw_work->opt_flags = FW_OPT_NOWAIT | |
770 | (uevent ? FW_OPT_UEVENT : FW_OPT_USERHELPER); | 778 | (uevent ? FW_OPT_UEVENT : FW_OPT_USERHELPER); |
771 | 779 | ||
780 | if (!uevent && fw_cache_is_setup(device, name)) { | ||
781 | kfree_const(fw_work->name); | ||
782 | kfree(fw_work); | ||
783 | return -EOPNOTSUPP; | ||
784 | } | ||
785 | |||
772 | if (!try_module_get(module)) { | 786 | if (!try_module_get(module)) { |
773 | kfree_const(fw_work->name); | 787 | kfree_const(fw_work->name); |
774 | kfree(fw_work); | 788 | kfree(fw_work); |