[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 01/10] x86/HVM: Introduce struct hvm_pi_ops
>>> On 10.01.17 at 07:51, <Suravee.Suthikulpanit@xxxxxxx> wrote: > On 01/05/2017 10:51 PM, Jan Beulich wrote: >>>>> On 31.12.16 at 06:45, <suravee.suthikulpanit@xxxxxxx> wrote: >>> --- a/xen/include/asm-x86/hvm/domain.h >>> +++ b/xen/include/asm-x86/hvm/domain.h >>> @@ -72,6 +72,67 @@ struct hvm_ioreq_server { >>> bool_t bufioreq_atomic; >>> }; >>> >>> +struct hvm_pi_ops { >>> + /* >>> + * To handle posted interrupts correctly, we need to set the following >>> + * state: >>> + * >>> + * * The PI notification vector (NV) >>> + * * The PI notification destination processor (NDST) >>> + * * The PI "suppress notification" bit (SN) >>> + * * The vcpu pi "blocked" list >>> + * >>> + * If a VM is currently running, we want the PI delivered to the guest >>> vcpu >>> + * on the proper pcpu (NDST = v->processor, SN clear). >>> + * >>> + * If the vm is blocked, we want the PI delivered to Xen so that it can >>> + * wake it up (SN clear, NV = pi_wakeup_vector, vcpu on block list). >>> + * >>> + * If the VM is currently either preempted or offline (i.e., not >>> running >>> + * because of some reason other than blocking waiting for an >>> interrupt), >>> + * there's nothing Xen can do -- we want the interrupt pending bit set >>> in >>> + * the guest, but we don't want to bother Xen with an interrupt (SN >>> clear). >>> + * >>> + * There's a brief window of time between vmx_intr_assist() and >>> checking >>> + * softirqs where if an interrupt comes in it may be lost; so we need >>> Xen >>> + * to get an interrupt and raise a softirq so that it will go through >>> the >>> + * vmx_intr_assist() path again (SN clear, NV = posted_interrupt). >>> + * >>> + * The way we implement this now is by looking at what needs to happen >>> on >>> + * the following runstate transitions: >>> + * >>> + * A: runnable -> running >>> + * - SN = 0 >>> + * - NDST = v->processor >>> + * B: running -> runnable >>> + * - SN = 1 >>> + * C: running -> blocked >>> + * - NV = pi_wakeup_vector >>> + * - Add vcpu to blocked list >>> + * D: blocked -> runnable >>> + * - NV = posted_intr_vector >>> + * - Take vcpu off blocked list >>> + * >>> + * For transitions A and B, we add hooks into vmx_ctxt_switch_{from,to} >>> + * paths. >>> + * >>> + * For transition C, we add a new arch hook, arch_vcpu_block(), which >>> is >>> + * called from vcpu_block() and vcpu_do_poll(). >>> + * >>> + * For transition D, rather than add an extra arch hook on vcpu_wake, >>> we >>> + * add a hook on the vmentry path which checks to see if either of the >>> two >>> + * actions need to be taken. >>> + * >>> + * These hooks only need to be called when the domain in question >>> actually >>> + * has a physical device assigned to it, so we set and clear the >>> callbacks >>> + * as appropriate when device assignment changes. >>> + */ >>> + void (*vcpu_block) (struct vcpu *); >>> + void (*pi_switch_from) (struct vcpu *v); >>> + void (*pi_switch_to) (struct vcpu *v); >>> + void (*pi_do_resume) (struct vcpu *v); >>> +}; >> >> While the hooks (as said, with the pi_ prefixes dropped) are >> certainly fine to move here, the comment is extremely VMX >> centric, and hence doesn't fit in this file. It either needs to be >> generalized, or it should remain in VMX specific code, perhaps >> with a referral to it added here. > > I see. I will move the comment into arch/x86/hvm/vmx/vmx.c close to > where these hooks are implemented. So you see no way of generalizing it? (I confess I didn't look closely enough yet at the [dis]similarities between VMX/VT-d PI and AVIC to be able to easily tell myself.) Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |