(toppers-users 2445) TOPPERS/FI4 ΥХ
takaya_kakizaki gmx.yamaha.com
takaya_kakizaki gmx.yamaha.com
2006ǯ 6 13 () 10:29:41 JST
ȿޤ
TOPPERS/FI4ɾƤưʲΥХȯޤ
ǥ֥ݡȤ
A:acp_por
B:cal_por
ν˸ƤӽФȡcal_porλǥ顼ǤȤΤǤ
ɤäƤߤޤ顢
rendezvous.c cal_porǤεҤ
/*
* ǥּԤƤ(¨νǥӥåȥѥ
* פƤ)ǥֽλԤˤ롣
* ǤʤСǥָƽФԤ֤ˤ롣
*/
if (queue != NULL) {
WINFO_POR winfo;
RDVCB *rdvcb;
winfo.msg = msg;
winfo.msgsz = cmsgsz;
winfo.rdvno = rdvno;
winfo.maxrmsz = porcb->porinib->maxrmsz;
rdvcb = &rdvcb_table[winfo.rdvno % TNUM_RDVNO_HASH];
wobj_make_wait((WOBJCB *)rdvcb, (WINFO_WOBJ *)&winfo);
if (wait_complete(tcb)) {
dispatch();
}
if (winfo.winfo.wercd == E_OK) {
ercd = winfo.msgsz;
} else {
ercd = winfo.winfo.wercd;
}
} else {
ȤʤäƤޤ
Ԥ줿顢Ԥ֤ܤΤ
wait_completeǡ˴ؤ餺dispatchԤɬפȻפΤǤ
/*
* ǥּԤƤ(¨νǥӥåȥѥ
* פƤ)ǥֽλԤˤ롣
* ǤʤСǥָƽФԤ֤ˤ롣
*/
if (queue != NULL) {
WINFO_POR winfo;
RDVCB *rdvcb;
winfo.msg = msg;
winfo.msgsz = cmsgsz;
winfo.rdvno = rdvno;
winfo.maxrmsz = porcb->porinib->maxrmsz;
rdvcb = &rdvcb_table[winfo.rdvno % TNUM_RDVNO_HASH];
wobj_make_wait((WOBJCB *)rdvcb, (WINFO_WOBJ *)&winfo);
/****** ѹ ************/
wait_complete(tcb);
dispatch();
if (winfo.winfo.wercd == E_OK) {
ercd = winfo.msgsz;
} else {
ercd = winfo.winfo.wercd;
}
} else {
ɤǤϤʤǤ礦
⤦ҤȤġĹ֥åȤ
Ԥ֤ˤϤȥǤʤʤޤ
SYSCALL ER
get_mpl(ID mplid, UINT blksz, VP *p_blk)
{
MPLCB *mplcb;
WINFO_MPL winfo;
ER ercd;
LOG_GET_MPL_ENTER(mplid, blksz, p_blk);
CHECK_DISPATCH();
CHECK_MPLID(mplid);
mplcb = get_mplcb(mplid);
t_lock_cpu();
T_CHECK_OBJECT_EXIST(mplcb);
if (kmem_allocate(mplcb->free_list, blksz, p_blk)) {
ercd = E_OK;
} else {
wobj_make_wait((WOBJCB *) mplcb, (WINFO_WOBJ *) &winfo);
dispatch();
ercd = winfo.winfo.wercd;
if (ercd == E_OK) {
*p_blk = winfo.blk;
}
}
t_unlock_cpu();
exit:
LOG_GET_MPL_LEAVE(ercd, p_blk);
return(ercd);
}
ѿν˺Ǥ͡
SYSCALL ER
get_mpl(ID mplid, UINT blksz, VP *p_blk)
{
MPLCB *mplcb;
WINFO_MPL winfo;
ER ercd;
LOG_GET_MPL_ENTER(mplid, blksz, p_blk);
CHECK_DISPATCH();
CHECK_MPLID(mplid);
mplcb = get_mplcb(mplid);
t_lock_cpu();
T_CHECK_OBJECT_EXIST(mplcb);
if (kmem_allocate(mplcb->free_list, blksz, p_blk)) {
ercd = E_OK;
} else {
/* ˺줿 */
winfo.blksz = blksz;
wobj_make_wait((WOBJCB *) mplcb, (WINFO_WOBJ *) &winfo);
dispatch();
ercd = winfo.winfo.wercd;
if (ercd == E_OK) {
*p_blk = winfo.blk;
}
}
t_unlock_cpu();
exit:
LOG_GET_MPL_LEAVE(ercd, p_blk);
return(ercd);
}
ʾ塢ꤤޤ
------------------------
ꡡ
ޥϳҡɥͥåȥ
ɥͥåȳȯ
E-mail: kakizaki soundnet.yamaha.co.jp