[RFC PATCH v8 0/2] mmap: safely enable support for new flags

Dan Williams dan.j.williams at intel.com
Fri Sep 8 19:35:02 UTC 2017


Changes since v7 [1]:
* rebase on the mid-merge-window state of the tree to pick up new mmap
  implementations.

* expand the mmap operation handler conversion beyond 'struct
  file_operations' to include, 'struct etnaviv_gem_ops', 'struct
  dma_buf_ops', 'struct drm_driver', 'struct fb_ops', and 'struct
  v4l2_file_operations'

* pass 'map_flags' through to all sub-handlers (Christoph)

* rework the mmap flag validation mechanism to the MAP_SHARED_VALIDATE
  scheme (Linus)

[1]: https://lwn.net/Articles/732886/

---

In order to safely add new mmap flags we want all mmap implementations
to both opt-in to the new flags they support and have the ability to
reject flags on a per-mmap-call basis. An alternative to all the churn
in patch1 is to add a new ->map_flags attribute to 'struct
vma_area_struct', but that bloats the runtime state everywhere for the
few mmap implementations that will care about new flags. Of course, this
also assumes that there are no general objections to the plans to
eventually add MAP_SYNC and/or MAP_DIRECT for DAX mappings [2].

The current request is to merge the final version of patch1 next week,
right before -rc1, i.e. before new ->mmap() handlers start landing in
-next. Given that the drm, media, and sound pull requests are already
merged only some small tweaks are expected from here on out. Patch2 is
included for review, but it can wait and go in with the new MAP_ flags.

Please holler if anything does not look right.

[2]: "Two more approaches to persistent-memory writes"
     https://lwn.net/Articles/731706/

---

Dan Williams (2):
      vfs: add flags parameter to all ->mmap() handlers
      mm: introduce MAP_SHARED_VALIDATE, a mechanism to safely define new mmap flags


 arch/alpha/include/uapi/asm/mman.h                 |    1 
 arch/arc/kernel/arc_hostlink.c                     |    3 +
 arch/mips/include/uapi/asm/mman.h                  |    1 
 arch/mips/kernel/vdso.c                            |    2 -
 arch/parisc/include/uapi/asm/mman.h                |    1 
 arch/powerpc/kernel/proc_powerpc.c                 |    3 +
 arch/powerpc/kvm/book3s_64_vio.c                   |    3 +
 arch/powerpc/platforms/cell/spufs/file.c           |   21 ++++++----
 arch/powerpc/platforms/powernv/memtrace.c          |    3 +
 arch/powerpc/platforms/powernv/opal-prd.c          |    3 +
 arch/tile/mm/elf.c                                 |    3 +
 arch/um/drivers/mmapper_kern.c                     |    3 +
 arch/xtensa/include/uapi/asm/mman.h                |    1 
 drivers/android/binder.c                           |    3 +
 drivers/auxdisplay/cfag12864bfb.c                  |    3 +
 drivers/auxdisplay/ht16k33.c                       |    3 +
 drivers/char/agp/frontend.c                        |    3 +
 drivers/char/bsr.c                                 |    3 +
 drivers/char/hpet.c                                |    6 ++-
 drivers/char/mbcs.c                                |    3 +
 drivers/char/mbcs.h                                |    3 +
 drivers/char/mem.c                                 |   11 +++--
 drivers/char/mspec.c                               |    9 +++-
 drivers/char/uv_mmtimer.c                          |    6 ++-
 drivers/dax/device.c                               |    3 +
 drivers/dma-buf/dma-buf.c                          |   11 +++--
 drivers/firewire/core-cdev.c                       |    3 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c            |    3 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h            |    3 +
 drivers/gpu/drm/amd/amdkfd/kfd_chardev.c           |    5 +-
 drivers/gpu/drm/armada/armada_gem.c                |    3 +
 drivers/gpu/drm/ast/ast_drv.h                      |    3 +
 drivers/gpu/drm/ast/ast_ttm.c                      |    3 +
 drivers/gpu/drm/bochs/bochs.h                      |    3 +
 drivers/gpu/drm/bochs/bochs_fbdev.c                |    2 -
 drivers/gpu/drm/bochs/bochs_mm.c                   |    3 +
 drivers/gpu/drm/cirrus/cirrus_drv.h                |    3 +
 drivers/gpu/drm/cirrus/cirrus_ttm.c                |    3 +
 drivers/gpu/drm/drm_fb_cma_helper.c                |    8 ++--
 drivers/gpu/drm/drm_gem.c                          |    3 +
 drivers/gpu/drm/drm_gem_cma_helper.c               |    8 ++--
 drivers/gpu/drm/drm_prime.c                        |    5 +-
 drivers/gpu/drm/drm_vm.c                           |    3 +
 drivers/gpu/drm/etnaviv/etnaviv_drv.h              |    6 ++-
 drivers/gpu/drm/etnaviv/etnaviv_gem.c              |   11 +++--
 drivers/gpu/drm/etnaviv/etnaviv_gem.h              |    3 +
 drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c        |    9 ++--
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c          |    2 -
 drivers/gpu/drm/exynos/exynos_drm_gem.c            |   10 +++--
 drivers/gpu/drm/exynos/exynos_drm_gem.h            |    6 ++-
 drivers/gpu/drm/gma500/framebuffer.c               |    3 +
 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h    |    3 +
 drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c        |    3 +
 drivers/gpu/drm/i810/i810_dma.c                    |    3 +
 drivers/gpu/drm/i915/i915_gem_dmabuf.c             |    6 ++-
 drivers/gpu/drm/i915/selftests/mock_dmabuf.c       |    4 +-
 drivers/gpu/drm/mediatek/mtk_drm_gem.c             |    8 ++--
 drivers/gpu/drm/mediatek/mtk_drm_gem.h             |    5 +-
 drivers/gpu/drm/mgag200/mgag200_drv.h              |    3 +
 drivers/gpu/drm/mgag200/mgag200_ttm.c              |    3 +
 drivers/gpu/drm/msm/msm_drv.h                      |    6 ++-
 drivers/gpu/drm/msm/msm_fbdev.c                    |    6 ++-
 drivers/gpu/drm/msm/msm_gem.c                      |    5 +-
 drivers/gpu/drm/msm/msm_gem_prime.c                |    3 +
 drivers/gpu/drm/nouveau/nouveau_ttm.c              |    5 +-
 drivers/gpu/drm/nouveau/nouveau_ttm.h              |    2 -
 drivers/gpu/drm/omapdrm/omap_drv.h                 |    3 +
 drivers/gpu/drm/omapdrm/omap_gem.c                 |    5 +-
 drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c          |    2 -
 drivers/gpu/drm/qxl/qxl_drv.h                      |    6 ++-
 drivers/gpu/drm/qxl/qxl_prime.c                    |    2 -
 drivers/gpu/drm/qxl/qxl_ttm.c                      |    3 +
 drivers/gpu/drm/radeon/radeon_drv.c                |    3 +
 drivers/gpu/drm/radeon/radeon_ttm.c                |    3 +
 drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c      |    5 +-
 drivers/gpu/drm/rockchip/rockchip_drm_gem.c        |    7 ++-
 drivers/gpu/drm/rockchip/rockchip_drm_gem.h        |    5 +-
 drivers/gpu/drm/tegra/gem.c                        |    9 +++-
 drivers/gpu/drm/tegra/gem.h                        |    3 +
 drivers/gpu/drm/udl/udl_dmabuf.c                   |    3 +
 drivers/gpu/drm/udl/udl_drv.h                      |    3 +
 drivers/gpu/drm/udl/udl_fb.c                       |    3 +
 drivers/gpu/drm/udl/udl_gem.c                      |    5 +-
 drivers/gpu/drm/vc4/vc4_bo.c                       |   10 +++--
 drivers/gpu/drm/vc4/vc4_drv.h                      |    6 ++-
 drivers/gpu/drm/vgem/vgem_drv.c                    |   10 +++--
 drivers/gpu/drm/virtio/virtgpu_drv.h               |    6 ++-
 drivers/gpu/drm/virtio/virtgpu_prime.c             |    2 -
 drivers/gpu/drm/virtio/virtgpu_ttm.c               |    3 +
 drivers/gpu/drm/vmwgfx/vmwgfx_drv.h                |    3 +
 drivers/gpu/drm/vmwgfx/vmwgfx_prime.c              |    3 +
 drivers/gpu/drm/vmwgfx/vmwgfx_ttm_glue.c           |    3 +
 drivers/hsi/clients/cmt_speech.c                   |    3 +
 drivers/hwtracing/intel_th/msu.c                   |    3 +
 drivers/hwtracing/stm/core.c                       |    3 +
 drivers/infiniband/core/uverbs_main.c              |    3 +
 drivers/infiniband/hw/hfi1/file_ops.c              |    6 ++-
 drivers/infiniband/hw/qib/qib_file_ops.c           |    5 +-
 drivers/media/common/saa7146/saa7146_fops.c        |    3 +
 drivers/media/pci/bt8xx/bttv-driver.c              |    3 +
 drivers/media/pci/cx18/cx18-fileops.c              |    3 +
 drivers/media/pci/cx18/cx18-fileops.h              |    3 +
 drivers/media/pci/meye/meye.c                      |    3 +
 drivers/media/pci/zoran/zoran_driver.c             |    2 -
 drivers/media/platform/davinci/vpfe_capture.c      |    3 +
 drivers/media/platform/exynos-gsc/gsc-m2m.c        |    3 +
 drivers/media/platform/fsl-viu.c                   |    3 +
 drivers/media/platform/m2m-deinterlace.c           |    3 +
 drivers/media/platform/mx2_emmaprp.c               |    3 +
 drivers/media/platform/omap/omap_vout.c            |    3 +
 drivers/media/platform/omap3isp/ispvideo.c         |    3 +
 drivers/media/platform/s3c-camif/camif-capture.c   |    3 +
 drivers/media/platform/s5p-mfc/s5p_mfc.c           |    3 +
 drivers/media/platform/sh_veu.c                    |    3 +
 drivers/media/platform/soc_camera/soc_camera.c     |    3 +
 drivers/media/platform/via-camera.c                |    3 +
 drivers/media/usb/cpia2/cpia2_v4l.c                |    3 +
 drivers/media/usb/cx231xx/cx231xx-417.c            |    3 +
 drivers/media/usb/cx231xx/cx231xx-video.c          |    3 +
 drivers/media/usb/gspca/gspca.c                    |    3 +
 drivers/media/usb/stkwebcam/stk-webcam.c           |    3 +
 drivers/media/usb/tm6000/tm6000-video.c            |    3 +
 drivers/media/usb/usbvision/usbvision-video.c      |    3 +
 drivers/media/usb/uvc/uvc_v4l2.c                   |    3 +
 drivers/media/usb/zr364xx/zr364xx.c                |    3 +
 drivers/media/v4l2-core/v4l2-dev.c                 |    5 +-
 drivers/media/v4l2-core/v4l2-mem2mem.c             |    3 +
 drivers/media/v4l2-core/videobuf2-dma-contig.c     |    2 -
 drivers/media/v4l2-core/videobuf2-dma-sg.c         |    2 -
 drivers/media/v4l2-core/videobuf2-v4l2.c           |    3 +
 drivers/media/v4l2-core/videobuf2-vmalloc.c        |    2 -
 drivers/misc/aspeed-lpc-ctrl.c                     |    3 +
 drivers/misc/cxl/api.c                             |    5 +-
 drivers/misc/cxl/cxl.h                             |    3 +
 drivers/misc/cxl/file.c                            |    3 +
 drivers/misc/genwqe/card_dev.c                     |    3 +
 drivers/misc/mic/scif/scif_fd.c                    |    3 +
 drivers/misc/mic/vop/vop_vringh.c                  |    3 +
 drivers/misc/sgi-gru/grufile.c                     |    3 +
 drivers/mtd/mtdchar.c                              |    3 +
 drivers/pci/proc.c                                 |    3 +
 drivers/rapidio/devices/rio_mport_cdev.c           |    3 +
 drivers/sbus/char/flash.c                          |    3 +
 drivers/sbus/char/jsflash.c                        |    3 +
 drivers/scsi/cxlflash/superpipe.c                  |    5 +-
 drivers/scsi/sg.c                                  |    3 +
 drivers/staging/android/ashmem.c                   |    3 +
 drivers/staging/android/ion/ion.c                  |    3 +
 drivers/staging/comedi/comedi_fops.c               |    3 +
 .../staging/lustre/lustre/llite/llite_internal.h   |    3 +
 drivers/staging/lustre/lustre/llite/llite_mmap.c   |    5 +-
 .../media/atomisp/pci/atomisp2/atomisp_fops.c      |    6 ++-
 drivers/staging/media/davinci_vpfe/vpfe_video.c    |    3 +
 drivers/staging/media/omap4iss/iss_video.c         |    3 +
 drivers/staging/vboxvideo/vbox_drv.h               |    5 +-
 drivers/staging/vboxvideo/vbox_prime.c             |    3 +
 drivers/staging/vboxvideo/vbox_ttm.c               |    3 +
 drivers/staging/vme/devices/vme_user.c             |    3 +
 drivers/tee/tee_shm.c                              |    3 +
 drivers/uio/uio.c                                  |    3 +
 drivers/usb/core/devio.c                           |    3 +
 drivers/usb/gadget/function/uvc_v4l2.c             |    3 +
 drivers/usb/mon/mon_bin.c                          |    3 +
 drivers/vfio/vfio.c                                |    7 ++-
 drivers/video/fbdev/68328fb.c                      |    6 ++-
 drivers/video/fbdev/amba-clcd.c                    |    2 -
 drivers/video/fbdev/aty/atyfb_base.c               |    6 ++-
 drivers/video/fbdev/au1100fb.c                     |    3 +
 drivers/video/fbdev/au1200fb.c                     |    3 +
 drivers/video/fbdev/bw2.c                          |    5 +-
 drivers/video/fbdev/cg14.c                         |    5 +-
 drivers/video/fbdev/cg3.c                          |    5 +-
 drivers/video/fbdev/cg6.c                          |    5 +-
 drivers/video/fbdev/controlfb.c                    |    4 +-
 drivers/video/fbdev/core/fb_defio.c                |    3 +
 drivers/video/fbdev/core/fbmem.c                   |    5 +-
 drivers/video/fbdev/ep93xx-fb.c                    |    3 +
 drivers/video/fbdev/fb-puv3.c                      |    2 -
 drivers/video/fbdev/ffb.c                          |    5 +-
 drivers/video/fbdev/gbefb.c                        |    2 -
 drivers/video/fbdev/igafb.c                        |    2 -
 drivers/video/fbdev/leo.c                          |    5 +-
 drivers/video/fbdev/omap/omapfb_main.c             |    3 +
 drivers/video/fbdev/omap2/omapfb/omapfb-main.c     |    3 +
 drivers/video/fbdev/p9100.c                        |    6 ++-
 drivers/video/fbdev/ps3fb.c                        |    3 +
 drivers/video/fbdev/pxa3xx-gcu.c                   |    3 +
 drivers/video/fbdev/sa1100fb.c                     |    2 -
 drivers/video/fbdev/sh_mobile_lcdcfb.c             |    6 ++-
 drivers/video/fbdev/smscufx.c                      |    3 +
 drivers/video/fbdev/tcx.c                          |    5 +-
 drivers/video/fbdev/udlfb.c                        |    3 +
 drivers/video/fbdev/vermilion/vermilion.c          |    3 +
 drivers/video/fbdev/vfb.c                          |    4 +-
 drivers/xen/gntalloc.c                             |    3 +
 drivers/xen/gntdev.c                               |    3 +
 drivers/xen/privcmd.c                              |    3 +
 drivers/xen/xenbus/xenbus_dev_backend.c            |    3 +
 drivers/xen/xenfs/xenstored.c                      |    3 +
 fs/9p/vfs_file.c                                   |   10 +++--
 fs/aio.c                                           |    3 +
 fs/btrfs/file.c                                    |    4 +-
 fs/ceph/addr.c                                     |    3 +
 fs/ceph/super.h                                    |    3 +
 fs/cifs/cifsfs.h                                   |    6 ++-
 fs/cifs/file.c                                     |   10 +++--
 fs/coda/file.c                                     |    5 +-
 fs/ecryptfs/file.c                                 |    5 +-
 fs/ext2/file.c                                     |    5 +-
 fs/ext4/file.c                                     |    3 +
 fs/f2fs/file.c                                     |    3 +
 fs/fuse/file.c                                     |    8 ++--
 fs/gfs2/file.c                                     |    3 +
 fs/hugetlbfs/inode.c                               |    3 +
 fs/kernfs/file.c                                   |    3 +
 fs/ncpfs/mmap.c                                    |    3 +
 fs/ncpfs/ncp_fs.h                                  |    2 -
 fs/nfs/file.c                                      |    5 +-
 fs/nfs/internal.h                                  |    2 -
 fs/nilfs2/file.c                                   |    3 +
 fs/ocfs2/mmap.c                                    |    3 +
 fs/ocfs2/mmap.h                                    |    3 +
 fs/orangefs/file.c                                 |    5 +-
 fs/proc/inode.c                                    |    7 ++-
 fs/proc/vmcore.c                                   |    6 ++-
 fs/ramfs/file-nommu.c                              |    6 ++-
 fs/romfs/mmap-nommu.c                              |    3 +
 fs/ubifs/file.c                                    |    5 +-
 fs/xfs/xfs_file.c                                  |    2 -
 include/drm/drm_drv.h                              |    3 +
 include/drm/drm_gem.h                              |    3 +
 include/drm/drm_gem_cma_helper.h                   |    6 ++-
 include/drm/drm_legacy.h                           |    3 +
 include/linux/dma-buf.h                            |    5 +-
 include/linux/fb.h                                 |    6 ++-
 include/linux/fs.h                                 |   14 ++++--
 include/linux/mm.h                                 |    2 -
 include/linux/mman.h                               |   44 ++++++++++++++++++++
 include/media/v4l2-dev.h                           |    2 -
 include/media/v4l2-mem2mem.h                       |    3 +
 include/media/videobuf2-v4l2.h                     |    3 +
 include/misc/cxl.h                                 |    3 +
 include/uapi/asm-generic/mman-common.h             |    1 
 ipc/shm.c                                          |    5 +-
 kernel/events/core.c                               |    3 +
 kernel/kcov.c                                      |    3 +
 kernel/relay.c                                     |    3 +
 mm/filemap.c                                       |   15 +++++--
 mm/mmap.c                                          |   14 +++++-
 mm/nommu.c                                         |    4 +-
 mm/shmem.c                                         |    3 +
 net/socket.c                                       |    6 ++-
 security/selinux/selinuxfs.c                       |    6 ++-
 sound/core/compress_offload.c                      |    3 +
 sound/core/hwdep.c                                 |    3 +
 sound/core/info.c                                  |    3 +
 sound/core/init.c                                  |    3 +
 sound/core/oss/pcm_oss.c                           |    3 +
 sound/core/pcm_native.c                            |    3 +
 sound/oss/soundcard.c                              |    3 +
 sound/oss/swarm_cs4297a.c                          |    3 +
 tools/include/uapi/asm-generic/mman-common.h       |    1 
 virt/kvm/kvm_main.c                                |    3 +
 263 files changed, 720 insertions(+), 374 deletions(-)


More information about the dri-devel mailing list