From: Alexandre Belloni <alexandre.belloni@bootlin.com>
To: Vladimir Oltean <olteanv@gmail.com>
Cc: davem@davemloft.net, netdev@vger.kernel.org, yangbo.lu@nxp.com,
xiaoliang.yang_1@nxp.com, UNGLinuxDriver@microchip.com,
claudiu.manoil@nxp.com, andrew@lunn.ch, vivien.didelot@gmail.com,
f.fainelli@gmail.com, kuba@kernel.org
Subject: Re: [PATCH v2 net 8/8] net: mscc: ocelot: deinitialize only initialized ports
Date: Fri, 18 Sep 2020 17:29:15 +0200 [thread overview]
Message-ID: <20200918152915.GE9675@piout.net> (raw)
In-Reply-To: <20200918010730.2911234-9-olteanv@gmail.com>
On 18/09/2020 04:07:30+0300, Vladimir Oltean wrote:
> From: Vladimir Oltean <vladimir.oltean@nxp.com>
>
> Currently mscc_ocelot_init_ports() will skip initializing a port when it
> doesn't have a phy-handle, so the ocelot->ports[port] pointer will be
> NULL. Take this into consideration when tearing down the driver, and add
> a new function ocelot_deinit_port() to the switch library, mirror of
> ocelot_init_port(), which needs to be called by the driver for all ports
> it has initialized.
>
> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Tested-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Reviewed-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
> ---
> Changes in v2:
> Patch is new.
>
> drivers/net/dsa/ocelot/felix.c | 3 +++
> drivers/net/ethernet/mscc/ocelot.c | 16 ++++++++--------
> drivers/net/ethernet/mscc/ocelot_vsc7514.c | 2 ++
> include/soc/mscc/ocelot.h | 1 +
> 4 files changed, 14 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/net/dsa/ocelot/felix.c b/drivers/net/dsa/ocelot/felix.c
> index f7b43f8d56ed..64939ee14648 100644
> --- a/drivers/net/dsa/ocelot/felix.c
> +++ b/drivers/net/dsa/ocelot/felix.c
> @@ -624,10 +624,13 @@ static void felix_teardown(struct dsa_switch *ds)
> {
> struct ocelot *ocelot = ds->priv;
> struct felix *felix = ocelot_to_felix(ocelot);
> + int port;
>
> if (felix->info->mdio_bus_free)
> felix->info->mdio_bus_free(ocelot);
>
> + for (port = 0; port < ocelot->num_phys_ports; port++)
> + ocelot_deinit_port(ocelot, port);
> ocelot_deinit_timestamp(ocelot);
> /* stop workqueue thread */
> ocelot_deinit(ocelot);
> diff --git a/drivers/net/ethernet/mscc/ocelot.c b/drivers/net/ethernet/mscc/ocelot.c
> index 83eb7c325061..8518e1d60da4 100644
> --- a/drivers/net/ethernet/mscc/ocelot.c
> +++ b/drivers/net/ethernet/mscc/ocelot.c
> @@ -1550,18 +1550,18 @@ EXPORT_SYMBOL(ocelot_init);
>
> void ocelot_deinit(struct ocelot *ocelot)
> {
> - struct ocelot_port *port;
> - int i;
> -
> cancel_delayed_work(&ocelot->stats_work);
> destroy_workqueue(ocelot->stats_queue);
> mutex_destroy(&ocelot->stats_lock);
> -
> - for (i = 0; i < ocelot->num_phys_ports; i++) {
> - port = ocelot->ports[i];
> - skb_queue_purge(&port->tx_skbs);
> - }
> }
> EXPORT_SYMBOL(ocelot_deinit);
>
> +void ocelot_deinit_port(struct ocelot *ocelot, int port)
> +{
> + struct ocelot_port *ocelot_port = ocelot->ports[port];
> +
> + skb_queue_purge(&ocelot_port->tx_skbs);
> +}
> +EXPORT_SYMBOL(ocelot_deinit_port);
> +
> MODULE_LICENSE("Dual MIT/GPL");
> diff --git a/drivers/net/ethernet/mscc/ocelot_vsc7514.c b/drivers/net/ethernet/mscc/ocelot_vsc7514.c
> index 252c49b5f22b..e02fb8bfab63 100644
> --- a/drivers/net/ethernet/mscc/ocelot_vsc7514.c
> +++ b/drivers/net/ethernet/mscc/ocelot_vsc7514.c
> @@ -908,6 +908,8 @@ static void mscc_ocelot_release_ports(struct ocelot *ocelot)
> if (!ocelot_port)
> continue;
>
> + ocelot_deinit_port(ocelot, port);
> +
> priv = container_of(ocelot_port, struct ocelot_port_private,
> port);
>
> diff --git a/include/soc/mscc/ocelot.h b/include/soc/mscc/ocelot.h
> index 4521dd602ddc..0ac4e7fba086 100644
> --- a/include/soc/mscc/ocelot.h
> +++ b/include/soc/mscc/ocelot.h
> @@ -678,6 +678,7 @@ void ocelot_configure_cpu(struct ocelot *ocelot, int npi,
> int ocelot_init(struct ocelot *ocelot);
> void ocelot_deinit(struct ocelot *ocelot);
> void ocelot_init_port(struct ocelot *ocelot, int port);
> +void ocelot_deinit_port(struct ocelot *ocelot, int port);
>
> /* DSA callbacks */
> void ocelot_port_enable(struct ocelot *ocelot, int port,
> --
> 2.25.1
>
--
Alexandre Belloni, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2020-09-18 15:29 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-18 1:07 [PATCH v2 net 0/8] Bugfixes in Microsemi Ocelot switch driver Vladimir Oltean
2020-09-18 1:07 ` [PATCH v2 net 1/8] net: mscc: ocelot: fix race condition with TX timestamping Vladimir Oltean
2020-09-18 15:23 ` Alexandre Belloni
2020-09-18 15:24 ` Alexandre Belloni
2020-09-18 15:24 ` Alexandre Belloni
2020-09-18 15:24 ` Alexandre Belloni
2020-09-18 15:24 ` Alexandre Belloni
2020-09-18 15:25 ` Alexandre Belloni
2020-09-18 15:25 ` Alexandre Belloni
2020-09-18 15:26 ` Alexandre Belloni
2020-09-18 15:27 ` Alexandre Belloni
2020-09-18 1:07 ` [PATCH v2 net 2/8] net: mscc: ocelot: add locking for the port TX timestamp ID Vladimir Oltean
2020-09-18 2:37 ` Florian Fainelli
2020-09-18 15:27 ` Alexandre Belloni
2020-09-18 1:07 ` [PATCH v2 net 3/8] net: dsa: seville: fix buffer size of the queue system Vladimir Oltean
2020-09-18 2:37 ` Florian Fainelli
2020-09-18 15:27 ` Alexandre Belloni
2020-09-18 1:07 ` [PATCH v2 net 4/8] net: mscc: ocelot: check for errors on memory allocation of ports Vladimir Oltean
2020-09-18 2:35 ` Florian Fainelli
2020-09-18 15:27 ` Alexandre Belloni
2020-09-18 1:07 ` [PATCH v2 net 5/8] net: mscc: ocelot: error checking when calling ocelot_init() Vladimir Oltean
2020-09-18 2:35 ` Florian Fainelli
2020-09-18 15:28 ` Alexandre Belloni
2020-09-18 1:07 ` [PATCH v2 net 6/8] net: mscc: ocelot: refactor ports parsing code into a dedicated function Vladimir Oltean
2020-09-18 2:34 ` Florian Fainelli
2020-09-18 15:28 ` Alexandre Belloni
2020-09-18 1:07 ` [PATCH v2 net 7/8] net: mscc: ocelot: unregister net devices on unbind Vladimir Oltean
2020-09-18 2:34 ` Florian Fainelli
2020-09-18 15:28 ` Alexandre Belloni
2020-09-18 1:07 ` [PATCH v2 net 8/8] net: mscc: ocelot: deinitialize only initialized ports Vladimir Oltean
2020-09-18 2:36 ` Florian Fainelli
2020-09-18 15:29 ` Alexandre Belloni [this message]
2020-09-18 20:52 ` [PATCH v2 net 0/8] Bugfixes in Microsemi Ocelot switch driver David Miller
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=20200918152915.GE9675@piout.net \
--to=alexandre.belloni@bootlin.com \
--cc=UNGLinuxDriver@microchip.com \
--cc=andrew@lunn.ch \
--cc=claudiu.manoil@nxp.com \
--cc=davem@davemloft.net \
--cc=f.fainelli@gmail.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=olteanv@gmail.com \
--cc=vivien.didelot@gmail.com \
--cc=xiaoliang.yang_1@nxp.com \
--cc=yangbo.lu@nxp.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.