ANDROID: Configure out the macros in android_kabi and android_vendor

Add configs to control removing the macros or not. On some platform,
configureing out the macros removes the associated members from the
structs, this reduces the object size of the slabs related with the
structs, therefore reduces the total slab memory consumption of system.

Besides, this also reduces vmlinux size a bit, therefore the total
kernel memory size increses a bit.

The macros are ANDROID_KABI_RESERVE, ANDROID_VENDOR_DATA,
ANDROID_VENDOR_DATA_ARRAY, ANDROID_OEM_DATA, ANDROID_OEM_DATA_ARRAY.

Bug: 206561931
(cherry picked from commit b7a6c15a6f)
Signed-off-by: Qingqing Zhou <quic_qqzhou@quicinc.com>
(cherry picked from commit 3c06a5ce5e5857a1dff88a784e58e32bbddaf759)
Signed-off-by: Jaskaran Singh <quic_jasksing@quicinc.com>
Change-Id: Iea4b962dff386a17c9bef20ae048be4e17bf43ab
This commit is contained in:
Jaskaran Singh
2021-11-30 10:20:40 +08:00
parent 3d21efc81c
commit e12dcc29cc
3 changed files with 54 additions and 0 deletions

View File

@@ -74,6 +74,41 @@ config ANDROID_VENDOR_HOOKS
Allow vendor modules to attach to tracepoint "hooks" defined via Allow vendor modules to attach to tracepoint "hooks" defined via
DECLARE_HOOK or DECLARE_RESTRICTED_HOOK. DECLARE_HOOK or DECLARE_RESTRICTED_HOOK.
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. 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
use the Android kernel tracepoints. 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.
endif # if ANDROID endif # if ANDROID
endmenu endmenu

View File

@@ -83,7 +83,11 @@
* number: the "number" of the padding variable in the structure. Start with * number: the "number" of the padding variable in the structure. Start with
* 1 and go up. * 1 and go up.
*/ */
#ifdef CONFIG_ANDROID_KABI_RESERVE
#define ANDROID_KABI_RESERVE(number) _ANDROID_KABI_RESERVE(number) #define ANDROID_KABI_RESERVE(number) _ANDROID_KABI_RESERVE(number)
#else
#define ANDROID_KABI_RESERVE(number)
#endif
/* /*

View File

@@ -26,10 +26,25 @@
* Same as ANDROID_VENDOR_DATA but allocates an array of u64 with * Same as ANDROID_VENDOR_DATA but allocates an array of u64 with
* the specified size * the specified size
*/ */
#ifdef CONFIG_ANDROID_VENDOR_OEM_DATA
#define ANDROID_VENDOR_DATA(n) u64 android_vendor_data##n #define ANDROID_VENDOR_DATA(n) u64 android_vendor_data##n
#define ANDROID_VENDOR_DATA_ARRAY(n, s) u64 android_vendor_data##n[s] #define ANDROID_VENDOR_DATA_ARRAY(n, s) u64 android_vendor_data##n[s]
#define ANDROID_OEM_DATA(n) u64 android_oem_data##n #define ANDROID_OEM_DATA(n) u64 android_oem_data##n
#define ANDROID_OEM_DATA_ARRAY(n, s) u64 android_oem_data##n[s] #define ANDROID_OEM_DATA_ARRAY(n, s) u64 android_oem_data##n[s]
#define android_init_vendor_data(p, n) \
memset(&p->android_vendor_data##n, 0, sizeof(p->android_vendor_data##n))
#define android_init_oem_data(p, n) \
memset(&p->android_oem_data##n, 0, sizeof(p->android_oem_data##n))
#else
#define ANDROID_VENDOR_DATA(n)
#define ANDROID_VENDOR_DATA_ARRAY(n, s)
#define ANDROID_OEM_DATA(n)
#define ANDROID_OEM_DATA_ARRAY(n, s)
#define android_init_vendor_data(p, n)
#define android_init_oem_data(p, n)
#endif
#endif /* _ANDROID_VENDOR_H */ #endif /* _ANDROID_VENDOR_H */