[lttng-dev] [PATCH] A partial rewrite of lttctl
Thibault, Daniel
Daniel.Thibault at drdc-rddc.gc.ca
Tue Dec 6 11:37:37 EST 2011
Below is a patch for git.lttng.org/ltt-control/liblttctl/lttctl.h. I hope I have the patch-submission procedure and mailing list format right.
I have two other large patches to submit, for liblttctl/liblttctl.c and lttctl/lttctl.c (more to follow), both about 1500 lines because the code underwent a very thorough rewrite. The intent in both cases is to document the functions, retrofit a version history, improve the error messages, tighten parameter checking and error handling, and fix a number of bugs (memory leaks and the like). Should I submit them like this one, or deposit them elsewhere?
lttctl.h.diff
------
--- ../ltt-control-0.89-792f03c/liblttctl/lttctl.h 2011-05-12 08:44:27.000000000 -0400
+++ ../ltt-control-0.89-792f03c.dut/liblttctl/lttctl.h 2011-12-02 15:05:53.959130072 -0500
@@ -20,28 +20,77 @@
* 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
+ *
+ * Version History:
+ * Version 1.0 2009-08-12 Pierre-Marc Fournier pierre-marc.fournier at polymtl.ca
+ * Moved out of git.lttng.org trunk/ltt-control.
+ * Version 1.1 2009-11-12 Mathieu Desnoyers mathieu.desnoyers at efficios.com
+ * Added lttctl_set_channel_switch_timer.
+ * Version 1.2 2010-03-03 Mathieu Desnoyers mathieu.desnoyers at efficios.com
+ * Changed flag from _LIBLTT_H to _LTTCTL_H.
+ * Version 1.3 2011-11-28 Daniel U. Thibault daniel.thibault at drdc-rddc.gc.ca
+ * Retrofitted version history.
+ * Added defines (some imported from lttctlkerninterface.c) which could be handy elsewhere
+ * (pieces of debugfs paths, LTT_BUFFERS_MIN_SIZE, LTT_BUFFERS_MAX_SIZE, ROUNDINTUP macro).
+ * Cosmetic change of the function headers: *name became *tracename.
*/
#ifndef _LTTCTL_H
#define _LTTCTL_H
+/*
+ * Imported from lttctlkerninterface.c (where they are static const char* const)
+ * The names were prefixed with "LTT_" and suffixed with "_PATH" (as needed) to avoid name collisions
+ */
+#define LTT_PATH "/ltt"
+#define LTTD_PATH "/lttd"
+//To these two we appended "/"
+#define LTT_CONTROL_PATH "/control/"
+#define LTT_CHANNEL_PATH "/channel/"
+//#define LTT_MARKERS_PATH "/markers"
+//#define LTT_MARKERS_INFO_PATH "/info"
+#define LTT_MARKERS_ENABLE_PATH "/enable"
+//These are new:
+#define LTT_SETUP_TRACE_PATH "/setup_trace"
+#define LTT_ALLOC_TRACE_PATH "/alloc"
+#define LTT_DESTROY_TRACE_PATH "/destroy_trace"
+#define LTT_ENABLE_TRACE_PATH "/enabled"
+#define LTT_TRACE_TRANSPORT_PATH "/trans"
+#define LTT_BUFFERS_OVERWRITE_PATH "/overwrite"
+#define LTT_BUFFERS_NUMBER_PATH "/subbuf_num"
+#define LTT_BUFFERS_SIZE_PATH "/subbuf_size"
+#define LTT_BUFFERS_TIMER_PATH "/switch_timer"
+
+#define LTT_BUFFERS_MIN_SIZE (0x100)
+//lttctl.c's struct channel_option uses int for its bufsize (sub-buffer size);
+//ltt-private.h uses uint32_t for sb_size, the subbuf_size;
+//A few files use an unsigned long instead (lttctlkerninterface.c, .h)
+//Note that "unsigned" is "unsigned int" according to the C99 spec
+//int maxes out with 0x7FFFFFFF, but we want a power of two:
+#define LTT_BUFFERS_MAX_SIZE (0x40000000)
+
+//Based on: Sean Eron Anderson (2005), "Bit Twiddling Hacks: Round up to the next highest power of 2", http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2
+//This (rather clunky) macro can handle ints of all byte widths from char (1 byte) to long long (8 bytes);
+//It is designed to be invoked on a variable (not an expression), as the standalone line "ROUNDINTUP(variable);"
+#define ROUNDINTUP(i) { i--; i |= i >> 1; i |= i >> 2; if (sizeof(i) > 1) { i |= i >> 4; if (sizeof(i) > 2) { i |= i >> 8; if (sizeof(i) > 4) { i |= i >> 16; } } } i++; }
+
int lttctl_init(void);
int lttctl_destroy(void);
-int lttctl_setup_trace(const char *name);
-int lttctl_destroy_trace(const char *name);
-int lttctl_alloc_trace(const char *name);
-int lttctl_start(const char *name);
-int lttctl_pause(const char *name);
-int lttctl_set_trans(const char *name, const char *trans);
-int lttctl_set_channel_enable(const char *name, const char *channel,
+int lttctl_setup_trace(const char *tracename);
+int lttctl_destroy_trace(const char *tracename);
+int lttctl_alloc_trace(const char *tracename);
+int lttctl_start(const char *tracename);
+int lttctl_pause(const char *tracename);
+int lttctl_set_trans(const char *tracename, const char *trans);
+int lttctl_set_channel_enable(const char *tracename, const char *channel,
int enable);
-int lttctl_set_channel_overwrite(const char *name, const char *channel,
+int lttctl_set_channel_overwrite(const char *tracename, const char *channel,
int overwrite);
-int lttctl_set_channel_subbuf_num(const char *name, const char *channel,
+int lttctl_set_channel_subbuf_num(const char *tracename, const char *channel,
unsigned subbuf_num);
-int lttctl_set_channel_subbuf_size(const char *name, const char *channel,
+int lttctl_set_channel_subbuf_size(const char *tracename, const char *channel,
unsigned subbuf_size);
-int lttctl_set_channel_switch_timer(const char *name, const char *channel,
+int lttctl_set_channel_switch_timer(const char *tracename, const char *channel,
unsigned switch_timer);
/* Helper functions */
------
Daniel U. Thibault
R & D pour la défense Canada - Valcartier (RDDC Valcartier) / Defence R&D Canada - Valcartier (DRDC Valcartier)
Système de systèmes (SdS) / System of Systems (SoS)
Solutions informatiques et expérimentations (SIE) / Computing Solutions and Experimentations (CSE)
2459 Boul. Pie XI Nord
Québec, QC G3J 1X5
CANADA
Vox : (418) 844-4000 x4245
Fax : (418) 844-4538
NAC: 918V QSDJ
Gouvernement du Canada / Government of Canada
<http://www.valcartier.drdc-rddc.gc.ca/>
More information about the lttng-dev
mailing list