Ubuntu 16.04.02: ibmveth: Support to enable LSO/CSO for Trunk VEA
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
The Ubuntu-power-systems project |
Fix Released
|
Critical
|
Canonical Kernel Team | ||
linux (Ubuntu) |
Fix Released
|
Critical
|
Unassigned | ||
Zesty |
Fix Released
|
Critical
|
Unassigned | ||
Artful |
Fix Released
|
Critical
|
Unassigned |
Bug Description
== SRU Justification ==
Commit 66aa0678ef is request to fix four issues with the ibmveth driver.
The issues are as follows:
- Issue 1: ibmveth doesn't support largesend and checksum offload features when configured as "Trunk".
- Issue 2: SYN packet drops seen at destination VM. When the packet
originates, it has CHECKSUM_PARTIAL flag set and as it gets delivered to IO
server's inbound Trunk ibmveth, on validating "checksum good" bits in ibmveth
receive routine, SKB's ip_summed field is set with CHECKSUM_
- Issue 3: First packet of a TCP connection will be dropped, if there is
no OVS flow cached in datapath.
- Issue 4: ibmveth driver doesn't have support for SKB's with frag_list.
The details for the fixes to these issues are described in the commits git log.
== Comment: #0 - BRYANT G. LY <email address hidden> - 2017-05-22 08:40:16 ==
---Problem Description---
- Issue 1: ibmveth doesn't support largesend and checksum offload features
when configured as "Trunk". Driver has explicit checks to prevent
enabling these offloads.
- Issue 2: SYN packet drops seen at destination VM. When the packet
originates, it has CHECKSUM_PARTIAL flag set and as it gets delivered to
IO server's inbound Trunk ibmveth, on validating "checksum good" bits
in ibmveth receive routine, SKB's ip_summed field is set with
CHECKSUM_
Bridge) and delivered to outbound Trunk ibmveth. At this point the
outbound ibmveth transmit routine will not set "no checksum" and
"checksum good" bits in transmit buffer descriptor, as it does so only
when the ip_summed field is CHECKSUM_PARTIAL. When this packet gets
delivered to destination VM, TCP layer receives the packet with checksum
value of 0 and with no checksum related flags in ip_summed field. This
leads to packet drops. So, TCP connections never goes through fine.
- Issue 3: First packet of a TCP connection will be dropped, if there is
no OVS flow cached in datapath. OVS while trying to identify the flow,
computes the checksum. The computed checksum will be invalid at the
receiving end, as ibmveth transmit routine zeroes out the pseudo
checksum value in the packet. This leads to packet drop.
- Issue 4: ibmveth driver doesn't have support for SKB's with frag_list.
When Physical NIC has GRO enabled and when OVS bridges these packets,
OVS vport send code will end up calling dev_queue_xmit, which in turn
calls validate_xmit_skb.
In validate_xmit_skb routine, the larger packets will get segmented into
MSS sized segments, if SKB has a frag_list and if the driver to which
they are delivered to doesn't support NETIF_F_FRAGLIST feature.
Contact Information = Bryant G. <email address hidden>
---uname output---
4.8.0-51.54
Machine Type = p8
---Debugger---
A debugger is not configured
---Steps to Reproduce---
Increases performance greatly
The patch has been accepted upstream:
https:/
CVE References
tags: | added: architecture-ppc64le bugnameltc-154875 severity-critical targetmilestone-inin16042 |
Changed in ubuntu: | |
assignee: | nobody → Ubuntu on IBM Power Systems Bug Triage (ubuntu-power-triage) |
affects: | ubuntu → linux (Ubuntu) |
tags: | added: kernel-da-key |
tags: | added: ubuntu-16.04 |
Changed in ubuntu-power-systems: | |
status: | New → Confirmed |
Changed in linux (Ubuntu): | |
importance: | Undecided → Critical |
Changed in ubuntu-power-systems: | |
importance: | Undecided → Critical |
Changed in linux (Ubuntu): | |
assignee: | Ubuntu on IBM Power Systems Bug Triage (ubuntu-power-triage) → Canonical Kernel Team (canonical-kernel-team) |
Changed in ubuntu-power-systems: | |
assignee: | nobody → Canonical Kernel Team (canonical-kernel-team) |
tags: | added: triage-g |
Changed in linux (Ubuntu Zesty): | |
importance: | Undecided → Critical |
Changed in linux (Ubuntu Xenial): | |
importance: | Undecided → Critical |
Changed in linux (Ubuntu Zesty): | |
status: | New → In Progress |
Changed in linux (Ubuntu Xenial): | |
status: | New → In Progress |
Changed in linux (Ubuntu Artful): | |
status: | Confirmed → In Progress |
assignee: | Canonical Kernel Team (canonical-kernel-team) → Joseph Salisbury (jsalisbury) |
Changed in linux (Ubuntu Zesty): | |
assignee: | nobody → Joseph Salisbury (jsalisbury) |
Changed in linux (Ubuntu Xenial): | |
assignee: | nobody → Joseph Salisbury (jsalisbury) |
Changed in linux (Ubuntu Artful): | |
status: | In Progress → Fix Committed |
Changed in linux (Ubuntu Zesty): | |
status: | In Progress → Fix Committed |
description: | updated |
tags: |
added: targetmilestone-inin16043 removed: targetmilestone-inin16042 |
Changed in ubuntu-power-systems: | |
status: | Confirmed → In Progress |
status: | In Progress → Fix Committed |
Changed in ubuntu-power-systems: | |
status: | Fix Committed → In Progress |
Changed in ubuntu-power-systems: | |
status: | In Progress → Fix Released |
status: | Fix Released → In Progress |
tags: |
added: triage-a removed: triage-g |
tags: |
added: triage-g removed: triage-a |
Changed in ubuntu-power-systems: | |
status: | In Progress → Fix Committed |
Changed in ubuntu-power-systems: | |
status: | Fix Committed → Fix Released |
no longer affects: | linux (Ubuntu Xenial) |
Status changed to 'Confirmed' because the bug affects multiple users.