From: Lukasz Majewski <lukma@denx.de>
To: Paolo Abeni <pabeni@redhat.com>
Cc: Andrew Lunn <andrew+netdev@lunn.ch>,
davem@davemloft.net, Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Shawn Guo <shawnguo@kernel.org>,
Sascha Hauer <s.hauer@pengutronix.de>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
Fabio Estevam <festevam@gmail.com>,
Richard Cochran <richardcochran@gmail.com>,
netdev@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, imx@lists.linux.dev,
linux-arm-kernel@lists.infradead.org,
Stefan Wahren <wahrenst@gmx.net>, Simon Horman <horms@kernel.org>,
Andrew Lunn <andrew@lunn.ch>
Subject: Re: [net-next v13 04/11] net: mtip: The L2 switch driver for imx287
Date: Thu, 26 Jun 2025 08:28:00 +0200 [thread overview]
Message-ID: <20250626082800.5ddca021@wsk> (raw)
In-Reply-To: <20159d14-7d6b-4c16-9f00-ae993cc16f90@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 4986 bytes --]
Hi Paolo,
> On 6/24/25 11:04 PM, Lukasz Majewski wrote:
> >> On 6/22/25 11:37 AM, Lukasz Majewski wrote:
> >>> +static void mtip_aging_timer(struct timer_list *t)
> >>> +{
> >>> + struct switch_enet_private *fep = timer_container_of(fep,
> >>> t,
> >>> +
> >>> timer_aging); +
> >>> + fep->curr_time = mtip_timeincrement(fep->curr_time);
> >>> +
> >>> + mod_timer(&fep->timer_aging,
> >>> + jiffies +
> >>> msecs_to_jiffies(LEARNING_AGING_INTERVAL)); +}
> >>
> >> It's unclear to me why you decided to maintain this function and
> >> timer while you could/should have used a macro around jiffies
> >> instead.
> >
> > This is a bit more tricky than just getting value from jiffies.
> >
> > The current code provides a monotonic, starting from 0 time "base"
> > for learning and managing entries in internal routing tables for
> > MTIP.
> >
> > To be more specific - the fep->curr_time is a value incremented
> > after each ~10ms.
> >
> > Simple masking of jiffies would not provide such features.
>
> I guess you can get the same effect storing computing the difference
> from an initial jiffies value and using jiffies_to_msecs(<delta>)/10.
With some coding assuring only 10 bit width of the resulting clock
(based on jiffies) I can have a monotonic clock which will not start
from 0.
>
> >> [...]
> >>> +static int mtip_sw_learning(void *arg)
> >>> +{
> >>> + struct switch_enet_private *fep = arg;
> >>> +
> >>> + while (!kthread_should_stop()) {
> >>> + set_current_state(TASK_INTERRUPTIBLE);
> >>> + /* check learning record valid */
> >>> + mtip_atable_dynamicms_learn_migration(fep,
> >>> fep->curr_time,
> >>> + NULL,
> >>> NULL);
> >>> + schedule_timeout(HZ / 100);
> >>> + }
> >>> +
> >>> + return 0;
> >>> +}
> >>
> >> Why are you using a full blown kernel thread here?
> >
> > The MTIP IP block requires the thread for learning. It is a HW based
> > switching accelerator, but the learning feature must be performed by
> > SW (by writing values to its registers).
> >
> >> Here a timer could
> >> possibly make more sense.
> >
> > Unfortunately, not - the code (in
> > mtip_atable_dynamicms_learn_migration() must be called). This
> > function has another role - it updates internal routing table with
> > timestamps (provided by timer mentioned above).
>
> Why a periodic timer can't call such function?
Yes, the kthread can be replaced with timer with 100ms period.
Just to explain - the mtip_atable_dynamicms_learn_migration(), which
requires monotonic value incremented once per 10ms, is called at two
places:
1. mtip_switch_rx() -> the dynamic table is examined if required (i.e.
new frame arrives). In this place the counter requires 10ms resolution
(can be extracted from jiffies).
2. The mtip_sw_learning() - which now is run from kthread, but it can
be replaced with timer (100ms resolution).
>
> >
> >> Why are checking the table every 10ms, while
> >> the learning intervall is 100ms?
> >
> > Yes, this is correct. In 10ms interval the internal routing table is
> > updated. 100 ms is for learning.
> >
> >> I guess you could/should align the
> >> frequency here with such interval.
> >
> > IMHO learning with 10ms interval would bring a lot of overhead.
> >
> > Just to mention - the MTIP IP block can generate interrupt for
> > learning event. However, it has been advised (bu NXP support), that
> > a thread with 100ms interval shall be used to avoid too many
> > interrupts.
>
> FTR, my suggestion is to increase the
> mtip_atable_dynamicms_learn_migration's call period to 100ms
As mentioned above - it is called in two places. One is in kthread
started at 100ms period, another one is asynchronous when frame arrives.
>
> >> Side note: I think you should move the buffer management to a later
> >> patch: this one is still IMHO too big.
> >
> > And this is problematic - the most time I've spent for v13 to
> > separate the code - i.e. I exclude one function, then there are
> > warnings that other function is unused (and of course WARNINGS in a
> > separate patches are a legitimate reason to call for another patch
> > set revision).
>
> A trick to break that kind of dependencies chain is to leave a
> function implementation empty.
>
> On the same topic, you could have left mtip_rx_napi() implementation
> empty up to patch 6 or you could have introduced napi initialization
> and cleanup only after such patch.
>
> In a similar way, you could introduce buffer managements in a later
> patch and add the relevant calls afterwards.
I get your point.
>
> /P
>
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Erika Unter
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next prev parent reply other threads:[~2025-06-26 6:28 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-22 9:37 [net-next v13 00/11] net: mtip: Add support for MTIP imx287 L2 switch driver Lukasz Majewski
2025-06-22 9:37 ` [net-next v13 01/11] dt-bindings: net: Add MTIP L2 switch description Lukasz Majewski
2025-06-22 9:37 ` [net-next v13 02/11] ARM: dts: nxp: mxs: Adjust the imx28.dtsi " Lukasz Majewski
2025-06-22 9:37 ` [net-next v13 03/11] ARM: dts: nxp: mxs: Adjust XEA board's DTS to support L2 switch Lukasz Majewski
2025-06-22 9:37 ` [net-next v13 04/11] net: mtip: The L2 switch driver for imx287 Lukasz Majewski
2025-06-24 13:24 ` Paolo Abeni
2025-06-24 21:04 ` Lukasz Majewski
2025-06-25 7:13 ` Paolo Abeni
2025-06-26 6:28 ` Lukasz Majewski [this message]
2025-06-24 13:37 ` Paolo Abeni
2025-06-24 21:22 ` Lukasz Majewski
2025-06-22 9:37 ` [net-next v13 05/11] net: mtip: Add net_device_ops functions to the L2 switch driver Lukasz Majewski
2025-06-24 13:42 ` Paolo Abeni
2025-06-24 21:33 ` Lukasz Majewski
2025-06-22 9:37 ` [net-next v13 06/11] net: mtip: Add mtip_switch_{rx|tx} " Lukasz Majewski
2025-06-24 13:58 ` Paolo Abeni
2025-06-24 21:54 ` Lukasz Majewski
2025-06-30 11:34 ` Lukasz Majewski
2025-06-22 9:37 ` [net-next v13 07/11] net: mtip: Extend the L2 switch driver with management operations Lukasz Majewski
2025-06-22 9:37 ` [net-next v13 08/11] net: mtip: Extend the L2 switch driver for imx287 with bridge operations Lukasz Majewski
2025-06-22 9:37 ` [net-next v13 09/11] ARM: mxs_defconfig: Enable CONFIG_NFS_FSCACHE Lukasz Majewski
2025-06-22 9:37 ` [net-next v13 10/11] ARM: mxs_defconfig: Update mxs_defconfig to 6.16-rc1 Lukasz Majewski
2025-06-22 9:37 ` [net-next v13 11/11] ARM: mxs_defconfig: Enable CONFIG_FEC_MTIP_L2SW to support MTIP L2 switch Lukasz Majewski
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=20250626082800.5ddca021@wsk \
--to=lukma@denx.de \
--cc=andrew+netdev@lunn.ch \
--cc=andrew@lunn.ch \
--cc=conor+dt@kernel.org \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=festevam@gmail.com \
--cc=horms@kernel.org \
--cc=imx@lists.linux.dev \
--cc=kernel@pengutronix.de \
--cc=krzk+dt@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=richardcochran@gmail.com \
--cc=robh@kernel.org \
--cc=s.hauer@pengutronix.de \
--cc=shawnguo@kernel.org \
--cc=wahrenst@gmx.net \
/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.