public inbox for linux-wireless@vger.kernel.org
 help / color / mirror / Atom feed
From: Bjorn Helgaas <helgaas@kernel.org>
To: Dmitry Antipov <dmantipov@yandex.ru>
Cc: Hante Meuleman <hante.meuleman@broadcom.com>,
	brcm80211-dev-list.pdl@broadcom.com,
	linux-wireless@vger.kernel.org, Kalle Valo <kvalo@kernel.org>,
	lvc-project@linuxtesting.org
Subject: Re: [PATCH 2/2] [v2] wifi: brcmfmac: handle possible MSI enabling error
Date: Fri, 19 Jan 2024 15:24:02 -0600	[thread overview]
Message-ID: <20240119212402.GA186344@bhelgaas> (raw)
In-Reply-To: <20230614075848.80536-2-dmantipov@yandex.ru>

On Wed, Jun 14, 2023 at 10:58:48AM +0300, Dmitry Antipov wrote:
> Handle possible 'pci_enable_msi()' error in
> 'brcmf_pcie_request_irq()', adjust related code.
> 
> Found by Linux Verification Center (linuxtesting.org) with SVACE.
> 
> Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
> ---
> v2: rebase against wireless-next tree
> ---
>  .../net/wireless/broadcom/brcm80211/brcmfmac/pcie.c  | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
> index 80220685f5e4..f7d9f2cbd60b 100644
> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
> @@ -965,6 +965,7 @@ static irqreturn_t brcmf_pcie_isr_thread(int irq, void *arg)
>  
>  static int brcmf_pcie_request_irq(struct brcmf_pciedev_info *devinfo)
>  {
> +	int ret;
>  	struct pci_dev *pdev = devinfo->pdev;
>  	struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev);
>  
> @@ -972,16 +973,19 @@ static int brcmf_pcie_request_irq(struct brcmf_pciedev_info *devinfo)
>  
>  	brcmf_dbg(PCIE, "Enter\n");
>  
> -	pci_enable_msi(pdev);
> +	ret = pci_enable_msi(pdev);
> +	if (ret)
> +		return ret;

If the device supports INTx and MSI is disabled for some reason
(booted with "pci=nomsi", ACPI_FADT_NO_MSI is set, etc), this change
means the driver would no longer be able to fall back to using INTx.

If you want to go to the trouble of changing this code, you could
consider using the new APIs:

  ret = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_ALL_TYPES);
  if (ret < 0)
    return ret;

  if (request_threaded_irq(pdev->irq, ...)) {
    pci_free_irq_vectors(pdev);
    return -EIO;
  }

plus the appropriate pci_free_irq_vectors() calls in other failure and
remove paths.

See https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/PCI/msi-howto.rst?v6.7#n93

>  	if (request_threaded_irq(pdev->irq, brcmf_pcie_quick_check_isr,
>  				 brcmf_pcie_isr_thread, IRQF_SHARED,
>  				 "brcmf_pcie_intr", devinfo)) {
>  		pci_disable_msi(pdev);
>  		brcmf_err(bus, "Failed to request IRQ %d\n", pdev->irq);
> -		return -EIO;
> +		ret = -EIO;

IMHO this part ("ret = -EIO" and "return ret" below) makes the code
harder to read for no benefit.  The existing code returns -EIO
immediately here and returns 0 below.  It's easier to read that than
to follow the use of "ret".

I guess that's just repeating what Arend already said; sorry, I hadn't
read the whole thread yet.

> +	} else {
> +		devinfo->irq_allocated = true;
>  	}
> -	devinfo->irq_allocated = true;
> -	return 0;
> +	return ret;
>  }
>  
>  
> -- 
> 2.40.1
> 

  parent reply	other threads:[~2024-01-19 21:24 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-14  7:58 [PATCH 1/2] [v2] wifi: brcmfmac: handle possible completion timeouts Dmitry Antipov
2023-06-14  7:58 ` [PATCH 2/2] [v2] wifi: brcmfmac: handle possible MSI enabling error Dmitry Antipov
2024-01-18 12:26   ` Arend van Spriel
2024-01-18 12:31     ` Arend van Spriel
2024-01-19 21:24   ` Bjorn Helgaas [this message]
2024-01-20 12:08     ` Arend Van Spriel
2024-01-18 11:22 ` [PATCH 1/2] [v2] wifi: brcmfmac: handle possible completion timeouts Kalle Valo
2024-01-18 11:57   ` Arend Van Spriel
2024-01-18 12:22 ` Arend van Spriel
2024-01-22 11:57   ` [PATCH 1/2] [v3] " Dmitry Antipov
2024-01-22 11:57     ` [PATCH 2/2] [v3] wifi: brcmfmac: handle possible PCIE irq handling errors Dmitry Antipov
2024-01-22 17:45       ` Arend Van Spriel
2024-01-22 18:20       ` Bjorn Helgaas
2024-01-24  6:22         ` Dmitry Antipov
2024-01-24  7:03           ` Arend Van Spriel
2024-01-24  9:27             ` [PATCH 1/2] [v4] wifi: brcmfmac: handle possible completion timeouts Dmitry Antipov
2024-01-24  9:27               ` [PATCH 2/2] [v4] wifi: brcmfmac: handle possible PCI irq handling errors Dmitry Antipov
2024-01-24 13:33                 ` Bjorn Helgaas
2024-01-25 12:07                   ` [PATCH 0/2] Re: Re: [lvc-project] " Dmitry Antipov
2024-01-25 12:07                     ` [PATCH 1/2] [v4] wifi: brcmfmac: handle possible completion timeouts Dmitry Antipov
2024-01-25 17:32                       ` Arend Van Spriel
2024-01-25 12:07                     ` [PATCH 2/2] [v4] wifi: brcmfmac: handle possible PCI irq handling errors Dmitry Antipov
2024-01-25 17:33                       ` Arend Van Spriel
2024-01-25 17:37                       ` Arend Van Spriel

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=20240119212402.GA186344@bhelgaas \
    --to=helgaas@kernel.org \
    --cc=brcm80211-dev-list.pdl@broadcom.com \
    --cc=dmantipov@yandex.ru \
    --cc=hante.meuleman@broadcom.com \
    --cc=kvalo@kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=lvc-project@linuxtesting.org \
    /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