Avi Kivity wrote: > Dong, Eddie wrote: >> Avi Kivity wrote: >> >>> Dong, Eddie wrote: >>> >>>> Avi: >>>> Basically with those patches applied so far, we can do k<->k, u >>>> <->u and k->u live migration for typical case, the u->k migration >>>> has bug so far which is still debuging. >>>> But I am thinking about the corner case (pending irq) for cross >>>> migration, i.e. pending irq in valid IDT_Vectoring of kernel >>>> irqchip and those in interrupt_bitmap of user level case. In most >>>> case, there are no pending irqs, that is fine for us. In some case >>>> if there is a pending irq, cross migration need to convert between >>>> them which may be not feasible. In k->u case, we can just convert >>>> >> the >> >>>> IDT_vectoring indicated pending irq (single vector) to a >>>> interrupt_bitmap, but vice versa may not be true since user level >>>> case may have multiple pending irqs in theory though rare. In that >>>> case u->k cross migration may fail since we don't know this >>>> vectored irq comes from PIC or APIC and thus unable to push back >>>> to PIC/APIC device model. If there is only one pending irq in >>>> interrupt_bitmap, we can simply convert it to IDT_Vectoring BTW, >>>> multiple pending IRQs in interrupt_bitmap has potential >>>> architectural issue even in pure user level case due to premature >>>> IRR->ISR convert in PIC/APIC device model as we discussed. >>>> >>>> If above limitation is fine, we can use interrupt_bitmap in >>>> SREGS data structure to carry the pending irq for kernel level >>>> too. Any opinion? thx,eddie >>>> >>>> >>> Userspace will never set more than one bit in the pending bitmap, >>> because it needs to inspect the tpr before injecting an interrupt. >>> As >>> >> >> I didn't look into detail of them in user level. But can TPR >> checking guarantee there is no multiple injection? > > It's the other way round: the code injects interrupts one at > a time in > order to be able to check the tpr in user space (the whole > pending_interrupts thing is a bug -- it's impossible to queue > interrupts at that level because of the tpr). > > >> An asynchronize device model can inject >> an >> higher irq after the previous one. >> Even in synchronize model, if a previous irq fails to inject with >> IDT_vectoring valid, and get push back, a higher irq can again get >> injected. >> >> > The code guarantees that we won't inject an interrupt until after the > previous one was accepted, but I think it doesn't handle failures to > inject well. > > Got it, so we will go with only single pending irq case. Eddie
------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel