forked from Minki/linux
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: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
commit
47eee861fa
@ -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
|
* This function obtains the transmit and receive ids required to send
|
||||||
* an unsolicited ct command with a payload. A special lpfc FsType and CmdRsp
|
* 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.
|
* the ct command sent on the same port.
|
||||||
**/
|
**/
|
||||||
static int lpfcdiag_loop_get_xri(struct lpfc_hba *phba, uint16_t rpi,
|
static int lpfcdiag_loop_get_xri(struct lpfc_hba *phba, uint16_t rpi,
|
||||||
@ -2874,7 +2874,7 @@ out:
|
|||||||
* @len: Number of data bytes
|
* @len: Number of data bytes
|
||||||
*
|
*
|
||||||
* This function allocates and posts a data buffer of sufficient size to receive
|
* 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,
|
static int lpfcdiag_sli3_loop_post_rxbufs(struct lpfc_hba *phba, uint16_t rxxri,
|
||||||
size_t len)
|
size_t len)
|
||||||
|
@ -90,7 +90,7 @@ lpfc_ct_ignore_hbq_buffer(struct lpfc_hba *phba, struct lpfc_iocbq *piocbq,
|
|||||||
get_job_ulpstatus(phba, piocbq));
|
get_job_ulpstatus(phba, piocbq));
|
||||||
}
|
}
|
||||||
lpfc_printf_log(phba, KERN_INFO, LOG_ELS,
|
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",
|
"status = x%x\n",
|
||||||
size, get_job_ulpstatus(phba, piocbq));
|
size, get_job_ulpstatus(phba, piocbq));
|
||||||
}
|
}
|
||||||
|
@ -5874,10 +5874,6 @@ fallback:
|
|||||||
static
|
static
|
||||||
int megasas_get_device_list(struct megasas_instance *instance)
|
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 (instance->enable_fw_dev_list) {
|
||||||
if (megasas_host_device_list_query(instance, true))
|
if (megasas_host_device_list_query(instance, true))
|
||||||
return FAILED;
|
return FAILED;
|
||||||
@ -7220,7 +7216,7 @@ int megasas_alloc_ctrl_dma_buffers(struct megasas_instance *instance)
|
|||||||
|
|
||||||
if (!fusion->ioc_init_request) {
|
if (!fusion->ioc_init_request) {
|
||||||
dev_err(&pdev->dev,
|
dev_err(&pdev->dev,
|
||||||
"Failed to allocate PD list buffer\n");
|
"Failed to allocate ioc init request\n");
|
||||||
return -ENOMEM;
|
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->pdev->device == PCI_DEVICE_ID_LSI_SAS0071SKINNY))
|
||||||
instance->flag_ieee = 1;
|
instance->flag_ieee = 1;
|
||||||
|
|
||||||
megasas_dbg_lvl = 0;
|
|
||||||
instance->flag = 0;
|
instance->flag = 0;
|
||||||
instance->unload = 1;
|
instance->unload = 1;
|
||||||
instance->last_time = 0;
|
instance->last_time = 0;
|
||||||
@ -8762,33 +8757,26 @@ static
|
|||||||
int megasas_update_device_list(struct megasas_instance *instance,
|
int megasas_update_device_list(struct megasas_instance *instance,
|
||||||
int event_type)
|
int event_type)
|
||||||
{
|
{
|
||||||
int dcmd_ret = DCMD_SUCCESS;
|
int dcmd_ret;
|
||||||
|
|
||||||
if (instance->enable_fw_dev_list) {
|
if (instance->enable_fw_dev_list) {
|
||||||
dcmd_ret = megasas_host_device_list_query(instance, false);
|
return megasas_host_device_list_query(instance, false);
|
||||||
if (dcmd_ret != DCMD_SUCCESS)
|
|
||||||
goto out;
|
|
||||||
} else {
|
} else {
|
||||||
if (event_type & SCAN_PD_CHANNEL) {
|
if (event_type & SCAN_PD_CHANNEL) {
|
||||||
dcmd_ret = megasas_get_pd_list(instance);
|
dcmd_ret = megasas_get_pd_list(instance);
|
||||||
|
|
||||||
if (dcmd_ret != DCMD_SUCCESS)
|
if (dcmd_ret != DCMD_SUCCESS)
|
||||||
goto out;
|
return dcmd_ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event_type & SCAN_VD_CHANNEL) {
|
if (event_type & SCAN_VD_CHANNEL) {
|
||||||
if (!instance->requestorId ||
|
if (!instance->requestorId ||
|
||||||
megasas_get_ld_vf_affiliation(instance, 0)) {
|
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);
|
MR_LD_QUERY_TYPE_EXPOSED_TO_HOST);
|
||||||
if (dcmd_ret != DCMD_SUCCESS)
|
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return DCMD_SUCCESS;
|
||||||
out:
|
|
||||||
return dcmd_ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -8918,7 +8906,7 @@ megasas_aen_polling(struct work_struct *work)
|
|||||||
sdev1 = scsi_device_lookup(instance->host,
|
sdev1 = scsi_device_lookup(instance->host,
|
||||||
MEGASAS_MAX_PD_CHANNELS +
|
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),
|
(ld_target_id % MEGASAS_MAX_DEV_PER_CHANNEL),
|
||||||
0);
|
0);
|
||||||
if (sdev1)
|
if (sdev1)
|
||||||
megasas_remove_scsi_device(sdev1);
|
megasas_remove_scsi_device(sdev1);
|
||||||
@ -9016,6 +9004,7 @@ static int __init megasas_init(void)
|
|||||||
*/
|
*/
|
||||||
pr_info("megasas: %s\n", MEGASAS_VERSION);
|
pr_info("megasas: %s\n", MEGASAS_VERSION);
|
||||||
|
|
||||||
|
megasas_dbg_lvl = 0;
|
||||||
support_poll_for_event = 2;
|
support_poll_for_event = 2;
|
||||||
support_device_change = 1;
|
support_device_change = 1;
|
||||||
support_nvme_encapsulation = true;
|
support_nvme_encapsulation = true;
|
||||||
|
@ -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)
|
if (!capable(CAP_SYS_ADMIN) || off != 0 || count > DCBX_TLV_DATA_SIZE)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
mutex_lock(&vha->hw->optrom_mutex);
|
||||||
if (ha->dcbx_tlv)
|
if (ha->dcbx_tlv)
|
||||||
goto do_read;
|
goto do_read;
|
||||||
mutex_lock(&vha->hw->optrom_mutex);
|
|
||||||
if (qla2x00_chip_is_down(vha)) {
|
if (qla2x00_chip_is_down(vha)) {
|
||||||
mutex_unlock(&vha->hw->optrom_mutex);
|
mutex_unlock(&vha->hw->optrom_mutex);
|
||||||
return 0;
|
return 0;
|
||||||
@ -3330,11 +3330,34 @@ struct fc_function_template qla2xxx_transport_vport_functions = {
|
|||||||
.bsg_timeout = qla24xx_bsg_timeout,
|
.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
|
void
|
||||||
qla2x00_init_host_attr(scsi_qla_host_t *vha)
|
qla2x00_init_host_attr(scsi_qla_host_t *vha)
|
||||||
{
|
{
|
||||||
struct qla_hw_data *ha = vha->hw;
|
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_dev_loss_tmo(vha->host) = ha->port_down_retry_count;
|
||||||
fc_host_node_name(vha->host) = wwn_to_u64(vha->node_name);
|
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_max_npiv_vports(vha->host) = ha->max_npiv_vports;
|
||||||
fc_host_npiv_vports_inuse(vha->host) = ha->cur_vport_count;
|
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;
|
fc_host_supported_speeds(vha->host) = speeds;
|
||||||
}
|
}
|
||||||
|
@ -284,6 +284,25 @@ void target_pr_kref_release(struct kref *kref)
|
|||||||
complete(&deve->pr_comp);
|
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
|
static void
|
||||||
target_luns_data_has_changed(struct se_node_acl *nacl, struct se_dev_entry *new,
|
target_luns_data_has_changed(struct se_node_acl *nacl, struct se_dev_entry *new,
|
||||||
bool skip_new)
|
bool skip_new)
|
||||||
|
@ -230,14 +230,12 @@ static void iblock_unplug_device(struct se_dev_plug *se_plug)
|
|||||||
clear_bit(IBD_PLUGF_PLUGGED, &ib_dev_plug->flags);
|
clear_bit(IBD_PLUGF_PLUGGED, &ib_dev_plug->flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned long long iblock_emulate_read_cap_with_block_size(
|
static sector_t iblock_get_blocks(struct se_device *dev)
|
||||||
struct se_device *dev,
|
|
||||||
struct block_device *bd,
|
|
||||||
struct request_queue *q)
|
|
||||||
{
|
{
|
||||||
u32 block_size = bdev_logical_block_size(bd);
|
struct iblock_dev *ib_dev = IBLOCK_DEV(dev);
|
||||||
|
u32 block_size = bdev_logical_block_size(ib_dev->ibd_bd);
|
||||||
unsigned long long blocks_long =
|
unsigned long long blocks_long =
|
||||||
div_u64(bdev_nr_bytes(bd), block_size) - 1;
|
div_u64(bdev_nr_bytes(ib_dev->ibd_bd), block_size) - 1;
|
||||||
|
|
||||||
if (block_size == dev->dev_attrib.block_size)
|
if (block_size == dev->dev_attrib.block_size)
|
||||||
return blocks_long;
|
return blocks_long;
|
||||||
@ -829,15 +827,6 @@ fail:
|
|||||||
return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
|
return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static sector_t iblock_get_blocks(struct se_device *dev)
|
|
||||||
{
|
|
||||||
struct iblock_dev *ib_dev = IBLOCK_DEV(dev);
|
|
||||||
struct block_device *bd = ib_dev->ibd_bd;
|
|
||||||
struct request_queue *q = bdev_get_queue(bd);
|
|
||||||
|
|
||||||
return iblock_emulate_read_cap_with_block_size(dev, bd, q);
|
|
||||||
}
|
|
||||||
|
|
||||||
static sector_t iblock_get_alignment_offset_lbas(struct se_device *dev)
|
static sector_t iblock_get_alignment_offset_lbas(struct se_device *dev)
|
||||||
{
|
{
|
||||||
struct iblock_dev *ib_dev = IBLOCK_DEV(dev);
|
struct iblock_dev *ib_dev = IBLOCK_DEV(dev);
|
||||||
|
@ -89,6 +89,7 @@ int target_configure_device(struct se_device *dev);
|
|||||||
void target_free_device(struct se_device *);
|
void target_free_device(struct se_device *);
|
||||||
int target_for_each_device(int (*fn)(struct se_device *dev, void *data),
|
int target_for_each_device(int (*fn)(struct se_device *dev, void *data),
|
||||||
void *data);
|
void *data);
|
||||||
|
void target_dev_ua_allocate(struct se_device *dev, u8 asc, u8 ascq);
|
||||||
|
|
||||||
/* target_core_configfs.c */
|
/* target_core_configfs.c */
|
||||||
extern struct configfs_item_operations target_core_dev_item_ops;
|
extern struct configfs_item_operations target_core_dev_item_ops;
|
||||||
|
@ -2956,13 +2956,28 @@ core_scsi3_pro_preempt(struct se_cmd *cmd, int type, int scope, u64 res_key,
|
|||||||
__core_scsi3_complete_pro_preempt(dev, pr_reg_n,
|
__core_scsi3_complete_pro_preempt(dev, pr_reg_n,
|
||||||
(preempt_type == PREEMPT_AND_ABORT) ? &preempt_and_abort_list : NULL,
|
(preempt_type == PREEMPT_AND_ABORT) ? &preempt_and_abort_list : NULL,
|
||||||
type, scope, preempt_type);
|
type, scope, preempt_type);
|
||||||
|
|
||||||
if (preempt_type == PREEMPT_AND_ABORT)
|
|
||||||
core_scsi3_release_preempt_and_abort(
|
|
||||||
&preempt_and_abort_list, pr_reg_n);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_unlock(&dev->dev_reservation_lock);
|
spin_unlock(&dev->dev_reservation_lock);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SPC-4 5.12.11.2.6 Preempting and aborting
|
||||||
|
* The actions described in this subclause shall be performed
|
||||||
|
* for all I_T nexuses that are registered with the non-zero
|
||||||
|
* SERVICE ACTION RESERVATION KEY value, without regard for
|
||||||
|
* whether the preempted I_T nexuses hold the persistent
|
||||||
|
* reservation. If the SERVICE ACTION RESERVATION KEY field is
|
||||||
|
* set to zero and an all registrants persistent reservation is
|
||||||
|
* present, the device server shall abort all commands for all
|
||||||
|
* registered I_T nexuses.
|
||||||
|
*/
|
||||||
|
if (preempt_type == PREEMPT_AND_ABORT) {
|
||||||
|
core_tmr_lun_reset(dev, NULL, &preempt_and_abort_list,
|
||||||
|
cmd);
|
||||||
|
core_scsi3_release_preempt_and_abort(
|
||||||
|
&preempt_and_abort_list, pr_reg_n);
|
||||||
|
}
|
||||||
|
|
||||||
if (pr_tmpl->pr_aptpl_active)
|
if (pr_tmpl->pr_aptpl_active)
|
||||||
core_scsi3_update_and_write_aptpl(cmd->se_dev, true);
|
core_scsi3_update_and_write_aptpl(cmd->se_dev, true);
|
||||||
|
|
||||||
@ -3022,7 +3037,7 @@ core_scsi3_pro_preempt(struct se_cmd *cmd, int type, int scope, u64 res_key,
|
|||||||
if (calling_it_nexus)
|
if (calling_it_nexus)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (pr_reg->pr_res_key != sa_res_key)
|
if (sa_res_key && pr_reg->pr_res_key != sa_res_key)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
pr_reg_nacl = pr_reg->pr_reg_nacl;
|
pr_reg_nacl = pr_reg->pr_reg_nacl;
|
||||||
@ -3425,8 +3440,6 @@ after_iport_check:
|
|||||||
* transport protocols where port names are not required;
|
* transport protocols where port names are not required;
|
||||||
* d) Register the reservation key specified in the SERVICE ACTION
|
* d) Register the reservation key specified in the SERVICE ACTION
|
||||||
* RESERVATION KEY field;
|
* RESERVATION KEY field;
|
||||||
* e) Retain the reservation key specified in the SERVICE ACTION
|
|
||||||
* RESERVATION KEY field and associated information;
|
|
||||||
*
|
*
|
||||||
* Also, It is not an error for a REGISTER AND MOVE service action to
|
* Also, It is not an error for a REGISTER AND MOVE service action to
|
||||||
* register an I_T nexus that is already registered with the same
|
* register an I_T nexus that is already registered with the same
|
||||||
@ -3448,6 +3461,12 @@ after_iport_check:
|
|||||||
dest_pr_reg = __core_scsi3_locate_pr_reg(dev, dest_node_acl,
|
dest_pr_reg = __core_scsi3_locate_pr_reg(dev, dest_node_acl,
|
||||||
iport_ptr);
|
iport_ptr);
|
||||||
new_reg = 1;
|
new_reg = 1;
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* e) Retain the reservation key specified in the SERVICE ACTION
|
||||||
|
* RESERVATION KEY field and associated information;
|
||||||
|
*/
|
||||||
|
dest_pr_reg->pr_res_key = sa_res_key;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* f) Release the persistent reservation for the persistent reservation
|
* f) Release the persistent reservation for the persistent reservation
|
||||||
|
@ -3531,8 +3531,7 @@ static void target_tmr_work(struct work_struct *work)
|
|||||||
tmr->response = (!ret) ? TMR_FUNCTION_COMPLETE :
|
tmr->response = (!ret) ? TMR_FUNCTION_COMPLETE :
|
||||||
TMR_FUNCTION_REJECTED;
|
TMR_FUNCTION_REJECTED;
|
||||||
if (tmr->response == TMR_FUNCTION_COMPLETE) {
|
if (tmr->response == TMR_FUNCTION_COMPLETE) {
|
||||||
target_ua_allocate_lun(cmd->se_sess->se_node_acl,
|
target_dev_ua_allocate(dev, 0x29,
|
||||||
cmd->orig_fe_lun, 0x29,
|
|
||||||
ASCQ_29H_BUS_DEVICE_RESET_FUNCTION_OCCURRED);
|
ASCQ_29H_BUS_DEVICE_RESET_FUNCTION_OCCURRED);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -616,7 +616,7 @@ static void ufshpb_activate_subregion(struct ufshpb_lu *hpb,
|
|||||||
static enum rq_end_io_ret ufshpb_umap_req_compl_fn(struct request *req,
|
static enum rq_end_io_ret ufshpb_umap_req_compl_fn(struct request *req,
|
||||||
blk_status_t error)
|
blk_status_t error)
|
||||||
{
|
{
|
||||||
struct ufshpb_req *umap_req = (struct ufshpb_req *)req->end_io_data;
|
struct ufshpb_req *umap_req = req->end_io_data;
|
||||||
|
|
||||||
ufshpb_put_req(umap_req->hpb, umap_req);
|
ufshpb_put_req(umap_req->hpb, umap_req);
|
||||||
return RQ_END_IO_NONE;
|
return RQ_END_IO_NONE;
|
||||||
@ -625,7 +625,7 @@ static enum rq_end_io_ret ufshpb_umap_req_compl_fn(struct request *req,
|
|||||||
static enum rq_end_io_ret ufshpb_map_req_compl_fn(struct request *req,
|
static enum rq_end_io_ret ufshpb_map_req_compl_fn(struct request *req,
|
||||||
blk_status_t error)
|
blk_status_t error)
|
||||||
{
|
{
|
||||||
struct ufshpb_req *map_req = (struct ufshpb_req *) req->end_io_data;
|
struct ufshpb_req *map_req = req->end_io_data;
|
||||||
struct ufshpb_lu *hpb = map_req->hpb;
|
struct ufshpb_lu *hpb = map_req->hpb;
|
||||||
struct ufshpb_subregion *srgn;
|
struct ufshpb_subregion *srgn;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
@ -118,7 +118,6 @@ int ufs_qcom_ice_init(struct ufs_qcom_host *host)
|
|||||||
host->ice_mmio = devm_ioremap_resource(dev, res);
|
host->ice_mmio = devm_ioremap_resource(dev, res);
|
||||||
if (IS_ERR(host->ice_mmio)) {
|
if (IS_ERR(host->ice_mmio)) {
|
||||||
err = PTR_ERR(host->ice_mmio);
|
err = PTR_ERR(host->ice_mmio);
|
||||||
dev_err(dev, "Failed to map ICE registers; err=%d\n", err);
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user