forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a notifier block per DSA switch, registered against a notifier head in the switch fabric they belong to. This infrastructure will allow to propagate fabric-wide events such as port bridging, VLAN configuration, etc. If a DSA switch driver cares about cross-chip configuration, such events can be caught. Signed-off-by: Vivien Didelot <[email protected]> Signed-off-by: David S. Miller <[email protected]>
- Loading branch information
Showing
6 changed files
with
77 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
/* | ||
* Handling of a single switch chip, part of a switch fabric | ||
* | ||
* Copyright (c) 2017 Vivien Didelot <[email protected]> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation; either version 2 of the License, or | ||
* (at your option) any later version. | ||
*/ | ||
|
||
#include <linux/netdevice.h> | ||
#include <linux/notifier.h> | ||
#include <net/dsa.h> | ||
|
||
static int dsa_switch_event(struct notifier_block *nb, | ||
unsigned long event, void *info) | ||
{ | ||
struct dsa_switch *ds = container_of(nb, struct dsa_switch, nb); | ||
int err; | ||
|
||
switch (event) { | ||
default: | ||
err = -EOPNOTSUPP; | ||
break; | ||
} | ||
|
||
/* Non-switchdev operations cannot be rolled back. If a DSA driver | ||
* returns an error during the chained call, switch chips may be in an | ||
* inconsistent state. | ||
*/ | ||
if (err) | ||
dev_dbg(ds->dev, "breaking chain for DSA event %lu (%d)\n", | ||
event, err); | ||
|
||
return notifier_from_errno(err); | ||
} | ||
|
||
int dsa_switch_register_notifier(struct dsa_switch *ds) | ||
{ | ||
ds->nb.notifier_call = dsa_switch_event; | ||
|
||
return raw_notifier_chain_register(&ds->dst->nh, &ds->nb); | ||
} | ||
|
||
void dsa_switch_unregister_notifier(struct dsa_switch *ds) | ||
{ | ||
int err; | ||
|
||
err = raw_notifier_chain_unregister(&ds->dst->nh, &ds->nb); | ||
if (err) | ||
dev_err(ds->dev, "failed to unregister notifier (%d)\n", err); | ||
} |