static void print_acpi_power(uint32_t cpu, struct acpi_processor_power *power) { uint32_t i, idle_usage = 0; uint64_t res, idle_res = 0; printk("==cpu%d==\n", cpu); printk("active state:\t\tC%d\n", power->last_state ? power->last_state->idx : -1); printk("max_cstate:\t\tC%d\n", max_cstate); printk("states:\n"); for ( i = 1; i < power->count; i++ ) { res = tick_to_ns(power->states[i].time); idle_usage += power->states[i].usage; idle_res += res; printk((power->last_state && power->last_state->idx == i) ? " *" : " "); printk("C%d:\t", i); printk("type[C%d] ", power->states[i].type); printk("latency[%03d] ", power->states[i].latency); printk("usage[%08d] ", power->states[i].usage); printk("method[%5s] ", acpi_cstate_method_name[power->states[i].entry_method]); printk("duration[%"PRId64"]\n", res); } printk(" C0:\tusage[%08d] duration[%"PRId64"]\n", idle_usage, NOW() - idle_res); print_hw_residencies(cpu); }
static void print_acpi_power(uint32_t cpu, struct acpi_processor_power *power) { uint64_t idle_res = 0, idle_usage = 0; uint64_t last_state_update_tick, current_tick, current_stime; uint64_t usage[ACPI_PROCESSOR_MAX_POWER] = { 0 }; uint64_t res_tick[ACPI_PROCESSOR_MAX_POWER] = { 0 }; unsigned int i; signed int last_state_idx; printk("==cpu%d==\n", cpu); last_state_idx = power->last_state ? power->last_state->idx : -1; printk("active state:\t\tC%d\n", last_state_idx); printk("max_cstate:\t\tC%d\n", max_cstate); printk("states:\n"); spin_lock_irq(&power->stat_lock); current_tick = cpuidle_get_tick(); current_stime = NOW(); for ( i = 1; i < power->count; i++ ) { res_tick[i] = power->states[i].time; usage[i] = power->states[i].usage; } last_state_update_tick = power->last_state_update_tick; spin_unlock_irq(&power->stat_lock); if ( last_state_idx >= 0 ) { res_tick[last_state_idx] += ticks_elapsed(last_state_update_tick, current_tick); usage[last_state_idx]++; } for ( i = 1; i < power->count; i++ ) { idle_usage += usage[i]; idle_res += tick_to_ns(res_tick[i]); printk((last_state_idx == i) ? " *" : " "); printk("C%d:\t", i); printk("type[C%d] ", power->states[i].type); printk("latency[%03d] ", power->states[i].latency); printk("usage[%08"PRIu64"] ", usage[i]); printk("method[%5s] ", acpi_cstate_method_name[power->states[i].entry_method]); printk("duration[%"PRIu64"]\n", tick_to_ns(res_tick[i])); } printk((last_state_idx == 0) ? " *" : " "); printk("C0:\tusage[%08"PRIu64"] duration[%"PRIu64"]\n", usage[0] + idle_usage, current_stime - idle_res); print_hw_residencies(cpu); }