* [dpdk-dev] [PATCH 0/2] eal: clean up interrupt handle @ 2017-02-22 22:17 Qi Zhang 2017-02-22 22:17 ` [dpdk-dev] [PATCH 1/2] " Qi Zhang ` (2 more replies) 0 siblings, 3 replies; 14+ messages in thread From: Qi Zhang @ 2017-02-22 22:17 UTC (permalink / raw) To: thomas.monjalon; +Cc: dev, Qi Zhang In an interrupt callback function, the paramter intr_handle which is registered at rte_intr_callback_register call is passed back. It is supposed to feed rte_intr_enable, but it is not gareenteed to contain paramters as required, since it is a copy of rte_ethdev->intr_handle, if some field need to be updated (like max_intr) driver need to unregister and register the callback function again. So is it necessary to pass back a copy of intr_handle? why don't use rte_ethdev->intr_handle directly to feed rte_intr_enable? if look at the prototpye of rte_intr_callback_fn, void* cb_arg can be used to pass anything by the driver and the typical way is to pass a rte_ethdev(or any embedded bus dev) instance (actually, almost all driver implemented this already), and use this instance to get the right intr_handle. One of the patch clean up this and the other update the test code to sync with the interface change. Qi Zhang (2): eal: improve interrupt handle test: update test code for interrupt callback change app/test/test_interrupts.c | 23 +++++++-------- drivers/net/bnxt/bnxt_irq.c | 3 +- drivers/net/e1000/em_ethdev.c | 8 ++---- drivers/net/e1000/igb_ethdev.c | 15 ++++------ drivers/net/enic/enic_main.c | 3 +- drivers/net/fm10k/fm10k_ethdev.c | 12 +++----- drivers/net/i40e/i40e_ethdev.c | 8 ++---- drivers/net/i40e/i40e_ethdev_vf.c | 5 ++-- drivers/net/ixgbe/ixgbe_ethdev.c | 14 ++++----- drivers/net/nfp/nfp_net.c | 6 ++-- drivers/net/qede/qede_ethdev.c | 4 +-- drivers/net/sfc/sfc_intr.c | 10 ++++--- drivers/net/virtio/virtio_ethdev.c | 5 ++-- lib/librte_eal/common/include/rte_interrupts.h | 3 +- lib/librte_eal/linuxapp/eal/eal_alarm.c | 5 ++-- lib/librte_eal/linuxapp/eal/eal_interrupts.c | 39 ++++---------------------- 16 files changed, 57 insertions(+), 106 deletions(-) -- 2.7.4 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH 1/2] eal: clean up interrupt handle 2017-02-22 22:17 [dpdk-dev] [PATCH 0/2] eal: clean up interrupt handle Qi Zhang @ 2017-02-22 22:17 ` Qi Zhang 2017-02-27 16:19 ` Jan Blunck 2017-02-22 22:17 ` [dpdk-dev] [PATCH 2/2] test: update test code Qi Zhang 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 0/3] clean up interrupt handle Qi Zhang 2 siblings, 1 reply; 14+ messages in thread From: Qi Zhang @ 2017-02-22 22:17 UTC (permalink / raw) To: thomas.monjalon; +Cc: dev, Qi Zhang The patch change the prototype of callback function (rte_intr_callback_fn) by removing the unnecessary parameter. Also with this change we can keep content of item in intr_source read only, the inappropriate modifciation(like get_max_intr) can be avoid. Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> --- drivers/net/bnxt/bnxt_irq.c | 3 +- drivers/net/e1000/em_ethdev.c | 8 ++---- drivers/net/e1000/igb_ethdev.c | 15 ++++------ drivers/net/enic/enic_main.c | 3 +- drivers/net/fm10k/fm10k_ethdev.c | 12 +++----- drivers/net/i40e/i40e_ethdev.c | 8 ++---- drivers/net/i40e/i40e_ethdev_vf.c | 5 ++-- drivers/net/ixgbe/ixgbe_ethdev.c | 14 ++++----- drivers/net/nfp/nfp_net.c | 6 ++-- drivers/net/qede/qede_ethdev.c | 4 +-- drivers/net/sfc/sfc_intr.c | 10 ++++--- drivers/net/virtio/virtio_ethdev.c | 5 ++-- lib/librte_eal/common/include/rte_interrupts.h | 3 +- lib/librte_eal/linuxapp/eal/eal_alarm.c | 5 ++-- lib/librte_eal/linuxapp/eal/eal_interrupts.c | 39 ++++---------------------- 15 files changed, 45 insertions(+), 95 deletions(-) diff --git a/drivers/net/bnxt/bnxt_irq.c b/drivers/net/bnxt/bnxt_irq.c index e93585a..20e17ff 100644 --- a/drivers/net/bnxt/bnxt_irq.c +++ b/drivers/net/bnxt/bnxt_irq.c @@ -45,8 +45,7 @@ * Interrupts */ -static void bnxt_int_handler(struct rte_intr_handle *handle __rte_unused, - void *param) +static void bnxt_int_handler(void *param) { struct rte_eth_dev *eth_dev = (struct rte_eth_dev *)param; struct bnxt *bp = (struct bnxt *)eth_dev->data->dev_private; diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c index 4066ef9..fff0874 100644 --- a/drivers/net/e1000/em_ethdev.c +++ b/drivers/net/e1000/em_ethdev.c @@ -85,8 +85,7 @@ static int eth_em_rxq_interrupt_setup(struct rte_eth_dev *dev); static int eth_em_interrupt_get_status(struct rte_eth_dev *dev); static int eth_em_interrupt_action(struct rte_eth_dev *dev, struct rte_intr_handle *handle); -static void eth_em_interrupt_handler(struct rte_intr_handle *handle, - void *param); +static void eth_em_interrupt_handler(void *param); static int em_hw_init(struct e1000_hw *hw); static int em_hardware_init(struct e1000_hw *hw); @@ -1646,13 +1645,12 @@ eth_em_interrupt_action(struct rte_eth_dev *dev, * void */ static void -eth_em_interrupt_handler(struct rte_intr_handle *handle, - void *param) +eth_em_interrupt_handler(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; eth_em_interrupt_get_status(dev); - eth_em_interrupt_action(dev, handle); + eth_em_interrupt_action(dev, dev->intr_handle); _rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_INTR_LSC, NULL); } diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c index a112b38..4cc7945 100644 --- a/drivers/net/e1000/igb_ethdev.c +++ b/drivers/net/e1000/igb_ethdev.c @@ -136,8 +136,7 @@ static int eth_igb_rxq_interrupt_setup(struct rte_eth_dev *dev); static int eth_igb_interrupt_get_status(struct rte_eth_dev *dev); static int eth_igb_interrupt_action(struct rte_eth_dev *dev, struct rte_intr_handle *handle); -static void eth_igb_interrupt_handler(struct rte_intr_handle *handle, - void *param); +static void eth_igb_interrupt_handler(void *param); static int igb_hardware_init(struct e1000_hw *hw); static void igb_hw_control_acquire(struct e1000_hw *hw); static void igb_hw_control_release(struct e1000_hw *hw); @@ -283,8 +282,7 @@ static void eth_igb_assign_msix_vector(struct e1000_hw *hw, int8_t direction, static void eth_igb_write_ivar(struct e1000_hw *hw, uint8_t msix_vector, uint8_t index, uint8_t offset); static void eth_igb_configure_msix_intr(struct rte_eth_dev *dev); -static void eth_igbvf_interrupt_handler(struct rte_intr_handle *handle, - void *param); +static void eth_igbvf_interrupt_handler(void *param); static void igbvf_mbx_process(struct rte_eth_dev *dev); /* @@ -2781,12 +2779,12 @@ eth_igb_interrupt_action(struct rte_eth_dev *dev, * void */ static void -eth_igb_interrupt_handler(struct rte_intr_handle *handle, void *param) +eth_igb_interrupt_handler(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; eth_igb_interrupt_get_status(dev); - eth_igb_interrupt_action(dev, handle); + eth_igb_interrupt_action(dev, dev->intr_handle); } static int @@ -2843,13 +2841,12 @@ eth_igbvf_interrupt_action(struct rte_eth_dev *dev, struct rte_intr_handle *intr } static void -eth_igbvf_interrupt_handler(struct rte_intr_handle *handle, - void *param) +eth_igbvf_interrupt_handler(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; eth_igbvf_interrupt_get_status(dev); - eth_igbvf_interrupt_action(dev, handle); + eth_igbvf_interrupt_action(dev, dev->intr_handle); } static int diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c index 570b7b6..5f2188b 100644 --- a/drivers/net/enic/enic_main.c +++ b/drivers/net/enic/enic_main.c @@ -423,8 +423,7 @@ int enic_link_update(struct enic *enic) } static void -enic_intr_handler(__rte_unused struct rte_intr_handle *handle, - void *arg) +enic_intr_handler(void *arg) { struct rte_eth_dev *dev = (struct rte_eth_dev *)arg; struct enic *enic = pmd_priv(dev); diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c index c4fe746..e37bd8f 100644 --- a/drivers/net/fm10k/fm10k_ethdev.c +++ b/drivers/net/fm10k/fm10k_ethdev.c @@ -2541,9 +2541,7 @@ fm10k_dev_handle_fault(struct fm10k_hw *hw, uint32_t eicr) * void */ static void -fm10k_dev_interrupt_handler_pf( - struct rte_intr_handle *handle, - void *param) +fm10k_dev_interrupt_handler_pf(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; struct fm10k_hw *hw = FM10K_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -2593,7 +2591,7 @@ fm10k_dev_interrupt_handler_pf( FM10K_WRITE_REG(hw, FM10K_ITR(0), FM10K_ITR_AUTOMASK | FM10K_ITR_MASK_CLEAR); /* Re-enable interrupt from host side */ - rte_intr_enable(handle); + rte_intr_enable(dev->intr_handle); } /** @@ -2608,9 +2606,7 @@ fm10k_dev_interrupt_handler_pf( * void */ static void -fm10k_dev_interrupt_handler_vf( - struct rte_intr_handle *handle, - void *param) +fm10k_dev_interrupt_handler_vf(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; struct fm10k_hw *hw = FM10K_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -2627,7 +2623,7 @@ fm10k_dev_interrupt_handler_vf( FM10K_WRITE_REG(hw, FM10K_VFITR(0), FM10K_ITR_AUTOMASK | FM10K_ITR_MASK_CLEAR); /* Re-enable interrupt from host side */ - rte_intr_enable(handle); + rte_intr_enable(dev->intr_handle); } /* Mailbox message handler in VF */ diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 303027b..ddd423c 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -318,8 +318,7 @@ static void i40e_stat_update_48(struct i40e_hw *hw, uint64_t *offset, uint64_t *stat); static void i40e_pf_config_irq0(struct i40e_hw *hw, bool no_queue); -static void i40e_dev_interrupt_handler(struct rte_intr_handle *handle, - void *param); +static void i40e_dev_interrupt_handler(void *param); static int i40e_res_pool_init(struct i40e_res_pool_info *pool, uint32_t base, uint32_t num); static void i40e_res_pool_destroy(struct i40e_res_pool_info *pool); @@ -5770,8 +5769,7 @@ i40e_dev_handle_aq_msg(struct rte_eth_dev *dev) * void */ static void -i40e_dev_interrupt_handler(struct rte_intr_handle *intr_handle, - void *param) +i40e_dev_interrupt_handler(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -5817,7 +5815,7 @@ i40e_dev_interrupt_handler(struct rte_intr_handle *intr_handle, done: /* Enable interrupt */ i40e_pf_enable_irq0(hw); - rte_intr_enable(intr_handle); + rte_intr_enable(dev->intr_handle); } static int diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c index 55fd344..517b48b 100644 --- a/drivers/net/i40e/i40e_ethdev_vf.c +++ b/drivers/net/i40e/i40e_ethdev_vf.c @@ -1420,8 +1420,7 @@ i40evf_handle_aq_msg(struct rte_eth_dev *dev) * void */ static void -i40evf_dev_interrupt_handler(struct rte_intr_handle *intr_handle, - void *param) +i40evf_dev_interrupt_handler(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -1450,7 +1449,7 @@ i40evf_dev_interrupt_handler(struct rte_intr_handle *intr_handle, done: i40evf_enable_irq0(hw); - rte_intr_enable(intr_handle); + rte_intr_enable(dev->intr_handle); } static int diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index 7169007..b979476 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -244,8 +244,7 @@ static int ixgbe_dev_rxq_interrupt_setup(struct rte_eth_dev *dev); static int ixgbe_dev_interrupt_get_status(struct rte_eth_dev *dev); static int ixgbe_dev_interrupt_action(struct rte_eth_dev *dev, struct rte_intr_handle *handle); -static void ixgbe_dev_interrupt_handler(struct rte_intr_handle *handle, - void *param); +static void ixgbe_dev_interrupt_handler(void *param); static void ixgbe_dev_interrupt_delayed_handler(void *param); static void ixgbe_add_rar(struct rte_eth_dev *dev, struct ether_addr *mac_addr, uint32_t index, uint32_t pool); @@ -366,8 +365,7 @@ static int ixgbe_timesync_read_time(struct rte_eth_dev *dev, struct timespec *timestamp); static int ixgbe_timesync_write_time(struct rte_eth_dev *dev, const struct timespec *timestamp); -static void ixgbevf_dev_interrupt_handler(struct rte_intr_handle *handle, - void *param); +static void ixgbevf_dev_interrupt_handler(void *param); static int ixgbe_dev_l2_tunnel_eth_type_conf (struct rte_eth_dev *dev, struct rte_eth_l2_tunnel_conf *l2_tunnel); @@ -3913,13 +3911,12 @@ ixgbe_dev_interrupt_delayed_handler(void *param) * void */ static void -ixgbe_dev_interrupt_handler(struct rte_intr_handle *handle, - void *param) +ixgbe_dev_interrupt_handler(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; ixgbe_dev_interrupt_get_status(dev); - ixgbe_dev_interrupt_action(dev, handle); + ixgbe_dev_interrupt_action(dev, dev->intr_handle); } static int @@ -8159,8 +8156,7 @@ ixgbevf_dev_interrupt_action(struct rte_eth_dev *dev) } static void -ixgbevf_dev_interrupt_handler(__rte_unused struct rte_intr_handle *handle, - void *param) +ixgbevf_dev_interrupt_handler(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c index d79f262..dbd9844 100644 --- a/drivers/net/nfp/nfp_net.c +++ b/drivers/net/nfp/nfp_net.c @@ -63,8 +63,7 @@ /* Prototypes */ static void nfp_net_close(struct rte_eth_dev *dev); static int nfp_net_configure(struct rte_eth_dev *dev); -static void nfp_net_dev_interrupt_handler(struct rte_intr_handle *handle, - void *param); +static void nfp_net_dev_interrupt_handler(void *param); static void nfp_net_dev_interrupt_delayed_handler(void *param); static int nfp_net_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu); static void nfp_net_infos_get(struct rte_eth_dev *dev, @@ -1308,8 +1307,7 @@ nfp_net_irq_unmask(struct rte_eth_dev *dev) } static void -nfp_net_dev_interrupt_handler(__rte_unused struct rte_intr_handle *handle, - void *param) +nfp_net_dev_interrupt_handler(void *param) { int64_t timeout; struct rte_eth_link link; diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c index 0494dbd..ce10924 100644 --- a/drivers/net/qede/qede_ethdev.c +++ b/drivers/net/qede/qede_ethdev.c @@ -279,14 +279,14 @@ static void qede_interrupt_action(struct ecore_hwfn *p_hwfn) } static void -qede_interrupt_handler(struct rte_intr_handle *handle, void *param) +qede_interrupt_handler(void *param) { struct rte_eth_dev *eth_dev = (struct rte_eth_dev *)param; struct qede_dev *qdev = eth_dev->data->dev_private; struct ecore_dev *edev = &qdev->edev; qede_interrupt_action(ECORE_LEADING_HWFN(edev)); - if (rte_intr_enable(handle)) + if (rte_intr_enable(eth_dev->intr_handle)) DP_ERR(edev, "rte_intr_enable failed\n"); } diff --git a/drivers/net/sfc/sfc_intr.c b/drivers/net/sfc/sfc_intr.c index d06980e..fa7cc3d 100644 --- a/drivers/net/sfc/sfc_intr.c +++ b/drivers/net/sfc/sfc_intr.c @@ -68,13 +68,14 @@ sfc_intr_handle_mgmt_evq(struct sfc_adapter *sa) } static void -sfc_intr_line_handler(struct rte_intr_handle *intr_handle, void *cb_arg) +sfc_intr_line_handler(void *cb_arg) { struct sfc_adapter *sa = (struct sfc_adapter *)cb_arg; efx_nic_t *enp = sa->nic; boolean_t fatal; uint32_t qmask; unsigned int lsc_seq = sa->port.lsc_seq; + struct rte_pci_device *pci_dev = SFC_DEV_TO_PCI(sa->eth_dev); sfc_log_init(sa, "entry"); @@ -97,7 +98,7 @@ sfc_intr_line_handler(struct rte_intr_handle *intr_handle, void *cb_arg) if (qmask & (1 << sa->mgmt_evq_index)) sfc_intr_handle_mgmt_evq(sa); - if (rte_intr_enable(intr_handle) != 0) + if (rte_intr_enable(&pci_dev->intr_handle) != 0) sfc_err(sa, "cannot reenable interrupts"); sfc_log_init(sa, "done"); @@ -113,12 +114,13 @@ sfc_intr_line_handler(struct rte_intr_handle *intr_handle, void *cb_arg) } static void -sfc_intr_message_handler(struct rte_intr_handle *intr_handle, void *cb_arg) +sfc_intr_message_handler(void *cb_arg) { struct sfc_adapter *sa = (struct sfc_adapter *)cb_arg; efx_nic_t *enp = sa->nic; boolean_t fatal; unsigned int lsc_seq = sa->port.lsc_seq; + struct rte_pci_device *pci_dev = SFC_DEV_TO_PCI(sa->eth_dev); sfc_log_init(sa, "entry"); @@ -139,7 +141,7 @@ sfc_intr_message_handler(struct rte_intr_handle *intr_handle, void *cb_arg) sfc_intr_handle_mgmt_evq(sa); - if (rte_intr_enable(intr_handle) != 0) + if (rte_intr_enable(&pci_dev->intr_handle) != 0) sfc_err(sa, "cannot reenable interrupts"); sfc_log_init(sa, "done"); diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index 4dc03b9..9033e7b 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -1191,8 +1191,7 @@ virtio_negotiate_features(struct virtio_hw *hw, uint64_t req_features) * if link state changed. */ static void -virtio_interrupt_handler(struct rte_intr_handle *handle, - void *param) +virtio_interrupt_handler(void *param) { struct rte_eth_dev *dev = param; struct virtio_hw *hw = dev->data->dev_private; @@ -1202,7 +1201,7 @@ virtio_interrupt_handler(struct rte_intr_handle *handle, isr = vtpci_isr(hw); PMD_DRV_LOG(INFO, "interrupt status = %#x", isr); - if (rte_intr_enable(handle) < 0) + if (rte_intr_enable(dev->intr_handle) < 0) PMD_DRV_LOG(ERR, "interrupt enable failed"); if (isr & VIRTIO_PCI_ISR_CONFIG) { diff --git a/lib/librte_eal/common/include/rte_interrupts.h b/lib/librte_eal/common/include/rte_interrupts.h index 6cade01..5d06ed7 100644 --- a/lib/librte_eal/common/include/rte_interrupts.h +++ b/lib/librte_eal/common/include/rte_interrupts.h @@ -51,8 +51,7 @@ extern "C" { struct rte_intr_handle; /** Function to be registered for the specific interrupt */ -typedef void (*rte_intr_callback_fn)(struct rte_intr_handle *intr_handle, - void *cb_arg); +typedef void (*rte_intr_callback_fn)(void *cb_arg); #include <exec-env/rte_interrupts.h> diff --git a/lib/librte_eal/linuxapp/eal/eal_alarm.c b/lib/librte_eal/linuxapp/eal/eal_alarm.c index 8b042ab..fbae461 100644 --- a/lib/librte_eal/linuxapp/eal/eal_alarm.c +++ b/lib/librte_eal/linuxapp/eal/eal_alarm.c @@ -83,7 +83,7 @@ static rte_spinlock_t alarm_list_lk = RTE_SPINLOCK_INITIALIZER; static struct rte_intr_handle intr_handle = {.fd = -1 }; static int handler_registered = 0; -static void eal_alarm_callback(struct rte_intr_handle *hdl, void *arg); +static void eal_alarm_callback(void *arg); int rte_eal_alarm_init(void) @@ -102,8 +102,7 @@ rte_eal_alarm_init(void) } static void -eal_alarm_callback(struct rte_intr_handle *hdl __rte_unused, - void *arg __rte_unused) +eal_alarm_callback(void *arg __rte_unused) { struct timespec now; struct alarm_entry *ap; diff --git a/lib/librte_eal/linuxapp/eal/eal_interrupts.c b/lib/librte_eal/linuxapp/eal/eal_interrupts.c index 92a19cb..19372fd 100644 --- a/lib/librte_eal/linuxapp/eal/eal_interrupts.c +++ b/lib/librte_eal/linuxapp/eal/eal_interrupts.c @@ -278,29 +278,6 @@ vfio_disable_msi(const struct rte_intr_handle *intr_handle) { return ret; } -static int -get_max_intr(const struct rte_intr_handle *intr_handle) -{ - struct rte_intr_source *src; - - TAILQ_FOREACH(src, &intr_sources, next) { - if (src->intr_handle.fd != intr_handle->fd) - continue; - - if (src->intr_handle.max_intr < intr_handle->max_intr) - src->intr_handle.max_intr = intr_handle->max_intr; - if (!src->intr_handle.max_intr) - src->intr_handle.max_intr = 1; - else if (src->intr_handle.max_intr > RTE_MAX_RXTX_INTR_VEC_ID) - src->intr_handle.max_intr - = RTE_MAX_RXTX_INTR_VEC_ID + 1; - - return src->intr_handle.max_intr; - } - - return -1; -} - /* enable MSI-X interrupts */ static int vfio_enable_msix(const struct rte_intr_handle *intr_handle) { @@ -313,15 +290,10 @@ vfio_enable_msix(const struct rte_intr_handle *intr_handle) { irq_set = (struct vfio_irq_set *) irq_set_buf; irq_set->argsz = len; - - ret = get_max_intr(intr_handle); - if (ret < 0) { - RTE_LOG(ERR, EAL, "Invalid number of MSI-X irqs for fd %d\n", - intr_handle->fd); - return -1; - } - - irq_set->count = ret; + /* 0 < irq_set->count < RTE_MAX_RXTX_INTR_VEC_ID + 1 */ + irq_set->count = intr_handle->max_intr ? + (intr_handle->max_intr > RTE_MAX_RXTX_INTR_VEC_ID + 1 ? + RTE_MAX_RXTX_INTR_VEC_ID + 1 : intr_handle->max_intr) : 1; irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD | VFIO_IRQ_SET_ACTION_TRIGGER; irq_set->index = VFIO_PCI_MSIX_IRQ_INDEX; irq_set->start = 0; @@ -757,8 +729,7 @@ eal_intr_process_interrupts(struct epoll_event *events, int nfds) rte_spinlock_unlock(&intr_lock); /* call the actual callback */ - active_cb.cb_fn(&src->intr_handle, - active_cb.cb_arg); + active_cb.cb_fn(active_cb.cb_arg); /*get the lock back. */ rte_spinlock_lock(&intr_lock); -- 2.7.4 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-dev] [PATCH 1/2] eal: clean up interrupt handle 2017-02-22 22:17 ` [dpdk-dev] [PATCH 1/2] " Qi Zhang @ 2017-02-27 16:19 ` Jan Blunck 2017-02-28 1:22 ` Zhang, Qi Z 0 siblings, 1 reply; 14+ messages in thread From: Jan Blunck @ 2017-02-27 16:19 UTC (permalink / raw) To: Qi Zhang; +Cc: Thomas Monjalon, dev On Wed, Feb 22, 2017 at 11:17 PM, Qi Zhang <qi.z.zhang@intel.com> wrote: > --- a/lib/librte_eal/linuxapp/eal/eal_interrupts.c > +++ b/lib/librte_eal/linuxapp/eal/eal_interrupts.c > @@ -278,29 +278,6 @@ vfio_disable_msi(const struct rte_intr_handle *intr_handle) { > return ret; > } > > -static int > -get_max_intr(const struct rte_intr_handle *intr_handle) > -{ > - struct rte_intr_source *src; > - > - TAILQ_FOREACH(src, &intr_sources, next) { > - if (src->intr_handle.fd != intr_handle->fd) > - continue; > - > - if (src->intr_handle.max_intr < intr_handle->max_intr) > - src->intr_handle.max_intr = intr_handle->max_intr; > - if (!src->intr_handle.max_intr) > - src->intr_handle.max_intr = 1; > - else if (src->intr_handle.max_intr > RTE_MAX_RXTX_INTR_VEC_ID) > - src->intr_handle.max_intr > - = RTE_MAX_RXTX_INTR_VEC_ID + 1; > - > - return src->intr_handle.max_intr; > - } > - > - return -1; > -} > - > /* enable MSI-X interrupts */ > static int > vfio_enable_msix(const struct rte_intr_handle *intr_handle) { > @@ -313,15 +290,10 @@ vfio_enable_msix(const struct rte_intr_handle *intr_handle) { > > irq_set = (struct vfio_irq_set *) irq_set_buf; > irq_set->argsz = len; > - > - ret = get_max_intr(intr_handle); > - if (ret < 0) { > - RTE_LOG(ERR, EAL, "Invalid number of MSI-X irqs for fd %d\n", > - intr_handle->fd); > - return -1; > - } > - > - irq_set->count = ret; > + /* 0 < irq_set->count < RTE_MAX_RXTX_INTR_VEC_ID + 1 */ > + irq_set->count = intr_handle->max_intr ? > + (intr_handle->max_intr > RTE_MAX_RXTX_INTR_VEC_ID + 1 ? > + RTE_MAX_RXTX_INTR_VEC_ID + 1 : intr_handle->max_intr) : 1; > irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD | VFIO_IRQ_SET_ACTION_TRIGGER; > irq_set->index = VFIO_PCI_MSIX_IRQ_INDEX; > irq_set->start = 0; The changes (to not change the interrupt handle in intr_sources) seems to be unrelated to the API changes. Can you split this into two commits, please? Also I'm not 100% convinced that the low-level drivers should make extensive use of the ethdev's const intr_handle. I believe that the ethdev ops might be incomplete in that sense that it would be better to add an rx_intr_ctl() operation to the ethdev ops structure and pass control the the low-level device. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-dev] [PATCH 1/2] eal: clean up interrupt handle 2017-02-27 16:19 ` Jan Blunck @ 2017-02-28 1:22 ` Zhang, Qi Z 0 siblings, 0 replies; 14+ messages in thread From: Zhang, Qi Z @ 2017-02-28 1:22 UTC (permalink / raw) To: Jan Blunck; +Cc: Thomas Monjalon, dev HI Jan: > -----Original Message----- > From: jblunck@gmail.com [mailto:jblunck@gmail.com] On Behalf Of Jan Blunck > Sent: Tuesday, February 28, 2017 12:19 AM > To: Zhang, Qi Z <qi.z.zhang@intel.com> > Cc: Thomas Monjalon <thomas.monjalon@6wind.com>; dev <dev@dpdk.org> > Subject: Re: [dpdk-dev] [PATCH 1/2] eal: clean up interrupt handle > > On Wed, Feb 22, 2017 at 11:17 PM, Qi Zhang <qi.z.zhang@intel.com> wrote: > > --- a/lib/librte_eal/linuxapp/eal/eal_interrupts.c > > +++ b/lib/librte_eal/linuxapp/eal/eal_interrupts.c > > @@ -278,29 +278,6 @@ vfio_disable_msi(const struct rte_intr_handle > *intr_handle) { > > return ret; > > } > > > > -static int > > -get_max_intr(const struct rte_intr_handle *intr_handle) -{ > > - struct rte_intr_source *src; > > - > > - TAILQ_FOREACH(src, &intr_sources, next) { > > - if (src->intr_handle.fd != intr_handle->fd) > > - continue; > > - > > - if (src->intr_handle.max_intr < intr_handle->max_intr) > > - src->intr_handle.max_intr = > intr_handle->max_intr; > > - if (!src->intr_handle.max_intr) > > - src->intr_handle.max_intr = 1; > > - else if (src->intr_handle.max_intr > > RTE_MAX_RXTX_INTR_VEC_ID) > > - src->intr_handle.max_intr > > - = RTE_MAX_RXTX_INTR_VEC_ID + 1; > > - > > - return src->intr_handle.max_intr; > > - } > > - > > - return -1; > > -} > > - > > /* enable MSI-X interrupts */ > > static int > > vfio_enable_msix(const struct rte_intr_handle *intr_handle) { @@ > > -313,15 +290,10 @@ vfio_enable_msix(const struct rte_intr_handle > > *intr_handle) { > > > > irq_set = (struct vfio_irq_set *) irq_set_buf; > > irq_set->argsz = len; > > - > > - ret = get_max_intr(intr_handle); > > - if (ret < 0) { > > - RTE_LOG(ERR, EAL, "Invalid number of MSI-X irqs for > fd %d\n", > > - intr_handle->fd); > > - return -1; > > - } > > - > > - irq_set->count = ret; > > + /* 0 < irq_set->count < RTE_MAX_RXTX_INTR_VEC_ID + 1 */ > > + irq_set->count = intr_handle->max_intr ? > > + (intr_handle->max_intr > RTE_MAX_RXTX_INTR_VEC_ID > + 1 ? > > + RTE_MAX_RXTX_INTR_VEC_ID + 1 : > intr_handle->max_intr) > > + : 1; > > irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD | > VFIO_IRQ_SET_ACTION_TRIGGER; > > irq_set->index = VFIO_PCI_MSIX_IRQ_INDEX; > > irq_set->start = 0; > > The changes (to not change the interrupt handle in intr_sources) seems to be > unrelated to the API changes. Can you split this into two commits, please? Yes, it's better to split this. > > Also I'm not 100% convinced that the low-level drivers should make extensive > use of the ethdev's const intr_handle. I believe that the ethdev ops might be > incomplete in that sense that it would be better to add an rx_intr_ctl() > operation to the ethdev ops structure and pass control the the low-level device. I agree your point, abstract the interrupt control should be good, but I want keep this patch's scope to only focus on eal interrupt layer but not include the ethdev layer, there could be a separate patch focus on that. Thanks Qi ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH 2/2] test: update test code 2017-02-22 22:17 [dpdk-dev] [PATCH 0/2] eal: clean up interrupt handle Qi Zhang 2017-02-22 22:17 ` [dpdk-dev] [PATCH 1/2] " Qi Zhang @ 2017-02-22 22:17 ` Qi Zhang 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 0/3] clean up interrupt handle Qi Zhang 2 siblings, 0 replies; 14+ messages in thread From: Qi Zhang @ 2017-02-22 22:17 UTC (permalink / raw) To: thomas.monjalon; +Cc: dev, Qi Zhang Update the test code to algin with callback function change. interface is changed. Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> --- app/test/test_interrupts.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/app/test/test_interrupts.c b/app/test/test_interrupts.c index 371101f..5377292 100644 --- a/app/test/test_interrupts.c +++ b/app/test/test_interrupts.c @@ -199,8 +199,9 @@ test_interrupt_handle_compare(struct rte_intr_handle *intr_handle_l, * Callback for the test interrupt. */ static void -test_interrupt_callback(struct rte_intr_handle *intr_handle, void *arg) +test_interrupt_callback(void *arg) { + struct rte_intr_handle *intr_handle = (struct rte_intr_handle *)arg; if (test_intr_type >= TEST_INTERRUPT_HANDLE_MAX) { printf("invalid interrupt type\n"); flag = -1; @@ -230,9 +231,9 @@ test_interrupt_callback(struct rte_intr_handle *intr_handle, void *arg) * Callback for the test interrupt. */ static void -test_interrupt_callback_1(struct rte_intr_handle *intr_handle, - __attribute__((unused)) void *arg) +test_interrupt_callback_1(void *arg) { + struct rte_intr_handle *intr_handle = (struct rte_intr_handle *)arg; if (test_interrupt_handle_sanity_check(intr_handle) < 0) { printf("null or invalid intr_handle for %s\n", __func__); flag = -1; @@ -364,7 +365,7 @@ test_interrupt_full_path_check(enum test_interrupt_handle_type intr_type) test_intr_handle = intr_handles[intr_type]; test_intr_type = intr_type; if (rte_intr_callback_register(&test_intr_handle, - test_interrupt_callback, NULL) < 0) { + test_interrupt_callback, &test_intr_handle) < 0) { printf("fail to register callback\n"); return -1; } @@ -378,7 +379,7 @@ test_interrupt_full_path_check(enum test_interrupt_handle_type intr_type) rte_delay_ms(TEST_INTERRUPT_CHECK_INTERVAL); if (rte_intr_callback_unregister(&test_intr_handle, - test_interrupt_callback, NULL) < 0) + test_interrupt_callback, &test_intr_handle) < 0) return -1; if (flag == 0) { @@ -441,7 +442,7 @@ test_interrupt(void) /* check if it will fail to register cb with invalid intr_handle */ test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_INVALID]; if (rte_intr_callback_register(&test_intr_handle, - test_interrupt_callback, NULL) == 0) { + test_interrupt_callback, &test_intr_handle) == 0) { printf("unexpectedly register successfully with invalid " "intr_handle\n"); goto out; @@ -449,7 +450,7 @@ test_interrupt(void) /* check if it will fail to register without callback */ test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_VALID]; - if (rte_intr_callback_register(&test_intr_handle, NULL, NULL) == 0) { + if (rte_intr_callback_register(&test_intr_handle, NULL, &test_intr_handle) == 0) { printf("unexpectedly register successfully with " "null callback\n"); goto out; @@ -466,7 +467,7 @@ test_interrupt(void) /* check if it will fail to unregister cb with invalid intr_handle */ test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_INVALID]; if (rte_intr_callback_unregister(&test_intr_handle, - test_interrupt_callback, NULL) > 0) { + test_interrupt_callback, &test_intr_handle) > 0) { printf("unexpectedly unregister successfully with " "invalid intr_handle\n"); goto out; @@ -475,12 +476,12 @@ test_interrupt(void) /* check if it is ok to register the same intr_handle twice */ test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_VALID]; if (rte_intr_callback_register(&test_intr_handle, - test_interrupt_callback, NULL) < 0) { + test_interrupt_callback, &test_intr_handle) < 0) { printf("it fails to register test_interrupt_callback\n"); goto out; } if (rte_intr_callback_register(&test_intr_handle, - test_interrupt_callback_1, NULL) < 0) { + test_interrupt_callback_1, &test_intr_handle) < 0) { printf("it fails to register test_interrupt_callback_1\n"); goto out; } @@ -492,7 +493,7 @@ test_interrupt(void) goto out; } if (rte_intr_callback_unregister(&test_intr_handle, - test_interrupt_callback, NULL) <= 0) { + test_interrupt_callback, &test_intr_handle) <= 0) { printf("it fails to unregister test_interrupt_callback\n"); goto out; } -- 2.7.4 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH v2 0/3] clean up interrupt handle 2017-02-22 22:17 [dpdk-dev] [PATCH 0/2] eal: clean up interrupt handle Qi Zhang 2017-02-22 22:17 ` [dpdk-dev] [PATCH 1/2] " Qi Zhang 2017-02-22 22:17 ` [dpdk-dev] [PATCH 2/2] test: update test code Qi Zhang @ 2017-03-07 9:19 ` Qi Zhang 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 1/3] vfio: keep interrupt source read only Qi Zhang ` (2 more replies) 2 siblings, 3 replies; 14+ messages in thread From: Qi Zhang @ 2017-03-07 9:19 UTC (permalink / raw) To: thomas.monjalon; +Cc: dev, Qi Zhang It seems its not necessary to register an intr_handle for interrupt callback function. "void* cb_arg" shows enough when be used to pass the object that contain the information be required to handle the interrupt event( A typical way which is implemented by almost all driver is by passing a rte_ethdev instance). The patch change the prototype of rte_intr_callback_fn by removing the uncessary intr_handle paramter. v2: - seperate patch 1 in v1 into 2 patches - correct some commit log. Qi Zhang (3): vfio: keep interrupt source read only eal: clean up interrupt handle app/test: update test code app/test/test_interrupts.c | 23 +++++++-------- drivers/net/bnxt/bnxt_irq.c | 3 +- drivers/net/e1000/em_ethdev.c | 8 ++---- drivers/net/e1000/igb_ethdev.c | 15 ++++------ drivers/net/enic/enic_main.c | 3 +- drivers/net/fm10k/fm10k_ethdev.c | 12 +++----- drivers/net/i40e/i40e_ethdev.c | 8 ++---- drivers/net/i40e/i40e_ethdev_vf.c | 5 ++-- drivers/net/ixgbe/ixgbe_ethdev.c | 14 ++++----- drivers/net/nfp/nfp_net.c | 6 ++-- drivers/net/qede/qede_ethdev.c | 4 +-- drivers/net/sfc/sfc_intr.c | 10 ++++--- drivers/net/virtio/virtio_ethdev.c | 5 ++-- lib/librte_eal/common/include/rte_interrupts.h | 3 +- lib/librte_eal/linuxapp/eal/eal_alarm.c | 5 ++-- lib/librte_eal/linuxapp/eal/eal_interrupts.c | 39 ++++---------------------- 16 files changed, 57 insertions(+), 106 deletions(-) -- 2.9.3 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH v2 1/3] vfio: keep interrupt source read only 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 0/3] clean up interrupt handle Qi Zhang @ 2017-03-07 9:19 ` Qi Zhang 2017-03-10 13:05 ` Thomas Monjalon 2017-03-10 13:26 ` Burakov, Anatoly 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 2/3] eal: clean up interrupt handle Qi Zhang 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 3/3] app/test: update test code Qi Zhang 2 siblings, 2 replies; 14+ messages in thread From: Qi Zhang @ 2017-03-07 9:19 UTC (permalink / raw) To: thomas.monjalon; +Cc: dev, Qi Zhang Remove the inappropriate modification on get_max_intr field that keep the intr_source read only. Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> --- lib/librte_eal/linuxapp/eal/eal_interrupts.c | 36 ++++------------------------ 1 file changed, 4 insertions(+), 32 deletions(-) diff --git a/lib/librte_eal/linuxapp/eal/eal_interrupts.c b/lib/librte_eal/linuxapp/eal/eal_interrupts.c index 92a19cb..b50dad8 100644 --- a/lib/librte_eal/linuxapp/eal/eal_interrupts.c +++ b/lib/librte_eal/linuxapp/eal/eal_interrupts.c @@ -278,29 +278,6 @@ vfio_disable_msi(const struct rte_intr_handle *intr_handle) { return ret; } -static int -get_max_intr(const struct rte_intr_handle *intr_handle) -{ - struct rte_intr_source *src; - - TAILQ_FOREACH(src, &intr_sources, next) { - if (src->intr_handle.fd != intr_handle->fd) - continue; - - if (src->intr_handle.max_intr < intr_handle->max_intr) - src->intr_handle.max_intr = intr_handle->max_intr; - if (!src->intr_handle.max_intr) - src->intr_handle.max_intr = 1; - else if (src->intr_handle.max_intr > RTE_MAX_RXTX_INTR_VEC_ID) - src->intr_handle.max_intr - = RTE_MAX_RXTX_INTR_VEC_ID + 1; - - return src->intr_handle.max_intr; - } - - return -1; -} - /* enable MSI-X interrupts */ static int vfio_enable_msix(const struct rte_intr_handle *intr_handle) { @@ -313,15 +290,10 @@ vfio_enable_msix(const struct rte_intr_handle *intr_handle) { irq_set = (struct vfio_irq_set *) irq_set_buf; irq_set->argsz = len; - - ret = get_max_intr(intr_handle); - if (ret < 0) { - RTE_LOG(ERR, EAL, "Invalid number of MSI-X irqs for fd %d\n", - intr_handle->fd); - return -1; - } - - irq_set->count = ret; + /* 0 < irq_set->count < RTE_MAX_RXTX_INTR_VEC_ID + 1 */ + irq_set->count = intr_handle->max_intr ? + (intr_handle->max_intr > RTE_MAX_RXTX_INTR_VEC_ID + 1 ? + RTE_MAX_RXTX_INTR_VEC_ID + 1 : intr_handle->max_intr) : 1; irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD | VFIO_IRQ_SET_ACTION_TRIGGER; irq_set->index = VFIO_PCI_MSIX_IRQ_INDEX; irq_set->start = 0; -- 2.9.3 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-dev] [PATCH v2 1/3] vfio: keep interrupt source read only 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 1/3] vfio: keep interrupt source read only Qi Zhang @ 2017-03-10 13:05 ` Thomas Monjalon 2017-03-10 13:26 ` Burakov, Anatoly 1 sibling, 0 replies; 14+ messages in thread From: Thomas Monjalon @ 2017-03-10 13:05 UTC (permalink / raw) To: Qi Zhang; +Cc: dev, Anatoly Burakov +Cc Anatoly, VFIO maintainer 2017-03-07 04:19, Qi Zhang: > Remove the inappropriate modification on get_max_intr > field that keep the intr_source read only. > > Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-dev] [PATCH v2 1/3] vfio: keep interrupt source read only 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 1/3] vfio: keep interrupt source read only Qi Zhang 2017-03-10 13:05 ` Thomas Monjalon @ 2017-03-10 13:26 ` Burakov, Anatoly 1 sibling, 0 replies; 14+ messages in thread From: Burakov, Anatoly @ 2017-03-10 13:26 UTC (permalink / raw) To: Zhang, Qi Z, thomas.monjalon; +Cc: dev, Zhang, Qi Z > Remove the inappropriate modification on get_max_intr field that keep the > intr_source read only. > > Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> > --- Acked-by: Anatoly Burakov <anatoly.burakov@intel.com> ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH v2 2/3] eal: clean up interrupt handle 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 0/3] clean up interrupt handle Qi Zhang 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 1/3] vfio: keep interrupt source read only Qi Zhang @ 2017-03-07 9:19 ` Qi Zhang 2017-03-30 16:39 ` Thomas Monjalon 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 3/3] app/test: update test code Qi Zhang 2 siblings, 1 reply; 14+ messages in thread From: Qi Zhang @ 2017-03-07 9:19 UTC (permalink / raw) To: thomas.monjalon; +Cc: dev, Qi Zhang The patch change the prototype of callback function (rte_intr_callback_fn) by removing the unnecessary parameter. Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> --- drivers/net/bnxt/bnxt_irq.c | 3 +-- drivers/net/e1000/em_ethdev.c | 8 +++----- drivers/net/e1000/igb_ethdev.c | 15 ++++++--------- drivers/net/enic/enic_main.c | 3 +-- drivers/net/fm10k/fm10k_ethdev.c | 12 ++++-------- drivers/net/i40e/i40e_ethdev.c | 8 +++----- drivers/net/i40e/i40e_ethdev_vf.c | 5 ++--- drivers/net/ixgbe/ixgbe_ethdev.c | 14 +++++--------- drivers/net/nfp/nfp_net.c | 6 ++---- drivers/net/qede/qede_ethdev.c | 4 ++-- drivers/net/sfc/sfc_intr.c | 10 ++++++---- drivers/net/virtio/virtio_ethdev.c | 5 ++--- lib/librte_eal/common/include/rte_interrupts.h | 3 +-- lib/librte_eal/linuxapp/eal/eal_alarm.c | 5 ++--- lib/librte_eal/linuxapp/eal/eal_interrupts.c | 3 +-- 15 files changed, 41 insertions(+), 63 deletions(-) diff --git a/drivers/net/bnxt/bnxt_irq.c b/drivers/net/bnxt/bnxt_irq.c index e93585a..20e17ff 100644 --- a/drivers/net/bnxt/bnxt_irq.c +++ b/drivers/net/bnxt/bnxt_irq.c @@ -45,8 +45,7 @@ * Interrupts */ -static void bnxt_int_handler(struct rte_intr_handle *handle __rte_unused, - void *param) +static void bnxt_int_handler(void *param) { struct rte_eth_dev *eth_dev = (struct rte_eth_dev *)param; struct bnxt *bp = (struct bnxt *)eth_dev->data->dev_private; diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c index 4066ef9..fff0874 100644 --- a/drivers/net/e1000/em_ethdev.c +++ b/drivers/net/e1000/em_ethdev.c @@ -85,8 +85,7 @@ static int eth_em_rxq_interrupt_setup(struct rte_eth_dev *dev); static int eth_em_interrupt_get_status(struct rte_eth_dev *dev); static int eth_em_interrupt_action(struct rte_eth_dev *dev, struct rte_intr_handle *handle); -static void eth_em_interrupt_handler(struct rte_intr_handle *handle, - void *param); +static void eth_em_interrupt_handler(void *param); static int em_hw_init(struct e1000_hw *hw); static int em_hardware_init(struct e1000_hw *hw); @@ -1646,13 +1645,12 @@ eth_em_interrupt_action(struct rte_eth_dev *dev, * void */ static void -eth_em_interrupt_handler(struct rte_intr_handle *handle, - void *param) +eth_em_interrupt_handler(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; eth_em_interrupt_get_status(dev); - eth_em_interrupt_action(dev, handle); + eth_em_interrupt_action(dev, dev->intr_handle); _rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_INTR_LSC, NULL); } diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c index a112b38..4cc7945 100644 --- a/drivers/net/e1000/igb_ethdev.c +++ b/drivers/net/e1000/igb_ethdev.c @@ -136,8 +136,7 @@ static int eth_igb_rxq_interrupt_setup(struct rte_eth_dev *dev); static int eth_igb_interrupt_get_status(struct rte_eth_dev *dev); static int eth_igb_interrupt_action(struct rte_eth_dev *dev, struct rte_intr_handle *handle); -static void eth_igb_interrupt_handler(struct rte_intr_handle *handle, - void *param); +static void eth_igb_interrupt_handler(void *param); static int igb_hardware_init(struct e1000_hw *hw); static void igb_hw_control_acquire(struct e1000_hw *hw); static void igb_hw_control_release(struct e1000_hw *hw); @@ -283,8 +282,7 @@ static void eth_igb_assign_msix_vector(struct e1000_hw *hw, int8_t direction, static void eth_igb_write_ivar(struct e1000_hw *hw, uint8_t msix_vector, uint8_t index, uint8_t offset); static void eth_igb_configure_msix_intr(struct rte_eth_dev *dev); -static void eth_igbvf_interrupt_handler(struct rte_intr_handle *handle, - void *param); +static void eth_igbvf_interrupt_handler(void *param); static void igbvf_mbx_process(struct rte_eth_dev *dev); /* @@ -2781,12 +2779,12 @@ eth_igb_interrupt_action(struct rte_eth_dev *dev, * void */ static void -eth_igb_interrupt_handler(struct rte_intr_handle *handle, void *param) +eth_igb_interrupt_handler(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; eth_igb_interrupt_get_status(dev); - eth_igb_interrupt_action(dev, handle); + eth_igb_interrupt_action(dev, dev->intr_handle); } static int @@ -2843,13 +2841,12 @@ eth_igbvf_interrupt_action(struct rte_eth_dev *dev, struct rte_intr_handle *intr } static void -eth_igbvf_interrupt_handler(struct rte_intr_handle *handle, - void *param) +eth_igbvf_interrupt_handler(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; eth_igbvf_interrupt_get_status(dev); - eth_igbvf_interrupt_action(dev, handle); + eth_igbvf_interrupt_action(dev, dev->intr_handle); } static int diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c index 570b7b6..5f2188b 100644 --- a/drivers/net/enic/enic_main.c +++ b/drivers/net/enic/enic_main.c @@ -423,8 +423,7 @@ int enic_link_update(struct enic *enic) } static void -enic_intr_handler(__rte_unused struct rte_intr_handle *handle, - void *arg) +enic_intr_handler(void *arg) { struct rte_eth_dev *dev = (struct rte_eth_dev *)arg; struct enic *enic = pmd_priv(dev); diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c index c4fe746..e37bd8f 100644 --- a/drivers/net/fm10k/fm10k_ethdev.c +++ b/drivers/net/fm10k/fm10k_ethdev.c @@ -2541,9 +2541,7 @@ fm10k_dev_handle_fault(struct fm10k_hw *hw, uint32_t eicr) * void */ static void -fm10k_dev_interrupt_handler_pf( - struct rte_intr_handle *handle, - void *param) +fm10k_dev_interrupt_handler_pf(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; struct fm10k_hw *hw = FM10K_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -2593,7 +2591,7 @@ fm10k_dev_interrupt_handler_pf( FM10K_WRITE_REG(hw, FM10K_ITR(0), FM10K_ITR_AUTOMASK | FM10K_ITR_MASK_CLEAR); /* Re-enable interrupt from host side */ - rte_intr_enable(handle); + rte_intr_enable(dev->intr_handle); } /** @@ -2608,9 +2606,7 @@ fm10k_dev_interrupt_handler_pf( * void */ static void -fm10k_dev_interrupt_handler_vf( - struct rte_intr_handle *handle, - void *param) +fm10k_dev_interrupt_handler_vf(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; struct fm10k_hw *hw = FM10K_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -2627,7 +2623,7 @@ fm10k_dev_interrupt_handler_vf( FM10K_WRITE_REG(hw, FM10K_VFITR(0), FM10K_ITR_AUTOMASK | FM10K_ITR_MASK_CLEAR); /* Re-enable interrupt from host side */ - rte_intr_enable(handle); + rte_intr_enable(dev->intr_handle); } /* Mailbox message handler in VF */ diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 303027b..ddd423c 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -318,8 +318,7 @@ static void i40e_stat_update_48(struct i40e_hw *hw, uint64_t *offset, uint64_t *stat); static void i40e_pf_config_irq0(struct i40e_hw *hw, bool no_queue); -static void i40e_dev_interrupt_handler(struct rte_intr_handle *handle, - void *param); +static void i40e_dev_interrupt_handler(void *param); static int i40e_res_pool_init(struct i40e_res_pool_info *pool, uint32_t base, uint32_t num); static void i40e_res_pool_destroy(struct i40e_res_pool_info *pool); @@ -5770,8 +5769,7 @@ i40e_dev_handle_aq_msg(struct rte_eth_dev *dev) * void */ static void -i40e_dev_interrupt_handler(struct rte_intr_handle *intr_handle, - void *param) +i40e_dev_interrupt_handler(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -5817,7 +5815,7 @@ i40e_dev_interrupt_handler(struct rte_intr_handle *intr_handle, done: /* Enable interrupt */ i40e_pf_enable_irq0(hw); - rte_intr_enable(intr_handle); + rte_intr_enable(dev->intr_handle); } static int diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c index 55fd344..517b48b 100644 --- a/drivers/net/i40e/i40e_ethdev_vf.c +++ b/drivers/net/i40e/i40e_ethdev_vf.c @@ -1420,8 +1420,7 @@ i40evf_handle_aq_msg(struct rte_eth_dev *dev) * void */ static void -i40evf_dev_interrupt_handler(struct rte_intr_handle *intr_handle, - void *param) +i40evf_dev_interrupt_handler(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -1450,7 +1449,7 @@ i40evf_dev_interrupt_handler(struct rte_intr_handle *intr_handle, done: i40evf_enable_irq0(hw); - rte_intr_enable(intr_handle); + rte_intr_enable(dev->intr_handle); } static int diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index 7169007..b979476 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -244,8 +244,7 @@ static int ixgbe_dev_rxq_interrupt_setup(struct rte_eth_dev *dev); static int ixgbe_dev_interrupt_get_status(struct rte_eth_dev *dev); static int ixgbe_dev_interrupt_action(struct rte_eth_dev *dev, struct rte_intr_handle *handle); -static void ixgbe_dev_interrupt_handler(struct rte_intr_handle *handle, - void *param); +static void ixgbe_dev_interrupt_handler(void *param); static void ixgbe_dev_interrupt_delayed_handler(void *param); static void ixgbe_add_rar(struct rte_eth_dev *dev, struct ether_addr *mac_addr, uint32_t index, uint32_t pool); @@ -366,8 +365,7 @@ static int ixgbe_timesync_read_time(struct rte_eth_dev *dev, struct timespec *timestamp); static int ixgbe_timesync_write_time(struct rte_eth_dev *dev, const struct timespec *timestamp); -static void ixgbevf_dev_interrupt_handler(struct rte_intr_handle *handle, - void *param); +static void ixgbevf_dev_interrupt_handler(void *param); static int ixgbe_dev_l2_tunnel_eth_type_conf (struct rte_eth_dev *dev, struct rte_eth_l2_tunnel_conf *l2_tunnel); @@ -3913,13 +3911,12 @@ ixgbe_dev_interrupt_delayed_handler(void *param) * void */ static void -ixgbe_dev_interrupt_handler(struct rte_intr_handle *handle, - void *param) +ixgbe_dev_interrupt_handler(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; ixgbe_dev_interrupt_get_status(dev); - ixgbe_dev_interrupt_action(dev, handle); + ixgbe_dev_interrupt_action(dev, dev->intr_handle); } static int @@ -8159,8 +8156,7 @@ ixgbevf_dev_interrupt_action(struct rte_eth_dev *dev) } static void -ixgbevf_dev_interrupt_handler(__rte_unused struct rte_intr_handle *handle, - void *param) +ixgbevf_dev_interrupt_handler(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c index d79f262..dbd9844 100644 --- a/drivers/net/nfp/nfp_net.c +++ b/drivers/net/nfp/nfp_net.c @@ -63,8 +63,7 @@ /* Prototypes */ static void nfp_net_close(struct rte_eth_dev *dev); static int nfp_net_configure(struct rte_eth_dev *dev); -static void nfp_net_dev_interrupt_handler(struct rte_intr_handle *handle, - void *param); +static void nfp_net_dev_interrupt_handler(void *param); static void nfp_net_dev_interrupt_delayed_handler(void *param); static int nfp_net_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu); static void nfp_net_infos_get(struct rte_eth_dev *dev, @@ -1308,8 +1307,7 @@ nfp_net_irq_unmask(struct rte_eth_dev *dev) } static void -nfp_net_dev_interrupt_handler(__rte_unused struct rte_intr_handle *handle, - void *param) +nfp_net_dev_interrupt_handler(void *param) { int64_t timeout; struct rte_eth_link link; diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c index 0494dbd..ce10924 100644 --- a/drivers/net/qede/qede_ethdev.c +++ b/drivers/net/qede/qede_ethdev.c @@ -279,14 +279,14 @@ static void qede_interrupt_action(struct ecore_hwfn *p_hwfn) } static void -qede_interrupt_handler(struct rte_intr_handle *handle, void *param) +qede_interrupt_handler(void *param) { struct rte_eth_dev *eth_dev = (struct rte_eth_dev *)param; struct qede_dev *qdev = eth_dev->data->dev_private; struct ecore_dev *edev = &qdev->edev; qede_interrupt_action(ECORE_LEADING_HWFN(edev)); - if (rte_intr_enable(handle)) + if (rte_intr_enable(eth_dev->intr_handle)) DP_ERR(edev, "rte_intr_enable failed\n"); } diff --git a/drivers/net/sfc/sfc_intr.c b/drivers/net/sfc/sfc_intr.c index d06980e..fa7cc3d 100644 --- a/drivers/net/sfc/sfc_intr.c +++ b/drivers/net/sfc/sfc_intr.c @@ -68,13 +68,14 @@ sfc_intr_handle_mgmt_evq(struct sfc_adapter *sa) } static void -sfc_intr_line_handler(struct rte_intr_handle *intr_handle, void *cb_arg) +sfc_intr_line_handler(void *cb_arg) { struct sfc_adapter *sa = (struct sfc_adapter *)cb_arg; efx_nic_t *enp = sa->nic; boolean_t fatal; uint32_t qmask; unsigned int lsc_seq = sa->port.lsc_seq; + struct rte_pci_device *pci_dev = SFC_DEV_TO_PCI(sa->eth_dev); sfc_log_init(sa, "entry"); @@ -97,7 +98,7 @@ sfc_intr_line_handler(struct rte_intr_handle *intr_handle, void *cb_arg) if (qmask & (1 << sa->mgmt_evq_index)) sfc_intr_handle_mgmt_evq(sa); - if (rte_intr_enable(intr_handle) != 0) + if (rte_intr_enable(&pci_dev->intr_handle) != 0) sfc_err(sa, "cannot reenable interrupts"); sfc_log_init(sa, "done"); @@ -113,12 +114,13 @@ sfc_intr_line_handler(struct rte_intr_handle *intr_handle, void *cb_arg) } static void -sfc_intr_message_handler(struct rte_intr_handle *intr_handle, void *cb_arg) +sfc_intr_message_handler(void *cb_arg) { struct sfc_adapter *sa = (struct sfc_adapter *)cb_arg; efx_nic_t *enp = sa->nic; boolean_t fatal; unsigned int lsc_seq = sa->port.lsc_seq; + struct rte_pci_device *pci_dev = SFC_DEV_TO_PCI(sa->eth_dev); sfc_log_init(sa, "entry"); @@ -139,7 +141,7 @@ sfc_intr_message_handler(struct rte_intr_handle *intr_handle, void *cb_arg) sfc_intr_handle_mgmt_evq(sa); - if (rte_intr_enable(intr_handle) != 0) + if (rte_intr_enable(&pci_dev->intr_handle) != 0) sfc_err(sa, "cannot reenable interrupts"); sfc_log_init(sa, "done"); diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index 4dc03b9..9033e7b 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -1191,8 +1191,7 @@ virtio_negotiate_features(struct virtio_hw *hw, uint64_t req_features) * if link state changed. */ static void -virtio_interrupt_handler(struct rte_intr_handle *handle, - void *param) +virtio_interrupt_handler(void *param) { struct rte_eth_dev *dev = param; struct virtio_hw *hw = dev->data->dev_private; @@ -1202,7 +1201,7 @@ virtio_interrupt_handler(struct rte_intr_handle *handle, isr = vtpci_isr(hw); PMD_DRV_LOG(INFO, "interrupt status = %#x", isr); - if (rte_intr_enable(handle) < 0) + if (rte_intr_enable(dev->intr_handle) < 0) PMD_DRV_LOG(ERR, "interrupt enable failed"); if (isr & VIRTIO_PCI_ISR_CONFIG) { diff --git a/lib/librte_eal/common/include/rte_interrupts.h b/lib/librte_eal/common/include/rte_interrupts.h index 6cade01..5d06ed7 100644 --- a/lib/librte_eal/common/include/rte_interrupts.h +++ b/lib/librte_eal/common/include/rte_interrupts.h @@ -51,8 +51,7 @@ extern "C" { struct rte_intr_handle; /** Function to be registered for the specific interrupt */ -typedef void (*rte_intr_callback_fn)(struct rte_intr_handle *intr_handle, - void *cb_arg); +typedef void (*rte_intr_callback_fn)(void *cb_arg); #include <exec-env/rte_interrupts.h> diff --git a/lib/librte_eal/linuxapp/eal/eal_alarm.c b/lib/librte_eal/linuxapp/eal/eal_alarm.c index 8b042ab..fbae461 100644 --- a/lib/librte_eal/linuxapp/eal/eal_alarm.c +++ b/lib/librte_eal/linuxapp/eal/eal_alarm.c @@ -83,7 +83,7 @@ static rte_spinlock_t alarm_list_lk = RTE_SPINLOCK_INITIALIZER; static struct rte_intr_handle intr_handle = {.fd = -1 }; static int handler_registered = 0; -static void eal_alarm_callback(struct rte_intr_handle *hdl, void *arg); +static void eal_alarm_callback(void *arg); int rte_eal_alarm_init(void) @@ -102,8 +102,7 @@ rte_eal_alarm_init(void) } static void -eal_alarm_callback(struct rte_intr_handle *hdl __rte_unused, - void *arg __rte_unused) +eal_alarm_callback(void *arg __rte_unused) { struct timespec now; struct alarm_entry *ap; diff --git a/lib/librte_eal/linuxapp/eal/eal_interrupts.c b/lib/librte_eal/linuxapp/eal/eal_interrupts.c index b50dad8..19372fd 100644 --- a/lib/librte_eal/linuxapp/eal/eal_interrupts.c +++ b/lib/librte_eal/linuxapp/eal/eal_interrupts.c @@ -729,8 +729,7 @@ eal_intr_process_interrupts(struct epoll_event *events, int nfds) rte_spinlock_unlock(&intr_lock); /* call the actual callback */ - active_cb.cb_fn(&src->intr_handle, - active_cb.cb_arg); + active_cb.cb_fn(active_cb.cb_arg); /*get the lock back. */ rte_spinlock_lock(&intr_lock); -- 2.9.3 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-dev] [PATCH v2 2/3] eal: clean up interrupt handle 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 2/3] eal: clean up interrupt handle Qi Zhang @ 2017-03-30 16:39 ` Thomas Monjalon 2017-03-31 0:57 ` Zhang, Qi Z 0 siblings, 1 reply; 14+ messages in thread From: Thomas Monjalon @ 2017-03-30 16:39 UTC (permalink / raw) To: Qi Zhang; +Cc: dev 2017-03-07 04:19, Qi Zhang: > The patch change the prototype of callback function > (rte_intr_callback_fn) by removing the unnecessary parameter. > > Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> > --- > drivers/net/bnxt/bnxt_irq.c | 3 +-- > drivers/net/e1000/em_ethdev.c | 8 +++----- > drivers/net/e1000/igb_ethdev.c | 15 ++++++--------- > drivers/net/enic/enic_main.c | 3 +-- > drivers/net/fm10k/fm10k_ethdev.c | 12 ++++-------- > drivers/net/i40e/i40e_ethdev.c | 8 +++----- > drivers/net/i40e/i40e_ethdev_vf.c | 5 ++--- > drivers/net/ixgbe/ixgbe_ethdev.c | 14 +++++--------- > drivers/net/nfp/nfp_net.c | 6 ++---- > drivers/net/qede/qede_ethdev.c | 4 ++-- > drivers/net/sfc/sfc_intr.c | 10 ++++++---- > drivers/net/virtio/virtio_ethdev.c | 5 ++--- > lib/librte_eal/common/include/rte_interrupts.h | 3 +-- > lib/librte_eal/linuxapp/eal/eal_alarm.c | 5 ++--- > lib/librte_eal/linuxapp/eal/eal_interrupts.c | 3 +-- > 15 files changed, 41 insertions(+), 63 deletions(-) bnx2x must be updated. There is an error with bnx2x_interrupt_handler. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-dev] [PATCH v2 2/3] eal: clean up interrupt handle 2017-03-30 16:39 ` Thomas Monjalon @ 2017-03-31 0:57 ` Zhang, Qi Z 0 siblings, 0 replies; 14+ messages in thread From: Zhang, Qi Z @ 2017-03-31 0:57 UTC (permalink / raw) To: Thomas Monjalon; +Cc: dev > -----Original Message----- > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com] > Sent: Friday, March 31, 2017 12:40 AM > To: Zhang, Qi Z <qi.z.zhang@intel.com> > Cc: dev@dpdk.org > Subject: Re: [PATCH v2 2/3] eal: clean up interrupt handle > > 2017-03-07 04:19, Qi Zhang: > > The patch change the prototype of callback function > > (rte_intr_callback_fn) by removing the unnecessary parameter. > > > > Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> > > --- > > drivers/net/bnxt/bnxt_irq.c | 3 +-- > > drivers/net/e1000/em_ethdev.c | 8 +++----- > > drivers/net/e1000/igb_ethdev.c | 15 ++++++--------- > > drivers/net/enic/enic_main.c | 3 +-- > > drivers/net/fm10k/fm10k_ethdev.c | 12 ++++-------- > > drivers/net/i40e/i40e_ethdev.c | 8 +++----- > > drivers/net/i40e/i40e_ethdev_vf.c | 5 ++--- > > drivers/net/ixgbe/ixgbe_ethdev.c | 14 +++++--------- > > drivers/net/nfp/nfp_net.c | 6 ++---- > > drivers/net/qede/qede_ethdev.c | 4 ++-- > > drivers/net/sfc/sfc_intr.c | 10 ++++++---- > > drivers/net/virtio/virtio_ethdev.c | 5 ++--- > > lib/librte_eal/common/include/rte_interrupts.h | 3 +-- > > lib/librte_eal/linuxapp/eal/eal_alarm.c | 5 ++--- > > lib/librte_eal/linuxapp/eal/eal_interrupts.c | 3 +-- > > 15 files changed, 41 insertions(+), 63 deletions(-) > > bnx2x must be updated. > There is an error with bnx2x_interrupt_handler. Will update Thanks! Qi ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH v2 3/3] app/test: update test code 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 0/3] clean up interrupt handle Qi Zhang 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 1/3] vfio: keep interrupt source read only Qi Zhang 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 2/3] eal: clean up interrupt handle Qi Zhang @ 2017-03-07 9:19 ` Qi Zhang 2017-03-10 13:04 ` Thomas Monjalon 2 siblings, 1 reply; 14+ messages in thread From: Qi Zhang @ 2017-03-07 9:19 UTC (permalink / raw) To: thomas.monjalon; +Cc: dev, Qi Zhang Update the test code to algin with callback function change. Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> --- app/test/test_interrupts.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/app/test/test_interrupts.c b/app/test/test_interrupts.c index 371101f..5377292 100644 --- a/app/test/test_interrupts.c +++ b/app/test/test_interrupts.c @@ -199,8 +199,9 @@ test_interrupt_handle_compare(struct rte_intr_handle *intr_handle_l, * Callback for the test interrupt. */ static void -test_interrupt_callback(struct rte_intr_handle *intr_handle, void *arg) +test_interrupt_callback(void *arg) { + struct rte_intr_handle *intr_handle = (struct rte_intr_handle *)arg; if (test_intr_type >= TEST_INTERRUPT_HANDLE_MAX) { printf("invalid interrupt type\n"); flag = -1; @@ -230,9 +231,9 @@ test_interrupt_callback(struct rte_intr_handle *intr_handle, void *arg) * Callback for the test interrupt. */ static void -test_interrupt_callback_1(struct rte_intr_handle *intr_handle, - __attribute__((unused)) void *arg) +test_interrupt_callback_1(void *arg) { + struct rte_intr_handle *intr_handle = (struct rte_intr_handle *)arg; if (test_interrupt_handle_sanity_check(intr_handle) < 0) { printf("null or invalid intr_handle for %s\n", __func__); flag = -1; @@ -364,7 +365,7 @@ test_interrupt_full_path_check(enum test_interrupt_handle_type intr_type) test_intr_handle = intr_handles[intr_type]; test_intr_type = intr_type; if (rte_intr_callback_register(&test_intr_handle, - test_interrupt_callback, NULL) < 0) { + test_interrupt_callback, &test_intr_handle) < 0) { printf("fail to register callback\n"); return -1; } @@ -378,7 +379,7 @@ test_interrupt_full_path_check(enum test_interrupt_handle_type intr_type) rte_delay_ms(TEST_INTERRUPT_CHECK_INTERVAL); if (rte_intr_callback_unregister(&test_intr_handle, - test_interrupt_callback, NULL) < 0) + test_interrupt_callback, &test_intr_handle) < 0) return -1; if (flag == 0) { @@ -441,7 +442,7 @@ test_interrupt(void) /* check if it will fail to register cb with invalid intr_handle */ test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_INVALID]; if (rte_intr_callback_register(&test_intr_handle, - test_interrupt_callback, NULL) == 0) { + test_interrupt_callback, &test_intr_handle) == 0) { printf("unexpectedly register successfully with invalid " "intr_handle\n"); goto out; @@ -449,7 +450,7 @@ test_interrupt(void) /* check if it will fail to register without callback */ test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_VALID]; - if (rte_intr_callback_register(&test_intr_handle, NULL, NULL) == 0) { + if (rte_intr_callback_register(&test_intr_handle, NULL, &test_intr_handle) == 0) { printf("unexpectedly register successfully with " "null callback\n"); goto out; @@ -466,7 +467,7 @@ test_interrupt(void) /* check if it will fail to unregister cb with invalid intr_handle */ test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_INVALID]; if (rte_intr_callback_unregister(&test_intr_handle, - test_interrupt_callback, NULL) > 0) { + test_interrupt_callback, &test_intr_handle) > 0) { printf("unexpectedly unregister successfully with " "invalid intr_handle\n"); goto out; @@ -475,12 +476,12 @@ test_interrupt(void) /* check if it is ok to register the same intr_handle twice */ test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_VALID]; if (rte_intr_callback_register(&test_intr_handle, - test_interrupt_callback, NULL) < 0) { + test_interrupt_callback, &test_intr_handle) < 0) { printf("it fails to register test_interrupt_callback\n"); goto out; } if (rte_intr_callback_register(&test_intr_handle, - test_interrupt_callback_1, NULL) < 0) { + test_interrupt_callback_1, &test_intr_handle) < 0) { printf("it fails to register test_interrupt_callback_1\n"); goto out; } @@ -492,7 +493,7 @@ test_interrupt(void) goto out; } if (rte_intr_callback_unregister(&test_intr_handle, - test_interrupt_callback, NULL) <= 0) { + test_interrupt_callback, &test_intr_handle) <= 0) { printf("it fails to unregister test_interrupt_callback\n"); goto out; } -- 2.9.3 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-dev] [PATCH v2 3/3] app/test: update test code 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 3/3] app/test: update test code Qi Zhang @ 2017-03-10 13:04 ` Thomas Monjalon 0 siblings, 0 replies; 14+ messages in thread From: Thomas Monjalon @ 2017-03-10 13:04 UTC (permalink / raw) To: Qi Zhang; +Cc: dev 2017-03-07 04:19, Qi Zhang: > Update the test code to algin with callback function change. I think this patch must be squashed with the change in the header (patch 2). I have not tested but I guess the tests are not compiling between patch 2 and 3. ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2017-03-31 0:57 UTC | newest] Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-02-22 22:17 [dpdk-dev] [PATCH 0/2] eal: clean up interrupt handle Qi Zhang 2017-02-22 22:17 ` [dpdk-dev] [PATCH 1/2] " Qi Zhang 2017-02-27 16:19 ` Jan Blunck 2017-02-28 1:22 ` Zhang, Qi Z 2017-02-22 22:17 ` [dpdk-dev] [PATCH 2/2] test: update test code Qi Zhang 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 0/3] clean up interrupt handle Qi Zhang 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 1/3] vfio: keep interrupt source read only Qi Zhang 2017-03-10 13:05 ` Thomas Monjalon 2017-03-10 13:26 ` Burakov, Anatoly 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 2/3] eal: clean up interrupt handle Qi Zhang 2017-03-30 16:39 ` Thomas Monjalon 2017-03-31 0:57 ` Zhang, Qi Z 2017-03-07 9:19 ` [dpdk-dev] [PATCH v2 3/3] app/test: update test code Qi Zhang 2017-03-10 13:04 ` Thomas Monjalon
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).