Linux-NVME Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: guenther@tum.de (Stephan Günther)
Subject: [PATCH 1/1] nvme: temporary fix for Apple NVMe controller reset
Date: Fri, 20 Nov 2015 19:57:06 +0100	[thread overview]
Message-ID: <6ed9ad799884d9d4bdbfbdf94185c3f2@localhost> (raw)

Recent patches added basic support for the Apple NVMe controller but
still cause controller resets and data corruption when a specific
pattern of read/flush commands occurs on that controller.

This patch prevents that and was tested for a weeek by myself running
4.4-rc1. It is also confirmed to work around that problem by at least
one other guy.

Maybe this hotfix can be done in a more elegant way, but something
like that should definitely go into 4.4 as the controller will otherwise
destroy file systems.


Signed-off-by: Stephan G?nther <guenther at tum.de>
Signed-off-by: Maurice Leclaure <leclaire at in.tum.de
---
 drivers/nvme/host/pci.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
index 8187df2..15bbedb 100644
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
@@ -2701,6 +2701,14 @@ static int nvme_dev_map(struct nvme_dev *dev)
 	dev->q_depth = min_t(int, NVME_CAP_MQES(cap) + 1, NVME_Q_DEPTH);
 	dev->db_stride = 1 << NVME_CAP_STRIDE(cap);
 	dev->dbs = ((void __iomem *)dev->bar) + 4096;
+
+	/*
+	 * Temporary fix for the Apple controller found in the MacBook8,1 and
+	 * some MacBook7,1 to avoid controller resets and data loss.
+	 */
+	if (pdev->vendor == PCI_VENDOR_ID_APPLE && pdev->device == 0x2001)
+		dev->q_depth = 2;
+
 	if (readl(&dev->bar->vs) >= NVME_VS(1, 2))
 		dev->cmb = nvme_map_cmb(dev);

             reply	other threads:[~2015-11-20 18:57 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-20 18:57 Stephan Günther [this message]
2015-11-21  8:20 ` [PATCH 1/1] nvme: temporary fix for Apple NVMe controller reset Christoph Hellwig
2015-11-21 12:16   ` Stephan Günther

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=6ed9ad799884d9d4bdbfbdf94185c3f2@localhost \
    --to=guenther@tum.de \
    /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