From dc8af9d2004531791ce3011f1f9eef942bbe7ead Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 5 Dec 2022 17:51:21 +0100 Subject: [PATCH] drop unneeded driver core changes and a usb 5.4 patch and revert --- ...v_printk-like-functions-to-dev_print.patch | 513 ------------------ ...ver-core-add-device-probe-log-helper.patch | 105 ---- ...-bcma-add-a-check-for-devm_gpiod_get.patch | 57 -- queue-5.4/series | 4 - ...-bcma-add-a-check-for-devm_gpiod_get.patch | 43 -- 5 files changed, 722 deletions(-) delete mode 100644 queue-5.4/device.h-move-dev_printk-like-functions-to-dev_print.patch delete mode 100644 queue-5.4/driver-core-add-device-probe-log-helper.patch delete mode 100644 queue-5.4/revert-usb-bcma-add-a-check-for-devm_gpiod_get.patch delete mode 100644 queue-5.4/usb-bcma-add-a-check-for-devm_gpiod_get.patch diff --git a/queue-5.4/device.h-move-dev_printk-like-functions-to-dev_print.patch b/queue-5.4/device.h-move-dev_printk-like-functions-to-dev_print.patch deleted file mode 100644 index 5da54811090..00000000000 --- a/queue-5.4/device.h-move-dev_printk-like-functions-to-dev_print.patch +++ /dev/null @@ -1,513 +0,0 @@ -From 59146f9426b8d038777d8dcb0fd023c6d78d643d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 9 Dec 2019 20:33:00 +0100 -Subject: device.h: move dev_printk()-like functions to dev_printk.h - -From: Greg Kroah-Hartman - -[ Upstream commit af628aae8640c268938a0c9344b4ec0d102c0a0a ] - -device.h has everything and the kitchen sink when it comes to struct -device things, so split out the printk-specific things to a separate .h -file to make things easier to maintain and manage over time. - -Cc: Suzuki K Poulose -Cc: "Rafael J. Wysocki" -Cc: Saravana Kannan -Cc: Heikki Krogerus -Link: https://lore.kernel.org/r/20191209193303.1694546-4-gregkh@linuxfoundation.org -Signed-off-by: Greg Kroah-Hartman -Stable-dep-of: cd136706b4f9 ("USB: bcma: Make GPIO explicitly optional") -Signed-off-by: Sasha Levin ---- - include/linux/dev_printk.h | 235 +++++++++++++++++++++++++++++++++++++ - include/linux/device.h | 217 +--------------------------------- - 2 files changed, 236 insertions(+), 216 deletions(-) - create mode 100644 include/linux/dev_printk.h - -diff --git a/include/linux/dev_printk.h b/include/linux/dev_printk.h -new file mode 100644 -index 000000000000..5aad06b4ca7b ---- /dev/null -+++ b/include/linux/dev_printk.h -@@ -0,0 +1,235 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * dev_printk.h - printk messages helpers for devices -+ * -+ * Copyright (c) 2001-2003 Patrick Mochel -+ * Copyright (c) 2004-2009 Greg Kroah-Hartman -+ * Copyright (c) 2008-2009 Novell Inc. -+ * -+ */ -+ -+#ifndef _DEVICE_PRINTK_H_ -+#define _DEVICE_PRINTK_H_ -+ -+#include -+#include -+#include -+ -+#ifndef dev_fmt -+#define dev_fmt(fmt) fmt -+#endif -+ -+struct device; -+ -+#ifdef CONFIG_PRINTK -+ -+__printf(3, 0) __cold -+int dev_vprintk_emit(int level, const struct device *dev, -+ const char *fmt, va_list args); -+__printf(3, 4) __cold -+int dev_printk_emit(int level, const struct device *dev, const char *fmt, ...); -+ -+__printf(3, 4) __cold -+void dev_printk(const char *level, const struct device *dev, -+ const char *fmt, ...); -+__printf(2, 3) __cold -+void _dev_emerg(const struct device *dev, const char *fmt, ...); -+__printf(2, 3) __cold -+void _dev_alert(const struct device *dev, const char *fmt, ...); -+__printf(2, 3) __cold -+void _dev_crit(const struct device *dev, const char *fmt, ...); -+__printf(2, 3) __cold -+void _dev_err(const struct device *dev, const char *fmt, ...); -+__printf(2, 3) __cold -+void _dev_warn(const struct device *dev, const char *fmt, ...); -+__printf(2, 3) __cold -+void _dev_notice(const struct device *dev, const char *fmt, ...); -+__printf(2, 3) __cold -+void _dev_info(const struct device *dev, const char *fmt, ...); -+ -+#else -+ -+static inline __printf(3, 0) -+int dev_vprintk_emit(int level, const struct device *dev, -+ const char *fmt, va_list args) -+{ return 0; } -+static inline __printf(3, 4) -+int dev_printk_emit(int level, const struct device *dev, const char *fmt, ...) -+{ return 0; } -+ -+static inline void __dev_printk(const char *level, const struct device *dev, -+ struct va_format *vaf) -+{} -+static inline __printf(3, 4) -+void dev_printk(const char *level, const struct device *dev, -+ const char *fmt, ...) -+{} -+ -+static inline __printf(2, 3) -+void _dev_emerg(const struct device *dev, const char *fmt, ...) -+{} -+static inline __printf(2, 3) -+void _dev_crit(const struct device *dev, const char *fmt, ...) -+{} -+static inline __printf(2, 3) -+void _dev_alert(const struct device *dev, const char *fmt, ...) -+{} -+static inline __printf(2, 3) -+void _dev_err(const struct device *dev, const char *fmt, ...) -+{} -+static inline __printf(2, 3) -+void _dev_warn(const struct device *dev, const char *fmt, ...) -+{} -+static inline __printf(2, 3) -+void _dev_notice(const struct device *dev, const char *fmt, ...) -+{} -+static inline __printf(2, 3) -+void _dev_info(const struct device *dev, const char *fmt, ...) -+{} -+ -+#endif -+ -+/* -+ * #defines for all the dev_ macros to prefix with whatever -+ * possible use of #define dev_fmt(fmt) ... -+ */ -+ -+#define dev_emerg(dev, fmt, ...) \ -+ _dev_emerg(dev, dev_fmt(fmt), ##__VA_ARGS__) -+#define dev_crit(dev, fmt, ...) \ -+ _dev_crit(dev, dev_fmt(fmt), ##__VA_ARGS__) -+#define dev_alert(dev, fmt, ...) \ -+ _dev_alert(dev, dev_fmt(fmt), ##__VA_ARGS__) -+#define dev_err(dev, fmt, ...) \ -+ _dev_err(dev, dev_fmt(fmt), ##__VA_ARGS__) -+#define dev_warn(dev, fmt, ...) \ -+ _dev_warn(dev, dev_fmt(fmt), ##__VA_ARGS__) -+#define dev_notice(dev, fmt, ...) \ -+ _dev_notice(dev, dev_fmt(fmt), ##__VA_ARGS__) -+#define dev_info(dev, fmt, ...) \ -+ _dev_info(dev, dev_fmt(fmt), ##__VA_ARGS__) -+ -+#if defined(CONFIG_DYNAMIC_DEBUG) -+#define dev_dbg(dev, fmt, ...) \ -+ dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__) -+#elif defined(DEBUG) -+#define dev_dbg(dev, fmt, ...) \ -+ dev_printk(KERN_DEBUG, dev, dev_fmt(fmt), ##__VA_ARGS__) -+#else -+#define dev_dbg(dev, fmt, ...) \ -+({ \ -+ if (0) \ -+ dev_printk(KERN_DEBUG, dev, dev_fmt(fmt), ##__VA_ARGS__); \ -+}) -+#endif -+ -+#ifdef CONFIG_PRINTK -+#define dev_level_once(dev_level, dev, fmt, ...) \ -+do { \ -+ static bool __print_once __read_mostly; \ -+ \ -+ if (!__print_once) { \ -+ __print_once = true; \ -+ dev_level(dev, fmt, ##__VA_ARGS__); \ -+ } \ -+} while (0) -+#else -+#define dev_level_once(dev_level, dev, fmt, ...) \ -+do { \ -+ if (0) \ -+ dev_level(dev, fmt, ##__VA_ARGS__); \ -+} while (0) -+#endif -+ -+#define dev_emerg_once(dev, fmt, ...) \ -+ dev_level_once(dev_emerg, dev, fmt, ##__VA_ARGS__) -+#define dev_alert_once(dev, fmt, ...) \ -+ dev_level_once(dev_alert, dev, fmt, ##__VA_ARGS__) -+#define dev_crit_once(dev, fmt, ...) \ -+ dev_level_once(dev_crit, dev, fmt, ##__VA_ARGS__) -+#define dev_err_once(dev, fmt, ...) \ -+ dev_level_once(dev_err, dev, fmt, ##__VA_ARGS__) -+#define dev_warn_once(dev, fmt, ...) \ -+ dev_level_once(dev_warn, dev, fmt, ##__VA_ARGS__) -+#define dev_notice_once(dev, fmt, ...) \ -+ dev_level_once(dev_notice, dev, fmt, ##__VA_ARGS__) -+#define dev_info_once(dev, fmt, ...) \ -+ dev_level_once(dev_info, dev, fmt, ##__VA_ARGS__) -+#define dev_dbg_once(dev, fmt, ...) \ -+ dev_level_once(dev_dbg, dev, fmt, ##__VA_ARGS__) -+ -+#define dev_level_ratelimited(dev_level, dev, fmt, ...) \ -+do { \ -+ static DEFINE_RATELIMIT_STATE(_rs, \ -+ DEFAULT_RATELIMIT_INTERVAL, \ -+ DEFAULT_RATELIMIT_BURST); \ -+ if (__ratelimit(&_rs)) \ -+ dev_level(dev, fmt, ##__VA_ARGS__); \ -+} while (0) -+ -+#define dev_emerg_ratelimited(dev, fmt, ...) \ -+ dev_level_ratelimited(dev_emerg, dev, fmt, ##__VA_ARGS__) -+#define dev_alert_ratelimited(dev, fmt, ...) \ -+ dev_level_ratelimited(dev_alert, dev, fmt, ##__VA_ARGS__) -+#define dev_crit_ratelimited(dev, fmt, ...) \ -+ dev_level_ratelimited(dev_crit, dev, fmt, ##__VA_ARGS__) -+#define dev_err_ratelimited(dev, fmt, ...) \ -+ dev_level_ratelimited(dev_err, dev, fmt, ##__VA_ARGS__) -+#define dev_warn_ratelimited(dev, fmt, ...) \ -+ dev_level_ratelimited(dev_warn, dev, fmt, ##__VA_ARGS__) -+#define dev_notice_ratelimited(dev, fmt, ...) \ -+ dev_level_ratelimited(dev_notice, dev, fmt, ##__VA_ARGS__) -+#define dev_info_ratelimited(dev, fmt, ...) \ -+ dev_level_ratelimited(dev_info, dev, fmt, ##__VA_ARGS__) -+#if defined(CONFIG_DYNAMIC_DEBUG) -+/* descriptor check is first to prevent flooding with "callbacks suppressed" */ -+#define dev_dbg_ratelimited(dev, fmt, ...) \ -+do { \ -+ static DEFINE_RATELIMIT_STATE(_rs, \ -+ DEFAULT_RATELIMIT_INTERVAL, \ -+ DEFAULT_RATELIMIT_BURST); \ -+ DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \ -+ if (DYNAMIC_DEBUG_BRANCH(descriptor) && \ -+ __ratelimit(&_rs)) \ -+ __dynamic_dev_dbg(&descriptor, dev, dev_fmt(fmt), \ -+ ##__VA_ARGS__); \ -+} while (0) -+#elif defined(DEBUG) -+#define dev_dbg_ratelimited(dev, fmt, ...) \ -+do { \ -+ static DEFINE_RATELIMIT_STATE(_rs, \ -+ DEFAULT_RATELIMIT_INTERVAL, \ -+ DEFAULT_RATELIMIT_BURST); \ -+ if (__ratelimit(&_rs)) \ -+ dev_printk(KERN_DEBUG, dev, dev_fmt(fmt), ##__VA_ARGS__); \ -+} while (0) -+#else -+#define dev_dbg_ratelimited(dev, fmt, ...) \ -+do { \ -+ if (0) \ -+ dev_printk(KERN_DEBUG, dev, dev_fmt(fmt), ##__VA_ARGS__); \ -+} while (0) -+#endif -+ -+#ifdef VERBOSE_DEBUG -+#define dev_vdbg dev_dbg -+#else -+#define dev_vdbg(dev, fmt, ...) \ -+({ \ -+ if (0) \ -+ dev_printk(KERN_DEBUG, dev, dev_fmt(fmt), ##__VA_ARGS__); \ -+}) -+#endif -+ -+/* -+ * dev_WARN*() acts like dev_printk(), but with the key difference of -+ * using WARN/WARN_ONCE to include file/line information and a backtrace. -+ */ -+#define dev_WARN(dev, format, arg...) \ -+ WARN(1, "%s %s: " format, dev_driver_string(dev), dev_name(dev), ## arg); -+ -+#define dev_WARN_ONCE(dev, condition, format, arg...) \ -+ WARN_ONCE(condition, "%s %s: " format, \ -+ dev_driver_string(dev), dev_name(dev), ## arg) -+ -+#endif /* _DEVICE_PRINTK_H_ */ -diff --git a/include/linux/device.h b/include/linux/device.h -index 3414b5a67b46..ce8b36f34b3f 100644 ---- a/include/linux/device.h -+++ b/include/linux/device.h -@@ -12,6 +12,7 @@ - #ifndef _DEVICE_H_ - #define _DEVICE_H_ - -+#include - #include - #include - #include -@@ -22,7 +23,6 @@ - #include - #include - #include --#include - #include - #include - #include -@@ -1655,221 +1655,6 @@ struct device_link *device_link_add(struct device *consumer, - void device_link_del(struct device_link *link); - void device_link_remove(void *consumer, struct device *supplier); - --#ifndef dev_fmt --#define dev_fmt(fmt) fmt --#endif -- --#ifdef CONFIG_PRINTK -- --__printf(3, 0) __cold --int dev_vprintk_emit(int level, const struct device *dev, -- const char *fmt, va_list args); --__printf(3, 4) __cold --int dev_printk_emit(int level, const struct device *dev, const char *fmt, ...); -- --__printf(3, 4) __cold --void dev_printk(const char *level, const struct device *dev, -- const char *fmt, ...); --__printf(2, 3) __cold --void _dev_emerg(const struct device *dev, const char *fmt, ...); --__printf(2, 3) __cold --void _dev_alert(const struct device *dev, const char *fmt, ...); --__printf(2, 3) __cold --void _dev_crit(const struct device *dev, const char *fmt, ...); --__printf(2, 3) __cold --void _dev_err(const struct device *dev, const char *fmt, ...); --__printf(2, 3) __cold --void _dev_warn(const struct device *dev, const char *fmt, ...); --__printf(2, 3) __cold --void _dev_notice(const struct device *dev, const char *fmt, ...); --__printf(2, 3) __cold --void _dev_info(const struct device *dev, const char *fmt, ...); -- --#else -- --static inline __printf(3, 0) --int dev_vprintk_emit(int level, const struct device *dev, -- const char *fmt, va_list args) --{ return 0; } --static inline __printf(3, 4) --int dev_printk_emit(int level, const struct device *dev, const char *fmt, ...) --{ return 0; } -- --static inline void __dev_printk(const char *level, const struct device *dev, -- struct va_format *vaf) --{} --static inline __printf(3, 4) --void dev_printk(const char *level, const struct device *dev, -- const char *fmt, ...) --{} -- --static inline __printf(2, 3) --void _dev_emerg(const struct device *dev, const char *fmt, ...) --{} --static inline __printf(2, 3) --void _dev_crit(const struct device *dev, const char *fmt, ...) --{} --static inline __printf(2, 3) --void _dev_alert(const struct device *dev, const char *fmt, ...) --{} --static inline __printf(2, 3) --void _dev_err(const struct device *dev, const char *fmt, ...) --{} --static inline __printf(2, 3) --void _dev_warn(const struct device *dev, const char *fmt, ...) --{} --static inline __printf(2, 3) --void _dev_notice(const struct device *dev, const char *fmt, ...) --{} --static inline __printf(2, 3) --void _dev_info(const struct device *dev, const char *fmt, ...) --{} -- --#endif -- --/* -- * #defines for all the dev_ macros to prefix with whatever -- * possible use of #define dev_fmt(fmt) ... -- */ -- --#define dev_emerg(dev, fmt, ...) \ -- _dev_emerg(dev, dev_fmt(fmt), ##__VA_ARGS__) --#define dev_crit(dev, fmt, ...) \ -- _dev_crit(dev, dev_fmt(fmt), ##__VA_ARGS__) --#define dev_alert(dev, fmt, ...) \ -- _dev_alert(dev, dev_fmt(fmt), ##__VA_ARGS__) --#define dev_err(dev, fmt, ...) \ -- _dev_err(dev, dev_fmt(fmt), ##__VA_ARGS__) --#define dev_warn(dev, fmt, ...) \ -- _dev_warn(dev, dev_fmt(fmt), ##__VA_ARGS__) --#define dev_notice(dev, fmt, ...) \ -- _dev_notice(dev, dev_fmt(fmt), ##__VA_ARGS__) --#define dev_info(dev, fmt, ...) \ -- _dev_info(dev, dev_fmt(fmt), ##__VA_ARGS__) -- --#if defined(CONFIG_DYNAMIC_DEBUG) --#define dev_dbg(dev, fmt, ...) \ -- dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__) --#elif defined(DEBUG) --#define dev_dbg(dev, fmt, ...) \ -- dev_printk(KERN_DEBUG, dev, dev_fmt(fmt), ##__VA_ARGS__) --#else --#define dev_dbg(dev, fmt, ...) \ --({ \ -- if (0) \ -- dev_printk(KERN_DEBUG, dev, dev_fmt(fmt), ##__VA_ARGS__); \ --}) --#endif -- --#ifdef CONFIG_PRINTK --#define dev_level_once(dev_level, dev, fmt, ...) \ --do { \ -- static bool __print_once __read_mostly; \ -- \ -- if (!__print_once) { \ -- __print_once = true; \ -- dev_level(dev, fmt, ##__VA_ARGS__); \ -- } \ --} while (0) --#else --#define dev_level_once(dev_level, dev, fmt, ...) \ --do { \ -- if (0) \ -- dev_level(dev, fmt, ##__VA_ARGS__); \ --} while (0) --#endif -- --#define dev_emerg_once(dev, fmt, ...) \ -- dev_level_once(dev_emerg, dev, fmt, ##__VA_ARGS__) --#define dev_alert_once(dev, fmt, ...) \ -- dev_level_once(dev_alert, dev, fmt, ##__VA_ARGS__) --#define dev_crit_once(dev, fmt, ...) \ -- dev_level_once(dev_crit, dev, fmt, ##__VA_ARGS__) --#define dev_err_once(dev, fmt, ...) \ -- dev_level_once(dev_err, dev, fmt, ##__VA_ARGS__) --#define dev_warn_once(dev, fmt, ...) \ -- dev_level_once(dev_warn, dev, fmt, ##__VA_ARGS__) --#define dev_notice_once(dev, fmt, ...) \ -- dev_level_once(dev_notice, dev, fmt, ##__VA_ARGS__) --#define dev_info_once(dev, fmt, ...) \ -- dev_level_once(dev_info, dev, fmt, ##__VA_ARGS__) --#define dev_dbg_once(dev, fmt, ...) \ -- dev_level_once(dev_dbg, dev, fmt, ##__VA_ARGS__) -- --#define dev_level_ratelimited(dev_level, dev, fmt, ...) \ --do { \ -- static DEFINE_RATELIMIT_STATE(_rs, \ -- DEFAULT_RATELIMIT_INTERVAL, \ -- DEFAULT_RATELIMIT_BURST); \ -- if (__ratelimit(&_rs)) \ -- dev_level(dev, fmt, ##__VA_ARGS__); \ --} while (0) -- --#define dev_emerg_ratelimited(dev, fmt, ...) \ -- dev_level_ratelimited(dev_emerg, dev, fmt, ##__VA_ARGS__) --#define dev_alert_ratelimited(dev, fmt, ...) \ -- dev_level_ratelimited(dev_alert, dev, fmt, ##__VA_ARGS__) --#define dev_crit_ratelimited(dev, fmt, ...) \ -- dev_level_ratelimited(dev_crit, dev, fmt, ##__VA_ARGS__) --#define dev_err_ratelimited(dev, fmt, ...) \ -- dev_level_ratelimited(dev_err, dev, fmt, ##__VA_ARGS__) --#define dev_warn_ratelimited(dev, fmt, ...) \ -- dev_level_ratelimited(dev_warn, dev, fmt, ##__VA_ARGS__) --#define dev_notice_ratelimited(dev, fmt, ...) \ -- dev_level_ratelimited(dev_notice, dev, fmt, ##__VA_ARGS__) --#define dev_info_ratelimited(dev, fmt, ...) \ -- dev_level_ratelimited(dev_info, dev, fmt, ##__VA_ARGS__) --#if defined(CONFIG_DYNAMIC_DEBUG) --/* descriptor check is first to prevent flooding with "callbacks suppressed" */ --#define dev_dbg_ratelimited(dev, fmt, ...) \ --do { \ -- static DEFINE_RATELIMIT_STATE(_rs, \ -- DEFAULT_RATELIMIT_INTERVAL, \ -- DEFAULT_RATELIMIT_BURST); \ -- DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \ -- if (DYNAMIC_DEBUG_BRANCH(descriptor) && \ -- __ratelimit(&_rs)) \ -- __dynamic_dev_dbg(&descriptor, dev, dev_fmt(fmt), \ -- ##__VA_ARGS__); \ --} while (0) --#elif defined(DEBUG) --#define dev_dbg_ratelimited(dev, fmt, ...) \ --do { \ -- static DEFINE_RATELIMIT_STATE(_rs, \ -- DEFAULT_RATELIMIT_INTERVAL, \ -- DEFAULT_RATELIMIT_BURST); \ -- if (__ratelimit(&_rs)) \ -- dev_printk(KERN_DEBUG, dev, dev_fmt(fmt), ##__VA_ARGS__); \ --} while (0) --#else --#define dev_dbg_ratelimited(dev, fmt, ...) \ --do { \ -- if (0) \ -- dev_printk(KERN_DEBUG, dev, dev_fmt(fmt), ##__VA_ARGS__); \ --} while (0) --#endif -- --#ifdef VERBOSE_DEBUG --#define dev_vdbg dev_dbg --#else --#define dev_vdbg(dev, fmt, ...) \ --({ \ -- if (0) \ -- dev_printk(KERN_DEBUG, dev, dev_fmt(fmt), ##__VA_ARGS__); \ --}) --#endif -- --/* -- * dev_WARN*() acts like dev_printk(), but with the key difference of -- * using WARN/WARN_ONCE to include file/line information and a backtrace. -- */ --#define dev_WARN(dev, format, arg...) \ -- WARN(1, "%s %s: " format, dev_driver_string(dev), dev_name(dev), ## arg); -- --#define dev_WARN_ONCE(dev, condition, format, arg...) \ -- WARN_ONCE(condition, "%s %s: " format, \ -- dev_driver_string(dev), dev_name(dev), ## arg) -- - /* Create alias, so I can be autoloaded. */ - #define MODULE_ALIAS_CHARDEV(major,minor) \ - MODULE_ALIAS("char-major-" __stringify(major) "-" __stringify(minor)) --- -2.35.1 - diff --git a/queue-5.4/driver-core-add-device-probe-log-helper.patch b/queue-5.4/driver-core-add-device-probe-log-helper.patch deleted file mode 100644 index d0a265dedf1..00000000000 --- a/queue-5.4/driver-core-add-device-probe-log-helper.patch +++ /dev/null @@ -1,105 +0,0 @@ -From e4fa76777e32b842ca1a43cf5bbd64ecf2b7edd7 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 13 Jul 2020 16:43:21 +0200 -Subject: driver core: add device probe log helper - -From: Andrzej Hajda - -[ Upstream commit a787e5400a1ceeb0ef92d71ec43aeb35b1fa1334 ] - -During probe every time driver gets resource it should usually check for -error printk some message if it is not -EPROBE_DEFER and return the error. -This pattern is simple but requires adding few lines after any resource -acquisition code, as a result it is often omitted or implemented only -partially. -dev_err_probe helps to replace such code sequences with simple call, -so code: - if (err != -EPROBE_DEFER) - dev_err(dev, ...); - return err; -becomes: - return dev_err_probe(dev, err, ...); - -Signed-off-by: Andrzej Hajda -Reviewed-by: Rafael J. Wysocki -Reviewed-by: Mark Brown -Reviewed-by: Andy Shevchenko -Link: https://lore.kernel.org/r/20200713144324.23654-2-a.hajda@samsung.com -Signed-off-by: Greg Kroah-Hartman -Stable-dep-of: cd136706b4f9 ("USB: bcma: Make GPIO explicitly optional") -Signed-off-by: Sasha Levin ---- - drivers/base/core.c | 42 ++++++++++++++++++++++++++++++++++++++++++ - include/linux/device.h | 3 +++ - 2 files changed, 45 insertions(+) - -diff --git a/drivers/base/core.c b/drivers/base/core.c -index 1b016fdd1a75..20bf185d5441 100644 ---- a/drivers/base/core.c -+++ b/drivers/base/core.c -@@ -3399,6 +3399,48 @@ define_dev_printk_level(_dev_info, KERN_INFO); - - #endif - -+/** -+ * dev_err_probe - probe error check and log helper -+ * @dev: the pointer to the struct device -+ * @err: error value to test -+ * @fmt: printf-style format string -+ * @...: arguments as specified in the format string -+ * -+ * This helper implements common pattern present in probe functions for error -+ * checking: print debug or error message depending if the error value is -+ * -EPROBE_DEFER and propagate error upwards. -+ * It replaces code sequence: -+ * if (err != -EPROBE_DEFER) -+ * dev_err(dev, ...); -+ * else -+ * dev_dbg(dev, ...); -+ * return err; -+ * with -+ * return dev_err_probe(dev, err, ...); -+ * -+ * Returns @err. -+ * -+ */ -+int dev_err_probe(const struct device *dev, int err, const char *fmt, ...) -+{ -+ struct va_format vaf; -+ va_list args; -+ -+ va_start(args, fmt); -+ vaf.fmt = fmt; -+ vaf.va = &args; -+ -+ if (err != -EPROBE_DEFER) -+ dev_err(dev, "error %d: %pV", err, &vaf); -+ else -+ dev_dbg(dev, "error %d: %pV", err, &vaf); -+ -+ va_end(args); -+ -+ return err; -+} -+EXPORT_SYMBOL_GPL(dev_err_probe); -+ - static inline bool fwnode_is_primary(struct fwnode_handle *fwnode) - { - return fwnode && !IS_ERR(fwnode->secondary); -diff --git a/include/linux/device.h b/include/linux/device.h -index ce8b36f34b3f..000514b0aaf0 100644 ---- a/include/linux/device.h -+++ b/include/linux/device.h -@@ -1655,6 +1655,9 @@ struct device_link *device_link_add(struct device *consumer, - void device_link_del(struct device_link *link); - void device_link_remove(void *consumer, struct device *supplier); - -+extern __printf(3, 4) -+int dev_err_probe(const struct device *dev, int err, const char *fmt, ...); -+ - /* Create alias, so I can be autoloaded. */ - #define MODULE_ALIAS_CHARDEV(major,minor) \ - MODULE_ALIAS("char-major-" __stringify(major) "-" __stringify(minor)) --- -2.35.1 - diff --git a/queue-5.4/revert-usb-bcma-add-a-check-for-devm_gpiod_get.patch b/queue-5.4/revert-usb-bcma-add-a-check-for-devm_gpiod_get.patch deleted file mode 100644 index 3f05a418d92..00000000000 --- a/queue-5.4/revert-usb-bcma-add-a-check-for-devm_gpiod_get.patch +++ /dev/null @@ -1,57 +0,0 @@ -From c0ac030adcb47352b739d19e20d28b2fa3290a56 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 31 Aug 2021 08:54:19 +0200 -Subject: Revert "USB: bcma: Add a check for devm_gpiod_get" -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Rafał Miłecki - -[ Upstream commit d91adc5322ab53df4b6d1989242bfb6c63163eb2 ] - -This reverts commit f3de5d857bb2362b00e2a8d4bc886cd49dcb66db. - -That commit broke USB on all routers that have USB always powered on and -don't require toggling any GPIO. It's a majority of devices actually. - -The original code worked and seemed safe: vcc GPIO is optional and -bcma_hci_platform_power_gpio() takes care of checking the pointer before -using it. - -This revert fixes: -[ 10.801127] bcma_hcd: probe of bcma0:11 failed with error -2 - -Fixes: f3de5d857bb2 ("USB: bcma: Add a check for devm_gpiod_get") -Cc: stable -Cc: Chuhong Yuan -Signed-off-by: Rafał Miłecki -Link: https://lore.kernel.org/r/20210831065419.18371-1-zajec5@gmail.com -Signed-off-by: Greg Kroah-Hartman -Stable-dep-of: cd136706b4f9 ("USB: bcma: Make GPIO explicitly optional") -Signed-off-by: Sasha Levin ---- - drivers/usb/host/bcma-hcd.c | 5 +---- - 1 file changed, 1 insertion(+), 4 deletions(-) - -diff --git a/drivers/usb/host/bcma-hcd.c b/drivers/usb/host/bcma-hcd.c -index 652fa29beb27..2400a826397a 100644 ---- a/drivers/usb/host/bcma-hcd.c -+++ b/drivers/usb/host/bcma-hcd.c -@@ -406,12 +406,9 @@ static int bcma_hcd_probe(struct bcma_device *core) - return -ENOMEM; - usb_dev->core = core; - -- if (core->dev.of_node) { -+ if (core->dev.of_node) - usb_dev->gpio_desc = devm_gpiod_get(&core->dev, "vcc", - GPIOD_OUT_HIGH); -- if (IS_ERR(usb_dev->gpio_desc)) -- return PTR_ERR(usb_dev->gpio_desc); -- } - - switch (core->id.id) { - case BCMA_CORE_USB20_HOST: --- -2.35.1 - diff --git a/queue-5.4/series b/queue-5.4/series index ba286d09a34..98b11b70cef 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -52,10 +52,6 @@ iio-ms5611-simplify-io-callback-parameters.patch iio-pressure-ms5611-fixed-value-compensation-bug.patch ceph-do-not-update-snapshot-context-when-there-is-no.patch ceph-avoid-putting-the-realm-twice-when-decoding-sna.patch -usb-bcma-add-a-check-for-devm_gpiod_get.patch -device.h-move-dev_printk-like-functions-to-dev_print.patch -driver-core-add-device-probe-log-helper.patch -revert-usb-bcma-add-a-check-for-devm_gpiod_get.patch usb-bcma-make-gpio-explicitly-optional.patch firmware-google-release-devices-before-unregistering.patch firmware-coreboot-register-bus-in-module-init.patch diff --git a/queue-5.4/usb-bcma-add-a-check-for-devm_gpiod_get.patch b/queue-5.4/usb-bcma-add-a-check-for-devm_gpiod_get.patch deleted file mode 100644 index 1701c3ae7de..00000000000 --- a/queue-5.4/usb-bcma-add-a-check-for-devm_gpiod_get.patch +++ /dev/null @@ -1,43 +0,0 @@ -From b9ea1129368b877a7143b714b7e09b6820a28000 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 16 Oct 2019 16:35:32 +0800 -Subject: USB: bcma: Add a check for devm_gpiod_get - -From: Chuhong Yuan - -[ Upstream commit f3de5d857bb2362b00e2a8d4bc886cd49dcb66db ] - -bcma_hcd_probe misses a check for devm_gpiod_get and may miss -the error. -Add a check for it and return the error if a failure occurs. - -Signed-off-by: Chuhong Yuan -Link: https://lore.kernel.org/r/20191016083531.5734-1-hslester96@gmail.com -Signed-off-by: Greg Kroah-Hartman -Stable-dep-of: cd136706b4f9 ("USB: bcma: Make GPIO explicitly optional") -Signed-off-by: Sasha Levin ---- - drivers/usb/host/bcma-hcd.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/drivers/usb/host/bcma-hcd.c b/drivers/usb/host/bcma-hcd.c -index 2400a826397a..652fa29beb27 100644 ---- a/drivers/usb/host/bcma-hcd.c -+++ b/drivers/usb/host/bcma-hcd.c -@@ -406,9 +406,12 @@ static int bcma_hcd_probe(struct bcma_device *core) - return -ENOMEM; - usb_dev->core = core; - -- if (core->dev.of_node) -+ if (core->dev.of_node) { - usb_dev->gpio_desc = devm_gpiod_get(&core->dev, "vcc", - GPIOD_OUT_HIGH); -+ if (IS_ERR(usb_dev->gpio_desc)) -+ return PTR_ERR(usb_dev->gpio_desc); -+ } - - switch (core->id.id) { - case BCMA_CORE_USB20_HOST: --- -2.35.1 - -- 2.47.3