From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754562AbbDNURk (ORCPT ); Tue, 14 Apr 2015 16:17:40 -0400 Received: from mail.efficios.com ([78.47.125.74]:39377 "EHLO mail.efficios.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754247AbbDNURd (ORCPT ); Tue, 14 Apr 2015 16:17:33 -0400 Date: Tue, 14 Apr 2015 20:17:36 +0000 (UTC) From: Mathieu Desnoyers To: Thomas Gleixner Cc: Andrew Morton , linux-kernel@vger.kernel.org, Josh Triplett , KOSAKI Motohiro , Steven Rostedt , Nicholas Miell , Linus Torvalds , Ingo Molnar , Alan Cox , Lai Jiangshan , Stephen Hemminger , Peter Zijlstra , David Howells Message-ID: <835962147.30300.1429042656001.JavaMail.zimbra@efficios.com> In-Reply-To: References: <1428952229-3577-1-git-send-email-mathieu.desnoyers@efficios.com> <76701995.30245.1429038138581.JavaMail.zimbra@efficios.com> <191985313.30287.1429039372434.JavaMail.zimbra@efficios.com> Subject: Re: [PATCH v14 for 4.1] sys_membarrier(): system-wide memory barrier (x86) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [192.222.194.238] X-Mailer: Zimbra 8.0.7_GA_6021 (ZimbraWebClient - FF37 (Linux)/8.0.7_GA_6021) Thread-Topic: sys_membarrier(): system-wide memory barrier (x86) Thread-Index: V10JKlwLuN4y36Jeo9rRDePNdA6v8w== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ----- Original Message ----- > On Tue, 14 Apr 2015, Mathieu Desnoyers wrote: > > Thinking about it a bit more, one reason for doing the QUERY along > > with the exact set of flags queried allow us to do more than just > > returning which flags are supported: it allows us to tell userspace > > whether the combination of flags used is valid or not. > > > > For instance, if we add a MEMBARRIER_PRIVATE flag in a future release > > to issue memory barriers only to other threads from the same process, > > and we add a MEMBARRIER_EXPEDITED which uses IPIs to issue those > > barriers, we could very well have a situation where using > > > > EXPEDITED | PRIVATE would be valid (only sending IPIs to CPUs > > running threads from the same process) > > > > but > > > > EXPEDITED alone would be invalid (-EINVAL), until we figure out > > how to expedite memory barriers to all processors without impacting > > other processes, if at all possible. > > > > Using QUERY with an empty set of flags could however return the set of > > flags supported, which could be a nice feature. Anyway, I think > > the "0" flag should be the basic always correct configuration that > > is always supported, otherwise we'd have -ENOSYS. Therefore, querying > > whether the empty set of flags is supported has little value, other > > than checking for -ENOSYS. > > > > So considering the above, the typical use of this query method from > > library initialization would be: > > > > int supported_flags = sys_membarrier(MEMBARRIER_QUERY); > > > > ... check for -ENOSYS .... > > ... check whether the flags we need are supported ... > > > > if (sys_membarrier(MEMBARRIER_QUERY | flag1 | flag2)) > > goto error; > > > > then we are guaranteed that using sys_membarrier(flag1 | flag2) > > will always succeed within the application, without needing to > > handle errors every time it is used. This property is useful > > to implement a synchronize_rcu() that returns "void" and simplify > > error handling within the application. > > So how many of these "flags" are you planning to implement and how > many valid combinations are going to exist? > > I doubt it's more than a dozen. So I prefer explicit operation modes > for the valid ones rather than having a random pile of "flags". I don't expect many, so indeed your approach would allow listing the valid flags, and using them as "one-hot". If we go for a single active flag at a time, I would call that "cmd" rather than "flags". Each command would be a power of two. Only one cmd could be passed as argument (no "or" mask). QUERY would return a mask of the supported commands. Thoughts ? Thanks, Mathieu > > Thanks, > > tglx > > > -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com