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

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

 



On Thu, Sep 26, 2024 at 10:31:50AM +0800, Oliver Sang wrote:
> 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!

Very good, and I will add your Tested-by on my next rebase.  Thank you
for all your testing efforts!

							Thanx, Paul

> =========================================================================================
> 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