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 89C59A0547; Fri, 29 Oct 2021 16:38:37 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 64E604111F; Fri, 29 Oct 2021 16:38:37 +0200 (CEST) Received: from mail-io1-f49.google.com (mail-io1-f49.google.com [209.85.166.49]) by mails.dpdk.org (Postfix) with ESMTP id B0AF0410E1 for ; Fri, 29 Oct 2021 16:38:36 +0200 (CEST) Received: by mail-io1-f49.google.com with SMTP id p204so1146966iod.8 for ; Fri, 29 Oct 2021 07:38:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=Eic6qHDgFkankCw+UhD/BCl2efY6SWDS2cxsl2GXoVc=; b=TEjHao24nwnUTj34onjbrEdgmGdqwwIEQSbrEzc5FJ6wTsBFOnlba/ySFlNp6CLlZD DIxsbSLCKiqILtQSNIEFYFLsGb92YZ2k86ltSkmCEMb1eHmiPlCjBRAg9U0ho3ZhGblI nPiU14K7xKYm5a9nQGCs9P42r/TVxwa4AIJUJrB97FHvo9EMmeZ/PeVsI03/eDdSyd+b LVuIm7BGZBawCGJXiEnyUr1i05saGYBno52Md5SRhm/ZNhSunUpL4Sshwjq5JgVA6U9S L+6yL8Nvxwq8uj0ZwjBPqxBVohaAGLfOdCGSBWL6s4Lmz42un0RmKQLnohgMUUdXMNHt YaLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=Eic6qHDgFkankCw+UhD/BCl2efY6SWDS2cxsl2GXoVc=; b=FosWwWl8ofmyj+YZcZCV7yYg4kabza46pFGmpt2Oy9PdZ8qKHhrYQC7oTvE8qfwV0X fVZYWQRBw9i2ksCITOomzVuzfh7fU70FczEjS4TS4XwPD8KL5+QUTeq16jXlTMd7T4fJ UTcGVnPBFsWaUfMhzxdRR3DjQUp0jLLHRevRPtOo9K7+BTM77zjpqALN+Me+aag7V6/l Q0UkUFGDQF2blpauo9syETPBeCdjmYlrVE8rensNnJ7v9rMnXJSI96TG/Ha5JIM4rW8Q k35k5qqc+b2HHp/S874A7F51DKyPsT+T2l3rUlNaoZMDl1FahYEegbO0QYdz75PCaXJh 12fA== X-Gm-Message-State: AOAM5334AzYYZcQ02A9R8aDFB9f1k1Sct5HZpZk/Yu020hKi+9m2wAN5 K5o3a5axjJpn4b9+JVC+W+DDHcypl6GwuFszQwo= X-Google-Smtp-Source: ABdhPJwkSaLDT/FFlH8M5EUErXqSirL4JCG14mnr8EswIq17pBat4r6eEt8OYgKHMvEsTtVZWVP/SdKbMkLmj36B/8Y= X-Received: by 2002:a05:6602:14d2:: with SMTP id b18mr8245550iow.123.1635518316028; Fri, 29 Oct 2021 07:38:36 -0700 (PDT) MIME-Version: 1.0 References: <3e8c8bab-783d-d132-a836-51bd4d5533bb@ericsson.com> <20211026173148.19399-1-mattias.ronnblom@ericsson.com> In-Reply-To: <20211026173148.19399-1-mattias.ronnblom@ericsson.com> From: Jerin Jacob Date: Fri, 29 Oct 2021 20:08:09 +0530 Message-ID: To: =?UTF-8?Q?Mattias_R=C3=B6nnblom?= , "Richardson, Bruce" Cc: Jerin Jacob , "Gujjar, Abhinandan S" , Erik Gabriel Carrillo , "Jayatheerthan, Jay" , dpdk-dev Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Subject: Re: [dpdk-dev] [PATCH 1/3] eventdev: allow for event devices requiring maintenance 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 Sender: "dev" On Tue, Oct 26, 2021 at 11:02 PM Mattias R=C3=B6nnblom wrote: > > Extend Eventdev API to allow for event devices which require various > forms of internal processing to happen, even when events are not > enqueued to or dequeued from a port. > > PATCH v1: > - Adapt to the move of fastpath function pointers out of > rte_eventdev struct > - Attempt to clarify how often the application is expected to > call rte_event_maintain() > - Add trace point > RFC v2: > - Change rte_event_maintain() return type to be consistent > with the documentation. > - Remove unused typedef from eventdev_pmd.h. > > Signed-off-by: Mattias R=C3=B6nnblom > Tested-by: Richard Eklycke > Tested-by: Liron Himi > --- > > +/** > + * Maintain an event device. > + * > + * This function is only relevant for event devices which has the > + * RTE_EVENT_DEV_CAP_REQUIRES_MAINT flag set. Such devices require the > + * application to call rte_event_maintain() on a port during periods > + * which it is neither enqueuing nor dequeuing events from that > + * port. # We need to add "by the same core". Right? As other core such as service core can not call rte_event_maintain() # Also, Incase of Adapters enqueue() happens, right? If so, either above text is not correct. # @Erik Gabriel Carrillo @Jayatheerthan, Jay @Gujjar, Abhinandan S Please review 3/3 patch on adapter change. Let me know you folks are OK with change or not or need more time to analyz= e. If it need only for the adapter subsystem then can we make it an internal API between DSW and adapters? + rte_event_maintain() is a low-overhead function and should be > + * called at a high rate (e.g., in the applications poll loop). > + * > + * No port may be left unmaintained. > + * > + * rte_event_maintain() may be called on event devices which haven't > + * set RTE_EVENT_DEV_CAP_REQUIRES_MAINT flag, in which case it is a > + * no-operation. > + * > + * @param dev_id > + * The identifier of the device. > + * @param port_id > + * The identifier of the event port. > + * @return > + * - 0 on success. > + * - -EINVAL if *dev_id* or *port_id* is invalid > + * > + * @see RTE_EVENT_DEV_CAP_REQUIRES_MAINT > + */ > +static inline int > +rte_event_maintain(uint8_t dev_id, uint8_t port_id) > +{ > + const struct rte_event_fp_ops *fp_ops; > + void *port; > + > + fp_ops =3D &rte_event_fp_ops[dev_id]; > + port =3D fp_ops->data[port_id]; > +#ifdef RTE_LIBRTE_EVENTDEV_DEBUG > + if (dev_id >=3D RTE_EVENT_MAX_DEVS || > + port_id >=3D RTE_EVENT_MAX_PORTS_PER_DEV) { > + rte_errno =3D EINVAL; > + return 0; > + } > + > + if (port =3D=3D NULL) { > + rte_errno =3D EINVAL; > + return 0; > + } > +#endif > + rte_eventdev_trace_maintain(dev_id, port_id); > + > + if (fp_ops->maintain !=3D NULL) > + fp_ops->maintain(port); > + > + return 0; > +} > + > #ifdef __cplusplus > } > #endif > diff --git a/lib/eventdev/rte_eventdev_core.h b/lib/eventdev/rte_eventdev= _core.h > index 61d5ebdc44..61fa65cab3 100644 > --- a/lib/eventdev/rte_eventdev_core.h > +++ b/lib/eventdev/rte_eventdev_core.h > @@ -29,6 +29,9 @@ typedef uint16_t (*event_dequeue_burst_t)(void *port, s= truct rte_event ev[], > uint64_t timeout_ticks); > /**< @internal Dequeue burst of events from port of a device */ > > +typedef void (*event_maintain_t)(void *port); > +/**< @internal Maintains a port */ > + > typedef uint16_t (*event_tx_adapter_enqueue_t)(void *port, > struct rte_event ev[], > uint16_t nb_events); > @@ -54,6 +57,8 @@ struct rte_event_fp_ops { > /**< PMD dequeue function. */ > event_dequeue_burst_t dequeue_burst; > /**< PMD dequeue burst function. */ > + event_maintain_t maintain; > + /**< PMD port maintenance function. */ > event_tx_adapter_enqueue_t txa_enqueue; > /**< PMD Tx adapter enqueue function. */ > event_tx_adapter_enqueue_t txa_enqueue_same_dest; > diff --git a/lib/eventdev/rte_eventdev_trace_fp.h b/lib/eventdev/rte_even= tdev_trace_fp.h > index 5639e0b83a..c5a79a14d8 100644 > --- a/lib/eventdev/rte_eventdev_trace_fp.h > +++ b/lib/eventdev/rte_eventdev_trace_fp.h > @@ -38,6 +38,13 @@ RTE_TRACE_POINT_FP( > rte_trace_point_emit_ptr(enq_mode_cb); > ) > > +RTE_TRACE_POINT_FP( > + rte_eventdev_trace_maintain, > + RTE_TRACE_POINT_ARGS(uint8_t dev_id, uint8_t port_id), > + rte_trace_point_emit_u8(dev_id); > + rte_trace_point_emit_u8(port_id); > +) > + > RTE_TRACE_POINT_FP( > rte_eventdev_trace_eth_tx_adapter_enqueue, > RTE_TRACE_POINT_ARGS(uint8_t dev_id, uint8_t port_id, void *ev_ta= ble, > -- > 2.25.1 >