mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
Merge branch 'linus'
This commit is contained in:
commit
30716e07ef
544 changed files with 10013 additions and 4311 deletions
|
|
@ -6,7 +6,7 @@
|
|||
Arnaldo Carvalho de Melo <acme@conectiva.com.br>
|
||||
Brad Strand <linux@3ware.com>
|
||||
|
||||
Copyright (C) 1999-2005 3ware Inc.
|
||||
Copyright (C) 1999-2007 3ware Inc.
|
||||
|
||||
Kernel compatiblity By: Andre Hedrick <andre@suse.com>
|
||||
Non-Copyright (C) 2000 Andre Hedrick <andre@suse.com>
|
||||
|
|
@ -191,6 +191,9 @@
|
|||
before shutting down card.
|
||||
Change to new 'change_queue_depth' api.
|
||||
Fix 'handled=1' ISR usage, remove bogus IRQ check.
|
||||
1.26.02.002 - Free irq handler in __tw_shutdown().
|
||||
Turn on RCD bit for caching mode page.
|
||||
Serialize reset code.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
|
|
@ -214,7 +217,7 @@
|
|||
#include "3w-xxxx.h"
|
||||
|
||||
/* Globals */
|
||||
#define TW_DRIVER_VERSION "1.26.02.001"
|
||||
#define TW_DRIVER_VERSION "1.26.02.002"
|
||||
static TW_Device_Extension *tw_device_extension_list[TW_MAX_SLOT];
|
||||
static int tw_device_extension_count = 0;
|
||||
static int twe_major = -1;
|
||||
|
|
@ -226,7 +229,7 @@ MODULE_LICENSE("GPL");
|
|||
MODULE_VERSION(TW_DRIVER_VERSION);
|
||||
|
||||
/* Function prototypes */
|
||||
static int tw_reset_device_extension(TW_Device_Extension *tw_dev, int ioctl_reset);
|
||||
static int tw_reset_device_extension(TW_Device_Extension *tw_dev);
|
||||
|
||||
/* Functions */
|
||||
|
||||
|
|
@ -984,24 +987,12 @@ static int tw_chrdev_ioctl(struct inode *inode, struct file *file, unsigned int
|
|||
/* Now wait for the command to complete */
|
||||
timeout = wait_event_timeout(tw_dev->ioctl_wqueue, tw_dev->chrdev_request_id == TW_IOCTL_CHRDEV_FREE, timeout);
|
||||
|
||||
/* See if we reset while waiting for the ioctl to complete */
|
||||
if (test_bit(TW_IN_RESET, &tw_dev->flags)) {
|
||||
clear_bit(TW_IN_RESET, &tw_dev->flags);
|
||||
retval = -ERESTARTSYS;
|
||||
goto out2;
|
||||
}
|
||||
|
||||
/* We timed out, and didn't get an interrupt */
|
||||
if (tw_dev->chrdev_request_id != TW_IOCTL_CHRDEV_FREE) {
|
||||
/* Now we need to reset the board */
|
||||
printk(KERN_WARNING "3w-xxxx: scsi%d: Character ioctl (0x%x) timed out, resetting card.\n", tw_dev->host->host_no, cmd);
|
||||
retval = -EIO;
|
||||
spin_lock_irqsave(tw_dev->host->host_lock, flags);
|
||||
tw_dev->state[request_id] = TW_S_COMPLETED;
|
||||
tw_state_request_finish(tw_dev, request_id);
|
||||
tw_dev->posted_request_count--;
|
||||
spin_unlock_irqrestore(tw_dev->host->host_lock, flags);
|
||||
if (tw_reset_device_extension(tw_dev, 1)) {
|
||||
if (tw_reset_device_extension(tw_dev)) {
|
||||
printk(KERN_WARNING "3w-xxxx: tw_chrdev_ioctl(): Reset failed for card %d.\n", tw_dev->host->host_no);
|
||||
}
|
||||
goto out2;
|
||||
|
|
@ -1336,7 +1327,7 @@ static void tw_unmap_scsi_data(struct pci_dev *pdev, struct scsi_cmnd *cmd)
|
|||
} /* End tw_unmap_scsi_data() */
|
||||
|
||||
/* This function will reset a device extension */
|
||||
static int tw_reset_device_extension(TW_Device_Extension *tw_dev, int ioctl_reset)
|
||||
static int tw_reset_device_extension(TW_Device_Extension *tw_dev)
|
||||
{
|
||||
int i = 0;
|
||||
struct scsi_cmnd *srb;
|
||||
|
|
@ -1382,15 +1373,10 @@ static int tw_reset_device_extension(TW_Device_Extension *tw_dev, int ioctl_rese
|
|||
printk(KERN_WARNING "3w-xxxx: scsi%d: Reset sequence failed.\n", tw_dev->host->host_no);
|
||||
return 1;
|
||||
}
|
||||
TW_ENABLE_AND_CLEAR_INTERRUPTS(tw_dev);
|
||||
|
||||
/* Wake up any ioctl that was pending before the reset */
|
||||
if ((tw_dev->chrdev_request_id == TW_IOCTL_CHRDEV_FREE) || (ioctl_reset)) {
|
||||
clear_bit(TW_IN_RESET, &tw_dev->flags);
|
||||
} else {
|
||||
tw_dev->chrdev_request_id = TW_IOCTL_CHRDEV_FREE;
|
||||
wake_up(&tw_dev->ioctl_wqueue);
|
||||
}
|
||||
TW_ENABLE_AND_CLEAR_INTERRUPTS(tw_dev);
|
||||
clear_bit(TW_IN_RESET, &tw_dev->flags);
|
||||
tw_dev->chrdev_request_id = TW_IOCTL_CHRDEV_FREE;
|
||||
|
||||
return 0;
|
||||
} /* End tw_reset_device_extension() */
|
||||
|
|
@ -1437,14 +1423,18 @@ static int tw_scsi_eh_reset(struct scsi_cmnd *SCpnt)
|
|||
"WARNING: Command (0x%x) timed out, resetting card.\n",
|
||||
SCpnt->cmnd[0]);
|
||||
|
||||
/* Make sure we are not issuing an ioctl or resetting from ioctl */
|
||||
mutex_lock(&tw_dev->ioctl_lock);
|
||||
|
||||
/* Now reset the card and some of the device extension data */
|
||||
if (tw_reset_device_extension(tw_dev, 0)) {
|
||||
if (tw_reset_device_extension(tw_dev)) {
|
||||
printk(KERN_WARNING "3w-xxxx: scsi%d: Reset failed.\n", tw_dev->host->host_no);
|
||||
goto out;
|
||||
}
|
||||
|
||||
retval = SUCCESS;
|
||||
out:
|
||||
mutex_unlock(&tw_dev->ioctl_lock);
|
||||
return retval;
|
||||
} /* End tw_scsi_eh_reset() */
|
||||
|
||||
|
|
@ -1660,9 +1650,9 @@ static int tw_scsiop_mode_sense_complete(TW_Device_Extension *tw_dev, int reques
|
|||
request_buffer[4] = 0x8; /* caching page */
|
||||
request_buffer[5] = 0xa; /* page length */
|
||||
if (*flags & 0x1)
|
||||
request_buffer[6] = 0x4; /* WCE on */
|
||||
request_buffer[6] = 0x5; /* WCE on, RCD on */
|
||||
else
|
||||
request_buffer[6] = 0x0; /* WCE off */
|
||||
request_buffer[6] = 0x1; /* WCE off, RCD on */
|
||||
tw_transfer_internal(tw_dev, request_id, request_buffer,
|
||||
sizeof(request_buffer));
|
||||
|
||||
|
|
@ -2012,6 +2002,10 @@ static int tw_scsi_queue(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd
|
|||
int retval = 1;
|
||||
TW_Device_Extension *tw_dev = (TW_Device_Extension *)SCpnt->device->host->hostdata;
|
||||
|
||||
/* If we are resetting due to timed out ioctl, report as busy */
|
||||
if (test_bit(TW_IN_RESET, &tw_dev->flags))
|
||||
return SCSI_MLQUEUE_HOST_BUSY;
|
||||
|
||||
/* Save done function into Scsi_Cmnd struct */
|
||||
SCpnt->scsi_done = done;
|
||||
|
||||
|
|
@ -2100,6 +2094,10 @@ static irqreturn_t tw_interrupt(int irq, void *dev_instance)
|
|||
|
||||
handled = 1;
|
||||
|
||||
/* If we are resetting, bail */
|
||||
if (test_bit(TW_IN_RESET, &tw_dev->flags))
|
||||
goto tw_interrupt_bail;
|
||||
|
||||
/* Check controller for errors */
|
||||
if (tw_check_bits(status_reg_value)) {
|
||||
dprintk(KERN_WARNING "3w-xxxx: tw_interrupt(): Unexpected bits.\n");
|
||||
|
|
@ -2276,6 +2274,9 @@ static void __tw_shutdown(TW_Device_Extension *tw_dev)
|
|||
/* Disable interrupts */
|
||||
TW_DISABLE_INTERRUPTS(tw_dev);
|
||||
|
||||
/* Free up the IRQ */
|
||||
free_irq(tw_dev->tw_pci_dev->irq, tw_dev);
|
||||
|
||||
printk(KERN_WARNING "3w-xxxx: Shutting down host %d.\n", tw_dev->host->host_no);
|
||||
|
||||
/* Tell the card we are shutting down */
|
||||
|
|
@ -2444,9 +2445,6 @@ static void tw_remove(struct pci_dev *pdev)
|
|||
twe_major = -1;
|
||||
}
|
||||
|
||||
/* Free up the IRQ */
|
||||
free_irq(tw_dev->tw_pci_dev->irq, tw_dev);
|
||||
|
||||
/* Shutdown the card */
|
||||
__tw_shutdown(tw_dev);
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
Arnaldo Carvalho de Melo <acme@conectiva.com.br>
|
||||
Brad Strand <linux@3ware.com>
|
||||
|
||||
Copyright (C) 1999-2005 3ware Inc.
|
||||
Copyright (C) 1999-2007 3ware Inc.
|
||||
|
||||
Kernel compatiblity By: Andre Hedrick <andre@suse.com>
|
||||
Non-Copyright (C) 2000 Andre Hedrick <andre@suse.com>
|
||||
|
|
|
|||
|
|
@ -1312,7 +1312,7 @@ config SCSI_LPFC
|
|||
|
||||
config SCSI_SEAGATE
|
||||
tristate "Seagate ST-02 and Future Domain TMC-8xx SCSI support"
|
||||
depends on X86 && ISA && SCSI && BROKEN
|
||||
depends on X86 && ISA && SCSI
|
||||
---help---
|
||||
These are 8-bit SCSI controllers; the ST-01 is also supported by
|
||||
this driver. It is explained in section 3.9 of the SCSI-HOWTO,
|
||||
|
|
|
|||
|
|
@ -117,8 +117,8 @@ static struct pci_device_id aac_pci_tbl[] = {
|
|||
{ 0x9005, 0x0286, 0x9005, 0x029b, 0, 0, 22 }, /* AAR-2820SA (Intruder) */
|
||||
{ 0x9005, 0x0286, 0x9005, 0x029c, 0, 0, 23 }, /* AAR-2620SA (Intruder) */
|
||||
{ 0x9005, 0x0286, 0x9005, 0x029d, 0, 0, 24 }, /* AAR-2420SA (Intruder) */
|
||||
{ 0x9005, 0x0286, 0x9005, 0x029e, 0, 0, 25 }, /* ICP9024R0 (Lancer) */
|
||||
{ 0x9005, 0x0286, 0x9005, 0x029f, 0, 0, 26 }, /* ICP9014R0 (Lancer) */
|
||||
{ 0x9005, 0x0286, 0x9005, 0x029e, 0, 0, 25 }, /* ICP9024RO (Lancer) */
|
||||
{ 0x9005, 0x0286, 0x9005, 0x029f, 0, 0, 26 }, /* ICP9014RO (Lancer) */
|
||||
{ 0x9005, 0x0286, 0x9005, 0x02a0, 0, 0, 27 }, /* ICP9047MA (Lancer) */
|
||||
{ 0x9005, 0x0286, 0x9005, 0x02a1, 0, 0, 28 }, /* ICP9087MA (Lancer) */
|
||||
{ 0x9005, 0x0286, 0x9005, 0x02a3, 0, 0, 29 }, /* ICP5445AU (Hurricane44) */
|
||||
|
|
@ -137,15 +137,15 @@ static struct pci_device_id aac_pci_tbl[] = {
|
|||
{ 0x9005, 0x0285, 0x9005, 0x0294, 0, 0, 41 }, /* ESD SO-DIMM PCI-X SATA ZCR (Prowler) */
|
||||
{ 0x9005, 0x0285, 0x103C, 0x3227, 0, 0, 42 }, /* AAR-2610SA PCI SATA 6ch */
|
||||
{ 0x9005, 0x0285, 0x9005, 0x0296, 0, 0, 43 }, /* ASR-2240S (SabreExpress) */
|
||||
{ 0x9005, 0x0285, 0x9005, 0x0297, 0, 0, 44 }, /* ASR-4005SAS */
|
||||
{ 0x9005, 0x0285, 0x9005, 0x0297, 0, 0, 44 }, /* ASR-4005 */
|
||||
{ 0x9005, 0x0285, 0x1014, 0x02F2, 0, 0, 45 }, /* IBM 8i (AvonPark) */
|
||||
{ 0x9005, 0x0285, 0x1014, 0x0312, 0, 0, 45 }, /* IBM 8i (AvonPark Lite) */
|
||||
{ 0x9005, 0x0286, 0x1014, 0x9580, 0, 0, 46 }, /* IBM 8k/8k-l8 (Aurora) */
|
||||
{ 0x9005, 0x0286, 0x1014, 0x9540, 0, 0, 47 }, /* IBM 8k/8k-l4 (Aurora Lite) */
|
||||
{ 0x9005, 0x0285, 0x9005, 0x0298, 0, 0, 48 }, /* ASR-4000SAS (BlackBird) */
|
||||
{ 0x9005, 0x0285, 0x9005, 0x0298, 0, 0, 48 }, /* ASR-4000 (BlackBird) */
|
||||
{ 0x9005, 0x0285, 0x9005, 0x0299, 0, 0, 49 }, /* ASR-4800SAS (Marauder-X) */
|
||||
{ 0x9005, 0x0285, 0x9005, 0x029a, 0, 0, 50 }, /* ASR-4805SAS (Marauder-E) */
|
||||
{ 0x9005, 0x0286, 0x9005, 0x02a2, 0, 0, 51 }, /* ASR-3800SAS (Hurricane44) */
|
||||
{ 0x9005, 0x0286, 0x9005, 0x02a2, 0, 0, 51 }, /* ASR-3800 (Hurricane44) */
|
||||
|
||||
{ 0x9005, 0x0285, 0x1028, 0x0287, 0, 0, 52 }, /* Perc 320/DC*/
|
||||
{ 0x1011, 0x0046, 0x9005, 0x0365, 0, 0, 53 }, /* Adaptec 5400S (Mustang)*/
|
||||
|
|
@ -194,8 +194,8 @@ static struct aac_driver_ident aac_drivers[] = {
|
|||
{ aac_rkt_init, "aacraid", "ADAPTEC ", "AAR-2820SA ", 1 }, /* AAR-2820SA (Intruder) */
|
||||
{ aac_rkt_init, "aacraid", "ADAPTEC ", "AAR-2620SA ", 1 }, /* AAR-2620SA (Intruder) */
|
||||
{ aac_rkt_init, "aacraid", "ADAPTEC ", "AAR-2420SA ", 1 }, /* AAR-2420SA (Intruder) */
|
||||
{ aac_rkt_init, "aacraid", "ICP ", "ICP9024R0 ", 2 }, /* ICP9024R0 (Lancer) */
|
||||
{ aac_rkt_init, "aacraid", "ICP ", "ICP9014R0 ", 1 }, /* ICP9014R0 (Lancer) */
|
||||
{ aac_rkt_init, "aacraid", "ICP ", "ICP9024RO ", 2 }, /* ICP9024RO (Lancer) */
|
||||
{ aac_rkt_init, "aacraid", "ICP ", "ICP9014RO ", 1 }, /* ICP9014RO (Lancer) */
|
||||
{ aac_rkt_init, "aacraid", "ICP ", "ICP9047MA ", 1 }, /* ICP9047MA (Lancer) */
|
||||
{ aac_rkt_init, "aacraid", "ICP ", "ICP9087MA ", 1 }, /* ICP9087MA (Lancer) */
|
||||
{ aac_rkt_init, "aacraid", "ICP ", "ICP5445AU ", 1 }, /* ICP5445AU (Hurricane44) */
|
||||
|
|
@ -213,14 +213,14 @@ static struct aac_driver_ident aac_drivers[] = {
|
|||
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2026ZCR ", 1 }, /* ESD SO-DIMM PCI-X SATA ZCR (Prowler) */
|
||||
{ aac_rx_init, "aacraid", "ADAPTEC ", "AAR-2610SA ", 1 }, /* SATA 6Ch (Bearcat) */
|
||||
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2240S ", 1 }, /* ASR-2240S (SabreExpress) */
|
||||
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4005SAS ", 1 }, /* ASR-4005SAS */
|
||||
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4005 ", 1 }, /* ASR-4005 */
|
||||
{ aac_rx_init, "ServeRAID","IBM ", "ServeRAID 8i ", 1 }, /* IBM 8i (AvonPark) */
|
||||
{ aac_rkt_init, "ServeRAID","IBM ", "ServeRAID 8k-l8 ", 1 }, /* IBM 8k/8k-l8 (Aurora) */
|
||||
{ aac_rkt_init, "ServeRAID","IBM ", "ServeRAID 8k-l4 ", 1 }, /* IBM 8k/8k-l4 (Aurora Lite) */
|
||||
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4000SAS ", 1 }, /* ASR-4000SAS (BlackBird & AvonPark) */
|
||||
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4000 ", 1 }, /* ASR-4000 (BlackBird & AvonPark) */
|
||||
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4800SAS ", 1 }, /* ASR-4800SAS (Marauder-X) */
|
||||
{ aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4805SAS ", 1 }, /* ASR-4805SAS (Marauder-E) */
|
||||
{ aac_rkt_init, "aacraid", "ADAPTEC ", "ASR-3800SAS ", 1 }, /* ASR-3800SAS (Hurricane44) */
|
||||
{ aac_rkt_init, "aacraid", "ADAPTEC ", "ASR-3800 ", 1 }, /* ASR-3800 (Hurricane44) */
|
||||
|
||||
{ aac_rx_init, "percraid", "DELL ", "PERC 320/DC ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG }, /* Perc 320/DC*/
|
||||
{ aac_sa_init, "aacraid", "ADAPTEC ", "Adaptec 5400S ", 4, AAC_QUIRK_34SG }, /* Adaptec 5400S (Mustang)*/
|
||||
|
|
|
|||
|
|
@ -18215,6 +18215,7 @@ AdvInquiryHandling(
|
|||
}
|
||||
MODULE_LICENSE("Dual BSD/GPL");
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
/* PCI Devices supported by this driver */
|
||||
static struct pci_device_id advansys_pci_tbl[] __devinitdata = {
|
||||
{ PCI_VENDOR_ID_ASP, PCI_DEVICE_ID_ASP_1200A,
|
||||
|
|
@ -18232,4 +18233,4 @@ static struct pci_device_id advansys_pci_tbl[] __devinitdata = {
|
|||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, advansys_pci_tbl);
|
||||
|
||||
#endif /* CONFIG_PCI */
|
||||
|
|
|
|||
|
|
@ -749,7 +749,7 @@ static int iscsi_scsi_data_in(struct iscsi_conn *conn)
|
|||
if (!offset)
|
||||
crypto_hash_update(
|
||||
&tcp_conn->rx_hash,
|
||||
&sg[i], 1);
|
||||
&sg[i], sg[i].length);
|
||||
else
|
||||
partial_sg_digest_update(
|
||||
&tcp_conn->rx_hash,
|
||||
|
|
@ -1777,13 +1777,13 @@ iscsi_tcp_conn_create(struct iscsi_cls_session *cls_session, uint32_t conn_idx)
|
|||
tcp_conn->tx_hash.tfm = crypto_alloc_hash("crc32c", 0,
|
||||
CRYPTO_ALG_ASYNC);
|
||||
tcp_conn->tx_hash.flags = 0;
|
||||
if (!tcp_conn->tx_hash.tfm)
|
||||
if (IS_ERR(tcp_conn->tx_hash.tfm))
|
||||
goto free_tcp_conn;
|
||||
|
||||
tcp_conn->rx_hash.tfm = crypto_alloc_hash("crc32c", 0,
|
||||
CRYPTO_ALG_ASYNC);
|
||||
tcp_conn->rx_hash.flags = 0;
|
||||
if (!tcp_conn->rx_hash.tfm)
|
||||
if (IS_ERR(tcp_conn->rx_hash.tfm))
|
||||
goto free_tx_tfm;
|
||||
|
||||
return cls_conn;
|
||||
|
|
@ -2044,13 +2044,11 @@ iscsi_tcp_conn_get_param(struct iscsi_cls_conn *cls_conn,
|
|||
sk = tcp_conn->sock->sk;
|
||||
if (sk->sk_family == PF_INET) {
|
||||
inet = inet_sk(sk);
|
||||
len = sprintf(buf, "%u.%u.%u.%u\n",
|
||||
len = sprintf(buf, NIPQUAD_FMT "\n",
|
||||
NIPQUAD(inet->daddr));
|
||||
} else {
|
||||
np = inet6_sk(sk);
|
||||
len = sprintf(buf,
|
||||
"%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x\n",
|
||||
NIP6(np->daddr));
|
||||
len = sprintf(buf, NIP6_FMT "\n", NIP6(np->daddr));
|
||||
}
|
||||
mutex_unlock(&conn->xmitmutex);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -260,7 +260,7 @@ static int iscsi_scsi_cmd_rsp(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
|
|||
}
|
||||
|
||||
if (rhdr->cmd_status == SAM_STAT_CHECK_CONDITION) {
|
||||
int senselen;
|
||||
uint16_t senselen;
|
||||
|
||||
if (datalen < 2) {
|
||||
invalid_datalen:
|
||||
|
|
@ -270,12 +270,12 @@ invalid_datalen:
|
|||
goto out;
|
||||
}
|
||||
|
||||
senselen = (data[0] << 8) | data[1];
|
||||
senselen = be16_to_cpu(*(uint16_t *)data);
|
||||
if (datalen < senselen)
|
||||
goto invalid_datalen;
|
||||
|
||||
memcpy(sc->sense_buffer, data + 2,
|
||||
min(senselen, SCSI_SENSE_BUFFERSIZE));
|
||||
min_t(uint16_t, senselen, SCSI_SENSE_BUFFERSIZE));
|
||||
debug_scsi("copied %d bytes of sense\n",
|
||||
min(senselen, SCSI_SENSE_BUFFERSIZE));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,6 +56,9 @@ lpfc_mem_alloc(struct lpfc_hba * phba)
|
|||
|
||||
pool->elements = kmalloc(sizeof(struct lpfc_dmabuf) *
|
||||
LPFC_MBUF_POOL_SIZE, GFP_KERNEL);
|
||||
if (!pool->elements)
|
||||
goto fail_free_lpfc_mbuf_pool;
|
||||
|
||||
pool->max_count = 0;
|
||||
pool->current_count = 0;
|
||||
for ( i = 0; i < LPFC_MBUF_POOL_SIZE; i++) {
|
||||
|
|
@ -82,10 +85,11 @@ lpfc_mem_alloc(struct lpfc_hba * phba)
|
|||
fail_free_mbox_pool:
|
||||
mempool_destroy(phba->mbox_mem_pool);
|
||||
fail_free_mbuf_pool:
|
||||
while (--i)
|
||||
while (i--)
|
||||
pci_pool_free(phba->lpfc_mbuf_pool, pool->elements[i].virt,
|
||||
pool->elements[i].phys);
|
||||
kfree(pool->elements);
|
||||
fail_free_lpfc_mbuf_pool:
|
||||
pci_pool_destroy(phba->lpfc_mbuf_pool);
|
||||
fail_free_dma_buf_pool:
|
||||
pci_pool_destroy(phba->lpfc_scsi_dma_buf_pool);
|
||||
|
|
|
|||
|
|
@ -13,8 +13,8 @@
|
|||
* Version : v00.00.03.05
|
||||
*
|
||||
* Authors:
|
||||
* Sreenivas Bagalkote <Sreenivas.Bagalkote@lsil.com>
|
||||
* Sumant Patro <Sumant.Patro@lsil.com>
|
||||
* Sreenivas Bagalkote <Sreenivas.Bagalkote@lsi.com>
|
||||
* Sumant Patro <Sumant.Patro@lsi.com>
|
||||
*
|
||||
* List of supported controllers
|
||||
*
|
||||
|
|
@ -45,7 +45,7 @@
|
|||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_VERSION(MEGASAS_VERSION);
|
||||
MODULE_AUTHOR("sreenivas.bagalkote@lsil.com");
|
||||
MODULE_AUTHOR("megaraidlinux@lsi.com");
|
||||
MODULE_DESCRIPTION("LSI Logic MegaRAID SAS Driver");
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -545,8 +545,6 @@ SYM53C500_release(struct pcmcia_device *link)
|
|||
*/
|
||||
if (shost->irq)
|
||||
free_irq(shost->irq, shost);
|
||||
if (shost->dma_channel != 0xff)
|
||||
free_dma(shost->dma_channel);
|
||||
if (shost->io_port && shost->n_io_port)
|
||||
release_region(shost->io_port, shost->n_io_port);
|
||||
|
||||
|
|
|
|||
|
|
@ -1341,7 +1341,7 @@ qla1280_return_status(struct response * sts, struct scsi_cmnd *cp)
|
|||
int host_status = DID_ERROR;
|
||||
uint16_t comp_status = le16_to_cpu(sts->comp_status);
|
||||
uint16_t state_flags = le16_to_cpu(sts->state_flags);
|
||||
uint16_t residual_length = le32_to_cpu(sts->residual_length);
|
||||
uint32_t residual_length = le32_to_cpu(sts->residual_length);
|
||||
uint16_t scsi_status = le16_to_cpu(sts->scsi_status);
|
||||
#if DEBUG_QLA1280_INTR
|
||||
static char *reason[] = {
|
||||
|
|
@ -1413,8 +1413,10 @@ qla1280_return_status(struct response * sts, struct scsi_cmnd *cp)
|
|||
"scsi: Underflow detected - retrying "
|
||||
"command.\n");
|
||||
host_status = DID_ERROR;
|
||||
} else
|
||||
} else {
|
||||
cp->resid = residual_length;
|
||||
host_status = DID_OK;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -1602,6 +1602,7 @@ typedef struct fc_port {
|
|||
|
||||
#define CT_REJECT_RESPONSE 0x8001
|
||||
#define CT_ACCEPT_RESPONSE 0x8002
|
||||
#define CT_REASON_INVALID_COMMAND_CODE 0x01
|
||||
#define CT_REASON_CANNOT_PERFORM 0x09
|
||||
#define CT_EXPL_ALREADY_REGISTERED 0x10
|
||||
|
||||
|
|
@ -2103,6 +2104,7 @@ typedef struct scsi_qla_host {
|
|||
uint32_t msi_enabled :1;
|
||||
uint32_t msix_enabled :1;
|
||||
uint32_t disable_serdes :1;
|
||||
uint32_t gpsc_supported :1;
|
||||
} flags;
|
||||
|
||||
atomic_t loop_state;
|
||||
|
|
|
|||
|
|
@ -45,7 +45,6 @@ extern void qla2x00_update_fcports(scsi_qla_host_t *);
|
|||
extern int qla2x00_abort_isp(scsi_qla_host_t *);
|
||||
|
||||
extern void qla2x00_update_fcport(scsi_qla_host_t *, fc_port_t *);
|
||||
extern void qla2x00_reg_remote_port(scsi_qla_host_t *, fc_port_t *);
|
||||
|
||||
extern void qla2x00_alloc_fw_dump(scsi_qla_host_t *);
|
||||
extern void qla2x00_try_to_stop_firmware(scsi_qla_host_t *);
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@ qla2x00_chk_ms_status(scsi_qla_host_t *ha, ms_iocb_entry_t *ms_pkt,
|
|||
ha->host_no, routine, ms_pkt->entry_status));
|
||||
} else {
|
||||
if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
|
||||
comp_status =
|
||||
((struct ct_entry_24xx *)ms_pkt)->comp_status;
|
||||
comp_status = le16_to_cpu(
|
||||
((struct ct_entry_24xx *)ms_pkt)->comp_status);
|
||||
else
|
||||
comp_status = le16_to_cpu(ms_pkt->status);
|
||||
switch (comp_status) {
|
||||
|
|
@ -143,6 +143,7 @@ qla2x00_chk_ms_status(scsi_qla_host_t *ha, ms_iocb_entry_t *ms_pkt,
|
|||
DEBUG2_3(qla2x00_dump_buffer(
|
||||
(uint8_t *)&ct_rsp->header,
|
||||
sizeof(struct ct_rsp_hdr)));
|
||||
rval = QLA_INVALID_COMMAND;
|
||||
} else
|
||||
rval = QLA_SUCCESS;
|
||||
break;
|
||||
|
|
@ -1683,7 +1684,7 @@ qla2x00_gfpn_id(scsi_qla_host_t *ha, sw_info_t *list)
|
|||
memset(list[i].fabric_port_name, 0, WWN_SIZE);
|
||||
|
||||
/* Prepare common MS IOCB */
|
||||
ms_pkt = qla2x00_prep_ms_iocb(ha, GFPN_ID_REQ_SIZE,
|
||||
ms_pkt = ha->isp_ops.prep_ms_iocb(ha, GFPN_ID_REQ_SIZE,
|
||||
GFPN_ID_RSP_SIZE);
|
||||
|
||||
/* Prepare CT request */
|
||||
|
|
@ -1784,6 +1785,8 @@ qla2x00_gpsc(scsi_qla_host_t *ha, sw_info_t *list)
|
|||
|
||||
if (!IS_QLA24XX(ha) && !IS_QLA54XX(ha))
|
||||
return QLA_FUNCTION_FAILED;
|
||||
if (!ha->flags.gpsc_supported)
|
||||
return QLA_FUNCTION_FAILED;
|
||||
|
||||
rval = qla2x00_mgmt_svr_login(ha);
|
||||
if (rval)
|
||||
|
|
@ -1813,8 +1816,19 @@ qla2x00_gpsc(scsi_qla_host_t *ha, sw_info_t *list)
|
|||
/*EMPTY*/
|
||||
DEBUG2_3(printk("scsi(%ld): GPSC issue IOCB "
|
||||
"failed (%d).\n", ha->host_no, rval));
|
||||
} else if (qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp,
|
||||
"GPSC") != QLA_SUCCESS) {
|
||||
} else if ((rval = qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp,
|
||||
"GPSC")) != QLA_SUCCESS) {
|
||||
/* FM command unsupported? */
|
||||
if (rval == QLA_INVALID_COMMAND &&
|
||||
ct_rsp->header.reason_code ==
|
||||
CT_REASON_INVALID_COMMAND_CODE) {
|
||||
DEBUG2(printk("scsi(%ld): GPSC command "
|
||||
"unsupported, disabling query...\n",
|
||||
ha->host_no));
|
||||
ha->flags.gpsc_supported = 0;
|
||||
rval = QLA_FUNCTION_FAILED;
|
||||
break;
|
||||
}
|
||||
rval = QLA_FUNCTION_FAILED;
|
||||
} else {
|
||||
/* Save portname */
|
||||
|
|
|
|||
|
|
@ -2065,40 +2065,7 @@ qla2x00_iidma_fcport(scsi_qla_host_t *ha, fc_port_t *fcport)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* qla2x00_update_fcport
|
||||
* Updates device on list.
|
||||
*
|
||||
* Input:
|
||||
* ha = adapter block pointer.
|
||||
* fcport = port structure pointer.
|
||||
*
|
||||
* Return:
|
||||
* 0 - Success
|
||||
* BIT_0 - error
|
||||
*
|
||||
* Context:
|
||||
* Kernel context.
|
||||
*/
|
||||
void
|
||||
qla2x00_update_fcport(scsi_qla_host_t *ha, fc_port_t *fcport)
|
||||
{
|
||||
fcport->ha = ha;
|
||||
fcport->login_retry = 0;
|
||||
fcport->port_login_retry_count = ha->port_down_retry_count *
|
||||
PORT_RETRY_TIME;
|
||||
atomic_set(&fcport->port_down_timer, ha->port_down_retry_count *
|
||||
PORT_RETRY_TIME);
|
||||
fcport->flags &= ~FCF_LOGIN_NEEDED;
|
||||
|
||||
qla2x00_iidma_fcport(ha, fcport);
|
||||
|
||||
atomic_set(&fcport->state, FCS_ONLINE);
|
||||
|
||||
qla2x00_reg_remote_port(ha, fcport);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
qla2x00_reg_remote_port(scsi_qla_host_t *ha, fc_port_t *fcport)
|
||||
{
|
||||
struct fc_rport_identifiers rport_ids;
|
||||
|
|
@ -2140,6 +2107,39 @@ qla2x00_reg_remote_port(scsi_qla_host_t *ha, fc_port_t *fcport)
|
|||
fcport->os_target_id = rport->scsi_target_id;
|
||||
}
|
||||
|
||||
/*
|
||||
* qla2x00_update_fcport
|
||||
* Updates device on list.
|
||||
*
|
||||
* Input:
|
||||
* ha = adapter block pointer.
|
||||
* fcport = port structure pointer.
|
||||
*
|
||||
* Return:
|
||||
* 0 - Success
|
||||
* BIT_0 - error
|
||||
*
|
||||
* Context:
|
||||
* Kernel context.
|
||||
*/
|
||||
void
|
||||
qla2x00_update_fcport(scsi_qla_host_t *ha, fc_port_t *fcport)
|
||||
{
|
||||
fcport->ha = ha;
|
||||
fcport->login_retry = 0;
|
||||
fcport->port_login_retry_count = ha->port_down_retry_count *
|
||||
PORT_RETRY_TIME;
|
||||
atomic_set(&fcport->port_down_timer, ha->port_down_retry_count *
|
||||
PORT_RETRY_TIME);
|
||||
fcport->flags &= ~FCF_LOGIN_NEEDED;
|
||||
|
||||
qla2x00_iidma_fcport(ha, fcport);
|
||||
|
||||
atomic_set(&fcport->state, FCS_ONLINE);
|
||||
|
||||
qla2x00_reg_remote_port(ha, fcport);
|
||||
}
|
||||
|
||||
/*
|
||||
* qla2x00_configure_fabric
|
||||
* Setup SNS devices with loop ID's.
|
||||
|
|
@ -3380,9 +3380,11 @@ qla24xx_nvram_config(scsi_qla_host_t *ha)
|
|||
|
||||
/* Set host adapter parameters. */
|
||||
ha->flags.disable_risc_code_load = 0;
|
||||
ha->flags.enable_lip_reset = 1;
|
||||
ha->flags.enable_lip_full_login = 1;
|
||||
ha->flags.enable_target_reset = 1;
|
||||
ha->flags.enable_lip_reset = 0;
|
||||
ha->flags.enable_lip_full_login =
|
||||
le32_to_cpu(nv->host_p) & BIT_10 ? 1: 0;
|
||||
ha->flags.enable_target_reset =
|
||||
le32_to_cpu(nv->host_p) & BIT_11 ? 1: 0;
|
||||
ha->flags.enable_led_scheme = 0;
|
||||
ha->flags.disable_serdes = le32_to_cpu(nv->host_p) & BIT_5 ? 1: 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -130,11 +130,11 @@ qla2300_intr_handler(int irq, void *dev_id)
|
|||
if (stat & HSR_RISC_PAUSED) {
|
||||
hccr = RD_REG_WORD(®->hccr);
|
||||
if (hccr & (BIT_15 | BIT_13 | BIT_11 | BIT_8))
|
||||
qla_printk(KERN_INFO, ha,
|
||||
"Parity error -- HCCR=%x.\n", hccr);
|
||||
qla_printk(KERN_INFO, ha, "Parity error -- "
|
||||
"HCCR=%x, Dumping firmware!\n", hccr);
|
||||
else
|
||||
qla_printk(KERN_INFO, ha,
|
||||
"RISC paused -- HCCR=%x.\n", hccr);
|
||||
qla_printk(KERN_INFO, ha, "RISC paused -- "
|
||||
"HCCR=%x, Dumping firmware!\n", hccr);
|
||||
|
||||
/*
|
||||
* Issue a "HARD" reset in order for the RISC
|
||||
|
|
@ -143,6 +143,8 @@ qla2300_intr_handler(int irq, void *dev_id)
|
|||
*/
|
||||
WRT_REG_WORD(®->hccr, HCCR_RESET_RISC);
|
||||
RD_REG_WORD(®->hccr);
|
||||
|
||||
ha->isp_ops.fw_dump(ha, 1);
|
||||
set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
|
||||
break;
|
||||
} else if ((stat & HSR_RISC_INT) == 0)
|
||||
|
|
@ -467,6 +469,8 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb)
|
|||
set_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
|
||||
}
|
||||
set_bit(REGISTER_FC4_NEEDED, &ha->dpc_flags);
|
||||
|
||||
ha->flags.gpsc_supported = 1;
|
||||
break;
|
||||
|
||||
case MBA_CHG_IN_CONNECTION: /* Change in connection mode */
|
||||
|
|
@ -1444,8 +1448,7 @@ qla24xx_intr_handler(int irq, void *dev_id)
|
|||
|
||||
qla_printk(KERN_INFO, ha, "RISC paused -- HCCR=%x, "
|
||||
"Dumping firmware!\n", hccr);
|
||||
qla24xx_fw_dump(ha, 1);
|
||||
|
||||
ha->isp_ops.fw_dump(ha, 1);
|
||||
set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
|
||||
break;
|
||||
} else if ((stat & HSRX_RISC_INT) == 0)
|
||||
|
|
|
|||
|
|
@ -1323,9 +1323,9 @@ qla2x00_lip_reset(scsi_qla_host_t *ha)
|
|||
|
||||
if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
|
||||
mcp->mb[0] = MBC_LIP_FULL_LOGIN;
|
||||
mcp->mb[1] = BIT_0;
|
||||
mcp->mb[2] = 0xff;
|
||||
mcp->mb[3] = 0;
|
||||
mcp->mb[1] = BIT_6;
|
||||
mcp->mb[2] = 0;
|
||||
mcp->mb[3] = ha->loop_reset_delay;
|
||||
mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
|
||||
} else {
|
||||
mcp->mb[0] = MBC_LIP_RESET;
|
||||
|
|
@ -1807,8 +1807,8 @@ qla2x00_full_login_lip(scsi_qla_host_t *ha)
|
|||
ha->host_no));
|
||||
|
||||
mcp->mb[0] = MBC_LIP_FULL_LOGIN;
|
||||
mcp->mb[1] = 0;
|
||||
mcp->mb[2] = 0xff;
|
||||
mcp->mb[1] = IS_QLA24XX(ha) || IS_QLA54XX(ha) ? BIT_3: 0;
|
||||
mcp->mb[2] = 0;
|
||||
mcp->mb[3] = 0;
|
||||
mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
|
||||
mcp->in_mb = MBX_0;
|
||||
|
|
@ -2470,7 +2470,7 @@ qla2x00_trace_control(scsi_qla_host_t *ha, uint16_t ctrl, dma_addr_t eft_dma,
|
|||
mcp->mb[4] = LSW(MSD(eft_dma));
|
||||
mcp->mb[5] = MSW(MSD(eft_dma));
|
||||
mcp->mb[6] = buffers;
|
||||
mcp->mb[7] = buffers;
|
||||
mcp->mb[7] = 0;
|
||||
mcp->out_mb |= MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2;
|
||||
}
|
||||
mcp->tov = 30;
|
||||
|
|
|
|||
|
|
@ -1037,48 +1037,49 @@ eh_host_reset_lock:
|
|||
static int
|
||||
qla2x00_loop_reset(scsi_qla_host_t *ha)
|
||||
{
|
||||
int status = QLA_SUCCESS;
|
||||
int ret;
|
||||
struct fc_port *fcport;
|
||||
|
||||
if (ha->flags.enable_lip_reset) {
|
||||
status = qla2x00_lip_reset(ha);
|
||||
if (ha->flags.enable_lip_full_login) {
|
||||
ret = qla2x00_full_login_lip(ha);
|
||||
if (ret != QLA_SUCCESS) {
|
||||
DEBUG2_3(printk("%s(%ld): bus_reset failed: "
|
||||
"full_login_lip=%d.\n", __func__, ha->host_no,
|
||||
ret));
|
||||
}
|
||||
atomic_set(&ha->loop_state, LOOP_DOWN);
|
||||
atomic_set(&ha->loop_down_timer, LOOP_DOWN_TIME);
|
||||
qla2x00_mark_all_devices_lost(ha, 0);
|
||||
qla2x00_wait_for_loop_ready(ha);
|
||||
}
|
||||
|
||||
if (status == QLA_SUCCESS && ha->flags.enable_target_reset) {
|
||||
if (ha->flags.enable_lip_reset) {
|
||||
ret = qla2x00_lip_reset(ha);
|
||||
if (ret != QLA_SUCCESS) {
|
||||
DEBUG2_3(printk("%s(%ld): bus_reset failed: "
|
||||
"lip_reset=%d.\n", __func__, ha->host_no, ret));
|
||||
}
|
||||
qla2x00_wait_for_loop_ready(ha);
|
||||
}
|
||||
|
||||
if (ha->flags.enable_target_reset) {
|
||||
list_for_each_entry(fcport, &ha->fcports, list) {
|
||||
if (fcport->port_type != FCT_TARGET)
|
||||
continue;
|
||||
|
||||
status = qla2x00_device_reset(ha, fcport);
|
||||
if (status != QLA_SUCCESS)
|
||||
break;
|
||||
ret = qla2x00_device_reset(ha, fcport);
|
||||
if (ret != QLA_SUCCESS) {
|
||||
DEBUG2_3(printk("%s(%ld): bus_reset failed: "
|
||||
"target_reset=%d d_id=%x.\n", __func__,
|
||||
ha->host_no, ret, fcport->d_id.b24));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (status == QLA_SUCCESS &&
|
||||
((!ha->flags.enable_target_reset &&
|
||||
!ha->flags.enable_lip_reset) ||
|
||||
ha->flags.enable_lip_full_login)) {
|
||||
|
||||
status = qla2x00_full_login_lip(ha);
|
||||
}
|
||||
|
||||
/* Issue marker command only when we are going to start the I/O */
|
||||
ha->marker_needed = 1;
|
||||
|
||||
if (status) {
|
||||
/* Empty */
|
||||
DEBUG2_3(printk("%s(%ld): **** FAILED ****\n",
|
||||
__func__,
|
||||
ha->host_no));
|
||||
} else {
|
||||
/* Empty */
|
||||
DEBUG3(printk("%s(%ld): exiting normally.\n",
|
||||
__func__,
|
||||
ha->host_no));
|
||||
}
|
||||
|
||||
return(status);
|
||||
return QLA_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -1413,7 +1414,9 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
|
||||
sht = &qla2x00_driver_template;
|
||||
if (pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2422 ||
|
||||
pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2432)
|
||||
pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2432 ||
|
||||
pdev->device == PCI_DEVICE_ID_QLOGIC_ISP5422 ||
|
||||
pdev->device == PCI_DEVICE_ID_QLOGIC_ISP5432)
|
||||
sht = &qla24xx_driver_template;
|
||||
host = scsi_host_alloc(sht, sizeof(scsi_qla_host_t));
|
||||
if (host == NULL) {
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
/*
|
||||
* Driver version
|
||||
*/
|
||||
#define QLA2XXX_VERSION "8.01.07-k3"
|
||||
#define QLA2XXX_VERSION "8.01.07-k4"
|
||||
|
||||
#define QLA_DRIVER_MAJOR_VER 8
|
||||
#define QLA_DRIVER_MINOR_VER 1
|
||||
|
|
|
|||
|
|
@ -133,12 +133,10 @@ struct async_scan_data {
|
|||
/**
|
||||
* scsi_complete_async_scans - Wait for asynchronous scans to complete
|
||||
*
|
||||
* Asynchronous scans add themselves to the scanning_hosts list. Once
|
||||
* that list is empty, we know that the scans are complete. Rather than
|
||||
* waking up periodically to check the state of the list, we pretend to be
|
||||
* a scanning task by adding ourselves at the end of the list and going to
|
||||
* sleep. When the task before us wakes us up, we take ourselves off the
|
||||
* list and return.
|
||||
* When this function returns, any host which started scanning before
|
||||
* this function was called will have finished its scan. Hosts which
|
||||
* started scanning after this function was called may or may not have
|
||||
* finished.
|
||||
*/
|
||||
int scsi_complete_async_scans(void)
|
||||
{
|
||||
|
|
@ -171,6 +169,11 @@ int scsi_complete_async_scans(void)
|
|||
|
||||
spin_lock(&async_scan_lock);
|
||||
list_del(&data->list);
|
||||
if (!list_empty(&scanning_hosts)) {
|
||||
struct async_scan_data *next = list_entry(scanning_hosts.next,
|
||||
struct async_scan_data, list);
|
||||
complete(&next->prev_finished);
|
||||
}
|
||||
done:
|
||||
spin_unlock(&async_scan_lock);
|
||||
|
||||
|
|
@ -739,6 +742,14 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result,
|
|||
sdev->no_uld_attach = 1;
|
||||
|
||||
switch (sdev->type = (inq_result[0] & 0x1f)) {
|
||||
case TYPE_RBC:
|
||||
/* RBC devices can return SCSI-3 compliance and yet
|
||||
* still not support REPORT LUNS, so make them act as
|
||||
* BLIST_NOREPORTLUN unless BLIST_REPORTLUN2 is
|
||||
* specifically set */
|
||||
if ((*bflags & BLIST_REPORTLUN2) == 0)
|
||||
*bflags |= BLIST_NOREPORTLUN;
|
||||
/* fall through */
|
||||
case TYPE_TAPE:
|
||||
case TYPE_DISK:
|
||||
case TYPE_PRINTER:
|
||||
|
|
@ -749,11 +760,17 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result,
|
|||
case TYPE_ENCLOSURE:
|
||||
case TYPE_COMM:
|
||||
case TYPE_RAID:
|
||||
case TYPE_RBC:
|
||||
sdev->writeable = 1;
|
||||
break;
|
||||
case TYPE_WORM:
|
||||
case TYPE_ROM:
|
||||
/* MMC devices can return SCSI-3 compliance and yet
|
||||
* still not support REPORT LUNS, so make them act as
|
||||
* BLIST_NOREPORTLUN unless BLIST_REPORTLUN2 is
|
||||
* specifically set */
|
||||
if ((*bflags & BLIST_REPORTLUN2) == 0)
|
||||
*bflags |= BLIST_NOREPORTLUN;
|
||||
/* fall through */
|
||||
case TYPE_WORM:
|
||||
sdev->writeable = 0;
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -1416,7 +1416,7 @@ static __init int iscsi_transport_init(void)
|
|||
{
|
||||
int err;
|
||||
|
||||
printk(KERN_INFO "Loading iSCSI transport class v%s.",
|
||||
printk(KERN_INFO "Loading iSCSI transport class v%s.\n",
|
||||
ISCSI_TRANSPORT_VERSION);
|
||||
|
||||
err = class_register(&iscsi_transport_class);
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ static int spi_execute(struct scsi_device *sdev, const void *cmd,
|
|||
if (!sshdr)
|
||||
sshdr = &sshdr_tmp;
|
||||
|
||||
if (scsi_normalize_sense(sense, sizeof(*sense),
|
||||
if (scsi_normalize_sense(sense, SCSI_SENSE_BUFFERSIZE,
|
||||
sshdr)
|
||||
&& sshdr->sense_key == UNIT_ATTENTION)
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -114,6 +114,7 @@
|
|||
#define DPRINTK( when, msg... ) do { if ( (DEBUG & (when)) == (when) ) printk( msg ); } while (0)
|
||||
#else
|
||||
#define DPRINTK( when, msg... ) do { } while (0)
|
||||
#define DEBUG 0
|
||||
#endif
|
||||
#define DANY( msg... ) DPRINTK( 0xffff, msg );
|
||||
|
||||
|
|
@ -523,7 +524,7 @@ int __init seagate_st0x_detect (struct scsi_host_template * tpnt)
|
|||
#ifdef ARBITRATE
|
||||
" ARBITRATE"
|
||||
#endif
|
||||
#ifdef DEBUG
|
||||
#if DEBUG
|
||||
" DEBUG"
|
||||
#endif
|
||||
#ifdef FAST
|
||||
|
|
@ -733,7 +734,7 @@ static int internal_command (unsigned char target, unsigned char lun,
|
|||
unsigned char *data = NULL;
|
||||
struct scatterlist *buffer = NULL;
|
||||
int clock, temp, nobuffs = 0, done = 0, len = 0;
|
||||
#ifdef DEBUG
|
||||
#if DEBUG
|
||||
int transfered = 0, phase = 0, newphase;
|
||||
#endif
|
||||
register unsigned char status_read;
|
||||
|
|
|
|||
|
|
@ -468,7 +468,7 @@ static int sr_block_ioctl(struct inode *inode, struct file *file, unsigned cmd,
|
|||
}
|
||||
|
||||
ret = cdrom_ioctl(file, &cd->cdi, inode, cmd, arg);
|
||||
if (ret != ENOSYS)
|
||||
if (ret != -ENOSYS)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in a new issue