Re: [paulmckrcu:dev] [srcu] 26cb612c43: BUG:using__this_cpu_read()in_preemptible

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



hi, Paul,

On Wed, Sep 25, 2024 at 01:57:45AM -0700, Paul E. McKenney wrote:
> > 
> > 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 <oliver.sang@xxxxxxxxx>
> > | Closes: https://lore.kernel.org/oe-lkp/202409231124.358fed11-lkp@xxxxxxxxx
> > 
> > 
> > [  169.560380][   T76] BUG: using __this_cpu_read() in preemptible [00000000] code: kworker/1:2/76
> > [ 169.561229][ T76] caller is try_check_zero (kernel/rcu/srcutree.c:485 kernel/rcu/srcutree.c:1149) 
> 
> Does this diff fix things for you?  Here the per-CPU access is a
> heuristic that reduces overhead once the bulk of the CPUs have done
> srcu_read_lock_lite().  So it is OK to get migrated just after the check.

yes, this patch fixed the random failures in our tests.
Tested-by: kernel test robot <oliver.sang@xxxxxxxxx>

we applied patch upon 26cb612c43 and run the same tests up to 200 times,
didn't observe the issue. thanks!

=========================================================================================
compiler/kconfig/rootfs/runtime/tbox_group/test/testcase/torture_type:
  gcc-12/x86_64-randconfig-006-20240921/debian-12-x86_64-20240206.cgz/300s/vm-snb/cpuhotplug/rcutorture/srcud

commit:
  daf812f27d6bb ("srcu: Standardize srcu_data pointers to "sdp" and similar")
  26cb612c431de ("srcu: Add srcu_read_lock_lite() and srcu_read_unlock_lite()")
  f2f1565029268  <--- your patch

daf812f27d6bbe4c 26cb612c431de5093ae6a3a67ec f2f1565029268e27760307bc82b
---------------- --------------------------- ---------------------------
       fail:runs  %reproduction    fail:runs  %reproduction    fail:runs
           |             |             |             |             |
           :50          66%          33:50           0%            :200   dmesg.BUG:using__this_cpu_read()in_preemptible


> 
> 							Thanx, Paul
> 
> ------------------------------------------------------------------------
> 
> diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c
> index f3db4d42e70ab..07147efcb64d3 100644
> --- a/kernel/rcu/srcutree.c
> +++ b/kernel/rcu/srcutree.c
> @@ -482,7 +482,7 @@ static unsigned long srcu_readers_unlock_idx(struct srcu_struct *ssp, int idx)
>   */
>  static bool srcu_readers_active_idx_check(struct srcu_struct *ssp, int idx)
>  {
> -	bool did_gp = !!(__this_cpu_read(ssp->sda->srcu_reader_flavor) & SRCU_READ_FLAVOR_LITE);
> +	bool did_gp = !!(raw_cpu_read(ssp->sda->srcu_reader_flavor) & SRCU_READ_FLAVOR_LITE);
>  	unsigned long unlocks;
>  
>  	unlocks = srcu_readers_unlock_idx(ssp, idx);
> 
> ------------------------------------------------------------------------




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux