@@ -207,12 +207,33 @@ mod tests {
207
207
VhostBackend , VhostUserDirtyLogRegion , VhostUserMemoryRegionInfo , VringConfigData ,
208
208
} ;
209
209
use serial_test:: serial;
210
+ use std:: io:: ErrorKind ;
211
+
212
+ /// macro to skip test if vhost-vdpa device path is not found.
213
+ ///
214
+ /// vDPA simulators are available since Linux 5.7, but the CI may have
215
+ /// an older kernel, so for now we skip the test if we don't find
216
+ /// the device.
217
+ macro_rules! unwrap_not_found {
218
+ ( $e: expr ) => {
219
+ match $e {
220
+ Ok ( v) => v,
221
+ Err ( error) => match error {
222
+ Error :: VhostOpen ( ref e) if e. kind( ) == ErrorKind :: NotFound => {
223
+ println!( "Err: {:?} SKIPPED" , e) ;
224
+ return ;
225
+ }
226
+ e => panic!( "Err: {:?}" , e) ,
227
+ } ,
228
+ }
229
+ } ;
230
+ }
210
231
211
232
#[ test]
212
233
#[ serial]
213
234
fn test_vdpa_kern_new_device ( ) {
214
235
let m = GuestMemoryMmap :: < ( ) > :: from_ranges ( & [ ( GuestAddress ( 0 ) , 0x10_0000 ) ] ) . unwrap ( ) ;
215
- let vdpa = VhostKernVdpa :: new ( VHOST_VDPA_PATH , & m) . unwrap ( ) ;
236
+ let vdpa = unwrap_not_found ! ( VhostKernVdpa :: new( VHOST_VDPA_PATH , & m) ) ;
216
237
217
238
assert ! ( vdpa. as_raw_fd( ) >= 0 ) ;
218
239
assert ! ( vdpa. mem( ) . find_region( GuestAddress ( 0x100 ) ) . is_some( ) ) ;
@@ -223,7 +244,7 @@ mod tests {
223
244
#[ serial]
224
245
fn test_vdpa_kern_is_valid ( ) {
225
246
let m = GuestMemoryMmap :: < ( ) > :: from_ranges ( & [ ( GuestAddress ( 0 ) , 0x10_0000 ) ] ) . unwrap ( ) ;
226
- let vdpa = VhostKernVdpa :: new ( VHOST_VDPA_PATH , & m) . unwrap ( ) ;
247
+ let vdpa = unwrap_not_found ! ( VhostKernVdpa :: new( VHOST_VDPA_PATH , & m) ) ;
227
248
228
249
let mut config = VringConfigData {
229
250
queue_max_size : 32 ,
@@ -248,7 +269,7 @@ mod tests {
248
269
#[ serial]
249
270
fn test_vdpa_kern_ioctls ( ) {
250
271
let m = GuestMemoryMmap :: < ( ) > :: from_ranges ( & [ ( GuestAddress ( 0 ) , 0x10_0000 ) ] ) . unwrap ( ) ;
251
- let vdpa = VhostKernVdpa :: new ( VHOST_VDPA_PATH , & m) . unwrap ( ) ;
272
+ let vdpa = unwrap_not_found ! ( VhostKernVdpa :: new( VHOST_VDPA_PATH , & m) ) ;
252
273
253
274
let features = vdpa. get_features ( ) . unwrap ( ) ;
254
275
// VIRTIO_F_VERSION_1 (bit 32) should be set
@@ -325,7 +346,7 @@ mod tests {
325
346
#[ serial]
326
347
fn test_vdpa_kern_dma ( ) {
327
348
let m = GuestMemoryMmap :: < ( ) > :: from_ranges ( & [ ( GuestAddress ( 0 ) , 0x10_0000 ) ] ) . unwrap ( ) ;
328
- let mut vdpa = VhostKernVdpa :: new ( VHOST_VDPA_PATH , & m) . unwrap ( ) ;
349
+ let mut vdpa = unwrap_not_found ! ( VhostKernVdpa :: new( VHOST_VDPA_PATH , & m) ) ;
329
350
330
351
let features = vdpa. get_features ( ) . unwrap ( ) ;
331
352
// VIRTIO_F_VERSION_1 (bit 32) should be set
0 commit comments