Kernel: Widen PhysicalPage refcount to 32 bits

A 16-bit refcount is just begging for trouble right nowl.
A 32-bit refcount will be begging for trouble later down the line,
so we'll have to revisit this eventually. :^)
This commit is contained in:
Andreas Kling 2020-02-15 22:33:53 +01:00
parent 51628f64fa
commit 5507945306
Notes: sideshowbarker 2024-07-19 09:17:44 +09:00
2 changed files with 7 additions and 7 deletions

View File

@ -46,7 +46,7 @@ void PhysicalPage::return_to_freelist() &&
InterruptDisabler disabler;
m_retain_count = 1;
m_ref_count = 1;
if (m_supervisor)
MM.deallocate_supervisor_physical_page(move(*this));

View File

@ -42,14 +42,14 @@ public:
void ref()
{
ASSERT(m_retain_count);
++m_retain_count;
ASSERT(m_ref_count);
++m_ref_count;
}
void unref()
{
ASSERT(m_retain_count);
if (!--m_retain_count) {
ASSERT(m_ref_count);
if (!--m_ref_count) {
if (m_may_return_to_freelist)
move(*this).return_to_freelist();
delete this;
@ -58,7 +58,7 @@ public:
static NonnullRefPtr<PhysicalPage> create(PhysicalAddress, bool supervisor, bool may_return_to_freelist = true);
u16 ref_count() const { return m_retain_count; }
u32 ref_count() const { return m_ref_count; }
bool is_shared_zero_page() const;
@ -68,7 +68,7 @@ private:
void return_to_freelist() &&;
u16 m_retain_count { 1 };
u32 m_ref_count { 1 };
bool m_may_return_to_freelist { true };
bool m_supervisor { false };
PhysicalAddress m_paddr;