2 * S390x machine definitions and functions
4 * Copyright IBM Corp. 2014
7 * Thomas Huth <thuth@linux.vnet.ibm.com>
8 * Christian Borntraeger <borntraeger@de.ibm.com>
9 * Jason J. Herne <jjherne@us.ibm.com>
11 * This work is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published
13 * by the Free Software Foundation; either version 2 of the License,
14 * or (at your option) any later version.
19 #include "sysemu/kvm.h"
21 static int cpu_post_load(void *opaque
, int version_id
)
23 S390CPU
*cpu
= opaque
;
26 * As the cpu state is pushed to kvm via kvm_set_mp_state rather
27 * than via cpu_synchronize_state, we need update kvm here.
30 kvm_s390_set_cpu_state(cpu
, cpu
->env
.cpu_state
);
31 return kvm_s390_vcpu_interrupt_post_load(cpu
);
36 static void cpu_pre_save(void *opaque
)
38 S390CPU
*cpu
= opaque
;
41 kvm_s390_vcpu_interrupt_pre_save(cpu
);
45 const VMStateDescription vmstate_fpu
= {
48 .minimum_version_id
= 1,
49 .fields
= (VMStateField
[]) {
50 VMSTATE_UINT64(env
.fregs
[0].ll
, S390CPU
),
51 VMSTATE_UINT64(env
.fregs
[1].ll
, S390CPU
),
52 VMSTATE_UINT64(env
.fregs
[2].ll
, S390CPU
),
53 VMSTATE_UINT64(env
.fregs
[3].ll
, S390CPU
),
54 VMSTATE_UINT64(env
.fregs
[4].ll
, S390CPU
),
55 VMSTATE_UINT64(env
.fregs
[5].ll
, S390CPU
),
56 VMSTATE_UINT64(env
.fregs
[6].ll
, S390CPU
),
57 VMSTATE_UINT64(env
.fregs
[7].ll
, S390CPU
),
58 VMSTATE_UINT64(env
.fregs
[8].ll
, S390CPU
),
59 VMSTATE_UINT64(env
.fregs
[9].ll
, S390CPU
),
60 VMSTATE_UINT64(env
.fregs
[10].ll
, S390CPU
),
61 VMSTATE_UINT64(env
.fregs
[11].ll
, S390CPU
),
62 VMSTATE_UINT64(env
.fregs
[12].ll
, S390CPU
),
63 VMSTATE_UINT64(env
.fregs
[13].ll
, S390CPU
),
64 VMSTATE_UINT64(env
.fregs
[14].ll
, S390CPU
),
65 VMSTATE_UINT64(env
.fregs
[15].ll
, S390CPU
),
66 VMSTATE_UINT32(env
.fpc
, S390CPU
),
71 static inline bool fpu_needed(void *opaque
)
76 const VMStateDescription vmstate_s390_cpu
= {
78 .post_load
= cpu_post_load
,
79 .pre_save
= cpu_pre_save
,
81 .minimum_version_id
= 3,
82 .fields
= (VMStateField
[]) {
83 VMSTATE_UINT64_ARRAY(env
.regs
, S390CPU
, 16),
84 VMSTATE_UINT64(env
.psw
.mask
, S390CPU
),
85 VMSTATE_UINT64(env
.psw
.addr
, S390CPU
),
86 VMSTATE_UINT64(env
.psa
, S390CPU
),
87 VMSTATE_UINT32(env
.todpr
, S390CPU
),
88 VMSTATE_UINT64(env
.pfault_token
, S390CPU
),
89 VMSTATE_UINT64(env
.pfault_compare
, S390CPU
),
90 VMSTATE_UINT64(env
.pfault_select
, S390CPU
),
91 VMSTATE_UINT64(env
.cputm
, S390CPU
),
92 VMSTATE_UINT64(env
.ckc
, S390CPU
),
93 VMSTATE_UINT64(env
.gbea
, S390CPU
),
94 VMSTATE_UINT64(env
.pp
, S390CPU
),
95 VMSTATE_UINT32_ARRAY(env
.aregs
, S390CPU
, 16),
96 VMSTATE_UINT64_ARRAY(env
.cregs
, S390CPU
, 16),
97 VMSTATE_UINT8(env
.cpu_state
, S390CPU
),
98 VMSTATE_UINT8(env
.sigp_order
, S390CPU
),
99 VMSTATE_UINT32_V(irqstate_saved_size
, S390CPU
, 4),
100 VMSTATE_VBUFFER_UINT32(irqstate
, S390CPU
, 4, NULL
, 0,
101 irqstate_saved_size
),
102 VMSTATE_END_OF_LIST()
104 .subsections
= (VMStateSubsection
[]) {
106 .vmsd
= &vmstate_fpu
,
107 .needed
= fpu_needed
,