On Wed, Mar 18, 2020 at 12:03:23PM +0200, Leon Romanovsky wrote: > From: Yishai Hadas <yishaih@xxxxxxxxxxxx> > > Now that we have direct and reliable detection of WC support by the > system, use is broadly. The only case we have to worry about is when the > WC autodetector cannot run. > > For this fringe case generally assume that that WC is available, except > in the well defined case of no PAT support on x86 which is tested by > calling arch_can_pci_mmap_wc(). > > If WC is wrongly assumed to be available then it causes a small > performance hit on paths in userspace that are tuned to the assumption > that WC is available. There is no functional loss. > > It is very unlikely that any platforms exist that lack WC and also care > about the micro optimization of WC in the fringe case where > autodetection does not work. > > By removing the fairly bogus CONFIG tests this makes WC work broadly on > all arches and all platforms. > > Signed-off-by: Yishai Hadas <yishaih@xxxxxxxxxxxx> > Reviewed-by: Michael Guralnik <michaelgur@xxxxxxxxxxxx> > Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx> > --- > drivers/infiniband/hw/mlx5/main.c | 16 ++++------------ > drivers/infiniband/hw/mlx5/mem.c | 2 +- > 2 files changed, 5 insertions(+), 13 deletions(-) Applied to for-next, thanks > diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c > index 66cd417f5d09..05804e4ba292 100644 > --- a/drivers/infiniband/hw/mlx5/main.c > +++ b/drivers/infiniband/hw/mlx5/main.c > @@ -39,9 +39,6 @@ > #include <linux/dma-mapping.h> > #include <linux/slab.h> > #include <linux/bitmap.h> > -#if defined(CONFIG_X86) > -#include <asm/memtype.h> > -#endif > #include <linux/sched.h> > #include <linux/sched/mm.h> > #include <linux/sched/task.h> > @@ -2146,14 +2143,6 @@ static int uar_mmap(struct mlx5_ib_dev *dev, enum mlx5_ib_mmap_cmd cmd, > switch (cmd) { > case MLX5_IB_MMAP_WC_PAGE: > case MLX5_IB_MMAP_ALLOC_WC: > -/* Some architectures don't support WC memory */ > -#if defined(CONFIG_X86) > - if (!pat_enabled()) > - return -EPERM; > -#elif !(defined(CONFIG_PPC) || (defined(CONFIG_ARM) && defined(CONFIG_MMU))) > - return -EPERM; > -#endif > - /* fall through */ > case MLX5_IB_MMAP_REGULAR_PAGE: > /* For MLX5_IB_MMAP_REGULAR_PAGE do the best effort to get WC */ > prot = pgprot_writecombine(vma->vm_page_prot); > @@ -2299,9 +2288,12 @@ static int mlx5_ib_mmap(struct ib_ucontext *ibcontext, struct vm_area_struct *vm > command = get_command(vma->vm_pgoff); > switch (command) { > case MLX5_IB_MMAP_WC_PAGE: > + case MLX5_IB_MMAP_ALLOC_WC: > + if (!dev->wc_support) > + return -EPERM; > + /* fall through */ This is apparently supposed to be spelled as fallthrough; Now. I fixed it Jason