• P
    PM: core: Redefine pm_ptr() macro · c06ef740
    Paul Cercueil 提交于
    The pm_ptr() macro was previously conditionally defined, according to
    the value of the CONFIG_PM option. This meant that the pointed structure
    was either referenced (if CONFIG_PM was set), or never referenced (if
    CONFIG_PM was not set), causing it to be detected as unused by the
    compiler.
    
    This worked fine, but required the __maybe_unused compiler attribute to
    be used to every symbol pointed to by a pointer wrapped with pm_ptr().
    
    We can do better. With this change, the pm_ptr() is now defined the
    same, independently of the value of CONFIG_PM. It now uses the (?:)
    ternary operator to conditionally resolve to its argument. Since the
    condition is known at compile time, the compiler will then choose to
    discard the unused symbols, which won't need to be tagged with
    __maybe_unused anymore.
    
    This pm_ptr() macro is usually used with pointers to dev_pm_ops
    structures created with SIMPLE_DEV_PM_OPS() or similar macros. These do
    use a __maybe_unused flag, which is now useless with this change, so it
    later can be removed. However in the meantime it causes no harm, and all
    the drivers still compile fine with the new pm_ptr() macro.
    Signed-off-by: NPaul Cercueil <paul@crapouillou.net>
    Reviewed-by: NJonathan Cameron <Jonathan.Cameron@huawei.com>
    Reviewed-by: NArnd Bergmann <arnd@arndb.de>
    Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
    c06ef740
pm.h 32.6 KB