Merge "libprocessgroup: Use pid_t for ProfileAction::ExecuteForTask" into main
diff --git a/fs_mgr/libfiemap/fiemap_writer_test.cpp b/fs_mgr/libfiemap/fiemap_writer_test.cpp
index c37329c..115f53e 100644
--- a/fs_mgr/libfiemap/fiemap_writer_test.cpp
+++ b/fs_mgr/libfiemap/fiemap_writer_test.cpp
@@ -66,7 +66,11 @@
testfile = gTestDir + "/"s + tinfo->name();
}
- void TearDown() override { unlink(testfile.c_str()); }
+ void TearDown() override {
+ truncate(testfile.c_str(), 0);
+ unlink(testfile.c_str());
+ sync();
+ }
// name of the file we use for testing
std::string testfile;
diff --git a/fs_mgr/libfiemap/split_fiemap_writer.cpp b/fs_mgr/libfiemap/split_fiemap_writer.cpp
index 0df6125..1f32d2f 100644
--- a/fs_mgr/libfiemap/split_fiemap_writer.cpp
+++ b/fs_mgr/libfiemap/split_fiemap_writer.cpp
@@ -196,10 +196,13 @@
if (access(file.c_str(), F_OK) != 0 && (errno == ENOENT || errno == ENAMETOOLONG)) {
continue;
}
+ truncate(file.c_str(), 0);
ok &= android::base::RemoveFileIfExists(file, message);
}
}
+ truncate(file_path.c_str(), 0);
ok &= android::base::RemoveFileIfExists(file_path, message);
+ sync();
return ok;
}
diff --git a/fs_mgr/libsnapshot/snapshotctl.cpp b/fs_mgr/libsnapshot/snapshotctl.cpp
index 97a8cb2..46de991 100644
--- a/fs_mgr/libsnapshot/snapshotctl.cpp
+++ b/fs_mgr/libsnapshot/snapshotctl.cpp
@@ -105,7 +105,7 @@
bool FinishSnapshotWrites();
bool UnmapCowImagePath(std::string& name);
bool DeleteSnapshots();
- bool CleanupSnapshot() { return sm_->PrepareDeviceToBootWithoutSnapshot(); }
+ bool CleanupSnapshot();
bool BeginUpdate();
bool ApplyUpdate();
@@ -495,6 +495,11 @@
return sm_->UnmapCowImage(name);
}
+bool MapSnapshots::CleanupSnapshot() {
+ sm_ = SnapshotManager::New();
+ return sm_->PrepareDeviceToBootWithoutSnapshot();
+}
+
bool MapSnapshots::DeleteSnapshots() {
sm_ = SnapshotManager::New();
lock_ = sm_->LockExclusive();
diff --git a/init/block_dev_initializer.cpp b/init/block_dev_initializer.cpp
index cabeb01..8f52158 100644
--- a/init/block_dev_initializer.cpp
+++ b/init/block_dev_initializer.cpp
@@ -98,11 +98,7 @@
LOG(VERBOSE) << __PRETTY_FUNCTION__ << ": found partition: " << name;
- // Remove partition from the list only if it was found on boot device
- if (device_handler_->IsBootDevice(uevent)) {
- devices->erase(iter);
- }
-
+ devices->erase(iter);
device_handler_->HandleUevent(uevent);
return devices->empty() ? ListenerAction::kStop : ListenerAction::kContinue;
}
diff --git a/init/devices.cpp b/init/devices.cpp
index 6a3a64d..f2bb9d2 100644
--- a/init/devices.cpp
+++ b/init/devices.cpp
@@ -188,28 +188,6 @@
}
}
-bool DeviceHandler::IsBootDevice(const Uevent& uevent) const {
- std::string device;
-
- if (FindPlatformDevice(uevent.path, &device)) {
- // Skip /devices/platform or /devices/ if present
- static constexpr std::string_view devices_platform_prefix = "/devices/platform/";
- static constexpr std::string_view devices_prefix = "/devices/";
-
- if (StartsWith(device, devices_platform_prefix)) {
- device = device.substr(devices_platform_prefix.length());
- } else if (StartsWith(device, devices_prefix)) {
- device = device.substr(devices_prefix.length());
- }
- } else if (FindPciDevicePrefix(uevent.path, &device)) {
- } else if (FindVbdDevicePrefix(uevent.path, &device)) {
- } else {
- return false;
- }
-
- return boot_devices_.find(device) != boot_devices_.end();
-}
-
std::string DeviceHandler::GetPartitionNameForDevice(const std::string& query_device) {
static const auto partition_map = [] {
std::vector<std::pair<std::string, std::string>> partition_map;
diff --git a/init/devices.h b/init/devices.h
index 4df604d..6da1232 100644
--- a/init/devices.h
+++ b/init/devices.h
@@ -133,7 +133,6 @@
// `androidboot.partition_map=vdb,metadata;vdc,userdata` maps `vdb` to `metadata` and `vdc` to
// `userdata`.
static std::string GetPartitionNameForDevice(const std::string& device);
- bool IsBootDevice(const Uevent& uevent) const;
private:
void ColdbootDone() override;
diff --git a/init/epoll.cpp b/init/epoll.cpp
index cd73a0c..719a532 100644
--- a/init/epoll.cpp
+++ b/init/epoll.cpp
@@ -47,8 +47,8 @@
auto [it, inserted] = epoll_handlers_.emplace(
fd, Info{
- .events = events,
.handler = std::move(handler),
+ .events = events,
});
if (!inserted) {
return Error() << "Cannot specify two epoll handlers for a given FD";
diff --git a/init/first_stage_mount.cpp b/init/first_stage_mount.cpp
index ece430b..99bf0de 100644
--- a/init/first_stage_mount.cpp
+++ b/init/first_stage_mount.cpp
@@ -305,11 +305,6 @@
return false;
}
}
-
- if (IsArcvm() && !block_dev_init_.InitHvcDevice("hvc1")) {
- return false;
- }
-
return true;
}
diff --git a/init/selinux.cpp b/init/selinux.cpp
index 01af2b6..c2d9b8d 100644
--- a/init/selinux.cpp
+++ b/init/selinux.cpp
@@ -474,8 +474,6 @@
RestoreconIfExists(SnapshotManager::GetGlobalRollbackIndicatorPath().c_str(), 0);
RestoreconIfExists("/metadata/gsi",
SELINUX_ANDROID_RESTORECON_RECURSE | SELINUX_ANDROID_RESTORECON_SKIP_SEHASH);
-
- RestoreconIfExists("/dev/hvc1", 0);
}
int SelinuxKlogCallback(int type, const char* fmt, ...) {
diff --git a/init/service_parser.cpp b/init/service_parser.cpp
index e6f3af6..ec3b176 100644
--- a/init/service_parser.cpp
+++ b/init/service_parser.cpp
@@ -538,12 +538,9 @@
// when we migrate to cgroups v2 while these hardcoded paths stay the same.
static std::optional<const std::string> ConvertTaskFileToProfile(const std::string& file) {
static const std::map<const std::string, const std::string> map = {
- {"/dev/stune/top-app/tasks", "MaxPerformance"},
- {"/dev/stune/foreground/tasks", "HighPerformance"},
{"/dev/cpuset/camera-daemon/tasks", "CameraServiceCapacity"},
{"/dev/cpuset/foreground/tasks", "ProcessCapacityHigh"},
{"/dev/cpuset/system-background/tasks", "ServiceCapacityLow"},
- {"/dev/stune/nnapi-hal/tasks", "NNApiHALPerformance"},
{"/dev/blkio/background/tasks", "LowIoPriority"},
};
auto iter = map.find(file);
diff --git a/init/util.h b/init/util.h
index 0565391..aa24123 100644
--- a/init/util.h
+++ b/init/util.h
@@ -18,7 +18,6 @@
#include <sys/stat.h>
#include <sys/types.h>
-#include <sys/unistd.h>
#include <chrono>
#include <functional>
@@ -109,10 +108,6 @@
#endif
}
-inline bool IsArcvm() {
- return !access("/is_arcvm", F_OK);
-}
-
bool Has32BitAbi();
std::string GetApexNameFromFileName(const std::string& path);
diff --git a/libprocessgroup/task_profiles.cpp b/libprocessgroup/task_profiles.cpp
index 67ecc1d..bdee9ae 100644
--- a/libprocessgroup/task_profiles.cpp
+++ b/libprocessgroup/task_profiles.cpp
@@ -203,33 +203,15 @@
// To avoid issues in sdk_mac build
#if defined(__ANDROID__)
-bool SetTimerSlackAction::IsTimerSlackSupported(pid_t tid) {
- auto file = StringPrintf("/proc/%d/timerslack_ns", tid);
-
- return (access(file.c_str(), W_OK) == 0);
-}
-
bool SetTimerSlackAction::ExecuteForTask(pid_t tid) const {
- static bool sys_supports_timerslack = IsTimerSlackSupported(tid);
-
- // v4.6+ kernels support the /proc/<tid>/timerslack_ns interface.
- // TODO: once we've backported this, log if the open(2) fails.
- if (sys_supports_timerslack) {
- auto file = StringPrintf("/proc/%d/timerslack_ns", tid);
- if (!WriteStringToFile(std::to_string(slack_), file)) {
- if (errno == ENOENT) {
- // This happens when process is already dead
- return true;
- }
- PLOG(ERROR) << "set_timerslack_ns write failed";
+ const auto file = StringPrintf("/proc/%d/timerslack_ns", tid);
+ if (!WriteStringToFile(std::to_string(slack_), file)) {
+ if (errno == ENOENT) {
+ // This happens when process is already dead
+ return true;
}
- }
-
- // TODO: Remove when /proc/<tid>/timerslack_ns interface is backported.
- if (tid == 0 || tid == GetThreadId()) {
- if (prctl(PR_SET_TIMERSLACK, slack_) == -1) {
- PLOG(ERROR) << "set_timerslack_ns prctl failed";
- }
+ PLOG(ERROR) << "set_timerslack_ns write failed";
+ return false;
}
return true;
diff --git a/libprocessgroup/task_profiles.h b/libprocessgroup/task_profiles.h
index 8ff2078..e52ce38 100644
--- a/libprocessgroup/task_profiles.h
+++ b/libprocessgroup/task_profiles.h
@@ -114,8 +114,6 @@
private:
unsigned long slack_;
-
- static bool IsTimerSlackSupported(pid_t tid);
};
// Set attribute profile element
diff --git a/libstats/pull_lazy/Android.bp b/libstats/pull_lazy/Android.bp
index 65dce26..71af170 100644
--- a/libstats/pull_lazy/Android.bp
+++ b/libstats/pull_lazy/Android.bp
@@ -32,7 +32,7 @@
"-Wall",
"-Werror",
],
- test_suites: ["device-tests", "mts-statsd"],
+ test_suites: ["device-tests"],
test_config: "libstatspull_lazy_test.xml",
// TODO(b/153588990): Remove when the build system properly separates.
// 32bit and 64bit architectures.
diff --git a/libstats/socket_lazy/Android.bp b/libstats/socket_lazy/Android.bp
index 241e87a..945a7c4 100644
--- a/libstats/socket_lazy/Android.bp
+++ b/libstats/socket_lazy/Android.bp
@@ -36,7 +36,6 @@
],
test_suites: [
"device-tests",
- "mts-statsd",
],
test_config: "libstatssocket_lazy_test.xml",
// TODO(b/153588990): Remove when the build system properly separates.
diff --git a/libutils/binder/VectorImpl.cpp b/libutils/binder/VectorImpl.cpp
index d951b8b..a62664f 100644
--- a/libutils/binder/VectorImpl.cpp
+++ b/libutils/binder/VectorImpl.cpp
@@ -463,7 +463,8 @@
size_t new_size;
LOG_ALWAYS_FATAL_IF(__builtin_sub_overflow(mCount, amount, &new_size));
- if (new_size < (capacity() / 2)) {
+ const size_t prev_capacity = capacity();
+ if (new_size < (prev_capacity / 2) && prev_capacity > kMinVectorCapacity) {
// NOTE: (new_size * 2) is safe because capacity didn't overflow and
// new_size < (capacity / 2)).
const size_t new_capacity = max(kMinVectorCapacity, new_size * 2);
diff --git a/libvendorsupport/include_llndk/android/llndk-versioning.h b/libvendorsupport/include_llndk/android/llndk-versioning.h
index 0402c28..81d165f 100644
--- a/libvendorsupport/include_llndk/android/llndk-versioning.h
+++ b/libvendorsupport/include_llndk/android/llndk-versioning.h
@@ -25,15 +25,15 @@
__attribute__((annotate("introduced_in_llndk=" #vendor_api_level)))
#endif
-#if defined(__ANDROID_VNDK__)
-
+#if defined(__ANDROID_VENDOR_API__)
+// __ANDROID_VENDOR_API__ is defined only for vendor or product variant modules.
// Use this macro as an `if` statement to call an API that are available to both NDK and LLNDK.
-// This returns true for the vendor modules if the vendor_api_level is less than or equal to the
-// ro.board.api_level.
+// This returns true for vendor or product modules if the vendor_api_level is less than or equal to
+// the ro.board.api_level.
#define API_LEVEL_AT_LEAST(sdk_api_level, vendor_api_level) \
constexpr(__ANDROID_VENDOR_API__ >= vendor_api_level)
-#else // __ANDROID_VNDK__
+#else // __ANDROID_VENDOR_API__
// For non-vendor modules, API_LEVEL_AT_LEAST is replaced with __builtin_available(sdk_api_level) to
// guard the API for __INTRODUCED_IN.
@@ -42,4 +42,4 @@
(__builtin_available(android sdk_api_level, *))
#endif
-#endif // __ANDROID_VNDK__
+#endif // __ANDROID_VENDOR_API__
diff --git a/rootdir/init.rc b/rootdir/init.rc
index 339f1be..3e1d481 100644
--- a/rootdir/init.rc
+++ b/rootdir/init.rc
@@ -112,37 +112,6 @@
# Create socket dir for ot-daemon
mkdir /dev/socket/ot-daemon 0770 thread_network thread_network
- # Create energy-aware scheduler tuning nodes
- mkdir /dev/stune/foreground
- mkdir /dev/stune/background
- mkdir /dev/stune/top-app
- mkdir /dev/stune/rt
- chown system system /dev/stune
- chown system system /dev/stune/foreground
- chown system system /dev/stune/background
- chown system system /dev/stune/top-app
- chown system system /dev/stune/rt
- chown system system /dev/stune/tasks
- chown system system /dev/stune/foreground/tasks
- chown system system /dev/stune/background/tasks
- chown system system /dev/stune/top-app/tasks
- chown system system /dev/stune/rt/tasks
- chown system system /dev/stune/cgroup.procs
- chown system system /dev/stune/foreground/cgroup.procs
- chown system system /dev/stune/background/cgroup.procs
- chown system system /dev/stune/top-app/cgroup.procs
- chown system system /dev/stune/rt/cgroup.procs
- chmod 0664 /dev/stune/tasks
- chmod 0664 /dev/stune/foreground/tasks
- chmod 0664 /dev/stune/background/tasks
- chmod 0664 /dev/stune/top-app/tasks
- chmod 0664 /dev/stune/rt/tasks
- chmod 0664 /dev/stune/cgroup.procs
- chmod 0664 /dev/stune/foreground/cgroup.procs
- chmod 0664 /dev/stune/background/cgroup.procs
- chmod 0664 /dev/stune/top-app/cgroup.procs
- chmod 0664 /dev/stune/rt/cgroup.procs
-
# cpuctl hierarchy for devices using utilclamp
mkdir /dev/cpuctl/foreground
mkdir /dev/cpuctl/foreground_window
@@ -216,24 +185,6 @@
chmod 0664 /dev/cpuctl/camera-daemon/tasks
chmod 0664 /dev/cpuctl/camera-daemon/cgroup.procs
- # Create an stune group for camera-specific processes
- mkdir /dev/stune/camera-daemon
- chown system system /dev/stune/camera-daemon
- chown system system /dev/stune/camera-daemon/tasks
- chown system system /dev/stune/camera-daemon/cgroup.procs
- chmod 0664 /dev/stune/camera-daemon/tasks
- chmod 0664 /dev/stune/camera-daemon/cgroup.procs
-
- # Create an stune group for NNAPI HAL processes
- mkdir /dev/stune/nnapi-hal
- chown system system /dev/stune/nnapi-hal
- chown system system /dev/stune/nnapi-hal/tasks
- chown system system /dev/stune/nnapi-hal/cgroup.procs
- chmod 0664 /dev/stune/nnapi-hal/tasks
- chmod 0664 /dev/stune/nnapi-hal/cgroup.procs
- 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.
diff --git a/trusty/libtrusty/tipc-test/tipc_test.c b/trusty/libtrusty/tipc-test/tipc_test.c
index 3cf0c05..121837d 100644
--- a/trusty/libtrusty/tipc-test/tipc_test.c
+++ b/trusty/libtrusty/tipc-test/tipc_test.c
@@ -67,7 +67,7 @@
static const char* receiver_name = "com.android.trusty.memref.receiver";
static const size_t memref_chunk_size = 4096;
-static const char* _sopts = "hsvDS:t:r:m:b:B:";
+static const char* _sopts = "hsvD:S:t:r:m:b:B:";
/* clang-format off */
static const struct option _lopts[] = {
{"help", no_argument, 0, 'h'},
diff --git a/trusty/utils/trusty-ut-ctrl/ut-ctrl.c b/trusty/utils/trusty-ut-ctrl/ut-ctrl.c
index 6cc6670..31cfd4c 100644
--- a/trusty/utils/trusty-ut-ctrl/ut-ctrl.c
+++ b/trusty/utils/trusty-ut-ctrl/ut-ctrl.c
@@ -95,12 +95,26 @@
TEST_FAILED = 1,
TEST_MESSAGE = 2,
TEST_TEXT = 3,
+ TEST_OPCODE_COUNT,
};
+static int get_msg_len(const char* buf, int max_buf_len) {
+ int buf_len;
+ for (buf_len = 0; buf_len < max_buf_len; buf_len++) {
+ if ((unsigned char)buf[buf_len] < TEST_OPCODE_COUNT) {
+ break;
+ }
+ }
+ return buf_len;
+}
+
static int run_trusty_unitest(const char* utapp) {
int fd;
- int rc;
- char rx_buf[1024];
+ char read_buf[1024];
+ int read_len;
+ char* rx_buf;
+ int rx_buf_len;
+ int cmd = -1;
/* connect to unitest app */
fd = tipc_connect(dev_name, utapp);
@@ -110,22 +124,39 @@
}
/* wait for test to complete */
+ rx_buf_len = 0;
for (;;) {
- rc = read(fd, rx_buf, sizeof(rx_buf));
- if (rc <= 0 || rc >= (int)sizeof(rx_buf)) {
- fprintf(stderr, "%s: Read failed: %d\n", __func__, rc);
- tipc_close(fd);
- return -1;
+ if (rx_buf_len == 0) {
+ read_len = read(fd, read_buf, sizeof(read_buf));
+ if (read_len <= 0 || read_len > (int)sizeof(read_buf)) {
+ fprintf(stderr, "%s: Read failed: %d, %s\n", __func__, read_len,
+ read_len < 0 ? strerror(errno) : "");
+ tipc_close(fd);
+ return -1;
+ }
+ rx_buf = read_buf;
+ rx_buf_len = read_len;
}
- if (rx_buf[0] == TEST_PASSED) {
+ int msg_len = get_msg_len(rx_buf, rx_buf_len);
+ if (msg_len == 0) {
+ cmd = rx_buf[0];
+ rx_buf++;
+ rx_buf_len--;
+ }
+
+ if (cmd == TEST_PASSED) {
break;
- } else if (rx_buf[0] == TEST_FAILED) {
+ } else if (cmd == TEST_FAILED) {
break;
- } else if (rx_buf[0] == TEST_MESSAGE || rx_buf[0] == TEST_TEXT) {
- write(STDOUT_FILENO, rx_buf + 1, rc - 1);
+ } else if (cmd == TEST_MESSAGE || cmd == TEST_TEXT) {
+ if (msg_len) {
+ write(STDOUT_FILENO, rx_buf, msg_len);
+ rx_buf += msg_len;
+ rx_buf_len -= msg_len;
+ }
} else {
- fprintf(stderr, "%s: Bad message header: %d\n", __func__, rx_buf[0]);
+ fprintf(stderr, "%s: Bad message header: %d\n", __func__, cmd);
break;
}
}
@@ -133,7 +164,7 @@
/* close connection to unitest app */
tipc_close(fd);
- return rx_buf[0] == TEST_PASSED ? 0 : -1;
+ return cmd == TEST_PASSED ? 0 : -1;
}
int main(int argc, char** argv) {