diff options
author | Dmitry Torokhov <[email protected]> | 2024-01-17 00:33:07 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <[email protected]> | 2024-03-07 22:02:12 +0000 |
commit | 8dde8fa0cc3edce73c050b9882d06c1a575f6402 (patch) | |
tree | 7b0d84904da9ba2e4dd4c4c2cc41bfd437c6abca | |
parent | 822d66c45e793240a9888463127059558bbe9c0d (diff) |
firmware_loader: introduce __free() cleanup hanler
Define cleanup handler using facilities from linux/cleanup.h to simplify
error handling in code using firmware loader. This will allow writing code
like this:
int driver_update_firmware(...)
{
const struct firmware *fw_entry __free(firmware) = NULL;
int error;
...
error = request_firmware(&fw_entry, fw_name, dev);
if (error) {
dev_err(dev, "failed to request firmware %s: %d",
fw_name, error);
return error;
}
error = check_firmware_valid(fw_entry);
if (error)
return error;
guard(mutex)(&instance->lock);
error = use_firmware(instance, fw);
if (error)
return error;
return 0;
}
Signed-off-by: Dmitry Torokhov <[email protected]>
Acked-by: Luis Chamberalin <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
-rw-r--r-- | include/linux/firmware.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/include/linux/firmware.h b/include/linux/firmware.h index 0311858b46ce..f026f8926d79 100644 --- a/include/linux/firmware.h +++ b/include/linux/firmware.h @@ -4,6 +4,7 @@ #include <linux/types.h> #include <linux/compiler.h> +#include <linux/cleanup.h> #include <linux/gfp.h> #define FW_ACTION_NOUEVENT 0 @@ -198,4 +199,6 @@ static inline void firmware_upload_unregister(struct fw_upload *fw_upload) int firmware_request_cache(struct device *device, const char *name); +DEFINE_FREE(firmware, struct firmware *, release_firmware(_T)) + #endif |