+static void show_results(struct pktgen_info* info, int nr_frags)
+{
+ __u64 total, bps, mbps, pps;
+ unsigned long idle;
+ int size = info->pkt_size + 4; /* incl 32bit ethernet CRC */
+ char *p = info->result;
+
+ total = (info->stopped_at.tv_sec - info->started_at.tv_sec) * 1000000ull
+ + info->stopped_at.tv_usec - info->started_at.tv_usec;
+
+ BUG_ON(cpu_speed == 0);
+
+ idle = info->idle_acc;
+ do_div(idle, cpu_speed);
+
+ p += sprintf(p, "OK: %llu(c%llu+d%lu) usec, %llu (%dbyte,%dfrags)\n",
+ (unsigned long long) total,
+ (unsigned long long) (total - idle), idle,
+ (unsigned long long) info->sofar,
+ size, nr_frags);
+
+ pps = info->sofar * USEC_PER_SEC;
+
+ while ((total >> 32) != 0) {
+ pps >>= 1;
+ total >>= 1;
+ }
+
+ do_div(pps, total);
+
+ bps = pps * 8 * size;
+
+ mbps = bps;
+ do_div(mbps, 1000000);
+ p += sprintf(p, " %llupps %lluMb/sec (%llubps) errors: %llu",
+ (unsigned long long) pps,
+ (unsigned long long) mbps,
+ (unsigned long long) bps,
+ (unsigned long long) info->errors);
+}