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

Commit bf601b04 authored by Treehugger Robot's avatar Treehugger Robot Committed by Maciej Zenczykowski
Browse files

use mapRetrieveWO() and retrieveProgram() instead of bpfFdGet()



straightforward replacement to use new funcs from BpfUtils.h

Test: atest libtimeinstate_test - proves it builds, and everything fails like before
  'git grep bpf_obj_get_wronly' comes up empty
Bug: 150040815
Signed-off-by: default avatarMaciej Żenczykowski <maze@google.com>
Original-Change: https://android-review.googlesource.com/1340915
Merged-In: Id2459eca2a66c257e36ffcfb628150da44f90c81
Change-Id: Id2459eca2a66c257e36ffcfb628150da44f90c81
parent 72b3fa46
Loading
Loading
Loading
Loading
+7 −17
Original line number Original line Diff line number Diff line
@@ -88,16 +88,6 @@ static int comparePolicyFiles(const struct dirent **d1, const struct dirent **d2
    return policyN1 - policyN2;
    return policyN1 - policyN2;
}
}


static int bpf_obj_get_wronly(const char *pathname) {
    union bpf_attr attr;

    memset(&attr, 0, sizeof(attr));
    attr.pathname = ptr_to_u64((void *)pathname);
    attr.file_flags = BPF_F_WRONLY;

    return syscall(__NR_bpf, BPF_OBJ_GET, &attr, sizeof(attr));
}

static bool initGlobals() {
static bool initGlobals() {
    std::lock_guard<std::mutex> guard(gInitializedMutex);
    std::lock_guard<std::mutex> guard(gInitializedMutex);
    if (gInitialized) return true;
    if (gInitialized) return true;
@@ -156,7 +146,7 @@ static bool initGlobals() {
static bool attachTracepointProgram(const std::string &eventType, const std::string &eventName) {
static bool attachTracepointProgram(const std::string &eventType, const std::string &eventName) {
    std::string path = StringPrintf(BPF_FS_PATH "prog_time_in_state_tracepoint_%s_%s",
    std::string path = StringPrintf(BPF_FS_PATH "prog_time_in_state_tracepoint_%s_%s",
                                    eventType.c_str(), eventName.c_str());
                                    eventType.c_str(), eventName.c_str());
    int prog_fd = bpfFdGet(path.c_str(), BPF_F_RDONLY);
    int prog_fd = retrieveProgram(path.c_str());
    if (prog_fd < 0) return false;
    if (prog_fd < 0) return false;
    return bpf_attach_tracepoint(prog_fd, eventType.c_str(), eventName.c_str()) >= 0;
    return bpf_attach_tracepoint(prog_fd, eventType.c_str(), eventName.c_str()) >= 0;
}
}
@@ -183,7 +173,7 @@ bool startTrackingUidTimes() {
    if (!initGlobals()) return false;
    if (!initGlobals()) return false;
    if (gTracking) return true;
    if (gTracking) return true;


    unique_fd cpuPolicyFd(bpf_obj_get_wronly(BPF_FS_PATH "map_time_in_state_cpu_policy_map"));
    unique_fd cpuPolicyFd(mapRetrieveWO(BPF_FS_PATH "map_time_in_state_cpu_policy_map"));
    if (cpuPolicyFd < 0) return false;
    if (cpuPolicyFd < 0) return false;


    for (uint32_t i = 0; i < gPolicyCpus.size(); ++i) {
    for (uint32_t i = 0; i < gPolicyCpus.size(); ++i) {
@@ -192,7 +182,7 @@ bool startTrackingUidTimes() {
        }
        }
    }
    }


    unique_fd freqToIdxFd(bpf_obj_get_wronly(BPF_FS_PATH "map_time_in_state_freq_to_idx_map"));
    unique_fd freqToIdxFd(mapRetrieveWO(BPF_FS_PATH "map_time_in_state_freq_to_idx_map"));
    if (freqToIdxFd < 0) return false;
    if (freqToIdxFd < 0) return false;
    freq_idx_key_t key;
    freq_idx_key_t key;
    for (uint32_t i = 0; i < gNPolicies; ++i) {
    for (uint32_t i = 0; i < gNPolicies; ++i) {
@@ -207,23 +197,23 @@ bool startTrackingUidTimes() {
        }
        }
    }
    }


    unique_fd cpuLastUpdateFd(bpf_obj_get_wronly(BPF_FS_PATH "map_time_in_state_cpu_last_update_map"));
    unique_fd cpuLastUpdateFd(mapRetrieveWO(BPF_FS_PATH "map_time_in_state_cpu_last_update_map"));
    if (cpuLastUpdateFd < 0) return false;
    if (cpuLastUpdateFd < 0) return false;
    std::vector<uint64_t> zeros(get_nprocs_conf(), 0);
    std::vector<uint64_t> zeros(get_nprocs_conf(), 0);
    uint32_t zero = 0;
    uint32_t zero = 0;
    if (writeToMapEntry(cpuLastUpdateFd, &zero, zeros.data(), BPF_ANY)) return false;
    if (writeToMapEntry(cpuLastUpdateFd, &zero, zeros.data(), BPF_ANY)) return false;


    unique_fd nrActiveFd(bpf_obj_get_wronly(BPF_FS_PATH "map_time_in_state_nr_active_map"));
    unique_fd nrActiveFd(mapRetrieveWO(BPF_FS_PATH "map_time_in_state_nr_active_map"));
    if (nrActiveFd < 0) return false;
    if (nrActiveFd < 0) return false;
    if (writeToMapEntry(nrActiveFd, &zero, &zero, BPF_ANY)) return false;
    if (writeToMapEntry(nrActiveFd, &zero, &zero, BPF_ANY)) return false;


    unique_fd policyNrActiveFd(bpf_obj_get_wronly(BPF_FS_PATH "map_time_in_state_policy_nr_active_map"));
    unique_fd policyNrActiveFd(mapRetrieveWO(BPF_FS_PATH "map_time_in_state_policy_nr_active_map"));
    if (policyNrActiveFd < 0) return false;
    if (policyNrActiveFd < 0) return false;
    for (uint32_t i = 0; i < gNPolicies; ++i) {
    for (uint32_t i = 0; i < gNPolicies; ++i) {
        if (writeToMapEntry(policyNrActiveFd, &i, &zero, BPF_ANY)) return false;
        if (writeToMapEntry(policyNrActiveFd, &i, &zero, BPF_ANY)) return false;
    }
    }


    unique_fd policyFreqIdxFd(bpf_obj_get_wronly(BPF_FS_PATH "map_time_in_state_policy_freq_idx_map"));
    unique_fd policyFreqIdxFd(mapRetrieveWO(BPF_FS_PATH "map_time_in_state_policy_freq_idx_map"));
    if (policyFreqIdxFd < 0) return false;
    if (policyFreqIdxFd < 0) return false;
    for (uint32_t i = 0; i < gNPolicies; ++i) {
    for (uint32_t i = 0; i < gNPolicies; ++i) {
        auto freqIdx = getPolicyFreqIdx(i);
        auto freqIdx = getPolicyFreqIdx(i);