Не удается удалить драйвер ядра после включения трассировки - PullRequest
0 голосов
/ 09 марта 2020

Я добавил новую точку трассировки в построенный модуль ядра. Через несколько секунд после insmod мой refcnt драйвера остается на 1, и с этого момента я не могу выгрузить мой модуль.

Я следовал инструкциям на https://lwn.net/Articles/383362/.

Запуск в Ubuntu 18.04.4 - ядро ​​4.15.0-rc4.

Я включил трассировки, чтобы проверить, что использует мой модуль, и похоже, что код точки трассировки (perf_trace_init) "держит" мой модуль.

Есть идеи, что я делаю не так?

Фрагмент кода:

#undef TRACE_SYSTEM
#define TRACE_SYSTEM dummy

#if !defined(_DUMMY_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
#define _DUMMY_TRACE_H

#include <linux/tracepoint.h>

TRACE_EVENT(dummy_trace,

        TP_PROTO(int bytes),

        TP_ARGS(bytes),

        TP_STRUCT__entry(
                __field(int, bytes)
            ),

        TP_fast_assign(
                __entry->bytes = bytes;
            ),

        TP_printk("bytes = %d", __entry->bytes)
);

#endif /* _DUMMY_TRACE_H */

/* This part must be outside protection */
#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH /home/user/dummy/
#define TRACE_INCLUDE_FILE dummy_trace
#include <trace/define_trace.h>

затем в одном из моих C исходных файлов, которые я только что назвал trace_dummy_trace с байтовым параметром.

...