Delay connect() until first event
Prevents enabling more channels than required until we observe an event of that model. Ideally we should implement this logic in the probe hook when the models can report if they are being used in the metadata.
This commit is contained in:
parent
8310127e78
commit
d34a25a62d
@ -52,6 +52,17 @@ process_ev(struct emu *emu)
|
|||||||
int
|
int
|
||||||
kernel_event(struct emu *emu)
|
kernel_event(struct emu *emu)
|
||||||
{
|
{
|
||||||
|
static int enabled = 0;
|
||||||
|
|
||||||
|
if (!enabled) {
|
||||||
|
if (kernel_connect(emu) != 0) {
|
||||||
|
err("kernel_connect failed");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
enabled = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
dbg("in kernel_event");
|
dbg("in kernel_event");
|
||||||
if (emu->ev->m != 'K') {
|
if (emu->ev->m != 'K') {
|
||||||
err("unexpected event model %c\n", emu->ev->m);
|
err("unexpected event model %c\n", emu->ev->m);
|
||||||
|
@ -7,7 +7,7 @@ struct model_spec model_kernel = {
|
|||||||
.name = model_name,
|
.name = model_name,
|
||||||
.model = model_id,
|
.model = model_id,
|
||||||
.create = kernel_create,
|
.create = kernel_create,
|
||||||
.connect = kernel_connect,
|
// .connect = kernel_connect,
|
||||||
.event = kernel_event,
|
.event = kernel_event,
|
||||||
.probe = kernel_probe,
|
.probe = kernel_probe,
|
||||||
};
|
};
|
||||||
@ -29,7 +29,7 @@ static const int pvt_type[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const char *pcf_prefix[CH_MAX] = {
|
static const char *pcf_prefix[CH_MAX] = {
|
||||||
[CH_CS] = "Kernel subsystem",
|
[CH_CS] = "Kernel context switch",
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct pcf_value_label kernel_cs_values[] = {
|
static const struct pcf_value_label kernel_cs_values[] = {
|
||||||
|
@ -509,6 +509,16 @@ process_ev(struct emu *emu)
|
|||||||
int
|
int
|
||||||
nanos6_event(struct emu *emu)
|
nanos6_event(struct emu *emu)
|
||||||
{
|
{
|
||||||
|
static int enabled = 0;
|
||||||
|
|
||||||
|
if (!enabled) {
|
||||||
|
if (nanos6_connect(emu) != 0) {
|
||||||
|
err("nanos6_connect failed");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
enabled = 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (emu->ev->m != '6') {
|
if (emu->ev->m != '6') {
|
||||||
err("unexpected event model %c\n", emu->ev->m);
|
err("unexpected event model %c\n", emu->ev->m);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -7,7 +7,7 @@ struct model_spec model_nanos6 = {
|
|||||||
.name = model_name,
|
.name = model_name,
|
||||||
.model = model_id,
|
.model = model_id,
|
||||||
.create = nanos6_create,
|
.create = nanos6_create,
|
||||||
.connect = nanos6_connect,
|
// .connect = nanos6_connect,
|
||||||
.event = nanos6_event,
|
.event = nanos6_event,
|
||||||
.probe = nanos6_probe,
|
.probe = nanos6_probe,
|
||||||
.finish = nanos6_finish,
|
.finish = nanos6_finish,
|
||||||
|
@ -94,6 +94,16 @@ process_ev(struct emu *emu)
|
|||||||
int
|
int
|
||||||
nodes_event(struct emu *emu)
|
nodes_event(struct emu *emu)
|
||||||
{
|
{
|
||||||
|
static int enabled = 0;
|
||||||
|
|
||||||
|
if (!enabled) {
|
||||||
|
if (nodes_connect(emu) != 0) {
|
||||||
|
err("nodes_connect failed");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
enabled = 1;
|
||||||
|
}
|
||||||
|
|
||||||
dbg("in nodes_event");
|
dbg("in nodes_event");
|
||||||
if (emu->ev->m != 'D') {
|
if (emu->ev->m != 'D') {
|
||||||
err("unexpected event model %c\n", emu->ev->m);
|
err("unexpected event model %c\n", emu->ev->m);
|
||||||
|
@ -7,7 +7,7 @@ struct model_spec model_nodes = {
|
|||||||
.name = model_name,
|
.name = model_name,
|
||||||
.model = model_id,
|
.model = model_id,
|
||||||
.create = nodes_create,
|
.create = nodes_create,
|
||||||
.connect = nodes_connect,
|
// .connect = nodes_connect,
|
||||||
.event = nodes_event,
|
.event = nodes_event,
|
||||||
.probe = nodes_probe,
|
.probe = nodes_probe,
|
||||||
.finish = nodes_finish,
|
.finish = nodes_finish,
|
||||||
|
@ -507,6 +507,16 @@ process_ev(struct emu *emu)
|
|||||||
int
|
int
|
||||||
nosv_event(struct emu *emu)
|
nosv_event(struct emu *emu)
|
||||||
{
|
{
|
||||||
|
static int enabled = 0;
|
||||||
|
|
||||||
|
if (!enabled) {
|
||||||
|
if (nosv_connect(emu) != 0) {
|
||||||
|
err("nosv_connect failed");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
enabled = 1;
|
||||||
|
}
|
||||||
|
|
||||||
dbg("in nosv_event");
|
dbg("in nosv_event");
|
||||||
if (emu->ev->m != 'V') {
|
if (emu->ev->m != 'V') {
|
||||||
err("unexpected event model %c\n", emu->ev->m);
|
err("unexpected event model %c\n", emu->ev->m);
|
||||||
|
@ -7,7 +7,7 @@ struct model_spec model_nosv = {
|
|||||||
.name = model_name,
|
.name = model_name,
|
||||||
.model = model_id,
|
.model = model_id,
|
||||||
.create = nosv_create,
|
.create = nosv_create,
|
||||||
.connect = nosv_connect,
|
// .connect = nosv_connect,
|
||||||
.event = nosv_event,
|
.event = nosv_event,
|
||||||
.probe = nosv_probe,
|
.probe = nosv_probe,
|
||||||
.finish = nosv_finish,
|
.finish = nosv_finish,
|
||||||
|
Loading…
Reference in New Issue
Block a user