From patchwork Thu Nov 17 17:35:43 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Cedric Bosdonnat X-Patchwork-Id: 9434805 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id C6D476047D for ; Thu, 17 Nov 2016 17:38:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B996528644 for ; Thu, 17 Nov 2016 17:38:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AE78E2968C; Thu, 17 Nov 2016 17:38:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id F15B128644 for ; Thu, 17 Nov 2016 17:38:35 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1c7Qbr-0008Ai-Pv; Thu, 17 Nov 2016 17:36:27 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1c7Qbq-0008AR-JY for xen-devel@lists.xen.org; Thu, 17 Nov 2016 17:36:26 +0000 Received: from [85.158.143.35] by server-10.bemta-6.messagelabs.com id 49/F5-20989-99AED285; Thu, 17 Nov 2016 17:36:25 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprAIsWRWlGSWpSXmKPExsVyuP0uq+7MV7o RBne+sVgs+biYxYHR4+ju30wBjFGsmXlJ+RUJrBkfF2xiLnjsUdG0sYWlgfGkVRcjF4eQwBJG iVMPrjF3MXJysAnYS3T9OcoEYosISEtc+3yZEcRmFiiR2Pu0A8wWFvCTWPtxCjuIzSKgKvH8y 3mwXl4Bc4nDl2eCxSUE5CUuXD3FAmJzClhIHDh8DqxGCKjmzZsFTBD1ghInZz4BquEAmq8usX 6eEMQqeYnmrbOZJzDyzkJSNQuhahaSqgWMzKsYNYpTi8pSi3SNDPWSijLTM0pyEzNzdA0NzPR yU4uLE9NTcxKTivWS83M3MQJDigEIdjD+WRZwiFGSg0lJlJf5pW6EEF9SfkplRmJxRnxRaU5q 8SFGGQ4OJQneApCcYFFqempFWmYOMLhh0hIcPEoivJIgad7igsTc4sx0iNQpRkUpcd4wkIQAS CKjNA+uDRZRlxhlpYR5GYEOEeIpSC3KzSxBlX/FKM7BqCTMmwIyhSczrwRu+iugxUxAi/cI6I AsLklESEk1MLpVXM1daGK0NjIuJDTxg7Ro1S+25S3hgRXt/69pB5cv216z4c5RhrYUo6ka65t Flq1+evDjxleFd4TtbHMP5n4+2JQzdQrjYYl0+9B5r782VRvXyn1S1D8k+jk7w9Z0m4L2/pqW m38/uLFZX1pnbvL+d6Z5WP5DbanyhA2f1WSFtjjM2HnaRomlOCPRUIu5qDgRAOvIDy+jAgAA X-Env-Sender: cbosdonnat@suse.com X-Msg-Ref: server-14.tower-21.messagelabs.com!1479404184!38091716!1 X-Originating-IP: [195.135.221.5] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.0.16; banners=-,-,- X-VirusChecked: Checked Received: (qmail 3925 invoked from network); 17 Nov 2016 17:36:24 -0000 Received: from smtp.nue.novell.com (HELO smtp.nue.novell.com) (195.135.221.5) by server-14.tower-21.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 17 Nov 2016 17:36:24 -0000 Received: from laptop.vms (mhy71-2-88-167-63-197.fbx.proxad.net [88.167.63.197]) by smtp.nue.novell.com with ESMTP (TLS encrypted); Thu, 17 Nov 2016 18:36:22 +0100 From: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= To: xen-devel@lists.xen.org Date: Thu, 17 Nov 2016 18:35:43 +0100 Message-Id: <20161117173617.6697-2-cbosdonnat@suse.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20161117173617.6697-1-cbosdonnat@suse.com> References: <20161117173617.6697-1-cbosdonnat@suse.com> MIME-Version: 1.0 Cc: Wei Liu , Ian Jackson , Cedric Bosdonnat Subject: [Xen-devel] [PATCH v2 01/35] libxl: add LIBXL_LOGD_* and LOG*D function families. X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Cedric Bosdonnat These functions should be used to log messages when the domain id is known. libxl__log will now prepend the log message by "Domain %PRIu32:" if the domain id is a valid one. This aims at helping consumers filter logs on domain IDs. Signed-off-by: Cédric Bosdonnat --- v2: * use the domid from ao or its parent if any. * fix style * remove useless write of 0 at the end of snprintf result. --- tools/libxl/libxl_event.c | 10 +++++++--- tools/libxl/libxl_internal.c | 16 ++++++++++------ tools/libxl/libxl_internal.h | 38 +++++++++++++++++++++++++++++++------- 3 files changed, 48 insertions(+), 16 deletions(-) diff --git a/tools/libxl/libxl_event.c b/tools/libxl/libxl_event.c index 02b39e6..484f9ba 100644 --- a/tools/libxl/libxl_event.c +++ b/tools/libxl/libxl_event.c @@ -1362,7 +1362,7 @@ void libxl__event_disaster(libxl__egc *egc, const char *msg, int errnoval, { EGC_GC; - libxl__log(CTX, XTL_CRITICAL, errnoval, file, line, func, + libxl__log(CTX, XTL_CRITICAL, errnoval, file, line, func, INVALID_DOMID, "DISASTER in event loop: %s%s%s%s", msg, type ? " (relates to event type " : "", @@ -1943,7 +1943,7 @@ libxl__ao *libxl__ao_create(libxl_ctx *ctx, uint32_t domid, ao->poller = libxl__poller_get(&ao->gc); if (!ao->poller) goto out; } - libxl__log(ctx,XTL_DEBUG,-1,file,line,func, + libxl__log(ctx,XTL_DEBUG,-1,file,line,func,domid, "ao %p: create: how=%p callback=%p poller=%p", ao, how, ao->how.callback, ao->poller); @@ -1962,13 +1962,17 @@ int libxl__ao_inprogress(libxl__ao *ao, { AO_GC; int rc; + uint32_t domid = ao->domid; assert(ao->magic == LIBXL__AO_MAGIC); assert(ao->constructing); assert(ao->in_initiator); ao->constructing = 0; - libxl__log(CTX,XTL_DEBUG,-1,file,line,func, + if (ao->nested_root) + domid = ao->nested_root->domid; + + libxl__log(CTX,XTL_DEBUG,-1,file,line,func,domid, "ao %p: inprogress: poller=%p, flags=%s%s%s%s", ao, ao->poller, ao->constructing ? "o" : "", diff --git a/tools/libxl/libxl_internal.c b/tools/libxl/libxl_internal.c index 448dd61..c270a24 100644 --- a/tools/libxl/libxl_internal.c +++ b/tools/libxl/libxl_internal.c @@ -22,7 +22,7 @@ void libxl__alloc_failed(libxl_ctx *ctx, const char *func, #define M "libxl: FATAL ERROR: memory allocation failure" #define L (size ? M " (%s, %lu x %lu)\n" : M " (%s)\n"), \ func, (unsigned long)nmemb, (unsigned long)size - libxl__log(ctx, XTL_CRITICAL, ENOMEM, 0,0, func, L); + libxl__log(ctx, XTL_CRITICAL, ENOMEM, 0,0, func, INVALID_DOMID, L); fprintf(stderr, L); fflush(stderr); _exit(-1); @@ -202,7 +202,7 @@ char *libxl__dirname(libxl__gc *gc, const char *s) void libxl__logv(libxl_ctx *ctx, xentoollog_level msglevel, int errnoval, const char *file, int line, const char *func, - const char *fmt, va_list ap) + uint32_t domid, const char *fmt, va_list ap) { /* WARNING this function may not call any libxl-provided * memory allocation function, as those may @@ -211,6 +211,7 @@ void libxl__logv(libxl_ctx *ctx, xentoollog_level msglevel, int errnoval, char *base = NULL; int rc, esave; char fileline[256]; + char domain[256]; esave = errno; @@ -221,22 +222,25 @@ void libxl__logv(libxl_ctx *ctx, xentoollog_level msglevel, int errnoval, if (file) snprintf(fileline, sizeof(fileline), "%s:%d",file,line); fileline[sizeof(fileline)-1] = 0; + domain[0] = 0; + if (domid != INVALID_DOMID) + snprintf(domain, sizeof(domain), "Domain %"PRIu32":", domid); x: xtl_log(ctx->lg, msglevel, errnoval, "libxl", - "%s%s%s%s" "%s", + "%s%s%s%s%s" "%s", fileline, func&&file?":":"", func?func:"", func||file?": ":"", - base); + domain, base); if (base != enomem) free(base); errno = esave; } void libxl__log(libxl_ctx *ctx, xentoollog_level msglevel, int errnoval, const char *file, int line, const char *func, - const char *fmt, ...) + uint32_t domid, const char *fmt, ...) { va_list ap; va_start(ap, fmt); - libxl__logv(ctx, msglevel, errnoval, file, line, func, fmt, ap); + libxl__logv(ctx, msglevel, errnoval, file, line, func, domid, fmt, ap); va_end(ap); } diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 8366fee..5f46578 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -152,13 +152,22 @@ #define LIBXL__LOGGING_ENABLED #ifdef LIBXL__LOGGING_ENABLED -#define LIBXL__LOG(ctx, loglevel, _f, _a...) libxl__log(ctx, loglevel, -1, __FILE__, __LINE__, __func__, _f, ##_a) -#define LIBXL__LOG_ERRNO(ctx, loglevel, _f, _a...) libxl__log(ctx, loglevel, errno, __FILE__, __LINE__, __func__, _f, ##_a) -#define LIBXL__LOG_ERRNOVAL(ctx, loglevel, errnoval, _f, _a...) libxl__log(ctx, loglevel, errnoval, __FILE__, __LINE__, __func__, _f, ##_a) +#define LIBXL__LOG(ctx, loglevel, _f, _a...) libxl__log(ctx, loglevel, -1, __FILE__, __LINE__, __func__, INVALID_DOMID, _f, ##_a) +#define LIBXL__LOG_ERRNO(ctx, loglevel, _f, _a...) libxl__log(ctx, loglevel, errno, __FILE__, __LINE__, __func__, INVALID_DOMID, _f, ##_a) +#define LIBXL__LOG_ERRNOVAL(ctx, loglevel, errnoval, _f, _a...) libxl__log(ctx, loglevel, errnoval, __FILE__, __LINE__, __func__, INVALID_DOMID, _f, ##_a) + +/* Same log functions as above, but with _d being a domain id. */ +#define LIBXL__LOGD(ctx, loglevel, _d, _f, _a...) libxl__log(ctx, loglevel, -1, __FILE__, __LINE__, __func__, _d, _f, ##_a) +#define LIBXL__LOGD_ERRNO(ctx, loglevel, _d, _f, _a...) libxl__log(ctx, loglevel, errno, __FILE__, __LINE__, __func__, _d, _f, ##_a) +#define LIBXL__LOGD_ERRNOVAL(ctx, loglevel, errnoval, _d, _f, _a...) libxl__log(ctx, loglevel, errnoval, __FILE__, __LINE__, __func__, _d, _f, ##_a) #else #define LIBXL__LOG(ctx, loglevel, _f, _a...) #define LIBXL__LOG_ERRNO(ctx, loglevel, _f, _a...) #define LIBXL__LOG_ERRNOVAL(ctx, loglevel, errnoval, _f, _a...) + +#define LIBXLD__LOG(ctx, loglevel, _d, _f, _a...) +#define LIBXLD__LOG_ERRNO(ctx, loglevel, _d, _f, _a...) +#define LIBXLD__LOG_ERRNOVAL(ctx, loglevel, errnoval, _d, _f, _a...) #endif /* all of these macros preserve errno (saving and restoring) */ @@ -169,14 +178,16 @@ _hidden void libxl__logv(libxl_ctx *ctx, xentoollog_level msglevel, int errnoval, const char *file /* may be 0 */, int line /* ignored if !file */, const char *func /* may be 0 */, + uint32_t domid /* may be INVALID_DOMID */, const char *fmt, va_list al) - __attribute__((format(printf,7,0))); + __attribute__((format(printf,8,0))); _hidden void libxl__log(libxl_ctx *ctx, xentoollog_level msglevel, int errnoval, const char *file /* may be 0 */, int line /* ignored if !file */, const char *func /* may be 0 */, + uint32_t domid /* may be INVALID_DOMID */, const char *fmt, ...) - __attribute__((format(printf,7,8))); + __attribute__((format(printf,8,9))); /* these functions preserve errno (saving and restoring) */ @@ -3875,22 +3886,35 @@ _hidden void libxl__remus_restore_setup(libxl__egc *egc, * void LOG(, const char *fmt, ...); * void LOGE(, const char *fmt, ...); * void LOGEV(, int errnoval, const char *fmt, ...); + * + * void LOGD(, uint32_t domid, const char *fmt, ...); + * void LOGED(, uint32_t domid, const char *fmt, ...); + * void LOGEVD(, int errnoval, uint32_t domid, const char *fmt, ...); * Use * libxl__gc *gc; * - * Trivial convenience wrappers for LIBXL__LOG, LIBXL__LOG_ERRNO and - * LIBXL__LOG_ERRNOVAL, respectively (and thus for libxl__log). + * Trivial convenience wrappers for LIBXL__LOG, LIBXL__LOG_ERRNO, + * LIBXL__LOG_ERRNOVAL, LIBXL__LOGD, LIBXL__LOGD_ERRNO and + * LIBXL__LOGD_ERRNOVAL respectively (and thus for libxl__log). * * XTL_ should exist and be an xentoollog.h log level * So should be one of * DEBUG VERBOSE DETAIL PROGRESS INFO NOTICE WARN ERROR ERROR CRITICAL * Of these, most of libxl uses * DEBUG INFO WARN ERROR + * + * The LOG*D family will preprend the log message with a string formatted + * as follows: 'Domain %PRIu32:'. This should help better automatic sorting + * of log messages per domain. */ #define LOG(l,f, ...) LIBXL__LOG(CTX,XTL_##l,(f),##__VA_ARGS__) #define LOGE(l,f, ...) LIBXL__LOG_ERRNO(CTX,XTL_##l,(f),##__VA_ARGS__) #define LOGEV(l,e,f, ...) LIBXL__LOG_ERRNOVAL(CTX,XTL_##l,(e),(f),##__VA_ARGS__) +#define LOGD(l,d,f, ...) LIBXL__LOGD(CTX,XTL_##l,(d),(f),##__VA_ARGS__) +#define LOGED(l,d,f, ...) LIBXL__LOGD_ERRNO(CTX,XTL_##l,(d),(f),##__VA_ARGS__) +#define LOGEVD(l,e,d,f, ...) LIBXL__LOGD_ERRNOVAL(CTX,XTL_##l,(e),(d),(f),##__VA_ARGS__) + /* Locking functions. See comment for "lock" member of libxl__ctx. */