You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
Pull SCSI fixes from James Bottomley: "Thirty-three fixes, I'm afraid. Essentially the build up from the last couple of weeks while I've been dealling with Linux Plumbers conference infrastructure issues. It's mostly the usual assortment of spelling fixes and minor corrections. The only core relevant changes are to the sd driver to reduce the spin up message spew and fix a small memory leak on the freeing path" * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (33 commits) scsi: ses: Retry failed Send/Receive Diagnostic commands scsi: target: Fix spelling mistake "CONFLIFT" -> "CONFLICT" scsi: lpfc: Fix gcc -Wstringop-overread warning, again scsi: lpfc: Use correct scnprintf() limit scsi: lpfc: Fix sprintf() overflow in lpfc_display_fpin_wwpn() scsi: core: Remove 'current_tag' scsi: acornscsi: Remove tagged queuing vestiges scsi: fas216: Kill scmd->tag scsi: qla2xxx: Restore initiator in dual mode scsi: ufs: core: Unbreak the reset handler scsi: sd_zbc: Support disks with more than 2**32 logical blocks scsi: ufs: core: Revert "scsi: ufs: Synchronize SCSI and UFS error handling" scsi: bsg: Fix device unregistration scsi: sd: Make sd_spinup_disk() less noisy scsi: ufs: ufs-pci: Fix Intel LKF link stability scsi: mpt3sas: Clean up some inconsistent indenting scsi: megaraid: Clean up some inconsistent indenting scsi: sr: Fix spelling mistake "does'nt" -> "doesn't" scsi: Remove SCSI CDROM MAINTAINERS entry scsi: megaraid: Fix Coccinelle warning ...
This commit is contained in:
@@ -16650,13 +16650,6 @@ M: Lubomir Rintel <lkundrak@v3.sk>
|
||||
S: Supported
|
||||
F: drivers/char/pcmcia/scr24x_cs.c
|
||||
|
||||
SCSI CDROM DRIVER
|
||||
M: Jens Axboe <axboe@kernel.dk>
|
||||
L: linux-scsi@vger.kernel.org
|
||||
S: Maintained
|
||||
W: http://www.kernel.dk
|
||||
F: drivers/scsi/sr*
|
||||
|
||||
SCSI RDMA PROTOCOL (SRP) INITIATOR
|
||||
M: Bart Van Assche <bvanassche@acm.org>
|
||||
L: linux-rdma@vger.kernel.org
|
||||
|
||||
23
block/bsg.c
23
block/bsg.c
@@ -165,13 +165,20 @@ static const struct file_operations bsg_fops = {
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
static void bsg_device_release(struct device *dev)
|
||||
{
|
||||
struct bsg_device *bd = container_of(dev, struct bsg_device, device);
|
||||
|
||||
ida_simple_remove(&bsg_minor_ida, MINOR(bd->device.devt));
|
||||
kfree(bd);
|
||||
}
|
||||
|
||||
void bsg_unregister_queue(struct bsg_device *bd)
|
||||
{
|
||||
if (bd->queue->kobj.sd)
|
||||
sysfs_remove_link(&bd->queue->kobj, "bsg");
|
||||
cdev_device_del(&bd->cdev, &bd->device);
|
||||
ida_simple_remove(&bsg_minor_ida, MINOR(bd->device.devt));
|
||||
kfree(bd);
|
||||
put_device(&bd->device);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(bsg_unregister_queue);
|
||||
|
||||
@@ -193,11 +200,13 @@ struct bsg_device *bsg_register_queue(struct request_queue *q,
|
||||
if (ret < 0) {
|
||||
if (ret == -ENOSPC)
|
||||
dev_err(parent, "bsg: too many bsg devices\n");
|
||||
goto out_kfree;
|
||||
kfree(bd);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
bd->device.devt = MKDEV(bsg_major, ret);
|
||||
bd->device.class = bsg_class;
|
||||
bd->device.parent = parent;
|
||||
bd->device.release = bsg_device_release;
|
||||
dev_set_name(&bd->device, "%s", name);
|
||||
device_initialize(&bd->device);
|
||||
|
||||
@@ -205,7 +214,7 @@ struct bsg_device *bsg_register_queue(struct request_queue *q,
|
||||
bd->cdev.owner = THIS_MODULE;
|
||||
ret = cdev_device_add(&bd->cdev, &bd->device);
|
||||
if (ret)
|
||||
goto out_ida_remove;
|
||||
goto out_put_device;
|
||||
|
||||
if (q->kobj.sd) {
|
||||
ret = sysfs_create_link(&q->kobj, &bd->device.kobj, "bsg");
|
||||
@@ -217,10 +226,8 @@ struct bsg_device *bsg_register_queue(struct request_queue *q,
|
||||
|
||||
out_device_del:
|
||||
cdev_device_del(&bd->cdev, &bd->device);
|
||||
out_ida_remove:
|
||||
ida_simple_remove(&bsg_minor_ida, MINOR(bd->device.devt));
|
||||
out_kfree:
|
||||
kfree(bd);
|
||||
out_put_device:
|
||||
put_device(&bd->device);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(bsg_register_queue);
|
||||
|
||||
@@ -10,17 +10,6 @@ config SCSI_ACORNSCSI_3
|
||||
This enables support for the Acorn SCSI card (aka30). If you have an
|
||||
Acorn system with one of these, say Y. If unsure, say N.
|
||||
|
||||
config SCSI_ACORNSCSI_TAGGED_QUEUE
|
||||
bool "Support SCSI 2 Tagged queueing"
|
||||
depends on SCSI_ACORNSCSI_3
|
||||
help
|
||||
Say Y here to enable tagged queuing support on the Acorn SCSI card.
|
||||
|
||||
This is a feature of SCSI-2 which improves performance: the host
|
||||
adapter can send several SCSI commands to a device's queue even if
|
||||
previous commands haven't finished yet. Some SCSI devices don't
|
||||
implement this properly, so the safe answer is N.
|
||||
|
||||
config SCSI_ACORNSCSI_SYNC
|
||||
bool "Support SCSI 2 Synchronous Transfers"
|
||||
depends on SCSI_ACORNSCSI_3
|
||||
|
||||
@@ -52,12 +52,8 @@
|
||||
* You can tell if you have a device that supports tagged queueing my
|
||||
* cating (eg) /proc/scsi/acornscsi/0 and see if the SCSI revision is reported
|
||||
* as '2 TAG'.
|
||||
*
|
||||
* Also note that CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE is normally set in the config
|
||||
* scripts, but disabled here. Once debugged, remove the #undef, otherwise to debug,
|
||||
* comment out the undef.
|
||||
*/
|
||||
#undef CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE
|
||||
|
||||
/*
|
||||
* SCSI-II Synchronous transfer support.
|
||||
*
|
||||
@@ -171,7 +167,7 @@ static void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp,
|
||||
unsigned int result);
|
||||
static int acornscsi_reconnect_finish(AS_Host *host);
|
||||
static void acornscsi_dma_cleanup(AS_Host *host);
|
||||
static void acornscsi_abortcmd(AS_Host *host, unsigned char tag);
|
||||
static void acornscsi_abortcmd(AS_Host *host);
|
||||
|
||||
/* ====================================================================================
|
||||
* Miscellaneous
|
||||
@@ -741,17 +737,6 @@ intr_ret_t acornscsi_kick(AS_Host *host)
|
||||
#endif
|
||||
|
||||
if (from_queue) {
|
||||
#ifdef CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE
|
||||
/*
|
||||
* tagged queueing - allocate a new tag to this command
|
||||
*/
|
||||
if (SCpnt->device->simple_tags) {
|
||||
SCpnt->device->current_tag += 1;
|
||||
if (SCpnt->device->current_tag == 0)
|
||||
SCpnt->device->current_tag = 1;
|
||||
SCpnt->tag = SCpnt->device->current_tag;
|
||||
} else
|
||||
#endif
|
||||
set_bit(SCpnt->device->id * 8 +
|
||||
(u8)(SCpnt->device->lun & 0x07), host->busyluns);
|
||||
|
||||
@@ -1192,7 +1177,7 @@ void acornscsi_dma_intr(AS_Host *host)
|
||||
* the device recognises the attention.
|
||||
*/
|
||||
if (dmac_read(host, DMAC_STATUS) & STATUS_RQ0) {
|
||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
||||
acornscsi_abortcmd(host);
|
||||
|
||||
dmac_write(host, DMAC_TXCNTLO, 0);
|
||||
dmac_write(host, DMAC_TXCNTHI, 0);
|
||||
@@ -1560,23 +1545,6 @@ void acornscsi_message(AS_Host *host)
|
||||
acornscsi_sbic_issuecmd(host, CMND_ASSERTATN);
|
||||
|
||||
switch (host->scsi.last_message) {
|
||||
#ifdef CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE
|
||||
case HEAD_OF_QUEUE_TAG:
|
||||
case ORDERED_QUEUE_TAG:
|
||||
case SIMPLE_QUEUE_TAG:
|
||||
/*
|
||||
* ANSI standard says: (Section SCSI-2 Rev. 10c Sect 5.6.17)
|
||||
* If a target does not implement tagged queuing and a queue tag
|
||||
* message is received, it shall respond with a MESSAGE REJECT
|
||||
* message and accept the I/O process as if it were untagged.
|
||||
*/
|
||||
printk(KERN_NOTICE "scsi%d.%c: disabling tagged queueing\n",
|
||||
host->host->host_no, acornscsi_target(host));
|
||||
host->SCpnt->device->simple_tags = 0;
|
||||
set_bit(host->SCpnt->device->id * 8 +
|
||||
(u8)(host->SCpnt->device->lun & 0x7), host->busyluns);
|
||||
break;
|
||||
#endif
|
||||
case EXTENDED_MESSAGE | (EXTENDED_SDTR << 8):
|
||||
/*
|
||||
* Target can't handle synchronous transfers
|
||||
@@ -1687,24 +1655,11 @@ void acornscsi_buildmessages(AS_Host *host)
|
||||
#if 0
|
||||
/* does the device need the current command aborted */
|
||||
if (cmd_aborted) {
|
||||
acornscsi_abortcmd(host->SCpnt->tag);
|
||||
acornscsi_abortcmd(host);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE
|
||||
if (host->SCpnt->tag) {
|
||||
unsigned int tag_type;
|
||||
|
||||
if (host->SCpnt->cmnd[0] == REQUEST_SENSE ||
|
||||
host->SCpnt->cmnd[0] == TEST_UNIT_READY ||
|
||||
host->SCpnt->cmnd[0] == INQUIRY)
|
||||
tag_type = HEAD_OF_QUEUE_TAG;
|
||||
else
|
||||
tag_type = SIMPLE_QUEUE_TAG;
|
||||
msgqueue_addmsg(&host->scsi.msgs, 2, tag_type, host->SCpnt->tag);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SCSI_ACORNSCSI_SYNC
|
||||
if (host->device[host->SCpnt->device->id].sync_state == SYNC_NEGOCIATE) {
|
||||
@@ -1798,7 +1753,7 @@ int acornscsi_reconnect(AS_Host *host)
|
||||
"to reconnect with\n",
|
||||
host->host->host_no, '0' + target);
|
||||
acornscsi_dumplog(host, target);
|
||||
acornscsi_abortcmd(host, 0);
|
||||
acornscsi_abortcmd(host);
|
||||
if (host->SCpnt) {
|
||||
queue_add_cmd_tail(&host->queues.disconnected, host->SCpnt);
|
||||
host->SCpnt = NULL;
|
||||
@@ -1821,7 +1776,7 @@ int acornscsi_reconnect_finish(AS_Host *host)
|
||||
host->scsi.disconnectable = 0;
|
||||
if (host->SCpnt->device->id == host->scsi.reconnected.target &&
|
||||
host->SCpnt->device->lun == host->scsi.reconnected.lun &&
|
||||
host->SCpnt->tag == host->scsi.reconnected.tag) {
|
||||
scsi_cmd_to_tag(host->SCpnt) == host->scsi.reconnected.tag) {
|
||||
#if (DEBUG & (DEBUG_QUEUES|DEBUG_DISCON))
|
||||
DBG(host->SCpnt, printk("scsi%d.%c: reconnected",
|
||||
host->host->host_no, acornscsi_target(host)));
|
||||
@@ -1848,7 +1803,7 @@ int acornscsi_reconnect_finish(AS_Host *host)
|
||||
}
|
||||
|
||||
if (!host->SCpnt)
|
||||
acornscsi_abortcmd(host, host->scsi.reconnected.tag);
|
||||
acornscsi_abortcmd(host);
|
||||
else {
|
||||
/*
|
||||
* Restore data pointer from SAVED pointers.
|
||||
@@ -1889,21 +1844,15 @@ void acornscsi_disconnect_unexpected(AS_Host *host)
|
||||
* Function: void acornscsi_abortcmd(AS_host *host, unsigned char tag)
|
||||
* Purpose : abort a currently executing command
|
||||
* Params : host - host with connected command to abort
|
||||
* tag - tag to abort
|
||||
*/
|
||||
static
|
||||
void acornscsi_abortcmd(AS_Host *host, unsigned char tag)
|
||||
void acornscsi_abortcmd(AS_Host *host)
|
||||
{
|
||||
host->scsi.phase = PHASE_ABORTED;
|
||||
sbic_arm_write(host, SBIC_CMND, CMND_ASSERTATN);
|
||||
|
||||
msgqueue_flush(&host->scsi.msgs);
|
||||
#ifdef CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE
|
||||
if (tag)
|
||||
msgqueue_addmsg(&host->scsi.msgs, 2, ABORT_TAG, tag);
|
||||
else
|
||||
#endif
|
||||
msgqueue_addmsg(&host->scsi.msgs, 1, ABORT);
|
||||
msgqueue_addmsg(&host->scsi.msgs, 1, ABORT);
|
||||
}
|
||||
|
||||
/* ==========================================================================================
|
||||
@@ -1993,7 +1942,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
|
||||
printk(KERN_ERR "scsi%d.%c: PHASE_CONNECTING, SSR %02X?\n",
|
||||
host->host->host_no, acornscsi_target(host), ssr);
|
||||
acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
|
||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
||||
acornscsi_abortcmd(host);
|
||||
}
|
||||
return INTR_PROCESSING;
|
||||
|
||||
@@ -2029,7 +1978,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
|
||||
printk(KERN_ERR "scsi%d.%c: PHASE_CONNECTED, SSR %02X?\n",
|
||||
host->host->host_no, acornscsi_target(host), ssr);
|
||||
acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
|
||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
||||
acornscsi_abortcmd(host);
|
||||
}
|
||||
return INTR_PROCESSING;
|
||||
|
||||
@@ -2075,20 +2024,20 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
|
||||
case 0x18: /* -> PHASE_DATAOUT */
|
||||
/* COMMAND -> DATA OUT */
|
||||
if (host->scsi.SCp.sent_command != host->SCpnt->cmd_len)
|
||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
||||
acornscsi_abortcmd(host);
|
||||
acornscsi_dma_setup(host, DMA_OUT);
|
||||
if (!acornscsi_starttransfer(host))
|
||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
||||
acornscsi_abortcmd(host);
|
||||
host->scsi.phase = PHASE_DATAOUT;
|
||||
return INTR_IDLE;
|
||||
|
||||
case 0x19: /* -> PHASE_DATAIN */
|
||||
/* COMMAND -> DATA IN */
|
||||
if (host->scsi.SCp.sent_command != host->SCpnt->cmd_len)
|
||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
||||
acornscsi_abortcmd(host);
|
||||
acornscsi_dma_setup(host, DMA_IN);
|
||||
if (!acornscsi_starttransfer(host))
|
||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
||||
acornscsi_abortcmd(host);
|
||||
host->scsi.phase = PHASE_DATAIN;
|
||||
return INTR_IDLE;
|
||||
|
||||
@@ -2156,7 +2105,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
|
||||
/* MESSAGE IN -> DATA OUT */
|
||||
acornscsi_dma_setup(host, DMA_OUT);
|
||||
if (!acornscsi_starttransfer(host))
|
||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
||||
acornscsi_abortcmd(host);
|
||||
host->scsi.phase = PHASE_DATAOUT;
|
||||
return INTR_IDLE;
|
||||
|
||||
@@ -2165,7 +2114,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
|
||||
/* MESSAGE IN -> DATA IN */
|
||||
acornscsi_dma_setup(host, DMA_IN);
|
||||
if (!acornscsi_starttransfer(host))
|
||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
||||
acornscsi_abortcmd(host);
|
||||
host->scsi.phase = PHASE_DATAIN;
|
||||
return INTR_IDLE;
|
||||
|
||||
@@ -2206,7 +2155,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
|
||||
switch (ssr) {
|
||||
case 0x19: /* -> PHASE_DATAIN */
|
||||
case 0x89: /* -> PHASE_DATAIN */
|
||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
||||
acornscsi_abortcmd(host);
|
||||
return INTR_IDLE;
|
||||
|
||||
case 0x1b: /* -> PHASE_STATUSIN */
|
||||
@@ -2255,7 +2204,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
|
||||
switch (ssr) {
|
||||
case 0x18: /* -> PHASE_DATAOUT */
|
||||
case 0x88: /* -> PHASE_DATAOUT */
|
||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
||||
acornscsi_abortcmd(host);
|
||||
return INTR_IDLE;
|
||||
|
||||
case 0x1b: /* -> PHASE_STATUSIN */
|
||||
@@ -2482,7 +2431,6 @@ static int acornscsi_queuecmd_lck(struct scsi_cmnd *SCpnt,
|
||||
SCpnt->scsi_done = done;
|
||||
SCpnt->host_scribble = NULL;
|
||||
SCpnt->result = 0;
|
||||
SCpnt->tag = 0;
|
||||
SCpnt->SCp.phase = (int)acornscsi_datadirection(SCpnt->cmnd[0]);
|
||||
SCpnt->SCp.sent_command = 0;
|
||||
SCpnt->SCp.scsi_xferred = 0;
|
||||
@@ -2581,7 +2529,7 @@ static enum res_abort acornscsi_do_abort(AS_Host *host, struct scsi_cmnd *SCpnt)
|
||||
break;
|
||||
|
||||
default:
|
||||
acornscsi_abortcmd(host, host->SCpnt->tag);
|
||||
acornscsi_abortcmd(host);
|
||||
res = res_snooze;
|
||||
}
|
||||
local_irq_restore(flags);
|
||||
@@ -2747,9 +2695,6 @@ char *acornscsi_info(struct Scsi_Host *host)
|
||||
#ifdef CONFIG_SCSI_ACORNSCSI_SYNC
|
||||
" SYNC"
|
||||
#endif
|
||||
#ifdef CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE
|
||||
" TAG"
|
||||
#endif
|
||||
#if (DEBUG & DEBUG_NO_WRITE)
|
||||
" NOWRITE (" __stringify(NO_WRITE) ")"
|
||||
#endif
|
||||
@@ -2770,9 +2715,6 @@ static int acornscsi_show_info(struct seq_file *m, struct Scsi_Host *instance)
|
||||
#ifdef CONFIG_SCSI_ACORNSCSI_SYNC
|
||||
" SYNC"
|
||||
#endif
|
||||
#ifdef CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE
|
||||
" TAG"
|
||||
#endif
|
||||
#if (DEBUG & DEBUG_NO_WRITE)
|
||||
" NOWRITE (" __stringify(NO_WRITE) ")"
|
||||
#endif
|
||||
@@ -2827,9 +2769,8 @@ static int acornscsi_show_info(struct seq_file *m, struct Scsi_Host *instance)
|
||||
seq_printf(m, "Device/Lun TaggedQ Sync\n");
|
||||
seq_printf(m, " %d/%llu ", scd->id, scd->lun);
|
||||
if (scd->tagged_supported)
|
||||
seq_printf(m, "%3sabled(%3d) ",
|
||||
scd->simple_tags ? "en" : "dis",
|
||||
scd->current_tag);
|
||||
seq_printf(m, "%3sabled ",
|
||||
scd->simple_tags ? "en" : "dis");
|
||||
else
|
||||
seq_printf(m, "unsupported ");
|
||||
|
||||
|
||||
@@ -77,7 +77,6 @@
|
||||
* I was thinking that this was a good chip until I found this restriction ;(
|
||||
*/
|
||||
#define SCSI2_SYNC
|
||||
#undef SCSI2_TAG
|
||||
|
||||
#undef DEBUG_CONNECT
|
||||
#undef DEBUG_MESSAGES
|
||||
@@ -990,7 +989,7 @@ fas216_reselected_intr(FAS216_Info *info)
|
||||
info->scsi.disconnectable = 0;
|
||||
if (info->SCpnt->device->id == target &&
|
||||
info->SCpnt->device->lun == lun &&
|
||||
info->SCpnt->tag == tag) {
|
||||
scsi_cmd_to_rq(info->SCpnt)->tag == tag) {
|
||||
fas216_log(info, LOG_CONNECT, "reconnected previously executing command");
|
||||
} else {
|
||||
queue_add_cmd_tail(&info->queues.disconnected, info->SCpnt);
|
||||
@@ -1791,8 +1790,9 @@ static void fas216_start_command(FAS216_Info *info, struct scsi_cmnd *SCpnt)
|
||||
/*
|
||||
* add tag message if required
|
||||
*/
|
||||
if (SCpnt->tag)
|
||||
msgqueue_addmsg(&info->scsi.msgs, 2, SIMPLE_QUEUE_TAG, SCpnt->tag);
|
||||
if (SCpnt->device->simple_tags)
|
||||
msgqueue_addmsg(&info->scsi.msgs, 2, SIMPLE_QUEUE_TAG,
|
||||
scsi_cmd_to_rq(SCpnt)->tag);
|
||||
|
||||
do {
|
||||
#ifdef SCSI2_SYNC
|
||||
@@ -1815,20 +1815,8 @@ static void fas216_start_command(FAS216_Info *info, struct scsi_cmnd *SCpnt)
|
||||
|
||||
static void fas216_allocate_tag(FAS216_Info *info, struct scsi_cmnd *SCpnt)
|
||||
{
|
||||
#ifdef SCSI2_TAG
|
||||
/*
|
||||
* tagged queuing - allocate a new tag to this command
|
||||
*/
|
||||
if (SCpnt->device->simple_tags && SCpnt->cmnd[0] != REQUEST_SENSE &&
|
||||
SCpnt->cmnd[0] != INQUIRY) {
|
||||
SCpnt->device->current_tag += 1;
|
||||
if (SCpnt->device->current_tag == 0)
|
||||
SCpnt->device->current_tag = 1;
|
||||
SCpnt->tag = SCpnt->device->current_tag;
|
||||
} else
|
||||
#endif
|
||||
set_bit(SCpnt->device->id * 8 +
|
||||
(u8)(SCpnt->device->lun & 0x7), info->busyluns);
|
||||
set_bit(SCpnt->device->id * 8 +
|
||||
(u8)(SCpnt->device->lun & 0x7), info->busyluns);
|
||||
|
||||
info->stats.removes += 1;
|
||||
switch (SCpnt->cmnd[0]) {
|
||||
@@ -2117,7 +2105,6 @@ request_sense:
|
||||
init_SCp(SCpnt);
|
||||
SCpnt->SCp.Message = 0;
|
||||
SCpnt->SCp.Status = 0;
|
||||
SCpnt->tag = 0;
|
||||
SCpnt->host_scribble = (void *)fas216_rq_sns_done;
|
||||
|
||||
/*
|
||||
@@ -2223,7 +2210,6 @@ static int fas216_queue_command_lck(struct scsi_cmnd *SCpnt,
|
||||
init_SCp(SCpnt);
|
||||
|
||||
info->stats.queues += 1;
|
||||
SCpnt->tag = 0;
|
||||
|
||||
spin_lock(&info->host_lock);
|
||||
|
||||
@@ -3003,9 +2989,8 @@ void fas216_print_devices(FAS216_Info *info, struct seq_file *m)
|
||||
dev = &info->device[scd->id];
|
||||
seq_printf(m, " %d/%llu ", scd->id, scd->lun);
|
||||
if (scd->tagged_supported)
|
||||
seq_printf(m, "%3sabled(%3d) ",
|
||||
scd->simple_tags ? "en" : "dis",
|
||||
scd->current_tag);
|
||||
seq_printf(m, "%3sabled ",
|
||||
scd->simple_tags ? "en" : "dis");
|
||||
else
|
||||
seq_puts(m, "unsupported ");
|
||||
|
||||
|
||||
@@ -214,7 +214,7 @@ struct scsi_cmnd *queue_remove_tgtluntag(Queue_t *queue, int target, int lun,
|
||||
list_for_each(l, &queue->head) {
|
||||
QE_t *q = list_entry(l, QE_t, list);
|
||||
if (q->SCpnt->device->id == target && q->SCpnt->device->lun == lun &&
|
||||
q->SCpnt->tag == tag) {
|
||||
scsi_cmd_to_rq(q->SCpnt)->tag == tag) {
|
||||
SCpnt = __queue_remove(queue, l);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -880,11 +880,11 @@ efct_lio_npiv_drop_nport(struct se_wwn *wwn)
|
||||
struct efct *efct = lio_vport->efct;
|
||||
unsigned long flags = 0;
|
||||
|
||||
spin_lock_irqsave(&efct->tgt_efct.efct_lio_lock, flags);
|
||||
|
||||
if (lio_vport->fc_vport)
|
||||
fc_vport_terminate(lio_vport->fc_vport);
|
||||
|
||||
spin_lock_irqsave(&efct->tgt_efct.efct_lio_lock, flags);
|
||||
|
||||
list_for_each_entry_safe(vport, next_vport, &efct->tgt_efct.vport_list,
|
||||
list_entry) {
|
||||
if (vport->lio_vport == lio_vport) {
|
||||
|
||||
@@ -928,22 +928,21 @@ __efc_d_wait_topology_notify(struct efc_sm_ctx *ctx,
|
||||
break;
|
||||
|
||||
case EFC_EVT_NPORT_TOPOLOGY_NOTIFY: {
|
||||
enum efc_nport_topology topology =
|
||||
(enum efc_nport_topology)arg;
|
||||
enum efc_nport_topology *topology = arg;
|
||||
|
||||
WARN_ON(node->nport->domain->attached);
|
||||
|
||||
WARN_ON(node->send_ls_acc != EFC_NODE_SEND_LS_ACC_PLOGI);
|
||||
|
||||
node_printf(node, "topology notification, topology=%d\n",
|
||||
topology);
|
||||
*topology);
|
||||
|
||||
/* At the time the PLOGI was received, the topology was unknown,
|
||||
* so we didn't know which node would perform the domain attach:
|
||||
* 1. The node from which the PLOGI was sent (p2p) or
|
||||
* 2. The node to which the FLOGI was sent (fabric).
|
||||
*/
|
||||
if (topology == EFC_NPORT_TOPO_P2P) {
|
||||
if (*topology == EFC_NPORT_TOPO_P2P) {
|
||||
/* if this is p2p, need to attach to the domain using
|
||||
* the d_id from the PLOGI received
|
||||
*/
|
||||
|
||||
@@ -107,7 +107,6 @@ void
|
||||
efc_fabric_notify_topology(struct efc_node *node)
|
||||
{
|
||||
struct efc_node *tmp_node;
|
||||
enum efc_nport_topology topology = node->nport->topology;
|
||||
unsigned long index;
|
||||
|
||||
/*
|
||||
@@ -118,7 +117,7 @@ efc_fabric_notify_topology(struct efc_node *node)
|
||||
if (tmp_node != node) {
|
||||
efc_node_post_event(tmp_node,
|
||||
EFC_EVT_NPORT_TOPOLOGY_NOTIFY,
|
||||
(void *)topology);
|
||||
&node->nport->topology);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -285,11 +285,8 @@ buffer_done:
|
||||
"6312 Catching potential buffer "
|
||||
"overflow > PAGE_SIZE = %lu bytes\n",
|
||||
PAGE_SIZE);
|
||||
strscpy(buf + PAGE_SIZE - 1 -
|
||||
strnlen(LPFC_INFO_MORE_STR, PAGE_SIZE - 1),
|
||||
LPFC_INFO_MORE_STR,
|
||||
strnlen(LPFC_INFO_MORE_STR, PAGE_SIZE - 1)
|
||||
+ 1);
|
||||
strscpy(buf + PAGE_SIZE - 1 - sizeof(LPFC_INFO_MORE_STR),
|
||||
LPFC_INFO_MORE_STR, sizeof(LPFC_INFO_MORE_STR) + 1);
|
||||
}
|
||||
return len;
|
||||
}
|
||||
@@ -6204,7 +6201,8 @@ lpfc_sg_seg_cnt_show(struct device *dev, struct device_attribute *attr,
|
||||
len = scnprintf(buf, PAGE_SIZE, "SGL sz: %d total SGEs: %d\n",
|
||||
phba->cfg_sg_dma_buf_size, phba->cfg_total_seg_cnt);
|
||||
|
||||
len += scnprintf(buf + len, PAGE_SIZE, "Cfg: %d SCSI: %d NVME: %d\n",
|
||||
len += scnprintf(buf + len, PAGE_SIZE - len,
|
||||
"Cfg: %d SCSI: %d NVME: %d\n",
|
||||
phba->cfg_sg_seg_cnt, phba->cfg_scsi_seg_cnt,
|
||||
phba->cfg_nvme_seg_cnt);
|
||||
return len;
|
||||
|
||||
@@ -4015,11 +4015,11 @@ lpfc_cmpl_els_edc(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
|
||||
be32_to_cpu(pcgd->desc_tag),
|
||||
be32_to_cpu(pcgd->desc_len),
|
||||
be32_to_cpu(pcgd->xmt_signal_capability),
|
||||
be32_to_cpu(pcgd->xmt_signal_frequency.count),
|
||||
be32_to_cpu(pcgd->xmt_signal_frequency.units),
|
||||
be16_to_cpu(pcgd->xmt_signal_frequency.count),
|
||||
be16_to_cpu(pcgd->xmt_signal_frequency.units),
|
||||
be32_to_cpu(pcgd->rcv_signal_capability),
|
||||
be32_to_cpu(pcgd->rcv_signal_frequency.count),
|
||||
be32_to_cpu(pcgd->rcv_signal_frequency.units));
|
||||
be16_to_cpu(pcgd->rcv_signal_frequency.count),
|
||||
be16_to_cpu(pcgd->rcv_signal_frequency.units));
|
||||
|
||||
/* Compare driver and Fport capabilities and choose
|
||||
* least common.
|
||||
@@ -9387,7 +9387,7 @@ lpfc_display_fpin_wwpn(struct lpfc_hba *phba, __be64 *wwnlist, u32 cnt)
|
||||
/* Extract the next WWPN from the payload */
|
||||
wwn = *wwnlist++;
|
||||
wwpn = be64_to_cpu(wwn);
|
||||
len += scnprintf(buf + len, LPFC_FPIN_WWPN_LINE_SZ,
|
||||
len += scnprintf(buf + len, LPFC_FPIN_WWPN_LINE_SZ - len,
|
||||
" %016llx", wwpn);
|
||||
|
||||
/* Log a message if we are on the last WWPN
|
||||
|
||||
@@ -1167,7 +1167,7 @@ struct lpfc_mbx_read_object { /* Version 0 */
|
||||
#define lpfc_mbx_rd_object_rlen_MASK 0x00FFFFFF
|
||||
#define lpfc_mbx_rd_object_rlen_WORD word0
|
||||
uint32_t rd_object_offset;
|
||||
uint32_t rd_object_name[LPFC_MBX_OBJECT_NAME_LEN_DW];
|
||||
__le32 rd_object_name[LPFC_MBX_OBJECT_NAME_LEN_DW];
|
||||
#define LPFC_OBJ_NAME_SZ 104 /* 26 x sizeof(uint32_t) is 104. */
|
||||
uint32_t rd_object_cnt;
|
||||
struct lpfc_mbx_host_buf rd_object_hbuf[4];
|
||||
|
||||
@@ -5518,7 +5518,7 @@ lpfc_cgn_update_stat(struct lpfc_hba *phba, uint32_t dtag)
|
||||
if (phba->cgn_fpin_frequency &&
|
||||
phba->cgn_fpin_frequency != LPFC_FPIN_INIT_FREQ) {
|
||||
value = LPFC_CGN_TIMER_TO_MIN / phba->cgn_fpin_frequency;
|
||||
cp->cgn_stat_npm = cpu_to_le32(value);
|
||||
cp->cgn_stat_npm = value;
|
||||
}
|
||||
value = lpfc_cgn_calc_crc32(cp, LPFC_CGN_INFO_SZ,
|
||||
LPFC_CGN_CRC32_SEED);
|
||||
@@ -5547,9 +5547,9 @@ lpfc_cgn_save_evt_cnt(struct lpfc_hba *phba)
|
||||
uint32_t mbps;
|
||||
uint32_t dvalue, wvalue, lvalue, avalue;
|
||||
uint64_t latsum;
|
||||
uint16_t *ptr;
|
||||
uint32_t *lptr;
|
||||
uint16_t *mptr;
|
||||
__le16 *ptr;
|
||||
__le32 *lptr;
|
||||
__le16 *mptr;
|
||||
|
||||
/* Make sure we have a congestion info buffer */
|
||||
if (!phba->cgn_i)
|
||||
@@ -5570,7 +5570,7 @@ lpfc_cgn_save_evt_cnt(struct lpfc_hba *phba)
|
||||
if (phba->cgn_fpin_frequency &&
|
||||
phba->cgn_fpin_frequency != LPFC_FPIN_INIT_FREQ) {
|
||||
value = LPFC_CGN_TIMER_TO_MIN / phba->cgn_fpin_frequency;
|
||||
cp->cgn_stat_npm = cpu_to_le32(value);
|
||||
cp->cgn_stat_npm = value;
|
||||
}
|
||||
|
||||
/* Read and clear the latency counters for this minute */
|
||||
@@ -5753,7 +5753,7 @@ lpfc_cgn_save_evt_cnt(struct lpfc_hba *phba)
|
||||
dvalue += le32_to_cpu(cp->cgn_drvr_hr[i]);
|
||||
wvalue += le32_to_cpu(cp->cgn_warn_hr[i]);
|
||||
lvalue += le32_to_cpu(cp->cgn_latency_hr[i]);
|
||||
mbps += le32_to_cpu(cp->cgn_bw_hr[i]);
|
||||
mbps += le16_to_cpu(cp->cgn_bw_hr[i]);
|
||||
avalue += le32_to_cpu(cp->cgn_alarm_hr[i]);
|
||||
}
|
||||
if (lvalue) /* Avg of latency averages */
|
||||
@@ -8277,11 +8277,11 @@ lpfc_sli4_driver_resource_setup(struct lpfc_hba *phba)
|
||||
return 0;
|
||||
|
||||
out_free_hba_hdwq_info:
|
||||
free_percpu(phba->sli4_hba.c_stat);
|
||||
#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
|
||||
free_percpu(phba->sli4_hba.c_stat);
|
||||
out_free_hba_idle_stat:
|
||||
kfree(phba->sli4_hba.idle_stat);
|
||||
#endif
|
||||
kfree(phba->sli4_hba.idle_stat);
|
||||
out_free_hba_eq_info:
|
||||
free_percpu(phba->sli4_hba.eq_info);
|
||||
out_free_hba_cpu_map:
|
||||
@@ -13411,8 +13411,8 @@ lpfc_init_congestion_buf(struct lpfc_hba *phba)
|
||||
|
||||
/* last used Index initialized to 0xff already */
|
||||
|
||||
cp->cgn_warn_freq = LPFC_FPIN_INIT_FREQ;
|
||||
cp->cgn_alarm_freq = LPFC_FPIN_INIT_FREQ;
|
||||
cp->cgn_warn_freq = cpu_to_le16(LPFC_FPIN_INIT_FREQ);
|
||||
cp->cgn_alarm_freq = cpu_to_le16(LPFC_FPIN_INIT_FREQ);
|
||||
crc = lpfc_cgn_calc_crc32(cp, LPFC_CGN_INFO_SZ, LPFC_CGN_CRC32_SEED);
|
||||
cp->cgn_info_crc = cpu_to_le32(crc);
|
||||
|
||||
|
||||
@@ -1489,9 +1489,7 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport,
|
||||
struct lpfc_nvme_qhandle *lpfc_queue_info;
|
||||
struct lpfc_nvme_fcpreq_priv *freqpriv;
|
||||
struct nvme_common_command *sqe;
|
||||
#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
|
||||
uint64_t start = 0;
|
||||
#endif
|
||||
|
||||
/* Validate pointers. LLDD fault handling with transport does
|
||||
* have timing races.
|
||||
|
||||
@@ -1495,7 +1495,6 @@ static int
|
||||
lpfc_bg_err_opcodes(struct lpfc_hba *phba, struct scsi_cmnd *sc,
|
||||
uint8_t *txop, uint8_t *rxop)
|
||||
{
|
||||
uint8_t ret = 0;
|
||||
|
||||
if (sc->prot_flags & SCSI_PROT_IP_CHECKSUM) {
|
||||
switch (scsi_get_prot_op(sc)) {
|
||||
@@ -1548,7 +1547,7 @@ lpfc_bg_err_opcodes(struct lpfc_hba *phba, struct scsi_cmnd *sc,
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -5578,12 +5577,8 @@ lpfc_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *cmnd)
|
||||
struct fc_rport *rport = starget_to_rport(scsi_target(cmnd->device));
|
||||
int err, idx;
|
||||
u8 *uuid = NULL;
|
||||
#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
|
||||
uint64_t start = 0L;
|
||||
uint64_t start;
|
||||
|
||||
if (phba->ktime_on)
|
||||
start = ktime_get_ns();
|
||||
#endif
|
||||
start = ktime_get_ns();
|
||||
rdata = lpfc_rport_data_from_scsi_device(cmnd->device);
|
||||
|
||||
|
||||
@@ -22090,6 +22090,7 @@ lpfc_read_object(struct lpfc_hba *phba, char *rdobject, uint32_t *datap,
|
||||
uint32_t shdr_status, shdr_add_status;
|
||||
union lpfc_sli4_cfg_shdr *shdr;
|
||||
struct lpfc_dmabuf *pcmd;
|
||||
u32 rd_object_name[LPFC_MBX_OBJECT_NAME_LEN_DW] = {0};
|
||||
|
||||
/* sanity check on queue memory */
|
||||
if (!datap)
|
||||
@@ -22113,10 +22114,10 @@ lpfc_read_object(struct lpfc_hba *phba, char *rdobject, uint32_t *datap,
|
||||
|
||||
memset((void *)read_object->u.request.rd_object_name, 0,
|
||||
LPFC_OBJ_NAME_SZ);
|
||||
sprintf((uint8_t *)read_object->u.request.rd_object_name, rdobject);
|
||||
scnprintf((char *)rd_object_name, sizeof(rd_object_name), rdobject);
|
||||
for (j = 0; j < strlen(rdobject); j++)
|
||||
read_object->u.request.rd_object_name[j] =
|
||||
cpu_to_le32(read_object->u.request.rd_object_name[j]);
|
||||
cpu_to_le32(rd_object_name[j]);
|
||||
|
||||
pcmd = kmalloc(sizeof(*pcmd), GFP_KERNEL);
|
||||
if (pcmd)
|
||||
|
||||
@@ -1916,7 +1916,7 @@ void megasas_set_dynamic_target_properties(struct scsi_device *sdev,
|
||||
raid = MR_LdRaidGet(ld, local_map_ptr);
|
||||
|
||||
if (raid->capability.ldPiMode == MR_PROT_INFO_TYPE_CONTROLLER)
|
||||
blk_queue_update_dma_alignment(sdev->request_queue, 0x7);
|
||||
blk_queue_update_dma_alignment(sdev->request_queue, 0x7);
|
||||
|
||||
mr_device_priv_data->is_tm_capable =
|
||||
raid->capability.tmCapable;
|
||||
@@ -8033,7 +8033,7 @@ skip_firing_dcmds:
|
||||
|
||||
if (instance->adapter_type != MFI_SERIES) {
|
||||
megasas_release_fusion(instance);
|
||||
pd_seq_map_sz = sizeof(struct MR_PD_CFG_SEQ_NUM_SYNC) +
|
||||
pd_seq_map_sz = sizeof(struct MR_PD_CFG_SEQ_NUM_SYNC) +
|
||||
(sizeof(struct MR_PD_CFG_SEQ) *
|
||||
(MAX_PHYSICAL_DEVICES - 1));
|
||||
for (i = 0; i < 2 ; i++) {
|
||||
@@ -8773,8 +8773,7 @@ int megasas_update_device_list(struct megasas_instance *instance,
|
||||
|
||||
if (event_type & SCAN_VD_CHANNEL) {
|
||||
if (!instance->requestorId ||
|
||||
(instance->requestorId &&
|
||||
megasas_get_ld_vf_affiliation(instance, 0))) {
|
||||
megasas_get_ld_vf_affiliation(instance, 0)) {
|
||||
dcmd_ret = megasas_ld_list_query(instance,
|
||||
MR_LD_QUERY_TYPE_EXPOSED_TO_HOST);
|
||||
if (dcmd_ret != DCMD_SUCCESS)
|
||||
|
||||
@@ -1582,8 +1582,10 @@ mpt3sas_base_pause_mq_polling(struct MPT3SAS_ADAPTER *ioc)
|
||||
* wait for current poll to complete.
|
||||
*/
|
||||
for (qid = 0; qid < iopoll_q_count; qid++) {
|
||||
while (atomic_read(&ioc->io_uring_poll_queues[qid].busy))
|
||||
while (atomic_read(&ioc->io_uring_poll_queues[qid].busy)) {
|
||||
cpu_relax();
|
||||
udelay(500);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2178,7 +2178,7 @@ mpt3sas_send_diag_release(struct MPT3SAS_ADAPTER *ioc, u8 buffer_type,
|
||||
mpt3sas_check_cmd_timeout(ioc,
|
||||
ioc->ctl_cmds.status, mpi_request,
|
||||
sizeof(Mpi2DiagReleaseRequest_t)/4, reset_needed);
|
||||
*issue_reset = reset_needed;
|
||||
*issue_reset = reset_needed;
|
||||
rc = -EFAULT;
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -10749,8 +10749,7 @@ _mpt3sas_fw_work(struct MPT3SAS_ADAPTER *ioc, struct fw_event_work *fw_event)
|
||||
case MPI2_EVENT_PCIE_TOPOLOGY_CHANGE_LIST:
|
||||
_scsih_pcie_topology_change_event(ioc, fw_event);
|
||||
ioc->current_event = NULL;
|
||||
return;
|
||||
break;
|
||||
return;
|
||||
}
|
||||
out:
|
||||
fw_event_work_put(fw_event);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user