From: Bjorn Helgaas <helgaas@kernel.org>
To: "Kobayashi,Daisuke" <kobayashi.da-06@fujitsu.com>
Cc: kobayashi.da-06@jp.fujitsu.com, linux-cxl@vger.kernel.org,
y-goto@fujitsu.com, linux-pci@vger.kernel.org, mj@ucw.cz,
dan.j.williams@intel.com
Subject: Re: [RFC PATCH v2 1/3] Add sysfs attribute for CXL 1.1 device link status
Date: Tue, 27 Feb 2024 10:43:39 -0600 [thread overview]
Message-ID: <20240227164339.GA239446@bhelgaas> (raw)
In-Reply-To: <20240227083313.87699-2-kobayashi.da-06@fujitsu.com>
On Tue, Feb 27, 2024 at 05:33:11PM +0900, Kobayashi,Daisuke wrote:
> This patch implements a process to output the link status information
> of the CXL1.1 device to sysfs. The values of the registers related to
> the link status are outputted into three separate files.
> +static u32 cxl_rcrb_to_linkcap(struct device *dev, resource_size_t rcrb)
> +{
> + void __iomem *addr;
> + u8 offset = 0;
Unnecessary initialization. Also, readw() returns u16.
> + u32 cap_hdr;
> + u32 linkcap = 0;
Ditto.
> +
> + if (WARN_ON_ONCE(rcrb == CXL_RESOURCE_NONE))
> + return 0;
> +
> + if (!request_mem_region(rcrb, SZ_4K, dev_name(dev)))
> + return 0;
> +
> + addr = ioremap(rcrb, SZ_4K);
> + if (!addr)
> + goto out;
> +
> + offset = readw(addr + PCI_CAPABILITY_LIST);
> + offset = offset & 0x00ff;
> + cap_hdr = readl(addr + offset);
> + while ((cap_hdr & 0x000000ff) != PCI_CAP_ID_EXP) {
> + offset = (cap_hdr >> 8) & 0x000000ff;
> + if (!offset)
> + break;
> + cap_hdr = readl(addr + offset);
> + }
Hmmm, it's a shame we have to reimplement pci_find_capability() here.
I see the problem though -- pci_find_capability() does config reads
and this is in MMIO space, not config space.
But you need this several times, so maybe a helper function would
still be useful so you don't have to repeat the code.
> + if (offset)
> + dev_dbg(dev, "found PCIe capability (0x%x)\n", offset);
Testing "offset" acknowledges the possibility that it may be NULL, and
in that case, the readl() below is a NULL pointer dereference.
> + linkcap = readl(addr + offset + PCI_EXP_LNKCAP);
> + iounmap(addr);
> +out:
> + release_mem_region(rcrb, SZ_4K);
> +
> + return linkcap;
> +}
> @@ -806,6 +1003,9 @@ static int cxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
> if (IS_ERR(mds))
> return PTR_ERR(mds);
> cxlds = &mds->cxlds;
> + device_create_file(&pdev->dev, &dev_attr_rcd_link_cap);
> + device_create_file(&pdev->dev, &dev_attr_rcd_link_ctrl);
> + device_create_file(&pdev->dev, &dev_attr_rcd_link_status);
Is there a removal issue here? What if "pdev" is removed? Or what if
this module is unloaded? Do these sysfs files get cleaned up
automagically somehow?
Bjorn
next prev parent reply other threads:[~2024-02-27 16:43 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-27 8:33 [RFC PATCH v2 0/3] Display cxl1.1 device link status Kobayashi,Daisuke
2024-02-27 8:33 ` [RFC PATCH v2 1/3] Add sysfs attribute for CXL 1.1 " Kobayashi,Daisuke
2024-02-27 16:43 ` Bjorn Helgaas [this message]
2024-02-28 8:28 ` Daisuke Kobayashi (Fujitsu)
2024-03-02 2:22 ` Dan Williams
2024-02-27 8:33 ` [RFC PATCH v2 2/3] Remove conditional branch that is not suitable for cxl1.1 devices Kobayashi,Daisuke
2024-02-27 8:33 ` [RFC PATCH v2 3/3] lspci: Add function to display cxl1.1 device link status Kobayashi,Daisuke
2024-02-28 8:34 ` Martin Mareš
2024-03-01 7:02 ` Daisuke Kobayashi (Fujitsu)
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=20240227164339.GA239446@bhelgaas \
--to=helgaas@kernel.org \
--cc=dan.j.williams@intel.com \
--cc=kobayashi.da-06@fujitsu.com \
--cc=kobayashi.da-06@jp.fujitsu.com \
--cc=linux-cxl@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=mj@ucw.cz \
--cc=y-goto@fujitsu.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