aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJayamohan Kallickal <jayamohank@gmail.com>2013-09-28 18:35:47 -0400
committerJames Bottomley <JBottomley@Parallels.com>2013-10-25 04:58:07 -0400
commit90622db3165476182c3348b6c4371d095f1cb193 (patch)
treefa8a057970ad8ecd3cb6e9442a8c01aa76ce9d69
parenta129d92fc3e202d8135112a7ac7ad48849ab6812 (diff)
[SCSI] be2iscsi: Fix SGL Initilization and posting Pages for Dual Chute
Initialization of SGL and related PAGE posting is to be done for the chute. Based on configuration value of each Chute,SGL initialization and page posting is done. For BE-X family iSCSI protocol is loaded only on single chute Signed-off-by: John Soni Jose <sony.john-n@emulex.com> Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
-rw-r--r--drivers/scsi/be2iscsi/be_main.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
index 942a8969ce0d..59d7e932d715 100644
--- a/drivers/scsi/be2iscsi/be_main.c
+++ b/drivers/scsi/be2iscsi/be_main.c
@@ -3450,6 +3450,10 @@ beiscsi_post_pages(struct beiscsi_hba *phba)
3450 mem_descr += HWI_MEM_SGE; 3450 mem_descr += HWI_MEM_SGE;
3451 pm_arr = mem_descr->mem_array; 3451 pm_arr = mem_descr->mem_array;
3452 3452
3453 for (ulp_num = 0; ulp_num < BEISCSI_ULP_COUNT; ulp_num++)
3454 if (test_bit(ulp_num, &phba->fw_config.ulp_supported))
3455 break;
3456
3453 page_offset = (sizeof(struct iscsi_sge) * phba->params.num_sge_per_io * 3457 page_offset = (sizeof(struct iscsi_sge) * phba->params.num_sge_per_io *
3454 phba->fw_config.iscsi_icd_start[ulp_num]) / PAGE_SIZE; 3458 phba->fw_config.iscsi_icd_start[ulp_num]) / PAGE_SIZE;
3455 for (i = 0; i < mem_descr->num_elements; i++) { 3459 for (i = 0; i < mem_descr->num_elements; i++) {
@@ -3946,7 +3950,8 @@ static int beiscsi_init_sgl_handle(struct beiscsi_hba *phba)
3946 struct be_mem_descriptor *mem_descr_sglh, *mem_descr_sg; 3950 struct be_mem_descriptor *mem_descr_sglh, *mem_descr_sg;
3947 struct sgl_handle *psgl_handle; 3951 struct sgl_handle *psgl_handle;
3948 struct iscsi_sge *pfrag; 3952 struct iscsi_sge *pfrag;
3949 unsigned int arr_index, i, idx, ulp_num = 0; 3953 unsigned int arr_index, i, idx;
3954 unsigned int ulp_icd_start, ulp_num = 0;
3950 3955
3951 phba->io_sgl_hndl_avbl = 0; 3956 phba->io_sgl_hndl_avbl = 0;
3952 phba->eh_sgl_hndl_avbl = 0; 3957 phba->eh_sgl_hndl_avbl = 0;
@@ -4013,6 +4018,12 @@ static int beiscsi_init_sgl_handle(struct beiscsi_hba *phba)
4013 "\n BM_%d : mem_descr_sg->num_elements=%d\n", 4018 "\n BM_%d : mem_descr_sg->num_elements=%d\n",
4014 mem_descr_sg->num_elements); 4019 mem_descr_sg->num_elements);
4015 4020
4021 for (ulp_num = 0; ulp_num < BEISCSI_ULP_COUNT; ulp_num++)
4022 if (test_bit(ulp_num, &phba->fw_config.ulp_supported))
4023 break;
4024
4025 ulp_icd_start = phba->fw_config.iscsi_icd_start[ulp_num];
4026
4016 arr_index = 0; 4027 arr_index = 0;
4017 idx = 0; 4028 idx = 0;
4018 while (idx < mem_descr_sg->num_elements) { 4029 while (idx < mem_descr_sg->num_elements) {
@@ -4031,9 +4042,7 @@ static int beiscsi_init_sgl_handle(struct beiscsi_hba *phba)
4031 AMAP_SET_BITS(struct amap_iscsi_sge, addr_hi, pfrag, 0); 4042 AMAP_SET_BITS(struct amap_iscsi_sge, addr_hi, pfrag, 0);
4032 AMAP_SET_BITS(struct amap_iscsi_sge, addr_lo, pfrag, 0); 4043 AMAP_SET_BITS(struct amap_iscsi_sge, addr_lo, pfrag, 0);
4033 pfrag += phba->params.num_sge_per_io; 4044 pfrag += phba->params.num_sge_per_io;
4034 psgl_handle->sgl_index = 4045 psgl_handle->sgl_index = ulp_icd_start + arr_index++;
4035 phba->fw_config.iscsi_icd_start[ulp_num] +
4036 arr_index++;
4037 } 4046 }
4038 idx++; 4047 idx++;
4039 } 4048 }