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

Re: [Xen-devel] [RFC v1 12/15] vmx: Properly handle notification event when vCPU is running



> From: Wu, Feng
> Sent: Friday, March 27, 2015 12:58 PM
> 
> 
> 
> > -----Original Message-----
> > From: Zhang, Yang Z
> > Sent: Friday, March 27, 2015 12:44 PM
> > To: Wu, Feng; xen-devel@xxxxxxxxxxxxx
> > Cc: JBeulich@xxxxxxxx; keir@xxxxxxx; Tian, Kevin
> > Subject: RE: [RFC v1 12/15] vmx: Properly handle notification event when
> vCPU
> > is running
> >
> > Wu, Feng wrote on 2015-03-27:
> > >
> > >
> > > Zhang, Yang Z wrote on 2015-03-25:
> > >> when vCPU is running
> > >>
> > >> Wu, Feng wrote on 2015-03-25:
> > >>> When a vCPU is running in Root mode and a notification event has
> > >>> been injected to it. we need to set VCPU_KICK_SOFTIRQ for the
> > >>> current cpu, so the pending interrupt in PIRR will be synced to
> > >>> vIRR before
> > > VM-Exit in time.
> > >>
> > >> Shouldn't the pending interrupt be synced unconditionally before next
> > >> vmentry? What happens if we didn't set the softirq?
> > >
> > > If we didn't set the softirq in the notification handler, the
> > > interrupts happened exactly before VM-entry cannot be delivered to
> > > guest at this time. Please see the following code fragments from
> > > xen/arch/x86/hvm/vmx/entry.S: (pls pay attention to the comments)
> > >
> > > .Lvmx_do_vmentry
> > >
> > > ......
> > >           /* If Vt-d engine issues a notification event here,
> > >          * it cannot be delivered to guest during this VM-entry
> > >          * without raising the softirq in notification handler. */
> > >         cmp  %ecx,(%rdx,%rax,1)
> > >         jnz  .Lvmx_process_softirqs
> > > ......
> > >
> > >         je   .Lvmx_launch
> > > ......
> > >
> > >
> > > .Lvmx_process_softirqs:
> > >         sti
> > >         call do_softirq
> > >         jmp  .Lvmx_do_vmentry
> >
> > You are right! This helps me to recall why raise the softirq when delivering
> the
> > PI.
> 
> Yes, __vmx_deliver_posted_interrupt() is the software way to deliver PI, it 
> sets
> the
> softirq for this purpose, however, when VT-d HW delivers PI, we have no
> control to
> the HW itself, hence we need to set this softirq in the Notification Event
> handler.
> 

could you include this information in the comment so others can easily
understand this requirement? from code you only mentioned VCPU_KICK
_SOFTIRQ is required, but how it leads to PIRR->VIRR sync is not explained.

Thanks
Kevin

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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