From: George Dunlap <george.dunlap@citrix.com>
To: Jan Beulich <JBeulich@suse.com>,
George Dunlap <George.Dunlap@eu.citrix.com>
Cc: Kevin Tian <kevin.tian@intel.com>, Keir Fraser <keir@xen.org>,
Andrew Cooper <andrew.cooper3@citrix.com>,
Dario Faggioli <dario.faggioli@citrix.com>,
"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
Feng Wu <feng.wu@intel.com>
Subject: Re: [PATCH v6 16/18] vmx: Add some scheduler hooks for VT-d posted interrupts
Date: Mon, 21 Sep 2015 10:28:35 +0100 [thread overview]
Message-ID: <55FFCDC3.8060305@citrix.com> (raw)
In-Reply-To: <55FFDA9F02000078000A3CF6@prv-mh.provo.novell.com>
On 09/21/2015 09:23 AM, Jan Beulich wrote:
>>>> On 16.09.15 at 18:56, <George.Dunlap@eu.citrix.com> wrote:
>> On Mon, Sep 7, 2015 at 1:54 PM, Jan Beulich <JBeulich@suse.com> wrote:
>>>>>> On 25.08.15 at 03:57, <feng.wu@intel.com> wrote:
>>>> --- a/xen/arch/x86/domain.c
>>>> +++ b/xen/arch/x86/domain.c
>>>> @@ -1573,6 +1573,22 @@ static void __context_switch(void)
>>>> per_cpu(curr_vcpu, cpu) = n;
>>>> }
>>>>
>>>> +static inline void pi_ctxt_switch_from(struct vcpu *prev)
>>>> +{
>>>> + /*
>>>> + * When switching from non-idle to idle, we only do a lazy context switch.
>>>> + * However, in order for posted interrupt (if available and enabled) to
>>>> + * work properly, we at least need to update the descriptors.
>>>> + */
>>>> + if ( prev->arch.pi_ctxt_switch_from && !is_idle_vcpu(prev) )
>>>> + prev->arch.pi_ctxt_switch_from(prev);
>>>> +}
>>>> +
>>>> +static inline void pi_ctxt_switch_to(struct vcpu *next)
>>>> +{
>>>> + if ( next->arch.pi_ctxt_switch_to && !is_idle_vcpu(next) )
>>>> + next->arch.pi_ctxt_switch_to(next);
>>>> +}
>>>>
>>>> void context_switch(struct vcpu *prev, struct vcpu *next)
>>>> {
>>>> @@ -1605,9 +1621,12 @@ void context_switch(struct vcpu *prev, struct vcpu *next)
>>>>
>>>> set_current(next);
>>>>
>>>> + pi_ctxt_switch_from(prev);
>>>> +
>>>> if ( (per_cpu(curr_vcpu, cpu) == next) ||
>>>> (is_idle_domain(nextd) && cpu_online(cpu)) )
>>>> {
>>>> + pi_ctxt_switch_to(next);
>>>> local_irq_enable();
>>>
>>> This placement, if really intended that way, needs explanation (in a
>>> comment) and perhaps even renaming of the involved symbols, as
>>> looking at it from a general perspective it seems wrong (with
>>> pi_ctxt_switch_to() excluding idle vCPU-s it effectively means you
>>> want this only when switching back to what got switched out lazily
>>> before, i.e. this would be not something to take place on an arbitrary
>>> context switch). As to possible alternative names - maybe make the
>>> hooks ctxt_switch_prepare() and ctxt_switch_cancel()?
>>
>> Why on earth is this more clear than what he had before?
>>
>> In the first call, he's not "preparing" anything -- he's actually
>> switching the PI context out for prev. And in the second call, he's
>> not "cancelling" anything -- he's actually switching the PI context in
>> for next. The names you suggest are actively confusing, not helpful.
>
> While I think later discussion on this thread moved in a good direction,
> I still think I should reply here (even if late): To me, the use of
> pi_ctxt_switch_to() in the patch fragment still seen above is very
> much the cancellation of the immediately preceding pi_ctxt_switch_from(),
> as it's the "we don't want to do anything else" path that it gets put
> into.
Either we have different understandings about what the code does, or I
don't understand what you're saying here.
The codepath in question will only be called if we're switching *into*
or *out of* the "lazy context swtich" -- i.e., switching from a vcpu to
the idle vcpu, but not saving or restoring state.
For the "switch into" case:
* prev will be a domain vcpu, next will be the idle vcpu
* pi_ctxt_switch_from(prev) will either change NV to 'pi_wake' or set SN
for prev's PI vectors (depending on whether prev is blocked or offline)
* pi_ctxt_switch_to(next) will do nothing, since next is the idle vcpu
For the "switching out" case:
* prev will be the idle vcpu, next will be a domain vcpu
* pi_ctxt_switch_from(prev) will do nothing, since prev is the idle vcpu
* pi_ctxt_switch_to(next) will clear SN and change the vector to
'posted_intr'
So there is no situation in which pi_ctxt_switch_to() "cancels" the
immediately preceding pi_ctxt_switch_from(). Either the preceding
from() did something, in which case to() does nothing; or the preceding
from() did nothing, in which case to() does something.
-George
next prev parent reply other threads:[~2015-09-21 9:28 UTC|newest]
Thread overview: 108+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-25 1:57 [PATCH v6 00/18] Add VT-d Posted-Interrupts support Feng Wu
2015-08-25 1:57 ` [PATCH v6 01/18] VT-d Posted-intterrupt (PI) design Feng Wu
2015-08-25 1:57 ` [PATCH v6 02/18] Add cmpxchg16b support for x86-64 Feng Wu
2015-09-04 14:22 ` Jan Beulich
2015-09-06 6:07 ` Wu, Feng
2015-09-06 6:32 ` Wu, Feng
2015-09-07 10:36 ` Jan Beulich
2015-09-08 7:37 ` Wu, Feng
2015-09-08 8:52 ` Jan Beulich
2015-09-08 8:57 ` Wu, Feng
2015-09-08 9:19 ` Jan Beulich
2015-09-08 9:30 ` Wu, Feng
2015-09-07 10:34 ` Jan Beulich
2015-09-07 10:39 ` Jan Beulich
2015-09-04 15:12 ` Jan Beulich
2015-08-25 1:57 ` [PATCH v6 03/18] iommu: Add iommu_intpost to control VT-d Posted-Interrupts feature Feng Wu
2015-09-04 14:26 ` Jan Beulich
2015-08-25 1:57 ` [PATCH v6 04/18] vt-d: VT-d Posted-Interrupts feature detection Feng Wu
2015-09-04 14:31 ` Jan Beulich
2015-09-06 1:49 ` Wu, Feng
2015-09-07 10:43 ` Jan Beulich
2015-09-08 2:35 ` Wu, Feng
2015-09-08 5:18 ` Jan Beulich
2015-08-25 1:57 ` [PATCH v6 05/18] vmx: Extend struct pi_desc to support VT-d Posted-Interrupts Feng Wu
2015-09-04 14:32 ` Jan Beulich
2015-08-25 1:57 ` [PATCH v6 06/18] vmx: Add some helper functions for Posted-Interrupts Feng Wu
2015-09-04 14:40 ` Jan Beulich
2015-09-06 2:05 ` Wu, Feng
2015-09-07 10:46 ` Jan Beulich
2015-09-08 2:39 ` Wu, Feng
2015-09-08 5:22 ` Jan Beulich
2015-08-25 1:57 ` [PATCH v6 07/18] vmx: Initialize VT-d Posted-Interrupts Descriptor Feng Wu
2015-09-04 14:47 ` Jan Beulich
2015-09-06 2:22 ` Wu, Feng
2015-09-07 10:49 ` Jan Beulich
2015-08-25 1:57 ` [PATCH v6 08/18] vmx: Suppress posting interrupts when 'SN' is set Feng Wu
2015-09-04 14:53 ` Jan Beulich
2015-09-06 2:33 ` Wu, Feng
2015-09-07 10:51 ` Jan Beulich
2015-08-25 1:57 ` [PATCH v6 09/18] VT-d: Remove pointless casts Feng Wu
2015-09-04 14:55 ` Jan Beulich
2015-08-25 1:57 ` [PATCH v6 10/18] vt-d: Extend struct iremap_entry to support VT-d Posted-Interrupts Feng Wu
2015-08-25 1:57 ` [PATCH v6 11/18] vt-d: Add API to update IRTE when VT-d PI is used Feng Wu
2015-09-04 15:11 ` Jan Beulich
2015-09-06 5:24 ` Wu, Feng
2015-09-07 10:54 ` Jan Beulich
2015-08-25 1:57 ` [PATCH v6 12/18] x86: move some APIC related macros to apicdef.h Feng Wu
2015-09-04 15:15 ` Jan Beulich
2015-08-25 1:57 ` [PATCH v6 13/18] Update IRTE according to guest interrupt config changes Feng Wu
2015-09-04 15:59 ` Jan Beulich
2015-09-06 4:54 ` Wu, Feng
2015-09-07 11:03 ` Jan Beulich
2015-09-08 4:47 ` Wu, Feng
2015-09-08 9:02 ` Jan Beulich
2015-08-25 1:57 ` [PATCH v6 14/18] vmx: posted-interrupt handling when vCPU is blocked Feng Wu
2015-09-07 11:47 ` Jan Beulich
2015-09-08 8:50 ` Wu, Feng
2015-09-08 9:08 ` Jan Beulich
2015-09-08 9:14 ` Wu, Feng
2015-08-25 1:57 ` [PATCH v6 15/18] vmx: Properly handle notification event when vCPU is running Feng Wu
2015-09-07 12:10 ` Jan Beulich
2015-09-07 13:00 ` Zhang, Yang Z
2015-09-07 13:12 ` Jan Beulich
2015-09-08 1:38 ` Zhang, Yang Z
2015-09-08 8:57 ` Jan Beulich
2015-09-08 5:18 ` Wu, Feng
2015-09-08 9:13 ` Jan Beulich
2015-09-08 9:23 ` Wu, Feng
2015-09-08 9:31 ` Jan Beulich
2015-09-08 9:36 ` Wu, Feng
2015-09-08 10:13 ` Jan Beulich
2015-09-08 10:15 ` Wu, Feng
2015-08-25 1:57 ` [PATCH v6 16/18] vmx: Add some scheduler hooks for VT-d posted interrupts Feng Wu
2015-09-07 12:54 ` Jan Beulich
2015-09-09 8:56 ` Wu, Feng
2015-09-09 10:26 ` Jan Beulich
2015-09-10 2:07 ` Wu, Feng
2015-09-10 8:27 ` Jan Beulich
2015-09-10 8:59 ` Wu, Feng
2015-09-10 9:26 ` Jan Beulich
2015-09-10 9:41 ` Wu, Feng
2015-09-10 10:01 ` Jan Beulich
2015-09-10 12:34 ` Wu, Feng
2015-09-10 12:44 ` Jan Beulich
2015-09-10 12:58 ` Wu, Feng
2015-09-10 13:15 ` Jan Beulich
2015-09-10 13:27 ` Wu, Feng
2015-09-10 14:01 ` Jan Beulich
2015-09-16 8:56 ` Wu, Feng
2015-09-16 17:08 ` George Dunlap
2015-09-17 6:26 ` Wu, Feng
2015-09-16 16:56 ` George Dunlap
2015-09-17 6:15 ` Wu, Feng
2015-09-21 8:23 ` Jan Beulich
2015-09-21 9:28 ` George Dunlap [this message]
2015-09-21 11:56 ` Jan Beulich
2015-08-25 1:57 ` [PATCH v6 17/18] VT-d: Dump the posted format IRTE Feng Wu
2015-09-07 13:04 ` Jan Beulich
2015-09-08 5:38 ` Wu, Feng
2015-09-08 9:16 ` Jan Beulich
2015-08-25 1:57 ` [PATCH v6 18/18] Add a command line parameter for VT-d posted-interrupts Feng Wu
2015-09-07 13:05 ` Jan Beulich
2015-09-01 5:13 ` [PATCH v6 00/18] Add VT-d Posted-Interrupts support Wu, Feng
2015-09-01 5:20 ` Jan Beulich
2015-09-01 5:32 ` Wu, Feng
-- strict thread matches above, loose matches on Subject: below --
2015-09-21 5:07 [PATCH v6 16/18] vmx: Add some scheduler hooks for VT-d posted interrupts Wu, Feng
2015-09-21 9:45 ` George Dunlap
2015-09-21 12:07 ` Wu, Feng
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=55FFCDC3.8060305@citrix.com \
--to=george.dunlap@citrix.com \
--cc=George.Dunlap@eu.citrix.com \
--cc=JBeulich@suse.com \
--cc=andrew.cooper3@citrix.com \
--cc=dario.faggioli@citrix.com \
--cc=feng.wu@intel.com \
--cc=keir@xen.org \
--cc=kevin.tian@intel.com \
--cc=xen-devel@lists.xen.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.