[SK_BUFF]: Convert skb->tail to sk_buff_data_t
So that it is also an offset from skb->head, reduces its size from 8 to 4 bytes on 64bit architectures, allowing us to combine the 4 bytes hole left by the layer headers conversion, reducing struct sk_buff size to 256 bytes, i.e. 4 64byte cachelines, and since the sk_buff slab cache is SLAB_HWCACHE_ALIGN... :-) Many calculations that previously required that skb->{transport,network, mac}_header be first converted to a pointer now can be done directly, being meaningful as offsets or pointers. Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Cette révision appartient à :

révisé par
David S. Miller

Parent
be8bd86321
révision
27a884dc3c
@@ -264,7 +264,7 @@ xpnet_receive(partid_t partid, int channel, struct xpnet_message *msg)
|
||||
|
||||
dev_dbg(xpnet, "<skb->head=0x%p skb->data=0x%p skb->tail=0x%p "
|
||||
"skb->end=0x%p skb->len=%d\n", (void *) skb->head,
|
||||
(void *) skb->data, (void *) skb->tail, (void *) skb->end,
|
||||
(void *)skb->data, skb_tail_pointer(skb), (void *)skb->end,
|
||||
skb->len);
|
||||
|
||||
skb->protocol = eth_type_trans(skb, xpnet_device);
|
||||
@@ -272,7 +272,7 @@ xpnet_receive(partid_t partid, int channel, struct xpnet_message *msg)
|
||||
|
||||
dev_dbg(xpnet, "passing skb to network layer; \n\tskb->head=0x%p "
|
||||
"skb->data=0x%p skb->tail=0x%p skb->end=0x%p skb->len=%d\n",
|
||||
(void *) skb->head, (void *) skb->data, (void *) skb->tail,
|
||||
(void *)skb->head, (void *)skb->data, skb_tail_pointer(skb),
|
||||
(void *) skb->end, skb->len);
|
||||
|
||||
|
||||
@@ -475,7 +475,7 @@ xpnet_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
|
||||
dev_dbg(xpnet, ">skb->head=0x%p skb->data=0x%p skb->tail=0x%p "
|
||||
"skb->end=0x%p skb->len=%d\n", (void *) skb->head,
|
||||
(void *) skb->data, (void *) skb->tail, (void *) skb->end,
|
||||
(void *)skb->data, skb_tail_pointer(skb), (void *)skb->end,
|
||||
skb->len);
|
||||
|
||||
|
||||
@@ -497,7 +497,7 @@ xpnet_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
|
||||
/* get the beginning of the first cacheline and end of last */
|
||||
start_addr = ((u64) skb->data & ~(L1_CACHE_BYTES - 1));
|
||||
end_addr = L1_CACHE_ALIGN((u64) skb->tail);
|
||||
end_addr = L1_CACHE_ALIGN((u64)skb_tail_pointer(skb));
|
||||
|
||||
/* calculate how many bytes to embed in the XPC message */
|
||||
embedded_bytes = 0;
|
||||
@@ -573,7 +573,7 @@ xpnet_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
msg->magic = XPNET_MAGIC;
|
||||
msg->size = end_addr - start_addr;
|
||||
msg->leadin_ignore = (u64) skb->data - start_addr;
|
||||
msg->tailout_ignore = end_addr - (u64) skb->tail;
|
||||
msg->tailout_ignore = end_addr - (u64)skb_tail_pointer(skb);
|
||||
msg->buf_pa = __pa(start_addr);
|
||||
|
||||
dev_dbg(xpnet, "sending XPC message to %d:%d\nmsg->buf_pa="
|
||||
|
Référencer dans un nouveau ticket
Bloquer un utilisateur