public inbox for devicetree@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] of: guard pointers to key OF nodes with an #ifdef
@ 2026-01-15  9:18 Bartosz Golaszewski
  2026-01-15 14:56 ` kernel test robot
  2026-01-15 20:21 ` Rob Herring (Arm)
  0 siblings, 2 replies; 4+ messages in thread
From: Bartosz Golaszewski @ 2026-01-15  9:18 UTC (permalink / raw)
  To: Rob Herring, Saravana Kannan
  Cc: devicetree, linux-kernel, Bartosz Golaszewski

We declare the pointers to some key OF-nodes unconditionally in
linux/of.h but only export them with CONFIG_OF=y. If anyone uses them in
code built without devicetree support enabled, the problem will only come
to light at link-time. Add an #ifdef guard to catch it at compile-time.

Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
---
 include/linux/of.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/include/linux/of.h b/include/linux/of.h
index 9bbdcf25a2b4..bc57dff819f8 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -138,10 +138,12 @@ static inline void of_node_put(struct device_node *node) { }
 DEFINE_FREE(device_node, struct device_node *, if (_T) of_node_put(_T))
 
 /* Pointer for first entry in chain of all nodes. */
+#if IS_ENABLED(CONFIG_OF)
 extern struct device_node *of_root;
 extern struct device_node *of_chosen;
 extern struct device_node *of_aliases;
 extern struct device_node *of_stdout;
+#endif
 
 /*
  * struct device_node flag descriptions
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] of: guard pointers to key OF nodes with an #ifdef
  2026-01-15  9:18 [PATCH] of: guard pointers to key OF nodes with an #ifdef Bartosz Golaszewski
@ 2026-01-15 14:56 ` kernel test robot
  2026-01-15 20:21 ` Rob Herring (Arm)
  1 sibling, 0 replies; 4+ messages in thread
From: kernel test robot @ 2026-01-15 14:56 UTC (permalink / raw)
  To: Bartosz Golaszewski, Rob Herring, Saravana Kannan
  Cc: oe-kbuild-all, devicetree, linux-kernel, Bartosz Golaszewski

Hi Bartosz,

kernel test robot noticed the following build errors:

[auto build test ERROR on robh/for-next]
[also build test ERROR on linus/master v6.19-rc5 next-20260115]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Bartosz-Golaszewski/of-guard-pointers-to-key-OF-nodes-with-an-ifdef/20260115-171949
base:   https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
patch link:    https://lore.kernel.org/r/20260115091839.8206-1-bartosz.golaszewski%40oss.qualcomm.com
patch subject: [PATCH] of: guard pointers to key OF nodes with an #ifdef
config: sh-randconfig-r072-20260115 (https://download.01.org/0day-ci/archive/20260115/202601152233.og6LdeUo-lkp@intel.com/config)
compiler: sh4-linux-gcc (GCC) 14.3.0
smatch version: v0.5.0-8985-g2614ff1a
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260115/202601152233.og6LdeUo-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202601152233.og6LdeUo-lkp@intel.com/

All errors (new ones prefixed by >>):

   drivers/clocksource/timer-integrator-ap.c: In function 'integrator_ap_timer_init_of':
>> drivers/clocksource/timer-integrator-ap.c:181:39: error: 'of_aliases' undeclared (first use in this function)
     181 |         err = of_property_read_string(of_aliases,
         |                                       ^~~~~~~~~~
   drivers/clocksource/timer-integrator-ap.c:181:39: note: each undeclared identifier is reported only once for each function it appears in
--
   drivers/soc/imx/soc-imx8m.c: In function 'imx8m_soc_probe':
>> drivers/soc/imx/soc-imx8m.c:243:39: error: 'of_root' undeclared (first use in this function); did you mean 'ma_root'?
     243 |         ret = of_property_read_string(of_root, "model", &soc_dev_attr->machine);
         |                                       ^~~~~~~
         |                                       ma_root
   drivers/soc/imx/soc-imx8m.c:243:39: note: each undeclared identifier is reported only once for each function it appears in
--
   drivers/soc/imx/soc-imx9.c: In function 'imx9_soc_probe':
>> drivers/soc/imx/soc-imx9.c:32:39: error: 'of_root' undeclared (first use in this function); did you mean 'ma_root'?
      32 |         err = of_property_read_string(of_root, "model", &attr->machine);
         |                                       ^~~~~~~
         |                                       ma_root
   drivers/soc/imx/soc-imx9.c:32:39: note: each undeclared identifier is reported only once for each function it appears in


vim +/of_aliases +181 drivers/clocksource/timer-integrator-ap.c

beb5818bd01295 Linus Walleij  2014-10-15  157  
76804d052316d3 Daniel Lezcano 2016-06-06  158  static int __init integrator_ap_timer_init_of(struct device_node *node)
beb5818bd01295 Linus Walleij  2014-10-15  159  {
beb5818bd01295 Linus Walleij  2014-10-15  160  	const char *path;
beb5818bd01295 Linus Walleij  2014-10-15  161  	void __iomem *base;
beb5818bd01295 Linus Walleij  2014-10-15  162  	int err;
beb5818bd01295 Linus Walleij  2014-10-15  163  	int irq;
beb5818bd01295 Linus Walleij  2014-10-15  164  	struct clk *clk;
beb5818bd01295 Linus Walleij  2014-10-15  165  	unsigned long rate;
5eb73c83117111 Yangtao Li     2018-11-25  166  	struct device_node *alias_node;
beb5818bd01295 Linus Walleij  2014-10-15  167  
beb5818bd01295 Linus Walleij  2014-10-15  168  	base = of_io_request_and_map(node, 0, "integrator-timer");
bd580e7ed4add8 Maxime Ripard  2015-05-02  169  	if (IS_ERR(base))
76804d052316d3 Daniel Lezcano 2016-06-06  170  		return PTR_ERR(base);
beb5818bd01295 Linus Walleij  2014-10-15  171  
beb5818bd01295 Linus Walleij  2014-10-15  172  	clk = of_clk_get(node, 0);
beb5818bd01295 Linus Walleij  2014-10-15  173  	if (IS_ERR(clk)) {
2a4849d2674b96 Rob Herring    2018-08-27  174  		pr_err("No clock for %pOFn\n", node);
76804d052316d3 Daniel Lezcano 2016-06-06  175  		return PTR_ERR(clk);
beb5818bd01295 Linus Walleij  2014-10-15  176  	}
beb5818bd01295 Linus Walleij  2014-10-15  177  	clk_prepare_enable(clk);
beb5818bd01295 Linus Walleij  2014-10-15  178  	rate = clk_get_rate(clk);
beb5818bd01295 Linus Walleij  2014-10-15  179  	writel(0, base + TIMER_CTRL);
beb5818bd01295 Linus Walleij  2014-10-15  180  
beb5818bd01295 Linus Walleij  2014-10-15 @181  	err = of_property_read_string(of_aliases,
beb5818bd01295 Linus Walleij  2014-10-15  182  				"arm,timer-primary", &path);
76804d052316d3 Daniel Lezcano 2016-06-06  183  	if (err) {
ac9ce6d1a0cc29 Rafał Miłecki  2017-03-09  184  		pr_warn("Failed to read property\n");
76804d052316d3 Daniel Lezcano 2016-06-06  185  		return err;
76804d052316d3 Daniel Lezcano 2016-06-06  186  	}
76804d052316d3 Daniel Lezcano 2016-06-06  187  
5eb73c83117111 Yangtao Li     2018-11-25  188  	alias_node = of_find_node_by_path(path);
5eb73c83117111 Yangtao Li     2018-11-25  189  
5eb73c83117111 Yangtao Li     2018-11-25  190  	/*
5eb73c83117111 Yangtao Li     2018-11-25  191  	 * The pointer is used as an identifier not as a pointer, we
5eb73c83117111 Yangtao Li     2018-11-25  192  	 * can drop the refcount on the of__node immediately after
5eb73c83117111 Yangtao Li     2018-11-25  193  	 * getting it.
5eb73c83117111 Yangtao Li     2018-11-25  194  	 */
5eb73c83117111 Yangtao Li     2018-11-25  195  	of_node_put(alias_node);
5eb73c83117111 Yangtao Li     2018-11-25  196  
5eb73c83117111 Yangtao Li     2018-11-25  197  	if (node == alias_node)
5eb73c83117111 Yangtao Li     2018-11-25  198  		/* The primary timer lacks IRQ, use as clocksource */
5eb73c83117111 Yangtao Li     2018-11-25  199  		return integrator_clocksource_init(rate, base);
76804d052316d3 Daniel Lezcano 2016-06-06  200  
beb5818bd01295 Linus Walleij  2014-10-15  201  	err = of_property_read_string(of_aliases,
beb5818bd01295 Linus Walleij  2014-10-15  202  				"arm,timer-secondary", &path);
76804d052316d3 Daniel Lezcano 2016-06-06  203  	if (err) {
ac9ce6d1a0cc29 Rafał Miłecki  2017-03-09  204  		pr_warn("Failed to read property\n");
76804d052316d3 Daniel Lezcano 2016-06-06  205  		return err;
76804d052316d3 Daniel Lezcano 2016-06-06  206  	}
76804d052316d3 Daniel Lezcano 2016-06-06  207  
5eb73c83117111 Yangtao Li     2018-11-25  208  	alias_node = of_find_node_by_path(path);
76804d052316d3 Daniel Lezcano 2016-06-06  209  
5eb73c83117111 Yangtao Li     2018-11-25  210  	of_node_put(alias_node);
beb5818bd01295 Linus Walleij  2014-10-15  211  
5eb73c83117111 Yangtao Li     2018-11-25  212  	if (node == alias_node) {
beb5818bd01295 Linus Walleij  2014-10-15  213  		/* The secondary timer will drive the clock event */
beb5818bd01295 Linus Walleij  2014-10-15  214  		irq = irq_of_parse_and_map(node, 0);
76804d052316d3 Daniel Lezcano 2016-06-06  215  		return integrator_clockevent_init(rate, base, irq);
beb5818bd01295 Linus Walleij  2014-10-15  216  	}
beb5818bd01295 Linus Walleij  2014-10-15  217  
beb5818bd01295 Linus Walleij  2014-10-15  218  	pr_info("Timer @%p unused\n", base);
beb5818bd01295 Linus Walleij  2014-10-15  219  	clk_disable_unprepare(clk);
76804d052316d3 Daniel Lezcano 2016-06-06  220  
76804d052316d3 Daniel Lezcano 2016-06-06  221  	return 0;
beb5818bd01295 Linus Walleij  2014-10-15  222  }
beb5818bd01295 Linus Walleij  2014-10-15  223  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] of: guard pointers to key OF nodes with an #ifdef
  2026-01-15  9:18 [PATCH] of: guard pointers to key OF nodes with an #ifdef Bartosz Golaszewski
  2026-01-15 14:56 ` kernel test robot
@ 2026-01-15 20:21 ` Rob Herring (Arm)
  2026-01-16  3:21   ` Rob Herring
  1 sibling, 1 reply; 4+ messages in thread
From: Rob Herring (Arm) @ 2026-01-15 20:21 UTC (permalink / raw)
  To: Bartosz Golaszewski; +Cc: devicetree, linux-kernel, Saravana Kannan


On Thu, 15 Jan 2026 10:18:39 +0100, Bartosz Golaszewski wrote:
> We declare the pointers to some key OF-nodes unconditionally in
> linux/of.h but only export them with CONFIG_OF=y. If anyone uses them in
> code built without devicetree support enabled, the problem will only come
> to light at link-time. Add an #ifdef guard to catch it at compile-time.
> 
> Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
> ---
>  include/linux/of.h | 2 ++
>  1 file changed, 2 insertions(+)
> 

Applied, thanks!


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] of: guard pointers to key OF nodes with an #ifdef
  2026-01-15 20:21 ` Rob Herring (Arm)
@ 2026-01-16  3:21   ` Rob Herring
  0 siblings, 0 replies; 4+ messages in thread
From: Rob Herring @ 2026-01-16  3:21 UTC (permalink / raw)
  To: Bartosz Golaszewski; +Cc: devicetree, linux-kernel, Saravana Kannan

On Thu, Jan 15, 2026 at 2:21 PM Rob Herring (Arm) <robh@kernel.org> wrote:
>
>
> On Thu, 15 Jan 2026 10:18:39 +0100, Bartosz Golaszewski wrote:
> > We declare the pointers to some key OF-nodes unconditionally in
> > linux/of.h but only export them with CONFIG_OF=y. If anyone uses them in
> > code built without devicetree support enabled, the problem will only come
> > to light at link-time. Add an #ifdef guard to catch it at compile-time.
> >
> > Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
> > ---
> >  include/linux/of.h | 2 ++
> >  1 file changed, 2 insertions(+)
> >
>
> Applied, thanks!

Err, and dropped.

BTW, my ideal fix for this is to eliminate any users of these variables.

Rob

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-01-16  3:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-15  9:18 [PATCH] of: guard pointers to key OF nodes with an #ifdef Bartosz Golaszewski
2026-01-15 14:56 ` kernel test robot
2026-01-15 20:21 ` Rob Herring (Arm)
2026-01-16  3:21   ` Rob Herring

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox