From: Sean Anderson <sean.anderson@linux.dev>
To: "Pandey, Radhey Shyam" <radhey.shyam.pandey@amd.com>,
"David S . Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
"Gupta, Suraj" <Suraj.Gupta2@amd.com>,
"Katakam, Harini" <harini.katakam@amd.com>
Cc: Andy Chiu <andy.chiu@sifive.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Simon Horman <horms@kernel.org>,
Ariane Keller <ariane.keller@tik.ee.ethz.ch>,
Daniel Borkmann <daniel@iogearbox.net>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"Simek, Michal" <michal.simek@amd.com>
Subject: Re: [PATCH net v2] net: xilinx: axienet: Fix IRQ coalescing packet count overflow
Date: Fri, 13 Sep 2024 12:51:45 -0400 [thread overview]
Message-ID: <dd8369d8-7f3d-467c-afba-abb149bb5942@linux.dev> (raw)
In-Reply-To: <MN0PR12MB5953E38D1EEBF3F83172E2EEB79B2@MN0PR12MB5953.namprd12.prod.outlook.com>
On 9/11/24 03:01, Pandey, Radhey Shyam wrote:
>> -----Original Message-----
>> From: Sean Anderson <sean.anderson@linux.dev>
>> Sent: Tuesday, September 10, 2024 4:39 AM
>> To: Pandey, Radhey Shyam <radhey.shyam.pandey@amd.com>; David S .
>> Miller <davem@davemloft.net>; Eric Dumazet <edumazet@google.com>;
>> Jakub Kicinski <kuba@kernel.org>; Paolo Abeni <pabeni@redhat.com>;
>> netdev@vger.kernel.org
>> Cc: Andy Chiu <andy.chiu@sifive.com>; linux-kernel@vger.kernel.org; Simon
>> Horman <horms@kernel.org>; Ariane Keller <ariane.keller@tik.ee.ethz.ch>;
>> Daniel Borkmann <daniel@iogearbox.net>; linux-arm-
>> kernel@lists.infradead.org; Simek, Michal <michal.simek@amd.com>; Sean
>> Anderson <sean.anderson@linux.dev>
>> Subject: [PATCH net v2] net: xilinx: axienet: Fix IRQ coalescing packet count
>> overflow
>>
>> If coalece_count is greater than 255 it will not fit in the register and
>> will overflow. This can be reproduced by running
>>
>> # ethtool -C ethX rx-frames 256
>>
>> which will result in a timeout of 0us instead. Fix this by clamping the
>> counts to the maximum value.
> After this fix - what is o/p we get on rx-frames read? I think silent clamping is not a great
> idea and user won't know about it. One alternative is to add check in set_coalesc
> count for valid range? (Similar to axienet_ethtools_set_ringparam so that user is notified
> for incorrect range)
>
>>
>> Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
>> Fixes: 8a3b7a252dca ("drivers/net/ethernet/xilinx: added Xilinx AXI Ethernet
>> driver")
>> ---
>>
>> Changes in v2:
>> - Use FIELD_MAX to extract the max value from the mask
>> - Expand the commit message with an example on how to reproduce this
>> issue
>>
>> drivers/net/ethernet/xilinx/xilinx_axienet.h | 5 ++---
>> drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 8 ++++++--
>> 2 files changed, 8 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet.h
>> b/drivers/net/ethernet/xilinx/xilinx_axienet.h
>> index 1223fcc1a8da..54db69893565 100644
>> --- a/drivers/net/ethernet/xilinx/xilinx_axienet.h
>> +++ b/drivers/net/ethernet/xilinx/xilinx_axienet.h
>> @@ -109,11 +109,10 @@
>> #define XAXIDMA_BD_CTRL_TXEOF_MASK 0x04000000 /* Last tx packet
>> */
>> #define XAXIDMA_BD_CTRL_ALL_MASK 0x0C000000 /* All control bits
>> */
>>
>> -#define XAXIDMA_DELAY_MASK 0xFF000000 /* Delay timeout
>> counter */
>> -#define XAXIDMA_COALESCE_MASK 0x00FF0000 /* Coalesce
>> counter */
>> +#define XAXIDMA_DELAY_MASK ((u32)0xFF000000) /* Delay
>> timeout counter */
>
> Adding typecast here looks odd. Any reason for it?
> If needed we do it in specific case where it is required.
Sorry, I missed this on my first read.
This is necessary for...
>> +#define XAXIDMA_COALESCE_MASK ((u32)0x00FF0000) /*
>> Coalesce counter */
>>
>> #define XAXIDMA_DELAY_SHIFT 24
>> -#define XAXIDMA_COALESCE_SHIFT 16
>>
>> #define XAXIDMA_IRQ_IOC_MASK 0x00001000 /* Completion
>> intr */
>> #define XAXIDMA_IRQ_DELAY_MASK 0x00002000 /* Delay
>> interrupt */
>> diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
>> b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
>> index 9eb300fc3590..89b63695293d 100644
>> --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
>> +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
>> @@ -252,7 +252,9 @@ static u32 axienet_usec_to_timer(struct axienet_local
>> *lp, u32 coalesce_usec)
>> static void axienet_dma_start(struct axienet_local *lp)
>> {
>> /* Start updating the Rx channel control register */
>> - lp->rx_dma_cr = (lp->coalesce_count_rx <<
>> XAXIDMA_COALESCE_SHIFT) |
>> + lp->rx_dma_cr = FIELD_PREP(XAXIDMA_COALESCE_MASK,
>> + min(lp->coalesce_count_rx,
>> +
>> FIELD_MAX(XAXIDMA_COALESCE_MASK))) |
this expression. Since min will complain if the types of its arguments
differ. Since coalesce_count_rx is a u32, and integer constants default
to int, I cast the mask to u32 above. Although a U suffix would have
also worked.
--Sean
>> XAXIDMA_IRQ_IOC_MASK |
>> XAXIDMA_IRQ_ERROR_MASK;
>> /* Only set interrupt delay timer if not generating an interrupt on
>> * the first RX packet. Otherwise leave at 0 to disable delay interrupt.
>> @@ -264,7 +266,9 @@ static void axienet_dma_start(struct axienet_local
>> *lp)
>> axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, lp->rx_dma_cr);
>>
>> /* Start updating the Tx channel control register */
>> - lp->tx_dma_cr = (lp->coalesce_count_tx <<
>> XAXIDMA_COALESCE_SHIFT) |
>> + lp->tx_dma_cr = FIELD_PREP(XAXIDMA_COALESCE_MASK,
>> + min(lp->coalesce_count_tx,
>> +
>> FIELD_MAX(XAXIDMA_COALESCE_MASK))) |
>> XAXIDMA_IRQ_IOC_MASK |
>> XAXIDMA_IRQ_ERROR_MASK;
>> /* Only set interrupt delay timer if not generating an interrupt on
>> * the first TX packet. Otherwise leave at 0 to disable delay interrupt.
>> --
>> 2.35.1.1320.gc452695387.dirty
>
prev parent reply other threads:[~2024-09-13 16:53 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-09 23:09 [PATCH net v2] net: xilinx: axienet: Fix IRQ coalescing packet count overflow Sean Anderson
2024-09-10 0:51 ` Nelson, Shannon
2024-09-11 7:01 ` Pandey, Radhey Shyam
2024-09-12 14:30 ` Sean Anderson
2024-09-12 14:35 ` Pandey, Radhey Shyam
2024-09-17 11:24 ` Pandey, Radhey Shyam
2024-09-17 14:40 ` Sean Anderson
2024-09-13 16:51 ` Sean Anderson [this message]
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=dd8369d8-7f3d-467c-afba-abb149bb5942@linux.dev \
--to=sean.anderson@linux.dev \
--cc=Suraj.Gupta2@amd.com \
--cc=andy.chiu@sifive.com \
--cc=ariane.keller@tik.ee.ethz.ch \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=harini.katakam@amd.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=michal.simek@amd.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=radhey.shyam.pandey@amd.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 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.