Esempio n. 1
0
void
call_almhdr(ALMCB *p_almcb)
{
	PRI		saved_ipm;

	/*
	 *  アラームハンドラを停止状態にする.
	 */
	p_almcb->almsta = false;

	/*
	 *  アラームハンドラを,CPUロック解除状態で呼び出す.
	 */
	saved_ipm = i_get_ipm();
	i_unlock_cpu();

	LOG_ALM_ENTER(p_almcb);
	(*((ALMHDR)(p_almcb->p_alminib->almhdr)))(p_almcb->p_alminib->exinf);
	LOG_ALM_LEAVE(p_almcb);

	if (!i_sense_lock()) {
		i_lock_cpu();
	}
	i_set_ipm(saved_ipm);
}
Esempio n. 2
0
void
call_almhdr(uint_t almidx)
{
	/* アラームハンドラを停止状態にする */
	almcb_almact &= ~ALMACT_BIT(almidx);
	
	i_unlock_cpu();
	
	/* アラームハンドラの実行 */
	LOG_ALM_ENTER(almidx);
	(*alminib_almhdr[almidx])(alminib_exinf[almidx]);
	LOG_ALM_LEAVE(almidx);
	
	if (!i_sense_lock()) {
		i_lock_cpu();
	}
}
Esempio n. 3
0
void
call_alarm(ALMCB *p_almcb)
{
    /*
     *  アラーム通知を停止状態にする.
     */
    p_almcb->almsta = false;

    /*
     *  通知ハンドラを,CPUロック解除状態で呼び出す.
     */
    unlock_cpu();

    LOG_ALM_ENTER(p_almcb);
    (*(p_almcb->p_alminib->nfyhdr))(p_almcb->p_alminib->exinf);
    LOG_ALM_LEAVE(p_almcb);

    if (!sense_lock()) {
        lock_cpu();
    }
}