brintos

brintos / linux-shallow public Read only

0
0
Text · 1.7 KiB · 4a6d05c Raw
88 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * Dhrystone benchmark test module4 *5 * Copyright (C) 2022 Glider bv6 */7 8#include "dhry.h"9 10#include <linux/kernel.h>11#include <linux/module.h>12#include <linux/moduleparam.h>13#include <linux/smp.h>14 15#define DHRY_VAX	175716 17static int dhry_run_set(const char *val, const struct kernel_param *kp);18static const struct kernel_param_ops run_ops = {19	.flags = KERNEL_PARAM_OPS_FL_NOARG,20	.set = dhry_run_set,21};22static bool dhry_run;23module_param_cb(run, &run_ops, &dhry_run, 0200);24MODULE_PARM_DESC(run, "Run the test (default: false)");25 26static int iterations = -1;27module_param(iterations, int, 0644);28MODULE_PARM_DESC(iterations,29		"Number of iterations through the benchmark (default: auto)");30 31static void dhry_benchmark(void)32{33	unsigned int cpu = get_cpu();34	int i, n;35 36	if (iterations > 0) {37		n = dhry(iterations);38		goto report;39	}40 41	for (i = DHRY_VAX; i > 0; i <<= 1) {42		n = dhry(i);43		if (n != -EAGAIN)44			break;45	}46 47report:48	put_cpu();49	if (n >= 0)50		pr_info("CPU%u: Dhrystones per Second: %d (%d DMIPS)\n", cpu,51			n, n / DHRY_VAX);52	else if (n == -EAGAIN)53		pr_err("Please increase the number of iterations\n");54	else55		pr_err("Dhrystone benchmark failed error %pe\n", ERR_PTR(n));56}57 58static int dhry_run_set(const char *val, const struct kernel_param *kp)59{60	int ret;61 62	if (val) {63		ret = param_set_bool(val, kp);64		if (ret)65			return ret;66	} else {67		dhry_run = true;68	}69 70	if (dhry_run && system_state == SYSTEM_RUNNING)71		dhry_benchmark();72 73	return 0;74}75 76static int __init dhry_init(void)77{78	if (dhry_run)79		dhry_benchmark();80 81	return 0;82}83module_init(dhry_init);84 85MODULE_AUTHOR("Geert Uytterhoeven <geert+renesas@glider.be>");86MODULE_DESCRIPTION("Dhrystone benchmark test module");87MODULE_LICENSE("GPL");88