Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 5598 → Rev 5599

/kernel/branches/Kolibri-acpi/core/sched.inc
16,7 → 16,8
align 32
irq0:
pushad
Mov ds, ax, app_data
mov ax, app_data
mov ds, ax
mov es, ax
inc [timer_ticks]
mov eax, [timer_ticks]
101,8 → 102,10
mov [esi+APPDATA.saved_esp], esp
mov esp, [ebx+APPDATA.saved_esp]
; set new thread io-map
Mov dword [page_tabs+((tss._io_map_0 and -4096) shr 10)],eax,[ebx+APPDATA.io_map]
Mov dword [page_tabs+((tss._io_map_1 and -4096) shr 10)],eax,[ebx+APPDATA.io_map+4]
mov eax, [ebx+APPDATA.io_map]
mov dword [page_tabs+((tss._io_map_0 and -4096) shr 10)], eax
mov eax, [ebx+APPDATA.io_map+4]
mov dword [page_tabs+((tss._io_map_1 and -4096) shr 10)], eax
; set new thread memory-map
mov eax, [ebx+APPDATA.process]
cmp eax, [current_process]
113,7 → 116,8
@@:
; set tss.esp0
 
Mov [tss._esp0],eax,[ebx+APPDATA.saved_esp0]
mov eax, [ebx+APPDATA.saved_esp0]
mov [tss._esp0], eax
 
mov edx, [ebx+APPDATA.tls_base]
 
126,7 → 130,8
mov fs, dx
 
; set gs selector unconditionally
Mov gs,ax,graph_data
Mov ax, graph_data
Mov gs, ax
; set CR0.TS
cmp bh, byte[fpu_owner] ;bh == incoming task (new)
clts ;clear a task switch flag
280,7 → 285,7
call [ebx+APPDATA.wait_test]
mov [esp+28], eax
popad
or eax, eax
test eax, eax
jnz @f
; testing for timeout
mov eax, [timer_ticks]
/kernel/branches/Kolibri-acpi/core/sync.inc
86,12 → 86,12
cmp ecx, (PROC.pdt_0 - PROC.htab)/4
jae .fail
 
mov esi, [current_process]
mov edi, [esi+PROC.htab+ecx*4]
mov edi, [current_process]
mov ebp, [edi+PROC.htab+ecx*4]
 
cmp [edi+FUTEX.magic], 'FUTX'
cmp [ebp+FUTEX.magic], 'FUTX'
jne .fail
cmp [edi+FUTEX.handle], ecx
cmp [ebp+FUTEX.handle], ecx
jne .fail
 
jmp dword [f77call+ebx*4]
113,10 → 113,10
 
align 4
;ecx futex handle
;esi current process
;edi futex object
;edi current process
;ebp futex object
.futex_destroy:
mov ecx, edi
mov ecx, ebp
call destroy_futex
mov [esp+SYSCALL_STACK._eax], eax
ret
123,11 → 123,14
 
align 4
;ecx futex handle
;esi current process
;edi futex object
;edx control value
;esi timeout
;edi current process
;ebp futex object
.futex_wait:
mov ecx, [edi+FUTEX.pointer]
test esi, esi
jnz .futex_wait_timeout
mov ecx, [ebp+FUTEX.pointer]
mov eax, edx
lock cmpxchg [ecx], edx ;wait until old_value == new_value
jz .wait_slow
143,7 → 146,7
mov ebx, [TASK_BASE]
mov [ebx+TASKDATA.state], 1
mov [esp+MUTEX_WAITER.task], ebx
lea esi, [edi+FUTEX.wait_list]
lea esi, [ebp+FUTEX.wait_list]
 
list_add_tail esp, esi ;esp= new waiter, esi= list head
 
162,6 → 165,72
 
align 4
;ecx futex handle
;edx control value
;esi timeout
;edi current process
;ebp futex object
 
.futex_wait_timeout:
mov ecx, [ebp+FUTEX.pointer]
mov eax, edx
lock cmpxchg [ecx], edx ;wait until old_value == new_value
jz .wait_slow_timeout
 
mov [esp+SYSCALL_STACK._eax], 0
ret
 
align 4
.wait_test:
xor eax, eax
ret
 
.wait_slow_timeout:
pushfd
cli
 
sub esp, sizeof.MUTEX_WAITER
 
mov ebx, [current_slot]
mov [ebx+APPDATA.wait_test], f77.wait_test
mov [ebx+APPDATA.wait_timeout], esi
mov [ebx+APPDATA.wait_param], ebp
mov eax, [timer_ticks]
mov [ebx+APPDATA.wait_begin], eax
mov eax, [TASK_BASE]
mov [eax+TASKDATA.state], 5
 
mov [esp+MUTEX_WAITER.task], ebx
lea esi, [ebp+FUTEX.wait_list]
 
list_add_tail esp, esi ;esp= new waiter, esi= list head
 
.again_timeout:
call change_task
mov eax, [ebx+APPDATA.wait_param]
test eax, eax
jz .timeout
 
lock cmpxchg [ecx], edx
jz .again_timeout
@@:
list_del esp
add esp, sizeof.MUTEX_WAITER
 
popfd
mov [esp+SYSCALL_STACK._eax], 0
ret
 
.timeout:
list_del esp
add esp, sizeof.MUTEX_WAITER
 
popfd
mov [esp+SYSCALL_STACK._eax], -1
ret
 
 
align 4
;ecx futex handle
;esi current process
;edi futex object
;edx threads count
/kernel/branches/Kolibri-acpi/gui/event.inc
104,7 → 104,8
mov [eax+EVENT.state], ecx
mov [eax+EVENT.pid], edx
inc [event_uid]
Mov [eax+EVENT.id],edx,[event_uid]
mov edx, [event_uid]
mov [eax+EVENT.id], edx
or esi, esi
jz RemoveEventTo
lea edi, [eax+EVENT.code]
277,7 → 278,8
jnz @f ;RET
mov [esi+APPDATA.wait_test], edx
mov [esi+APPDATA.wait_timeout], ebx
Mov [esi+APPDATA.wait_begin],eax,[timer_ticks]
mov eax, [timer_ticks]
mov [esi+APPDATA.wait_begin], eax
mov eax, [TASK_BASE]
mov [eax+TASKDATA.state], 5
call change_task
/kernel/branches/Kolibri-acpi/macros.inc
83,11 → 83,6
}
; \end{diamond}[29.09.2006]
 
macro Mov op1,op2,op3 ; op1 = op2 = op3
{
mov op2, op3
mov op1, op2
}
 
macro list_init head
{