mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
drm/msm: Fix 32b size truncation
Somehow we never noticed this when arm64 became a thing, many years ago. v2: also fix npages Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com> Tested-by: Connor Abbott <cwabbott0@gmail.com> Patchwork: https://patchwork.freedesktop.org/patch/669785/
This commit is contained in:
parent
3a3bef68a6
commit
6d6a29a19b
|
|
@ -192,7 +192,7 @@ static struct page **get_pages(struct drm_gem_object *obj)
|
|||
if (!msm_obj->pages) {
|
||||
struct drm_device *dev = obj->dev;
|
||||
struct page **p;
|
||||
int npages = obj->size >> PAGE_SHIFT;
|
||||
size_t npages = obj->size >> PAGE_SHIFT;
|
||||
|
||||
p = drm_gem_get_pages(obj);
|
||||
|
||||
|
|
@ -1149,7 +1149,7 @@ static int msm_gem_object_mmap(struct drm_gem_object *obj, struct vm_area_struct
|
|||
|
||||
/* convenience method to construct a GEM buffer object, and userspace handle */
|
||||
int msm_gem_new_handle(struct drm_device *dev, struct drm_file *file,
|
||||
uint32_t size, uint32_t flags, uint32_t *handle,
|
||||
size_t size, uint32_t flags, uint32_t *handle,
|
||||
char *name)
|
||||
{
|
||||
struct drm_gem_object *obj;
|
||||
|
|
@ -1215,9 +1215,8 @@ static const struct drm_gem_object_funcs msm_gem_object_funcs = {
|
|||
.vm_ops = &vm_ops,
|
||||
};
|
||||
|
||||
static int msm_gem_new_impl(struct drm_device *dev,
|
||||
uint32_t size, uint32_t flags,
|
||||
struct drm_gem_object **obj)
|
||||
static int msm_gem_new_impl(struct drm_device *dev, uint32_t flags,
|
||||
struct drm_gem_object **obj)
|
||||
{
|
||||
struct msm_drm_private *priv = dev->dev_private;
|
||||
struct msm_gem_object *msm_obj;
|
||||
|
|
@ -1251,7 +1250,7 @@ static int msm_gem_new_impl(struct drm_device *dev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
struct drm_gem_object *msm_gem_new(struct drm_device *dev, uint32_t size, uint32_t flags)
|
||||
struct drm_gem_object *msm_gem_new(struct drm_device *dev, size_t size, uint32_t flags)
|
||||
{
|
||||
struct msm_drm_private *priv = dev->dev_private;
|
||||
struct msm_gem_object *msm_obj;
|
||||
|
|
@ -1266,7 +1265,7 @@ struct drm_gem_object *msm_gem_new(struct drm_device *dev, uint32_t size, uint32
|
|||
if (size == 0)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
ret = msm_gem_new_impl(dev, size, flags, &obj);
|
||||
ret = msm_gem_new_impl(dev, flags, &obj);
|
||||
if (ret)
|
||||
return ERR_PTR(ret);
|
||||
|
||||
|
|
@ -1306,12 +1305,12 @@ struct drm_gem_object *msm_gem_import(struct drm_device *dev,
|
|||
struct msm_drm_private *priv = dev->dev_private;
|
||||
struct msm_gem_object *msm_obj;
|
||||
struct drm_gem_object *obj;
|
||||
uint32_t size;
|
||||
int ret, npages;
|
||||
size_t size, npages;
|
||||
int ret;
|
||||
|
||||
size = PAGE_ALIGN(dmabuf->size);
|
||||
|
||||
ret = msm_gem_new_impl(dev, size, MSM_BO_WC, &obj);
|
||||
ret = msm_gem_new_impl(dev, MSM_BO_WC, &obj);
|
||||
if (ret)
|
||||
return ERR_PTR(ret);
|
||||
|
||||
|
|
@ -1354,7 +1353,7 @@ struct drm_gem_object *msm_gem_import(struct drm_device *dev,
|
|||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
void *msm_gem_kernel_new(struct drm_device *dev, uint32_t size, uint32_t flags,
|
||||
void *msm_gem_kernel_new(struct drm_device *dev, size_t size, uint32_t flags,
|
||||
struct drm_gpuvm *vm, struct drm_gem_object **bo,
|
||||
uint64_t *iova)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -297,10 +297,10 @@ bool msm_gem_active(struct drm_gem_object *obj);
|
|||
int msm_gem_cpu_prep(struct drm_gem_object *obj, uint32_t op, ktime_t *timeout);
|
||||
int msm_gem_cpu_fini(struct drm_gem_object *obj);
|
||||
int msm_gem_new_handle(struct drm_device *dev, struct drm_file *file,
|
||||
uint32_t size, uint32_t flags, uint32_t *handle, char *name);
|
||||
size_t size, uint32_t flags, uint32_t *handle, char *name);
|
||||
struct drm_gem_object *msm_gem_new(struct drm_device *dev,
|
||||
uint32_t size, uint32_t flags);
|
||||
void *msm_gem_kernel_new(struct drm_device *dev, uint32_t size, uint32_t flags,
|
||||
size_t size, uint32_t flags);
|
||||
void *msm_gem_kernel_new(struct drm_device *dev, size_t size, uint32_t flags,
|
||||
struct drm_gpuvm *vm, struct drm_gem_object **bo,
|
||||
uint64_t *iova);
|
||||
void msm_gem_kernel_put(struct drm_gem_object *bo, struct drm_gpuvm *vm);
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object *obj)
|
||||
{
|
||||
struct msm_gem_object *msm_obj = to_msm_bo(obj);
|
||||
int npages = obj->size >> PAGE_SHIFT;
|
||||
size_t npages = obj->size >> PAGE_SHIFT;
|
||||
|
||||
if (msm_obj->flags & MSM_BO_NO_SHARE)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user