mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 22:54:05 +08:00
KVM: s390: protvirt: Add new gprs location handling
Guest registers for protected guests are stored at offset 0x380. We will copy those to the usual places. Long term we could refactor this or use register access functions. Signed-off-by: Janosch Frank <frankja@linux.ibm.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Reviewed-by: David Hildenbrand <david@redhat.com> [borntraeger@de.ibm.com: patch merging, splitting, fixing] Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
This commit is contained in:
parent
e663df91dd
commit
c8aac2344d
@ -343,7 +343,9 @@ struct kvm_s390_itdb {
|
||||
struct sie_page {
|
||||
struct kvm_s390_sie_block sie_block;
|
||||
struct mcck_volatile_info mcck_info; /* 0x0200 */
|
||||
__u8 reserved218[1000]; /* 0x0218 */
|
||||
__u8 reserved218[360]; /* 0x0218 */
|
||||
__u64 pv_grregs[16]; /* 0x0380 */
|
||||
__u8 reserved400[512]; /* 0x0400 */
|
||||
struct kvm_s390_itdb itdb; /* 0x0600 */
|
||||
__u8 reserved700[2304]; /* 0x0700 */
|
||||
};
|
||||
|
@ -4059,6 +4059,7 @@ static int vcpu_post_run(struct kvm_vcpu *vcpu, int exit_reason)
|
||||
static int __vcpu_run(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
int rc, exit_reason;
|
||||
struct sie_page *sie_page = (struct sie_page *)vcpu->arch.sie_block;
|
||||
|
||||
/*
|
||||
* We try to hold kvm->srcu during most of vcpu_run (except when run-
|
||||
@ -4080,8 +4081,18 @@ static int __vcpu_run(struct kvm_vcpu *vcpu)
|
||||
guest_enter_irqoff();
|
||||
__disable_cpu_timer_accounting(vcpu);
|
||||
local_irq_enable();
|
||||
if (kvm_s390_pv_cpu_is_protected(vcpu)) {
|
||||
memcpy(sie_page->pv_grregs,
|
||||
vcpu->run->s.regs.gprs,
|
||||
sizeof(sie_page->pv_grregs));
|
||||
}
|
||||
exit_reason = sie64a(vcpu->arch.sie_block,
|
||||
vcpu->run->s.regs.gprs);
|
||||
if (kvm_s390_pv_cpu_is_protected(vcpu)) {
|
||||
memcpy(vcpu->run->s.regs.gprs,
|
||||
sie_page->pv_grregs,
|
||||
sizeof(sie_page->pv_grregs));
|
||||
}
|
||||
local_irq_disable();
|
||||
__enable_cpu_timer_accounting(vcpu);
|
||||
guest_exit_irqoff();
|
||||
|
Loading…
Reference in New Issue
Block a user