git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Timer re-worked!
[lunaix-os.git]
/
lunaix-os
/
kernel
/
mm
/
pmm.c
diff --git
a/lunaix-os/kernel/mm/pmm.c
b/lunaix-os/kernel/mm/pmm.c
index c6b0a25b7dd77cf39fa8f7fd8aa113b52c45a0c8..054b247743404044a2c184ad7bfbabcfe15e7e2c 100644
(file)
--- a/
lunaix-os/kernel/mm/pmm.c
+++ b/
lunaix-os/kernel/mm/pmm.c
@@
-13,10
+13,12
@@
uint32_t leading_shifts = \
(page_count + offset) < 8 ? page_count : 8 - offset;
uint32_t leading_shifts = \
(page_count + offset) < 8 ? page_count : 8 - offset;
-uint8_t pm_bitmap[PM_BMP_MAX_SIZE];
+
static
uint8_t pm_bitmap[PM_BMP_MAX_SIZE];
-uintptr_t max_pg;
+
static
uintptr_t max_pg;
+// ... |xxxx xxxx |
+// ... |-->|
void
pmm_mark_page_free(uintptr_t ppn)
{
void
pmm_mark_page_free(uintptr_t ppn)
{
@@
-77,7
+79,7
@@
size_t pg_lookup_ptr;
void
pmm_init(uintptr_t mem_upper_lim)
{
void
pmm_init(uintptr_t mem_upper_lim)
{
- max_pg = (PG_ALIGN(mem_upper_lim) >> 12)
+ 1
;
+ max_pg = (PG_ALIGN(mem_upper_lim) >> 12);
pg_lookup_ptr = LOOKUP_START;
pg_lookup_ptr = LOOKUP_START;
@@
-91,7
+93,7
@@
void*
pmm_alloc_page()
{
// Next fit approach. Maximize the throughput!
pmm_alloc_page()
{
// Next fit approach. Maximize the throughput!
- uintptr_t good_page_found = NULL;
+ uintptr_t good_page_found =
(uintptr_t)
NULL;
size_t old_pg_ptr = pg_lookup_ptr;
size_t upper_lim = max_pg;
uint8_t chunk = 0;
size_t old_pg_ptr = pg_lookup_ptr;
size_t upper_lim = max_pg;
uint8_t chunk = 0;