static const struct net_device_ops ppp_netdev_ops;
 
-static struct class *ppp_class;
+static const struct class ppp_class = {
+       .name = "ppp",
+};
 
 /* per net-namespace data */
 static inline struct ppp_net *ppp_pernet(struct net *net)
                goto out_net;
        }
 
-       ppp_class = class_create("ppp");
-       if (IS_ERR(ppp_class)) {
-               err = PTR_ERR(ppp_class);
+       err = class_register(&ppp_class);
+       if (err)
                goto out_chrdev;
-       }
 
        err = rtnl_link_register(&ppp_link_ops);
        if (err) {
        }
 
        /* not a big deal if we fail here :-) */
-       device_create(ppp_class, NULL, MKDEV(PPP_MAJOR, 0), NULL, "ppp");
+       device_create(&ppp_class, NULL, MKDEV(PPP_MAJOR, 0), NULL, "ppp");
 
        return 0;
 
 out_class:
-       class_destroy(ppp_class);
+       class_unregister(&ppp_class);
 out_chrdev:
        unregister_chrdev(PPP_MAJOR, "ppp");
 out_net:
                pr_err("PPP: removing module but units remain!\n");
        rtnl_link_unregister(&ppp_link_ops);
        unregister_chrdev(PPP_MAJOR, "ppp");
-       device_destroy(ppp_class, MKDEV(PPP_MAJOR, 0));
-       class_destroy(ppp_class);
+       device_destroy(&ppp_class, MKDEV(PPP_MAJOR, 0));
+       class_unregister(&ppp_class);
        unregister_pernet_device(&ppp_net_ops);
 }