On Wed, Mar 6, 2019 at 10:15 AM Andrew F. Davis <a...@ti.com> wrote: > > On 3/6/19 10:14 AM, Benjamin Gaignard wrote: > > Le mar. 5 mars 2019 à 21:54, John Stultz <john.stu...@linaro.org> a écrit : > >> > >> Add very trivial allocation test for dma-heaps. > >> > >> TODO: Need to actually do some validation on > >> the returned dma-buf. > >> > >> Cc: Laura Abbott <labb...@redhat.com> > >> Cc: Benjamin Gaignard <benjamin.gaign...@linaro.org> > >> Cc: Greg KH <gre...@linuxfoundation.org> > >> Cc: Sumit Semwal <sumit.sem...@linaro.org> > >> Cc: Liam Mark <lm...@codeaurora.org> > >> Cc: Brian Starkey <brian.star...@arm.com> > >> Cc: Andrew F. Davis <a...@ti.com> > >> Cc: Chenbo Feng <fe...@google.com> > >> Cc: Alistair Strachan <astrac...@google.com> > >> Cc: dri-devel@lists.freedesktop.org > >> Signed-off-by: John Stultz <john.stu...@linaro.org> > >> --- > >> v2: Switched to use reworked dma-heap apis > >> --- > >> tools/testing/selftests/dmabuf-heaps/Makefile | 11 +++ > >> tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c | 96 > >> ++++++++++++++++++++++ > >> 2 files changed, 107 insertions(+) > >> create mode 100644 tools/testing/selftests/dmabuf-heaps/Makefile > >> create mode 100644 tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c > >> > >> diff --git a/tools/testing/selftests/dmabuf-heaps/Makefile > >> b/tools/testing/selftests/dmabuf-heaps/Makefile > >> new file mode 100644 > >> index 0000000..c414ad3 > >> --- /dev/null > >> +++ b/tools/testing/selftests/dmabuf-heaps/Makefile > >> @@ -0,0 +1,11 @@ > >> +# SPDX-License-Identifier: GPL-2.0 > >> +CFLAGS += -static -O3 -Wl,-no-as-needed -Wall > >> +#LDLIBS += -lrt -lpthread -lm > >> + > >> +# these are all "safe" tests that don't modify > >> +# system time or require escalated privileges > >> +TEST_GEN_PROGS = dmabuf-heap > >> + > >> + > >> +include ../lib.mk > >> + > >> diff --git a/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c > >> b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c > >> new file mode 100644 > >> index 0000000..06837a4 > >> --- /dev/null > >> +++ b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c > >> @@ -0,0 +1,96 @@ > >> +// SPDX-License-Identifier: GPL-2.0 > >> + > >> +#include <dirent.h> > >> +#include <errno.h> > >> +#include <fcntl.h> > >> +#include <stdio.h> > >> +#include <string.h> > >> +#include <unistd.h> > >> +#include <sys/ioctl.h> > >> +#include <sys/mman.h> > >> +#include <sys/types.h> > >> + > >> +#include "../../../../include/uapi/linux/dma-heap.h" > >> + > >> +#define DEVPATH "/dev/dma_heap" > >> + > >> +int dmabuf_heap_open(char *name) > >> +{ > >> + int ret, fd; > >> + char buf[256]; > >> + > >> + ret = sprintf(buf, "%s/%s", DEVPATH, name); > >> + if (ret < 0) { > >> + printf("sprintf failed!\n"); > >> + return ret; > >> + } > >> + > >> + fd = open(buf, O_RDWR); > >> + if (fd < 0) > >> + printf("open %s failed!\n", buf); > >> + return fd; > >> +} > >> + > >> +int dmabuf_heap_alloc(int fd, size_t len, unsigned int flags, int > >> *dmabuf_fd) > >> +{ > >> + struct dma_heap_allocation_data data = { > >> + .len = len, > >> + .flags = flags, > >> + }; > >> + int ret; > >> + > >> + if (dmabuf_fd == NULL) > >> + return -EINVAL; > >> + > >> + ret = ioctl(fd, DMA_HEAP_IOC_ALLOC, &data); > >> + if (ret < 0) > >> + return ret; > >> + *dmabuf_fd = (int)data.fd; > >> + return ret; > >> +} > >> + > >> +#define ONE_MEG (1024*1024) > >> + > >> +void do_test(char *heap_name) > >> +{ > >> + int heap_fd = -1, dmabuf_fd = -1; > >> + int ret; > >> + > >> + printf("Testing heap: %s\n", heap_name); > >> + > >> + heap_fd = dmabuf_heap_open(heap_name); > >> + if (heap_fd < 0) > >> + return; > >> + > >> + printf("Allocating 1 MEG\n"); > >> + ret = dmabuf_heap_alloc(heap_fd, ONE_MEG, 0, &dmabuf_fd); > >> + if (ret) > >> + goto out; > >> + > >> + /* DO SOMETHING WITH THE DMABUF HERE? */ > > > > You can do a call to mmap and write a pattern in the buffer. > > > > mmap is optional for DMA-BUFs, only attach/map are required. To test > those we would need a dummy device, so a test kernel module may be > needed to really exercise this. > > I have one I use for ION buffer testing, it consumes a DMA-BUF passed > from userspace, attach/maps it to a dummy device then return the > physical address of the first page of the buffer for validation. Might > be a good test, but dummy devices don't always have the proper dma > attributes set like a real device does, so it may also fail for some > otherwise valid buffers.
Cool! Do you mind sharing that? I might try to rework and integrate it into this patchset? thanks -john _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel