diff mbox series

[5/7] of: do not use "%pOF" printk format on node with refcount of zero

Message ID 20230213185702.395776-6-frowand.list@gmail.com
State Accepted, archived
Headers show
Series of: unittest: new node lifecycle tests | expand

Checks

Context Check Description
robh/checkpatch success
robh/patch-applied fail build log

Commit Message

Frank Rowand Feb. 13, 2023, 6:57 p.m. UTC
of_node_release() can not use the "%pOF" printk format to report
the node name of a node when the node reference count is zero.
This is because the formatter device_node_string() calls
fwnode_full_name_string() which indirectly calls of_node_get().
Calling of_node_get() on the node with a zero reference count
results in a WARNING and stack trace.

When the reference count has been decremented to zero, this function
is in the subsequent call path which frees memory related to the node.

This commit resolves the unittest EXPECT errors that were created in
the previous commmit.

Signed-off-by: Frank Rowand <frowand.list@gmail.com>
---

The scripts/dtc/of_unittest_expect summary statistics before this commit:

** EXPECT statistics:
**
**   non-zero values expected:
**
**     EXPECT found              :   50
**     EXPECT_NOT not found      :    4
**
**   zero values expected:
**
**     EXPECT not found          :    0
**     missing EXPECT begin      :    5
**     missing EXPECT end        :    0
**
**     EXPECT_NOT found          :    0
**     missing EXPECT_NOT begin  :    0
**     missing EXPECT_NOT end    :    0
**
**     unittest FAIL             :    0
**     internal error            :    0

The scripts/dtc/of_unittest_expect summary statistics after this commit:

** EXPECT statistics:
**
**   non-zero values expected:
**
**     EXPECT found              :   55
**     EXPECT_NOT not found      :    4
**
**   zero values expected:
**
**     EXPECT not found          :    0
**     missing EXPECT begin      :    0
**     missing EXPECT end        :    0
**
**     EXPECT_NOT found          :    0
**     missing EXPECT_NOT begin  :    0
**     missing EXPECT_NOT end    :    0
**
**     unittest FAIL             :    0
**     internal error            :    0

 drivers/of/dynamic.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

Comments

Frank Rowand Feb. 13, 2023, 7:23 p.m. UTC | #1
On 2/13/23 12:57, Frank Rowand wrote:
> of_node_release() can not use the "%pOF" printk format to report
> the node name of a node when the node reference count is zero.
> This is because the formatter device_node_string() calls
> fwnode_full_name_string() which indirectly calls of_node_get().
> Calling of_node_get() on the node with a zero reference count
> results in a WARNING and stack trace.
> 
> When the reference count has been decremented to zero, this function
> is in the subsequent call path which frees memory related to the node.
> 
> This commit resolves the unittest EXPECT errors that were created in
> the previous commmit.
> 
> Signed-off-by: Frank Rowand <frowand.list@gmail.com>
> ---

< snip >

After applying this commit, the output of unittests, as processed by
scripts/dtc/of_unittest_expect, including the new lifecycle tests is:




<< pre-test console output deleted >>

-> ### dt-test ### start of unittest - you will see error messages
   l16: Bringing 0uV into 2700000-2700000uV
ok Duplicate name in testcase-data, renamed to "duplicate-name#1"
   l17: Bringing 0uV into 2700000-2700000uV
   l18: Bringing 0uV into 2850000-2850000uV
   ### dt-test ### pass of_unittest_check_tree_linkage():270
   l19: Bringing 0uV into 3300000-3300000uV
   ### dt-test ### pass of_unittest_check_tree_linkage():271
   sdhci_msm f98a4900.mmc: Got CD GPIO
   ### dt-test ### pass of_unittest_check_phandles():379
   l20: Bringing 0uV into 2950000-2950000uV
   ### dt-test ### pass of_unittest_find_node_by_name():80
   sdhci_msm f98a4900.mmc: Got CD GPIO
   ### dt-test ### pass of_unittest_find_node_by_name():87
   l21: Bringing 0uV into 2950000-2950000uV
   ### dt-test ### pass of_unittest_find_node_by_name():91
   l22: Bringing 0uV into 3000000-3000000uV
   sdhci_msm f98a4900.mmc: Got CD GPIO
   l23: Bringing 0uV into 3000000-3000000uV
   ### dt-test ### pass of_unittest_find_node_by_name():98
   l24: Bringing 0uV into 3075000-3075000uV
   ### dt-test ### pass of_unittest_find_node_by_name():105
   ### dt-test ### pass of_unittest_find_node_by_name():109
   ### dt-test ### pass of_unittest_find_node_by_name():115
   ### dt-test ### pass of_unittest_find_node_by_name():119
   ### dt-test ### pass of_unittest_find_node_by_name():123
   ### dt-test ### pass of_unittest_find_node_by_name():127
   mmc0: SDHCI controller on f9824900.mmc [f9824900.mmc] using ADMA
   ### dt-test ### pass of_unittest_find_node_by_name():132
   ### dt-test ### pass of_unittest_find_node_by_name():137
   ### dt-test ### pass of_unittest_find_node_by_name():142
   ### dt-test ### pass of_unittest_find_node_by_name():147
   ### dt-test ### pass of_unittest_find_node_by_name():153
   mmc1: SDHCI controller on f98a4900.mmc [f98a4900.mmc] using ADMA
   ### dt-test ### pass of_unittest_find_node_by_name():158
   ### dt-test ### pass of_unittest_find_node_by_name():163
   ### dt-test ### pass of_unittest_find_node_by_name():168
   ### dt-test ### pass of_unittest_dynamic():194
   ### dt-test ### pass of_unittest_dynamic():201
   ### dt-test ### pass of_unittest_dynamic():207
   mmc0: new HS200 MMC card at address 0001
   ### dt-test ### pass of_unittest_dynamic():215
   ### dt-test ### pass of_unittest_dynamic():219
   mmcblk0: mmc0:0001 SEM16G 14.7 GiB 
   ### dt-test ### pass of_unittest_dynamic():227
   mmc1: new ultra high speed DDR50 SDHC card at address aaaa
   ### dt-test ### pass of_unittest_dynamic():229
   ### dt-test ### pass of_unittest_parse_phandle_with_args():402
   mmcblk1: mmc1:aaaa SU16G 14.8 GiB 
   ### dt-test ### pass of_unittest_parse_phandle_with_args():456
    mmcblk0: p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16 p17 p18 p19 p20
   ### dt-test ### pass of_unittest_parse_phandle_with_args():456
    mmcblk1: p1
   ### dt-test ### pass of_unittest_parse_phandle_with_args():456
   ### dt-test ### pass of_unittest_parse_phandle_with_args():456
   ### dt-test ### pass of_unittest_parse_phandle_with_args():456
   ### dt-test ### pass of_unittest_parse_phandle_with_args():456
   ### dt-test ### pass of_unittest_parse_phandle_with_args():456
   ### dt-test ### pass of_unittest_parse_phandle_with_args():456
   ### dt-test ### pass of_unittest_parse_phandle_with_args():464
   ### dt-test ### pass of_unittest_parse_phandle_with_args():467
ok OF: /testcase-data/phandle-tests/consumer-a: could not get #phandle-cells-missing for /testcase-data/phandle-tests/provider1
   mmcblk0boot0: mmc0:0001 SEM16G 4.00 MiB 
   ### dt-test ### pass of_unittest_parse_phandle_with_args():481
   mmcblk0boot1: mmc0:0001 SEM16G 4.00 MiB 
ok OF: /testcase-data/phandle-tests/consumer-a: could not get #phandle-cells-missing for /testcase-data/phandle-tests/provider1
   mmcblk0rpmb: mmc0:0001 SEM16G 4.00 MiB, chardev (241:0)
   ### dt-test ### pass of_unittest_parse_phandle_with_args():492
ok OF: /testcase-data/phandle-tests/consumer-a: could not find phandle 12345678
   ### dt-test ### pass of_unittest_parse_phandle_with_args():506
ok OF: /testcase-data/phandle-tests/consumer-a: could not find phandle 12345678
   ### dt-test ### pass of_unittest_parse_phandle_with_args():517
ok OF: /testcase-data/phandle-tests/consumer-a: #phandle-cells = 3 found 1
   ### dt-test ### pass of_unittest_parse_phandle_with_args():531
ok OF: /testcase-data/phandle-tests/consumer-a: #phandle-cells = 3 found 1
   ### dt-test ### pass of_unittest_parse_phandle_with_args():542
   ### dt-test ### pass of_unittest_parse_phandle_with_args_map():582
   ### dt-test ### pass of_unittest_parse_phandle_with_args_map():640
   ### dt-test ### pass of_unittest_parse_phandle_with_args_map():640
   ### dt-test ### pass of_unittest_parse_phandle_with_args_map():640
   ### dt-test ### pass of_unittest_parse_phandle_with_args_map():640
   ### dt-test ### pass of_unittest_parse_phandle_with_args_map():640
   ### dt-test ### pass of_unittest_parse_phandle_with_args_map():640
   ### dt-test ### pass of_unittest_parse_phandle_with_args_map():640
   ### dt-test ### pass of_unittest_parse_phandle_with_args_map():640
   ### dt-test ### pass of_unittest_parse_phandle_with_args_map():648
ok OF: /testcase-data/phandle-tests/consumer-b: could not get #phandle-missing-cells for /testcase-data/phandle-tests/provider1
   ### dt-test ### pass of_unittest_parse_phandle_with_args_map():661
ok OF: /testcase-data/phandle-tests/consumer-b: could not find phandle 12345678
   ### dt-test ### pass of_unittest_parse_phandle_with_args_map():674
ok OF: /testcase-data/phandle-tests/consumer-b: #phandle-cells = 2 found 1
   ### dt-test ### pass of_unittest_parse_phandle_with_args_map():687
   ### dt-test ### pass of_unittest_printf_one():294
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():294
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():294
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():294
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():294
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():294
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():294
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():294
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():294
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():294
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():294
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():294
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():294
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():294
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():294
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():294
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():294
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_printf_one():304
   ### dt-test ### pass of_unittest_property_string():703
   ### dt-test ### pass of_unittest_property_string():705
   ### dt-test ### pass of_unittest_property_string():707
   ### dt-test ### pass of_unittest_property_string():709
   ### dt-test ### pass of_unittest_property_string():711
   ### dt-test ### pass of_unittest_property_string():713
   ### dt-test ### pass of_unittest_property_string():715
   ### dt-test ### pass of_unittest_property_string():719
   ### dt-test ### pass of_unittest_property_string():721
   ### dt-test ### pass of_unittest_property_string():723
   ### dt-test ### pass of_unittest_property_string():725
   ### dt-test ### pass of_unittest_property_string():729
   ### dt-test ### pass of_unittest_property_string():732
   ### dt-test ### pass of_unittest_property_string():734
   ### dt-test ### pass of_unittest_property_string():736
   ### dt-test ### pass of_unittest_property_string():738
   ### dt-test ### pass of_unittest_property_string():741
   ### dt-test ### pass of_unittest_property_string():744
   ### dt-test ### pass of_unittest_property_string():746
   ### dt-test ### pass of_unittest_property_string():749
   ### dt-test ### pass of_unittest_property_string():754
   ### dt-test ### pass of_unittest_property_string():756
   ### dt-test ### pass of_unittest_property_string():758
   ### dt-test ### pass of_unittest_property_string():761
   ### dt-test ### pass of_unittest_property_string():765
   ### dt-test ### pass of_unittest_property_string():768
   ### dt-test ### pass of_unittest_property_copy():783
   ### dt-test ### pass of_unittest_property_copy():789
   ### dt-test ### pass of_unittest_changeset():809
   ### dt-test ### pass of_unittest_changeset():812
   ### dt-test ### pass of_unittest_changeset():815
   ### dt-test ### pass of_unittest_changeset():819
   ### dt-test ### pass of_unittest_changeset():822
   ### dt-test ### pass of_unittest_changeset():825
   ### dt-test ### pass of_unittest_changeset():828
   ### dt-test ### pass of_unittest_changeset():831
   ### dt-test ### pass of_unittest_changeset():834
   ### dt-test ### pass of_unittest_changeset():842
   ### dt-test ### pass of_unittest_changeset():846
   ### dt-test ### pass of_unittest_changeset():847
   ### dt-test ### pass of_unittest_changeset():849
   ### dt-test ### pass of_unittest_changeset():850
   ### dt-test ### pass of_unittest_changeset():852
   ### dt-test ### pass of_unittest_changeset():853
   ### dt-test ### pass of_unittest_changeset():855
   ### dt-test ### pass of_unittest_changeset():857
   ### dt-test ### pass of_unittest_changeset():858
   ### dt-test ### pass of_unittest_changeset():859
   ### dt-test ### pass of_unittest_changeset():861
   ### dt-test ### pass of_unittest_changeset():866
   ### dt-test ### pass of_unittest_changeset():870
   ### dt-test ### pass of_unittest_parse_interrupts():1036
   ### dt-test ### pass of_unittest_parse_interrupts():1036
   ### dt-test ### pass of_unittest_parse_interrupts():1036
   ### dt-test ### pass of_unittest_parse_interrupts():1036
   ### dt-test ### pass of_unittest_parse_interrupts():1082
   ### dt-test ### pass of_unittest_parse_interrupts():1082
   ### dt-test ### pass of_unittest_parse_interrupts():1082
   ### dt-test ### pass of_unittest_parse_interrupts():1082
   ### dt-test ### pass of_unittest_parse_interrupts_extended():1162
   ### dt-test ### pass of_unittest_parse_interrupts_extended():1162
   ### dt-test ### pass of_unittest_parse_interrupts_extended():1162
   ### dt-test ### pass of_unittest_parse_interrupts_extended():1162
   ### dt-test ### pass of_unittest_parse_interrupts_extended():1162
   ### dt-test ### pass of_unittest_parse_interrupts_extended():1162
   ### dt-test ### pass of_unittest_parse_interrupts_extended():1162
   ### dt-test ### pass of_unittest_dma_get_max_cpu_address():895
   ### dt-test ### pass of_unittest_dma_ranges_one():916
   ### dt-test ### pass of_unittest_dma_ranges_one():934
   ### dt-test ### pass of_unittest_dma_ranges_one():937
   ### dt-test ### pass of_unittest_dma_ranges_one():916
   ### dt-test ### pass of_unittest_dma_ranges_one():934
   ### dt-test ### pass of_unittest_dma_ranges_one():937
   ### dt-test ### pass of_unittest_pci_dma_ranges():985
   ### dt-test ### pass of_unittest_pci_dma_ranges():988
   ### dt-test ### pass of_unittest_pci_dma_ranges():991
   ### dt-test ### pass of_unittest_pci_dma_ranges():995
   ### dt-test ### pass of_unittest_pci_dma_ranges():998
   ### dt-test ### pass of_unittest_pci_dma_ranges():1001
   ### dt-test ### pass of_unittest_match_node():1230
   ### dt-test ### pass of_unittest_match_node():1230
   ### dt-test ### pass of_unittest_match_node():1230
   ### dt-test ### pass of_unittest_match_node():1230
   ### dt-test ### pass of_unittest_match_node():1230
   ### dt-test ### pass of_unittest_match_node():1230
   ### dt-test ### pass of_unittest_match_node():1230
   ### dt-test ### pass of_unittest_match_node():1230
   ### dt-test ### pass of_unittest_match_node():1230
   ### dt-test ### pass of_unittest_match_node():1230
   ### dt-test ### pass of_unittest_match_node():1230
   ### dt-test ### pass of_unittest_match_node():1230
   ### dt-test ### pass of_unittest_platform_populate():1254
   ### dt-test ### pass of_unittest_platform_populate():1258
   ### dt-test ### pass of_unittest_platform_populate():1264
ok platform testcase-data:testcase-device2: error -ENXIO: IRQ index 0 not found
   ### dt-test ### pass of_unittest_platform_populate():1274
   ### dt-test ### pass of_unittest_platform_populate():1279
   ### dt-test ### pass of_unittest_platform_populate():1285
   ### dt-test ### pass of_unittest_platform_populate():1305
   ### dt-test ### pass of_unittest_platform_populate():1305
   ### dt-test ### pass of_unittest_platform_populate():1315
   ### dt-test ### pass of_unittest_platform_populate():1315
   ### dt-test ### pass of_unittest_overlay():2968
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest0/status
   ### dt-test ### pass of_unittest_overlay_0():2099
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest1/status
   ### dt-test ### pass of_unittest_overlay_1():2119
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest2/status
   ### dt-test ### pass of_unittest_overlay_2():2139
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest3/status
   ### dt-test ### pass of_unittest_overlay_3():2159
   ### dt-test ### pass of_unittest_overlay_4():2169
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest5/status
   ### dt-test ### pass of_unittest_overlay_5():2189
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest6/status
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest7/status
   ### dt-test ### pass of_unittest_overlay_6():2290
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest8/status
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest8/property-foo
ok OF: overlay: node_overlaps_later_cs: #6 overlaps with #7 @/testcase-data/overlay-node/test-bus/test-unittest8
ok OF: overlay: overlay #6 is not topmost
   ### dt-test ### pass of_unittest_overlay_8():2383
   ### dt-test ### pass of_unittest_overlay_10():2395
   ### dt-test ### pass of_unittest_overlay_10():2401
   ### dt-test ### pass of_unittest_overlay_10():2407
   ### dt-test ### pass of_unittest_overlay_11():2419
   ### dt-test ### pass of_unittest_overlay_i2c_init():2640
   ### dt-test ### pass of_unittest_overlay_i2c_init():2646
ok i2c i2c-1: Added multiplexed i2c bus 2
   ### dt-test ### pass of_unittest_overlay_i2c_init():2660
   ### dt-test ### pass of_unittest_overlay():2984
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/i2c-test-bus/test-unittest12/status
   ### dt-test ### pass of_unittest_overlay_i2c_12():2693
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/i2c-test-bus/test-unittest13/status
   ### dt-test ### pass of_unittest_overlay_i2c_13():2713
ok i2c i2c-1: Added multiplexed i2c bus 3
   ### dt-test ### pass of_unittest_overlay_i2c_15():2737
   ### dt-test ### pass of_unittest_overlay_gpio():1698
   ### dt-test ### pass of_unittest_overlay_gpio():1701
   ### dt-test ### pass of_unittest_overlay_gpio():1704
ok gpio-708 (line-B-input): hogged as input
   ### dt-test ### pass unittest_gpio_probe():1621
ok gpio-712 (line-A-input): hogged as input
   ### dt-test ### pass unittest_gpio_probe():1621
   ### dt-test ### pass of_unittest_overlay_gpio():1719
   ### dt-test ### pass of_unittest_overlay_gpio():1727
   ### dt-test ### pass of_unittest_overlay_gpio():1730
ok gpio-720 (line-D-input): hogged as input
   ### dt-test ### pass unittest_gpio_probe():1621
   ### dt-test ### pass of_unittest_overlay_gpio():1756
   ### dt-test ### pass of_unittest_overlay_gpio():1762
   ### dt-test ### pass of_unittest_overlay_gpio():1765
   ### dt-test ### pass unittest_gpio_probe():1621
   ### dt-test ### pass of_unittest_overlay_gpio():1783
   ### dt-test ### pass of_unittest_overlay_gpio():1786
ok gpio-724 (line-C-input): hogged as input
   ### dt-test ### pass of_unittest_overlay_gpio():1803
   ### dt-test ### pass of_unittest_overlay_gpio():1809
   ### dt-test ### pass of_unittest_overlay_notify():2825
ok OF: overlay: overlay changeset pre-apply notifier error -16, target: /testcase-data/overlay-node/test-bus
   ### dt-test ### pass of_unittest_overlay_notify():2846
   ### dt-test ### pass of_unittest_overlay_notify():2851
ok OF: overlay: overlay changeset post-apply notifier error -17, target: /testcase-data/overlay-node/test-bus
   ### dt-test ### pass of_unittest_overlay_notify():2857
   ### dt-test ### pass of_unittest_overlay_notify():2862
   ### dt-test ### pass of_unittest_overlay_notify():2866
   ### dt-test ### pass of_unittest_overlay_notify():2872
   ### dt-test ### pass of_unittest_overlay_notify():2875
ok OF: overlay: overlay changeset pre-remove notifier error -18, target: /testcase-data/overlay-node/test-bus
   ### dt-test ### pass of_unittest_overlay_notify():2886
   ### dt-test ### pass of_unittest_overlay_notify():2894
   ### dt-test ### pass of_unittest_overlay_notify():2898
   ### dt-test ### pass of_unittest_overlay_notify():2901
ok OF: overlay: overlay changeset post-remove notifier error -19, target: /testcase-data/overlay-node/test-bus
   ### dt-test ### pass of_unittest_overlay_notify():2908
   ### dt-test ### pass of_unittest_overlay_notify():2915
   ### dt-test ### pass of_unittest_overlay_notify():2920
   ### dt-test ### pass of_unittest_overlay_notify():2932
   ### dt-test ### pass of_unittest_lifecycle():3031
   ### dt-test ### pass of_unittest_lifecycle():3056
ok OF: ERROR: of_node_release() detected bad of_node_put() on /testcase-data/refcount-node
   ### dt-test ### pass of_unittest_lifecycle():3076
ok ------------[ cut here ]------------
ok WARNING: CPU: 1 PID: 1 at lib/refcount.c:28 of_unittest+0x25d0/0x2eb8
ok refcount_t: underflow; use-after-free.
   Modules linked in:
   CPU: 1 PID: 1 Comm: swapper/0 Tainted: G                 N 6.2.0-rc1-00008-g0ad108551489 #23
   Hardware name: Generic DT based system
    unwind_backtrace from show_stack+0x10/0x14
    show_stack from dump_stack_lvl+0x40/0x4c
    dump_stack_lvl from __warn+0x7c/0x15c
    __warn from warn_slowpath_fmt+0x98/0xcc
    warn_slowpath_fmt from of_unittest+0x25d0/0x2eb8
    of_unittest from do_one_initcall+0x4c/0x268
    do_one_initcall from kernel_init_freeable+0x1b4/0x214
    kernel_init_freeable from kernel_init+0x18/0x130
    kernel_init from ret_from_fork+0x14/0x2c
   Exception stack(0xf0821fb0 to 0xf0821ff8)
   1fa0:                                     00000000 00000000 00000000 00000000
   1fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
   1fe0: 00000000 00000000 00000000 00000000 00000013 00000000
ok ---[ end trace 0000000000000000 ]---
   ### dt-test ### pass of_unittest_lifecycle():3093
   ### dt-test ### pass of_unittest_lifecycle():3119
   ### dt-test ### pass of_unittest_lifecycle():3120
   ### dt-test ### pass of_unittest_check_tree_linkage():270
   ### dt-test ### pass of_unittest_check_tree_linkage():271
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/substation@100/status
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/fairway-1/status
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/fairway-1/ride@100/track@30/incline-up
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/fairway-1/ride@100/track@40/incline-up
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/lights@40000/status
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/lights@40000/color
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/lights@40000/rate
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/hvac_2
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/ride_200
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/ride_200_left
ok OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/ride_200_right
   ### dt-test ### pass of_unittest_overlay_high_level():3552
ok OF: overlay: ERROR: multiple fragments add and/or delete node /testcase-data-2/substation@100/motor-1/controller
ok OF: overlay: ERROR: multiple fragments add, update, and/or delete property /testcase-data-2/substation@100/motor-1/controller/name
   ### dt-test ### pass of_unittest_overlay_high_level():3559
ok OF: overlay: ERROR: multiple fragments add and/or delete node /testcase-data-2/substation@100/motor-1/electric
ok OF: overlay: ERROR: multiple fragments add, update, and/or delete property /testcase-data-2/substation@100/motor-1/electric/rpm_avail
ok OF: overlay: ERROR: multiple fragments add, update, and/or delete property /testcase-data-2/substation@100/motor-1/electric/name
   ### dt-test ### pass of_unittest_overlay_high_level():3574
   ### dt-test ### pass of_unittest_overlay_high_level():3584
   ### dt-test ### pass of_unittest_overlay_high_level():3587
-> ### dt-test ### end of unittest - 276 passed, 0 failed


<< post-test console output deleted >>

   / # cat /proc/version
   Linux version 6.2.0-rc1-00008-g0ad108551489 (frowand@xps8900) (arm-linux-gnueabi-gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #23 SMP PREEMPT Mon Feb 13 12:52:35 CST 2023
   / # 

** EXPECT statistics:
**
**   non-zero values expected:
**
**     EXPECT found              :   55
**     EXPECT_NOT not found      :    4
**
**   zero values expected:
**
**     EXPECT not found          :    0
**     missing EXPECT begin      :    0
**     missing EXPECT end        :    0
**
**     EXPECT_NOT found          :    0
**     missing EXPECT_NOT begin  :    0
**     missing EXPECT_NOT end    :    0
**
**     unittest FAIL             :    0
**     internal error            :    0
Frank Rowand Feb. 13, 2023, 7:27 p.m. UTC | #2
On 2/13/23 13:23, Frank Rowand wrote:
> On 2/13/23 12:57, Frank Rowand wrote:
>> of_node_release() can not use the "%pOF" printk format to report
>> the node name of a node when the node reference count is zero.
>> This is because the formatter device_node_string() calls
>> fwnode_full_name_string() which indirectly calls of_node_get().
>> Calling of_node_get() on the node with a zero reference count
>> results in a WARNING and stack trace.
>>
>> When the reference count has been decremented to zero, this function
>> is in the subsequent call path which frees memory related to the node.
>>
>> This commit resolves the unittest EXPECT errors that were created in
>> the previous commmit.
>>
>> Signed-off-by: Frank Rowand <frowand.list@gmail.com>
>> ---
> 
> < snip >
> 
> After applying this commit, the output of unittests, as processed by
> scripts/dtc/of_unittest_expect, including the new lifecycle tests is:

< snip >

And the more verbose, ugly, full console output before processing by
scripts/dtc/of_unittest_expect is:



<< pre-test console output deleted >>

### dt-test ### start of unittest - you will see error messages
l16: Bringing 0uV into 2700000-2700000uV
### dt-test ### EXPECT \ : Duplicate name in testcase-data, renamed to "duplicate-name#1"
Duplicate name in testcase-data, renamed to "duplicate-name#1"
l17: Bringing 0uV into 2700000-2700000uV
### dt-test ### EXPECT / : Duplicate name in testcase-data, renamed to "duplicate-name#1"
l18: Bringing 0uV into 2850000-2850000uV
### dt-test ### pass of_unittest_check_tree_linkage():270
l19: Bringing 0uV into 3300000-3300000uV
### dt-test ### pass of_unittest_check_tree_linkage():271
sdhci_msm f98a4900.mmc: Got CD GPIO
### dt-test ### pass of_unittest_check_phandles():379
l20: Bringing 0uV into 2950000-2950000uV
### dt-test ### pass of_unittest_find_node_by_name():80
sdhci_msm f98a4900.mmc: Got CD GPIO
### dt-test ### pass of_unittest_find_node_by_name():87
l21: Bringing 0uV into 2950000-2950000uV
### dt-test ### pass of_unittest_find_node_by_name():91
l22: Bringing 0uV into 3000000-3000000uV
sdhci_msm f98a4900.mmc: Got CD GPIO
l23: Bringing 0uV into 3000000-3000000uV
### dt-test ### pass of_unittest_find_node_by_name():98
l24: Bringing 0uV into 3075000-3075000uV
### dt-test ### pass of_unittest_find_node_by_name():105
### dt-test ### pass of_unittest_find_node_by_name():109
### dt-test ### pass of_unittest_find_node_by_name():115
### dt-test ### pass of_unittest_find_node_by_name():119
### dt-test ### pass of_unittest_find_node_by_name():123
### dt-test ### pass of_unittest_find_node_by_name():127
mmc0: SDHCI controller on f9824900.mmc [f9824900.mmc] using ADMA
### dt-test ### pass of_unittest_find_node_by_name():132
### dt-test ### pass of_unittest_find_node_by_name():137
### dt-test ### pass of_unittest_find_node_by_name():142
### dt-test ### pass of_unittest_find_node_by_name():147
### dt-test ### pass of_unittest_find_node_by_name():153
mmc1: SDHCI controller on f98a4900.mmc [f98a4900.mmc] using ADMA
### dt-test ### pass of_unittest_find_node_by_name():158
### dt-test ### pass of_unittest_find_node_by_name():163
### dt-test ### pass of_unittest_find_node_by_name():168
### dt-test ### pass of_unittest_dynamic():194
### dt-test ### pass of_unittest_dynamic():201
### dt-test ### pass of_unittest_dynamic():207
mmc0: new HS200 MMC card at address 0001
### dt-test ### pass of_unittest_dynamic():215
### dt-test ### pass of_unittest_dynamic():219
mmcblk0: mmc0:0001 SEM16G 14.7 GiB 
### dt-test ### pass of_unittest_dynamic():227
mmc1: new ultra high speed DDR50 SDHC card at address aaaa
### dt-test ### pass of_unittest_dynamic():229
### dt-test ### pass of_unittest_parse_phandle_with_args():402
mmcblk1: mmc1:aaaa SU16G 14.8 GiB 
### dt-test ### pass of_unittest_parse_phandle_with_args():456
 mmcblk0: p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16 p17 p18 p19 p20
### dt-test ### pass of_unittest_parse_phandle_with_args():456
 mmcblk1: p1
### dt-test ### pass of_unittest_parse_phandle_with_args():456
### dt-test ### pass of_unittest_parse_phandle_with_args():456
### dt-test ### pass of_unittest_parse_phandle_with_args():456
### dt-test ### pass of_unittest_parse_phandle_with_args():456
### dt-test ### pass of_unittest_parse_phandle_with_args():456
### dt-test ### pass of_unittest_parse_phandle_with_args():456
### dt-test ### pass of_unittest_parse_phandle_with_args():464
### dt-test ### pass of_unittest_parse_phandle_with_args():467
### dt-test ### EXPECT \ : OF: /testcase-data/phandle-tests/consumer-a: could not get #phandle-cells-missing for /testcase-data/phandle-tests/provider1
OF: /testcase-data/phandle-tests/consumer-a: could not get #phandle-cells-missing for /testcase-data/phandle-tests/provider1
mmcblk0boot0: mmc0:0001 SEM16G 4.00 MiB 
### dt-test ### EXPECT / : OF: /testcase-data/phandle-tests/consumer-a: could not get #phandle-cells-missing for /testcase-data/phandle-tests/provider1
### dt-test ### pass of_unittest_parse_phandle_with_args():481
### dt-test ### EXPECT \ : OF: /testcase-data/phandle-tests/consumer-a: could not get #phandle-cells-missing for /testcase-data/phandle-tests/provider1
mmcblk0boot1: mmc0:0001 SEM16G 4.00 MiB 
OF: /testcase-data/phandle-tests/consumer-a: could not get #phandle-cells-missing for /testcase-data/phandle-tests/provider1
mmcblk0rpmb: mmc0:0001 SEM16G 4.00 MiB, chardev (241:0)
### dt-test ### EXPECT / : OF: /testcase-data/phandle-tests/consumer-a: could not get #phandle-cells-missing for /testcase-data/phandle-tests/provider1
### dt-test ### pass of_unittest_parse_phandle_with_args():492
### dt-test ### EXPECT \ : OF: /testcase-data/phandle-tests/consumer-a: could not find phandle
OF: /testcase-data/phandle-tests/consumer-a: could not find phandle 12345678
### dt-test ### EXPECT / : OF: /testcase-data/phandle-tests/consumer-a: could not find phandle
### dt-test ### pass of_unittest_parse_phandle_with_args():506
### dt-test ### EXPECT \ : OF: /testcase-data/phandle-tests/consumer-a: could not find phandle
OF: /testcase-data/phandle-tests/consumer-a: could not find phandle 12345678
### dt-test ### EXPECT / : OF: /testcase-data/phandle-tests/consumer-a: could not find phandle
### dt-test ### pass of_unittest_parse_phandle_with_args():517
### dt-test ### EXPECT \ : OF: /testcase-data/phandle-tests/consumer-a: #phandle-cells = 3 found 1
OF: /testcase-data/phandle-tests/consumer-a: #phandle-cells = 3 found 1
### dt-test ### EXPECT / : OF: /testcase-data/phandle-tests/consumer-a: #phandle-cells = 3 found 1
### dt-test ### pass of_unittest_parse_phandle_with_args():531
### dt-test ### EXPECT \ : OF: /testcase-data/phandle-tests/consumer-a: #phandle-cells = 3 found 1
OF: /testcase-data/phandle-tests/consumer-a: #phandle-cells = 3 found 1
### dt-test ### EXPECT / : OF: /testcase-data/phandle-tests/consumer-a: #phandle-cells = 3 found 1
### dt-test ### pass of_unittest_parse_phandle_with_args():542
### dt-test ### pass of_unittest_parse_phandle_with_args_map():582
### dt-test ### pass of_unittest_parse_phandle_with_args_map():640
### dt-test ### pass of_unittest_parse_phandle_with_args_map():640
### dt-test ### pass of_unittest_parse_phandle_with_args_map():640
### dt-test ### pass of_unittest_parse_phandle_with_args_map():640
### dt-test ### pass of_unittest_parse_phandle_with_args_map():640
### dt-test ### pass of_unittest_parse_phandle_with_args_map():640
### dt-test ### pass of_unittest_parse_phandle_with_args_map():640
### dt-test ### pass of_unittest_parse_phandle_with_args_map():640
### dt-test ### pass of_unittest_parse_phandle_with_args_map():648
### dt-test ### EXPECT \ : OF: /testcase-data/phandle-tests/consumer-b: could not get #phandle-missing-cells for /testcase-data/phandle-tests/provider1
OF: /testcase-data/phandle-tests/consumer-b: could not get #phandle-missing-cells for /testcase-data/phandle-tests/provider1
### dt-test ### EXPECT / : OF: /testcase-data/phandle-tests/consumer-b: could not get #phandle-missing-cells for /testcase-data/phandle-tests/provider1
### dt-test ### pass of_unittest_parse_phandle_with_args_map():661
### dt-test ### EXPECT \ : OF: /testcase-data/phandle-tests/consumer-b: could not find phandle
OF: /testcase-data/phandle-tests/consumer-b: could not find phandle 12345678
### dt-test ### EXPECT / : OF: /testcase-data/phandle-tests/consumer-b: could not find phandle
### dt-test ### pass of_unittest_parse_phandle_with_args_map():674
### dt-test ### EXPECT \ : OF: /testcase-data/phandle-tests/consumer-b: #phandle-cells = 2 found 1
OF: /testcase-data/phandle-tests/consumer-b: #phandle-cells = 2 found 1
### dt-test ### EXPECT / : OF: /testcase-data/phandle-tests/consumer-b: #phandle-cells = 2 found 1
### dt-test ### pass of_unittest_parse_phandle_with_args_map():687
### dt-test ### pass of_unittest_printf_one():294
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():294
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():294
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():294
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():294
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():294
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():294
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():294
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():294
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():294
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():294
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():294
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():294
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():294
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():294
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():294
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():294
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_printf_one():304
### dt-test ### pass of_unittest_property_string():703
### dt-test ### pass of_unittest_property_string():705
### dt-test ### pass of_unittest_property_string():707
### dt-test ### pass of_unittest_property_string():709
### dt-test ### pass of_unittest_property_string():711
### dt-test ### pass of_unittest_property_string():713
### dt-test ### pass of_unittest_property_string():715
### dt-test ### pass of_unittest_property_string():719
### dt-test ### pass of_unittest_property_string():721
### dt-test ### pass of_unittest_property_string():723
### dt-test ### pass of_unittest_property_string():725
### dt-test ### pass of_unittest_property_string():729
### dt-test ### pass of_unittest_property_string():732
### dt-test ### pass of_unittest_property_string():734
### dt-test ### pass of_unittest_property_string():736
### dt-test ### pass of_unittest_property_string():738
### dt-test ### pass of_unittest_property_string():741
### dt-test ### pass of_unittest_property_string():744
### dt-test ### pass of_unittest_property_string():746
### dt-test ### pass of_unittest_property_string():749
### dt-test ### pass of_unittest_property_string():754
### dt-test ### pass of_unittest_property_string():756
### dt-test ### pass of_unittest_property_string():758
### dt-test ### pass of_unittest_property_string():761
### dt-test ### pass of_unittest_property_string():765
### dt-test ### pass of_unittest_property_string():768
### dt-test ### pass of_unittest_property_copy():783
### dt-test ### pass of_unittest_property_copy():789
### dt-test ### pass of_unittest_changeset():809
### dt-test ### pass of_unittest_changeset():812
### dt-test ### pass of_unittest_changeset():815
### dt-test ### pass of_unittest_changeset():819
### dt-test ### pass of_unittest_changeset():822
### dt-test ### pass of_unittest_changeset():825
### dt-test ### pass of_unittest_changeset():828
### dt-test ### pass of_unittest_changeset():831
### dt-test ### pass of_unittest_changeset():834
### dt-test ### pass of_unittest_changeset():842
### dt-test ### pass of_unittest_changeset():846
### dt-test ### pass of_unittest_changeset():847
### dt-test ### pass of_unittest_changeset():849
### dt-test ### pass of_unittest_changeset():850
### dt-test ### pass of_unittest_changeset():852
### dt-test ### pass of_unittest_changeset():853
### dt-test ### pass of_unittest_changeset():855
### dt-test ### pass of_unittest_changeset():857
### dt-test ### pass of_unittest_changeset():858
### dt-test ### pass of_unittest_changeset():859
### dt-test ### pass of_unittest_changeset():861
### dt-test ### pass of_unittest_changeset():866
### dt-test ### pass of_unittest_changeset():870
### dt-test ### pass of_unittest_parse_interrupts():1036
### dt-test ### pass of_unittest_parse_interrupts():1036
### dt-test ### pass of_unittest_parse_interrupts():1036
### dt-test ### pass of_unittest_parse_interrupts():1036
### dt-test ### pass of_unittest_parse_interrupts():1082
### dt-test ### pass of_unittest_parse_interrupts():1082
### dt-test ### pass of_unittest_parse_interrupts():1082
### dt-test ### pass of_unittest_parse_interrupts():1082
### dt-test ### pass of_unittest_parse_interrupts_extended():1162
### dt-test ### pass of_unittest_parse_interrupts_extended():1162
### dt-test ### pass of_unittest_parse_interrupts_extended():1162
### dt-test ### pass of_unittest_parse_interrupts_extended():1162
### dt-test ### pass of_unittest_parse_interrupts_extended():1162
### dt-test ### pass of_unittest_parse_interrupts_extended():1162
### dt-test ### pass of_unittest_parse_interrupts_extended():1162
### dt-test ### pass of_unittest_dma_get_max_cpu_address():895
### dt-test ### pass of_unittest_dma_ranges_one():916
### dt-test ### pass of_unittest_dma_ranges_one():934
### dt-test ### pass of_unittest_dma_ranges_one():937
### dt-test ### pass of_unittest_dma_ranges_one():916
### dt-test ### pass of_unittest_dma_ranges_one():934
### dt-test ### pass of_unittest_dma_ranges_one():937
### dt-test ### pass of_unittest_pci_dma_ranges():985
### dt-test ### pass of_unittest_pci_dma_ranges():988
### dt-test ### pass of_unittest_pci_dma_ranges():991
### dt-test ### pass of_unittest_pci_dma_ranges():995
### dt-test ### pass of_unittest_pci_dma_ranges():998
### dt-test ### pass of_unittest_pci_dma_ranges():1001
### dt-test ### pass of_unittest_match_node():1230
### dt-test ### pass of_unittest_match_node():1230
### dt-test ### pass of_unittest_match_node():1230
### dt-test ### pass of_unittest_match_node():1230
### dt-test ### pass of_unittest_match_node():1230
### dt-test ### pass of_unittest_match_node():1230
### dt-test ### pass of_unittest_match_node():1230
### dt-test ### pass of_unittest_match_node():1230
### dt-test ### pass of_unittest_match_node():1230
### dt-test ### pass of_unittest_match_node():1230
### dt-test ### pass of_unittest_match_node():1230
### dt-test ### pass of_unittest_match_node():1230
### dt-test ### pass of_unittest_platform_populate():1254
### dt-test ### pass of_unittest_platform_populate():1258
### dt-test ### pass of_unittest_platform_populate():1264
### dt-test ### EXPECT \ : platform testcase-data:testcase-device2: error -ENXIO: IRQ index 0 not found
platform testcase-data:testcase-device2: error -ENXIO: IRQ index 0 not found
### dt-test ### EXPECT / : platform testcase-data:testcase-device2: error -ENXIO: IRQ index 0 not found
### dt-test ### pass of_unittest_platform_populate():1274
### dt-test ### pass of_unittest_platform_populate():1279
### dt-test ### pass of_unittest_platform_populate():1285
### dt-test ### pass of_unittest_platform_populate():1305
### dt-test ### pass of_unittest_platform_populate():1305
### dt-test ### pass of_unittest_platform_populate():1315
### dt-test ### pass of_unittest_platform_populate():1315
### dt-test ### pass of_unittest_overlay():2968
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest0/status
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest0/status
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest0/status
### dt-test ### pass of_unittest_overlay_0():2099
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest1/status
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest1/status
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest1/status
### dt-test ### pass of_unittest_overlay_1():2119
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest2/status
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest2/status
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest2/status
### dt-test ### pass of_unittest_overlay_2():2139
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest3/status
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest3/status
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest3/status
### dt-test ### pass of_unittest_overlay_3():2159
### dt-test ### pass of_unittest_overlay_4():2169
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest5/status
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest5/status
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest5/status
### dt-test ### pass of_unittest_overlay_5():2189
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest6/status
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest6/status
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest6/status
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest7/status
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest7/status
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest7/status
### dt-test ### pass of_unittest_overlay_6():2290
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest8/status
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest8/status
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest8/status
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest8/property-foo
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest8/property-foo
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/test-unittest8/property-foo
### dt-test ### EXPECT \ : OF: overlay: node_overlaps_later_cs: #6 overlaps with #7 @/testcase-data/overlay-node/test-bus/test-unittest8
### dt-test ### EXPECT \ : OF: overlay: overlay #6 is not topmost
OF: overlay: node_overlaps_later_cs: #6 overlaps with #7 @/testcase-data/overlay-node/test-bus/test-unittest8
OF: overlay: overlay #6 is not topmost
### dt-test ### EXPECT / : OF: overlay: overlay #6 is not topmost
### dt-test ### EXPECT / : OF: overlay: node_overlaps_later_cs: #6 overlaps with #7 @/testcase-data/overlay-node/test-bus/test-unittest8
### dt-test ### pass of_unittest_overlay_8():2383
### dt-test ### pass of_unittest_overlay_10():2395
### dt-test ### pass of_unittest_overlay_10():2401
### dt-test ### pass of_unittest_overlay_10():2407
### dt-test ### pass of_unittest_overlay_11():2419
### dt-test ### pass of_unittest_overlay_i2c_init():2640
### dt-test ### pass of_unittest_overlay_i2c_init():2646
### dt-test ### EXPECT \ : i2c i2c-1: Added multiplexed i2c bus 2
i2c i2c-1: Added multiplexed i2c bus 2
### dt-test ### EXPECT / : i2c i2c-1: Added multiplexed i2c bus 2
### dt-test ### pass of_unittest_overlay_i2c_init():2660
### dt-test ### pass of_unittest_overlay():2984
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/i2c-test-bus/test-unittest12/status
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/i2c-test-bus/test-unittest12/status
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/i2c-test-bus/test-unittest12/status
### dt-test ### pass of_unittest_overlay_i2c_12():2693
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/i2c-test-bus/test-unittest13/status
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/i2c-test-bus/test-unittest13/status
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data/overlay-node/test-bus/i2c-test-bus/test-unittest13/status
### dt-test ### pass of_unittest_overlay_i2c_13():2713
### dt-test ### EXPECT \ : i2c i2c-1: Added multiplexed i2c bus 3
i2c i2c-1: Added multiplexed i2c bus 3
### dt-test ### EXPECT / : i2c i2c-1: Added multiplexed i2c bus 3
### dt-test ### pass of_unittest_overlay_i2c_15():2737
### dt-test ### pass of_unittest_overlay_gpio():1698
### dt-test ### pass of_unittest_overlay_gpio():1701
### dt-test ### pass of_unittest_overlay_gpio():1704
### dt-test ### EXPECT \ : gpio-<<int>> (line-B-input): hogged as input
### dt-test ### EXPECT \ : gpio-<<int>> (line-A-input): hogged as input
gpio-708 (line-B-input): hogged as input
### dt-test ### pass unittest_gpio_probe():1621
gpio-712 (line-A-input): hogged as input
### dt-test ### pass unittest_gpio_probe():1621
### dt-test ### pass of_unittest_overlay_gpio():1719
### dt-test ### EXPECT / : gpio-<<int>> (line-A-input): hogged as input
### dt-test ### EXPECT / : gpio-<<int>> (line-B-input): hogged as input
### dt-test ### pass of_unittest_overlay_gpio():1727
### dt-test ### pass of_unittest_overlay_gpio():1730
### dt-test ### EXPECT \ : gpio-<<int>> (line-D-input): hogged as input
gpio-720 (line-D-input): hogged as input
### dt-test ### pass unittest_gpio_probe():1621
### dt-test ### pass of_unittest_overlay_gpio():1756
### dt-test ### EXPECT / : gpio-<<int>> (line-D-input): hogged as input
### dt-test ### pass of_unittest_overlay_gpio():1762
### dt-test ### pass of_unittest_overlay_gpio():1765
### dt-test ### pass unittest_gpio_probe():1621
### dt-test ### pass of_unittest_overlay_gpio():1783
### dt-test ### pass of_unittest_overlay_gpio():1786
### dt-test ### EXPECT \ : gpio-<<int>> (line-C-input): hogged as input
gpio-724 (line-C-input): hogged as input
### dt-test ### pass of_unittest_overlay_gpio():1803
### dt-test ### EXPECT / : gpio-<<int>> (line-C-input): hogged as input
### dt-test ### pass of_unittest_overlay_gpio():1809
### dt-test ### pass of_unittest_overlay_notify():2825
### dt-test ### EXPECT \ : OF: overlay: overlay changeset pre-apply notifier error -16, target: /testcase-data/overlay-node/test-bus
OF: overlay: overlay changeset pre-apply notifier error -16, target: /testcase-data/overlay-node/test-bus
### dt-test ### pass of_unittest_overlay_notify():2846
### dt-test ### EXPECT / : OF: overlay: overlay changeset pre-apply notifier error -16, target: /testcase-data/overlay-node/test-bus
### dt-test ### pass of_unittest_overlay_notify():2851
### dt-test ### EXPECT \ : OF: overlay: overlay changeset post-apply notifier error -17, target: /testcase-data/overlay-node/test-bus
OF: overlay: overlay changeset post-apply notifier error -17, target: /testcase-data/overlay-node/test-bus
### dt-test ### pass of_unittest_overlay_notify():2857
### dt-test ### EXPECT / : OF: overlay: overlay changeset post-apply notifier error -17, target: /testcase-data/overlay-node/test-bus
### dt-test ### pass of_unittest_overlay_notify():2862
### dt-test ### pass of_unittest_overlay_notify():2866
### dt-test ### pass of_unittest_overlay_notify():2872
### dt-test ### pass of_unittest_overlay_notify():2875
### dt-test ### EXPECT \ : OF: overlay: overlay changeset pre-remove notifier error -18, target: /testcase-data/overlay-node/test-bus
OF: overlay: overlay changeset pre-remove notifier error -18, target: /testcase-data/overlay-node/test-bus
### dt-test ### EXPECT / : OF: overlay: overlay changeset pre-remove notifier error -18, target: /testcase-data/overlay-node/test-bus
### dt-test ### pass of_unittest_overlay_notify():2886
### dt-test ### pass of_unittest_overlay_notify():2894
### dt-test ### pass of_unittest_overlay_notify():2898
### dt-test ### pass of_unittest_overlay_notify():2901
### dt-test ### EXPECT \ : OF: overlay: overlay changeset post-remove notifier error -19, target: /testcase-data/overlay-node/test-bus
OF: overlay: overlay changeset post-remove notifier error -19, target: /testcase-data/overlay-node/test-bus
### dt-test ### EXPECT / : OF: overlay: overlay changeset post-remove notifier error -19, target: /testcase-data/overlay-node/test-bus
### dt-test ### pass of_unittest_overlay_notify():2908
### dt-test ### pass of_unittest_overlay_notify():2915
### dt-test ### pass of_unittest_overlay_notify():2920
### dt-test ### pass of_unittest_overlay_notify():2932
### dt-test ### pass of_unittest_lifecycle():3031
### dt-test ### EXPECT \ : OF: ERROR: of_node_release() detected bad of_node_put() on /testcase-data/refcount-node
### dt-test ### pass of_unittest_lifecycle():3056
OF: ERROR: of_node_release() detected bad of_node_put() on /testcase-data/refcount-node
### dt-test ### EXPECT / : OF: ERROR: of_node_release() detected bad of_node_put() on /testcase-data/refcount-node
### dt-test ### EXPECT \ : ------------[ cut here ]------------
### dt-test ### EXPECT \ : WARNING: <<all>>
### dt-test ### EXPECT \ : refcount_t: underflow; use-after-free.
### dt-test ### EXPECT \ : ---[ end trace <<int>> ]---
### dt-test ### pass of_unittest_lifecycle():3076
------------[ cut here ]------------
WARNING: CPU: 1 PID: 1 at lib/refcount.c:28 of_unittest+0x25d0/0x2eb8
refcount_t: underflow; use-after-free.
Modules linked in:
CPU: 1 PID: 1 Comm: swapper/0 Tainted: G                 N 6.2.0-rc1-00008-g0ad108551489 #23
Hardware name: Generic DT based system
 unwind_backtrace from show_stack+0x10/0x14
 show_stack from dump_stack_lvl+0x40/0x4c
 dump_stack_lvl from __warn+0x7c/0x15c
 __warn from warn_slowpath_fmt+0x98/0xcc
 warn_slowpath_fmt from of_unittest+0x25d0/0x2eb8
 of_unittest from do_one_initcall+0x4c/0x268
 do_one_initcall from kernel_init_freeable+0x1b4/0x214
 kernel_init_freeable from kernel_init+0x18/0x130
 kernel_init from ret_from_fork+0x14/0x2c
Exception stack(0xf0821fb0 to 0xf0821ff8)
1fa0:                                     00000000 00000000 00000000 00000000
1fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
1fe0: 00000000 00000000 00000000 00000000 00000013 00000000
---[ end trace 0000000000000000 ]---
### dt-test ### EXPECT / : ---[ end trace <<int>> ]---
### dt-test ### EXPECT / : refcount_t: underflow; use-after-free.
### dt-test ### EXPECT / : WARNING: <<all>>
### dt-test ### EXPECT / : ------------[ cut here ]------------
### dt-test ### EXPECT_NOT \ : ------------[ cut here ]------------
### dt-test ### EXPECT_NOT \ : WARNING: <<all>>
### dt-test ### EXPECT_NOT \ : refcount_t: underflow; use-after-free.
### dt-test ### EXPECT_NOT \ : ---[ end trace <<int>> ]---
### dt-test ### pass of_unittest_lifecycle():3093
### dt-test ### EXPECT_NOT / : ---[ end trace <<int>> ]---
### dt-test ### EXPECT_NOT / : refcount_t: underflow; use-after-free.
### dt-test ### EXPECT_NOT / : WARNING: <<all>>
### dt-test ### EXPECT_NOT / : ------------[ cut here ]------------
### dt-test ### pass of_unittest_lifecycle():3119
### dt-test ### pass of_unittest_lifecycle():3120
### dt-test ### pass of_unittest_check_tree_linkage():270
### dt-test ### pass of_unittest_check_tree_linkage():271
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/substation@100/status
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/fairway-1/status
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/fairway-1/ride@100/track@30/incline-up
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/fairway-1/ride@100/track@40/incline-up
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/lights@40000/status
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/lights@40000/color
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/lights@40000/rate
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/hvac_2
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/ride_200
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/ride_200_left
### dt-test ### EXPECT \ : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/ride_200_right
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/substation@100/status
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/fairway-1/status
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/fairway-1/ride@100/track@30/incline-up
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/fairway-1/ride@100/track@40/incline-up
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/lights@40000/status
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/lights@40000/color
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/lights@40000/rate
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/hvac_2
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/ride_200
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/ride_200_left
OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/ride_200_right
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/ride_200_right
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/ride_200_left
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/ride_200
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/hvac_2
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/lights@40000/rate
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/lights@40000/color
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/lights@40000/status
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/fairway-1/ride@100/track@40/incline-up
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/fairway-1/ride@100/track@30/incline-up
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/fairway-1/status
### dt-test ### EXPECT / : OF: overlay: WARNING: memory leak will occur if overlay removed, property: /testcase-data-2/substation@100/status
### dt-test ### pass of_unittest_overlay_high_level():3552
### dt-test ### EXPECT \ : OF: overlay: ERROR: multiple fragments add and/or delete node /testcase-data-2/substation@100/motor-1/controller
### dt-test ### EXPECT \ : OF: overlay: ERROR: multiple fragments add, update, and/or delete property /testcase-data-2/substation@100/motor-1/controller/name
OF: overlay: ERROR: multiple fragments add and/or delete node /testcase-data-2/substation@100/motor-1/controller
OF: overlay: ERROR: multiple fragments add, update, and/or delete property /testcase-data-2/substation@100/motor-1/controller/name
### dt-test ### pass of_unittest_overlay_high_level():3559
### dt-test ### EXPECT / : OF: overlay: ERROR: multiple fragments add, update, and/or delete property /testcase-data-2/substation@100/motor-1/controller/name
### dt-test ### EXPECT / : OF: overlay: ERROR: multiple fragments add and/or delete node /testcase-data-2/substation@100/motor-1/controller
### dt-test ### EXPECT \ : OF: overlay: ERROR: multiple fragments add and/or delete node /testcase-data-2/substation@100/motor-1/electric
### dt-test ### EXPECT \ : OF: overlay: ERROR: multiple fragments add, update, and/or delete property /testcase-data-2/substation@100/motor-1/electric/rpm_avail
### dt-test ### EXPECT \ : OF: overlay: ERROR: multiple fragments add, update, and/or delete property /testcase-data-2/substation@100/motor-1/electric/name
OF: overlay: ERROR: multiple fragments add and/or delete node /testcase-data-2/substation@100/motor-1/electric
OF: overlay: ERROR: multiple fragments add, update, and/or delete property /testcase-data-2/substation@100/motor-1/electric/rpm_avail
OF: overlay: ERROR: multiple fragments add, update, and/or delete property /testcase-data-2/substation@100/motor-1/electric/name
### dt-test ### pass of_unittest_overlay_high_level():3574
### dt-test ### EXPECT / : OF: overlay: ERROR: multiple fragments add, update, and/or delete property /testcase-data-2/substation@100/motor-1/electric/name
### dt-test ### EXPECT / : OF: overlay: ERROR: multiple fragments add, update, and/or delete property /testcase-data-2/substation@100/motor-1/electric/rpm_avail
### dt-test ### EXPECT / : OF: overlay: ERROR: multiple fragments add and/or delete node /testcase-data-2/substation@100/motor-1/electric
### dt-test ### pass of_unittest_overlay_high_level():3584
### dt-test ### pass of_unittest_overlay_high_level():3587
### dt-test ### end of unittest - 276 passed, 0 failed


<< post-test console output deleted >>

/ # cat /proc/version
Linux version 6.2.0-rc1-00008-g0ad108551489 (frowand@xps8900) (arm-linux-gnueabi-gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #23 SMP PREEMPT Mon Feb 13 12:52:35 CST 2023
diff mbox series

Patch

diff --git a/drivers/of/dynamic.c b/drivers/of/dynamic.c
index becb80f762c8..dbcbc41f3465 100644
--- a/drivers/of/dynamic.c
+++ b/drivers/of/dynamic.c
@@ -329,9 +329,17 @@  void of_node_release(struct kobject *kobj)
 {
 	struct device_node *node = kobj_to_device_node(kobj);
 
+	/*
+	 * can not use '"%pOF", node' in pr_err() calls from this function
+	 * because an of_node_get(node) when refcount is already zero
+	 * will result in an error and a stack dump
+	 */
+
 	/* We should never be releasing nodes that haven't been detached. */
 	if (!of_node_check_flag(node, OF_DETACHED)) {
-		pr_err("ERROR: Bad of_node_put() on %pOF\n", node);
+
+		pr_err("ERROR: %s() detected bad of_node_put() on %pOF/%s\n",
+			__func__, node->parent, node->full_name);
 
 		/*
 		 * of unittests will test this path.  Do not print the stack