From: Milton Miller <miltonm@bga.com>
To: mohan@in.ibm.com
Cc: ppcdev <linuxppc-dev@ozlabs.org>,
Paul Mackerras <paulus@samba.org>,
Anton Blanchard <anton@samba.org>,
fastboot@lists.osdl.org
Subject: Re: [PATCH] Fix interrupt distribution in ppc970
Date: Fri, 20 Apr 2007 00:45:15 -0500 [thread overview]
Message-ID: <080126626f9bea228426c0c3d7bf1730@bga.com> (raw)
In-Reply-To: <20070419115233.GA4172@in.ibm.com>
On Apr 19, 2007, at 6:52 AM, Mohan Kumar M wrote:
> On Wed, Apr 11, 2007 at 11:16:41AM +1000, Michael Ellerman wrote:
>> On Tue, 2007-04-10 at 11:59 -0500, Milton Miller wrote:
>>>
>>> This means we are doing population counts of two masks, when we
>>> really
>>> just care that they are the same. How about using
>>> cpus_equal(cpu_online_mask, cpu_present_mask)?
>>
>> Yep that's sensible.
>>
>>> This shows how close these two functions are. The difference is
>>> what happens when cpus_empty is true -- we default in one and
>>> ignore in the other.
>>>
>>> How about adding another arg to get_server, that says to fail
>>> or default for the empty case, with failure being -1?
>
> I modified the patch based on suggestions given by Milton and Mike.
> Milton is this patch okay?
Well, its part of the way there.
>
> Tested on 2.6.21-rc7.
> Index: linux-2.6.21-rc4/arch/powerpc/platforms/pseries/xics.c
> ===================================================================
> --- linux-2.6.21-rc4.orig/arch/powerpc/platforms/pseries/xics.c
> +++ linux-2.6.21-rc4/arch/powerpc/platforms/pseries/xics.c
> @@ -156,9 +156,9 @@ static inline void lpar_qirr_info(int n_
>
>
> #ifdef CONFIG_SMP
> -static int get_irq_server(unsigned int virq)
> +static int get_irq_server(unsigned int virq, unsigned int
> strict_check)
> {
> - unsigned int server;
> + int server;
> /* For the moment only implement delivery to all cpus or one cpu */
> cpumask_t cpumask = irq_desc[virq].affinity;
> cpumask_t tmp = CPU_MASK_NONE;
> @@ -167,21 +167,25 @@ static int get_irq_server(unsigned int v
> return default_server;
>
> if (cpus_equal(cpumask, CPU_MASK_ALL)) {
> - server = default_distrib_server;
> + if (cpus_equal(cpu_online_map, cpu_present_map))
> + server = default_distrib_server;
> + else
> + server = default_server;
> } else {
> cpus_and(tmp, cpu_online_map, cpumask);
>
> - if (cpus_empty(tmp))
> + if (cpus_empty(tmp) && !strict_check)
> server = default_distrib_server;
> + else if(cpus_empty(tmp) && strict_check)
> + server = -1;
> else
> server = get_hard_smp_processor_id(first_cpu(tmp));
> }
Don't test cpus_empty twice, instead do a nested if.
Actually, looking at this a bit, you need your default_distrib or
default_server check again.
How about reorder to be if (!cpus_equal(...ALL)) {
cpus_and
if !cpus_empty(tmp
return get_hard(first);
if (strict)
return -1;
}
if (cpus_equal(online, preseent)
return distrib
return default_server
For that matter, can we just call first_cpu, and check its <= NUM_CPUS
elminating the call to cpus_empty ? Only call get_hard_cpu if its
valid.
...
> @@ -415,7 +419,10 @@ static void xics_set_affinity(unsigned i
...
> /* For the moment only implement delivery to all cpus or one cpu */
> if (cpus_equal(cpumask, CPU_MASK_ALL)) {
> - newmask = default_distrib_server;
> + if (cpus_equal(cpu_online_map, cpu_present_map))
>
this was supposed to be the call with strict = 1
milton
next prev parent reply other threads:[~2007-04-20 5:45 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-08 4:55 [PATCH] Fix interrupt distribution in ppc970 Mohan Kumar M
2006-12-18 4:37 ` 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 [this message]
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-03 14:47 ` Mohan Kumar M
2007-05-06 6:52 ` Milton Miller
2007-05-06 6:52 ` Milton Miller
2007-06-04 10:54 ` Mohan Kumar M
2007-06-04 10:54 ` Mohan Kumar M
2007-06-06 9:43 ` Milton Miller
2007-06-06 9:43 ` Milton Miller
2007-06-06 11:31 ` Mohan Kumar M
2007-06-06 11:31 ` Mohan Kumar M
2007-06-11 1:58 ` Milton Miller
2007-06-11 1:58 ` Milton Miller
2007-06-11 18:07 ` Mohan Kumar M
2007-06-11 18:07 ` Mohan Kumar M
2007-06-12 14:51 ` Mohan Kumar M
2007-06-12 14:51 ` Mohan Kumar M
2007-06-15 16:35 ` Milton Miller
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=080126626f9bea228426c0c3d7bf1730@bga.com \
--to=miltonm@bga.com \
--cc=anton@samba.org \
--cc=fastboot@lists.osdl.org \
--cc=linuxppc-dev@ozlabs.org \
--cc=mohan@in.ibm.com \
--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.