Thread (15 messages) flat view 15 messages, 3 authors, 2018-12-22

Re: [PATCH rdma-next 2/5] RDMA/core: Don't depend device ODP capabilities on kconfig option

From: Jason Gunthorpe <hidden>
Date: 2018-12-20 17:33:16
Also in: linux-rdma

On Thu, Dec 20, 2018 at 07:29:56PM +0200, Leon Romanovsky wrote:
On Thu, Dec 20, 2018 at 05:20:51PM +0000, Jason Gunthorpe wrote:
quoted
On Thu, Dec 20, 2018 at 11:23:15AM +0200, Leon Romanovsky wrote:
quoted
From: Leon Romanovsky <redacted>

Device capability bits are exposing what specific device supports from
HW perspective. Those bits are not dependent on kernel configurations
and RDMA/core should ensure that proper interfaces to users will be
disabled if CONFIG_INFINIBAND_ON_DEMAND_PAGING is not set.

Fixes: f4056bfd8ccf ("IB/core: Add on demand paging caps to ib_uverbs_ex_query_device")
Fixes: 8cdd312cfed7 ("IB/mlx5: Implement the ODP capability query verb")
Signed-off-by: Leon Romanovsky <redacted>
 drivers/infiniband/core/uverbs_cmd.c | 2 --
 drivers/infiniband/hw/mlx5/main.c    | 2 --
 2 files changed, 4 deletions(-)
diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
index 6b12cc5f97b2..549d9eedf62e 100644
+++ b/drivers/infiniband/core/uverbs_cmd.c
@@ -3609,7 +3609,6 @@ static int ib_uverbs_ex_query_device(struct uverbs_attr_bundle *attrs)

 	copy_query_dev_fields(ucontext, &resp.base, &attr);

-#ifdef CONFIG_INFINIBAND_ON_DEMAND_PAGING
 	resp.odp_caps.general_caps = attr.odp_caps.general_caps;
 	resp.odp_caps.per_transport_caps.rc_odp_caps =
 		attr.odp_caps.per_transport_caps.rc_odp_caps;
@@ -3617,7 +3616,6 @@ static int ib_uverbs_ex_query_device(struct uverbs_attr_bundle *attrs)
 		attr.odp_caps.per_transport_caps.uc_odp_caps;
 	resp.odp_caps.per_transport_caps.ud_odp_caps =
 		attr.odp_caps.per_transport_caps.ud_odp_caps;
-#endif
This one is maybe OK, assuming the driver fills in 0..
quoted
 	resp.timestamp_mask = attr.timestamp_mask;
 	resp.hca_core_clock = attr.hca_core_clock;
diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index 6584e638387a..d7e5ba5034aa 100644
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -923,11 +923,9 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,
 	props->hca_core_clock = MLX5_CAP_GEN(mdev, device_frequency_khz);
 	props->timestamp_mask = 0x7FFFFFFFFFFFFFFFULL;

-#ifdef CONFIG_INFINIBAND_ON_DEMAND_PAGING
 	if (MLX5_CAP_GEN(mdev, pg))
 		props->device_cap_flags |= IB_DEVICE_ON_DEMAND_PAGING;
 	props->odp_caps = dev->odp_caps;
-#endif
But shouldn't this be protected? If the driver has compiled out ODP it
shouldn't set the cap flag...
I see those capabilities as device properties and not as kernel ones.

Current situation looks bad for me, when I have same device which
reports differently information depends on some compilation flag.
It is not device capabilities, it is a kernel API capability if the
API is not available the bit should not be set.

The field is badly named.

Jason
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help