@@ -309,6 +309,68 @@ static int try_run_exit(trace_t *trace, analyzer_t *analyzer,
309309 return RESULT_CONT ;
310310}
311311
312+ static inline void rule_run_ret (analy_entry_t * entry , trace_t * trace , int ret )
313+ {
314+ bool hit = false;
315+ rule_t * rule ;
316+
317+ list_for_each_entry (rule , & trace -> rules , list ) {
318+ switch (rule -> type ) {
319+ case RULE_RETURN_ANY :
320+ hit = true;
321+ break ;
322+ case RULE_RETURN_EQ :
323+ hit = rule -> expected == ret ;
324+ break ;
325+ case RULE_RETURN_RANGE :
326+ hit = rule -> range .min < ret && rule -> range .max > ret ;
327+ break ;
328+ case RULE_RETURN_LT :
329+ hit = rule -> expected < ret ;
330+ break ;
331+ case RULE_RETURN_GT :
332+ hit = rule -> expected > ret ;
333+ break ;
334+ case RULE_RETURN_NE :
335+ hit = rule -> expected != ret ;
336+ break ;
337+ default :
338+ continue ;
339+ }
340+ if (!hit )
341+ continue ;
342+ entry -> rule = rule ;
343+ if (!mode_has_context ())
344+ break ;
345+ switch (rule -> level ) {
346+ case RULE_INFO :
347+ break ;
348+ case RULE_WARN :
349+ entry -> ctx -> status |= ANALY_CTX_WARN ;
350+ break ;
351+ case RULE_ERROR :
352+ entry -> ctx -> status |= ANALY_CTX_ERROR ;
353+ break ;
354+ }
355+ break ;
356+ }
357+ }
358+
359+ static inline void rule_run_any (analy_entry_t * entry , trace_t * trace )
360+ {
361+ rule_t * rule ;
362+
363+ if (list_empty (& trace -> rules ))
364+ return ;
365+
366+ list_for_each_entry (rule , & trace -> rules , list ) {
367+ if (rule -> type == RULE_RETURN_ANY ) {
368+ entry -> rule = rule ;
369+ return ;
370+ }
371+ }
372+ }
373+
312374void tl_poll_handler (void * raw_ctx , int cpu , void * data , u32 size )
313375{
314376 static char buf [1024 ], tinfo [128 ];
@@ -506,68 +568,19 @@ void async_poll_handler(void *ctx, int cpu, void *data, u32 size)
506568 }
507569}
508570
509- static inline void rule_run (analy_entry_t * entry , trace_t * trace , int ret )
510- {
511- bool hit = false;
512- rule_t * rule ;
513-
514- list_for_each_entry (rule , & trace -> rules , list ) {
515- switch (rule -> type ) {
516- case RULE_RETURN_ANY :
517- hit = true;
518- break ;
519- case RULE_RETURN_EQ :
520- hit = rule -> expected == ret ;
521- break ;
522- case RULE_RETURN_RANGE :
523- hit = rule -> range .min < ret && rule -> range .max > ret ;
524- break ;
525- case RULE_RETURN_LT :
526- hit = rule -> expected < ret ;
527- break ;
528- case RULE_RETURN_GT :
529- hit = rule -> expected > ret ;
530- break ;
531- case RULE_RETURN_NE :
532- hit = rule -> expected != ret ;
533- break ;
534- default :
535- continue ;
536- }
537- if (!hit )
538- continue ;
539- entry -> rule = rule ;
540- if (!mode_has_context ())
541- break ;
542- switch (rule -> level ) {
543- case RULE_INFO :
544- break ;
545- case RULE_WARN :
546- entry -> ctx -> status |= ANALY_CTX_WARN ;
547- break ;
548- case RULE_ERROR :
549- entry -> ctx -> status |= ANALY_CTX_ERROR ;
550- break ;
551- }
552- break ;
553- }
554- }
555-
556- DEFINE_ANALYZER_ENTRY (free , TRACE_MODE_TIMELINE_MASK | TRACE_MODE_DIAG_MASK )
571+ DEFINE_ANALYZER_ENTRY (free , TRACE_MODE_CTX_MASK )
557572{
558573 put_fake_analy_ctx (e -> fake_ctx );
559574 hlist_del (& e -> fake_ctx -> hash );
560575 if (!trace_mode_intel ())
561576 goto out ;
562577
563- rule_run (e , trace , 0 );
578+ rule_run_ret (e , trace , 0 );
564579out :
565580 return RESULT_CONT ;
566581}
567582
568- DEFINE_ANALYZER_ENTRY (drop , TRACE_MODE_TIMELINE_MASK | TRACE_MODE_DIAG_MASK |
569- TRACE_MODE_DROP_MASK |
570- TRACE_MODE_MONITOR_MASK )
583+ DEFINE_ANALYZER_ENTRY (drop , TRACE_MODE_ALL_MASK )
571584{
572585 define_pure_event (drop_event_t , event , e -> event );
573586 char * reason = NULL , * sym_str , * info ;
@@ -594,7 +607,7 @@ DEFINE_ANALYZER_ENTRY(drop, TRACE_MODE_TIMELINE_MASK | TRACE_MODE_DIAG_MASK |
594607
595608 info = malloc (1024 );
596609 info [0 ] = '\0' ;
597- rule_run (e , trace , 0 );
610+ rule_run_ret (e , trace , 0 );
598611 sprintf (info , PFMT_EMPH_STR (" location" )":\n\t%s" , sym_str );
599612 if (trace_ctx .drop_reason ) {
600613 sprintf_end (info , PFMT_EMPH_STR ("\n drop reason" )":\n\t%s" ,
@@ -605,7 +618,7 @@ DEFINE_ANALYZER_ENTRY(drop, TRACE_MODE_TIMELINE_MASK | TRACE_MODE_DIAG_MASK |
605618 return RESULT_CONT ;
606619}
607620
608- DEFINE_ANALYZER_EXIT (clone , TRACE_MODE_TIMELINE_MASK | TRACE_MODE_DIAG_MASK )
621+ DEFINE_ANALYZER_EXIT (clone , TRACE_MODE_CTX_MASK )
609622{
610623 analy_entry_t * entry = e -> entry ;
611624
@@ -617,23 +630,22 @@ DEFINE_ANALYZER_EXIT(clone, TRACE_MODE_TIMELINE_MASK | TRACE_MODE_DIAG_MASK)
617630 pr_debug ("clone analyzer triggered on: %llx\n" , e -> event .val );
618631 analy_fake_ctx_alloc (e -> event .val , entry -> ctx );
619632 if (trace_mode_intel ())
620- rule_run (entry , trace , 0 );
633+ rule_run_ret (entry , trace , 0 );
621634out :
622635 return RESULT_CONSUME ;
623636}
624637
625- DEFINE_ANALYZER_EXIT (ret , TRACE_MODE_DIAG_MASK |
626- TRACE_MODE_MONITOR_MASK )
638+ DEFINE_ANALYZER_EXIT (ret , TRACE_MODE_CTX_MASK )
627639{
628640 int ret = (int ) e -> event .val ;
629641
630- rule_run (e -> entry , trace , ret );
642+ rule_run_ret (e -> entry , trace , ret );
631643 return RESULT_CONT ;
632644}
633645
634- DEFINE_ANALYZER_ENTRY (default , TRACE_MODE_DIAG_MASK )
646+ DEFINE_ANALYZER_ENTRY (default , TRACE_MODE_ALL_MASK )
635647{
636- rule_run (e , trace , 0 );
648+ rule_run_any (e , trace );
637649 return RESULT_CONT ;
638650}
639651
@@ -670,10 +682,7 @@ const char *pf_names[] = {
670682 [NFPROTO_IPV6 ] = "ipv6" ,
671683 [NFPROTO_DECNET ] = "decnet" ,
672684};
673- DEFINE_ANALYZER_ENTRY (nf , TRACE_MODE_DIAG_MASK |
674- TRACE_MODE_BASIC_MASK |
675- TRACE_MODE_TIMELINE_MASK |
676- TRACE_MODE_MONITOR_MASK )
685+ DEFINE_ANALYZER_ENTRY (nf , TRACE_MODE_ALL_MASK )
677686{
678687 define_pure_event (nf_hooks_event_t , event , e -> event );
679688 char * msg = malloc (1024 ), * extinfo ;
@@ -708,10 +717,7 @@ DEFINE_ANALYZER_ENTRY(nf, TRACE_MODE_DIAG_MASK |
708717}
709718DEFINE_ANALYZER_EXIT_FUNC_DEFAULT (nf )
710719
711- DEFINE_ANALYZER_ENTRY (iptable , TRACE_MODE_DIAG_MASK |
712- TRACE_MODE_BASIC_MASK |
713- TRACE_MODE_TIMELINE_MASK |
714- TRACE_MODE_MONITOR_MASK )
720+ DEFINE_ANALYZER_ENTRY (iptable , TRACE_MODE_ALL_MASK )
715721{
716722 define_pure_event (nf_event_t , event , e -> event );
717723 char * msg = malloc (1024 );
@@ -730,10 +736,7 @@ DEFINE_ANALYZER_ENTRY(iptable, TRACE_MODE_DIAG_MASK |
730736}
731737DEFINE_ANALYZER_EXIT_FUNC_DEFAULT (iptable )
732738
733- DEFINE_ANALYZER_ENTRY (qdisc , TRACE_MODE_DIAG_MASK |
734- TRACE_MODE_BASIC_MASK |
735- TRACE_MODE_TIMELINE_MASK |
736- TRACE_MODE_MONITOR_MASK )
739+ DEFINE_ANALYZER_ENTRY (qdisc , TRACE_MODE_ALL_MASK )
737740{
738741 define_pure_event (qdisc_event_t , event , e -> event );
739742 char * msg = malloc (1024 );
0 commit comments