On Mon, Jan 17, 2022 at 04:48:24PM +0800, Cheng Xu wrote: > + entry = to_emmap(rdma_entry); > + > + switch (entry->mmap_flag) { > + case ERDMA_MMAP_IO_NC: > + /* map doorbell. */ > + vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); This should be pgprot_device() > + err = io_remap_pfn_range(vma, vma->vm_start, PFN_DOWN(entry->address), > + PAGE_SIZE, vma->vm_page_prot); > + break; > + default: > + pr_err("mmap failed, mmap_flag = %d\n", entry->mmap_flag); Audit this whole driver for prints: 1) Do not ever print on user spcae triggered paths, like this 2) Always use ibdev_dbg/err/etc > +void erdma_disassociate_ucontext(struct ib_ucontext *ibcontext) > +{ > +} Does the driver really fully support device disassociation, including support to recover from itin rdma-core? Don't define this function otherwise. Jason