|
22 | 22 | #include "trace.h"
|
23 | 23 | #include "trace-s390.h"
|
24 | 24 |
|
25 |
| - |
26 |
| -static const intercept_handler_t instruction_handlers[256] = { |
27 |
| - [0x01] = kvm_s390_handle_01, |
28 |
| - [0x82] = kvm_s390_handle_lpsw, |
29 |
| - [0x83] = kvm_s390_handle_diag, |
30 |
| - [0xaa] = kvm_s390_handle_aa, |
31 |
| - [0xae] = kvm_s390_handle_sigp, |
32 |
| - [0xb2] = kvm_s390_handle_b2, |
33 |
| - [0xb6] = kvm_s390_handle_stctl, |
34 |
| - [0xb7] = kvm_s390_handle_lctl, |
35 |
| - [0xb9] = kvm_s390_handle_b9, |
36 |
| - [0xe3] = kvm_s390_handle_e3, |
37 |
| - [0xe5] = kvm_s390_handle_e5, |
38 |
| - [0xeb] = kvm_s390_handle_eb, |
39 |
| -}; |
40 |
| - |
41 | 25 | u8 kvm_s390_get_ilen(struct kvm_vcpu *vcpu)
|
42 | 26 | {
|
43 | 27 | struct kvm_s390_sie_block *sie_block = vcpu->arch.sie_block;
|
@@ -129,16 +113,39 @@ static int handle_validity(struct kvm_vcpu *vcpu)
|
129 | 113 |
|
130 | 114 | static int handle_instruction(struct kvm_vcpu *vcpu)
|
131 | 115 | {
|
132 |
| - intercept_handler_t handler; |
133 |
| - |
134 | 116 | vcpu->stat.exit_instruction++;
|
135 | 117 | trace_kvm_s390_intercept_instruction(vcpu,
|
136 | 118 | vcpu->arch.sie_block->ipa,
|
137 | 119 | vcpu->arch.sie_block->ipb);
|
138 |
| - handler = instruction_handlers[vcpu->arch.sie_block->ipa >> 8]; |
139 |
| - if (handler) |
140 |
| - return handler(vcpu); |
141 |
| - return -EOPNOTSUPP; |
| 120 | + |
| 121 | + switch (vcpu->arch.sie_block->ipa >> 8) { |
| 122 | + case 0x01: |
| 123 | + return kvm_s390_handle_01(vcpu); |
| 124 | + case 0x82: |
| 125 | + return kvm_s390_handle_lpsw(vcpu); |
| 126 | + case 0x83: |
| 127 | + return kvm_s390_handle_diag(vcpu); |
| 128 | + case 0xaa: |
| 129 | + return kvm_s390_handle_aa(vcpu); |
| 130 | + case 0xae: |
| 131 | + return kvm_s390_handle_sigp(vcpu); |
| 132 | + case 0xb2: |
| 133 | + return kvm_s390_handle_b2(vcpu); |
| 134 | + case 0xb6: |
| 135 | + return kvm_s390_handle_stctl(vcpu); |
| 136 | + case 0xb7: |
| 137 | + return kvm_s390_handle_lctl(vcpu); |
| 138 | + case 0xb9: |
| 139 | + return kvm_s390_handle_b9(vcpu); |
| 140 | + case 0xe3: |
| 141 | + return kvm_s390_handle_e3(vcpu); |
| 142 | + case 0xe5: |
| 143 | + return kvm_s390_handle_e5(vcpu); |
| 144 | + case 0xeb: |
| 145 | + return kvm_s390_handle_eb(vcpu); |
| 146 | + default: |
| 147 | + return -EOPNOTSUPP; |
| 148 | + } |
142 | 149 | }
|
143 | 150 |
|
144 | 151 | static int inject_prog_on_prog_intercept(struct kvm_vcpu *vcpu)
|
|
0 commit comments