diff options
author | Christian Borntraeger <borntraeger@de.ibm.com> | 2008-03-25 13:47:29 -0400 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2008-04-27 05:00:45 -0400 |
commit | 453423dce2785b8e22077e3b3eeecb4f60fe3470 (patch) | |
tree | afe9d502d7fa07d5b59175dfb990f818e0642720 /arch/s390/kvm/kvm-s390.c | |
parent | ba5c1e9b6ceebdc39343cc03eb39f077abd3c571 (diff) |
KVM: s390: intercepts for privileged instructions
This patch introduces in-kernel handling of some intercepts for privileged
instructions:
handle_set_prefix() sets the prefix register of the local cpu
handle_store_prefix() stores the content of the prefix register to memory
handle_store_cpu_address() stores the cpu number of the current cpu to memory
handle_skey() just decrements the instruction address and retries
handle_stsch() delivers condition code 3 "operation not supported"
handle_chsc() same here
handle_stfl() stores the facility list which contains the
capabilities of the cpu
handle_stidp() stores cpu type/model/revision and such
handle_stsi() stores information about the system topology
Acked-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Carsten Otte <cotte@de.ibm.com>
Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'arch/s390/kvm/kvm-s390.c')
-rw-r--r-- | arch/s390/kvm/kvm-s390.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 5e3473c9a639..5a17176fb641 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c | |||
@@ -48,6 +48,15 @@ struct kvm_stats_debugfs_item debugfs_entries[] = { | |||
48 | { "deliver_restart_signal", VCPU_STAT(deliver_restart_signal) }, | 48 | { "deliver_restart_signal", VCPU_STAT(deliver_restart_signal) }, |
49 | { "deliver_program_interruption", VCPU_STAT(deliver_program_int) }, | 49 | { "deliver_program_interruption", VCPU_STAT(deliver_program_int) }, |
50 | { "exit_wait_state", VCPU_STAT(exit_wait_state) }, | 50 | { "exit_wait_state", VCPU_STAT(exit_wait_state) }, |
51 | { "instruction_stidp", VCPU_STAT(instruction_stidp) }, | ||
52 | { "instruction_spx", VCPU_STAT(instruction_spx) }, | ||
53 | { "instruction_stpx", VCPU_STAT(instruction_stpx) }, | ||
54 | { "instruction_stap", VCPU_STAT(instruction_stap) }, | ||
55 | { "instruction_storage_key", VCPU_STAT(instruction_storage_key) }, | ||
56 | { "instruction_stsch", VCPU_STAT(instruction_stsch) }, | ||
57 | { "instruction_chsc", VCPU_STAT(instruction_chsc) }, | ||
58 | { "instruction_stsi", VCPU_STAT(instruction_stsi) }, | ||
59 | { "instruction_stfl", VCPU_STAT(instruction_stfl) }, | ||
51 | { NULL } | 60 | { NULL } |
52 | }; | 61 | }; |
53 | 62 | ||
@@ -246,6 +255,8 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu) | |||
246 | vcpu->arch.sie_block->eca = 0xC1002001U; | 255 | vcpu->arch.sie_block->eca = 0xC1002001U; |
247 | setup_timer(&vcpu->arch.ckc_timer, kvm_s390_idle_wakeup, | 256 | setup_timer(&vcpu->arch.ckc_timer, kvm_s390_idle_wakeup, |
248 | (unsigned long) vcpu); | 257 | (unsigned long) vcpu); |
258 | get_cpu_id(&vcpu->arch.cpu_id); | ||
259 | vcpu->arch.cpu_id.version = 0xfe; | ||
249 | return 0; | 260 | return 0; |
250 | } | 261 | } |
251 | 262 | ||