tests: Cover DMA-buf fd export for ibv_buf Add buffer API checks for successful fd export on DMA-buf backed buffers and ENODATA on ordinary memory buffers. Signed-off-by: Jiri Pirko <jiri@nvidia.com>
diff --git a/tests/test_buf.py b/tests/test_buf.py index ec6cfe0..50c75b8 100644 --- a/tests/test_buf.py +++ b/tests/test_buf.py
@@ -6,6 +6,7 @@ """ import unittest import errno +import os import resource from pyverbs.pyverbs_error import PyverbsRDMAError @@ -199,6 +200,22 @@ ibv_access_flags.IBV_ACCESS_LOCAL_WRITE, offset=offset, via_reg_mr_ex=via_reg_mr_ex) + def test_buf_export_dmabuf_fd_plain_pd(self): + """Plain PD: no DMA-buf fd is available for ordinary memory.""" + buf = self.get_buf(self.get_pd(), PAGE_SIZE) + with self.assertRaises(PyverbsRDMAError) as cm: + buf.export_dmabuf_fd() + self.assertEqual(cm.exception.error_code, errno.ENODATA, + 'Non-DMA-buf backed buffers must report ENODATA') + + def test_buf_export_dmabuf_fd_on_bounce_device(self): + """DMA-bounce device: a buffer's DMA-buf fd is exported.""" + if not device_has_cc_dma_bounce(self.ctx): + raise unittest.SkipTest('Device does not report CC_DMA_BOUNCE') + buf = self.get_buf(self.get_pd(cc=True), PAGE_SIZE) + fd = buf.export_dmabuf_fd() + os.close(fd) + def check_multiple_mrs_one_buf(self, pd, via_reg_mr_ex=False): """Register two disjoint subranges of one buffer and access them.""" buf = self.get_buf(pd, 2 * PAGE_SIZE)