From mboxrd@z Thu Jan 1 00:00:00 1970 From: oscar.mateo@intel.com Subject: [PATCH] prime_self_import: Assure no pending requests before object counting Date: Fri, 1 Nov 2013 12:53:42 +0000 Message-ID: <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 mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 73AD9EE657 for ; Fri, 1 Nov 2013 05:58:23 -0700 (PDT) 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: intel-gfx@lists.freedesktop.org Cc: Ben Widawsky List-Id: intel-gfx@lists.freedesktop.org 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 --- 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