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=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED 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 889CBC433DF for ; Fri, 22 May 2020 12:02:40 +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 122D6206B6 for ; Fri, 22 May 2020 12:02:39 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 122D6206B6 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=chris-wilson.co.uk 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 79E4D6E9CE; Fri, 22 May 2020 12:02:38 +0000 (UTC) Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id BD4C36E9CE for ; Fri, 22 May 2020 12:02:36 +0000 (UTC) X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from localhost (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP (TLS) id 21259679-1500050 for multiple; Fri, 22 May 2020 13:02:06 +0100 MIME-Version: 1.0 In-Reply-To: <20200522104207.19439-1-chris@chris-wilson.co.uk> References: <20200522104207.19439-1-chris@chris-wilson.co.uk> To: intel-gfx@lists.freedesktop.org From: Chris Wilson Message-ID: <159014892558.32320.14917683830875571843@build.alporthouse.com> User-Agent: alot/0.8.1 Date: Fri, 22 May 2020 13:02:05 +0100 Subject: Re: [Intel-gfx] [PATCH] drm/i915/gem: Avoid iterating an empty list 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: Matthew Auld Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Quoting Chris Wilson (2020-05-22 11:42:07) > Our __sgt_iter assumes that the scattergather list has at least one > element. But during construction we may fail in allocating the first > page, and so mark the first element as the terminator. This is > unexpected! > > [22555.524752] RIP: 0010:shmem_get_pages+0x506/0x710 [i915] > [22555.524759] Code: 49 8b 2c 24 31 c0 66 89 44 24 40 48 85 ed 0f 84 62 01 00 00 4c 8b 75 00 8b 5d 08 44 8b 7d 0c 48 8b 0d 7e 34 07 e2 49 83 e6 fc <49> 8b 16 41 01 df 48 89 cf 48 89 d0 48 c1 e8 2d 48 85 c9 0f 84 c8 > [22555.524765] RSP: 0018:ffffc9000053f9d0 EFLAGS: 00010246 > [22555.524770] RAX: 0000000000000000 RBX: 0000000000000000 RCX: ffff8881ffffa000 > [22555.524774] RDX: fffffffffffffff4 RSI: ffffffffffffffff RDI: ffffffff821efe00 > [22555.524778] RBP: ffff8881b099ab00 R08: 0000000000000000 R09: 00000000fffffff4 > [22555.524782] R10: 0000000000000002 R11: 00000000ffec0a02 R12: ffff8881cd3c8d60 > [22555.524786] R13: 00000000fffffff4 R14: 0000000000000000 R15: 0000000000000000 > [22555.524790] FS: 00007f4fbeb9b9c0(0000) GS:ffff8881f8580000(0000) knlGS:0000000000000000 > [22555.524795] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > [22555.524799] CR2: 0000000000000000 CR3: 00000001ec7f0004 CR4: 00000000001606e0 > [22555.524803] Call Trace: > [22555.524919] __i915_gem_object_get_pages+0x4f/0x60 [i915] > Fixes: 85d1225ec066 ("drm/i915: Introduce & use new lightweight SGL iterators") > Signed-off-by: Chris Wilson > Cc: Matthew Auld > Cc: Tvrtko Ursulin Cc: # v4.8+ > --- > drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 15 +++++++++------ > 1 file changed, 9 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c > index 5d5d7eef3f43..7aff3514d97a 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c > @@ -39,7 +39,6 @@ static int shmem_get_pages(struct drm_i915_gem_object *obj) > unsigned long last_pfn = 0; /* suppress gcc warning */ > unsigned int max_segment = i915_sg_segment_size(); > unsigned int sg_page_sizes; > - struct pagevec pvec; > gfp_t noreclaim; > int ret; > > @@ -192,13 +191,17 @@ static int shmem_get_pages(struct drm_i915_gem_object *obj) > sg_mark_end(sg); > err_pages: > mapping_clear_unevictable(mapping); > - pagevec_init(&pvec); > - for_each_sgt_page(page, sgt_iter, st) { > - if (!pagevec_add(&pvec, page)) > + if (sg != st->sgl) { > + struct pagevec pvec; > + > + pagevec_init(&pvec); > + for_each_sgt_page(page, sgt_iter, st) { > + if (!pagevec_add(&pvec, page)) > + check_release_pagevec(&pvec); > + } > + if (pagevec_count(&pvec)) > check_release_pagevec(&pvec); > } > - if (pagevec_count(&pvec)) > - check_release_pagevec(&pvec); > sg_free_table(st); > kfree(st); > > -- > 2.20.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx > _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx