Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753958AbbGUI3Q (ORCPT ); Tue, 21 Jul 2015 04:29:16 -0400 Received: from mga14.intel.com ([192.55.52.115]:20522 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753347AbbGUI3O (ORCPT ); Tue, 21 Jul 2015 04:29:14 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.15,514,1432623600"; d="scan'208";a="768187159" Message-ID: <55AE0233.3080102@intel.com> Date: Tue, 21 Jul 2015 16:26:27 +0800 From: Pan Xinhui User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: Thomas Gleixner CC: "linux-kernel@vger.kernel.org" , mingo@redhat.com, hpa@zytor.com, x86@kernel.org, bp@suse.de, toshi.kani@hp.com, jgross@suse.com, mcgrof@suse.com, "mnipxh@163.com" , "yanmin_zhang@linux.intel.com" Subject: Re: [PATCH V2] x86/mm/pat: Do a small optimization and fix in reserve_memtype References: <55ADFC78.9070707@intel.com> In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2181 Lines: 73 hi, tglx thanks for your reply :) On 2015年07月21日 16:10, Thomas Gleixner wrote: > On Tue, 21 Jul 2015, Pan Xinhui wrote: >> diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c >> index 188e3e0..f3c49fa 100644 >> --- a/arch/x86/mm/pat.c >> +++ b/arch/x86/mm/pat.c >> @@ -538,22 +538,20 @@ int reserve_memtype(u64 start, u64 end, enum page_cache_mode req_type, >> new->type = actual_type; >> >> spin_lock(&memtype_lock); >> - >> err = rbt_memtype_check_insert(new, new_type); >> + actual_type = new->type; > > What's the point of this? new->type is set to actual_type 5 lines above. 191 int rbt_memtype_check_insert(struct memtype *new, 192 enum page_cache_mode *ret_type) 193 { 194 int err = 0; 195 196 err = memtype_rb_check_conflict(&memtype_rbroot, new->start, new->end, 197 new->type, ret_type); 198 199 if (!err) { 200 if (ret_type) 201 new->type = *ret_type; 202 So new->type might be set to *ret_type. 136 if (match->type != found_type && newtype == NULL) 137 goto failure; 138 139 dprintk("Overlap at 0x%Lx-0x%Lx\n", match->start, match->end); 140 found_type = match->type; 141 142 node = rb_next(&match->rb); 143 while (node) { 144 match = container_of(node, struct memtype, rb); 145 146 if (match->start >= end) /* Checked all possible matches */ 147 goto success; 148 149 if (is_node_overlap(match, start, end) && 150 match->type != found_type) { 151 goto failure; 152 } 153 154 node = rb_next(&match->rb); 155 } 156 success: 157 if (newtype) 158 *newtype = found_type; So *ret_type might be set to found_type(match->type), The call train is deep, it took me long time to review them. As actual_type != new->type is possible, we need save new->type to actual_type. thanks xinhui > > Thanks, > > tglx > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/