From: Len Brown <lenb@kernel.org>
To: Venki Pallipadi <venkatesh.pallipadi@intel.com>
Cc: linux-acpi@vger.kernel.org
Subject: Re: [PATCH] ACPI, CPU_IDLE: Add more information about C-states
Date: Thu, 14 Feb 2008 00:10:21 -0500 [thread overview]
Message-ID: <200802140010.22097.lenb@kernel.org> (raw)
In-Reply-To: <20080212015036.GC32468@linux-os.sc.intel.com>
applied
thanks,
-len
On Monday 11 February 2008 20:50, Venki Pallipadi wrote:
> From: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
>
> Add a new sysfs entry under cpuidle states. desc - can be used by driver to
> communicate to userspace any specific information about the state.
> This helps in identifying the exact hardware C-states behind the ACPI C-state
> definition.
>
> Idea is to export this through powertop, which will help to map the C-state
> reported by powertop to actual hardware C-state.
>
> Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
>
> Index: linux-2.6.25-rc/arch/x86/kernel/acpi/cstate.c
> ===================================================================
> --- linux-2.6.25-rc.orig/arch/x86/kernel/acpi/cstate.c
> +++ linux-2.6.25-rc/arch/x86/kernel/acpi/cstate.c
> @@ -126,6 +126,8 @@ int acpi_processor_ffh_cstate_probe(unsi
> printk(KERN_DEBUG "Monitor-Mwait will be used to enter C-%d "
> "state\n", cx->type);
> }
> + snprintf(cx->desc, ACPI_CX_DESC_LEN, "ACPI FFH INTEL MWAIT 0x%x",
> + cx->address);
>
> out:
> set_cpus_allowed(current, saved_mask);
> Index: linux-2.6.25-rc/drivers/acpi/processor_idle.c
> ===================================================================
> --- linux-2.6.25-rc.orig/drivers/acpi/processor_idle.c
> +++ linux-2.6.25-rc/drivers/acpi/processor_idle.c
> @@ -917,11 +917,16 @@ static int acpi_processor_get_power_info
> * Otherwise, ignore this info and continue.
> */
> cx.entry_method = ACPI_CSTATE_HALT;
> + snprintf(cx.desc, ACPI_CX_DESC_LEN, "ACPI HLT");
> } else {
> continue;
> }
> + } else {
> + snprintf(cx.desc, ACPI_CX_DESC_LEN, "ACPI IOPORT 0x%x",
> + cx.address);
> }
>
> +
> obj = &(element->package.elements[2]);
> if (obj->type != ACPI_TYPE_INTEGER)
> continue;
> @@ -1620,6 +1625,11 @@ static int acpi_processor_setup_cpuidle(
> return -EINVAL;
> }
>
> + for (i = 0; i < CPUIDLE_STATE_MAX; i++) {
> + dev->states[i].name[0] = '\0';
> + dev->states[i].desc[0] = '\0';
> + }
> +
> for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) {
> cx = &pr->power.states[i];
> state = &dev->states[count];
> @@ -1636,6 +1646,7 @@ static int acpi_processor_setup_cpuidle(
> cpuidle_set_statedata(state, cx);
>
> snprintf(state->name, CPUIDLE_NAME_LEN, "C%d", i);
> + strncpy(state->desc, cx->desc, CPUIDLE_DESC_LEN);
> state->exit_latency = cx->latency;
> state->target_residency = cx->latency * 6;
> state->power_usage = cx->power;
> Index: linux-2.6.25-rc/drivers/cpuidle/sysfs.c
> ===================================================================
> --- linux-2.6.25-rc.orig/drivers/cpuidle/sysfs.c
> +++ linux-2.6.25-rc/drivers/cpuidle/sysfs.c
> @@ -218,16 +218,23 @@ static ssize_t show_state_##_name(struct
> return sprintf(buf, "%u\n", state->_name);\
> }
>
> -static ssize_t show_state_name(struct cpuidle_state *state, char *buf)
> -{
> - return sprintf(buf, "%s\n", state->name);
> +#define define_show_state_str_function(_name) \
> +static ssize_t show_state_##_name(struct cpuidle_state *state, char *buf) \
> +{ \
> + if (state->_name[0] == '\0')\
> + return sprintf(buf, "<null>\n");\
> + return sprintf(buf, "%s\n", state->_name);\
> }
>
> define_show_state_function(exit_latency)
> define_show_state_function(power_usage)
> define_show_state_function(usage)
> define_show_state_function(time)
> +define_show_state_str_function(name)
> +define_show_state_str_function(desc)
> +
> define_one_state_ro(name, show_state_name);
> +define_one_state_ro(desc, show_state_desc);
> define_one_state_ro(latency, show_state_exit_latency);
> define_one_state_ro(power, show_state_power_usage);
> define_one_state_ro(usage, show_state_usage);
> @@ -235,6 +242,7 @@ define_one_state_ro(time, show_state_tim
>
> static struct attribute *cpuidle_state_default_attrs[] = {
> &attr_name.attr,
> + &attr_desc.attr,
> &attr_latency.attr,
> &attr_power.attr,
> &attr_usage.attr,
> Index: linux-2.6.25-rc/include/acpi/processor.h
> ===================================================================
> --- linux-2.6.25-rc.orig/include/acpi/processor.h
> +++ linux-2.6.25-rc/include/acpi/processor.h
> @@ -32,9 +32,11 @@
> #define DOMAIN_COORD_TYPE_SW_ANY 0xfd
> #define DOMAIN_COORD_TYPE_HW_ALL 0xfe
>
> -#define ACPI_CSTATE_SYSTEMIO (0)
> -#define ACPI_CSTATE_FFH (1)
> -#define ACPI_CSTATE_HALT (2)
> +#define ACPI_CSTATE_SYSTEMIO 0
> +#define ACPI_CSTATE_FFH 1
> +#define ACPI_CSTATE_HALT 2
> +
> +#define ACPI_CX_DESC_LEN 32
>
> /* Power Management */
>
> @@ -74,6 +76,7 @@ struct acpi_processor_cx {
> u64 time;
> struct acpi_processor_cx_policy promotion;
> struct acpi_processor_cx_policy demotion;
> + char desc[ACPI_CX_DESC_LEN];
> };
>
> struct acpi_processor_power {
> Index: linux-2.6.25-rc/include/linux/cpuidle.h
> ===================================================================
> --- linux-2.6.25-rc.orig/include/linux/cpuidle.h
> +++ linux-2.6.25-rc/include/linux/cpuidle.h
> @@ -19,6 +19,7 @@
>
> #define CPUIDLE_STATE_MAX 8
> #define CPUIDLE_NAME_LEN 16
> +#define CPUIDLE_DESC_LEN 32
>
> struct cpuidle_device;
>
> @@ -29,6 +30,7 @@ struct cpuidle_device;
>
> struct cpuidle_state {
> char name[CPUIDLE_NAME_LEN];
> + char desc[CPUIDLE_DESC_LEN];
> void *driver_data;
>
> unsigned int flags;
> Index: linux-2.6.25-rc/drivers/cpuidle/cpuidle.c
> ===================================================================
> --- linux-2.6.25-rc.orig/drivers/cpuidle/cpuidle.c
> +++ linux-2.6.25-rc/drivers/cpuidle/cpuidle.c
> @@ -219,7 +219,8 @@ static void poll_idle_init(struct cpuidl
>
> cpuidle_set_statedata(state, NULL);
>
> - snprintf(state->name, CPUIDLE_NAME_LEN, "C0 (poll idle)");
> + snprintf(state->name, CPUIDLE_NAME_LEN, "C0");
> + snprintf(state->desc, CPUIDLE_DESC_LEN, "CPUIDLE CORE POLL IDLE");
> state->exit_latency = 0;
> state->target_residency = 0;
> state->power_usage = -1;
> -
> To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
next prev parent reply other threads:[~2008-02-14 5:17 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-12 1:50 [PATCH] ACPI, CPU_IDLE: Add more information about C-states Venki Pallipadi
2008-02-14 5:10 ` Len Brown [this message]
2008-02-14 8:09 ` Len Brown
2008-02-14 16:52 ` Pallipadi, Venkatesh
2008-02-14 20:41 ` Len Brown
2008-02-15 0:42 ` Pallipadi, Venkatesh
2008-02-15 4:52 ` Len Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200802140010.22097.lenb@kernel.org \
--to=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=venkatesh.pallipadi@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.