Merge "instance.img is actually added as a writable partition"
diff --git a/microdroid/microdroid.json b/microdroid/microdroid.json
index ee3a737..da82289 100644
--- a/microdroid/microdroid.json
+++ b/microdroid/microdroid.json
@@ -30,10 +30,11 @@
       "partitions": [
         {
           "label": "uboot_env",
-          "paths": ["/apex/com.android.virt/etc/uboot_env.img"]
+          "paths": ["/apex/com.android.virt/etc/uboot_env.img"],
+          "writable": false
         }
       ],
-      "writable": false
+      "writable": true
     }
   ],
   "memory_mib": 2048
diff --git a/tests/hostside/java/android/virt/test/MicrodroidTestCase.java b/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
index 8afc287..c05a841 100644
--- a/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
+++ b/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
@@ -16,7 +16,6 @@
 
 package android.virt.test;
 
-import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 
@@ -54,6 +53,9 @@
         assertThat(runOnMicrodroid("ls", apkPartition), is(apkPartition));
         final String apkIdsigPartition = "/dev/block/by-name/microdroid-apk-idsig";
         assertThat(runOnMicrodroid("ls", apkIdsigPartition), is(apkIdsigPartition));
+        // Check the vm-instance partition as well
+        final String vmInstancePartition = "/dev/block/by-name/vm-instance";
+        assertThat(runOnMicrodroid("ls", vmInstancePartition), is(vmInstancePartition));
 
         // Check if the native library in the APK is has correct filesystem info
         final String[] abis = runOnMicrodroid("getprop", "ro.product.cpu.abilist").split(",");
diff --git a/virtualizationservice/src/aidl.rs b/virtualizationservice/src/aidl.rs
index 19e4877..8c5eb97 100644
--- a/virtualizationservice/src/aidl.rs
+++ b/virtualizationservice/src/aidl.rs
@@ -362,8 +362,7 @@
 ) -> Result<VirtualMachineRawConfig> {
     let apk_file = clone_file(config.apk.as_ref().unwrap())?;
     let idsig_file = clone_file(config.idsig.as_ref().unwrap())?;
-    // TODO(b/193504400) pass this to crosvm
-    let _instance_file = clone_file(config.instanceImage.as_ref().unwrap())?;
+    let instance_file = clone_file(config.instanceImage.as_ref().unwrap())?;
     let config_path = &config.configPath;
 
     let mut apk_zip = ZipArchive::new(&apk_file)?;
@@ -395,6 +394,7 @@
             temporary_directory,
             apk_file,
             idsig_file,
+            instance_file,
             apexes,
             &mut vm_config,
         )?;
diff --git a/virtualizationservice/src/payload.rs b/virtualizationservice/src/payload.rs
index 28ef502..a176e71 100644
--- a/virtualizationservice/src/payload.rs
+++ b/virtualizationservice/src/payload.rs
@@ -162,6 +162,7 @@
     temporary_directory: &Path,
     apk_file: File,
     idsig_file: File,
+    instance_file: File,
     mut apexes: Vec<ApexConfig>,
     vm_config: &mut VirtualMachineRawConfig,
 ) -> Result<()> {
@@ -189,5 +190,12 @@
         });
     }
 
+    // instance image is at the second partition in the second disk.
+    vm_config.disks[1].partitions.push(Partition {
+        label: "vm-instance".to_owned(),
+        images: vec![ParcelFileDescriptor::new(instance_file)],
+        writable: true,
+    });
+
     Ok(())
 }