From patchwork Tue Oct 6 14:40:43 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neil Armstrong X-Patchwork-Id: 526791 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 13BB4140D6C for ; Wed, 7 Oct 2015 01:41:05 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752975AbbJFOkr (ORCPT ); Tue, 6 Oct 2015 10:40:47 -0400 Received: from mail-wi0-f176.google.com ([209.85.212.176]:35354 "EHLO mail-wi0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752941AbbJFOkp (ORCPT ); Tue, 6 Oct 2015 10:40:45 -0400 Received: by wicge5 with SMTP id ge5so170208095wic.0 for ; Tue, 06 Oct 2015 07:40:44 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:organization:message-id:date :user-agent:mime-version:content-type:content-transfer-encoding; bh=KqvMIxjMsiQ44wxP1NunNSA+f4xD3aoD+fPkg7h7l7w=; b=Oc67tJdV8OHKvUF6WpW6RmMaPxYCJ+22L8eOplRSEzUg2PFhRB61e2xXQ9X+MRb6J/ aMQACc0hy56GpekIwM+ZXsWTtc0bTQ5Lld4W1N62LCJcABBBBnzOPoHkSfvkrlcY0Tn3 9x1oPj5FzU7EBMeyPQTNOu4t9v+SOTwYOMy2v1kck8228pIpDL2HYtSF1y/ljtC57hPp HDRQyOhTNhc5iLlMuNBq95rZkC99AitoWzGGkMsUfDEL2VePF2J7tkUFz/lq7KzW7XOc UIY3XJD38F5KBdKfp34XuDkG1aJzVzZ8+RuUwFMpdLoYqSEjWFv951eTbrFYwo0qCKi3 ZlYQ== X-Gm-Message-State: ALoCoQlxfJhP9jaZW7XNRQoHwymdqoc4IsFQjCPS275KoQFPSzsyHaTPNKiWAj0gLysR8ypBpSKf X-Received: by 10.194.221.4 with SMTP id qa4mr40658177wjc.145.1444142444727; Tue, 06 Oct 2015 07:40:44 -0700 (PDT) Received: from [10.200.207.21] ([89.101.192.72]) by smtp.gmail.com with ESMTPSA id ft3sm20143849wib.17.2015.10.06.07.40.43 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 06 Oct 2015 07:40:44 -0700 (PDT) From: Neil Armstrong To: "David S. Miller" , Florian Fainelli , Guenter Roeck , vivien.didelot@savoirfairelinux.com, Andrew Lunn , Fabian Frederick , Pavel Nakonechny , Joe Perches , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, nbd@openwrt.org, sergei.shtylyov@cogentembedded.com Subject: [PATCH v3 5/5] net: dsa: exit probe if no switch were found X-Enigmail-Draft-Status: N1110 Organization: Baylibre Message-ID: <5613DD6B.5050404@baylibre.com> Date: Tue, 6 Oct 2015 15:40:43 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org If no switch were found in dsa_setup_dst, return -ENODEV and exit the dsa_probe cleanly. Signed-off-by: Neil Armstrong --- net/dsa/dsa.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c index d5a162c..adb5325 100644 --- a/net/dsa/dsa.c +++ b/net/dsa/dsa.c @@ -837,10 +837,11 @@ static inline void dsa_of_remove(struct device *dev) } #endif -static void dsa_setup_dst(struct dsa_switch_tree *dst, struct net_device *dev, - struct device *parent, struct dsa_platform_data *pd) +static int dsa_setup_dst(struct dsa_switch_tree *dst, struct net_device *dev, + struct device *parent, struct dsa_platform_data *pd) { int i; + unsigned configured = 0; dst->pd = pd; dst->master_netdev = dev; @@ -860,9 +861,17 @@ static void dsa_setup_dst(struct dsa_switch_tree *dst, struct net_device *dev, dst->ds[i] = ds; if (ds->drv->poll_link != NULL) dst->link_poll_needed = 1; + + ++configured; } /* + * If no switch was found, exit cleanly + */ + if (!configured) + return -EPROBE_DEFER; + + /* * If we use a tagging format that doesn't have an ethertype * field, make sure that all packets from this point on get * sent to the tag format's receive function. @@ -878,6 +887,8 @@ static void dsa_setup_dst(struct dsa_switch_tree *dst, struct net_device *dev, dst->link_poll_timer.expires = round_jiffies(jiffies + HZ); add_timer(&dst->link_poll_timer); } + + return 0; } static int dsa_probe(struct platform_device *pdev) @@ -927,7 +938,9 @@ static int dsa_probe(struct platform_device *pdev) platform_set_drvdata(pdev, dst); - dsa_setup_dst(dst, dev, &pdev->dev, pd); + ret = dsa_setup_dst(dst, dev, &pdev->dev, pd); + if (ret) + goto out; return 0;