X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fmodprobe.c;h=a093f2412c4006d5c1660d2b6e12bdf2f3a74968;hp=f58f50c65c3f4f8284a6bd9bf7a2af1bb548a00a;hb=refs%2Fheads%2Fsow-2020-0002-rev1;hpb=0b1c5ad55be0ee7f7a19e9cd31f07562dcd8dcc1 diff --git a/src/bin/lttng-sessiond/modprobe.c b/src/bin/lttng-sessiond/modprobe.c index f58f50c65..a093f2412 100644 --- a/src/bin/lttng-sessiond/modprobe.c +++ b/src/bin/lttng-sessiond/modprobe.c @@ -1,19 +1,9 @@ /* - * Copyright (C) 2011 - David Goulet - * 2014 - Jan Glauber + * Copyright (C) 2011 David Goulet + * Copyright (C) 2014 Jan Glauber * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License, version 2 only, - * as published by the Free Software Foundation. + * SPDX-License-Identifier: GPL-2.0-only * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /** @@ -34,63 +24,72 @@ #include "modprobe.h" #include "kern-modules.h" +#include "lttng-sessiond.h" #define LTTNG_MOD_REQUIRED 1 #define LTTNG_MOD_OPTIONAL 0 /* LTTng kernel tracer mandatory core modules list */ +/* TODO: the new trigger client might not be present in previous lttng-modules + * should it be optional? + * Can we reuse this to also know of the trigger feature is supported? + */ struct kern_modules_param kern_modules_control_core[] = { - { "lttng-ring-buffer-client-discard" }, - { "lttng-ring-buffer-client-overwrite" }, - { "lttng-ring-buffer-metadata-client" }, - { "lttng-ring-buffer-client-mmap-discard" }, - { "lttng-ring-buffer-client-mmap-overwrite" }, - { "lttng-ring-buffer-metadata-mmap-client" }, + { (char *) "lttng-ring-buffer-client-discard" }, + { (char *) "lttng-ring-buffer-client-overwrite" }, + { (char *) "lttng-ring-buffer-metadata-client" }, + { (char *) "lttng-ring-buffer-client-mmap-discard" }, + { (char *) "lttng-ring-buffer-client-mmap-overwrite" }, + { (char *) "lttng-ring-buffer-metadata-mmap-client" }, + { (char *) "lttng-ring-buffer-trigger-client" }, + { (char *) "lttng-counter-client-percpu-64-modular" }, + { (char *) "lttng-counter-client-percpu-32-modular" }, }; /* LTTng kernel tracer probe modules list */ struct kern_modules_param kern_modules_probes_default[] = { - { "lttng-probe-asoc" }, - { "lttng-probe-block" }, - { "lttng-probe-btrfs" }, - { "lttng-probe-compaction" }, - { "lttng-probe-ext3" }, - { "lttng-probe-ext4" }, - { "lttng-probe-gpio" }, - { "lttng-probe-i2c" }, - { "lttng-probe-irq" }, - { "lttng-probe-jbd" }, - { "lttng-probe-jbd2" }, - { "lttng-probe-kmem" }, - { "lttng-probe-kvm" }, - { "lttng-probe-kvm-x86" }, - { "lttng-probe-kvm-x86-mmu" }, - { "lttng-probe-lock" }, - { "lttng-probe-module" }, - { "lttng-probe-napi" }, - { "lttng-probe-net" }, - { "lttng-probe-power" }, - { "lttng-probe-printk" }, - { "lttng-probe-random" }, - { "lttng-probe-rcu" }, - { "lttng-probe-regmap" }, - { "lttng-probe-regulator" }, - { "lttng-probe-rpm" }, - { "lttng-probe-sched" }, - { "lttng-probe-scsi" }, - { "lttng-probe-signal" }, - { "lttng-probe-skb" }, - { "lttng-probe-sock" }, - { "lttng-probe-statedump" }, - { "lttng-probe-sunrpc" }, - { "lttng-probe-timer" }, - { "lttng-probe-udp" }, - { "lttng-probe-vmscan" }, - { "lttng-probe-v4l2" }, - { "lttng-probe-workqueue" }, - { "lttng-probe-writeback" }, - { "lttng-probe-x86-irq-vectors" }, - { "lttng-probe-x86-exceptions" }, + { (char *) "lttng-probe-asoc" }, + { (char *) "lttng-probe-block" }, + { (char *) "lttng-probe-btrfs" }, + { (char *) "lttng-probe-compaction" }, + { (char *) "lttng-probe-ext3" }, + { (char *) "lttng-probe-ext4" }, + { (char *) "lttng-probe-gpio" }, + { (char *) "lttng-probe-i2c" }, + { (char *) "lttng-probe-irq" }, + { (char *) "lttng-probe-jbd" }, + { (char *) "lttng-probe-jbd2" }, + { (char *) "lttng-probe-kmem" }, + { (char *) "lttng-probe-kvm" }, + { (char *) "lttng-probe-kvm-x86" }, + { (char *) "lttng-probe-kvm-x86-mmu" }, + { (char *) "lttng-probe-lock" }, + { (char *) "lttng-probe-module" }, + { (char *) "lttng-probe-napi" }, + { (char *) "lttng-probe-net" }, + { (char *) "lttng-probe-power" }, + { (char *) "lttng-probe-preemptirq" }, + { (char *) "lttng-probe-printk" }, + { (char *) "lttng-probe-random" }, + { (char *) "lttng-probe-rcu" }, + { (char *) "lttng-probe-regmap" }, + { (char *) "lttng-probe-regulator" }, + { (char *) "lttng-probe-rpm" }, + { (char *) "lttng-probe-sched" }, + { (char *) "lttng-probe-scsi" }, + { (char *) "lttng-probe-signal" }, + { (char *) "lttng-probe-skb" }, + { (char *) "lttng-probe-sock" }, + { (char *) "lttng-probe-statedump" }, + { (char *) "lttng-probe-sunrpc" }, + { (char *) "lttng-probe-timer" }, + { (char *) "lttng-probe-udp" }, + { (char *) "lttng-probe-vmscan" }, + { (char *) "lttng-probe-v4l2" }, + { (char *) "lttng-probe-workqueue" }, + { (char *) "lttng-probe-writeback" }, + { (char *) "lttng-probe-x86-irq-vectors" }, + { (char *) "lttng-probe-x86-exceptions" }, }; /* dynamic probe modules list */ @@ -198,6 +197,7 @@ static int modprobe_lttng(struct kern_modules_param *modules, } } else { DBG("Modprobe successfully %s", modules[i].name); + modules[i].loaded = true; } kmod_module_unref(mod); @@ -272,6 +272,10 @@ static void modprobe_remove_lttng(const struct kern_modules_param *modules, for (i = entries - 1; i >= 0; i--) { struct kmod_module *mod = NULL; + if (!modules[i].loaded) { + continue; + } + ret = kmod_module_new_from_name(ctx, modules[i].name, &mod); if (ret < 0) { PERROR("Failed to create kmod module for %s", modules[i].name); @@ -338,6 +342,7 @@ static int modprobe_lttng(struct kern_modules_param *modules, } } else { DBG("Modprobe successfully %s", modules[i].name); + modules[i].loaded = true; } } @@ -352,6 +357,9 @@ static void modprobe_remove_lttng(const struct kern_modules_param *modules, char modprobe[256]; for (i = entries - 1; i >= 0; i--) { + if (!modules[i].loaded) { + continue; + } ret = snprintf(modprobe, sizeof(modprobe), "/sbin/modprobe -r -q %s", modules[i].name); @@ -559,12 +567,7 @@ int modprobe_lttng_data(void) * Base probes: either from command line option, environment * variable or default list. */ - if (kmod_probes_list) { - list = kmod_probes_list; - } else { - list = utils_get_kmod_probes_list(); - } - + list = config.kmod_probes_list.value; if (list) { /* User-specified probes. */ ret = append_list_to_probes(list); @@ -599,12 +602,7 @@ int modprobe_lttng_data(void) /* * Extra modules? Append them to current probes list. */ - if (kmod_extra_probes_list) { - list = kmod_extra_probes_list; - } else { - list = utils_get_extra_kmod_probes_list(); - } - + list = config.kmod_extra_probes_list.value; if (list) { ret = append_list_to_probes(list); if (ret) {