Commit 4f6cee60 authored by Martin K. Petersen's avatar Martin K. Petersen
Browse files

Merge branch '6.6/scsi-staging' into 6.6/scsi-fixes



Pull in staged fixes for 6.6.

Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parents 0bb80ecc d32533d3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2332,7 +2332,7 @@ struct megasas_instance {
	u32 support_morethan256jbod; /* FW support for more than 256 PD/JBOD */
	bool use_seqnum_jbod_fp;   /* Added for PD sequence */
	bool smp_affinity_enable;
	spinlock_t crashdump_lock;
	struct mutex crashdump_lock;

	struct megasas_register_set __iomem *reg_set;
	u32 __iomem *reply_post_host_index_addr[MR_MAX_MSIX_REG_ARRAY];
+9 −12
Original line number Diff line number Diff line
@@ -3271,14 +3271,13 @@ fw_crash_buffer_store(struct device *cdev,
	struct megasas_instance *instance =
		(struct megasas_instance *) shost->hostdata;
	int val = 0;
	unsigned long flags;

	if (kstrtoint(buf, 0, &val) != 0)
		return -EINVAL;

	spin_lock_irqsave(&instance->crashdump_lock, flags);
	mutex_lock(&instance->crashdump_lock);
	instance->fw_crash_buffer_offset = val;
	spin_unlock_irqrestore(&instance->crashdump_lock, flags);
	mutex_unlock(&instance->crashdump_lock);
	return strlen(buf);
}

@@ -3293,24 +3292,23 @@ fw_crash_buffer_show(struct device *cdev,
	unsigned long dmachunk = CRASH_DMA_BUF_SIZE;
	unsigned long chunk_left_bytes;
	unsigned long src_addr;
	unsigned long flags;
	u32 buff_offset;

	spin_lock_irqsave(&instance->crashdump_lock, flags);
	mutex_lock(&instance->crashdump_lock);
	buff_offset = instance->fw_crash_buffer_offset;
	if (!instance->crash_dump_buf ||
		!((instance->fw_crash_state == AVAILABLE) ||
		(instance->fw_crash_state == COPYING))) {
		dev_err(&instance->pdev->dev,
			"Firmware crash dump is not available\n");
		spin_unlock_irqrestore(&instance->crashdump_lock, flags);
		mutex_unlock(&instance->crashdump_lock);
		return -EINVAL;
	}

	if (buff_offset > (instance->fw_crash_buffer_size * dmachunk)) {
		dev_err(&instance->pdev->dev,
			"Firmware crash dump offset is out of range\n");
		spin_unlock_irqrestore(&instance->crashdump_lock, flags);
		mutex_unlock(&instance->crashdump_lock);
		return 0;
	}

@@ -3322,7 +3320,7 @@ fw_crash_buffer_show(struct device *cdev,
	src_addr = (unsigned long)instance->crash_buf[buff_offset / dmachunk] +
		(buff_offset % dmachunk);
	memcpy(buf, (void *)src_addr, size);
	spin_unlock_irqrestore(&instance->crashdump_lock, flags);
	mutex_unlock(&instance->crashdump_lock);

	return size;
}
@@ -3347,7 +3345,6 @@ fw_crash_state_store(struct device *cdev,
	struct megasas_instance *instance =
		(struct megasas_instance *) shost->hostdata;
	int val = 0;
	unsigned long flags;

	if (kstrtoint(buf, 0, &val) != 0)
		return -EINVAL;
@@ -3361,9 +3358,9 @@ fw_crash_state_store(struct device *cdev,
	instance->fw_crash_state = val;

	if ((val == COPIED) || (val == COPY_ERROR)) {
		spin_lock_irqsave(&instance->crashdump_lock, flags);
		mutex_lock(&instance->crashdump_lock);
		megasas_free_host_crash_buffer(instance);
		spin_unlock_irqrestore(&instance->crashdump_lock, flags);
		mutex_unlock(&instance->crashdump_lock);
		if (val == COPY_ERROR)
			dev_info(&instance->pdev->dev, "application failed to "
				"copy Firmware crash dump\n");
@@ -7422,7 +7419,7 @@ static inline void megasas_init_ctrl_params(struct megasas_instance *instance)
	init_waitqueue_head(&instance->int_cmd_wait_q);
	init_waitqueue_head(&instance->abort_cmd_wait_q);

	spin_lock_init(&instance->crashdump_lock);
	mutex_init(&instance->crashdump_lock);
	spin_lock_init(&instance->mfi_pool_lock);
	spin_lock_init(&instance->hba_lock);
	spin_lock_init(&instance->stream_lock);
+2 −2
Original line number Diff line number Diff line
@@ -307,9 +307,9 @@ static int ppa_out(ppa_struct *dev, char *buffer, int len)
	case PPA_EPP_8:
		epp_reset(ppb);
		w_ctr(ppb, 0x4);
		if (dev->mode == PPA_EPP_32 && !(((long) buffer | len) & 0x01))
		if (dev->mode == PPA_EPP_32 && !(((long) buffer | len) & 0x03))
			outsl(ppb + 4, buffer, len >> 2);
		else if (dev->mode == PPA_EPP_16 && !(((long) buffer | len) & 0x03))
		else if (dev->mode == PPA_EPP_16 && !(((long) buffer | len) & 0x01))
			outsw(ppb + 4, buffer, len >> 1);
		else
			outsb(ppb + 4, buffer, len);
+8 −2
Original line number Diff line number Diff line
@@ -1904,6 +1904,7 @@ int qedf_initiate_abts(struct qedf_ioreq *io_req, bool return_scsi_cmd_on_abts)
		goto drop_rdata_kref;
	}

	spin_lock_irqsave(&fcport->rport_lock, flags);
	if (!test_bit(QEDF_CMD_OUTSTANDING, &io_req->flags) ||
	    test_bit(QEDF_CMD_IN_CLEANUP, &io_req->flags) ||
	    test_bit(QEDF_CMD_IN_ABORT, &io_req->flags)) {
@@ -1911,17 +1912,20 @@ int qedf_initiate_abts(struct qedf_ioreq *io_req, bool return_scsi_cmd_on_abts)
			 "io_req xid=0x%x sc_cmd=%p already in cleanup or abort processing or already completed.\n",
			 io_req->xid, io_req->sc_cmd);
		rc = 1;
		spin_unlock_irqrestore(&fcport->rport_lock, flags);
		goto drop_rdata_kref;
	}

	/* Set the command type to abort */
	io_req->cmd_type = QEDF_ABTS;
	spin_unlock_irqrestore(&fcport->rport_lock, flags);

	kref_get(&io_req->refcount);

	xid = io_req->xid;
	qedf->control_requests++;
	qedf->packet_aborts++;

	/* Set the command type to abort */
	io_req->cmd_type = QEDF_ABTS;
	io_req->return_scsi_cmd_on_abts = return_scsi_cmd_on_abts;

	set_bit(QEDF_CMD_IN_ABORT, &io_req->flags);
@@ -2210,7 +2214,9 @@ int qedf_initiate_cleanup(struct qedf_ioreq *io_req,
		  refcount, fcport, fcport->rdata->ids.port_id);

	/* Cleanup cmds re-use the same TID as the original I/O */
	spin_lock_irqsave(&fcport->rport_lock, flags);
	io_req->cmd_type = QEDF_CLEANUP;
	spin_unlock_irqrestore(&fcport->rport_lock, flags);
	io_req->return_scsi_cmd_on_abts = return_scsi_cmd_on_abts;

	init_completion(&io_req->cleanup_done);
+6 −1
Original line number Diff line number Diff line
@@ -2805,6 +2805,8 @@ void qedf_process_cqe(struct qedf_ctx *qedf, struct fcoe_cqe *cqe)
	struct qedf_ioreq *io_req;
	struct qedf_rport *fcport;
	u32 comp_type;
	u8 io_comp_type;
	unsigned long flags;

	comp_type = (cqe->cqe_data >> FCOE_CQE_CQE_TYPE_SHIFT) &
	    FCOE_CQE_CQE_TYPE_MASK;
@@ -2838,11 +2840,14 @@ void qedf_process_cqe(struct qedf_ctx *qedf, struct fcoe_cqe *cqe)
		return;
	}

	spin_lock_irqsave(&fcport->rport_lock, flags);
	io_comp_type = io_req->cmd_type;
	spin_unlock_irqrestore(&fcport->rport_lock, flags);

	switch (comp_type) {
	case FCOE_GOOD_COMPLETION_CQE_TYPE:
		atomic_inc(&fcport->free_sqes);
		switch (io_req->cmd_type) {
		switch (io_comp_type) {
		case QEDF_SCSI_CMD:
			qedf_scsi_completion(qedf, cqe, io_req);
			break;
Loading