From patchwork Mon May 8 11:38:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Gonglei (Arei)" X-Patchwork-Id: 9716111 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id E5C9960234 for ; Mon, 8 May 2017 11:47:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D12451FF27 for ; Mon, 8 May 2017 11:47:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C5E5220243; Mon, 8 May 2017 11:47:26 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 2939A1FF27 for ; Mon, 8 May 2017 11:47:26 +0000 (UTC) Received: from localhost ([::1]:58942 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d7h8P-00007i-Fo for patchwork-qemu-devel@patchwork.kernel.org; Mon, 08 May 2017 07:47:25 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50746) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d7h0X-0002ze-QU for qemu-devel@nongnu.org; Mon, 08 May 2017 07:39:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d7h0W-0004XX-Mp for qemu-devel@nongnu.org; Mon, 08 May 2017 07:39:17 -0400 Received: from szxga01-in.huawei.com ([45.249.212.187]:3982) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1d7h0V-0004WY-RJ for qemu-devel@nongnu.org; Mon, 08 May 2017 07:39:16 -0400 Received: from 172.30.72.53 (EHLO DGGEML402-HUB.china.huawei.com) ([172.30.72.53]) by dggrg01-dlp.huawei.com (MOS 4.4.6-GA FastPath queued) with ESMTP id AOD07410; Mon, 08 May 2017 19:38:49 +0800 (CST) Received: from localhost (10.177.18.62) by DGGEML402-HUB.china.huawei.com (10.3.17.38) with Microsoft SMTP Server id 14.3.301.0; Mon, 8 May 2017 19:38:36 +0800 From: Gonglei To: Date: Mon, 8 May 2017 19:38:16 +0800 Message-ID: <1494243504-127980-2-git-send-email-arei.gonglei@huawei.com> X-Mailer: git-send-email 2.8.2.windows.1 In-Reply-To: <1494243504-127980-1-git-send-email-arei.gonglei@huawei.com> References: <1494243504-127980-1-git-send-email-arei.gonglei@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.177.18.62] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A090203.591058CB.0032, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0, ip=0.0.0.0, so=2014-11-16 11:51:01, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: ea76f428d027de081d2ad571cd0e5ef0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] [fuzzy] X-Received-From: 45.249.212.187 Subject: [Qemu-devel] [RFC v1 1/9] cryptodev: introduce stateless sym operation stuff X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: pasic@linux.vnet.ibm.com, weidong.huang@huawei.com, mst@redhat.com, xin.zeng@intel.com, luonengjun@huawei.com, linqiangmin@huawei.com, Gonglei , stefanha@redhat.com, cornelia.huck@de.ibm.com, wu.wubin@huawei.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Because a stateless crypto request include all information about one crypto operation, we should introduce a wrapper for it, and add a new crypto operation callback to do statless crypto operation. Signed-off-by: Gonglei --- backends/cryptodev-builtin.c | 10 ++++++++++ backends/cryptodev.c | 21 +++++++++++++++++++++ include/hw/virtio/virtio-crypto.h | 1 + include/sysemu/cryptodev.h | 19 +++++++++++++++++++ 4 files changed, 51 insertions(+) diff --git a/backends/cryptodev-builtin.c b/backends/cryptodev-builtin.c index 657c0ba..1fa2cab 100644 --- a/backends/cryptodev-builtin.c +++ b/backends/cryptodev-builtin.c @@ -372,6 +372,15 @@ static void cryptodev_builtin_cleanup( cryptodev_backend_set_ready(backend, false); } +static int +cryptodev_builtin_sym_stateless_operation( + CryptoDevBackend *backend, + CryptoDevBackendSymStatelessInfo *op_info, + uint32_t queue_index, Error **errp) +{ + return -VIRTIO_CRYPTO_ERR; +} + static void cryptodev_builtin_class_init(ObjectClass *oc, void *data) { @@ -382,6 +391,7 @@ cryptodev_builtin_class_init(ObjectClass *oc, void *data) bc->create_session = cryptodev_builtin_sym_create_session; bc->close_session = cryptodev_builtin_sym_close_session; bc->do_sym_op = cryptodev_builtin_sym_operation; + bc->do_sym_stateless_op = cryptodev_builtin_sym_stateless_operation; } static const TypeInfo cryptodev_builtin_info = { diff --git a/backends/cryptodev.c b/backends/cryptodev.c index 832f056..c6d7c5f 100644 --- a/backends/cryptodev.c +++ b/backends/cryptodev.c @@ -120,6 +120,21 @@ static int cryptodev_backend_sym_operation( return -VIRTIO_CRYPTO_ERR; } +static int cryptodev_backend_sym_stateless_operation( + CryptoDevBackend *backend, + CryptoDevBackendSymStatelessInfo *op_info, + uint32_t queue_index, Error **errp) +{ + CryptoDevBackendClass *bc = + CRYPTODEV_BACKEND_GET_CLASS(backend); + + if (bc->do_sym_stateless_op) { + return bc->do_sym_stateless_op(backend, op_info, queue_index, errp); + } + + return -VIRTIO_CRYPTO_ERR; +} + int cryptodev_backend_crypto_operation( CryptoDevBackend *backend, void *opaque, @@ -133,6 +148,12 @@ int cryptodev_backend_crypto_operation( return cryptodev_backend_sym_operation(backend, op_info, queue_index, errp); + } else if (req->flags == CRYPTODEV_BACKEND_ALG_SYM_STATELESS) { + CryptoDevBackendSymStatelessInfo *op_info; + op_info = req->u.sym_stateless_info; + + return cryptodev_backend_sym_stateless_operation(backend, + op_info, queue_index, errp); } else { error_setg(errp, "Unsupported cryptodev alg type: %" PRIu32 "", req->flags); diff --git a/include/hw/virtio/virtio-crypto.h b/include/hw/virtio/virtio-crypto.h index a00a0bf..465ad20 100644 --- a/include/hw/virtio/virtio-crypto.h +++ b/include/hw/virtio/virtio-crypto.h @@ -73,6 +73,7 @@ typedef struct VirtIOCryptoReq { struct VirtIOCrypto *vcrypto; union { CryptoDevBackendSymOpInfo *sym_op_info; + CryptoDevBackendSymStatelessInfo *sym_stateless_info; } u; } VirtIOCryptoReq; diff --git a/include/sysemu/cryptodev.h b/include/sysemu/cryptodev.h index a9d0d1e..be507f7 100644 --- a/include/sysemu/cryptodev.h +++ b/include/sysemu/cryptodev.h @@ -58,6 +58,7 @@ typedef struct CryptoDevBackend CryptoDevBackend; enum CryptoDevBackendAlgType { CRYPTODEV_BACKEND_ALG_SYM, + CRYPTODEV_BACKEND_ALG_SYM_STATELESS, CRYPTODEV_BACKEND_ALG__MAX, }; @@ -146,6 +147,21 @@ typedef struct CryptoDevBackendSymOpInfo { uint8_t data[0]; } CryptoDevBackendSymOpInfo; +/** + * CryptoDevBackendSymStatelessInfo: + * + * @session_info: session information, see above + * CryptoDevBackendSymSessionInfo + * @op_info: crypto operation information, see above + * CryptoDevBackendSymOpInfo, @session_id is ignored + * + */ +typedef struct CryptoDevBackendSymStatelessInfo { + CryptoDevBackendSymSessionInfo session_info; + CryptoDevBackendSymOpInfo op_info; +} CryptoDevBackendSymStatelessInfo; + + typedef struct CryptoDevBackendClass { ObjectClass parent_class; @@ -161,6 +177,9 @@ typedef struct CryptoDevBackendClass { int (*do_sym_op)(CryptoDevBackend *backend, CryptoDevBackendSymOpInfo *op_info, uint32_t queue_index, Error **errp); + int (*do_sym_stateless_op)(CryptoDevBackend *backend, + CryptoDevBackendSymStatelessInfo *op_info, + uint32_t queue_index, Error **errp); } CryptoDevBackendClass;