Home | History | Annotate | Line # | Download | only in i915
      1 /*	$NetBSD: i915_scatterlist.c,v 1.3 2021/12/19 11:37:05 riastradh Exp $	*/
      2 
      3 /*
      4  * SPDX-License-Identifier: MIT
      5  *
      6  * Copyright  2016 Intel Corporation
      7  */
      8 
      9 #include <sys/cdefs.h>
     10 __KERNEL_RCSID(0, "$NetBSD: i915_scatterlist.c,v 1.3 2021/12/19 11:37:05 riastradh Exp $");
     11 
     12 #include "i915_scatterlist.h"
     13 
     14 bool i915_sg_trim(struct sg_table *orig_st)
     15 {
     16 #ifndef __NetBSD__
     17 	struct sg_table new_st;
     18 	struct scatterlist *sg, *new_sg;
     19 	unsigned int i;
     20 
     21 	if (orig_st->nents == orig_st->orig_nents)
     22 		return false;
     23 
     24 	if (sg_alloc_table(&new_st, orig_st->nents, GFP_KERNEL | __GFP_NOWARN))
     25 		return false;
     26 
     27 	new_sg = new_st.sgl;
     28 	for_each_sg(orig_st->sgl, sg, orig_st->nents, i) {
     29 		sg_set_page(new_sg, sg_page(sg), sg->length, 0);
     30 		sg_dma_address(new_sg) = sg_dma_address(sg);
     31 		sg_dma_len(new_sg) = sg_dma_len(sg);
     32 
     33 		new_sg = sg_next(new_sg);
     34 	}
     35 	GEM_BUG_ON(new_sg); /* Should walk exactly nents and hit the end */
     36 
     37 	sg_free_table(orig_st);
     38 
     39 	*orig_st = new_st;
     40 #endif
     41 	return true;
     42 }
     43 
     44 #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
     45 #include "selftests/scatterlist.c"
     46 #endif
     47