From d30caf231af6270c827e3bb1688af9acf5ab103e Mon Sep 17 00:00:00 2001 From: CleverMouse Date: Mon, 4 Mar 2013 13:58:55 +0000 Subject: [PATCH] ability to create kernel threads git-svn-id: svn://kolibrios.org@3325 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/trunk/core/taskman.inc | 8 ++++++++ kernel/trunk/kernel.asm | 28 +++++++++++++++++++++++----- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/kernel/trunk/core/taskman.inc b/kernel/trunk/core/taskman.inc index b4dce8219c..bda77e4e52 100644 --- a/kernel/trunk/core/taskman.inc +++ b/kernel/trunk/core/taskman.inc @@ -1148,6 +1148,14 @@ proc set_app_params stdcall,slot:dword, params:dword,\ mov eax, [esi+0x08] ;app_eip mov [ebx+REG_EIP], eax;app_entry mov [ebx+REG_CS], dword app_code + mov eax, [CURRENT_TASK] + shl eax, 8 ; created by kernel? + cmp [SLOT_BASE+eax+APPDATA.dir_table], sys_pgdir - OS_BASE + jnz @f + cmp [app_path], 0 ; it is a thread? + jnz @f + mov [ebx+REG_CS], dword os_code ; kernel thread +@@: mov [ebx+REG_EFLAGS], dword EFL_IOPL1+EFL_IF mov eax, [esi+0x0C] ;app_esp diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index 919c832c35..a75d01788a 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -3486,17 +3486,26 @@ nobackgr: mov edx, [shutdown_processes] cmp [SYS_SHUTDOWN], dl - jne no_mark_system_shutdown + jne noshutdown lea ecx, [edx-1] mov edx, OS_BASE+0x3040 - jecxz @f + jecxz no_mark_system_shutdown ;-------------------------------------- align 4 markz: push ecx edx - lea edx, [(edx-(TASK_DATA and 1FFFFFFFh))*8+SLOT_BASE] + cmp [edx+TASKDATA.state], 9 + jz .nokill + lea edx, [(edx-(CURRENT_TASK and 1FFFFFFFh))*8+SLOT_BASE] + cmp [edx+APPDATA.dir_table], sys_pgdir - OS_BASE + jz .nokill call request_terminate + jmp .common +.nokill: + dec byte [SYS_SHUTDOWN] + xor eax, eax +.common: pop edx ecx test eax, eax jz @f @@ -3521,11 +3530,20 @@ align 4 newct: mov cl, [ebx] cmp cl, byte 3 - jz terminate + jz .terminate cmp cl, byte 4 - jz terminate + jnz .noterminate +.terminate: + pushad + call terminate + popad + cmp byte [SYS_SHUTDOWN], 0 + jz .noterminate + dec byte [SYS_SHUTDOWN] + je system_shutdown +.noterminate: add ebx, 0x20 inc esi dec eax