1*88a3bde4SLeon Hwang // SPDX-License-Identifier: GPL-2.0 2*88a3bde4SLeon Hwang #include <vmlinux.h> 3*88a3bde4SLeon Hwang #include <bpf/bpf_helpers.h> 4*88a3bde4SLeon Hwang #include <bpf/bpf_tracing.h> 5*88a3bde4SLeon Hwang #include "bpf_experimental.h" 6*88a3bde4SLeon Hwang 7*88a3bde4SLeon Hwang char _license[] SEC("license") = "GPL"; 8*88a3bde4SLeon Hwang 9*88a3bde4SLeon Hwang #define CLOCK_MONOTONIC 1 10*88a3bde4SLeon Hwang 11*88a3bde4SLeon Hwang int preempt_count; 12*88a3bde4SLeon Hwang int in_interrupt; 13*88a3bde4SLeon Hwang int in_interrupt_cb; 14*88a3bde4SLeon Hwang 15*88a3bde4SLeon Hwang struct elem { 16*88a3bde4SLeon Hwang struct bpf_timer t; 17*88a3bde4SLeon Hwang }; 18*88a3bde4SLeon Hwang 19*88a3bde4SLeon Hwang struct { 20*88a3bde4SLeon Hwang __uint(type, BPF_MAP_TYPE_ARRAY); 21*88a3bde4SLeon Hwang __uint(max_entries, 1); 22*88a3bde4SLeon Hwang __type(key, int); 23*88a3bde4SLeon Hwang __type(value, struct elem); 24*88a3bde4SLeon Hwang } array SEC(".maps"); 25*88a3bde4SLeon Hwang 26*88a3bde4SLeon Hwang static int timer_in_interrupt(void *map, int *key, struct bpf_timer *timer) 27*88a3bde4SLeon Hwang { 28*88a3bde4SLeon Hwang preempt_count = get_preempt_count(); 29*88a3bde4SLeon Hwang in_interrupt_cb = bpf_in_interrupt(); 30*88a3bde4SLeon Hwang return 0; 31*88a3bde4SLeon Hwang } 32*88a3bde4SLeon Hwang 33*88a3bde4SLeon Hwang SEC("fentry/bpf_fentry_test1") 34*88a3bde4SLeon Hwang int BPF_PROG(test_timer_interrupt) 35*88a3bde4SLeon Hwang { 36*88a3bde4SLeon Hwang struct bpf_timer *timer; 37*88a3bde4SLeon Hwang int key = 0; 38*88a3bde4SLeon Hwang 39*88a3bde4SLeon Hwang timer = bpf_map_lookup_elem(&array, &key); 40*88a3bde4SLeon Hwang if (!timer) 41*88a3bde4SLeon Hwang return 0; 42*88a3bde4SLeon Hwang 43*88a3bde4SLeon Hwang in_interrupt = bpf_in_interrupt(); 44*88a3bde4SLeon Hwang bpf_timer_init(timer, &array, CLOCK_MONOTONIC); 45*88a3bde4SLeon Hwang bpf_timer_set_callback(timer, timer_in_interrupt); 46*88a3bde4SLeon Hwang bpf_timer_start(timer, 0, 0); 47*88a3bde4SLeon Hwang return 0; 48*88a3bde4SLeon Hwang } 49