Beispiel #1
0
static int my_nanosleep(struct timespec *ts){
	uint64_t freq = 600000000ULL;

	uint64_t tdiff = (ts->tv_sec * freq) + ((ts->tv_nsec * freq) / 1000000000ULL);
	uint64_t now = __k1_read_dsu_timestamp();
	while(now + tdiff > __k1_read_dsu_timestamp())
		__k1_cpu_backoff(1000);
	return 0;
}
Beispiel #2
0
static inline odp_time_t get_time(void)
{
	odp_time_t time;
	time.cycles = __k1_read_dsu_timestamp();
#ifdef DSU_DIVISOR
	time.cycles *= __k1_read_dsu_timestamp_divisor();
#endif
	return time;
}
Beispiel #3
0
static int send_recv(odp_packet_t packet, int send_nb, int expt_nb)
{
	static int test_id = 0;
	printf("send_recv %d\n", test_id++);
	odp_pktio_t pktio;
	odp_queue_t outq_def;
	odp_packet_t pkt_tbl[MAX_PKT_BURST];

	pktio = odp_pktio_lookup(pktio_valid_name);

	if (pktio == ODP_PKTIO_INVALID) {
		printf("Error: lookup of pktio %s failed\n",
			    pktio_valid_name);
		return 1;
	}

	outq_def = odp_pktio_outq_getdef(pktio);
	if (outq_def == ODP_QUEUE_INVALID) {
		printf("Error: def output-Q query\n");
		return 1;
	}
	int i;
	for ( i = 0; i < send_nb; ++i ) {
		odp_queue_enq(outq_def, (odp_event_t)packet);
	}
	int ret = 0;

	int start = __k1_read_dsu_timestamp();
	while ( ret >= 0 && ret < expt_nb && ( __k1_read_dsu_timestamp() - start ) < 10 * __bsp_frequency ) {
		int n_pkt = odp_pktio_recv(pktio, pkt_tbl, MAX_PKT_BURST);
		ret += n_pkt;
		if (n_pkt > 0)
			odp_packet_free_multi(pkt_tbl, n_pkt);
	}
	test_assert_ret(ret == expt_nb);
	odp_packet_free(packet);
	printf("send_recv %d OK\n", test_id);

	return 0;
}
Beispiel #4
0
static int my_nanosleep(struct timespec *ts){
	uint64_t freq = __bsp_frequency;
	uint64_t tdiff = (ts->tv_sec * freq) + ((ts->tv_nsec * freq) / 1000000000ULL);

#ifdef MAGIC_SCALL
 	uint64_t divisor = __k1_read_dsu_timestamp_divisor();
	uint64_t dsu_ts = __k1_read_dsu_timestamp();
	uint64_t cc = dsu_ts * divisor;
	uint64_t target = cc + tdiff;;
	return __k1_syscall2(MAGIC_SCALL_SLEEP, target & 0xffffffffULL, target >> 32);
#else
	while(tdiff > INT32_MAX){
		__k1_cpu_backoff(INT32_MAX);
		tdiff -= INT32_MAX;
	}
	__k1_cpu_backoff(tdiff);
	return 0;
#endif
}