On 3/6/19 12:19 PM, John Stultz wrote: > 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? >
Sure, top two patches here: > https://git.ti.com/ti-analog-linux-kernel/afd-analog/commits/dma-buf-to-phys Andrew > thanks > -john > _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel