Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753463AbbDNM5u (ORCPT ); Tue, 14 Apr 2015 08:57:50 -0400 Received: from bombadil.infradead.org ([198.137.202.9]:51469 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753243AbbDNM5m (ORCPT ); Tue, 14 Apr 2015 08:57:42 -0400 Date: Tue, 14 Apr 2015 14:56:57 +0200 From: Peter Zijlstra To: Ingo Molnar Cc: rusty@rustcorp.com.au, mathieu.desnoyers@efficios.com, oleg@redhat.com, paulmck@linux.vnet.ibm.com, torvalds@linux-foundation.org, linux-kernel@vger.kernel.org, andi@firstfloor.org, rostedt@goodmis.org, tglx@linutronix.de, laijs@cn.fujitsu.com, linux@horizon.com Subject: Re: [PATCH v5 10/10] module: Rework module_addr_{min,max} Message-ID: <20150414125657.GM5029@twins.programming.kicks-ass.net> References: <20150413141126.756350256@infradead.org> <20150413141213.800009335@infradead.org> <20150413165636.GH6040@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150413165636.GH6040@gmail.com> User-Agent: Mutt/1.5.21 (2012-12-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2372 Lines: 71 On Mon, Apr 13, 2015 at 06:56:36PM +0200, Ingo Molnar wrote: > > + * Bounds of module allocation, for speeding up __module_address. > > + * Protected by module_mutex. > > + */ > > +static unsigned long module_addr_min = -1UL, module_addr_max = 0; > > I suspect the same .data vs. .bss problem affects the #else branch as > well? Yes, but the linear walk already has a 'problem', other than the linear walk itself being one, the list_head isn't actually on the same line as the 'key' entries -- although I suppose I could fix that for the !CONFIG_MODULES_TREE_LOOKUP case. > If so then it would make sense IMHO to put the structure definition > into generic code so that both variants benefit from the shared > cacheline? Isn't this optimizing hopeless code? I mean, I can make the change; something like the below. Although I suppose we should use ____cacheline_aligned here and just take the false sharing. --- a/kernel/module.c +++ b/kernel/module.c @@ -230,11 +230,15 @@ static struct module *mod_find(unsigned #else /* MODULES_TREE_LOOKUP */ -/* - * Bounds of module allocation, for speeding up __module_address. - * Protected by module_mutex. - */ -static unsigned long module_addr_min = -1UL, module_addr_max = 0; +static struct mod_bounds { + unsigned long addr_min; + unsigned long addr_max; +} mod_bounds __cacheline_aligned = { + .addr_min = -1UL, +}; + +#define module_addr_min mod_bounds.addr_min +#define module_addr_max mod_bounds.addr_max static void mod_tree_insert(struct module *mod) { } static void mod_tree_remove_init(struct module *mod) { } @@ -254,6 +258,10 @@ static struct module *mod_find(unsigned #endif /* MODULES_TREE_LOOKUP */ +/* + * Bounds of module text, for speeding up __module_address. + * Protected by module_mutex. + */ static void __mod_update_bounds(void *base, unsigned int size) { unsigned long min = (unsigned long)base; @@ -3363,8 +3371,8 @@ static int add_unformed_module(struct mo err = -EEXIST; goto out; } - list_add_rcu(&mod->list, &modules); mod_update_bounds(mod); + list_add_rcu(&mod->list, &modules); mod_tree_insert(mod); err = 0; -- 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/