From: Jerin Jacob <jerinjacobk@gmail.com> To: Chengwen Feng <fengchengwen@huawei.com> Cc: "Thomas Monjalon" <thomas@monjalon.net>, "Ferruh Yigit" <ferruh.yigit@intel.com>, "Richardson, Bruce" <bruce.richardson@intel.com>, "Jerin Jacob" <jerinj@marvell.com>, "Andrew Rybchenko" <andrew.rybchenko@oktetlabs.ru>, dpdk-dev <dev@dpdk.org>, "Morten Brørup" <mb@smartsharesystems.com>, "Nipun Gupta" <nipun.gupta@nxp.com>, "Hemant Agrawal" <hemant.agrawal@nxp.com>, "Maxime Coquelin" <maxime.coquelin@redhat.com>, "Honnappa Nagarahalli" <honnappa.nagarahalli@arm.com>, "David Marchand" <david.marchand@redhat.com>, "Satananda Burla" <sburla@marvell.com>, "Prasun Kapoor" <pkapoor@marvell.com>, "Ananyev, Konstantin" <konstantin.ananyev@intel.com> Subject: Re: [dpdk-dev] [PATCH v5] dmadev: introduce DMA device library Date: Fri, 16 Jul 2021 18:50:42 +0530 [thread overview] Message-ID: <CALBAE1O86P_--WbpWeSP4nv_G6o_68O82awr6rnMZQ_vtPFP+Q@mail.gmail.com> (raw) In-Reply-To: <1626403535-40051-1-git-send-email-fengchengwen@huawei.com> On Fri, Jul 16, 2021 at 8:19 AM Chengwen Feng <fengchengwen@huawei.com> wrote: > > This patch introduce 'dmadevice' which is a generic type of DMA > device. > > The APIs of dmadev library exposes some generic operations which can > enable configuration and I/O with the DMA devices. > > Signed-off-by: Chengwen Feng <fengchengwen@huawei.com> > --- > v5: > * add doxy-api-* file modify. > * use RTE_LOG_REGISTER_DEFAULT. > * fix typo. > * resolve some incorrect comments. > * fix some doxgen problem. > * fix version.map still hold rte_dmadev_completed_fails. > v4: > * replace xxx_complete_fails with xxx_completed_status. > * add SILENT capability, also a silent_mode in rte_dmadev_conf. > * add op_flag_llc for performance. > * rename dmadev_xxx_t to rte_dmadev_xxx_t to avoid namespace conflict. > * delete filed 'enqueued_count' from rte_dmadev_stats. > * make rte_dmadev hold 'dev_private' filed. > * add RTE_DMA_STATUS_NOT_ATTEMPED status code. > * rename RTE_DMA_STATUS_ACTIVE_DROP to RTE_DMA_STATUS_USER_ABORT. > * rename rte_dma_sg(e) to rte_dmadev_sg(e) to make sure all struct > prefix with rte_dmadev. > * put the comment afterwards. > * fix some doxgen problem. > * delete macro RTE_DMADEV_VALID_DEV_ID_OR_RET and > RTE_DMADEV_PTR_OR_ERR_RET. > * replace strlcpy with rte_strscpy. > * other minor modifications from review comment. > v3: > * rm reset and fill_sg ops. > * rm MT-safe capabilities. > * add submit flag. > * redefine rte_dma_sg to implement asymmetric copy. > * delete some reserved field for future use. > * rearrangement rte_dmadev/rte_dmadev_data struct. > * refresh rte_dmadev.h copyright. > * update vchan setup parameter. > * modified some inappropriate descriptions. > * arrange version.map alphabetically. > * other minor modifications from review comment. > --- > MAINTAINERS | 4 + > config/rte_config.h | 3 + > doc/api/doxy-api-index.md | 1 + > doc/api/doxy-api.conf.in | 1 + > lib/dmadev/meson.build | 7 + > lib/dmadev/rte_dmadev.c | 539 ++++++++++++++++++++++ > lib/dmadev/rte_dmadev.h | 1028 ++++++++++++++++++++++++++++++++++++++++++ > lib/dmadev/rte_dmadev_core.h | 182 ++++++++ > lib/dmadev/rte_dmadev_pmd.h | 72 +++ > lib/dmadev/version.map | 37 ++ > lib/meson.build | 1 + > 11 files changed, 1875 insertions(+) > create mode 100644 lib/dmadev/meson.build > create mode 100644 lib/dmadev/rte_dmadev.c > create mode 100644 lib/dmadev/rte_dmadev.h > create mode 100644 lib/dmadev/rte_dmadev_core.h > create mode 100644 lib/dmadev/rte_dmadev_pmd.h > create mode 100644 lib/dmadev/version.map > > diff --git a/MAINTAINERS b/MAINTAINERS > index af2a91d..e01a07f 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -495,6 +495,10 @@ F: drivers/raw/skeleton/ > F: app/test/test_rawdev.c > F: doc/guides/prog_guide/rawdev.rst > > +DMA device API - EXPERIMENTAL > +M: Chengwen Feng <fengchengwen@huawei.com> > +F: lib/dmadev/ > + > @@ -0,0 +1,1028 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(c) 2021 HiSilicon Limited. > + * Copyright(c) 2021 Intel Corporation. > + * Copyright(c) 2021 Marvell International Ltd. > + * Copyright(c) 2021 SmartShare Systems. > + */ > + > +#ifndef _RTE_DMADEV_H_ > +#define _RTE_DMADEV_H_ > + > +/** > + * @file rte_dmadev.h > + * > + * RTE DMA (Direct Memory Access) device APIs. > + * > + * The DMA framework is built on the following model: > + * > + * --------------- --------------- --------------- > + * | virtual DMA | | virtual DMA | | virtual DMA | > + * | channel | | channel | | channel | > + * --------------- --------------- --------------- > + * | | | > + * ------------------ | > + * | | > + * ------------ ------------ > + * | dmadev | | dmadev | > + * ------------ ------------ > + * | | > + * ------------------ ------------------ > + * | HW-DMA-channel | | HW-DMA-channel | > + * ------------------ ------------------ > + * | | > + * -------------------------------- > + * | > + * --------------------- > + * | HW-DMA-Controller | > + * --------------------- > + * > + * The DMA controller could have multiple HW-DMA-channels (aka. HW-DMA-queues), > + * each HW-DMA-channel should be represented by a dmadev. > + * > + * The dmadev could create multiple virtual DMA channel, each virtual DMA channels? > + * channel represents a different transfer context. The DMA operation request > + * must be submitted to the virtual DMA channel. e.g. Application could create > + * virtual DMA channel 0 for memory-to-memory transfer scenario, and create > + * virtual DMA channel 1 for memory-to-device transfer scenario. > + * > + * The dmadev are dynamically allocated by rte_dmadev_pmd_allocate() during the > + * PCI/SoC device probing phase performed at EAL initialization time. And could > + * be released by rte_dmadev_pmd_release() during the PCI/SoC device removing > + * phase. > + * > + * This framework uses 'uint16_t dev_id' as the device identifier of a dmadev, > + * and 'uint16_t vchan' as the virtual DMA channel identifier in one dmadev. > + * > + * The functions exported by the dmadev API to setup a device designated by its > + * device identifier must be invoked in the following order: > + * - rte_dmadev_configure() > + * - rte_dmadev_vchan_setup() > + * - rte_dmadev_start() > + * > + * Then, the application can invoke dataplane APIs to process jobs. > + * > + * If the application wants to change the configuration (i.e. invoke > + * rte_dmadev_configure()), it must invoke rte_dmadev_stop() first to stop the > + * device and then do the reconfiguration before invoking rte_dmadev_start() > + * again. The dataplane APIs should not be invoked when the device is stopped. > + * > + * Finally, an application can close a dmadev by invoking the > + * rte_dmadev_close() function. > + * > + * The dataplane APIs include two parts: > + * The first part is the submission of operation requests: > + * - rte_dmadev_copy() > + * - rte_dmadev_copy_sg() > + * - rte_dmadev_fill() > + * - rte_dmadev_submit() > + * > + * These APIs could work with different virtual DMA channels which have > + * different contexts. > + * > + * The first three APIs are used to submit the operation request to the virtual > + * DMA channel, if the submission is successful, a uint16_t ring_idx is > + * returned, otherwise a negative number is returned. > + * > + * The last API was use to issue doorbell to hardware, and also there are flags use->used? > + * (@see RTE_DMA_OP_FLAG_SUBMIT) parameter of the first three APIs could do the > + * same work. > + * > + * The second part is to obtain the result of requests: > + * - rte_dmadev_completed() > + * - return the number of operation requests completed successfully. > + * - rte_dmadev_completed_status() > + * - return the number of operation requests completed. > + * > + * About the ring_idx which enqueue APIs (e.g. rte_dmadev_copy() > + * rte_dmadev_fill()) returned, the rules are as follows: > + * - ring_idx for each virtual DMA channel are independent. > + * - For a virtual DMA channel, the ring_idx is monotonically incremented, > + * when it reach UINT16_MAX, it wraps back to zero. > + * - This ring_idx can be used by applications to track per-operation > + * metadata in an application-defined circular ring. > + * - The initial ring_idx of a virtual DMA channel is zero, after the > + * device is stopped, the ring_idx needs to be reset to zero. > + * > + * One example: > + * - step-1: start one dmadev > + * - step-2: enqueue a copy operation, the ring_idx return is 0 > + * - step-3: enqueue a copy operation again, the ring_idx return is 1 > + * - ... > + * - step-101: stop the dmadev > + * - step-102: start the dmadev > + * - step-103: enqueue a copy operation, the cookie return is 0 > + * - ... > + * - step-x+0: enqueue a fill operation, the ring_idx return is 65535 > + * - step-x+1: enqueue a copy operation, the ring_idx return is 0 > + * - ... > + * > + * By default, all the functions of the dmadev API exported by a PMD are > + * lock-free functions which assume to not be invoked in parallel on different > + * logical cores to work on the same target object. should we add, object like dev_id, vchan_id etc. Upto you. IMO, We should tell about "silent" mode here and it is the implication on rte_dmadev_completed_* as "silent" changes above scheme in the completion side. > +/** > + * A structure used to retrieve the information of an DMA device. a DMA? > + * A structure used to descript DMA port parameters. > + */ > +struct rte_dmadev_port_param { > + enum rte_dmadev_port_type port_type; /**< The device port type. */ > + union { > + /** For PCIE port: > + * > + * The following model show SoC's PCIE module connects to shows? > + * multiple PCIE hosts and multiple endpoints. The PCIE module > + * has an integrate DMA controller. > + * If the DMA wants to access the memory of host A, it can be > + * initiated by PF1 in core0, or by VF0 of PF0 in core0. > + * > + * System Bus > + * | ----------PCIE module---------- > + * | Bus > + * | Interface > + * | ----- ------------------ > + * | | | | PCIE Core0 | > + * | | | | | ----------- > + * | | | | PF-0 -- VF-0 | | Host A | > + * | | |--------| |- VF-1 |--------| Root | > + * | | | | PF-1 | | Complex | > + * | | | | PF-2 | ----------- > + * | | | ------------------ > + * | | | > + * | | | ------------------ > + * | | | | PCIE Core1 | > + * | | | | | ----------- > + * | | | | PF-0 -- VF-0 | | Host B | > + * |-----| |--------| PF-1 -- VF-0 |--------| Root | > + * | | | | |- VF-1 | | Complex | > + * | | | | PF-2 | ----------- > + * | | | ------------------ > + * | | | > + * | | | ------------------ > + * | |DMA| | | ------ > + * | | | | |--------| EP | > + * | | |--------| PCIE Core2 | ------ > + * | | | | | ------ > + * | | | | |--------| EP | > + * | | | | | ------ > + * | ----- ------------------ > + * > + * The following structure is used to describe the above access > + * port. > + * > + * @note If some fields are not supported by hardware, set > + * these fields to zero. And also there are no capabilities > + * defined for this, it is the duty of the application to set > + * the correct parameters. Without getting, capabilities application can not set zero. I would suggest rewording something like. @note If some fields can not be supported by the hardware/driver, then the driver ignores those fields. Please check driver-specific documentation for limitations and capablites. * @note If some fields are not supported by hardware, set > + * these fields to zero. And also there are no capabilities > + * defined for this, it is the duty of the application to set > + * the correct parameters. > + */ > + struct { > + uint64_t coreid : 4; /**< PCIE core id used. */ > + uint64_t pfid : 8; /**< PF id used. */ > + uint64_t vfen : 1; /**< VF enable bit. */ > + uint64_t vfid : 16; /**< VF id used. */ > + uint64_t pasid : 20; > + /**< The pasid filed in TLP packet. */ > + uint64_t attr : 3; > + /**< The attributes filed in TLP packet. */ > + uint64_t ph : 2; > + /**< The processing hint filed in TLP packet. */ > + uint64_t st : 16; > + /**< The steering tag filed in TLP packet. */ > + } pcie; > + }; > + uint64_t reserved[2]; /**< Reserved for future fields. */ > +}; > + > +/** > + * A structure used to configure a virtual DMA channel. > + */ > +struct rte_dmadev_vchan_conf { > + uint8_t direction; > + /**< Set of supported transfer directions Transfer direction > + * @see RTE_DMA_DIR_MEM_TO_MEM > + * @see RTE_DMA_DIR_MEM_TO_DEV > + * @see RTE_DMA_DIR_DEV_TO_MEM > + * @see RTE_DMA_DIR_DEV_TO_DEV > + */ > + > + /** Number of descriptor for the virtual DMA channel */ > + uint16_t nb_desc; > + /** 1) Used to describes the port parameter in the device-to-memory > + * transfer scenario. > + * 2) Used to describes the source port parameter in the > + * device-to-device transfer scenario. > + * @see struct rte_dmadev_port_param > + */ > + struct rte_dmadev_port_param src_port; > + /** 1) Used to describes the port parameter in the memory-to-device > + * transfer scenario. > + * 2) Used to describes the destination port parameter in the > + * device-to-device transfer scenario. > + * @see struct rte_dmadev_port_param > + */ > + struct rte_dmadev_port_param dst_port; > +}; > + > +/** > + * @warning > + * @b EXPERIMENTAL: this API may change without prior notice. > + * > + * Allocate and set up a virtual DMA channel. > + * > + * @param dev_id > + * The identifier of the device. > + * @param conf > + * The virtual DMA channel configuration structure encapsulated into > + * rte_dmadev_vchan_conf object. > + * > + * @return > + * - >=0: Allocate success, it is the virtual DMA channel id. This value must > + * be less than the field 'max_vchans' of struct rte_dmadev_conf > + * which configured by rte_dmadev_configure(). > + * - <0: Error code returned by the driver virtual channel setup function. > + */ > +__rte_experimental > +int > +rte_dmadev_vchan_setup(uint16_t dev_id, > + const struct rte_dmadev_vchan_conf *conf); > + > +/** > + * @warning > + * @b EXPERIMENTAL: this API may change without prior notice. > + * > + * Release a virtual DMA channel. > + * > + * @param dev_id > + * The identifier of the device. > + * @param vchan > + * The identifier of virtual DMA channel which return by vchan setup. > + * > + * @return > + * - =0: Successfully release the virtual DMA channel. > + * - <0: Error code returned by the driver virtual channel release function. > + */ > +__rte_experimental > +int > +rte_dmadev_vchan_release(uint16_t dev_id, uint16_t vchan); Commented on another thread. > + > +/** > + * rte_dmadev_stats - running statistics. > + */ > +struct rte_dmadev_stats { > + uint64_t submitted_count; > + /**< Count of operations which were submitted to hardware. */ > + uint64_t completed_fail_count; > + /**< Count of operations which failed to complete. */ > + uint64_t completed_count; > + /**< Count of operations which successfully complete. */ > +}; > + > +#define RTE_DMADEV_ALL_VCHAN 0xFFFFu Commented on another thread. No strong opinion. > +/** > + * @warning > + * @b EXPERIMENTAL: this API may change without prior notice. > + * > + * Enqueue a copy operation onto the virtual DMA channel. > + * > + * This queues up a copy operation to be performed by hardware, if the 'flags' > + * parameter contains RTE_DMA_OP_FLAG_SUBMIT then trigger hardware to begin > + * this operation, otherwise do not trigger hardware. hardware -> doorbell. > + * > + * @param dev_id > + * The identifier of the device. > + * @param vchan > + * The identifier of virtual DMA channel. > + * @param src > + * The address of the source buffer. > + * @param dst > + * The address of the destination buffer. > + * @param length > + * The length of the data to be copied. > + * @param flags > + * An flags for this operation. > + * @see RTE_DMA_OP_FLAG_* > + * > + * @return > + * - 0..UINT16_MAX: index of enqueued copy job. > + * - <0: Error code returned by the driver copy function. > + */ > +__rte_experimental > +static inline int > +rte_dmadev_copy(uint16_t dev_id, uint16_t vchan, rte_iova_t src, rte_iova_t dst, > + uint32_t length, uint64_t flags) > +{ > + struct rte_dmadev *dev = &rte_dmadevices[dev_id]; > + > +#ifdef RTE_DMADEV_DEBUG > + if (!rte_dmadev_is_valid_dev(dev_id) || > + vchan >= dev->data->dev_conf.max_vchans) > + return -EINVAL; > + RTE_FUNC_PTR_OR_ERR_RET(*dev->copy, -ENOTSUP); > +#endif > + > + return (*dev->copy)(dev, vchan, src, dst, length, flags); > +} > + > +/** > + * @warning > + * @b EXPERIMENTAL: this API may change without prior notice. > + * > + * Enqueue a scatter list copy operation onto the virtual DMA channel. > + * > + * This queues up a scatter list copy operation to be performed by hardware, if > + * the 'flags' parameter contains RTE_DMA_OP_FLAG_SUBMIT then trigger hardware > + * to begin this operation, otherwise do not trigger hardware. harware -> doorbell > + * > + * @param dev_id > + * The identifier of the device. > + * @param vchan > + * The identifier of virtual DMA channel. > + * @param sg > + * The pointer of scatterlist. > + * @param flags > + * An flags for this operation. > + * @see RTE_DMA_OP_FLAG_* > + * > + * @return > + * - 0..UINT16_MAX: index of enqueued copy scatterlist job. > + * - <0: Error code returned by the driver copy scatterlist function. > + */ > +__rte_experimental > +static inline int > +rte_dmadev_copy_sg(uint16_t dev_id, uint16_t vchan, > + const struct rte_dmadev_sg *sg, Sent comment in another thread. > + uint64_t flags) > +{ > + struct rte_dmadev *dev = &rte_dmadevices[dev_id]; > + > +#ifdef RTE_DMADEV_DEBUG > + if (!rte_dmadev_is_valid_dev(dev_id) || > + vchan >= dev->data->dev_conf.max_vchans || > + sg == NULL || sg->src == NULL || sg->dst == NULL || > + sg->nb_src == 0 || sg->nb_dst == 0) > + return -EINVAL; > + RTE_FUNC_PTR_OR_ERR_RET(*dev->copy_sg, -ENOTSUP); > +#endif > + > + return (*dev->copy_sg)(dev, vchan, sg, flags); > +} > + > +/** > + * @warning > + * @b EXPERIMENTAL: this API may change without prior notice. > + * > + * Enqueue a fill operation onto the virtual DMA channel. > + * > + * This queues up a fill operation to be performed by hardware, if the 'flags' > + * parameter contains RTE_DMA_OP_FLAG_SUBMIT then trigger hardware to begin > + * this operation, otherwise do not trigger hardware. hardware -> doorbell. > + * > + * @param dev_id > + * The identifier of the device. > + * @param vchan > + * The identifier of virtual DMA channel. > + * @param pattern > + * The pattern to populate the destination buffer with. > + * @param dst > + * The address of the destination buffer. > + * @param length > + * The length of the destination buffer. > + * @param flags > + * An flags for this operation. > + * @see RTE_DMA_OP_FLAG_* > + * > + * @return > + * - 0..UINT16_MAX: index of enqueued fill job. > + * - <0: Error code returned by the driver fill function. > + */ > +__rte_experimental > +static inline int > +rte_dmadev_fill(uint16_t dev_id, uint16_t vchan, uint64_t pattern, > + rte_iova_t dst, uint32_t length, uint64_t flags) > +{ > + struct rte_dmadev *dev = &rte_dmadevices[dev_id]; > + > +#ifdef RTE_DMADEV_DEBUG > + if (!rte_dmadev_is_valid_dev(dev_id) || > + vchan >= dev->data->dev_conf.max_vchans) > + return -EINVAL; > + RTE_FUNC_PTR_OR_ERR_RET(*dev->fill, -ENOTSUP); > +#endif > + > + return (*dev->fill)(dev, vchan, pattern, dst, length, flags); > +} > + > +/** > + * @warning > + * @b EXPERIMENTAL: this API may change without prior notice. > + * > + * Trigger hardware to begin performing enqueued operations. > + * > + * This API is used to write the "doorbell" to the hardware to trigger it > + * to begin the operations previously enqueued by rte_dmadev_copy/fill(). > + * > + * @param dev_id > + * The identifier of the device. > + * @param vchan > + * The identifier of virtual DMA channel. > + * > + * @return > + * - =0: Successfully trigger hardware. > + * - <0: Failure to trigger hardware. > + */ > +__rte_experimental > +static inline int > +rte_dmadev_submit(uint16_t dev_id, uint16_t vchan) > +{ > + struct rte_dmadev *dev = &rte_dmadevices[dev_id]; > + > +#ifdef RTE_DMADEV_DEBUG > + if (!rte_dmadev_is_valid_dev(dev_id) || > + vchan >= dev->data->dev_conf.max_vchans) > + return -EINVAL; > + RTE_FUNC_PTR_OR_ERR_RET(*dev->submit, -ENOTSUP); > +#endif > + > + return (*dev->submit)(dev, vchan); > +} > + > +/** > + * @warning > + * @b EXPERIMENTAL: this API may change without prior notice. > + * > + * Returns the number of operations that have been successfully completed. > + * > + * @param dev_id > + * The identifier of the device. > + * @param vchan > + * The identifier of virtual DMA channel. > + * @param nb_cpls > + * The maximum number of completed operations that can be processed. > + * @param[out] last_idx > + * The last completed operation's index. > + * If not required, NULL can be passed in. > + * @param[out] has_error > + * Indicates if there are transfer error. > + * If not required, NULL can be passed in. > + * > + * @return > + * The number of operations that successfully completed. This return value > + * must be less than or equal to the value of nb_cpls. > + */ > +__rte_experimental > +static inline uint16_t > +rte_dmadev_completed(uint16_t dev_id, uint16_t vchan, const uint16_t nb_cpls, > + uint16_t *last_idx, bool *has_error) > +{ > + struct rte_dmadev *dev = &rte_dmadevices[dev_id]; > + uint16_t idx; > + bool err; > + > +#ifdef RTE_DMADEV_DEBUG > + if (!rte_dmadev_is_valid_dev(dev_id) || > + vchan >= dev->data->dev_conf.max_vchans || > + nb_cpls == 0) > + return 0; > + RTE_FUNC_PTR_OR_ERR_RET(*dev->completed, 0); > +#endif > + > + /* Ensure the pointer values are non-null to simplify drivers. > + * In most cases these should be compile time evaluated, since this is > + * an inline function. > + * - If NULL is explicitly passed as parameter, then compiler knows the > + * value is NULL > + * - If address of local variable is passed as parameter, then compiler > + * can know it's non-NULL. > + */ > + if (last_idx == NULL) > + last_idx = &idx; > + if (has_error == NULL) > + has_error = &err; > + > + *has_error = false; > + return (*dev->completed)(dev, vchan, nb_cpls, last_idx, has_error); > +} > + > +/** > + * @warning > + * @b EXPERIMENTAL: this API may change without prior notice. > + * > + * Returns the number of operations that have been completed, and the > + * operations result may succeed or fail. > + * > + * @param dev_id > + * The identifier of the device. > + * @param vchan > + * The identifier of virtual DMA channel. > + * @param nb_cpls > + * Indicates the size of status array. > + * @param[out] last_idx > + * The last completed operation's index. > + * If not required, NULL can be passed in. > + * @param[out] status > + * The error code of operations that completed. > + * @see enum rte_dma_status_code > + * > + * @return > + * The number of operations that completed. This return value must be less > + * than or equal to the value of nb_cpls. > + */ > +__rte_experimental > +static inline uint16_t > +rte_dmadev_completed_status(uint16_t dev_id, uint16_t vchan, > + const uint16_t nb_cpls, uint16_t *last_idx, > + enum rte_dma_status_code *status) > +{ > + struct rte_dmadev *dev = &rte_dmadevices[dev_id]; > + uint16_t idx; > + > +#ifdef RTE_DMADEV_DEBUG > + if (!rte_dmadev_is_valid_dev(dev_id) || > + vchan >= dev->data->dev_conf.max_vchans || > + nb_cpls == 0 || status == NULL) > + return 0; > + RTE_FUNC_PTR_OR_ERR_RET(*dev->completed_status, 0); > +#endif > + > + if (last_idx == NULL) > + last_idx = &idx; > + > + return (*dev->completed_status)(dev, vchan, nb_cpls, last_idx, status); > +} > + > +#ifdef __cplusplus > +} > +#endif > + Thanks for v5
next prev parent reply other threads:[~2021-07-16 13:21 UTC|newest] Thread overview: 339+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-07-02 13:18 [dpdk-dev] [PATCH] " Chengwen Feng 2021-07-02 13:59 ` Bruce Richardson 2021-07-04 9:30 ` Jerin Jacob 2021-07-05 10:52 ` Bruce Richardson 2021-07-05 11:12 ` Morten Brørup 2021-07-05 13:44 ` Bruce Richardson 2021-07-05 15:55 ` Jerin Jacob 2021-07-05 17:16 ` Bruce Richardson 2021-07-07 8:08 ` Jerin Jacob 2021-07-07 8:35 ` Bruce Richardson 2021-07-07 10:34 ` Jerin Jacob 2021-07-07 11:01 ` Bruce Richardson 2021-07-08 3:11 ` fengchengwen 2021-07-08 18:35 ` Jerin Jacob 2021-07-09 9:14 ` Bruce Richardson 2021-07-11 7:14 ` Jerin Jacob 2021-07-12 7:01 ` Morten Brørup 2021-07-12 7:59 ` Jerin Jacob 2021-07-06 8:20 ` fengchengwen 2021-07-06 9:27 ` Bruce Richardson 2021-07-06 3:01 ` fengchengwen 2021-07-06 10:01 ` Bruce Richardson 2021-07-04 14:57 ` Andrew Rybchenko 2021-07-06 3:56 ` fengchengwen 2021-07-06 10:02 ` Bruce Richardson 2021-07-04 15:21 ` Matan Azrad 2021-07-06 6:25 ` fengchengwen 2021-07-06 6:50 ` Matan Azrad 2021-07-06 9:08 ` fengchengwen 2021-07-06 9:17 ` Matan Azrad 2021-07-06 20:28 ` [dpdk-dev] [RFC UPDATE PATCH 0/9] dmadev rfc suggested updates Bruce Richardson 2021-07-06 20:28 ` [dpdk-dev] [RFC UPDATE PATCH 1/9] dmadev: add missing exports Bruce Richardson 2021-07-07 8:26 ` David Marchand 2021-07-07 8:36 ` Bruce Richardson 2021-07-07 8:57 ` David Marchand 2021-07-06 20:28 ` [dpdk-dev] [RFC UPDATE PATCH 2/9] dmadev: change virtual addresses to IOVA Bruce Richardson 2021-07-06 20:28 ` [dpdk-dev] [RFC UPDATE PATCH 3/9] dmadev: add dump function Bruce Richardson 2021-07-06 20:28 ` [dpdk-dev] [RFC UPDATE PATCH 4/9] dmadev: remove xstats functions Bruce Richardson 2021-07-06 20:28 ` [dpdk-dev] [RFC UPDATE PATCH 5/9] dmadev: drop cookie typedef Bruce Richardson 2021-07-06 20:28 ` [dpdk-dev] [RFC UPDATE PATCH 6/9] dmadev: allow NULL parameters to completed ops call Bruce Richardson 2021-07-06 20:28 ` [dpdk-dev] [RFC UPDATE PATCH 7/9] dmadev: stats structure updates Bruce Richardson 2021-07-06 20:28 ` [dpdk-dev] [RFC UPDATE PATCH 8/9] drivers: add dma driver category Bruce Richardson 2021-07-06 20:28 ` [dpdk-dev] [RFC UPDATE PATCH 9/9] app/test: add basic dmadev unit test Bruce Richardson 2021-07-07 3:16 ` [dpdk-dev] [RFC UPDATE PATCH 0/9] dmadev rfc suggested updates fengchengwen 2021-07-07 8:11 ` Bruce Richardson 2021-07-07 8:14 ` Bruce Richardson 2021-07-07 10:42 ` Jerin Jacob 2021-07-11 9:25 ` [dpdk-dev] [PATCH v2] dmadev: introduce DMA device library Chengwen Feng 2021-07-11 9:42 ` fengchengwen 2021-07-11 13:34 ` Jerin Jacob 2021-07-12 7:40 ` Morten Brørup 2021-07-11 14:25 ` Jerin Jacob 2021-07-12 7:15 ` Morten Brørup 2021-07-12 9:59 ` Jerin Jacob 2021-07-12 13:32 ` Bruce Richardson 2021-07-12 16:34 ` Jerin Jacob 2021-07-12 17:00 ` Bruce Richardson 2021-07-13 8:59 ` Jerin Jacob 2021-07-12 12:05 ` Bruce Richardson 2021-07-12 15:50 ` Bruce Richardson 2021-07-13 9:07 ` Jerin Jacob 2021-07-13 14:19 ` Ananyev, Konstantin 2021-07-13 14:28 ` Bruce Richardson 2021-07-13 12:27 ` [dpdk-dev] [PATCH v3] " Chengwen Feng 2021-07-13 13:06 ` fengchengwen 2021-07-13 13:37 ` Bruce Richardson 2021-07-15 6:44 ` Jerin Jacob 2021-07-15 8:25 ` Bruce Richardson 2021-07-15 9:49 ` Jerin Jacob 2021-07-15 10:00 ` Bruce Richardson 2021-07-13 16:02 ` Bruce Richardson 2021-07-14 12:22 ` Nipun Gupta 2021-07-15 8:29 ` fengchengwen 2021-07-15 11:16 ` Nipun Gupta 2021-07-15 12:11 ` Bruce Richardson 2021-07-15 12:31 ` Jerin Jacob 2021-07-15 12:34 ` Nipun Gupta 2021-07-14 16:05 ` Bruce Richardson 2021-07-15 7:10 ` Jerin Jacob 2021-07-15 9:03 ` Bruce Richardson 2021-07-15 9:30 ` Jerin Jacob 2021-07-15 10:03 ` Bruce Richardson 2021-07-15 10:05 ` Bruce Richardson 2021-07-15 15:41 ` [dpdk-dev] [PATCH v4] " Chengwen Feng 2021-07-15 16:04 ` fengchengwen 2021-07-15 16:33 ` Bruce Richardson 2021-07-16 3:04 ` fengchengwen 2021-07-16 9:50 ` Bruce Richardson 2021-07-16 12:34 ` Jerin Jacob 2021-07-16 12:40 ` Jerin Jacob 2021-07-16 12:48 ` Bruce Richardson 2021-07-16 12:54 ` Jerin Jacob 2021-07-16 2:45 ` [dpdk-dev] [PATCH v5] " Chengwen Feng 2021-07-16 13:20 ` Jerin Jacob [this message] 2021-07-16 14:41 ` Bruce Richardson 2021-07-19 3:29 ` [dpdk-dev] [PATCH v6] " Chengwen Feng 2021-07-19 6:21 ` Jerin Jacob 2021-07-19 13:20 ` fengchengwen 2021-07-19 13:36 ` Jerin Jacob 2021-07-19 13:05 ` [dpdk-dev] [PATCH v7] " Chengwen Feng 2021-07-20 1:14 ` [dpdk-dev] [PATCH v8] " Chengwen Feng 2021-07-20 5:03 ` Jerin Jacob 2021-07-20 6:53 ` fengchengwen 2021-07-20 9:43 ` Jerin Jacob 2021-07-20 10:13 ` Bruce Richardson 2021-07-20 11:12 ` [dpdk-dev] [PATCH v9] " Chengwen Feng 2021-07-20 12:05 ` Bruce Richardson 2021-07-20 12:46 ` [dpdk-dev] [PATCH v10] " Chengwen Feng 2021-07-26 6:53 ` fengchengwen 2021-07-26 8:31 ` Bruce Richardson 2021-07-27 3:57 ` fengchengwen 2021-07-26 11:03 ` Morten Brørup 2021-07-26 11:21 ` Jerin Jacob 2021-07-27 3:39 ` [dpdk-dev] [PATCH v11 0/2] support dmadev Chengwen Feng 2021-07-27 3:39 ` [dpdk-dev] [PATCH v11 1/2] dmadev: introduce DMA device library Chengwen Feng 2021-07-28 11:13 ` Bruce Richardson 2021-07-29 1:26 ` fengchengwen 2021-07-29 9:15 ` Bruce Richardson 2021-07-29 13:33 ` fengchengwen 2021-07-29 10:44 ` Jerin Jacob 2021-07-29 13:30 ` fengchengwen 2021-07-27 3:40 ` [dpdk-dev] [PATCH v11 2/2] doc: add dmadev library guide Chengwen Feng 2021-07-29 11:02 ` Jerin Jacob 2021-07-29 13:13 ` fengchengwen 2021-07-29 13:28 ` fengchengwen 2021-07-29 13:06 ` [dpdk-dev] [PATCH v12 0/6] support dmadev Chengwen Feng 2021-07-29 13:06 ` [dpdk-dev] [PATCH v12 1/6] dmadev: introduce DMA device library public APIs Chengwen Feng 2021-07-29 13:06 ` [dpdk-dev] [PATCH v12 2/6] dmadev: introduce DMA device library internal header Chengwen Feng 2021-07-29 13:06 ` [dpdk-dev] [PATCH v12 3/6] dmadev: introduce DMA device library PMD header Chengwen Feng 2021-07-29 13:06 ` [dpdk-dev] [PATCH v12 4/6] dmadev: introduce DMA device library implementation Chengwen Feng 2021-07-29 13:06 ` [dpdk-dev] [PATCH v12 5/6] doc: add DMA device library guide Chengwen Feng 2021-07-29 13:06 ` [dpdk-dev] [PATCH v12 6/6] maintainers: add for dmadev Chengwen Feng 2021-08-03 11:29 ` [dpdk-dev] [PATCH v13 0/6] support dmadev Chengwen Feng 2021-08-03 11:29 ` [dpdk-dev] [PATCH v13 1/6] dmadev: introduce DMA device library public APIs Chengwen Feng 2021-08-03 11:29 ` [dpdk-dev] [PATCH v13 2/6] dmadev: introduce DMA device library internal header Chengwen Feng 2021-08-03 11:29 ` [dpdk-dev] [PATCH v13 3/6] dmadev: introduce DMA device library PMD header Chengwen Feng 2021-08-03 11:29 ` [dpdk-dev] [PATCH v13 4/6] dmadev: introduce DMA device library implementation Chengwen Feng 2021-08-05 12:56 ` Walsh, Conor 2021-08-05 13:12 ` fengchengwen 2021-08-05 13:44 ` Conor Walsh 2021-08-03 11:29 ` [dpdk-dev] [PATCH v13 5/6] doc: add DMA device library guide Chengwen Feng 2021-08-03 14:55 ` Jerin Jacob 2021-08-05 13:15 ` fengchengwen 2021-08-03 11:29 ` [dpdk-dev] [PATCH v13 6/6] maintainers: add for dmadev Chengwen Feng 2021-08-03 11:46 ` [dpdk-dev] [PATCH v13 0/6] support dmadev fengchengwen 2021-08-10 11:54 ` [dpdk-dev] [PATCH v14 " Chengwen Feng 2021-08-10 11:54 ` [dpdk-dev] [PATCH v14 1/6] dmadev: introduce DMA device library public APIs Chengwen Feng 2021-08-10 11:54 ` [dpdk-dev] [PATCH v14 2/6] dmadev: introduce DMA device library internal header Chengwen Feng 2021-08-10 11:54 ` [dpdk-dev] [PATCH v14 3/6] dmadev: introduce DMA device library PMD header Chengwen Feng 2021-08-10 11:54 ` [dpdk-dev] [PATCH v14 4/6] dmadev: introduce DMA device library implementation Chengwen Feng 2021-08-10 11:54 ` [dpdk-dev] [PATCH v14 5/6] doc: add DMA device library guide Chengwen Feng 2021-08-10 15:27 ` Walsh, Conor 2021-08-11 0:47 ` fengchengwen 2021-08-13 9:20 ` fengchengwen 2021-08-13 10:12 ` Walsh, Conor 2021-08-10 11:54 ` [dpdk-dev] [PATCH v14 6/6] maintainers: add for dmadev Chengwen Feng 2021-08-13 9:09 ` [dpdk-dev] [PATCH v15 0/6] support dmadev Chengwen Feng 2021-08-13 9:09 ` [dpdk-dev] [PATCH v15 1/6] dmadev: introduce DMA device library public APIs Chengwen Feng 2021-08-19 14:52 ` Bruce Richardson 2021-08-23 3:43 ` fengchengwen 2021-08-13 9:09 ` [dpdk-dev] [PATCH v15 2/6] dmadev: introduce DMA device library internal header Chengwen Feng 2021-08-13 9:09 ` [dpdk-dev] [PATCH v15 3/6] dmadev: introduce DMA device library PMD header Chengwen Feng 2021-08-13 9:09 ` [dpdk-dev] [PATCH v15 4/6] dmadev: introduce DMA device library implementation Chengwen Feng 2021-08-13 9:09 ` [dpdk-dev] [PATCH v15 5/6] doc: add DMA device library guide Chengwen Feng 2021-08-13 9:09 ` [dpdk-dev] [PATCH v15 6/6] maintainers: add for dmadev Chengwen Feng 2021-08-23 3:31 ` [dpdk-dev] [PATCH v16 0/9] support dmadev Chengwen Feng 2021-08-23 3:31 ` [dpdk-dev] [PATCH v16 1/9] dmadev: introduce DMA device library public APIs Chengwen Feng 2021-08-23 3:31 ` [dpdk-dev] [PATCH v16 2/9] dmadev: introduce DMA device library internal header Chengwen Feng 2021-08-23 3:31 ` [dpdk-dev] [PATCH v16 3/9] dmadev: introduce DMA device library PMD header Chengwen Feng 2021-08-23 3:31 ` [dpdk-dev] [PATCH v16 4/9] dmadev: introduce DMA device library implementation Chengwen Feng 2021-08-23 3:31 ` [dpdk-dev] [PATCH v16 5/9] doc: add DMA device library guide Chengwen Feng 2021-08-23 3:31 ` [dpdk-dev] [PATCH v16 6/9] dma/skeleton: introduce skeleton dmadev driver Chengwen Feng 2021-08-26 18:39 ` Bruce Richardson 2021-08-23 3:31 ` [dpdk-dev] [PATCH v16 7/9] dma/skeleton: add test cases Chengwen Feng 2021-08-23 14:03 ` Bruce Richardson 2021-08-26 9:30 ` fengchengwen 2021-08-23 3:31 ` [dpdk-dev] [PATCH v16 8/9] test: enable dmadev skeleton test Chengwen Feng 2021-08-23 3:31 ` [dpdk-dev] [PATCH v16 9/9] maintainers: add for dmadev Chengwen Feng 2021-08-28 7:29 ` [dpdk-dev] [PATCH v17 0/8] support dmadev Chengwen Feng 2021-08-28 7:29 ` [dpdk-dev] [PATCH v17 1/8] dmadev: introduce DMA device library public APIs Chengwen Feng 2021-08-28 7:30 ` [dpdk-dev] [PATCH v17 2/8] dmadev: introduce DMA device library internal header Chengwen Feng 2021-08-28 7:30 ` [dpdk-dev] [PATCH v17 3/8] dmadev: introduce DMA device library PMD header Chengwen Feng 2021-08-28 7:30 ` [dpdk-dev] [PATCH v17 4/8] dmadev: introduce DMA device library implementation Chengwen Feng 2021-08-28 7:30 ` [dpdk-dev] [PATCH v17 5/8] doc: add DMA device library guide Chengwen Feng 2021-08-28 7:30 ` [dpdk-dev] [PATCH v17 6/8] dma/skeleton: introduce skeleton dmadev driver Chengwen Feng 2021-08-28 7:30 ` [dpdk-dev] [PATCH v17 7/8] app/test: add dmadev API test Chengwen Feng 2021-08-28 7:30 ` [dpdk-dev] [PATCH v17 8/8] maintainers: add for dmadev Chengwen Feng 2021-08-28 8:25 ` fengchengwen 2021-08-30 8:19 ` Bruce Richardson 2021-09-02 10:54 ` [dpdk-dev] [PATCH v18 0/8] support dmadev Chengwen Feng 2021-09-02 10:54 ` [dpdk-dev] [PATCH v18 1/8] dmadev: introduce DMA device library public APIs Chengwen Feng 2021-09-02 10:54 ` [dpdk-dev] [PATCH v18 2/8] dmadev: introduce DMA device library internal header Chengwen Feng 2021-09-02 10:54 ` [dpdk-dev] [PATCH v18 3/8] dmadev: introduce DMA device library PMD header Chengwen Feng 2021-09-02 10:54 ` [dpdk-dev] [PATCH v18 4/8] dmadev: introduce DMA device library implementation Chengwen Feng 2021-09-02 10:54 ` [dpdk-dev] [PATCH v18 5/8] doc: add DMA device library guide Chengwen Feng 2021-09-02 10:54 ` [dpdk-dev] [PATCH v18 6/8] dma/skeleton: introduce skeleton dmadev driver Chengwen Feng 2021-09-02 10:54 ` [dpdk-dev] [PATCH v18 7/8] app/test: add dmadev API test Chengwen Feng 2021-09-02 10:54 ` [dpdk-dev] [PATCH v18 8/8] maintainers: add for dmadev Chengwen Feng 2021-09-02 11:51 ` Bruce Richardson 2021-09-02 13:39 ` fengchengwen 2021-09-03 12:59 ` Maxime Coquelin 2021-09-04 7:02 ` fengchengwen 2021-09-06 1:46 ` Li, Xiaoyun 2021-09-06 8:00 ` fengchengwen 2021-09-06 2:03 ` Xia, Chenbo 2021-09-06 8:01 ` fengchengwen 2021-09-02 13:13 ` [dpdk-dev] [PATCH v19 0/7] support dmadev Chengwen Feng 2021-09-02 13:13 ` [dpdk-dev] [PATCH v19 1/7] dmadev: introduce DMA device library public APIs Chengwen Feng 2021-09-03 11:42 ` Gagandeep Singh 2021-09-04 1:31 ` fengchengwen 2021-09-06 6:48 ` Gagandeep Singh 2021-09-06 7:52 ` fengchengwen 2021-09-06 8:06 ` Jerin Jacob 2021-09-06 8:08 ` Bruce Richardson 2021-09-07 12:55 ` fengchengwen 2021-09-03 13:03 ` Bruce Richardson 2021-09-04 3:05 ` fengchengwen 2021-09-04 10:10 ` Morten Brørup 2021-09-03 15:13 ` Kevin Laatz 2021-09-03 15:35 ` Conor Walsh 2021-09-02 13:13 ` [dpdk-dev] [PATCH v19 2/7] dmadev: introduce DMA device library internal header Chengwen Feng 2021-09-03 15:13 ` Kevin Laatz 2021-09-03 15:35 ` Conor Walsh 2021-09-02 13:13 ` [dpdk-dev] [PATCH v19 3/7] dmadev: introduce DMA device library PMD header Chengwen Feng 2021-09-03 15:13 ` Kevin Laatz 2021-09-03 15:35 ` Conor Walsh 2021-09-02 13:13 ` [dpdk-dev] [PATCH v19 4/7] dmadev: introduce DMA device library implementation Chengwen Feng 2021-09-03 15:13 ` Kevin Laatz 2021-09-03 15:30 ` Bruce Richardson 2021-09-03 15:35 ` Conor Walsh 2021-09-04 8:52 ` fengchengwen 2021-09-02 13:13 ` [dpdk-dev] [PATCH v19 5/7] doc: add DMA device library guide Chengwen Feng 2021-09-03 15:13 ` Kevin Laatz 2021-09-02 13:13 ` [dpdk-dev] [PATCH v19 6/7] dma/skeleton: introduce skeleton dmadev driver Chengwen Feng 2021-09-03 15:14 ` Kevin Laatz 2021-09-04 7:17 ` fengchengwen 2021-09-03 15:36 ` Conor Walsh 2021-09-02 13:13 ` [dpdk-dev] [PATCH v19 7/7] app/test: add dmadev API test Chengwen Feng 2021-09-02 14:11 ` Walsh, Conor 2021-09-03 0:39 ` fengchengwen 2021-09-03 15:38 ` Walsh, Conor 2021-09-04 7:22 ` fengchengwen 2021-09-03 15:14 ` Kevin Laatz 2021-09-04 10:10 ` [dpdk-dev] [PATCH v20 0/7] support dmadev Chengwen Feng 2021-09-04 10:10 ` [dpdk-dev] [PATCH v20 1/7] dmadev: introduce DMA device library public APIs Chengwen Feng 2021-09-04 10:10 ` [dpdk-dev] [PATCH v20 2/7] dmadev: introduce DMA device library internal header Chengwen Feng 2021-09-06 13:35 ` Bruce Richardson 2021-09-07 13:05 ` fengchengwen 2021-09-04 10:10 ` [dpdk-dev] [PATCH v20 3/7] dmadev: introduce DMA device library PMD header Chengwen Feng 2021-09-04 10:10 ` [dpdk-dev] [PATCH v20 4/7] dmadev: introduce DMA device library implementation Chengwen Feng 2021-09-04 10:10 ` [dpdk-dev] [PATCH v20 5/7] doc: add DMA device library guide Chengwen Feng 2021-09-04 10:17 ` Jerin Jacob 2021-09-04 10:10 ` [dpdk-dev] [PATCH v20 6/7] dma/skeleton: introduce skeleton dmadev driver Chengwen Feng 2021-09-04 10:10 ` [dpdk-dev] [PATCH v20 7/7] app/test: add dmadev API test Chengwen Feng 2021-09-06 13:37 ` [dpdk-dev] [PATCH v20 0/7] support dmadev Bruce Richardson 2021-09-07 12:56 ` [dpdk-dev] [PATCH v21 " Chengwen Feng 2021-09-07 12:56 ` [dpdk-dev] [PATCH v21 1/7] dmadev: introduce DMA device library public APIs Chengwen Feng 2021-09-09 10:33 ` Thomas Monjalon 2021-09-09 11:18 ` Bruce Richardson 2021-09-09 11:29 ` Thomas Monjalon 2021-09-09 12:45 ` Bruce Richardson 2021-09-09 13:54 ` fengchengwen 2021-09-09 14:26 ` Thomas Monjalon 2021-09-09 14:31 ` Bruce Richardson 2021-09-09 14:28 ` Bruce Richardson 2021-09-09 15:12 ` Morten Brørup 2021-09-09 13:33 ` fengchengwen 2021-09-09 14:19 ` Thomas Monjalon 2021-09-16 3:57 ` fengchengwen 2021-09-07 12:56 ` [dpdk-dev] [PATCH v21 2/7] dmadev: introduce DMA device library internal header Chengwen Feng 2021-09-07 12:56 ` [dpdk-dev] [PATCH v21 3/7] dmadev: introduce DMA device library PMD header Chengwen Feng 2021-09-07 12:56 ` [dpdk-dev] [PATCH v21 4/7] dmadev: introduce DMA device library implementation Chengwen Feng 2021-09-08 9:54 ` Walsh, Conor 2021-09-09 13:25 ` fengchengwen 2021-09-15 13:51 ` Kevin Laatz 2021-09-15 14:34 ` Bruce Richardson 2021-09-15 14:47 ` Kevin Laatz 2021-09-07 12:56 ` [dpdk-dev] [PATCH v21 5/7] doc: add DMA device library guide Chengwen Feng 2021-09-07 12:56 ` [dpdk-dev] [PATCH v21 6/7] dma/skeleton: introduce skeleton dmadev driver Chengwen Feng 2021-09-07 12:56 ` [dpdk-dev] [PATCH v21 7/7] app/test: add dmadev API test Chengwen Feng 2021-09-16 3:41 ` [dpdk-dev] [PATCH v22 0/5] support dmadev Chengwen Feng 2021-09-16 3:41 ` [dpdk-dev] [PATCH v22 1/5] dmadev: introduce DMA device library Chengwen Feng 2021-09-16 3:41 ` [dpdk-dev] [PATCH v22 2/5] dmadev: add control plane function support Chengwen Feng 2021-09-16 3:41 ` [dpdk-dev] [PATCH v22 3/5] dmadev: add data " Chengwen Feng 2021-09-16 3:41 ` [dpdk-dev] [PATCH v22 4/5] dma/skeleton: introduce skeleton dmadev driver Chengwen Feng 2021-09-16 3:41 ` [dpdk-dev] [PATCH v22 5/5] app/test: add dmadev API test Chengwen Feng 2021-09-24 10:53 ` [dpdk-dev] [PATCH v23 0/6] support dmadev Chengwen Feng 2021-09-24 10:53 ` [dpdk-dev] [PATCH v23 1/6] dmadev: introduce DMA device library Chengwen Feng 2021-10-04 21:12 ` Radha Mohan 2021-10-05 8:24 ` Kevin Laatz 2021-10-05 16:39 ` Radha Mohan 2021-10-08 1:52 ` fengchengwen 2021-10-06 10:26 ` Thomas Monjalon 2021-10-08 7:13 ` fengchengwen 2021-10-08 10:09 ` Thomas Monjalon 2021-09-24 10:53 ` [dpdk-dev] [PATCH v23 2/6] dmadev: add control plane function support Chengwen Feng 2021-10-05 10:16 ` Matan Azrad 2021-10-08 3:28 ` fengchengwen 2021-10-06 10:46 ` Thomas Monjalon 2021-10-08 7:55 ` fengchengwen 2021-10-08 10:18 ` Thomas Monjalon 2021-09-24 10:53 ` [dpdk-dev] [PATCH v23 3/6] dmadev: add data " Chengwen Feng 2021-09-24 10:53 ` [dpdk-dev] [PATCH v23 4/6] dmadev: add multi-process support Chengwen Feng 2021-09-24 10:53 ` [dpdk-dev] [PATCH v23 5/6] dma/skeleton: introduce skeleton dmadev driver Chengwen Feng 2021-09-24 10:53 ` [dpdk-dev] [PATCH v23 6/6] app/test: add dmadev API test Chengwen Feng 2021-10-09 9:33 ` [dpdk-dev] [PATCH v24 0/6] support dmadev Chengwen Feng 2021-10-09 9:33 ` [dpdk-dev] [PATCH v24 1/6] dmadev: introduce DMA device library Chengwen Feng 2021-10-09 9:33 ` [dpdk-dev] [PATCH v24 2/6] dmadev: add control plane API support Chengwen Feng 2021-10-09 9:33 ` [dpdk-dev] [PATCH v24 3/6] dmadev: add data " Chengwen Feng 2021-10-09 10:03 ` fengchengwen 2021-10-11 10:40 ` Bruce Richardson 2021-10-11 12:31 ` fengchengwen 2021-10-09 9:33 ` [dpdk-dev] [PATCH v24 4/6] dmadev: add multi-process support Chengwen Feng 2021-10-09 9:33 ` [dpdk-dev] [PATCH v24 5/6] dma/skeleton: introduce skeleton dmadev driver Chengwen Feng 2021-10-09 9:33 ` [dpdk-dev] [PATCH v24 6/6] app/test: add dmadev API test Chengwen Feng 2021-10-11 7:33 ` [dpdk-dev] [PATCH v25 0/6] support dmadev Chengwen Feng 2021-10-11 7:33 ` [dpdk-dev] [PATCH v25 1/6] dmadev: introduce DMA device library Chengwen Feng 2021-10-12 19:09 ` Thomas Monjalon 2021-10-13 0:21 ` fengchengwen 2021-10-13 7:41 ` Thomas Monjalon 2021-10-15 8:29 ` Thomas Monjalon 2021-10-15 9:59 ` fengchengwen 2021-10-15 13:46 ` Thomas Monjalon 2021-10-11 7:33 ` [dpdk-dev] [PATCH v25 2/6] dmadev: add control plane API support Chengwen Feng 2021-10-11 15:44 ` Bruce Richardson 2021-10-12 3:57 ` fengchengwen 2021-10-12 18:57 ` Thomas Monjalon 2021-10-11 7:33 ` [dpdk-dev] [PATCH v25 3/6] dmadev: add data " Chengwen Feng 2021-10-11 7:33 ` [dpdk-dev] [PATCH v25 4/6] dmadev: add multi-process support Chengwen Feng 2021-10-11 7:33 ` [dpdk-dev] [PATCH v25 5/6] dma/skeleton: introduce skeleton dmadev driver Chengwen Feng 2021-10-11 7:33 ` [dpdk-dev] [PATCH v25 6/6] app/test: add dmadev API test Chengwen Feng 2021-10-13 12:24 ` [dpdk-dev] [PATCH v26 0/6] support dmadev Chengwen Feng 2021-10-13 12:24 ` [dpdk-dev] [PATCH v26 1/6] dmadev: introduce DMA device library Chengwen Feng 2021-10-13 12:24 ` [dpdk-dev] [PATCH v26 2/6] dmadev: add control plane API support Chengwen Feng 2021-10-13 12:24 ` [dpdk-dev] [PATCH v26 3/6] dmadev: add data " Chengwen Feng 2021-10-13 12:24 ` [dpdk-dev] [PATCH v26 4/6] dmadev: add multi-process support Chengwen Feng 2021-10-13 12:24 ` [dpdk-dev] [PATCH v26 5/6] dma/skeleton: introduce skeleton dmadev driver Chengwen Feng 2021-10-13 12:25 ` [dpdk-dev] [PATCH v26 6/6] app/test: add dmadev API test Chengwen Feng 2021-10-17 19:17 ` [dpdk-dev] [PATCH v26 0/6] support dmadev Thomas Monjalon
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=CALBAE1O86P_--WbpWeSP4nv_G6o_68O82awr6rnMZQ_vtPFP+Q@mail.gmail.com \ --to=jerinjacobk@gmail.com \ --cc=andrew.rybchenko@oktetlabs.ru \ --cc=bruce.richardson@intel.com \ --cc=david.marchand@redhat.com \ --cc=dev@dpdk.org \ --cc=fengchengwen@huawei.com \ --cc=ferruh.yigit@intel.com \ --cc=hemant.agrawal@nxp.com \ --cc=honnappa.nagarahalli@arm.com \ --cc=jerinj@marvell.com \ --cc=konstantin.ananyev@intel.com \ --cc=maxime.coquelin@redhat.com \ --cc=mb@smartsharesystems.com \ --cc=nipun.gupta@nxp.com \ --cc=pkapoor@marvell.com \ --cc=sburla@marvell.com \ --cc=thomas@monjalon.net \ --subject='Re: [dpdk-dev] [PATCH v5] dmadev: introduce DMA device library' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.