proc.c File Reference

#include <minix/com.h>
#include <minix/callnr.h>
#include <minix/endpoint.h>
#include "debug.h"
#include "kernel.h"
#include "proc.h"
#include <signal.h>

Include dependency graph for proc.c:

Go to the source code of this file.

Defines

#define BuildMess(m_ptr, src, dst_ptr)
#define CopyMess(s, sp, sm, dp, dm)
#define Q_BALANCE_TICKS   100

Functions

FORWARD _PROTOTYPE (int mini_send,(struct proc *caller_ptr, int dst_e, message *m_ptr, unsigned flags))
FORWARD _PROTOTYPE (int mini_receive,(struct proc *caller_ptr, int src, message *m_ptr, unsigned flags))
FORWARD _PROTOTYPE (int mini_notify,(struct proc *caller_ptr, int dst))
FORWARD _PROTOTYPE (int deadlock,(int function, register struct proc *caller, int src_dst))
FORWARD _PROTOTYPE (void enqueue,(struct proc *rp))
FORWARD _PROTOTYPE (void sched,(struct proc *rp, int *queue, int *front))
FORWARD _PROTOTYPE (void pick_proc,(void))
PUBLIC int sys_call (int call_nr, int src_dst_e, message *m_ptr, long bit_map)
PRIVATE int deadlock (int function, struct proc *cp, int src_dst)
PRIVATE int mini_send (struct proc *caller_ptr, int dst_e, message *m_ptr, unsigned flags)
PRIVATE int mini_receive (struct proc *caller_ptr, int src_e, message *m_ptr, unsigned flags)
PRIVATE int mini_notify (struct proc *caller_ptr, int dst)
PUBLIC int lock_notify (int src_e, int dst_e)
PRIVATE void enqueue (struct proc *rp)
PRIVATE void dequeue (struct proc *rp)
PRIVATE void sched (struct proc *rp, int *queue, int *front)
PRIVATE void pick_proc ()
PUBLIC void balance_queues (timer_t *tp)
PUBLIC int lock_send (int dst_e, message *m_ptr)
PUBLIC void lock_enqueue (struct proc *rp)
PUBLIC void lock_dequeue (struct proc *rp)
PUBLIC int isokendpt_f (int e, int *p, int fatalflag)


Define Documentation

#define BuildMess m_ptr,
src,
dst_ptr   ) 
 

Value:

(m_ptr)->m_source = proc_addr(src)->p_endpoint;         \
        (m_ptr)->m_type = NOTIFY_FROM(src);                             \
        (m_ptr)->NOTIFY_TIMESTAMP = get_uptime();                       \
        switch (src) {                                                  \
        case HARDWARE:                                                  \
                (m_ptr)->NOTIFY_ARG = priv(dst_ptr)->s_int_pending;     \
                priv(dst_ptr)->s_int_pending = 0;                       \
                break;                                                  \
        case SYSTEM:                                                    \
                (m_ptr)->NOTIFY_ARG = priv(dst_ptr)->s_sig_pending;     \
                priv(dst_ptr)->s_sig_pending = 0;                       \
                break;                                                  \
        }

Definition at line 63 of file proc.c.

Referenced by mini_notify(), and mini_receive().

#define CopyMess s,
sp,
sm,
dp,
dm   ) 
 

Value:

cp_mess(proc_addr(s)->p_endpoint, \
                (sp)->p_memmap[D].mem_phys,     \
                (vir_bytes)sm, (dp)->p_memmap[D].mem_phys, (vir_bytes)dm)

Definition at line 79 of file proc.c.

Referenced by mini_notify(), mini_receive(), mini_send(), and sys_call().

#define Q_BALANCE_TICKS   100
 

Definition at line 656 of file proc.c.


Function Documentation

FORWARD _PROTOTYPE void  pick_proc,
(void) 
 

FORWARD _PROTOTYPE void  sched,
(struct proc *rp, int *queue, int *front
 

FORWARD _PROTOTYPE void  enqueue,
(struct proc *rp) 
 

FORWARD _PROTOTYPE int  deadlock,
(int function, register struct proc *caller, int src_dst) 
 

FORWARD _PROTOTYPE int  mini_notify,
(struct proc *caller_ptr, int dst) 
 

FORWARD _PROTOTYPE int  mini_receive,
(struct proc *caller_ptr, int src, message *m_ptr, unsigned flags
 

FORWARD _PROTOTYPE int  mini_send,
(struct proc *caller_ptr, int dst_e, message *m_ptr, unsigned flags
 

PUBLIC void balance_queues timer_t tp  ) 
 

Definition at line 657 of file proc.c.

References BEG_PROC_ADDR, dequeue(), END_PROC_ADDR, enqueue(), if(), isemptyp, lock, proc::p_max_priority, proc::p_priority, proc::p_quantum_size, and proc::p_rts_flags.

Referenced by init_clock().

PRIVATE int deadlock int  function,
struct proc cp,
int  src_dst
 

Definition at line 230 of file proc.c.

References ANY, okendpt, proc::p_getfrom_e, proc::p_rts_flags, proc::p_sendto_e, proc_addr, proc_nr, RECEIVING, and SENDING.

Referenced by sys_call().

PRIVATE void dequeue struct proc rp  ) 
 

Definition at line 548 of file proc.c.

References if(), iskernelp, next_ptr, NIL_PROC, proc::p_nextready, panic, pick_proc(), priv, proc_nr, proc_ptr, rdy_head, rdy_tail, and STACK_GUARD.

Referenced by balance_queues(), lock_dequeue(), mini_receive(), and mini_send().

PRIVATE void enqueue struct proc rp  ) 
 

Definition at line 502 of file proc.c.

References front, NIL_PROC, proc::p_nextready, pick_proc(), rdy_head, rdy_tail, and sched().

Referenced by balance_queues(), lock_enqueue(), mini_notify(), mini_receive(), and mini_send().

PUBLIC int isokendpt_f int  e,
int *  p,
int  fatalflag
 

Definition at line 750 of file proc.c.

References _ENDPOINT_G, _ENDPOINT_P, isemptyn, isokprocn, ok(), panic, and proc_addr.

PUBLIC void lock_dequeue struct proc rp  ) 
 

Definition at line 726 of file proc.c.

References dequeue(), k_reenter, lock, and unlock.

Referenced by cause_sig(), clear_endpoint(), clear_proc(), do_clocktick(), do_nice(), and do_trace().

PUBLIC void lock_enqueue struct proc rp  ) 
 

Definition at line 714 of file proc.c.

References enqueue(), lock, and unlock.

Referenced by clear_endpoint(), do_clocktick(), do_endksig(), do_exec(), do_newmap(), do_nice(), and do_trace().

PUBLIC int lock_notify int  src_e,
int  dst_e
 

Definition at line 470 of file proc.c.

References EDEADSRCDST, isokendpt, k_reenter, lock, mini_notify(), proc_addr, result, and unlock.

Referenced by cause_alarm(), clock_handler(), generic_handler(), and send_sig().

PUBLIC int lock_send int  dst_e,
message m_ptr
 

Definition at line 699 of file proc.c.

References lock, mini_send(), NON_BLOCKING, proc_ptr, result, and unlock.

Referenced by sys_task().

PRIVATE int mini_notify struct proc caller_ptr,
int  dst
 

Definition at line 430 of file proc.c.

References ANY, BuildMess, CopyMess, enqueue(), HARDWARE, m, OK, proc::p_getfrom_e, proc::p_messbuf, proc::p_misc_flags, proc::p_rts_flags, priv, proc_addr, proc_nr, RECEIVING, REPLY_PENDING, SENDING, and set_sys_bit.

Referenced by lock_notify(), and sys_call().

PRIVATE int mini_receive struct proc caller_ptr,
int  src_e,
message m_ptr,
unsigned  flags
 

Definition at line 332 of file proc.c.

References ANY, bit_nr, BITCHUNK_BITS, BuildMess, chunk, CopyMess, dequeue(), EINVAL, ENOTREADY, enqueue(), ESRCDIED, HARDWARE, i, id_to_nr, m, map, NIL_PROC, NO_ENDPOINT, NON_BLOCKING, NONE, NR_SYS_CHUNKS, NR_SYS_PROCS, OK, okendpt, proc::p_caller_q, proc::p_getfrom_e, proc::p_messbuf, proc::p_q_link, priv, proc_addr, proc_nr, RECEIVING, REPLY_PENDING, SENDING, and SLOT_FREE.

Referenced by sys_call().

PRIVATE int mini_send struct proc caller_ptr,
int  dst_e,
message m_ptr,
unsigned  flags
 

Definition at line 282 of file proc.c.

References _ENDPOINT_P, ANY, CopyMess, dequeue(), EDSTDIED, ENOTREADY, enqueue(), NIL_PROC, NO_ENDPOINT, NON_BLOCKING, OK, proc::p_caller_q, proc::p_getfrom_e, proc::p_messbuf, proc::p_q_link, proc::p_rts_flags, proc_addr, RECEIVING, and SENDING.

Referenced by lock_send(), and sys_call().

PRIVATE void pick_proc  ) 
 

Definition at line 630 of file proc.c.

References bill_ptr, BILLABLE, next_ptr, NIL_PROC, NR_SCHED_QUEUES, priv, and rdy_head.

Referenced by dequeue(), and enqueue().

PRIVATE void sched struct proc rp,
int *  queue,
int *  front
 

Definition at line 597 of file proc.c.

References IDLE_Q.

Referenced by enqueue().

PUBLIC int sys_call int  call_nr,
int  src_dst_e,
message m_ptr,
long  bit_map
 

Definition at line 94 of file proc.c.

References ANY, CHECK_DEADLOCK, CHECK_DST, CHECK_PTR, CLICK_SHIFT, CopyMess, D, deadlock(), EBADCALL, ECALLDENIED, ECHO, EDEADSRCDST, EFAULT, EINVAL, ELOCKED, ETRAPDENIED, flags, get_sys_bit, iskerneln, isokendpt, MESS_SIZE, mini_notify(), mini_receive(), mini_send(), NOTIFY, nr_to_id, OK, proc::p_memmap, proc::p_misc_flags, proc::p_nr, proc::p_rts_flags, priv, proc_nr, proc_ptr, RECEIVE, REPLY_PENDING, result, S, SEND, SENDREC, SLOT_FREE, SYSCALL_FLAGS, and SYSCALL_FUNC.


Generated on Fri Apr 14 23:14:12 2006 for minix by  doxygen 1.4.6