From mboxrd@z Thu Jan 1 00:00:00 1970 From: james_p_freyensee@linux.intel.com (J Freyensee) Date: Fri, 02 Dec 2016 14:19:05 -0800 Subject: [PATCH v2] nvme/pci: Log PCI_STATUS when the controller dies In-Reply-To: References: Message-ID: <1480717145.26702.28.camel@linux.intel.com> On Thu, 2016-12-01@16:42 -0800, Andy Lutomirski wrote: > When debugging nvme controller crashes, it's nice to know whether > the controller died cleanly so that the failure is just reflected in > CSTS, it died and put an error in PCI_STATUS, or whether it died so > badly that it stopped responding to PCI configuration space reads. > > Signed-off-by: Andy Lutomirski > --- > ?drivers/nvme/host/pci.c | 20 ++++++++++++++++---- > ?1 file changed, 16 insertions(+), 4 deletions(-) > > diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c > index 0248d0e21fee..f8dd83be01d9 100644 > --- a/drivers/nvme/host/pci.c > +++ b/drivers/nvme/host/pci.c > @@ -1292,10 +1292,22 @@ static void nvme_watchdog_timer(unsigned long > data) > ? > ? /* Skip controllers under certain specific conditions. */ > ? if (nvme_should_reset(dev, csts)) { > - if (!nvme_reset(dev)) > - dev_warn(dev->dev, > - "Failed status: 0x%x, reset > controller.\n", > - csts); > + if (!nvme_reset(dev)) { > + /* Read a config register to help see what > died. */ > + u16 pci_status; > + int result; > + > + result = > pci_read_config_word(to_pci_dev(dev->dev), > + ??????PCI_STATUS, > &pci_status); > + if (result == PCIBIOS_SUCCESSFUL) > + dev_warn(dev->dev, > + ?"controller is down; will > reset: CSTS=0x%x, PCI_STATUS=0x%hx\n", > + ?csts, pci_status); > + else > + dev_warn(dev->dev, > + ?"controller is down; will > reset: CSTS=0x%x, PCI_STATUS read failed (%d)\n", > + ?csts, result); > + } > ? return; Looks a lot more like what Keith suggested. Reviewed-by: Jay Freyensee