sys/src/asmlink.h File Reference

#include <linux/linkage.h>

Go to the source code of this file.

Functions

asmlinkage void sched_vector (void)
asmlinkage void resched_vector (void)
asmlinkage void timer_vector (void)
asmlinkage void iopost_vector (void)
asmlinkage void exe_forkdspth (int i)
 requesting i/o completion processing - see 5.2 22.3.4
asmlinkage void ioc_iopost (void)
 I/O postprocessing - se 5.2 21.7.
asmlinkage void sch_astdel (int dummy)
 delivering an ast - see 5.2 7.5
asmlinkage void sw_ast (void)
asmlinkage void sch_sched (int)
asmlinkage void sch_resched (void)
 rescheduling - see 5.2 12.6.4
asmlinkage void schedule (void)
asmlinkage void exe_swtimint (void)
 software timer interrupt service routine - see 5.2 11.8


Function Documentation

asmlinkage void exe_forkdspth ( int  i  ) 

requesting i/o completion processing - see 5.2 22.3.4

Parameters:
i interrupt

remove one fork block at a time from the appropriate fork queue

get forklock

call fork routine

unlock fork

next entry TODO redo maybe

Definition at line 116 of file forkcntrl.c.

References _fkb::fkb_l_fpc, _fkb::fkb_l_fr3, smp_gl_cpu_data, and spin.

Referenced by exe_frkipl10dsp(), exe_frkipl11dsp(), exe_frkipl6dsp(), exe_frkipl8dsp(), and exe_frkipl9dsp().

asmlinkage void exe_swtimint ( void   ) 

software timer interrupt service routine - see 5.2 11.8

linux leftover or something?

locate process header

test for quantum end and maybe run sch_qend

note that the spinlocks are now inside sch_qend

test if primary cpu

acquire both TIMER and HWCLK spinlocks

iterate

compare system time with 1st time for timer entry

remove first tqe from queue

release both TIMER and HWCLK spinlocks

11.8.1 process timer requests

if TQTYPE CHK_CPUTIM ... - MISSING

test if process still alive - MISSING

if not or if illegal efn, deallocate tqe - MISSING

increment jib tqcnt - MISSING

test jib flags to see if someone waits - MISSING

run sch_chse for each such process - MISSING

test if acb quota in tqe set, user wants ast - MISSING

copy some field to ast - MISSING

call qast

11.8,2 periodic system routine requests TODO check if right

just call it

11.8.3 scheduled wakeup requests

get sched spinlock TODO says who?

test if process still alive - MISSING

if so, and rqpid still exists, increment astcnt - MISSING

if not deallocate tqe - MISSING

call sch_wake to wake it up

if no repeat, do cleanup - MISSING

release sched spinlock TODO says who?

if repeat add tqe delta to tqe time, and do instimq

acquire both TIMER and HWCLK spinlocks

Definition at line 166 of file timeschdl.c.

References exe_gl_tqfl, exe_gq_1st_time, exe_gq_systime, exe_instimq(), IPL__HWCLK, IPL__TIMER, IPL__TIMERFORK, printtq(), sch_postef(), sch_qast(), sch_qend(), sch_wake(), SPIN_HWCLK, SPIN_SCHED, SPIN_TIMER, _tqe::tqe_b_rqtype, _tqe::tqe_l_fpc, _tqe::tqe_q_time, and vmstimerconf.

asmlinkage void ioc_iopost ( void   ) 

I/O postprocessing - se 5.2 21.7.

set ipl

extra global cli TODO check why and still needed?

fetch irp from postprocessing queues

21.7.1 check if negative irp pid (a routine), then perform system i/o completion and call this - MISSING

21.7.2 normal i/o completion

checks bufio flag

21.7.2.2 buffered i/o completion

maybe do ioc_mapvblk - MISSING

do mmg_unlock - MISSING

test present irpes - MISSING

increment diocnt - MISSING?

store bufpost ast in irp and use kast

21.7.2.3 final steps in ioc_iopost - TODO restructure, double

spinlock

spinunlock

reiterate

21.7.2.1 buffered i/o completion

increment biocnt - MISSING?

if filacp set also incr diocnt - MISSING

invoke credit_bytcnt - MISSING

store bufpost ast in irp and use kast

21.7.2.3 final steps in ioc_iopost - TODO restructure, double

spinlock

spinunlock

reiterate

Definition at line 207 of file iociopost.c.

References _pcb, bufpost(), ctl_gl_pcb, dirpost(), exe_ipid_to_pcb(), ioc_bufpost(), ioc_gq_postiq, IPL__IOPOST, IPL__SYNCH, _irp::irp_b_rmod, _irp::irp_l_ast, _irp::irp_l_sts, sch_postef(), sch_qast(), smp_gl_cpu_data, SPIN_IOPOST, and SPIN_SCHED.

asmlinkage void iopost_vector ( void   ) 

asmlinkage void resched_vector ( void   ) 

asmlinkage void sch_astdel ( int  dummy  ) 

delivering an ast - see 5.2 7.5

spinlock sched

empty queue, spurious interrupt, drop spinlock, return

TODO: check if astlvl be 4 or sch_newlvl necessary

remove first acb from queue

test if kernel mode ast

unlock spinlock, lower ipl to 2

dispatch kernel mode ast by simply calling it

on return from the ast just go to start again

if else, an ordinary ast

check if ok privileged mode

spurious interrupt test, is ast enabled

another spurious test, check if astdel already active

setting astact bit

if not ok, spurious interrupt found, reinsert, set new level, unlock and return

check soft_ast_disable - MISSING

if ast is deliverable

check quota bit and return quota - MISSING

store new astlvl values

unlock spinlock, set ipl

maybe run piggyback kernel ast

if neither nodelete nor pkast set, deallocate ast

build arg list on the stack of the ast's access mode

set ipl 0 before kernel mode ast

call ast in kernel mode

TODO: check it these must be here or be moved

clear astatc

compute new astlvl

Definition at line 629 of file astdel.c.

References _pcb, _acb::acb_b_rmod, _acb::acb_l_ast, _acb::acb_l_astprm, _acb::acb_l_kast, ctl_gl_pcb, IPL__ASTDEL, IPL__SYNCH, kfree(), printast(), sch_newlvl(), smp_gl_cpu_data, SPIN_SCHED, and user_spaceable_addr().

asmlinkage void sch_resched ( void   ) 

rescheduling - see 5.2 12.6.4

spinlock sched and set ipl

get current pcb and priority

clear bit in cpu_priority table

if no process with this pri on any cpu, clear bit in active_priority table

now some if's remaining from linux - TODO: check if still needed

set pri bit in comqs

set state of cur pcb to COM

insert pcb at tail of comqueue

linux leftover

clear idle_cpus to signal all idle cpus to try to reschedule

go some intro sch_sched

Definition at line 622 of file sched.c.

References _pcb, _cpu::cpu_b_cur_pri, _cpu::cpu_l_curpcb, idle_task, IPL__RESCHED, IPL__SCHED, mycheckaddr(), numproc(), printcom(), sch_al_cpu_priority, sch_aq_comh, sch_aq_comt, sch_gl_active_priority, sch_gl_comqs, sch_gl_idle_cpus, sch_sched(), smp_gl_cpu_data, SPIN_SCHED, and task_on_comqueue().

asmlinkage void sch_sched ( int   ) 

Referenced by sch_resched(), and sch_waitm().

asmlinkage void sched_vector ( void   ) 

asmlinkage void schedule ( void   ) 

asmlinkage void sw_ast ( void   ) 

asmlinkage void timer_vector ( void   ) 


Generated on Fri Oct 9 10:26:00 2009 for FreeVMS by  doxygen 1.5.5