netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [Intel-wired-lan] [PATCH iwl-net] ice: change q_index variable type to s16 to store -1 value
@ 2024-10-28 16:59 Mateusz Polchlopek
  2024-11-02 14:38 ` Simon Horman
  2024-11-04  4:58 ` Pucha, HimasekharX Reddy
  0 siblings, 2 replies; 5+ messages in thread
From: Mateusz Polchlopek @ 2024-10-28 16:59 UTC (permalink / raw)
  To: intel-wired-lan
  Cc: david.m.ertman, netdev, Mateusz Polchlopek, Przemek Kitszel

Fix Flow Director not allowing to re-map traffic to 0th queue when action
is configured to drop (and vice versa).

The current implementation of ethtool callback in the ice driver forbids
change Flow Director action from 0 to -1 and from -1 to 0 with an error,
e.g:

 # ethtool -U eth2 flow-type tcp4 src-ip 1.1.1.1 loc 1 action 0
 # ethtool -U eth2 flow-type tcp4 src-ip 1.1.1.1 loc 1 action -1
 rmgr: Cannot insert RX class rule: Invalid argument

We set the value of `u16 q_index = 0` at the beginning of the function
ice_set_fdir_input_set(). In case of "drop traffic" action (which is
equal to -1 in ethtool) we store the 0 value. Later, when want to change
traffic rule to redirect to queue with index 0 it returns an error
caused by duplicate found.

Fix this behaviour by change of the type of field `q_index` from u16 to s16
in `struct ice_fdir_fltr`. This allows to store -1 in the field in case
of "drop traffic" action. What is more, change the variable type in the
function ice_set_fdir_input_set() and assign at the beginning the new
`#define ICE_FDIR_NO_QUEUE_IDX` which is -1. Later, if the action is set
to another value (point specific queue index) the variable value is
overwritten in the function.

Fixes: cac2a27cd9ab ("ice: Support IPv4 Flow Director filters")
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Signed-off-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_ethtool_fdir.c | 3 ++-
 drivers/net/ethernet/intel/ice/ice_fdir.h         | 4 +++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool_fdir.c b/drivers/net/ethernet/intel/ice/ice_ethtool_fdir.c
index 5412eff8ef23..ee9862ddfe15 100644
--- a/drivers/net/ethernet/intel/ice/ice_ethtool_fdir.c
+++ b/drivers/net/ethernet/intel/ice/ice_ethtool_fdir.c
@@ -1830,11 +1830,12 @@ static int
 ice_set_fdir_input_set(struct ice_vsi *vsi, struct ethtool_rx_flow_spec *fsp,
 		       struct ice_fdir_fltr *input)
 {
-	u16 dest_vsi, q_index = 0;
+	s16 q_index = ICE_FDIR_NO_QUEUE_IDX;
 	u16 orig_q_index = 0;
 	struct ice_pf *pf;
 	struct ice_hw *hw;
 	int flow_type;
+	u16 dest_vsi;
 	u8 dest_ctl;
 
 	if (!vsi || !fsp || !input)
diff --git a/drivers/net/ethernet/intel/ice/ice_fdir.h b/drivers/net/ethernet/intel/ice/ice_fdir.h
index ab5b118daa2d..820023c0271f 100644
--- a/drivers/net/ethernet/intel/ice/ice_fdir.h
+++ b/drivers/net/ethernet/intel/ice/ice_fdir.h
@@ -53,6 +53,8 @@
  */
 #define ICE_FDIR_IPV4_PKT_FLAG_MF		0x20
 
+#define ICE_FDIR_NO_QUEUE_IDX			-1
+
 enum ice_fltr_prgm_desc_dest {
 	ICE_FLTR_PRGM_DESC_DEST_DROP_PKT,
 	ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_QINDEX,
@@ -186,7 +188,7 @@ struct ice_fdir_fltr {
 	u16 flex_fltr;
 
 	/* filter control */
-	u16 q_index;
+	s16 q_index;
 	u16 orig_q_index;
 	u16 dest_vsi;
 	u8 dest_ctl;

base-commit: 93e5920e5193241cb05caaa6421365fd8800f1b4
-- 
2.38.1


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

* Re: [Intel-wired-lan] [PATCH iwl-net] ice: change q_index variable type to s16 to store -1 value
  2024-10-28 16:59 [Intel-wired-lan] [PATCH iwl-net] ice: change q_index variable type to s16 to store -1 value Mateusz Polchlopek
@ 2024-11-02 14:38 ` Simon Horman
  2024-11-04 12:56   ` Mateusz Polchlopek
  2024-11-04  4:58 ` Pucha, HimasekharX Reddy
  1 sibling, 1 reply; 5+ messages in thread
From: Simon Horman @ 2024-11-02 14:38 UTC (permalink / raw)
  To: Mateusz Polchlopek
  Cc: intel-wired-lan, david.m.ertman, netdev, Przemek Kitszel

On Mon, Oct 28, 2024 at 12:59:22PM -0400, Mateusz Polchlopek wrote:
> Fix Flow Director not allowing to re-map traffic to 0th queue when action
> is configured to drop (and vice versa).
> 
> The current implementation of ethtool callback in the ice driver forbids
> change Flow Director action from 0 to -1 and from -1 to 0 with an error,
> e.g:
> 
>  # ethtool -U eth2 flow-type tcp4 src-ip 1.1.1.1 loc 1 action 0
>  # ethtool -U eth2 flow-type tcp4 src-ip 1.1.1.1 loc 1 action -1
>  rmgr: Cannot insert RX class rule: Invalid argument
> 
> We set the value of `u16 q_index = 0` at the beginning of the function
> ice_set_fdir_input_set(). In case of "drop traffic" action (which is
> equal to -1 in ethtool) we store the 0 value. Later, when want to change
> traffic rule to redirect to queue with index 0 it returns an error
> caused by duplicate found.
> 
> Fix this behaviour by change of the type of field `q_index` from u16 to s16
> in `struct ice_fdir_fltr`. This allows to store -1 in the field in case
> of "drop traffic" action. What is more, change the variable type in the
> function ice_set_fdir_input_set() and assign at the beginning the new
> `#define ICE_FDIR_NO_QUEUE_IDX` which is -1. Later, if the action is set
> to another value (point specific queue index) the variable value is
> overwritten in the function.
> 
> Fixes: cac2a27cd9ab ("ice: Support IPv4 Flow Director filters")
> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
> Signed-off-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>

This looks good, although I am interested to know what the maximum value
for q_index is. And, considering unsigned values are used elsewhere, if
using 0xffff within this driver was considered instead of -1.

That notwithstanding,

Reviewed-by: Simon Horman <horms@kernel.org>

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

* RE: [Intel-wired-lan] [PATCH iwl-net] ice: change q_index variable type to s16 to store -1 value
  2024-10-28 16:59 [Intel-wired-lan] [PATCH iwl-net] ice: change q_index variable type to s16 to store -1 value Mateusz Polchlopek
  2024-11-02 14:38 ` Simon Horman
@ 2024-11-04  4:58 ` Pucha, HimasekharX Reddy
  1 sibling, 0 replies; 5+ messages in thread
From: Pucha, HimasekharX Reddy @ 2024-11-04  4:58 UTC (permalink / raw)
  To: Polchlopek, Mateusz, intel-wired-lan@lists.osuosl.org
  Cc: Ertman, David M, netdev@vger.kernel.org, Polchlopek, Mateusz,
	Kitszel, Przemyslaw

> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of Mateusz Polchlopek
> Sent: 28 October 2024 22:29
> To: intel-wired-lan@lists.osuosl.org
> Cc: Ertman, David M <david.m.ertman@intel.com>; netdev@vger.kernel.org; Polchlopek, Mateusz <mateusz.polchlopek@intel.com>; Kitszel, Przemyslaw <przemyslaw.kitszel@intel.com>
> Subject: [Intel-wired-lan] [PATCH iwl-net] ice: change q_index variable type to s16 to store -1 value
>
> Fix Flow Director not allowing to re-map traffic to 0th queue when action is configured to drop (and vice versa).
>
> The current implementation of ethtool callback in the ice driver forbids change Flow Director action from 0 to -1 and from -1 to 0 with an error,
> e.g:
>
> # ethtool -U eth2 flow-type tcp4 src-ip 1.1.1.1 loc 1 action 0  # ethtool -U eth2 flow-type tcp4 src-ip 1.1.1.1 loc 1 action -1
>  rmgr: Cannot insert RX class rule: Invalid argument
>
> We set the value of `u16 q_index = 0` at the beginning of the function ice_set_fdir_input_set(). In case of "drop traffic" action (which is equal to -1 in ethtool) we store the 0 value. Later, when want to change traffic rule to redirect to queue with index 0 it returns an error caused by duplicate found.
>
> Fix this behaviour by change of the type of field `q_index` from u16 to s16 in `struct ice_fdir_fltr`. This allows to store -1 in the field in case of "drop traffic" action. What is more, change the variable type > in the function ice_set_fdir_input_set() and assign at the beginning the new `#define ICE_FDIR_NO_QUEUE_IDX` which is -1. Later, if the action is set to another value (point specific queue index) the variable value is overwritten in the function.
>
> Fixes: cac2a27cd9ab ("ice: Support IPv4 Flow Director filters")
> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
> Signed-off-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice_ethtool_fdir.c | 3 ++-
>  drivers/net/ethernet/intel/ice/ice_fdir.h         | 4 +++-
>  2 files changed, 5 insertions(+), 2 deletions(-)
>

Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)


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

* Re: [Intel-wired-lan] [PATCH iwl-net] ice: change q_index variable type to s16 to store -1 value
  2024-11-02 14:38 ` Simon Horman
@ 2024-11-04 12:56   ` Mateusz Polchlopek
  2024-11-06 15:00     ` Simon Horman
  0 siblings, 1 reply; 5+ messages in thread
From: Mateusz Polchlopek @ 2024-11-04 12:56 UTC (permalink / raw)
  To: Simon Horman; +Cc: intel-wired-lan, david.m.ertman, netdev, Przemek Kitszel



On 11/2/2024 3:38 PM, Simon Horman wrote:
> On Mon, Oct 28, 2024 at 12:59:22PM -0400, Mateusz Polchlopek wrote:
>> Fix Flow Director not allowing to re-map traffic to 0th queue when action
>> is configured to drop (and vice versa).
>>
>> The current implementation of ethtool callback in the ice driver forbids
>> change Flow Director action from 0 to -1 and from -1 to 0 with an error,
>> e.g:
>>
>>   # ethtool -U eth2 flow-type tcp4 src-ip 1.1.1.1 loc 1 action 0
>>   # ethtool -U eth2 flow-type tcp4 src-ip 1.1.1.1 loc 1 action -1
>>   rmgr: Cannot insert RX class rule: Invalid argument
>>
>> We set the value of `u16 q_index = 0` at the beginning of the function
>> ice_set_fdir_input_set(). In case of "drop traffic" action (which is
>> equal to -1 in ethtool) we store the 0 value. Later, when want to change
>> traffic rule to redirect to queue with index 0 it returns an error
>> caused by duplicate found.
>>
>> Fix this behaviour by change of the type of field `q_index` from u16 to s16
>> in `struct ice_fdir_fltr`. This allows to store -1 in the field in case
>> of "drop traffic" action. What is more, change the variable type in the
>> function ice_set_fdir_input_set() and assign at the beginning the new
>> `#define ICE_FDIR_NO_QUEUE_IDX` which is -1. Later, if the action is set
>> to another value (point specific queue index) the variable value is
>> overwritten in the function.
>>
>> Fixes: cac2a27cd9ab ("ice: Support IPv4 Flow Director filters")
>> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
>> Signed-off-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
> 
> This looks good, although I am interested to know what the maximum value
> for q_index is. And, considering unsigned values are used elsewhere, if
> using 0xffff within this driver was considered instead of -1.
> 
> That notwithstanding,
> 
> Reviewed-by: Simon Horman <horms@kernel.org>

Hi Simon!

Thanks for Your review.
What is about q_index: it stores queue index which can be theoretically
up to few thousands. So in this case s16 should be enough and will be
able to hold all indexes. I didn't consider 0xffff as this may be
misleading, I decided to stay with -1.

Mateusz

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

* Re: [Intel-wired-lan] [PATCH iwl-net] ice: change q_index variable type to s16 to store -1 value
  2024-11-04 12:56   ` Mateusz Polchlopek
@ 2024-11-06 15:00     ` Simon Horman
  0 siblings, 0 replies; 5+ messages in thread
From: Simon Horman @ 2024-11-06 15:00 UTC (permalink / raw)
  To: Mateusz Polchlopek
  Cc: intel-wired-lan, david.m.ertman, netdev, Przemek Kitszel

On Mon, Nov 04, 2024 at 01:56:20PM +0100, Mateusz Polchlopek wrote:
> 
> 
> On 11/2/2024 3:38 PM, Simon Horman wrote:
> > On Mon, Oct 28, 2024 at 12:59:22PM -0400, Mateusz Polchlopek wrote:
> > > Fix Flow Director not allowing to re-map traffic to 0th queue when action
> > > is configured to drop (and vice versa).
> > > 
> > > The current implementation of ethtool callback in the ice driver forbids
> > > change Flow Director action from 0 to -1 and from -1 to 0 with an error,
> > > e.g:
> > > 
> > >   # ethtool -U eth2 flow-type tcp4 src-ip 1.1.1.1 loc 1 action 0
> > >   # ethtool -U eth2 flow-type tcp4 src-ip 1.1.1.1 loc 1 action -1
> > >   rmgr: Cannot insert RX class rule: Invalid argument
> > > 
> > > We set the value of `u16 q_index = 0` at the beginning of the function
> > > ice_set_fdir_input_set(). In case of "drop traffic" action (which is
> > > equal to -1 in ethtool) we store the 0 value. Later, when want to change
> > > traffic rule to redirect to queue with index 0 it returns an error
> > > caused by duplicate found.
> > > 
> > > Fix this behaviour by change of the type of field `q_index` from u16 to s16
> > > in `struct ice_fdir_fltr`. This allows to store -1 in the field in case
> > > of "drop traffic" action. What is more, change the variable type in the
> > > function ice_set_fdir_input_set() and assign at the beginning the new
> > > `#define ICE_FDIR_NO_QUEUE_IDX` which is -1. Later, if the action is set
> > > to another value (point specific queue index) the variable value is
> > > overwritten in the function.
> > > 
> > > Fixes: cac2a27cd9ab ("ice: Support IPv4 Flow Director filters")
> > > Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
> > > Signed-off-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
> > 
> > This looks good, although I am interested to know what the maximum value
> > for q_index is. And, considering unsigned values are used elsewhere, if
> > using 0xffff within this driver was considered instead of -1.
> > 
> > That notwithstanding,
> > 
> > Reviewed-by: Simon Horman <horms@kernel.org>
> 
> Hi Simon!
> 
> Thanks for Your review.
> What is about q_index: it stores queue index which can be theoretically
> up to few thousands. So in this case s16 should be enough and will be
> able to hold all indexes. I didn't consider 0xffff as this may be
> misleading, I decided to stay with -1.

Thanks. I agree that if we are expecting the maximum (positive) value
to be a few thousand, then the s16-based approach you have taken is a good
one.

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

end of thread, other threads:[~2024-11-06 15:00 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-28 16:59 [Intel-wired-lan] [PATCH iwl-net] ice: change q_index variable type to s16 to store -1 value Mateusz Polchlopek
2024-11-02 14:38 ` Simon Horman
2024-11-04 12:56   ` Mateusz Polchlopek
2024-11-06 15:00     ` Simon Horman
2024-11-04  4:58 ` Pucha, HimasekharX Reddy

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).