diff mbox series

[rdma-core,2/4] pyverbs/mlx5: Add support for driver-specific context

Message ID 20191024060027.8696-3-noaos@mellanox.com (mailing list archive)
State Not Applicable
Headers show
Series pyverbs: Introducing mlx5 DV support | expand

Commit Message

Noa Osherovich Oct. 24, 2019, 6 a.m. UTC
Allow users to open a device using mlx5dv_open_device. For this, two
new classes are introduced:
- Mlx5Context which inherits from Context.
- Mlx5DVContextAttr, which represents mlx5dv_context_attr struct,
  used by users to define driver-specific options for the device
  opening.

Signed-off-by: Noa Osherovich <noaos@mellanox.com>
---
 pyverbs/providers/__init__.pxd      |  0
 pyverbs/providers/__init__.py       |  0
 pyverbs/providers/mlx5/__init__.pxd |  0
 pyverbs/providers/mlx5/__init__.py  |  0
 pyverbs/providers/mlx5/libmlx5.pxd  | 17 +++++++++
 pyverbs/providers/mlx5/mlx5dv.pxd   | 14 +++++++
 pyverbs/providers/mlx5/mlx5dv.pyx   | 57 +++++++++++++++++++++++++++++
 7 files changed, 88 insertions(+)
 create mode 100644 pyverbs/providers/__init__.pxd
 create mode 100644 pyverbs/providers/__init__.py
 create mode 100644 pyverbs/providers/mlx5/__init__.pxd
 create mode 100644 pyverbs/providers/mlx5/__init__.py
 create mode 100644 pyverbs/providers/mlx5/libmlx5.pxd
 create mode 100644 pyverbs/providers/mlx5/mlx5dv.pxd
 create mode 100644 pyverbs/providers/mlx5/mlx5dv.pyx
diff mbox series

Patch

diff --git a/pyverbs/providers/__init__.pxd b/pyverbs/providers/__init__.pxd
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/pyverbs/providers/__init__.py b/pyverbs/providers/__init__.py
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/pyverbs/providers/mlx5/__init__.pxd b/pyverbs/providers/mlx5/__init__.pxd
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/pyverbs/providers/mlx5/__init__.py b/pyverbs/providers/mlx5/__init__.py
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/pyverbs/providers/mlx5/libmlx5.pxd b/pyverbs/providers/mlx5/libmlx5.pxd
new file mode 100644
index 000000000000..54d91e288590
--- /dev/null
+++ b/pyverbs/providers/mlx5/libmlx5.pxd
@@ -0,0 +1,17 @@ 
+# SPDX-License-Identifier: (GPL-2.0 OR Linux-OpenIB)
+# Copyright (c) 2019 Mellanox Technologies, Inc. All rights reserved. See COPYING file
+
+from libcpp cimport bool
+
+cimport pyverbs.libibverbs as v
+
+
+cdef extern from 'infiniband/mlx5dv.h':
+
+    cdef struct mlx5dv_context_attr:
+        unsigned int    flags
+        unsigned long   comp_mask
+
+    bool mlx5dv_is_supported(v.ibv_device *device)
+    v.ibv_context* mlx5dv_open_device(v.ibv_device *device,
+                                      mlx5dv_context_attr *attr)
diff --git a/pyverbs/providers/mlx5/mlx5dv.pxd b/pyverbs/providers/mlx5/mlx5dv.pxd
new file mode 100644
index 000000000000..6ab94b6484b0
--- /dev/null
+++ b/pyverbs/providers/mlx5/mlx5dv.pxd
@@ -0,0 +1,14 @@ 
+# SPDX-License-Identifier: (GPL-2.0 OR Linux-OpenIB)
+# Copyright (c) 2019 Mellanox Technologies, Inc. All rights reserved. See COPYING file
+
+#cython: language_level=3
+
+cimport pyverbs.providers.mlx5.libmlx5 as dv
+from pyverbs.base cimport PyverbsObject
+from pyverbs.device cimport Context
+
+cdef class Mlx5Context(Context):
+    pass
+
+cdef class Mlx5DVContextAttr(PyverbsObject):
+    cdef dv.mlx5dv_context_attr attr
diff --git a/pyverbs/providers/mlx5/mlx5dv.pyx b/pyverbs/providers/mlx5/mlx5dv.pyx
new file mode 100644
index 000000000000..0c6b28be1d5a
--- /dev/null
+++ b/pyverbs/providers/mlx5/mlx5dv.pyx
@@ -0,0 +1,57 @@ 
+# SPDX-License-Identifier: (GPL-2.0 OR Linux-OpenIB)
+# Copyright (c) 2019 Mellanox Technologies, Inc. All rights reserved. See COPYING file
+
+from pyverbs.pyverbs_error import PyverbsUserError
+cimport pyverbs.providers.mlx5.libmlx5 as dv
+
+
+cdef class Mlx5DVContextAttr(PyverbsObject):
+    """
+    Represent mlx5dv_context_attr struct. This class is used to open an mlx5
+    device.
+    """
+    def __cinit__(self, flags=0, comp_mask=0):
+        self.attr.flags = flags
+        self.attr.comp_mask = comp_mask
+
+    def __str__(self):
+        print_format = '{:20}: {:<20}\n'
+        return print_format.format('flags', self.attr.flags) +\
+               print_format.format('comp_mask', self.attr.comp_mask)
+
+    @property
+    def flags(self):
+        return self.attr.flags
+    @flags.setter
+    def flags(self, val):
+        self.attr.flags = val
+
+    @property
+    def comp_mask(self):
+        return self.attr.comp_mask
+    @comp_mask.setter
+    def comp_mask(self, val):
+        self.attr.comp_mask = val
+
+
+cdef class Mlx5Context(Context):
+    """
+    Represent mlx5 context, which extends Context.
+    """
+    def __cinit__(self, **kwargs):
+        """
+        Open an mlx5 device using the given attributes
+        :param kwargs: Arguments:
+            * *name* (str)
+               The RDMA device's name (used by parent class)
+            * *attr* (Mlx5DVContextAttr)
+               mlx5-specific device attributes
+        :return: None
+        """
+        cdef Mlx5DVContextAttr attr
+        attr = kwargs.get('attr')
+        if not attr or not isinstance(attr, Mlx5DVContextAttr):
+            raise PyverbsUserError('Missing provider attributes')
+        if not dv.mlx5dv_is_supported(self.device):
+            raise PyverbsUserError('This is not an MLX5 device')
+        self.context = dv.mlx5dv_open_device(self.device, &attr.attr)