linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Mohan Kumar M <mohan@in.ibm.com>
To: ppcdev <linuxppc-dev@ozlabs.org>
Cc: fastboot@lists.osdl.org
Subject: [PATCH] Fix interrupt distribution in ppc970
Date: Fri, 8 Dec 2006 10:25:37 +0530	[thread overview]
Message-ID: <20061208045537.GA14626@in.ibm.com> (raw)

Hello,

We have encountered a strange problem with kdump in ppc970 based
machines. When a kdump kernel is booted with maxcpus=1 parameter,
interrupt is distributed to non-existent cpus also. It created lot of
interrupt missing problems.

This problem can be resolved by passing the additional kernel parameter
"noirqdistrib", which uses boot cpu id as interrupt distribution server.

To overcome this problem, I have created the patch, which
checks for the condition if the machine is ppc970 based and maxcpus
kernel parameter is specified. If the condition is met, the default
distribution server is assigned to be current boot cpu instead of
assigning from the gserver#s property.

Tested on PPC970 based box and POWER5 based box.

Any comment, feedback?

Patch is generated over 2.6.19-git7.


o Kdump with maxcpus kernel parameter in PPC970xx creates interrupt
  distribution problem, so set default distribution server to the
  current cpu (i.e. boot cpu)

Signed-off-by: Mohan Kumar M <mohan@in.ibm.com>

---
 arch/powerpc/platforms/pseries/xics.c |   35 +++++++++++++++++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

Index: linux-2.6.19-git7/arch/powerpc/platforms/pseries/xics.c
===================================================================
--- linux-2.6.19-git7.orig/arch/powerpc/platforms/pseries/xics.c
+++ linux-2.6.19-git7/arch/powerpc/platforms/pseries/xics.c
@@ -680,6 +680,27 @@ static struct device_node *cpuid_to_of_n
 	return NULL;
 }
 
+static int is_processor_970(void)
+{
+	unsigned long rval;
+	int rc;
+	rval = PVR_VER(mfspr(SPRN_PVR));
+
+	switch(rval) {
+		case PV_970:
+		case PV_970FX:
+		case PV_970MP:
+		case PV_970GX:
+			rc = 1;
+			break;
+		default:
+			rc = 0;
+			break;
+	}
+
+	return rc;
+}
+
 void __init xics_init_IRQ(void)
 {
 	int i, j;
@@ -688,6 +709,7 @@ void __init xics_init_IRQ(void)
 	const u32 *ireg, *isize;
 	int found = 0;
 	u32 hcpuid;
+	int fix_970_intr_distrib = 0;
 
 	ppc64_boot_msg(0x20, "XICS Init");
 
@@ -707,6 +729,13 @@ void __init xics_init_IRQ(void)
 
 	xics_init_host();
 
+	/* Kdump with maxcpus kernel parameter in PPC970xx creates interrupt
+	 * distribution problem, so set default distribution server to the
+	 * current cpu (i.e. boot cpu)
+	 */
+	if (strstr(saved_command_line, "maxcpus=") && is_processor_970())
+		fix_970_intr_distrib = 1;
+
 	/* Find the server numbers for the boot cpu. */
 	np = cpuid_to_of_node(boot_cpuid);
 	BUG_ON(!np);
@@ -724,7 +753,11 @@ void __init xics_init_IRQ(void)
 	for (j = 0; j < i; j += 2) {
 		if (ireg[j] == hcpuid) {
 			default_server = hcpuid;
-			default_distrib_server = ireg[j+1];
+
+			if (fix_970_intr_distrib)
+				default_distrib_server = hcpuid;
+			else
+				default_distrib_server = ireg[j+1];
 
 			isize = get_property(np,
 					"ibm,interrupt-server#-size", NULL);

             reply	other threads:[~2006-12-08  4:55 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-12-08  4:55 Mohan Kumar M [this message]
2006-12-18  4:37 ` [PATCH] Fix interrupt distribution in ppc970 Paul Mackerras
2006-12-18  5:14   ` Mohan Kumar M
2006-12-18 10:57   ` Mohan Kumar M
2007-01-02 11:42     ` [Fastboot] " Mohan Kumar M
2007-01-02 15:07       ` Doug Maxey
2007-03-06 13:57     ` Mohan Kumar M
2007-03-06 14:16       ` Michael Ellerman
2007-03-06 16:55         ` Mohan Kumar M
2007-03-06 17:37           ` Michael Ellerman
2007-03-07  4:53             ` Mohan Kumar M
2007-03-07 10:52               ` Michael Ellerman
2007-04-09  8:57                 ` Mohan Kumar M
2007-04-10  7:06                   ` Michael Ellerman
2007-04-10 12:54                     ` Mohan Kumar M
2007-04-10 16:59                     ` Milton Miller
2007-04-11  1:16                       ` Michael Ellerman
2007-04-19 11:52                         ` Mohan Kumar M
2007-04-20  5:45                           ` Milton Miller
2007-04-26  9:24                             ` Mohan Kumar M
2007-04-26 14:42                               ` Milton Miller
2007-05-03 14:47                                 ` Mohan Kumar M
2007-05-06  6:52                                   ` Milton Miller
2007-06-04 10:54                                     ` Mohan Kumar M
2007-06-06  9:43                                       ` Milton Miller
2007-06-06 11:31                                         ` Mohan Kumar M
2007-06-11  1:58                                           ` Milton Miller
2007-06-11 18:07                                             ` Mohan Kumar M
2007-06-12 14:51                                             ` Mohan Kumar M
2007-06-15 16:35                                               ` Milton Miller
2007-03-07  6:06         ` [Fastboot] " Vivek Goyal
2007-03-07 10:46           ` Michael Ellerman
2007-03-06 22:05       ` Nathan Lynch
2007-03-07  5:01         ` Mohan Kumar M
2007-03-07  8:52         ` Benjamin Herrenschmidt
2007-03-07  9:10           ` Mohan Kumar M

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=20061208045537.GA14626@in.ibm.com \
    --to=mohan@in.ibm.com \
    --cc=fastboot@lists.osdl.org \
    --cc=linuxppc-dev@ozlabs.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).