ESXi-5.5-U2
This commit is contained in:
parent
89a4bb14d0
commit
d6b9b2ac58
17 changed files with 661 additions and 683 deletions
|
@ -1,6 +1,6 @@
|
||||||
#define BUILD_NUMBER "build-1623387"
|
#define BUILD_NUMBER "build-00000"
|
||||||
#define BUILD_NUMBER_NUMERIC 1623387
|
#define BUILD_NUMBER_NUMERIC 00000
|
||||||
#define BUILD_NUMBER_NUMERIC_STRING "1623387"
|
#define BUILD_NUMBER_NUMERIC_STRING "00000"
|
||||||
#define PRODUCT_BUILD_NUMBER "product-build-4950"
|
#define PRODUCT_BUILD_NUMBER "product-build-00000"
|
||||||
#define PRODUCT_BUILD_NUMBER_NUMERIC 4950
|
#define PRODUCT_BUILD_NUMBER_NUMERIC 00000
|
||||||
#define PRODUCT_BUILD_NUMBER_NUMERIC_STRING "4950"
|
#define PRODUCT_BUILD_NUMBER_NUMERIC_STRING "00000"
|
||||||
|
|
1176
build-vmkdrivers.sh
1176
build-vmkdrivers.sh
File diff suppressed because one or more lines are too long
|
@ -1,26 +0,0 @@
|
||||||
<verify>
|
|
||||||
<virtual-infrastructure>
|
|
||||||
<address>10.111.110.45</address>
|
|
||||||
<username>root</username>
|
|
||||||
<password>password</password>
|
|
||||||
<vm type="build">
|
|
||||||
<id>centos-5.3-x64</id>
|
|
||||||
<realname>Rush-CentOS-5.3-x64</realname>
|
|
||||||
<os>linux</os>
|
|
||||||
<username>root</username>
|
|
||||||
<password>welcome</password>
|
|
||||||
</vm>
|
|
||||||
</virtual-infrastructure>
|
|
||||||
<virtual-infrastructure>
|
|
||||||
<address>10.111.110.98</address>
|
|
||||||
<username>root</username>
|
|
||||||
<password>welcome</password>
|
|
||||||
<vm type="install">
|
|
||||||
<id>BDE-Management-Server</id>
|
|
||||||
<realname>management-server</realname>
|
|
||||||
<os>linux</os>
|
|
||||||
<username>root</username>
|
|
||||||
<password>vmware</password>
|
|
||||||
</vm>
|
|
||||||
</virtual-infrastructure>
|
|
||||||
</verify>
|
|
|
@ -1,26 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<disclosure>
|
|
||||||
<name>vmkdrivers</name>
|
|
||||||
<version>gpl</version>
|
|
||||||
<category>VMWsource</category>
|
|
||||||
<build>
|
|
||||||
<target>centos-5.3-x64</target>
|
|
||||||
<files>
|
|
||||||
<file>vmkdrivers-gpl.tgz</file>
|
|
||||||
<file>collect-drivers.sh</file>
|
|
||||||
<file>update-drivers.sh</file>
|
|
||||||
</files>
|
|
||||||
<process>
|
|
||||||
<execute>tar xzf vmkdrivers-gpl.tgz</execute>
|
|
||||||
<execute>sh ./build-vmkdrivers.sh</execute>
|
|
||||||
<execute>mv collect-drivers.sh BLD/build/collect-drivers.sh</execute>
|
|
||||||
<execute>cd BLD/build</execute>
|
|
||||||
<execute>./collect-drivers.sh</execute>
|
|
||||||
</process>
|
|
||||||
<deliveries>
|
|
||||||
<delivery dir="BLD/build">drivers</delivery>
|
|
||||||
<delivery>update-drivers.sh</delivery>
|
|
||||||
</deliveries>
|
|
||||||
<output>centos-5.3-x64</output>
|
|
||||||
</build>
|
|
||||||
</disclosure>
|
|
|
@ -54,7 +54,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define DRV_NAME "ahci"
|
#define DRV_NAME "ahci"
|
||||||
#define DRV_VERSION "3.0-18vmw"
|
#define DRV_VERSION "3.0-20vmw"
|
||||||
|
|
||||||
#if defined(__VMKLNX__)
|
#if defined(__VMKLNX__)
|
||||||
static int ahci_skip_host_reset = 0;
|
static int ahci_skip_host_reset = 0;
|
||||||
|
@ -618,6 +618,12 @@ static const struct pci_device_id ahci_pci_tbl[] = {
|
||||||
{ PCI_VDEVICE(INTEL, 0x2326), board_ahci }, /* Cave Creek AHCI */
|
{ PCI_VDEVICE(INTEL, 0x2326), board_ahci }, /* Cave Creek AHCI */
|
||||||
{ PCI_VDEVICE(INTEL, 0x8c02), board_ahci }, /* Lynx Point AHCI */
|
{ PCI_VDEVICE(INTEL, 0x8c02), board_ahci }, /* Lynx Point AHCI */
|
||||||
{ PCI_VDEVICE(INTEL, 0x8c03), board_ahci }, /* Lynx Point AHCI */
|
{ PCI_VDEVICE(INTEL, 0x8c03), board_ahci }, /* Lynx Point AHCI */
|
||||||
|
{ PCI_VDEVICE(INTEL, 0x8c04), board_ahci }, /* Lynx Point RAID */
|
||||||
|
{ PCI_VDEVICE(INTEL, 0x8c05), board_ahci }, /* Lynx Point RAID */
|
||||||
|
{ PCI_VDEVICE(INTEL, 0x8c06), board_ahci }, /* Lynx Point RAID */
|
||||||
|
{ PCI_VDEVICE(INTEL, 0x8c07), board_ahci }, /* Lynx Point RAID */
|
||||||
|
{ PCI_VDEVICE(INTEL, 0x8c0e), board_ahci }, /* Lynx Point RAID */
|
||||||
|
{ PCI_VDEVICE(INTEL, 0x8c0f), board_ahci }, /* Lynx Point RAID */
|
||||||
{ PCI_VDEVICE(INTEL, 0x1f22), board_ahci }, /* Avoton AHCI */
|
{ PCI_VDEVICE(INTEL, 0x1f22), board_ahci }, /* Avoton AHCI */
|
||||||
{ PCI_VDEVICE(INTEL, 0x1f23), board_ahci }, /* Avoton AHCI */
|
{ PCI_VDEVICE(INTEL, 0x1f23), board_ahci }, /* Avoton AHCI */
|
||||||
{ PCI_VDEVICE(INTEL, 0x1f24), board_ahci }, /* Avoton RAID */
|
{ PCI_VDEVICE(INTEL, 0x1f24), board_ahci }, /* Avoton RAID */
|
||||||
|
@ -645,6 +651,7 @@ static const struct pci_device_id ahci_pci_tbl[] = {
|
||||||
{ PCI_VDEVICE(INTEL, 0x8d64), board_ahci }, /* Wellsburg RAID */
|
{ PCI_VDEVICE(INTEL, 0x8d64), board_ahci }, /* Wellsburg RAID */
|
||||||
{ PCI_VDEVICE(INTEL, 0x8d66), board_ahci }, /* Wellsburg RAID */
|
{ PCI_VDEVICE(INTEL, 0x8d66), board_ahci }, /* Wellsburg RAID */
|
||||||
{ PCI_VDEVICE(INTEL, 0x8d6e), board_ahci }, /* Wellsburg RAID */
|
{ PCI_VDEVICE(INTEL, 0x8d6e), board_ahci }, /* Wellsburg RAID */
|
||||||
|
{ PCI_VDEVICE(INTEL, 0x23a3), board_ahci }, /* Coleto Creek AHCI */
|
||||||
#endif /* defined(__VMKLNX__) */
|
#endif /* defined(__VMKLNX__) */
|
||||||
|
|
||||||
/* JMicron 360/1/3/5/6, match class to avoid IDE function */
|
/* JMicron 360/1/3/5/6, match class to avoid IDE function */
|
||||||
|
|
|
@ -102,7 +102,7 @@
|
||||||
#endif /* defined(__VMKLNX__) */
|
#endif /* defined(__VMKLNX__) */
|
||||||
|
|
||||||
#define DRV_NAME "ata_piix"
|
#define DRV_NAME "ata_piix"
|
||||||
#define DRV_VERSION "2.12-8vmw"
|
#define DRV_VERSION "2.12-10vmw"
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PIIX_IOCFG = 0x54, /* IDE I/O configuration register */
|
PIIX_IOCFG = 0x54, /* IDE I/O configuration register */
|
||||||
|
@ -344,6 +344,10 @@ static const struct pci_device_id piix_pci_tbl[] = {
|
||||||
{ 0x8086, 0x8d60, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb },
|
{ 0x8086, 0x8d60, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb },
|
||||||
/* SATA Controller IDE (Wellsburg) */
|
/* SATA Controller IDE (Wellsburg) */
|
||||||
{ 0x8086, 0x8d68, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
|
{ 0x8086, 0x8d68, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
|
||||||
|
/* SATA Controller IDE (Coleto Creek) */
|
||||||
|
{ 0x8086, 0x23a1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
|
||||||
|
/* SATA Controller IDE (Coleto Creek) */
|
||||||
|
{ 0x8086, 0x23a6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
|
||||||
#endif /* defined(__VMKLNX__) */
|
#endif /* defined(__VMKLNX__) */
|
||||||
|
|
||||||
{ } /* terminate list */
|
{ } /* terminate list */
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
/*
|
/*
|
||||||
* Source file for NIC routines to access the Phantom hardware
|
* Source file for NIC routines to access the Phantom hardware
|
||||||
*
|
*
|
||||||
* $Id: //depot/vmkdrivers/vsphere55u1/src_9/drivers/net/nx_nic/unm_nic_hw.c#1 $
|
* $Id: //depot/vmkdrivers/vsphere55u2/src_9/drivers/net/nx_nic/unm_nic_hw.c#1 $
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
|
|
@ -461,6 +461,7 @@ static const struct {
|
||||||
{ "nic_tx_threshold_hit" },
|
{ "nic_tx_threshold_hit" },
|
||||||
|
|
||||||
{ "mbuf_lwm_thresh_hit" },
|
{ "mbuf_lwm_thresh_hit" },
|
||||||
|
{ "dma_4g_cross" },
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TG3_NUM_STATS ARRAY_SIZE(ethtool_stats_keys)
|
#define TG3_NUM_STATS ARRAY_SIZE(ethtool_stats_keys)
|
||||||
|
@ -7347,7 +7348,7 @@ static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
|
||||||
{
|
{
|
||||||
u32 base = (u32) mapping & 0xffffffff;
|
u32 base = (u32) mapping & 0xffffffff;
|
||||||
|
|
||||||
return (base > 0xffffdcc0) && (base + len + 8 < base);
|
return (base + len + 8 < base);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Test for DMA addresses > 40-bit */
|
/* Test for DMA addresses > 40-bit */
|
||||||
|
@ -7384,8 +7385,10 @@ static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget,
|
||||||
if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8)
|
if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8)
|
||||||
hwbug = true;
|
hwbug = true;
|
||||||
|
|
||||||
if (tg3_4g_overflow_test(map, len))
|
if (tg3_4g_overflow_test(map, len)) {
|
||||||
|
tp->dma_4g_cross++;
|
||||||
hwbug = true;
|
hwbug = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (tg3_40bit_overflow_test(tp, map, len))
|
if (tg3_40bit_overflow_test(tp, map, len))
|
||||||
hwbug = true;
|
hwbug = true;
|
||||||
|
@ -11500,6 +11503,7 @@ static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats)
|
||||||
ESTAT_ADD(nic_tx_threshold_hit);
|
ESTAT_ADD(nic_tx_threshold_hit);
|
||||||
|
|
||||||
ESTAT_ADD(mbuf_lwm_thresh_hit);
|
ESTAT_ADD(mbuf_lwm_thresh_hit);
|
||||||
|
estats->dma_4g_cross = tp->dma_4g_cross;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats)
|
static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats)
|
||||||
|
@ -17703,17 +17707,13 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
|
||||||
features |= NETIF_F_TSO_ECN;
|
features |= NETIF_F_TSO_ECN;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__VMKLNX__) && defined(TG3_INBOX)
|
|
||||||
/*
|
|
||||||
* Disable TSO to avoid the data corruption issue happened when
|
|
||||||
* a 9KB+ buffer straddling a 4GB boundary. Please refer to
|
|
||||||
* PR 1148150.
|
|
||||||
*/
|
|
||||||
features &= ~(NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_TSO_ECN);
|
|
||||||
tg3_flag_clear(tp, TSO_CAPABLE);
|
|
||||||
tg3_flag_clear(tp, TSO_BUG);
|
|
||||||
#endif
|
|
||||||
#if defined(__VMKLNX__)
|
#if defined(__VMKLNX__)
|
||||||
|
if (disable_tso) {
|
||||||
|
features &= ~(NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_TSO_ECN);
|
||||||
|
tg3_flag_clear(tp, TSO_CAPABLE);
|
||||||
|
tg3_flag_clear(tp, TSO_BUG);
|
||||||
|
}
|
||||||
|
|
||||||
/* VMWare does not have skb_gso_segment() to workaround TSO_BUG */
|
/* VMWare does not have skb_gso_segment() to workaround TSO_BUG */
|
||||||
if (tg3_flag(tp, TSO_BUG))
|
if (tg3_flag(tp, TSO_BUG))
|
||||||
features &= ~(NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_TSO_ECN);
|
features &= ~(NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_TSO_ECN);
|
||||||
|
|
|
@ -2917,6 +2917,7 @@ struct tg3_ethtool_stats {
|
||||||
u64 nic_tx_threshold_hit;
|
u64 nic_tx_threshold_hit;
|
||||||
|
|
||||||
u64 mbuf_lwm_thresh_hit;
|
u64 mbuf_lwm_thresh_hit;
|
||||||
|
u64 dma_4g_cross;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(__VMKLNX__)
|
#if defined(__VMKLNX__)
|
||||||
|
@ -3404,6 +3405,7 @@ struct tg3 {
|
||||||
#if (defined(__VMKLNX__) && VMWARE_ESX_DDK_VERSION >= 55000)
|
#if (defined(__VMKLNX__) && VMWARE_ESX_DDK_VERSION >= 55000)
|
||||||
int nic_idx;
|
int nic_idx;
|
||||||
#endif
|
#endif
|
||||||
|
unsigned long dma_4g_cross;
|
||||||
bool link_up;
|
bool link_up;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,12 @@ struct tg3;
|
||||||
#define wmb() asm volatile("sfence" ::: "memory")
|
#define wmb() asm volatile("sfence" ::: "memory")
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static int disable_tso = 0;
|
||||||
|
module_param(disable_tso, int, 0);
|
||||||
|
MODULE_PARM_DESC(disable_tso, "Setting the variable to 1 to disable HW TSO "
|
||||||
|
"functionality on the driver level. Value of "
|
||||||
|
"0 will enable HW TSO which is the default.");
|
||||||
|
|
||||||
static int psod_on_tx_timeout = 0;
|
static int psod_on_tx_timeout = 0;
|
||||||
|
|
||||||
module_param(psod_on_tx_timeout, int, 0);
|
module_param(psod_on_tx_timeout, int, 0);
|
||||||
|
|
|
@ -3083,12 +3083,6 @@ megasas_complete_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd,
|
||||||
spin_unlock_irqrestore(instance->host->host_lock, flags);
|
spin_unlock_irqrestore(instance->host->host_lock, flags);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (cmd->frame->dcmd.opcode == MR_DCMD_CTRL_EVENT_GET_INFO ||
|
|
||||||
cmd->frame->dcmd.opcode == MR_DCMD_CTRL_EVENT_GET) {
|
|
||||||
spin_lock_irqsave(&poll_aen_lock, flags);
|
|
||||||
megasas_poll_wait_aen = 0;
|
|
||||||
spin_unlock_irqrestore(&poll_aen_lock, flags);
|
|
||||||
}
|
|
||||||
/*
|
/*
|
||||||
* See if got an event notification
|
* See if got an event notification
|
||||||
*/
|
*/
|
||||||
|
@ -5757,10 +5751,13 @@ static unsigned int megasas_mgmt_poll(struct file *file, poll_table *wait)
|
||||||
|
|
||||||
poll_wait(file, &megasas_poll_wait, wait);
|
poll_wait(file, &megasas_poll_wait, wait);
|
||||||
spin_lock_irqsave(&poll_aen_lock, flags);
|
spin_lock_irqsave(&poll_aen_lock, flags);
|
||||||
if (megasas_poll_wait_aen)
|
if (megasas_poll_wait_aen) {
|
||||||
mask = (POLLIN | POLLRDNORM);
|
mask = (POLLIN | POLLRDNORM);
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
mask = 0;
|
mask = 0;
|
||||||
|
}
|
||||||
|
megasas_poll_wait_aen = 0;
|
||||||
spin_unlock_irqrestore(&poll_aen_lock, flags);
|
spin_unlock_irqrestore(&poll_aen_lock, flags);
|
||||||
|
|
||||||
return mask;
|
return mask;
|
||||||
|
|
|
@ -2216,9 +2216,18 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Fusion OCR work queue */
|
/* Fusion OCR work queue */
|
||||||
|
#if defined(__VMKLNX__)
|
||||||
|
void megasas_fusion_ocr_wq(struct work_struct *work)
|
||||||
|
#else
|
||||||
void megasas_fusion_ocr_wq(void *arg)
|
void megasas_fusion_ocr_wq(void *arg)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
struct megasas_instance *instance = arg;
|
#if defined(__VMKLNX__)
|
||||||
|
struct megasas_instance *instance =
|
||||||
|
container_of(work, struct megasas_instance, work_init);
|
||||||
|
#else
|
||||||
|
struct megasas_instance *instance = arg;
|
||||||
|
#endif
|
||||||
|
|
||||||
megasas_reset_fusion(instance->host);
|
megasas_reset_fusion(instance->host);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6103,15 +6103,6 @@ void ata_qc_complete(struct ata_queued_cmd *qc)
|
||||||
ata_verify_xfer(qc);
|
ata_verify_xfer(qc);
|
||||||
|
|
||||||
__ata_qc_complete(qc);
|
__ata_qc_complete(qc);
|
||||||
#if defined(__VMKLNX__)
|
|
||||||
/* Fixing PR 1173296 */
|
|
||||||
if (unlikely((ehi->dev_action[dev->devno] & ATA_EH_REVALIDATE) &&
|
|
||||||
(ap->pflags & ATA_PFLAG_EH_PENDING))) {
|
|
||||||
ata_port_printk(ap, KERN_INFO,
|
|
||||||
"ata_qc_complete, dev needs revalidation, calling EH\n");
|
|
||||||
wake_up_process(ap->scsi_host->ehandler);
|
|
||||||
}
|
|
||||||
#endif /* defined(__VMKLNX__) */
|
|
||||||
} else {
|
} else {
|
||||||
if (qc->flags & ATA_QCFLAG_EH_SCHEDULED)
|
if (qc->flags & ATA_QCFLAG_EH_SCHEDULED)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -2310,6 +2310,11 @@ unsigned int ata_scsiop_inq_00(struct ata_scsi_args *args, u8 *rbuf,
|
||||||
};
|
};
|
||||||
rbuf[3] = sizeof(pages); /* number of supported VPD pages */
|
rbuf[3] = sizeof(pages); /* number of supported VPD pages */
|
||||||
|
|
||||||
|
if (buflen < 4 + sizeof(pages)) {
|
||||||
|
args->cmd->resid = buflen; /* no data transferred */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (buflen > 6)
|
if (buflen > 6)
|
||||||
memcpy(rbuf + 4, pages, sizeof(pages));
|
memcpy(rbuf + 4, pages, sizeof(pages));
|
||||||
|
|
||||||
|
|
|
@ -18,8 +18,8 @@
|
||||||
#endif
|
#endif
|
||||||
#include "pci-quirks.h"
|
#include "pci-quirks.h"
|
||||||
#if defined(__VMKLNX__)
|
#if defined(__VMKLNX__)
|
||||||
//#include "../host/xhci/xhci-ext-caps.h"
|
#include "../host/xhci/xhci-ext-caps.h"
|
||||||
//#else
|
#else
|
||||||
#include "xhci-ext-caps.h"
|
#include "xhci-ext-caps.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -8563,15 +8563,12 @@ GetNICPanicInfo(vmk_AddrCookie cookie, vmk_UplinkPanicInfo *intInfo)
|
||||||
* Pseudo NIC does not support remote
|
* Pseudo NIC does not support remote
|
||||||
* debugging.
|
* debugging.
|
||||||
*/
|
*/
|
||||||
intInfo->intrCookie = VMK_INVALID_INTRCOOKIE;
|
|
||||||
intInfo->clientData.ptr = NULL;
|
intInfo->clientData.ptr = NULL;
|
||||||
if (dev->pdev_pseudo) {
|
if (dev->pdev_pseudo) {
|
||||||
pci_dev = (struct pci_dev *)dev->pdev_pseudo;
|
pci_dev = (struct pci_dev *)dev->pdev_pseudo;
|
||||||
intInfo->intrCookie = pci_dev->irq;
|
|
||||||
intInfo->clientData.ptr = dev;
|
intInfo->clientData.ptr = dev;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
intInfo->intrCookie = LinuxIRQ_VectorToCookie(dev->pdev->irq);
|
|
||||||
intInfo->clientData.ptr = dev;
|
intInfo->clientData.ptr = dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -829,7 +829,13 @@ SCSILinuxProcessCompletions(scsiLinuxTLS_t *tls, // IN
|
||||||
--scmd->device->host->host_busy;
|
--scmd->device->host->host_busy;
|
||||||
--scmd->device->device_busy;
|
--scmd->device->device_busy;
|
||||||
spin_unlock_irqrestore(scmd->device->host->host_lock, flags);
|
spin_unlock_irqrestore(scmd->device->host->host_lock, flags);
|
||||||
|
|
||||||
|
/* wake up host error handler if necessary */
|
||||||
|
if (unlikely(scmd->device->host->host_eh_scheduled
|
||||||
|
&& !scmd->device->host->host_busy)) {
|
||||||
|
wake_up_process(scmd->device->host->ehandler);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Put back the scsi command before calling scsi upper layer
|
* Put back the scsi command before calling scsi upper layer
|
||||||
* Otherwise, if a destroy path is issued by upper layer and
|
* Otherwise, if a destroy path is issued by upper layer and
|
||||||
|
|
Loading…
Reference in a new issue