Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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/

Rob Clark 6d6a29a1 3a3bef68

+14 -15
+10 -11
drivers/gpu/drm/msm/msm_gem.c
··· 192 192 if (!msm_obj->pages) { 193 193 struct drm_device *dev = obj->dev; 194 194 struct page **p; 195 - int npages = obj->size >> PAGE_SHIFT; 195 + size_t npages = obj->size >> PAGE_SHIFT; 196 196 197 197 p = drm_gem_get_pages(obj); 198 198 ··· 1149 1149 1150 1150 /* convenience method to construct a GEM buffer object, and userspace handle */ 1151 1151 int msm_gem_new_handle(struct drm_device *dev, struct drm_file *file, 1152 - uint32_t size, uint32_t flags, uint32_t *handle, 1152 + size_t size, uint32_t flags, uint32_t *handle, 1153 1153 char *name) 1154 1154 { 1155 1155 struct drm_gem_object *obj; ··· 1215 1215 .vm_ops = &vm_ops, 1216 1216 }; 1217 1217 1218 - static int msm_gem_new_impl(struct drm_device *dev, 1219 - uint32_t size, uint32_t flags, 1220 - struct drm_gem_object **obj) 1218 + static int msm_gem_new_impl(struct drm_device *dev, uint32_t flags, 1219 + struct drm_gem_object **obj) 1221 1220 { 1222 1221 struct msm_drm_private *priv = dev->dev_private; 1223 1222 struct msm_gem_object *msm_obj; ··· 1250 1251 return 0; 1251 1252 } 1252 1253 1253 - struct drm_gem_object *msm_gem_new(struct drm_device *dev, uint32_t size, uint32_t flags) 1254 + struct drm_gem_object *msm_gem_new(struct drm_device *dev, size_t size, uint32_t flags) 1254 1255 { 1255 1256 struct msm_drm_private *priv = dev->dev_private; 1256 1257 struct msm_gem_object *msm_obj; ··· 1265 1266 if (size == 0) 1266 1267 return ERR_PTR(-EINVAL); 1267 1268 1268 - ret = msm_gem_new_impl(dev, size, flags, &obj); 1269 + ret = msm_gem_new_impl(dev, flags, &obj); 1269 1270 if (ret) 1270 1271 return ERR_PTR(ret); 1271 1272 ··· 1305 1306 struct msm_drm_private *priv = dev->dev_private; 1306 1307 struct msm_gem_object *msm_obj; 1307 1308 struct drm_gem_object *obj; 1308 - uint32_t size; 1309 - int ret, npages; 1309 + size_t size, npages; 1310 + int ret; 1310 1311 1311 1312 size = PAGE_ALIGN(dmabuf->size); 1312 1313 1313 - ret = msm_gem_new_impl(dev, size, MSM_BO_WC, &obj); 1314 + ret = msm_gem_new_impl(dev, MSM_BO_WC, &obj); 1314 1315 if (ret) 1315 1316 return ERR_PTR(ret); 1316 1317 ··· 1353 1354 return ERR_PTR(ret); 1354 1355 } 1355 1356 1356 - void *msm_gem_kernel_new(struct drm_device *dev, uint32_t size, uint32_t flags, 1357 + void *msm_gem_kernel_new(struct drm_device *dev, size_t size, uint32_t flags, 1357 1358 struct drm_gpuvm *vm, struct drm_gem_object **bo, 1358 1359 uint64_t *iova) 1359 1360 {
+3 -3
drivers/gpu/drm/msm/msm_gem.h
··· 297 297 int msm_gem_cpu_prep(struct drm_gem_object *obj, uint32_t op, ktime_t *timeout); 298 298 int msm_gem_cpu_fini(struct drm_gem_object *obj); 299 299 int msm_gem_new_handle(struct drm_device *dev, struct drm_file *file, 300 - uint32_t size, uint32_t flags, uint32_t *handle, char *name); 300 + size_t size, uint32_t flags, uint32_t *handle, char *name); 301 301 struct drm_gem_object *msm_gem_new(struct drm_device *dev, 302 - uint32_t size, uint32_t flags); 303 - void *msm_gem_kernel_new(struct drm_device *dev, uint32_t size, uint32_t flags, 302 + size_t size, uint32_t flags); 303 + void *msm_gem_kernel_new(struct drm_device *dev, size_t size, uint32_t flags, 304 304 struct drm_gpuvm *vm, struct drm_gem_object **bo, 305 305 uint64_t *iova); 306 306 void msm_gem_kernel_put(struct drm_gem_object *bo, struct drm_gpuvm *vm);
+1 -1
drivers/gpu/drm/msm/msm_gem_prime.c
··· 15 15 struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object *obj) 16 16 { 17 17 struct msm_gem_object *msm_obj = to_msm_bo(obj); 18 - int npages = obj->size >> PAGE_SHIFT; 18 + size_t npages = obj->size >> PAGE_SHIFT; 19 19 20 20 if (msm_obj->flags & MSM_BO_NO_SHARE) 21 21 return ERR_PTR(-EINVAL);