X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libringbuffer%2Ffrontend_types.h;h=b6b34470ce28447b8f6dea168369078ec5a608ff;hb=69b8d2fae1590ec792409587123afa55b8959c07;hp=961c90e5084bd705c502d40e40a7cbb7b54307f6;hpb=7c2caf2b9750e82bf14e6ff39e517afef593c2fe;p=lttng-ust.git diff --git a/libringbuffer/frontend_types.h b/libringbuffer/frontend_types.h index 961c90e5..b6b34470 100644 --- a/libringbuffer/frontend_types.h +++ b/libringbuffer/frontend_types.h @@ -1,19 +1,31 @@ -#ifndef _LINUX_RING_BUFFER_FRONTEND_TYPES_H -#define _LINUX_RING_BUFFER_FRONTEND_TYPES_H +#ifndef _LTTNG_RING_BUFFER_FRONTEND_TYPES_H +#define _LTTNG_RING_BUFFER_FRONTEND_TYPES_H /* - * linux/ringbuffer/frontend_types.h - * - * (C) Copyright 2005-2010 - Mathieu Desnoyers + * libringbuffer/frontend_types.h * * Ring Buffer Library Synchronization Header (types). * + * Copyright (C) 2005-2012 Mathieu Desnoyers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; only + * version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * * Author: * Mathieu Desnoyers * * See ring_buffer_frontend.c for more information on wait-free algorithms. - * - * Dual LGPL v2.1/GPL v2 license. */ #include @@ -48,6 +60,7 @@ struct channel { //wait_queue_head_t read_wait; /* reader wait queue */ int finalized; /* Has channel been finalized */ size_t priv_data_offset; + /* Note: padding field is missing */ /* * Associated backend contains a variable-length array. Needs to * be last member. @@ -56,17 +69,22 @@ struct channel { } __attribute__((aligned(CAA_CACHE_LINE_SIZE))); /* Per-subbuffer commit counters used on the hot path */ +#define RB_COMMIT_COUNT_HOT_PADDING 16 struct commit_counters_hot { union v_atomic cc; /* Commit counter */ union v_atomic seq; /* Consecutive commits */ + char padding[RB_COMMIT_COUNT_HOT_PADDING]; } __attribute__((aligned(CAA_CACHE_LINE_SIZE))); /* Per-subbuffer commit counters used only on cold paths */ +#define RB_COMMIT_COUNT_COLD_PADDING 24 struct commit_counters_cold { union v_atomic cc_sb; /* Incremented _once_ at sb switch */ + char padding[RB_COMMIT_COUNT_COLD_PADDING]; } __attribute__((aligned(CAA_CACHE_LINE_SIZE))); /* ring buffer state */ +#define RB_RING_BUFFER_PADDING 64 struct lttng_ust_lib_ring_buffer { /* First 32 bytes cache-hot cacheline */ union v_atomic offset; /* Current offset in the buffer */ @@ -109,6 +127,7 @@ struct lttng_ust_lib_ring_buffer { read_timer_enabled:1; /* Protected by ring_buffer_nohz_lock */ /* shmp pointer to self */ DECLARE_SHMP(struct lttng_ust_lib_ring_buffer, self); + char padding[RB_RING_BUFFER_PADDING]; } __attribute__((aligned(CAA_CACHE_LINE_SIZE))); static inline @@ -145,4 +164,4 @@ void *channel_get_private(struct channel *chan) _____ret; \ }) -#endif /* _LINUX_RING_BUFFER_FRONTEND_TYPES_H */ +#endif /* _LTTNG_RING_BUFFER_FRONTEND_TYPES_H */