[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