From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 34D8AA0032; Wed, 14 Sep 2022 04:23:24 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C3DB64021D; Wed, 14 Sep 2022 04:23:23 +0200 (CEST) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mails.dpdk.org (Postfix) with ESMTP id 7CE0340151 for ; Wed, 14 Sep 2022 04:23:21 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1663122201; x=1694658201; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=FEtTQNBh3g3DOzOVkI5Srlgo3wigobhpW+koN++zzIQ=; b=fy7QQaKxtsd/ZQgeStPQGHOm50um8pUx3H9ZTQ9HDy8EOYEJpZz64OJD JcV58AmB2Sjkz7XVs9N5gjknGuRYsUXyYvV8PmavQwj6WOz6UnN1wqpFU uezet4kNwOFNeRrEAlihfRmWFshCAdGmeYICOUzpKC4ibrgBj3uKAfmvH LHyA+8WtZchIOWHPX37mcurYARhdh+KuG939AZOasDnTTdJSA0VIWgB/L 7zVzzXb4BfvuurtEgenJw9aV5wXxGaCSmaZet/mD39q2m8QRvD7ogd3EH 3iBdHZDVRtGxt4DcHmN7J8HPvRTXU1qnxs110UNCxY5rhY0tqBtiRFCSA Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10469"; a="384606381" X-IronPort-AV: E=Sophos;i="5.93,313,1654585200"; d="scan'208";a="384606381" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Sep 2022 19:23:20 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,313,1654585200"; d="scan'208";a="678844056" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by fmsmga008.fm.intel.com with ESMTP; 13 Sep 2022 19:23:20 -0700 Received: from fmsmsx609.amr.corp.intel.com (10.18.126.89) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Tue, 13 Sep 2022 19:23:19 -0700 Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by fmsmsx609.amr.corp.intel.com (10.18.126.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Tue, 13 Sep 2022 19:23:19 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Tue, 13 Sep 2022 19:23:19 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.172) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Tue, 13 Sep 2022 19:23:19 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GbXmZEApvXJBeUA6iuJIj13gnivWzFytdlLjyt/C6Yy78X+6NQb/Nppi+nLx9Ez/xsvBlYvS1BWlzb6dr6LGED2uToKgXM0B9tAKLtu36JUo2unGI+E5uD0urfLwt6C8w4YOezFu/WsruOqSMciqgRG/Sv3f6j6c/EH1m6mgBcUd6AMsX36JLY8kBd71mrhU8TuM08A8rVJSUmbeB8GiibcGvDtfl+qu/UfTRnsD7S+47qPmezlAtVeiX0XhZWhHqHtvFKSR0KR/2saQc8RD6/okAp5wlLYEabnV4/o25r4mlfcECrCmiymj6sqosA3nImGJKo2hTte/6B1YC3LFwg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ICXuVOA4vmqhBXTkQkZtwSQYwc777hcIQtfrPiPF3As=; b=Wo5bkWBAL5W7tW8+SUEwYFo7wQysZG2Vx0Y8rPYSD0wwOIbNKeNAB9OgSZb6Mh/jr0ml6NaGygX1g24RJIq4KzHKFFOD/336AAOOB3lcWnItihDZV5WxvEs8JwqZMJQEycu/yj0I+ED/4yCLA7uM/TytEwRgc7VfqUpv75tlAqJRsYrd6/WZNJATK1iQGTTjK3YtSRSZUZw1Oa0fG7rZt1me3nG9XdBMrXwWi/uIuX2QzO0C2yQ6sWEYs/obfo+AzngA2itKiquu0JYQu4DFjxLzCxSrOHoR39aW2E0PIK39jCY8X6xAEkd1DtFvWMgCz5o2lSlltvojxtCvyWNWEg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from SN6PR11MB3504.namprd11.prod.outlook.com (2603:10b6:805:d0::17) by BL3PR11MB6506.namprd11.prod.outlook.com (2603:10b6:208:38d::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5612.22; Wed, 14 Sep 2022 02:23:11 +0000 Received: from SN6PR11MB3504.namprd11.prod.outlook.com ([fe80::408e:79cb:b715:b8ac]) by SN6PR11MB3504.namprd11.prod.outlook.com ([fe80::408e:79cb:b715:b8ac%4]) with mapi id 15.20.5612.022; Wed, 14 Sep 2022 02:23:11 +0000 From: "Xia, Chenbo" To: "Pei, Andy" , "dev@dpdk.org" CC: "Xu, Rosen" , "Huang, Wei" , "Cao, Gang" , "maxime.coquelin@redhat.com" , Huang Wei Subject: RE: [PATCH v2 6/8] vdpa/ifc: support dynamic enable/disable queue Thread-Topic: [PATCH v2 6/8] vdpa/ifc: support dynamic enable/disable queue Thread-Index: AQHYw0dbw4qU/UFbFkyG5BEmcal1vq3eNlZA Date: Wed, 14 Sep 2022 02:23:11 +0000 Message-ID: References: <1661229305-240952-2-git-send-email-andy.pei@intel.com> <1662616458-164613-1-git-send-email-andy.pei@intel.com> <1662616458-164613-7-git-send-email-andy.pei@intel.com> In-Reply-To: <1662616458-164613-7-git-send-email-andy.pei@intel.com> Accept-Language: en-US, zh-CN Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SN6PR11MB3504:EE_|BL3PR11MB6506:EE_ x-ms-office365-filtering-correlation-id: 8572c84a-714f-45fd-8263-08da95f81209 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: bwmqIihUGRMx4bdYsPLCozKq7hV/YFkh600hTvRADWqPcJi3XmasYLj+rPjyOgaKDXK0HJW1O+tpylxOI9QuBvxG8XW2WHO21o/m4t8VEDrWqTHBjO0viQKQpdG/Kf69/Mg0jT93OofZu5mApdh/8FMeQczlhM/aXceLbkWRtwSIffXbWJeX4rEzQChw3G30rLKpmW9IQgQP9jKVClnHjiWUFLk5UM4kqUqZw28dF9nGaBeXqYCF1NGPsn0gmopIyAp28fMeO8gCld+fLs9T0WekvwiIRL0wHEytwFSUuHl9NHK7EtbrjbgHSHYhyKJQqfXwn+9kXqjzbowVxhZmQYYR2QqMZ0VkWWJ+nS9R6f2LUZR0JnbtAhdW4Zqn1UOd8oiZ7aCzu9aWAWSXVHqGxhYDRPozZouMAqLn4OeKpS5K+wHmy29kuGRji0Hks5Ycn/W4tvMgNyZBZWBFh9cL6EFtdPQzZF0gQZjbef/6Dz91yJB/kNJ81NzcGKcwgM2S3t4Zp5l3QdmcZnCvevpR444prjnGhJBmVvZETj2pOfJ4//jfZsNTEUJ+1UZt9sVjzfJV9ots6YylDe8vammmd1phXwWrSNM+akG7PmQu84bsZjLG5emaigQnpePScOwy48Asz7Xri5AjqWdbYy7ktX4XmW9j+fIrMMSdy3+kU0PPXVQ8iGt3sd624X4sHuI+mEld9GXH6wEcVBl9iMsRbNRyUL0Oi4rBlJ/7fZLtJxIsfi79UjyBgm7RvCtUasTlpMV+qpmmV2oQstv8qOwK98Sp6qmqQw43F2QRI3XykS4= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN6PR11MB3504.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(39860400002)(346002)(136003)(396003)(366004)(376002)(451199015)(38070700005)(6506007)(9686003)(52536014)(107886003)(33656002)(2906002)(122000001)(66476007)(66556008)(54906003)(8676002)(53546011)(5660300002)(41300700001)(4326008)(8936002)(82960400001)(38100700002)(55016003)(26005)(7696005)(64756008)(86362001)(76116006)(478600001)(66446008)(66946007)(71200400001)(83380400001)(110136005)(316002)(186003)(309714004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?L4DARZOwBBH/RqzrfoG1DUX2mEjy90S9xuo25asxOUyH8zIcy71iM7Zs2VXY?= =?us-ascii?Q?hxf7Gk/v8zjwqHUgkBtB53SrE719b3/s+xcot38rWwn+VWIZPOhnRB2Z406N?= =?us-ascii?Q?79aNAyGgX/dcZqTrsoWFngCwcwX9Z3+9ip9MUIuN7RHiggKjLQJ7fOfh/BPP?= =?us-ascii?Q?azGM5nU3uWcofXS/GT+r3qRtTgzBm3pd7rL852/yNcDlTFWUY4YyHxhAnp2l?= =?us-ascii?Q?Z1eYxsDbDbXFYig8A5psYLB/ac9wX6uo2BuFTPz3CTEHy3UH50vFEOAiLMic?= =?us-ascii?Q?6t94bbAoOmj4sHL9UKS9h83dSSNMHR1EqnatNF1CmmQ7AiNxJCNLJ/T55z5l?= =?us-ascii?Q?6PNuNtXUOQKyxTfLheubSdIMX2IJ06V46/gnIoRr/zckOTRtBjyWnXifDCQZ?= =?us-ascii?Q?Ksp6b1Bk8Vv9yxEEOkARXsmldxNJ9uvom8ykicjuPrukaQs6pyF0O9Ls2FRN?= =?us-ascii?Q?7l6BA9AvMH4Wz6/ZeD9Uj4nI6ip6rGpet0o97gymdpxK3DYdS8X9ZeLP5xW9?= =?us-ascii?Q?CcwSagi5sU9VkA6jg2FWoQAptl6kAiQ/DYPAX06x1JDDagcevO2hqveXAB2M?= =?us-ascii?Q?cqi2udjgq+VsGM+AsZngNt3CvD+ToycSstKFYG0o8glLw1ulsxpjoAJJbxC6?= =?us-ascii?Q?u0d4AI8wjaWKm1TMfCRbzUhoPX3R4byGaXei++jKyzL0dR2kgPzH9o1uU7w2?= =?us-ascii?Q?EDhP2yegrggYZVQgCJQcell7V3uJ0B8cDw1TXBvQn890g5Bs1OXzok7o5mwC?= =?us-ascii?Q?JIbBijOxFgWZPVbEFUuoV3Jo99dlnWHgEg1qKL8uvXtbT0B3P7HbZLT9OQ1x?= =?us-ascii?Q?Q4dv9soBsKLkmT/jjnJI1tPc8laReim9u785GthrbsZRZgRiHRuvhiHsytGp?= =?us-ascii?Q?grErm84Q2tH/4upcJkspwiC6pOiloo71RuUQSaAa1bIPCoFXMVkJ/tOkypQj?= =?us-ascii?Q?+pvGJXiWrCVQCrY+mxE/g+cc6VR4HittOm+yf+Zwfu2fG3heSVLqblNdGFER?= =?us-ascii?Q?XUQskh3GMeIbcZbRoJ3OIAffk5bhSli8vuGtXp0K+Gf5SSy1XBsgmwN77Wez?= =?us-ascii?Q?/H+cBL1lH8Cek9MTT5KikPLFCcptQYjVYjRvdSyM0oV86LkogFfVMreG7biR?= =?us-ascii?Q?nwu/s6N67LTXZ2xqT0N12ezLCL7A9ErfSRStvqRK+dicuSWnKUFJzwXoJaMW?= =?us-ascii?Q?CAllnBSjO+z5STfoEtxUhlYBKKSYPIKfdVAEH1xSO7qPf24fi9TAFH8jecxy?= =?us-ascii?Q?NSIX7JdThmraPusXxCg34WSvQxmQ3FSpsqlBXK3k1V00mNrM6cJzIF6kSh2N?= =?us-ascii?Q?YSRrgEgdPOAbGYIrPyVzDU572Mh3awnomzi4NDoj3QLt5VTw9Ux50h20KDo6?= =?us-ascii?Q?syalkIGuRTxnJJJW/GJKQNfIWfKY1lYlisFbtm1UIK4WDUnHRmunfOQo+25X?= =?us-ascii?Q?/6OBQxOUEa/qc13SnGXlY0rM95V6byQzHzsAmkk67WR1chhnUtids3jWhKz5?= =?us-ascii?Q?tT6vuJES4Uj+OXwzgvQ62/wCbyxo0HHhxq6/VDfKHIoh7va1NWkocon8Ee9W?= =?us-ascii?Q?14dYkNhFEjqYzDQT3TYzOu2aknzhkbKwFiwtBae+?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB3504.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8572c84a-714f-45fd-8263-08da95f81209 X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Sep 2022 02:23:11.2918 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 2V3ATZrZ02FroNMJmEnVr8hYrBX0qXHD0i2BtI8ZUS1aGniPeut5uah+V9tojTLl5ti8ah1Qjb2K60l5X5UhWg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR11MB6506 X-OriginatorOrg: 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 > -----Original Message----- > From: Pei, Andy > Sent: Thursday, September 8, 2022 1:54 PM > To: dev@dpdk.org > Cc: Xia, Chenbo ; Xu, Rosen ; > Huang, Wei ; Cao, Gang ; > maxime.coquelin@redhat.com; Huang Wei > Subject: [PATCH v2 6/8] vdpa/ifc: support dynamic enable/disable queue >=20 > From: Huang Wei >=20 > Support dynamic enable or disable queue. > For front end, like QEMU, user can use ethtool to configurate queue. > For example, "ethtool -L eth0 combined 3" to enable 3 queues pairs. >=20 > Signed-off-by: Huang Wei > Signed-off-by: Andy Pei > --- > drivers/vdpa/ifc/base/ifcvf.c | 101 > ++++++++++++++++++++++++++++++++++++ > drivers/vdpa/ifc/base/ifcvf.h | 6 +++ > drivers/vdpa/ifc/base/ifcvf_osdep.h | 1 + > drivers/vdpa/ifc/ifcvf_vdpa.c | 93 +++++++++++++++++++++++++++---= - > -- > 4 files changed, 186 insertions(+), 15 deletions(-) >=20 > diff --git a/drivers/vdpa/ifc/base/ifcvf.c b/drivers/vdpa/ifc/base/ifcvf.= c > index 4875ea1..34f32f8 100644 > --- a/drivers/vdpa/ifc/base/ifcvf.c > +++ b/drivers/vdpa/ifc/base/ifcvf.c > @@ -230,6 +230,107 @@ > } > } >=20 > +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 (!hw || (i >=3D (int)hw->nr_vring)) > + return -1; Seems HW will always be not NULL > + > + cfg =3D hw->common_cfg; > + if (!cfg) { > + ERROUT("common_cfg in HW is NULL.\n"); I am thinking why you introduce this new log? Why not just use DRV_LOG that is already defined? > + return -1; > + } > + > + ifcvf_enable_multiqueue(hw); > + > + IFCVF_WRITE_REG16(i, &cfg->queue_select); > + msix_vector =3D IFCVF_READ_REG16(&cfg->queue_msix_vector); > + if (msix_vector !=3D (i + 1)) { > + IFCVF_WRITE_REG16(i + 1, &cfg->queue_msix_vector); > + msix_vector =3D IFCVF_READ_REG16(&cfg->queue_msix_vector); > + if (msix_vector =3D=3D IFCVF_MSI_NO_VECTOR) { > + ERROUT("queue %u, 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 =3D hw->lm_cfg; > + if (lm_cfg) { > + if (hw->device_type =3D=3D IFCVF_BLK) > + *(u32 *)(lm_cfg + IFCVF_LM_RING_STATE_OFFSET + > + i * IFCVF_LM_CFG_SIZE) =3D > + (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) =3D > + (u32)hw->vring[i].last_avail_idx | > + ((u32)hw->vring[i].last_used_idx << 16); > + } So the register layout is different for blk and net? > + > + notify_off =3D IFCVF_READ_REG16(&cfg->queue_notify_off); > + hw->notify_addr[i] =3D (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 (!hw || (i >=3D (int)hw->nr_vring)) > + return; > + > + cfg =3D hw->common_cfg; > + if (!cfg) { > + ERROUT("common_cfg in HW is NULL.\n"); > + return; > + } > + > + IFCVF_WRITE_REG16(i, &cfg->queue_select); > + IFCVF_WRITE_REG16(0, &cfg->queue_enable); > + > + lm_cfg =3D hw->lm_cfg; > + if (lm_cfg) { > + if (hw->device_type =3D=3D IFCVF_BLK) > + ring_state =3D *(u32 *)(lm_cfg + > + IFCVF_LM_RING_STATE_OFFSET + > + i * IFCVF_LM_CFG_SIZE); > + else > + ring_state =3D *(u32 *)(lm_cfg + > + IFCVF_LM_RING_STATE_OFFSET + > + (i / 2) * IFCVF_LM_CFG_SIZE + > + (i % 2) * 4); > + > + if (hw->device_type =3D=3D IFCVF_BLK) > + hw->vring[i].last_avail_idx =3D > + (u16)(ring_state & IFCVF_16_BIT_MASK); > + else > + hw->vring[i].last_avail_idx =3D (u16)(ring_state >> 16); Above two if-else should be combined. Thanks, Chenbo > + hw->vring[i].last_used_idx =3D (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 c17bf2a..e67d4e8 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); >=20 > 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); >=20 > void > diff --git a/drivers/vdpa/ifc/base/ifcvf_osdep.h > b/drivers/vdpa/ifc/base/ifcvf_osdep.h > index 3d56769..4a1bfec 100644 > --- a/drivers/vdpa/ifc/base/ifcvf_osdep.h > +++ b/drivers/vdpa/ifc/base/ifcvf_osdep.h > @@ -16,6 +16,7 @@ >=20 > #define WARNINGOUT(S, args...) RTE_LOG(WARNING, PMD, S, ##args) > #define DEBUGOUT(S, args...) RTE_LOG(DEBUG, PMD, S, ##args) > +#define ERROUT(S, args...) RTE_LOG(ERR, PMD, S, ##args) > #define STATIC static >=20 > #define msec_delay(x) rte_delay_us_sleep(1000 * (x)) > diff --git a/drivers/vdpa/ifc/ifcvf_vdpa.c b/drivers/vdpa/ifc/ifcvf_vdpa.= c > index 48f1a89..16fd0fd 100644 > --- a/drivers/vdpa/ifc/ifcvf_vdpa.c > +++ b/drivers/vdpa/ifc/ifcvf_vdpa.c > @@ -1288,13 +1288,59 @@ struct rte_vdpa_dev_info { > } >=20 > static int > +ifcvf_config_vring(struct ifcvf_internal *internal, int vring) > +{ > + struct ifcvf_hw *hw =3D &internal->hw; > + int vid =3D internal->vid; > + struct rte_vhost_vring vq; > + uint64_t gpa; > + > + if (hw->vring[vring].enable) { > + rte_vhost_get_vhost_vring(vid, vring, &vq); > + gpa =3D hva_to_gpa(vid, (uint64_t)(uintptr_t)vq.desc); > + if (gpa =3D=3D 0) { > + DRV_LOG(ERR, "Fail to get GPA for descriptor ring."); > + return -1; > + } > + hw->vring[vring].desc =3D gpa; > + > + gpa =3D hva_to_gpa(vid, (uint64_t)(uintptr_t)vq.avail); > + if (gpa =3D=3D 0) { > + DRV_LOG(ERR, "Fail to get GPA for available ring."); > + return -1; > + } > + hw->vring[vring].avail =3D gpa; > + > + gpa =3D hva_to_gpa(vid, (uint64_t)(uintptr_t)vq.used); > + if (gpa =3D=3D 0) { > + DRV_LOG(ERR, "Fail to get GPA for used ring."); > + return -1; > + } > + hw->vring[vring].used =3D gpa; > + > + hw->vring[vring].size =3D 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 =3D !!state; > int ret =3D 0; >=20 > vdev =3D rte_vhost_get_vdpa_device(vid); > @@ -1304,6 +1350,9 @@ struct rte_vdpa_dev_info { > return -1; > } >=20 > + DRV_LOG(INFO, "%s queue %d of vDPA device %s", > + enable ? "enable" : "disable", vring, vdev->device->name); > + > internal =3D list->internal; > if (vring < 0 || vring >=3D internal->max_queues * 2) { > DRV_LOG(ERR, "Vring index %d not correct", vring); > @@ -1311,27 +1360,41 @@ struct rte_vdpa_dev_info { > } >=20 > hw =3D &internal->hw; > + hw->vring[vring].enable =3D enable; > + > if (!internal->configured) > - goto exit; > + return 0; >=20 > - cfg =3D hw->common_cfg; > - IFCVF_WRITE_REG16(vring, &cfg->queue_select); > - IFCVF_WRITE_REG16(!!state, &cfg->queue_enable); > + unset_notify_relay(internal); >=20 > - if (!state && hw->vring[vring].enable) { > - ret =3D vdpa_disable_vfio_intr(internal); > - if (ret) > - return ret; > + ret =3D 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; > } >=20 > - if (state && !hw->vring[vring].enable) { > - ret =3D vdpa_enable_vfio_intr(internal, false); > - if (ret) > - return ret; > + ret =3D 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 =3D setup_notify_relay(internal); > + if (ret) { > + DRV_LOG(ERR, "failed to setup notify relay of vDPA device %s", > + vdev->device->name); > + return ret; > + } > + > + ret =3D 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; > } >=20 > -exit: > - hw->vring[vring].enable =3D !!state; > return 0; > } >=20 > -- > 1.8.3.1