提交 f8eb4930 编写于 作者: J Julian Wiedmann 提交者: David S. Miller

s390/qeth: make more use of skb API

Replace some open-coded parts with their proper API calls.

Also remove two skb_[re]set_mac_header() calls in the L2
xmit paths that are clearly no longer required, since at least
commit 6d1ccff6 ("net: reset mac header in dev_start_xmit()").
Signed-off-by: NJulian Wiedmann <jwi@linux.vnet.ibm.com>
Acked-by: NUrsula Braun <ubraun@linux.vnet.ibm.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 cc309f83
...@@ -857,11 +857,6 @@ static inline int qeth_get_ip_version(struct sk_buff *skb) ...@@ -857,11 +857,6 @@ static inline int qeth_get_ip_version(struct sk_buff *skb)
} }
} }
static inline int qeth_get_ip_protocol(struct sk_buff *skb)
{
return ip_hdr(skb)->protocol;
}
static inline void qeth_put_buffer_pool_entry(struct qeth_card *card, static inline void qeth_put_buffer_pool_entry(struct qeth_card *card,
struct qeth_buffer_pool_entry *entry) struct qeth_buffer_pool_entry *entry)
{ {
......
...@@ -3897,7 +3897,6 @@ static inline void __qeth_fill_buffer(struct sk_buff *skb, ...@@ -3897,7 +3897,6 @@ static inline void __qeth_fill_buffer(struct sk_buff *skb,
int length = skb_headlen(skb) - offset; int length = skb_headlen(skb) - offset;
char *data = skb->data + offset; char *data = skb->data + offset;
int length_here, cnt; int length_here, cnt;
struct skb_frag_struct *frag;
/* map linear part into buffer element(s) */ /* map linear part into buffer element(s) */
while (length > 0) { while (length > 0) {
...@@ -3927,10 +3926,10 @@ static inline void __qeth_fill_buffer(struct sk_buff *skb, ...@@ -3927,10 +3926,10 @@ static inline void __qeth_fill_buffer(struct sk_buff *skb,
/* map page frags into buffer element(s) */ /* map page frags into buffer element(s) */
for (cnt = 0; cnt < skb_shinfo(skb)->nr_frags; cnt++) { for (cnt = 0; cnt < skb_shinfo(skb)->nr_frags; cnt++) {
frag = &skb_shinfo(skb)->frags[cnt]; skb_frag_t *frag = &skb_shinfo(skb)->frags[cnt];
data = (char *)page_to_phys(skb_frag_page(frag)) +
frag->page_offset; data = skb_frag_address(frag);
length = frag->size; length = skb_frag_size(frag);
while (length > 0) { while (length > 0) {
length_here = PAGE_SIZE - length_here = PAGE_SIZE -
((unsigned long) data % PAGE_SIZE); ((unsigned long) data % PAGE_SIZE);
...@@ -3976,8 +3975,7 @@ static inline int qeth_fill_buffer(struct qeth_qdio_out_q *queue, ...@@ -3976,8 +3975,7 @@ static inline int qeth_fill_buffer(struct qeth_qdio_out_q *queue,
buffer->element[element].length = hdr_len; buffer->element[element].length = hdr_len;
buffer->element[element].eflags = SBAL_EFLAGS_FIRST_FRAG; buffer->element[element].eflags = SBAL_EFLAGS_FIRST_FRAG;
buf->next_element_to_fill++; buf->next_element_to_fill++;
skb->data += hdr_len; skb_pull(skb, hdr_len);
skb->len -= hdr_len;
} }
/* IQD */ /* IQD */
......
...@@ -752,11 +752,11 @@ static netdev_tx_t qeth_l2_hard_start_xmit(struct sk_buff *skb, ...@@ -752,11 +752,11 @@ static netdev_tx_t qeth_l2_hard_start_xmit(struct sk_buff *skb,
if (!hdr) if (!hdr)
goto tx_drop; goto tx_drop;
elements_needed++; elements_needed++;
skb_reset_mac_header(new_skb);
qeth_l2_fill_header(card, hdr, new_skb, cast_type); qeth_l2_fill_header(card, hdr, new_skb, cast_type);
hdr->hdr.l2.pkt_length = new_skb->len; hdr->hdr.l2.pkt_length = new_skb->len;
memcpy(((char *)hdr) + sizeof(struct qeth_hdr), skb_copy_from_linear_data(new_skb,
skb_mac_header(new_skb), ETH_HLEN); ((char *)hdr) + sizeof(*hdr),
ETH_HLEN);
} else { } else {
/* create a clone with writeable headroom */ /* create a clone with writeable headroom */
new_skb = skb_realloc_headroom(skb, new_skb = skb_realloc_headroom(skb,
...@@ -764,7 +764,6 @@ static netdev_tx_t qeth_l2_hard_start_xmit(struct sk_buff *skb, ...@@ -764,7 +764,6 @@ static netdev_tx_t qeth_l2_hard_start_xmit(struct sk_buff *skb,
if (!new_skb) if (!new_skb)
goto tx_drop; goto tx_drop;
hdr = skb_push(new_skb, sizeof(struct qeth_hdr)); hdr = skb_push(new_skb, sizeof(struct qeth_hdr));
skb_set_mac_header(new_skb, sizeof(struct qeth_hdr));
qeth_l2_fill_header(card, hdr, new_skb, cast_type); qeth_l2_fill_header(card, hdr, new_skb, cast_type);
if (new_skb->ip_summed == CHECKSUM_PARTIAL) if (new_skb->ip_summed == CHECKSUM_PARTIAL)
qeth_l2_hdr_csum(card, hdr, new_skb); qeth_l2_hdr_csum(card, hdr, new_skb);
......
...@@ -2570,7 +2570,7 @@ static void qeth_tso_fill_header(struct qeth_card *card, ...@@ -2570,7 +2570,7 @@ static void qeth_tso_fill_header(struct qeth_card *card,
hdr->ext.hdr_len = 28; hdr->ext.hdr_len = 28;
/*insert non-fix values */ /*insert non-fix values */
hdr->ext.mss = skb_shinfo(skb)->gso_size; hdr->ext.mss = skb_shinfo(skb)->gso_size;
hdr->ext.dg_hdr_len = (__u16)(iph->ihl*4 + tcph->doff*4); hdr->ext.dg_hdr_len = (__u16)(ip_hdrlen(skb) + tcp_hdrlen(skb));
hdr->ext.payload_len = (__u16)(skb->len - hdr->ext.dg_hdr_len - hdr->ext.payload_len = (__u16)(skb->len - hdr->ext.dg_hdr_len -
sizeof(struct qeth_hdr_tso)); sizeof(struct qeth_hdr_tso));
tcph->check = 0; tcph->check = 0;
...@@ -2663,7 +2663,7 @@ static netdev_tx_t qeth_l3_hard_start_xmit(struct sk_buff *skb, ...@@ -2663,7 +2663,7 @@ static netdev_tx_t qeth_l3_hard_start_xmit(struct sk_buff *skb,
/* Ignore segment size from skb_is_gso(), 1 page is always used. */ /* Ignore segment size from skb_is_gso(), 1 page is always used. */
use_tso = skb_is_gso(skb) && use_tso = skb_is_gso(skb) &&
(qeth_get_ip_protocol(skb) == IPPROTO_TCP) && (ipv == 4); (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV4);
if (card->info.type == QETH_CARD_TYPE_IQD) { if (card->info.type == QETH_CARD_TYPE_IQD) {
new_skb = skb; new_skb = skb;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册