From mboxrd@z Thu Jan 1 00:00:00 1970 From: zhaolei@cn.fujitsu.com (Zhaolei) Date: Wed, 07 Jan 2009 16:09:11 +0800 Subject: [ltt-dev] [PATCH 2/2] Make lttctl load ltt-trace-control module automatically In-Reply-To: <49646208.7070607@cn.fujitsu.com> References: <49646208.7070607@cn.fujitsu.com> Message-ID: <49646327.2020307@cn.fujitsu.com> lttctl need to use ltt-trace-control module. This patch make lttctl try to load ltt-trace-control module automatically when ltt-trace-control is compiled as a module and not loaded. Applies on ltt-control-0.63-03012009 with previous patch of: [PATCH 1/2] Make lttctl mount debugfs automatically Signed-off-by: Zhao lei --- liblttctl.c | 51 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 12 deletions(-) diff -Nur ltt-control-0.63-03012009.org/liblttctl/liblttctl.c ltt-control-0.63-03012009.new/liblttctl/liblttctl.c --- ltt-control-0.63-03012009.org/liblttctl/liblttctl.c 2009-01-07 15:54:45.000000000 +0800 +++ ltt-control-0.63-03012009.new/liblttctl/liblttctl.c 2009-01-07 15:54:49.000000000 +0800 @@ -42,11 +42,44 @@ return getdebugfsmntdir(debugfsmntdir); } +/* + * This function must called posterior to initdebugfsmntdir(), + * because it need to use debugfsmntdir[] which is inited in initdebugfsmntdir() + */ +static int initmodule(void) +{ + char controldirname[PATH_MAX]; + DIR *dir; + int tryload_done = 0; + + sprintf(controldirname, "%s/ltt/control/", debugfsmntdir); + +check_again: + /* + * Check ltt control's debugfs dir + * + * We don't check is ltt-trace-control module exist, because it maybe + * compiled into kernel. + */ + dir = opendir(controldirname); + if (dir) { + closedir(dir); + return 0; + } + + if (!tryload_done) { + system("modprobe ltt-trace-control"); + tryload_done = 1; + goto check_again; + } + + return -ENOENT; +} + int lttctl_init(void) { int ret; - DIR *dir; - char controldirname[PATH_MAX]; + ret = initdebugfsmntdir(); if (ret) { @@ -54,18 +87,12 @@ return 1; } - /* check ltt control's debugfs dir */ - sprintf(controldirname, "%s/ltt/control/", debugfsmntdir); - - dir = opendir(controldirname); - if (!dir) { - fprintf(stderr, "ltt-trace-control's debugfs dir not found\n"); - closedir(dir); - return -errno; + ret = initmodule(); + if (ret) { + fprintf(stderr, "Control module seems not work\n"); + return 1; } - closedir(dir); - return 0; }