Lines Matching refs:chain

34 	/* Guest physical address of the current chain. */
36 /* Count of the valid ccws in chain. */
294 * @head: address of the beginning of a CCW chain
295 * @len: number of CCWs within the chain
297 * Determine whether the address of a CCW (whether a new chain,
320 struct ccwchain *chain;
322 chain = kzalloc(sizeof(*chain), GFP_KERNEL);
323 if (!chain)
326 chain->ch_ccw = kcalloc(len, sizeof(*chain->ch_ccw), GFP_DMA | GFP_KERNEL);
327 if (!chain->ch_ccw)
330 chain->ch_pa = kcalloc(len, sizeof(*chain->ch_pa), GFP_KERNEL);
331 if (!chain->ch_pa)
334 list_add_tail(&chain->next, &cp->ccwchain_list);
336 return chain;
339 kfree(chain->ch_ccw);
340 kfree(chain);
344 static void ccwchain_free(struct ccwchain *chain)
346 list_del(&chain->next);
347 kfree(chain->ch_pa);
348 kfree(chain->ch_ccw);
349 kfree(chain);
353 static void ccwchain_cda_free(struct ccwchain *chain, int idx)
355 struct ccw1 *ccw = &chain->ch_ccw[idx];
364 * ccwchain_calc_length - calculate the length of the ccw chain.
365 * @iova: guest physical address of the target ccw chain
368 * This is the chain length not considering any TICs.
374 * Returns: the length of the ccw chain or -errno.
387 * that loops back into the current chain. The latter
406 struct ccwchain *chain;
409 list_for_each_entry(chain, &cp->ccwchain_list, next) {
410 ccw_head = chain->ch_iova;
411 if (is_cpa_within_range(tic->cda, ccw_head, chain->ch_len))
418 static int ccwchain_loop_tic(struct ccwchain *chain,
425 struct ccwchain *chain;
439 /* Count the CCWs in the current chain */
444 /* Need alloc a new chain for this one. */
445 chain = ccwchain_alloc(cp, len);
446 if (!chain)
449 chain->ch_len = len;
450 chain->ch_iova = gcda;
452 /* Copy the actual CCWs into the new chain */
453 memcpy(chain->ch_ccw, cp->guest_cp, len * sizeof(struct ccw1));
455 /* Loop for tics on this new chain. */
456 ret = ccwchain_loop_tic(chain, cp);
459 ccwchain_free(chain);
465 static int ccwchain_loop_tic(struct ccwchain *chain, struct channel_program *cp)
470 for (i = 0; i < chain->ch_len; i++) {
471 tic = &chain->ch_ccw[i];
476 /* May transfer to an existing chain. */
758 struct ccwchain *chain, *temp;
765 list_for_each_entry_safe(chain, temp, &cp->ccwchain_list, next) {
766 for (i = 0; i < chain->ch_len; i++) {
767 page_array_unpin_free(&chain->ch_pa[i], vdev, idal_is_2k(cp));
768 ccwchain_cda_free(chain, i);
770 ccwchain_free(chain);
783 * For each chain composing the channel program:
786 * This allows cp_free to find in ch_len the count of CCWs to free in a chain.
789 * as helpers to do ccw chain translation inside the kernel. Basically
813 struct ccwchain *chain;
822 list_for_each_entry(chain, &cp->ccwchain_list, next) {
823 len = chain->ch_len;
825 ccw = &chain->ch_ccw[idx];
826 pa = &chain->ch_pa[idx];
836 /* Only cleanup the chain elements that were actually translated. */
837 chain->ch_len = idx;
838 list_for_each_entry_continue(chain, &cp->ccwchain_list, next) {
839 chain->ch_len = 0;
856 struct ccwchain *chain;
880 chain = list_first_entry(&cp->ccwchain_list, struct ccwchain, next);
881 cpa = chain->ch_ccw;
903 struct ccwchain *chain;
916 list_for_each_entry(chain, &cp->ccwchain_list, next) {
917 ccw_head = (u32)(u64)chain->ch_ccw;
920 * of the chain.
922 if (is_cpa_within_range(cpa, ccw_head, chain->ch_len + 1)) {
925 * physical ccw to its chain head.
926 * Adding this value to the guest physical ccw chain
928 * cpa = chain->ch_iova + (cpa - ccw_head)
930 cpa = dma32_add(cpa, chain->ch_iova - ccw_head);
939 * cp_iova_pinned() - check if an iova is pinned for a ccw chain.
944 * If the @iova is currently pinned for the ccw chain, return true;
949 struct ccwchain *chain;
955 list_for_each_entry(chain, &cp->ccwchain_list, next) {
956 for (i = 0; i < chain->ch_len; i++)
957 if (page_array_iova_pinned(&chain->ch_pa[i], iova, length))