[ltt-dev] [UST PATCH 2/2] armv5 archs require write alignment
Mathieu Desnoyers
mathieu.desnoyers at efficios.com
Wed May 4 15:34:25 EDT 2011
* Jason Wessel (jason.wessel at windriver.com) 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 <jason.wessel at windriver.com>
> ---
> 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
More information about the lttng-dev
mailing list