Re: [PATCH 04/16 v3] powerpc: Split retrieval of processor entitlement data into a helper routine

2008-07-22 Thread Nathan Fontenot

Paul Mackerras wrote:

Robert Jennings writes:


Split the retrieval of processor entitlement data returned in the H_GET_PPP
hcall into its own helper routine.


This seems to change the value reported for pool_capacity radically:


/* report pool_capacity in percentage */
-   seq_printf(m, pool_capacity=%ld\n,
-  ((h_resource  2 * 8)  0x) * 100);
+   seq_printf(m, pool_capacity=%d\n, ppp_data.group_num * 100);


On a Power6 partition here with your patch series applied, I see

pool_capacity=3277200

in /proc/ppc64/lparcfg.  Without your patches, I get

pool_capacity=400
pool_idle_time=0
pool_num_procs=0

This looks like an incompatible user-visible change to me, and we
haven't even changed the lparcfg version number at the beginning of
the /proc/ppc64/lparcfg output.  Why is the pool_capacity so
different, and why do the pool_idle_time and pool_num_procs lines
disappear?



ok, three problems, three new patches.

The reporting of pool_capacity was a bug in using the wrong information
reported by h_get_ppp in the patch.  This is in a new patch 4/16.

The failure to report the pool_idle_time and pool_num_procs was due to
an update to h_pic where we started checking the return code of the
h_call for H_PIC.  The values were not reported if the h_call fails,
which on my partition it fails with -10 (H_Authority).  I have reverted
this back to the previous behavior and report the values of pool_idle_time
and pool_num_procs regardless of the h_call return code.  This is
in a new patch 2/16.

Yes, the lparcfg version number should have been updated.  I missed that.
Fixed in a new patch 3/16.

-Nathan 


Regards,
Paul.

___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


Re: [PATCH 04/16 v3] powerpc: Split retrieval of processor entitlement data into a helper routine

2008-07-22 Thread Nathan Fontenot

Updated patch to correct the reporting of pool_capcity.

Split the retrieval of processor entitlement data returned in the H_GET_PPP
hcall into its own helper routine.

Signed-off-by: Nathan Fontenot [EMAIL PROTECTED]
Signed-off-by: Robert Jennings [EMAIL PROTECTED]

---
arch/powerpc/kernel/lparcfg.c |   80 --
1 file changed, 45 insertions(+), 35 deletions(-)

Index: linux-2.6.git/arch/powerpc/kernel/lparcfg.c
===
--- linux-2.6.git.orig/arch/powerpc/kernel/lparcfg.c2008-07-22 
13:16:58.0 -0500
+++ linux-2.6.git/arch/powerpc/kernel/lparcfg.c 2008-07-22 13:17:25.0 
-0500
@@ -158,6 +158,18 @@
}
EXPORT_SYMBOL(h_get_mpp);

+struct hvcall_ppp_data {
+   u64 entitlement;
+   u64 unallocated_entitlement;
+   u16 group_num;
+   u16 pool_num;
+   u8  capped;
+   u8  weight;
+   u8  unallocated_weight;
+   u16 active_procs_in_pool;
+   u16 active_system_procs;
+};
+
/*
 * H_GET_PPP hcall returns info in 4 parms.
 *  entitled_capacity,unallocated_capacity,
@@ -178,20 +190,24 @@
 *   - Active processors in Physical Processor Pool.
 *    - Processors active on platform.
 */
-static unsigned int h_get_ppp(unsigned long *entitled,
- unsigned long *unallocated,
- unsigned long *aggregation,
- unsigned long *resource)
+static unsigned int h_get_ppp(struct hvcall_ppp_data *ppp_data)
{
unsigned long rc;
unsigned long retbuf[PLPAR_HCALL_BUFSIZE];

rc = plpar_hcall(H_GET_PPP, retbuf);

-   *entitled = retbuf[0];
-   *unallocated = retbuf[1];
-   *aggregation = retbuf[2];
-   *resource = retbuf[3];
+   ppp_data-entitlement = retbuf[0];
+   ppp_data-unallocated_entitlement = retbuf[1];
+
+   ppp_data-group_num = (retbuf[2]  2 * 8)  0x;
+   ppp_data-pool_num = retbuf[2]  0x;
+
+   ppp_data-capped = (retbuf[3]  6 * 8)  0x01;
+   ppp_data-weight = (retbuf[3]  5 * 8)  0xff;
+   ppp_data-unallocated_weight = (retbuf[3]  4 * 8)  0xff;
+   ppp_data-active_procs_in_pool = (retbuf[3]  2 * 8)  0x;
+   ppp_data-active_system_procs = retbuf[3]  0x;

return rc;
}
@@ -216,41 +232,40 @@
 */
static void parse_ppp_data(struct seq_file *m)
{
-   unsigned long h_entitled, h_unallocated;
-   unsigned long h_aggregation, h_resource;
+   struct hvcall_ppp_data ppp_data;
int rc;

-   rc = h_get_ppp(h_entitled, h_unallocated, h_aggregation,
-  h_resource);
+   rc = h_get_ppp(ppp_data);
if (rc)
return;

-   seq_printf(m, partition_entitled_capacity=%ld\n, h_entitled);
-   seq_printf(m, group=%ld\n, (h_aggregation  2 * 8)  0x);
-   seq_printf(m, system_active_processors=%ld\n,
-  (h_resource  0 * 8)  0x);
+   seq_printf(m, partition_entitled_capacity=%ld\n,
+  ppp_data.entitlement);
+   seq_printf(m, group=%d\n, ppp_data.group_num);
+   seq_printf(m, system_active_processors=%d\n,
+  ppp_data.active_system_procs);

/* pool related entries are apropriate for shared configs */
if (lppaca[0].shared_proc) {
unsigned long pool_idle_time, pool_procs;

-   seq_printf(m, pool=%ld\n, (h_aggregation  0 * 8)  0x);
+   seq_printf(m, pool=%d\n, ppp_data.pool_num);

/* report pool_capacity in percentage */
-   seq_printf(m, pool_capacity=%ld\n,
-  ((h_resource  2 * 8)  0x) * 100);
+   seq_printf(m, pool_capacity=%d\n,
+  ppp_data.active_procs_in_pool * 100);

h_pic(pool_idle_time, pool_procs);
seq_printf(m, pool_idle_time=%ld\n, pool_idle_time);
seq_printf(m, pool_num_procs=%ld\n, pool_procs);
}

-   seq_printf(m, unallocated_capacity_weight=%ld\n,
-  (h_resource  4 * 8)  0xFF);
-
-   seq_printf(m, capacity_weight=%ld\n, (h_resource  5 * 8)  0xFF);
-   seq_printf(m, capped=%ld\n, (h_resource  6 * 8)  0x01);
-   seq_printf(m, unallocated_capacity=%ld\n, h_unallocated);
+   seq_printf(m, unallocated_capacity_weight=%d\n,
+  ppp_data.unallocated_weight);
+   seq_printf(m, capacity_weight=%d\n, ppp_data.weight);
+   seq_printf(m, capped=%d\n, ppp_data.capped);
+   seq_printf(m, unallocated_capacity=%ld\n,
+  ppp_data.unallocated_entitlement);
}

/**
@@ -449,31 +464,27 @@

static ssize_t update_ppp(u64 *entitlement, u8 *weight)
{
-   unsigned long current_entitled;
-   unsigned long dummy;
-   unsigned long resource;
-   u8 current_weight, new_weight;
+   struct hvcall_ppp_data ppp_data;
+   u8 new_weight;
   

Re: [PATCH 04/16 v3] powerpc: Split retrieval of processor entitlement data into a helper routine

2008-07-21 Thread Paul Mackerras
Robert Jennings writes:

 Split the retrieval of processor entitlement data returned in the H_GET_PPP
 hcall into its own helper routine.

This seems to change the value reported for pool_capacity radically:

   /* report pool_capacity in percentage */
 - seq_printf(m, pool_capacity=%ld\n,
 -((h_resource  2 * 8)  0x) * 100);
 + seq_printf(m, pool_capacity=%d\n, ppp_data.group_num * 100);

On a Power6 partition here with your patch series applied, I see

pool_capacity=3277200

in /proc/ppc64/lparcfg.  Without your patches, I get

pool_capacity=400
pool_idle_time=0
pool_num_procs=0

This looks like an incompatible user-visible change to me, and we
haven't even changed the lparcfg version number at the beginning of
the /proc/ppc64/lparcfg output.  Why is the pool_capacity so
different, and why do the pool_idle_time and pool_num_procs lines
disappear?

Regards,
Paul.
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev