@@ -3374,7 +3374,7 @@ static void bpf_perf_link_dealloc(struct bpf_link *link)
33743374static int bpf_perf_link_fill_common (const struct perf_event * event ,
33753375 char __user * uname , u32 ulen ,
33763376 u64 * probe_offset , u64 * probe_addr ,
3377- u32 * fd_type )
3377+ u32 * fd_type , unsigned long * missed )
33783378{
33793379 const char * buf ;
33803380 u32 prog_id ;
@@ -3385,7 +3385,7 @@ static int bpf_perf_link_fill_common(const struct perf_event *event,
33853385 return - EINVAL ;
33863386
33873387 err = bpf_get_perf_event_info (event , & prog_id , fd_type , & buf ,
3388- probe_offset , probe_addr );
3388+ probe_offset , probe_addr , missed );
33893389 if (err )
33903390 return err ;
33913391 if (!uname )
@@ -3408,6 +3408,7 @@ static int bpf_perf_link_fill_common(const struct perf_event *event,
34083408static int bpf_perf_link_fill_kprobe (const struct perf_event * event ,
34093409 struct bpf_link_info * info )
34103410{
3411+ unsigned long missed ;
34113412 char __user * uname ;
34123413 u64 addr , offset ;
34133414 u32 ulen , type ;
@@ -3416,7 +3417,7 @@ static int bpf_perf_link_fill_kprobe(const struct perf_event *event,
34163417 uname = u64_to_user_ptr (info -> perf_event .kprobe .func_name );
34173418 ulen = info -> perf_event .kprobe .name_len ;
34183419 err = bpf_perf_link_fill_common (event , uname , ulen , & offset , & addr ,
3419- & type );
3420+ & type , & missed );
34203421 if (err )
34213422 return err ;
34223423 if (type == BPF_FD_TYPE_KRETPROBE )
@@ -3425,6 +3426,7 @@ static int bpf_perf_link_fill_kprobe(const struct perf_event *event,
34253426 info -> perf_event .type = BPF_PERF_EVENT_KPROBE ;
34263427
34273428 info -> perf_event .kprobe .offset = offset ;
3429+ info -> perf_event .kprobe .missed = missed ;
34283430 if (!kallsyms_show_value (current_cred ()))
34293431 addr = 0 ;
34303432 info -> perf_event .kprobe .addr = addr ;
@@ -3444,7 +3446,7 @@ static int bpf_perf_link_fill_uprobe(const struct perf_event *event,
34443446 uname = u64_to_user_ptr (info -> perf_event .uprobe .file_name );
34453447 ulen = info -> perf_event .uprobe .name_len ;
34463448 err = bpf_perf_link_fill_common (event , uname , ulen , & offset , & addr ,
3447- & type );
3449+ & type , NULL );
34483450 if (err )
34493451 return err ;
34503452
@@ -3480,7 +3482,7 @@ static int bpf_perf_link_fill_tracepoint(const struct perf_event *event,
34803482 uname = u64_to_user_ptr (info -> perf_event .tracepoint .tp_name );
34813483 ulen = info -> perf_event .tracepoint .name_len ;
34823484 info -> perf_event .type = BPF_PERF_EVENT_TRACEPOINT ;
3483- return bpf_perf_link_fill_common (event , uname , ulen , NULL , NULL , NULL );
3485+ return bpf_perf_link_fill_common (event , uname , ulen , NULL , NULL , NULL , NULL );
34843486}
34853487
34863488static int bpf_perf_link_fill_perf_event (const struct perf_event * event ,
@@ -4813,7 +4815,7 @@ static int bpf_task_fd_query(const union bpf_attr *attr,
48134815
48144816 err = bpf_get_perf_event_info (event , & prog_id , & fd_type ,
48154817 & buf , & probe_offset ,
4816- & probe_addr );
4818+ & probe_addr , NULL );
48174819 if (!err )
48184820 err = bpf_task_fd_query_copy (attr , uattr , prog_id ,
48194821 fd_type , buf ,
0 commit comments