I have added VM_SOFTDIRTY to smatch_data/kernel.unconstant_macros to
silence this false positive.

regards,
dan carpenter


On Sat, May 10, 2014 at 08:57:51AM +0800, kbuild test robot wrote:
> TO: Cyrill Gorcunov <gorcu...@gmail.com>
> CC: Johannes Weiner <han...@cmpxchg.org>
> CC: Andrew Morton <a...@linux-foundation.org>
> CC: Linux Memory Management List <linux...@kvack.org>
> 
> Hi Cyrill,
> 
> First bad commit (maybe != root cause):
> 
> tree:   git://git.cmpxchg.org/linux-mmotm.git master
> head:   9567896580328249f6519fda78cf9fe185a8486d
> commit: 42e82fd9aa0a10d06a5642f8b83af8dc443f0e3a [192/459] mm: pgtable -- 
> Require X86_64 for soft-dirty tracker, v2
> :::::: branch date: 49 minutes ago
> :::::: commit date: 51 minutes ago
> 
> fs/proc/task_mmu.c:769 clear_refs_test_walk() warn: bitwise AND condition is 
> false here
> fs/proc/task_mmu.c:928 pte_to_pagemap_entry() warn: bitwise AND condition is 
> false here
> fs/proc/task_mmu.c:936 pte_to_pagemap_entry() warn: bitwise AND condition is 
> false here
> fs/proc/task_mmu.c:993 pagemap_pmd() warn: bitwise AND condition is false here
> fs/proc/task_mmu.c:1039 pagemap_hugetlb() warn: bitwise AND condition is 
> false here
> 
> git remote add mmotm git://git.cmpxchg.org/linux-mmotm.git
> git remote update mmotm
> git checkout 42e82fd9aa0a10d06a5642f8b83af8dc443f0e3a
> vim +769 fs/proc/task_mmu.c
> 
> 436a162d3 Naoya Horiguchi       2014-05-10  763        */
> 436a162d3 Naoya Horiguchi       2014-05-10  764       if (cp->type == 
> CLEAR_REFS_ANON && vma->vm_file)
> 436a162d3 Naoya Horiguchi       2014-05-10  765               walk->skip = 1;
> 436a162d3 Naoya Horiguchi       2014-05-10  766       if (cp->type == 
> CLEAR_REFS_MAPPED && !vma->vm_file)
> 436a162d3 Naoya Horiguchi       2014-05-10  767               walk->skip = 1;
> 6041cafc9 Cyrill Gorcunov       2014-05-10  768       if (cp->type == 
> CLEAR_REFS_SOFT_DIRTY) {
> 6041cafc9 Cyrill Gorcunov       2014-05-10 @769               if 
> (vma->vm_flags & VM_SOFTDIRTY)
> 6041cafc9 Cyrill Gorcunov       2014-05-10  770                       
> vma->vm_flags &= ~VM_SOFTDIRTY;
> 6041cafc9 Cyrill Gorcunov       2014-05-10  771       }
> a6198797c Matt Mackall          2008-02-04  772       return 0;
> a6198797c Matt Mackall          2008-02-04  773  }
> a6198797c Matt Mackall          2008-02-04  774  
> f248dcb34 Matt Mackall          2008-02-04  775  static ssize_t 
> clear_refs_write(struct file *file, const char __user *buf,
> f248dcb34 Matt Mackall          2008-02-04  776                               
> size_t count, loff_t *ppos)
> b813e931b David Rientjes        2007-05-06  777  {
> f248dcb34 Matt Mackall          2008-02-04  778       struct task_struct 
> *task;
> fb92a4b06 Vincent Li            2009-09-22  779       char 
> buffer[PROC_NUMBUF];
> f248dcb34 Matt Mackall          2008-02-04  780       struct mm_struct *mm;
> b813e931b David Rientjes        2007-05-06  781       struct vm_area_struct 
> *vma;
> 040fa0207 Pavel Emelyanov       2013-07-03  782       enum clear_refs_types 
> type;
> 040fa0207 Pavel Emelyanov       2013-07-03  783       int itype;
> 0a8cb8e34 Alexey Dobriyan       2011-05-26  784       int rv;
> b813e931b David Rientjes        2007-05-06  785  
> f248dcb34 Matt Mackall          2008-02-04  786       memset(buffer, 0, 
> sizeof(buffer));
> f248dcb34 Matt Mackall          2008-02-04  787       if (count > 
> sizeof(buffer) - 1)
> f248dcb34 Matt Mackall          2008-02-04  788               count = 
> sizeof(buffer) - 1;
> f248dcb34 Matt Mackall          2008-02-04  789       if 
> (copy_from_user(buffer, buf, count))
> f248dcb34 Matt Mackall          2008-02-04  790               return -EFAULT;
> 040fa0207 Pavel Emelyanov       2013-07-03  791       rv = 
> kstrtoint(strstrip(buffer), 10, &itype);
> 0a8cb8e34 Alexey Dobriyan       2011-05-26  792       if (rv < 0)
> 0a8cb8e34 Alexey Dobriyan       2011-05-26  793               return rv;
> 040fa0207 Pavel Emelyanov       2013-07-03  794       type = (enum 
> clear_refs_types)itype;
> 040fa0207 Pavel Emelyanov       2013-07-03  795       if (type < 
> CLEAR_REFS_ALL || type >= CLEAR_REFS_LAST)
> f248dcb34 Matt Mackall          2008-02-04  796               return -EINVAL;
> 541c237c0 Pavel Emelyanov       2013-07-03  797  
> 541c237c0 Pavel Emelyanov       2013-07-03  798       if (type == 
> CLEAR_REFS_SOFT_DIRTY) {
> 541c237c0 Pavel Emelyanov       2013-07-03  799               
> soft_dirty_cleared = true;
> 6041cafc9 Cyrill Gorcunov       2014-05-10  800               
> pr_warn_once("The pagemap bits 55-60 has changed their meaning!"
> 6041cafc9 Cyrill Gorcunov       2014-05-10  801                            " 
> See the linux/Documentation/vm/pagemap.txt for "
> 6041cafc9 Cyrill Gorcunov       2014-05-10  802                            
> "details.\n");
> 541c237c0 Pavel Emelyanov       2013-07-03  803       }
> 541c237c0 Pavel Emelyanov       2013-07-03  804  
> 496ad9aa8 Al Viro               2013-01-23  805       task = 
> get_proc_task(file_inode(file));
> f248dcb34 Matt Mackall          2008-02-04  806       if (!task)
> f248dcb34 Matt Mackall          2008-02-04  807               return -ESRCH;
> f248dcb34 Matt Mackall          2008-02-04  808       mm = get_task_mm(task);
> f248dcb34 Matt Mackall          2008-02-04  809       if (mm) {
> af9de7eb1 Pavel Emelyanov       2013-07-03  810               struct 
> clear_refs_private cp = {
> 0f8975ec4 Pavel Emelyanov       2013-07-03  811                       .type = 
> type,
> af9de7eb1 Pavel Emelyanov       2013-07-03  812               };
> 20cbc9726 Andrew Morton         2008-07-05  813               struct mm_walk 
> clear_refs_walk = {
> 436a162d3 Naoya Horiguchi       2014-05-10  814                       
> .pte_entry = clear_refs_pte,
> 436a162d3 Naoya Horiguchi       2014-05-10  815                       
> .test_walk = clear_refs_test_walk,
> 20cbc9726 Andrew Morton         2008-07-05  816                       .mm = 
> mm,
> af9de7eb1 Pavel Emelyanov       2013-07-03  817                       
> .private = &cp,
> 20cbc9726 Andrew Morton         2008-07-05  818               };
> f248dcb34 Matt Mackall          2008-02-04  819               
> down_read(&mm->mmap_sem);
> 0f8975ec4 Pavel Emelyanov       2013-07-03  820               if (type == 
> CLEAR_REFS_SOFT_DIRTY)
> 0f8975ec4 Pavel Emelyanov       2013-07-03  821                       
> mmu_notifier_invalidate_range_start(mm, 0, -1);
> 436a162d3 Naoya Horiguchi       2014-05-10  822               for (vma = 
> mm->mmap; vma; vma = vma->vm_next)
> 436a162d3 Naoya Horiguchi       2014-05-10  823                       
> walk_page_vma(vma, &clear_refs_walk);
> 0f8975ec4 Pavel Emelyanov       2013-07-03  824               if (type == 
> CLEAR_REFS_SOFT_DIRTY)
> 0f8975ec4 Pavel Emelyanov       2013-07-03  825                       
> mmu_notifier_invalidate_range_end(mm, 0, -1);
> f248dcb34 Matt Mackall          2008-02-04  826               
> flush_tlb_mm(mm);
> f248dcb34 Matt Mackall          2008-02-04  827               
> up_read(&mm->mmap_sem);
> f248dcb34 Matt Mackall          2008-02-04  828               mmput(mm);
> f248dcb34 Matt Mackall          2008-02-04  829       }
> f248dcb34 Matt Mackall          2008-02-04  830       put_task_struct(task);
> fb92a4b06 Vincent Li            2009-09-22  831  
> fb92a4b06 Vincent Li            2009-09-22  832       return count;
> b813e931b David Rientjes        2007-05-06  833  }
> b813e931b David Rientjes        2007-05-06  834  
> f248dcb34 Matt Mackall          2008-02-04  835  const struct file_operations 
> proc_clear_refs_operations = {
> f248dcb34 Matt Mackall          2008-02-04  836       .write          = 
> clear_refs_write,
> 6038f373a Arnd Bergmann         2010-08-15  837       .llseek         = 
> noop_llseek,
> f248dcb34 Matt Mackall          2008-02-04  838  };
> f248dcb34 Matt Mackall          2008-02-04  839  
> 092b50bac Naoya Horiguchi       2012-03-21  840  typedef struct {
> 092b50bac Naoya Horiguchi       2012-03-21  841       u64 pme;
> 092b50bac Naoya Horiguchi       2012-03-21  842  } pagemap_entry_t;
> 092b50bac Naoya Horiguchi       2012-03-21  843  
> 85863e475 Matt Mackall          2008-02-04  844  struct pagemapread {
> 8c8296223 yonghua zheng         2013-08-13  845       int pos, len;           
> /* units: PM_ENTRY_BYTES, not bytes */
> 092b50bac Naoya Horiguchi       2012-03-21  846       pagemap_entry_t *buffer;
> 2b0a9f017 Pavel Emelyanov       2013-07-03  847       bool v2;
> 85863e475 Matt Mackall          2008-02-04  848  };
> 85863e475 Matt Mackall          2008-02-04  849  
> 5aaabe831 Naoya Horiguchi       2012-03-21  850  #define PAGEMAP_WALK_SIZE    
> (PMD_SIZE)
> 5aaabe831 Naoya Horiguchi       2012-03-21  851  #define PAGEMAP_WALK_MASK    
> (PMD_MASK)
> 5aaabe831 Naoya Horiguchi       2012-03-21  852  
> 8c8296223 yonghua zheng         2013-08-13  853  #define PM_ENTRY_BYTES      
> sizeof(pagemap_entry_t)
> f16278c67 Hans Rosenfeld        2008-03-21  854  #define PM_STATUS_BITS      3
> f16278c67 Hans Rosenfeld        2008-03-21  855  #define PM_STATUS_OFFSET    
> (64 - PM_STATUS_BITS)
> f16278c67 Hans Rosenfeld        2008-03-21  856  #define PM_STATUS_MASK      
> (((1LL << PM_STATUS_BITS) - 1) << PM_STATUS_OFFSET)
> f16278c67 Hans Rosenfeld        2008-03-21  857  #define PM_STATUS(nr)       
> (((nr) << PM_STATUS_OFFSET) & PM_STATUS_MASK)
> f16278c67 Hans Rosenfeld        2008-03-21  858  #define PM_PSHIFT_BITS      6
> f16278c67 Hans Rosenfeld        2008-03-21  859  #define PM_PSHIFT_OFFSET    
> (PM_STATUS_OFFSET - PM_PSHIFT_BITS)
> f16278c67 Hans Rosenfeld        2008-03-21  860  #define PM_PSHIFT_MASK      
> (((1LL << PM_PSHIFT_BITS) - 1) << PM_PSHIFT_OFFSET)
> 2b0a9f017 Pavel Emelyanov       2013-07-03  861  #define __PM_PSHIFT(x)      
> (((u64) (x) << PM_PSHIFT_OFFSET) & PM_PSHIFT_MASK)
> f16278c67 Hans Rosenfeld        2008-03-21  862  #define PM_PFRAME_MASK      
> ((1LL << PM_PSHIFT_OFFSET) - 1)
> f16278c67 Hans Rosenfeld        2008-03-21  863  #define PM_PFRAME(x)        
> ((x) & PM_PFRAME_MASK)
> 2b0a9f017 Pavel Emelyanov       2013-07-03  864  /* in "new" pagemap pshift 
> bits are occupied with more status bits */
> 2b0a9f017 Pavel Emelyanov       2013-07-03  865  #define PM_STATUS2(v2, x)   
> (__PM_PSHIFT(v2 ? x : PAGE_SHIFT))
> f16278c67 Hans Rosenfeld        2008-03-21  866  
> 0f8975ec4 Pavel Emelyanov       2013-07-03  867  #define __PM_SOFT_DIRTY      
> (1LL)
> f16278c67 Hans Rosenfeld        2008-03-21  868  #define PM_PRESENT          
> PM_STATUS(4LL)
> f16278c67 Hans Rosenfeld        2008-03-21  869  #define PM_SWAP             
> PM_STATUS(2LL)
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  870  #define PM_FILE             
> PM_STATUS(1LL)
> 2b0a9f017 Pavel Emelyanov       2013-07-03  871  #define PM_NOT_PRESENT(v2)  
> PM_STATUS2(v2, 0)
> 85863e475 Matt Mackall          2008-02-04  872  #define PM_END_OF_BUFFER    1
> 85863e475 Matt Mackall          2008-02-04  873  
> 092b50bac Naoya Horiguchi       2012-03-21  874  static inline 
> pagemap_entry_t make_pme(u64 val)
> 092b50bac Naoya Horiguchi       2012-03-21  875  {
> 092b50bac Naoya Horiguchi       2012-03-21  876       return 
> (pagemap_entry_t) { .pme = val };
> 092b50bac Naoya Horiguchi       2012-03-21  877  }
> 092b50bac Naoya Horiguchi       2012-03-21  878  
> 092b50bac Naoya Horiguchi       2012-03-21  879  static int 
> add_to_pagemap(unsigned long addr, pagemap_entry_t *pme,
> 85863e475 Matt Mackall          2008-02-04  880                         
> struct pagemapread *pm)
> 85863e475 Matt Mackall          2008-02-04  881  {
> 092b50bac Naoya Horiguchi       2012-03-21  882       pm->buffer[pm->pos++] = 
> *pme;
> d82ef020c KAMEZAWA Hiroyuki     2010-04-02  883       if (pm->pos >= pm->len)
> aae8679b0 Thomas Tuttle         2008-06-05  884               return 
> PM_END_OF_BUFFER;
> 85863e475 Matt Mackall          2008-02-04  885       return 0;
> 85863e475 Matt Mackall          2008-02-04  886  }
> 85863e475 Matt Mackall          2008-02-04  887  
> 85863e475 Matt Mackall          2008-02-04  888  static int 
> pagemap_pte_hole(unsigned long start, unsigned long end,
> 2165009bd Dave Hansen           2008-06-12  889                               
> struct mm_walk *walk)
> 85863e475 Matt Mackall          2008-02-04  890  {
> 2165009bd Dave Hansen           2008-06-12  891       struct pagemapread *pm 
> = walk->private;
> 85863e475 Matt Mackall          2008-02-04  892       unsigned long addr;
> 85863e475 Matt Mackall          2008-02-04  893       int err = 0;
> 2b0a9f017 Pavel Emelyanov       2013-07-03  894       pagemap_entry_t pme = 
> make_pme(PM_NOT_PRESENT(pm->v2));
> 092b50bac Naoya Horiguchi       2012-03-21  895  
> 85863e475 Matt Mackall          2008-02-04  896       for (addr = start; addr 
> < end; addr += PAGE_SIZE) {
> 092b50bac Naoya Horiguchi       2012-03-21  897               err = 
> add_to_pagemap(addr, &pme, pm);
> 85863e475 Matt Mackall          2008-02-04  898               if (err)
> 85863e475 Matt Mackall          2008-02-04  899                       break;
> 85863e475 Matt Mackall          2008-02-04  900       }
> 85863e475 Matt Mackall          2008-02-04  901       return err;
> 85863e475 Matt Mackall          2008-02-04  902  }
> 85863e475 Matt Mackall          2008-02-04  903  
> 2b0a9f017 Pavel Emelyanov       2013-07-03  904  static void 
> pte_to_pagemap_entry(pagemap_entry_t *pme, struct pagemapread *pm,
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  905               struct 
> vm_area_struct *vma, unsigned long addr, pte_t pte)
> 85863e475 Matt Mackall          2008-02-04  906  {
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  907       u64 frame, flags;
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  908       struct page *page = 
> NULL;
> 0f8975ec4 Pavel Emelyanov       2013-07-03  909       int flags2 = 0;
> 85863e475 Matt Mackall          2008-02-04  910  
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  911       if (pte_present(pte)) {
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  912               frame = 
> pte_pfn(pte);
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  913               flags = 
> PM_PRESENT;
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  914               page = 
> vm_normal_page(vma, addr, pte);
> e9cdd6e77 Cyrill Gorcunov       2013-10-16  915               if 
> (pte_soft_dirty(pte))
> e9cdd6e77 Cyrill Gorcunov       2013-10-16  916                       flags2 
> |= __PM_SOFT_DIRTY;
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  917       } else if 
> (is_swap_pte(pte)) {
> 179ef71cb Cyrill Gorcunov       2013-08-13  918               swp_entry_t 
> entry;
> 179ef71cb Cyrill Gorcunov       2013-08-13  919               if 
> (pte_swp_soft_dirty(pte))
> 179ef71cb Cyrill Gorcunov       2013-08-13  920                       flags2 
> |= __PM_SOFT_DIRTY;
> 179ef71cb Cyrill Gorcunov       2013-08-13  921               entry = 
> pte_to_swp_entry(pte);
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  922               frame = 
> swp_type(entry) |
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  923                       
> (swp_offset(entry) << MAX_SWAPFILES_SHIFT);
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  924               flags = PM_SWAP;
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  925               if 
> (is_migration_entry(entry))
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  926                       page = 
> migration_entry_to_page(entry);
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  927       } else {
> d9104d1ca Cyrill Gorcunov       2013-09-11 @928               if 
> (vma->vm_flags & VM_SOFTDIRTY)
> d9104d1ca Cyrill Gorcunov       2013-09-11  929                       flags2 
> |= __PM_SOFT_DIRTY;
> d9104d1ca Cyrill Gorcunov       2013-09-11  930               *pme = 
> make_pme(PM_NOT_PRESENT(pm->v2) | PM_STATUS2(pm->v2, flags2));
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  931               return;
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  932       }
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  933  
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  934       if (page && 
> !PageAnon(page))
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  935               flags |= 
> PM_FILE;
> e9cdd6e77 Cyrill Gorcunov       2013-10-16 @936       if ((vma->vm_flags & 
> VM_SOFTDIRTY))
> 0f8975ec4 Pavel Emelyanov       2013-07-03  937               flags2 |= 
> __PM_SOFT_DIRTY;
> 052fb0d63 Konstantin Khlebnikov 2012-05-31  938  
> 0f8975ec4 Pavel Emelyanov       2013-07-03  939       *pme = 
> make_pme(PM_PFRAME(frame) | PM_STATUS2(pm->v2, flags2) | flags);
> 
> :::::: The code at line 769 was first introduced by commit
> :::::: 6041cafc9faf096d9c4a89d4ef04074183950c1c mm: softdirty: clear 
> VM_SOFTDIRTY flag inside clear_refs_write() instead of clear_soft_dirty()
> 
> :::::: TO: Cyrill Gorcunov <gorcu...@openvz.org>
> :::::: CC: Johannes Weiner <han...@cmpxchg.org>
> 
> ---
> 0-DAY kernel build testing backend              Open Source Technology Center
> http://lists.01.org/mailman/listinfo/kbuild                 Intel Corporation
_______________________________________________
kbuild mailing list
kbuild@lists.01.org
https://lists.01.org/mailman/listinfo/kbuild

Reply via email to