Displaying 5 results from an estimated 5 matches for "dependent_ptr_mb_val".
2019 Jan 07
2
[PATCH RFC 3/4] barriers: convert a control to a data dependency
...er.h
> @@ -70,6 +70,24 @@
> #define __smp_read_barrier_depends() read_barrier_depends()
> #endif
>
> +#if defined(COMPILER_HAS_OPTIMIZER_HIDE_VAR) && \
> + !defined(ARCH_NEEDS_READ_BARRIER_DEPENDS)
> +
> +#define dependent_ptr_mb(ptr, val) ({ \
> + long dependent_ptr_mb_val = (long)(val); \
> + long dependent_ptr_mb_ptr = (long)(ptr) - dependent_ptr_mb_val; \
> + \
> + BUILD_BUG_ON(sizeof(val) > sizeof(long)); \
> + OPTIMIZER_HIDE_VAR(dependent_ptr_mb_val); \
> + (typeof(ptr))(dependent_ptr_mb_ptr + dependent_ptr_mb_val); \
> +})
>...
2019 Jan 07
2
[PATCH RFC 3/4] barriers: convert a control to a data dependency
...er.h
> @@ -70,6 +70,24 @@
> #define __smp_read_barrier_depends() read_barrier_depends()
> #endif
>
> +#if defined(COMPILER_HAS_OPTIMIZER_HIDE_VAR) && \
> + !defined(ARCH_NEEDS_READ_BARRIER_DEPENDS)
> +
> +#define dependent_ptr_mb(ptr, val) ({ \
> + long dependent_ptr_mb_val = (long)(val); \
> + long dependent_ptr_mb_ptr = (long)(ptr) - dependent_ptr_mb_val; \
> + \
> + BUILD_BUG_ON(sizeof(val) > sizeof(long)); \
> + OPTIMIZER_HIDE_VAR(dependent_ptr_mb_val); \
> + (typeof(ptr))(dependent_ptr_mb_ptr + dependent_ptr_mb_val); \
> +})
>...
2019 Jan 02
0
[PATCH RFC 3/4] barriers: convert a control to a data dependency
...eneric/barrier.h
+++ b/include/asm-generic/barrier.h
@@ -70,6 +70,24 @@
#define __smp_read_barrier_depends() read_barrier_depends()
#endif
+#if defined(COMPILER_HAS_OPTIMIZER_HIDE_VAR) && \
+ !defined(ARCH_NEEDS_READ_BARRIER_DEPENDS)
+
+#define dependent_ptr_mb(ptr, val) ({ \
+ long dependent_ptr_mb_val = (long)(val); \
+ long dependent_ptr_mb_ptr = (long)(ptr) - dependent_ptr_mb_val; \
+ \
+ BUILD_BUG_ON(sizeof(val) > sizeof(long)); \
+ OPTIMIZER_HIDE_VAR(dependent_ptr_mb_val); \
+ (typeof(ptr))(dependent_ptr_mb_ptr + dependent_ptr_mb_val); \
+})
+
+#else
+
+#define dependent_ptr...
2019 Jan 02
6
[PATCH RFC 0/4] barriers using data dependency
So as explained in Documentation/memory-barriers.txt e.g.
a load followed by a store require a full memory barrier,
to avoid store being ordered before the load.
Similarly load-load requires a read memory barrier.
Thinking about it, we can actually create a data dependency
by mixing the first loaded value into the pointer being
accessed.
This adds an API for this and uses it in virtio.
Written
2019 Jan 07
0
[PATCH RFC 3/4] barriers: convert a control to a data dependency
...@
> > #define __smp_read_barrier_depends() read_barrier_depends()
> > #endif
> > +#if defined(COMPILER_HAS_OPTIMIZER_HIDE_VAR) && \
> > + !defined(ARCH_NEEDS_READ_BARRIER_DEPENDS)
> > +
> > +#define dependent_ptr_mb(ptr, val) ({ \
> > + long dependent_ptr_mb_val = (long)(val); \
> > + long dependent_ptr_mb_ptr = (long)(ptr) - dependent_ptr_mb_val; \
> > + \
> > + BUILD_BUG_ON(sizeof(val) > sizeof(long)); \
> > + OPTIMIZER_HIDE_VAR(dependent_ptr_mb_val); \
> > + (typeof(ptr))(dependent_ptr_mb_ptr + dependent_pt...