I got it! _exit macro of rb_hardconfig_init seems to cause this kernel panic. Here is a patch.
Regards, Denis.
From e042f7d0a72ff9b69fd34ab2f3bac2b698da776f Mon Sep 17 00:00:00 2001 From: Denis Kalashnikov <[email protected]> Date: Mon, 15 Nov 2021 11:27:14 +0300 Subject: [PATCH] Fixes to generic: platform/mikrotik: use MTD notifier --- .../files/drivers/platform/mikrotik/rb_hardconfig.c | 9 ++++----- .../files/drivers/platform/mikrotik/rb_softconfig.c | 7 +++---- .../generic/files/drivers/platform/mikrotik/routerboot.c | 1 + .../generic/files/drivers/platform/mikrotik/routerboot.h | 8 ++++---- 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.c b/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.c index 1f076a9666..5ae798b3ce 100644 --- a/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.c +++ b/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.c @@ -676,7 +676,7 @@ static ssize_t hc_wlan_data_bin_read(struct file *filp, struct kobject *kobj, return count; } -int __init rb_hardconfig_init(struct kobject *rb_kobj, struct mtd_info *mtd) +int rb_hardconfig_init(struct kobject *rb_kobj, struct mtd_info *mtd) { struct kobject *hc_wlan_kobj; size_t bytes_read, buflen, outlen; @@ -689,8 +689,7 @@ int __init rb_hardconfig_init(struct kobject *rb_kobj, struct mtd_info *mtd) hc_kobj = NULL; hc_wlan_kobj = NULL; - ret = __get_mtd_device(mtd); - if (IS_ERR(ret)) + if (__get_mtd_device(mtd)) return -ENODEV; hc_buflen = mtd->size; @@ -816,10 +815,10 @@ fail: return ret; } -void __exit rb_hardconfig_exit(void) +void rb_hardconfig_exit(void) { kobject_put(hc_kobj); hc_kobj = NULL; kfree(hc_buf); - hc_buff = NULL; + hc_buf = NULL; } diff --git a/target/linux/generic/files/drivers/platform/mikrotik/rb_softconfig.c b/target/linux/generic/files/drivers/platform/mikrotik/rb_softconfig.c index 3bbf4038ae..575ef60e33 100644 --- a/target/linux/generic/files/drivers/platform/mikrotik/rb_softconfig.c +++ b/target/linux/generic/files/drivers/platform/mikrotik/rb_softconfig.c @@ -705,7 +705,7 @@ mtdfail: static struct kobj_attribute sc_kattrcommit = __ATTR(commit, RB_SC_RMODE|RB_SC_WMODE, sc_commit_show, sc_commit_store); -int __init rb_softconfig_init(struct kobject *rb_kobj, struct mtd_info *mtd) +int rb_softconfig_init(struct kobject *rb_kobj, struct mtd_info *mtd) { size_t bytes_read, buflen; const u8 *buf; @@ -715,8 +715,7 @@ int __init rb_softconfig_init(struct kobject *rb_kobj, struct mtd_info *mtd) sc_buf = NULL; sc_kobj = NULL; - ret = __get_mtd_device(mtd); - if (IS_ERR(ret)) + if (__get_mtd_device(mtd)) return -ENODEV; sc_buflen = mtd->size; @@ -797,7 +796,7 @@ fail: return ret; } -void __exit rb_softconfig_exit(void) +void rb_softconfig_exit(void) { kobject_put(sc_kobj); sc_kobj = NULL; diff --git a/target/linux/generic/files/drivers/platform/mikrotik/routerboot.c b/target/linux/generic/files/drivers/platform/mikrotik/routerboot.c index 13ecfab2ba..9cc080779a 100644 --- a/target/linux/generic/files/drivers/platform/mikrotik/routerboot.c +++ b/target/linux/generic/files/drivers/platform/mikrotik/routerboot.c @@ -13,6 +13,7 @@ #include <linux/module.h> #include <linux/kernel.h> #include <linux/sysfs.h> +#include <linux/mtd/mtd.h> #include "routerboot.h" diff --git a/target/linux/generic/files/drivers/platform/mikrotik/routerboot.h b/target/linux/generic/files/drivers/platform/mikrotik/routerboot.h index 747136b2c1..e858a524af 100644 --- a/target/linux/generic/files/drivers/platform/mikrotik/routerboot.h +++ b/target/linux/generic/files/drivers/platform/mikrotik/routerboot.h @@ -25,11 +25,11 @@ int routerboot_tag_find(const u8 *bufhead, const size_t buflen, const u16 tag_id, u16 *pld_ofs, u16 *pld_len); int routerboot_rle_decode(const u8 *in, size_t inlen, u8 *out, size_t *outlen); -int __init rb_hardconfig_init(struct kobject *rb_kobj, struct mtd_info *mtd); -void __exit rb_hardconfig_exit(void); +int rb_hardconfig_init(struct kobject *rb_kobj, struct mtd_info *mtd); +void rb_hardconfig_exit(void); -int __init rb_softconfig_init(struct kobject *rb_kobj, struct mtd_info *mtd); -void __exit rb_softconfig_exit(void); +int rb_softconfig_init(struct kobject *rb_kobj, struct mtd_info *mtd); +void rb_softconfig_exit(void); ssize_t routerboot_tag_show_string(const u8 *pld, u16 pld_len, char *buf); ssize_t routerboot_tag_show_u32s(const u8 *pld, u16 pld_len, char *buf); -- 2.31.1
_______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/mailman/listinfo/openwrt-devel
