Beispiel #1
0
int main(int argc, char **argv)
{
	#define NR_VTHS 5
	struct vthread *vths[NR_VTHS];
	void *retvals[NR_VTHS];

	/* Tests multiple threads at once */
	for (long i = 0; i < NR_VTHS; i++)
		vths[i] = vthread_create(&vm, thread_entry, (void*)i);
	for (long i = 0; i < NR_VTHS; i++) {
		vthread_join(vths[i], &retvals[i]);
		assert(retvals[i] == (void*)i);
	}

	/* Tests reuse / GPC leakage */
	for (long i = 0; i < NR_VTHS * 2; i++) {
		vths[0] = vthread_create(&vm, thread_entry, (void*)i);
		vthread_join(vths[0], &retvals[0]);
		assert(retvals[0] == (void*)i);
	}
	assert(vm.nr_gpcs == NR_VTHS);

	return 0;
}
Beispiel #2
0
int main(int argc, char **argv)
{
	int iter = 0;
	int d = 0;
	if (argc > 1)
		lim = strtoul(argv[1], 0, 0);
	if (argc > 2) d++;

	if (vthread_attr_init(&vm, 0) < 0)
		err(1, "vthread_attr_init: %r: ");
	vthread_create(&vm, 0, vmcall, NULL);

	while (! done) {
		logout |= 1;
		if (d) printf("lock.");
		while ((! done) && (logout & 1))
			;
		if (d) printf("out\n");
		iter++;
	}
	printf("host iter %d guest iter %d\n", iter, count);
	return 0;
}