From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: mm/gup.c:559:18: sparse: sparse: cast to non-scalar
Date: Mon, 01 Feb 2021 10:28:41 +0800 [thread overview]
Message-ID: <202102011034.7qMSfevq-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 11871 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 1048ba83fb1c00cd24172e23e8263972f6b5d9ac
commit: dee081bf8f824cabeb7c7495367d5dad0a444eb1 READ_ONCE: Drop pointer qualifiers when reading from scalar types
date: 10 months ago
config: alpha-randconfig-s031-20210201 (attached as .config)
compiler: alpha-linux-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.3-215-g0fb77bb6-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=dee081bf8f824cabeb7c7495367d5dad0a444eb1
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout dee081bf8f824cabeb7c7495367d5dad0a444eb1
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=alpha
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
"sparse warnings: (new ones prefixed by >>)"
>> mm/gup.c:559:18: sparse: sparse: cast to non-scalar
>> mm/gup.c:559:18: sparse: sparse: cast from non-scalar
mm/gup.c:584:26: sparse: sparse: cast to non-scalar
mm/gup.c:584:26: sparse: sparse: cast from non-scalar
--
>> mm/page_vma_mapped.c:186:16: sparse: sparse: cast to non-scalar
>> mm/page_vma_mapped.c:186:16: sparse: sparse: cast from non-scalar
mm/page_vma_mapped.c:16:13: sparse: sparse: context imbalance in 'map_pte' - wrong count at exit
mm/page_vma_mapped.c: note: in included file:
include/linux/rmap.h:220:28: sparse: sparse: context imbalance in 'page_vma_mapped_walk' - unexpected unlock
include/linux/rmap.h:220:28: sparse: sparse: context imbalance in 'page_mapped_in_vma' - unexpected unlock
--
>> mm/migrate.c:236:33: sparse: sparse: cast to non-scalar
>> mm/migrate.c:236:33: sparse: sparse: cast from non-scalar
mm/migrate.c:824:9: sparse: sparse: context imbalance in '__buffer_migrate_page' - different lock contexts for basic block
vim +559 mm/gup.c
69e68b4f03135d Kirill A. Shutemov 2014-06-04 543
080dbb618b4bc2 Aneesh Kumar K.V 2017-07-06 544 static struct page *follow_pmd_mask(struct vm_area_struct *vma,
080dbb618b4bc2 Aneesh Kumar K.V 2017-07-06 545 unsigned long address, pud_t *pudp,
df06b37ffe5a44 Keith Busch 2018-10-26 546 unsigned int flags,
df06b37ffe5a44 Keith Busch 2018-10-26 547 struct follow_page_context *ctx)
69e68b4f03135d Kirill A. Shutemov 2014-06-04 548 {
688272809fcce5 Huang Ying 2018-06-07 549 pmd_t *pmd, pmdval;
69e68b4f03135d Kirill A. Shutemov 2014-06-04 550 spinlock_t *ptl;
69e68b4f03135d Kirill A. Shutemov 2014-06-04 551 struct page *page;
69e68b4f03135d Kirill A. Shutemov 2014-06-04 552 struct mm_struct *mm = vma->vm_mm;
69e68b4f03135d Kirill A. Shutemov 2014-06-04 553
080dbb618b4bc2 Aneesh Kumar K.V 2017-07-06 554 pmd = pmd_offset(pudp, address);
688272809fcce5 Huang Ying 2018-06-07 555 /*
688272809fcce5 Huang Ying 2018-06-07 556 * The READ_ONCE() will stabilize the pmdval in a register or
688272809fcce5 Huang Ying 2018-06-07 557 * on the stack so that it will stop changing under the code.
688272809fcce5 Huang Ying 2018-06-07 558 */
688272809fcce5 Huang Ying 2018-06-07 @559 pmdval = READ_ONCE(*pmd);
688272809fcce5 Huang Ying 2018-06-07 560 if (pmd_none(pmdval))
69e68b4f03135d Kirill A. Shutemov 2014-06-04 561 return no_page_table(vma, flags);
be9d30458913f7 Wei Yang 2020-01-30 562 if (pmd_huge(pmdval) && is_vm_hugetlb_page(vma)) {
e66f17ff71772b Naoya Horiguchi 2015-02-11 563 page = follow_huge_pmd(mm, address, pmd, flags);
e66f17ff71772b Naoya Horiguchi 2015-02-11 564 if (page)
4bbd4c776a63a0 Kirill A. Shutemov 2014-06-04 565 return page;
e66f17ff71772b Naoya Horiguchi 2015-02-11 566 return no_page_table(vma, flags);
4bbd4c776a63a0 Kirill A. Shutemov 2014-06-04 567 }
688272809fcce5 Huang Ying 2018-06-07 568 if (is_hugepd(__hugepd(pmd_val(pmdval)))) {
4dc71451a2078e Aneesh Kumar K.V 2017-07-06 569 page = follow_huge_pd(vma, address,
688272809fcce5 Huang Ying 2018-06-07 570 __hugepd(pmd_val(pmdval)), flags,
4dc71451a2078e Aneesh Kumar K.V 2017-07-06 571 PMD_SHIFT);
4dc71451a2078e Aneesh Kumar K.V 2017-07-06 572 if (page)
4dc71451a2078e Aneesh Kumar K.V 2017-07-06 573 return page;
4dc71451a2078e Aneesh Kumar K.V 2017-07-06 574 return no_page_table(vma, flags);
4dc71451a2078e Aneesh Kumar K.V 2017-07-06 575 }
84c3fc4e9c563d Zi Yan 2017-09-08 576 retry:
688272809fcce5 Huang Ying 2018-06-07 577 if (!pmd_present(pmdval)) {
84c3fc4e9c563d Zi Yan 2017-09-08 578 if (likely(!(flags & FOLL_MIGRATION)))
84c3fc4e9c563d Zi Yan 2017-09-08 579 return no_page_table(vma, flags);
84c3fc4e9c563d Zi Yan 2017-09-08 580 VM_BUG_ON(thp_migration_supported() &&
688272809fcce5 Huang Ying 2018-06-07 581 !is_pmd_migration_entry(pmdval));
688272809fcce5 Huang Ying 2018-06-07 582 if (is_pmd_migration_entry(pmdval))
84c3fc4e9c563d Zi Yan 2017-09-08 583 pmd_migration_entry_wait(mm, pmd);
688272809fcce5 Huang Ying 2018-06-07 584 pmdval = READ_ONCE(*pmd);
688272809fcce5 Huang Ying 2018-06-07 585 /*
688272809fcce5 Huang Ying 2018-06-07 586 * MADV_DONTNEED may convert the pmd to null because
688272809fcce5 Huang Ying 2018-06-07 587 * mmap_sem is held in read mode
688272809fcce5 Huang Ying 2018-06-07 588 */
688272809fcce5 Huang Ying 2018-06-07 589 if (pmd_none(pmdval))
688272809fcce5 Huang Ying 2018-06-07 590 return no_page_table(vma, flags);
84c3fc4e9c563d Zi Yan 2017-09-08 591 goto retry;
84c3fc4e9c563d Zi Yan 2017-09-08 592 }
688272809fcce5 Huang Ying 2018-06-07 593 if (pmd_devmap(pmdval)) {
3565fce3a6597e Dan Williams 2016-01-15 594 ptl = pmd_lock(mm, pmd);
df06b37ffe5a44 Keith Busch 2018-10-26 595 page = follow_devmap_pmd(vma, address, pmd, flags, &ctx->pgmap);
3565fce3a6597e Dan Williams 2016-01-15 596 spin_unlock(ptl);
3565fce3a6597e Dan Williams 2016-01-15 597 if (page)
3565fce3a6597e Dan Williams 2016-01-15 598 return page;
3565fce3a6597e Dan Williams 2016-01-15 599 }
688272809fcce5 Huang Ying 2018-06-07 600 if (likely(!pmd_trans_huge(pmdval)))
df06b37ffe5a44 Keith Busch 2018-10-26 601 return follow_page_pte(vma, address, pmd, flags, &ctx->pgmap);
6742d293cbe01d Kirill A. Shutemov 2016-01-15 602
688272809fcce5 Huang Ying 2018-06-07 603 if ((flags & FOLL_NUMA) && pmd_protnone(pmdval))
db08f2030a173f Aneesh Kumar K.V 2017-02-24 604 return no_page_table(vma, flags);
db08f2030a173f Aneesh Kumar K.V 2017-02-24 605
84c3fc4e9c563d Zi Yan 2017-09-08 606 retry_locked:
69e68b4f03135d Kirill A. Shutemov 2014-06-04 607 ptl = pmd_lock(mm, pmd);
688272809fcce5 Huang Ying 2018-06-07 608 if (unlikely(pmd_none(*pmd))) {
688272809fcce5 Huang Ying 2018-06-07 609 spin_unlock(ptl);
688272809fcce5 Huang Ying 2018-06-07 610 return no_page_table(vma, flags);
688272809fcce5 Huang Ying 2018-06-07 611 }
84c3fc4e9c563d Zi Yan 2017-09-08 612 if (unlikely(!pmd_present(*pmd))) {
84c3fc4e9c563d Zi Yan 2017-09-08 613 spin_unlock(ptl);
84c3fc4e9c563d Zi Yan 2017-09-08 614 if (likely(!(flags & FOLL_MIGRATION)))
84c3fc4e9c563d Zi Yan 2017-09-08 615 return no_page_table(vma, flags);
84c3fc4e9c563d Zi Yan 2017-09-08 616 pmd_migration_entry_wait(mm, pmd);
84c3fc4e9c563d Zi Yan 2017-09-08 617 goto retry_locked;
84c3fc4e9c563d Zi Yan 2017-09-08 618 }
6742d293cbe01d Kirill A. Shutemov 2016-01-15 619 if (unlikely(!pmd_trans_huge(*pmd))) {
6742d293cbe01d Kirill A. Shutemov 2016-01-15 620 spin_unlock(ptl);
df06b37ffe5a44 Keith Busch 2018-10-26 621 return follow_page_pte(vma, address, pmd, flags, &ctx->pgmap);
6742d293cbe01d Kirill A. Shutemov 2016-01-15 622 }
bfe7b00de6d1e2 Song Liu 2019-09-23 623 if (flags & (FOLL_SPLIT | FOLL_SPLIT_PMD)) {
6742d293cbe01d Kirill A. Shutemov 2016-01-15 624 int ret;
6742d293cbe01d Kirill A. Shutemov 2016-01-15 625 page = pmd_page(*pmd);
6742d293cbe01d Kirill A. Shutemov 2016-01-15 626 if (is_huge_zero_page(page)) {
6742d293cbe01d Kirill A. Shutemov 2016-01-15 627 spin_unlock(ptl);
6742d293cbe01d Kirill A. Shutemov 2016-01-15 628 ret = 0;
78ddc534734190 Kirill A. Shutemov 2016-01-15 629 split_huge_pmd(vma, pmd, address);
337d9abf1cd1a5 Naoya Horiguchi 2016-07-26 630 if (pmd_trans_unstable(pmd))
337d9abf1cd1a5 Naoya Horiguchi 2016-07-26 631 ret = -EBUSY;
bfe7b00de6d1e2 Song Liu 2019-09-23 632 } else if (flags & FOLL_SPLIT) {
8fde12ca79aff9 Linus Torvalds 2019-04-11 633 if (unlikely(!try_get_page(page))) {
8fde12ca79aff9 Linus Torvalds 2019-04-11 634 spin_unlock(ptl);
8fde12ca79aff9 Linus Torvalds 2019-04-11 635 return ERR_PTR(-ENOMEM);
8fde12ca79aff9 Linus Torvalds 2019-04-11 636 }
69e68b4f03135d Kirill A. Shutemov 2014-06-04 637 spin_unlock(ptl);
6742d293cbe01d Kirill A. Shutemov 2016-01-15 638 lock_page(page);
6742d293cbe01d Kirill A. Shutemov 2016-01-15 639 ret = split_huge_page(page);
6742d293cbe01d Kirill A. Shutemov 2016-01-15 640 unlock_page(page);
6742d293cbe01d Kirill A. Shutemov 2016-01-15 641 put_page(page);
baa355fd331424 Kirill A. Shutemov 2016-07-26 642 if (pmd_none(*pmd))
baa355fd331424 Kirill A. Shutemov 2016-07-26 643 return no_page_table(vma, flags);
bfe7b00de6d1e2 Song Liu 2019-09-23 644 } else { /* flags & FOLL_SPLIT_PMD */
bfe7b00de6d1e2 Song Liu 2019-09-23 645 spin_unlock(ptl);
bfe7b00de6d1e2 Song Liu 2019-09-23 646 split_huge_pmd(vma, pmd, address);
bfe7b00de6d1e2 Song Liu 2019-09-23 647 ret = pte_alloc(mm, pmd) ? -ENOMEM : 0;
69e68b4f03135d Kirill A. Shutemov 2014-06-04 648 }
6742d293cbe01d Kirill A. Shutemov 2016-01-15 649
6742d293cbe01d Kirill A. Shutemov 2016-01-15 650 return ret ? ERR_PTR(ret) :
df06b37ffe5a44 Keith Busch 2018-10-26 651 follow_page_pte(vma, address, pmd, flags, &ctx->pgmap);
69e68b4f03135d Kirill A. Shutemov 2014-06-04 652 }
6742d293cbe01d Kirill A. Shutemov 2016-01-15 653 page = follow_trans_huge_pmd(vma, address, pmd, flags);
6742d293cbe01d Kirill A. Shutemov 2016-01-15 654 spin_unlock(ptl);
df06b37ffe5a44 Keith Busch 2018-10-26 655 ctx->page_mask = HPAGE_PMD_NR - 1;
6742d293cbe01d Kirill A. Shutemov 2016-01-15 656 return page;
69e68b4f03135d Kirill A. Shutemov 2014-06-04 657 }
4bbd4c776a63a0 Kirill A. Shutemov 2014-06-04 658
:::::: The code at line 559 was first introduced by commit
:::::: 688272809fcce5b17fcefd5892b59f3788efb144 mm, gup: prevent pmd checking race in follow_pmd_mask()
:::::: TO: Huang Ying <ying.huang@intel.com>
:::::: CC: Linus Torvalds <torvalds@linux-foundation.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 29272 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Will Deacon <will@kernel.org>
Cc: kbuild-all@lists.01.org, linux-kernel@vger.kernel.org
Subject: mm/gup.c:559:18: sparse: sparse: cast to non-scalar
Date: Mon, 1 Feb 2021 10:28:41 +0800 [thread overview]
Message-ID: <202102011034.7qMSfevq-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 11702 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 1048ba83fb1c00cd24172e23e8263972f6b5d9ac
commit: dee081bf8f824cabeb7c7495367d5dad0a444eb1 READ_ONCE: Drop pointer qualifiers when reading from scalar types
date: 10 months ago
config: alpha-randconfig-s031-20210201 (attached as .config)
compiler: alpha-linux-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.3-215-g0fb77bb6-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=dee081bf8f824cabeb7c7495367d5dad0a444eb1
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout dee081bf8f824cabeb7c7495367d5dad0a444eb1
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=alpha
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
"sparse warnings: (new ones prefixed by >>)"
>> mm/gup.c:559:18: sparse: sparse: cast to non-scalar
>> mm/gup.c:559:18: sparse: sparse: cast from non-scalar
mm/gup.c:584:26: sparse: sparse: cast to non-scalar
mm/gup.c:584:26: sparse: sparse: cast from non-scalar
--
>> mm/page_vma_mapped.c:186:16: sparse: sparse: cast to non-scalar
>> mm/page_vma_mapped.c:186:16: sparse: sparse: cast from non-scalar
mm/page_vma_mapped.c:16:13: sparse: sparse: context imbalance in 'map_pte' - wrong count at exit
mm/page_vma_mapped.c: note: in included file:
include/linux/rmap.h:220:28: sparse: sparse: context imbalance in 'page_vma_mapped_walk' - unexpected unlock
include/linux/rmap.h:220:28: sparse: sparse: context imbalance in 'page_mapped_in_vma' - unexpected unlock
--
>> mm/migrate.c:236:33: sparse: sparse: cast to non-scalar
>> mm/migrate.c:236:33: sparse: sparse: cast from non-scalar
mm/migrate.c:824:9: sparse: sparse: context imbalance in '__buffer_migrate_page' - different lock contexts for basic block
vim +559 mm/gup.c
69e68b4f03135d Kirill A. Shutemov 2014-06-04 543
080dbb618b4bc2 Aneesh Kumar K.V 2017-07-06 544 static struct page *follow_pmd_mask(struct vm_area_struct *vma,
080dbb618b4bc2 Aneesh Kumar K.V 2017-07-06 545 unsigned long address, pud_t *pudp,
df06b37ffe5a44 Keith Busch 2018-10-26 546 unsigned int flags,
df06b37ffe5a44 Keith Busch 2018-10-26 547 struct follow_page_context *ctx)
69e68b4f03135d Kirill A. Shutemov 2014-06-04 548 {
688272809fcce5 Huang Ying 2018-06-07 549 pmd_t *pmd, pmdval;
69e68b4f03135d Kirill A. Shutemov 2014-06-04 550 spinlock_t *ptl;
69e68b4f03135d Kirill A. Shutemov 2014-06-04 551 struct page *page;
69e68b4f03135d Kirill A. Shutemov 2014-06-04 552 struct mm_struct *mm = vma->vm_mm;
69e68b4f03135d Kirill A. Shutemov 2014-06-04 553
080dbb618b4bc2 Aneesh Kumar K.V 2017-07-06 554 pmd = pmd_offset(pudp, address);
688272809fcce5 Huang Ying 2018-06-07 555 /*
688272809fcce5 Huang Ying 2018-06-07 556 * The READ_ONCE() will stabilize the pmdval in a register or
688272809fcce5 Huang Ying 2018-06-07 557 * on the stack so that it will stop changing under the code.
688272809fcce5 Huang Ying 2018-06-07 558 */
688272809fcce5 Huang Ying 2018-06-07 @559 pmdval = READ_ONCE(*pmd);
688272809fcce5 Huang Ying 2018-06-07 560 if (pmd_none(pmdval))
69e68b4f03135d Kirill A. Shutemov 2014-06-04 561 return no_page_table(vma, flags);
be9d30458913f7 Wei Yang 2020-01-30 562 if (pmd_huge(pmdval) && is_vm_hugetlb_page(vma)) {
e66f17ff71772b Naoya Horiguchi 2015-02-11 563 page = follow_huge_pmd(mm, address, pmd, flags);
e66f17ff71772b Naoya Horiguchi 2015-02-11 564 if (page)
4bbd4c776a63a0 Kirill A. Shutemov 2014-06-04 565 return page;
e66f17ff71772b Naoya Horiguchi 2015-02-11 566 return no_page_table(vma, flags);
4bbd4c776a63a0 Kirill A. Shutemov 2014-06-04 567 }
688272809fcce5 Huang Ying 2018-06-07 568 if (is_hugepd(__hugepd(pmd_val(pmdval)))) {
4dc71451a2078e Aneesh Kumar K.V 2017-07-06 569 page = follow_huge_pd(vma, address,
688272809fcce5 Huang Ying 2018-06-07 570 __hugepd(pmd_val(pmdval)), flags,
4dc71451a2078e Aneesh Kumar K.V 2017-07-06 571 PMD_SHIFT);
4dc71451a2078e Aneesh Kumar K.V 2017-07-06 572 if (page)
4dc71451a2078e Aneesh Kumar K.V 2017-07-06 573 return page;
4dc71451a2078e Aneesh Kumar K.V 2017-07-06 574 return no_page_table(vma, flags);
4dc71451a2078e Aneesh Kumar K.V 2017-07-06 575 }
84c3fc4e9c563d Zi Yan 2017-09-08 576 retry:
688272809fcce5 Huang Ying 2018-06-07 577 if (!pmd_present(pmdval)) {
84c3fc4e9c563d Zi Yan 2017-09-08 578 if (likely(!(flags & FOLL_MIGRATION)))
84c3fc4e9c563d Zi Yan 2017-09-08 579 return no_page_table(vma, flags);
84c3fc4e9c563d Zi Yan 2017-09-08 580 VM_BUG_ON(thp_migration_supported() &&
688272809fcce5 Huang Ying 2018-06-07 581 !is_pmd_migration_entry(pmdval));
688272809fcce5 Huang Ying 2018-06-07 582 if (is_pmd_migration_entry(pmdval))
84c3fc4e9c563d Zi Yan 2017-09-08 583 pmd_migration_entry_wait(mm, pmd);
688272809fcce5 Huang Ying 2018-06-07 584 pmdval = READ_ONCE(*pmd);
688272809fcce5 Huang Ying 2018-06-07 585 /*
688272809fcce5 Huang Ying 2018-06-07 586 * MADV_DONTNEED may convert the pmd to null because
688272809fcce5 Huang Ying 2018-06-07 587 * mmap_sem is held in read mode
688272809fcce5 Huang Ying 2018-06-07 588 */
688272809fcce5 Huang Ying 2018-06-07 589 if (pmd_none(pmdval))
688272809fcce5 Huang Ying 2018-06-07 590 return no_page_table(vma, flags);
84c3fc4e9c563d Zi Yan 2017-09-08 591 goto retry;
84c3fc4e9c563d Zi Yan 2017-09-08 592 }
688272809fcce5 Huang Ying 2018-06-07 593 if (pmd_devmap(pmdval)) {
3565fce3a6597e Dan Williams 2016-01-15 594 ptl = pmd_lock(mm, pmd);
df06b37ffe5a44 Keith Busch 2018-10-26 595 page = follow_devmap_pmd(vma, address, pmd, flags, &ctx->pgmap);
3565fce3a6597e Dan Williams 2016-01-15 596 spin_unlock(ptl);
3565fce3a6597e Dan Williams 2016-01-15 597 if (page)
3565fce3a6597e Dan Williams 2016-01-15 598 return page;
3565fce3a6597e Dan Williams 2016-01-15 599 }
688272809fcce5 Huang Ying 2018-06-07 600 if (likely(!pmd_trans_huge(pmdval)))
df06b37ffe5a44 Keith Busch 2018-10-26 601 return follow_page_pte(vma, address, pmd, flags, &ctx->pgmap);
6742d293cbe01d Kirill A. Shutemov 2016-01-15 602
688272809fcce5 Huang Ying 2018-06-07 603 if ((flags & FOLL_NUMA) && pmd_protnone(pmdval))
db08f2030a173f Aneesh Kumar K.V 2017-02-24 604 return no_page_table(vma, flags);
db08f2030a173f Aneesh Kumar K.V 2017-02-24 605
84c3fc4e9c563d Zi Yan 2017-09-08 606 retry_locked:
69e68b4f03135d Kirill A. Shutemov 2014-06-04 607 ptl = pmd_lock(mm, pmd);
688272809fcce5 Huang Ying 2018-06-07 608 if (unlikely(pmd_none(*pmd))) {
688272809fcce5 Huang Ying 2018-06-07 609 spin_unlock(ptl);
688272809fcce5 Huang Ying 2018-06-07 610 return no_page_table(vma, flags);
688272809fcce5 Huang Ying 2018-06-07 611 }
84c3fc4e9c563d Zi Yan 2017-09-08 612 if (unlikely(!pmd_present(*pmd))) {
84c3fc4e9c563d Zi Yan 2017-09-08 613 spin_unlock(ptl);
84c3fc4e9c563d Zi Yan 2017-09-08 614 if (likely(!(flags & FOLL_MIGRATION)))
84c3fc4e9c563d Zi Yan 2017-09-08 615 return no_page_table(vma, flags);
84c3fc4e9c563d Zi Yan 2017-09-08 616 pmd_migration_entry_wait(mm, pmd);
84c3fc4e9c563d Zi Yan 2017-09-08 617 goto retry_locked;
84c3fc4e9c563d Zi Yan 2017-09-08 618 }
6742d293cbe01d Kirill A. Shutemov 2016-01-15 619 if (unlikely(!pmd_trans_huge(*pmd))) {
6742d293cbe01d Kirill A. Shutemov 2016-01-15 620 spin_unlock(ptl);
df06b37ffe5a44 Keith Busch 2018-10-26 621 return follow_page_pte(vma, address, pmd, flags, &ctx->pgmap);
6742d293cbe01d Kirill A. Shutemov 2016-01-15 622 }
bfe7b00de6d1e2 Song Liu 2019-09-23 623 if (flags & (FOLL_SPLIT | FOLL_SPLIT_PMD)) {
6742d293cbe01d Kirill A. Shutemov 2016-01-15 624 int ret;
6742d293cbe01d Kirill A. Shutemov 2016-01-15 625 page = pmd_page(*pmd);
6742d293cbe01d Kirill A. Shutemov 2016-01-15 626 if (is_huge_zero_page(page)) {
6742d293cbe01d Kirill A. Shutemov 2016-01-15 627 spin_unlock(ptl);
6742d293cbe01d Kirill A. Shutemov 2016-01-15 628 ret = 0;
78ddc534734190 Kirill A. Shutemov 2016-01-15 629 split_huge_pmd(vma, pmd, address);
337d9abf1cd1a5 Naoya Horiguchi 2016-07-26 630 if (pmd_trans_unstable(pmd))
337d9abf1cd1a5 Naoya Horiguchi 2016-07-26 631 ret = -EBUSY;
bfe7b00de6d1e2 Song Liu 2019-09-23 632 } else if (flags & FOLL_SPLIT) {
8fde12ca79aff9 Linus Torvalds 2019-04-11 633 if (unlikely(!try_get_page(page))) {
8fde12ca79aff9 Linus Torvalds 2019-04-11 634 spin_unlock(ptl);
8fde12ca79aff9 Linus Torvalds 2019-04-11 635 return ERR_PTR(-ENOMEM);
8fde12ca79aff9 Linus Torvalds 2019-04-11 636 }
69e68b4f03135d Kirill A. Shutemov 2014-06-04 637 spin_unlock(ptl);
6742d293cbe01d Kirill A. Shutemov 2016-01-15 638 lock_page(page);
6742d293cbe01d Kirill A. Shutemov 2016-01-15 639 ret = split_huge_page(page);
6742d293cbe01d Kirill A. Shutemov 2016-01-15 640 unlock_page(page);
6742d293cbe01d Kirill A. Shutemov 2016-01-15 641 put_page(page);
baa355fd331424 Kirill A. Shutemov 2016-07-26 642 if (pmd_none(*pmd))
baa355fd331424 Kirill A. Shutemov 2016-07-26 643 return no_page_table(vma, flags);
bfe7b00de6d1e2 Song Liu 2019-09-23 644 } else { /* flags & FOLL_SPLIT_PMD */
bfe7b00de6d1e2 Song Liu 2019-09-23 645 spin_unlock(ptl);
bfe7b00de6d1e2 Song Liu 2019-09-23 646 split_huge_pmd(vma, pmd, address);
bfe7b00de6d1e2 Song Liu 2019-09-23 647 ret = pte_alloc(mm, pmd) ? -ENOMEM : 0;
69e68b4f03135d Kirill A. Shutemov 2014-06-04 648 }
6742d293cbe01d Kirill A. Shutemov 2016-01-15 649
6742d293cbe01d Kirill A. Shutemov 2016-01-15 650 return ret ? ERR_PTR(ret) :
df06b37ffe5a44 Keith Busch 2018-10-26 651 follow_page_pte(vma, address, pmd, flags, &ctx->pgmap);
69e68b4f03135d Kirill A. Shutemov 2014-06-04 652 }
6742d293cbe01d Kirill A. Shutemov 2016-01-15 653 page = follow_trans_huge_pmd(vma, address, pmd, flags);
6742d293cbe01d Kirill A. Shutemov 2016-01-15 654 spin_unlock(ptl);
df06b37ffe5a44 Keith Busch 2018-10-26 655 ctx->page_mask = HPAGE_PMD_NR - 1;
6742d293cbe01d Kirill A. Shutemov 2016-01-15 656 return page;
69e68b4f03135d Kirill A. Shutemov 2014-06-04 657 }
4bbd4c776a63a0 Kirill A. Shutemov 2014-06-04 658
:::::: The code at line 559 was first introduced by commit
:::::: 688272809fcce5b17fcefd5892b59f3788efb144 mm, gup: prevent pmd checking race in follow_pmd_mask()
:::::: TO: Huang Ying <ying.huang@intel.com>
:::::: CC: Linus Torvalds <torvalds@linux-foundation.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 29272 bytes --]
next reply other threads:[~2021-02-01 2:28 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-01 2:28 kernel test robot [this message]
2021-02-01 2:28 ` mm/gup.c:559:18: sparse: sparse: cast to non-scalar kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202102011034.7qMSfevq-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild-all@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.