Commit 833961d8 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'tracing-fixes-for-linus' of...

Merge branch 'tracing-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* 'tracing-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  ring-buffer: Do 8 byte alignment for 64 bit that can not handle 4 byte align
parents 3cacf424 2271048d
...@@ -207,6 +207,14 @@ EXPORT_SYMBOL_GPL(tracing_is_on); ...@@ -207,6 +207,14 @@ EXPORT_SYMBOL_GPL(tracing_is_on);
#define RB_MAX_SMALL_DATA (RB_ALIGNMENT * RINGBUF_TYPE_DATA_TYPE_LEN_MAX) #define RB_MAX_SMALL_DATA (RB_ALIGNMENT * RINGBUF_TYPE_DATA_TYPE_LEN_MAX)
#define RB_EVNT_MIN_SIZE 8U /* two 32bit words */ #define RB_EVNT_MIN_SIZE 8U /* two 32bit words */
#if !defined(CONFIG_64BIT) || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
# define RB_FORCE_8BYTE_ALIGNMENT 0
# define RB_ARCH_ALIGNMENT RB_ALIGNMENT
#else
# define RB_FORCE_8BYTE_ALIGNMENT 1
# define RB_ARCH_ALIGNMENT 8U
#endif
/* define RINGBUF_TYPE_DATA for 'case RINGBUF_TYPE_DATA:' */ /* define RINGBUF_TYPE_DATA for 'case RINGBUF_TYPE_DATA:' */
#define RINGBUF_TYPE_DATA 0 ... RINGBUF_TYPE_DATA_TYPE_LEN_MAX #define RINGBUF_TYPE_DATA 0 ... RINGBUF_TYPE_DATA_TYPE_LEN_MAX
...@@ -1547,7 +1555,7 @@ rb_update_event(struct ring_buffer_event *event, ...@@ -1547,7 +1555,7 @@ rb_update_event(struct ring_buffer_event *event,
case 0: case 0:
length -= RB_EVNT_HDR_SIZE; length -= RB_EVNT_HDR_SIZE;
if (length > RB_MAX_SMALL_DATA) if (length > RB_MAX_SMALL_DATA || RB_FORCE_8BYTE_ALIGNMENT)
event->array[0] = length; event->array[0] = length;
else else
event->type_len = DIV_ROUND_UP(length, RB_ALIGNMENT); event->type_len = DIV_ROUND_UP(length, RB_ALIGNMENT);
...@@ -1722,11 +1730,11 @@ static unsigned rb_calculate_event_length(unsigned length) ...@@ -1722,11 +1730,11 @@ static unsigned rb_calculate_event_length(unsigned length)
if (!length) if (!length)
length = 1; length = 1;
if (length > RB_MAX_SMALL_DATA) if (length > RB_MAX_SMALL_DATA || RB_FORCE_8BYTE_ALIGNMENT)
length += sizeof(event.array[0]); length += sizeof(event.array[0]);
length += RB_EVNT_HDR_SIZE; length += RB_EVNT_HDR_SIZE;
length = ALIGN(length, RB_ALIGNMENT); length = ALIGN(length, RB_ARCH_ALIGNMENT);
return length; return length;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment