예제 #1
0
파일: ktap.c 프로젝트: pcn/ktap
/* Ktap Main Entry */
static int ktap_main(struct file *file, ktap_parm *parm)
{
	unsigned long *buff = NULL;
	ktap_state *ks;
	ktap_closure *cl;
	int start_time, delta_time;
	int ret;

	if (atomic_inc_return(&kp_is_running) != 1) {
		atomic_dec(&kp_is_running);
		pr_info("only one ktap thread allow to run\n");
		return -EBUSY;
	}

	start_time = gettimeofday_us();

	ks = kp_newstate(parm, kp_dir_dentry);
	if (unlikely(!ks)) {
		ret = -ENOEXEC;
		goto out;
	}

	file->private_data = ks;

	ret = load_trunk(parm, &buff);
	if (ret) {
		pr_err("cannot load file\n");
		goto out;
	}

	cl = kp_load(ks, (unsigned char *)buff);

	vfree(buff);

	if (cl) {
		/* optimize bytecode before excuting */
		kp_optimize_code(ks, 0, cl->p);

		delta_time = gettimeofday_us() - start_time;
		kp_verbose_printf(ks, "booting time: %d (us)\n", delta_time);
		kp_call(ks, ks->top - 1, 0);
	}

	kp_final_exit(ks);

 out:
	atomic_dec(&kp_is_running);	
	return ret;
}
예제 #2
0
파일: lib_base.c 프로젝트: WinLinKer/ktap
static int kplib_gettimeofday_us(ktap_state *ks)
{
	set_number(ks->top, gettimeofday_us());
	incr_top(ks);

	return 1;
}
예제 #3
0
파일: baselib.c 프로젝트: joelagnel/ktap
static int ktap_lib_gettimeofday_us(ktap_state *ks)
{
	setnvalue(ks->top, gettimeofday_us());
	incr_top(ks);

	return 1;
}
예제 #4
0
파일: ktap.c 프로젝트: cfregly/ktap
/* Ktap Main Entry */
static int ktap_main(struct file *file, ktap_parm *parm)
{
	unsigned long *buff = NULL;
	ktap_state *ks;
	ktap_closure *cl;
	int start_time, delta_time;
	int ret;

	start_time = gettimeofday_us();

	ks = kp_newstate(parm, kp_dir_dentry);
	if (unlikely(!ks))
		return -ENOEXEC;

	file->private_data = ks;

	ret = load_trunk(parm, &buff);
	if (ret) {
		pr_err("cannot load file\n");
		return ret;
	}

	cl = kp_load(ks, (unsigned char *)buff);

	vfree(buff);

	if (cl) {
		/* optimize bytecode before excuting */
		kp_optimize_code(ks, 0, cl->p);

		delta_time = gettimeofday_us() - start_time;
		kp_verbose_printf(ks, "booting time: %d (us)\n", delta_time);
		kp_call(ks, ks->top - 1, 0);
	}

	kp_final_exit(ks);
	return ret;
}