spapr: Implement bug in spapr-vty device to be compatible with PowerVM
commit6c3bc244d3cbdc5545504fda4fae0238ec36a3c0
authorDavid Gibson <david@gibson.dropbear.id.au>
Mon, 20 Nov 2017 06:49:25 +0000 (20 17:49 +1100)
committerDavid Gibson <david@gibson.dropbear.id.au>
Wed, 22 Nov 2017 04:28:37 +0000 (22 15:28 +1100)
tree2f93b88d48701439a7f78de9f348f1feea5ff33d
parentbac658d1a4dc9dd637b2eb5006abda137071f17f
spapr: Implement bug in spapr-vty device to be compatible with PowerVM

The spapr-vty device implements the PAPR defined virtual console,
which is also implemented by IBM's proprietary PowerVM hypervisor.

PowerVM's implementation has a bug where it inserts an extra \0 after
every \r going to the guest.  Because of that Linux's guest side
driver has a workaround which strips \0 characters that appear
immediately after a \r.

That means that when running under qemu, sending a binary stream from
host to guest via spapr-vty which happens to include a \r\0 sequence
will get corrupted by that workaround.

To deal with that, this patch duplicates PowerVM's bug, inserting an
extra \0 after each \r.  Ugly, but the best option available.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Greg Kurz <groug@kaod.org>
hw/char/spapr_vty.c