Merge "Merge 25Q1 (ab/BP1A.250305.020) to AOSP main" into main
diff --git a/init/libprefetch/prefetch/prefetch.rc b/init/libprefetch/prefetch/prefetch.rc
index bdcbbc6..56fb827 100644
--- a/init/libprefetch/prefetch/prefetch.rc
+++ b/init/libprefetch/prefetch/prefetch.rc
@@ -30,7 +30,7 @@
disabled
oneshot
-service prefetch_replay /system/bin/prefetch replay --io-depth ${ro.prefetch_boot.io_depth:-2} --max-fds ${ro.prefetch_boot.max_fds:-128}
+service prefetch_replay /system/bin/prefetch replay --io-depth ${ro.prefetch_boot.io_depth:-2} --max-fds ${ro.prefetch_boot.max_fds:-1024}
user root
group root system
disabled
diff --git a/init/libprefetch/prefetch/src/arch/android.rs b/init/libprefetch/prefetch/src/arch/android.rs
index a87502d..7d446ba 100644
--- a/init/libprefetch/prefetch/src/arch/android.rs
+++ b/init/libprefetch/prefetch/src/arch/android.rs
@@ -12,6 +12,12 @@
const PREFETCH_RECORD_PROPERTY_STOP: &str = "prefetch_boot.record_stop";
+fn is_prefetch_enabled() -> Result<bool, Error> {
+ rustutils::system_properties::read_bool("ro.prefetch_boot.enabled", false).map_err(|e| {
+ Error::Custom { error: format!("Failed to read ro.prefetch_boot.enabled: {}", e) }
+ })
+}
+
fn wait_for_property_true(
property_name: &str,
timeout: Option<Duration>,
@@ -31,6 +37,10 @@
/// Checks if we can perform replay phase.
/// Ensure that the pack file exists and is up-to-date, returns false otherwise.
pub fn can_perform_replay(pack_path: &Path, fingerprint_path: &Path) -> Result<bool, Error> {
+ if !is_prefetch_enabled()? {
+ return Ok(false);
+ }
+
if !pack_path.exists() || !fingerprint_path.exists() {
return Ok(false);
}
@@ -54,6 +64,10 @@
pack_path: &Path,
fingerprint_path: &Path,
) -> Result<bool, Error> {
+ if !is_prefetch_enabled()? {
+ return Ok(false);
+ }
+
if !ready_path.exists() {
File::create(ready_path)
.map_err(|_| Error::Custom { error: "File Creation failed".to_string() })?;
diff --git a/rootdir/Android.bp b/rootdir/Android.bp
index 3204a9f..c0d31d9 100644
--- a/rootdir/Android.bp
+++ b/rootdir/Android.bp
@@ -118,6 +118,12 @@
}
prebuilt_etc {
+ name: "init-mmd-prop.rc",
+ src: "init-mmd-prop.rc",
+ sub_dir: "init",
+}
+
+prebuilt_etc {
name: "asan.options",
src: "asan.options",
}
diff --git a/rootdir/init-mmd-prop.rc b/rootdir/init-mmd-prop.rc
new file mode 100644
index 0000000..6e9191c
--- /dev/null
+++ b/rootdir/init-mmd-prop.rc
@@ -0,0 +1,19 @@
+on property:sys.boot_completed=1
+ # When mmd package is not included in the image, we need to initialize
+ # `mmd.enabled_aconfig` sysprop instead of `mmd --set-property`.
+ #
+ # This is because of the consideration for devices in Trunkfood and Nextfood
+ # under mmd being launched via AConfig flag. The devices set up zram with
+ # mmd if `mmd_enabled` AConfig flag is enabled, otherwise set up zram with
+ # swapon_all init command. Since AConfig does not support any init script
+ # integration, we use `mmd.enabled_aconfig` copied by `mmd --set-property`
+ # instead of AConfig flag itself and we need mmd.enabled_aconfig to be empty
+ # by default, to let swapon_all command wait until aconfig flag value is
+ # loaded to the system property.
+ # Devices in Trunkfood and Nextfood needs to execute swapon_all command on
+ # `on property:mmd.enabled_aconfig=*` trigger. So initializing
+ # `mmd.enabled_aconfig` sysprop is required on images without mmd package.
+ #
+ # Note that this init file must not be in the image if mmd is built into the
+ # image.
+ setprop mmd.enabled_aconfig false
\ No newline at end of file
diff --git a/rootdir/init.rc b/rootdir/init.rc
index 54493d5..7d74d12 100644
--- a/rootdir/init.rc
+++ b/rootdir/init.rc
@@ -994,8 +994,11 @@
mkdir /data/misc/stats-service/ 0770 statsd system
mkdir /data/misc/train-info/ 0770 statsd system
- # Wait for apexd to finish activating APEXes before starting more processes.
+ # TODO(b/369375199): Remove once attest modules flagging is removed.
wait_for_prop apexd.status activated
+ # Wait for KeyMints to receive APEX module info before starting code from updateable APEXes.
+ # This is to prevent APEX modules from interfering in module measurement.
+ wait_for_prop keystore.module_hash.sent true
perform_apex_config
exec_start system_aconfigd_mainline_init