Zero Copy from PCIe

I am looking to find a way to copy data from PCIe I/O memory to user space without intermediate copy. I use ioremap_nocache to get kernel virtual address, then virt_to_phys to get physical address, then mmap/remap_pfn_range to get virtual address for copy_to_user.

But I am getting Unhandled fault: level 3 address size fault…

Can anyone give me advice ?