From patchwork Tue Jan 31 13:15:37 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tvrtko Ursulin X-Patchwork-Id: 9547221 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 30D6B6016C for ; Tue, 31 Jan 2017 13:16:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 22D5827F9E for ; Tue, 31 Jan 2017 13:16:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 17F6E2832B; Tue, 31 Jan 2017 13:16:07 +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.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,T_DKIM_INVALID 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 995BD27F9E for ; Tue, 31 Jan 2017 13:16:06 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8B0176E666; Tue, 31 Jan 2017 13:16:03 +0000 (UTC) X-Original-To: Intel-gfx@lists.freedesktop.org Delivered-To: Intel-gfx@lists.freedesktop.org Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 33E346E65D for ; Tue, 31 Jan 2017 13:15:57 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id u63so15508810wmu.2 for ; Tue, 31 Jan 2017 05:15:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ursulin-net.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=STtOUE6tXgT85SWdDhfOOfgwdVRojVxPnsJPULcwFd4=; b=W1MGAkiul8ijw10Utv2byu7N+7pU6RQt6aIOhOs/bDh6itwjJD8X1WUPD0tgrSdsIh rEpQjTs7mRmyhaP2BkVb2HYVnVWbWT2WuMcsdn84EmVwncFIL55hhD1vtMNu7Gj2mtj1 hHj4S8QuU/sv9fWdQNVtFVArEG4qIF1mOmyv6Z+9jR8MO4ofPNmaxDAUOhV+/cZS1KGo EC+8dHTefwpU3zPFW9eEum/BSfnITfUR6Xs4U1bNR89rr6M3VdwgPKwgG/EyrvtvMuWM YG2DD51z/mYdQkMdIfOYUisImPHCGK+NH5ggYvPoAQcJ95NjzVcbjWhPJnOY+YBHL4YA DXug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=STtOUE6tXgT85SWdDhfOOfgwdVRojVxPnsJPULcwFd4=; b=qS/bGPDQ0OHa45etpaiJwamCi76C7k08fem5Vyg0UzfFgfYjxmyMD/tizlcP7F4GSg kDE3bg5HxY+DDQ1Wj0Ic0hoMDZ9t6jagRk3XrNJ0Ng2dg3E2PGedUvM7LiDy/cEXKhgU 9y5pAOW82j7mvFz1w5s/aGLX23ImApBwI3W2KBzKW7P4CSfCkVyImZqBzlenNky4SAKC ebBgsqVPz8dn/pJiaqDplwQMoTR+uMtQ+MpwESxbdKlbJqSyw1FMyKlLsuj1+cRBnUeo C7MnQxeW8G6vcqlP3iFp5b7BjAFKqxGrTjj5QdwZerX/Rr/gfGChMaWUe0JmZ55hSrLX HQzA== X-Gm-Message-State: AIkVDXIQnG+l3cARueMqqg7BtE6QYnW5xZVieBJMvbwR2l1zAEgBRvbW/VRneULqWydJcQ== X-Received: by 10.223.161.74 with SMTP id r10mr23597484wrr.16.1485868555399; Tue, 31 Jan 2017 05:15:55 -0800 (PST) Received: from t460p.intel ([2a02:c7d:9bd6:b000:f37e:1e07:a7d8:46cd]) by smtp.gmail.com with ESMTPSA id y127sm23780800wmg.12.2017.01.31.05.15.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 31 Jan 2017 05:15:54 -0800 (PST) From: Tvrtko Ursulin X-Google-Original-From: Tvrtko Ursulin To: Intel-gfx@lists.freedesktop.org Date: Tue, 31 Jan 2017 13:15:37 +0000 Message-Id: <1485868546-4927-2-git-send-email-tvrtko.ursulin@linux.intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1485868546-4927-1-git-send-email-tvrtko.ursulin@linux.intel.com> References: <1485868546-4927-1-git-send-email-tvrtko.ursulin@linux.intel.com> Subject: [Intel-gfx] [PATCH 01/10] drm/i915: Tidy i915_gem_do_execbuffer 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 From: Tvrtko Ursulin Instead of sprinkling around usage and initialization of i915_execbuffer_params we can consolidate it just before execbuf_submit for maintability and readability. That way we can also drop the memset since it becomes easy to spot we initialize all the fields. text data bss dec hex filename 1085466 26398 2628 1114492 11017c i915.ko.0 1085402 26398 2628 1114428 11013c i915.ko.1 Signed-off-by: Tvrtko Ursulin Reviewed-by: Joonas Lahtinen --- drivers/gpu/drm/i915/i915_gem_execbuffer.c | 87 +++++++++++++++--------------- 1 file changed, 44 insertions(+), 43 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c index 91c2393199a3..ee7b7bd17e29 100644 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c @@ -50,14 +50,14 @@ #define BATCH_OFFSET_BIAS (256*1024) struct i915_execbuffer_params { - struct drm_device *dev; - struct drm_file *file; - struct i915_vma *batch; - u32 dispatch_flags; - u32 args_batch_start_offset; - struct intel_engine_cs *engine; - struct i915_gem_context *ctx; - struct drm_i915_gem_request *request; + struct drm_device *dev; + struct drm_file *file; + struct i915_vma *batch; + u32 dispatch_flags; + u32 batch_start; + struct intel_engine_cs *engine; + struct i915_gem_context *ctx; + struct drm_i915_gem_request *request; }; struct eb_vmas { @@ -1484,11 +1484,10 @@ execbuf_submit(struct i915_execbuffer_params *params, } exec_len = args->batch_len; - exec_start = params->batch->node.start + - params->args_batch_start_offset; + exec_start = params->batch->node.start + params->batch_start; if (exec_len == 0) - exec_len = params->batch->size - params->args_batch_start_offset; + exec_len = params->batch->size - params->batch_start; ret = params->engine->emit_bb_start(params->request, exec_start, exec_len, @@ -1592,8 +1591,10 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, struct intel_engine_cs *engine; struct i915_gem_context *ctx; struct i915_address_space *vm; - struct i915_execbuffer_params params_master; /* XXX: will be removed later */ - struct i915_execbuffer_params *params = ¶ms_master; + struct drm_i915_gem_request *req; + struct i915_vma *batch; + u32 batch_start_offset; + struct i915_execbuffer_params params; const u32 ctx_id = i915_execbuffer2_get_context_id(*args); u32 dispatch_flags; struct dma_fence *in_fence = NULL; @@ -1685,8 +1686,6 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, else vm = &ggtt->base; - memset(¶ms_master, 0x00, sizeof(params_master)); - eb = eb_create(dev_priv, args); if (eb == NULL) { i915_gem_context_put(ctx); @@ -1701,7 +1700,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, goto err; /* take note of the batch buffer before we might reorder the lists */ - params->batch = eb_get_batch(eb); + batch = eb_get_batch(eb); /* Move the objects en-masse into the GTT, evicting if necessary. */ need_relocs = (args->flags & I915_EXEC_NO_RELOC) == 0; @@ -1725,24 +1724,24 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, } /* Set the pending read domains for the batch buffer to COMMAND */ - if (params->batch->obj->base.pending_write_domain) { + if (batch->obj->base.pending_write_domain) { DRM_DEBUG("Attempting to use self-modifying batch buffer\n"); ret = -EINVAL; goto err; } - if (args->batch_start_offset > params->batch->size || - args->batch_len > params->batch->size - args->batch_start_offset) { + if (args->batch_start_offset > batch->size || + args->batch_len > batch->size - args->batch_start_offset) { DRM_DEBUG("Attempting to use out-of-bounds batch\n"); ret = -EINVAL; goto err; } - params->args_batch_start_offset = args->batch_start_offset; + batch_start_offset = args->batch_start_offset; if (engine->needs_cmd_parser && args->batch_len) { struct i915_vma *vma; vma = i915_gem_execbuffer_parse(engine, &shadow_exec_entry, - params->batch->obj, + batch->obj, eb, args->batch_start_offset, args->batch_len, @@ -1763,18 +1762,18 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, * command parser has accepted. */ dispatch_flags |= I915_DISPATCH_SECURE; - params->args_batch_start_offset = 0; - params->batch = vma; + batch_start_offset = 0; + batch = vma; } } - params->batch->obj->base.pending_read_domains |= I915_GEM_DOMAIN_COMMAND; + batch->obj->base.pending_read_domains |= I915_GEM_DOMAIN_COMMAND; /* snb/ivb/vlv conflate the "batch in ppgtt" bit with the "non-secure * batch" bit. Hence we need to pin secure batches into the global gtt. * hsw should have this fixed, but bdw mucks it up again. */ if (dispatch_flags & I915_DISPATCH_SECURE) { - struct drm_i915_gem_object *obj = params->batch->obj; + struct drm_i915_gem_object *obj = batch->obj; struct i915_vma *vma; /* @@ -1793,25 +1792,24 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, goto err; } - params->batch = vma; + batch = vma; } /* Allocate a request for this batch buffer nice and early. */ - params->request = i915_gem_request_alloc(engine, ctx); - if (IS_ERR(params->request)) { - ret = PTR_ERR(params->request); + req = i915_gem_request_alloc(engine, ctx); + if (IS_ERR(req)) { + ret = PTR_ERR(req); goto err_batch_unpin; } if (in_fence) { - ret = i915_gem_request_await_dma_fence(params->request, - in_fence); + ret = i915_gem_request_await_dma_fence(req, in_fence); if (ret < 0) goto err_request; } if (out_fence_fd != -1) { - out_fence = sync_file_create(¶ms->request->fence); + out_fence = sync_file_create(&req->fence); if (!out_fence) { ret = -ENOMEM; goto err_request; @@ -1824,9 +1822,9 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, * inactive_list and lose its active reference. Hence we do not need * to explicitly hold another reference here. */ - params->request->batch = params->batch; + req->batch = batch; - ret = i915_gem_request_add_to_client(params->request, file); + ret = i915_gem_request_add_to_client(req, file); if (ret) goto err_request; @@ -1836,15 +1834,18 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, * kept around beyond the duration of the IOCTL once the GPU * scheduler arrives. */ - params->dev = dev; - params->file = file; - params->engine = engine; - params->dispatch_flags = dispatch_flags; - params->ctx = ctx; - - ret = execbuf_submit(params, args, &eb->vmas); + params.dev = dev; + params.file = file; + params.engine = engine; + params.dispatch_flags = dispatch_flags; + params.ctx = ctx; + params.batch = batch; + params.batch_start = batch_start_offset; + params.request = req; + + ret = execbuf_submit(¶ms, args, &eb->vmas); err_request: - __i915_add_request(params->request, ret == 0); + __i915_add_request(req, ret == 0); if (out_fence) { if (ret == 0) { fd_install(out_fence_fd, out_fence->file); @@ -1864,7 +1865,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, * active. */ if (dispatch_flags & I915_DISPATCH_SECURE) - i915_vma_unpin(params->batch); + i915_vma_unpin(batch); err: /* the request owns the ref now */ i915_gem_context_put(ctx);