On 01.09.2010, at 13:56, Avi Kivity wrote: > On 09/01/2010 02:47 PM, Alexander Graf wrote: >> On 01.09.2010, at 13:45, Avi Kivity wrote: >> >>> On 09/01/2010 12:38 PM, Alexander Graf wrote: >>>> On 01.09.2010, at 09:41, Avi Kivity wrote: >>>> >>>>> On 08/31/2010 01:07 PM, Alexander Graf wrote: >>>>>> KVM on PowerPC used to have completely broken interrupt logic. Usually, >>>>>> interrupts work by having a PIC that pulls a line up/down, so the CPU >>>>>> knows >>>>>> that an interrupt is active. This line stays active until some action is >>>>>> done to the PIC to release the line. >>>>>> >>>>>> On KVM for PPC, we just checked if there was an interrupt pending and >>>>>> pulled >>>>>> a line in the kernel module. We never released it though, hoping that >>>>>> kernel >>>>>> space would just declare an interrupt as released when injected - which >>>>>> is >>>>>> wrong. >>>>>> >>>>>> To fix this, we need to completely redesign the interrupt injection >>>>>> logic. >>>>>> Whenever an interrupt line gets triggered, we need to notify kernel space >>>>>> that the line is up. Whenever it gets released, we do the same. This way >>>>>> we can assure that the interrupt state is always known to kernel space. >>>>>> >>>>>> This fixes random stalls in KVM guests on PowerPC that were waiting for >>>>>> an interrupt while everyone else thought they received it already. >>>>> This is more or less equivalent to KVM_IRQ_LINE. >>>> My question was if you think the internal C interface is generic enough or >>>> if it needs a lot more magic for x86 anyways :). >>>> >>> So you noticed I avoided it. Well, being forced to look, I don't think >>> it's worthwhile to try to be generic here. Both the PIC<->APIC and the >>> APIC<->core interfaces are too complicated to be modelled by a single line. >> Makes sense. Well, I guess it doesn't hurt to have the interface as is and >> only implement it for PPC for now. >> >> > > Why not limit it to ppc? Someone might call it by accident.
How would you model it? Call kvm_arch_set_interrupt in hw/ppc.c? Which header would I define the call in? Alex