Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1235885 > unrolled thread

[RFC PATCH 3/3] net: dsa: exit probe if no switch were found

Started byNeil Armstrong <narmstrong@baylibre.com>
First post2015-09-30 10:30 +0200
Last post2015-10-02 19:40 +0200
Articles 5 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [RFC PATCH 3/3] net: dsa: exit probe if no switch were found Neil Armstrong <narmstrong@baylibre.com> - 2015-09-30 10:30 +0200
    Re: [RFC PATCH 3/3] net: dsa: exit probe if no switch were found Neil Armstrong <narmstrong@baylibre.com> - 2015-10-01 17:30 +0200
      Re: [RFC PATCH 3/3] net: dsa: exit probe if no switch were found Andrew Lunn <andrew@lunn.ch> - 2015-10-01 18:40 +0200
        Re: [RFC PATCH 3/3] net: dsa: exit probe if no switch were found Neil Armstrong <narmstrong@baylibre.com> - 2015-10-02 14:20 +0200
          Re: [RFC PATCH 3/3] net: dsa: exit probe if no switch were found Florian Fainelli <f.fainelli@gmail.com> - 2015-10-02 19:40 +0200

#1235885 — [RFC PATCH 3/3] net: dsa: exit probe if no switch were found

FromNeil Armstrong <narmstrong@baylibre.com>
Date2015-09-30 10:30 +0200
Subject[RFC PATCH 3/3] net: dsa: exit probe if no switch were found
Message-ID<qekVY-7TY-13@gated-at.bofh.it>
If no switch were found in dsa_setup_dst, return -ENODEV and
exit the dsa_probe cleanly.

Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
---
 net/dsa/dsa.c | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
index 0c104af..6ae1ab9 100644
--- a/net/dsa/dsa.c
+++ b/net/dsa/dsa.c
@@ -844,10 +844,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,
+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;
@@ -867,9 +868,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 -ENODEV;
+
+	/*
 	 * 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.
@@ -885,6 +894,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)
@@ -934,9 +945,9 @@ static int dsa_probe(struct platform_device *pdev)

 	platform_set_drvdata(pdev, dst);

-	dsa_setup_dst(dst, dev, &pdev->dev, pd);
-
-	return 0;
+	ret = dsa_setup_dst(dst, dev, &pdev->dev, pd);
+	if (!ret)
+		return 0;

 out:
 	dsa_of_remove(&pdev->dev);
-- 
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1237510

FromNeil Armstrong <narmstrong@baylibre.com>
Date2015-10-01 17:30 +0200
Message-ID<qeNXY-6n-19@gated-at.bofh.it>
In reply to#1235885
On 09/30/2015 10:21 AM, Neil Armstrong wrote:
> If no switch were found in dsa_setup_dst, return -ENODEV and
> exit the dsa_probe cleanly.
> 
> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
> ---
>  net/dsa/dsa.c | 19 +++++++++++++++----
>  1 file changed, 15 insertions(+), 4 deletions(-)
> 
> diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
> index 0c104af..6ae1ab9 100644
> --- a/net/dsa/dsa.c
> +++ b/net/dsa/dsa.c
> @@ -844,10 +844,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,
> +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;
> @@ -867,9 +868,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 -ENODEV;
> +
> +	/*
>  	 * 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.
> @@ -885,6 +894,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)
> @@ -934,9 +945,9 @@ static int dsa_probe(struct platform_device *pdev)
> 
>  	platform_set_drvdata(pdev, dst);
> 
> -	dsa_setup_dst(dst, dev, &pdev->dev, pd);
> -
> -	return 0;
> +	ret = dsa_setup_dst(dst, dev, &pdev->dev, pd);
> +	if (!ret)
> +		return 0;
> 
>  out:
>  	dsa_of_remove(&pdev->dev);
> 

Couldn't we use the probe defer mechanism here ? (until complete rework is done)

How could we re-probe after a register_switch_driver ?

Neil
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1237558

FromAndrew Lunn <andrew@lunn.ch>
Date2015-10-01 18:40 +0200
Message-ID<qeP3I-1CP-21@gated-at.bofh.it>
In reply to#1237510
On Thu, Oct 01, 2015 at 05:27:32PM +0200, Neil Armstrong wrote:
> On 09/30/2015 10:21 AM, Neil Armstrong wrote:
> > If no switch were found in dsa_setup_dst, return -ENODEV and
> > exit the dsa_probe cleanly.

...
 
> Couldn't we use the probe defer mechanism here ? (until complete rework is done)

Hi Neil

I was thinking the same last night. We know the switch should be
there, otherwise it would not be in DT. So returning -EPROBE_DEFER
would be valid.

      Andrew
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1238152

FromNeil Armstrong <narmstrong@baylibre.com>
Date2015-10-02 14:20 +0200
Message-ID<qf7tE-351-7@gated-at.bofh.it>
In reply to#1237558
On 10/01/2015 06:32 PM, Andrew Lunn wrote:
> On Thu, Oct 01, 2015 at 05:27:32PM +0200, Neil Armstrong wrote:
>> On 09/30/2015 10:21 AM, Neil Armstrong wrote:
>>> If no switch were found in dsa_setup_dst, return -ENODEV and
>>> exit the dsa_probe cleanly.
> 
> ...
>  
>> Couldn't we use the probe defer mechanism here ? (until complete rework is done)
> 
> Hi Neil
> 
> I was thinking the same last night. We know the switch should be
> there, otherwise it would not be in DT. So returning -EPROBE_DEFER
> would be valid.
> 
>       Andrew
> 
Hi,

It makes sens but does a module insertion triggers the differed probe ?

I will still post this change in a next set of patch.

Neil
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1238459

FromFlorian Fainelli <f.fainelli@gmail.com>
Date2015-10-02 19:40 +0200
Message-ID<qfctl-1MB-43@gated-at.bofh.it>
In reply to#1238152
On 02/10/15 05:10, Neil Armstrong wrote:
> On 10/01/2015 06:32 PM, Andrew Lunn wrote:
>> On Thu, Oct 01, 2015 at 05:27:32PM +0200, Neil Armstrong wrote:
>>> On 09/30/2015 10:21 AM, Neil Armstrong wrote:
>>>> If no switch were found in dsa_setup_dst, return -ENODEV and
>>>> exit the dsa_probe cleanly.
>>
>> ...
>>  
>>> Couldn't we use the probe defer mechanism here ? (until complete rework is done)
>>
>> Hi Neil
>>
>> I was thinking the same last night. We know the switch should be
>> there, otherwise it would not be in DT. So returning -EPROBE_DEFER
>> would be valid.
>>
>>       Andrew
>>
> Hi,
> 
> It makes sens but does a module insertion triggers the differed probe ?

That's a good question, I am not convinced this is the case. Even with
the EPROBE_DEFER returned if the list of drivers is empty, you would
still very likely run into the following circular dependency, if you
make everything built as a module:

- dsa provides register_switch_driver and unregister_switch_driver
- switch drivers in drivers/net/dsa/* depend on these two symbols, so
until these symbols are loaded, the module loader cannot complete their
load successfully
- dsa will not be able to make any progress, that is, its driver list
will be empty as long as no switch driver is loaded

If you build dsa into your kernel, you might be fine though, or in a
better shape at least.
-- 
Florian
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web