public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [RFC] Correct behaviour of irq affinity?
@ 2009-03-24  5:49 Rusty Russell
  2009-03-24  7:21 ` Yinghai Lu
  2009-03-24 12:39 ` Eric W. Biederman
  0 siblings, 2 replies; 19+ messages in thread
From: Rusty Russell @ 2009-03-24  5:49 UTC (permalink / raw)
  To: x86; +Cc: linux-kernel

The effect of setting desc->affinity (ie. from userspace via sysfs) has varied
over time.  In 2.6.27, the 32-bit code anded the value with cpu_online_map,
and both 32 and 64-bit did that anding whenever a cpu was unplugged.

2.6.29 consolidated this into one routine (and fixed hotplug) but introduced
another variation: anding the affinity with cfg->domain.  Is this right, or
should we just set it to what the user said?  Or as now, indicate that we're
restricting it.

If we should change it, here's what the patch looks like against x86 tip
(cpu_mask_to_apicid_and already takes cpu_online_mask into account):

diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 86827d8..30906cd 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -592,10 +592,10 @@ set_desc_affinity(struct irq_desc *desc, const struct cpumask *mask)
 	if (assign_irq_vector(irq, cfg, mask))
 		return BAD_APICID;
 
-	cpumask_and(desc->affinity, cfg->domain, mask);
+	cpumask_copy(desc->affinity, mask);
 	set_extra_move_desc(desc, mask);
 
-	return apic->cpu_mask_to_apicid_and(desc->affinity, cpu_online_mask);
+	return apic->cpu_mask_to_apicid_and(desc->affinity, cfg->domain);
 }
 
 static void


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [RFC] Correct behaviour of irq affinity?
  2009-03-24  5:49 [RFC] Correct behaviour of irq affinity? Rusty Russell
@ 2009-03-24  7:21 ` Yinghai Lu
  2009-03-24 12:52   ` Rusty Russell
  2009-03-24 12:39 ` Eric W. Biederman
  1 sibling, 1 reply; 19+ messages in thread
From: Yinghai Lu @ 2009-03-24  7:21 UTC (permalink / raw)
  To: Rusty Russell, Ingo Molnar, Eric W. Biederman; +Cc: x86, linux-kernel

On Mon, Mar 23, 2009 at 10:49 PM, Rusty Russell <rusty@rustcorp.com.au> wrote:
> The effect of setting desc->affinity (ie. from userspace via sysfs) has varied
> over time.  In 2.6.27, the 32-bit code anded the value with cpu_online_map,
> and both 32 and 64-bit did that anding whenever a cpu was unplugged.
>
> 2.6.29 consolidated this into one routine (and fixed hotplug) but introduced
> another variation: anding the affinity with cfg->domain.  Is this right, or
> should we just set it to what the user said?  Or as now, indicate that we're
> restricting it.
>
> If we should change it, here's what the patch looks like against x86 tip
> (cpu_mask_to_apicid_and already takes cpu_online_mask into account):
>
> diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
> index 86827d8..30906cd 100644
> --- a/arch/x86/kernel/apic/io_apic.c
> +++ b/arch/x86/kernel/apic/io_apic.c
> @@ -592,10 +592,10 @@ set_desc_affinity(struct irq_desc *desc, const struct cpumask *mask)
>        if (assign_irq_vector(irq, cfg, mask))
>                return BAD_APICID;
>
> -       cpumask_and(desc->affinity, cfg->domain, mask);
> +       cpumask_copy(desc->affinity, mask);
>        set_extra_move_desc(desc, mask);
>
> -       return apic->cpu_mask_to_apicid_and(desc->affinity, cpu_online_mask);
> +       return apic->cpu_mask_to_apicid_and(desc->affinity, cfg->domain);
>  }
>
>  static void
>
cfg->domain for logical flat: will be ALL_CPUS
for phys flat (aka bigsmp on 32bit) will be one cpu set mask.

so desc->affinity: for logical will be not changed, but
set_desc_affinity() return will be changed. ( not add with
cpu_online_mask anymore)
when mask is 0x0f
for phys flat, desc->affinity will be changed to 0x0f from
0x01/0x02/0x04/08, return set_desc_affinity is not changed.
so /proc/irq/xx/smp_affinity will be changed. and it does reflect that
actually affinity.

so this patch looks not right.

YH

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [RFC] Correct behaviour of irq affinity?
  2009-03-24  5:49 [RFC] Correct behaviour of irq affinity? Rusty Russell
  2009-03-24  7:21 ` Yinghai Lu
@ 2009-03-24 12:39 ` Eric W. Biederman
  2009-03-24 19:49   ` Yinghai Lu
                     ` (2 more replies)
  1 sibling, 3 replies; 19+ messages in thread
From: Eric W. Biederman @ 2009-03-24 12:39 UTC (permalink / raw)
  To: Rusty Russell; +Cc: x86, linux-kernel, Yinghai Lu, Ingo Molnar

Rusty Russell <rusty@rustcorp.com.au> writes:

> The effect of setting desc->affinity (ie. from userspace via sysfs) has varied
> over time.  In 2.6.27, the 32-bit code anded the value with cpu_online_map,
> and both 32 and 64-bit did that anding whenever a cpu was unplugged.
>
> 2.6.29 consolidated this into one routine (and fixed hotplug) but introduced
> another variation: anding the affinity with cfg->domain.  Is this right, or
> should we just set it to what the user said?  Or as now, indicate that we're
> restricting it.
>
> If we should change it, here's what the patch looks like against x86 tip
> (cpu_mask_to_apicid_and already takes cpu_online_mask into account):

desc->affinity should be what the user requested, if it is at all
possible to honor the user space request.  YH the fact that we do not
currently exercise the full freedom that user space gives us is
irrelevant.

Further setting desc->affinity to the user space request is what
x86_64 did before the grand merger. 

Likewise desc->affinity & cfg->domain & cpu_online_map going into the
selection of apic id, is what the code did before the grand merger,
and what the code is currently doing.  So logically that looks good.

YH has a point that several of the implementations of
cpu_mask_to_apic_id do not take cpu_online_map into account and should
probably be fixed.  flat_cpu_mask_to_apicid was the one I could find.

Also now that I look at it there is one other bug in this routine
that you have missed.  set_extra_move_desc should be called before
we set desc->affinity, as it compares that with the new value to
see if we are going to be running on a new cpu, and if so we may
need to reallocate irq_desc onto a new numa node.  set_extra_move_desc
looks a little fishy but it doesn't stand a chance if it is called
with the wrong data.

Overall I like it.

Do you think you could fix those two issues and regenerate the patch?

> diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
> index 86827d8..30906cd 100644
> --- a/arch/x86/kernel/apic/io_apic.c
> +++ b/arch/x86/kernel/apic/io_apic.c
> @@ -592,10 +592,10 @@ set_desc_affinity(struct irq_desc *desc, const struct cpumask *mask)
>  	if (assign_irq_vector(irq, cfg, mask))
>  		return BAD_APICID;
>  
> -	cpumask_and(desc->affinity, cfg->domain, mask);
> +	cpumask_copy(desc->affinity, mask);
>  	set_extra_move_desc(desc, mask);
>  
> -	return apic->cpu_mask_to_apicid_and(desc->affinity, cpu_online_mask);
> +	return apic->cpu_mask_to_apicid_and(desc->affinity, cfg->domain);
>  }
>  
>  static void

Eric

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [RFC] Correct behaviour of irq affinity?
  2009-03-24  7:21 ` Yinghai Lu
@ 2009-03-24 12:52   ` Rusty Russell
  2009-03-24 20:36     ` Yinghai Lu
  0 siblings, 1 reply; 19+ messages in thread
From: Rusty Russell @ 2009-03-24 12:52 UTC (permalink / raw)
  To: Yinghai Lu; +Cc: Ingo Molnar, Eric W. Biederman, x86, linux-kernel

On Tuesday 24 March 2009 17:51:43 Yinghai Lu wrote:
> On Mon, Mar 23, 2009 at 10:49 PM, Rusty Russell <rusty@rustcorp.com.au> wrote:
> > The effect of setting desc->affinity (ie. from userspace via sysfs) has varied
> > over time.  In 2.6.27, the 32-bit code anded the value with cpu_online_map,
> > and both 32 and 64-bit did that anding whenever a cpu was unplugged.
> >
> > 2.6.29 consolidated this into one routine (and fixed hotplug) but introduced
> > another variation: anding the affinity with cfg->domain.  Is this right, or
> > should we just set it to what the user said?  Or as now, indicate that we're
> > restricting it.
> >
> > If we should change it, here's what the patch looks like against x86 tip
> > (cpu_mask_to_apicid_and already takes cpu_online_mask into account):
> >
> > diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
> > index 86827d8..30906cd 100644
> > --- a/arch/x86/kernel/apic/io_apic.c
> > +++ b/arch/x86/kernel/apic/io_apic.c
> > @@ -592,10 +592,10 @@ set_desc_affinity(struct irq_desc *desc, const struct cpumask *mask)
> >        if (assign_irq_vector(irq, cfg, mask))
> >                return BAD_APICID;
> >
> > -       cpumask_and(desc->affinity, cfg->domain, mask);
> > +       cpumask_copy(desc->affinity, mask);
> >        set_extra_move_desc(desc, mask);
> >
> > -       return apic->cpu_mask_to_apicid_and(desc->affinity, cpu_online_mask);
> > +       return apic->cpu_mask_to_apicid_and(desc->affinity, cfg->domain);
> >  }
> >
> >  static void
> >
> cfg->domain for logical flat: will be ALL_CPUS
> for phys flat (aka bigsmp on 32bit) will be one cpu set mask.
> 
> so desc->affinity: for logical will be not changed, but
> set_desc_affinity() return will be changed. ( not add with
> cpu_online_mask anymore)

No, internally cpu_mask_to_apicid_and() does and with cpu_online_mask
already, eg in include/asm/bigsmp/apic.h:

static inline unsigned int cpu_mask_to_apicid_and(const struct cpumask *cpumask,
						  const struct cpumask *andmask)
{
	int cpu;

	/*
	 * We're using fixed IRQ delivery, can only return one phys APIC ID.
	 * May as well be the first.
	 */
	for_each_cpu_and(cpu, cpumask, andmask)
		if (cpumask_test_cpu(cpu, cpu_online_mask))
			break;
	if (cpu < nr_cpu_ids)
		return cpu_to_logical_apicid(cpu);

	return BAD_APICID;
}

> when mask is 0x0f
> for phys flat, desc->affinity will be changed to 0x0f from
> 0x01/0x02/0x04/08, return set_desc_affinity is not changed.
> so /proc/irq/xx/smp_affinity will be changed. and it does reflect that
> actually affinity.
> 
> so this patch looks not right.

Only change should be that smp_affinity will reflect actual affinity, not
affinity user set.

Thanks,
Rusty.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [RFC] Correct behaviour of irq affinity?
  2009-03-24 12:39 ` Eric W. Biederman
@ 2009-03-24 19:49   ` Yinghai Lu
  2009-03-24 20:23   ` [PATCH] x86: fix set_extra_move_desc calling Yinghai Lu
  2009-03-25  0:33   ` [RFC] Correct behaviour of irq affinity? Rusty Russell
  2 siblings, 0 replies; 19+ messages in thread
From: Yinghai Lu @ 2009-03-24 19:49 UTC (permalink / raw)
  To: Eric W. Biederman; +Cc: Rusty Russell, x86, linux-kernel, Ingo Molnar

Eric W. Biederman wrote:
> 
> Also now that I look at it there is one other bug in this routine
> that you have missed.  set_extra_move_desc should be called before
> we set desc->affinity, as it compares that with the new value to
> see if we are going to be running on a new cpu, and if so we may
> need to reallocate irq_desc onto a new numa node.  set_extra_move_desc
> looks a little fishy but it doesn't stand a chance if it is called
> with the wrong data.


you are right, that is introduce bycommit 22f65d31b25a320a5246592160bcb102d2791c45

Author: Mike Travis <travis@sgi.com>
Date:   Tue Dec 16 17:33:56 2008 -0800

    x86: Update io_apic.c to use new cpumask API
    
    Impact: cleanup, consolidate patches, use new API
    
    Consolidate the following into a single patch to adapt to new
    sparseirq code in arch/x86/kernel/io_apic.c, add allocation of
    cpumask_var_t's in domain and old_domain, and reduce further
    merge conflicts.  Only one file (arch/x86/kernel/io_apic.c) is
    changed in all of these patches.
    
        0006-x86-io_apic-change-irq_cfg-domain-old_domain-to.patch
        0007-x86-io_apic-set_desc_affinity.patch
        0008-x86-io_apic-send_cleanup_vector.patch
        0009-x86-io_apic-eliminate-remaining-cpumask_ts-from-st.patch
        0021-x86-final-cleanups-in-io_apic-to-use-new-cpumask-AP.patch

will send one patch for that.

YH


^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH] x86: fix set_extra_move_desc calling
  2009-03-24 12:39 ` Eric W. Biederman
  2009-03-24 19:49   ` Yinghai Lu
@ 2009-03-24 20:23   ` Yinghai Lu
  2009-03-24 21:15     ` [tip:x86/apic] " Yinghai Lu
  2009-03-24 21:15     ` [PATCH 1/3] " Yinghai Lu
  2009-03-25  0:33   ` [RFC] Correct behaviour of irq affinity? Rusty Russell
  2 siblings, 2 replies; 19+ messages in thread
From: Yinghai Lu @ 2009-03-24 20:23 UTC (permalink / raw)
  To: x86, Ingo Molnar; +Cc: Eric W. Biederman, Rusty Russell, linux-kernel


Impact: fix bug with desc moving when logical flat

Eric pointed out that we should compare with old affinity.
acctually this bug is introduced by:
| commit 22f65d31b25a320a5246592160bcb102d2791c45
|
| Author: Mike Travis <travis@sgi.com>
| Date:   Tue Dec 16 17:33:56 2008 -0800
|
|    x86: Update io_apic.c to use new cpumask API
|
|    Impact: cleanup, consolidate patches, use new API

so need to move that before...

---
 arch/x86/kernel/apic/io_apic.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Index: linux-2.6/arch/x86/kernel/apic/io_apic.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/apic/io_apic.c
+++ linux-2.6/arch/x86/kernel/apic/io_apic.c
@@ -592,8 +592,9 @@ set_desc_affinity(struct irq_desc *desc,
 	if (assign_irq_vector(irq, cfg, mask))
 		return BAD_APICID;
 
-	cpumask_and(desc->affinity, cfg->domain, mask);
+	/* check that before desc->addinity get updated */
 	set_extra_move_desc(desc, mask);
+	cpumask_and(desc->affinity, cfg->domain, mask);
 
 	return apic->cpu_mask_to_apicid_and(desc->affinity, cpu_online_mask);
 }

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [RFC] Correct behaviour of irq affinity?
  2009-03-24 12:52   ` Rusty Russell
@ 2009-03-24 20:36     ` Yinghai Lu
  0 siblings, 0 replies; 19+ messages in thread
From: Yinghai Lu @ 2009-03-24 20:36 UTC (permalink / raw)
  To: Rusty Russell; +Cc: Ingo Molnar, Eric W. Biederman, x86, linux-kernel

Rusty Russell wrote:
> On Tuesday 24 March 2009 17:51:43 Yinghai Lu wrote:
>> On Mon, Mar 23, 2009 at 10:49 PM, Rusty Russell <rusty@rustcorp.com.au> wrote:
>>> The effect of setting desc->affinity (ie. from userspace via sysfs) has varied
>>> over time.  In 2.6.27, the 32-bit code anded the value with cpu_online_map,
>>> and both 32 and 64-bit did that anding whenever a cpu was unplugged.
>>>
>>> 2.6.29 consolidated this into one routine (and fixed hotplug) but introduced
>>> another variation: anding the affinity with cfg->domain.  Is this right, or
>>> should we just set it to what the user said?  Or as now, indicate that we're
>>> restricting it.
>>>
>>> If we should change it, here's what the patch looks like against x86 tip
>>> (cpu_mask_to_apicid_and already takes cpu_online_mask into account):
>>>
>>> diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
>>> index 86827d8..30906cd 100644
>>> --- a/arch/x86/kernel/apic/io_apic.c
>>> +++ b/arch/x86/kernel/apic/io_apic.c
>>> @@ -592,10 +592,10 @@ set_desc_affinity(struct irq_desc *desc, const struct cpumask *mask)
>>>        if (assign_irq_vector(irq, cfg, mask))
>>>                return BAD_APICID;
>>>
>>> -       cpumask_and(desc->affinity, cfg->domain, mask);
>>> +       cpumask_copy(desc->affinity, mask);
>>>        set_extra_move_desc(desc, mask);
>>>
>>> -       return apic->cpu_mask_to_apicid_and(desc->affinity, cpu_online_mask);
>>> +       return apic->cpu_mask_to_apicid_and(desc->affinity, cfg->domain);
>>>  }
>>>
>>>  static void
>>>
>> cfg->domain for logical flat: will be ALL_CPUS
>> for phys flat (aka bigsmp on 32bit) will be one cpu set mask.
>>
>> so desc->affinity: for logical will be not changed, but
>> set_desc_affinity() return will be changed. ( not add with
>> cpu_online_mask anymore)
> 
> No, internally cpu_mask_to_apicid_and() does and with cpu_online_mask
> already, eg in include/asm/bigsmp/apic.h:
> 
> static inline unsigned int cpu_mask_to_apicid_and(const struct cpumask *cpumask,
> 						  const struct cpumask *andmask)
> {
> 	int cpu;
> 
> 	/*
> 	 * We're using fixed IRQ delivery, can only return one phys APIC ID.
> 	 * May as well be the first.
> 	 */
> 	for_each_cpu_and(cpu, cpumask, andmask)
> 		if (cpumask_test_cpu(cpu, cpu_online_mask))
> 			break;
> 	if (cpu < nr_cpu_ids)
> 		return cpu_to_logical_apicid(cpu);
> 
> 	return BAD_APICID;
> }
> 
>> when mask is 0x0f
>> for phys flat, desc->affinity will be changed to 0x0f from
>> 0x01/0x02/0x04/08, return set_desc_affinity is not changed.
>> so /proc/irq/xx/smp_affinity will be changed. and it does reflect that
>> actually affinity.
>>
>> so this patch looks not right.
> 
> Only change should be that smp_affinity will reflect actual affinity, not
> affinity user set.

ok.
how about
static unsigned int flat_cpu_mask_to_apicid_and(const struct cpumask *cpumask,
                                                const struct cpumask *andmask)
{
        unsigned long mask1 = cpumask_bits(cpumask)[0] & APIC_ALL_CPUS;
        unsigned long mask2 = cpumask_bits(andmask)[0] & APIC_ALL_CPUS;

        return mask1 & mask2;
}

change it use
default_cpu_mask_to_apicid_and ?

YH

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [tip:x86/apic] x86: fix set_extra_move_desc calling
  2009-03-24 20:23   ` [PATCH] x86: fix set_extra_move_desc calling Yinghai Lu
@ 2009-03-24 21:15     ` Yinghai Lu
  2009-03-24 21:15     ` [PATCH 1/3] " Yinghai Lu
  1 sibling, 0 replies; 19+ messages in thread
From: Yinghai Lu @ 2009-03-24 21:15 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, hpa, mingo, yinghai, rusty, ebiederm, tglx, mingo

Commit-ID:  fa74c9073370e57fa28e02aff13f4d7b1806505c
Gitweb:     http://git.kernel.org/tip/fa74c9073370e57fa28e02aff13f4d7b1806505c
Author:     Yinghai Lu <yinghai@kernel.org>
AuthorDate: Tue, 24 Mar 2009 13:23:16 -0700
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Tue, 24 Mar 2009 22:12:10 +0100

x86: fix set_extra_move_desc calling

Impact: fix bug with irq-descriptor moving when logical flat

Rusty observed:

> The effect of setting desc->affinity (ie. from userspace via sysfs) has varied
> over time.  In 2.6.27, the 32-bit code anded the value with cpu_online_map,
> and both 32 and 64-bit did that anding whenever a cpu was unplugged.
>
> 2.6.29 consolidated this into one routine (and fixed hotplug) but introduced
> another variation: anding the affinity with cfg->domain.  Is this right, or
> should we just set it to what the user said?  Or as now, indicate that we're
> restricting it.

Eric pointed out that desc->affinity should be what the user requested,
if it is at all possible to honor the user space request.

This bug got introduced by commit 22f65d31b "x86: Update io_apic.c to use
new cpumask API".

Fix it by moving the masking to before the descriptor moving ...

Reported-by: Rusty Russell <rusty@rustcorp.com.au>
Reported-by: Eric W. Biederman <ebiederm@xmission.com>
LKML-Reference: <49C94134.4000408@kernel.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>


---
 arch/x86/kernel/apic/io_apic.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 86827d8..1ed6c06 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -592,8 +592,9 @@ set_desc_affinity(struct irq_desc *desc, const struct cpumask *mask)
 	if (assign_irq_vector(irq, cfg, mask))
 		return BAD_APICID;
 
-	cpumask_and(desc->affinity, cfg->domain, mask);
+	/* check that before desc->addinity get updated */
 	set_extra_move_desc(desc, mask);
+	cpumask_and(desc->affinity, cfg->domain, mask);
 
 	return apic->cpu_mask_to_apicid_and(desc->affinity, cpu_online_mask);
 }

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 1/3] x86: fix set_extra_move_desc calling
  2009-03-24 20:23   ` [PATCH] x86: fix set_extra_move_desc calling Yinghai Lu
  2009-03-24 21:15     ` [tip:x86/apic] " Yinghai Lu
@ 2009-03-24 21:15     ` Yinghai Lu
  2009-03-24 21:16       ` [PATCH 2/3] x86: use default_cpu_mask_to_apicid for 64bit Yinghai Lu
  2009-03-24 21:17       ` [PATCH 3/3] x86: Correct behaviour of irq affinity Yinghai Lu
  1 sibling, 2 replies; 19+ messages in thread
From: Yinghai Lu @ 2009-03-24 21:15 UTC (permalink / raw)
  To: Ingo Molnar, Eric W. Biederman, Rusty Russell
  Cc: linux-kernel, Thomas Gleixner, H. Peter Anvin, Andrew Morton



Impact: fix bug with desc moving when logical flat

Eric pointed out that should compare with old desc.
acctually this bug is introduced by:
| commit 22f65d31b25a320a5246592160bcb102d2791c45
|
| Author: Mike Travis <travis@sgi.com>
| Date:   Tue Dec 16 17:33:56 2008 -0800
|
|    x86: Update io_apic.c to use new cpumask API
|
|    Impact: cleanup, consolidate patches, use new API

so need to move that before...

---
 arch/x86/kernel/apic/io_apic.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Index: linux-2.6/arch/x86/kernel/apic/io_apic.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/apic/io_apic.c
+++ linux-2.6/arch/x86/kernel/apic/io_apic.c
@@ -592,8 +592,9 @@ set_desc_affinity(struct irq_desc *desc,
 	if (assign_irq_vector(irq, cfg, mask))
 		return BAD_APICID;
 
-	cpumask_and(desc->affinity, cfg->domain, mask);
+	/* check that before desc->addinity get updated */
 	set_extra_move_desc(desc, mask);
+	cpumask_and(desc->affinity, cfg->domain, mask);
 
 	return apic->cpu_mask_to_apicid_and(desc->affinity, cpu_online_mask);
 }

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 2/3] x86: use default_cpu_mask_to_apicid for 64bit
  2009-03-24 21:15     ` [PATCH 1/3] " Yinghai Lu
@ 2009-03-24 21:16       ` Yinghai Lu
  2009-03-24 21:30         ` [tip:x86/apic] " Yinghai Lu
  2009-03-24 21:17       ` [PATCH 3/3] x86: Correct behaviour of irq affinity Yinghai Lu
  1 sibling, 1 reply; 19+ messages in thread
From: Yinghai Lu @ 2009-03-24 21:16 UTC (permalink / raw)
  To: Ingo Molnar, Eric W. Biederman, Rusty Russell
  Cc: linux-kernel, Thomas Gleixner, H. Peter Anvin, Andrew Morton


Impact: cleanup

use online_mask directly with 64bit too.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>

---
 arch/x86/include/asm/apic.h         |   20 ++++++++++----------
 arch/x86/kernel/apic/apic_flat_64.c |   18 ++----------------
 2 files changed, 12 insertions(+), 26 deletions(-)

Index: linux-2.6/arch/x86/include/asm/apic.h
===================================================================
--- linux-2.6.orig/arch/x86/include/asm/apic.h
+++ linux-2.6/arch/x86/include/asm/apic.h
@@ -489,10 +489,19 @@ static inline int default_apic_id_regist
 	return physid_isset(read_apic_id(), phys_cpu_present_map);
 }
 
+static inline int default_phys_pkg_id(int cpuid_apic, int index_msb)
+{
+	return cpuid_apic >> index_msb;
+}
+
+extern int default_apicid_to_node(int logical_apicid);
+
+#endif
+
 static inline unsigned int
 default_cpu_mask_to_apicid(const struct cpumask *cpumask)
 {
-	return cpumask_bits(cpumask)[0];
+	return cpumask_bits(cpumask)[0] & APIC_ALL_CPUS;
 }
 
 static inline unsigned int
@@ -506,15 +515,6 @@ default_cpu_mask_to_apicid_and(const str
 	return (unsigned int)(mask1 & mask2 & mask3);
 }
 
-static inline int default_phys_pkg_id(int cpuid_apic, int index_msb)
-{
-	return cpuid_apic >> index_msb;
-}
-
-extern int default_apicid_to_node(int logical_apicid);
-
-#endif
-
 static inline unsigned long default_check_apicid_used(physid_mask_t bitmap, int apicid)
 {
 	return physid_isset(apicid, bitmap);
Index: linux-2.6/arch/x86/kernel/apic/apic_flat_64.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/apic/apic_flat_64.c
+++ linux-2.6/arch/x86/kernel/apic/apic_flat_64.c
@@ -159,20 +159,6 @@ static int flat_apic_id_registered(void)
 	return physid_isset(read_xapic_id(), phys_cpu_present_map);
 }
 
-static unsigned int flat_cpu_mask_to_apicid(const struct cpumask *cpumask)
-{
-	return cpumask_bits(cpumask)[0] & APIC_ALL_CPUS;
-}
-
-static unsigned int flat_cpu_mask_to_apicid_and(const struct cpumask *cpumask,
-						const struct cpumask *andmask)
-{
-	unsigned long mask1 = cpumask_bits(cpumask)[0] & APIC_ALL_CPUS;
-	unsigned long mask2 = cpumask_bits(andmask)[0] & APIC_ALL_CPUS;
-
-	return mask1 & mask2;
-}
-
 static int flat_phys_pkg_id(int initial_apic_id, int index_msb)
 {
 	return hard_smp_processor_id() >> index_msb;
@@ -213,8 +199,8 @@ struct apic apic_flat =  {
 	.set_apic_id			= set_apic_id,
 	.apic_id_mask			= 0xFFu << 24,
 
-	.cpu_mask_to_apicid		= flat_cpu_mask_to_apicid,
-	.cpu_mask_to_apicid_and		= flat_cpu_mask_to_apicid_and,
+	.cpu_mask_to_apicid		= default_cpu_mask_to_apicid,
+	.cpu_mask_to_apicid_and		= default_cpu_mask_to_apicid_and,
 
 	.send_IPI_mask			= flat_send_IPI_mask,
 	.send_IPI_mask_allbutself	= flat_send_IPI_mask_allbutself,

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 3/3] x86: Correct behaviour of irq affinity
  2009-03-24 21:15     ` [PATCH 1/3] " Yinghai Lu
  2009-03-24 21:16       ` [PATCH 2/3] x86: use default_cpu_mask_to_apicid for 64bit Yinghai Lu
@ 2009-03-24 21:17       ` Yinghai Lu
  2009-03-24 21:30         ` [tip:x86/apic] " Rusty Russell
  2009-03-25 17:51         ` Rusty Russell
  1 sibling, 2 replies; 19+ messages in thread
From: Yinghai Lu @ 2009-03-24 21:17 UTC (permalink / raw)
  To: Ingo Molnar, Eric W. Biederman, Rusty Russell
  Cc: linux-kernel, Thomas Gleixner, H. Peter Anvin, Andrew Morton

From: Rusty Russell <rusty@rustcorp.com.au>

Impact: get correct smp_affinity as user requested

The effect of setting desc->affinity (ie. from userspace via sysfs) has varied
over time.  In 2.6.27, the 32-bit code anded the value with cpu_online_map,
and both 32 and 64-bit did that anding whenever a cpu was unplugged.

2.6.29 consolidated this into one routine (and fixed hotplug) but introduced
another variation: anding the affinity with cfg->domain.  Is this right, or
should we just set it to what the user said?  Or as now, indicate that we're
restricting it.

If we should change it, here's what the patch looks like against x86 tip
(cpu_mask_to_apicid_and already takes cpu_online_mask into account)

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Acked-by: "Eric W. Biederman" <ebiederm@xmission.com>

---
 arch/x86/kernel/apic/io_apic.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Index: linux-2.6/arch/x86/kernel/apic/io_apic.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/apic/io_apic.c
+++ linux-2.6/arch/x86/kernel/apic/io_apic.c
@@ -594,9 +594,10 @@ set_desc_affinity(struct irq_desc *desc,
 
 	/* check that before desc->addinity get updated */
 	set_extra_move_desc(desc, mask);
-	cpumask_and(desc->affinity, cfg->domain, mask);
 
-	return apic->cpu_mask_to_apicid_and(desc->affinity, cpu_online_mask);
+	cpumask_copy(desc->affinity, mask);
+
+	return apic->cpu_mask_to_apicid_and(desc->affinity, cfg->cpu_domain);
 }
 
 static void

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [tip:x86/apic] x86: use default_cpu_mask_to_apicid for 64bit
  2009-03-24 21:16       ` [PATCH 2/3] x86: use default_cpu_mask_to_apicid for 64bit Yinghai Lu
@ 2009-03-24 21:30         ` Yinghai Lu
  2009-03-24 21:34           ` Ingo Molnar
  0 siblings, 1 reply; 19+ messages in thread
From: Yinghai Lu @ 2009-03-24 21:30 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, hpa, mingo, yinghai, rusty, ebiederm, akpm, tglx,
	mingo

Commit-ID:  f56e5034121c4911a155ba907076ab920754626d
Gitweb:     http://git.kernel.org/tip/f56e5034121c4911a155ba907076ab920754626d
Author:     Yinghai Lu <yinghai@kernel.org>
AuthorDate: Tue, 24 Mar 2009 14:16:30 -0700
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Tue, 24 Mar 2009 22:28:38 +0100

x86: use default_cpu_mask_to_apicid for 64bit

Impact: cleanup

Use online_mask directly on 64bit too.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
LKML-Reference: <49C94DAE.9070300@kernel.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>


---
 arch/x86/include/asm/apic.h         |   20 ++++++++++----------
 arch/x86/kernel/apic/apic_flat_64.c |   18 ++----------------
 2 files changed, 12 insertions(+), 26 deletions(-)

diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h
index 00f5962..130a9e2 100644
--- a/arch/x86/include/asm/apic.h
+++ b/arch/x86/include/asm/apic.h
@@ -489,10 +489,19 @@ static inline int default_apic_id_registered(void)
 	return physid_isset(read_apic_id(), phys_cpu_present_map);
 }
 
+static inline int default_phys_pkg_id(int cpuid_apic, int index_msb)
+{
+	return cpuid_apic >> index_msb;
+}
+
+extern int default_apicid_to_node(int logical_apicid);
+
+#endif
+
 static inline unsigned int
 default_cpu_mask_to_apicid(const struct cpumask *cpumask)
 {
-	return cpumask_bits(cpumask)[0];
+	return cpumask_bits(cpumask)[0] & APIC_ALL_CPUS;
 }
 
 static inline unsigned int
@@ -506,15 +515,6 @@ default_cpu_mask_to_apicid_and(const struct cpumask *cpumask,
 	return (unsigned int)(mask1 & mask2 & mask3);
 }
 
-static inline int default_phys_pkg_id(int cpuid_apic, int index_msb)
-{
-	return cpuid_apic >> index_msb;
-}
-
-extern int default_apicid_to_node(int logical_apicid);
-
-#endif
-
 static inline unsigned long default_check_apicid_used(physid_mask_t bitmap, int apicid)
 {
 	return physid_isset(apicid, bitmap);
diff --git a/arch/x86/kernel/apic/apic_flat_64.c b/arch/x86/kernel/apic/apic_flat_64.c
index f933822..0014714 100644
--- a/arch/x86/kernel/apic/apic_flat_64.c
+++ b/arch/x86/kernel/apic/apic_flat_64.c
@@ -159,20 +159,6 @@ static int flat_apic_id_registered(void)
 	return physid_isset(read_xapic_id(), phys_cpu_present_map);
 }
 
-static unsigned int flat_cpu_mask_to_apicid(const struct cpumask *cpumask)
-{
-	return cpumask_bits(cpumask)[0] & APIC_ALL_CPUS;
-}
-
-static unsigned int flat_cpu_mask_to_apicid_and(const struct cpumask *cpumask,
-						const struct cpumask *andmask)
-{
-	unsigned long mask1 = cpumask_bits(cpumask)[0] & APIC_ALL_CPUS;
-	unsigned long mask2 = cpumask_bits(andmask)[0] & APIC_ALL_CPUS;
-
-	return mask1 & mask2;
-}
-
 static int flat_phys_pkg_id(int initial_apic_id, int index_msb)
 {
 	return hard_smp_processor_id() >> index_msb;
@@ -213,8 +199,8 @@ struct apic apic_flat =  {
 	.set_apic_id			= set_apic_id,
 	.apic_id_mask			= 0xFFu << 24,
 
-	.cpu_mask_to_apicid		= flat_cpu_mask_to_apicid,
-	.cpu_mask_to_apicid_and		= flat_cpu_mask_to_apicid_and,
+	.cpu_mask_to_apicid		= default_cpu_mask_to_apicid,
+	.cpu_mask_to_apicid_and		= default_cpu_mask_to_apicid_and,
 
 	.send_IPI_mask			= flat_send_IPI_mask,
 	.send_IPI_mask_allbutself	= flat_send_IPI_mask_allbutself,

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [tip:x86/apic] x86: Correct behaviour of irq affinity
  2009-03-24 21:17       ` [PATCH 3/3] x86: Correct behaviour of irq affinity Yinghai Lu
@ 2009-03-24 21:30         ` Rusty Russell
  2009-03-25 17:51         ` Rusty Russell
  1 sibling, 0 replies; 19+ messages in thread
From: Rusty Russell @ 2009-03-24 21:30 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, hpa, mingo, yinghai, rusty, ebiederm, akpm, tglx,
	mingo

Commit-ID:  85a328f27b927e3f42563c76e1a6992068100433
Gitweb:     http://git.kernel.org/tip/85a328f27b927e3f42563c76e1a6992068100433
Author:     Rusty Russell <rusty@rustcorp.com.au>
AuthorDate: Tue, 24 Mar 2009 14:17:19 -0700
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Tue, 24 Mar 2009 22:28:39 +0100

x86: Correct behaviour of irq affinity

Impact: get correct smp_affinity as user requested

The effect of setting desc->affinity (ie. from userspace via sysfs) has
varied over time.  In 2.6.27, the 32-bit code anded the value with
cpu_online_map, and both 32 and 64-bit did that anding whenever a cpu
was unplugged.

2.6.29 consolidated this into one routine (and fixed hotplug) but
introduced another variation: anding the affinity with cfg->domain.

We should just set it to what the user said - if possible.

(cpu_mask_to_apicid_and already takes cpu_online_mask into account)

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Acked-by: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
LKML-Reference: <49C94DDF.2010703@kernel.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>


---
 arch/x86/kernel/apic/io_apic.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 1ed6c06..91476aa 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -594,9 +594,10 @@ set_desc_affinity(struct irq_desc *desc, const struct cpumask *mask)
 
 	/* check that before desc->addinity get updated */
 	set_extra_move_desc(desc, mask);
-	cpumask_and(desc->affinity, cfg->domain, mask);
 
-	return apic->cpu_mask_to_apicid_and(desc->affinity, cpu_online_mask);
+	cpumask_copy(desc->affinity, mask);
+
+	return apic->cpu_mask_to_apicid_and(desc->affinity, cfg->cpu_domain);
 }
 
 static void

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [tip:x86/apic] x86: use default_cpu_mask_to_apicid for 64bit
  2009-03-24 21:30         ` [tip:x86/apic] " Yinghai Lu
@ 2009-03-24 21:34           ` Ingo Molnar
  2009-03-24 21:42             ` [PATCH 3/3] x86: Correct behaviour of irq affinity -v2 Yinghai Lu
  0 siblings, 1 reply; 19+ messages in thread
From: Ingo Molnar @ 2009-03-24 21:34 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: linux-tip-commits, linux-kernel, hpa, mingo, rusty, ebiederm,
	akpm, tglx


build failure:

arch/x86/kernel/apic/io_apic.c:600: error: ‘struct irq_cfg’ has no member named ‘cpu_domain’

	Ingo

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 3/3] x86: Correct behaviour of irq affinity -v2
  2009-03-24 21:34           ` Ingo Molnar
@ 2009-03-24 21:42             ` Yinghai Lu
  0 siblings, 0 replies; 19+ messages in thread
From: Yinghai Lu @ 2009-03-24 21:42 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-tip-commits, linux-kernel, hpa, mingo, rusty, ebiederm,
	akpm, tglx

From: Rusty Russell <rusty@rustcorp.com.au>

Impact: get correct smp_affinity as user requested

The effect of setting desc->affinity (ie. from userspace via sysfs) has varied
over time.  In 2.6.27, the 32-bit code anded the value with cpu_online_map,
and both 32 and 64-bit did that anding whenever a cpu was unplugged.

2.6.29 consolidated this into one routine (and fixed hotplug) but introduced
another variation: anding the affinity with cfg->domain.  Is this right, or
should we just set it to what the user said?  Or as now, indicate that we're
restricting it.

If we should change it, here's what the patch looks like against x86 tip
(cpu_mask_to_apicid_and already takes cpu_online_mask into account)

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Acked-by: "Eric W. Biederman" <ebiederm@xmission.com>

---
 arch/x86/kernel/apic/io_apic.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Index: linux-2.6/arch/x86/kernel/apic/io_apic.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/apic/io_apic.c
+++ linux-2.6/arch/x86/kernel/apic/io_apic.c
@@ -594,9 +594,10 @@ set_desc_affinity(struct irq_desc *desc,
 
 	/* check that before desc->addinity get updated */
 	set_extra_move_desc(desc, mask);
-	cpumask_and(desc->affinity, cfg->domain, mask);
 
-	return apic->cpu_mask_to_apicid_and(desc->affinity, cpu_online_mask);
+	cpumask_copy(desc->affinity, mask);
+
+	return apic->cpu_mask_to_apicid_and(desc->affinity, cfg->domain);
 }
 
 static void

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [RFC] Correct behaviour of irq affinity?
  2009-03-24 12:39 ` Eric W. Biederman
  2009-03-24 19:49   ` Yinghai Lu
  2009-03-24 20:23   ` [PATCH] x86: fix set_extra_move_desc calling Yinghai Lu
@ 2009-03-25  0:33   ` Rusty Russell
  2009-03-25  0:59     ` Rusty Russell
  2 siblings, 1 reply; 19+ messages in thread
From: Rusty Russell @ 2009-03-25  0:33 UTC (permalink / raw)
  To: Eric W. Biederman; +Cc: x86, linux-kernel, Yinghai Lu, Ingo Molnar

On Tuesday 24 March 2009 23:09:37 Eric W. Biederman wrote:
> desc->affinity should be what the user requested, if it is at all
> possible to honor the user space request.  YH the fact that we do not
> currently exercise the full freedom that user space gives us is
> irrelevant.

Yep, OK.

> YH has a point that several of the implementations of
> cpu_mask_to_apic_id do not take cpu_online_map into account and should
> probably be fixed.  flat_cpu_mask_to_apicid was the one I could find.

Also the numaq apic.h.  I'll do an audit and send a patch.

> Also now that I look at it there is one other bug in this routine
> that you have missed.  set_extra_move_desc should be called before
> we set desc->affinity, as it compares that with the new value to
> see if we are going to be running on a new cpu, and if so we may
> need to reallocate irq_desc onto a new numa node.  set_extra_move_desc
> looks a little fishy but it doesn't stand a chance if it is called
> with the wrong data.

Yes, agree with Yinghai's fix.  I'll re-spin my patch on top of his.

Thanks for looking at this!
Rusty.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [RFC] Correct behaviour of irq affinity?
  2009-03-25  0:33   ` [RFC] Correct behaviour of irq affinity? Rusty Russell
@ 2009-03-25  0:59     ` Rusty Russell
  2009-03-25  1:03       ` Yinghai Lu
  0 siblings, 1 reply; 19+ messages in thread
From: Rusty Russell @ 2009-03-25  0:59 UTC (permalink / raw)
  To: Eric W. Biederman; +Cc: x86, linux-kernel, Yinghai Lu, Ingo Molnar

On Wednesday 25 March 2009 11:03:08 Rusty Russell wrote:
> On Tuesday 24 March 2009 23:09:37 Eric W. Biederman wrote:
> > cpu_mask_to_apic_id do not take cpu_online_map into account and should
> > probably be fixed.  flat_cpu_mask_to_apicid was the one I could find.
> 
> Also the numaq apic.h.  I'll do an audit and send a patch.

Actually, numaq is just weird, so I'll assume it's correct.  I couldn't
find any others.

> Yes, agree with Yinghai's fix.  I'll re-spin my patch on top of his.

But he already did it while I slept in.

Thanks Yinghai!
Rusty.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [RFC] Correct behaviour of irq affinity?
  2009-03-25  0:59     ` Rusty Russell
@ 2009-03-25  1:03       ` Yinghai Lu
  0 siblings, 0 replies; 19+ messages in thread
From: Yinghai Lu @ 2009-03-25  1:03 UTC (permalink / raw)
  To: Rusty Russell; +Cc: Eric W. Biederman, x86, linux-kernel, Ingo Molnar

Rusty Russell wrote:
> On Wednesday 25 March 2009 11:03:08 Rusty Russell wrote:
>> On Tuesday 24 March 2009 23:09:37 Eric W. Biederman wrote:
>>> cpu_mask_to_apic_id do not take cpu_online_map into account and should
>>> probably be fixed.  flat_cpu_mask_to_apicid was the one I could find.
>> Also the numaq apic.h.  I'll do an audit and send a patch.
> 
> Actually, numaq is just weird, so I'll assume it's correct.  I couldn't
> find any others.
> 
>> Yes, agree with Yinghai's fix.  I'll re-spin my patch on top of his.
> 
> But he already did it while I slept in.
> 

waiting for ingo to put that three into tip/master:

[PATCH 1/3] x86: fix set_extra_move_desc calling
[PATCH 2/3] x86: use default_cpu_mask_to_apicid for 64bit
[PATCH 3/3] x86: Correct behaviour of irq affinity -v2

YH

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [tip:x86/apic] x86: Correct behaviour of irq affinity
  2009-03-24 21:17       ` [PATCH 3/3] x86: Correct behaviour of irq affinity Yinghai Lu
  2009-03-24 21:30         ` [tip:x86/apic] " Rusty Russell
@ 2009-03-25 17:51         ` Rusty Russell
  1 sibling, 0 replies; 19+ messages in thread
From: Rusty Russell @ 2009-03-25 17:51 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, hpa, mingo, yinghai, rusty, ebiederm, akpm, tglx,
	mingo

Commit-ID:  e06b1b56f9bfcc91e1f175fe8d8bf3e35dafa080
Gitweb:     http://git.kernel.org/tip/e06b1b56f9bfcc91e1f175fe8d8bf3e35dafa080
Author:     Rusty Russell <rusty@rustcorp.com.au>
AuthorDate: Tue, 24 Mar 2009 14:17:19 -0700
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Wed, 25 Mar 2009 18:48:29 +0100

x86: Correct behaviour of irq affinity

Impact: get correct smp_affinity as user requested

The effect of setting desc->affinity (ie. from userspace via sysfs) has
varied over time.  In 2.6.27, the 32-bit code anded the value with
cpu_online_map, and both 32 and 64-bit did that anding whenever a cpu
was unplugged.

2.6.29 consolidated this into one routine (and fixed hotplug) but
introduced another variation: anding the affinity with cfg->domain.

We should just set it to what the user said - if possible.

(cpu_mask_to_apicid_and already takes cpu_online_mask into account)

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Acked-by: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
LKML-Reference: <49C94DDF.2010703@kernel.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>


---
 arch/x86/kernel/apic/io_apic.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 1ed6c06..d990408 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -594,9 +594,10 @@ set_desc_affinity(struct irq_desc *desc, const struct cpumask *mask)
 
 	/* check that before desc->addinity get updated */
 	set_extra_move_desc(desc, mask);
-	cpumask_and(desc->affinity, cfg->domain, mask);
 
-	return apic->cpu_mask_to_apicid_and(desc->affinity, cpu_online_mask);
+	cpumask_copy(desc->affinity, mask);
+
+	return apic->cpu_mask_to_apicid_and(desc->affinity, cfg->domain);
 }
 
 static void

^ permalink raw reply related	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2009-03-25 17:55 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-24  5:49 [RFC] Correct behaviour of irq affinity? Rusty Russell
2009-03-24  7:21 ` Yinghai Lu
2009-03-24 12:52   ` Rusty Russell
2009-03-24 20:36     ` Yinghai Lu
2009-03-24 12:39 ` Eric W. Biederman
2009-03-24 19:49   ` Yinghai Lu
2009-03-24 20:23   ` [PATCH] x86: fix set_extra_move_desc calling Yinghai Lu
2009-03-24 21:15     ` [tip:x86/apic] " Yinghai Lu
2009-03-24 21:15     ` [PATCH 1/3] " Yinghai Lu
2009-03-24 21:16       ` [PATCH 2/3] x86: use default_cpu_mask_to_apicid for 64bit Yinghai Lu
2009-03-24 21:30         ` [tip:x86/apic] " Yinghai Lu
2009-03-24 21:34           ` Ingo Molnar
2009-03-24 21:42             ` [PATCH 3/3] x86: Correct behaviour of irq affinity -v2 Yinghai Lu
2009-03-24 21:17       ` [PATCH 3/3] x86: Correct behaviour of irq affinity Yinghai Lu
2009-03-24 21:30         ` [tip:x86/apic] " Rusty Russell
2009-03-25 17:51         ` Rusty Russell
2009-03-25  0:33   ` [RFC] Correct behaviour of irq affinity? Rusty Russell
2009-03-25  0:59     ` Rusty Russell
2009-03-25  1:03       ` Yinghai Lu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox