Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 5599 → Rev 5598

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