Message ID | 1475753191-17391-2-git-send-email-bernard.iremonger@intel.com |
---|---|
State | Superseded, archived |
Headers | show |
2016-10-06 12:26, Bernard Iremonger: > void > _rte_eth_dev_callback_process(struct rte_eth_dev *dev, > - enum rte_eth_event_type event) > + enum rte_eth_event_type event, void *param) You need to squash the patches updating the calls to this function. Otherwise, this patch does not compile. [...] > + if (param != NULL) > + dev_cb.cb_arg = (void *) param; You are overriding the user parameter. As it is only for a new event, it can be described in the register API that the user param won't be returned for this event. But a better design would be to add a new parameter to the callback. However it will be an API breakage. > + RTE_ETH_EVENT_VF_MBOX, /**< PF mailbox processing callback */ Sorry I do not parse well this line. The event name is VF_MBOX and the comment is about the callback processing this event on PF side? I would suggest this kind of comment: "message from VF received by PF" [...] > * Pointer to struct rte_eth_dev. > * @param event > * Eth device interrupt event type. > + * @param param > + * Parameter to pass back to user application. > + * Allows the user application to decide if a particular function > + * is permitted. In a more generic case, the parameter gives some details about the event.
Hi Thomas, > Subject: Re: [dpdk-dev] [PATCH v5 01/13] librte_ether: modify internal > callback function > > 2016-10-06 12:26, Bernard Iremonger: > > void > > _rte_eth_dev_callback_process(struct rte_eth_dev *dev, > > - enum rte_eth_event_type event) > > + enum rte_eth_event_type event, void *param) > > You need to squash the patches updating the calls to this function. > Otherwise, this patch does not compile. I will have to squash everything into one patch, separate patches will not compile. > [...] > > + if (param != NULL) > > + dev_cb.cb_arg = (void *) param; > > You are overriding the user parameter. Yes, we want to update the user parameter for the RTE_ETH_EVENT_VF_MBOX > As it is only for a new event, it can be described in the register API that the > user param won't be returned for this event. I will add a description in the rte_eth_dev_callback_register function. > But a better design would be to add a new parameter to the callback. > However it will be an API breakage. I do not want to break the ABI at this point. > > > + RTE_ETH_EVENT_VF_MBOX, /**< PF mailbox processing callback */ > > Sorry I do not parse well this line. > The event name is VF_MBOX and the comment is about the callback > processing this event on PF side? > I would suggest this kind of comment: "message from VF received by PF" Ok. > > [...] > > * Pointer to struct rte_eth_dev. > > * @param event > > * Eth device interrupt event type. > > + * @param param > > + * Parameter to pass back to user application. > > + * Allows the user application to decide if a particular function > > + * is permitted. > > In a more generic case, the parameter gives some details about the event.
2016-10-06 14:33, Iremonger, Bernard: > Hi Thomas, > > > Subject: Re: [dpdk-dev] [PATCH v5 01/13] librte_ether: modify internal > > callback function > > > > 2016-10-06 12:26, Bernard Iremonger: > > > void > > > _rte_eth_dev_callback_process(struct rte_eth_dev *dev, > > > - enum rte_eth_event_type event) > > > + enum rte_eth_event_type event, void *param) > > > > You need to squash the patches updating the calls to this function. > > Otherwise, this patch does not compile. > > I will have to squash everything into one patch, separate patches will not compile. No you can keep a separate patch for the VF event in ixgbe. > > [...] > > > + if (param != NULL) > > > + dev_cb.cb_arg = (void *) param; > > > > You are overriding the user parameter. > > Yes, we want to update the user parameter for the RTE_ETH_EVENT_VF_MBOX > > > As it is only for a new event, it can be described in the register API that the > > user param won't be returned for this event. > > I will add a description in the rte_eth_dev_callback_register function. > > > But a better design would be to add a new parameter to the callback. > > However it will be an API breakage. > > I do not want to break the ABI at this point. Yes, but it can be considered for a later change. > > > + RTE_ETH_EVENT_VF_MBOX, /**< PF mailbox processing callback */ > > > > Sorry I do not parse well this line. > > The event name is VF_MBOX and the comment is about the callback > > processing this event on PF side? > > I would suggest this kind of comment: "message from VF received by PF" > > Ok. > > > > > [...] > > > * Pointer to struct rte_eth_dev. > > > * @param event > > > * Eth device interrupt event type. > > > + * @param param > > > + * Parameter to pass back to user application. > > > + * Allows the user application to decide if a particular function > > > + * is permitted. > > > > In a more generic case, the parameter gives some details about the event. Please consider a rewording here, thanks.
Hi Thomas, <snip> > > > Subject: Re: [dpdk-dev] [PATCH v5 01/13] librte_ether: modify > > > internal callback function > > > > > > 2016-10-06 12:26, Bernard Iremonger: > > > > void > > > > _rte_eth_dev_callback_process(struct rte_eth_dev *dev, > > > > - enum rte_eth_event_type event) > > > > + enum rte_eth_event_type event, void *param) > > > > > > You need to squash the patches updating the calls to this function. > > > Otherwise, this patch does not compile. > > > > I will have to squash everything into one patch, separate patches will not > compile. > > No you can keep a separate patch for the VF event in ixgbe. I have 4 patches at present librte_ether net/ixgbe drivers/net app/test Would this be acceptable or do you just want everything squashed into librte_ether except for net/ixgbe? > > > [...] > > > > + if (param != NULL) > > > > + dev_cb.cb_arg = (void *) param; > > > > > > You are overriding the user parameter. > > > > Yes, we want to update the user parameter for the > > RTE_ETH_EVENT_VF_MBOX I have renamed param to cb_arg to make it clearer what is happening. > > > As it is only for a new event, it can be described in the register > > > API that the user param won't be returned for this event. > > > > I will add a description in the rte_eth_dev_callback_register function. > > > > > But a better design would be to add a new parameter to the callback. > > > However it will be an API breakage. > > > > I do not want to break the ABI at this point. > > Yes, but it can be considered for a later change. Yes, ok > > > > + RTE_ETH_EVENT_VF_MBOX, /**< PF mailbox processing callback */ > > > > > > Sorry I do not parse well this line. > > > The event name is VF_MBOX and the comment is about the callback > > > processing this event on PF side? > > > I would suggest this kind of comment: "message from VF received by PF" > > > > Ok. > > > > > > > > [...] > > > > * Pointer to struct rte_eth_dev. > > > > * @param event > > > > * Eth device interrupt event type. > > > > + * @param param > > > > + * Parameter to pass back to user application. > > > > + * Allows the user application to decide if a particular > > > > + function > > > > + * is permitted. > > > > > > In a more generic case, the parameter gives some details about the > event. > > Please consider a rewording here, thanks. I have reworded here, I hope it is clearer. Regards, Bernard.
2016-10-06 15:32, Iremonger, Bernard: > > > > 2016-10-06 12:26, Bernard Iremonger: > > > > > void > > > > > _rte_eth_dev_callback_process(struct rte_eth_dev *dev, > > > > > - enum rte_eth_event_type event) > > > > > + enum rte_eth_event_type event, void *param) > > > > > > > > You need to squash the patches updating the calls to this function. > > > > Otherwise, this patch does not compile. > > > > > > I will have to squash everything into one patch, separate patches will not > > compile. > > > > No you can keep a separate patch for the VF event in ixgbe. > > I have 4 patches at present > > librte_ether > net/ixgbe > drivers/net > app/test > > Would this be acceptable or do you just want everything squashed into librte_ether except for net/ixgbe? You can test the compilation of each patch with this command: git rebase -i origin/master -x scripts/test-build.sh or just: git rebase -i origin/master -x make I think you need to squash drivers/net (adding just NULL param) and app/test in ethdev patch.
Hi Thomas, > Subject: Re: [dpdk-dev] [PATCH v5 01/13] librte_ether: modify internal > callback function > > 2016-10-06 15:32, Iremonger, Bernard: > > > > > 2016-10-06 12:26, Bernard Iremonger: > > > > > > void > > > > > > _rte_eth_dev_callback_process(struct rte_eth_dev *dev, > > > > > > - enum rte_eth_event_type event) > > > > > > + enum rte_eth_event_type event, void *param) > > > > > > > > > > You need to squash the patches updating the calls to this function. > > > > > Otherwise, this patch does not compile. > > > > > > > > I will have to squash everything into one patch, separate patches > > > > will not > > > compile. > > > > > > No you can keep a separate patch for the VF event in ixgbe. > > > > I have 4 patches at present > > > > librte_ether > > net/ixgbe > > drivers/net > > app/test > > > > Would this be acceptable or do you just want everything squashed into > librte_ether except for net/ixgbe? > > You can test the compilation of each patch with this command: > git rebase -i origin/master -x scripts/test-build.sh or just: > git rebase -i origin/master -x make > > I think you need to squash drivers/net (adding just NULL param) and > app/test in ethdev patch. They do not compile if applied one by one. Ok, I will squash drivers/net and app/test into the librte_ether patch. Regards, Bernard.
diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index c517e88..416ca77 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -2508,7 +2508,7 @@ rte_eth_dev_callback_unregister(uint8_t port_id, void _rte_eth_dev_callback_process(struct rte_eth_dev *dev, - enum rte_eth_event_type event) + enum rte_eth_event_type event, void *param) { struct rte_eth_dev_callback *cb_lst; struct rte_eth_dev_callback dev_cb; @@ -2519,6 +2519,9 @@ _rte_eth_dev_callback_process(struct rte_eth_dev *dev, continue; dev_cb = *cb_lst; cb_lst->active = 1; + if (param != NULL) + dev_cb.cb_arg = (void *) param; + rte_spinlock_unlock(&rte_eth_dev_cb_lock); dev_cb.cb_fn(dev->data->port_id, dev_cb.event, dev_cb.cb_arg); diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index 7218b6f..9fb34ca 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -3026,6 +3026,7 @@ enum rte_eth_event_type { /**< queue state event (enabled/disabled) */ RTE_ETH_EVENT_INTR_RESET, /**< reset interrupt event, sent to VF on PF reset */ + RTE_ETH_EVENT_VF_MBOX, /**< PF mailbox processing callback */ RTE_ETH_EVENT_MAX /**< max value of this enum */ }; @@ -3085,12 +3086,16 @@ int rte_eth_dev_callback_unregister(uint8_t port_id, * Pointer to struct rte_eth_dev. * @param event * Eth device interrupt event type. + * @param param + * Parameter to pass back to user application. + * Allows the user application to decide if a particular function + * is permitted. * * @return * void */ void _rte_eth_dev_callback_process(struct rte_eth_dev *dev, - enum rte_eth_event_type event); + enum rte_eth_event_type event, void *param); /** * When there is no rx packet coming in Rx Queue for a long time, we can