Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp2416970rwd; Mon, 15 May 2023 11:20:51 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5y4OwUt700cgFIM9ytgapYebMVd4g18iFNIkznffzKhKlamwtEyKJrrXrVDz0LUitshVJb X-Received: by 2002:a17:90a:1141:b0:250:43a8:6551 with SMTP id d1-20020a17090a114100b0025043a86551mr33079416pje.35.1684174850892; Mon, 15 May 2023 11:20:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684174850; cv=none; d=google.com; s=arc-20160816; b=Erq/sd1XQaZcZqvZjgPzWSn7kRRecn6IEe3Vs1iux0jvohg9TH6Dw7jkqP+7GvdW6p uGY76Ta1DTkEV88K1TK1DyemdH6kiI0ZB+46/JcV7rhSA3AAtPZHhNbOeKRWAkthjNll ukGZbNK0HbnZKjpfjdsO2drW+qdL3o+3+4Jdq3GzcUP2vn7e9SO7cMq4Hq+Zhtq4Jkat rOrjF2P8HiOtN3p1oTHQBInIv0czcKvUIuBBqB1AyiKkFeAnms6DttsMSP6J6iNjftrd fzcEQcK/44xhHY0MnYla3U61CxThZz052PKaib7uuOBii2G8P5U0LNf0xlkf71jSb4Ec mAhA== 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:dkim-signature; bh=0t7wAXZL5USXQxpN4vCajFBy/hf1+LlNt2JScd0fQmU=; b=dBcQhpln82zz1GQS0G+CHgPEiohzFUBEgUliMVEdfyRkYDMGuXFg7+SQ8HwjW1l/Kk X+oEuA+Iw0ODFEwHdwX1WAflDmKoDi0LtWsGBRuP5dowDmaxZfHTYlDuIz98w+nfRtcB eNoUXC88u1JQQUvox5GuG5t2IG8QcsRisPEsAFzN36h+L3jWgfWVQncDXEf+RXJBswab /WPFNkDIrZRLf5l9UnchJ/gQzJqS/44ui6vczSSCSJwdJ5zOwdobsPG4jIVFg1Ebb0Wg AFwgYdNwJ4fwe4EquvuVtGIUB72mxlGoKrRKe3G7DGjPw0xpRApW6j6o27RrgRVjdXBK nkSA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=DO004ozI; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i186-20020a6387c3000000b0051b5fc497e9si17243838pge.739.2023.05.15.11.20.38; Mon, 15 May 2023 11:20:50 -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; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=DO004ozI; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245024AbjEOSHB (ORCPT + 99 others); Mon, 15 May 2023 14:07:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39776 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244957AbjEOSGf (ORCPT ); Mon, 15 May 2023 14:06:35 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 45A521CB87 for ; Mon, 15 May 2023 11:03:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1684173825; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=0t7wAXZL5USXQxpN4vCajFBy/hf1+LlNt2JScd0fQmU=; b=DO004ozI2GWIZFr4RLYziM4iVkGLBQYiJxbQnW344J3DQ1N4Y3XUGRmwLop/WIrqbSBoxV 9vTzmr/YTVS1BiVReiSENDmN4QmmBYxOx+71fxXexnv/vRU5BkUzzUEqLjTDrjx0nmFnTu Fd3dDi/cY+3HTqfR7YS0lnCWAvDk0RA= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-411-S8EJZ_4aPK6en7Q5TLj-6A-1; Mon, 15 May 2023 14:03:43 -0400 X-MC-Unique: S8EJZ_4aPK6en7Q5TLj-6A-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 0C0671C0F2E3; Mon, 15 May 2023 18:03:43 +0000 (UTC) Received: from tpad.localdomain (ovpn-112-4.gru2.redhat.com [10.97.112.4]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D41A42166B29; Mon, 15 May 2023 18:03:42 +0000 (UTC) Received: by tpad.localdomain (Postfix, from userid 1000) id 890914161E531; Mon, 15 May 2023 15:02:17 -0300 (-03) Message-ID: <20230515180138.717342763@redhat.com> User-Agent: quilt/0.67 Date: Mon, 15 May 2023 15:00:27 -0300 From: Marcelo Tosatti To: Christoph Lameter Cc: Aaron Tomlin , Frederic Weisbecker , Andrew Morton , linux-kernel@vger.kernel.org, linux-mm@kvack.org, Russell King , Huacai Chen , Heiko Carstens , x86@kernel.org, Vlastimil Babka , Michal Hocko , Marcelo Tosatti Subject: [PATCH v8 12/13] mm/vmstat: refresh stats remotely instead of via work item References: <20230515180015.016409657@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.6 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_NONE,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 Refresh per-CPU stats remotely, instead of queueing work items, for the stat_refresh procfs method. This fixes sosreport hang (which uses vmstat_refresh) with spinning SCHED_FIFO process. Signed-off-by: Marcelo Tosatti --- Index: linux-vmstat-remote/mm/vmstat.c =================================================================== --- linux-vmstat-remote.orig/mm/vmstat.c +++ linux-vmstat-remote/mm/vmstat.c @@ -1907,11 +1907,20 @@ static DEFINE_PER_CPU(struct delayed_wor int sysctl_stat_interval __read_mostly = HZ; #ifdef CONFIG_PROC_FS +#ifdef CONFIG_HAVE_CMPXCHG_LOCAL +static int refresh_all_vm_stats(void); +#else static void refresh_vm_stats(struct work_struct *work) { refresh_cpu_vm_stats(true); } +static int refresh_all_vm_stats(void) +{ + return schedule_on_each_cpu(refresh_vm_stats); +} +#endif + int vmstat_refresh(struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos) { @@ -1931,7 +1940,7 @@ int vmstat_refresh(struct ctl_table *tab * transiently negative values, report an error here if any of * the stats is negative, so we know to go looking for imbalance. */ - err = schedule_on_each_cpu(refresh_vm_stats); + err = refresh_all_vm_stats(); if (err) return err; for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++) { @@ -2051,7 +2060,7 @@ static DECLARE_DEFERRABLE_WORK(shepherd, #ifdef CONFIG_HAVE_CMPXCHG_LOCAL /* Flush counters remotely if CPU uses cmpxchg to update its per-CPU counters */ -static void vmstat_shepherd(struct work_struct *w) +static int refresh_all_vm_stats(void) { int cpu; @@ -2061,7 +2070,12 @@ static void vmstat_shepherd(struct work_ cond_resched(); } cpus_read_unlock(); + return 0; +} +static void vmstat_shepherd(struct work_struct *w) +{ + refresh_all_vm_stats(); schedule_delayed_work(&shepherd, round_jiffies_relative(sysctl_stat_interval)); }