All of lore.kernel.org
 help / color / mirror / Atom feed
From: Robert Jennings <rcj@linux.vnet.ibm.com>
To: paulus@samba.org
Cc: Brian King <brking@linux.vnet.ibm.com>,
	linuxppc-dev@ozlabs.org,
	David Darrington <ddarring@linux.vnet.ibm.com>
Subject: [PATCH 02/18 v2] powerpc: Split processor entitlement retrieval and gathering to helper routines
Date: Wed, 25 Jun 2008 15:14:30 -0500	[thread overview]
Message-ID: <20080625201429.GD17020@linux.vnet.ibm.com> (raw)
In-Reply-To: <20080625201202.GB17020@linux.vnet.ibm.com>

=46rom: Nathan Fotenot <nfont@austin.ibm.com>

Split the retrieval and setting of processor entitlement and weight into
helper routines.  This also removes the printing of the raw values
returned from h_get_ppp, the values are already parsed and printed.

Signed-off-by: Nathan Fontenot <nfont@austin.ibm.com>
Signed-off-by: Robert Jennings <rcj@linux.vnet.ibm.com>

---
 arch/powerpc/kernel/lparcfg.c |  168 ++++++++++++++++++++++---------------=
----
 1 file changed, 90 insertions(+), 78 deletions(-)

Index: b/arch/powerpc/kernel/lparcfg.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- a/arch/powerpc/kernel/lparcfg.c
+++ b/arch/powerpc/kernel/lparcfg.c
@@ -167,7 +167,8 @@ static unsigned int h_get_ppp(unsigned l
 	return rc;
 }
=20
-static void h_pic(unsigned long *pool_idle_time, unsigned long *num_procs)
+static unsigned h_pic(unsigned long *pool_idle_time,
+		      unsigned long *num_procs)
 {
 	unsigned long rc;
 	unsigned long retbuf[PLPAR_HCALL_BUFSIZE];
@@ -176,6 +177,53 @@ static void h_pic(unsigned long *pool_id
=20
 	*pool_idle_time =3D retbuf[0];
 	*num_procs =3D retbuf[1];
+
+	return rc;
+}
+
+/*
+ * parse_ppp_data
+ * Parse out the data returned from h_get_ppp and h_pic
+ */
+static void parse_ppp_data(struct seq_file *m)
+{
+	unsigned long h_entitled, h_unallocated;
+	unsigned long h_aggregation, h_resource;
+	int rc;
+
+	rc =3D h_get_ppp(&h_entitled, &h_unallocated, &h_aggregation,
+		       &h_resource);
+	if (rc)
+		return;
+
+	seq_printf(m, "partition_entitled_capacity=3D%ld\n", h_entitled);
+	seq_printf(m, "group=3D%ld\n", (h_aggregation >> 2 * 8) & 0xffff);
+	seq_printf(m, "system_active_processors=3D%ld\n",
+		   (h_resource >> 0 * 8) & 0xffff);
+
+	/* pool related entries are apropriate for shared configs */
+	if (lppaca[0].shared_proc) {
+		unsigned long pool_idle_time, pool_procs;
+
+		seq_printf(m, "pool=3D%ld\n", (h_aggregation >> 0 * 8) & 0xffff);
+
+		/* report pool_capacity in percentage */
+		seq_printf(m, "pool_capacity=3D%ld\n",
+			   ((h_resource >> 2 * 8) & 0xffff) * 100);
+
+		rc =3D h_pic(&pool_idle_time, &pool_procs);
+		if (! rc) {
+			seq_printf(m, "pool_idle_time=3D%ld\n", pool_idle_time);
+			seq_printf(m, "pool_num_procs=3D%ld\n", pool_procs);
+		}
+	}
+
+	seq_printf(m, "unallocated_capacity_weight=3D%ld\n",
+		   (h_resource >> 4 * 8) & 0xFF);
+
+	seq_printf(m, "capacity_weight=3D%ld\n", (h_resource >> 5 * 8) & 0xFF);
+	seq_printf(m, "capped=3D%ld\n", (h_resource >> 6 * 8) & 0x01);
+	seq_printf(m, "unallocated_capacity=3D%ld\n", h_unallocated);
 }
=20
 #define SPLPAR_CHARACTERISTICS_TOKEN 20
@@ -302,60 +350,11 @@ static int pseries_lparcfg_data(struct s
 	partition_active_processors =3D lparcfg_count_active_processors();
=20
 	if (firmware_has_feature(FW_FEATURE_SPLPAR)) {
-		unsigned long h_entitled, h_unallocated;
-		unsigned long h_aggregation, h_resource;
-		unsigned long pool_idle_time, pool_procs;
-		unsigned long purr;
-
-		h_get_ppp(&h_entitled, &h_unallocated, &h_aggregation,
-			  &h_resource);
-
-		seq_printf(m, "R4=3D0x%lx\n", h_entitled);
-		seq_printf(m, "R5=3D0x%lx\n", h_unallocated);
-		seq_printf(m, "R6=3D0x%lx\n", h_aggregation);
-		seq_printf(m, "R7=3D0x%lx\n", h_resource);
-
-		purr =3D get_purr();
-
 		/* this call handles the ibm,get-system-parameter contents */
 		parse_system_parameter_string(m);
+		parse_ppp_data(m);
=20
-		seq_printf(m, "partition_entitled_capacity=3D%ld\n", h_entitled);
-
-		seq_printf(m, "group=3D%ld\n", (h_aggregation >> 2 * 8) & 0xffff);
-
-		seq_printf(m, "system_active_processors=3D%ld\n",
-			   (h_resource >> 0 * 8) & 0xffff);
-
-		/* pool related entries are apropriate for shared configs */
-		if (lppaca[0].shared_proc) {
-
-			h_pic(&pool_idle_time, &pool_procs);
-
-			seq_printf(m, "pool=3D%ld\n",
-				   (h_aggregation >> 0 * 8) & 0xffff);
-
-			/* report pool_capacity in percentage */
-			seq_printf(m, "pool_capacity=3D%ld\n",
-				   ((h_resource >> 2 * 8) & 0xffff) * 100);
-
-			seq_printf(m, "pool_idle_time=3D%ld\n", pool_idle_time);
-
-			seq_printf(m, "pool_num_procs=3D%ld\n", pool_procs);
-		}
-
-		seq_printf(m, "unallocated_capacity_weight=3D%ld\n",
-			   (h_resource >> 4 * 8) & 0xFF);
-
-		seq_printf(m, "capacity_weight=3D%ld\n",
-			   (h_resource >> 5 * 8) & 0xFF);
-
-		seq_printf(m, "capped=3D%ld\n", (h_resource >> 6 * 8) & 0x01);
-
-		seq_printf(m, "unallocated_capacity=3D%ld\n", h_unallocated);
-
-		seq_printf(m, "purr=3D%ld\n", purr);
-
+		seq_printf(m, "purr=3D%ld\n", get_purr());
 	} else {		/* non SPLPAR case */
=20
 		seq_printf(m, "system_active_processors=3D%d\n",
@@ -382,6 +381,41 @@ static int pseries_lparcfg_data(struct s
 	return 0;
 }
=20
+static ssize_t update_ppp(u64 *entitlement, u8 *weight)
+{
+	unsigned long current_entitled;
+	unsigned long dummy;
+	unsigned long resource;
+	u8 current_weight, new_weight;
+	u64 new_entitled;
+	ssize_t retval;
+
+	/* Get our current parameters */
+	retval =3D h_get_ppp(&current_entitled, &dummy, &dummy, &resource);
+	if (retval)
+		return retval;
+
+	current_weight =3D (resource >> 5 * 8) & 0xFF;
+
+	if (entitlement) {
+		new_weight =3D current_weight;
+		new_entitled =3D *entitlement;
+	} else if (weight) {
+		new_weight =3D *weight;
+		new_entitled =3D current_entitled;
+	} else
+		return -EINVAL;
+
+	pr_debug("%s: current_entitled =3D %lu, current_weight =3D %u\n",
+		 __FUNCTION__, current_entitled, current_weight);
+
+	pr_debug("%s: new_entitled =3D %lu, new_weight =3D %u\n",
+		 __FUNCTION__, new_entitled, new_weight);
+
+	retval =3D plpar_hcall_norets(H_SET_PPP, new_entitled, new_weight);
+	return retval;
+}
+
 /*
  * Interface for changing system parameters (variable capacity weight
  * and entitled capacity).  Format of input is "param_name=3Dvalue";
@@ -399,12 +433,6 @@ static ssize_t lparcfg_write(struct file
 	char *tmp;
 	u64 new_entitled, *new_entitled_ptr =3D &new_entitled;
 	u8 new_weight, *new_weight_ptr =3D &new_weight;
-
-	unsigned long current_entitled;	/* parameters for h_get_ppp */
-	unsigned long dummy;
-	unsigned long resource;
-	u8 current_weight;
-
 	ssize_t retval =3D -ENOMEM;
=20
 	if (!firmware_has_feature(FW_FEATURE_SPLPAR) ||
@@ -432,33 +460,17 @@ static ssize_t lparcfg_write(struct file
 		*new_entitled_ptr =3D (u64) simple_strtoul(tmp, &endp, 10);
 		if (endp =3D=3D tmp)
 			goto out;
-		new_weight_ptr =3D &current_weight;
+
+		retval =3D update_ppp(new_entitled_ptr, NULL);
 	} else if (!strcmp(kbuf, "capacity_weight")) {
 		char *endp;
 		*new_weight_ptr =3D (u8) simple_strtoul(tmp, &endp, 10);
 		if (endp =3D=3D tmp)
 			goto out;
-		new_entitled_ptr =3D &current_entitled;
-	} else
-		goto out;
=20
-	/* Get our current parameters */
-	retval =3D h_get_ppp(&current_entitled, &dummy, &dummy, &resource);
-	if (retval) {
-		retval =3D -EIO;
+		retval =3D update_ppp(NULL, new_weight_ptr);
+	} else
 		goto out;
-	}
-
-	current_weight =3D (resource >> 5 * 8) & 0xFF;
-
-	pr_debug("%s: current_entitled =3D %lu, current_weight =3D %u\n",
-		 __func__, current_entitled, current_weight);
-
-	pr_debug("%s: new_entitled =3D %lu, new_weight =3D %u\n",
-		 __func__, *new_entitled_ptr, *new_weight_ptr);
-
-	retval =3D plpar_hcall_norets(H_SET_PPP, *new_entitled_ptr,
-				    *new_weight_ptr);
=20
 	if (retval =3D=3D H_SUCCESS || retval =3D=3D H_CONSTRAINED) {
 		retval =3D count;

  parent reply	other threads:[~2008-06-25 20:14 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-25 20:12 [PATCH 00/18 v2] powerpc: pSeries Cooperative Memory Overcommitment support Robert Jennings
2008-06-25 20:14 ` [PATCH 01/18 v2] powerpc: Remove extraneous error reporting for hcall failures in lparcfg Robert Jennings
2008-06-25 20:14 ` Robert Jennings [this message]
2008-06-25 20:14 ` [PATCH 03/18 v2] powerpc: Add memory entitlement capabilities to /proc/ppc64/lparcfg Robert Jennings
2008-06-25 20:15 ` [PATCH 04/18 v2] powerpc: Split retrieval of processor entitlement data into a helper routine Robert Jennings
2008-06-25 20:15 ` [PATCH 05/18 v2] powerpc: Enable CMO feature during platform setup Robert Jennings
2008-06-25 20:15 ` [PATCH 06/18 v2] powerpc: Utilities to set firmware page state Robert Jennings
2008-06-25 20:16 ` [PATCH 07/18 v2] powerpc: Add collaborative memory manager Robert Jennings
2008-06-25 20:17 ` [PATCH 08/18 v2] powerpc: Do not probe PCI buses or eBus devices if CMO is enabled Robert Jennings
2008-06-30  4:32   ` Paul Mackerras
2008-06-30 21:56     ` Brian King
2008-06-25 20:17 ` [PATCH 09/18 v2] powerpc: Add CMO paging statistics Robert Jennings
2008-06-25 20:17 ` [PATCH 10/18 v2] powerpc: iommu enablement for CMO Robert Jennings
2008-06-25 20:18 ` [PATCH 11/18 v2] powerpc: vio bus support " Robert Jennings
2008-06-25 20:18 ` [PATCH 12/18 v2] powerpc: Verify CMO memory entitlement updates with virtual I/O Robert Jennings
2008-06-25 20:18 ` [PATCH 13/18 v2] powerpc: hvc enablement for CMO Robert Jennings
2008-06-25 20:18 ` [PATCH 14/18 v2] powerpc: hvcs " Robert Jennings
2008-06-25 20:19 ` [PATCH 15/18 v2] ibmveth: Automatically enable larger rx buffer pools for larger mtu Robert Jennings
2008-06-25 20:19 ` [PATCH 16/18 v2] ibmveth: enable driver for CMO Robert Jennings
2008-06-25 20:19 ` [PATCH 17/18 v2] ibmvscsi: driver enablement " Robert Jennings
2008-06-25 20:19   ` Robert Jennings
2008-06-25 20:19 ` [PATCH 18/18 v2] powerpc: Update arch vector to indicate support " Robert Jennings

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=20080625201429.GD17020@linux.vnet.ibm.com \
    --to=rcj@linux.vnet.ibm.com \
    --cc=brking@linux.vnet.ibm.com \
    --cc=ddarring@linux.vnet.ibm.com \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=paulus@samba.org \
    /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.