Souptick Joarder
b57e622e6d
mm/hmm: convert to use vm_fault_t
...
Convert to use vm_fault_t type as return type for fault handler.
kbuild reported warning during testing of
*mm-create-the-new-vm_fault_t-type.patch* available in below link -
https://patchwork.kernel.org/patch/10752741/
kernel/memremap.c:46:34: warning: incorrect type in return expression
(different base types)
kernel/memremap.c:46:34: expected restricted vm_fault_t
kernel/memremap.c:46:34: got int
This patch has fixed the warnings and also hmm_devmem_fault() is
converted to return vm_fault_t to avoid further warnings.
[sfr@canb.auug.org.au: drm/nouveau/dmem: update for struct hmm_devmem_ops member change]
Link: http://lkml.kernel.org/r/20190220174407.753d94e5@canb.auug.org.au
Link: http://lkml.kernel.org/r/20190110145900.GA1317@jordon-HP-15-Notebook-PC
Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com >
Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au >
Reviewed-by: Jérôme Glisse <jglisse@redhat.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2019-03-12 10:04:00 -07:00
Dan Williams
063a7d1d36
mm/hmm: fix memremap.h, move dev_page_fault_t callback to hmm
...
The kbuild robot reported the following on a development branch that used
memremap.h in a new path:
In file included from arch/m68k/include/asm/pgtable_mm.h:148:0,
from arch/m68k/include/asm/pgtable.h:5,
from include/linux/memremap.h:7,
from drivers//dax/bus.c:3:
arch/m68k/include/asm/motorola_pgtable.h: In function 'pgd_offset':
>> arch/m68k/include/asm/motorola_pgtable.h:199:11: error: dereferencing pointer to incomplete type 'const struct mm_struct'
return mm->pgd + pgd_index(address);
^~
The ->page_fault() callback is specific to HMM. Move it to 'struct
hmm_devmem' where the unusual asm/pgtable.h dependency can be contained in
include/linux/hmm.h. Longer term refactoring this dependency out of HMM
is recommended, but in the meantime memremap.h remains generic.
Link: http://lkml.kernel.org/r/154534090899.3120190.6652620807617715272.stgit@dwillia2-desk3.amr.corp.intel.com
Fixes: 5042db43cc
("mm/ZONE_DEVICE: new type of ZONE_DEVICE memory...")
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
Reviewed-by: "Jérôme Glisse" <jglisse@redhat.com >
Cc: Logan Gunthorpe <logang@deltatee.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2018-12-28 12:11:52 -08:00
Dan Williams
58ef15b765
mm, hmm: use devm semantics for hmm_devmem_{add, remove}
...
devm semantics arrange for resources to be torn down when
device-driver-probe fails or when device-driver-release completes.
Similar to devm_memremap_pages() there is no need to support an explicit
remove operation when the users properly adhere to devm semantics.
Note that devm_kzalloc() automatically handles allocating node-local
memory.
Link: http://lkml.kernel.org/r/154275559545.76910.9186690723515469051.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
Reviewed-by: Christoph Hellwig <hch@lst.de >
Reviewed-by: Jérôme Glisse <jglisse@redhat.com >
Cc: "Jérôme Glisse" <jglisse@redhat.com >
Cc: Logan Gunthorpe <logang@deltatee.com >
Cc: Balbir Singh <bsingharora@gmail.com >
Cc: Michal Hocko <mhocko@suse.com >
Cc: <stable@vger.kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2018-12-28 12:11:47 -08:00
Jérôme Glisse
44532d4c59
mm/hmm: use a structure for update callback parameters
...
Use a structure to gather all the parameters for the update callback.
This make it easier when adding new parameters by avoiding having to
update all callback function signature.
The hmm_update structure is always associated with a mmu_notifier
callbacks so we are not planing on grouping multiple updates together.
Nor do we care about page size for the range as range will over fully
cover the page being invalidated (this is a mmu_notifier property).
Link: http://lkml.kernel.org/r/20181019160442.18723-6-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Cc: Ralph Campbell <rcampbell@nvidia.com >
Cc: John Hubbard <jhubbard@nvidia.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2018-10-31 08:54:12 -07:00
Jérôme Glisse
f813f21971
mm/hmm: fix utf8 ...
...
Patch series "HMM updates, improvements and fixes", v2
Few fixes that only affect HMM users. Improve the synchronization call
back so that we match was other mmu_notifier listener do and add proper
support to the new blockable flags in the process.
For curious folks here are branches to leverage HMM in various existing
device drivers:
https://cgit.freedesktop.org/~glisse/linux/log/?h=hmm-nouveau-v01
https://cgit.freedesktop.org/~glisse/linux/log/?h=hmm-radeon-v00
https://cgit.freedesktop.org/~glisse/linux/log/?h=hmm-intel-v00
More to come (amd gpu, Mellanox, ...)
I expect more of the preparatory work for nouveau will be merge in 4.20
(like we have been doing since 4.16) and i will wait until this patchset
is upstream before pushing the patches that actualy make use of HMM (to
avoid complex tree inter-dependency).
This patch (of 6):
Somehow utf=8 must have been broken.
Link: http://lkml.kernel.org/r/20181019160442.18723-2-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2018-10-31 08:54:11 -07:00
Matthew Wilcox
67fa166622
mm: remove references to vm_insert_pfn()
...
Documentation and comments.
Link: http://lkml.kernel.org/r/20180828145728.11873-7-willy@infradead.org
Signed-off-by: Matthew Wilcox <willy@infradead.org >
Reviewed-by: Andrew Morton <akpm@linux-foundation.org >
Cc: Nicolas Pitre <nicolas.pitre@linaro.org >
Cc: Souptick Joarder <jrdr.linux@gmail.com >
Cc: Thomas Gleixner <tglx@linutronix.de >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2018-10-26 16:25:20 -07:00
Matthew Wilcox
50e7fbc3bf
mm: add hmm_data to struct page
...
Make hmm_data an explicit member of the struct page union.
Link: http://lkml.kernel.org/r/20180518194519.3820-14-willy@infradead.org
Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com >
Acked-by: Vlastimil Babka <vbabka@suse.cz >
Cc: Christoph Lameter <cl@linux.com >
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Jérôme Glisse <jglisse@redhat.com >
Cc: "Kirill A . Shutemov" <kirill.shutemov@linux.intel.com >
Cc: Lai Jiangshan <jiangshanlai@gmail.com >
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com >
Cc: Pekka Enberg <penberg@kernel.org >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2018-06-07 17:34:37 -07:00
Jonathan Corbet
24844fd339
Merge branch 'mm-rst' into docs-next
...
Mike Rapoport says:
These patches convert files in Documentation/vm to ReST format, add an
initial index and link it to the top level documentation.
There are no contents changes in the documentation, except few spelling
fixes. The relatively large diffstat stems from the indentation and
paragraph wrapping changes.
I've tried to keep the formatting as consistent as possible, but I could
miss some places that needed markup and add some markup where it was not
necessary.
[jc: significant conflicts in vm/hmm.rst]
2018-04-16 14:25:08 -06:00
Mike Rapoport
ad56b738c5
docs/vm: rename documentation files to .rst
...
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com >
Signed-off-by: Jonathan Corbet <corbet@lwn.net >
2018-04-16 14:18:15 -06:00
Arnd Bergmann
9d8a463a70
mm/hmm: fix header file if/else/endif maze, again
...
The last fix was still wrong, as we need the inline dummy functions also
for the case that CONFIG_HMM is enabled but CONFIG_HMM_MIRROR is not:
kernel/fork.o: In function `__mmdrop':
fork.c:(.text+0x14f6): undefined reference to `hmm_mm_destroy'
This adds back the second copy of the dummy functions, hopefully
this time in the right place.
Link: http://lkml.kernel.org/r/20180404110236.804484-1-arnd@arndb.de
Fixes: 8900d06a277a ("mm/hmm: fix header file if/else/endif maze")
Signed-off-by: Arnd Bergmann <arnd@arndb.de >
Reviewed-by: Jérôme Glisse <jglisse@redhat.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2018-04-11 10:28:31 -07:00
Jérôme Glisse
f88a1e90c6
mm/hmm: use device driver encoding for HMM pfn
...
Users of hmm_vma_fault() and hmm_vma_get_pfns() provide a flags array and
pfn shift value allowing them to define their own encoding for HMM pfn
that are fill inside the pfns array of the hmm_range struct. With this
device driver can get pfn that match their own private encoding out of HMM
without having to do any conversion.
[rcampbell@nvidia.com: don't ignore specific pte fault flag in hmm_vma_fault()]
Link: http://lkml.kernel.org/r/20180326213009.2460-2-jglisse@redhat.com
[rcampbell@nvidia.com: clarify fault logic for device private memory]
Link: http://lkml.kernel.org/r/20180326213009.2460-3-jglisse@redhat.com
Link: http://lkml.kernel.org/r/20180323005527.758-16-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Signed-off-by: Ralph Campbell <rcampbell@nvidia.com >
Cc: Evgeny Baskakov <ebaskakov@nvidia.com >
Cc: Ralph Campbell <rcampbell@nvidia.com >
Cc: Mark Hairgrove <mhairgrove@nvidia.com >
Cc: John Hubbard <jhubbard@nvidia.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2018-04-11 10:28:31 -07:00
Jérôme Glisse
2aee09d8c1
mm/hmm: change hmm_vma_fault() to allow write fault on page basis
...
This changes hmm_vma_fault() to not take a global write fault flag for a
range but instead rely on caller to populate HMM pfns array with proper
fault flag ie HMM_PFN_VALID if driver want read fault for that address or
HMM_PFN_VALID and HMM_PFN_WRITE for write.
Moreover by setting HMM_PFN_DEVICE_PRIVATE the device driver can ask for
device private memory to be migrated back to system memory through page
fault.
This is more flexible API and it better reflects how device handles and
reports fault.
Link: http://lkml.kernel.org/r/20180323005527.758-15-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Cc: Evgeny Baskakov <ebaskakov@nvidia.com >
Cc: Ralph Campbell <rcampbell@nvidia.com >
Cc: Mark Hairgrove <mhairgrove@nvidia.com >
Cc: John Hubbard <jhubbard@nvidia.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2018-04-11 10:28:31 -07:00
Jérôme Glisse
b2744118a6
mm/hmm: rename HMM_PFN_DEVICE_UNADDRESSABLE to HMM_PFN_DEVICE_PRIVATE
...
Make naming consistent across code, DEVICE_PRIVATE is the name use outside
HMM code so use that one.
Link: http://lkml.kernel.org/r/20180323005527.758-12-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Reviewed-by: John Hubbard <jhubbard@nvidia.com >
Cc: Evgeny Baskakov <ebaskakov@nvidia.com >
Cc: Ralph Campbell <rcampbell@nvidia.com >
Cc: Mark Hairgrove <mhairgrove@nvidia.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2018-04-11 10:28:30 -07:00
Jérôme Glisse
5504ed2969
mm/hmm: do not differentiate between empty entry or missing directory
...
There is no point in differentiating between a range for which there is
not even a directory (and thus entries) and empty entry (pte_none() or
pmd_none() returns true).
Simply drop the distinction ie remove HMM_PFN_EMPTY flag and merge now
duplicate hmm_vma_walk_hole() and hmm_vma_walk_clear() functions.
Link: http://lkml.kernel.org/r/20180323005527.758-11-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Reviewed-by: John Hubbard <jhubbard@nvidia.com >
Cc: Evgeny Baskakov <ebaskakov@nvidia.com >
Cc: Ralph Campbell <rcampbell@nvidia.com >
Cc: Mark Hairgrove <mhairgrove@nvidia.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2018-04-11 10:28:30 -07:00
Jérôme Glisse
ff05c0c6bb
mm/hmm: use uint64_t for HMM pfn instead of defining hmm_pfn_t to ulong
...
All device driver we care about are using 64bits page table entry. In
order to match this and to avoid useless define convert all HMM pfn to
directly use uint64_t. It is a first step on the road to allow driver to
directly use pfn value return by HMM (saving memory and CPU cycles use for
conversion between the two).
Link: http://lkml.kernel.org/r/20180323005527.758-9-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Reviewed-by: John Hubbard <jhubbard@nvidia.com >
Cc: Evgeny Baskakov <ebaskakov@nvidia.com >
Cc: Ralph Campbell <rcampbell@nvidia.com >
Cc: Mark Hairgrove <mhairgrove@nvidia.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2018-04-11 10:28:30 -07:00
Jérôme Glisse
86586a41b8
mm/hmm: remove HMM_PFN_READ flag and ignore peculiar architecture
...
Only peculiar architecture allow write without read thus assume that any
valid pfn do allow for read. Note we do not care for write only because
it does make sense with thing like atomic compare and exchange or any
other operations that allow you to get the memory value through them.
Link: http://lkml.kernel.org/r/20180323005527.758-8-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Reviewed-by: John Hubbard <jhubbard@nvidia.com >
Cc: Evgeny Baskakov <ebaskakov@nvidia.com >
Cc: Ralph Campbell <rcampbell@nvidia.com >
Cc: Mark Hairgrove <mhairgrove@nvidia.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2018-04-11 10:28:30 -07:00
Jérôme Glisse
08232a4544
mm/hmm: use struct for hmm_vma_fault(), hmm_vma_get_pfns() parameters
...
Both hmm_vma_fault() and hmm_vma_get_pfns() were taking a hmm_range struct
as parameter and were initializing that struct with others of their
parameters. Have caller of those function do this as they are likely to
already do and only pass this struct to both function this shorten
function signature and make it easier in the future to add new parameters
by simply adding them to the structure.
Link: http://lkml.kernel.org/r/20180323005527.758-7-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Reviewed-by: John Hubbard <jhubbard@nvidia.com >
Cc: Evgeny Baskakov <ebaskakov@nvidia.com >
Cc: Ralph Campbell <rcampbell@nvidia.com >
Cc: Mark Hairgrove <mhairgrove@nvidia.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2018-04-11 10:28:30 -07:00
Ralph Campbell
e1401513c6
mm/hmm: HMM should have a callback before MM is destroyed
...
hmm_mirror_register() registers a callback for when the CPU pagetable is
modified. Normally, the device driver will call hmm_mirror_unregister()
when the process using the device is finished. However, if the process
exits uncleanly, the struct_mm can be destroyed with no warning to the
device driver.
Link: http://lkml.kernel.org/r/20180323005527.758-4-jglisse@redhat.com
Signed-off-by: Ralph Campbell <rcampbell@nvidia.com >
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Reviewed-by: John Hubbard <jhubbard@nvidia.com >
Cc: Evgeny Baskakov <ebaskakov@nvidia.com >
Cc: Mark Hairgrove <mhairgrove@nvidia.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2018-04-11 10:28:30 -07:00
Jérôme Glisse
b28b08de43
mm/hmm: fix header file if/else/endif maze
...
The #if/#else/#endif for IS_ENABLED(CONFIG_HMM) were wrong. Because of
this after multiple include there was multiple definition of both
hmm_mm_init() and hmm_mm_destroy() leading to build failure if HMM was
enabled (CONFIG_HMM set).
Link: http://lkml.kernel.org/r/20180323005527.758-3-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Acked-by: Balbir Singh <bsingharora@gmail.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Ralph Campbell <rcampbell@nvidia.com >
Cc: John Hubbard <jhubbard@nvidia.com >
Cc: Evgeny Baskakov <ebaskakov@nvidia.com >
Cc: <stable@vger.kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2018-04-11 10:28:30 -07:00
Ralph Campbell
0bea803e9e
mm/hmm: constify hmm_devmem_page_get_drvdata() parameter
...
Constify pointer parameter to avoid issue when use from code that only
has const struct page pointer to use in the first place.
Link: http://lkml.kernel.org/r/1506972774-10191-1-git-send-email-jglisse@redhat.com
Signed-off-by: Ralph Campbell <rcampbell@nvidia.com >
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2017-11-15 18:21:03 -08:00
Jérôme Glisse
de540a9763
mm/hmm: fix build when HMM is disabled
...
Combinatorial Kconfig is painfull. Withi this patch all below combination
build.
1)
2)
CONFIG_HMM_MIRROR=y
3)
CONFIG_DEVICE_PRIVATE=y
4)
CONFIG_DEVICE_PUBLIC=y
5)
CONFIG_HMM_MIRROR=y
CONFIG_DEVICE_PUBLIC=y
6)
CONFIG_HMM_MIRROR=y
CONFIG_DEVICE_PRIVATE=y
7)
CONFIG_DEVICE_PRIVATE=y
CONFIG_DEVICE_PUBLIC=y
8)
CONFIG_HMM_MIRROR=y
CONFIG_DEVICE_PRIVATE=y
CONFIG_DEVICE_PUBLIC=y
Link: http://lkml.kernel.org/r/20170826002149.20919-1-jglisse@redhat.com
Reported-by: Randy Dunlap <rdunlap@infradead.org >
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2017-09-08 18:26:46 -07:00
Jérôme Glisse
6b368cd4a4
mm/hmm: avoid bloating arch that do not make use of HMM
...
This moves all new code including new page migration helper behind kernel
Kconfig option so that there is no codee bloat for arch or user that do
not want to use HMM or any of its associated features.
arm allyesconfig (without all the patchset, then with and this patch):
text data bss dec hex filename
83721896 46511131 27582964 157815991 96814b7 ../without/vmlinux
83722364 46511131 27582964 157816459 968168b vmlinux
[jglisse@redhat.com: struct hmm is only use by HMM mirror functionality]
Link: http://lkml.kernel.org/r/20170825213133.27286-1-jglisse@redhat.com
[sfr@canb.auug.org.au: fix build (arm multi_v7_defconfig)]
Link: http://lkml.kernel.org/r/20170828181849.323ab81b@canb.auug.org.au
Link: http://lkml.kernel.org/r/20170818032858.7447-1-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au >
Cc: Dan Williams <dan.j.williams@intel.com >
Cc: Arnd Bergmann <arnd@arndb.de >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2017-09-08 18:26:46 -07:00
Jérôme Glisse
d3df0a4233
mm/hmm: add new helper to hotplug CDM memory region
...
Unlike unaddressable memory, coherent device memory has a real resource
associated with it on the system (as CPU can address it). Add a new
helper to hotplug such memory within the HMM framework.
Link: http://lkml.kernel.org/r/20170817000548.32038-20-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Reviewed-by: Balbir Singh <bsingharora@gmail.com >
Cc: Aneesh Kumar <aneesh.kumar@linux.vnet.ibm.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Dan Williams <dan.j.williams@intel.com >
Cc: David Nellans <dnellans@nvidia.com >
Cc: Evgeny Baskakov <ebaskakov@nvidia.com >
Cc: Johannes Weiner <hannes@cmpxchg.org >
Cc: John Hubbard <jhubbard@nvidia.com >
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com >
Cc: Mark Hairgrove <mhairgrove@nvidia.com >
Cc: Michal Hocko <mhocko@kernel.org >
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Ross Zwisler <ross.zwisler@linux.intel.com >
Cc: Sherry Cheung <SCheung@nvidia.com >
Cc: Subhash Gutti <sgutti@nvidia.com >
Cc: Vladimir Davydov <vdavydov.dev@gmail.com >
Cc: Bob Liu <liubo95@huawei.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2017-09-08 18:26:46 -07:00
Jérôme Glisse
df6ad69838
mm/device-public-memory: device memory cache coherent with CPU
...
Platform with advance system bus (like CAPI or CCIX) allow device memory
to be accessible from CPU in a cache coherent fashion. Add a new type of
ZONE_DEVICE to represent such memory. The use case are the same as for
the un-addressable device memory but without all the corners cases.
Link: http://lkml.kernel.org/r/20170817000548.32038-19-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Cc: Aneesh Kumar <aneesh.kumar@linux.vnet.ibm.com >
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Dan Williams <dan.j.williams@intel.com >
Cc: Ross Zwisler <ross.zwisler@linux.intel.com >
Cc: Balbir Singh <bsingharora@gmail.com >
Cc: David Nellans <dnellans@nvidia.com >
Cc: Evgeny Baskakov <ebaskakov@nvidia.com >
Cc: Johannes Weiner <hannes@cmpxchg.org >
Cc: John Hubbard <jhubbard@nvidia.com >
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com >
Cc: Mark Hairgrove <mhairgrove@nvidia.com >
Cc: Michal Hocko <mhocko@kernel.org >
Cc: Sherry Cheung <SCheung@nvidia.com >
Cc: Subhash Gutti <sgutti@nvidia.com >
Cc: Vladimir Davydov <vdavydov.dev@gmail.com >
Cc: Bob Liu <liubo95@huawei.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2017-09-08 18:26:46 -07:00
Jérôme Glisse
858b54dabf
mm/hmm/devmem: dummy HMM device for ZONE_DEVICE memory
...
This introduce a dummy HMM device class so device driver can use it to
create hmm_device for the sole purpose of registering device memory. It
is useful to device driver that want to manage multiple physical device
memory under same struct device umbrella.
Link: http://lkml.kernel.org/r/20170817000548.32038-13-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Signed-off-by: Evgeny Baskakov <ebaskakov@nvidia.com >
Signed-off-by: John Hubbard <jhubbard@nvidia.com >
Signed-off-by: Mark Hairgrove <mhairgrove@nvidia.com >
Signed-off-by: Sherry Cheung <SCheung@nvidia.com >
Signed-off-by: Subhash Gutti <sgutti@nvidia.com >
Cc: Aneesh Kumar <aneesh.kumar@linux.vnet.ibm.com >
Cc: Balbir Singh <bsingharora@gmail.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Dan Williams <dan.j.williams@intel.com >
Cc: David Nellans <dnellans@nvidia.com >
Cc: Johannes Weiner <hannes@cmpxchg.org >
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com >
Cc: Michal Hocko <mhocko@kernel.org >
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Ross Zwisler <ross.zwisler@linux.intel.com >
Cc: Vladimir Davydov <vdavydov.dev@gmail.com >
Cc: Bob Liu <liubo95@huawei.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2017-09-08 18:26:46 -07:00
Jérôme Glisse
4ef589dc9b
mm/hmm/devmem: device memory hotplug using ZONE_DEVICE
...
This introduce a simple struct and associated helpers for device driver to
use when hotpluging un-addressable device memory as ZONE_DEVICE. It will
find a unuse physical address range and trigger memory hotplug for it
which allocates and initialize struct page for the device memory.
Device driver should use this helper during device initialization to
hotplug the device memory. It should only need to remove the memory once
the device is going offline (shutdown or hotremove). There should not be
any userspace API to hotplug memory expect maybe for host device driver to
allow to add more memory to a guest device driver.
Device's memory is manage by the device driver and HMM only provides
helpers to that effect.
Link: http://lkml.kernel.org/r/20170817000548.32038-12-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Signed-off-by: Evgeny Baskakov <ebaskakov@nvidia.com >
Signed-off-by: John Hubbard <jhubbard@nvidia.com >
Signed-off-by: Mark Hairgrove <mhairgrove@nvidia.com >
Signed-off-by: Sherry Cheung <SCheung@nvidia.com >
Signed-off-by: Subhash Gutti <sgutti@nvidia.com >
Signed-off-by: Balbir Singh <bsingharora@gmail.com >
Cc: Aneesh Kumar <aneesh.kumar@linux.vnet.ibm.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Dan Williams <dan.j.williams@intel.com >
Cc: David Nellans <dnellans@nvidia.com >
Cc: Johannes Weiner <hannes@cmpxchg.org >
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com >
Cc: Michal Hocko <mhocko@kernel.org >
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Ross Zwisler <ross.zwisler@linux.intel.com >
Cc: Vladimir Davydov <vdavydov.dev@gmail.com >
Cc: Bob Liu <liubo95@huawei.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2017-09-08 18:26:46 -07:00
Jérôme Glisse
74eee180b9
mm/hmm/mirror: device page fault handler
...
This handles page fault on behalf of device driver, unlike
handle_mm_fault() it does not trigger migration back to system memory for
device memory.
Link: http://lkml.kernel.org/r/20170817000548.32038-6-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Signed-off-by: Evgeny Baskakov <ebaskakov@nvidia.com >
Signed-off-by: John Hubbard <jhubbard@nvidia.com >
Signed-off-by: Mark Hairgrove <mhairgrove@nvidia.com >
Signed-off-by: Sherry Cheung <SCheung@nvidia.com >
Signed-off-by: Subhash Gutti <sgutti@nvidia.com >
Cc: Aneesh Kumar <aneesh.kumar@linux.vnet.ibm.com >
Cc: Balbir Singh <bsingharora@gmail.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Dan Williams <dan.j.williams@intel.com >
Cc: David Nellans <dnellans@nvidia.com >
Cc: Johannes Weiner <hannes@cmpxchg.org >
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com >
Cc: Michal Hocko <mhocko@kernel.org >
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Ross Zwisler <ross.zwisler@linux.intel.com >
Cc: Vladimir Davydov <vdavydov.dev@gmail.com >
Cc: Bob Liu <liubo95@huawei.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2017-09-08 18:26:46 -07:00
Jérôme Glisse
da4c3c735e
mm/hmm/mirror: helper to snapshot CPU page table
...
This does not use existing page table walker because we want to share
same code for our page fault handler.
Link: http://lkml.kernel.org/r/20170817000548.32038-5-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Signed-off-by: Evgeny Baskakov <ebaskakov@nvidia.com >
Signed-off-by: John Hubbard <jhubbard@nvidia.com >
Signed-off-by: Mark Hairgrove <mhairgrove@nvidia.com >
Signed-off-by: Sherry Cheung <SCheung@nvidia.com >
Signed-off-by: Subhash Gutti <sgutti@nvidia.com >
Cc: Aneesh Kumar <aneesh.kumar@linux.vnet.ibm.com >
Cc: Balbir Singh <bsingharora@gmail.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Dan Williams <dan.j.williams@intel.com >
Cc: David Nellans <dnellans@nvidia.com >
Cc: Johannes Weiner <hannes@cmpxchg.org >
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com >
Cc: Michal Hocko <mhocko@kernel.org >
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Ross Zwisler <ross.zwisler@linux.intel.com >
Cc: Vladimir Davydov <vdavydov.dev@gmail.com >
Cc: Bob Liu <liubo95@huawei.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2017-09-08 18:26:46 -07:00
Jérôme Glisse
c0b124054f
mm/hmm/mirror: mirror process address space on device with HMM helpers
...
This is a heterogeneous memory management (HMM) process address space
mirroring. In a nutshell this provide an API to mirror process address
space on a device. This boils down to keeping CPU and device page table
synchronize (we assume that both device and CPU are cache coherent like
PCIe device can be).
This patch provide a simple API for device driver to achieve address space
mirroring thus avoiding each device driver to grow its own CPU page table
walker and its own CPU page table synchronization mechanism.
This is useful for NVidia GPU >= Pascal, Mellanox IB >= mlx5 and more
hardware in the future.
[jglisse@redhat.com: fix hmm for "mmu_notifier kill invalidate_page callback"]
Link: http://lkml.kernel.org/r/20170830231955.GD9445@redhat.com
Link: http://lkml.kernel.org/r/20170817000548.32038-4-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Signed-off-by: Evgeny Baskakov <ebaskakov@nvidia.com >
Signed-off-by: John Hubbard <jhubbard@nvidia.com >
Signed-off-by: Mark Hairgrove <mhairgrove@nvidia.com >
Signed-off-by: Sherry Cheung <SCheung@nvidia.com >
Signed-off-by: Subhash Gutti <sgutti@nvidia.com >
Cc: Aneesh Kumar <aneesh.kumar@linux.vnet.ibm.com >
Cc: Balbir Singh <bsingharora@gmail.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Dan Williams <dan.j.williams@intel.com >
Cc: David Nellans <dnellans@nvidia.com >
Cc: Johannes Weiner <hannes@cmpxchg.org >
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com >
Cc: Michal Hocko <mhocko@kernel.org >
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Ross Zwisler <ross.zwisler@linux.intel.com >
Cc: Vladimir Davydov <vdavydov.dev@gmail.com >
Cc: Bob Liu <liubo95@huawei.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2017-09-08 18:26:45 -07:00
Jérôme Glisse
133ff0eac9
mm/hmm: heterogeneous memory management (HMM for short)
...
HMM provides 3 separate types of functionality:
- Mirroring: synchronize CPU page table and device page table
- Device memory: allocating struct page for device memory
- Migration: migrating regular memory to device memory
This patch introduces some common helpers and definitions to all of
those 3 functionality.
Link: http://lkml.kernel.org/r/20170817000548.32038-3-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com >
Signed-off-by: Evgeny Baskakov <ebaskakov@nvidia.com >
Signed-off-by: John Hubbard <jhubbard@nvidia.com >
Signed-off-by: Mark Hairgrove <mhairgrove@nvidia.com >
Signed-off-by: Sherry Cheung <SCheung@nvidia.com >
Signed-off-by: Subhash Gutti <sgutti@nvidia.com >
Cc: Aneesh Kumar <aneesh.kumar@linux.vnet.ibm.com >
Cc: Balbir Singh <bsingharora@gmail.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Dan Williams <dan.j.williams@intel.com >
Cc: David Nellans <dnellans@nvidia.com >
Cc: Johannes Weiner <hannes@cmpxchg.org >
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com >
Cc: Michal Hocko <mhocko@kernel.org >
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Ross Zwisler <ross.zwisler@linux.intel.com >
Cc: Vladimir Davydov <vdavydov.dev@gmail.com >
Cc: Bob Liu <liubo95@huawei.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2017-09-08 18:26:45 -07:00