#include #include #include #include static struct proc_dir_entry* pufdata_file; static int pufdata_show(struct seq_file *m, void *v) { int i, cnt; for_each_cpu(i, cpu_present_mask) { seq_printf(m, "CPU %i:\n", i); for (cnt = 0; cnt < 64; cnt += 4) seq_printf(m, "%08x %08x %08x %08x\n", per_cpu(puf_data, i).xmm_space[cnt + 3], per_cpu(puf_data, i).xmm_space[cnt + 2], per_cpu(puf_data, i).xmm_space[cnt + 1], per_cpu(puf_data, i).xmm_space[cnt + 0]); seq_printf(m, "\n"); } return 0; } static int pufdata_open(struct inode *inode, struct file *file) { return single_open(file, pufdata_show, NULL); } static const struct file_operations pufdata_fops = { .owner = THIS_MODULE, .open = pufdata_open, .read = seq_read, .llseek = seq_lseek, .release = single_release, }; static int __init pufdata_init(void) { pufdata_file = proc_create("pufdata", 0, NULL, &pufdata_fops); if (!pufdata_file) { return -ENOMEM; } return 0; } static void __exit pufdata_exit(void) { remove_proc_entry("pufdata", NULL); } module_init(pufdata_init); module_exit(pufdata_exit);