Message ID | 20210123034428.2841052-7-swboyd@chromium.org |
---|---|
State | Accepted |
Commit | c52eef0b6ee1a3c57f6fccb30ea0b5ae19358471 |
Headers | show |
Series | Stop NULLifying match pointer in of_match_device() | expand |
On Sat, Jan 23, 2021 at 4:44 AM Stephen Boyd <swboyd@chromium.org> wrote: > This effectively reverts 1db73ae39a97 ("of/device: Nullify match table > in of_match_device() for CONFIG_OF=n") because that commit makes it more > surprising to users of this API that the arguments may never be > referenced by any code. This is because the pre-processor will replace > the argument with NULL and then the match table will be left unreferenced > by any code but the compiler optimizer doesn't know to drop it. This can > lead to compilers warning that match tables are unused, when we really > want to pass the match table to the API but have the compiler see that > it's all inlined and not used and then drop the match table while > silencing the warning. We're being too smart here and not giving the > compiler the chance to do dead code elimination. > > Signed-off-by: Stephen Boyd <swboyd@chromium.org> > Acked-by: Frank Rowand <frowand.list@gmail.com> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Acked-by: Geert Uytterhoeven <geert+renesas@glider.be> Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
On Sat, Jan 23, 2021 at 4:44 AM Stephen Boyd <swboyd@chromium.org> wrote: > > This effectively reverts 1db73ae39a97 ("of/device: Nullify match table > in of_match_device() for CONFIG_OF=n") because that commit makes it more > surprising to users of this API that the arguments may never be > referenced by any code. This is because the pre-processor will replace > the argument with NULL and then the match table will be left unreferenced > by any code but the compiler optimizer doesn't know to drop it. This can > lead to compilers warning that match tables are unused, when we really > want to pass the match table to the API but have the compiler see that > it's all inlined and not used and then drop the match table while > silencing the warning. We're being too smart here and not giving the > compiler the chance to do dead code elimination. > > Signed-off-by: Stephen Boyd <swboyd@chromium.org> > Acked-by: Frank Rowand <frowand.list@gmail.com> > Cc: Arnd Bergmann <arnd@arndb.de> > Cc: Geert Uytterhoeven <geert@linux-m68k.org> > Cc: Rob Herring <robh+dt@kernel.org> > Cc: Frank Rowand <frowand.list@gmail.com> Reviewed-by: Arnd Bergmann <arnd@arndb.de>
diff --git a/include/linux/of_device.h b/include/linux/of_device.h index 07ca187fc5e4..937f32f6aecb 100644 --- a/include/linux/of_device.h +++ b/include/linux/of_device.h @@ -99,13 +99,11 @@ static inline int of_device_uevent_modalias(struct device *dev, static inline void of_device_node_put(struct device *dev) { } -static inline const struct of_device_id *__of_match_device( +static inline const struct of_device_id *of_match_device( const struct of_device_id *matches, const struct device *dev) { return NULL; } -#define of_match_device(matches, dev) \ - __of_match_device(of_match_ptr(matches), (dev)) static inline struct device_node *of_cpu_device_node_get(int cpu) {