struct felix *felix;
        int err;
 
-       felix = kzalloc(sizeof(*felix), GFP_KERNEL);
+       felix = devm_kzalloc(dev, sizeof(*felix), GFP_KERNEL);
        if (!felix)
                return -ENOMEM;
 
 
        felix->info = &vsc7512_info;
 
-       ds = kzalloc(sizeof(*ds), GFP_KERNEL);
-       if (!ds) {
-               err = -ENOMEM;
-               dev_err_probe(dev, err, "Failed to allocate DSA switch\n");
-               goto err_free_felix;
-       }
+       ds = devm_kzalloc(dev, sizeof(*ds), GFP_KERNEL);
+       if (!ds)
+               return -ENOMEM;
 
        ds->dev = dev;
        ds->num_ports = felix->info->num_ports;
        felix->tag_proto = DSA_TAG_PROTO_OCELOT;
 
        err = dsa_register_switch(ds);
-       if (err) {
+       if (err)
                dev_err_probe(dev, err, "Failed to register DSA switch\n");
-               goto err_free_ds;
-       }
-
-       return 0;
 
-err_free_ds:
-       kfree(ds);
-err_free_felix:
-       kfree(felix);
        return err;
 }
 
                return;
 
        dsa_unregister_switch(felix->ds);
-
-       kfree(felix->ds);
-       kfree(felix);
 }
 
 static void ocelot_ext_shutdown(struct platform_device *pdev)