Re: [PATCH v3 2/3] s390/pci: Rework __zpci_event_availability() to remove conditional locking
Niklas Schnelle <[email protected]>
| Newsgroups | org.kernel.vger.linux-s390,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On Wed, 2026-08-05 at 15:36 +0200, Heiko Carstens wrote: > Clang's compiler based static context analysis does not work with locks > that are conditionally taken like in __zpci_event_availability(): > > arch/s390/pci/pci_event.c:402:10: 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_availability() to get rid of this. > > Signed-off-by: Heiko Carstens <[email protected]> > --- > arch/s390/pci/pci_event.c | 162 ++++++++++++++++++++------------------ > 1 file changed, 85 insertions(+), 77 deletions(-) > > diff --git a/arch/s390/pci/pci_event.c b/arch/s390/pci/pci_event.c > index bead4ed5d4ab..0a9eecb62bd1 100644 > --- a/arch/s390/pci/pci_event.c > +++ b/arch/s390/pci/pci_event.c --- snip --- > void zpci_event_availability(void *data) > { > - if (zpci_is_enabled()) > - __zpci_event_availability(data); > + struct zpci_ccdf_avail *ccdf = data; > + struct zpci_dev *zdev; > + > + if (!zpci_is_enabled()) > + return; > + zpci_dbg(3, "avl fid:%x, fh:%x, pec:%x\n", > + ccdf->fid, ccdf->fh, ccdf->pec); > + if (zpci_event_avail_any_device(ccdf)) > + return; > + zdev = get_zdev_by_fid(ccdf->fid); > + if (!zdev) > + return zpci_event_avail_new_device(ccdf); > + mutex_lock(&zdev->state_lock); > + zpci_event_avail_existing_device(zdev, ccdf); > + mutex_unlock(&zdev->state_lock); > + zpci_zdev_put(zdev); > } Thank you, this is exactly what I had in mind! And in my opinion definitely much cleaner than even the original code. Feel free to add: Reviewed-by: Niklas Schnelle <[email protected]> Thanks, Niklas