|
@@ -211,21 +211,22 @@ struct drm_gem_object *vc4_create_object(struct drm_device *dev, size_t size)
|
|
|
}
|
|
|
|
|
|
struct vc4_bo *vc4_bo_create(struct drm_device *dev, size_t unaligned_size,
|
|
|
- bool from_cache)
|
|
|
+ bool allow_unzeroed)
|
|
|
{
|
|
|
size_t size = roundup(unaligned_size, PAGE_SIZE);
|
|
|
struct vc4_dev *vc4 = to_vc4_dev(dev);
|
|
|
struct drm_gem_cma_object *cma_obj;
|
|
|
+ struct vc4_bo *bo;
|
|
|
|
|
|
if (size == 0)
|
|
|
return ERR_PTR(-EINVAL);
|
|
|
|
|
|
/* First, try to get a vc4_bo from the kernel BO cache. */
|
|
|
- if (from_cache) {
|
|
|
- struct vc4_bo *bo = vc4_bo_get_from_cache(dev, size);
|
|
|
-
|
|
|
- if (bo)
|
|
|
- return bo;
|
|
|
+ bo = vc4_bo_get_from_cache(dev, size);
|
|
|
+ if (bo) {
|
|
|
+ if (!allow_unzeroed)
|
|
|
+ memset(bo->base.vaddr, 0, bo->base.base.size);
|
|
|
+ return bo;
|
|
|
}
|
|
|
|
|
|
cma_obj = drm_gem_cma_create(dev, size);
|