Skip to content

Commit 89bf620

Browse files
committed
Merge tag 'devicetree-fixes-for-6.5-2' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux
Pull devicetree fixes from Rob Herring: - Fix DT node refcount when creating platform devices - Fix deadlock in changeset code due to printing with devtree_lock held - Fix unittest EXPECT strings for parse_phandle_with_args_map() test - Fix IMA kexec memblock freeing * tag 'devicetree-fixes-for-6.5-2' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux: of/platform: increase refcount of fwnode of: dynamic: Refactor action prints to not use "%pOF" inside devtree_lock of: unittest: Fix EXPECT for parse_phandle_with_args_map() test mm,ima,kexec,of: use memblock_free_late from ima_free_kexec_buffer
2 parents 53663f4 + 7882541 commit 89bf620

File tree

4 files changed

+15
-27
lines changed

4 files changed

+15
-27
lines changed

drivers/of/dynamic.c

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,14 @@ int of_reconfig_notifier_unregister(struct notifier_block *nb)
6363
}
6464
EXPORT_SYMBOL_GPL(of_reconfig_notifier_unregister);
6565

66-
#ifdef DEBUG
67-
const char *action_names[] = {
66+
static const char *action_names[] = {
67+
[0] = "INVALID",
6868
[OF_RECONFIG_ATTACH_NODE] = "ATTACH_NODE",
6969
[OF_RECONFIG_DETACH_NODE] = "DETACH_NODE",
7070
[OF_RECONFIG_ADD_PROPERTY] = "ADD_PROPERTY",
7171
[OF_RECONFIG_REMOVE_PROPERTY] = "REMOVE_PROPERTY",
7272
[OF_RECONFIG_UPDATE_PROPERTY] = "UPDATE_PROPERTY",
7373
};
74-
#endif
7574

7675
int of_reconfig_notify(unsigned long action, struct of_reconfig_data *p)
7776
{
@@ -620,21 +619,9 @@ static int __of_changeset_entry_apply(struct of_changeset_entry *ce)
620619
}
621620

622621
ret = __of_add_property(ce->np, ce->prop);
623-
if (ret) {
624-
pr_err("changeset: add_property failed @%pOF/%s\n",
625-
ce->np,
626-
ce->prop->name);
627-
break;
628-
}
629622
break;
630623
case OF_RECONFIG_REMOVE_PROPERTY:
631624
ret = __of_remove_property(ce->np, ce->prop);
632-
if (ret) {
633-
pr_err("changeset: remove_property failed @%pOF/%s\n",
634-
ce->np,
635-
ce->prop->name);
636-
break;
637-
}
638625
break;
639626

640627
case OF_RECONFIG_UPDATE_PROPERTY:
@@ -648,20 +635,17 @@ static int __of_changeset_entry_apply(struct of_changeset_entry *ce)
648635
}
649636

650637
ret = __of_update_property(ce->np, ce->prop, &old_prop);
651-
if (ret) {
652-
pr_err("changeset: update_property failed @%pOF/%s\n",
653-
ce->np,
654-
ce->prop->name);
655-
break;
656-
}
657638
break;
658639
default:
659640
ret = -EINVAL;
660641
}
661642
raw_spin_unlock_irqrestore(&devtree_lock, flags);
662643

663-
if (ret)
644+
if (ret) {
645+
pr_err("changeset: apply failed: %-15s %pOF:%s\n",
646+
action_names[ce->action], ce->np, ce->prop->name);
664647
return ret;
648+
}
665649

666650
switch (ce->action) {
667651
case OF_RECONFIG_ATTACH_NODE:
@@ -947,6 +931,9 @@ int of_changeset_action(struct of_changeset *ocs, unsigned long action,
947931
if (!ce)
948932
return -ENOMEM;
949933

934+
if (WARN_ON(action >= ARRAY_SIZE(action_names)))
935+
return -EINVAL;
936+
950937
/* get a reference to the node */
951938
ce->action = action;
952939
ce->np = of_node_get(np);

drivers/of/kexec.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,8 @@ int __init ima_free_kexec_buffer(void)
184184
if (ret)
185185
return ret;
186186

187-
return memblock_phys_free(addr, size);
187+
memblock_free_late(addr, size);
188+
return 0;
188189
}
189190
#endif
190191

drivers/of/platform.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ struct platform_device *of_device_alloc(struct device_node *np,
141141
}
142142

143143
/* setup generic device info */
144-
device_set_node(&dev->dev, of_fwnode_handle(np));
144+
device_set_node(&dev->dev, of_fwnode_handle(of_node_get(np)));
145145
dev->dev.parent = parent ? : &platform_bus;
146146

147147
if (bus_id)
@@ -239,7 +239,7 @@ static struct amba_device *of_amba_device_create(struct device_node *node,
239239
dev->dev.dma_mask = &dev->dev.coherent_dma_mask;
240240

241241
/* setup generic device info */
242-
device_set_node(&dev->dev, of_fwnode_handle(node));
242+
device_set_node(&dev->dev, of_fwnode_handle(of_node_get(node)));
243243
dev->dev.parent = parent ? : &platform_bus;
244244
dev->dev.platform_data = platform_data;
245245
if (bus_id)

drivers/of/unittest.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -664,12 +664,12 @@ static void __init of_unittest_parse_phandle_with_args_map(void)
664664
memset(&args, 0, sizeof(args));
665665

666666
EXPECT_BEGIN(KERN_INFO,
667-
"OF: /testcase-data/phandle-tests/consumer-b: could not find phandle");
667+
"OF: /testcase-data/phandle-tests/consumer-b: could not find phandle 12345678");
668668

669669
rc = of_parse_phandle_with_args_map(np, "phandle-list-bad-phandle",
670670
"phandle", 0, &args);
671671
EXPECT_END(KERN_INFO,
672-
"OF: /testcase-data/phandle-tests/consumer-b: could not find phandle");
672+
"OF: /testcase-data/phandle-tests/consumer-b: could not find phandle 12345678");
673673

674674
unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);
675675

0 commit comments

Comments
 (0)