hc
2023-11-22 f743a7adbd6e230d66a6206fa115b59fec2d88eb
kernel/include/linux/device.h
....@@ -1711,6 +1711,8 @@
17111711 } \
17121712 module_exit(__driver##_exit);
17131713
1714
+
1715
+
17141716 #define module_driver1(__driver, __register, __unregister, ...) \
17151717 static int __init __driver##_init(void) \
17161718 { \
....@@ -1722,6 +1724,21 @@
17221724 __unregister(&(__driver) , ##__VA_ARGS__); \
17231725 } \
17241726 module_exit(__driver##_exit);
1727
+
1728
+
1729
+
1730
+#define module_driver2(__driver, __register, __unregister, ...) \
1731
+static int __init __driver##_init(void) \
1732
+{ \
1733
+ return __register(&(__driver) , ##__VA_ARGS__); \
1734
+} \
1735
+late_initcall(__driver##_init); \
1736
+static void __exit __driver##_exit(void) \
1737
+{ \
1738
+ __unregister(&(__driver) , ##__VA_ARGS__); \
1739
+} \
1740
+module_exit(__driver##_exit);
1741
+
17251742 /**
17261743 * builtin_driver() - Helper macro for drivers that don't do anything
17271744 * special in init and have no exit. This eliminates some boilerplate.