blob: d6f3ce87d002a59268d52355f21e86d3f627ac4d [file]
# SPDX-License-Identifier: (GPL-2.0 OR Linux-OpenIB)
# Copyright (c) 2019 Mellanox Technologies, Inc. All rights reserved. See COPYING file
"""
Test module for Mlx5 UAR allocation.
"""
import unittest
import errno
from pyverbs.pyverbs_error import PyverbsRDMAError
from pyverbs.providers.mlx5.mlx5dv import Mlx5UAR
from pyverbs.providers.mlx5.mlx5_enums import _MLX5DV_UAR_ALLOC_TYPE_BF, _MLX5DV_UAR_ALLOC_TYPE_NC
from tests.mlx5_base import Mlx5RDMATestCase
from tests.base import BaseResources
class Mlx5UarRes(BaseResources):
def __init__(self, dev_name, ib_port=None, gid_index=None):
super().__init__(dev_name, ib_port, gid_index)
self.uars = []
class Mlx5UarTestCase(Mlx5RDMATestCase):
def setUp(self):
super().setUp()
self.uar_res = Mlx5UarRes(self.dev_name)
def test_alloc_uar(self):
try:
for f in [_MLX5DV_UAR_ALLOC_TYPE_BF, _MLX5DV_UAR_ALLOC_TYPE_NC]:
self.uar_res.uars.append(Mlx5UAR(self.uar_res.ctx, f))
except PyverbsRDMAError as ex:
if ex.error_code == errno.EOPNOTSUPP or ex.error_code == errno.EPROTONOSUPPORT:
raise unittest.SkipTest(f'UAR allocation (with flag={f}) is not supported')
raise ex
finally:
for uar in self.uar_res.uars:
uar.close()
def test_uar_export_dmabuf_fd(self):
"""Test exporting a UAR as a dmabuf FD"""
try:
self.uar_res.uars.append(Mlx5UAR(self.uar_res.ctx, _MLX5DV_UAR_ALLOC_TYPE_NC))
dmabuf_fd = self.uar_res.uars[-1].export_dmabuf_fd()
self.assertGreater(dmabuf_fd, 0, 'Expected a valid dmabuf FD greater than 0')
except PyverbsRDMAError as ex:
if ex.error_code in [errno.EPROTONOSUPPORT, errno.EOPNOTSUPP]:
raise unittest.SkipTest('UAR dmabuf export is not supported')
raise ex
finally:
for uar in self.uar_res.uars:
uar.close()