[NET]: Store skb->timestamp as offset to a base timestamp
Reduces skb size by 8 bytes on 64-bit. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
25ed891019
commit
a61bbcf28a
@ -1009,13 +1009,22 @@ void net_disable_timestamp(void)
|
||||
atomic_dec(&netstamp_needed);
|
||||
}
|
||||
|
||||
static inline void net_timestamp(struct timeval *stamp)
|
||||
void __net_timestamp(struct sk_buff *skb)
|
||||
{
|
||||
struct timeval tv;
|
||||
|
||||
do_gettimeofday(&tv);
|
||||
skb_set_timestamp(skb, &tv);
|
||||
}
|
||||
EXPORT_SYMBOL(__net_timestamp);
|
||||
|
||||
static inline void net_timestamp(struct sk_buff *skb)
|
||||
{
|
||||
if (atomic_read(&netstamp_needed))
|
||||
do_gettimeofday(stamp);
|
||||
__net_timestamp(skb);
|
||||
else {
|
||||
stamp->tv_sec = 0;
|
||||
stamp->tv_usec = 0;
|
||||
skb->tstamp.off_sec = 0;
|
||||
skb->tstamp.off_usec = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1027,7 +1036,8 @@ static inline void net_timestamp(struct timeval *stamp)
|
||||
void dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev)
|
||||
{
|
||||
struct packet_type *ptype;
|
||||
net_timestamp(&skb->stamp);
|
||||
|
||||
net_timestamp(skb);
|
||||
|
||||
rcu_read_lock();
|
||||
list_for_each_entry_rcu(ptype, &ptype_all, list) {
|
||||
@ -1379,8 +1389,8 @@ int netif_rx(struct sk_buff *skb)
|
||||
if (netpoll_rx(skb))
|
||||
return NET_RX_DROP;
|
||||
|
||||
if (!skb->stamp.tv_sec)
|
||||
net_timestamp(&skb->stamp);
|
||||
if (!skb->tstamp.off_sec)
|
||||
net_timestamp(skb);
|
||||
|
||||
/*
|
||||
* The code is rearranged so that the path is the most
|
||||
@ -1566,8 +1576,8 @@ int netif_receive_skb(struct sk_buff *skb)
|
||||
if (skb->dev->poll && netpoll_rx(skb))
|
||||
return NET_RX_DROP;
|
||||
|
||||
if (!skb->stamp.tv_sec)
|
||||
net_timestamp(&skb->stamp);
|
||||
if (!skb->tstamp.off_sec)
|
||||
net_timestamp(skb);
|
||||
|
||||
if (!skb->input_dev)
|
||||
skb->input_dev = skb->dev;
|
||||
|
@ -1217,7 +1217,7 @@ static void neigh_proxy_process(unsigned long arg)
|
||||
|
||||
while (skb != (struct sk_buff *)&tbl->proxy_queue) {
|
||||
struct sk_buff *back = skb;
|
||||
long tdif = back->stamp.tv_usec - now;
|
||||
long tdif = NEIGH_CB(back)->sched_next - now;
|
||||
|
||||
skb = skb->next;
|
||||
if (tdif <= 0) {
|
||||
@ -1248,8 +1248,9 @@ void pneigh_enqueue(struct neigh_table *tbl, struct neigh_parms *p,
|
||||
kfree_skb(skb);
|
||||
return;
|
||||
}
|
||||
skb->stamp.tv_sec = LOCALLY_ENQUEUED;
|
||||
skb->stamp.tv_usec = sched_next;
|
||||
|
||||
NEIGH_CB(skb)->sched_next = sched_next;
|
||||
NEIGH_CB(skb)->flags |= LOCALLY_ENQUEUED;
|
||||
|
||||
spin_lock(&tbl->proxy_queue.lock);
|
||||
if (del_timer(&tbl->proxy_timer)) {
|
||||
|
@ -70,6 +70,8 @@
|
||||
|
||||
static kmem_cache_t *skbuff_head_cache;
|
||||
|
||||
struct timeval __read_mostly skb_tv_base;
|
||||
|
||||
/*
|
||||
* Keep out-of-line to prevent kernel bloat.
|
||||
* __builtin_return_address is not used because it is not always
|
||||
@ -331,7 +333,7 @@ struct sk_buff *skb_clone(struct sk_buff *skb, unsigned int __nocast gfp_mask)
|
||||
|
||||
n->next = n->prev = NULL;
|
||||
n->sk = NULL;
|
||||
C(stamp);
|
||||
C(tstamp);
|
||||
C(dev);
|
||||
C(h);
|
||||
C(nh);
|
||||
@ -408,7 +410,7 @@ static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
|
||||
memcpy(new->cb, old->cb, sizeof(old->cb));
|
||||
new->local_df = old->local_df;
|
||||
new->pkt_type = old->pkt_type;
|
||||
new->stamp = old->stamp;
|
||||
new->tstamp = old->tstamp;
|
||||
new->destructor = NULL;
|
||||
#ifdef CONFIG_NETFILTER
|
||||
new->nfmark = old->nfmark;
|
||||
@ -1645,6 +1647,7 @@ void __init skb_init(void)
|
||||
NULL, NULL);
|
||||
if (!skbuff_head_cache)
|
||||
panic("cannot create skbuff cache");
|
||||
do_gettimeofday(&skb_tv_base);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(___pskb_trim);
|
||||
@ -1678,3 +1681,4 @@ EXPORT_SYMBOL(skb_prepare_seq_read);
|
||||
EXPORT_SYMBOL(skb_seq_read);
|
||||
EXPORT_SYMBOL(skb_abort_seq_read);
|
||||
EXPORT_SYMBOL(skb_find_text);
|
||||
EXPORT_SYMBOL(skb_tv_base);
|
||||
|
Reference in New Issue
Block a user