| From a4310fa2f24687888ce80fdb0e88583561a23700 Mon Sep 17 00:00:00 2001 |
| From: Marc Kleine-Budde <mkl@pengutronix.de> |
| Date: Wed, 31 Oct 2018 10:37:46 +0100 |
| Subject: can: dev: can_get_echo_skb(): factor out non sending code to __can_get_echo_skb() |
| |
| From: Marc Kleine-Budde <mkl@pengutronix.de> |
| |
| commit a4310fa2f24687888ce80fdb0e88583561a23700 upstream. |
| |
| This patch factors out all non sending parts of can_get_echo_skb() into |
| a seperate function __can_get_echo_skb(), so that it can be re-used in |
| an upcoming patch. |
| |
| Cc: linux-stable <stable@vger.kernel.org> |
| Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/net/can/dev.c | 36 +++++++++++++++++++++++++----------- |
| include/linux/can/dev.h | 1 + |
| 2 files changed, 26 insertions(+), 11 deletions(-) |
| |
| --- a/drivers/net/can/dev.c |
| +++ b/drivers/net/can/dev.c |
| @@ -423,14 +423,7 @@ void can_put_echo_skb(struct sk_buff *sk |
| } |
| EXPORT_SYMBOL_GPL(can_put_echo_skb); |
| |
| -/* |
| - * Get the skb from the stack and loop it back locally |
| - * |
| - * The function is typically called when the TX done interrupt |
| - * is handled in the device driver. The driver must protect |
| - * access to priv->echo_skb, if necessary. |
| - */ |
| -unsigned int can_get_echo_skb(struct net_device *dev, unsigned int idx) |
| +struct sk_buff *__can_get_echo_skb(struct net_device *dev, unsigned int idx, u8 *len_ptr) |
| { |
| struct can_priv *priv = netdev_priv(dev); |
| |
| @@ -441,13 +434,34 @@ unsigned int can_get_echo_skb(struct net |
| struct can_frame *cf = (struct can_frame *)skb->data; |
| u8 dlc = cf->can_dlc; |
| |
| - netif_rx(priv->echo_skb[idx]); |
| + *len_ptr = dlc; |
| priv->echo_skb[idx] = NULL; |
| |
| - return dlc; |
| + return skb; |
| } |
| |
| - return 0; |
| + return NULL; |
| +} |
| + |
| +/* |
| + * Get the skb from the stack and loop it back locally |
| + * |
| + * The function is typically called when the TX done interrupt |
| + * is handled in the device driver. The driver must protect |
| + * access to priv->echo_skb, if necessary. |
| + */ |
| +unsigned int can_get_echo_skb(struct net_device *dev, unsigned int idx) |
| +{ |
| + struct sk_buff *skb; |
| + u8 len; |
| + |
| + skb = __can_get_echo_skb(dev, idx, &len); |
| + if (!skb) |
| + return 0; |
| + |
| + netif_rx(skb); |
| + |
| + return len; |
| } |
| EXPORT_SYMBOL_GPL(can_get_echo_skb); |
| |
| --- a/include/linux/can/dev.h |
| +++ b/include/linux/can/dev.h |
| @@ -154,6 +154,7 @@ void can_change_state(struct net_device |
| |
| void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, |
| unsigned int idx); |
| +struct sk_buff *__can_get_echo_skb(struct net_device *dev, unsigned int idx, u8 *len_ptr); |
| unsigned int can_get_echo_skb(struct net_device *dev, unsigned int idx); |
| void can_free_echo_skb(struct net_device *dev, unsigned int idx); |
| |