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);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
CryptoDevBackend *backend = CRYPTODEV_BACKEND(obj);
|
||||
|
||||
cryptodev_backend_cleanup(backend, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -218,6 +236,7 @@ cryptodev_backend_class_init(ObjectClass *oc, void *data)
|
||||
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
|
||||
|
||||
ucc->complete = cryptodev_backend_complete;
|
||||
ucc->can_be_deleted = cryptodev_backend_can_be_deleted;
|
||||
|
||||
QTAILQ_INIT(&crypto_clients);
|
||||
}
|
||||
|
@ -799,6 +799,7 @@ static void virtio_crypto_device_realize(DeviceState *dev, Error **errp)
|
||||
}
|
||||
|
||||
virtio_crypto_init_config(vdev);
|
||||
cryptodev_backend_set_used(vcrypto->cryptodev, true);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
virtio_cleanup(vdev);
|
||||
cryptodev_backend_set_used(vcrypto->cryptodev, false);
|
||||
}
|
||||
|
||||
static const VMStateDescription vmstate_virtio_crypto = {
|
||||
|
@ -202,6 +202,8 @@ struct CryptoDevBackend {
|
||||
Object parent_obj;
|
||||
|
||||
bool ready;
|
||||
/* Tag the cryptodev backend is used by virtio-crypto or not */
|
||||
bool is_used;
|
||||
CryptoDevBackendConf conf;
|
||||
};
|
||||
|
||||
@ -295,4 +297,25 @@ int cryptodev_backend_crypto_operation(
|
||||
void *opaque,
|
||||
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 */
|
||||
|
Loading…
Reference in New Issue
Block a user