Re: [PATCH 06/13] qla4xxx: Prevent other port reinitialization during remove_adapter

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 03/15/2011 04:21 AM, Vikas Chaudhary wrote:
-----Original Message-----
From: linux-scsi-owner@xxxxxxxxxxxxxxx [mailto:linux-scsi-
owner@xxxxxxxxxxxxxxx] On Behalf Of Mike Christie
Sent: Tuesday, March 15, 2011 3:37 AM
To: Vikas Chaudhary
Cc: James Bottomley; linux-scsi@xxxxxxxxxxxxxxx; Ravi Anand; Lalit
Chandivade; Karen Higgins
Subject: Re: [PATCH 06/13] qla4xxx: Prevent other port reinitialization
during remove_adapter

On 03/14/2011 12:24 AM, Vikas Chaudhary wrote:
index 6068f80..59c5552 100644
--- a/drivers/scsi/qla4xxx/ql4_os.c
+++ b/drivers/scsi/qla4xxx/ql4_os.c
@@ -27,6 +27,11 @@ static char qla4xxx_version_str[40];
   static struct kmem_cache *srb_cachep;

   /*
+ * List of host adapters
+ */
+static struct klist qla4xxx_hostlist;
+




   /**
+ * qla4xxx_prevent_other_port_reinit - Mark the other ISP-4xxx port to
indicate
+ * that the driver is being removed, so that the other port will not
+ * re-initialize while in the process of removing the ha due to driver
unload
+ * or hba hotplug.

For docbook comments you use a one line description on the first line,
then add more informative stuff after the params.


Ok, I will be sending updated patch in next email.


+ * @ha: pointer to adapter structure
+ **/
+static void qla4xxx_prevent_other_port_reinit(struct scsi_qla_host *ha)
+{
+       struct scsi_qla_host *ha_listp;
+       struct klist_iter i;
+       struct klist_node *n;
+
+       klist_iter_init(&qla4xxx_hostlist,&i);
+       while ((n = klist_next(&i)) != NULL) {
+               ha_listp = container_of(n, struct scsi_qla_host, node);
+               if (ha == ha_listp)
+                       continue;
+
+               if ((pci_domain_nr(ha->pdev->bus) ==
+                   pci_domain_nr(ha_listp->pdev->bus))&&
+                   (ha->pdev->bus->number ==
+                   ha_listp->pdev->bus->number)&&
+                   (PCI_SLOT(ha->pdev->devfn) ==
+                   PCI_SLOT(ha_listp->pdev->devfn))) {
+

Is there a qla4xxx specific reason why you need to prevent other ports
from re-initing when removing a port? Does the hardware cause the other
ports to be disrupted and that causes them to run the re-init code?

Yes, its ISP40XX specific. While unloading driver we make call to function
"qla4xxx_hw_reset" from "qla4xxx_free_adapter". When driver do hw_reset
for one port, hardware will generate interrupt for other ports to inform
reset is about to happen. After this interrupt driver will schedule reset
for other port by setting dpc flag "DPC_RESET_HA_INTR" in function
"qla4xxx_intr_handler" this will cause re-initialization of other port
after reset, but while unloading driver we don't want to schedule reset
for the other port as other port does not need re-initialization".


Ok.

I think that the driver should not be needing to manage a list of hosts though. We have the driver model related lists already. There is also the pci bus stuff. So I think you should be using one of those.
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux