Patchwork [v2] powerpc: export data from new hcall H_EM_GET_PARMS

login
register
mail settings
Submitter Vaidyanathan Srinivasan
Date March 10, 2010, 12:19 p.m.
Message ID <20100310121925.GB15046@dirshya.in.ibm.com>
Download mbox | patch
Permalink /patch/47249/
State Accepted
Commit 6fe9d1facb5346a615f9b571df3b91593afb29c3
Delegated to: Benjamin Herrenschmidt
Headers show

Comments

Vaidyanathan Srinivasan - March 10, 2010, 12:19 p.m.
Hi Ben,

I have cleaned up the code from the previous post:
http://lists.ozlabs.org/pipermail/linuxppc-dev/2010-February/080630.html

Changes from v1:
* Removed redundant return statements and rearranged code

Description:

A new hcall H_EM_GET_PARMS as been added to obtain power mode data
from the platform.  This data can be used by user space administrative
tools for better power management.

The following patch add data from this new hcall into the lparcfg
driver and exports to user space along with other existing lpar data
in /proc/powerpc/lparcfg

Please review and include in powerpc -next tree.

Thanks,
Vaidy

---
	powerpc: export data from new hcall H_EM_GET_PARMS

	Add support for H_EM_GET_PARMS hcall that will return data
	related to power modes from the platform.  Export the data
	directly to user space for administrative tools to interpret
	and use.

	cat /proc/powerpc/lparcfg will export power mode data

Signed-off-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
---
 arch/powerpc/include/asm/hvcall.h |    1 +
 arch/powerpc/kernel/lparcfg.c     |   12 +++++++++++-
 2 files changed, 12 insertions(+), 1 deletions(-)
Vaidyanathan Srinivasan - March 22, 2010, 7:52 p.m.
* Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com> [2010-03-10 17:49:25]:

> Hi Ben,
> 
> I have cleaned up the code from the previous post:
> http://lists.ozlabs.org/pipermail/linuxppc-dev/2010-February/080630.html
> 
> Changes from v1:
> * Removed redundant return statements and rearranged code
> 
> Description:
> 
> A new hcall H_EM_GET_PARMS as been added to obtain power mode data
> from the platform.  This data can be used by user space administrative
> tools for better power management.
> 
> The following patch add data from this new hcall into the lparcfg
> driver and exports to user space along with other existing lpar data
> in /proc/powerpc/lparcfg
> 
> Please review and include in powerpc -next tree.

Hi Ben,

Looks like you have not opened the -next tree after the merge window
yet.  The current git tree status is same as -merge.  Please review
and include in powerpc next tree.  

Thanks,
Vaidy

> ---
> 	powerpc: export data from new hcall H_EM_GET_PARMS
> 
> 	Add support for H_EM_GET_PARMS hcall that will return data
> 	related to power modes from the platform.  Export the data
> 	directly to user space for administrative tools to interpret
> 	and use.
> 
> 	cat /proc/powerpc/lparcfg will export power mode data
> 
> Signed-off-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
> ---
>  arch/powerpc/include/asm/hvcall.h |    1 +
>  arch/powerpc/kernel/lparcfg.c     |   12 +++++++++++-
>  2 files changed, 12 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/powerpc/include/asm/hvcall.h b/arch/powerpc/include/asm/hvcall.h
> index f027581..ebe7493 100644
> --- a/arch/powerpc/include/asm/hvcall.h
> +++ b/arch/powerpc/include/asm/hvcall.h
> @@ -228,6 +228,7 @@
>  #define H_JOIN			0x298
>  #define H_VASI_STATE            0x2A4
>  #define H_ENABLE_CRQ		0x2B0
> +#define H_GET_EM_PARMS		0x2B8
>  #define H_SET_MPP		0x2D0
>  #define H_GET_MPP		0x2D4
>  #define MAX_HCALL_OPCODE	H_GET_MPP
> diff --git a/arch/powerpc/kernel/lparcfg.c b/arch/powerpc/kernel/lparcfg.c
> index d09d1c6..ff698fb 100644
> --- a/arch/powerpc/kernel/lparcfg.c
> +++ b/arch/powerpc/kernel/lparcfg.c
> @@ -37,7 +37,7 @@
>  #include <asm/vio.h>
>  #include <asm/mmu.h>
> 
> -#define MODULE_VERS "1.8"
> +#define MODULE_VERS "1.9"
>  #define MODULE_NAME "lparcfg"
> 
>  /* #define LPARCFG_DEBUG */
> @@ -486,6 +486,14 @@ static void splpar_dispatch_data(struct seq_file *m)
>  	seq_printf(m, "dispatch_dispersions=%lu\n", dispatch_dispersions);
>  }
> 
> +static void parse_em_data(struct seq_file *m)
> +{
> +	unsigned long retbuf[PLPAR_HCALL_BUFSIZE];
> +
> +	if (plpar_hcall(H_GET_EM_PARMS, retbuf) == H_SUCCESS)
> +		seq_printf(m, "power_mode_data=%016lx\n", retbuf[0]);
> +}
> +
>  static int pseries_lparcfg_data(struct seq_file *m, void *v)
>  {
>  	int partition_potential_processors;
> @@ -540,6 +548,8 @@ static int pseries_lparcfg_data(struct seq_file *m, void *v)
> 
>  	seq_printf(m, "slb_size=%d\n", mmu_slb_size);
> 
> +	parse_em_data(m);
> +
>  	return 0;
>  }
> 
> 
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev

Patch

diff --git a/arch/powerpc/include/asm/hvcall.h b/arch/powerpc/include/asm/hvcall.h
index f027581..ebe7493 100644
--- a/arch/powerpc/include/asm/hvcall.h
+++ b/arch/powerpc/include/asm/hvcall.h
@@ -228,6 +228,7 @@ 
 #define H_JOIN			0x298
 #define H_VASI_STATE            0x2A4
 #define H_ENABLE_CRQ		0x2B0
+#define H_GET_EM_PARMS		0x2B8
 #define H_SET_MPP		0x2D0
 #define H_GET_MPP		0x2D4
 #define MAX_HCALL_OPCODE	H_GET_MPP
diff --git a/arch/powerpc/kernel/lparcfg.c b/arch/powerpc/kernel/lparcfg.c
index d09d1c6..ff698fb 100644
--- a/arch/powerpc/kernel/lparcfg.c
+++ b/arch/powerpc/kernel/lparcfg.c
@@ -37,7 +37,7 @@ 
 #include <asm/vio.h>
 #include <asm/mmu.h>
 
-#define MODULE_VERS "1.8"
+#define MODULE_VERS "1.9"
 #define MODULE_NAME "lparcfg"
 
 /* #define LPARCFG_DEBUG */
@@ -486,6 +486,14 @@  static void splpar_dispatch_data(struct seq_file *m)
 	seq_printf(m, "dispatch_dispersions=%lu\n", dispatch_dispersions);
 }
 
+static void parse_em_data(struct seq_file *m)
+{
+	unsigned long retbuf[PLPAR_HCALL_BUFSIZE];
+
+	if (plpar_hcall(H_GET_EM_PARMS, retbuf) == H_SUCCESS)
+		seq_printf(m, "power_mode_data=%016lx\n", retbuf[0]);
+}
+
 static int pseries_lparcfg_data(struct seq_file *m, void *v)
 {
 	int partition_potential_processors;
@@ -540,6 +548,8 @@  static int pseries_lparcfg_data(struct seq_file *m, void *v)
 
 	seq_printf(m, "slb_size=%d\n", mmu_slb_size);
 
+	parse_em_data(m);
+
 	return 0;
 }