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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.