From: quic_zijuhu <quic_zijuhu@quicinc.com>
To: Dan Williams <dan.j.williams@intel.com>,
Ira Weiny <ira.weiny@intel.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Zijun Hu <zijun_hu@icloud.com>
Cc: Davidlohr Bueso <dave@stgolabs.net>,
Jonathan Cameron <jonathan.cameron@huawei.com>,
Dave Jiang <dave.jiang@intel.com>,
Alison Schofield <alison.schofield@intel.com>,
Vishal Verma <vishal.l.verma@intel.com>,
Timur Tabi <timur@kernel.org>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
<linux-cxl@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<netdev@vger.kernel.org>
Subject: Re: [PATCH v4 1/2] cxl/region: Find free cxl decoder by device_for_each_child()
Date: Tue, 10 Sep 2024 11:17:22 +0800 [thread overview]
Message-ID: <a6dae308-ff34-4479-a638-8c12ff2e8d32@quicinc.com> (raw)
In-Reply-To: <66df9692e324d_ae21294ad@dwillia2-mobl3.amr.corp.intel.com.notmuch>
On 9/10/2024 8:45 AM, Dan Williams wrote:
> Ira Weiny wrote:
> [..]
>>> This still feels more complex that I think it should be. Why not just
>>> modify the needed device information after the device is found? What
>>> exactly is being changed in the match_free_decoder that needs to keep
>>> "state"? This feels odd.
>>
>> Agreed it is odd.
>>
>> How about adding?
>
> I would prefer just dropping usage of device_find_ or device_for_each_
> with storing an array decoders in the port directly. The port already
> has arrays for dports , endpoints, and regions. Using the "device" APIs
> to iterate children was a bit lazy, and if the id is used as the array
> key then a direct lookup makes some cases simpler.
it seems Ira and Dan have corrected original logic to ensure
that all child decoders are sorted by ID in ascending order as shown
by below link.
https://lore.kernel.org/all/66df666ded3f7_3c80f229439@iweiny-mobl.notmuch/
based on above correction, as shown by my another exclusive fix
https://lore.kernel.org/all/20240905-fix_cxld-v2-1-51a520a709e4@quicinc.com/
there are a very simple change to solve the remaining original concern
that device_find_child() modifies caller's match data.
here is the simple change.
--- a/drivers/cxl/core/region.c
+++ b/drivers/cxl/core/region.c
@@ -797,23 +797,13 @@ static size_t show_targetN(struct cxl_region
*cxlr, char *buf, int pos)
static int match_free_decoder(struct device *dev, void *data)
{
struct cxl_decoder *cxld;
- int *id = data;
if (!is_switch_decoder(dev))
return 0;
cxld = to_cxl_decoder(dev);
- /* enforce ordered allocation */
- if (cxld->id != *id)
- return 0;
-
- if (!cxld->region)
- return 1;
-
- (*id)++;
-
- return 0;
+ return cxld->region ? 0 : 1;
}
static int match_auto_decoder(struct device *dev, void *data)
@@ -840,7 +830,6 @@ cxl_region_find_decoder(struct cxl_port *port,
struct cxl_region *cxlr)
{
struct device *dev;
- int id = 0;
if (port == cxled_to_port(cxled))
return &cxled->cxld;
@@ -849,7 +838,7 @@ cxl_region_find_decoder(struct cxl_port *port,
dev = device_find_child(&port->dev, &cxlr->params,
match_auto_decoder);
else
- dev = device_find_child(&port->dev, &id,
match_free_decoder);
+ dev = device_find_child(&port->dev, NULL,
match_free_decoder);
if (!dev)
return NULL;
next prev parent reply other threads:[~2024-09-10 3:17 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-05 0:36 [PATCH v4 0/2] driver core: Prevent device_find_child() from modifying caller's match data Zijun Hu
2024-09-05 0:36 ` [PATCH v4 1/2] cxl/region: Find free cxl decoder by device_for_each_child() Zijun Hu
2024-09-05 5:32 ` Greg Kroah-Hartman
2024-09-05 8:48 ` quic_zijuhu
2024-09-05 11:18 ` Zijun Hu
2024-09-09 19:56 ` Ira Weiny
2024-09-10 0:45 ` Dan Williams
2024-09-10 3:17 ` quic_zijuhu [this message]
2024-09-10 4:15 ` Dan Williams
2024-09-10 4:20 ` Dan Williams
2024-09-10 11:46 ` Zijun Hu
2024-09-10 16:01 ` Dan Williams
2024-09-10 18:27 ` Dan Williams
2024-09-11 12:14 ` Zijun Hu
2024-09-11 11:52 ` Zijun Hu
2024-09-05 0:36 ` [PATCH v4 2/2] net: qcom/emac: Find sgmii_ops " Zijun Hu
2024-09-05 5:29 ` Greg Kroah-Hartman
2024-09-05 5:33 ` Greg Kroah-Hartman
2024-09-05 9:09 ` quic_zijuhu
2024-09-06 0:29 ` Zijun Hu
2024-09-05 8:29 ` quic_zijuhu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a6dae308-ff34-4479-a638-8c12ff2e8d32@quicinc.com \
--to=quic_zijuhu@quicinc.com \
--cc=alison.schofield@intel.com \
--cc=dan.j.williams@intel.com \
--cc=dave.jiang@intel.com \
--cc=dave@stgolabs.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=gregkh@linuxfoundation.org \
--cc=ira.weiny@intel.com \
--cc=jonathan.cameron@huawei.com \
--cc=kuba@kernel.org \
--cc=linux-cxl@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=timur@kernel.org \
--cc=vishal.l.verma@intel.com \
--cc=zijun_hu@icloud.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox