[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2] x86/x2apic: introduce a mixed physical/cluster mode


  • To: Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Fri, 3 Nov 2023 15:25:29 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=R3X8e0fu4vthgi4zigQbWNAthBBLrp+q2J+crtzxxaA=; b=DOKICPZwZ7w/cScfN8AgMOsXtUwR9uYs+Y3GHcgOQcmyNM43OYGHoPwIo55KtF310JBGsrEEXY75jZoKKgzNA9nL0oa3RgHxGqbSJzTAWiTWipHg6ahtW8/SYNGDCgXsW38ZTEfPLGeNHOEjqht7Xdvcu6FSAc9gGrzkpsJI1A27OJ27m8p/4EnJmT+37RfnWSwAiS35CGAV9e1fHbv8bglnzPHFLlx58mr4oJ9VBIHsXuYZFCb2CelneV07riDjCGtIoCFHdiEy4EHBnbzclVqnyS6MLAuxwYi6yw8jKfPTI/Pr/kZweet1ab1jZPaoW3J65ATp8YgLjlP4de6nTA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Xa+NptrlU20MtQC6rfkC601ssInUObVffj6tC7iKTi4b21+anX3kjx7CMyvp/Z0WrSj8DC5Cqc5dmCikitJoVzrlNPcUlwMMUSJT5wYybwV+dtERoTzgZ8nunBEvTQ1RozWIN65U9pMMHsNxGyOaOOqzzGS1upSAlBqug2uWfchxTgYBblbp/3dRctBKf7u3/uUyo2w6qOOKEpxIL05J3Mj8AiqcecJrEgBfmUE5d51XUuzZSQmWgQxQXSohcGRg0yn0lNlfOf/MlMxnKQWOovVZHEWKLFUn6udFJGer92rokZUEgajpxWWEMNzSeaSOfG0KULQPuZZzEzWTrRwVxw==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com;
  • Cc: Henry Wang <Henry.Wang@xxxxxxx>, Community Manager <community.manager@xxxxxxxxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, George Dunlap <george.dunlap@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • Delivery-date: Fri, 03 Nov 2023 14:25:55 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 03.11.2023 14:41, Roger Pau Monné wrote:
> On Fri, Nov 03, 2023 at 01:51:13PM +0100, Jan Beulich wrote:
>> On 03.11.2023 13:48, Roger Pau Monné wrote:
>>> On Thu, Nov 02, 2023 at 02:38:09PM +0100, Jan Beulich wrote:
>>>> On 31.10.2023 15:52, Roger Pau Monne wrote:
>>>>> --- a/xen/arch/x86/genapic/x2apic.c
>>>>> +++ b/xen/arch/x86/genapic/x2apic.c
>>>>> @@ -180,6 +180,29 @@ static const struct genapic __initconstrel 
>>>>> apic_x2apic_cluster = {
>>>>>      .send_IPI_self = send_IPI_self_x2apic
>>>>>  };
>>>>>  
>>>>> +/*
>>>>> + * Mixed x2APIC mode: use physical for external (device) interrupts, and
>>>>> + * cluster for inter processor interrupts.  Such mode has the benefits 
>>>>> of not
>>>>> + * sharing the vector space with all CPUs on the cluster, while still 
>>>>> allowing
>>>>> + * IPIs to be more efficiently delivered by not having to perform an ICR 
>>>>> write
>>>>> + * for each target CPU.
>>>>> + */
>>>>> +static const struct genapic __initconstrel apic_x2apic_mixed = {
>>>>> +    APIC_INIT("x2apic_mixed", NULL),
>>>>> +    /*
>>>>> +     * NB: IPIs use the send_IPI_{mask,self} hooks only, other fields are
>>>>> +     * exclusively used by external interrupts and hence are set to use
>>>>> +     * Physical destination mode handlers.
>>>>> +     */
>>>>> +    .int_delivery_mode = dest_Fixed,
>>>>> +    .int_dest_mode = 0 /* physical delivery */,
>>>>> +    .init_apic_ldr = init_apic_ldr_x2apic_cluster,
>>>>> +    .vector_allocation_cpumask = vector_allocation_cpumask_phys,
>>>>> +    .cpu_mask_to_apicid = cpu_mask_to_apicid_phys,
>>>>> +    .send_IPI_mask = send_IPI_mask_x2apic_cluster,
>>>>> +    .send_IPI_self = send_IPI_self_x2apic
>>>>> +};
>>>>
>>>> I'm afraid the comment is still misleading in one respect: The 
>>>> .init_apic_ldr
>>>> hook is also set to its Clustered mode handler (and validly so). As before 
>>>> my
>>>> suggestion would be to leverage that we're using dedicated initializers 
>>>> here
>>>> and have a Physical mode portion and a Clustered mode one, each clarifying 
>>>> in
>>>> a brief leading comment where/how the handlers are used.
>>>
>>> I've split this as:
>>>
>>> /*
>>>  * Mixed x2APIC mode: use physical for external (device) interrupts, and
>>>  * cluster for inter processor interrupts.  Such mode has the benefits of 
>>> not
>>>  * sharing the vector space with all CPUs on the cluster, while still 
>>> allowing
>>>  * IPIs to be more efficiently delivered by not having to perform an ICR 
>>> write
>>>  * for each target CPU.
>>>  */
>>> static const struct genapic __initconstrel apic_x2apic_mixed = {
>>>     APIC_INIT("x2apic_mixed", NULL),
>>>     /*
>>>      * The following fields are exclusively used by external interrupts and
>>>      * hence are set to use Physical destination mode handlers.
>>>      */
>>>     .int_delivery_mode = dest_Fixed,
>>>     .int_dest_mode = 0 /* physical delivery */,
>>>     .vector_allocation_cpumask = vector_allocation_cpumask_phys,
>>>     .cpu_mask_to_apicid = cpu_mask_to_apicid_phys,
>>>     /*
>>>      * The following fields are exclusively used by IPIs and hence are set 
>>> to
>>>      * use Cluster Logical destination mode handlers.  Note that 
>>> init_apic_ldr
>>>      * is not used by IPIs,
>>
>> Not quite correct, I think: This is setting up the receive side of the IPIs
>> (iirc LDR needs to be set for logical delivery mode to be usable). Beyond
>> that lgtm, fwiw.
> 
> No, LDR is read-only in x2APIC mode (it's rw in xAPIC mode).
> init_apic_ldr_x2apic_cluster() just reads LDR, but doesn't set it.

Oh, right, silly me. Perhaps the function could have a better name
(reflecting its purpose, and making more clear that the hook is merely
leveraged for the purpose).

Jan



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.