#include #include #include <../arch/x86/include/asm/fpu/api.h> #include "../common/nanoBench.h" MODULE_LICENSE("GPL"); MODULE_AUTHOR("Andreas Abel"); static ssize_t init_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { memcpy(buf, code_init, code_init_length); return code_init_length; } static ssize_t init_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count) { memcpy(code_init, buf, count); code_init_length = count; return count; } static struct kobj_attribute code_init_attribute =__ATTR(init, 0660, init_show, init_store); static ssize_t code_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { memcpy(buf, code, code_length); return code_length; } static ssize_t code_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count) { memcpy(code, buf, count); code_length = count; return count; } static struct kobj_attribute code_attribute =__ATTR(code, 0660, code_show, code_store); static ssize_t config_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { ssize_t count = 0; for (int i=0; iparent); if(!nb_kobject) { pr_debug("failed to create and add nb\n"); return -1; } int error = sysfs_create_file(nb_kobject, &run_attribute.attr); error |= sysfs_create_file(nb_kobject, &clear_attribute.attr); error |= sysfs_create_file(nb_kobject, &reset_attribute.attr); error |= sysfs_create_file(nb_kobject, &code_init_attribute.attr); error |= sysfs_create_file(nb_kobject, &code_attribute.attr); error |= sysfs_create_file(nb_kobject, &config_attribute.attr); error |= sysfs_create_file(nb_kobject, &loop_count_attribute.attr); error |= sysfs_create_file(nb_kobject, &unroll_count_attribute.attr); error |= sysfs_create_file(nb_kobject, &n_measurements_attribute.attr); error |= sysfs_create_file(nb_kobject, &warm_up_attribute.attr); error |= sysfs_create_file(nb_kobject, &initial_warm_up_attribute.attr); error |= sysfs_create_file(nb_kobject, &agg_attribute.attr); error |= sysfs_create_file(nb_kobject, &basic_mode_attribute.attr); error |= sysfs_create_file(nb_kobject, &no_mem_attribute.attr); error |= sysfs_create_file(nb_kobject, &verbose_attribute.attr); if (error) { pr_debug("failed to create file in /sys/nb/\n"); return error; } return 0; } static void __exit nb_exit (void) { if (code) kfree(code); if (code_init) kfree(code_init); if (pfc_config_file_content) kfree(pfc_config_file_content); if (runtime_code) vfree(runtime_code); if (runtime_mem) kfree(runtime_mem); for (int i=0; i