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 = "";
|
ASCII* currentNode = "";
|
||||||
UInt32 currentDepth = 0;
|
UInt32 currentDepth = 0;
|
||||||
UInt32 reservedMemoryDepth = 0;
|
UInt32 reservedMemoryDepth = 0;
|
||||||
bool inReservedMemory = false;
|
Boolean inReservedMemory = false;
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
UInt32 token = BytesSwap32(*(UInt32*)structs);
|
UInt32 token = BytesSwap32(*(UInt32*)structs);
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ static OSProcess sOSSchedulerKernelProcess;
|
|||||||
void SchedulerInitialize() {
|
void SchedulerInitialize() {
|
||||||
sOSSchedulerKernelProcess.id = 0;
|
sOSSchedulerKernelProcess.id = 0;
|
||||||
sOSSchedulerKernelProcess.state = OSTaskStateRunning;
|
sOSSchedulerKernelProcess.state = OSTaskStateRunning;
|
||||||
sOSSchedulerKernelProcess.l0Table = gVMKernelL0Table;
|
sOSSchedulerKernelProcess.l0Table = (Address*)VMPhysToHHDM((Address)gVMKernelL0Table);
|
||||||
StringCopy(sOSSchedulerKernelProcess.name, "kernel");
|
StringCopy(sOSSchedulerKernelProcess.name, "kernel");
|
||||||
|
|
||||||
OSTask* kernelTask = (OSTask*)HeapAllocate(sizeof(OSTask));
|
OSTask* kernelTask = (OSTask*)HeapAllocate(sizeof(OSTask));
|
||||||
@@ -90,6 +90,11 @@ Address SchedulerNext(Address stackPointer) {
|
|||||||
|
|
||||||
OSTask* nextTask = gOSSchedulerCurrentTask->next;
|
OSTask* nextTask = gOSSchedulerCurrentTask->next;
|
||||||
loop {
|
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 == OSTaskStateSleeping && nextTask->sleepTicks == 0) nextTask->state = OSTaskStateRunning;
|
||||||
if (nextTask->state == OSTaskStateRunning) break;
|
if (nextTask->state == OSTaskStateRunning) break;
|
||||||
nextTask = nextTask->next;
|
nextTask = nextTask->next;
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ static inline void BitmapUnset(MemoryPointer bitmap, Address address) {
|
|||||||
void PMMInitialize(VMBootMemoryMap* bootMap) {
|
void PMMInitialize(VMBootMemoryMap* bootMap) {
|
||||||
sPMMRamBase = bootMap->totalRAM.base;
|
sPMMRamBase = bootMap->totalRAM.base;
|
||||||
sPMMTotalPages = bootMap->totalRAM.size / kVMPageSize;
|
sPMMTotalPages = bootMap->totalRAM.size / kVMPageSize;
|
||||||
sPMMBitmapSize = sPMMTotalPages / kVMBlocksPerByte;
|
sPMMBitmapSize = (sPMMTotalPages + kVMBlocksPerByte - 1) / kVMBlocksPerByte;
|
||||||
sPMMBitmap = (MemoryPointer)_kernelEnd;
|
sPMMBitmap = (MemoryPointer)_kernelEnd;
|
||||||
MemorySet(sPMMBitmap, 0, sPMMBitmapSize);
|
MemorySet(sPMMBitmap, 0, sPMMBitmapSize);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user