I am battling a related problem as reported on https://bugs.dpdk.org/show_bug.cgi?id=183 and this patch seems relevant, so I applied this patch on 196a46fab6eeb3ce2039e3bcaca80f8ba43ffc8d
However, this patch does not work for me: with CONFIG_RTE_LIBRTE_MBUF_DEBUG enabled, kni_free_mbufs's invocation of rte_pktmbuf_free throws "bad mbuf pool" error. While all mbufs and segments in kni->rx_q now have physical addresses, the mbufs and segments placed back to kni->free_q still have (mis-)calculated virtual address. The pa2va function is not working properly. Consequently, userspace side is passing wrong pointer to rte_pktmbuf_free, so that application crashes with CONFIG_RTE_LIBRTE_MBUF_DEBUG enabled.