lkml.org 
[lkml]   [2015]   [Apr]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH v14 for 4.1] sys_membarrier(): system-wide memory barrier (x86)
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".

Thanks,

tglx




\
 
 \ /
  Last update: 2015-04-14 22:01    [W:0.051 / U:0.184 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site