[ltt-dev] [UST PATCH v2] armv5 archs require write alignment

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Wed May 4 15:06:34 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.
> 
> Signed-off-by: Jason Wessel <jason.wessel at windriver.com>
> ---
>  configure.ac        |   28 +++++++++++++++++++++++++++-
>  include/Makefile.am |    1 +
>  include/ust/core.h  |    7 ++++---

I think include/ust/config.h.in is missing ?

>  3 files changed, 32 insertions(+), 4 deletions(-)
> 
> 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/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