Ver código fonte

!414 page管理去除high,直接使用ARCH_PAGE_LIST_SIZE, 解决上次笔误未改全的问题
Merge pull request !414 from jesven/fix_page

bernard 4 anos atrás
pai
commit
f815a69481

+ 3 - 5
libcpu/aarch64/common/page.c

@@ -196,7 +196,6 @@ static int _pages_ref_get(struct page *p, uint32_t size_bits)
 static int _pages_free(struct page *p, uint32_t size_bits)
 {
     uint32_t level = size_bits;
-    uint32_t high = ARCH_PAGE_LIST_SIZE - size_bits - 1;
     struct page *buddy;
 
     RT_ASSERT(p->ref_cnt > 0);
@@ -208,7 +207,7 @@ static int _pages_free(struct page *p, uint32_t size_bits)
         return 0;
     }
 
-    while (level < high)
+    while (level < ARCH_PAGE_LIST_SIZE)
     {
         buddy = buddy_get(p, level);
         if (buddy && buddy->size_bits == level)
@@ -238,16 +237,15 @@ static struct page *_pages_alloc(uint32_t size_bits)
     else
     {
         uint32_t level;
-        uint32_t high = ARCH_PAGE_LIST_SIZE - size_bits - 1;
 
-        for (level = size_bits + 1; level <= high; level++)
+        for (level = size_bits + 1; level < ARCH_PAGE_LIST_SIZE; level++)
         {
             if (page_list[level])
             {
                 break;
             }
         }
-        if (level == high + 1)
+        if (level == ARCH_PAGE_LIST_SIZE)
         {
             return 0;
         }

+ 3 - 5
libcpu/arm/cortex-a/page.c

@@ -179,7 +179,6 @@ static void _pages_ref_inc(struct page *p, uint32_t size_bits)
 static int _pages_free(struct page *p, uint32_t size_bits)
 {
     uint32_t level = size_bits;
-    uint32_t high = ARCH_PAGE_LIST_SIZE - size_bits - 1;
     struct page *buddy;
 
     RT_ASSERT(p->ref_cnt > 0);
@@ -191,7 +190,7 @@ static int _pages_free(struct page *p, uint32_t size_bits)
         return 0;
     }
 
-    while (level < high)
+    while (level < ARCH_PAGE_LIST_SIZE)
     {
         buddy = buddy_get(p, level);
         if (buddy && buddy->size_bits == level)
@@ -221,16 +220,15 @@ static struct page *_pages_alloc(uint32_t size_bits)
     else
     {
         uint32_t level;
-        uint32_t high = ARCH_PAGE_LIST_SIZE - size_bits - 1;
 
-        for (level = size_bits + 1; level <= high; level++)
+        for (level = size_bits + 1; level < ARCH_PAGE_LIST_SIZE; level++)
         {
             if (page_list[level])
             {
                 break;
             }
         }
-        if (level == high + 1)
+        if (level == ARCH_PAGE_LIST_SIZE)
         {
             return 0;
         }

+ 3 - 5
libcpu/risc-v/t-head/c906/page.c

@@ -196,7 +196,6 @@ static int _pages_ref_get(struct page *p, uint32_t size_bits)
 static int _pages_free(struct page *p, uint32_t size_bits)
 {
     uint32_t level = size_bits;
-    uint32_t high = ARCH_PAGE_LIST_SIZE - size_bits - 1;
     struct page *buddy;
 
     RT_ASSERT(p->ref_cnt > 0);
@@ -208,7 +207,7 @@ static int _pages_free(struct page *p, uint32_t size_bits)
         return 0;
     }
 
-    while (level < high)
+    while (level < ARCH_PAGE_LIST_SIZE)
     {
         buddy = buddy_get(p, level);
         if (buddy && buddy->size_bits == level)
@@ -238,16 +237,15 @@ static struct page *_pages_alloc(uint32_t size_bits)
     else
     {
         uint32_t level;
-        uint32_t high = ARCH_PAGE_LIST_SIZE - size_bits - 1;
 
-        for (level = size_bits + 1; level <= high; level++)
+        for (level = size_bits + 1; level < ARCH_PAGE_LIST_SIZE; level++)
         {
             if (page_list[level])
             {
                 break;
             }
         }
-        if (level == high + 1)
+        if (level == ARCH_PAGE_LIST_SIZE)
         {
             return 0;
         }

+ 3 - 5
libcpu/risc-v/virt64/page.c

@@ -196,7 +196,6 @@ static int _pages_ref_get(struct page *p, uint32_t size_bits)
 static int _pages_free(struct page *p, uint32_t size_bits)
 {
     uint32_t level = size_bits;
-    uint32_t high = ARCH_PAGE_LIST_SIZE - size_bits - 1;
     struct page *buddy;
 
     RT_ASSERT(p->ref_cnt > 0);
@@ -208,7 +207,7 @@ static int _pages_free(struct page *p, uint32_t size_bits)
         return 0;
     }
 
-    while (level < high)
+    while (level < ARCH_PAGE_LIST_SIZE)
     {
         buddy = buddy_get(p, level);
         if (buddy && buddy->size_bits == level)
@@ -238,16 +237,15 @@ static struct page *_pages_alloc(uint32_t size_bits)
     else
     {
         uint32_t level;
-        uint32_t high = ARCH_PAGE_LIST_SIZE - size_bits - 1;
 
-        for (level = size_bits + 1; level <= high; level++)
+        for (level = size_bits + 1; level < ARCH_PAGE_LIST_SIZE; level++)
         {
             if (page_list[level])
             {
                 break;
             }
         }
-        if (level == high + 1)
+        if (level == ARCH_PAGE_LIST_SIZE)
         {
             return 0;
         }

+ 3 - 7
libcpu/x86/i386/page.c

@@ -255,9 +255,8 @@ static struct page *_pages_alloc(rt_size_t size_bits)
     {
         //otherwise get new page from large linked list
         rt_size_t level;
-        rt_size_t high = PAGE_LIST_SIZE;
 
-        for(level = size_bits + 1;level <= high;level++)
+        for(level = size_bits + 1;level < PAGE_LIST_SIZE;level++)
         {
             if(page_list[level])
             {
@@ -265,9 +264,7 @@ static struct page *_pages_alloc(rt_size_t size_bits)
             }
         }
 
-        RT_ASSERT(level <= (high + 2));
-
-        if(level == high + 2)
+        if(level == PAGE_LIST_SIZE)
         {
             return 0;//couldn't find a appropriate page
         }
@@ -292,7 +289,6 @@ static struct page *_pages_alloc(rt_size_t size_bits)
 static int _pages_free(struct page *p,rt_size_t size_bits)
 {
     rt_size_t level = size_bits;
-    rt_size_t high = ARCH_PAGE_LIST_SIZE - size_bits - 1;
     struct page *buddy;
 
     if (p->ref_cnt <= 0)
@@ -311,7 +307,7 @@ static int _pages_free(struct page *p,rt_size_t size_bits)
     dprintf("page_free:paddr = 0x%p,size_bits = 0x%p\n",page_to_addr(p),size_bits);
     PAGE_VALID(p);
 
-    while(level < high)
+    while(level < PAGE_LIST_SIZE)
     {
         buddy = buddy_get(p,level);