@@ -507,15 +507,15 @@ fn handle_tdx_ioexit(ve_info: &tdx::TdVeInfo, stack: &mut InterruptNoErrorStack)
507
507
let io_read = |size, port| match size {
508
508
1 => tdx:: tdvmcall_io_read_8 ( port) as u32 ,
509
509
2 => tdx:: tdvmcall_io_read_16 ( port) as u32 ,
510
- 4 => tdx:: tdvmcall_io_read_32 ( port) as u32 ,
510
+ 4 => tdx:: tdvmcall_io_read_32 ( port) ,
511
511
_ => 0 ,
512
512
} ;
513
513
514
514
// Define closure to perform IO port write with different size operands
515
515
let io_write = |size, port, data| match size {
516
516
1 => tdx:: tdvmcall_io_write_8 ( port, data as u8 ) ,
517
517
2 => tdx:: tdvmcall_io_write_16 ( port, data as u16 ) ,
518
- 4 => tdx:: tdvmcall_io_write_32 ( port, data as u32 ) ,
518
+ 4 => tdx:: tdvmcall_io_write_32 ( port, data) ,
519
519
_ => { }
520
520
} ;
521
521
@@ -525,36 +525,30 @@ fn handle_tdx_ioexit(ve_info: &tdx::TdVeInfo, stack: &mut InterruptNoErrorStack)
525
525
if read {
526
526
let val = io_read ( size, port) ;
527
527
unsafe {
528
- let rsi = core:: slice:: from_raw_parts_mut (
529
- stack. scratch . rdi as * mut u8 ,
530
- size as usize ,
531
- ) ;
528
+ let rsi = core:: slice:: from_raw_parts_mut ( stack. scratch . rdi as * mut u8 , size) ;
532
529
// Safety: size is smaller than 4
533
530
rsi. copy_from_slice ( & u32:: to_le_bytes ( val) [ ..size] )
534
531
}
535
- stack. scratch . rdi += size as usize ;
532
+ stack. scratch . rdi += size;
536
533
} else {
537
534
let mut val = 0 ;
538
535
unsafe {
539
- let rsi =
540
- core:: slice:: from_raw_parts ( stack. scratch . rsi as * mut u8 , size as usize ) ;
536
+ let rsi = core:: slice:: from_raw_parts ( stack. scratch . rsi as * mut u8 , size) ;
541
537
for ( idx, byte) in rsi. iter ( ) . enumerate ( ) {
542
538
val |= ( * byte as u32 ) << ( idx * 8 ) ;
543
539
}
544
540
}
545
541
io_write ( size, port, val) ;
546
- stack. scratch . rsi += size as usize ;
542
+ stack. scratch . rsi += size;
547
543
}
548
544
stack. scratch . rcx -= 1 ;
549
545
}
546
+ } else if read {
547
+ // Write the IO read result to the low $size-bytes of rax
548
+ stack. scratch . rax = ( stack. scratch . rax & !( 2_usize . pow ( size as u32 * 8 ) - 1 ) )
549
+ | ( io_read ( size, port) as usize & ( 2_usize . pow ( size as u32 * 8 ) - 1 ) ) ;
550
550
} else {
551
- if read {
552
- // Write the IO read result to the low $size-bytes of rax
553
- stack. scratch . rax = ( stack. scratch . rax & !( 2_usize . pow ( size as u32 * 8 ) - 1 ) )
554
- | ( io_read ( size, port) as usize & ( 2_usize . pow ( size as u32 * 8 ) - 1 ) ) ;
555
- } else {
556
- io_write ( size, port, stack. scratch . rax as u32 ) ;
557
- }
551
+ io_write ( size, port, stack. scratch . rax as u32 ) ;
558
552
}
559
553
560
554
true
0 commit comments