FAILED: patch "[PATCH] i2c: mark device nodes only in case of successful" failed to apply to 4.8-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.8-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
6a676fb69dcbf3310b9e462c1db66c8e7f6ead38Mon Sep 17 00:00:00 2001
From: Ralf Ramsauer <[email protected]>
Date: Mon, 17 Oct 2016 15:59:57 +0200
Subject: [PATCH] i2c: mark device nodes only in case of successful
instantiation
Instantiated I2C device nodes are marked with OF_POPULATE. This was introduced in 4f001fd30145a6. On unloading, loaded device nodes will of course be unmarked. The problem are nodes that fail during
initialisation: If a node fails, it won't be unloaded and hence not be unmarked.
If a I2C driver module is unloaded and reloaded, it will skip nodes that failed before.
Skip device nodes that are already populated and mark them only in case of success.
drivers/i2c/i2c-core.c +10 -1
@@ -1681,6 +1681,7 @@ static struct i2c_client *of_i2c_register_device(struct i2c_adapter *adap,static void of_i2c_register_devices (struct i2c_adapter *adap) {struct device_node *bus, *node; +struct i2c_client *client;/* Only register child devices if the adapter has a node pointer set */ if (!adap->dev.of_node)
@@ -1695,7 +1696,14 @@ static void of_i2c_register_devices(struct i2c_adapter *adap)for_each_available_child_of_node (bus, node) {if (of_node_test_and_set_flag (node,OF_POPULATED ))continue ; -of_i2c_register_device (adap, node); + + client =of_i2c_register_device (adap, node); +if (IS_ERR (client)) { +dev_warn (&adap->dev, +"Failed to create I2C device for %s\n" , + node->full_name); +of_node_clear_flag (node,OF_POPULATED ); + } }of_node_put (bus);
@@ -2299,6 +2307,7 @@ static int of_i2c_notify(struct notifier_block *nb, unsigned long action,if (IS_ERR (client)) {dev_err (&adap->dev,"failed to create client for '%s'\n" , rd->dn->full_name); +of_node_clear_flag (rd->dn,OF_POPULATED );return notifier_from_errno (PTR_ERR (client)); }break ;
PATCH 1/1 i2c: mark device nodes only in case of successful instantiation
commit 6a676fb69dcbf3310b9e462c1db66c8e7f6ead38 upstream.
Instantiated I2C device nodes are marked with OF_POPULATE. This was introduced in 4f001fd30145a6. On unloading, loaded device nodes will of course be unmarked. The problem are nodes that fail during
initialisation: If a node fails, it won't be unloaded and hence not be unmarked.
If a I2C driver module is unloaded and reloaded, it will skip nodes that failed before.
Skip device nodes that are already populated and mark them only in case of success.
---
Hi Greg,
this one is the backport for 4.8.y. Only hunks and surrounding context lines shifted slightly, no functional changes compared to its upstream commit 6a676fb69dcbf.
Best
Ralf
drivers/i2c/i2c-core.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)
drivers/i2c/i2c-core.c +10 -1
@@ -1592,6 +1592,7 @@ static struct i2c_client *of_i2c_register_device(struct i2c_adapter *adap,static void of_i2c_register_devices (struct i2c_adapter *adap) {struct device_node *node; +struct i2c_client *client;/* Only register child devices if the adapter has a node pointer set */ if (!adap->dev.of_node)
@@ -1602,7 +1603,14 @@ static void of_i2c_register_devices(struct i2c_adapter *adap)for_each_available_child_of_node (adap->dev.of_node, node) {if (of_node_test_and_set_flag (node,OF_POPULATED ))continue ; -of_i2c_register_device (adap, node); + + client =of_i2c_register_device (adap, node); +if (IS_ERR (client)) { +dev_warn (&adap->dev, +"Failed to create I2C device for %s\n" , + node->full_name); +of_node_clear_flag (node,OF_POPULATED ); + } } }
@@ -2201,6 +2209,7 @@ static int of_i2c_notify(struct notifier_block *nb, unsigned long action,if (IS_ERR (client)) {dev_err (&adap->dev,"failed to create client for '%s'\n" , rd->dn->full_name); +of_node_clear_flag (rd->dn,OF_POPULATED );return notifier_from_errno (PTR_ERR (client)); }break ;
Signature · 1 line
2.10.2
Greg KH
maintainerRe: [PATCH] i2c: mark device nodes only in case of successful instantiation
Quoted 21 lines · Ralf Ramsauer
commit
6a676fb69dcbf3310b9e462c1db66c8e7f6ead38upstream.Instantiated I2C device nodes are marked with
OF_POPULATE. This was introduced in4f001fd30145a6. On unloading, loaded device nodes will of course be unmarked. The problem are nodes that fail during
initialisation: If a node fails, it won't be unloaded and hence not be unmarked.If a I2C driver module is unloaded and reloaded, it will skip nodes that failed before.
Skip device nodes that are already populated and mark them only in case of success.
Fixes 4f001fd30145a6 ("i2c: Mark instantiated device nodes with OF_POPULATE")Signed-off-by Ralf Ramsauer <[email protected]>Reviewed-by Geert Uytterhoeven <[email protected]>[wsa: use 14-digit commit sha]Signed-off-by Wolfram Sang <[email protected]>
Quoted 6 lines
---
Hi Greg,this one is the backport for 4.8.y. Only hunks and surrounding context lines shifted slightly, no functional changes compared to its upstream commit
6a676fb69dcbf.
Thanks for the backport, now applied.
greg k-h