On 02/06/2018 01:04 PM, Cornelia Huck wrote: > On Tue, 6 Feb 2018 11:21:27 +0000 > Christian Borntraeger <borntraeger@xxxxxxxxxx> wrote: > >> instead of having huge jump tables for function selection, > > s/instead/Instead/ > >> lets use normal switch/case statements for the instruction > > s/lets/let's/ > >> handlers in intercept.c We can now also get rid of >> intercept_handler_t. >> >> bloat-o-meter output: >> add/remove: 0/1 grow/shrink: 1/0 up/down: 280/-2048 (-1768) >> Function old new delta >> kvm_handle_sie_intercept 1530 1810 +280 >> instruction_handlers 2048 - -2048 >> Total: Before=5227, After=3459, chg -33.82% >> >> Signed-off-by: Christian Borntraeger <borntraeger@xxxxxxxxxx> >> --- >> arch/s390/kvm/intercept.c | 54 ++++++++++++++++++++++++----------------------- >> arch/s390/kvm/kvm-s390.h | 2 -- >> 2 files changed, 28 insertions(+), 28 deletions(-) >> > >> @@ -129,16 +113,34 @@ static int handle_validity(struct kvm_vcpu *vcpu) >> >> static int handle_instruction(struct kvm_vcpu *vcpu) >> { >> - intercept_handler_t handler; >> - >> - vcpu->stat.exit_instruction++; >> - trace_kvm_s390_intercept_instruction(vcpu, >> - vcpu->arch.sie_block->ipa, >> - vcpu->arch.sie_block->ipb); > > Is dropping the tracing intentional? nope, its a bug :-) > >> - handler = instruction_handlers[vcpu->arch.sie_block->ipa >> 8]; >> - if (handler) >> - return handler(vcpu); >> - return -EOPNOTSUPP; >> + switch (vcpu->arch.sie_block->ipa >> 8) { >> + case 0x01: >> + return kvm_s390_handle_01(vcpu); >> + case 0x82: >> + return kvm_s390_handle_lpsw(vcpu); >> + case 0x83: >> + return kvm_s390_handle_diag(vcpu); >> + case 0xaa: >> + return kvm_s390_handle_aa(vcpu); >> + case 0xae: >> + return kvm_s390_handle_sigp(vcpu); >> + case 0xb2: >> + return kvm_s390_handle_b2(vcpu); >> + case 0xb6: >> + return kvm_s390_handle_stctl(vcpu); >> + case 0xb7: >> + return kvm_s390_handle_lctl(vcpu); >> + case 0xb9: >> + return kvm_s390_handle_b9(vcpu); >> + case 0xe3: >> + return kvm_s390_handle_e3(vcpu); >> + case 0xe5: >> + return kvm_s390_handle_e5(vcpu); >> + case 0xeb: >> + return kvm_s390_handle_eb(vcpu); >> + default: >> + return -EOPNOTSUPP; >> + } >> } >> > > Else, looks good. >