From: Niklas Schnelle <schnelle@linux.ibm.com>
To: Heiko Carstens <hca@linux.ibm.com>,
Alexander Gordeev <agordeev@linux.ibm.com>,
Sven Schnelle <svens@linux.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>,
Christian Borntraeger <borntraeger@linux.ibm.com>,
Gerd Bayer <gbayer@linux.ibm.com>
Cc: linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 1/3] s390/pci: Rework __zpci_event_error() to remove conditional locking
Date: Mon, 03 Aug 2026 18:40:13 +0200 [thread overview]
Message-ID: <cbcdabac9c84252aabfaf1adda139652711de9a6.camel@linux.ibm.com> (raw)
In-Reply-To: <20260803142907.1771509-2-hca@linux.ibm.com>
On Mon, 2026-08-03 at 16:29 +0200, Heiko Carstens wrote:
> Clang's compiler based static context analysis does not work with
> locks that are conditionally taken like in __zpci_event_error():
>
> arch/s390/pci/pci_event.c:320:2: warning: mutex 'get_zdev_by_fid(ccdf->fid).state_lock'
> is not held on every path through here [-Wthread-safety-analysis]
>
> Given that code which takes locks conditionally can be considered
> suboptimal rework __zpci_event_error() to get rid of this.
>
> Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
> ---
> arch/s390/pci/pci_event.c | 43 ++++++++++++++++++++++-----------------
> 1 file changed, 24 insertions(+), 19 deletions(-)
>
> diff --git a/arch/s390/pci/pci_event.c b/arch/s390/pci/pci_event.c
> index 839bd91c056e..48fa26dcbee1 100644
> --- a/arch/s390/pci/pci_event.c
> +++ b/arch/s390/pci/pci_event.c
> @@ -288,6 +288,12 @@ static void zpci_event_io_failure(struct pci_dev *pdev, pci_channel_state_t es)
> pci_dev_unlock(pdev);
> }
>
> +static void __zpci_event_print_error(struct pci_dev *pdev, struct zpci_ccdf_err *ccdf)
> +{
> + pr_err("%s: Event 0x%x reports an error for PCI function 0x%x\n",
> + pdev ? pci_name(pdev) : "n/a", ccdf->pec, ccdf->fid);
> +}
> +
> static void __zpci_event_error(struct zpci_ccdf_err *ccdf)
> {
> struct zpci_dev *zdev = get_zdev_by_fid(ccdf->fid);
> @@ -301,24 +307,24 @@ static void __zpci_event_error(struct zpci_ccdf_err *ccdf)
> zpci_err("error CCDF:\n");
> zpci_err_hex(ccdf, sizeof(*ccdf));
>
> - if (zdev) {
> - mutex_lock(&zdev->state_lock);
> - rc = clp_refresh_fh(zdev->fid, &fh);
> - if (rc)
> - goto no_pdev;
> - if (!fh || ccdf->fh != fh) {
> - /* Ignore events with stale handles */
> - zpci_dbg(3, "err fid:%x, fh:%x (stale %x)\n",
> - ccdf->fid, fh, ccdf->fh);
> - goto no_pdev;
> - }
> - zpci_update_fh(zdev, ccdf->fh);
> - if (zdev->zbus->bus)
> - pdev = pci_get_slot(zdev->zbus->bus, zdev->devfn);
> - }
> + if (!zdev)
> + return __zpci_event_print_error(pdev, ccdf);
Nit: Here pdev is always NULL because the assignment moved below.
Functionally this is fine but it would be more clear this is the case
if you passed NULL for pdev explicitly.
>
> - pr_err("%s: Event 0x%x reports an error for PCI function 0x%x\n",
> - pdev ? pci_name(pdev) : "n/a", ccdf->pec, ccdf->fid);
> + mutex_lock(&zdev->state_lock);
> + rc = clp_refresh_fh(zdev->fid, &fh);
> + if (rc)
> + goto no_pdev;
> + if (!fh || ccdf->fh != fh) {
> + /* Ignore events with stale handles */
> + zpci_dbg(3, "err fid:%x, fh:%x (stale %x)\n",
> + ccdf->fid, fh, ccdf->fh);
> + goto no_pdev;
> + }
> + zpci_update_fh(zdev, ccdf->fh);
> + if (zdev->zbus->bus)
> + pdev = pci_get_slot(zdev->zbus->bus, zdev->devfn);
> +
> + __zpci_event_print_error(pdev, ccdf);
>
> if (!pdev)
> goto no_pdev;
> @@ -340,8 +346,7 @@ static void __zpci_event_error(struct zpci_ccdf_err *ccdf)
> }
> pci_dev_put(pdev);
> no_pdev:
> - if (zdev)
> - mutex_unlock(&zdev->state_lock);
> + mutex_unlock(&zdev->state_lock);
> zpci_zdev_put(zdev);
> }
>
Thanks for cleaning this up. Even on its own this would be a net
improvement. So with or without my nit resolved feel free to add:
Reviewed-by: Niklas Schnelle <schnelle@linux.ibm.com>
Thanks,
Niklas
next prev parent reply other threads:[~2026-08-03 16:41 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-03 14:29 [PATCH v2 0/3] s390/pci: Enable CONTEXT_ANALYSIS Heiko Carstens
2026-08-03 14:29 ` [PATCH v2 1/3] s390/pci: Rework __zpci_event_error() to remove conditional locking Heiko Carstens
2026-08-03 16:40 ` Niklas Schnelle [this message]
2026-08-03 14:29 ` [PATCH v2 2/3] s390/pci: Rework__zpci_event_availability() " Heiko Carstens
2026-08-05 11:32 ` Niklas Schnelle
2026-08-05 12:43 ` Heiko Carstens
2026-08-03 14:29 ` [PATCH v2 3/3] s390/pci: Enable CONTEXT_ANALYSIS Heiko Carstens
2026-08-05 13:22 ` Niklas Schnelle
2026-08-03 14:55 ` [PATCH v2 0/3] " Niklas Schnelle
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=cbcdabac9c84252aabfaf1adda139652711de9a6.camel@linux.ibm.com \
--to=schnelle@linux.ibm.com \
--cc=agordeev@linux.ibm.com \
--cc=borntraeger@linux.ibm.com \
--cc=gbayer@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=svens@linux.ibm.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
all inboxes | Powered by JetHome®