cryptodev: introduce a new is_used property
This property is used to Tag the cryptodev backend is used by virtio-crypto or not. Making cryptodev can't be hot unplugged when it's in use. Cleanup resources when cryptodev is finalized. Signed-off-by: Gonglei <arei.gonglei@huawei.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
c159a4d1d0
commit
46fd170545
@ -197,6 +197,22 @@ out:
|
|||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cryptodev_backend_set_used(CryptoDevBackend *backend, bool used)
|
||||||
|
{
|
||||||
|
backend->is_used = used;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cryptodev_backend_is_used(CryptoDevBackend *backend)
|
||||||
|
{
|
||||||
|
return backend->is_used;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
cryptodev_backend_can_be_deleted(UserCreatable *uc, Error **errp)
|
||||||
|
{
|
||||||
|
return !cryptodev_backend_is_used(CRYPTODEV_BACKEND(uc));
|
||||||
|
}
|
||||||
|
|
||||||
static void cryptodev_backend_instance_init(Object *obj)
|
static void cryptodev_backend_instance_init(Object *obj)
|
||||||
{
|
{
|
||||||
object_property_add(obj, "queues", "int",
|
object_property_add(obj, "queues", "int",
|
||||||
@ -209,7 +225,9 @@ static void cryptodev_backend_instance_init(Object *obj)
|
|||||||
|
|
||||||
static void cryptodev_backend_finalize(Object *obj)
|
static void cryptodev_backend_finalize(Object *obj)
|
||||||
{
|
{
|
||||||
|
CryptoDevBackend *backend = CRYPTODEV_BACKEND(obj);
|
||||||
|
|
||||||
|
cryptodev_backend_cleanup(backend, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -218,6 +236,7 @@ cryptodev_backend_class_init(ObjectClass *oc, void *data)
|
|||||||
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
|
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
|
||||||
|
|
||||||
ucc->complete = cryptodev_backend_complete;
|
ucc->complete = cryptodev_backend_complete;
|
||||||
|
ucc->can_be_deleted = cryptodev_backend_can_be_deleted;
|
||||||
|
|
||||||
QTAILQ_INIT(&crypto_clients);
|
QTAILQ_INIT(&crypto_clients);
|
||||||
}
|
}
|
||||||
|
@ -799,6 +799,7 @@ static void virtio_crypto_device_realize(DeviceState *dev, Error **errp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtio_crypto_init_config(vdev);
|
virtio_crypto_init_config(vdev);
|
||||||
|
cryptodev_backend_set_used(vcrypto->cryptodev, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void virtio_crypto_device_unrealize(DeviceState *dev, Error **errp)
|
static void virtio_crypto_device_unrealize(DeviceState *dev, Error **errp)
|
||||||
@ -818,6 +819,7 @@ static void virtio_crypto_device_unrealize(DeviceState *dev, Error **errp)
|
|||||||
g_free(vcrypto->vqs);
|
g_free(vcrypto->vqs);
|
||||||
|
|
||||||
virtio_cleanup(vdev);
|
virtio_cleanup(vdev);
|
||||||
|
cryptodev_backend_set_used(vcrypto->cryptodev, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const VMStateDescription vmstate_virtio_crypto = {
|
static const VMStateDescription vmstate_virtio_crypto = {
|
||||||
|
@ -202,6 +202,8 @@ struct CryptoDevBackend {
|
|||||||
Object parent_obj;
|
Object parent_obj;
|
||||||
|
|
||||||
bool ready;
|
bool ready;
|
||||||
|
/* Tag the cryptodev backend is used by virtio-crypto or not */
|
||||||
|
bool is_used;
|
||||||
CryptoDevBackendConf conf;
|
CryptoDevBackendConf conf;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -295,4 +297,25 @@ int cryptodev_backend_crypto_operation(
|
|||||||
void *opaque,
|
void *opaque,
|
||||||
uint32_t queue_index, Error **errp);
|
uint32_t queue_index, Error **errp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cryptodev_backend_set_used:
|
||||||
|
* @backend: the cryptodev backend object
|
||||||
|
* @used: ture or false
|
||||||
|
*
|
||||||
|
* Set the cryptodev backend is used by virtio-crypto or not
|
||||||
|
*/
|
||||||
|
void cryptodev_backend_set_used(CryptoDevBackend *backend, bool used);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cryptodev_backend_is_used:
|
||||||
|
* @backend: the cryptodev backend object
|
||||||
|
*
|
||||||
|
* Return the status that the cryptodev backend is used
|
||||||
|
* by virtio-crypto or not
|
||||||
|
*
|
||||||
|
* Returns: true on used, or false on not used
|
||||||
|
*/
|
||||||
|
bool cryptodev_backend_is_used(CryptoDevBackend *backend);
|
||||||
|
|
||||||
|
|
||||||
#endif /* CRYPTODEV_H */
|
#endif /* CRYPTODEV_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user