From patchwork Tue Nov 12 15:01:01 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Robert Foley X-Patchwork-Id: 179211 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp8241421ilf; Tue, 12 Nov 2019 07:07:14 -0800 (PST) X-Google-Smtp-Source: APXvYqyRCPX0Epc2dTql4QQgrnZGrWUVmNPCTZAWIfPUqf3SspucQ2zGCqtLlGEHk7tAT3WllXIN X-Received: by 2002:aed:3ae8:: with SMTP id o95mr31870784qte.277.1573571233727; Tue, 12 Nov 2019 07:07:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573571233; cv=none; d=google.com; s=arc-20160816; b=ydT3PKMV18OXqg8pDsc87CojK60NuQF+1gPmiWCUtbsnQsuowmt+GRwLo2Yc/1A1l5 Hn255S3dJ3PWM199InARbOSTU75oaKaqt0KH450e6rnrRseGp53tesxqgiexigAveGo4 DXnpXXdDB6wdAgxnMLhHG4axR3iNlcX+jqT2TzuXSrc0Fbz+YWUHLscIFnsSNLD6SEQo dYgtzlP+cR79zGo1SH1msdsJHpr3Uc5X+33NxEjF8/xHORhtjZKOBrV+FuOJNf1BNySy fJW8URyD+PcQZiiLdKxL5mgS0DnJzX6MRxTKq4Q/3CaZfNd6uhDyYWAC9aSl4q5HcTca Pvsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:references:in-reply-to :message-id:date:subject:to:from:dkim-signature; bh=UZ1i/qk2uiqDPVsu76k+F9DPkKMPM0uCow51hxWGol0=; b=gRU+x4QWE9V60sg4pYwxDL8NyILdA/8u4TePXrMoOTv8CQ0KwY46Lom3IL6y9ofagK m3yvN/RBeLY6nnAyfI6cxLdqZkTp50wRmpSWl51YhbMLhHs55GQDYlDH5BLBJMeWNoa6 VOSZEVOfqFcTz6HBkhck14nvjrOd9SjYdiOdL/ry84XhYtnOLu9g/wCFAEEm04tIQwhV pqhwArTalfUrW9wpAiGu/YrcT14/XTOl7rgi5OUHZn/Sl10zUXzKjIVvX3KNg3wjFbEE q9uHSBHqgorMMxEcP59BrAS4piUdg/b5nkxZZQ7ULw08bA12Sc2YKkubHNqFKjhie1vU KMbg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=blgiVHdU; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id q18si6097067qkn.109.2019.11.12.07.07.13 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 12 Nov 2019 07:07:13 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=blgiVHdU; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:36208 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iUXlA-0002oO-LZ for patch@linaro.org; Tue, 12 Nov 2019 10:07:12 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37926) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iUXgZ-0005vS-6H for qemu-devel@nongnu.org; Tue, 12 Nov 2019 10:02:28 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iUXgY-0002F3-2m for qemu-devel@nongnu.org; Tue, 12 Nov 2019 10:02:27 -0500 Received: from mail-pg1-x542.google.com ([2607:f8b0:4864:20::542]:38051) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iUXgX-0002E9-Tl for qemu-devel@nongnu.org; Tue, 12 Nov 2019 10:02:26 -0500 Received: by mail-pg1-x542.google.com with SMTP id 15so12023136pgh.5 for ; Tue, 12 Nov 2019 07:02:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=UZ1i/qk2uiqDPVsu76k+F9DPkKMPM0uCow51hxWGol0=; b=blgiVHdUZkbRYrRhl3aD2DIHIc+2XDmBTBSvyCP2Hwwhc+kDWTgo9/HyLyKAlI1NkA FmsaDV+dakK0vmdo2V3r7LPFwXg6EviIey2jmjCdzg0egVWFEbcSsxJczFM/obzOX8YR GCWeyoJQr9OsPIo3NjI0bG70tllZGZY7wG8LyUAXMJwbXQAFuJ4V1xyhyGWGJrlZw6nG 7nnYxuhwEsJf6oQyDrXqgLuQV9YU45eAglpeeYL3ep5LPBYmZdssdbOibjuF0xUi83d/ AcP8nLteLiKebLHfZAa6PR7brO3VYbhpFnPBi9bQL9Jl0fOhEv4YmQvCCSwdrE5iuu08 Bfvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=UZ1i/qk2uiqDPVsu76k+F9DPkKMPM0uCow51hxWGol0=; b=e97KYr6PSW707LASXnOkWve1KtdT4rwsr0slMG60IgwZ/lXXamAQkpqTqfvAONkDO7 OLpCNjFCL59KQtHsV4LAFlje3ETq/eOBDbbs6KGWwYTaFTfjBlPgCA8pprPrBW1a4GqS e0k6+rPv16JM+UkeqH9NwV5NARdLByKgSAy9kbD/mIwLV8jKgOUP7a5W8vGJ1kqSRG1y m/egivc9i8GLWfkueSASre7v6to+NS9FDvPFbxEXAqi1AD+W90XCZvpdUMI9ce2udnaZ 4i1wtRIMBwh7uFilpDDiZWXFqsQXIPzwkBkC0iPwg0J7DG5Yz+xXwTKWDnRq/Stp92xb qBLQ== X-Gm-Message-State: APjAAAXHo3T2UFGXMcxpEiaB1fhoMbAAyKiWTws+/xxBg53i+BSr1GyX WOzzpX46yscw+dh/HdmOfBElFOy+Q+U= X-Received: by 2002:a17:90a:1b69:: with SMTP id q96mr7090424pjq.89.1573570944161; Tue, 12 Nov 2019 07:02:24 -0800 (PST) Received: from Rfoley-MA01.usrd.futurewei.com ([12.111.81.71]) by smtp.gmail.com with ESMTPSA id a3sm8235511pfo.71.2019.11.12.07.02.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Nov 2019 07:02:23 -0800 (PST) From: Robert Foley To: qemu-devel@nongnu.org Subject: [PATCH v1 1/5] Add a mutex to guarantee single writer to qemu_logfile handle. Date: Tue, 12 Nov 2019 10:01:01 -0500 Message-Id: <20191112150105.2498-2-robert.foley@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191112150105.2498-1-robert.foley@linaro.org> References: <20191112150105.2498-1-robert.foley@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::542 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.puhov@linaro.org, alex.bennee@linaro.org, robert.foley@linaro.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Also added qemu_logfile_init() for initializing the logfile mutex. Signed-off-by: Robert Foley --- v1 - changed qemu_logfile_init() to use __constructor__. --- util/log.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) -- 2.17.1 Reviewed-by: Alex Bennée diff --git a/util/log.c b/util/log.c index 1ca13059ee..c25643dc99 100644 --- a/util/log.c +++ b/util/log.c @@ -24,8 +24,10 @@ #include "qapi/error.h" #include "qemu/cutils.h" #include "trace/control.h" +#include "qemu/thread.h" static char *logfilename; +static QemuMutex qemu_logfile_mutex; FILE *qemu_logfile; int qemu_loglevel; static int log_append = 0; @@ -49,6 +51,11 @@ int qemu_log(const char *fmt, ...) return ret; } +static void __attribute__((__constructor__)) qemu_logfile_init(void) +{ + qemu_mutex_init(&qemu_logfile_mutex); +} + static bool log_uses_own_buffers; /* enable or disable low levels log */ @@ -58,6 +65,9 @@ void qemu_set_log(int log_flags) #ifdef CONFIG_TRACE_LOG qemu_loglevel |= LOG_TRACE; #endif + + g_assert(qemu_logfile_mutex.initialized); + qemu_mutex_lock(&qemu_logfile_mutex); if (!qemu_logfile && (is_daemonized() ? logfilename != NULL : qemu_loglevel)) { if (logfilename) { @@ -93,6 +103,7 @@ void qemu_set_log(int log_flags) log_append = 1; } } + qemu_mutex_unlock(&qemu_logfile_mutex); if (qemu_logfile && (is_daemonized() ? logfilename == NULL : !qemu_loglevel)) { qemu_log_close(); @@ -230,12 +241,15 @@ void qemu_log_flush(void) /* Close the log file */ void qemu_log_close(void) { + g_assert(qemu_logfile_mutex.initialized); + qemu_mutex_lock(&qemu_logfile_mutex); if (qemu_logfile) { if (qemu_logfile != stderr) { fclose(qemu_logfile); } qemu_logfile = NULL; } + qemu_mutex_unlock(&qemu_logfile_mutex); } const QEMULogItem qemu_log_items[] = { From patchwork Tue Nov 12 15:01:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Robert Foley X-Patchwork-Id: 179212 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp8241829ilf; Tue, 12 Nov 2019 07:07:34 -0800 (PST) X-Google-Smtp-Source: APXvYqwqNibXSwFc/8lAz4aZHbwZQAvQZjGjo+WbM3Y+Qt4ScW4Ix8ZWePb+R01LM672u2DYIy1a X-Received: by 2002:a05:620a:159c:: with SMTP id d28mr5937257qkk.466.1573571254544; Tue, 12 Nov 2019 07:07:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573571254; cv=none; d=google.com; s=arc-20160816; b=vHnLxqShrwLTpv/IfuX5JzFjm4HcttnuLq35etVSgxMOtfOoUv02XqdJssDyQvHHMt KR2dOdD9wm0wmxsBpCh2Tma271llfQtMuF5Q7SE4EnN5v9eVT7AICiWOPmVY+AGuV45b cZG8aT2I8/SiQr0CDwHf/O4ehwNkmNfLEHmIocnMQHJSr9RI2vtVXHKXBAymHrQu9stQ rLFFJACuLgovud6tLOqaYy7mU4iPtvSNpJdVpodRqmm91QoKYS6n+EQMsAy+MYrEMWZa btovx0DZq3g/EbbDYoa/XLRX/oBck/NkHds//0KG6P8KpCsPDdx3za1Lbhpon9n0HhJl hN7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:references:in-reply-to :message-id:date:subject:to:from:dkim-signature; bh=GwPq1Qca8RGQ3ydBovwN5c5co2avpQegml3r4iKJ+Bc=; b=UgNKIEWrq7yWh5TklATRpsbO79c6ea85rqf7qjJZ66MlBVf3GRzToKAgvUE6cvE0tR HwfG/NVbef2BpPbZvp8mc40SEwXBTTXspd/QjUgDlrNC2t+UKBnoKJKZz79EpDFNy1Fm mylP/T6fyAQbnZRCuPzRqhIn5ErRYr2OJ3gOdbaAeqbJl4h89YvXuTJdcvQdriFTTcyw yNg36rbhjNPmqWbeFNPmt9ghv1ezJIsN0vsOl0mB1mbSusI0G3WGbTUf/9SoaPyJ7Fss lQGubN9r0+pQ1BCSabR52TzgIJaQ7t6DQPPe7RnvUFNx7Ro6SDpZezbbu7BhibIFlAWV rbHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=gIrENS0F; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id 205si5928972qke.168.2019.11.12.07.07.34 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 12 Nov 2019 07:07:34 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=gIrENS0F; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:36230 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iUXlV-0003BK-He for patch@linaro.org; Tue, 12 Nov 2019 10:07:33 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37992) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iUXgb-0005wc-RZ for qemu-devel@nongnu.org; Tue, 12 Nov 2019 10:02:35 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iUXgZ-0002HF-T4 for qemu-devel@nongnu.org; Tue, 12 Nov 2019 10:02:29 -0500 Received: from mail-pl1-x642.google.com ([2607:f8b0:4864:20::642]:39013) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iUXgZ-0002GN-KG for qemu-devel@nongnu.org; Tue, 12 Nov 2019 10:02:27 -0500 Received: by mail-pl1-x642.google.com with SMTP id o9so9494196plk.6 for ; Tue, 12 Nov 2019 07:02:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=GwPq1Qca8RGQ3ydBovwN5c5co2avpQegml3r4iKJ+Bc=; b=gIrENS0FYh/rPYimt+1DErYTQ3w5nUqSj2q6VC0JLKNkw88NTNsZIceBk1iBlB8g7r XY08q3HjJhco+NmaRp/7aCbXgJOz9JZvrxHS6sec9mXGlTHE8xUEp/h2E3dKa4Sw7Saw 9H8wO6U0T8kPmL6rDwmqqWEEw/To3WcbbgCcoNQMNTPcb3iklS1IjdsAVjar881ptXLj fVm9fbiFdzNqhG5DoP4Eh1DJ57bdxYMvupRnR0H73PxWtz4UJXUTYbFik8f6My+MmwlZ tWN84geJIJgpunh81Bey5tYCAvzLao7jEEX6NlOY5ozZrgbK/qSeeeUtJ2Ozr4v48wiQ pBTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=GwPq1Qca8RGQ3ydBovwN5c5co2avpQegml3r4iKJ+Bc=; b=lV2GspZlW2VNoUUzVRRZnfSQwkBBktK3qdQ8Ovzay5328Ft0wub6UkVObixYSyOEXg ng1YUqbyiicHHwZ/iULSROzs38YMlaUN/WpkWIg/p4ftyB9HZ3pSTHtLyeCxARwsN4YP 3uT2NIeaCm6NTqEh7nH+ddPCT6VMamLcBlI1vMIVg2Up+Sc6RV4Ll51p7h3oz0hQOI3h ISsKt3FKcOGM1BPS6ZnXmTqkeiY6WsxHlsT44+T4D8ob98XYRSCW/uxSLMosXckCVGwi uM4rGPCvmLG7NGyaMbKksgIaFWC3raCrh1LYQKv/mRBkNORvuO8Q+DP8htFZhS6Z567p Qm3w== X-Gm-Message-State: APjAAAVt3Skl6I8dpn3Ky3ztajKweM8FTu5IHNSorityfkILelRF4P/c g8SN02nuJvhVX+tyzcsyyqmssThQAbY= X-Received: by 2002:a17:902:6b0c:: with SMTP id o12mr4942422plk.173.1573570945877; Tue, 12 Nov 2019 07:02:25 -0800 (PST) Received: from Rfoley-MA01.usrd.futurewei.com ([12.111.81.71]) by smtp.gmail.com with ESMTPSA id a3sm8235511pfo.71.2019.11.12.07.02.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Nov 2019 07:02:25 -0800 (PST) From: Robert Foley To: qemu-devel@nongnu.org Subject: [PATCH v1 2/5] qemu_log_lock/unlock now preserves the qemu_logfile handle. Date: Tue, 12 Nov 2019 10:01:02 -0500 Message-Id: <20191112150105.2498-3-robert.foley@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191112150105.2498-1-robert.foley@linaro.org> References: <20191112150105.2498-1-robert.foley@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::642 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.puhov@linaro.org, alex.bennee@linaro.org, robert.foley@linaro.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" qemu_log_lock() now returns a handle and qemu_log_unlock() receives a handle to unlock. This allows for changing the handle during logging and ensures the lock() and unlock() are for the same file. Signed-off-by: Robert Foley --- v1 - Moved this up in the patch sequence to be before adding RCU for qemu_logfile. --- include/qemu/log.h | 9 ++++++--- accel/tcg/cpu-exec.c | 4 ++-- accel/tcg/translate-all.c | 4 ++-- accel/tcg/translator.c | 4 ++-- exec.c | 4 ++-- hw/net/can/can_sja1000.c | 4 ++-- net/can/can_socketcan.c | 5 ++--- target/cris/translate.c | 4 ++-- target/i386/translate.c | 5 +++-- target/lm32/translate.c | 4 ++-- target/microblaze/translate.c | 4 ++-- target/nios2/translate.c | 4 ++-- target/tilegx/translate.c | 7 ++++--- target/unicore32/translate.c | 4 ++-- tcg/tcg.c | 16 ++++++++-------- 15 files changed, 43 insertions(+), 39 deletions(-) -- 2.17.1 Reviewed-by: Alex Bennée Reviewed-by: Richard Henderson diff --git a/include/qemu/log.h b/include/qemu/log.h index a91105b2ad..a7c5b01571 100644 --- a/include/qemu/log.h +++ b/include/qemu/log.h @@ -53,14 +53,17 @@ static inline bool qemu_log_separate(void) * qemu_loglevel is never set when qemu_logfile is unset. */ -static inline void qemu_log_lock(void) +static inline FILE *qemu_log_lock(void) { qemu_flockfile(qemu_logfile); + return logfile->fd; } -static inline void qemu_log_unlock(void) +static inline void qemu_log_unlock(FILE *fd) { - qemu_funlockfile(qemu_logfile); + if (fd) { + qemu_funlockfile(fd); + } } /* Logging functions: */ diff --git a/net/can/can_socketcan.c b/net/can/can_socketcan.c index 8a6ffad40c..29bfacd4f8 100644 --- a/net/can/can_socketcan.c +++ b/net/can/can_socketcan.c @@ -76,8 +76,7 @@ QEMU_BUILD_BUG_ON(offsetof(qemu_can_frame, data) static void can_host_socketcan_display_msg(struct qemu_can_frame *msg) { int i; - - qemu_log_lock(); + FILE *logfile = qemu_log_lock(); qemu_log("[cansocketcan]: %03X [%01d] %s %s", msg->can_id & QEMU_CAN_EFF_MASK, msg->can_dlc, @@ -89,7 +88,7 @@ static void can_host_socketcan_display_msg(struct qemu_can_frame *msg) } qemu_log("\n"); qemu_log_flush(); - qemu_log_unlock(); + qemu_log_unlock(logfile); } static void can_host_socketcan_read(void *opaque) diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c index c01f59c743..62068d10c3 100644 --- a/accel/tcg/cpu-exec.c +++ b/accel/tcg/cpu-exec.c @@ -156,7 +156,7 @@ static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, TranslationBlock *itb) #if defined(DEBUG_DISAS) if (qemu_loglevel_mask(CPU_LOG_TB_CPU) && qemu_log_in_addr_range(itb->pc)) { - qemu_log_lock(); + FILE *logfile = qemu_log_lock(); int flags = 0; if (qemu_loglevel_mask(CPU_LOG_TB_FPU)) { flags |= CPU_DUMP_FPU; @@ -165,7 +165,7 @@ static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, TranslationBlock *itb) flags |= CPU_DUMP_CCOP; #endif log_cpu_state(cpu, flags); - qemu_log_unlock(); + qemu_log_unlock(logfile); } #endif /* DEBUG_DISAS */ diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c index 9f48da9472..bb325a2bc4 100644 --- a/accel/tcg/translate-all.c +++ b/accel/tcg/translate-all.c @@ -1804,7 +1804,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu, #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_OUT_ASM) && qemu_log_in_addr_range(tb->pc)) { - qemu_log_lock(); + FILE *logfile = qemu_log_lock(); qemu_log("OUT: [size=%d]\n", gen_code_size); if (tcg_ctx->data_gen_ptr) { size_t code_size = tcg_ctx->data_gen_ptr - tb->tc.ptr; @@ -1829,7 +1829,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu, } qemu_log("\n"); qemu_log_flush(); - qemu_log_unlock(); + qemu_log_unlock(logfile); } #endif diff --git a/accel/tcg/translator.c b/accel/tcg/translator.c index f977682be7..603d17ff83 100644 --- a/accel/tcg/translator.c +++ b/accel/tcg/translator.c @@ -138,11 +138,11 @@ void translator_loop(const TranslatorOps *ops, DisasContextBase *db, #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(db->pc_first)) { - qemu_log_lock(); + FILE *logfile = qemu_log_lock(); qemu_log("----------------\n"); ops->disas_log(db, cpu); qemu_log("\n"); - qemu_log_unlock(); + qemu_log_unlock(logfile); } #endif } diff --git a/exec.c b/exec.c index ffdb518535..c994a00f10 100644 --- a/exec.c +++ b/exec.c @@ -1223,13 +1223,13 @@ void cpu_abort(CPUState *cpu, const char *fmt, ...) fprintf(stderr, "\n"); cpu_dump_state(cpu, stderr, CPU_DUMP_FPU | CPU_DUMP_CCOP); if (qemu_log_separate()) { - qemu_log_lock(); + FILE *logfile = qemu_log_lock(); qemu_log("qemu: fatal: "); qemu_log_vprintf(fmt, ap2); qemu_log("\n"); log_cpu_state(cpu, CPU_DUMP_FPU | CPU_DUMP_CCOP); qemu_log_flush(); - qemu_log_unlock(); + qemu_log_unlock(logfile); qemu_log_close(); } va_end(ap2); diff --git a/hw/net/can/can_sja1000.c b/hw/net/can/can_sja1000.c index 1f81341554..39c78faf9b 100644 --- a/hw/net/can/can_sja1000.c +++ b/hw/net/can/can_sja1000.c @@ -247,8 +247,8 @@ int can_sja_accept_filter(CanSJA1000State *s, static void can_display_msg(const char *prefix, const qemu_can_frame *msg) { int i; + FILE *logfile = qemu_log_lock(); - qemu_log_lock(); qemu_log("%s%03X [%01d] %s %s", prefix, msg->can_id & QEMU_CAN_EFF_MASK, @@ -261,7 +261,7 @@ static void can_display_msg(const char *prefix, const qemu_can_frame *msg) } qemu_log("\n"); qemu_log_flush(); - qemu_log_unlock(); + qemu_log_unlock(logfile); } static void buff2frame_pel(const uint8_t *buff, qemu_can_frame *frame) diff --git a/target/cris/translate.c b/target/cris/translate.c index e752bd0609..cb57516a44 100644 --- a/target/cris/translate.c +++ b/target/cris/translate.c @@ -3273,11 +3273,11 @@ void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_insns) #if !DISAS_CRIS if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { - qemu_log_lock(); + FILE *logfile = qemu_log_lock(); qemu_log("--------------\n"); qemu_log("IN: %s\n", lookup_symbol(pc_start)); log_target_disas(cs, pc_start, dc->pc - pc_start); - qemu_log_unlock(); + qemu_log_unlock(logfile); } #endif #endif diff --git a/target/i386/translate.c b/target/i386/translate.c index 77e932d827..7c99ef1385 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -2502,14 +2502,15 @@ static void gen_unknown_opcode(CPUX86State *env, DisasContext *s) gen_illegal_opcode(s); if (qemu_loglevel_mask(LOG_UNIMP)) { + FILE *logfile = qemu_log_lock(); target_ulong pc = s->pc_start, end = s->pc; - qemu_log_lock(); + qemu_log("ILLOPC: " TARGET_FMT_lx ":", pc); for (; pc < end; ++pc) { qemu_log(" %02x", cpu_ldub_code(env, pc)); } qemu_log("\n"); - qemu_log_unlock(); + qemu_log_unlock(logfile); } } diff --git a/target/lm32/translate.c b/target/lm32/translate.c index 778cae1e81..73db9654d6 100644 --- a/target/lm32/translate.c +++ b/target/lm32/translate.c @@ -1137,10 +1137,10 @@ void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_insns) #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { - qemu_log_lock(); + FILE *logfile = qemu_log_lock(); qemu_log("\n"); log_target_disas(cs, pc_start, dc->pc - pc_start); - qemu_log_unlock(); + qemu_log_unlock(logfile); } #endif } diff --git a/target/microblaze/translate.c b/target/microblaze/translate.c index 761f535357..cc1ad15656 100644 --- a/target/microblaze/translate.c +++ b/target/microblaze/translate.c @@ -1766,10 +1766,10 @@ void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_insns) #if !SIM_COMPAT if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { - qemu_log_lock(); + FILE *logfile = qemu_log_lock(); qemu_log("--------------\n"); log_target_disas(cs, pc_start, dc->pc - pc_start); - qemu_log_unlock(); + qemu_log_unlock(logfile); } #endif #endif diff --git a/target/nios2/translate.c b/target/nios2/translate.c index e17656e66f..82107bf270 100644 --- a/target/nios2/translate.c +++ b/target/nios2/translate.c @@ -892,11 +892,11 @@ void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_insns) #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(tb->pc)) { - qemu_log_lock(); + FILE *logfile = qemu_log_lock(); qemu_log("IN: %s\n", lookup_symbol(tb->pc)); log_target_disas(cs, tb->pc, dc->pc - tb->pc); qemu_log("\n"); - qemu_log_unlock(); + qemu_log_unlock(logfile); } #endif } diff --git a/target/tilegx/translate.c b/target/tilegx/translate.c index 68dd4aa2d8..fd406f4f71 100644 --- a/target/tilegx/translate.c +++ b/target/tilegx/translate.c @@ -2377,6 +2377,7 @@ void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_insns) uint64_t pc_start = tb->pc; uint64_t page_start = pc_start & TARGET_PAGE_MASK; int num_insns = 0; + FILE *logfile = NULL; dc->pc = pc_start; dc->mmuidx = 0; @@ -2388,7 +2389,7 @@ void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_insns) dc->zero = NULL; if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) { - qemu_log_lock(); + logfile = qemu_log_lock(); qemu_log("IN: %s\n", lookup_symbol(pc_start)); } gen_tb_start(tb); @@ -2418,9 +2419,9 @@ void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_insns) tb->size = dc->pc - pc_start; tb->icount = num_insns; - if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) { + if (logfile) { qemu_log("\n"); - qemu_log_unlock(); + qemu_log_unlock(logfile); } } diff --git a/target/unicore32/translate.c b/target/unicore32/translate.c index 0e01f35856..0f6891b8aa 100644 --- a/target/unicore32/translate.c +++ b/target/unicore32/translate.c @@ -1994,12 +1994,12 @@ done_generating: #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { - qemu_log_lock(); + FILE *logfile = qemu_log_lock(); qemu_log("----------------\n"); qemu_log("IN: %s\n", lookup_symbol(pc_start)); log_target_disas(cs, pc_start, dc->pc - pc_start); qemu_log("\n"); - qemu_log_unlock(); + qemu_log_unlock(logfile); } #endif tb->size = dc->pc - pc_start; diff --git a/tcg/tcg.c b/tcg/tcg.c index 5475d49ed1..0511266d85 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -1085,7 +1085,7 @@ void tcg_prologue_init(TCGContext *s) #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_OUT_ASM)) { - qemu_log_lock(); + FILE *logfile = qemu_log_lock(); qemu_log("PROLOGUE: [size=%zu]\n", prologue_size); if (s->data_gen_ptr) { size_t code_size = s->data_gen_ptr - buf0; @@ -1110,7 +1110,7 @@ void tcg_prologue_init(TCGContext *s) } qemu_log("\n"); qemu_log_flush(); - qemu_log_unlock(); + qemu_log_unlock(logfile); } #endif @@ -4041,11 +4041,11 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb) #ifdef DEBUG_DISAS if (unlikely(qemu_loglevel_mask(CPU_LOG_TB_OP) && qemu_log_in_addr_range(tb->pc))) { - qemu_log_lock(); + FILE *logfile = qemu_log_lock(); qemu_log("OP:\n"); tcg_dump_ops(s, false); qemu_log("\n"); - qemu_log_unlock(); + qemu_log_unlock(logfile); } #endif @@ -4086,11 +4086,11 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb) #ifdef DEBUG_DISAS if (unlikely(qemu_loglevel_mask(CPU_LOG_TB_OP_IND) && qemu_log_in_addr_range(tb->pc))) { - qemu_log_lock(); + FILE *logfile = qemu_log_lock(); qemu_log("OP before indirect lowering:\n"); tcg_dump_ops(s, false); qemu_log("\n"); - qemu_log_unlock(); + qemu_log_unlock(logfile); } #endif /* Replace indirect temps with direct temps. */ @@ -4107,11 +4107,11 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb) #ifdef DEBUG_DISAS if (unlikely(qemu_loglevel_mask(CPU_LOG_TB_OP_OPT) && qemu_log_in_addr_range(tb->pc))) { - qemu_log_lock(); + FILE *logfile = qemu_log_lock(); qemu_log("OP after optimization and liveness analysis:\n"); tcg_dump_ops(s, true); qemu_log("\n"); - qemu_log_unlock(); + qemu_log_unlock(logfile); } #endif From patchwork Tue Nov 12 15:01:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robert Foley X-Patchwork-Id: 179210 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp8238490ilf; Tue, 12 Nov 2019 07:05:11 -0800 (PST) X-Google-Smtp-Source: APXvYqzkvbey6aPUZ9NpKcICjfKi5gOHfr0/0B5UiPz6r++GA3OUZJ20ZvQ43i2EQUUh6C8Ycfwb X-Received: by 2002:a50:959a:: with SMTP id w26mr33350950eda.214.1573571110781; Tue, 12 Nov 2019 07:05:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573571110; cv=none; d=google.com; s=arc-20160816; b=LcLvn633bozhjv/Rzj23fN7k/VghheUx+lafLa8BwyVYfOEx5KXt609wrbufee3rfL hA9iQSQ1Qw0565ZOQ3Ob1CmEDAkX+U2tjcBjP8ORst/8FVmyxHBUZSdt+Iz+j3JxFKzL IxN6+2svjj2SDq7jgtl6wC4yl3lO+IjnGfGPp+FqsnURO5CnGLyNT5JTnO5JIjJ44bOv vqL/Ng2v/Uhd9jQlIvWJBNDf7CtA4NqHHTldDiJLiNsYc1wDsOPiI3Eg/C1OeShjZt05 VtrXcaxaVGBFCB02fWjRNGBgbCH1pJPV/jFLhSJvgD47m8NMZbYwwdhyfL+3XDOstitk OHVA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:references:in-reply-to :message-id:date:subject:to:from:dkim-signature; bh=G2Eghhl+NgguGFeyOq1jUpx4gOBZtmlNpBTN4T0iFt0=; b=GA1hUjXDsbtW5yLPWZrNMmDBDR6f0DpXGRkwymCdZY2fHk2/sSSKGZasErcQY2k9Bc 62oouXJ81Gh4WCBPA/z5dtGESGMpdPkvtf9WhXlsR63enPXYaO7xsCtkcEsyk+xqOVW0 XIm6IbGMqL/e9hdpcHkQMtkvegGJeGIBbJH9FoTjk8gwoz32L5gH2KF59dIQkMDexhlQ Usq6lzjPSRclHUoT1ndCdSdu3SolP5XtGQ+jiVZXXxBdohDLjdR9eynDoB4Fym9RjbOt VYfoZvbvSLXFsAL5yhuot3t1MhQfaxLQ6k+1xUZ6WYLrB48i+50b3hnGFcffxROKgsBp Ed7Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=WS3AVuXy; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id s13si131164ejx.144.2019.11.12.07.05.10 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 12 Nov 2019 07:05:10 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=WS3AVuXy; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:36146 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iUXjB-0000DD-Ce for patch@linaro.org; Tue, 12 Nov 2019 10:05:09 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38035) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iUXge-0005xW-9T for qemu-devel@nongnu.org; Tue, 12 Nov 2019 10:02:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iUXgb-0002J6-FC for qemu-devel@nongnu.org; Tue, 12 Nov 2019 10:02:32 -0500 Received: from mail-pl1-x643.google.com ([2607:f8b0:4864:20::643]:39014) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iUXgb-0002I4-4R for qemu-devel@nongnu.org; Tue, 12 Nov 2019 10:02:29 -0500 Received: by mail-pl1-x643.google.com with SMTP id o9so9494222plk.6 for ; Tue, 12 Nov 2019 07:02:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=G2Eghhl+NgguGFeyOq1jUpx4gOBZtmlNpBTN4T0iFt0=; b=WS3AVuXyss2Jc19DDI4XR3K9NCPQjBYFoHekFkzYnlre2KPp2u10Ub0P+ep6cpwTGE AiiCwtAhIRSAHHj52qO5nUgjpZXxXSCOMDIB0hho1861vSMlc0A5LtkJHaHTGVVo1oCW yCnlgUa55gG3HE6+5lsC6wz0saFpaD3GPbGCmEMp4anMP3eBypJKziG3QYx6WJJXn2Wo +g0z0hQZtV/ehwfbmTFk6sCwV4M3YMu68N0+9E7X8x7l9VYJLLUeHex2Z1/CRLz91m6U eHG1k4F4gW6qkP1+HDsovspJU1rkxfzPG877/BEifv8cCXaJI0wQMotaovm/6J6MEtKI ZYlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=G2Eghhl+NgguGFeyOq1jUpx4gOBZtmlNpBTN4T0iFt0=; b=PzbV+Pu2u9xQkfWBnNlm/kGvvVTXdk8kO4ArzyPfe8S9L7yOFMsvx9MC0oDpIfUDnj tof7ZAOe/2QyfqoFA3+S3VB+Gq+ZkqOOK/ycZY35Q3wwlZu0AeU61hSDl4V7tmQ+F5sW 87ZthiOtikQlqlZFvPyYJijxHxPAvGLmQYcsp5k5sAk/GNbsNCV/uBu9LAq7sF3fTOlY bhBCP4K6QVHF/0KFv6ZPvmIvOxEswIZ+wHEzuc+jh6oASN3rhNN3eWS+pTLFZi7N5mJ3 EBtxKUM0JzVMMoHG9aXsiQAPxZyQGkR8QvFqXtyWl57jsFTiNgbMUPQP//GaSFX4Mfmv ra8w== X-Gm-Message-State: APjAAAXXbAtptos5qQb0VJtkdcCtE/R1QD0Z9xjsuXCCSdOZMLrUnkmQ +HaoCsIp9gvlVKY+IZ6nC9EAgHSexLc= X-Received: by 2002:a17:902:6acb:: with SMTP id i11mr32594190plt.214.1573570947606; Tue, 12 Nov 2019 07:02:27 -0800 (PST) Received: from Rfoley-MA01.usrd.futurewei.com ([12.111.81.71]) by smtp.gmail.com with ESMTPSA id a3sm8235511pfo.71.2019.11.12.07.02.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Nov 2019 07:02:27 -0800 (PST) From: Robert Foley To: qemu-devel@nongnu.org Subject: [PATCH v1 3/5] Add use of RCU for qemu_logfile. Date: Tue, 12 Nov 2019 10:01:03 -0500 Message-Id: <20191112150105.2498-4-robert.foley@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191112150105.2498-1-robert.foley@linaro.org> References: <20191112150105.2498-1-robert.foley@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::643 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.puhov@linaro.org, alex.bennee@linaro.org, robert.foley@linaro.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" This now allows changing the logfile while logging is active, and also solves the issue of a seg fault while changing the logfile. Any read access to the qemu_logfile handle will use the rcu_read_lock()/unlock() around the use of the handle. To fetch the handle we will use atomic_rcu_read(). We also in many cases do a check for validity of the logfile handle before using it to deal with the case where the file is closed and set to NULL. The cases where we write to the qemu_logfile will use atomic_rcu_set(). Writers will also use call_rcu() with a newly added qemu_logfile_free function for freeing/closing when readers have finished. Signed-off-by: Robert Foley --- v1 - Changes for review comments. - Minor changes to definition of QemuLogFile. - Changed qemu_log_separate() to fix unbalanced and remove qemu_log_enabled() check. - changed qemu_log_lock() to include else. - make qemu_logfile_free static. - use g_assert(logfile) in qemu_logfile_free. - Relocated unlock out of if/else in qemu_log_close(), and in qemu_set_log(). --- include/qemu/log.h | 42 ++++++++++++++++++++++---- util/log.c | 73 +++++++++++++++++++++++++++++++++------------- include/exec/log.h | 33 ++++++++++++++++++--- tcg/tcg.c | 12 ++++++-- 4 files changed, 128 insertions(+), 32 deletions(-) -- 2.17.1 diff --git a/include/qemu/log.h b/include/qemu/log.h index a7c5b01571..528e1f9dd7 100644 --- a/include/qemu/log.h +++ b/include/qemu/log.h @@ -3,9 +3,16 @@ /* A small part of this API is split into its own header */ #include "qemu/log-for-trace.h" +#include "qemu/rcu.h" + +typedef struct QemuLogFile { + struct rcu_head rcu; + FILE *fd; +} QemuLogFile; /* Private global variable, don't use */ -extern FILE *qemu_logfile; +extern QemuLogFile *qemu_logfile; + /* * The new API: @@ -25,7 +32,16 @@ static inline bool qemu_log_enabled(void) */ static inline bool qemu_log_separate(void) { - return qemu_logfile != NULL && qemu_logfile != stderr; + QemuLogFile *logfile; + bool res = false; + + rcu_read_lock(); + logfile = atomic_rcu_read(&qemu_logfile); + if (logfile && logfile->fd != stderr) { + res = true; + } + rcu_read_unlock(); + return res; } #define CPU_LOG_TB_OUT_ASM (1 << 0) @@ -55,14 +71,23 @@ static inline bool qemu_log_separate(void) static inline FILE *qemu_log_lock(void) { - qemu_flockfile(qemu_logfile); - return logfile->fd; + QemuLogFile *logfile; + rcu_read_lock(); + logfile = atomic_rcu_read(&qemu_logfile); + if (logfile) { + qemu_flockfile(logfile->fd); + return logfile->fd; + } else { + rcu_read_unlock(); + return NULL; + } } static inline void qemu_log_unlock(FILE *fd) { if (fd) { qemu_funlockfile(fd); + rcu_read_unlock(); } } @@ -73,9 +98,14 @@ static inline void qemu_log_unlock(FILE *fd) static inline void GCC_FMT_ATTR(1, 0) qemu_log_vprintf(const char *fmt, va_list va) { - if (qemu_logfile) { - vfprintf(qemu_logfile, fmt, va); + QemuLogFile *logfile; + + rcu_read_lock(); + logfile = atomic_rcu_read(&qemu_logfile); + if (logfile) { + vfprintf(logfile->fd, fmt, va); } + rcu_read_unlock(); } /* log only if a bit is set on the current loglevel mask: diff --git a/util/log.c b/util/log.c index c25643dc99..802b8de42e 100644 --- a/util/log.c +++ b/util/log.c @@ -28,7 +28,7 @@ static char *logfilename; static QemuMutex qemu_logfile_mutex; -FILE *qemu_logfile; +QemuLogFile *qemu_logfile; int qemu_loglevel; static int log_append = 0; static GArray *debug_regions; @@ -37,10 +37,14 @@ static GArray *debug_regions; int qemu_log(const char *fmt, ...) { int ret = 0; - if (qemu_logfile) { + QemuLogFile *logfile; + + rcu_read_lock(); + logfile = atomic_rcu_read(&qemu_logfile); + if (logfile) { va_list ap; va_start(ap, fmt); - ret = vfprintf(qemu_logfile, fmt, ap); + ret = vfprintf(logfile->fd, fmt, ap); va_end(ap); /* Don't pass back error results. */ @@ -48,6 +52,7 @@ int qemu_log(const char *fmt, ...) ret = 0; } } + rcu_read_unlock(); return ret; } @@ -56,11 +61,23 @@ static void __attribute__((__constructor__)) qemu_logfile_init(void) qemu_mutex_init(&qemu_logfile_mutex); } +static void qemu_logfile_free(QemuLogFile *logfile) +{ + g_assert(logfile); + + if (logfile->fd != stderr) { + fclose(logfile->fd); + } + g_free(logfile); +} + static bool log_uses_own_buffers; /* enable or disable low levels log */ void qemu_set_log(int log_flags) { + QemuLogFile *logfile; + qemu_loglevel = log_flags; #ifdef CONFIG_TRACE_LOG qemu_loglevel |= LOG_TRACE; @@ -70,44 +87,50 @@ void qemu_set_log(int log_flags) qemu_mutex_lock(&qemu_logfile_mutex); if (!qemu_logfile && (is_daemonized() ? logfilename != NULL : qemu_loglevel)) { + logfile = g_new0(QemuLogFile, 1); if (logfilename) { - qemu_logfile = fopen(logfilename, log_append ? "a" : "w"); - if (!qemu_logfile) { + logfile->fd = fopen(logfilename, log_append ? "a" : "w"); + if (!logfile->fd) { + g_free(logfile); perror(logfilename); _exit(1); } /* In case we are a daemon redirect stderr to logfile */ if (is_daemonized()) { - dup2(fileno(qemu_logfile), STDERR_FILENO); - fclose(qemu_logfile); + dup2(fileno(logfile->fd), STDERR_FILENO); + fclose(logfile->fd); /* This will skip closing logfile in qemu_log_close() */ - qemu_logfile = stderr; + logfile->fd = stderr; } } else { /* Default to stderr if no log file specified */ assert(!is_daemonized()); - qemu_logfile = stderr; + logfile->fd = stderr; } /* must avoid mmap() usage of glibc by setting a buffer "by hand" */ if (log_uses_own_buffers) { static char logfile_buf[4096]; - setvbuf(qemu_logfile, logfile_buf, _IOLBF, sizeof(logfile_buf)); + setvbuf(logfile->fd, logfile_buf, _IOLBF, sizeof(logfile_buf)); } else { #if defined(_WIN32) /* Win32 doesn't support line-buffering, so use unbuffered output. */ - setvbuf(qemu_logfile, NULL, _IONBF, 0); + setvbuf(logfile->fd, NULL, _IONBF, 0); #else - setvbuf(qemu_logfile, NULL, _IOLBF, 0); + setvbuf(logfile->fd, NULL, _IOLBF, 0); #endif log_append = 1; } + atomic_rcu_set(&qemu_logfile, logfile); } - qemu_mutex_unlock(&qemu_logfile_mutex); + logfile = qemu_logfile; + if (qemu_logfile && (is_daemonized() ? logfilename == NULL : !qemu_loglevel)) { - qemu_log_close(); + atomic_rcu_set(&qemu_logfile, NULL); + call_rcu(logfile, qemu_logfile_free, rcu); } + qemu_mutex_unlock(&qemu_logfile_mutex); } void qemu_log_needs_buffers(void) @@ -123,6 +146,7 @@ void qemu_log_needs_buffers(void) void qemu_set_log_filename(const char *filename, Error **errp) { char *pidstr; + g_free(logfilename); pidstr = strstr(filename, "%"); @@ -235,19 +259,28 @@ out: /* fflush() the log file */ void qemu_log_flush(void) { - fflush(qemu_logfile); + QemuLogFile *logfile; + + rcu_read_lock(); + logfile = atomic_rcu_read(&qemu_logfile); + if (logfile) { + fflush(logfile->fd); + } + rcu_read_unlock(); } /* Close the log file */ void qemu_log_close(void) { + QemuLogFile *logfile; + g_assert(qemu_logfile_mutex.initialized); qemu_mutex_lock(&qemu_logfile_mutex); - if (qemu_logfile) { - if (qemu_logfile != stderr) { - fclose(qemu_logfile); - } - qemu_logfile = NULL; + logfile = qemu_logfile; + + if (logfile) { + atomic_rcu_set(&qemu_logfile, NULL); + call_rcu(logfile, qemu_logfile_free, rcu); } qemu_mutex_unlock(&qemu_logfile_mutex); } diff --git a/include/exec/log.h b/include/exec/log.h index e2cfd436e6..9bd1e4aa20 100644 --- a/include/exec/log.h +++ b/include/exec/log.h @@ -15,8 +15,15 @@ */ static inline void log_cpu_state(CPUState *cpu, int flags) { + QemuLogFile *logfile; + if (qemu_log_enabled()) { - cpu_dump_state(cpu, qemu_logfile, flags); + rcu_read_lock(); + logfile = atomic_rcu_read(&qemu_logfile); + if (logfile) { + cpu_dump_state(cpu, logfile->fd, flags); + } + rcu_read_unlock(); } } @@ -40,19 +47,37 @@ static inline void log_cpu_state_mask(int mask, CPUState *cpu, int flags) static inline void log_target_disas(CPUState *cpu, target_ulong start, target_ulong len) { - target_disas(qemu_logfile, cpu, start, len); + QemuLogFile *logfile; + rcu_read_lock(); + logfile = atomic_rcu_read(&qemu_logfile); + if (logfile) { + target_disas(logfile->fd, cpu, start, len); + } + rcu_read_unlock(); } static inline void log_disas(void *code, unsigned long size) { - disas(qemu_logfile, code, size); + QemuLogFile *logfile; + rcu_read_lock(); + logfile = atomic_rcu_read(&qemu_logfile); + if (logfile) { + disas(logfile->fd, code, size); + } + rcu_read_unlock(); } #if defined(CONFIG_USER_ONLY) /* page_dump() output to the log file: */ static inline void log_page_dump(void) { - page_dump(qemu_logfile); + QemuLogFile *logfile; + rcu_read_lock(); + logfile = atomic_rcu_read(&qemu_logfile); + if (logfile) { + page_dump(logfile->fd); + } + rcu_read_unlock(); } #endif #endif diff --git a/tcg/tcg.c b/tcg/tcg.c index 0511266d85..4f616ba38b 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -2114,9 +2114,17 @@ static void tcg_dump_ops(TCGContext *s, bool have_prefs) } if (have_prefs || op->life) { - for (; col < 40; ++col) { - putc(' ', qemu_logfile); + + QemuLogFile *logfile; + + rcu_read_lock(); + logfile = atomic_rcu_read(&qemu_logfile); + if (logfile) { + for (; col < 40; ++col) { + putc(' ', logfile->fd); + } } + rcu_read_unlock(); } if (op->life) { From patchwork Tue Nov 12 15:01:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Robert Foley X-Patchwork-Id: 179208 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp8235081ilf; Tue, 12 Nov 2019 07:02:55 -0800 (PST) X-Google-Smtp-Source: APXvYqxQSZxzZ3pWD2Z5v9rgvHYa68LcloQMcHlom0MBW8DN7X+7kml0BuzzCKfDLZOGrFt55KA5 X-Received: by 2002:ac8:2476:: with SMTP id d51mr32509982qtd.378.1573570975569; Tue, 12 Nov 2019 07:02:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573570975; cv=none; d=google.com; s=arc-20160816; b=BNFf96TQV1KdRmHKz+CmkDcYVfsJZCaUI6pbOkcHcUFc/lqsJlL+tNTYcWjRrI/bWm XK8EgJb/jmIjd+dKkO2nrJ7xVRgcEn5uEQJ2syl3zMq4TDGccaendc2IYxxebICGCTbt Df0nl7hjRbRxDxzhdGTXhUqBRgX8QCkmsofWJar7RTS/1tMNGrQLNrvxOYyyn9GwgMtN T5Ul1qnm7eQ1upLT88qqFJQC5QIHkwLDFyaemVUqX1AZKwERGSpcu9+gXVA1HO767RaJ hQ9qkVj2PtWzjMDHdVkSKQ8Kn8ki2w3W9fYGyAEXN6UvoQCrCBRSuCoI1vNtGUh9idxu tgag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:references:in-reply-to :message-id:date:subject:to:from:dkim-signature; bh=rb+rwwDtLFyVaqPrueQVfE7R//yL4u5e6ReAZf9CRts=; b=BWHjlMpKrTNKkMnKyvRDnKpYTLO7S+poSxoIyPC18JH+mVks+fMqO8X4iz/WxwjiX5 uSN5gPYRcXLIWjyCriUAnkb5pwkyr8C1ASjC26653cG+LUecbj5eHckROUo4mEeWIM0g 10XKVEzL/frC9Dx8YCc/d2JQ85jSqXMjqB2lvDPc0R2xgHih3aZYxUi70XutAM+iJ9Ur GAr2aorinf/B3jZEriLHPGSOHLifRwArsehb+q9b9XnkOx6Ux6+DfNUVMYMwraikE+tJ BOGL0c6Wh9CEFSLB3nMEL322Jjndh95Srx7gThQL+stcDMb+Tgdptun0y7VM5CFivt+Z y8kQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=shS4+Yob; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id p7si11048677qtp.377.2019.11.12.07.02.55 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 12 Nov 2019 07:02:55 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=shS4+Yob; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:36080 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iUXh0-00061f-HT for patch@linaro.org; Tue, 12 Nov 2019 10:02:54 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38067) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iUXgf-0005yX-90 for qemu-devel@nongnu.org; Tue, 12 Nov 2019 10:02:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iUXgd-0002LY-Up for qemu-devel@nongnu.org; Tue, 12 Nov 2019 10:02:33 -0500 Received: from mail-pf1-x444.google.com ([2607:f8b0:4864:20::444]:46070) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iUXgc-0002KC-Nj for qemu-devel@nongnu.org; Tue, 12 Nov 2019 10:02:31 -0500 Received: by mail-pf1-x444.google.com with SMTP id z4so13498415pfn.12 for ; Tue, 12 Nov 2019 07:02:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=rb+rwwDtLFyVaqPrueQVfE7R//yL4u5e6ReAZf9CRts=; b=shS4+Yob2T10+TBH7EpS7n8xqgnny/KicLtIVo3u0KVgTP+P5xXtOj+6gRDtuDMIFf ACWEUdU0IM+aBHHWg25ALdGaaXkY6vMSTs4ijVPnrTl1u17lJVRjVz0PQbuF0ukKmSmQ HD5Z7ZIeVQI+gmGFcqRIElYsX+RNESVfTKAxtGWV1UgVyoMEi7l/HMdjyLu14IoD9I/K 1U56f4D6PXsnkdwNF1dINYP4+cONHwIYnaCiFGCCr6Bzw/kT3hZ70gbNH9BG2BZuldS3 W8EQLjMwbbYkQL7iKcqgRA4EXyyC9h4ROgLHoBtDJQ0CZ06k1Uxqtx4cTkT2VJFKKQc8 wxbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=rb+rwwDtLFyVaqPrueQVfE7R//yL4u5e6ReAZf9CRts=; b=ehGYMNxF9R5xqYonLAQL5n2fA5Y8u5nQbVFKHK1/HmvbOHVhH/cs2QeLfHQNgPyhFB CrCiPKERTNZGBaGnLfrF7ly4jHEiVDZx6vBbTY6kE36w3TwdFvQ3Ej3vP4dmJp1PD3Dg dF4GVdZTm+Z2hsYoYdzHuKak3DNatV3FRB0kOMr/2UfdDRGQHLujgxlSTNC4eEBEpw/Q cqKmup9rd5kaNmxaWsZiE5EFUJw5v/91yE0NxMJCVF+SXtuUlMnU7MSgrjV5vzCTEhLy STfEhScEoZp+uxIpAWtjh1wMXl1HPx+NKpceoJNuBeTVyW7frhLWCk5uR0T/Bc1Ptt6O StEA== X-Gm-Message-State: APjAAAXOYVP4SmN8Y8KFmgUhFz+Ziw2Jrjg7WB8KLHre+rXFMJZn1dpX N/wCqdhkwH9JxtEw9anQjTSFfSs4BH0= X-Received: by 2002:a65:5885:: with SMTP id d5mr34710063pgu.278.1573570949400; Tue, 12 Nov 2019 07:02:29 -0800 (PST) Received: from Rfoley-MA01.usrd.futurewei.com ([12.111.81.71]) by smtp.gmail.com with ESMTPSA id a3sm8235511pfo.71.2019.11.12.07.02.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Nov 2019 07:02:28 -0800 (PST) From: Robert Foley To: qemu-devel@nongnu.org Subject: [PATCH v1 4/5] Added tests for close and change of logfile. Date: Tue, 12 Nov 2019 10:01:04 -0500 Message-Id: <20191112150105.2498-5-robert.foley@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191112150105.2498-1-robert.foley@linaro.org> References: <20191112150105.2498-1-robert.foley@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::444 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.puhov@linaro.org, alex.bennee@linaro.org, robert.foley@linaro.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" One test ensures that the logfile handle is still valid even if the logfile is changed during logging. The other test validates that the logfile handle remains valid under the logfile lock even if the logfile is closed. Signed-off-by: Robert Foley -- v1 - Changes for first round of code review comments. - Added in use of g_autofree, removed the g_free()s. - Added in use of logfile2 and changed sequence of asserts. --- tests/test-logging.c | 80 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) -- 2.17.1 Reviewed-by: Alex Bennée diff --git a/tests/test-logging.c b/tests/test-logging.c index a12585f70a..1e646f045d 100644 --- a/tests/test-logging.c +++ b/tests/test-logging.c @@ -108,6 +108,82 @@ static void test_parse_path(gconstpointer data) error_free_or_abort(&err); } +static void test_logfile_write(gconstpointer data) +{ + QemuLogFile *logfile; + QemuLogFile *logfile2; + gchar const *dir = data; + Error *err = NULL; + g_autofree gchar *file_path; + g_autofree gchar *file_path1; + FILE *orig_fd; + + /* + * Before starting test, set log flags, to ensure the file gets + * opened below with the call to qemu_set_log_filename(). + * In cases where a logging backend other than log is used, + * this is needed. + */ + qemu_set_log(CPU_LOG_TB_OUT_ASM); + file_path = g_build_filename(dir, "qemu_test_log_write0.log", NULL); + file_path1 = g_build_filename(dir, "qemu_test_log_write1.log", NULL); + + /* + * Test that even if an open file handle is changed, + * our handle remains valid due to RCU. + */ + qemu_set_log_filename(file_path, &err); + g_assert(!err); + rcu_read_lock(); + logfile = atomic_rcu_read(&qemu_logfile); + orig_fd = logfile->fd; + g_assert(logfile && logfile->fd); + fprintf(logfile->fd, "%s 1st write to file\n", __func__); + fflush(logfile->fd); + + /* Change the logfile and ensure that the handle is still valid. */ + qemu_set_log_filename(file_path1, &err); + g_assert(!err); + logfile2 = atomic_rcu_read(&qemu_logfile); + g_assert(logfile->fd == orig_fd); + g_assert(logfile2->fd != logfile->fd); + fprintf(logfile->fd, "%s 2nd write to file\n", __func__); + fflush(logfile->fd); + rcu_read_unlock(); +} + +static void test_logfile_lock(gconstpointer data) +{ + FILE *logfile; + gchar const *dir = data; + Error *err = NULL; + g_autofree gchar *file_path; + + file_path = g_build_filename(dir, "qemu_test_logfile_lock0.log", NULL); + + /* + * Test the use of the logfile lock, such + * that even if an open file handle is closed, + * our handle remains valid for use due to RCU. + */ + qemu_set_log_filename(file_path, &err); + logfile = qemu_log_lock(); + g_assert(logfile); + fprintf(logfile, "%s 1st write to file\n", __func__); + fflush(logfile); + + /* + * Initiate a close file and make sure our handle remains + * valid since we still have the logfile lock. + */ + qemu_log_close(); + fprintf(logfile, "%s 2nd write to file\n", __func__); + fflush(logfile); + qemu_log_unlock(logfile); + + g_assert(!err); +} + /* Remove a directory and all its entries (non-recursive). */ static void rmdir_full(gchar const *root) { @@ -134,6 +210,10 @@ int main(int argc, char **argv) g_test_add_func("/logging/parse_range", test_parse_range); g_test_add_data_func("/logging/parse_path", tmp_path, test_parse_path); + g_test_add_data_func("/logging/logfile_write_path", + tmp_path, test_logfile_write); + g_test_add_data_func("/logging/logfile_lock_path", + tmp_path, test_logfile_lock); rc = g_test_run(); From patchwork Tue Nov 12 15:01:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Robert Foley X-Patchwork-Id: 179213 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp8241859ilf; Tue, 12 Nov 2019 07:07:36 -0800 (PST) X-Google-Smtp-Source: APXvYqz7wPIpaolCaKZ/UyGpT2d9viE4eZXlc/XP6H2TlJm9UiAGIO9ZAFGZrAiZx/tBGB72rVBf X-Received: by 2002:ac8:6c5c:: with SMTP id z28mr32431825qtu.17.1573571256020; Tue, 12 Nov 2019 07:07:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573571256; cv=none; d=google.com; s=arc-20160816; b=pKGw5zIXGIpaPBsXBzOoA60uumX6/7Qq5yXGOvzJkACMrKQmpmOWEMIvQclNin2PRS /nT03yrBQq3JwJ92cGBYxZpDxqjDJsuz5zeAA1kjNppbfiObG3ssE98vt3skzBDWiWZ7 HjG9RSRjEbJOaPUeuSq6Iop8f3d+EhbPSECS3rZb1EYswNZLGEYpTefx0YkYVtBzD3Lm 67ofrHPkmprFNSV7BpomNSDXHSei96jeaZCkbWTiLKdXjWACfdqrqYYHfB8tda5Dfvi7 H4k217EqWDb9FbpH6YYcIVCKFD+skFbxwAykultR+bc7Cr+/WxOBsdfxPBc3AR+wRkxZ 2m9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:references:in-reply-to :message-id:date:subject:to:from:dkim-signature; bh=PT8V7FGR+uiq7NVQ+Sjew78XVlFsZNWfaPZAmYaVr1k=; b=yMdhGxzu5HcETbTPJrESufbAOK6CaUpfp+e2yXJ6nn6czzOcJZVqmuUt2zJzSdrLiF t2YWsHt6OZneAlaIkz8WXnPyCVmNJmj2VLGkw5JgVALZYzJWs1ek6CXOpsBMJgJltTbb BIVRYBzo2ILCKCtt988N12t8PS8TM4/kL4CCpyV8FBH5X2hOIvA4q9Z2dSuCoAHISpUM QqRAvWjFMg8HnlvSvsZAIhJ2I+ZEjwGURC+TNEEvCbFgK9/iJlpC0U5pOtB8n9ChdXEH FEisHWeblYmup7Gz4nTKfzQWW3GtUwuXidopUQNTc2hAJFxbLr1VXbCy1NIrNRcvAc2T 5p9g== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=Q9idqCMz; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id v9si11025096qta.129.2019.11.12.07.07.35 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 12 Nov 2019 07:07:36 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=Q9idqCMz; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:36234 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iUXlW-0003Cl-Mr for patch@linaro.org; Tue, 12 Nov 2019 10:07:34 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38078) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iUXgf-0005yt-Jk for qemu-devel@nongnu.org; Tue, 12 Nov 2019 10:02:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iUXge-0002MP-HV for qemu-devel@nongnu.org; Tue, 12 Nov 2019 10:02:33 -0500 Received: from mail-pg1-x544.google.com ([2607:f8b0:4864:20::544]:37487) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iUXge-0002LR-CR for qemu-devel@nongnu.org; Tue, 12 Nov 2019 10:02:32 -0500 Received: by mail-pg1-x544.google.com with SMTP id z24so12027673pgu.4 for ; Tue, 12 Nov 2019 07:02:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=PT8V7FGR+uiq7NVQ+Sjew78XVlFsZNWfaPZAmYaVr1k=; b=Q9idqCMz9VimN1mMjs3zKKOgu3qH6ebvRMGUkdIvw/xpWGHSAvFdW0RRmKk4cbYfhK ZSu6sw1X8Nxrz0mzIg9luOOw0qjM+woe2NyjLoYXO/Rj3lx4uYKXIMCPNeUT3Mpkrau6 MsgJEIlRHL98krpYf1g1e0vvSZjPivYElyJhVZhaYXlM7DjgLFJBJF7WO3GivsNUuh0s jDy+/WegJGFa9AXNU/rsQswCjZ6B2/gIMMOOcJpQGkyn0GoU8j7t3FlL0dKiMqtX+IlU bRah0LBoS/jPrug038fn2IdSP5iR7bc1NcxuFMVWgEfAQYE/orTeYCR/Z2kd4zOgyD8i JTSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=PT8V7FGR+uiq7NVQ+Sjew78XVlFsZNWfaPZAmYaVr1k=; b=mEi7pFTrHEgscKGXaH4q7H4Lrx3pgF6B4l+fNqE+DRz3i84htLS6u2zHFVhs/VTEk+ xtxV4M0vOiVe9vewdFxHTs74XJz/Wk1GpEo68RdTABwhQunhSpnh6bj6lHcFrsfJTWWy joXlh7bSUSdspK9WJq+vRSPp+9eu5JDnUYorlWMXbviOvm7+wH29cSqjkjGhnEoC+iPD H9zBWSZlN2BjXWirqnYfHLTJEGr5EhYP4w/tC+mIrg0KhSptagp1n+AsbJlTlEnGxs0V 8gcUhHOr5UFoPKdUDwvZrcNosJiKdFH73jIeqJ3OCJ9mrHD+4ky2zvO6mOXsdPXV0xDC YJZA== X-Gm-Message-State: APjAAAXUSHrSXvX6klO0Ny6kXL1sm71jwpxyu2oJbDf5+DrqGX99wXkJ 2JojW2eKZ97l+YpUoaXIZdhkxBJ6m38= X-Received: by 2002:a63:f501:: with SMTP id w1mr36813394pgh.307.1573570951144; Tue, 12 Nov 2019 07:02:31 -0800 (PST) Received: from Rfoley-MA01.usrd.futurewei.com ([12.111.81.71]) by smtp.gmail.com with ESMTPSA id a3sm8235511pfo.71.2019.11.12.07.02.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Nov 2019 07:02:30 -0800 (PST) From: Robert Foley To: qemu-devel@nongnu.org Subject: [PATCH v1 5/5] Fix double free issue in qemu_set_log_filename(). Date: Tue, 12 Nov 2019 10:01:05 -0500 Message-Id: <20191112150105.2498-6-robert.foley@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191112150105.2498-1-robert.foley@linaro.org> References: <20191112150105.2498-1-robert.foley@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::544 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.puhov@linaro.org, alex.bennee@linaro.org, robert.foley@linaro.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" After freeing the logfilename, we set logfilename to NULL, in case of an error which returns without setting logfilename. Signed-off-by: Robert Foley --- v1 - This is new in the patch v1. --- util/log.c | 1 + 1 file changed, 1 insertion(+) -- 2.17.1 Reviewed-by: Alex Bennée diff --git a/util/log.c b/util/log.c index 802b8de42e..1eed74788c 100644 --- a/util/log.c +++ b/util/log.c @@ -148,6 +148,7 @@ void qemu_set_log_filename(const char *filename, Error **errp) char *pidstr; g_free(logfilename); + logfilename = NULL; pidstr = strstr(filename, "%"); if (pidstr) {