linux-api.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC PATCH v8 0/2] mmap: safely enable support for new flags
@ 2017-09-08 19:35 Dan Williams
       [not found] ` <150489930202.29460.5141541423730649272.stgit-p8uTFz9XbKj2zm6wflaqv1nYeNYlB/vhral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
  0 siblings, 1 reply; 9+ messages in thread
From: Dan Williams @ 2017-09-08 19:35 UTC (permalink / raw)
  To: torvalds
  Cc: Jan Kara, Arnd Bergmann, linux-nvdimm, David Airlie,
	Greg Kroah-Hartman, Takashi Iwai, dri-devel, linux-kernel,
	Mauro Carvalho Chehab, Julia Lawall, linux-mm, Andy Lutomirski,
	linux-api, Daniel Vetter, Andrew Morton, hch, linux-media

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(-)

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2017-09-11 17:21 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-09-08 19:35 [RFC PATCH v8 0/2] mmap: safely enable support for new flags Dan Williams
     [not found] ` <150489930202.29460.5141541423730649272.stgit-p8uTFz9XbKj2zm6wflaqv1nYeNYlB/vhral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-09-08 19:35   ` [RFC PATCH v8 1/2] vfs: add flags parameter to all ->mmap() handlers Dan Williams
2017-09-11  9:50     ` Jan Kara
2017-09-08 19:35   ` [RFC PATCH v8 2/2] mm: introduce MAP_SHARED_VALIDATE, a mechanism to safely define new mmap flags Dan Williams
     [not found]     ` <150489931339.29460.8760855724603300792.stgit-p8uTFz9XbKj2zm6wflaqv1nYeNYlB/vhral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-09-11  9:47       ` Jan Kara
     [not found]         ` <20170911094714.GD8503-4I4JzKEfoa/jFM9bn6wA6Q@public.gmane.org>
2017-09-11 11:10           ` Christoph Hellwig
     [not found]             ` <20170911111030.GA20127-jcswGhMUV9g@public.gmane.org>
2017-09-11 11:45               ` Jan Kara
2017-09-11 17:01             ` Dan Williams
2017-09-11 17:21           ` Dan Williams

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).