Fix: page state
This commit is contained in:
@@ -47,10 +47,11 @@ void _pull(int idx, size_t sz)
|
|||||||
{
|
{
|
||||||
if (LCH->state == PAGE_FREE && RCH->state == PAGE_FREE) {
|
if (LCH->state == PAGE_FREE && RCH->state == PAGE_FREE) {
|
||||||
if (CUR->state != PAGE_FREE) {
|
if (CUR->state != PAGE_FREE) {
|
||||||
LOG("node merged");
|
LOG("free page merged");
|
||||||
DEBUG_MEM((uint64_t)idx);
|
DEBUG_MEM((uint64_t)idx);
|
||||||
}
|
}
|
||||||
CUR->state = PAGE_FREE;
|
CUR->state = PAGE_FREE;
|
||||||
|
CUR->size = sz;
|
||||||
}
|
}
|
||||||
if (LCH->state != PAGE_FREE || RCH->state != PAGE_FREE)
|
if (LCH->state != PAGE_FREE || RCH->state != PAGE_FREE)
|
||||||
CUR->state = PAGE_DIVIDED;
|
CUR->state = PAGE_DIVIDED;
|
||||||
@@ -124,6 +125,9 @@ uint64_t _allocate_page(size_t req, int idx, uint64_t l, uint64_t r)
|
|||||||
CUR->size = 0;
|
CUR->size = 0;
|
||||||
return l;
|
return l;
|
||||||
}
|
}
|
||||||
|
LOG("page divided");
|
||||||
|
LOG(l);
|
||||||
|
DEBUG(r);
|
||||||
LCH->state = RCH->state = PAGE_FREE;
|
LCH->state = RCH->state = PAGE_FREE;
|
||||||
LCH->size = m - l;
|
LCH->size = m - l;
|
||||||
RCH->size = r - m;
|
RCH->size = r - m;
|
||||||
@@ -239,6 +243,8 @@ void _reserve_page(uint64_t ql, uint64_t qr, int idx, uint64_t l, uint64_t r)
|
|||||||
|
|
||||||
uint64_t m = l + ((msb64(sz) == sz) ? (sz >> 1) : msb64(sz));
|
uint64_t m = l + ((msb64(sz) == sz) ? (sz >> 1) : msb64(sz));
|
||||||
if (CUR->state == PAGE_FREE) {
|
if (CUR->state == PAGE_FREE) {
|
||||||
|
LOG("page divided"); LOG(l); DEBUG_MEM(r);
|
||||||
|
CUR->state = PAGE_DIVIDED;
|
||||||
LCH->state = RCH->state = PAGE_FREE;
|
LCH->state = RCH->state = PAGE_FREE;
|
||||||
LCH->size = m - l;
|
LCH->size = m - l;
|
||||||
RCH->size = r - m;
|
RCH->size = r - m;
|
||||||
|
|||||||
@@ -95,11 +95,9 @@ void timer_irq_handler(void)
|
|||||||
{
|
{
|
||||||
_enable_timer_irq(false);
|
_enable_timer_irq(false);
|
||||||
|
|
||||||
LOG("timer irq");
|
|
||||||
|
|
||||||
uint64_t cntpct_el0;
|
uint64_t cntpct_el0;
|
||||||
R_SYSREG(cntpct_el0, cntpct_el0);
|
R_SYSREG(cntpct_el0, cntpct_el0);
|
||||||
DEBUG_EXCEP(cntpct_el0);
|
LOG("timer irq"); DEBUG_EXCEP(cntpct_el0);
|
||||||
|
|
||||||
if (global_timer) {
|
if (global_timer) {
|
||||||
add_interrupt_task(20, global_timer->data.func, global_timer->data.param);
|
add_interrupt_task(20, global_timer->data.func, global_timer->data.param);
|
||||||
|
|||||||
Reference in New Issue
Block a user