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