Re: [PATCH V4 3/9] aacraid: Added EEH support

2016-01-30 Thread kbuild test robot
Hi Raghava,

[auto build test ERROR on scsi/for-next]
[also build test ERROR on v4.5-rc1 next-20160129]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improving the system]

url:
https://github.com/0day-ci/linux/commits/Raghava-Aditya-Renukunta/aacraid-Patchset-for-aacraid-driver-version-41052/20160130-064140
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git for-next
config: tile-allmodconfig (attached as .config)
reproduce:
wget 
https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross
 -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=tile 

All errors (new ones prefixed by >>):

   drivers/scsi/aacraid/linit.c: In function 'aac_pci_error_detected':
>> drivers/scsi/aacraid/linit.c:1544:3: error: implicit declaration of function 
>> 'aac_release_resources'
   drivers/scsi/aacraid/linit.c: In function 'aac_pci_resume':
>> drivers/scsi/aacraid/linit.c:1614:2: error: implicit declaration of function 
>> 'aac_acquire_resources'
   cc1: some warnings being treated as errors

vim +/aac_release_resources +1544 drivers/scsi/aacraid/linit.c

  1538  return PCI_ERS_RESULT_CAN_RECOVER;
  1539  case pci_channel_io_frozen:
  1540  aac->handle_pci_error = 1;
  1541  
  1542  scsi_block_requests(aac->scsi_host_ptr);
  1543  aac_flush_ios(aac);
> 1544  aac_release_resources(aac);
  1545  
  1546  pci_disable_pcie_error_reporting(pdev);
  1547  aac_adapter_ioremap(aac, 0);
  1548  
  1549  return PCI_ERS_RESULT_NEED_RESET;
  1550  case pci_channel_io_perm_failure:
  1551  aac->handle_pci_error = 1;
  1552  
  1553  aac_flush_ios(aac);
  1554  return PCI_ERS_RESULT_DISCONNECT;
  1555  }
  1556  
  1557  return PCI_ERS_RESULT_NEED_RESET;
  1558  }
  1559  
  1560  static pci_ers_result_t aac_pci_mmio_enabled(struct pci_dev *pdev)
  1561  {
  1562  dev_err(>dev, "aacraid: PCI error - mmio enabled\n");
  1563  return PCI_ERS_RESULT_NEED_RESET;
  1564  }
  1565  
  1566  static pci_ers_result_t aac_pci_slot_reset(struct pci_dev *pdev)
  1567  {
  1568  dev_err(>dev, "aacraid: PCI error - slot reset\n");
  1569  pci_restore_state(pdev);
  1570  if (pci_enable_device(pdev)) {
  1571  dev_warn(>dev,
  1572  "aacraid: failed to enable slave\n");
  1573  goto fail_device;
  1574  }
  1575  
  1576  pci_set_master(pdev);
  1577  
  1578  if (pci_enable_device_mem(pdev)) {
  1579  dev_err(>dev, "pci_enable_device_mem failed\n");
  1580  goto fail_device;
  1581  }
  1582  
  1583  return PCI_ERS_RESULT_RECOVERED;
  1584  
  1585  fail_device:
  1586  dev_err(>dev, "aacraid: PCI error - slot reset failed\n");
  1587  return PCI_ERS_RESULT_DISCONNECT;
  1588  }
  1589  
  1590  
  1591  static void aac_pci_resume(struct pci_dev *pdev)
  1592  {
  1593  struct Scsi_Host *shost = pci_get_drvdata(pdev);
  1594  struct scsi_device *sdev = NULL;
  1595  struct aac_dev *aac = (struct aac_dev *)shost_priv(shost);
  1596  
  1597  pci_cleanup_aer_uncorrect_error_status(pdev);
  1598  
  1599  if (aac_adapter_ioremap(aac, aac->base_size)) {
  1600  
  1601  dev_err(>dev, "aacraid: ioremap failed\n");
  1602  /* remap failed, go back ... */
  1603  aac->comm_interface = AAC_COMM_PRODUCER;
  1604  if (aac_adapter_ioremap(aac, AAC_MIN_FOOTPRINT_SIZE)) {
  1605  dev_warn(>dev,
  1606  "aacraid: unable to map adapter.\n");
  1607  
  1608  return;
  1609  }
  1610  }
  1611  
  1612  msleep(1);
  1613  
> 1614  aac_acquire_resources(aac);
  1615  
  1616  /*
  1617   * reset this flag to unblock ioctl() as it was set

---
0-DAY kernel test infrastructureOpen Source Technology Center
https://lists.01.org/pipermail/kbuild-all   Intel Corporation


.config.gz
Description: Binary data


[PATCH V4 3/9] aacraid: Added EEH support

2016-01-29 Thread Raghava Aditya Renukunta
From: Raghava Aditya Renukunta 

Added support for PCI EEH(extended error handling).

Changes in V2:
Made local functions static
Removed call to  aac_fib_free_tag
Set adapter_shutdown flag when PCI error detected

Changes in V3:
None

Changes in V4:
Removed setting of adapter_shutdown flag when \
PCI error detected

Signed-off-by: Raghava Aditya Renukunta 
Reviewed-by: Tomas Henzl 
Reviewed-by: Johannes Thumshirn 
---
 drivers/scsi/aacraid/aacraid.h |   1 +
 drivers/scsi/aacraid/linit.c   | 137 +
 2 files changed, 138 insertions(+)

diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
index fff1306..2916288 100644
--- a/drivers/scsi/aacraid/aacraid.h
+++ b/drivers/scsi/aacraid/aacraid.h
@@ -1235,6 +1235,7 @@ struct aac_dev
struct msix_entry   msixentry[AAC_MAX_MSIX];
struct aac_msix_ctx aac_msix[AAC_MAX_MSIX]; /* context */
u8  adapter_shutdown;
+   u32 handle_pci_error;
 };
 
 #define aac_adapter_interrupt(dev) \
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index 129a515..62ac7be 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -38,6 +38,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -1298,6 +1299,9 @@ static int aac_probe_one(struct pci_dev *pdev, const 
struct pci_device_id *id)
goto out_deinit;
scsi_scan_host(shost);
 
+   pci_enable_pcie_error_reporting(pdev);
+   pci_save_state(pdev);
+
return 0;
 
  out_deinit:
@@ -1501,6 +1505,138 @@ static void aac_remove_one(struct pci_dev *pdev)
}
 }
 
+static void aac_flush_ios(struct aac_dev *aac)
+{
+   int i;
+   struct scsi_cmnd *cmd;
+
+   for (i = 0; i < aac->scsi_host_ptr->can_queue; i++) {
+   cmd = (struct scsi_cmnd *)aac->fibs[i].callback_data;
+   if (cmd && (cmd->SCp.phase == AAC_OWNER_FIRMWARE)) {
+   scsi_dma_unmap(cmd);
+
+   if (aac->handle_pci_error)
+   cmd->result = DID_NO_CONNECT << 16;
+   else
+   cmd->result = DID_RESET << 16;
+
+   cmd->scsi_done(cmd);
+   }
+   }
+}
+
+static pci_ers_result_t aac_pci_error_detected(struct pci_dev *pdev,
+   enum pci_channel_state error)
+{
+   struct Scsi_Host *shost = pci_get_drvdata(pdev);
+   struct aac_dev *aac = shost_priv(shost);
+
+   dev_err(>dev, "aacraid: PCI error detected %x\n", error);
+
+   switch (error) {
+   case pci_channel_io_normal:
+   return PCI_ERS_RESULT_CAN_RECOVER;
+   case pci_channel_io_frozen:
+   aac->handle_pci_error = 1;
+
+   scsi_block_requests(aac->scsi_host_ptr);
+   aac_flush_ios(aac);
+   aac_release_resources(aac);
+
+   pci_disable_pcie_error_reporting(pdev);
+   aac_adapter_ioremap(aac, 0);
+
+   return PCI_ERS_RESULT_NEED_RESET;
+   case pci_channel_io_perm_failure:
+   aac->handle_pci_error = 1;
+
+   aac_flush_ios(aac);
+   return PCI_ERS_RESULT_DISCONNECT;
+   }
+
+   return PCI_ERS_RESULT_NEED_RESET;
+}
+
+static pci_ers_result_t aac_pci_mmio_enabled(struct pci_dev *pdev)
+{
+   dev_err(>dev, "aacraid: PCI error - mmio enabled\n");
+   return PCI_ERS_RESULT_NEED_RESET;
+}
+
+static pci_ers_result_t aac_pci_slot_reset(struct pci_dev *pdev)
+{
+   dev_err(>dev, "aacraid: PCI error - slot reset\n");
+   pci_restore_state(pdev);
+   if (pci_enable_device(pdev)) {
+   dev_warn(>dev,
+   "aacraid: failed to enable slave\n");
+   goto fail_device;
+   }
+
+   pci_set_master(pdev);
+
+   if (pci_enable_device_mem(pdev)) {
+   dev_err(>dev, "pci_enable_device_mem failed\n");
+   goto fail_device;
+   }
+
+   return PCI_ERS_RESULT_RECOVERED;
+
+fail_device:
+   dev_err(>dev, "aacraid: PCI error - slot reset failed\n");
+   return PCI_ERS_RESULT_DISCONNECT;
+}
+
+
+static void aac_pci_resume(struct pci_dev *pdev)
+{
+   struct Scsi_Host *shost = pci_get_drvdata(pdev);
+   struct scsi_device *sdev = NULL;
+   struct aac_dev *aac = (struct aac_dev *)shost_priv(shost);
+
+   pci_cleanup_aer_uncorrect_error_status(pdev);
+
+   if (aac_adapter_ioremap(aac, aac->base_size)) {
+
+   dev_err(>dev, "aacraid: ioremap failed\n");
+   /* remap failed, go back ... */
+   aac->comm_interface = AAC_COMM_PRODUCER;
+   if (aac_adapter_ioremap(aac, AAC_MIN_FOOTPRINT_SIZE)) {
+   dev_warn(>dev,
+