From patchwork Thu Oct 12 22:27:27 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniele Ceraolo Spurio X-Patchwork-Id: 10003017 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 313526028A for ; Thu, 12 Oct 2017 22:27:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 23BA328EFF for ; Thu, 12 Oct 2017 22:27:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 18CDB28F06; Thu, 12 Oct 2017 22:27:46 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id C182828EFF for ; Thu, 12 Oct 2017 22:27:45 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 693B56E991; Thu, 12 Oct 2017 22:27:45 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id C58556E991 for ; Thu, 12 Oct 2017 22:27:43 +0000 (UTC) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga105.fm.intel.com with ESMTP; 12 Oct 2017 15:27:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos; i="5.43,368,1503385200"; d="scan'208"; a="1230197828" Received: from relo-linux-1.fm.intel.com ([10.1.27.112]) by fmsmga002.fm.intel.com with ESMTP; 12 Oct 2017 15:27:43 -0700 From: Daniele Ceraolo Spurio To: intel-gfx@lists.freedesktop.org Date: Thu, 12 Oct 2017 15:27:27 -0700 Message-Id: <1507847254-3289-2-git-send-email-daniele.ceraolospurio@intel.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1507847254-3289-1-git-send-email-daniele.ceraolospurio@intel.com> References: <1507847254-3289-1-git-send-email-daniele.ceraolospurio@intel.com> Subject: [Intel-gfx] [PATCH i-g-t 1/8] lib/igt_dummyload: add igt_cork X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Virus-Scanned: ClamAV using ClamSMTP The "cork" bo (imported bo with attached fence) is used in several tests to stall execution. Moving it to a common place makes the codebase cleaner. Note that the actual test updates is done in follow up patches as it is simpler to do in one go after one more common function is added in the next patch. Signed-off-by: Daniele Ceraolo Spurio Cc: Chris Wilson --- lib/igt_dummyload.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/igt_dummyload.h | 11 ++++++++ 2 files changed, 86 insertions(+) diff --git a/lib/igt_dummyload.c b/lib/igt_dummyload.c index bb2be55..913cc93 100644 --- a/lib/igt_dummyload.c +++ b/lib/igt_dummyload.c @@ -29,6 +29,7 @@ #include #include "igt_core.h" +#include "drmtest.h" #include "igt_dummyload.h" #include "igt_gt.h" #include "intel_chipset.h" @@ -300,3 +301,77 @@ void igt_terminate_spin_batches(void) igt_list_for_each(iter, &spin_list, link) igt_spin_batch_end(iter); } + +/** + * igt_cork_new + * @fd: open drm file descriptor + * + * Imports a vgem bo with a fence attached to it. This bo can be used as a + * dependency during submission to stall execution until the fence is signaled. + * + * Returns: + * Structure with the handle of the imported bo and helper internal state + * for igt_cork_signal() and igt_cork_free(). + */ +igt_cork_t *igt_cork_new(int fd) +{ + igt_cork_t *cork; + struct vgem_bo bo; + int dmabuf; + + cork = calloc(1, sizeof(igt_cork_t)); + igt_assert(cork); + + cork->device = drm_open_driver(DRIVER_VGEM); + + igt_require(vgem_has_fences(cork->device)); + + bo.width = bo.height = 1; + bo.bpp = 4; + vgem_create(cork->device, &bo); + cork->fence = vgem_fence_attach(cork->device, &bo, VGEM_FENCE_WRITE); + + dmabuf = prime_handle_to_fd(cork->device, bo.handle); + cork->handle = prime_fd_to_handle(fd, dmabuf); + close(dmabuf); + + return cork; +} + +/** + * igt_cork_signal: + * @cork: cork state from igt_cork_new() + * + * This function signals the fence attached to the imported object, thus + * unblocking any stalled execution. + */ +void igt_cork_signal(igt_cork_t *cork) +{ + if (!cork) + return; + + vgem_fence_signal(cork->device, cork->fence); + close(cork->device); + cork->device = 0; +} + +/** + * igt_cork_free: + * @cork: cork state from igt_cork_new() + * @fd: open drm file descriptor + * + * This function signals the fence attached to the imported object (if it + * hasn't already been signaled by igt_cork_signal) and does the necessary + * post-processing. + */ +void igt_cork_free(int fd, igt_cork_t *cork) +{ + if (!cork) + return; + + if (cork->device) + igt_cork_signal(cork); + + gem_close(fd, cork->handle); + free(cork); +} diff --git a/lib/igt_dummyload.h b/lib/igt_dummyload.h index 215425f..d20a867 100644 --- a/lib/igt_dummyload.h +++ b/lib/igt_dummyload.h @@ -29,6 +29,7 @@ #include #include "igt_aux.h" +#include "igt_vgem.h" typedef struct igt_spin { unsigned int handle; @@ -51,4 +52,14 @@ void igt_spin_batch_free(int fd, igt_spin_t *spin); void igt_terminate_spin_batches(void); +typedef struct igt_cork { + int device; + uint32_t handle; + uint32_t fence; +} igt_cork_t; + +igt_cork_t *igt_cork_new(int fd); +void igt_cork_signal(igt_cork_t *cork); +void igt_cork_free(int fd, igt_cork_t *cork); + #endif /* __IGT_DUMMYLOAD_H__ */