On 10/13/2011 09:44 AM, Jeremy Fitzhardinge wrote: > > Yeah, that's a good question. There are three mechanisms with somewhat > overlapping concerns: > > * alternative() > * pvops patching > * jump_labels > > Alternative() is for low-level instruction substitution, and really only > makes sense at the assembler level with one or two instructions. > > pvops is basically a collection of ordinary _ops structures full of > function pointers, but it has a layer of patching to help optimise it. > In the common case, this just replaces an indirect call with a direct > one, but in some special cases it can inline code. This is used for > small, extremely performance-critical things like cli/sti, but it > awkward to use in general because you have to specify the inlined code > as a parameterless asm. > > Jump_labels is basically an efficient way of doing conditionals > predicated on rarely-changed booleans - so it's similar to pvops in that > it is effectively a very ordinary C construct optimised by dynamic code > patching. Then there is static_cpu_has(), which is basically jump labels implemented using the alternatives mechanism. If nothing else it would be good to: 1. Make more general use of ops patching; 2. Merge mechanisms where practical. -hpa -- H. Peter Anvin, Intel Open Source Technology Center I work for Intel. I don't speak on their behalf. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html