diff --git a/selfdrive/common/visionbuf.h b/selfdrive/common/visionbuf.h index 8958bdd1d0..95f4826a96 100644 --- a/selfdrive/common/visionbuf.h +++ b/selfdrive/common/visionbuf.h @@ -14,6 +14,7 @@ extern "C" { typedef struct VisionBuf { size_t len; + size_t mmap_len; void* addr; int handle; int fd; diff --git a/selfdrive/common/visionbuf_ion.c b/selfdrive/common/visionbuf_ion.c index e5dddfad22..3068994d28 100644 --- a/selfdrive/common/visionbuf_ion.c +++ b/selfdrive/common/visionbuf_ion.c @@ -7,7 +7,7 @@ #include #include #include - +#include #include #include @@ -64,6 +64,7 @@ VisionBuf visionbuf_allocate(size_t len) { return (VisionBuf){ .len = len, + .mmap_len = ion_alloc.len, .addr = addr, .handle = ion_alloc.handle, .fd = ion_fd_data.fd, @@ -73,6 +74,7 @@ VisionBuf visionbuf_allocate(size_t len) { VisionBuf visionbuf_allocate_cl(size_t len, cl_device_id device_id, cl_context ctx, cl_mem *out_mem) { VisionBuf r = visionbuf_allocate(len); *out_mem = visionbuf_to_cl(&r, device_id, ctx); + r.buf_cl = *out_mem; return r; } @@ -137,6 +139,9 @@ void visionbuf_sync(const VisionBuf* buf, int dir) { } void visionbuf_free(const VisionBuf* buf) { + clReleaseMemObject(buf->buf_cl); + munmap(buf->addr, buf->mmap_len); + close(buf->fd); struct ion_handle_data handle_data = { .handle = buf->handle, };