ContiguousVMObject.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /*
  2. * Copyright (c) 2020, Liav A. <liavalb@hotmail.co.il>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <Kernel/VM/ContiguousVMObject.h>
  7. #include <Kernel/VM/MemoryManager.h>
  8. #include <Kernel/VM/PhysicalPage.h>
  9. namespace Kernel {
  10. RefPtr<ContiguousVMObject> ContiguousVMObject::try_create_with_size(size_t size)
  11. {
  12. auto contiguous_physical_pages = MM.allocate_contiguous_supervisor_physical_pages(size);
  13. if (contiguous_physical_pages.is_empty())
  14. return {};
  15. return adopt_ref_if_nonnull(new (nothrow) ContiguousVMObject(size, contiguous_physical_pages));
  16. }
  17. ContiguousVMObject::ContiguousVMObject(size_t size, NonnullRefPtrVector<PhysicalPage>& contiguous_physical_pages)
  18. : VMObject(size)
  19. {
  20. for (size_t i = 0; i < page_count(); i++) {
  21. physical_pages()[i] = contiguous_physical_pages[i];
  22. dbgln_if(CONTIGUOUS_VMOBJECT_DEBUG, "Contiguous page[{}]: {}", i, physical_pages()[i]->paddr());
  23. }
  24. }
  25. ContiguousVMObject::ContiguousVMObject(ContiguousVMObject const& other)
  26. : VMObject(other)
  27. {
  28. }
  29. ContiguousVMObject::~ContiguousVMObject()
  30. {
  31. }
  32. RefPtr<VMObject> ContiguousVMObject::try_clone()
  33. {
  34. VERIFY_NOT_REACHED();
  35. }
  36. }