mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-02 11:54:36 +08:00
drm/i915: Fix i915_sg_page_sizes to record dma segments rather than physical pages
All users of this function actually want the dma segment sizes, but that's not what's calculated. Fix that and rename the function to i915_sg_dma_sizes to reflect what's calculated. Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> Reviewed-by: Matthew Auld <matthew.auld@intel.com> Signed-off-by: Matthew Auld <matthew.auld@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20210601074654.3103-4-thomas.hellstrom@linux.intel.com
This commit is contained in:
parent
4d8151ae53
commit
62445a97c5
@ -209,7 +209,7 @@ static int i915_gem_object_get_pages_dmabuf(struct drm_i915_gem_object *obj)
|
||||
if (IS_ERR(pages))
|
||||
return PTR_ERR(pages);
|
||||
|
||||
sg_page_sizes = i915_sg_page_sizes(pages->sgl);
|
||||
sg_page_sizes = i915_sg_dma_sizes(pages->sgl);
|
||||
|
||||
__i915_gem_object_set_pages(obj, pages, sg_page_sizes);
|
||||
|
||||
|
@ -208,7 +208,7 @@ static int i915_gem_object_shmem_to_phys(struct drm_i915_gem_object *obj)
|
||||
|
||||
err_xfer:
|
||||
if (!IS_ERR_OR_NULL(pages)) {
|
||||
unsigned int sg_page_sizes = i915_sg_page_sizes(pages->sgl);
|
||||
unsigned int sg_page_sizes = i915_sg_dma_sizes(pages->sgl);
|
||||
|
||||
__i915_gem_object_set_pages(obj, pages, sg_page_sizes);
|
||||
}
|
||||
|
@ -173,7 +173,7 @@ alloc_table:
|
||||
goto err;
|
||||
}
|
||||
|
||||
sg_page_sizes = i915_sg_page_sizes(st->sgl);
|
||||
sg_page_sizes = i915_sg_dma_sizes(st->sgl);
|
||||
|
||||
__i915_gem_object_set_pages(obj, st, sg_page_sizes);
|
||||
|
||||
|
@ -101,15 +101,23 @@ static inline struct scatterlist *__sg_next(struct scatterlist *sg)
|
||||
(((__iter).curr += PAGE_SIZE) >= (__iter).max) ? \
|
||||
(__iter) = __sgt_iter(__sg_next((__iter).sgp), false), 0 : 0)
|
||||
|
||||
static inline unsigned int i915_sg_page_sizes(struct scatterlist *sg)
|
||||
/**
|
||||
* i915_sg_dma_sizes - Record the dma segment sizes of a scatterlist
|
||||
* @sg: The scatterlist
|
||||
*
|
||||
* Return: An unsigned int with segment sizes logically or'ed together.
|
||||
* A caller can use this information to determine what hardware page table
|
||||
* entry sizes can be used to map the memory represented by the scatterlist.
|
||||
*/
|
||||
static inline unsigned int i915_sg_dma_sizes(struct scatterlist *sg)
|
||||
{
|
||||
unsigned int page_sizes;
|
||||
|
||||
page_sizes = 0;
|
||||
while (sg) {
|
||||
while (sg && sg_dma_len(sg)) {
|
||||
GEM_BUG_ON(sg->offset);
|
||||
GEM_BUG_ON(!IS_ALIGNED(sg->length, PAGE_SIZE));
|
||||
page_sizes |= sg->length;
|
||||
GEM_BUG_ON(!IS_ALIGNED(sg_dma_len(sg), PAGE_SIZE));
|
||||
page_sizes |= sg_dma_len(sg);
|
||||
sg = __sg_next(sg);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user