On 24.06.2020 14:30, Greg Kroah-Hartman wrote: > On Wed, Jun 24, 2020 at 01:41:25PM +0200, Andrzej Hajda wrote: >> Many resource acquisition functions return error value encapsulated in >> pointer instead of integer value. To simplify coding we can use macro >> which will accept both types of error. >> With this patch user can use: >> probe_err(dev, ptr, ...) >> instead of: >> probe_err(dev, PTR_ERR(ptr), ...) >> Without loosing old functionality: >> probe_err(dev, err, ...) >> >> Signed-off-by: Andrzej Hajda <a.hajda@xxxxxxxxxxx> >> --- >> drivers/base/core.c | 25 ++----------------------- >> include/linux/device.h | 25 ++++++++++++++++++++++++- >> 2 files changed, 26 insertions(+), 24 deletions(-) >> >> diff --git a/drivers/base/core.c b/drivers/base/core.c >> index 2a96954d5460..df283c62d9c0 100644 >> --- a/drivers/base/core.c >> +++ b/drivers/base/core.c >> @@ -3953,28 +3953,7 @@ define_dev_printk_level(_dev_info, KERN_INFO); >> >> #endif >> >> -/** >> - * probe_err - 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 message if the error is not -EPROBE_DEFER and propagate it. >> - * In case of -EPROBE_DEFER it sets defer probe reason, which can be checked >> - * later by reading devices_deferred debugfs attribute. >> - * It replaces code sequence: >> - * if (err != -EPROBE_DEFER) >> - * dev_err(dev, ...); >> - * return err; >> - * with >> - * return probe_err(dev, err, ...); >> - * >> - * Returns @err. >> - * >> - */ >> -int probe_err(const struct device *dev, int err, const char *fmt, ...) >> +int __probe_err(const struct device *dev, int err, const char *fmt, ...) >> { >> struct va_format vaf; >> va_list args; >> @@ -3992,7 +3971,7 @@ int probe_err(const struct device *dev, int err, const char *fmt, ...) >> >> return err; >> } >> -EXPORT_SYMBOL_GPL(probe_err); >> +EXPORT_SYMBOL_GPL(__probe_err); >> >> static inline bool fwnode_is_primary(struct fwnode_handle *fwnode) >> { >> diff --git a/include/linux/device.h b/include/linux/device.h >> index 40a90d9bf799..22d3c3d4f461 100644 >> --- a/include/linux/device.h >> +++ b/include/linux/device.h >> @@ -965,7 +965,30 @@ void device_links_supplier_sync_state_pause(void); >> void device_links_supplier_sync_state_resume(void); >> >> extern __printf(3, 4) >> -int probe_err(const struct device *dev, int err, const char *fmt, ...); >> +int __probe_err(const struct device *dev, int err, const char *fmt, ...); >> + >> +/** >> + * probe_err - probe error check and log helper >> + * @dev: the pointer to the struct device >> + * @err: error value to test, can be integer or pointer type >> + * @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 message if the error is not -EPROBE_DEFER and propagate it. >> + * In case of -EPROBE_DEFER it sets defer probe reason, which can be checked >> + * later by reading devices_deferred debugfs attribute. >> + * It replaces code sequence: >> + * if (err != -EPROBE_DEFER) >> + * dev_err(dev, ...); >> + * return err; >> + * with >> + * return probe_err(dev, err, ...); >> + * >> + * Returns @err. >> + * >> + */ >> +#define probe_err(dev, err, args...) __probe_err(dev, (long)(err), args) > Shouldn't that be "unsigned long" instead of "long"? That's what we put > pointers in last I looked... Unless we know this is error inside pointer, in such case we follow practice from PTR_ERR function. Regards Andrzej > > thanks, > > greg k-h > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://protect2.fireeye.com/url?k=75712e41-28bf2f92-7570a50e-000babff317b-a5a76e98e30aecc2&q=1&u=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Fdri-devel > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel