Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 45c80be6 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Martin K. Petersen
Browse files

scsi: pmcraid: fix endianess sparse annotations



The use of le32_to_cpu() etc in this driver looks completely arbitrary.
It may have made sense at some point, but it is not applied consistently,
so this driver presumably won't work on big-endian kernel builds.

Unfortunately it's unclear whether the type names or the calls to
le32_to_cpu() are the correct ones. I'm taking educated guesses here
and assume that most of the __le32 and __le16 annotations are correct,
adding the conversion helpers whereever we access those fields.

The exceptions are the 'fw_version' field that is always accessed as
big-endian, so I'm changing the type here, and the 'hrrq' values that
are accessed as little-endian, so I'm changing those the other way.

None of these changes should have any effect on little-endian
architectures like x86, but it addresses the sparse warnings.

Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 3397623b
Loading
Loading
Loading
Loading
+47 −48
Original line number Original line Diff line number Diff line
@@ -175,7 +175,7 @@ static int pmcraid_slave_alloc(struct scsi_device *scsi_dev)
			if (fw_version <= PMCRAID_FW_VERSION_1)
			if (fw_version <= PMCRAID_FW_VERSION_1)
				target = temp->cfg_entry.unique_flags1;
				target = temp->cfg_entry.unique_flags1;
			else
			else
				target = temp->cfg_entry.array_id & 0xFF;
				target = le16_to_cpu(temp->cfg_entry.array_id) & 0xFF;


			if (target > PMCRAID_MAX_VSET_TARGETS)
			if (target > PMCRAID_MAX_VSET_TARGETS)
				continue;
				continue;
@@ -330,7 +330,7 @@ static void pmcraid_init_cmdblk(struct pmcraid_cmd *cmd, int index)
		ioarcb->request_flags0 = 0;
		ioarcb->request_flags0 = 0;
		ioarcb->request_flags1 = 0;
		ioarcb->request_flags1 = 0;
		ioarcb->cmd_timeout = 0;
		ioarcb->cmd_timeout = 0;
		ioarcb->ioarcb_bus_addr &= (~0x1FULL);
		ioarcb->ioarcb_bus_addr &= cpu_to_le64(~0x1FULL);
		ioarcb->ioadl_bus_addr = 0;
		ioarcb->ioadl_bus_addr = 0;
		ioarcb->ioadl_length = 0;
		ioarcb->ioadl_length = 0;
		ioarcb->data_transfer_length = 0;
		ioarcb->data_transfer_length = 0;
@@ -898,8 +898,7 @@ static void _pmcraid_fire_command(struct pmcraid_cmd *cmd)


	/* driver writes lower 32-bit value of IOARCB address only */
	/* driver writes lower 32-bit value of IOARCB address only */
	mb();
	mb();
	iowrite32(le32_to_cpu(cmd->ioa_cb->ioarcb.ioarcb_bus_addr),
	iowrite32(le64_to_cpu(cmd->ioa_cb->ioarcb.ioarcb_bus_addr), pinstance->ioarrin);
		  pinstance->ioarrin);
}
}


/**
/**
@@ -1051,7 +1050,7 @@ static void pmcraid_get_fwversion(struct pmcraid_cmd *cmd)
					offsetof(struct pmcraid_ioarcb,
					offsetof(struct pmcraid_ioarcb,
						add_data.u.ioadl[0]));
						add_data.u.ioadl[0]));
	ioarcb->ioadl_length = cpu_to_le32(sizeof(struct pmcraid_ioadl_desc));
	ioarcb->ioadl_length = cpu_to_le32(sizeof(struct pmcraid_ioadl_desc));
	ioarcb->ioarcb_bus_addr &= ~(0x1FULL);
	ioarcb->ioarcb_bus_addr &= cpu_to_le64(~(0x1FULL));


	ioarcb->request_flags0 |= NO_LINK_DESCS;
	ioarcb->request_flags0 |= NO_LINK_DESCS;
	ioarcb->data_transfer_length = cpu_to_le32(data_size);
	ioarcb->data_transfer_length = cpu_to_le32(data_size);
@@ -1077,7 +1076,7 @@ static void pmcraid_identify_hrrq(struct pmcraid_cmd *cmd)
	struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb;
	struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb;
	int index = cmd->hrrq_index;
	int index = cmd->hrrq_index;
	__be64 hrrq_addr = cpu_to_be64(pinstance->hrrq_start_bus_addr[index]);
	__be64 hrrq_addr = cpu_to_be64(pinstance->hrrq_start_bus_addr[index]);
	u32 hrrq_size = cpu_to_be32(sizeof(u32) * PMCRAID_MAX_CMD);
	__be32 hrrq_size = cpu_to_be32(sizeof(u32) * PMCRAID_MAX_CMD);
	void (*done_function)(struct pmcraid_cmd *);
	void (*done_function)(struct pmcraid_cmd *);


	pmcraid_reinit_cmdblk(cmd);
	pmcraid_reinit_cmdblk(cmd);
@@ -1202,7 +1201,7 @@ static struct pmcraid_cmd *pmcraid_init_hcam


	ioadl[0].flags |= IOADL_FLAGS_READ_LAST;
	ioadl[0].flags |= IOADL_FLAGS_READ_LAST;
	ioadl[0].data_len = cpu_to_le32(rcb_size);
	ioadl[0].data_len = cpu_to_le32(rcb_size);
	ioadl[0].address = cpu_to_le32(dma);
	ioadl[0].address = cpu_to_le64(dma);


	cmd->cmd_done = cmd_done;
	cmd->cmd_done = cmd_done;
	return cmd;
	return cmd;
@@ -1237,7 +1236,13 @@ static void pmcraid_prepare_cancel_cmd(
)
)
{
{
	struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb;
	struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb;
	__be64 ioarcb_addr = cmd_to_cancel->ioa_cb->ioarcb.ioarcb_bus_addr;
	__be64 ioarcb_addr;

	/* IOARCB address of the command to be cancelled is given in
	 * cdb[2]..cdb[9] is Big-Endian format. Note that length bits in
	 * IOARCB address are not masked.
	 */
	ioarcb_addr = cpu_to_be64(le64_to_cpu(cmd_to_cancel->ioa_cb->ioarcb.ioarcb_bus_addr));


	/* Get the resource handle to where the command to be aborted has been
	/* Get the resource handle to where the command to be aborted has been
	 * sent.
	 * sent.
@@ -1247,11 +1252,6 @@ static void pmcraid_prepare_cancel_cmd(
	memset(ioarcb->cdb, 0, PMCRAID_MAX_CDB_LEN);
	memset(ioarcb->cdb, 0, PMCRAID_MAX_CDB_LEN);
	ioarcb->cdb[0] = PMCRAID_ABORT_CMD;
	ioarcb->cdb[0] = PMCRAID_ABORT_CMD;


	/* IOARCB address of the command to be cancelled is given in
	 * cdb[2]..cdb[9] is Big-Endian format. Note that length bits in
	 * IOARCB address are not masked.
	 */
	ioarcb_addr = cpu_to_be64(ioarcb_addr);
	memcpy(&(ioarcb->cdb[2]), &ioarcb_addr, sizeof(ioarcb_addr));
	memcpy(&(ioarcb->cdb[2]), &ioarcb_addr, sizeof(ioarcb_addr));
}
}


@@ -1493,7 +1493,7 @@ static int pmcraid_notify_ccn(struct pmcraid_instance *pinstance)
{
{
	return pmcraid_notify_aen(pinstance,
	return pmcraid_notify_aen(pinstance,
				pinstance->ccn.msg,
				pinstance->ccn.msg,
				pinstance->ccn.hcam->data_len +
				le32_to_cpu(pinstance->ccn.hcam->data_len) +
				sizeof(struct pmcraid_hcam_hdr));
				sizeof(struct pmcraid_hcam_hdr));
}
}


@@ -1508,7 +1508,7 @@ static int pmcraid_notify_ldn(struct pmcraid_instance *pinstance)
{
{
	return pmcraid_notify_aen(pinstance,
	return pmcraid_notify_aen(pinstance,
				pinstance->ldn.msg,
				pinstance->ldn.msg,
				pinstance->ldn.hcam->data_len +
				le32_to_cpu(pinstance->ldn.hcam->data_len) +
				sizeof(struct pmcraid_hcam_hdr));
				sizeof(struct pmcraid_hcam_hdr));
}
}


@@ -1556,10 +1556,10 @@ static void pmcraid_handle_config_change(struct pmcraid_instance *pinstance)


	pmcraid_info("CCN(%x): %x timestamp: %llx type: %x lost: %x flags: %x \
	pmcraid_info("CCN(%x): %x timestamp: %llx type: %x lost: %x flags: %x \
		 res: %x:%x:%x:%x\n",
		 res: %x:%x:%x:%x\n",
		 pinstance->ccn.hcam->ilid,
		 le32_to_cpu(pinstance->ccn.hcam->ilid),
		 pinstance->ccn.hcam->op_code,
		 pinstance->ccn.hcam->op_code,
		((pinstance->ccn.hcam->timestamp1) |
		(le32_to_cpu(pinstance->ccn.hcam->timestamp1) |
		((pinstance->ccn.hcam->timestamp2 & 0xffffffffLL) << 32)),
		((le32_to_cpu(pinstance->ccn.hcam->timestamp2) & 0xffffffffLL) << 32)),
		 pinstance->ccn.hcam->notification_type,
		 pinstance->ccn.hcam->notification_type,
		 pinstance->ccn.hcam->notification_lost,
		 pinstance->ccn.hcam->notification_lost,
		 pinstance->ccn.hcam->flags,
		 pinstance->ccn.hcam->flags,
@@ -1570,7 +1570,7 @@ static void pmcraid_handle_config_change(struct pmcraid_instance *pinstance)
		 RES_IS_VSET(*cfg_entry) ?
		 RES_IS_VSET(*cfg_entry) ?
			(fw_version <= PMCRAID_FW_VERSION_1 ?
			(fw_version <= PMCRAID_FW_VERSION_1 ?
				cfg_entry->unique_flags1 :
				cfg_entry->unique_flags1 :
					cfg_entry->array_id & 0xFF) :
				le16_to_cpu(cfg_entry->array_id) & 0xFF) :
			RES_TARGET(cfg_entry->resource_address),
			RES_TARGET(cfg_entry->resource_address),
		 RES_LUN(cfg_entry->resource_address));
		 RES_LUN(cfg_entry->resource_address));


@@ -1658,7 +1658,7 @@ static void pmcraid_handle_config_change(struct pmcraid_instance *pinstance)
			if (fw_version <= PMCRAID_FW_VERSION_1)
			if (fw_version <= PMCRAID_FW_VERSION_1)
				res->cfg_entry.unique_flags1 &= 0x7F;
				res->cfg_entry.unique_flags1 &= 0x7F;
			else
			else
				res->cfg_entry.array_id &= 0xFF;
				res->cfg_entry.array_id &= cpu_to_le16(0xFF);
			res->change_detected = RES_CHANGE_DEL;
			res->change_detected = RES_CHANGE_DEL;
			res->cfg_entry.resource_handle =
			res->cfg_entry.resource_handle =
				PMCRAID_INVALID_RES_HANDLE;
				PMCRAID_INVALID_RES_HANDLE;
@@ -1716,8 +1716,8 @@ static void pmcraid_ioasc_logger(u32 ioasc, struct pmcraid_cmd *cmd)
	/* log the error string */
	/* log the error string */
	pmcraid_err("cmd [%x] for resource %x failed with %x(%s)\n",
	pmcraid_err("cmd [%x] for resource %x failed with %x(%s)\n",
		cmd->ioa_cb->ioarcb.cdb[0],
		cmd->ioa_cb->ioarcb.cdb[0],
		cmd->ioa_cb->ioarcb.resource_handle,
		le32_to_cpu(cmd->ioa_cb->ioarcb.resource_handle),
		le32_to_cpu(ioasc), error_info->error_string);
		ioasc, error_info->error_string);
}
}


/**
/**
@@ -2034,7 +2034,7 @@ static void pmcraid_fail_outstanding_cmds(struct pmcraid_instance *pinstance)
		cmd->ioa_cb->ioasa.ioasc =
		cmd->ioa_cb->ioasa.ioasc =
			cpu_to_le32(PMCRAID_IOASC_IOA_WAS_RESET);
			cpu_to_le32(PMCRAID_IOASC_IOA_WAS_RESET);
		cmd->ioa_cb->ioasa.ilid =
		cmd->ioa_cb->ioasa.ilid =
			cpu_to_be32(PMCRAID_DRIVER_ILID);
			cpu_to_le32(PMCRAID_DRIVER_ILID);


		/* In case the command timer is still running */
		/* In case the command timer is still running */
		del_timer(&cmd->timer);
		del_timer(&cmd->timer);
@@ -2526,7 +2526,7 @@ static void pmcraid_cancel_all(struct pmcraid_cmd *cmd, u32 sense)
	ioarcb->ioadl_bus_addr = 0;
	ioarcb->ioadl_bus_addr = 0;
	ioarcb->ioadl_length = 0;
	ioarcb->ioadl_length = 0;
	ioarcb->data_transfer_length = 0;
	ioarcb->data_transfer_length = 0;
	ioarcb->ioarcb_bus_addr &= (~0x1FULL);
	ioarcb->ioarcb_bus_addr &= cpu_to_le64((~0x1FULL));


	/* writing to IOARRIN must be protected by host_lock, as mid-layer
	/* writing to IOARRIN must be protected by host_lock, as mid-layer
	 * schedule queuecommand while we are doing this
	 * schedule queuecommand while we are doing this
@@ -2689,8 +2689,8 @@ static int pmcraid_error_handler(struct pmcraid_cmd *cmd)
		 * mid-layer
		 * mid-layer
		 */
		 */
		if (ioasa->auto_sense_length != 0) {
		if (ioasa->auto_sense_length != 0) {
			short sense_len = ioasa->auto_sense_length;
			short sense_len = le16_to_cpu(ioasa->auto_sense_length);
			int data_size = min_t(u16, le16_to_cpu(sense_len),
			int data_size = min_t(u16, sense_len,
					      SCSI_SENSE_BUFFERSIZE);
					      SCSI_SENSE_BUFFERSIZE);


			memcpy(scsi_cmd->sense_buffer,
			memcpy(scsi_cmd->sense_buffer,
@@ -2912,7 +2912,7 @@ static struct pmcraid_cmd *pmcraid_abort_cmd(struct pmcraid_cmd *cmd)


	pmcraid_info("aborting command CDB[0]= %x with index = %d\n",
	pmcraid_info("aborting command CDB[0]= %x with index = %d\n",
		cmd->ioa_cb->ioarcb.cdb[0],
		cmd->ioa_cb->ioarcb.cdb[0],
		cmd->ioa_cb->ioarcb.response_handle >> 2);
		le32_to_cpu(cmd->ioa_cb->ioarcb.response_handle) >> 2);


	init_completion(&cancel_cmd->wait_for_completion);
	init_completion(&cancel_cmd->wait_for_completion);
	cancel_cmd->completion_req = 1;
	cancel_cmd->completion_req = 1;
@@ -3137,9 +3137,8 @@ pmcraid_init_ioadls(struct pmcraid_cmd *cmd, int sgcount)
	int ioadl_count = 0;
	int ioadl_count = 0;


	if (ioarcb->add_cmd_param_length)
	if (ioarcb->add_cmd_param_length)
		ioadl_count = DIV_ROUND_UP(ioarcb->add_cmd_param_length, 16);
		ioadl_count = DIV_ROUND_UP(le16_to_cpu(ioarcb->add_cmd_param_length), 16);
	ioarcb->ioadl_length =
	ioarcb->ioadl_length = cpu_to_le32(sizeof(struct pmcraid_ioadl_desc) * sgcount);
		sizeof(struct pmcraid_ioadl_desc) * sgcount;


	if ((sgcount + ioadl_count) > (ARRAY_SIZE(ioarcb->add_data.u.ioadl))) {
	if ((sgcount + ioadl_count) > (ARRAY_SIZE(ioarcb->add_data.u.ioadl))) {
		/* external ioadls start at offset 0x80 from control_block
		/* external ioadls start at offset 0x80 from control_block
@@ -3147,7 +3146,7 @@ pmcraid_init_ioadls(struct pmcraid_cmd *cmd, int sgcount)
		 * It is necessary to indicate to firmware that driver is
		 * It is necessary to indicate to firmware that driver is
		 * using ioadls to be treated as external to IOARCB.
		 * using ioadls to be treated as external to IOARCB.
		 */
		 */
		ioarcb->ioarcb_bus_addr &= ~(0x1FULL);
		ioarcb->ioarcb_bus_addr &= cpu_to_le64(~(0x1FULL));
		ioarcb->ioadl_bus_addr =
		ioarcb->ioadl_bus_addr =
			cpu_to_le64((cmd->ioa_cb_bus_addr) +
			cpu_to_le64((cmd->ioa_cb_bus_addr) +
				offsetof(struct pmcraid_ioarcb,
				offsetof(struct pmcraid_ioarcb,
@@ -3161,7 +3160,7 @@ pmcraid_init_ioadls(struct pmcraid_cmd *cmd, int sgcount)


		ioadl = &ioarcb->add_data.u.ioadl[ioadl_count];
		ioadl = &ioarcb->add_data.u.ioadl[ioadl_count];
		ioarcb->ioarcb_bus_addr |=
		ioarcb->ioarcb_bus_addr |=
				DIV_ROUND_CLOSEST(sgcount + ioadl_count, 8);
			cpu_to_le64(DIV_ROUND_CLOSEST(sgcount + ioadl_count, 8));
	}
	}


	return ioadl;
	return ioadl;
@@ -3487,7 +3486,7 @@ static int pmcraid_queuecommand_lck(
		     RES_IS_VSET(res->cfg_entry) ?
		     RES_IS_VSET(res->cfg_entry) ?
			(fw_version <= PMCRAID_FW_VERSION_1 ?
			(fw_version <= PMCRAID_FW_VERSION_1 ?
				res->cfg_entry.unique_flags1 :
				res->cfg_entry.unique_flags1 :
					res->cfg_entry.array_id & 0xFF) :
				le16_to_cpu(res->cfg_entry.array_id) & 0xFF) :
			RES_TARGET(res->cfg_entry.resource_address),
			RES_TARGET(res->cfg_entry.resource_address),
		     RES_LUN(res->cfg_entry.resource_address));
		     RES_LUN(res->cfg_entry.resource_address));


@@ -3703,7 +3702,7 @@ static long pmcraid_ioctl_passthrough(
		goto out_free_buffer;
		goto out_free_buffer;
	}
	}


	request_size = buffer->ioarcb.data_transfer_length;
	request_size = le32_to_cpu(buffer->ioarcb.data_transfer_length);


	if (buffer->ioarcb.request_flags0 & TRANSFER_DIR_WRITE) {
	if (buffer->ioarcb.request_flags0 & TRANSFER_DIR_WRITE) {
		access = VERIFY_READ;
		access = VERIFY_READ;
@@ -3726,7 +3725,8 @@ static long pmcraid_ioctl_passthrough(
	}
	}


	/* check if we have any additional command parameters */
	/* check if we have any additional command parameters */
	if (buffer->ioarcb.add_cmd_param_length > PMCRAID_ADD_CMD_PARAM_LEN) {
	if (le16_to_cpu(buffer->ioarcb.add_cmd_param_length)
	     > PMCRAID_ADD_CMD_PARAM_LEN) {
		rc = -EINVAL;
		rc = -EINVAL;
		goto out_free_buffer;
		goto out_free_buffer;
	}
	}
@@ -3758,7 +3758,7 @@ static long pmcraid_ioctl_passthrough(
			buffer->ioarcb.add_cmd_param_offset;
			buffer->ioarcb.add_cmd_param_offset;
		memcpy(ioarcb->add_data.u.add_cmd_params,
		memcpy(ioarcb->add_data.u.add_cmd_params,
			buffer->ioarcb.add_data.u.add_cmd_params,
			buffer->ioarcb.add_data.u.add_cmd_params,
			buffer->ioarcb.add_cmd_param_length);
			le16_to_cpu(buffer->ioarcb.add_cmd_param_length));
	}
	}


	/* set hrrq number where the IOA should respond to. Note that all cmds
	/* set hrrq number where the IOA should respond to. Note that all cmds
@@ -3828,10 +3828,10 @@ static long pmcraid_ioctl_passthrough(
		wait_for_completion(&cmd->wait_for_completion);
		wait_for_completion(&cmd->wait_for_completion);
	} else if (!wait_for_completion_timeout(
	} else if (!wait_for_completion_timeout(
			&cmd->wait_for_completion,
			&cmd->wait_for_completion,
			msecs_to_jiffies(buffer->ioarcb.cmd_timeout * 1000))) {
			msecs_to_jiffies(le16_to_cpu(buffer->ioarcb.cmd_timeout) * 1000))) {


		pmcraid_info("aborting cmd %d (CDB[0] = %x) due to timeout\n",
		pmcraid_info("aborting cmd %d (CDB[0] = %x) due to timeout\n",
			le32_to_cpu(cmd->ioa_cb->ioarcb.response_handle >> 2),
			le32_to_cpu(cmd->ioa_cb->ioarcb.response_handle) >> 2,
			cmd->ioa_cb->ioarcb.cdb[0]);
			cmd->ioa_cb->ioarcb.cdb[0]);


		spin_lock_irqsave(pinstance->host->host_lock, lock_flags);
		spin_lock_irqsave(pinstance->host->host_lock, lock_flags);
@@ -3840,7 +3840,7 @@ static long pmcraid_ioctl_passthrough(


		if (cancel_cmd) {
		if (cancel_cmd) {
			wait_for_completion(&cancel_cmd->wait_for_completion);
			wait_for_completion(&cancel_cmd->wait_for_completion);
			ioasc = cancel_cmd->ioa_cb->ioasa.ioasc;
			ioasc = le32_to_cpu(cancel_cmd->ioa_cb->ioasa.ioasc);
			pmcraid_return_cmd(cancel_cmd);
			pmcraid_return_cmd(cancel_cmd);


			/* if abort task couldn't find the command i.e it got
			/* if abort task couldn't find the command i.e it got
@@ -4455,7 +4455,7 @@ static void pmcraid_worker_function(struct work_struct *workp)
				if (fw_version <= PMCRAID_FW_VERSION_1)
				if (fw_version <= PMCRAID_FW_VERSION_1)
					target = res->cfg_entry.unique_flags1;
					target = res->cfg_entry.unique_flags1;
				else
				else
					target = res->cfg_entry.array_id & 0xFF;
					target = le16_to_cpu(res->cfg_entry.array_id) & 0xFF;
				lun = PMCRAID_VSET_LUN_ID;
				lun = PMCRAID_VSET_LUN_ID;
			} else {
			} else {
				bus = PMCRAID_PHYS_BUS_ID;
				bus = PMCRAID_PHYS_BUS_ID;
@@ -4494,7 +4494,7 @@ static void pmcraid_tasklet_function(unsigned long instance)
	unsigned long host_lock_flags;
	unsigned long host_lock_flags;
	spinlock_t *lockp; /* hrrq buffer lock */
	spinlock_t *lockp; /* hrrq buffer lock */
	int id;
	int id;
	__le32 resp;
	u32 resp;


	hrrq_vector = (struct pmcraid_isr_param *)instance;
	hrrq_vector = (struct pmcraid_isr_param *)instance;
	pinstance = hrrq_vector->drv_inst;
	pinstance = hrrq_vector->drv_inst;
@@ -5534,8 +5534,7 @@ static void pmcraid_set_timestamp(struct pmcraid_cmd *cmd)
	struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb;
	struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb;
	__be32 time_stamp_len = cpu_to_be32(PMCRAID_TIMESTAMP_LEN);
	__be32 time_stamp_len = cpu_to_be32(PMCRAID_TIMESTAMP_LEN);
	struct pmcraid_ioadl_desc *ioadl = ioarcb->add_data.u.ioadl;
	struct pmcraid_ioadl_desc *ioadl = ioarcb->add_data.u.ioadl;

	u64 timestamp;
	__le64 timestamp;


	timestamp = ktime_get_real_seconds() * 1000;
	timestamp = ktime_get_real_seconds() * 1000;


@@ -5557,7 +5556,7 @@ static void pmcraid_set_timestamp(struct pmcraid_cmd *cmd)
					offsetof(struct pmcraid_ioarcb,
					offsetof(struct pmcraid_ioarcb,
						add_data.u.ioadl[0]));
						add_data.u.ioadl[0]));
	ioarcb->ioadl_length = cpu_to_le32(sizeof(struct pmcraid_ioadl_desc));
	ioarcb->ioadl_length = cpu_to_le32(sizeof(struct pmcraid_ioadl_desc));
	ioarcb->ioarcb_bus_addr &= ~(0x1FULL);
	ioarcb->ioarcb_bus_addr &= cpu_to_le64(~(0x1FULL));


	ioarcb->request_flags0 |= NO_LINK_DESCS;
	ioarcb->request_flags0 |= NO_LINK_DESCS;
	ioarcb->request_flags0 |= TRANSFER_DIR_WRITE;
	ioarcb->request_flags0 |= TRANSFER_DIR_WRITE;
@@ -5616,7 +5615,7 @@ static void pmcraid_init_res_table(struct pmcraid_cmd *cmd)
	list_for_each_entry_safe(res, temp, &pinstance->used_res_q, queue)
	list_for_each_entry_safe(res, temp, &pinstance->used_res_q, queue)
		list_move_tail(&res->queue, &old_res);
		list_move_tail(&res->queue, &old_res);


	for (i = 0; i < pinstance->cfg_table->num_entries; i++) {
	for (i = 0; i < le16_to_cpu(pinstance->cfg_table->num_entries); i++) {
		if (be16_to_cpu(pinstance->inq_data->fw_version) <=
		if (be16_to_cpu(pinstance->inq_data->fw_version) <=
						PMCRAID_FW_VERSION_1)
						PMCRAID_FW_VERSION_1)
			cfgte = &pinstance->cfg_table->entries[i];
			cfgte = &pinstance->cfg_table->entries[i];
@@ -5671,7 +5670,7 @@ static void pmcraid_init_res_table(struct pmcraid_cmd *cmd)
				 res->cfg_entry.resource_type,
				 res->cfg_entry.resource_type,
				 (fw_version <= PMCRAID_FW_VERSION_1 ?
				 (fw_version <= PMCRAID_FW_VERSION_1 ?
					res->cfg_entry.unique_flags1 :
					res->cfg_entry.unique_flags1 :
						res->cfg_entry.array_id & 0xFF),
					le16_to_cpu(res->cfg_entry.array_id) & 0xFF),
				 le32_to_cpu(res->cfg_entry.resource_address));
				 le32_to_cpu(res->cfg_entry.resource_address));
		}
		}
	}
	}
@@ -5709,7 +5708,7 @@ static void pmcraid_querycfg(struct pmcraid_cmd *cmd)
	struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb;
	struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb;
	struct pmcraid_ioadl_desc *ioadl = ioarcb->add_data.u.ioadl;
	struct pmcraid_ioadl_desc *ioadl = ioarcb->add_data.u.ioadl;
	struct pmcraid_instance *pinstance = cmd->drv_inst;
	struct pmcraid_instance *pinstance = cmd->drv_inst;
	int cfg_table_size = cpu_to_be32(sizeof(struct pmcraid_config_table));
	__be32 cfg_table_size = cpu_to_be32(sizeof(struct pmcraid_config_table));


	if (be16_to_cpu(pinstance->inq_data->fw_version) <=
	if (be16_to_cpu(pinstance->inq_data->fw_version) <=
					PMCRAID_FW_VERSION_1)
					PMCRAID_FW_VERSION_1)
@@ -5734,7 +5733,7 @@ static void pmcraid_querycfg(struct pmcraid_cmd *cmd)
					offsetof(struct pmcraid_ioarcb,
					offsetof(struct pmcraid_ioarcb,
						add_data.u.ioadl[0]));
						add_data.u.ioadl[0]));
	ioarcb->ioadl_length = cpu_to_le32(sizeof(struct pmcraid_ioadl_desc));
	ioarcb->ioadl_length = cpu_to_le32(sizeof(struct pmcraid_ioadl_desc));
	ioarcb->ioarcb_bus_addr &= ~(0x1FULL);
	ioarcb->ioarcb_bus_addr &= cpu_to_le64(~0x1FULL);


	ioarcb->request_flags0 |= NO_LINK_DESCS;
	ioarcb->request_flags0 |= NO_LINK_DESCS;
	ioarcb->data_transfer_length =
	ioarcb->data_transfer_length =
+4 −4
Original line number Original line Diff line number Diff line
@@ -554,7 +554,7 @@ struct pmcraid_inquiry_data {
	__u8	add_page_len;
	__u8	add_page_len;
	__u8	length;
	__u8	length;
	__u8	reserved2;
	__u8	reserved2;
	__le16	fw_version;
	__be16	fw_version;
	__u8	reserved3[16];
	__u8	reserved3[16];
};
};


@@ -697,13 +697,13 @@ struct pmcraid_instance {
	dma_addr_t hrrq_start_bus_addr[PMCRAID_NUM_MSIX_VECTORS];
	dma_addr_t hrrq_start_bus_addr[PMCRAID_NUM_MSIX_VECTORS];


	/* Pointer to 1st entry of HRRQ */
	/* Pointer to 1st entry of HRRQ */
	__be32 *hrrq_start[PMCRAID_NUM_MSIX_VECTORS];
	__le32 *hrrq_start[PMCRAID_NUM_MSIX_VECTORS];


	/* Pointer to last entry of HRRQ */
	/* Pointer to last entry of HRRQ */
	__be32 *hrrq_end[PMCRAID_NUM_MSIX_VECTORS];
	__le32 *hrrq_end[PMCRAID_NUM_MSIX_VECTORS];


	/* Pointer to current pointer of hrrq */
	/* Pointer to current pointer of hrrq */
	__be32 *hrrq_curr[PMCRAID_NUM_MSIX_VECTORS];
	__le32 *hrrq_curr[PMCRAID_NUM_MSIX_VECTORS];


	/* Lock for HRRQ access */
	/* Lock for HRRQ access */
	spinlock_t hrrq_lock[PMCRAID_NUM_MSIX_VECTORS];
	spinlock_t hrrq_lock[PMCRAID_NUM_MSIX_VECTORS];