@@ -562,19 +562,21 @@ pub mod migrate {
562562 ) ;
563563 let gdtr = SegDescV1 :: from_raw (
564564 vcpu. get_segreg ( vm_reg_name:: VM_REG_GUEST_GDTR ) ?,
565+ // GDT has no selector register
565566 0 ,
566567 ) ;
567568 let idtr = SegDescV1 :: from_raw (
568569 vcpu. get_segreg ( vm_reg_name:: VM_REG_GUEST_IDTR ) ?,
570+ // IDT has no selector register
569571 0 ,
570572 ) ;
571573 let ldtr = SegDescV1 :: from_raw (
572574 vcpu. get_segreg ( vm_reg_name:: VM_REG_GUEST_LDTR ) ?,
573- 0 ,
575+ vcpu . get_reg ( vm_reg_name :: VM_REG_GUEST_LDTR ) ? as u16 ,
574576 ) ;
575577 let tr = SegDescV1 :: from_raw (
576578 vcpu. get_segreg ( vm_reg_name:: VM_REG_GUEST_TR ) ?,
577- 0 ,
579+ vcpu . get_reg ( vm_reg_name :: VM_REG_GUEST_TR ) ? as u16 ,
578580 ) ;
579581 Ok ( Self { cs, ds, es, fs, gs, ss, gdtr, idtr, ldtr, tr } )
580582 }
@@ -610,11 +612,13 @@ pub mod migrate {
610612 let ( idtr, _) = self . idtr . into_raw ( ) ;
611613 vcpu. set_segreg ( vm_reg_name:: VM_REG_GUEST_IDTR , & idtr) ?;
612614
613- let ( ldtr, _ ) = self . ldtr . into_raw ( ) ;
615+ let ( ldtr, ldtrs ) = self . ldtr . into_raw ( ) ;
614616 vcpu. set_segreg ( vm_reg_name:: VM_REG_GUEST_LDTR , & ldtr) ?;
617+ vcpu. set_reg ( vm_reg_name:: VM_REG_GUEST_LDTR , ldtrs. into ( ) ) ?;
615618
616- let ( tr, _ ) = self . tr . into_raw ( ) ;
619+ let ( tr, trs ) = self . tr . into_raw ( ) ;
617620 vcpu. set_segreg ( vm_reg_name:: VM_REG_GUEST_TR , & tr) ?;
621+ vcpu. set_reg ( vm_reg_name:: VM_REG_GUEST_TR , trs. into ( ) ) ?;
618622 Ok ( ( ) )
619623 }
620624 }
0 commit comments