Received: by 10.223.164.202 with SMTP id h10csp6287661wrb; Wed, 22 Nov 2017 02:10:00 -0800 (PST) X-Google-Smtp-Source: AGs4zMZpjjcBAZ8zxlvc1tiAtNunpjOa69FloNTkRzbGp21VAyEJCLsg+QyOuIzF/LNNngsCGLjL X-Received: by 10.84.201.6 with SMTP id u6mr21005759pld.16.1511345400319; Wed, 22 Nov 2017 02:10:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511345400; cv=none; d=google.com; s=arc-20160816; b=b+jBsi1X3yg6v8etfY9PjS2DYFb1WErR7DdDfcDhxH7MocNqWiE1ckfmdibw2B4vqS Ll2ZwQnLgHdGYWZbxvFUiUs0N35kJ9ehLHGK+ZKEmk3Xifk4NLLXDz8uqzFwAbHVLnf4 VWAV3rVIvg4/MXHq/TlCaPZdafCH1ov7/uyw3Y4nbGWF7vETlmbafbr2rzTY/m+A133z 7uEgBeAdNdRm8O/1SNwtXTUQTkchMAAhlJ6sLqSdFTlW3Lh9ioMkuNA6f7F1bl2WaMwl G6/zYMiwqkAmrHh2mxR6Wxc08bPhHZ8Io6xng876HWn0fBBhQZkkyaN+G8vi3iu9Dcgi zTvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=LchZ7JQzZnFbzMMDS1OIqR4vB82G8+PQe4uWlmitaP8=; b=YqC2q/CmxVl4JEdQUFCR1memjHq+jIeG2hcdeDvB3+qeC45eLd1BCQzDKfQt7SasnN 3uVQHVyFq92cQN2Ae737IcFf/nj9PsM3Q2D/v2ODZ/+ILFqlWMvtJKy1Puapbo2iXNtd SJWoum9RmiTliPFBA4qRcl5dVAsC1+5Z2I3aRxyhn2KkAkbqNCvFaJiBbJ/iuBrnzDy0 MUvCasVfrFNrkS75BlhFwgfU0gbScCxh2rct8B/qKqaGI4x4+iozTFurQhChGUp6N6N9 Qq0mVHUMRxuK2z2gqAd5cP40SzeXRZv0dSaNy2TeG23c1ovsSZZCEVOSnVfp+k/9wX/K Eq2A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t14si13225001pgc.810.2017.11.22.02.09.48; Wed, 22 Nov 2017 02:10:00 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752006AbdKVKJN (ORCPT + 76 others); Wed, 22 Nov 2017 05:09:13 -0500 Received: from mail.fireflyinternet.com ([109.228.58.192]:54421 "EHLO fireflyinternet.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751723AbdKVKJL (ORCPT ); Wed, 22 Nov 2017 05:09:11 -0500 X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from haswell.alporthouse.com (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 9689009-1500050 for multiple; Wed, 22 Nov 2017 10:07:35 +0000 Received: by haswell.alporthouse.com (sSMTP sendmail emulation); Wed, 22 Nov 2017 10:07:35 +0000 From: Chris Wilson To: akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Chris Wilson , Davidlohr Bueso , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Joonas Lahtinen , Daniel Vetter Subject: [PATCH] lib/rbtree,drm/mm: Add rbtree_replace_node_cached() Date: Wed, 22 Nov 2017 10:07:29 +0000 Message-Id: <20171122100729.3742-1-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.15.0 In-Reply-To: <20171109212435.9265-1-chris@chris-wilson.co.uk> References: <20171109212435.9265-1-chris@chris-wilson.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Originating-IP: 78.156.65.138 X-Country: code=GB country="United Kingdom" ip=78.156.65.138 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add a variant of rbtree_replace_node() that maintains the leftmost cache of struct rbtree_root_cached when replacing nodes within the rbtree. As drm_mm is the only rb_replace_node() being used on an interval tree, the mistake looks fairly self-contained. Furthermore the only user of drm_mm_replace_node() is its testsuite... Fixes: f808c13fd373 ("lib/interval_tree: fast overlap detection") Testcase: igt/drm_mm/replace Signed-off-by: Chris Wilson Cc: Davidlohr Bueso Cc: Jérôme Glisse Cc: Andrew Morton Cc: Joonas Lahtinen Cc: Daniel Vetter Link: https://patchwork.freedesktop.org/patch/msgid/20171109212435.9265-1-chris@chris-wilson.co.uk Acked-by: Davidlohr Bueso Reviewed-by: Joonas Lahtinen --- drivers/gpu/drm/drm_mm.c | 8 +++++--- include/linux/rbtree.h | 2 ++ lib/rbtree.c | 10 ++++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c index 61a1c8ea74bc..c3c79ee6119e 100644 --- a/drivers/gpu/drm/drm_mm.c +++ b/drivers/gpu/drm/drm_mm.c @@ -575,21 +575,23 @@ EXPORT_SYMBOL(drm_mm_remove_node); */ void drm_mm_replace_node(struct drm_mm_node *old, struct drm_mm_node *new) { + struct drm_mm *mm = old->mm; + DRM_MM_BUG_ON(!old->allocated); *new = *old; list_replace(&old->node_list, &new->node_list); - rb_replace_node(&old->rb, &new->rb, &old->mm->interval_tree.rb_root); + rb_replace_node_cached(&old->rb, &new->rb, &mm->interval_tree); if (drm_mm_hole_follows(old)) { list_replace(&old->hole_stack, &new->hole_stack); rb_replace_node(&old->rb_hole_size, &new->rb_hole_size, - &old->mm->holes_size); + &mm->holes_size); rb_replace_node(&old->rb_hole_addr, &new->rb_hole_addr, - &old->mm->holes_addr); + &mm->holes_addr); } old->allocated = false; diff --git a/include/linux/rbtree.h b/include/linux/rbtree.h index d574361943ea..fcbeed4053ef 100644 --- a/include/linux/rbtree.h +++ b/include/linux/rbtree.h @@ -99,6 +99,8 @@ extern void rb_replace_node(struct rb_node *victim, struct rb_node *new, struct rb_root *root); extern void rb_replace_node_rcu(struct rb_node *victim, struct rb_node *new, struct rb_root *root); +extern void rb_replace_node_cached(struct rb_node *victim, struct rb_node *new, + struct rb_root_cached *root); static inline void rb_link_node(struct rb_node *node, struct rb_node *parent, struct rb_node **rb_link) diff --git a/lib/rbtree.c b/lib/rbtree.c index ba4a9d165f1b..d3ff682fd4b8 100644 --- a/lib/rbtree.c +++ b/lib/rbtree.c @@ -603,6 +603,16 @@ void rb_replace_node(struct rb_node *victim, struct rb_node *new, } EXPORT_SYMBOL(rb_replace_node); +void rb_replace_node_cached(struct rb_node *victim, struct rb_node *new, + struct rb_root_cached *root) +{ + rb_replace_node(victim, new, &root->rb_root); + + if (root->rb_leftmost == victim) + root->rb_leftmost = new; +} +EXPORT_SYMBOL(rb_replace_node_cached); + void rb_replace_node_rcu(struct rb_node *victim, struct rb_node *new, struct rb_root *root) { -- 2.15.0 From 1584963541476012410@xxx Fri Nov 24 15:57:01 +0000 2017 X-GM-THRID: 1584945703920325706 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread