Branch data Line data Source code
1 : : /* 2 : : * SPDX-License-Identifier: MIT 3 : : * 4 : : * Copyright © 2016 Intel Corporation 5 : : */ 6 : : 7 : : #include "i915_scatterlist.h" 8 : : 9 : 0 : bool i915_sg_trim(struct sg_table *orig_st) 10 : : { 11 : 0 : struct sg_table new_st; 12 : 0 : struct scatterlist *sg, *new_sg; 13 : 0 : unsigned int i; 14 : : 15 [ # # ]: 0 : if (orig_st->nents == orig_st->orig_nents) 16 : : return false; 17 : : 18 [ # # ]: 0 : if (sg_alloc_table(&new_st, orig_st->nents, GFP_KERNEL | __GFP_NOWARN)) 19 : : return false; 20 : : 21 : 0 : new_sg = new_st.sgl; 22 [ # # ]: 0 : for_each_sg(orig_st->sgl, sg, orig_st->nents, i) { 23 : 0 : sg_set_page(new_sg, sg_page(sg), sg->length, 0); 24 : 0 : sg_dma_address(new_sg) = sg_dma_address(sg); 25 : 0 : sg_dma_len(new_sg) = sg_dma_len(sg); 26 : : 27 : 0 : new_sg = sg_next(new_sg); 28 : : } 29 : 0 : GEM_BUG_ON(new_sg); /* Should walk exactly nents and hit the end */ 30 : : 31 : 0 : sg_free_table(orig_st); 32 : : 33 : 0 : *orig_st = new_st; 34 : 0 : return true; 35 : : } 36 : : 37 : : #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST) 38 : : #include "selftests/scatterlist.c" 39 : : #endif