static int read_proc_dpm_stats(char *page, char **start, off_t offset, int count, int *eof, void *data) { int i, len = 0; struct dpm_stats stats[DPM_STATES]; if (!dpm_enabled) { len += sprintf(page + len, "DPM IS DISABLED\n"); *eof = 1; return len; } dpm_get_os_stats(stats); for (i = 0; i < DPM_STATES; i++) { len += sprintf(page + len, "%20s", dpm_state_names[i]); len += sprintf_u64(page + len, 1, " ", (u64)stats[i].total_time); len += sprintf_u64(page + len, 1, " ", (u64)stats[i].count); len += sprintf(page + len, " %s\n", dpm_active_policy->classes[i]->opt->name); } *eof = 1; return len; }
static int u_dpm_get_os_stats(struct dpm_param *params) { int ret; struct dpm_stats stats[DPM_STATES], *p; if ((ret = dpm_get_os_stats(stats))) return ret; if (copy_from_user(&p, ¶ms->stats, sizeof (struct dpm_stats *)) || copy_to_user(p, &stats, DPM_STATES * sizeof (struct dpm_stats))) { ret = -EFAULT; } return ret; }