linux_dsm_epyc7002/drivers/infiniband/core
Jérôme Glisse 5d6527a784 mm/mmu_notifier: use structure for invalidate_range_start/end callback
Patch series "mmu notifier contextual informations", v2.

This patchset adds contextual information, why an invalidation is
happening, to mmu notifier callback.  This is necessary for user of mmu
notifier that wish to maintains their own data structure without having to
add new fields to struct vm_area_struct (vma).

For instance device can have they own page table that mirror the process
address space.  When a vma is unmap (munmap() syscall) the device driver
can free the device page table for the range.

Today we do not have any information on why a mmu notifier call back is
happening and thus device driver have to assume that it is always an
munmap().  This is inefficient at it means that it needs to re-allocate
device page table on next page fault and rebuild the whole device driver
data structure for the range.

Other use case beside munmap() also exist, for instance it is pointless
for device driver to invalidate the device page table when the
invalidation is for the soft dirtyness tracking.  Or device driver can
optimize away mprotect() that change the page table permission access for
the range.

This patchset enables all this optimizations for device drivers.  I do not
include any of those in this series but another patchset I am posting will
leverage this.

The patchset is pretty simple from a code point of view.  The first two
patches consolidate all mmu notifier arguments into a struct so that it is
easier to add/change arguments.  The last patch adds the contextual
information (munmap, protection, soft dirty, clear, ...).

This patch (of 3):

To avoid having to change many callback definition everytime we want to
add a parameter use a structure to group all parameters for the
mmu_notifier invalidate_range_start/end callback.  No functional changes
with this patch.

[akpm@linux-foundation.org: fix drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c kerneldoc]
Link: http://lkml.kernel.org/r/20181205053628.3210-2-jglisse@redhat.com
Signed-off-by: Jérôme Glisse <jglisse@redhat.com>
Acked-by: Jan Kara <jack@suse.cz>
Acked-by: Jason Gunthorpe <jgg@mellanox.com>	[infiniband]
Cc: Matthew Wilcox <mawilcox@microsoft.com>
Cc: Ross Zwisler <zwisler@kernel.org>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krcmar <rkrcmar@redhat.com>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Christian Koenig <christian.koenig@amd.com>
Cc: Felix Kuehling <felix.kuehling@amd.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-12-28 12:11:50 -08:00
..
addr.c RDMA/core: Annotate timeout as unsigned long 2018-10-16 13:34:01 -04:00
agent.c
agent.h
cache.c Merge branch 'for-rc' into rdma.git for-next 2018-10-16 00:01:02 -06:00
cgroup.c
cm_msgs.h IB/cm: Remove unused and erroneous msg sequence encoding 2018-07-09 11:39:28 -06:00
cm.c RDMA/cm: Respect returned status of cm_init_av_by_path 2018-10-16 08:29:24 -06:00
cma_configfs.c RDMA/core: Use dev_name instead of ibdev->name 2018-09-26 13:51:48 -06:00
cma_priv.h
cma.c RDMA/core: Annotate timeout as unsigned long 2018-10-16 13:34:01 -04:00
core_priv.h RDMA/core: Increase total number of RDMA ports across all devices 2018-10-16 14:36:20 -04:00
cq.c RDMA/restrack: Consolidate task name updates in one place 2018-10-05 16:07:39 -06:00
device.c RDMA/core: Refactor ib_register_device() function 2018-10-17 11:43:07 -04:00
fmr_pool.c RDMA/core: Use dev_name instead of ibdev->name 2018-09-26 13:51:48 -06:00
iwcm.c RDMA/core: Use dev_name instead of ibdev->name 2018-09-26 13:51:48 -06:00
iwcm.h
iwpm_msg.c
iwpm_util.c treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
iwpm_util.h
mad_priv.h RDMA/core: Annotate timeout as unsigned long 2018-10-16 13:34:01 -04:00
mad_rmpp.c
mad_rmpp.h
mad.c RDMA/core: Annotate timeout as unsigned long 2018-10-16 13:34:01 -04:00
Makefile IB/uverbs: Remove struct uverbs_root_spec and all supporting code 2018-08-13 09:17:19 -06:00
mr_pool.c
multicast.c IB: Make ib_init_ah_from_mcmember set sgid_attr 2018-06-25 14:19:56 -06:00
netlink.c RDMA/netlink: Simplify netlink listener existence check 2018-10-03 16:06:07 -06:00
nldev.c RDMA/nldev: Allow IB device rename through RDMA netlink 2018-10-16 13:37:16 -04:00
opa_smi.h
packer.c
rdma_core.c RDMA/uverbs: Get rid of ucontext->tgid 2018-09-21 11:58:36 -04:00
rdma_core.h RDMA/ucontext: Add a core API for mmaping driver IO memory 2018-09-20 16:19:30 -04:00
restrack.c RDMA/restrack: Protect from reentry to resource return path 2018-10-16 08:24:36 -06:00
roce_gid_mgmt.c IB/core: Fix oops in netdev_next_upper_dev_rcu() 2018-12-12 12:14:49 -05:00
rw.c IB/core: Ensure we map P2P memory correctly in rdma_rw_ctx_[init|destroy]() 2018-10-17 12:18:20 -05:00
sa_query.c RDMA/core: Annotate timeout as unsigned long 2018-10-16 13:34:01 -04:00
sa.h RDMA/core: Annotate timeout as unsigned long 2018-10-16 13:34:01 -04:00
security.c RDMA/core: Use dev_name instead of ibdev->name 2018-09-26 13:51:48 -06:00
smi.c
smi.h
sysfs.c RDMA/core: Fix comment for hw stats init for port == 0 2018-10-17 11:43:07 -04:00
ucm.c IB/ucm: Fix Spectre v1 vulnerability 2018-10-16 11:32:40 -04:00
ucma.c RDMA/ucma: Fix Spectre v1 vulnerability 2018-10-16 12:47:40 -04:00
ud_header.c
umem_odp.c mm/mmu_notifier: use structure for invalidate_range_start/end callback 2018-12-28 12:11:50 -08:00
umem.c RDMA/core: Acquire and release mmap_sem on page range 2018-09-27 12:40:20 -06:00
user_mad.c RDMA/umad: Use kernel API to allocate umad indexes 2018-10-16 14:36:21 -04:00
uverbs_cmd.c Merge branch 'for-rc' into rdma.git for-next 2018-10-16 00:01:02 -06:00
uverbs_ioctl.c RDMA/uverbs: Fix RCU annotation for radix slot deference 2018-10-03 16:01:40 -06:00
uverbs_main.c RDMA/uverbs: Use kernel API to allocate uverbs indexes 2018-10-16 14:36:21 -04:00
uverbs_marshall.c IB/cm: Replace members of sa_path_rec with 'struct sgid_attr *' 2018-06-25 14:19:57 -06:00
uverbs_std_types_counters.c IB/uverbs: Use uverbs_alloc for allocations 2018-08-13 09:16:13 -06:00
uverbs_std_types_cq.c IB/uverbs: Do not pass struct ib_device to the ioctl methods 2018-08-01 14:55:48 -06:00
uverbs_std_types_dm.c IB/uverbs: Do not pass struct ib_device to the ioctl methods 2018-08-01 14:55:48 -06:00
uverbs_std_types_flow_action.c RDMA/uverbs: Add generic function to fill in flow action object 2018-09-05 15:23:59 -06:00
uverbs_std_types_mr.c IB/uverbs: Do not pass struct ib_device to the ioctl methods 2018-08-01 14:55:48 -06:00
uverbs_std_types.c IB/uverbs: Remove the ib_uverbs_attr pointer from each attr 2018-08-10 16:06:24 -06:00
uverbs_uapi.c Merge branch 'for-rc' into rdma.git for-next 2018-10-16 00:01:02 -06:00
uverbs.h RDMA/ucontext: Add a core API for mmaping driver IO memory 2018-09-20 16:19:30 -04:00
verbs.c First merge window pull request 2018-10-26 07:38:19 -07:00