Beispiel #1
0
static inline int print_all_triggers(struct cli_state *state)
{
    int status;

    status = print_trigger(state, BLADERF_MODULE_RX, BLADERF_TRIGGER_J71_4);
    if (status != 0) {
        return status;
    }

    status = print_trigger(state, BLADERF_MODULE_TX, BLADERF_TRIGGER_J71_4);

    return status;
}
Beispiel #2
0
int cmd_trigger(struct cli_state *state, int argc, char **argv)
{
    int status = 0;
    bladerf_module m;
    bladerf_trigger_signal s;

    switch (argc) {
        case 1:
            status = print_all_triggers(state);
            break;

        case 3:
        case 4:
            s = str2trigger(argv[1]);
            if (s == BLADERF_TRIGGER_INVALID) {
                cli_err(state, "Invalid trigger signal", "%s\n", argv[1]);
                return CLI_RET_INVPARAM;
            }

            m = str2module(argv[2]);
            if (m == BLADERF_MODULE_INVALID) {
                cli_err(state, "Invalid module", "%s\n", argv[2]);
                return CLI_RET_INVPARAM;
            }

            if (argc == 3) {
                status = print_trigger(state, m, s);
            } else {
                status = config_trigger(state, m, s, argv[3], argv[0]);
            }
            break;

        default:
            status = CLI_RET_NARGS;
    }

    return status;
}
Beispiel #3
0
int __noinstrument kfi_dump_log(char* buf)
{
	int i, len = 0;
	struct kfi_run* run = run_curr;
	struct kfi_filters* filters = &run->filters;

	if (!run) {
		dump_str(buf, len, "\nNo logging run registered\n");
		return len;
	}

	if (!run->triggered) {
		dump_str(buf, len, "\nLogging not yet triggered\n");
		return len;
	}

	if (!run->complete) {
		dump_str(buf, len, "\nLogging is running\n");
		return len;
	}

	dump_str(buf, len, "\nKernel Instrumentation Run ID %d\n\n",
		 run->id);
	
	dump_str(buf, len, "Filters:\n");
	if (filters->func_list_size) {
		dump_str(buf, len, "\t%d-entry function list\n",
			 filters->func_list_size);
	}
	if (filters->min_delta) {
		dump_str(buf, len, "\t%ld usecs minimum execution time\n",
			 filters->min_delta);
	}
	if (filters->max_delta) {
		dump_str(buf, len, "\t%ld usecs maximum execution time\n",
			 filters->max_delta);
	}
	if (filters->no_ints) {
		dump_str(buf, len, "\tno functions in interrupt context\n");
	}
	if (filters->only_ints) {
		dump_str(buf, len,
			 "\tno functions NOT in interrupt context\n");
	}
	if (filters->func_list) {
		dump_str(buf, len, "\tfunction list\n");
	}
	
#ifdef KFI_DEBUG
	dump_str(buf, len, "\nFilter Counters:\n");

	if (filters->min_delta || filters->max_delta) {
		dump_str(buf, len, "\nExecution time filter count = %d\n",
			 filters->cnt.delta);
	}
	if (filters->no_ints) {
		dump_str(buf, len,
			 "No Interrupt functions filter count = %d\n",
			 filters->cnt.no_ints);
	}
	if (filters->only_ints) {
		dump_str(buf, len,
			 "Only Interrupt functions filter count = %d\n",
			 filters->cnt.only_ints);
	}
	if (filters->func_list_size) {
		dump_str(buf, len, "Function List filter count = %d\n",
			 filters->cnt.func_list);
	}
	dump_str(buf, len, "Total entries filtered = %d\n",
		 filters->cnt.delta +
		 filters->cnt.no_ints +
		 filters->cnt.only_ints +
		 filters->cnt.func_list);
	dump_str(buf, len, "Entries not found = %d\n", run->notfound);
#endif	
	dump_str(buf, len, "\nNumber of entries after filters = %d\n\n",
		 run->next_entry);

	len += print_trigger(buf, len, &run->start_trigger, 1);
	len += print_trigger(buf, len, &run->stop_trigger, 0);
	
	/* print out header */
	dump_str(buf, len, "\n");
	dump_str(buf, len,
		 " Entry      Delta       PID      Function    Caller\n");
	dump_str(buf, len,
		 "--------   --------   --------   --------   --------\n");

	for (i=0; i < run->next_entry; i++) {
		dump_str(buf, len, "%8lu   %8lu   %7d%s   %08x   %08x\n",
			 run->log[i].time,
			 run->log[i].delta,
			 run->log[i].pid,
			 (run->log[i].pid == INTR_CONTEXT) ? "i" : " ",
			 (unsigned int)run->log[i].va,
			 (unsigned int)run->log[i].call_site);
	}

	return len;
}