On Thu, Aug 10, 2017 at 06:09:22AM +0800, kbuild test robot wrote:
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git 
> mmap_sem.2017.08.09a
> head:   39782fbd9252a3ace9b49a55f4dd2a41a6ced31f
> commit: 1b801585f6b03276db9722dc725a50ca11439467 [6/16] mm: RCU free VMAs
> config: parisc-allnoconfig (attached as .config)
> compiler: hppa-linux-gnu-gcc (Debian 6.1.1-9) 6.1.1 20160705
> reproduce:
>         wget 
> https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O 
> ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         git checkout 1b801585f6b03276db9722dc725a50ca11439467
>         # save the attached .config to linux build tree
>         make.cross ARCH=parisc 
> 
> All error/warnings (new ones prefixed by >>):
> 
>    In file included from mm/mmap.c:53:0:
>    mm/internal.h: In function 'vma_has_changed':
>    mm/internal.h:59:26: error: 'struct vm_fault' has no member named 
> 'sequence'
>      return ret || seq != vmf->sequence;
>                              ^~
>    mm/mmap.c: At top level:
> >> mm/mmap.c:162:1: warning: data definition has no type or storage class
>     DEFINE_SRCU(vma_srcu);
>     ^~~~~~~~~~~

I am going to guess that this is because hppa does not select SRCU?

                                                        Thanx, Paul

> >> mm/mmap.c:162:1: error: type defaults to 'int' in declaration of 
> >> 'DEFINE_SRCU' [-Werror=implicit-int]
> >> mm/mmap.c:162:1: warning: parameter names (without types) in function 
> >> declaration
>    cc1: some warnings being treated as errors
> 
> vim +162 mm/mmap.c
> 
>     52        
>   > 53        #include "internal.h"
>     54        
>     55        #ifndef arch_mmap_check
>     56        #define arch_mmap_check(addr, len, flags)       (0)
>     57        #endif
>     58        
>     59        #ifdef CONFIG_HAVE_ARCH_MMAP_RND_BITS
>     60        const int mmap_rnd_bits_min = CONFIG_ARCH_MMAP_RND_BITS_MIN;
>     61        const int mmap_rnd_bits_max = CONFIG_ARCH_MMAP_RND_BITS_MAX;
>     62        int mmap_rnd_bits __read_mostly = CONFIG_ARCH_MMAP_RND_BITS;
>     63        #endif
>     64        #ifdef CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS
>     65        const int mmap_rnd_compat_bits_min = 
> CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN;
>     66        const int mmap_rnd_compat_bits_max = 
> CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX;
>     67        int mmap_rnd_compat_bits __read_mostly = 
> CONFIG_ARCH_MMAP_RND_COMPAT_BITS;
>     68        #endif
>     69        
>     70        static bool ignore_rlimit_data;
>     71        core_param(ignore_rlimit_data, ignore_rlimit_data, bool, 0644);
>     72        
>     73        static void unmap_region(struct mm_struct *mm,
>     74                        struct vm_area_struct *vma, struct 
> vm_area_struct *prev,
>     75                        unsigned long start, unsigned long end);
>     76        
>     77        /* description of effects of mapping type and prot in current 
> implementation.
>     78         * this is due to the limited x86 page protection hardware.  
> The expected
>     79         * behavior is in parens:
>     80         *
>     81         * map_type     prot
>     82         *              PROT_NONE       PROT_READ       PROT_WRITE      
> PROT_EXEC
>     83         * MAP_SHARED   r: (no) no      r: (yes) yes    r: (no) yes     
> r: (no) yes
>     84         *              w: (no) no      w: (no) no      w: (yes) yes    
> w: (no) no
>     85         *              x: (no) no      x: (no) yes     x: (no) yes     
> x: (yes) yes
>     86         *
>     87         * MAP_PRIVATE  r: (no) no      r: (yes) yes    r: (no) yes     
> r: (no) yes
>     88         *              w: (no) no      w: (no) no      w: (copy) copy  
> w: (no) no
>     89         *              x: (no) no      x: (no) yes     x: (no) yes     
> x: (yes) yes
>     90         *
>     91         * On arm64, PROT_EXEC has the following behaviour for both 
> MAP_SHARED and
>     92         * MAP_PRIVATE:
>     93         *                                                              
> r: (no) no
>     94         *                                                              
> w: (no) no
>     95         *                                                              
> x: (yes) yes
>     96         */
>     97        pgprot_t protection_map[16] __ro_after_init = {
>     98                __P000, __P001, __P010, __P011, __P100, __P101, __P110, 
> __P111,
>     99                __S000, __S001, __S010, __S011, __S100, __S101, __S110, 
> __S111
>    100        };
>    101        
>    102        pgprot_t vm_get_page_prot(unsigned long vm_flags)
>    103        {
>    104                return __pgprot(pgprot_val(protection_map[vm_flags &
>    105                                        
> (VM_READ|VM_WRITE|VM_EXEC|VM_SHARED)]) |
>    106                                
> pgprot_val(arch_vm_get_page_prot(vm_flags)));
>    107        }
>    108        EXPORT_SYMBOL(vm_get_page_prot);
>    109        
>    110        static pgprot_t vm_pgprot_modify(pgprot_t oldprot, unsigned 
> long vm_flags)
>    111        {
>    112                return pgprot_modify(oldprot, 
> vm_get_page_prot(vm_flags));
>    113        }
>    114        
>    115        /* Update vma->vm_page_prot to reflect vma->vm_flags. */
>    116        void vma_set_page_prot(struct vm_area_struct *vma)
>    117        {
>    118                unsigned long vm_flags = vma->vm_flags;
>    119                pgprot_t vm_page_prot;
>    120        
>    121                vm_page_prot = vm_pgprot_modify(vma->vm_page_prot, 
> vm_flags);
>    122                if (vma_wants_writenotify(vma, vm_page_prot)) {
>    123                        vm_flags &= ~VM_SHARED;
>    124                        vm_page_prot = vm_pgprot_modify(vm_page_prot, 
> vm_flags);
>    125                }
>    126                /* remove_protection_ptes reads vma->vm_page_prot 
> without mmap_sem */
>    127                WRITE_ONCE(vma->vm_page_prot, vm_page_prot);
>    128        }
>    129        
>    130        /*
>    131         * Requires inode->i_mapping->i_mmap_rwsem
>    132         */
>    133        static void __remove_shared_vm_struct(struct vm_area_struct 
> *vma,
>    134                        struct file *file, struct address_space 
> *mapping)
>    135        {
>    136                if (vma->vm_flags & VM_DENYWRITE)
>    137                        atomic_inc(&file_inode(file)->i_writecount);
>    138                if (vma->vm_flags & VM_SHARED)
>    139                        mapping_unmap_writable(mapping);
>    140        
>    141                flush_dcache_mmap_lock(mapping);
>    142                vma_interval_tree_remove(vma, &mapping->i_mmap);
>    143                flush_dcache_mmap_unlock(mapping);
>    144        }
>    145        
>    146        /*
>    147         * Unlink a file-based vm structure from its interval tree, to 
> hide
>    148         * vma from rmap and vmtruncate before freeing its page tables.
>    149         */
>    150        void unlink_file_vma(struct vm_area_struct *vma)
>    151        {
>    152                struct file *file = vma->vm_file;
>    153        
>    154                if (file) {
>    155                        struct address_space *mapping = file->f_mapping;
>    156                        i_mmap_lock_write(mapping);
>    157                        __remove_shared_vm_struct(vma, file, mapping);
>    158                        i_mmap_unlock_write(mapping);
>    159                }
>    160        }
>    161        
>  > 162        DEFINE_SRCU(vma_srcu);
>    163        
> 
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation


Reply via email to