summaryrefslogtreecommitdiff
path: root/cros_gralloc
diff options
context:
space:
mode:
authorJason Macnak <natsu@google.com>2020-11-12 08:19:13 -0800
committerJason Macnak <natsu@google.com>2020-11-12 08:19:13 -0800
commit7482705635704fe9a73d77fec92ef8eb0af7deab (patch)
tree524b7ec23391c11430fd68c26c3467f40d5bf852 /cros_gralloc
parent21d6fa9f48e5901c55fc18ffc049fc34201609e2 (diff)
parent0a7aeab1c6dd29aceae129f8dd2903f2f41de62f (diff)
downloadminigbm-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.cc31
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,