[dpdk-dev] [PATCH v8 01/11] eal/linux: add interrupt vectors support in intr_handle
Neil Horman
nhorman at tuxdriver.com
Thu May 21 12:32:02 CEST 2015
On Thu, May 21, 2015 at 04:55:53PM +0800, Cunming Liang wrote:
> The patch adds interrupt vectors support in rte_intr_handle.
> 'vec_en' is set when interrupt vectors are detected and associated event fds are set.
> Those event fds are stored in efds[].
> 'intr_vec' is reserved for device driver to initialize the vector mapping table.
> When the event fds add to a specified epoll instance, 'elist' will hold the rte_epoll_event object pointer.
>
> Signed-off-by: Danny Zhou <danny.zhou at intel.com>
> Signed-off-by: Cunming Liang <cunming.liang at intel.com>
> ---
> v7 changes:
> - add eptrs[], it's used to store the register rte_epoll_event instances.
> - add vec_en, to log the vector capability status.
>
> v6 changes:
> - add mapping table between irq vector number and queue id.
>
> v5 changes:
> - Create this new patch file for changed struct rte_intr_handle that
> other patches depend on, to avoid breaking git bisect.
>
> lib/librte_eal/linuxapp/eal/include/exec-env/rte_interrupts.h | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_interrupts.h b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_interrupts.h
> index 6a159c7..27174df 100644
> --- a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_interrupts.h
> +++ b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_interrupts.h
> @@ -38,6 +38,8 @@
> #ifndef _RTE_LINUXAPP_INTERRUPTS_H_
> #define _RTE_LINUXAPP_INTERRUPTS_H_
>
> +#define RTE_MAX_RXTX_INTR_VEC_ID 32
> +
> enum rte_intr_handle_type {
> RTE_INTR_HANDLE_UNKNOWN = 0,
> RTE_INTR_HANDLE_UIO, /**< uio device handle */
> @@ -48,6 +50,8 @@ enum rte_intr_handle_type {
> RTE_INTR_HANDLE_MAX
> };
>
> +struct rte_epoll_event;
> +
> /** Handle for interrupts. */
> struct rte_intr_handle {
> union {
> @@ -57,6 +61,12 @@ struct rte_intr_handle {
> };
> int fd; /**< interrupt event file descriptor */
> enum rte_intr_handle_type type; /**< handle type */
> + uint32_t max_intr; /**< max interrupt requested */
> + uint32_t nb_efd; /**< number of available efds */
> + int efds[RTE_MAX_RXTX_INTR_VEC_ID]; /**< intr vectors/efds mapping */
> + struct rte_epoll_event *elist[RTE_MAX_RXTX_INTR_VEC_ID];
> + /**< intr vector epoll event ptr */
> + int *intr_vec; /**< intr vector number array */
> };
>
This is going to be ABI breaking if this from test_interrupts.c:
static struct rte_intr_handle intr_handles[TEST_INTERRUPT_HANDLE_MAX];
is a plausible way of using this structure. Even putting the data at the end of
the structure won't help, as the array indicies are off
Neil
> #endif /* _RTE_LINUXAPP_INTERRUPTS_H_ */
> --
> 1.8.1.4
>
>
More information about the dev
mailing list