17 Aug, 2022

1 commit

  • [ Upstream commit ed913b055a74b723976f8e885a3395162a0371e6 ]

    If make_device_exclusive_range() fails or returns pages marked for
    exclusive access less than required, remaining fields of pages will left
    uninitialized. So dmirror_atomic_map() will access those yet
    uninitialized fields of pages. To fix it, do dmirror_atomic_map() iff all
    pages are marked for exclusive access (we will break if mapped is less
    than required anyway) so we won't access those uninitialized fields of
    pages.

    Link: https://lkml.kernel.org/r/20220609130835.35110-1-linmiaohe@huawei.com
    Fixes: b659baea7546 ("mm: selftests for exclusive device memory")
    Signed-off-by: Miaohe Lin
    Cc: Jerome Glisse
    Cc: Alistair Popple
    Cc: Jason Gunthorpe
    Cc: Ralph Campbell
    Signed-off-by: Andrew Morton
    Signed-off-by: Sasha Levin

    Miaohe Lin
     

27 Jan, 2022

1 commit

  • commit 87c01d57fa23de82fff593a7d070933d08755801 upstream.

    hmm_range_fault() can be used instead of get_user_pages() for devices
    which allow faulting however unlike get_user_pages() it will return an
    error when used on a VM_MIXEDMAP range.

    To make hmm_range_fault() more closely match get_user_pages() remove
    this restriction. This requires dealing with the !ARCH_HAS_PTE_SPECIAL
    case in hmm_vma_handle_pte(). Rather than replicating the logic of
    vm_normal_page() call it directly and do a check for the zero pfn
    similar to what get_user_pages() currently does.

    Also add a test to hmm selftest to verify functionality.

    Link: https://lkml.kernel.org/r/20211104012001.2555676-1-apopple@nvidia.com
    Fixes: da4c3c735ea4 ("mm/hmm/mirror: helper to snapshot CPU page table")
    Signed-off-by: Alistair Popple
    Reviewed-by: Jason Gunthorpe
    Cc: Jerome Glisse
    Cc: John Hubbard
    Cc: Zi Yan
    Cc: Ralph Campbell
    Cc: Felix Kuehling
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Alistair Popple
     

16 Jul, 2021

1 commit

  • The HMM selftests use atomic_check_access() to check atomic access to a
    page has been revoked. It doesn't matter if the page mapping has been
    removed from the mirrored page tables as that also implies atomic access
    has been revoked. Therefore remove the unused page variable to fix this
    compiler warning:

    lib/test_hmm.c:631:16: warning: variable `page' set but not used [-Wunused-but-set-variable]

    Link: https://lkml.kernel.org/r/20210706025603.4059-1-apopple@nvidia.com
    Fixes: b659baea7546 ("mm: selftests for exclusive device memory")
    Signed-off-by: Alistair Popple
    Reported-by: Hulk Robot
    Reported-by: kernel test robot
    Reported-by: Yang Yingliang
    Acked-by: Souptick Joarder
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alistair Popple
     

02 Jul, 2021

2 commits

  • Adds some selftests for exclusive device memory.

    Link: https://lkml.kernel.org/r/20210616105937.23201-9-apopple@nvidia.com
    Signed-off-by: Alistair Popple
    Acked-by: Jason Gunthorpe
    Tested-by: Ralph Campbell
    Reviewed-by: Ralph Campbell
    Cc: Ben Skeggs
    Cc: Christoph Hellwig
    Cc: Hugh Dickins
    Cc: John Hubbard
    Cc: "Matthew Wilcox (Oracle)"
    Cc: Peter Xu
    Cc: Shakeel Butt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alistair Popple
     
  • MMU notifier ranges have a migrate_pgmap_owner field which is used by
    drivers to store a pointer. This is subsequently used by the driver
    callback to filter MMU_NOTIFY_MIGRATE events. Other notifier event types
    can also benefit from this filtering, so rename the 'migrate_pgmap_owner'
    field to 'owner' and create a new notifier initialisation function to
    initialise this field.

    Link: https://lkml.kernel.org/r/20210616105937.23201-6-apopple@nvidia.com
    Signed-off-by: Alistair Popple
    Suggested-by: Peter Xu
    Reviewed-by: Peter Xu
    Cc: Ben Skeggs
    Cc: Christoph Hellwig
    Cc: Hugh Dickins
    Cc: Jason Gunthorpe
    Cc: John Hubbard
    Cc: "Matthew Wilcox (Oracle)"
    Cc: Ralph Campbell
    Cc: Shakeel Butt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alistair Popple
     

30 Jun, 2021

1 commit

  • Use vma_lookup() to find the VMA at a specific address. As vma_lookup()
    will return NULL if the address is not within any VMA, the start address
    no longer needs to be validated.

    Link: https://lkml.kernel.org/r/20210521174745.2219620-18-Liam.Howlett@Oracle.com
    Signed-off-by: Liam R. Howlett
    Reviewed-by: Laurent Dufour
    Acked-by: David Hildenbrand
    Acked-by: Davidlohr Bueso
    Cc: Geert Uytterhoeven
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Liam Howlett
     

17 Oct, 2020

1 commit

  • This is supposed to return false on failure, not a negative error code.

    Fixes: 170e38548b81 ("mm/hmm/test: use after free in dmirror_allocate_chunk()")
    Signed-off-by: Dan Carpenter
    Signed-off-by: Andrew Morton
    Reviewed-by: Ralph Campbell
    Cc: Jerome Glisse
    Cc: Stephen Rothwell
    Cc: Jason Gunthorpe
    Cc: Dan Williams
    Link: https://lkml.kernel.org/r/20201010200812.GA1886610@mwanda
    Signed-off-by: Linus Torvalds

    Dan Carpenter
     

14 Oct, 2020

3 commits

  • The variable dmirror_zero_page is unused in the HMM self test driver which
    was probably intended to demonstrate how a driver could use
    migrate_vma_setup() to share a single read-only device private zero page
    similar to how the CPU does. However, this isn't needed for the self
    tests so remove it.

    Signed-off-by: Ralph Campbell
    Signed-off-by: Andrew Morton
    Cc: Jerome Glisse
    Link: https://lkml.kernel.org/r/20200914213801.16520-1-rcampbell@nvidia.com
    Signed-off-by: Linus Torvalds

    Ralph Campbell
     
  • In support of device-dax growing the ability to front physically
    dis-contiguous ranges of memory, update devm_memremap_pages() to track
    multiple ranges with a single reference counter and devm instance.

    Convert all [devm_]memremap_pages() users to specify the number of ranges
    they are mapping in their 'struct dev_pagemap' instance.

    Signed-off-by: Dan Williams
    Signed-off-by: Andrew Morton
    Cc: Paul Mackerras
    Cc: Michael Ellerman
    Cc: Benjamin Herrenschmidt
    Cc: Vishal Verma
    Cc: Vivek Goyal
    Cc: Dave Jiang
    Cc: Ben Skeggs
    Cc: David Airlie
    Cc: Daniel Vetter
    Cc: Ira Weiny
    Cc: Bjorn Helgaas
    Cc: Boris Ostrovsky
    Cc: Juergen Gross
    Cc: Stefano Stabellini
    Cc: "Jérôme Glisse"
    Cc: Ard Biesheuvel
    Cc: Ard Biesheuvel
    Cc: Borislav Petkov
    Cc: Brice Goglin
    Cc: Catalin Marinas
    Cc: Dave Hansen
    Cc: David Hildenbrand
    Cc: Greg Kroah-Hartman
    Cc: "H. Peter Anvin"
    Cc: Hulk Robot
    Cc: Ingo Molnar
    Cc: Jason Gunthorpe
    Cc: Jason Yan
    Cc: Jeff Moyer
    Cc: "Jérôme Glisse"
    Cc: Jia He
    Cc: Joao Martins
    Cc: Jonathan Cameron
    Cc: kernel test robot
    Cc: Mike Rapoport
    Cc: Pavel Tatashin
    Cc: Peter Zijlstra
    Cc: "Rafael J. Wysocki"
    Cc: Randy Dunlap
    Cc: Thomas Gleixner
    Cc: Tom Lendacky
    Cc: Wei Yang
    Cc: Will Deacon
    Link: https://lkml.kernel.org/r/159643103789.4062302.18426128170217903785.stgit@dwillia2-desk3.amr.corp.intel.com
    Link: https://lkml.kernel.org/r/160106116293.30709.13350662794915396198.stgit@dwillia2-desk3.amr.corp.intel.com
    Signed-off-by: Linus Torvalds

    Dan Williams
     
  • The 'struct resource' in 'struct dev_pagemap' is only used for holding
    resource span information. The other fields, 'name', 'flags', 'desc',
    'parent', 'sibling', and 'child' are all unused wasted space.

    This is in preparation for introducing a multi-range extension of
    devm_memremap_pages().

    The bulk of this change is unwinding all the places internal to libnvdimm
    that used 'struct resource' unnecessarily, and replacing instances of
    'struct dev_pagemap'.res with 'struct dev_pagemap'.range.

    P2PDMA had a minor usage of the resource flags field, but only to report
    failures with "%pR". That is replaced with an open coded print of the
    range.

    [dan.carpenter@oracle.com: mm/hmm/test: use after free in dmirror_allocate_chunk()]
    Link: https://lkml.kernel.org/r/20200926121402.GA7467@kadam

    Signed-off-by: Dan Williams
    Signed-off-by: Dan Carpenter
    Signed-off-by: Andrew Morton
    Reviewed-by: Boris Ostrovsky [xen]
    Cc: Paul Mackerras
    Cc: Michael Ellerman
    Cc: Benjamin Herrenschmidt
    Cc: Vishal Verma
    Cc: Vivek Goyal
    Cc: Dave Jiang
    Cc: Ben Skeggs
    Cc: David Airlie
    Cc: Daniel Vetter
    Cc: Ira Weiny
    Cc: Bjorn Helgaas
    Cc: Juergen Gross
    Cc: Stefano Stabellini
    Cc: "Jérôme Glisse"
    Cc: Andy Lutomirski
    Cc: Ard Biesheuvel
    Cc: Ard Biesheuvel
    Cc: Borislav Petkov
    Cc: Brice Goglin
    Cc: Catalin Marinas
    Cc: Dave Hansen
    Cc: David Hildenbrand
    Cc: Greg Kroah-Hartman
    Cc: "H. Peter Anvin"
    Cc: Hulk Robot
    Cc: Ingo Molnar
    Cc: Jason Gunthorpe
    Cc: Jason Yan
    Cc: Jeff Moyer
    Cc: Jia He
    Cc: Joao Martins
    Cc: Jonathan Cameron
    Cc: kernel test robot
    Cc: Mike Rapoport
    Cc: Pavel Tatashin
    Cc: Peter Zijlstra
    Cc: "Rafael J. Wysocki"
    Cc: Randy Dunlap
    Cc: Thomas Gleixner
    Cc: Tom Lendacky
    Cc: Wei Yang
    Cc: Will Deacon
    Link: https://lkml.kernel.org/r/159643103173.4062302.768998885691711532.stgit@dwillia2-desk3.amr.corp.intel.com
    Link: https://lkml.kernel.org/r/160106115761.30709.13539840236873663620.stgit@dwillia2-desk3.amr.corp.intel.com
    Signed-off-by: Linus Torvalds

    Dan Williams
     

29 Jul, 2020

2 commits

  • Use the new MMU_NOTIFY_MIGRATE event to skip MMU invalidations of device
    private memory and handle the invalidation in the driver as part of
    migrating device private memory.

    Link: https://lore.kernel.org/r/20200723223004.9586-6-rcampbell@nvidia.com
    Signed-off-by: Ralph Campbell
    Signed-off-by: Jason Gunthorpe

    Ralph Campbell
     
  • The src_owner field in struct migrate_vma is being used for two purposes,
    it acts as a selection filter for which types of pages are to be migrated
    and it identifies device private pages owned by the caller.

    Split this into separate parameters so the src_owner field can be used
    just to identify device private pages owned by the caller of
    migrate_vma_setup().

    Rename the src_owner field to pgmap_owner to reflect it is now used only
    to identify which device private pages to migrate.

    Link: https://lore.kernel.org/r/20200723223004.9586-3-rcampbell@nvidia.com
    Signed-off-by: Ralph Campbell
    Reviewed-by: Bharata B Rao
    Signed-off-by: Jason Gunthorpe

    Ralph Campbell
     

11 Jul, 2020

1 commit


26 Jun, 2020

1 commit

  • Coccinelle scripts report the following errors:

    lib/test_hmm.c:523:20-26: ERROR: reference preceded by free on line 521
    lib/test_hmm.c:524:21-27: ERROR: reference preceded by free on line 521
    lib/test_hmm.c:523:28-35: ERROR: devmem is NULL but dereferenced.
    lib/test_hmm.c:524:29-36: ERROR: devmem is NULL but dereferenced.

    Fix these by using the local variable 'res' instead of devmem.

    Link: http://lkml.kernel.org/r/c845c158-9c65-9665-0d0b-00342846dd07@infradead.org
    Signed-off-by: Randy Dunlap
    Reviewed-by: Ralph Campbell
    Cc: Jérôme Glisse
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Randy Dunlap
     

10 Jun, 2020

1 commit

  • Convert the last few remaining mmap_sem rwsem calls to use the new mmap
    locking API. These were missed by coccinelle for some reason (I think
    coccinelle does not support some of the preprocessor constructs in these
    files ?)

    [akpm@linux-foundation.org: convert linux-next leftovers]
    [akpm@linux-foundation.org: more linux-next leftovers]
    [akpm@linux-foundation.org: more linux-next leftovers]

    Signed-off-by: Michel Lespinasse
    Signed-off-by: Andrew Morton
    Reviewed-by: Daniel Jordan
    Reviewed-by: Laurent Dufour
    Reviewed-by: Vlastimil Babka
    Cc: Davidlohr Bueso
    Cc: David Rientjes
    Cc: Hugh Dickins
    Cc: Jason Gunthorpe
    Cc: Jerome Glisse
    Cc: John Hubbard
    Cc: Liam Howlett
    Cc: Matthew Wilcox
    Cc: Peter Zijlstra
    Cc: Ying Han
    Link: http://lkml.kernel.org/r/20200520052908.204642-6-walken@google.com
    Signed-off-by: Linus Torvalds

    Michel Lespinasse
     

20 May, 2020

1 commit

  • This driver is for testing device private memory migration and devices
    which use hmm_range_fault() to access system memory via device page tables.

    Link: https://lore.kernel.org/r/20200422195028.3684-2-rcampbell@nvidia.com
    Link: https://lore.kernel.org/r/20200516010424.2013-1-rcampbell@nvidia.com
    Signed-off-by: Ralph Campbell
    Signed-off-by: Jérôme Glisse
    Link: https://lore.kernel.org/r/20200509030225.14592-1-weiyongjun1@huawei.com
    Link: https://lore.kernel.org/r/20200509030234.14747-1-weiyongjun1@huawei.com
    Signed-off-by: Wei Yongjun
    Link: https://lore.kernel.org/r/20200511183704.GA225608@mwanda
    Signed-off-by: Dan Carpenter
    Signed-off-by: Jason Gunthorpe

    Ralph Campbell