erythros/System/Setup/Environment.HC

47 lines
1.4 KiB
HolyC

#define NET_TASK_CPU 3
// Before continuing, we:
// 1. Mark memory in code heap below 0x1000000 as used.
sys_code_bp->mem_free_lst->next->pags = 0;
// 2. Free up 64MB at bottom of code heap for non-HolyC programs
sys_code_bp->mem_free_lst = ShrinkMemBlkByPags(sys_code_bp->mem_free_lst, 131072);
// 3. Set mem_task
CTask* erythros_mem_task = sys_malloc_task;
U0 NoBeep(I8, Bool) {};
@patch_jmp_rel32(&Beep, &NoBeep); // Don't delay on beep when entering debugger
//@patch_jmp_rel32(&Fault2, &Reboot); // Reboot instead of crashing to the debugger
Bool BlkDevLock2(CBlkDev* bd)
{
BlkDevChk(bd);
while (bd->lock_fwding)
bd = bd->lock_fwding;
if (!Bt(&bd->locked_flags, BDlf_LOCKED) || bd->owning_task != Fs) {
while (LBts(&bd->locked_flags, BDlf_LOCKED))
Sleep(Rand * 10);
bd->owning_task = Fs;
return TRUE;
} else
return FALSE;
}
Bool DrvLock2(CDrv* dv)
{
DrvChk(dv);
BlkDevLock2(dv->bd);
if (!Bt(&dv->locked_flags, DVlf_LOCKED) || dv->owning_task != Fs) {
while (LBts(&dv->locked_flags, DVlf_LOCKED))
Sleep(Rand * 10);
dv->owning_task = Fs;
return TRUE;
} else
return FALSE;
}
@patch_jmp_rel32(&BlkDevLock, &BlkDevLock2); // Patch BlkDevLock so we don't deadlock on multiple tasks reading from virtio disk
@patch_jmp_rel32(&DrvLock, &DrvLock2); // Patch DrvLock so we don't deadlock on multiple tasks reading from virtio disk