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; -#endifThis 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; -#endifBut 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