Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 20e253b4 authored by Nikita Ioffe's avatar Nikita Ioffe Committed by Automerger Merge Worker
Browse files

Merge "init: skip cgroup/task_profiles configuration if cgroups are disabled"...

Merge "init: skip cgroup/task_profiles configuration if cgroups are disabled" am: 537ab238 am: 9bd7375a am: e28c9185

Original change: https://android-review.googlesource.com/c/platform/system/core/+/2263261



Change-Id: I0f74ba4e9b9ce878a8a7cb79d0c0c99170c8dc8b
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 65284100 e28c9185
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -662,6 +662,10 @@ static Result<void> wait_for_coldboot_done_action(const BuiltinArguments& args)
}

static Result<void> SetupCgroupsAction(const BuiltinArguments&) {
    if (!CgroupsAvailable()) {
        LOG(INFO) << "Cgroups support in kernel is not enabled";
        return {};
    }
    // Have to create <CGROUPS_RC_DIR> using make_dir function
    // for appropriate sepolicy to be set for it
    make_dir(android::base::Dirname(CGROUPS_RC_PATH), 0711);
+19 −15
Original line number Diff line number Diff line
@@ -692,6 +692,7 @@ Result<void> Service::Start() {
    start_order_ = next_start_order_++;
    process_cgroup_empty_ = false;

    if (CgroupsAvailable()) {
        bool use_memcg = swappiness_ != -1 || soft_limit_in_bytes_ != -1 || limit_in_bytes_ != -1 ||
                         limit_percent_ != -1 || !limit_property_.empty();
        errno = -createProcessGroup(proc_attr_.uid, pid_, use_memcg);
@@ -711,6 +712,9 @@ Result<void> Service::Start() {
        if (use_memcg) {
            ConfigureMemcg();
        }
    } else {
        process_cgroup_empty_ = true;
    }

    if (oom_score_adjust_ != DEFAULT_OOM_SCORE_ADJUST) {
        LmkdRegister(name_, proc_attr_.uid, pid_, oom_score_adjust_);
+9 −0
Original line number Diff line number Diff line
@@ -280,6 +280,15 @@ Result<void> SetProcessAttributes(const ProcessAttributes& attr) {
}

Result<void> WritePidToFiles(std::vector<std::string>* files) {
    if (files->empty()) {
        // No files to write pid to, exit early.
        return {};
    }

    if (!CgroupsAvailable()) {
        return Error() << "cgroups are not available";
    }

    // See if there were "writepid" instructions to write to files under cpuset path.
    std::string cpuset_path;
    if (CgroupGetControllerPath("cpuset", &cpuset_path)) {
+1 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ __BEGIN_DECLS

static constexpr const char* CGROUPV2_CONTROLLER_NAME = "cgroup2";

bool CgroupsAvailable();
bool CgroupGetControllerPath(const std::string& cgroup_name, std::string* path);
bool CgroupGetControllerFromPath(const std::string& path, std::string* cgroup_name);
bool CgroupGetAttributePath(const std::string& attr_name, std::string* path);
+5 −0
Original line number Diff line number Diff line
@@ -55,6 +55,11 @@ using namespace std::chrono_literals;

#define PROCESSGROUP_CGROUP_PROCS_FILE "/cgroup.procs"

bool CgroupsAvailable() {
    static bool cgroups_available = access("/proc/cgroups", F_OK) == 0;
    return cgroups_available;
}

bool CgroupGetControllerPath(const std::string& cgroup_name, std::string* path) {
    auto controller = CgroupMap::GetInstance().FindController(cgroup_name);