From patchwork Wed Oct 19 08:41:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Pei, Andy" X-Patchwork-Id: 118513 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 751D2A0581; Wed, 19 Oct 2022 11:31:49 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 73208427F9; Wed, 19 Oct 2022 11:31:48 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mails.dpdk.org (Postfix) with ESMTP id 2480F427F7 for ; Wed, 19 Oct 2022 11:31:46 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1666171907; x=1697707907; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=rakQV2IHcfDwfZqNZi7dr/4nebJyRsH3mVtU0TtwwFc=; b=JzXUMoKsiH8kvJendg2A/IT+wcfWqBfFv0e1QgIgHK7gX3K5O08ySy6S 8MQ8YN2AHonZZA78FnoxVR1HoSKCRE0ASFhI0kRkEu0jZQgKN47AKOUvn jNcSL785bcufBlIBArYADxnyhFFOrTHzxUEqyWe6ZjSLtrcLSUpUfg/Jf Sx53CRivNMrlfLA0Wqxw/a/Ov06jNL7wYTGMG9scSaCyRyPo0VBKw9UHW vAGVyTc5vaDzBix1GIckg0agXjJLROoFnhnRaTNg0gG6PzvSIZGmYEL5k 32J4yTBYwIXUfNodoYQAKgaTvo2RnZnMXmwqvoghDG4DrZ0BnSF2efD6U A==; X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="303976893" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="303976893" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Oct 2022 02:31:42 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="771690848" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="771690848" Received: from dpdk-dipei.sh.intel.com ([10.67.110.251]) by fmsmga001.fm.intel.com with ESMTP; 19 Oct 2022 02:31:41 -0700 From: Andy Pei To: dev@dpdk.org Cc: chenbo.xia@intel.com, rosen.xu@intel.com, wei.huang@intel.com, gang.cao@intel.com, maxime.coquelin@redhat.com Subject: [PATCH v9 01/12] vdpa/ifc: add new device ID for legacy network device Date: Wed, 19 Oct 2022 16:41:13 +0800 Message-Id: <1666168884-104665-2-git-send-email-andy.pei@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666168884-104665-1-git-send-email-andy.pei@intel.com> References: <1661229305-240952-2-git-send-email-andy.pei@intel.com> <1666168884-104665-1-git-send-email-andy.pei@intel.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Huang Wei Add new device id to support IFCVF_NET_TRANSITIONAL_DEVICE_ID (0x1000). Rename macro from "IFCVF_BLK_DEVICE_ID" to "IFCVF_SUBSYS_BLK_DEVICE_ID". Signed-off-by: Huang Wei Signed-off-by: Andy Pei Reviewed-by: Chenbo Xia Reviewed-by: Maxime Coquelin --- drivers/vdpa/ifc/base/ifcvf.h | 6 ++++-- drivers/vdpa/ifc/ifcvf_vdpa.c | 13 ++++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/vdpa/ifc/base/ifcvf.h b/drivers/vdpa/ifc/base/ifcvf.h index 9d95aac..ef7697a 100644 --- a/drivers/vdpa/ifc/base/ifcvf.h +++ b/drivers/vdpa/ifc/base/ifcvf.h @@ -12,12 +12,14 @@ #define IFCVF_BLK 1 #define IFCVF_VENDOR_ID 0x1AF4 -#define IFCVF_NET_DEVICE_ID 0x1041 +#define IFCVF_NET_MODERN_DEVICE_ID 0x1041 #define IFCVF_BLK_MODERN_DEVICE_ID 0x1042 +#define IFCVF_NET_TRANSITIONAL_DEVICE_ID 0x1000 #define IFCVF_BLK_TRANSITIONAL_DEVICE_ID 0x1001 #define IFCVF_SUBSYS_VENDOR_ID 0x8086 #define IFCVF_SUBSYS_DEVICE_ID 0x001A -#define IFCVF_BLK_DEVICE_ID 0x0002 +#define IFCVF_SUBSYS_NET_DEVICE_ID 0x0001 +#define IFCVF_SUBSYS_BLK_DEVICE_ID 0x0002 #define IFCVF_MAX_QUEUES 1 diff --git a/drivers/vdpa/ifc/ifcvf_vdpa.c b/drivers/vdpa/ifc/ifcvf_vdpa.c index d5ac583..b4389a0 100644 --- a/drivers/vdpa/ifc/ifcvf_vdpa.c +++ b/drivers/vdpa/ifc/ifcvf_vdpa.c @@ -1684,23 +1684,30 @@ struct rte_vdpa_dev_info dev_info[] = { static const struct rte_pci_id pci_id_ifcvf_map[] = { { .class_id = RTE_CLASS_ANY_ID, .vendor_id = IFCVF_VENDOR_ID, - .device_id = IFCVF_NET_DEVICE_ID, + .device_id = IFCVF_NET_MODERN_DEVICE_ID, .subsystem_vendor_id = IFCVF_SUBSYS_VENDOR_ID, .subsystem_device_id = IFCVF_SUBSYS_DEVICE_ID, }, { .class_id = RTE_CLASS_ANY_ID, .vendor_id = IFCVF_VENDOR_ID, + .device_id = IFCVF_NET_TRANSITIONAL_DEVICE_ID, + .subsystem_vendor_id = IFCVF_SUBSYS_VENDOR_ID, + .subsystem_device_id = IFCVF_SUBSYS_NET_DEVICE_ID, + }, + + { .class_id = RTE_CLASS_ANY_ID, + .vendor_id = IFCVF_VENDOR_ID, .device_id = IFCVF_BLK_TRANSITIONAL_DEVICE_ID, .subsystem_vendor_id = IFCVF_SUBSYS_VENDOR_ID, - .subsystem_device_id = IFCVF_BLK_DEVICE_ID, + .subsystem_device_id = IFCVF_SUBSYS_BLK_DEVICE_ID, }, { .class_id = RTE_CLASS_ANY_ID, .vendor_id = IFCVF_VENDOR_ID, .device_id = IFCVF_BLK_MODERN_DEVICE_ID, .subsystem_vendor_id = IFCVF_SUBSYS_VENDOR_ID, - .subsystem_device_id = IFCVF_BLK_DEVICE_ID, + .subsystem_device_id = IFCVF_SUBSYS_BLK_DEVICE_ID, }, { .vendor_id = 0, /* sentinel */ From patchwork Wed Oct 19 08:41:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Pei, Andy" X-Patchwork-Id: 118514 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 443F6A0581; Wed, 19 Oct 2022 11:31:54 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5C27C4280E; Wed, 19 Oct 2022 11:31:50 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mails.dpdk.org (Postfix) with ESMTP id 06A4C42802 for ; Wed, 19 Oct 2022 11:31:48 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1666171909; x=1697707909; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=MZkE2BhYeMTxAZlKloqSsOQ5PvQYywfYmwmnp/qtYZA=; b=gQjnXmoxXtQXOHU/wZI6/t1WlSfSLDF2rpmgKYmQw4fB/RPF94usgL+V b549Fst8XLPC0kryjXnRScZgflhxOW163L5mO4z3aZRflGvW0DFuMVg2v Owou0K8k+AdKS4BtJZeuDA3NomfHDHMxNvyXP023NV4Gvsvh+Svrq0OOq TmhnGFOUOBQOih8HmEb8wfFdTecPwCG9DyLUt2CnxiQV4X1W2uXZ+y0P4 uVqMiT+3hQ196zQa3D47pAmnfN1VRZkUHlhWU7McsWedk/csBFgYC4G7N IbfeovDlZNS2UdUS28v+scq881DMLisPaLtKUoFa/qJFCfu+sBGBQGznk w==; X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="303976904" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="303976904" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Oct 2022 02:31:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="771690867" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="771690867" Received: from dpdk-dipei.sh.intel.com ([10.67.110.251]) by fmsmga001.fm.intel.com with ESMTP; 19 Oct 2022 02:31:42 -0700 From: Andy Pei To: dev@dpdk.org Cc: chenbo.xia@intel.com, rosen.xu@intel.com, wei.huang@intel.com, gang.cao@intel.com, maxime.coquelin@redhat.com Subject: [PATCH v9 02/12] vdpa/ifc: add multi-queue support Date: Wed, 19 Oct 2022 16:41:14 +0800 Message-Id: <1666168884-104665-3-git-send-email-andy.pei@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666168884-104665-1-git-send-email-andy.pei@intel.com> References: <1661229305-240952-2-git-send-email-andy.pei@intel.com> <1666168884-104665-1-git-send-email-andy.pei@intel.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Enable VHOST_USER_PROTOCOL_F_MQ feature. Expose IFCVF_MQ_OFFSET register to enable multi-queue. Signed-off-by: Andy Pei Signed-off-by: Huang Wei Reviewed-by: Chenbo Xia --- drivers/vdpa/ifc/base/ifcvf.c | 9 +++++++++ drivers/vdpa/ifc/base/ifcvf.h | 2 ++ drivers/vdpa/ifc/ifcvf_vdpa.c | 1 + 3 files changed, 12 insertions(+) diff --git a/drivers/vdpa/ifc/base/ifcvf.c b/drivers/vdpa/ifc/base/ifcvf.c index f1e1474..81c68c0 100644 --- a/drivers/vdpa/ifc/base/ifcvf.c +++ b/drivers/vdpa/ifc/base/ifcvf.c @@ -90,6 +90,15 @@ if (!hw->lm_cfg) WARNINGOUT("HW support live migration not support!\n"); + /* For some hardware implementation, for example: + * the BAR 4 of PF is NULL, while BAR 4 of VF is not. + * This code makes sure hw->mq_cfg is a valid address. + */ + if (hw->mem_resource[4].addr) + hw->mq_cfg = hw->mem_resource[4].addr + IFCVF_MQ_OFFSET; + else + hw->mq_cfg = NULL; + if (hw->common_cfg == NULL || hw->notify_base == NULL || hw->isr == NULL || hw->dev_cfg == NULL) { DEBUGOUT("capability incomplete\n"); diff --git a/drivers/vdpa/ifc/base/ifcvf.h b/drivers/vdpa/ifc/base/ifcvf.h index ef7697a..d16d9ab 100644 --- a/drivers/vdpa/ifc/base/ifcvf.h +++ b/drivers/vdpa/ifc/base/ifcvf.h @@ -50,6 +50,7 @@ #define IFCVF_LM_CFG_SIZE 0x40 #define IFCVF_LM_RING_STATE_OFFSET 0x20 +#define IFCVF_MQ_OFFSET 0x28 #define IFCVF_LM_LOGGING_CTRL 0x0 @@ -149,6 +150,7 @@ struct ifcvf_hw { u16 *notify_base; u16 *notify_addr[IFCVF_MAX_QUEUES * 2]; u8 *lm_cfg; + u8 *mq_cfg; struct vring_info vring[IFCVF_MAX_QUEUES * 2]; u8 nr_vring; int device_type; diff --git a/drivers/vdpa/ifc/ifcvf_vdpa.c b/drivers/vdpa/ifc/ifcvf_vdpa.c index b4389a0..008cf89 100644 --- a/drivers/vdpa/ifc/ifcvf_vdpa.c +++ b/drivers/vdpa/ifc/ifcvf_vdpa.c @@ -1248,6 +1248,7 @@ struct rte_vdpa_dev_info { 1ULL << VHOST_USER_PROTOCOL_F_SLAVE_SEND_FD | \ 1ULL << VHOST_USER_PROTOCOL_F_HOST_NOTIFIER | \ 1ULL << VHOST_USER_PROTOCOL_F_LOG_SHMFD | \ + 1ULL << VHOST_USER_PROTOCOL_F_MQ | \ 1ULL << VHOST_USER_PROTOCOL_F_STATUS) #define VDPA_BLK_PROTOCOL_FEATURES \ From patchwork Wed Oct 19 08:41:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Pei, Andy" X-Patchwork-Id: 118515 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A9978A0581; Wed, 19 Oct 2022 11:32:00 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4992842825; Wed, 19 Oct 2022 11:31:52 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mails.dpdk.org (Postfix) with ESMTP id 7176D4281B for ; Wed, 19 Oct 2022 11:31:50 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1666171910; x=1697707910; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=B8ztTGzaGj+iPoPQvv5PN5iCSJ5ejZf1TdCqRnf0ebI=; b=NLiad570grByIryoZg37g9gRkPv6ZHShxkZzzJOhyD2TeRbBXtmCiT7r f2uwqxvo3MY0jkolhhOeVPihInzY6W3StVKdXkXrmeDBGRpGw4W8A+qbO XAU4ndg43pj47xW9htfG5E+UPdFdJIAnbM64+BCksE2OMQslPAqbVGqdv E0pyWLHa2PzVN1M+Vwr5FQ1zIPfdbdTYlN0MpUlHMc2d9Nnw//yTJbDWl PQTT4VberAVvQB/GKAg54iIL6CPCi91mFPjQrCTuhVNkUtu5ldLU1Nbwn aqh+KM6EP6/2AX61P9xEQm4HKQ4h0X3/KyEIfZDzf4sZg4cHhA7N8HFBH g==; X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="303976912" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="303976912" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Oct 2022 02:31:46 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="771690882" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="771690882" Received: from dpdk-dipei.sh.intel.com ([10.67.110.251]) by fmsmga001.fm.intel.com with ESMTP; 19 Oct 2022 02:31:44 -0700 From: Andy Pei To: dev@dpdk.org Cc: chenbo.xia@intel.com, rosen.xu@intel.com, wei.huang@intel.com, gang.cao@intel.com, maxime.coquelin@redhat.com Subject: [PATCH v9 03/12] vdpa/ifc: set max queues based on virtio spec Date: Wed, 19 Oct 2022 16:41:15 +0800 Message-Id: <1666168884-104665-4-git-send-email-andy.pei@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666168884-104665-1-git-send-email-andy.pei@intel.com> References: <1661229305-240952-2-git-send-email-andy.pei@intel.com> <1666168884-104665-1-git-send-email-andy.pei@intel.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Set max_queues according to virtio spec. For virtio BLK device, set max_queues to the value of num_queues in struct virtio_blk_config. For virtio NET device, read num_queues from struct ifcvf_pci_common_cfg, get the queue pair number using num_queues and set max_queues to it. Signed-off-by: Andy Pei Signed-off-by: Huang Wei Reviewed-by: Chenbo Xia --- drivers/vdpa/ifc/base/ifcvf.h | 2 +- drivers/vdpa/ifc/ifcvf_vdpa.c | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/drivers/vdpa/ifc/base/ifcvf.h b/drivers/vdpa/ifc/base/ifcvf.h index d16d9ab..1e133c0 100644 --- a/drivers/vdpa/ifc/base/ifcvf.h +++ b/drivers/vdpa/ifc/base/ifcvf.h @@ -21,7 +21,7 @@ #define IFCVF_SUBSYS_NET_DEVICE_ID 0x0001 #define IFCVF_SUBSYS_BLK_DEVICE_ID 0x0002 -#define IFCVF_MAX_QUEUES 1 +#define IFCVF_MAX_QUEUES 32 #ifndef VIRTIO_F_IOMMU_PLATFORM #define VIRTIO_F_IOMMU_PLATFORM 33 diff --git a/drivers/vdpa/ifc/ifcvf_vdpa.c b/drivers/vdpa/ifc/ifcvf_vdpa.c index 008cf89..5a24204 100644 --- a/drivers/vdpa/ifc/ifcvf_vdpa.c +++ b/drivers/vdpa/ifc/ifcvf_vdpa.c @@ -26,6 +26,12 @@ #include "base/ifcvf.h" +/* + * RTE_MIN() cannot be used since braced-group within expression allowed + * only inside a function. + */ +#define MIN(v1, v2) ((v1) < (v2) ? (v1) : (v2)) + RTE_LOG_REGISTER(ifcvf_vdpa_logtype, pmd.vdpa.ifcvf, NOTICE); #define DRV_LOG(level, fmt, args...) \ rte_log(RTE_LOG_ ## level, ifcvf_vdpa_logtype, \ @@ -1512,6 +1518,7 @@ struct rte_vdpa_dev_info dev_info[] = { uint64_t capacity = 0; uint8_t *byte; uint32_t i; + uint16_t queue_pairs; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; @@ -1559,7 +1566,6 @@ struct rte_vdpa_dev_info dev_info[] = { } internal->configured = 0; - internal->max_queues = IFCVF_MAX_QUEUES; features = ifcvf_get_features(&internal->hw); device_id = ifcvf_pci_get_device_type(pci_dev); @@ -1570,6 +1576,14 @@ struct rte_vdpa_dev_info dev_info[] = { if (device_id == VIRTIO_ID_NET) { internal->hw.device_type = IFCVF_NET; + /* + * ifc device always has CTRL_VQ, + * and supports VIRTIO_NET_F_CTRL_VQ feature. + */ + queue_pairs = (internal->hw.common_cfg->num_queues - 1) / 2; + DRV_LOG(INFO, "%s support %u queue pairs", pci_dev->name, + queue_pairs); + internal->max_queues = MIN(IFCVF_MAX_QUEUES, queue_pairs); internal->features = features & ~(1ULL << VIRTIO_F_IOMMU_PLATFORM); internal->features |= dev_info[IFCVF_NET].features; @@ -1609,6 +1623,9 @@ struct rte_vdpa_dev_info dev_info[] = { internal->hw.blk_cfg->geometry.sectors); DRV_LOG(DEBUG, "num_queues: 0x%08x", internal->hw.blk_cfg->num_queues); + + internal->max_queues = MIN(IFCVF_MAX_QUEUES, + internal->hw.blk_cfg->num_queues); } list->internal = internal; From patchwork Wed Oct 19 08:41:16 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Pei, Andy" X-Patchwork-Id: 118517 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id DC0C2A0581; Wed, 19 Oct 2022 11:32:12 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3988B42905; Wed, 19 Oct 2022 11:31:55 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mails.dpdk.org (Postfix) with ESMTP id 672C14282D for ; Wed, 19 Oct 2022 11:31:53 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1666171913; x=1697707913; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=Vw+EQojkuGZtMt5TTcckCCxAzKV7MQu6TroOvfBfjhM=; b=fmrU+tRRRgclgoJICza/bnaHGjIsP4FwANb1Weue9NH8Zl1S9dVnkNl9 f+AWlQffijA38BgaMYifAPanxiNvsTevUbDMiKiU7LsCh8qQPFYQlfcMV bPKKTDTfhGgotmZTYqa3SYlepA0BGbYOsD/teKsKaW68aMLkz9kPln8Cx vSnuVVhyhzKlHijF5JsYF5i3Wf7/nusNZ8sVDWPzkU2/KjQphN8EhOmk6 HZYmX6CgYRRlBu75e7RrV+ShY7qd/V9BsppNljrqTuzNZJ/i89J+YDQOw utKU5oUvXx7JcQnehC3RBRW33vosjpkgk4dzb022pgoTWrGQPeIeQDYN7 g==; X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="303976924" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="303976924" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Oct 2022 02:31:47 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="771690897" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="771690897" Received: from dpdk-dipei.sh.intel.com ([10.67.110.251]) by fmsmga001.fm.intel.com with ESMTP; 19 Oct 2022 02:31:46 -0700 From: Andy Pei To: dev@dpdk.org Cc: chenbo.xia@intel.com, rosen.xu@intel.com, wei.huang@intel.com, gang.cao@intel.com, maxime.coquelin@redhat.com Subject: [PATCH v9 04/12] vdpa/ifc: write queue count to MQ register Date: Wed, 19 Oct 2022 16:41:16 +0800 Message-Id: <1666168884-104665-5-git-send-email-andy.pei@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666168884-104665-1-git-send-email-andy.pei@intel.com> References: <1661229305-240952-2-git-send-email-andy.pei@intel.com> <1666168884-104665-1-git-send-email-andy.pei@intel.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Write queue count to IFCVF_MQ_OFFSET register to enable multi-queue feature. Signed-off-by: Andy Pei Signed-off-by: Huang Wei Reviewed-by: Chenbo Xia --- drivers/vdpa/ifc/base/ifcvf.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/drivers/vdpa/ifc/base/ifcvf.c b/drivers/vdpa/ifc/base/ifcvf.c index 81c68c0..b377126 100644 --- a/drivers/vdpa/ifc/base/ifcvf.c +++ b/drivers/vdpa/ifc/base/ifcvf.c @@ -202,6 +202,37 @@ IFCVF_WRITE_REG32(val >> 32, hi); } +STATIC void +ifcvf_enable_mq(struct ifcvf_hw *hw) +{ + u8 *mq_cfg; + u8 qid; + int nr_queue = 0; + + for (qid = 0; qid < hw->nr_vring; qid++) { + if (!hw->vring[qid].enable) + continue; + nr_queue++; + } + + if (nr_queue == 0) { + WARNINGOUT("no enabled vring\n"); + return; + } + + mq_cfg = hw->mq_cfg; + if (mq_cfg) { + if (hw->device_type == IFCVF_BLK) { + *(u32 *)mq_cfg = nr_queue; + RTE_LOG(INFO, PMD, "%d queues are enabled\n", nr_queue); + } else { + *(u32 *)mq_cfg = nr_queue / 2; + RTE_LOG(INFO, PMD, "%d queue pairs are enabled\n", + nr_queue / 2); + } + } +} + STATIC int ifcvf_hw_enable(struct ifcvf_hw *hw) { @@ -219,6 +250,7 @@ return -1; } + ifcvf_enable_mq(hw); for (i = 0; i < hw->nr_vring; i++) { IFCVF_WRITE_REG16(i, &cfg->queue_select); io_write64_twopart(hw->vring[i].desc, &cfg->queue_desc_lo, From patchwork Wed Oct 19 08:41:17 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Pei, Andy" X-Patchwork-Id: 118518 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id AC34AA0581; Wed, 19 Oct 2022 11:32:19 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 936E64284D; Wed, 19 Oct 2022 11:31:57 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mails.dpdk.org (Postfix) with ESMTP id AAD0942829 for ; Wed, 19 Oct 2022 11:31:53 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1666171913; x=1697707913; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=u6gMBbApdXSB3Ld3Jjg3QEGS4spcCcxNroeYHYyn54Q=; b=d2vz9v7HZgrazralYI2bI0sxvXPOboE7LXP8lc0CZU1EWnKT9SmJwbC9 dFUbrvrOOeA1TTxfcOcHLEMNkTaRnZ5hKnLXfmcPJAHcstFcDkq5oURwj H/w/R065hWBWxOY8aVsxUllVqGW34rRHe/24V5OwixAehwq5mheAfLi7X n2zK+ZZ1NQdn184uaqR2kSqQdzBLlTWSEWzpsAY0Z6UgxyFRzi8baTsrr GWfebF3tKOPS7MR+uUBKOZ6XnR8Be3e0sip7VJ6k32LP8qO2Spf4r96OI w5L28cVdeaAq3KH4AfQinTromJOGhZn35gG8Ai0AZs2ldwm1ABlQlcff9 g==; X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="303976930" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="303976930" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Oct 2022 02:31:49 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="771690918" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="771690918" Received: from dpdk-dipei.sh.intel.com ([10.67.110.251]) by fmsmga001.fm.intel.com with ESMTP; 19 Oct 2022 02:31:47 -0700 From: Andy Pei To: dev@dpdk.org Cc: chenbo.xia@intel.com, rosen.xu@intel.com, wei.huang@intel.com, gang.cao@intel.com, maxime.coquelin@redhat.com Subject: [PATCH v9 05/12] vdpa/ifc: only configure enabled queue Date: Wed, 19 Oct 2022 16:41:17 +0800 Message-Id: <1666168884-104665-6-git-send-email-andy.pei@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666168884-104665-1-git-send-email-andy.pei@intel.com> References: <1661229305-240952-2-git-send-email-andy.pei@intel.com> <1666168884-104665-1-git-send-email-andy.pei@intel.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org When configuring the hardware queue, we only configure queues which have been enabled by vhost. Signed-off-by: Andy Pei Signed-off-by: Huang Wei Reviewed-by: Chenbo Xia --- drivers/vdpa/ifc/base/ifcvf.c | 3 +++ drivers/vdpa/ifc/ifcvf_vdpa.c | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/drivers/vdpa/ifc/base/ifcvf.c b/drivers/vdpa/ifc/base/ifcvf.c index b377126..30bb8cb 100644 --- a/drivers/vdpa/ifc/base/ifcvf.c +++ b/drivers/vdpa/ifc/base/ifcvf.c @@ -252,6 +252,9 @@ ifcvf_enable_mq(hw); for (i = 0; i < hw->nr_vring; i++) { + if (!hw->vring[i].enable) + continue; + IFCVF_WRITE_REG16(i, &cfg->queue_select); io_write64_twopart(hw->vring[i].desc, &cfg->queue_desc_lo, &cfg->queue_desc_hi); diff --git a/drivers/vdpa/ifc/ifcvf_vdpa.c b/drivers/vdpa/ifc/ifcvf_vdpa.c index 5a24204..0c3407a 100644 --- a/drivers/vdpa/ifc/ifcvf_vdpa.c +++ b/drivers/vdpa/ifc/ifcvf_vdpa.c @@ -284,6 +284,8 @@ struct rte_vdpa_dev_info { rte_vhost_get_negotiated_features(vid, &hw->req_features); for (i = 0; i < nr_vring; i++) { + if (!hw->vring[i].enable) + continue; rte_vhost_get_vhost_vring(vid, i, &vq); gpa = hva_to_gpa(vid, (uint64_t)(uintptr_t)vq.desc); if (gpa == 0) { @@ -499,6 +501,8 @@ struct rte_vdpa_dev_info { vring.kickfd = -1; for (qid = 0; qid < q_num; qid++) { + if (!hw->vring[qid].enable) + continue; ev.events = EPOLLIN | EPOLLPRI; rte_vhost_get_vhost_vring(internal->vid, qid, &vring); ev.data.u64 = qid | (uint64_t)vring.kickfd << 32; @@ -1058,6 +1062,8 @@ struct rte_vdpa_dev_info { struct rte_vdpa_device *vdev; struct internal_list *list; struct ifcvf_internal *internal; + struct ifcvf_hw *hw; + uint16_t i; vdev = rte_vhost_get_vdpa_device(vid); list = find_internal_resource_by_vdev(vdev); @@ -1071,11 +1077,17 @@ struct rte_vdpa_dev_info { rte_atomic32_set(&internal->dev_attached, 1); update_datapath(internal); - if (rte_vhost_host_notifier_ctrl(vid, RTE_VHOST_QUEUE_ALL, true) != 0) - DRV_LOG(NOTICE, "vDPA (%s): software relay is used.", + hw = &internal->hw; + for (i = 0; i < hw->nr_vring; i++) { + if (!hw->vring[i].enable) + continue; + if (rte_vhost_host_notifier_ctrl(vid, i, true) != 0) + DRV_LOG(NOTICE, "vDPA (%s): software relay is used.", vdev->device->name); + } internal->configured = 1; + DRV_LOG(INFO, "vDPA device %s is configured", vdev->device->name); return 0; } From patchwork Wed Oct 19 08:41:18 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Pei, Andy" X-Patchwork-Id: 118516 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0C0E4A0581; Wed, 19 Oct 2022 11:32:07 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 40CE24282E; Wed, 19 Oct 2022 11:31:54 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mails.dpdk.org (Postfix) with ESMTP id DDAC042829 for ; Wed, 19 Oct 2022 11:31:52 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1666171913; x=1697707913; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=VMY/XQgY3LiXk3abQWsaQCKGKFqsmcMrD2+Gz98WQA0=; b=UixBH3UJ2qalFBBA8RWfAMrYbQzk7PVJk3mHUlF42JWUs26/bfljVygt aVXMGTP9u8woWVtFJchWKRAU1HUpLXzf1z2oAK2Fk3F+yBa+G50ShmERT +nqV4zqHntxn8H+EaGRrD5/8MiAPeV44mqHdDadx799E248yl/tOMIDlI vohFa8oFT8yLGJYVINErsWY9tEvW6KGdsI+5Lg1r2EA2IDp9NzN6ur40b tGzLr8OyDizlOcnSvi3RuhLx5qllTNoSDLs5NID3Nj2o37CGkaZnxpQCi 5pJZ8LRHj/2N0Qeb2lFCO6Y206NyoGZt/DW6WLaAqMKKgpxm8HO3IE3+L Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="303976932" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="303976932" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Oct 2022 02:31:51 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="771690956" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="771690956" Received: from dpdk-dipei.sh.intel.com ([10.67.110.251]) by fmsmga001.fm.intel.com with ESMTP; 19 Oct 2022 02:31:49 -0700 From: Andy Pei To: dev@dpdk.org Cc: chenbo.xia@intel.com, rosen.xu@intel.com, wei.huang@intel.com, gang.cao@intel.com, maxime.coquelin@redhat.com Subject: [PATCH v9 06/12] vdpa/ifc: support dynamic enable/disable queue Date: Wed, 19 Oct 2022 16:41:18 +0800 Message-Id: <1666168884-104665-7-git-send-email-andy.pei@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666168884-104665-1-git-send-email-andy.pei@intel.com> References: <1661229305-240952-2-git-send-email-andy.pei@intel.com> <1666168884-104665-1-git-send-email-andy.pei@intel.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Huang Wei Support dynamic enable or disable queue. For front end, like QEMU, user can use ethtool to configure queue. For example, "ethtool -L eth0 combined 3" to enable 3 queues pairs. Signed-off-by: Huang Wei Signed-off-by: Andy Pei Reviewed-by: Chenbo Xia --- drivers/vdpa/ifc/base/ifcvf.c | 100 ++++++++++++++++++++++++++++++++++++++++++ drivers/vdpa/ifc/base/ifcvf.h | 6 +++ drivers/vdpa/ifc/ifcvf_vdpa.c | 93 ++++++++++++++++++++++++++++++++------- 3 files changed, 184 insertions(+), 15 deletions(-) diff --git a/drivers/vdpa/ifc/base/ifcvf.c b/drivers/vdpa/ifc/base/ifcvf.c index 30bb8cb..869ddd6 100644 --- a/drivers/vdpa/ifc/base/ifcvf.c +++ b/drivers/vdpa/ifc/base/ifcvf.c @@ -233,6 +233,106 @@ } } +int +ifcvf_enable_vring_hw(struct ifcvf_hw *hw, int i) +{ + struct ifcvf_pci_common_cfg *cfg; + u8 *lm_cfg; + u16 notify_off; + int msix_vector; + + if (i >= (int)hw->nr_vring) + return -1; + + cfg = hw->common_cfg; + if (!cfg) { + RTE_LOG(ERR, PMD, "common_cfg in HW is NULL.\n"); + return -1; + } + + ifcvf_enable_mq(hw); + + IFCVF_WRITE_REG16(i, &cfg->queue_select); + msix_vector = IFCVF_READ_REG16(&cfg->queue_msix_vector); + if (msix_vector != (i + 1)) { + IFCVF_WRITE_REG16(i + 1, &cfg->queue_msix_vector); + msix_vector = IFCVF_READ_REG16(&cfg->queue_msix_vector); + if (msix_vector == IFCVF_MSI_NO_VECTOR) { + RTE_LOG(ERR, PMD, "queue %d, msix vec alloc failed\n", + i); + return -1; + } + } + + io_write64_twopart(hw->vring[i].desc, &cfg->queue_desc_lo, + &cfg->queue_desc_hi); + io_write64_twopart(hw->vring[i].avail, &cfg->queue_avail_lo, + &cfg->queue_avail_hi); + io_write64_twopart(hw->vring[i].used, &cfg->queue_used_lo, + &cfg->queue_used_hi); + IFCVF_WRITE_REG16(hw->vring[i].size, &cfg->queue_size); + + lm_cfg = hw->lm_cfg; + if (lm_cfg) { + if (hw->device_type == IFCVF_BLK) + *(u32 *)(lm_cfg + IFCVF_LM_RING_STATE_OFFSET + + i * IFCVF_LM_CFG_SIZE) = + (u32)hw->vring[i].last_avail_idx | + ((u32)hw->vring[i].last_used_idx << 16); + else + *(u32 *)(lm_cfg + IFCVF_LM_RING_STATE_OFFSET + + (i / 2) * IFCVF_LM_CFG_SIZE + + (i % 2) * 4) = + (u32)hw->vring[i].last_avail_idx | + ((u32)hw->vring[i].last_used_idx << 16); + } + + notify_off = IFCVF_READ_REG16(&cfg->queue_notify_off); + hw->notify_addr[i] = (void *)((u8 *)hw->notify_base + + notify_off * hw->notify_off_multiplier); + IFCVF_WRITE_REG16(1, &cfg->queue_enable); + + return 0; +} + +void +ifcvf_disable_vring_hw(struct ifcvf_hw *hw, int i) +{ + struct ifcvf_pci_common_cfg *cfg; + u32 ring_state; + u8 *lm_cfg; + + if (i >= (int)hw->nr_vring) + return; + + cfg = hw->common_cfg; + if (!cfg) { + RTE_LOG(ERR, PMD, "common_cfg in HW is NULL.\n"); + return; + } + + IFCVF_WRITE_REG16(i, &cfg->queue_select); + IFCVF_WRITE_REG16(0, &cfg->queue_enable); + + lm_cfg = hw->lm_cfg; + if (lm_cfg) { + if (hw->device_type == IFCVF_BLK) { + ring_state = *(u32 *)(lm_cfg + + IFCVF_LM_RING_STATE_OFFSET + + i * IFCVF_LM_CFG_SIZE); + hw->vring[i].last_avail_idx = + (u16)(ring_state & IFCVF_16_BIT_MASK); + } else { + ring_state = *(u32 *)(lm_cfg + + IFCVF_LM_RING_STATE_OFFSET + + (i / 2) * IFCVF_LM_CFG_SIZE + + (i % 2) * 4); + hw->vring[i].last_avail_idx = (u16)(ring_state >> 16); + } + hw->vring[i].last_used_idx = (u16)(ring_state >> 16); + } +} + STATIC int ifcvf_hw_enable(struct ifcvf_hw *hw) { diff --git a/drivers/vdpa/ifc/base/ifcvf.h b/drivers/vdpa/ifc/base/ifcvf.h index 1e133c0..3726da7 100644 --- a/drivers/vdpa/ifc/base/ifcvf.h +++ b/drivers/vdpa/ifc/base/ifcvf.h @@ -164,6 +164,12 @@ struct ifcvf_hw { ifcvf_get_features(struct ifcvf_hw *hw); int +ifcvf_enable_vring_hw(struct ifcvf_hw *hw, int i); + +void +ifcvf_disable_vring_hw(struct ifcvf_hw *hw, int i); + +int ifcvf_start_hw(struct ifcvf_hw *hw); void diff --git a/drivers/vdpa/ifc/ifcvf_vdpa.c b/drivers/vdpa/ifc/ifcvf_vdpa.c index 0c3407a..9c49f9c 100644 --- a/drivers/vdpa/ifc/ifcvf_vdpa.c +++ b/drivers/vdpa/ifc/ifcvf_vdpa.c @@ -1282,13 +1282,59 @@ struct rte_vdpa_dev_info { } static int +ifcvf_config_vring(struct ifcvf_internal *internal, int vring) +{ + struct ifcvf_hw *hw = &internal->hw; + int vid = internal->vid; + struct rte_vhost_vring vq; + uint64_t gpa; + + if (hw->vring[vring].enable) { + rte_vhost_get_vhost_vring(vid, vring, &vq); + gpa = hva_to_gpa(vid, (uint64_t)(uintptr_t)vq.desc); + if (gpa == 0) { + DRV_LOG(ERR, "Fail to get GPA for descriptor ring."); + return -1; + } + hw->vring[vring].desc = gpa; + + gpa = hva_to_gpa(vid, (uint64_t)(uintptr_t)vq.avail); + if (gpa == 0) { + DRV_LOG(ERR, "Fail to get GPA for available ring."); + return -1; + } + hw->vring[vring].avail = gpa; + + gpa = hva_to_gpa(vid, (uint64_t)(uintptr_t)vq.used); + if (gpa == 0) { + DRV_LOG(ERR, "Fail to get GPA for used ring."); + return -1; + } + hw->vring[vring].used = gpa; + + hw->vring[vring].size = vq.size; + rte_vhost_get_vring_base(vid, vring, + &hw->vring[vring].last_avail_idx, + &hw->vring[vring].last_used_idx); + ifcvf_enable_vring_hw(&internal->hw, vring); + } else { + ifcvf_disable_vring_hw(&internal->hw, vring); + rte_vhost_set_vring_base(vid, vring, + hw->vring[vring].last_avail_idx, + hw->vring[vring].last_used_idx); + } + + return 0; +} + +static int ifcvf_set_vring_state(int vid, int vring, int state) { struct rte_vdpa_device *vdev; struct internal_list *list; struct ifcvf_internal *internal; struct ifcvf_hw *hw; - struct ifcvf_pci_common_cfg *cfg; + bool enable = !!state; int ret = 0; vdev = rte_vhost_get_vdpa_device(vid); @@ -1298,6 +1344,9 @@ struct rte_vdpa_dev_info { return -1; } + DRV_LOG(INFO, "%s queue %d of vDPA device %s", + enable ? "enable" : "disable", vring, vdev->device->name); + internal = list->internal; if (vring < 0 || vring >= internal->max_queues * 2) { DRV_LOG(ERR, "Vring index %d not correct", vring); @@ -1305,27 +1354,41 @@ struct rte_vdpa_dev_info { } hw = &internal->hw; + hw->vring[vring].enable = enable; + if (!internal->configured) - goto exit; + return 0; - cfg = hw->common_cfg; - IFCVF_WRITE_REG16(vring, &cfg->queue_select); - IFCVF_WRITE_REG16(!!state, &cfg->queue_enable); + unset_notify_relay(internal); - if (!state && hw->vring[vring].enable) { - ret = vdpa_disable_vfio_intr(internal); - if (ret) - return ret; + ret = vdpa_enable_vfio_intr(internal, false); + if (ret) { + DRV_LOG(ERR, "failed to set vfio interrupt of vDPA device %s", + vdev->device->name); + return ret; } - if (state && !hw->vring[vring].enable) { - ret = vdpa_enable_vfio_intr(internal, false); - if (ret) - return ret; + ret = ifcvf_config_vring(internal, vring); + if (ret) { + DRV_LOG(ERR, "failed to configure queue %d of vDPA device %s", + vring, vdev->device->name); + return ret; + } + + ret = setup_notify_relay(internal); + if (ret) { + DRV_LOG(ERR, "failed to setup notify relay of vDPA device %s", + vdev->device->name); + return ret; + } + + ret = rte_vhost_host_notifier_ctrl(vid, vring, enable); + if (ret) { + DRV_LOG(ERR, "vDPA device %s queue %d host notifier ctrl fail", + vdev->device->name, vring); + return ret; } -exit: - hw->vring[vring].enable = !!state; return 0; } From patchwork Wed Oct 19 08:41:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Pei, Andy" X-Patchwork-Id: 118519 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id BF78EA0581; Wed, 19 Oct 2022 11:32:24 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8E00142B79; Wed, 19 Oct 2022 11:31:58 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mails.dpdk.org (Postfix) with ESMTP id 09C6A4282D for ; Wed, 19 Oct 2022 11:31:53 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1666171914; x=1697707914; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=uZMhuGnfZzg9jaw1Tx9ks9C0IR615IbFV9PRG3jn7GA=; b=mSiwsj19EHGpru773xtpNMotnS90GQmeueoIwN+zKCgKbiPXtx9VMuJn fmFTtRYUFRvvBQHFdOzfn8t6Rp3N1A6Pgagc/vMwTe71uxJ/hRgjN+lM7 dXmlbiEX4uJ0P7zXpK5rvcQTP+fe3NQLNGab8Qknqzxn1mY+y0Y5fXjXr mTfGCKFdxfw2j4pUIuyqcTyyPzX/9egQCLrsV8jH6cq2jdM09SUc4ey3a nICJuPDulWdfeOPaXsWrreK1cWPDNulsrB/YBX/C00FPBxWqldfQV4/K3 VuXK37KerNBqA+8DQoZr3Hqus8sIkaME0g9c+qVK1tyKtVrA/I/PD3K+4 w==; X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="303976937" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="303976937" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Oct 2022 02:31:52 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="771690981" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="771690981" Received: from dpdk-dipei.sh.intel.com ([10.67.110.251]) by fmsmga001.fm.intel.com with ESMTP; 19 Oct 2022 02:31:51 -0700 From: Andy Pei To: dev@dpdk.org Cc: chenbo.xia@intel.com, rosen.xu@intel.com, wei.huang@intel.com, gang.cao@intel.com, maxime.coquelin@redhat.com Subject: [PATCH v9 07/12] vdpa/ifc: change internal function name Date: Wed, 19 Oct 2022 16:41:19 +0800 Message-Id: <1666168884-104665-8-git-send-email-andy.pei@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666168884-104665-1-git-send-email-andy.pei@intel.com> References: <1661229305-240952-2-git-send-email-andy.pei@intel.com> <1666168884-104665-1-git-send-email-andy.pei@intel.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Change internal function name "find_internal_resource_by_dev" to "find_internal_resource_by_pci_dev". Signed-off-by: Andy Pei Reviewed-by: Chenbo Xia Reviewed-by: Maxime Coquelin --- drivers/vdpa/ifc/ifcvf_vdpa.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/vdpa/ifc/ifcvf_vdpa.c b/drivers/vdpa/ifc/ifcvf_vdpa.c index 9c49f9c..73d04ed 100644 --- a/drivers/vdpa/ifc/ifcvf_vdpa.c +++ b/drivers/vdpa/ifc/ifcvf_vdpa.c @@ -121,7 +121,7 @@ struct rte_vdpa_dev_info { } static struct internal_list * -find_internal_resource_by_dev(struct rte_pci_device *pdev) +find_internal_resource_by_pci_dev(struct rte_pci_device *pdev) { int found = 0; struct internal_list *list; @@ -1746,7 +1746,7 @@ struct rte_vdpa_dev_info dev_info[] = { if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - list = find_internal_resource_by_dev(pci_dev); + list = find_internal_resource_by_pci_dev(pci_dev); if (list == NULL) { DRV_LOG(ERR, "Invalid device: %s", pci_dev->name); return -1; From patchwork Wed Oct 19 08:41:20 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Pei, Andy" X-Patchwork-Id: 118520 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 14F3CA0581; Wed, 19 Oct 2022 11:32:30 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AB8E942B7C; Wed, 19 Oct 2022 11:31:59 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mails.dpdk.org (Postfix) with ESMTP id 8D89B4282D for ; Wed, 19 Oct 2022 11:31:54 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1666171914; x=1697707914; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=UPwsj6XVyV8S9mjcYz86UY2tM6PwO4T0fJqp3GKrV40=; b=GHR8p/cOsWbcsKsgVdpxRUT4W/YMZpGA9OvKg6UTQqV4+1qP+3iUVXqt Q54Fah734K9QNcr26Fdzhh95VPpqjdCxkSDPbR/ha3Y5M8QCv/NWUJ3Oj wLuO6wX0QlPDHE5bDgVkAtilnbTp9ZattkDggFCfNSo9OUxMCNGADih6r L/u1UzeTO8BSSUxABXoceD1IvNFbMAOFeQaNZxwFPhLeVYO42CFoEr9Y3 Krehxt5AQtz6TjVm2J7/qXpdQ45MsGu4vgmWVpFiOCIjebXCBeWCrcfsK 3MzgctPgWgE9wAktzfBGK0lWFVaTEikY/DR97OrDOb1SBhW/xOoK4LZgW A==; X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="303976941" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="303976941" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Oct 2022 02:31:54 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="771691007" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="771691007" Received: from dpdk-dipei.sh.intel.com ([10.67.110.251]) by fmsmga001.fm.intel.com with ESMTP; 19 Oct 2022 02:31:52 -0700 From: Andy Pei To: dev@dpdk.org Cc: chenbo.xia@intel.com, rosen.xu@intel.com, wei.huang@intel.com, gang.cao@intel.com, maxime.coquelin@redhat.com Subject: [PATCH v9 08/12] vdpa/ifc: add internal API to get device Date: Wed, 19 Oct 2022 16:41:20 +0800 Message-Id: <1666168884-104665-9-git-send-email-andy.pei@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666168884-104665-1-git-send-email-andy.pei@intel.com> References: <1661229305-240952-2-git-send-email-andy.pei@intel.com> <1666168884-104665-1-git-send-email-andy.pei@intel.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Add new internal API "find_internal_resource_by_rte_dev" to get device. Signed-off-by: Andy Pei Reviewed-by: Chenbo Xia Reviewed-by: Maxime Coquelin --- drivers/vdpa/ifc/ifcvf_vdpa.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/drivers/vdpa/ifc/ifcvf_vdpa.c b/drivers/vdpa/ifc/ifcvf_vdpa.c index 73d04ed..c16e263 100644 --- a/drivers/vdpa/ifc/ifcvf_vdpa.c +++ b/drivers/vdpa/ifc/ifcvf_vdpa.c @@ -144,6 +144,29 @@ struct rte_vdpa_dev_info { return list; } +static struct internal_list * +find_internal_resource_by_rte_dev(struct rte_device *rte_dev) +{ + int found = 0; + struct internal_list *list; + + pthread_mutex_lock(&internal_list_lock); + + TAILQ_FOREACH(list, &internal_list, next) { + if (rte_dev == &list->internal->pdev->device) { + found = 1; + break; + } + } + + pthread_mutex_unlock(&internal_list_lock); + + if (!found) + return NULL; + + return list; +} + static int ifcvf_vfio_setup(struct ifcvf_internal *internal) { @@ -1398,10 +1421,11 @@ struct rte_vdpa_dev_info { { struct ifcvf_internal *internal; struct internal_list *list; + struct rte_device *rte_dev = vdev->device; - list = find_internal_resource_by_vdev(vdev); + list = find_internal_resource_by_rte_dev(rte_dev); if (list == NULL) { - DRV_LOG(ERR, "Invalid vDPA device: %p", vdev); + DRV_LOG(ERR, "Invalid rte device: %p", rte_dev); return -1; } From patchwork Wed Oct 19 08:41:21 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Pei, Andy" X-Patchwork-Id: 118521 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C4626A0581; Wed, 19 Oct 2022 11:32:35 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8532B42B71; Wed, 19 Oct 2022 11:32:02 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mails.dpdk.org (Postfix) with ESMTP id 9240542B75 for ; Wed, 19 Oct 2022 11:31:56 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1666171916; x=1697707916; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=b8O7nBcKdZhrgedYArHj3sKz8TcuYuva7J4a2yZcOfY=; b=X2m0e/Zt4xaUx01mgbPwgSCT0gm7UwBJpBHXJe5jwMdarPtJ6oY22l5T z9iVh1lt3+5El/UywcA5GiXcGoqZF11Zmz4Gv8s2kOVAXjuooYzGKQ5at JNPNGyHt25kPhVgD3aKYy9F2DEL9RCeHXHWddHGIRiKr1pL8NUYbPG2JE jzx8q9f0IhQR3BvwpAy+m3WQvBire7g8GnDcZMQwbt6IwRfoBbBU2AP+U PRJHMTkuuzLkHe5fS2TC0we3JOqyTslvKzC+QtOSSy7bu8riCzpZmGipi lZLIKZk4bIKhZgtSTY1yxbcCTMG7EwcoipKwk9aQIZVUPgrbrAA63S95I A==; X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="303976947" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="303976947" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Oct 2022 02:31:55 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="771691028" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="771691028" Received: from dpdk-dipei.sh.intel.com ([10.67.110.251]) by fmsmga001.fm.intel.com with ESMTP; 19 Oct 2022 02:31:54 -0700 From: Andy Pei To: dev@dpdk.org Cc: chenbo.xia@intel.com, rosen.xu@intel.com, wei.huang@intel.com, gang.cao@intel.com, maxime.coquelin@redhat.com Subject: [PATCH v9 09/12] vdpa/ifc: improve internal list logic Date: Wed, 19 Oct 2022 16:41:21 +0800 Message-Id: <1666168884-104665-10-git-send-email-andy.pei@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666168884-104665-1-git-send-email-andy.pei@intel.com> References: <1661229305-240952-2-git-send-email-andy.pei@intel.com> <1666168884-104665-1-git-send-email-andy.pei@intel.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Insert internal list element to internal list before register vdpa device, in order to call vdpa ops during vdpa device registration. Signed-off-by: Andy Pei Reviewed-by: Maxime Coquelin Reviewed-by: Chenbo Xia --- drivers/vdpa/ifc/ifcvf_vdpa.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/vdpa/ifc/ifcvf_vdpa.c b/drivers/vdpa/ifc/ifcvf_vdpa.c index c16e263..8dfd493 100644 --- a/drivers/vdpa/ifc/ifcvf_vdpa.c +++ b/drivers/vdpa/ifc/ifcvf_vdpa.c @@ -1737,17 +1737,20 @@ struct rte_vdpa_dev_info dev_info[] = { } internal->sw_lm = sw_fallback_lm; + pthread_mutex_lock(&internal_list_lock); + TAILQ_INSERT_TAIL(&internal_list, list, next); + pthread_mutex_unlock(&internal_list_lock); + internal->vdev = rte_vdpa_register_device(&pci_dev->device, dev_info[internal->hw.device_type].ops); if (internal->vdev == NULL) { DRV_LOG(ERR, "failed to register device %s", pci_dev->name); + pthread_mutex_lock(&internal_list_lock); + TAILQ_REMOVE(&internal_list, list, next); + pthread_mutex_unlock(&internal_list_lock); goto error; } - pthread_mutex_lock(&internal_list_lock); - TAILQ_INSERT_TAIL(&internal_list, list, next); - pthread_mutex_unlock(&internal_list_lock); - rte_atomic32_set(&internal->started, 1); update_datapath(internal); From patchwork Wed Oct 19 08:41:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Pei, Andy" X-Patchwork-Id: 118522 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id CD421A0581; Wed, 19 Oct 2022 11:32:40 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 62A1142B83; Wed, 19 Oct 2022 11:32:03 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mails.dpdk.org (Postfix) with ESMTP id AA3DD42B76 for ; Wed, 19 Oct 2022 11:31:57 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1666171917; x=1697707917; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=fcSXDElms2+7KDr9YjcXui/7J9c9ra3ZARXK96LWNKw=; b=j8S4vUvioBKS3hesB84HxLUxqn84rkqFkHB/GTV8+MxN5dfX5HAadjzS 9o34lYNfKncpdYyFcweqkgRIMaMa7mBHKARg6k5STQgUhq7/nxmN1Sej8 /bCsydhKJQmRjRstDeUGnlD/apy6QjuQ7WUEmm1bCFD2hgjY7VKicZ+H+ Xtu9Dgk8E6r8gA/ZRHj10xuku2ZrsKG0xkdOY/Yjkgmp9NLffJ16Hi3DD WmXrn6TUzC+uPZkhCODk4mcqP+rOsx1JJg5IZYW6QEe6NVXV0TF6Bp++m KRK/jCqRShEUEwsMpNupM5ydzQkgLKwNlgnJdaVykoQ4/wcpz+xZM/P61 w==; X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="303976952" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="303976952" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Oct 2022 02:31:57 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="771691042" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="771691042" Received: from dpdk-dipei.sh.intel.com ([10.67.110.251]) by fmsmga001.fm.intel.com with ESMTP; 19 Oct 2022 02:31:55 -0700 From: Andy Pei To: dev@dpdk.org Cc: chenbo.xia@intel.com, rosen.xu@intel.com, wei.huang@intel.com, gang.cao@intel.com, maxime.coquelin@redhat.com Subject: [PATCH v9 10/12] vhost: add type to rte vdpa device Date: Wed, 19 Oct 2022 16:41:22 +0800 Message-Id: <1666168884-104665-11-git-send-email-andy.pei@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666168884-104665-1-git-send-email-andy.pei@intel.com> References: <1661229305-240952-2-git-send-email-andy.pei@intel.com> <1666168884-104665-1-git-send-email-andy.pei@intel.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Add type to rte_vdpa_device to store device type. Call vdpa ops get_dev_type to fill type when register vdpa device. Signed-off-by: Andy Pei Reviewed-by: Chenbo Xia Reviewed-by: Maxime Coquelin --- lib/vhost/socket.c | 15 +-------------- lib/vhost/vdpa.c | 15 +++++++++++++++ lib/vhost/vdpa_driver.h | 2 ++ 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/lib/vhost/socket.c b/lib/vhost/socket.c index 608ae57..863a6f6 100644 --- a/lib/vhost/socket.c +++ b/lib/vhost/socket.c @@ -627,7 +627,6 @@ struct rte_vdpa_device * { struct vhost_user_socket *vsocket; struct rte_vdpa_device *vdpa_dev; - uint32_t vdpa_type = 0; int ret = 0; pthread_mutex_lock(&vhost_user.mutex); @@ -644,19 +643,7 @@ struct rte_vdpa_device * goto unlock_exit; } - if (vdpa_dev->ops->get_dev_type) { - ret = vdpa_dev->ops->get_dev_type(vdpa_dev, &vdpa_type); - if (ret) { - VHOST_LOG_CONFIG(path, ERR, - "failed to get vdpa dev type for socket file.\n"); - ret = -1; - goto unlock_exit; - } - } else { - vdpa_type = RTE_VHOST_VDPA_DEVICE_TYPE_NET; - } - - *type = vdpa_type; + *type = vdpa_dev->type; unlock_exit: pthread_mutex_unlock(&vhost_user.mutex); diff --git a/lib/vhost/vdpa.c b/lib/vhost/vdpa.c index bb82857..577cb00 100644 --- a/lib/vhost/vdpa.c +++ b/lib/vhost/vdpa.c @@ -73,6 +73,7 @@ struct rte_vdpa_device * struct rte_vdpa_dev_ops *ops) { struct rte_vdpa_device *dev; + int ret = 0; if (ops == NULL) return NULL; @@ -101,6 +102,20 @@ struct rte_vdpa_device * dev->device = rte_dev; dev->ops = ops; + + if (ops->get_dev_type) { + ret = ops->get_dev_type(dev, &dev->type); + if (ret) { + VHOST_LOG_CONFIG(rte_dev->name, ERR, + "Failed to get vdpa dev type.\n"); + ret = -1; + goto out_unlock; + } + } else { + /** by default, we assume vdpa device is a net device */ + dev->type = RTE_VHOST_VDPA_DEVICE_TYPE_NET; + } + TAILQ_INSERT_TAIL(&vdpa_device_list, dev, next); out_unlock: rte_spinlock_unlock(&vdpa_device_list_lock); diff --git a/lib/vhost/vdpa_driver.h b/lib/vhost/vdpa_driver.h index 8b88a53..8db4ab9 100644 --- a/lib/vhost/vdpa_driver.h +++ b/lib/vhost/vdpa_driver.h @@ -92,6 +92,8 @@ struct rte_vdpa_device { struct rte_device *device; /** vdpa device operations */ struct rte_vdpa_dev_ops *ops; + /** vdpa device type: net, blk... */ + uint32_t type; }; /** From patchwork Wed Oct 19 08:41:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Pei, Andy" X-Patchwork-Id: 118523 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id AC846A0581; Wed, 19 Oct 2022 11:32:46 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8A21742B89; Wed, 19 Oct 2022 11:32:04 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mails.dpdk.org (Postfix) with ESMTP id 3FF6642B72 for ; Wed, 19 Oct 2022 11:31:59 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1666171919; x=1697707919; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=Mhrk1kAopy8EdJE3g1dK+0c0IdwoRk4koS0FSEXR2Kw=; b=TaKK1zvdDfa9MtGseUv2SiHurUo6gLXPLMsOnEM+fplt6C8uPYFnVRuI P6Pbnrdgjh2EH0n3Mz35Mv5kpvIRbKM2C5Heb2rm2bBk6GJjgRo8Kr0aM FSRJ/oBzQ4SCel0YhslaAZUMNf04uiqipaer62zmwAexmFoqaafCjW8nl 2g/fhyrIQ9DTXmdyGyfiVbU1uN5fFV6xk8Awkiuu1i/4eVKi4Fcb5NXDc YIS0exngAr3NB8tLdAe1LxO85Q9mIOgTU1PCuLXOdkJz/EcCACvbWxXT/ /bpIw4Pz1yBeiLMOF+nV0mSNp9kVUvNTSPAo+6fFoPdGDu7k3jpL8WDv8 w==; X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="303976954" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="303976954" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Oct 2022 02:31:58 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="771691051" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="771691051" Received: from dpdk-dipei.sh.intel.com ([10.67.110.251]) by fmsmga001.fm.intel.com with ESMTP; 19 Oct 2022 02:31:57 -0700 From: Andy Pei To: dev@dpdk.org Cc: chenbo.xia@intel.com, rosen.xu@intel.com, wei.huang@intel.com, gang.cao@intel.com, maxime.coquelin@redhat.com Subject: [PATCH v9 11/12] vhost: vDPA blk device gets ready when the first queue is ready Date: Wed, 19 Oct 2022 16:41:23 +0800 Message-Id: <1666168884-104665-12-git-send-email-andy.pei@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666168884-104665-1-git-send-email-andy.pei@intel.com> References: <1661229305-240952-2-git-send-email-andy.pei@intel.com> <1666168884-104665-1-git-send-email-andy.pei@intel.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org When boot from virtio blk device, seabios in QEMU only enables one queue. To work in this scenario, vDPA BLK device back-end configure device when the first queue is ready. Signed-off-by: Andy Pei Signed-off-by: Huang Wei Reviewed-by: Chenbo Xia Reviewed-by: Maxime Coquelin --- lib/vhost/vhost_user.c | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c index cd65257..e0ff79d 100644 --- a/lib/vhost/vhost_user.c +++ b/lib/vhost/vhost_user.c @@ -1441,11 +1441,14 @@ } #define VIRTIO_BUILTIN_NUM_VQS_TO_BE_READY 2u +#define VIRTIO_BLK_NUM_VQS_TO_BE_READY 1u static int virtio_is_ready(struct virtio_net *dev) { + struct rte_vdpa_device *vdpa_dev; struct vhost_virtqueue *vq; + uint32_t vdpa_type; uint32_t i, nr_vring = dev->nr_vring; if (dev->flags & VIRTIO_DEV_READY) @@ -1454,13 +1457,22 @@ if (!dev->nr_vring) return 0; - if (dev->flags & VIRTIO_DEV_BUILTIN_VIRTIO_NET) { - nr_vring = VIRTIO_BUILTIN_NUM_VQS_TO_BE_READY; + vdpa_dev = dev->vdpa_dev; + if (vdpa_dev) + vdpa_type = vdpa_dev->type; + else + vdpa_type = -1; - if (dev->nr_vring < nr_vring) - return 0; + if (vdpa_type == RTE_VHOST_VDPA_DEVICE_TYPE_BLK) { + nr_vring = VIRTIO_BLK_NUM_VQS_TO_BE_READY; + } else { + if (dev->flags & VIRTIO_DEV_BUILTIN_VIRTIO_NET) + nr_vring = VIRTIO_BUILTIN_NUM_VQS_TO_BE_READY; } + if (dev->nr_vring < nr_vring) + return 0; + for (i = 0; i < nr_vring; i++) { vq = dev->virtqueue[i]; @@ -2958,7 +2970,6 @@ static int is_vring_iotlb(struct virtio_net *dev, int ret; int unlock_required = 0; bool handled; - uint32_t vdpa_type = 0; uint32_t request; uint32_t i; @@ -3170,17 +3181,7 @@ static int is_vring_iotlb(struct virtio_net *dev, if (!vdpa_dev) goto out; - if (vdpa_dev->ops->get_dev_type) { - ret = vdpa_dev->ops->get_dev_type(vdpa_dev, &vdpa_type); - if (ret) { - VHOST_LOG_CONFIG(dev->ifname, ERR, "failed to get vdpa dev type.\n"); - ret = -1; - goto out; - } - } else { - vdpa_type = RTE_VHOST_VDPA_DEVICE_TYPE_NET; - } - if (vdpa_type == RTE_VHOST_VDPA_DEVICE_TYPE_BLK + if (vdpa_dev->type == RTE_VHOST_VDPA_DEVICE_TYPE_BLK && request != VHOST_USER_SET_VRING_CALL) goto out; From patchwork Wed Oct 19 08:41:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Pei, Andy" X-Patchwork-Id: 118524 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C6EFEA0581; Wed, 19 Oct 2022 11:32:52 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A7FFC42B8D; Wed, 19 Oct 2022 11:32:05 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mails.dpdk.org (Postfix) with ESMTP id C78A942829 for ; Wed, 19 Oct 2022 11:32:00 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1666171921; x=1697707921; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=ZMIlW8JXsohCcENN7Y1SM460927jttCpnKUWXdptV7U=; b=PZDxTX3IcBfZCRza9u2mDhtXBQ/NHVZkO1y3THARzMwDgl7nBJkhzwsq 5/ky7s0TvAWWE7UeMZN+I2rU2w87J6nRwN5Jem3s5BWLx1hjYMFt2MPFi kFaClh8uWcqKgPcw7i8pynodTsuPcP7iwY+hCmbeL1nwYFKjrb5f76vik q2VFoYT3O4Ib7GC1BodEtNLu8aU7wcgOrJLoyPUJoeAZPhljVQCecajnU bdMt5Npg0LR6TAucC9Aj2JT5Eg78CGjerxQmBu8CnueBhtKq9fs0lB+M2 Kful4JOTHd5II9GSqrxgkLm1DYU5KAgzo0nJdoRcadj0M4/z4OoZjl/ot Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="303976956" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="303976956" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Oct 2022 02:32:00 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="771691060" X-IronPort-AV: E=Sophos;i="5.95,195,1661842800"; d="scan'208";a="771691060" Received: from dpdk-dipei.sh.intel.com ([10.67.110.251]) by fmsmga001.fm.intel.com with ESMTP; 19 Oct 2022 02:31:59 -0700 From: Andy Pei To: dev@dpdk.org Cc: chenbo.xia@intel.com, rosen.xu@intel.com, wei.huang@intel.com, gang.cao@intel.com, maxime.coquelin@redhat.com Subject: [PATCH v9 12/12] vhost: improve vDPA blk device configure condition Date: Wed, 19 Oct 2022 16:41:24 +0800 Message-Id: <1666168884-104665-13-git-send-email-andy.pei@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666168884-104665-1-git-send-email-andy.pei@intel.com> References: <1661229305-240952-2-git-send-email-andy.pei@intel.com> <1666168884-104665-1-git-send-email-andy.pei@intel.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org To support multi-queue, configure device after call fd of all queues are set. Signed-off-by: Andy Pei Signed-off-by: Huang Wei Reviewed-by: Chenbo Xia Reviewed-by: Maxime Coquelin --- lib/vhost/vhost_user.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c index e0ff79d..9902ae9 100644 --- a/lib/vhost/vhost_user.c +++ b/lib/vhost/vhost_user.c @@ -2972,6 +2972,7 @@ static int is_vring_iotlb(struct virtio_net *dev, bool handled; uint32_t request; uint32_t i; + uint16_t blk_call_fd; dev = get_device(vid); if (dev == NULL) @@ -3181,9 +3182,15 @@ static int is_vring_iotlb(struct virtio_net *dev, if (!vdpa_dev) goto out; - if (vdpa_dev->type == RTE_VHOST_VDPA_DEVICE_TYPE_BLK - && request != VHOST_USER_SET_VRING_CALL) - goto out; + if (vdpa_dev->type == RTE_VHOST_VDPA_DEVICE_TYPE_BLK) { + if (request == VHOST_USER_SET_VRING_CALL) { + blk_call_fd = ctx.msg.payload.u64 & VHOST_USER_VRING_IDX_MASK; + if (blk_call_fd != dev->nr_vring - 1) + goto out; + } else { + goto out; + } + } if (!(dev->flags & VIRTIO_DEV_VDPA_CONFIGURED)) { if (vdpa_dev->ops->dev_conf(dev->vid))