|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86/apic/x2apic: Share IRQ vector between cluster members only when no cpumask is specified
>>>> @@ -72,9 +73,13 @@ static void __init clustered_apic_check_x2apic(void)
>>>> {
>>>> }
>>> >
>>>> -static const cpumask_t *vector_allocation_cpumask_x2apic_cluster(int cpu)
>>>> +static const cpumask_t *vector_allocation_cpumask_x2apic_cluster(int cpu,
>>>> + const cpumask_t *cpumask)
>>>> {
>>>> - return per_cpu(cluster_cpus, cpu);
>>>> + if ( cpumask != TARGET_CPUS )
>>> Is a pointer comparison (rather than a content one) here really correct in
>>> the general case?
>> When the caller is using TARGET_CPUS this is an indication that it
>> explicitly didn't care about sharing (in assign_irq_vector()). A caller
>> might want to have sharing on and provide a mask that has the same
>> content as TARGET_CPUS but is stored in a different location. This will
>> allow vector_allocation_cpumask_x2apic_cluster() to distinguish it from
>> a "don't care" case.
> Yes, I can see that intention. But you still wouldn't e.g. distinguish a
> caller
> using TARGET_CPUS() from one passing &cpu_online_map.
True.
>
>>>> --- a/xen/include/asm-x86/mach-generic/mach_apic.h
>>>> +++ b/xen/include/asm-x86/mach-generic/mach_apic.h
>>>> @@ -13,10 +13,11 @@
>>>> #define INT_DELIVERY_MODE (genapic->int_delivery_mode)
>>>> #define INT_DEST_MODE (genapic->int_dest_mode)
>>>> #define TARGET_CPUS (genapic->target_cpus())
>>>> -#define init_apic_ldr (genapic->init_apic_ldr)
>>>> -#define clustered_apic_check (genapic->clustered_apic_check)
>>>> -#define cpu_mask_to_apicid (genapic->cpu_mask_to_apicid)
>>>> -#define vector_allocation_cpumask(cpu)
>>>> (genapic->vector_allocation_cpumask(cpu))
>>>> +#define INIT_APIC_LDR (genapic->init_apic_ldr)
>>>> +#define CLUSTERED_APIC_CHECK (genapic->clustered_apic_check)
>>>> +#define CPU_MASK_TO_APICID (genapic->cpu_mask_to_apicid)
>>>> +#define VECTOR_ALLOCATION_CPUMASK(cpu, mask) \
>>>> + (genapic->vector_allocation_cpumask(cpu, mask))
>>>
>>> I don't see the connection of the change in case of all of these to the
>>> purpose
>>> of this patch.
>> I need to include asm-x86/mach-generic/mach_apic.h in x2apic.c and
> That's solely because of the use of TARGET_CPUS, isn't it? With the above
> comment in mind, this could equally well be &cpu_online_map I think, making
> explicit what is implicit right now.
Yes, but it it won't prevent a caller from explicitly passing
&cpu_online_map neither.
How about allowing assign_irq_vector() pass NULL mask to
__assign_irq_vector() (I think this is the only place where it matters)?
__assign_irq_vector() can then turn it into TARGET_CPUS and pass NULL to
vector_allocation_cpumask().
-boris
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |