diff options
author | Vivien Didelot <vivien.didelot@savoirfairelinux.com> | 2017-01-27 15:29:36 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-01-29 18:42:46 -0500 |
commit | a0c02161ecfc2f40a0837926efac5376bc6fd6d3 (patch) | |
tree | f92b3c15cc967474f75c35d91f0450c5970e8fb9 /net/dsa/dsa2.c | |
parent | 1f5d492a34311545b87d223c7fc1d531c610a410 (diff) |
net: dsa: variable number of ports
Change the ports[DSA_MAX_PORTS] array of the dsa_switch structure for a
zero-length array, allocated at the same time as the dsa_switch
structure itself. A dsa_switch_alloc() helper is provided for that.
This commit brings no functional change yet since we pass DSA_MAX_PORTS
as the number of ports for the moment. Future patches can update the DSA
drivers separately to support dynamic number of ports.
Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/dsa/dsa2.c')
-rw-r--r-- | net/dsa/dsa2.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index 75f5d1f8554b..4b3a44bec5c8 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c | |||
@@ -666,6 +666,22 @@ out: | |||
666 | return err; | 666 | return err; |
667 | } | 667 | } |
668 | 668 | ||
669 | struct dsa_switch *dsa_switch_alloc(struct device *dev, size_t n) | ||
670 | { | ||
671 | size_t size = sizeof(struct dsa_switch) + n * sizeof(struct dsa_port); | ||
672 | struct dsa_switch *ds; | ||
673 | |||
674 | ds = devm_kzalloc(dev, size, GFP_KERNEL); | ||
675 | if (!ds) | ||
676 | return NULL; | ||
677 | |||
678 | ds->dev = dev; | ||
679 | ds->num_ports = n; | ||
680 | |||
681 | return ds; | ||
682 | } | ||
683 | EXPORT_SYMBOL_GPL(dsa_switch_alloc); | ||
684 | |||
669 | int dsa_register_switch(struct dsa_switch *ds, struct device *dev) | 685 | int dsa_register_switch(struct dsa_switch *ds, struct device *dev) |
670 | { | 686 | { |
671 | int err; | 687 | int err; |