From: Damien Le Moal <dlemoal@kernel.org>
To: Tomas Henzl <thenzl@redhat.com>, linux-ide@vger.kernel.org
Cc: Niklas.Cassel@wdc.com
Subject: Re: [PATCH V3] ata: ahci: simplify init function
Date: Wed, 15 Jan 2025 11:30:01 +0900 [thread overview]
Message-ID: <0e2a0f69-7b98-4b48-8a68-6a554cbbec09@kernel.org> (raw)
In-Reply-To: <20250114182956.40923-1-thenzl@redhat.com>
On 1/15/25 03:29, Tomas Henzl wrote:
> by removing few lines. No functional change.
>
> The main part of this change is done by adding a PCI_IRQ_INTX flag into
> an already existing pci_alloc_irq_vectors invocation.
> In the current implementation of the pci_alloc_irq_vectors is the sequence of calls
> msi-x -> msi -> legacy irq and whatever there succeeds stops the
> call chain. That makes it impossible to merge all instances into as a single call
> to pci_alloc_irq_vectors since the order of calls there is:
> multiple msi-x
> a single msi
> a single msi-x
> a legacy irq.
> but the two last steps can be merged into one which are the msi-x and legacy
> irq option. With this change we remove a pci(m)_intx call.
> When PCI_IRQ_INTX flag is set the pci_alloc_irq_vectors succeeds in almost
> all cases - that makes it possible to convert ahci_init_irq(msi) into a void function.
> The exception is when dev->irq is zero then the pci_alloc_irq_vectors
> may return with an error code also pci_intx isn't called from pci_alloc_irq_vectors
> and thus certain pci calls aren't performed.
> That's just a negligible issue as later in ahci_init_one the (zero)
> value of dev->irq is via pci_irq_vector assigned to hpriv->irq.
> That value is then later tested in ahci_host_activate->ata_host_activate where
> it is welcomed with a WARN_ON message and fails with setting up irq and
> then the probe function (ahci_init_one) fails. The special zero value's
> meaning is that polling mode is being be set up which isn't the case.
>
Extra blank line not need here.
Beside that, looks OK now. But as Niklas pointed out, this conflicts with a
patch in the PCI tree. And given that it is too late to queue that for 6.14, can
you resend a rebased version once 6.14-rc1 is out in a couple of weeks ?
Thanks !
>
> Signed-off-by: Tomas Henzl <thenzl@redhat.com>
> ---
> V2: ahci_init_irq is now a void function
> V3: a) added an explanation of why we may convert ahci_init_irq into
> a void function
> b) fixed the subject line
> c) added an explanation of why calling pci_alloc_irq_vectors instead
> of pci_intx is safe
> d) rebased to latest code state (pci_intx->pcim_intx)
>
> drivers/ata/ahci.c | 23 ++++++++++++-----------
> 1 file changed, 12 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
> index 8d27c567be1c..3ea2f3adf354 100644
> --- a/drivers/ata/ahci.c
> +++ b/drivers/ata/ahci.c
> @@ -1665,13 +1665,15 @@ static int ahci_get_irq_vector(struct ata_host *host, int port)
> return pci_irq_vector(to_pci_dev(host->dev), port);
> }
>
> -static int ahci_init_msi(struct pci_dev *pdev, unsigned int n_ports,
> +static void ahci_init_irq(struct pci_dev *pdev, unsigned int n_ports,
> struct ahci_host_priv *hpriv)
> {
> int nvec;
>
> - if (hpriv->flags & AHCI_HFLAG_NO_MSI)
> - return -ENODEV;
> + if (hpriv->flags & AHCI_HFLAG_NO_MSI) {
> + pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_INTX);
> + return;
> + }
>
> /*
> * If number of MSIs is less than number of ports then Sharing Last
> @@ -1685,7 +1687,7 @@ static int ahci_init_msi(struct pci_dev *pdev, unsigned int n_ports,
> if (!(readl(hpriv->mmio + HOST_CTL) & HOST_MRSM)) {
> hpriv->get_irq_vector = ahci_get_irq_vector;
> hpriv->flags |= AHCI_HFLAG_MULTI_MSI;
> - return nvec;
> + return;
> }
>
> /*
> @@ -1700,12 +1702,13 @@ static int ahci_init_msi(struct pci_dev *pdev, unsigned int n_ports,
>
> /*
> * If the host is not capable of supporting per-port vectors, fall
> - * back to single MSI before finally attempting single MSI-X.
> + * back to single MSI before finally attempting single MSI-X or
> + * a legacy INTx.
> */
> nvec = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSI);
> if (nvec == 1)
> - return nvec;
> - return pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSIX);
> + return;
> + pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSIX | PCI_IRQ_INTX);
> }
>
> static void ahci_mark_external_port(struct ata_port *ap)
> @@ -1985,10 +1988,8 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
> }
> host->private_data = hpriv;
>
> - if (ahci_init_msi(pdev, n_ports, hpriv) < 0) {
> - /* legacy intx interrupts */
> - pcim_intx(pdev, 1);
> - }
> + ahci_init_irq(pdev, n_ports, hpriv);
> +
> hpriv->irq = pci_irq_vector(pdev, 0);
>
> if (!(hpriv->cap & HOST_CAP_SSS) || ahci_ignore_sss)
--
Damien Le Moal
Western Digital Research
next prev parent reply other threads:[~2025-01-15 2:30 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-14 18:29 [PATCH V3] ata: ahci: simplify init function Tomas Henzl
2025-01-15 2:30 ` Damien Le Moal [this message]
2025-01-15 15:08 ` Tomas Henzl
2025-03-17 14:00 ` Tomas Henzl
2025-03-17 14:28 ` Niklas Cassel
2025-03-18 8:01 ` Niklas Cassel
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=0e2a0f69-7b98-4b48-8a68-6a554cbbec09@kernel.org \
--to=dlemoal@kernel.org \
--cc=Niklas.Cassel@wdc.com \
--cc=linux-ide@vger.kernel.org \
--cc=thenzl@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.