The kernel TAP device supports TSO for doing segmentation offload. This should be used instead of doing GSO inside the TAP PMD because it will improve performance. If using kernel TSO, no copy is necessary in PMD and only a single syscall would be needed for the TSO mbuf. For example, sending a 64K TSO mbuf would become single writev(); instead of multiple allocations and copies followed by multiple writev's. Doing this would also simplfy code and error handling.