From patchwork Mon Dec 7 12:57:35 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neil Armstrong X-Patchwork-Id: 553377 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 6D2D9140213 for ; Mon, 7 Dec 2015 23:59:34 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=baylibre-com.20150623.gappssmtp.com header.i=@baylibre-com.20150623.gappssmtp.com header.b=g3da+rmb; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755898AbbLGM7Q (ORCPT ); Mon, 7 Dec 2015 07:59:16 -0500 Received: from mail-wm0-f46.google.com ([74.125.82.46]:32933 "EHLO mail-wm0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755000AbbLGM7L (ORCPT ); Mon, 7 Dec 2015 07:59:11 -0500 Received: by wmec201 with SMTP id c201so164194125wme.0 for ; Mon, 07 Dec 2015 04:59:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=6vELa23/3ZcYEPAJiwyDYN8oyCklvSydrBzONuLVCSU=; b=g3da+rmbDtxsYyZFCMjD83EgTaoOCuVRMb/omoV4mq/HEtp7eLdjpF2zPMN1HFDV8b mGD5wCCzacng6A36dnqr58T7L9b+q8vah+MmPdt6+ZmcPDP64YPC2dlUQdxPfesxWpEc CLzlDZZmpfWf3dHhtAh8QNgp1AioplOfjCfXSlisRl8hZziTdDgcCjpUkZC3vLRKdNqO vNrcieJ5T9p0B6PsKdnj/14ScHrq8TcFcN9q224Gu08i+ZCIXYspBqmHlOVudua2TIkk iG2n0LMv1aNCxZq5hhaGYX39qPgE1hqY6oQMcNxhy4O61iKJby90JkDG7nAjON4O/bNR n84Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=6vELa23/3ZcYEPAJiwyDYN8oyCklvSydrBzONuLVCSU=; b=X7ASlzRaFzt7ba50argo7CZArbu9JusPAA/wbgDv2p32rxNZH0RmNWzG8tILsnwsKh eRv8yWpwi0XAc5rLi8P7g4NMLsmnp02xADiEi4vBmj2yvNhJB65mwjpZL0ArqRR9LDnD xwJ0ifDWBfcFTNSwmft8Kd//tONqQbFFUn6dGGnhiGklWzblgphgfyRaLAeru1qhG7X2 +CpWLuc67+WhGYC6uTf0q56FIzxoQyGF+KwUbVtFpc0HWxXLIEWAFLhAZ3o1OmmQs3M/ n+MOAMWJv0tAdyd/KOafXlFlWEv30YP2k45UaGqca7ewXoi9/BqhRQi0cHw0eQ1KqNIE Sglg== X-Gm-Message-State: ALoCoQlkdls9ra4v11GIMdfBNGLuDUQLOvh1DvB509iMF59fhvQPozGaFofR2irVvkCUxoVtGR5q X-Received: by 10.194.116.133 with SMTP id jw5mr32639337wjb.110.1449493150169; Mon, 07 Dec 2015 04:59:10 -0800 (PST) Received: from zoidberg.home ([90.63.244.31]) by smtp.gmail.com with ESMTPSA id 186sm16660793wmv.9.2015.12.07.04.59.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 07 Dec 2015 04:59:09 -0800 (PST) From: Neil Armstrong To: davem@davemloft.net, andrew@lunn.ch, f.fainelli@gmail.com, linux@roeck-us.net, vivien.didelot@savoirfairelinux.com, fabf@skynet.be, pavel.nakonechny@skitlab.ru, joe@perches.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Neil Armstrong , Frode Isaksen Subject: [PATCH v3 net-next 4/4] net: dsa: move dsa slave destroy code to slave.c Date: Mon, 7 Dec 2015 13:57:35 +0100 Message-Id: <1449493055-29047-5-git-send-email-narmstrong@baylibre.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1449493055-29047-1-git-send-email-narmstrong@baylibre.com> References: <56321D9A.8010109@baylibre.com> <1449493055-29047-1-git-send-email-narmstrong@baylibre.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Move dsa slave dedicated code from dsa_switch_destroy to a new dsa_slave_destroy function in slave.c. Add the netif_carrier_off and phy_disconnect calls in order to correctly cleanup the netdev state and PHY state machine. Signed-off-by: Frode Isaksen Signed-off-by: Neil Armstrong --- net/dsa/dsa.c | 3 +-- net/dsa/dsa_priv.h | 1 + net/dsa/slave.c | 11 +++++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c index d22d303e..208d1b2 100644 --- a/net/dsa/dsa.c +++ b/net/dsa/dsa.c @@ -456,8 +456,7 @@ static void dsa_switch_destroy(struct dsa_switch *ds) if (!ds->ports[port]) continue; - unregister_netdev(ds->ports[port]); - free_netdev(ds->ports[port]); + dsa_slave_destroy(ds->ports[port]); } mdiobus_unregister(ds->slave_mii_bus); diff --git a/net/dsa/dsa_priv.h b/net/dsa/dsa_priv.h index 311796c8..1d1a546 100644 --- a/net/dsa/dsa_priv.h +++ b/net/dsa/dsa_priv.h @@ -61,6 +61,7 @@ extern const struct dsa_device_ops notag_netdev_ops; void dsa_slave_mii_bus_init(struct dsa_switch *ds); int dsa_slave_create(struct dsa_switch *ds, struct device *parent, int port, char *name); +void dsa_slave_destroy(struct net_device *slave_dev); int dsa_slave_suspend(struct net_device *slave_dev); int dsa_slave_resume(struct net_device *slave_dev); int dsa_slave_netdevice_event(struct notifier_block *unused, diff --git a/net/dsa/slave.c b/net/dsa/slave.c index 7bc787b..1e9e942 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -1212,6 +1212,17 @@ int dsa_slave_create(struct dsa_switch *ds, struct device *parent, return 0; } +void dsa_slave_destroy(struct net_device *slave_dev) +{ + struct dsa_slave_priv *p = netdev_priv(slave_dev); + + netif_carrier_off(slave_dev); + if (p->phy) + phy_disconnect(p->phy); + unregister_netdev(slave_dev); + free_netdev(slave_dev); +} + static bool dsa_slave_dev_check(struct net_device *dev) { return dev->netdev_ops == &dsa_slave_netdev_ops;