Skip to content

Commit

Permalink
Merge "meminfo: Fix dmabufinfo total ref accounting"
Browse files Browse the repository at this point in the history
Former-commit-id: 32afafa67ee81e35b44f31346997329f7399d6f9
  • Loading branch information
ErickReyesR authored and Gerrit Code Review committed Feb 8, 2019
2 parents 44b175f + 8f68598 commit 66f4215
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 8 deletions.
2 changes: 1 addition & 1 deletion libmeminfo/libdmabufinfo/dmabufinfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ static bool ReadDmaBufFdRefs(pid_t pid, std::vector<DmaBuffer>* dmabufs) {
if (buf->count() == 0)
buf->SetCount(count);
buf->AddFdRef(pid);
return true;
continue;
}

DmaBuffer& db =
Expand Down
18 changes: 11 additions & 7 deletions libmeminfo/libdmabufinfo/include/dmabufinfo/dmabufinfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,25 +30,29 @@ struct DmaBuffer {
public:
DmaBuffer(ino_t inode, uint64_t size, uint64_t count, const std::string& exporter,
const std::string& name)
: inode_(inode), size_(size), count_(count), exporter_(exporter), name_(name) {}
: inode_(inode), size_(size), count_(count), exporter_(exporter), name_(name) {
total_refs_ = 0;
}
~DmaBuffer() = default;

// Adds one file descriptor reference for the given pid
void AddFdRef(pid_t pid) {
AddRefToPidMap(pid, &fdrefs_);
total_refs_++;
}

// Adds one map reference for the given pid
void AddMapRef(pid_t pid) {
AddRefToPidMap(pid, &maprefs_);
total_refs_++;
}

// Getters for each property
uint64_t size() const { return size_; }
const std::unordered_map<pid_t, int>& fdrefs() const { return fdrefs_; }
const std::unordered_map<pid_t, int>& maprefs() const { return maprefs_; }
ino_t inode() const { return inode_; }
uint64_t total_refs() const { return fdrefs_.size() + maprefs_.size(); }
uint64_t total_refs() const { return total_refs_; }
uint64_t count() const { return count_; };
const std::string& name() const { return name_; }
const std::string& exporter() const { return exporter_; }
Expand All @@ -65,6 +69,7 @@ struct DmaBuffer {
ino_t inode_;
uint64_t size_;
uint64_t count_;
uint64_t total_refs_;
std::string exporter_;
std::string name_;
std::unordered_map<pid_t, int> fdrefs_;
Expand All @@ -81,21 +86,20 @@ struct DmaBuffer {
// Read and return current dma buf objects from
// DEBUGFS/dma_buf/bufinfo. The references to each dma buffer are not
// populated here and will return an empty vector.
//
// Returns false if something went wrong with the function, true otherwise.
bool ReadDmaBufInfo(std::vector<DmaBuffer>* dmabufs,
const std::string& path = "/sys/kernel/debug/dma_buf/bufinfo");


// Read and return dmabuf objects for a given process without the help
// of DEBUGFS
//
// Returns false if something went wrong with the function, true otherwise.
bool ReadDmaBufInfo(pid_t pid, std::vector<DmaBuffer>* dmabufs);

// Append dmabuf objects for a given process without the help
// of DEBUGFS to an existing vector
//
// Append new dmabuf objects from a given process to an existing vector.
// When the vector contains an existing element with a matching inode,
// the reference counts will be updated.
// Does not depend on DEBUGFS.
// Returns false if something went wrong with the function, true otherwise.
bool AppendDmaBufInfo(pid_t pid, std::vector<DmaBuffer>* dmabufs);

Expand Down

0 comments on commit 66f4215

Please sign in to comment.