return len;
 }
+static DEVICE_ATTR(kill, S_IWUSR, NULL, store_kill);
 
-static ssize_t show_ntcs(struct device *cd, struct device_attribute *attr,
+static ssize_t ntcs_show(struct device *cd, struct device_attribute *attr,
                         char *buf)
 {
        struct vpe *vpe = get_vpe(tclimit);
        return sprintf(buf, "%d\n", vpe->ntcs);
 }
 
-static ssize_t store_ntcs(struct device *dev, struct device_attribute *attr,
+static ssize_t ntcs_store(struct device *dev, struct device_attribute *attr,
                          const char *buf, size_t len)
 {
        struct vpe *vpe = get_vpe(tclimit);
 out_einval:
        return -EINVAL;
 }
+static DEVICE_ATTR_RW(ntcs);
 
-static struct device_attribute vpe_class_attributes[] = {
-       __ATTR(kill, S_IWUSR, NULL, store_kill),
-       __ATTR(ntcs, S_IRUGO | S_IWUSR, show_ntcs, store_ntcs),
-       {}
+static struct attribute vpe_attrs[] = {
+       &dev_attr_kill.attr,
+       &dev_attr_ntcs.attr,
+       NULL,
 };
+ATTRIBUTE_GROUPS(vpe);
 
 static void vpe_device_release(struct device *cd)
 {
        .name = "vpe",
        .owner = THIS_MODULE,
        .dev_release = vpe_device_release,
-       .dev_attrs = vpe_class_attributes,
+       .dev_groups = vpe_groups,
 };
 
 struct device vpe_device;