From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH 3/3] tools/xenconsoled: Log Xen boot messages at startup. Date: Tue, 22 Jul 2014 17:17:16 +0100 Message-ID: <1406045836-9955-4-git-send-email-andrew.cooper3@citrix.com> References: <1406045836-9955-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1406045836-9955-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Xen-devel Cc: Andrew Cooper , Ian Jackson , Ian Campbell List-Id: xen-devel@lists.xenproject.org When xenconsoled starts, there will be log lines in the Xen console ring from boot, even though VIRQ_CON_RING is not yet pending. Add a force option to handle_hv_logs() which bypasses the event channel check, allowing xenconsoled to drain the Xen boot messages when it starts, rather than at the first subsequent time that VIRQ_CON_RING becomes set. Signed-off-by: Andrew Cooper CC: Ian Campbell CC: Ian Jackson --- tools/console/daemon/io.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/tools/console/daemon/io.c b/tools/console/daemon/io.c index b1268fa..ac08b5b 100644 --- a/tools/console/daemon/io.c +++ b/tools/console/daemon/io.c @@ -907,15 +907,15 @@ static void handle_xs(void) free(vec); } -static void handle_hv_logs(xc_evtchn *xce_handle) +static void handle_hv_logs(xc_evtchn *xce_handle, bool force) { static char buffer[1024*16]; char *bufptr = buffer; unsigned int size; static uint32_t index = 0; - evtchn_port_or_error_t port; + evtchn_port_or_error_t port = -1; - if ((port = xc_evtchn_pending(xce_handle)) == -1) + if (!force && ((port = xc_evtchn_pending(xce_handle)) == -1)) return; do @@ -938,7 +938,8 @@ static void handle_hv_logs(xc_evtchn *xce_handle) "%d (%s)", errno, strerror(errno)); } while (size == sizeof(buffer)); - (void)xc_evtchn_unmask(xce_handle, port); + if (port != -1) + (void)xc_evtchn_unmask(xce_handle, port); } static void handle_log_reload(void) @@ -1024,6 +1025,8 @@ void handle_io(void) "%d (%s)", errno, strerror(errno)); goto out; } + /* Log the boot dmesg even if VIRQ_CON_RING isn't pending. */ + handle_hv_logs(xce_handle, true); } xcg_handle = xc_gnttab_open(NULL, 0); @@ -1134,7 +1137,7 @@ void handle_io(void) errno, strerror(errno)); break; } else if (fds[xce_pollfd_idx].revents & POLLIN) - handle_hv_logs(xce_handle); + handle_hv_logs(xce_handle, false); xce_pollfd_idx = -1; } -- 1.7.10.4