LKML Archive mirror
 help / color / mirror / Atom feed
From: Jacob Keller <jacob.e.keller@intel.com>
To: "Asbjørn Sloth Tønnesen" <ast@fiberby.net>, netdev@vger.kernel.org
Cc: <linux-kernel@vger.kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>,
	"Paolo Abeni" <pabeni@redhat.com>,
	Sunil Goutham <sgoutham@marvell.com>,
	"Geetha sowjanya" <gakula@marvell.com>,
	Subbaraya Sundeep <sbhatta@marvell.com>,
	hariprasad <hkelam@marvell.com>, Suman Ghosh <sumang@marvell.com>
Subject: Re: [PATCH net-next] octeontx2-pf: flower: check for unsupported control flags
Date: Mon, 22 Apr 2024 16:43:54 -0700	[thread overview]
Message-ID: <dd7a713a-1c16-47dc-83f1-967e2b1054c6@intel.com> (raw)
In-Reply-To: <a12ac71c-5621-4014-9b01-e74ce7429120@intel.com>



On 4/22/2024 4:41 PM, Jacob Keller wrote:
> 
> 
> On 4/22/2024 8:27 AM, Asbjørn Sloth Tønnesen wrote:
>> Use flow_rule_is_supp_control_flags() to reject filters with
>> unsupported control flags.
>>
>> In case any unsupported control flags are masked,
>> flow_rule_is_supp_control_flags() sets a NL extended
>> error message, and we return -EOPNOTSUPP.
>>
>> Remove FLOW_DIS_FIRST_FRAG specific error message,
>> and treat it as any other unsupported control flag.
>>
>> Only compile-tested.
>>
>> Signed-off-by: Asbjørn Sloth Tønnesen <ast@fiberby.net>
>> ---
>>  drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c | 8 ++++----
>>  1 file changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
>> index 6d4ce2ece8d0..e63cc1eb6d89 100644
>> --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
>> +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
>> @@ -700,10 +700,6 @@ static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node,
>>  		u32 val;
>>  
>>  		flow_rule_match_control(rule, &match);
>> -		if (match.mask->flags & FLOW_DIS_FIRST_FRAG) {
>> -			NL_SET_ERR_MSG_MOD(extack, "HW doesn't support frag first/later");
>> -			return -EOPNOTSUPP;
>> -		}
>>  
>>  		if (match.mask->flags & FLOW_DIS_IS_FRAGMENT) {
>>  			val = match.key->flags & FLOW_DIS_IS_FRAGMENT;
>> @@ -721,6 +717,10 @@ static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node,
>>  				return -EOPNOTSUPP;
>>  			}
>>  		}
>> +
>> +		if (!flow_rule_is_supp_control_flags(FLOW_DIS_IS_FRAGMENT,
>> +						     match.mask->flags, extack))
>> +			return -EOPNOTSUPP;
> 
> This confuses me since you pass FLOW_DIS_IS_FRAGMENT here, but you
> removed the check for FLOW_DIS_FIRST_FRAG??
> 
> Am I misunderstanding how flow_rule_is_supp_control_flags works?
> 
> The code just above this appears to support FLOW_DIS_IS_FRAGMENT.
> 
> Here is the implementation of flow_rule_is_supp_control_flags for reference:
> 
>> /**
>>  * flow_rule_is_supp_control_flags() - check for supported control flags
>>  * @supp_flags: control flags supported by driver
>>  * @ctrl_flags: control flags present in rule
>>  * @extack: The netlink extended ACK for reporting errors.
>>  *
>>  * Return: true if only supported control flags are set, false otherwise.
>>  */
>> static inline bool flow_rule_is_supp_control_flags(const u32 supp_flags,
>>                                                    const u32 ctrl_flags,
>>                                                    struct netlink_ext_ack *extack)
>> {
>>         if (likely((ctrl_flags & ~supp_flags) == 0))
>>                 return true;
>>
>>         NL_SET_ERR_MSG_FMT_MOD(extack,
>>                                "Unsupported match on control.flags %#x",
>>                                ctrl_flags);
>>
>>         return false;
>> }
>>
> 
> This seems to me that it you accidentally passed FLOW_DIS_IS_FRAGMENT
> when you meant FLOW_DIS_FIRST_FRAG??
> 
> I also think its a bit strange that you moved the placement of the check
> instead of replacing in the same location as where the previous check was.
> 
> 

Ah, I see what I missed. This takes the list of supported flags and
inverts it, and checks if any other flags were passed.

This is better since it guarantees future flags or other unknown flags
are rejected.

Ok. Sorry for the confusion.

Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>

  reply	other threads:[~2024-04-22 23:43 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-22 15:27 [PATCH net-next] octeontx2-pf: flower: check for unsupported control flags Asbjørn Sloth Tønnesen
2024-04-22 23:41 ` Jacob Keller
2024-04-22 23:43   ` Jacob Keller [this message]
2024-04-23  4:54 ` Sunil Kovvuri Goutham
2024-04-25  3:10 ` patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=dd7a713a-1c16-47dc-83f1-967e2b1054c6@intel.com \
    --to=jacob.e.keller@intel.com \
    --cc=ast@fiberby.net \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=gakula@marvell.com \
    --cc=hkelam@marvell.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=sbhatta@marvell.com \
    --cc=sgoutham@marvell.com \
    --cc=sumang@marvell.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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 read-only IMAP folder(s) and NNTP newsgroup(s).