]> git.baikalelectronics.ru Git - kernel.git/commit
s390/qeth: use skb_cow_head() for L2 OSA xmit
authorJulian Wiedmann <jwi@linux.vnet.ibm.com>
Fri, 18 Aug 2017 08:19:10 +0000 (10:19 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 18 Aug 2017 17:21:30 +0000 (10:21 -0700)
commitc54daf96abcd6dd702ec4adca48c5aefbd3ff548
tree3d24d85688c7492f4c6f383a388c8df5db1838db
parentdc76c53f4e5264b99cfe5c167979df546cf52592
s390/qeth: use skb_cow_head() for L2 OSA xmit

Taking a full copy via skb_realloc_headroom() on every xmit is overkill
and wastes CPU time; all we actually need is to push on the qeth_hdr.
So rework the L2 OSA TX path to avoid the copy.
Minor complications arise because struct qeth_hdr must not cross a page
boundary. So add a new helper qeth_push_hdr() that catches this, and
falls back to the hdr cache that we already use for IQDs.

This change uncovered that qeth's TX completion takes rather long.
Now that we no longer free the original skb straight away and thus call
skb->destructor later than before, throughput regresses significantly.
For now, restore old behaviour by adding an explicit skb_orphan(),
and a big TODO to improve the TX completion time.

Tested-by: Nils Hoppmann <niho@de.ibm.com>
Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/s390/net/qeth_core.h
drivers/s390/net/qeth_core_main.c
drivers/s390/net/qeth_l2_main.c