From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH] prime_self_import: Assure no pending requests before object counting Date: Fri, 1 Nov 2013 17:08:17 +0100 Message-ID: <20131101160817.GM4167@phenom.ffwll.local> References: <1383310422-30702-1-git-send-email-oscar.mateo@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail-ea0-f180.google.com (mail-ea0-f180.google.com [209.85.215.180]) by gabe.freedesktop.org (Postfix) with ESMTP id 43D14F06C0 for ; Fri, 1 Nov 2013 09:07:51 -0700 (PDT) Received: by mail-ea0-f180.google.com with SMTP id l9so1768752eaj.39 for ; Fri, 01 Nov 2013 09:07:50 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1383310422-30702-1-git-send-email-oscar.mateo@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces@lists.freedesktop.org Errors-To: intel-gfx-bounces@lists.freedesktop.org To: oscar.mateo@intel.com Cc: intel-gfx@lists.freedesktop.org, Ben Widawsky List-Id: intel-gfx@lists.freedesktop.org On Fri, Nov 01, 2013 at 12:53:42PM +0000, oscar.mateo@intel.com wrote: > From: Oscar Mateo > > We don't want a previously used object to be freed in the middle of a > before/after object counting operation (or we would get a "-1 objects > leaked" message). We have seen this happening, e.g., when a context > from a previous run dies, but its backing object is alive waiting for > a retire_work to kick in. > > Signed-off-by: Oscar Mateo > Cc: Ben Widawsky Nice catch. Should we do this in general as part of our gem_quiescent_gpu helper? All i-g-t testcase are written under the assumption that they completel own the gpu and that the gtt is completely empty besides the few driver-allocated and pinned objects. So trying really hard to get rid of any residual stuff sounds like a good idea. Then we could just add a call to gem_quiescent_gpu to the get_object_count function. Care to rework the patch a bit and make sure it all still works? Thanks, Daniel > --- > tests/prime_self_import.c | 29 +++++++++++++++++++++++++++-- > 1 file changed, 27 insertions(+), 2 deletions(-) > > diff --git a/tests/prime_self_import.c b/tests/prime_self_import.c > index 481a809..e48abd1 100644 > --- a/tests/prime_self_import.c > +++ b/tests/prime_self_import.c > @@ -211,6 +211,25 @@ static void test_with_one_bo(void) > check_bo(fd2, handle_import1, fd2, handle_import1); > } > > +static void retire_requests(void) > +{ > + char fname[FILENAME_MAX]; > + int drop_caches_fd; > + const char *data = "0x4"; > + > + snprintf(fname, FILENAME_MAX, "%s/%i/%s", > + "/sys/kernel/debug/dri", drm_get_card(), > + "i915_gem_drop_caches"); > + > + drop_caches_fd = open(fname, O_WRONLY); > + > + if (drop_caches_fd >= 0) > + { > + write(drop_caches_fd, data, strlen(data) + 1); > + close(drop_caches_fd); > + } > +} > + > static int get_object_count(void) > { > FILE *file; > @@ -252,10 +271,13 @@ static void test_reimport_close_race(void) > pthread_t *threads; > int r, i, num_threads; > int fds[2]; > - int obj_count = get_object_count(); > + int obj_count; > void *status; > uint32_t handle; > > + retire_requests(); > + obj_count = get_object_count(); > + > num_threads = sysconf(_SC_NPROCESSORS_ONLN); > > threads = calloc(num_threads, sizeof(pthread_t)); > @@ -330,9 +352,12 @@ static void test_export_close_race(void) > pthread_t *threads; > int r, i, num_threads; > int fd; > - int obj_count = get_object_count(); > + int obj_count; > void *status; > > + retire_requests(); > + obj_count = get_object_count(); > + > num_threads = sysconf(_SC_NPROCESSORS_ONLN); > > threads = calloc(num_threads, sizeof(pthread_t)); > -- > 1.7.9.5 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch