(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