Commit 9e574b74 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull SCSI fixes from James Bottomley:
 "23 fixes in 5 drivers (qla2xxx, ufs, scsi_debug, fcoe, zfcp). The bulk
  of the changes are in qla2xxx and ufs and all are mostly small and
  definitely don't impact the core"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (23 commits)
  Revert "scsi: qla2xxx: Disable T10-DIF feature with FC-NVMe during probe"
  Revert "scsi: qla2xxx: Fix crash on qla2x00_mailbox_command"
  scsi: qla2xxx: Fix null pointer access during disconnect from subsystem
  scsi: qla2xxx: Check if FW supports MQ before enabling
  scsi: qla2xxx: Fix WARN_ON in qla_nvme_register_hba
  scsi: qla2xxx: Allow ql2xextended_error_logging special value 1 to be set anytime
  scsi: qla2xxx: Reduce noisy debug message
  scsi: qla2xxx: Fix login timeout
  scsi: qla2xxx: Indicate correct supported speeds for Mezz card
  scsi: qla2xxx: Flush I/O on zone disable
  scsi: qla2xxx: Flush all sessions on zone disable
  scsi: qla2xxx: Use MBX_TOV_SECONDS for mailbox command timeout values
  scsi: scsi_debug: Fix scp is NULL errors
  scsi: zfcp: Fix use-after-free in request timeout handlers
  scsi: ufs: No need to send Abort Task if the task in DB was cleared
  scsi: ufs: Clean up completed request without interrupt notification
  scsi: ufs: Improve interrupt handling for shared interrupts
  scsi: ufs: Fix interrupt error message for shared interrupts
  scsi: ufs-pci: Add quirk for broken auto-hibernate for Intel EHL
  scsi: ufs-mediatek: Fix incorrect time to wait link status
  ...
parents d6af6330 dca93232
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -193,7 +193,7 @@ static int ixgbe_fcoe_ddp_setup(struct net_device *netdev, u16 xid,
	}

	/* alloc the udl from per cpu ddp pool */
	ddp->udl = dma_pool_alloc(ddp_pool->pool, GFP_KERNEL, &ddp->udp);
	ddp->udl = dma_pool_alloc(ddp_pool->pool, GFP_ATOMIC, &ddp->udp);
	if (!ddp->udl) {
		e_err(drv, "failed allocated ddp context\n");
		goto out_noddp_unmap;
+2 −2
Original line number Diff line number Diff line
@@ -434,7 +434,7 @@ static void zfcp_fsf_req_complete(struct zfcp_fsf_req *req)
		return;
	}

	del_timer(&req->timer);
	del_timer_sync(&req->timer);
	zfcp_fsf_protstatus_eval(req);
	zfcp_fsf_fsfstatus_eval(req);
	req->handler(req);
@@ -867,7 +867,7 @@ static int zfcp_fsf_req_send(struct zfcp_fsf_req *req)
	req->qdio_req.qdio_outb_usage = atomic_read(&qdio->req_q_free);
	req->issued = get_tod_clock();
	if (zfcp_qdio_send(qdio, &req->qdio_req)) {
		del_timer(&req->timer);
		del_timer_sync(&req->timer);
		/* lookup request again, list might have changed */
		zfcp_reqlist_find_rm(adapter->req_list, req_id);
		zfcp_erp_adapter_reopen(adapter, 0, "fsrs__1");
+3 −0
Original line number Diff line number Diff line
@@ -380,5 +380,8 @@ extern int qla24xx_soft_reset(struct qla_hw_data *);
static inline int
ql_mask_match(uint level)
{
	if (ql2xextended_error_logging == 1)
		ql2xextended_error_logging = QL_DBG_DEFAULT1_MASK;

	return (level & ql2xextended_error_logging) == level;
}
+1 −0
Original line number Diff line number Diff line
@@ -3880,6 +3880,7 @@ struct qla_hw_data {
		uint32_t	scm_supported_f:1;
				/* Enabled in Driver */
		uint32_t	scm_enabled:1;
		uint32_t	max_req_queue_warned:1;
	} flags;

	uint16_t max_exchg;
+39 −9
Original line number Diff line number Diff line
@@ -1505,11 +1505,11 @@ qla2x00_prep_ct_fdmi_req(struct ct_sns_pkt *p, uint16_t cmd,
static uint
qla25xx_fdmi_port_speed_capability(struct qla_hw_data *ha)
{
	uint speeds = 0;

	if (IS_CNA_CAPABLE(ha))
		return FDMI_PORT_SPEED_10GB;
	if (IS_QLA28XX(ha) || IS_QLA27XX(ha)) {
		uint speeds = 0;

		if (ha->max_supported_speed == 2) {
			if (ha->min_supported_speed <= 6)
				speeds |= FDMI_PORT_SPEED_64GB;
@@ -1536,9 +1536,16 @@ qla25xx_fdmi_port_speed_capability(struct qla_hw_data *ha)
		}
		return speeds;
	}
	if (IS_QLA2031(ha))
		return FDMI_PORT_SPEED_16GB|FDMI_PORT_SPEED_8GB|
	if (IS_QLA2031(ha)) {
		if ((ha->pdev->subsystem_vendor == 0x103C) &&
		    (ha->pdev->subsystem_device == 0x8002)) {
			speeds = FDMI_PORT_SPEED_16GB;
		} else {
			speeds = FDMI_PORT_SPEED_16GB|FDMI_PORT_SPEED_8GB|
				FDMI_PORT_SPEED_4GB;
		}
		return speeds;
	}
	if (IS_QLA25XX(ha))
		return FDMI_PORT_SPEED_8GB|FDMI_PORT_SPEED_4GB|
			FDMI_PORT_SPEED_2GB|FDMI_PORT_SPEED_1GB;
@@ -3436,7 +3443,6 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, srb_t *sp)
			list_for_each_entry(fcport, &vha->vp_fcports, list) {
				if ((fcport->flags & FCF_FABRIC_DEVICE) != 0) {
					fcport->scan_state = QLA_FCPORT_SCAN;
					fcport->logout_on_delete = 0;
				}
			}
			goto login_logout;
@@ -3532,10 +3538,22 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, srb_t *sp)
		}

		if (fcport->scan_state != QLA_FCPORT_FOUND) {
			bool do_delete = false;

			if (fcport->scan_needed &&
			    fcport->disc_state == DSC_LOGIN_PEND) {
				/* Cable got disconnected after we sent
				 * a login. Do delete to prevent timeout.
				 */
				fcport->logout_on_delete = 1;
				do_delete = true;
			}

			fcport->scan_needed = 0;
			if ((qla_dual_mode_enabled(vha) ||
			if (((qla_dual_mode_enabled(vha) ||
			      qla_ini_mode_enabled(vha)) &&
			    atomic_read(&fcport->state) == FCS_ONLINE) {
			    atomic_read(&fcport->state) == FCS_ONLINE) ||
				do_delete) {
				if (fcport->loop_id != FC_NO_LOOP_ID) {
					if (fcport->flags & FCF_FCP2_DEVICE)
						fcport->logout_on_delete = 0;
@@ -3736,6 +3754,18 @@ static void qla2x00_async_gpnft_gnnft_sp_done(srb_t *sp, int res)
		unsigned long flags;
		const char *name = sp->name;

		if (res == QLA_OS_TIMER_EXPIRED) {
			/* switch is ignoring all commands.
			 * This might be a zone disable behavior.
			 * This means we hit 64s timeout.
			 * 22s GPNFT + 44s Abort = 64s
			 */
			ql_dbg(ql_dbg_disc, vha, 0xffff,
			       "%s: Switch Zone check please .\n",
			       name);
			qla2x00_mark_all_devices_lost(vha);
		}

		/*
		 * We are in an Interrupt context, queue up this
		 * sp for GNNFT_DONE work. This will allow all
Loading