Commit 47eee861 authored by Martin K. Petersen's avatar Martin K. Petersen
Browse files

Merge branch '6.1/scsi-queue' into 6.1/scsi-fixes



Include the patches that weren't included in the 6.1 pull request.

Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parents dc8e483f 67d0a917
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -2582,7 +2582,7 @@ static int lpfcdiag_loop_self_unreg(struct lpfc_hba *phba, uint16_t rpi)
 *
 * This function obtains the transmit and receive ids required to send
 * an unsolicited ct command with a payload. A special lpfc FsType and CmdRsp
 * flags are used to the unsolicted response handler is able to process
 * flags are used to the unsolicited response handler is able to process
 * the ct command sent on the same port.
 **/
static int lpfcdiag_loop_get_xri(struct lpfc_hba *phba, uint16_t rpi,
@@ -2874,7 +2874,7 @@ diag_cmd_data_alloc(struct lpfc_hba *phba,
 * @len: Number of data bytes
 *
 * This function allocates and posts a data buffer of sufficient size to receive
 * an unsolicted CT command.
 * an unsolicited CT command.
 **/
static int lpfcdiag_sli3_loop_post_rxbufs(struct lpfc_hba *phba, uint16_t rxxri,
					  size_t len)
+1 −1
Original line number Diff line number Diff line
@@ -90,7 +90,7 @@ lpfc_ct_ignore_hbq_buffer(struct lpfc_hba *phba, struct lpfc_iocbq *piocbq,
				get_job_ulpstatus(phba, piocbq));
	}
	lpfc_printf_log(phba, KERN_INFO, LOG_ELS,
			"0145 Ignoring unsolicted CT HBQ Size:%d "
			"0145 Ignoring unsolicited CT HBQ Size:%d "
			"status = x%x\n",
			size, get_job_ulpstatus(phba, piocbq));
}
+8 −19
Original line number Diff line number Diff line
@@ -5874,10 +5874,6 @@ static void megasas_setup_reply_map(struct megasas_instance *instance)
static
int megasas_get_device_list(struct megasas_instance *instance)
{
	memset(instance->pd_list, 0,
	       (MEGASAS_MAX_PD * sizeof(struct megasas_pd_list)));
	memset(instance->ld_ids, 0xff, MEGASAS_MAX_LD_IDS);

	if (instance->enable_fw_dev_list) {
		if (megasas_host_device_list_query(instance, true))
			return FAILED;
@@ -7220,7 +7216,7 @@ int megasas_alloc_ctrl_dma_buffers(struct megasas_instance *instance)

		if (!fusion->ioc_init_request) {
			dev_err(&pdev->dev,
				"Failed to allocate PD list buffer\n");
				"Failed to allocate ioc init request\n");
			return -ENOMEM;
		}

@@ -7439,7 +7435,6 @@ static inline void megasas_init_ctrl_params(struct megasas_instance *instance)
	    (instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0071SKINNY))
		instance->flag_ieee = 1;

	megasas_dbg_lvl = 0;
	instance->flag = 0;
	instance->unload = 1;
	instance->last_time = 0;
@@ -8762,33 +8757,26 @@ static
int megasas_update_device_list(struct megasas_instance *instance,
			       int event_type)
{
	int dcmd_ret = DCMD_SUCCESS;
	int dcmd_ret;

	if (instance->enable_fw_dev_list) {
		dcmd_ret = megasas_host_device_list_query(instance, false);
		if (dcmd_ret != DCMD_SUCCESS)
			goto out;
		return megasas_host_device_list_query(instance, false);
	} else {
		if (event_type & SCAN_PD_CHANNEL) {
			dcmd_ret = megasas_get_pd_list(instance);

			if (dcmd_ret != DCMD_SUCCESS)
				goto out;
				return dcmd_ret;
		}

		if (event_type & SCAN_VD_CHANNEL) {
			if (!instance->requestorId ||
			megasas_get_ld_vf_affiliation(instance, 0)) {
				dcmd_ret = megasas_ld_list_query(instance,
				return megasas_ld_list_query(instance,
						MR_LD_QUERY_TYPE_EXPOSED_TO_HOST);
				if (dcmd_ret != DCMD_SUCCESS)
					goto out;
			}
		}
	}

out:
	return dcmd_ret;
	return DCMD_SUCCESS;
}

/**
@@ -8918,7 +8906,7 @@ megasas_aen_polling(struct work_struct *work)
			sdev1 = scsi_device_lookup(instance->host,
						   MEGASAS_MAX_PD_CHANNELS +
						   (ld_target_id / MEGASAS_MAX_DEV_PER_CHANNEL),
						   (ld_target_id - MEGASAS_MAX_DEV_PER_CHANNEL),
						   (ld_target_id % MEGASAS_MAX_DEV_PER_CHANNEL),
						   0);
			if (sdev1)
				megasas_remove_scsi_device(sdev1);
@@ -9016,6 +9004,7 @@ static int __init megasas_init(void)
	 */
	pr_info("megasas: %s\n", MEGASAS_VERSION);

	megasas_dbg_lvl = 0;
	support_poll_for_event = 2;
	support_device_change = 1;
	support_nvme_encapsulation = true;
+27 −3
Original line number Diff line number Diff line
@@ -951,9 +951,9 @@ qla2x00_sysfs_read_dcbx_tlv(struct file *filp, struct kobject *kobj,
	if (!capable(CAP_SYS_ADMIN) || off != 0 || count > DCBX_TLV_DATA_SIZE)
		return 0;

	mutex_lock(&vha->hw->optrom_mutex);
	if (ha->dcbx_tlv)
		goto do_read;
	mutex_lock(&vha->hw->optrom_mutex);
	if (qla2x00_chip_is_down(vha)) {
		mutex_unlock(&vha->hw->optrom_mutex);
		return 0;
@@ -3330,11 +3330,34 @@ struct fc_function_template qla2xxx_transport_vport_functions = {
	.bsg_timeout = qla24xx_bsg_timeout,
};

static uint
qla2x00_get_host_supported_speeds(scsi_qla_host_t *vha, uint speeds)
{
	uint supported_speeds = FC_PORTSPEED_UNKNOWN;

	if (speeds & FDMI_PORT_SPEED_64GB)
		supported_speeds |= FC_PORTSPEED_64GBIT;
	if (speeds & FDMI_PORT_SPEED_32GB)
		supported_speeds |= FC_PORTSPEED_32GBIT;
	if (speeds & FDMI_PORT_SPEED_16GB)
		supported_speeds |= FC_PORTSPEED_16GBIT;
	if (speeds & FDMI_PORT_SPEED_8GB)
		supported_speeds |= FC_PORTSPEED_8GBIT;
	if (speeds & FDMI_PORT_SPEED_4GB)
		supported_speeds |= FC_PORTSPEED_4GBIT;
	if (speeds & FDMI_PORT_SPEED_2GB)
		supported_speeds |= FC_PORTSPEED_2GBIT;
	if (speeds & FDMI_PORT_SPEED_1GB)
		supported_speeds |= FC_PORTSPEED_1GBIT;

	return supported_speeds;
}

void
qla2x00_init_host_attr(scsi_qla_host_t *vha)
{
	struct qla_hw_data *ha = vha->hw;
	u32 speeds = FC_PORTSPEED_UNKNOWN;
	u32 speeds = 0, fdmi_speed = 0;

	fc_host_dev_loss_tmo(vha->host) = ha->port_down_retry_count;
	fc_host_node_name(vha->host) = wwn_to_u64(vha->node_name);
@@ -3344,7 +3367,8 @@ qla2x00_init_host_attr(scsi_qla_host_t *vha)
	fc_host_max_npiv_vports(vha->host) = ha->max_npiv_vports;
	fc_host_npiv_vports_inuse(vha->host) = ha->cur_vport_count;

	speeds = qla25xx_fdmi_port_speed_capability(ha);
	fdmi_speed = qla25xx_fdmi_port_speed_capability(ha);
	speeds = qla2x00_get_host_supported_speeds(vha, fdmi_speed);

	fc_host_supported_speeds(vha->host) = speeds;
}
+19 −0
Original line number Diff line number Diff line
@@ -284,6 +284,25 @@ void target_pr_kref_release(struct kref *kref)
	complete(&deve->pr_comp);
}

/*
 * Establish UA condition on SCSI device - all LUNs
 */
void target_dev_ua_allocate(struct se_device *dev, u8 asc, u8 ascq)
{
	struct se_dev_entry *se_deve;
	struct se_lun *lun;

	spin_lock(&dev->se_port_lock);
	list_for_each_entry(lun, &dev->dev_sep_list, lun_dev_link) {

		spin_lock(&lun->lun_deve_lock);
		list_for_each_entry(se_deve, &lun->lun_deve_list, lun_link)
			core_scsi3_ua_allocate(se_deve, asc, ascq);
		spin_unlock(&lun->lun_deve_lock);
	}
	spin_unlock(&dev->se_port_lock);
}

static void
target_luns_data_has_changed(struct se_node_acl *nacl, struct se_dev_entry *new,
			     bool skip_new)
Loading