From patchwork Sun Jul 23 20:06:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 124545 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9010:0:b0:3e4:2afc:c1 with SMTP id l16csp1421790vqg; Sun, 23 Jul 2023 13:36:32 -0700 (PDT) X-Google-Smtp-Source: APBJJlGSUBnNbLtxOh8wKkCCEF3d+R3ZYcIVQl9NM7PONRe6lttrCMSOiDcMte/QIUstHxhus1yU X-Received: by 2002:a05:6a20:508:b0:133:cf5c:4d2e with SMTP id 8-20020a056a20050800b00133cf5c4d2emr7804961pzp.20.1690144592606; Sun, 23 Jul 2023 13:36:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690144592; cv=none; d=google.com; s=arc-20160816; b=Ed1VBR7lL0KINpp2WJRBbYgFzt2YBuQAEfiCO7PSxf5Fq9m31CTHmrpNERv1/rE6iG MDQUM57nRM2o5akEzevjtnJmubQMz8VJ2JR9g2g+ucQhYUEtDV1MOuEDc4x3MN1vfYLe LjxofeTTs8NAUKfel6+WwACbzoQBehY/wCZG7qz5PenPj1ZU/PUqxq+56axN2L55hoJP X9rTyVZP33XhFSO1jZ2mAEROhmu3y1+UXd2tTxqgvrjmkFDzd+KlAydNQEKoHfzAUIhv sGQvN+8HRy9kFbphwWUF25RfaDexyuci3J4SKW0zbw2brInfn9+PeyK0xApTZn/5JyG/ 6TeA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id; bh=+AExQe7eMHRP/XicMEpt5XtJEcVufU3ncfhUMv3yRIw=; fh=ugO8u2jGP7BKOhvHf4OOAm2/ud3NXzBtH01f/YDxRuc=; b=vMd0qGQjWLgZ3o1aR9nrxVs6vkISKe3Ao1bC7Err4NLi7Hl3lonsWik6oroF6amG1c 7QPlixeHzApsgUZlHqJe5ZM5pY/2G3DsWOiulaPYu0GxQczD+rpXGRW6SdtZ8iLertkA 7zGJXvaKbKetcVjs3DE9tlnFw/moBLBnRgoKiN8+Ke6/hKHZR6BqZU424mmogGpEGR22 FRbIU7HpBFTd+EWTahvznWouzN8QGs1n1+826aR7L7Zgj/9S9SKElQh9a9j8ER0OJhYX ftACl+XflI1yhVu04kq//XoCW0l6s/ScjTyEMYSCXlBrizzMaH6EKIqc3xV3GvOXxbJA GF7g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id cm25-20020a056a00339900b0067dd87a586esi7488568pfb.377.2023.07.23.13.36.19; Sun, 23 Jul 2023 13:36:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229477AbjGWUG7 (ORCPT + 99 others); Sun, 23 Jul 2023 16:06:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59076 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229491AbjGWUG4 (ORCPT ); Sun, 23 Jul 2023 16:06:56 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D8F7EE40 for ; Sun, 23 Jul 2023 13:06:55 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 652CE60E9E for ; Sun, 23 Jul 2023 20:06:55 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C3970C433CB; Sun, 23 Jul 2023 20:06:54 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.96) (envelope-from ) id 1qNfLx-001c2C-2D; Sun, 23 Jul 2023 16:06:53 -0400 Message-ID: <20230723200653.506168754@goodmis.org> User-Agent: quilt/0.66 Date: Sun, 23 Jul 2023 16:06:24 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Andrew Morton , YueHaibing Subject: [for-linus][PATCH 1/3] tracing: Remove unused extern declaration tracing_map_set_field_descr() References: <20230723200623.034313147@goodmis.org> MIME-Version: 1.0 X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772245056275584333 X-GMAIL-MSGID: 1772245056275584333 From: YueHaibing Since commit 08d43a5fa063 ("tracing: Add lock-free tracing_map"), this is never used, so can be removed. Link: https://lore.kernel.org/linux-trace-kernel/20230722032123.24664-1-yuehaibing@huawei.com Cc: Signed-off-by: YueHaibing Signed-off-by: Steven Rostedt (Google) --- kernel/trace/tracing_map.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/kernel/trace/tracing_map.h b/kernel/trace/tracing_map.h index 2c765ee2a4d4..99c37eeebc16 100644 --- a/kernel/trace/tracing_map.h +++ b/kernel/trace/tracing_map.h @@ -272,10 +272,6 @@ extern u64 tracing_map_read_sum(struct tracing_map_elt *elt, unsigned int i); extern u64 tracing_map_read_var(struct tracing_map_elt *elt, unsigned int i); extern u64 tracing_map_read_var_once(struct tracing_map_elt *elt, unsigned int i); -extern void tracing_map_set_field_descr(struct tracing_map *map, - unsigned int i, - unsigned int key_offset, - tracing_map_cmp_fn_t cmp_fn); extern int tracing_map_sort_entries(struct tracing_map *map, struct tracing_map_sort_key *sort_keys, From patchwork Sun Jul 23 20:06:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 124544 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9010:0:b0:3e4:2afc:c1 with SMTP id l16csp1421457vqg; Sun, 23 Jul 2023 13:35:29 -0700 (PDT) X-Google-Smtp-Source: APBJJlFOly7Ec3d2ae82WOTOysaw2gEFYOcE3FC3LQtI0PcGQVVVkmnHXOlbMF2KrwOdoRQpJX3f X-Received: by 2002:a05:6a00:c94:b0:67a:6af6:5171 with SMTP id a20-20020a056a000c9400b0067a6af65171mr7732559pfv.13.1690144529503; Sun, 23 Jul 2023 13:35:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690144529; cv=none; d=google.com; s=arc-20160816; b=anb2EIC4eqkVWsxlEsBvciyIR0FSgPFS3tsV4u8aSqwNXKqvdKjAcJ3sWiCxJILzd8 FKgf6Roz3QkB9386TqydRJrYwWA+4rPdpQwXBmBvqmgSQyu/WKI1gZMJEN7Bc5yo3bZa NyUbGBnKGoptPICQBFSMZ+ZBf6NQ05S1P1kNQDXoLMt2zyyVFiTZXv/s9nOisipC7yRQ 9GeWDGgVL7zePO6Og74B5cBok0QfZQL1Xmymz47Uz+oZh748eGvtwR/fjSX+qow85teg Ek8CwNEHMSfHgvlLJGXj/CTZ1lyZEoTNEDtu1sEjEITsDeS1ijYU7e2kO7Y72ayPfNVx +0gg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id; bh=PEf86HIF0IwoGA8LSES+WiNITsRtPQ2RycaA2+JKA2I=; fh=+eP4Yw9id3AnsYQmbWSaepuW57tscXDBXtaR+hfBroM=; b=ewEmv/FOS05NMtOm3tdneZbf5VCwdg0bbH7yvUdSiN1vm8xw2lzFzCyiql4Pkm4jga XWOKs4b8hF4atfCnNhAPHXRfcrlGBuzSFFrSOdZTXBabJuksMeIvD0T+9lJb5uwywHmG mQJD1wct7E5mYg5Z3oESaCq6KeZG9A4lZ4THm29KsC1oOB5gujZnwaQVQqHTBPJSoWyc TWcjpk4ex+hof/ZEgZOs7xxCvIOkTCedib9KGeoQ2VRIXfUJGsB/Rt5He9RVngwdoKsl QuP3PByq27fQbVkD9xyb4vHCeSqBdm5+ndf9YqIkEA8hsZAs8bMu1DsXCtK0JLZpD4jU sn1Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id cm25-20020a056a00339900b0067dd87a586esi7488568pfb.377.2023.07.23.13.35.16; Sun, 23 Jul 2023 13:35:29 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229991AbjGWUHE (ORCPT + 99 others); Sun, 23 Jul 2023 16:07:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59084 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229834AbjGWUG5 (ORCPT ); Sun, 23 Jul 2023 16:06:57 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DCBCAE43 for ; Sun, 23 Jul 2023 13:06:55 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 6BC2360C83 for ; Sun, 23 Jul 2023 20:06:55 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id BD6BDC433C9; Sun, 23 Jul 2023 20:06:54 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.96) (envelope-from ) id 1qNfLx-001c2k-2t; Sun, 23 Jul 2023 16:06:53 -0400 Message-ID: <20230723200653.709477698@goodmis.org> User-Agent: quilt/0.66 Date: Sun, 23 Jul 2023 16:06:25 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Andrew Morton , Chen Lin Subject: [for-linus][PATCH 2/3] ring-buffer: Do not swap cpu_buffer during resize process References: <20230723200623.034313147@goodmis.org> MIME-Version: 1.0 X-Spam-Status: No, score=-6.7 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_HI,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772244990434080954 X-GMAIL-MSGID: 1772244990434080954 From: Chen Lin When ring_buffer_swap_cpu was called during resize process, the cpu buffer was swapped in the middle, resulting in incorrect state. Continuing to run in the wrong state will result in oops. This issue can be easily reproduced using the following two scripts: /tmp # cat test1.sh //#! /bin/sh for i in `seq 0 100000` do echo 2000 > /sys/kernel/debug/tracing/buffer_size_kb sleep 0.5 echo 5000 > /sys/kernel/debug/tracing/buffer_size_kb sleep 0.5 done /tmp # cat test2.sh //#! /bin/sh for i in `seq 0 100000` do echo irqsoff > /sys/kernel/debug/tracing/current_tracer sleep 1 echo nop > /sys/kernel/debug/tracing/current_tracer sleep 1 done /tmp # ./test1.sh & /tmp # ./test2.sh & A typical oops log is as follows, sometimes with other different oops logs. [ 231.711293] WARNING: CPU: 0 PID: 9 at kernel/trace/ring_buffer.c:2026 rb_update_pages+0x378/0x3f8 [ 231.713375] Modules linked in: [ 231.714735] CPU: 0 PID: 9 Comm: kworker/0:1 Tainted: G W 6.5.0-rc1-00276-g20edcec23f92 #15 [ 231.716750] Hardware name: linux,dummy-virt (DT) [ 231.718152] Workqueue: events update_pages_handler [ 231.719714] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 231.721171] pc : rb_update_pages+0x378/0x3f8 [ 231.722212] lr : rb_update_pages+0x25c/0x3f8 [ 231.723248] sp : ffff800082b9bd50 [ 231.724169] x29: ffff800082b9bd50 x28: ffff8000825f7000 x27: 0000000000000000 [ 231.726102] x26: 0000000000000001 x25: fffffffffffff010 x24: 0000000000000ff0 [ 231.728122] x23: ffff0000c3a0b600 x22: ffff0000c3a0b5c0 x21: fffffffffffffe0a [ 231.730203] x20: ffff0000c3a0b600 x19: ffff0000c0102400 x18: 0000000000000000 [ 231.732329] x17: 0000000000000000 x16: 0000000000000000 x15: 0000ffffe7aa8510 [ 231.734212] x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000002 [ 231.736291] x11: ffff8000826998a8 x10: ffff800082b9baf0 x9 : ffff800081137558 [ 231.738195] x8 : fffffc00030e82c8 x7 : 0000000000000000 x6 : 0000000000000001 [ 231.740192] x5 : ffff0000ffbafe00 x4 : 0000000000000000 x3 : 0000000000000000 [ 231.742118] x2 : 00000000000006aa x1 : 0000000000000001 x0 : ffff0000c0007208 [ 231.744196] Call trace: [ 231.744892] rb_update_pages+0x378/0x3f8 [ 231.745893] update_pages_handler+0x1c/0x38 [ 231.746893] process_one_work+0x1f0/0x468 [ 231.747852] worker_thread+0x54/0x410 [ 231.748737] kthread+0x124/0x138 [ 231.749549] ret_from_fork+0x10/0x20 [ 231.750434] ---[ end trace 0000000000000000 ]--- [ 233.720486] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000 [ 233.721696] Mem abort info: [ 233.721935] ESR = 0x0000000096000004 [ 233.722283] EC = 0x25: DABT (current EL), IL = 32 bits [ 233.722596] SET = 0, FnV = 0 [ 233.722805] EA = 0, S1PTW = 0 [ 233.723026] FSC = 0x04: level 0 translation fault [ 233.723458] Data abort info: [ 233.723734] ISV = 0, ISS = 0x00000004, ISS2 = 0x00000000 [ 233.724176] CM = 0, WnR = 0, TnD = 0, TagAccess = 0 [ 233.724589] GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0 [ 233.725075] user pgtable: 4k pages, 48-bit VAs, pgdp=0000000104943000 [ 233.725592] [0000000000000000] pgd=0000000000000000, p4d=0000000000000000 [ 233.726231] Internal error: Oops: 0000000096000004 [#1] PREEMPT SMP [ 233.726720] Modules linked in: [ 233.727007] CPU: 0 PID: 9 Comm: kworker/0:1 Tainted: G W 6.5.0-rc1-00276-g20edcec23f92 #15 [ 233.727777] Hardware name: linux,dummy-virt (DT) [ 233.728225] Workqueue: events update_pages_handler [ 233.728655] pstate: 200000c5 (nzCv daIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 233.729054] pc : rb_update_pages+0x1a8/0x3f8 [ 233.729334] lr : rb_update_pages+0x154/0x3f8 [ 233.729592] sp : ffff800082b9bd50 [ 233.729792] x29: ffff800082b9bd50 x28: ffff8000825f7000 x27: 0000000000000000 [ 233.730220] x26: 0000000000000000 x25: ffff800082a8b840 x24: ffff0000c0102418 [ 233.730653] x23: 0000000000000000 x22: fffffc000304c880 x21: 0000000000000003 [ 233.731105] x20: 00000000000001f4 x19: ffff0000c0102400 x18: ffff800082fcbc58 [ 233.731727] x17: 0000000000000000 x16: 0000000000000001 x15: 0000000000000001 [ 233.732282] x14: ffff8000825fe0c8 x13: 0000000000000001 x12: 0000000000000000 [ 233.732709] x11: ffff8000826998a8 x10: 0000000000000ae0 x9 : ffff8000801b760c [ 233.733148] x8 : fefefefefefefeff x7 : 0000000000000018 x6 : ffff0000c03298c0 [ 233.733553] x5 : 0000000000000002 x4 : 0000000000000000 x3 : 0000000000000000 [ 233.733972] x2 : ffff0000c3a0b600 x1 : 0000000000000000 x0 : 0000000000000000 [ 233.734418] Call trace: [ 233.734593] rb_update_pages+0x1a8/0x3f8 [ 233.734853] update_pages_handler+0x1c/0x38 [ 233.735148] process_one_work+0x1f0/0x468 [ 233.735525] worker_thread+0x54/0x410 [ 233.735852] kthread+0x124/0x138 [ 233.736064] ret_from_fork+0x10/0x20 [ 233.736387] Code: 92400000 910006b5 aa000021 aa0303f7 (f9400060) [ 233.736959] ---[ end trace 0000000000000000 ]--- After analysis, the seq of the error is as follows [1-5]: int ring_buffer_resize(struct trace_buffer *buffer, unsigned long size, int cpu_id) { for_each_buffer_cpu(buffer, cpu) { cpu_buffer = buffer->buffers[cpu]; //1. get cpu_buffer, aka cpu_buffer(A) ... ... schedule_work_on(cpu, &cpu_buffer->update_pages_work); //2. 'update_pages_work' is queue on 'cpu', cpu_buffer(A) is passed to // update_pages_handler, do the update process, set 'update_done' in // complete(&cpu_buffer->update_done) and to wakeup resize process. //----> //3. Just at this moment, ring_buffer_swap_cpu is triggered, //cpu_buffer(A) be swaped to cpu_buffer(B), the max_buffer. //ring_buffer_swap_cpu is called as the 'Call trace' below. Call trace: dump_backtrace+0x0/0x2f8 show_stack+0x18/0x28 dump_stack+0x12c/0x188 ring_buffer_swap_cpu+0x2f8/0x328 update_max_tr_single+0x180/0x210 check_critical_timing+0x2b4/0x2c8 tracer_hardirqs_on+0x1c0/0x200 trace_hardirqs_on+0xec/0x378 el0_svc_common+0x64/0x260 do_el0_svc+0x90/0xf8 el0_svc+0x20/0x30 el0_sync_handler+0xb0/0xb8 el0_sync+0x180/0x1c0 //<---- /* wait for all the updates to complete */ for_each_buffer_cpu(buffer, cpu) { cpu_buffer = buffer->buffers[cpu]; //4. get cpu_buffer, cpu_buffer(B) is used in the following process, //the state of cpu_buffer(A) and cpu_buffer(B) is totally wrong. //for example, cpu_buffer(A)->update_done will leave be set 1, and will //not 'wait_for_completion' at the next resize round. if (!cpu_buffer->nr_pages_to_update) continue; if (cpu_online(cpu)) wait_for_completion(&cpu_buffer->update_done); cpu_buffer->nr_pages_to_update = 0; } ... } //5. the state of cpu_buffer(A) and cpu_buffer(B) is totally wrong, //Continuing to run in the wrong state, then oops occurs. Link: https://lore.kernel.org/linux-trace-kernel/202307191558478409990@zte.com.cn Signed-off-by: Chen Lin Signed-off-by: Steven Rostedt (Google) --- kernel/trace/ring_buffer.c | 14 +++++++++++++- kernel/trace/trace.c | 3 ++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 14d8001140c8..de061dd47313 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -536,6 +536,7 @@ struct trace_buffer { unsigned flags; int cpus; atomic_t record_disabled; + atomic_t resizing; cpumask_var_t cpumask; struct lock_class_key *reader_lock_key; @@ -2167,7 +2168,7 @@ int ring_buffer_resize(struct trace_buffer *buffer, unsigned long size, /* prevent another thread from changing buffer sizes */ mutex_lock(&buffer->mutex); - + atomic_inc(&buffer->resizing); if (cpu_id == RING_BUFFER_ALL_CPUS) { /* @@ -2322,6 +2323,7 @@ int ring_buffer_resize(struct trace_buffer *buffer, unsigned long size, atomic_dec(&buffer->record_disabled); } + atomic_dec(&buffer->resizing); mutex_unlock(&buffer->mutex); return 0; @@ -2342,6 +2344,7 @@ int ring_buffer_resize(struct trace_buffer *buffer, unsigned long size, } } out_err_unlock: + atomic_dec(&buffer->resizing); mutex_unlock(&buffer->mutex); return err; } @@ -5541,6 +5544,15 @@ int ring_buffer_swap_cpu(struct trace_buffer *buffer_a, if (local_read(&cpu_buffer_b->committing)) goto out_dec; + /* + * When resize is in progress, we cannot swap it because + * it will mess the state of the cpu buffer. + */ + if (atomic_read(&buffer_a->resizing)) + goto out_dec; + if (atomic_read(&buffer_b->resizing)) + goto out_dec; + buffer_a->buffers[cpu] = cpu_buffer_b; buffer_b->buffers[cpu] = cpu_buffer_a; diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index be847d45d81c..b8870078ef58 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -1928,9 +1928,10 @@ update_max_tr_single(struct trace_array *tr, struct task_struct *tsk, int cpu) * place on this CPU. We fail to record, but we reset * the max trace buffer (no one writes directly to it) * and flag that it failed. + * Another reason is resize is in progress. */ trace_array_printk_buf(tr->max_buffer.buffer, _THIS_IP_, - "Failed to swap buffers due to commit in progress\n"); + "Failed to swap buffers due to commit or resize in progress\n"); } WARN_ON_ONCE(ret && ret != -EAGAIN && ret != -EBUSY); From patchwork Sun Jul 23 20:06:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 124543 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9010:0:b0:3e4:2afc:c1 with SMTP id l16csp1421358vqg; Sun, 23 Jul 2023 13:35:09 -0700 (PDT) X-Google-Smtp-Source: APBJJlHONkjMX7B1ifal44SHJmbAKVDN1NUqlRBYIOhHxSHTOE+iPxEH6cJWm3D/b+Gs25OLVS8Q X-Received: by 2002:a05:6a00:1914:b0:66e:4df5:6c10 with SMTP id y20-20020a056a00191400b0066e4df56c10mr6702494pfi.34.1690144509008; Sun, 23 Jul 2023 13:35:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690144508; cv=none; d=google.com; s=arc-20160816; b=bDjv8OIzpGi/WRXQoqjcDvRNRkfW7ZVBHr8NcoPF0nDkFWKAL/G+9vlyrOsNB/iL3/ QKlqluf7UxqRha7Vdroa4frjOK7M4lIlvvkNaEQymC88jFwu4mJHllGYC6KVocKiccfF xT8x4jxEfnvj/DUyz+A6VVHMndLoqnio7y9caVIWVTZJYvyzQKYq8kl4+0ELYbQMTufv NCIuUba/ci82hIc0OUwKbJcj9+jp0tvBjGbfAycCpcQjwMV9SIj+lNWchUFewS6b5msY rVJ857iEV1Bxn76Ka2e/IKGGLVZ5FsAenyRumEnoVQwjqcAPxGJ3U+uKO8KOHP2x6KgK eyqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id; bh=jJFC4mODE5/XRfnG5dLKOufcF8GNfZ9J+e3L9dpeu/8=; fh=p45q1WWgEXavu+xGZjI3fje8HNDUyzibSBun5XMMRhY=; b=cQqqBvLkfBExKm2PWUhwYTaQpsGwV0NUbyHYuhQ60DmQ5Mxf9yM0/HKTnyayi4hjcO BWlueOQmbJCDF2xqsF+7+3CNnc9/vcq5ecP2Xv0QeP+kVoga1yi0b55AGEM6AHcAWoeB qdwYwRlRSFfrdAO7ZeqWeYxYt7E3azvG6gjEpLVojMrG5FLneLKNyH5hvGcuqSjMsGhd +T+a4phNdXMJyCxjMqG5K8E/t+vtB1i9uGaPwrpYQ1gnJihmySm99nD+wYiM8HwoYKYO L/reu2iDtByg4wG+OnJoCqAw3S7pEmyxjjgU9P7vFeMGZZEkY1t1O7DTdVBLcFsRGaY3 +ezw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ch7-20020a056a00288700b006825f34417fsi7402836pfb.238.2023.07.23.13.34.55; Sun, 23 Jul 2023 13:35:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229983AbjGWUHB (ORCPT + 99 others); Sun, 23 Jul 2023 16:07:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59082 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229775AbjGWUG4 (ORCPT ); Sun, 23 Jul 2023 16:06:56 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 24A3AE5B; Sun, 23 Jul 2023 13:06:56 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id AA7E460E9F; Sun, 23 Jul 2023 20:06:55 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1AE37C433CD; Sun, 23 Jul 2023 20:06:55 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.96) (envelope-from ) id 1qNfLy-001c3I-0L; Sun, 23 Jul 2023 16:06:54 -0400 Message-ID: <20230723200653.918039652@goodmis.org> User-Agent: quilt/0.66 Date: Sun, 23 Jul 2023 16:06:26 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Andrew Morton , stable@vger.kernel.org, Mohamed Khalfella Subject: [for-linus][PATCH 3/3] tracing/histograms: Return an error if we fail to add histogram to hist_vars list References: <20230723200623.034313147@goodmis.org> MIME-Version: 1.0 X-Spam-Status: No, score=-6.7 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_HI,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772244968704223966 X-GMAIL-MSGID: 1772244968704223966 From: Mohamed Khalfella Commit 6018b585e8c6 ("tracing/histograms: Add histograms to hist_vars if they have referenced variables") added a check to fail histogram creation if save_hist_vars() failed to add histogram to hist_vars list. But the commit failed to set ret to failed return code before jumping to unregister histogram, fix it. Link: https://lore.kernel.org/linux-trace-kernel/20230714203341.51396-1-mkhalfella@purestorage.com Cc: stable@vger.kernel.org Fixes: 6018b585e8c6 ("tracing/histograms: Add histograms to hist_vars if they have referenced variables") Signed-off-by: Mohamed Khalfella Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace_events_hist.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c index c8c61381eba4..d06938ae0717 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -6668,7 +6668,8 @@ static int event_hist_trigger_parse(struct event_command *cmd_ops, goto out_unreg; if (has_hist_vars(hist_data) || hist_data->n_var_refs) { - if (save_hist_vars(hist_data)) + ret = save_hist_vars(hist_data); + if (ret) goto out_unreg; }