> -----Original Message----- > From: Guo, Jia > Sent: Tuesday, April 3, 2018 6:34 PM > To: step...@networkplumber.org; Richardson, Bruce; Yigit, Ferruh; > Ananyev, Konstantin; gaetan.ri...@6wind.com; Wu, Jingjing; > tho...@monjalon.net; mo...@mellanox.com; Van Haaren, Harry; Tan, > Jianfeng > Cc: jblu...@infradead.org; shreyansh.j...@nxp.com; dev@dpdk.org; Guo, > Jia; Zhang, Helin > Subject: [PATCH V18 1/4] eal: add device event handle in interrupt thread > > Add new interrupt handle type of RTE_INTR_HANDLE_DEV_EVENT, for > device event interrupt monitor. > > Signed-off-by: Jeff Guo <jia....@intel.com>
After fixing a typo below, you can carry my: Reviewed-by: Jianfeng Tan <jianfeng....@intel.com> > --- > v18->v17: > no change. > --- > lib/librte_eal/common/include/rte_eal_interrupts.h | 1 + > lib/librte_eal/linuxapp/eal/eal_interrupts.c | 11 +++++- > test/test/test_interrupts.c | 39 > ++++++++++++++++++++-- > 3 files changed, 48 insertions(+), 3 deletions(-) > > diff --git a/lib/librte_eal/common/include/rte_eal_interrupts.h > b/lib/librte_eal/common/include/rte_eal_interrupts.h > index 3f792a9..6eb4932 100644 > --- a/lib/librte_eal/common/include/rte_eal_interrupts.h > +++ b/lib/librte_eal/common/include/rte_eal_interrupts.h > @@ -34,6 +34,7 @@ enum rte_intr_handle_type { > RTE_INTR_HANDLE_ALARM, /**< alarm handle */ > RTE_INTR_HANDLE_EXT, /**< external handler */ > RTE_INTR_HANDLE_VDEV, /**< virtual device */ > + RTE_INTR_HANDLE_DEV_EVENT, /**< device event handle */ > RTE_INTR_HANDLE_MAX /**< count of elements */ > }; > > diff --git a/lib/librte_eal/linuxapp/eal/eal_interrupts.c > b/lib/librte_eal/linuxapp/eal/eal_interrupts.c > index f86f22f..58e9328 100644 > --- a/lib/librte_eal/linuxapp/eal/eal_interrupts.c > +++ b/lib/librte_eal/linuxapp/eal/eal_interrupts.c > @@ -559,6 +559,9 @@ rte_intr_enable(const struct rte_intr_handle > *intr_handle) > return -1; > break; > #endif > + /* not used at this moment */ > + case RTE_INTR_HANDLE_DEV_EVENT: > + return -1; > /* unknown handle type */ > default: > RTE_LOG(ERR, EAL, > @@ -606,6 +609,9 @@ rte_intr_disable(const struct rte_intr_handle > *intr_handle) > return -1; > break; > #endif > + /* not used at this moment */ > + case RTE_INTR_HANDLE_DEV_EVENT: > + return -1; > /* unknown handle type */ > default: > RTE_LOG(ERR, EAL, > @@ -674,7 +680,10 @@ eal_intr_process_interrupts(struct epoll_event > *events, int nfds) > bytes_read = 0; > call = true; > break; > - > + case RTE_INTR_HANDLE_DEV_EVENT: > + bytes_read = 0; > + call = true; > + break; > default: > bytes_read = 1; > break; > diff --git a/test/test/test_interrupts.c b/test/test/test_interrupts.c > index 31a70a0..7f4f1b4 100644 > --- a/test/test/test_interrupts.c > +++ b/test/test/test_interrupts.c > @@ -20,6 +20,7 @@ enum test_interrupt_handle_type { > TEST_INTERRUPT_HANDLE_VALID, > TEST_INTERRUPT_HANDLE_VALID_UIO, > TEST_INTERRUPT_HANDLE_VALID_ALARM, > + TEST_INTERRUPT_HANDLE_VALID_DEV_EVENT, > TEST_INTERRUPT_HANDLE_CASE1, > TEST_INTERRUPT_HANDLE_MAX > }; > @@ -80,6 +81,10 @@ test_interrupt_init(void) > intr_handles[TEST_INTERRUPT_HANDLE_VALID_ALARM].type = > RTE_INTR_HANDLE_ALARM; > > + intr_handles[TEST_INTERRUPT_HANDLE_VALID_DEV_EVENT].fd = > pfds.readfd; > + intr_handles[TEST_INTERRUPT_HANDLE_VALID_DEV_EVENT].type = > + RTE_INTR_HANDLE_DEV_EVENT; > + > intr_handles[TEST_INTERRUPT_HANDLE_CASE1].fd = pfds.writefd; > intr_handles[TEST_INTERRUPT_HANDLE_CASE1].type = > RTE_INTR_HANDLE_UIO; > > @@ -250,6 +255,14 @@ test_interrupt_enable(void) > return -1; > } > > + /* check with specific valid intr_handle */ > + test_intr_handle = > intr_handles[TEST_INTERRUPT_HANDLE_VALID_DEV_EVENT]; > + if (rte_intr_enable(&test_intr_handle) == 0) { > + printf("unexpectedly enable a specific intr_handle " > + "successfully\n"); > + return -1; > + } > + > /* check with valid handler and its type */ > test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_CASE1]; > if (rte_intr_enable(&test_intr_handle) < 0) { > @@ -306,6 +319,14 @@ test_interrupt_disable(void) > return -1; > } > > + /* check with specific valid intr_handle */ > + test_intr_handle = > intr_handles[TEST_INTERRUPT_HANDLE_VALID_DEV_EVENT]; > + if (rte_intr_disable(&test_intr_handle) == 0) { > + printf("unexpectedly disable a specific intr_handle " > + "successfully\n"); > + return -1; > + } > + > /* check with valid handler and its type */ > test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_CASE1]; > if (rte_intr_disable(&test_intr_handle) < 0) { > @@ -393,9 +414,17 @@ test_interrupt(void) > goto out; > } > > + printf("Check valid device event interrupt full path\n"); > + if (test_interrupt_full_path_check( > + TEST_INTERRUPT_HANDLE_VALID_DEVICE_EVENT) < 0) { Here is a typo which brings below compile error: dpdk/test/test/test_interrupts.c:419:3: error: 'TEST_INTERRUPT_HANDLE_VALID_DEVICE_EVENT' undeclared (first use in this function) TEST_INTERRUPT_HANDLE_VALID_DEVICE_EVENT) < 0) { Thanks, Jianfeng > + printf("failure occurred during checking valid device event " > + "interrupt full path\n"); > + goto out; > + } > + > printf("Check valid alarm interrupt full path\n"); > - if > (test_interrupt_full_path_check(TEST_INTERRUPT_HANDLE_VALID_ALARM) > - < 0) { > + if (test_interrupt_full_path_check( > + TEST_INTERRUPT_HANDLE_VALID_DEV_EVENT) < 0) { > printf("failure occurred during checking valid alarm " > "interrupt full path\n"); > goto out; > @@ -513,6 +542,12 @@ test_interrupt(void) > rte_intr_callback_unregister(&test_intr_handle, > test_interrupt_callback_1, (void *)-1); > > + test_intr_handle = > intr_handles[TEST_INTERRUPT_HANDLE_VALID_DEV_EVENT]; > + rte_intr_callback_unregister(&test_intr_handle, > + test_interrupt_callback, (void *)-1); > + rte_intr_callback_unregister(&test_intr_handle, > + test_interrupt_callback_1, (void *)-1); > + > rte_delay_ms(2 * TEST_INTERRUPT_CHECK_INTERVAL); > /* deinit */ > test_interrupt_deinit(); > -- > 2.7.4