|
@@ -904,6 +904,7 @@ static void vioHandleData(struct HvLpEvent *event)
|
|
|
struct viocharlpevent *cevent = (struct viocharlpevent *)event;
|
|
|
struct port_info *pi;
|
|
|
int index;
|
|
|
+ int num_pushed;
|
|
|
u8 port = cevent->virtual_device;
|
|
|
|
|
|
if (port >= VTTY_PORTS) {
|
|
@@ -964,6 +965,7 @@ static void vioHandleData(struct HvLpEvent *event)
|
|
|
* functionality will only work if built into the kernel and
|
|
|
* then only if sysrq is enabled through the proc filesystem.
|
|
|
*/
|
|
|
+ num_pushed = 0;
|
|
|
for (index = 0; index < cevent->len; index++) {
|
|
|
#ifdef CONFIG_MAGIC_SYSRQ
|
|
|
if (sysrq_enabled) {
|
|
@@ -997,11 +999,10 @@ static void vioHandleData(struct HvLpEvent *event)
|
|
|
printk(VIOCONS_KERN_WARN "input buffer overflow!\n");
|
|
|
break;
|
|
|
}
|
|
|
+ num_pushed++;
|
|
|
}
|
|
|
|
|
|
- /* if cevent->len == 0 then no data was added to the buffer and flip.count == 0 */
|
|
|
- if (tty->flip.count)
|
|
|
- /* The next call resets flip.count when the data is flushed. */
|
|
|
+ if (num_pushed)
|
|
|
tty_flip_buffer_push(tty);
|
|
|
}
|
|
|
|