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 6d1ccff627
("net: reset mac header in dev_start_xmit()").
Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Acked-by: Ursula Braun <ubraun@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
cc309f83d1
commit
f8eb49306d
@@ -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,
|
|||||||
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,
|
|||||||
|
|
||||||
/* 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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
|
|
||||||
/* 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;
|
||||||
|
Reference in New Issue
Block a user