From patchwork Tue Jun 26 16:19:38 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikolay Nikolaev X-Patchwork-Id: 140009 Delivered-To: patch@linaro.org Received: by 2002:a2e:970d:0:0:0:0:0 with SMTP id r13-v6csp5441901lji; Tue, 26 Jun 2018 09:19:58 -0700 (PDT) X-Google-Smtp-Source: AAOMgpecmjg1RKccfEZvONcNaf9yPpWDzMvyUgrJBJtshN7wvSh75C/2Um8LuOMVPhywseDsYDtJ X-Received: by 2002:a1c:b54a:: with SMTP id e71-v6mr2210891wmf.154.1530029997952; Tue, 26 Jun 2018 09:19:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530029997; cv=none; d=google.com; s=arc-20160816; b=F5KscZBwhvwLI1aVE6r2grRP/PPCZv3jCFevciIxRBUAF5Eo1leJ0HvvG2D8LkQtSC 2xOjNnJ+DxReQeItqH5utaMB/cSxGgFicp3oBty/1PEuT3Ib7qbuSf/J+dcRlMNK0NlR fSBpjKlfv98I2eod0q1hGsC9iCY7qJgevJ9NeyNtx6lV5xBc7kewfZ+dpTM0evOWRwEh x9ZFIJkuqySGMAnutvmZvmyrRbP+LWAWpV00NHHeq4jNAaCjFRhXASVPqlfYXS0wleV1 pOKy3OdA4l3K2DmLfHnk1eL3VqPUcs2lpvoHaH6w3iES35YCPcVvReYJl6iN9l+S8WEX 3e+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:user-agent:references :in-reply-to:message-id:date:cc:to:from:dkim-signature :arc-authentication-results; bh=DeHYl6S+qE/deqeKTsfPvmsfGNhx2ikapv2wcW5uuvQ=; b=YnFVgNd9IH51nW9rp5K5plYY6F8+qq+nPEdXT8kUDp/JvLLwyX1Hut2xSdtr+lgZCH uEVusymzn6Enmlti53xWKh2/8nXiLQfVUplGqV5nL85qlcmNld9/bsBWEENNZIbE2EFD DfKw3eUNCb95Dx94vBKc+QzKLAj3wrH7cRrtKKAB97PCQv9TvnLQty41Uw6Ru5xMw0sY GkCsGhVVNVA8ulzdeZE9+EJdeyIou3TjMn4KNohbqVec1nuxbfnWwMCANF++ZvBF8Kz8 nTZ2ZKe3U37mZXDqEgqbrqa07mvGlYMZ9rR5cu+nM4XNvnt/2mfxYu+YC+hnwT7JiLHI 5FTA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b="cuX/DrAM"; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from dpdk.org (dpdk.org. [92.243.14.124]) by mx.google.com with ESMTP id w82-v6si2149022wme.183.2018.06.26.09.19.57; Tue, 26 Jun 2018 09:19:57 -0700 (PDT) Received-SPF: pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) client-ip=92.243.14.124; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b="cuX/DrAM"; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 019BB4C97; Tue, 26 Jun 2018 18:19:42 +0200 (CEST) Received: from mail-wr0-f193.google.com (mail-wr0-f193.google.com [209.85.128.193]) by dpdk.org (Postfix) with ESMTP id B1F391BB92 for ; Tue, 26 Jun 2018 18:19:40 +0200 (CEST) Received: by mail-wr0-f193.google.com with SMTP id p12-v6so16224645wrn.11 for ; Tue, 26 Jun 2018 09:19:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=DeHYl6S+qE/deqeKTsfPvmsfGNhx2ikapv2wcW5uuvQ=; b=cuX/DrAMiAuETJTy89+IJpeTHqvXD+mdtCmEoHytw2iNqfqBmHYWbV3mI/iKX02J4a N/0IuNEmfRSJ3DUxAJ/5z/APoYIhjYK0J5WqRF7Uh0FX3iJpiiz0xNIT/wTrwhYw41ja XYuyV1L6GGNHz7b6gLRw24REk0oxCpwrTDyfUiH5my05VfC/tg1eCif4G6LFJQTUUweE ZFCaZFELsq42CGXx1PnA4NFJzKNZje9TVN5U1PJhHvcMQEvMLpjKBiC5dWF7Kh8slRA9 QPTGuJvEyjvU+TKtmobJyKPwqR5TYiSDyJMS23WRoOclJ7dr5A8DC+iIuLmH+1RXAUC4 6WJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:date:message-id:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=DeHYl6S+qE/deqeKTsfPvmsfGNhx2ikapv2wcW5uuvQ=; b=ihIQMnUdU0EkrTSrsgBy7+NaVZO5edJ9IQNs2QP8PtUNfmcbDVpkwd9X1oLOL2pgXj 2yIlwFPLOGpPaQ17k8kEj0xsvpQCGroXSkv8Uh1BnK3wcp0JUU87kZUVv1QPh+Zn3IK6 OZ7dp8IajuOzgGJlZcYhK8i7OyHVCVVnCBULiSPsSTLNXU8FalnpsebuxWpXQ6JBh3KU UxwoOm6BRDk8wbG9K/acQlOFsIl92uacF+5fZ2gAZvidv6f1V+9fr4yywpU10ucQUdMm 91ul9mvL+M4fZe4xQia9G7MTLxsSVIZRj8xuC3A5dT2ywe/B2DoHd1gHC3rVg7Z95qkI k8cQ== X-Gm-Message-State: APt69E3/jT+xtrFyCZBT7wxedU2UxOKbFsfQpJk2ftWnnZc1s69sYeVp fznZLSoAkXMGmm4OoYl9/of2bKiS X-Received: by 2002:adf:8446:: with SMTP id 64-v6mr2207082wrf.138.1530029980092; Tue, 26 Jun 2018 09:19:40 -0700 (PDT) Received: from [127.0.1.1] ([82.146.27.14]) by smtp.gmail.com with ESMTPSA id w67-v6sm2687951wmw.0.2018.06.26.09.19.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Jun 2018 09:19:39 -0700 (PDT) From: Nikolay Nikolaev To: maxime.coquelin@redhat.com, tiwei.bie@intel.com, zhihong.wang@intel.com Cc: dev@dpdk.org Date: Tue, 26 Jun 2018 19:19:38 +0300 Message-ID: <153002997827.22089.15583649737397622971.stgit@T460> In-Reply-To: <153002988259.22089.8523468795459281187.stgit@T460> References: <153002988259.22089.8523468795459281187.stgit@T460> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v1 5/5] vhost: message handling implemented as a callback array X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Introduce vhost_message_handlers, which maps the message request type to the message handler. Then replace the switch construct with a map and call. Signed-off-by: Nikolay Nikolaev --- lib/librte_vhost/vhost_user.c | 144 ++++++++++++++++------------------------- 1 file changed, 55 insertions(+), 89 deletions(-) diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c index dd47d84c7..e62164d63 100644 --- a/lib/librte_vhost/vhost_user.c +++ b/lib/librte_vhost/vhost_user.c @@ -1379,6 +1379,36 @@ vhost_user_iotlb_msg(struct virtio_net **pdev, VhostUserMsg *msg) return VH_RESULT_OK; } +typedef int (*message_handler)(struct virtio_net **pdev, VhostUserMsg * msg); +static message_handler vhost_message_handlers[VHOST_USER_MAX] = { + [VHOST_USER_NONE] = NULL, + [VHOST_USER_GET_FEATURES] = vhost_user_get_features, + [VHOST_USER_SET_FEATURES] = vhost_user_set_features, + [VHOST_USER_SET_OWNER] = vhost_user_set_owner, + [VHOST_USER_RESET_OWNER] = vhost_user_reset_owner, + [VHOST_USER_SET_MEM_TABLE] = vhost_user_set_mem_table, + [VHOST_USER_SET_LOG_BASE] = vhost_user_set_log_base, + [VHOST_USER_SET_LOG_FD] = vhost_user_set_log_fd, + [VHOST_USER_SET_VRING_NUM] = vhost_user_set_vring_num, + [VHOST_USER_SET_VRING_ADDR] = vhost_user_set_vring_addr, + [VHOST_USER_SET_VRING_BASE] = vhost_user_set_vring_base, + [VHOST_USER_GET_VRING_BASE] = vhost_user_get_vring_base, + [VHOST_USER_SET_VRING_KICK] = vhost_user_set_vring_kick, + [VHOST_USER_SET_VRING_CALL] = vhost_user_set_vring_call, + [VHOST_USER_SET_VRING_ERR] = vhost_user_set_vring_err, + [VHOST_USER_GET_PROTOCOL_FEATURES] = vhost_user_get_protocol_features, + [VHOST_USER_SET_PROTOCOL_FEATURES] = vhost_user_set_protocol_features, + [VHOST_USER_GET_QUEUE_NUM] = vhost_user_get_queue_num, + [VHOST_USER_SET_VRING_ENABLE] = vhost_user_set_vring_enable, + [VHOST_USER_SEND_RARP] = vhost_user_send_rarp, + [VHOST_USER_NET_SET_MTU] = vhost_user_net_set_mtu, + [VHOST_USER_SET_SLAVE_REQ_FD] = vhost_user_set_req_fd, + [VHOST_USER_IOTLB_MSG] = vhost_user_iotlb_msg, + [VHOST_USER_CRYPTO_CREATE_SESS] = NULL, + [VHOST_USER_CRYPTO_CLOSE_SESS] = NULL, +}; + + /* return bytes# of read on success or negative val on failure. */ static int read_vhost_message(int sockfd, VhostUserMsg *msg) @@ -1623,97 +1653,33 @@ vhost_user_msg_handler(int vid, int fd) goto skip_to_post_handle; } - switch (msg.request.master) { - case VHOST_USER_GET_FEATURES: - ret = vhost_user_get_features(&dev, &msg); - send_vhost_reply(fd, &msg); - break; - case VHOST_USER_SET_FEATURES: - ret = vhost_user_set_features(&dev, &msg); - if (ret) - return -1; - break; - - case VHOST_USER_GET_PROTOCOL_FEATURES: - ret = vhost_user_get_protocol_features(&dev, &msg); - send_vhost_reply(fd, &msg); - break; - case VHOST_USER_SET_PROTOCOL_FEATURES: - ret = vhost_user_set_protocol_features(&dev, &msg); - break; - - case VHOST_USER_SET_OWNER: - ret = vhost_user_set_owner(&dev, &msg); - break; - case VHOST_USER_RESET_OWNER: - ret = vhost_user_reset_owner(&dev, &msg); - break; - - case VHOST_USER_SET_MEM_TABLE: - ret = vhost_user_set_mem_table(&dev, &msg); - break; - - case VHOST_USER_SET_LOG_BASE: - ret = vhost_user_set_log_base(&dev, &msg); - send_vhost_reply(fd, &msg); - break; - case VHOST_USER_SET_LOG_FD: - ret = vhost_user_set_log_fd(&dev, &msg); - break; - - case VHOST_USER_SET_VRING_NUM: - ret = vhost_user_set_vring_num(&dev, &msg); - break; - case VHOST_USER_SET_VRING_ADDR: - ret = vhost_user_set_vring_addr(&dev, &msg); - break; - case VHOST_USER_SET_VRING_BASE: - ret = vhost_user_set_vring_base(&dev, &msg); - break; - case VHOST_USER_GET_VRING_BASE: - ret = vhost_user_get_vring_base(&dev, &msg); - send_vhost_reply(fd, &msg); - break; + int request = msg.request.master; + if (vhost_message_handlers[request]) { + ret = vhost_message_handlers[request](&dev, &msg); - case VHOST_USER_SET_VRING_KICK: - ret = vhost_user_set_vring_kick(&dev, &msg); - break; - case VHOST_USER_SET_VRING_CALL: - ret = vhost_user_set_vring_call(&dev, &msg); - break; - - case VHOST_USER_SET_VRING_ERR: - ret = vhost_user_set_vring_err(&dev, &msg); - break; - - case VHOST_USER_GET_QUEUE_NUM: - ret = vhost_user_get_queue_num(&dev, &msg); - send_vhost_reply(fd, &msg); - break; - - case VHOST_USER_SET_VRING_ENABLE: - ret = vhost_user_set_vring_enable(&dev, &msg); - break; - case VHOST_USER_SEND_RARP: - ret = vhost_user_send_rarp(&dev, &msg); - break; - - case VHOST_USER_NET_SET_MTU: - ret = vhost_user_net_set_mtu(&dev, &msg); - break; - - case VHOST_USER_SET_SLAVE_REQ_FD: - ret = vhost_user_set_req_fd(&dev, &msg); - break; - - case VHOST_USER_IOTLB_MSG: - ret = vhost_user_iotlb_msg(&dev, &msg); - break; - - default: - ret = -1; - break; + switch (ret) { + case VH_RESULT_ERR: + RTE_LOG(ERR, VHOST_CONFIG, + "Processing %s failed.\n", + vhost_message_str[request]); + return -1; + case VH_RESULT_OK: + RTE_LOG(DEBUG, VHOST_CONFIG, + "Processing %s succeeded.\n", + vhost_message_str[request]); + break; + case VH_RESULT_REPLY: + RTE_LOG(INFO, VHOST_CONFIG, + "Processing %s succeeded and needs reply.\n", + vhost_message_str[request]); + send_vhost_reply(fd, &msg); + break; + } + } else { + RTE_LOG(ERR, VHOST_CONFIG, + "Requested invalid message type %d.\n", request); + return -1; } skip_to_post_handle: