Emit sched fake events as well
This commit is contained in:
parent
9b39e4d69e
commit
b60c6da764
1
emu.c
1
emu.c
@ -113,6 +113,7 @@ hook_post(struct ovni_emu *emu)
|
|||||||
switch(emu->cur_ev->header.model)
|
switch(emu->cur_ev->header.model)
|
||||||
{
|
{
|
||||||
case 'O': hook_post_ovni(emu); break;
|
case 'O': hook_post_ovni(emu); break;
|
||||||
|
case 'V': hook_post_nosv(emu); break;
|
||||||
default:
|
default:
|
||||||
//dbg("unknown model %c\n", emu->cur_ev->model);
|
//dbg("unknown model %c\n", emu->cur_ev->model);
|
||||||
break;
|
break;
|
||||||
|
@ -290,7 +290,8 @@ hook_emit_nosv(struct ovni_emu *emu)
|
|||||||
hook_emit_nosv_ss(emu);
|
hook_emit_nosv_ss(emu);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct hook_entry pre_hooks[] = {
|
void
|
||||||
{ "VTc", pre_task_create },
|
hook_post_nosv(struct ovni_emu *emu)
|
||||||
{ "VTx", pre_task_create },
|
{
|
||||||
};
|
hook_post_nosv_ss(emu);
|
||||||
|
}
|
||||||
|
@ -57,6 +57,15 @@ ss_ev(struct ovni_ethread *th, int ev)
|
|||||||
th->ss_event = ev;
|
th->ss_event = ev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
ss_last_st(struct ovni_ethread *th)
|
||||||
|
{
|
||||||
|
if(th->nss == 0)
|
||||||
|
return ST_NULL;
|
||||||
|
|
||||||
|
return th->ss[th->nss - 1];
|
||||||
|
}
|
||||||
|
|
||||||
/* --------------------------- pre ------------------------------- */
|
/* --------------------------- pre ------------------------------- */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -121,12 +130,32 @@ emit_thread_state(struct ovni_emu *emu, struct ovni_ethread *th,
|
|||||||
int type, int st)
|
int type, int st)
|
||||||
{
|
{
|
||||||
int row;
|
int row;
|
||||||
|
|
||||||
row = th->gindex + 1;
|
row = th->gindex + 1;
|
||||||
|
|
||||||
prv_ev_thread(emu, row, type, st);
|
prv_ev_thread(emu, row, type, st);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
emit_thread_event(struct ovni_emu *emu, struct ovni_ethread *th,
|
||||||
|
int type, int st)
|
||||||
|
{
|
||||||
|
int64_t t0, t1;
|
||||||
|
int row;
|
||||||
|
int prev_st;
|
||||||
|
|
||||||
|
row = th->gindex + 1;
|
||||||
|
|
||||||
|
t0 = emu->delta_time - 1;
|
||||||
|
t1 = emu->delta_time;
|
||||||
|
|
||||||
|
prev_st = ss_last_st(th);
|
||||||
|
|
||||||
|
/* Fake event using 1 nanosecond in the past */
|
||||||
|
prv_ev_thread_raw(emu, row, t0, type, st);
|
||||||
|
prv_ev_thread_raw(emu, row, t1, type, prev_st);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
hook_emit_nosv_ss(struct ovni_emu *emu)
|
hook_emit_nosv_ss(struct ovni_emu *emu)
|
||||||
{
|
{
|
||||||
@ -134,23 +163,16 @@ hook_emit_nosv_ss(struct ovni_emu *emu)
|
|||||||
|
|
||||||
th = emu->cur_thread;
|
th = emu->cur_thread;
|
||||||
|
|
||||||
// /* Only emit a state if needed */
|
/* Only emit a state if needed */
|
||||||
// if(th->ss_event != EV_NULL)
|
if(th->ss_event != EV_NULL)
|
||||||
// {
|
{
|
||||||
// emit_thread_state(emu, th, PTT_SUBSYSTEM,
|
emit_thread_event(emu, th, PTT_SUBSYSTEM,
|
||||||
// th->ss_event);
|
th->ss_event);
|
||||||
// }
|
|
||||||
// else
|
|
||||||
|
|
||||||
if(th->nss > 0)
|
return;
|
||||||
{
|
|
||||||
emit_thread_state(emu, th, PTT_SUBSYSTEM,
|
|
||||||
th->ss[th->nss - 1]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
emit_thread_state(emu, th, PTT_SUBSYSTEM, ST_NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
emit_thread_state(emu, th, PTT_SUBSYSTEM, ss_last_st(th));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------- post ------------------------------- */
|
/* --------------------------- post ------------------------------- */
|
||||||
|
3
pcf.c
3
pcf.c
@ -119,6 +119,9 @@ struct event_value thread_ss_values[] = {
|
|||||||
{ ST_SCHED_HUNGRY, "Scheduler: Hungry" },
|
{ ST_SCHED_HUNGRY, "Scheduler: Hungry" },
|
||||||
{ ST_SCHED_SERVING, "Scheduler: Serving" },
|
{ ST_SCHED_SERVING, "Scheduler: Serving" },
|
||||||
{ ST_SCHED_SUBMITTING, "Scheduler: Submitting" },
|
{ ST_SCHED_SUBMITTING, "Scheduler: Submitting" },
|
||||||
|
{ EV_SCHED_SEND, "EV Scheduler: Send task" },
|
||||||
|
{ EV_SCHED_RECV, "EV Scheduler: Recv task" },
|
||||||
|
{ EV_SCHED_SELF, "EV Scheduler: Self-assign task" },
|
||||||
{ -1, NULL },
|
{ -1, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user