All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1 1/1] platform/mellanox: mlxbf-tmfifo: Fix a warning message
@ 2023-10-05 12:18 Liming Sun
  2023-10-06 12:53 ` Hans de Goede
  2023-10-12 23:02 ` [PATCH v2] " Liming Sun
  0 siblings, 2 replies; 9+ messages in thread
From: Liming Sun @ 2023-10-05 12:18 UTC (permalink / raw)
  To: Vadim Pasternak, David Thompson, Hans de Goede, Mark Gross,
	Dan Carpenter
  Cc: Liming Sun, platform-driver-x86, linux-kernel

This commit fixes the smatch static checker warning in
mlxbf_tmfifo_rxtx_word() which complains data not initialized at
line 634 when IS_VRING_DROP() is TRUE. This is not a real bug since
line 634 is for Tx while IS_VRING_DROP() is only set for Rx. So there
is no case that line 634 is executed when IS_VRING_DROP() is TRUE.

This commit initializes the local data variable to avoid unnecessary
confusion to those static analyzing tools.

Signed-off-by: Liming Sun <limings@nvidia.com>
---
 drivers/platform/mellanox/mlxbf-tmfifo.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/platform/mellanox/mlxbf-tmfifo.c b/drivers/platform/mellanox/mlxbf-tmfifo.c
index f3696a54a2bd..ccc4b51d3379 100644
--- a/drivers/platform/mellanox/mlxbf-tmfifo.c
+++ b/drivers/platform/mellanox/mlxbf-tmfifo.c
@@ -595,8 +595,8 @@ static void mlxbf_tmfifo_rxtx_word(struct mlxbf_tmfifo_vring *vring,
 {
 	struct virtio_device *vdev = vring->vq->vdev;
 	struct mlxbf_tmfifo *fifo = vring->fifo;
+	u64 data = 0;
 	void *addr;
-	u64 data;
 
 	/* Get the buffer address of this desc. */
 	addr = phys_to_virt(virtio64_to_cpu(vdev, desc->addr));
-- 
2.30.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v1 1/1] platform/mellanox: mlxbf-tmfifo: Fix a warning message
  2023-10-05 12:18 [PATCH v1 1/1] platform/mellanox: mlxbf-tmfifo: Fix a warning message Liming Sun
@ 2023-10-06 12:53 ` Hans de Goede
  2023-10-06 15:50   ` Liming Sun
  2023-10-12 23:02 ` [PATCH v2] " Liming Sun
  1 sibling, 1 reply; 9+ messages in thread
From: Hans de Goede @ 2023-10-06 12:53 UTC (permalink / raw)
  To: Liming Sun, Vadim Pasternak, David Thompson, Mark Gross, Dan Carpenter
  Cc: platform-driver-x86, linux-kernel

Hi Liming,

On 10/5/23 14:18, Liming Sun wrote:
> This commit fixes the smatch static checker warning in
> mlxbf_tmfifo_rxtx_word() which complains data not initialized at
> line 634 when IS_VRING_DROP() is TRUE. This is not a real bug since
> line 634 is for Tx while IS_VRING_DROP() is only set for Rx. So there
> is no case that line 634 is executed when IS_VRING_DROP() is TRUE.
> 
> This commit initializes the local data variable to avoid unnecessary
> confusion to those static analyzing tools.
> 
> Signed-off-by: Liming Sun <limings@nvidia.com>
> ---
>  drivers/platform/mellanox/mlxbf-tmfifo.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/platform/mellanox/mlxbf-tmfifo.c b/drivers/platform/mellanox/mlxbf-tmfifo.c
> index f3696a54a2bd..ccc4b51d3379 100644
> --- a/drivers/platform/mellanox/mlxbf-tmfifo.c
> +++ b/drivers/platform/mellanox/mlxbf-tmfifo.c
> @@ -595,8 +595,8 @@ static void mlxbf_tmfifo_rxtx_word(struct mlxbf_tmfifo_vring *vring,
>  {
>  	struct virtio_device *vdev = vring->vq->vdev;
>  	struct mlxbf_tmfifo *fifo = vring->fifo;
> +	u64 data = 0;
>  	void *addr;
> -	u64 data;
>  
>  	/* Get the buffer address of this desc. */
>  	addr = phys_to_virt(virtio64_to_cpu(vdev, desc->addr));


This will fix the warning but not the issue at hand. As Dan pointed
out in his original bug report, the issue is that after:

78034cbece79 ("platform/mellanox: mlxbf-tmfifo: Drop the Rx packet if no descriptors")

We now have this IS_VRING_DROP() check in the path, which despite
the subject writeq(data, fifo->tx.data);is currently being applied to both rx and tx vring-s
and when this returns true the memcpy from the ring to &data
will not happen, but the code will still do:

writeq(data, fifo->tx.data);

So you may have silenced the warning now, but you will still write
data not coming from the vring to transmit. The only difference
is you are now guaranteed to write all zeroes.

Note another older issue is that if you hit the not enough space
path:

       } else {
                /* Leftover bytes. */
                if (!IS_VRING_DROP(vring)) {
                        if (is_rx)
                                memcpy(addr + vring->cur_len, &data,
                                       len - vring->cur_len);
                        else
                                memcpy(&data, addr + vring->cur_len,
                                       len - vring->cur_len);
                }
                vring->cur_len = len;
        }

Then even if IS_VRING_DROP() returns true you are only initializing some bytes of the 8 bytes data variable and the other bytes will stay at whatever random value they had before and you end up writing this random bytes when doing:

writeq(data, fifo->tx.data);

Regards,

Hans





^ permalink raw reply	[flat|nested] 9+ messages in thread

* RE: [PATCH v1 1/1] platform/mellanox: mlxbf-tmfifo: Fix a warning message
  2023-10-06 12:53 ` Hans de Goede
@ 2023-10-06 15:50   ` Liming Sun
  2023-10-06 17:06     ` Hans de Goede
  0 siblings, 1 reply; 9+ messages in thread
From: Liming Sun @ 2023-10-06 15:50 UTC (permalink / raw)
  To: Hans de Goede, Vadim Pasternak, David Thompson, Mark Gross,
	Dan Carpenter
  Cc: platform-driver-x86, linux-kernel

Thanks Hans.

Below is the logic:

IS_VRING_DROP() is ONLY set to TRUE for Rx, which is done in two places:
Line 696:  *desc = &vring->drop_desc;
Line 742: desc = &vring->drop_desc;

So line 634 below will never happen when IS_VRING_DROP() is TRUE due the checking of line 633.
633         if (!is_rx)
 634                 writeq(data, fifo->tx.data);

Please correct me if it's my misunderstanding.

Thanks,
Liming

> -----Original Message-----
> From: Hans de Goede <hdegoede@redhat.com>
> Sent: Friday, October 6, 2023 8:54 AM
> To: Liming Sun <limings@nvidia.com>; Vadim Pasternak
> <vadimp@nvidia.com>; David Thompson <davthompson@nvidia.com>; Mark
> Gross <markgross@kernel.org>; Dan Carpenter <dan.carpenter@linaro.org>
> Cc: platform-driver-x86@vger.kernel.org; linux-kernel@vger.kernel.org
> Subject: Re: [PATCH v1 1/1] platform/mellanox: mlxbf-tmfifo: Fix a warning
> message
> 
> Hi Liming,
> 
> On 10/5/23 14:18, Liming Sun wrote:
> > This commit fixes the smatch static checker warning in
> > mlxbf_tmfifo_rxtx_word() which complains data not initialized at
> > line 634 when IS_VRING_DROP() is TRUE. This is not a real bug since
> > line 634 is for Tx while IS_VRING_DROP() is only set for Rx. So there
> > is no case that line 634 is executed when IS_VRING_DROP() is TRUE.
> >
> > This commit initializes the local data variable to avoid unnecessary
> > confusion to those static analyzing tools.
> >
> > Signed-off-by: Liming Sun <limings@nvidia.com>
> > ---
> >  drivers/platform/mellanox/mlxbf-tmfifo.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/platform/mellanox/mlxbf-tmfifo.c
> b/drivers/platform/mellanox/mlxbf-tmfifo.c
> > index f3696a54a2bd..ccc4b51d3379 100644
> > --- a/drivers/platform/mellanox/mlxbf-tmfifo.c
> > +++ b/drivers/platform/mellanox/mlxbf-tmfifo.c
> > @@ -595,8 +595,8 @@ static void mlxbf_tmfifo_rxtx_word(struct
> mlxbf_tmfifo_vring *vring,
> >  {
> >  	struct virtio_device *vdev = vring->vq->vdev;
> >  	struct mlxbf_tmfifo *fifo = vring->fifo;
> > +	u64 data = 0;
> >  	void *addr;
> > -	u64 data;
> >
> >  	/* Get the buffer address of this desc. */
> >  	addr = phys_to_virt(virtio64_to_cpu(vdev, desc->addr));
> 
> 
> This will fix the warning but not the issue at hand. As Dan pointed
> out in his original bug report, the issue is that after:
> 
> 78034cbece79 ("platform/mellanox: mlxbf-tmfifo: Drop the Rx packet if no
> descriptors")
> 
> We now have this IS_VRING_DROP() check in the path, which despite
> the subject writeq(data, fifo->tx.data);is currently being applied to both rx and
> tx vring-s
> and when this returns true the memcpy from the ring to &data
> will not happen, but the code will still do:
> 
> writeq(data, fifo->tx.data);
> 
> So you may have silenced the warning now, but you will still write
> data not coming from the vring to transmit. The only difference
> is you are now guaranteed to write all zeroes.
> 
> Note another older issue is that if you hit the not enough space
> path:
> 
>        } else {
>                 /* Leftover bytes. */
>                 if (!IS_VRING_DROP(vring)) {
>                         if (is_rx)
>                                 memcpy(addr + vring->cur_len, &data,
>                                        len - vring->cur_len);
>                         else
>                                 memcpy(&data, addr + vring->cur_len,
>                                        len - vring->cur_len);
>                 }
>                 vring->cur_len = len;
>         }
> 
> Then even if IS_VRING_DROP() returns true you are only initializing some bytes
> of the 8 bytes data variable and the other bytes will stay at whatever random
> value they had before and you end up writing this random bytes when doing:
> 
> writeq(data, fifo->tx.data);
> 
> Regards,
> 
> Hans
> 
> 
> 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v1 1/1] platform/mellanox: mlxbf-tmfifo: Fix a warning message
  2023-10-06 15:50   ` Liming Sun
@ 2023-10-06 17:06     ` Hans de Goede
  2023-10-09 19:28       ` Liming Sun
  0 siblings, 1 reply; 9+ messages in thread
From: Hans de Goede @ 2023-10-06 17:06 UTC (permalink / raw)
  To: Liming Sun, Vadim Pasternak, David Thompson, Mark Gross, Dan Carpenter
  Cc: platform-driver-x86, linux-kernel

Hi Liming,

On 10/6/23 17:50, Liming Sun wrote:
> Thanks Hans.
> 
> Below is the logic:
> 
> IS_VRING_DROP() is ONLY set to TRUE for Rx, which is done in two places:
> Line 696:  *desc = &vring->drop_desc;
> Line 742: desc = &vring->drop_desc;
> 
> So line 634 below will never happen when IS_VRING_DROP() is TRUE due the checking of line 633.
> 633         if (!is_rx)
>  634                 writeq(data, fifo->tx.data);
> 
> Please correct me if it's my misunderstanding.

If IS_VRING_DROP() is ONLY set to TRUE for Rx, then it
should simply *not* be checked *at all* in the tx paths.

Just setting data = 0 is simply papering over the warning
without actually fixing anything.

Regards,

Hans




>> -----Original Message-----
>> From: Hans de Goede <hdegoede@redhat.com>
>> Sent: Friday, October 6, 2023 8:54 AM
>> To: Liming Sun <limings@nvidia.com>; Vadim Pasternak
>> <vadimp@nvidia.com>; David Thompson <davthompson@nvidia.com>; Mark
>> Gross <markgross@kernel.org>; Dan Carpenter <dan.carpenter@linaro.org>
>> Cc: platform-driver-x86@vger.kernel.org; linux-kernel@vger.kernel.org
>> Subject: Re: [PATCH v1 1/1] platform/mellanox: mlxbf-tmfifo: Fix a warning
>> message
>>
>> Hi Liming,
>>
>> On 10/5/23 14:18, Liming Sun wrote:
>>> This commit fixes the smatch static checker warning in
>>> mlxbf_tmfifo_rxtx_word() which complains data not initialized at
>>> line 634 when IS_VRING_DROP() is TRUE. This is not a real bug since
>>> line 634 is for Tx while IS_VRING_DROP() is only set for Rx. So there
>>> is no case that line 634 is executed when IS_VRING_DROP() is TRUE.
>>>
>>> This commit initializes the local data variable to avoid unnecessary
>>> confusion to those static analyzing tools.
>>>
>>> Signed-off-by: Liming Sun <limings@nvidia.com>
>>> ---
>>>  drivers/platform/mellanox/mlxbf-tmfifo.c | 2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/platform/mellanox/mlxbf-tmfifo.c
>> b/drivers/platform/mellanox/mlxbf-tmfifo.c
>>> index f3696a54a2bd..ccc4b51d3379 100644
>>> --- a/drivers/platform/mellanox/mlxbf-tmfifo.c
>>> +++ b/drivers/platform/mellanox/mlxbf-tmfifo.c
>>> @@ -595,8 +595,8 @@ static void mlxbf_tmfifo_rxtx_word(struct
>> mlxbf_tmfifo_vring *vring,
>>>  {
>>>  	struct virtio_device *vdev = vring->vq->vdev;
>>>  	struct mlxbf_tmfifo *fifo = vring->fifo;
>>> +	u64 data = 0;
>>>  	void *addr;
>>> -	u64 data;
>>>
>>>  	/* Get the buffer address of this desc. */
>>>  	addr = phys_to_virt(virtio64_to_cpu(vdev, desc->addr));
>>
>>
>> This will fix the warning but not the issue at hand. As Dan pointed
>> out in his original bug report, the issue is that after:
>>
>> 78034cbece79 ("platform/mellanox: mlxbf-tmfifo: Drop the Rx packet if no
>> descriptors")
>>
>> We now have this IS_VRING_DROP() check in the path, which despite
>> the subject writeq(data, fifo->tx.data);is currently being applied to both rx and
>> tx vring-s
>> and when this returns true the memcpy from the ring to &data
>> will not happen, but the code will still do:
>>
>> writeq(data, fifo->tx.data);
>>
>> So you may have silenced the warning now, but you will still write
>> data not coming from the vring to transmit. The only difference
>> is you are now guaranteed to write all zeroes.
>>
>> Note another older issue is that if you hit the not enough space
>> path:
>>
>>        } else {
>>                 /* Leftover bytes. */
>>                 if (!IS_VRING_DROP(vring)) {
>>                         if (is_rx)
>>                                 memcpy(addr + vring->cur_len, &data,
>>                                        len - vring->cur_len);
>>                         else
>>                                 memcpy(&data, addr + vring->cur_len,
>>                                        len - vring->cur_len);
>>                 }
>>                 vring->cur_len = len;
>>         }
>>
>> Then even if IS_VRING_DROP() returns true you are only initializing some bytes
>> of the 8 bytes data variable and the other bytes will stay at whatever random
>> value they had before and you end up writing this random bytes when doing:
>>
>> writeq(data, fifo->tx.data);
>>
>> Regards,
>>
>> Hans
>>
>>
>>
> 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* RE: [PATCH v1 1/1] platform/mellanox: mlxbf-tmfifo: Fix a warning message
  2023-10-06 17:06     ` Hans de Goede
@ 2023-10-09 19:28       ` Liming Sun
  2023-10-10  8:05         ` Hans de Goede
  0 siblings, 1 reply; 9+ messages in thread
From: Liming Sun @ 2023-10-09 19:28 UTC (permalink / raw)
  To: Hans de Goede, Vadim Pasternak, David Thompson, Mark Gross,
	Dan Carpenter
  Cc: platform-driver-x86, linux-kernel



> -----Original Message-----
> From: Hans de Goede <hdegoede@redhat.com>
> Sent: Friday, October 6, 2023 1:07 PM
> To: Liming Sun <limings@nvidia.com>; Vadim Pasternak
> <vadimp@nvidia.com>; David Thompson <davthompson@nvidia.com>; Mark
> Gross <markgross@kernel.org>; Dan Carpenter <dan.carpenter@linaro.org>
> Cc: platform-driver-x86@vger.kernel.org; linux-kernel@vger.kernel.org
> Subject: Re: [PATCH v1 1/1] platform/mellanox: mlxbf-tmfifo: Fix a warning
> message
> 
> Hi Liming,
> 
> On 10/6/23 17:50, Liming Sun wrote:
> > Thanks Hans.
> >
> > Below is the logic:
> >
> > IS_VRING_DROP() is ONLY set to TRUE for Rx, which is done in two places:
> > Line 696:  *desc = &vring->drop_desc;
> > Line 742: desc = &vring->drop_desc;
> >
> > So line 634 below will never happen when IS_VRING_DROP() is TRUE due the
> checking of line 633.
> > 633         if (!is_rx)
> >  634                 writeq(data, fifo->tx.data);
> >
> > Please correct me if it's my misunderstanding.
> 
> If IS_VRING_DROP() is ONLY set to TRUE for Rx, then it
> should simply *not* be checked *at all* in the tx paths.

IS_VRING_DROP() itself is actually not checked in the Tx path.  It is the "! IS_VRING_DROP()" that checks the Rx/Tx, something like:

if (!IS_VRING_DROP(vring)) {
	if (is_rx)
		...
	else
		...
}

The reason is that I thought we might reuse the ' IS_VRING_DROP' for Tx later.

However, if the logic looks confusing, I could revise it to something like:

if (is_rx) {
	if (!IS_VRING_DROP(vring)) 
		...
} else {
		...
}

Thanks.
> 
> Just setting data = 0 is simply papering over the warning
> without actually fixing anything.
> 
> Regards,
> 
> Hans
> 
> 
> 
> 
> >> -----Original Message-----
> >> From: Hans de Goede <hdegoede@redhat.com>
> >> Sent: Friday, October 6, 2023 8:54 AM
> >> To: Liming Sun <limings@nvidia.com>; Vadim Pasternak
> >> <vadimp@nvidia.com>; David Thompson <davthompson@nvidia.com>;
> Mark
> >> Gross <markgross@kernel.org>; Dan Carpenter <dan.carpenter@linaro.org>
> >> Cc: platform-driver-x86@vger.kernel.org; linux-kernel@vger.kernel.org
> >> Subject: Re: [PATCH v1 1/1] platform/mellanox: mlxbf-tmfifo: Fix a warning
> >> message
> >>
> >> Hi Liming,
> >>
> >> On 10/5/23 14:18, Liming Sun wrote:
> >>> This commit fixes the smatch static checker warning in
> >>> mlxbf_tmfifo_rxtx_word() which complains data not initialized at
> >>> line 634 when IS_VRING_DROP() is TRUE. This is not a real bug since
> >>> line 634 is for Tx while IS_VRING_DROP() is only set for Rx. So there
> >>> is no case that line 634 is executed when IS_VRING_DROP() is TRUE.
> >>>
> >>> This commit initializes the local data variable to avoid unnecessary
> >>> confusion to those static analyzing tools.
> >>>
> >>> Signed-off-by: Liming Sun <limings@nvidia.com>
> >>> ---
> >>>  drivers/platform/mellanox/mlxbf-tmfifo.c | 2 +-
> >>>  1 file changed, 1 insertion(+), 1 deletion(-)
> >>>
> >>> diff --git a/drivers/platform/mellanox/mlxbf-tmfifo.c
> >> b/drivers/platform/mellanox/mlxbf-tmfifo.c
> >>> index f3696a54a2bd..ccc4b51d3379 100644
> >>> --- a/drivers/platform/mellanox/mlxbf-tmfifo.c
> >>> +++ b/drivers/platform/mellanox/mlxbf-tmfifo.c
> >>> @@ -595,8 +595,8 @@ static void mlxbf_tmfifo_rxtx_word(struct
> >> mlxbf_tmfifo_vring *vring,
> >>>  {
> >>>  	struct virtio_device *vdev = vring->vq->vdev;
> >>>  	struct mlxbf_tmfifo *fifo = vring->fifo;
> >>> +	u64 data = 0;
> >>>  	void *addr;
> >>> -	u64 data;
> >>>
> >>>  	/* Get the buffer address of this desc. */
> >>>  	addr = phys_to_virt(virtio64_to_cpu(vdev, desc->addr));
> >>
> >>
> >> This will fix the warning but not the issue at hand. As Dan pointed
> >> out in his original bug report, the issue is that after:
> >>
> >> 78034cbece79 ("platform/mellanox: mlxbf-tmfifo: Drop the Rx packet if no
> >> descriptors")
> >>
> >> We now have this IS_VRING_DROP() check in the path, which despite
> >> the subject writeq(data, fifo->tx.data);is currently being applied to both rx
> and
> >> tx vring-s
> >> and when this returns true the memcpy from the ring to &data
> >> will not happen, but the code will still do:
> >>
> >> writeq(data, fifo->tx.data);
> >>
> >> So you may have silenced the warning now, but you will still write
> >> data not coming from the vring to transmit. The only difference
> >> is you are now guaranteed to write all zeroes.
> >>
> >> Note another older issue is that if you hit the not enough space
> >> path:
> >>
> >>        } else {
> >>                 /* Leftover bytes. */
> >>                 if (!IS_VRING_DROP(vring)) {
> >>                         if (is_rx)
> >>                                 memcpy(addr + vring->cur_len, &data,
> >>                                        len - vring->cur_len);
> >>                         else
> >>                                 memcpy(&data, addr + vring->cur_len,
> >>                                        len - vring->cur_len);
> >>                 }
> >>                 vring->cur_len = len;
> >>         }
> >>
> >> Then even if IS_VRING_DROP() returns true you are only initializing some
> bytes
> >> of the 8 bytes data variable and the other bytes will stay at whatever
> random
> >> value they had before and you end up writing this random bytes when
> doing:
> >>
> >> writeq(data, fifo->tx.data);
> >>
> >> Regards,
> >>
> >> Hans
> >>
> >>
> >>
> >


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v1 1/1] platform/mellanox: mlxbf-tmfifo: Fix a warning message
  2023-10-09 19:28       ` Liming Sun
@ 2023-10-10  8:05         ` Hans de Goede
  2023-10-12 23:03           ` Liming Sun
  0 siblings, 1 reply; 9+ messages in thread
From: Hans de Goede @ 2023-10-10  8:05 UTC (permalink / raw)
  To: Liming Sun, Vadim Pasternak, David Thompson, Mark Gross, Dan Carpenter
  Cc: platform-driver-x86, linux-kernel

Hi,

On 10/9/23 21:28, Liming Sun wrote:
> 
> 
>> -----Original Message-----
>> From: Hans de Goede <hdegoede@redhat.com>
>> Sent: Friday, October 6, 2023 1:07 PM
>> To: Liming Sun <limings@nvidia.com>; Vadim Pasternak
>> <vadimp@nvidia.com>; David Thompson <davthompson@nvidia.com>; Mark
>> Gross <markgross@kernel.org>; Dan Carpenter <dan.carpenter@linaro.org>
>> Cc: platform-driver-x86@vger.kernel.org; linux-kernel@vger.kernel.org
>> Subject: Re: [PATCH v1 1/1] platform/mellanox: mlxbf-tmfifo: Fix a warning
>> message
>>
>> Hi Liming,
>>
>> On 10/6/23 17:50, Liming Sun wrote:
>>> Thanks Hans.
>>>
>>> Below is the logic:
>>>
>>> IS_VRING_DROP() is ONLY set to TRUE for Rx, which is done in two places:
>>> Line 696:  *desc = &vring->drop_desc;
>>> Line 742: desc = &vring->drop_desc;
>>>
>>> So line 634 below will never happen when IS_VRING_DROP() is TRUE due the
>> checking of line 633.
>>> 633         if (!is_rx)
>>>  634                 writeq(data, fifo->tx.data);
>>>
>>> Please correct me if it's my misunderstanding.
>>
>> If IS_VRING_DROP() is ONLY set to TRUE for Rx, then it
>> should simply *not* be checked *at all* in the tx paths.
> 
> IS_VRING_DROP() itself is actually not checked in the Tx path.  It is the "! IS_VRING_DROP()" that checks the Rx/Tx, something like:
> 
> if (!IS_VRING_DROP(vring)) {
> 	if (is_rx)
> 		...
> 	else
> 		...
> }
> 
> The reason is that I thought we might reuse the ' IS_VRING_DROP' for Tx later.
> 
> However, if the logic looks confusing, I could revise it to something like:
> 
> if (is_rx) {
> 	if (!IS_VRING_DROP(vring)) 
> 		...
> } else {
> 		...
> }

Yes please revise the log to look like this, this should also
fix the warning without needing to initialize data to 0.

Since now in the tx path you are guaranteed to first fill
data before sending it.

Regards,

Hans



>>>> -----Original Message-----
>>>> From: Hans de Goede <hdegoede@redhat.com>
>>>> Sent: Friday, October 6, 2023 8:54 AM
>>>> To: Liming Sun <limings@nvidia.com>; Vadim Pasternak
>>>> <vadimp@nvidia.com>; David Thompson <davthompson@nvidia.com>;
>> Mark
>>>> Gross <markgross@kernel.org>; Dan Carpenter <dan.carpenter@linaro.org>
>>>> Cc: platform-driver-x86@vger.kernel.org; linux-kernel@vger.kernel.org
>>>> Subject: Re: [PATCH v1 1/1] platform/mellanox: mlxbf-tmfifo: Fix a warning
>>>> message
>>>>
>>>> Hi Liming,
>>>>
>>>> On 10/5/23 14:18, Liming Sun wrote:
>>>>> This commit fixes the smatch static checker warning in
>>>>> mlxbf_tmfifo_rxtx_word() which complains data not initialized at
>>>>> line 634 when IS_VRING_DROP() is TRUE. This is not a real bug since
>>>>> line 634 is for Tx while IS_VRING_DROP() is only set for Rx. So there
>>>>> is no case that line 634 is executed when IS_VRING_DROP() is TRUE.
>>>>>
>>>>> This commit initializes the local data variable to avoid unnecessary
>>>>> confusion to those static analyzing tools.
>>>>>
>>>>> Signed-off-by: Liming Sun <limings@nvidia.com>
>>>>> ---
>>>>>  drivers/platform/mellanox/mlxbf-tmfifo.c | 2 +-
>>>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/drivers/platform/mellanox/mlxbf-tmfifo.c
>>>> b/drivers/platform/mellanox/mlxbf-tmfifo.c
>>>>> index f3696a54a2bd..ccc4b51d3379 100644
>>>>> --- a/drivers/platform/mellanox/mlxbf-tmfifo.c
>>>>> +++ b/drivers/platform/mellanox/mlxbf-tmfifo.c
>>>>> @@ -595,8 +595,8 @@ static void mlxbf_tmfifo_rxtx_word(struct
>>>> mlxbf_tmfifo_vring *vring,
>>>>>  {
>>>>>  	struct virtio_device *vdev = vring->vq->vdev;
>>>>>  	struct mlxbf_tmfifo *fifo = vring->fifo;
>>>>> +	u64 data = 0;
>>>>>  	void *addr;
>>>>> -	u64 data;
>>>>>
>>>>>  	/* Get the buffer address of this desc. */
>>>>>  	addr = phys_to_virt(virtio64_to_cpu(vdev, desc->addr));
>>>>
>>>>
>>>> This will fix the warning but not the issue at hand. As Dan pointed
>>>> out in his original bug report, the issue is that after:
>>>>
>>>> 78034cbece79 ("platform/mellanox: mlxbf-tmfifo: Drop the Rx packet if no
>>>> descriptors")
>>>>
>>>> We now have this IS_VRING_DROP() check in the path, which despite
>>>> the subject writeq(data, fifo->tx.data);is currently being applied to both rx
>> and
>>>> tx vring-s
>>>> and when this returns true the memcpy from the ring to &data
>>>> will not happen, but the code will still do:
>>>>
>>>> writeq(data, fifo->tx.data);
>>>>
>>>> So you may have silenced the warning now, but you will still write
>>>> data not coming from the vring to transmit. The only difference
>>>> is you are now guaranteed to write all zeroes.
>>>>
>>>> Note another older issue is that if you hit the not enough space
>>>> path:
>>>>
>>>>        } else {
>>>>                 /* Leftover bytes. */
>>>>                 if (!IS_VRING_DROP(vring)) {
>>>>                         if (is_rx)
>>>>                                 memcpy(addr + vring->cur_len, &data,
>>>>                                        len - vring->cur_len);
>>>>                         else
>>>>                                 memcpy(&data, addr + vring->cur_len,
>>>>                                        len - vring->cur_len);
>>>>                 }
>>>>                 vring->cur_len = len;
>>>>         }
>>>>
>>>> Then even if IS_VRING_DROP() returns true you are only initializing some
>> bytes
>>>> of the 8 bytes data variable and the other bytes will stay at whatever
>> random
>>>> value they had before and you end up writing this random bytes when
>> doing:
>>>>
>>>> writeq(data, fifo->tx.data);
>>>>
>>>> Regards,
>>>>
>>>> Hans
>>>>
>>>>
>>>>
>>>
> 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v2] platform/mellanox: mlxbf-tmfifo: Fix a warning message
  2023-10-05 12:18 [PATCH v1 1/1] platform/mellanox: mlxbf-tmfifo: Fix a warning message Liming Sun
  2023-10-06 12:53 ` Hans de Goede
@ 2023-10-12 23:02 ` Liming Sun
  2023-10-18 13:41   ` Hans de Goede
  1 sibling, 1 reply; 9+ messages in thread
From: Liming Sun @ 2023-10-12 23:02 UTC (permalink / raw)
  To: Vadim Pasternak, David Thompson, Hans de Goede, Mark Gross,
	Dan Carpenter
  Cc: Liming Sun, platform-driver-x86, linux-kernel

This commit fixes the smatch static checker warning in function
mlxbf_tmfifo_rxtx_word() which complains data not initialized at
line 634 when IS_VRING_DROP() is TRUE.

Signed-off-by: Liming Sun <limings@nvidia.com>
---
v1->v2: Logic adjustment for Hans's comment
  - Adjust the logic to avoid confusion.
v1: Initial version.
---
 drivers/platform/mellanox/mlxbf-tmfifo.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/drivers/platform/mellanox/mlxbf-tmfifo.c b/drivers/platform/mellanox/mlxbf-tmfifo.c
index f3696a54a2bd..d9615ad60012 100644
--- a/drivers/platform/mellanox/mlxbf-tmfifo.c
+++ b/drivers/platform/mellanox/mlxbf-tmfifo.c
@@ -607,24 +607,25 @@ static void mlxbf_tmfifo_rxtx_word(struct mlxbf_tmfifo_vring *vring,
 
 	if (vring->cur_len + sizeof(u64) <= len) {
 		/* The whole word. */
-		if (!IS_VRING_DROP(vring)) {
-			if (is_rx)
+		if (is_rx) {
+			if (!IS_VRING_DROP(vring))
 				memcpy(addr + vring->cur_len, &data,
 				       sizeof(u64));
-			else
-				memcpy(&data, addr + vring->cur_len,
-				       sizeof(u64));
+		} else {
+			memcpy(&data, addr + vring->cur_len,
+			       sizeof(u64));
 		}
 		vring->cur_len += sizeof(u64);
 	} else {
 		/* Leftover bytes. */
-		if (!IS_VRING_DROP(vring)) {
-			if (is_rx)
+		if (is_rx) {
+			if (!IS_VRING_DROP(vring))
 				memcpy(addr + vring->cur_len, &data,
 				       len - vring->cur_len);
-			else
-				memcpy(&data, addr + vring->cur_len,
-				       len - vring->cur_len);
+		} else {
+			data = 0;
+			memcpy(&data, addr + vring->cur_len,
+			       len - vring->cur_len);
 		}
 		vring->cur_len = len;
 	}
-- 
2.30.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* RE: [PATCH v1 1/1] platform/mellanox: mlxbf-tmfifo: Fix a warning message
  2023-10-10  8:05         ` Hans de Goede
@ 2023-10-12 23:03           ` Liming Sun
  0 siblings, 0 replies; 9+ messages in thread
From: Liming Sun @ 2023-10-12 23:03 UTC (permalink / raw)
  To: Hans de Goede, Vadim Pasternak, David Thompson, Mark Gross,
	Dan Carpenter
  Cc: platform-driver-x86, linux-kernel



> -----Original Message-----
> From: Hans de Goede <hdegoede@redhat.com>
> Sent: Tuesday, October 10, 2023 4:06 AM
> To: Liming Sun <limings@nvidia.com>; Vadim Pasternak
> <vadimp@nvidia.com>; David Thompson <davthompson@nvidia.com>; Mark
> Gross <markgross@kernel.org>; Dan Carpenter <dan.carpenter@linaro.org>
> Cc: platform-driver-x86@vger.kernel.org; linux-kernel@vger.kernel.org
> Subject: Re: [PATCH v1 1/1] platform/mellanox: mlxbf-tmfifo: Fix a warning
> message
> 
> Hi,
> 
> On 10/9/23 21:28, Liming Sun wrote:
> >
> >
> >> -----Original Message-----
> >> From: Hans de Goede <hdegoede@redhat.com>
> >> Sent: Friday, October 6, 2023 1:07 PM
> >> To: Liming Sun <limings@nvidia.com>; Vadim Pasternak
> >> <vadimp@nvidia.com>; David Thompson <davthompson@nvidia.com>;
> Mark
> >> Gross <markgross@kernel.org>; Dan Carpenter <dan.carpenter@linaro.org>
> >> Cc: platform-driver-x86@vger.kernel.org; linux-kernel@vger.kernel.org
> >> Subject: Re: [PATCH v1 1/1] platform/mellanox: mlxbf-tmfifo: Fix a warning
> >> message
> >>
> >> Hi Liming,
> >>
> >> On 10/6/23 17:50, Liming Sun wrote:
> >>> Thanks Hans.
> >>>
> >>> Below is the logic:
> >>>
> >>> IS_VRING_DROP() is ONLY set to TRUE for Rx, which is done in two places:
> >>> Line 696:  *desc = &vring->drop_desc;
> >>> Line 742: desc = &vring->drop_desc;
> >>>
> >>> So line 634 below will never happen when IS_VRING_DROP() is TRUE due
> the
> >> checking of line 633.
> >>> 633         if (!is_rx)
> >>>  634                 writeq(data, fifo->tx.data);
> >>>
> >>> Please correct me if it's my misunderstanding.
> >>
> >> If IS_VRING_DROP() is ONLY set to TRUE for Rx, then it
> >> should simply *not* be checked *at all* in the tx paths.
> >
> > IS_VRING_DROP() itself is actually not checked in the Tx path.  It is the "!
> IS_VRING_DROP()" that checks the Rx/Tx, something like:
> >
> > if (!IS_VRING_DROP(vring)) {
> > 	if (is_rx)
> > 		...
> > 	else
> > 		...
> > }
> >
> > The reason is that I thought we might reuse the ' IS_VRING_DROP' for Tx
> later.
> >
> > However, if the logic looks confusing, I could revise it to something like:
> >
> > if (is_rx) {
> > 	if (!IS_VRING_DROP(vring))
> > 		...
> > } else {
> > 		...
> > }
> 
> Yes please revise the log to look like this, this should also
> fix the warning without needing to initialize data to 0.
> 
> Since now in the tx path you are guaranteed to first fill
> data before sending it.

Thanks, done. Updated in v2.

> 
> Regards,
> 
> Hans
> 
> 
> 
> >>>> -----Original Message-----
> >>>> From: Hans de Goede <hdegoede@redhat.com>
> >>>> Sent: Friday, October 6, 2023 8:54 AM
> >>>> To: Liming Sun <limings@nvidia.com>; Vadim Pasternak
> >>>> <vadimp@nvidia.com>; David Thompson <davthompson@nvidia.com>;
> >> Mark
> >>>> Gross <markgross@kernel.org>; Dan Carpenter
> <dan.carpenter@linaro.org>
> >>>> Cc: platform-driver-x86@vger.kernel.org; linux-kernel@vger.kernel.org
> >>>> Subject: Re: [PATCH v1 1/1] platform/mellanox: mlxbf-tmfifo: Fix a
> warning
> >>>> message
> >>>>
> >>>> Hi Liming,
> >>>>
> >>>> On 10/5/23 14:18, Liming Sun wrote:
> >>>>> This commit fixes the smatch static checker warning in
> >>>>> mlxbf_tmfifo_rxtx_word() which complains data not initialized at
> >>>>> line 634 when IS_VRING_DROP() is TRUE. This is not a real bug since
> >>>>> line 634 is for Tx while IS_VRING_DROP() is only set for Rx. So there
> >>>>> is no case that line 634 is executed when IS_VRING_DROP() is TRUE.
> >>>>>
> >>>>> This commit initializes the local data variable to avoid unnecessary
> >>>>> confusion to those static analyzing tools.
> >>>>>
> >>>>> Signed-off-by: Liming Sun <limings@nvidia.com>
> >>>>> ---
> >>>>>  drivers/platform/mellanox/mlxbf-tmfifo.c | 2 +-
> >>>>>  1 file changed, 1 insertion(+), 1 deletion(-)
> >>>>>
> >>>>> diff --git a/drivers/platform/mellanox/mlxbf-tmfifo.c
> >>>> b/drivers/platform/mellanox/mlxbf-tmfifo.c
> >>>>> index f3696a54a2bd..ccc4b51d3379 100644
> >>>>> --- a/drivers/platform/mellanox/mlxbf-tmfifo.c
> >>>>> +++ b/drivers/platform/mellanox/mlxbf-tmfifo.c
> >>>>> @@ -595,8 +595,8 @@ static void mlxbf_tmfifo_rxtx_word(struct
> >>>> mlxbf_tmfifo_vring *vring,
> >>>>>  {
> >>>>>  	struct virtio_device *vdev = vring->vq->vdev;
> >>>>>  	struct mlxbf_tmfifo *fifo = vring->fifo;
> >>>>> +	u64 data = 0;
> >>>>>  	void *addr;
> >>>>> -	u64 data;
> >>>>>
> >>>>>  	/* Get the buffer address of this desc. */
> >>>>>  	addr = phys_to_virt(virtio64_to_cpu(vdev, desc->addr));
> >>>>
> >>>>
> >>>> This will fix the warning but not the issue at hand. As Dan pointed
> >>>> out in his original bug report, the issue is that after:
> >>>>
> >>>> 78034cbece79 ("platform/mellanox: mlxbf-tmfifo: Drop the Rx packet if
> no
> >>>> descriptors")
> >>>>
> >>>> We now have this IS_VRING_DROP() check in the path, which despite
> >>>> the subject writeq(data, fifo->tx.data);is currently being applied to both
> rx
> >> and
> >>>> tx vring-s
> >>>> and when this returns true the memcpy from the ring to &data
> >>>> will not happen, but the code will still do:
> >>>>
> >>>> writeq(data, fifo->tx.data);
> >>>>
> >>>> So you may have silenced the warning now, but you will still write
> >>>> data not coming from the vring to transmit. The only difference
> >>>> is you are now guaranteed to write all zeroes.
> >>>>
> >>>> Note another older issue is that if you hit the not enough space
> >>>> path:
> >>>>
> >>>>        } else {
> >>>>                 /* Leftover bytes. */
> >>>>                 if (!IS_VRING_DROP(vring)) {
> >>>>                         if (is_rx)
> >>>>                                 memcpy(addr + vring->cur_len, &data,
> >>>>                                        len - vring->cur_len);
> >>>>                         else
> >>>>                                 memcpy(&data, addr + vring->cur_len,
> >>>>                                        len - vring->cur_len);
> >>>>                 }
> >>>>                 vring->cur_len = len;
> >>>>         }
> >>>>
> >>>> Then even if IS_VRING_DROP() returns true you are only initializing some
> >> bytes
> >>>> of the 8 bytes data variable and the other bytes will stay at whatever
> >> random
> >>>> value they had before and you end up writing this random bytes when
> >> doing:
> >>>>
> >>>> writeq(data, fifo->tx.data);
> >>>>
> >>>> Regards,
> >>>>
> >>>> Hans
> >>>>
> >>>>
> >>>>
> >>>
> >


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2] platform/mellanox: mlxbf-tmfifo: Fix a warning message
  2023-10-12 23:02 ` [PATCH v2] " Liming Sun
@ 2023-10-18 13:41   ` Hans de Goede
  0 siblings, 0 replies; 9+ messages in thread
From: Hans de Goede @ 2023-10-18 13:41 UTC (permalink / raw)
  To: Liming Sun, Vadim Pasternak, David Thompson, Mark Gross, Dan Carpenter
  Cc: platform-driver-x86, linux-kernel

Hi,

On 10/13/23 01:02, Liming Sun wrote:
> This commit fixes the smatch static checker warning in function
> mlxbf_tmfifo_rxtx_word() which complains data not initialized at
> line 634 when IS_VRING_DROP() is TRUE.
> 
> Signed-off-by: Liming Sun <limings@nvidia.com>
> ---
> v1->v2: Logic adjustment for Hans's comment
>   - Adjust the logic to avoid confusion.

Thank you for your patch/series, I've applied this patch
(series) to the pdx86 fixes branch:
https://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git/log/?h=fixes

I will include this patch in my next fixes pull-req to Linus
for the current kernel development cycle.

Regards,

Hans






> v1: Initial version.
> ---
>  drivers/platform/mellanox/mlxbf-tmfifo.c | 21 +++++++++++----------
>  1 file changed, 11 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/platform/mellanox/mlxbf-tmfifo.c b/drivers/platform/mellanox/mlxbf-tmfifo.c
> index f3696a54a2bd..d9615ad60012 100644
> --- a/drivers/platform/mellanox/mlxbf-tmfifo.c
> +++ b/drivers/platform/mellanox/mlxbf-tmfifo.c
> @@ -607,24 +607,25 @@ static void mlxbf_tmfifo_rxtx_word(struct mlxbf_tmfifo_vring *vring,
>  
>  	if (vring->cur_len + sizeof(u64) <= len) {
>  		/* The whole word. */
> -		if (!IS_VRING_DROP(vring)) {
> -			if (is_rx)
> +		if (is_rx) {
> +			if (!IS_VRING_DROP(vring))
>  				memcpy(addr + vring->cur_len, &data,
>  				       sizeof(u64));
> -			else
> -				memcpy(&data, addr + vring->cur_len,
> -				       sizeof(u64));
> +		} else {
> +			memcpy(&data, addr + vring->cur_len,
> +			       sizeof(u64));
>  		}
>  		vring->cur_len += sizeof(u64);
>  	} else {
>  		/* Leftover bytes. */
> -		if (!IS_VRING_DROP(vring)) {
> -			if (is_rx)
> +		if (is_rx) {
> +			if (!IS_VRING_DROP(vring))
>  				memcpy(addr + vring->cur_len, &data,
>  				       len - vring->cur_len);
> -			else
> -				memcpy(&data, addr + vring->cur_len,
> -				       len - vring->cur_len);
> +		} else {
> +			data = 0;
> +			memcpy(&data, addr + vring->cur_len,
> +			       len - vring->cur_len);
>  		}
>  		vring->cur_len = len;
>  	}


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2023-10-18 13:42 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-10-05 12:18 [PATCH v1 1/1] platform/mellanox: mlxbf-tmfifo: Fix a warning message Liming Sun
2023-10-06 12:53 ` Hans de Goede
2023-10-06 15:50   ` Liming Sun
2023-10-06 17:06     ` Hans de Goede
2023-10-09 19:28       ` Liming Sun
2023-10-10  8:05         ` Hans de Goede
2023-10-12 23:03           ` Liming Sun
2023-10-12 23:02 ` [PATCH v2] " Liming Sun
2023-10-18 13:41   ` Hans de Goede

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.