[Mammoth] Add a helper method for duplicating memory capabilities.

This commit is contained in:
Drew Galbraith 2023-11-19 20:35:55 -08:00
parent 8e827a5dfb
commit deb2e708cd
3 changed files with 9 additions and 4 deletions

View File

@ -53,7 +53,8 @@ class OwnedMemoryRegion {
uint64_t vaddr() { return vaddr_; }
uint64_t size() { return size_; }
uint64_t cap() { return vmmo_cap_; }
z_cap_t cap() { return vmmo_cap_; }
z_cap_t DuplicateCap();
bool empty() { return vmmo_cap_ != 0; }
explicit operator bool() { return vmmo_cap_ != 0; }

View File

@ -72,3 +72,9 @@ OwnedMemoryRegion OwnedMemoryRegion::FromCapability(z_cap_t vmmo_cap) {
// FIXME: get the size here.
return OwnedMemoryRegion(vmmo_cap, vaddr, size);
}
z_cap_t OwnedMemoryRegion::DuplicateCap() {
z_cap_t cap;
check(ZCapDuplicate(vmmo_cap_, kZionPerm_All, &cap));
return cap;
}

View File

@ -56,9 +56,7 @@ glcr::ErrorCode VFSServer::HandleOpenFile(const OpenFileRequest& request,
// FIXME: There isn't really a reason we need to map the file into memory then
// duplicate the cap. In the future just get the cap from the read then pass
// it to the caller directly.
uint64_t mem_cap;
uint64_t cap = ZCapDuplicate(region.cap(), kZionPerm_All, &mem_cap);
response.set_memory(mem_cap);
response.set_memory(region.DuplicateCap());
// TODO: Consider folding this up into the actual read call.
ASSIGN_OR_RETURN(Inode * inode, driver_.GetInode(inode_num));
// FIXME: This technically only sets the lower 32 bits.