Merge "Removing compression bit from v3 op" into main
diff --git a/fastboot/fastboot.cpp b/fastboot/fastboot.cpp
index b12e584..56b90b9 100644
--- a/fastboot/fastboot.cpp
+++ b/fastboot/fastboot.cpp
@@ -1414,21 +1414,6 @@
}
}
-bool is_retrofit_device(const ImageSource* source) {
- // Does this device use dynamic partitions at all?
- std::vector<char> contents;
- if (!source->ReadFile("super_empty.img", &contents)) {
- return false;
- }
- auto metadata = android::fs_mgr::ReadFromImageBlob(contents.data(), contents.size());
- for (const auto& partition : metadata->partitions) {
- if (partition.attributes & LP_PARTITION_ATTR_SLOT_SUFFIXED) {
- return true;
- }
- }
- return false;
-}
-
// Fetch a partition from the device to a given fd. This is a wrapper over FetchToFd to fetch
// the full image.
static uint64_t fetch_partition(const std::string& partition, borrowed_fd fd,
@@ -1880,19 +1865,6 @@
// Sync the super partition. This will reboot to userspace fastboot if needed.
tasks.emplace_back(std::make_unique<UpdateSuperTask>(fp_));
- for (const auto& [image, slot] : os_images_) {
- // Retrofit devices have two super partitions, named super_a and super_b.
- // On these devices, secondary slots must be flashed as physical
- // partitions (otherwise they would not mount on first boot). To enforce
- // this, we delete any logical partitions for the "other" slot.
- if (is_retrofit_device(fp_->source.get())) {
- std::string partition_name = image->part_name + "_" + slot;
- if (image->IsSecondary() &&
- should_flash_in_userspace(fp_->source.get(), partition_name)) {
- tasks.emplace_back(std::make_unique<DeleteTask>(fp_, partition_name));
- }
- }
- }
AddFlashTasks(os_images_, tasks);
diff --git a/fastboot/fastboot.h b/fastboot/fastboot.h
index cd7bc2d..2c40890 100644
--- a/fastboot/fastboot.h
+++ b/fastboot/fastboot.h
@@ -188,7 +188,6 @@
std::vector<SparsePtr> resparse_file(sparse_file* s, int64_t max_size);
bool supports_AB(fastboot::IFastBootDriver* fb);
-bool is_retrofit_device(const ImageSource* source);
bool is_logical(const std::string& partition);
void fb_perform_format(const std::string& partition, int skip_if_not_supported,
const std::string& type_override, const std::string& size_override,
diff --git a/fs_mgr/libsnapshot/partition_cow_creator.cpp b/fs_mgr/libsnapshot/partition_cow_creator.cpp
index 7057223..5bc7e65 100644
--- a/fs_mgr/libsnapshot/partition_cow_creator.cpp
+++ b/fs_mgr/libsnapshot/partition_cow_creator.cpp
@@ -131,15 +131,28 @@
return is_optimized;
}
-void WriteExtent(DmSnapCowSizeCalculator* sc, const chromeos_update_engine::Extent& de,
+bool WriteExtent(DmSnapCowSizeCalculator* sc, const chromeos_update_engine::Extent& de,
unsigned int sectors_per_block) {
const auto block_boundary = de.start_block() + de.num_blocks();
for (auto b = de.start_block(); b < block_boundary; ++b) {
for (unsigned int s = 0; s < sectors_per_block; ++s) {
- const auto sector_id = b * sectors_per_block + s;
+ // sector_id = b * sectors_per_block + s;
+ uint64_t block_start_sector_id;
+ if (__builtin_mul_overflow(b, sectors_per_block, &block_start_sector_id)) {
+ LOG(ERROR) << "Integer overflow when calculating sector id (" << b << " * "
+ << sectors_per_block << ")";
+ return false;
+ }
+ uint64_t sector_id;
+ if (__builtin_add_overflow(block_start_sector_id, s, §or_id)) {
+ LOG(ERROR) << "Integer overflow when calculating sector id ("
+ << block_start_sector_id << " + " << s << ")";
+ return false;
+ }
sc->WriteSector(sector_id);
}
}
+ return true;
}
std::optional<uint64_t> PartitionCowCreator::GetCowSize() {
@@ -167,7 +180,7 @@
// Allocate space for extra extents (if any). These extents are those that can be
// used for error corrections or to store verity hash trees.
for (const auto& de : extra_extents) {
- WriteExtent(&sc, de, sectors_per_block);
+ if (!WriteExtent(&sc, de, sectors_per_block)) return std::nullopt;
}
if (update == nullptr) return sc.cow_size_bytes();
@@ -182,7 +195,7 @@
}
for (const auto& de : written_op->dst_extents()) {
- WriteExtent(&sc, de, sectors_per_block);
+ if (!WriteExtent(&sc, de, sectors_per_block)) return std::nullopt;
}
}
diff --git a/init/property_service.cpp b/init/property_service.cpp
index 2064fae..cdd0afe 100644
--- a/init/property_service.cpp
+++ b/init/property_service.cpp
@@ -1461,8 +1461,6 @@
work_.pop_front();
}
- std::this_thread::sleep_for(1s);
-
// Perform write/fsync outside the lock.
WritePersistentProperty(std::get<0>(item), std::get<1>(item));
NotifyPropertyChange(std::get<0>(item), std::get<1>(item));
diff --git a/libcutils/socket_local_unix.h b/libcutils/socket_local_unix.h
index 45b9856..ea98c08 100644
--- a/libcutils/socket_local_unix.h
+++ b/libcutils/socket_local_unix.h
@@ -17,6 +17,8 @@
#ifndef __SOCKET_LOCAL_H
#define __SOCKET_LOCAL_H
+#include <sys/socket.h>
+
#define FILESYSTEM_SOCKET_PREFIX "/tmp/"
#define ANDROID_RESERVED_SOCKET_PREFIX "/dev/socket/"
diff --git a/libprocessgroup/processgroup.cpp b/libprocessgroup/processgroup.cpp
index 4506439..cc2565f 100644
--- a/libprocessgroup/processgroup.cpp
+++ b/libprocessgroup/processgroup.cpp
@@ -219,7 +219,7 @@
while (retries--) {
ret = rmdir(uid_pid_path.c_str());
- if (!ret || errno != EBUSY) break;
+ if (!ret || errno != EBUSY || !retries) break;
std::this_thread::sleep_for(5ms);
}
diff --git a/libprocessgroup/profiles/cgroups.json b/libprocessgroup/profiles/cgroups.json
index d013ec8..3e4393d 100644
--- a/libprocessgroup/profiles/cgroups.json
+++ b/libprocessgroup/profiles/cgroups.json
@@ -1,6 +1,13 @@
{
"Cgroups": [
{
+ "Controller": "blkio",
+ "Path": "/dev/blkio",
+ "Mode": "0775",
+ "UID": "system",
+ "GID": "system"
+ },
+ {
"Controller": "cpu",
"Path": "/dev/cpuctl",
"Mode": "0755",
@@ -32,12 +39,6 @@
{
"Controller": "freezer",
"Path": "."
- },
- {
- "Controller": "io",
- "Path": ".",
- "NeedsActivation": true,
- "Optional": true
}
]
}
diff --git a/libprocessgroup/profiles/task_profiles.json b/libprocessgroup/profiles/task_profiles.json
index 12f7b44..1fc66ba 100644
--- a/libprocessgroup/profiles/task_profiles.json
+++ b/libprocessgroup/profiles/task_profiles.json
@@ -76,24 +76,6 @@
"Name": "FreezerState",
"Controller": "freezer",
"File": "cgroup.freeze"
- },
- {
- "Name": "BfqWeight",
- "Controller": "io",
- "File": "blkio.bfq.weight",
- "FileV2": "io.bfq.weight"
- },
- {
- "Name": "CfqGroupIdle",
- "Controller": "io",
- "File": "blkio.group_idle",
- "FileV2": "io.group_idle"
- },
- {
- "Name": "CfqWeight",
- "Controller": "io",
- "File": "blkio.weight",
- "FileV2": "io.weight"
}
],
@@ -457,30 +439,11 @@
"Name": "LowIoPriority",
"Actions": [
{
- "Name": "SetAttribute",
+ "Name": "JoinCgroup",
"Params":
{
- "Name": "BfqWeight",
- "Value": "10",
- "Optional": "true"
- }
- },
- {
- "Name": "SetAttribute",
- "Params":
- {
- "Name": "CfqGroupIdle",
- "Value": "0",
- "Optional": "true"
- }
- },
- {
- "Name": "SetAttribute",
- "Params":
- {
- "Name": "CfqWeight",
- "Value": "200",
- "Optional": "true"
+ "Controller": "blkio",
+ "Path": "background"
}
}
]
@@ -489,30 +452,11 @@
"Name": "NormalIoPriority",
"Actions": [
{
- "Name": "SetAttribute",
+ "Name": "JoinCgroup",
"Params":
{
- "Name": "BfqWeight",
- "Value": "100",
- "Optional": "true"
- }
- },
- {
- "Name": "SetAttribute",
- "Params":
- {
- "Name": "CfqGroupIdle",
- "Value": "0",
- "Optional": "true"
- }
- },
- {
- "Name": "SetAttribute",
- "Params":
- {
- "Name": "CfqWeight",
- "Value": "1000",
- "Optional": "true"
+ "Controller": "blkio",
+ "Path": ""
}
}
]
@@ -521,30 +465,11 @@
"Name": "HighIoPriority",
"Actions": [
{
- "Name": "SetAttribute",
+ "Name": "JoinCgroup",
"Params":
{
- "Name": "BfqWeight",
- "Value": "100",
- "Optional": "true"
- }
- },
- {
- "Name": "SetAttribute",
- "Params":
- {
- "Name": "CfqGroupIdle",
- "Value": "0",
- "Optional": "true"
- }
- },
- {
- "Name": "SetAttribute",
- "Params":
- {
- "Name": "CfqWeight",
- "Value": "1000",
- "Optional": "true"
+ "Controller": "blkio",
+ "Path": ""
}
}
]
@@ -553,30 +478,11 @@
"Name": "MaxIoPriority",
"Actions": [
{
- "Name": "SetAttribute",
+ "Name": "JoinCgroup",
"Params":
{
- "Name": "BfqWeight",
- "Value": "100",
- "Optional": "true"
- }
- },
- {
- "Name": "SetAttribute",
- "Params":
- {
- "Name": "CfqGroupIdle",
- "Value": "0",
- "Optional": "true"
- }
- },
- {
- "Name": "SetAttribute",
- "Params":
- {
- "Name": "CfqWeight",
- "Value": "1000",
- "Optional": "true"
+ "Controller": "blkio",
+ "Path": ""
}
}
]
diff --git a/rootdir/init.rc b/rootdir/init.rc
index fb64736..317f809 100644
--- a/rootdir/init.rc
+++ b/rootdir/init.rc
@@ -219,6 +219,26 @@
write /dev/stune/nnapi-hal/schedtune.boost 1
write /dev/stune/nnapi-hal/schedtune.prefer_idle 1
+ # Create blkio group and apply initial settings.
+ # This feature needs kernel to support it, and the
+ # device's init.rc must actually set the correct values.
+ mkdir /dev/blkio/background
+ chown system system /dev/blkio
+ chown system system /dev/blkio/background
+ chown system system /dev/blkio/tasks
+ chown system system /dev/blkio/background/tasks
+ chown system system /dev/blkio/cgroup.procs
+ chown system system /dev/blkio/background/cgroup.procs
+ chmod 0664 /dev/blkio/tasks
+ chmod 0664 /dev/blkio/background/tasks
+ chmod 0664 /dev/blkio/cgroup.procs
+ chmod 0664 /dev/blkio/background/cgroup.procs
+ write /dev/blkio/blkio.weight 1000
+ write /dev/blkio/background/blkio.weight 200
+ write /dev/blkio/background/blkio.bfq.weight 10
+ write /dev/blkio/blkio.group_idle 0
+ write /dev/blkio/background/blkio.group_idle 0
+
restorecon_recursive /mnt
mount configfs none /config nodev noexec nosuid
diff --git a/trusty/utils/acvp/trusty_modulewrapper.cpp b/trusty/utils/acvp/trusty_modulewrapper.cpp
index 70ffb52..85b7159 100644
--- a/trusty/utils/acvp/trusty_modulewrapper.cpp
+++ b/trusty/utils/acvp/trusty_modulewrapper.cpp
@@ -21,15 +21,16 @@
#include <android-base/result.h>
#include <android-base/unique_fd.h>
#include <errno.h>
+#include <iostream>
#include <log/log.h>
#include <modulewrapper.h>
#include <openssl/span.h>
#include <stdint.h>
#include <stdlib.h>
+#include <string.h>
#include <sys/mman.h>
#include <trusty/tipc.h>
#include <unistd.h>
-#include <iostream>
#include "acvp_ipc.h"
@@ -208,6 +209,11 @@
return {};
}
+static bool EqString(bssl::Span<const uint8_t> cmd, const char *str) {
+ return cmd.size() == strlen(str) &&
+ memcmp(str, cmd.data(), cmd.size()) == 0;
+}
+
int main() {
for (;;) {
auto buffer = bssl::acvp::RequestBuffer::New();
@@ -217,17 +223,24 @@
return EXIT_FAILURE;
}
- ModuleWrapper wrapper;
- auto res = wrapper.SendMessage(args);
- if (!res.ok()) {
- std::cerr << res.error() << std::endl;
- return EXIT_FAILURE;
- }
+ if (EqString(args[0], "flush")) {
+ if (!bssl::acvp::FlushBuffer(STDOUT_FILENO)) {
+ ALOGE("Could not flush the buffer to stdout\n");
+ return EXIT_FAILURE;
+ }
+ } else {
+ ModuleWrapper wrapper;
+ auto res = wrapper.SendMessage(args);
+ if (!res.ok()) {
+ std::cerr << res.error() << std::endl;
+ return EXIT_FAILURE;
+ }
- res = wrapper.ForwardResponse();
- if (!res.ok()) {
- std::cerr << res.error() << std::endl;
- return EXIT_FAILURE;
+ res = wrapper.ForwardResponse();
+ if (!res.ok()) {
+ std::cerr << res.error() << std::endl;
+ return EXIT_FAILURE;
+ }
}
}