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 247DA42A9D; Tue, 9 May 2023 07:34:12 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0AFD1410FA; Tue, 9 May 2023 07:34:12 +0200 (CEST) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by mails.dpdk.org (Postfix) with ESMTP id 28269410D7 for ; Tue, 9 May 2023 07:34:10 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1683610450; x=1715146450; h=from:to:subject:date:message-id:references:in-reply-to: content-transfer-encoding:mime-version; bh=7H5K6QxSp1tBUb1kdcH8ThbpGbffmGQZfg4XfHfOP6U=; b=QR3RAwXXYTFdCSIi9bdSzpki/TbA1KzCJvIt/wwpSdt0VGJAM6vLP2k8 UQwN374xNp4eMydG/ztSNxwX4Pd16ye2LpUKwU+kK8HueuPsYIZJH3N4v RMnAcuI1J5J8Sig/7zPCl3GwvvUebCafmSH/5S7iMl0Iz1NNQWjVIzGpo K3dOrIc2FuwisbxaDwGh4mMsMZhQfbzA2wMGK7OorzGpM3P1swXnm8AVB qJqUfRyZmo4HjuosaGdIzN2UGVHFAhIl+x9jK2lctHL35wOFjodiobs7D eLkzQsNbg84/7cxnEkXkLOuEXG3qLwHsPKXf2XUksxaiCnDyWVryUwuY2 g==; X-IronPort-AV: E=McAfee;i="6600,9927,10704"; a="339039083" X-IronPort-AV: E=Sophos;i="5.99,261,1677571200"; d="scan'208";a="339039083" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 May 2023 22:34:09 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10704"; a="873037640" X-IronPort-AV: E=Sophos;i="5.99,261,1677571200"; d="scan'208";a="873037640" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga005.jf.intel.com with ESMTP; 08 May 2023 22:34:09 -0700 Received: from orsmsx612.amr.corp.intel.com (10.22.229.25) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Mon, 8 May 2023 22:34:09 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx612.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23 via Frontend Transport; Mon, 8 May 2023 22:34:09 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.168) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.23; Mon, 8 May 2023 22:34:08 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MfGA8vyeHPqHPmFKqoVxSMPNZFaaKBki06PWhLuDWIhA7sxS0jgENIetC6Zffh0wdZKgMXuOnRXivuSf5JHcRi7LsOumdjVQ0d/7nxVYNSUlIQacLlnGeJZtk4GEPXcmAuuzL59ehP1HYlj5k6JNDoACLWF0meGuwJYOxLgLgyxKA1OYSthR7cUBeo8SQnzeuY/v4zBK026SwdvWoENYeSlp+FcSez9DoNRFERMJ7zN4Ow9Scv15R2ML0IOFEKw2LsXHuTIYkatLOvQdGhLtmfhgOJxL9HdavOvB9M+zOgwFzNXywSROA7ssUOhni7/S+k4caknf99nh0XD7KqtWFw== 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=hgS2gAXuXYBmWLTqmXnV/zaVScltDi9nnfi7M6bTqrM=; b=QyLwJhUxm+7Ilfb4xnBt1eJf47Kx4Ca2rvMkSmeOludbgaYsW9AhzNVCRG/FTPUVhA/7/PYbssVbtNLvRnjIttYaxyz6EGy70iJl/1IA740C8uHLgRMTdLNcZly5fy+oJVWmQtjgSb9tJUIAv6+Q4ojZYm/EsUL9TzCPKyfByswo/dp4+NdPJ2xS8dEdeAePxA7hk1ym7hHOl8WYOLjp9X9c6eeEgQBmznVgNsoUIiwcnzxRsy4Amd/eHVbemP6FmIj0OZx9tD+RygRYhS/lGdF4Ye6/63FFQa3I3Uv/Jeq4juo+GEGJkFR2G2Yz4XARbrorLP9bC9qlEqsQtw8wZA== 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 CY8PR11MB6867.namprd11.prod.outlook.com (2603:10b6:930:5d::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.33; Tue, 9 May 2023 05:34:06 +0000 Received: from SN6PR11MB3504.namprd11.prod.outlook.com ([fe80::5797:849:7a10:560d]) by SN6PR11MB3504.namprd11.prod.outlook.com ([fe80::5797:849:7a10:560d%6]) with mapi id 15.20.6363.032; Tue, 9 May 2023 05:34:06 +0000 From: "Xia, Chenbo" To: Maxime Coquelin , "dev@dpdk.org" , "david.marchand@redhat.com" , "mkp@redhat.com" , "fbl@redhat.com" , "jasowang@redhat.com" , "Liang, Cunming" , "Xie, Yongji" , "echaudro@redhat.com" , "eperezma@redhat.com" , "amorenoz@redhat.com" Subject: RE: [RFC 22/27] vhost: add VDUSE events handler Thread-Topic: [RFC 22/27] vhost: add VDUSE events handler Thread-Index: AQHZY+fVGD/ZhSA940uh/3DTBFGgWa9Rp+Kg Date: Tue, 9 May 2023 05:34:06 +0000 Message-ID: References: <20230331154259.1447831-1-maxime.coquelin@redhat.com> <20230331154259.1447831-23-maxime.coquelin@redhat.com> In-Reply-To: <20230331154259.1447831-23-maxime.coquelin@redhat.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_|CY8PR11MB6867:EE_ x-ms-office365-filtering-correlation-id: 17bac9c0-7786-4ef9-430e-08db504f01b0 x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Y9/a2qoz3FPzwcNJYCApYgbwvYqFXqleqz/Xmz+6/Ady8k7Wdo0GoGliPMd6l9ccvx9FKFfkxB1AltvGeihhGdappiz/KonAmReggA4iCJ9Kv35hRHeAcMwyEktRTmD1o7afZXDx1nqJReG7QN0QfsZjWVyptFtizsCXrSZk1siZF+NT0Ih3N9FztUH5Udi/hoFWYVIcxFqLFtIaF+IIeCcWyc4J5no72QwnbAHemlOCEaFnM/Tiyxr3RBlN0JkU8dlEJ7J7ZqOzzXsVPGXxZfyjT9sdk2tntbRqgBG4T+HPZH0l3fSSrXtfFhpkViqwlC47iU9kHlwE+cdp/NG3Cehjrx17K0jcpKGAmrtJvciMOIYWeGKjI0wzjSmP9X4vzP1UAB5VYavINqYd02mx+MJL4VCcYLgWwB/rSVANxlmttuk6h82C4fDRzQdv6GkdqNnREepsRSxRxC4QLcd8//JegFfoYQnisYY/CPnlsrNKK9xfESWTn/fPgKo58RcmW9NtjmWdzzEdgLh02hOjD0AKttQEtiQan5py7a4qwjWWkk5G76dCOMuPsZw545gvdotK295RxiyYucWthulTBIByTiKD9wp+NN+d9WWcpE370wdzNs+3PjuXW3pPrYeTFQB10QEztG2ofVrenujNPg== 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:(13230028)(396003)(346002)(376002)(366004)(136003)(39860400002)(451199021)(64756008)(66446008)(66476007)(66556008)(2906002)(7416002)(86362001)(8936002)(52536014)(8676002)(5660300002)(316002)(41300700001)(66946007)(76116006)(55016003)(478600001)(33656002)(71200400001)(7696005)(110136005)(186003)(82960400001)(921005)(26005)(6506007)(9686003)(53546011)(83380400001)(38070700005)(122000001)(38100700002); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?8qKLYRr7c85P79MTX127HAgz43HnukrubaKgWvSk1zK+DcAhU+0uaEka3I5T?= =?us-ascii?Q?mkr9dt3eoD9F0hWWytorkcKzHxoUUOJ+P4F50Ow2holBnqVPl1qLol4n4Ah7?= =?us-ascii?Q?6a53jhr6o24yTjEGKzFzUX6fp1KYxXjEFGz/1tgRKFexuKFQmhwgSWhLfDCb?= =?us-ascii?Q?ahmzKXZiUnhDd7iuKyAOApKscj8maSaQZqEc9nLsVmLJMp6zIE1dz6Iuhu42?= =?us-ascii?Q?vDGr6Saz9FiGFL2G3RYSedqbLAiMQtgARsMgGYoV6whvvH4Ho/643VdIGJL/?= =?us-ascii?Q?D9tq3d2sBexd6ypmBHAPx+ASSsRXrhy35Pq4n0wO89X9ncEMgWhkuPZu1qJv?= =?us-ascii?Q?hMoMyrrAr3h5GZ3cNnZElMzpkCW5+4qeU6SWXM1wgL58/1ysNtikVTgLdvmJ?= =?us-ascii?Q?rkMOVg+imW3rDk/rN4bkBj3XOSUAVbewtas0WH8Zifij4jc1lV2i+OYoK7Vf?= =?us-ascii?Q?r4oZ61rg1uyCEv+1Dbpu9t97wbQtSqWbvfzbnJkFU89rptqu5rM+Ev04jj4n?= =?us-ascii?Q?XZ7q5L4iLpyZHXCrskJ4hnMls9hSUK7NKjk7xYS1jcXpdHO/625CUZ9lUWjY?= =?us-ascii?Q?mBPf9+xIt2ic2tlV+ict/yEVzBehMQ/BjYcOoke4Fcp2KbES5bLvRbMonqnk?= =?us-ascii?Q?SDOUiBxZVyNLBcoc4ob2i8Fo17g3aZwY6O94Kz4vwugLkbHZo2mZH9owi8MT?= =?us-ascii?Q?2vf9q+cSn7rqaBW7Glxb5X4wgXtjHiDDXT/2j9aeyECze4J9pbB61PTmpgSC?= =?us-ascii?Q?jzcqjT6gK8DwUyXRGZeAcxRGkCdwWz3F9f7YuE/r3npvXHSmFVXrO1rCRwlK?= =?us-ascii?Q?27rIwkrEdhqnezxLIDTV7ZVWZF6sjY3yH3HHn3p1QMThDncf9QfxisvwBOTK?= =?us-ascii?Q?eL0+/anZFeFdvT6HhvTHrofgena7h/dECIV/WVfqaKPJxwnlzS2s3QSdnx+z?= =?us-ascii?Q?2FsXjbrWMUhX4sPkMZTvTeOLJmYQPPge6RsR0W/8KU+ZIj2Nc879TB4daX/R?= =?us-ascii?Q?YZkCfQw9FgwTcHKusDj5Rh4HehPGXz26bmbm/YhWr1en3o9wKabaFoYVMrWb?= =?us-ascii?Q?PK8YUFKA+B5zg2hf2VSdV7khknlOSbEJ7Ogy/eDnwIJMFyBGA/5RjjZQ14nX?= =?us-ascii?Q?57tsXcwyXigVhuCcOM1MhwGw7t6lbKQXrqxMs3g+iyoom7YuNloF/VQ3gnxI?= =?us-ascii?Q?eMUg9kuasLYP0loK/X4HOBCWEO4eFBAnbbuCW7X5o1ik7uGwq8NwnLBlKvW8?= =?us-ascii?Q?zUOU+rQmp1BdADRM9hi++BCtKXjfVgFHySrO6ojszJ5ghBquOFIijerM+Tii?= =?us-ascii?Q?UcMit1Ii7kq6+9xxI9T5KLGaXhUxb1YebVrOme0c83PzQMan+kg0k9kYRny5?= =?us-ascii?Q?pGiCaFT9qNqjbBHvOlrtwrRd4ENjkYdOSHCpJ7AfVlk+/3XELvm512YVoKZ5?= =?us-ascii?Q?inzr3pPRaWu3fa1eSxXZoFPjC6c21HcYpQj3D0F1hnhXZbxiMAM2y5qh07Rg?= =?us-ascii?Q?qA38vBqb1IKtTND2TeLbfJn/A9KrGLiDTGBYVFKML/k4h30Cdg9AnVWAYRyF?= =?us-ascii?Q?PObJEFHk1/MFXv+h703/Qal3GrRXUCbh5Fzvvi65?= 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: 17bac9c0-7786-4ef9-430e-08db504f01b0 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 May 2023 05:34:06.3461 (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: xIr+jAyeVe2EzvU6BAMOGccuvvY8qXkGR5G8dSmwu08TPlJLs/JG15Exz6nmAoCeY/apvy7CP+sqrfq3MOPLcg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR11MB6867 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: Maxime Coquelin > Sent: Friday, March 31, 2023 11:43 PM > To: dev@dpdk.org; david.marchand@redhat.com; Xia, Chenbo > ; mkp@redhat.com; fbl@redhat.com; > jasowang@redhat.com; Liang, Cunming ; Xie, Yongj= i > ; echaudro@redhat.com; eperezma@redhat.com; > amorenoz@redhat.com > Cc: Maxime Coquelin > Subject: [RFC 22/27] vhost: add VDUSE events handler >=20 > This patch makes use of Vhost lib's FD manager to install > a handler for VDUSE events occurring on the VDUSE device FD. >=20 > Signed-off-by: Maxime Coquelin > --- > lib/vhost/vduse.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 102 insertions(+) >=20 > diff --git a/lib/vhost/vduse.c b/lib/vhost/vduse.c > index afa8a39498..2a183130d3 100644 > --- a/lib/vhost/vduse.c > +++ b/lib/vhost/vduse.c > @@ -17,6 +17,7 @@ >=20 > #include >=20 > +#include "fd_man.h" > #include "iotlb.h" > #include "vduse.h" > #include "vhost.h" > @@ -32,6 +33,27 @@ > (1ULL << VIRTIO_F_IN_ORDER) | \ > (1ULL << VIRTIO_F_IOMMU_PLATFORM)) >=20 > +struct vduse { > + struct fdset fdset; > +}; > + > +static struct vduse vduse =3D { > + .fdset =3D { > + .fd =3D { [0 ... MAX_FDS - 1] =3D {-1, NULL, NULL, NULL, 0} }, > + .fd_mutex =3D PTHREAD_MUTEX_INITIALIZER, > + .fd_pooling_mutex =3D PTHREAD_MUTEX_INITIALIZER, > + .num =3D 0 > + }, > +}; > + > +static bool vduse_events_thread; > + > +static const char * const vduse_reqs_str[] =3D { > + "VDUSE_GET_VQ_STATE", > + "VDUSE_SET_STATUS", > + "VDUSE_UPDATE_IOTLB", > +}; > + > static int > vduse_inject_irq(struct virtio_net *dev, struct vhost_virtqueue *vq) > { > @@ -105,16 +127,84 @@ static struct vhost_backend_ops vduse_backend_ops = =3D > { > .inject_irq =3D vduse_inject_irq, > }; >=20 > +static void > +vduse_events_handler(int fd, void *arg, int *remove __rte_unused) > +{ > + struct virtio_net *dev =3D arg; > + struct vduse_dev_request req; > + struct vduse_dev_response resp; > + int ret; > + > + memset(&resp, 0, sizeof(resp)); > + > + ret =3D read(fd, &req, sizeof(req)); > + if (ret < 0) { > + VHOST_LOG_CONFIG(dev->ifname, ERR, "Failed to read > request: %s\n", > + strerror(errno)); > + return; > + } else if (ret < (int)sizeof(req)) { > + VHOST_LOG_CONFIG(dev->ifname, ERR, "Incomplete to read > request %d\n", ret); > + return; > + } > + > + pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); > + > + VHOST_LOG_CONFIG(dev->ifname, INFO, "New request: %s (%u)\n", > + req.type < RTE_DIM(vduse_reqs_str) ? > + vduse_reqs_str[req.type] : "Unknown", > + req.type); > + > + switch (req.type) { > + default: > + resp.result =3D VDUSE_REQ_RESULT_FAILED; > + break; > + } > + > + pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); > + > + resp.request_id =3D req.request_id; > + > + ret =3D write(dev->vduse_dev_fd, &resp, sizeof(resp)); > + if (ret !=3D sizeof(resp)) { > + VHOST_LOG_CONFIG(dev->ifname, ERR, "Failed to write > response %s\n", > + strerror(errno)); > + return; > + } > +} > + > int > vduse_device_create(const char *path) > { > int control_fd, dev_fd, vid, ret; > + pthread_t fdset_tid; > uint32_t i; > struct virtio_net *dev; > uint64_t ver =3D VHOST_VDUSE_API_VERSION; > struct vduse_dev_config *dev_config =3D NULL; > const char *name =3D path + strlen("/dev/vduse/"); >=20 > + /* If first device, create events dispatcher thread */ > + if (vduse_events_thread =3D=3D false) { > + /** > + * create a pipe which will be waited by poll and notified to > + * rebuild the wait list of poll. > + */ > + if (fdset_pipe_init(&vduse.fdset) < 0) { > + VHOST_LOG_CONFIG(path, ERR, "failed to create pipe for > vduse fdset\n"); > + return -1; > + } > + > + ret =3D rte_ctrl_thread_create(&fdset_tid, "vduse-events", NULL, > + fdset_event_dispatch, &vduse.fdset); > + if (ret !=3D 0) { > + VHOST_LOG_CONFIG(path, ERR, "failed to create vduse > fdset handling thread\n"); > + fdset_pipe_uninit(&vduse.fdset); > + return -1; > + } > + > + vduse_events_thread =3D true; > + } > + > control_fd =3D open(VDUSE_CTRL_PATH, O_RDWR); > if (control_fd < 0) { > VHOST_LOG_CONFIG(name, ERR, "Failed to open %s: %s\n", > @@ -198,6 +288,13 @@ vduse_device_create(const char *path) > } > } >=20 > + ret =3D fdset_add(&vduse.fdset, dev->vduse_dev_fd, > vduse_events_handler, NULL, dev); > + if (ret) { > + VHOST_LOG_CONFIG(name, ERR, "Failed to add fd %d to vduse > fdset\n", > + dev->vduse_dev_fd); > + goto out_dev_destroy; > + } > + > free(dev_config); >=20 > return 0; > @@ -236,11 +333,16 @@ vduse_device_destroy(const char *path) > if (vid =3D=3D RTE_MAX_VHOST_DEVICE) > return -1; >=20 > + fdset_del(&vduse.fdset, dev->vduse_dev_fd); > + > if (dev->vduse_dev_fd >=3D 0) { > close(dev->vduse_dev_fd); > dev->vduse_dev_fd =3D -1; > } >=20 > + sleep(2); //ToDo: Need to rework fdman to ensure the deleted FD is > no > + //more being polled, otherwise VDUSE_DESTROY_DEV will fail. > + > if (dev->vduse_ctrl_fd >=3D 0) { > ret =3D ioctl(dev->vduse_ctrl_fd, VDUSE_DESTROY_DEV, name); > if (ret) > -- > 2.39.2 Reviewed-by: Chenbo Xia =20