Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp3526352ybi; Tue, 2 Jul 2019 09:10:54 -0700 (PDT) X-Google-Smtp-Source: APXvYqyYjbDqCcMj96BZYQ0wUe4/lHTHN1oKJUKK4o+rWMAujiFSaXgwcNH2pFT9w3LOqOVDDprl X-Received: by 2002:a62:cd45:: with SMTP id o66mr48710pfg.112.1562083853984; Tue, 02 Jul 2019 09:10:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1562083853; cv=none; d=google.com; s=arc-20160816; b=VkdhN2eTgX4QbsJK4x+82Om+AmfOKS4jkQczCsEQR5qWlW6ZwEo+acs0ttqiz+UK3r h5lo+ianE6A09es2GQkgRjwrSmskQHohOstMBCkhPoOvfDSrjNItY0G1eL9c1cvyQlTk /KuBAgZvWNQpGft1vdK0TbOqHW8jaiufWDFAF4XLeJKLb4E+EG41CIkiEWOo8uQHk/b4 6x91/vFFJUCAZDfMesVFELMZ8yt/2VkDWDio6eufTk22uLiVHcea2PnCkRuHdyxgCFLa zipyyXdUAM8k1bxU/aJVXHjh706mJr0I0vvf3HWO07s/bWY0FAyObUxmTMvsxkSUIbhG nlMg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=UdE5mts9HSLYglhjRD0Klnj6KSjMmBfnor5irKBHBmo=; b=k62Z+wGlm9xIoSS6ZItqcsFADTxiztJnmhe4A5Csep4Zgvg57vq2BqFmxDvP32wTUN QBqbWWazwJfj7L3JJBJKhOOI3wnNRwpQX/AtEmmHsxcod4R/ybrDVSgw1lvmY+nGQmsu 9mTnrB+/Aa4hSr8VUdhVA7drHPr8DX2D/0KbVPZvHVFlz3zX53qcGEk689TFEAo9xlsI cKya5KkDd8HEbhOV/AT3i8/BFFeICC3LmFZyz5oTdzdJ5jqpECWmje7I5Da+JhKLPjQP ytc9I3TjSQft36n4YGUbmPVeH/uyKNAVf5adocCK76kqBBPHBdJW1Zy/+soymWW+Y3H0 5yrg== 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 n9si12915752plk.166.2019.07.02.09.10.36; Tue, 02 Jul 2019 09:10:53 -0700 (PDT) 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 S1726678AbfGBQJW (ORCPT + 99 others); Tue, 2 Jul 2019 12:09:22 -0400 Received: from mx2.suse.de ([195.135.220.15]:40922 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725996AbfGBQJV (ORCPT ); Tue, 2 Jul 2019 12:09:21 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 8B031AE5C; Tue, 2 Jul 2019 16:09:20 +0000 (UTC) Date: Tue, 2 Jul 2019 09:09:13 -0700 From: Davidlohr Bueso To: Michel Lespinasse Cc: Peter Zijlstra , David Howells , Andrew Morton , linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 2/3] augmented rbtree: add new RB_DECLARE_CALLBACKS_MAX macro Message-ID: <20190702160913.ptg4p2jyb6ih43hb@linux-r8p5> References: <20190702075819.34787-1-walken@google.com> <20190702075819.34787-3-walken@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <20190702075819.34787-3-walken@google.com> User-Agent: NeoMutt/20180323 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 02 Jul 2019, Michel Lespinasse wrote: >diff --git a/arch/x86/mm/pat_rbtree.c b/arch/x86/mm/pat_rbtree.c >index fa16036fa592..2afad8e869fc 100644 >--- a/arch/x86/mm/pat_rbtree.c >+++ b/arch/x86/mm/pat_rbtree.c >@@ -54,23 +54,10 @@ static u64 get_subtree_max_end(struct rb_node *node) > return ret; > } > >-static u64 compute_subtree_max_end(struct memtype *data) >-{ >- u64 max_end = data->end, child_max_end; >- >- child_max_end = get_subtree_max_end(data->rb.rb_right); >- if (child_max_end > max_end) >- max_end = child_max_end; >- >- child_max_end = get_subtree_max_end(data->rb.rb_left); >- if (child_max_end > max_end) >- max_end = child_max_end; >- >- return max_end; >-} >+#define NODE_END(node) ((node)->end) > >-RB_DECLARE_CALLBACKS(static, memtype_rb_augment_cb, struct memtype, rb, >- u64, subtree_max_end, compute_subtree_max_end) >+RB_DECLARE_CALLBACKS_MAX(struct memtype, rb, u64, subtree_max_end, NODE_END, >+ static, memtype_rb_augment_cb) (unrelated to this patch) So fyi I've recently been looking at having the whole pat_rbtree use the (generic) interval tree api, which would mean less code and more optimized. Of course, unfortunately they aren't 100% compatible. Fundamentally the concept of overlaps are different (pat_rbtree is does not consider overlap when 'node->start == end' - same for the test to the right of the node). Thus for example interval_tree_iter_first() won't necessarily return the same node as memtype_rb_lowest_match(). Similarly, inserting a node with key collisions will have differences wrt what path to take; equal 'start' in pat will go to the left, interval_tree to the right. All this, I suspect, is inherited from how pat used to work with rbtree+list. So generic ones cannot be used and if we just use INTERVAL_TREE_DEFINE template for pat and add the ad-hoc code does not make sense wrt cleanup, nor do we get the optimizations. We could of course, add them manually (by using cached rbtrees, for example) and forget about interval_tree altogether; just seems a shame. Thanks, Davidlohr