From 0a7aeab1c6dd29aceae129f8dd2903f2f41de62f Mon Sep 17 00:00:00 2001 From: Jason Macnak Date: Thu, 5 Nov 2020 13:32:49 -0800 Subject: [PATCH] cros_gralloc: handle memfd_create availability BUG=b:172031518 TEST=vts -m VtsHalGraphicsMapperV4_0TargetTest Change-Id: I9a7a0237620ab2468c014e0778976b379b757acf Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/minigbm/+/2521454 Reviewed-by: Gurchetan Singh Tested-by: Jason Macnak Commit-Queue: Jason Macnak Auto-Submit: Jason Macnak --- cros_gralloc/cros_gralloc_driver.cc | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/cros_gralloc/cros_gralloc_driver.cc b/cros_gralloc/cros_gralloc_driver.cc index ab7c654..259eae2 100644 --- a/cros_gralloc/cros_gralloc_driver.cc +++ b/cros_gralloc/cros_gralloc_driver.cc @@ -9,12 +9,32 @@ #include #include #include +#include #include #include "../drv_priv.h" #include "../helpers.h" #include "../util.h" +int memfd_create_wrapper(const char *name, unsigned int flags) +{ + int fd; + +#if defined(HAVE_MEMFD_CREATE) + fd = memfd_create(name, flags); +#elif defined(__NR_memfd_create) + fd = syscall(__NR_memfd_create, name, flags); +#else + drv_log("Failed to create memfd '%s': memfd_create not available.", name); + return -1; +#endif + + if (fd == -1) { + drv_log("Failed to create memfd '%s': %s.\n", name, strerror(errno)); + } + return fd; +} + cros_gralloc_driver::cros_gralloc_driver() : drv_(nullptr) { } @@ -98,11 +118,9 @@ int32_t create_reserved_region(const std::string &buffer_name, uint64_t reserved { std::string reserved_region_name = buffer_name + " reserved region"; -#ifdef __NR_memfd_create - int32_t reserved_region_fd = memfd_create(reserved_region_name.c_str(), FD_CLOEXEC); + int32_t reserved_region_fd = memfd_create_wrapper(reserved_region_name.c_str(), FD_CLOEXEC); if (reserved_region_fd == -1) { - drv_log("Failed to create reserved region fd: %s.\n", strerror(errno)); - return -errno; + return -1; } if (ftruncate(reserved_region_fd, reserved_region_size)) { @@ -111,11 +129,6 @@ int32_t create_reserved_region(const std::string &buffer_name, uint64_t reserved } return reserved_region_fd; -#else - drv_log("Failed to create reserved region '%s': memfd_create not available.", - reserved_region_name.c_str()); - return -1; -#endif } int32_t cros_gralloc_driver::allocate(const struct cros_gralloc_buffer_descriptor *descriptor, -- 2.11.0