+double
+get_cycles_per_usec ()
+{
+ FILE *f = fopen ("/proc/cpuinfo", "r");
+ double mhz;
+ char line[64];
+
+ if (f != NULL) {
+ while (fgets (line, sizeof (line), f) != NULL)
+ if (sscanf (line, "cpu MHz : %lf", &mhz) == 1) {
+ fclose (f);
+ return (mhz);
+ }
+ fclose (f);
+ }
+
+ fprintf (stderr, "Can't read/parse /proc/cpuinfo\n");
+ return (1000.0);
+}
+
+int jt_ptl_memhog(int argc, char **argv)
+{
+ static int gfp = 0; /* sticky! */
+
+ struct libcfs_ioctl_data data;
+ int rc;
+ int count;
+ char *end;
+
+ if (argc < 2) {
+ fprintf(stderr, "usage: %s <npages> [<GFP flags>]\n", argv[0]);
+ return 0;
+ }
+
+ count = strtol(argv[1], &end, 0);
+ if (count < 0 || *end != 0) {
+ fprintf(stderr, "Can't parse page count '%s'\n", argv[1]);
+ return -1;
+ }
+
+ if (argc >= 3) {
+ rc = strtol(argv[2], &end, 0);
+ if (*end != 0) {
+ fprintf(stderr, "Can't parse gfp flags '%s'\n", argv[2]);
+ return -1;
+ }
+ gfp = rc;
+ }
+
+ LIBCFS_IOC_INIT(data);
+ data.ioc_count = count;
+ data.ioc_flags = gfp;
+ rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_MEMHOG, &data);
+
+ if (rc != 0) {
+ fprintf(stderr, "memhog %d failed: %s\n", count, strerror(errno));
+ return -1;
+ }
+
+ printf("memhog %d OK\n", count);
+ return 0;
+}
+
+int jt_ptl_testprotocompat(int argc, char **argv)
+{
+ struct libcfs_ioctl_data data;
+ int rc;
+ int flags;
+ char *end;
+
+ if (argc < 2) {
+ fprintf(stderr, "usage: %s <number>\n", argv[0]);
+ return 0;
+ }
+
+ flags = strtol(argv[1], &end, 0);
+ if (flags < 0 || *end != 0) {
+ fprintf(stderr, "Can't parse flags '%s'\n", argv[1]);
+ return -1;
+ }
+
+ LIBCFS_IOC_INIT(data);
+ data.ioc_flags = flags;
+ rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_TESTPROTOCOMPAT, &data);
+
+ if (rc != 0) {
+ fprintf(stderr, "test proto compat %x failed: %s\n",
+ flags, strerror(errno));
+ return -1;
+ }
+
+ printf("test proto compat %x OK\n", flags);
+ return 0;
+}
+
+