* Jason Wessel ([email protected]) wrote: > Reads and writes to unsigned int 32 bit numbers must be address > aligned or the l2 cache can return junk in the high order 16 bits on > reads. > > This patch activates the original work done for alignment in ltt for > the UST code. The config.ac changes will isolate the use of alignment > to the known arch type with the problem.
merged, thanks! Mathieu > > Signed-off-by: Jason Wessel <[email protected]> > --- > configure.ac | 28 +++++++++++++++++++++++++++- > include/Makefile.am | 1 + > include/ust/config.h.in | 5 +++++ > include/ust/core.h | 7 ++++--- > 4 files changed, 37 insertions(+), 4 deletions(-) > create mode 100644 include/ust/config.h.in > > diff --git a/configure.ac b/configure.ac > index 8ca32ff..1f3cb33 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -9,7 +9,8 @@ AC_CONFIG_MACRO_DIR([config]) > AM_INIT_AUTOMAKE([foreign]) > m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) > AC_CONFIG_SRCDIR([ustctl/ustctl.c]) > -AC_CONFIG_HEADERS([config.h]) > +AC_CONFIG_HEADERS([config.h include/ust/config.h]) > +AH_TEMPLATE([HAVE_EFFICIENT_UNALIGNED_ACCESS], [Use efficient unaligned > access.]) > > # Checks for programs. > AC_PROG_CC > @@ -108,6 +109,7 @@ changequote([,])dnl > ppc64) LIBFORMAT="elf64-powerpc" ;; > s390) LIBFORMAT="elf32-s390" ;; > s390x) LIBFORMAT="elf64-s390" ;; > + armv5) LIBFORMAT="elf32-littlearm"; NO_UNALIGNED_ACCESS=1 ;; > arm) LIBFORMAT="elf32-littlearm" ;; > mips*) LIBFORMAT="" ;; > *) AC_MSG_ERROR([unable to detect library format (unsupported > architecture ($host_cpu)?)]) ;; > @@ -115,6 +117,30 @@ esac > AC_SUBST(LIBFORMAT) > AC_MSG_RESULT($LIBFORMAT) > > +if test "x$host_cpu" = "xarm" ; then > +AC_MSG_CHECKING([checking for armv5]) > +AC_TRY_COMPILE( > +[ > +], > +[ > +#ifndef __ARM_ARCH_5TEJ__ > +#error "no arm5 here" > +#endif > +], > +[ > + AC_MSG_RESULT([yes]) > + NO_UNALIGNED_ACCESS=1 > +] > +, > +[ > + AC_MSG_RESULT([no]) > +] > +) > +fi > +if test x$NO_UNALIGNED_ACCESS = x ; then > +AC_DEFINE([HAVE_EFFICIENT_UNALIGNED_ACCESS], [1]) > +fi > + > AC_CONFIG_FILES([ > Makefile > doc/Makefile > diff --git a/include/Makefile.am b/include/Makefile.am > index 2133efd..7f9d15e 100644 > --- a/include/Makefile.am > +++ b/include/Makefile.am > @@ -7,6 +7,7 @@ nobase_include_HEADERS = \ > ust/probe.h \ > ust/ust.h \ > ust/tracectl.h \ > + ust/config.h \ > ust/core.h \ > ust/clock.h \ > ust/type-serializer.h \ > diff --git a/include/ust/config.h.in b/include/ust/config.h.in > new file mode 100644 > index 0000000..b619095 > --- /dev/null > +++ b/include/ust/config.h.in > @@ -0,0 +1,5 @@ > +/* ust/config.h.in. Manually generated for control over the contained defs. > */ > + > +/* Use efficient unaligned access. */ > +#undef HAVE_EFFICIENT_UNALIGNED_ACCESS > + > diff --git a/include/ust/core.h b/include/ust/core.h > index e781a3a..d0e2750 100644 > --- a/include/ust/core.h > +++ b/include/ust/core.h > @@ -19,11 +19,12 @@ > #define UST_CORE_H > > #include <sys/types.h> > +#include <ust/config.h> > > #define likely(x) __builtin_expect(!!(x), 1) > #define unlikely(x) __builtin_expect(!!(x), 0) > > -#if defined(CONFIG_LTT) && defined(CONFIG_LTT_ALIGNMENT) > +#ifndef HAVE_EFFICIENT_UNALIGNED_ACCESS > > /* > * Calculate the offset needed to align the type. > @@ -42,7 +43,7 @@ static inline int ltt_get_alignment(void) > return sizeof(void *); > } > > -#else > +#else /* HAVE_EFFICIENT_UNALIGNED_ACCESS */ > > static inline unsigned int ltt_align(size_t align_drift, > size_t size_of_type) > @@ -56,7 +57,7 @@ static inline int ltt_get_alignment(void) > { > return 0; > } > -#endif /* defined(CONFIG_LTT) && defined(CONFIG_LTT_ALIGNMENT) */ > +#endif /* HAVE_EFFICIENT_UNALIGNED_ACCESS */ > > > /* ARRAYS */ > -- > 1.7.1 > -- Mathieu Desnoyers Operating System Efficiency R&D Consultant EfficiOS Inc. http://www.efficios.com _______________________________________________ ltt-dev mailing list [email protected] http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
