forked from mirrors/linux
		
	can: dev: let can_get_echo_skb() return dlc of CAN frame
can_get_echo_skb() is usually called in the TX complete handler. The stats->tx_packets and stats->tx_bytes should be updated there, too. This patch simplifies to figure out the size of the sent CAN frame. Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
		
							parent
							
								
									f84cbda06f
								
							
						
					
					
						commit
						cf5046b309
					
				
					 2 changed files with 10 additions and 2 deletions
				
			
		| 
						 | 
					@ -327,16 +327,24 @@ EXPORT_SYMBOL_GPL(can_put_echo_skb);
 | 
				
			||||||
 * is handled in the device driver. The driver must protect
 | 
					 * is handled in the device driver. The driver must protect
 | 
				
			||||||
 * access to priv->echo_skb, if necessary.
 | 
					 * access to priv->echo_skb, if necessary.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void can_get_echo_skb(struct net_device *dev, unsigned int idx)
 | 
					unsigned int can_get_echo_skb(struct net_device *dev, unsigned int idx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct can_priv *priv = netdev_priv(dev);
 | 
						struct can_priv *priv = netdev_priv(dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BUG_ON(idx >= priv->echo_skb_max);
 | 
						BUG_ON(idx >= priv->echo_skb_max);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (priv->echo_skb[idx]) {
 | 
						if (priv->echo_skb[idx]) {
 | 
				
			||||||
 | 
							struct sk_buff *skb = priv->echo_skb[idx];
 | 
				
			||||||
 | 
							struct can_frame *cf = (struct can_frame *)skb->data;
 | 
				
			||||||
 | 
							u8 dlc = cf->can_dlc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		netif_rx(priv->echo_skb[idx]);
 | 
							netif_rx(priv->echo_skb[idx]);
 | 
				
			||||||
		priv->echo_skb[idx] = NULL;
 | 
							priv->echo_skb[idx] = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return dlc;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL_GPL(can_get_echo_skb);
 | 
					EXPORT_SYMBOL_GPL(can_get_echo_skb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -92,7 +92,7 @@ void can_bus_off(struct net_device *dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev,
 | 
					void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev,
 | 
				
			||||||
		      unsigned int idx);
 | 
							      unsigned int idx);
 | 
				
			||||||
void can_get_echo_skb(struct net_device *dev, unsigned int idx);
 | 
					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);
 | 
					void can_free_echo_skb(struct net_device *dev, unsigned int idx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf);
 | 
					struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue