mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "tip-bot2 for Thomas Gleixner" <tip-bot2@linutronix.de>
To: linux-tip-commits@vger.kernel.org
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Bjorn Helgaas <bhelgaas@google.com>,
	x86@kernel.org, linux-kernel@vger.kernel.org
Subject: [tip: irq/msi] PCI/TPH: Replace the broken MSI-X control word update
Date: Mon, 07 Apr 2025 14:31:41 -0000	[thread overview]
Message-ID: <174403630104.31282.14145727341805273040.tip-bot2@tip-bot2> (raw)
In-Reply-To: <20250319105506.744271447@linutronix.de>

The following commit has been merged into the irq/msi branch of tip:

Commit-ID:     a822d6e2d5228e45b6d03680b1a92b295864b285
Gitweb:        https://git.kernel.org/tip/a822d6e2d5228e45b6d03680b1a92b295864b285
Author:        Thomas Gleixner <tglx@linutronix.de>
AuthorDate:    Wed, 19 Mar 2025 11:56:58 +01:00
Committer:     Thomas Gleixner <tglx@linutronix.de>
CommitterDate: Mon, 07 Apr 2025 16:24:56 +02:00

PCI/TPH: Replace the broken MSI-X control word update

The driver walks the MSI descriptors to test whether a descriptor exists
for a given index. That's just abuse of the MSI internals.

The same test can be done with a single function call by looking up whether
there is a Linux interrupt number assigned at the index.

What's worse is that the function is completely unserialized against
modifications of the MSI-X control by operations issued from the interrupt
core. It also brings the PCI/MSI-X internal cached control word out of
sync.

Remove the trainwreck and invoke the function provided by the PCI/MSI core
to update it.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Link: https://lore.kernel.org/all/20250319105506.744271447@linutronix.de




---
 drivers/pci/tph.c | 44 +-------------------------------------------
 1 file changed, 1 insertion(+), 43 deletions(-)

diff --git a/drivers/pci/tph.c b/drivers/pci/tph.c
index 07de59c..77fce5e 100644
--- a/drivers/pci/tph.c
+++ b/drivers/pci/tph.c
@@ -204,48 +204,6 @@ static u8 get_rp_completer_type(struct pci_dev *pdev)
 	return FIELD_GET(PCI_EXP_DEVCAP2_TPH_COMP_MASK, reg);
 }
 
-/* Write ST to MSI-X vector control reg - Return 0 if OK, otherwise -errno */
-static int write_tag_to_msix(struct pci_dev *pdev, int msix_idx, u16 tag)
-{
-#ifdef CONFIG_PCI_MSI
-	struct msi_desc *msi_desc = NULL;
-	void __iomem *vec_ctrl;
-	u32 val;
-	int err = 0;
-
-	msi_lock_descs(&pdev->dev);
-
-	/* Find the msi_desc entry with matching msix_idx */
-	msi_for_each_desc(msi_desc, &pdev->dev, MSI_DESC_ASSOCIATED) {
-		if (msi_desc->msi_index == msix_idx)
-			break;
-	}
-
-	if (!msi_desc) {
-		err = -ENXIO;
-		goto err_out;
-	}
-
-	/* Get the vector control register (offset 0xc) pointed by msix_idx */
-	vec_ctrl = pdev->msix_base + msix_idx * PCI_MSIX_ENTRY_SIZE;
-	vec_ctrl += PCI_MSIX_ENTRY_VECTOR_CTRL;
-
-	val = readl(vec_ctrl);
-	val &= ~PCI_MSIX_ENTRY_CTRL_ST;
-	val |= FIELD_PREP(PCI_MSIX_ENTRY_CTRL_ST, tag);
-	writel(val, vec_ctrl);
-
-	/* Read back to flush the update */
-	val = readl(vec_ctrl);
-
-err_out:
-	msi_unlock_descs(&pdev->dev);
-	return err;
-#else
-	return -ENODEV;
-#endif
-}
-
 /* Write tag to ST table - Return 0 if OK, otherwise -errno */
 static int write_tag_to_st_table(struct pci_dev *pdev, int index, u16 tag)
 {
@@ -346,7 +304,7 @@ int pcie_tph_set_st_entry(struct pci_dev *pdev, unsigned int index, u16 tag)
 
 	switch (loc) {
 	case PCI_TPH_LOC_MSIX:
-		err = write_tag_to_msix(pdev, index, tag);
+		err = pci_msix_write_tph_tag(pdev, index, tag);
 		break;
 	case PCI_TPH_LOC_CAP:
 		err = write_tag_to_st_table(pdev, index, tag);

  reply	other threads:[~2025-04-07 14:31 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-19 10:56 [patch V4 00/14] genirq/msi: Spring cleaning Thomas Gleixner
2025-03-19 10:56 ` [patch V4 01/14] cleanup: Provide retain_ptr() Thomas Gleixner
2025-03-19 20:15   ` James Bottomley
2025-04-07 14:31   ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2025-04-09 18:54   ` [tip: irq/msi] cleanup: Provide retain_and_null_ptr() tip-bot2 for Thomas Gleixner
2025-03-19 10:56 ` [patch V4 02/14] genirq/msi: Use lock guards for MSI descriptor locking Thomas Gleixner
2025-04-07 14:31   ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2025-04-09 18:54   ` tip-bot2 for Thomas Gleixner
2025-03-19 10:56 ` [patch V4 03/14] soc: ti: ti_sci_inta_msi: Switch MSI descriptor locking to guard() Thomas Gleixner
2025-04-07 14:31   ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2025-04-09 18:54   ` tip-bot2 for Thomas Gleixner
2025-03-19 10:56 ` [patch V4 04/14] NTB/msi: Switch MSI descriptor locking to lock guard() Thomas Gleixner
2025-04-07 14:31   ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2025-04-09 18:54   ` tip-bot2 for Thomas Gleixner
2025-03-19 10:56 ` [patch V4 05/14] PCI/MSI: Use guard(msi_desc_lock) where applicable Thomas Gleixner
2025-03-19 17:08   ` Bjorn Helgaas
2025-04-07 14:31   ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2025-04-09 18:54   ` tip-bot2 for Thomas Gleixner
2025-03-19 10:56 ` [patch V4 06/14] PCI/MSI: Set pci_dev::msi_enabled late Thomas Gleixner
2025-03-19 17:08   ` Bjorn Helgaas
2025-04-07 14:31   ` [tip: irq/msi] PCI/MSI: Set pci_dev:: Msi_enabled late tip-bot2 for Thomas Gleixner
2025-04-09 18:54   ` tip-bot2 for Thomas Gleixner
2025-03-19 10:56 ` [patch V4 07/14] PCI/MSI: Use __free() for affinity masks Thomas Gleixner
2025-03-19 17:09   ` Bjorn Helgaas
2025-04-07 14:31   ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2025-04-09 18:54   ` tip-bot2 for Thomas Gleixner
2025-03-19 10:56 ` [patch V4 08/14] PCI/MSI: Switch msi_capability_init() to guard(msi_desc_lock) Thomas Gleixner
2025-03-19 17:09   ` Bjorn Helgaas
2025-04-07 14:31   ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2025-04-09 18:54   ` tip-bot2 for Thomas Gleixner
2025-03-19 10:56 ` [patch V4 09/14] PCI/MSI: Switch msix_capability_init() " Thomas Gleixner
2025-03-19 17:09   ` Bjorn Helgaas
2025-04-07 14:31   ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2025-04-08 12:04   ` commit 7b025f3f85ed causes NULL pointer dereference Bert Karwatzki
2025-04-08 15:09     ` Thomas Gleixner
2025-04-08 15:29       ` Thomas Gleixner
2025-04-08 16:20         ` Bert Karwatzki
2025-04-08 20:22           ` Klara Modin
2025-04-08 20:46           ` Thomas Gleixner
2025-04-09 11:44             ` Aithal, Srikanth
2025-04-09 11:49             ` Andy Shevchenko
2025-04-09 12:49             ` James Bottomley
2025-04-09 18:38               ` Thomas Gleixner
2025-04-09 15:22             ` Venkat Rao Bagalkote
2025-04-09 18:29             ` Borislav Petkov
2025-04-09 18:54   ` [tip: irq/msi] PCI/MSI: Switch msix_capability_init() to guard(msi_desc_lock) tip-bot2 for Thomas Gleixner
2025-03-19 10:56 ` [patch V4 10/14] PCI: hv: Switch MSI descriptor locking to guard() Thomas Gleixner
2025-04-07 14:31   ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2025-04-09 18:54   ` tip-bot2 for Thomas Gleixner
2025-03-19 10:56 ` [patch V4 11/14] PCI/MSI: Provide a sane mechanism for TPH Thomas Gleixner
2025-04-07 14:31   ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2025-04-09 18:54   ` tip-bot2 for Thomas Gleixner
2025-06-17 23:22   ` [patch V4 11/14] " Bjorn Helgaas
2025-06-17 23:25     ` Bjorn Helgaas
2025-03-19 10:56 ` [patch V4 12/14] PCI/TPH: Replace the broken MSI-X control word update Thomas Gleixner
2025-04-07 14:31   ` tip-bot2 for Thomas Gleixner [this message]
2025-04-09 18:54   ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2025-03-19 10:57 ` [patch V4 13/14] scsi: ufs: qcom: Remove the MSI descriptor abuse Thomas Gleixner
2025-03-19 20:40   ` James Bottomley
2025-04-07 14:31   ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2025-04-09 18:54   ` tip-bot2 for Thomas Gleixner
2025-03-19 10:57 ` [patch V4 14/14] genirq/msi: Rename msi_[un]lock_descs() Thomas Gleixner
2025-04-07 14:31   ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2025-04-09 18:54   ` tip-bot2 for Thomas Gleixner

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=174403630104.31282.14145727341805273040.tip-bot2@tip-bot2 \
    --to=tip-bot2@linutronix.de \
    --cc=bhelgaas@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.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

all inboxes | Powered by JetHome®