--- 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 #include #include +#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 */