[kernel] Move log buffer to its own memory section
In prep for the coming change to keep log entries as a true ring buffer, move the log buffer from bss into its own memory section. Related changes in this commit: - New vm_area_ring, which maps a set of pages twice to allow easy linear reading of data from a ring buffer when it wraps around the end. - logger_init() went away, and the logger ctor is called from mem::initialize() - Instead of an event object, the logger just has a bare wait_queue - util::counted::from template type changed slightly to allow easy conversion from an intptr_t as well as a pointer - Previously added debugcon_logger code removed - this will be added in a separate file in a followup commit
This commit is contained in:
@@ -141,6 +141,11 @@ vm_area_open::get_page(uintptr_t offset, uintptr_t &phys)
|
||||
return page_tree::find_or_add(m_mapped, offset, phys);
|
||||
}
|
||||
|
||||
void
|
||||
vm_area_open::add_existing(uintptr_t offset, uintptr_t phys)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
vm_area_guarded::vm_area_guarded(uintptr_t start, size_t buf_pages, size_t size, vm_flags flags) :
|
||||
m_pages {buf_pages + 1}, // Sections are N+1 pages for the leading guard page
|
||||
@@ -179,4 +184,20 @@ vm_area_guarded::get_page(uintptr_t offset, uintptr_t &phys)
|
||||
return vm_area_open::get_page(offset, phys);
|
||||
}
|
||||
|
||||
vm_area_ring::vm_area_ring(size_t size, vm_flags flags) :
|
||||
vm_area_open {size * 2, flags},
|
||||
m_bufsize {size}
|
||||
{
|
||||
}
|
||||
|
||||
vm_area_ring::~vm_area_ring() {}
|
||||
|
||||
bool
|
||||
vm_area_ring::get_page(uintptr_t offset, uintptr_t &phys)
|
||||
{
|
||||
if (offset > m_bufsize)
|
||||
offset -= m_bufsize;
|
||||
return vm_area_open::get_page(offset, phys);
|
||||
}
|
||||
|
||||
} // namespace obj
|
||||
|
||||
Reference in New Issue
Block a user