Commit 90d56a3d authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull SCSI fixes from James Bottomley:
 "Five small and fairly minor fixes, all in drivers"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
  scsi: scsi_devinfo: Add blacklist entry for HPE OPEN-V
  scsi: ufs: ufs-mediatek: Fix HCI version in some platforms
  scsi: qedf: Do not put host in qedf_vport_create() unconditionally
  scsi: lpfc: Fix failure to transmit ABTS on FC link
  scsi: target: core: Fix warning on realtime kernels
parents 20e41d9b e57f5cd9
...@@ -20589,10 +20589,8 @@ lpfc_sli4_issue_abort_iotag(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, ...@@ -20589,10 +20589,8 @@ lpfc_sli4_issue_abort_iotag(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
abtswqe = &abtsiocb->wqe; abtswqe = &abtsiocb->wqe;
memset(abtswqe, 0, sizeof(*abtswqe)); memset(abtswqe, 0, sizeof(*abtswqe));
if (lpfc_is_link_up(phba)) if (!lpfc_is_link_up(phba))
bf_set(abort_cmd_ia, &abtswqe->abort_cmd, 1); bf_set(abort_cmd_ia, &abtswqe->abort_cmd, 1);
else
bf_set(abort_cmd_ia, &abtswqe->abort_cmd, 0);
bf_set(abort_cmd_criteria, &abtswqe->abort_cmd, T_XRI_TAG); bf_set(abort_cmd_criteria, &abtswqe->abort_cmd, T_XRI_TAG);
abtswqe->abort_cmd.rsrvd5 = 0; abtswqe->abort_cmd.rsrvd5 = 0;
abtswqe->abort_cmd.wqe_com.abort_tag = xritag; abtswqe->abort_cmd.wqe_com.abort_tag = xritag;
......
...@@ -1827,22 +1827,20 @@ static int qedf_vport_create(struct fc_vport *vport, bool disabled) ...@@ -1827,22 +1827,20 @@ static int qedf_vport_create(struct fc_vport *vport, bool disabled)
fcoe_wwn_to_str(vport->port_name, buf, sizeof(buf)); fcoe_wwn_to_str(vport->port_name, buf, sizeof(buf));
QEDF_WARN(&(base_qedf->dbg_ctx), "Failed to create vport, " QEDF_WARN(&(base_qedf->dbg_ctx), "Failed to create vport, "
"WWPN (0x%s) already exists.\n", buf); "WWPN (0x%s) already exists.\n", buf);
goto err1; return rc;
} }
if (atomic_read(&base_qedf->link_state) != QEDF_LINK_UP) { if (atomic_read(&base_qedf->link_state) != QEDF_LINK_UP) {
QEDF_WARN(&(base_qedf->dbg_ctx), "Cannot create vport " QEDF_WARN(&(base_qedf->dbg_ctx), "Cannot create vport "
"because link is not up.\n"); "because link is not up.\n");
rc = -EIO; return -EIO;
goto err1;
} }
vn_port = libfc_vport_create(vport, sizeof(struct qedf_ctx)); vn_port = libfc_vport_create(vport, sizeof(struct qedf_ctx));
if (!vn_port) { if (!vn_port) {
QEDF_WARN(&(base_qedf->dbg_ctx), "Could not create lport " QEDF_WARN(&(base_qedf->dbg_ctx), "Could not create lport "
"for vport.\n"); "for vport.\n");
rc = -ENOMEM; return -ENOMEM;
goto err1;
} }
fcoe_wwn_to_str(vport->port_name, buf, sizeof(buf)); fcoe_wwn_to_str(vport->port_name, buf, sizeof(buf));
...@@ -1866,7 +1864,7 @@ static int qedf_vport_create(struct fc_vport *vport, bool disabled) ...@@ -1866,7 +1864,7 @@ static int qedf_vport_create(struct fc_vport *vport, bool disabled)
if (rc) { if (rc) {
QEDF_ERR(&(base_qedf->dbg_ctx), "Could not allocate memory " QEDF_ERR(&(base_qedf->dbg_ctx), "Could not allocate memory "
"for lport stats.\n"); "for lport stats.\n");
goto err2; goto err;
} }
fc_set_wwnn(vn_port, vport->node_name); fc_set_wwnn(vn_port, vport->node_name);
...@@ -1884,7 +1882,7 @@ static int qedf_vport_create(struct fc_vport *vport, bool disabled) ...@@ -1884,7 +1882,7 @@ static int qedf_vport_create(struct fc_vport *vport, bool disabled)
if (rc) { if (rc) {
QEDF_WARN(&base_qedf->dbg_ctx, QEDF_WARN(&base_qedf->dbg_ctx,
"Error adding Scsi_Host rc=0x%x.\n", rc); "Error adding Scsi_Host rc=0x%x.\n", rc);
goto err2; goto err;
} }
/* Set default dev_loss_tmo based on module parameter */ /* Set default dev_loss_tmo based on module parameter */
...@@ -1925,9 +1923,10 @@ static int qedf_vport_create(struct fc_vport *vport, bool disabled) ...@@ -1925,9 +1923,10 @@ static int qedf_vport_create(struct fc_vport *vport, bool disabled)
vport_qedf->dbg_ctx.host_no = vn_port->host->host_no; vport_qedf->dbg_ctx.host_no = vn_port->host->host_no;
vport_qedf->dbg_ctx.pdev = base_qedf->pdev; vport_qedf->dbg_ctx.pdev = base_qedf->pdev;
err2: return 0;
err:
scsi_host_put(vn_port->host); scsi_host_put(vn_port->host);
err1:
return rc; return rc;
} }
...@@ -1968,8 +1967,7 @@ static int qedf_vport_destroy(struct fc_vport *vport) ...@@ -1968,8 +1967,7 @@ static int qedf_vport_destroy(struct fc_vport *vport)
fc_lport_free_stats(vn_port); fc_lport_free_stats(vn_port);
/* Release Scsi_Host */ /* Release Scsi_Host */
if (vn_port->host) scsi_host_put(vn_port->host);
scsi_host_put(vn_port->host);
out: out:
return 0; return 0;
......
...@@ -184,6 +184,7 @@ static struct { ...@@ -184,6 +184,7 @@ static struct {
{"HP", "C3323-300", "4269", BLIST_NOTQ}, {"HP", "C3323-300", "4269", BLIST_NOTQ},
{"HP", "C5713A", NULL, BLIST_NOREPORTLUN}, {"HP", "C5713A", NULL, BLIST_NOREPORTLUN},
{"HP", "DISK-SUBSYSTEM", "*", BLIST_REPORTLUN2}, {"HP", "DISK-SUBSYSTEM", "*", BLIST_REPORTLUN2},
{"HPE", "OPEN-", "*", BLIST_REPORTLUN2 | BLIST_TRY_VPD_PAGES},
{"IBM", "AuSaV1S2", NULL, BLIST_FORCELUN}, {"IBM", "AuSaV1S2", NULL, BLIST_FORCELUN},
{"IBM", "ProFibre 4000R", "*", BLIST_SPARSELUN | BLIST_LARGELUN}, {"IBM", "ProFibre 4000R", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
{"IBM", "2105", NULL, BLIST_RETRY_HWERROR}, {"IBM", "2105", NULL, BLIST_RETRY_HWERROR},
......
...@@ -603,11 +603,23 @@ static void ufs_mtk_get_controller_version(struct ufs_hba *hba) ...@@ -603,11 +603,23 @@ static void ufs_mtk_get_controller_version(struct ufs_hba *hba)
ret = ufshcd_dme_get(hba, UIC_ARG_MIB(PA_LOCALVERINFO), &ver); ret = ufshcd_dme_get(hba, UIC_ARG_MIB(PA_LOCALVERINFO), &ver);
if (!ret) { if (!ret) {
if (ver >= UFS_UNIPRO_VER_1_8) if (ver >= UFS_UNIPRO_VER_1_8) {
host->hw_ver.major = 3; host->hw_ver.major = 3;
/*
* Fix HCI version for some platforms with
* incorrect version
*/
if (hba->ufs_version < ufshci_version(3, 0))
hba->ufs_version = ufshci_version(3, 0);
}
} }
} }
static u32 ufs_mtk_get_ufs_hci_version(struct ufs_hba *hba)
{
return hba->ufs_version;
}
/** /**
* ufs_mtk_init - find other essential mmio bases * ufs_mtk_init - find other essential mmio bases
* @hba: host controller instance * @hba: host controller instance
...@@ -1048,6 +1060,7 @@ static void ufs_mtk_event_notify(struct ufs_hba *hba, ...@@ -1048,6 +1060,7 @@ static void ufs_mtk_event_notify(struct ufs_hba *hba,
static const struct ufs_hba_variant_ops ufs_hba_mtk_vops = { static const struct ufs_hba_variant_ops ufs_hba_mtk_vops = {
.name = "mediatek.ufshci", .name = "mediatek.ufshci",
.init = ufs_mtk_init, .init = ufs_mtk_init,
.get_ufs_hci_version = ufs_mtk_get_ufs_hci_version,
.setup_clocks = ufs_mtk_setup_clocks, .setup_clocks = ufs_mtk_setup_clocks,
.hce_enable_notify = ufs_mtk_hce_enable_notify, .hce_enable_notify = ufs_mtk_hce_enable_notify,
.link_startup_notify = ufs_mtk_link_startup_notify, .link_startup_notify = ufs_mtk_link_startup_notify,
......
...@@ -3121,9 +3121,7 @@ __transport_wait_for_tasks(struct se_cmd *cmd, bool fabric_stop, ...@@ -3121,9 +3121,7 @@ __transport_wait_for_tasks(struct se_cmd *cmd, bool fabric_stop,
__releases(&cmd->t_state_lock) __releases(&cmd->t_state_lock)
__acquires(&cmd->t_state_lock) __acquires(&cmd->t_state_lock)
{ {
lockdep_assert_held(&cmd->t_state_lock);
assert_spin_locked(&cmd->t_state_lock);
WARN_ON_ONCE(!irqs_disabled());
if (fabric_stop) if (fabric_stop)
cmd->transport_state |= CMD_T_FABRIC_STOP; cmd->transport_state |= CMD_T_FABRIC_STOP;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment