fix: scheduler L0 table confusion, PMM bitmap rounding, dead task handling
This commit is contained in:
@@ -25,7 +25,7 @@ void DTBParse(Pointer dtb, VMBootMemoryMap* bootMap) {
|
||||
ASCII* currentNode = "";
|
||||
UInt32 currentDepth = 0;
|
||||
UInt32 reservedMemoryDepth = 0;
|
||||
bool inReservedMemory = false;
|
||||
Boolean inReservedMemory = false;
|
||||
|
||||
while (true) {
|
||||
UInt32 token = BytesSwap32(*(UInt32*)structs);
|
||||
|
||||
@@ -15,7 +15,7 @@ static OSProcess sOSSchedulerKernelProcess;
|
||||
void SchedulerInitialize() {
|
||||
sOSSchedulerKernelProcess.id = 0;
|
||||
sOSSchedulerKernelProcess.state = OSTaskStateRunning;
|
||||
sOSSchedulerKernelProcess.l0Table = gVMKernelL0Table;
|
||||
sOSSchedulerKernelProcess.l0Table = (Address*)VMPhysToHHDM((Address)gVMKernelL0Table);
|
||||
StringCopy(sOSSchedulerKernelProcess.name, "kernel");
|
||||
|
||||
OSTask* kernelTask = (OSTask*)HeapAllocate(sizeof(OSTask));
|
||||
@@ -90,6 +90,11 @@ Address SchedulerNext(Address stackPointer) {
|
||||
|
||||
OSTask* nextTask = gOSSchedulerCurrentTask->next;
|
||||
loop {
|
||||
if (nextTask->state == OSTaskStateDead) {
|
||||
nextTask = nextTask->next;
|
||||
if (nextTask == gOSSchedulerCurrentTask) OSPanic("No running tasks");
|
||||
continue;
|
||||
}
|
||||
if (nextTask->state == OSTaskStateSleeping && nextTask->sleepTicks == 0) nextTask->state = OSTaskStateRunning;
|
||||
if (nextTask->state == OSTaskStateRunning) break;
|
||||
nextTask = nextTask->next;
|
||||
|
||||
@@ -28,7 +28,7 @@ static inline void BitmapUnset(MemoryPointer bitmap, Address address) {
|
||||
void PMMInitialize(VMBootMemoryMap* bootMap) {
|
||||
sPMMRamBase = bootMap->totalRAM.base;
|
||||
sPMMTotalPages = bootMap->totalRAM.size / kVMPageSize;
|
||||
sPMMBitmapSize = sPMMTotalPages / kVMBlocksPerByte;
|
||||
sPMMBitmapSize = (sPMMTotalPages + kVMBlocksPerByte - 1) / kVMBlocksPerByte;
|
||||
sPMMBitmap = (MemoryPointer)_kernelEnd;
|
||||
MemorySet(sPMMBitmap, 0, sPMMBitmapSize);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user