On Tue, Jan 30, 2024 at 05:30:38PM +0800, kernel test robot wrote:
> Hi Vincent,
> 
> kernel test robot noticed the following build errors:
> 
> [auto build test ERROR on 29142dc92c37d3259a33aef15b03e6ee25b0d188]
> 
> url:    
> https://github.com/intel-lab-lkp/linux/commits/Vincent-Donnefort/ring-buffer-Zero-ring-buffer-sub-buffers/20240129-223025
> base:   29142dc92c37d3259a33aef15b03e6ee25b0d188
> patch link:    
> https://lore.kernel.org/r/20240129142802.2145305-4-vdonnefort%40google.com
> patch subject: [PATCH v13 3/6] tracing: Add snapshot refcount
> config: arc-randconfig-002-20240130 
> (https://download.01.org/0day-ci/archive/20240130/202401301740.qzzlpcyv-...@intel.com/config)
> compiler: arceb-elf-gcc (GCC) 13.2.0
> reproduce (this is a W=1 build): 
> (https://download.01.org/0day-ci/archive/20240130/202401301740.qzzlpcyv-...@intel.com/reproduce)
> 
> If you fix the issue in a separate patch/commit (i.e. not just a new version 
> of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <l...@intel.com>
> | Closes: 
> https://lore.kernel.org/oe-kbuild-all/202401301740.qzzlpcyv-...@intel.com/
> 
> All errors (new ones prefixed by >>):
> 
>    kernel/trace/trace.c: In function 'tracing_set_tracer':
>    kernel/trace/trace.c:6644:17: error: implicit declaration of function 
> 'tracing_disarm_snapshot_locked'; did you mean 'tracing_disarm_snapshot'? 
> [-Werror=implicit-function-declaration]
>     6644 |                 tracing_disarm_snapshot_locked(tr);
>          |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>          |                 tracing_disarm_snapshot
> >> kernel/trace/trace.c:6648:23: error: implicit declaration of function 
> >> 'tracing_arm_snapshot_locked'; did you mean 'tracing_arm_snapshot'? 
> >> [-Werror=implicit-function-declaration]
>     6648 |                 ret = tracing_arm_snapshot_locked(tr);
>          |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>          |                       tracing_arm_snapshot
>    cc1: some warnings being treated as errors

Right, two tracers (hwlat and osnoise) select _only_ MAX_TRACE and not
TRACER_SNAPSHOT.

However, AFAICT, they will not call any of the swapping functions (they don't
set use_max_tr). So I suppose arm/disarm can be ommited in that case.

> 
> 
> vim +6648 kernel/trace/trace.c
> 
>   6560        
>   6561        int tracing_set_tracer(struct trace_array *tr, const char *buf)
>   6562        {
>   6563                struct tracer *t;
>   6564        #ifdef CONFIG_TRACER_MAX_TRACE
>   6565                bool had_max_tr;
>   6566        #endif
>   6567                int ret = 0;
>   6568        
>   6569                mutex_lock(&trace_types_lock);
>   6570        
>   6571                if (!tr->ring_buffer_expanded) {
>   6572                        ret = __tracing_resize_ring_buffer(tr, 
> trace_buf_size,
>   6573                                                        
> RING_BUFFER_ALL_CPUS);
>   6574                        if (ret < 0)
>   6575                                goto out;
>   6576                        ret = 0;
>   6577                }
>   6578        
>   6579                for (t = trace_types; t; t = t->next) {
>   6580                        if (strcmp(t->name, buf) == 0)
>   6581                                break;
>   6582                }
>   6583                if (!t) {
>   6584                        ret = -EINVAL;
>   6585                        goto out;
>   6586                }
>   6587                if (t == tr->current_trace)
>   6588                        goto out;
>   6589        
>   6590        #ifdef CONFIG_TRACER_SNAPSHOT
>   6591                if (t->use_max_tr) {
>   6592                        local_irq_disable();
>   6593                        arch_spin_lock(&tr->max_lock);
>   6594                        if (tr->cond_snapshot)
>   6595                                ret = -EBUSY;
>   6596                        arch_spin_unlock(&tr->max_lock);
>   6597                        local_irq_enable();
>   6598                        if (ret)
>   6599                                goto out;
>   6600                }
>   6601        #endif
>   6602                /* Some tracers won't work on kernel command line */
>   6603                if (system_state < SYSTEM_RUNNING && t->noboot) {
>   6604                        pr_warn("Tracer '%s' is not allowed on command 
> line, ignored\n",
>   6605                                t->name);
>   6606                        goto out;
>   6607                }
>   6608        
>   6609                /* Some tracers are only allowed for the top level 
> buffer */
>   6610                if (!trace_ok_for_array(t, tr)) {
>   6611                        ret = -EINVAL;
>   6612                        goto out;
>   6613                }
>   6614        
>   6615                /* If trace pipe files are being read, we can't change 
> the tracer */
>   6616                if (tr->trace_ref) {
>   6617                        ret = -EBUSY;
>   6618                        goto out;
>   6619                }
>   6620        
>   6621                trace_branch_disable();
>   6622        
>   6623                tr->current_trace->enabled--;
>   6624        
>   6625                if (tr->current_trace->reset)
>   6626                        tr->current_trace->reset(tr);
>   6627        
>   6628        #ifdef CONFIG_TRACER_MAX_TRACE
>   6629                had_max_tr = tr->current_trace->use_max_tr;
>   6630        
>   6631                /* Current trace needs to be nop_trace before 
> synchronize_rcu */
>   6632                tr->current_trace = &nop_trace;
>   6633        
>   6634                if (had_max_tr && !t->use_max_tr) {
>   6635                        /*
>   6636                         * We need to make sure that the update_max_tr 
> sees that
>   6637                         * current_trace changed to nop_trace to keep 
> it from
>   6638                         * swapping the buffers after we resize it.
>   6639                         * The update_max_tr is called from interrupts 
> disabled
>   6640                         * so a synchronized_sched() is sufficient.
>   6641                         */
>   6642                        synchronize_rcu();
>   6643                        free_snapshot(tr);
>   6644                        tracing_disarm_snapshot_locked(tr);
>   6645                }
>   6646        
>   6647                if (t->use_max_tr) {
> > 6648                        ret = tracing_arm_snapshot_locked(tr);
>   6649                        if (ret)
>   6650                                goto out;
>   6651                }
>   6652        #else
>   6653                tr->current_trace = &nop_trace;
>   6654        #endif
>   6655        
>   6656                if (t->init) {
>   6657                        ret = tracer_init(t, tr);
>   6658                        if (ret) {
>   6659        #ifdef CONFIG_TRACER_MAX_TRACE
>   6660                                if (t->use_max_tr)
>   6661                                        
> tracing_disarm_snapshot_locked(tr);
>   6662        #endif
>   6663                                goto out;
>   6664                        }
>   6665                }
>   6666        
>   6667                tr->current_trace = t;
>   6668                tr->current_trace->enabled++;
>   6669                trace_branch_enable(tr);
>   6670         out:
>   6671                mutex_unlock(&trace_types_lock);
>   6672        
>   6673                return ret;
>   6674        }
>   6675        
> 
> -- 
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki

Reply via email to