On Tue, May 26, 2020 at 5:28 PM Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote: > > On Tue, May 26, 2020 at 05:19:07PM +0200, Rafael J. Wysocki wrote: > > On Tue, May 26, 2020 at 5:07 PM Krzysztof Wilczyński <kw@xxxxxxxxx> wrote: > > > > > > Hello Greg, > > > > > > [...] > > > > It's "interesting" how using your new helper doesn't actually make the > > > > code smaller. Perhaps it isn't a good helper function? > > > > > > The idea for the helper was inspired by the comment Dan made to Bjorn > > > about Bjorn's change, as per: > > > > > > https://lore.kernel.org/driverdev-devel/20191016135002.GA24678@kadam/ > > > > > > It looked like a good idea to try to reduce the following: > > > > > > dev->driver && dev->driver->pm && dev->driver->pm->prepare > > > > > > Into something more succinct. Albeit, given the feedback from yourself > > > and Rafael, I gather that this helper is not really a good addition. > > > > IMO it could be used for reducing code duplication like you did in the > > PCI code, but not necessarily in the other places where the code in > > question is not exactly duplicated. > > The code could be a little more succinct, although it wouldn't fit every > usage. For example, > > #define pm_do_callback(dev, method) \ > (dev->driver && dev->driver->pm && dev->driver->pm->callback ? \ > dev->driver->pm->callback(dev) : 0) > > Then the usage is something like: > > ret = pm_do_callback(dev, prepare); > > Would this be an overall improvement? It wouldn't cover all of the use cases. For example, PCI does other things in addition to running a callback when it is present. Something like this might be enough though: #define pm_driver_callback_is_present(dev, method) \ (dev->driver && dev->driver->pm && dev->driver->pm->method) #define pm_run_driver_callback(dev, method) \ (pm_driver_callback_is_present(dev, method) ? dev->driver->pm->method(dev) : 0) #define pm_get_driver_callback(dev, method) \ (pm_driver_callback_is_present(dev, method) ? dev->driver->pm->method : NULL) so whoever needs the callback pointer can use pm_get_driver_callback() and whoever only needs to run the callback can use pm_run_driver_callback(). Cheers!