7
7
8
8
use std:: collections:: HashMap ;
9
9
use std:: fmt:: Debug ;
10
- use std:: num:: NonZeroU32 ;
11
10
use std:: sync:: { Arc , Mutex } ;
12
11
13
12
#[ cfg( target_arch = "x86_64" ) ]
@@ -79,7 +78,7 @@ pub struct MMIODeviceInfo {
79
78
/// Mmio addr range length.
80
79
pub len : u64 ,
81
80
/// Used Irq line for the device.
82
- pub irq : Option < NonZeroU32 > , // NOTE: guaranteed to be a value not 0, 0 is not allowed
81
+ pub irq : Option < u32 > ,
83
82
}
84
83
85
84
#[ cfg( target_arch = "x86_64" ) ]
@@ -89,7 +88,7 @@ fn add_virtio_aml(
89
88
len : u64 ,
90
89
irq : u32 ,
91
90
) -> Result < ( ) , aml:: AmlError > {
92
- let dev_id = irq - crate :: arch:: IRQ_BASE ;
91
+ let dev_id = irq - crate :: arch:: GSI_BASE ;
93
92
debug ! (
94
93
"acpi: Building AML for VirtIO device _SB_.V{:03}. memory range: {:#010x}:{} irq: {}" ,
95
94
dev_id, addr, len, irq
@@ -151,7 +150,7 @@ impl MMIODeviceManager {
151
150
) -> Result < MMIODeviceInfo , MmioError > {
152
151
let irq = match resource_allocator. allocate_gsi ( irq_count) ?[ ..] {
153
152
[ ] => None ,
154
- [ irq] => NonZeroU32 :: new ( irq) ,
153
+ [ irq] => Some ( irq) ,
155
154
_ => return Err ( MmioError :: InvalidIrqConfig ) ,
156
155
} ;
157
156
@@ -205,7 +204,7 @@ impl MMIODeviceManager {
205
204
vm. register_ioevent ( queue_evt, & io_addr, u32:: try_from ( i) . unwrap ( ) )
206
205
. map_err ( MmioError :: RegisterIoEvent ) ?;
207
206
}
208
- vm. register_irqfd ( & locked_device. interrupt_trigger ( ) . irq_evt , irq. get ( ) )
207
+ vm. register_irqfd ( & locked_device. interrupt_trigger ( ) . irq_evt , irq)
209
208
. map_err ( MmioError :: RegisterIrqFd ) ?;
210
209
}
211
210
@@ -231,7 +230,7 @@ impl MMIODeviceManager {
231
230
. add_virtio_mmio_device (
232
231
device_info. len ,
233
232
GuestAddress ( device_info. addr ) ,
234
- device_info. irq . unwrap ( ) . get ( ) ,
233
+ device_info. irq . unwrap ( ) ,
235
234
None ,
236
235
)
237
236
. map_err ( MmioError :: Cmdline )
@@ -258,7 +257,7 @@ impl MMIODeviceManager {
258
257
device_info. len ,
259
258
// We are sure that `irqs` has at least one element; allocate_mmio_resources makes
260
259
// sure of it.
261
- device_info. irq . unwrap ( ) . get ( ) ,
260
+ device_info. irq . unwrap ( ) ,
262
261
) ?;
263
262
}
264
263
Ok ( device_info)
@@ -290,7 +289,7 @@ impl MMIODeviceManager {
290
289
. unwrap ( )
291
290
. serial
292
291
. interrupt_evt ( ) ,
293
- device_info. irq . unwrap ( ) . get ( ) ,
292
+ device_info. irq . unwrap ( ) ,
294
293
)
295
294
. map_err ( MmioError :: RegisterIrqFd ) ?;
296
295
@@ -693,7 +692,7 @@ mod tests {
693
692
#[ cfg( target_arch = "aarch64" ) ]
694
693
vm. setup_irqchip ( 1 ) . unwrap ( ) ;
695
694
696
- for _i in crate :: arch:: IRQ_BASE ..=crate :: arch:: IRQ_MAX {
695
+ for _i in crate :: arch:: GSI_BASE ..=crate :: arch:: GSI_MAX {
697
696
device_manager
698
697
. register_virtio_test_device (
699
698
vm. fd ( ) ,
@@ -773,11 +772,10 @@ mod tests {
773
772
device_manager. id_to_dev_info[ & ( DeviceType :: Virtio ( type_id) , id. clone( ) ) ] . addr
774
773
) ;
775
774
assert_eq ! (
776
- crate :: arch:: IRQ_BASE ,
775
+ crate :: arch:: GSI_BASE ,
777
776
device_manager. id_to_dev_info[ & ( DeviceType :: Virtio ( type_id) , id) ]
778
777
. irq
779
778
. unwrap( )
780
- . get( )
781
779
) ;
782
780
783
781
let id = "bar" ;
@@ -834,7 +832,7 @@ mod tests {
834
832
let device_info = device_manager
835
833
. allocate_mmio_resources ( & mut resource_allocator, 1 )
836
834
. unwrap ( ) ;
837
- assert_eq ! ( device_info. irq. unwrap( ) . get ( ) , crate :: arch:: GSI_BASE ) ;
835
+ assert_eq ! ( device_info. irq. unwrap( ) , crate :: arch:: GSI_BASE ) ;
838
836
}
839
837
840
838
#[ test]
0 commit comments