Stephen Zhang <starzhangzsd@xxxxxxxxx> writes: > code changes in handle_io() to save some CPU cycles. > > Signed-off-by: Stephen Zhang <starzhangzsd@xxxxxxxxx> > --- > arch/x86/kvm/vmx/vmx.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c > index 47b8357..109bcf64 100644 > --- a/arch/x86/kvm/vmx/vmx.c > +++ b/arch/x86/kvm/vmx/vmx.c > @@ -4899,15 +4899,14 @@ static int handle_triple_fault(struct kvm_vcpu *vcpu) > static int handle_io(struct kvm_vcpu *vcpu) > { > unsigned long exit_qualification; > - int size, in, string; > + int size, in; > unsigned port; > > exit_qualification = vmx_get_exit_qual(vcpu); > - string = (exit_qualification & 16) != 0; > > ++vcpu->stat.io_exits; > > - if (string) > + if (exit_qualification & 16) > return kvm_emulate_instruction(vcpu, 0); > > port = exit_qualification >> 16; I seriously doubt this can save any CPU cycles as compiler will likely re-order and optimize this check anyway, I don't expect to see any push/pop operations here. I agree that having local 'string' variable is likely an overkill, however, the 'exit_qualification & 16' check we have is hard to read so 'string' here works as a comment :-) I would've liked the patch in the following shape more: diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index e35552055c07..65b6062ad7bc 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -4898,15 +4898,15 @@ static int handle_triple_fault(struct kvm_vcpu *vcpu) static int handle_io(struct kvm_vcpu *vcpu) { unsigned long exit_qualification; - int size, in, string; + int size, in; unsigned port; exit_qualification = vmx_get_exit_qual(vcpu); - string = (exit_qualification & 16) != 0; ++vcpu->stat.io_exits; - if (string) + /* String instruction */ + if (exit_qualification & BIT(4)) return kvm_emulate_instruction(vcpu, 0); port = exit_qualification >> 16; Also, the changelog needs to be re-phrased to state code cleanup and not CPU cycles optimization. -- Vitaly