net: dsa: remove dsa_switch_alloc helper
authorVivien Didelot <vivien.didelot@gmail.com>
Mon, 21 Oct 2019 20:51:30 +0000 (16:51 -0400)
committerJakub Kicinski <jakub.kicinski@netronome.com>
Tue, 22 Oct 2019 19:37:07 +0000 (12:37 -0700)
Now that ports are dynamically listed in the fabric, there is no need
to provide a special helper to allocate the dsa_switch structure. This
will give more flexibility to drivers to embed this structure as they
wish in their private structure.

Signed-off-by: Vivien Didelot <vivien.didelot@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
14 files changed:
drivers/net/dsa/b53/b53_common.c
drivers/net/dsa/dsa_loop.c
drivers/net/dsa/lan9303-core.c
drivers/net/dsa/lantiq_gswip.c
drivers/net/dsa/microchip/ksz_common.c
drivers/net/dsa/mt7530.c
drivers/net/dsa/mv88e6060.c
drivers/net/dsa/mv88e6xxx/chip.c
drivers/net/dsa/qca8k.c
drivers/net/dsa/realtek-smi-core.c
drivers/net/dsa/sja1105/sja1105_main.c
drivers/net/dsa/vitesse-vsc73xx-core.c
include/net/dsa.h
net/dsa/dsa2.c

index aef9b56781ef4a5db031ecf6ee58ea9da4936344..baadf622ac55f8c33f9fdb43a417d3afb9a768ad 100644 (file)
@@ -2341,10 +2341,13 @@ struct b53_device *b53_switch_alloc(struct device *base,
        struct dsa_switch *ds;
        struct b53_device *dev;
 
-       ds = dsa_switch_alloc(base, DSA_MAX_PORTS);
+       ds = devm_kzalloc(base, sizeof(*ds), GFP_KERNEL);
        if (!ds)
                return NULL;
 
+       ds->dev = base;
+       ds->num_ports = DSA_MAX_PORTS;
+
        dev = devm_kzalloc(base, sizeof(*dev), GFP_KERNEL);
        if (!dev)
                return NULL;
index 925ed135a4d9b2b218c97d72f4d0da96fc09e147..c8d7ef27fd72eb8c93fbf2d0d1c3c02ec0137ecd 100644 (file)
@@ -286,10 +286,13 @@ static int dsa_loop_drv_probe(struct mdio_device *mdiodev)
        dev_info(&mdiodev->dev, "%s: 0x%0x\n",
                 pdata->name, pdata->enabled_ports);
 
-       ds = dsa_switch_alloc(&mdiodev->dev, DSA_MAX_PORTS);
+       ds = devm_kzalloc(&mdiodev->dev, sizeof(*ds), GFP_KERNEL);
        if (!ds)
                return -ENOMEM;
 
+       ds->dev = &mdiodev->dev;
+       ds->num_ports = DSA_MAX_PORTS;
+
        ps = devm_kzalloc(&mdiodev->dev, sizeof(*ps), GFP_KERNEL);
        if (!ps)
                return -ENOMEM;
index bbec86b9418e632ee9bd1ff374f231639a2c136f..e3c333a8f45da29fd445a2f50f2d05138e414d6e 100644 (file)
@@ -1283,10 +1283,12 @@ static int lan9303_register_switch(struct lan9303 *chip)
 {
        int base;
 
-       chip->ds = dsa_switch_alloc(chip->dev, LAN9303_NUM_PORTS);
+       chip->ds = devm_kzalloc(chip->dev, sizeof(*chip->ds), GFP_KERNEL);
        if (!chip->ds)
                return -ENOMEM;
 
+       chip->ds->dev = chip->dev;
+       chip->ds->num_ports = LAN9303_NUM_PORTS;
        chip->ds->priv = chip;
        chip->ds->ops = &lan9303_switch_ops;
        base = chip->phy_addr_base;
index a69c9b9878b7d5a5ec6ee7f6b87e437a09844530..955324968b7447c5011e6fac2108a24fd5c975e8 100644 (file)
@@ -1854,10 +1854,12 @@ static int gswip_probe(struct platform_device *pdev)
        if (!priv->hw_info)
                return -EINVAL;
 
-       priv->ds = dsa_switch_alloc(dev, priv->hw_info->max_ports);
+       priv->ds = devm_kzalloc(dev, sizeof(*priv->ds), GFP_KERNEL);
        if (!priv->ds)
                return -ENOMEM;
 
+       priv->ds->dev = dev;
+       priv->ds->num_ports = priv->hw_info->max_ports;
        priv->ds->priv = priv;
        priv->ds->ops = &gswip_switch_ops;
        priv->dev = dev;
index fe47180c908b979fe9df3d40ee6729ca9d78828f..5d08e44308249164d96020162f23ccf848c78f27 100644 (file)
@@ -398,10 +398,13 @@ struct ksz_device *ksz_switch_alloc(struct device *base, void *priv)
        struct dsa_switch *ds;
        struct ksz_device *swdev;
 
-       ds = dsa_switch_alloc(base, DSA_MAX_PORTS);
+       ds = devm_kzalloc(base, sizeof(*ds), GFP_KERNEL);
        if (!ds)
                return NULL;
 
+       ds->dev = base;
+       ds->num_ports = DSA_MAX_PORTS;
+
        swdev = devm_kzalloc(base, sizeof(*swdev), GFP_KERNEL);
        if (!swdev)
                return NULL;
index a91293e47a57b72d2ed7021fc3a16bfeba7f49a2..add9e42791763be7182ee32d1aa1d70a9fcaa9b7 100644 (file)
@@ -1632,10 +1632,13 @@ mt7530_probe(struct mdio_device *mdiodev)
        if (!priv)
                return -ENOMEM;
 
-       priv->ds = dsa_switch_alloc(&mdiodev->dev, DSA_MAX_PORTS);
+       priv->ds = devm_kzalloc(&mdiodev->dev, sizeof(*priv->ds), GFP_KERNEL);
        if (!priv->ds)
                return -ENOMEM;
 
+       priv->ds->dev = &mdiodev->dev;
+       priv->ds->num_ports = DSA_MAX_PORTS;
+
        /* Use medatek,mcm property to distinguish hardware type that would
         * casues a little bit differences on power-on sequence.
         */
index 2a2489b5196d7c52dada2543ef1a62ea69abfbcf..a5a37f47b32086301c3c3aeef8c944a7616b3e8d 100644 (file)
@@ -270,10 +270,12 @@ static int mv88e6060_probe(struct mdio_device *mdiodev)
 
        dev_info(dev, "switch %s detected\n", name);
 
-       ds = dsa_switch_alloc(dev, MV88E6060_PORTS);
+       ds = devm_kzalloc(dev, sizeof(*ds), GFP_KERNEL);
        if (!ds)
                return -ENOMEM;
 
+       ds->dev = dev;
+       ds->num_ports = MV88E6060_PORTS;
        ds->priv = priv;
        ds->dev = dev;
        ds->ops = &mv88e6060_switch_ops;
index c53d4dc88e9039ef87c200e3d281db2d0ba3f34c..5fdf6d6ebe27d82a55a6a368e4bc622bd000345a 100644 (file)
@@ -4978,10 +4978,12 @@ static int mv88e6xxx_register_switch(struct mv88e6xxx_chip *chip)
        struct device *dev = chip->dev;
        struct dsa_switch *ds;
 
-       ds = dsa_switch_alloc(dev, mv88e6xxx_num_ports(chip));
+       ds = devm_kzalloc(dev, sizeof(*ds), GFP_KERNEL);
        if (!ds)
                return -ENOMEM;
 
+       ds->dev = dev;
+       ds->num_ports = mv88e6xxx_num_ports(chip);
        ds->priv = chip;
        ds->dev = dev;
        ds->ops = &mv88e6xxx_switch_ops;
index 71e44c8763b89e1d941857f35b7b05afafb942f2..7e742cd491e865921ffa80380e24017d28f087ae 100644 (file)
@@ -1077,10 +1077,13 @@ qca8k_sw_probe(struct mdio_device *mdiodev)
        if (id != QCA8K_ID_QCA8337)
                return -ENODEV;
 
-       priv->ds = dsa_switch_alloc(&mdiodev->dev, QCA8K_NUM_PORTS);
+       priv->ds = devm_kzalloc(&mdiodev->dev, sizeof(*priv->ds),
+                               QCA8K_NUM_PORTS);
        if (!priv->ds)
                return -ENOMEM;
 
+       priv->ds->dev = &mdiodev->dev;
+       priv->ds->num_ports = DSA_MAX_PORTS;
        priv->ds->priv = priv;
        priv->ops = qca8k_switch_ops;
        priv->ds->ops = &priv->ops;
index dc0509c02d29405f54a5618d75605ec898b2fe91..fae188c60191840cfc1c3f61612349bd8894b5f9 100644 (file)
@@ -444,9 +444,12 @@ static int realtek_smi_probe(struct platform_device *pdev)
                return ret;
        }
 
-       smi->ds = dsa_switch_alloc(dev, smi->num_ports);
+       smi->ds = devm_kzalloc(dev, sizeof(*smi->ds), GFP_KERNEL);
        if (!smi->ds)
                return -ENOMEM;
+
+       smi->ds->dev = dev;
+       smi->ds->num_ports = smi->num_ports;
        smi->ds->priv = smi;
 
        smi->ds->ops = var->ds_ops;
index 0ebbda5ca665f57ef6b2d0b522bf7ae95a6875bc..2ae84a9dea59a01a707f5bcf1ca0d5ef33be85df 100644 (file)
@@ -2047,10 +2047,12 @@ static int sja1105_probe(struct spi_device *spi)
 
        dev_info(dev, "Probed switch chip: %s\n", priv->info->name);
 
-       ds = dsa_switch_alloc(dev, SJA1105_NUM_PORTS);
+       ds = devm_kzalloc(dev, sizeof(*ds), GFP_KERNEL);
        if (!ds)
                return -ENOMEM;
 
+       ds->dev = dev;
+       ds->num_ports = SJA1105_NUM_PORTS;
        ds->ops = &sja1105_switch_ops;
        ds->priv = priv;
        priv->ds = ds;
index 614377ef7956533070ecc4aa7af04e82dd998a39..42c1574d45f2acc5a6c42b7f938f36bbbf5a36eb 100644 (file)
@@ -1178,9 +1178,12 @@ int vsc73xx_probe(struct vsc73xx *vsc)
         * We allocate 8 ports and avoid access to the nonexistant
         * ports.
         */
-       vsc->ds = dsa_switch_alloc(dev, 8);
+       vsc->ds = devm_kzalloc(dev, sizeof(*vsc->ds), GFP_KERNEL);
        if (!vsc->ds)
                return -ENOMEM;
+
+       vsc->ds->dev = dev;
+       vsc->ds->num_ports = 8;
        vsc->ds->priv = vsc;
 
        vsc->ds->ops = &vsc73xx_ds_ops;
index 9bc1d3f71f891f1174da4d87af2da368b8566902..e3c14dc3bab9d1ef5be620005ee61bbcf96f41d5 100644 (file)
@@ -577,7 +577,6 @@ static inline bool dsa_can_decode(const struct sk_buff *skb,
        return false;
 }
 
-struct dsa_switch *dsa_switch_alloc(struct device *dev, size_t n);
 void dsa_unregister_switch(struct dsa_switch *ds);
 int dsa_register_switch(struct dsa_switch *ds);
 #ifdef CONFIG_PM_SLEEP
index 83cba462369852bb1d682956433ec42efd745068..1e3ac9b56c89827505b9ceff72acdedb07c75def 100644 (file)
@@ -846,6 +846,12 @@ static int dsa_switch_probe(struct dsa_switch *ds)
        struct device_node *np = ds->dev->of_node;
        int err;
 
+       if (!ds->dev)
+               return -ENODEV;
+
+       if (!ds->num_ports)
+               return -EINVAL;
+
        if (np)
                err = dsa_switch_parse_of(ds, np);
        else if (pdata)
@@ -859,21 +865,6 @@ static int dsa_switch_probe(struct dsa_switch *ds)
        return dsa_switch_add(ds);
 }
 
-struct dsa_switch *dsa_switch_alloc(struct device *dev, size_t n)
-{
-       struct dsa_switch *ds;
-
-       ds = devm_kzalloc(dev, sizeof(*ds), GFP_KERNEL);
-       if (!ds)
-               return NULL;
-
-       ds->dev = dev;
-       ds->num_ports = n;
-
-       return ds;
-}
-EXPORT_SYMBOL_GPL(dsa_switch_alloc);
-
 int dsa_register_switch(struct dsa_switch *ds)
 {
        int err;