I think there should be a comment explaining when to use prefetch vs prefetch_write. I certainly don't know off the top of my head.
Acked-by: Ethan Jackson <et...@nicira.com> On Fri, Apr 18, 2014 at 12:41 PM, Jarno Rajahalme <jrajaha...@nicira.com> wrote: > Define OVS_PREFETCH() and OVS_PREFETCH_WRITE() using builtin prefetch > for GCC, and ovs_prefetch_range() for prefetching a range of addresses. > > Signed-off-by: Jarno Rajahalme <jrajaha...@nicira.com> > --- > lib/compiler.h | 8 ++++++++ > lib/util.h | 14 ++++++++++++++ > 2 files changed, 22 insertions(+) > > diff --git a/lib/compiler.h b/lib/compiler.h > index 3b59813..981605c 100644 > --- a/lib/compiler.h > +++ b/lib/compiler.h > @@ -206,4 +206,12 @@ > static void f(void) > #endif > > +#if __GNUC__ > +#define OVS_PREFETCH(addr) __builtin_prefetch((addr)) > +#define OVS_PREFETCH_WRITE(addr) __builtin_prefetch((addr), 1) > +#else > +#define OVS_PREFETCH(addr) > +#define OVS_PREFETCH_WRITE(addr) > +#endif > + > #endif /* compiler.h */ > diff --git a/lib/util.h b/lib/util.h > index aff17a5..5c3668a 100644 > --- a/lib/util.h > +++ b/lib/util.h > @@ -151,6 +151,19 @@ is_pow2(uintmax_t x) > #define CACHE_LINE_SIZE 64 > BUILD_ASSERT_DECL(IS_POW2(CACHE_LINE_SIZE)); > > +#define CACHE_LINE_SIZE 64 /* Correct for most CPUs. */ > + > +static inline void > +ovs_prefetch_range(const void *start, size_t size) > +{ > + const char *addr = (const char *)start; > + size_t ofs; > + > + for (ofs = 0; ofs < size; ofs += CACHE_LINE_SIZE) { > + OVS_PREFETCH(addr + ofs); > + } > +} > + > #ifndef MIN > #define MIN(X, Y) ((X) < (Y) ? (X) : (Y)) > #endif > @@ -503,6 +516,7 @@ uint64_t bitwise_get(const void *src, unsigned int > src_len, > unsigned int src_ofs, unsigned int n_bits); > > void xsleep(unsigned int seconds); > + > #ifdef _WIN32 > > char *ovs_format_message(int error); > -- > 1.7.10.4 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev