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 E83F842A69; Fri, 5 May 2023 07:08:15 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D6BAC41144; Fri, 5 May 2023 07:08:15 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mails.dpdk.org (Postfix) with ESMTP id 6EFDD40ED7 for ; Fri, 5 May 2023 07:08:13 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1683263294; x=1714799294; h=from:to:subject:date:message-id:references:in-reply-to: content-transfer-encoding:mime-version; bh=cSTFbFoHhRbze689cb7LIX0e4D2ZgeA/Aorkgh7f3KU=; b=NvKyaTP3Pg3Pqn18ybxF04knfTvaW6F2wyVlJ3BADYU2ObFrZEuddhgO qGOxdRwKHR/OGIlASZPDEdPmRiA5BWNKUOKPtuNx+MWNJRFYsNMZXpVlF 2mJWMWYAM68pbI4D2MBDedkpnSGmZXiDeEPLKX9OzhephaTPfNi+DWvO3 TE1iYDEM5qbxOLI3cYtlbn8eQqP6O9AsF4c2oQIcgjxv4Q2f2KdCQXJ6R AB7mKpOTbg/YJvIdD1KnwC7s1LCRLxNPnnYvhgrSnwb1UVgmVsii5AJNI tOyduwKUvHnfyFc0Y4BhPhDb6ARDXs7Ex1B2eKcZKX4TpbO0cObIIZREX g==; X-IronPort-AV: E=McAfee;i="6600,9927,10700"; a="352164774" X-IronPort-AV: E=Sophos;i="5.99,250,1677571200"; d="scan'208";a="352164774" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2023 22:07:47 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10700"; a="1027276376" X-IronPort-AV: E=Sophos;i="5.99,250,1677571200"; d="scan'208";a="1027276376" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmsmga005.fm.intel.com with ESMTP; 04 May 2023 22:07:46 -0700 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Thu, 4 May 2023 22:07:46 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23 via Frontend Transport; Thu, 4 May 2023 22:07:46 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.169) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.23; Thu, 4 May 2023 22:07:43 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UanyS2BWaDrr1m414o+09EZ4F0t15JRarcOvljlYLEdwrFLQCgJri0HzTj6X6lvBIWOKszQHN83SobM9OnjoWBeJtDeKei3maurpwuMKa2+g6REP8M2ckjzeSCGvpqFz7lSMjCWcgE9z3SBfWOrY2C06/KXkZX3l532GZ+NWkDerazTntltz5EoJHHCO6fJX1Ht1Jgq6ipyP6zthDtdyieTeQ24L0OnPFavyn5tdXrZOLEIDnoYVwB3gCe+izEw8yHJ93D/w6MueloizGWNv1HITYWSar/MFgrkcFf1DIWAwWH3M0djCXopgK0CCUs0QG0EIU1zS2CLWei+SlrHq0g== 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=ucIXFIl+8o29Jj+5c2x1OH9NkzXVmzC85wf4DhOPTvY=; b=Ncb8xZxZh2XdtN/d7s1MCAybmbR3k19vSsCgcI7bfDOY/w2v2WBATXe1Is/sYOGj4Mu/BW6XHDLaY0km0KhpgSQJNuL7XVR0mjHoF2FNzvWELqrUbu3BtsDU8VTQ27PMeFgbHRtgPT4rJZ3FfH6zmAzDpQ3iWC419GigLER27AnFMiniQ8svZmEDzlLYUg5kJrto6yxDwuaCfZYc9i/vqgm/MAOCJHzpt1C6QkDEsEyQHLivWLOeVkdf0DPfZNYsGC+bZFZu2CxTib19p4rrtCPZBFT6yNvpvUifXox+PnluIHvfVZq6xJFHBwt+A3Trzx8ghahiO27P5FRYjraJmA== 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 IA1PR11MB6444.namprd11.prod.outlook.com (2603:10b6:208:3a7::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.22; Fri, 5 May 2023 05:07:40 +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.022; Fri, 5 May 2023 05:07:39 +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 14/27] vhost: add helper for interrupt injection Thread-Topic: [RFC 14/27] vhost: add helper for interrupt injection Thread-Index: AQHZY+eee3tpzyFHXEWiPLvzvAMwRa9LM5Pg Date: Fri, 5 May 2023 05:07:39 +0000 Message-ID: References: <20230331154259.1447831-1-maxime.coquelin@redhat.com> <20230331154259.1447831-15-maxime.coquelin@redhat.com> In-Reply-To: <20230331154259.1447831-15-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_|IA1PR11MB6444:EE_ x-ms-office365-filtering-correlation-id: 626670d7-99c5-4363-0daf-08db4d26a66d 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: /ENWxUcfQIfWY5KClGlVf/022zokVGnaehL4vGFdtQVQkB9G982snNAFkMLjnDdT64fNrvJpe+aKkO3oqCfWn8ZzEVqVpiVMfSNeaIPUbvnguUN0AkO8G1AVy0fCjm/hkenSAn6/etF4DQeOsx8jMTqBGSJMb6zIxLzl1dFheD1y6a0VepCRW8JNrpXWOG4D+OjTD/MyWIVTr/a8b/7fg48bzs8jkINVW9q+plefYNqUb/JgmAiGDmdIoB2Hbs1Ouk5QCBRrG0SCbnESh8n6z1+0pyqiFMZIQZiL+OO441swbZpjWaMfpnarNkyInbKLIyNnEOK9NFR2C2LquOYoW2+W3pdFEKmgrBp3e92vP9y8SFrGouzSEIhSfPcLwMS5drWcTamc//LAaagkd64k6UGvDkvUL4sJS71lRTshE0gvGUnck2i4XjVStUi/zXsWWyWxM7tTNVM/OT59q/I1LCN4FqP83Vbe51luiksiYNcREMjD7pYKZZJn3HcB8l9OjPOx9jryjmZuenVRB+XETHkQGHO57+YHz5ko+ftOjVsWwu+aRoRitwAbkW5Jz+/6e6dKz8x+B0xJ8JtPjX7bSwzm1KKJe8+iUqcTZFKcmxR9gUIZhWRYAGZck2861h9PEscpN8CRfcol5RgSbWQtkA== 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)(136003)(39860400002)(396003)(376002)(366004)(346002)(451199021)(921005)(55016003)(8676002)(26005)(6506007)(9686003)(8936002)(7416002)(53546011)(52536014)(76116006)(316002)(66556008)(110136005)(66476007)(66946007)(64756008)(66446008)(71200400001)(41300700001)(478600001)(5660300002)(7696005)(122000001)(33656002)(38100700002)(82960400001)(86362001)(38070700005)(186003)(2906002)(83380400001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?kNF/YyBqou3xvN+EEunLJRDASetfPsV8Q9gYvvmX94MuauEt1FsaiadZNKwo?= =?us-ascii?Q?7DnKbkDrTXCCyCVYeRNaYaRX0jfsMAtMvpTYuMLpF/uPBoh9wfj9iePmcno1?= =?us-ascii?Q?/I+s10tBhC36fH0pD2RnUCUEgGItszF1NeJisKMbzW8LGyP4IzbqW8Q0Zqbc?= =?us-ascii?Q?L1YUK0WWAPz9TgEPxgfO4deB9k12X61XOqqbv5J3aI3Xfy0hNMYz1Jip5Abj?= =?us-ascii?Q?zAsTdwU7R+MeXswdxktbRN4q4kv3FKAkYAJWO2HgaS1DhG8/fXFJK4Fu/4uy?= =?us-ascii?Q?f58NrOCylMsmzAqO9dFyoZjfHYNqK5bjGFaU+95SvufWHt8jZFBzrAtW9umM?= =?us-ascii?Q?ywTxhTnVW1ccPP4dxuhDsVUvMOgMjZYHtkw4JEBuF6xM31JxqIKsvmhsbG6w?= =?us-ascii?Q?q18QhgTTW24+/0BmRv41ARIdDi+Cgr+wRBVI1i4XU1/SM6VzxMrFngP7Y7oA?= =?us-ascii?Q?sg3H8XcBHU7Xwp2Ah1Y9uQh83O5AQD0xGTx8w1mrC4n5Z1niqwJ4woWYA66W?= =?us-ascii?Q?GrmIS0WUdpW0DYd4h3cpnZnX2jxf9wd/ZJ7x3wrp3fm6vXYpAzA6qQEbCwFk?= =?us-ascii?Q?J5+MkU/ksLqPECEklGj6wRKohRm91tUW8QBo8zsiKND6J7XUp5wfZ+sA5BWV?= =?us-ascii?Q?I1IiPZVt9xrEx3TEP1U1DGhSMke8EjdV1ul03FfQdBpN1xqKxMjri905X+bO?= =?us-ascii?Q?0Z6Gb5CNKKqFa8wtU8+qz7YhB1H/QRb0C4qnqKmhsM4Goky/twSQBIF6j2Tt?= =?us-ascii?Q?ioR7fxkr2cqtIuX5vvAMRtNwwAPIJOU82PqjItBAwjbzUlbhcR0TVVoWpOQp?= =?us-ascii?Q?bVavmV2LWNWtvIheliqDibE877F7nVTKoraEE4tygpgNSM+kiaX5jf8wNlbZ?= =?us-ascii?Q?QA4mJjVmT7WR1vtFVCwa5NwWQAWq1529BgZ6a2BONInrNoet+Sth7Db/coyK?= =?us-ascii?Q?I+wggCjMGKMGUAL2Aa5chU/CcP3T4WR4dxbNNNYBJcYumeq5TmXM7yRZiyqa?= =?us-ascii?Q?MollWrvQO8LhwLEUuRVluud7FekDcgZdUqmghq0krLjr+YGVaIz/REt35vRM?= =?us-ascii?Q?SWyeWlikyxX8Tq9IdC2caDgm36hEx3Cl+vWjgSOCFi9P/nJeRMbc+rocQr1b?= =?us-ascii?Q?dJ0b8bn6QxhtAhpYgEbEeu/Cx9/Zw22CW6uENn6l34kUrVhOTEHmn35GT11i?= =?us-ascii?Q?lFH3JeJQrpIA3UOf410BkJHmOASwJAwtbwwVP8tZysXa8y3nEdA2jFWCT40v?= =?us-ascii?Q?jlTGaielkt9cAbWKXO5SCwTB6zn4xGgIzfFIcqP4YPsZqnndgcuRXUgnWA8M?= =?us-ascii?Q?UDAfDPrD+xZGTsZGZGXZUEdrmXXwUt0IDOpoMGIvAP2hK9Kw52TDiLiyMpPW?= =?us-ascii?Q?sW7H1fQHLZEVvfqiP9s1WWge/NafUpiqt5CWnP/LfMIhdcF1v6VorBACpI3S?= =?us-ascii?Q?4501VZfMKZvRU/NCnJU10pH8WoK4ZvTXVRYSc1adHZqnmAYHeOk/tgduoWl7?= =?us-ascii?Q?Vmkzuywrdb8loIeo/aWYL1ADb5IQ7IO4Qks+xchLCgA9ydWzfbY2/LXeXTwU?= =?us-ascii?Q?lP1wnAWvNdbD2C+hh2P/TBcgzk71m123CEgh+ELC?= 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: 626670d7-99c5-4363-0daf-08db4d26a66d X-MS-Exchange-CrossTenant-originalarrivaltime: 05 May 2023 05:07:39.9096 (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: K4bCcBxzbZ923+y79g3VbSfwHXkBD5FGplGZSoC0rBrKFM1fckaAN8AQOvxUcqdbXiVkuxi6Kr57c8BYZffMGg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR11MB6444 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 Hi Maxime, > -----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 14/27] vhost: add helper for interrupt injection >=20 > Vhost-user uses eventfd to inject IRQs, but VDUSE uses > an ioctl. >=20 > This patch prepares vhost_vring_call_split() and > vhost_vring_call_packed() to support VDUSE by introducing > a new helper. >=20 > It also adds a new counter to for guest notification to for -> for? With this fixed: Reviewed-by: Chenbo Xia =20 > failures, which could happen in case of uninitialized call > file descriptor for example. >=20 > Signed-off-by: Maxime Coquelin > --- > lib/vhost/vhost.c | 6 +++++ > lib/vhost/vhost.h | 54 +++++++++++++++++++++++------------------- > lib/vhost/vhost_user.c | 10 ++++++++ > 3 files changed, 46 insertions(+), 24 deletions(-) >=20 > diff --git a/lib/vhost/vhost.c b/lib/vhost/vhost.c > index 790eb06b28..c07028f2b3 100644 > --- a/lib/vhost/vhost.c > +++ b/lib/vhost/vhost.c > @@ -44,6 +44,7 @@ static const struct vhost_vq_stats_name_off > vhost_vq_stat_strings[] =3D { > {"size_1024_1518_packets", offsetof(struct vhost_virtqueue, > stats.size_bins[6])}, > {"size_1519_max_packets", offsetof(struct vhost_virtqueue, > stats.size_bins[7])}, > {"guest_notifications", offsetof(struct vhost_virtqueue, > stats.guest_notifications)}, > + {"guest_notifications_error", offsetof(struct vhost_virtqueue, > stats.guest_notifications_error)}, > {"iotlb_hits", offsetof(struct vhost_virtqueue, > stats.iotlb_hits)}, > {"iotlb_misses", offsetof(struct vhost_virtqueue, > stats.iotlb_misses)}, > {"inflight_submitted", offsetof(struct vhost_virtqueue, > stats.inflight_submitted)}, > @@ -697,6 +698,11 @@ vhost_new_device(struct vhost_backend_ops *ops) > return -1; > } >=20 > + if (ops->inject_irq =3D=3D NULL) { > + VHOST_LOG_CONFIG("device", ERR, "missing IRQ injection backend > op.\n"); > + return -1; > + } > + > pthread_mutex_lock(&vhost_dev_lock); > for (i =3D 0; i < RTE_MAX_VHOST_DEVICE; i++) { > if (vhost_devices[i] =3D=3D NULL) > diff --git a/lib/vhost/vhost.h b/lib/vhost/vhost.h > index ee7640e901..8f0875b4e2 100644 > --- a/lib/vhost/vhost.h > +++ b/lib/vhost/vhost.h > @@ -90,16 +90,20 @@ > #endif >=20 > struct virtio_net; > +struct vhost_virtqueue; > + > typedef void (*vhost_iotlb_remove_notify)(uint64_t addr, uint64_t off, > uint64_t size); >=20 > typedef int (*vhost_iotlb_miss_cb)(struct virtio_net *dev, uint64_t iova= , > uint8_t perm); >=20 > +typedef int (*vhost_vring_inject_irq_cb)(struct virtio_net *dev, struct > vhost_virtqueue *vq); > /** > * Structure that contains backend-specific ops. > */ > struct vhost_backend_ops { > vhost_iotlb_remove_notify iotlb_remove_notify; > vhost_iotlb_miss_cb iotlb_miss; > + vhost_vring_inject_irq_cb inject_irq; > }; >=20 > /** > @@ -149,6 +153,7 @@ struct virtqueue_stats { > /* Size bins in array as RFC 2819, undersized [0], 64 [1], etc */ > uint64_t size_bins[8]; > uint64_t guest_notifications; > + uint64_t guest_notifications_error; > uint64_t iotlb_hits; > uint64_t iotlb_misses; > uint64_t inflight_submitted; > @@ -900,6 +905,24 @@ vhost_need_event(uint16_t event_idx, uint16_t new_id= x, > uint16_t old) > return (uint16_t)(new_idx - event_idx - 1) < (uint16_t)(new_idx - > old); > } >=20 > +static __rte_always_inline void > +vhost_vring_inject_irq(struct virtio_net *dev, struct vhost_virtqueue *v= q) > +{ > + int ret; > + > + ret =3D dev->backend_ops->inject_irq(dev, vq); > + if (ret) { > + if (dev->flags & VIRTIO_DEV_STATS_ENABLED) > + vq->stats.guest_notifications_error++; > + return; > + } > + > + if (dev->flags & VIRTIO_DEV_STATS_ENABLED) > + vq->stats.guest_notifications++; > + if (dev->notify_ops->guest_notified) > + dev->notify_ops->guest_notified(dev->vid); > +} > + > static __rte_always_inline void > vhost_vring_call_split(struct virtio_net *dev, struct vhost_virtqueue *v= q) > { > @@ -919,25 +942,13 @@ vhost_vring_call_split(struct virtio_net *dev, > struct vhost_virtqueue *vq) > "%s: used_event_idx=3D%d, old=3D%d, new=3D%d\n", > __func__, vhost_used_event(vq), old, new); >=20 > - if ((vhost_need_event(vhost_used_event(vq), new, old) || > - unlikely(!signalled_used_valid)) && > - vq->callfd >=3D 0) { > - eventfd_write(vq->callfd, (eventfd_t) 1); > - if (dev->flags & VIRTIO_DEV_STATS_ENABLED) > - vq->stats.guest_notifications++; > - if (dev->notify_ops->guest_notified) > - dev->notify_ops->guest_notified(dev->vid); > - } > + if (vhost_need_event(vhost_used_event(vq), new, old) || > + unlikely(!signalled_used_valid)) > + vhost_vring_inject_irq(dev, vq); > } else { > /* Kick the guest if necessary. */ > - if (!(vq->avail->flags & VRING_AVAIL_F_NO_INTERRUPT) > - && (vq->callfd >=3D 0)) { > - eventfd_write(vq->callfd, (eventfd_t)1); > - if (dev->flags & VIRTIO_DEV_STATS_ENABLED) > - vq->stats.guest_notifications++; > - if (dev->notify_ops->guest_notified) > - dev->notify_ops->guest_notified(dev->vid); > - } > + if (!(vq->avail->flags & VRING_AVAIL_F_NO_INTERRUPT)) > + vhost_vring_inject_irq(dev, vq); > } > } >=20 > @@ -988,13 +999,8 @@ vhost_vring_call_packed(struct virtio_net *dev, > struct vhost_virtqueue *vq) > if (vhost_need_event(off, new, old)) > kick =3D true; > kick: > - if (kick && vq->callfd >=3D 0) { > - eventfd_write(vq->callfd, (eventfd_t)1); > - if (dev->flags & VIRTIO_DEV_STATS_ENABLED) > - vq->stats.guest_notifications++; > - if (dev->notify_ops->guest_notified) > - dev->notify_ops->guest_notified(dev->vid); > - } > + if (kick) > + vhost_vring_inject_irq(dev, vq); > } >=20 > static __rte_always_inline void > diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c > index 6a9f32972a..2e4a9fdea4 100644 > --- a/lib/vhost/vhost_user.c > +++ b/lib/vhost/vhost_user.c > @@ -3465,8 +3465,18 @@ int rte_vhost_host_notifier_ctrl(int vid, uint16_t > qid, bool enable) > return ret; > } >=20 > +static int > +vhost_user_inject_irq(struct virtio_net *dev __rte_unused, struct > vhost_virtqueue *vq) > +{ > + if (vq->callfd < 0) > + return -1; > + > + return eventfd_write(vq->callfd, (eventfd_t)1); > +} > + > static struct vhost_backend_ops vhost_user_backend_ops =3D { > .iotlb_miss =3D vhost_user_iotlb_miss, > + .inject_irq =3D vhost_user_inject_irq, > }; >=20 > int > -- > 2.39.2