[PATCH] Donate dedicated CPU cycles
flat view
STALE7086d
From: Jake Moilanen <hidden>
Date: 2007-05-31 19:15:13
A Power6 can give up CPU cycles on a dedicated CPU (as opposed to a shared CPU) to other shared processors if the administrator asks for it (via the HMC). This patch enables that to work properly on P6. This just involves setting a bit in the CAS structure as well as the VPA. To donate cycles, a CPU has to have all SMT threads idle and w/ donate bit set in the VPA. Then call H_CEDE. Signed-off-by: Jake Moilanen <redacted> -- arch/powerpc/kernel/prom_init.c | 4 +++- arch/powerpc/platforms/pseries/setup.c | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) Index: powerpc/arch/powerpc/kernel/prom_init.c ===================================================================
--- powerpc.orig/arch/powerpc/kernel/prom_init.c
+++ powerpc/arch/powerpc/kernel/prom_init.c@@ -635,6 +635,7 @@ static void __init early_cmdline_parse(v /* ibm,dynamic-reconfiguration-memory property supported */ #define OV5_DRCONF_MEMORY 0x20 #define OV5_LARGE_PAGES 0x10 /* large pages supported */ +#define OV5_DONATE_DEDICATE_CPU 0x02 /* donate dedicated CPU support */ /* PCIe/MSI support. Without MSI full PCIe is not supported */ #ifdef CONFIG_PCI_MSI #define OV5_MSI 0x01 /* PCIe/MSI support */
@@ -685,7 +686,8 @@ static unsigned char ibm_architecture_ve /* option vector 5: PAPR/OF options */ 3 - 2, /* length */ 0, /* don't ignore, don't halt */ - OV5_LPAR | OV5_SPLPAR | OV5_LARGE_PAGES | OV5_DRCONF_MEMORY | OV5_MSI, + OV5_LPAR | OV5_SPLPAR | OV5_LARGE_PAGES | OV5_DRCONF_MEMORY | + OV5_DONATE_DEDICATE_CPU | OV5_MSI, }; /* Old method - ELF header with PT_NOTE sections */
Index: powerpc/arch/powerpc/platforms/pseries/setup.c ===================================================================
--- powerpc.orig/arch/powerpc/platforms/pseries/setup.c
+++ powerpc/arch/powerpc/platforms/pseries/setup.c@@ -399,6 +399,7 @@ static void pseries_dedicated_idle_sleep * a good time to find other work to dispatch. */ get_lppaca()->idle = 1; + get_lppaca()->cpuctls_task_attrs = 1; /* * We come in with interrupts disabled, and need_resched()
@@ -431,6 +432,7 @@ static void pseries_dedicated_idle_sleep out: HMT_medium(); + get_lppaca()->cpuctls_task_attrs = 0; get_lppaca()->idle = 0; }