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 07108A0542; Wed, 26 Oct 2022 11:03:03 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D7F6E40E28; Wed, 26 Oct 2022 11:03:02 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mails.dpdk.org (Postfix) with ESMTP id DCD2740041 for ; Wed, 26 Oct 2022 11:03: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=1666774981; x=1698310981; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=VdZZt5/o20sKcUmh2WR0HBRP7NmESMZUgeD3RTSABzU=; b=DIMLrI5NOpapfxDTB9/HfWH30urGZ9wYSY4XGmFW1hbgoP6RUXbzN/vG 2NpSdI8cFrb7sRN5HIieUytBia0NFTidbBE9aTMMe/tmui1sl4FmwjGWR ZRpaEznka2Hv0rhJsuFer1dmMWEGcgrqrFtOkMIrQ2lkII/w1VYhDpiWV TPP7+b9yZy5N0nJxFNpBrD2PTvUonvJK8LtyK1P3lzGsYe3Lj1wcwxQMT Jem1/eFwpimVmaoYU/QAu/7goBKy/c6EyYt9ZsLF5FRpzLb/hCmgo+3a4 3pfMcLFWfktXWyA6BBpG03k03nNMUXvjpStD5RB5ACFOaKwI1mK8Hg4Sb g==; X-IronPort-AV: E=McAfee;i="6500,9779,10511"; a="291202476" X-IronPort-AV: E=Sophos;i="5.95,214,1661842800"; d="scan'208";a="291202476" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Oct 2022 02:02:59 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10511"; a="721183078" X-IronPort-AV: E=Sophos;i="5.95,214,1661842800"; d="scan'208";a="721183078" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by FMSMGA003.fm.intel.com with ESMTP; 26 Oct 2022 02:02:59 -0700 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Wed, 26 Oct 2022 02:02:59 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Wed, 26 Oct 2022 02:02:58 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Wed, 26 Oct 2022 02:02:58 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.103) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Wed, 26 Oct 2022 02:02:58 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GQLSl0+eBD7W71R+pxG6pWCusLN9W6aWXQi/NxW5j2j/QCFtfzNy10kGbjU9EQio+QXNukFDufkM8YYFUsuwIfrzXkS9V6XAzHGR5lTLT5xyu9ek+THNlOER/ofbgBFtz2Cd27Q9W/QKZbG/a8hB6Kj/PHVAzhHb1cBB9pLFqpNgimyji3tXQOTsJuT5IiDyg1z1TIQuLthjoj/kf2ITjv/ZbOmS2dFWp0Fnm43wId9ho+I1yWdAnWwmToawW7VM37Rm2GoIEUWMBFBLovWMNf01cqc0SU4tjKuBiafoosgXQ5itv6mSuD3DeBEZz7kl0b8ibcQGBeK3xkyWzcHTcw== 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=wuUAN3vc+2tWnZdaSiChRu23ceguIaLsgBpF6YBHJeU=; b=Np7oKHv9uvss2kT67aOtb38WQ3JTXu7fTb4IEGfE4HsEdbAzq3TEUINfUmlf+FFLU9hzTrBTvt2fgoswaP5/AcWZKsyjtsrL/+dwjP3ZXd/+u76S3hSNENI0s4EawE66hrqbaAHBkqKSvQ+oagYdqqiSiLUbTnBBgqj/j/9cnRXrRj690Po3V8tQEDVJQrIQXkqaNXSpiJoB/3EhSI1s0hUevB4Nw2IdZYZOGwcn1nF4wIaHLC3WDD0/ezQq3l6RhjCheidOyGNncBQyBHF4ulh5IrF7sKywYJeTjfrjKGUWMfSpfd5zHvlrPCh3JLpJuPZNAYrEozXfIm3NXQ4kgg== 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 CY8PR11MB7266.namprd11.prod.outlook.com (2603:10b6:930:99::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.28; Wed, 26 Oct 2022 09:02:57 +0000 Received: from SN6PR11MB3504.namprd11.prod.outlook.com ([fe80::1a91:6a56:1250:ef0e]) by SN6PR11MB3504.namprd11.prod.outlook.com ([fe80::1a91:6a56:1250:ef0e%7]) with mapi id 15.20.5746.023; Wed, 26 Oct 2022 09:02:57 +0000 From: "Xia, Chenbo" To: "Ding, Xuan" , "maxime.coquelin@redhat.com" CC: "dev@dpdk.org" , "Hu, Jiayu" , "He, Xingguang" , "Ling, WeiX" , "Jiang, Cheng1" , "Wang, YuanX" , "Ma, WenwuX" Subject: RE: [PATCH v8 1/2] vhost: introduce DMA vchannel unconfiguration Thread-Topic: [PATCH v8 1/2] vhost: introduce DMA vchannel unconfiguration Thread-Index: AQHY6Evs7J+1IRZCrEqMHgAGfwO71a4gYrZw Date: Wed, 26 Oct 2022 09:02:57 +0000 Message-ID: References: <20220814140442.82525-1-xuan.ding@intel.com> <20221025082540.100618-1-xuan.ding@intel.com> <20221025082540.100618-2-xuan.ding@intel.com> In-Reply-To: <20221025082540.100618-2-xuan.ding@intel.com> Accept-Language: en-US, zh-CN Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.500.17 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_|CY8PR11MB7266:EE_ x-ms-office365-filtering-correlation-id: b8217a4b-1999-410a-4dc2-08dab730e008 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: LnwDmYgDeI4isJB1CPf0DJrjunf8Jh9mJFJ8cXrIWtXZWcPVD7J/58yO8p5MhDXpNFAv+ue3ndzXZ/YaIF9cen2rsZ1vV9L473GANc8DIb6Kvh9LNfYFFTHPUMDkmabTHO7Vp7/WtczWvlioJKho/44BcHFoiwdJZ12gODUvHtVGF4Jo+NDB0Co8yWMO3/pKr7bk8/79oQOJq7M7LA92Etx7PCK7IuIwd1jvIDVIkZjxI8psW7SSafhI+f72fdWxlEvnodkZG2IhPvgjS1BN3XrOmaY9ITBijYgKtLfyKTuVB+5nsx8EskziiNXkpj0Ryrp8t+2j05j9HcsiRcfCFWNxJ9/0Yt4NGHFCp1tGkz1cWWTZny2YgNIrpinjGj1ZpztLpRIF3cU1yFaXsACn/SbzEQTilfWKQAf2yIq8VMeaP8+ZhAJAOVhwgq1KsnZq4sVrholDejn3+z22qSbWiDfPypORTRwJYJkc6pfyNDzn8w4foO1ecO8d2zkb0rI/6B4Gcc5UDrVAHzK8yxMA4KwlzaeO9HG03u8h6fpbEXY+t7oABwxDBCh0WbDnpKee5GCcbmFsKH0Mm/2qYJAunLoD1Rsuo4lMdt+Dw/izHzzLl2tDgo9+WBIQH+ZufKHJfhW7E4YMRF/zaVn6ncBWU1KgMceWA1FcV4Mh33UEn6RqUgEqSINL18kP5ojWL3MFg+vv0voA/JDGE7ufG3456TtmotckcKIHC07puGW3FqC2QzKwzvEBnemorTTA8qI0zBAnRXyrIfm40MHpM9DXMA== 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)(366004)(396003)(136003)(346002)(376002)(39860400002)(451199015)(2906002)(83380400001)(186003)(5660300002)(122000001)(9686003)(26005)(41300700001)(82960400001)(38100700002)(316002)(86362001)(54906003)(107886003)(53546011)(4326008)(8676002)(71200400001)(7696005)(478600001)(76116006)(8936002)(52536014)(33656002)(55016003)(110136005)(64756008)(66446008)(66476007)(66556008)(66946007)(38070700005)(6506007); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?+yQGXLr7agQ0Fm5ioKeiKJ4NyU9GcQK53qNsG5wjDgNUtHl3FpkSc2ViYrFf?= =?us-ascii?Q?e+oSJMaeVYUTxCUU6ahu8rcd7JK7iEdbylWOxFT2Y0AH7gsK8gzqm7V1NxqJ?= =?us-ascii?Q?6MKhfizviRc0RZGKS+GRDJmmryzxD6WPEPoVsO3hQqDPcqGd/4iGNLp/dbWG?= =?us-ascii?Q?J+TIjek/Y35NvqibzSo8lEeIDC1yW3bIyWFNELjRm7HN0AnBRPmYzXYEfl4m?= =?us-ascii?Q?+FB8DTiidv50o6hx1IFPCtOkUizoV4QVbx5pJlc0XptCkima+G/R+nwtQ7IP?= =?us-ascii?Q?k6pn7bQ6783o6s815OP4WrOuwRPDwwXvhfvOL2dczNDsHQubBtj/pGQGmRqX?= =?us-ascii?Q?LpSJvdtagmCyreq0qnAJsp4OpwyzjlBS2/Lf9Ubt/8hACXVGqJVNcSKoGRHA?= =?us-ascii?Q?Fw/DaSQaBSSsaPuvuS/5BS5GpkehmBP0B8zNyVwDKF2lPONswCfHNFRX8+r2?= =?us-ascii?Q?1Qo9TPg+Czs8iJ0OLdUnTH2qFDDmXuRNifYVzfRTN2hV6GUs4aexKq+q5bBq?= =?us-ascii?Q?U7jGTNeOlfWwvRKxE00ed41K85AgBMbD0cKEKsdQMI4Ms9Wu0suEX29LozIo?= =?us-ascii?Q?9C6z58Q+dINeeQc7hWnf8CQEOSzmm9wapVbQ4t7zw91vrqnoDLGb7/oiPtWm?= =?us-ascii?Q?FSSP1j8+DDMz+JkRr6Omb0rymkbKs5rPh9UrTKfzdiIn6PG7yWc0fVyjFbft?= =?us-ascii?Q?KKKhrXyTeOge8+35DXT2FFjkPO+T20zPi4yFaPla8fcAHZS+VwUbR1TYVMmv?= =?us-ascii?Q?t6STSX9aabopxI1weG2eIe/lv7A9Vui0zlh8C1U5W+BI1C4fXJ4tQdl5Xg/Q?= =?us-ascii?Q?eeZI0GkWy+XG9+VdHmY5Gryeo1hc8S/lkWS7RHOAYX8tw86WoGuvg2NhafMJ?= =?us-ascii?Q?UKmoAzSH4r4FtCSV5YQhjWTrxecmMbmlHZR4z63G7DrkWB8L4TpaiQv4ds2n?= =?us-ascii?Q?UmtJScq9ERRHybYBBPqfwLf4deafvAyOddhfDEl5A6XCHPEsCxxGDiHvZN57?= =?us-ascii?Q?oJIjuOgXWfCISZEf1Rk83UPPBDU7ypS0T6BcdrIDOP7eOEP8plIld+QPUgkg?= =?us-ascii?Q?/PA4xN3UQkfUa5UvLePhHcOJaSDs+jGMAeg6csOgLWlBJq92r3YjJdbnnLv+?= =?us-ascii?Q?61fst1hkSwFgPZg8oo82+auahuxNr0VfNrdYb+y9JMjFNWjGkn0xJAu0nXJv?= =?us-ascii?Q?cYDPgvzrqyKhMMH9ZVbZGDjiEHLNt0yyiHGD95/zZACw6ZK+frMRS9FswAWE?= =?us-ascii?Q?8QcO+dkKygc8jjU4z1YFDkvh0pMvHHj+13WvEqt20OA67+SE6Z35rvoctvsc?= =?us-ascii?Q?GBZ2NnyRSlMhw/ZgRKff/eqd0IciCNMmfhwnbLY7+Tn6RxWJ2ysFQ+vj1cmH?= =?us-ascii?Q?pHIbzK7v4MAJ8eDSt4f65NAaJG81DZMPEzhCBIO2dwaMvmtpN9a8fUMTQdDx?= =?us-ascii?Q?4kqsYJ3WTSi9iYR6D2TDzjjsMGrKEcAhL6M75JkWub1m4EqxeJDJNuHXsyim?= =?us-ascii?Q?ABGBREaeWxpUVDJLCjV4db1SSXKD56Z/F999+TwCVN1FKUM9Ofiv0vBjQKmx?= =?us-ascii?Q?2W+GKkgETYdLz3kqiqbRzNtHdtlmFuoqZ2BWc5oY?= 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: b8217a4b-1999-410a-4dc2-08dab730e008 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Oct 2022 09:02:57.0831 (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: IWQSIpAKQcfjeHJNblJo69vAYy+EwUU/D179zdWwMg58rgcn38k8L+n0xRYs8DGaP1brSn0LTG3tgtTNhGDS7w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR11MB7266 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: Ding, Xuan > Sent: Tuesday, October 25, 2022 4:26 PM > To: maxime.coquelin@redhat.com; Xia, Chenbo > Cc: dev@dpdk.org; Hu, Jiayu ; He, Xingguang > ; Ling, WeiX ; Jiang, Cheng1 > ; Wang, YuanX ; Ma, WenwuX > ; Ding, Xuan > Subject: [PATCH v8 1/2] vhost: introduce DMA vchannel unconfiguration >=20 > From: Xuan Ding >=20 > Add a new API rte_vhost_async_dma_unconfigure() to unconfigure DMA > vChannels in vhost async data path. Lock protection are also added > to protect DMA vChannel configuration and unconfiguration > from concurrent calls. >=20 > Signed-off-by: Xuan Ding > --- > doc/guides/prog_guide/vhost_lib.rst | 5 ++ > doc/guides/rel_notes/release_22_11.rst | 5 ++ > lib/vhost/rte_vhost_async.h | 20 +++++++ > lib/vhost/version.map | 3 ++ > lib/vhost/vhost.c | 72 ++++++++++++++++++++++++-- > 5 files changed, 100 insertions(+), 5 deletions(-) >=20 > diff --git a/doc/guides/prog_guide/vhost_lib.rst > b/doc/guides/prog_guide/vhost_lib.rst > index bad4d819e1..0d9eca1f7d 100644 > --- a/doc/guides/prog_guide/vhost_lib.rst > +++ b/doc/guides/prog_guide/vhost_lib.rst > @@ -323,6 +323,11 @@ The following is an overview of some key Vhost API > functions: > Get device type of vDPA device, such as VDPA_DEVICE_TYPE_NET, > VDPA_DEVICE_TYPE_BLK. >=20 > +* ``rte_vhost_async_dma_unconfigure(dma_id, vchan_id)`` > + > + Clean DMA vChannel finished to use. After this function is called, > + the specified DMA vChannel should no longer be used by the Vhost > library. > + > Vhost-user Implementations > -------------------------- >=20 > diff --git a/doc/guides/rel_notes/release_22_11.rst > b/doc/guides/rel_notes/release_22_11.rst > index 2da8bc9661..bbd1c5aa9c 100644 > --- a/doc/guides/rel_notes/release_22_11.rst > +++ b/doc/guides/rel_notes/release_22_11.rst > @@ -225,6 +225,11 @@ New Features > sysfs entries to adjust the minimum and maximum uncore frequency value= s, > which works on Linux with Intel hardware only. >=20 > +* **Added DMA vChannel unconfiguration for async vhost.** > + > + Added support to unconfigure DMA vChannel that is no longer used > + by the Vhost library. > + > * **Rewritten pmdinfo script.** >=20 > The ``dpdk-pmdinfo.py`` script was rewritten to produce valid JSON onl= y. > diff --git a/lib/vhost/rte_vhost_async.h b/lib/vhost/rte_vhost_async.h > index 1db2a10124..8f190dd44b 100644 > --- a/lib/vhost/rte_vhost_async.h > +++ b/lib/vhost/rte_vhost_async.h > @@ -266,6 +266,26 @@ rte_vhost_async_try_dequeue_burst(int vid, uint16_t > queue_id, > struct rte_mempool *mbuf_pool, struct rte_mbuf **pkts, uint16_t > count, > int *nr_inflight, int16_t dma_id, uint16_t vchan_id); >=20 > +/** > + * @warning > + * @b EXPERIMENTAL: this API may change, or be removed, without prior > notice. > + * > + * Unconfigure DMA vChannel in Vhost asynchronous data path. > + * This function should be called when the specified DMA vChannel is no > longer > + * used by the Vhost library. Before this function is called, make sure > there > + * does not exist in-flight packets in DMA vChannel. > + * > + * @param dma_id > + * the identifier of DMA device > + * @param vchan_id > + * the identifier of virtual DMA channel > + * @return > + * 0 on success, and -1 on failure > + */ > +__rte_experimental > +int > +rte_vhost_async_dma_unconfigure(int16_t dma_id, uint16_t vchan_id); > + > #ifdef __cplusplus > } > #endif > diff --git a/lib/vhost/version.map b/lib/vhost/version.map > index 7a00b65740..0b61870870 100644 > --- a/lib/vhost/version.map > +++ b/lib/vhost/version.map > @@ -94,6 +94,9 @@ EXPERIMENTAL { > rte_vhost_async_try_dequeue_burst; > rte_vhost_driver_get_vdpa_dev_type; > rte_vhost_clear_queue; > + > + # added in 22.11 > + rte_vhost_async_dma_unconfigure; > }; >=20 > INTERNAL { > diff --git a/lib/vhost/vhost.c b/lib/vhost/vhost.c > index 8740aa2788..1bb01c2a2e 100644 > --- a/lib/vhost/vhost.c > +++ b/lib/vhost/vhost.c > @@ -23,6 +23,7 @@ >=20 > struct virtio_net *vhost_devices[RTE_MAX_VHOST_DEVICE]; > pthread_mutex_t vhost_dev_lock =3D PTHREAD_MUTEX_INITIALIZER; > +pthread_mutex_t vhost_dma_lock =3D PTHREAD_MUTEX_INITIALIZER; >=20 > struct vhost_vq_stats_name_off { > char name[RTE_VHOST_STATS_NAME_SIZE]; > @@ -1844,19 +1845,21 @@ rte_vhost_async_dma_configure(int16_t dma_id, > uint16_t vchan_id) > void *pkts_cmpl_flag_addr; > uint16_t max_desc; >=20 > + pthread_mutex_lock(&vhost_dma_lock); > + > if (!rte_dma_is_valid(dma_id)) { > VHOST_LOG_CONFIG("dma", ERR, "DMA %d is not found.\n", dma_id); > - return -1; > + goto error; > } >=20 > if (rte_dma_info_get(dma_id, &info) !=3D 0) { > VHOST_LOG_CONFIG("dma", ERR, "Fail to get DMA %d > information.\n", dma_id); > - return -1; > + goto error; > } >=20 > if (vchan_id >=3D info.max_vchans) { > VHOST_LOG_CONFIG("dma", ERR, "Invalid DMA %d vChannel %u.\n", > dma_id, vchan_id); > - return -1; > + goto error; > } >=20 > if (!dma_copy_track[dma_id].vchans) { > @@ -1868,7 +1871,7 @@ rte_vhost_async_dma_configure(int16_t dma_id, > uint16_t vchan_id) > VHOST_LOG_CONFIG("dma", ERR, > "Failed to allocate vchans for DMA %d > vChannel %u.\n", > dma_id, vchan_id); > - return -1; > + goto error; > } >=20 > dma_copy_track[dma_id].vchans =3D vchans; > @@ -1877,6 +1880,7 @@ rte_vhost_async_dma_configure(int16_t dma_id, > uint16_t vchan_id) > if (dma_copy_track[dma_id].vchans[vchan_id].pkts_cmpl_flag_addr) { > VHOST_LOG_CONFIG("dma", INFO, "DMA %d vChannel %u already > registered.\n", > dma_id, vchan_id); > + pthread_mutex_unlock(&vhost_dma_lock); > return 0; > } >=20 > @@ -1894,7 +1898,7 @@ rte_vhost_async_dma_configure(int16_t dma_id, > uint16_t vchan_id) > rte_free(dma_copy_track[dma_id].vchans); > dma_copy_track[dma_id].vchans =3D NULL; > } > - return -1; > + goto error; > } >=20 > dma_copy_track[dma_id].vchans[vchan_id].pkts_cmpl_flag_addr =3D > pkts_cmpl_flag_addr; > @@ -1902,7 +1906,12 @@ rte_vhost_async_dma_configure(int16_t dma_id, > uint16_t vchan_id) > dma_copy_track[dma_id].vchans[vchan_id].ring_mask =3D max_desc - 1; > dma_copy_track[dma_id].nr_vchans++; >=20 > + pthread_mutex_unlock(&vhost_dma_lock); > return 0; > + > +error: > + pthread_mutex_unlock(&vhost_dma_lock); > + return -1; > } >=20 > int > @@ -2091,5 +2100,58 @@ int rte_vhost_vring_stats_reset(int vid, uint16_t > queue_id) > return 0; > } >=20 > +int > +rte_vhost_async_dma_unconfigure(int16_t dma_id, uint16_t vchan_id) > +{ > + struct rte_dma_info info; > + struct rte_dma_stats stats =3D { 0 }; > + > + pthread_mutex_lock(&vhost_dma_lock); > + > + if (!rte_dma_is_valid(dma_id)) { > + VHOST_LOG_CONFIG("dma", ERR, "DMA %d is not found.\n", dma_id); > + goto error; > + } > + > + if (rte_dma_info_get(dma_id, &info) !=3D 0) { > + VHOST_LOG_CONFIG("dma", ERR, "Fail to get DMA %d > information.\n", dma_id); > + goto error; > + } > + > + if (vchan_id >=3D info.max_vchans || !dma_copy_track[dma_id].vchans || > + !dma_copy_track[dma_id].vchans[vchan_id].pkts_cmpl_flag_addr) > { > + VHOST_LOG_CONFIG("dma", ERR, "Invalid channel %d:%u.\n", > dma_id, vchan_id); > + goto error; > + } > + > + if (rte_dma_stats_get(dma_id, vchan_id, &stats) !=3D 0) { > + VHOST_LOG_CONFIG("dma", ERR, > + "Failed to get stats for DMA %d vChannel %u.\n", > dma_id, vchan_id); > + goto error; > + } > + > + if (stats.submitted - stats.completed !=3D 0) { > + VHOST_LOG_CONFIG("dma", ERR, > + "Do not unconfigure when there are inflight > packets.\n"); > + goto error; > + } > + > + > rte_free(dma_copy_track[dma_id].vchans[vchan_id].pkts_cmpl_flag_addr > ); > + dma_copy_track[dma_id].vchans[vchan_id].pkts_cmpl_flag_addr =3D NULL; > + dma_copy_track[dma_id].nr_vchans--; > + > + if (dma_copy_track[dma_id].nr_vchans =3D=3D 0) { > + rte_free(dma_copy_track[dma_id].vchans); > + dma_copy_track[dma_id].vchans =3D NULL; > + } > + > + pthread_mutex_unlock(&vhost_dma_lock); > + return 0; > + > +error: > + pthread_mutex_unlock(&vhost_dma_lock); > + return -1; > +} > + > RTE_LOG_REGISTER_SUFFIX(vhost_config_log_level, config, INFO); > RTE_LOG_REGISTER_SUFFIX(vhost_data_log_level, data, WARNING); > -- > 2.17.1 Reviewed-by: Chenbo Xia