Message ID | 1473738741-220600-4-git-send-email-arei.gonglei@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Sep 13, 2016 at 11:52:09AM +0800, Gonglei wrote: > In previous patch, we define CryptoLegacyHWOptions in > qapi-schema.json. we introduce the new/delete funciton > about crypto legacy hardware device. Isn't virtio-crypto / cryptodev an entirely new specification ? I'm surprised to be seeing something completely new described as "legacy". Can you explain this in more detail. Regards, Daniel
> -----Original Message----- > From: Daniel P. Berrange [mailto:berrange@redhat.com] > Sent: Tuesday, September 13, 2016 5:23 PM > To: Gonglei (Arei) > Cc: qemu-devel@nongnu.org; virtio-dev@lists.oasis-open.org; Huangpeng > (Peter); Luonengjun; mst@redhat.com; stefanha@redhat.com; > pbonzini@redhat.com; Huangweidong (C); mike.caraman@nxp.com; > agraf@suse.de; xin.zeng@intel.com; Claudio Fontana; nmorey@kalray.eu; > vincent.jardin@6wind.com > Subject: Re: [PATCH v2 03/15] crypto: add cryptoLegacyHW stuff > > On Tue, Sep 13, 2016 at 11:52:09AM +0800, Gonglei wrote: > > In previous patch, we define CryptoLegacyHWOptions in > > qapi-schema.json. we introduce the new/delete funciton > > about crypto legacy hardware device. > > Isn't virtio-crypto / cryptodev an entirely new specification ? Yes, it's an complete new device. > I'm surprised to be seeing something completely new described > as "legacy". Can you explain this in more detail. > Because there are two kind of crypto device, one is virtio-crypto which is a virtual crypto device (And virtio-crypto device is a real crypto device seen by the guest). The other is cryptodev backend device. I have no good idea to name the kind of virtio-crypto device, so named to legacy crypto device refer to Net stuff. Do you have any suggestion? Thanks! Regards, -Gonglei > Regards, > Daniel > -- > |: http://berrange.com -o- > http://www.flickr.com/photos/dberrange/ :| > |: http://libvirt.org -o- > http://virt-manager.org :| > |: http://autobuild.org -o- > http://search.cpan.org/~danberr/ :| > |: http://entangle-photo.org -o- > http://live.gnome.org/gtk-vnc :|
On Tue, Sep 13, 2016 at 10:05:01AM +0000, Gonglei (Arei) wrote: > > > > -----Original Message----- > > From: Daniel P. Berrange [mailto:berrange@redhat.com] > > Sent: Tuesday, September 13, 2016 5:23 PM > > To: Gonglei (Arei) > > Cc: qemu-devel@nongnu.org; virtio-dev@lists.oasis-open.org; Huangpeng > > (Peter); Luonengjun; mst@redhat.com; stefanha@redhat.com; > > pbonzini@redhat.com; Huangweidong (C); mike.caraman@nxp.com; > > agraf@suse.de; xin.zeng@intel.com; Claudio Fontana; nmorey@kalray.eu; > > vincent.jardin@6wind.com > > Subject: Re: [PATCH v2 03/15] crypto: add cryptoLegacyHW stuff > > > > On Tue, Sep 13, 2016 at 11:52:09AM +0800, Gonglei wrote: > > > In previous patch, we define CryptoLegacyHWOptions in > > > qapi-schema.json. we introduce the new/delete funciton > > > about crypto legacy hardware device. > > > > Isn't virtio-crypto / cryptodev an entirely new specification ? > > Yes, it's an complete new device. > > > I'm surprised to be seeing something completely new described > > as "legacy". Can you explain this in more detail. > > > Because there are two kind of crypto device, one is virtio-crypto which is > a virtual crypto device (And virtio-crypto device is a real crypto device seen by the guest). > The other is cryptodev backend device. I have no good idea to name the kind > of virtio-crypto device, so named to legacy crypto device refer to Net stuff. > > Do you have any suggestion? Thanks! How about just calling it 'Backend' instead of 'Legacy' then ? Regards, Daniel
> -----Original Message----- > From: Daniel P. Berrange [mailto:berrange@redhat.com] > Sent: Tuesday, September 13, 2016 6:09 PM > To: Gonglei (Arei) > Subject: Re: [PATCH v2 03/15] crypto: add cryptoLegacyHW stuff > > On Tue, Sep 13, 2016 at 10:05:01AM +0000, Gonglei (Arei) wrote: > > > > > > > -----Original Message----- > > > From: Daniel P. Berrange [mailto:berrange@redhat.com] > > > Sent: Tuesday, September 13, 2016 5:23 PM > > > To: Gonglei (Arei) > > > Cc: qemu-devel@nongnu.org; virtio-dev@lists.oasis-open.org; Huangpeng > > > (Peter); Luonengjun; mst@redhat.com; stefanha@redhat.com; > > > pbonzini@redhat.com; Huangweidong (C); mike.caraman@nxp.com; > > > agraf@suse.de; xin.zeng@intel.com; Claudio Fontana; nmorey@kalray.eu; > > > vincent.jardin@6wind.com > > > Subject: Re: [PATCH v2 03/15] crypto: add cryptoLegacyHW stuff > > > > > > On Tue, Sep 13, 2016 at 11:52:09AM +0800, Gonglei wrote: > > > > In previous patch, we define CryptoLegacyHWOptions in > > > > qapi-schema.json. we introduce the new/delete funciton > > > > about crypto legacy hardware device. > > > > > > Isn't virtio-crypto / cryptodev an entirely new specification ? > > > > Yes, it's an complete new device. > > > > > I'm surprised to be seeing something completely new described > > > as "legacy". Can you explain this in more detail. > > > > > Because there are two kind of crypto device, one is virtio-crypto which is > > a virtual crypto device (And virtio-crypto device is a real crypto device seen by > the guest). > > The other is cryptodev backend device. I have no good idea to name the > kind > > of virtio-crypto device, so named to legacy crypto device refer to Net stuff. > > > > Do you have any suggestion? Thanks! > > How about just calling it 'Backend' instead of 'Legacy' then ? > It sounds reasonable I think. Because the virtio specification usually say The backend device.... and The frontend driver.... So let's: s/cryptoLegacyHW/cryptoBackendHW/g Regards, -Gonglei
diff --git a/crypto/crypto.c b/crypto/crypto.c index a0e4a34..3f760fd 100644 --- a/crypto/crypto.c +++ b/crypto/crypto.c @@ -197,3 +197,77 @@ int qemu_send_crypto_packet_async(CryptoClientState *sender, return qemu_crypto_queue_send(queue, flags, sender, opaque, sent_cb); } + +CryptoLegacyHWState * +qemu_new_crypto_legacy_hw(CryptoClientInfo *info, + CryptoLegacyHWConf *conf, + const char *model, + const char *name, + void *opaque) +{ + CryptoLegacyHWState *crypto; + CryptoClientState **peers = conf->peers.ccs; + int i, queues = MAX(1, conf->peers.queues); + + assert(info->type == CRYPTO_CLIENT_OPTIONS_KIND_LEGACY_HW); + assert(info->size >= sizeof(CryptoLegacyHWState)); + + crypto = g_malloc0(info->size + sizeof(CryptoClientState) * queues); + crypto->ccs = (void *)crypto + info->size; + crypto->opaque = opaque; + crypto->conf = conf; + + for (i = 0; i < queues; i++) { + crypto_client_setup(&crypto->ccs[i], info, peers[i], model, name, + NULL); + crypto->ccs[i].queue_index = i; + crypto->ccs[i].ready = true; + } + + return crypto; +} + +static void qemu_cleanup_crypto_client(CryptoClientState *cc) +{ + QTAILQ_REMOVE(&crypto_clients, cc, next); + + if (cc->info->cleanup) { + cc->info->cleanup(cc); + } +} + +static void qemu_free_crypto_client(CryptoClientState *cc) +{ + if (cc->incoming_queue) { + qemu_del_crypto_queue(cc->incoming_queue); + } + if (cc->peer) { + cc->peer->peer = NULL; + } + g_free(cc->model); + g_free(cc->name); + + if (cc->destructor) { + cc->destructor(cc); + } +} + +CryptoClientState * +qemu_get_crypto_subqueue(CryptoLegacyHWState *crypto, int queue_index) +{ + return crypto->ccs + queue_index; +} + +void qemu_del_crypto_legacy_hw(CryptoLegacyHWState *crypto) +{ + int i, queues = MAX(crypto->conf->peers.queues, 1); + + for (i = queues - 1; i >= 0; i--) { + CryptoClientState *cc = qemu_get_crypto_subqueue(crypto, i); + + qemu_cleanup_crypto_client(cc); + qemu_free_crypto_client(cc); + } + + g_free(crypto); +} diff --git a/include/crypto/crypto.h b/include/crypto/crypto.h index 46b3b9e..4f0efb7 100644 --- a/include/crypto/crypto.h +++ b/include/crypto/crypto.h @@ -31,6 +31,7 @@ #include "qapi-types.h" #include "crypto/crypto-queue.h" +#define MAX_CRYPTO_QUEUE_NUM 64 typedef void (CryptoPoll)(CryptoClientState *, bool); typedef void (CryptoCleanup) (CryptoClientState *); @@ -59,6 +60,24 @@ struct CryptoClientState { CryptoClientDestructor *destructor; }; +/* qdev crypto legacy hardware properties */ + +typedef struct CryptoLegacyHWPeers { + CryptoClientState *ccs[MAX_CRYPTO_QUEUE_NUM]; + int32_t queues; +} CryptoLegacyHWPeers; + +typedef struct CryptoLegacyHWConf { + CryptoLegacyHWPeers peers; +} CryptoLegacyHWConf; + +typedef struct CryptoLegacyHWState { + CryptoClientState *ccs; + void *opaque; + CryptoLegacyHWConf *conf; + bool peer_deleted; +} CryptoLegacyHWState; + int crypto_client_init(QemuOpts *opts, Error **errp); int crypto_init_clients(void); @@ -74,5 +93,15 @@ int qemu_send_crypto_packet_async(CryptoClientState *sender, unsigned flags, void *opaque, CryptoPacketSent *sent_cb); +CryptoLegacyHWState * +qemu_new_crypto_legacy_hw(CryptoClientInfo *info, + CryptoLegacyHWConf *conf, + const char *model, + const char *name, + void *opaque); +void qemu_del_crypto_legacy_hw(CryptoLegacyHWState *crypto); + +CryptoClientState * +qemu_get_crypto_subqueue(CryptoLegacyHWState *crypto, int queue_index); #endif /* QCRYPTO_CRYPTO_H__ */
In previous patch, we define CryptoLegacyHWOptions in qapi-schema.json. we introduce the new/delete funciton about crypto legacy hardware device. Note: legacy cryptographic device support muliple queue. Signed-off-by: Gonglei <arei.gonglei@huawei.com> --- crypto/crypto.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++ include/crypto/crypto.h | 29 +++++++++++++++++++ 2 files changed, 103 insertions(+)