diff mbox series

RDMA/efa: Fix node guid compiler warning

Message ID 20240924121603.16006-1-mrgolin@amazon.com (mailing list archive)
State Rejected
Headers show
Series RDMA/efa: Fix node guid compiler warning | expand

Commit Message

Michael Margolin Sept. 24, 2024, 12:16 p.m. UTC
The GUID is received in big-endian so align types accordingly to avoid
compiler warnings.

Closes: https://lore.kernel.org/oe-kbuild-all/202409032113.bvyVfsNp-lkp@intel.com/

Fixes: 04e36fd27a2a ("RDMA/efa: Add support for node guid")
Reported-by: kernel test robot <lkp@intel.com>
Reviewed-by: Yehuda Yitschak <yehuday@amazon.com>
Reviewed-by: Yonatan Nachum <ynachum@amazon.com>
Signed-off-by: Michael Margolin <mrgolin@amazon.com>
---
 drivers/infiniband/hw/efa/efa_com_cmd.c | 2 +-
 drivers/infiniband/hw/efa/efa_com_cmd.h | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

Comments

Jason Gunthorpe Sept. 24, 2024, 6 p.m. UTC | #1
On Tue, Sep 24, 2024 at 12:16:03PM +0000, Michael Margolin wrote:
> The GUID is received in big-endian so align types accordingly to avoid
> compiler warnings.
> 
> Closes: https://lore.kernel.org/oe-kbuild-all/202409032113.bvyVfsNp-lkp@intel.com/
> 
> Fixes: 04e36fd27a2a ("RDMA/efa: Add support for node guid")
> Reported-by: kernel test robot <lkp@intel.com>
> Reviewed-by: Yehuda Yitschak <yehuday@amazon.com>
> Reviewed-by: Yonatan Nachum <ynachum@amazon.com>
> Signed-off-by: Michael Margolin <mrgolin@amazon.com>
> ---
>  drivers/infiniband/hw/efa/efa_com_cmd.c | 2 +-
>  drivers/infiniband/hw/efa/efa_com_cmd.h | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/infiniband/hw/efa/efa_com_cmd.c b/drivers/infiniband/hw/efa/efa_com_cmd.c
> index 5a774925cdea..5754da4e6ff8 100644
> --- a/drivers/infiniband/hw/efa/efa_com_cmd.c
> +++ b/drivers/infiniband/hw/efa/efa_com_cmd.c
> @@ -465,7 +465,7 @@ int efa_com_get_device_attr(struct efa_com_dev *edev,
>  	result->db_bar = resp.u.device_attr.db_bar;
>  	result->max_rdma_size = resp.u.device_attr.max_rdma_size;
>  	result->device_caps = resp.u.device_attr.device_caps;
> -	result->guid = resp.u.device_attr.guid;
> +	result->guid = (__force __be64)resp.u.device_attr.guid;

That can't be right, use the proper conversion function, or the proper
type..

Jason
Michael Margolin Sept. 26, 2024, 12:56 p.m. UTC | #2
On 9/24/2024 9:00 PM, Jason Gunthorpe wrote:

> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you can confirm the sender and know the content is safe.
>
>
>
> On Tue, Sep 24, 2024 at 12:16:03PM +0000, Michael Margolin wrote:
>> The GUID is received in big-endian so align types accordingly to avoid
>> compiler warnings.
>>
>> Closes: https://lore.kernel.org/oe-kbuild-all/202409032113.bvyVfsNp-lkp@intel.com/
>>
>> Fixes: 04e36fd27a2a ("RDMA/efa: Add support for node guid")
>> Reported-by: kernel test robot <lkp@intel.com>
>> Reviewed-by: Yehuda Yitschak <yehuday@amazon.com>
>> Reviewed-by: Yonatan Nachum <ynachum@amazon.com>
>> Signed-off-by: Michael Margolin <mrgolin@amazon.com>
>> ---
>>   drivers/infiniband/hw/efa/efa_com_cmd.c | 2 +-
>>   drivers/infiniband/hw/efa/efa_com_cmd.h | 2 +-
>>   2 files changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/infiniband/hw/efa/efa_com_cmd.c b/drivers/infiniband/hw/efa/efa_com_cmd.c
>> index 5a774925cdea..5754da4e6ff8 100644
>> --- a/drivers/infiniband/hw/efa/efa_com_cmd.c
>> +++ b/drivers/infiniband/hw/efa/efa_com_cmd.c
>> @@ -465,7 +465,7 @@ int efa_com_get_device_attr(struct efa_com_dev *edev,
>>        result->db_bar = resp.u.device_attr.db_bar;
>>        result->max_rdma_size = resp.u.device_attr.max_rdma_size;
>>        result->device_caps = resp.u.device_attr.device_caps;
>> -     result->guid = resp.u.device_attr.guid;
>> +     result->guid = (__force __be64)resp.u.device_attr.guid;
> That can't be right, use the proper conversion function, or the proper
> type..
>
> Jason
The current assumption in the driver is that data from the device 
arrives in a correct byte order for the CPU, while the guid field is in 
reversed order.

Would you suggest doing something like:

>-     result->guid = resp.u.device_attr.guid;
>+     result->guid = __cpu_to_be64(__swab64(resp.u.device_attr.guid));

Michael
Michael Margolin Sept. 26, 2024, 1:25 p.m. UTC | #3
On 9/26/2024 3:56 PM, Margolin, Michael wrote:
> On 9/24/2024 9:00 PM, Jason Gunthorpe wrote:
>
>> CAUTION: This email originated from outside of the organization. Do 
>> not click links or open attachments unless you can confirm the sender 
>> and know the content is safe.
>>
>>
>>
>> On Tue, Sep 24, 2024 at 12:16:03PM +0000, Michael Margolin wrote:
>>> The GUID is received in big-endian so align types accordingly to avoid
>>> compiler warnings.
>>>
>>> Closes: 
>>> https://lore.kernel.org/oe-kbuild-all/202409032113.bvyVfsNp-lkp@intel.com/
>>>
>>> Fixes: 04e36fd27a2a ("RDMA/efa: Add support for node guid")
>>> Reported-by: kernel test robot <lkp@intel.com>
>>> Reviewed-by: Yehuda Yitschak <yehuday@amazon.com>
>>> Reviewed-by: Yonatan Nachum <ynachum@amazon.com>
>>> Signed-off-by: Michael Margolin <mrgolin@amazon.com>
>>> ---
>>>   drivers/infiniband/hw/efa/efa_com_cmd.c | 2 +-
>>>   drivers/infiniband/hw/efa/efa_com_cmd.h | 2 +-
>>>   2 files changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/infiniband/hw/efa/efa_com_cmd.c 
>>> b/drivers/infiniband/hw/efa/efa_com_cmd.c
>>> index 5a774925cdea..5754da4e6ff8 100644
>>> --- a/drivers/infiniband/hw/efa/efa_com_cmd.c
>>> +++ b/drivers/infiniband/hw/efa/efa_com_cmd.c
>>> @@ -465,7 +465,7 @@ int efa_com_get_device_attr(struct efa_com_dev 
>>> *edev,
>>>        result->db_bar = resp.u.device_attr.db_bar;
>>>        result->max_rdma_size = resp.u.device_attr.max_rdma_size;
>>>        result->device_caps = resp.u.device_attr.device_caps;
>>> -     result->guid = resp.u.device_attr.guid;
>>> +     result->guid = (__force __be64)resp.u.device_attr.guid;
>> That can't be right, use the proper conversion function, or the proper
>> type..
>>
>> Jason
> The current assumption in the driver is that data from the device 
> arrives in a correct byte order for the CPU, while the guid field is 
> in reversed order.
>
> Would you suggest doing something like:
>
>> -     result->guid = resp.u.device_attr.guid;
>> +     result->guid = __cpu_to_be64(__swab64(resp.u.device_attr.guid));
>
> Michael
>
Actually that's wrong, the device always sets guid in BE order so no 
swap is needed in the driver in any case.
Jason Gunthorpe Sept. 26, 2024, 2:54 p.m. UTC | #4
On Thu, Sep 26, 2024 at 04:25:19PM +0300, Margolin, Michael wrote:

> Actually that's wrong, the device always sets guid in BE order so no
> swap is needed in the driver in any case.

They you just mark it as _be64 in the struct and there is no reason
for the __force ?

Jason
Michael Margolin Sept. 26, 2024, 8:03 p.m. UTC | #5
On 9/26/2024 5:54 PM, Jason Gunthorpe wrote:
> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you can confirm the sender and know the content is safe.
>
>
>
> On Thu, Sep 26, 2024 at 04:25:19PM +0300, Margolin, Michael wrote:
>
>> Actually that's wrong, the device always sets guid in BE order so no
>> swap is needed in the driver in any case.
> They you just mark it as _be64 in the struct and there is no reason
> for the __force ?
>
> Jason

That's probably the most correct way but I prefer to avoid introducing 
kernel specific types in a shared interface file.

Michael
Jason Gunthorpe Sept. 26, 2024, 10:34 p.m. UTC | #6
On Thu, Sep 26, 2024 at 11:03:57PM +0300, Margolin, Michael wrote:
> 
> On 9/26/2024 5:54 PM, Jason Gunthorpe wrote:
> > CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you can confirm the sender and know the content is safe.
> > 
> > 
> > 
> > On Thu, Sep 26, 2024 at 04:25:19PM +0300, Margolin, Michael wrote:
> > 
> > > Actually that's wrong, the device always sets guid in BE order so no
> > > swap is needed in the driver in any case.
> > They you just mark it as _be64 in the struct and there is no reason
> > for the __force ?
> > 
> > Jason
> 
> That's probably the most correct way but I prefer to avoid introducing
> kernel specific types in a shared interface file.

?

what is a "shared interface file" ?

That doesn't sound like a linux thing

Jason
Michael Margolin Oct. 2, 2024, 12:30 p.m. UTC | #7
On 9/27/2024 1:34 AM, Jason Gunthorpe wrote:
> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you can confirm the sender and know the content is safe.
>
>
>
> On Thu, Sep 26, 2024 at 11:03:57PM +0300, Margolin, Michael wrote:
>> On 9/26/2024 5:54 PM, Jason Gunthorpe wrote:
>>> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you can confirm the sender and know the content is safe.
>>>
>>>
>>>
>>> On Thu, Sep 26, 2024 at 04:25:19PM +0300, Margolin, Michael wrote:
>>>
>>>> Actually that's wrong, the device always sets guid in BE order so no
>>>> swap is needed in the driver in any case.
>>> They you just mark it as _be64 in the struct and there is no reason
>>> for the __force ?
>>>
>>> Jason
>> That's probably the most correct way but I prefer to avoid introducing
>> kernel specific types in a shared interface file.
> ?
>
> what is a "shared interface file" ?
>
> That doesn't sound like a linux thing
>
> Jason

Nothing particularly related to linux, just a common practice of having 
the same interface on both sides (driver and device in this case).

Michael
Jason Gunthorpe Oct. 2, 2024, 1:04 p.m. UTC | #8
On Wed, Oct 02, 2024 at 03:30:30PM +0300, Margolin, Michael wrote:

> > > > > Actually that's wrong, the device always sets guid in BE order so no
> > > > > swap is needed in the driver in any case.

> > > > They you just mark it as _be64 in the struct and there is no reason
> > > > for the __force ?
> > > > 
> > > That's probably the most correct way but I prefer to avoid introducing
> > > kernel specific types in a shared interface file.
> > ?
> > 
> > what is a "shared interface file" ?
> > 
> > That doesn't sound like a linux thing
> 
> Nothing particularly related to linux, just a common practice of having the
> same interface on both sides (driver and device in this case).

Well, you still have to use correct types in the linux headers and
work that out somehow

Jason
Leon Romanovsky Oct. 6, 2024, 1:19 p.m. UTC | #9
On Tue, Sep 24, 2024 at 12:16:03PM +0000, Michael Margolin wrote:
> The GUID is received in big-endian so align types accordingly to avoid
> compiler warnings.
> 
> Closes: https://lore.kernel.org/oe-kbuild-all/202409032113.bvyVfsNp-lkp@intel.com/
> 
> Fixes: 04e36fd27a2a ("RDMA/efa: Add support for node guid")
> Reported-by: kernel test robot <lkp@intel.com>
> Reviewed-by: Yehuda Yitschak <yehuday@amazon.com>
> Reviewed-by: Yonatan Nachum <ynachum@amazon.com>
> Signed-off-by: Michael Margolin <mrgolin@amazon.com>
> ---
>  drivers/infiniband/hw/efa/efa_com_cmd.c | 2 +-
>  drivers/infiniband/hw/efa/efa_com_cmd.h | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/infiniband/hw/efa/efa_com_cmd.c b/drivers/infiniband/hw/efa/efa_com_cmd.c
> index 5a774925cdea..5754da4e6ff8 100644
> --- a/drivers/infiniband/hw/efa/efa_com_cmd.c
> +++ b/drivers/infiniband/hw/efa/efa_com_cmd.c
> @@ -465,7 +465,7 @@ int efa_com_get_device_attr(struct efa_com_dev *edev,
>  	result->db_bar = resp.u.device_attr.db_bar;
>  	result->max_rdma_size = resp.u.device_attr.max_rdma_size;
>  	result->device_caps = resp.u.device_attr.device_caps;
> -	result->guid = resp.u.device_attr.guid;
> +	result->guid = (__force __be64)resp.u.device_attr.guid;

Based on the discussion, I'm dropping this patch.

Thanks
diff mbox series

Patch

diff --git a/drivers/infiniband/hw/efa/efa_com_cmd.c b/drivers/infiniband/hw/efa/efa_com_cmd.c
index 5a774925cdea..5754da4e6ff8 100644
--- a/drivers/infiniband/hw/efa/efa_com_cmd.c
+++ b/drivers/infiniband/hw/efa/efa_com_cmd.c
@@ -465,7 +465,7 @@  int efa_com_get_device_attr(struct efa_com_dev *edev,
 	result->db_bar = resp.u.device_attr.db_bar;
 	result->max_rdma_size = resp.u.device_attr.max_rdma_size;
 	result->device_caps = resp.u.device_attr.device_caps;
-	result->guid = resp.u.device_attr.guid;
+	result->guid = (__force __be64)resp.u.device_attr.guid;
 
 	if (result->admin_api_version < 1) {
 		ibdev_err_ratelimited(
diff --git a/drivers/infiniband/hw/efa/efa_com_cmd.h b/drivers/infiniband/hw/efa/efa_com_cmd.h
index 668d033f7477..56382cd1b7c4 100644
--- a/drivers/infiniband/hw/efa/efa_com_cmd.h
+++ b/drivers/infiniband/hw/efa/efa_com_cmd.h
@@ -112,7 +112,7 @@  struct efa_com_get_device_attr_result {
 	u8 addr[EFA_GID_SIZE];
 	u64 page_size_cap;
 	u64 max_mr_pages;
-	u64 guid;
+	__be64 guid;
 	u32 mtu;
 	u32 fw_version;
 	u32 admin_api_version;