Gregory Haskins wrote: >>>> On Wed, May 16, 2007 at 6:05 AM, in message <[EMAIL PROTECTED]>, >>>> > Avi Kivity <[EMAIL PROTECTED]> wrote: > >> Gregory Haskins wrote: >> >>> >>> >>>> Later we'll have vcpu and thread_info point to each other and then you >>>> can do that kind of optimization. >>>> >>>> >>> I am not familiar with thread_info, but if it solves the dangling pointer >>> >> problem, that sounds great. >> >> It's fairly tricky, but it's the right way forward. It means a 1:1 >> association of a vcpu and a thread for the lifetime of the vcpu. >> > > Any pointers would be appreciated. Otherwise I will hit up google. > >
task_struct (include/linux/sched.h) is probably a better fit. Basically, like each task has attributes like its registers, fpu state, and open file table, it would also have a vcpu attribute if it's part of a virtual machine. >>> It sounds like you are in favor of leaving this optimization for a later >>> >> time. As long as you are ok with every interrupt related ioctl such as >> KVM_APIC_MSG, and KVM_ISA_INTERRUPT posting a signal to itself, we can pull >> this for now. >> >> Perhaps you can disable this by noticing that you're injecting an >> interrupt now (another icky variable in struct kvm_vcpu). >> > > I don't think this can be made to work without having the same problem that > we face already. Detecting self-injection is the same problem at ioctl entry > point as it is at irqdevice::intr > Ok. > >>> Conversely, if the thread_info approach isn't hard, I would prefer to get >>> >> this right now, as the double interrupt thing seems nasty to me. >> >>> Alternatively, perhaps I can just replace irq.task with irq.pid? And I >>> >> could also replace irq.guest_mode with irq.guest_cpu. I will then record >> the >> pid where today I record the task. Likewise, I can extract the guest_cpu >> (using task_cpu(current)) where today I assign irq.guest_mode = 1. That >> would effectively remove the dangling pointer problem while retaining the >> features that I like. >> >>> >>> >> pid can dangle just the same as a task pointer, only much worse. >> > > I agree that it can dangle briefly if userspace is using something like > thread-pooling to execute VCPUs. I don't see how it can be worse, however. > And also note that having it dangling doesn't have the nasty problem that the > task pointer does: dereferencing an invalid pointer. > > However, that being said: I do see how either of these solutions leave a > potential race condition against missing some signals: If a thread that was > executing the VCPU changes roles, AND it injects an interrupt before the new > thread starts executing...we would miss the signal. This is not a realistic > scenario today, but it is a hole. Hmmm..... how does that thread_info stuff > work? ;) > These corner cases don't need to work well as VMs, they just need not to be expoitable. -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel