@@ -9,14 +9,13 @@ use kvm_bindings::{
9
9
} ;
10
10
use serde:: { Deserialize , Serialize } ;
11
11
12
- use crate :: vstate:: vm:: VmError ;
13
12
use crate :: Vm ;
14
13
15
14
/// Error type for [`Vm::restore_state`]
16
15
#[ allow( missing_docs) ]
17
16
#[ cfg( target_arch = "x86_64" ) ]
18
- #[ derive( Debug , thiserror:: Error , displaydoc:: Display , PartialEq , Eq ) ]
19
- pub enum RestoreStateError {
17
+ #[ derive( Debug , PartialEq , Eq , thiserror:: Error , displaydoc:: Display ) ]
18
+ pub enum ArchVmError {
20
19
/// Set PIT2 error: {0}
21
20
SetPit2 ( kvm_ioctls:: Error ) ,
22
21
/// Set clock error: {0}
@@ -27,8 +26,18 @@ pub enum RestoreStateError {
27
26
SetIrqChipPicSlave ( kvm_ioctls:: Error ) ,
28
27
/// Set IrqChipIoAPIC error: {0}
29
28
SetIrqChipIoAPIC ( kvm_ioctls:: Error ) ,
30
- /// VM error: {0}
31
- VmError ( VmError ) ,
29
+ /// Failed to get KVM vm pit state: {0}
30
+ VmGetPit2 ( kvm_ioctls:: Error ) ,
31
+ /// Failed to get KVM vm clock: {0}
32
+ VmGetClock ( kvm_ioctls:: Error ) ,
33
+ /// Failed to get KVM vm irqchip: {0}
34
+ VmGetIrqChip ( kvm_ioctls:: Error ) ,
35
+ /// Failed to set KVM vm pit state: {0}
36
+ VmSetPit2 ( kvm_ioctls:: Error ) ,
37
+ /// Failed to set KVM vm clock: {0}
38
+ VmSetClock ( kvm_ioctls:: Error ) ,
39
+ /// Failed to set KVM vm irqchip: {0}
40
+ VmSetIrqChip ( kvm_ioctls:: Error ) ,
32
41
}
33
42
34
43
impl Vm {
@@ -42,42 +51,46 @@ impl Vm {
42
51
/// - [`kvm_ioctls::VmFd::set_irqchip`] errors.
43
52
/// - [`kvm_ioctls::VmFd::set_irqchip`] errors.
44
53
/// - [`kvm_ioctls::VmFd::set_irqchip`] errors.
45
- pub fn restore_state ( & mut self , state : & VmState ) -> Result < ( ) , RestoreStateError > {
54
+ pub fn restore_state ( & mut self , state : & VmState ) -> Result < ( ) , ArchVmError > {
46
55
self . fd
47
56
. set_pit2 ( & state. pitstate )
48
- . map_err ( RestoreStateError :: SetPit2 ) ?;
57
+ . map_err ( ArchVmError :: SetPit2 ) ?;
49
58
self . fd
50
59
. set_clock ( & state. clock )
51
- . map_err ( RestoreStateError :: SetClock ) ?;
60
+ . map_err ( ArchVmError :: SetClock ) ?;
52
61
self . fd
53
62
. set_irqchip ( & state. pic_master )
54
- . map_err ( RestoreStateError :: SetIrqChipPicMaster ) ?;
63
+ . map_err ( ArchVmError :: SetIrqChipPicMaster ) ?;
55
64
self . fd
56
65
. set_irqchip ( & state. pic_slave )
57
- . map_err ( RestoreStateError :: SetIrqChipPicSlave ) ?;
66
+ . map_err ( ArchVmError :: SetIrqChipPicSlave ) ?;
58
67
self . fd
59
68
. set_irqchip ( & state. ioapic )
60
- . map_err ( RestoreStateError :: SetIrqChipIoAPIC ) ?;
69
+ . map_err ( ArchVmError :: SetIrqChipIoAPIC ) ?;
61
70
Ok ( ( ) )
62
71
}
63
72
64
73
/// Creates the irq chip and an in-kernel device model for the PIT.
65
- pub fn setup_irqchip ( & self ) -> Result < ( ) , VmError > {
66
- self . fd . create_irq_chip ( ) . map_err ( VmError :: VmSetup ) ?;
74
+ pub fn setup_irqchip ( & self ) -> Result < ( ) , ArchVmError > {
75
+ self . fd
76
+ . create_irq_chip ( )
77
+ . map_err ( ArchVmError :: VmSetIrqChip ) ?;
67
78
// We need to enable the emulation of a dummy speaker port stub so that writing to port 0x61
68
79
// (i.e. KVM_SPEAKER_BASE_ADDRESS) does not trigger an exit to user space.
69
80
let pit_config = kvm_pit_config {
70
81
flags : KVM_PIT_SPEAKER_DUMMY ,
71
82
..Default :: default ( )
72
83
} ;
73
- self . fd . create_pit2 ( pit_config) . map_err ( VmError :: VmSetup )
84
+ self . fd
85
+ . create_pit2 ( pit_config)
86
+ . map_err ( ArchVmError :: VmSetIrqChip )
74
87
}
75
88
76
89
/// Saves and returns the Kvm Vm state.
77
- pub fn save_state ( & self ) -> Result < VmState , VmError > {
78
- let pitstate = self . fd . get_pit2 ( ) . map_err ( VmError :: VmGetPit2 ) ?;
90
+ pub fn save_state ( & self ) -> Result < VmState , ArchVmError > {
91
+ let pitstate = self . fd . get_pit2 ( ) . map_err ( ArchVmError :: VmGetPit2 ) ?;
79
92
80
- let mut clock = self . fd . get_clock ( ) . map_err ( VmError :: VmGetClock ) ?;
93
+ let mut clock = self . fd . get_clock ( ) . map_err ( ArchVmError :: VmGetClock ) ?;
81
94
// This bit is not accepted in SET_CLOCK, clear it.
82
95
clock. flags &= !KVM_CLOCK_TSC_STABLE ;
83
96
@@ -87,23 +100,23 @@ impl Vm {
87
100
} ;
88
101
self . fd
89
102
. get_irqchip ( & mut pic_master)
90
- . map_err ( VmError :: VmGetIrqChip ) ?;
103
+ . map_err ( ArchVmError :: VmGetIrqChip ) ?;
91
104
92
105
let mut pic_slave = kvm_irqchip {
93
106
chip_id : KVM_IRQCHIP_PIC_SLAVE ,
94
107
..Default :: default ( )
95
108
} ;
96
109
self . fd
97
110
. get_irqchip ( & mut pic_slave)
98
- . map_err ( VmError :: VmGetIrqChip ) ?;
111
+ . map_err ( ArchVmError :: VmGetIrqChip ) ?;
99
112
100
113
let mut ioapic = kvm_irqchip {
101
114
chip_id : KVM_IRQCHIP_IOAPIC ,
102
115
..Default :: default ( )
103
116
} ;
104
117
self . fd
105
118
. get_irqchip ( & mut ioapic)
106
- . map_err ( VmError :: VmGetIrqChip ) ?;
119
+ . map_err ( ArchVmError :: VmGetIrqChip ) ?;
107
120
108
121
Ok ( VmState {
109
122
pitstate,
0 commit comments