linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alexander Gordeev <agordeev@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: x86@kernel.org, linux-pci@vger.kernel.org,
	linux-ide@vger.kernel.org, Tejun Heo <tj@kernel.org>,
	Ingo Molnar <mingo@kernel.org>, Joerg Roedel <joro@8bytes.org>,
	Jan Beulich <JBeulich@suse.com>,
	Bjorn Helgaas <bhelgaas@google.com>
Subject: [PATCH v2 5/6] AHCI: Check MRSM bit when multiple MSIs enabled
Date: Thu, 5 Sep 2013 14:54:17 +0200	[thread overview]
Message-ID: <4bc31d6ccf3f84399b977fe8ed4fe77aadfa1c79.1378383792.git.agordeev@redhat.com> (raw)
In-Reply-To: <cover.1378383792.git.agordeev@redhat.com>

Do not trust the hardware and always check if MSI
Revert to Single Message mode was enforced. Fall
back to the single MSI mode in case it did. Not
doing so might screw up the interrupt handling.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 drivers/ata/ahci.c |   16 ++++++++++++++++
 drivers/ata/ahci.h |    1 +
 2 files changed, 17 insertions(+), 0 deletions(-)

diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index a6bb618..af5d535 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -1091,6 +1091,14 @@ static inline void ahci_gtf_filter_workaround(struct ata_host *host)
 {}
 #endif
 
+static int ahci_get_mrsm(struct ahci_host_priv *hpriv)
+{
+	void __iomem *mmio = hpriv->mmio;
+	u32 ctl = readl(mmio + HOST_CTL);
+
+	return (ctl & HOST_MRSM);
+}
+
 int ahci_init_interrupts(struct pci_dev *pdev, unsigned int n_ports,
 			 struct ahci_host_priv *hpriv)
 {
@@ -1111,6 +1119,14 @@ int ahci_init_interrupts(struct pci_dev *pdev, unsigned int n_ports,
 		goto intx;
 	if (rc)
 		goto single_msi;
+	if (maxvec == 1)
+		return 1;
+
+	if (ahci_get_mrsm(hpriv)) {
+		pci_disable_msi(pdev);
+		printk(KERN_INFO "ahci: MRSM is on, fallback to single MSI\n");
+		goto single_msi;
+	}
 
 	return maxvec;
 
diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h
index 1145637..19bc846 100644
--- a/drivers/ata/ahci.h
+++ b/drivers/ata/ahci.h
@@ -91,6 +91,7 @@ enum {
 	/* HOST_CTL bits */
 	HOST_RESET		= (1 << 0),  /* reset controller; self-clear */
 	HOST_IRQ_EN		= (1 << 1),  /* global IRQ enable */
+	HOST_MRSM		= (1 << 2),  /* MSI Revert to Single Message */
 	HOST_AHCI_EN		= (1 << 31), /* AHCI enabled */
 
 	/* HOST_CAP bits */
-- 
1.7.7.6


-- 
Regards,
Alexander Gordeev
agordeev@redhat.com

  parent reply	other threads:[~2013-09-05 12:54 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-05 12:51 [PATCH v2 0/6] AHCI: Conserve interrupts with pci_enable_msi_block_part() interface Alexander Gordeev
2013-09-05 12:52 ` [PATCH v2 1/6] PCI/MSI: Introduce " Alexander Gordeev
2013-09-05 12:52 ` [PATCH v2 2/6] PCI/MSI: Factor out pci_get_msi_cap() interface Alexander Gordeev
2013-09-05 13:09   ` Tejun Heo
2013-09-05 15:03     ` Alexander Gordeev
2013-09-05 15:04       ` Tejun Heo
2013-09-05 15:40         ` Alexander Gordeev
2013-09-05 15:44           ` Tejun Heo
2013-09-05 18:54             ` Alexander Gordeev
2013-09-05 20:06               ` Tejun Heo
2013-09-06 16:01                 ` Bjorn Helgaas
2013-09-06 16:06                   ` Tejun Heo
2013-09-06 23:32                     ` Bjorn Helgaas
2013-09-09 15:20                       ` Alexander Gordeev
2013-09-09 15:22                         ` [PATCH 1/9] PCI/MSI/PPC: Fix wrong RTAS error code reporting Alexander Gordeev
2013-09-09 15:22                         ` [PATCH 2/9] PCI/MSI/PPC: Make return values only 0/-errno when MSIs allocated Alexander Gordeev
2013-09-09 15:24                         ` [PATCH 3/9] PCI/MSI/x86: " Alexander Gordeev
2013-09-09 15:24                         ` [PATCH 4/9] PCI/MSI/MIPS: " Alexander Gordeev
2013-09-09 15:25                         ` [PATCH 2/9] PCI/MSI/PPC: Make return values only 0/-errno when MSIs allocated[PATCH 5/9] PCI/MSI/s390: " Alexander Gordeev
2013-09-09 15:38                           ` scrap this one Alexander Gordeev
2013-09-09 15:26                         ` [PATCH 5/9] PCI/MSI/s390: Make return values only 0/-errno when MSIs allocated Alexander Gordeev
2013-09-10 12:42                           ` Sergei Shtylyov
2013-09-10 13:09                             ` Alexander Gordeev
2013-09-09 15:27                         ` [PATCH 6/9] PCI/MSI/s390: Remove superfluous check of MSI type Alexander Gordeev
2013-09-09 15:28                         ` [PATCH 7/9] PCI/MSI/s390: Make return values only 0/-errno when MSIs allocated Alexander Gordeev
2013-09-09 15:29                         ` [PATCH 8/9] PCI/MSI: Fix return value when populate_msi_sysfs() failed Alexander Gordeev
2013-09-09 15:29                         ` [PATCH 9/9] PCI/MSI: Make return values only 0/-errno when MSIs allocated Alexander Gordeev
2013-09-09 15:37                         ` [PATCH v2 2/6] PCI/MSI: Factor out pci_get_msi_cap() interface Tejun Heo
2013-09-09 15:45                           ` Alexander Gordeev
2013-09-16 10:22                         ` Alexander Gordeev
2013-09-17 14:30                           ` Michael Ellerman
2013-09-18  9:48                             ` Alexander Gordeev
2013-09-18 14:22                               ` Tejun Heo
2013-09-18 16:50                                 ` Alexander Gordeev
2013-09-20  8:24                                   ` Alexander Gordeev
2013-09-20 12:27                                     ` Tejun Heo
2013-09-25 18:02                                       ` Bjorn Helgaas
2013-09-25 20:58                                         ` Alexander Gordeev
2013-09-25 21:00                                           ` Tejun Heo
2013-09-26  7:46                                             ` Alexander Gordeev
2013-09-26  8:58                                               ` David Laight
2013-09-26 10:45                                                 ` Alexander Gordeev
2013-09-26 11:34                                                   ` David Laight
2013-09-26 12:13                                                     ` Alexander Gordeev
2013-09-26 13:11                                               ` Tejun Heo
2013-09-26 14:39                                                 ` Alexander Gordeev
2013-09-26 14:42                                                   ` Tejun Heo
2013-10-01  7:19                                                   ` Michael Ellerman
2013-09-20 12:26                                   ` Tejun Heo
2013-10-01  7:26                                     ` Michael Ellerman
2013-10-01  7:35                                 ` Michael Ellerman
2013-10-01 11:55                                   ` Tejun Heo
2013-10-02  2:33                                     ` Michael Ellerman
2013-10-02  3:23                                       ` Tejun Heo
2013-09-26 12:32                               ` Mark Lord
2013-09-26 13:03                                 ` Alexander Gordeev
2013-10-02  2:46                                   ` Mark Lord
2013-10-02  7:26                                     ` Alexander Gordeev
2013-12-18 18:26                                 ` Bjorn Helgaas
2013-10-01  7:51                               ` Michael Ellerman
2013-10-01 10:35                                 ` Alexander Gordeev
2013-10-02  2:43                                   ` Michael Ellerman
2013-10-02  7:10                                     ` Alexander Gordeev
2013-09-06 13:17           ` Alexander Gordeev
2013-09-05 12:53 ` [PATCH v2 3/6] MSI/x86: Support pci_enable_msi_block_part() interface Alexander Gordeev
2013-09-05 12:53 ` [PATCH v2 4/6] AHCI: Conserve interrupts with " Alexander Gordeev
2013-09-05 13:10   ` Tejun Heo
2013-09-05 15:23     ` Alexander Gordeev
2013-09-05 12:54 ` Alexander Gordeev [this message]
2013-09-05 13:11   ` [PATCH v2 5/6] AHCI: Check MRSM bit when multiple MSIs enabled Tejun Heo
2013-09-05 15:25     ` Alexander Gordeev
2013-09-05 14:32   ` Sergei Shtylyov
2013-09-05 12:54 ` [PATCH v2 6/6] PCI/MSI: Get rid of pci_enable_msi_block_auto() interface Alexander Gordeev

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=4bc31d6ccf3f84399b977fe8ed4fe77aadfa1c79.1378383792.git.agordeev@redhat.com \
    --to=agordeev@redhat.com \
    --cc=JBeulich@suse.com \
    --cc=bhelgaas@google.com \
    --cc=joro@8bytes.org \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=tj@kernel.org \
    --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;
as well as URLs for NNTP newsgroup(s).