On Sun, Sep 27, 2020 at 06:55:31AM +0800, kernel test robot wrote:
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git 
> urezki-pcount.2020.09.26a
> head:   e9bed2a1239b017d78cec5de66adce0560f6d077
> commit: e9bed2a1239b017d78cec5de66adce0560f6d077 [17/17] kvfree_rcu(): Switch 
> to kmalloc() and kfree() for allocations
> config: i386-randconfig-s002-20200927 (attached as .config)
> compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
> reproduce:
>         # apt-get install sparse
>         # sparse version: v0.6.2-201-g24bdaac6-dirty
>         # 
> https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git/commit/?id=e9bed2a1239b017d78cec5de66adce0560f6d077
>         git remote add rcu 
> https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git
>         git fetch --no-tags rcu urezki-pcount.2020.09.26a
>         git checkout e9bed2a1239b017d78cec5de66adce0560f6d077
>         # save the attached .config to linux build tree
>         make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=i386 
> 
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <l...@intel.com>

Fixed by 1a8eee1cc5b0 ("squash! kvfree_rcu: Switch to GFP_ATOMIC when
preemption is enabled"), to be squashed into the original.

Thank you for your testing efforts!

                                                        Thanx, Paul

> sparse warnings: (new ones prefixed by >>)
> 
>    kernel/rcu/tree.c:1344:13: sparse: sparse: context imbalance in 
> 'rcu_start_this_gp' - different lock contexts for basic block
>    kernel/rcu/tree.c:1787:9: sparse: sparse: context imbalance in 
> 'rcu_gp_init' - different lock contexts for basic block
>    kernel/rcu/tree.c:2542:9: sparse: sparse: context imbalance in 
> 'force_qs_rnp' - different lock contexts for basic block
>    kernel/rcu/tree.c:2596:25: sparse: sparse: context imbalance in 
> 'rcu_force_quiescent_state' - unexpected unlock
>    kernel/rcu/tree.c:3299:29: sparse: sparse: incorrect type in initializer 
> (different base types) @@     expected int gfp @@     got restricted gfp_t @@
>    kernel/rcu/tree.c:3299:29: sparse:     expected int gfp
>    kernel/rcu/tree.c:3299:29: sparse:     got restricted gfp_t
> >> kernel/rcu/tree.c:3315:52: sparse: sparse: incorrect type in argument 2 
> >> (different base types) @@     expected restricted gfp_t [usertype] flags 
> >> @@     got int gfp @@
> >> kernel/rcu/tree.c:3315:52: sparse:     expected restricted gfp_t 
> >> [usertype] flags
>    kernel/rcu/tree.c:3315:52: sparse:     got int gfp
>    kernel/rcu/tree.c: note: in included file:
>    kernel/rcu/tree_stall.h:749:17: sparse: sparse: context imbalance in 
> 'rcu_check_gp_start_stall' - different lock contexts for basic block
>    kernel/rcu/tree.c: note: in included file:
>    kernel/rcu/tree_exp.h:189:9: sparse: sparse: context imbalance in 
> '__rcu_report_exp_rnp' - different lock contexts for basic block
> 
> vim +3315 kernel/rcu/tree.c
> 
>   3292        
>   3293        static inline bool
>   3294        add_ptr_to_bulk_krc_lock(struct kfree_rcu_cpu **krcp,
>   3295                unsigned long *flags, void *ptr, bool can_sleep)
>   3296        {
>   3297                struct kvfree_rcu_bulk_data *bnode;
>   3298                bool can_alloc_page = preemptible();
>   3299                int gfp = can_sleep ? GFP_NOWAIT | __GFP_NOWARN : 
> GFP_ATOMIC;
>   3300                int idx;
>   3301        
>   3302                *krcp = krc_this_cpu_lock(flags);
>   3303                if (unlikely(!(*krcp)->initialized))
>   3304                        return false;
>   3305        
>   3306                idx = !!is_vmalloc_addr(ptr);
>   3307        
>   3308                /* Check if a new block is required. */
>   3309                if (!(*krcp)->bkvhead[idx] ||
>   3310                                (*krcp)->bkvhead[idx]->nr_records == 
> KVFREE_BULK_MAX_ENTR) {
>   3311                        bnode = get_cached_bnode(*krcp);
>   3312                        if (!bnode && can_alloc_page) {
>   3313                                migrate_disable();
>   3314                                krc_this_cpu_unlock(*krcp, *flags);
> > 3315                                bnode = kmalloc(PAGE_SIZE, gfp);
>   3316                                *krcp = krc_this_cpu_lock(flags);
>   3317                                migrate_enable();
>   3318                        }
>   3319        
>   3320                        /* Switch to emergency path. */
>   3321                        if (unlikely(!bnode))
>   3322                                return false;
>   3323        
>   3324                        /* Initialize the new block. */
>   3325                        bnode->nr_records = 0;
>   3326                        bnode->next = (*krcp)->bkvhead[idx];
>   3327        
>   3328                        /* Attach it to the head. */
>   3329                        (*krcp)->bkvhead[idx] = bnode;
>   3330                }
>   3331        
>   3332                /* Finally insert. */
>   3333                (*krcp)->bkvhead[idx]->records
>   3334                        [(*krcp)->bkvhead[idx]->nr_records++] = ptr;
>   3335        
>   3336                return true;
>   3337        }
>   3338        
> 
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org


Reply via email to