* [PATCH 1/5] tracing/events: add tracepoint to netdev layer
@ 2010-01-18 8:27 Koki Sanagi
0 siblings, 0 replies; only message in thread
From: Koki Sanagi @ 2010-01-18 8:27 UTC (permalink / raw)
To: netdev, davem, nhorman; +Cc: izumi.taku, kaneshige.kenji
This patch adds tracepoints at dev_hard_start_xmit, dev_queue_xmit and
netif_receive_skb function.
netdev_start_xmit entry of driver's transmit function.
netdev_receive_skb entry of netstack(receive).
dev_queue_xmit entry of Qdisc.
Signed-off-by: Koki Sanagi <sanagi.koki@jp.fujitsu.com>
---
include/trace/events/skb.h | 69 ++++++++++++++++++++++++++++++++++++++++++++
net/core/dev.c | 4 ++
2 files changed, 73 insertions(+), 0 deletions(-)
diff --git a/include/trace/events/skb.h b/include/trace/events/skb.h
index 4b2be6d..d732f07 100644
--- a/include/trace/events/skb.h
+++ b/include/trace/events/skb.h
@@ -8,6 +8,75 @@
#include <linux/netdevice.h>
#include <linux/tracepoint.h>
+TRACE_EVENT(dev_queue_xmit,
+
+ TP_PROTO(struct sk_buff *skb,
+ struct net_device *dev),
+
+ TP_ARGS(skb, dev),
+
+ TP_STRUCT__entry(
+ __field( const void *, skbaddr )
+ __field( unsigned int, len )
+ __string( name, dev->name )
+ ),
+
+ TP_fast_assign(
+ __entry->skbaddr = skb;
+ __entry->len = skb->len;
+ __assign_str(name, dev->name);
+ ),
+
+ TP_printk("dev=%s skbaddr=%p len=%u",
+ __get_str(name), __entry->skbaddr, __entry->len)
+);
+
+TRACE_EVENT(netdev_start_xmit,
+
+ TP_PROTO(struct sk_buff *skb,
+ struct net_device *dev),
+
+ TP_ARGS(skb, dev),
+
+ TP_STRUCT__entry(
+ __field( const void *, skbaddr )
+ __field( unsigned int, len )
+ __string( name, dev->name )
+ ),
+
+ TP_fast_assign(
+ __entry->skbaddr = skb;
+ __entry->len = skb->len;
+ __assign_str(name, dev->name);
+ ),
+
+ TP_printk("dev=%s skbaddr=%p len=%u",
+ __get_str(name), __entry->skbaddr, __entry->len)
+);
+
+TRACE_EVENT(netdev_receive_skb,
+
+ TP_PROTO(struct sk_buff *skb,
+ struct net_device *dev),
+
+ TP_ARGS(skb, dev),
+
+ TP_STRUCT__entry(
+ __field( const void *, skbaddr )
+ __field( unsigned int, len )
+ __string( name, dev->name )
+ ),
+
+ TP_fast_assign(
+ __entry->skbaddr = skb;
+ __entry->len = skb->len;
+ __assign_str(name, dev->name);
+ ),
+
+ TP_printk("dev=%s skbaddr=%p len=%u",
+ __get_str(name), __entry->skbaddr, __entry->len)
+);
+
/*
* Tracepoint for free an sk_buff:
*/
diff --git a/net/core/dev.c b/net/core/dev.c
index a008f69..ef38f8e 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -129,6 +129,7 @@
#include <linux/jhash.h>
#include <linux/random.h>
#include <trace/events/napi.h>
+#include <trace/events/skb.h>
#include "net-sysfs.h"
@@ -1810,6 +1811,7 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
int rc = NETDEV_TX_OK;
if (likely(!skb->next)) {
+ trace_netdev_start_xmit(skb, dev);
if (!list_empty(&ptype_all))
dev_queue_xmit_nit(skb, dev);
@@ -2043,6 +2045,7 @@ int dev_queue_xmit(struct sk_buff *skb)
}
gso:
+ trace_dev_queue_xmit(skb, dev);
/* Disable soft irqs for various locks below. Also
* stops preemption for RCU.
*/
@@ -2458,6 +2461,7 @@ int netif_receive_skb(struct sk_buff *skb)
__get_cpu_var(netdev_rx_stat).total++;
+ trace_netdev_receive_skb(skb, orig_dev);
skb_reset_network_header(skb);
skb_reset_transport_header(skb);
skb->mac_len = skb->network_header - skb->mac_header;
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2010-01-18 8:27 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-18 8:27 [PATCH 1/5] tracing/events: add tracepoint to netdev layer Koki Sanagi
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.