diff options
author | Jason Macnak <natsu@google.com> | 2020-11-12 08:19:13 -0800 |
---|---|---|
committer | Jason Macnak <natsu@google.com> | 2020-11-12 08:19:13 -0800 |
commit | 7482705635704fe9a73d77fec92ef8eb0af7deab (patch) | |
tree | 524b7ec23391c11430fd68c26c3467f40d5bf852 /cros_gralloc | |
parent | 21d6fa9f48e5901c55fc18ffc049fc34201609e2 (diff) | |
parent | 0a7aeab1c6dd29aceae129f8dd2903f2f41de62f (diff) | |
download | minigbm-7482705635704fe9a73d77fec92ef8eb0af7deab.tar.gz |
Merge remote-tracking branch 'aosp/upstream-master' into HEAD
... to pull in crrev.com/c/2521454 and crrev.com/c/2503481 to
fix Gralloc4 YUV metadata and memfd availability.
Bug: b/172031518
Test: vts -m VtsHalGraphicsMapperV4_0Target
Change-Id: I35406ba723679b675d0149f9ff773855ea956430
Diffstat (limited to 'cros_gralloc')
-rw-r--r-- | cros_gralloc/cros_gralloc_driver.cc | 31 |
1 files 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 <cstdlib> #include <fcntl.h> #include <sys/mman.h> +#include <syscall.h> #include <xf86drm.h> #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, |