tests: Move to kernel style SPDX license identifiers
[lttng-tools.git] / tests / regression / tools / clear / test_kernel
... / ...
CommitLineData
1#!/bin/bash
2#
3# Copyright (C) 2019 Jonathan Rajotte-Julien <jonathan.rajotte-julien@efficios.com>
4#
5# SPDX-License-Identifier: LGPL-2.1-only
6
7TEST_DESC="Clear - Kernel tracing"
8
9CURDIR=$(dirname $0)/
10TESTDIR=$CURDIR/../../..
11EVENT_NAME="lttng_test_filter_event"
12
13PAGE_SIZE=$(getconf PAGE_SIZE)
14TRACE_PATH=$(mktemp -d)
15
16NUM_TESTS=837
17
18source $TESTDIR/utils/utils.sh
19
20function signal_cleanup ()
21{
22 stop_lttng_sessiond
23 modprobe -r lttng-test
24 full_cleanup
25}
26
27function clean_path ()
28{
29 local trace_path=$1
30 set -u
31 rm -rf $trace_path/*
32 set +u
33}
34
35function cond_start_tracing ()
36{
37 local session_name=$1
38 local tracing_active=$2
39
40 if [[ $tracing_active -ne 1 ]]; then
41 start_lttng_tracing_ok $session_name
42 fi
43}
44
45function cond_stop_tracing ()
46{
47 local session_name=$1
48 local tracing_active=$2
49
50 if [[ $tracing_active -ne 1 ]]; then
51 stop_lttng_tracing_ok $session_name
52 fi
53}
54
55function do_clear_session ()
56{
57 local session_name=$1
58 local tracing_active=$2
59 local clear_twice=$3
60 local rotate_before=$4
61 local rotate_after=$5
62
63 cond_stop_tracing $session_name $tracing_active
64 if [[ $rotate_before -eq 1 ]]; then
65 rotate_session_ok $SESSION_NAME
66 fi
67 lttng_clear_session_ok $SESSION_NAME
68 if [[ $clear_twice -eq 1 ]]; then
69 lttng_clear_session_ok $SESSION_NAME
70 fi
71 if [[ $rotate_after -eq 1 ]]; then
72 if [[ $tracing_active -eq 1 ]]; then
73 rotate_session_ok $SESSION_NAME
74 else
75 # Expect failure
76 rotate_session_fail $SESSION_NAME
77 fi
78 fi
79 cond_start_tracing $session_name $tracing_active
80}
81
82function test_kernel_streaming ()
83{
84 local tracing_active=$1
85 local clear_twice=$2
86 local rotate_before=$3
87 local rotate_after=$4
88 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
89
90 diag "Test kernel streaming clear"
91 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after"
92 create_lttng_session_uri $SESSION_NAME net://localhost
93 lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME
94 start_lttng_tracing_ok $SESSION_NAME
95 # Generate 10 events that will sit in the buffers.
96 echo -n "10" > /proc/lttng-test-filter-event
97
98 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
99
100 stop_lttng_tracing_ok $SESSION_NAME
101
102 if [[ $rotate_before -eq 1 ]]; then
103 validate_trace_count $EVENT_NAME $local_path 10
104 else
105 validate_trace_empty $local_path
106 fi
107
108 destroy_lttng_session_ok $SESSION_NAME
109}
110
111function test_kernel_streaming_rotate_clear ()
112{
113 local tracing_active=$1
114 local clear_twice=$2
115 local rotate_before=$3
116 local rotate_after=$4
117 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
118
119 diag "Test kernel streaming rotate-clear"
120 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after"
121 create_lttng_session_uri $SESSION_NAME net://localhost
122 lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME
123 start_lttng_tracing_ok $SESSION_NAME
124 echo -n "1" > /proc/lttng-test-filter-event
125 rotate_session_ok $SESSION_NAME
126 echo -n "2" > /proc/lttng-test-filter-event
127 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
128 echo -n "3" > /proc/lttng-test-filter-event
129
130 stop_lttng_tracing_ok $SESSION_NAME
131
132 if [[ $rotate_before -eq 1 ]]; then
133 local expect_count=6
134 else
135 local expect_count=4
136 fi
137 validate_trace_count $EVENT_NAME $local_path $expect_count
138
139 destroy_lttng_session_ok $SESSION_NAME
140}
141
142function test_kernel_streaming_clear_rotate()
143{
144 local tracing_active=$1
145 local clear_twice=$2
146 local rotate_before=$3
147 local rotate_after=$4
148 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
149
150 diag "Test kernel streaming clear-rotate"
151 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after"
152 create_lttng_session_uri $SESSION_NAME net://localhost
153 lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME
154 start_lttng_tracing_ok $SESSION_NAME
155 echo -n "1" > /proc/lttng-test-filter-event
156 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
157 echo -n "2" > /proc/lttng-test-filter-event
158 rotate_session_ok $SESSION_NAME
159 echo -n "3" > /proc/lttng-test-filter-event
160
161 stop_lttng_tracing_ok $SESSION_NAME
162
163 if [[ $rotate_before -eq 1 ]]; then
164 local expect_count=6
165 else
166 local expect_count=5
167 fi
168 validate_trace_count $EVENT_NAME $local_path $expect_count
169
170 destroy_lttng_session_ok $SESSION_NAME
171}
172
173function test_kernel_streaming_live ()
174{
175 local tracing_active=$1
176 local clear_twice=$2
177 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
178
179 diag "Test kernel streaming live clear"
180 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice"
181 create_lttng_session_uri $SESSION_NAME net://localhost "--live"
182 lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME
183 start_lttng_tracing_ok $SESSION_NAME
184 # Generate 10 events that will sit in the buffers.
185 echo -n "10" > /proc/lttng-test-filter-event
186 do_clear_session $SESSION_NAME $tracing_active $clear_twice 0 0
187 stop_lttng_tracing_ok $SESSION_NAME
188
189 validate_trace_empty $local_path
190
191 destroy_lttng_session_ok $SESSION_NAME
192}
193
194#no clear
195function test_kernel_basic_streaming_live_viewer ()
196{
197 local tracing_active=$1
198 local clear_twice=$2
199 # 3, 4 unused
200 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
201 local remote_trace_path="${HOSTNAME}/${SESSION_NAME}"
202 local channel_name="chan"
203 local bt_output_path=$(mktemp -u)
204 local file_sync_before_exit=$(mktemp -u)
205
206 diag "Test kernel basic streaming live with viewer"
207 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice"
208 create_lttng_session_uri $SESSION_NAME net://localhost "--live"
209 enable_kernel_lttng_channel_ok $SESSION_NAME $channel_name
210 enable_kernel_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
211 start_lttng_tracing_ok $SESSION_NAME
212
213 wait_live_trace_ready net://localhost
214
215 # Connect a live viewer
216 $BABELTRACE_BIN -i lttng-live net://localhost/host/$remote_trace_path > $bt_output_path &
217 local viewer_pid=$!
218
219 wait_live_viewer_connect net://localhost
220
221 echo -n "10" > /proc/lttng-test-filter-event
222
223 diag "Wait until viewer sees all 10 expected events"
224 local evcount=0
225 while [ $evcount -ne 10 ]; do
226 evcount=$(cat $bt_output_path | wc -l)
227 sleep 0.5
228 done
229 pass "Live viewer read $evcount events, expect 10"
230
231 destroy_lttng_session_ok $SESSION_NAME
232 touch $file_sync_before_exit
233 diag "Wait for viewer to exit"
234 wait $viewer_pid
235 ok $? "Babeltrace succeeds"
236 pass "Wait for viewer to exit"
237
238 rm -f $bt_output_path
239 rm -f $file_sync_before_exit
240}
241
242function test_kernel_streaming_live_viewer ()
243{
244 local tracing_active=$1
245 local clear_twice=$2
246 # 3, 4 unused
247 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
248 local remote_trace_path="${HOSTNAME}/${SESSION_NAME}"
249 local channel_name="chan"
250 local bt_output_path=$(mktemp -d)/bt-output.txt
251
252 diag "Test kernel streaming live clear with viewer"
253 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice"
254 create_lttng_session_uri $SESSION_NAME net://localhost "--live"
255 enable_kernel_lttng_channel_ok $SESSION_NAME $channel_name
256 enable_kernel_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
257 start_lttng_tracing_ok $SESSION_NAME
258
259 wait_live_trace_ready net://localhost
260
261 # Connect a live viewer
262 $BABELTRACE_BIN -i lttng-live net://localhost/host/$remote_trace_path > $bt_output_path &
263 local viewer_pid=$!
264
265 wait_live_viewer_connect net://localhost
266
267 echo -n "10" > /proc/lttng-test-filter-event
268 do_clear_session $SESSION_NAME $tracing_active $clear_twice 0 0
269 stop_lttng_tracing_ok $SESSION_NAME
270
271 destroy_lttng_session_ok $SESSION_NAME
272 diag "Wait for viewer to exit"
273 wait $viewer_pid
274 ok $? "Babeltrace succeeds"
275 pass "Wait for viewer to exit"
276
277 clean_path $bt_output_path
278}
279
280function test_kernel_local ()
281{
282 local tracing_active=$1
283 local clear_twice=$2
284 local rotate_before=$3
285 local rotate_after=$4
286
287 diag "Test kernel local"
288 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after"
289 create_lttng_session_ok $SESSION_NAME $TRACE_PATH
290 lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME
291 start_lttng_tracing_ok $SESSION_NAME
292 # Generate 10 events that will sit in the buffers.
293 echo -n "10" > /proc/lttng-test-filter-event
294 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
295 stop_lttng_tracing_ok $SESSION_NAME
296
297 if [[ $rotate_before -eq 1 ]]; then
298 validate_trace_count $EVENT_NAME $TRACE_PATH 10
299 else
300 validate_trace_empty $TRACE_PATH
301 fi
302
303 destroy_lttng_session_ok $SESSION_NAME
304}
305
306function test_kernel_local_rotate_clear ()
307{
308 local tracing_active=$1
309 local clear_twice=$2
310 local rotate_before=$3
311 local rotate_after=$4
312
313 diag "Test kernel local rotate-clear"
314 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after"
315 create_lttng_session_ok $SESSION_NAME $TRACE_PATH
316 lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME
317 start_lttng_tracing_ok $SESSION_NAME
318 echo -n "1" > /proc/lttng-test-filter-event
319 rotate_session_ok $SESSION_NAME
320 echo -n "2" > /proc/lttng-test-filter-event
321 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
322 echo -n "3" > /proc/lttng-test-filter-event
323 stop_lttng_tracing_ok $SESSION_NAME
324
325 if [[ $rotate_before -eq 1 ]]; then
326 local expect_count=6
327 else
328 local expect_count=4
329 fi
330 validate_trace_count $EVENT_NAME $TRACE_PATH $expect_count
331
332 destroy_lttng_session_ok $SESSION_NAME
333}
334
335function test_kernel_local_clear_rotate()
336{
337 local tracing_active=$1
338 local clear_twice=$2
339 local rotate_before=$3
340 local rotate_after=$4
341
342 diag "Test kernel local clear-rotate"
343 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after"
344 create_lttng_session_ok $SESSION_NAME $TRACE_PATH
345 lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME
346 start_lttng_tracing_ok $SESSION_NAME
347 echo -n "1" > /proc/lttng-test-filter-event
348 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
349 echo -n "2" > /proc/lttng-test-filter-event
350 rotate_session_ok $SESSION_NAME
351 echo -n "3" > /proc/lttng-test-filter-event
352 stop_lttng_tracing_ok $SESSION_NAME
353
354 if [[ $rotate_before -eq 1 ]]; then
355 local expect_count=6
356 else
357 local expect_count=5
358 fi
359 validate_trace_count $EVENT_NAME $TRACE_PATH $expect_count
360
361 destroy_lttng_session_ok $SESSION_NAME
362}
363
364function do_kernel_snapshot ()
365{
366 local session_name=$1
367 local trace_path=$2
368 local tracing_active=$3
369 local clear_twice=$4
370 local rotate_before=$5
371 local rotate_after=$6
372
373 lttng_enable_kernel_event $session_name $EVENT_NAME
374 start_lttng_tracing_ok $session_name
375
376 # Generate 10 events that will sit in the buffers.
377 echo -n "10" > /proc/lttng-test-filter-event
378
379 # Take a first snapshot and validate that the events are present.
380 lttng_snapshot_record $session_name
381 stop_lttng_tracing_ok $session_name
382 validate_trace_count $EVENT_NAME $trace_path 10
383
384 # Clean the output path
385 clean_path $trace_path
386 start_lttng_tracing_ok $session_name
387
388 do_clear_session $SESSION_NAME $tracing_active $clear_twice 0 0
389
390 # Make sure the subsequent snapshot is empty and valid.
391 lttng_snapshot_record $session_name
392 stop_lttng_tracing_ok $session_name
393 validate_trace_empty $trace_path
394
395 # Clean the output path
396 clean_path $trace_path
397 start_lttng_tracing_ok $session_name
398
399 # Make sure that everything still works, generate events and take a
400 # snapshot.
401 echo -n "10" > /proc/lttng-test-filter-event
402 lttng_snapshot_record $session_name
403 stop_lttng_tracing_ok $session_name
404 validate_trace_count $EVENT_NAME $trace_path 10
405}
406
407function test_kernel_streaming_snapshot ()
408{
409 local tracing_active=$1
410 local clear_twice=$2
411
412 diag "Test kernel streaming snapshot clear"
413 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice"
414
415 create_lttng_session_uri $SESSION_NAME net://localhost "--snapshot"
416 do_kernel_snapshot $SESSION_NAME $TRACE_PATH $tracing_active $clear_twice
417 destroy_lttng_session_ok $SESSION_NAME
418}
419
420function test_kernel_local_snapshot ()
421{
422 local tracing_active=$1
423 local clear_twice=$2
424
425 diag "Test kernel local snapshot clear"
426 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice"
427
428 create_lttng_session_ok $SESSION_NAME $TRACE_PATH "--snapshot"
429 do_kernel_snapshot $SESSION_NAME $TRACE_PATH $tracing_active $clear_twice
430 destroy_lttng_session_ok $SESSION_NAME
431}
432
433function test_kernel_streaming_tracefile_rotation ()
434{
435 local tracing_active=$1
436 local clear_twice=$2
437 local rotate_before=$3
438 local rotate_after=$4
439 local channel_name="rotchan"
440 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
441
442 diag "Test kernel streaming clear with tracefile rotation"
443 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after"
444 create_lttng_session_uri $SESSION_NAME net://localhost
445 enable_kernel_lttng_channel_ok $SESSION_NAME $channel_name --subbuf-size=$PAGE_SIZE \
446 --tracefile-size=$PAGE_SIZE --tracefile-count=2
447 enable_kernel_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
448 start_lttng_tracing_ok $SESSION_NAME
449 echo -n "10" > /proc/lttng-test-filter-event
450 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
451 stop_lttng_tracing_ok $SESSION_NAME
452
453 if [[ $rotate_before -eq 1 ]]; then
454 validate_trace_count $EVENT_NAME $local_path 10
455 else
456 validate_trace_empty $local_path
457 fi
458
459 start_lttng_tracing_ok $SESSION_NAME
460 echo -n "20" > /proc/lttng-test-filter-event
461 stop_lttng_tracing_ok
462
463 if [[ $rotate_before -eq 1 ]]; then
464 validate_trace_count $EVENT_NAME $local_path 30
465 else
466 validate_trace_count $EVENT_NAME $local_path 20
467 fi
468
469 destroy_lttng_session_ok $SESSION_NAME
470}
471
472# With 1 byte per event (as strict minimum), generating 200000 events
473# guarantees filling up 2 files of 64k in size, which is the maximum
474# page size known on Linux
475function test_kernel_streaming_tracefile_rotation_overwrite_files ()
476{
477 local tracing_active=$1
478 local clear_twice=$2
479 local rotate_before=$3
480 local rotate_after=$4
481 local channel_name="rotchan"
482 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
483
484 diag "Test kernel streaming clear with tracefile rotation, overwrite files"
485 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after"
486 create_lttng_session_uri $SESSION_NAME net://localhost
487 enable_kernel_lttng_channel_ok $SESSION_NAME $channel_name --subbuf-size=$PAGE_SIZE \
488 --tracefile-size=$PAGE_SIZE --tracefile-count=2
489 enable_kernel_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
490 start_lttng_tracing_ok $SESSION_NAME
491 taskset -c 0 echo -n "200000" > /proc/lttng-test-filter-event
492 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
493 stop_lttng_tracing_ok $SESSION_NAME
494
495 if [[ $rotate_before -eq 1 ]]; then
496 validate_trace_count_range_incl_min_excl_max $EVENT_NAME $local_path 1 200000
497 else
498 validate_trace_empty $local_path
499 fi
500
501 start_lttng_tracing_ok $SESSION_NAME
502 taskset -c 0 echo -n "400000" > /proc/lttng-test-filter-event
503 stop_lttng_tracing_ok
504
505 if [[ $rotate_before -eq 1 ]]; then
506 validate_trace_count_range_incl_min_excl_max $EVENT_NAME $local_path 1 600000
507 else
508 validate_trace_count_range_incl_min_excl_max $EVENT_NAME $local_path 1 200000
509 fi
510
511 destroy_lttng_session_ok $SESSION_NAME
512}
513
514function test_kernel_disallow_clear ()
515{
516 diag "Test kernel disallow clear on relay daemon"
517 SESSION_NAME=$(randstring 16 0)
518
519 LTTNG_RELAYD_DISALLOW_CLEAR=1 start_lttng_relayd "-o $TRACE_PATH"
520
521 start_lttng_sessiond
522
523 create_lttng_session_uri $SESSION_NAME net://localhost
524 enable_kernel_lttng_event_ok $SESSION_NAME $EVENT_NAME
525 start_lttng_tracing_ok $SESSION_NAME
526 lttng_clear_session_fail $SESSION_NAME
527 destroy_lttng_session_ok $SESSION_NAME
528
529 stop_lttng_sessiond
530 stop_lttng_relayd
531 clean_path $TRACE_PATH
532}
533
534plan_tests $NUM_TESTS
535
536print_test_banner "$TEST_DESC"
537
538if [ "$(id -u)" == "0" ]; then
539 isroot=1
540else
541 isroot=0
542fi
543
544streaming_tests=(test_kernel_streaming
545 test_kernel_streaming_rotate_clear
546 test_kernel_streaming_clear_rotate
547 test_kernel_streaming_tracefile_rotation
548 test_kernel_streaming_tracefile_rotation_overwrite_files
549)
550
551live_tests=(test_kernel_streaming_live
552 test_kernel_basic_streaming_live_viewer
553 test_kernel_streaming_live_viewer
554)
555
556local_tests=(test_kernel_local
557 test_kernel_local_rotate_clear
558 test_kernel_local_clear_rotate
559)
560
561snapshot_tests=(test_kernel_streaming_snapshot
562 test_kernel_local_snapshot
563)
564
565skip $isroot "Root access is needed. Skipping all kernel streaming tests." $NUM_TESTS ||
566{
567 trap signal_cleanup SIGTERM SIGINT
568
569 validate_lttng_modules_present
570
571 start_lttng_relayd "-o $TRACE_PATH"
572 start_lttng_sessiond
573 modprobe lttng-test
574
575 # Clear with tracing active, clear once
576 for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_tests[@]};
577 do
578 SESSION_NAME=$(randstring 16 0)
579 ${fct_test} 1 0 0 0
580 clean_path $TRACE_PATH
581 done
582
583 # Clear with tracing active, clear twice
584 for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_tests[@]};
585 do
586 SESSION_NAME=$(randstring 16 0)
587 ${fct_test} 1 1 0 0
588 clean_path $TRACE_PATH
589 done
590
591 # Clear with tracing inactive, clear once
592 for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_tests[@]};
593 do
594 SESSION_NAME=$(randstring 16 0)
595 ${fct_test} 0 0 0 0
596 clean_path $TRACE_PATH
597 done
598
599 # Clear with tracing inactive, clear twice
600 for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_tests[@]};
601 do
602 SESSION_NAME=$(randstring 16 0)
603 ${fct_test} 0 1 0 0
604 clean_path $TRACE_PATH
605 done
606
607 # Clear with tracing inactive, rotate-clear once
608 for fct_test in ${streaming_tests[@]} ${local_tests[@]};
609 do
610 SESSION_NAME=$(randstring 16 0)
611 ${fct_test} 0 0 1 0
612 clean_path $TRACE_PATH
613 done
614
615 # Clear with tracing inactive, clear once-rotate(fail)
616 for fct_test in ${streaming_tests[@]} ${local_tests[@]};
617 do
618 SESSION_NAME=$(randstring 16 0)
619 ${fct_test} 0 0 0 1
620 clean_path $TRACE_PATH
621 done
622
623 rmmod lttng-test
624 stop_lttng_sessiond
625 stop_lttng_relayd
626
627 test_kernel_disallow_clear
628}
629
630clean_path $TRACE_PATH
This page took 0.02491 seconds and 4 git commands to generate.