--- a/compat/Makefile
+++ b/compat/Makefile
@@ -35,8 +35,6 @@ compat-$(CPTCFG_KERNEL_4_6) += backport-
 
 compat-$(CPTCFG_BPAUTO_BUILD_CRYPTO_CCM) += crypto-ccm.o
 compat-$(CPTCFG_BPAUTO_CRYPTO_SKCIPHER) += crypto-skcipher.o
-skcipher-objs += crypto-skcipher.o
-obj-$(CPTCFG_BPAUTO_CRYPTO_SKCIPHER) += skcipher.o
 compat-$(CPTCFG_BPAUTO_BUILD_WANT_DEV_COREDUMP) += drivers-base-devcoredump.o
 compat-$(CPTCFG_BPAUTO_RHASHTABLE) += lib-rhashtable.o
 cordic-objs += lib-cordic.o
--- a/compat/drivers-base-devcoredump.c
+++ b/compat/drivers-base-devcoredump.c
@@ -31,6 +31,7 @@
 #include <linux/slab.h>
 #include <linux/fs.h>
 #include <linux/workqueue.h>
+#include "backports.h"
 
 static struct class devcd_class;
 
@@ -40,6 +41,10 @@ static bool devcd_disabled;
 /* if data isn't read by userspace after 5 minutes then delete it */
 #define DEVCD_TIMEOUT	(HZ * 60 * 5)
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
+static struct bin_attribute devcd_attr_data;
+#endif
+
 struct devcd_entry {
 	struct device devcd_dev;
 	void *data;
@@ -69,8 +74,7 @@ static void devcd_dev_release(struct dev
 	 * a struct device to know when it goes away?
 	 */
 	if (devcd->failing_dev->kobj.sd)
-		sysfs_delete_link(&devcd->failing_dev->kobj, &dev->kobj,
-				  "devcoredump");
+		sysfs_remove_link(&devcd->failing_dev->kobj, "devcoredump");
 
 	put_device(devcd->failing_dev);
 	kfree(devcd);
@@ -82,6 +86,9 @@ static void devcd_del(struct work_struct
 
 	devcd = container_of(wk, struct devcd_entry, del_wk.work);
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
+	device_remove_bin_file(&devcd->devcd_dev, &devcd_attr_data);
+#endif
 	device_del(&devcd->devcd_dev);
 	put_device(&devcd->devcd_dev);
 }
@@ -115,6 +122,7 @@ static struct bin_attribute devcd_attr_d
 	.write = devcd_data_write,
 };
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)
 static struct bin_attribute *devcd_dev_bin_attrs[] = {
 	&devcd_attr_data, NULL,
 };
@@ -126,6 +134,7 @@ static const struct attribute_group devc
 static const struct attribute_group *devcd_dev_groups[] = {
 	&devcd_dev_group, NULL,
 };
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0) */
 
 static int devcd_free(struct device *dev, void *data)
 {
@@ -160,18 +169,11 @@ static ssize_t disabled_store(struct cla
 
 	return count;
 }
-static CLASS_ATTR_RW(disabled);
 
-static struct attribute *devcd_class_attrs[] = {
-	&class_attr_disabled.attr,
-	NULL,
+static struct class_attribute devcd_class_attrs[] = {
+	__ATTR_RW(disabled),
+	__ATTR_NULL
 };
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)
-ATTRIBUTE_GROUPS(devcd_class);
-#else
-#define BP_ATTR_GRP_STRUCT device_attribute
-ATTRIBUTE_GROUPS_BACKPORT(devcd_class);
-#endif
 
 static struct class devcd_class = {
 	.name		= "devcoredump",
@@ -179,10 +181,8 @@ static struct class devcd_class = {
 	.dev_release	= devcd_dev_release,
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)
 	.dev_groups	= devcd_dev_groups,
-#else
-	.dev_attrs = devcd_class_dev_attrs,
 #endif
-	.class_groups	= devcd_class_groups,
+	.class_attrs	= devcd_class_attrs,
 };
 
 static ssize_t devcd_readv(char *buffer, loff_t offset, size_t count,
@@ -325,6 +325,11 @@ void dev_coredumpm(struct device *dev, s
 	if (device_add(&devcd->devcd_dev))
 		goto put_device;
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
+	if (device_create_bin_file(&devcd->devcd_dev, &devcd_attr_data))
+		goto put_device;
+#endif
+
 	if (sysfs_create_link(&devcd->devcd_dev.kobj, &dev->kobj,
 			      "failing_device"))
 		/* nothing - symlink will be missing */;
@@ -367,16 +372,13 @@ void dev_coredumpsg(struct device *dev,
 }
 EXPORT_SYMBOL_GPL(dev_coredumpsg);
 
-static int __init devcoredump_init(void)
+int __init devcoredump_init(void)
 {
-	init_devcd_class_attrs();
 	return class_register(&devcd_class);
 }
-__initcall(devcoredump_init);
 
-static void __exit devcoredump_exit(void)
+void __exit devcoredump_exit(void)
 {
 	class_for_each_device(&devcd_class, NULL, NULL, devcd_free);
 	class_unregister(&devcd_class);
 }
-__exitcall(devcoredump_exit);
--- a/include/linux/backport-devcoredump.h
+++ b/include/linux/backport-devcoredump.h
@@ -66,7 +66,7 @@ static inline void _devcd_free_sgtable(s
 }
 
 
-#ifdef CONFIG_DEV_COREDUMP
+#ifdef CPTCFG_BPAUTO_WANT_DEV_COREDUMP
 void dev_coredumpv(struct device *dev, void *data, size_t datalen,
 		   gfp_t gfp);
 
@@ -100,6 +100,6 @@ static inline void dev_coredumpsg(struct
 {
 	_devcd_free_sgtable(table);
 }
-#endif /* CONFIG_DEV_COREDUMP */
+#endif /* CPTCFG_BPAUTO_WANT_DEV_COREDUMP */
 
 #endif /* __DEVCOREDUMP_H */
