Message ID | 20220526081550.1089805-3-saravanak@google.com (mailing list archive) |
---|---|
State | RFC, archived |
Headers | show |
Series | deferred_probe_timeout logic clean up | expand |
Hi Saravana, Thanks for your patch! On Thu, May 26, 2022 at 10:16 AM Saravana Kannan <saravanak@google.com> wrote: > Now that fw_devlink=on by default and fw_devlink supports > "pinctrl-[0-8]" property, the execution will never get to the point 0-9? oh, it's really 0-8: drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl0, "pinctrl-0", NULL) drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl1, "pinctrl-1", NULL) drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl2, "pinctrl-2", NULL) drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl3, "pinctrl-3", NULL) drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl4, "pinctrl-4", NULL) drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl5, "pinctrl-5", NULL) drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl6, "pinctrl-6", NULL) drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl7, "pinctrl-7", NULL) drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl8, "pinctrl-8", NULL) Looks fragile, especially since we now have: arch/arm64/boot/dts/microchip/sparx5_pcb134_board.dtsi: pinctrl-9 = <&i2cmux_9>; arch/arm64/boot/dts/microchip/sparx5_pcb134_board.dtsi: pinctrl-10 = <&i2cmux_10>; arch/arm64/boot/dts/microchip/sparx5_pcb134_board.dtsi: pinctrl-11 = <&i2cmux_11>; arch/arm64/boot/dts/microchip/sparx5_pcb134_board.dtsi: pinctrl-12 = <&i2cmux_pins_i>; > where driver_deferred_probe_check_state() is called before the supplier > has probed successfully or before deferred probe timeout has expired. > > So, delete the call and replace it with -ENODEV. > > Signed-off-by: Saravana Kannan <saravanak@google.com> 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 Mon, May 30, 2022 at 2:22 AM Geert Uytterhoeven <geert@linux-m68k.org> wrote: > > Hi Saravana, > > Thanks for your patch! > > On Thu, May 26, 2022 at 10:16 AM Saravana Kannan <saravanak@google.com> wrote: > > Now that fw_devlink=on by default and fw_devlink supports > > "pinctrl-[0-8]" property, the execution will never get to the point > > 0-9? > > oh, it's really 0-8: > > drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl0, "pinctrl-0", NULL) > drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl1, "pinctrl-1", NULL) > drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl2, "pinctrl-2", NULL) > drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl3, "pinctrl-3", NULL) > drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl4, "pinctrl-4", NULL) > drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl5, "pinctrl-5", NULL) > drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl6, "pinctrl-6", NULL) > drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl7, "pinctrl-7", NULL) > drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl8, "pinctrl-8", NULL) > > Looks fragile, especially since we now have: > > arch/arm64/boot/dts/microchip/sparx5_pcb134_board.dtsi: > pinctrl-9 = <&i2cmux_9>; > arch/arm64/boot/dts/microchip/sparx5_pcb134_board.dtsi: pinctrl-10 > = <&i2cmux_10>; > arch/arm64/boot/dts/microchip/sparx5_pcb134_board.dtsi: pinctrl-11 > = <&i2cmux_11>; > arch/arm64/boot/dts/microchip/sparx5_pcb134_board.dtsi: pinctrl-12 > = <&i2cmux_pins_i>; Checking for pinctrl-* and then verifying if * matches %d would be more complicated and probably more expensive compared to listing pinctrl-[0-8]. Especially because more than 50% of pinctrl-* properties in DT files are NOT pinctrl-%d. So back when we merged this, Rob and I agreed [0-8] was good enough for now and we can add more if we needed to. Also, when I checked back then, all the pinctrl-5+ properties ended up pointing to the same suppliers as the lower numbered ones. So it didn't make a difference. Ok, I just checked linux-next all the pinctrl-9+ instances and it's still true that they all point to the same supplier pointed to by pinctrl-[0-8]. So yeah, it looks fragile, but is not broken and it's more efficient than looking for pinctrl-%d or adding more pinctrl-xx entries. So, let's fix it if it actually breaks? Not going to oppose a patch if anyone wants to make it more complete. -Saravana > > > where driver_deferred_probe_check_state() is called before the supplier > > has probed successfully or before deferred probe timeout has expired. > > > > So, delete the call and replace it with -ENODEV. > > > > Signed-off-by: Saravana Kannan <saravanak@google.com> > > 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, Jun 04, 2022 at 08:41:01PM -0700, Saravana Kannan wrote: > On Mon, May 30, 2022 at 2:22 AM Geert Uytterhoeven <geert@linux-m68k.org> wrote: > > On Thu, May 26, 2022 at 10:16 AM Saravana Kannan <saravanak@google.com> wrote: > > > Now that fw_devlink=on by default and fw_devlink supports > > > "pinctrl-[0-8]" property, the execution will never get to the point > > > > 0-9? > > > > oh, it's really 0-8: > > > > drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl0, "pinctrl-0", NULL) > > drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl1, "pinctrl-1", NULL) > > drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl2, "pinctrl-2", NULL) > > drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl3, "pinctrl-3", NULL) > > drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl4, "pinctrl-4", NULL) > > drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl5, "pinctrl-5", NULL) > > drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl6, "pinctrl-6", NULL) > > drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl7, "pinctrl-7", NULL) > > drivers/of/property.c:DEFINE_SIMPLE_PROP(pinctrl8, "pinctrl-8", NULL) > > > > Looks fragile, especially since we now have: > > > > arch/arm64/boot/dts/microchip/sparx5_pcb134_board.dtsi: > > pinctrl-9 = <&i2cmux_9>; > > arch/arm64/boot/dts/microchip/sparx5_pcb134_board.dtsi: pinctrl-10 > > = <&i2cmux_10>; > > arch/arm64/boot/dts/microchip/sparx5_pcb134_board.dtsi: pinctrl-11 > > = <&i2cmux_11>; > > arch/arm64/boot/dts/microchip/sparx5_pcb134_board.dtsi: pinctrl-12 > > = <&i2cmux_pins_i>; > > Checking for pinctrl-* and then verifying if * matches %d would be > more complicated and probably more expensive compared to listing > pinctrl-[0-8]. Especially because more than 50% of pinctrl-* > properties in DT files are NOT pinctrl-%d. So back when we merged > this, Rob and I agreed [0-8] was good enough for now and we can add > more if we needed to. Also, when I checked back then, all the > pinctrl-5+ properties ended up pointing to the same suppliers as the > lower numbered ones. So it didn't make a difference. > > Ok, I just checked linux-next all the pinctrl-9+ instances and it's > still true that they all point to the same supplier pointed to by > pinctrl-[0-8]. > > So yeah, it looks fragile, And feels fragile, adds into confusion, etc. Please, consider redesigning this to be more robust. > but is not broken and it's more efficient > than looking for pinctrl-%d or adding more pinctrl-xx entries. So, > let's fix it if it actually breaks? Not going to oppose a patch if > anyone wants to make it more complete. > > > > where driver_deferred_probe_check_state() is called before the supplier > > > has probed successfully or before deferred probe timeout has expired. > > > > > > So, delete the call and replace it with -ENODEV.
diff --git a/drivers/pinctrl/devicetree.c b/drivers/pinctrl/devicetree.c index 3fb238714718..ef898ee8ca6b 100644 --- a/drivers/pinctrl/devicetree.c +++ b/drivers/pinctrl/devicetree.c @@ -129,7 +129,7 @@ static int dt_to_map_one_config(struct pinctrl *p, np_pctldev = of_get_next_parent(np_pctldev); if (!np_pctldev || of_node_is_root(np_pctldev)) { of_node_put(np_pctldev); - ret = driver_deferred_probe_check_state(p->dev); + ret = -ENODEV; /* keep deferring if modules are enabled */ if (IS_ENABLED(CONFIG_MODULES) && !allow_default && ret < 0) ret = -EPROBE_DEFER;
Now that fw_devlink=on by default and fw_devlink supports "pinctrl-[0-8]" property, the execution will never get to the point where driver_deferred_probe_check_state() is called before the supplier has probed successfully or before deferred probe timeout has expired. So, delete the call and replace it with -ENODEV. Signed-off-by: Saravana Kannan <saravanak@google.com> --- drivers/pinctrl/devicetree.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)