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
feat: closedir(2)
[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 9c0d3eb44272bda83e4fbe931408261a6801ba75..3ebe22a10d34fdcec5446283534a1e10e4ca0051 100644
(file)
--- a/
lunaix-os/kernel/mm/pmm.c
+++ b/
lunaix-os/kernel/mm/pmm.c
@@
-30,7
+30,7
@@
pmm_mark_chunk_free(uintptr_t start_ppn, size_t page_count)
void
pmm_mark_chunk_occupied(pid_t owner,
void
pmm_mark_chunk_occupied(pid_t owner,
- u
int
32_t start_ppn,
+ u32_t start_ppn,
size_t page_count,
pp_attr_t attr)
{
size_t page_count,
pp_attr_t attr)
{
@@
-43,7
+43,7
@@
pmm_mark_chunk_occupied(pid_t owner,
// 我们跳过位于0x0的页。我们不希望空指针是指向一个有效的内存空间。
#define LOOKUP_START 1
// 我们跳过位于0x0的页。我们不希望空指针是指向一个有效的内存空间。
#define LOOKUP_START 1
-size_t pg_lookup_ptr;
+
volatile
size_t pg_lookup_ptr;
void
pmm_init(uintptr_t mem_upper_lim)
void
pmm_init(uintptr_t mem_upper_lim)
@@
-66,10
+66,10
@@
pmm_alloc_cpage(pid_t owner, size_t num_pages, pp_attr_t attr)
size_t p2 = 0;
while (p2 < max_pg && p2 - p1 < num_pages) {
size_t p2 = 0;
while (p2 < max_pg && p2 - p1 < num_pages) {
- (!(&pm_table[p2])->ref_counts) ? (p2++) : (p1 = p2);
+ (!(&pm_table[p2])->ref_counts) ? (p2++) : (p1 =
++
p2);
}
}
- if (p2
< max_pg
) {
+ if (p2
== max_pg && p2 - p1 < num_pages
) {
return NULL;
}
return NULL;
}
@@
-140,7
+140,7
@@
pmm_ref_page(pid_t owner, void* page)
{
(void*)owner; // TODO: do smth with owner
{
(void*)owner; // TODO: do smth with owner
- u
int
32_t ppn = (uintptr_t)page >> 12;
+ u32_t ppn = (uintptr_t)page >> 12;
if (ppn >= PM_BMP_MAX_SIZE) {
return 0;
if (ppn >= PM_BMP_MAX_SIZE) {
return 0;
@@
-158,7
+158,7
@@
pmm_ref_page(pid_t owner, void* page)
struct pp_struct*
pmm_query(void* pa)
{
struct pp_struct*
pmm_query(void* pa)
{
- u
int
32_t ppn = (uintptr_t)pa >> 12;
+ u32_t ppn = (uintptr_t)pa >> 12;
if (ppn >= PM_BMP_MAX_SIZE) {
return NULL;
if (ppn >= PM_BMP_MAX_SIZE) {
return NULL;