diff mbox series

RDMA/core: Publish node GUID with the uevent for ib_device

Message ID 20250309175731.7185-1-jain.abhinav177@gmail.com (mailing list archive)
State New
Headers show
Series RDMA/core: Publish node GUID with the uevent for ib_device | expand

Commit Message

Abhinav Jain March 9, 2025, 5:57 p.m. UTC
As per the comment, modify ib_device_uevent to publish the node
GUID alongside device name, upon device state change.

Have compiled the file manually to ensure that it builds. Do not have
a readily available IB hardware to test. Confirmed with checkpatch
that the patch has no errors/warnings.

Signed-off-by: Abhinav Jain <jain.abhinav177@gmail.com>
---
 drivers/infiniband/core/device.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

Comments

Leon Romanovsky March 9, 2025, 7:27 p.m. UTC | #1
On Sun, Mar 09, 2025 at 05:57:31PM +0000, Abhinav Jain wrote:
> As per the comment, modify ib_device_uevent to publish the node
> GUID alongside device name, upon device state change.
> 
> Have compiled the file manually to ensure that it builds. Do not have
> a readily available IB hardware to test. Confirmed with checkpatch
> that the patch has no errors/warnings.

I'm missing motivation for this patch. Why is this change needed?

Thanks

> 
> Signed-off-by: Abhinav Jain <jain.abhinav177@gmail.com>
> ---
>  drivers/infiniband/core/device.c | 13 +++++++++----
>  1 file changed, 9 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
> index 0ded91f056f3..1812038f1a91 100644
> --- a/drivers/infiniband/core/device.c
> +++ b/drivers/infiniband/core/device.c
> @@ -499,12 +499,17 @@ static void ib_device_release(struct device *device)
>  static int ib_device_uevent(const struct device *device,
>  			    struct kobj_uevent_env *env)
>  {
> -	if (add_uevent_var(env, "NAME=%s", dev_name(device)))
> +	const struct ib_device *dev =
> +		container_of(device, struct ib_device, dev);
> +
> +	if (add_uevent_var(env, "NAME=%s", dev_name(&dev->dev)))
>  		return -ENOMEM;
>  
> -	/*
> -	 * It would be nice to pass the node GUID with the event...
> -	 */
> +	__be64 node_guid_be = dev->node_guid;
> +	u64 node_guid = be64_to_cpu(node_guid_be);
> +
> +	if (add_uevent_var(env, "NODE_GUID=0x%llx", node_guid))
> +		return -ENOMEM;
>  
>  	return 0;
>  }
> -- 
> 2.34.1
>
Abhinav Jain March 10, 2025, 7:01 a.m. UTC | #2
On Sun, 9 Mar 2025 21:27:51 +0200, Leon Romanovsky wrote:
>On Sun, Mar 09, 2025 at 05:57:31PM +0000, Abhinav Jain wrote:
>> As per the comment, modify ib_device_uevent to publish the node
>> GUID alongside device name, upon device state change.
>> 
>> Have compiled the file manually to ensure that it builds. Do not have
>> a readily available IB hardware to test. Confirmed with checkpatch
>> that the patch has no errors/warnings.
>
>I'm missing motivation for this patch. Why is this change needed?
>
>Thanks

Originally, I was looking at this function in order to solve a syzkaller
bug. I noticed this comment from Jason and I assumed that the motivation
would be to identify the node on which the event is happening.

With the name, users can identify nodes however Subnet Manager uses
node_guid for discovery and configuration of the nodes. To conclude, I
think just using the node name might not be sufficient for unambiguous
and reliable device management in the network.

>> 
>> Signed-off-by: Abhinav Jain <jain.abhinav177@gmail.com>
>> ---
>>  drivers/infiniband/core/device.c | 13 +++++++++----
>>  1 file changed, 9 insertions(+), 4 deletions(-)
>> 
>> diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
>> index 0ded91f056f3..1812038f1a91 100644
>> --- a/drivers/infiniband/core/device.c
>> +++ b/drivers/infiniband/core/device.c
>> @@ -499,12 +499,17 @@ static void ib_device_release(struct device *device)
>>  static int ib_device_uevent(const struct device *device,
>>  			    struct kobj_uevent_env *env)
>>  {
>> -	if (add_uevent_var(env, "NAME=%s", dev_name(device)))
>> +	const struct ib_device *dev =
>> +		container_of(device, struct ib_device, dev);
>> +
>> +	if (add_uevent_var(env, "NAME=%s", dev_name(&dev->dev)))
>>  		return -ENOMEM;
>>  
>> -	/*
>> -	 * It would be nice to pass the node GUID with the event...
>> -	 */
>> +	__be64 node_guid_be = dev->node_guid;
>> +	u64 node_guid = be64_to_cpu(node_guid_be);
>> +
>> +	if (add_uevent_var(env, "NODE_GUID=0x%llx", node_guid))
>> +		return -ENOMEM;
>>  
>>  	return 0;
>>  }
>> -- 
>> 2.34.1
>>
Leon Romanovsky March 10, 2025, 10:17 a.m. UTC | #3
On Mon, Mar 10, 2025 at 07:01:56AM +0000, Abhinav Jain wrote:
> On Sun, 9 Mar 2025 21:27:51 +0200, Leon Romanovsky wrote:
> >On Sun, Mar 09, 2025 at 05:57:31PM +0000, Abhinav Jain wrote:
> >> As per the comment, modify ib_device_uevent to publish the node
> >> GUID alongside device name, upon device state change.
> >> 
> >> Have compiled the file manually to ensure that it builds. Do not have
> >> a readily available IB hardware to test. Confirmed with checkpatch
> >> that the patch has no errors/warnings.
> >
> >I'm missing motivation for this patch. Why is this change needed?
> >
> >Thanks
> 
> Originally, I was looking at this function in order to solve a syzkaller
> bug. I noticed this comment from Jason and I assumed that the motivation
> would be to identify the node on which the event is happening.
> 
> With the name, users can identify nodes however Subnet Manager uses
> node_guid for discovery and configuration of the nodes. To conclude, I
> think just using the node name might not be sufficient for unambiguous
> and reliable device management in the network.

Up till now, it was sufficient. Let's add new uevent when actual use case
will be needed.

Thanks
diff mbox series

Patch

diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
index 0ded91f056f3..1812038f1a91 100644
--- a/drivers/infiniband/core/device.c
+++ b/drivers/infiniband/core/device.c
@@ -499,12 +499,17 @@  static void ib_device_release(struct device *device)
 static int ib_device_uevent(const struct device *device,
 			    struct kobj_uevent_env *env)
 {
-	if (add_uevent_var(env, "NAME=%s", dev_name(device)))
+	const struct ib_device *dev =
+		container_of(device, struct ib_device, dev);
+
+	if (add_uevent_var(env, "NAME=%s", dev_name(&dev->dev)))
 		return -ENOMEM;
 
-	/*
-	 * It would be nice to pass the node GUID with the event...
-	 */
+	__be64 node_guid_be = dev->node_guid;
+	u64 node_guid = be64_to_cpu(node_guid_be);
+
+	if (add_uevent_var(env, "NODE_GUID=0x%llx", node_guid))
+		return -ENOMEM;
 
 	return 0;
 }