diff --git a/drivers/tty/hvc/hvc_haven.c b/drivers/tty/hvc/hvc_haven.c index 31488e578430..ab7238dc4ce5 100644 --- a/drivers/tty/hvc/hvc_haven.c +++ b/drivers/tty/hvc/hvc_haven.c @@ -85,7 +85,9 @@ static int hh_hvc_notify_console_chars(struct notifier_block *this, pr_warn_ratelimited("dropped %d bytes from VM%d - full fifo\n", msg->num_bytes - ret, vm_name); - hvc_kick(); + if (hvc_poll(hh_hvc_data[vm_name].hvc)) + hvc_kick(); + return NOTIFY_OK; } diff --git a/drivers/virt/haven/hh_rm_core.c b/drivers/virt/haven/hh_rm_core.c index 39edd525e0f7..bd177bd77c25 100644 --- a/drivers/virt/haven/hh_rm_core.c +++ b/drivers/virt/haven/hh_rm_core.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -539,6 +540,11 @@ static int hh_rm_send_request(u32 message_id, */ tx_flags = (i == num_fragments) ? HH_MSGQ_TX_PUSH : 0; + /* delay sending console characters to RM */ + if (message_id == HH_RM_RPC_MSG_ID_CALL_VM_CONSOLE_WRITE || + message_id == HH_RM_RPC_MSG_ID_CALL_VM_CONSOLE_FLUSH) + udelay(800); + ret = hh_msgq_send(hh_rm_msgq_desc, send_buff, sizeof(*hdr) + payload_size, tx_flags);