datapath: Break up GSO packets before sending to userspace.
On a Xen host, over-MTU GSO packets from virtual machines can end up sent
down by the virtual switch to userspace. This happens, for example, if a
TCP flow has a long enough "pause" that the datapath flow times out. When
this happens, the packet is not marked as GSO when secchan sends it back up
via dpif_execute(), and the packet is then discarded in dp_xmit_skb() as
too large.
This commit solves the problem by breaking GSO packets into MTU-size pieces
before passing them along to userspace.
Tested by running "netperf" between two VMs on different boxes and running
"dpctl dp-del-flows" on the appropriate datapath a few times in the middle
and seeing that the total bandwidth didn't change much. Verified that
packets were actually being broken up by adding a printk call inside the
"if (skb_is_gso())" block.
Thanks to Justin and Keith for review.
Bug #1133.