From patchwork Tue Nov 15 10:18:39 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Cedric Bosdonnat X-Patchwork-Id: 9429319 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 BA62E60469 for ; Tue, 15 Nov 2016 10:21:54 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A2DDE286BF for ; Tue, 15 Nov 2016 10:21:54 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 97EB2286C4; Tue, 15 Nov 2016 10:21:54 +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 F22B2286BF for ; Tue, 15 Nov 2016 10:21:53 +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 1c6aqL-0004ph-R8; Tue, 15 Nov 2016 10:19:57 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1c6aqK-0004pM-3x for xen-devel@lists.xen.org; Tue, 15 Nov 2016 10:19:56 +0000 Received: from [85.158.143.35] by server-8.bemta-6.messagelabs.com id DD/01-19686-B41EA285; Tue, 15 Nov 2016 10:19:55 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprIIsWRWlGSWpSXmKPExsVyuP0uq67XQ60 IgwPdJhZLPi5mcWD0OLr7N1MAYxRrZl5SfkUCa8a0/feYC9a4VZw+fI6tgfGrRRcjF4eQwBJG iR3nWlm6GDk52ATsJbr+HGUCsUUEpCWufb7MCFLELHCCUaJn42Y2kISwgLfE499zWEFsFgFVi e2/j4HFeQUsJHp3TgcbJCEgL3Hh6ikwm1PAUuLn0afsILYQUM2Sy93MEPWCEidnPgGq4QBaoC 6xfp4QSJgZqLV562zmCYy8s5BUzUKomoWkagEj8ypGjeLUorLUIl0jc72kosz0jJLcxMwcXUM DM73c1OLixPTUnMSkYr3k/NxNjMCgYgCCHYyL1wYeYpTkYFIS5RVarRUhxJeUn1KZkVicEV9U mpNafIhRhoNDSYJ3wgOgnGBRanpqRVpmDjC8YdISHDxKIrzTQdK8xQWJucWZ6RCpU4yKUuK8A SAJAZBERmkeXBsspi4xykoJ8zICHSLEU5BalJtZgir/ilGcg1FJmHcRyBSezLwSuOmvgBYzAS 3eZa4BsrgkESEl1cCYYG8V3H6WV8hzg3PCLx+ek/X9sbzn1iyT2CQWlSLawnhBPGEH533VjyI 8V5/aTHSf+3yJ2+tTt7fWZh1lZ0oodWDL4HJS0P558mvyI+6fqlVct9d1+7Yv3vbLuadG7KZh i9ES7Zrdfb/yzoXc37glddaKVz+v7K1q2h77rY/nzJ7dqVvmT+9QYinOSDTUYi4qTgQAjM18w 6QCAAA= X-Env-Sender: cbosdonnat@suse.com X-Msg-Ref: server-5.tower-21.messagelabs.com!1479205194!35363410!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 47644 invoked from network); 15 Nov 2016 10:19:54 -0000 Received: from smtp.nue.novell.com (HELO smtp.nue.novell.com) (195.135.221.5) by server-5.tower-21.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 15 Nov 2016 10:19:54 -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); Tue, 15 Nov 2016 11:19:53 +0100 From: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= To: xen-devel@lists.xen.org Date: Tue, 15 Nov 2016 11:18:39 +0100 Message-Id: <20161115101913.10396-2-cbosdonnat@suse.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20161115101913.10396-1-cbosdonnat@suse.com> References: <20161115101913.10396-1-cbosdonnat@suse.com> MIME-Version: 1.0 Cc: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= , Wei Liu , Ian Jackson , =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= Subject: [Xen-devel] [PATCH 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: Cédric 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 --- tools/libxl/libxl_event.c | 6 +++--- tools/libxl/libxl_internal.c | 16 ++++++++++------ tools/libxl/libxl_internal.h | 38 +++++++++++++++++++++++++++++++------- 3 files changed, 44 insertions(+), 16 deletions(-) diff --git a/tools/libxl/libxl_event.c b/tools/libxl/libxl_event.c index 02b39e6..fc9bdc9 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); @@ -1968,7 +1968,7 @@ int libxl__ao_inprogress(libxl__ao *ao, assert(ao->in_initiator); ao->constructing = 0; - libxl__log(CTX,XTL_DEBUG,-1,file,line,func, + libxl__log(CTX,XTL_DEBUG,-1,file,line,func,INVALID_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..78ed2f6 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); + domain[sizeof(domain)-1] = 0; 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. */