From mboxrd@z Thu Jan 1 00:00:00 1970 From: shuah at kernel.org (Shuah Khan) Date: Mon, 26 Feb 2018 10:07:01 -0700 Subject: [PATCH 2/2] selftests: ion: Add simple test with the vgem driver In-Reply-To: <20180219183333.GD22199@phenom.ffwll.local> References: <20180216012445.17264-1-labbott@redhat.com> <20180216012445.17264-3-labbott@redhat.com> <20180219153143.GS22199@phenom.ffwll.local> <20180219183333.GD22199@phenom.ffwll.local> Message-ID: On 02/19/2018 11:33 AM, Daniel Vetter wrote: > On Mon, Feb 19, 2018 at 10:18:21AM -0800, Laura Abbott wrote: >> On 02/19/2018 07:31 AM, Daniel Vetter wrote: >>> On Thu, Feb 15, 2018 at 05:24:45PM -0800, Laura Abbott wrote: >>>> Ion is designed to be a framework used by other clients who perform >>>> operations on the buffer. Use the DRM vgem client as a simple consumer. >>>> In conjunction with the dma-buf sync ioctls, this tests the full attach/map >>>> path for the system heap. >>>> >>>> Signed-off-by: Laura Abbott >>>> --- >>>> tools/testing/selftests/android/ion/Makefile | 3 +- >>>> tools/testing/selftests/android/ion/config | 1 + >>>> tools/testing/selftests/android/ion/ionmap_test.c | 136 ++++++++++++++++++++++ >>>> 3 files changed, 139 insertions(+), 1 deletion(-) >>>> create mode 100644 tools/testing/selftests/android/ion/ionmap_test.c >>>> >>>> diff --git a/tools/testing/selftests/android/ion/Makefile b/tools/testing/selftests/android/ion/Makefile >>>> index 96e0c448b39d..d23b6d537d8b 100644 >>>> --- a/tools/testing/selftests/android/ion/Makefile >>>> +++ b/tools/testing/selftests/android/ion/Makefile >>>> @@ -2,7 +2,7 @@ >>>> INCLUDEDIR := -I. -I../../../../../drivers/staging/android/uapi/ >>>> CFLAGS := $(CFLAGS) $(INCLUDEDIR) -Wall -O2 -g >>>> -TEST_GEN_FILES := ionapp_export ionapp_import >>>> +TEST_GEN_FILES := ionapp_export ionapp_import ionmap_test >>>> all: $(TEST_GEN_FILES) >>>> @@ -14,3 +14,4 @@ include ../../lib.mk >>>> $(OUTPUT)/ionapp_export: ionapp_export.c ipcsocket.c ionutils.c >>>> $(OUTPUT)/ionapp_import: ionapp_import.c ipcsocket.c ionutils.c >>>> +$(OUTPUT)/ionmap_test: ionmap_test.c ionutils.c >>>> diff --git a/tools/testing/selftests/android/ion/config b/tools/testing/selftests/android/ion/config >>>> index 19db6ca9aa2b..b4ad748a9dd9 100644 >>>> --- a/tools/testing/selftests/android/ion/config >>>> +++ b/tools/testing/selftests/android/ion/config >>>> @@ -2,3 +2,4 @@ CONFIG_ANDROID=y >>>> CONFIG_STAGING=y >>>> CONFIG_ION=y >>>> CONFIG_ION_SYSTEM_HEAP=y >>>> +CONFIG_DRM_VGEM=y >>>> diff --git a/tools/testing/selftests/android/ion/ionmap_test.c b/tools/testing/selftests/android/ion/ionmap_test.c >>>> new file mode 100644 >>>> index 000000000000..dab36b06b37d >>>> --- /dev/null >>>> +++ b/tools/testing/selftests/android/ion/ionmap_test.c >>>> @@ -0,0 +1,136 @@ >>>> +#include >>>> +#include >>>> +#include >>>> +#include >>>> +#include >>>> +#include >>>> + >>>> +#include >>>> +#include >>>> +#include >>>> + >>>> +#include >>>> + >>>> +#include >>>> + >>>> +#include "ion.h" >>>> +#include "ionutils.h" >>>> + >>>> +int check_vgem(int fd) >>>> +{ >>>> + drm_version_t version = { 0 }; >>>> + char name[5]; >>>> + int ret; >>>> + >>>> + version.name_len = 4; >>>> + version.name = name; >>>> + >>>> + ret = ioctl(fd, DRM_IOCTL_VERSION, &version); >>>> + if (ret) >>>> + return 1; >>>> + >>>> + return strcmp(name, "vgem"); >>>> +} >>>> + >>>> +int open_vgem(void) >>>> +{ >>>> + int i, fd; >>>> + const char *drmstr = "/dev/dri/card"; >>>> + >>>> + fd = -1; >>>> + for (i = 0; i < 16; i++) { >>>> + char name[80]; >>>> + >>>> + sprintf(name, "%s%u", drmstr, i); >>>> + >>>> + fd = open(name, O_RDWR); >>>> + if (fd < 0) >>>> + continue; >>>> + >>>> + if (check_vgem(fd)) { >>>> + close(fd); >>>> + continue; >>>> + } else { >>>> + break; >>>> + } >>>> + >>>> + } >>>> + return fd; >>>> +} >>>> + >>>> +int import_vgem_fd(int vgem_fd, int dma_buf_fd, uint32_t *handle) >>>> +{ >>>> + struct drm_prime_handle import_handle = { 0 }; >>>> + int ret; >>>> + >>>> + import_handle.fd = dma_buf_fd; >>>> + import_handle.flags = 0; >>>> + import_handle.handle = 0; >>>> + >>>> + ret = ioctl(vgem_fd, DRM_IOCTL_PRIME_FD_TO_HANDLE, &import_handle); >>>> + if (ret == 0) >>>> + *handle = import_handle.handle; >>>> + return ret; >>>> +} >>>> + >>>> +void close_handle(int vgem_fd, uint32_t handle) >>>> +{ >>>> + struct drm_gem_close close = { 0 }; >>>> + >>>> + close.handle = handle; >>>> + ioctl(vgem_fd, DRM_IOCTL_GEM_CLOSE, &close); >>>> +} >>>> + >>>> +int main() >>>> +{ >>>> + int ret, vgem_fd; >>>> + struct ion_buffer_info info; >>>> + uint32_t handle = 0; >>>> + struct dma_buf_sync sync = { 0 }; >>>> + >>>> + info.heap_type = ION_HEAP_TYPE_SYSTEM; >>>> + info.heap_size = 4096; >>>> + info.flag_type = ION_FLAG_CACHED; >>>> + >>>> + ret = ion_export_buffer_fd(&info); >>>> + if (ret < 0) { >>>> + printf("ion buffer alloc failed\n"); >>>> + return -1; >>>> + } >>>> + >>>> + vgem_fd = open_vgem(); >>>> + if (vgem_fd < 0) { >>>> + ret = vgem_fd; >>>> + printf("Failed to open vgem\n"); >>>> + goto out_ion; >>>> + } >>>> + >>>> + ret = import_vgem_fd(vgem_fd, info.buffd, &handle); >>>> + >>>> + if (ret < 0) { >>>> + printf("Failed to import buffer\n"); >>>> + goto out_vgem; >>>> + } >>>> + >>>> + sync.flags = DMA_BUF_SYNC_START | DMA_BUF_SYNC_RW; >>>> + ret = ioctl(info.buffd, DMA_BUF_IOCTL_SYNC, &sync); >>>> + if (ret) >>>> + printf("sync start failed %d\n", errno); >>>> + >>>> + memset(info.buffer, 0xff, 4096); >>>> + >>>> + sync.flags = DMA_BUF_SYNC_END | DMA_BUF_SYNC_RW; >>>> + ret = ioctl(info.buffd, DMA_BUF_IOCTL_SYNC, &sync); >>>> + if (ret) >>>> + printf("sync end failed %d\n", errno); >>> >>> At least in drm we require that userspace auto-restarts all ioctls when >>> they get interrupt. See >>> >>> https://cgit.freedesktop.org/drm/libdrm/tree/xf86drm.c#n186 >>> >>> not really an issue with vgem (which can't wait for hw or anything else). >>> But good to make sure we don't spread bad copypastas. >>> >>> Actual use of the ioctls looks all good. With the drmIoctl wrapper added >>> and used this is: >>> >>> Reviewed-by: Daniel Vetter >> >> Thanks for the review. The reason I didn't use the standard drmIoctl was >> because I didn't want to introduce a dependency on libdrm. I don't see >> an example of another selftest having a dependency on an external >> library. >> >> Is adding a dependencies on fairly standard but still external userspace >> libraries okay for kernel self tests? We have cases where external libraries are used. fuse test probably is one example. > > Yeah adding a dependency isn't good, I'd just copypaste a local static > version into the test file. That's good enough, the point isn't to use the > libdrm one, but a wrapper that automatically restarts (every other > userspace for gfx has their own copy of it since it's so trivial). Let's go ahead and use libdrm - It is important to keep them in sync. Maybe we can check dependency in the ion Makefile and not compile the test. As long as the rest of the tests run even when libdrm dependency isn't met, we should be good. thanks, -- Shuah -- To unsubscribe from this list: send the line "unsubscribe linux-kselftest" in the body of a message to majordomo at vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html From mboxrd@z Thu Jan 1 00:00:00 1970 From: shuah@kernel.org (Shuah Khan) Date: Mon, 26 Feb 2018 10:07:01 -0700 Subject: [PATCH 2/2] selftests: ion: Add simple test with the vgem driver In-Reply-To: <20180219183333.GD22199@phenom.ffwll.local> References: <20180216012445.17264-1-labbott@redhat.com> <20180216012445.17264-3-labbott@redhat.com> <20180219153143.GS22199@phenom.ffwll.local> <20180219183333.GD22199@phenom.ffwll.local> Message-ID: Content-Type: text/plain; charset="UTF-8" Message-ID: <20180226170701.gCnJpPK8y1fBAJvSx3QzapFLHez8BT5YBM7kDVBQ05c@z> On 02/19/2018 11:33 AM, Daniel Vetter wrote: > On Mon, Feb 19, 2018@10:18:21AM -0800, Laura Abbott wrote: >> On 02/19/2018 07:31 AM, Daniel Vetter wrote: >>> On Thu, Feb 15, 2018@05:24:45PM -0800, Laura Abbott wrote: >>>> Ion is designed to be a framework used by other clients who perform >>>> operations on the buffer. Use the DRM vgem client as a simple consumer. >>>> In conjunction with the dma-buf sync ioctls, this tests the full attach/map >>>> path for the system heap. >>>> >>>> Signed-off-by: Laura Abbott >>>> --- >>>> tools/testing/selftests/android/ion/Makefile | 3 +- >>>> tools/testing/selftests/android/ion/config | 1 + >>>> tools/testing/selftests/android/ion/ionmap_test.c | 136 ++++++++++++++++++++++ >>>> 3 files changed, 139 insertions(+), 1 deletion(-) >>>> create mode 100644 tools/testing/selftests/android/ion/ionmap_test.c >>>> >>>> diff --git a/tools/testing/selftests/android/ion/Makefile b/tools/testing/selftests/android/ion/Makefile >>>> index 96e0c448b39d..d23b6d537d8b 100644 >>>> --- a/tools/testing/selftests/android/ion/Makefile >>>> +++ b/tools/testing/selftests/android/ion/Makefile >>>> @@ -2,7 +2,7 @@ >>>> INCLUDEDIR := -I. -I../../../../../drivers/staging/android/uapi/ >>>> CFLAGS := $(CFLAGS) $(INCLUDEDIR) -Wall -O2 -g >>>> -TEST_GEN_FILES := ionapp_export ionapp_import >>>> +TEST_GEN_FILES := ionapp_export ionapp_import ionmap_test >>>> all: $(TEST_GEN_FILES) >>>> @@ -14,3 +14,4 @@ include ../../lib.mk >>>> $(OUTPUT)/ionapp_export: ionapp_export.c ipcsocket.c ionutils.c >>>> $(OUTPUT)/ionapp_import: ionapp_import.c ipcsocket.c ionutils.c >>>> +$(OUTPUT)/ionmap_test: ionmap_test.c ionutils.c >>>> diff --git a/tools/testing/selftests/android/ion/config b/tools/testing/selftests/android/ion/config >>>> index 19db6ca9aa2b..b4ad748a9dd9 100644 >>>> --- a/tools/testing/selftests/android/ion/config >>>> +++ b/tools/testing/selftests/android/ion/config >>>> @@ -2,3 +2,4 @@ CONFIG_ANDROID=y >>>> CONFIG_STAGING=y >>>> CONFIG_ION=y >>>> CONFIG_ION_SYSTEM_HEAP=y >>>> +CONFIG_DRM_VGEM=y >>>> diff --git a/tools/testing/selftests/android/ion/ionmap_test.c b/tools/testing/selftests/android/ion/ionmap_test.c >>>> new file mode 100644 >>>> index 000000000000..dab36b06b37d >>>> --- /dev/null >>>> +++ b/tools/testing/selftests/android/ion/ionmap_test.c >>>> @@ -0,0 +1,136 @@ >>>> +#include >>>> +#include >>>> +#include >>>> +#include >>>> +#include >>>> +#include >>>> + >>>> +#include >>>> +#include >>>> +#include >>>> + >>>> +#include >>>> + >>>> +#include >>>> + >>>> +#include "ion.h" >>>> +#include "ionutils.h" >>>> + >>>> +int check_vgem(int fd) >>>> +{ >>>> + drm_version_t version = { 0 }; >>>> + char name[5]; >>>> + int ret; >>>> + >>>> + version.name_len = 4; >>>> + version.name = name; >>>> + >>>> + ret = ioctl(fd, DRM_IOCTL_VERSION, &version); >>>> + if (ret) >>>> + return 1; >>>> + >>>> + return strcmp(name, "vgem"); >>>> +} >>>> + >>>> +int open_vgem(void) >>>> +{ >>>> + int i, fd; >>>> + const char *drmstr = "/dev/dri/card"; >>>> + >>>> + fd = -1; >>>> + for (i = 0; i < 16; i++) { >>>> + char name[80]; >>>> + >>>> + sprintf(name, "%s%u", drmstr, i); >>>> + >>>> + fd = open(name, O_RDWR); >>>> + if (fd < 0) >>>> + continue; >>>> + >>>> + if (check_vgem(fd)) { >>>> + close(fd); >>>> + continue; >>>> + } else { >>>> + break; >>>> + } >>>> + >>>> + } >>>> + return fd; >>>> +} >>>> + >>>> +int import_vgem_fd(int vgem_fd, int dma_buf_fd, uint32_t *handle) >>>> +{ >>>> + struct drm_prime_handle import_handle = { 0 }; >>>> + int ret; >>>> + >>>> + import_handle.fd = dma_buf_fd; >>>> + import_handle.flags = 0; >>>> + import_handle.handle = 0; >>>> + >>>> + ret = ioctl(vgem_fd, DRM_IOCTL_PRIME_FD_TO_HANDLE, &import_handle); >>>> + if (ret == 0) >>>> + *handle = import_handle.handle; >>>> + return ret; >>>> +} >>>> + >>>> +void close_handle(int vgem_fd, uint32_t handle) >>>> +{ >>>> + struct drm_gem_close close = { 0 }; >>>> + >>>> + close.handle = handle; >>>> + ioctl(vgem_fd, DRM_IOCTL_GEM_CLOSE, &close); >>>> +} >>>> + >>>> +int main() >>>> +{ >>>> + int ret, vgem_fd; >>>> + struct ion_buffer_info info; >>>> + uint32_t handle = 0; >>>> + struct dma_buf_sync sync = { 0 }; >>>> + >>>> + info.heap_type = ION_HEAP_TYPE_SYSTEM; >>>> + info.heap_size = 4096; >>>> + info.flag_type = ION_FLAG_CACHED; >>>> + >>>> + ret = ion_export_buffer_fd(&info); >>>> + if (ret < 0) { >>>> + printf("ion buffer alloc failed\n"); >>>> + return -1; >>>> + } >>>> + >>>> + vgem_fd = open_vgem(); >>>> + if (vgem_fd < 0) { >>>> + ret = vgem_fd; >>>> + printf("Failed to open vgem\n"); >>>> + goto out_ion; >>>> + } >>>> + >>>> + ret = import_vgem_fd(vgem_fd, info.buffd, &handle); >>>> + >>>> + if (ret < 0) { >>>> + printf("Failed to import buffer\n"); >>>> + goto out_vgem; >>>> + } >>>> + >>>> + sync.flags = DMA_BUF_SYNC_START | DMA_BUF_SYNC_RW; >>>> + ret = ioctl(info.buffd, DMA_BUF_IOCTL_SYNC, &sync); >>>> + if (ret) >>>> + printf("sync start failed %d\n", errno); >>>> + >>>> + memset(info.buffer, 0xff, 4096); >>>> + >>>> + sync.flags = DMA_BUF_SYNC_END | DMA_BUF_SYNC_RW; >>>> + ret = ioctl(info.buffd, DMA_BUF_IOCTL_SYNC, &sync); >>>> + if (ret) >>>> + printf("sync end failed %d\n", errno); >>> >>> At least in drm we require that userspace auto-restarts all ioctls when >>> they get interrupt. See >>> >>> https://cgit.freedesktop.org/drm/libdrm/tree/xf86drm.c#n186 >>> >>> not really an issue with vgem (which can't wait for hw or anything else). >>> But good to make sure we don't spread bad copypastas. >>> >>> Actual use of the ioctls looks all good. With the drmIoctl wrapper added >>> and used this is: >>> >>> Reviewed-by: Daniel Vetter >> >> Thanks for the review. The reason I didn't use the standard drmIoctl was >> because I didn't want to introduce a dependency on libdrm. I don't see >> an example of another selftest having a dependency on an external >> library. >> >> Is adding a dependencies on fairly standard but still external userspace >> libraries okay for kernel self tests? We have cases where external libraries are used. fuse test probably is one example. > > Yeah adding a dependency isn't good, I'd just copypaste a local static > version into the test file. That's good enough, the point isn't to use the > libdrm one, but a wrapper that automatically restarts (every other > userspace for gfx has their own copy of it since it's so trivial). Let's go ahead and use libdrm - It is important to keep them in sync. Maybe we can check dependency in the ion Makefile and not compile the test. As long as the rest of the tests run even when libdrm dependency isn't met, we should be good. thanks, -- Shuah -- To unsubscribe from this list: send the line "unsubscribe linux-kselftest" in the body of a message to majordomo at vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shuah Khan Subject: Re: [PATCH 2/2] selftests: ion: Add simple test with the vgem driver Date: Mon, 26 Feb 2018 10:07:01 -0700 Message-ID: References: <20180216012445.17264-1-labbott@redhat.com> <20180216012445.17264-3-labbott@redhat.com> <20180219153143.GS22199@phenom.ffwll.local> <20180219183333.GD22199@phenom.ffwll.local> Reply-To: shuah@kernel.org Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mailout.easymail.ca (mailout.easymail.ca [64.68.200.34]) by gabe.freedesktop.org (Postfix) with ESMTPS id 982FE6E12A for ; Mon, 26 Feb 2018 17:07:17 +0000 (UTC) In-Reply-To: <20180219183333.GD22199@phenom.ffwll.local> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Laura Abbott , Sumit Semwal , devel@driverdev.osuosl.org, Todd Kjos , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Liam Mark , linux-kselftest@vger.kernel.org, Shuah Khan , Shuah Khan List-Id: dri-devel@lists.freedesktop.org T24gMDIvMTkvMjAxOCAxMTozMyBBTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPiBPbiBNb24sIEZl YiAxOSwgMjAxOCBhdCAxMDoxODoyMUFNIC0wODAwLCBMYXVyYSBBYmJvdHQgd3JvdGU6Cj4+IE9u IDAyLzE5LzIwMTggMDc6MzEgQU0sIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4+PiBPbiBUaHUsIEZl YiAxNSwgMjAxOCBhdCAwNToyNDo0NVBNIC0wODAwLCBMYXVyYSBBYmJvdHQgd3JvdGU6Cj4+Pj4g SW9uIGlzIGRlc2lnbmVkIHRvIGJlIGEgZnJhbWV3b3JrIHVzZWQgYnkgb3RoZXIgY2xpZW50cyB3 aG8gcGVyZm9ybQo+Pj4+IG9wZXJhdGlvbnMgb24gdGhlIGJ1ZmZlci4gVXNlIHRoZSBEUk0gdmdl bSBjbGllbnQgYXMgYSBzaW1wbGUgY29uc3VtZXIuCj4+Pj4gSW4gY29uanVuY3Rpb24gd2l0aCB0 aGUgZG1hLWJ1ZiBzeW5jIGlvY3RscywgdGhpcyB0ZXN0cyB0aGUgZnVsbCBhdHRhY2gvbWFwCj4+ Pj4gcGF0aCBmb3IgdGhlIHN5c3RlbSBoZWFwLgo+Pj4+Cj4+Pj4gU2lnbmVkLW9mZi1ieTogTGF1 cmEgQWJib3R0IDxsYWJib3R0QHJlZGhhdC5jb20+Cj4+Pj4gLS0tCj4+Pj4gICB0b29scy90ZXN0 aW5nL3NlbGZ0ZXN0cy9hbmRyb2lkL2lvbi9NYWtlZmlsZSAgICAgIHwgICAzICstCj4+Pj4gICB0 b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbmRyb2lkL2lvbi9jb25maWcgICAgICAgIHwgICAxICsK Pj4+PiAgIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FuZHJvaWQvaW9uL2lvbm1hcF90ZXN0LmMg fCAxMzYgKysrKysrKysrKysrKysrKysrKysrKwo+Pj4+ICAgMyBmaWxlcyBjaGFuZ2VkLCAxMzkg aW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+Pj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRv b2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FuZHJvaWQvaW9uL2lvbm1hcF90ZXN0LmMKPj4+Pgo+Pj4+ IGRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbmRyb2lkL2lvbi9NYWtlZmls ZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FuZHJvaWQvaW9uL01ha2VmaWxlCj4+Pj4gaW5k ZXggOTZlMGM0NDhiMzlkLi5kMjNiNmQ1MzdkOGIgMTAwNjQ0Cj4+Pj4gLS0tIGEvdG9vbHMvdGVz dGluZy9zZWxmdGVzdHMvYW5kcm9pZC9pb24vTWFrZWZpbGUKPj4+PiArKysgYi90b29scy90ZXN0 aW5nL3NlbGZ0ZXN0cy9hbmRyb2lkL2lvbi9NYWtlZmlsZQo+Pj4+IEBAIC0yLDcgKzIsNyBAQAo+ Pj4+ICAgSU5DTFVERURJUiA6PSAtSS4gLUkuLi8uLi8uLi8uLi8uLi9kcml2ZXJzL3N0YWdpbmcv YW5kcm9pZC91YXBpLwo+Pj4+ICAgQ0ZMQUdTIDo9ICQoQ0ZMQUdTKSAkKElOQ0xVREVESVIpIC1X YWxsIC1PMiAtZwo+Pj4+IC1URVNUX0dFTl9GSUxFUyA6PSBpb25hcHBfZXhwb3J0IGlvbmFwcF9p bXBvcnQKPj4+PiArVEVTVF9HRU5fRklMRVMgOj0gaW9uYXBwX2V4cG9ydCBpb25hcHBfaW1wb3J0 IGlvbm1hcF90ZXN0Cj4+Pj4gICBhbGw6ICQoVEVTVF9HRU5fRklMRVMpCj4+Pj4gQEAgLTE0LDMg KzE0LDQgQEAgaW5jbHVkZSAuLi8uLi9saWIubWsKPj4+PiAgICQoT1VUUFVUKS9pb25hcHBfZXhw b3J0OiBpb25hcHBfZXhwb3J0LmMgaXBjc29ja2V0LmMgaW9udXRpbHMuYwo+Pj4+ICAgJChPVVRQ VVQpL2lvbmFwcF9pbXBvcnQ6IGlvbmFwcF9pbXBvcnQuYyBpcGNzb2NrZXQuYyBpb251dGlscy5j Cj4+Pj4gKyQoT1VUUFVUKS9pb25tYXBfdGVzdDogaW9ubWFwX3Rlc3QuYyBpb251dGlscy5jCj4+ Pj4gZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FuZHJvaWQvaW9uL2NvbmZp ZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FuZHJvaWQvaW9uL2NvbmZpZwo+Pj4+IGluZGV4 IDE5ZGI2Y2E5YWEyYi4uYjRhZDc0OGE5ZGQ5IDEwMDY0NAo+Pj4+IC0tLSBhL3Rvb2xzL3Rlc3Rp bmcvc2VsZnRlc3RzL2FuZHJvaWQvaW9uL2NvbmZpZwo+Pj4+ICsrKyBiL3Rvb2xzL3Rlc3Rpbmcv c2VsZnRlc3RzL2FuZHJvaWQvaW9uL2NvbmZpZwo+Pj4+IEBAIC0yLDMgKzIsNCBAQCBDT05GSUdf QU5EUk9JRD15Cj4+Pj4gICBDT05GSUdfU1RBR0lORz15Cj4+Pj4gICBDT05GSUdfSU9OPXkKPj4+ PiAgIENPTkZJR19JT05fU1lTVEVNX0hFQVA9eQo+Pj4+ICtDT05GSUdfRFJNX1ZHRU09eQo+Pj4+ IGRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbmRyb2lkL2lvbi9pb25tYXBf dGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYW5kcm9pZC9pb24vaW9ubWFwX3Rlc3Qu Ywo+Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi5kYWIz NmIwNmIzN2QKPj4+PiAtLS0gL2Rldi9udWxsCj4+Pj4gKysrIGIvdG9vbHMvdGVzdGluZy9zZWxm dGVzdHMvYW5kcm9pZC9pb24vaW9ubWFwX3Rlc3QuYwo+Pj4+IEBAIC0wLDAgKzEsMTM2IEBACj4+ Pj4gKyNpbmNsdWRlIDxlcnJuby5oPgo+Pj4+ICsjaW5jbHVkZSA8ZmNudGwuaD4KPj4+PiArI2lu Y2x1ZGUgPHN0ZGlvLmg+Cj4+Pj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4KPj4+PiArI2luY2x1ZGUg PHN0cmluZy5oPgo+Pj4+ICsjaW5jbHVkZSA8dW5pc3RkLmg+Cj4+Pj4gKwo+Pj4+ICsjaW5jbHVk ZSA8c3lzL2lvY3RsLmg+Cj4+Pj4gKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KPj4+PiArI2luY2x1 ZGUgPHN5cy9zdGF0Lmg+Cj4+Pj4gKwo+Pj4+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgo+ Pj4+ICsKPj4+PiArI2luY2x1ZGUgPGRybS9kcm0uaD4KPj4+PiArCj4+Pj4gKyNpbmNsdWRlICJp b24uaCIKPj4+PiArI2luY2x1ZGUgImlvbnV0aWxzLmgiCj4+Pj4gKwo+Pj4+ICtpbnQgY2hlY2tf dmdlbShpbnQgZmQpCj4+Pj4gK3sKPj4+PiArCWRybV92ZXJzaW9uX3QgdmVyc2lvbiA9IHsgMCB9 Owo+Pj4+ICsJY2hhciBuYW1lWzVdOwo+Pj4+ICsJaW50IHJldDsKPj4+PiArCj4+Pj4gKwl2ZXJz aW9uLm5hbWVfbGVuID0gNDsKPj4+PiArCXZlcnNpb24ubmFtZSA9IG5hbWU7Cj4+Pj4gKwo+Pj4+ ICsJcmV0ID0gaW9jdGwoZmQsIERSTV9JT0NUTF9WRVJTSU9OLCAmdmVyc2lvbik7Cj4+Pj4gKwlp ZiAocmV0KQo+Pj4+ICsJCXJldHVybiAxOwo+Pj4+ICsKPj4+PiArCXJldHVybiBzdHJjbXAobmFt ZSwgInZnZW0iKTsKPj4+PiArfQo+Pj4+ICsKPj4+PiAraW50IG9wZW5fdmdlbSh2b2lkKQo+Pj4+ ICt7Cj4+Pj4gKwlpbnQgaSwgZmQ7Cj4+Pj4gKwljb25zdCBjaGFyICpkcm1zdHIgPSAiL2Rldi9k cmkvY2FyZCI7Cj4+Pj4gKwo+Pj4+ICsJZmQgPSAtMTsKPj4+PiArCWZvciAoaSA9IDA7IGkgPCAx NjsgaSsrKSB7Cj4+Pj4gKwkJY2hhciBuYW1lWzgwXTsKPj4+PiArCj4+Pj4gKwkJc3ByaW50Zihu YW1lLCAiJXMldSIsIGRybXN0ciwgaSk7Cj4+Pj4gKwo+Pj4+ICsJCWZkID0gb3BlbihuYW1lLCBP X1JEV1IpOwo+Pj4+ICsJCWlmIChmZCA8IDApCj4+Pj4gKwkJCWNvbnRpbnVlOwo+Pj4+ICsKPj4+ PiArCQlpZiAoY2hlY2tfdmdlbShmZCkpIHsKPj4+PiArCQkJY2xvc2UoZmQpOwo+Pj4+ICsJCQlj b250aW51ZTsKPj4+PiArCQl9IGVsc2Ugewo+Pj4+ICsJCQlicmVhazsKPj4+PiArCQl9Cj4+Pj4g Kwo+Pj4+ICsJfQo+Pj4+ICsJcmV0dXJuIGZkOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtpbnQgaW1w b3J0X3ZnZW1fZmQoaW50IHZnZW1fZmQsIGludCBkbWFfYnVmX2ZkLCB1aW50MzJfdCAqaGFuZGxl KQo+Pj4+ICt7Cj4+Pj4gKwlzdHJ1Y3QgZHJtX3ByaW1lX2hhbmRsZSBpbXBvcnRfaGFuZGxlID0g eyAwIH07Cj4+Pj4gKwlpbnQgcmV0Owo+Pj4+ICsKPj4+PiArCWltcG9ydF9oYW5kbGUuZmQgPSBk bWFfYnVmX2ZkOwo+Pj4+ICsJaW1wb3J0X2hhbmRsZS5mbGFncyA9IDA7Cj4+Pj4gKwlpbXBvcnRf aGFuZGxlLmhhbmRsZSA9IDA7Cj4+Pj4gKwo+Pj4+ICsJcmV0ID0gaW9jdGwodmdlbV9mZCwgRFJN X0lPQ1RMX1BSSU1FX0ZEX1RPX0hBTkRMRSwgJmltcG9ydF9oYW5kbGUpOwo+Pj4+ICsJaWYgKHJl dCA9PSAwKQo+Pj4+ICsJCSpoYW5kbGUgPSBpbXBvcnRfaGFuZGxlLmhhbmRsZTsKPj4+PiArCXJl dHVybiByZXQ7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3ZvaWQgY2xvc2VfaGFuZGxlKGludCB2Z2Vt X2ZkLCB1aW50MzJfdCBoYW5kbGUpCj4+Pj4gK3sKPj4+PiArCXN0cnVjdCBkcm1fZ2VtX2Nsb3Nl IGNsb3NlID0geyAwIH07Cj4+Pj4gKwo+Pj4+ICsJY2xvc2UuaGFuZGxlID0gaGFuZGxlOwo+Pj4+ ICsJaW9jdGwodmdlbV9mZCwgRFJNX0lPQ1RMX0dFTV9DTE9TRSwgJmNsb3NlKTsKPj4+PiArfQo+ Pj4+ICsKPj4+PiAraW50IG1haW4oKQo+Pj4+ICt7Cj4+Pj4gKwlpbnQgcmV0LCB2Z2VtX2ZkOwo+ Pj4+ICsJc3RydWN0IGlvbl9idWZmZXJfaW5mbyBpbmZvOwo+Pj4+ICsJdWludDMyX3QgaGFuZGxl ID0gMDsKPj4+PiArCXN0cnVjdCBkbWFfYnVmX3N5bmMgc3luYyA9IHsgMCB9Owo+Pj4+ICsKPj4+ PiArCWluZm8uaGVhcF90eXBlID0gSU9OX0hFQVBfVFlQRV9TWVNURU07Cj4+Pj4gKwlpbmZvLmhl YXBfc2l6ZSA9IDQwOTY7Cj4+Pj4gKwlpbmZvLmZsYWdfdHlwZSA9IElPTl9GTEFHX0NBQ0hFRDsK Pj4+PiArCj4+Pj4gKwlyZXQgPSBpb25fZXhwb3J0X2J1ZmZlcl9mZCgmaW5mbyk7Cj4+Pj4gKwlp ZiAocmV0IDwgMCkgewo+Pj4+ICsJCXByaW50ZigiaW9uIGJ1ZmZlciBhbGxvYyBmYWlsZWRcbiIp Owo+Pj4+ICsJCXJldHVybiAtMTsKPj4+PiArCX0KPj4+PiArCj4+Pj4gKwl2Z2VtX2ZkID0gb3Bl bl92Z2VtKCk7Cj4+Pj4gKwlpZiAodmdlbV9mZCA8IDApIHsKPj4+PiArCQlyZXQgPSB2Z2VtX2Zk Owo+Pj4+ICsJCXByaW50ZigiRmFpbGVkIHRvIG9wZW4gdmdlbVxuIik7Cj4+Pj4gKwkJZ290byBv dXRfaW9uOwo+Pj4+ICsJfQo+Pj4+ICsKPj4+PiArCXJldCA9IGltcG9ydF92Z2VtX2ZkKHZnZW1f ZmQsIGluZm8uYnVmZmQsICZoYW5kbGUpOwo+Pj4+ICsKPj4+PiArCWlmIChyZXQgPCAwKSB7Cj4+ Pj4gKwkJcHJpbnRmKCJGYWlsZWQgdG8gaW1wb3J0IGJ1ZmZlclxuIik7Cj4+Pj4gKwkJZ290byBv dXRfdmdlbTsKPj4+PiArCX0KPj4+PiArCj4+Pj4gKwlzeW5jLmZsYWdzID0gRE1BX0JVRl9TWU5D X1NUQVJUIHwgRE1BX0JVRl9TWU5DX1JXOwo+Pj4+ICsJcmV0ID0gaW9jdGwoaW5mby5idWZmZCwg RE1BX0JVRl9JT0NUTF9TWU5DLCAmc3luYyk7Cj4+Pj4gKwlpZiAocmV0KQo+Pj4+ICsJCXByaW50 Zigic3luYyBzdGFydCBmYWlsZWQgJWRcbiIsIGVycm5vKTsKPj4+PiArCj4+Pj4gKwltZW1zZXQo aW5mby5idWZmZXIsIDB4ZmYsIDQwOTYpOwo+Pj4+ICsKPj4+PiArCXN5bmMuZmxhZ3MgPSBETUFf QlVGX1NZTkNfRU5EIHwgRE1BX0JVRl9TWU5DX1JXOwo+Pj4+ICsJcmV0ID0gaW9jdGwoaW5mby5i dWZmZCwgRE1BX0JVRl9JT0NUTF9TWU5DLCAmc3luYyk7Cj4+Pj4gKwlpZiAocmV0KQo+Pj4+ICsJ CXByaW50Zigic3luYyBlbmQgZmFpbGVkICVkXG4iLCBlcnJubyk7Cj4+Pgo+Pj4gQXQgbGVhc3Qg aW4gZHJtIHdlIHJlcXVpcmUgdGhhdCB1c2Vyc3BhY2UgYXV0by1yZXN0YXJ0cyBhbGwgaW9jdGxz IHdoZW4KPj4+IHRoZXkgZ2V0IGludGVycnVwdC4gU2VlCj4+Pgo+Pj4gaHR0cHM6Ly9jZ2l0LmZy ZWVkZXNrdG9wLm9yZy9kcm0vbGliZHJtL3RyZWUveGY4NmRybS5jI24xODYKPj4+Cj4+PiBub3Qg cmVhbGx5IGFuIGlzc3VlIHdpdGggdmdlbSAod2hpY2ggY2FuJ3Qgd2FpdCBmb3IgaHcgb3IgYW55 dGhpbmcgZWxzZSkuCj4+PiBCdXQgZ29vZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgc3ByZWFkIGJh ZCBjb3B5cGFzdGFzLgo+Pj4KPj4+IEFjdHVhbCB1c2Ugb2YgdGhlIGlvY3RscyBsb29rcyBhbGwg Z29vZC4gV2l0aCB0aGUgZHJtSW9jdGwgd3JhcHBlciBhZGRlZAo+Pj4gYW5kIHVzZWQgdGhpcyBp czoKPj4+Cj4+PiBSZXZpZXdlZC1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZnds bC5jaD4KPj4KPj4gVGhhbmtzIGZvciB0aGUgcmV2aWV3LiBUaGUgcmVhc29uIEkgZGlkbid0IHVz ZSB0aGUgc3RhbmRhcmQgZHJtSW9jdGwgd2FzCj4+IGJlY2F1c2UgSSBkaWRuJ3Qgd2FudCB0byBp bnRyb2R1Y2UgYSBkZXBlbmRlbmN5IG9uIGxpYmRybS4gSSBkb24ndCBzZWUKPj4gYW4gZXhhbXBs ZSBvZiBhbm90aGVyIHNlbGZ0ZXN0IGhhdmluZyBhIGRlcGVuZGVuY3kgb24gYW4gZXh0ZXJuYWwK Pj4gbGlicmFyeS4KPj4KPj4gSXMgYWRkaW5nIGEgZGVwZW5kZW5jaWVzIG9uIGZhaXJseSBzdGFu ZGFyZCBidXQgc3RpbGwgZXh0ZXJuYWwgdXNlcnNwYWNlCj4+IGxpYnJhcmllcyBva2F5IGZvciBr ZXJuZWwgc2VsZiB0ZXN0cz8KCldlIGhhdmUgY2FzZXMgd2hlcmUgZXh0ZXJuYWwgbGlicmFyaWVz IGFyZSB1c2VkLiBmdXNlIHRlc3QgcHJvYmFibHkgaXMgb25lCmV4YW1wbGUuCgo+IAo+IFllYWgg YWRkaW5nIGEgZGVwZW5kZW5jeSBpc24ndCBnb29kLCBJJ2QganVzdCBjb3B5cGFzdGUgYSBsb2Nh bCBzdGF0aWMKPiB2ZXJzaW9uIGludG8gdGhlIHRlc3QgZmlsZS4gVGhhdCdzIGdvb2QgZW5vdWdo LCB0aGUgcG9pbnQgaXNuJ3QgdG8gdXNlIHRoZQo+IGxpYmRybSBvbmUsIGJ1dCBhIHdyYXBwZXIg dGhhdCBhdXRvbWF0aWNhbGx5IHJlc3RhcnRzIChldmVyeSBvdGhlcgo+IHVzZXJzcGFjZSBmb3Ig Z2Z4IGhhcyB0aGVpciBvd24gY29weSBvZiBpdCBzaW5jZSBpdCdzIHNvIHRyaXZpYWwpLgoKTGV0 J3MgZ28gYWhlYWQgYW5kIHVzZSBsaWJkcm0gLSBJdCBpcyBpbXBvcnRhbnQgdG8ga2VlcCB0aGVt IGluIHN5bmMuIE1heWJlCndlIGNhbiBjaGVjayBkZXBlbmRlbmN5IGluIHRoZSBpb24gTWFrZWZp bGUgYW5kIG5vdCBjb21waWxlIHRoZSB0ZXN0LiBBcyBsb25nCmFzIHRoZSByZXN0IG9mIHRoZSB0 ZXN0cyBydW4gZXZlbiB3aGVuIGxpYmRybSBkZXBlbmRlbmN5IGlzbid0IG1ldCwgd2Ugc2hvdWxk CmJlIGdvb2QuCgp0aGFua3MsCi0tIFNodWFoCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Cyrus-Session-Id: sloti22d1t05-3286258-1519664846-2-17173761739144456642 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no X-Spam-score: 0.0 X-Spam-hits: BAYES_00 -1.9, HEADER_FROM_DIFFERENT_DOMAINS 0.001, RCVD_IN_DNSWL_MED -2.3, SPF_PASS -0.001, LANGUAGES en, BAYES_USED global, SA_VERSION 3.4.0 X-Spam-source: IP='140.211.166.137', Host='smtp4.osuosl.org', Country='US', FromHeader='org', MailFrom='org' X-Spam-charsets: plain='us-ascii' X-Resolved-to: greg@kroah.com X-Delivered-to: greg@kroah.com X-Mail-from: driverdev-devel-bounces@linuxdriverproject.org ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=arctest; t=1519664845; b=LR/bsiTaoU/qbmKtVCtTtZTqHARQeFO82eHyAprBd77BEn4 6qTpHPYtsYIc4YFkisWaIb4+AmJA5bgxZu9KFHV8AYYPNH2DIUNTGoNypWuTTXvT 9lSXr2O+NWZgM8sF4xbt9GJGyWGFLon7euDAyv4UiDaI0axHziBuG0SlTCTKZssG Fo1R9NeqUpHezgvh1fjiTOnm64q/Rk1t8nnB4UrB/ZN1fXZBEms9NqP2pveQMgDR OoaoWLMuNbxLSj85PbgCaF8fKgTwHE5EiMNG7ovvvrmXVJvPo25e9w6LsXPKdfqv HoKgUvB9uPNjystIHyGWcT8Rpglx7n/DW/rsU+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=subject:to:references:from:message-id :date:mime-version:in-reply-to:list-id:list-unsubscribe :list-archive:list-post:list-help:list-subscribe:reply-to :content-type:content-transfer-encoding:sender; s=arctest; t= 1519664845; bh=YUEEMvA8JFAJHFk2KWs6WyDybHbZ8/rUyVnCMJ6bsNw=; b=C BNEn0Wejh3ZNRNGChGAYWiCE5xsxru/awrbLxyRwztGvsVrlOuEM0AMwDTX+5j2w 32y+fcoy3FE/MkikyoQphnKsGbgK6QCdbCFxVe+WlLM7Rrvxn4fvDBMy4BHm/wo+ B6Zw3wyfhUyZV6+dkl0Hn4w+jPrgQsO63m0VuEfj6kzpHXDtM7fYijP//n3QFfGl xCscDv9laZ1OxQSAy4vz7Jox39Np/sBBQ25aUtAEx1JvYL2/X15vPn9Kp+cJvsmJ 0ExqpDBkKbPVgBU/KN9MpH1zbz6nZmKHKmT+Tak+ocjiyRunchrNdY7wLN9OgtU6 6FmnQgIgB4nA4RzWV44rw== ARC-Authentication-Results: i=1; mx3.messagingengine.com; arc=none (no signatures found); dkim=none (no signatures found); dmarc=none (p=none,has-list-id=yes,d=none) header.from=kernel.org; iprev=pass policy.iprev=140.211.166.137 (smtp4.osuosl.org); spf=pass smtp.mailfrom=driverdev-devel-bounces@linuxdriverproject.org smtp.helo=fraxinus.osuosl.org; x-aligned-from=fail; x-ptr=fail x-ptr-helo=fraxinus.osuosl.org x-ptr-lookup=smtp4.osuosl.org; x-return-mx=pass smtp.domain=linuxdriverproject.org smtp.result=pass smtp_is_org_domain=yes header.domain=kernel.org header.result=pass header_is_org_domain=yes; x-tls=pass version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128 Authentication-Results: mx3.messagingengine.com; arc=none (no signatures found); dkim=none (no signatures found); dmarc=none (p=none,has-list-id=yes,d=none) header.from=kernel.org; iprev=pass policy.iprev=140.211.166.137 (smtp4.osuosl.org); spf=pass smtp.mailfrom=driverdev-devel-bounces@linuxdriverproject.org smtp.helo=fraxinus.osuosl.org; x-aligned-from=fail; x-ptr=fail x-ptr-helo=fraxinus.osuosl.org x-ptr-lookup=smtp4.osuosl.org; x-return-mx=pass smtp.domain=linuxdriverproject.org smtp.result=pass smtp_is_org_domain=yes header.domain=kernel.org header.result=pass header_is_org_domain=yes; x-tls=pass version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128 X-Remote-Delivered-To: driverdev-devel@osuosl.org Subject: Re: [PATCH 2/2] selftests: ion: Add simple test with the vgem driver To: Laura Abbott , Sumit Semwal , devel@driverdev.osuosl.org, Todd Kjos , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Liam Mark , linux-kselftest@vger.kernel.org, Shuah Khan , Shuah Khan References: <20180216012445.17264-1-labbott@redhat.com> <20180216012445.17264-3-labbott@redhat.com> <20180219153143.GS22199@phenom.ffwll.local> <20180219183333.GD22199@phenom.ffwll.local> From: Shuah Khan Message-ID: Date: Mon, 26 Feb 2018 10:07:01 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 In-Reply-To: <20180219183333.GD22199@phenom.ffwll.local> Content-Language: en-US X-BeenThere: driverdev-devel@linuxdriverproject.org X-Mailman-Version: 2.1.24 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: shuah@kernel.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: "devel" X-getmail-retrieved-from-mailbox: INBOX X-Mailing-List: linux-kernel@vger.kernel.org List-ID: On 02/19/2018 11:33 AM, Daniel Vetter wrote: > On Mon, Feb 19, 2018 at 10:18:21AM -0800, Laura Abbott wrote: >> On 02/19/2018 07:31 AM, Daniel Vetter wrote: >>> On Thu, Feb 15, 2018 at 05:24:45PM -0800, Laura Abbott wrote: >>>> Ion is designed to be a framework used by other clients who perform >>>> operations on the buffer. Use the DRM vgem client as a simple consumer. >>>> In conjunction with the dma-buf sync ioctls, this tests the full attach/map >>>> path for the system heap. >>>> >>>> Signed-off-by: Laura Abbott >>>> --- >>>> tools/testing/selftests/android/ion/Makefile | 3 +- >>>> tools/testing/selftests/android/ion/config | 1 + >>>> tools/testing/selftests/android/ion/ionmap_test.c | 136 ++++++++++++++++++++++ >>>> 3 files changed, 139 insertions(+), 1 deletion(-) >>>> create mode 100644 tools/testing/selftests/android/ion/ionmap_test.c >>>> >>>> diff --git a/tools/testing/selftests/android/ion/Makefile b/tools/testing/selftests/android/ion/Makefile >>>> index 96e0c448b39d..d23b6d537d8b 100644 >>>> --- a/tools/testing/selftests/android/ion/Makefile >>>> +++ b/tools/testing/selftests/android/ion/Makefile >>>> @@ -2,7 +2,7 @@ >>>> INCLUDEDIR := -I. -I../../../../../drivers/staging/android/uapi/ >>>> CFLAGS := $(CFLAGS) $(INCLUDEDIR) -Wall -O2 -g >>>> -TEST_GEN_FILES := ionapp_export ionapp_import >>>> +TEST_GEN_FILES := ionapp_export ionapp_import ionmap_test >>>> all: $(TEST_GEN_FILES) >>>> @@ -14,3 +14,4 @@ include ../../lib.mk >>>> $(OUTPUT)/ionapp_export: ionapp_export.c ipcsocket.c ionutils.c >>>> $(OUTPUT)/ionapp_import: ionapp_import.c ipcsocket.c ionutils.c >>>> +$(OUTPUT)/ionmap_test: ionmap_test.c ionutils.c >>>> diff --git a/tools/testing/selftests/android/ion/config b/tools/testing/selftests/android/ion/config >>>> index 19db6ca9aa2b..b4ad748a9dd9 100644 >>>> --- a/tools/testing/selftests/android/ion/config >>>> +++ b/tools/testing/selftests/android/ion/config >>>> @@ -2,3 +2,4 @@ CONFIG_ANDROID=y >>>> CONFIG_STAGING=y >>>> CONFIG_ION=y >>>> CONFIG_ION_SYSTEM_HEAP=y >>>> +CONFIG_DRM_VGEM=y >>>> diff --git a/tools/testing/selftests/android/ion/ionmap_test.c b/tools/testing/selftests/android/ion/ionmap_test.c >>>> new file mode 100644 >>>> index 000000000000..dab36b06b37d >>>> --- /dev/null >>>> +++ b/tools/testing/selftests/android/ion/ionmap_test.c >>>> @@ -0,0 +1,136 @@ >>>> +#include >>>> +#include >>>> +#include >>>> +#include >>>> +#include >>>> +#include >>>> + >>>> +#include >>>> +#include >>>> +#include >>>> + >>>> +#include >>>> + >>>> +#include >>>> + >>>> +#include "ion.h" >>>> +#include "ionutils.h" >>>> + >>>> +int check_vgem(int fd) >>>> +{ >>>> + drm_version_t version = { 0 }; >>>> + char name[5]; >>>> + int ret; >>>> + >>>> + version.name_len = 4; >>>> + version.name = name; >>>> + >>>> + ret = ioctl(fd, DRM_IOCTL_VERSION, &version); >>>> + if (ret) >>>> + return 1; >>>> + >>>> + return strcmp(name, "vgem"); >>>> +} >>>> + >>>> +int open_vgem(void) >>>> +{ >>>> + int i, fd; >>>> + const char *drmstr = "/dev/dri/card"; >>>> + >>>> + fd = -1; >>>> + for (i = 0; i < 16; i++) { >>>> + char name[80]; >>>> + >>>> + sprintf(name, "%s%u", drmstr, i); >>>> + >>>> + fd = open(name, O_RDWR); >>>> + if (fd < 0) >>>> + continue; >>>> + >>>> + if (check_vgem(fd)) { >>>> + close(fd); >>>> + continue; >>>> + } else { >>>> + break; >>>> + } >>>> + >>>> + } >>>> + return fd; >>>> +} >>>> + >>>> +int import_vgem_fd(int vgem_fd, int dma_buf_fd, uint32_t *handle) >>>> +{ >>>> + struct drm_prime_handle import_handle = { 0 }; >>>> + int ret; >>>> + >>>> + import_handle.fd = dma_buf_fd; >>>> + import_handle.flags = 0; >>>> + import_handle.handle = 0; >>>> + >>>> + ret = ioctl(vgem_fd, DRM_IOCTL_PRIME_FD_TO_HANDLE, &import_handle); >>>> + if (ret == 0) >>>> + *handle = import_handle.handle; >>>> + return ret; >>>> +} >>>> + >>>> +void close_handle(int vgem_fd, uint32_t handle) >>>> +{ >>>> + struct drm_gem_close close = { 0 }; >>>> + >>>> + close.handle = handle; >>>> + ioctl(vgem_fd, DRM_IOCTL_GEM_CLOSE, &close); >>>> +} >>>> + >>>> +int main() >>>> +{ >>>> + int ret, vgem_fd; >>>> + struct ion_buffer_info info; >>>> + uint32_t handle = 0; >>>> + struct dma_buf_sync sync = { 0 }; >>>> + >>>> + info.heap_type = ION_HEAP_TYPE_SYSTEM; >>>> + info.heap_size = 4096; >>>> + info.flag_type = ION_FLAG_CACHED; >>>> + >>>> + ret = ion_export_buffer_fd(&info); >>>> + if (ret < 0) { >>>> + printf("ion buffer alloc failed\n"); >>>> + return -1; >>>> + } >>>> + >>>> + vgem_fd = open_vgem(); >>>> + if (vgem_fd < 0) { >>>> + ret = vgem_fd; >>>> + printf("Failed to open vgem\n"); >>>> + goto out_ion; >>>> + } >>>> + >>>> + ret = import_vgem_fd(vgem_fd, info.buffd, &handle); >>>> + >>>> + if (ret < 0) { >>>> + printf("Failed to import buffer\n"); >>>> + goto out_vgem; >>>> + } >>>> + >>>> + sync.flags = DMA_BUF_SYNC_START | DMA_BUF_SYNC_RW; >>>> + ret = ioctl(info.buffd, DMA_BUF_IOCTL_SYNC, &sync); >>>> + if (ret) >>>> + printf("sync start failed %d\n", errno); >>>> + >>>> + memset(info.buffer, 0xff, 4096); >>>> + >>>> + sync.flags = DMA_BUF_SYNC_END | DMA_BUF_SYNC_RW; >>>> + ret = ioctl(info.buffd, DMA_BUF_IOCTL_SYNC, &sync); >>>> + if (ret) >>>> + printf("sync end failed %d\n", errno); >>> >>> At least in drm we require that userspace auto-restarts all ioctls when >>> they get interrupt. See >>> >>> https://cgit.freedesktop.org/drm/libdrm/tree/xf86drm.c#n186 >>> >>> not really an issue with vgem (which can't wait for hw or anything else). >>> But good to make sure we don't spread bad copypastas. >>> >>> Actual use of the ioctls looks all good. With the drmIoctl wrapper added >>> and used this is: >>> >>> Reviewed-by: Daniel Vetter >> >> Thanks for the review. The reason I didn't use the standard drmIoctl was >> because I didn't want to introduce a dependency on libdrm. I don't see >> an example of another selftest having a dependency on an external >> library. >> >> Is adding a dependencies on fairly standard but still external userspace >> libraries okay for kernel self tests? We have cases where external libraries are used. fuse test probably is one example. > > Yeah adding a dependency isn't good, I'd just copypaste a local static > version into the test file. That's good enough, the point isn't to use the > libdrm one, but a wrapper that automatically restarts (every other > userspace for gfx has their own copy of it since it's so trivial). Let's go ahead and use libdrm - It is important to keep them in sync. Maybe we can check dependency in the ion Makefile and not compile the test. As long as the rest of the tests run even when libdrm dependency isn't met, we should be good. thanks, -- Shuah _______________________________________________ devel mailing list devel@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel