| # 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 VAR allocation and export/import. | |
| """ | |
| import mmap | |
| from pyverbs.providers.mlx5.mlx5dv import Mlx5VAR | |
| from pyverbs.providers.mlx5.mlx5_enums import MLX5DV_VAR_ALLOC_FLAG_TLP_ | |
| from tests.utils import skip_unsupported | |
| from tests.mlx5_base import Mlx5PyverbsAPITestCase | |
| @skip_unsupported | |
| def alloc_var(ctx, flags=0): | |
| """ | |
| Allocate VAR with given flags. | |
| :param ctx: Device context | |
| :param flags: VAR allocation flags (default: 0) | |
| :return: Mlx5VAR object | |
| """ | |
| return Mlx5VAR(ctx, flags=flags) | |
| class Mlx5VarTestCase(Mlx5PyverbsAPITestCase): | |
| def setUp(self): | |
| super().setUp() | |
| self.var = alloc_var(self.ctx) | |
| def tearDown(self): | |
| """Ensure VAR is always freed, even if test fails.""" | |
| if hasattr(self, 'var') and self.var: | |
| self.var.close() | |
| super().tearDown() | |
| def test_var_map_unmap(self): | |
| var_map = mmap.mmap(fileno=self.ctx.cmd_fd, | |
| length=self.var.length, | |
| offset=self.var.mmap_off) | |
| # There is no munmap method in mmap Python module, but by closing the | |
| # mmap instance the memory is unmapped. | |
| var_map.close() | |
| class Mlx5TlpVarTestCase(Mlx5PyverbsAPITestCase): | |
| """ | |
| Test cases for TLP VAR allocation and import functionality. | |
| """ | |
| def setUp(self): | |
| super().setUp() | |
| self.var = alloc_var(self.ctx, flags=MLX5DV_VAR_ALLOC_FLAG_TLP_) | |
| def tearDown(self): | |
| """Ensure TLP VAR is always freed, even if test fails.""" | |
| if hasattr(self, 'var') and self.var: | |
| self.var.close() | |
| super().tearDown() | |
| @skip_unsupported | |
| def test_tlp_var_alloc_and_mmap(self): | |
| """ | |
| Create TLP VAR and mmap it. | |
| """ | |
| var_map = mmap.mmap(fileno=self.ctx.cmd_fd, | |
| length=self.var.length, | |
| offset=self.var.mmap_off) | |
| var_map.close() | |
| @skip_unsupported | |
| def test_tlp_var_import(self): | |
| """ | |
| Export and import TLP VAR in the same process and mmap the imported VAR. | |
| """ | |
| data = self.var.export() | |
| imported_var = Mlx5VAR.import_var(self.ctx, data) | |
| var_map = mmap.mmap(fileno=self.ctx.cmd_fd, | |
| length=imported_var.length, | |
| offset=imported_var.mmap_off) | |
| var_map.close() | |
| imported_var.close() |