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

Commit 07500817 authored by T.J. Mercier's avatar T.J. Mercier
Browse files

libprocessgroup: Remove prctl interface for setting timer slack

Support for the procfs timerslack interface has existed since linux 4.6.
All currently supported Android kernels are newer than 4.6, so remove
the userspace support for the prctl interface leaving just the use of
/proc/<tid>/timerslack_ns.

Bug: 372498744
Change-Id: Ib34cc6fbb4bab328cde51d60ac4e3b26a0d72851
parent 8dd9d455
Loading
Loading
Loading
Loading
+7 −25
Original line number Diff line number Diff line
@@ -203,33 +203,15 @@ bool SetClampsAction::ExecuteForTask(int) const {
// 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);
    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;
        }
        PLOG(ERROR) << "set_timerslack_ns write failed";
        }
    }

    // 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";
        }
        return false;
    }

    return true;
+0 −2
Original line number Diff line number Diff line
@@ -114,8 +114,6 @@ class SetTimerSlackAction : public ProfileAction {

  private:
    unsigned long slack_;

    static bool IsTimerSlackSupported(pid_t tid);
};

// Set attribute profile element