mirror of
https://github.com/torvalds/linux.git
synced 2025-11-03 01:59:51 +02:00
drm/gpuvm: don't always WARN in drm_gpuvm_check_overflow()
Don't always WARN in drm_gpuvm_check_overflow() and separate it into a drm_gpuvm_check_overflow() and a dedicated drm_gpuvm_warn_check_overflow() variant. This avoids printing warnings due to invalid userspace requests. Acked-by: Christian König <christian.koenig@amd.com> Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Danilo Krummrich <dakr@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20231108001259.15123-3-dakr@redhat.com
This commit is contained in:
parent
546ca4d35d
commit
d1adea27d0
1 changed files with 13 additions and 7 deletions
|
|
@ -614,12 +614,18 @@ static int __drm_gpuva_insert(struct drm_gpuvm *gpuvm,
|
||||||
static void __drm_gpuva_remove(struct drm_gpuva *va);
|
static void __drm_gpuva_remove(struct drm_gpuva *va);
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
drm_gpuvm_check_overflow(struct drm_gpuvm *gpuvm, u64 addr, u64 range)
|
drm_gpuvm_check_overflow(u64 addr, u64 range)
|
||||||
{
|
{
|
||||||
u64 end;
|
u64 end;
|
||||||
|
|
||||||
return drm_WARN(gpuvm->drm, check_add_overflow(addr, range, &end),
|
return check_add_overflow(addr, range, &end);
|
||||||
"GPUVA address limited to %zu bytes.\n", sizeof(end));
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
drm_gpuvm_warn_check_overflow(struct drm_gpuvm *gpuvm, u64 addr, u64 range)
|
||||||
|
{
|
||||||
|
return drm_WARN(gpuvm->drm, drm_gpuvm_check_overflow(addr, range),
|
||||||
|
"GPUVA address limited to %zu bytes.\n", sizeof(addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
|
|
@ -647,7 +653,7 @@ static bool
|
||||||
drm_gpuvm_range_valid(struct drm_gpuvm *gpuvm,
|
drm_gpuvm_range_valid(struct drm_gpuvm *gpuvm,
|
||||||
u64 addr, u64 range)
|
u64 addr, u64 range)
|
||||||
{
|
{
|
||||||
return !drm_gpuvm_check_overflow(gpuvm, addr, range) &&
|
return !drm_gpuvm_check_overflow(addr, range) &&
|
||||||
drm_gpuvm_in_mm_range(gpuvm, addr, range) &&
|
drm_gpuvm_in_mm_range(gpuvm, addr, range) &&
|
||||||
!drm_gpuvm_in_kernel_node(gpuvm, addr, range);
|
!drm_gpuvm_in_kernel_node(gpuvm, addr, range);
|
||||||
}
|
}
|
||||||
|
|
@ -682,7 +688,7 @@ drm_gpuvm_init(struct drm_gpuvm *gpuvm, const char *name,
|
||||||
gpuvm->ops = ops;
|
gpuvm->ops = ops;
|
||||||
gpuvm->drm = drm;
|
gpuvm->drm = drm;
|
||||||
|
|
||||||
drm_gpuvm_check_overflow(gpuvm, start_offset, range);
|
drm_gpuvm_warn_check_overflow(gpuvm, start_offset, range);
|
||||||
gpuvm->mm_start = start_offset;
|
gpuvm->mm_start = start_offset;
|
||||||
gpuvm->mm_range = range;
|
gpuvm->mm_range = range;
|
||||||
|
|
||||||
|
|
@ -691,8 +697,8 @@ drm_gpuvm_init(struct drm_gpuvm *gpuvm, const char *name,
|
||||||
gpuvm->kernel_alloc_node.va.addr = reserve_offset;
|
gpuvm->kernel_alloc_node.va.addr = reserve_offset;
|
||||||
gpuvm->kernel_alloc_node.va.range = reserve_range;
|
gpuvm->kernel_alloc_node.va.range = reserve_range;
|
||||||
|
|
||||||
if (likely(!drm_gpuvm_check_overflow(gpuvm, reserve_offset,
|
if (likely(!drm_gpuvm_warn_check_overflow(gpuvm, reserve_offset,
|
||||||
reserve_range)))
|
reserve_range)))
|
||||||
__drm_gpuva_insert(gpuvm, &gpuvm->kernel_alloc_node);
|
__drm_gpuva_insert(gpuvm, &gpuvm->kernel_alloc_node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue