Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 24306dc6 authored by Matan Barak's avatar Matan Barak Committed by Doug Ledford
Browse files

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: default avatarMatan Barak <matanb@mellanox.com>
Signed-off-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent 565197dd
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -539,6 +539,8 @@ EXPORT_SYMBOL(ib_dispatch_event);
int ib_query_device(struct ib_device *device,
		    struct ib_device_attr *device_attr)
{
	memset(device_attr, 0, sizeof(*device_attr));

	return device->query_device(device, device_attr);
}
EXPORT_SYMBOL(ib_query_device);
+14 −0
Original line number Diff line number Diff line
@@ -3426,6 +3426,8 @@ int ib_uverbs_ex_query_device(struct ib_uverbs_file *file,
	if (ucore->outlen < resp.response_length)
		return -ENOSPC;

	memset(&attr, 0, sizeof(attr));

	err = device->query_device(device, &attr);
	if (err)
		return err;
@@ -3450,6 +3452,18 @@ int ib_uverbs_ex_query_device(struct ib_uverbs_file *file,
#endif
	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:
	err = ib_copy_to_udata(ucore, &resp, resp.response_length);
	if (err)
+2 −0
Original line number Diff line number Diff line
@@ -227,6 +227,8 @@ struct ib_device_attr {
	int			sig_prot_cap;
	int			sig_guard_cap;
	struct ib_odp_caps	odp_caps;
	uint64_t		timestamp_mask;
	uint64_t		hca_core_clock; /* in KHZ */
};

enum ib_mtu {
+2 −0
Original line number Diff line number Diff line
@@ -223,6 +223,8 @@ struct ib_uverbs_ex_query_device_resp {
	__u32 comp_mask;
	__u32 response_length;
	struct ib_uverbs_odp_caps odp_caps;
	__u64 timestamp_mask;
	__u64 hca_core_clock; /* in KHZ */
};

struct ib_uverbs_query_port {