powerpc: export data from new hcall H_EM_GET_PARMS
PATCH v2 1/1 powerpc: export data from new hcall H_EM_GET_PARMS
Hi Ben,
Previous post: http://patchwork.ozlabs.org/patch/47249/
I have cleaned up the code from the v1:
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
--- arch/powerpc/include/asm/hvcall.h | 1 + arch/powerpc/kernel/lparcfg.c | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletions(-)
arch/powerpc/include/asm/hvcall.h +1 -0
@@ -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
arch/powerpc/kernel/lparcfg.c +11 -1
@@ -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 ; }