Lines Matching refs:srgn
71 struct ufshpb_subregion *srgn) in ufshpb_is_valid_srgn() argument
74 srgn->srgn_state == HPB_SRGN_VALID; in ufshpb_is_valid_srgn()
167 struct ufshpb_subregion *srgn, *prev_srgn = NULL; in ufshpb_iterate_rgn() local
174 srgn = rgn->srgn_tbl + srgn_idx; in ufshpb_iterate_rgn()
176 if (likely(!srgn->is_last)) in ufshpb_iterate_rgn()
189 if (srgn->srgn_state == HPB_SRGN_VALID) in ufshpb_iterate_rgn()
190 bitmap_set(srgn->mctx->ppn_dirty, srgn_offset, in ufshpb_iterate_rgn()
202 if (hpb->is_hcm && prev_srgn != srgn) { in ufshpb_iterate_rgn()
207 rgn->reads -= srgn->reads; in ufshpb_iterate_rgn()
208 srgn->reads = 0; in ufshpb_iterate_rgn()
211 srgn->reads++; in ufshpb_iterate_rgn()
213 if (srgn->reads == hpb->params.activation_thld) in ufshpb_iterate_rgn()
227 prev_srgn = srgn; in ufshpb_iterate_rgn()
245 struct ufshpb_subregion *srgn; in ufshpb_test_ppn_dirty() local
251 srgn = rgn->srgn_tbl + srgn_idx; in ufshpb_test_ppn_dirty()
253 if (likely(!srgn->is_last)) in ufshpb_test_ppn_dirty()
258 if (!ufshpb_is_valid_srgn(rgn, srgn)) in ufshpb_test_ppn_dirty()
266 if (unlikely(!srgn->mctx)) { in ufshpb_test_ppn_dirty()
269 srgn->rgn_idx, srgn->srgn_idx); in ufshpb_test_ppn_dirty()
278 if (find_next_bit(srgn->mctx->ppn_dirty, bit_len + srgn_offset, in ufshpb_test_ppn_dirty()
440 struct ufshpb_subregion *srgn; in ufshpb_prep_entry() local
455 srgn = rgn->srgn_tbl + srgn_idx; in ufshpb_prep_entry()
457 if (!ufshpb_is_valid_srgn(rgn, srgn)) in ufshpb_prep_entry()
460 if (!srgn->mctx) in ufshpb_prep_entry()
463 copied = ufshpb_fill_ppn_from_page(hpb, srgn->mctx, srgn_offset, in ufshpb_prep_entry()
613 struct ufshpb_subregion *srgn; in ufshpb_prep() local
648 srgn = rgn->srgn_tbl + srgn_idx; in ufshpb_prep()
683 err = ufshpb_fill_ppn_from_page(hpb, srgn->mctx, srgn_offset, 1, &ppn); in ufshpb_prep()
762 struct ufshpb_subregion *srgn) in ufshpb_get_map_req() argument
777 map_req = ufshpb_get_req(hpb, srgn->rgn_idx, REQ_OP_SCSI_IN, false); in ufshpb_get_map_req()
789 map_req->rb.srgn_idx = srgn->srgn_idx; in ufshpb_get_map_req()
790 map_req->rb.mctx = srgn->mctx; in ufshpb_get_map_req()
813 struct ufshpb_subregion *srgn) in ufshpb_clear_dirty_bitmap() argument
818 if (!srgn->mctx) { in ufshpb_clear_dirty_bitmap()
821 srgn->rgn_idx, srgn->srgn_idx); in ufshpb_clear_dirty_bitmap()
825 if (unlikely(srgn->is_last)) in ufshpb_clear_dirty_bitmap()
828 bitmap_zero(srgn->mctx->ppn_dirty, num_entries); in ufshpb_clear_dirty_bitmap()
830 rgn = hpb->rgn_tbl + srgn->rgn_idx; in ufshpb_clear_dirty_bitmap()
840 struct ufshpb_subregion *srgn; in ufshpb_update_active_info() local
843 srgn = rgn->srgn_tbl + srgn_idx; in ufshpb_update_active_info()
847 if (list_empty(&srgn->list_act_srgn)) in ufshpb_update_active_info()
848 list_add_tail(&srgn->list_act_srgn, &hpb->lh_act_srgn); in ufshpb_update_active_info()
856 struct ufshpb_subregion *srgn; in ufshpb_update_inactive_info() local
861 for_each_sub_region(rgn, srgn_idx, srgn) in ufshpb_update_inactive_info()
862 list_del_init(&srgn->list_act_srgn); in ufshpb_update_inactive_info()
871 struct ufshpb_subregion *srgn) in ufshpb_activate_subregion() argument
881 if (!srgn->mctx) { in ufshpb_activate_subregion()
884 srgn->rgn_idx, srgn->srgn_idx); in ufshpb_activate_subregion()
885 srgn->srgn_state = HPB_SRGN_INVALID; in ufshpb_activate_subregion()
889 rgn = hpb->rgn_tbl + srgn->rgn_idx; in ufshpb_activate_subregion()
894 srgn->rgn_idx, srgn->srgn_idx); in ufshpb_activate_subregion()
895 srgn->srgn_state = HPB_SRGN_INVALID; in ufshpb_activate_subregion()
898 srgn->srgn_state = HPB_SRGN_VALID; in ufshpb_activate_subregion()
912 struct ufshpb_subregion *srgn; in ufshpb_map_req_compl_fn() local
915 srgn = hpb->rgn_tbl[map_req->rb.rgn_idx].srgn_tbl + in ufshpb_map_req_compl_fn()
918 ufshpb_clear_dirty_bitmap(hpb, srgn); in ufshpb_map_req_compl_fn()
920 ufshpb_activate_subregion(hpb, srgn); in ufshpb_map_req_compl_fn()
1070 struct ufshpb_subregion *srgn; in ufshpb_check_srgns_issue_state() local
1073 for_each_sub_region(rgn, srgn_idx, srgn) in ufshpb_check_srgns_issue_state()
1074 if (srgn->srgn_state == HPB_SRGN_ISSUED) in ufshpb_check_srgns_issue_state()
1189 struct ufshpb_subregion *srgn) in ufshpb_purge_active_subregion() argument
1191 if (srgn->srgn_state != HPB_SRGN_UNUSED) { in ufshpb_purge_active_subregion()
1192 ufshpb_put_map_ctx(hpb, srgn->mctx); in ufshpb_purge_active_subregion()
1193 srgn->srgn_state = HPB_SRGN_UNUSED; in ufshpb_purge_active_subregion()
1194 srgn->mctx = NULL; in ufshpb_purge_active_subregion()
1229 struct ufshpb_subregion *srgn; in __ufshpb_evict_region() local
1238 for_each_sub_region(rgn, srgn_idx, srgn) in __ufshpb_evict_region()
1239 ufshpb_purge_active_subregion(hpb, srgn); in __ufshpb_evict_region()
1277 struct ufshpb_subregion *srgn) in ufshpb_issue_map_req() argument
1295 (srgn->srgn_state == HPB_SRGN_INVALID)) { in ufshpb_issue_map_req()
1300 if (srgn->srgn_state == HPB_SRGN_UNUSED) in ufshpb_issue_map_req()
1311 if (srgn->srgn_state == HPB_SRGN_ISSUED) in ufshpb_issue_map_req()
1314 srgn->srgn_state = HPB_SRGN_ISSUED; in ufshpb_issue_map_req()
1318 srgn->mctx = ufshpb_get_map_ctx(hpb, srgn->is_last); in ufshpb_issue_map_req()
1319 if (!srgn->mctx) { in ufshpb_issue_map_req()
1322 rgn->rgn_idx, srgn->srgn_idx); in ufshpb_issue_map_req()
1328 map_req = ufshpb_get_map_req(hpb, srgn); in ufshpb_issue_map_req()
1333 ret = ufshpb_execute_map_req(hpb, map_req, srgn->is_last); in ufshpb_issue_map_req()
1337 __func__, ret, srgn->rgn_idx, srgn->srgn_idx); in ufshpb_issue_map_req()
1346 srgn->srgn_state = state; in ufshpb_issue_map_req()
1436 struct ufshpb_subregion *srgn; in ufshpb_rsp_req_region_update() local
1471 srgn = rgn->srgn_tbl + srgn_i; in ufshpb_rsp_req_region_update()
1475 if (srgn->srgn_state == HPB_SRGN_VALID) in ufshpb_rsp_req_region_update()
1476 srgn->srgn_state = HPB_SRGN_INVALID; in ufshpb_rsp_req_region_update()
1502 srgn = rgn->srgn_tbl + srgn_i; in ufshpb_rsp_req_region_update()
1503 if (srgn->srgn_state == HPB_SRGN_VALID) in ufshpb_rsp_req_region_update()
1504 srgn->srgn_state = HPB_SRGN_INVALID; in ufshpb_rsp_req_region_update()
1630 struct ufshpb_subregion *srgn) in ufshpb_add_active_list() argument
1635 if (!list_empty(&srgn->list_act_srgn)) { in ufshpb_add_active_list()
1636 list_move(&srgn->list_act_srgn, &hpb->lh_act_srgn); in ufshpb_add_active_list()
1640 list_add(&srgn->list_act_srgn, &hpb->lh_act_srgn); in ufshpb_add_active_list()
1647 struct ufshpb_subregion *srgn; in ufshpb_add_pending_evict_list() local
1653 for_each_sub_region(rgn, srgn_idx, srgn) in ufshpb_add_pending_evict_list()
1654 if (!list_empty(&srgn->list_act_srgn)) in ufshpb_add_pending_evict_list()
1663 struct ufshpb_subregion *srgn; in ufshpb_run_active_subregion_list() local
1668 while ((srgn = list_first_entry_or_null(&hpb->lh_act_srgn, in ufshpb_run_active_subregion_list()
1674 list_del_init(&srgn->list_act_srgn); in ufshpb_run_active_subregion_list()
1677 rgn = hpb->rgn_tbl + srgn->rgn_idx; in ufshpb_run_active_subregion_list()
1682 ret = ufshpb_issue_map_req(hpb, rgn, srgn); in ufshpb_run_active_subregion_list()
1686 ret, rgn->rgn_idx, srgn->srgn_idx); in ufshpb_run_active_subregion_list()
1696 rgn->rgn_idx, srgn->srgn_idx); in ufshpb_run_active_subregion_list()
1698 ufshpb_add_active_list(hpb, rgn, srgn); in ufshpb_run_active_subregion_list()
1747 struct ufshpb_subregion *srgn = rgn->srgn_tbl + srgn_idx; in ufshpb_normalization_work_handler() local
1749 srgn->reads >>= factor; in ufshpb_normalization_work_handler()
1750 rgn->reads += srgn->reads; in ufshpb_normalization_work_handler()
1786 struct ufshpb_subregion *srgn; in ufshpb_init_pinned_active_region() local
1790 for_each_sub_region(rgn, srgn_idx, srgn) { in ufshpb_init_pinned_active_region()
1791 srgn->mctx = ufshpb_get_map_ctx(hpb, srgn->is_last); in ufshpb_init_pinned_active_region()
1792 srgn->srgn_state = HPB_SRGN_INVALID; in ufshpb_init_pinned_active_region()
1793 if (!srgn->mctx) { in ufshpb_init_pinned_active_region()
1800 list_add_tail(&srgn->list_act_srgn, &hpb->lh_act_srgn); in ufshpb_init_pinned_active_region()
1808 srgn = rgn->srgn_tbl + i; in ufshpb_init_pinned_active_region()
1809 ufshpb_put_map_ctx(hpb, srgn->mctx); in ufshpb_init_pinned_active_region()
1818 struct ufshpb_subregion *srgn; in ufshpb_init_subregion_tbl() local
1820 for_each_sub_region(rgn, srgn_idx, srgn) { in ufshpb_init_subregion_tbl()
1821 INIT_LIST_HEAD(&srgn->list_act_srgn); in ufshpb_init_subregion_tbl()
1823 srgn->rgn_idx = rgn->rgn_idx; in ufshpb_init_subregion_tbl()
1824 srgn->srgn_idx = srgn_idx; in ufshpb_init_subregion_tbl()
1825 srgn->srgn_state = HPB_SRGN_UNUSED; in ufshpb_init_subregion_tbl()
1829 srgn->is_last = true; in ufshpb_init_subregion_tbl()
1967 struct ufshpb_subregion *srgn; in ufshpb_destroy_subregion_tbl() local
1969 for_each_sub_region(rgn, srgn_idx, srgn) in ufshpb_destroy_subregion_tbl()
1970 if (srgn->srgn_state != HPB_SRGN_UNUSED) { in ufshpb_destroy_subregion_tbl()
1971 srgn->srgn_state = HPB_SRGN_UNUSED; in ufshpb_destroy_subregion_tbl()
1972 ufshpb_put_map_ctx(hpb, srgn->mctx); in ufshpb_destroy_subregion_tbl()
2509 struct ufshpb_subregion *srgn, *next_srgn; in ufshpb_discard_rsp_lists() local
2522 list_for_each_entry_safe(srgn, next_srgn, &hpb->lh_act_srgn, in ufshpb_discard_rsp_lists()
2524 list_del_init(&srgn->list_act_srgn); in ufshpb_discard_rsp_lists()