net: dsa: Fix load order between DSA drivers and taggers
The DSA core, DSA taggers and DSA drivers all make use of
module_init(). Hence they get initialised at device_initcall() time.
The ordering is non-deterministic. It can be a DSA driver is bound to
a device before the needed tag driver has been initialised, resulting
in the message:
No tagger for this switch
Rather than have this be fatal, return -EPROBE_DEFER so that it is
tried again later once all the needed drivers have been loaded.
Fixes: d3b8c04988 ("dsa: Add boilerplate helper to register DSA tag driver modules")
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
			
			
This commit is contained in:
		
							parent
							
								
									d518d2ed86
								
							
						
					
					
						commit
						23426a25e5
					
				| @ -623,6 +623,8 @@ static int dsa_port_parse_cpu(struct dsa_port *dp, struct net_device *master) | ||||
| 	tag_protocol = ds->ops->get_tag_protocol(ds, dp->index); | ||||
| 	tag_ops = dsa_tag_driver_get(tag_protocol); | ||||
| 	if (IS_ERR(tag_ops)) { | ||||
| 		if (PTR_ERR(tag_ops) == -ENOPROTOOPT) | ||||
| 			return -EPROBE_DEFER; | ||||
| 		dev_warn(ds->dev, "No tagger for this switch\n"); | ||||
| 		return PTR_ERR(tag_ops); | ||||
| 	} | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user