* [PATCH net-next 0/4] net/mlx5: Expose additional devlink dev info
@ 2025-03-18 15:36 Jiri Pirko
2025-03-18 15:36 ` [PATCH net-next 1/4] ynl: devlink: add missing board-serial-number Jiri Pirko
` (3 more replies)
0 siblings, 4 replies; 12+ messages in thread
From: Jiri Pirko @ 2025-03-18 15:36 UTC (permalink / raw)
To: netdev
Cc: davem, edumazet, kuba, pabeni, saeedm, leon, tariqt,
andrew+netdev, horms, donald.hunter, parav
From: Jiri Pirko <jiri@nvidia.com>
This patchset aims to expose couple of already defined serial numbers
for mlx5 driver.
On top of that, it introduces new field, "function.uid" and exposes
that for mlx5 driver.
Example:
$ devlink dev info
pci/0000:08:00.0:
driver mlx5_core
serial_number e4397f872caeed218000846daa7d2f49
board.serial_number MT2314XZ00YA
function.uid MT2314XZ00YAMLNXS0D0F0
versions:
fixed:
fw.psid MT_0000000894
running:
fw.version 28.41.1000
fw 28.41.1000
stored:
fw.version 28.41.1000
fw 28.41.1000
auxiliary/mlx5_core.eth.0:
driver mlx5_core.eth
pci/0000:08:00.1:
driver mlx5_core
serial_number e4397f872caeed218000846daa7d2f49
board.serial_number MT2314XZ00YA
function.uid MT2314XZ00YAMLNXS0D0F1
versions:
fixed:
fw.psid MT_0000000894
running:
fw.version 28.41.1000
fw 28.41.1000
stored:
fw.version 28.41.1000
fw 28.41.1000
auxiliary/mlx5_core.eth.1:
driver mlx5_core.eth
The first patch just adds a small missing bit in devlink ynl spec.
Jiri Pirko (4):
ynl: devlink: add missing board-serial-number
net/mlx5: Expose serial numbers in devlink info
devlink: add function unique identifier to devlink dev info
net/mlx5: Expose function UID in devlink info
Documentation/netlink/specs/devlink.yaml | 5 ++
.../networking/devlink/devlink-info.rst | 5 ++
.../net/ethernet/mellanox/mlx5/core/devlink.c | 62 +++++++++++++++++++
include/net/devlink.h | 2 +
include/uapi/linux/devlink.h | 2 +
net/devlink/dev.c | 9 +++
6 files changed, 85 insertions(+)
--
2.48.1
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH net-next 1/4] ynl: devlink: add missing board-serial-number
2025-03-18 15:36 [PATCH net-next 0/4] net/mlx5: Expose additional devlink dev info Jiri Pirko
@ 2025-03-18 15:36 ` Jiri Pirko
2025-03-23 17:18 ` Simon Horman
2025-03-18 15:36 ` [PATCH net-next 2/4] net/mlx5: Expose serial numbers in devlink info Jiri Pirko
` (2 subsequent siblings)
3 siblings, 1 reply; 12+ messages in thread
From: Jiri Pirko @ 2025-03-18 15:36 UTC (permalink / raw)
To: netdev
Cc: davem, edumazet, kuba, pabeni, saeedm, leon, tariqt,
andrew+netdev, horms, donald.hunter, parav
From: Jiri Pirko <jiri@nvidia.com>
Add a missing attribute of board serial number.
Signed-off-by: Jiri Pirko <jiri@nvidia.com>
---
Documentation/netlink/specs/devlink.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/netlink/specs/devlink.yaml b/Documentation/netlink/specs/devlink.yaml
index 09fbb4c03fc8..bd9726269b4f 100644
--- a/Documentation/netlink/specs/devlink.yaml
+++ b/Documentation/netlink/specs/devlink.yaml
@@ -1868,6 +1868,7 @@ operations:
- info-version-fixed
- info-version-running
- info-version-stored
+ - info-board-serial-number
dump:
reply: *info-get-reply
--
2.48.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH net-next 2/4] net/mlx5: Expose serial numbers in devlink info
2025-03-18 15:36 [PATCH net-next 0/4] net/mlx5: Expose additional devlink dev info Jiri Pirko
2025-03-18 15:36 ` [PATCH net-next 1/4] ynl: devlink: add missing board-serial-number Jiri Pirko
@ 2025-03-18 15:36 ` Jiri Pirko
2025-03-18 17:38 ` Simon Horman
2025-03-23 17:18 ` Simon Horman
2025-03-18 15:36 ` [PATCH net-next 3/4] devlink: add function unique identifier to devlink dev info Jiri Pirko
2025-03-18 15:36 ` [PATCH net-next 4/4] net/mlx5: Expose function UID in devlink info Jiri Pirko
3 siblings, 2 replies; 12+ messages in thread
From: Jiri Pirko @ 2025-03-18 15:36 UTC (permalink / raw)
To: netdev
Cc: davem, edumazet, kuba, pabeni, saeedm, leon, tariqt,
andrew+netdev, horms, donald.hunter, parav
From: Jiri Pirko <jiri@nvidia.com>
Devlink info allows to expose serial number and board serial number
Get the values from PCI VPD and expose it.
$ devlink dev info
pci/0000:08:00.0:
driver mlx5_core
serial_number e4397f872caeed218000846daa7d2f49
board.serial_number MT2314XZ00YA
versions:
fixed:
fw.psid MT_0000000894
running:
fw.version 28.41.1000
fw 28.41.1000
stored:
fw.version 28.41.1000
fw 28.41.1000
auxiliary/mlx5_core.eth.0:
driver mlx5_core.eth
pci/0000:08:00.1:
driver mlx5_core
serial_number e4397f872caeed218000846daa7d2f49
board.serial_number MT2314XZ00YA
versions:
fixed:
fw.psid MT_0000000894
running:
fw.version 28.41.1000
fw 28.41.1000
stored:
fw.version 28.41.1000
fw 28.41.1000
auxiliary/mlx5_core.eth.1:
driver mlx5_core.eth
Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Parav Pandit <parav@nvidia.com>
---
.../net/ethernet/mellanox/mlx5/core/devlink.c | 49 +++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
index 73cd74644378..be0ae26d1582 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
@@ -35,6 +35,51 @@ static u16 mlx5_fw_ver_subminor(u32 version)
return version & 0xffff;
}
+static int mlx5_devlink_serial_numbers_put(struct mlx5_core_dev *dev,
+ struct devlink_info_req *req,
+ struct netlink_ext_ack *extack)
+{
+ struct pci_dev *pdev = dev->pdev;
+ unsigned int vpd_size, kw_len;
+ char *str, *end;
+ u8 *vpd_data;
+ int start;
+ int err;
+
+ vpd_data = pci_vpd_alloc(pdev, &vpd_size);
+ if (IS_ERR(vpd_data))
+ return 0;
+
+ start = pci_vpd_find_ro_info_keyword(vpd_data, vpd_size,
+ PCI_VPD_RO_KEYWORD_SERIALNO, &kw_len);
+ if (start >= 0) {
+ str = kstrndup(vpd_data + start, kw_len, GFP_KERNEL);
+ if (!str) {
+ err = -ENOMEM;
+ goto end;
+ }
+ end = strchrnul(str, ' ');
+ *end = '\0';
+ err = devlink_info_board_serial_number_put(req, str);
+ kfree(str);
+ }
+
+ start = pci_vpd_find_ro_info_keyword(vpd_data, vpd_size, "V3", &kw_len);
+ if (start >= 0) {
+ str = kstrndup(vpd_data + start, kw_len, GFP_KERNEL);
+ if (!str) {
+ err = -ENOMEM;
+ goto end;
+ }
+ err = devlink_info_serial_number_put(req, str);
+ kfree(str);
+ }
+
+end:
+ kfree(vpd_data);
+ return err;
+}
+
#define DEVLINK_FW_STRING_LEN 32
static int
@@ -49,6 +94,10 @@ mlx5_devlink_info_get(struct devlink *devlink, struct devlink_info_req *req,
if (!mlx5_core_is_pf(dev))
return 0;
+ err = mlx5_devlink_serial_numbers_put(dev, req, extack);
+ if (err)
+ return err;
+
err = devlink_info_version_fixed_put(req, "fw.psid", dev->board_id);
if (err)
return err;
--
2.48.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH net-next 3/4] devlink: add function unique identifier to devlink dev info
2025-03-18 15:36 [PATCH net-next 0/4] net/mlx5: Expose additional devlink dev info Jiri Pirko
2025-03-18 15:36 ` [PATCH net-next 1/4] ynl: devlink: add missing board-serial-number Jiri Pirko
2025-03-18 15:36 ` [PATCH net-next 2/4] net/mlx5: Expose serial numbers in devlink info Jiri Pirko
@ 2025-03-18 15:36 ` Jiri Pirko
2025-03-23 17:18 ` Simon Horman
2025-03-18 15:36 ` [PATCH net-next 4/4] net/mlx5: Expose function UID in devlink info Jiri Pirko
3 siblings, 1 reply; 12+ messages in thread
From: Jiri Pirko @ 2025-03-18 15:36 UTC (permalink / raw)
To: netdev
Cc: davem, edumazet, kuba, pabeni, saeedm, leon, tariqt,
andrew+netdev, horms, donald.hunter, parav
From: Jiri Pirko <jiri@nvidia.com>
Presently, for multi-PF NIC each PF reports the same serial_number and
board.serial_number.
To universally identify a function, add function unique identifier (uid)
to be obtained from the driver as a string of arbitrary length.
Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Parav Pandit <parav@nvidia.com>
---
Documentation/netlink/specs/devlink.yaml | 4 ++++
Documentation/networking/devlink/devlink-info.rst | 5 +++++
include/net/devlink.h | 2 ++
include/uapi/linux/devlink.h | 2 ++
net/devlink/dev.c | 9 +++++++++
5 files changed, 22 insertions(+)
diff --git a/Documentation/netlink/specs/devlink.yaml b/Documentation/netlink/specs/devlink.yaml
index bd9726269b4f..5d39eb68aefb 100644
--- a/Documentation/netlink/specs/devlink.yaml
+++ b/Documentation/netlink/specs/devlink.yaml
@@ -820,6 +820,9 @@ attribute-sets:
-
name: region-direct
type: flag
+ -
+ name: info-function-uid
+ type: string
-
name: dl-dev-stats
@@ -1869,6 +1872,7 @@ operations:
- info-version-running
- info-version-stored
- info-board-serial-number
+ - info-function-uid
dump:
reply: *info-get-reply
diff --git a/Documentation/networking/devlink/devlink-info.rst b/Documentation/networking/devlink/devlink-info.rst
index 23073bc219d8..04afceee0c03 100644
--- a/Documentation/networking/devlink/devlink-info.rst
+++ b/Documentation/networking/devlink/devlink-info.rst
@@ -50,6 +50,11 @@ versions is generally discouraged - here, and via any other Linux API.
This is usually the serial number of the board, often available in
PCI *Vital Product Data*.
+ * - ``function.uid``
+ - Function uniqueue identifier.
+
+ Vendor defined uniqueue identifier of a function.
+
* - ``fixed``
- Group for hardware identifiers, and versions of components
which are not field-updatable.
diff --git a/include/net/devlink.h b/include/net/devlink.h
index b8783126c1ed..a0b84efd4740 100644
--- a/include/net/devlink.h
+++ b/include/net/devlink.h
@@ -1846,6 +1846,8 @@ int devlink_info_serial_number_put(struct devlink_info_req *req,
const char *sn);
int devlink_info_board_serial_number_put(struct devlink_info_req *req,
const char *bsn);
+int devlink_info_function_uid_put(struct devlink_info_req *req,
+ const char *fuid);
enum devlink_info_version_type {
DEVLINK_INFO_VERSION_TYPE_NONE,
diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h
index 9401aa343673..816339790409 100644
--- a/include/uapi/linux/devlink.h
+++ b/include/uapi/linux/devlink.h
@@ -614,6 +614,8 @@ enum devlink_attr {
DEVLINK_ATTR_REGION_DIRECT, /* flag */
+ DEVLINK_ATTR_INFO_FUNCTION_UID, /* string */
+
/* Add new attributes above here, update the spec in
* Documentation/netlink/specs/devlink.yaml and re-generate
* net/devlink/netlink_gen.c.
diff --git a/net/devlink/dev.c b/net/devlink/dev.c
index d6e3db300acb..6c442549722c 100644
--- a/net/devlink/dev.c
+++ b/net/devlink/dev.c
@@ -763,6 +763,15 @@ int devlink_info_board_serial_number_put(struct devlink_info_req *req,
}
EXPORT_SYMBOL_GPL(devlink_info_board_serial_number_put);
+int devlink_info_function_uid_put(struct devlink_info_req *req,
+ const char *fuid)
+{
+ if (!req->msg)
+ return 0;
+ return nla_put_string(req->msg, DEVLINK_ATTR_INFO_FUNCTION_UID, fuid);
+}
+EXPORT_SYMBOL_GPL(devlink_info_function_uid_put);
+
static int devlink_info_version_put(struct devlink_info_req *req, int attr,
const char *version_name,
const char *version_value,
--
2.48.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH net-next 4/4] net/mlx5: Expose function UID in devlink info
2025-03-18 15:36 [PATCH net-next 0/4] net/mlx5: Expose additional devlink dev info Jiri Pirko
` (2 preceding siblings ...)
2025-03-18 15:36 ` [PATCH net-next 3/4] devlink: add function unique identifier to devlink dev info Jiri Pirko
@ 2025-03-18 15:36 ` Jiri Pirko
2025-03-23 17:19 ` Simon Horman
3 siblings, 1 reply; 12+ messages in thread
From: Jiri Pirko @ 2025-03-18 15:36 UTC (permalink / raw)
To: netdev
Cc: davem, edumazet, kuba, pabeni, saeedm, leon, tariqt,
andrew+netdev, horms, donald.hunter, parav
From: Jiri Pirko <jiri@nvidia.com>
Devlink info allows to expose function UID.
Get the value from PCI VPD and expose it.
$ devlink dev info
pci/0000:08:00.0:
driver mlx5_core
serial_number e4397f872caeed218000846daa7d2f49
board.serial_number MT2314XZ00YA
function.uid MT2314XZ00YAMLNXS0D0F0
versions:
fixed:
fw.psid MT_0000000894
running:
fw.version 28.41.1000
fw 28.41.1000
stored:
fw.version 28.41.1000
fw 28.41.1000
auxiliary/mlx5_core.eth.0:
driver mlx5_core.eth
pci/0000:08:00.1:
driver mlx5_core
serial_number e4397f872caeed218000846daa7d2f49
board.serial_number MT2314XZ00YA
function.uid MT2314XZ00YAMLNXS0D0F1
versions:
fixed:
fw.psid MT_0000000894
running:
fw.version 28.41.1000
fw 28.41.1000
stored:
fw.version 28.41.1000
fw 28.41.1000
auxiliary/mlx5_core.eth.1:
driver mlx5_core.eth
Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Parav Pandit <parav@nvidia.com>
---
drivers/net/ethernet/mellanox/mlx5/core/devlink.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
index be0ae26d1582..6caaf174f44d 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
@@ -75,6 +75,19 @@ static int mlx5_devlink_serial_numbers_put(struct mlx5_core_dev *dev,
kfree(str);
}
+ start = pci_vpd_find_ro_info_keyword(vpd_data, vpd_size, "VU", &kw_len);
+ if (start >= 0) {
+ str = kstrndup(vpd_data + start, kw_len, GFP_KERNEL);
+ if (!str) {
+ err = -ENOMEM;
+ goto end;
+ }
+ end = strchrnul(str, ' ');
+ *end = '\0';
+ err = devlink_info_function_uid_put(req, str);
+ kfree(str);
+ }
+
end:
kfree(vpd_data);
return err;
--
2.48.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH net-next 2/4] net/mlx5: Expose serial numbers in devlink info
2025-03-18 15:36 ` [PATCH net-next 2/4] net/mlx5: Expose serial numbers in devlink info Jiri Pirko
@ 2025-03-18 17:38 ` Simon Horman
2025-03-19 11:39 ` Jiri Pirko
2025-03-23 17:18 ` Simon Horman
1 sibling, 1 reply; 12+ messages in thread
From: Simon Horman @ 2025-03-18 17:38 UTC (permalink / raw)
To: Jiri Pirko
Cc: netdev, davem, edumazet, kuba, pabeni, saeedm, leon, tariqt,
andrew+netdev, donald.hunter, parav
On Tue, Mar 18, 2025 at 04:36:25PM +0100, Jiri Pirko wrote:
> From: Jiri Pirko <jiri@nvidia.com>
>
> Devlink info allows to expose serial number and board serial number
> Get the values from PCI VPD and expose it.
>
> $ devlink dev info
> pci/0000:08:00.0:
> driver mlx5_core
> serial_number e4397f872caeed218000846daa7d2f49
> board.serial_number MT2314XZ00YA
Hi Jiri,
I'm sorry if this is is somehow obvious, but what is
the difference between the serial number and board serial number
(yes, I do see that they are different numbers :)
> versions:
> fixed:
> fw.psid MT_0000000894
> running:
> fw.version 28.41.1000
> fw 28.41.1000
> stored:
> fw.version 28.41.1000
> fw 28.41.1000
> auxiliary/mlx5_core.eth.0:
> driver mlx5_core.eth
> pci/0000:08:00.1:
> driver mlx5_core
> serial_number e4397f872caeed218000846daa7d2f49
> board.serial_number MT2314XZ00YA
> versions:
> fixed:
> fw.psid MT_0000000894
> running:
> fw.version 28.41.1000
> fw 28.41.1000
> stored:
> fw.version 28.41.1000
> fw 28.41.1000
> auxiliary/mlx5_core.eth.1:
> driver mlx5_core.eth
>
> Signed-off-by: Jiri Pirko <jiri@nvidia.com>
> Reviewed-by: Parav Pandit <parav@nvidia.com>
> ---
> .../net/ethernet/mellanox/mlx5/core/devlink.c | 49 +++++++++++++++++++
> 1 file changed, 49 insertions(+)
>
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
> index 73cd74644378..be0ae26d1582 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
> @@ -35,6 +35,51 @@ static u16 mlx5_fw_ver_subminor(u32 version)
> return version & 0xffff;
> }
>
> +static int mlx5_devlink_serial_numbers_put(struct mlx5_core_dev *dev,
> + struct devlink_info_req *req,
> + struct netlink_ext_ack *extack)
> +{
> + struct pci_dev *pdev = dev->pdev;
> + unsigned int vpd_size, kw_len;
> + char *str, *end;
> + u8 *vpd_data;
> + int start;
> + int err;
> +
> + vpd_data = pci_vpd_alloc(pdev, &vpd_size);
> + if (IS_ERR(vpd_data))
> + return 0;
> +
> + start = pci_vpd_find_ro_info_keyword(vpd_data, vpd_size,
> + PCI_VPD_RO_KEYWORD_SERIALNO, &kw_len);
> + if (start >= 0) {
> + str = kstrndup(vpd_data + start, kw_len, GFP_KERNEL);
> + if (!str) {
> + err = -ENOMEM;
> + goto end;
> + }
> + end = strchrnul(str, ' ');
> + *end = '\0';
> + err = devlink_info_board_serial_number_put(req, str);
> + kfree(str);
> + }
> +
> + start = pci_vpd_find_ro_info_keyword(vpd_data, vpd_size, "V3", &kw_len);
> + if (start >= 0) {
> + str = kstrndup(vpd_data + start, kw_len, GFP_KERNEL);
> + if (!str) {
> + err = -ENOMEM;
> + goto end;
> + }
> + err = devlink_info_serial_number_put(req, str);
> + kfree(str);
> + }
> +
> +end:
> + kfree(vpd_data);
> + return err;
Perhaps it can never happen, but Smatch flags that err may be used
uninitialised here. I believe that can theoretically occur if
neither of start condition above are met.
> +}
> +
...
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH net-next 2/4] net/mlx5: Expose serial numbers in devlink info
2025-03-18 17:38 ` Simon Horman
@ 2025-03-19 11:39 ` Jiri Pirko
2025-03-20 13:50 ` Simon Horman
0 siblings, 1 reply; 12+ messages in thread
From: Jiri Pirko @ 2025-03-19 11:39 UTC (permalink / raw)
To: Simon Horman
Cc: netdev, davem, edumazet, kuba, pabeni, saeedm, leon, tariqt,
andrew+netdev, donald.hunter, parav
Tue, Mar 18, 2025 at 06:38:58PM +0100, horms@kernel.org wrote:
>On Tue, Mar 18, 2025 at 04:36:25PM +0100, Jiri Pirko wrote:
>> From: Jiri Pirko <jiri@nvidia.com>
>>
>> Devlink info allows to expose serial number and board serial number
>> Get the values from PCI VPD and expose it.
>>
>> $ devlink dev info
>> pci/0000:08:00.0:
>> driver mlx5_core
>> serial_number e4397f872caeed218000846daa7d2f49
>> board.serial_number MT2314XZ00YA
>
>Hi Jiri,
>
>I'm sorry if this is is somehow obvious, but what is
>the difference between the serial number and board serial number
>(yes, I do see that they are different numbers :)
Quoting Documentation/networking/devlink/devlink-info.rst:
* - ``serial_number``
- Serial number of the device.
This is usually the serial number of the ASIC, also often available
in PCI config space of the device in the *Device Serial Number*
capability.
The serial number should be unique per physical device.
Sometimes the serial number of the device is only 48 bits long (the
length of the Ethernet MAC address), and since PCI DSN is 64 bits long
devices pad or encode additional information into the serial number.
One example is adding port ID or PCI interface ID in the extra two bytes.
Drivers should make sure to strip or normalize any such padding
or interface ID, and report only the part of the serial number
which uniquely identifies the hardware. In other words serial number
reported for two ports of the same device or on two hosts of
a multi-host device should be identical.
* - ``board.serial_number``
- Board serial number of the device.
This is usually the serial number of the board, often available in
PCI *Vital Product Data*.
>
>> versions:
>> fixed:
>> fw.psid MT_0000000894
>> running:
>> fw.version 28.41.1000
>> fw 28.41.1000
>> stored:
>> fw.version 28.41.1000
>> fw 28.41.1000
>> auxiliary/mlx5_core.eth.0:
>> driver mlx5_core.eth
>> pci/0000:08:00.1:
>> driver mlx5_core
>> serial_number e4397f872caeed218000846daa7d2f49
>> board.serial_number MT2314XZ00YA
>> versions:
>> fixed:
>> fw.psid MT_0000000894
>> running:
>> fw.version 28.41.1000
>> fw 28.41.1000
>> stored:
>> fw.version 28.41.1000
>> fw 28.41.1000
>> auxiliary/mlx5_core.eth.1:
>> driver mlx5_core.eth
>>
>> Signed-off-by: Jiri Pirko <jiri@nvidia.com>
>> Reviewed-by: Parav Pandit <parav@nvidia.com>
>> ---
>> .../net/ethernet/mellanox/mlx5/core/devlink.c | 49 +++++++++++++++++++
>> 1 file changed, 49 insertions(+)
>>
>> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
>> index 73cd74644378..be0ae26d1582 100644
>> --- a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
>> +++ b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
>> @@ -35,6 +35,51 @@ static u16 mlx5_fw_ver_subminor(u32 version)
>> return version & 0xffff;
>> }
>>
>> +static int mlx5_devlink_serial_numbers_put(struct mlx5_core_dev *dev,
>> + struct devlink_info_req *req,
>> + struct netlink_ext_ack *extack)
>> +{
>> + struct pci_dev *pdev = dev->pdev;
>> + unsigned int vpd_size, kw_len;
>> + char *str, *end;
>> + u8 *vpd_data;
>> + int start;
>> + int err;
>> +
>> + vpd_data = pci_vpd_alloc(pdev, &vpd_size);
>> + if (IS_ERR(vpd_data))
>> + return 0;
>> +
>> + start = pci_vpd_find_ro_info_keyword(vpd_data, vpd_size,
>> + PCI_VPD_RO_KEYWORD_SERIALNO, &kw_len);
>> + if (start >= 0) {
>> + str = kstrndup(vpd_data + start, kw_len, GFP_KERNEL);
>> + if (!str) {
>> + err = -ENOMEM;
>> + goto end;
>> + }
>> + end = strchrnul(str, ' ');
>> + *end = '\0';
>> + err = devlink_info_board_serial_number_put(req, str);
>> + kfree(str);
>> + }
>> +
>> + start = pci_vpd_find_ro_info_keyword(vpd_data, vpd_size, "V3", &kw_len);
>> + if (start >= 0) {
>> + str = kstrndup(vpd_data + start, kw_len, GFP_KERNEL);
>> + if (!str) {
>> + err = -ENOMEM;
>> + goto end;
>> + }
>> + err = devlink_info_serial_number_put(req, str);
>> + kfree(str);
>> + }
>> +
>> +end:
>> + kfree(vpd_data);
>> + return err;
>
>Perhaps it can never happen, but Smatch flags that err may be used
>uninitialised here. I believe that can theoretically occur if
>neither of start condition above are met.
Will init.
>
>> +}
>> +
>
>...
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH net-next 2/4] net/mlx5: Expose serial numbers in devlink info
2025-03-19 11:39 ` Jiri Pirko
@ 2025-03-20 13:50 ` Simon Horman
0 siblings, 0 replies; 12+ messages in thread
From: Simon Horman @ 2025-03-20 13:50 UTC (permalink / raw)
To: Jiri Pirko
Cc: netdev, davem, edumazet, kuba, pabeni, saeedm, leon, tariqt,
andrew+netdev, donald.hunter, parav
On Wed, Mar 19, 2025 at 12:39:59PM +0100, Jiri Pirko wrote:
> Tue, Mar 18, 2025 at 06:38:58PM +0100, horms@kernel.org wrote:
> >On Tue, Mar 18, 2025 at 04:36:25PM +0100, Jiri Pirko wrote:
> >> From: Jiri Pirko <jiri@nvidia.com>
> >>
> >> Devlink info allows to expose serial number and board serial number
> >> Get the values from PCI VPD and expose it.
> >>
> >> $ devlink dev info
> >> pci/0000:08:00.0:
> >> driver mlx5_core
> >> serial_number e4397f872caeed218000846daa7d2f49
> >> board.serial_number MT2314XZ00YA
> >
> >Hi Jiri,
> >
> >I'm sorry if this is is somehow obvious, but what is
> >the difference between the serial number and board serial number
> >(yes, I do see that they are different numbers :)
>
> Quoting Documentation/networking/devlink/devlink-info.rst:
>
> * - ``serial_number``
> - Serial number of the device.
>
> This is usually the serial number of the ASIC, also often available
> in PCI config space of the device in the *Device Serial Number*
> capability.
>
> The serial number should be unique per physical device.
> Sometimes the serial number of the device is only 48 bits long (the
> length of the Ethernet MAC address), and since PCI DSN is 64 bits long
> devices pad or encode additional information into the serial number.
> One example is adding port ID or PCI interface ID in the extra two bytes.
> Drivers should make sure to strip or normalize any such padding
> or interface ID, and report only the part of the serial number
> which uniquely identifies the hardware. In other words serial number
> reported for two ports of the same device or on two hosts of
> a multi-host device should be identical.
>
> * - ``board.serial_number``
> - Board serial number of the device.
>
> This is usually the serial number of the board, often available in
> PCI *Vital Product Data*.
Thanks, I should have known that :)
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH net-next 1/4] ynl: devlink: add missing board-serial-number
2025-03-18 15:36 ` [PATCH net-next 1/4] ynl: devlink: add missing board-serial-number Jiri Pirko
@ 2025-03-23 17:18 ` Simon Horman
0 siblings, 0 replies; 12+ messages in thread
From: Simon Horman @ 2025-03-23 17:18 UTC (permalink / raw)
To: Jiri Pirko
Cc: netdev, davem, edumazet, kuba, pabeni, saeedm, leon, tariqt,
andrew+netdev, donald.hunter, parav
On Tue, Mar 18, 2025 at 04:36:24PM +0100, Jiri Pirko wrote:
> From: Jiri Pirko <jiri@nvidia.com>
>
> Add a missing attribute of board serial number.
>
> Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Simon Horman <horms@kernel.org>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH net-next 2/4] net/mlx5: Expose serial numbers in devlink info
2025-03-18 15:36 ` [PATCH net-next 2/4] net/mlx5: Expose serial numbers in devlink info Jiri Pirko
2025-03-18 17:38 ` Simon Horman
@ 2025-03-23 17:18 ` Simon Horman
1 sibling, 0 replies; 12+ messages in thread
From: Simon Horman @ 2025-03-23 17:18 UTC (permalink / raw)
To: Jiri Pirko
Cc: netdev, davem, edumazet, kuba, pabeni, saeedm, leon, tariqt,
andrew+netdev, donald.hunter, parav
On Tue, Mar 18, 2025 at 04:36:25PM +0100, Jiri Pirko wrote:
> From: Jiri Pirko <jiri@nvidia.com>
>
> Devlink info allows to expose serial number and board serial number
> Get the values from PCI VPD and expose it.
>
> $ devlink dev info
> pci/0000:08:00.0:
> driver mlx5_core
> serial_number e4397f872caeed218000846daa7d2f49
> board.serial_number MT2314XZ00YA
> versions:
> fixed:
> fw.psid MT_0000000894
> running:
> fw.version 28.41.1000
> fw 28.41.1000
> stored:
> fw.version 28.41.1000
> fw 28.41.1000
> auxiliary/mlx5_core.eth.0:
> driver mlx5_core.eth
> pci/0000:08:00.1:
> driver mlx5_core
> serial_number e4397f872caeed218000846daa7d2f49
> board.serial_number MT2314XZ00YA
> versions:
> fixed:
> fw.psid MT_0000000894
> running:
> fw.version 28.41.1000
> fw 28.41.1000
> stored:
> fw.version 28.41.1000
> fw 28.41.1000
> auxiliary/mlx5_core.eth.1:
> driver mlx5_core.eth
>
> Signed-off-by: Jiri Pirko <jiri@nvidia.com>
> Reviewed-by: Parav Pandit <parav@nvidia.com>
Reviewed-by: Simon Horman <horms@kernel.org>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH net-next 3/4] devlink: add function unique identifier to devlink dev info
2025-03-18 15:36 ` [PATCH net-next 3/4] devlink: add function unique identifier to devlink dev info Jiri Pirko
@ 2025-03-23 17:18 ` Simon Horman
0 siblings, 0 replies; 12+ messages in thread
From: Simon Horman @ 2025-03-23 17:18 UTC (permalink / raw)
To: Jiri Pirko
Cc: netdev, davem, edumazet, kuba, pabeni, saeedm, leon, tariqt,
andrew+netdev, donald.hunter, parav
On Tue, Mar 18, 2025 at 04:36:26PM +0100, Jiri Pirko wrote:
> From: Jiri Pirko <jiri@nvidia.com>
>
> Presently, for multi-PF NIC each PF reports the same serial_number and
> board.serial_number.
>
> To universally identify a function, add function unique identifier (uid)
> to be obtained from the driver as a string of arbitrary length.
>
> Signed-off-by: Jiri Pirko <jiri@nvidia.com>
> Reviewed-by: Parav Pandit <parav@nvidia.com>
Reviewed-by: Simon Horman <horms@kernel.org>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH net-next 4/4] net/mlx5: Expose function UID in devlink info
2025-03-18 15:36 ` [PATCH net-next 4/4] net/mlx5: Expose function UID in devlink info Jiri Pirko
@ 2025-03-23 17:19 ` Simon Horman
0 siblings, 0 replies; 12+ messages in thread
From: Simon Horman @ 2025-03-23 17:19 UTC (permalink / raw)
To: Jiri Pirko
Cc: netdev, davem, edumazet, kuba, pabeni, saeedm, leon, tariqt,
andrew+netdev, donald.hunter, parav
On Tue, Mar 18, 2025 at 04:36:27PM +0100, Jiri Pirko wrote:
> From: Jiri Pirko <jiri@nvidia.com>
>
> Devlink info allows to expose function UID.
> Get the value from PCI VPD and expose it.
>
> $ devlink dev info
> pci/0000:08:00.0:
> driver mlx5_core
> serial_number e4397f872caeed218000846daa7d2f49
> board.serial_number MT2314XZ00YA
> function.uid MT2314XZ00YAMLNXS0D0F0
> versions:
> fixed:
> fw.psid MT_0000000894
> running:
> fw.version 28.41.1000
> fw 28.41.1000
> stored:
> fw.version 28.41.1000
> fw 28.41.1000
> auxiliary/mlx5_core.eth.0:
> driver mlx5_core.eth
> pci/0000:08:00.1:
> driver mlx5_core
> serial_number e4397f872caeed218000846daa7d2f49
> board.serial_number MT2314XZ00YA
> function.uid MT2314XZ00YAMLNXS0D0F1
> versions:
> fixed:
> fw.psid MT_0000000894
> running:
> fw.version 28.41.1000
> fw 28.41.1000
> stored:
> fw.version 28.41.1000
> fw 28.41.1000
> auxiliary/mlx5_core.eth.1:
> driver mlx5_core.eth
>
> Signed-off-by: Jiri Pirko <jiri@nvidia.com>
> Reviewed-by: Parav Pandit <parav@nvidia.com>
Reviewed-by: Simon Horman <horms@kernel.org>
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2025-03-23 17:19 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-18 15:36 [PATCH net-next 0/4] net/mlx5: Expose additional devlink dev info Jiri Pirko
2025-03-18 15:36 ` [PATCH net-next 1/4] ynl: devlink: add missing board-serial-number Jiri Pirko
2025-03-23 17:18 ` Simon Horman
2025-03-18 15:36 ` [PATCH net-next 2/4] net/mlx5: Expose serial numbers in devlink info Jiri Pirko
2025-03-18 17:38 ` Simon Horman
2025-03-19 11:39 ` Jiri Pirko
2025-03-20 13:50 ` Simon Horman
2025-03-23 17:18 ` Simon Horman
2025-03-18 15:36 ` [PATCH net-next 3/4] devlink: add function unique identifier to devlink dev info Jiri Pirko
2025-03-23 17:18 ` Simon Horman
2025-03-18 15:36 ` [PATCH net-next 4/4] net/mlx5: Expose function UID in devlink info Jiri Pirko
2025-03-23 17:19 ` Simon Horman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).