On Thu, May 2, 2024 at 9:35 PM Ilpo Järvinen <ilpo.jarvinen@xxxxxxxxxxxxxxx> wrote: > > On Wed, 1 May 2024, Shresth Prasad wrote: > > > Add `__free` function attribute to `ap` and `match` pointer > > initialisations which ensure that the pointers are freed as soon as they > > go out of scope, thus removing the need to manually free them using > > `of_node_put`. > > > > This also removes the need for the `goto` statement and the `rc` > > variable. > > > > Tested using a qemu x86_64 virtual machine. > > Eh, how can you test this with an x86_64 VM ??? > > config SERIAL_SUNSU > tristate "Sun SU serial support" > depends on SPARC && PCI > By that, I mean that I compiled the kernel and ran the produced bzImage on a x86_64 qemu machine. I unfortunately don't have the hardware to test it on, but I don't think the change is complex enough to require testing on real hardware (unless I'm assuming incorrectly). Regards, Shresth > > Suggested-by: Julia Lawall <julia.lawall@xxxxxxxx> > > Signed-off-by: Shresth Prasad <shresthprasad7@xxxxxxxxx> > > --- > > Changes in v2: > > - Specify how the patch was tested > > > > drivers/tty/serial/sunsu.c | 37 +++++++++++-------------------------- > > 1 file changed, 11 insertions(+), 26 deletions(-) > > > > diff --git a/drivers/tty/serial/sunsu.c b/drivers/tty/serial/sunsu.c > > index 67a5fc70bb4b..0f463da5e7ce 100644 > > --- a/drivers/tty/serial/sunsu.c > > +++ b/drivers/tty/serial/sunsu.c > > @@ -1382,44 +1382,29 @@ static inline struct console *SUNSU_CONSOLE(void) > > > > static enum su_type su_get_type(struct device_node *dp) > > { > > - struct device_node *ap = of_find_node_by_path("/aliases"); > > - enum su_type rc = SU_PORT_PORT; > > + struct device_node *ap __free(device_node) = > > + of_find_node_by_path("/aliases"); > > > > if (ap) { > > const char *keyb = of_get_property(ap, "keyboard", NULL); > > const char *ms = of_get_property(ap, "mouse", NULL); > > - struct device_node *match; > > > > if (keyb) { > > - match = of_find_node_by_path(keyb); > > + struct device_node *match __free(device_node) = > > + of_find_node_by_path(keyb); > > > > - /* > > - * The pointer is used as an identifier not > > - * as a pointer, we can drop the refcount on > > - * the of__node immediately after getting it. > > - */ > > - of_node_put(match); > > - > > - if (dp == match) { > > - rc = SU_PORT_KBD; > > - goto out; > > - } > > + if (dp == match) > > + return SU_PORT_KBD; > > } > > if (ms) { > > - match = of_find_node_by_path(ms); > > + struct device_node *match __free(device_node) = > > + of_find_node_by_path(ms); > > > > - of_node_put(match); > > - > > - if (dp == match) { > > - rc = SU_PORT_MS; > > - goto out; > > - } > > + if (dp == match) > > + return SU_PORT_MS; > > } > > } > > - > > -out: > > - of_node_put(ap); > > - return rc; > > + return SU_PORT_PORT; > > } > > > > static int su_probe(struct platform_device *op) > >