BUG_ON at nvme_setup_prp getting hit.
Hrishikesh Gokhale
hdgokhale at gmail.com
Tue Jan 7 10:04:35 EST 2014
Hi All,
Requesting for help in resolving the following:
Setup:
Running FIO tester tool on NVMe device driver (/block/nvme.c) with I/O
engine “libaio”. Using Odd block size like 17K, 129K, 257K, etc.
Distribution ‘Fedora 18’ (Kernel v3.6.10).
Observation:
I’ve observed intermittent hit on BUG_ON which is pointing to
nvme_setup_prps() function in nvme.c driver.
>>> CODE
static int nvme_setup_prps(...)
{
int dma_len = sg_dma_len(sg);
u64 dma_addr = sg_dma_address(sg);
int offset = offset_in_page(dma_addr);
...
dma_len -= PAGE_SIZE;
...
if (dma_len > 0)
continue;
BUG_ON(dma_len < 0);
}
<<< CODE
After adding prints , I found that this problem is reproduced on use
of PRP list.
Offset value in DMA page is changed (in nvme_setup_prps() function)
from the original offset value which was present while sg_set_page()
function was executed. The offset value of virtual address is found
different than the offset value of physical/DMA address.
Query:
Is it possible to avoid the ‘offset value change’ in DMA-able memory
(in nvme_setup_prps() function) to avoid BUG_ON()check? ”
Thanks & Regards,
Hrishikesh
More information about the Linux-nvme
mailing list