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