mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-10 07:50:04 +00:00
IB/core: Add timestamp_mask and hca_core_clock to query_device
In order to expose timestamp we need to expose two new attributes in query_device to be used for CQ completion time-stamping: timestamp_mask - how many bits are valid in the timestamp, where timestamp values could be 64bits the most. hca_core_clock - timestamp is given in HW cycles, the frequency in KHZ units of the HCA, necessary in order to convert cycles to seconds. This is added both to ib_query_device and its respective uverbs counterpart. Signed-off-by: Matan Barak <matanb@mellanox.com> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
565197dd8f
commit
24306dc661
@ -539,6 +539,8 @@ EXPORT_SYMBOL(ib_dispatch_event);
|
|||||||
int ib_query_device(struct ib_device *device,
|
int ib_query_device(struct ib_device *device,
|
||||||
struct ib_device_attr *device_attr)
|
struct ib_device_attr *device_attr)
|
||||||
{
|
{
|
||||||
|
memset(device_attr, 0, sizeof(*device_attr));
|
||||||
|
|
||||||
return device->query_device(device, device_attr);
|
return device->query_device(device, device_attr);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ib_query_device);
|
EXPORT_SYMBOL(ib_query_device);
|
||||||
|
@ -3426,6 +3426,8 @@ int ib_uverbs_ex_query_device(struct ib_uverbs_file *file,
|
|||||||
if (ucore->outlen < resp.response_length)
|
if (ucore->outlen < resp.response_length)
|
||||||
return -ENOSPC;
|
return -ENOSPC;
|
||||||
|
|
||||||
|
memset(&attr, 0, sizeof(attr));
|
||||||
|
|
||||||
err = device->query_device(device, &attr);
|
err = device->query_device(device, &attr);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
@ -3450,6 +3452,18 @@ int ib_uverbs_ex_query_device(struct ib_uverbs_file *file,
|
|||||||
#endif
|
#endif
|
||||||
resp.response_length += sizeof(resp.odp_caps);
|
resp.response_length += sizeof(resp.odp_caps);
|
||||||
|
|
||||||
|
if (ucore->outlen < resp.response_length + sizeof(resp.timestamp_mask))
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
resp.timestamp_mask = attr.timestamp_mask;
|
||||||
|
resp.response_length += sizeof(resp.timestamp_mask);
|
||||||
|
|
||||||
|
if (ucore->outlen < resp.response_length + sizeof(resp.hca_core_clock))
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
resp.hca_core_clock = attr.hca_core_clock;
|
||||||
|
resp.response_length += sizeof(resp.hca_core_clock);
|
||||||
|
|
||||||
end:
|
end:
|
||||||
err = ib_copy_to_udata(ucore, &resp, resp.response_length);
|
err = ib_copy_to_udata(ucore, &resp, resp.response_length);
|
||||||
if (err)
|
if (err)
|
||||||
|
@ -227,6 +227,8 @@ struct ib_device_attr {
|
|||||||
int sig_prot_cap;
|
int sig_prot_cap;
|
||||||
int sig_guard_cap;
|
int sig_guard_cap;
|
||||||
struct ib_odp_caps odp_caps;
|
struct ib_odp_caps odp_caps;
|
||||||
|
uint64_t timestamp_mask;
|
||||||
|
uint64_t hca_core_clock; /* in KHZ */
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ib_mtu {
|
enum ib_mtu {
|
||||||
|
@ -223,6 +223,8 @@ struct ib_uverbs_ex_query_device_resp {
|
|||||||
__u32 comp_mask;
|
__u32 comp_mask;
|
||||||
__u32 response_length;
|
__u32 response_length;
|
||||||
struct ib_uverbs_odp_caps odp_caps;
|
struct ib_uverbs_odp_caps odp_caps;
|
||||||
|
__u64 timestamp_mask;
|
||||||
|
__u64 hca_core_clock; /* in KHZ */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ib_uverbs_query_port {
|
struct ib_uverbs_query_port {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user