From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shuah Khan Subject: Re: [PATCH v2 1/7] selftest: sync: basic tests for sw_sync framework Date: Tue, 13 Dec 2016 09:46:40 -0700 Message-ID: <6e8a65a6-e72d-beca-1c68-32bd3287c674@kernel.org> References: <20160921211205.22657-1-emilio.lopez@collabora.co.uk> <20161019124954.29232-1-emilio.lopez@collabora.co.uk> <20161019124954.29232-2-emilio.lopez@collabora.co.uk> <20161101161847.GB3334@joana> Reply-To: shuah@kernel.org Mime-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <20161101161847.GB3334@joana> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: "devel" To: Gustavo Padovan , =?UTF-8?Q?Emilio_L=c3=b3pez?= Cc: devel@driverdev.osuosl.org, robdclark@gmail.com, Shuah Khan , daniels@collabora.com, daniel.vetter@ffwll.ch, arve@android.com, maarten.lankhorst@linux.intel.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Shuah Khan , emil.l.velikov@gmail.com, riandrews@android.com, ghackmann@google.com, linux-kselftest@vger.kernel.org, mpe@ellerman.id.au, gustavo.padovan@collabora.co.uk, John.C.Harrison@Intel.com List-Id: dri-devel@lists.freedesktop.org Hi Gustavo, On 11/01/2016 10:18 AM, Gustavo Padovan wrote: > Hi Emilio, > = > 2016-10-19 Emilio L=F3pez : > = >> These tests are based on the libsync test suite from Android. >> This commit lays the ground for future tests, as well as includes >> tests for a variety of basic allocation commands. >> >> Signed-off-by: Emilio L=F3pez >> --- >> tools/testing/selftests/Makefile | 1 + >> tools/testing/selftests/sync/.gitignore | 1 + >> tools/testing/selftests/sync/Makefile | 18 +++ >> tools/testing/selftests/sync/sw_sync.h | 46 +++++++ >> tools/testing/selftests/sync/sync.c | 221 +++++++++++++++++++++++= +++++++ >> tools/testing/selftests/sync/sync.h | 40 ++++++ >> tools/testing/selftests/sync/sync_alloc.c | 74 ++++++++++ >> tools/testing/selftests/sync/sync_test.c | 71 ++++++++++ >> tools/testing/selftests/sync/synctest.h | 47 +++++++ >> 9 files changed, 519 insertions(+) >> create mode 100644 tools/testing/selftests/sync/.gitignore >> create mode 100644 tools/testing/selftests/sync/Makefile >> create mode 100644 tools/testing/selftests/sync/sw_sync.h >> create mode 100644 tools/testing/selftests/sync/sync.c >> create mode 100644 tools/testing/selftests/sync/sync.h >> create mode 100644 tools/testing/selftests/sync/sync_alloc.c >> create mode 100644 tools/testing/selftests/sync/sync_test.c >> create mode 100644 tools/testing/selftests/sync/synctest.h >> >> diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/= Makefile >> index f770dba..69cf1a6 100644 >> --- a/tools/testing/selftests/Makefile >> +++ b/tools/testing/selftests/Makefile >> @@ -23,6 +23,7 @@ TARGETS +=3D seccomp >> TARGETS +=3D sigaltstack >> TARGETS +=3D size >> TARGETS +=3D static_keys >> +TARGETS +=3D sync >> TARGETS +=3D sysctl >> ifneq (1, $(quicktest)) >> TARGETS +=3D timers >> diff --git a/tools/testing/selftests/sync/.gitignore b/tools/testing/sel= ftests/sync/.gitignore >> new file mode 100644 >> index 0000000..f5091e7 >> --- /dev/null >> +++ b/tools/testing/selftests/sync/.gitignore >> @@ -0,0 +1 @@ >> +sync_test >> diff --git a/tools/testing/selftests/sync/Makefile b/tools/testing/selft= ests/sync/Makefile >> new file mode 100644 >> index 0000000..620a59a >> --- /dev/null >> +++ b/tools/testing/selftests/sync/Makefile >> @@ -0,0 +1,18 @@ >> +CFLAGS +=3D -O2 -g -std=3Dgnu89 -pthread -Wall -Wextra >> +CFLAGS +=3D -I../../../../usr/include/ >> +LDFLAGS +=3D -pthread >> + >> +TEST_PROGS =3D sync_test >> + >> +all: $(TEST_PROGS) >> + >> +include ../lib.mk >> + >> +OBJS =3D sync_test.o sync.o >> + >> +TESTS +=3D sync_alloc.o >> + >> +sync_test: $(OBJS) $(TESTS) >> + >> +clean: >> + $(RM) sync_test $(OBJS) $(TESTS) >> diff --git a/tools/testing/selftests/sync/sw_sync.h b/tools/testing/self= tests/sync/sw_sync.h >> new file mode 100644 >> index 0000000..e2cfc6ba >> --- /dev/null >> +++ b/tools/testing/selftests/sync/sw_sync.h >> @@ -0,0 +1,46 @@ >> +/* >> + * sw_sync abstraction >> + * >> + * Copyright 2015-2016 Collabora Ltd. >> + * >> + * Based on the implementation from the Android Open Source Project, >> + * >> + * Copyright 2013 Google, Inc >> + * >> + * Permission is hereby granted, free of charge, to any person obtaini= ng a >> + * copy of this software and associated documentation files (the "Soft= ware"), >> + * to deal in the Software without restriction, including without limi= tation >> + * the rights to use, copy, modify, merge, publish, distribute, sublic= ense, >> + * and/or sell copies of the Software, and to permit persons to whom t= he >> + * Software is furnished to do so, subject to the following conditions: >> + * >> + * The above copyright notice and this permission notice shall be incl= uded in >> + * all copies or substantial portions of the Software. >> + * >> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXP= RESS OR >> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABI= LITY, >> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT S= HALL >> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR >> + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWIS= E, >> + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE = OR >> + * OTHER DEALINGS IN THE SOFTWARE. >> + */ >> + >> +#ifndef SELFTESTS_SW_SYNC_H >> +#define SELFTESTS_SW_SYNC_H >> + >> +/* >> + * sw_sync is mainly intended for testing and should not be compiled in= to >> + * production kernels >> + */ >> + >> +int sw_sync_timeline_create(void); >> +int sw_sync_timeline_is_valid(int fd); >> +int sw_sync_timeline_inc(int fd, unsigned int count); >> +void sw_sync_timeline_destroy(int fd); >> + >> +int sw_sync_fence_create(int fd, const char *name, unsigned int value); >> +int sw_sync_fence_is_valid(int fd); >> +void sw_sync_fence_destroy(int fd); >> + >> +#endif >> diff --git a/tools/testing/selftests/sync/sync.c b/tools/testing/selftes= ts/sync/sync.c >> new file mode 100644 >> index 0000000..f3d599f >> --- /dev/null >> +++ b/tools/testing/selftests/sync/sync.c >> @@ -0,0 +1,221 @@ >> +/* >> + * sync / sw_sync abstraction >> + * Copyright 2015-2016 Collabora Ltd. >> + * >> + * Based on the implementation from the Android Open Source Project, >> + * >> + * Copyright 2012 Google, Inc >> + * >> + * Permission is hereby granted, free of charge, to any person obtaini= ng a >> + * copy of this software and associated documentation files (the "Soft= ware"), >> + * to deal in the Software without restriction, including without limi= tation >> + * the rights to use, copy, modify, merge, publish, distribute, sublic= ense, >> + * and/or sell copies of the Software, and to permit persons to whom t= he >> + * Software is furnished to do so, subject to the following conditions: >> + * >> + * The above copyright notice and this permission notice shall be incl= uded in >> + * all copies or substantial portions of the Software. >> + * >> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXP= RESS OR >> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABI= LITY, >> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT S= HALL >> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR >> + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWIS= E, >> + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE = OR >> + * OTHER DEALINGS IN THE SOFTWARE. >> + */ >> + >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> + >> +#include >> +#include >> +#include >> + >> +#include "sync.h" >> +#include "sw_sync.h" >> + >> +#include >> + >> + >> +/* SW_SYNC ioctls */ >> +struct sw_sync_create_fence_data { >> + __u32 value; >> + char name[32]; >> + __s32 fence; >> +}; >> + >> +#define SW_SYNC_IOC_MAGIC 'W' >> +#define SW_SYNC_IOC_CREATE_FENCE _IOWR(SW_SYNC_IOC_MAGIC, 0,\ >> + struct sw_sync_create_fence_data) >> +#define SW_SYNC_IOC_INC _IOW(SW_SYNC_IOC_MAGIC, 1, __u32) >> + >> + >> +int sync_wait(int fd, int timeout) >> +{ >> + struct pollfd fds; >> + >> + fds.fd =3D fd; >> + fds.events =3D POLLIN | POLLERR; >> + >> + return poll(&fds, 1, timeout); >> +} > = > I think it is a good idea to keep the sync_wait behaviour similar to > what it was on android libsync. It should be something like this: I didn't notice that this comment wasn't addressed. I will go ahead and continue with the plan to get these into 4.10-rc1. If you want to send me patch for this behavior, please do. We can address that as a fix in 4.10-rc2 > = > int sw_sync_wait(int fd, int timeout) = = > { = = > struct pollfd fds =3D {0}; = = > int ret; = = > = = > fds.fd =3D fd; = = > fds.events =3D POLLIN; = = > = = > do { = = > ret =3D poll(&fds, 1, timeout); = = > if (ret > 0) { = = > if (fds.revents & (POLLERR | POLLNVAL)) { = = > errno =3D EINVAL; = = > return -1; = = > } = = > return 0; = = > } else if (ret =3D=3D 0) { = = > errno =3D ETIME; = = > return -1; = = > } = = > } while (ret =3D=3D -1 && (errno =3D=3D EINTR || errno =3D=3D EAG= AIN)); = > = = > return ret; = = > } = > = > = > Gustavo > = thanks, -- Shuah