tree:   
https://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm.git 
block-dm-4.21-inflight
head:   d694c9be5e3948e25ce95162fac9ab47ecc8c589
commit: 2f111f36ecbedc0cff9e87cdca3bfecc71d210d5 [5/6] block: switch to per-cpu 
in-flight counters
config: i386-randconfig-x000-201847 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        git checkout 2f111f36ecbedc0cff9e87cdca3bfecc71d210d5
        # save the attached .config to linux build tree
        make ARCH=i386 

All error/warnings (new ones prefixed by >>):

   In file included from include/asm-generic/percpu.h:7:0,
                    from arch/x86/include/asm/percpu.h:544,
                    from arch/x86/include/asm/preempt.h:6,
                    from include/linux/preempt.h:81,
                    from include/linux/spinlock.h:51,
                    from include/linux/seqlock.h:36,
                    from include/linux/time.h:6,
                    from include/linux/stat.h:19,
                    from include/linux/module.h:10,
                    from block/genhd.c:5:
   block/genhd.c: In function 'part_inc_in_flight':
>> include/linux/percpu-defs.h:219:52: error: invalid operands to binary + 
>> (have 'struct disk_stats' and 'int')
     const void __percpu *__vpp_verify = (typeof((ptr) + 0))NULL; \
                                                 ~~~~~ ^
>> include/linux/percpu-defs.h:259:2: note: in expansion of macro 
>> '__verify_pcpu_ptr'
     __verify_pcpu_ptr(__p);      \
     ^~~~~~~~~~~~~~~~~
   include/linux/percpu-defs.h:263:47: note: in expansion of macro 
'VERIFY_PERCPU_PTR'
    #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
                                                  ^~~~~~~~~~~~~~~~~
>> block/genhd.c:53:12: note: in expansion of macro 'per_cpu_ptr'
     local_inc(per_cpu_ptr(part->dkstats, cpu)->in_flight);
               ^~~~~~~~~~~
>> include/linux/percpu-defs.h:260:10: error: invalid type argument of unary 
>> '*' (have 'struct disk_stats')
     (typeof(*(__p)) __kernel __force *)(__p);   \
             ^~~~~~
   include/linux/percpu-defs.h:263:47: note: in expansion of macro 
'VERIFY_PERCPU_PTR'
    #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
                                                  ^~~~~~~~~~~~~~~~~
>> block/genhd.c:53:12: note: in expansion of macro 'per_cpu_ptr'
     local_inc(per_cpu_ptr(part->dkstats, cpu)->in_flight);
               ^~~~~~~~~~~
>> include/linux/percpu-defs.h:219:52: error: invalid operands to binary + 
>> (have 'struct disk_stats' and 'int')
     const void __percpu *__vpp_verify = (typeof((ptr) + 0))NULL; \
                                                 ~~~~~ ^
>> include/linux/percpu-defs.h:259:2: note: in expansion of macro 
>> '__verify_pcpu_ptr'
     __verify_pcpu_ptr(__p);      \
     ^~~~~~~~~~~~~~~~~
   include/linux/percpu-defs.h:263:47: note: in expansion of macro 
'VERIFY_PERCPU_PTR'
    #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
                                                  ^~~~~~~~~~~~~~~~~
   block/genhd.c:55:13: note: in expansion of macro 'per_cpu_ptr'
      local_inc(per_cpu_ptr(part_to_disk(part)->part0.dkstats, cpu)->in_flight);
                ^~~~~~~~~~~
>> include/linux/percpu-defs.h:260:10: error: invalid type argument of unary 
>> '*' (have 'struct disk_stats')
     (typeof(*(__p)) __kernel __force *)(__p);   \
             ^~~~~~
   include/linux/percpu-defs.h:263:47: note: in expansion of macro 
'VERIFY_PERCPU_PTR'
    #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
                                                  ^~~~~~~~~~~~~~~~~
   block/genhd.c:55:13: note: in expansion of macro 'per_cpu_ptr'
      local_inc(per_cpu_ptr(part_to_disk(part)->part0.dkstats, cpu)->in_flight);
                ^~~~~~~~~~~
   block/genhd.c: In function 'part_dec_in_flight':
>> include/linux/percpu-defs.h:219:52: error: invalid operands to binary + 
>> (have 'struct disk_stats' and 'int')
     const void __percpu *__vpp_verify = (typeof((ptr) + 0))NULL; \
                                                 ~~~~~ ^
>> include/linux/percpu-defs.h:259:2: note: in expansion of macro 
>> '__verify_pcpu_ptr'
     __verify_pcpu_ptr(__p);      \
     ^~~~~~~~~~~~~~~~~
   include/linux/percpu-defs.h:263:47: note: in expansion of macro 
'VERIFY_PERCPU_PTR'
    #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
                                                  ^~~~~~~~~~~~~~~~~
   block/genhd.c:63:12: note: in expansion of macro 'per_cpu_ptr'
     local_dec(per_cpu_ptr(part->dkstats, cpu)->in_flight);
               ^~~~~~~~~~~
>> include/linux/percpu-defs.h:260:10: error: invalid type argument of unary 
>> '*' (have 'struct disk_stats')
     (typeof(*(__p)) __kernel __force *)(__p);   \
             ^~~~~~
   include/linux/percpu-defs.h:263:47: note: in expansion of macro 
'VERIFY_PERCPU_PTR'
    #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
                                                  ^~~~~~~~~~~~~~~~~
   block/genhd.c:63:12: note: in expansion of macro 'per_cpu_ptr'
     local_dec(per_cpu_ptr(part->dkstats, cpu)->in_flight);
               ^~~~~~~~~~~
>> include/linux/percpu-defs.h:219:52: error: invalid operands to binary + 
>> (have 'struct disk_stats' and 'int')
     const void __percpu *__vpp_verify = (typeof((ptr) + 0))NULL; \
                                                 ~~~~~ ^
>> include/linux/percpu-defs.h:259:2: note: in expansion of macro 
>> '__verify_pcpu_ptr'
     __verify_pcpu_ptr(__p);      \
     ^~~~~~~~~~~~~~~~~
   include/linux/percpu-defs.h:263:47: note: in expansion of macro 
'VERIFY_PERCPU_PTR'
    #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
                                                  ^~~~~~~~~~~~~~~~~
   block/genhd.c:65:13: note: in expansion of macro 'per_cpu_ptr'
      local_dec(per_cpu_ptr(part_to_disk(part)->part0.dkstats, cpu)->in_flight);
                ^~~~~~~~~~~
>> include/linux/percpu-defs.h:260:10: error: invalid type argument of unary 
>> '*' (have 'struct disk_stats')
     (typeof(*(__p)) __kernel __force *)(__p);   \
             ^~~~~~
   include/linux/percpu-defs.h:263:47: note: in expansion of macro 
'VERIFY_PERCPU_PTR'
    #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
                                                  ^~~~~~~~~~~~~~~~~
   block/genhd.c:65:13: note: in expansion of macro 'per_cpu_ptr'
      local_dec(per_cpu_ptr(part_to_disk(part)->part0.dkstats, cpu)->in_flight);
                ^~~~~~~~~~~
   In file included from include/linux/genhd.h:20:0,
                    from block/genhd.c:7:
   block/genhd.c: In function 'part_in_flight':
>> include/linux/percpu-defs.h:219:52: error: invalid operands to binary + 
>> (have 'struct disk_stats' and 'int')
     const void __percpu *__vpp_verify = (typeof((ptr) + 0))NULL; \
                                                 ~~~~~ ^
   arch/x86/include/asm/local.h:16:42: note: in definition of macro 'local_read'
    #define local_read(l) atomic_long_read(&(l)->a)
                                             ^
>> include/linux/percpu-defs.h:259:2: note: in expansion of macro 
>> '__verify_pcpu_ptr'
     __verify_pcpu_ptr(__p);      \
     ^~~~~~~~~~~~~~~~~
   include/linux/percpu-defs.h:263:47: note: in expansion of macro 
'VERIFY_PERCPU_PTR'
    #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
                                                  ^~~~~~~~~~~~~~~~~
   block/genhd.c:80:30: note: in expansion of macro 'per_cpu_ptr'
      inflight[0] += local_read(&per_cpu_ptr(part->dkstats, cpu)->in_flight[0]) 
+
                                 ^~~~~~~~~~~
>> include/linux/percpu-defs.h:260:10: error: invalid type argument of unary 
>> '*' (have 'struct disk_stats')
     (typeof(*(__p)) __kernel __force *)(__p);   \
             ^~~~~~
   arch/x86/include/asm/local.h:16:42: note: in definition of macro 'local_read'
    #define local_read(l) atomic_long_read(&(l)->a)
                                             ^
   include/linux/percpu-defs.h:263:47: note: in expansion of macro 
'VERIFY_PERCPU_PTR'
    #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
                                                  ^~~~~~~~~~~~~~~~~
   block/genhd.c:80:30: note: in expansion of macro 'per_cpu_ptr'
      inflight[0] += local_read(&per_cpu_ptr(part->dkstats, cpu)->in_flight[0]) 
+
                                 ^~~~~~~~~~~
>> include/linux/percpu-defs.h:219:52: error: invalid operands to binary + 
>> (have 'struct disk_stats' and 'int')
     const void __percpu *__vpp_verify = (typeof((ptr) + 0))NULL; \
                                                 ~~~~~ ^
   arch/x86/include/asm/local.h:16:42: note: in definition of macro 'local_read'
    #define local_read(l) atomic_long_read(&(l)->a)
                                             ^
>> include/linux/percpu-defs.h:259:2: note: in expansion of macro 
>> '__verify_pcpu_ptr'
     __verify_pcpu_ptr(__p);      \
     ^~~~~~~~~~~~~~~~~
   include/linux/percpu-defs.h:263:47: note: in expansion of macro 
'VERIFY_PERCPU_PTR'
    #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
                                                  ^~~~~~~~~~~~~~~~~
   block/genhd.c:81:17: note: in expansion of macro 'per_cpu_ptr'
        local_read(&per_cpu_ptr(part->dkstats, cpu)->in_flight[1]);
                    ^~~~~~~~~~~
>> include/linux/percpu-defs.h:260:10: error: invalid type argument of unary 
>> '*' (have 'struct disk_stats')
     (typeof(*(__p)) __kernel __force *)(__p);   \
             ^~~~~~
   arch/x86/include/asm/local.h:16:42: note: in definition of macro 'local_read'
    #define local_read(l) atomic_long_read(&(l)->a)
                                             ^
   include/linux/percpu-defs.h:263:47: note: in expansion of macro 
'VERIFY_PERCPU_PTR'
    #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
                                                  ^~~~~~~~~~~~~~~~~
   block/genhd.c:81:17: note: in expansion of macro 'per_cpu_ptr'
        local_read(&per_cpu_ptr(part->dkstats, cpu)->in_flight[1]);
                    ^~~~~~~~~~~

vim +219 include/linux/percpu-defs.h

62fde54123 Tejun Heo 2014-06-17  205  
9c28278a24 Tejun Heo 2014-06-17  206  /*
6fbc07bbe2 Tejun Heo 2014-06-17  207   * __verify_pcpu_ptr() verifies @ptr is a 
percpu pointer without evaluating
6fbc07bbe2 Tejun Heo 2014-06-17  208   * @ptr and is invoked once before a 
percpu area is accessed by all
6fbc07bbe2 Tejun Heo 2014-06-17  209   * accessors and operations.  This is 
performed in the generic part of
6fbc07bbe2 Tejun Heo 2014-06-17  210   * percpu and arch overrides don't need 
to worry about it; however, if an
6fbc07bbe2 Tejun Heo 2014-06-17  211   * arch wants to implement an 
arch-specific percpu accessor or operation,
6fbc07bbe2 Tejun Heo 2014-06-17  212   * it may use __verify_pcpu_ptr() to 
verify the parameters.
9c28278a24 Tejun Heo 2014-06-17  213   *
9c28278a24 Tejun Heo 2014-06-17  214   * + 0 is required in order to convert 
the pointer type from a
9c28278a24 Tejun Heo 2014-06-17  215   * potential array type to a pointer to a 
single item of the array.
9c28278a24 Tejun Heo 2014-06-17  216   */
eba117889a Tejun Heo 2014-06-17  217  #define __verify_pcpu_ptr(ptr)            
                                \
eba117889a Tejun Heo 2014-06-17  218  do {                                      
                                \
9c28278a24 Tejun Heo 2014-06-17 @219    const void __percpu *__vpp_verify = 
(typeof((ptr) + 0))NULL;    \
9c28278a24 Tejun Heo 2014-06-17  220    (void)__vpp_verify;                     
                        \
9c28278a24 Tejun Heo 2014-06-17  221  } while (0)
9c28278a24 Tejun Heo 2014-06-17  222  
62fde54123 Tejun Heo 2014-06-17  223  #ifdef CONFIG_SMP
62fde54123 Tejun Heo 2014-06-17  224  
62fde54123 Tejun Heo 2014-06-17  225  /*
62fde54123 Tejun Heo 2014-06-17  226   * Add an offset to a pointer but keep 
the pointer as-is.  Use RELOC_HIDE()
62fde54123 Tejun Heo 2014-06-17  227   * to prevent the compiler from making 
incorrect assumptions about the
62fde54123 Tejun Heo 2014-06-17  228   * pointer value.  The weird cast keeps 
both GCC and sparse happy.
62fde54123 Tejun Heo 2014-06-17  229   */
eba117889a Tejun Heo 2014-06-17  230  #define SHIFT_PERCPU_PTR(__p, __offset)   
                                \
6fbc07bbe2 Tejun Heo 2014-06-17  231    RELOC_HIDE((typeof(*(__p)) __kernel 
__force *)(__p), (__offset))
6fbc07bbe2 Tejun Heo 2014-06-17  232  
6fbc07bbe2 Tejun Heo 2014-06-17  233  #define per_cpu_ptr(ptr, cpu)             
                                \
eba117889a Tejun Heo 2014-06-17  234  ({                                        
                                \
6fbc07bbe2 Tejun Heo 2014-06-17  235    __verify_pcpu_ptr(ptr);                 
                        \
6fbc07bbe2 Tejun Heo 2014-06-17  236    SHIFT_PERCPU_PTR((ptr), 
per_cpu_offset((cpu)));                 \
62fde54123 Tejun Heo 2014-06-17  237  })
62fde54123 Tejun Heo 2014-06-17  238  
6fbc07bbe2 Tejun Heo 2014-06-17  239  #define raw_cpu_ptr(ptr)                  
                        \
6fbc07bbe2 Tejun Heo 2014-06-17  240  ({                                        
                                \
6fbc07bbe2 Tejun Heo 2014-06-17  241    __verify_pcpu_ptr(ptr);                 
                        \
6fbc07bbe2 Tejun Heo 2014-06-17  242    arch_raw_cpu_ptr(ptr);                  
                        \
6fbc07bbe2 Tejun Heo 2014-06-17  243  })
62fde54123 Tejun Heo 2014-06-17  244  
62fde54123 Tejun Heo 2014-06-17  245  #ifdef CONFIG_DEBUG_PREEMPT
6fbc07bbe2 Tejun Heo 2014-06-17  246  #define this_cpu_ptr(ptr)                 
                        \
6fbc07bbe2 Tejun Heo 2014-06-17  247  ({                                        
                                \
6fbc07bbe2 Tejun Heo 2014-06-17  248    __verify_pcpu_ptr(ptr);                 
                        \
6fbc07bbe2 Tejun Heo 2014-06-17  249    SHIFT_PERCPU_PTR(ptr, my_cpu_offset);   
                        \
6fbc07bbe2 Tejun Heo 2014-06-17  250  })
62fde54123 Tejun Heo 2014-06-17  251  #else
62fde54123 Tejun Heo 2014-06-17  252  #define this_cpu_ptr(ptr) raw_cpu_ptr(ptr)
62fde54123 Tejun Heo 2014-06-17  253  #endif
62fde54123 Tejun Heo 2014-06-17  254  
62fde54123 Tejun Heo 2014-06-17  255  #else     /* CONFIG_SMP */
62fde54123 Tejun Heo 2014-06-17  256  
eba117889a Tejun Heo 2014-06-17  257  #define VERIFY_PERCPU_PTR(__p)            
                                \
eba117889a Tejun Heo 2014-06-17  258  ({                                        
                                \
eba117889a Tejun Heo 2014-06-17 @259    __verify_pcpu_ptr(__p);                 
                        \
62fde54123 Tejun Heo 2014-06-17 @260    (typeof(*(__p)) __kernel __force 
*)(__p);                       \
62fde54123 Tejun Heo 2014-06-17  261  })
62fde54123 Tejun Heo 2014-06-17  262  

:::::: The code at line 219 was first introduced by commit
:::::: 9c28278a24c01c0073fb89e53c1d2a605ab9587d percpu: reorder macros in 
percpu header files

:::::: TO: Tejun Heo <[email protected]>
:::::: CC: Tejun Heo <[email protected]>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

--
dm-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/dm-devel

Reply via email to