<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux.git/drivers/tty/hvc, branch v4.19</title>
<subtitle>Linux kernel source tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/'/>
<entry>
<title>tty: hvc: hvc_write() fix break condition</title>
<updated>2018-09-10T16:04:31+00:00</updated>
<author>
<name>Nicholas Piggin</name>
<email>npiggin@gmail.com</email>
</author>
<published>2018-09-09T05:39:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=7f2bf7840b74a160f908db83bc8829f8de10629b'/>
<id>7f2bf7840b74a160f908db83bc8829f8de10629b</id>
<content type='text'>
Commit 550ddadcc758 ("tty: hvc: hvc_write() may sleep") broke the
termination condition in case the driver stops accepting characters.
This can result in unnecessary polling of the busy driver.

Restore it by testing the hvc_push return code.

Tested-by: Matteo Croce &lt;mcroce@redhat.com&gt;
Tested-by: Jason Gunthorpe &lt;jgg@mellanox.com&gt;
Tested-by: Leon Romanovsky &lt;leonro@mellanox.com&gt;
Signed-off-by: Nicholas Piggin &lt;npiggin@gmail.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Commit 550ddadcc758 ("tty: hvc: hvc_write() may sleep") broke the
termination condition in case the driver stops accepting characters.
This can result in unnecessary polling of the busy driver.

Restore it by testing the hvc_push return code.

Tested-by: Matteo Croce &lt;mcroce@redhat.com&gt;
Tested-by: Jason Gunthorpe &lt;jgg@mellanox.com&gt;
Tested-by: Leon Romanovsky &lt;leonro@mellanox.com&gt;
Signed-off-by: Nicholas Piggin &lt;npiggin@gmail.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>tty: hvc: hvc_poll() fix read loop batching</title>
<updated>2018-09-10T16:04:31+00:00</updated>
<author>
<name>Nicholas Piggin</name>
<email>npiggin@gmail.com</email>
</author>
<published>2018-09-09T05:39:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=68b2fc714fb1e08385f9c810d84f06affd007350'/>
<id>68b2fc714fb1e08385f9c810d84f06affd007350</id>
<content type='text'>
Commit ec97eaad1383 ("tty: hvc: hvc_poll() break hv read loop")
removes get_chars batching entirely, which slows down large console
operations like paste -- virtio console "feels worse than a 9600 baud
serial line," reports Matteo.

This adds back batching in a more latency friendly way. If the caller
can sleep then we try to fill the entire flip buffer, releasing the
lock and scheduling between each iteration. If it can not sleep, then
batches are limited to 128 bytes. Matteo confirms this fixes the
performance problem.

Latency testing the powerpc OPAL console with OpenBMC UART with a
large paste shows about 0.25ms latency, which seems reasonable. 10ms
latencies were typical for this case before the latency breaking work,
so we still see most of the benefit.

  kopald-1204    0d.h.    5us : hvc_poll &lt;-hvc_handle_interrupt
  kopald-1204    0d.h.    5us : __hvc_poll &lt;-hvc_handle_interrupt
  kopald-1204    0d.h.    5us : _raw_spin_lock_irqsave &lt;-__hvc_poll
  kopald-1204    0d.h.    5us : tty_port_tty_get &lt;-__hvc_poll
  kopald-1204    0d.h.    6us : _raw_spin_lock_irqsave &lt;-tty_port_tty_get
  kopald-1204    0d.h.    6us : _raw_spin_unlock_irqrestore &lt;-tty_port_tty_get
  kopald-1204    0d.h.    6us : tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.    7us : __tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.    7us+: opal_get_chars &lt;-__hvc_poll
  kopald-1204    0d.h.   36us : tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.   36us : __tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.   36us+: opal_get_chars &lt;-__hvc_poll
  kopald-1204    0d.h.   65us : tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.   65us : __tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.   66us+: opal_get_chars &lt;-__hvc_poll
  kopald-1204    0d.h.   94us : tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.   95us : __tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.   95us+: opal_get_chars &lt;-__hvc_poll
  kopald-1204    0d.h.  124us : tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.  124us : __tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.  125us+: opal_get_chars &lt;-__hvc_poll
  kopald-1204    0d.h.  154us : tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.  154us : __tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.  154us+: opal_get_chars &lt;-__hvc_poll
  kopald-1204    0d.h.  183us : tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.  184us : __tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.  184us+: opal_get_chars &lt;-__hvc_poll
  kopald-1204    0d.h.  213us : tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.  213us : __tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.  213us+: opal_get_chars &lt;-__hvc_poll
  kopald-1204    0d.h.  242us : _raw_spin_unlock_irqrestore &lt;-__hvc_poll
  kopald-1204    0d.h.  242us : tty_flip_buffer_push &lt;-__hvc_poll
  kopald-1204    0d.h.  243us : queue_work_on &lt;-tty_flip_buffer_push
  kopald-1204    0d.h.  243us : tty_kref_put &lt;-__hvc_poll
  kopald-1204    0d.h.  243us : hvc_kick &lt;-hvc_handle_interrupt
  kopald-1204    0d.h.  243us : wake_up_process &lt;-hvc_kick
  kopald-1204    0d.h.  244us : try_to_wake_up &lt;-hvc_kick
  kopald-1204    0d.h.  244us : _raw_spin_lock_irqsave &lt;-try_to_wake_up
  kopald-1204    0d.h.  244us : _raw_spin_unlock_irqrestore &lt;-try_to_wake_up

Reported-by: Matteo Croce &lt;mcroce@redhat.com&gt;
Tested-by: Matteo Croce &lt;mcroce@redhat.com&gt;
Tested-by: Jason Gunthorpe &lt;jgg@mellanox.com&gt;
Tested-by: Leon Romanovsky &lt;leonro@mellanox.com&gt;
Signed-off-by: Nicholas Piggin &lt;npiggin@gmail.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Commit ec97eaad1383 ("tty: hvc: hvc_poll() break hv read loop")
removes get_chars batching entirely, which slows down large console
operations like paste -- virtio console "feels worse than a 9600 baud
serial line," reports Matteo.

This adds back batching in a more latency friendly way. If the caller
can sleep then we try to fill the entire flip buffer, releasing the
lock and scheduling between each iteration. If it can not sleep, then
batches are limited to 128 bytes. Matteo confirms this fixes the
performance problem.

Latency testing the powerpc OPAL console with OpenBMC UART with a
large paste shows about 0.25ms latency, which seems reasonable. 10ms
latencies were typical for this case before the latency breaking work,
so we still see most of the benefit.

  kopald-1204    0d.h.    5us : hvc_poll &lt;-hvc_handle_interrupt
  kopald-1204    0d.h.    5us : __hvc_poll &lt;-hvc_handle_interrupt
  kopald-1204    0d.h.    5us : _raw_spin_lock_irqsave &lt;-__hvc_poll
  kopald-1204    0d.h.    5us : tty_port_tty_get &lt;-__hvc_poll
  kopald-1204    0d.h.    6us : _raw_spin_lock_irqsave &lt;-tty_port_tty_get
  kopald-1204    0d.h.    6us : _raw_spin_unlock_irqrestore &lt;-tty_port_tty_get
  kopald-1204    0d.h.    6us : tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.    7us : __tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.    7us+: opal_get_chars &lt;-__hvc_poll
  kopald-1204    0d.h.   36us : tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.   36us : __tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.   36us+: opal_get_chars &lt;-__hvc_poll
  kopald-1204    0d.h.   65us : tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.   65us : __tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.   66us+: opal_get_chars &lt;-__hvc_poll
  kopald-1204    0d.h.   94us : tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.   95us : __tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.   95us+: opal_get_chars &lt;-__hvc_poll
  kopald-1204    0d.h.  124us : tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.  124us : __tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.  125us+: opal_get_chars &lt;-__hvc_poll
  kopald-1204    0d.h.  154us : tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.  154us : __tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.  154us+: opal_get_chars &lt;-__hvc_poll
  kopald-1204    0d.h.  183us : tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.  184us : __tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.  184us+: opal_get_chars &lt;-__hvc_poll
  kopald-1204    0d.h.  213us : tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.  213us : __tty_buffer_request_room &lt;-__hvc_poll
  kopald-1204    0d.h.  213us+: opal_get_chars &lt;-__hvc_poll
  kopald-1204    0d.h.  242us : _raw_spin_unlock_irqrestore &lt;-__hvc_poll
  kopald-1204    0d.h.  242us : tty_flip_buffer_push &lt;-__hvc_poll
  kopald-1204    0d.h.  243us : queue_work_on &lt;-tty_flip_buffer_push
  kopald-1204    0d.h.  243us : tty_kref_put &lt;-__hvc_poll
  kopald-1204    0d.h.  243us : hvc_kick &lt;-hvc_handle_interrupt
  kopald-1204    0d.h.  243us : wake_up_process &lt;-hvc_kick
  kopald-1204    0d.h.  244us : try_to_wake_up &lt;-hvc_kick
  kopald-1204    0d.h.  244us : _raw_spin_lock_irqsave &lt;-try_to_wake_up
  kopald-1204    0d.h.  244us : _raw_spin_unlock_irqrestore &lt;-try_to_wake_up

Reported-by: Matteo Croce &lt;mcroce@redhat.com&gt;
Tested-by: Matteo Croce &lt;mcroce@redhat.com&gt;
Tested-by: Jason Gunthorpe &lt;jgg@mellanox.com&gt;
Tested-by: Leon Romanovsky &lt;leonro@mellanox.com&gt;
Signed-off-by: Nicholas Piggin &lt;npiggin@gmail.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>tty: hvc: hvc_poll() fix read loop hang</title>
<updated>2018-09-10T16:04:31+00:00</updated>
<author>
<name>Nicholas Piggin</name>
<email>npiggin@gmail.com</email>
</author>
<published>2018-09-09T05:39:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=6e7f6b82c60afb46ff71c2127421c66207966d6d'/>
<id>6e7f6b82c60afb46ff71c2127421c66207966d6d</id>
<content type='text'>
Commit ec97eaad1383 ("tty: hvc: hvc_poll() break hv read loop") causes
the virtio console to hang at times (e.g., if you paste a bunch of
characters to it.

The reason is that get_chars must return 0 before we can be sure the
driver will kick or poll input again, but this change only scheduled a
poll if get_chars had returned a full count. Change this to poll on
any &gt; 0 count.

Reported-by: Matteo Croce &lt;mcroce@redhat.com&gt;
Reported-by: Jason Gunthorpe &lt;jgg@mellanox.com&gt;
Tested-by: Matteo Croce &lt;mcroce@redhat.com&gt;
Tested-by: Jason Gunthorpe &lt;jgg@mellanox.com&gt;
Tested-by: Leon Romanovsky &lt;leonro@mellanox.com&gt;
Signed-off-by: Nicholas Piggin &lt;npiggin@gmail.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Commit ec97eaad1383 ("tty: hvc: hvc_poll() break hv read loop") causes
the virtio console to hang at times (e.g., if you paste a bunch of
characters to it.

The reason is that get_chars must return 0 before we can be sure the
driver will kick or poll input again, but this change only scheduled a
poll if get_chars had returned a full count. Change this to poll on
any &gt; 0 count.

Reported-by: Matteo Croce &lt;mcroce@redhat.com&gt;
Reported-by: Jason Gunthorpe &lt;jgg@mellanox.com&gt;
Tested-by: Matteo Croce &lt;mcroce@redhat.com&gt;
Tested-by: Jason Gunthorpe &lt;jgg@mellanox.com&gt;
Tested-by: Leon Romanovsky &lt;leonro@mellanox.com&gt;
Signed-off-by: Nicholas Piggin &lt;npiggin@gmail.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>powerpc/powernv: provide a console flush operation for opal hvc driver</title>
<updated>2018-08-20T10:19:54+00:00</updated>
<author>
<name>Nicholas Piggin</name>
<email>npiggin@gmail.com</email>
</author>
<published>2018-04-30T14:55:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=95b861a76c1ded3e89d33a3d9f4552dce22e9875'/>
<id>95b861a76c1ded3e89d33a3d9f4552dce22e9875</id>
<content type='text'>
Provide the flush hv_op for the opal hvc driver. This will flush the
firmware console buffers without spinning with interrupts disabled.

Cc: Benjamin Herrenschmidt &lt;benh@kernel.crashing.org&gt;
Cc: linuxppc-dev@lists.ozlabs.org
Signed-off-by: Nicholas Piggin &lt;npiggin@gmail.com&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Provide the flush hv_op for the opal hvc driver. This will flush the
firmware console buffers without spinning with interrupts disabled.

Cc: Benjamin Herrenschmidt &lt;benh@kernel.crashing.org&gt;
Cc: linuxppc-dev@lists.ozlabs.org
Signed-off-by: Nicholas Piggin &lt;npiggin@gmail.com&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'topic/hvc' into next</title>
<updated>2018-08-13T06:04:10+00:00</updated>
<author>
<name>Michael Ellerman</name>
<email>mpe@ellerman.id.au</email>
</author>
<published>2018-08-13T06:04:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=70b5c4ee8e3bf7ce107d6926d9c7d8ebb68578c2'/>
<id>70b5c4ee8e3bf7ce107d6926d9c7d8ebb68578c2</id>
<content type='text'>
This branch held some hvc related commits (Hypervisor Virtual Console)
so that they could get some wider testing in linux-next before merging.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This branch held some hvc related commits (Hypervisor Virtual Console)
so that they could get some wider testing in linux-next before merging.
</pre>
</div>
</content>
</entry>
<entry>
<title>tty: hvc: remove unexplained "just in case" spin delay</title>
<updated>2018-07-24T12:09:58+00:00</updated>
<author>
<name>Nicholas Piggin</name>
<email>npiggin@gmail.com</email>
</author>
<published>2018-04-30T14:55:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=cca3d5290ede73b01144aa522910c88b1e02fcef'/>
<id>cca3d5290ede73b01144aa522910c88b1e02fcef</id>
<content type='text'>
This delay was in the very first OPAL console commit 6.5 years ago,
and came from the vio hvc driver. The firmware console has hardened
sufficiently to remove it.

Reviewed-by: Benjamin Herrenschmidt &lt;benh@kernel.crashing.org&gt;
Signed-off-by: Nicholas Piggin &lt;npiggin@gmail.com&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This delay was in the very first OPAL console commit 6.5 years ago,
and came from the vio hvc driver. The firmware console has hardened
sufficiently to remove it.

Reviewed-by: Benjamin Herrenschmidt &lt;benh@kernel.crashing.org&gt;
Signed-off-by: Nicholas Piggin &lt;npiggin@gmail.com&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>powerpc/powernv: implement opal_put_chars_atomic</title>
<updated>2018-07-24T12:09:57+00:00</updated>
<author>
<name>Nicholas Piggin</name>
<email>npiggin@gmail.com</email>
</author>
<published>2018-04-30T14:55:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=17cc1dd4924391b54fb179d0868b89dc96f2ee80'/>
<id>17cc1dd4924391b54fb179d0868b89dc96f2ee80</id>
<content type='text'>
The RAW console does not need writes to be atomic, so relax
opal_put_chars to be able to do partial writes, and implement an
_atomic variant which does not take a spinlock. This API is used
in xmon, so the less locking that is used, the better chance there
is that a crash can be debugged.

Cc: Benjamin Herrenschmidt &lt;benh@kernel.crashing.org&gt;
Signed-off-by: Nicholas Piggin &lt;npiggin@gmail.com&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The RAW console does not need writes to be atomic, so relax
opal_put_chars to be able to do partial writes, and implement an
_atomic variant which does not take a spinlock. This API is used
in xmon, so the less locking that is used, the better chance there
is that a crash can be debugged.

Cc: Benjamin Herrenschmidt &lt;benh@kernel.crashing.org&gt;
Signed-off-by: Nicholas Piggin &lt;npiggin@gmail.com&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>powerpc/powernv: move opal console flushing to udbg</title>
<updated>2018-07-24T12:09:57+00:00</updated>
<author>
<name>Nicholas Piggin</name>
<email>npiggin@gmail.com</email>
</author>
<published>2018-04-30T14:55:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=ac4ac788fdadc6b703ff3322de07dee442e08e1c'/>
<id>ac4ac788fdadc6b703ff3322de07dee442e08e1c</id>
<content type='text'>
OPAL console writes do not have to synchronously flush firmware /
hardware buffers unless they are going through the udbg path.

Remove the unconditional flushing from opal_put_chars. Flush if
there was no space in the buffer as an optimisation (callers loop
waiting for success in that case). udbg flushing is moved to
udbg_opal_putc.

Signed-off-by: Nicholas Piggin &lt;npiggin@gmail.com&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
OPAL console writes do not have to synchronously flush firmware /
hardware buffers unless they are going through the udbg path.

Remove the unconditional flushing from opal_put_chars. Flush if
there was no space in the buffer as an optimisation (callers loop
waiting for success in that case). udbg flushing is moved to
udbg_opal_putc.

Signed-off-by: Nicholas Piggin &lt;npiggin@gmail.com&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>tty: hvc: introduce the hv_ops.flush operation for hvc drivers</title>
<updated>2018-07-23T10:13:20+00:00</updated>
<author>
<name>Nicholas Piggin</name>
<email>npiggin@gmail.com</email>
</author>
<published>2018-04-30T14:55:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=9f65b81f36e31563c5a5e4df3b3b8bc7550b6030'/>
<id>9f65b81f36e31563c5a5e4df3b3b8bc7550b6030</id>
<content type='text'>
Use .flush to wait for drivers to flush their console outside of
the spinlock, to reduce lock/irq latencies.

Flush the hvc console driver after each write, which can help
messages make it out to the console after a crash.

Signed-off-by: Nicholas Piggin &lt;npiggin@gmail.com&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Use .flush to wait for drivers to flush their console outside of
the spinlock, to reduce lock/irq latencies.

Flush the hvc console driver after each write, which can help
messages make it out to the console after a crash.

Signed-off-by: Nicholas Piggin &lt;npiggin@gmail.com&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>tty: hvc: hvc_write() may sleep</title>
<updated>2018-07-23T10:12:32+00:00</updated>
<author>
<name>Nicholas Piggin</name>
<email>npiggin@gmail.com</email>
</author>
<published>2018-04-30T14:55:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=550ddadcc7580ec2a6c22d4ed04291bc6e2428fb'/>
<id>550ddadcc7580ec2a6c22d4ed04291bc6e2428fb</id>
<content type='text'>
Rework the hvc_write loop to drop and re-take the spinlock on each
iteration, add a cond_resched. Don't bother with an initial hvc_push
initially, which makes the logic simpler -- just do a hvc_push on
each time around the loop.

Signed-off-by: Nicholas Piggin &lt;npiggin@gmail.com&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Rework the hvc_write loop to drop and re-take the spinlock on each
iteration, add a cond_resched. Don't bother with an initial hvc_push
initially, which makes the logic simpler -- just do a hvc_push on
each time around the loop.

Signed-off-by: Nicholas Piggin &lt;npiggin@gmail.com&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</pre>
</div>
</content>
</entry>
</feed>
