@@ -817,25 +817,13 @@ static int kvm_assign_ioeventfd_idx(struct kvm *kvm,
817817 if (ret < 0 )
818818 goto unlock_fail ;
819819
820- /* When length is ignored, MMIO is also put on a separate bus, for
821- * faster lookups.
822- */
823- if (!args -> len && bus_idx == KVM_MMIO_BUS ) {
824- ret = kvm_io_bus_register_dev (kvm , KVM_FAST_MMIO_BUS ,
825- p -> addr , 0 , & p -> dev );
826- if (ret < 0 )
827- goto register_fail ;
828- }
829-
830820 kvm -> buses [bus_idx ]-> ioeventfd_count ++ ;
831821 list_add_tail (& p -> list , & kvm -> ioeventfds );
832822
833823 mutex_unlock (& kvm -> slots_lock );
834824
835825 return 0 ;
836826
837- register_fail :
838- kvm_io_bus_unregister_dev (kvm , bus_idx , & p -> dev );
839827unlock_fail :
840828 mutex_unlock (& kvm -> slots_lock );
841829
@@ -874,10 +862,6 @@ kvm_deassign_ioeventfd_idx(struct kvm *kvm, enum kvm_bus bus_idx,
874862 continue ;
875863
876864 kvm_io_bus_unregister_dev (kvm , bus_idx , & p -> dev );
877- if (!p -> length && p -> bus_idx == KVM_MMIO_BUS ) {
878- kvm_io_bus_unregister_dev (kvm , KVM_FAST_MMIO_BUS ,
879- & p -> dev );
880- }
881865 kvm -> buses [bus_idx ]-> ioeventfd_count -- ;
882866 ioeventfd_release (p );
883867 ret = 0 ;
@@ -894,14 +878,19 @@ kvm_deassign_ioeventfd_idx(struct kvm *kvm, enum kvm_bus bus_idx,
894878static int kvm_deassign_ioeventfd (struct kvm * kvm , struct kvm_ioeventfd * args )
895879{
896880 enum kvm_bus bus_idx = ioeventfd_bus_from_flags (args -> flags );
881+ int ret = kvm_deassign_ioeventfd_idx (kvm , bus_idx , args );
882+
883+ if (!args -> len && bus_idx == KVM_MMIO_BUS )
884+ kvm_deassign_ioeventfd_idx (kvm , KVM_FAST_MMIO_BUS , args );
897885
898- return kvm_deassign_ioeventfd_idx ( kvm , bus_idx , args ) ;
886+ return ret ;
899887}
900888
901889static int
902890kvm_assign_ioeventfd (struct kvm * kvm , struct kvm_ioeventfd * args )
903891{
904892 enum kvm_bus bus_idx ;
893+ int ret ;
905894
906895 bus_idx = ioeventfd_bus_from_flags (args -> flags );
907896 /* must be natural-word sized, or 0 to ignore length */
@@ -930,7 +919,25 @@ kvm_assign_ioeventfd(struct kvm *kvm, struct kvm_ioeventfd *args)
930919 KVM_IOEVENTFD_FLAG_DATAMATCH ))
931920 return - EINVAL ;
932921
933- return kvm_assign_ioeventfd_idx (kvm , bus_idx , args );
922+ ret = kvm_assign_ioeventfd_idx (kvm , bus_idx , args );
923+ if (ret )
924+ goto fail ;
925+
926+ /* When length is ignored, MMIO is also put on a separate bus, for
927+ * faster lookups.
928+ */
929+ if (!args -> len && bus_idx == KVM_MMIO_BUS ) {
930+ ret = kvm_assign_ioeventfd_idx (kvm , KVM_FAST_MMIO_BUS , args );
931+ if (ret < 0 )
932+ goto fast_fail ;
933+ }
934+
935+ return 0 ;
936+
937+ fast_fail :
938+ kvm_deassign_ioeventfd_idx (kvm , bus_idx , args );
939+ fail :
940+ return ret ;
934941}
935942
936943int
0 commit comments