ANDROID: Split ANDROID_STRUCT_PADDING into separate configs
Not all non-GKI platforms support disabling ANDROID_STRUCT_PADDING,
as some modules may require Android vendor data. However, it would be
beneficial to have the option to disable some of the struct paddings,
such as ANDROID_KABI_RESERVE, for memory savings given a situation
where the ANDROID_STRUCT_PADDING config cannot be disabled.
Split the ANDROID_STRUCT_PADDING config into two configs, one to control
ANDROID_VENDOR_DATA and ANDROID_OEM_DATA, and another to control
ANDROID_KABI_RESERVE.
Bug: 206561931
Change-Id: Iea4b962dff386a17c9bef20ae048be4e17bf43ab
Signed-off-by: Jaskaran Singh <quic_jasksing@quicinc.com>
diff --git a/drivers/android/Kconfig b/drivers/android/Kconfig
index c9636c3..491751a 100644
--- a/drivers/android/Kconfig
+++ b/drivers/android/Kconfig
@@ -74,14 +74,32 @@
Allow vendor modules to attach to tracepoint "hooks" defined via
DECLARE_HOOK or DECLARE_RESTRICTED_HOOK.
-config ANDROID_STRUCT_PADDING
- bool "Android Struct Padding"
+config ANDROID_KABI_RESERVE
+ bool "Android KABI reserve padding"
+ default y
+ help
+ This option enables the padding that the Android GKI kernel adds
+ to many different kernel structures to support an in-kernel stable ABI
+ over the lifespan of support for the kernel.
+
+ Only disable this option if you have a system that needs the Android
+ kernel drivers, but is NOT an Android GKI kernel image. If disabled
+ it has the possibility to make the kernel static and runtime image
+ slightly smaller but will NOT be supported by the Google Android
+ kernel team.
+
+ If even slightly unsure, say Y.
+
+config ANDROID_VENDOR_OEM_DATA
+ bool "Android vendor and OEM data padding"
default y
help
This option enables the padding that the Android GKI kernel adds
to many different kernel structures to support an in-kernel stable ABI
over the lifespan of support for the kernel as well as OEM additional
- fields that are needed by some of the Android kernel tracepoints.
+ fields that are needed by some of the Android kernel tracepoints. The
+ macros enabled by this option are used to enable padding in vendor modules
+ used for the above specified purposes.
Only disable this option if you have a system that needs the Android
kernel drivers, but is NOT an Android GKI kernel image and you do NOT
diff --git a/include/linux/android_kabi.h b/include/linux/android_kabi.h
index dc0da1a..f6dd7f0 100644
--- a/include/linux/android_kabi.h
+++ b/include/linux/android_kabi.h
@@ -83,7 +83,7 @@
* number: the "number" of the padding variable in the structure. Start with
* 1 and go up.
*/
-#ifdef CONFIG_ANDROID_STRUCT_PADDING
+#ifdef CONFIG_ANDROID_KABI_RESERVE
#define ANDROID_KABI_RESERVE(number) _ANDROID_KABI_RESERVE(number)
#else
#define ANDROID_KABI_RESERVE(number)
diff --git a/include/linux/android_vendor.h b/include/linux/android_vendor.h
index ab3dca2..af3014c 100644
--- a/include/linux/android_vendor.h
+++ b/include/linux/android_vendor.h
@@ -26,7 +26,7 @@
* Same as ANDROID_VENDOR_DATA but allocates an array of u64 with
* the specified size
*/
-#ifdef CONFIG_ANDROID_STRUCT_PADDING
+#ifdef CONFIG_ANDROID_VENDOR_OEM_DATA
#define ANDROID_VENDOR_DATA(n) u64 android_vendor_data##n
#define ANDROID_VENDOR_DATA_ARRAY(n, s) u64 android_vendor_data##n[s]
diff --git a/init/init_task.c b/init/init_task.c
index 26e018f..9b8ad68 100644
--- a/init/init_task.c
+++ b/init/init_task.c
@@ -213,7 +213,7 @@ struct task_struct init_task
#ifdef CONFIG_SECCOMP_FILTER
.seccomp = { .filter_count = ATOMIC_INIT(0) },
#endif
-#ifdef CONFIG_ANDROID_STRUCT_PADDING
+#ifdef CONFIG_ANDROID_VENDOR_OEM_DATA
.android_vendor_data1 = {0, },
.android_oem_data1 = {0, },
#endif