be2iscsi: Link Wrb with next Wrb
PATCH 3/4 be2iscsi: Link Wrb with next Wrb
This patch will link the current allocated wrb with the next
wrb that will be allocated. This is a requirement from the chip.
Signed-off-by Jayamohan Kallickal <[email protected]>
--- drivers/scsi/be2iscsi/be_main.c | 19 ++++++++++--------- 1 files changed, 10 insertions(+), 9 deletions(-)
drivers/scsi/be2iscsi/be_main.c +10 -9
@@ -629,29 +629,30 @@ free_io_sgl_handle(struct beiscsi_hba *phba, struct sgl_handle *psgl_handle)* alloc_wrb_handle - To allocate a wrb handle * @phba: The hba pointer * @cid: The cid to use for allocation -* @index: index allocation and wrb index * * This happens under session_lock until submission to chip */ -struct wrb_handle *alloc_wrb_handle (struct beiscsi_hba *phba,unsigned int cid, -int index) +struct wrb_handle *alloc_wrb_handle (struct beiscsi_hba *phba,unsigned int cid) {struct hwi_wrb_context *pwrb_context;struct hwi_controller *phwi_ctrlr; -struct wrb_handle *pwrb_handle; +struct wrb_handle *pwrb_handle, *pwrb_handle_tmp; phwi_ctrlr = phba->phwi_ctrlr; pwrb_context = &phwi_ctrlr->wrb_context[cid]; -if (pwrb_context->wrb_handles_available) { +if (pwrb_context->wrb_handles_available >=2 ) { pwrb_handle = pwrb_context->pwrb_handle_base[ pwrb_context->alloc_index]; pwrb_context->wrb_handles_available--; - pwrb_handle->nxt_wrb_index = pwrb_handle->wrb_index;if (pwrb_context->alloc_index == (phba->params.wrbs_per_cxn -1 )) pwrb_context->alloc_index =0 ;else pwrb_context->alloc_index++; + + pwrb_handle_tmp = pwrb_context->pwrb_handle_base[ + pwrb_context->alloc_index]; + pwrb_handle->nxt_wrb_index = pwrb_handle_tmp->wrb_index; }else pwrb_handle =NULL ;return pwrb_handle;
@@ -3206,7 +3207,7 @@ beiscsi_offload_connection(struct beiscsi_conn *beiscsi_conn,* login/startup related tasks. */ pwrb_handle =alloc_wrb_handle (phba, (beiscsi_conn->beiscsi_conn_cid - - phba->fw_config.iscsi_cid_start),0 ); + phba->fw_config.iscsi_cid_start)); pwrb = (struct iscsi_target_context_update_wrb *)pwrb_handle->pwrb;memset (pwrb,0 ,sizeof (*pwrb)); AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb,
@@ -3316,8 +3317,8 @@ static int beiscsi_alloc_pdu(struct iscsi_task *task, uint8_t opcode) io_task->libiscsi_itt = (itt_t )task->itt; io_task->pwrb_handle =alloc_wrb_handle (phba, beiscsi_conn->beiscsi_conn_cid - - phba->fw_config.iscsi_cid_start, - task->itt); + phba->fw_config.iscsi_cid_start + ); io_task->conn = beiscsi_conn; task->hdr = (struct iscsi_hdr *)&io_task->cmd_bhs->iscsi_hdr;
Signature · 1 line
1.6.4
PATCH 3/5 pm8001: fix endian issues
This patch will fix endian issues.
Quoted 1 line
From
e56479984831f76c0139418d7cef427e4bd331ddMon Sep 17 00:00:00 2001
From: Jack Wang <[email protected]>
Date: Wed, 18 Nov 2009 15:40:38 +0800
Subject: [PATCH 3/4] fix endian issues
Signed-off-by Jack Wang <[email protected]>
--- drivers/scsi/pm8001/pm8001_hwi.c | 7 ++++--- drivers/scsi/pm8001/pm8001_hwi.h | 3 +-- 2 files changed, 5 insertions(+), 5 deletions(-)
drivers/scsi/pm8001/pm8001_hwi.c +4 -3
@@ -3823,7 +3823,8 @@ static int pm8001_chip_ssp_io_req(struct pm8001_hba_info *pm8001_ha,u32 opc =OPC_INB_SSPINIIOSTART ;memset (&ssp_cmd,0 ,sizeof (ssp_cmd));memcpy (ssp_cmd.ssp_iu.lun, task->ssp_task.LUN,8 ); - ssp_cmd.dir_m_tlr = data_dir_flags[task->data_dir] <<8 |0x0 ;/*0 for + ssp_cmd.dir_m_tlr = +cpu_to_le32 (data_dir_flags[task->data_dir] <<8 |0x0 );/*0 for SAS 1.1 compatible TLR*/ ssp_cmd.data_len =cpu_to_le32 (task->total_xfer_len); ssp_cmd.device_id =cpu_to_le32 (pm8001_dev->device_id);
@@ -3894,7 +3895,7 @@ static int pm8001_chip_sata_req(struct pm8001_hba_info *pm8001_ha, } }if (task->ata_task.use_ncq &&pm8001_get_ncq_tag (task, &hdr_tag)) - ncg_tag =cpu_to_le32 (hdr_tag); + ncg_tag = hdr_tag; dir = data_dir_flags[task->data_dir] <<8 ; sata_cmd.tag =cpu_to_le32 (tag); sata_cmd.device_id =cpu_to_le32 (pm8001_ha_dev->device_id);
@@ -4039,7 +4040,7 @@ static int pm8001_chip_reg_dev_req(struct pm8001_hba_info *pm8001_ha, ((stp_sspsmp_sata & 0x03) * 0x10000000)); payload.firstburstsize_ITNexustimeout =cpu_to_le32 (ITNT | (firstBurstSize *0x10000 )); -memcpy (&payload.sas_addr_hi, pm8001_dev->sas_device->sas_addr, +memcpy (payload.sas_addr, pm8001_dev->sas_device->sas_addr,SAS_ADDR_SIZE ); rc =mpi_build_cmd (pm8001_ha, circularQ, opc, &payload);return rc;
drivers/scsi/pm8001/pm8001_hwi.h +1 -2
@@ -242,8 +242,7 @@ struct reg_dev_req {__le32 phyid_portid;__le32 dtype_dlr_retry;__le32 firstburstsize_ITNexustimeout; -u32 sas_addr_hi; -u32 sas_addr_low; +u8 sas_addr[SAS_ADDR_SIZE ];__le32 upper_device_id;u32 reserved[8 ]; } __attribute__((packed, aligned(4)));
Signature · 1 line
1.6.5.1.1367.gcd48