Lines Matching refs:chain

319 	struct ccwchain *chain;  in ccwchain_alloc()  local
321 chain = kzalloc(sizeof(*chain), GFP_KERNEL); in ccwchain_alloc()
322 if (!chain) in ccwchain_alloc()
325 chain->ch_ccw = kcalloc(len, sizeof(*chain->ch_ccw), GFP_DMA | GFP_KERNEL); in ccwchain_alloc()
326 if (!chain->ch_ccw) in ccwchain_alloc()
329 chain->ch_pa = kcalloc(len, sizeof(*chain->ch_pa), GFP_KERNEL); in ccwchain_alloc()
330 if (!chain->ch_pa) in ccwchain_alloc()
333 list_add_tail(&chain->next, &cp->ccwchain_list); in ccwchain_alloc()
335 return chain; in ccwchain_alloc()
338 kfree(chain->ch_ccw); in ccwchain_alloc()
339 kfree(chain); in ccwchain_alloc()
343 static void ccwchain_free(struct ccwchain *chain) in ccwchain_free() argument
345 list_del(&chain->next); in ccwchain_free()
346 kfree(chain->ch_pa); in ccwchain_free()
347 kfree(chain->ch_ccw); in ccwchain_free()
348 kfree(chain); in ccwchain_free()
352 static void ccwchain_cda_free(struct ccwchain *chain, int idx) in ccwchain_cda_free() argument
354 struct ccw1 *ccw = &chain->ch_ccw[idx]; in ccwchain_cda_free()
405 struct ccwchain *chain; in tic_target_chain_exists() local
408 list_for_each_entry(chain, &cp->ccwchain_list, next) { in tic_target_chain_exists()
409 ccw_head = chain->ch_iova; in tic_target_chain_exists()
410 if (is_cpa_within_range(tic->cda, ccw_head, chain->ch_len)) in tic_target_chain_exists()
417 static int ccwchain_loop_tic(struct ccwchain *chain,
424 struct ccwchain *chain; in ccwchain_handle_ccw() local
442 chain = ccwchain_alloc(cp, len); in ccwchain_handle_ccw()
443 if (!chain) in ccwchain_handle_ccw()
446 chain->ch_len = len; in ccwchain_handle_ccw()
447 chain->ch_iova = cda; in ccwchain_handle_ccw()
450 memcpy(chain->ch_ccw, cp->guest_cp, len * sizeof(struct ccw1)); in ccwchain_handle_ccw()
453 ret = ccwchain_loop_tic(chain, cp); in ccwchain_handle_ccw()
456 ccwchain_free(chain); in ccwchain_handle_ccw()
462 static int ccwchain_loop_tic(struct ccwchain *chain, struct channel_program *cp) in ccwchain_loop_tic() argument
467 for (i = 0; i < chain->ch_len; i++) { in ccwchain_loop_tic()
468 tic = &chain->ch_ccw[i]; in ccwchain_loop_tic()
753 struct ccwchain *chain, *temp; in cp_free() local
760 list_for_each_entry_safe(chain, temp, &cp->ccwchain_list, next) { in cp_free()
761 for (i = 0; i < chain->ch_len; i++) { in cp_free()
762 page_array_unpin_free(&chain->ch_pa[i], vdev, idal_is_2k(cp)); in cp_free()
763 ccwchain_cda_free(chain, i); in cp_free()
765 ccwchain_free(chain); in cp_free()
808 struct ccwchain *chain; in cp_prefetch() local
817 list_for_each_entry(chain, &cp->ccwchain_list, next) { in cp_prefetch()
818 len = chain->ch_len; in cp_prefetch()
820 ccw = &chain->ch_ccw[idx]; in cp_prefetch()
821 pa = &chain->ch_pa[idx]; in cp_prefetch()
832 chain->ch_len = idx; in cp_prefetch()
833 list_for_each_entry_continue(chain, &cp->ccwchain_list, next) { in cp_prefetch()
834 chain->ch_len = 0; in cp_prefetch()
851 struct ccwchain *chain; in cp_get_orb() local
875 chain = list_first_entry(&cp->ccwchain_list, struct ccwchain, next); in cp_get_orb()
876 cpa = chain->ch_ccw; in cp_get_orb()
898 struct ccwchain *chain; in cp_update_scsw() local
911 list_for_each_entry(chain, &cp->ccwchain_list, next) { in cp_update_scsw()
912 ccw_head = (u32)(u64)chain->ch_ccw; in cp_update_scsw()
917 if (is_cpa_within_range(cpa, ccw_head, chain->ch_len + 1)) { in cp_update_scsw()
924 cpa = chain->ch_iova + (cpa - ccw_head); in cp_update_scsw()
943 struct ccwchain *chain; in cp_iova_pinned() local
949 list_for_each_entry(chain, &cp->ccwchain_list, next) { in cp_iova_pinned()
950 for (i = 0; i < chain->ch_len; i++) in cp_iova_pinned()
951 if (page_array_iova_pinned(&chain->ch_pa[i], iova, length)) in cp_iova_pinned()