On 09/08/19 17:59, Adalbert Lazăr wrote:
> +static int kvmi_recv(void *arg)
> +{
> + struct kvmi *ikvm = arg;
> +
> + kvmi_info(ikvm, "Hooking VM\n");
> +
> + while (kvmi_msg_process(ikvm))
> + ;
> +
> + kvmi_info(ikvm, "Unhooking VM\n");
> +
> + kvmi_end_introspection(ikvm);
> +
> + return 0;
> +}
> +
Rename this to kvmi_recv_thread instead, please.
> +
> + /*
> + * Make sure all the KVM/KVMI structures are linked and no pointer
> + * is read as NULL after the reference count has been set.
> + */
> + smp_mb__before_atomic();
This is an smp_wmb(), not an smp_mb__before_atomic(). Add a comment
that it pairs with the refcount_inc_not_zero in kvmi_get.
> + refcount_set(&kvm->kvmi_ref, 1);
> +
> @@ -57,8 +183,27 @@ void kvmi_destroy_vm(struct kvm *kvm)
> if (!ikvm)
> return;
>
> + /* trigger socket shutdown - kvmi_recv() will start shutdown process */
> + kvmi_sock_shutdown(ikvm);
> +
> kvmi_put(kvm);
>
> /* wait for introspection resources to be released */
> wait_for_completion_killable(&kvm->kvmi_completed);
> }
> +
This addition means that kvmi_destroy_vm should have called
kvmi_end_introspection instead. In patch 1, kvmi_end_introspection
should have been just kvmi_put, now this patch can add kvmi_sock_shutdown.
Paolo
_______________________________________________
Virtualization mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/virtualization