be2iscsi: Cleanup processing of BMBX completion
Remove confusingly named be_mcc_compl_is_new and be_mcc_compl_use functions in processing of BMBX. Rearrange beiscsi_process_mbox_compl function. Signed-off-by: Jitendra Bhivare <jitendra.bhivare@broadcom.com> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
69fd6d7b42
commit
c448427b96
|
@ -263,21 +263,6 @@ int beiscsi_mccq_compl_wait(struct beiscsi_hba *phba,
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool be_mcc_compl_is_new(struct be_mcc_compl *compl)
|
|
||||||
{
|
|
||||||
if (compl->flags != 0) {
|
|
||||||
compl->flags = le32_to_cpu(compl->flags);
|
|
||||||
WARN_ON((compl->flags & CQE_FLAGS_VALID_MASK) == 0);
|
|
||||||
return true;
|
|
||||||
} else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void be_mcc_compl_use(struct be_mcc_compl *compl)
|
|
||||||
{
|
|
||||||
compl->flags = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* beiscsi_process_mbox_compl()- Check the MBX completion status
|
* beiscsi_process_mbox_compl()- Check the MBX completion status
|
||||||
* @ctrl: Function specific MBX data structure
|
* @ctrl: Function specific MBX data structure
|
||||||
|
@ -298,30 +283,46 @@ static int beiscsi_process_mbox_compl(struct be_ctrl_info *ctrl,
|
||||||
struct be_cmd_req_hdr *hdr = embedded_payload(wrb);
|
struct be_cmd_req_hdr *hdr = embedded_payload(wrb);
|
||||||
struct be_cmd_resp_hdr *resp_hdr;
|
struct be_cmd_resp_hdr *resp_hdr;
|
||||||
|
|
||||||
be_dws_le_to_cpu(compl, 4);
|
/**
|
||||||
|
* To check if valid bit is set, check the entire word as we don't know
|
||||||
compl_status = (compl->status >> CQE_STATUS_COMPL_SHIFT) &
|
* the endianness of the data (old entry is host endian while a new
|
||||||
CQE_STATUS_COMPL_MASK;
|
* entry is little endian)
|
||||||
if (compl_status != MCC_STATUS_SUCCESS) {
|
*/
|
||||||
extd_status = (compl->status >> CQE_STATUS_EXTD_SHIFT) &
|
if (!compl->flags) {
|
||||||
CQE_STATUS_EXTD_MASK;
|
|
||||||
|
|
||||||
beiscsi_log(phba, KERN_ERR,
|
beiscsi_log(phba, KERN_ERR,
|
||||||
BEISCSI_LOG_CONFIG | BEISCSI_LOG_MBOX,
|
BEISCSI_LOG_CONFIG | BEISCSI_LOG_MBOX,
|
||||||
"BC_%d : error in cmd completion: "
|
"BC_%d : BMBX busy, no completion\n");
|
||||||
"Subsystem : %d Opcode : %d "
|
return -EBUSY;
|
||||||
"status(compl/extd)=%d/%d\n",
|
}
|
||||||
hdr->subsystem, hdr->opcode,
|
compl->flags = le32_to_cpu(compl->flags);
|
||||||
compl_status, extd_status);
|
WARN_ON((compl->flags & CQE_FLAGS_VALID_MASK) == 0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Just swap the status to host endian;
|
||||||
|
* mcc tag is opaquely copied from mcc_wrb.
|
||||||
|
*/
|
||||||
|
be_dws_le_to_cpu(compl, 4);
|
||||||
|
compl_status = (compl->status >> CQE_STATUS_COMPL_SHIFT) &
|
||||||
|
CQE_STATUS_COMPL_MASK;
|
||||||
|
extd_status = (compl->status >> CQE_STATUS_EXTD_SHIFT) &
|
||||||
|
CQE_STATUS_EXTD_MASK;
|
||||||
|
/* Need to reset the entire word that houses the valid bit */
|
||||||
|
compl->flags = 0;
|
||||||
|
|
||||||
|
if (compl_status == MCC_STATUS_SUCCESS)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_CONFIG | BEISCSI_LOG_MBOX,
|
||||||
|
"BC_%d : error in cmd completion: Subsystem : %d Opcode : %d status(compl/extd)=%d/%d\n",
|
||||||
|
hdr->subsystem, hdr->opcode, compl_status, extd_status);
|
||||||
|
|
||||||
if (compl_status == MCC_STATUS_INSUFFICIENT_BUFFER) {
|
if (compl_status == MCC_STATUS_INSUFFICIENT_BUFFER) {
|
||||||
|
/* if status is insufficient buffer, check the length */
|
||||||
resp_hdr = (struct be_cmd_resp_hdr *) hdr;
|
resp_hdr = (struct be_cmd_resp_hdr *) hdr;
|
||||||
if (resp_hdr->response_length)
|
if (resp_hdr->response_length)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void beiscsi_process_async_link(struct beiscsi_hba *phba,
|
static void beiscsi_process_async_link(struct beiscsi_hba *phba,
|
||||||
|
@ -453,10 +454,6 @@ int beiscsi_process_mcc_compl(struct be_ctrl_info *ctrl,
|
||||||
struct be_dma_mem *tag_mem;
|
struct be_dma_mem *tag_mem;
|
||||||
unsigned int tag, wrb_idx;
|
unsigned int tag, wrb_idx;
|
||||||
|
|
||||||
/**
|
|
||||||
* Just swap the status to host endian; mcc tag is opaquely copied
|
|
||||||
* from mcc_wrb
|
|
||||||
*/
|
|
||||||
be_dws_le_to_cpu(compl, 4);
|
be_dws_le_to_cpu(compl, 4);
|
||||||
tag = (compl->tag0 & MCC_Q_CMD_TAG_MASK);
|
tag = (compl->tag0 & MCC_Q_CMD_TAG_MASK);
|
||||||
wrb_idx = (compl->tag0 & CQE_STATUS_WRB_MASK) >> CQE_STATUS_WRB_SHIFT;
|
wrb_idx = (compl->tag0 & CQE_STATUS_WRB_MASK) >> CQE_STATUS_WRB_SHIFT;
|
||||||
|
|
Loading…
Reference in a new issue