Hi Andy > Subject: Re: [PATCH v7 3/4] firmware: arm_scmi: Add SCMI v3.2 pincontrol > protocol basic support > > On Tue, Apr 02, 2024 at 10:22:23AM +0800, Peng Fan (OSS) wrote: > > ... > > > +#include <linux/module.h> > > +#include <linux/scmi_protocol.h> > > +#include <linux/slab.h> > > Please, follow IWYU principle, a lot of headers are missed. ok. I will try to figure out. BTW, is there an easy way to filter out what is missed? > > > +#include "common.h" > > +#include "protocols.h" > > ... > > > + ret = scmi_pinctrl_get_pin_info(ph, selector, > > + &pi->pins[selector]); > > It's netter as a single line. I try to follow 80 max chars per SCMI coding style. If Sudeep and Cristian is ok, I could use a single line. > > > + if (ret) > > + return ret; > > + } > > ... > > > +static int scmi_pinctrl_protocol_init(const struct > > +scmi_protocol_handle *ph) { > > + int ret; > > + u32 version; > > + struct scmi_pinctrl_info *pinfo; > > + > > + ret = ph->xops->version_get(ph, &version); > > + if (ret) > > + return ret; > > + > > + dev_dbg(ph->dev, "Pinctrl Version %d.%d\n", > > + PROTOCOL_REV_MAJOR(version), > PROTOCOL_REV_MINOR(version)); > > + > > + pinfo = devm_kzalloc(ph->dev, sizeof(*pinfo), GFP_KERNEL); > > + if (!pinfo) > > + return -ENOMEM; > > + > > + ret = scmi_pinctrl_attributes_get(ph, pinfo); > > + if (ret) > > + return ret; > > + > > + pinfo->pins = devm_kcalloc(ph->dev, pinfo->nr_pins, > > + sizeof(*pinfo->pins), GFP_KERNEL); > > + if (!pinfo->pins) > > + return -ENOMEM; > > + > > + pinfo->groups = devm_kcalloc(ph->dev, pinfo->nr_groups, > > + sizeof(*pinfo->groups), GFP_KERNEL); > > + if (!pinfo->groups) > > + return -ENOMEM; > > + > > + pinfo->functions = devm_kcalloc(ph->dev, pinfo->nr_functions, > > + sizeof(*pinfo->functions), > GFP_KERNEL); > > + if (!pinfo->functions) > > + return -ENOMEM; > > + > > + pinfo->version = version; > > + > > + return ph->set_priv(ph, pinfo, version); > > Same comments as per previous version. devm_ here is simply wrong. > It breaks the order of freeing resources. > > I.o.w. I see *no guarantee* that these init-deinit functions will be properly > called from the respective probe-remove. Moreover the latter one may also > have its own devm allocations (which are rightfully placed) and you get > completely out of control the resource management. I see an old thread. https://lore.kernel.org/linux-arm-kernel/ZJ78hBcjAhiU+ZBO@e120937-lin/#t The free in deinit is not to free the ones alloced in init, it is to free the ones alloced such as in scmi_pinctrl_get_function_info Thanks, Peng. > > > +} > > -- > With Best Regards, > Andy Shevchenko >