On Thu, Jun 27, 2019 at 06:25:37PM +0300, Gal Pressman wrote: > On 27/06/2019 16:58, Michal Kalderon wrote: > > Create a common API for adding entries to a xa_mmap. > > This API can be used by drivers that don't require special > > mapping for user mapped memory. > > > > The code was copied from the efa driver almost as is, just renamed > > function to be generic and not efa specific. > > I don't think we should force the mmap flags to be the same for all drivers.. > Take a look at mlx5 for example: > > enum mlx5_ib_mmap_cmd { > MLX5_IB_MMAP_REGULAR_PAGE = 0, > MLX5_IB_MMAP_GET_CONTIGUOUS_PAGES = 1, > MLX5_IB_MMAP_WC_PAGE = 2, > MLX5_IB_MMAP_NC_PAGE = 3, > /* 5 is chosen in order to be compatible with old versions of libmlx5 */ > MLX5_IB_MMAP_CORE_CLOCK = 5, > MLX5_IB_MMAP_ALLOC_WC = 6, > MLX5_IB_MMAP_CLOCK_INFO = 7, > MLX5_IB_MMAP_DEVICE_MEM = 8, > }; > > The flags taken from EFA aren't necessarily going to work for other drivers. > Maybe the flags bits should be opaque to ib_core and leave the actual mmap > callbacks in the drivers. Not sure how dealloc_ucontext is going to work with > opaque flags though? Yes, the driver will have to take care of masking the flags before lookup We should probably store the struct page * in the rdma_user_mmap_entry() and use that to key struct page behavior. Do you think we should go further and provide a generic mmap() that does the right thing? It would not be hard to provide a callback that computes the pgprot flags Jason