From patchwork Thu Sep 17 12:19:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 1366071 X-Patchwork-Delegate: sjg@chromium.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=gmx.de Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=badeba3b8450 header.b=eHM8AMD9; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4Bsbcw24mmz9sS8 for ; Thu, 17 Sep 2020 22:19:44 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 3B705823B6; Thu, 17 Sep 2020 14:19:21 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=gmx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.b="eHM8AMD9"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 97202823A4; Thu, 17 Sep 2020 14:19:15 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FREEMAIL_FROM,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 4E2378239A for ; Thu, 17 Sep 2020 14:19:10 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=gmx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=xypron.glpk@gmx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1600345147; bh=yF5dD7f80Q4RJVqXe2P1NHqKL3FqeGdAUOLATJ9+nAI=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=eHM8AMD9WES0k394kBZ60iE+U+DWNenMhl5ApxA/rQfD3G4lIyGNkFs0104drG7o1 bJKyd2p9XwPGczQPYhMqAr37HwF28reEDJZUSA7loJnpbXKAYv6t9dTFh2H/FQKTS3 fNXg+LG9bKSidkX5wMauJubpWbh+V1LIO9XByb3w= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from LT02.fritz.box ([178.202.41.107]) by mail.gmx.com (mrgmx004 [212.227.17.184]) with ESMTPSA (Nemesis) id 1MgNh7-1kz5JU2aCt-00hz2P; Thu, 17 Sep 2020 14:19:07 +0200 From: Heinrich Schuchardt To: Simon Glass Cc: Bin Meng , Wolfgang Wallner , Sean Anderson , u-boot@lists.denx.de, Heinrich Schuchardt Subject: [PATCH 1/2] log: allow for message continuation Date: Thu, 17 Sep 2020 14:19:01 +0200 Message-Id: <20200917121902.57403-2-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200917121902.57403-1-xypron.glpk@gmx.de> References: <20200917121902.57403-1-xypron.glpk@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:vXktivFvV55YIR2t5mVpbiMPZAqWTjZbORVlVM6WNlo8K7Ki0ul M0h4TUPiK6I1OwFM0Os8406d8u7mi4ngsei4WOAGo5IQhaofVNcqThpNC8Ro2eijbkDvGMf 8NyMlysxirR/1So6wiNgauT6GiwG09SdHIxpvPFoCoGX7Ym/5KxgWGzQlocuFj2UiOWRHTV ir4ASA0aKhWEYFEyJVOsw== X-UI-Out-Filterresults: notjunk:1;V03:K0:hH2uMWvW7tY=:TXarZWZup6xh5t8xETC97X 0ah9FGNIYTmpOYqJjiWQHBWS2ZYZjZu/Om6OZO3bcs8xsqcIRoNZvOAYlWmXtuCHmhGJja/MC Fu51dsfLd7WOEZFi7L6ykSABZheBgZi5uhDe7LS8yFFbg7wel1yamHnMW6u69jIav6SQOQOlC BD3VBJjMsFG8lTwcqmMSnUZgy2wzEsh/wjVwsHU0GIJ+sxt9DDLs4ZQgOGTSyCjQTFJuif8mc OyMj3H5+uqMX8+CXG2ejPZGdGXSpoCtN4D9rliU7soz9hRmU4gpNjJTOn1sijx8i/K0MyqKyE 6tOod+Cl8TDBi1VK43fTo0aRYOjx/qvfJJRTjAXkFanfNpFhafFr43TJoHRruHXLqWwAAuCIC GFeGJ5zcLaIcUWQGpmzlvVGug2q+Tk6PBtM3d+QmMJ85QI0j1vEGduJsLz/+t7jksPDf0r71B ncJfGT14euPaQmRK9CdFtNvi+YaWoeSEwvQppyL/eGU9dHtkaTbKpTLpH2TOlWmGt+X3Lh9+T PWtPU/w7+fYJ5Orq/dlfGJOWzrZzHu90O3uojwwD5+iqZn63OTuXIayt5K/ysxIZr9zDIERyF wDp+PvHHrpvysgDyFce22HCzBy4ybL8z3MUIkGrdNDeYAXK282k/A6tvoX3Onhy2fTzpQL8RV knXy9WaRYzKe9L5QEE6pXCXcCqBzT3i2PsJsdTY51urPe+HARXGgm8EmRi7sIcNc5WySEyfjU ecPAp0coRQIyX96hNKBfsSBYrqLLApruMPh5I+TKhIJwf8i33APr9NBjUztUrFWIIuQ2W7krF V1mwIHAAV25UMd3ZBIZ4FfoHvI/5T9ajLc0crcZNUX226I4aJEe4C0LRV0NDihrigEPxmg1Yz 2ADcckcEl3vITmA5YqhOc4GgirExVSWdXIFdCfkoj+/pSOqSksC6pHwDoSZBgksOpPcD3yb1q jHLNkUS8ae3XeVPygNnc7zRBoOh5mhXUkvrNb/1ojCMzD7c8YQq7whNJ/VdxG5vhLHJcCeCcb hQ/B5NQ7SHigeDWqxXlwMeLuRRwNpnRjCRCHD8gvm91JXFw2Ty6eGsUtGDDhdtbJeD8PTw5eF le2kbtO/RjwxHhuYOOOWUftb7KvDSQ0VdljPeJIVBY+PQWV5Z6QIIxvpRMXJtOGNIHJMAwXme mhBE7Na0wmgPznwDK+MQlS/Tt+j+O8JZlpcbMTk/KuisZtsZVNH0zvICs8gVYd+/x7Q8UOuoD fYe6CdNQZ7q1ihYhqrzLjWubPpOMV4ypWrH/nOw== X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.3 at phobos.denx.de X-Virus-Status: Clean Some drivers use macro pr_cont() for continuing a message sent via printk. Hence if we want to convert printk messaging to using the logging system, we must support continuation of log messages too. As pr_cont() does not provide a message level we need a means of remembering the last log level. With the patch a pseudo log level LOGL_CONT as well as a pseudo log category LOGC_CONT are introduced. Using these results in the application of the same log level and category as in the previous log message. Signed-off-by: Heinrich Schuchardt --- common/log.c | 23 ++++++++++++++++++----- doc/develop/logging.rst | 6 ++++++ include/log.h | 2 ++ 3 files changed, 26 insertions(+), 5 deletions(-) -- 2.28.0 diff --git a/common/log.c b/common/log.c index 9a5f100da3..bafc09f263 100644 --- a/common/log.c +++ b/common/log.c @@ -183,10 +183,12 @@ static bool log_passes_filters(struct log_device *ldev, struct log_rec *rec) * log_dispatch() - Send a log record to all log devices for processing * * The log record is sent to each log device in turn, skipping those which have - * filters which block the record + * filters which block the record. * - * @rec: Log record to dispatch - * @return 0 (meaning success) + * All log messages created while processing log record @rec are ignored. + * + * @rec: log record to dispatch + * Return: 0 msg sent, 1 msg not sent while already dispatching another msg */ static int log_dispatch(struct log_rec *rec) { @@ -199,7 +201,7 @@ static int log_dispatch(struct log_rec *rec) * as this might result in infinite recursion. */ if (processing_msg) - return 0; + return 1; /* Emit message */ processing_msg = 1; @@ -214,10 +216,18 @@ static int log_dispatch(struct log_rec *rec) int _log(enum log_category_t cat, enum log_level_t level, const char *file, int line, const char *func, const char *fmt, ...) { + static enum log_category_t logc_prev = LOGC_NONE; + static enum log_level_t logl_prev = LOGL_INFO; char buf[CONFIG_SYS_CBSIZE]; struct log_rec rec; va_list args; + /* Check for message continuation */ + if (cat == LOGC_CONT) + cat = logc_prev; + if (level == LOGL_CONT) + level = logl_prev; + rec.cat = cat; rec.level = level; rec.file = file; @@ -232,7 +242,10 @@ int _log(enum log_category_t cat, enum log_level_t level, const char *file, gd->log_drop_count++; return -ENOSYS; } - log_dispatch(&rec); + if (!log_dispatch(&rec)) { + logc_prev = cat; + logl_prev = level; + } return 0; } diff --git a/doc/develop/logging.rst b/doc/develop/logging.rst index 7ce8482ab6..c36f6bbbe4 100644 --- a/doc/develop/logging.rst +++ b/doc/develop/logging.rst @@ -38,6 +38,9 @@ There are a number logging levels available, in increasing order of verbosity: * LOGL_DEBUG_CONTENT - Debug message showing full message content * LOGL_DEBUG_IO - Debug message showing hardware I/O access +To continue a log message in a separate call of function log() use + +* LOGL_CONT - Use same log level as in previous call Logging category ---------------- @@ -56,6 +59,9 @@ The following main categories are defined: * LOGC_DT - Related to device tree control * LOGC_EFI - Related to EFI implementation +To continue a log message in a separate call of function log() use + +* LOGC_CONT - Use same category as in previous call Enabling logging ---------------- diff --git a/include/log.h b/include/log.h index 2859ce1f2e..567cd32d34 100644 --- a/include/log.h +++ b/include/log.h @@ -35,6 +35,7 @@ enum log_level_t { LOGL_FIRST = LOGL_EMERG, LOGL_MAX = LOGL_DEBUG_IO, + LOGL_CONT = -1, /* Use same log level as in previous call */ }; /** @@ -60,6 +61,7 @@ enum log_category_t { LOGC_COUNT, /* Number of log categories */ LOGC_END, /* Sentinel value for a list of log categories */ + LOGC_CONT = -1, /* Use same category as in previous call */ }; /* Helper to cast a uclass ID to a log category */