From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3682DC2D0E4 for ; Tue, 17 Nov 2020 18:14:09 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D23622462E for ; Tue, 17 Nov 2020 18:14:08 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D23622462E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4A54B899B5; Tue, 17 Nov 2020 18:14:08 +0000 (UTC) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id A5575899B5 for ; Tue, 17 Nov 2020 18:14:06 +0000 (UTC) IronPort-SDR: C7RwDnBgan7fCDlkiLwTvIOZn79kfGQRuElVPeAGzZaQRlzMupI67t5F1Na3gRbBNJCbtMupUw JumnuXhm8+AA== X-IronPort-AV: E=McAfee;i="6000,8403,9808"; a="170197564" X-IronPort-AV: E=Sophos;i="5.77,486,1596524400"; d="scan'208";a="170197564" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Nov 2020 10:14:01 -0800 IronPort-SDR: Jj6cWSAirBRL5ogUTTKh+5mJSXSLV9sJ+e7e5xleKpUDQ1mVomfll0hFhZFzR04P3et/PgPezM auMOsx5fXoRQ== X-IronPort-AV: E=Sophos;i="5.77,486,1596524400"; d="scan'208";a="544150829" Received: from orsosgc001.ra.intel.com ([10.23.184.150]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Nov 2020 10:14:00 -0800 Date: Tue, 17 Nov 2020 10:14:00 -0800 From: Umesh Nerlige Ramappa To: Chris Wilson Message-ID: <20201117181400.GC47109@orsosgc001.ra.intel.com> References: <20201117110132.22267-1-chris@chris-wilson.co.uk> <20201117110132.22267-2-chris@chris-wilson.co.uk> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20201117110132.22267-2-chris@chris-wilson.co.uk> User-Agent: Mutt/1.12.1 (2019-06-15) Subject: Re: [Intel-gfx] [PATCH 2/8] drm/i915/gt: Refactor _wa_add to reuse wa_index and wa_list_grow X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: intel-gfx@lists.freedesktop.org Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" This is quite different and much cleane from my original patch :), so you should be the author. With that, this is Reviewed-by: Umesh Nerlige Ramappa Thanks, Umesh On Tue, Nov 17, 2020 at 11:01:26AM +0000, Chris Wilson wrote: >From: Umesh Nerlige Ramappa > >Switch the search and grow code of the _wa_add to use _wa_index and >_wa_list_grow. > >Signed-off-by: Umesh Nerlige Ramappa >--- > drivers/gpu/drm/i915/gt/intel_workarounds.c | 124 +++++++++++--------- > 1 file changed, 71 insertions(+), 53 deletions(-) > >diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c >index c49083957074..e50c72d2b3f1 100644 >--- a/drivers/gpu/drm/i915/gt/intel_workarounds.c >+++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c >@@ -91,20 +91,19 @@ static void wa_init_start(struct i915_wa_list *wal, const char *name, const char > > #define WA_LIST_CHUNK (1 << 4) > >-static void wa_init_finish(struct i915_wa_list *wal) >+static void wa_trim(struct i915_wa_list *wal, gfp_t gfp) > { >+ struct i915_wa *list; >+ > /* Trim unused entries. */ >- if (!IS_ALIGNED(wal->count, WA_LIST_CHUNK)) { >- struct i915_wa *list = kmemdup(wal->list, >- wal->count * sizeof(*list), >- GFP_KERNEL); >- >- if (list) { >- kfree(wal->list); >- wal->list = list; >- } >- } >+ list = krealloc(wal->list, wal->count * sizeof(*list), gfp); >+ if (list) >+ wal->list = list; >+} > >+static void wa_init_finish(struct i915_wa_list *wal) >+{ >+ wa_trim(wal, GFP_KERNEL); > if (!wal->count) > return; > >@@ -112,57 +111,60 @@ static void wa_init_finish(struct i915_wa_list *wal) > wal->wa_count, wal->name, wal->engine_name); > } > >-static void _wa_add(struct i915_wa_list *wal, const struct i915_wa *wa) >+static int wa_index(struct i915_wa_list *wal, i915_reg_t reg) > { >- unsigned int addr = i915_mmio_reg_offset(wa->reg); >- unsigned int start = 0, end = wal->count; >- const unsigned int grow = WA_LIST_CHUNK; >- struct i915_wa *wa_; >+ unsigned int addr = i915_mmio_reg_offset(reg); >+ int start = 0, end = wal->count; > >- GEM_BUG_ON(!is_power_of_2(grow)); >+ /* addr and wal->list[].reg, both include the R/W flags */ >+ while (start < end) { >+ unsigned int mid = start + (end - start) / 2; > >- if (IS_ALIGNED(wal->count, grow)) { /* Either uninitialized or full. */ >- struct i915_wa *list; >+ if (i915_mmio_reg_offset(wal->list[mid].reg) < addr) >+ start = mid + 1; >+ else if (i915_mmio_reg_offset(wal->list[mid].reg) > addr) >+ end = mid; >+ else >+ return mid; >+ } > >- list = kmalloc_array(ALIGN(wal->count + 1, grow), sizeof(*wa), >- GFP_KERNEL); >- if (!list) { >- DRM_ERROR("No space for workaround init!\n"); >- return; >- } >+ return -ENOENT; >+} > >- if (wal->list) { >- memcpy(list, wal->list, sizeof(*wa) * wal->count); >- kfree(wal->list); >- } >+static int wa_list_grow(struct i915_wa_list *wal, size_t count, gfp_t gfp) >+{ >+ struct i915_wa *list; > >- wal->list = list; >- } >+ list = krealloc(wal->list, count * sizeof(*list), gfp); >+ if (!list) >+ return -ENOMEM; > >- while (start < end) { >- unsigned int mid = start + (end - start) / 2; >+ wal->list = list; >+ return 0; >+} > >- if (i915_mmio_reg_offset(wal->list[mid].reg) < addr) { >- start = mid + 1; >- } else if (i915_mmio_reg_offset(wal->list[mid].reg) > addr) { >- end = mid; >- } else { >- wa_ = &wal->list[mid]; >- >- if ((wa->clr | wa_->clr) && !(wa->clr & ~wa_->clr)) { >- DRM_ERROR("Discarding overwritten w/a for reg %04x (clear: %08x, set: %08x)\n", >- i915_mmio_reg_offset(wa_->reg), >- wa_->clr, wa_->set); >- >- wa_->set &= ~wa->clr; >- } >- >- wal->wa_count++; >- wa_->set |= wa->set; >- wa_->clr |= wa->clr; >- wa_->read |= wa->read; >- return; >+static void __wa_add(struct i915_wa_list *wal, const struct i915_wa *wa) >+{ >+ struct i915_wa *wa_; >+ int index; >+ >+ index = wa_index(wal, wa->reg); >+ if (index >= 0) { >+ wa_ = &wal->list[index]; >+ >+ if ((wa->clr | wa_->clr) && !(wa->clr & ~wa_->clr)) { >+ DRM_ERROR("Discarding overwritten w/a for reg %04x (clear: %08x, set: %08x)\n", >+ i915_mmio_reg_offset(wa_->reg), >+ wa_->clr, wa_->set); >+ >+ wa_->set &= ~wa->clr; > } >+ >+ wal->wa_count++; >+ wa_->set |= wa->set; >+ wa_->clr |= wa->clr; >+ wa_->read |= wa->read; >+ return; > } > > wal->wa_count++; >@@ -180,6 +182,22 @@ static void _wa_add(struct i915_wa_list *wal, const struct i915_wa *wa) > } > } > >+static void _wa_add(struct i915_wa_list *wal, const struct i915_wa *wa) >+{ >+ const unsigned int grow = WA_LIST_CHUNK; >+ >+ GEM_BUG_ON(!is_power_of_2(grow)); >+ >+ if (IS_ALIGNED(wal->count, grow) && /* Either uninitialized or full. */ >+ wa_list_grow(wal, ALIGN(wal->count + 1, grow), GFP_KERNEL)) { >+ DRM_ERROR("Unable to store w/a for reg %04x\n", >+ i915_mmio_reg_offset(wa->reg)); >+ return; >+ } >+ >+ __wa_add(wal, wa); >+} >+ > static void wa_add(struct i915_wa_list *wal, i915_reg_t reg, > u32 clear, u32 set, u32 read_mask) > { >-- >2.20.1 > _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx