blob: 334be9e7427e07f942cf53adab2ddd76a4b811fb [file] [log] [blame]
// Copyright 2026 The Fuchsia Authors
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT
#include "lib/page-map/entry.h"
#include <lib/page-map.h>
#include <vm/vm_address_region.h>
#include <vm/vm_object_paged.h>
namespace page_map::internal {
Entry::Entry(PageMap& page_map, fbl::RefPtr<VmObjectPaged> vmo, fbl::RefPtr<VmMapping> mapping)
: page_map_(page_map), vmo_{ktl::move(vmo)}, mapping_{ktl::move(mapping)} {}
Entry::~Entry() {
DEBUG_ASSERT_MSG(accessor_count_ == 0, "%lu", accessor_count_);
const uint64_t page_offset_in_vmo = mapping_->object_offset();
zx_status_t status = mapping_->Destroy();
DEBUG_ASSERT_MSG(status == ZX_OK, "%d", status);
const size_t kMappingSize = kPageSize;
vmo_->Unpin(page_offset_in_vmo, kMappingSize);
}
void Entry::Release() { page_map_.Release(*this); }
} // namespace page_map::internal