[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID:
<PAXPR04MB84591748D80473930E1E450488112@PAXPR04MB8459.eurprd04.prod.outlook.com>
Date: Tue, 7 Jan 2025 01:49:04 +0000
From: Peng Fan <peng.fan@....com>
To: Dan Carpenter <dan.carpenter@...aro.org>, "Peng Fan (OSS)"
<peng.fan@....nxp.com>
CC: "sudeep.holla@....com" <sudeep.holla@....com>, "cristian.marussi@....com"
<cristian.marussi@....com>, "arm-scmi@...r.kernel.org"
<arm-scmi@...r.kernel.org>, "linux-arm-kernel@...ts.infradead.org"
<linux-arm-kernel@...ts.infradead.org>, "linux-kernel@...r.kernel.org"
<linux-kernel@...r.kernel.org>
Subject: RE: [RFC] firmware: arm_scmi: Optimize the iteration of
scmi_requested_devices
Hi Dan,
> Subject: Re: [RFC] firmware: arm_scmi: Optimize the iteration of
> scmi_requested_devices
>
> On Mon, Jan 06, 2025 at 02:57:24PM +0800, Peng Fan (OSS) wrote:
> > From: Peng Fan <peng.fan@....com>
> >
> > scmi_requested_devices is organized in IDR based link lists, so only
> > need to search the link lists when there is a match protocol_id.
> >
> > Back to search the next id with 'continue' to save cpu cycles, if
> > protocol_id does not match.
> >
> > Signed-off-by: Peng Fan <peng.fan@....com>
> > ---
> >
> > RFC:
> > Tested on i.MX95.
> >
> > drivers/firmware/arm_scmi/bus.c | 3 +++
> > 1 file changed, 3 insertions(+)
> >
> > diff --git a/drivers/firmware/arm_scmi/bus.c
> > b/drivers/firmware/arm_scmi/bus.c index
> 157172a5f2b5..42deab5903fb
> > 100644
> > --- a/drivers/firmware/arm_scmi/bus.c
> > +++ b/drivers/firmware/arm_scmi/bus.c
> > @@ -79,6 +79,8 @@ static int scmi_protocol_device_request(const
> struct scmi_device_id *id_table)
> > if (rdev->id_table->protocol_id ==
> > id_table->protocol_id)
> > phead = head;
> > + else
> > + continue;
> > }
> > list_for_each_entry(rdev, head, node) {
> > if (!strcmp(rdev->id_table->name, id_table-
> >name)) { @@ -89,6
> > +91,7 @@ static int scmi_protocol_device_request(const struct
> scmi_device_id *id_table)
> > goto out;
> > }
> > }
> > + break;
> > }
>
> I suspect your patch is correct but we could go further. Removing the
> test for if (!phead) really helps readability.
Thanks. Looks better.
Thanks,
Peng.
>
> regards,
> dan carpenter
>
> diff --git a/drivers/firmware/arm_scmi/bus.c
> b/drivers/firmware/arm_scmi/bus.c index
> a3386bf36de5..2c853c84b58f 100644
> --- a/drivers/firmware/arm_scmi/bus.c
> +++ b/drivers/firmware/arm_scmi/bus.c
> @@ -72,14 +72,11 @@ static int scmi_protocol_device_request(const
> struct scmi_device_id *id_table)
> */
> mutex_lock(&scmi_requested_devices_mtx);
> idr_for_each_entry(&scmi_requested_devices, head, id) {
> - if (!phead) {
> - /* A list found registered in the IDR is never
> empty */
> - rdev = list_first_entry(head, struct
> scmi_requested_dev,
> - node);
> - if (rdev->id_table->protocol_id ==
> - id_table->protocol_id)
> - phead = head;
> - }
> + /* A list found registered in the IDR is never empty */
> + rdev = list_first_entry(head, struct
> scmi_requested_dev, node);
> + if (rdev->id_table->protocol_id != id_table-
> >protocol_id)
> + continue;
> +
> list_for_each_entry(rdev, head, node) {
> if (!strcmp(rdev->id_table->name, id_table-
> >name)) {
> pr_err("Ignoring duplicate request
> [%d] %s\n", @@ -89,6 +86,8 @@ static int
> scmi_protocol_device_request(const struct scmi_device_id *id_table)
> goto out;
> }
> }
> + phead = head;
> + break;
> }
>
> /*
Powered by blists - more mailing lists