summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Figa <tfiga@chromium.org>2017-08-04 12:50:03 +0900
committerchrome-bot <chrome-bot@chromium.org>2017-10-19 12:56:48 -0700
commite0807b1eaaaa44b81bcb0aa610480cbc3beecc52 (patch)
tree57aa92f734d3b0cdf327d801db50680e6e03e782
parent2d1877f0417e5891ad6e2795db7cf395916b15b3 (diff)
minigbm: i915: Allow protected allocations
Allow allocations with BO_USE_PROTECTED. Moreover, disallow mapping of such BOs, as for GBM/Gralloc API callers it should not be mappable and considered as metadata alone, without usable content. BUG=b:64323695 TEST=emerge-eve arc-cros-gralloc Change-Id: I1dd1846a2042f97eee2fcc7581a91a60854e62cc Reviewed-on: https://chromium-review.googlesource.com/607808 Commit-Ready: Pawel Osciak <posciak@chromium.org> Tested-by: Pawel Osciak <posciak@chromium.org> Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
-rw-r--r--drv.c3
-rw-r--r--drv_priv.h12
-rw-r--r--gbm.h4
-rw-r--r--gbm_helpers.c2
4 files changed, 15 insertions, 6 deletions
diff --git a/drv.c b/drv.c
index 3ea46e6..3ccf16e 100644
--- a/drv.c
+++ b/drv.c
@@ -396,6 +396,8 @@ void *drv_bo_map(struct bo *bo, uint32_t x, uint32_t y, uint32_t width, uint32_t
assert(x + width <= drv_bo_get_width(bo));
assert(y + height <= drv_bo_get_height(bo));
assert(BO_MAP_READ_WRITE & map_flags);
+ /* No CPU access for protected buffers. */
+ assert(!(bo->use_flags & BO_USE_PROTECTED));
pthread_mutex_lock(&bo->drv->driver_lock);
@@ -470,6 +472,7 @@ int drv_bo_flush(struct bo *bo, struct map_info *data)
int ret = 0;
assert(data);
assert(data->refcount >= 0);
+ assert(!(bo->use_flags & BO_USE_PROTECTED));
if (bo->drv->backend->bo_flush)
ret = bo->drv->backend->bo_flush(bo, data);
diff --git a/drv_priv.h b/drv_priv.h
index 8978e8d..3399cc7 100644
--- a/drv_priv.h
+++ b/drv_priv.h
@@ -83,13 +83,13 @@ struct backend {
};
// clang-format off
-#define BO_USE_RENDER_MASK BO_USE_LINEAR | BO_USE_RENDERING | BO_USE_RENDERSCRIPT | \
- BO_USE_SW_READ_OFTEN | BO_USE_SW_WRITE_OFTEN | BO_USE_SW_READ_RARELY | \
- BO_USE_SW_WRITE_RARELY | BO_USE_TEXTURE
+#define BO_USE_RENDER_MASK BO_USE_LINEAR | BO_USE_PROTECTED | BO_USE_RENDERING | \
+ BO_USE_RENDERSCRIPT | BO_USE_SW_READ_OFTEN | BO_USE_SW_WRITE_OFTEN | \
+ BO_USE_SW_READ_RARELY | BO_USE_SW_WRITE_RARELY | BO_USE_TEXTURE
-#define BO_USE_TEXTURE_MASK BO_USE_LINEAR | BO_USE_RENDERSCRIPT | BO_USE_SW_READ_OFTEN | \
- BO_USE_SW_WRITE_OFTEN | BO_USE_SW_READ_RARELY | \
- BO_USE_SW_WRITE_RARELY | BO_USE_TEXTURE
+#define BO_USE_TEXTURE_MASK BO_USE_LINEAR | BO_USE_PROTECTED | BO_USE_RENDERSCRIPT | \
+ BO_USE_SW_READ_OFTEN | BO_USE_SW_WRITE_OFTEN | \
+ BO_USE_SW_READ_RARELY | BO_USE_SW_WRITE_RARELY | BO_USE_TEXTURE
#define LINEAR_METADATA (struct format_metadata) { 0, 1, DRM_FORMAT_MOD_NONE }
// clang-format on
diff --git a/gbm.h b/gbm.h
index 5ec13bc..a58aadb 100644
--- a/gbm.h
+++ b/gbm.h
@@ -251,6 +251,10 @@ enum gbm_bo_flags {
* The buffer will be read from by a camera subsystem.
*/
GBM_BO_USE_CAMERA_READ = (1 << 7),
+ /**
+ * Buffer inaccessible to unprivileged users.
+ */
+ GBM_BO_USE_PROTECTED = (1 << 8),
};
int
diff --git a/gbm_helpers.c b/gbm_helpers.c
index 13904f6..c22233a 100644
--- a/gbm_helpers.c
+++ b/gbm_helpers.c
@@ -30,6 +30,8 @@ uint64_t gbm_convert_usage(uint32_t usage)
use_flags |= BO_USE_CAMERA_WRITE;
if (usage & GBM_BO_USE_CAMERA_READ)
use_flags |= BO_USE_CAMERA_READ;
+ if (usage & GBM_BO_USE_PROTECTED)
+ use_flags |= BO_USE_PROTECTED;
return use_flags;
}