On Wed, Dec 9, 2015 at 7:02 AM, Paolo Bonzini <pbonzini@xxxxxxxxxx> wrote: > On 07/12/2015 21:36, David Matlack wrote: >> set_exception_return forces exceptions handlers to return to a specific >> address instead of returning to the instruction address pushed by the >> CPU at the time of the exception. The unit tests apic.c and vmx.c use >> this functionality to recover from expected exceptions. >> >> When using set_exception_return we have to be careful not to modify the >> stack (such as by doing a function call) as triggering the exception will >> likely jump us past the instructions which undo the stack manipulation >> (such as a ret). To accomplish this, declare all functions called after >> set_exception_return as __always_inline, so that the compiler always >> inlines them. > > set_exception_return is generally not a great idea IMHO---thanks for > looking at it. Yup. This is a band-aid just to fix the current implementation. > > A couple years ago we discussed adding setjmp/longjmp to libcflat > (http://www.spinics.net/lists/kvm/msg94159.html which is however missing > a 32-bit version). Making the exceptions do a longjmp would be a much > safer option. Good idea! I might give this a try, but don't hold your breath :) > > Paolo -- 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