nown [10.57.45.151])
	by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6D97C3F6A8;
	Mon,  5 Jan 2026 02:51:00 -0800 (PST)
Date: Mon, 5 Jan 2026 10:50:57 +0000
From: Sudeep Holla <sudeep.holla@arm.com>
To: Petr Malat <oss@malat.biz>
Cc: stable@vger.kernel.org, pierre.gondois@arm.com, wen.yang@linux.dev,
	Sudeep Holla <sudeep.holla@arm.com>
Subject: Re: [PATCH] cacheinfo: Remove of_node_put() for fw_token
Message-ID: <aVuXkUjzIb7BC5vv@bogus>
References: <20260102193457.270660-1-oss@malat.biz>
Precedence: bulk
X-Mailing-List: stable@vger.kernel.org
List-Id: <stable.vger.kernel.org>
List-Subscribe: <mailto:stable+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:stable+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20260102193457.270660-1-oss@malat.biz>
X-Spam-Score: 0.5 (/)
X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has
 performed the tests listed below against this email.
 Information: https://mxroutedocs.com/directadmin/spamfilters/
 ---
 Content analysis details:   (0.5 points)
 ---
  pts rule name              description
 ---- ---------------------- -----------------------------------------
  1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level
                             mail domains are different
  0.0 RCVD_IN_DNSWL_BLOCKED  RBL: ADMINISTRATOR NOTICE: The query to
                             DNSWL was blocked.  See
                             http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block
                              for more information.
                             [172.105.105.114 listed in list.dnswl.org]
 -1.0 MAILING_LIST_MULTI     Multiple indicators imply a widely-seen list
                             manager
SpamTally: Final spam score: 5

On Fri, Jan 02, 2026 at 08:34:57PM +0100, Petr Malat wrote:
> fw_token is used for DT/ACPI systems to identify CPUs sharing caches.
> For DT based systems, fw_token is set to a pointer to a DT node.
> 
> Commit 22def0b492e6 ("arch_topology: Build cacheinfo from primary CPU")
> removed clearing of per_cpu_cacheinfo(cpu), which leads to reference
> underrun in cache_shared_cpu_map_remove() during repeated cpu
> offline/online as the reference is no longer incremented, because
> allocate_cache_info() is now skipped in the online path.
> 
> The same problem existed on upstream but had a different root cause,
> see 2613cc29c572 ("cacheinfo: Remove of_node_put() for fw_token").
> 

Please let us know which stable versions you need this for ? I assume it
is for stable only, but it not clear from the subject.

Or do you want this to be applied only for v6.1.x as 22def0b492e6 exist
in v6.1.x ?

-- 
Regards,
Sudeep


From - Mon Jan 05 10:52:14 2026
X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
Return-Path: <stable+bounces-204637-hi=josie.lol@vger.kernel.org>
Delivered-To: hi@josie.lol
Received: from witcher.mxrouting.net
	by witcher.mxrouting.net with LMTP
	id QJsPAduXW2nrSDsAYBR5ng
	(envelope-from <stable+bounces-204637-hi=josie.lol@vger.kernel.org>)
	for <hi@josie.lol>; Mon, 05 Jan 2026 10:52:11 +0000
Return-path: <stable+bounces-204637-hi=josie.lol@vger.kernel.org>
Envelope-to: hi@josie.lol
Delivery-date: Mon, 05 Jan 2026 10:52:11 +0000
Received: from tor.lore.kernel.org ([172.105.105.114])
	by witcher.mxrouting.net with esmtps  (TLS1.3) tls TLS_AES_256_GCM_SHA384
	(Exim 4.98)
	(envelope-from <stable+bounces-204637-hi=josie.lol@vger.kernel.org>)
	id 1vciC2-0000000HFBF-2oqb
	for hi@josie.lol;
	Mon, 05 Jan 2026 10:52:10 +0000
Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1])
	by tor.lore.kernel.org (Postfix) with ESMTP id D6157301720E
	for <hi@josie.lol>; Mon,  5 Jan 2026 10:51:46 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
	by smtp.subspace.kernel.org (Postfix) with ESMTP id D9A2933031E;
	Mon,  5 Jan 2026 10:44:18 +0000 (UTC)
{"version":3,"file":"DocNode.js","sourceRoot":"","sources":["../../src/nodes/DocNode.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAI3D;;;;;;;GAOG;AACH,IAAY,WA0BX;AA1BD,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,oCAAqB,CAAA;IACrB,kCAAmB,CAAA;IACnB,wCAAyB,CAAA;IACzB,oCAAqB,CAAA;IACrB,kCAAmB,CAAA;IACnB,4DAA6C,CAAA;IAC7C,sCAAuB,CAAA;IACvB,0CAA2B,CAAA;IAC3B,8CAA+B,CAAA;IAC/B,wCAAyB,CAAA;IACzB,4CAA6B,CAAA;IAC7B,8CAA+B,CAAA;IAC/B,sCAAuB,CAAA;IACvB,kCAAmB,CAAA;IACnB,oDAAqC,CAAA;IACrC,kDAAmC,CAAA;IACnC,gDAAiC,CAAA;IACjC,4CAA6B,CAAA;IAC7B,sCAAuB,CAAA;IACvB,wCAAyB,CAAA;IACzB,kDAAmC,CAAA;IACnC,sCAAuB,CAAA;IACvB,kCAAmB,CAAA;IACnB,sCAAuB,CAAA;AACzB,CAAC,EA1BW,WAAW,2BAAX,WAAW,QA0BtB;AAkCD;;GAEG;AACH;IAGE,iBAAmB,UAAyD;QAC1E,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;IAChD,CAAC;IAQD;;;;OAIG;IACI,+BAAa,GAApB;QACE,kFAAkF;QAClF,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEtE,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,KAAK,SAAS,EAAf,CAAe,CAA2B,CAAC;IACzF,CAAC;IAED;;;OAGG;IACO,iCAAe,GAAzB;QACE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;;;;;OAQG;IACW,0BAAkB,GAAhC,UACE,UAAyD;QAEzD,OAAQ,UAAuC,CAAC,MAAM,KAAK,IAAI,CAAC;IAClE,CAAC;IACH,cAAC;AAAD,CAAC,AA/CD,IA+CC;AA/CqB,0BAAO","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\r\n// See LICENSE in the project root for license information.\r\n\r\nimport type { TSDocConfiguration } from '../configuration/TSDocConfiguration';\r\n\r\n/**\r\n * Indicates the type of {@link DocNode}.\r\n *\r\n * @remarks\r\n * When creating custom subclasses of `DocNode`, it's recommended to create your own enum to identify them.\r\n * To avoid naming conflicts between projects, the enum value should be a string comprised of your full\r\n * NPM package name, followed by a \"#\" symbol, followed by the class name (without the \"Doc\" prefix).\r\n */\r\nexport enum DocNodeKind {\r\n  Block = 'Block',\r\n  BlockTag = 'BlockTag',\r\n  Excerpt = 'Excerpt',\r\n  FencedCode = 'FencedCode',\r\n  CodeSpan = 'CodeSpan',\r\n  Comment = 'Comment',\r\n  DeclarationReference = 'DeclarationReference',\r\n  ErrorText = 'ErrorText',\r\n  EscapedText = 'EscapedText',\r\n  HtmlAttribute = 'HtmlAttribute',\r\n  HtmlEndTag = 'HtmlEndTag',\r\n  HtmlStartTag = 'HtmlStartTag',\r\n  InheritDocTag = 'InheritDocTag',\r\n  InlineTag = 'InlineTag',\r\n  LinkTag = 'LinkTag',\r\n  MemberIdentifier = 'MemberIdentifier',\r\n  MemberReference = 'MemberReference',\r\n  MemberSelector = 'MemberSelector',\r\n  MemberSymbol = 'MemberSymbol',\r\n  Paragraph = 'Paragraph',\r\n  ParamBlock = 'ParamBlock',\r\n  ParamCollection = 'ParamCollection',\r\n  PlainText = 'PlainText',\r\n  Section = 'Section',\r\n  SoftBreak = 'SoftBreak'\r\n}\r\n\r\n/**\r\n * Constructor parameters for {@link DocNode}.\r\n *\r\n * @remarks\r\n * There are two scenarios for constructing `DocNode` objects.  The \"builder scenario\" constructs the object based on\r\n * literal strings, does NOT create DocExcerpt child nodes, and generally uses the `IDocNodeParameters`\r\n * hierarchy for its constructor parameters.  The \"parser scenario\" constructs the object by parsing a TypeScript\r\n * source file, does create DocExcerpt child nodes, and generally uses the {@link IDocNodeParsedParameters} hierarchy.\r\n */\r\nexport interface IDocNodeParameters {\r\n  configuration: TSDocConfiguration;\r\n}\r\n\r\n/**\r\n * Constructor parameters for {@link DocNode}.\r\n *\r\n * @remarks\r\n * There are two scenarios for constructing `DocNode` objects.  The \"builder scenario\" constructs the object based on\r\n * literal strings, does NOT create DocExcerpt child nodes, and generally uses the {@link IDocNodeParameters}\r\n * hierarchy for its constructor parameters.  The \"parser scenario\" constructs the object by parsing a TypeScript\r\n * source file, does create DocExcerpt child nodes, and generally uses the `IDocNodeParsedParameters` hierarchy.\r\n */\r\nexport interface IDocNodeParsedParameters {\r\n  configuration: TSDocConfiguration;\r\n\r\n  /**\r\n   * This is a marker used by {@link DocNode.isParsedParameters} to determine whether the constructor was\r\n   * invoked using `IDocNodeParameters` (builder scenario) or `IDocNodeParsedParameters` (parser scenario).\r\n   */\r\n  parsed: true;\r\n}\r\n\r\n/**\r\n * The base class for the parser's Abstract Syntax Tree nodes.\r\n */\r\nexport abstract class DocNode {\r\n  public readonly configuration: TSDocConfiguration;\r\n\r\n  public constructor(parameters: IDocNodeParameters | IDocNodeParsedParameters) {\r\n    this.configuration = parameters.configuration;\r\n  }\r\n\r\n  /**\r\n   * Returns a text string that uniquely identifies the child class type.  This is used for example by\r\n   * switch statements to efficiently determine the kind of node.\r\n   */\r\n  public abstract get kind(): DocNodeKind | string;\r\n\r\n  /**\r\n   * Returns the list of child nodes for this node.  This is useful for visitors that want\r\n   * to scan the tree looking for nodes of a specific type, without having to process\r\n   * intermediary nodes.\r\n   */\r\n  public getChildNodes(): ReadonlyArray<DocNode> {\r\n    // Do this sanity check here, since the constructor cannot access abstract members\r\n    this.configuration.docNodeManager.throwIfNotRegisteredKind(this.kind);\r\n\r\n    return this.onGetChildNodes().filter((x) => x !== undefined) as ReadonlyArray<DocNode>;\r\n  }\r\n\r\n  /**\r\n   * Overridden by child classes to implement {@link DocNode.getChildNodes}.\r\n   * @virtual\r\n   */\r\n  protected onGetChildNodes(): ReadonlyArray<DocNode | undefined> {\r\n    return [];\r\n  }\r\n\r\n  /**\r\n   * A type guard that returns true if the input uses the `IDocNodeParsedParameters` (parser scenario).\r\n   *\r\n   * @remarks\r\n   * There are two scenarios for constructing `DocNode` objects.  The \"builder scenario\" constructs the object based on\r\n   * literal strings, does NOT create DocExcerpt child nodes, and generally uses the {@link IDocNodeParameters}\r\n   * hierarchy for its constructor parameters.  The \"parser scenario\" constructs the object by parsing a TypeScript\r\n   * source file, does create DocExcerpt child nodes, and generally uses the {@link IDocNodeParsedParameters} hierarchy.\r\n   */\r\n  public static isParsedParameters(\r\n    parameters: IDocNodeParameters | IDocNodeParsedParameters\r\n  ): parameters is IDocNodeParsedParameters {\r\n    return (parameters as IDocNodeParsedParameters).parsed === true;\r\n  }\r\n}\r\n"]}