Re: [PATCH] net: stmmac: add support for platform specific config.
From: Andrew Lunn
Date: Fri Jun 06 2025 - 12:49:49 EST
> Also, please review the netdev FAQ, if you can find it...
https://www.kernel.org/doc/html/latest/process/maintainer-netdev.html
It got renamed, since it is no longer a set of questions and answers.
Andrew
Return-Path: <linux-kernel+bounces-665425-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id EB8C141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:18:48 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 5035B4E160B
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:18:31 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 237D028466A;
Wed, 28 May 2025 12:18:15 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="390QO/o2"
Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 84EDE283C87;
Wed, 28 May 2025 12:18:11 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.132.182.106
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748434694; cv=none; b=GXLbZHoO0b0YYgbD0HlYxqPBou8Xr5AJYbB45R//o+uJfMXz7LoOtg/uzA22AALWu5ZgW17lTJE49Df+CQAXUitrwpP4WidRWSTuR1vqcN1ItnXa/2vbG1YRykSvs3gjAkng/Xhh5Z8x552NY0DmYSHdB/Xj/SgUMzIeyAO1neE=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748434694; c=relaxed/simple;
bh=hgwlbRSW4jvBljubue1AXwysta/coRLcV6WzlaykAXo=;
h=Message-ID:Date:MIME-Version:Subject:To:CC:References:From:
In-Reply-To:Content-Type; b=h8TM/NUesxZTDxizmyJj7g9TQZGBh2MYYmGPChziiRQxgXALvohc/ZIEc+gbrTbav63j6ECIJzWVx8U7OKKCpwiCSlLZsq/Ca9Yl0aakGLdibuNvSff2eXk/yWIfQtrMAW7poSDAWcP2xY3oEI169Aj0wZf9J6nlV34aOFor32E=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=390QO/o2; arc=none smtp.client-ip=185.132.182.106
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com
Received: from pps.filterd (m0369458.ppops.net [127.0.0.1])
by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S8ewG3017013;
Wed, 28 May 2025 14:17:58 +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h=
cc:content-transfer-encoding:content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to; s=selector1; bh=
qfmkwNJuQPgRSv5nRvippWgZ2ln8+OwhTXxV/tbD23s=; b=390QO/o2W/+aXv2v
rSzQAJskUa0wTrEFkuE2s6XzLs2G6pTQ6qpfRW6NOe1nKuhJjYIrSB2VlsQUNiCZ
r5TwU5UlnQAVk+c2cqucPwSw+TUaBJvim16OoKktuZVA0qdAI5Z+wKVWuATxw9iK
a4jy3ZchWVpFupWMeBrVBN/gRKYRNHdOid9Q3f7XGJOwmGugCCcT081pEAkf1QYv
KcOdXSHx+LG584DetTSm9RGsTuKNDz6N1xI0+9d3ru1L8bF4GwsA5OmDNIjSrcel
RzidRptdgNA2lFeXQ0dffhx2LEjxTby6EqEBBdxZGFd2ytx4VK+7ErSMXlmXhjck
RgypBQ==
Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35])
by mx07-00178001.pphosted.com (PPS) with ESMTPS id 46uqp4q18h-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 14:17:57 +0200 (MEST)
Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20])
by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id C0EEB4004A;
Wed, 28 May 2025 14:16:49 +0200 (CEST)
Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70])
by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 68E786D6652;
Wed, 28 May 2025 14:16:00 +0200 (CEST)
Received: from [10.48.86.185] (10.48.86.185) by SHFDAG1NODE2.st.com
(10.75.129.70) with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 28 May
2025 14:15:59 +0200
Message-ID: <ef481451-b7d2-4f9a-a3d0-c67e8f5061dd@xxxxxxxxxxx>
Date: Wed, 28 May 2025 14:15:58 +0200
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH v3 6/9] ARM: dts: stm32: add Hardware debug port (HDP) on
stm32mp15
To: Krzysztof Kozlowski <krzk@xxxxxxxxxx>,
Linus Walleij
<linus.walleij@xxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof
Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Maxime
Coquelin <mcoquelin.stm32@xxxxxxxxx>,
Alexandre Torgue
<alexandre.torgue@xxxxxxxxxxx>,
Bartosz Golaszewski <brgl@xxxxxxxx>
CC: <linux-kernel@xxxxxxxxxxxxxxx>, <linux-gpio@xxxxxxxxxxxxxxx>,
<devicetree@xxxxxxxxxxxxxxx>,
<linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>,
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>
References: <20250523-hdp-upstream-v3-0-bd6ca199466a@xxxxxxxxxxx>
<20250523-hdp-upstream-v3-6-bd6ca199466a@xxxxxxxxxxx>
<1c21f915-e067-4801-925a-3d4882f358f2@xxxxxxxxxx>
Content-Language: en-US
From: Clement LE GOFFIC <clement.legoffic@xxxxxxxxxxx>
In-Reply-To: <1c21f915-e067-4801-925a-3d4882f358f2@xxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"; format=flowed
Content-Transfer-Encoding: 8bit
X-ClientProxiedBy: SHFCAS1NODE2.st.com (10.75.129.73) To SHFDAG1NODE2.st.com
(10.75.129.70)
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 5/28/25 11:00, Krzysztof Kozlowski wrote:
> On 23/05/2025 14:38, Clément Le Goffic wrote:
>> Add the hdp devicetree node for stm32mp15 SoC family
>>
>> Signed-off-by: Clément Le Goffic <clement.legoffic@xxxxxxxxxxx>
>> ---
>> arch/arm/boot/dts/st/stm32mp151.dtsi | 7 +++++++
>> 1 file changed, 7 insertions(+)
>>
>> diff --git a/arch/arm/boot/dts/st/stm32mp151.dtsi b/arch/arm/boot/dts/st/stm32mp151.dtsi
>> index 0daa8ffe2ff5..b1b568dfd126 100644
>> --- a/arch/arm/boot/dts/st/stm32mp151.dtsi
>> +++ b/arch/arm/boot/dts/st/stm32mp151.dtsi
>> @@ -270,6 +270,13 @@ dts: thermal@50028000 {
>> status = "disabled";
>> };
>>
>> + hdp: pinctrl@5002a000 {
>> + compatible = "st,stm32mp151-hdp";
>> + reg = <0x5002a000 0x400>;
>> + clocks = <&rcc HDP>;
>> + status = "disabled";
>
> Same questions here and in further patches.
Same, disabled by default and enable in board's dts file
>
> Best regards,
> Krzysztof
Clément
Return-Path: <linux-kernel+bounces-665426-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 389C341E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:19:02 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 5B4454E4147
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:18:41 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C0093283C9D;
Wed, 28 May 2025 12:18:18 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=fail reason="signature verification failed" (2048-bit key) header.d=protonmail.com header.i=@protonmail.com header.b="V1xdKxUu"
Received: from mail-43166.protonmail.ch (mail-43166.protonmail.ch [185.70.43.166])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id CAD622853EF
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:18:15 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.70.43.166
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748434698; cv=none; b=FYQCQlDj27l/2ixl9Gudavdo8sFH2fDkovnvKt2n08qdROrejM1lGyfhN1j2ffP9JvjKO8wfiVuKBmnmg5TBEckaI/WQHzze1gbcxC2l66OCZ9uGMQaisIm7zijS11SKp1F8CV/0iVTevnya87CkTzj6CnTcJtP3OFeM6pB7c+4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748434698; c=relaxed/simple;
bh=uOnOxiGiRtFBPj6Dx2RM0uaCIdaV8RxF4Qr13HjkeOA=;
h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=f+99Wm6dy7d0NsZlGUAAMHLy4UxcaKo3KaS79CBIvPZqMhvVrTz+8CoXbAExlxL7AV8x7GWbHh6iuDhvBdtTizjqfY9Bw8mjNzkJTb8L6l95doTfkpcsLeqUJI39+SES70qrdk/nMUwCZ/TcygekppdosxIxURP4WBhnm0Z8wxs=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=protonmail.com; spf=pass smtp.mailfrom=protonmail.com; dkim=pass (2048-bit key) header.d=protonmail.com header.i=@protonmail.com header.b=V1xdKxUu; arc=none smtp.client-ip=185.70.43.166
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=protonmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=protonmail.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
s=protonmail3; t=1748434693; x=1748693893;
bh=uOnOxiGiRtFBPj6Dx2RM0uaCIdaV8RxF4Qr13HjkeOA=;
h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
b=V1xdKxUuzEhgw5ANtiZK8119K6kShVP7grRRaeaa1Y01FxhsEnCpNw7EvxdSW8jjz
y81Jf78Q8Zp6pgkoBNess1Lq4qnvTM8rmh8cqQcU12KlC3BLzuCu2lygXp6TbHN2go
ZYSFstqRksZPC8f93Vk5H1XnmY7tWLxLCAukSQ7gbbGx58LsjzrPquIdxxnYrISN5a
iRgjxb0nbMAc4ZOhLSEZpSqDJ07DrPrBMdFlYr81bqwMIPYqoRVIzxUkwLFn0BKXz+
DObzDLuzLzszveNBvwopkSSN/7klbhTMZ/KYCEA8q28Ic4IEE1Nrda2kxGZumjNft0
CbfhDKzewhvtw==
Date: Wed, 28 May 2025 12:18:11 +0000
To: Miguel Ojeda <miguel.ojeda.sandonis@xxxxxxxxx>
From: Pekka Ristola <pekkarr@xxxxxxxxxxxxxx>
Cc: Alexander Viro <viro@xxxxxxxxxxxxxxxxxx>, Christian Brauner <brauner@xxxxxxxxxx>, Miguel Ojeda <ojeda@xxxxxxxxxx>, Alex Gaynor <alex.gaynor@xxxxxxxxx>, Jan Kara <jack@xxxxxxx>, Boqun Feng <boqun.feng@xxxxxxxxx>, Gary Guo <gary@xxxxxxxxxxx>, =?utf-8?Q?Bj=C3=B6rn_Roy_Baron?= <bjorn3_gh@xxxxxxxxxxxxxx>, Benno Lossin <lossin@xxxxxxxxxx>, Andreas Hindborg <a.hindborg@xxxxxxxxxx>, Alice Ryhl <aliceryhl@xxxxxxxxxx>, Trevor Gross <tmgross@xxxxxxxxx>, Danilo Krummrich <dakr@xxxxxxxxxx>, linux-fsdevel@xxxxxxxxxxxxxxx, rust-for-linux@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH 1/2] rust: file: mark `LocalFile` as `repr(transparent)`
Message-ID: <a-h53UVYFV5_SzPX9oC8md8XoQLoabGTyT9utM2PavNqng5YUVxDRErEj5Eu19CZLmxQKc7rp1RiCmtaULw7mygUQ9cSUb5966WCLIQKwCQ=@protonmail.com>
In-Reply-To: <CANiq72kgu+qKBFOUfcsF9fJkq78p+uBA6KAnpY1Uz5McT0y=SA@xxxxxxxxxxxxxx>
References: <20250527204636.12573-1-pekkarr@xxxxxxxxxxxxxx> <CANiq72kgu+qKBFOUfcsF9fJkq78p+uBA6KAnpY1Uz5McT0y=SA@xxxxxxxxxxxxxx>
Feedback-ID: 29854222:user:proton
X-Pm-Message-ID: 34c9947c169696257b760e7dfd80b551cd248187
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED,
FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wednesday, May 28th, 2025 at 13.52, Miguel Ojeda <miguel.ojeda.sandonis@=
gmail.com> wrote:
> On Tue, May 27, 2025 at 10:49=E2=80=AFPM Pekka Ristola <pekkarr@protonmai=
l.com> wrote:
>=20
> > Unsafe code in `LocalFile`'s methods assumes that the type has the same
> > layout as the inner `bindings::file`. This is not guaranteed by the def=
ault
> > struct representation in Rust, but requires specifying the `transparent=
`
> > representation.
> >=20
> > The `File` struct (which also wraps `bindings::file`) is already marked=
as
> > `repr(transparent)`, so this change makes their layouts equivalent.
> >=20
> > Fixes: 851849824bb5 ("rust: file: add Rust abstraction for `struct file=
`")
> > Closes: https://github.com/Rust-for-Linux/linux/issues/1165
> > Signed-off-by: Pekka Ristola pekkarr@xxxxxxxxxxxxxx
>=20
>=20
> Thanks Pekka, both patches look good to me. I will close the issue
> when Christian applies them (or if I should take them, that is good
> too).
Thanks, I'm glad it went smoothly since this was my first patch to the
mailing list.
Pekka
Return-Path: <linux-kernel+bounces-665427-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 41BD341E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:19:25 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 260CF4E3A17
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:18:59 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 5647A284B3E;
Wed, 28 May 2025 12:18:30 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="d01FmOdW"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id D2E902857C6
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:18:27 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748434709; cv=none; b=DWZUZR7t0GJspiaxS5tFCU17sZTdU/UQmdLQH9wONqob/FTqEitp+pIu3HbiFm7rcHIQZNNNHthFWFNb1fF5H+U0VjvTeToOYpGeVZtlC2K9D6opUzPpqQLSGoqBGuHEObD2y29a67jLOFXnA3/E18FE3b5hpuMttUJOdHIvZoQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748434709; c=relaxed/simple;
bh=LA+kkxIPYmiR7oonheV94jgpXwqI/VWQON0Mo3qHank=;
h=From:To:cc:Subject:MIME-Version:Content-Type:Date:Message-ID; b=MY3HCu2DOfqCGvb1qyKPOFgiRp6+baMcC4egoLSOE/dXJt6wDg/XznLrtcABqImOj3kOS3q7syLXy4Ui9dZkbyk7phQFtZEj7nt3EEtoznXQiLrLXjA+k1lYtmyvMsh41HU8TgNspebbegQUqsC1EPRkmn01eIgCdcMgfPgVb6M=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=d01FmOdW; arc=none smtp.client-ip=170.10.133.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748434706;
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:
content-transfer-encoding:content-transfer-encoding;
bh=e3anGqMiFxhRjcJUcS/g6XPJaPxiEJieaKDIyxVkHoo=;
b=d01FmOdWd5orlftLrIwoehrcY5tAdv6NXW1VbRnK/IuLLvAPbBvUEem3aQHcYm3CR3jmVm
Xm7/4ddrM0IN680JCWLf45KafHoMBZntBYJYbnothCpqUXQGKnFiBhLN1NczYimKTHXwzP
/M6j0verr94Lc5eLNvOliKl5oWizcfg=
Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com
(ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by
relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,
cipher=TLS_AES_256_GCM_SHA384) id us-mta-522-3eGQ-0HqOtuakLtdbVugFw-1; Wed,
28 May 2025 08:18:23 -0400
X-MC-Unique: 3eGQ-0HqOtuakLtdbVugFw-1
X-Mimecast-MFC-AGG-ID: 3eGQ-0HqOtuakLtdbVugFw_1748434702
Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
(No client certificate requested)
by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 9332118001CA;
Wed, 28 May 2025 12:18:21 +0000 (UTC)
Received: from warthog.procyon.org.uk (unknown [10.42.28.2])
by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 87DF23000714;
Wed, 28 May 2025 12:18:18 +0000 (UTC)
Organization: Red Hat UK Ltd. Registered Address: Red Hat UK Ltd, Amberley
Place, 107-111 Peascod Street, Windsor, Berkshire, SI4 1TE, United
Kingdom.
Registered in England and Wales under Company Registration No. 3798903
From: David Howells <dhowells@xxxxxxxxxx>
To: torvalds@xxxxxxxxxxxxxxxxxxxx
cc: dhowells@xxxxxxxxxx, Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>,
Jarkko Sakkinen <jarkko@xxxxxxxxxx>, keyrings@xxxxxxxxxxxxxxx,
linux-security-module@xxxxxxxxxxxxxxx, linux-crypto@xxxxxxxxxxxxxxx,
linux-integrity@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: [PATCH] KEYS: Invert FINAL_PUT bit
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-ID: <301013.1748434697.1@xxxxxxxxxxxxxxxxxxxxxx>
Content-Transfer-Encoding: quoted-printable
Date: Wed, 28 May 2025 13:18:17 +0100
Message-ID: <301015.1748434697@xxxxxxxxxxxxxxxxxxxxxx>
X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Linus,
Could you apply this, please? There shouldn't be any functional change,
rather it's a switch to using combined bit-barrier ops and lesser barriers=
.
A better way to do this might be to provide set_bit_release(), but the end
result would be much the same.
Thanks,
David
---
From: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>
KEYS: Invert FINAL_PUT bit
Invert the FINAL_PUT bit so that test_bit_acquire and clear_bit_unlock
can be used instead of smp_mb.
Signed-off-by: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>
Signed-off-by: David Howells <dhowells@xxxxxxxxxx>
Reviewed-by: Jarkko Sakkinen <jarkko@xxxxxxxxxx>
cc: keyrings@xxxxxxxxxxxxxxx
cc: linux-security-module@xxxxxxxxxxxxxxx
cc: linux-crypto@xxxxxxxxxxxxxxx
cc: linux-integrity@xxxxxxxxxxxxxxx
---
include/linux/key.h | 2 +-
security/keys/gc.c | 4 ++--
security/keys/key.c | 5 +++--
3 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/include/linux/key.h b/include/linux/key.h
index ba05de8579ec..81b8f05c6898 100644
--- a/include/linux/key.h
+++ b/include/linux/key.h
@@ -236,7 +236,7 @@ struct key {
#define KEY_FLAG_ROOT_CAN_INVAL 7 /* set if key can be invalidated by roo=
t without permission */
#define KEY_FLAG_KEEP 8 /* set if key should not be removed */
#define KEY_FLAG_UID_KEYRING 9 /* set if key is a user or user session ke=
yring */
-#define KEY_FLAG_FINAL_PUT 10 /* set if final put has happened on key */
+#define KEY_FLAG_USER_ALIVE 10 /* set if final put has not happened on ke=
y yet */
=
/* the key type and key description string
* - the desc is used to match a key against search criteria
diff --git a/security/keys/gc.c b/security/keys/gc.c
index f27223ea4578..748e83818a76 100644
--- a/security/keys/gc.c
+++ b/security/keys/gc.c
@@ -218,8 +218,8 @@ static void key_garbage_collector(struct work_struct *=
work)
key =3D rb_entry(cursor, struct key, serial_node);
cursor =3D rb_next(cursor);
=
- if (test_bit(KEY_FLAG_FINAL_PUT, &key->flags)) {
- smp_mb(); /* Clobber key->user after FINAL_PUT seen. */
+ if (!test_bit_acquire(KEY_FLAG_USER_ALIVE, &key->flags)) {
+ /* Clobber key->user after final put seen. */
goto found_unreferenced_key;
}
=
diff --git a/security/keys/key.c b/security/keys/key.c
index 7198cd2ac3a3..3bbdde778631 100644
--- a/security/keys/key.c
+++ b/security/keys/key.c
@@ -298,6 +298,7 @@ struct key *key_alloc(struct key_type *type, const cha=
r *desc,
key->restrict_link =3D restrict_link;
key->last_used_at =3D ktime_get_real_seconds();
=
+ key->flags |=3D 1 << KEY_FLAG_USER_ALIVE;
if (!(flags & KEY_ALLOC_NOT_IN_QUOTA))
key->flags |=3D 1 << KEY_FLAG_IN_QUOTA;
if (flags & KEY_ALLOC_BUILT_IN)
@@ -658,8 +659,8 @@ void key_put(struct key *key)
key->user->qnbytes -=3D key->quotalen;
spin_unlock_irqrestore(&key->user->lock, flags);
}
- smp_mb(); /* key->user before FINAL_PUT set. */
- set_bit(KEY_FLAG_FINAL_PUT, &key->flags);
+ /* Mark key as safe for GC after key->user done. */
+ clear_bit_unlock(KEY_FLAG_USER_ALIVE, &key->flags);
schedule_work(&key_gc_work);
}
}
Return-Path: <linux-kernel+bounces-665428-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 4F7E841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:19:38 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id D98047A79A5
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:18:19 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 24704284672;
Wed, 28 May 2025 12:19:30 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="kNdFqCqw"
Received: from fllvem-ot04.ext.ti.com (fllvem-ot04.ext.ti.com [198.47.19.246])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 48CAA283C87
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:19:26 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.246
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748434769; cv=none; b=CpvzeYWw7wCuFEXBW6Vkc9MCk6f4m2j2fzs4GArSxc9R1M2et931hylv9j/HVkquQcFpe5Ptlk8kF/lYNOQ/oWMc4ZMLUZ8UhNEwx0sJo1+2/ycNG9Lrd08LFbGa+5IIHDHro9E2qPF0yDS3xKn9+P06/Bc7npDdRIj5FctFriw=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748434769; c=relaxed/simple;
bh=VGnl6Y+q2kjW350SAMV6KWgkQ0sTgZ/83xluxF/uE1A=;
h=Message-ID:Date:MIME-Version:Subject:To:CC:References:From:
In-Reply-To:Content-Type; b=EuB1YbOrlK14csAbsdXlrbott73WOVNoLuvnArezZvt99r/wKJhbHoXNAhXhqsp5RUgsxyLP5it4ijOKKa8gknDaalmJy8ps/kT0oqxXs/PvXKyyrjBwnZcZmkhYVZDVL0FfD1zuq7IzSkzsHwC7OHgTr+I55Bb5UX0Mkz7qG/g=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=kNdFqCqw; arc=none smtp.client-ip=198.47.19.246
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com
Received: from fllvem-sh03.itg.ti.com ([10.64.41.86])
by fllvem-ot04.ext.ti.com (8.15.2/8.15.2) with ESMTP id 54SCJ5Wx2052677;
Wed, 28 May 2025 07:19:05 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com;
s=ti-com-17Q1; t=1748434745;
bh=l3YN0YjiGyCT1PJmlXnIccHSCajQruxefXMQ1JMSQPE=;
h=Date:Subject:To:CC:References:From:In-Reply-To;
b=kNdFqCqwIXkdgc+N8Lzivt5YP4XEfjRfMYbEa1U6f9OEiyl4WJzQXCScqofA1Nj/f
GbkxJcp5Mxj9SdqCATMIinnQq+e6GggR1jliwD6IxwMLHM+yP+dmFv3bNGseS+UrYB
VPoHqFXov61GpsAlmpO4rHJhFA8K+aB/wpli6YSg=
Received: from DFLE108.ent.ti.com (dfle108.ent.ti.com [10.64.6.29])
by fllvem-sh03.itg.ti.com (8.18.1/8.18.1) with ESMTPS id 54SCJ4823553852
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA256 bits=128 verify=FAIL);
Wed, 28 May 2025 07:19:04 -0500
Received: from DFLE111.ent.ti.com (10.64.6.32) by DFLE108.ent.ti.com
(10.64.6.29) with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Wed, 28
May 2025 07:19:03 -0500
Received: from lelvsmtp5.itg.ti.com (10.180.75.250) by DFLE111.ent.ti.com
(10.64.6.32) with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via
Frontend Transport; Wed, 28 May 2025 07:19:03 -0500
Received: from [172.24.227.14] (jayesh-hp-z2-tower-g5-workstation.dhcp.ti.com [172.24.227.14])
by lelvsmtp5.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54SCIv5e095919;
Wed, 28 May 2025 07:18:57 -0500
Message-ID: <0936a042-8ebe-42f7-b3eb-a4606120cc47@xxxxxx>
Date: Wed, 28 May 2025 17:48:56 +0530
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH v2] drm/bridge: ti-sn65dsi86: Add HPD for DisplayPort
connector type
To: Doug Anderson <dianders@xxxxxxxxxxxx>,
Ernest Van Hoecke
<ernestvanhoecke@xxxxxxxxx>
CC: <andrzej.hajda@xxxxxxxxx>, <neil.armstrong@xxxxxxxxxx>, <rfoss@xxxxxxxxxx>,
<Laurent.pinchart@xxxxxxxxxxxxxxxx>, <dri-devel@xxxxxxxxxxxxxxxxxxxxx>,
<tomi.valkeinen@xxxxxxxxxxxxxxxx>, <max.krummenacher@xxxxxxxxxxx>,
<jonas@xxxxxxxxx>, <jernej.skrabec@xxxxxxxxx>,
<maarten.lankhorst@xxxxxxxxxxxxxxx>, <mripard@xxxxxxxxxx>,
<tzimmermann@xxxxxxx>, <airlied@xxxxxxxxx>, <simona@xxxxxxxx>,
<kieran.bingham+renesas@xxxxxxxxxxxxxxxx>,
<linux-kernel@xxxxxxxxxxxxxxx>, <max.oss.09@xxxxxxxxx>,
<devarsht@xxxxxx>, <dmitry.baryshkov@xxxxxxxxxxxxxxxx>,
<ernest.vanhoecke@xxxxxxxxxxx>
References: <20250508115433.449102-1-j-choudhary@xxxxxx>
<mwh35anw57d6nvre3sguetzq3miu4kd43rokegvul7fk266lys@5h2euthpk7vq>
<CAD=FV=U7XJZg4Vh4xMKEiAuaJHNA1H11SiD19KLBazPmMEVduw@xxxxxxxxxxxxxx>
Content-Language: en-US
From: Jayesh Choudhary <j-choudhary@xxxxxx>
In-Reply-To: <CAD=FV=U7XJZg4Vh4xMKEiAuaJHNA1H11SiD19KLBazPmMEVduw@xxxxxxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"; format=flowed
Content-Transfer-Encoding: 8bit
X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hello Doug, Ernest,
On 27/05/25 21:14, Doug Anderson wrote:
> Hi,
>
> On Mon, May 26, 2025 at 1:41â?¯AM Ernest Van Hoecke
> <ernestvanhoecke@xxxxxxxxx> wrote:
>>
>> Hi Jayesh,
>>
>> First of all, thanks for your patch. I applied it to our 6.6-based
>> downstream kernel supporting a board I have here, and noticed some
>> strange behaviour with eDP now.
>>
>> On Thu, May 08, 2025 at 05:24:33PM +0530, Jayesh Choudhary wrote:
>>> + if (pdata->bridge.type == DRM_MODE_CONNECTOR_eDP)
>>> + regmap_update_bits(pdata->regmap, SN_HPD_DISABLE_REG, HPD_DISABLE,
>>> + HPD_DISABLE);
>>>
>>
>> On my setup it seems that `pdata->bridge.type` is not yet set here,
>> because it executes before `ti_sn_bridge_probe`. For the DP use case,
>> this is not a problem because the type field is 0 (i.e., not
>> DRM_MODE_CONNECTOR_eDP) in that case. But for eDP, it means that we are
>> unexpectedly not disabling HDP.
>>
>> With working HDP, everything is fine in the end for both DP and eDP. But
>> when the HDP line is not connected, eDP no longer works. So I wonder if
>> this breaks some functionality for weird eDP panels or board
>> implementations.
>>
>> I could certainly be missing something; from my understanding it looks
>> like without a good HPD signal, the `ti_sn_bridge_probe` and quoted code
>> are stuck in a loop. `ti_sn65dsi86_enable_comms` runs but does not
>> disable HDP, after which the probe runs but fails and does not set the
>> type field, so the next `enable_comms` run fails to disable HDP again,
>> etc.
>
> This does sound like a real problem.
>
> I'm not sure I'll have the time to analyze it and come up with a
> proposal myself right now, but Jayesh: you should make sure you
> consider and address this issue before you send your next version.
>
> Thanks!
I see that i2c_driver probe ti_sn65dsi86_probe() is called first
which calls ti_sn65dsi86_resume() and ti_sn65dsi86_enable_comms()
and after that auxiliary_driver probe ti_sn_bridge_probe() is called
where pdata->bridge.type is set.
As per the bindings, I see that we should have "no-hpd" property in
the device description for platforms with bad HPD or disconnected HPD.
Then we can read it in ti_sn65dsi86_probe() before resume call and use
it as a conditional instead.
Since I do not have any "bad HPD signal" board, I would need some
help validating this on such boards from Ernest.
Also, that would mean adding "no-hpd" to all the platforms using
sn65dsi86 for baseline first, even before the driver changes are in.
Because if driver changes go in first, this would enable HPD for all
the platforms. Whereas, the dts changes alone are harmless.
But still I am doubtful about dts changes getting in before driver
changes.
Considering this, please let me know the order of changes and I will
send out the patches accordingly.
Thanks,
Jayesh
Return-Path: <linux-kernel+bounces-665429-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 53F4741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:19:54 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id C24E41BC608B
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:20:03 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 33B082853EB;
Wed, 28 May 2025 12:19:34 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=tuxon.dev header.i=@tuxon.dev header.b="kLTei5vg"
Received: from mail-ed1-f45.google.com (mail-ed1-f45.google.com [209.85.208.45])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id A028D284B35
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:19:31 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.45
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748434773; cv=none; b=nMLHhNlB++ykosks5tIF94IqURFnGKoy3lG5ug/a/8vQ5G+wheEJri0IeVovCA1ApxNdZ31rOeSxElicM+lm0WHGkoSnLqn7c0M3dUb4KD7VLJygkgKovRZq8vTRsWetW2bhYxO9PNp2aABR3IK2I2Xm4FdBC4fGOiug6KVHk2A=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748434773; c=relaxed/simple;
bh=UTy+PEU7tr0mOQr1WcfZgDzuuEmIiCfQAFSll5QPB9I=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=Vw0XrxgSyIu5v/mMJHbmmrxDiC7Cl74aLcPRuiga50shjBcWTDLHt4cuX5hZVHJWpf9baYumUTPnsH7GHNd1BOPpWd0qOrmGVzIUcHu066mlpqcRk+SZWtF84/ZkUNZcZAGGmsSnz1Oeqc02DV3A9OtdwiqL2L7DqtV9/MAtYYI=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=tuxon.dev; spf=pass smtp.mailfrom=tuxon.dev; dkim=pass (2048-bit key) header.d=tuxon.dev header.i=@tuxon.dev header.b=kLTei5vg; arc=none smtp.client-ip=209.85.208.45
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=tuxon.dev
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=tuxon.dev
Received: by mail-ed1-f45.google.com with SMTP id 4fb4d7f45d1cf-6045b95d1feso7544590a12.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 05:19:31 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=tuxon.dev; s=google; t=1748434770; x=1749039570; darn=vger.kernel.org;
h=content-transfer-encoding:in-reply-to:content-language:from
:references:cc:to:subject:user-agent:mime-version:date:message-id
:from:to:cc:subject:date:message-id:reply-to;
bh=gUs1WGbpbtSdkN7Nj6CphSlTzl8HeW1Wjos25VNHfcc=;
b=kLTei5vgu21+KKSJf3ODIz96GYG117NrrT6qfl9k2/mzeS9baqjonSD53BfyJ/8ENl
oyN1ajvts6hopw7+BxxOXmV4KriXwyGJTyIUCePFDSkiC+8Jds3OGWKcpodX4TtG8ib+
tX4qEdqbKD3ljMD6zmGAlhVb7sWBX0GCN5bwHzeVYVbF7mKn2CJ18hg14pPIFayaAz4c
X1JbZ2AGhZUDXtYFxRtLwC6aXrJWw1WCuXH8jgWWdYdRj+xVujQ9d0PcdWkAJCuclCk1
kndcUMQudzKC1hiPkesJR5wTy9Tfz8fniYn2zn17YKbMGjEo0kdn1dMCwiRSYjnnZf9m
Chew==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748434770; x=1749039570;
h=content-transfer-encoding:in-reply-to:content-language:from
:references:cc:to:subject:user-agent:mime-version:date:message-id
:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
bh=gUs1WGbpbtSdkN7Nj6CphSlTzl8HeW1Wjos25VNHfcc=;
b=PgX3or4dnHOLd6FbebFj4UGGnxtprWnl36bJqTBqfUk30HXi9B2riMI4owoaKnIOlb
hQLhcg99GPE68cGxKGBAcQ60XquGoYOoasXP8nPtH7hfgLdA+5SuPrclOhTODE1xXBVy
oJzTyqoXdDEZW/xjp44jibyr2EMv7HMr/JeknxUhn+fXoEZP85T8Myy4e+5Webdh6Zl3
rY8yWQaPQu6yHt1K7y2alepQe+i5jzwvfH5uzLuCZG71IIWoz3OIwHSY8g7wELOBflX9
N0eVM5BtRtb+Iw1JBQu3H2j3k4Sl+L8R9vq69by1jpgDYw9zXalIrqIv0Kr2SGzahWaU
cLZA==
X-Forwarded-Encrypted: i=1; AJvYcCWvTzuEukt7fCWwui6WmOHxG88pAAeUIkYySstziJX3E3rjLdDRg1+UbLjtB5UmC5MWSF8DCDjeGCnbs4w=@vger.kernel.org
X-Gm-Message-State: AOJu0Yy6xN3J4/hscPfEehybpDlm7V5HLeBZQzD5OjA40tiJCH/orQXZ
vtX+46UaH7QEM0+p04bds2bILeIdAr+QCS35YKr6HOuzoaRtWwFNNeGUyDcVeYr1YPQ=
X-Gm-Gg: ASbGnctkLCuesIeTBRXJpw+PsD6dIsoCbC81Qf5fU16TdhSFPhVqklmt+hW9xQs/uee
jNhbjW+sb33mxIQcSLu+RJl6OpQs/BSYvhov4ksDm1frXfMvcPbyrQ6KCGXHSi3Z2Uvu8H1oSlO
CgUb9tmv1rz5xL+AGhYkhp15aNf8SlxSvNSDvdlYAQm40cFtZbOxKQhmXyaFUgSGybI8VeigQtm
J+rN33vNfVU9GmZ3Dq7jMFMCHX36Ga9b+lVvnFwlWjigQ7OVLcnEFCSK02Fo8dmliqyBW6vWP4C
SHQwRBQ5etXzfTNOo58j55tuGV5j4QzF7AkZChmruUxPBkcaCf7jhc1c09Kt
X-Google-Smtp-Source: AGHT+IGGhc5A2T3ca464ACVEsiUUFLDwI1rD81PEkeAvBkW4x1BJfuPs5Bg5vFJS51y64CfcmLZiFQ==
X-Received: by 2002:a05:6402:5113:b0:605:878:3560 with SMTP id 4fb4d7f45d1cf-605087843demr4023398a12.26.1748434769848;
Wed, 28 May 2025 05:19:29 -0700 (PDT)
Received: from [192.168.50.4] ([82.78.167.126])
by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6051d5d9936sm706164a12.7.2025.05.28.05.19.28
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 05:19:29 -0700 (PDT)
Message-ID: <8bcbf37b-b70d-48e3-b435-a097d351f786@xxxxxxxxx>
Date: Wed, 28 May 2025 15:19:27 +0300
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH v2 1/2] PM: domains: Add devres variant for
dev_pm_domain_attach()
To: Ulf Hansson <ulf.hansson@xxxxxxxxxx>,
Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx>
Cc: gregkh@xxxxxxxxxxxxxxxxxxx, rafael@xxxxxxxxxx, dakr@xxxxxxxxxx,
len.brown@xxxxxxxxx, pavel@xxxxxxxxxx, jic23@xxxxxxxxxx,
daniel.lezcano@xxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-pm@xxxxxxxxxxxxxxx, linux-iio@xxxxxxxxxxxxxxx,
linux-renesas-soc@xxxxxxxxxxxxxxx, bhelgaas@xxxxxxxxxx,
geert@xxxxxxxxxxxxxx, Claudiu Beznea <claudiu.beznea.uj@xxxxxxxxxxxxxx>
References: <20250526122054.65532-1-claudiu.beznea.uj@xxxxxxxxxxxxxx>
<20250526122054.65532-2-claudiu.beznea.uj@xxxxxxxxxxxxxx>
<hojdkntm3q5a5ywya7n5i4zy24auko4u6zdqm25infhd44nyfx@x2evb6sc2d45>
<CAPDyKFptNg5t6RehRNNfnnuCqpfiaQLaHBEdh4aRXfn7X6rYQQ@xxxxxxxxxxxxxx>
From: Claudiu Beznea <claudiu.beznea@xxxxxxxxx>
Content-Language: en-US
In-Reply-To: <CAPDyKFptNg5t6RehRNNfnnuCqpfiaQLaHBEdh4aRXfn7X6rYQQ@xxxxxxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi, Ulf,
On 28.05.2025 12:31, Ulf Hansson wrote:
>>> +
>>> +/**
>>> + * devm_pm_domain_attach - devres-enabled version of dev_pm_domain_attach()
>>> + * @dev: Device to attach.
>>> + * @attach_power_on: Use to indicate whether we should power on the device
>>> + * when attaching (true indicates the device is powered on
>>> + * when attaching).
>>> + * @detach_power_off: Used to indicate whether we should power off the device
>>> + * when detaching (true indicates the device is powered off
>>> + * when detaching).
>>> + *
>>> + * NOTE: this will also handle calling dev_pm_domain_detach() for
>>> + * you during remove phase.
>>> + *
>>> + * Returns 0 on successfully attached PM domain, or a negative error code in
>>> + * case of a failure.
>>> + */
>>> +int devm_pm_domain_attach(struct device *dev, bool attach_power_on,
>>> + bool detach_power_off)
>> Do we have examples where we power on a device and leave it powered on
>> (or do not power on device on attach but power off it on detach)? I
>> believe devm release should strictly mirror the acquisition, so separate
>> flag is not needed.
> This sounds reasonable for me too.
Then I'll drop the detach_power_off in the next version.
Thank you for your review,
Claudiu
>
> Note that, in most of the *special* cases for where
> dev_pm_domain_attach|detach() is used today, the corresponding PM
> domain is managed by genpd through a DT based configuration. And genpd
> via genpd_dev_pm_attach|detach() doesn't even take this as an
> in-parameter.
>
> So this is solely for the behaviour for the acpi PM domain, just to
> make sure that's clear.
>
> [...]
>
> Kind regards
> Uffe
Return-Path: <linux-kernel+bounces-665430-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 45F1A41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:20:03 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id B505A17590E
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:20:01 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 4C303284B20;
Wed, 28 May 2025 12:19:51 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="P6YEZ4Bc"
Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2084.outbound.protection.outlook.com [40.107.220.84])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B8CB2284672
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:19:48 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.220.84
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748434790; cv=fail; b=iB0+YPMd4RuKepKsJgHWy8QUL/pHJUFwO8BZ7jxdqKVyPsgb7TGxBqVfk2BHoNxWncN2/lgSJL1yVw3IPE3zVHpIUJTX5Rw56INWqmb4tNeBwf7ZPAnWz1W+CWIKyt7E/ZAC1LpwJULqX836JsIAqH91cQ1Bld9BbO/ZnfT/fY8=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748434790; c=relaxed/simple;
bh=PKnZUI0S1Hwcf2YefGW39tIgjICUneh3U+tHMOMwq88=;
h=Message-ID:Date:Subject:To:Cc:References:From:In-Reply-To:
Content-Type:MIME-Version; b=JgPudiCgCsdh9Tsag6B79yIfLf63rmaRkZi8CTBhQ5vz/Bt7hnnMw5eonXubq5F/SACuNCe3BV5dR4pthq+7Fi2dx0nRhFgYWg0S68DcUxKatDyBsp6972xeM6vc35yqd4NyZJrhrUfOV8qVg2vlMK5S/iOya9GXi+2vT/pdhko=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=P6YEZ4Bc; arc=fail smtp.client-ip=40.107.220.84
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com
Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=QwRUr7PcdZsU1Nv0s6RyUFn/Dhluq0ft73PDgY2lkUm7yKnRnBamATDG8m08WBcroM+M0mGB6x6vfsWZP1DVKsjJpHMGjGmhz3rAsVokXsBL14OlruSUsuYm+pVszhuDDleYkb1HbIkWZILR3bRRYaypjG/3/a8bKYdjfXLjAv8HY4SZl+cxKYYLlYzsbwUgNABoK0pxMVnzd7awK2nmzyugTTx7wsoBs1zhkoIAIL+jwBnnb74p8on9k+vrMPcJXmbUJ0PNMPySXKFNcVO19vzCwEKw+QOOq4Qxtbv//j2g7OUuj+ccY5OctrXK4UDzLL73wz7y4mQaGMdwb675SQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=ske/lFEp72WN1jFB08e2/mgg7xrqiFl83Lorzp0Lvtg=;
b=YU/L5oZ8eSpgG+o2gPyrVEJA8j54P52Rs4Nh2e9lLKlkaFzVDfylEm93/mTYQP+MWNY0Sa+GRo3XQpgOwLf+w+mn2Wp3QApIzKlvtAaT9fr5dJM3ALo8kaIqvaCAtY27BODEVkxCwimJJrADIAPh/4tP2S/5rQxS2TuXhuoVtLTv/4tej39FT/uzL5nBWH3v25V57k06KsXXfp/f2VwmJ2LUXpMWW16+OJYRgdV0qJ0TnzsUW849os4mSRJ4YC48xoxWZ1o+YR6k+eVCQgBZidtNOGWqj3PkJYiwPjWqnGpSQ5wN+qz2szFuELzUM6E0hCxKiBLHFoxuhjga5lGoYg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass
header.d=amd.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=ske/lFEp72WN1jFB08e2/mgg7xrqiFl83Lorzp0Lvtg=;
b=P6YEZ4Bc0VeOMvPA1uk74Va73KyJ4xTftDeEp6LQB5OuVWayBasq+55tRM7ol0WHnt6HbQ/nlwJXodLWM6oElJw7q17dbmpo8rxLGDO/v0XnkYOw/QQ+OCCKz63t/xVXmDrHX40qAP/eBWTItewMoBBTO3lTxGhY2a+S+bWd2dQ=
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=amd.com;
Received: from DS7PR12MB6048.namprd12.prod.outlook.com (2603:10b6:8:9f::5) by
DM4PR12MB8499.namprd12.prod.outlook.com (2603:10b6:8:181::10) with Microsoft
SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
15.20.8769.29; Wed, 28 May 2025 12:19:44 +0000
Received: from DS7PR12MB6048.namprd12.prod.outlook.com
([fe80::6318:26e5:357a:74a5]) by DS7PR12MB6048.namprd12.prod.outlook.com
([fe80::6318:26e5:357a:74a5%4]) with mapi id 15.20.8769.022; Wed, 28 May 2025
12:19:44 +0000
Message-ID: <3b38fc9d-83c6-4db8-8a83-eb4265796b03@xxxxxxx>
Date: Wed, 28 May 2025 17:49:35 +0530
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 1/2] iommu/amd: Add HATDis feature support
To: Ankit Soni <Ankit.Soni@xxxxxxx>, Joao Martins <joao.m.martins@xxxxxxxxxx>
Cc: iommu@xxxxxxxxxxxxxxx, suravee.suthikulpanit@xxxxxxx, joro@xxxxxxxxxx,
will@xxxxxxxxxx, robin.murphy@xxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
Alejandro Jimenez <alejandro.j.jimenez@xxxxxxxxxx>,
David Woodhouse <dwmw2@xxxxxxxxxxxxx>
References: <cover.1745389415.git.Ankit.Soni@xxxxxxx>
<6282a5c349812a311a67a8522dc5e4aabfe3ec3a.1745389415.git.Ankit.Soni@xxxxxxx>
<596ed125-c995-4e2b-824c-b7929c852754@xxxxxxxxxx>
<g3xrnjfs6zekogfohud2s7kdvphx43e6mdh3vfpllynrwokxwf@vvetz2j2nrai>
<4f04d596-685e-4e48-9038-8aee6c927ebc@xxxxxxxxxx>
<lpbeiyyzoxuankxzgcms2iwkoydvj2vcpv5jftiy26nkslliwr@juykyxhdwwzv>
<deb1603a-96df-46d8-9cb5-86121f334a88@xxxxxxxxxx>
<m5ageqedj5otmfo4yuld4es72esfmlc7vb5htolj5pcffurjl5@mi5xemcd4fgi>
Content-Language: en-US
From: Vasant Hegde <vasant.hegde@xxxxxxx>
In-Reply-To: <m5ageqedj5otmfo4yuld4es72esfmlc7vb5htolj5pcffurjl5@mi5xemcd4fgi>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: MEWP282CA0002.AUSP282.PROD.OUTLOOK.COM
(2603:10c6:220:1e6::12) To DS7PR12MB6048.namprd12.prod.outlook.com
(2603:10b6:8:9f::5)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: DS7PR12MB6048:EE_|DM4PR12MB8499:EE_
X-MS-Office365-Filtering-Correlation-Id: d6433657-d2cc-4ef8-66fc-08dd9de1edad
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024;
X-Microsoft-Antispam-Message-Info:
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
=?utf-8?Q?ATP2H1hueLs=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR12MB6048.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
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
=?utf-8?Q?0wXipjt64qifFCpyc1eZjhHuv?=
X-OriginatorOrg: amd.com
X-MS-Exchange-CrossTenant-Network-Message-Id: d6433657-d2cc-4ef8-66fc-08dd9de1edad
X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB6048.namprd12.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 12:19:44.2125
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: x7hBshf8tmbN+wC/9fvH2KXL+vfIBMfZUvEA3bb+SAY7NhCQ++krP0RmRPg4t70Pl/sGzCw2/zaqgrWOWr45tw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB8499
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Ankit,
On 5/12/2025 12:00 PM, Ankit Soni wrote:
> Hi,
>
> On Thu, May 08, 2025 at 06:03:44PM +0100, Joao Martins wrote:
>> On 06/05/2025 06:12, Ankit Soni wrote:
>>> On Wed, Apr 30, 2025 at 12:41:04PM +0100, Joao Martins wrote:
>>>>> With intel patch you mentioned above, it seems that it is mostly handling
>>>>> "second stage translation support" disable, which will eventually disable dma
>>>>> translation. And in AMD case, HATDis bit indicates host(v1) translation is not
>>>>> available, then attempt to use guest(v2) translation, and if both page
>>>>> table modes are not available then disable dma tranlation.
>>>>
>>>> OK, I guess it makes sense if HATDis is v1 only.
>>>>
>>>> My other call out was that when we disable dma-translation all together (aka
>>>> both modes), then we shouldn't advertise the IOMMU groups (internally and to
>>>> userspace) by not calling iommu_device_register()/iommu_device_sysfs_add().
>>>>
>>>
>>> Sorry for the late reply. I had cross-checked it; if the probe fails,
>>> then IOMMU groups will not be populated, and eventually, it will not
>>> have significance for calling iommu_device_register()/iommu_device_sysfs_add().
>>>
>>
>> It would nonetheless populate a ivhd entry in sysfs needlessly but with an empty
>> devices list (qemu diff at the tail end for how I checked it; it's only missing
>> the ILLEGAL_DEVICE_TABLE_ENTRY event being generated, but enough to check the
>> first patch with sw iommu) e.g. as far as I checked:
>>
>> $ find /sys | grep ivhd
>> /sys/class/iommu/ivhd0
>> /sys/devices/pci0000:00/0000:00:05.0/iommu/ivhd0
>> /sys/devices/pci0000:00/0000:00:05.0/iommu/ivhd0/uevent
>> /sys/devices/pci0000:00/0000:00:05.0/iommu/ivhd0/amd-iommu
>> /sys/devices/pci0000:00/0000:00:05.0/iommu/ivhd0/amd-iommu/cap
>> /sys/devices/pci0000:00/0000:00:05.0/iommu/ivhd0/amd-iommu/features
>> /sys/devices/pci0000:00/0000:00:05.0/iommu/ivhd0/devices
>> /sys/devices/pci0000:00/0000:00:05.0/iommu/ivhd0/device
>> /sys/devices/pci0000:00/0000:00:05.0/iommu/ivhd0/subsystem
>>
>
> I was assuming, since iommu is still active for interrupt remapping,
> user may need info for cap and feature using /sys fs.
> @vasant: can you please suggest on this?
I don't have strong preference. But it looks like intel skips populating sysfs
properties. May be we can match the behaviour and skip populating ivdh entries.
-Vasant
Return-Path: <linux-kernel+bounces-665431-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 7BD5541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:20:31 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id BBA3D176839
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:20:32 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 6B7AA284B3E;
Wed, 28 May 2025 12:20:23 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="Up9MwRuH"
Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id BE90D284681
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:20:19 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748434822; cv=none; b=qdQp9uBT6pChc983W1NE1gmG+9ddCuc8KXwhRDsvAqKxa5y87i+ydJ+0t9bS2wz9dm1XEUO9WWusSgIvx3bpvuAGx+EtwxBI5y+w2PgqZubiHVIHgFJ1Eaa5vm67RrCGD8bELlc0tMY3Ohu6L7SFZ+GMZhyfiy/mLuqsTfwiRME=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748434822; c=relaxed/simple;
bh=LgluqXTAQPOxJPKju8Bo8ViAFRC7s0F2a9tFXlqvtIo=;
h=Mime-Version:Content-Type:Date:Message-Id:Cc:Subject:From:To:
References:In-Reply-To; b=LAWy3gC4ZUWygBRQArOzXnLLllWGudjUJvp+amTkRXa+iOyLSF/q/I58FTe7RdTiz9ir/6DxECgxNWkbfdykwiu/XFXNH4ymMw8wT3OA7tnjsYCr5royoGBfRmFb4EdyIeabfBUSdA14oWitTMMo6Bcf2dy/K88Socf8JdMJF0Q=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=Up9MwRuH; arc=none smtp.client-ip=209.85.128.53
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org
Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-43cfba466b2so56042935e9.3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 05:20:19 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=linaro.org; s=google; t=1748434818; x=1749039618; darn=vger.kernel.org;
h=in-reply-to:references:to:from:subject:cc:message-id:date
:content-transfer-encoding:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=nUiSIyBK9bnL6y5jkIEyCSHfBFQ4eE1Z0A1Z3a6M0aM=;
b=Up9MwRuHNjPw1rlRQzUew66x7qEPzJiY9UVqJhwvtqIf0Eyo8lBQCHqtWdrA5m9oYE
cQuPLlhoGUjI1pgVqE+wE/s544dc0VOLMRzLVEmaDPWy9BpuDGjDTlWu7NHnXkeqYYDi
LS/N2aq0Q5HHtM26h+IwOruFH3o0lEwdzLbpOu8LTAoMEIQUmLpzyomxAMNSLuLFe+l+
hN1kFmpyq4xM5UYNtEbrl0NZjqmb8dCbT0mXGc0ahpMwuiHfCCMu3MdqvNnqbNRXfM5M
tx3XGeVV7oXENS2jWvJto04TScoaNtoDRPUeSBNGT2V7MU+bmGc+wOKiTULLKBme1g96
wzOw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748434818; x=1749039618;
h=in-reply-to:references:to:from:subject:cc:message-id:date
:content-transfer-encoding:mime-version:x-gm-message-state:from:to
:cc:subject:date:message-id:reply-to;
bh=nUiSIyBK9bnL6y5jkIEyCSHfBFQ4eE1Z0A1Z3a6M0aM=;
b=XOc7MepOmqqZoD8zGfT+HJhCoAsPDDNAEV+4ZN+M2zRMmilS08mi02HijfjDQrunkW
ut8tULi7bNpyWaYOL01eAK+LAWaAYuXAED3CJUvIXuGwJqu4Ae8MlOAWOtGjI/UDCmhv
90K+ZyMeslrYy8NY6C8JcUULMcrdeNEXEVlSbRfSHQt4les7yNyQLhG+F46Kra6OFKFL
ZhG6b6ZzDHVlwPPReM3Ml+QRgupKI0OVARjSctif/UA/PudkrwHp+0wKKPrqrN0q6A/r
b46lClLwmnlrAprASjPZNQlQQsQnIwAmH6H1ryw46VaOMqvUg16PmgG1fEf6SbEZt4j8
5VHQ==
X-Forwarded-Encrypted: i=1; AJvYcCWIZJ+B+DDT0h9pw6Af5bhzDVp7PjtS/G31/rtyllSBHL4NRWOy1iV4q559N0ruEMugwQuMpptaWezGDpU=@vger.kernel.org
X-Gm-Message-State: AOJu0Yw3/Gx0UMJxJHguxKQCEDoqnP7RCvg/DKfZ4Q/5srSaZanRP7FQ
/E9xP0Tg/jhaoj+vkNm64tMF7vsN4YFgePeGpOpluifKQ2E6bGyWSY2u02KzrB2x5Gk=
X-Gm-Gg: ASbGncv69awXF4CcqirUKhgbwTkN7xhMSKPqP/mYE6Iulye7vBJvcC8wNJIk1HZ5TkI
C6n9Xo7pyNQilaBiAuS/aPI3fybbzkqwsOVCRVnDPDfz6GF9fdYsOm8GO+E2qTz9PZynRhRUn6N
NYdYXdDk4UlZJbR8f58fAF6rr/qV11XzCI7huDpbTF5xqiEvHVIIviN9Bt3A9c7Njd1F0Nzf7nZ
cOEwOsvwU+3Bw5VaMNknwYdo74pDbWq95ciaq/zqqFCIda3g1jM0sx31l/592m2q+7e1dHTtrag
lsIOwwaAQF+lYMzL2fPt4EItk5Xl8WPGK0XAU3GDvWMGMFDxJPsS5BbVEl0LtivwKoA=
X-Google-Smtp-Source: AGHT+IGZexNRqILydRhcO4IU4n98EZEdu0fFVjtfd4sxx1IIeEAtAXBTC1Us7iU6PxbqQgpjB0cAjw==
X-Received: by 2002:a05:600c:3109:b0:43d:1b74:e89a with SMTP id 5b1f17b1804b1-44c941884eamr149032045e9.9.1748434817966;
Wed, 28 May 2025 05:20:17 -0700 (PDT)
Received: from localhost ([2a00:2381:fd67:101:6c39:59e6:b76d:825])
by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4507255b619sm15992525e9.22.2025.05.28.05.20.16
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 05:20:17 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
Mime-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=UTF-8
Date: Wed, 28 May 2025 13:20:16 +0100
Message-Id: <DA7SEY5S1F1Z.1LZE7191BKBFM@xxxxxxxxxx>
Cc: "Bjorn Andersson" <andersson@xxxxxxxxxx>, "Linus Walleij"
<linus.walleij@xxxxxxxxxx>, "Rob Herring" <robh@xxxxxxxxxx>, "Krzysztof
Kozlowski" <krzk+dt@xxxxxxxxxx>, "Conor Dooley" <conor+dt@xxxxxxxxxx>,
"Srinivas Kandagatla" <srini@xxxxxxxxxx>, "Liam Girdwood"
<lgirdwood@xxxxxxxxx>, "Mark Brown" <broonie@xxxxxxxxxx>, "Konrad Dybcio"
<konradybcio@xxxxxxxxxx>, <cros-qcom-dts-watchers@xxxxxxxxxxxx>,
<linux-arm-msm@xxxxxxxxxxxxxxx>, <linux-gpio@xxxxxxxxxxxxxxx>,
<devicetree@xxxxxxxxxxxxxxx>, <linux-kernel@xxxxxxxxxxxxxxx>,
<linux-sound@xxxxxxxxxxxxxxx>, <kernel@xxxxxxxxxxxxxxxx>
Subject: Re: [PATCH v4 7/8] arm64: dts: qcom: qcm6490-idp: Add WSA8830
speakers and WCD9370 headset codec
From: "Alexey Klimov" <alexey.klimov@xxxxxxxxxx>
To: "Prasad Kumpatla" <quic_pkumpatl@xxxxxxxxxxx>, "Mohammad Rafi Shaik"
<quic_mohs@xxxxxxxxxxx>
X-Mailer: aerc 0.20.0
References: <20250527111227.2318021-1-quic_pkumpatl@xxxxxxxxxxx>
<20250527111227.2318021-8-quic_pkumpatl@xxxxxxxxxxx>
In-Reply-To: <20250527111227.2318021-8-quic_pkumpatl@xxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue May 27, 2025 at 12:12 PM BST, Prasad Kumpatla wrote:
> From: Mohammad Rafi Shaik <quic_mohs@xxxxxxxxxxx>
>
> Add nodes for WSA8830 speakers and WCD9370 headset codec
> on qcm6490-idp board.
>
> Enable lpass macros along with audio support pin controls.
>
> Signed-off-by: Mohammad Rafi Shaik <quic_mohs@xxxxxxxxxxx>
> Co-developed-by: Prasad Kumpatla <quic_pkumpatl@xxxxxxxxxxx>
> Signed-off-by: Prasad Kumpatla <quic_pkumpatl@xxxxxxxxxxx>
> ---
> arch/arm64/boot/dts/qcom/qcm6490-idp.dts | 96 +++++++++++++++++++
> .../boot/dts/qcom/qcs6490-audioreach.dtsi | 24 +++++
> 2 files changed, 120 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/qcm6490-idp.dts b/arch/arm64/boot/d=
ts/qcom/qcm6490-idp.dts
> index 7a155ef6492e..884abbda74fd 100644
> --- a/arch/arm64/boot/dts/qcom/qcm6490-idp.dts
> +++ b/arch/arm64/boot/dts/qcom/qcm6490-idp.dts
> @@ -18,6 +18,7 @@
> #include "pm7325.dtsi"
[..]
> +&swr0 {
> + status =3D "okay";
> +
> + wcd937x_rx: codec@0,4 {
> + compatible =3D "sdw20217010a00";
> + reg =3D <0 4>;
> + qcom,rx-port-mapping =3D <1 2 3 4 5>;
> + qcom,rx-channel-mapping =3D /bits/ 8 <1 2 1 1 2 1 1 2>;
> + };
> +};
> +
> +&swr1 {
> + status =3D "okay";
> +
> + wcd937x_tx: codec@0,3 {
> + compatible =3D "sdw20217010a00";
> + reg =3D <0 3>;
> + qcom,tx-port-mapping =3D <1 1 2 3>;
> + qcom,tx-channel-mapping =3D /bits/ 8 <1 2 1 1 2 3 3 4 1 2 3 4>;
It will be tremendously useful to add comments that elaborate the {rx,tx}-c=
hannel-mapping
(and port mapping for what it's worth) here like it is done in other dt fil=
es.
For example in the same way as it is done in sm8650-qrd.dts
or like here:
https://lore.kernel.org/linux-arm-msm/20250526-sm8750-audio-part-2-v3-3-744=
29c686bb1@xxxxxxxxxx/
Best regards,
Alexey
Return-Path: <linux-kernel+bounces-665432-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D883C41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:22:24 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 4DA163B66FD
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:22:03 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 10626284686;
Wed, 28 May 2025 12:22:20 +0000 (UTC)
Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 18AF5283FE7
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:22:16 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748434939; cv=none; b=VewrUBwxLvkiAgRqgUUDOgYG0DByg/UMa+wlPxof++V9IKAc2peg/i7xW9E+ED5joraKGqVLqJLUkhCn9HwoUEHmfyCrbZLgtpSAEw2COUrryDI74xWEP+nR1Dq4DdLr/8wbRpoiKADxoS4H1Nuuh8G4any3hNOQYSRs/K37CpU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748434939; c=relaxed/simple;
bh=L6s/yq8mz6+pYVGOZSYXHTm7G9toveW1Uq3hhmEWU7A=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=F3F7LgJnEYFvaslLAa/zSPaEDZTVG6eOxKBxHb15ZxjpZKhLWzO3qXqilvI2rd4Cj2ZAJ87voldEUfDoFjkms5I0NLA8T8wggnRE3T/pvv5cWSUgjCHAyJHTiXDGndWb7nX4mg4yqmB9bUKrL3JGJj33f7VbhZVABOhL3To8nB4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de
Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2])
by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.92)
(envelope-from <mkl@xxxxxxxxxxxxxx>)
id 1uKFn3-0002SH-Bf; Wed, 28 May 2025 14:21:49 +0200
Received: from moin.white.stw.pengutronix.de ([2a0a:edc0:0:b01:1d::7b] helo=bjornoya.blackshift.org)
by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
(Exim 4.96)
(envelope-from <mkl@xxxxxxxxxxxxxx>)
id 1uKFn2-000aSn-37;
Wed, 28 May 2025 14:21:48 +0200
Received: from pengutronix.de (p5b1645f7.dip0.t-ipconnect.de [91.22.69.247])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(Client did not present a certificate)
(Authenticated sender: mkl-all@xxxxxxxxxxxxxx)
by smtp.blackshift.org (Postfix) with ESMTPSA id 930EB41B601;
Wed, 28 May 2025 12:21:48 +0000 (UTC)
Date: Wed, 28 May 2025 14:21:48 +0200
From: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx>
To: Dario Binacchi <dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx, Rob Herring <robh@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>, devicetree@xxxxxxxxxxxxxxx, linux-amarula@xxxxxxxxxxxxxxxxxxxx,
Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>, imx@xxxxxxxxxxxxxxx,
Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>, Shawn Guo <shawnguo@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>, michael@xxxxxxxxxxxxxxxxxxxx, Fabio Estevam <festevam@xxxxxxxxx>,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
Subject: Re: [PATCH v2 4/4] ARM: dts: mxs: support i.MX28 Amarula rmm board
Message-ID: <20250528-toucanet-of-utter-conversion-2bb1c7-mkl@xxxxxxxxxxxxxx>
References: <20250528121306.1464830-1-dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
<20250528121306.1464830-5-dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha512;
protocol="application/pgp-signature"; boundary="d4u36iwafj365ic5"
Content-Disposition: inline
In-Reply-To: <20250528121306.1464830-5-dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2
X-SA-Exim-Mail-From: mkl@xxxxxxxxxxxxxx
X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false
X-PTX-Original-Recipient: linux-kernel@xxxxxxxxxxxxxxx
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
--d4u36iwafj365ic5
Content-Type: text/plain; protected-headers=v1; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Subject: Re: [PATCH v2 4/4] ARM: dts: mxs: support i.MX28 Amarula rmm board
MIME-Version: 1.0
On 28.05.2025 14:11:41, Dario Binacchi wrote:
> The board includes the following resources:
> - 256 Mbytes NAND Flash
> - 128 Mbytes DRAM DDR2
> - CAN
> - USB 2.0 high-speed/full-speed
> - Ethernet MAC
>=20
> Signed-off-by: Dario Binacchi <dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
[...]
> + reg_3v3: regulator-3v3 {
> + compatible =3D "regulator-fixed";
> + regulator-name =3D "3v3";
> + regulator-min-microvolt =3D <3300000>;
> + regulator-max-microvolt =3D <3300000>;
> + regulator-always-on;
> + };
[...]
> +&can0 {
> + pinctrl-names =3D "default";
> + pinctrl-0 =3D <&can0_pins_a>;
> + xceiver-supply =3D <®_3v3>;
The xceiver-supply "reg_3v3" is an always fixed regulator, that doesn't
switch a GPIO, so IMHO, you can remove it. Saves a bit of runtime mem.
> + status =3D "okay";
> +};
regards,
Marc
--=20
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung N=C3=BCrnberg | Phone: +49-5121-206917-129 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
--d4u36iwafj365ic5
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iQEzBAABCgAdFiEEn/sM2K9nqF/8FWzzDHRl3/mQkZwFAmg2/9kACgkQDHRl3/mQ
kZyAngf+N7jzZFlLipBmBOA/ABOkh8i4xKnSDc8VZEjAK8pgExYn3GEOwfRnRwrE
EH6bJllykyHzbXfS9/xHs657upS0FW9caUJK2WrWj/8gUfJKVHYs1h0fRa5Cw3TC
6OPZRsWvOaarYXj7+EnnhyfJ79H3/00LwVBMqc3Arne0fz/iienfgPjW8OEDBHin
tibPVj8IDRdEoa7ZROykjv0xbfvCpuSXCKUqfCy8z60KH1m/a2yeWpjrgqDv4Pg0
pYMak6V2+BFkLpRvEzEQEG023ftbkb2FuizWwrFj+/B7K+D5iOefx3PFVblfWXwh
D2cgAu3iOjcjElKDelSSG2QRmdkD7A==
=LqyP
-----END PGP SIGNATURE-----
--d4u36iwafj365ic5--
Return-Path: <linux-kernel+bounces-665433-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E4F4141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:25:29 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id D8C471BC635A
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:25:42 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 04EC828468D;
Wed, 28 May 2025 12:25:24 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="L7YqBlgK"
Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id AAF061494C2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:25:21 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435123; cv=none; b=WmOXsFPkZi6fqBI5YorGWgQoF/Q5hNFaeyZ9WzVbJ4acOW9zi/iFT6zBnu2/UxLw2/rxUqzLduNIrGSiKlug/Y6acuEoJoE2CL99d7CAknDtxt71/3LKJ8Jk67mXJ+b+PTWoSxeVQNK++Eot8CpMc0hjs6lWgI08cBYMv2Zi82U=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435123; c=relaxed/simple;
bh=HqH7e82HFOn8c9Wpi45EOHV+4J6RuYz9jpwePPr1yqA=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=aojlnQUCNVQ8xNgc2BqbD9khvE3fizh+sYWnD8s1kpf/SMdLAtwi/UtZBoUq32pyJd9MVcK45ja2qWbYFyuwt/xB0uea/9oLZtZLp4OST9fq4zDwlK/lBKVGIVg5gZ2k9DoHNhf+YvJCeD6NEwEL8GScHZ5MNBS/Ue9h2BduceI=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=L7YqBlgK; arc=none smtp.client-ip=209.85.221.41
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-3a361b8a664so4492378f8f.3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 05:25:21 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748435120; x=1749039920; darn=vger.kernel.org;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to;
bh=Gx27Ka76ChtB2rd8/90IbtQhwxpnww4n1RM1ipSXbgM=;
b=L7YqBlgKg7ey+FdDeI7UcAJ/3MSqcByBBRl9oVSJLxL4mchl0B2Lg6HOD26U8aFUez
dLbhDQp+5Yi4V2iDlAZ2hVlRnrvh7nVkYqNvLZeOtmFRcv86O8+M9MVBQxmojt/isGxt
Gq+nAybFiuzev91mGy/ELDL87jmlyl6vWNOEwrriMa7k8/lAbqUsCOLQzB8aizFiDE/G
NAuTtMP8Tv0AJrlOEEaaj6LSXmEDsJpxZ+OwHwml6s9vJvgPkKF3P/cpdOygnojrob7D
VAcXFx5epcZ9S/IWx5h2Q/4TEcpwtTLzkZ/6gn6KJaDerILJil8LHGe2mScgQKzzv2IS
QB9A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748435120; x=1749039920;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=Gx27Ka76ChtB2rd8/90IbtQhwxpnww4n1RM1ipSXbgM=;
b=UNs//YeTnbGnHHM3CaYYcXuELXWzkHWbySIV5tj1VHSxyIISB56t5G9R+1cVJgkzwE
8Qj9PSfHazKierKr3y48dyjvpNcjrUbZwcQO0BnmfzhhNT1nUhShzOhOFZFo7ZnEgsJQ
NdqhJlv7Z2kph3Ey26ySdv2xKG6C6QU6ub1F1jfWjHpohETDQKCwc+xRmoYdlM8ngHvd
p7m9g4FAFdpvm3wwjzui4IFZQDXsmv1fvlU99ZqY9BR1XLwvAvDkGk1Ce7e8YxdT+kbo
SR30XxHLmEqfOQrQ2CsZhjVprvvcYgPDNT1XHZxfLN7iwb6yKxf0TrHLIr5Ac5zxrXyN
PGLg==
X-Forwarded-Encrypted: i=1; AJvYcCX1Y52ykKkzzB3pEbNVWpPtZponLYu7b0Hr06sRezYgPzJALL9TQL5bF6fiwpI9xwDV6GNYcLfe+S5lXtQ=@vger.kernel.org
X-Gm-Message-State: AOJu0YxzIdngjrHQxHx3oDNMpBY+0W3QeEJFMyAOmdxSAc5VEbVfZqYz
Nbx/es69UZqBJ/okB1rrxf2Vkh4l3xPtnQqIcALwmYgzDcF7vMyxkFED
X-Gm-Gg: ASbGncsC/tPE6YMj+GJ2bEwf2MYt2ok0r2jnxWn7M9pmfWSpV+iFBPHPqq+jS1mZYqP
C/YMMmlnnypnP1Zc5a7smxvDnmYccg/g81PBBOa9zj1HQtqmaUvpnrP/p5OKw6OKRCwHR2ajPR6
FeQpGpmDuZk3+361EaUj6Uwk5zERUZ0fZxe16T2Pnh+U2kyYvvoKtsWdlZXtLpRCFl4tIB5OOI9
tgfMGuI/DsK+3bKUBXYPApfMnVbhoG06KOcd42SQoQdBBnIZ531jJKzDSeR069OSCWAkLntcx70
BNPCLnMrInfSp4ztzMjOv4yN4tmC+cuVgB46A8vODmlqxfpv2Ms=
X-Google-Smtp-Source: AGHT+IECMjwbFuOI/6hxsWepZz+pzUbSZ+x3gZlMFBHR5U0NEq3cHEZ9XAI8fsatRidm2mFZVAYgbg==
X-Received: by 2002:a05:6000:26d0:b0:3a4:e502:81b8 with SMTP id ffacd0b85a97d-3a4e5028508mr3838397f8f.43.1748435119720;
Wed, 28 May 2025 05:25:19 -0700 (PDT)
Received: from ed.ac.uk ([2001:630:3c1:90:97e6:f326:b9e:1a85])
by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a4eac8f128sm1368680f8f.60.2025.05.28.05.25.18
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 05:25:19 -0700 (PDT)
Date: Wed, 28 May 2025 13:25:13 +0100
From: Karim Manaouil <kmanaouil.dev@xxxxxxxxx>
To: Zi Yan <ziy@xxxxxxxxxx>
Cc: David Hildenbrand <david@xxxxxxxxxx>, Bharata B Rao <bharata@xxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx, linux-mm@xxxxxxxxx,
Jonathan.Cameron@xxxxxxxxxx, dave.hansen@xxxxxxxxx,
gourry@xxxxxxxxxx, hannes@xxxxxxxxxxx, mgorman@xxxxxxxxxxxxxxxxxxx,
mingo@xxxxxxxxxx, peterz@xxxxxxxxxxxxx, raghavendra.kt@xxxxxxx,
riel@xxxxxxxxxxx, rientjes@xxxxxxxxxx, sj@xxxxxxxxxx,
weixugc@xxxxxxxxxx, willy@xxxxxxxxxxxxx,
ying.huang@xxxxxxxxxxxxxxxxx, dave@xxxxxxxxxxxx,
nifan.cxl@xxxxxxxxx, joshua.hahnjy@xxxxxxxxx,
xuezhengchu@xxxxxxxxxx, yiannis@xxxxxxxxxxx,
akpm@xxxxxxxxxxxxxxxxxxxx
Subject: Re: [RFC PATCH v0 2/2] mm: sched: Batch-migrate misplaced pages
Message-ID: <20250528122513.4rxzkia7lge7du5p@xxxxxxxx>
References: <20250521080238.209678-1-bharata@xxxxxxx>
<20250521080238.209678-3-bharata@xxxxxxx>
<62cef618-123c-4ffa-b45a-c38b65d2a5a3@xxxxxxxxxx>
<AE28D27C-58C2-41A4-B553-50049E963745@xxxxxxxxxx>
<5d6b92d8-251f-463b-adde-724ea25b2d89@xxxxxxxxxx>
<996B013E-4143-4182-959F-356241BE609A@xxxxxxxxxx>
<382839fc-ea63-421a-8397-72cb35dd8052@xxxxxxxxxx>
<FF2F9A08-9BD8-4207-901D-AC9B21443BF6@xxxxxxxxxx>
<dbc7c66b-24c9-49f4-8988-a7eec1280ca8@xxxxxxxxxx>
<94BF4806-ABCD-4D01-8577-9E138A634815@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <94BF4806-ABCD-4D01-8577-9E138A634815@xxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Mon, May 26, 2025 at 10:20:39AM -0400, Zi Yan wrote:
> On 26 May 2025, at 5:29, David Hildenbrand wrote:
> > PFN scanning can be faster than walking lists, but I suspect it depends on how many pages there really are to be migrated ... and some other factors :)
>
> Yes. LRU list is good since it restricts the scanning range, but PFN scanning
> itself does not have it. PFN scanning with some filter mechanism might work
> and that filter mechanism is a way of marking to-be-migrated pages. Of course,
> a quick re-evaluation of the to-be-migrated pages right before a migration
> would avoid unnecessary work like we discussed above.
PFN scanning could be faster because of prefetching, but it pollutes the
caches, which may not be nice to the application running on that cpu
core before we transitioned to kernel space.
--
~karim
Return-Path: <linux-kernel+bounces-665434-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 66A8941E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:26:44 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id ACD833A5CA8
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:26:15 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 916A7284B36;
Wed, 28 May 2025 12:26:34 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="Wrm6DDA/"
Received: from out-188.mta0.migadu.com (out-188.mta0.migadu.com [91.218.175.188])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id E48EC28468C
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:26:30 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.188
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435193; cv=none; b=CBCatN1gcnLWmeaIFQVT+XUWOwxBRJDaRYCNcdOmDx2iZkgNVWwBzGnW0SEelWSfHpJJFYeNeXETupVtCdscJdvCzEYUZGOM8qzvX0AfU1Adg1/Zck2U0GXLV5mBCpP7MPRzvReYhvL2SkPp16+5uLi9ytfRwGU7XhivQ4BUkMI=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435193; c=relaxed/simple;
bh=jG2GxC0szzqK+wmK+l2tOnsYAA6pbhT3WJpMiI6cD8Q=;
h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:
MIME-Version; b=ig/mO9OlVXhBc5mp6Y9yDIwKcGl91jgOT/SyTRzuYbUpcWo3m1492L6he+m/iJ6X+YPFb9V20W2GsV0M2Spd/yIZgxpUCO2WqepB625CtiY2r1eODxE6P5VdfVaqMxqBnZDESJ0shMoJWtMW/B6GSxqhsUbeQkTWL/cwjf46sjE=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=Wrm6DDA/; arc=none smtp.client-ip=91.218.175.188
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev
X-Report-Abuse: Please report any abuse attempt to abuse@xxxxxxxxxx and include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1;
t=1748435188;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:cc:mime-version:mime-version:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=gVhcJx40gudn2SSpvQcp664PWpnT+U+2PapwiFNrvBY=;
b=Wrm6DDA/9QOjYjGSAvYRvrbowZAKp6HJ/MAi6Pa6fTrv+IPltbMMU6HEe6Wn12V+m5Ya/D
OETRJxVixIX7D6JmfavyXtY8KEcWJ+fqw/OGVQSiGOQm0LIyNCxI2Fh0WNsEJZXJ3hu63c
4pdwETEM6eWIDUBAR2kLfvxOgV9fCeg=
From: Aradhya Bhatia <aradhya.bhatia@xxxxxxxxx>
To: Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx>,
Jyri Sarha <jyri.sarha@xxxxxx>
Cc: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
David Airlie <airlied@xxxxxxxxx>,
Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>,
Nishanth Menon <nm@xxxxxx>,
Vignesh Raghavendra <vigneshr@xxxxxx>,
Devarsh Thakkar <devarsht@xxxxxx>,
Praneeth Bajjuri <praneeth@xxxxxx>,
Udit Kumar <u-kumar1@xxxxxx>,
Jayesh Choudhary <j-choudhary@xxxxxx>,
Francesco Dolcini <francesco@xxxxxxxxxx>,
Alexander Sverdlin <alexander.sverdlin@xxxxxxxxxxx>,
Michael Walle <mwalle@xxxxxxxxxx>,
DRI Development List <dri-devel@xxxxxxxxxxxxxxxxxxxxx>,
Devicetree List <devicetree@xxxxxxxxxxxxxxx>,
Linux Kernel List <linux-kernel@xxxxxxxxxxxxxxx>,
Aradhya Bhatia <aradhya.bhatia@xxxxxxxxx>
Subject: [PATCH v9 1/4] dt-bindings: display: ti,am65x-dss: Re-indent the example
Date: Wed, 28 May 2025 17:55:41 +0530
Message-Id: <20250528122544.817829-2-aradhya.bhatia@xxxxxxxxx>
In-Reply-To: <20250528122544.817829-1-aradhya.bhatia@xxxxxxxxx>
References: <20250528122544.817829-1-aradhya.bhatia@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Migadu-Flow: FLOW_OUT
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Aradhya Bhatia <a-bhatia1@xxxxxx>
Reduce tab size from 8 spaces to 4 spaces to make the bindings
consistent, and easy to expand.
Acked-by: Rob Herring (Arm) <robh@xxxxxxxxxx>
Reviewed-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx>
Signed-off-by: Aradhya Bhatia <a-bhatia1@xxxxxx>
Signed-off-by: Aradhya Bhatia <aradhya.bhatia@xxxxxxxxx>
---
.../bindings/display/ti/ti,am65x-dss.yaml | 54 +++++++++----------
1 file changed, 27 insertions(+), 27 deletions(-)
diff --git a/Documentation/devicetree/bindings/display/ti/ti,am65x-dss.yaml b/Documentation/devicetree/bindings/display/ti/ti,am65x-dss.yaml
index a5b13cb7bc73..9cebe237bd4e 100644
--- a/Documentation/devicetree/bindings/display/ti/ti,am65x-dss.yaml
+++ b/Documentation/devicetree/bindings/display/ti/ti,am65x-dss.yaml
@@ -161,32 +161,32 @@ examples:
#include <dt-bindings/soc/ti,sci_pm_domain.h>
dss: dss@4a00000 {
- compatible = "ti,am65x-dss";
- reg = <0x04a00000 0x1000>, /* common */
- <0x04a02000 0x1000>, /* vidl1 */
- <0x04a06000 0x1000>, /* vid */
- <0x04a07000 0x1000>, /* ovr1 */
- <0x04a08000 0x1000>, /* ovr2 */
- <0x04a0a000 0x1000>, /* vp1 */
- <0x04a0b000 0x1000>, /* vp2 */
- <0x04a01000 0x1000>; /* common1 */
- reg-names = "common", "vidl1", "vid",
- "ovr1", "ovr2", "vp1", "vp2", "common1";
- ti,am65x-oldi-io-ctrl = <&dss_oldi_io_ctrl>;
- power-domains = <&k3_pds 67 TI_SCI_PD_EXCLUSIVE>;
- clocks = <&k3_clks 67 1>,
- <&k3_clks 216 1>,
- <&k3_clks 67 2>;
- clock-names = "fck", "vp1", "vp2";
- interrupts = <GIC_SPI 166 IRQ_TYPE_EDGE_RISING>;
- ports {
- #address-cells = <1>;
- #size-cells = <0>;
- port@0 {
- reg = <0>;
- oldi_out0: endpoint {
- remote-endpoint = <&lcd_in0>;
- };
- };
+ compatible = "ti,am65x-dss";
+ reg = <0x04a00000 0x1000>, /* common */
+ <0x04a02000 0x1000>, /* vidl1 */
+ <0x04a06000 0x1000>, /* vid */
+ <0x04a07000 0x1000>, /* ovr1 */
+ <0x04a08000 0x1000>, /* ovr2 */
+ <0x04a0a000 0x1000>, /* vp1 */
+ <0x04a0b000 0x1000>, /* vp2 */
+ <0x04a01000 0x1000>; /* common1 */
+ reg-names = "common", "vidl1", "vid",
+ "ovr1", "ovr2", "vp1", "vp2", "common1";
+ ti,am65x-oldi-io-ctrl = <&dss_oldi_io_ctrl>;
+ power-domains = <&k3_pds 67 TI_SCI_PD_EXCLUSIVE>;
+ clocks = <&k3_clks 67 1>,
+ <&k3_clks 216 1>,
+ <&k3_clks 67 2>;
+ clock-names = "fck", "vp1", "vp2";
+ interrupts = <GIC_SPI 166 IRQ_TYPE_EDGE_RISING>;
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 {
+ reg = <0>;
+ oldi_out0: endpoint {
+ remote-endpoint = <&lcd_in0>;
+ };
};
+ };
};
--
2.34.1
Return-Path: <linux-kernel+bounces-665435-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 02C5D41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:26:50 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id B88C04A6ACF
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:26:49 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 51E90284B20;
Wed, 28 May 2025 12:26:39 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="fts4grBw"
Received: from out-171.mta0.migadu.com (out-171.mta0.migadu.com [91.218.175.171])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B001F284B53
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:26:35 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.171
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435198; cv=none; b=Bcs8s6L4EguSsD9ZhhiPwXoeR6FpYNZV8TPgvWxJ1xexNJ9bB67IJB6M3olug7gGRzt9H51NV+w55dim4g46oV3N/bcmk9aNPFgjAxxu299jL9MyRN+lf6D3Gkk2iGnrEBM/nMfeNfDKPHNR3tScSmCGn+71Rw1wD2u9TbCB2/M=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435198; c=relaxed/simple;
bh=fp4FV1Q5oKA6PakBt9FFkdofti1CndcYAn6bwstnb00=;
h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=p03S/a5xGPyPqUBk2hbNf4dndTd8chPH4aDDZWCrfJnADO/N3jPclgrVAtDNP+Ytl5uvIwOGIDOIwkB4Z9EMzniMznkT3/hTxo3Sqczl+eNqVLh9n2oEk8VyXvbGBhF8b9p2jmASwdkhbObnjTjO7cP472tKsjTXSfwuJuwa0zA=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=fts4grBw; arc=none smtp.client-ip=91.218.175.171
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev
X-Report-Abuse: Please report any abuse attempt to abuse@xxxxxxxxxx and include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1;
t=1748435183;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:cc:mime-version:mime-version:
content-transfer-encoding:content-transfer-encoding;
bh=+deU+ujiPsZRFh8Sv+8YQ8ySpOYmBEQfnq4FF0x5Lic=;
b=fts4grBwmsaWjjLhM9K26M7Jh1vQMCVi8UmQLnsctmZnco7qIthM6VDfG9GTCyYkqjFkNN
s+EIoSBObmdG9GCC+VD1ykxEMLMA0qq7/suRKg6jNeqINKjXJ9cv8Ig7U5oCWnoxulEFSL
XHo2yBlzGpOBhvomWs4MrvJPTy1007w=
From: Aradhya Bhatia <aradhya.bhatia@xxxxxxxxx>
To: Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx>,
Jyri Sarha <jyri.sarha@xxxxxx>
Cc: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
David Airlie <airlied@xxxxxxxxx>,
Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>,
Nishanth Menon <nm@xxxxxx>,
Vignesh Raghavendra <vigneshr@xxxxxx>,
Devarsh Thakkar <devarsht@xxxxxx>,
Praneeth Bajjuri <praneeth@xxxxxx>,
Udit Kumar <u-kumar1@xxxxxx>,
Jayesh Choudhary <j-choudhary@xxxxxx>,
Francesco Dolcini <francesco@xxxxxxxxxx>,
Alexander Sverdlin <alexander.sverdlin@xxxxxxxxxxx>,
Michael Walle <mwalle@xxxxxxxxxx>,
DRI Development List <dri-devel@xxxxxxxxxxxxxxxxxxxxx>,
Devicetree List <devicetree@xxxxxxxxxxxxxxx>,
Linux Kernel List <linux-kernel@xxxxxxxxxxxxxxx>,
Aradhya Bhatia <aradhya.bhatia@xxxxxxxxx>
Subject: [PATCH v9 0/4] drm/tidss: Add OLDI bridge support
Date: Wed, 28 May 2025 17:55:40 +0530
Message-Id: <20250528122544.817829-1-aradhya.bhatia@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Migadu-Flow: FLOW_OUT
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hello all,
This patch series adds support for the dual OLDI TXes supported in Texas
Instruments' AM62x and AM62Px family of SoCs. The OLDI TX hardware supports
single-lvds, lvds-clone, and dual-lvds modes. These TXes have now been
represented through DRM bridges within TI-DSS.
* Some history and hardware description for this patch series *
This patch series is a complete re-vamp from the previously posted series[1] and
hence, the version index has been reset to v1. The OLDI support from that series
was dropped and only the base support for AM62x DSS was kept (and eventually
merged)[2].
The OLDI display that the tidss driver today supports, could not be extended for
the newer SoCs. The OLDI display in tidss is modelled after the DSS and OLDI
hardware in the AM65x SoC. The DSS in AM65x SoC, has two video-ports. Both these
video-ports (VP) output DPI video signals. One of the DPI output (from VP1) from
the DSS connects to a singular OLDI TX present inside the SoC. There is no other
way for the DPI from VP1 to be taken out of the SoC. The other DPI output
however - the one from VP2 - is taken out of the SoC as is. Hence we have an
OLDI bus output and a DPI bus output from the SoC. Since the VP1 and OLDI are
tightly coupled, the tidss driver considers them as a single entity. That is
why, any OLDI sink connects directly to the DSS ports in the OF graphs.
The newer SoCs have varying DSS and OLDI integrations.
The AM62x DSS also has 2 VPs. The 2nd VP, VP2, outputs DPI signals which are
taken out of the SoC - similar to the AM65x above. For the VP1, there are 2 OLDI
TXes. These OLDI TXes can only receive DPI signals from VP1, and don't connect
to VP2 at all.
The AM62Px SoC has 2 OLDI TXes like AM62x SoC. However, the AM62Px SoC also has
2 separate DSSes. The 2 OLDI TXes can now be shared between the 2 VPs of the 2
DSSes.
The addition of the 2nd OLDI TX (and a 2nd DSS in AM62Px) creates a need for
some major changes for a full feature experience.
1. The OF graph needs to be updated to accurately show the data flow.
2. The tidss and OLDI drivers now need to support the dual-link and the cloned
single-link OLDI video signals.
3. The drivers also need to support the case where 2 OLDI TXes are connected to
2 different VPs - thereby creating 2 independent streams of single-link OLDI
outputs.
Note that the OLDI does not have registers of its own. It is still dependent on
the parent VP. The VP that provides the DPI video signals to the OLDI TXes, also
gives the OLDI TXes all the config data. That is to say, the hardware doesn't
sit on the bus directly - but does so through the DSS.
In light of all of these hardware variations, it was decided to have a separate
OLDI driver (unlike AM65x) but not entirely separate so as to be a platform
device. The OLDI TXes are now being represented as DRM bridges under the tidss.
* Regarding the Dependency Patches *
Since the OLDI TXes have a hardware dependency with the parent VP(s), the OLDI
configuration needs to happen before that VP is enabled for streaming. VP stream
enable takes place in tidss_crtc_atomic_enable hook. I have posted patches[0]
allowing DRM bridges to get pre-enabled before the CRTC of that bridge is
enabled. Without those patches, some warnings or glitches may be observed.
* Regarding the Drop of Clone Mode support *
Another key point to note is that the support for clone mode has been dropped
from the tidss OLDI driver, from v5 onwards. If the DT is configured for a clone
mode, the driver will report an error and exit. This has been done because the
driver was not supporting a specific case of clone mode where 2 OLDI sink
bridges connected to the 2 OLDI TXes require active programming (unlike the
simple-panels which do not). The driver does not support creation of two
encoder-bridge pipelines (along with the parent tidss driver) to allow program
any subsequent bridges (OLDI sinks and bridges thereafter).
The code fragments that write the OLDI config to enable clone mode have been
kept as they are, for future, but the driver will not continue to probe if it
detects a clone mode configuration, for the time being.
This drop of clone mode support can be undone by applying this _soft-tested_
patch[6] on top of this series. This patch will revert the driver to previous
revisions and will allow OLDI sinks that don't require active programming (for
example: simple-panels) to work with the driver. Note that this isn't the ideal
way to run clone mode, but it just works for any bridge pipeline after OLDT TX
that does not require additional configuration after the OLDI (for example: a
couple of simple lvds panels connected directly to the OLDI TXes in clone mode).
These patches have been tested on AM625 based Beagleplay[3] platform with a
Lincolntech LCD185 dual-lvds panel. The patches with complete support including
the expected devicetree configuration of the OLDI TXes can be found in the
"next_oldi-v9_1_tests" branch of my github fork[4]. This branch also has support
for Microtips dual-lvds panel (SK-LCD1) which is compatible with the SK-AM625
EVM platform.
I'd appreciate it if somebody can test it, and report back if they observe any
issues.
Thanks,
Aradhya
* Important note about the authorship of patches *
All the patches in the of this series were authored when I owned a "ti.com"
based email id, i.e. <a-bhatia1@xxxxxx>. This email id is not in use anymore,
and all the work done later has been part of my personal work. Since the
original patches were authored using TI's email id, I have maintained the
original authorships as they are, as well as their sign offs.
I have further added another sign off that uses my current (and personal) email
id, the one that is being used to send this revision, i.e.
<aradhya.bhatia@xxxxxxxxx>.
---
Change Log:
V9:
- Fixes and improvements over V8, in patches 2/4 and 4/4.
* Reword the "ti,companion-oldi" property description. (Michael)
* Fix the missing "ti,companion-oldi" property in the dt-schema example. (Michael)
* Fix the get_oldi_mode() logic, for secondary-oldi in dual-link mode.
* Allow secondary-oldi to skip getting serial-clk and io-ctrl syscon regs.
* Rename enum "OLDI_MODE_CLONE_SECONDARY_SINGLE_LINK" to
"OLDI_MODE_SECONDARY_CLONE_SINGLE_LINK".
- Rebase to latest drm-misc-next.
V8:
- V8 brings some additional changes that are required to properly set up Clone
Mode in future:
* Allow for secondary OLDIs to have the "companion-oldi" devicetree property.
* Have separate Secondary OLDI enums for Dual-link and Clone Mode.
* Change get_oldi_mode() logic to distinguish between the 2 different types
of secondary OLDIs (dual-link and clone-mode). This is required because
the secondary OLDI of clone-mode needs to get registered as a drm_bridge
device (when we have the full support in future). The secondary OLDI of
dual-link mode does not need to be set up as a drm_bridge.
- Add "ti,am62l-dss" to the list of compatibles that cannot have the
"oldi-transmitter" property or multiple endpoints on port@0.
- Fix some typos and the one wrong variable type in the tidss_oldi driver.
- Drop Tomi Valkeinen's R-b from patches 2/4 and 4/4 because the logic has
fairly changed, and requires another pass at a review. Also drop
Rob Herring's R-b tag from patch 2/4.
- Drop T-b tags from Alexander Sverdlin and Michael Walle, from patch 4/4.
V7:
- Use for_each_available_child_of_node() instead of for_each_child_of_node()
to parse through the OLDI TX device nodes, as recommended by Alexander
Sverdlin.
- Rebase to drm-misc-next.
As part of this, update the bridge attach part of the code, as encoders are
now passed as a parameter in the drm_bridge_attach() call after Maxime
Ripard's change in commit 98007a0d56b0
("drm/bridge: Add encoder parameter to drm_bridge_funcs.attach").
- Add Alexander Sverdlin's T-b tag in patch 4/4, and Tomi Valkeinen's R-b in
patch 3/4.
V6:
- Add patch 3/4: ("drm/tidss: Add 'AM65X_' prefix to OLDI identifiers"),
to segregate the pre-existing OLDI code intended for AM65x, from the
new-coming OLDI bridge driver related code.
- Cosmetic changes suggested by Tomi Valkeinen in patch 4.
- Rebase to latest linux-next (next-20250226).
- Add Rob Herring's R-b in patch-2, and Tomi Valkeinen's R-b tags in
patches 2 and 4.
V5:
- Implement fixes suggested by Rob Herring in patch-2.
* Drop the example from OLDI schema.
* Fix the DSS schema conditions.
- Drop the OLDI clone mode support from the driver as it was incomplete and
could not account for cases where OLDI TXes were connected to another pair
of bridges that would require additional programming, instead of a pair of
simple-panels which wouldn't.
V4:
- Implement fixes suggested by Krzysztof Kozlowski:
* Squash patches v3:2/4 and v3:3/4 to v4:2/3, and add more hardware details
in commit description.
* Change the serial clock name for OLDI, from "s_clk" to "serial".
* Fix the required condition in the OLDI schema.
* Other minor fixes.
- Change "oldi-txes" OLDI DT node name to "oldi-transmitters".
- Update secondary-OLDI property requirements to be more relaxing for AM62P
DSS configuration.
V3:
- Fix the dt_binding_check warning in patch 3/4[5] by adding
"additionalProperties" constraint.
V2:
- Add all the R-b and A-b tags from Laurent Pinchart, Rob Herring, and
Tomi Valkeinen.
- Reword the subject for patch 1/4.
- Reword the commit descriptions to add proper hardware detail.
- Drop the change in schema reference for port@0 in patch 3/4.
- Lots of improvements for patch 4/4.
* Refactor OLDI selection logic in tidss_oldi_tx_power().
* Add "companion_instance" support to identify the OLDI index in
dual-link or cloned sinle-link modes.
* De-initialize tidss_oldi during tidss removal.
* Use dev_err_probe() instead of dev_err().
* Drop OLDI(n) macro.
* Move OLDI Config register bits to tidss_dispc_regs.h.
* Drop oldi bridge atomic_check().
* s/%d/%u for all print instances of "oldi_instance".
* Move OLDI init after DISPC init in tidss_probe.
* Use devm_drm_of_get_bridge() instead of
drm_of_find_panel_or_bridge() to find the next bridge and drop all
the drm_panel support from tidss_oldi.
Previous revisions:
V1: https://lore.kernel.org/all/20240511193055.1686149-1-a-bhatia1@xxxxxx/
V2: https://lore.kernel.org/all/20240715200953.1213284-1-a-bhatia1@xxxxxx/
V3: https://lore.kernel.org/all/20240716084248.1393666-1-a-bhatia1@xxxxxx/
V4: https://lore.kernel.org/all/20241124143649.686995-1-aradhya.bhatia@xxxxxxxxx/
V5: https://lore.kernel.org/all/20250209160925.380348-1-aradhya.bhatia@xxxxxxxxx/
V6: https://lore.kernel.org/all/20250226181300.756610-1-aradhya.bhatia@xxxxxxxxx/
V7: https://lore.kernel.org/all/20250329133943.110698-1-aradhya.bhatia@xxxxxxxxx/
V8: https://lore.kernel.org/all/20250525151721.567042-1-aradhya.bhatia@xxxxxxxxx/
[0]: Dependency Patches:
("drm/atomic-helper: Refactor crtc & encoder-bridge op loops into separate functions")
https://lore.kernel.org/all/20250406131642.171240-2-aradhya.bhatia@xxxxxxxxx/
("drm/atomic-helper: Separate out bridge pre_enable/post_disable from enable/disable")
https://lore.kernel.org/all/20250406131642.171240-3-aradhya.bhatia@xxxxxxxxx/
("drm/atomic-helper: Re-order bridge chain pre-enable and post-disable")
https://lore.kernel.org/all/20250406131642.171240-4-aradhya.bhatia@xxxxxxxxx/
[1]: AM62 OLDI Series - v7
https://lore.kernel.org/all/20230125113529.13952-1-a-bhatia1@xxxxxx/
[2]: AM62 DSS Series - v9
https://lore.kernel.org/all/20230616150900.6617-1-a-bhatia1@xxxxxx/
[3]: TI AM625 SoC based Beagleplay platform
https://www.beagleboard.org/boards/beagleplay
[4]: GitHub Fork for OLDI tests
https://github.com/aradhya07/linux-ab/tree/next_oldi-v9_1_tests
[5]: ("ti,am65x-dss.yaml: oldi-txes: Missing additionalProperties/
unevaluatedProperties constraint")
https://lore.kernel.org/all/172107979988.1595945.9666141982402158422.robh@xxxxxxxxxx/
[6]: Undo drop of OLDI clone mode support
https://gist.github.com/aradhya07/383b4679453025ba515d58858bd813ca
Aradhya Bhatia (4):
dt-bindings: display: ti,am65x-dss: Re-indent the example
dt-bindings: display: ti: Add schema for AM625 OLDI Transmitter
drm/tidss: Mark AM65x OLDI code separately
drm/tidss: Add OLDI bridge support
.../bindings/display/ti/ti,am625-oldi.yaml | 79 +++
.../bindings/display/ti/ti,am65x-dss.yaml | 199 +++++-
MAINTAINERS | 1 +
drivers/gpu/drm/tidss/Makefile | 3 +-
drivers/gpu/drm/tidss/tidss_dispc.c | 92 +--
drivers/gpu/drm/tidss/tidss_dispc.h | 7 +-
drivers/gpu/drm/tidss/tidss_dispc_regs.h | 29 +-
drivers/gpu/drm/tidss/tidss_drv.c | 9 +
drivers/gpu/drm/tidss/tidss_drv.h | 5 +
drivers/gpu/drm/tidss/tidss_kms.c | 2 +-
drivers/gpu/drm/tidss/tidss_oldi.c | 598 ++++++++++++++++++
drivers/gpu/drm/tidss/tidss_oldi.h | 43 ++
12 files changed, 1001 insertions(+), 66 deletions(-)
create mode 100644 Documentation/devicetree/bindings/display/ti/ti,am625-oldi.yaml
create mode 100644 drivers/gpu/drm/tidss/tidss_oldi.c
create mode 100644 drivers/gpu/drm/tidss/tidss_oldi.h
base-commit: 126bf397bf58485cdd631824190cdcfeb86f5d9b
--
2.34.1
Return-Path: <linux-kernel+bounces-665436-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 9F19D41E003FB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:26:51 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id F35714A6C57
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:26:50 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 9C1582853FA;
Wed, 28 May 2025 12:26:39 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="wb5xDiwC"
Received: from out-182.mta0.migadu.com (out-182.mta0.migadu.com [91.218.175.182])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id DFBDF284B5F
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:26:35 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.182
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435198; cv=none; b=Q/olXKVHaqLNNsSf0oJgtW6BCEpzq/tlYKy1J/lQ8c43ZBGNlNsPntcq5giFLEito8SB9UsQL2pwq821/YOWEd5Bo02chgLlLguwG+Y9gAwedcGGCWriZE1I1ZcK4uujYvieAk8ZygVaO65lyqb3XOI1htxfKivnqihWOP8sM1U=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435198; c=relaxed/simple;
bh=SQbr+ZinjEWEP4YLGM6+CWcQ0s+1BA4gVcYS1jdBRUg=;
h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:
MIME-Version; b=Fnr9iCQU2xHLPaSBb/jKLbgsQhU9mJtYDK+S8wktrJqIUj3984KMsvL4K9oY6bMFyqHKWiN+uPkQh3WwV1pvgSrmYwh5wvAKbxZy+zVYIt4vxm229iqsqu5RjrmhBJajDAihzQLckZzFMFagTNc92JHDZT46/oI1dX6M8jSSU1A=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=wb5xDiwC; arc=none smtp.client-ip=91.218.175.182
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev
X-Report-Abuse: Please report any abuse attempt to abuse@xxxxxxxxxx and include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1;
t=1748435193;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:cc:mime-version:mime-version:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=SkM4H55ivmDMZXBGdEgOR+Sst6rYFvKFCBEs3GnQNXE=;
b=wb5xDiwC62bN+TWO+VD10rsm8agyPMxJrbZ+17WnDQ2Zjqsa0GOLOILPefKyTJ/ihD3eM0
laOtJKrv1bu2WY2j7nE8jdbllz6GmADzRg4zSVcwjBWZ/viP4aWi47FBW8sB4CBavmA/r6
2luQDmChjHwUwA9DPkDm4RU/RW9O54Y=
From: Aradhya Bhatia <aradhya.bhatia@xxxxxxxxx>
To: Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx>,
Jyri Sarha <jyri.sarha@xxxxxx>
Cc: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
David Airlie <airlied@xxxxxxxxx>,
Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>,
Nishanth Menon <nm@xxxxxx>,
Vignesh Raghavendra <vigneshr@xxxxxx>,
Devarsh Thakkar <devarsht@xxxxxx>,
Praneeth Bajjuri <praneeth@xxxxxx>,
Udit Kumar <u-kumar1@xxxxxx>,
Jayesh Choudhary <j-choudhary@xxxxxx>,
Francesco Dolcini <francesco@xxxxxxxxxx>,
Alexander Sverdlin <alexander.sverdlin@xxxxxxxxxxx>,
Michael Walle <mwalle@xxxxxxxxxx>,
DRI Development List <dri-devel@xxxxxxxxxxxxxxxxxxxxx>,
Devicetree List <devicetree@xxxxxxxxxxxxxxx>,
Linux Kernel List <linux-kernel@xxxxxxxxxxxxxxx>,
Aradhya Bhatia <aradhya.bhatia@xxxxxxxxx>
Subject: [PATCH v9 2/4] dt-bindings: display: ti: Add schema for AM625 OLDI Transmitter
Date: Wed, 28 May 2025 17:55:42 +0530
Message-Id: <20250528122544.817829-3-aradhya.bhatia@xxxxxxxxx>
In-Reply-To: <20250528122544.817829-1-aradhya.bhatia@xxxxxxxxx>
References: <20250528122544.817829-1-aradhya.bhatia@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Migadu-Flow: FLOW_OUT
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Aradhya Bhatia <a-bhatia1@xxxxxx>
The OLDI transmitters (TXes) do not have registers of their own, and are
dependent on the source video-ports (VPs) from the DSS to provide
configuration data. This hardware doesn't directly sit on the internal
bus of the SoC, but does so via the DSS. Hence, the OLDI TXes are
supposed to be child nodes under the DSS, and not independent devices.
Two of the OLDI TXes can function in tandem to output dual-link OLDI
output, or cloned single-link outputs. In these cases, one OLDI will be
the primary OLDI, and the other one, a companion. The following diagram
represents such a configuration.
+-----+-----+ +-------+
| | | | |
| | VP1 +----+--->+ OLDI0 | (Primary - may need companion)
| | | | | |
| DSS +-----+ | +-------+
| | | |
| | VP2 | | +-------+
| | | | | |
+-----+-----+ +--->+ OLDI1 | (Companion OLDI)
| |
+-------+
The DSS in AM625 SoC has a configuration like the one above. The AM625
DSS VP1 (port@0) can connect and control 2 OLDI TXes, to use them in
dual-link or cloned single-link OLDI modes. It is only the VP1 that can
connect to either OLDI TXes for the AM625 DSS, and not the VP2.
Alternatively, on some future TI SoCs, along with the above
configuration, the OLDI TX can _also_ connect to separate video sources,
making them work entirely independent of each other. In this case,
neither of the OLDIs are "companion" or "secondary" OLDIs, and nor do
they require one. They both are independent and primary OLDIs. The
following diagram represents such a configuration.
+-----+-----+ +-------+
| | | | |
| | VP1 +--+----------->+ OLDI0 | (Primary - may need companion)
| | | | | |
| +-----+ | +-------+
| | | |
| | VP2 | |
| | | |
| DSS +-----+ | +---+ +-------+
| | | +-->+ M | | |
| | VP3 +----->+ U +--->+ OLDI1 | (Companion or Primary)
| | | | X | | |
| +-----+ +---+ +-------+
| | |
| | VP4 |
| | |
+-----+-----+
Note that depending on the mux configuration, the OLDIs can either be
working together in tandem - sourced by VP1, OR, they could be working
independently sourced by VP1 and VP3 respectively.
The idea is to support all the configurations with this OLDI TX schema.
The OLDI functionality is further supported by a system-control module,
which contains a few registers to control OLDI IO power and other
electrical characteristics of the IO lanes.
Add devicetree binding schema for the OLDI TXes to support various
configurations, and extend their support to the AM625 DSS.
Signed-off-by: Aradhya Bhatia <a-bhatia1@xxxxxx>
Signed-off-by: Aradhya Bhatia <aradhya.bhatia@xxxxxxxxx>
---
Changes Log:
V9:
- Reword the "ti,companion-oldi" property description.
- Fix the missing "ti,companion-oldi" property in the schema example.
- v8 of this patch: https://lore.kernel.org/all/20250525151721.567042-3-aradhya.bhatia@xxxxxxxxx/
V8:
- Drop the condition that made the "secondary-oldi" and "companion-oldi"
properties mutually exclusive.
- Add "ti,am62l-dss" compatible to the list of compatibles that cannot
use the multiple endpoints or have "oldi-transmitters", on port@0.
- Because of above, drop R-b tags from Tomi Valkeinen, and Rob Herring.
- v7 of this patch: https://lore.kernel.org/all/20250329133943.110698-3-aradhya.bhatia@xxxxxxxxx/
---
.../bindings/display/ti/ti,am625-oldi.yaml | 79 +++++++++
.../bindings/display/ti/ti,am65x-dss.yaml | 157 ++++++++++++++++++
MAINTAINERS | 1 +
3 files changed, 237 insertions(+)
create mode 100644 Documentation/devicetree/bindings/display/ti/ti,am625-oldi.yaml
diff --git a/Documentation/devicetree/bindings/display/ti/ti,am625-oldi.yaml b/Documentation/devicetree/bindings/display/ti/ti,am625-oldi.yaml
new file mode 100644
index 000000000000..8203ec5e5bb3
--- /dev/null
+++ b/Documentation/devicetree/bindings/display/ti/ti,am625-oldi.yaml
@@ -0,0 +1,79 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/ti/ti,am625-oldi.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Texas Instruments AM625 OLDI Transmitter
+
+maintainers:
+ - Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx>
+ - Aradhya Bhatia <aradhya.bhatia@xxxxxxxxx>
+
+description:
+ The AM625 TI Keystone OpenLDI transmitter (OLDI TX) supports serialized RGB
+ pixel data transmission between host and flat panel display over LVDS (Low
+ Voltage Differential Sampling) interface. The OLDI TX consists of 7-to-1 data
+ serializers, and 4-data and 1-clock LVDS outputs. It supports the LVDS output
+ formats "jeida-18", "jeida-24" and "vesa-18", and can accept 24-bit RGB or
+ padded and un-padded 18-bit RGB bus formats as input.
+
+properties:
+ reg:
+ maxItems: 1
+
+ clocks:
+ maxItems: 1
+ description: serial clock input for the OLDI transmitters
+
+ clock-names:
+ const: serial
+
+ ti,companion-oldi:
+ $ref: /schemas/types.yaml#/definitions/phandle
+ description:
+ phandle to companion OLDI transmitter. This property is required for both
+ the OLDI TXes if they are expected to work either in dual-lvds mode or in
+ clone mode. This property should point to the other OLDI TX's phandle.
+
+ ti,secondary-oldi:
+ type: boolean
+ description:
+ Boolean property to mark the OLDI transmitter as the secondary one, when the
+ OLDI hardware is expected to run as a companion HW, in cases of dual-lvds
+ mode or clone mode. The primary OLDI hardware is responsible for all the
+ hardware configuration.
+
+ ti,oldi-io-ctrl:
+ $ref: /schemas/types.yaml#/definitions/phandle
+ description:
+ phandle to syscon device node mapping OLDI IO_CTRL registers found in the
+ control MMR region. These registers are required to toggle the I/O lane
+ power, and control its electrical characteristics.
+
+ ports:
+ $ref: /schemas/graph.yaml#/properties/ports
+
+ properties:
+ port@0:
+ $ref: /schemas/graph.yaml#/properties/port
+ description: Parallel RGB input port
+
+ port@1:
+ $ref: /schemas/graph.yaml#/properties/port
+ description: LVDS output port
+
+ required:
+ - port@0
+ - port@1
+
+required:
+ - reg
+ - clocks
+ - clock-names
+ - ti,oldi-io-ctrl
+ - ports
+
+additionalProperties: false
+
+...
diff --git a/Documentation/devicetree/bindings/display/ti/ti,am65x-dss.yaml b/Documentation/devicetree/bindings/display/ti/ti,am65x-dss.yaml
index 9cebe237bd4e..361e9cae6896 100644
--- a/Documentation/devicetree/bindings/display/ti/ti,am65x-dss.yaml
+++ b/Documentation/devicetree/bindings/display/ti/ti,am65x-dss.yaml
@@ -100,6 +100,24 @@ properties:
For AM62A7 DSS, the port is tied off inside the SoC.
For AM62L DSS, the DSS DPI output port node from video port 1
or DSI Tx controller node connected to video port 1.
+ properties:
+ endpoint@0:
+ $ref: /schemas/graph.yaml#/properties/endpoint
+ description:
+ For AM625 DSS, VP Connection to OLDI0.
+ For AM65X DSS, OLDI output from the SoC.
+
+ endpoint@1:
+ $ref: /schemas/graph.yaml#/properties/endpoint
+ description:
+ For AM625 DSS, VP Connection to OLDI1.
+
+ anyOf:
+ - required:
+ - endpoint
+ - required:
+ - endpoint@0
+ - endpoint@1
port@1:
$ref: /schemas/graph.yaml#/properties/port
@@ -121,6 +139,25 @@ properties:
Input memory (from main memory to dispc) bandwidth limit in
bytes per second
+ oldi-transmitters:
+ description:
+ Child node under the DSS, to describe all the OLDI transmitters connected
+ to the DSS videoports.
+ type: object
+ additionalProperties: false
+
+ properties:
+ "#address-cells":
+ const: 1
+
+ "#size-cells":
+ const: 0
+
+ patternProperties:
+ '^oldi@[0-1]$':
+ $ref: ti,am625-oldi.yaml#
+ description: OLDI transmitters connected to the DSS VPs
+
allOf:
- if:
properties:
@@ -129,6 +166,7 @@ allOf:
const: ti,am62a7-dss
then:
properties:
+ oldi-transmitters: false
ports:
properties:
port@0: false
@@ -143,6 +181,22 @@ allOf:
properties:
port@1: false
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - ti,am62l-dss
+ - ti,am65x-dss
+ then:
+ properties:
+ oldi-transmitters: false
+ ports:
+ properties:
+ port@0:
+ properties:
+ endpoint@1: false
+
required:
- compatible
- reg
@@ -190,3 +244,106 @@ examples:
};
};
};
+
+ - |
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/interrupt-controller/irq.h>
+ #include <dt-bindings/soc/ti,sci_pm_domain.h>
+
+ bus {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ dss1: dss@30200000 {
+ compatible = "ti,am625-dss";
+ reg = <0x00 0x30200000 0x00 0x1000>, /* common */
+ <0x00 0x30202000 0x00 0x1000>, /* vidl1 */
+ <0x00 0x30206000 0x00 0x1000>, /* vid */
+ <0x00 0x30207000 0x00 0x1000>, /* ovr1 */
+ <0x00 0x30208000 0x00 0x1000>, /* ovr2 */
+ <0x00 0x3020a000 0x00 0x1000>, /* vp1 */
+ <0x00 0x3020b000 0x00 0x1000>, /* vp2 */
+ <0x00 0x30201000 0x00 0x1000>; /* common1 */
+ reg-names = "common", "vidl1", "vid",
+ "ovr1", "ovr2", "vp1", "vp2", "common1";
+ power-domains = <&k3_pds 186 TI_SCI_PD_EXCLUSIVE>;
+ clocks = <&k3_clks 186 6>,
+ <&vp1_clock>,
+ <&k3_clks 186 2>;
+ clock-names = "fck", "vp1", "vp2";
+ interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
+ oldi-transmitters {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ oldi0: oldi@0 {
+ reg = <0>;
+ clocks = <&k3_clks 186 0>;
+ clock-names = "serial";
+ ti,companion-oldi = <&oldi1>;
+ ti,oldi-io-ctrl = <&dss_oldi_io_ctrl>;
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 {
+ reg = <0>;
+ oldi0_in: endpoint {
+ remote-endpoint = <&dpi0_out0>;
+ };
+ };
+ port@1 {
+ reg = <1>;
+ oldi0_out: endpoint {
+ remote-endpoint = <&panel_in0>;
+ };
+ };
+ };
+ };
+ oldi1: oldi@1 {
+ reg = <1>;
+ clocks = <&k3_clks 186 0>;
+ clock-names = "serial";
+ ti,secondary-oldi;
+ ti,companion-oldi = <&oldi0>;
+ ti,oldi-io-ctrl = <&dss_oldi_io_ctrl>;
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 {
+ reg = <0>;
+ oldi1_in: endpoint {
+ remote-endpoint = <&dpi0_out1>;
+ };
+ };
+ port@1 {
+ reg = <1>;
+ oldi1_out: endpoint {
+ remote-endpoint = <&panel_in1>;
+ };
+ };
+ };
+ };
+ };
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <0>;
+ dpi0_out0: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&oldi0_in>;
+ };
+ dpi0_out1: endpoint@1 {
+ reg = <1>;
+ remote-endpoint = <&oldi1_in>;
+ };
+ };
+ port@1 {
+ reg = <1>;
+ dpi1_out: endpoint {
+ remote-endpoint = <&hdmi_bridge>;
+ };
+ };
+ };
+ };
+ };
diff --git a/MAINTAINERS b/MAINTAINERS
index 88b17f23ed4f..1836434ef5fc 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -8097,6 +8097,7 @@ M: Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx>
L: dri-devel@xxxxxxxxxxxxxxxxxxxxx
S: Maintained
T: git https://gitlab.freedesktop.org/drm/misc/kernel.git
+F: Documentation/devicetree/bindings/display/ti/ti,am625-oldi.yaml
F: Documentation/devicetree/bindings/display/ti/ti,am65x-dss.yaml
F: Documentation/devicetree/bindings/display/ti/ti,j721e-dss.yaml
F: Documentation/devicetree/bindings/display/ti/ti,k2g-dss.yaml
--
2.34.1
Return-Path: <linux-kernel+bounces-665437-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 4E3E541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:27:31 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id B6F801BC51D2
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:27:21 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id B66FE284B53;
Wed, 28 May 2025 12:26:43 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="WMoSVdGm"
Received: from out-181.mta0.migadu.com (out-181.mta0.migadu.com [91.218.175.181])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id A94882857C1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:26:40 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.181
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435202; cv=none; b=SIRvII57U7ylavfHEjaZNxqCmm/LN8UNV6YgaljTki8UoR5/sbTRzUvyNJMJ1V7lvFdJXt2HqoMEgVPmwwj5Njmwcw2MhXA07YTAHQlr9GzIRtBsGfT+IFYIoNQXI3uNrPYzk4cDAQx+wD2sDUwSXHX8O7OhUgXpTB1PumWcumk=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435202; c=relaxed/simple;
bh=U+eNS27WuYOLXO1fUzizXI8+CvitkR6+NS6HkHmN8A0=;
h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:
MIME-Version; b=E6VfyxQIqMxvinGX65A5UqlDMkxU8ZnByabNzbS6Or2bishzspimolBmYE+jvtQWCjqjCziESB0M99fAPS5sg3ElFjcabOHTL0JgiUo461lkznVHk8raopAGy+M1ounPXmEBeRy2xlDIgC+Xl2l4EZhE0QGoectRpcWL80uixmE=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=WMoSVdGm; arc=none smtp.client-ip=91.218.175.181
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev
X-Report-Abuse: Please report any abuse attempt to abuse@xxxxxxxxxx and include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1;
t=1748435198;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:cc:mime-version:mime-version:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=Ev2O2KA+7yPWx1iJIRuDCertIEx3fXp7LU4VFzl8dOc=;
b=WMoSVdGmwQso5l11uuaU11Z+zgwtqAsam8IzulE8kOzt+8sdTTQEUV1TccH+Y5uQRSTS5K
YjEQ1+f12vSHgtpJw1XylPc1rkT17LqhRyZkWqraAD6rZjoOrJ2GjT6WylqskIvVHIJbnS
tgsj5mjk/xUkQCTTJyyfspsG2kygWCU=
From: Aradhya Bhatia <aradhya.bhatia@xxxxxxxxx>
To: Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx>,
Jyri Sarha <jyri.sarha@xxxxxx>
Cc: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
David Airlie <airlied@xxxxxxxxx>,
Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>,
Nishanth Menon <nm@xxxxxx>,
Vignesh Raghavendra <vigneshr@xxxxxx>,
Devarsh Thakkar <devarsht@xxxxxx>,
Praneeth Bajjuri <praneeth@xxxxxx>,
Udit Kumar <u-kumar1@xxxxxx>,
Jayesh Choudhary <j-choudhary@xxxxxx>,
Francesco Dolcini <francesco@xxxxxxxxxx>,
Alexander Sverdlin <alexander.sverdlin@xxxxxxxxxxx>,
Michael Walle <mwalle@xxxxxxxxxx>,
DRI Development List <dri-devel@xxxxxxxxxxxxxxxxxxxxx>,
Devicetree List <devicetree@xxxxxxxxxxxxxxx>,
Linux Kernel List <linux-kernel@xxxxxxxxxxxxxxx>,
Aradhya Bhatia <aradhya.bhatia@xxxxxxxxx>
Subject: [PATCH v9 3/4] drm/tidss: Mark AM65x OLDI code separately
Date: Wed, 28 May 2025 17:55:43 +0530
Message-Id: <20250528122544.817829-4-aradhya.bhatia@xxxxxxxxx>
In-Reply-To: <20250528122544.817829-1-aradhya.bhatia@xxxxxxxxx>
References: <20250528122544.817829-1-aradhya.bhatia@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Migadu-Flow: FLOW_OUT
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
The dss dt schema and the tidss driver have kept the single-link OLDI in
AM65x integrated with the parent video-port (VP) from DSS (as the OLDI
configuration happens from the source VP only).
To help configure the dual-lvds modes that the OLDI has to offer in
devices AM62x and later, a new OLDI bridge driver will be introduced.
Mark the existing OLDI code separately by renaming all the current OLDI
identifiers with the 'AM65X_' prefix in tidss driver, to help
distinguish from the upcoming OLDI bridge driver.
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx>
Signed-off-by: Aradhya Bhatia <aradhya.bhatia@xxxxxxxxx>
---
drivers/gpu/drm/tidss/tidss_dispc.c | 68 ++++++++++++------------
drivers/gpu/drm/tidss/tidss_dispc.h | 2 +-
drivers/gpu/drm/tidss/tidss_dispc_regs.h | 15 +++---
drivers/gpu/drm/tidss/tidss_kms.c | 2 +-
4 files changed, 44 insertions(+), 43 deletions(-)
diff --git a/drivers/gpu/drm/tidss/tidss_dispc.c b/drivers/gpu/drm/tidss/tidss_dispc.c
index 21363ccbd763..befa5ae1c246 100644
--- a/drivers/gpu/drm/tidss/tidss_dispc.c
+++ b/drivers/gpu/drm/tidss/tidss_dispc.c
@@ -146,7 +146,7 @@ static const u16 tidss_am65x_common_regs[DISPC_COMMON_REG_TABLE_LEN] = {
const struct dispc_features dispc_am65x_feats = {
.max_pclk_khz = {
[DISPC_VP_DPI] = 165000,
- [DISPC_VP_OLDI] = 165000,
+ [DISPC_VP_OLDI_AM65X] = 165000,
},
.scaling = {
@@ -176,7 +176,7 @@ const struct dispc_features dispc_am65x_feats = {
.vp_name = { "vp1", "vp2" },
.ovr_name = { "ovr1", "ovr2" },
.vpclk_name = { "vp1", "vp2" },
- .vp_bus_type = { DISPC_VP_OLDI, DISPC_VP_DPI },
+ .vp_bus_type = { DISPC_VP_OLDI_AM65X, DISPC_VP_DPI },
.vp_feat = { .color = {
.has_ctm = true,
@@ -491,7 +491,7 @@ struct dispc_device {
void __iomem *base_ovr[TIDSS_MAX_PORTS];
void __iomem *base_vp[TIDSS_MAX_PORTS];
- struct regmap *oldi_io_ctrl;
+ struct regmap *am65x_oldi_io_ctrl;
struct clk *vp_clk[TIDSS_MAX_PORTS];
@@ -1016,13 +1016,11 @@ void dispc_set_irqenable(struct dispc_device *dispc, dispc_irq_t mask)
}
}
-enum dispc_oldi_mode_reg_val { SPWG_18 = 0, JEIDA_24 = 1, SPWG_24 = 2 };
-
struct dispc_bus_format {
u32 bus_fmt;
u32 data_width;
bool is_oldi_fmt;
- enum dispc_oldi_mode_reg_val oldi_mode_reg_val;
+ enum oldi_mode_reg_val am65x_oldi_mode_reg_val;
};
static const struct dispc_bus_format dispc_bus_formats[] = {
@@ -1066,7 +1064,7 @@ int dispc_vp_bus_check(struct dispc_device *dispc, u32 hw_videoport,
return -EINVAL;
}
- if (dispc->feat->vp_bus_type[hw_videoport] != DISPC_VP_OLDI &&
+ if (dispc->feat->vp_bus_type[hw_videoport] != DISPC_VP_OLDI_AM65X &&
fmt->is_oldi_fmt) {
dev_dbg(dispc->dev, "%s: %s is not OLDI-port\n",
__func__, dispc->feat->vp_name[hw_videoport]);
@@ -1076,23 +1074,23 @@ int dispc_vp_bus_check(struct dispc_device *dispc, u32 hw_videoport,
return 0;
}
-static void dispc_oldi_tx_power(struct dispc_device *dispc, bool power)
+static void dispc_am65x_oldi_tx_power(struct dispc_device *dispc, bool power)
{
- u32 val = power ? 0 : OLDI_PWRDN_TX;
+ u32 val = power ? 0 : AM65X_OLDI_PWRDN_TX;
- if (WARN_ON(!dispc->oldi_io_ctrl))
+ if (WARN_ON(!dispc->am65x_oldi_io_ctrl))
return;
- regmap_update_bits(dispc->oldi_io_ctrl, OLDI_DAT0_IO_CTRL,
- OLDI_PWRDN_TX, val);
- regmap_update_bits(dispc->oldi_io_ctrl, OLDI_DAT1_IO_CTRL,
- OLDI_PWRDN_TX, val);
- regmap_update_bits(dispc->oldi_io_ctrl, OLDI_DAT2_IO_CTRL,
- OLDI_PWRDN_TX, val);
- regmap_update_bits(dispc->oldi_io_ctrl, OLDI_DAT3_IO_CTRL,
- OLDI_PWRDN_TX, val);
- regmap_update_bits(dispc->oldi_io_ctrl, OLDI_CLK_IO_CTRL,
- OLDI_PWRDN_TX, val);
+ regmap_update_bits(dispc->am65x_oldi_io_ctrl, AM65X_OLDI_DAT0_IO_CTRL,
+ AM65X_OLDI_PWRDN_TX, val);
+ regmap_update_bits(dispc->am65x_oldi_io_ctrl, AM65X_OLDI_DAT1_IO_CTRL,
+ AM65X_OLDI_PWRDN_TX, val);
+ regmap_update_bits(dispc->am65x_oldi_io_ctrl, AM65X_OLDI_DAT2_IO_CTRL,
+ AM65X_OLDI_PWRDN_TX, val);
+ regmap_update_bits(dispc->am65x_oldi_io_ctrl, AM65X_OLDI_DAT3_IO_CTRL,
+ AM65X_OLDI_PWRDN_TX, val);
+ regmap_update_bits(dispc->am65x_oldi_io_ctrl, AM65X_OLDI_CLK_IO_CTRL,
+ AM65X_OLDI_PWRDN_TX, val);
}
static void dispc_set_num_datalines(struct dispc_device *dispc,
@@ -1121,8 +1119,8 @@ static void dispc_set_num_datalines(struct dispc_device *dispc,
VP_REG_FLD_MOD(dispc, hw_videoport, DISPC_VP_CONTROL, v, 10, 8);
}
-static void dispc_enable_oldi(struct dispc_device *dispc, u32 hw_videoport,
- const struct dispc_bus_format *fmt)
+static void dispc_enable_am65x_oldi(struct dispc_device *dispc, u32 hw_videoport,
+ const struct dispc_bus_format *fmt)
{
u32 oldi_cfg = 0;
u32 oldi_reset_bit = BIT(5 + hw_videoport);
@@ -1141,7 +1139,7 @@ static void dispc_enable_oldi(struct dispc_device *dispc, u32 hw_videoport,
oldi_cfg |= BIT(7); /* DEPOL */
- oldi_cfg = FLD_MOD(oldi_cfg, fmt->oldi_mode_reg_val, 3, 1);
+ oldi_cfg = FLD_MOD(oldi_cfg, fmt->am65x_oldi_mode_reg_val, 3, 1);
oldi_cfg |= BIT(12); /* SOFTRST */
@@ -1170,10 +1168,10 @@ void dispc_vp_prepare(struct dispc_device *dispc, u32 hw_videoport,
if (WARN_ON(!fmt))
return;
- if (dispc->feat->vp_bus_type[hw_videoport] == DISPC_VP_OLDI) {
- dispc_oldi_tx_power(dispc, true);
+ if (dispc->feat->vp_bus_type[hw_videoport] == DISPC_VP_OLDI_AM65X) {
+ dispc_am65x_oldi_tx_power(dispc, true);
- dispc_enable_oldi(dispc, hw_videoport, fmt);
+ dispc_enable_am65x_oldi(dispc, hw_videoport, fmt);
}
}
@@ -1229,7 +1227,7 @@ void dispc_vp_enable(struct dispc_device *dispc, u32 hw_videoport,
align = true;
/* always use DE_HIGH for OLDI */
- if (dispc->feat->vp_bus_type[hw_videoport] == DISPC_VP_OLDI)
+ if (dispc->feat->vp_bus_type[hw_videoport] == DISPC_VP_OLDI_AM65X)
ieo = false;
dispc_vp_write(dispc, hw_videoport, DISPC_VP_POL_FREQ,
@@ -1255,10 +1253,10 @@ void dispc_vp_disable(struct dispc_device *dispc, u32 hw_videoport)
void dispc_vp_unprepare(struct dispc_device *dispc, u32 hw_videoport)
{
- if (dispc->feat->vp_bus_type[hw_videoport] == DISPC_VP_OLDI) {
+ if (dispc->feat->vp_bus_type[hw_videoport] == DISPC_VP_OLDI_AM65X) {
dispc_vp_write(dispc, hw_videoport, DISPC_VP_DSS_OLDI_CFG, 0);
- dispc_oldi_tx_power(dispc, false);
+ dispc_am65x_oldi_tx_power(dispc, false);
}
}
@@ -2852,15 +2850,15 @@ static int dispc_iomap_resource(struct platform_device *pdev, const char *name,
static int dispc_init_am65x_oldi_io_ctrl(struct device *dev,
struct dispc_device *dispc)
{
- dispc->oldi_io_ctrl =
+ dispc->am65x_oldi_io_ctrl =
syscon_regmap_lookup_by_phandle(dev->of_node,
"ti,am65x-oldi-io-ctrl");
- if (PTR_ERR(dispc->oldi_io_ctrl) == -ENODEV) {
- dispc->oldi_io_ctrl = NULL;
- } else if (IS_ERR(dispc->oldi_io_ctrl)) {
+ if (PTR_ERR(dispc->am65x_oldi_io_ctrl) == -ENODEV) {
+ dispc->am65x_oldi_io_ctrl = NULL;
+ } else if (IS_ERR(dispc->am65x_oldi_io_ctrl)) {
dev_err(dev, "%s: syscon_regmap_lookup_by_phandle failed %ld\n",
- __func__, PTR_ERR(dispc->oldi_io_ctrl));
- return PTR_ERR(dispc->oldi_io_ctrl);
+ __func__, PTR_ERR(dispc->am65x_oldi_io_ctrl));
+ return PTR_ERR(dispc->am65x_oldi_io_ctrl);
}
return 0;
}
diff --git a/drivers/gpu/drm/tidss/tidss_dispc.h b/drivers/gpu/drm/tidss/tidss_dispc.h
index 28958514b8f5..8f1cd0b75629 100644
--- a/drivers/gpu/drm/tidss/tidss_dispc.h
+++ b/drivers/gpu/drm/tidss/tidss_dispc.h
@@ -58,7 +58,7 @@ struct dispc_errata {
enum dispc_vp_bus_type {
DISPC_VP_DPI, /* DPI output */
- DISPC_VP_OLDI, /* OLDI (LVDS) output */
+ DISPC_VP_OLDI_AM65X, /* OLDI (LVDS) output for AM65x DSS */
DISPC_VP_INTERNAL, /* SoC internal routing */
DISPC_VP_TIED_OFF, /* Tied off / Unavailable */
DISPC_VP_MAX_BUS_TYPE,
diff --git a/drivers/gpu/drm/tidss/tidss_dispc_regs.h b/drivers/gpu/drm/tidss/tidss_dispc_regs.h
index e88148e44937..30ce5ee40e1e 100644
--- a/drivers/gpu/drm/tidss/tidss_dispc_regs.h
+++ b/drivers/gpu/drm/tidss/tidss_dispc_regs.h
@@ -226,18 +226,21 @@ enum dispc_common_regs {
#define DISPC_VP_DSS_DMA_THREADSIZE 0x170 /* J721E */
#define DISPC_VP_DSS_DMA_THREADSIZE_STATUS 0x174 /* J721E */
+/* LVDS Format values for OLDI_MAP field in DISPC_VP_OLDI_CFG register */
+enum oldi_mode_reg_val { SPWG_18 = 0, JEIDA_24 = 1, SPWG_24 = 2 };
+
/*
* OLDI IO_CTRL register offsets. On AM654 the registers are found
* from CTRL_MMR0, there the syscon regmap should map 0x14 bytes from
* CTRLMMR0P1_OLDI_DAT0_IO_CTRL to CTRLMMR0P1_OLDI_CLK_IO_CTRL
* register range.
*/
-#define OLDI_DAT0_IO_CTRL 0x00
-#define OLDI_DAT1_IO_CTRL 0x04
-#define OLDI_DAT2_IO_CTRL 0x08
-#define OLDI_DAT3_IO_CTRL 0x0C
-#define OLDI_CLK_IO_CTRL 0x10
+#define AM65X_OLDI_DAT0_IO_CTRL 0x00
+#define AM65X_OLDI_DAT1_IO_CTRL 0x04
+#define AM65X_OLDI_DAT2_IO_CTRL 0x08
+#define AM65X_OLDI_DAT3_IO_CTRL 0x0C
+#define AM65X_OLDI_CLK_IO_CTRL 0x10
-#define OLDI_PWRDN_TX BIT(8)
+#define AM65X_OLDI_PWRDN_TX BIT(8)
#endif /* __TIDSS_DISPC_REGS_H */
diff --git a/drivers/gpu/drm/tidss/tidss_kms.c b/drivers/gpu/drm/tidss/tidss_kms.c
index 19432c08ec6b..c34eb90cddbe 100644
--- a/drivers/gpu/drm/tidss/tidss_kms.c
+++ b/drivers/gpu/drm/tidss/tidss_kms.c
@@ -144,7 +144,7 @@ static int tidss_dispc_modeset_init(struct tidss_device *tidss)
dev_dbg(dev, "Setting up panel for port %d\n", i);
switch (feat->vp_bus_type[i]) {
- case DISPC_VP_OLDI:
+ case DISPC_VP_OLDI_AM65X:
enc_type = DRM_MODE_ENCODER_LVDS;
conn_type = DRM_MODE_CONNECTOR_LVDS;
break;
--
2.34.1
Return-Path: <linux-kernel+bounces-665438-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 0979441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:27:52 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id AE9CE9E4BC6
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:26:57 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 556842853F3;
Wed, 28 May 2025 12:26:51 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="wQdJZLO0"
Received: from out-180.mta0.migadu.com (out-180.mta0.migadu.com [91.218.175.180])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id AB80828640D
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:26:45 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.180
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435209; cv=none; b=aot7ddnRoeK11sqn5Y0489Vdfj7RIraHlHl7L2pynSAN97Ay0HUntWyTx/PlRvVUryackHR7R6WsLuC3AwUv2auIGlp+BUJ/w9eIm808J87vLNUelksOgl7OWaGGPuiH0Ahan2Q9PVYGt00O2t2sc0BpQ0gJ+MRaHojqmiKUI4A=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435209; c=relaxed/simple;
bh=yOnI+359KMN4Qb1zh5zarkvpuhImlfqeGg39W589a2w=;
h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:
MIME-Version; b=M6d44b08ztEPpLfD/WpAgschDKlDyhK/bsp669Ju7HBqunzgNhO07pzFogoxmW/I7KtFHgAOAYTh0QhdmS8H1neOxSfxYG6FyjDUoYDPhAlV7G4lNFkVwlmAQuUJDPhP/ttVYoqOoEJO0bc4oYjAR2s02ubvREjPxlayXplE3S0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=wQdJZLO0; arc=none smtp.client-ip=91.218.175.180
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev
X-Report-Abuse: Please report any abuse attempt to abuse@xxxxxxxxxx and include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1;
t=1748435203;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:cc:mime-version:mime-version:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=PURatn2fVtBAmwr9OOpdhzEGNAprQyCmrjTbI3A06RI=;
b=wQdJZLO0WurU34+46KGRuGglFmEzXpMqTbo7+W3cPk6SfmjAsbsjjSLZMzMCJczYlxIlIr
663NcwpS12WkMoeIpoGF5Bpn3n0XvwTd/+UysMMnw33nwo3KCRYpYX3p3yeELWfjJYl12X
WXXaIv7JgXZP3M7mfmsDvR+8p1laYEM=
From: Aradhya Bhatia <aradhya.bhatia@xxxxxxxxx>
To: Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx>,
Jyri Sarha <jyri.sarha@xxxxxx>
Cc: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
David Airlie <airlied@xxxxxxxxx>,
Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>,
Nishanth Menon <nm@xxxxxx>,
Vignesh Raghavendra <vigneshr@xxxxxx>,
Devarsh Thakkar <devarsht@xxxxxx>,
Praneeth Bajjuri <praneeth@xxxxxx>,
Udit Kumar <u-kumar1@xxxxxx>,
Jayesh Choudhary <j-choudhary@xxxxxx>,
Francesco Dolcini <francesco@xxxxxxxxxx>,
Alexander Sverdlin <alexander.sverdlin@xxxxxxxxxxx>,
Michael Walle <mwalle@xxxxxxxxxx>,
DRI Development List <dri-devel@xxxxxxxxxxxxxxxxxxxxx>,
Devicetree List <devicetree@xxxxxxxxxxxxxxx>,
Linux Kernel List <linux-kernel@xxxxxxxxxxxxxxx>,
Aradhya Bhatia <aradhya.bhatia@xxxxxxxxx>
Subject: [PATCH v9 4/4] drm/tidss: Add OLDI bridge support
Date: Wed, 28 May 2025 17:55:44 +0530
Message-Id: <20250528122544.817829-5-aradhya.bhatia@xxxxxxxxx>
In-Reply-To: <20250528122544.817829-1-aradhya.bhatia@xxxxxxxxx>
References: <20250528122544.817829-1-aradhya.bhatia@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Migadu-Flow: FLOW_OUT
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Aradhya Bhatia <a-bhatia1@xxxxxx>
The AM62x and AM62Px SoCs feature 2 OLDI TXes each, which makes it
possible to connect them in dual-link or cloned single-link OLDI display
modes. The current OLDI support in tidss_dispc.c can only support for
a single OLDI TX, connected to a VP and doesn't really support
configuration of OLDIs in the other modes. The current OLDI support in
tidss_dispc.c also works on the principle that the OLDI output can only
be served by one, and only one, DSS video-port. This isn't the case in
the AM62Px SoC, where there are 2 DSS controllers present that share the
OLDI TXes.
Having their own devicetree and their own bridge entity will help
support the various display modes and sharing possiblilities of the OLDI
hardware.
For all these reasons, add support for the OLDI TXes as DRM bridges.
Signed-off-by: Aradhya Bhatia <a-bhatia1@xxxxxx>
Signed-off-by: Aradhya Bhatia <aradhya.bhatia@xxxxxxxxx>
---
Change Log:
V9:
- Fix the get_oldi_mode() logic, for secondary-oldi in dual-link mode.
- Allow secondary-oldi to skip getting serial-clk and io-ctrl syscon regs.
- Rename enum "OLDI_MODE_CLONE_SECONDARY_SINGLE_LINK" to
"OLDI_MODE_SECONDARY_CLONE_SINGLE_LINK".
- v8 of this patch: https://lore.kernel.org/all/20250525151721.567042-5-aradhya.bhatia@xxxxxxxxx/
V8:
- Change get_oldi_mode() logic to distinguish between the 2 different types
of secondary OLDIs (dual-link and clone-mode). This is required because
the secondary OLDI of clone-mode needs to get registered as a drm_bridge
device (when we have the full support in future). The secondary OLDI of
dual-link mode does not need to be set up as a drm_bridge.
- Fix some typos and the one wrong variable type in the tidss_oldi driver.
- Drop Tomi Valkeinen's R-b tag, and T-b tags by Alexander Sverdlin, and
Michael Walle.
- v7 of this patch: https://lore.kernel.org/all/20250329133943.110698-5-aradhya.bhatia@xxxxxxxxx/
---
drivers/gpu/drm/tidss/Makefile | 3 +-
drivers/gpu/drm/tidss/tidss_dispc.c | 24 +-
drivers/gpu/drm/tidss/tidss_dispc.h | 5 +
drivers/gpu/drm/tidss/tidss_dispc_regs.h | 14 +
drivers/gpu/drm/tidss/tidss_drv.c | 9 +
drivers/gpu/drm/tidss/tidss_drv.h | 5 +
drivers/gpu/drm/tidss/tidss_oldi.c | 598 +++++++++++++++++++++++
drivers/gpu/drm/tidss/tidss_oldi.h | 43 ++
8 files changed, 699 insertions(+), 2 deletions(-)
create mode 100644 drivers/gpu/drm/tidss/tidss_oldi.c
create mode 100644 drivers/gpu/drm/tidss/tidss_oldi.h
diff --git a/drivers/gpu/drm/tidss/Makefile b/drivers/gpu/drm/tidss/Makefile
index 312645271014..b6d6becf1683 100644
--- a/drivers/gpu/drm/tidss/Makefile
+++ b/drivers/gpu/drm/tidss/Makefile
@@ -7,6 +7,7 @@ tidss-y := tidss_crtc.o \
tidss_irq.o \
tidss_plane.o \
tidss_scale_coefs.o \
- tidss_dispc.o
+ tidss_dispc.o \
+ tidss_oldi.o
obj-$(CONFIG_DRM_TIDSS) += tidss.o
diff --git a/drivers/gpu/drm/tidss/tidss_dispc.c b/drivers/gpu/drm/tidss/tidss_dispc.c
index befa5ae1c246..c0277fa36425 100644
--- a/drivers/gpu/drm/tidss/tidss_dispc.c
+++ b/drivers/gpu/drm/tidss/tidss_dispc.c
@@ -566,6 +566,29 @@ static u32 dispc_vp_read(struct dispc_device *dispc, u32 hw_videoport, u16 reg)
return ioread32(base + reg);
}
+int tidss_configure_oldi(struct tidss_device *tidss, u32 hw_videoport,
+ u32 oldi_cfg)
+{
+ u32 count = 0;
+ u32 oldi_reset_bit = BIT(5 + hw_videoport);
+
+ dispc_vp_write(tidss->dispc, hw_videoport, DISPC_VP_DSS_OLDI_CFG, oldi_cfg);
+
+ while (!(oldi_reset_bit & dispc_read(tidss->dispc, DSS_SYSSTATUS)) &&
+ count < 10000)
+ count++;
+
+ if (!(oldi_reset_bit & dispc_read(tidss->dispc, DSS_SYSSTATUS)))
+ return -ETIMEDOUT;
+
+ return 0;
+}
+
+void tidss_disable_oldi(struct tidss_device *tidss, u32 hw_videoport)
+{
+ dispc_vp_write(tidss->dispc, hw_videoport, DISPC_VP_DSS_OLDI_CFG, 0);
+}
+
/*
* TRM gives bitfields as start:end, where start is the higher bit
* number. For example 7:0
@@ -1418,7 +1441,6 @@ void dispc_vp_disable_clk(struct dispc_device *dispc, u32 hw_videoport)
* Calculate the percentage difference between the requested pixel clock rate
* and the effective rate resulting from calculating the clock divider value.
*/
-static
unsigned int dispc_pclk_diff(unsigned long rate, unsigned long real_rate)
{
int r = rate / 100, rr = real_rate / 100;
diff --git a/drivers/gpu/drm/tidss/tidss_dispc.h b/drivers/gpu/drm/tidss/tidss_dispc.h
index 8f1cd0b75629..b8614f62186c 100644
--- a/drivers/gpu/drm/tidss/tidss_dispc.h
+++ b/drivers/gpu/drm/tidss/tidss_dispc.h
@@ -101,6 +101,11 @@ extern const struct dispc_features dispc_am62l_feats;
extern const struct dispc_features dispc_am65x_feats;
extern const struct dispc_features dispc_j721e_feats;
+int tidss_configure_oldi(struct tidss_device *tidss, u32 hw_videoport,
+ u32 oldi_cfg);
+void tidss_disable_oldi(struct tidss_device *tidss, u32 hw_videoport);
+unsigned int dispc_pclk_diff(unsigned long rate, unsigned long real_rate);
+
void dispc_set_irqenable(struct dispc_device *dispc, dispc_irq_t mask);
dispc_irq_t dispc_read_and_clear_irqstatus(struct dispc_device *dispc);
diff --git a/drivers/gpu/drm/tidss/tidss_dispc_regs.h b/drivers/gpu/drm/tidss/tidss_dispc_regs.h
index 30ce5ee40e1e..50a3f28250ef 100644
--- a/drivers/gpu/drm/tidss/tidss_dispc_regs.h
+++ b/drivers/gpu/drm/tidss/tidss_dispc_regs.h
@@ -226,6 +226,20 @@ enum dispc_common_regs {
#define DISPC_VP_DSS_DMA_THREADSIZE 0x170 /* J721E */
#define DISPC_VP_DSS_DMA_THREADSIZE_STATUS 0x174 /* J721E */
+/* OLDI Config Bits (DISPC_VP_DSS_OLDI_CFG) */
+#define OLDI_ENABLE BIT(0)
+#define OLDI_MAP (BIT(1) | BIT(2) | BIT(3))
+#define OLDI_SRC BIT(4)
+#define OLDI_CLONE_MODE BIT(5)
+#define OLDI_MASTERSLAVE BIT(6)
+#define OLDI_DEPOL BIT(7)
+#define OLDI_MSB BIT(8)
+#define OLDI_LBEN BIT(9)
+#define OLDI_LBDATA BIT(10)
+#define OLDI_DUALMODESYNC BIT(11)
+#define OLDI_SOFTRST BIT(12)
+#define OLDI_TPATCFG BIT(13)
+
/* LVDS Format values for OLDI_MAP field in DISPC_VP_OLDI_CFG register */
enum oldi_mode_reg_val { SPWG_18 = 0, JEIDA_24 = 1, SPWG_24 = 2 };
diff --git a/drivers/gpu/drm/tidss/tidss_drv.c b/drivers/gpu/drm/tidss/tidss_drv.c
index f2a4f659f574..a1b12e52aca4 100644
--- a/drivers/gpu/drm/tidss/tidss_drv.c
+++ b/drivers/gpu/drm/tidss/tidss_drv.c
@@ -24,6 +24,7 @@
#include "tidss_drv.h"
#include "tidss_kms.h"
#include "tidss_irq.h"
+#include "tidss_oldi.h"
/* Power management */
@@ -147,6 +148,10 @@ static int tidss_probe(struct platform_device *pdev)
return ret;
}
+ ret = tidss_oldi_init(tidss);
+ if (ret)
+ return dev_err_probe(dev, ret, "failed to init OLDI\n");
+
pm_runtime_enable(dev);
pm_runtime_set_autosuspend_delay(dev, 1000);
@@ -203,6 +208,8 @@ static int tidss_probe(struct platform_device *pdev)
pm_runtime_dont_use_autosuspend(dev);
pm_runtime_disable(dev);
+ tidss_oldi_deinit(tidss);
+
return ret;
}
@@ -227,6 +234,8 @@ static void tidss_remove(struct platform_device *pdev)
pm_runtime_dont_use_autosuspend(dev);
pm_runtime_disable(dev);
+ tidss_oldi_deinit(tidss);
+
/* devm allocated dispc goes away with the dev so mark it NULL */
dispc_remove(tidss);
diff --git a/drivers/gpu/drm/tidss/tidss_drv.h b/drivers/gpu/drm/tidss/tidss_drv.h
index 7f4f4282bc04..d14d5d28f0a3 100644
--- a/drivers/gpu/drm/tidss/tidss_drv.h
+++ b/drivers/gpu/drm/tidss/tidss_drv.h
@@ -11,8 +11,10 @@
#define TIDSS_MAX_PORTS 4
#define TIDSS_MAX_PLANES 4
+#define TIDSS_MAX_OLDI_TXES 2
typedef u32 dispc_irq_t;
+struct tidss_oldi;
struct tidss_device {
struct drm_device ddev; /* DRM device for DSS */
@@ -27,6 +29,9 @@ struct tidss_device {
unsigned int num_planes;
struct drm_plane *planes[TIDSS_MAX_PLANES];
+ unsigned int num_oldis;
+ struct tidss_oldi *oldis[TIDSS_MAX_OLDI_TXES];
+
unsigned int irq;
/* protects the irq masks field and irqenable/irqstatus registers */
diff --git a/drivers/gpu/drm/tidss/tidss_oldi.c b/drivers/gpu/drm/tidss/tidss_oldi.c
new file mode 100644
index 000000000000..8223b8fec8ce
--- /dev/null
+++ b/drivers/gpu/drm/tidss/tidss_oldi.c
@@ -0,0 +1,598 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2025 - Texas Instruments Incorporated
+ *
+ * Aradhya Bhatia <a-bhatia1@xxxxxx>
+ */
+
+#include <linux/clk.h>
+#include <linux/of.h>
+#include <linux/of_graph.h>
+#include <linux/mfd/syscon.h>
+#include <linux/media-bus-format.h>
+#include <linux/regmap.h>
+
+#include <drm/drm_atomic_helper.h>
+#include <drm/drm_bridge.h>
+#include <drm/drm_of.h>
+
+#include "tidss_dispc.h"
+#include "tidss_dispc_regs.h"
+#include "tidss_oldi.h"
+
+struct tidss_oldi {
+ struct tidss_device *tidss;
+ struct device *dev;
+
+ struct drm_bridge bridge;
+ struct drm_bridge *next_bridge;
+
+ enum tidss_oldi_link_type link_type;
+ const struct oldi_bus_format *bus_format;
+ u32 oldi_instance;
+ int companion_instance; /* -1 when OLDI TX operates in Single-Link */
+ u32 parent_vp;
+
+ struct clk *serial;
+ struct regmap *io_ctrl;
+};
+
+struct oldi_bus_format {
+ u32 bus_fmt;
+ u32 data_width;
+ enum oldi_mode_reg_val oldi_mode_reg_val;
+ u32 input_bus_fmt;
+};
+
+static const struct oldi_bus_format oldi_bus_formats[] = {
+ { MEDIA_BUS_FMT_RGB666_1X7X3_SPWG, 18, SPWG_18, MEDIA_BUS_FMT_RGB666_1X18 },
+ { MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, 24, SPWG_24, MEDIA_BUS_FMT_RGB888_1X24 },
+ { MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA, 24, JEIDA_24, MEDIA_BUS_FMT_RGB888_1X24 },
+};
+
+#define OLDI_IDLE_CLK_HZ 25000000 /*25 MHz */
+
+static inline struct tidss_oldi *
+drm_bridge_to_tidss_oldi(struct drm_bridge *bridge)
+{
+ return container_of(bridge, struct tidss_oldi, bridge);
+}
+
+static int tidss_oldi_bridge_attach(struct drm_bridge *bridge,
+ struct drm_encoder *encoder,
+ enum drm_bridge_attach_flags flags)
+{
+ struct tidss_oldi *oldi = drm_bridge_to_tidss_oldi(bridge);
+
+ if (!oldi->next_bridge) {
+ dev_err(oldi->dev,
+ "%s: OLDI%u Failure attach next bridge\n",
+ __func__, oldi->oldi_instance);
+ return -ENODEV;
+ }
+
+ if (!(flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR)) {
+ dev_err(oldi->dev,
+ "%s: OLDI%u DRM_BRIDGE_ATTACH_NO_CONNECTOR is mandatory.\n",
+ __func__, oldi->oldi_instance);
+ return -EINVAL;
+ }
+
+ return drm_bridge_attach(encoder, oldi->next_bridge, bridge, flags);
+}
+
+static int
+tidss_oldi_set_serial_clk(struct tidss_oldi *oldi, unsigned long rate)
+{
+ unsigned long new_rate;
+ int ret;
+
+ ret = clk_set_rate(oldi->serial, rate);
+ if (ret) {
+ dev_err(oldi->dev,
+ "OLDI%u: failed to set serial clk rate to %lu Hz\n",
+ oldi->oldi_instance, rate);
+ return ret;
+ }
+
+ new_rate = clk_get_rate(oldi->serial);
+
+ if (dispc_pclk_diff(rate, new_rate) > 5)
+ dev_warn(oldi->dev,
+ "OLDI%u Clock rate %lu differs over 5%% from requested %lu\n",
+ oldi->oldi_instance, new_rate, rate);
+
+ dev_dbg(oldi->dev, "OLDI%u: new rate %lu Hz (requested %lu Hz)\n",
+ oldi->oldi_instance, clk_get_rate(oldi->serial), rate);
+
+ return 0;
+}
+
+static void tidss_oldi_tx_power(struct tidss_oldi *oldi, bool enable)
+{
+ u32 mask;
+
+ /*
+ * The power control bits are Active Low, and remain powered off by
+ * default. That is, the bits are set to 1. To power on the OLDI TXes,
+ * the bits must be cleared to 0. Since there are cases where not all
+ * OLDI TXes are being used, the power logic selectively powers them
+ * on.
+ * Setting the variable 'val' to particular bit masks, makes sure that
+ * the undesired OLDI TXes remain powered off.
+ */
+
+ if (enable) {
+ switch (oldi->link_type) {
+ case OLDI_MODE_SINGLE_LINK:
+ /* Power-on only the required OLDI TX's IO*/
+ mask = OLDI_PWRDOWN_TX(oldi->oldi_instance) | OLDI_PWRDN_BG;
+ break;
+ case OLDI_MODE_CLONE_SINGLE_LINK:
+ case OLDI_MODE_DUAL_LINK:
+ /* Power-on both the OLDI TXes' IOs */
+ mask = OLDI_PWRDOWN_TX(oldi->oldi_instance) |
+ OLDI_PWRDOWN_TX(oldi->companion_instance) |
+ OLDI_PWRDN_BG;
+ break;
+ default:
+ /*
+ * This code execution should never reach here as any
+ * OLDI with an unsupported OLDI mode would never get
+ * registered in the first place.
+ * However, power-off the OLDI in concern just in case.
+ */
+ mask = OLDI_PWRDOWN_TX(oldi->oldi_instance);
+ enable = false;
+ break;
+ }
+ } else {
+ switch (oldi->link_type) {
+ case OLDI_MODE_CLONE_SINGLE_LINK:
+ case OLDI_MODE_DUAL_LINK:
+ mask = OLDI_PWRDOWN_TX(oldi->oldi_instance) |
+ OLDI_PWRDOWN_TX(oldi->companion_instance) |
+ OLDI_PWRDN_BG;
+ break;
+ case OLDI_MODE_SINGLE_LINK:
+ default:
+ mask = OLDI_PWRDOWN_TX(oldi->oldi_instance);
+ break;
+ }
+ }
+
+ regmap_update_bits(oldi->io_ctrl, OLDI_PD_CTRL, mask, enable ? 0 : mask);
+}
+
+static int tidss_oldi_config(struct tidss_oldi *oldi)
+{
+ const struct oldi_bus_format *bus_fmt = NULL;
+ u32 oldi_cfg = 0;
+ int ret;
+
+ bus_fmt = oldi->bus_format;
+
+ /*
+ * MASTERSLAVE and SRC bits of OLDI Config are always set to 0.
+ */
+
+ if (bus_fmt->data_width == 24)
+ oldi_cfg |= OLDI_MSB;
+ else if (bus_fmt->data_width != 18)
+ dev_warn(oldi->dev,
+ "OLDI%u: DSS port width %d not supported\n",
+ oldi->oldi_instance, bus_fmt->data_width);
+
+ oldi_cfg |= OLDI_DEPOL;
+
+ oldi_cfg = (oldi_cfg & (~OLDI_MAP)) | (bus_fmt->oldi_mode_reg_val << 1);
+
+ oldi_cfg |= OLDI_SOFTRST;
+
+ oldi_cfg |= OLDI_ENABLE;
+
+ switch (oldi->link_type) {
+ case OLDI_MODE_SINGLE_LINK:
+ /* All configuration is done for this mode. */
+ break;
+
+ case OLDI_MODE_CLONE_SINGLE_LINK:
+ oldi_cfg |= OLDI_CLONE_MODE;
+ break;
+
+ case OLDI_MODE_DUAL_LINK:
+ /* data-mapping field also indicates dual-link mode */
+ oldi_cfg |= BIT(3);
+ oldi_cfg |= OLDI_DUALMODESYNC;
+ break;
+
+ default:
+ dev_err(oldi->dev, "OLDI%u: Unsupported mode.\n",
+ oldi->oldi_instance);
+ return -EINVAL;
+ }
+
+ ret = tidss_configure_oldi(oldi->tidss, oldi->parent_vp, oldi_cfg);
+ if (ret == -ETIMEDOUT)
+ dev_warn(oldi->dev, "OLDI%u: timeout waiting for OLDI reset done.\n",
+ oldi->oldi_instance);
+
+ return ret;
+}
+
+static void tidss_oldi_atomic_pre_enable(struct drm_bridge *bridge,
+ struct drm_atomic_state *state)
+{
+ struct tidss_oldi *oldi = drm_bridge_to_tidss_oldi(bridge);
+ struct drm_connector *connector;
+ struct drm_connector_state *conn_state;
+ struct drm_crtc_state *crtc_state;
+ struct drm_display_mode *mode;
+
+ if (oldi->link_type == OLDI_MODE_SECONDARY_CLONE_SINGLE_LINK)
+ return;
+
+ connector = drm_atomic_get_new_connector_for_encoder(state,
+ bridge->encoder);
+ if (WARN_ON(!connector))
+ return;
+
+ conn_state = drm_atomic_get_new_connector_state(state, connector);
+ if (WARN_ON(!conn_state))
+ return;
+
+ crtc_state = drm_atomic_get_new_crtc_state(state, conn_state->crtc);
+ if (WARN_ON(!crtc_state))
+ return;
+
+ mode = &crtc_state->adjusted_mode;
+
+ /* Configure the OLDI params*/
+ tidss_oldi_config(oldi);
+
+ /* Set the OLDI serial clock (7 times the pixel clock) */
+ tidss_oldi_set_serial_clk(oldi, mode->clock * 7 * 1000);
+
+ /* Enable OLDI IO power */
+ tidss_oldi_tx_power(oldi, true);
+}
+
+static void tidss_oldi_atomic_post_disable(struct drm_bridge *bridge,
+ struct drm_atomic_state *state)
+{
+ struct tidss_oldi *oldi = drm_bridge_to_tidss_oldi(bridge);
+
+ if (oldi->link_type == OLDI_MODE_SECONDARY_CLONE_SINGLE_LINK)
+ return;
+
+ /* Disable OLDI IO power */
+ tidss_oldi_tx_power(oldi, false);
+
+ /* Set the OLDI serial clock to IDLE Frequency */
+ tidss_oldi_set_serial_clk(oldi, OLDI_IDLE_CLK_HZ);
+
+ /* Clear OLDI Config */
+ tidss_disable_oldi(oldi->tidss, oldi->parent_vp);
+}
+
+#define MAX_INPUT_SEL_FORMATS 1
+
+static u32 *tidss_oldi_atomic_get_input_bus_fmts(struct drm_bridge *bridge,
+ struct drm_bridge_state *bridge_state,
+ struct drm_crtc_state *crtc_state,
+ struct drm_connector_state *conn_state,
+ u32 output_fmt,
+ unsigned int *num_input_fmts)
+{
+ struct tidss_oldi *oldi = drm_bridge_to_tidss_oldi(bridge);
+ u32 *input_fmts;
+ int i;
+
+ *num_input_fmts = 0;
+
+ for (i = 0; i < ARRAY_SIZE(oldi_bus_formats); i++)
+ if (oldi_bus_formats[i].bus_fmt == output_fmt)
+ break;
+
+ if (i == ARRAY_SIZE(oldi_bus_formats))
+ return NULL;
+
+ input_fmts = kcalloc(MAX_INPUT_SEL_FORMATS, sizeof(*input_fmts),
+ GFP_KERNEL);
+ if (!input_fmts)
+ return NULL;
+
+ *num_input_fmts = 1;
+ input_fmts[0] = oldi_bus_formats[i].input_bus_fmt;
+ oldi->bus_format = &oldi_bus_formats[i];
+
+ return input_fmts;
+}
+
+static const struct drm_bridge_funcs tidss_oldi_bridge_funcs = {
+ .attach = tidss_oldi_bridge_attach,
+ .atomic_pre_enable = tidss_oldi_atomic_pre_enable,
+ .atomic_post_disable = tidss_oldi_atomic_post_disable,
+ .atomic_get_input_bus_fmts = tidss_oldi_atomic_get_input_bus_fmts,
+ .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
+ .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
+ .atomic_reset = drm_atomic_helper_bridge_reset,
+};
+
+static int get_oldi_mode(struct device_node *oldi_tx, int *companion_instance)
+{
+ struct device_node *companion;
+ struct device_node *port0, *port1;
+ u32 companion_reg;
+ bool secondary_oldi = false;
+ int pixel_order;
+
+ /*
+ * Find if the OLDI is paired with another OLDI for combined OLDI
+ * operation (dual-link or clone).
+ */
+ companion = of_parse_phandle(oldi_tx, "ti,companion-oldi", 0);
+ if (!companion)
+ /*
+ * The OLDI TX does not have a companion, nor is it a
+ * secondary OLDI. It will operate independently.
+ */
+ return OLDI_MODE_SINGLE_LINK;
+
+ if (of_property_read_u32(companion, "reg", &companion_reg))
+ return OLDI_MODE_UNSUPPORTED;
+
+ if (companion_reg > (TIDSS_MAX_OLDI_TXES - 1))
+ /* Invalid companion OLDI reg value. */
+ return OLDI_MODE_UNSUPPORTED;
+
+ *companion_instance = (int)companion_reg;
+
+ if (of_property_read_bool(oldi_tx, "ti,secondary-oldi"))
+ secondary_oldi = true;
+
+ /*
+ * We need to work out if the sink is expecting us to function in
+ * dual-link mode. We do this by looking at the DT port nodes, the
+ * OLDI TX ports are connected to. If they are marked as expecting
+ * even pixels and odd pixels, then we need to enable dual-link.
+ */
+ port0 = of_graph_get_port_by_id(oldi_tx, 1);
+ port1 = of_graph_get_port_by_id(companion, 1);
+ pixel_order = drm_of_lvds_get_dual_link_pixel_order(port0, port1);
+ of_node_put(port0);
+ of_node_put(port1);
+ of_node_put(companion);
+
+ switch (pixel_order) {
+ case -EINVAL:
+ /*
+ * The dual-link properties were not found in at least
+ * one of the sink nodes. Since 2 OLDI ports are present
+ * in the DT, it can be safely assumed that the required
+ * configuration is Clone Mode.
+ */
+ return (secondary_oldi ? OLDI_MODE_SECONDARY_CLONE_SINGLE_LINK :
+ OLDI_MODE_CLONE_SINGLE_LINK);
+
+ case DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS:
+ /*
+ * Primary OLDI can only support "ODD" pixels. So, from its
+ * perspective, the pixel order has to be ODD-EVEN.
+ */
+ return (secondary_oldi ? OLDI_MODE_UNSUPPORTED :
+ OLDI_MODE_DUAL_LINK);
+
+ case DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS:
+ /*
+ * Secondary OLDI can only support "EVEN" pixels. So, from its
+ * perspective, the pixel order has to be EVEN-ODD.
+ */
+ return (secondary_oldi ? OLDI_MODE_SECONDARY_DUAL_LINK :
+ OLDI_MODE_UNSUPPORTED);
+
+ default:
+ return OLDI_MODE_UNSUPPORTED;
+ }
+}
+
+static int get_parent_dss_vp(struct device_node *oldi_tx, u32 *parent_vp)
+{
+ struct device_node *ep, *dss_port;
+ int ret;
+
+ ep = of_graph_get_endpoint_by_regs(oldi_tx, OLDI_INPUT_PORT, -1);
+ if (ep) {
+ dss_port = of_graph_get_remote_port(ep);
+ if (!dss_port) {
+ ret = -ENODEV;
+ goto err_return_ep_port;
+ }
+
+ ret = of_property_read_u32(dss_port, "reg", parent_vp);
+
+ of_node_put(dss_port);
+err_return_ep_port:
+ of_node_put(ep);
+ return ret;
+ }
+
+ return -ENODEV;
+}
+
+static const struct drm_bridge_timings default_tidss_oldi_timings = {
+ .input_bus_flags = DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE
+ | DRM_BUS_FLAG_DE_HIGH,
+};
+
+void tidss_oldi_deinit(struct tidss_device *tidss)
+{
+ for (int i = 0; i < tidss->num_oldis; i++) {
+ if (tidss->oldis[i]) {
+ drm_bridge_remove(&tidss->oldis[i]->bridge);
+ tidss->oldis[i] = NULL;
+ }
+ }
+}
+
+int tidss_oldi_init(struct tidss_device *tidss)
+{
+ struct tidss_oldi *oldi;
+ struct device_node *child;
+ struct drm_bridge *bridge;
+ u32 parent_vp, oldi_instance;
+ int companion_instance = -1;
+ enum tidss_oldi_link_type link_type = OLDI_MODE_UNSUPPORTED;
+ struct device_node *oldi_parent;
+ int ret = 0;
+
+ tidss->num_oldis = 0;
+
+ oldi_parent = of_get_child_by_name(tidss->dev->of_node, "oldi-transmitters");
+ if (!oldi_parent)
+ /* Return gracefully */
+ return 0;
+
+ for_each_available_child_of_node(oldi_parent, child) {
+ ret = get_parent_dss_vp(child, &parent_vp);
+ if (ret) {
+ if (ret == -ENODEV) {
+ /*
+ * ENODEV means that this particular OLDI node
+ * is not connected with the DSS, which is not
+ * a harmful case. There could be another OLDI
+ * which may still be connected.
+ * Continue to search for that.
+ */
+ ret = 0;
+ continue;
+ }
+ goto err_put_node;
+ }
+
+ ret = of_property_read_u32(child, "reg", &oldi_instance);
+ if (ret)
+ goto err_put_node;
+
+ /*
+ * Now that it's confirmed that OLDI is connected with DSS,
+ * let's continue getting the OLDI sinks ahead and other OLDI
+ * properties.
+ */
+ bridge = devm_drm_of_get_bridge(tidss->dev, child,
+ OLDI_OUTPUT_PORT, 0);
+ if (IS_ERR(bridge)) {
+ /*
+ * Either there was no OLDI sink in the devicetree, or
+ * the OLDI sink has not been added yet. In any case,
+ * return.
+ * We don't want to have an OLDI node connected to DSS
+ * but not to any sink.
+ */
+ ret = dev_err_probe(tidss->dev, PTR_ERR(bridge),
+ "no panel/bridge for OLDI%u.\n",
+ oldi_instance);
+ goto err_put_node;
+ }
+
+ link_type = get_oldi_mode(child, &companion_instance);
+ if (link_type == OLDI_MODE_UNSUPPORTED) {
+ ret = dev_err_probe(tidss->dev, -EINVAL,
+ "OLDI%u: Unsupported OLDI connection.\n",
+ oldi_instance);
+ goto err_put_node;
+ } else if ((link_type == OLDI_MODE_SECONDARY_CLONE_SINGLE_LINK) ||
+ (link_type == OLDI_MODE_CLONE_SINGLE_LINK)) {
+ /*
+ * The OLDI driver cannot support OLDI clone mode
+ * properly at present.
+ * The clone mode requires 2 working encoder-bridge
+ * pipelines, generating from the same crtc. The DRM
+ * framework does not support this at present. If
+ * there were to be, say, 2 OLDI sink bridges each
+ * connected to an OLDI TXes, they couldn't both be
+ * supported simultaneously.
+ * This driver still has some code pertaining to OLDI
+ * clone mode configuration in DSS hardware for future,
+ * when there is a better infrastructure in the DRM
+ * framework to support 2 encoder-bridge pipelines
+ * simultaneously.
+ * Till that time, this driver shall error out if it
+ * detects a clone mode configuration.
+ */
+ ret = dev_err_probe(tidss->dev, -EOPNOTSUPP,
+ "The OLDI driver does not support Clone Mode at present.\n");
+ goto err_put_node;
+ } else if (link_type == OLDI_MODE_SECONDARY_DUAL_LINK) {
+ /*
+ * This is the secondary OLDI node, which serves as a
+ * companion to the primary OLDI, when it is configured
+ * for the dual-link mode. Since the primary OLDI will
+ * be a part of bridge chain, no need to put this one
+ * too. Continue onto the next OLDI node.
+ */
+ continue;
+ }
+
+ oldi = devm_kzalloc(tidss->dev, sizeof(*oldi), GFP_KERNEL);
+ if (!oldi) {
+ ret = -ENOMEM;
+ goto err_put_node;
+ }
+
+ oldi->parent_vp = parent_vp;
+ oldi->oldi_instance = oldi_instance;
+ oldi->companion_instance = companion_instance;
+ oldi->link_type = link_type;
+ oldi->dev = tidss->dev;
+ oldi->next_bridge = bridge;
+
+ /*
+ * Only the primary OLDI needs to reference the io-ctrl system
+ * registers, and the serial clock.
+ * We don't require a check for secondary OLDI in dual-link mode
+ * because the driver will not create a drm_bridge instance.
+ * But the driver will need to create a drm_bridge instance,
+ * for secondary OLDI in clone mode (once it is supported).
+ */
+ if (link_type != OLDI_MODE_SECONDARY_CLONE_SINGLE_LINK) {
+ oldi->io_ctrl = syscon_regmap_lookup_by_phandle(child,
+ "ti,oldi-io-ctrl");
+ if (IS_ERR(oldi->io_ctrl)) {
+ ret = dev_err_probe(oldi->dev, PTR_ERR(oldi->io_ctrl),
+ "OLDI%u: syscon_regmap_lookup_by_phandle failed.\n",
+ oldi_instance);
+ goto err_put_node;
+ }
+
+ oldi->serial = of_clk_get_by_name(child, "serial");
+ if (IS_ERR(oldi->serial)) {
+ ret = dev_err_probe(oldi->dev, PTR_ERR(oldi->serial),
+ "OLDI%u: Failed to get serial clock.\n",
+ oldi_instance);
+ goto err_put_node;
+ }
+ }
+
+ /* Register the bridge. */
+ oldi->bridge.of_node = child;
+ oldi->bridge.driver_private = oldi;
+ oldi->bridge.funcs = &tidss_oldi_bridge_funcs;
+ oldi->bridge.timings = &default_tidss_oldi_timings;
+
+ tidss->oldis[tidss->num_oldis++] = oldi;
+ oldi->tidss = tidss;
+
+ drm_bridge_add(&oldi->bridge);
+ }
+
+ of_node_put(child);
+ of_node_put(oldi_parent);
+
+ return 0;
+
+err_put_node:
+ of_node_put(child);
+ of_node_put(oldi_parent);
+ return ret;
+}
diff --git a/drivers/gpu/drm/tidss/tidss_oldi.h b/drivers/gpu/drm/tidss/tidss_oldi.h
new file mode 100644
index 000000000000..8cd535c5ee65
--- /dev/null
+++ b/drivers/gpu/drm/tidss/tidss_oldi.h
@@ -0,0 +1,43 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2025 - Texas Instruments Incorporated
+ *
+ * Aradhya Bhatia <a-bhatia1@xxxxxx>
+ */
+
+#ifndef __TIDSS_OLDI_H__
+#define __TIDSS_OLDI_H__
+
+#include "tidss_drv.h"
+
+struct tidss_oldi;
+
+/* OLDI PORTS */
+#define OLDI_INPUT_PORT 0
+#define OLDI_OUTPUT_PORT 1
+
+/* Control MMR Registers */
+
+/* Register offsets */
+#define OLDI_PD_CTRL 0x100
+#define OLDI_LB_CTRL 0x104
+
+/* Power control bits */
+#define OLDI_PWRDOWN_TX(n) BIT(n)
+
+/* LVDS Bandgap reference Enable/Disable */
+#define OLDI_PWRDN_BG BIT(8)
+
+enum tidss_oldi_link_type {
+ OLDI_MODE_UNSUPPORTED,
+ OLDI_MODE_SINGLE_LINK,
+ OLDI_MODE_CLONE_SINGLE_LINK,
+ OLDI_MODE_SECONDARY_CLONE_SINGLE_LINK,
+ OLDI_MODE_DUAL_LINK,
+ OLDI_MODE_SECONDARY_DUAL_LINK,
+};
+
+int tidss_oldi_init(struct tidss_device *tidss);
+void tidss_oldi_deinit(struct tidss_device *tidss);
+
+#endif /* __TIDSS_OLDI_H__ */
--
2.34.1
Return-Path: <linux-kernel+bounces-665439-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1C24C41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:28:16 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 0F6CDA240E0
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:27:52 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C7DAF285406;
Wed, 28 May 2025 12:28:04 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="X+mqThz9"
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9F146215F5C;
Wed, 28 May 2025 12:28:02 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435284; cv=none; b=SRn9p5ZcbYj8uMyNcVnUgqtjvPMmQGX7ugOIR298qteZoxHvqPyBJZrFGHvKIBSHVEf3iDgxx15wyRsmc3BWz/3wX5xgKYDSRjaB0+JTUNfHmGkG6INwklHaqoSAIZZMtdjKJAnYDM8f0ri/s17dip8Rq0KdZE4aJ1Msn7Dt8Pw=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435284; c=relaxed/simple;
bh=SnpVa7I426a7+tDo9ZDH4Qa/C0XkGmiVoXDvxpI+gHM=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=aJcjHjJ+FweL11WNQhaWRdC/t3U5xnNQaV03K1tBRS3Jr8Kqg6uW0InElVchN59RBs9qqN6qrtHzwEgW6oid+XXcH/ohL/i2C3P4m5W9/+BPZAHlHROqSiSG5hVxqBNLUkvozW2aPoT0a6wOta2wASP+R5rkCNHw4sGthU4WtjE=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com; spf=pass smtp.mailfrom=qualcomm.com; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b=X+mqThz9; arc=none smtp.client-ip=205.220.168.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=qualcomm.com
Received: from pps.filterd (m0279866.ppops.net [127.0.0.1])
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S748D2003397;
Wed, 28 May 2025 12:28:00 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
cc:content-transfer-encoding:date:from:in-reply-to:message-id
:mime-version:references:subject:to; s=qcppdkim1; bh=SnpVa7I426a
7+tDo9ZDH4Qa/C0XkGmiVoXDvxpI+gHM=; b=X+mqThz9rBpSAf8GVFLRGMo3oTH
7TUqGOe0Jk+GE3yMcShyuraD0WSne2KYzZtmUFZ3QHJ3vs/hMyLY9gcidj/BquRY
JTXkp1kt2eLmqzDgFllkbXCo5z15Il5r+xLlnIEwHBy4mG6iKSGngU6xO9L3Q0vo
JMKumHuuZVJFo7aagNt5A3xzzs5fF28TzlFhGNcVJw7uj5u7/jDhGLFP4YgWiYEG
puVXEbFHgBRfUpw+NuCA6htZAJx0pGgV++VRBtd2fSCutSHyw3zIV9OMYs3pHxfv
Z+GMMmCID273hMhus5UZU7/xJb+e0PTWJs3mqtLeHj6nICZtunHN+BIPsSw==
Received: from apblrppmta02.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.18.19])
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46wavkuy9d-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 12:27:59 +0000 (GMT)
Received: from pps.filterd (APBLRPPMTA02.qualcomm.com [127.0.0.1])
by APBLRPPMTA02.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTP id 54SCRuPZ011486;
Wed, 28 May 2025 12:27:56 GMT
Received: from pps.reinject (localhost [127.0.0.1])
by APBLRPPMTA02.qualcomm.com (PPS) with ESMTPS id 46u76mxk32-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 12:27:56 +0000
Received: from APBLRPPMTA02.qualcomm.com (APBLRPPMTA02.qualcomm.com [127.0.0.1])
by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 54SCRtuR011458;
Wed, 28 May 2025 12:27:56 GMT
Received: from hu-devc-hyd-u22-c.qualcomm.com (hu-wasimn-hyd.qualcomm.com [10.147.246.180])
by APBLRPPMTA02.qualcomm.com (PPS) with ESMTPS id 54SCRthl011452
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 12:27:55 +0000
Received: by hu-devc-hyd-u22-c.qualcomm.com (Postfix, from userid 3944840)
id E6C8A5B1; Wed, 28 May 2025 17:57:54 +0530 (+0530)
From: Wasim Nazir <quic_wasimn@xxxxxxxxxxx>
To: Bjorn Andersson <andersson@xxxxxxxxxx>,
Konrad Dybcio <konradybcio@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>
Cc: linux-arm-msm@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, kernel@xxxxxxxxxxx,
kernel@xxxxxxxxxxxxxxxx, Wasim Nazir <quic_wasimn@xxxxxxxxxxx>
Subject: [PATCH v8 3/4] arm64: dts: qcom: qcs9075: Introduce QCS9075 SOM
Date: Wed, 28 May 2025 17:57:50 +0530
Message-ID: <20250528122753.3623570-4-quic_wasimn@xxxxxxxxxxx>
X-Mailer: git-send-email 2.49.0
In-Reply-To: <20250528122753.3623570-1-quic_wasimn@xxxxxxxxxxx>
References: <20250528122753.3623570-1-quic_wasimn@xxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-QCInternal: smtphost
X-QCInternal: smtphost
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085
X-Proofpoint-GUID: mxKu9J0xPMMUWZDG8pceWzYhZTc5Ys_m
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEwNyBTYWx0ZWRfX4IweLMSWAHmk
ca0fSD83JKLX4XeGLIhdflWtnI23l8XTbgl39RGA+ANaDeFE/Dqb8uozJonOdtt/3xMcg0S1C1Q
TFelDOxiBP5TCgnCFMmWfLPAWB0W9zjrxPZDUJSiIkDdmgmGqsN+L2SXQUoDANjSGfxgNfm2HW6
pKQUdf+ly9RdOvNvV+TiVOUdonPoumatUANGTtdzAZo22TNrSzMPASQALG9P6/GhKk+IhddoUSP
TJTLcluBs3msRQKwUm+hEJ3+V/qKE1C7MjG5FOY8pcOeMYGnnwna1FbamCG7aggWuZ9VpxqkRrT
knheOFExzu+8zsapq7pvNwNJI0RIDtm5g1sekV/zUu9AdNcQmtJ+zm3jPM5Fo5tyrPXimJwkpoR
8/FrPF45NC0ILauenwoxnHdN1EXfO8HCBhJfk0Pc+/oK3qIqajXj3bMvyFcYo6MyqgvLMTls
X-Authority-Analysis: v=2.4 cv=fMk53Yae c=1 sm=1 tr=0 ts=6837014f cx=c_pps
a=Ou0eQOY4+eZoSc0qltEV5Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17
a=dt9VzEwgFbYA:10 a=COk6AnOGAAAA:8 a=wRu9zdmjipw6Plw-N58A:9
a=TjNXssC_j7lpFel5tvFf:22
X-Proofpoint-ORIG-GUID: mxKu9J0xPMMUWZDG8pceWzYhZTc5Ys_m
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
malwarescore=0 adultscore=1 impostorscore=0 phishscore=0 suspectscore=0
spamscore=0 priorityscore=1501 lowpriorityscore=0 clxscore=1015 mlxscore=0
mlxlogscore=792 bulkscore=0 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280107
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
QCS9075 is an IoT variant of SA8775P SOC, most notably without
safety monitoring feature of Safety Island(SAIL) subsystem.
Add qcs9075-som.dtsi to specifies QCS9075 based SOM having SOC,
PMICs, Memory-map updates.
Use this SOM for qcs9075-iq-9075-evk board.
Signed-off-by: Wasim Nazir <quic_wasimn@xxxxxxxxxxx>
---
arch/arm64/boot/dts/qcom/qcs9075-som.dtsi | 10 ++++++++++
1 file changed, 10 insertions(+)
create mode 100644 arch/arm64/boot/dts/qcom/qcs9075-som.dtsi
diff --git a/arch/arm64/boot/dts/qcom/qcs9075-som.dtsi b/arch/arm64/boot/dts/qcom/qcs9075-som.dtsi
new file mode 100644
index 000000000000..552e40c95e06
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/qcs9075-som.dtsi
@@ -0,0 +1,10 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2025, Qualcomm Innovation Center, Inc. All rights reserved.
+ */
+
+/dts-v1/;
+
+#include "sa8775p.dtsi"
+#include "iq9-reserved-memory.dtsi"
+#include "sa8775p-pmics.dtsi"
--
2.49.0
Return-Path: <linux-kernel+bounces-665441-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 0C69841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:28:33 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 96BDB1BC4CF9
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:28:40 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 8E7692857F1;
Wed, 28 May 2025 12:28:05 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="ieqvz6wb"
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4FB01284B49;
Wed, 28 May 2025 12:28:03 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435284; cv=none; b=rZhGIrP5G9WwJfJZWenqJxfmqfgwNY+VEWNhbkuKtVLEEKo9M9mJ/UYXv2jfR+fkMa67UXazf7KgCWuvCnX1c1odO4/pUE4JhYStdIa+Nbjn6ZPalmxKcDDPtKOIoogj0+33JRmEW198E5gTNgktuhuoGTs8KuVSd13xn54a1u0=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435284; c=relaxed/simple;
bh=3/iyTvhEMTGEUUPhFMVqWrDj8NKTUF7gusSq9rogfis=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=lkeapdOB0IVZbGuEO8S2RwWudQdk+2EAM5nuM/DkFkULztdN4zG40qEDhICRRCF1Gji0/be2LW+ohvPJkPTyFdUNTbc1reEPtjtEgptTycuaNYflhgW3Cv0bVNFw0lFi7qfWBw2QWEX1daqvPv0RF+8Z/UP6ucq6QGsCvq6SyoY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com; spf=pass smtp.mailfrom=qualcomm.com; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b=ieqvz6wb; arc=none smtp.client-ip=205.220.168.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=qualcomm.com
Received: from pps.filterd (m0279865.ppops.net [127.0.0.1])
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S57q81027808;
Wed, 28 May 2025 12:28:00 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
cc:content-transfer-encoding:date:from:in-reply-to:message-id
:mime-version:references:subject:to; s=qcppdkim1; bh=L4k5BIhgS5A
7asZ5jZXlR/tV7TYlPcMkxSEcntis13A=; b=ieqvz6wb0maJAUEeMQIPr2ra7cQ
zbvmXwxHr5QOXFmAsP00xV79QR7F/38uAlTvwfEtozuLmoAv6eoPSxwcgF/NdIb/
FfUpYMyLwHpfesU4ZWmzP9+q+nAL9oFeh0umF6uVxg50AlbkryVtrEyaCn5GyRGv
wNaJ0DKd5Osje4rNWM6wSUwmQFyUMYd7DFw92DEYQhca0LI4ftMd+u/1oUTtFhOO
DwcAhHAl1l4LYoNnsVDC5s6pIgVwcSsgkW68FdklgwbZ4v/DwSzUrnrbIs55YA0j
rGZkipeDRFJPSV1a4kc4ZbZTJgDyJG6aCuPtsnXduDMS882pmGA9zxVFJEA==
Received: from apblrppmta02.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.18.19])
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46w992m7fk-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 12:28:00 +0000 (GMT)
Received: from pps.filterd (APBLRPPMTA02.qualcomm.com [127.0.0.1])
by APBLRPPMTA02.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTP id 54SCRuxS011492;
Wed, 28 May 2025 12:27:56 GMT
Received: from pps.reinject (localhost [127.0.0.1])
by APBLRPPMTA02.qualcomm.com (PPS) with ESMTPS id 46u76mxk35-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 12:27:56 +0000
Received: from APBLRPPMTA02.qualcomm.com (APBLRPPMTA02.qualcomm.com [127.0.0.1])
by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 54SCRttI011459;
Wed, 28 May 2025 12:27:56 GMT
Received: from hu-devc-hyd-u22-c.qualcomm.com (hu-wasimn-hyd.qualcomm.com [10.147.246.180])
by APBLRPPMTA02.qualcomm.com (PPS) with ESMTPS id 54SCRtXC011456
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 12:27:55 +0000
Received: by hu-devc-hyd-u22-c.qualcomm.com (Postfix, from userid 3944840)
id DF84B4B8; Wed, 28 May 2025 17:57:54 +0530 (+0530)
From: Wasim Nazir <quic_wasimn@xxxxxxxxxxx>
To: Bjorn Andersson <andersson@xxxxxxxxxx>,
Konrad Dybcio <konradybcio@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>
Cc: linux-arm-msm@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, kernel@xxxxxxxxxxx,
kernel@xxxxxxxxxxxxxxxx, Wasim Nazir <quic_wasimn@xxxxxxxxxxx>
Subject: [PATCH v8 1/4] dt-bindings: arm: qcom: Add bindings for QCS9075 SOC based board
Date: Wed, 28 May 2025 17:57:48 +0530
Message-ID: <20250528122753.3623570-2-quic_wasimn@xxxxxxxxxxx>
X-Mailer: git-send-email 2.49.0
In-Reply-To: <20250528122753.3623570-1-quic_wasimn@xxxxxxxxxxx>
References: <20250528122753.3623570-1-quic_wasimn@xxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-QCInternal: smtphost
X-QCInternal: smtphost
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEwNyBTYWx0ZWRfX7QNJbNgqZWti
zLA48iI40KmmX2uvnacD0IamZzAV/KRDXGIswKXOP0vb26vKBcI8JmPpzjTViZiqcMEyvizmQsM
C/7grsGul915CDmAE5KtYIAFVOpWDTT2k8TIid7ERLWIAshh3k5MEgrMTxM3Ow4oJ5IVRazqUCP
H2wPeXOUDJOzl+2RYBdIPIPr8CZonqlls6oBMoFJRtyAMyo3tPmpG5YK3VGaejLsY8IwgaHpoeW
/oV+YezLRkfc1WL9pnRf/0ykbQ73Bng36GJfyY5fT+mVCEmavM/MwudlkvZppSXynv5rCuVQIu/
DC6u1wVHys8lwIhIunvVF6uQ/+DpPQ82HC8o9hh/TNwlwPyk07x6m01Y/uGQjNClDE5+hxjx4PA
bsxRFhiNEDQ5Y0Ta75i3+oDg/f3ILoQd4a8e2knu+avE+wGBp0o76cPx4sZeC3oNJjY4q3if
X-Authority-Analysis: v=2.4 cv=Fes3xI+6 c=1 sm=1 tr=0 ts=68370150 cx=c_pps
a=Ou0eQOY4+eZoSc0qltEV5Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17
a=dt9VzEwgFbYA:10 a=COk6AnOGAAAA:8 a=htuHtO1j-8kfaUu6lmQA:9
a=TjNXssC_j7lpFel5tvFf:22
X-Proofpoint-GUID: dJD2LJdI8JiFmtBAhtbu3Jt6UHx8xCgj
X-Proofpoint-ORIG-GUID: dJD2LJdI8JiFmtBAhtbu3Jt6UHx8xCgj
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
mlxscore=0 malwarescore=0 impostorscore=0 phishscore=0 clxscore=1015
lowpriorityscore=0 bulkscore=0 priorityscore=1501 mlxlogscore=999 spamscore=0
adultscore=0 suspectscore=0 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280107
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
QCS9075 is compatible Industrial-IOT grade variant of SA8775p SOC.
Unlike QCS9100, it doesn't have safety monitoring feature of
Safety-Island(SAIL) subsystem, which affects thermal management.
qcs9075-iq-9075-evk board is based on QCS9075 SOC.
Signed-off-by: Wasim Nazir <quic_wasimn@xxxxxxxxxxx>
---
Documentation/devicetree/bindings/arm/qcom.yaml | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/Documentation/devicetree/bindings/arm/qcom.yaml b/Documentation/devicetree/bindings/arm/qcom.yaml
index 56f78f0f3803..3b2c60af12cd 100644
--- a/Documentation/devicetree/bindings/arm/qcom.yaml
+++ b/Documentation/devicetree/bindings/arm/qcom.yaml
@@ -58,6 +58,7 @@ description: |
qcs8550
qcm2290
qcm6490
+ qcs9075
qcs9100
qdu1000
qrb2210
@@ -961,6 +962,12 @@ properties:
- qcom,sa8775p-ride-r3
- const: qcom,sa8775p
+ - items:
+ - enum:
+ - qcom,qcs9075-iq-9075-evk
+ - const: qcom,qcs9075
+ - const: qcom,sa8775p
+
- items:
- enum:
- qcom,qcs9100-ride
--
2.49.0
Return-Path: <linux-kernel+bounces-665440-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 80E8841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:28:38 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id DBD611BC443F
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:28:43 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id D13A728640D;
Wed, 28 May 2025 12:28:05 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="R1bayZpQ"
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id DB85428368B;
Wed, 28 May 2025 12:28:02 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435284; cv=none; b=Tz01wcV+tNAWG0tEnPTDf7c+qpm9JO4QbCqEL2D9voZzHgQTaatmVnc8rHZfLfN4DdlFW4kcJK4G3GzqvGCD4AkWGluvsuAhwJPU77RZxaAh7Pef0G8R5PyDJAgrZgKPPt2n2UN65zd8ktPpjV/6o3WKzkww1pYxFnl9BXI0gAg=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435284; c=relaxed/simple;
bh=9UZrE7H6vAF+pGUfoHbDFIXFfGUnDWPrsrVbgKOW0T8=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=N0gNqhC0Ivp4Z53ugzG3bOi8ZOh+VhoA3aRDR38fstNkxevsUAZnOW8N4zOyYXAInEu33T4+c+tQEcik5iEW+B3xcweG9CrmHMT8wHATylpQoEZY9Nuz2fiDrM/EkTYbVXWl1JOZqaekM0ofW6YlXCcs+2ELfq6HyAUJFF4dJz4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com; spf=pass smtp.mailfrom=qualcomm.com; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b=R1bayZpQ; arc=none smtp.client-ip=205.220.168.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=qualcomm.com
Received: from pps.filterd (m0279862.ppops.net [127.0.0.1])
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S8cLP4002523;
Wed, 28 May 2025 12:28:00 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
cc:content-transfer-encoding:date:from:in-reply-to:message-id
:mime-version:references:subject:to; s=qcppdkim1; bh=pEjcvN806nZ
MhWg+HLfbExGftOGwvLxvJZxahVTbZh0=; b=R1bayZpQAC2nvMsJbc8UFIWdPzQ
/O8qLGmoUcYlrUST9qh7BbYBzXcyRERHbFYgb/81kXpBRZMwNw5xth4PS7YvRIUM
ddzeBXtRRoSTcoJCfXcyWaz0ueS4jLib+iHjwPu/8vpZEhc1stVtsuiA22cJHC5R
+RE4TGtvkt+jR9vEBm4f99xPD4Dr7J2jXh33+aQh4/FKxLyl15jDROstcSjOgxtY
XqBq6CY2TByFr+G12gRTST9HTTdua589OjGkwvzsIa9zB8bd3SeLiqK8QqZ7I1RQ
Bw7Rxl5ZHeNnBuAVqTHUVnZJJlBYKwvy760hWnOPkZmmhcKUs/g5QsomOGA==
Received: from apblrppmta02.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.18.19])
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46u6vjt7h0-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 12:27:59 +0000 (GMT)
Received: from pps.filterd (APBLRPPMTA02.qualcomm.com [127.0.0.1])
by APBLRPPMTA02.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTP id 54SCRu18011487;
Wed, 28 May 2025 12:27:56 GMT
Received: from pps.reinject (localhost [127.0.0.1])
by APBLRPPMTA02.qualcomm.com (PPS) with ESMTPS id 46u76mxk36-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 12:27:56 +0000
Received: from APBLRPPMTA02.qualcomm.com (APBLRPPMTA02.qualcomm.com [127.0.0.1])
by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 54SCRt7w011462;
Wed, 28 May 2025 12:27:56 GMT
Received: from hu-devc-hyd-u22-c.qualcomm.com (hu-wasimn-hyd.qualcomm.com [10.147.246.180])
by APBLRPPMTA02.qualcomm.com (PPS) with ESMTPS id 54SCRtCH011455
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 12:27:55 +0000
Received: by hu-devc-hyd-u22-c.qualcomm.com (Postfix, from userid 3944840)
id EAF5A5C6; Wed, 28 May 2025 17:57:54 +0530 (+0530)
From: Wasim Nazir <quic_wasimn@xxxxxxxxxxx>
To: Bjorn Andersson <andersson@xxxxxxxxxx>,
Konrad Dybcio <konradybcio@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>
Cc: linux-arm-msm@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, kernel@xxxxxxxxxxx,
kernel@xxxxxxxxxxxxxxxx, Wasim Nazir <quic_wasimn@xxxxxxxxxxx>,
Rakesh Kota <quic_kotarake@xxxxxxxxxxx>,
Sayali Lokhande <quic_sayalil@xxxxxxxxxxx>
Subject: [PATCH v8 4/4] arm64: dts: qcom: Add support for qcs9075 IQ-9075-EVK
Date: Wed, 28 May 2025 17:57:51 +0530
Message-ID: <20250528122753.3623570-5-quic_wasimn@xxxxxxxxxxx>
X-Mailer: git-send-email 2.49.0
In-Reply-To: <20250528122753.3623570-1-quic_wasimn@xxxxxxxxxxx>
References: <20250528122753.3623570-1-quic_wasimn@xxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-QCInternal: smtphost
X-QCInternal: smtphost
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085
X-Authority-Analysis: v=2.4 cv=UOXdHDfy c=1 sm=1 tr=0 ts=6837014f cx=c_pps
a=Ou0eQOY4+eZoSc0qltEV5Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17
a=dt9VzEwgFbYA:10 a=COk6AnOGAAAA:8 a=cGvm-S34xVoSblkgu4kA:9
a=TjNXssC_j7lpFel5tvFf:22
X-Proofpoint-ORIG-GUID: A8-IW5pKaayCcSx1HSdKh5f3QwD3BuhV
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEwOCBTYWx0ZWRfX3RC5bAp4ELDF
hF4gdQy5u2WEjNmqbdEV674iKpCozdSd8byAXAcOdlv9jpd8N2LWkIZW1CiZbEEXs+oQfTQkgPh
d0ph0/BjFdPAXO8c3nUg6y4Rx2zsYIIGbe09ArfaQ9oLa4BtflJVH5XTU0sWhhnrVlDQYxB+1oI
KAhHNILprgaq6pL4KeHlf0Dnce/laC2a29dqd7Sv/LS/NgpUZt9SpeWKJUeL2edtsnd953D6pUI
Cstaf8NtgBkDbRWVFFmVYcmbe/W10OBxMewnEd1IHPuNYHjgTKmnnVVG/SW5EYYJp+Ae9lkRX9j
bVlXeRk6tGvXptr5u4LpsZEd1KnnU56Z2NDY7v/2yaRvYYeQZI1dKpZr3VswmPtMLtS7C45tJEe
dVmABnG74IBFP8tM8BJgDaGN4tl9M6t/ouF5OKtWJmrqtxa1t7czw0j4czDEnFS88Lv5m4rc
X-Proofpoint-GUID: A8-IW5pKaayCcSx1HSdKh5f3QwD3BuhV
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
clxscore=1015 phishscore=0 mlxscore=0 adultscore=0 priorityscore=1501
mlxlogscore=999 bulkscore=0 malwarescore=0 impostorscore=0 spamscore=0
suspectscore=0 lowpriorityscore=0 classifier=spam authscore=0 authtc=n/a
authcc= route=outbound adjust=0 reason=mlx scancount=1
engine=8.19.0-2505160000 definitions=main-2505280108
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Add initial device tree support for IQ-9075-EVK board,
based on Qualcomm's QCS9075 SOC.
Implement basic features like uart/ufs to enable boot to shell.
Co-developed-by: Rakesh Kota <quic_kotarake@xxxxxxxxxxx>
Signed-off-by: Rakesh Kota <quic_kotarake@xxxxxxxxxxx>
Co-developed-by: Sayali Lokhande <quic_sayalil@xxxxxxxxxxx>
Signed-off-by: Sayali Lokhande <quic_sayalil@xxxxxxxxxxx>
Signed-off-by: Wasim Nazir <quic_wasimn@xxxxxxxxxxx>
---
arch/arm64/boot/dts/qcom/Makefile | 1 +
.../boot/dts/qcom/qcs9075-iq-9075-evk.dts | 289 ++++++++++++++++++
2 files changed, 290 insertions(+)
create mode 100644 arch/arm64/boot/dts/qcom/qcs9075-iq-9075-evk.dts
diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
index 669b888b27a1..77501a13d91e 100644
--- a/arch/arm64/boot/dts/qcom/Makefile
+++ b/arch/arm64/boot/dts/qcom/Makefile
@@ -124,6 +124,7 @@ dtb-$(CONFIG_ARCH_QCOM) += qcs6490-rb3gen2-industrial-mezzanine.dtb
dtb-$(CONFIG_ARCH_QCOM) += qcs6490-rb3gen2-vision-mezzanine.dtb
dtb-$(CONFIG_ARCH_QCOM) += qcs8300-ride.dtb
dtb-$(CONFIG_ARCH_QCOM) += qcs8550-aim300-aiot.dtb
+dtb-$(CONFIG_ARCH_QCOM) += qcs9075-iq-9075-evk.dtb
dtb-$(CONFIG_ARCH_QCOM) += qcs9100-ride.dtb
dtb-$(CONFIG_ARCH_QCOM) += qcs9100-ride-r3.dtb
dtb-$(CONFIG_ARCH_QCOM) += qdu1000-idp.dtb
diff --git a/arch/arm64/boot/dts/qcom/qcs9075-iq-9075-evk.dts b/arch/arm64/boot/dts/qcom/qcs9075-iq-9075-evk.dts
new file mode 100644
index 000000000000..f1f725691ba2
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/qcs9075-iq-9075-evk.dts
@@ -0,0 +1,289 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2024-2025, Qualcomm Innovation Center, Inc. All rights reserved.
+ */
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
+
+#include "qcs9075-som.dtsi"
+
+/ {
+ model = "Qualcomm Technologies, Inc. IQ 9075 EVK";
+ compatible = "qcom,qcs9075-iq-9075-evk", "qcom,qcs9075", "qcom,sa8775p";
+
+ aliases {
+ serial0 = &uart10;
+ };
+
+ chosen {
+ stdout-path = "serial0:115200n8";
+ };
+};
+
+&apps_rsc {
+ regulators-0 {
+ compatible = "qcom,pmm8654au-rpmh-regulators";
+ qcom,pmic-id = "a";
+
+ vreg_s4a: smps4 {
+ regulator-name = "vreg_s4a";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1816000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_s5a: smps5 {
+ regulator-name = "vreg_s5a";
+ regulator-min-microvolt = <1850000>;
+ regulator-max-microvolt = <1996000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_s9a: smps9 {
+ regulator-name = "vreg_s9a";
+ regulator-min-microvolt = <535000>;
+ regulator-max-microvolt = <1120000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l4a: ldo4 {
+ regulator-name = "vreg_l4a";
+ regulator-min-microvolt = <788000>;
+ regulator-max-microvolt = <1050000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l5a: ldo5 {
+ regulator-name = "vreg_l5a";
+ regulator-min-microvolt = <870000>;
+ regulator-max-microvolt = <950000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l6a: ldo6 {
+ regulator-name = "vreg_l6a";
+ regulator-min-microvolt = <870000>;
+ regulator-max-microvolt = <970000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l7a: ldo7 {
+ regulator-name = "vreg_l7a";
+ regulator-min-microvolt = <720000>;
+ regulator-max-microvolt = <950000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l8a: ldo8 {
+ regulator-name = "vreg_l8a";
+ regulator-min-microvolt = <2504000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l9a: ldo9 {
+ regulator-name = "vreg_l9a";
+ regulator-min-microvolt = <2970000>;
+ regulator-max-microvolt = <3544000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+ };
+
+ regulators-1 {
+ compatible = "qcom,pmm8654au-rpmh-regulators";
+ qcom,pmic-id = "c";
+
+ vreg_l1c: ldo1 {
+ regulator-name = "vreg_l1c";
+ regulator-min-microvolt = <1140000>;
+ regulator-max-microvolt = <1260000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l2c: ldo2 {
+ regulator-name = "vreg_l2c";
+ regulator-min-microvolt = <900000>;
+ regulator-max-microvolt = <1100000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l3c: ldo3 {
+ regulator-name = "vreg_l3c";
+ regulator-min-microvolt = <1100000>;
+ regulator-max-microvolt = <1300000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l4c: ldo4 {
+ regulator-name = "vreg_l4c";
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1200000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l5c: ldo5 {
+ regulator-name = "vreg_l5c";
+ regulator-min-microvolt = <1100000>;
+ regulator-max-microvolt = <1300000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l6c: ldo6 {
+ regulator-name = "vreg_l6c";
+ regulator-min-microvolt = <1620000>;
+ regulator-max-microvolt = <1980000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l7c: ldo7 {
+ regulator-name = "vreg_l7c";
+ regulator-min-microvolt = <1620000>;
+ regulator-max-microvolt = <2000000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l8c: ldo8 {
+ regulator-name = "vreg_l8c";
+ regulator-min-microvolt = <2400000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l9c: ldo9 {
+ regulator-name = "vreg_l9c";
+ regulator-min-microvolt = <1650000>;
+ regulator-max-microvolt = <2700000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+ };
+
+ regulators-2 {
+ compatible = "qcom,pmm8654au-rpmh-regulators";
+ qcom,pmic-id = "e";
+
+ vreg_s4e: smps4 {
+ regulator-name = "vreg_s4e";
+ regulator-min-microvolt = <970000>;
+ regulator-max-microvolt = <1520000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_s7e: smps7 {
+ regulator-name = "vreg_s7e";
+ regulator-min-microvolt = <1010000>;
+ regulator-max-microvolt = <1170000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_s9e: smps9 {
+ regulator-name = "vreg_s9e";
+ regulator-min-microvolt = <300000>;
+ regulator-max-microvolt = <570000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l6e: ldo6 {
+ regulator-name = "vreg_l6e";
+ regulator-min-microvolt = <1280000>;
+ regulator-max-microvolt = <1450000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l8e: ldo8 {
+ regulator-name = "vreg_l8e";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1950000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-allow-set-load;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
+ RPMH_REGULATOR_MODE_HPM>;
+ };
+ };
+};
+
+&qupv3_id_1 {
+ status = "okay";
+};
+
+&sleep_clk {
+ clock-frequency = <32768>;
+};
+
+&uart10 {
+ compatible = "qcom,geni-debug-uart";
+ pinctrl-0 = <&qup_uart10_default>;
+ pinctrl-names = "default";
+
+ status = "okay";
+};
+
+&ufs_mem_hc {
+ reset-gpios = <&tlmm 149 GPIO_ACTIVE_LOW>;
+ vcc-supply = <&vreg_l8a>;
+ vcc-max-microamp = <1100000>;
+ vccq-supply = <&vreg_l4c>;
+ vccq-max-microamp = <1200000>;
+
+ status = "okay";
+};
+
+&ufs_mem_phy {
+ vdda-phy-supply = <&vreg_l4a>;
+ vdda-pll-supply = <&vreg_l1c>;
+
+ status = "okay";
+};
+
+&xo_board_clk {
+ clock-frequency = <38400000>;
+};
--
2.49.0
Return-Path: <linux-kernel+bounces-665442-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 5896541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:28:43 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id D4AC34E2C8C
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:28:30 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id E33EB286416;
Wed, 28 May 2025 12:28:05 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="mWiQLr72"
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5E15F284B50;
Wed, 28 May 2025 12:28:03 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435284; cv=none; b=umKVDim7FqNcKIIfVMyVnzUZ231qKnioNrFazGlWBwEtNLH0k5NvUBglx+62dwstmXXodZtAUWIBEQclmiv+jcQDiV9qeodXr8Sw2Wq/KCQ160T+tPF5uGJ4ipLYeK1Yxok7qhakcyGPvaKbB5yTogWNRK04el7ewAC4zsEQEgM=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435284; c=relaxed/simple;
bh=+nnAW901u/7kim1WteT+SbToRv8MGG7Jlhk2AneGY0w=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=OHWwQXdKkQoD5IaEX8rpyz0Eox8zce1YGteCtGJNlfY8rFvrv5e+Z+ldXd8bWtwRI2iDqedvBGF/hzGw94mMD+ng6G3rZE7cClNarqSAw4fRn/hhM6C3j1DgS1/6WaD6dRwtc/wVfnuZG7qdKNarH1Xu7K0bCkG/WRzcEtSO4Ug=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com; spf=pass smtp.mailfrom=qualcomm.com; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b=mWiQLr72; arc=none smtp.client-ip=205.220.168.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=qualcomm.com
Received: from pps.filterd (m0279863.ppops.net [127.0.0.1])
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S5nIRX028909;
Wed, 28 May 2025 12:28:00 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
cc:content-transfer-encoding:date:from:in-reply-to:message-id
:mime-version:references:subject:to; s=qcppdkim1; bh=rPTtssiBb0c
T02GWRXrKHcoWtGBOpMfNNrIk01XIVOg=; b=mWiQLr72FDK4/0jenvVqDPectut
X/d5Bj+1V3W10+W3TMDujvQjJep0ohoS7bPOHDhB+2gYTcCFEvJ9QP65QYKT/RCp
dbFaXfjmVZS4Rf4RY8vun2gQxaQphR3q2yo961OgYqUsj2ZeFMjV0lBYyQJkXKGb
k2k0Z/YwtgsYQJY+uLpowm5eTVAO5/1gEAD+n5kDmZuL+gHtdWIYZjS5CXJuqYfb
M9vGJu8ydn1nmaus3Qlm3nzFQFX0mNmvOpGzNqHVdundoCrz66gMpYtHCu/w9TlQ
k03mj9OVn+zUhzvbHMBy5d4wW3vAKRohn4ZhsCf4jF5CYyDlo7vWPcrYkcA==
Received: from apblrppmta02.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.18.19])
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46whuf2j22-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 12:27:59 +0000 (GMT)
Received: from pps.filterd (APBLRPPMTA02.qualcomm.com [127.0.0.1])
by APBLRPPMTA02.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTP id 54SCRuPa011486;
Wed, 28 May 2025 12:27:56 GMT
Received: from pps.reinject (localhost [127.0.0.1])
by APBLRPPMTA02.qualcomm.com (PPS) with ESMTPS id 46u76mxk33-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 12:27:56 +0000
Received: from APBLRPPMTA02.qualcomm.com (APBLRPPMTA02.qualcomm.com [127.0.0.1])
by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 54SCRt6u011461;
Wed, 28 May 2025 12:27:56 GMT
Received: from hu-devc-hyd-u22-c.qualcomm.com (hu-wasimn-hyd.qualcomm.com [10.147.246.180])
by APBLRPPMTA02.qualcomm.com (PPS) with ESMTPS id 54SCRtfo011453
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 12:27:55 +0000
Received: by hu-devc-hyd-u22-c.qualcomm.com (Postfix, from userid 3944840)
id E30B25AF; Wed, 28 May 2025 17:57:54 +0530 (+0530)
From: Wasim Nazir <quic_wasimn@xxxxxxxxxxx>
To: Bjorn Andersson <andersson@xxxxxxxxxx>,
Konrad Dybcio <konradybcio@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>
Cc: linux-arm-msm@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, kernel@xxxxxxxxxxx,
kernel@xxxxxxxxxxxxxxxx, Pratyush Brahma <quic_pbrahma@xxxxxxxxxxx>,
Prakash Gupta <quic_guptap@xxxxxxxxxxx>,
Wasim Nazir <quic_wasimn@xxxxxxxxxxx>
Subject: [PATCH v8 2/4] arm64: dts: qcom: iq9: Introduce new memory map for qcs9100/qcs9075
Date: Wed, 28 May 2025 17:57:49 +0530
Message-ID: <20250528122753.3623570-3-quic_wasimn@xxxxxxxxxxx>
X-Mailer: git-send-email 2.49.0
In-Reply-To: <20250528122753.3623570-1-quic_wasimn@xxxxxxxxxxx>
References: <20250528122753.3623570-1-quic_wasimn@xxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-QCInternal: smtphost
X-QCInternal: smtphost
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085
X-Authority-Analysis: v=2.4 cv=OslPyz/t c=1 sm=1 tr=0 ts=68370150 cx=c_pps
a=Ou0eQOY4+eZoSc0qltEV5Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17
a=dt9VzEwgFbYA:10 a=COk6AnOGAAAA:8 a=6-hPHUfSg4vTJukFU5oA:9
a=TjNXssC_j7lpFel5tvFf:22
X-Proofpoint-ORIG-GUID: TWOpRRSqVYZtk-nxZ8QqZlXbYVUgSofJ
X-Proofpoint-GUID: TWOpRRSqVYZtk-nxZ8QqZlXbYVUgSofJ
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEwNyBTYWx0ZWRfX6D/QbZn02b6v
AGh99aFQ/qS9Rh+ebSdCOr0Eh096iHmoWwkEmfSB27/AANf/3tVhee3JYKtllwYfoVQnf4t6hrp
6sa6TtT0eO9lYk2Hw+TItzKqfH/EHQih1cXb6xZfYZAsDC53YoMwyFuLnfhe8EqNIZLtR5YNl2u
jiWIDdUS45wiiRt6OtmHoyBB/5YVh7RHUnyBBu1cg8xk8lPaq+seg/3dc3Ib7A1fopcolWDxTML
rxjsdyRgTypOqEbUFoW7qeLY4hYaZwKnAEV0GBIpg8doylaJyIsDANMWsUH7B3S5WMs6PrbpFCx
RiWcEZy4MKauqxgqlfD3yn1Bt/yrABX+j3ApN/WSaGUkxzC5Q2WcRoIZJ+e0uQ5tyR9t5yTzTZg
r9uiC66qnc/8eT3oUFtYBhg45GkZfcG71cm7wkpaognsvUQ3thhEljdCkrN1d+tpkyVUb+xa
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
impostorscore=0 phishscore=0 mlxlogscore=999 adultscore=0 malwarescore=0
bulkscore=0 priorityscore=1501 clxscore=1015 mlxscore=0 lowpriorityscore=0
spamscore=0 suspectscore=0 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280107
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Pratyush Brahma <quic_pbrahma@xxxxxxxxxxx>
SA8775P has a memory map which caters to the auto specific requirements.
QCS9100 & QCS9075 are its IOT variants (with marketing name as IQ9) which
inherit the memory map of SA8775P require a slightly different memory
map as compared to SA8775P auto parts.
This new memory map is applicable for all the IoT boards which inherit
the initial SA8775P memory map. This is not applicable for non-IoT
boards.
Some new carveouts (viz. gunyah_md and a few pil dtb carveouts) have been
introduced as part of firmware updates for IoT. The size and base address
have been updated for video PIL carveout compared to SA8775P since it is
being brought up for the first time on IoT boards. The base addresses
of the rest of the PIL carveouts have been updated to accommodate the
change in size of video since PIL regions are relocatable and their
functionality is not impacted due to this change. The size of camera
pil has also been increased without breaking any feature.
The size of trusted apps carveout has also been reduced since it is
sufficient to meet IoT requirements. Also, audio_mdf_mem & tz_ffi_mem
carveout and its corresponding scm reference has been removed as these
are not required for IoT parts.
Incorporate these changes in the updated memory map.
Signed-off-by: Pratyush Brahma <quic_pbrahma@xxxxxxxxxxx>
Signed-off-by: Prakash Gupta <quic_guptap@xxxxxxxxxxx>
Signed-off-by: Wasim Nazir <quic_wasimn@xxxxxxxxxxx>
---
.../boot/dts/qcom/iq9-reserved-memory.dtsi | 113 ++++++++++++++++++
1 file changed, 113 insertions(+)
create mode 100644 arch/arm64/boot/dts/qcom/iq9-reserved-memory.dtsi
diff --git a/arch/arm64/boot/dts/qcom/iq9-reserved-memory.dtsi b/arch/arm64/boot/dts/qcom/iq9-reserved-memory.dtsi
new file mode 100644
index 000000000000..ff2600eb5e3d
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/iq9-reserved-memory.dtsi
@@ -0,0 +1,113 @@
+// SPDX-License-Identifier: BSD-3-Clause
+
+/*
+ * Copyright (c) 2025 Qualcomm Innovation Center, Inc. All rights reserved.
+ */
+
+/delete-node/ &pil_camera_mem;
+/delete-node/ &pil_adsp_mem;
+/delete-node/ &pil_gdsp0_mem;
+/delete-node/ &pil_gdsp1_mem;
+/delete-node/ &pil_cdsp0_mem;
+/delete-node/ &pil_gpu_mem;
+/delete-node/ &pil_cdsp1_mem;
+/delete-node/ &pil_cvp_mem;
+/delete-node/ &pil_video_mem;
+/delete-node/ &audio_mdf_mem;
+/delete-node/ &trusted_apps_mem;
+/delete-node/ &hyptz_reserved_mem;
+/delete-node/ &tz_ffi_mem;
+
+/ {
+ reserved-memory {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ ranges;
+
+ gunyah_md_mem: gunyah-md@91a80000 {
+ reg = <0x0 0x91a80000 0x0 0x80000>;
+ no-map;
+ };
+
+ pil_camera_mem: pil-camera@95200000 {
+ reg = <0x0 0x95200000 0x0 0x700000>;
+ no-map;
+ };
+
+ pil_adsp_mem: pil-adsp@95900000 {
+ reg = <0x0 0x95900000 0x0 0x1e00000>;
+ no-map;
+ };
+
+ q6_adsp_dtb_mem: q6-adsp-dtb@97700000 {
+ reg = <0x0 0x97700000 0x0 0x80000>;
+ no-map;
+ };
+
+ q6_gdsp0_dtb_mem: q6-gdsp0-dtb@97780000 {
+ reg = <0x0 0x97780000 0x0 0x80000>;
+ no-map;
+ };
+
+ pil_gdsp0_mem: pil-gdsp0@97800000 {
+ reg = <0x0 0x97800000 0x0 0x1e00000>;
+ no-map;
+ };
+
+ pil_gdsp1_mem: pil-gdsp1@99600000 {
+ reg = <0x0 0x99600000 0x0 0x1e00000>;
+ no-map;
+ };
+
+ q6_gdsp1_dtb_mem: q6-gdsp1-dtb@9b400000 {
+ reg = <0x0 0x9b400000 0x0 0x80000>;
+ no-map;
+ };
+
+ q6_cdsp0_dtb_mem: q6-cdsp0-dtb@9b480000 {
+ reg = <0x0 0x9b480000 0x0 0x80000>;
+ no-map;
+ };
+
+ pil_cdsp0_mem: pil-cdsp0@9b500000 {
+ reg = <0x0 0x9b500000 0x0 0x1e00000>;
+ no-map;
+ };
+
+ pil_gpu_mem: pil-gpu@9d300000 {
+ reg = <0x0 0x9d300000 0x0 0x2000>;
+ no-map;
+ };
+
+ q6_cdsp1_dtb_mem: q6-cdsp1-dtb@9d380000 {
+ reg = <0x0 0x9d380000 0x0 0x80000>;
+ no-map;
+ };
+
+ pil_cdsp1_mem: pil-cdsp1@9d400000 {
+ reg = <0x0 0x9d400000 0x0 0x1e00000>;
+ no-map;
+ };
+
+ pil_cvp_mem: pil-cvp@9f200000 {
+ reg = <0x0 0x9f200000 0x0 0x700000>;
+ no-map;
+ };
+
+ pil_video_mem: pil-video@9f900000 {
+ reg = <0x0 0x9f900000 0x0 0x1000000>;
+ no-map;
+ };
+
+ trusted_apps_mem: trusted-apps@d1900000 {
+ reg = <0x0 0xd1900000 0x0 0x1c00000>;
+ no-map;
+ };
+ };
+
+ firmware {
+ scm {
+ /delete-property/ memory-region;
+ };
+ };
+};
--
2.49.0
Return-Path: <linux-kernel+bounces-665443-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 52A7741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:29:01 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 8F5C43B454F
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:28:20 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C236428689C;
Wed, 28 May 2025 12:28:06 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="LEMILHrV"
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4FA4F284B42;
Wed, 28 May 2025 12:28:03 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435285; cv=none; b=Sq1vtTbFZ1qi+Okb+2QmCJkgpLwzpm34zoLAdSudGTiQfwQcCj+1PN+lkCKPd5JJSBuSXtZADFd1wz2r4vql08rE0CPeYEjYZB0N7o/HJI6uDIi/2pFnViBDCyZMXsjSu81EeydlOfAb7pMtn7EZGqe0sWzPCmQilary0F/NRrU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435285; c=relaxed/simple;
bh=1SccqE+9BX0fANM+exjNH/3hOFGHMYAaS5gFivtJWGk=;
h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=BBr/87yJQA0grzt5KBuGERXhNMuuB9BUnM+xJFY8JvxFyVcf0msrgc/ooa2yJRwN8POLjsZ9VY69H+SDd0LkmAZ7CeceENy4378Q7vChiWCjVUNYcORbSym73eARAcCM8jdiccQFCy/YFv/NGFI7x284aVHjWjM7u6Cd9doLNtc=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com; spf=pass smtp.mailfrom=qualcomm.com; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b=LEMILHrV; arc=none smtp.client-ip=205.220.168.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=qualcomm.com
Received: from pps.filterd (m0279862.ppops.net [127.0.0.1])
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SBBXxL022698;
Wed, 28 May 2025 12:28:00 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
cc:content-transfer-encoding:content-type:date:from:message-id
:mime-version:subject:to; s=qcppdkim1; bh=+JENbwl/gu1n814nWNwrxR
lRfAq3RS5W+s34BCA5xRw=; b=LEMILHrVE8nbRALbSDjlq/g99mVnZmS4EcWOAE
z9gqOrNKheU05uYxVf1E6uz5tUbwy3NUxe1p5OTR2stLPumUUtVCZG6REBulIRih
KT9sXB72TZ3yokpKgcwFWbRz1Kn13HCpiHrFZlWdQocFLP2t70YGvlAJXcPNH6lv
AjTm8R0VUS9MGhkgYYGV45HL/ogdC+Ak9RVZvnPL6wOquWEV9T8aE4NLm3mXBTLs
nSGUYTwE2LJg8ysZDgIe+Ql/+HujJOUaFElhT+RNtpwCWyGP4QpwlhV763HsGBIK
lZSFOoqm0+iJgkOQ+QhNQOB3h46v4+L4OquC1GD9cgjUzXbg==
Received: from apblrppmta02.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.18.19])
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46u6vjt7gy-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 12:27:59 +0000 (GMT)
Received: from pps.filterd (APBLRPPMTA02.qualcomm.com [127.0.0.1])
by APBLRPPMTA02.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTP id 54SCRue0011485;
Wed, 28 May 2025 12:27:56 GMT
Received: from pps.reinject (localhost [127.0.0.1])
by APBLRPPMTA02.qualcomm.com (PPS) with ESMTPS id 46u76mxk34-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 12:27:56 +0000
Received: from APBLRPPMTA02.qualcomm.com (APBLRPPMTA02.qualcomm.com [127.0.0.1])
by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 54SCRtQW011460;
Wed, 28 May 2025 12:27:56 GMT
Received: from hu-devc-hyd-u22-c.qualcomm.com (hu-wasimn-hyd.qualcomm.com [10.147.246.180])
by APBLRPPMTA02.qualcomm.com (PPS) with ESMTPS id 54SCRtRM011454
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 12:27:55 +0000
Received: by hu-devc-hyd-u22-c.qualcomm.com (Postfix, from userid 3944840)
id DD7485A7; Wed, 28 May 2025 17:57:54 +0530 (+0530)
From: Wasim Nazir <quic_wasimn@xxxxxxxxxxx>
To: Bjorn Andersson <andersson@xxxxxxxxxx>,
Konrad Dybcio <konradybcio@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>
Cc: linux-arm-msm@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, kernel@xxxxxxxxxxx,
kernel@xxxxxxxxxxxxxxxx, Wasim Nazir <quic_wasimn@xxxxxxxxxxx>
Subject: [PATCH v8 0/4] qcom: Add support for IQ-9075-evk board
Date: Wed, 28 May 2025 17:57:47 +0530
Message-ID: <20250528122753.3623570-1-quic_wasimn@xxxxxxxxxxx>
X-Mailer: git-send-email 2.49.0
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-QCInternal: smtphost
X-QCInternal: smtphost
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085
X-Authority-Analysis: v=2.4 cv=UOXdHDfy c=1 sm=1 tr=0 ts=68370150 cx=c_pps
a=Ou0eQOY4+eZoSc0qltEV5Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17
a=IkcTkHD0fZMA:10 a=dt9VzEwgFbYA:10 a=VwQbUJbxAAAA:8 a=COk6AnOGAAAA:8
a=u6Jdqvu1gAsBJA_3vmsA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10
a=TjNXssC_j7lpFel5tvFf:22
X-Proofpoint-ORIG-GUID: JxI-zCkmZGXduQcCguaCMgC4O1INe56G
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEwOCBTYWx0ZWRfX8pg9u0HkDQGa
cBDmFtUzck7B4i05eG1LD266gOlXMNLYgihuV1olfkwxUHMK+xukZSJbhiAcyO9kQmakifHvqZl
7dBPzOY2iE8XKupI1otGiZMOjdWR7ypQ2+wJI4zEjeTEM5BXurbdJLTPBjS4znZJyJFbGw9A3I2
PAjfhU4Y2SeaYNpcaNDN47SR+pfgVG3QQUYBPbu/H3A79hpitFkC5nrO5ojnAh3sbPL0K3vqNbF
Lwv5n1ZEp8UKzGTVDG9BWZ4xhKpau6/aluDDGy0Oa1Tx2E5jLGlEAII48xzH6CYdiJ7VPlh6x4G
dOSIWEJbgs3ie5YvcwJvJECyF6g2381+sadgEDLJUbXm9dpLBUgXTZKpNr0kcMI/1geOOFJso+O
Gc1YjA39BQw1YdcUa+taLCxDk/HunHzFc9rpNjBOhOVego7GBqG59mJNvroiI3YFl34q4KO5
X-Proofpoint-GUID: JxI-zCkmZGXduQcCguaCMgC4O1INe56G
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
clxscore=1015 phishscore=0 mlxscore=0 adultscore=0 priorityscore=1501
mlxlogscore=999 bulkscore=0 malwarescore=0 impostorscore=0 spamscore=0
suspectscore=0 lowpriorityscore=0 classifier=spam authscore=0 authtc=n/a
authcc= route=outbound adjust=0 reason=mlx scancount=1
engine=8.19.0-2505160000 definitions=main-2505280108
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
This series:
Add support for Qualcomm's iq9-evk board using QCS9075 SOC.
QCS9075 is compatible IoT-industrial grade variant of SA8775p SOC.
Unlike QCS9100, it doesn't have safety monitoring feature of
Safety-Island(SAIL) subsystem, which affects thermal management.
In QCS9100 SOC, the safety subsystem monitors all thermal sensors and
does corrective action for each subsystem based on sensor violation
to comply safety standards. But as QCS9075 is non-safe SOC it requires
conventional thermal mitigation for thermal management.
In this series thermal mitigation changes are not included as it needs
more discussion whether to include the change in DT or in drivers.
Below are detailed informations on IQ-9075-evk HW:
------------------------------------------------------
QCS9075 SOM is stacked on top of IQ-9075-evk board.
On top of IQ-9075-evk board additional mezzanine boards can be stacked
in future.
IQ-9075-evk is single board supporting these peripherals:
- Storage: 2 Ã? 128 GB UFS, micro-SD card, EEPROMs for MACs,
eMMC on mezzanine card
- Audio/Video, Camera & Display ports
- Connectivity: RJ45 2.5GbE, WLAN/Bluetooth, CAN/CAN-FD
- Sensors: IMU
- PCIe ports
- USB & UART ports
Currently basic features are enabled to support 'boot to shell'.
---
Changelog:
v8:
- Squash UFS support[1] into initial board support patch.
- Remove uart10 pinctrl settings from board, it is moved to sa8775p.dtsi.
- Arrange ufs nodes in alphabetical order.
- v7-link: [2]
[1] https://lore.kernel.org/all/20250513084309.10275-1-quic_sayalil@xxxxxxxxxxx/
[2] https://lore.kernel.org/all/20250521140807.3837019-1-quic_wasimn@xxxxxxxxxxx/
Pratyush Brahma (1):
arm64: dts: qcom: iq9: Introduce new memory map for qcs9100/qcs9075
Wasim Nazir (3):
dt-bindings: arm: qcom: Add bindings for QCS9075 SOC based board
arm64: dts: qcom: qcs9075: Introduce QCS9075 SOM
arm64: dts: qcom: Add support for qcs9075 IQ-9075-EVK
.../devicetree/bindings/arm/qcom.yaml | 7 +
arch/arm64/boot/dts/qcom/Makefile | 1 +
.../boot/dts/qcom/iq9-reserved-memory.dtsi | 113 +++++++
.../boot/dts/qcom/qcs9075-iq-9075-evk.dts | 289 ++++++++++++++++++
arch/arm64/boot/dts/qcom/qcs9075-som.dtsi | 10 +
5 files changed, 420 insertions(+)
create mode 100644 arch/arm64/boot/dts/qcom/iq9-reserved-memory.dtsi
create mode 100644 arch/arm64/boot/dts/qcom/qcs9075-iq-9075-evk.dts
create mode 100644 arch/arm64/boot/dts/qcom/qcs9075-som.dtsi
base-commit: 3be1a7a31fbda82f3604b6c31e4f390110de1b46
--
2.49.0
Return-Path: <linux-kernel+bounces-665444-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E40B041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:29:39 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id D25034E4441
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:29:24 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id A8F0B2853F1;
Wed, 28 May 2025 12:29:17 +0000 (UTC)
Received: from foss.arm.com (foss.arm.com [217.140.110.172])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 68FE022127D;
Wed, 28 May 2025 12:29:14 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435357; cv=none; b=Rjy9N4IpWOrprdjGiq1qYR4fJmy7iaqthhSdTuH8iLTHvD1soZZ4+kB+YGRUEndESB7rBM58jIbR6IU8E1zjPuxMXrhnRpgLYS0OG3ni8XUKx2xGvWs89Lpf3GqMmWap0veUVgDX1iwdntPYFUHBdyCBv7jB5aa1C9Xvgi14RjY=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435357; c=relaxed/simple;
bh=F4PwxO+KLYTadT4yYpfoynzp5PQBcFtuaCh/vpB7z+o=;
h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=o8cUO12gz6TH0kwBsjhI77iUjFC50M0Z07ruuWoZpj4okMPyVYo5UiTdMwmT6bUTTNVf1RkMvbzksHrZyQbLQjTGUYh//Waet6BLsO1vivcfIerFTclRGhx5iJlNg9RxHv+n2jes9egB8tcrq/A4Bugu1r4o4yORID6JNEVRALY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 280A11A2D;
Wed, 28 May 2025 05:28:57 -0700 (PDT)
Received: from donnerap.manchester.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14])
by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id ADD023F673;
Wed, 28 May 2025 05:29:10 -0700 (PDT)
Date: Wed, 28 May 2025 13:29:02 +0100
From: Andre Przywara <andre.przywara@xxxxxxx>
To: Uwe =?UTF-8?B?S2xlaW5lLUvDtm5pZw==?= <ukleinek@xxxxxxxxxx>
Cc: =?UTF-8?B?0JDQu9C10LrRgdCw0L3QtNGAINCo0YPQsdC40L0=?=
<privatesub2@xxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx, Brandon Cheo Fusi
<fusibrandon13@xxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>, Krzysztof
Kozlowski <krzk+dt@xxxxxxxxxx>, Conor Dooley <conor+dt@xxxxxxxxxx>, Chen-Yu
Tsai <wens@xxxxxxxx>, Jernej Skrabec <jernej.skrabec@xxxxxxxxx>, Samuel
Holland <samuel@xxxxxxxxxxxx>, Paul Walmsley <paul.walmsley@xxxxxxxxxx>,
Palmer Dabbelt <palmer@xxxxxxxxxxx>, Albert Ou <aou@xxxxxxxxxxxxxxxxx>,
Alexandre Ghiti <alex@xxxxxxxx>, Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>,
linux-pwm@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-sunxi@xxxxxxxxxxxxxxx,
linux-riscv@xxxxxxxxxxxxxxxxxxx
Subject: Re: [PATCH v12 2/3] pwm: Add Allwinner's D1/T113-S3/R329 SoCs PWM
support
Message-ID: <20250528132902.70f634cd@xxxxxxxxxxxxxxxxxxxxxxxxxxx>
In-Reply-To: <hetih6ul7hdj3kflhy2s2zkkh3r7pcupgwde3xnwmjzs6cujp3@vcw4pde76bdb>
References: <20250427142500.151925-1-privatesub2@xxxxxxxxx>
<20250427142500.151925-3-privatesub2@xxxxxxxxx>
<20250512233944.06bc1cb7@xxxxxxxxxxxx>
<CAF4idN=Kwp8bDYVyjM52eUwVEEZcPM9YyK9KiqUzyf8Dm=cXTQ@xxxxxxxxxxxxxx>
<hetih6ul7hdj3kflhy2s2zkkh3r7pcupgwde3xnwmjzs6cujp3@vcw4pde76bdb>
Organization: ARM
X-Mailer: Claws Mail 3.18.0 (GTK+ 2.24.32; aarch64-unknown-linux-gnu)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 13:08:40 +0200
Uwe Kleine-K=C3=B6nig <ukleinek@xxxxxxxxxx> wrote:
Hi Uwe,
> On Sat, May 24, 2025 at 12:07:28PM +0300, =D0=90=D0=BB=D0=B5=D0=BA=D1=81=
=D0=B0=D0=BD=D0=B4=D1=80 =D0=A8=D1=83=D0=B1=D0=B8=D0=BD wrote:
> > =D0=B2=D1=82, 13 =D0=BC=D0=B0=D1=8F 2025=E2=80=AF=D0=B3. =D0=B2 01:39, =
Andre Przywara <andre.przywara@xxxxxxx>: =20
> > >
> > > On Sun, 27 Apr 2025 17:24:54 +0300
> > > Aleksandr Shubin <privatesub2@xxxxxxxxx> wrote: =20
> > > > + */
> > > > + use_bus_clk =3D false;
> > > > + val =3D mul_u64_u64_div_u64(state->period, hosc_rate,=
NSEC_PER_SEC);
> > > > + /*
> > > > + * If the calculated value is =E2=89=A4 1, the period=
is too short
> > > > + * for proper PWM operation
> > > > + */
> > > > + if (val <=3D 1) { =20
> > >
> > > So if I get the code correctly, it prefers HOSC over APB? Is that
> > > really the best way? Shouldn't it be the other way around: we use the
> > > faster clock, since this will not limit the sibling channel?
> > >
> > > And another thing to consider are rounding errors due to integer
> > > division: certain period rates might be better achievable with one or
> > > the other source clock: 3 MHz works best as 24MHz/8, 3.125MHz as
> > > 100MHz/32.
> > > So shall we calculate the values and compare the errors instead?
> > > Oh, and also we need to consider bypassing, I feel like this should be
> > > checked first.
> > >
> > > In any case I think there should be a comment describing the strategy
> > > and give some rationale, I think. =20
> >=20
> > I like the idea of comparing the quantization error for each clock sour=
ce
> > (i.e. computing the actual period for both APB and HOSC and choosing
> > whichever is closer to the requested period).
> > I can try to implement that error-minimization approach in the next
> > series of patches and add a comment explaining the strategy. =20
>=20
> Consumers have different needs. Some might prefer a better match for
> period, but in my experience most would go for a fine-grained selection
> of duty_cycle, so prefering the faster clock sounds sane.
>=20
> I don't say minimizing the error is wrong, but if it's unclear that
> this matches what a consumer wants I object to make the procedure to
> select the hardware settings considerably more complicated and run-time
> intensive.
Yes, I agree. There seems to be another use case here, which is to provide
clocks on output pins. The PWM IP has a bypass switch (per channel, after
the divider), and this feature is already required to supply the
"internal" (co-packaged) Ethernet PHY on the Allwinner H616 with its clock.
With the two possible input clocks and those pre-dividers there is actually
quite a number of possible frequencies to deliver on output pins.
Since we need some algorithm to decide when we need to use the bypass
mode, should we check for that if the duty cycle is 50%, to see if we can
reach the frequency with just the pre-dividers?
Chances are we need this anyway, since for instance the 24MHz required for
the PHY cannot be achieved otherwise.
> > > > +static int sun20i_pwm_probe(struct platform_device *pdev)
> > > > +{
> > > > + struct pwm_chip *chip;
> > > > + struct sun20i_pwm_chip *sun20i_chip;
> > > > + struct clk *clk_bus;
> > > > + struct reset_control *rst;
> > > > + u32 npwm;
> > > > + int ret;
> > > > +
> > > > + ret =3D of_property_read_u32(pdev->dev.of_node, "allwinner,np=
wms", &npwm);
> > > > + if (ret < 0)
> > > > + npwm =3D 8; /* Default value */
> > > > +
> > > > + if (npwm > 16) {
> > > > + dev_info(&pdev->dev, "Limiting number of PWM lines fr=
om %u to 16", npwm); =20
> > >
> > > I don't think we should proceed if the firmware information is clearly
> > > wrong. Just bail out with -EINVAL or so here, so that gets fixed in t=
he
> > > DT. =20
>=20
> To me it's not obvious that the "firmware information is clearly wrong".
> Maybe the next Allwinner SoC will have 24 outputs and the problem is
> only that this driver isn't prepared to cope for that number of outputs?
But then it would be an error, regardless?
The MMIO register frame of this IP here has a hard limit on 16 channels,
both by the bit assignments in each register (2 bits per channel in a
32-bit register), but also by the layout of the registers (max 8
registers, each for a pair of 2 PWM channels). So anything with more than
16 channels cannot be compatible with what this driver supports.
So as this driver here stands right now, more than 16 channels is an
error, simple as that. If we extend the driver later on, to cover more
advanced IP, we would naturally amend this check, of course.
> If that really happens it's arguable if it's better to refuse completely
> or just cope for the 16 outputs that the driver is able to. IMHO it's
> better to continue because a partially workable pwmchip is better than
> no chip at all. But I'd upgrade the message to dev_warn().
I don't understand why we should continue. If the firmware information
(DT) is wrong, we should make this clear, to force people to fix
that, instead of somehow papering over it.
But it's really an academic discussion, I don't expect anyone to put more
than 16 channels in the DT. It's in the per-SoC .dtsi anyway, so nothing
that board DT authors would touch.
> > > > + npwm =3D 16;
> > > > + }
> > > > +
> > > > + chip =3D devm_pwmchip_alloc(&pdev->dev, npwm, sizeof(*sun20i_=
chip));
> > > > + if (IS_ERR(chip))
> > > > + return PTR_ERR(chip);
> > > > + sun20i_chip =3D to_sun20i_pwm_chip(chip);
> > > > +
> > > > + sun20i_chip->base =3D devm_platform_ioremap_resource(pdev, 0);
> > > > + if (IS_ERR(sun20i_chip->base))
> > > > + return PTR_ERR(sun20i_chip->base);
> > > > +
> > > > + clk_bus =3D devm_clk_get_enabled(&pdev->dev, "bus");
> > > > + if (IS_ERR(clk_bus))
> > > > + return dev_err_probe(&pdev->dev, PTR_ERR(clk_bus),
> > > > + "Failed to get bus clock\n");
> > > > +
> > > > + sun20i_chip->clk_hosc =3D devm_clk_get_enabled(&pdev->dev, "h=
osc");
> > > > + if (IS_ERR(sun20i_chip->clk_hosc))
> > > > + return dev_err_probe(&pdev->dev, PTR_ERR(sun20i_chip-=
>clk_hosc),
> > > > + "Failed to get hosc clock\n");
> > > > +
> > > > + ret =3D devm_clk_rate_exclusive_get(&pdev->dev, sun20i_chip->=
clk_hosc); =20
> > >
> > > Just ignoring for a bit that the 24 MHz oscillator is a fixed clock
> > > anyway, but why would we want exclusivity already at probe time? Isn't
> > > that too limiting, as no one might ever use any PWM channels, but it
> > > would still "belong to us"? =20
>=20
> That's a soft concept of "belong to us". Other consumers can still use
> it and even also call clk_rate_exclusive_get(). IMHO it's a good idea to
> call clk_rate_exclusive_get() for each clock that a driver relies on not
> to change. You could make the driver more flexible and only call that
> when the rate is actually relied on, but that's again a compromise with
> complexity of the driver. And if the clock rate is fixed anyhow, it
> doesn't hurt to do it here, right?
Sure, just wanted to point that out. Indeed we don't need to boil the
ocean here.
> > > > + if (ret)
> > > > + return dev_err_probe(&pdev->dev, ret,
> > > > + "Failed to get hosc exclusive ra=
te\n");
> > > > +
> > > > + sun20i_chip->clk_apb =3D devm_clk_get_enabled(&pdev->dev, "ap=
b");
> > > > + if (IS_ERR(sun20i_chip->clk_apb))
> > > > + return dev_err_probe(&pdev->dev, PTR_ERR(sun20i_chip-=
>clk_apb),
> > > > + "Failed to get apb clock\n");
> > > > +
> > > > + ret =3D devm_clk_rate_exclusive_get(&pdev->dev, sun20i_chip->=
clk_apb); =20
> > >
> > > Just for the records: APB is practically also a fixed clock, set up
> > > once in firmware and never changed, since it drives a lot of other
> > > peripherals.
> > > But same question as above, why do we lock its rate already here? =20
> >=20
> > That step was actually recommended by Uwe Kleine-K=C3=B6nig,
> > so the decision on whether to keep or drop exclusive reservation
> > is really a question for him=E2=80=94please coordinate with Uwe
> > to agree on how best to proceed here. =20
>=20
> Same as above. Iff the driver relies on the rate of this clock to keep
> constant, calling clk_rate_exclusive_get() is right.
It technically doesn't until a channel is actually programmed, but fair
enough, it doesn't matter anyway.
Cheers,
Andre
> > > > + if (ret)
> > > > + return dev_err_probe(&pdev->dev, ret,
> > > > + "Failed to get apb exclusive rat=
e\n");
> > > > +
> > > > + if (clk_get_rate(sun20i_chip->clk_apb) <=3D clk_get_rate(sun2=
0i_chip->clk_hosc))
> > > > + dev_info(&pdev->dev, "APB clock must be greater than =
hosc clock"); =20
> > >
> > > Why this check? Does the code make any assumptions about this relatio=
n?
> > > If yes, we must surely deny this and bail out.
> > > If not (and I feel we should handle it this way), we can just ignore
> > > this and not print anything. =20
>=20
> ack.
>=20
> Best regards
> Uwe
Return-Path: <linux-kernel+bounces-665445-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 27AB241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:32:09 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 380CF3B2501
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:31:47 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id A18882853E2;
Wed, 28 May 2025 12:32:01 +0000 (UTC)
Received: from mail-ot1-f52.google.com (mail-ot1-f52.google.com [209.85.210.52])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id EDA671E3DC8;
Wed, 28 May 2025 12:31:58 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.52
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435521; cv=none; b=GjDg2DGRUsEAvJpVuKa5n4+iv0jW9S4hv23GZ6or01ULqaV1S0ax1gJQn+0MdiuE0JrrR21qTvXQ+3XHcdcq4v94nq14kDxe5qV8A5jzaKC44EDH0zKJRraAaP3SF/Qtvx2sfZO/gppvYVV8r3O+tGaSbGNUqNEqP65FJ+HMkAI=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435521; c=relaxed/simple;
bh=zEkV1uU//gbAAl5EyFZskc/S8PcbUkq6USUFR4LIc1U=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=D9IIfBXmY8+YNkjIFOzAx2nrRdlFr+kp7VnBZs9EXdobWrXP/j7Y4109jTkx8T8hJ/8h2ErcLss9L1AHOjt9os1lVncdRdCrR+dh8hInV1nQImXMWsMJa4K9KMkrPYk9vc5Ilq/eryByB8S2h6ijhN8PxQagacG4RVXMbjUowCY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux-m68k.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.210.52
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux-m68k.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-ot1-f52.google.com with SMTP id 46e09a7af769-72ecc30903cso2124824a34.0;
Wed, 28 May 2025 05:31:58 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748435517; x=1749040317;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=KUHS2p4Yrhb6D+Ze5aQXRwHv8Hsjiq07gFX0i1Aa/2E=;
b=rFGdKjufzvxvcbZE4e10mZFZzB4ZF6XOZXY4t8tLnw/c4k0u9XirvsjgP/vcyKcjle
ihQFFSQr1Qtjh4MxV9b/k81ccQi01tRvJXrW3ePhLf5vfSpdqHgpfWvMOzS+9AgKOzpb
PHzEGS5ACjXLrkv2N6Y+PomrY3Ab4DlGZ3TlDbKsz1Vqh2LxqJcDSFkYjuKVBcoHzol5
IM7eOvSp1gQ8GMVDHkx2KPSitdROFdTF7o8hAenSjKDTc0uQ1pQj8YuGuApWWa5Y7ppb
1BWfLRP7bkkXbZmwxVr5+sQvwzpCkmL/GEnVHuTxCTEoV8UP0Ucl0ypQsrsCtWt2em2Z
vYHg==
X-Forwarded-Encrypted: i=1; AJvYcCUB1sw/QzJ76PwJTSVflAVE9evIFOWOVNRT8laqAUcGhTObibGhZmJLFyalGScdZt4v0CwB/DnxMsIG/B9TqguB3Ns=@vger.kernel.org, AJvYcCW+9ZHIttlnxP69CmSL9jVX1FedZWjtLB42rSXTgUZsraMQMnl6n3FMaf3MX1gdupfr3ixn7t574Dd8LQoy@xxxxxxxxxxxxxxx, AJvYcCW6Y5PM2I3ZitEY0+qRkKgUssv9uCIDcNrCqXY4fzDlEiNF1o5kdYLxFarQs9ZdMsonIvZHfsh8ENni@xxxxxxxxxxxxxxx, AJvYcCX+bGsC/qS7BMRuFcVVQnQsXG73e1KLjPlus/uGYmxEFumvRVSgEOKh9TCe1mrR7juxfCwA1AydfV5R@xxxxxxxxxxxxxxx
X-Gm-Message-State: AOJu0Ywb8acI3qBIYcyN4jnhoTmA0ymCwKGMHA1m3KEacrgiJcxMReBI
DZQDQG70Ba23SeYNMiYwXvFGrn1+SrPLkHl4SWmrk4wgTF6mv7OfBOM1PWwgCP3R
X-Gm-Gg: ASbGnct4x2pylQZ9rnrnI6zU1l27NZLdRwY6NJatdw0CkWY526qhBrlAFG+puKVnw3J
WwoPkmIc78jw7tuNya7k/M4r5VOd9HpgDPhhVrJmI5FzGPlWPz6xWT+r9GJAWwOC8v6XyuwLieb
GMDRWR4FVFoXOYKV+M7MZnhFTw9NmfijgV2RSHF+RTg8N7L1f2M7ZyxqeyaVedHoXPj4QTM61AO
Lc1Z3PYoKEXxhO6s7BOLnpAKUGxAyiWJBzAiiVI2FlvI3ChSeRVUw6c7XgEWRfmNnXMiBMnuc2O
l1rH1zdjd/z+e1+SLKk8WY8bqcX1tCq8PlUxPNUOdxlxyIn5eJ0UVGgs8oW3Z0L4WIGQ6p3dLrk
nyK3F4qS7o/fwjHzXiA==
X-Google-Smtp-Source: AGHT+IEDMZzyfOMPlNzg7lx0D57OR0NCvzKxaCAjNuHqYIaj8NmEH61YJT6F1kojh5TpFIulWeutXA==
X-Received: by 2002:a05:6830:b8b:b0:72b:9cb4:acf with SMTP id 46e09a7af769-7355d194491mr10828925a34.25.1748435517279;
Wed, 28 May 2025 05:31:57 -0700 (PDT)
Received: from mail-oi1-f178.google.com (mail-oi1-f178.google.com. [209.85.167.178])
by smtp.gmail.com with ESMTPSA id 46e09a7af769-735a1bb5276sm166912a34.30.2025.05.28.05.31.56
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 05:31:56 -0700 (PDT)
Received: by mail-oi1-f178.google.com with SMTP id 5614622812f47-3feb0db95e6so2372958b6e.1;
Wed, 28 May 2025 05:31:56 -0700 (PDT)
X-Forwarded-Encrypted: i=1; AJvYcCUKF3MpTmne15d1MUF9wrASTSiKKm4iHjlByCA5sMFeQZuSHxmar6txZWH45nGzPLxpCduPopYxefl6@xxxxxxxxxxxxxxx, AJvYcCUL+ccugzcXi963hknQTSqrIq3qFBx3gJEG1Xz5SBAe4f6iPyRigOnXgNi58AVONBeziKHtabgP4bNFIzsq@xxxxxxxxxxxxxxx, AJvYcCUo0NRv/4rN7QbyHJMeBZnLMqgE9HjjDF9ahagpfpn8Bdi2G2HCWEU9whXhiWw+nh05EEUQtX8EAfXR@xxxxxxxxxxxxxxx, AJvYcCXhK8dbGANfXToZjxrKIoZS9XesY56JbZXOx70E2OolkH6D8CAmstfholayG3gwu5QcA92xu3W29EhGKRyh9iKYWfM=@vger.kernel.org
X-Received: by 2002:a05:6808:680a:b0:406:692e:d678 with SMTP id
5614622812f47-406692ed990mr412088b6e.22.1748435516651; Wed, 28 May 2025
05:31:56 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250512184302.241417-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
<20250512184302.241417-5-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
<CAMuHMdX5_P4R43HOPuZc3JSAOQ5O2xOBDVhVVg1SxU1ucPdbPA@xxxxxxxxxxxxxx> <CA+V-a8sde6Zaz3Z2uDt3OGZ52UBJfR3vQMs4-ZUusDu=oNwFhg@xxxxxxxxxxxxxx>
In-Reply-To: <CA+V-a8sde6Zaz3Z2uDt3OGZ52UBJfR3vQMs4-ZUusDu=oNwFhg@xxxxxxxxxxxxxx>
From: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 14:31:44 +0200
X-Gmail-Original-Message-ID: <CAMuHMdXSbEWVpMbDx7UC3Zn3YteZLCdJ=kOOakE38k1TeTxKqA@xxxxxxxxxxxxxx>
X-Gm-Features: AX0GCFvVYyRF-qqhinpZ-10VhZ1hJFI-N7-tDZlIlkbT7TO9C3UrFM6heC0l3I0
Message-ID: <CAMuHMdXSbEWVpMbDx7UC3Zn3YteZLCdJ=kOOakE38k1TeTxKqA@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v5 4/4] drm: renesas: rz-du: mipi_dsi: Add support for
RZ/V2H(P) SoC
To: "Lad, Prabhakar" <prabhakar.csengg@xxxxxxxxx>
Cc: Fabrizio Castro <fabrizio.castro.jz@xxxxxxxxxxx>, Andrzej Hajda <andrzej.hajda@xxxxxxxxx>,
Neil Armstrong <neil.armstrong@xxxxxxxxxx>, Robert Foss <rfoss@xxxxxxxxxx>,
Laurent Pinchart <Laurent.pinchart@xxxxxxxxxxxxxxxx>, Jonas Karlman <jonas@xxxxxxxxx>,
Jernej Skrabec <jernej.skrabec@xxxxxxxxx>, David Airlie <airlied@xxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>, Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>, Thomas Zimmermann <tzimmermann@xxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>, Conor Dooley <conor+dt@xxxxxxxxxx>,
Michael Turquette <mturquette@xxxxxxxxxxxx>, Stephen Boyd <sboyd@xxxxxxxxxx>,
Biju Das <biju.das.jz@xxxxxxxxxxxxxx>, Magnus Damm <magnus.damm@xxxxxxxxx>,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-renesas-soc@xxxxxxxxxxxxxxx,
linux-clk@xxxxxxxxxxxxxxx,
Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Prabhakar,
On Wed, 28 May 2025 at 11:48, Lad, Prabhakar <prabhakar.csengg@xxxxxxxxx> w=
rote:
> On Fri, May 23, 2025 at 4:19=E2=80=AFPM Geert Uytterhoeven <geert@linux-m=
68k.org> wrote:
> > On Mon, 12 May 2025 at 20:43, Prabhakar <prabhakar.csengg@xxxxxxxxx> wr=
ote:
> > > From: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
> > >
> > > Add DSI support for Renesas RZ/V2H(P) SoC.
> > >
> > > Co-developed-by: Fabrizio Castro <fabrizio.castro.jz@xxxxxxxxxxx>
> > > Signed-off-by: Fabrizio Castro <fabrizio.castro.jz@xxxxxxxxxxx>
> > > Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx=
>
> >
> > Thanks for your patch!
> >
> > > --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c
> > > +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c
> > > @@ -47,6 +52,11 @@ struct rzg2l_mipi_dsi_hw_info {
> > > u8 features;
> > > };
> > >
> > > +struct rzv2h_dsi_mode_calc {
> > > + unsigned long mode_freq;
> > > + u64 mode_freq_hz;
> >
> > Interesting... I guess mode_freq is not in Hz?
> >
> Actually it is int Hz, I will make it unsigned long.
I really meant the first member.
As rzv2h_dphy_mode_clk_check() does "mode_freq_hz =3D mode_freq * MILLI",
mode_freq may be in kHz?
> > > +};
> > > @@ -308,6 +479,158 @@ static int rzg2l_dphy_conf_clks(struct rzg2l_mi=
pi_dsi *dsi, unsigned long mode_f
> > > return 0;
> > > }
> > >
> > > +static unsigned int rzv2h_dphy_mode_clk_check(struct rzg2l_mipi_dsi =
*dsi,
> > > + unsigned long mode_freq=
)
> > > +{
> > > + struct rzv2h_plldsi_parameters *dsi_parameters =3D &dsi->dsi_=
parameters;
> > > + u64 hsfreq_millihz, mode_freq_hz, mode_freq_millihz;
> > > + struct rzv2h_plldsi_parameters cpg_dsi_parameters;
> > > + unsigned int bpp, i;
> > > +
> > > + bpp =3D mipi_dsi_pixel_format_to_bpp(dsi->format);
> > > +
> > > + for (i =3D 0; i < 10; i +=3D 1) {
> > > + unsigned long hsfreq;
> > > + bool parameters_found;
> > > +
> > > + mode_freq_hz =3D mode_freq * MILLI + i;
> >
> > KILO?
> >
> OK, as mode_freq_hz is in Hz I'll make it unsigned long.
I am not sure if "unsigned long" is OK. Is mode_freq in kHz?
What is its largest value?
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k=
.org
In personal conversations with technical people, I call myself a hacker. Bu=
t
when I'm talking to journalists I just say "programmer" or something like t=
hat.
-- Linus Torvalds
Return-Path: <linux-kernel+bounces-665446-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 963CB41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:32:19 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id D870C4E41BF
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:32:20 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 8D6D9284B25;
Wed, 28 May 2025 12:32:10 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b="PBal/pqn"
Received: from out30-131.freemail.mail.aliyun.com (out30-131.freemail.mail.aliyun.com [115.124.30.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7831F1E3DC8;
Wed, 28 May 2025 12:32:05 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.124.30.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435529; cv=none; b=A0m6Qeig85WNci3zGzHfhHsANLJkdABRdFI+B1++gAP0N2qWdzMlwbF7TEVdxzXdvhjtXd3Rt/IG42Hpav2g8QNT+qL0hYHG4bKBAPsP15/8by7PDi2BupcR0MO0ofRwc197V8YPOktP0iYiETKdKGSgbmS+HVweGVp9g54m/xI=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435529; c=relaxed/simple;
bh=bIYbEVWluhCTPXdhEP2fq4IWKcmxg1+/ZE8+yCBn38M=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=mYNA47k1+YgETBMyJZY0VjF9CU1XZACVT8wQC7w9SDpR9AE939iLjSRkdRIQFd4SLoOkKRvkBtujoOVFOocm+Yr6NZ/8E2Dqdqrf5EyoUc8iiuKq0jDIzzuH+2jqu+RsZaANBzOLTZSC7nIuAvOCRL2ZQrVXOilfip3cNhPyuAA=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com; spf=pass smtp.mailfrom=linux.alibaba.com; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b=PBal/pqn; arc=none smtp.client-ip=115.124.30.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.alibaba.com
DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed;
d=linux.alibaba.com; s=default;
t=1748435524; h=From:To:Subject:Date:Message-ID:MIME-Version;
bh=ZbL34hcVzNUdnkbTcE5pb/KuNOeDYKvzQq5G8mjvizg=;
b=PBal/pqn5GI60krA/uA7TusuXeveZIQg0vVXQjjfs5RlIVWQXWNzY7Ik1UEUw0sOGfPMqvJ9JVL5TkNaumhvecVVjgydQNgtTdbxS3y6oQgDJ2j2LlI93BfX4XuN8NDm4CukZ20tXGEE9x7ZWVPOm7FtRmLO7BSKrB0jorY6qEo=
Received: from localhost(mailfrom:baolin.wang@xxxxxxxxxxxxxxxxx fp:SMTPD_---0WcDRdUh_1748435520 cluster:ay36)
by smtp.aliyun-inc.com;
Wed, 28 May 2025 20:32:01 +0800
From: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx>
To: npache@xxxxxxxxxx
Cc: Liam.Howlett@xxxxxxxxxx,
aarcange@xxxxxxxxxx,
akpm@xxxxxxxxxxxxxxxxxxxx,
anshuman.khandual@xxxxxxx,
baohua@xxxxxxxxxx,
baolin.wang@xxxxxxxxxxxxxxxxx,
catalin.marinas@xxxxxxx,
cl@xxxxxxxxxx,
corbet@xxxxxxx,
dave.hansen@xxxxxxxxxxxxxxx,
david@xxxxxxxxxx,
dev.jain@xxxxxxx,
hannes@xxxxxxxxxxx,
jack@xxxxxxx,
jglisse@xxxxxxxxxx,
kirill.shutemov@xxxxxxxxxxxxxxx,
linux-doc@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
linux-mm@xxxxxxxxx,
linux-trace-kernel@xxxxxxxxxxxxxxx,
lorenzo.stoakes@xxxxxxxxxx,
mathieu.desnoyers@xxxxxxxxxxxx,
mhiramat@xxxxxxxxxx,
mhocko@xxxxxxxx,
peterx@xxxxxxxxxx,
raquini@xxxxxxxxxx,
rdunlap@xxxxxxxxxxxxx,
rientjes@xxxxxxxxxx,
rostedt@xxxxxxxxxxx,
ryan.roberts@xxxxxxx,
sunnanyong@xxxxxxxxxx,
surenb@xxxxxxxxxx,
thomas.hellstrom@xxxxxxxxxxxxxxx,
tiwai@xxxxxxx,
usamaarif642@xxxxxxxxx,
vishal.moola@xxxxxxxxx,
wangkefeng.wang@xxxxxxxxxx,
will@xxxxxxxxxx,
willy@xxxxxxxxxxxxx,
yang@xxxxxxxxxxxxxxxxxxxxxx,
ziy@xxxxxxxxxx,
zokeefe@xxxxxxxxxx
Subject: [PATCH 1/2] mm: khugepaged: allow khugepaged to check all anonymous mTHP orders
Date: Wed, 28 May 2025 20:31:46 +0800
Message-ID: <ac9ed6d71b439611f9c94b3506a8ce975d4636e9.1748435162.git.baolin.wang@xxxxxxxxxxxxxxxxx>
X-Mailer: git-send-email 2.43.5
In-Reply-To: <20250515032226.128900-1-npache@xxxxxxxxxx>
References: <20250515032226.128900-1-npache@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-10.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,
USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
We have now allowed mTHP collapse, but thp_vma_allowable_order() still only
checks if the PMD-sized mTHP is allowed to collapse. This prevents scanning
and collapsing of 64K mTHP when only 64K mTHP is enabled. Thus, we should
modify the checks to allow all large orders of anonymous mTHP.
Signed-off-by: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx>
---
mm/khugepaged.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/mm/khugepaged.c b/mm/khugepaged.c
index 0723b184c7a4..16542ecf02dc 100644
--- a/mm/khugepaged.c
+++ b/mm/khugepaged.c
@@ -491,8 +491,11 @@ void khugepaged_enter_vma(struct vm_area_struct *vma,
{
if (!test_bit(MMF_VM_HUGEPAGE, &vma->vm_mm->flags) &&
hugepage_pmd_enabled()) {
- if (thp_vma_allowable_order(vma, vm_flags, TVA_ENFORCE_SYSFS,
- PMD_ORDER))
+ unsigned long orders = vma_is_anonymous(vma) ?
+ THP_ORDERS_ALL_ANON : BIT(PMD_ORDER);
+
+ if (thp_vma_allowable_orders(vma, vm_flags, TVA_ENFORCE_SYSFS,
+ orders))
__khugepaged_enter(vma->vm_mm);
}
}
@@ -2618,6 +2621,8 @@ static unsigned int khugepaged_scan_mm_slot(unsigned int pages, int *result,
vma_iter_init(&vmi, mm, khugepaged_scan.address);
for_each_vma(vmi, vma) {
+ unsigned long orders = vma_is_anonymous(vma) ?
+ THP_ORDERS_ALL_ANON : BIT(PMD_ORDER);
unsigned long hstart, hend;
cond_resched();
@@ -2625,8 +2630,8 @@ static unsigned int khugepaged_scan_mm_slot(unsigned int pages, int *result,
progress++;
break;
}
- if (!thp_vma_allowable_order(vma, vma->vm_flags,
- TVA_ENFORCE_SYSFS, PMD_ORDER)) {
+ if (!thp_vma_allowable_orders(vma, vma->vm_flags,
+ TVA_ENFORCE_SYSFS, orders)) {
skip:
progress++;
continue;
--
2.43.5
Return-Path: <linux-kernel+bounces-665447-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 7CA1241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:32:32 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id C27F94E41A0
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:32:31 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 6FACC2857EF;
Wed, 28 May 2025 12:32:16 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b="sGVWfweY"
Received: from out30-118.freemail.mail.aliyun.com (out30-118.freemail.mail.aliyun.com [115.124.30.118])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B339A2857E9;
Wed, 28 May 2025 12:32:12 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.124.30.118
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435535; cv=none; b=pJ97HAeQZtT5UNv35vn1z0xEKyFCvbUjAJJko3HZccDFD091WWyFGezr3h0+QNOfRik80mCqcDbO/uSrvpu8Ex5+/IaaGmKGSzZuWIbzCRWvqceWk6EgAmVO6J5T7yVyOlz2z7sKRo6xPy6U3P0BfX4ApLdipKcgkEd9hAh3a4E=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435535; c=relaxed/simple;
bh=XsuGcvuuUUXS4jLOz4WB0yYprAtWn37b+rIUVP12rHc=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=tir7gO3Hcs4QWSldHfvGKuCdeSwU8ClsBpj7KUlU/vUWsX2NHKqtw6d9YxktJJfizbGDzd93MN9HAOYyP6lTWVSMFX1B/+xL1YwrQW5+Q/yZaAE1irfshrKIbIOf8zgYPE/upixfGVjn/w/ansn9qMCUDUqoA0SSFF/1CH2Bkts=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com; spf=pass smtp.mailfrom=linux.alibaba.com; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b=sGVWfweY; arc=none smtp.client-ip=115.124.30.118
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.alibaba.com
DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed;
d=linux.alibaba.com; s=default;
t=1748435525; h=From:To:Subject:Date:Message-ID:MIME-Version;
bh=pFNh0IVheZ8qINWFs4u+FxqVL8vEpYnDU+CU4iwFCWw=;
b=sGVWfweY0PrtEwmYxRuPhkp8JReIeP0T7p/K6QxyBgxhot/y94qu1l9Rynpcl83VuyiE/wXZgubORVeIUvmdhcvLRrl+0jIegQgGX+rTabJbkYhuLEaYhXyngmnmlUVSRdmXDs6FIlor2V5goKvopOYNfAxZW11e157o1tI094k=
Received: from localhost(mailfrom:baolin.wang@xxxxxxxxxxxxxxxxx fp:SMTPD_---0WcDRdVN_1748435522 cluster:ay36)
by smtp.aliyun-inc.com;
Wed, 28 May 2025 20:32:02 +0800
From: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx>
To: npache@xxxxxxxxxx
Cc: Liam.Howlett@xxxxxxxxxx,
aarcange@xxxxxxxxxx,
akpm@xxxxxxxxxxxxxxxxxxxx,
anshuman.khandual@xxxxxxx,
baohua@xxxxxxxxxx,
baolin.wang@xxxxxxxxxxxxxxxxx,
catalin.marinas@xxxxxxx,
cl@xxxxxxxxxx,
corbet@xxxxxxx,
dave.hansen@xxxxxxxxxxxxxxx,
david@xxxxxxxxxx,
dev.jain@xxxxxxx,
hannes@xxxxxxxxxxx,
jack@xxxxxxx,
jglisse@xxxxxxxxxx,
kirill.shutemov@xxxxxxxxxxxxxxx,
linux-doc@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
linux-mm@xxxxxxxxx,
linux-trace-kernel@xxxxxxxxxxxxxxx,
lorenzo.stoakes@xxxxxxxxxx,
mathieu.desnoyers@xxxxxxxxxxxx,
mhiramat@xxxxxxxxxx,
mhocko@xxxxxxxx,
peterx@xxxxxxxxxx,
raquini@xxxxxxxxxx,
rdunlap@xxxxxxxxxxxxx,
rientjes@xxxxxxxxxx,
rostedt@xxxxxxxxxxx,
ryan.roberts@xxxxxxx,
sunnanyong@xxxxxxxxxx,
surenb@xxxxxxxxxx,
thomas.hellstrom@xxxxxxxxxxxxxxx,
tiwai@xxxxxxx,
usamaarif642@xxxxxxxxx,
vishal.moola@xxxxxxxxx,
wangkefeng.wang@xxxxxxxxxx,
will@xxxxxxxxxx,
willy@xxxxxxxxxxxxx,
yang@xxxxxxxxxxxxxxxxxxxxxx,
ziy@xxxxxxxxxx,
zokeefe@xxxxxxxxxx
Subject: [PATCH 2/2] mm: khugepaged: kick khugepaged for enabling none-PMD-sized mTHPs
Date: Wed, 28 May 2025 20:31:47 +0800
Message-ID: <5ced00b4f9e53138fac98125655a533730857e7b.1748435162.git.baolin.wang@xxxxxxxxxxxxxxxxx>
X-Mailer: git-send-email 2.43.5
In-Reply-To: <ac9ed6d71b439611f9c94b3506a8ce975d4636e9.1748435162.git.baolin.wang@xxxxxxxxxxxxxxxxx>
References: <ac9ed6d71b439611f9c94b3506a8ce975d4636e9.1748435162.git.baolin.wang@xxxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-10.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,
USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
When only non-PMD-sized mTHP is enabled (such as only 64K mTHP enabled),
we should also allow kicking khugepaged to attempt scanning and collapsing
64K mTHP. Modify hugepage_pmd_enabled() to support mTHP collapse, and
while we are at it, rename it to make the function name more clear.
Signed-off-by: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx>
---
mm/khugepaged.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/mm/khugepaged.c b/mm/khugepaged.c
index 16542ecf02dc..155ef8d286e2 100644
--- a/mm/khugepaged.c
+++ b/mm/khugepaged.c
@@ -430,7 +430,7 @@ static inline int khugepaged_test_exit_or_disable(struct mm_struct *mm)
test_bit(MMF_DISABLE_THP, &mm->flags);
}
-static bool hugepage_pmd_enabled(void)
+static bool hugepage_enabled(void)
{
/*
* We cover the anon, shmem and the file-backed case here; file-backed
@@ -442,11 +442,11 @@ static bool hugepage_pmd_enabled(void)
if (IS_ENABLED(CONFIG_READ_ONLY_THP_FOR_FS) &&
hugepage_global_enabled())
return true;
- if (test_bit(PMD_ORDER, &huge_anon_orders_always))
+ if (READ_ONCE(huge_anon_orders_always))
return true;
- if (test_bit(PMD_ORDER, &huge_anon_orders_madvise))
+ if (READ_ONCE(huge_anon_orders_madvise))
return true;
- if (test_bit(PMD_ORDER, &huge_anon_orders_inherit) &&
+ if (READ_ONCE(huge_anon_orders_inherit) &&
hugepage_global_enabled())
return true;
if (IS_ENABLED(CONFIG_SHMEM) && shmem_hpage_pmd_enabled())
@@ -490,7 +490,7 @@ void khugepaged_enter_vma(struct vm_area_struct *vma,
unsigned long vm_flags)
{
if (!test_bit(MMF_VM_HUGEPAGE, &vma->vm_mm->flags) &&
- hugepage_pmd_enabled()) {
+ hugepage_enabled()) {
unsigned long orders = vma_is_anonymous(vma) ?
THP_ORDERS_ALL_ANON : BIT(PMD_ORDER);
@@ -2711,7 +2711,7 @@ static unsigned int khugepaged_scan_mm_slot(unsigned int pages, int *result,
static int khugepaged_has_work(void)
{
- return !list_empty(&khugepaged_scan.mm_head) && hugepage_pmd_enabled();
+ return !list_empty(&khugepaged_scan.mm_head) && hugepage_enabled();
}
static int khugepaged_wait_event(void)
@@ -2784,7 +2784,7 @@ static void khugepaged_wait_work(void)
return;
}
- if (hugepage_pmd_enabled())
+ if (hugepage_enabled())
wait_event_freezable(khugepaged_wait, khugepaged_wait_event());
}
@@ -2815,7 +2815,7 @@ static void set_recommended_min_free_kbytes(void)
int nr_zones = 0;
unsigned long recommended_min;
- if (!hugepage_pmd_enabled()) {
+ if (!hugepage_enabled()) {
calculate_min_free_kbytes();
goto update_wmarks;
}
@@ -2865,7 +2865,7 @@ int start_stop_khugepaged(void)
int err = 0;
mutex_lock(&khugepaged_mutex);
- if (hugepage_pmd_enabled()) {
+ if (hugepage_enabled()) {
if (!khugepaged_thread)
khugepaged_thread = kthread_run(khugepaged, NULL,
"khugepaged");
@@ -2891,7 +2891,7 @@ int start_stop_khugepaged(void)
void khugepaged_min_free_kbytes_update(void)
{
mutex_lock(&khugepaged_mutex);
- if (hugepage_pmd_enabled() && khugepaged_thread)
+ if (hugepage_enabled() && khugepaged_thread)
set_recommended_min_free_kbytes();
mutex_unlock(&khugepaged_mutex);
}
--
2.43.5
Return-Path: <linux-kernel+bounces-665448-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 5D50041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:33:06 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 3B60E1BC5A5D
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:33:19 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id B9589284B25;
Wed, 28 May 2025 12:32:59 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="ekJwQ6Ox"
Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 26F232749CB
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:32:56 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435578; cv=none; b=sfivGzsBW98aFzBI9JLRKBVttxjoZKiLnHg1XB20rY9FcF2BsoH4/Gjs7H0jRuuk1/bhUDvCM47Uv1YYPOIpmpVnzqafcAE5SgACDYha0zCVR5RmlBX9QjE6ubgVaIxRWTSGWoGgZ18spQWyI/f88h6CjzCMnKKZMGJlKsUI1cM=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435578; c=relaxed/simple;
bh=fEaipTSqAG5Q/Nf622n4EmU/RZPJUZ7c58BLiK7w5oo=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=o5yxtHuj2/d+Uj5hoQ3W8KoHGTH/ERBFXWUmH1IAe7yo6o7QwQSFZJE3Wa9h/FigrhIGVhXJBovl2+iB4oqi8jdhOj5BqocUXArHlSwDepgAm1n9ts4Qpn7IttPGrWmgse6E4ipqVcTNVyxaedNlFpijezMfRo60Dpxwhh5vnmI=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=ekJwQ6Ox; arc=none smtp.client-ip=213.167.242.64
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com
Received: from [192.168.88.20] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178])
by perceval.ideasonboard.com (Postfix) with ESMTPSA id 9CD5DCF;
Wed, 28 May 2025 14:32:20 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;
s=mail; t=1748435542;
bh=fEaipTSqAG5Q/Nf622n4EmU/RZPJUZ7c58BLiK7w5oo=;
h=Date:Subject:To:Cc:References:From:In-Reply-To:From;
b=ekJwQ6OxKTAKx5bF41MxJuqArh+ZaonP+1pD2Cwph8Qb/a/pU2k+fzA/qTf18+65P
HtHTjUMgHo6e9bbi3ycZtpizouu0wPRB4vwLfm/M5JYVUpMQYfd6q5dt3tve72GE+p
tb7ZU/40Rd412NbSWTMJ38bcKFVHCQCnHa2wiaSk=
Message-ID: <d19fe815-09cf-45f9-9f36-ff823216d17e@xxxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 15:32:44 +0300
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [RFC PATCH v2 2/3] drm/bridge: cadence: cdns-mhdp8546*: Change
drm_connector from pointer to structure
To: Jayesh Choudhary <j-choudhary@xxxxxx>
Cc: jonas@xxxxxxxxx, jernej.skrabec@xxxxxxxxx,
maarten.lankhorst@xxxxxxxxxxxxxxx, mripard@xxxxxxxxxx, tzimmermann@xxxxxxx,
airlied@xxxxxxxxx, simona@xxxxxxxx, lumag@xxxxxxxxxx, jani.nikula@xxxxxxxxx,
andy.yan@xxxxxxxxxxxxxx, mordan@xxxxxxxxx, linux@xxxxxxxxxxx,
viro@xxxxxxxxxxxxxxxxxx, yamonkar@xxxxxxxxxxx, sjakhade@xxxxxxxxxxx,
quentin.schulz@xxxxxxxxxxxxxxxxxx, jsarha@xxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, devarsht@xxxxxx, dianders@xxxxxxxxxxxx,
andrzej.hajda@xxxxxxxxx, neil.armstrong@xxxxxxxxxx, rfoss@xxxxxxxxxx,
Laurent.pinchart@xxxxxxxxxxxxxxxx, dri-devel@xxxxxxxxxxxxxxxxxxxxx,
alexander.stein@xxxxxxxxxxxxxxx
References: <20250521073237.366463-1-j-choudhary@xxxxxx>
<20250521073237.366463-3-j-choudhary@xxxxxx>
<19dd2795-c693-4c1a-989c-8b3bc2b3cdfd@xxxxxxxxxxxxxxxx>
<493afc6c-59a0-4f6b-9a9e-568dd2eff873@xxxxxx>
<2a15263b-2d36-4c46-be0f-4145069d134f@xxxxxx>
<027ad6e9-5070-43f2-a082-fd498cc6d31d@xxxxxxxxxxxxxxxx>
<870d036a-0fa0-43e0-8b72-428096173526@xxxxxx>
Content-Language: en-US
From: Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx>
Autocrypt: addr=tomi.valkeinen@xxxxxxxxxxxxxxxx; keydata=
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
In-Reply-To: <870d036a-0fa0-43e0-8b72-428096173526@xxxxxx>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi,
On 28/05/2025 14:25, Jayesh Choudhary wrote:
> Hi,
>
> On 27/05/25 17:07, Tomi Valkeinen wrote:
>> Hi,
>>
>> On 27/05/2025 13:39, Jayesh Choudhary wrote:
>>>
>>>
>>> On 27/05/25 14:59, Jayesh Choudhary wrote:
>>>> Hello Tomi,
>>>>
>>>> On 27/05/25 13:28, Tomi Valkeinen wrote:
>>>>> Hi,
>>>>>
>>>>> On 21/05/2025 10:32, Jayesh Choudhary wrote:
>>>>>> After adding DBANC framework, mhdp->connector is not initialised
>>>>>> during
>>>>>> bridge calls. But the asyncronous work scheduled depends on the
>>>>>> connector.
>>>>>> We cannot get to drm_atomic_state in these asyncronous calls
>>>>>> running on
>>>>>> worker threads. So we need to store the data that we need in mhdp
>>>>>> bridge
>>>>>> structure.
>>>>>> Like other bridge drivers, use drm_connector pointer instead of
>>>>>> structure
>>>>>> and make appropriate changes to the conditionals and assignments
>>>>>> related
>>>>>> to mhdp->connector.
>>>>>> Also, in the atomic enable call, move the connector and connector
>>>>>> state
>>>>>> calls above, so that we do have a connector before we can retry the
>>>>>> asyncronous work in case of any failure.
>>>>>>
>>>>>
>>>>> I don't quite understand this patch. You change the mhdp->connector
>>>>> to a
>>>>> pointer, which is set at bridge_enable and cleared at bridge_disable.
>>>>> Then you change the "mhdp->connector.dev" checks to "mhdp->connector".
>>>>>
>>>>> So, now in e.g. cdns_mhdp_fw_cb(), we check for mhdp->connector, which
>>>>> is set at bridge_enable(). Can we ever have the bridge enabled before
>>>>> the fb has been loaded? What is the check even supposed to do there?
>>>>>
>>>>> Another in cdns_mhdp_hpd_work(), it checks for mhdp->connector. So...
>>>>> HPD code behaves differently based on if the bridge has been
>>>>> enabled or
>>>>> not? What is it supposed to do?
>>>>>
>>>>> Isn't the whole "if (mhdp->connector.dev)" code for the legacy
>>>>> non-DRM_BRIDGE_ATTACH_NO_CONNECTOR case?
>>>>>
>>>>> Â Â Tomi
>>>>
>>>> I misinterpreted your comment in v1[0] regarding finding the connector
>>>> from the current state in cdns_mhdp_modeset_retry_fn() and I missed
>>>> this. I was more focused on finding a connector for that function.
>>>>
>>>> For the current code, in all the conditionals involving mhdp-
>>>> >connector,
>>>> we are entering else statements as connector is not initialised.
>>>> So I will just drop if statements in cdns_mhdp_fw_cb() and
>>>> cdns_mhdp_hpd_work() (like you said, its legacy case) while still
>>>> having
>>>> mhdp->connector as pointer as we need it for
>>>> cdns_mhdp_modeset_retry_fn() and in cdns-mhdp8546-hdcp driver.
>>>>
>>>> That should be okay?
>>>>
>>>> [0]: https://lore.kernel.org/all/e76f94b9-b138-46e7-bb18-
>>>> b33dd98c9abb@xxxxxxxxxxxxxxxx/
>>>>
>>>> Warm Regards,
>>>> Jayesh
>>>>
>>>>
>>>
>>> Tomi,
>>>
>>> One more thing here. Should this be squashed with the first patch as
>>> this is sort of removing !(DRM_BRIDGE_ATTACH_NO_CONNECTOR) case and
>>> associated changes?
>>
>>
>> All the legacy code should be removed in the previous patch, yes. But
>> it's not quite clear to me what's going on here. At least parts of this
>> patch seem to be... fixing some previous code? You move the
>> drm_atomic_get_new_connector_for_encoder() call to be earlier in the
>> bridge_enable. That doesn't sound like removing the legacy code. But
>> it's not quite clear to me why that's done (or why it wasn't needed
>> earlier. or was it?).
>>
>> Â Tomi
>>
>
> drm_atomic_get_new_connector_for_encoder() call is moved earlier
> in bridge_enable to address the cases when we get error in
> cdns_mhdp_link_up(mhdp) or cdns_mhdp_reg_read(mhdp, CDNS_DPTX_CAR,
> &resp), and we goto 'out' to schedule modeset_retry_work. We need to
> have drm_connector before that if we want to change the connector
> link state here.
>
> In legacy usecase we are not hitting this as attach already initialised
> mhdp->connector before bridge_enable() that would be used by
> cdns_mhdp_modeset_retry_fn() as required.
>
> These errors usually don't hit during bridge_enable calls but in
> one of my boards, I saw cdns_mhdp_link_up() giving error and after
> that the null pointer dereference in cdns_mhdp_modeset_retry_fn()
> while trying to access the mutex there (&conn->dev->mode_config.mutex)
Okay, so moving the drm_atomic_get_new_connector_for_encoder() is a bug
fix, and should be a separate patch? But you can't do that until you
have changed the connector field to a pointer, and you can't do that
until you have removed the legacy code...
In theory that could be sorted out, but changing the connector field to
a pointer, while still keeping the legacy code, would be a bit laborious.
So, maybe keep the first patch, but split out the move of the
drm_atomic_get_new_connector_for_encoder() to a new third patch, so that
this one (2/3) would be only about changing the embedded connector field
to a pointer?
And a hint: If in the patch description you find yourself writing "Also,
...", it usually suggests that you might want to split the patch =).
Tomi
Return-Path: <linux-kernel+bounces-665449-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 484D541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:35:49 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 7EDAE1742BF
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:35:50 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 8E81D285404;
Wed, 28 May 2025 12:35:41 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b="YPR4P/Zc"
Received: from out30-98.freemail.mail.aliyun.com (out30-98.freemail.mail.aliyun.com [115.124.30.98])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 681E4279789;
Wed, 28 May 2025 12:35:37 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.124.30.98
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435740; cv=none; b=VDOwsZcsSCu2lPo25nR/Qp28Uclj7Y/gI3ILMj/sP1Yb+z2du9dxFct2grXQxwPrwvWIjRpq2Yu7YD3XUVesv3NvZecOxVQP8zrf+uRCKo7ku9hBoX2BLB/ec731YqZ9V1/hwDVSw4R4c66MRNY1HTYabhqkffXc9Wqmxkc0FGo=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435740; c=relaxed/simple;
bh=LYwqlBRi8ID882TZWjXAGZR8tgMQwuR55sVHt5Q57Jo=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=XE0aOCnzh5tkALHM96V69hxdC6aV+tZ2CSJRbumEfX52mIh0xyjzy5GsODJ/3gWOEAknHZzekv6Ads+V1/MjMFKYwyEMMrx24YD/xPRn39loNrgEnfjQMGwIUUXpi9QSOxOurCZSfXz+0fteXVyohzxfX2rlzImXI6khHqHd2AM=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com; spf=pass smtp.mailfrom=linux.alibaba.com; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b=YPR4P/Zc; arc=none smtp.client-ip=115.124.30.98
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.alibaba.com
DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed;
d=linux.alibaba.com; s=default;
t=1748435735; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type;
bh=54GRYqlSUhKavKBqRRsmmEctJpORh0vvFiJujpYJZXc=;
b=YPR4P/ZcdtSOJmHgDyIeIqEeYZUUPDarvb0rNWM9ERT0Q0wb1WBV14LS97BvChkztTtVvQMS6iWY8qGpzC1j8V2zYfmxcJDOGgagykTLYMz7W+anVVvQeruDxlCgkUtzk/8/ITL4d+fsFkuSQ+B65cuBdWu6VSc3AnzM3k0CEuo=
Received: from 30.221.144.174(mailfrom:joseph.qi@xxxxxxxxxxxxxxxxx fp:SMTPD_---0WcDTszd_1748435734 cluster:ay36)
by smtp.aliyun-inc.com;
Wed, 28 May 2025 20:35:34 +0800
Message-ID: <878ab848-c57c-422b-9694-264d43af7f7d@xxxxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 20:35:34 +0800
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH] ocfs2: Replace simple_strtol with kstrtol
To: Su Hui <suhui@xxxxxxxxxxxx>, mark@xxxxxxxxxx, jlbec@xxxxxxxxxxxx,
akpm <akpm@xxxxxxxxxxxxxxxxxxxx>
Cc: ocfs2-devel@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
kernel-janitors@xxxxxxxxxxxxxxx
References: <20250527092333.1917391-1-suhui@xxxxxxxxxxxx>
From: Joseph Qi <joseph.qi@xxxxxxxxxxxxxxxxx>
In-Reply-To: <20250527092333.1917391-1-suhui@xxxxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-10.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,
USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 2025/5/27 17:23, Su Hui wrote:
> kstrtol() is better because simple_strtol() ignores overflow. And using
> kstrtol() is more concise.
>
> Signed-off-by: Su Hui <suhui@xxxxxxxxxxxx>
Looks fine.
Reviewed-by: Joseph Qi <joseph.qi@xxxxxxxxxxxxxxxxx>
> ---
> fs/ocfs2/stack_user.c | 15 ++++-----------
> 1 file changed, 4 insertions(+), 11 deletions(-)
>
> diff --git a/fs/ocfs2/stack_user.c b/fs/ocfs2/stack_user.c
> index 77edcd70f72c..0f045e45fa0c 100644
> --- a/fs/ocfs2/stack_user.c
> +++ b/fs/ocfs2/stack_user.c
> @@ -360,7 +360,6 @@ static int ocfs2_control_do_setnode_msg(struct file *file,
> struct ocfs2_control_message_setn *msg)
> {
> long nodenum;
> - char *ptr = NULL;
> struct ocfs2_control_private *p = file->private_data;
>
> if (ocfs2_control_get_handshake_state(file) !=
> @@ -375,8 +374,7 @@ static int ocfs2_control_do_setnode_msg(struct file *file,
> return -EINVAL;
> msg->space = msg->newline = '\0';
>
> - nodenum = simple_strtol(msg->nodestr, &ptr, 16);
> - if (!ptr || *ptr)
> + if (kstrtol(msg->nodestr, 16, &nodenum))
> return -EINVAL;
>
> if ((nodenum == LONG_MIN) || (nodenum == LONG_MAX) ||
> @@ -391,7 +389,6 @@ static int ocfs2_control_do_setversion_msg(struct file *file,
> struct ocfs2_control_message_setv *msg)
> {
> long major, minor;
> - char *ptr = NULL;
> struct ocfs2_control_private *p = file->private_data;
> struct ocfs2_protocol_version *max =
> &ocfs2_user_plugin.sp_max_proto;
> @@ -409,11 +406,9 @@ static int ocfs2_control_do_setversion_msg(struct file *file,
> return -EINVAL;
> msg->space1 = msg->space2 = msg->newline = '\0';
>
> - major = simple_strtol(msg->major, &ptr, 16);
> - if (!ptr || *ptr)
> + if (kstrtol(msg->major, 16, &major))
> return -EINVAL;
> - minor = simple_strtol(msg->minor, &ptr, 16);
> - if (!ptr || *ptr)
> + if (kstrtol(msg->minor, 16, &minor))
> return -EINVAL;
>
> /*
> @@ -441,7 +436,6 @@ static int ocfs2_control_do_down_msg(struct file *file,
> struct ocfs2_control_message_down *msg)
> {
> long nodenum;
> - char *p = NULL;
>
> if (ocfs2_control_get_handshake_state(file) !=
> OCFS2_CONTROL_HANDSHAKE_VALID)
> @@ -456,8 +450,7 @@ static int ocfs2_control_do_down_msg(struct file *file,
> return -EINVAL;
> msg->space1 = msg->space2 = msg->newline = '\0';
>
> - nodenum = simple_strtol(msg->nodestr, &p, 16);
> - if (!p || *p)
> + if (kstrtol(msg->nodestr, 16, &nodenum))
> return -EINVAL;
>
> if ((nodenum == LONG_MIN) || (nodenum == LONG_MAX) ||
Return-Path: <linux-kernel+bounces-665450-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E0FC841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:36:10 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id E69EA3B2043
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:35:49 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id DDD8D2836BE;
Wed, 28 May 2025 12:36:04 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b="sW76eO0c";
dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b="sW76eO0c"
Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4C35627A448
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:36:02 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435764; cv=none; b=G9QmLkm7zJM4Is/hCKwtEPJtOiI23Ic+Wqep2bogVVTS/hAhNz3nFyCqoPLmv5ez4TdCTYw9auUd4O4dIBA5anABhXI8nM2sU08zUvZf+1n3vY+NQ17Sv2EL/2mrt88imTQlt/0gXV1MYxbVUznJ1KSVpMLNIbNgmFlEOB/BzeU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435764; c=relaxed/simple;
bh=opFMAY7ql65PTVuG1xITeeuQ5Ru9iADMO899kbu8eR8=;
h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=uTWUMnpW8NDIJiWJNSlbALv7dLR1/gcAXZLzn+PTRuzA3eWklRYeOD8z2+YR+/amW/SfGcWSOWBEgqZtUAGbny9ZKLIgkbPmnql4UF+2uGvGrrqPy8/CWR1/lyLUtsnYsdudJrmC1v8pMGaH6Zrw0aiaE7MtfUV1Kk6q1nQiLw4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b=sW76eO0c; dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b=sW76eO0c; arc=none smtp.client-ip=195.135.223.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com
Received: from imap1.dmz-prg2.suse.org (unknown [10.150.64.97])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(No client certificate requested)
by smtp-out2.suse.de (Postfix) with ESMTPS id 483B21F897;
Wed, 28 May 2025 12:36:00 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
t=1748435760; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
mime-version:mime-version: content-transfer-encoding:content-transfer-encoding;
bh=oUHpflNkqxQqAeRF/c6Lk5cVWk0vuP3r2ZYdL4XjqBc=;
b=sW76eO0cjSJnW4NETyMF/qAOcV8R/jWofXly4AHnsZJccejpPQ3xA3XDrBTvmODFCvw/iE
MEKzfCjZQHWQ8r/3cP7cE+rEeW0pl36Kte3HXJ34S08MSDbs99qbJGvS/kfw+1sCyfobFh
QXZwGb4ijWxSDK9EkFyKyD9pkv8mkck=
Authentication-Results: smtp-out2.suse.de;
none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
t=1748435760; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
mime-version:mime-version: content-transfer-encoding:content-transfer-encoding;
bh=oUHpflNkqxQqAeRF/c6Lk5cVWk0vuP3r2ZYdL4XjqBc=;
b=sW76eO0cjSJnW4NETyMF/qAOcV8R/jWofXly4AHnsZJccejpPQ3xA3XDrBTvmODFCvw/iE
MEKzfCjZQHWQ8r/3cP7cE+rEeW0pl36Kte3HXJ34S08MSDbs99qbJGvS/kfw+1sCyfobFh
QXZwGb4ijWxSDK9EkFyKyD9pkv8mkck=
Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(No client certificate requested)
by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id C5306136E0;
Wed, 28 May 2025 12:35:59 +0000 (UTC)
Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167])
by imap1.dmz-prg2.suse.org with ESMTPSA
id WCIeLi8DN2iWKQAAD6G6ig
(envelope-from <jgross@xxxxxxxx>); Wed, 28 May 2025 12:35:59 +0000
From: Juergen Gross <jgross@xxxxxxxx>
To: linux-kernel@xxxxxxxxxxxxxxx,
x86@xxxxxxxxxx
Cc: xin@xxxxxxxxx,
Juergen Gross <jgross@xxxxxxxx>,
Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
Andy Lutomirski <luto@xxxxxxxxxx>,
Peter Zijlstra <peterz@xxxxxxxxxxxxx>,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>,
Ingo Molnar <mingo@xxxxxxxxxx>,
Borislav Petkov <bp@xxxxxxxxx>,
"H. Peter Anvin" <hpa@xxxxxxxxx>,
stable@xxxxxxxxxxxxxxx
Subject: [PATCH 0/3] x86: Fix some bugs related to ITS mitigation
Date: Wed, 28 May 2025 14:35:54 +0200
Message-ID: <20250528123557.12847-1-jgross@xxxxxxxx>
X-Mailer: git-send-email 2.43.0
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.80
X-Spamd-Result: default: False [-2.80 / 50.00];
BAYES_HAM(-3.00)[99.99%];
NEURAL_HAM_LONG(-1.00)[-1.000];
MID_CONTAINS_FROM(1.00)[];
R_MISSING_CHARSET(0.50)[];
NEURAL_HAM_SHORT(-0.20)[-1.000];
MIME_GOOD(-0.10)[text/plain];
MIME_TRACE(0.00)[0:+];
RCPT_COUNT_TWELVE(0.00)[12];
RCVD_VIA_SMTP_AUTH(0.00)[];
ARC_NA(0.00)[];
DKIM_SIGNED(0.00)[suse.com:s=susede1];
FUZZY_BLOCKED(0.00)[rspamd.com];
FROM_EQ_ENVFROM(0.00)[];
FROM_HAS_DN(0.00)[];
TO_DN_SOME(0.00)[];
RCVD_COUNT_TWO(0.00)[2];
TO_MATCH_ENVRCPT_ALL(0.00)[];
DBL_BLOCKED_OPENRESOLVER(0.00)[suse.com:mid,imap1.dmz-prg2.suse.org:helo];
RCVD_TLS_ALL(0.00)[]
X-Spam-Level:
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Running as a Xen PV guest uncovered some bugs when ITS mitigation is
active.
Juergen Gross (3):
x86/execmem: don't use PAGE_KERNEL protection for code pages
x86/mm/pat: don't collapse pages without PSE set
x86/alternative: make kernel ITS thunks read-only
arch/x86/kernel/alternative.c | 16 ++++++++++++++++
arch/x86/mm/init.c | 2 +-
arch/x86/mm/pat/set_memory.c | 3 +++
3 files changed, 20 insertions(+), 1 deletion(-)
--
2.43.0
Return-Path: <linux-kernel+bounces-665451-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D81E741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:36:17 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 793921BC5FC0
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:36:30 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id A3F882853E2;
Wed, 28 May 2025 12:36:05 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=amarulasolutions.com header.i=@amarulasolutions.com header.b="Aw5z0QSc"
Received: from mail-yb1-f171.google.com (mail-yb1-f171.google.com [209.85.219.171])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4D2BE28469D
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:36:03 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.171
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435764; cv=none; b=DAWlrD71BQZLgpmJA+du8IjVPStDarrnParZ1mEafy2uBn9czNx/5jUhWewq6gdw3u9aWmpaKhsH4URNIk4JfH0idORjEx04PFITZzxysds74aAlIZWKM2SwTBw4PSbzq/aH+dxXUsGp5z9oMh+etJ6AE4mdAshRbCUnA7PK4Xc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435764; c=relaxed/simple;
bh=ZhZaCx9zTAfydyiSk7i4+D3+796XUnIpYm5sDEhibbk=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=qsMCFwru/hW1VB2iKylYKKGVTk+NPtS/FNYzpJDyKp1MmnBKwIDf6KgVtL4y3Sug40sGRnojcxskqf7ZfTB6CfOtsfy6wEPOJQ1+bUBWxfOBJQ1upe9EVpxtAMJHMfj3I91bp6amUxfFZKkjWoLBBs7t2YrUlR3Y+V80vhWwAPA=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=amarulasolutions.com; spf=pass smtp.mailfrom=amarulasolutions.com; dkim=pass (1024-bit key) header.d=amarulasolutions.com header.i=@amarulasolutions.com header.b=Aw5z0QSc; arc=none smtp.client-ip=209.85.219.171
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=amarulasolutions.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=amarulasolutions.com
Received: by mail-yb1-f171.google.com with SMTP id 3f1490d57ef6-e733a6ff491so3621134276.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 05:36:03 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=amarulasolutions.com; s=google; t=1748435762; x=1749040562; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=2Y2nJxgpLq/4ajBXNTSM9IN0ALNLXkV13ENJ/HewBaA=;
b=Aw5z0QScH2LZafG66RDOljRoUaAq3gM2OGOhltff6mdMqOcuOnMSWCUlynnyhMgIuJ
5b1tw5VPsBBnx9y6VuyEP11jkrnw3qEw5w+Hq1f1zfKnIV25G/syGnXvXU0dxY6skkTM
5ND+vGAOKxH8ow6b/tZePm03QG6KbXxsZJVkE=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748435762; x=1749040562;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=2Y2nJxgpLq/4ajBXNTSM9IN0ALNLXkV13ENJ/HewBaA=;
b=UfkbJItj8plLGaFbMbhSo6e0CtDfmBtcXGCarGI/2hebdfLs1hOsDVSuhJ9un8sp5U
F2Klyt+uACHCH24ELiYmjt0lVb0S2kh+O+SEWNH43hM1H+jP1/DzgtBQXJNg64KzsgFK
IAVuziectaV+O1dvmvsp14QHZQ5hZOQh/N0sRHb+YO9rj+QzkFyQ6ftto1i1P1hVj7NK
EmUHMfl9KCE2jjbicK5KTTJ2TyeMX347+Oe6+DUAwe0PK5yZ3SspDS33SPWuTZ1UBy8F
/1n55JJIy0l+pzwlqJvoDdVLAzRgRjfrcMpC7hkgmCHAyom+fphYnxraJLc4gCyIGWjo
kprA==
X-Gm-Message-State: AOJu0YyZS9HqAAuW5ki5t1sRy+HSB3y89h4CSwTjVAEIf+1DjlCB9IcM
miLWvUZVf4ARRv+T5cAGcHdQYRkhwfAyzrl/pfx7prNOQm9HiIMqRTboutdlsAF59TrsZHRpiUs
FvmnEagxmspGscUrNNuQ/75wrhuhKtznK3pKpyMhOHw==
X-Gm-Gg: ASbGncuptOwwTDzcOFxBmzQ6AWZG7rPyYVeI3f4iliBu774FMlK1T5ui69wVvLtufcu
US/Bk8GgNfyFU4G53evLK7TXtEFsEqA4/rZzNuG3BfkYnS+bknMIdra5RJ1onMQDAuH8WTLts6s
pLPB0pQmxTbLfX0z2Uz4x9Ru4hEZQ3gKzQFtUGKoZQX58qIAd8BbNyl6Agpd4YQRMLLA==
X-Google-Smtp-Source: AGHT+IHBh35vbTwgJCVmI6qYBeU0Sp2Wx1M+Pq2Rp63W3aCe0f9Vwlcw2TxiYl89UFgJ0Ni/gNn9cRNUEGm7TvbhuTg=
X-Received: by 2002:a05:6902:20c8:b0:e7d:8a63:1a2a with SMTP id
3f1490d57ef6-e7d919b04c6mr18500419276.25.1748435762006; Wed, 28 May 2025
05:36:02 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250528121306.1464830-1-dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
<20250528121306.1464830-5-dario.binacchi@xxxxxxxxxxxxxxxxxxxx> <20250528-toucanet-of-utter-conversion-2bb1c7-mkl@xxxxxxxxxxxxxx>
In-Reply-To: <20250528-toucanet-of-utter-conversion-2bb1c7-mkl@xxxxxxxxxxxxxx>
From: Dario Binacchi <dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 14:35:49 +0200
X-Gm-Features: AX0GCFsWpbnRJlmj0FdLliCaul8VD_OZHEgOqPPNi4PhesFCouLSLcxJegiNFSU
Message-ID: <CABGWkvqAy+-mjhXFKc9dkeJnZKLKuC23=Dmn3axJx_1+5fLWSw@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v2 4/4] ARM: dts: mxs: support i.MX28 Amarula rmm board
To: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx, Rob Herring <robh@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>, devicetree@xxxxxxxxxxxxxxx,
linux-amarula@xxxxxxxxxxxxxxxxxxxx, Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>,
imx@xxxxxxxxxxxxxxx, Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>,
Shawn Guo <shawnguo@xxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>, michael@xxxxxxxxxxxxxxxxxxxx,
Fabio Estevam <festevam@xxxxxxxxx>, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 2:21=E2=80=AFPM Marc Kleine-Budde <mkl@pengutronix.=
de> wrote:
>
> On 28.05.2025 14:11:41, Dario Binacchi wrote:
> > The board includes the following resources:
> > - 256 Mbytes NAND Flash
> > - 128 Mbytes DRAM DDR2
> > - CAN
> > - USB 2.0 high-speed/full-speed
> > - Ethernet MAC
> >
> > Signed-off-by: Dario Binacchi <dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
>
> [...]
>
> > + reg_3v3: regulator-3v3 {
> > + compatible =3D "regulator-fixed";
> > + regulator-name =3D "3v3";
> > + regulator-min-microvolt =3D <3300000>;
> > + regulator-max-microvolt =3D <3300000>;
> > + regulator-always-on;
> > + };
>
> [...]
>
> > +&can0 {
> > + pinctrl-names =3D "default";
> > + pinctrl-0 =3D <&can0_pins_a>;
> > + xceiver-supply =3D <®_3v3>;
>
> The xceiver-supply "reg_3v3" is an always fixed regulator, that doesn't
> switch a GPIO, so IMHO, you can remove it. Saves a bit of runtime mem.
Yes, you're right.
Removed and verified.
It works.
Thanks and regards,
Dario
>
> > + status =3D "okay";
> > +};
>
> regards,
> Marc
>
> --
> Pengutronix e.K. | Marc Kleine-Budde |
> Embedded Linux | https://www.pengutronix.de |
> Vertretung N=C3=BCrnberg | Phone: +49-5121-206917-129 |
> Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
--=20
Dario Binacchi
Senior Embedded Linux Developer
dario.binacchi@xxxxxxxxxxxxxxxxxxxx
__________________________________
Amarula Solutions SRL
Via Le Canevare 30, 31100 Treviso, Veneto, IT
T. +39 042 243 5310
info@xxxxxxxxxxxxxxxxxxxx
www.amarulasolutions.com
Return-Path: <linux-kernel+bounces-665452-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1C7E441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:36:36 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id B8DCC1BC6F5E
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:36:47 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 26C81286424;
Wed, 28 May 2025 12:36:10 +0000 (UTC)
Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 064F328641E
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:36:07 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.130
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435769; cv=none; b=Ai1YCvhovFbvRrnVQizyrSOa7taD0Hi2OSM2dObx6GPH5IEMMn46ibg8BHNbY6vzbxgxO18WTsYM10cPIIXNBgbLOzJdbwbvssP9qVpIqxM0xhcWVlEav7sMcg+Jx7bO7geFdXHlI0B36mxWBvcZu+7N3CYz8rjpLpV5rbpoFzk=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435769; c=relaxed/simple;
bh=Ao6Yj7X14J3VPAgLaAb1nmrQ9mdqFFBKa+cv/pz23LM=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=jLaDa/RMd1z5UnCC8+vn48qHbSOH146U+aeVpjJMcnA1NDpV5Fzz+UloVdCsyToVhtnMtkZ/NLir8KKHFI52EULmEDRlD/4uVscQdSGmh20jSZW1g99ZviJsU/YcgyT/1v6DoARzeXydRCnEoS4dHr6MoYMMjV+NjavHPsChfD4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; arc=none smtp.client-ip=195.135.223.130
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com
Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(No client certificate requested)
by smtp-out1.suse.de (Postfix) with ESMTPS id 35AD321BEA;
Wed, 28 May 2025 12:36:06 +0000 (UTC)
Authentication-Results: smtp-out1.suse.de;
none
Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(No client certificate requested)
by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id BFC36136E0;
Wed, 28 May 2025 12:36:05 +0000 (UTC)
Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167])
by imap1.dmz-prg2.suse.org with ESMTPSA
id Q2/nLDUDN2idKQAAD6G6ig
(envelope-from <jgross@xxxxxxxx>); Wed, 28 May 2025 12:36:05 +0000
From: Juergen Gross <jgross@xxxxxxxx>
To: linux-kernel@xxxxxxxxxxxxxxx,
x86@xxxxxxxxxx
Cc: xin@xxxxxxxxx,
Juergen Gross <jgross@xxxxxxxx>,
Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
Andy Lutomirski <luto@xxxxxxxxxx>,
Peter Zijlstra <peterz@xxxxxxxxxxxxx>,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>,
Ingo Molnar <mingo@xxxxxxxxxx>,
Borislav Petkov <bp@xxxxxxxxx>,
"H. Peter Anvin" <hpa@xxxxxxxxx>,
stable@xxxxxxxxxxxxxxx
Subject: [PATCH 1/3] x86/execmem: don't use PAGE_KERNEL protection for code pages
Date: Wed, 28 May 2025 14:35:55 +0200
Message-ID: <20250528123557.12847-2-jgross@xxxxxxxx>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250528123557.12847-1-jgross@xxxxxxxx>
References: <20250528123557.12847-1-jgross@xxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Rspamd-Pre-Result: action=no action;
module=replies;
Message is reply to one we originated
X-Spamd-Result: default: False [-4.00 / 50.00];
REPLY(-4.00)[]
X-Rspamd-Queue-Id: 35AD321BEA
X-Rspamd-Pre-Result: action=no action;
module=replies;
Message is reply to one we originated
X-Rspamd-Action: no action
X-Spam-Level:
X-Rspamd-Server: rspamd1.dmz-prg2.suse.org
X-Spam-Score: -4.00
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
In case X86_FEATURE_PSE isn't available (e.g. when running as a Xen
PV guest), execmem_arch_setup() will fall back to use PAGE_KERNEL
protection for the EXECMEM_MODULE_TEXT range.
This will result in attempts to execute code with the NX bit set in
case of ITS mitigation being applied.
Avoid this problem by using PAGE_KERNEL_EXEC protection instead,
which will not set the NX bit.
Cc: <stable@xxxxxxxxxxxxxxx>
Reported-by: Xin Li <xin@xxxxxxxxx>
Fixes: 5185e7f9f3bd ("x86/module: enable ROX caches for module text on 64 bit")
Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
---
arch/x86/mm/init.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 7456df985d96..f5012ae31d8b 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -1089,7 +1089,7 @@ struct execmem_info __init *execmem_arch_setup(void)
pgprot = PAGE_KERNEL_ROX;
flags = EXECMEM_KASAN_SHADOW | EXECMEM_ROX_CACHE;
} else {
- pgprot = PAGE_KERNEL;
+ pgprot = PAGE_KERNEL_EXEC;
flags = EXECMEM_KASAN_SHADOW;
}
--
2.43.0
Return-Path: <linux-kernel+bounces-665453-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 8814841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:36:47 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 778634E4848
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:36:45 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 9EBFB2857D1;
Wed, 28 May 2025 12:36:17 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b="d31Gx/GP";
dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b="R/7pgUp+"
Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4364B2836BE
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:36:15 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.130
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435777; cv=none; b=YOHo6Rnm5/MI3fwAyznxkfJdfRWKiVSCT8+xgvsLRDU5i1P38r1NIUPudos1XxK7AzASEnBFCzwzio3PRNqFEulvDWKDWzXJ4EbjJeuZmhTT02MQ8z3LoMKMwbS5xN5eP62vIbZQygOjaavgQuHVerJ2mLM5J9KoMI/CpljIIp8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435777; c=relaxed/simple;
bh=ssJ0Vjc2+wN1MmE+iyXyH6fQJtr9m258QsChEelUTm4=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=LJqmMxwG7uTPWPdCQN+9TIn1V2g+2We/DMTxqVQnv0n4j9gxUIzM6SptuM693ASMOWafBKiRVzOEBzWEU2L/R70bgSEFe93lsKb/lp3YG2shgv90lwIQbT1v6zsfZIVk+NLUnV3cYjJAx9cD6j9CoEwOLzCPTW5eoqfUAzy5Pu4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b=d31Gx/GP; dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b=R/7pgUp+; arc=none smtp.client-ip=195.135.223.130
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com
Received: from imap1.dmz-prg2.suse.org (unknown [10.150.64.97])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(No client certificate requested)
by smtp-out1.suse.de (Postfix) with ESMTPS id 27C0F21AE4;
Wed, 28 May 2025 12:36:12 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
t=1748435773; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
mime-version:mime-version:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=zlzcsl/OislF/CTk7Ff7aWZAEbJyJ7hReAUFJ1BEXf0=;
b=d31Gx/GPN2G366m/LTUDl7etfCfaCQfrAfLT6i5US++QI9lrfLD1RnXEoEuQ2GTvzZca+R
naRXUT6f6A7+j+hX/ro6XD0f33RVBOuttpK8CPRex+XXrQFHe1LfXCfK+RSi2oP2ZyYdup
JmVxbZhE/9+aH3F8RV8iFtjr2UM5o1E=
Authentication-Results: smtp-out1.suse.de;
none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
t=1748435772; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
mime-version:mime-version:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=zlzcsl/OislF/CTk7Ff7aWZAEbJyJ7hReAUFJ1BEXf0=;
b=R/7pgUp+6V9xuegpTJwo28lkzGp9cn3fX//TJnLRUDj+Qf6zj0AOEuScKHCNXZqNbK2iX3
gqJVWCYuxNf0PrN/quDPzqP79n2nIzaFOy6cGMkzRXikSNjr9JAg/yflfKsU0h4BPjZmEZ
el+BZnljuWlllEQm6HtcPJwpID1KxDo=
Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(No client certificate requested)
by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id AB43E136E0;
Wed, 28 May 2025 12:36:11 +0000 (UTC)
Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167])
by imap1.dmz-prg2.suse.org with ESMTPSA
id V60YKDsDN2ijKQAAD6G6ig
(envelope-from <jgross@xxxxxxxx>); Wed, 28 May 2025 12:36:11 +0000
From: Juergen Gross <jgross@xxxxxxxx>
To: linux-kernel@xxxxxxxxxxxxxxx,
x86@xxxxxxxxxx
Cc: xin@xxxxxxxxx,
Juergen Gross <jgross@xxxxxxxx>,
Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
Andy Lutomirski <luto@xxxxxxxxxx>,
Peter Zijlstra <peterz@xxxxxxxxxxxxx>,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>,
Ingo Molnar <mingo@xxxxxxxxxx>,
Borislav Petkov <bp@xxxxxxxxx>,
"H. Peter Anvin" <hpa@xxxxxxxxx>,
stable@xxxxxxxxxxxxxxx
Subject: [PATCH 2/3] x86/mm/pat: don't collapse pages without PSE set
Date: Wed, 28 May 2025 14:35:56 +0200
Message-ID: <20250528123557.12847-3-jgross@xxxxxxxx>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250528123557.12847-1-jgross@xxxxxxxx>
References: <20250528123557.12847-1-jgross@xxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Score: -6.80
X-Spamd-Result: default: False [-6.80 / 50.00];
REPLY(-4.00)[];
BAYES_HAM(-3.00)[100.00%];
NEURAL_HAM_LONG(-1.00)[-1.000];
MID_CONTAINS_FROM(1.00)[];
R_MISSING_CHARSET(0.50)[];
NEURAL_HAM_SHORT(-0.20)[-1.000];
MIME_GOOD(-0.10)[text/plain];
MIME_TRACE(0.00)[0:+];
RCPT_COUNT_TWELVE(0.00)[12];
RCVD_VIA_SMTP_AUTH(0.00)[];
ARC_NA(0.00)[];
DKIM_SIGNED(0.00)[suse.com:s=susede1];
FUZZY_BLOCKED(0.00)[rspamd.com];
FROM_EQ_ENVFROM(0.00)[];
FROM_HAS_DN(0.00)[];
TO_DN_SOME(0.00)[];
DBL_BLOCKED_OPENRESOLVER(0.00)[suse.com:mid,suse.com:email,imap1.dmz-prg2.suse.org:helo];
RCVD_COUNT_TWO(0.00)[2];
TO_MATCH_ENVRCPT_ALL(0.00)[];
RCVD_TLS_ALL(0.00)[]
X-Spam-Level:
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Collapsing pages to a leaf PMD or PUD should be done only if
X86_FEATURE_PSE is available, which is not the case when running e.g.
as a Xen PV guest.
Cc: <stable@xxxxxxxxxxxxxxx>
Fixes: 41d88484c71c ("x86/mm/pat: restore large ROX pages after fragmentation")
Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
---
arch/x86/mm/pat/set_memory.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c
index 30ab4aced761..e6a6ac8cdc1d 100644
--- a/arch/x86/mm/pat/set_memory.c
+++ b/arch/x86/mm/pat/set_memory.c
@@ -1257,6 +1257,9 @@ static int collapse_pmd_page(pmd_t *pmd, unsigned long addr,
pgprot_t pgprot;
int i = 0;
+ if (!cpu_feature_enabled(X86_FEATURE_PSE))
+ return 0;
+
addr &= PMD_MASK;
pte = pte_offset_kernel(pmd, addr);
first = *pte;
--
2.43.0
Return-Path: <linux-kernel+bounces-665454-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E51E441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:37:18 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 07ADD188BA7E
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:37:10 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 345BC28689A;
Wed, 28 May 2025 12:36:22 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b="s1EnRGDG";
dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b="s1EnRGDG"
Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD2C528688D
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:36:19 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435781; cv=none; b=NS/+VcH6nOGkv++LwQPMAxIpb88cj59vNkIDfAejWBIGoQlRMqOvOsoSpNp777RqPSV1oZ1iUHXsoGRULzBVEGlfuNN1IqieMP+PgRJ/usZYqe6RibhBswjcJuUhWVp4vz734Zmw5GyFw1jRVqjdFIeIdldk5JfeGhdgJ05UbKU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435781; c=relaxed/simple;
bh=DDn3bDzacoLdEbYTtaefGSuDRRRTSSmIS3JDSnPZlR4=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=QPuo0uSvGIsuiYOvvPhvOQoYy53cKO1+XmdmGREQEuTBsaopzTJws+KoUB5qcIjhPNM8tIDSGWMovMatFXki16wWoyDVXoOu0ZONI81Sd2XPl6ap9yxcG231W3/CXwJtM3yvSwhIaoHXsi47fmnwY/GywCsswAsjvICY7Ik/yH0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b=s1EnRGDG; dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b=s1EnRGDG; arc=none smtp.client-ip=195.135.223.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com
Received: from imap1.dmz-prg2.suse.org (unknown [10.150.64.97])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(No client certificate requested)
by smtp-out2.suse.de (Postfix) with ESMTPS id D45411F8B9;
Wed, 28 May 2025 12:36:17 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
t=1748435777; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
mime-version:mime-version:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=j/hGv7jZb/4TX+WGvVm1B9o6zeX04OtGYX/XldpPRP0=;
b=s1EnRGDGGug3fifeX50rJKby6jd0HYMtDaLrLLcOoQ4BvOcApT9NX1c2yaGdzf89038Izn
hcgH8XJEmPHXri2HhA8O9wk+RmjLAaIdo5pP4CUmaQmymrc2fNSnaRc8v3QDI54kfQkUvD
lyLg+5Avc/Ziv1sawOO/u6Dbx4myZPI=
Authentication-Results: smtp-out2.suse.de;
none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
t=1748435777; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
mime-version:mime-version:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=j/hGv7jZb/4TX+WGvVm1B9o6zeX04OtGYX/XldpPRP0=;
b=s1EnRGDGGug3fifeX50rJKby6jd0HYMtDaLrLLcOoQ4BvOcApT9NX1c2yaGdzf89038Izn
hcgH8XJEmPHXri2HhA8O9wk+RmjLAaIdo5pP4CUmaQmymrc2fNSnaRc8v3QDI54kfQkUvD
lyLg+5Avc/Ziv1sawOO/u6Dbx4myZPI=
Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(No client certificate requested)
by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 85331136E0;
Wed, 28 May 2025 12:36:17 +0000 (UTC)
Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167])
by imap1.dmz-prg2.suse.org with ESMTPSA
id BDIbH0EDN2ipKQAAD6G6ig
(envelope-from <jgross@xxxxxxxx>); Wed, 28 May 2025 12:36:17 +0000
From: Juergen Gross <jgross@xxxxxxxx>
To: linux-kernel@xxxxxxxxxxxxxxx,
x86@xxxxxxxxxx
Cc: xin@xxxxxxxxx,
Juergen Gross <jgross@xxxxxxxx>,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>,
Ingo Molnar <mingo@xxxxxxxxxx>,
Borislav Petkov <bp@xxxxxxxxx>,
Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
"H. Peter Anvin" <hpa@xxxxxxxxx>,
stable@xxxxxxxxxxxxxxx
Subject: [PATCH 3/3] x86/alternative: make kernel ITS thunks read-only
Date: Wed, 28 May 2025 14:35:57 +0200
Message-ID: <20250528123557.12847-4-jgross@xxxxxxxx>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250528123557.12847-1-jgross@xxxxxxxx>
References: <20250528123557.12847-1-jgross@xxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spamd-Result: default: False [-6.80 / 50.00];
REPLY(-4.00)[];
BAYES_HAM(-3.00)[100.00%];
NEURAL_HAM_LONG(-1.00)[-1.000];
MID_CONTAINS_FROM(1.00)[];
R_MISSING_CHARSET(0.50)[];
NEURAL_HAM_SHORT(-0.20)[-1.000];
MIME_GOOD(-0.10)[text/plain];
RCVD_COUNT_TWO(0.00)[2];
ARC_NA(0.00)[];
RCVD_VIA_SMTP_AUTH(0.00)[];
FROM_HAS_DN(0.00)[];
TO_DN_SOME(0.00)[];
MIME_TRACE(0.00)[0:+];
TO_MATCH_ENVRCPT_ALL(0.00)[];
FROM_EQ_ENVFROM(0.00)[];
RCPT_COUNT_SEVEN(0.00)[10];
FUZZY_BLOCKED(0.00)[rspamd.com];
DBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:helo,suse.com:email,suse.com:mid];
DKIM_SIGNED(0.00)[suse.com:s=susede1];
R_RATELIMIT(0.00)[to_ip_from(RLfdszjqhz8kzzb9uwpzdm8png)];
RCVD_TLS_ALL(0.00)[]
X-Spam-Level:
X-Spam-Score: -6.80
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
When allocating memory pages for kernel ITS thunks, make them read-only
after having written the last thunk.
This will be needed when X86_FEATURE_PSE isn't available, as the thunk
memory will have PAGE_KERNEL_EXEC protection, which is including the
write permission.
Cc: <stable@xxxxxxxxxxxxxxx>
Fixes: 5185e7f9f3bd ("x86/module: enable ROX caches for module text on 64 bit")
Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
---
arch/x86/kernel/alternative.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
index ecfe7b497cad..bd974a0ac88a 100644
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
@@ -217,6 +217,15 @@ static void *its_alloc(void)
return no_free_ptr(page);
}
+static void its_set_kernel_ro(void *addr)
+{
+#ifdef CONFIG_MODULES
+ if (its_mod)
+ return;
+#endif
+ execmem_restore_rox(addr, PAGE_SIZE);
+}
+
static void *its_allocate_thunk(int reg)
{
int size = 3 + (reg / 8);
@@ -234,6 +243,8 @@ static void *its_allocate_thunk(int reg)
#endif
if (!its_page || (its_offset + size - 1) >= PAGE_SIZE) {
+ if (its_page)
+ its_set_kernel_ro(its_page);
its_page = its_alloc();
if (!its_page) {
pr_err("ITS page allocation failed\n");
@@ -2338,6 +2349,11 @@ void __init alternative_instructions(void)
apply_retpolines(__retpoline_sites, __retpoline_sites_end);
apply_returns(__return_sites, __return_sites_end);
+ /* Make potential last thunk page read-only. */
+ if (its_page)
+ its_set_kernel_ro(its_page);
+ its_page = NULL;
+
/*
* Adjust all CALL instructions to point to func()-10, including
* those in .altinstr_replacement.
--
2.43.0
Return-Path: <linux-kernel+bounces-665456-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id B99B241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:37:27 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 82EB74E49FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:37:23 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 0BFC5283FD3;
Wed, 28 May 2025 12:36:55 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="Rk8R8F3L"
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7D3E62853E2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:36:52 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435814; cv=none; b=lOHSS+E2HnwnYecRggcPant1+Vau0dbjF9CrdfqqmTRPuWqOLrLVa3XLFP+a/cPTFz5T07UHRIVUOT8gVOLq0Hdc6UJ3e/Ka3IqbfOKQeeGB7I2BoYBI8h5MhxFUy/f2XZfxgG6EyB3+lo5yOzNQoNKOPpc3oZQiFZmSEFlKjtc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435814; c=relaxed/simple;
bh=+d+Dgx6T33vD0cozNs7bK5fSBnBdozXp1xhwM5wUbEU=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=doEJdw9CqMdfbxRw7IyROY5Xxj9/xJe/WK6JNvWlwgUbtByYa4BwGlAsaXkZ9bsvdjq+woTIiYUE/Wnl7/9GtrspFatK1ipdloJpHGF0qXk/c1sUNo07lEAgZDwf/oCxjzp6R2ZtoGoOEMJQPuhc12q5UQzfm1y9ASVetFJDON0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=Rk8R8F3L; arc=none smtp.client-ip=205.220.168.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com
Received: from pps.filterd (m0279862.ppops.net [127.0.0.1])
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S8bVnw001593
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:36:51 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=
cc:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to; s=qcppdkim1; bh=7iqoOFkOMxkEavyQAIIyueEL
JpmJHfQksJO2ArqPxus=; b=Rk8R8F3Lq2mtJAmhJRQBtrdU0JLCp4axi2aLgC+I
pYOVcYfwRVTlgWlBmsVE14GqMqLi0QPjXuurSztCbJ8l+MU6AqDkuLtyWceH1aFM
4v/e2HuVvv4KybkMOpREmsRksz9mc8M40fqpjmEk95KGSu6nPmkWYzs6Vf3jsZp5
bwlERrY3LH0hsfewE2KQ0azk3M2PEzQkRdAu2wgUeMTAPyG9dE9FcXToOIVsC+sn
216W9qqxk2OzUEYTsVmHujXf5TYZRBhyLnj2+e3S8NDA2shMiTms1nPMF8/9bLcq
tvMRIQL781CG387gzCGkiPh5jmi3OfRCa2GhvJoK7R1z1g==
Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199])
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46u6vjt86m-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT)
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:36:51 +0000 (GMT)
Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-7c54a6b0c70so398670285a.0
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 05:36:51 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748435810; x=1749040610;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=7iqoOFkOMxkEavyQAIIyueELJpmJHfQksJO2ArqPxus=;
b=tA44VbF8aiA+Mf52dJdVYAFFUOJnOyBDLdJk1cCEpVmgbpDXPqP0V4B7LASOXs1z7U
XDkGSoomLM/4bMQ1Axtiv086TulolQaiXNW0i0bZANF580n1+MFc+BCA3vDITWZWL63J
bDr3zwl4DnLso6W2ejyLMbCyV6gz0zfU026u/oCrbJOBfmUbI5QiRTF+5qjZeqM/1YHN
sLIp57Dr0DiyP7Z0BqQskNO1KaXCnew7P/fmXJ+ONC+d2CeorXv7jNYYSTP6LtK37cas
ZSFJoDxDyVzgAExHVVDXm+sG5Jwvnwwsuw4jU0zetVdvNTZZMhBs1E7FbYxrHsfFPy/+
zjjA==
X-Forwarded-Encrypted: i=1; AJvYcCUDSf62eEDYft2moGQV17Irexe2682l8sHYveTtTEOmA+8NAk8Ic0zOm3jW/Rq/wXEfDlTwauwykVMe0b4=@vger.kernel.org
X-Gm-Message-State: AOJu0Yytw/zu5Hpo/BoXmp0qSqlHJ6macy9qF7dAtTlQvhODh3INjgPG
d3SlTndstEldPg91q/zRnCO7qcV5e+Li34lx0RG+EIGOE0aw+c1sOs4IXUkTopavSL4nnFmXlY5
iEl76NxutI3ue5nPCM9csxaNhywfnxHIpjcJATd0nFd6L5nP2Dr8vLo2/mzsXU2YaBGA=
X-Gm-Gg: ASbGnct3O7+H+XUFj7Y7/HoX6iD3zfdHNoqBb2WxMwawN17f2l0bQF7y72DI2HRUydX
Ci9U8opQ2c3UsrLWjCRX8f3BKKqW9X8TUWd5Z1ZtFOo9YBe9nIjbf+nGYm6mJgPcze3M2cuBtqs
y1Z9mZp4GTRCnEp4wSGqgE3PVf0GY9+6fhgKvRGi1jlp4k4oH2oIEDPKfrOR/l0tvqVrpApQSb5
oMeANLk916rj+meavM/aYnQw8JoyIjk/0jyU6UDihrtJmEWyz6Y3GkC6SBKgHcLlCKsGFTdSV3R
3GQM79hvlonemoDZA01EK2psxoEa1UmvTfBzC+fVvYTahDyR5EXcoAmhue5jFuUP2rKSS3XrsB8
=
X-Received: by 2002:a05:620a:3194:b0:7c5:9c12:fc8 with SMTP id af79cd13be357-7ceecbe06b6mr2326087185a.38.1748435810296;
Wed, 28 May 2025 05:36:50 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IHmzZ3O9RWYNfqsDI1F+HWtAjiLwMglKlUfuv0dBseFqNB1H4SfpNa0Y/qcbFGi1IyFZlepfA==
X-Received: by 2002:a05:620a:3194:b0:7c5:9c12:fc8 with SMTP id af79cd13be357-7ceecbe06b6mr2326082685a.38.1748435809851;
Wed, 28 May 2025 05:36:49 -0700 (PDT)
Received: from eriador.lumag.spb.ru (2001-14ba-a0c3-3a00--7a1.rev.dnainternet.fi. [2001:14ba:a0c3:3a00::7a1])
by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-32a79eb954dsm2287631fa.42.2025.05.28.05.36.48
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 05:36:48 -0700 (PDT)
Date: Wed, 28 May 2025 15:36:47 +0300
From: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
To: Melody Olvera <melody.olvera@xxxxxxxxxxxxxxxx>
Cc: Vinod Koul <vkoul@xxxxxxxxxx>, Kishon Vijay Abraham I <kishon@xxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Wesley Cheng <quic_wcheng@xxxxxxxxxxx>,
Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>,
Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>,
Bjorn Andersson <andersson@xxxxxxxxxx>,
Konrad Dybcio <konradybcio@xxxxxxxxxx>,
Catalin Marinas <catalin.marinas@xxxxxxx>,
Will Deacon <will@xxxxxxxxxx>, linux-arm-msm@xxxxxxxxxxxxxxx,
linux-phy@xxxxxxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-usb@xxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
Subject: Re: [PATCH v6 04/10] phy: qcom: qmp-combo: Add new PHY sequences for
SM8750
Message-ID: <dnvjpirgqahdlt3kxcpyhooaovpqnoobetnt3b6q6fzsrsnewr@p4smaofzf4qp>
References: <20250527-sm8750_usb_master-v6-0-d58de3b41d34@xxxxxxxxxxxxxxxx>
<20250527-sm8750_usb_master-v6-4-d58de3b41d34@xxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250527-sm8750_usb_master-v6-4-d58de3b41d34@xxxxxxxxxxxxxxxx>
X-Authority-Analysis: v=2.4 cv=UOXdHDfy c=1 sm=1 tr=0 ts=68370363 cx=c_pps
a=HLyN3IcIa5EE8TELMZ618Q==:117 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10
a=dt9VzEwgFbYA:10 a=COk6AnOGAAAA:8 a=EUspDBNiAAAA:8 a=9yGODh8E-QI5J-fucZYA:9
a=CjuIK1q_8ugA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 a=TjNXssC_j7lpFel5tvFf:22
X-Proofpoint-ORIG-GUID: 0mSQISRSG8owBn35HWpPurr6HWLNye3Z
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDExMCBTYWx0ZWRfX9n9GtnHcyTBg
1K4qBOr/7xaUUXHyNYakOkhem5KRr6rFaO3V55OQLNAMaCOmZ9vNL2yzHuFs2IcNHO/9fJZfSk/
353TVOK7fPONMtfnL2bnypq7sqNSWLN1OqJVH8DM19g1Ck0gCfLPM4nncHcK8V4lmWQahPBcOuR
nzDg39KglS4TwXeUXXymS5e11HK+l/e8aOP8B0QU8bWqxJb1cnYIiLmXV3DyFz9d6XRRNR9rz1r
EZ2kR+4z1iahFLwJcGsjGTJBRKuzkFMbTDBeZmpCkAvi1ovkEBoTrPsc6z0RpQxHrBslidCp9l+
z8/Hy6HoSdXXd96zPUtF1SG4YHjAYNVGj11HLkrtR2P5fsV2JvgDh/9H95ZnHmOYsFkbnush2TA
9ZmIsc0k4pbavS0B7+Li2NUKcM2NHzf3pfWCb2HWPbPN0fq7k0tp4ASmgRpgfLt0RWjzmMNd
X-Proofpoint-GUID: 0mSQISRSG8owBn35HWpPurr6HWLNye3Z
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
clxscore=1015 phishscore=0 mlxscore=0 adultscore=0 priorityscore=1501
mlxlogscore=833 bulkscore=0 malwarescore=0 impostorscore=0 spamscore=0
suspectscore=0 lowpriorityscore=0 classifier=spam authscore=0 authtc=n/a
authcc= route=outbound adjust=0 reason=mlx scancount=1
engine=8.19.0-2505160000 definitions=main-2505280110
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 02:04:40PM -0700, Melody Olvera wrote:
> From: Wesley Cheng <quic_wcheng@xxxxxxxxxxx>
>
> Add new register offsets and PHY values for SM8750. Some of the previous
> definitions can be leveraged from older PHY versions as offsets within
> registers have not changed. This also adds the required PHY sequence that
> is recommended after running hardware characterization.
>
> Signed-off-by: Wesley Cheng <quic_wcheng@xxxxxxxxxxx>
> Signed-off-by: Melody Olvera <melody.olvera@xxxxxxxxxxxxxxxx>
> ---
> drivers/phy/qualcomm/phy-qcom-qmp-combo.c | 221 +++++++++++++++++++++
> drivers/phy/qualcomm/phy-qcom-qmp-pcs-usb-v8.h | 38 ++++
> drivers/phy/qualcomm/phy-qcom-qmp-pcs-v8.h | 32 +++
> drivers/phy/qualcomm/phy-qcom-qmp-qserdes-com-v8.h | 64 ++++++
> .../phy/qualcomm/phy-qcom-qmp-qserdes-txrx-v8.h | 68 +++++++
> drivers/phy/qualcomm/phy-qcom-qmp.h | 5 +
> 6 files changed, 428 insertions(+)
>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
--
With best wishes
Dmitry
Return-Path: <linux-kernel+bounces-665455-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id CEEAD41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:37:36 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id C08161BC6D84
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:37:21 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 4D82E2853FA;
Wed, 28 May 2025 12:36:39 +0000 (UTC)
Received: from mail-ua1-f42.google.com (mail-ua1-f42.google.com [209.85.222.42])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9C900285411;
Wed, 28 May 2025 12:36:36 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.42
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435798; cv=none; b=Pj7DAMbiJUyQA3VmpN1pt9p8y2BDlRiGAVnpqDsO1tnVO8Hv6vM8r6I7zpQkB9SGL/X+1AMQPFJMVwlbDy9Fn1UsVMqMoWhohU28UdlrddSiEGW+Nzw/U3Su2+Q1JAJru2j39dBeZRO6IJKB5om624U+shKp5X27zfWZIg2bRN8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435798; c=relaxed/simple;
bh=Tb8JwKiZIuYCl3tOsCNwIpx036fyGp61/t1y80b2mTM=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=NWtc3N3dk/bKFKug90xxuDsMY8AMs8THXFrhR1zkDqpZp2kCn9gtiwNQXg03TfF0k9IZkjNjibX/fTezDgU9sstoxpouPpWgEKAGY/vR06/9vEhimhusMGxFtg6JuaobFzyczoEKT/fsYeCcnOdycLv0tZhqG+F906olnrIwKHc=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux-m68k.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.222.42
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux-m68k.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-ua1-f42.google.com with SMTP id a1e0cc1a2514c-86d5e3ddb66so1273840241.2;
Wed, 28 May 2025 05:36:36 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748435794; x=1749040594;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=EttMl+UEO23MQ5/zgKZh51X1fkqP6brx9qDrKYFmyoA=;
b=Zz8NzvcetK05jErEbx/ZP8QJVx1G1THE7k6BzGtuwnEbL2Qlt7JPbihNQNyZy+irtN
rGQ7yMEwBzW0E7ZED5ZGqtWh7NW37aMscQmtkpmsHXqc9XMsrrsoDFuXuNTdzqdE7y78
FjurhvWJA3n7ltUBXfXRQ4VFzUmv++koJilWjNF12as13Vk/8ZCzu6MSqt94ard3Qimx
jGUEDKZ5CMFWkwCSuyoYDgLnReAseueGT4/haA6zy+bnAkE0NYt1h+jD1CGnfUPFZSTR
lqzEDhVXDhcGLkQKATNACqsfNhRRU1Bmfu2CJj1yIey71WaMBiRPWy/46NFRJwkRgaW2
bH2g==
X-Forwarded-Encrypted: i=1; AJvYcCVa0JJeYhTLJ34WgLsKtf4mDSUfm5oirLJbNQ/y5wBvWOsu3olB3WLKOsMk+tPA+2+B1xWh/QuB+uRu2Ro=@vger.kernel.org, AJvYcCWRlyQmU8QDqHotGTZlOMYs8Asmdyini862gJvv11kqpghYsMN07kdDBR4P0FRWnLtLAl9L/PCTXZgU@xxxxxxxxxxxxxxx, AJvYcCWUJT+wEWHZaGm0jBVz0QWYpTbEcBqHuiy7SOnk9H7HH4aDK8hEbcxPud7pga510WV4wOpOqt8rssHE@xxxxxxxxxxxxxxx, AJvYcCX9UlbJpcH8IqGWQADHeY0dJCieWJSUkNSMjH0vw2lz+c4vyOvv3D6aiJdQyr2v9nYScwmq8H4U63ggqJfS@xxxxxxxxxxxxxxx, AJvYcCXZasUqzV8vVyIZwXY2bJcoKtjTxpEPfMPoNP9KKJTdFBcnpIed0byge8siNpUPxAL3D3qAhLcmXHYVyvKfa4Fn8LA=@vger.kernel.org
X-Gm-Message-State: AOJu0YywLC8EMdRBpVJuq2XMLXCLZCWjlI7JPL8afTt3Q+CEo8eH8mRd
UQlLg+O8cnCeBnhjb1GvWmGEVqmq4NBCjrwneizw+LwBS+aXxFYaeEjjW0036KVB
X-Gm-Gg: ASbGncuEZYv5tV0/4YUZigYV5sBzjO1Rqe6YtjxRg0I8fwgHoxv874GIGzz9jmc+vkm
f8+FF+/ncD3WSM/Cs/ZzOnR09DLfvfZsdGjlaBNiL0VEbh1ogivtDBm64PpDWSXsPyce3CsJahp
BhsIdB+REanGq9TsKGrF9N+CRGvQNoirMmiIkAHflwl0kqPGYk6bfxyQWUEDMtqRfCKEOXj2HVI
uVnnBglR9aNrfkyj6Gz+l3xMT7IbhfSwZInfmOHI1QM8VPdpPidiC7fDUleHahoea/iP6a5z7z8
A4uqJARiEMdB/TFXFL07CuEJS1PpP3Ln7gYz1geQL9DFJVykJCpdETWQO51pvQxVXMIaCsR4JO6
tYfP1r0PDi5x09A==
X-Google-Smtp-Source: AGHT+IFqX++8xVp+nCvnBBtE1xW7PBsDc7dPeyBs/u6wrEFcPIIOb+1g2Ka1Xfb5vCu7pD3ebvj7wg==
X-Received: by 2002:a05:6122:d81:b0:526:720:704 with SMTP id 71dfb90a1353d-52f2c56e83emr12183548e0c.7.1748435793843;
Wed, 28 May 2025 05:36:33 -0700 (PDT)
Received: from mail-ua1-f41.google.com (mail-ua1-f41.google.com. [209.85.222.41])
by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-53066973c62sm872607e0c.44.2025.05.28.05.36.33
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 05:36:33 -0700 (PDT)
Received: by mail-ua1-f41.google.com with SMTP id a1e0cc1a2514c-87dfe8388f8so834813241.0;
Wed, 28 May 2025 05:36:33 -0700 (PDT)
X-Forwarded-Encrypted: i=1; AJvYcCUdZMdzQj2tjIztXLodfaEF0vTWGP+GzqSKV9mrRsm7pzPKRREnrw0WMod4EsutEqZrnYWnw4WVTDyZ@xxxxxxxxxxxxxxx, AJvYcCV1RP1XBseuqv33llEzkRQYA/Sy4ZB7qtd5jKFVvorlYyQDCz5K1F5TsQvcI+f0d/SnvprpTIbabd0gLJr2tSY/bpY=@vger.kernel.org, AJvYcCVcq3wrLQ6S8UN+kGk9Xm8SfIvKmB3+/nsM20AoorYIR1rPd9bRxne9pg5teFw8KbqJOwBJIbJpEzUG@xxxxxxxxxxxxxxx, AJvYcCW3Nug3JCEca+iJygNTK7HuzaGKOk2lY1tYBPVYpBFRJIxDcGylvOwwAsasTW0uvZr8zi9yh2VACqIy0sU=@vger.kernel.org, AJvYcCWoURuO9za1nINwJwZ3CyCghrYlBYTKN3WZv01ZrZZtE7tGUPyrmpVhFR0Vt8UhrfLa7pDYwvRGx3ZIKk+S@xxxxxxxxxxxxxxx
X-Received: by 2002:a05:6102:3e95:b0:4c5:1c2e:79f5 with SMTP id
ada2fe7eead31-4e42415db7dmr12024574137.16.1748435792883; Wed, 28 May 2025
05:36:32 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250528-pinctrl-const-desc-v1-0-76fe97899945@xxxxxxxxxx> <20250528-pinctrl-const-desc-v1-1-76fe97899945@xxxxxxxxxx>
In-Reply-To: <20250528-pinctrl-const-desc-v1-1-76fe97899945@xxxxxxxxxx>
From: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 14:36:20 +0200
X-Gmail-Original-Message-ID: <CAMuHMdX7krbAssbYpJ1RA1EkpOP26nUhuhmtSW8X9nJkB5amBQ@xxxxxxxxxxxxxx>
X-Gm-Features: AX0GCFvOxqSsQb6hAAUjvGh24-ydFSS3wze_W2Lj6wpwfm4mEoNhN1lAYOnpqvg
Message-ID: <CAMuHMdX7krbAssbYpJ1RA1EkpOP26nUhuhmtSW8X9nJkB5amBQ@xxxxxxxxxxxxxx>
Subject: Re: [PATCH 01/17] pinctrl: starfive: Allow compile testing on other platforms
To: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>
Cc: Linus Walleij <linus.walleij@xxxxxxxxxx>, Basavaraj Natikar <Basavaraj.Natikar@xxxxxxx>,
Shyam Sundar S K <Shyam-sundar.S-k@xxxxxxx>, Andrew Jeffery <andrew@xxxxxxxxxxxxxxxxxxxx>,
Joel Stanley <joel@xxxxxxxxx>, Avi Fishman <avifishman70@xxxxxxxxx>,
Tomer Maimon <tmaimon77@xxxxxxxxx>, Tali Perry <tali.perry1@xxxxxxxxx>,
Patrick Venture <venture@xxxxxxxxxx>, Nancy Yuen <yuenn@xxxxxxxxxx>,
Benjamin Fair <benjaminfair@xxxxxxxxxx>, =?UTF-8?Q?Jonathan_Neusch=C3=A4fer?= <j.neuschaefer@xxxxxxx>,
=?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= <rafal@xxxxxxxxxx>,
Broadcom internal kernel review list <bcm-kernel-feedback-list@xxxxxxxxxxxx>, Ray Jui <rjui@xxxxxxxxxxxx>,
Scott Branden <sbranden@xxxxxxxxxxxx>, Geert Uytterhoeven <geert+renesas@xxxxxxxxx>,
David Rhodes <david.rhodes@xxxxxxxxxx>, Richard Fitzgerald <rf@xxxxxxxxxxxxxxxxxxxxx>,
Charles Keepax <ckeepax@xxxxxxxxxxxxxxxxxxxxx>, Lorenzo Bianconi <lorenzo@xxxxxxxxxx>,
Sean Wang <sean.wang@xxxxxxxxxx>, Jesper Nilsson <jesper.nilsson@xxxxxxxx>,
Lars Persson <lars.persson@xxxxxxxx>,
Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx>, Damien Le Moal <dlemoal@xxxxxxxxxx>,
Vladimir Zapolskiy <vz@xxxxxxxxx>, Michal Simek <michal.simek@xxxxxxx>,
Emil Renner Berthing <kernel@xxxxxxxx>, Jianlong Huang <jianlong.huang@xxxxxxxxxxxxxxxx>,
Hal Feng <hal.feng@xxxxxxxxxxxxxxxx>, Matthias Brugger <matthias.bgg@xxxxxxxxx>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxx>,
Alexandre Belloni <alexandre.belloni@xxxxxxxxxxx>, Maxime Coquelin <mcoquelin.stm32@xxxxxxxxx>,
Alexandre Torgue <alexandre.torgue@xxxxxxxxxxx>, linux-gpio@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-aspeed@xxxxxxxxxxxxxxxx,
openbmc@xxxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx,
linux-renesas-soc@xxxxxxxxxxxxxxx, linux-sound@xxxxxxxxxxxxxxx,
patches@xxxxxxxxxxxxxxxxxxxxx, linux-mediatek@xxxxxxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxx, linux-riscv@xxxxxxxxxxxxxxxxxxx,
linux-rtc@xxxxxxxxxxxxxxx, linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Krzysztof,
On Wed, 28 May 2025 at 12:41, Krzysztof Kozlowski
<krzysztof.kozlowski@xxxxxxxxxx> wrote:
> Always descent to drivers/pinctrl/starfive/ because limiting it with
> SOC_STARFIVE is redundant since all of its Kconfig entries are already
... since its Makefile doesn't build anything if no Starfive-specific
pin control Kconfig options are enabled?
> have "depends on SOC_STARFIVE". This allows compile testing on other
> architectures with allyesconfig.
>
> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>
> ---
> drivers/pinctrl/Makefile | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/pinctrl/Makefile b/drivers/pinctrl/Makefile
> index ac27e88677d14f1c697e0d0be9f295c746556f4d..dcede70b25660833a158c298d1269d6ecea9dd8b 100644
> --- a/drivers/pinctrl/Makefile
> +++ b/drivers/pinctrl/Makefile
> @@ -82,7 +82,7 @@ obj-y += sophgo/
> obj-y += spacemit/
> obj-$(CONFIG_PINCTRL_SPEAR) += spear/
> obj-y += sprd/
> -obj-$(CONFIG_SOC_STARFIVE) += starfive/
> +obj-y += starfive/
> obj-$(CONFIG_PINCTRL_STM32) += stm32/
> obj-y += sunplus/
> obj-$(CONFIG_PINCTRL_SUNXI) += sunxi/
The actual change LGTM, so
Reviewed-by: Geert Uytterhoeven <geert+renesas@xxxxxxxxx>
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
Return-Path: <linux-kernel+bounces-665458-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id BB5BC41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:37:46 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id E06977AA655
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:36:27 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 280A42857FC;
Wed, 28 May 2025 12:37:24 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="l6LFxqXi"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5EE9E2857DD;
Wed, 28 May 2025 12:37:22 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435843; cv=none; b=U4ZT/rSqG7LIdhvsofsMmf8F8oJJRv/vB4ZeykKsjLTDBjUEh+7WTxdQ1uqgtPxtlZDnMBhUp01iVYUHF/bv8s8Ux85cLo0045vd2HePWgRYNshFf4fJXOLQCrTjgb2fYaK/5nQHdE+GGhGk3jcjvhIJvnCtx70OeiKAHSL1dbg=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435843; c=relaxed/simple;
bh=SwIjqVSvohQeuyiIN8uNmg4HfM55OQFRpt3e7TbxcD8=;
h=Date:Content-Type:MIME-Version:From:Cc:To:In-Reply-To:References:
Message-Id:Subject; b=gqzSjVl8jKfAJENx+sbZFb0cgWCVuuK66soIaDa5M5pr3EVLxcc+p2xihVvoR/CEvvJiaKJ0l9I8TA+AlAoyw4n1zy4SFNz4wEM2dt3RSgjblC3PHutycujEIDIFjOzbma1QQ/IwJjCRy4voyRd+8fGbWHSxses9qs0+b1qb/Iw=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=l6LFxqXi; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 93C89C4CEED;
Wed, 28 May 2025 12:37:22 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748435842;
bh=SwIjqVSvohQeuyiIN8uNmg4HfM55OQFRpt3e7TbxcD8=;
h=Date:From:Cc:To:In-Reply-To:References:Subject:From;
b=l6LFxqXiYbmvXE3d5oHFaMP/IYEtmIuQvHyEgP6i6Es59vyX6G2tFH2EcmgX7USz/
Zu6iviFZKESD6T/0kAU3SH4M36aqdUcxo8UgN23bVEa8j/It5Wsa+vhJiiJAbEz1KB
eNxeZhYiuxt98pGsccMpFYSxY5unPEoP5HwZZyvyJ/516Bg8dWHj2vVg/rryoi//cn
d0LrmR94N9X0hEen2iqLYbHl64HvCktAfuzI8nm7On4v2iFbYvlfFrUmWr8MyBGKYj
KABb26JvVbeuD3QnC/YcYfKG6nZOZArcd2miZTJ4gVuBVYSqDL0wiL8dAVDu5hY6JH
XyqFwilZK4pqQ==
Date: Wed, 28 May 2025 07:37:20 -0500
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
From: "Rob Herring (Arm)" <robh@xxxxxxxxxx>
Cc: soc@xxxxxxxxxxxxxxx, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, Ge Gordon <gordon.ge@xxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx,
BST Linux Kernel Upstream Group <bst-upstream@xxxxxxxxx>,
Arnd Bergmann <arnd@xxxxxxxx>, Conor Dooley <conor+dt@xxxxxxxxxx>,
devicetree@xxxxxxxxxxxxxxx
To: Albert Yang <yangzh0906@xxxxxxxxxxxxxxx>
In-Reply-To: <20250528085457.481372-1-yangzh0906@xxxxxxxxxxxxxxx>
References: <20250528085457.481372-1-yangzh0906@xxxxxxxxxxxxxxx>
Message-Id: <174843567439.3636671.2589475239055731550.robh@xxxxxxxxxx>
Subject: Re: [PATCH v1 6/9] arm64: dts: bst: add support for Black Sesame
Technologies C1200 CDCU1.0 board
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 16:54:57 +0800, Albert Yang wrote:
> Add device tree support for the Black Sesame Technologies (BST) C1200
> CDCU1.0 ADAS 4C2G platform. This platform is based on the BST C1200 SoC
> family.
>
> The changes include:
> - Adding a new BST device tree directory
> - Adding Makefile entries to build the BST platform device trees
> - Adding the device tree for the BST C1200 CDCU1.0 ADAS 4C2G board
>
> This board features a quad-core Cortex-A78 CPU, and various peripherals
> including UART, MMC, watchdog timer, and interrupt controller.
>
> Signed-off-by: Ge Gordon <gordon.ge@xxxxxx>
> Signed-off-by: Albert Yang <yangzh0906@xxxxxxxxxxxxxxx>
> ---
> arch/arm64/boot/dts/Makefile | 1 +
> arch/arm64/boot/dts/bst/Makefile | 10 ++
> .../dts/bst/bstc1200-cdcu1.0-adas_4c2g.dts | 44 ++++++
> arch/arm64/boot/dts/bst/bstc1200.dtsi | 130 ++++++++++++++++++
> 4 files changed, 185 insertions(+)
> create mode 100644 arch/arm64/boot/dts/bst/Makefile
> create mode 100644 arch/arm64/boot/dts/bst/bstc1200-cdcu1.0-adas_4c2g.dts
> create mode 100644 arch/arm64/boot/dts/bst/bstc1200.dtsi
>
My bot found new DTB warnings on the .dts files added or changed in this
series.
Some warnings may be from an existing SoC .dtsi. Or perhaps the warnings
are fixed by another series. Ultimately, it is up to the platform
maintainer whether these warnings are acceptable or not. No need to reply
unless the platform maintainer has comments.
If you already ran DT checks and didn't see these error(s), then
make sure dt-schema is up to date:
pip3 install dtschema --upgrade
This patch series was applied (using b4) to base:
Base: attempting to guess base-commit...
Base: tags/next-20250528 (exact match)
If this is not the correct base, please add 'base-commit' tag
(or use b4 which does this automatically)
New warnings running 'make CHECK_DTBS=y for arch/arm64/boot/dts/bst/' for 20250528085457.481372-1-yangzh0906@xxxxxxxxxxxxxxx:
arch/arm64/boot/dts/bst/bstc1200-cdcu1.0-adas_4c2g.dtb: /: failed to match any schema with compatible: ['bst,c1200']
arch/arm64/boot/dts/bst/bstc1200-cdcu1.0-adas_4c2g.dtb: cpu@0 (arm,cortex-a78): Unevaluated properties are not allowed ('freq-domain' was unexpected)
from schema $id: http://devicetree.org/schemas/arm/cpus.yaml#
arch/arm64/boot/dts/bst/bstc1200-cdcu1.0-adas_4c2g.dtb: cpu@1 (arm,cortex-a78): Unevaluated properties are not allowed ('freq-domain' was unexpected)
from schema $id: http://devicetree.org/schemas/arm/cpus.yaml#
arch/arm64/boot/dts/bst/bstc1200-cdcu1.0-adas_4c2g.dtb: cpu@2 (arm,cortex-a78): Unevaluated properties are not allowed ('freq-domain' was unexpected)
from schema $id: http://devicetree.org/schemas/arm/cpus.yaml#
arch/arm64/boot/dts/bst/bstc1200-cdcu1.0-adas_4c2g.dtb: cpu@3 (arm,cortex-a78): Unevaluated properties are not allowed ('freq-domain' was unexpected)
from schema $id: http://devicetree.org/schemas/arm/cpus.yaml#
arch/arm64/boot/dts/bst/bstc1200-cdcu1.0-adas_4c2g.dtb: /soc@0/dwmmc0@22200000: failed to match any schema with compatible: ['bst,dwcmshc-sdhci']
Return-Path: <linux-kernel+bounces-665457-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id ADAD641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:38:18 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id A95B09E7089
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:37:21 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id CFA6A2857F2;
Wed, 28 May 2025 12:37:23 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ahn71tbf"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5555E279789;
Wed, 28 May 2025 12:37:20 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435842; cv=none; b=O9kyihJnAbWLs9W/m3/Bo/NcTmkEhyo86nyhvizOa5CrHBXd3ejiQgXXQMA5YIIAFYu5EF2/+eyyoC0Bg8yzeQvGdgd0t7NLCHxVhWwKxMUDgTt8GFdRr6X4GgHgpxYlntXNmNQLWLyZQ+bZyyhmV0nECsR/dzlpOhOT6R9Ap2I=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435842; c=relaxed/simple;
bh=4wndtLFFbNEebfg/C0AU/VLVN5six3gi8aYkQ4FdXMs=;
h=Date:Content-Type:MIME-Version:From:Cc:To:In-Reply-To:References:
Message-Id:Subject; b=RRIe+q8XO0fMDAcSLQZOdK7irxg0xZiVXpv/mheNExbuu7BCDnvalq5iBmVSjx5qR77aJFtVKNBzSBwdSODiZfLJI7KTm10Xu4QkFnJO+2G331PyfgbCOpjNZvfE0SXSANvjWiad5D7BE0ByGaVj0/rV+dmW7ILRdOWHdtD+rlY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ahn71tbf; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7C1EAC4CEED;
Wed, 28 May 2025 12:37:20 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748435840;
bh=4wndtLFFbNEebfg/C0AU/VLVN5six3gi8aYkQ4FdXMs=;
h=Date:From:Cc:To:In-Reply-To:References:Subject:From;
b=ahn71tbfqHirEZbiqqUG6b+e3sTdM2N9VoVBdSL0ehNSC4w1wTsLWmANNJnPHXSHh
nhhYhDswb808IV7zbfH4L4c14LW6bRQF1A4q7XPXn+P7yEYrr+Uq4wIEpDAYLlnlXw
qFY6+v+c/8msgA23VGOiAaW+X0e91xBaWdkbPFmnQwY4I3BZ16G/oJyn5Ihn7uLPfe
tflaC55nk6v+YJbgceh8y/W8CPG+WHki9h6BhvujCtsYmfxqP5orN2MHgf22lkkNNA
lMErMvGtJiHS0MZaaSy1GqfMh6Ot6gmDMDzxbqCTIe+sCZWFnP134Fbvyi/NS1YT+i
ABVKGx4tPy7wA==
Date: Wed, 28 May 2025 07:37:18 -0500
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
From: "Rob Herring (Arm)" <robh@xxxxxxxxxx>
Cc: linux-phy@xxxxxxxxxxxxxxxxxxx,
Kishon Vijay Abraham I <kishon@xxxxxxxxxx>,
Neil Armstrong <neil.armstrong@xxxxxxxxxx>,
Konrad Dybcio <konrad.dybcio@xxxxxxxxxxxxxxxx>,
Bjorn Andersson <andersson@xxxxxxxxxx>, linux-arm-msm@xxxxxxxxxxxxxxx,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Dmitry Baryshkov <lumag@xxxxxxxxxx>, devicetree@xxxxxxxxxxxxxxx,
Vinod Koul <vkoul@xxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx,
Krzysztof Kozlowski <krzk@xxxxxxxxxx>,
Marijn Suijten <marijn.suijten@xxxxxxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>
To: Konrad Dybcio <konradybcio@xxxxxxxxxx>
In-Reply-To: <20250527-topic-4ln_dp_respin-v3-0-f9a0763ec289@xxxxxxxxxxxxxxxx>
References: <20250527-topic-4ln_dp_respin-v3-0-f9a0763ec289@xxxxxxxxxxxxxxxx>
Message-Id: <174843567392.3636631.15770445244907568991.robh@xxxxxxxxxx>
Subject: Re: [PATCH v3 0/6] arm64: qcom: allow up to 4 lanes for the Type-C
DisplayPort Altmode
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, 27 May 2025 22:40:02 +0200, Konrad Dybcio wrote:
> Register a typec mux in order to change the PHY mode on the Type-C
> mux events depending on the mode and the svid when in Altmode setup.
>
> The DisplayPort phy should be left enabled if is still powered on
> by the DRM DisplayPort controller, so bail out until the DisplayPort
> PHY is not powered off.
>
> The Type-C Mode/SVID only changes on plug/unplug, and USB SAFE states
> will be set in between of USB-Only, Combo and DisplayPort Only so
> this will leave enough time to the DRM DisplayPort controller to
> turn of the DisplayPort PHY.
>
> The patchset also includes bindings changes and DT changes.
>
> This has been successfully tested on an SM8550 board, but the
> Thinkpad X13s deserved testing between non-PD USB, non-PD DisplayPort,
> PD USB Hubs and PD Altmode Dongles to make sure the switch works
> as expected.
>
> The DisplayPort 4 lanes setup can be check with:
> $ cat /sys/kernel/debug/dri/ae01000.display-controller/DP-1/dp_debug
> name = msm_dp
> drm_dp_link
> rate = 540000
> num_lanes = 4
> ...
>
> This patchset depends on [1] to allow broadcasting the type-c mode
> to the PHY, otherwise the PHY will keep the combo state while the
> retimer would setup the 4 lanes in DP mode.
>
> [1] https://lore.kernel.org/all/20240527-topic-sm8x50-upstream-retimer-broadcast-mode-v1-0-79ec91381aba@xxxxxxxxxx/
> Changes in v3:
> - Take the series from Neil
> - Rebase
> - Rename many variables
> - Test on X1E & X13s
> - Apply a number of small cosmetic/codestyle changes
> - Remove some unused variables
> - Some smaller bugfixes
> - Link to v2: https://lore.kernel.org/lkml/20240527-topic-sm8x50-upstream-phy-combo-typec-mux-v2-0-a03e68d7b8fc@xxxxxxxxxx/
> Changes in v2:
> - Reference usb-switch.yaml in bindings patch
> - Fix switch/case indenting
> - Check svid for USB_TYPEC_DP_SID
> - Fix X13s patch subject
> - Update SM8650 patch to enable 4 lanes on HDK aswell
> - Link to v1: https://lore.kernel.org/r/20240229-topic-sm8x50-upstream-phy-combo-typec-mux-v1-0-07e24a231840@xxxxxxxxxx
>
> Signed-off-by: Konrad Dybcio <konrad.dybcio@xxxxxxxxxxxxxxxx>
> ---
> Konrad Dybcio (1):
> phy: qcom: qmp-combo: Rename 'mode' to 'phy_mode'
>
> Neil Armstrong (5):
> dt-bindings: phy: qcom,sc8280xp-qmp-usb43dp: Reference usb-switch.yaml to allow mode-switch
> phy: qcom: qmp-combo: store DP phy power state
> phy: qcom: qmp-combo: introduce QMPPHY_MODE
> phy: qcom: qmp-combo: register a typec mux to change the QMPPHY_MODE
> arm64: dts: qcom: sc8280xp-lenovo-thinkpad-x13: Set up 4-lane DP
>
> .../phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml | 7 +-
> .../dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts | 6 +-
> drivers/phy/qualcomm/phy-qcom-qmp-combo.c | 182 +++++++++++++++++++--
> 3 files changed, 173 insertions(+), 22 deletions(-)
> ---
> base-commit: 460178e842c7a1e48a06df684c66eb5fd630bcf7
> change-id: 20250527-topic-4ln_dp_respin-c6924a8825ce
>
> Best regards,
> --
> Konrad Dybcio <konrad.dybcio@xxxxxxxxxxxxxxxx>
>
>
>
My bot found new DTB warnings on the .dts files added or changed in this
series.
Some warnings may be from an existing SoC .dtsi. Or perhaps the warnings
are fixed by another series. Ultimately, it is up to the platform
maintainer whether these warnings are acceptable or not. No need to reply
unless the platform maintainer has comments.
If you already ran DT checks and didn't see these error(s), then
make sure dt-schema is up to date:
pip3 install dtschema --upgrade
This patch series was applied (using b4) to base:
Base: using specified base-commit 460178e842c7a1e48a06df684c66eb5fd630bcf7
If this is not the correct base, please add 'base-commit' tag
(or use b4 which does this automatically)
New warnings running 'make CHECK_DTBS=y for arch/arm64/boot/dts/qcom/' for 20250527-topic-4ln_dp_respin-v3-0-f9a0763ec289@xxxxxxxxxxxxxxxx:
arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-r3-lte.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sm7125-xiaomi-curtana.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-limozeen-r4.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-pazquel360-wifi.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-coachz-r1-lte.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-quackingstick-r0.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-wormdingler-rev1-inx.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-limozeen-nots-r4.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-coachz-r1.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-r10.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-limozeen-nots-r9.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-r3-kb.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-homestar-r4.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-acer-aspire1.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-r1.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-kingoftown.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-pompom-r2-lte.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-pazquel360-lte.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-limozeen-r9.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-r3.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-r1-kb.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-homestar-r3.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-r10-lte.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-limozeen-r10.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-idp.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-pazquel-parade.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-wormdingler-rev1-boe-rt5682s.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-wormdingler-rev1-boe.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-r9-kb.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-coachz-r3-lte.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-pazquel-ti.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-pompom-r1-lte.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-r9.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-coachz-r3.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-r1-lte.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-r9-lte.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-pazquel-lte-ti.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-pompom-r3.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-r1-lte.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-wormdingler-rev1-inx-rt5682s.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-pompom-r2.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-pazquel-lte-parade.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-homestar-r2.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-limozeen-nots-r5.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-r10-kb.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-pompom-r3-lte.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-r1.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-pompom-r1.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sm7125-xiaomi-joyeuse.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-limozeen-nots-r10.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
arch/arm64/boot/dts/qcom/sc7180-trogdor-quackingstick-r0-lte.dtb: phy@88e8000 (qcom,sc7180-qmp-usb3-dp-phy): 'oneOf' conditional failed, one must be fixed:
'port' is a required property
'ports' is a required property
from schema $id: http://devicetree.org/schemas/phy/qcom,sc8280xp-qmp-usb43dp-phy.yaml#
Return-Path: <linux-kernel+bounces-665459-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 4F06841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:38:37 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 9A8D11BC7CDE
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:38:10 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id D6E3528643B;
Wed, 28 May 2025 12:37:25 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jazg0UmC"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 18A4428640A;
Wed, 28 May 2025 12:37:24 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435845; cv=none; b=OJgffo5nEFlO1yAVZ2XZJEDUgogqKiEv+JEtxklj1gRwcYdV840Y3P9wv/gS13TH4RB/hM1W6eNPq+AzzxyafcJEVi13eHDN1MgwZXOkbOv8f5I+8AiywOAngM7OOXybrxFpuhvwvSyGtPUxKq73e6YjGb/M4SC++cU5vDJBlhE=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435845; c=relaxed/simple;
bh=eUA0BDfpbYKOu7zRQ2U4yKvk2szX91xJ+8ngKIX4azc=;
h=Date:Content-Type:MIME-Version:From:Cc:To:In-Reply-To:References:
Message-Id:Subject; b=ih9ivjZCFobunAgOMAHUJTxbw9XydlFkkYdaZcp4f0gYbldGGnoFX5V5F0PRlaJhPNsznrpaDlZPhKiDd6+nK7p0H4pzwB299/Aj8GAw4wPHjHqllmQ77/S3XhquxXXxTS7S8lTl/BXR9FuDQMATsxT9C3xSCu5C3M5ufFbVIj8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jazg0UmC; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 65DBEC4CEE7;
Wed, 28 May 2025 12:37:24 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748435844;
bh=eUA0BDfpbYKOu7zRQ2U4yKvk2szX91xJ+8ngKIX4azc=;
h=Date:From:Cc:To:In-Reply-To:References:Subject:From;
b=jazg0UmCvQ2wV++PyxuX/XABwG1uLNgiyt9I+MfXiFIAD6pOYtbF4Vr79wA4pE8hH
fEWhbdCgSvmh43nXEUtRK0Amq7+8UrVQ1mNv9fnTcHQ8tHwLWG1Rrj3tdHYIv1KcEe
7gzDcSAYWtZR9gz0Pd9Y8qEHAVXKt5H2eB6SegyOgbvfntjP49qrHfgqsS3DJa6WOa
QKi4t8b5Ve9hmIIBvuIbFEp0EoEYmPdepve4eFn0mlP/GGxKoLr4JyvAnBW05UvBXG
lTngUL4DUoFWPpS2hgMdeijYRw64b6suDmK5eGzP5kMCIIUqvS5fAhHHZUHQJ+YEvq
QlfAE5S3nVhjg==
Date: Wed, 28 May 2025 07:37:23 -0500
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
From: "Rob Herring (Arm)" <robh@xxxxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx, Alim Akhtar <alim.akhtar@xxxxxxxxxxx>,
devicetree@xxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx,
linux-samsung-soc@xxxxxxxxxxxxxxx, Conor Dooley <conor+dt@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>
To: Umer Uddin <umer.uddin@xxxxxxxxxxxxxxxxxxxxxxxxxx>
In-Reply-To: <20250528105821.158140-1-umer.uddin@xxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <20250528105821.158140-1-umer.uddin@xxxxxxxxxxxxxxxxxxxxxxxxxx>
Message-Id: <174843567453.3636707.847885249011261450.robh@xxxxxxxxxx>
Subject: Re: [PATCH v1 0/1] Enable CMU_HSI1 for Exynos990
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 11:58:20 +0100, Umer Uddin wrote:
> Hi all.
>
> This series enables a new clock block (CMU_HSI1) for the Exynos990
> SoC. This clock block provides clocks for the DesignWare MMC
> Controller, PCIE subsystem and UFS subsystem.
>
> This patch depends on the following series:
>
> [CMU_HSI1] https://lore.kernel.org/linux-samsung-soc/20250528105252.157533-1-umer.uddin@xxxxxxxxxxxxxxxxxxxxxxxxxx/
>
> Best regards,
> Umer Uddin.
>
> Umer Uddin (1):
> arm64: dts: exynos990: Add CMU_HSI1 node
>
> arch/arm64/boot/dts/exynos/exynos990.dtsi | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> --
> 2.47.2
>
>
>
My bot found new DTB warnings on the .dts files added or changed in this
series.
Some warnings may be from an existing SoC .dtsi. Or perhaps the warnings
are fixed by another series. Ultimately, it is up to the platform
maintainer whether these warnings are acceptable or not. No need to reply
unless the platform maintainer has comments.
If you already ran DT checks and didn't see these error(s), then
make sure dt-schema is up to date:
pip3 install dtschema --upgrade
This patch series was applied (using b4) to base:
Base: attempting to guess base-commit...
Base: tags/next-20250528 (exact match)
If this is not the correct base, please add 'base-commit' tag
(or use b4 which does this automatically)
New warnings running 'make CHECK_DTBS=y for arch/arm64/boot/dts/exynos/' for 20250528105821.158140-1-umer.uddin@xxxxxxxxxxxxxxxxxxxxxxxxxx:
arch/arm64/boot/dts/exynos/exynos990-c1s.dtb: /soc@0/clock-controller@13000000: failed to match any schema with compatible: ['samsung,exynos990-cmu-hsi1']
arch/arm64/boot/dts/exynos/exynos990-x1slte.dtb: /soc@0/clock-controller@13000000: failed to match any schema with compatible: ['samsung,exynos990-cmu-hsi1']
arch/arm64/boot/dts/exynos/exynos990-r8s.dtb: /soc@0/clock-controller@13000000: failed to match any schema with compatible: ['samsung,exynos990-cmu-hsi1']
arch/arm64/boot/dts/exynos/exynos990-x1s.dtb: /soc@0/clock-controller@13000000: failed to match any schema with compatible: ['samsung,exynos990-cmu-hsi1']
Return-Path: <linux-kernel+bounces-665460-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 256E441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:38:42 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 2B64E4E49C2
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:38:12 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 7C795286880;
Wed, 28 May 2025 12:37:27 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ar1XT32k"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B68AF2868AC;
Wed, 28 May 2025 12:37:26 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435846; cv=none; b=TIt0jPAIdepA37FSCzxVQtGbjNkVfO16Id8/+4Fx5dLS56QjLUl6tC27kJ3EPoeUvt3bPHeneA/C1Uq/Wl/5azoKeC14ZqeB2hTetJXNNuxDWWVaDlO3muQgWSJGm0KtpqA62TJsnOn1Q6IsINZUeQ+3mfaSOUXQuHLNzmUwhTo=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435846; c=relaxed/simple;
bh=lg8sZyhu+VcyjBMvGtdunsncF5V4pCoYU4qY7RIgnBE=;
h=Date:Content-Type:MIME-Version:From:Cc:To:In-Reply-To:References:
Message-Id:Subject; b=O1DaG/zCO9DTpwPboZQDat4uvZ7sJdP0ItpEDdB86xbI+ScMnORGid9tjNT9QBpNnADSVw/xB2CRLkRV6BOb8Wvazo5QMyGTN5tVMqzu3wBSkb5+4dDDdZpnEozqFg02nu4JLJzCix39SBYPEMszYdNRNgvdO61gmYtaoFlwOnk=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ar1XT32k; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 62FCDC4CEEF;
Wed, 28 May 2025 12:37:26 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748435846;
bh=lg8sZyhu+VcyjBMvGtdunsncF5V4pCoYU4qY7RIgnBE=;
h=Date:From:Cc:To:In-Reply-To:References:Subject:From;
b=ar1XT32kc6nKc9+yO0O4pmoQ+wXsKgf/itLWOesD9PbDFfKiCntexhnaw8jQPVJ6Z
bcy1+/TLY0zyD7KICkp+zchf4N2FlYDFJFPx7u/MncCD8JzjHY0zHBWv7poSPhKa19
aUEnrEiUtamygs5sLEOGllRgm+MaPKB/et6ivXfIIJ8EoSVaHtnmQ7UKZAAUq6PCe9
2idRs6QXrGYtyWufMqjDFK/QzttDmFw4fE9HjWUxGMfDf7ebbAEvQdHqMmNRaTZIfy
iDT6LOx0P4ecijsp9LW44EvtJeoWuL+g+0R7ceaGSNIr3AfxQui5GPfWaQcAvtlpHy
oo8SPeQgL/C2A==
Date: Wed, 28 May 2025 07:37:24 -0500
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
From: "Rob Herring (Arm)" <robh@xxxxxxxxxx>
Cc: devicetree@xxxxxxxxxxxxxxx, shawnguo@xxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, Frank.Li@xxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, conor+dt@xxxxxxxxxx,
meng.li@xxxxxxxxxxxxx
To: Meng Li <Meng.Li@xxxxxxxxxxxxx>
In-Reply-To: <20250528111751.3505224-1-Meng.Li@xxxxxxxxxxxxx>
References: <20250528111751.3505224-1-Meng.Li@xxxxxxxxxxxxx>
Message-Id: <174843567469.3636722.5654586098186872724.robh@xxxxxxxxxx>
Subject: Re: [PATCH] arch: arm64: dts: add big-endian property back into
watchdog node
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 19:17:51 +0800, Meng Li wrote:
> When verifying watchdog feature on NXP ls1046ardb board,
> it doesn't work. Because the big-endian is deleted by accident,
> add it back.
>
> Fixes: 7c8ffc5555cb ("arm64: dts: layerscape: remove big-endian for mmc nodes")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Meng Li <Meng.Li@xxxxxxxxxxxxx>
> ---
> arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi | 1 +
> 1 file changed, 1 insertion(+)
>
My bot found new DTB warnings on the .dts files added or changed in this
series.
Some warnings may be from an existing SoC .dtsi. Or perhaps the warnings
are fixed by another series. Ultimately, it is up to the platform
maintainer whether these warnings are acceptable or not. No need to reply
unless the platform maintainer has comments.
If you already ran DT checks and didn't see these error(s), then
make sure dt-schema is up to date:
pip3 install dtschema --upgrade
This patch series was applied (using b4) to base:
Base: attempting to guess base-commit...
Base: failed to guess base
If this is not the correct base, please add 'base-commit' tag
(or use b4 which does this automatically)
New warnings running 'make CHECK_DTBS=y for arch/arm64/boot/dts/freescale/' for 20250528111751.3505224-1-Meng.Li@xxxxxxxxxxxxx:
arch/arm64/boot/dts/freescale/fsl-ls1046a-qds.dtb: watchdog@2ad0000 (fsl,imx21-wdt): big-endian: False schema does not allow True
from schema $id: http://devicetree.org/schemas/watchdog/fsl-imx-wdt.yaml#
arch/arm64/boot/dts/freescale/fsl-ls1046a-frwy.dtb: watchdog@2ad0000 (fsl,imx21-wdt): big-endian: False schema does not allow True
from schema $id: http://devicetree.org/schemas/watchdog/fsl-imx-wdt.yaml#
arch/arm64/boot/dts/freescale/fsl-ls1046a-rdb.dtb: watchdog@2ad0000 (fsl,imx21-wdt): big-endian: False schema does not allow True
from schema $id: http://devicetree.org/schemas/watchdog/fsl-imx-wdt.yaml#
arch/arm64/boot/dts/freescale/fsl-ls1046a-tqmls1046a-mbls10xxa.dtb: watchdog@2ad0000 (fsl,imx21-wdt): big-endian: False schema does not allow True
from schema $id: http://devicetree.org/schemas/watchdog/fsl-imx-wdt.yaml#
Return-Path: <linux-kernel+bounces-665461-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 301FB41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:39:19 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id A45AD188B557
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:38:45 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C8D6C2857EA;
Wed, 28 May 2025 12:38:04 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="aN5i82Yz"
Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1FB6026A0F3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:38:00 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435884; cv=none; b=cw6vudXkeZmu3SDM1OWUgkRNO2YHS36Q64g0cBn6LkYe+Sb+Q7rcGeXNOqgG/2XvBnD4M+ZtCAIj/ASF6YOE4CFhvFT2p+k9d3kU3DD5k+yZBv4kzhgvEQdYAKiEnI5zyW9JI8mordGcyuxVnXZDo28KLnF9IOLPMBDWciwf/Mw=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435884; c=relaxed/simple;
bh=sqONk/oAqQaksWZ2ArNRDlag/xuhtIBC0jRT4lXblFA=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=Tmotg2HofHrHKpAbDm1Cd+3464uGeUBb8AYrlNc9rb5jLxaNLBUPjSbBjvq1SmyWWs50csyHDjYX/2e4MXCpgQHASmIZm7EfeIKdpyMHlBxlq0ybvDah1fPxUPRjthGnmssQlgMWBYzRjRGGjakowMLCXPCeANkBHLrj49GBzpI=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=aN5i82Yz; arc=none smtp.client-ip=205.220.180.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com
Received: from pps.filterd (m0279872.ppops.net [127.0.0.1])
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S7giZE002083
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:38:00 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=
cc:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to; s=qcppdkim1; bh=LnTOhc1LJtROB/kjrDGcE/rf
8BNOgI+khnoo3xpI+II=; b=aN5i82Yzl4Ju2K4fPRuXGArnnnjQ0DBL/U89Uyzg
YEusB0lLkN497fDAn7DxqHzIj70kAMhEW5GON70OU06rh6P3qKlC0Np0tUkIuSJ0
kcIje/EoAeRrNKOUOYwwZBMg7Ft/3atT3jK1RVuY5HQaYzOuUSQlKpRq3ex8bvSV
yuB1qeoxTR3SOLJHIHktc3MH40k7HVJFHJ+Pz9+a+tWaBnfbZHhMrilhxBcj7fGL
r4rmWyA0Yc1dIlKMGXhbe7646KGbXaG7coCM3gWhd0TqpiYcegRTOXGN8T329k0S
rCZVS6kYetIjbeZS4gKgB6I5yNZgTCGOU5ywJGe2kr0fJQ==
Received: from mail-qv1-f72.google.com (mail-qv1-f72.google.com [209.85.219.72])
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46u6g926r9-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT)
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:37:59 +0000 (GMT)
Received: by mail-qv1-f72.google.com with SMTP id 6a1803df08f44-6faa33468f2so74160496d6.3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 05:37:59 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748435879; x=1749040679;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=LnTOhc1LJtROB/kjrDGcE/rf8BNOgI+khnoo3xpI+II=;
b=ZfZjOz4BPCujCyUA1IM7WigUOVmHWnDGC3hhM30+J8y6w0bgYKVgtCVCQcWdbyO4xY
EQK5cPLsMftWPxUSgsQwvCAWFywsDt8hxi8JcHws0V5OZ6gyecJ6rS9112AoO12NbP86
dS82FaTyGJ6G9Z4Tac3Qyb0SCbNgEtjqcwV1B7U/HyKkJmVYOYoKfASr/b4SLB5Rkt4t
1GbDNAA54iZ2/tfvChXdsYOMnb4XJEPHhDJrbZUFzzslhkEZ4hgJ7pHvwo2/GYI4RIvB
6KHHcCvEmfnseOaMyZOp0kb22U+Jz8D/fZ/JRepUeuADxkRdKoGxfDzoHr066FjpBJo9
2Yvg==
X-Forwarded-Encrypted: i=1; AJvYcCXic0UGfVoVROO8drSkTGXga7JyAc7RAkYRPD8qJlbO21izOw4VB0nXbmICF4DtTfJk4Mh6kBEkFxGU/E0=@vger.kernel.org
X-Gm-Message-State: AOJu0YzptjHZBmBbhRby1T933R5IAiF1WBd7SK1NR5sLz4cGVHMSM8Ur
2/kUARNdeq59TqFN5a4xP6VDCPIt51bMJGnZjU5iFbTQTAvtMXa+ZBVLxW+oAC6kic38PIm7GfY
CaWo4Zj1I1TTSGIFLvNEfUUb5HB1xXLRlS98fK/V9PWeIHwpLJV/sXo2Egt+5NIExWGk=
X-Gm-Gg: ASbGncuhBAM5NRzhgNBpojEndgASqPSe+I8A/I4IQAnwptDuYobqieFdCyNU208EEGv
h8JYs98QXIADXxtcVH1ngWeGIJncO2w7YRLmrQcN63O4v2PtHRoBiIzFXcupJogO/qemTqbrYgF
71nWbXoLgGbw6N46AuSBo4d49Kcizk/1Q4yOwM7QxNblIbaFWIEZUQ4z03tv5Hc+Cb0XXfTZnwN
AmKO8ERlh94oq1oyV6nnF1xtXq9TfBC5ia12CnBmJ71g88nHFuRk5rYWz7L+laaYx5lsEtPjpeR
6HJSPyguZ7LUr9bAnjjsDKpUXaUJC5d+IKmxs9QTiFYeLEOLYoxMOS/1Rq+hIiaysYalEl0BqaQ
=
X-Received: by 2002:a05:6214:5198:b0:6e6:5bd5:f3a8 with SMTP id 6a1803df08f44-6fa9d289038mr256233386d6.29.1748435879085;
Wed, 28 May 2025 05:37:59 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IHf/wgeitoAgxxj9Q2ekKkeVrKgLV9879XWXLjEkhNeRx4XpQkYYovwYdM7CGYXKyMxm7vwPg==
X-Received: by 2002:a05:6214:5198:b0:6e6:5bd5:f3a8 with SMTP id 6a1803df08f44-6fa9d289038mr256232646d6.29.1748435878664;
Wed, 28 May 2025 05:37:58 -0700 (PDT)
Received: from eriador.lumag.spb.ru (2001-14ba-a0c3-3a00--7a1.rev.dnainternet.fi. [2001:14ba:a0c3:3a00::7a1])
by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5532f69a4easm265991e87.154.2025.05.28.05.37.57
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 05:37:57 -0700 (PDT)
Date: Wed, 28 May 2025 15:37:56 +0300
From: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
To: Melody Olvera <melody.olvera@xxxxxxxxxxxxxxxx>
Cc: Vinod Koul <vkoul@xxxxxxxxxx>, Kishon Vijay Abraham I <kishon@xxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Wesley Cheng <quic_wcheng@xxxxxxxxxxx>,
Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>,
Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>,
Bjorn Andersson <andersson@xxxxxxxxxx>,
Konrad Dybcio <konradybcio@xxxxxxxxxx>,
Catalin Marinas <catalin.marinas@xxxxxxx>,
Will Deacon <will@xxxxxxxxxx>, linux-arm-msm@xxxxxxxxxxxxxxx,
linux-phy@xxxxxxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-usb@xxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
Subject: Re: [PATCH v6 10/10] arm64: defconfig: Add M31 eUSB2 PHY config
Message-ID: <zybi7fyii72vm3dljqw2en76d4n2rmdicz7jgm5xdv6netpwrb@xwihqutyfa3w>
References: <20250527-sm8750_usb_master-v6-0-d58de3b41d34@xxxxxxxxxxxxxxxx>
<20250527-sm8750_usb_master-v6-10-d58de3b41d34@xxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250527-sm8750_usb_master-v6-10-d58de3b41d34@xxxxxxxxxxxxxxxx>
X-Authority-Analysis: v=2.4 cv=d4b1yQjE c=1 sm=1 tr=0 ts=683703a7 cx=c_pps
a=7E5Bxpl4vBhpaufnMqZlrw==:117 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10
a=dt9VzEwgFbYA:10 a=EUspDBNiAAAA:8 a=J22MhVpkVBW5EiQ_9csA:9 a=CjuIK1q_8ugA:10
a=pJ04lnu7RYOZP9TFuWaZ:22
X-Proofpoint-ORIG-GUID: ijsbBd2Zwx-S05CvQLEk_e-7kiOXQGKf
X-Proofpoint-GUID: ijsbBd2Zwx-S05CvQLEk_e-7kiOXQGKf
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDExMCBTYWx0ZWRfXxFKpz8PFNyKO
z15j8jOmq7J/JYXDYD+SlKcJlvb55uW11fe/HbxK6xrAFok3U23Jbkam4Fq8Q+QlwfXWrNxUzMC
R3GSVY56eQcddJrPdkvGtlZC0AelKnsqXbvMHQSP7e2TVrv4SCDEaYiLvEgpXov+5eFDOCi9wVv
pfiwAEH7gopCLYcf52mzwMXEaGsG3AMc+AjyDGjxBlmXrHZUZOssz+1tyMWU81PhTvw8WzHGC3e
oNKU3yjnnE7/UQMZZVOPEQO8iw8Qe7NloZ/rMKyq+t98Kp0rwsoHs4zsijm0SLxj2DxwynNqUS5
BR7koYU9DgmVdvQSF6N72PIKRnq9d9NmfmjKU2ZFJbSbT6+bdrx1WhggXYl8437Sz+p0p9p7SN1
qB5tvrNOq5bNqEwscOCemZ6j+hmB9Md+LJTqOZ5HvDLd+3vUVVgu5o3f4HmufAF01HBBR3CQ
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
adultscore=0 suspectscore=0 malwarescore=0 phishscore=0 mlxlogscore=636
lowpriorityscore=0 priorityscore=1501 bulkscore=0 spamscore=0 clxscore=1015
impostorscore=0 mlxscore=0 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280110
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 02:04:46PM -0700, Melody Olvera wrote:
> The Qualcomm SM8750 SoCs use an eUSB2 PHY driver different from the
> already existing M31 USB driver because it requires a connection
> to an eUSB2 repeater. Thus, for USB to probe and work properly on
> the Qualcomm SM8750 SoCs, enable the additional driver.
Nit: in defconfig messages we usually talk about particular boards, not
about the SoCs.
Nevertheless:
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
>
> Signed-off-by: Melody Olvera <melody.olvera@xxxxxxxxxxxxxxxx>
> ---
> arch/arm64/configs/defconfig | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
> index 897fc686e6a91b79770639d3eb15beb3ee48ef77..f4de2473b3078543b68b01387ac7e3ab6951e4a4 100644
> --- a/arch/arm64/configs/defconfig
> +++ b/arch/arm64/configs/defconfig
> @@ -1600,6 +1600,7 @@ CONFIG_PHY_QCOM_QUSB2=m
> CONFIG_PHY_QCOM_SNPS_EUSB2=m
> CONFIG_PHY_QCOM_EUSB2_REPEATER=m
> CONFIG_PHY_QCOM_M31_USB=m
> +CONFIG_PHY_QCOM_M31_EUSB=m
> CONFIG_PHY_QCOM_USB_HS=m
> CONFIG_PHY_QCOM_USB_SNPS_FEMTO_V2=m
> CONFIG_PHY_QCOM_USB_HS_28NM=m
>
> --
> 2.48.1
>
--
With best wishes
Dmitry
Return-Path: <linux-kernel+bounces-665462-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 5DEA141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:39:34 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 8CAF61BC7964
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:38:58 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 539E728643B;
Wed, 28 May 2025 12:38:08 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="FJSHP0KY"
Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD8272857FA;
Wed, 28 May 2025 12:38:05 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.13
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435887; cv=none; b=UYYqQsvjLsAp+gHsievBNTzOtHxTvdUwPzBkoBuMOv7AoekLJCyQXTVGK+6FM/j2giYxgnhpQZnqK6iIzbQlxAJaiHdhFl3BHvo0Ox5vuxSt8uSH4aFr6E6t8+7qTTU7hNtTFiKvyK7raKxVdzz8omTiJr0FHcGS/42GPcUqCFc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435887; c=relaxed/simple;
bh=Q6eFNenEbUSMPvsXNE7r/lVO7A6gafRRqlJCsQalJhI=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=ucgleSmKTzT+sFDPiLjKNrqji97MxTjffQgv5AbHtEfYH6PKPO4NPfEm5JtmSw0HJFkzjplDG0vkLESaXvhtX5GJUdgazDC8CmMEVYXRG36LIK9i7cLVxgRQ9r4AlARn6F03dNkWK40zOcf9Y7UpuShGiXWPZFPNMRorfDmhHJ8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=FJSHP0KY; arc=none smtp.client-ip=198.175.65.13
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748435885; x=1779971885;
h=date:from:to:cc:subject:message-id:references:
mime-version:in-reply-to;
bh=Q6eFNenEbUSMPvsXNE7r/lVO7A6gafRRqlJCsQalJhI=;
b=FJSHP0KYYC9bV61WLG8uDOhvlRY3rj27A/d5HUvIqyJGrqnZNX63fsDL
wuQR6OLQHh5F0HVh0gnKEeGOPa/yP4ptAfr6bD/CitXiFEnmygdBf1hap
rp4S4Cw8yKgwWOSFMbNgPMTh8D/agPJ2c/2IYbIIHb/lS6ZSJDbztwsZb
OG6l85YO2njFOQ1aUDWkUQ4xgiBScZlHncKSvW38dgTQ7ZyDYtLLA7aiU
hHtuEyceNZBm6jdL96l/5EmiTjlHyjkwZgvMMuLgtNQXAjWiHHiYnb9wu
pxII4T7rECPKLo+eXXmJwm1Syen7lfpNMe1T9qEyYgTUFbOMe6sL2ZsnA
Q==;
X-CSE-ConnectionGUID: qpvmPytQScyxFWFGYeeIBw==
X-CSE-MsgGUID: CzmMgmKEQkeaZfYA4URbFA==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="61515072"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="61515072"
Received: from orviesa003.jf.intel.com ([10.64.159.143])
by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 05:38:05 -0700
X-CSE-ConnectionGUID: dWG2Y8gcR9qAt78LRWW/gg==
X-CSE-MsgGUID: EblxoR5XTA+d0Mjfjr1QFg==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="147988445"
Received: from lkp-server01.sh.intel.com (HELO 1992f890471c) ([10.239.97.150])
by orviesa003.jf.intel.com with ESMTP; 28 May 2025 05:38:03 -0700
Received: from kbuild by 1992f890471c with local (Exim 4.96)
(envelope-from <lkp@xxxxxxxxx>)
id 1uKG2i-000Vem-2d;
Wed, 28 May 2025 12:38:00 +0000
Date: Wed, 28 May 2025 20:37:58 +0800
From: kernel test robot <lkp@xxxxxxxxx>
To: Menglong Dong <menglong8.dong@xxxxxxxxx>, alexei.starovoitov@xxxxxxxxx,
rostedt@xxxxxxxxxxx, jolsa@xxxxxxxxxx
Cc: oe-kbuild-all@xxxxxxxxxxxxxxx, bpf@xxxxxxxxxxxxxxx,
Menglong Dong <dongml2@xxxxxxxxxxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH bpf-next 15/25] ftrace: factor out
__unregister_ftrace_direct
Message-ID: <202505282037.xt8RiXkG-lkp@xxxxxxxxx>
References: <20250528034712.138701-16-dongml2@xxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528034712.138701-16-dongml2@xxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Menglong,
kernel test robot noticed the following build warnings:
[auto build test WARNING on bpf-next/master]
url: https://github.com/intel-lab-lkp/linux/commits/Menglong-Dong/add-per-function-metadata-storage-support/20250528-115819
base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
patch link: https://lore.kernel.org/r/20250528034712.138701-16-dongml2%40chinatelecom.cn
patch subject: [PATCH bpf-next 15/25] ftrace: factor out __unregister_ftrace_direct
config: sparc-randconfig-001-20250528 (https://download.01.org/0day-ci/archive/20250528/202505282037.xt8RiXkG-lkp@xxxxxxxxx/config)
compiler: sparc64-linux-gcc (GCC) 14.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250528/202505282037.xt8RiXkG-lkp@xxxxxxxxx/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202505282037.xt8RiXkG-lkp@xxxxxxxxx/
All warnings (new ones prefixed by >>):
>> kernel/trace/ftrace.c:116:12: warning: '__unregister_ftrace_direct' declared 'static' but never defined [-Wunused-function]
116 | static int __unregister_ftrace_direct(struct ftrace_ops *ops, unsigned long addr,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
--
>> kernel/trace/ftrace.c:6053: warning: expecting prototype for unregister_ftrace_direct(). Prototype was for __unregister_ftrace_direct() instead
vim +116 kernel/trace/ftrace.c
114
115 static void ftrace_update_trampoline(struct ftrace_ops *ops);
> 116 static int __unregister_ftrace_direct(struct ftrace_ops *ops, unsigned long addr,
117 bool free_filters);
118
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Return-Path: <linux-kernel+bounces-665464-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id C93CB41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:40:06 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 6D81C1BC7356
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:39:43 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id DA32D2857D7;
Wed, 28 May 2025 12:39:24 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b="DAjFohPM"
Received: from out30-100.freemail.mail.aliyun.com (out30-100.freemail.mail.aliyun.com [115.124.30.100])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 95354268C5D;
Wed, 28 May 2025 12:39:20 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.124.30.100
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435964; cv=none; b=OcdpfxFGNp8A5D/pKMxfq3+pKdTqRs0uxs23rTWc4bmLrJwg+MAEvzzqaGnavWQ07++2FW5g+5f+uLcPtRe7w8ar4q2c7FEWe17DghB+ELVlDZC+jHx+5et6WBf8t9akltN70M/jNclab+A1KFd3iGY9xEGoXUC9y1mUINozA7E=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435964; c=relaxed/simple;
bh=SZRvMbdu3wATDJKn6o28yDXSyhutEhb2/FkYHiV/SkM=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=C23yh0AxrlzFW8R7wPBE7GcEImEWHcq93ufALs1xmvEBoiR6d6k1IVnzs+5I7vWqkzi17UhUR9Ww2UgzL8ZYhkyn0Qvy01lWsICFo3wV165y75352DcHkvuaFDzagQMWUZVyjDA/w/4laAWWphkOadinYSZwIfwdHrdkfsUzC80=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com; spf=pass smtp.mailfrom=linux.alibaba.com; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b=DAjFohPM; arc=none smtp.client-ip=115.124.30.100
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.alibaba.com
DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed;
d=linux.alibaba.com; s=default;
t=1748435956; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type;
bh=aVWN/MKmTQqqGKE7GEueaj4Por9dh45wCyBCzff0Izg=;
b=DAjFohPMPfziz+CPqLGjrrMaCadeDulKisLUn2hGkCiK+tX2g24nL7e6xvrz4DrwWSS0tCmKCzTiRxEzAl/Uimuk7I0HBh+rPP+q4oXhoU5UO/Iazkl0eE0Q3odBaraym1+b7LKocr9qpUgFSC6sPVeiHasiu+aaq4/gLvcLXSc=
Received: from 30.15.230.171(mailfrom:baolin.wang@xxxxxxxxxxxxxxxxx fp:SMTPD_---0WcDSnsn_1748435951 cluster:ay36)
by smtp.aliyun-inc.com;
Wed, 28 May 2025 20:39:12 +0800
Message-ID: <a956379a-7472-4972-bf3d-fe2b2b6715b5@xxxxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 20:39:10 +0800
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH v7 00/12] khugepaged: mTHP support
To: Nico Pache <npache@xxxxxxxxxx>, linux-mm@xxxxxxxxx,
linux-doc@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-trace-kernel@xxxxxxxxxxxxxxx
Cc: david@xxxxxxxxxx, ziy@xxxxxxxxxx, lorenzo.stoakes@xxxxxxxxxx,
Liam.Howlett@xxxxxxxxxx, ryan.roberts@xxxxxxx, dev.jain@xxxxxxx,
corbet@xxxxxxx, rostedt@xxxxxxxxxxx, mhiramat@xxxxxxxxxx,
mathieu.desnoyers@xxxxxxxxxxxx, akpm@xxxxxxxxxxxxxxxxxxxx,
baohua@xxxxxxxxxx, willy@xxxxxxxxxxxxx, peterx@xxxxxxxxxx,
wangkefeng.wang@xxxxxxxxxx, usamaarif642@xxxxxxxxx, sunnanyong@xxxxxxxxxx,
vishal.moola@xxxxxxxxx, thomas.hellstrom@xxxxxxxxxxxxxxx,
yang@xxxxxxxxxxxxxxxxxxxxxx, kirill.shutemov@xxxxxxxxxxxxxxx,
aarcange@xxxxxxxxxx, raquini@xxxxxxxxxx, anshuman.khandual@xxxxxxx,
catalin.marinas@xxxxxxx, tiwai@xxxxxxx, will@xxxxxxxxxx,
dave.hansen@xxxxxxxxxxxxxxx, jack@xxxxxxx, cl@xxxxxxxxxx,
jglisse@xxxxxxxxxx, surenb@xxxxxxxxxx, zokeefe@xxxxxxxxxx,
hannes@xxxxxxxxxxx, rientjes@xxxxxxxxxx, mhocko@xxxxxxxx,
rdunlap@xxxxxxxxxxxxx
References: <20250515032226.128900-1-npache@xxxxxxxxxx>
From: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx>
In-Reply-To: <20250515032226.128900-1-npache@xxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-10.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,
USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 2025/5/15 11:22, Nico Pache wrote:
> The following series provides khugepaged and madvise collapse with the
> capability to collapse anonymous memory regions to mTHPs.
>
> To achieve this we generalize the khugepaged functions to no longer depend
> on PMD_ORDER. Then during the PMD scan, we keep track of chunks of pages
> (defined by KHUGEPAGED_MTHP_MIN_ORDER) that are utilized. This info is
> tracked using a bitmap. After the PMD scan is done, we do binary recursion
> on the bitmap to find the optimal mTHP sizes for the PMD range. The
> restriction on max_ptes_none is removed during the scan, to make sure we
> account for the whole PMD range. When no mTHP size is enabled, the legacy
> behavior of khugepaged is maintained. max_ptes_none will be scaled by the
> attempted collapse order to determine how full a THP must be to be
> eligible. If a mTHP collapse is attempted, but contains swapped out, or
> shared pages, we dont perform the collapse.
>
> With the default max_ptes_none=511, the code should keep its most of its
> original behavior. To exercise mTHP collapse we need to set
> max_ptes_none<=255. With max_ptes_none > HPAGE_PMD_NR/2 you will
> experience collapse "creep" and constantly promote mTHPs to the next
> available size. This is due the fact that it will introduce at least 2x
> the number of pages, and on a future scan will satisfy that condition once
> again.
>
> Patch 1: Refactor/rename hpage_collapse
> Patch 2: Some refactoring to combine madvise_collapse and khugepaged
> Patch 3-5: Generalize khugepaged functions for arbitrary orders
> Patch 6-9: The mTHP patches
> Patch 10-11: Tracing/stats
> Patch 12: Documentation
When I tested 64K mTHP collapse and disabled PMD-sized THP, I found that
khugepaged couldn't scan and collapse 64K mTHP. I send out two fix
patches[1], and with these patches applied, 64K mTHP collapse works
well. I hope my two patches can be folded into your next version series
if you think there are no issues. Thanks.
[1]
https://lore.kernel.org/all/ac9ed6d71b439611f9c94b3506a8ce975d4636e9.1748435162.git.baolin.wang@xxxxxxxxxxxxxxxxx/
Return-Path: <linux-kernel+bounces-665465-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 2D69E41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:40:42 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 6CC9A161966
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:40:43 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 14DE62857CA;
Wed, 28 May 2025 12:40:38 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="a0xJARm7"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4A8B828369F
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:40:33 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436037; cv=none; b=LPBjTvOiFD0X+k3aQ4HehThjrHyaYvcbja4VndAffFMIFuZ4RFCWs6KLR0VZWjPhdh/4qpe79awX/BkLiKjKWvxr38Ioh8HdogClWORqp8BbKekRFDF9raFRBBexEx1qLX8/OtNMxJN0UtVQ0A1BFudW4NfDvLYr3eEbGiKLyns=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436037; c=relaxed/simple;
bh=R6Q8bbxmM7XeAH6r84bFYbAvGosNvBYeYx6f/gZDfh4=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=fJa1r3fxNgklSM3NtycSEyeMwgmVglruUtmVsZcQeEjk5lSAPbDNEiJEq8IJqWBAwwSRlnwVal81718HSpZNuuk/tl+VhJPsSPeyYDmaT+tZMs0t/fSn6vs/0GVnB/3GwRIx2T7AyJX8yQkBBL88vZy7gONmwJvXegeNJKQP/9c=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=a0xJARm7; arc=none smtp.client-ip=170.10.133.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748436033;
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:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references:autocrypt:autocrypt;
bh=Sj6YN8uQzocnSprVDMhDTbOENg95MZi206LQScKOeos=;
b=a0xJARm7VbNOA22bvDLNq1hmtdOYcrVERem4ZIAmr327lf9ln6cAS3EDTuAalrJF/3uALg
Y2g85gFJs6JstukCMoWF/QeiqdtxtFC8gXzxUQH202Ut71cXS31fEd2/uWK9C7HXXlY+LR
A5f7r32mGsIfpJ0IpIpXRS+9F1Mu9UM=
Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com
[209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS
(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
us-mta-354-ibdYCEbJO_yIADz6t7zIOA-1; Wed, 28 May 2025 08:40:31 -0400
X-MC-Unique: ibdYCEbJO_yIADz6t7zIOA-1
X-Mimecast-MFC-AGG-ID: ibdYCEbJO_yIADz6t7zIOA_1748436030
Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-450787c8626so3655215e9.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 05:40:30 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748436030; x=1749040830;
h=content-transfer-encoding:in-reply-to:organization:autocrypt
:content-language:from:references:cc:to:subject:user-agent
:mime-version:date:message-id:x-gm-message-state:from:to:cc:subject
:date:message-id:reply-to;
bh=Sj6YN8uQzocnSprVDMhDTbOENg95MZi206LQScKOeos=;
b=qMLT9PJGxuXrCxSqFwtDYTBfquUJ3LF0E0oK4Jk27m4bSJYKU8slmaiBu4UqPXwzIP
/q1K/2Rw33G5E643u03fnU77lYcUK3NmWzfxTud8nHZzbMxSD5WsLI3sozUgKPD8JwZj
7G2nbhmL05hoo76K7NZYOkPZEUBeVhU/y/6JhzvwhB3C/bl0LNV5Qgjn0NWtM3p7DKvY
x70YSg94Ia5Vtkjc37gdUySj1pOGdoiI+dyfC85pLEESby0wi9dwKWIt3FU5NdC75zI1
HsVl9y+II6s14anvU3WMiibe8UiriCHidsft7wXlM+w/2ZaKwWLSRe2/uBu8iVp7vbLM
ytHw==
X-Forwarded-Encrypted: i=1; AJvYcCX+3M7QICDW3t1x/BGcj7POF5G1ejGQKItDp1YZVKKK2I4UTxKMpDix3kwFWDRxtK7IREw/qD1fGiw4IbQ=@vger.kernel.org
X-Gm-Message-State: AOJu0YzNKXqLHSUUl3QHg+WQAQdxmsiSZCOXS4GQkzfiqSLqs4P9aPB+
6wh1AleXorOlP2qG/GubmJfhULby5D6tfzif0ypMtT/17+lmnqb+NMmsnfubQRnSwQeix/9s77a
dZGb7dRdbTkXXWfbMVzJkJQxbMcy8pZfZaMKmtspMo0tOAh6lzn2oOKZUzaFMh9fn0Q==
X-Gm-Gg: ASbGnct+2MWgd7Wd0BWD5t0HiejS9bUXpLaeU52f2wKG4G+WO5lMpEF8SFBEPN07DJL
Dg6shOdyl1fGANEGxRTWo/PjwqOIVMqpdZ3/aHiodmY/uJlDkyU+m+IDMSEFyCkRiNLYM1LaQUG
c2XU6i3PXYBPAlZCMnORL7Ig/yd6iNDM2mxe037BYh8CnzlFMljjXNa2XbyOBjYeS/DENovUKfW
rDo4KANLK8DD+wp25Ab9UqXri26oYu/MVuxrJ9W3pLUzls7b2kXDolC2H4IPk55atKspLbYW2su
ZKdCMgnSvtifb5JPS2mJ0TJiBSIa8poSqNyIVvsOHiwFXKbVR4jb4x+6JWpUPsoUYe9g1STJWC0
AUMv1S6LxzpekpcJUHRoTxXgrba8X6s4NLxVvFLM=
X-Received: by 2002:a05:6000:24c8:b0:3a4:e8c5:63a4 with SMTP id ffacd0b85a97d-3a4e8c563edmr2094639f8f.2.1748436029778;
Wed, 28 May 2025 05:40:29 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IFgm9H75SMMwaoX1AG88zdRIO06bzIS23ohM35kMIoSFCm+CMBY4+ge1+xI0xZrIQCAijGB3A==
X-Received: by 2002:a05:6000:24c8:b0:3a4:e8c5:63a4 with SMTP id ffacd0b85a97d-3a4e8c563edmr2094614f8f.2.1748436029321;
Wed, 28 May 2025 05:40:29 -0700 (PDT)
Received: from ?IPV6:2003:d8:2f30:ec00:8f7e:58a4:ebf0:6a36? (p200300d82f30ec008f7e58a4ebf06a36.dip0.t-ipconnect.de. [2003:d8:2f30:ec00:8f7e:58a4:ebf0:6a36])
by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a4eac8ad8csm1401860f8f.55.2025.05.28.05.40.28
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 05:40:28 -0700 (PDT)
Message-ID: <2de2bbdb-f719-4faf-822c-d855f1eb653a@xxxxxxxxxx>
Date: Wed, 28 May 2025 14:40:27 +0200
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH v2] selftests/mm: add simple VM_PFNMAP tests based on
mmap'ing /dev/mem
To: Ryan Roberts <ryan.roberts@xxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx
Cc: linux-mm@xxxxxxxxx, linux-kselftest@xxxxxxxxxxxxxxx,
Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>, Shuah Khan <shuah@xxxxxxxxxx>,
Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>, Ingo Molnar
<mingo@xxxxxxxxxx>, Peter Xu <peterx@xxxxxxxxxx>, Dev Jain
<dev.jain@xxxxxxx>, Aishwarya TCV <Aishwarya.TCV@xxxxxxx>
References: <20250509153033.952746-1-david@xxxxxxxxxx>
<232960c2-81db-47ca-a337-38c4bce5f997@xxxxxxx>
<7cb7f23a-ce9e-4664-8083-deb73ed23da3@xxxxxxxxxx>
<3c15a093-7c19-4c2a-a571-56a5ed4b445f@xxxxxxxxxx>
<ee8db861-3632-48a1-977d-b05670d9637a@xxxxxxx>
From: David Hildenbrand <david@xxxxxxxxxx>
Content-Language: en-US
Autocrypt: addr=david@xxxxxxxxxx; keydata=
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
WNyWQQ==
Organization: Red Hat
In-Reply-To: <ee8db861-3632-48a1-977d-b05670d9637a@xxxxxxx>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 28.05.25 12:53, Ryan Roberts wrote:
> On 28/05/2025 11:48, David Hildenbrand wrote:
>> On 28.05.25 12:44, David Hildenbrand wrote:
>>> On 28.05.25 12:34, Ryan Roberts wrote:
>>>> Hi David,
>>>>
>>>>
>>>> On 09/05/2025 16:30, David Hildenbrand wrote:
>>>>> Let's test some basic functionality using /dev/mem. These tests will
>>>>> implicitly cover some PAT (Page Attribute Handling) handling on x86.
>>>>>
>>>>> These tests will only run when /dev/mem access to the first two pages
>>>>> in physical address space is possible and allowed; otherwise, the tests
>>>>> are skipped.
>>>>
>>>> We are seeing really horrible RAS errors with this test when run on arm64 tx2
>>>> machine. Based solely on reviewing the code, I think the problem is that tx2
>>>> doesn't have anything at phys address 0, so test_read_access() is trying to put
>>>> trasactions out to a bad address on the bus.
>>>>
>>>> tx2 /proc/iomem:
>>>>
>>>> $ sudo cat /proc/iomem
>>>> 30000000-37ffffff : PCI ECAM
>>>> 38000000-3fffffff : PCI ECAM
>>>> 40000000-5fffffff : PCI Bus 0000:00
>>>> ...
>>>>
>>>> Whereas my x86 box has some reserved memory:
>>>>
>>>> $ sudo cat /proc/iomem
>>>> 00000000-00000fff : Reserved
>>>> 00001000-0003dfff : System RAM
>>>> ...
>>>>
>>>
>>> A quick fix would be to make this test specific to x86 (the only one I
>>> tested on). We should always have the lower two pages IIRC (BIOS stuff etc).
>
> I'm not sure how far along this patch is? I'm guessing mm-stable? Perhaps you
> can do the quick fix, then I'd be happy to make this more robust for arm64 later?
Can you give the following a quick test on that machine? Then, I can send it as a
proper patch later.
From 40fea063f2fcf1474fb47cb9aebdb04fd825032b Mon Sep 17 00:00:00 2001
From: David Hildenbrand <david@xxxxxxxxxx>
Date: Wed, 28 May 2025 14:35:23 +0200
Subject: [PATCH] selftests/mm: two fixes for the pfnmap test
When unregistering the signal handler, we have to pass SIG_DFL, and
blindly reading from PFN 0 and PFN 1 seems to be problematic on !x86
systems. In particularly, on arm64 tx2 machines where noting resides
at these physical memory locations, we can generate RAS errors.
Let's fix it by scanning /proc/iomem for actual "System RAM".
Reported-by: Ryan Roberts <ryan.roberts@xxxxxxx>
Closes: https://lore.kernel.org/all/232960c2-81db-47ca-a337-38c4bce5f997@xxxxxxx/T/#u
Fixes: 2616b370323a ("selftests/mm: add simple VM_PFNMAP tests based on mmap'ing /dev/mem")
Signed-off-by: David Hildenbrand <david@xxxxxxxxxx>
---
tools/testing/selftests/mm/pfnmap.c | 61 +++++++++++++++++++++++++++--
1 file changed, 57 insertions(+), 4 deletions(-)
diff --git a/tools/testing/selftests/mm/pfnmap.c b/tools/testing/selftests/mm/pfnmap.c
index 8a9d19b6020c7..4943927a7d1ea 100644
--- a/tools/testing/selftests/mm/pfnmap.c
+++ b/tools/testing/selftests/mm/pfnmap.c
@@ -12,6 +12,8 @@
#include <stdint.h>
#include <unistd.h>
#include <errno.h>
+#include <stdio.h>
+#include <ctype.h>
#include <fcntl.h>
#include <signal.h>
#include <setjmp.h>
@@ -43,14 +45,62 @@ static int test_read_access(char *addr, size_t size, size_t pagesize)
/* Force a read that the compiler cannot optimize out. */
*((volatile char *)(addr + offs));
}
- if (signal(SIGSEGV, signal_handler) == SIG_ERR)
+ if (signal(SIGSEGV, SIG_DFL) == SIG_ERR)
return -EINVAL;
return ret;
}
+static int find_ram_target(off_t *phys_addr,
+ unsigned long pagesize)
+{
+ unsigned long long start, end;
+ char line[80], *end_ptr;
+ FILE *file;
+
+ /* Search /proc/iomem for the first suitable "System RAM" range. */
+ file = fopen("/proc/iomem", "r");
+ if (!file)
+ return -errno;
+
+ while (fgets(line, sizeof(line), file)) {
+ /* Ignore any child nodes. */
+ if (!isalnum(line[0]))
+ continue;
+
+ if (!strstr(line, "System RAM\n"))
+ continue;
+
+ start = strtoull(line, &end_ptr, 16);
+ /* Skip over the "-" */
+ end_ptr++;
+ /* Make end "exclusive". */
+ end = strtoull(end_ptr, NULL, 16) + 1;
+
+ /* Actual addresses are not exported */
+ if (!start && !end)
+ break;
+
+ /* We need full pages. */
+ start = (start + pagesize - 1) & ~(pagesize - 1);
+ end &= ~(pagesize - 1);
+
+ if (start != (off_t)start)
+ break;
+
+ /* We need two pages. */
+ if (end > start + 2 * pagesize) {
+ fclose(file);
+ *phys_addr = start;
+ return 0;
+ }
+ }
+ return -ENOENT;
+}
+
FIXTURE(pfnmap)
{
+ off_t phys_addr;
size_t pagesize;
int dev_mem_fd;
char *addr1;
@@ -63,14 +113,17 @@ FIXTURE_SETUP(pfnmap)
{
self->pagesize = getpagesize();
+ /* We'll require two physical pages throughout our tests ... */
+ if (find_ram_target(&self->phys_addr, self->pagesize))
+ SKIP(return, "Cannot find ram target in '/dev/iomem'\n");
+
self->dev_mem_fd = open("/dev/mem", O_RDONLY);
if (self->dev_mem_fd < 0)
SKIP(return, "Cannot open '/dev/mem'\n");
- /* We'll require the first two pages throughout our tests ... */
self->size1 = self->pagesize * 2;
self->addr1 = mmap(NULL, self->size1, PROT_READ, MAP_SHARED,
- self->dev_mem_fd, 0);
+ self->dev_mem_fd, self->phys_addr);
if (self->addr1 == MAP_FAILED)
SKIP(return, "Cannot mmap '/dev/mem'\n");
@@ -129,7 +182,7 @@ TEST_F(pfnmap, munmap_split)
*/
self->size2 = self->pagesize;
self->addr2 = mmap(NULL, self->pagesize, PROT_READ, MAP_SHARED,
- self->dev_mem_fd, 0);
+ self->dev_mem_fd, self->phys_addr);
ASSERT_NE(self->addr2, MAP_FAILED);
}
--
2.49.0
--
Cheers,
David / dhildenb
Return-Path: <linux-kernel+bounces-665463-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 8CF5F41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:42:02 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 1920D188D884
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:42:08 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id D401A1E3DC8;
Wed, 28 May 2025 12:41:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=fail reason="signature verification failed" (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="A384PeAi"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 933D8272E6F;
Wed, 28 May 2025 12:38:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748435914; cv=none; b=Lh1lTl1HYpmd/yfFCEX1VJiXf5zfhW/41zVmzv7FLj6STi7pJNbOPDFy+FtXeXluRhHx9U9OmFMvN0ZuxyL27X5QJKPRkVa77fI377jl5aZtNfrFH6pEeEGb6Pk9ibOexdtTlwoiQ04+vfS7PkfCsHbw5h7KUzMsV/w3bsCajFo=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748435914; c=relaxed/simple;
bh=7oibKRHEwEa+muLY7zKBw4lRk4GWatqJV9u9ZigMssg=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=tFyqBPuyqUlrorK6Ayo4wahd8N9zFicElZPoEhX05gbHAOmsLZg8khs0TSQW/rMywpL7gsR8IDCfAWT+6vDfFz/sM5gy0SliuDCq+W6W9mPXNLK7cfzhivUXg2u+sb9fw1dymXntVt7/RxGHOQxY+zPwFpPnqoLEUiZJYXCi5/8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=A384PeAi; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 73716C4CEF1;
Wed, 28 May 2025 12:38:31 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748435912;
bh=7oibKRHEwEa+muLY7zKBw4lRk4GWatqJV9u9ZigMssg=;
h=References:In-Reply-To:From:Date:Subject:To:List-Id:Cc:From;
b=A384PeAi/Sw/103gEt+aLmxQLcBJ8Oa4YqyLjcICM9wlO9sNeA810a/2YqI+r6nk9
baAelh7dEyZIQAXBLXIlOQmtY/TWw6Qg2QQPBma01Rs3uHgIL1DKiPVpx5KU5NhqA6
p6M6d9+hgeFmLd8QAseZdkGIVt42nbgtvaGwTgWfm/Q0yksmj0v6ae4es1RLh6xXIL
M7merTGhohSgwW9YJJWJNYwAkYnhnEhUTi7qjZ7ckAbYJ9KA90NzpMwFTibLlcRYrS
DQG2GJ7XPNWtu9qp/nSFvO8AJNdrQtMUnQEwrb/ZonHuEtyY9zW8F1cww4t0IuRAQR
KFpT7JsTkQgTQ==
Received: by mail-yw1-f172.google.com with SMTP id 00721157ae682-70e75bf727fso19915757b3.0;
Wed, 28 May 2025 05:38:31 -0700 (PDT)
X-Forwarded-Encrypted: i=1; AJvYcCUaNp9o5lBUYqL81Cku08Qw3nXfn6YyVEqBT3CFkfcA1jjhlvX7taekgUewEeC7qXj0ay0R8GKTF9gdydM=@vger.kernel.org, AJvYcCW25VMcph0bGN0pihzSz5Em9OHBLV8Qan2YY9vTOSRaQzkWzFlZRRU8Yhjg6E6bnezjqCbVPf64fn3HN+IUXYE=@vger.kernel.org
X-Gm-Message-State: AOJu0YyKuezUECWqOK9BsKaCy4YiicgA7fKIeb9uHZ7FHD3VJTmFx3Nm
bCVHTaAQhuHoTr1ne16CLxylhQEP3195KGQqLhNWnNuX98AW5xepNM8ZGlwCfEp8drYTZiCh9fz
YBNHUeQxbtVs4u8BqC5SAGQa0fWTaIp0=
X-Google-Smtp-Source: AGHT+IHx+cGEwMFBS16ma6jql17kFt1jVveKaYgwelr6X1930zMDUz05LZUKMeOeeVzEK0KnhuH5LTRQV+wvOXWBokU=
X-Received: by 2002:a05:690c:6e13:b0:70e:21be:a6c5 with SMTP id
00721157ae682-70f31453de5mr25347077b3.26.1748435909355; Wed, 28 May 2025
05:38:29 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250528064305.532840-1-allan.wang@xxxxxxxxxxxx>
In-Reply-To: <20250528064305.532840-1-allan.wang@xxxxxxxxxxxx>
From: Josh Boyer <jwboyer@xxxxxxxxxx>
Date: Wed, 28 May 2025 08:38:12 -0400
X-Gmail-Original-Message-ID: <CA+5PVA5U8zZ-M=YQQg2KOECdQE=n1d8A=iiTAZcbXti4qurCFw@xxxxxxxxxxxxxx>
X-Gm-Features: AX0GCFsx56Zqh1xT7IsPPWQc4AhTpJ2f_fGF1X8_p-VPHJWx5Kliswtz0eAizyE
Message-ID: <CA+5PVA5U8zZ-M=YQQg2KOECdQE=n1d8A=iiTAZcbXti4qurCFw@xxxxxxxxxxxxxx>
Subject: Re: [PATCH] linux-firmware: update firmware for MT7925 WiFi device
To: Allan Wang <allan.wang@xxxxxxxxxxxx>
Cc: jwboyer@xxxxxxxxxx, dwmw2@xxxxxxxxxxxxx, ben@xxxxxxxxxxxxxxx,
Felix Fietkau <nbd@xxxxxxxx>, Lorenzo Bianconi <lorenzo@xxxxxxxxxx>, Sean Wang <sean.wang@xxxxxxxxxxxx>,
Quan Zhou <quan.zhou@xxxxxxxxxxxx>, Soul Huang <Soul.Huang@xxxxxxxxxxxx>,
Ming Yen Hsieh <mingyen.hsieh@xxxxxxxxxxxx>, KM Lin <km.lin@xxxxxxxxxxxx>,
Robin Chiu <robin.chiu@xxxxxxxxxxxx>, Deren Wu <deren.wu@xxxxxxxxxxxx>,
Michael Lo <michael.lo@xxxxxxxxxxxx>, Jack Kao <jack.kao@xxxxxxxxxxxx>,
Chris Lu <chris.lu@xxxxxxxxxxxx>, linux-firmware <linux-firmware@xxxxxxxxxx>,
linux-wireless <linux-wireless@xxxxxxxxxxxxxxx>,
linux-mediatek <linux-mediatek@xxxxxxxxxxxxxxxxxxx>,
linux-kernel <linux-kernel@xxxxxxxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Merged and pushed out.
https://gitlab.com/kernel-firmware/linux-firmware/-/merge_requests/564
josh
On Wed, May 28, 2025 at 2:46=E2=80=AFAM Allan Wang <allan.wang@xxxxxxxxxxxx=
> wrote:
>
> Update binary firmware for MT7925 WiFi devices
>
> File: mediatek/mt7925/WIFI_MT7925_PATCH_MCU_1_1_hdr.bin
> Version: 20250526152947a
> File: mediatek/mt7925/WIFI_RAM_CODE_MT7925_1_1.bin
> Version: 20250526152808
>
> Signed-off-by: Allan Wang <allan.wang@xxxxxxxxxxxx>
> ---
> WHENCE | 4 ++--
> .../mt7925/WIFI_MT7925_PATCH_MCU_1_1_hdr.bin | Bin 212384 -> 212512 byt=
es
> mediatek/mt7925/WIFI_RAM_CODE_MT7925_1_1.bin | Bin 1204648 -> 1204648 b=
ytes
> 3 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/WHENCE b/WHENCE
> index 93f849c4..394c23d6 100644
> --- a/WHENCE
> +++ b/WHENCE
> @@ -6214,9 +6214,9 @@ Licence: Redistributable. See LICENCE.mediatek for =
details.
> Driver: mt7925 - MediaTek MT7925 Wireless MACs
>
> File: mediatek/mt7925/WIFI_MT7925_PATCH_MCU_1_1_hdr.bin
> -Version: 20250425072955a
> +Version: 20250526152947a
> File: mediatek/mt7925/WIFI_RAM_CODE_MT7925_1_1.bin
> -Version: 20250425072801
> +Version: 20250526152808
>
> Licence: Redistributable. See LICENCE.mediatek for details.
>
> diff --git a/mediatek/mt7925/WIFI_MT7925_PATCH_MCU_1_1_hdr.bin b/mediatek=
/mt7925/WIFI_MT7925_PATCH_MCU_1_1_hdr.bin
> index 776e2b97dd4d710674c0f18e6bb65e41f7d94ae4..5c664f855f56a639224fd6e17=
e267b054b807226 100644
> GIT binary patch
> literal 212512
> zcma%iLy#^|vt--0ZQHhu+qiApwr$(CZQIt@ylq?azc(}S7PFaLRAyyVM%3AyU9m8+
> zursl<a4@s8aI<k5!U)SLsYW41A^rXbK>vXlD+%&{2<*S~e*gjm^uPW8-Tr@6(ErK+
> z9RLBP1^^}e*L-RK@PE;N<A2oub^agz?|hm85J>sJ0T9)HHYgwXpVa@T|0nl<45Gt`
> zM|q-X#g*XM(8>vhzl!czGS9BsYlT_SjZ=3D*Y?v+<F?tG3JC|CN(k%5>8@l3`lv45k8
> zyUlKxNeb3qS&DM-o|6_|oh+x&oGFSc#4OqUotG*=3DAE0rj8;iGCT>O%Q2E2VS-AbJa
> z+AId!GHN*>>|nO51$L-%F(=3Dy;Kap$0q%mZ|lBkJ9CI-bqh~ej>TVQ@FP9jtRO0-z+
> z6ZOmEiD-IKOY~6p%fre$(rrvK*o|=3DQsO)j@<HwK3u%NR}u=3DNJ<PyY;m-fXH0G}^RL
> zEK9t-SB}NbQY#`Wjq=3DtbU^8nl<2(_#2$rEknJK@kPp}uy$D1L~z|ykH&05~#7OpCE
> zwMZIF-U2Jzo<$kE>MCY|l8n(Kq^(V&dlB7dk;cbiM^*&IhTJT4v<@F?nn_UA3|BcC
> z57$^7XHe4yZELfVu?r7{P|3i`20CN;{e2s@=3Dv@HCw(ky+t2T{0Z|?5+k>@s)Uaqip
> zM#-JdnewUmw0@_d&pI8nq9v0^hh%J(@~K#{LZ!%YWpqj8Wh9NxNGjk&$KKdi$?t9o
> ztrHF?HL2RHZ=3D*xX-pCl*eV*>ljpU|9Y@mnzw_X=3D-`FLuG^Ek^pl}4(tl0?J*TBH}X
> zP3vkF_X*rfO%to$u@w+n_0Gy6RU;jo6ZFOId?<0zcDH^V&4-x`b&Bk;OOpFVe3cSb
> zWE0-PTLUn{H1=3Dj8mcO{s^ggBB2@#KVOsO{*D0~K6Uolj?*z@I*S$JdpJg?kBxdR`F
> zyRy(D5?)f*83lAn;{^m;wvdtVJ1|37U*K}qQ=3DW<+Nz*=3DVsy`)aWI}HziTVA%`BKXm
> z;~aD2W_5?)pQmOSoN|vxcn&i!)EBfZ=3D1JF~ab5#%KFD*?jJM7jIj*wP<VIHxS%W_0
> z84FkhN-kk=3DBkOiYO-gm7Dp1o&sdX-RNbGkM4SFWo0w)tZXk=3Dl3GF}rJ5`m>7D02Wc
> zk`JPBHe|Vd4V|<^L!2nLQ*y%4Zg{%vKLtQRFBMZ$`}b&@3n<))NP>Oat9O#UlR#9-
> z2nwx{t=3DDL?`s-ieh3hqP6BqWXtD^orUcSbmU`O~9is)nF2G5fkFU7lf2>m>NCzOv3
> z&CdYq&O1h$`L`8XJ)yGsa{~zKB?v|rVg~Ey%{P`ddk({Fh9Tl6Q|1&4p4=3DaG--A3r
> zp=3Db(ni{zkgM}<L0FzN1K*r7ztI0({zr$(V{_k0o_jc;?@qfz?Dd}7lf{+v&V>P9Dk
> zX4BkSI-!qwEvj@v&0dponsZTSE%i|AbRqsh6bp$Y+nfVZNh1aeBH9C6n0aMi?I=3DV|
> zs$_yS9J;)K9|M(zh$f)Ib_1JF!PQlDwLb8x)JFfdmz`uvj_1I>I$d;Fjo6);_4NDX
> z#jRKkrqfV^g!Aw+j-5g}``Ih`UXGvsj*ux}h5J|(JM>#3%13=3DTZ}P-Ytw&`kH(S%w
> z5j3{pkEv0~J2D#x$o5*HF9t4Ks&j+NP~>%SjTwOV*jF$y5SO7RTW5o-#|t-10`%FU
> zfS!pFuub|?UeA+ff)5U^hdn%}&yadf=3DK6tWMpGV$OH)D=3DT-9C_M?Dl$Rg`EwB&@$o
> zxO{zkB|b6cUPUwH6nNjEEMm2Akh<;ax*%t=3DCa{u^y4#TL<Kod(k@5u_2!c`VZ{m}Y
> z(Y|9>Pe>p)ukc{(7zI%a^JffCAR_+i`ryZ38x>p)_|xNCwTPGuCeI)@S2^eWA{G0{
> zaseOV$%GNo2ylP~{>oU_q1fnwSe^<;FfmL~qap&oJI&@Fmr!{g7Sa*RI~M%lTeT9y
> z<hbXet)=3D{f;V<Q3wZhdT$AOB!S(=3D8GKpWoroi+?e<>tAU8$#*d;K}gAb%s01s7AfC
> zEqV>vg^}8Ek);`}rx;5I2_Xy?W8Q~j6R;u}MA?#k|KiwW`pfDlC^*)Ppia_IyKY{6
> z+Km{bxwc8-V<=3D2Zok)>sn1fz$mlWuctxU>Kvcl2QfeyeU$Ri8%$!vk?5&Zrl;XFzS
> z&{`9`^=3Dn=3DcyX;$%Lo461BzrXG`CSt&<Gnjg`?Yy&WVNk(=3D}$w1(CxgP$2`w`0^0Tp
> zqA{CtJ->BesD(6DBV4S=3D(Tc_<Yg2vA|0wEc`<t0yvkDB>dFhsq8YmWFtkrFu2gEO`
> z-k#+%_m?fFN%Nt7W$rC67hVHKKmwPEvrHz-6jv-p;hdHcd-~A-w}Wp(7($|5@7gE0
> zJ3oTiD}QC<&Zn1!uKGejOSi(0ASB>b1R`}mz61@%CHg!=3Do1ZPi(D-bq8d_$~R6W=3Dt
> zQvZ*h4%7HCpBd|`@xicaNpy_ir2K^;Q|Vg|eADgT{cJJwYx`eyS^Q@hzwdjlP8!ly
> zJ(=3DmiKiNZ0QUoKLNZQD9h^`>3y{Pb;7#^r+t4564C6SSY{QAjK9WVhZ(XB2chsrkf
> z4wTjRJ4-T%?lA)N(LvlZkl&Yzi{Cdd`yoYZW(EW-7}7d9l|zVt%D`h2m>_fYpEwcI
> zBraWHRUWz*l)c_8&#jmP>mwgT%_Vw1ZMXXr21y{{Q*I;ckW%K{{2jAp^HDP^w4z-i
> z-i+YZIf9GT=3DOVjPnDL>2Qqe!FOZG;W{|q_%X+MZE4)e))rW5qmEF&X+@!M5%ArwBe
> z9<~T$xBVofK(V;<NO(PN(HhW}@V5vb6)WYa5%;C|`t?~L_ji0zwqoa7nfanZ{2lk&
> zfuFSabYfnjmFbRpLtd%p9LeL=3DsizF0Fz!=3D7h~_tRkM{+xe|<}Q+Pq-^vRbi;O`0%*
> zs(Ic@d%!`4kW+M$z(`|3s$MGy-0}%g$}_U5tShielsV|1?U2!nY1m$|q^O37SlLIb
> zP-C9$TJM6(UN;FXl0_*2@t;#O45g9k1=3DrNbXJb-T!PMH=3DVoSWWy~bspTE>b`5yF8y
> zWDT-9F^r<LPpwyGE6%;@w?AvsoR47rGU+anf(A4zwDQTaF~CEIwUcOHBb%(}`^VgL
> zb3J}A5^LdCi-Z1$*ztQSTfSFhJJ(&Bl9ldEPStP-zL(;#L0eIQq`8|Pm=3DapF4Mutc
> z><(-Vx0w*N#d&Jr)_(RpH_|#InO>Dfj}-GkM8Ephz^31&FG4Zekf=3D}NSvandIYxr-
> zmmi*KZ+KfUojq7VJzKb2O#VF6_q^XzEzHl@mN<p6!&!6k)u33&yLIzCNQL<+cX;@7
> z;mm;FT`oKwTam}7Qs#7u__s1V8AhL+Y%C1*w%Vek)geXFHF}<+g|c)}I?litDb}i#
> z<I6I_4c-1`UjBPt-f+|}M)XmPHQ6)fnamBY{8O*7p4pyUC(>qg?}*p1<lRAVqEBw{
> zt<z!(-v|D^$~n5j5Z~;t--!MT9hrcQPw7c?!6mlpFI|TQR^SM6x^)f6li4RBXVQ!x
> z=3DdwkS*J`cWi{`*9^Dh!0JOO0;h%>~EsBSGLVDzcgvn!wCe{Rz0WS7LBHI8|3OU(Vb
> zw?s<Ij;|c<lTigaBrSIg9b}9%)JP7}WRb^5l3aMTOX%|39_A%+NQjhut*h#XwM_kW
> z;0Q)6t*|=3DZf4pu6N?`<+r>|<Tltle~=3D8^*X8XQSTR1<$|;glq!tQwkExO3Q>9BF48
> z@l)V!V!QdhfNgfd9^c)psTCBz-=3D>7-OxO&LZKipBOcT2Owr`VLfdSB@e^;bk>Lg(T
> zBCSNrgx6jAv<r>HQa-|2^}q<EjY~E{fH_99&a03&R7#wl0%y0)$h-i0j36Ex@XE<?
> zA_G%B%Lbqk8kgu_RxwE8clI{;Y?l-I_gx7}Q_vwLTKYsePXBqZ(s}R5Dh=3DaDX7>Hh
> zU6pO(Cu81Zr$01=3DlDs5W^%l+9*U9dzeR?$s)^IfzP^%vPxG&BUVV|;psDKazft#1D
> z7gT5?^$_sxMz*57_>}LAa0W_r&Of!n2+T=3DQ#ItWwc#Dl`eud-?kv>jH_BKzc5z{J}
> zXwN>nfa{+6!tq7H^4va`WN$wFPEjD2Q|$R#QriqqZmv02+cpAv-7X#p95cAiuQw_P
> zBdjlt1|8M+2hAL^yOBMV{`|VNV1O%gE^fy!(+NuEZ=3DILLmd$ttUk>o1AD}~grni!g
> zsj-jJH&1(=3DPrw@`>isvNR_EEi2U<@Fk#%`id>>gKno*ZqY7AG0*klqBPc#STKmX%Y
> zUfV`#sEWAhDz2Gspp{eOPsg=3Dk=3DK2{;?tFGk<iL%f*67cgc33qN{tPuVzMpGYj@T8~
> z16iQf6y~~fbeVWRc!=3D@(m}l_QEQ)N%8P=3DffKjI_=3Dp#{v*Vg<(jXH9fz_s7wQR+0cP
> zVcw@pPOzVc47zC(&uhgo$D)z#My<oahbPXw`(A5>J{M)Ur;jAkc_7Gl_Y-Z%7m`l(
> zit2sSY#$)o5P-6Az@KQx6l|MJuH9JM{(Wqss!Ockd^i4fbnj_EE)sQ_0fQ+aGdlS(
> zBu?asruxk=3D^82n&g4|`17uk=3D5!O*JYdfz5ZPKtqfcEh)pwG!E}imS;I#Nj=3DZknz>g
> z%LJ1`nDCS>njn?-7u1FPe2pUX8#tUu_~%e#{g32<8zN_VAEgkI!XmV{1YB4bAa`%<
> zVXeuUnr87Vna(Nk47w9V&)Wk(GjHldUD*xlkwD@(QByTHAty@c)9Asp6BT%RO3@R5
> zcn!mN9Uzk+5z$x7zxL+`uoEMaWG0_o)-a0F!J^bHTDTl!QhAEOPMq5avN2^@b;Bv3
> zQU7L43h7AODqB=3DpVS=3DvqMFw3g1!DoVo+(wQq|)t3lkdP2IU8k)S?YckBN?I%Kv;*Y
> zd${z)q6=3Dt8NJZle(^Gv$d(7!frDy#os2_w0l}amvs{ZkE`<p)e0Ifxw7DuDGWTM2|
> zh!U*gwC^5k7fxCBE-b&LGVaD3XgwI6lK8iGy$Y7C&Q2j?CyWD9eWbXj2wr--DOB1G
> zmy?vIhAyJng;oLR=3DSRU0)B&zr-<@mc`C~k~iQJX=3Dr&WEe%hmU4f}}!Ae59DE`moko
> z{HywKldz5pR_nw^dYLmF{EVyKUFd@`3Fj-D{^sz@DO{*Mv<n%6yfrh5GOcVVV10C>
> zKcx_nl`@`z@5X};%ldPnLC=3DotpG(FnUH@cn>6Onuz}6L<qUuG4<V0>+V<lJcIZs>F
> zAO{AYP%8amw~b-o?uVCSc}v4CXrqWB#K2y;M#gRgUT(_f6C8c`%NCDJZiQ$E>cB=3Dk
> zjV(Kbl*Q>)7*Vq#u(Oq038M0XYCn7Iufo#S7TzzVovM|*E^;q*u#})Vfp!fJ%}_jT
> z;vm#8umqBec=3D7@S`QmqUlo^A)dki1G=3DNQIp@OvH;)DLJ`Vw1_X@#ky^IR!PUdn66!
> zU@$&R{{-aU12Ev07<~=3DYurTXma@e&_oIo~-_)`{)kpk*VIEIMrpDGF>@>?BYf9T%a
> zc^a@n;LE!6&kvE+Cq_L>q9^u>IIYa}rR}$z8cMS09K;Tc)a6rNF_BX<<z$f(1`8(r
> zf9<HkYccpuXqy`{^K!tCFYx#H3pwzNqeMDKSf=3DyTq}6)Okx|i(Pzruj(Fo$@`$HxS
> z%$7Lk1AA|Zte2CPB#O;%89cSOI0hx?h+$(H=3D?z719HvQDXn@k3X>c8sHCkr$%9eF=3D
> zW%XaQ#5LjSOhz%B+8|0GN16|))MOh18AhTp^_0ny=3DPQX9+cP~k@%e;dp{xcpA<QDG
> ztq2_|1j_6)p!grFsaTmr%XkX=3DcDghFY8CXXbs`a&<Wo;e+gb_()CQ;mlp4_8=3Dq&ZT
> z_W7V^XA$Q~QP}*EJh#k>3?j2*=3Dk8za1_Yr3+`z4)hO$H7>O@eednVVA)Z_)p-LL0F
> zyH??^a8AVGy?rN`b6?J;P%&D}Zv%q>lr5ts{GbtUk4YgWwU?CJ1o}(ddC84Y{y8r?
> zOBXju$)yZ)M<p>LG@N3MsvU7~v2hl)n?(|ftOxH|$M^5!`V*2?PHqMue0$~h>!uoY
> zbw?zX#7dsC&|2n-;K%d(InwwTUpvstvp!Ay3f;t;>_=3DqJe{*H|I@?6b4ev$MteGWV
> zogQ$j<H}MI#<!NEX$_VIg!}kpRc8a#pb>689>4EBJ(2qe<mb*@W9nFRr$MGa_6b4{
> zq#kNespd(=3Dr^@ygmpP(RFB4gg#a#Ie=3Dt?K5IyW=3Dj9*>^q{t=3D!LQm7a;Im?o_(5#l=
f
> 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
h
> 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
)w8K;
> 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
O
> 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
l
> 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
V
> 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
^
> zTg&7jBqOik6M}rqS{jhNo{YWE>o3fXohkrBd|!HHv`ofkT04B;!2=3D~tQ`LtS>hCc&
> z$9d>HE*{_08BZnE$!g~heGT0OVh7+*>w(fQ&8(+F+c;Jr`=3D26K+V~sgyJej#l~HkY
> zeI@!aN%1XQ0|N0K%---$^!Uu=3Dk}rurluqs_*N0TaTI>_qJ2yy0kQvq3KFSo`>8N+!
> zyUJm74jNG0MLSVrXh%mGr@C?xV0AG6@{XF|_r8`DW`j<u#%rBBss*Hs{6zcfTA+vz
> z+v=3DZWOv6jP+Zj(fb24zAO1U^@SKuDb{-p#lBdZ8i3GHp+I&H;DS>Au?j$JBz?MuIs
> z#|w1#XPZ1BJCmRVwT3>JHn)>imO0ileu>)X%O56UBZ6{bUsfa}<%nPTlV?Y58fHT7
> zAG4yIX<=3DRG+L`~xo81PK<B~r<q;z1uj)0*`-PrE-R^6NDz|eNc1~gPHizvA!B4bK6
> zK~m!iiXiQUQNqVpoPh4G_&FnK^OM(YN%#kwbeM+y&je7jmIWyW_{(#xFKIQ7xy3}D
> zVYME7J&hZfyp93oZ0gIr56v1CObxd>TRn^0r8Kp|H22J~2mGM*JFUA!i<Ed(Nxjg;
> zJD^R782GB@yaYh0#fI65C4I{S=3DVY{+k!7!UMh*;|G#@|NO21UX0F{2pz{PQRvH_DE
> z;?>`iUzE)qQg=3Dd>L6A&631x%LA<<{~hH5_F$We#U9|gSUMQ9K8L0s5*R+ZZAH5}7^
> zL^h7^8QbsplB~jDWcY3FP;Mb3_%BWkyJM}hzoO&J@A24@!WrVcE3B!+!5yFP@)3BS
> zO)zlSf`oO46Ie6;*ZuY>Hq9vCdkLDR%&MSoOoex@=3D~bj;?jJ*mvMn<!(*9-C_`J3D
> zW|&=3DM=3Dm=3DzM8qSJ7Nkg(+>a_Ts`%~d<VIJ<%G_e=3D6dR0PK^Uq9mLgx@T^#b9lkJ7B=
e
> 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
A
> z7B}<BcA_HEG2>d-A{j`}*v6&B&|Vf!)_9rp=3D6~ZFR?d&8>uVlP{VYA%)KN+G0vLyE
> z0LGM)17;UfOAb5$4V!L-u$G~?ZeKU`1^3+?SIQy?O5}_|4GMntcQOQ9{xFf#RL(nr
> zRw)V{J=3D(1)4l#`c)4{Bs6n6y{eO$$i1b_GDQG--44eu*A+EtU0%@|AD7XFe3R5&wq
> z#(VcHSvAX%KgjI-Z}-^IXd#WNI7^`;lQ!~Z+!PIgLsL^?L_B<vrZEphW`z!<GL0}B
> zN5Uu62entx`V72`We>^D#<YWb#7;!^FSEY9-V`VeJ+fms61!~z`yc~W_60it#iQ9I
> zc20d^LkzLd2q%3+nu=3DQv*&Zb|gQ9}M=3DJXE;ocX7dj=3D?B%@qz~)2_=3D8bfq5T8K@-k=
p
> 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
H
> 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�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
R
> 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
=3D
> zVG02TOOEddo^RTD^sMlBU(-z(k*2j+l{C@kZP#ZbPYL9>{@vV~l;Jt<rQC2pAuUhY
> zBF90aN$4$_Sv4toJo@=3D6IS_Q^A?xv8&zm|@uOB0vPt3hj&wk#wrSX(CJ1;RBO*CrQ
> zI><<TL?iSb1dEq$!wIRh&#=3DwRy5#;+j^g#^PWlm>GaRdJpFGgcajc6C;XVBOje1M-
> zJj?QD{pU6!Np+~vWH(%glloC$Qo7(RQfzt?X9c9p7fsIMvDmIE)&!NrITeZf0hQH7
> zVcmGy1!R9YCB2mG`FrC?6I3Ax{-QPKYlR!|*Yzf!qt@o+&)|+u0)}I|U=3DagMBq9Xp
> z(lk)#BPc~0++joX>ed8s&~WwD95)iPLM{W*ZV5$KN&YDP>0RFf$5lwq@!p2MN}&_C
> zig@-^<f+2I1V2`^Z{iM3?40lBxUhg8TtCC7o)@%(Mc$vGO8!sT#sGT4`_Ul%6~$}C
> z>=3DH3g@w{r!u!gpxzU6HZG8voFU2|KpSMYnMn|_9RyV?8weRHgNu|9`BskUMUk*=3DX!
> zD^YAwHp7^oA&7{&iVF&9ZIND=3D7=3DqP6fi$qP-9v_c{Lja-Mx}x#{y{c6Noz=3D>pA}>=
=3D
> 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≶Zw_rk#{vPv3i6Sn5MFget&;9G)NiwY7M$WD
> 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
^
> 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
*
> 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
A
> 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
*
> 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
D
> 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
g*<
> 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
U
> zVH1>D<Yr5v^`DA82oz=3DqZq;EsoVNG`$JG7@bp&deCSArDCnpN60E0?%&tB(^!Yz}+
> z>#P{$uWU+<OM_Vz4lO-!UW8`+mjsq(es3oCw#KC(6^%ZCK3y(PiecHhBs&<i$1kr@
> z!<kX^*a;&9^}at^CXb}?PouR$_6D8o2-(`7BFiF-=3D(jNA?2U&CB}$iO4CH9b;V_*C
> zEz)nNGnsrba&0?PU#Jg$tSFu^Y3VIign|Nc=3D_FeS5_`wjzt_JYV$uVH4#auKg95g4
> z#;c3rd0!}vMAXPsrc0bq1^v)7zj?97^5;#GpE8vs`9(lW>>7xM&-AK^tm=3DdxJ=3D57C
> z2ON^Z4wLQ5Suw!-U@G8bhX_;sZO=3DNA7TCb-Co789FCBt@PxX<S$AXBC=3DU(`7Mu|h)
> zm0Ye>+S>;Qot1}a>H>-Ac`qDNU(Ik$I4sNhJAlmfQV-;q4xg(*@1!wFMJsFLeV}G!
> zn3AE$dY6g$em4uESXP%26v}-vciAH$bC*J}u{n9fcsRyKhBag!3q(NQTri0pOxC`)
> zn3Rw%I&i(%5clB{PGy$x*IDTsn6Ab+VtE820X*IILlUT$m(a?NZmG3wnT^*2FKU33
> zejiJ-p9~O_Z4@$`BB?u}o;UDqit0*UelM1!B3Hf<=3DeS4WraEpx3k2xnU`H;X+vS+^
> zV-E0|(ArpTqXH$)9na2hN?`_)OL~keSj&%TJuGLu^J+N7;BhkYe1_o8K%i3}4>%FG
> z<XsF&wc+bw5#YOQR)QzzULFs)f<aw<Iv!28YqrGs4_~1t`HQ`VLpr%w6IV^9*?Zaa
> z{nd!*&7I-=3Djyk32%%?b@8?4fm>@eM|{;r~_&oGbqiOtRp`jZ1<&wo^umkFph>7P~p
> z`Sjm<8FoFHkZnkzu;Ys#dHW!;R91;7;v>McXn4i3k4r72c2NOFzcw7_LS{O%#sXfk
> zRRA5fsC2y4`+10NK_R{$o(Be1{QG|@=3D=3DM>U!RtJVMhLWicIeVII-0Ve<QsrGV!^-V
> z(x=3Dzm;->bXfP|Qboi5C4N8WM5It?r%5Qf~K3;oJ3NB6Y$jPuSw5C}7$U5eBAoK<Vv
> zF~A=3DLk6c)T0Ne=3Dsos|_gutfY5-{H^%+DrTKbB~$(x6X+u;#l@(jVX$hHzYjHY<5gQ
> z7O}uNSRYo_(IKc#yBZpoe`JX@;C(21#{EY@{@(sHES7|E6#9H@K9{+&z{B?X3cN!7
> zp%Ml=3Dyo@v3=3D+w#=3DRbc0=3DCwZqJ(P_Wo(f+%>!~@F}*THeBrv;zI;|J>C3fj2+&>a>=
`
> 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
U
> zgVs~;PedT;Tur?J#RN?vE%m;kV8)mXFt~)sEnBUWZkY2Z{Cp`H)Da2D(uIUE1EO%A
> zmrx8@^i(iG{k*);sW{8G?Yz3Z%)y$y$=3DZ{QP&DK3L#WiDtEx^&uG;@EXC@8ogXZRa
> z6xG1-`vKsW#0D15QMuIDfPM<B^Z@v&MSL2~`dn9k(}PFzeg%sli8Xxs1>lHV#ufDm
> zRJv%et7~te5hgoKNorpRS7yhv0f`Z6lIZIKacaF(WNHs=3Dzf!l2IyNd&O*Gy*a<HK7
> zU$8V#G58t?`4G5|SA#ih`9$(+;M3gHFrxlm;SC)Umn5^%&{EmUxXjnZ26^R-hBtzV
> z94Wu^cr$G~ay8tJKusv%S&s5Z?rzM;Wiq;RK2?;6Ftt>KYzshO28T>kF5|-=3Dd>T*b
> zGJ;V4(NyjZwVn|4p%Cri4h(Y))1I<s5H=3D}Ep3<yJV)GV1H)TTFVV<%G$ES(%C$5#=3D
> zDxjE9mTLs*s-j-H-X$QBTLwiaWDx-?DWO3PWb*@ZOsRnD@+VbD$b?|gygjwRvlk}y
> zb<ax^ZD=3D5N&?)zKdPh`c1MjsIhHV~W)ChpkH<daB^m}w#+(pa8I=3DNbOYw;xD2Z(#}
> zDle!4Ih&7TGyZpcc8OSDeu`L!SmI-({>AJHi>tdqAz{vi`Q-@b6<BJ2>QwQNb{RzK
> zUmG7yp_n?DzEi@Yjrbh8wlst1;sf{{p>W`6pitQArh?CX>-j-`H}`K~b`v_RUC_p=3D
> zq^<`4_0Dr2^Xf@cPl5@li{uLXrM}dz%O>$l`KKHVzL2`Ldz?E+Y_~OHvNJO_M)cyS
> z0F`Ygdagpr;uRT3e0LEd+`R+|mFv@IyD>6s&r_($Dr$t6kyEcaU+t(*_af{bAGlDx
> zS&EY(;LR`P8yco5Z}*PDIso`A<KYM83eP;N9xEC+<dVx5^3h%;N|Vhu>u6kx*ZEL3
> z0ED|ebaFn%x1}uFiCXEdjERq>AaZn?ns?`_cob7$t2Z@!ta$uu)d?m<O-xg+3`C35
> z!R$!1XLS-?s`$}6OTNlZ{>L|>sK)+hz6!Bnf@R$8WcYalI^7NBcL+x67CGkgLvj#*
> zkf?`rk0vyR<#Z-FeFQ`~;L*SbEc{N2?(~@#^cO3=3D6YGa}TGH15V!quKeWs;j%s<r7
> z#hKyEXAO{j<Itj^B6e4qNW>;`>lGE}xL3^b@U+Fh;CuLxW!tXzR!aTUR3>(PFY?=3DD
> zBZkC~&4IW(&Fa_`BcL9O*3QR1tY64rfO3q7v5_ns7cPt5=3DjPWy5Z6Kl!_H~<cYxFA
> z>cqvj%;E4dfE!f+IIKGS8hu~?Z0LtLi)y#u!1Eb8mFV&E^L<hEhIhe(RLqC@i>9U7
> z=3DVy)-9?u%MP25NnJ(M%02+*;MrfITlkof<N78NlRRT)P705?50^iiidpVo4*Ek=3D%R
> zW~NO*%^}x%R}n*J+!7+@j5Py7VPXezoTq61`vcnH#iS^+HxU1S+=3DS}e+`z<sUYXza
> zg8xvwY}$BmO|=3DBxzkF-DrNTR}ftB?VwywEvfaRZ=3Doi*nS!QF=3Dey_?8<5R3_p?qi1w
> zu5_XoDHg>3_O#6IGH*yjm)KQp#OUZ360n8tqokV#y2pZc8Z5>O%)D8fE)7CcEdhk0
> zA3U?W>I-};H9Xj8x0R4yr7Xe4qU;s^Uq@_wE2%OAC^gbN$bk`~Pd6WHOvm{xxXEh^
> z$>-qan*H`OIZZFWdU$$dAAWDejPLd;VH{$&xm>)P?$iK)z8(8glb%kJvB4;#K-`<~
> ziWfA)#Ps*=3DJ({Xtc3w>1ToLxUurlsmvce@fVI*O7MAed8ZO$xCi%K3e(ln6CT3Plg
> zdBp=3DkoY;0_dGKa&c*L;us>nTxlp*bmPp2f*6Jdhzh1tmhQ3D#ly(kYXt0l>J@+&b$
> z@a}Awe(zc*f+L+yF`xISLYbG`5gt0nj5d#<K`w8BN3N=3D|4yzz+?pbUB)gRJe+9|CM
> z8tI+MUU$0mj!2;@KhFR09WTL}LlZR(8<A7fH9WaMNhtI0eF_!X<wDD&?Q|qDX}%0G
> zBNb`Q#26cx1-XX9SQ3sT8wo?~(7ggGPVYP<fY|hmZG%oWSq^@=3Dml8rcbmSKmn6!-^
> z-Ansy&rk;srwE@$hh|tSox3+>6y=3DJ<PenlTorHcKYJ#G4rw6I#!Ji8F&m^SGM)#DA
> z5D6lX9`9e@)~Vt6!+0V6CLpc!?3YDWk{;0<9m;(1`JZ-k*BnVt#^Y{s=3D2nB**rEj#
> z0{8wK19mW;8hDEei9f9rFQTPmUC2K<w;z*H*gIzxeGhts+G>8h#%zHOk~xN*Q@dG|
> z1%S3Hf9cMGv{HpLzs+t<0A(*xas(G}aYnpE!>64rxcVuX?&ClofMF}=3DrYhSbd0l@z
> zV<V`^h7&PV&*oxgcD~xc=3Dok(&o`LeSp;K`AjgYGIIKCsC@|%V85L{ih5uJ^bVxlQ$
> zsFa9zak?RHD??9g5EI$!A5Jx)#)19I1Dzd8>b}FS$bK~>pq2tT#WY@WJeb<#rNGN6
> z$y^=3DW=3DK7o<X4|i4)a?LxW(XByd%s5(o#Zop1l&pvLu}kY{+2iNgV97HC1jb|GME~A
> zu%>l!fAQIs90faJ?=3DfTBZe|m6WZXohmW_!+c{Yt>G#x1H6wIViY0`N1W8d`M?`GUd
> zzosvrwz49>KNl-;;>9@idN>PIYyfR!#Gdj1vR%AB7rQ3e9r$l=3DUOmb&5nJ^f0xZf%
> z6&Gi5tlf&NiFqizUY=3Dhd9eisW%UosB%=3DU%2T9<-tlL(ys54FsLY1y~$@k#X4vzG7c
> zjdiXmJP(NLi3^~z98?o2H=3DiDiPpH)Op%_><oZ<NQ5#~MSIglvMM?_4%Cuu~FW`z)u
> zWH7wFHUuPQ&muv)^Pbzgp2eV~&gR5<M^*-Vsx2TBIQhRZOtT^Dxmb7MI&JYToL#LK
> zQn#Q!AGrJ((7zs!*{kzq&t9+7AOfP$JL|=3D45zuJ2M0fb*QAM6h+WZ3eVsN|5x>9&p
> zx{9;(SGZ7z18sNDfUDsG`u2N9egner2tYo|1-jQ@2b1(D4fEk77igoVJv(+3Z5@KU
> z$}PKpPbcf)^v!*ElPGtaE1S1{*cQtiU4DY#)aLof8YGJ`(j9w$UBQ9^wmJlX2kw#?
> z4YrX?a(;$(OpBznb2Hqm)!Y1si1Pm|5sFozY47h4#S^|;uKHLEI8~_*vZ3B+q3AdH
> zkex7GMsk6lQxE?m#?i*6%?!dfgz?lx#Q`d(3D&u-3je`?=3D=3D2ryOUuoXW|l>&YNvzL
> zK-pO)XBh)~phMMMv@GLnK#X9fO3rSwYM4D5eue5?|GRC0V0MN9UjDg9$2jo0g)ixe
> zSlVA!c=3DixWIl`$t@P(jSwJ=3D7QY}8tBe-?QRT>LL{b-1U<2K@k|<`3<if!8!i<{h4r
> zk+n{j3mg-4tUn$f&bG5$7!rU?0OcMq=3Dz$XDcV22hF3k!RMuYj`&k}7HOOqANcJB|2
> zUaTHdB~_Z1TZ2)lVB4rq5<{o;1B5PdrL9`|-m!*rM&SVYJ3&dBTU9x0GEJ;TM3f04
> zu&A|`z135eD+Os}oSeH(q{_C#7cBIrB-l|9wYfrDY$kuUb>9$7S*XINlEAqIP>3kx
> zn(yvo-hl|OnQ=3Dkg2xUGl;v)Ty-rto1l)b7gT!%uy`W0(UH>1+3Z)6}mnzOPmdunc+
> zC9VaPOs~Q4_mNrSWI;1};C#r|_BTYtT`A&1#h*rO8QYrEz9d(bUl_YzIgYV3#~88y
> z!@hr8GjNKnguyD#jLamOVkojqH5po-Z&Q*KJY@I;5t&N0ZeIUsV+t!he>8qCZlv>|
> z(UyKi{pN48X>~MvvjRXFqeS3!QZC5VUS&8>G?>?Ce*&TN`A7!g?-_IWcObY)RVp(Y
> z%G7Xw;n`ka7_|?y^&%?B74HVym-gM1Y}4~S{$ZgG0PP^v*tKhdL*Fz;fo)HMn&&gk
> z#=3Dxl@Pz%|wxxbrNQ=3DGL)+Z5ZkK32#1sH%23do@{6Nq8t9%th3=3D0oyIg0Uq(fi^Sa&
> z@9ZzNu}X|ovWUI~RhCvwz~pGjSrtDp*u64rGo7LNRPhErZ~FE`5$E;Bue(V%Ksq5H
> zVTBfi=3D2}QU_*v>#UEEAg>2Voadfh_F-Qbpu(%Nc#Y)A=3D()wK?gN%a0t!f|w-@O_;2
> zQf;$1Xd_jfr&LyL=3DNs^>w2$mL<m&uR@PH)>2xWH?`B2)zW(zS2{hZ*TVSoXrvY~f!
> zTEI8v+OYJMB#*YaCw*#;HdT))3J<oUxIVM(Jl$LD)}iI;MkUK*e^ospHj*fi+7gmf
> zPCn)v=3Da=3DC4@H5x9-WU+oq{dwkp7IWq(b9l;3OB6kPn`nN+aWkGEbLq73xk41FXdK#
> zIa^&}07PY@?I_vh9c^So?cND}{P6h{QQut4nL^(_S(GGOQL}b2o}p4T6Z=3D;z_{4J5
> zKY<!ZxE`2rblV!QOPF|cQK_{~ZTVsdUR^3zFAjl$p41*&5FGCTc$h*_``p*n7p^F5
> zk>Ahtf-(P;30trx=3D%)Om)&2f$9%_j~m=3D+ymh|d?qThoB-q!QAwQpz@+I3B`Ej!Lb9
> zaGp6KnZ+^}G&X)Z&Fmn^yA`V8r~YTZ&x3LQX3eXrtJip{2W)(-o&gF+`iyv+RE#fZ
> zqwts|7#ef6I3hM<87(LYcrTL5(tpWf!er#pAQsuj^E28hsExTV@6bVk6pE_BnxhP{
> zk0zu9I(}u4{eJ9(K4&tB@~Dy}F-Z7gG}9dZ;k3+#;Mie8izc$JKIGjYKmQP&QCQa~
> zej?shKk>k_OvE#COHUMhe-MIaKSZS|Iw77_%9ldDJyGJQklmq+RZq?>;Yo=3Du51P<`
> zv!#h`!Ou1O|G&xddxz+HJ{O%)3K6mvJ0=3Do5sv?&Wt6-*MrLsPV%~pWf2iMzi8NGm8
> zc4EJOBjR!xT-q6+-SXBuIp=3Dq1$i*JO*<34teZ3%X=3DS6hb%^3xk2!GI!MgF)HeCjSS
> zfm({Bs@Gu3Jg?Mk{+JQ6M=3D>8gN=3Db(rx(%i1wt5+4j_>@PtvOmn;X)*$#yF*NBbH2I
> z@&It=3DC2DDx0m1zJl9~94V820q)3JbgxGqY3&F6+ztw66Fv_62?K0QPfs>B8`@8NYJ
> z(=3D3VM#=3D0CrQ<j2fhIC5qSF?@{Qev}j=3DCen<zFh0v01~jazC^{i8|_gWBBDg|Z&Q6h
> zr=3D(>ZZB?^m|I=3DD0_BK2E&PhK$*+}NZZxeFBqOWxc9p#F*Cg<<xgL)uD3!%!em-sUS
> zT&}OgXWYn}MyF!z|FVnU9zp2K)Ip}1947l?Mp@U67X*3&-uxdBRO9ywbs*)uxS3$v
> zo_Qp~6(+jOd!|iNGd_|fh59p5x_I2+ZwsU7vDyGr{_O#S^W2~xIP?C4z(es~z^8C@
> znQ4p-hH2+QNnK3BAu(oC&FHuIJZ5LX9fC?)9hq&MPWo<Yl<4b}07ZFCqqCWl8_e@^
> zN1SZ~q?N=3DheEWsExrXO(0H&;KYU8R%C+bsgmSqct;MYoxa$4V4@#Zr8k+^nlCp@;I
> z$nq6?gNt06fx#xS3E3<BYxSJxh{CQUV61z%5^x#<<brr0jR`T0J?%7@sKl~QVPwun
> z$XMT4HQFgG^ad4B_oM<&V5C&X782Hy;)2)*yo_xux0nxmV*L`vSz=3DNw&O^!Ox^+hq
> z)Gd#9`_?1*h5??;S_gtzVu9YEJwLaJj$4SZ7_(jB>df$&dOg?70ddqt-5hZOZPJVV
> zVCsQ(;8{M$*7P3?DguzCqCb$R_F%x+*^QCDb@i+w2!gy3yg;W{6HO)j{12)5324O1
> z+AUX9o>vfZK-^DVwpl-jB$|%-NEp>lfr?V0*cm}H9%wgwY?|Mj>?h`1iuLv}Qj%Wr
> zfwO`o)*G)EH-MoqRzwz8bYtV^3~Zv&zWtUGs3qb7Xmdh~!5k_3coxUo)!%NEG_N__
> z2UrAie^dICseW}H=3D6d*JiBg$@CWvR^GqyOt+$i!mwkf*oeAE#VDJrR_`B&KP=3D$<NQ
> zUil4d8szjbwbtFYLJfapXf0gFaa8VA{m`BE-WrQxpbbWF@80|=3Dt4hk-MNr0~$nr%o
> zh&sWGv8WGGTQw+iI@9s>-EqKvYj?Pj9=3D);&_t3u5WcBc<2!F^E^b-s9n}<>cWSv~j
> zSYFZL|GaryUl3Kyt_a{AD@yNSKbeIbwCKnC#hgFyQsKmWyn4YvdO#y`GHlT7c@LXE
> zhY#w#%;f@Paxq-0`O$UNhTV~wzlLe+R##eOW`n2|d<{PiG}Mx=3D_MO9gmcwuHgTKfN
> zZqv;p)U5-1ws?TQ8G|9cWP|`7pZEkel?$hL-L$PPYBvw&<1UDij?&4P%??699L_5I
> z`FO$^?-Muq^eh-o68Lv+j`%R6nwiP?l~=3DI`x4k(L(h1dhiNb(G;^9eoo8G;V&`vge
> zCe+-j1tw29Ggpicty4B?3m^q8x9x=3D8t`tsZXC6##e8oe25wEmkMhXrQ?>W#{&)2mv
> z7&wQ36))oiW$!i7tKillw2q1eA*7Z|`=3D3HJMct@7tWGSQat3lXpJ@&|GX=3DL=3D77;YM
> zKTa65$*lrUbN3^4(^=3Dnhlvj)J$iUX1#)T%B+w^xdM7ZUP?lNxoKj8g&EXWnYYIsqJ
> zHu<(ChVY?G=3D$M3G@9WD5E~qM?f%nH+!<Z4@<w>d8$7a%0SO;h|a?e*gfic+a-kU$i
> z`R{8G)6hsQ*Qw#Ia21Ut55c^-1<G)$v}WJfSf^eyJLtS;`|InYLh8fbrZ8`v*LK5W
> z@FKUsoLgWTt}+)DwbKRQK#I_86DAy-hueS%>DnSi%BM;X^T30c!d0C#%3|XxsBP%E
> z0Rm?X2UXdzYToGjaDnWhkY|3Q<!c?RvO#n-C>}F64Xi;#Oo(NVrY-bx&)jQci1V&w
> zZM-!P%qL)`oeW4mMOscr@E+)c-seMJY%PH+6n?m?El`)05L)2rYN#G5LpK(zJ}J&8
> z66hLuC}<!Tqf${WAMJ(-1pD=3DzKQ(xGW&*LOC2ZO-C6NhX(I(i+T|_(4?Q#_7h|GXV
> z&P1uow`TH#*=3DWPH<dN;|e;h<7zBT74`m`2|sH};%xZG&4o~(}PPu@7K%k<X<6jDa=3D
> zsfMqTf<mwpMZ;KH^0isWXxTLt=3D&5CDGOi8_xM>8SLr7Ce+%x21!_pf@tN-&X(E6q}
> zB&QZY#rG@+Dp%7~$u1_XKgzc`D9vlX4MrFVog(!M^q=3D+UC3xOWi-Lpn{u-p{ex%kK
> zB5g*PX0Xb5VMHOl+B6$a>2WjQABi$FGHuHu0DwA_-iy8(?aNTh$+^Is@OhT$v2-j~
> zhw2H^I9kvFqU*BYCfW#bfcq>OhHI{-#&JiWU5Woy5Zp4fd}CGQ)>*BC=3DK(vaubA)4
> zir@Q$^pw<c4*--#M;n*FvVQ?bLjNs}5h-<JxKe_~<PxXZfK$I3MmPt5530%;OGsAJ
> zyO_Jpv*!xOe!bR5SOj3*{Vg~`_gec@4#J%($!gMPT&SdqT}6Pyus3yx(wWlvu+uiu
> z?srTfgVG8v>4ig)c6p6_sNGxKJ19G3dFYhRN@RhiRAq$c+#wW<6<0DR6iimB-vjO1
> zpjWNqyF0O(6G7;5d~iEL(sS|_Z$JlL)c`oP9MD-<#E4*Nk)9#^GC6GL^IpaW8(K@B
> z*V}Ni>l@%APzk@m9}16dY|ll+i*PCCjL3iS3y@sHLwso58^bU=3DbJ<ISC{GRZ2ug@6
> z5qILQ3$as2Pk-!81Bm31wM`}PD84_}fHomBZdMWacz;m3n)H@=3D0|9RylcCNxJjMz*
> zdyyS=3D^|9xS4LzZrt3s)2dvO1Eo6;Rf;ILtFq?lKL2nW!`_+DW#++n;Ggt|T|@FMKm
> zqoTSD9d0%1eZ2Wn?&YX?uA#ak(Wu}xR)|21{r=3D&TqvMh!h;`-a$+O$Z-2+VkgN%@6
> zyy<p%Umo7}ThO++@zPA0Stg)ya$2(0pFmdum7Uo-SqzCd15k2uo-92WPrk7bsiimx
> z<~Ac(QoOc~v{3Z|4ESd!1sj+{ggnakY!femo8|^`*;hr6Hpszo(@phrm--_b@VAi7
> zsT&m1e})(o-C)x|<KZQ@6%Ayf*LNrojb4|6PEhj5m#vF+)@l=3DC^Jdc;&!gysF2f2;
> z0mK#a>)8OjwuPQd8Ri!1)I3&Ma@wV_W{@UwH~TdntMEcO;9|BqA=3Dh}##Ht}qO{9&|
> z0Wpr9P9f%MHs1bfMz2wKl<G{uuzR=3D*OysQsR2;N}%W0UKu7@V<ox0+T<NDElIy7Ld
> zJ?OTv8C5%fVoCdY(E=3Db+L3ihC3QTC)E@#}e_EwoJxW2I89dFUCl^awLU8+m=3DyK05_
> z@MR2u)9*+T#~GIrD6av~<I(J^^Q}!l#l7!0US+0hYvQa!l-WTNC%Rox>~oz~=3De>ux
> zU?G*N^NFOBI~Twb>Kz8blboDE=3DX65|ad1bXV#1_gfbB2vl{#XTy;&hK{SAZ6EY{JW
> zF`2ba3_xPVe=3D9LWWir`O2#sb#g#)ur$3XM+c=3D4oFMg+dU=3D$W?Y&7_12x`w?7C0`4<
> ziREEp@MyN4Y;pPy3@H&fc_`x5UGy6vD-WNtI-2ain(d4%vlhBa1wAq?AKvz(>i1oz
> z(;}5nc2?)^B^oAIe2@4OWp_VG^xW|D`ZnQggj}V3OEb_CZ4E{{IBrB3S{pWdGsZ~0
> z0@$U;-rG39SlijHY$WAX4_VK(Lk~rklh8MJ0_Qz$WBSJ38UO>&=3DTrW-Jgfzm)aDr=3D
> zFZYwHmiwwDUHWb@y`dF#1_u^&HwPC+(Ppn_xShRBA2~afnHdW!4-ZAEX{n3NT!&T9
> zSJe!mz2oSmqES1p)oKOL*Y|zG*NyiuH@A4c2@P3exxL2b`-9_5<>vlDZj}bV#n|1>
> zE-63Qk$qTx*PYU5NCN>(oJ`x^96SHsn8a*LVe33casd~G1Z~u@ZmMGsTM+uN_79mk
> z<}R)%z|#hkkZASVWIU|tC)<i*h)}1R%r%5m)w<Put-sx`5a(xH*9@HI7!ZtQb#&Lg
> zqeGZYCgKD$8HX$Mouagi3uG?gyrc~`bsRNU0~3~?M(d1n<DOFaF)}EYen0}Z{r-@E
> zaRxc}SRzCUP|c9IzAl7K?<kuF^J-CuvNK+^5yBX#5!FtN15WOkxR>ui0}Iu|Dp)ku
> z!_);{5Y6?c+xwlNLCt3P!a6PWw+aEND%$@kz%_|HA^?A>)D0MTxsV(-t7u6{C8Gu3
> z`#UcXbo;>c3Fd=3D|!W$GN7|R_q=3DYty=3D<_)Il&C<)MfAuiKA|XOY0+(!&MqP(9HgoeQ
> z*#OwJAtl&(&3gTA+Pdn~ObbtdlVr;sFIS*qR^CH;zOo1Iw+qs`Kxh^GKLH$!Ry3TN
> z@hC&FvZ}@6gYh5JJIp!?;`SoJ%~;TUQ(}A|l*VBGuV7YO-b|*7n(~MF_n|!-glO3|
> zmNnb!S@(uT&*AOi7nFc~?0sNc(Ir$a0XsgKp)(qVpa$tTN`UXHmA9($Jes3WeNc<Y
> zTXb0PIF@cckr{7EI&!&=3D`Vv08y?$ugj<UryDzo1FPy}fb#-w)YG>%&$t>~jL<9S{S
> z73bcjtkIESnUqp(1dEr%7;-(T?7O9|8t`OX+6UEfUKv5|Y~AHn!syg67oL4=3D_3zkW
> zD*1lDGdI&a%yX3%TX8b_=3DZ<|{*lFFb>at*JPGf_INA%1@798~u7(ez{%-Yop(c82>
> zOiSnAEqYtOEa#;Y@`t3DZ7~BhxUaPZFpFCXnStZxoZW3!HlaB;lPTI>eUB|))x(oh
> zEQ4j9m(xH`-DX>@;P%0M6z!iKd@RM}1sw<S-h%9#Ff0Z>=3D0u%@XWh<#O(-aSen?>P
> zT;_8jMB#ZIht<nU48w}$aK;@Vsrob_#iq0M7yQ+deK+;nb^~JWHk#HmL+E8B0x&t=3D
> zdoI~@8nX5f9gMZGbQ)dE*39#>f%Y~$J~)M6KvT?OfHqX*($ZT0HR_zR|IEZYV4qE%
> zqZk~Wp&B|%dXvFW*8Glnwddp$=3DQMkcc`y{RpWv@pd=3DA&pd#pz%7Py29k1VcZ_fS#{
> zw~Ny@#5C{%KhD`reUV~Ecm!#b)63bOId8kE*lvcMacFzJsU*Oj(9aA#d3r9}l?$y@
> zOE))<@rCBiMMt-Ckf1+K-tFpQzTm`U6O#1us}}eUL&ujO=3DaIeC3``w+*o}JthgVpC
> zE4zHBjmPkWM8vD6duU#Sp`;tBH$kP!#5O%#|6qS?Sd7KH){#R}(T{iCeDjXlMM*^Y
> znR8gsr`y%91;cIPN#~s$bSsVx<Z^M>eW5l*2R^K<Fy^hlB!kJIlE*Tz!;y}3rY_Ab
> zT&kbJdGz9_fIi{Cf9WG=3DRj3h{Zt`TH?s4JBbA+(MQ(#6KcV^I#fx|n7^GkfNRx(^&
> z<pwl%yky2}l;20G%`hIE9=3DQ&2)KQZW0x}|C=3DNam?y@}3|s-3w~4h6n4KdVV};$Rr0
> zG@UhL!uYCdcNi>jmV;@erO3natNlae#WeLd4o>O?)s=3D2_aL-Hycac4CM^t`_3>`_s
> z*Or_jlT_U<OKckHG%NyLE!=3Dayfa%QW_5jS<QUvGs$D-PSW-a5Nz(p;{&(o+U8tjwU
> z`Dua7tM1^<uko(keTZ!7OFLPEG{z8^P{+!~+t)jt91!+R=3DaQmg5bKR{1?98jVl_!2
> zlNwhuyl<|V_Hl^G(e0+3T*&9I`>Y2jFd<j6u3@Js=3D8-3ir!|nBcz!iqF!|iOjoV3!
> zH*A6FNh~j9X13cRQN{IMnEj`M1sazZR@rCp=3DbuU*KRtp@gG%zkMR)Ot|KIwuW1b`H
> zV6hfmd&l9fD@V(TGfwW7QYwtNPs<^q_x3gs+qGEFm-MLmRhAOV1A#`^CX0&2N+-IB
> z|9;$J^pogf+{R?xxlp?!12-7FK|L_TDNzT*V)ULHULEy&@=3D<Va%0CWHW$2o${T2@w
> zvGzUl)hJ&&F5hS#<&g>dX`!wr70R7RVx$c|Vb+3Eq-<MT4Kv!dF2KDr3K9q(FcrOq
> z4ueGdF{a-|qQJ!c=3D9QJksoApxX&|JR-3Ve3PCz9LjTG^lleA9v0sU5298mvErjk`g
> z-PjUylt_Et=3D<<)jPb)W2f2^8Ta41fNdOipO9C$2o`f~CL2T^_c3K-N3$L%q9Sxidt
> zWLimcnp27L%6@)1j>W$%`8NMrgInLcM>Z_9jjx?2Zv)|D`7Mj}FQMAn2KS@dOIN_p
> znrI~>cz=3D6nCY&<CK1&^bWug;;_r}Nu@zCl1W^NN1t?^8z?C&=3D@A<{*U@6Re$HdRu&
> zkf8?7vTN%1-Tblj<N6n_=3DPHYre{$5o6kovDe_mGpWcz|88yrX1@`-Kcg1WoHkg}~X
> zT+Gxb+o2$4h=3Dkt)pXNXuCK~7tq`r%XmXt96>Speq^7wT-W^MH=3DC{1TzW^xh{zF-|2
> zCA-*_kwIH^<Kw*^3Q?8J1Y@+<@XdPNBE0-{tmAcKU$_KiQ>0J@SfmZ{H+%+T5Udi`
> z&Qj-g83~qi-mJD@Ypg&%BV@q%e61>@v3O(Wp+h2gkh$jL<WiZq|ESBz>;`lG!MQ-2
> zcyk}Cy9w{O?1&&*3gedaZ9byq980y$Z30-}q3MShtx;E5<zeJ%ms*U2Q)vamOth9Z
> zn_=3D^u9W<Uwk4-E~L{Dz|t?wNqCzxwHH8R6_wXKi$RSA;wkrV`(`H2>`et%g=3D^}@yJ
> zs3WF}Ut*0orsXwtTQ$<J!syc8&H3mbPDV6~7?w1EQuCHLE+SKClJqo3Dvc1*`BoQ|
> z443ymL#F*@_Sb3Jz&snnx|9PvYZp5v80fy;1Q5zNwUFFBh<ZIb_Afwt*P?5sj2zt!
> z2e_?MmjElT@1FF1zs|qpY76+#Se7$Gy3E#t<z|nq@;Fh-Zo+LajI2ew!8n4)RaLBE
> zqmiy4%I1N1O|PmP+yEn8^HWUQWT%b-k^ae^YTS2UPDB#?1j4Qq9Jp(kChEGPYa)}w
> z#xBz{KNv2WWQA=3DQXOOL3&O$BDS6vCpK8W^1Umh$#qf;CZ@IR#bCOaqJ1!yuT{FQFz
> z5;3VQA}D)YF4{yfEv4A5r}4PHTe=3DsQO;tj(;i(a%+DTa0{|`!{>q!I*SaVuhIco14
> zj4vDpsb05Ose2)yN`jmmNaH<BNs22zlE!M~CEiH4X@*VoskF%BG!68z%pZ7G_}y^N
> zviv;7%jOyg>Czh5G96XlbJ=3D{152D|eT39+L0%0?$&cE8EWKL!rDnLBvVXFK|{yC=3Dx
> z^S+iwwNi_`13N%j$$ISw#xQ3|vDf--M&@E4s~Fz@jR3xd=3D!=3DVH4K-qnzZp)~Hg#Gk
> z3{kixd4~vdT^)F@{*0QSV8yASaUw2$tOhe+5eU^@JNh1^@R010@!6KMys$Nu2reW_
> zL%Whgh$>lPG8OJz4>Iy`);=3Dizgs&3(PQUOUuEJ$;<uf0Bb^nA2Y}h<mS;2#n^&E%%
> zXmX%SX~Ap4)MG#|MXK@RZrOrR^mVRWP|+Y7#w0pllJMoN<a-!kl<tzR6H>rJ2W468
> zY#9I2Y;de-s8YdnCZjLGbya*1^)1Cf?M#)HN&m(x0UecWnM8$x?K~53%4H10uDpj*
> zS-6#e>X+if=3Dygfq*GQdTfj3d(Z9bV)8Q2?bgvtQ$*HF4RPVLV2=3D_j<SAUb*9=3D~y-=
=3D
> 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
J
> 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
d
> zS>ZA5JwgAol_Lf!G@@A(%3!2L3K(g7gbFRWH(ofVJ|MW<BK%LJQVN94KN{0|XE%k4
> zI0yVs?Pj=3DV1xh?5=3Dqh=3D!x(do~EbDq*x$&0=3D%63{Ser*6Z#xc%nO<2aCF#mj`Jf6R=
E
> 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
=3D
> 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
K
> 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
T
> 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
>
> literal 212384
> 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
j0Y
> z<6GV#7n#Kp;h`M}q&YsnPm5^-0w}g!6>k@LNoqN8N!##@(Cj!86X%m&6?tz#=3D*MQM
> zN$`R?wsRH;>?*MyJfV?Tn_4j*c;}!^su&;FuPR~wM0FX6C5S3DZ&2=3DR?l&(0T1SBV
> z<4cHU-=3DAdb;OMf}hUKeFkg=3Dh-S<rUX5l<!UVa4Q!IWN_wqyS^lr#h_TGWe;21KJ$f
> zk-X=3DQ8t2&rwJ!h7#kJ=3DJT#eD)k^aLKV`j>~0V5=3D5<Xo2yD6}Wt7*a=3D1`8Itb8x;B=
^
> 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
r
> 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
_
> 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
Q
> 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
=3D<*55
> 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
W
> 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
#
> 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
=3D
> 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
k
> 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
o
> zW(X*DJ@Fs_yI;kX(b0=3D%A}>Nj`Ge)2b4=3DduZPOM>#ZJJFe$vL#ze?pl10=3D0koCEgj
> zRWLTTuc!axzslA?A2e0PLX0Y^`$%w4KXWh4+SZ9ilrWmcYFjzD^0NG>LHRW+79eOt
> zD~qW##jVnGuHiHpb+bp-&Wd`>tq7Rkw3r6{_%MN%W?WVTz8gbay#x14H4k(q3-5_P
> zNVAdal0k0vKRBx%+90E{GFkuP-+Y~3vGt7B_TtPqL4ceJkxyDd4^RL2>|M_%(AYg_
> z_X#_}WR;Nf!hwPc#|KO|JVMWnI$2;iFc+88_%2V5>CNLU5E_V>#k(TeMBp)8jLmjk
> z^}_q_k2i8y>Rn_Hxd!3XIW|DyV~sC8KU1sHx51$xw7BIc?il*448_F!Yi5wG1~D#;
> zOq(1A)Ww-}?v!iTGqiw*jP_hfD}8Df^xHV}=3DAbGI3b))vY&0Pau&I92M>Kdi(wilD
> zH)S1aX2BF=3DzLuD6>1YRqqy^R}1Ks~A@Mw2ESEh3;CZ@m3d!)L`_>zTG;VXIQ-5F%=3D
> zNKv$WRK+APIoV@#=3DmJ6FBdi^RDF|(61bIV^tca)sE6Ei&xRK@|d0cb*JUt5dAWBYq
> zNbJRMo^@Zlmj*WZS>Jvv4c_c0*R&s`LYHKm&9VDyyY2IAk20mp1&&b|Fkq+=3DNNt&N
> zv4uBFI!-FXc@Usr76encRN#XN^OTgYoj)k><cwBNNZ#CS#)(`tvHrr-LZ0Nj0>hS`
> zZ;yJ2?qh^t&U%v7i&1d?l;z<xh_}5&hw+UOBLbWm^NQ*I?0OuSr!MK(4wJTXs3V*K
> zNz(hrUibuoe!F*;p%6lHmMad2oQ95oagRzB-e7sJHs*ECu#X{k*rxV&+I@79Wr?+t
> zwdIdR5|H((X=3D5zVB;`eM7^wF`lCmds#4FSB<e3!H9)ePXujNtMZrz2zKgh6{QrqJH
> zkO;^~sA;^qQwZ`!y()PfX!*6hEo<Ke*B4G-iU7clalD8?7VnW{vjWjW*#;BO)B0)N
> zvyKrtzkD4Z+MB5*H*X(cLg|_pc7*+7ro;^9TardRLOV%h>l9{6Z++zcg+zhJ)w4}h
> zG9_<2;k_)_cAWoG2l!B~(7LE<+LA{t2t$qe=3Ddt*06j5cj3QSf*i-=3DDqstJPWL3C@q
> zul(YJ!+!62&rpANldwL^yKJJ7+w~w2lFw%pe4^W+c1=3DnOvHurs9e*T-WY$T05dj**
> zfjqq(v@poyTK9%IUt?iNg*v*D3A8<n42kNj^pUdS1om_10j0J<U?I<77Mb~q?ig<j
> z6xXo@ThclY{*$oK*Q@x}xXUSnW>Bt}z-vvdWXVyCGe*b17F7>A;SX=3D)1+5BxnIWXv
> zF9kST9*0^717dae^+phHO-=3DgAr9&nBuBubX6u%l5`yhCUdtqO-)cgiv?bI#dmSU=3D;
> zYyu-iG^%)9;cB*y&4hL^6$tIW^!#$Alhi#ppo$(i%)-`0#8hvko!mGnEaq_r9foCs
> zyfCPAsIm|87-hQ*h@FXpi@dL65^6$rJsUL|+%dRx+pt-=3DQ$naywDGvZgg*IV91u^S
> zYfVnN*NJgnB@9n5H#5NZ<hO7+IaT>lAwI@f$D2y415<WO(G<#DosU2$WgvAGl?{S_
> zw+3VPl6f!Fl|3c&wqZw)l;0x#RS*6{F8A4g0YmPNYZEyC<Oh11gRQ5~33g?v>(15P
> zs2ej9EDzpd49%J68kdutwHg`IrW$Y;wtwMPD+I#BipT#$nN+YFP8r{DWNtq8ES8fn
> z6K*5eqXg^q+2#5oe!}K4Hoa;$#9*{Z(+a;~hd4p{UvBpc+HXK3SELt&<BKfXm?)4w
> zvD46xN-%#xeYxU++u-&WEecwpn$8+aUj|Yv0BW{D>j^Z=3DQiAR@{6vCg<+6jI+<&1X
> zPeF*czz@V#$WT)SiqVyi%79d7Jx+MYY#+OXyO~8dmTQCnF+k40cpG8J8DaGTnYJr1
> zxpEaXx7B@94!eG8FN%(z@N<gR7sQyy(K@@31TsbN?Px5nw!X4Sc8WE^?3r-C;Tw2G
> z8cD?IQe16~ju3tmQ^yaN2k`by{vg=3DZQd73CRzEGmqANA#@>-(l;Lh<??n2VA*f?(A
> zNabikH=3D6^M<fizc+Z$*}u6Ftm@{<x46JcAAcjb)Q5v^Rqv8n?_G1AyjDL=3DQb+<U&B
> z_-KLku@R(@r-nSR-KN<pfxK*!zDvsHO$1~wV&aNJN#F_|F&0AL!O%=3Dj%Z0JD)mtRw
> zADAT*<D)irF0dnyWEzr`NZ~QyQkV#(+Qbk1czmop4LShQi)u!srbZ7OLD0|q^voIt
> z7RlCTtS!CN%eWSQY-X8C+h0K!Fg-BjIZ(#QkRNojbW4+#hu-Bnso^LT2+C|ch@j$@
> zp2yo&r<aX>!bCm~`h>w^W9+j&KdueNiG?w0(oIjJMf7yNWAXkW?Mdvcl9}f@!>kr5
> z*y9__n_;|jt8d@JKX=3DDG&P{j`H4(>L4h(DcqHiGqPGJEQg6a5Fr>?%JG>4m6P5m76
> z;vobE*q$ZA?eOBji2vZjPCe00E{Y<`8Qvt!=3D1lF0g6m&5n9sI9=3DOmldu?%HZf_>1~
> ziCblzkiY?i0W=3DCjEBMB5+X0MRABfxe3j0Z|bv}FU7S?z|zs0Ui-F?}b%x<pN+f=3Drt
> z(j#+D8H;_BPYH`}F5KIl(!1cPQpFRu13^RsEixs#+-P?>&g*3cdi%POoKue(ZX=3D^p
> z#h8vSx0s@BGGP2IWnG?~u)bk<p9Mt-mzV@GhKXV&ivWa?H91ssQ@`Z$e7%VioX6oG
> zWrf~8<DW~oR3*C%)3zE&EfJDQ_yZ!%&xiXLM7jH<2{e?spwWRBLs#ZZ+)or>3vzmK
> z7vE1F^Kpo9=3Dg5x}>m9R}_cpeoC|l=3D3_Mjo)6P`VpcLDm3ME|R$U_q4LF#NH_MUDMm
> zYQ2e$O8xGgkG~SLKY5uv3ABa;pmF~K24jv095-a{-n}9lON*6J9aQxbQT-7?l}-7j
> zP%VNF${K#I4BDajj-gIsHa}72pUiW`-<2(1@k_?w+brG1XAS)~cL$hHbzv``h09MI
> zi99nHQIOD$A(O(T&675u>HzwHb~&7hW<6<pXvQ(lt&9c=3D##194JI(qI78l-zFacC(
> z^re-9Dx^Usb}x__un87t!&s8M*rlp=3DY-kP&`u6EQZZF`0EiT?+0f2xJRNiq<^6vn5
> z6Sa%sv|%Jmz90&|I6ChynW)}ArAi`Hh^Y_@zCJ__l2^~Ly1FS`=3D8ZAI-5l?8yS-u`
> zq03=3DfC4$p)@lFQn4XS{t?=3DP{P9=3D`>h+WNGS=3DHk#>>^Y|{xG;X<=3DoCnq)9UIV@w=
Yfl
> zm?m3u9Bvp}Va6I*SAJ6Tz7%otyP)~JA=3DSl)z6lsUm!nAk0zPFu$-`Wu9xOh>41A4P
> z{h%V`qK19{U5>aWlYDf|JLyB_>?~P{hv9mG&*Q26fmy7nQf=3DHkbAh0zyhRniqe2ec
> zDWulxU?i4m4G7|7gyyL1n}na~N+cnsC&zEu3)bOu=3DO^WdG&ehl&iyqqX@jqgRATC#
> zF>9c3>??ubWIj()Qc|l!oC~Bx(z7^>$H?O%f86Qw^r%itT7NL$Fr)ZA5jfB1DgN2c
> zfMqzM$`O*)Q))NK(<Xv+``EmQM9MLXqbF`|I5{a+f!jNTcaO$@0a-4{_Lg=3D3+nlaR
> z$GY<#XqE#xQXn_zcG6{A=3DNu93gD(a*X#m?W@^|JaFEutasNu%1;YzUGICPho(vL|L
> zxg;sWJpV+uxK8g%7)C64*PVl2A)v)Qu?Q1%pi+lUD>!doevuAR2~ki~-uuG*TT+mu
> zBLg^fb>Nqvc&{jOyCTpTF+4$>_)!sH4ZLID{VfJ4w~1QV<rgj=3D4ltIRwyQIUlq-Be
> zj1uJh2AlWCs4-_HfGWPB?R8U=3DQr=3DJFFHleGz<&gs=3DXP6lKggWPE%pgzC@s%1KiPF0
> zXv{7K=3DmyJ$t;8?;Uy^^g%R;EvCF>-#{?tlmB$Ia-8KjN3@%W4mNQv9Q=3Dm63DObeJ%
> zDIwl;Dus^1dPVj_P+m$TbbvmRa3unWbVo~4dJsyE{`mO6nLn&Eo@b*I1f02?3eQQb
> zVddd@<MVRGgOntVml{c{fAQ(rG>Px!iOFLFlAfB%UQTlqP_*Gl_Qzf0MAt#T<_-(0
> zbQ@1J=3D7LVjyA~$k)3~SQXKOr;=3Dg;)&HBUD%+xn=3D=3DoLqxWqA)@_d7d9WicYfvW!Jw=
S
> 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
=3D
> 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
V
> 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
D
> z#+U1rw(}ARM)%vq5W?}_Doekw1jaB1q&CI_wjA8qK#9OoE)TQ<aH>53raL_)MTI31
> z&Cu7U(R5c>GHnC<Z2kyI?IDg!IAn|R4MvyvrFH<V1GaYdutvULc{F=3DHm_*BN<u_ET
> zkTuW5YUx#|>DjGw5M2JwjvSSan&9l~H03s-$o6NmgO;zYoEk_hD6=3DvWz<IAFr<aQc
> zJJUJPX1riz26cup!p1hoU7iafW!9x;D;_mm3=3D+PLbTDFjR1#g$Qt+N-m4hXJD1kK6
> zv$_lTa%SfmSu0#r+&KseIjC_xk;!d3{bnR#MW2-MP6P5ZDw{7eMo#Z6xX-M~7KQ*h
> z?qrP+$~swY^&Apykft7C?aEC~_0ph;ZBTL2qzMo<Qi6(+B}N4*HcLE8U(229HkT@#
> z_P9oXKKG-1H};euh-4V~y=3DBi2TfagmB9nY6j(vbFcn9Y?$LGSPpbzO5FJ`XROepX0
> zW#>sT+CdY&+^0aFh1!*&zr)lI@w`29FM&%7WB8*Q8Adn4SuQdYH&r=3DTj>lJK|A-nA
> z$zFC)@=3Dq1&&#-sQ(3t+>FGt6nwt?cL1T5AyMVp_i-87=3DvVi1>=3D#*qlW-sbG=3DBrIW=
s
> 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%0A7nT!N|Z;OnhAh_uV4o{
> za)ya04awRRG=3DiIu&rP;rh7-XsLJGDtQK0&&@KZ4gsn2{*^&g4v6`1QSL<|Y&Ts-Gi
> z9+i?}xO?BoaNr~S>{hHr92mPo87jU5z$q%E<^f&Z-Pk<z&Y1N;b2bYC{1aSk@Ekjg
> z+%B2Oy58GP`&?=3DRq|U7iQY(q)MJA`aZDdoimSQK=3D!iMcAZbx>G^DYT2u3IBBi%ua~
> zwaubeT*8TRnm5NPGiv>KKOP;^5>uU>R4xLod0~PZ;+&%Y>*)DpG3>*J<<n!$<gthc
> z=3D51r5niRy<F$aK%sH^+Li7bfYYxWgDKy<1*CN^VdQEFX*G1mB;ClM6*h(Do#=3D_}sG
> zs>j7g`R`L{y4!u~H^aY7T{P|<VwYEj#cK8ENrP^+g0?_M0ZdeVpBs)8#G~xd<Nnf6
> z1*zp%$D$jl2|&9Aaj6z(OAE-Z5T~y7#3yY))3T<c8gaGP0+e2P-M@@ysF2lLFgmT?
> z9+#6=3DW?-}eHbjgGr-otK62u!#)rU#J>YdPRC};%@Ok?W03Nt`|h76_Jz;J+|dM;Xr
> z3j4+0)SFjcaW~sOheSB*7?(b~_{_GO&D_PFr~3>m06O(z=3DB-MDF#$<ul5`$Y<wv9E
> z)3HJhNH5a#p0$5I6<&xk0wv9|1dD0Yt`>?VB&aSx!cnmeuf>bXdFzXTm9j)1oM{7(
> zN>m6@E`Za)orl#4wOB81$@OM1S^P44AYCln{oI>Eu7^zgRI=3D+?T8=3DHaWH;1U2iC6n
> z0H{l@HOn7#Ug;?{VG<w9XFsq+I$?T<bT@qKBin=3DD>?HdgB(7BU#Se>yuu>HwJ#5az
> z%8J02QjMSpUFt*%V1X`%->u;@uD`_$pXSp=3DBdp<gCQttQci6L#Kv`2Ro<I~y#X;E{
> zW@7@M68AR$<lK8os-FnxkLM}YeoCuHU-tmgnye<jkPLJRK)pOz#?}{&i&z7C*yt)L
> zzA6|qfug1mDyw?H`5Tl)oe=3Dojkj1htv5c<TOePcQ#$IT2Q?Im)<tktqnM0L#KP6<y
> z3q1;3C_yr&wE?4)Ra4-XPSeV$WmTR_%X_kvT<ZOo82QprI9kk3wkFl#1P-`;uX{zE
> z{J0FF`T^Q%Y^9a;O;8R9|J?nnSymoeb?K5#A`?8<)(yf7X*(h}r^0!n@hg|h41d&d
> zH=3Dg_yo1C*hH&+J|b?MPie!)=3DW=3D%kiS+<x=3D+mUG7yb5x<+^>vUoT1M|O4aSxBV1!#=
P
> zisT5};`S6_R};S&5cLhStI%Hz_NuQ+AEup88d_Q2Z<KUi?sGkYL~P&SQ~2UWy<<5R
> zAY^sj$fTvc2dE~lZ5J9`m~kShz%y?FV$0w6A&Rl;!@{#KAp^r=3DcnsYZ^JsWk?GfnS
> zpuDKpGiiR#6=3D1D%4G5C5v^N%)I@`~GC8aD2S$~$p%{w=3D{POg`*v!DT)>k64#`)$6<
> z+L%$i<1Ggp&`S7i+Ea_`@Z*yG_-hE?){jSKu;<swsF5WOxJVCH$cU^hNFRkHJU5_7
> zUNzl5<adB0aw~;Es3%hweLWK`cyh^(p+OZru=3DB$M$dbK8Lj<FO6GMp*jWTG#ty#S*
> zR?3}7N@L_-41kV=3DCNKmWe{oqT_G|82u#=3DPJyrkGa_;B-lM&_{4`?tFc_2wacKoCd&
> zX%x<k<+@Jly|1p>5Ya+sgND1)T**710=3D;f^eI%kfrD(0vBckfIaD9);4ANOj5nsh4
> z)R(}1sG}qI=3D5bFW-9oT<74nU!SUyMvt6KO0b@Dgl!qSPr^F%wg=3D?SAufLX%E{?6{{
> z(b%VdF_i|S(7sjTyWTXIC=3DPZcM)R_H63Mn=3Dz*zCSgB&W3m=3D?pp=3D?3a1wTTpN7XAJ=
?
> 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
5vZ
> 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
<
> zNZ>0dt-JVuTKi92A^b(OnR93o?*b^i_Sno<`K&aUfPXk9z^`lXtU!wWHmU(4TQ39O
> zLeL2|y+e-;tMhsCVQa_506Z+*A%d5Z2_6PaI%p(eV>+c6O$`U!1#(t<nJ`^97f{&0
> zqSovLgN`+H8@be+Erv<hV-!N?2CcJ2>C|sF_BN7Thod-U!G!&+=3DcBDQ2&ANfwSan=3D
> zu})B6W;V+X2u*XKC#%A2J{4WHk{#>(5>#uqE2p?p-O3w9XKSg*bQ=3Dxk;jBTL2^nTy
> z?-z{Lh)^&C65MfbO@x^fH%X3AB0$D6C|!Lyd2!-rllqY1&4QWzkq#+p#yQ>JNMqXD
> zcE(CHGKn(Xd8jw<mJ`3Gs=3D*?J4)|1*8{n+3mHYpUfjz>k6xANvZYlqcr9(b*`BkR)
> zmyZ$lg#)K2St<Ubhr6||{NyUn(6ibYO9SP;uDJfMlu(luPzdRU?qm)7ABxQXc+{GW
> z)g=3Dgp&W;vu2r^h!NQ}RL)A?A~Ns1)zkT;iamgH+NU+KhIF50g3{@-KcKCF_P=3D=3Dt66
> zTC~^Eag7uU!?X6rfO6g#V(0C_VbwqDET-S(+EAXBYt$GgC>6UCGmE_`B~0T#tkcUX
> zFnVPdiuW`vVce_xsCQ90o7cUkV`6I2Dng(yTtGs!;kAx?bEh8&LBZB6clI=3D-R&WIQ
> z1=3DMF8frK5r%ITe#T1We4$=3D6sRypJq{ei0GnG|i4mdFhVk2i>-E3@kS&2w?Qk6E9%A
> zZAARMScN{*%k@g=3DnB!ylN{lB%^z6ckA&C1VxV9+)J`CZ2nW(2-)l>|@0NRDLhECe9
> zN1=3Dv*?TTZ%NQ!ybbPgL_D{^$izG30!*%8XtE8zdr@1X!*wtn%z>SgKFL@2sGy~>jh
> z;;Z4YhC<Vje4I+m7o4hFH+XD+*poq{$E>KU-eLM7{=3Dd|R(_5o27H4dwyBR}<TA>i8
> zEK_UJQ@|J}fcO#JVMDel%2&>vyJ6eh<KFmV9a!DZ*$6}NbK5NT-`qb($yuG1)9l?g
> zpq&~cM3RdW+d`7alRweUwy6C_uqH^)H8Yeh??f=3D~k<^eGT>(tSG1`;N_ylz`Wg_pR
> z+ypSG<H{aLOtuv!@t{ww*$qiOB|I%y#}Ndb15M@|uZN>nwg%o&v6%M6U5~6M-8MVy
> zEm<sSw6?EH(h1mAzn&izYA9_5IC9)%|AFZ@*+kEtl)~P`c>`;$uB~|{<gS)L+O7#c
> zZ8y$}BuoXEaU9T8N~ee;m#hNf@=3D2;OY+|h$+&;I|yyK2)&~CVJ`{Rf#hm(nJawiQf
> zN07%w{F^Tggw%iG>Hvn+5nCa+-R_?k63BkFhhiLrW2~)pW`BX1W2IVv3u;jx)q}~4
> zWqKZx!H>E@J#y2i@8d8?uAzVtUYc}dsj-dMvty1y@S)+PLmkkH0kA9393CvV7}Nqo
> z=3D3IcxR^=3DAplg|=3DF^RW9sqa)WSRx@0~9Pg3=3D*clL-;5nKO=3DXx1|8dl3kkp#$PJP=
-h$
> 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
<
> z*h3mW&&7O&DDj*{{ZGCbJeT0Rl|&}(Dc71$;-z{du6nz~*{&XT7{NLGQyGq|@XLf+
> zktra({6oz5eLWqgI1GY0bD`S!{k{dC&&KL@AZf{O!=3DFvH=3DaJYG20&Ig+@f=3D2oA#;v
> zzz`)b8->)o*>?7AYJC7p9LoferMDm){X=3DFHE<Dkg`1y5?I?QrZQeV%B{{2<3;#n~Y
> z;b@`g{l<ZVN=3DT*hdtN1_1)(yI+Kq5psh*7%xbt(P2v{z1xUa{&?Uus0PdsBA^HyoP
> z@n0s#KlGWw{8O3@(WLCx=3D|_<^ft0#xzgfY=3DMN-l-Wp1F6vhqOW47583dV!OmE4`WA
> zl=3D}<6iVweV(r9R4QP4=3D+gTEGQbB>FI`++S4x>9VcGEr=3D^Ack*vHpEYj@H<{pf5lIr
> zt>D507UWAD2pyTc0(lyP8q@5{VJNhGdnl^pSWr72Cgv-iqEIcwO6T*ZDYR;PB*kJm
> z59WD+oz%4aHXRx*A88{M53r6o)P{#fr&8H<#}2tZ_@TF$;H#|QF*2QfB*o@P*9qh;
> zpUdMrItyJCmNWWi%`9E&uk!s*-{QnROFQ+HS!Y2$GLJ|@6ZG^{Kp&MN$bTQ6)Lg;<
> z5HphKs%x^67SYNW2?gStzbfVJC6q%Fbqx;l;I!nQl})HvRH%0mh(nGZHO8mhr<@rz
> z3Ybn_71?R>?++ot*LK0eYKcqNML!_RDu`!58r>>JS97wgK~n?t+ISs<p-*6{TLTKw
> zvBqci371Z1e_LI~%2k2cps>l9tktop%mbV7_!&jR*DW75ogdx~pvl>oa*)rnl;`I;
> zQ!iWE*ARG)j$(WyN-G-gJhNa9j#?N|{e%AkK2(-W%z-<uU^1(8jW>^n1l{CUC^@~K
> z^wBQNAkF8K$=3DRoFgh=3D=3De{ye~29Hez<=3Dl6UIN#rc`?^Dyw@C!9L3FyqDaT3&1KR7U=
E
> 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
b
> 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
c?@
> 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
z
> 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
U
> zNF@G~n4};`u5P|?w#5LbR`UiS;TRTwaKdyS^F8LfSM$G8xvHq2D3o9ZieeHFV2<Gm
> zPVd2mbQS-3M|wgdwQCr+qE>sh$GFBADIJs%Sn<D|Mu-ETpi!nTed{n!({M`uBO#N>
> znvr}MPtpL_bIULZ{U8xCpbw&l0r%!e0bM5XThn{7;MdOQ#T>ZwKffGa>@bAa%gSVd
> zlOo46iT-LWEI{gS7l_fK5WDc>1hzzQ+2(<p@6Cf5U!__|wM&*2g-vFN*)ENAU!(N~
> z!w=3Dct33Uz*5HA4H#)$%swFrR|fJk^NFzr4P0VoG`J4&|?SEV$Dj8R$Ra)B<tNR0oR
> z<p|NDDOKD+5=3DbqO$9r$^Vp$ov=3DP5?zFonv3AFnI0v1eOjfNp*(Z2GEFHBI<r!~1NC
> zs5ic<3JWk;C5TkMk~&K@8|y>`T@vj``7K5*S!Vr3_w0UIsDRS+*ALrW(6j4M5`De(
> zwhm;m5q})`m<tJF(pU+h%ltwLn2Czvc9J|%;-W|Cw@rRuR{jO2HBgT;w<6iCNF-dl
> zOb@X8i$zL3JsVqGbkOEYli25p+Gn<L7XM=3DHU=3D;cho44gr8zSaGS%iUlc7BqxH%<xI
> zo0PZ0k*$wx7i4p!CqQs8@ORW^iac5wm`UUkm{js8HBAk7na-$)nX<e#UhGX3|CtYT
> z`!HQrARrkjs0Gt%*}?r<vQsDCi(}au;msUGI#5V#YUY~6g)%mMNDwrtRI|$fBGLD4
> zHb8CMlb3Okibb#{Q;uYalQ=3DoW!=3D1*UinNU@u4}1f5oH!NeGXL1yn5T`Z>`PhZm|b)
> z+jR+RS{5PX{<v5AQ7?VzJH`1Q0PGUyv}@+A%X#A2M`i-ihr-9nA?<O`1%N)=3D)yp{U
> zJ6FPyhviB2EA9)EKBc3iKJ|ctVdf<jXP?{{SngLf@JA`?dB@Qoxg>Mi&9yUP|Gt3s
> zyDz!B#Xn_*MXW6)oi%IGhMvar(4(IbmNioU2$K;;X#U;xcH>!z&jZ4?T<qO>pPxk(
> zxJw4=3D+V_55CZwp@E!OYrUoegqT2&8tC=3DaWyms3bNC3d&MMY=3D)$p!yz68G2{}ui`Pq
> z8+4;_#QA3#GY&8=3DqXnRd`H%OCoF9(PPn5n<hll$k^uR!%_&w3nwn_{!0obw%cIZze
> zu-m4~U1Qj)38Xtqre52W;4mKzI)ZEO@Q{@hBBd#*P-tbZpWhiEXhBwOl1KkI{%mQw
> zloYYoE}ptA6GwWAyxBVnb^kpXPgUwsQ?hE7=3D@Cb^5$lxDNc1Ic2Fz8>GJN?t<#tjR
> R+K!CWwYhZAf~wt7*eP+`4`l!V
>
> diff --git a/mediatek/mt7925/WIFI_RAM_CODE_MT7925_1_1.bin b/mediatek/mt79=
25/WIFI_RAM_CODE_MT7925_1_1.bin
> index 10463e7161c092031f7817b1a3047372267b3cad..4a821728cc8b9d3fafb969b1b=
4f5e4f245803945 100644
> GIT binary patch
> delta 1030772
> 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
I
> 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
+Q->w
> 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
{
> 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%0Ao
> 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
o
> z+i0Vvy42HS?uXsMAsUY(K;z7h0jOT=3DH0o8cmUm%{L+TS?w$*ubPauJ_%1~=3D<WV}3U
> zI%((f7h%bSiyivG)<+oyuSxIiXFH=3DT741rf`@({G<4Fhm91Y09xZ&M{Uk`%D@~t9*
> zyV7Hr<vE_4a_l!Je`h&12ZjXQxnZ`uV@<FYID)AMe<S5<x!eWvpQ&+1Ji`8`F8)O%
> zen<VXcR5$l<c@fP)qwqc1dhG8xApI$5(>v6Doqpz5-oFk&_N?lA9<qT+_fe{tJ{6*
> zu)vxPlg^ep7-^qZw@YtP`@wJ#Wo-N<f>u)pyv?ME#6w~5fA3d*>kS9B`A41yXEk;`
> z5qmCw_<!$XUAB0IRuA9M$(qhEz-?8FLd#aAW51<d^fas0zH6+F>o1SrsCxB(;GBdg
> zR;Y}?52bkM*-P`aLGA<rz7189dZH)p7O$a-KH+l_ifs=3D&Od$KSb&EtaYGqGOpno|Y
> zz_7fnW}ti?f8hpeokHv;QYVeg9<9qSwZi0*O&8J&?k@(L#!jX=3Dm-*j~{<|l(T3I@g
> zGv_h#fHo9bG_C2AhY;R3IZ#tk-kU5UG&v>~k<TQfhDvarKBLtKN|dRMq_nh{VyJLy
> z>**;Dpm}LfSQaim&9aBhEI*7Fqh}W^<rRjz?4b)we=3D4qF97u@#u9j*EhrYgs{K+F9
> zUIt|VXzjx9%2EC5i9ES*%ZpA>Ef%$(%JIT&vWpb}bKI0UmvzOj`?zZ;0(ZQ{89HzD
> zA)SGGNf*QU)gIi;8t;&6#QT6J5)q7lYX+xciq=3D0dtlEuCZ<ApJ_HA!soSt8UK)>o)
> z2PH}me|d=3DhZxt4htXl44^9w%rJ7fbTbky$8u;+x^FURV>OTs<EeeeF_Hm&6nL0cdt
> z)?1Zw)#2ZUE_rS7-HH+v;&0H{uSVST!Xep=3DdV#b`y~TSdsPM=3D@a#e&Az7`AgJR`YA
> zHH=3DZ`+xY^T%!rPZ@CtENSZ2{Vq2^|z5I;fPe<59r<Lx0#gslpuA_-$v?TyJd5V~_m
> zXFZ4;8DIPh*p`O{8`|J%<PEW2N(S8Fow64C;Hn}W9sZr$F;x59M10A2czP(=3DI`Yx(
> z0mD@DE0u<q)akCP42W`Y_8`4dwdwh>=3DhxY56}S&MI&<%RS>DK4i*ud>R~Qi&(MztL
> ze^7OLGSa=3DRk{yArum6`}t``TYfV}53E<;`#t6GDdk-rrijnMYpNeOq<!YJOPbTr5U
> z@I$q-aaAAYls{KNh5LEHw*QB&vc`8-XJ9BPavDPi+wCK>%Wdz|c{j^auKk{H`4OkM
> zNx%2z&po_x7KrjD*}&2Qa6_Ke<E~nre>D|1_#tq6gE_Ye@{rruHfGUBNPWJD&?zy-
> z6N`E|xf(-$TkRj)%fM2j6lvVGZJem<sA-4mG8;r67)TVu$AFRVxP6ds;ai^(W}Si{
> z`YVab!K&B6U~~D}Z`tAJU=3DVr-1X9}AVSVbM;aEYQkp<(tHf{qq<~(oW{R>%ye_W`H
> zrltRJ4KyoJcgwe-_~dBMcG(IK2C3OtMI=3DM^HMb@4^`Kk8i+FsNAR9_y3EI~8RMjgf
> z0M?_q&1Eog*GX8HwuXjnVEbI9jS`&ci7#_1dd@JN&rOI?Rb+UH#=3DeOUqHfFH{&p}L
> zSNgxZRl&7T>-r;OHITdxA4hdaf4>7FX3Mh~V2A&?JxEG5{%ieE{$SurHFb`1nQto|
> zk2&-1^f+15ar&AqL5?I@5d+9g0CrT>G^eIX^m3kx$>m$7tf3L@19*U-IbMJ9!dPGy
> zfd$^AVijNNrCHdV%bO~MF;5-i9dP1>7^qX|-AVa0ava(pw!r=3D=3DQS~=3D&f1Fwyp_Jn8
> zUf=3DlTlO?9XEc|A^(NslUC_m(YND(l}CUCIO5nc2b*a1b2-Oz97-L)zKHti#L!T~Yp
> z-YyDr^4!%vadUw68V!)*<0q}Z(LXEDfvKv=3DCa%i)JDS*@MY@=3Dj^)}Og?nC^zcU%Hv
> zYWG)8t&~~;YB&U!)%yKHe}|cLs*W&Qa5XTUzu^zbg)2=3DxR@+{HW+IV|M|7KxqIem~
> z%Fx|+@?EW?Ct!qnJMy)i&ShnHnQJy{LC=3DXQSaEi#T?=3Dcvod15>jm5){q%89YHozfl
> z=3DP673)SsVUw#*Y}6b45RD4jckoBmbE=3DHpJ;8oQM_*KF9;P7!f~e<p$NH*Dufxaj~Y
> zjuZ~7!!03nO|`f8%BUY$1~m!>NIQUYZFzCf8@dNx*yr^Y0pIC7(R|$ov9^2$VM?O$
> zoLcn4imiJYXvp#HfNN+iyU+EsWTx$Vvz`%jl5Ad0uu%ELgW^#5OFTMKOmN>UC?@>K
> zkfL#PnY|CKDWEj_e<WM@w>iT~%7z{qh}sY$V+chSfEqN-8*gFhfUi*v3G{y-lXs)w
> zYh)&tjZ&}h>mRUMN0F<Nzl!*~D^A@MVA=3DzE`}YdzeX@3Nl8i&$Y<9X9Fz?>S0p*E{
> z;Vo@L9*An%7X^My&I+DTM1lAp<?P?b^7cJRm+`F0HiUF8e@}6eyv!w`3n&+q^K6AR
> zsfr0{<z_85uH41?9t%zbY7BeAeQUewLP&R~vTn<&gOL31>?1mYPE_%SuTv)2qjziB
> z_XyP#f0S_#{_B3Sp;8QSeU=3DF;dpVQ0R>+MeGiQ<3Ei8LPUFdM0&(@T_G0sg^B>Yw;
> zyp;dyy{wURe{BFsnnotU@Nt~EQcbZ%(h2!aX?<~i8I5OCrrEDr?tKy{s+HFeq23YB
> z^5HqD2A9<+?)2>W3<qg{?JnV2>g7|pQj{v^(`#<t#QkKmY&Z_X8&6xjF~VYFF8`_*
> zPB}pIf!6S-wsaLt??s5YnzI|T;iJye!>q;U%tm_Ne+->Lg4~|_wzzhMla4%oa`{cB
> zLH*d}6y0`b$+jAe%)Q-%k+^tq>T%rjpoE-HTioxk?nYo##9nMOPln$RU$wCturvm0
> ztA&bm-dyAP9LltA4tyNxX;M!-8sT({SR)KWUS_P~9+VJ+A4(55?<#CZ&QLG-y6I(2
> zrOm;rf2R>O_faqFnL!Tq?yJHDT_%UOzt)qpSIb&%T3K{m%4xYv&X|*qDa4x@4Iu$E
> zP(ru&jo-%oPNQWAoswOvwYd=3D6zNlNEAu#k&N`VuYZ^$gk>`7WeZoU;Xl7#^rxT@om
> zSCNWH&R%JO_1=3DBzkFI&F6LN(KPj@nQ;aQbAf4H6qW22-U{Vh;D?^!CoH(K!`4*({I
> zn{Ln<8qv$Xt8=3DSHKWU<;P>_C{R?xydi^Yq0IN~T(#Ece1!D{>aymRXJYQeW-O0QB)
> z8r*kS*l8ks4WH~OWr0iN8Io>g){D4zrS=3D?R+mC{SwG10A&2cYNsN`hx;j=3D)jMHuO7
> ze|^=3D(hxDs8Y<&y-4tC@3L>(8CM$iNHAKlPSCJiGm=3DPbJ9F4?QGK6^bw%R;K=3DLQGf3
> z58!TsAl9Y_@ki%Ju0VrWDb8g@d!8va;)Hk-L2von2$46Ng#2zXg21TEVSv5fHHhbW
> ztw*Pmy&>AX#mmmE@lHr`nkoC*+}zTqe=3DSD9%K(16yBc5}#?_}qc`B(HLd|sYS`JgX
> zuh=3DAR3=3D+WaBwaiNPSl?_X$<K?ho@^2Sqkg5?<<6QHunn>4BZhQB0iG%bvk6OCF}BP
> z+c(XlK7HwbDJ$UxkTHM&N+a=3DGszM_`h?R)SCvyhzaG7B6sOa@5c!jJP_`9K4e^SzI
> zg26786HU0@8_01VkdHG^%netbH2Sx54%HbSS@H6Q;lo1v>TT#pP6pO?H#;9tQf<E0
> z`LSMt($)J-Lwz6p)H^90ZRnfuq$-Q2@5QHABLb0r*E{uOlh?MtOH`(U60D6vco_5-
> zo+!4bfB5DV_M6!QpymIDtaLfbe=3D97rOsf-H(5^RPD<wd^IwW{VCEChLrDUkqd){$Z
> z*1Wx1k8t=3DeDED<~mRUS7zh0P;N>nvY1Cm`co<Y{RW~lc3a{9y9sLr(&@UV03#sSA#
> zS8`4b#$&KN>#Lh^MV;3UpTqPyW;%t=3D8HOqnjYKo#za?fpq#h+qbBpb(e@J_GvZn9h
> zc-v_s&p>y1V_Z`u;a{D{7=3DY4HH-31lj5y0t%5YL3V?M3$e{|KLE~bNG&q?!xY%B-+
> z$$}Hlt`CRUDw2kok^O}vO!|Gwfng*8gz}5uR=3Dm6qP=3Dgd>HMI#YPlf4d&o>j|V{85(
> ziG##MxghA{{6`5|zpeF2e-dw&wUpV^i;LN<&ix)L383jcsb=3D1H@)Agc**MY~vlnOo
> za;txi#CwNSGcQK?#X|D4<#+6%k}HktHOk3K&Jl4wLA5i=3D*lrLZ!6qXcpjuPM*mEQ(
> zO<kxA)^T$kOQw(VfB6)<XV!=3DBy|k1*sxBdLmGhQ((b~M^o0x_ne@uGKDzS3Z@ptWZ
> zNRTiZ#%RW)C+)kAkq`HRa2Q%d-67?#xf_s}L9<#7ygmHCUfG6ID1@ZdWQ<b%?ZQ4v
> zv9<^6yJmyp64xh127v6GRy-`#qcUux{$6#n->d2O)gn)2#ROu|MeR-^$)}KC!S#7s
> zOBYC}{WV(`O-f5<fAYim9l+Fa&eR##7p9lyZl8mmH-6_Hz&Xm^_9n^7Z?8*+Oedl<
> z03eLNuMl^d_<N`JKcuY=3D!L`kNrx9k%5z4Ckhkk+Q{$D8K`QnH9^sBM;*^@}Cjr>t-
> zld;pC*O@P`>O5ui^)WwMmC{GXz3*MUOE`Wu=3DD<iCfSq(ke^+FQtB9+!!})NXw!G~*
> zFx*q_cfS+9w;GCw>KrW=3Dl952;h<SUyq_g(@EYein%5&H26NhTU#pA?8fkyJlMIx!B
> zx=3Dvx%{1Ot1RUHUsP!ar^SL<1rsKHhcKf2CLFK^>4=3D$g99maB8rX0k__J5tt&TK)e=3D
> z<x#ssy{2s_f1Z>F9Qsd!_zT)IBdTs~H&E$gv`RGla{1BsS8XGI(tWKqt~d!^#zyxr
> z-&GXs3R?rt112j3WuRUsQwdO5@GHf6_}^l>W7chXPRLbI+#zxHz<kq1M;h`4xb(gu
> zQiyVQxhStf#}w(b;pX+@1D>=3D<dHb|v1Fk`)$=3D<f%e~>sK)K_Jdw<3}<_|%sbYe)PU
> z7DUqEaEnQcppWmb)J-;RRFTTO0^c#5#LFsjS#}O03GEtph@@10dtHL8VfsMuQxUE2
> z4%(Q)miR|G{^CQZm^BJ!N1J_Hw>t9cY_<ItQg7Xmyusc$BPgC*%S!b{en-SeN{C;|
> zALa3Ee?=3D>d+(9?<*JmLb@=3DVxg`~-MN7PXvjHt4aCmIBj$mK+=3D8glpuU%I6kw(aqBO
> zF^y4GvA&Om$pHzm_zW4!jLq9a(b4Vm;uBhx{C^4cZB~4uJLFglc>LaSS<1MB5<Aq*
> zt^1|e@?AW}jHXvDbCVT~%`XxoIJE4!AS`c;e}Lo!k_|ugS#A9>Nzp<o0uik5K4y~m
> zand=3DC>fUJHB~!6~Qeck+mi>a(gW^Gl$H5NShEGT>YLULw$+>;DwHqHaZfj$;h7B-#
> z_UPRJ^EzW8lr-}mWd;Wx&|4UkN1DMPxyTN5ii()eWdwSb^l}hvik-bWPSn%+8A|VZ
> zf9BtGF&H$JIOJv6qy8#2p2#e#TA?u-v6e?0-Wlo`XM-YOBTh`cX@WD&{KRCb>hhPa
> zMmFekDMTw5ZWj8zK+U~VS2?_d%j=3D#0+)vbrF+kZ}(Pk)hc5(nMz%?h+^lbTPOJN>{
> z)zpX4#FEsCb09e4?KjN4uTSYv-bowue<FYHu6D(r*1HW>`y`Lzfl60qI!TjayvF3o
> zPWXKYtO{jgtHJEa1?L)BMpB;Sdh4`pt{6?w03e}ke4RsR#RD<3nlA_N084kf6i-Y>
> zCKL}FxpVz(-I@nqx6|*>YHnYI!CvzA1#U<tI*jA`AbBAu?}kEekx`PyM1_R#e>ieM
> z`7l4Mc}Yd_95?C5*N9LB^ungjkmQ&OPVZVdD+d8oxn#?Xd71Y@Y(&;CTC_|}-_9&_
> zj2_%ZTsO%Jgd>^oQ{B41O#_5)Ix>H>9(whXfs|?V>o@g;ePyG_rYsNZYQ_>xwy8&K
> z`NF<1T#vIPn}D2WxCm{^_K({{f9@NSECG%FxZA5#SbVjTWy_&MxXVzkFD*0eB5Oki
> zFiNA&#v<md$_?sm8<H*B-v(-hAN`FTi0q?xPbR^p7?s0%2~JbucfjR!IqM3PJ}WlA
> zRT+NhYyk*qqzC3gQVNEgx?#vb4TTTzye`aU;LtG)5(?5}o@{A?HTUV#e=3DLS{gS_m1
> z5HhY-{EC%;ZS;Dq!=3DXwFoi0Deh8?~{zU)rZw$m?aznbl0vnx4Vfp9kXf$N^#6B|NM
> zlSQNw)Ecc5WreVc8s4wg*?4Y46M6y#L)A7=3Dub9d9yvQMY&ewv|&0p!gp>^bgtUQ<J
> zBFU0%nu!jV?k>iy@I+_-e|w`ExT=3D6{=3DRU;c@wB7dohCnn3dA1iKh$JbYN*&*ihGa1
> z%lX6$ay3!g7P<Ju0BeHE)(LlWZG7$n;e}}lBdEWbWF(g@sY4O6J-ISujbtYvbBg9x
> zD|JB`nbu91Z6xyL&`OOL*dN-FGT;##$b%Lav@4GQvrmeGQXMq6e+*)zvdVFKJ<ZjD
> z3@C|S#S9)NK(Nof8NE>I6n_uB@tIw7zmondC-tLTiQ&NnKJ5$Q<BK){GHYkmBs#cJ
> z1$Q^iyD7f0d!X5NBvzW_PN~yUocQ`ERu(6^^x~A?XcpiV&V+o5H^aE!+SaWDpkGQH
> zySj=3D(D!G|KT~zKoe>j9^t(uzT$JaesWy^*_M%k&<r+m5hDSu#%%pf^3z8T-}|C#1v
> z-L$|l&ij#5fp(okZL|yFeUp{Zle3xSz=3D)s7Q{=3D=3DD%za|7zl7%KQgxh8JpR57H&(2H
> z)Cs+qlK(9_F#bTobL`7MriXJQpu<xnHtwr9TXWg1559||f4IWRUaW4-l)u8oPG9uo
> z<+y)2kzb;B(I7xA0?ufdq55PEK`S!YX0pKoT=3D{XH?P}U76IGs9xVf~snre-gJ(`1a
> ztMj0eTq#L%xcsY8^q}y3mHDw%_6X)=3Dwxmd}sW)>(Wc{nS{~o(ku(HzZzcPN~#i;&U
> z6j5S1V8=3D$Ne<fjd^3Ec9>c8I%Aa-&oLo4qN$p}Oe`RVJRM(?Unsqz@mh~o-_ERtt5
> zxuBaK_T}u@nQ^FM#;(Wd=3D`Y;o9aSD(l^e3}Pk0s;5vY^cJFVIR9JB3(TG7?#BWhvV
> zVm5|Z0oTD!jm@Ji46_X_6C^aP-iQ=3DB&sxx^0Z!sce?$rWBw7OL#Ite$j2YkBc9Hq=3D
> zCk?qCbN&8+ygD&p8kHOrZv`oMVt|Imcm4ufWj`EI@_5b6j6=3Des&^{1CHoK>Xri*E;
> zm=3D6Q?Gk<WwL_KWJ*o)CccHLt-P8ixomFE6b5CISWvZ+(_Cp;J25v({HM?vP^wnA0M
> z+4NW+f9F~9ti9bmK^ew<u8+KEEC*W)wduzf1_EZz>r07<NC29}9hC=3DPq55eOK&~Ep
> zOn3px`i{+Ucs?IUk$x6EgnOeu{RL+D_fH~%K)2v&b~{?z<O{QxAn64ZtA^FohI(j$
> zgD)ECa-vLDHaX$~)ZjlnU1;>wDaI^xG$M9)e<MMttP1ZKiW8P8S`Rxiz@yqrDKDUO
> zKJYIK8EO9+;<ZVCxoUc*y4=3Db7`x7Kf*5=3Dii9G&CB1ANQ-h=3D@=3D{$)qz_c*cE!LXKW=
i
> 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%0D=3DW+`0P?1RY4Uv+xwSVp$
> z+vWAldy6GsUwONWHs7*q<`S8tS`l|ix6e^mMIu$q*)uQ6i%2V-tkFtg(<_bZ5$U!L
> zqF;m&u3|>(rrFj(!l_GCFN4zZj=3D+E~FJ2asq^;h9r(TpD@(=3Dg%&NWst>X8ZeQM#|n
> z$2=3Dts3_(XwizkQYue1Xo?9xkIFMlM`BcJK@ld@&&$@bzFwwiUuEaX#wTnac4b6<FF
> zgb-k@MJW^Tt|)k}d&HltH8Qd)3X7^cJ)YT_dkhopkNV8_xBzuC5w=3DlldejCtZG~xJ
> zfjSOcLkqcD+stJJz9{nOE@lZW2-he$-rz?ljwO-etfa;P%Ec)ray3+DCV$FFu`{_x
> z8%8>_=3D;BsTiBCON1rDogmVz&XRz*{x<6~qn{!R4Dwm)$Tx)oKSi}kndj@2uCW@^R-
> zV7^JCq)D@VQu*fi@hv8fuAR%Ro6ychu8${3ReY1elN?ZCNp@-YT}umG(-?2!?5zok
> z5D#^_p!4?I-d<LAfy}9p1b?P6lM>7WX=3Db-=3D@nxRc=3DP~tQnnLRO@izZv)?=3Dccc$+r=
O
> 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
K
> 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μqbd5ZBG7?1}d4asb=3DlL~a21BC@#6X=3D&kZWS~)n~*19
> zx=3D>1;@)A=3Dd*APU#jMINwky<j%eg7HFsT`QAJb-tlmud!p2v?=3DXnN^1xtDSkE<<!Q=
=3D
> zdUQD%onek0FK9FT)&?QG5E}DdGYaniM1KLSoT&z?)psO|EKa4#XIT;;0jA~5Ah0LK
> zi_|l5g()%>wEp+SS0*{UkgS9`w=3DMkO0S79wqZDep<*-<MB#(cHE_i!#1`GN<RYxe=3D
> zUgx^x<Jzi~%WJ9@@C>L%1uhQTHG^Ck=3DGjf68~0dj@y;AIj6e2M@vEP2t-ogZ^;62A
> z2NK;_gbL~=3DCEoVu^W(vc3-UvZfdJ$Nto;)4Lf_eLg-^!iPzx)CaC^p9I7<NjY4o+$
> z0w7~BJuu(wb&`K}C;RvvaTeZ0#7dD4vhuDFuK!dV8OUKeUn(rzNb18y#gG20ZN_kv
> zPto5{9$u^zh&xlB(T-zVU0KqC7`%trT|yhUa2FABUJfqdYY!7^daA0dI?C{X$Tgu}
> zruh{MV@erY{_w7T1@3Kp?jt+7lC~_e)l?9Iq`R*_Gt_^WlA+7{%aL)8s~9WDW}>V<
> z2vVhISuBX|%j{HK;PKZ6;U;f!PfS*Jsx9q&)w#@FZ%{K<3k5@;ei}F*4e<KP%y5k!
> zRg;`h`5)xyS|r|gFi25cTX})pcn!*YQLWOE6%V9+sPwyt-2UrQ6LIpwas1ID8-%`O
> zxDkkMfT4e@G@MpK(uN_94&Qu~NeJS%(oPwa{}vTd!;-XF?Ad?+NBw8bTuzfn??tV{
> z%cfV-zOSt_Su(VHuSz^U-o&ISEt6R6(1<I5bR@*wrqt$sXhU{=3D**L&r%+55oC>kw8
> zg<LK*b{XWU4ymral=3D|l~u-Alv@q&wiE>Ub??j(ON1!0L>{#&YV>%L+{H_-E;#!cGW
> z3T%{B)=3Dw959%SBIH0PS@$aH+Uwc|f*#f!V<C8t&Q60@Rj{rag4KlrptHGR8WA52h-
> zwo|OxO+tQ8NM)s-$}4tyD2-nBCb;LG6$_;+lXAN!a1n)Bbf5LmM)|j%eN<2KT!b{{
> zO16IhfIJ8X%Ymu17Pdy{?zP$bK%<W3`zTM@gWjsEFCVbtfeA?U=3DOTt1qqv4BqB$1}
> z+q1xPV=3DPoiN+LJVpFxZ;&O!?O75R6^A|ODZ(`eU5gLHwa3m}_p_{zEb!0sZ5xeFt3
> zrNlJT6&2sDNOi$L-f`R4&vZZiPA8ngzNvqUU`>MB8hgHq8!Q;z8~6d0Wyi`#%8EWJ
> z&u-`JmWyzUpd`O$`AAn%a0L1Mk_t^UwUMb}@>6j{hNqeNeqv>Zo)hBrn_q`cs$B4F
> z%3kh?2dg~s_<~URF=3DFu09<!uz;O=3DMHvTf(C04P@ID25Kja^_&_6=3Djm%?&Y`eY<ho7
> zLs+7)AT(=3DU_l5L0$@%Kj;%9KvTM!6^gs7C4Pnt!6{Mn?NKd;asHh3O8PlM!etzT8c
> zTfSLljVt}-suVrLXUr#Q*DYWGZ(Lf^JbXU4I!ksO+;3^(Wg%O?{2hBBFRFsl6wLwL
> zTkmhVa_8E?RDTnhP)WD|G)<}H1B!n>APY;%P}sTT%s1G6w}4rgG7qV>DPVZyKxniI
> zL|^!2qF(5ErK0wJAp3t!A>@;hF1A7KOE89uGbhRf1Z>D9^@)hkwWYk*7T6ME!9C%y
> z=3DMgW&nm*eaGllj^Cr#pMqcw533T$VT-0L{+J-oB(RXpq8dw7)djk1(t%I|;Goci+C
> zVs#!u%KMtrKANd1D~Aba41Xvyy-EuLR`J6dqky1^k*=3D4GBq3}PQ|W#i@+1Q7Bql;6
> z#Ro`UMi-=3D&@8UI0qmrSC4Z`oyzN3boCj1<0_$S_fGu>vpHPe2t_S7~tH=3D&H^3ft7<
> zJ2wExukC-5B26_q0>amx2rYk5+>S01De`~O+n3DkQPk`I2qa&QJLOmg(kFWw;Y`O%
> z)Dw%GpF?GA9Yd-Jc280+_ND+zXY7U8VN0yT^lzLtG28tIG=3Daa&Lnd@lp;iaBfcx{F
> z9Zxu^SI~?2D-C`7W+-xKd*TD<7*c5?KXwkyb}{ZXrlA9?Cx5~rOhbQrI(t*v#k>Km
> zg=3D*kI4IS0gS`l^eE=3D7wo@;;;DRYwXXl*iHJDYH8~NRqXB3&u(2&?VwM6C9yG)C5-y
> z$5}S=3DPlMM?UnRflo7$g)w4R8ls1%(|_oq;pd)RExBgoR)@l>Jw+~(}EQ4MB<dmXzT
> zQ*8@aF<x9;V>0RD%*}sk_r(n$^BV&r%s#Z6K%ein^)5CUdD`Inxtz4s)a!K|3wO(A
> zR%Fl(<agAZ0f6MsFO`2O_?i)q!0>;+pK4d;=3D+6=3DVhY^?!Dl@+&ZWTvZIl&5NsUO)3
> z4U}zDJmb;lZ^0?Dv2H*`ARnuI$FF5vBFaJbLpnE2H4hyuKSzHZ4az{*D$?6Uc0Cy!
> zjnl=3D>W%xQWh7&`DPn9<<7}JJFKp!_8v(13es<Z;C3nP+i!LMy&jhLp_`xH##R$7H2
> zU7iE%xV1^2x(i6YCC?9P&{^fpBDK^ZK6YGlHmbDa*g)^HSTI_d`@}(~Goh$sjZ`aa
> zsDEwI5PU#R`tW~GMPTZc$vQKy*4d7>a)v<J+d%vhQC6xT^SBNvfF4mxQ&T#g{#9TH
> z;AO4!X+?@4*P+Aaq`@Mefkv7@4ye=3DEh%?|(M+@;|ZPPJF!&b2HkNKQ7ztsZPKCn|Z
> z%r%HDRg(*4hSQDoEY>3>ssAR4L?b%4wf7v8&I@0erfPqS(jY|iRNcOPq0|*L+(mtx
> z;8%-tVFtp3OfhWwms#l?8nSpabI-a(*5EQVe@<^)NBJ?qFjQ5B=3Dc#cKC&NUrbfU{c
> zdLxWMSBxz6`Aj19D4j;Vjf26G#PByEOKD*$Z|rD1P*b~Ego^)m|K?%qJJ%T$1a42u
> z83;W>$s2!k8e4z-L-IH0(}xkm#WKukMtCx*xnmCf+A!fz{s7Qkj3-0NH~Wu7i0@N0
> zUII_?C?ZUGK0;;ND$(J3JfEhdY%9j3-P1Xqs~NJ$KH8JSQAP{YZzlYkQeCoiD9~D~
> z82yP5!>c(%oQ=3DL}!{AY<F|(;wLUPA`i61}qh$Me-zyJGxm*5f8Kq<xgG777`4FS3Z
> zFXg;=3D;HgmYM-XpF1OZS(&;u~b&fqTBo@q5DQHZ|_kt^rt=3D}@$&ESXnjcAg!6Hwb`F
> z2N`^Q9BA7{M<o#B^Vi0>p_fU9?YJac#J}HpIiei*9#rM!0DDCwHWO|(^caOpM~Z+8
> z(*b|g8M=3Dge*tqZh&=3DICwa+3Z2s9l(La7KHnFw%`5Vudv)IYQCyQc4(N9(Q{KeRt2*
> z24@y~J+MmX2(}bFK{|qL>TH`9`OMV%Wm^k+H77q&#ji&Q!qL<Ol_S9hQ-u`#fLV-}
> zHejF=3DR=3DGVs|1PnyCz$P~8(qA33jYYF$?|`ntj-p1!rc8e|GJB1Z9Lmxl48i!JWKf|
> z{md61rUyAu5_Dw+5jY{j;vYht>>IxZ|3yEyRmn|E>zd>oe!Q*A8nbqEiv{*b6~&9J
> zH>dvP)MP?(U37d8DG@>?m<x{<#c4>@IaH?FRLhhGj@=3D$Na@x;Mt(D^HA%9n;18IM)
> z0;@H6`NUrUCG|iu@quR=3DLJJ5uVJ9L<0P571O}PToI<!6IdqV^Acop<d)xWb`qSPm6
> zzv<XIagj?r=3DEx&uyY#4_dk;FN%4RhFyhnmIvb=3D=3DFj`Pvn(=3DLKClkZ*}6n7IBqE?P=
R
> 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
a
> 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
J
> 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
%
> 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
&
> zjPR>lwm{Xdo2_Byq`l8PkfU4!;6q@bK^%3k+J9Iy8oqnYdU8kDQy9b-t{nA%Pi>v-
> zPK|=3DUqlYf5i}p3D^Wlb98Pkp=3D1IjbO4RE{*svv@Yarp15m3TDBi{nS7qaBC~Eb1!E
> zawl;PE(60slT@u+!m|)G?QIm7<o>hY%W6;!%Mqvo@xN`kj+`hc4<OeLGYo(h9K|%d
> z27eWn<Mr~26677!o2|CEnZu!7Eakg#A#SLZc&3$9Yhv?SNPuU6{{vg}rxIr1ujGmR
> z_K%#OMVX&90r{&N0^Xjcyp4Hi?*-`79O|`clv24S1})#h5)}#C{D`r}B!|mpn1I+P
> zy`Jjktm8D)G)<qU;+`&r4dXeoF&Gl$LVs#^tNUd+%=3Df?Nq0#3p>ClZc<29<+Y}1#^
> zv$nl?xW1X&#~ROLkHm1ADIlRL3zK7V5R~}zx^WA-YjHAQGQ=3Dq(&6qA!Nb-*oCw!9N
> z^tTXh`zYhow=3DzGuhrkgda<k=3D-e%n!SOpba@VY`#uEzXN%C1>9zsE}mAnP6m?YJW5>
> zbh5SIUQd942gpKL8@wF3kC<^y3~HaaNGP0$^zI>|(5c=3D)ExCRo0m+(9M0-m4MO07Z
> zmoyaU>(p_iV{C!w*QhH5DKXJWtl1KNQ6`*hX~PaWPXeL)$N$|zEAOkCg4>nR89mdM
> zrZ5{G?l9C&+BUnFs*>P=3Dv}`ZlFMrf~|FbIF=3DPv|@9``@<Hq7Nby5qRVva=3DlkZMwhz
> zwynsd0FaO&^qy)<Dbb{~NNS_$%^4>7|5j+nCUX`@7Z4+cgY=3D14ZH%s2@Vp|WvIjo~
> zDvvg!B{y-6nRd)6=3DR95&*(Oou=3DQTNoUzbC!c3dbUWU?%(3>uQ(Wc=3D@Ant!oLp~hoG
> zy_V&jrE`3%Z?<=3DS2YCx`dW#PEWX*?p&F*#|;7jnVxvvNtGHjQII2GDTY3Zs~IFo3S
> zYZ;JAPza+<m^GQt6p4RGmmQ_TY?Lt>nF|&k0QKJw#=3D<Pv@FA&hDaEK9k%3QlQscrF
> zs)MQ_ma_L~xp<zj0qMbOeScA*Ia91d`zh|!b9&gQJn*9ghsVMz<ErDh{Ufx6@kRWw
> zE#`rs26|N0xmsXjf>fT3Vw-<8+z$||#`lHiUp;zc1Bt>F=3Djl_0HEm+{+U`0mI>#ZF
> zs%Q{1dqN5F4wJSNXR0>?4BWu)-N&*vP|kHhe>ncTGRws~`wKr#MStRPX=3DV7HYcn&)
> zsomB)am;4*)a?m_J)>-Mik?A&?Jj9&OF$FAP`k(74nS4eN84?aiI#D>Fd401GvAQk
> zRMuDPt`K0&`T`04na9_A$~XX^qH$*D4%tm=3DEGsrzpH%4$td5r9HD-esg)mLa`lhBC
> z6Ok73t-o)dtDQf-E`Qd3&(UD)#D63$mn3ZF22`4Zk+C)~F~g_Gc?zrrK-3dS+*~WO
> z5YStSL{}2`0!uG6k4BVI1DTTc`jJ6l_L9zW_ugw1Z_|N+J@<ge1}(7f-TUldB6XiF
> z(@%DQkMmA+k?;fb=3Du^;3Y921+C$vRT{8^$1%03=3DNxfn_$$$tyiA)!mvvweBAn$D$o
> z;G!Wa{=3DZ<B-W3-Puvb9|T^vO~P%l9{VT=3D&r{l5((-srwzQBoWi)d(wOiQ|F+V1vSg
> z1tK_tbv*^0v{!wzPfEi~7fnUG(*JcEBYH-b?pZo^N|T&zK5#fJk9TZ9E@YDb`-%G$
> zM8Xs8)1`%nyMLWw5W0K+19KO3bP4!H9dCc7BYBW&$|AzL&211Y4u211_T;HsWu6YA
> zZ%8m_X_s-shzYOTV@uP9l$i5QqU7^UTCT1tn)1f${<)6(Coy*iMCa8%;!>(l&Z4~Z
> zSYe5+-%#fEn~1D+R4%B30=3D(MoXk!z6`BzXOQN)FXLw_quO??zc>eVhF(76HXCZM5y
> z@|>wsi7dD`uAl|=3DTwqs-5<+i;#LiHiGxF;_|CohIljnu7f8Re3LlXcv>Trk(AClcC
> zhVhuKZ0$W23R$HH)_|(x9}8)LrY6lMn%Rm{zK+sPb3W1lQ7=3Dj(q-3A*7W%QNB&Kr{
> zdtTV&e}6&`wMfO=3DE;<D>j*W~5bh`P%oUo?Cf}1@DzgX0N7ms#a`P$}c`RJK;^T3Ws
> zbF9=3DO;z@hpRB$`g1_K3S>imuByg=3DjBWip$~#l|7b_h*&{)7||cc7L12kgZfgx9)6C
> zx+PSgGjaHQcWkuPqRIq@*_RjEiXs?tR|)_)s0{4K<MnAJ1Q<5=3D6JZxb%AehSWi
> zit)iin*FSJ^wPB6IZSLIcj0SfLLlP_S;0b~9aie9&2|>EflBO>U5l2q((!J>gCdBt
> zOZpqQK$B*H?vrAqo9kd_<T+bF@2!wgcVj;@k>t4UKZXiFb%soL#8(g2(}4nvKBKs*
> zpMP}&ioJRZoa0@I*Zgh4QL0=3D*i8kiUQRY3e6tl|9F9!U5lnB#q6s2>(!LZgx6=3D+l6
> zx6<I{g_pl(568&d6Hv0cmylk0tSb^|k3i;g^$C{!v6~0b0lOgwOz`h;XQwnhGMQUI
> zDS<BB33)I#?%;AmUPa~zaqgK0BfA<pgn#rV-`l)OrsP`PFTe#$kviq-f`+fv7}q#E
> zSV%<9ETbCuX>KWPIZ~C@arB8uk{h<uqY?Q13sM70jgRf27f&iY`5EK(qvqJhx>j%}
> zY?o_m7Meb{9h(a!OWq=3D0l8yzXdRuE-iW$=3DGiW1KDmfa<KZiBEj?S9zGeROj4Wq*Q;
> z<q08;Gteue{FCQN-Wb^ZxI0Okv3UA`d^Z&txUikAPvtSUbn0t0CwsT?(?X!XBw`xF
> zG675v%LB4S8PD=3DM#+&?;-YooTL#}m|&+|~^_@e2S?RVUgIZ!1ov{&N){MEs%@|2#P
> z^SCV^!D&K^3q~=3DT3U1(%DxGd927ezx?7FS`Q;iCm1es&W*K@Z#G$Sx<^AioXy076?
> zIWbQ004dUPbTqlx11?-$0&exdrepm<G1oJzmrUwd=3DRp5Xv<(!6e%%8+wv>V2W3!^*
> zb-P_v2&>Tx;QA|?6_YC%r$LV4tT9*mgMaOdU$Z2xWfAE*hd$o>Upb(Es((?1sf%nW
> zvB~<=3DXYs8$zuW}N#m*qxp$JvX+iqe_L%I*!y#Oj(&vsEP7{#5b<()awCFCarzvk0B
> zWN8qJl5htXLEI26TjRJDC%hFY78~BDoQCzGXJLmuBSN6&TO)6sGsB<FGtYG}mO?eY
> z9IXCI#dlJ7i_Bbm`p|b8?0<3Nn_wtgqs`4E7GM;A;0Kt9b90z1-`0`Xh{OjnqGuN|
> z1F8gDn~RapgBthikS{^(>Xrgf`*1Yk0LIGSf!C7+2`<CqciFm$+qj~?h0~^hXj3%T
> z`uf3YPy%|cU2LEUbUSD2yHIF;yU|1mWI*#p030GdBKyuxB}5V`7=3DN+9@WqTUC$F}=3D
> zovtkG<uBLEhf9MRpDMQf+we}cryL#$dp@^8ef47$fM7&`Rhv?#W}?Erz&u8_>~7qR
> zcD?es?h~a%Ga`s;H^*>@BNW`)BN{d>9m}vvgGL5HTaarN!#LU{Nh)>?C|qRjpXlN`
> z;#}H@_CzQvUhO!$-haPKz!)H;?X@;FHu7~#h<f+f>vYkC0am@1STLDLu&$2(>Tn2X
> z_X%PTNsM+9iorC);_(8mYIZ|Qlcxql3GcbH|N6>>WuO?Uq4;jXKSy%_LqNR0QXcG9
> zd{$xt)4?kSY1=3D6rb3k9WaRx!<d(J%x)^4d>=3DcRv!i^9EZ4uemGebayE)d@sv<r!cC
> z6~E`#%p|cqJ5i+@){>>02?-(DSYzG?ipa;R45Kzb90yxtD)Y`cqApa@vK&KKjgM$!
> zCI)*}2a}t|c2@4L00DO|NFuWd@z;W<%)UNs&?Ju+LNndEfRC-W1RYc3%eUkD{kYbm
> ze_Iakh-cjtB|_CEx~G5Dv%^+B`wUJx=3Dq{}zhgRSYa90>B%83uM-8VcX`fYxD1A^V7
> zG}m04$=3DzpS+*p+cWyd*sx@f9%>Z<vFNWy2C>%5b+Ad+)(KO0?+u}XE!Vu-n6e|xGM
> zu4TycccZ`|9Ia1-3PF>`PnbUzdrP0$Sc)y|q^m2~O?ET$o0xxAuK>L=3D+5bttOLuk>
> z@cd^mhUNYm4Wfs%RhHBPABH<U8&VAWC#VyQZ$`c#l}1woNw1gLa7W>oAKvN03B-8J
> zmG47HrNFR%dtL^EW(^Q+a{^FqAypfKY$xb`l$r>ho1)&?6sc4jj=3D_OK#YVODC&L*C
> zHD6P7fpIBh-x`0;8|Ax$4tYOe1dsZipHwx`k>5{`7IA5yh7PM$>eT^mzDLrF1Eks{
> zU|Y)ee<2Fb3r9I=3DQUMM%PQhHg)2dphkA1i6xAQ8b3i@)FY$a>BW0fSQuCfQyg@f#;
> zT>w$x!OeMl8ERWksT-#9-x=3D`_9%$#9jRB^;^3RB7fJA?GNvj{vAB6|$?*T6^0PRzS
> zK$D{Pviryr7i?Gzyh7<bS13h&=3D*lS%wNx3<kq~05t*RU(Sfg|UsHM%n9GzN{Ivl)S
> z=3DUNU1j7E7*KGf<!olkxWQ0}WmcqaU0V;<inz5&L6Z>BX74)3b~ck+<a(PGMe<&d*&
> z@LVZz`nP|h<So83XwE2*b`IC2B^m{!@iFpuO_HAb@tDa619#xaS5UC~squ|yTE(C>
> zh9^!*aroC^=3DiJ3?upgE<8x&<z1(UXCkFQ6vt3n}MFM>sldeKTX<K*A6{Qqcg43Jz_
> zIImvCP9{9zgvGaeYbC%-1-ml4uV>1CUJazKe$s!s_g15N62Uj(t_6B?9AhfE@hiM1
> z)7m^Bl14C8N5R*YE-{GgwSMUZXVZI`vA$aQkOY0Dfn7Hk`;P&hev&s8`?CPXVx!G7
> zz7OO`VnAN1&C#UHdBZ^!PgF{3MxcfyeM$RN$4k9#w)!8(-<Z}__dY1lpyL>taSz2m
> zLT`T?fNvb_XxVOG*nC04qC>=3D6Li4}Xs+l~K`7EK*BD&0Y4Fl&j>$ZiJD<2D3`PCj9
> zlLo?41yWp=3Dknw6SEw4@f;gyZ@0>M4M&l|ev_-ntX=3D@rgRzBq6SjSAESj*Zs6v&K+H
> zS>^HxzP@|2?QmOyiXDcl5U(TO5Y)VsDRh7D!>30$7`p_((wqU?uu12b^9qEh14W-F
> z-QD**gD3hy!2!}w&LwC-{Wlo-R<`$+L`b7VVZx=3D8DkwN#X5!gA;3|+D2`-HEVY*pC
> zJfM%v%rUdEMXT7;{BgBSzarvMQ#wfgF*~BIoK`dKrKefuf$yjpr8cGATtcs#_@95A
> z-dr?BV^8F~VpF9r$8RF@X#v*>(!oZ^hPKh#^7cE_%_ghkWlNiSXd&tk7|l->QD2Uh
> zgc(wO#`d3`X&wvP6k(hm?-fy!twEOjB#Tn}=3Dn}K8&caI)QYtJVApK}%;Z`R*Q?|M|
> zvWb}+A+-Rp1iDXVZYqVIK~zAqaoB$e9ZN`Q&F+H^0y;<ghKdLsGf=3DWC9q>IPU1>ih
> z<9q<%)^l0dN_rRvD-4=3DW>bc$#I-HrAm45)fLWH4Yz3aF6hnqA5q<%x;@0j=3DK)jei8
> zJLTs|?VCvHMBR{;eH>7?QGNuhntaHJK)qSGgAZrf@QI&!Jx1+gVvSln{*`|hCt!5K
> zjNM)Hv@ZE9aa=3DB8ks;2cQLTpz!FcHNuCzxZCzjlJMe0^POcK72GkkB{V8akT92>g5
> zH79cV1s4c$!e9E18iZM*;q?nyFx!zPS{>Ea+aF14-UZ}S#8mR1f=3DC`Tl$x<OA{Rnm
> z1!Hs~-_<=3D@E%?3}HB}AGj!}Ou%e_a<h)q$i2CIQi2<ucEbkbGnj@mgk4g=3D#29%t<5
> z$U1uWgNDDxgKa1Jrp<KvB$U}?B}?W!JCicYKsA%Ky|=3D1#`iM9K8E0m4Qsgr=3D>q@kd
> zxU~9!IGWGVE5D|13yVUe^$`?{+1iFtQeq)IfctF3@&%93a&#JR3NL>iWnd5VpaRh2
> z#0WWiO!IB~v5V-_=3DC}xDBN_{Td(DfSJ1Z2U>`Ka{Wfjm;5PwnggHgzF@~Eq8tx-Qn
> zyZ6;BIIh=3DOu88R7ovg(2Sg|91Wj+rUw?OqLK>g26oPqeL5JBW2RyG;Or^Pcg``Ns-
> z-KJFOz`$=3Dbg(JmIGy#7%*lR38?aN{7MeyEUnGAWW5p(qXRWr>h0!+T=3DRv+m^s_0WO
> zI{J=3DK<}CqIG!cy=3Du_R8>0-0S$c+SMk7B5zeO5(@Ub(#^A?}2>~Of<O(*2mlCvE7H0
> zJnGr^$3r&$`4VTj6+)9+CEN54Q8vJeK7YZ0lE37>+|DBr1~z|tR9wEANS<&TEJPHI
> zpZH^nMgk{_XJaG>PL)lV&dlc<!0x@$#M?pcEQXeai7M|f*0S<>J)uwv4I!O}Y-NAX
> z<K_X2C+*}dPR%o>xm@l9QDI1n$t2y#uj*J-dt=3DGfQSF>-sg-|N9&9ew;jjd>B^MJT
> z<O$9|9XcrnatnU|GP#}efI^Bm9maY^d+yr{dooAJ%tE?tfatY?MSZu$JwJi&^~Pa5
> zl%pYGq@EgI_~~RnL;XVN``%-nbFrQlq*p*RvGmcw<}+#psI^w34g>H#&sFK_+}wjP
> zy48|0ytsk>N`=3DH)_*JHtABl_~s;BRm_~ZvxEHCZcuY!NC6yTmNTvFbLjODisyX;^r
> zSo#WYu1K?cEvxl|HYmHxQ_j-uIYDcka25Dnj7Ld~NB;xUQJx(wOdhL{z*@`0m}Fns
> zA23F_Ozl1kCSwgtH?xKzU$uc6sWR37&a<A@lH_;^r9&9>nmJwTpW=3D-NG#`>{<;CMl
> z40KzaQs93|WbIAQ0fB42#s#3s#S~Bd!xNP@!nF%c3yrnIhFFgik+o!?p#u0Xz@dGA
> zhcuXyh<7Y^15aP1eEzKu*S9i{hv^F^R5%ckb|fm$e|ydpHyyzI>DdQ)ki_}HiCWPE
> z2%+D3rcxLLMP&T!dq{#q7V*9{+maPCsmfsXvDtsV_zV`7vXE|D4|4H7OOsPTST10c
> zNu}#1BI2S<gq_n=3DXu}TpGMJz2pCl!c_RKrjGSu7tSn~RivPf!I^bcVXzQpHJMqzv?
> zl^+c#E{8n|;2J08`<@hkK&<mQP)^KS@azo>w-;`3{w%>F&K5Us-xDYuX6b|vj3t!A
> z8QOo(EB=3Dv3Ucu_LZdVNbJ@h6ZSd=3DKAsH+vW=3D!q%hZ}GqGFzFO%4#e>~#^|lZ{XY3U
> z9o;jl=3DbST~cygn`1$wii63{s0JV`U1gAvIsnFRvyc{a<vm6CRdEsfy%F{@Q_`wm8O
> z^gV20Y~jAh#X2v0D=3DJhejwP+8z(te-fq8$)p&wuBDi#5Bx-yC5eCb+In}^`d7B5v^
> zm!>80cLuts{cgF1a$b&2SWEONv!B#OO{TcnP_GZ<61kc`nDSAP4vQpY9|RiwL+whS
> z*7N{8%3!BurgFN=3DpXRFdRRH6ow{jRSln}tRi6{I~Xto`zuxtvIZ1SXyj5Rcg_5Od+
> zIkd7l#cwRdXY^LsKSspyQrfLl4E7ea0$sNb#czv!E{zr-w9Nbb9D<SA#|H}Tf0u6@
> zX|++~omI>3J?8E**xw~S(1FoM`U(hD`wxGSrU;0X+{U649(BC`l1QK&R3{Up($b4K
> z-Wz_WTB&D6AnZ-0`CoY`9QO^rBA0(30F5+e4nJH|BjkSx_8q>IJ6_l0KSBB$0<=3DwZ
> zcO6KuQ^(a7aN=3D=3D7l9Z0ErtuW7f3nW4>Cq#dyMjR2?Z9mh7ym{*?N#8Ip$Uu&xY+tK
> z+mNzOeLH!RIrsAW@KmC;hx#3p@CtaC*_PYb<@u8;+ta>0wF<y515KRx2}OS)K9@9-
> zP%g!oGZg!^kJ!4WR0%}pEk(R2*Y9FbQG?wu>WNtng#y7+9lf-~5NY#|Z{Y!nVkRSk
> zQ+*NG`V_C}ZwXkD6d#?Vl?dph+zx&W>CQU-e0ZMA=3DPLz#3B&i<aw39a0_QHXX?cw#
> z(hysntsFRYq#OHF%drK-i5GuOVb;lD#?CYQpQ&VsHS_`{GYe*z^)qi1HNo`3;?Ijj
> zoVw9^cuzcgSY;g?D7ZTnLqN3Mi*dPi^0BOP>iyZGyiWKG3^dw;qJ>mQ-JLJb$kVuw
> zMEfx-IP^)Sv2ba0!Ao%^5sU@znj#CE>UF^opjm0_5{^Wyp@=3DlfqMm<cbku!*8OYbC
> z)$P3*X+$6j3k+0xByqAlU>k{s``q{u$WIwlXle5a_qebdf^e(k7Or3UMq>qs>5A87
> z?51So1Ck6V0@)>{r6{??FrK82-BO~~Zd^F6$4x<(_{N99{SCRtd%IY)aBUj*6SXXG
> zLk1wA(}1`<pc)DXTG4;UMkpUf8CdGYr$yYGX-UbC*$vh>3O7T6RvgfR^7{2iE5o@0
> z)I^mU(b?axFztZLqm#>K?Gd}AA;np6Rv@lhN8h)Z(@$De%57xO5cx-*s(VPP7H+Mf
> zcY2kKj8b?$_bpNb0+fAw|KnG+<7I>8XkK_KKWbxZOYmh-7XW{C+Q#RZUla)5EU3%?
> z=3D3N#eiPGG9@vo~XHiHX?cVGqc<WFJ+ZHi%B!JedTrnXLF?w3S>$(pU<2OV3Y&d7jY
> zj}X;W^fFmvV;?rNl42j?5E4`&5~+~C=3DYC?i3sjJUVt8K50tQga`H)X}bEw`(5}eCs
> z(fW2L3MdpGSyz8FwFyzvDev#0FMXP138H7hFG)C&)0ArkhscoNQmMb})~`Y97M4G7
> z?)-F%h?Z7Y7HvV+_%qiicS3dh1A;fFZ7-h@DVIWE2CHv5d{Swni^-PhWWrs*+$yH)
> zC-yqcQ#Rx$jN~6Pq<~^u`$y_8oKf#A^BlvtK9Y>Imso#PhMO5a4>k+Fg@J-E7e)7D
> zqmDvJ?xetFb3#zIyq5J_T`_&Y4<a!?W>u3|?0AYk{XH$4kz=3D9ST*r^40m_+M7q`Z4
> zNQSAwN@whKjp9Mn=3DB61q)bFb3r~~aBqTHjt5nW;OXs!>n5W8KU5_`CR1FNg)enhs=3D
> z;*NUbZf}1+25;J9Gt|}4dC1&?R2&*)j3@&}3LkJURmh(XZPmKp6;D6J4Ga)+cgAsV
> zU)xVV8QDj`@wb`%24m4T7Qkxy>NWweepC)$Hs)}-tH)ixY#>3+utv*II1h0H%HOQ-
> zd`?IxBf$~0O*cn>g*pdXyJMclyeC>WQ*z5J1W|wUO<8du5#b7!kqCusA(M|kk>Dt0
> zbBIUCZmrFQO6)d&0}qLn?HpXV0b}+RAIo{~yF=3D4SnfJrtWxmJr6U+OM4%9X`Sibhy
> zAgd!I$bOJ?1rE=3DkIjr^4O~{yo1W>8oN6n9li*&C+J5k9cpEYmqT`K-ic>wJZEl`iq
> z^b>zZC8tNlg)un~$bb^oAkaz&lisGG23p2^bXI=3Dn*;{J$pWZV&xpgsiz>sU9p8sLM
> zeAvsL+@zGgX{)bC30-~M(F2rbHXVPts!RC*tQGIb_sri#1->tB`%SUF9jARbIr-De
> z-nQqeiBgKA_$IM;G%q3%?nG&XW+Jk#1g3ww{0Hr&_t;fV=3DQOdO(=3DZi)La4?PpKNr{
> zwd1-kclCuZAnRO%U?i$zp*JQuQusJG;h>pvN`|I_?j3Ls8pD_nxc9yEX4ZBL`ahKN
> z?!E()?L-HwP_FOHW?yjOJ1_KcUbX~mJpc(v@fcgwQ+6U3_-U%V`n4I82a*#P6H9-2
> z1U#u=3Dj1EW#NislalB7rd5&%hiHRqjZw)|!+6%%haw<lA`%9a9l^Qal{uBs}-dZQeo
> z^K7eWz&}VD2%zrUvO8!ZkSV&Uxy>LV5Rv*U(nXzKNq_3=3D)$2}d$N~UL4mF?<dTb7W
> z>}pLl{L)}-eoq<_GnE)lt)(}$3nYI<vh~)5D3|A-%f}_+gwFxow-xXo3cKpoGao;S
> z8ZMG=3D^*K6L3C4TqUoOV3$eXeR_nY^2{by_mezLNKkt`uG_%D^+U<;eEqHvrO@Bmjh
> zV(7y~Y>xrc)o};ZideD&6`%u+6h92N;ArHe2)wClbdmeeB!eo1wQX_4eFlF4Tn!$S
> zDj-^|4QMclR8%F94&0sU^A{J4WXWNnnZ%-gH{S}yWq$FC0;O1@_hoio1wRDgkI=3Db>
> zb!E?K!+%ZkZF2`^0oM%zTe6a>p~#|2;u6G_IL_>4K=3DaDtSL|Rdh(BwZ`7+d@NO$ji
> zn)XTf77);Vdf1sOc{SXqu3&$I6wuMR=3D!|Zdn<pSE=3Dqi_GOCdsRrZMz>?1facA;0GL
> z@utjO?Q2DiV&|w(XN0jT+a~j*=3DFWCZ1}GL<xRdY3IRQq@q~SM-7zYE?H*&j%3xDSc
> zw=3DthzfR?KBNgfQccxd?u&G=3DSmQlcMZ@^C?5ocBB{vJn1I2<+F$qo{wkt)H9Zgq$}>
> z3?u0Y9sPwZpHYshR@f4B(G9WiGsA(-lJPfI1PGQgUjivG*q&!@u7+1kM(O?AE6D$)
> zj~ptt@&)Qo)fE-{AL5Mza`5Un?GMezkJG%>&XsF42J07@i`=3Df~2YPYpELxIlv!^QP
> zhp!SM7h<yG0c>|Nh!1~l*2%LUi&UNJyBW*UK15l;fCiV9Zq{*|cLQ8__)v}lhGe{Z
> z;5xiBKtug=3Dh2&fn?0i7UpoVYN18Fr_yB3>+(LM(`*Qa~_4gfVingfi^|FaWP4<VZ&
> zPg8h3wD?(6cpuRpT%M&Z&$LUrS<AYzAsw8CVYFisacU9n`|W>%UP)g`lGmrm6Nnd|
> zsMZMW)#@k;CKgTw4~mRSK{ge)F_n{t7rJSjOdJD48eVoR02!}wa65IWTyF04l&%tt
> zK*bbA{$5@giJh<Wb!!_)T`GiMqe$hh-KLK|@KoVwyv#mX3UH|KPy(w~QO*@u=3D`Al`
> zfDoFM0p7lW<dT1%Y45gsey?IPVPz{c!{`wdnHF4#ybT7R!;22kljt&=3Dldw#<e-Qzi
> z#a-x>G(|a=3D&9%2(r&o`egTF$NQ&XD+xJnDZ@yJoe;|(O8afkI(C9xp%5Rj&or?a)B
> zgky%GvmdZGT=3D>C2k;TBp&K(qBSV#!f%#Js6aNi;(0>*#Y$m+3a?i46U(VTM2$!5t>
> zl14BG9U7;i9rMi|cj|~Bnf5PJS^>P2gl@}FwP^3nDu*aHsYYGXu*?C8l<2c?{`+tq
> zr-NMeP&oY3jGAEFq=3D`Z-BpF>5i+3GP&*gmQSc6<#R@?Uvm_`oe11S7O`1QxB0
> z3?e5GEs}pRnC+Kco&e7@GR#z0U68*Vsc0?vB!xu-`Y0XEg}=3D1b6mzL*!r4L3&}#^G
> zd>>$RfG{pzJA^=3D^Y9e-V5mZRuSOm1aTxC#Oy{3u!g(U}@;p*2B0-N*<D{FAZ^3*EV
> z_hrd25~^fz%X=3D@}!(4AU0!bI0%@9hf$*6khbWndV_F<IO0Mi#03onMwfdZ=3Do@HEkc
> zwf+ExRVsR%pCaMm)bIf-v|}!ZCm6z?=3D;LtPd!qu$_z)|DT_2+m6>7q6Mg!Yaoh;A5
> zD^(|&x+C(lMY@2)P4H^c`r3KQ2+o3%I0%sH5flFl_o^v4a1SG{*?{EnrMF1K$(t&8
> z1=3DoK}pI=3D->gKkk1QTiEMxFCNd^ykpWCc`YKIm*naH>nv#ljR}1Tsm~1tuNOp=3DGjWx
> zQX}~PPn7xxcua^>Wf=3D8rwCMXU9%)^XPKo-m;=3D-^HHI)H5?;_6U)e9<d7+|<O2Q0yP
> zIeJ2;5U#$2?Ld@L-H+k%$VIE@!u+X%fBb(hiJM%f$zu3XO9yjB{GcoV7<@ijRE~1o
> z&E)=3Dzy|u5Y;5>0e=3DHmT-4GaXQhfu^zg#cz9?(L&?Tr-CW-)QlRwu0`Mv*UVg3Nygd
> zB-lMwk9Ywrxb~#cidAs*^K9rF8us90wFp?q!`TKi*5FhlX;BC~HyiV*VnmE}@=3DkwF
> z=3DmqWn1m4ImD)O`To3lV4yNv@5I^%-A0k24s)Qw|MP#hhRc9u!N!gT1DQ|%4T>y6PD
> z=3D#GpeRRFhs#YGhA$oz2Wu+EtEwg$aK*(*;KF~MtMNk{zS7MvtEsK7o6{0~V+XEfX?
> z2jzl?!P=3D@##O&{pWW;E3@O>B~C82*!B9YVjX;6jCZk>hPXYoIROfPDn)IBgIQJ*NR
> za1Pf_OHI?06M*$SWyyG)?@S!RnzIK@aODvXs3Gj`i8=3DD?HLhph>CRZ1@qhK*Wt6VT
> zm2m*Lbw_#v-aI`^qKpb$$4HHz1xKg+_#rosKVpILW<*6!dT<yjTR6Y}f60INgUM!v
> zZyD?ROOwj0V+txg`CY2L#d>ri1z|>;yLI9<TE_Xpl@_sgB+|G8HxKou`_#Xpf5vNy
> z4I)BCa@W$EyX&Fr+SWgV5*cbAJQl>-!y}gD0#Nou0ijv^E@F;{si{;JyW{%a5s2m+
> z2|dLVTZ&*zx{p2Bt$WsP?zDdh;ceuSLpZgWo+CzhjrV-rk=3D~Z5V*$JMZyAuGx+dX`
> zoy=3DRLZv&MdU8q|-{hs+Y0!_Vkc$)zgGrY@uPvcP6!rX0qJitkvx&Ix>=3D+KWqx8;7X
> zLW(*&J9I2ZI*Y+dBC!`qR=3DkheC5OUTFFd-S{!?H!@pgHS;39?X+ctmTNconH_4?R}
> zN%Cqf@dQGefTdqJB16_DxZL2o1Rvod<Al3GRvNsTRF*!~#Ksyzi4&4G2~>ayc(aie
> zuLTSTDtk1uYx*;MPZreT1eaaZ8tn)hJJlfNb<lOLl+YNy!4<|^OJkWb;m6Vis49KN
> zvQ|+oRX=3DBWw3to3yrF+mJVxXeF#vtk)J&s5O+`m(VJaK%h7xnaf)-+lO34QgQxtnZ
> zf4lospC`A&L4y6jaV(KX0YB+%%Frq64L`scnufM{FL}PjK*f&S=3DG3~l1^^`Lx@Q1k
> zS3XH*Mb&yjBWvEvmSswU&*3k-<;7~hbAvGFHG|JKeq3wO?m&N_IxSoRlpYF+fh$AN
> z`=3Dph?^K<E!Z*s)SO6mwOgxHVqP0&ZJ?JIfBC9av@Y5yp$qGhFJ5^n3ds&BHLBp=3DF~
> z)*I66=3D?Im*dgX$obV3Z-@j91ChKUsLgT?U`!z>Q1pcElo$}dhDJ+hekB@3<Y1D7<~
> zQOgA+t|hH^1*?BmmJ65+`7~Srm$U>KNIH5tGSUX+*SWE#!|9F5Xgq09d$UODc&pH)
> zLhb9m-fH4@g>3t-@$Bfv*OIM0fDPh!#`n>!LN;YCesq>@71PS%V{Cv<{iO!Ta*r(*
> zfLn1cJy=3De%iNgBynK0_X=3DOb%Il&2{$-z=3D_+AsAcbeX)O`qxrD_r*yZ~;zqu;x!&Wr
> z>3XmWIlq@PD^C&-M*f@tlce%2fM^5e;cwqzm$gh~y8+;Yy}U&a?1P0V%@T%6IXke0
> zSk2Vl?6`UpXMyVrTYjE*?0pV|{%!<^z6SH-%$2ZufdY25L(!ZB;ig@>aTGjN*DLR5
> zb-1x1rL=3D#sAio8aCoB5I#nU(}`6`P78F#iUwN3IevQ&o<WBOlFyd>3#EDMevR<Y8^
> zfYhl8(s}uZ^suHUKPA|lW6hmqjx27kmQ&D4-?~Ga8)AdUOnmJ&L+#=3D+-r4=3D}z5%33
> z4aeZJLK-)fRi(wP*i=3DXm4y_ft&Wr)|*O!A%^-+J2(pLqnPk|V}I{0FW2a&pNZ2?+H
> z`p@iFsp-3Rrp?t&X@%@^)UwrbT+kB1S5x_orM$q-h(}6+He+c20!ciBklR$pFpBwi
> zaoZJ^{ys2rg(nile-9vF0NNV;M_vM0C5Q3hK=3Df3{6}mQ;TLbFxW>F#Wy^()=3DC%lO)
> z|8##APHI<*9_Q$b?K}CN5Y9HxD?G51NeN5rJ{a$b?)aI!ZpUH+)uw!?WH#_5utLbJ
> z(i^_QDA8u?X2IL&<CYM({Tn9>dlb^UH|)>x&*%Cf?OZW;VVw&>ZQ`@F?R{YZtdMq6
> zo{_-sd&4q6a6S;sk#8_IS-~wGt~cE)gr0xu^*8|XLAuQ^Q7c_Td(izN!N1LQD+X<7
> z{G7~Uopy++ASiT=3Dn^M`ztn8gJnqR`IvBPGrTxM$>Ca$L_`fg5YL8fr)&PDA`dy?%-
> zc>ztWF6+57^9&Hg@r0%S9RrXHCZEIYmpU6E$^%<q1U2Y)6<EaEisZx$L^hYo*_eMR
> z358&5OjMcV<;S4lo}VSU`6?bcxF_3(6i(awuL!ulkcM0DWu;rRj}cs_1rHZZuR4c&
> zC2dUqXfQU}omf$uUGU*7*io*K#suG7+vq`XfZEJ9b%-{09Zd0R2peQ-;!Fb^YIPFj
> zxgbIIdMK97eylv;<l9$MxycPa<W_&a6kssgil5^wRP6`4htwQ;uKg-_Oy&%Iz$2rE
> z_8q_f$loI~dB+gMxSGOR^b!U#;1O*F2Wh_vXY!VP898zXU47chbQ6mOcUbKdon}_J
> z;hLsTt($l^)&iCIyE$`DVBuRvR)uP#8c#BrN}z1r2z(Q(yFB0mWoeSZ&uM>>qf&h9
> z6r`i~OtO;6aBAeLAFDN__#6}ffN&kRKmT#Y@e7JD;JSj16#}}TI17O?Vx-TAZJGuH
> zFG`JQ<}a-;++Z@RM~ieV-co|&#y$Ny`lg#1b4j>rzRS%7c#Bn#B{b_7ZMx$j&bU$#
> zwimD}wgoa6^<(Z(Qm(jFw;g}#d9%EcH3{D@f!c+Vi7{A=3DI?h0lopJ;~TCXC^L@fH$
> zN40I$Be-(7$zindQjq3y?Xe<dYfx*PTmO<Tnl+QXMz?krl62@%8-p`0XtBzsWg{s~
> zIeBS6^LYUP(~Nk}){&?Ow172e5F*gUUgY59beg{yQ$7bq;}uF=3D7DRv0OD!bev4&xd
> zMIdR(rfTW!*#(_)ZCviM)d}95t5Flc%2~g=3D(~=3Djh*z&a<y5!V)y?Vr$q6;e*)+g5D
> zq>L$AsD6+#i+A&eFn3Lg)aq<$`{4?T^L=3Dy$gsbGeW|b#2<})LLiV#e;guIy9Q#Q|+
> zY^xCuiAfQot{=3D%N(kFi=3Dx((f(rm)Wvq99kYhA(2E7kwE>%>uX=3D_OH3HbbF2Fv3Tna
> zIJK5Iyj;kMXJgB_;&6GI%wL7?KlgJ^DK#PKk&_x8hjmG61PsS{S5`jiojeiiGvW*A
> zvQmhkUyFB8qx=3D8A8acH-#gd3TFmA0)2<H<Lqf()9?sU*w%CmnV$fBoF+$lK6$Ae?b
> zcJ7kQxQ52aH)b*|`UT>rEIysg(dA3x2(N1_I8B`R5`U(Qb<pd}iWb^fli`jQ+FY>B
> zQo&0^%3@{M?q7{df0`m{EW8{g4%+h=3DOr=3DQnxpdpLeR?6cif9T=3D*9%*Vs(OF;yM)wt
> z>*{UaPGUz0)Zc&kk!P(uiKly7n!Yf=3DgC?N*dnu@qa$boV{)2N9+EDKc$KU&!tXC}l
> z``NdWYXs=3DqU>S>50K#(GXD8}9G#5JvphaEx^&cI+46_B1#)l~DGtE1JFg>Rrc<YVt
> z?UqhhK3W>qQ<q{v$A~}{{CfE7BrSKU{e(YH#`O69Z8m>;WMi_vw{x2gt}64rdCd-^
> zzb8htvKS7dy?#<}I&vh=3DGCF#HW_DY{6x0eDHH0wVc~Ytz<m<%5Du<|{H5dc^F=3Dgr~
> z{Rw6m>Oj!3u&%&S_&~KXbWnS+TWL3PSVV?&T2ekEVLmdf$_Pl;=3Dv05oV%#JMeDM`w
> z<Y8f*=3DnH>p3)VU1z^%qwegeI*t?6I0WVe-M+s4YFoS6cAFRGuE?;cjswHolh-K1em
> zyer}T;*86KCd<~Uy?H<6sm>O*gCA=3D^6E8XG_;Iy!UL)rAGl*jca&Cv;jTE^C%wt*#
> z5CuQXrx!m3b|^LU1oAmVJ(5$IJ`*1MrEd3Jq)>kl%tPkT3Lm#H(1Gpw<AE0UDq4(k
> zu(KEqmDL>8x^=3DehM-#sn$G?~h|F~$a7W=3DJfgYd#T2KQsnFdV+lKHgg^u)`_BQ~$T=3D
> z7`wkq^tjHvmCsAcbE7{`?Q|eW1e~6KdzGD%_6^(U1k&@{ZzT79LGZBaPb3~%oH~|2
> z;*Wnt219S7lC7oCM>l<<_C_Rv*u-rF!+!*qNyO+KLtUsrc3OGXrQ^hWk}>1UPoS;n
> z@)_^3<ED;nc=3D#IoTVBJ@w;V$}(+^>msess{03nS5GDAf+H^Mw_6pmFDug>lMAn{7G
> zb`wPV9Ua1d?H!>ai_wHANf-Jh(kmTaa|nOf`G@+4;D`XuxIRoXa6@Xiz8@9g&E+~N
> znIqTfqp{3Yg59WN$!>Ylbs5r&r~*=3DR!PFyrEmF1mpmpKMX`&K-1li!kETzxD;EiNz
> ze11gOp1PrFfLWB7;T$RW(E~_%(iL6f!*+mTY(=3D<P$S(v1&SAcjuO-+K5WW1cX7zt9
> zbPDHlYv{-hb2Rr}_y<47FY0757?#3vjruvcQVXl_+Np}j&l=3DZJtFS;7e)Y1}=3Dp=3DM`
> zjV2}>PUzVHR_{1w1^0vD-L?%vOMXAIMNb`_vXI-n+UL|X<;G8?_JjW38_dl(XtLTs
> z329*GeOi)Ndl}MYK7l}gqjd*1+#P=3D}Q*56rNO?i1D>t=3DG2mxF1^wPFnpa&AWZB%ap
> zlGNuhaw>SzyAJ+13PU{4{OA@fGHuor<H}1w!lQmmxAZO9wH?6wgb4tGcFpc(K}Ehf
> zLYdAo`0gerk46A?1mX?ge+G|6D8XxPXYb+S3OAzh_FdBGLMWP}!7P6yWXgX))|^vo
> z31G97vf@WNCwxB-!4YecllOgXk2&qqt44L3mxcelFeGP@zij=3DF404ld#?zD`P+EN5
> zKylrHM&vF-D<OHJ=3DNUF;sAZy26K~>NZ@Xhc`%nKhH@02{^T7L4%ER4(1BpqcN#<(M
> zAgwmoeXzyaeA!MTavpl8#2tTXhZIu0uG-ZcYbo6K-uX{5&hCOU<razH5rhFuD>-2)
> zE;JmH#;ny!ke@eqIMYpe&YaH6SL;!QG&#pqLewRMAamerDo+TSD4eyu2mWkEgp1(K
> zg*=3D}%CIB~o`n*vot?)!qST-)Q)8_W+0HZq@2Ar&>f(#c&9q_gTjdFh+JgGS|3n|};
> z&Zg~Ld`RCDRL*cnY}K89<pnlB#3ZI))2Wop8NZOLZF(@e0piguG-7N$BYGjB9#_L2
> z%|Yq4)wA(~a9nnWENKtQ)-R)9zX*C9wK-HhG&_OZ+MdsEnIr+6=3D+50G444#<p^no&
> zTY|YBF}+T{!}`9tb>M#lT|e<a@4C*d<|>HpNKyKgp|9y!og+l3)q|_pW|%fN=3D5|04
> zm(ZMw#`L-{xh#oNs{!Ph#RS{UuG!p3c~pRgWK6#)BX>LPz15OzAqsaec-oTu;Q>l>
> zxpLl}{~Q(<=3DI+CkUAd(Rs1jih(}L*4>mhlsI4~Jv)JZf%5zv3SMYPQ8eLnJcJIZ;`
> zIy5G`bcr#37P=3Djks*e<E2p{c(UR)~y%|;CsYWO&dP>^dwul}FcRsoel#tDltor>Qr
> z0JJneqx9`fk*=3D?!WOeLbZ-Q*b7x2r<T;b<`O|jo6|HfN;?TP&f+Eg+!P|lX%>;KRo
> zzmFO_Ap^fZB9DI%i^HkO^i!TbN+=3DIuYX!fage?fT$7)p-_*^ib0Qo~GDBXU`p4}1~
> z<TPclbnZUc`IM`Nj%~Gd;II4n;lXPsIKz$3+tGhQ<Ua<`$nLy8x}z3=3DfMX}&X&>g%
> zKGA6^hyX`ekgRSHgUuEUn5<!A5V?#$6=3Dq8HIP0|_zHfg#7yf$56#!rplI4Yo$MQhm
> zC<^6N2tHFO7jOxvxo6wcD!MyaOM<x`cs|P2fiiOHm?Q)w8nDFAMUSJ7B#$rJqkDkT
> z(&&0Qmpi1i#^+M(=3DnzGOs)S)q2xLJ)k@!|hUV9hgOsGM7)&|%5Mm|^U!#`PuJPdYL
> zQL>Q{>+yf{k7XDk1Vx8wH<qrGXEPnhn-fmfmzNq(*ogEbu5`FSCK{C!JT3B^dCSEd
> z-k`b!vQeBopOsx5!fn$EvKzxOMZ6XRcD<BDPcgNrgn$(U%5*a^FtI_PX5_V}$w|v)
> z{0Y9(d5BVN>)!bD>i}3SMZE0V14@X?iTzN{b0dG7O&m|u(Kmu7wF*|=3DC^2TQ-zdM=3D
> zc|-r55(S&|;*46mgNgEJIf{Z^yCV%}12B<eiq)a|phz_DCJ!Is%~R~M`efVa1UUj)
> zCzU*?`B#R~!X28xp)YU1y|Feg(rAV3{qE*4eO#cqmNUP@w4{tqSsset*G3icML4F8
> z*;;?lyN{Zcio1l$N6Rg5xc$re!Z}sM)cyW2a7&CyA?Wm51$`sc^Nhre`@GBLA99xO
> z7kDI6J@|8T%(<M?ME<kU=3DM8VMeq$1k8_4K5<T)?S(F2Uc&0&{oAu|iJe~2su5`esa
> zDp?Y;=3D*-5IV96Tfvc2HsHt~S=3DQBrVg<9>fryL4Z|RfHwv2#{cpgKY^wUPyI%Cn@$o
> zJ9rZn=3DK@_*ASq@WIChGGqWBlq6-d60+^HwCQvW(NnN=3DS(J@aVN3{)x{is4Jq?VhPz
> zfR^0iCYuRYx4@dE-=3D`^w1GUnE?f3e2wjasI!m!4-NDZIgn9tP)`u(3954>9~-T;4M
> zZ&?Z642E2tX8$4!uSa%(?E^7hy1*x}1t(|ivsBvY8)R#8$|bEn?-%qHc9qh8Bx{5u
> z0S+(mx?@dT0!+hJg`Gwk3~#S}@k_D!w+n#sfv@vemgJDYju+Prt^KHDbSJ@Ef5%Pb
> zvl3~#2z_AtW2=3D+g<L;tv?M%XWX_9}io$drDwcibbKrkiOZt@RxD#SDNZPK&y7hhkD
> zt<t2Y1QQBy<%Cnh`-qeLF>V#i)*>J!aH@!>r#qhMO)Qan$3v~Mskg2HOAt_n4ZoK7
> z<G2r+h+C8F9Ub-HkAggWm@6EZ)bF!ln`UoHoT^z$nKhiyRj}GDZP>DU^e}&p@!;+^
> zlC^|XTmkN|d6^6oYMqGrEiy#kRkt$Y<cxA2Ixa_%0;ib|TBX9xeiv$sDA90r@RPAo
> z$()9}|E$b6X?qnYT7}Xa1B1$V`u1?SI&Py|hbq#j&-4R<8IfD~rrJbYmtIv6J>ygs
> z>i99P&>8YWY{}^Sb@=3DKOP|<(ZGhQ0HHJ+hd=3D1K#i0oQCfOhNYiOZ^uWQ)k86N`R~A
> z*jnsn1<m|Ga^jX0uBV!zN~|jQ1rk;0?rxlj^ssDvCKA6o<5h(75Q{#|?aVyvdVKtJ
> zibWlMIW`cT=3Dbh#;baX1R`v*<CSmECU5og%1#1yqBZx<=3D_XubNMCE<Tq&4g#WL8&K&
> zS=3DJ4j(6fyAcci(qOLV24x6jby{#-i1xoxm*wkgPgj`+{KDK3xWi<QB8Qa(R%v5x}S
> z#V4f*YhOPM=3DR@vts)fFQ=3D&wgw1*U;;c~|$9js9xmd^o`w2UB=3D7f{vVjGdyV_^9{|2
> zOLaD!J@7A+?=3DY>Y+R}ech(8NI@|sb2NMKfRgKgHd$o@Dyxrn=3D0rv=3D;cw)E*6f2334
> z&Y6zjvpjI(G(3i@p$MvG4Pn6zFED2`s)2J3kuSL(SN^i}LG?*sQ5dv)Vm}?`z0`>A
> z)b6XbM#yd=3DSm_6cW0}ZE{A_9g+e$p8HHwsUJuaK@svxWFg_(c;Opl{~vz{UD>vPpm
> zC)yxwk&t3*YJw5{E#%|zacBZf$&a1ht950pMBHCYftT?ff{TL1RWd^sg}Exw00zkF
> zK;0H^<CUJ$;;RiYk?l-F&j3KNnqDO_R)H4$j_hZ~DUVP-rhuU8mK=3DK5_jBKfufUu}
> zW7&_Kks7hlSn7YFabx=3D_VO~rRCGYhQn2?_Aw_D;HV4N!g0$A<sL21Z<Shu|RXsH5_
> zCAQMw?Bjb+g6_-zXvA?)$D=3DARB7R`7l0h^xi_!*u+-O+un!l3UUB$3q93l`0;j9ym
> zFluDo%ZKxf(x^jVk>)K^T?nTkO8(I3Ht#i}llet7b&!AKbf=3DdZ_XS5ki~76i$h$g*
> zxO<bTAbSQH7u>WZ0(*q&v_RE@0hb=3D1(K`A@&I38B+cL6^dcBEKgbC{obASiKvQS3w
> zLWp&zG02>M=3D&$gM!OfU&VZo{cVW1z012ml%u6v{{C_JcdeI;0SxMnW))g#e_h2aIA
> za3;h=3D$5wyDvo4_(uEB(0ReWShP7yR~R=3DhkF$YwLK8>m@##w1>ug6}ca?Lak7k|AF$
> z<D69t3p19FELuU()4cuVB=3Dlg*Os<t}EmzBL;Cd}JGXF5b)N}m~Cni2<wxB?ESF2EU
> z=3D<idy?nkJ;3v{n%|Ab2Xb%qJOt?zpMgZ`HXj{blB0H65*Or4lr!ex7Rkpn!dzDa%<
> zZUFahM#>HLlKZkCzr4oobs;ZmwNobUKR`t<Ui6K>{T1OtZ}+70B#zAP7$4KZ{1E*)
> zt<<RzalQ>HR$CCKJLyvEIcwXxHx@D?ET$jhW_`8~mS9o5FGr#ndq6?ON}itQZOZf4
> z2$p}RgEX-rNtsZxPY)ul%Vw4^&6^^g{)D(X>1u?06UPLD(FD&SD|}o06~&ma6w%s1
> zkrnq&i%0?`EX@8)B2*09$3MKq>~BT##ar!IlVcF=3Daxz0UppJq(XY(~OB(UZeqdK$Z
> z07vZr4l`~}!pKFS5iNX&VB?eJ2F33=3D1P*`f6ut-grQA|FN?ZM%jO?g~Et1GDFK7O<
> zfdoJQkyN&GHk&jdhCnfmc~c?l40$nP%EH?=3D0-tC6?<a8&pV{{-^wngc%JRuaspUba
> zB8y{z(_(cps<FjCC9gX&w`?USbt)DZMo`)RIeeK#6J&J9ol$vzk4mYkkG?Rv`8t2g
> zV#)vBWhH59$aKoPQgbkeY{Eo0Pe~lbz`JPP^Xn{MV$4psWLAoywLY((^>`N#hfY#`
> zfwZv3UMx2>&D3)V#oQnd$Y0Zn=3Drlg(e@}Ca@lvMUt9<rhF~X$ZXD$lwrs^ubW|yUQ
> zoSKAlr(GZG(`zgM?34hK>p_#rj@N&p$%#Jv%_Ec^mkGJIu%^)4SV?;FMz_68`6uM$
> z0g+3jVN7^S0>Fx!u?a6J0nSJ_bNey@;9l0_Em{<f&X8<LKIql~z+kDT&0!z!3^L*D
> z-Y8n^XE^pK(g(bAu3$`I{4t2Z$X1rC??kTnUh(4%JE5kOEOuKkr9-nB)4+c_=3DQa}1
> z;9-=3DWc+Tq~pJiKm8Ntjg9N=3DiX1vg614#&>k>Uxelqqr^!)34Em4gy`_eOs$-8yHL^
> zZ^w*|G?u<{DOaa-M<sHrD;7%D^s87XzUKfM@l2|=3DqD$+IsL<me7<=3DK~hA8F~&+^uS
> z?8UjTb(YnT|C%9hhm)CHH#L6_lNaqC3uR!BFwL$79(B47*28suKXCXNX5zNX*_q9x
> z!avN}oLk)gq|M=3D7F%2+a%qw@vt(Raxkm#)e8u5zgEziBh%h`t{8)&Q|1sQa1+C|WK
> zh3QY{>HGkkH$M4=3DWO-bksW7d<|Fx6vjd$QnSYFT#ByI5f*QZe)fRlf){)z&p9dKRr
> z1CAWr!STZB1Uc4^u~NOBO7tVwgxL=3DE-E1@~N?M0no!WqHI0wlV`HSs{rY@%ULM8GZ
> zo5iQo=3D2nY@t#g9>5Hxb$Xxzzmx2ur5+~^vax`u+}BUcw}a|c3Bfo@H+>HRv}KA&El
> zvnR{YHfipH`zG@AY!QFg#uDle_14A0kZxNAWtd1-vkY-v*)5e2#uflV)yV3D2p}n7
> z8Xv|44@S+TthFxTj1`^l-7Y3U9w;GTWZL-&%#tyKqNxnnn5VdDR5uFGHINm30^W6t
> zB4#axKjg*tiU%b7g*wl)n;<jXx*|W%w{+y~XpT$Wsz@9Wfh&JLn;fIk@i=3D{}(Cx$&
> zzIT`=3DJe5U1m?P_}SEz1h;6PEKBs20z12n9`tj+a|1#@oo*Cvbq0il~{!Jz1B@2*z!
> zYS|zu)|2*?oD8qw3xpA01ONnT0&5Fe`)YeHZ$IY@7lPDF2URRDd;n-(V%D{ux4cBy
> zRg;zw4Vw>Pkd1#}hDd!66HQJ0&)woqP1?W*fRXb3<;!}q%T}w|fn|GXS*OR@!mxQ6
> zxxelwj?x{ENbmO63;v`nY*_}_EFEh|in!9$%IH4bajL(7d(JJyeCl!<I25wBx@{4P
> z`<%#Kr=3DJxXBY`d-?yMaQRJ|QOjT6n9d#r2lRro~N*cg9;3L(t%I?QW}@@a*N->{{j
> zz%;}7_QnXuCYqM*!gJWO5(mr2-=3D)2Ul)r_<s8BA!Y!ip`698M?N2FeL<{F)&Y33CH
> z=3D!HkeUT9z1R2R&Q3}iUZOD0*LmU!<s<t*Ziql}~${7z#qjp1Ah2QGQp$~2>oJ#p`n
> z%I+jyZAO2l0J|Me%vh~>=3Dzdvv+AuuQZ6rr^FB0($Sxe^I(SSMWq|ZaWBOGiDA-YA-
> zg_{aNKyngp9f`9<c1ZF|2~<Qlzb)LXT4*zMSBcNX{jCO`{vGgO`N2rrG5ZEU_y}D)
> zk+KSF9rux~K4rE0_(1!lT;H)_sRO|+tEIpL-$sAdowH-Muv!g!o-D)^>0G;~4i|0Q
> z01{yZ(}sc?{OR8m5k23itgp1&m15Xw!6zlK;4?$-Qfl0Q6%_~v(w%Fp3;@vGRcBEu
> z5_;Kw!7HQ}Qr0F#*wSu1{9L??v78@_1*h{~0>GeLl*R-tx0(kBLs~ll1~Q=3DEw{~91
> z%@}{{>EwkFho2ciV1HqTlp|K+^J~C7Tu`MBF%mZeBJCWhl7_#xZsCtGRF`nT?+}v<
> z@b_lPAXFCQ?A~e$B>w)7i>7A(!$TLw2JoTZG=3D^L82(6>&iy}-mOLt!1&lC7gEB@(V
> znegLpX}3l6`Yvp@@AnimN1q4z36Aa)1lfO5SEg+n<?7yH*^R>NxVGh}V)V#+!9{@r
> zmi2(4NHLgIGYa%u$Jyx&Xrwh-Q{fJtUMS??Z(C03|B?jrtI4~OV^Vxy!u5tO`?!2o
> z39lc90m>P(NSA>aN($e}@P70ns|uBRR`CkwrF7{EH1Am=3D>JqE#a&fl?KM||INk@NA
> z0~aR{;E+4|Oid1>IiCeMkSI%N<ZfC9A2>?XOZzuj`enN5X-_HU#fx#{ya}3+>LLjG
> zL0f)sWf{+R(fz|_9Kd|zn+8HaqwVTDH?0jJd>debVh96M1jflcz?*^S+kHN|&QhRU
> zLZ@25llGC8O>t9{eLQfo8#*iY)j5Cppfb|h_TB#y`y6Ef{XewI6XS_^x71~py8<ao
> zQ%gdg#YwIcv^2a*&MH~Tz35s(k;QvP2~gs+!2CYp;IKjXWvE=3D|T^J?7@48C0Wd0{6
> zOmd9jCQ&VtE~Cul{A85}wwwH6l~6@IB~FOOOArN%23O1K%wrt%VgSVBOEZ6ArLs55
> z>J0Gf!S6cMd8LabkrGW9$vuOMvlsG~M7t;i+m81CW4Q=3Dh1284MRRR=3D>Z44N;P<1jn
> zi`moJW2|}X9Y!QPw^(tXZ)Q!Q&oCo>j<s_go5R~Uq52R7^&YIJm}BMH2+&r?_$CYT
> zdhpq`VY$b3S;%332S!LR^!I<uhv(eMR9Mr?$O+spFRNk>;wW?j0FZyI3jxlI)&FK;
> zS>{&%HsRdmm<IR!e>~xnXh^ERdq;X`Iw_fJkWj&WO}y-DZ9+J&f@vIRyYUt++{tOc
> zz!XTef2_*EUM#CMnOghRWGljheLYD%4D?K++oLH=3DG;t!##=3D&+)<gI`Bj?gjz14>tL
> zBRF{6Q@lvt<2PiQD#i><-urLgPr=3D36@m4<s4GKcA)<I?LxhuI(jx$h)mWCv{l~v34
> zTDE`g3B7m_)v_d?D&Z3vZE*`UadRG=3D?Yl4X9_`5!gR-8q{c_kAC9op@<gcYotF6*5
> zL5}lBMoD$5AMzM}hd_UhNt~h%Q%1$KZzESM7da{`ow<0v#hS+%6lVu>H5=3Dy^g^VBw
> zMtxjT>r1I9s}R~Hg$xV|(U{r>-q;YTo$_Zj^n|~?-NB$r6yQ|}>{oYffP>}iE5Hi@
> z^T{_pcLW_(nls6rUQxks!3e*hV}9oDfUBV@E$l!z_Zcr}C~<%K><9SxP}yxru0czP
> zkfqDDDzDbco?VuW+Wf65B*fd7t^%j*CzMKFs>xB{eP>jYl@ns&(n!B6q;PM)TlH|;
> z0IJ5)toH5XZ<|{;MV^5^MPwY-d7A_?it-<FV!A+&oZTX}1gU0ea`k{!<Ksc2*D?Oq
> z1NkRmYCu%9GHHJ*d3Wq^nM0rSn{AU35Fb8$^u_R8dVl^I$`Pu|U}~`r`4F(Shk#;L
> zgRr~8V^2Yr`{C)Onx)>Wf<H|-{8yNY_3jpTcu3JuwzisKV{Z-K+rLks9-n3*m5k2r
> z5EHF<WcVrqAx+n=3D*U>YbrkQ#LpO&-7N@{+7GbVljwaI^HAw-KIoV9PHQR|*h-(urt
> zvU|!zVa(<Qb>NEHf)zhRk(`h5YX=3Dx-9X$R&Dwly7c1h+`co^`)cZKj-R`Y_CWkRl1
> zY=3D=3Dw|{jFo$Bnc9~h!YlIie?Su1s`y9r~(1^paa6(ym1cjDjs~9EhPo(dEmAain%^7
> z8g)6;b<BTPG7$<YOui!C@xecUP3(wCq)*Ne0$FOw-|o0aV?Ny_B7TB&v6})Uc9V``
> zO{THeKc)@>Btygth!Hj+>SHQA<*L&XiW>!GmfJBB)z;FQ7CDg(!ykgC$PJ#seFvY1
> z%jICmH{k7bZb5bmssf_)_VfYanBxa73`;isNA!P)h9_x{%gyCq8d?%MBuUPq^Q%Zs
> ziG_}^!OC?`-Q1wVh~{8t1Cd+dPFjYbd?}MN{Y=3DS9<GhBJ4|uJATo*6L0uUDSMP*()
> z%TBR6mnMh-2zXem5B!BEKvV0N65tHJH9tP#vzB?7#uI40E;o$Jk1}F+OIK&+2C#|^
> z219>gxFQfWWNBCY`FVxT;<~wsOr`r@?0S9*&6tj4g*6;-L%8j+zL_~SbH3Sq0x2HS
> zfva@R1!zh^k%VFX81f)xOv(VF9VD`I&f0XW`L1O=3DeS_A`9tsZ*(?}RrojlIhmyf`x
> zDv;gf*3&AObbww}dwe^NQ@sTnaqa)r%}amhi{$kx#8y#^Ec*E43~EDD$2Yi@v)I+e
> z5<T&{#8Be0)aXqMbWe+4T>BBBG0YQchud=3Dqx14mJZfVbk>eP)}`1~FYrlC&iT{5D*
> zeC$)|OFnRB2QQsvZJ)elFwhn;HiwX2)0YpJ5R__Xij`tJa^tz2Clv1UT~ZMj9T<O^
> zQD{Bvv20LIGq$C4F+$gdlq})0iD}G+LSj@bzkr!cs=3D`kWa!5pi=3D~>HO!h8@2;<>4K
> z{52CnyDoX&*34t2vBI!w*MV6Tr3HQCD-AWKMDSLm4ZGC1482UtTwk&dpg*(ZW+S|Z
> z0~_CwER$Q?#^s7Ufx@+0$3r9i)AE0t-_}d+?VDsCc}neLtu7xPd8bA4Ky9*6PtY=3D6
> zu}$8>2~$_OG9`|l1_N+8uJupz=3D;5ckJiavc1<;!A&g+vP$e(f`T;*evlz&Fc96fCW
> z>+4EJAZ*F5(L5(rEI#a#)K1QC4F4Ne874!v&z1mqTQF1cc(#4V&tq<E4sU<%(^D{6
> zPW0Q9GH_w0<m5-Fyp@CiF+k40!5<VWRAkaQuNV#js8|N9A23r-8mHOWdZrV<L2v0F
> zcTHL6fe*C8-DV+X!65vyH!js_=3Db9yn$7IA&=3D;07WwH0w2gnYqC@mtJXTk^%3=3D=3D+X=
^
> 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
<
> zWF?bo1v^bmh4MW;5Eph(N9Xo+&sL+Dtd+futZ4&C$q<^~bk+1Vjg;1LIVpb@`WJIv
> z7O@e~x<8CURZ}&QJ#zXz@(sFX{MSq_u}s@`n$c%@ILDtw49j+<CHnD1kpDme?}!vj
> zlW(|xNpE=3D+_2>bti%Q1!*k}uRT6<CHB%;PGC1P~Q8@(j)z;i4^8$IWzOiI3Yk9&C2
> z$uHGkl!-0{NQi^mrS&(BDeVGCu1;Iq`aUPdDFp^F0E<R59Vo~0`(y@59=3DK1-A5sca
> z<607>JM$G~c|>FF&5GP_*Y9VAcmW1Tp@4yZHy&f1t%_NV-5#}9-Z{vRmrOAejTIT`
> z3yp{b!dCTlX6|)`ygi0F4b)W9fS@0;q+|}uAFc-RCL8UmoY1E7c|at!dwKpwou(v)
> zV~(MtM6&E?y4F#*(zTy9IJDL=3D^&coZyAEHJCEo!+q!<@CiG#I#L$pY^95TAL!DB;z
> zxV5sl&>?C8`lQ}!cbi>b*1Ee-0I|eanj!d4?2Oi3SkU9B)jlEu<NSm`NuSa%&z{}!
> zBbheXcjkVg)2HZiVADjAs=3Dk|^q$FqR2TaK|DXhY+{MQ5t+l4h*6Fh|UA8Z@yr<|SG
> zX=3D21Tt3vfyL1e+_h+pZ7R#u~b3mfo%2%5-v=3DlN#=3D=3D>~2)Zk@{kR9SMiR9ONAAi5W=
j
> ztZdOa*?K0wNsY`Q`;HoG!1}>En$TukUefQ+1t{L8#WC}t{!@I9YoBFSq0H)SRFUBS
> zf9_;<h+Ys{`lP!YMp6fP2z2p!OZ{*!u>(N%=3DR&uh-yWR~w{?5|wpq<=3Dr6@*!peu7L
> zZm!o3O#lm2O6MvHubs3bZX_gkc1>165Zh~3iO8RFrpN}REBPip2+0dkoag)|_`gvc
> zDUD@%lv?^TYcD~il1mD+yN=3D5Ba$qy-7^9wlGI2&gxeFbfQ}8I2zZp;B@eVs!T$apI
> zUT6{dD~`}S=3DS-(DRmZj)A)qjS0-Ofx&f<0obqTb;kZ~A5xg!lW{fW328SuABXt&KR
> z#2S|t(6Kb<S+|-xr(v#0y&b=3D5-Fi_j((Jhqt(~GDX4xy+Ha^NFoqyNF_@VLs)dl=3Ds
> zSg7TRw@^?&6K0AWa%k*Le>dtuUY_XPm$4$7&!x}L`3RHHy}`~k@ey2qDmURbiAngI
> zx-1f(vAT*4WC=3DEe=3D2F^KxHfp>)UVv|QE6U`WJ7*_W@`%GI}VzL!gaW~eUxu#ahi}K
> zvdNtEs}%{cfH5SLAYgT`m#XDg+(+Ho%pD7oSB0r}&ZbZhm(?_%6+D;ovuaJ}O?x~s
> z-Htd!FzE#$spglLF*dS)79}$+ZVvDg$DFC=3D2z)jA%4^2%9gpj}RJBi&m$GAZwQQ*3
> z&>gBz_HwN3@pBEY^lb*0+QjO@@x@A|4mlS;Js<>ijIcj=3Dx`jj(J&W&deFexajAF$T
> zpoeXVHcYz-MTSq0&gfsg^}>nIs<P(m%n*>S3ev>?w;_D|L_mLkP2EyBxHXlye{&y6
> z@LBqLs}l(`s&lErLcQSz8`QJhT-KSTmc3Mq@m^GVCJSVaR@tjUBn85riI=3Do^ExRfA
> zVNXg=3DtZDLrwo4FPljYZ&o{pIh8&ZtScHuQ~fa*XbSw8#@!rKb{4*jDX8Dm@SilGUO
> z+AA}f#zp3lDtkMBo@BfU%#SgO5ro8<2vUW5ISKKv-YA%9g}SZeuIIj=3DlH@Sy40|Jh
> z8uB;fYbIT<smV-}p2b1=3DfJRT@YB3G68LBtQSU5Sk$e%E?mIN<I3hg9L@dBQ_$svuy
> z{zpNvJ`Df&rhC-F9Lc`{CUKoC$tu-WJiWdvZWC!~T>%JxQF~5eYm}aIvwkP(LdXy+
> zorpFfaVz*UBHMe9OzrvYk9-b`S!D`NqH#An(}ql}sEszS?aLR6_6ZF4NVJ&+G(1#O
> z_|3q1QZJ^B-H$7B!m$G<T~W!-K4FaywaTCnUWmAx7RBrV7y$I(ruNxdxyrhFdw%{Z
> zA?g-!6_22QJzgaECGRv|)O+{H%|dv$-WJ|SrHNti0W6MpyfOvV0NnBX9H{Kj6(w9A
> z<caEF)$wX)$ns>J@bZ7J(XFJ|YJNuS+8olLVKf8k^lvq8udO1eqKXV+R{NMHnA0|=3D
> zaGkfS>pKu=3D&_nxnHbs6JZlK^#`1rqCeUMc7U-X=3DR46+bA9XZ*m4|1%j1KWh~_1SX*
> zV?;UMh=3D8^~lJWSglFciF!rbhI`@w#(3dWCmTd~MS9&&Q8CPzr`u&g{JXn?L&fF~~q
> zM<S(ei0vw-96u*3+UnIXBW78~(pW!goqps$0Vj(IhA4o4b{%3(kDXm-EBHOj4^zby
> z@OP+xR<!2(el;5@e_2O01h=3DV4>W^FjM&7eWK=3D%maJC`Wm=3DrLIXUaeK_X+vRc7jE5+
> z(y{!b>86h)hFZ&e@n?W+qvK~NXQWYu>l`JWOFwBUjYNn6RI@vBd|@`o5x$~vR!fE0
> z9dZ|l{#~IL0C8pA)>0(gaOmen&T#)~ReJ4zxNmrJ^DV?_SVxLwxXih$T7;-C41%>x
> zI?4~P1>Nf1{Q-~>#UC{cVQ?jzMIll1@Y4v|s!F)F+gszZ8zv>lZ+*I_$7_J8I=3Da~_
> z3nbESZdjc#y6vzT{oZ~*dO|TA9OdlLNR3U){HlTTN3n<yvbh#q!3w_LIYkU`rHHtH
> z<yR^;L<>#ijc#jDb++Hv1Y28)$scj_!WE+jt-K7wEUVmk6~jy}npQ!y@UT_TY^!2s
> z<Rim_EAnJ*iYg;50%8Ti=3DEeXEL}sDny$4Wp%|0)B!m2Cg@IpziNW$4j??rbPm%qD{
> zAA#5iQYawrObyRKY~DNKN`df5If@g1Zl0nfw!Y<N)Olk!|2<FLT1C*jlo;#FdLy%I
> zHthA{x2hYLrl+fkG}D_KwRkxMR8Nw(rGp4F`a5-?Ixt>T0Eed!DS|O#h^dE>K36rQ
> zT@}aZJK%5b9>GRCP{bV-1=3Du|RjpT70=3DkZmv;*{!tW5-W@WP4?%1eOpQ!q~un16M8F
> z=3DAYo$^V5!D`6bt1I|5!_etqX}Vev*5AhOedLx9|v>UqBhEaqF+p4vK?zOk$Q=3D$s1%
> z`Qvs)*09P^o|&N`i;Xkq+Q-%CEztuZQ%j}ZW!HWCS6d{kAk|QfErCAWUT5(pEPbWn
> zn;E0#L(sgE4#bZRdpcPx3YL3+>(yX$@}p9JE*4&^T4P~N(sMfRTm7GZ^=3D)7IvmHX;
> zqe_twJR;_cK?V<+iDiZazuM8!OWQ*i_a04cC9-#YzVDw~Up3G%1-Gt9_=3DBxYR<DHh
> zU8id}-TNdwUW!C$O$J4;Dow9>ACU*{DUK)Z-KKqAzpWiV0O@%X!j92@fAm-=3DH=3D#*d
> zjtVtITvn2Bg?A_$Yzdcw-7^tAXvFh+2$dBElBw+qS01Q_|1;k4MY%!?)^TnVPP%v7
> zg<o`zIdZ1aP~ZD6e{X1{Nt;w<z*lP$bKJvxwnH?C8F&{s1F!^%a?6d{LiWL<qIN~i
> z7%a-k&TefX_LTnE2c$NCH#_t=3D%{5<|8e0eh^rXN@=3Djml<h+GcQ^t%>yV$uJ!oj;fI
> zRVCEN&Q6&BrI&k5OStLtgOBN^yzK6cLf~T0C1PAW8=3Doq|!SP>0+va6J)Zx63O4L7l
> z)aiVp=3D+Fv0GmjLc6?_Z_S;8^H!TNG<k&>0)3+5GmnWi8zaGO4VET#B2Znjpgr7DsQ
> zIyP=3DV?+DNXZjkx6Xg6Q_yb-hn619ZJXmEZqF8I{Q0{%xQbF4eJ2^@C(`J_<V0~22_
> zls5SBjO7Ew*ZD8Ai1d+-mzA31y|cu<j#z>t8*VN^Ii8sQD^^A)jeCfO(LIE52I}Kh
> z>p<cC5`t^7Qu-8s&mkfa+Za%a=3Dbf;LuW?u|1w5-9SHJL8kZa-N+s=3DD~I0aI>vSfW^
> z6F?&nJ7PT0do~FIlv!U&a|q$EICI8FI(y92U7w)$SxXwNTE3RK*7=3Dx_!z8h?qk+Y#
> zz5E-l2!6=3DF*@-}!08@F86$#3^AUKCX1UP1g8O%@JH>4te?jh@%!Y)T{fPA`T=3DQ6b$
> zI)nOh`d~d44jrP1pO`C(#QnOlgfbxVcu`zU5D?rj)L1{}72m(l#^1BHseG69jEVS#
> zzG4odWOK=3D1{tpLMkJQarY+FW|7Ft=3Da*47`TUlovaL{sf!+3IQDI<lH%U5a>0cwvKi
> z&~}KMph5wE_Is6`Fi?U$<#Yg75o`_9nWk%m0cRW_O6!P@G#~mw2&^r2JFt$KA-Rb5
> zT3!}6cC?1uu1bLJ1l=3DXkX6DF~7RF)iPc(|U`*}*O$ZVHnkafvGYNd8Q+(AM%%>8_{
> zX*=3D&`$j`|$mZLMbYr{0s)0p$lHa^C6(m-2oiO#Ekp~R3p^7QUS{B{7K%7wRNqPGts
> zUG(tsDNS(?CE`qkiwNpXe@pr!TJtrN_tjXPa%6`ubP^L?@rV4k0hT_JYlobJZ%8+k
> zHdCZ1yY_eMBV)tfL^9a7PWElaLN}Ee$<p?0Q{*Q!nDXj6tBeiI-xP2wVp>(khVWK<
> z3UgC`@$iQ~fAfT9peQ(6EtGFUjdVGoteoK`RM9n(dM5|m0m-9PRI1WOulL!M!d$e7
> z+iW1)mPR9D?M>}Bvm_b(G<TkT!K0sUAh09LYC@u9e!Avgppi;}A|4fg=3D3Dhf?<P5Z
> zcI?)_;6*9M29lh&_cD^!n1@8GIb%Nx*vp%LsD<itKkzUidHFZ-g3Tj{6rbn|vwp#K
> zs2clasZwd{1k_FI-ED13q@f%zkL-<AZy}|I{te8n7i8}y4F|p*x^B$gLn}v_*A+{n
> z*fp7L5z}Ob@_x#Bl1tZSGR-;bdq=3DyX#T^YT>7qOKw5cfAPu6t|DHd6^qczvqW8HIq
> zdr8lG$`DtXmn*SLYdlS0P0m6yEeiX~=3D^{*_79)}Qs-0O|GiT!frN2cBoO9PPCFey7
> z4c1}b^J4L|DM#6f?_(U)3S+eL#5w1Cpg(*HJ5gNeFR6b9jtdsQ^Z1l`eAgPVe2!i&
> zjgq7oc-285Vq2*(6Qu?lr<b-w?m!-YO<*W}?fYBjoxCV!r!Q%*O>>E|hvtR6=3D7Xx?
> zaXU6{pfOuZ9!~k>tX}_QjzD_suHoV5%qdCvW`pqZ<4W)Bn4<N%Ffle<*{vCw>91w)
> zJ%7GpX&3%}g%1zLy${h$Q@3<)aNR8l>?_l-r{iyr3Tpv<*wa1;jX5n!CNNKbJh}OF
> z)EumM-{-o61PAb@`H=3D<t%zsn3OM9Vg3t>~r(EjKY=3DVvchHpquj4J`xJ^{1GjWW2&(
> z_U(ggSb>4bylo15V-u&>edRUF>zdX1TJ^L0rwX?vzAM!I1r~L%8?%5_i)X23ZRFZF
> z&?K0rjn@?>YIr4Z=3DCD*<B<uu#h3!jNm6wp9z-;kxR}jNVZ=3DaV{`Cr>fU`h#dbrL1X
> zo#vAbmbfX(!<*49{`zgXC+n6QFrd2v?4l^OQ4W&_Dqgg<GXg+=3D4x}z;@b~r~Flo=3DZ
> z@9ADy?_OjG@PthmO4TL9xLGk*00}AXh7A$H`p0&Vt>~To)a@MhTc}2VW=3DW+HKTVrB
> zHfj=3Du()B#Mk4ycn7VoluG%L4cw!6?mV2S0vyMj<PSbBaGbvtkiehOj|f=3DqTtK8|+g
> zahssi@{*ktBsokD)=3D5C+fxfDVRxZ(|O5v`)o2aI7ll?U9i{4O2sqfD$0zVxFoMIeZ
> zvb}%vGP;txDnmwTq@qZFEV_b+hkv}YpJ;jovY!r%(a&;SxJ}7g32ysLb^WktHW{)b
> zXJkZ3{?!8#|L3rYw|GR)dH_JA3a#oOGlt)L!dg_7O*FH-CVv)ulZ+9%kl0YDrj1T#
> zZzl~~yp~hwaK=3D-ydjU(W9?}C+eyu*XkVXSLcH=3DsPO;y^Aennb;0hX+jkcxDP4kwZC
> zJ5x+!4Q)xe$Q=3D-9hGyqV&jPDb&R#)`g_#aVgM!b!?d6<67Rk5NK$A#x&MQy%K=3D0xK
> zG|8(s7u4q)9BnItVy!9t1f24)JY?&;*t$q*VDDF_{Xy=3D#CfUC+w&c2Sj}aHMK;fJW
> z#9Kvr=3DJ1PPRK7NU48k3(Zbgu`iO{fAUU6cV5NU{ct}Y(qwQ)suWo{`w<zE8C?cz_m
> zT`EROe4nU!fLm51bzeb)ri@?e`IkPvi{5HwY8QQg)n2(=3Dh-lSKZ2en+yGSK|x#PF2
> z-7zUXZlVMNR#0PLlqr08&Q8%8(DHfw9qI{$jWCrRAb|XTxl6FKX03!TbAetC1y4;B
> z5GTyilKWg-ySa94<;JTa(F*Kx>`hspw-ca6-vWtJ8eX8=3D3FQW#Sd9is4J3gKaU5%k
> zrc@<U0u~0VL29gAW-OVR^(>KA<};_W`%%)3alYQrnwG?3+|R!h>?Ld}J>k9gPIYy!
> zxLBuyss2cR2_NA@0MbdxEuFKhsXZmj)#23FOb8BHebXS~28PHCUTq|0HulxT0B=3DUC
> zk^o|%{KrICXn#fTRlYmG44Vr5qA(mSe#`H)?=3DMup+;b=3DpIOhjBX*u3sCXtg~C?3g1
> zGKToTrtx>U%S_hRkc_0wndTf;`<~_#TQ~&*MI_CCeT+^|C@oL6ky?~3_#M^>x_>b<
> zh;02>Jm!HU1v8EWU#J=3D;ac;M|tR&?NYWg=3D&gcWV(aGf!5GgTOz62BCROWRDSms~vX
> zs};kRI5tl-D-NU}K@i|RQg`U*%>Au(Cyes!#WlDLQp9A*U!44|i%p5ht|lx?+<Q8=3D
> zHyCh#q{N523}8^>C&U+~7BUs-nMvYM>u}w1+W>D<I1tntQp@_9A7o{$R!~a;VGwDf
> z`9)MrEK81HUl1QFGpDZkLr0kaM6;E_ewP@KooPg@Z4W&UMDw9ht0ZUKrdd2yyI=3Dy4
> zcp=3D&tCnSQx-4@iRURQJjl#OCYJlImuB5Qwt60&XM{J^=3D&qzM3`mbf4vtYDqns?@Bi
> z!j}cppdJiJgux+BDTk0pS}uEBxvV7O%<IEZTwhGiUR7%MSDfahzwx-GVQiIoZjbOi
> zwezsy{e<7t-FG#nUrqgB%Pij!9ZKHm?ZZ<U=3DKqvLBca$OUKXLi5v6+LrH-t3(d!w1
> zm!@J4ByAYH%x~h<b4##!B`($#*?unTc;g;@Rm#6J(>CTSS=3Db8QwU+h6JaNb)96{}n
> zd{L44MXNvPC}8cogHSXH#7R`UibTQ^&jj0}VC`TIc983f>cS+`yxyQG?s)ax*H%-}
> zL~J&K7F7a?&>VlKnjh|C-Hi@#^IZ^sU&cHsX+XYf#5%j!rGMud(R6L+;)9N6cPuZ7
> zwGnel(f^TWzVg-8`E4HeJsSbYnutvN*|@kX?URR;!hg%EpR0S`s^ZjrlTZgZQFv?a
> z2>H;#+ue^x?;q42)C-bwS#Jk0^vTm7v<^L<8+@EvTBS%GPJJ4pK^SSxQ8t->&Nk`0
> zZeb-dMCy;M7nzeI_2D9F!#W>3?*3?>JX3yrXjtYv`EFpT|3elZ$;4dlwll`<v+9NX
> zBZ6LT;iWJL;8wrxjYWFuvl}d29Y&pJ^Y8#V)3O1K>AfW3hs}v0f|2_@&F(%Hd6}}n
> zpg=3DL%K`PSAdk#2fgf9Uzmh5$Z8<Z4g9W7kCx8n+^^4njf7wsEaj=3D3HauYI_Udcen0
> zM-Y>yxT6EJqghSQ@SSUN%i8d)bt88vGg{G|s0S7Y@D2NZ0fE2_aIts7f)xIlpGvUn
> zeOzk4yk3JJ2yE;L3lwfEi>^}x_QOV9*9xDC$?$nP^01P4F=3Dmb9$-!!W-GyG!mjq1L
> zf0YZR*k-8Xjg;}B*)kScb7N~=3DA7gcL&!R(?@o0r=3D{lpg@|7oP)->lz}@aj5yv&B=3Dd
> z+iTZ>Kx~v;%QDQTTpT&s18rW{upQV7UceZ-WRA*|K`Eu0dgsdmQy&(vK2m3OcY3ZT
> z-_!1chbHPMe9HgNNt82xm>wu>-ywZnY@2j-^l-f?bnuYnKg<%hVg(~k4(dRkUF|;0
> zly+SU3)5}GiX1P6&?uox3){*W4o<devXduy0O_AS7v&xE)fwud{!b9+?vFgai#ha3
> zV*fiQpy%rsdEz&q4o%;7*=3DcAmA`?W~{;PKeX{Zmz8-{`;zTrTBWr7U5%LaxqO!M*X
> z{EQGA)Wc|%v26^`J#Oxt>KI05BYJWZbw}k&K(!psjv4$4&q_e7n|}6COML(v$d3Yl
> z6+U7r9S^%KS1l-WTV|@EP_$Ds7qP=3Dq-EqDuLv^;G=3D7WdR)_;rHK@OMBaUM=3DUnq~d8
> zXWaF~;wV6`^gpD3FT-ELXF&=3Dn`iX8H>zj0v4YD-zdmu^u>(g{=3Db3`LaEty`hZtqY?
> zswFu%*K_s}QX4)Y38(?0!|GS}IroO?%4^;mL4IQp9r_-J2=3D)g^-2)-{9Igl5|0fLf
> z*IMrI;IxaTtJJic9RL?C##u=3DsYp4r58PpcVp~KNFVSVO*pp2J4sKvb`0kW3^2@?~~
> zpfv=3DnjD8BZ4Z1f16j6_@c@Ubq+@_LS@Z*_8SbTV0til+d2`yru-I5&Bl`+CeA_bj4
> z*&F7lGOz9Wphk7#eBozocJ#xAZ^q1}R%P6hm%j&=3D>S%weRnmrIkz<P}bcvuPG0X@Y
> zU4;>)U$P#5Su>;ID=3DY7yj-xnw13R7}UpyM|Kn;gjT{t?Dnv(AoxrhPlCb1QSsD9(D
> zU6i9-WGg7H1_T5*Bj2hfykc9sXDjz+W4=3D};nS^u4!;o^;HpLiSsU+o*(Y><9i#V{F
> z=3D6(TchWoTwPseAu9X~hkc|tI2jUxh{-MB+#ye=3DGn!wj5b%cW~Or)N~^=3D?Kn{Y#o_+
> zh<O?taYEUj`}Au9hi%wXr_-N27SO5yi!ghaZ@DB#&)%=3D7{PR+9fkMC|JbxTT$$d1i
> z8?G4ddGp5Z(i62~G{L1p*%~W;4zb>$fDVI64(lweJXA;V&a_5HjHyFhD(o!LT4QI)
> z5HRR}#ir9<Uas%4YdL{UMfWYa8k#b}-9pa_v;7X~T~xR{`IV2cuyHxpwbZ6rcnE}i
> z;sq2ZQc|}3)87tyGg!_Ib{jX85@fhRcf+hL_I{>U?UZ>ED(KR{>TosSuIQ`W{{TY`
> zsH(6&&ipWP$TaErt?Z?<VSl5(F60$X1Em6gbUrvY)XymF+<^E>Ue5P5Z`H)BdQ<qW
> z5#am5jf&$(CK4#No|%{;CG||5&fRhAG?K)4i%j(F1w`;^^v_W$UG6>B;TV(>Yf(4V
> zS1-|LVn-MGHCI<Rk)Mp6G>qxt!$QW&+|1sn9%~w~`w<diV{Hii+8#j>kc~X>)<rFU
> zK>xoB{|;*!Yks3x08#h*AY_A>G|%c<lv*qdRH)LInSat>OSCo&5XHku1;BrUU8D7N
> z)y^bNQgf2ZBjk)IdvpQWFv+T!Oun~rZ942|k57qX6GfBPge&pqLt=3DfxW}v*C>2#f~
> z2n=3D(X+f#QkLWoPaG|dtHBN*C-r}p`Ol%vc|$oaba)<-K^9F1EJ+NskwC&0a4SD-0D
> z6;|^>N7adcvB4eoAO>A$H&3%)c$sbLxNo0f<e*VmFx$BCJd9eL3yYbqu<*9{*8c5i
> z7>Yf?*D)0I0z9BpAXO1aOmB#bZB=3DP@yqW7GDD1e7l29O?WK&k_fn;L{u#<v+_Yw)?
> z=3D~x6=3D%&bY3b}GPDB?Wn>ZdOIL4MLG|hm!J~|9A{V2I2@g|=3D3F6O|R_^*w9C!WQ
> zKf3%Be+4_kp9p!s!TX2`+1RYZFtoS6?qSamR~&+UkzMG&CDVcY9{-}MK4HLhjW!m-
> z{gYX^$?foS19?N9ihagVP88~YZ5UHqvr=3Dd7Q43;+N~fi-b<=3DEj9$`F>KLm5>jCIb2
> ze%JaUEceE^jk%deT(XU$+5u`c$cd!N2R2gR!~WaQ;`2>_MtSmxAKAQ;@uY^8686;~
> zq9Cmoa{w}xh1rIR2~X60Qs3Ur{VedP`L~UndZJlCcMqX*SH&VB=3DI)w*q?{=3DX!zTk=3D
> z4>)fcA+!E#=3D#$NCsdwAM@9i)ieGDZTcTWT_qcWf_q$e>704^Wb5-zsrPNNuf`a^e%
> zyA_0Pg>#llB@|*w^wM3J7L;9PqhZN7?TK|X^IND{3ym^bkcutGypy+hzqA>7BC5=3Dd
> zZ=3D<)By%j|$v+QoZ4CN$$Q{}}px0H}j{3X~6{cW{`(r#+su*%=3D-@H+yMQU*r+m{wm3
> zA{_GRo%-AqIFqz?t&<n!6ylv{`aXiu=3D8HCy<#F_e-=3Dy-*%U=3D_wMeU~*cX?lGoStx-
> zh(2l93UhppKYgxDgQ){TRWlA@UJuoSE6PJN;~#<LS1oDg{Fi!vM3K{^@z|(gxXhBz
> znt$ma1A?i&gDk(Iy=3D-HIPKu*rEE;Zpcwqtxh@&T~7{S3mYRFG}xyS#Z9bgVe%ZTJe
> z#MW2)k@Q%0T!3;q=3Dk`S2*GE`7@Uzdv4?53y)OUM8zk4`P*7SETo~9Lq0~B#L4lq+R
> zjJHBvrEC|-;@~8ILrJ)+u)E66<}o?ntYdaBlv&jtACMAo!r0?r0Gx&c`}=3D;{ySM)%
> z9)--;w;#q*!OFr{z(~dt1Z4Z-iQlcKnLYjwT7%pn?4(4s{f(pq5I~USI8^iNyK`nS
> zG9+PhWv??xeG7=3D-D2GkQl{T?PEHZ%;_+t%WoIO${`i7H#{9J!^wMn~!s$rO+qV9;P
> z?D=3DY>Z7{axq|J^H$kC+fA2}A97MoT}2`0Z>jjHV^8{tu(kS_JH^PXBZ2%c5b_ddjZ
> zN2^T-Whe#$sItuh_)|M2jb#R$4)9<SUP9aK+Tq<fP%n6`n?{;W<UJ>3xJRP{XSrV%
> zDID#+egss1V9Cj+JImgZkSAvBsy@2|LB&$@VyM5z)H>|RikPhiEmklg6mv5|5sHjm
> zGUHs1^4T1fU!0ru_so3g94jrt3n60(^>9tx_@zh6&R+pHSo|5p-C=3D+S@DA~QveTH;
> zV)C|K=3D`U4O-L{B{PR$85ti3R%Y)4b7uy_)yn<@f-Yb@ZT!C5jvayLPzMlr9$MQ8wT
> zQ0{w{a9`f2Vg4UWVHw{eI!1+hu9n1kQvMgxT7?5rhS<vjM55UudLPC)XcMh3s>_JV
> zAzm4`OUU-_ZFS6$Y5!V2+Vg7h$DFjPjQ4H{rN`aV46+za9=3DXV?-(Q)52s=3DRA2$+MS
> zfOn*SoaSSFhYv(*eqkgE$sE03G=3DZE4HMaz|^4TK2sD<c2-f*+O_Q@!EI)5G56x`wW
> zIiA`_T8aKs2sc+KPBB+k9|!0crvO<%roS7m<}WB_GDMehZKl*4#!cViU{mb%vtWqq
> zO<te_41c)X(hZn`R1K#gLEAIZb%cVjXl~uC;i}+*e|;ss?eC5?`v{O|i<EJVKY)v3
> z<zkv{)7!mQ&N*>o;x|I8&!vfYd;&ft(B$2&76ns$L>s+H50GN=3DcZ7md)%G-=3Dz98=3DW
> zj^FbUZ}-k_l1dP7!<_;O2wbN#J9(XbEj`uvo=3Dxl%4||gsM$HNJRYyb!YhR!Qr}5v~
> zjr{#te<f-}nCMPwVPlZ;{B1oS$mY=3Der|z_>++c{5Dz(bnSm06V0`hQ^5E-6$!3V`i
> z=3DlGw1uD>cG`xSL594r=3DZ6%&{clIwj_)iATUVR47OV5t{0gC}$;vFqoOGR+ksOQTOW
> zaSwJyo^d>6mTSyqjwNpJEgozU_f1!JG?E(Uf2)XBFW*`*P3RYi^a-{UP<0V2)fVy^
> zkauf3a4svK?m`YN%%^O4yJmBrDuspUY%@s~olnsYO!Hsbd1Zp)qA>8`Dk#eS!s8!)
> zb&I&Bv|;c<fvTcZ@3mT5fmk9pQBf-Ku{3TE)r^V-Bf9&VA@AYcGb?T@v#B?`l3v8X
> ze^gSXAvNsVRFL}ZwSh>WZ^7G}Ix&}zvx3a8`PK!nfImA~EAMmK$jBE%Qz61Jt{Qtu
> ztis@=3Dp$s%)9$bC}nK2FOKfY3!lt{YBPqCCYgB@~Ve9+Vd6}MSyL<7!)Pr++BKCI*-
> zng`=3D1<yx;%<WHJ97m&V__{0*k@{jr=3De~1NTkgIhJy;iuO=3D+ttPZ3UCZ>uPsVmrJqn
> zxpjQ=3DU1<g^s3u9i5%sj}3of+*BJ7syc0xUi?LY6{y=3D@w0yu!hcryTzrCQVab{Ihv#
> z#h&&cW~2z<I8Peq>n6R#8TQe`H7r|DaZntW>bLBv`8%fxr^15W=3DgkF#Yw;}Pe_HGb
> zqy;Vy-gFL^YD*TWkxUbkFKE2zWU*fVD|sxe%pDQ!KtK#Wdw9IQ)gm43ltyD`{iS`a
> zhM3gbY5&bUY`~>cIDO7v1rd`<Y;&cl=3DpM8^aPUjoKiSmLTP~}Z%i`oB$otgKlJ2+F
> zRhi=3DSq0C`}|Mb7N75%2_+i6*ge`v*vGBeQ?+LipmICdY3<da0H1M}YqN<Zhy^{T#W
> zs<QpoL!Q`@+Obc*Q|Mrld^ZV7ESsb5jgJ1*o$eW;q<oHkLcp$G+uKL{VD189*9hZC
> zfaca>$GTBktuQfK^xko^TmY-I2IYT+ljRyNJ$Lrakr5y6nj|kfWQaN^f7x4d3xIzQ
> zn~4FTgplcnl0aNl;q7)SLL;o6_H0`V8iikOWl;da9qw_01g2E%DnUH1rSZp{A|?RD
> zgcP8r^}G1_$j!M&7mbrZC9%vt2*h?<;-QD%@YEsZ%~;h-Wo)U=3D2sBwgBe0SXI@y7D
> zXodCx<0S*bMqmf98vFA8f96yDpeX#Y)>G0^u0)i3w(WPHIV^h7rD<OZX%dCH`g)X)
> zr<g!eS9#5F8Tm&htp_c7u3?wrY=3DsxXfX%3?`UYZFEoUFVfFv)c$u#>P!|_xfc0`9Y
> z^xn(Q#rys}opFv}bH8P5q`Z`(cfT%{Y43R}m@SG<KisQyWjlA5e=3Df|Bt4_MqRXzm;
> znbA=3Dev35H<lJr!QU+xL`qngSmdZE&klz7V2nwSq{;xJxo8b;mk-VU^nA?e=3Dz-NTip
> zhDA%x&7R#s=3D_KK*f&oTVcV^A%sY&%7dr>X`y6a7zC>{{ZTod1zx!Pnd%qv^?a5r1o
> z9dcBK+E5pe{q2*Oe+!MGS4O6;w*3F5|IL@%w!jC3@~{y_V6_^!Nwaraf5=3DQ`<HC{g
> zz`c+~NQeov%StBeIUgpBQ?i>GCXf1_O<tT4{ooc1dB?a!YX5^P252?)IPCCMb=3Deb$
> z2ScxQz#6Cgv8;&U(M)Pa5Q1*;*}qIs4wrx2MqBg#FO=3D-`e-H&@Q{!3e1wsrC-KyYP
> zNq$j+)o|}M&j0t>HWPT2N2CVq3n%r&An$MdNf#HyU03DDBe6hm|7kMu?&lIP%RjBv
> z%X<xZ&xmQkB$Cu26ysSTC-rYtzx1(>Oi`=3DG#ipxb56^|Rb-MTwVD}hU_=3DhFVoI){Q
> z5P_`YP{wzne*&u84%PYSNtb6ZI$f}}aGe$p=3DRkko%ajqSgr@bp4GHXwWPTmf8o1fO
> zaQ`<5i(@hs6HGJOb=3DB)EWc=3DOoF_F3BYdp%S*v*+t$uJ9*X6j&YYv=3DDau<LB@le=3DJ=
&
> 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
=3D
> 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
=3D
> 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
a
> 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
W
> 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
J
> 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
O
> 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
S=3DF
> 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
5en
> z^H(~lu$MR*gw0c0*Up=3DFjyydY1V=3D%pd2I!=3D6%+z}%AJ2o0_0hT{Q*=3Dlb`x#zaCw7=
o
> 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
e
> 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
k
> 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
=3D
> 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
i
> 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
E
> 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
S
> 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
G
> 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
Q
> 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
B
> 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
=3D
> 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
c
> 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
&
> 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
R
> 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
S
> zwN&v4H$vGyN@b)|rhlv5c^&Ya&Lz=3D2dR%c$cwNd@IRG@uWYB0fTY5D<>pf?V!t({4
> zL&f7zK-5j@{4OvX;MFNx#)gk6l1HjMt7X>af=3D5VlIA52a5VQbjila##e@~ixsl>B-
> zvATphn?_!BuXSyC$UR-rX6$AJlh9^F%JOH?86*dFMtf!3NU5uw0Kd~bLrOKaDDuG}
> zB;eufn9*n)(uwU<aAtHd34omwK1s{>8Y=3D9`6qw)Bb7LM?4pVF;P74S6%eZc<b#GR0
> zLMXwh{t_H=3DP8HXofb<ngf5m^MA>$zk?;$etY>1*p;<!Nx(;eg})3ha$$;4&f$Y{!~
> zQNj2uHa5^Z;uT}uX7UdN@&~B}L~h`}Se(cnD_t^l^*H)9U5Ld=3D^n;8*MH1>`fo%R>
> z8WnH}WH~9QQ?P_SAb54&Ah-@P<s)6pHKYM*mL^IQIUR}X*hjQ~e*w>bAeD$Kyxi5Q
> zJ>MbObe{k_g%PpI^Wh-RPrTJl;liE+`{ZnxSH>jgYYwEMzg%Ix@ti9q=3D1Jjue{_h5
> zIx33)hn&Q;29l6oFj@C<N7MrH^BuHYDRF_<Bl~d`8HqWc$DSHBs0VsQ#{p~#Ybwd#
> zvm1jrfDxV*;q_5Ef83cO!qOk{nd!N`FxJ@RP{zN0wc8<c$o~+9y(4Ts;wvr)?D8-5
> zHp2~|>xyFt9kjn~;Jr-2osxX*V~3DJMz+2RhG?-)X4f2xF_BeySlx^Yl`^5`yXMit
> zYJg6f9EQD1%?@6k09#up)*nT~{zumNobT`7m)Q|EXw>V)e-!jn1Os9rBp63%8g-N#
> zfFG#MOGO_K7__Cdi&BEAz~aM9u?eAAI~nVdA-4#eXLPq$0RV)=3Dfmom{A0zbe+vV+$
> zO3&g7k7mp4$|e7*U<D%Sj_G+gfy5(u$n+&NEd@D*o>DIsf3#`7A97W9a3UrA^a;^A
> zcDE`6ri`-?e-GZmt(rOkEO^aq?J;E0m0<Jfxk{y+vU{g}Z53)J!}MGI2P7g$c*@^f
> zZ>Onj?-$=3Dzd(pOqojqD3Ss1wY^q=3D!tB=3DoQ4$Qe<I)nj$raFvMJduzCMAWpp&F*yrx
> z+X%rhwt(a$J?<ai>iEdezJ`&NqptD1sB;77woe(5e;O%yN_0mwuitOQ?%RoP{w#6a
> z*SqqPB%ve{jZz1gA<CDGQN?p7(lQ*+o)(C;zfgO^Kk138O#Fk=3D8a}`%JT^A3oqdtD
> zG$NAX=3De5m{gN$=3DZ7=3DA5!DJydy{BOf4$Q-rmf@j~%gO`8Fuizv~$J&sX$5yl$amdw*
> z5SzMve;H4*y{gjnbqUi*@Mbxt$N_@Pq+MyeG<Z#M0?#D7wQ5vR#rAX>txX8Si19%(
> zi8c9yhVApSD*C<IOj>aEGs2HitN<HO5{?ZfAdBnyhmQ5H@?z{f_N<CIE1MR$vwbZ~
> zvMD2h$QPEWq1^dmi_a!xotKcRr1#s-JTQx8f5BDIV(pA$Hi$$q%_6My!%>6n7z2jc
> z#YN6CC6`gB0m#3ao@8&c6Dr_gIJb)vZ@}r=3D|Nj6@K(fCn1iNuz8J~sy$;LfQ(XOUc
> zsa4@Wx0-6HjYGRnfr^v%`h7j060y|t54mHI&H(9L5`wPUSKTL-<*ogtGeX9^uDY3K
> zI?A8$zkm6P+46jyx|R6Rc!ASqY1X6ipe4rofjbIj5zbPDYk13|t<Y+G@=3DtXdrPd(X
> zl%$uw@g|&N`{%ZIMpH|oIV5TKurcog-(=3D3x2;WIKH~2aXaE@5!85Y)a|2U6gFZ&X6
> zL;yuc=3DslcW*Q{YuzS96N;FXy8QZ%<=3DTc<sHXn)_T+X0Ee⪙WP7wK&xkU`IJxg?c
> zcfc<z(-_{XFrNeKzHu}5e3NT(#c=3D(x4D_L@Y)vO#E!i=3DlN9NTl;Uxh8#7xFh7{F;e
> z_u9fGyH@3)LP>H3nCtA;X`jtM7boE47O0URg2%@lS$C7<8g&?=3DltmG2b3ky#hlD!^
> zw|{N_);lWA|1RW-MFU0nNVhS#*B=3D!0mx>F^jGIk=3DxS-P66t;;&uMPwJEy~Jp0-Gl0
> zWsqMrsQ56$$@>&fxjiT;a~e3{nv9En$zRoK$YC5Ef490L5@uWGC02a>W9?Z}Hel0G
> z7jJ`wI5m4zp+@h07}bE+6LK0D#frV5RDWvd!;h!36lm#0vIy0xJQ2A@oZ-)NnvHmj
> zVV)6kqdK0=3Dmzi_ff&qnW>ACW=3D=3D;#80I`3tARF=3D^vuBZxjs5uiQ<MmMAN$w9{vtQo=
g
> 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
i
> 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
GnH
> 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
Z
> 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
!
> z<Bbd<c9hA{)4eT<4F~pwq6~yb-%BQIh`0DRHUkN+CX!~ZkWo8cyDd8Y`u*B#XB|34
> zUSIJ$s;E@rCIWbl>%}#0X5k7DEm<PPUboMAn2(9<Wv`*I&@bMoWy3+#qgZX;fu(=3DL
> zsKSpHGn@EeKb$O{iDcSc-N%^Nq_|rSEtdGZI%{%y+4Xi$?r@a+9B+>h(Y|+cK;dr)
> z@rsXM2kFnY!(b<3OVF-hKQ%Gu&<gI>e_Y3ydv>|ZnJe!r)klJzZ^Cgax}+JZ?0H@o
> z8lJ1KrPl#=3D+9KvlMySFviUgS(=3D^B4}S9r|M_MsK22HeqjtotEsICNv=3DGw)Q|gq0DE
> zb>&ut;(|uW<~gdgW<`2s^(Rp^!u#5)qt6tRo&qI#MbQjg&^&#>6lNd(V?xJ_ljOqA
> z41Hoig7Yq(f)#R~U*(L4acn&eZ<R9sC03V$#F*FT<lEWQ;Qsc;7x-Oo7w><4@Q~9&
> zKn>K3v$%<`A`nm>)!*oJh_pnRS8B4%|I`%^;~5>7ywfErQf_xCYI9q`pV!9kd1#bL
> zghmI}k`Owf^k@)C860mMJwsf;d>&id)&NlW^CR>{rAKz}DWT)%X#_uIrjjUloh?^D
> zEL3ub^=3Dkr~FI4j=3DAYO{k4MBg|XFAVvP=3DVf6B#=3DuYifL<w>@B8812VJqIofmqZeEl=
P
> z37c0Z10fdnyj<+O>w)+&wJYxXIa+UvAg_2DDbNx-fn7{2?PV>l(?WUHYN)V}{I#@o
> z$blc+B4DUCns5~7?6fZ{ak0j8n_y~p#VP1p4I3P7zG2l$vJhw?*cE@?!0izwP*INR
> zT{2?*h+4FJe9txBHx3;VzRqKAu?NgI9T$O?rK@$AHb9<+fIbBLN$Ql?(Q`SrT1$Kl
> z&k5|Yt(`3t8x-;7BA~tah4e7nfo=3Dm3u~{R@sQQ}P6L_@fUCAz_5;=3DB?Ox)N=3Dxl>-Z
> zsqgw9Y@{_Q=3DmPQqK&^j?V6G)3_w$NTNR7nqIqp<MeaQL0v+nzpnp=3D?$1Iqc%2|_*s
> zrsWUrRGaA+hT!L28*-e_OfQ6EkJNc+;PDp;OE<`Qr^{%%rBx%72uY4<AnLZu7Cbp=3D
> zpdT^M1e}Q`tN$+Bu?hex+9-k({}q=3Db-xNMX3t?ZqqWAYQ{*!-pV~#3e+~_zuaDLQY
> z%6$y$WRjPBV}ayeU*LyMY-T6HD%C|<KsE0t=3D{3UTbdA^RVL-5b+bg9>@fy=3DP1Bt|`
> zQnoOoNk>gZ=3D1mk0?J94{QM<_}zi@5}(y}!2l3{r!^`@q~y~uy=3Dr`@HoO*9-->1}IZ
> z?|4I0h&NMDvwnXC#>N&k-LAn1G=3DP(yK$5rm7nzw|C0LKMj&1W52J7GIYsu$j`Zac|
> zTfWr{jrmgl3_Tx-Ls?7b>2$Cq+l?W%^<1kL9<8+9`cy+O?z%|R$xwrF%|%<?B9__A
> z_xn!jXrk2dTcYd(KJ1(<7k!||GMGQMqAtLe^s|>cIs<=3DUpF2C=3Da)TKz;A+US;$8oq
> z^U?1xq3z_3xnW94&UFQ{%k9oo{u|PAvncW-m_Gt^<VAS~{|#-R)<xU>5)(A}iB8Px
> z8boN5L8WyjrsfySODC_tQ{$mKJ`E7=3D#Q#{}rHVWt+1cHL!fxk&r(mU17B^zQR6L0U
> zhMB6dQT2b$T@><Q7`Z9iA+jx2D3h6n{QZueeAZp;j6KK}i_z~kEc0c^zk#J#dBFqH
> z+s`ab7SsZ^8@(-(Mxb~yO=3D~y8##Z0YzNcKGx=3D)A}t`E$-S4<K=3D>32^13J?oF!y7JI
> z(n3Aohb=3DQOC|C=3DNMq1hqf&TNZv54hY5AaE4hx~u;EzF$=3D7*?Cq;5Ql7WrIv=3Do|hy=
f
> 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
l
> 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
A
> zu4hXYXXFYvM&;5VD}QAvxxLCBcmnf<RHa6OntTR-<yBKeIng`luckaTn+=3DG#t%vqL
> zKpR>?vQ^Bt{X+wi7o1|4$?T!gN$f0ENQSdOe}!Z?*ViSEMEG#GtoGi9z8Me(BE9DD
> zvYsM0I9Skd60sX?ygJoumec^QwH%QSCp-Fq9FIWkm+e^C_{s<c>0b}&rEmg&mXcV2
> z4B<w9vPryyBbjkXNu_%<`iY}tD7bLw_ggyqfa28QLatq3xT2zr(Wr^oN_UJ&tZs|j
> zxW_zo_A1G#Cs1y{yV0**7mfm29s*=3D_j#t6;e?{8HIqF65`&ZHn(ExH`Pp2J-B>}=3DL
> zLl80uC_^_UW?lJZJfjEBrDbf^#)~qU{4EfFJ}rY_$an3v&q@Te|0^Hf&B9;5Rm%7v
> zL{LL}4cyq?(_pe883@WK{5I)q`8=3D7)dk5oCN%0H3hWoJfzx&+rzEFhxcA3!Y)1a66
> zs7G%hRE#-|O@BL>5hl&Sfe`~0*zP}rPX)UstM_4Id8ovp%yFOqaO5(z#3s!u?*$Zp
> z$Sn1|_0z_})P~X4s9%(46OMs;JPP!NUSOUC7;Nd%)VP+E6F$T!t@XHof>buK2oN{;
> zf{qK?X6Lz_&I*hrPQDNRqXb@2+*|iqh|!H_9&l><?78EEqZm_;mfb&7fvLT4TqqXm
> z*C07;=3DHa7j2}3BPOoM$X{)S%QMD$I68L4D`(`F|ioZN^C&_Z8T)L@OEeLKeFP;5cD
> z!oPG@9V}?t=3DwL}Eh#~h-9M1*ahsFc&ZEjQ;eGMo4j=3DDwi3Jt|ja`H?tR@Re|IpkmP
> z6m^+77d<}HZ0(0a3V<@zMy>(OD0v=3DFTz1Y3*>7o_LV^gu;U3RdA$M&(Xnhucj)<Iv
> z6Sw6TaPl!*h|}I*6&sV)aVG-snmKFC_3v?p*Ln_o9n<tyrRa}35Fzp7DFIeZT0h+V
> zv=3DV8Osf&Q;?$ka0n|R4Fa*$()nVG|Tifm}m9*N$CJdx;!3Yz!W0B`{2%$kE2Kk!~k
> zT{zi!0l^Fty+trHVwvtx6cv+ynt*i7&>vbMaB*@^ZgA6-`nwWeeg4A5W$;050bd5#
> zE3n?8_KH$jr;%a=3D75*oF`S+w@v69w)6@ya+#UJxW#InwV&~TBKG<H<@w@wYI$Uhtj
> zJ1{l5Wpe`ExAGsV`!Hd-q)RYP90Wfh`(!-J;+3T0{{o`eJfxAvffwU{x?7?w$PiX9
> zX<e!-STG_b%v4)~_F}8N<2N(GjJ)?PFtS#KfNcC>^!|45y69!>M)WOFw~}leZUW*~
> z+9H*Jai3}F>_g`Q+IdKegh!iJraTKp1iS4VpeS*)D2)HcC|q~p{Isym-ak%n#am5R
> z9B$2|Kq?iWz#xGKA3OPfsj*!tB!RlVw>RE1?W|STYdhA8T><-veZ3nr#CpxBm|MC^
> zn{j1{C0NoiH*4lK9k^L!e5LD!+UajOX=3DA<u1S2f_`$>{#WMO?yq`$DELyNm+Vy}VC
> zsp?$}<9$q$0iBn8)qzTj;M+KI-m9fDgUFK46C%P#4!&7?2j7{0CBh#b?$&!X=3DsLBk
> zopC0igS%n8H-dMUqK1`FjhRxQb|+6T!d{e(cOV<-$40i#2JDxqr=3Da?rGcCJ8D^sW1
> zhquCLU>&#=3D1?418jNLifVNlkun<21nXiyai`k3HiGbr<|pcI1gtpr=3D+8>}73@z57I
> zyNlEhrgNi<vH>=3DK05RVJPy_B|nmaz~aB)5@YOtav_g7V=3DQmhI#d6({$ZJ5T}Os(b|
> zM8?pz49K}^+FqyDe)Ll)E|sw9ryD8(g8m}ty|!(lA3-4AK6SGhu}v8?D@*fnvGrWy
> zeDsZJ-{>HB8{17x9Yps4!{@MB%5-*_mSV{>QmQA8a>qA+oH&y9n-wDhA^dt+xHa`X
> zVQoQT_)1!63u(LX%gQ6P{nd$uz~v4HL0Yp45_KMMtEOyS5XnX&8ZZ}(lq+5dxcWX-
> z-j;&aOC7aMh2=3DTv>)IoS^Zg&c^0HXkYMv8jM9G$E0Z`ynQ!`r-yzXJ0{y+qWu=3D=3D;r
> z{pR7R@ZYI_J|7KJlJMMVXU)3B9|AJOCdab&;=3DMHqlFWy$h&eL&1W{GBkJN`DMamdP
> z53WNNL<Rwlw%c2~%4QtY=3D*y%|(a}Gr>=3D0&-MvH6<jw7mAZZKOg?k}r;U}%?1_jZYl
> z;iEn3h+qClgc=3D8ZEwx|~wGM6ni#@Ki<@NM}q1T3gLnB#{c|w_PL+(Z<cM{l?@p;}|
> z<+Bpbw)ObHzEcG}YYqNxifxnq_zdOL7!zDC06ETC%Te>15QF4ySn(Z5eNHq&ZFsk=3D
> zVYo0!2^K{8=3DZz0Xza0u*Rm!SZ#1_C;@t{0rTa@j`H)wZkj{nT!c+H9i#1DP<>@9Ju
> zUoXFZtWl(r?D)WEojmG36uk{!9?KPIv$7?F&M}5!n0p0U{%2a%;`Cg+5>*y;^0yXi
> z(tP+3Adi4Yr9Yd5R#F9^)eA%rX?N!R(x^#FZGdTV{Hq9AGmc-*@z=3DvCwx%cDj|$?n
> z_F@{euL<XEcS?_(AQpOGx3>cKrW@M;J*<0wzHqXJV*dP7GEmU80296;%6acr<me!V
> z;hF09YkINAo=3D9szO*Yv<wvaZ5AgTf=3Dcq?1?f5aI=3DO~!W*?VSaKfG76jC8(i9NIUEQ
> zdn21DwzpQu7qJP~($Yt{HF1^g)m}A<W>p9%F-p{PSwsR_!AG1t3CyzC!Srcw1d;`R
> zU?5<tuS(XZRYxr^VGM7;r*2!EAMgY<Z5i;KvKg=3DRr-58#_!R{x+k{Jv>;dn->k7et
> zD>H-4)tI52$YL0t86J$#H^*PXwl^aa`r4-7F1p!*+Jud!vi@ZI-vl!B<Ch@h)33gW
> ze~=3DW3nF*!ic(APd@v_=3Dl6$78x;&vl{9~0j_7t=3D4a`?upER6*YpE%K*>)Pe?(Q&<5m
> zYr`nvHpud(Xy;-H>y&Ytv0x^E6o2&~=3DQPp?e;*VkB_g(ZT6Swng}?k;zGRk}>wRv~
> zz);s6t!kR`;8&@xbX4PsO?rE$8s#y#u?jZgN8`vFv%AAJRt(j8SZ&4;j)D4rZA&57
> zH`Nd%CeQ#mlFA{E!I@xIDx79jOLn~j2RMh)_}f~}x}xEt1Qt5Q=3DNr=3DoO9soB?Vbz2
> z_>dS7=3Dt%g^C~)|WJp(b~`v;>|R;I{L3gV^&TLpTq7=3D?%0yig>3`m9_hwFykMaS=3DZ0
> z)~92cJJs^u(k?yb@)x!V67h9^T_IKorfgKn8wD<4=3DyIA5CW-`d;wg?N+hM?W?gkJI
> zW<|bPNWC_`rd*TKsxR+_x3UWWE}9vJj%YQ&%JvRAbg{FTd{s|Wt{RHfN$9TECrqK@
> ziLozdV3(Dt!L%%MzN*2>sJD`!(|Y*H`iRN*X-bSDM8i@;h)xwDW3)Vfun(>6$dEO{
> zTB%TXZKi@E8oS<{gEiWB9ZmXNBf>wMS0c}z(hanaa*DPKi{=3D^hJ5<)eQWYmGMWWf+
> zp64=3DRDG^KZ9dcv68GHj}@;rK+nk4q6^D)ICS2TXkvM~$s^n;zk7~SPWg}8%luQBQe
> z1n;uI9i`!JCe>;n1}=3DGjjaxfQbuY7!4V3U5)XOK1iD$l(^NV?<3MJw5WW(>TF(_l9
> zh9}*HuM!XWS5-G9Ujq%ZZ()j$o)a5!^+X9f=3D&=3D4l2GbuD@2z+6X7z+y?0t7NZ-_|r
> z#df<%H|-ss$gCdQEck5`Z*JJIc9Y1=3DN}O9BbZVKm&cjRx4}~6oVOO`v@LfWzYh}ZB
> zYSC(q8ntieBXlX14J*)+lJJp*K^Wo@H-IR0sTWN|C{|~<VLuC<3sw90_Hd|%Sg6e_
> zO7WTjs5|qXCypv0HFJ<v;($~2zO~b|6aj{F8l#(DDC(oy!SGc=3D`tKGX2x+N2`^hM+
> zm7KJU0SvUHp`hJ=3DDYUX@iAPLw|6y^~_jFj!bGVQ0lY`d<nL2-6??6%T_}KW8As;u-
> zOMKzN{3IL}zb)bJhcA{OE49{`%I6V4&O6y11rYa59EBL#tWCg2@_z%YFVS``$#Ee^
> z1YG|0YP`s|GXN5JnN+ZIP(@1FdrbE?uH#;KUF<R)EP20wU1fF3XqW+~=3D`9IS(Qt>t
> zsH9X_btmsuxe<AU$iLI@MaZTl27Foxt#eDJxJ>E?ePTC8Hn!ZEnW<p`U|5_z+gQS0
> zw_ttX#9Pw@emm$dFvqsD<5BR<-D0Xe{AVT%<*?S^E_t;WM6sA}629_Zx7b)|yoc>+
> zBSDPV#NZ--3(umuOJjU682RzgbezTgk>|2-LC3pem#!=3DfF&iix%37?Vw7AsyC1<>9
> z=3Dwhmxl<a?&PwQa}C}Q81;RxoSqRdhwF{ng$!oyHIlFVs|*-nQ-JK&}6bWFbea+z`g
> zJMMrpz}zQ=3DvlMv>bB1VO`E-K&E+nsppE#tOZexdkwD??_KLO5%E_=3DwRIpvvm=3D(Ig(
> zh`}Z#Ksjbj5CxvT=3D!Z=3DAgP1*+8wz0Odv2~ikb{em{R7EUWVV_Cyzo_J?OB00Cr4(w
> ztV1Xu@nT)iU6(8?oQxZY;wS{v0}0{Wsl=3DGU8@9f7H-c#AZO+qZM{=3Dw*wp4GyP`>V$
> z$#W-vxkcI6E&pPBJKy56bGi6t{-fd87<-hMBdyrOR?a8atzk-Vyt3rfL6F$~({14F
> zdvZ`!<4(oEMxlt13W)w^8+pYgP4sD9ETP~MA^KK`^yqc<CxB1N3M${=3D6Wpkt2z2fb
> zLIup;dw~EkR&w2~zWgJ+0s&G@Gl`Awa8v$&4tX3cS+`J?b~a=3Dc{b#DJMRMt?N7lK_
> zhoqSFo1T9yrgYzwbYE?8T(<bmlqdh=3DZ@_wvU|jc#ZYL1&N5_9dbtDN``)(bBCg$nD
> zTHjj+RrDW4=3Dnfxg80v;_p{Qj>2+TB?oNe?iV?&i;3VpfPYrAF`U3Z^c;qz2T3++FD
> z22(L1<aUCuym+HuEf73yJJ`Sxl{${9`E!jPD}UJXkyk1)e&d2^rtlsb<lDGZ_>jcT
> zl^xQ4pcy#b<wh97pA7&3w?1F<g+aV_rttCa4?|KT{+B_NPWpWITk=3D69vo7541nrq!
> z&=3DaXS!(o?UX$^J?B~4``F9Ph{<kabZA)~~Hy`Yn<@Wk+XXpI`E7qSy-l1D#*=3D6KSl
> zf=3D7cZd>}=3DveuQIuJSpRP5p3Qpvt<N3<niS{pNHDcNg2w6c$=3DL>qs!}WX}~zxG@+5H
> zpFFmo6W||R*v_;vrZtOD)r$5f4aZH;#G((q6W5lYh{la$8W-_+*AQI2meTTnj=3DDqU
> z34fB)>-W`$*$kDCf@sPK&bw9sGVw6plOuV@6R4{wm#mm-CLml(W&0O@^dQ2c1TabO
> z!M_Guz2)4LgXv$)!3EWgzGACQNVfQGoM+ojg;JHSl_o33XvCLslO!p-g_z*mAyq*e
> z{d<#>Z%lI=3DYb@HC^2qCHlbz~+^vnn^2NmwueA{fB1+9&>x?HK8fL2A4)w=3DEgMLa(4
> zMk!V)CPe9A?j9)t+87>pV=3Dp9EvYB5ARG#f#)nn-MK+qqk?TgN*gh_R_dZ3SYXn1z_
> z?*<QK3qfO<f@h<wwlS;+RN_a9hXSmiz17mKUoY*zsiVI~U%h%aiGqiJ!I6-#e;O+6
> zrLVo3Go0`2gU%f5px3Yzq(2lnoHO>AAZ&E)EWmBll;(bE>ZF#z2Z}F1YjT)}xy0Xb
> zswtd}zvd(Z3H1T+-t1(Ls_s;?6$0_d6}usLu78Q~z(FkLw+`P(S=3D|>kdR`5C>$!0P
> zVG1$6=3D1tdHvQH0tp0g)^EaN7n0UB77fND(ZviYWTg`sSZGeZ>QJ-0P!ugU;Buw1nq
> z#Pp@J5`_>@&=3DY4}<t931T*77Or#c7X8BruN4><Hubpm-RVrSc}^Ia%-Ix6qJ(H@Ub
> znVsuP*%+{%^ymlzfx^E#EAwei-AhV!#>0l5pdO&->*%gvBUm+mf*Dj})sjDruC6pE
> zdGaV}cfatHOai7%;u{ahY7J$-vL7H=3DyVCmeGeBU3&s=3D&S=3D6Tl43Bs6r$lG*ydsJ$z
> zN;dQ$W|POyM7Nm$b`x0ZC#ryFneB4HRmCb9jAl@fay!z%nQ4EvZnkfrIflRkr2p<I
> zE>Qsca5DGh&_pzU_M%vjV0!$x%j{|(c4@7jmID61l=3DM}yXxZ3qT7Ym4QaXV4y<Y2n
> zvgYf~xw&S@9eC+Y#5qd>H88@+Q5Inn33!2rDKPuDZw(PxA+fsHmZ4w<8XL+tzr%r5
> zYhpH1k&m`NubwIGcnPWh<l&(RL9poC)L}}*H5<ArFWg{%_YH_0?D(DZ_4jWQMyxl?
> z-ZX}`EBzWkC5wVHBdJ!(>DcDg#!Cm{HdR^IxVWOot1XucU6xbX5DvGLYOeHm6yjKG
> zr~qkoAi8{=3D-1wS0yZ^|m$!`x`+1%ethg9D6Pn^dwZN6CUm_9+yH-)kb*sIt*(8$68
> zWTSv<=3Djlj)nKE^K$&r=3DTEh8JBDMbVgRGRc*6%HJU*R0+WgiM*1*3f1GBPUIt{zDTY
> z{?|BMbW!~Whm&xG6mL^`lseU=3DUoh3&<t9cORRya$i?~pxS2^!g7gmyTd%1*EYdi8b
> z`mCGlXzChR`%jqF0kd6Tc}v0+PiSG?CjSVfcrR^#I(HMma@@z6lBe{_WYa0?B$}c(
> zw8~qCDj7&|3Cs8gfst=3De04Ah&;t>fJ+!OX<^H5Y$uQ@Y$X_*=3DkX;v26F#UX>k29c<
> zwFua1CS!E&CkD86^q}u4tUm^Ja~=3D}o)S(H$c*)+Ai=3Da$~1?STP7CcW2{389(F~({?
> zs`%r7F7)rMPMPfYxI&5BmMMx7j>!-MKYkwZ)`{*0q|Qrg0;GsVec9__n|Gnkk)Sy>
> z+_DvTlFZ`CRa*o*;BZd|EMJpVPe3PMqSs?V%w*RCO->zT^ydoeY{p#59|Ubyod-7h
> zv?Ka>G?0{b#4#Jz^j{JBHEH?5?ack&dzd?axTV_e!($3`6IXKH8agg11e=3DDvqqB<Y
> z_$xb@G>MyFdnE@uqUUzH?8N^)RQnzT-g22P-M&p(w3XZv4>AY`XiXg_$04R|8%s!u
> z0~1B2x{>{Ji({I-GJ6KoXY7(;Un=3D6zj++Dw?#3&lqrDbUpC4Z#jXVhdIEv>wNTe5k
> z6l6rZ{3@5Y`2;)<Wu1ra06{>$zbXC}>UKfrm-nEcX-(^3e8bsrXgr=3DqKm=3D9TZub^;
> z&_bG=3D8d28PGagtB-xZdfco-K}fjQ!a@iGy>teLSSF(`U4O6fM(5-LC-0@bkOF^{o%
> z_pu7-AZ!`L*|K6#_{ml~ve8E1opqPA3W^qdf5gU>l+B|I-Y~V>Z)vIdC9B|+-E)@;
> z9il&}HEu8-BpWLh{@a5UVc?Hvv#?u(7>hsO#pM|Y5Or#1xXvtd40fcCcYGj>*z4pc
> z)WFya>5hLeYpV(z8UU4|0RtR2u@ojhr$xlc@@p+o_-<ZBkV4mO;uEC0uA>pLy)t;g
> zf1z)oZ_6L!Eu#&lQ~LsQd>LKu`Bq-Ix?d$^zNZTcKI4ZNDkb#Pz{!HSP^9uy!5#Dn
> z8$ssDF}@=3Dpf_5Pmn0HgoUx7J)UAVI6L<n?Stma}h(q$%uq}~GpoX<W!S+pbmB#tn>
> zllxX+MBtV+=3D-c=3Dn-s-Bt#RSw^jkYzIe_T}&u5ek}Upz}xq@4hd{VYmxd3h+UJ4E>S
> z*Z4R&D%_LF8L*~UXoN|}NJb*Y)V~8{<7i*a5NWM6(w<1D@ue8al9qV#TrtUbA5W2E
> z>0V+Fs%O=3DMzhTg4IS|Oz&!r*(tZ}*OaLpz{BrxDh9km;U%~_z-X2+dSST|l2f2v{C
> zF=3DLw-w?o7@FF4fPC4?iPR#l<=3D=3D^_hjvJx1-)Z)0Y%&Rhdqj|DAhsu{noUKKr%ip6-
> z!M7s=3D7At>C2W9Js57@Nc<BK6k0cCenX{SdUj}K(?D{p@nCT9*doOH>RahckF*++6y
> zKWWRyjjRp9AMaZVq7l4g2!B)hf4dfvMA7jIT<W~uxb!jooVF6M5v3N|@xzL2qit|Z
> zsDSrj$aN?z$MP$uYU0LP>>CJfm3^^H*>rt*7svBii$4s#aOI(!lZ_Jmp9#i`CgK+H
> z%{99_;DAhHmu=3DY-$9O<%7`u@|$C&>A)HD+yO<U##Iqd2-9@y4}Hvwt{e@<r(^doAg
> zx1jkmJ{}HyAI8T-;N^x>o=3DFixgzI?4OkDK5apz-d{f0~Mn}DB8Qdw4ajjx)zhy0SA
> zjp<Y7e8!)zuGfU<10?5qSUt=3D2z|Umxxf`;QN&4V&+@&$_<k44FfB)IyjNl&0*`SRf
> zG@S20pZ!wmcl^1EjQ%$ge|zgR6Y02mk2IDQX|OXfRECHRJS&iiOf)`#10H#QKIW4Z
> z$Z~BU^RMRg*W^)e&%xbznQl}nS)|&9A0YJ7;vo_Zs*UkIOkgW}SN_d?xMzfKS_AH4
> z)&6Uu2c*swb`>eW%`W+d`#rWIElPyi)eOXJ1^RBgse#*>SO{@Ae@P^kV9!!@W3QV8
> z^*KrS{i5so$qdWQUmV8Rek?2+moXvBuvRxj-qO3gUbnKd?lT*FTA^0fwHEi(D!>ui
> zb8BtK_OcEiX#G^Y?S#C7NJs>uy>#{fZD&ntY)Z8%hWy#Sf(48bo!0#1QfL)G+Hllc
> zXwpkvx}<k7!~<%Ef3!(>S|ZD*l8PT=3Dt4SbpB5zWU8djIAFfQO=3Dp9UFl@Cy?Yir_vj
> zoef2**R1~J$$e`tbws#0MEW9`KW%fa=3DvN=3DD@mYzRUj%~X9FeTfE+WN!Qb$ujIt&rz
> z^7a0uZA{Z29^x|`abJ*yrpk+e&CVh?l+g^4Uc>ik0w8Hcf0EPbl|97IM2pv7h6zsD
> z=3D=3DZaZ$ltq_stW2|;|o%Zp>h5!>U>HC+8Zcn&u>{?D#e+VD6aW?b9U_d4H!=3DR`+%+H
> zqD<|ULFw#;Q2F*jSrXK$2l*AgQq{jbd)k;CJw=3DbY#`*H%;E_w&c!Fmw$!ZrtXNX2@
> zCUD0o!B_LTe;XmPb55-;8tRty+sBIL+(=3DRPZdl2Rqj`DJ22ePS-u;_4j+eQ7;2xJC
> zQB@9&3eHDl!U6H3+UDk|hjdRiFlE~<;AMTeS1t>*DpkJ6g78zHpxJ0mowx#Z@VD>G
> z6+8R!%SwCeN^*<m-Y^NtW%45WZc>BXfcY9Joi<MPe-DRNCKm1_Uxbe3yLU3aTIrDJ
> z_&k6<H4l7*98tOEuMm7m-){bg>4v*A<49Gm{7Hgne$RV9HQ=3DN_LfX04^sZ77(4IhP
> zFGqkpsr_F@EJ8*VHSns-_nPfqRka27y9I|;zGqn37N44yGiu^pNseuoT<Z&moiRc&
> zd~8<=3De~4re#{NVTIK;3fM#gX(xr{(y&3H6M%O{@1b}X^2N|xP_*sU&IIn)s-&bWQi
> z{lCvgNFiE$xJ~PZg&I~)1LI=3DK5Wub|P*Y}6#;Z1fAQsyV21zEh!(2~A1ke9?XEiX0
> z*v;Qzio8k4LnLS*|9mW6GZ5q!$duq(l+NTKe}x<JXtYs-&y+D_(wLbO_@YAKIQac}
> z_mV36fAhw`jqEiO7}7&)6XmmNO%Uq`Oz3Yq%LRQ3j=3Du$i$`cUBC$IolCR12}0MyNg
> z6s$FWtV*o+;mQs=3Dzyp_}*F72eb893H^7|!pE<+|O<aAH5LFBU@S`$T_WS0@O45_4@
> ze_7aT_@LjCFfZe(7wi!s1U5=3D%#xzBc6s+hTsj6#2Sw7JGi`b9$ZN%rS=3D1@jt4W?T!
> z*~d29@9|5<X2bnr6%yCq?d{#<`@103X95nmOJVut8e1q9*Oe>#AJ5ZK*mVS@+2JHU
> z+mj4SINIfiogJRve{WKFR@zS$`4fWze}22FJZ6%RTz9%7-}v!~_!-R|M6nzw;v@tt
> z)^_E2j3EGQ0>l&>Fv>)E+z&*yR>{)DK)C4!MAAs(jO?HTi$SGuGBda%i)j<kmS}c@
> ze6BGI30WDei0$hfY@D^9=3D}O(MaFx|fVh3NLSx^oFeu%dz65V=3D_NVFY~C(-xXe{X#K
> zg^Ov}pk&;uqKbV;>Kd%pB?9*%n6WVPc6(AWdYvF}TGKFqoK&;VJhEw=3D$>b1Gk{EBn
> zJx`!rGKPqKUs?d&zzm*(f*XGs4%oTKM*T^n^f*ngUu@}xD#a}V>c<&l0|{&bGZ)X6
> z+&Ny<)fv8s)Xf_`(G_r6i-lf!e^`2gku4Q8H*D6^qt@vK>TyVZugn2&Z3`u=3Dt9jQ_
> zo_cNYWnl<j%CJ^yp*g_)ri@wWIfjHzbt)p?)zQ<_faoX7ZmxmFn%%CU7Wd}VE=3DkA5
> zv61xv4E3nKTH<dNUoiDEx_ruh*|VL_apgIIO$;lc8I}u~XGI68WOKmGfAZ)<o3sFv
> zOBp=3DG8is?25!q5>pmx6N#~9}wHx+21q1~NsnJx@jYP*a3X-!c39LvL+<)7fYZ=3DZlm
> zSi0QmTFI|N;<b&)!Cly=3D2m8o!DyfoU94|A<#baM!WmN=3Dk#gb5iUuJuu{C3v2E@tOc
> z<@}Ww1F3uFUQxSS8tGeOfAe0ec8yv=3DDAtP@M+Y9HaOW)$g4BKKa`eeU5<g(Q*5krX
> zRtS&!z`%%}m#9z(=3D2DxXoRJ7LU((K*FE`ybQ*SR|Xz-SH%M!DPs&_P^N)P#(3Rr6i
> z(c3}}Jk7l->Uq$xjZ(bmlEdrbPg-|)G6O4FAwSI9CUtvScf5uS-REqaci*<q)
> zN5Jbp0GNs%0?P}_4kYP|()OVf3=3D9=3DITuwMd6QD^|h<sv%>(IoW7L%jnKF<qiIasbc
> zL7GXVzXZG7fF-Tsfpy?R_Zu{6C>@yqoghS^?_1JOU$F7s-CJj@LUv(g^_3B%1+R>t
> zGZGGBXy*K*L3<Ebe`8?VI;HaB$;0x(h2VLVB1aW=3D9ZF(0;SaKIckIh{NH10*rqF?J
> zFs{Vw{J6;vF+mv*<n%oVwiF^8lUo%EhklpX`LagmZ=3D6N0W+gJ(qrh|`Q;y2Q?BS|#
> z$)s}&JC@khbB+|iiCd=3DSEnDU!8NWujCLIwI@4=3Dj^B5q#gfBvRfVC1oC96Qh@bOC6z
> zAnloG@DFShXoOx6g4R9JrP!Ui`?+!Lu%{M-B7yf9V<&g!A+d$f#MH`L&$h-U4%=3D)P
> zBJwg(1(k%#&6jb!#s2NQ4<e;4(c<ni;yt=3Dm9Z<kB-vK2T$Z0*>an&nrkt=3DO^?~sc}
> zSfp}dwjpN!e+qU4@Lk(#tIAL7(hQL+t!kcA*UgC<e;+j1^nOlmn3OzREQRa1AWjy0
> zTMluy<XTD2itlCV|I+y)uLe_y?yDy#wNO55>(3pi&hf^C{0tiZoTR11U?r-)70aYg
> zrvLf=3DNVpqkq_E~p8P!eGT*MB4VW}CzI+9bX%Z9tmf8_U*x<R}&R;{rKS>>ATxD5cZ
> zciT-2#5ccZGNEUa*GCi?Ip`r?{vTn*B&j?MtLtD3@QJtW>N^=3Dh>H#6H$cD@}PD8<Z
> zl;=3DnK7RR@5fM8<14XLXoN;V`Egsld;RUp^BXDkSlucu>(u8a}Yx<Ryqw!6vw(%E-I
> z{<v-ef5;R`iw*cnbJ?(pOA;rv(`gKCOJ;&H#i()psuVWSmDAj9N~=3Dc`C2&Gt9YR{6
> z$W4uB<dp*pdHT=3D~VZd(bBzCZ8D_H4>lhR;44!|$_sX?l^z-)AgkpPrU{va~YxVLq!
> zv5YY0C0}0^%0>Z-yZ?#ftF>T)JNHA{WU-Z%e;bZRfCf8hXoEKv+&>4#Do{%$tBzb@
> zoUeE`Jjkj7%c6<zbX-DK+*QVo$|a1c%@aS|guOXu>Ze&lm4`_vu{WS#?AHc*D=3D2x9
> zr$g?_FS;_7tkwXigW=3DpUyJ7l6m;+RTREC)Xt0^jKe$nzb-uYwz@J~*|jX5z6Ur#q;
> zfAxdLKaO*G?=3DoSxtQ6QVT`p8*(+eFGVlJD)c7Y5npog?`FNZ2IGRH|8OoGsR=3D@2&p
> z!Pb8~U+C_iJ<u~Tm>qX%D;?95t8{JZX^Zx-*xB~Ci07_!7-~P45CIEsG1(>MtpYrk
> z6s#<RUabVEO((8f8s2lHaMa#RNr9&Nf5v?-GfA|RNxWQTEVMd)BcvcsK_kIQ08Zj|
> zh;BS}8&To;zx}n)+0HoVpd12Y2lm9EQu%eqdxZDVVpqS*cTNK3P%a}i1fchp;(B~_
> z!B=3DDG5^u;lhZe?IK%bkT&~u&LA*0wk<)-Ua<E<^jx8e}%9ciD~V{{U~oBn+@e;Qdd
> zoLersiyPyd9<TMFRF)kcw2F?UuhY9B60k61uy(Cb_5b>#w3Xz;@=3D4)%KApgWTv(yk
> z6&UQIvo)|kr@gOm0sig=3DZ-I<;4RYAe3?6E8fQEI3g2aA%lMt`bIJVQ@NuJ0sw|YcO
> z9CprHA=3DKlHWTMNP<PDdW%O^Zee<L_;vCi&LlT3|QE{wWyR`_Ka1Vxc{OceZl4uQMN
> za23?P05XYfhSs3mIH|CJr`%Ba8vY64w{Yb$h$&6(8eEl_)t{0i1|=3Dx3+d|d+H5dt_
> z=3DMo+-!U>uPl^qS7mStiFL&dwRzN8wuWux#(GshCq0<M0ZiAL5i739Dmf1uHxKwf43
> zD%A_NLXq4~9VsQot$YzjI|%h(1o%l;5+m_g&j6|BNRjJD8fH4nPIR|smaU4~&W5|~
> z6+px8uV@=3Dgv5_*9p@op&rXxKEvZi`I$Ppo6_%sXn1tt<WtW?a5RKO~)a?iY9QR~SA
> zxID?39Oo>TJ787~XR>_Ae_vL#lBPDs1##QGY6xcLl3g)u+9;ai{M02zdn-l`Y<^aa
> z1C*he?6=3D#q;t_#q!Q!}TJQxk8sTHVajWU*2cN;2=3DY;<*~^eYn$+7xzg%NAJE8kqcn
> znH4*o=3DB%G7f;ErnJb(3#rnmkXfUtIF54m{sHOd?kXK_H`4i++Ze@Fb(8VJlDl&LqJ
> zh5PyD9<?UsS7Qe{j0<Yj#G2qmtN$dJ<2b-K!%lUIwBbgNsAr+dL?zx#(6V<+9C>rE
> zlr2;g{f1gKCf($S?@h4>HqUhOZk^2d6X(0=3D?I{hQM4-aqg+3lU-DpM2mBTdZwP@B~
> zF&h>oCw)Enk4-0Je>WuB6s)fS%N!%kf~k?@@mNr>0(C|XoKh^uiA+fWAY}ph*L}~G
> zZjDRrmFq@P&(036%fOcCpU>AMkO6&Go_V2@XgCOV@iTM<>$2oV&Hr(*^Ldx$H&{Z3
> zW7`)`Qvzt=3Ds;mm#yPWu`MwlGtMC~mnP&+IISKDVVw+DqUe-IzPawj0!92tsXUgdhY
> z!_I42aa^I}ij@^3;5V1i&X|#JU11hzm&cPg%V|K)forwAKSK^spHJK8!dxEgBz2|6
> zU{0qk+!&G%atQ578%)x$WK0e-ya4AEJ4c4D+Xp^QQr!o4o0TDu?(IM60ia3j+dP&p
> zivm&fu_^|ze+*gej63y(-x<H0gr~=3DvMak(S8cokPt38zv{+Z#WZ{s`Hjm$gMwfTn-
> z)W|gy*gtS-siEaZcI%Y7dmrAZpVKm!1v$E_e4;XLcL#drg2sTCLDUK`+xYi}#I}|Y
> zg0CgL{6xEvhx#s21`mxy(>QX!0J}lTvc(l0blYx+f98;Qxl%O|L>3AKYqU>2^e#Ul
> zj;+(97@t%(j3HYG7fu|F-FEA1LD-;r>OJUCcN2z@W=3D7TKhIsWiob=3Dst#9y&jX8ULK
> z@OF#qJU2}UTTZ*yT^%}<>eoYQhDp&jFJSmxExX%gvnks{q^rG9$$yUdc>q<or}h%|
> zcR$6Ve;$dj`J-vd*ss55CSpA#_SDeh`*sg%?L3g!KV(-yQ+$9`VhW$T08g!@X5bW!
> z1;RT;3T6UBtQ!ZDdiEy8J^leH$5<3JCY*Nl*30djap5&<zz*e^a%ua$H@S0k0nucF
> zZzr=3D`#9E;TS*>V{BGU45W0LohL<(U9MVcO8e;JY46Iktr)bx!mlRoaPk<YIkC%W;P
> zrioNpbW<PQBlQCE^QXM>2bJFDoR7%6>e~Dq9pSUU@E%9y?HR*lt&^$+UC6E+WV@r2
> zpE0@0Xz=3DLD)qDOH#N~62I$)WG2?@#Q>R-=3D1VdF=3DpbO6NtRiUhm%4H#!a0T_kE^PoM
> ze*o!(lhy4i=3DaYZFvL38{H(Zo;A1*T9&Bb0=3Dn^3V$7Ap-VUtPC*&e=3D$K;K}0p@!|{-
> zLeXF5AGEzuoCehod2Ann$ig=3DY0zYdA-PrsOkU^K#dS5bARVJ-|P*?~DN^B`T+`_s7
> zy{(+{P7qoTpdt*=3Dm0_p>0OpT9tWe@xe;$)d)6=3DUgwZlmKW=3D48!3o7E%bCzXcx)Qzb
> zv2;qe;%=3DTKY>y^9;Me;+_I$<6Fd`y)X$>agO(8GJ<;!D)CRO7fb#etfN-I;~9G7yu
> zu*HY>a+4L;Up#bkI?WSrK&9eUK5$uwE()q=3DTiDcV>8Yl0JSR~~bEo&y-Pq~_f38e}
> zco-IR$Bd_C-iUQT&YJqqq}PrVakPU@1b`SPo?4PvPxJ5+hs74*wV@__g*}4>7_03^
> z-ZlX7XA{@V{^aMz+=3DiqmdIbv3dqJ%W)S@l>NkGwt1a$GTWteaWnp^T&{&v;BI}vy>
> zpGnFglYN+fjF)=3D2B^01RcFpxhe|1Wkw<ZFMZ%`S|AB&agO+WzaD@!vP?1fp(x1%DV
> z-;eAHL4B|%AD48~dQ>1rbRi0*bl?1e&!DPr1fzM&(^qmE8jVv;)r=3DVIdJLRVy0v`>
> zbs(JaZ-oy7+M!DJ^Q1{%&V_=3DH+PS&)O%Crg*x6C8yi(D8lG-Y9KZiT5f1FOUs47D3
> z<%ti)jy$&(Q1o4YTWDvytR|ALWhgOY0}MxzV5d%E!@3F?$c_{7>>bJA_j=3D~cNT(T{
> z`=3D8CUFQh;csPgG7t@JVf(Am^^u%<+g;V;1dZcyK4G2!%|u%v_6RnWl=3D@{`FK(i%(U
> zT07O#W%_o{I~p5OJdjzZe?q}r7biX2IXOHB(FaoHjhfUAQb<nH`zRQjLshKcw6{L!
> zatP+Qa9v6~Y{a2P7My<2r*+mt++~fyF}op^kgA;T^t0sIUf)3_<X6+57IBE)Vzll>
> z8t(TAur)MfkkY+u0;9cHkAp(*+a!cXh7#6(9-&=3DUmpNmfx<yI$e}5b^jAp+PXo?>8
> zg!$W+&+TUEJRFQrHX}`nsnV}4Vn-O@?RoM)EGj!)roEWn!bD<!kVPg=3DUOgK#OXUmq
> z1ZeNN!+)E&)~p(m|E*vHN3VOgwpZiEphGZ`sxWgol=3D2D~r{cE*<}=3D||PD#%Lmz1YK
> zvXBg|8sX&fY{}SMe?!7kQ{M*`AgtSABCUsY?+9f%ZBKw6ntXYDivUche^o{wlcpL+
> z8(V;dZs|9!E<)N|Q1;#%gh44fjS<HAtOupkylG}YQ*&f}k{X3pX&^^b&panxxatEM
> zb|Q~+xpU0n;EP1<#73pO*|xhk9p{%m)f0k+QveBJj=3D@EUe+w2jdz*4fXil1m0D{{&
> z6b3scCmx%2a}N}zCf*$iD`Z`20l6BJhbl9CZA(!6-eK<G{m|?{q8&e3)(8U&;SI!F
> zdj@G^nU=3Dk>z&YsUkI~52$*7DdJJY^O**FkpwFk`S)y*}WFWw^{iY*w8^D?Azrk^WU
> zy{XTaNEZ3ne`U-;K@d%(g5-3A21jHG_}s$YUj&z5lJ6%ej%Zg%S6IRPnQ-Xukk>!b
> zL1ZcpWW9}$0C6kDyv!NV^n&)wlXuN~FlH9{&_3x~whs!CQ=3DkURsG2MK11JKT4^gpe
> zWP&CWY7csRs`^OO3tejdbc8>{{LWPJw#m~WG=3DQlae~o(co(7+cTU#WWq4k5?(Q*G-
> zr0OMRP<zyFL{G3Nus_`kZ7!nw2q|4gJ?oZ(BF`1+hL}4ZSf<9)aM<Qv>J_Ki!IMU#
> zBm|_-qUOItD2G5;7c?*%8~G7@mWa;`Cey@R6o-LNL>v@>eePue*6O>U?t{N;RVmR$
> zz{J9he@M5O?pCaZ91W}_DX?T%)P~iXG$L0A8%(mph5p-z>MGWr4ays<vV=3D3E2>8*l
> z8gpko`T2Qhk6Z06{FPgZ?=3DF`M_XDFUaOaGg(arWLhrcYb(N!hO2kI0>Algc~beJ@F
> zV{(I}!CJN9z5-aDh^xd5+;#bil9!E4(D~}?e{ivD#b4Rc%5`gG*ZJfQ(ta8+Gs2n2
> zwewDAhMpk5Iv}ztV1r!33Y?qp9y@_E1HDw3A(qG(&~9NbpUcxt@wL1D47c<DAUUGB
> zep(0*;VSdfIbLK6a(@M6mS(6=3D*5j<QXLKdZ!KJ>s?Xb>?v(3;4i-vVXoHV_4-LSqc
> ze+!?2PE&YAqZ)0hHtw<QeaC}eT!3$Y`X>#P-mIRG=3D^qwj++1Muv0z^T0;74Uvc1OH
> zcbo>j9hsrzwULY(rukpYiJBS}`vOyT9F+$I9YsEor5vWohW(5tJe&hCyG!+A(`YaL
> z0**KBpDst3K3^WL_RW!Hc<`7VfrFn4f14>9Q~o8&$&y`f0duLQ^$jNLQf3?AV9FNQ
> zT|qM;Y_)yT(Qz`YlYatl86Sr)&JOtY818`lbUKxwLj$$WxYG9ckd!hDS<vo4MDOI#
> z)Ss<+EVH=3DDcDvU!a7l2LxP-KW+*eyMJFqF#I2>M4AcLs|g7{DsjwP7^ENn_oe~T!2
> z1i0LBh6kbcArlckw+VEk(xxo{PV<~`uF2V8#-aDgRkMN@sVeB^w_RZl5l`2<MBb&~
> z&GCH}?>6;UMDm5y4AvG5#HC^}<Pn}2_=3D3}~KiO2+8tDv=3DCkriHZ3kLccQf(8HN28W
> zo38p9kCdF~au;fZ1o(H17Wkv_e~t+ct((h2;(2JK;JJCSJ(#L&D&4-IN6@p!0EMrI
> zrJSj3YN`PnSqSi%13a)75z;p{PWsVfL_P!<mLS_o5cG3LSG&>%_p6RfE-}hY=3DIZs2
> zO@_2ohBAZO9P&$9@kk1*0uJE3pXfe~+B-%mi6#EnP*l~Hu;Ip~-lc!&f1sie{+y-X
> zzI3z}Zc+mXia7_cspOn7^hXJLI$!%3E4zWf9xXU%ae_2GZR~yPW2*?{e&7A#J~Eq#
> z-1uPrd7hbvEo|{`e5}FV8r8Dzfv2eH)vwTdM*=3D6guL~Kx3<vOBHnz4oC)I|)%0^H|
> z*~Wg-9+H0a1gzma{hnXae^8^1>@Ky-s7NGM$$$LB4Xe&g(vr`NKM4uL9GI83(7#Kz
> z39<!CjWS1$T)qwnmEbD0(4v#d`<a%XeX!%z7Yiis13C1jMWB1^gigglXm5vh>cAD%
> zM#5sZFk^+)>3q2>d!6Kv9!M#n1vIZx&@-gPat0?8i2L`^sE!IDf9)0!KY{{+kr&)U
> zHM4(r!x=3D{ny|dRG+WSI&6wN^1%&G_MwvmaJj9tui=3D)zrv>tVrE!I%Q$WDN)?QZWRy
> zH^*`?${Bx)3})~x5fYD{yhR=3DR%;Oq6T#ghN4QE@E&JtW}dk<>5KuCfp@$8g8?WA@E
> zLNi7R*qA9I*w17(f4HvT;*l=3DD;qabs#_WXGO2LBu^+5C!U-4SL1ndBPyFv~lFmB_X
> zyd$S4IT)*nY)*uZ`ZqQkY^B<2b|T2#iXAPJX0Yb+gwVq_3q=3Dpu)xUqP96Jm$CM9Bu
> z=3DcbNkP?XMpL7$Zh6UWk-_LB_(Dq5(3?QJ`Umx(rd--uWxe=3DQ#7i(T$3;KJcYXF7J%
> zvxi5wC%>2V21&`=3DQg;$zI~Xr{v2%M1Tzdyk<cHj5`sG=3Dz)GLs0*B|RF9w>NxsV6P;
> z-7YJ@naUF~Gm50J&X9J^E=3D%;<e|FBDp4H-4^=3DZYOx-5d*u^NPJ{FnuxMPRZ&z)4Y-
> zn!jIbKPL7ie;qu8S>4e*pb+<eHn0SrD8WeAUhd`PB}n*#U!0UXQN<UG$1-qpw?Q<j
> zWgH!-jMML6K200G{pW~+0|M8dX*Gq)OLXwYsnUm<U2e>3SZDKp`*Gjf#DYhT<jgj+
> zL14P2L0u2G0`9uFMKZy8d?;Mb!|u^e7b05@$GhLLe?O?qi$iNpKtnY?Sg$38A-s^T
> zVOQaQz;0RdQq!_j`4r{8OqKA27Y)aS`LfTU%6tb;e}qTn(H-DIdTgV^y&azmgGJdb
> zHkK-1ZGexImvt82n0~+IyHz&*ohX>K=3DiBY~8Ha*k<b_E^Rm=3Df+IqfRn6}PddA=3DdKg
> z6HU|We=3DrBEdM%FrqUPwWdOJ^oBa!MeCJf$n^dmDu60;sg(s!hMlx1&NA?{`!_lIAr
> z#4)JkbtDngn6c7k%@M2lkFswJ=3D1dSouB{5BW4pV3=3DXIo4s|1{hTrl()8HI78oM32L
> z@!P54wb@;mX)>bUAGL%=3D7AHelE@cPnO*xnCf8p_fAmQTFyzl%G=3DR!ZOZKau20zpRi
> zE009QC@1y$(s;fk`vr|iVU0Lui-?Gy;14VE?wA^hof{BR7P+$uvT{of;;}h4$f97*
> zW?TD`#5WILlkx*C?tlARq`OP>b1D`HE}gzAH8F|Gb2hr)kMBUt9+$^XN_Do3m;);s
> zf3;Hg4u(e>)JfF_=3DsCPS7uNgbVfv>$2uk)ltc{@5r*lcTbQj#-uLIX5MPX3`C>lTZ
> zA*<AXzJl{+Ai3Ir1t`oU_xP2rz?DRASnFNQM3<NlW~rJB`YOsB59Ygd*Nh|=3Dbgg@k
> zz>k|CcU0Ajo`FEqnZ#N&4%aIWBE~uwf4Z`l^ddn9p6_wRWUS09|7d%L_BEIoT?(Nn
> zL#6!*7LWuVky2mpFP5H(8M5tm%M*Pt%-QD;xX&@*fKE@ohP_f|-i6C`-X*B=3DKZ2Mg
> zz#+}%iJws+>91(R(+F~#X})S1%JqxAXkLgMsf5^~5L4nZ=3D}<&pTv2W99G}v}f13Bx
> znfXuR1;4Piv)<*y&`}j5_qguiJrxmWxhkhTeYM3+*iT;tY4i+^bt*)G4hBIu*hIG9
> zTT6D!j@zIEG~z5Na=3DZ12_v@9HW-AIn%=3D=3D?SAmTvz5;fR4_X(moh_?&mo|pOf!Z2%O
> zai2};%rE_J05Icgowk(=3DL~cQMe@pQ{*&h$pE58VS0tlYZMn+Bt?6o^_BW;*(I11*C
> za)9rB(%ySp@ok6n_;>iOmem+YB9j1X1}T*zdu|4bHrskeAf_d+WRrWKHXmW{Hvigz
> zF_C0%n#oByyJ+%s;bc7*DPi)DV6LS6iSB|<Q$t|aO_(@AyVw<3wgp*Cf4#HfJ?J0P
> z1^n0>`za@}08ulmjPMI2a2~`6TRD)az)>~>n)Ldls!4XhI~En25P@jXbHQyvHC98b
> z=3Dq0_gT3mTNh%GGawKR;QS}u}A<5TychS$;?8_`hyAht|IY$<W1(##h<M?n!_)!|KV
> zZjZ0r$hbgF$*Pd;-6cnOe~o;9EpXu1u<q%=3D8Jr57J;sRB{d5v;;azytbv=3DqzGL1Za
> z7?#G#&&zX!1)eU%=3D(Lk0_kGA_BX-&>MM)TxE+5rbccnUmj|PU}qA;_{6P*iQx9eSb
> z4R5Y_TXVsQ$6#@9T)r%-=3Dc3|GCzEa+T$qgvtDeRDs|=3DR5cm$Gwe@_oH)MBH8o3?0%
> z%pSAktR`<(yLHbvEZYrclp?suAynD=3DT|vS1?d(!MmF5~_Lq^-S7hH1VAVpu4Zw)92
> zKa=3DeR5GcyL&MQnADh;QhFwHYeGYYVGR<2zmtu8IWd`Gl$hyn7^g=3DYnx#G~O$N2u>8
> zXjXVQ|MPysv%<kQf5JQL&wC((Jec{1orC2Ycp{o|S76j6BePJFU;UjDJX@=3DdH$P&o
> z)&3Uy#E6ad9B)J!D9XtUATCP>yu5u~I3L|vK>9G%dKJKB#Tz;xywUc`-!pDZ9U6<J
> z5p47fVHJ~s{#HB6<3&XCehz#`olChp%~ew0I^zy@^;j`Pe<W;vWx0!4d_!NF)*g@v
> z-5#;xpsc!Cn=3DlKw`m|a{pNi-RXg8N>wVuaMbDKYTl6*Z>6eFT3q|O&=3DC4lXie_2A^
> zE$&V|BA2LX4Tg4Y1P=3DDx-9`v10u0QRZ{SYMnn(~;sgB{SC)`fid6($p+4V^zIU<3;
> zS~w3e7v#`se^5+%tT~KeC+1b3GnbH)Q>$Af3)YE^GT5OsCyV`F?*1pM<r^&liA$#&
> z>x??$RRwSsCGY$V$`VAnL(F7GYg)gQ8~<!H8A|~=3D84f~@GcQ#Tv_#wv#!RmAo*3w8
> zY3jOCU8+MT1{-Cj70#4k8Z(&?zI^8|nAB_Hv32_ee-uEI?90XuJhd6#obN`*-gB`^
> z`L<IwCQ=3D4>;fO(cCghGmM84%$>M3^k9K<O*zxe`YU)nw=3DvJV3DR#!|wcMK%yff=3D}=
=3D
> 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
(
> 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
%
> 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
=3D
> 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
v
> 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
oLj
> zg(U?U-}WjmEQ>(Y5$yVCP3TC@H?wBuTxlNIL4Wo24ob7_?A`V8rLu0XI!RlkV)9z<
> zZ$OD=3D{|(KJ)AcPH$He-gs>aJ22@AJU%~&814m8T4e%~I)ugY^Rm>xpAMEuIQ!06#c
> zV~f&f_Kx=3DNw}(1t1)4{KVy8%6T<e-t4w%{&oAEi8C@kaBtVZgIGF5tJbxB%Q9Vtza
> z41W-}Bq5(j43z?4(Z*1jU0mi(y?;o~@ESybp^yLUCtv|BgQ16Q$Yc`<a?5Zma+If!
> z#|2lVWXUxd`%a7iVC19prJk-oQCXC3yZ_~rO9`|?)0w@(5rhtI?sfm=3Dw+Hk~?UP3i
> zWsq5x>5$1*ZXgSa>RM+2mK^oD)(ZduyMMJ)jgUKd^%`Tj8Ygtf!UxWeVwP1D)01n3
> zOv&9o2WZ!;n7djH%CzOrxHW-b$7@QJ7l1h9;zI0Q738ymPMpxb-ppKr2WcFCB0b_=3D
> z&A8wn0T@4xa;aK%^{&(l9o{v8idXJ*R;Vg%?$i!d#0!eQ{RSB8WHlv`9JOnscz?M8
> z&Og)2Tr}QaSOW}tL6ZNKG}uiWFhUB<RtX#i#xfVgNq{bWGFYSZ_WLMhXpb$)<SA`U
> z#ly`I+bt8qY78e|Amt8g#CA+*72ISN=3DS9U2xT(fuCvG+Q1pdlnk%{=3DfuB{=3DB@C=3D;=
(
> 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
y
> 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
b
> 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
l
> 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
pMD
> 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
#lHKf8D`(k%B4*2ARw!In<(C{#)
> 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
W
> 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
p
> z$xl=3DlN#OLkt!9?V3kg|Uaob2}>Pz#87nOq*V%E3&PE^2CB}*Sl6pu=3DQ{hD|!J*7!I
> zf9Ix_Hhnv5l;u*SV=3D7^1)i{0(0!8>Qf3-*Au5+JWC_O$geB92Om+|15rEp-LwV<pB
> zhfGIdVpAAq4TkhJI>@bQBPi7=3D5qXRD<Mp8Dy3j{+xgTp>Fnoo$DFfW3nnRlTg0%O|
> z27|uSY0bqGG=3D(f>E}PU8n~5gnUh%QHf6Zo1?DhZ*=3DnP8vZy7=3DqKr{XG95c8RbeGXw
> zk+Cq`B{v4`LgN+L*p`uU`~SRP^WI(_IpoZZ<e%BT+aba1h+@3TA*Jt@`4hn^bi%-Y
> z$H})Z6^nWx`hFk_&#ZQ(gBTmWBwopLrAOJVYHUV8FhtVg1ljLywQGup4BBgQf9b?L
> zy-seoMgxyS?XL_-u`_iNTBNUcFc-jt%VjL3lxTRu*Q6<Tq^)JlzKQXKt4J%g4FB}}
> ztk)ZPUM;eQSitO%+TcG?ZcsxX!F=3D|Jgr#u!%d62JEj11caulO#+L6Y;TwvW^^_;vf
> z^C=3D(<=3Du3@{gb+;#!&3MlJ2Fe1e`T0Z{Wpn@_tT;>Fo@jkoadtvAFUEIZH8rq13RWN
> z^=3DJGs*G{K(<jSyK*-q{V5bqu7WmJWc-kDOA*MOUwov&nq(xGp?XQD_smF6k4o))4*
> z^J%_wjsVkWvxTdyMA&#dF^~G)Um1?o$EeI<0=3DbBJ7U)w~RO^F**Ax3Fe|j{`vSCJH
> zq23|-c7I(TM6~-=3D*QjL@;y)=3D4$q?da{ip^SgjRDRYC^qt^3u=3Dc{~EdG=3D|6q80MzB=
g
> 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
r
> zf6zP`_ZM6mMX@Muzt2^v!y6{SC-B_qyE>`4Fd`Ack+}*IY(02oNwYFpc~dxEL_9@z
> zDHpM2H!^%azcML@FbBcfw3M`J5t1QmdjY?;-E;<?OiEUGr*D&N_m~*Ut~*S7sEk!x
> zJSXfz{xUDbw7w1L47(%G(8CD7&6D;He@{<230E%+)oahN@6RY>USxw?!7j1-Ft-9n
> zLFC5flABU724?)&*In&)s3Dos?0^nH@CdwHUUs<<BS4wC+ZY>vMjE;2zxxj&zT;<;
> z4I3yI``{j2%GB$NW~{HUgoTnn_SHaA*jUt!m*S_aVVp+}Pf5ePt3t}Oodi;Hf2|oR
> z%diAkp@Ei~Hz@gToO;9%$3tj0iG3waMaghntBHa+QPb<~!4Ul!eDaKlDvLiXCU><K
> z6peEPRttc_p<#PK)HE^HdnB<<N$#PF8=3DI$GEKfD4pyNr~g>9f1_sIpT=3De{ufaX^GO
> zrAF(wT$m|{<S>fe73=3Dk;0BQ=3DLf8Pl*#X^xX>8FWU65x)=3D5JX2g`fmafq6M=3D7w<ue=
)
> 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
$
> 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
=3D
> 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
N
> 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Ð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
h
> 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
<
> zdD{*a(M(vzPdn?6iw(%kr7G7uN0RP}5(<hmVc-*zXcX?iQTK#@lROBAO3;L-htcME
> z8+Bp$m(^n>XuBYy<25>o;`%5xWEAIr?GUayvzu2N!v5fj!R8y(vXDeSm;BxNC^`f3
> zk3Z)Mn_&n06Qgp5`U!zrf!in!HNc(KXw?@1f4=3Dx-5o0w-+E216)>CgGj+l{jxQqW$
> zjP{v-xDHLXI0_hlG<^$woFrJdw$@nO$(7N&??Zn4futniwDrtE^4z7*`=3DGZp_2URE
> zSw)FN_G;hRRTnjaD1!Xps9&U{V!y&Fx_=3DA5VX>TNw`cHUE)#)Vc~;o6WtjI@|6D`!
> zR86j#OD!s<x+x>wgcV|DBBpom{P~%P%O|rMRqk`_96@S-yJGIOzDf|JrhO2~Uauuz
> z%N^z{uo^7nU1e1`o*lBcN{v_~8&bc0+UR?1M*oNrk|X6QW9=3D{(TZaT^%E59}U;G(b
> zH3oxL`^2(v-?3?5e~p+&7qT?653p-A{&W}!ir^|ySMHO3T~I4Vf8fY!ig3ilgN5nT
> zw3*npk3q_RZ-+E`$l2E^iO63+HwCRKl__nfH_(XvHq~$^Ce@jvXAsmtJkyX+(rfjo
> z&7?{H@$FVYP`8;O=3D-9M1UHb`B&EAV9=3DKdT0NuWM=3DKfB=3DanZaF|lLjzuvT+=3DUbY=
>Ga
> z4VnyFnfd6$(+XQL?2IYWrP2Enn7EsXImr6#7$E|GW=3DQVzlTy9uWKW^*kEuMez@Y(p
> z2wmd092KmL{ngO+Ls9tvWO98B><d*&I=3DjlmPB6h6i27NB{##6F`_?!MUYfo2r|^&u
> z!}gKJzlyP&N!fK6uB%wUQGzmaB&UR`fR0*r)%6e$dOCDRoIg?q^ngSmv>N}X#f1;7
> zrazf~>i2-pFirbTu32LVe0W%lG3=3Deow5WzgLJUery=3D<>*x{-UqG}E#QMNZ;yp=3Dq=3D=
>
> zXym4$5fvbkRl)wYRW@RERLQ#%(e%+j^|QKU4A5=3DG8Z^sC$S@gfQ(KsV2sKFI^1#x0
> zfNIPX=3DMDmlXGDvu=3D$9Fp89<n`4+ld$S$8;pdmigr2E`uSFf42giPaTuEu%nOio_D=3D
> z{icpl%u_;o?A$q=3D>=3D6zf)bj<>--WVxP9p&yT)*86B3+Z7@izXXT7$Vv>|{fa$+N_P
> zr_Tj*Fc&&9jPY9XxJKP;L)oxKEP<`9V8&pSc18kC&k1Z*QbT`n#tfevIQ}2Isf`?e
> zJidIgG<0dgxmt~pPYSz=3D*4CmI07*c$zxR2i_a{R-%M*<j{pNw?PDW7>xTCB##RJ}o
> z4dF#>tpDJpsU**J2os}C&!Ud}yDn%$A?u03wN`duZu!L@X9U0sMKdkofC9Jxjk65Y
> zNm`?l=3DrbljMa7-|DcqC_qG8#6U3JY1cZ1v&e`_d3lY`TT*o#TKIE7+G+X|vAAZlsi
> zBubMkpn{xv=3D=3D1|_rA9yE;EMsl|9pyF=3DUE65Qz3O@_6j*#;4i=3DeD-fIFsEQg0oDwe=
v
> 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
#
> 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
O
> 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
e&?c7
> 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
E
> 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
r
> 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
;
> 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
=3D
> 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
=3D
> zHYLGGWnim_pB2aRS%s}dB`meDBF9!7=3Dxt{5yCLOGo2Bu%5gJlNqkqj~r1Mkn)5q+4
> zEMKeG#ip6>`k5mFGY<mQ`E|;>-TmT7baOH(b77DuKa#T)<)+SV$@uOh#bIGAXNJF0
> z0i9GaU)FjOPcVDrr$B63e`R#YJC{3!^|1@+9+<_YelD&SjJCrFyty-OK+t3rq2TKo
> zpfw}M{6(-LRL(4wcKg-5?JPmih(jGK2)@2!ITJ6CVagoi?GGdey%+ebWBi7Cqqjb~
> zx+%xn<)Cdm-d&G@Gk1utJ%{>2<7s!^;RQmocAdyJ=3DuA`Prr|}efBIJ$$Ng{?N!b&&
> z@2r0wsj=3DbqeCMjuk9N*{)}9qAb*i7L*>!lPHuRgckgUg7f5BTlNw%pYx|>cA!8+xj
> z)C(`8E06DRU`<cN=3DB8la<_IA8uA}WBuio(i^QA-|{2~_kIFVsV9f`rTc5a@?*u@nz
> zGPa&s7ZmOaSd&9ae+;vIB$q%rh(6KdT$n5lUa#XWdiM%!WWV7$+}$|8cF3AOWRPYd
> z%=3D+LC0SDy)b6tPP{C5nRSk>-A<n~qT7^>KHw$k|J_suE}WteC0Z89H~RXh7-;9LAK
> z)sbXD&<_nFHum`}21z4^95x9j_H~x5G;CDYt6RZyCDXPFf2s^*`J|it`6DMv2Q+fd
> zB`@dA_|AK5zrIqIpg5GTRH!;^Y0!N(;1V!MGN~<3<R^c}5SVVXz2x2p4)#|Gc6Ksq
> zVW!v^GwYecGQw!bqIKQunq)8HXgh;pFN7tX;=3DsKv6BT=3DY+RZZyLPxYXZEvd1L7OFd
> z#U>Jtun3X6fA@5V1@Iu<L$X6;9(5J3t$?31fSfb`BkB&<^@|&~phO~)kefTxrYSNB
> zxZ|AK9Eg-*BOYz4L-y-rf}Pem@XbQ{J75)s3j*W`rY@*)dnh7}1>j$Ii;r!)^P|8g
> z=3D`DK>x+957lqe^8vElvk@NM;Ovj$X_#pKgTnG^16f4uygH-jnTL}08NAq3V4Ak~&p
> zGlA%TB(Cj&`KVYWa(UHj^b)jfpIYDA##}tPMLYfO#fedRQBmwC1!dWhlhW4^mNK;f
> zxHrIEIXdcd1@5t0uim^v+n=3Ds@zt(VJp}s_O(fQv;4Gb!92V5ILsD&%^F_W{ioel4o
> z?eGI;e;NOI1LvIsR*CQlj1>*+U)`wfpe2ZmM9N{^CeeP!0tn>m2@L0QDmwU6#1E}I
> zyQc6TvvL;)Uz6>{&Ug7<g8ULR_NM4`zo$~bqDS{0F9Vr-C<#1SPMB1{e}-|WFFBph
> z441ie8+3#1?4<A(RXf&5XK5h7@mWOn+4tb&e|H0gBqoE-a1hOx9_{fCJ*VjKY%n~M
> zNyuKm4WIwK)!;>Des3HuC~`41_<PMocbwCRs;m*bxcYSF%M>cDWkVloJ!!FhS{KX5
> zbK6odg%j6A!6bd$7H*Gft3p7~#ZjJgL@d)l$E?rk@m8Y>@5NKw<20OOlYM$`L(X8L
> ze}rGp4j2~SX(ruDV%>*efx((+kV8B0q09d{{l)n3NghTkMQ2}iAbDLt#UtXW_i+;r
> zqo#2nXJSt>-fGeFHYYMZhjr9nBKqP2w4EXq7g*;Bf-=3D$d^8d=3DDCm<A{3%zCwXw9|=3D
> z>Mpt-di!sOUn*4)IzCJce;A+Cah0|Lf6BbhPB_|x{rnp1uqi8{g!t>d0u4%nQCI4d
> zGb!q(OY4`7yaWI6-;|{>C3<fMU4Aw0&&bWf5wBF~NY3EzbqBEWv&ctm%Nj-XsT(zq
> zs-rvV%f_C#D}pf!VRifFI=3Dt@tikW`J4mPCG2o=3Df=3D+>m3;)Gq;)G|5DbrFRpGe=3DXd=
H
> zG?kTno`ROYI@zBmejX>>RYLW02UCU#p3=3DdpB1-zm3!W9|ycHOY^h08|psnE6p>+YW
> znHxn*M5Z+;wazSwO3CjgbNVz>ddld?2&q)8Gu*v0;a(DkcPP%=3DY!S-<)6ANZP0(T{
> z_5G!=3DEwhpN2f)+Vsj8d|z<TrGe@<4Gs-A}uX?(zyQs91vR2ce>tyMj)I_lTsCJu^b
> ziMG58Cpj5yV6FHlBtdVF+OGw>I2`mo;`WcTCq%7c`Qx-{i{rt5A@DZ<khV?5)$$?b
> zW4D#v-J)z(^_b#Oxxlc;Q5IPTgxqBNQuSmdR8zE2qP$jgB%N*Oy>`D%f85Tn+*x*{
> z-fiCCfQ=3D`~8FIz{2czyu{!z^E*YI%cyA6jDnbWiF53k5IlfALH>rf)F#GYCOuP$tZ
> z`3#M_fEO{<3K+}Z2zroa38k|K1gyZP5L$n@$sF2S#A-+6Pep)xFC#180R-jyCM3WF
> zU}~%jeUEO=3D01}0;_cp#Jf5b8*sgp?0#M}_R@HPlh?>d&UWzOTasFP;0nKiB>;{<pj
> zC@~UqtfT>Z1+}u;c|ya*hY3M-rikBm+Z6^aEN9S7e>9gz`PvJ24=3D$Qld#2G%M0`e<
> z5I#0PMkmBTBAT305RQlgNjU8w0ppN$TgXv1FWHsMKXtuqkJ6{Df9`HV(wr8bpPJPa
> z1ubd4m@gUURb@!zZKV=3Dy7-lMZw5LRY)72>B<6j>bs<TQ=3DMU}`a09`1&Ywc$L?s#+J
> z0djrbMiM#-`t~{*BW}MQ@r1I)u^#$4fQoU=3DrJ4XcK*YZwx3ba!sud3e4uC8rG7Tdu
> zlR(|00TZ(-m^wP)1Xq$1G=3DGrp76e}!xLVwgZrVncY%Pdfa1pioDFcyJF$&5q?9-5i
> zsaAUJrng(l^B-aq&|V&`C%kh3%A=3DADx%?c3n^H3;pe|!9N`#EK1jU98WV4HebwF_C
> zM{5|ct_boGBWReEY<qD<;!8rx>w;9p{m8<(LaE#!tR;DJT3{Bh?SCl<6O1WmMhMLq
> z9Yyjg!Wyhlxfa9#NKf!hMVT*RWAMQbYD-Fs*Auz%vY``tRi!_Eam%<y7o}2;^F58^
> zkGW?mx9stbBN-9IrjgD^%h9$rALK5MG0~#?8s*ZX&bs<aj5hXz2@>$hq2?3)k5k8x
> zgAkQ^8sKk*96k&l(|_4{=3DE!l}9;j_Nn@sQ`bC8+Q@ZRWgIhAb5Kl1Y0#?yfYga2nH
> ztaOt4;$lA5ycNsVEWtOa1x1Xv|J43>%XZaHBtp-O{tPT<O!d)46uIV+xTQv~P%S-Z
> zQwpg#;55Vb(DIZ=3DsdIoMYg&u85P}=3DnCP-nTDdtk=3D=3DPzNw)qgUAfeHl^(9)PvM#Va=
G
> zsNR|#`0<oM0m$H!7Of*P)}pJphAV5e2^)>}j6?$>sY4fmTrGMQHnILXkoH!!xv9^K
> zrA2@`G&+K;GJ=3DPh>njLIqdcPp*Ra;CxS3JugUeZv#0G6;J~P25m(&@nmj?4{p0Yu{
> zj;HSEe5;iw34fU|`Mo9@WmA^`cR&PD>Mr4Zb4fM`a_8!rua%?{#hVW6Yt6HWXw4TM
> zAb~rN<6s)u+^eN>g#c*>6tk&m4*mVtSp%k@pFCg99;VtfanqW$y&Uc%Nc;Nw2;SJX
> zPKpQRZlq^MI-;+?T|LeRV=3D~b5PUa@cv@RAbu|yhc`+p_DjViP`Tk{^;zuz*RW;kfZ
> zCp@dpyn_aBCaEu^$1tq^Mlq`=3DP00CtWUrB}1~ROq^c<XM0Q)zaxM96iD;4Mb(KYI1
> z9^3Rv1k;TbaMzvo<G~`esO=3D9txEvkb`|E=3DFa>1sAeMW*Y9KC?$;LZEUVkW$${}=3D;=
=3D
> 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
x
> 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
`
> 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
Q
> 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
U
> zY1=3Dg!6|Gs*Dkf^;zQ)knEh%;y9`D?3{~Nyqb~aD^t}q3O=3D9=3DeE=3DE#s&Muk}URX3(=
;
> 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
frR
> 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
&
> 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
H
> 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
-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
?9O
> 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
H
> zh<c*mGL{-;h2se$*Qq5T*_IjDGxf`}<Fl7S1cv!k|39%p+nJxbap=3D(aPbzo@iT15g
> zGiTjP)$d%_NI+jjJwHiE$~_9>!iQsA6K5V%^IJbBF+*ridQ-XNe9^4!^;3Tagsos_
> z{GWzNaFvf5e(JRz^RxDmhQ;>0i~owRzB*%;#q)g`j19d>SA_J!<%V3J!r3wFmrl>n
> z_tKYW0}m2)1kC3cy&6FxJw#%}V#nx!YkDo1*GH@hWwU@geO-w<WdFv{RKN*1kF*@(
> zq6sjyr*t!C`HBe~_JU){7BPPx=3D+`6^r<{?K!WUuE_%x;HYswdjXN|B2lK_|FvV9}W
> zv2;yWD<3f3{CH_qklJ%5gCe0Q>-18CH|qq8!UlQ-OYud+{NL`AT8R7*An=3D{{Nz3#K
> zbk$;^>m3n|vUnjJRFbyHz2$kz=3De=3D>7i+4+UYmOb;ezRXot2WjN);E9UmaZ7q!D&){
> zt7Fjp?c|c6$yIrkUAc%zC~)=3D;fNSD~tiE=3D>b)DW$6<}k-Q=3D@=3D~qaOA0FVF2N4NTX=
K
> ztj4a~12-j=3Dz?lsf?&Pa|Eg9A~ts1{Aw>jszD@NF)a(VD!wK>v5dkv}De`cuu$AKm^
> z?w4cB79P>*O1%LURttZpus@AB*4EK+*3|$FdO?{W_Vi!DKTuHRzQ#;&?KL+utalWP
> zG<6l)fE(^gyqUu<C`hxmoq8hQ$lz;5U*RENkb57sIoz4_SvTC+iV0VY8(dLW!_sJ)
> z^5B1_*!eOfg9H2DWBSSmH1L+&I&3W~YDgX7`!%eZr3Aa`As&AU<LTH^biCA!6z~2a
> zWHS}e@JeUQ>Ra5C+KYPjD_RJID^Zy6>G!J?og&VJLy_vH4`Kq8k;_zv3+|4<k{Fe~
> zTYpEM9X?;e#y6%C4qUt>buL%-E?`UR9}2??ZDxGH0M=3Ds+D#lM+p;1=3D-{)wECSC}Q8
> zrczj27vjLAtqXs2ePj&LB!@K(h8Lfcm=3DjiXfY>8)HDvI4x&qfjNh8pKn^40Ar!_WG
> zhcNqTDZ2IhG}2YZjD6NH6Y>FFA0LNPYa+5HouYTqM8H!$qRB^{LLu_iL3ov$zb9#b
> z*fHHy-wMFY9xeY--$P(aVG4l8>$Q`ch^=3DiQ)8vu77*v0NwUDmd@N#2A434ads~I_3
> zm(Qm4NVy((8dcOZpOu{p)aQ*{cw7-`UYWjl;NjsM77?wVwPx_lBaCIb^9bHu;DAPA
> zf1JflCHlNc8E5yYA`0(gQ>NIsT8s>o$SJU%caS%W$9^+MdQ!W7s*v%DS`!>=3DIatw9
> zGz|6EuG4=3DdZJp#~un;BFApE?Z-;WYTm_pO%3W`1Z8_W|pSu8xCG;m=3D#^ucB)rG<H5
> zw(4|>E=3D)i8p~2Bavqj>i8_2Hg60}6xuL&V(Orx?M*{H(p?wl~#%8xFwwRKIt8jFlc
> zq0|%Hw1=3Dxr<kxo-(G&Nq8RdB#2GMBd>b3k*%vFE5wkHqgF|$0}fYrSl^VvivNm<&!
> zpG*=3DA*uECv!`PP+RDYg+;Mn<-gfe-4;~$Yx9M@}Fx?^ME+bojTCQFP_b~*3-y_<<r
> z*CZQ52>QR=3Dz3|52|34DZp9`!c%NVjJ;1I3phxYtKKU${A`#t4-@stKBgE=3D>->kiGG
> z&F6ofO(DNn-#bZ(b=3Dl`)ZBGq5MKG)J5)@~}bp+j>Km-`-1*Q+13gj))m-KKf+5?^?
> zjt=3DwGIpAt61C+0?a`tQWH7a$Zyf-PB>yiod$34CyRm4A2bTn7fyhH&NQzZ%TS|Jli
> zAtXVajohxYm#qRw?`fbp+DY3e3fYt`fCGQQmktl=3Ds*lH5E4D`+>elp1j&=3DP5a1tWw
> zZ8CSd809B&&*@SSo#vbA&LWd=3D&TJ_3dZ2@1NySl#-X_gZS9bAXPdY(u3Iw+Ku)dvx
> zFsp-KwGrp%$E%YEnQV?4wv!tf77|P${tXgOH8;#*uQ&%#)G+*3-2GrQx!YoD1Yv)2
> zgj`Y_NsNW(lZGFTi<u(zu#~*liczyQWluEPjc(**ng}~ck>Moj6BxNvKEqzVhdmu3
> zUG0SDa%_H>e8QSw(}+_X<3dhNmQ%0At8u|Ij$kjX!X)M0kpk?~%OMILlaAZ5YGzDT
> zsb+=3D>gmCH2$pCU4=3D?Oi1!L88}jBkHh6*{dpbl_cTwy_f7{}B-bb9j@vvE{EWdT)b2
> z3E@&MMbf+tO;O3Knu6D65dUu1{&39JA#ajzwf`NU%j5>_^kTw_A9tOW?G<PH3*k3<
> zuVw>N#<(?Pj%C7XTx7Iw6kuQu{M^0Rz2#4ZuT=3DGqljdJF@8X41{!X3H;^u#Dej5_c
> zgvgDySDXy?!U|%~Yjr@qp>MU=3DkxclQ+ecM%F(cD=3D@}w++o<4Cp*r*s4sy65}#=3Dc>8
> z7eibjXWu8*lS5PHLX#N<1T2@J4~LY?KS}oKy0yUm?Udz(2>Un&BHX0#N%8XvpTv)z
> zmb~}BulI7fZwgw~8r=3D27j{tuU9TR++wn$8tR4qYdor$EptxnpC_gO-RUd@Zy8!5Q|
> z6=3DqLXPVdqLZ{m=3DdRv3I8hm%ixQ8GQ06+Y0$WuU2nq8q%Wp#cn_rXIcVrp&_`-y=3D96
> zCqp|#o#T0sIkO5nE^3nt%GPz@3y4k*Q$KPfpf|EIuJY)O0SA-zv;2SbHgqQ!#g-Ct
> z+Uy#tY-55<@AG25@<+vw#Z+lfPt4Hvmc*Lq6CM%@X<G}&o4@ZyWSeA{Mx<?N-lyr|
> z=3DhfI!HtfPW|1nSC9d{o4+e$?mCAHvpv4SG4Wg?S_kcFb-0gG?i^X{u%9RC4fC#$&o
> zJdwXNB_(r@+eja``6qwDB!mqnh48lJ-!syExEnEZydc8urN=3DweLK&{Mz~zkht@eMU
> zf$~CvQc8CRPvD|}67Af?R-dod%9djY(oG<PZ00vtpirz<K@j+onIDolD6^B3g9RZB
> z#_Lcqo0JJU#smzkece6Q$m94C797d1xYgraS@3g_@35kpsjq+Gg1wEB&R%{d<vJ$6
> zO{2eIR#IhWihXuoW-`vvFXmL7-GjEk4jJrxfV2FiaIx?9FXBl%3YTg3D!oLaLuE+I
> zRhz+)a_D8m1@Fd`bx*KX=3DP#Psq&6m6wW)v`pkcc|nhj}DpaEKvR+TEp-qL+yev0mG
> z1;kMBoe;hH$tiz1)ZJiHYX;Tha`zwDw4Ipb-)Q1yKc~YR>h_jrrOi8=3D#@qDN5*?d~
> zOj(Y#^*tgm-|5W$UFWATWQ{2xUl%(Wfqcj}rXqTOd*?j_bB(l%Rwzj8X}iPBglcsS
> z5y&~>1metNns_Q(5L7#0h$5j;#md5_M{6%Socvs(WBq?TUQmnw{T%4vc0FaaAfp9*
> zVXJ!ijSWX1a`40YBl<A5stj~gdzhj$J(E=3D?kdW)s|4EZt`cU_xD-RN7iHFw1h$Yxb
> zW71KQ@JfqK4-0AZbFuQtu5YZLb}nm+)RkHbk3>EhRpc!i+g$g}y3hvZlU+SQK4m;1
> z5~DQ>TFQS6LO4GXr>!X$jX7=3DBu{s_5yIG=3D9?h07)6qdp=3D?%3w%^xbt|`;7#kH1`=3D=
n
> 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
x
> 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
l
> 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
;Px
> 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
=3D2P}V
> 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
j
> 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
z
> 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
l
> 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
&
> zM;3E;K9MIr+euM$0>Q7elFcA%X1NRaOw!%*8XAi6P_|dN+yQ^6h~pQfQaEb3e<Eq^
> zmt01eCI2cS;W#NxrwF<3?Kcp=3DcjdgJe+qyXVzrb!Mge<~O2@yTRjMpcVwhffw8JXB
> z#&s#aUs(y0HGJNoj@tWzIHkzVa3mSE@Axygtv1lL#b=3Ds|upA!I5cIM32`KbUOYp%6
> z#N8Jm{2VTnGLU~e=3D0_ULqH5uj%fZD^I)Xqo-~)%S!|~pc<I$4Ig@(6QscQmBg6l%v
> zQ|9K16|)V<Cyz=3D9n587fjd|@cu&(|0jW>j~Q;=3D;zN^i9gqw_nlR<+?vfX!HeWn?)0
> zam1gc&hZs7?i#H4Mm}QI$CT-<WBwQ1+fDN1+;xGcwjO_yH<u+R_5_R*8FO{LpbsFP
> zN0Y<CGNs>Q-+q$>-0Lal5hu!y!Kj29dC(e+N3XKE;KUA~|Cp?9*%}pH=3Dttoq3>gS#
> zxu{%@az>Y4eUDt&);eVG6$YF?N$<aACStca?u@JgxxA&{1T+&p__y#feNXioCl0e!
> z(H2>0_eXzr*F4-+f+~2tgIX2E@-(U#e4{uNvT$U!mmHiI*x(=3D?p*e;(J1HQD0-rz~
> zmi@Ya^udm=3D{2U2hP=3D)aji`<5bc`x%!Yu|1PMwWRh5^5KwNJ1aHvM9DAkH&@*2b3rq
> z`b1%9lWIAaHaGsiJw(m&Y36m1FS<#=3Dm4~}DbLoGSa;F2NkQ-AX_ypBXE5f<urSkTJ
> z+>CKSw`^zhy!coMQw}SkE5O9&uV`ICYZt9aDKw=3Dyfgl?vQCuO6X!<PrI7Q)Utt=3D-p
> z$}=3Da5snhbtN=3DoI6caT=3D>1n#R7`j}7>#z;t9X|3MXe5{qhDi=3D{vW5w{JR(w$lzPcs=
c
> z)zE)41C?WZqoZ@6=3D1@F1tK@o_r_3VVs{2tsFa9GhFx53PT~+8T&}hs^Tb<*Kge(u_
> z{=3DlYikvwr3v<+fEzXe?IjB~y6i3NgApCzxJXc)Lb4y`0PtOeBhDyE@^o8JuM+7lPG
> zysWeDPYf@rr9%Fa0Gz~&(%zZf=3DxAA9H6njeavK9z9`_f)2L-+Z?}~K9yrb}=3Ds7DHw
> zNS04Gg~7_yYhYxi!faY&X2p>7nS-5-XQguVOR!pBYH_+4t0-ahdN%l-ezN}poX;C=3D
> zlL_y@Q)tWxPNNOu@BZ13xHe%WxGvLY9vkWpEhMi88Mr9GsKE&DL1~II+9+2jleK@L
> z9vVkakuPk19V^IMRV}-(uaASRd;j#9%0DXHqu>&!+I@O&E18wBz36}OW-!IMoxJ-v
> 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
M
> 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
T
> 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
2vr
> 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
=3D
> zGp3KX&|EOCeA{C$t^}T+4CbmU!E37?&+?hL{Y4}KR~<yw44<Q#`plb%PaM=3Dz*G2V^
> zqZqz<ZJ92dq^CjAz>!hZ!m%wJUuF|?!%8NQBkuh%{#=3DnDzZ!GN-N|(ibU7>pvxOUr
> z`%1FK`+urY<SRC5-TiR{EC;yefo*~EPs2PXnf+!Z*8|33!QI1SzSeit;%1~AoEJR8
> zAs8tAKdg#o-cXf#XAnc;zkG|f3LE03ac=3DSi>=3D(uL8fLHv69MT#+^bCq!45VYq&uRq
> z;--}VndMux`EHO0%eji0nw@Gn`a%h;HUXs8Y=3D6T;)r$>@)_rXF&Zm|`QdE6vPRdV5
> z7!GS_#%dxohhC=3DTY>E~qi{_&Gn5327?Tf935H38=3DeoG^Y;}11D&=3D;A`(jcE?VgjD=
=3D
> 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
S
> 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
r$5n#
> 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
T
> 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
}
> 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
%
> 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
z
> z&<AlytIq@u!7`b#jH5wCrx2iBKkW4F&Pf|#{1TN4A${;N*22RL-9CI>ZF_$@T}YUl
> zSG=3Dx!v8gZ<2SkHj+i)J`{g2PaR}j2?$#p(_@&?{49jfug@|w^nw$-0Kl_NjEBt#YY
> z7j(m2fD=3D=3D|jGb~9PoMOfgH8`Vq_^w;D3>rwjVOo^b76^K<@+P_7Pdy}d;ap()_F^-
> z!FIkH@0LD|!p%;9Ntdm;8kv7<sdu%>!s4?_@H2Y35Q(k)QM!*n{mop%*bO#=3DjVPxf
> ze<5<UljxEwQr?(EcE%06)#(_eiA|H$HY}pQ^+&ff;@NaNeHW-T6kdvl{+uJIa7Dj2
> z<1&G*HkC_r3|uC&eU%HCgLNNvou)^J5&@v#{x-qTtDY)*+Lygb=3D{J9k*)8exq`Wso
> zxWP6l6s7gB5<)ceX6}i4#hM<2UXOJp-D7A7*%V~ns%~*yMLhq%)Z`SN(xB2H0f%O^
> zujwE{u9Yiz;71TfX$Dp6O~vcRV;A}^;y9}5XXJkjl-(E**uE#ywR#Klw`@LjQ$j^c
> zuzr4Y$_n>OTdPrn0w90BBIIln$j(ueen`v8snWt`1}~8-W4_yd_%C7-CX)Rq=3DHEw#
> zHz4hGGO7^((q`uLB2rJY;kTbbT_LF$0jh?f%zh{5S|v4Ymz;UPMR<(rhLdZ)b1p9!
> zrlv`g5f7ze?^7qGKyr<Vom+I{PgpWa<AK;Xj5g--Z2ilZv3-A#ou|DpeW|pjZ2$M`
> zY!4$S4^*)w7&q@&JCF>>7Z5eX&xxt~7Bw+`a1n<Qtqn6`t}a--TS|{%_GZN7r(XOb
> z9JA}4h~$^i)0ePC(p7Mjn9evv64S@rw<ZntSCGz!VjrYp8KA2trx1}yX_{9a5r2MK
> zX=3DCSHUsZ8o;~IY^c!Ke@oU^(!=3D+Nm<F%XOc*qm)&$xO*)#_)Uas$qmWs9;S0hkJ!d
> ziiHYV8*%8I&HT>~-BgFA8oX<DQrjtAtW5a;L1jEw1Civ$OSIi^PA1OmD)f!v$8720
> zlYbD<RL-CWruP@R_iQu&y`9+)oIQHEU;l)quLONR^5%bKzT8llLI;mBAI-^nA#~31
> zXhR2M&Djqu3bW|Y%fbiE>f=3D<5Vokmcs{uJnV*6EZqhFc+RQt@*VZs^Z3J0nB>OmYy
> zVHy!eeh1%-W1Ut*k#|c;sKSvAQSAqIdmunN10Tb-HsH`!nD!&W1&$`KgqXR9yeOFI
> z?-0Qt<)nWSx@e(D7}M=3Dsfd${x;7w*qA^}lJE+U@Ml>oxol8e6mu@h1Tw=3D6WuE+ij4
> zGH(^rBmn8p7m~0$ccUd#`%Ge&e?yRch=3DcF{GDQ-ENMECIA--Bi;k#zb8Qq)Ite4zF
> z$>{fw$&0MV%Ck7|QZKYRBw^}MV}5S26;`K>x@LcbwDknU&2f!vl|Oev&Hzftz9r=3DR
> zeW>tp>GV$bm?@fFMc!CBlH@5TP7zMy7}*ISRmJi?;OZJmik)&WI1uujR&vyZygk_A
> zn{^3{)Vurp6i3NomGIOQ{3$P{QOLKe(K6<vy9=3DWV(YPzSFFh#?3`KygfPP=3D361BO>
> zCD?y25}*A9ct-Rmy{M;MgW!g^6aBgtS1~=3D=3DXA37Jb}hshQ*LErymVzT{bRp0`<y^g
> z$H}8sgsV$J7AY##-zXj;9FJf7k>2}^OhT{BWq;t)jnRTsveZ}ktx&wBGY&+Rc6giI
> zU-)q)@h(k#+{9cG_8w64Jq>qpJPehAzd(QQ{lzr4Uw_X&XwQXuEES55Jl7yp$&!XK
> z?066d`6T2SzPwWY2eaS*M7JZeG}vnzzh>F&31AnX*sjF|ib)EH<T)9SK{mL+q&<##
> zNU34C2&vM=3DtR|QXsbT>|WDm~J@CyJu2aB}_cQA<o#GRsmERa2~CWqXx>%IH@{BVD~
> z$N3)E2eEwMs_BnYn!h|2K>C!WY*gW(sHNG8Vmz4Qb;~q(O6!Jx%yRD7_olJk!lC*f
> ze-NDqzd(R^lJb$0w3_1nl)Jt%=3DG4EaI;JhrvJ~BaXL@Px&~5_G@8>ZV^ia6neMO{m
> zhQYo4t_CPd8Fo;(DIYtcN3FDG;QxO<b1~{TDlq_|)EO86Y!s0_c&m&O$2&rd3k&(9
> zjRd}!p{$!^&&fYKh_YtsjO5r4&a0DXDqC+~*VD)yNkw}ep8MH4$lXyWNcJnN$S6!P
> zT$lzCE05GkoP$I{YoKT{I!&g@!SNw>Gi`Me(qEr#TbLtNy{CcT*As6M6rz93xI}U>
> zx|lrwe}n>`<1BfO30;&*Ff~$pCia_Wta)sfUrAjcv<h+oJ`a~^C=3DC_ewiTBu|CZs&
> zihnwEV7IGP0kYJET)LgQ_keesO`f$b{SG*3!ZULBE+)y=3DP=3DMsYt(zh5yLKRC^pXW?
> z387^Mi{5B2n+)?-qSdzl7Z`t%m0SYR=3DrnC>@VD3sXAbM63_;@7;Y#ZUUxrIhvQ54D
> z8GOMW8P3Sj#<zNL?5t|=3Da&0+92q08NYjJ-6`!$+gL|tnaEKmu`RZLy{fWhL8w%I9y
> zDhw@*k?2Pb27OC}t*;>GTQ;+D-HH@y`7-AfnCyIN>+|>-BN@y$#KwPEFEzJ4c$<A3
> z6OA;k0&ClFu$?K{;=3DbI8i3ESP*V8MNCs2Ia6cakn58#=3D2tuhhm<dEeNyyr(&z!@__
> zlLO<NkVd9zT^y$m`P*)D5M|cJZY?T}d4<TnrMdVVZU0uyce$(B-SVJPV*MLvQbRTy
> zz82?Nvi181z^dioIzWFWF5pHrUP5UoAjv#c>cn)=3Dxg{cF*Cl?UV_=3Da@c*^oJ552s%
> z3Zog`!9`QKKfN`9n-}6V5a#D&{`&0_WR2cmSWYJT#xmPY<J=3DAEX6#`V8kW?$6i;XY
> z1{`R))XYiUq*nxUEQoA)x{?y19Wg?S3LB<D2X(TY8|j*kOXGj~<F34x$by|z2&M+=3D
> z-{BV~eKdB;6$C`+9nLC)iz^GzJW-mbst5UWv~18;`MF_ber-jm5hlGzTQG#0xz*b}
> z;$I(vdFp1vZ)vFPM5F9-=3DuDQNCaFJcZT3;JvasGv{?HBn%MQ!mYhW4XihR^}3IKN$
> zuQb+PKryCcpF4j`qbmKOf3(YNi)C(qPt2Mn0N85e^<nK#uEWL09Ft7E&bL?6y2@8V
> zH2k4;1x9jPyQGsD>A#0zaEFECoXV28hJa+Sy=3D&!Ze>h}!@y#}pn>B15l<r^X6tN!%
> zc?$xa8;5!%3C|Esb5Vbou)Ae94((KWk+KQhOgq@y&N+Xca1T4~*)(R0FW38K3uZEG
> za3b|@1Pc*H@EQw@8_RPb+I;VH)g5?s;`FQL@?b%4>-zKq&_fGS@X*`p5py&v1A*W~
> z9bYUCT4Bm#fEbPWM=3D(6nIeQtaptASlU2Y6F@?7}7BUe~)R;8Q4UA$=3D-Lo>I+BufW=3D
> zryAFx6Z3!aOlz&8TH)S7%8Dv_NFLYtGfgR^W%;!U9g@B>o=3DuLvERKcPd|i%1DS<50
> zn&zEsm<DKA{Pgb|^L-d(zqt=3Deg&tCnSv5y?qgNHLR)^>EO8VW+f#ow%2$y@?fQ8+0
> zwl}ye)S-vF#6UsT@m6##J0~_yj>~Sv&9xP<zjuE>$PL)mxpy~)1hIKp;0p2fOWfmR
> zkS6HB0=3D9R4K_55_>uUBw(^(s3i;yr?Veftgwze&;EdWD0d(Kq(!}Er<DA-JQL9_)J
> zD}Ch5Ef8$&n<yyBwvM;C!rFg_`YZ6Za1IxO&^WFwdiHOeAwA7diWhi%nk9}x%yg$J
> zQ~ZAfzJH5lMFC@B_o7ZJg<(O1r3?tnEm$mfxt4$X#uBRm(`1x>Ed;j0rRrq_I8W8y
> zdSA~j=3DZMG`LSyWYUkwoRzYUM8U<k5QJ40UCgTUoIf+T3Q1>b_#>!}pp@m7u%&QCqV
> zBq$1$VoESYpi$?Of>7V<2;?wPBITZz@MC{iwTxv>5(f7Kd#Z0@kwJO#L<JEMp+WEI
> z!(L^tE3bTFSYm;c=3DcP<Hb2B_)@|-=3D5FU;XQ>(e+&xv2CXEzrVqoF$IiWh;)xYn$gU
> z!Wb-CvC)r1<$I^;wS`c8K_-R(fKG~d2!~=3D+66^yh^gQoU2KOEBCF$e=3Dz^x0f7E*tI
> zi=3D@nyDOAMRB*bOx^;E>BP{z6>nGU^z1=3Db3Gu8K+6meCGrEmdO&0u~>_0TN?mpXLN-
> z=3Dt@jXp@v4c8$D9SZEthE4I!qQ08oc1Um}g~5+kYZL*)D;@r}@%r5^h+>sbaO$(Z<7
> z+rnOngYlAb<L10NqAf)Nm)^*DP>6qr4K0mG7B<2otw9UQ9L*5ulyEG_F-h#UFo390
> z@?M0@G{=3Dc&EpNokZQ|pYvgW9qQ~0j1yLBDGi&GEkgdhFmc<sT_p~#wJH^0`6_p(>B
> z{>BR!IbidTHMinM#jT}FgUmn{K#{r5-v)qIgcytD6hbZD-tRDG$0Cq&ccFhPhBWcR
> zGBZa5W=3D(ET<K;C6>sehOmQ<rc`xWsTEc;Cw#-6xyrM}1bEEF}uyRORb)+25LSefF>
> z!`6Ob=3DO`;yI8K~WqM6i<W>m%3<f!vg$O%t<z#<IqH9|2hm0bNT`NKz57W=3D>IfDA1S
> z_C|3DWYjOuFR%ylN4bT<Z}opw1s~)R`_Cy~^8kfwE3qDOF_~HrAwMi;5ny2Sxct(e
> z+@o7wM;6t#_Xor8`_A(-qB6aXc~mj4@fP)61%XfFUl1~qUND?xV+LUcE*O^v>t|;-
> ztPGh<@8)-VH>h20@Zc`B*MHzeDS7XH1-0^bl@R&uVu=3D=3DW;+)~O$Y*~c^9u+lWqkr8
> z)XX|Vr(dIE7Y@kgS$MpmkiVG4ScipsllNM^wT;J`PNs%B10#oL#9JvWR$Fa3Ksg^#
> z{d}PcTq#6a_S$hFOKtAr{#{)DXzsWsPQg}xj<d!Vy5w#r;Np#9jiEHaR;lx$D#qA%
> zWuMMEKZvi>%Qj5<YVv=3Dz@Y<w`D@L}lF=3D^n9tHSa?Y1YvT)VBTv&*hb1M9H`b?C@>#
> z+nqO0C|ILHJ>D!9o#XM$E^52MZGLEQ0C#1C6bD{NCnxP~kcP+OPuhkm#V?+2MKkn$
> z5bq2!*Yn+<=3D(oFwk88&D>>&68Gc33Ff<Wdi8tvFE6LDSXRK0)Cr;SM@QDfOMcwb%d
> z6l&5{NZGZlcR*?3&&q2da^ybT5)b|Yg_{|^pJ)l`Wfl#$>hg*q5@$f{mwALLnkc~e
> z=3DV>CV&D%btJP`UbO5N5J3l>{PJ_niv=3D05oQ1nkX8H`z93a=3Dq!N$JZ44lK+TKbrS~g
> zAw5a6$LTPv-+F%=3D(+X8eehF09AtC;@W>_K!teo8G-f~x5-?q*aJbQBU4Cn(XUn`T8
> z`<$#<NG6_EI6blU>s16}>dT(Kj#)`8LI~ri@ZTObf1a0@sIK$`Zlo=3DLQgH+d_B?~&
> z;gX2x@|FxT@&97WV~m*$y4SO}n9Uje{xD%>+XyV847`6`UVMY3#gHuTCeM=3D-Pj8<b
> zBJtPmH|-XK1}1X_?;#LZ^By?eHGt3`oS)5yoi8=3DrsY1;tQqu|EpYg%XMTjA1DJQY_
> z%4(gJp7-nFkKl#V$bMwWb)C&IA5shlY&39C-ZPCMVW<#N{#tL`eT&+sQyE=3D~C$1;O
> z#=3D54lC=3D`FoXI#g?|9hLYW2S*fCveBV|2{PUuR%`P2vUK>mSYj<Fd-NaF{+oXt)+PD
> zTqo*}UtWQNi|Xhp1@c>@S?a-jylsxer&M@o2XrgHsno{(Rph&jwT16~>@*ZsBB~Y#
> zA&~TcmJT5mUt7jn@@j-fE9{p8!wRVR>=3DUL&6}o?4DL)dnBsOlqJUsHH+pn&8z3gYZ
> z`8n!n(J#ale<=3DRfUsvwkf-Nv2!_|rR*65My5KI`bk?y&Dan--`&`=3D+?lku2i5UkZ)
> z$zApdRsoqEooG0Fk&ZLYu|y!nPH*+D0E8E`VTA1sHhpRxQI%;FR%eFQ5c6HlJQ@%!
> z<MMw;@3t5aUg4({{1HUgB;P3v6Xvl#(EZ&>Ta-4B#=3D-yit}6rHu~xAdS-hMkBr-V@
> zsk^1NV6B7Cxs6<c!4o?&03*yV{EJu}i=3DVaX#6j<tVWi+GD6H_a*TDB{-FzIe@B(RQ
> zcF8V?xs5;i7=3D4Pl2@dEel4w?{<P~8&Zh3!PwWlN)^?09+&^`j+$Fudcqlz!`WQ~`Y
> zZ4;zwLeKbvN0bZX+-$GDvsA|Mzv@wvUw*{=3Ds%!MfzyT)5XC5ONK?`o0Hy2O+rg<4E
> z(L-G5ffPro6L7Er-I8tNsmI`}+|TKrq?T1Fh1eF5Eg}SKY_LIH3lSmNiNjHg^f7<_
> z3o5atn1S?_+gt%Z(OsaN*#B`Fg#J;Ra-UquqT_l&#a{A_1|aDmiKW+rJ|fb?L8QRO
> zVC=3D#ppz%>M#DnT|>#b=3DexK7+AWOh|jnxI|X)aGv=3Dn{Vork?eOaMkq)sQaVz*<*8{y
> z<5Ud#8;6;sFXPdyK-{*bSTA&Y5>0>T7$-jb<~(y{F-v5`irokbvelCXn;sK4i3e!h
> zL<CL1Lq*-2`l~l0e2l&o_fljD_Hs}w7y&y|$U6zq2_o#74;vARb|<?H-)y&$J?|$N
> ze@S*;$?~RdCV;Vv`${2QC1r9?BoVvZlaW+i+yZtpVg~+5N2*>Ec}}e0j~#!isXuNp
> z%9Uvh!}kMtlN`LY9_uAYZ&w`uu#TG;RG%2aL6GJUn80!3bn+6!Shvn%msl@PV>|FP
> z?guUPB`aC}%!QnL+`iVb{#za9t{4>uRouHn+)c>p*?Z7fj{6^}#tGP-L@zj9%As23
> z-p#f1aC7ww0rjUQLT_hU-^_o3iSN|DqR4V6)>%DZ-wf{d+x^cb=3D-B;3je{IP(0h&7
> zWaz<zKKy1pUBd&{+yeJ&f~Y*=3D{{*s52DJj4_|qhWcmlWKaH4`Dg)v;|-apF|dTxKu
> zw}kY@NQF)7EOr4T74goZhu~(DY1jRGP5?(N(j+<D)cXT3Odp9YeXxJJU${-g2&^-j
> zmWEZW0+E-nEwqRw?3IS<1AcK(g;CzQRtlj(W=3D-E#LNBkOd-=3DNx+Ot2ZQBtvz$<;Gn
> zSDQ6l?~lhUO$T5;ejDi~spB^Cl<f?wWu}5E6(#FTE=3DCH4V7UhZQHmG-6yZ<SCQpRp
> z%7mor=3D6T#Fkut?D0^5I|z$m<^&$U$mN|a2Uo|1a>;reyzeE&(e2L)K|RNh9x_xF<p
> zHedwXpet26SF95sth&nA16IBl<)?gDnX4(s3m2Z_qyn*{8lG?DCPGJ!);qJG)YD{U
> zW$hV(oQgzUYaYxjdm{sm(uiv=3Dy2*U>w0qIeP|Gg6fegiiHT-|fCa1n0On=3DcHsEXMo
> z?w>#f2n-O4>}W&^yj0kmT9JtscjDn#t(}iuJ54Rx<G}hcd@`;)5KTb9uW#*V?Ra`-
> z&-ffEnpNp##;@DR-mzEV>eHLS<NO5@QSpq}bs7aA52|K)=3D&|;-(IcP5AR>uP_^Re%
> zeo8I#AIqSMFLZxN>2ZQ#@k%FlBfAT_*gbk-Q=3D)X<K^i!JciBK}#1f~&htPSN5Q|R1
> zy6E|Jgc@C*B}qb<l09<_*t<Mfr|Ix2C?J1|T~Jm`CbwlBM1||0<gsr&;5OnG5_B0~
> zEF_>4x#x(dKa=3DgR+ms%SWeJ3@fOZ7rjbYymohmj_zEgiuR=3DrpL`(34XtJgk0nyxZ6
> z3Xk0*f~wfx(kLRAMw&B=3D_wGim=3Dh;Bm3BwSAmi?4snxl~RFDqYfUw2T$FvDqg4Ld{B
> z{gz+e2Fz9w4=3D`vbvvFubsge1p4OSwKH0k8^im2ywJY~s#6uoCJ$w2_s?~jD-e0I%!
> zBs%iNXYzj~fFo`NCM>N|a00sO;qb}3;Vcx@!od}orvI<A%$BQXEtwC#L9Oj*Giz|%
> zX#40lPKxsKpt$j%^S%X?wfIcQs*|0E2Zcb$F){Q+R^qVppG+i$D<q_4!-~AAr+AX|
> z+$}K~o|h(%WKN;7E^u@Z@b9+NJC&|X_1E0Vm_~mSD@+kh@?c+vJU0B3d@#X=3Dl((Ig
> zDSYQyL3DpC-nss5ZNh6EYD|@kUiS(qz-&liAZyx}lc1bTTT$R}Gc|g|YJrxaCqk{A
> zqH4&KmzLj-Y#=3DdU&5%W7334>sN)jCjO!L!3CQq|JKP0ojMVi-+sMOT7xc_=3D}$o!wo
> z3q5}|nGgrI&shlwlc0Vg#<;Ntqa?zRlS-pQX1g4fvyl#;g5AdRC8aGK=3DimuLw@p{Y
> zKq6UQA)E48sfLLm5y^x-;85^NuyAn~Io5dX|0tNyT$XxZ$BdR#2%H2Fk${%n0&v9`
> zkYf|Lb-{C0&=3Da@7h7Bc<g0yxj)y>Fln>BwDb@9n6cb)5-k+(gYVP+#;;%lg(9+UN5
> zO=3D{nyEKXL#lVj1t@HX=3Di8ox#%h8lv*-{hw8CL8`zT7rH2@QI?l{g?ZfUOEWnV=3DU#P
> zk%D$i`a?Bys6=3D%vU}74K!zJVFDwa6)9}X*z$uDn{wxbQf5>KWnp$2c7yTnIfxrl%L
> ziZU2D5AwGJ)l?-^HXTPP0D5;aXxv2F(TQb!GIy*-blc7*Wf>1<A5bbKZJ^$p>x#`8
> z!V_p!+xzme%H;VkfcYdK2ungHSI%dX-A*|ewxZdXk@EKjH|lfJd~*|_aJv^AXgT;5
> zJyvwG8da+CsFnFY?d0LUY5uy9`ptiM1<^Z8AtJO=3D#PSS>JpM#;<w)vCj)*h~L3Z%K
> zzzvhqX4n2peTFu^GT05Ff{bj1$1y1u*gLE(wR)U&l%`Z-Gr&%{$8zX`YDvl^xKAH1
> z<B7jbCXfdM(i<)ziwh|j<Z2kloS?9J<Lt`epsoC%E5y>@4pFehB0F%ebqRlTtKAX~
> z$*~L<VA0*R8<!#@7wu5Aj+G_1gQw2T+$+OkUR(DKZk`SQC)$n4a9(Chsu>ScT(Jsz
> zQQg)CB-S30;_L^T<I2(4uf+gdv63mMj#<Rv`0F@TEnZ(ji3Hs3zJtuvU(5stToRla
> zgU{Mj?qtagLa$}nlvW>@ubO|479xHGfyW73V*2=3D$Z?ku{fvJbHF-P#0J@jaM-mWMA
> zb$b9f;qCFPjt`UIg-$=3Dl0yRBv(C5M|<zU~q8Nb@{ZZ%K8WeffP-~+UF7cO!gS?ky&
> zYziTL@e6CzsHwU));E3$U%mOn{7xSrqmU1Se^M4dJuATRdGz5(&J%xy43=3DBNgUeOJ
> za1P1T8<a5HCH|4L!FO~p<+{S#RLn;@rB!_s@rKX*`Mg4uFF<@^({*Zn|ABE+gXp`a
> zP4=3D3f3?cw32_2|{2?Wz$H(fP>aNFnVK~Pytqm=3D(OSc4(%XHdMOD1~MO&U8Dg3tHIX
> zR82*5z9PyCo6Kt(`;LDm^bEpXR?A3MHC0|Ps61xn`4)HIK;KvYxC$XtUBa@VKe=3Do%
> zARgaMr=3Ds^wZ@NY$0B|yB$_yFc9Zr&9LxwjcAju=3Dd+a`om2A<@R$EXD=3D*1!zSfPSX2
> zo>dCh^@$8aGOo_nHHm?sNDt)Xluo=3D@6T9s2QmoKH$4AILVOxI^ea8#L8L!wyZ+q!1
> zpKGM3{rnO_m(vMK#p5fe4=3D@tHK<eS5F~&1CG7F~-GIu*l!q@5Vby0zFXA|~6DOx+e
> z9X)#Lyy6WY?tr7+@Zk#R7{hi%8rU*PPreEV0I^^eqj(fKilWt5*I0}HSJnCiKKDC`
> zp3q!iLwKBTWZ{3}UmzuK^;97dvHQR<8iHgn%Un_)3lKIw-z%2bB9{}zavYDEXFyG~
> z*^rKi&Ph?52Vd8NvPhsM4zB&l@6|G)U*out_LV%kngH%V1`5Qar~bqa^ybYK%fE2d
> z?a!JUar+>%HbwzOM3x{T6qCTW!<hdQzNGz(frT9p9`b)wZldm9nor^vyiKP71ngHj
> z@};>yF(}?TicI0UqLlHJq|Z-?L};uKvb|uAB$Gh>R#&csBK*8f&*rz<-WZmUhqGX6
> zeC$!Rcvy<@jF$uDS&(@qd^A}`iI}duT&u=3Dz?P0cOC_M1Mbj!8>w;O4^*>pwbq1*TC
> zggg?|72|);4K?De(JddVyYbvKTbCQ|adyJIUhw?nEKgY8eZ_;iuh+LH$&4i8{G86W
> zsAOArHxX_?ME<+ZE88aZR;Fm5aU!*FIl-3$5v=3DXgHHYby=3D_2=3DG#)@h{9l9{>)ZrV%
> zKLnE@nS4lGENP<=3DwPKCsqN@LLwe}&Kc?KKWv44MhJ_`ecRY;@G0!I;pcA>H=3Dzpus+
> zl6y!ww{9Wj=3D4A1;)CAv;+FiN`U`nG<RF3RTtmDo~(CWuYr{2%pZ|0h}-r5AWHFWJz
> zgYbWL!h>D`NNs#qeY}x}t@iMoypoTxN)`Hu*uYk>lP+Ml=3Do=3D+YdCF^Q+gwmlL0y0M
> zgbRPe_YexkV3pfl5JD>-N*NTcPtFQ>mLQ`by;f1DJ*}v0^ElA!UMP~p#sxi1dX}v0
> z1Np><eWM266R^Jkc)1Xwwd6(uU+&eRttiE>32I^z0;jI-3fOQ2S?~eX;VrWOImy}(
> z$?aFoS@)H&sfz3T_Q>49__R}=3DvB&{=3DMht(W8>o3su}9uCP{MdDUu|PtV2wMw&B{VM
> z>(2??Q7QkFi%kY!?+5m7Bd|}dkZBn@6tEKBg+0I|!wVY`ps54qg{<R)n-UzA1|(*T
> z!v!(Fr!^Ltqe`4e`Z>*9*&JoZl5&;fb%{N}GFtlMdkgO$eEXom)hlLbs;9LPy=3DH%>
> zusnww+<vv*@b_Jl7sX1zx+K&R2{mX8jQs-#NZ8tU2Usyq3u4CHrSLK3YyRSDQ`mBj
> z;#}hNI(k+d%zLn+E=3D<~M4VJD-vVK7&Y093hH-w8E6Y`Er-J5d?rdYAH5Rn(o+9Srr
> z;ZbU5R{$9(q!>ixV9C|!S`NKUOu2u92Y#6Zoa1F3fZMh;3dz9+)Axop8?*r0K~Vcl
> z;~Az>!D8e^qfh9YaZGHDwW{xrnM^F`)9H}f#*B|RH#BO}8+*$`rJz$+o69lww8HPV
> z0dlKPKD`9u-g1&q^Q<lc8pnv1WLdl8F-w*bh`2kLh%Z=3D#G^PMOK*GQJk?7&P_33nf
> zo6T^Z&Xqgv6V^M!{@qx+I$fGb7dnNv>o82-?zqRMe=3D;)Xr7&R3zT@F+ve&7S%PZ>{
> zsjYB`byoH#rT=3Dklm~B@BNx2?6OASXg-n01wky|J1zPoz><feg6`}XCFGxC?lVfGn7
> zPtdIu!rZpOcA#v};o+=3D~@+^Oqc6^h6B$_Wo@w(4kZggCOuX$aMSVaz`A$AV&d6u<@
> z_@tT!^%$epm9*ht2F_XlxMV6GdJg7o?2wu#om`9ZQBz@@EfZ7U_s9^~thWym$K$aq
> zFW?+ylfm_0-WrXy!rO6mNOm2zL<f<?3+oQ|<=3DF3u@*8+g*3T`%E9ym3)eZ-L+EeXz
> z=3D#88MK`Xy=3D^A02xbdSe&t0rDo8rA9jjB@Ds7iEE^ma#JP{}vJQp9diU6i9OW3p{}V
> zmw4yD$S|l4czuWdGDpoQ9?Tfn{)+Qcm(K<<`quq!*aQfo7k*mmxi$UO-=3DPK-2rx&-
> z(0#dj)gnpDWwYhY;I2lmcmQmFH2{-OrilB%3vpX<AHUHG)SM9?&cbl4GLoIPSVnl3
> z{#!0WxMfBkQyN*8AQz*2@*od|Pfx7WhiY)YrnH0B&>qa<!I~)xu7V2kO4FYi*blRX
> z|9Rh@HXEQpA$1qZkQskfPknv&+@o`Bn{6mo^41)qf}_-;kABxA8c<1pUi!9X<B;vR
> zH6BS9qI<K<GSHVY2xGBbIh>}?PVD!bYtS@(7Iy`+#XZ-ebsr}oRr5a@c+7|Newwes
> z=3DfrX`kfzTGshE~jl^VmXVXhT=3Du7HAlOo3gKb7hx#h{R30Ibc{io1L!NM&b-mccR4}
> zHD?6uIwE<TT5X}tK%C=3D$w_aC%pzF(JLc+bh=3Def}45v$Yx%LtreCHM@9&iVB3xyLm`
> zQ?IrCoREFgfrf$vf@-9U#3h#ZL+YrF7_M-IQkvt@>OArMu7pa4RKjs)QL*A(x*;js
> z?K7n2Grhcp|1X_*9pdBHCBa(A>Mg<gs+bY6gxSh)_Um%9L(XS^6fOPHE>4LA$^6PJ
> zH6Zv59czDuDX$H@IQWA(q<%$1+#nPD4iymN+FSlQGX_wMD0L%-q5p{M)yJ(U=3D835#
> z+lpzkoE9lp)L)`lo|2>IL_fW^QQ<CijFF3|8PqYtRvWvNwpy2}tX$XRAg>6@Ehlrh
> z00)mlb=3DzOLnL|l`6aj~=3DEsI1nh-Chv(bJe4cz%8K#g-VDpz8JR9h*}``g2608>Cr)
> z>-oFv+7%lY2AR-1=3Deh|=3D<IVz@K5s%ew98XiilDpyeVr>WEi82lTJy%JX3Ba@;N3__
> z#pg+0)+aBKNfSc^`PQ0}+W^=3DM{W*~DJp#@BX?AmiV|7%2LGq~1*{aKzZ~<S-mBA;V
> z0R6rWx&GANG5kgVD5!4-W?=3D6IIktsD^X*s)W>gc}CFf)CVbzUedgixhE6YMIo<0F)
> z_XflkS0;7-hd7;VZYAg1LJTxsDodR5SyU(5RiEbh&Yf)AOiWLjDo9=3D{K!S5!&HO1g
> zDt0dD;9E<7sKg%5qB@nIJ;`AlT=3D+BucMKtw>O#U3Q4^k6n$Ff{7kof{LdaEKOJL9-
> zOv3rOfn-aCr#Se13zJd%Y9vbLGNIus@N2D<?Ed3CpNUHQX!LuEf$#l+;y&{c#F;<q
> z^0RXrSybTO6~(-mgkhAH1Gh8Frt}8cMa6<7gZoN<6Vh;!<I?N_s@xz6h68UeZ36N%
> zT_F@Dt!v$!l$(u-{)&5G#Bu`T9#4t;JXM`#{&8Vhh>*$s3YB>ST`p9d6Cn0zP1bBa
> z#<-C(PFudNJc0?^8y76lSLKwsW2-g`NtlvpeXsJ$H#8b-@TyOmdNNZ~f5e^q^hBG4
> zIs3nVDO;`#^*zU%q+6F6G`nZgcWp*$5^l6^sRs6-lfM`p|9GzKT;tvw6*^3<K`^0F
> zH92z|FnVzfDOSK-Z`r^~T+s8&flT@5G(rV4^`3C1NaoH;e&?i0=3DNW7WeM{J=3Dlf_Aq
> zvHmc9&xBPw=3DuAZ|25OLX{=3DizM6b%dx%5YYHtAXTiMJ<u_Hf10%x4zK<smOz~Zq(RX
> zo`K`8kW%#Ka$8jX1K5nqa3EQagh8e1QGJ7c^ZFLN-Miiov#08@tpM<B`GznO5fNc5
> zhwI%j=3DI^3yw|~E1zSja8iRxRyXgV*qG0(|~fdC&W=3DnkKrna!#`NOOs=3DLz+gwvL*h1
> zt-6nF3*pnEE0hPyL396F-k+tQ2g(tnH=3DU0|{zJF&MwHzb|99x}%qKu{^Q7X%%mLiq
> z;nstRvG>#EdQqs{P=3DBqzt4j`0k$Pbv89DBBI6to$+e@JLB`r_Gf5jGR85+R7m;Mkg
> z`d2YB9_amBd%lLht94y_w6donx^oAA%(_`i6I0;%_7>*ZgIb-oS-W1jnfwE1S&N>3
> zCD1$Q49=3Dq8RQ<lJkXp53b2n(k4u+lY@^+X<NrO^0#nViwQb~a_?vFD|2Zo^zLPtcq
> z=3D9;TbAB(Ku@xp&BR1h#wm*en}7v3W#)P@7Nll{U=3DsZ#o5r)qg--wz}~2!FJHVL!?S
> z0cTXtxLWG2fwrBa!!0)=3DxFYb%7U3OOIHe9--m`NxYtg)8?K%F6B0$^L<+zYI6A((O
> z$9_k?`v;-XpC!|ZVr>M)S0K(NeFm6`1FQD{jUa{_k(q5@&uR(YTEk`_X*R0v#7l%-
> zIZ^M`+a33<z7_q`EF=3DQ}h0&^ihO(Z$PGyN}c!Kv#Mei?}|2>Le4c4v{FIh;n*BrxA
> zV5!5ZW%rFtKx#bAapJ*&_Z1r_mhs;Ah6^cfD^gldY6JD9{w}gcBCohXpmH9tFN0GH
> z1qpf}7*`)Y02qPpS;`rRC!&7DaOkk<u+b2Pt0pWo9}j?0LtM3~rGtEb$kNqs$b<Bm
> z9P_VG;fKqaI0p7gqSxt}Wq<>07RrG$!`O+P1a>OJ^Yj=3D&qh-+aesMJTSLhzgM*-3>
> zVPoUb0jG<hRi1WZYjQWi`Nf3B|A@zgymI8Us>@*MI(3?^S}T+(sPR8wbPqucSew~7
> zP{8O+_L-624y!LMG(PEn-ko^7jn!`hSvvGQ<_{7!TP8RQvhVsF{o-3ZC>Wlt8lDSG
> z6{fj_rs!DMg=3D?oXa9G9-e%R79p)vUn(Qv9pJbmg<xV@*HYw;C`i`H$^rvKx`3}hl(
> zt@d6-@}r=3D4P#F%JgzTC<^V#eGZwr55_qQ}iIv#q%c%NgT>b%!~&;rh<d{F%V__XiE
> zB22P!t(eilD|!rdd1`VM7W&LWP_VA#g9_gxGJBzpas9VfvHW%F4GUQTzS}X5*ZRgi
> z_T%Krim<t=3DUnq)-mUo(Qw!{Dcl(dY%f|*G$>cq?AY$!ZH^0g2E2GKxtWaUpYxm9?b
> z+rO)}hJ|3@?B4=3D^FSQpgPCeM7>uuFJ#Z}Zy^CF$JMvmW>EHyCc`1}V0Ii2@^I!#!!
> zVVsP*u`9}H-o=3DacT+A{;5;k=3Dfr?^#&)wmbh{wtzaabr<Ez09zcw0cqk0%3Q*(ovKk
> zd;2=3D3dw5%D^=3DpSvGEiuAU<e+-6x!0y*FEq+5r;eP!ofv<I7YT8{h2_YcPz_p0@xX7
> z46J6#+GN%Vphgz8{$B$;_Zkqz%lRN`q{eLPJ}!KMhv<(7t6zS4kU)HpL19bw4Y_l^
> z6yRF^ILH1izkad68{?}D#}M%<x+ykpql_=3Dct+j4dzQ7{hkzFO?CHDCx*-*qi9sEEu
> z%Sxc?{%nGOiDD7uYcHAYRuFpDZey~|i0tUQ|LwPsIIt32IBPTZgY1N^>k>1dkW+_5
> z_qiOVy<r5sr!9QDFPD~c=3DPf{YNR;yk;HfQW6`K7omQW2AsT8gDrf|Z3`(GhR(W=3DS3
> z{NM^blSHamd~Azf#*`=3D_h`cx1Inh8dJ`;2h*@Q!XQ>v=3DN`N$B(x|qP{<e?)cKh{tr
> zQKnNC4rb#*v_5es`}(*vu%gHBMVXcMW;4YLO<^r)JhY+IhFB|t{j_{MzPYy}&Loo(
> zBcbv_vR7r%_CxAU<lfVaaRSHGP6(Be2+fzW5hY$6>6sPW>kZjT7N-AeebTIR`eFw@
> zp<tqaFAx?cikg*=3D7bER~x)(r5dQCFSVM1R+I2AEMQ(mS?%KsEx#@b(-mw3j_jq*L<
> z5^_nMvlQgrZ*u^u0g*p`@Gx56fhI_$s<_XgB4+&kJpC|ZTzWs_WuXs3#HMw8U~~|t
> znFqIPwjASoZbU6mZe{Km)P{!%?Ovl48^phVjGar1_Yp%fe!el1wZ6Tbg<<B}E;}@G
> z5uGiw2m3XsLL^cP777F)_#h)X>Ib7&XCl7<17!(lgA!xhq3*{w8o$i4i%&+b(pkLx
> zN+nM9O$iR6sNTdrlA??qsxX%Ss~qOj@6(v#seK6a-~JlQCCZIPxLpXDWy7ucz3s(+
> zrGV(ewHtgl#h{iO9ssAQV%Z&BSrM5igHy>4?%V10=3D!%Dg|2@{QUG|KJYIgT6Nvu3F
> z7w?g&j<zK*=3D_9kuj#{$yes^`o6OP6oY|d$e^tJG;&0Fbn3=3DStDk05EPocUboX7o!+
> zlV=3DG7pkaepzT580=3D~Hq*@`~uO9rD_LGR`bUFbR1m5&Wq@qA0maB@|tFx>tX*d}ebd
> zk!!5Y092H$6l*b8{lyer6G8jMXgUmSC9~<3Ev<PKgYKO$Mb$rBKp(k8(f$jP&XEz5
> z0BO7%w{jrMr}7w?vDapI@Jn;13vzI8WytZ!ZgF^TXzoNv$vD+{ie*h5vFk&BkX=3D84
> zqpZKHeAsD82I!0c0vAlpZLiU{>hpq7%YOOycq$R`CLa}h+_ac+K?;Ql*vBdpd9}o3
> zf-bRN&}~Z_kF5@u-W(7IK?}A?gXsZ+rVyn9(2v7*Q}1LeS66?MlGP`ye{F0AngH(m
> z=3DnQOt&E|*=3Dd@Y~_MzUczMOGhwLnPJBYc63D=3DtxG<{`0b4><L3vqv3dwDl_R7%;r4-
> zcnFNKTy_hUP8#5xC~ZZ@q*VryY~5?5$4Av}&IfBTO4|21&vC>4POX0}m-8319zxSF
> z@<@g2#t8}b;#VG!YZZ?50&V}tRlCvw3#5AV)3FUaS-<L31bxmaIp=3DtPrjwflIXY|F
> zE-~8fDM8Rrl^M8U2(+u*kiiIlkKO`1|GiOS5$;-jf^Cbf!e_}n{-vpxlIW7*)`646
> z1QhBg*wEQhxlmL3T$x+2{cI@5i-OH%kE|W(L5lbXrRCIh5KLKjSDYP&J(q%zD_7Ra
> zan6U}+CvQq95WV(c2b&uj-B?*#I-*jiYtZbIWhNLrCfhNFz6`BJ~PD#fxB$hxN+nZ
> zLvdcysI*J>P|T<$xt7?nAh-5<V?}BtQscchb7k~n$X|_l<r{D=3Dvt=3DoF6!2e##BR3B
> z4(LXQqkQ=3Dj3lL&7X{$qXin@4M?*cvpVbxfzGa$iQwU&GnZUcsYO7aeV9bz!C34?iv
> zhcl~Yz1QeuL=3D0v(%woSt;JU5&ogGNHP#r;OIn8OS5nx|nn93!9{<@HBFBh7SwTXYf
> z5cIpR9dqn73M1pv;1#8<xv=3DAob)iuVqK0-$c%yr89^zy#7Hy5O;0T4=3D`xoK|2bOT5
> zmBAyCw{tw3{Af9U(8sS?bipc$L_m)v!9g8k0^%9@$%W*nc^PG(x~qpix&XCInm(sh
> zJbj3c?nz^uR!gAyN$8hTCjRa>lYff{x&Qvg%4!wsPfyyG^B~RRz$n39|9Xk(oD>h5
> zf+*URHmG6=3DDuAh4Ey`zxM_b_L(KE_U6*`;^tGS^sEjZABlnxm^hM+XCW;j7J`{9*F
> z=3DIy!8aOuVtz2Re1eQ50do2+tJ=3D4ujrJ87<#J8TrD$tkCQ2sr{M#fXF`0t3qH)Xc`9
> zcw*HihHWz`CFo-Q%=3D-xnMj$Fg&X4Y3t*))T>G}c)<V*qaOS9PitW??la`uWGWpYCn
> zhVvhLrggo4Mx=3DSwuiaGLT8qYqyFgotZ2(<AvqU`3J8;omt>9sO^=3DCdcKltib_W||r
> zG9OX8oz5T##c;22liO=3Dww#eY)yX7C<(+1^C^G^x~UIHOa8>0>VX}zV}B$O30|KXB?
> zoB6}z@WAddV+jJ3C)j?a%-c@_hR3)Vxn!;V!GYI*W4(P<ZzAc_mJ@fL>5_7dB<0fk
> zZfSqArCv3U4Q{s8C?oxM-L{#lOeD5o%LJSu1kAP0b;jp1zj~xIC_=3DgK$u2VoRngc}
> zqg*i0WEMc1Pm>Ku+REQ;To?-B58R+nOc!$OLK9B+Ke}ZbgjLy=3DtQ}YnkDnm|AE2$m
> z<L%3TpBzF%>rg*9rR}uksg7YlQFZG+Rg1f+X&-~=3DwD6_QWT1XB%g$F5qwZ@6Wa)}P
> zNK({m;epa@`2puSdZx&RPXv~b{N#X%*xB}y%xesEl#daG3{_E^L0^jBC=3DwJJRA1}d
> z{Fu9;$E4|^qw!U`|Hw7Lam{T&g&oJDGP~t}D|9nD$CM~h_)G4Lf~NwWA3aImN!aYZ
> z!|i6ee{8Rcj?<x1<mom?HnvSn=3D3Qo*DeVF|G^W4=3D@VZcY72F?EG&pGc2;X~|+^F5-
> ztI}F{0+<@-{M6g7&`cFNRbXy)Jw>Zqi}}6eJe)R3RAER3C2oqj#Yu}6()LHgdB*gA
> zs>`>WwtU$REA%KHNPMzg2HY~0+Ol$2rdp~&t@Az;PmPcrhH94eF5H;!J%`qoBaP~e
> z@Cnn)Bk7hl(=3Dq-;a#O`p)PNZ-wsgbxRLvN`cdnZis(vOnB(ws*LjDa1POy}!o4?aJ
> zZ%Jv%(h=3D6HLQs*M328-u&nV+HV9x1(M}m$k=3DRuc+A~de73|~Z(1)FfLcm>o7LHDyd
> zWQnAZ>IgxJQjPA%kFL5E-_~Kr@h|mPQ8bzu^xJA$$@n79WV;J*yqxQ@93{B~Xkbkr
> zp9Gu>y`fwE5ykIDE>G-Gu+~j~*IEP!hB_N@qE%UH>s3~5l>>x%^ub(V-5wEtwmZ-d
> z0?$|wyNRZ5<?T90j6b{bdrW^@tS#kC&icF+XKxsWP3KbC$>(cN4JWMGN%3<qcI>c{
> z&cvPA7#&3KP8J(sJ?f$OB1ImOF~pVL<<~&n#M2ETRF_@?pwbhuETFvn$SrG4a>T>{
> zbvl16TVp-^+5_5F!E`x=3DdmLPUH*}t7D|QjFac&(9@+yodwXpri^5csF;8%b5EwLB#
> zP^=3D&!Te3Lfe;83H<(6b-?kHjqqu4WfCP{IV*QBb%kOQNQ+PA+hsLzT7P_}A<n{!yu
> zkG~x3oSWt!JFfADP?7DQz=3D^7i(*R=3DGf$ERp{eq@Hy0)xpjm?zKFJE4NgzA7PRDm=3D9
> zE$KzRj!bu;L&@EHR{t(msPGR1AwIQHQb2v?2*ZJpry1u~TYRVhZoz48S;BZODXJZC
> zHPps<!*-8-!<_$kf3~W4^7E^?@8GRoSd4mnV~bdu;J_Y(63A@w3DrAI0K3;$C-&c4
> zo+iV@VDab&$3^_f&|_+U#i%C&_i)s_Y<$9aJF3PA;m7nR5k5a8Saen~$fGA_k)c>n
> z0mhGxxOYsp-s!<c`Ip#=3D4ouc~P4-g!T}5i6o2}e%#xc!!k$D-^2%W7<<l3=3DSaiP~R
> zKB2N=3DfraoDq0m85-S#ZeTG&!vm@Nuj#ZC2%=3Dw{@Ojau?7*f%hL3kV|d;06!o9~|5^
> zgE@FEM72_~oq!hP_sXylX8_jI{xoG-Fui3it@JjY4Te`y@<Ba_S|9jOxH~`E{e&u3
> zq~`lpDh7;%1`!^*wLuiqZ;!4+*F03}>dgadkIM1g*e(4jLfll^4VAvkDm9j=3DpBXd0
> zbDAtu6<SuNA|ca%N|ObV#$GAKyazbCYbep#HO?=3DiVOVJ?A}&1e3pe(W(|H)l?t-2f
> zM_Is2C|`(3sG93o9k2fge4zp|%P(6Ul%qSTsj0mdmE-Aq=3D`=3DUJ<qPMM@WrwY*<;I?
> z%|nhIOvd<2_%_J>1DDquO#-kb)-;jIfCi9+6BeIefjQ)V`gVY<PWR({jD=3Dh+|F3nh
> z*`c*v_PjQB1#%(Z#DZPqb9{0ncK>lga6EVdA%i?uF3L-uFS!xmzfGm5<jmo;CGQBC
> z=3DAHei;c&A3b03O_k2yO<)`P0qPOHUcK@T+SSYU$ZTfhHY)YG40w_rZ+Z-^-BHY-((
> zeE-FW!mLw&6D<6#a6mcJYY|la$ZV{|Y^pc>e2FyE>@wY(adrm#zm@z&rsCuIo!oFA
> zk2AvHV0d93H)_&%*w!yRt9(Z6;>5B*^?iyvpbc)#R9o*o!Wq)KK)|3i`N*_~%uETv
> zE{~!1gfbS0deX*dwQdbzId4rE7AIG_Ypu9Y%BFXJyEg1`bktwiUFGbhH|iO{(Ir?!
> z0ee)lrwU}(cV1k(2jmF5FHEz|_=3D?s1jQ$3I(XiBnt`%;gWd7@r#D;~HMH!8$@J8W~
> z$+bgyOZva9A-{DJbN$}~e!zy2@ha`+Dce*4sY*n&ctJY<G$P{Oyx&gwn!B#;J_5!>
> zWb}-G8w|j?r1yYe)M{-H4Ze0$?zm@6dv&NpHx>E%;BZatOHtBZrx>f7j)gN)h*wOC
> z7q#K+TCkZ3BS@~61Oc|`57v%}uWwFhp<x?&PxZ*P?c!2GBLyOP+MXAyEEgEL4I8q|
> z8`-UzLHg1PI3j4`i-nb_Udg~NCn2Y_%`k(1!3zGh70~npUJE{CLstj(m34I12V&Sh
> zbeF?u)KqGODO&<DGcXeBpy^DJs=3Dg)-&UI_x%P@Bj0vtfS;j_BDfY&iw?GCAdZJO%(
> zqgPM~(L!ANK1>Zra;g}<$hylKBYt15A!OV89fA^L`I`8sF`r8&Zf2udtp%=3D9LXE?J
> z?A%SjAz8{YE*(*E-KZ)yd|3OuN|V^k&)}cBwS-s&eQ!yr@-1##JxcQrvHv1(?idQL
> z_}onxtv>)N?+(C!mwLal(q5kroMZS_tb?<W@U}bHlvF0yJpn5;1VgG$sMM?+5FPeG
> z^KJ?93VQxLuelbNe@NZzR)APbV&+AE&W}>(B#?m=3DJCoKywn3c$U%LEmnfA-s<rm~#
> zyk5s&Z$L*W^Msxwbc#pJ#diC2($chL|1k=3DwW;Jj9FtO2IkZqpQDPN-e7K=3DrlB*NSB
> zEvL@0<;=3De20+O`p7=3D(zwKG3xpRdgxhu4wgu17eCTwSHLrT4DED?SV?grp2Ovty(Z!
> zoTq375#7}Pd*|6`MG*IuzU;;&-n8WxpploiQvgT?^I>>$h!T5dCBIP#+`&Ot5YyjF
> zr37R>C@OpFh-h)a&wA`+RJtlFee$+dH<Pp32=3DUEwaB}ib7bJSi6ze%y$+{CrD1*E9
> z;1V&jQ7nctN4upM!pz`l$tqEQE{J$Bt{2!@`_kXAm{d0Q<CQWiw)13Sb#>w93Kfu5
> zoAI}C#=3D^U@Oi+*5VVC16*&DFtV|QU`dMyKZ;>qT*yR6J0w=3Dp&J$O$F*K@lvDX^07e
> z59&<fmZ!`onUXdL--2^v$R90edm?ddzMbi9*fAS>X|w!aL=3DV<GmMFY`!}Uw)XxH}q
> zowP2)ec;<SHDwKOWa<Gy`WuPY9p#BbUC_d;KAY6DLhSR3&7O~AfX<9$&ro9!`7rl<
> z8GI`S;&*=3Dd#crg+{q8c}N3br_OG5XW=3Dr1U?;<|O&P}TTGAD%)y03b3gR7E~g&H!Wm
> z6no|G@-iM%7nW6q#_WcFiN0LN)wiY%$8XI)77o;L1D(8kR*<*P?WoRhgta*PWanH|
> z;fG1l#EF_nqN=3DbnrY{Q-j=3DhKWHMtTQA$R{+rnQK4;EN05)i=3DsCKK0i+PdSWgqcQ<T
> zM8Cfz#G847HbTP_1}FNNNJS?Gl)IZ?V9|LLMWFlY2^C2&fR=3DlIwo67;iC4)LIct$)
> zX1IIX9^jEs{Q9Lo?Wft?AAio%DU-^!VSwXhW=3DDU3CS#{I%34im2hL$_65<YA%E!c0
> z>~c3i3&=3D>v7go2kMn*=3D8Vl}n<Z~<7{Dxm-%=3D74}@U6g(gzN(}ZO~&QI(#XvpiG!uT
> zPTP?x$ttuxsm<$uhWA;i7=3D%zpODf(|lS^J!=3DdT{AF(hM#(#$R4O)W78&X(ri5ltVm
> z<Wn);7BGPJObpZ0+sD0PV#JmAv-qL>Y^kBJ+*e&Lm!TY_^ZauJKEI*Tu_gjEXSwhT
> zXG;j|ZM&(UKtfr`D>+A0FQd^_LTV04VDr*3R!vw4zcaFbyAq5C=3Dvlx%0{s;f`~Dez
> zbMog1j^6Thbg&(2E@bq?iX)RPW}?)~x~oE3XJruH{<E=3D)-p0jiqPmIlC3&j533f=3D&
> zw#Xxc3B{Sh3TXpalH&oXP64ecI^F-H1eg%pmyC)Xn6pv!#RY>vCa*2}Yf1NIEPX7p
> z8h-%Hn@TNz0KQHdUXfjN4S^zOJ6vjbD9YNE%;M0-VSz9Cp>5P^J_<@ZXt9Q*Pq-UO
> zX$UFO7;1fyI5$EADM-BD&fEFznkOMfUJO&Ytm5h-CzxIHhR!F)UF$2f?RV3iQ)|DE
> zpUIg;FL%PP1E4=3D|$aL&xf7$0SI@7a&WM?A~00;|zI)pf*7$x`jB9Rb<u|RD>H($;G
> ze`shSt!Q9Jm2YxCqP+VguT#@o4fDL5VE+l75YG+ZS;#)j6Sv!7x-Z(Ywq*D@n6kKJ
> z1x)OYN~$G)e#Xbbv7qZ1^VK&PS2|JTbcP~urrNeg`eMzl0Wa+!wc5^pzR8)>nqVP_
> zzKF1Y5wjr6Rs|z)3O@=3DyKxu<!z&;7PSo3nY>)G!@JIm<Q;}2u$H;1Bi{i6WqQ7x*J
> z^7cs4ZLL0sx#xP*vZL#PEnH5N{1B#xvux(p9cRU8>J=3DoFd{h^J^+oHEHzhKeF8VDA
> zOV608p!7}*nds1Ps%Q(^By0xkPJ<YW?wg8#N710m2#9#>X+SKlbn<n&gb+_2ymO4N
> zqkta6i7lGMFq^DDWp{`NrjvIMow0D4%IKcF1oM(E=3DbBp7Xrj)roNW*M^!SV@E__&U
> zK~4>EB;a5udzc&X{vFzbeH4>F^J&MXl4Vi*RJOyu<g8?Hv9b8WM=3D#LfAMpfyEyEyx
> zq(CKEkaKaYb~qXP&P)qHr!%QIVV}s^`3vTsmX1&0(Q^(2ihu0piwj?rfe&(o4xBjH
> zQT|`L3m#8obhcK{#hs%8Uf7Glz=3DP1_rR>GkbM0l}z&Vs<DcC&xM_%)=3DFJ#}}D*d7l
> zM(K#?thpN&*&KejUM6Ixb!{V}^Hr;V*e~$|*~Z~T61%fz)jGD|J$J`yrjf##g_!hx
> zQv(#eqjfjU;_BsGEk;Wdu&{}<NepalYTAjt;ogSc#xU*Ilde9ndw!9h4bXlapuP{l
> z->50;hR+c!{|?goT<E(eai$h?cODY6=3D$6&!;kXRe6EIlo{{6Tqz1aitkJcc6E$!si
> zg{>mvUdSfoSu@GyZ!zfZl04%JHn&}3&3`YrsH$40nygiT-}86cwYSN&S@W&8kdYsq
> z<kc^M#0FW2U8N8x>}jLpnBr*JuL~bPr<Pv2mgs{Z1trDR3aZcPQw!!wf_T|tjww2C
> zP>m82XHHmO)L|6uAH{9tO(x}k29PGQ*XR>2)7W*QOaFAARHJ^Z)tVI8!W<Y}q6m>G
> zYIFt$#PQ|7&1G#C+RiRYMj{F;qp6jTg;v)W<YXr#QS)rTnF8*Ar{b(z+S<0n|95iC
> zQ`HmB3?&PU<7<qQu0(`$t6rts$xiDJ1J~q;{tZW9u9=3D{NaTa)XVW;|kKS?jHg#`(q
> zf&c0GPuYtVHrInxSI+!^we8VtZ7du-c*=3Dj<{#SCe6C}~UvrZ(ffL&s-gI<IwhAVQw
> zdCsT@Pi8Y5+U_zA=3DCy5eDO=3D#yDNLekgn<v(Gk1kXFH=3DWt7NsO*!;hlx4MMNC=3D<O3=
P
> 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
=3D
> z@LeOFvLH;%&y^H#6btHN&iXlF@nsZUZmWo4ZOd;fbdTTeS2X^&CfBSG)M%Vb=3D%w8A
> z{`>&j8iip_$00zZW2cy{RKG`I{ofy0%as0q3-^e8e*<C7vv;{NF-Nhj7iZAu7sUxc
> z;bL^Vj*XxU_yKp)=3D#EbcRbXa&HS|28F#*;N{+03{fvh*GFO8A%?wjZTF2tTW5qctX
> zmL!DoLD-fE;9>KdJ*N8DP<ukO05?F#^!6Q>gB2`Zr$7wXd<9oI^U1TD&b)WA0$-Bf
> zN)l@wfBT}?P82PIBIo&zTVIg%`6+O&lMcZJFi7?901r$8F@IA3l$~kItaeH_Dr;Id
> ztNx>BOX6vwyA+I<^=3DTy6Ws@6=3D{ZF&ptzufc#BA6X5&q*QhcUVQY2#<WF%k#vCzUtr
> z(1;a^>OULD|29m2s`@x8*b&ckVc^u**BDjKe=3DMMn{WP4>ZPzQj0$K4}2`)D4N5Hxy
> z`ZL&y=3DbAe-J`|vj$a`+&w<)o8CPCUUvc4GetV`e=3Dx!IEO*q-m6Qx|0ss@W{Ev9>je
> zUj=3D_Uq=3DdI~#Yaf#bS=3Dt&A;-H+?|RwKE?B}onI)_RoV+Y7iPt#CNc_7k&O$)UHWIg=
=3D
> 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
<
> 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
W
> zkBR)tiZX{Ok7#~|U{yM5TVbyQ{TXZ9leCIN=3DFCh*+H=3DQN$KoBrLR=3D854@utfZ+Wcm
> zDkOgn5iDP54>`%H74v(M$JV@7<H5D8(!fZz%oSuU+>6<nKn>+iLJZW7e3PRS>g5UZ
> zw`H*x%3-2dNI;*Zi6FM?3p;O$hm<`4G{RAckF-5X*&LB6Dn?wZrD!s8L;NT6jfL!L
> zQQo!d{ia?mnlUu?(V6khoH>vyokGD4e)E4Hz4RLRv0ZDu`Fg-=3Di1sH~<SU;04&MVy
> z>lS0-9!S1g<w-!|i#cMc*z`1i1IPfVv!%M8?di_$3uDh#Q<#9AK;J8I3(*<VwVxfW
> zG~e55Hc_!<kY(?JeVc3o_iTRs0q!m-Oh1H#Ymp;lJ9)g0mH!8Yi&t@797Q#^bQgc=3D
> zkbMxzh?I`AS@j;5_LNlL)A)c;9z$1Oi`v?AWXMYVL&J&L%1TbYuAp;JS97Fp4L~fp
> zK0gfyx$We=3D%))(krpP`UPnnbusr%2pJvVo}8sg0SH}Km5CX@;nXcii&t$bQcA&b28
> zS>;@3(PGUb3_DYQWwoenraE{`X9RzYefR7c5ezBKY3dTMkwODH6j~XzdvfB-e0s$(
> z&1S^lw!DIt27I7VS=3DR&-xw&b6vQw`c?T&i?(uVqIw5jr%-3U17#I*t+L%8!|q<^Qg
> zUaBx4(($zC6k41hUC^(zM80sBDQ-M#mT$&a!GV3}hz>02Z%t*Q*xnlr5gmUg5WSsn
> zciK@76x)>fpvgsD2SH?fGoXD8WV0P}D;#M#9qqg>=3D{LH~7BNlA$W-*;Us(CyT)4i3
> zk?aotd%w_g`S=3Di+QSl)TNj1JTL*F|27ET+g>lWm>&i;+-fRDhxh4EVBUVMkz7s%T%
> zxw0o>MGd-h$cHRJY^7iv2Je3(28G(Ej`jGwMdCo4rk_{4WnP138_M{Z9Ye{HGzW<y
> z0ePFCtooJVtGAIi5BbVj{9ZOEJMiIM`2Ibl<lDGA2Vr_;Q}K)&`WCS_*HNmg!qGbs
> zM5h%8zyKNUh$RaBq@&9Qyu{!^?u~!F+HQAB?v>p&w8TfKy|a5Ju=3Djs;?cHsL0(~XY
> zJZ^~Z1SE-$WuOX;DY+sr0voJ=3DQ-;A#lA@~AoZ|>eT^bLHu9^cU_IYB-S_MwIbUrX-
> zJQWo`DwwUr8tDGb)`t;iOxQC5&mL}j7%u5ifr?BY!aj2#Cx!9*Hk#7riu!e5EWgBr
> zt2ff$?*WIOZ>PI=3DTa|w~O=3Dx1v^K3M&x3Ycx&m7F}A9*{%XZ6W|Y;+F{R2B7AZM0Pw
> z#s~Ym1?A*i(e4UH9iebymaw70eOKhEq+Wt?M@jh6pg$WT(M+<dq`&jA7*|#jTToh3
> z68}XwR2kE`PXr(L<uJs|?8AF8@)EO9`VPsd%CO?xmpK2z`73{ZN9Rt0V#%-VBSA`L
> zqJ|7Vd<^T;^rp0JMa0U&pJ+97RUuhy8JACAs_`Ji5J=3D}e4UoX~xBD*ll&L>2YOyHF
> zliTS^4XE15qHp7+`Cv|(yY-`D9RcRbbCtWhr4*NK;FNZ`LJn;djwiA%hO(bPw1B=3Dm
> z3P-dgs7a+<?cIM;ob0wSJ6ScF;%lCr_P%{3moLh=3D%(td}&@4Bu_c_jJypq*YF%_xi
> z&wyq+q}=3DSt+M@E4IQ95r7Y*h=3Do2iMc73$qk^5ghyeB>7(Xl=3D#4Z{=3D%2BUCp6GpC8=
}
> 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
?
> zJp$p+mqyu|F#2X(soU_3ulb;<%5<K&z`)M><y%M38Xspwbs3$2Y7OoJ(IYzCC~|*D
> z;zww>_TW3L#AlRbV`+)|>+Fqfv?$`Tb;tz=3D*IJg3&G>y%9TXvmjP5Z*bfJEl#|6K>
> z*%86Pd0NU|-+A1s_7t9skOWw)+mbDGf>DbiRl#Gj3eM{Mv)jC`=3DWS-{#rj~^OOF<N
> zz8vGg6{7b*@`Nvs6%FB4y@TTG!kK^O29e*lG8YuLEk=3DuGZXD;fBBi8%{aOV+ABZ7)
> zUA&KnyVrWjlQUb@#foDQPXaIRvi>>iO?)2jI)QlXK^jb>KSFjOH$4u$zUm*4yZ9mX
> zSC_Ta|GhvDl6G2?`6+HiWJc87*9-XC;7)XAFM=3D6-1DbKp+v5F-$WC>7$l8C+w1Dw3
> z%qLOGs-k=3D4b&dvM%#5H*<_hZ`Ty*dUq_LQ}GFrr&q1qhk?x5bROT+~7%?E}d%n?v@
> z6Cv?%)*E5%-#AG$k#<iNQ8|BzMPVP*P5F25VA#Gv??QAEKiZU<xiWLl10nk&%jVTX
> z6&n%7gKFo7*1$z}*9fuGptpar%NLDYzwf8zq?nZZqE7@I_^R@X$_BgrM@Y%JWMk4=3D
> zBtr(#oVW{C22lDqk{7Bi<XDPFTk_<xA5*kz8J!-J;C;(*Y4RZAsL>`3V_w(yy6^K|
> z^yW(0i#IvN+FvrN;XOGfAQ7jElT<pkD(t>auQtPkXGruZ@~^=3D915$q|7gS}*P3Z6l
> z5mOUjDqIW6MZga#RU5=3Dz$`!IxtO()z%c<6lroiH}0K%o66dvEy*&n32`(A14vtS&_
> z)7^2YWdUTm^ZS1WuYI}eqF%&6ClPQn<!GL!QP2RZ7Cp_|k-QhZ_i@kO#odWj;ga0x
> z6!)8sihH{O^tAlf$6bGwp7pc_m!R+&I`9Tw(8)E(<lv?*3m!+IhKvY3MitlBQQU!j
> zeDL!=3D-vW)_kTSQqO+{bw>-h;n?+?U&bS2zVuN5+Yf{?=3D^r%kObQBXHl6Fm5k#cR$K
> z<ZZYt#Q7fqav1{Jtgk$_wKH&-n{M{e)eam0mOQ7k6)@jJnDBpQWAcWl#;>dOhn1W5
> zH>OMbt`(s)R*IRmaU23`<-|2qCL&6j=3D#6v9oZfE!s%f>ym7X0SBCzYLr<bzU=3Ds_;R
> zj+0=3D0J_%=3D0$XzvaIs@_5ivDhI=3DB)nmhu2(5XK22%M*oNF5B7Gq>E#0x(<S`_cn4+A
> zytqV42nxh&M#FzN`<iEXw{Guv`=3DB2=3D(=3DUI~d|f{rGcJ@mN?sw)wE^purFBfdew}}t
> z-qV1RAvH5d7jc6gfr6wJ$!f@eI?X48Gc@*xs*)5TgvKo3Ii9%5X7vYbf6!nDj{aUy
> z{`O_~nw%hgNQepDDJ#Z}8>v1X{7dxTK^Z9eIZwglasYqn+~G*x5mhwK8Wf4XD5m;U
> z8R5nQqy1#!MRfEm1GAYr2CbeNkUN~l%LKa<1EDLT^vh~Tt)vW^zWYgY2722h`wtj3
> zNpBj%_dgBGaqI>>`lALGjx+W)9uHe)2b^;{)C16&R9UB{c$)Kt<_j|6rj|~TBfxho
> zDO_?BjRt>(2|0H6QAw3mN7pr4Sj`e*V*;|{o?<!56%e-?EZdf|xx^ZwMEK~P)QF^p
> z-gafr*`^)G)ivKHrZj!xr?CvdPgFNGNW{oS<#x{oUoZ*AM%tp=3DYF9cb@L7CklkISu
> zriI81f+vbk*2rq9#AfAJM=3D$Id@gtq+_>rl9Jv)CERiw03ww2HRvk4L)DCxb;Z+vqI
> z6N%;B)>UBQV!bvx1YcR>>#AJvL1J=3D|uPr{o=3D#0*(r=3DWe<=3DoehKWiyv!q>mm_qF$i=
Q
> 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
}
> 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
o
> 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
Y
> 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
L
> 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
x
> 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
U
> z*f=3Do|4=3D=3D$+^i_$j<`^J$iO(QTG_e-QbDnfJKbPUgS~<BSseeNiSx0&_Q5?W6O&Z>-
> zKUe)Nx5<@hKWMV=3Dn17(PX~C#y_)?LYEDRx2Q{VAU=3DZBoUD+Qvjf+a8;K(r55Uq!7M
> z2Y%qa3|r4M+d<qWY>0rX<agRel8^aA{hC4Ejla&D{KsqBZ9M~`sv9`ae#QUurPuq2
> z<1bsX@qrq%&=3D73!?yDYUsf%ns3?w#|_tX~%eRy$H>DO>Ucz@=3DZ93v^aTmp;hRdLK3
> z;v53sk;*U}wg{M`W)ED0EJ9ism~-66oZw)R5OST@agpuWn(Z%EUo3Ez!6U2Dd*p2X
> z3I?_F>L{R~bUgP_5>_uZANEP@tAT*(?A>D3DI_6T-a=3D4WXNW3?WAaH`zFheH{SJ^E
> zTH6tOb=3DP)VbAS4jPY3?=3D_O@i^<l$aiq9)~GACCWg)){l!Yb!+W;?eTth<`64TKn;y
> zLhtFR=3Dr5wy96aqw%myL+K^sUV$eo$h+c~upwC%>k#VXv_rs)W+Ui0!aK`OM;y(|eC
> zC|^=3DjJL|sF;;~`bA&#M`$H|+EO56aeCR1m`q;R`3E`R(V?d6~fkDf;?W{%U9Y8li8
> z^O8cPLhY|W>>Nnv6NSnL-NkHPE{SsN#K=3D)KxX^9zZ$GmXp+p-rkfB-^wz3c)-_251
> zSq0wMMRY&zYO1O?0cmQ=3D(<q^M8cvHP{`f`>2Mm!C78ipDV+_D1jLPZG0NpuFMOz0=3D
> z_w$nXZGUppv<*n&ZB%hqFCn0XdRcacmSN+svn*r`9p7#?B!kvI7l-3B2wqBpPL^#(
> zOqY$4@V`r6?5SJsDVGU`;ZqH(cC2@T=3D&~k`uc^Y}W-38ZQIm37gE&~B|9Y2J0IDT#
> z?|oJvFTWp>&XMiH18HT9SjQ14cuYQYWi7~(f`8w<>=3D)y(^ECcbs$s)+LP_}&)B!mo
> zd6rEt9GAUiH7hASka9LZj6Cig<0j)^__xCNhnTSW(&~L~$n9C>`TX=3D|kl6GsrJd++
> zUAm);T9#*4=3D*hzu6xqF2oXXfILBztvEI*~MApP(Uh$Racc|gLh1gLr?gCN}A08O6&
> zuYde1qTYaC%dKq04!9mRZ@%W#0?fyfxK_QCBGwxxAcD(1GmL^Vr^z@uT7$@BrDWhj
> zuT8D!?nmtFw1+h<VY7>+9rXQ1*;f6UX~@`xN{KCGd}#RB;X^#&la^P`*ZL^(7#4o9
> z<^7rm{?k_D{=3DV141S5UsR5KPJiOh<!^M3+Y%-DeUb`=3Dpi%wB-2KZX{v1hYYH*4s-K
> zN2lNc7&Fb=3DAJjNpo~{G$9VFqA6{|h_c}dNO8k(VP8Var?-2UDZTk!rsmF=3DIDAR=3Dr-
> zkJeVJ{~kc-y^IAum4W)O=3DUN#CHS+lw%{URikN-|F`(Wi~8;cFVX4}bjeedMc{(sus
> z7y}s}((D%?Z|rLXSwyUcjdvDeJ$ig<#}jwRr09g&5kZRL>MRRMXMVTJrAWDI<=3Do)-
> zdwP~+%dP2aaq8?S*fuf$^17N#v@o^UOreRRSAXkjC&_Le6uad_?&ru0eOWsx6CFy`
> z9)#i1KKJqA8$1|IxDcoT3x^xv8GitFbHISLVaZd6nj)rQ&OWrkwql^SU;WDo@med!
> zttvR)u=3D0fraZ3dRk^3r2+`WJ0FFkPE@favh*#OFPnj0`h+}l1RDS2x0N6K?t_V-a5
> z{>JQoC=3Dw#0szo8Psc7aOOR%_0)ow@&O-LFO6-D=3D($65?l{)F)RgK=3DT<!+&n6jEqx-
> zhROAYDob!=3DX_<j2k**@jyztn`nMT31@<qoEAkJ^!&m_T(Q5~8Kn53n%$b7#`w**%v
> z+u%aI>&5&W@a`40lq|2!<#tui^+)o`p^c6^ry9;1-QB$5v6>l}oR;-Kkbc<P7Iuc3
> ze5T~E-rfenFrWrlCx9;9IDg6bzeG>nSD6Ub(UnHdGibm}4V(Y-j$8{vey3>TWhu@>
> zLQXnR$+%?Hevw-Y=3DzDwg31_qx_`&X)YUu=3DCEJOe#-vHf00p9_<m{gCgiJbgy9L8j6
> zAS#L`^T0UX1s<K~J=3DFE~30h1Z3)1SlzPRBoksg)9eRqSs1$tn}DSr^|x0)ZAC3Z_~
> zjF&%R@S|KXX48b|6AhQ0wZ0+cl(+;~i9pYq#c?kAWvXXj68m#YDxFZbt{c%?i}wld
> zmOr}#K$a)>@8dNQtKNB;ZZQW4Gz4^EBu#@sCUjVjV}_B?k4{SfYlXJ}6;)Aox8t~v
> z0%!{RoW?WROR{i@w14V2VBoaZlz_{8+=3DOxE6j|C2JgJZ0MXGLJJRU@tSOP*+oV}x+
> zo3xoNeJQS@zku%jRo=3DFy;9%Lg3+24K)6Qlyfl(gZ!QEk)BKeOwymlcrT6vG6hh48b
> z*u{R|+TfhtmOYyynF2O~w8YqU4{n?q;*{F(2|ND+6z7w$*MD?BxfJTjNwp>`2MYhs
> zw0B~=3D!RT{5#;r9ZJ(YBfGfHLE`_E1s$F9c+@m=3DOM1Iz67`5s0mJ9>Q`g^Q`%wHR8)
> z4)O;F?JnMg=3D9EI3dvf(0gIaGMgk*E0(gl_(APOi7MLG@Bw#zMzIHNTYS%U{!hpDAY
> zsnuJ?<e?soL4VEKgIJe!)I#iU<wP+<D^|*vnl+(53?Z*t=3DZiG$rI<LAaY%?>t8I{#
> zgUhZ>uqTG4EBy*9dsjQl#MEB+VbEOLUa$ZopL-T#9Wzp*MfTycc*r#|8OPRUwp!kD
> zI_u^@U)Szp;)3Eey4FoGn&GwMzLTq*Un0i)xcN~Nhkt&%qCx0Ug4uzB#SuoAT6x+W
> zYzo*!uU^6j{6W0EBg5S$%gvYSm~Yb+rW9(%`aTC*d}}tGN~Y*K=3DU%rmiTg<RXxE7l
> zE_+>9{61XWl`Bpk`C<C!w%rMs?=3DLCvBT1HqbAaZ>V?KA7uA+jC@hv^Z+w#BttFr`8
> z9Ac&-p?}#C8hsjAZ>Ak`QfrVb<VdIgn|g<b1<A*dS--cx<i*PqWBJ3U{XoI_g%Ab5
> z8l^eeAN0DQ$<)-UgBFjTXhJ^R7!AExta~fA>O-!hCxp{a?w1t8B$>+8nGc=3D0W<|SW
> zAPo@mYFooSXs9Fy{(2yA3*QODZ=3D<4OOO!@~uYUsL^V76;Z*FG8{g+-FdV)FMLpLzZ
> z+0uiLtHHMrse2+U*OC=3DNZtNw_5tP%C#-P36g;ck;&~;)iDyoo6^*Y`}Y5B6x`0E+v
> zt|)pQLsCDd%Ht>`bb->w@GG4k;QnC7jijbgEnWw&Eb4ODbM>YZ%TDln_l~g+ui0oN
> zhkxU0tukL|qqXfF1+cRQH@WT%x#}}!k*SsH4hnbZV98&j5zdh!#SzfavPOhc_C`=3DH
> zGX%x4(gbnB?~#fJUw2jSUK)-e+7LZpqCUy;@mSE$v025#1)K7>a|`m3NxEt^O{%Ot
> zxa}{6atI5>k!IV5Bxonx%EI%`NpX4sB!9fb>-7FO%(aRiXx(zTzO{u|TY&?_BheP!
> z?hqa9N-@TkAD^c9g2NuIMx>qsbltT{%oHu-ByH<B`O=3Dx2c1Pco1`zYH77|{N!2J^u
> zC|r$72BLzrnP!dHE~mKLxIyDc4-QaKi&Y>eYhJms34?8m56ep*wL#lx=3Dn7Z0Uw^F`
> zLMc3X**f}qr|I_;eF`bK3ad=3DNiEM78lt#okif&w$?v6Y^`$<MibEaoak;ml|;$n22
> zqwk-Bd7*%<{3!cG_^{*F)yhLNb7hp_PVltKu?$C_Zp!E(P>xo^tgQ5sb91Y4(&y|2
> z<F+~P&lvV=3DVD8gOC!!Ra+>~x?Ykz^gobg~Sq;zFcl)x!@%5%u8!e0sW3`hL?2jG15
> zBU7!5G&Fx6jUnhAJ(t4$=3D3182L*wTUZ+AhWbZrR@?ZO<^u+pW8ZJjM4@mds+z9><u
> zme_jL9^_M+IXgqdfH_eo&_xz<C4z$_nO(F)1YS`tL?T`5kQP<m^PqCUM1KdF78*Ii
> z7<z5JPouCcsShii&}e{qS`b4G=3D_TU9!TlH`(CU`7ASXG#X-popFpmoowYerL(Da!$
> zfYgLPo-6JYv>-QX2<Ck9kblpLjISVq>wkPQh-=3D<EB!P#e(`to+I0cVuDRceRFmV#s
> z>t}ppmwKFm-n26!p|3v(8-ELuZj6<cloeI|yw&ddlksN%8BsK#yt(@bP}Y#1eBHtA
> zQ#9h>>14Nm1|ESwOXX*v$(=3D)jV$ZhreZpppHMwbAZL-^8v|_4M1t^5lz$6<i39k8K
> zQpTvx>nUmIt9Jad-~ftuI!RB^bt|vehO@!_5v>;1{+^pR5D-k}9)GL^Jxx1+!YuyE
> z>CWBO)%4=3Da1x{lG0Ew@Jm5-Koi2rG{4BJ9;_%e)QllQ7T8lN;@6T0Uv?Vm9pn8TCQ
> z2?yYuPs8%M>N?}%?iwyJrh#7qN28xrfje9lM2%%E*qDVF62kgsa-2=3D~!Se_=3D{qK+=3D
> zELfvY^h!Fad<=3D;^b$_GCC-z(N*yA=3DN_$Lk!uEmV*dc`0ARM?O{-`v-;&!+t$aifpR
> z#?Oh79{l7NNcV2TO|FZI+Eiut)i9&o_yiun&EFwVo*bVmpz%b2dca~nUwYD4l4^VY
> zZ=3DG+x)k~WBS2ZUe6gCe{ee{`(#QkWe2<r++Zh9=3D}h98wU?|-YEsbA3B*LU(Y4#Fxz
> zZ)tRE9Lp6~i}=3Dcu6P`>LbcSl)yjV6q?@e_h-~vAfJBzV&F!e+0kK{h|9xRw19mDav
> zg&4#@KFz{^adx;i-ex4ZwEQp4uiBn+?D|-0C@0#RKeBuI$?<I^bAEYYGmrAB!r?n<
> zU6I$VsZM12gnt7MtYPL~B=3D^SC0kZhBTrvi=3DX%IJ(AkOlsS4JLPH>;qc*5t5yalDht
> zXBXIb*PE5bA_N63;Vf1N0GCd%nvQdABBe^8{pyo5Z<kr18wuSO^oem*w02k<T6f@9
> z<7*EHj#XKTz8H@r{r@}Hd}OCk6UBbJ3&uO}scg-t`F}@Ct2mE(u!sIvb?VAWfGOt3
> zE8fvQL*MqJ@?o3~V-UM-;*+Vb^E8$F!D5YxT#Jd@C2L1x^%;vNc7YiM!e=3D`n@VIG%
> z*#dQBRFND&W>({4vW4tv>a+;=3DRzgk)?99vU6*)l<NNv7eLV5E54dzX*gB;YA7aTjy
> zY2<QRu7Atmj2Z&3FD003@lmk@IhEIMYB{6GF!9W~Lr$0yJI-b-gvGbB5NYaZz{VT{
> zsxVOM;n(VyB=3Dd9c+sV+9v7!l#FI(mAV?R-+SA0Aa_Zu8YTSb;n!tcmMV(L?;TWV9U
> zcm@<{ihJS@yimvC)%9`n&Eic)|6P4ee#bB|<bUIq^@)LyJoT=3Dxh2Qt$b1+$SfjQ8Y
> zzH7W`rQY2?3pcW`B4D<w9@X)i4{Q=3DiA(~NCoya|TiC6BqOMYW{DrP*a$8YKNeyPeL
> zu-guOPH0a5yQq7`8W7{v58IdPti-yTo*bN`9KFG-Tn9+!i_Wb15-8q4{5<7NEYUbH
> zaDU~aUm=3DXRuPVhB#RQBFWr2qe#f)`8TU2dl4yKC#@o+N{Y<Ta@x~)o@jyTTC;y1P5
> zPUM{N4gV{WF5nTS5P9?d>}n{)XGO_NTOLq(Ek|&*6{7L3D^A%0zT~ola+HeI@48o<
> zQICjjgG=3D6h{L+v|i5|@L6N)?s;?}zqO@AV0s&7MMvhPPLnI;!$)^v-h4#z^n=3D7Ut^
> zjW_(1YTYJ`WkTCr5yG1)QiyP{$%2Lz>=3D0X)TN`(ShIa{wK7wd2kW*%>Y6j6N2B4a|
> zq-yvkA0Ee-WoK?P>x{udKrzU=3Dm=3DbPW(Z_xL%6z3+h?L~o+*1ohD{bio5J8y}PJh-<
> z#6{A}g6+Jn!DYCk{6pX~)9VOoF5msW>EIiY_o)Q;U)D5JtOaF~+I<aX#$I%rUxer9
> z{!;G2_RP~5=3DUqgdQfd~ZS;t~qsp%w{P<VI0Ae)iq`aGErU}G_)QXXaLW#6aAYw@SG
> z%VZ}Iy80#~jJ-MNWVZ?$9%}!0!ha_hx&zBy_}8QM<W#^aCxH_U`%%z#MWra-+4MNr
> zi*4I>kwt?|r^V@QS#rw!;(o>bATv|$TjDj|2j<L1fhNt8x>JoHALU3!A*6RR+zZ2*
> z@!qld-#b-eRs(BaSE}H8wh(rR#yex1(YT~+L}jM2BvlDh%J$Dn7U?MYEq`($<*UOL
> zNo<H=3D=3DlIh@1jMrq<c5fH?BmSodV)_QV-%xhrLxSKl!cM>J1T1H8lA{NV4*t}Cj@R1
> zO-L{5+L$E0WcnAv{*V0qHhA@c@W(wPf!s_=3Dcd^xk<Kq4FFz4Ir$A^Kk0x7VcF<3<B
> z&(b<Ad4G}eI>uiKO-^=3DAPJcY~oDCj%wCxP^WzSjkMPb`!eo*?ZG64KuBrOt;PJ<rH
> z6+vYpDf{6jZ~Yl<QYJ!xlQb{EVxGDMn|_S*7|*c{qtsC8+>Kffe7-<^y5-)Rg)DB+
> z*hLukG=3Dvh{_)@5gm2i+i5^36c1^IdsjLYGnX-o~f!{To-OiDU`27eqEnQY5jC6Kow
> zdf(fR2?_TE=3D_L9tG-_@}RN+cv=3D$!>?^|wgbs21Kg%85(38p<Koo_d95gb&d*>%C0N
> z6_+?C(F_>*aUJ<CG&-e9Xu?DQK>n(vSOxY)e)yhekqFCzgtq}fQXghjIv2ec&FVjN
> zFE{e3vUV-2CltYP=3DYNGsXn$@1$F7_bgsp?OC`R$CMLf!xC{+8Z@5RBltYh~6m1~wg
> zRw1hlSAxI|rj1;6*8*vvrO0Tk*#TW<o_N(F!ujop{W^Tmf(p9%b{sD>K29Rm!sKfB
> zOdWJ}nA0QQifz%ZO49C|ZoSGja=3Dw?Gb}1Z$`vzQ~lq8-@E`LN58;|Wb<?5{M<X0_8
> z_INh*Va9W?E)B@UMM~t3y(fHVE@D@=3D1sy2!mLPW7Go4C$l8NG7z=3DcipA9#`P^oPEy
> zh5c;40r~M$gCI69u!oLKV@)#-QDCc|<OHB~2Q3-RcLuivh4K7E5s!zz$h;a8o}&_e
> zq5R-ZU>S+M5Pv@*TvFwjQTRBS+@<W)Ki^52aQbtW+R;TfEIBJ-C{ln3owoo|;mDCH
> z=3D0wrw9xkG4H?SYpD3Yq;zg8Wjc`_99k8su?XjbxvSD-<4eZ#13cioOBGjOlikHvKh
> za-q?~xQ<zu&?4iSt}Kf(8-xb?N?NiZxx6xPk8x=3Dk?0+AZF3M`_-wxZMOx;8G$uiyn
> z#(lrClhCA!W?<@3PRd)ZK{g*$uDWF1CYp4g0|$lpQmA&38m>-`O?cc4SwtbBZrT4>
> zLsJ#-o`y&?kPeG1D2BLKj_O{+Tnfm?X9t^5)>uuzMKtgm)CZ&`4O8G;xijkRc9U+w
> zrND825PxfN*vS+5@!1bZtOk}fHzR8tY!+{JaWSCbo|}c=3Dpi3zds~&I|zM~v9_2ozo
> zw%g&@X%i@2Z$2!DhXK)a#ZS&brzCA9G48<Zaqu^D>i2doV~x%mV$!z;_8^nX_2XVD
> zf8{0qoA`u&o3#txR2Pb65{4>T+;dBv#(<PL?tdH-g6=3DLtF?V!tC?&az10NEms_oe=3D
> z7c7)Cg}FNaxMPoDgP|=3DZh?fFFUQlxZ`WR#19y0oK$eS@!pubURF+V(qiw*9uB{i$x
> z)?AYk)WsLKucV}3Q=3Dv*eS<W5p!5Qg4m$8y039x&3o1MX0-8seU7-C8rbM5->Qz}su
> z`hQY@Q|K+V7E+jj0=3DoA)Mv<Ymsl%ZnoDz1Ex~$49rrRx|-ML=3DkuV_`<N0WBL(PS!E
> z4UF0Zg?()ZIWZA#H~l-7j3fcOblk590ASsVlYGHBtMqlH8ODV33`|lp*0(|%6aykv
> zHssluJl?0nn`A-DR!5u=3D9nit4`aP5p(0^EHwf8RP>=3D62!3JFdQ+dIV|?H&TyipW{n
> zhs37u0VM57YX{P#y>7`#VxaM!YlJ;S$8mO=3D*ok7tr&rESO7IIvMmDy!E?LONWtPA0
> z_?e1~Dz9w<U`4h}GD+kPX}h<VHq^2=3Dw%_mov!${An3o}XzUW&UAg6Q$0|}d*!GCxy
> zjcG6|?FBFjq*p{RirW8~_g@$(=3DeFY(rlSDDux)DKY(IoT_P>k{+|#*+Y3-!<d2;1F
> zeP>kgv5w}pNsfPBJYar?sOiDquwb43(iyAdZu!T!iHDkfg8}MDW)gO{-M0VJ?1V{^
> z$?KGbp44Ax4Dk53omy3YCy8*Dp?@L6RaQ-2CmjLqf@+N&xobp1T;VqQ<GaP}7?M*)
> z9s>z6@L_2`WQs*88WD0!-B2jz3Z>77bCM?HOd<ue)u`xu3dgB&jGOkPwe@>>B7O^`
> zfe<c!#}|u^c0f}~3hna98Bk1?;{ipdKhDjqKCtY+vrR4`ydir7H+tn{s(<(fGv&^|
> z(OSdLnzp3KwGO9@0Wvs@@h}h>a}Ea^Wipj6#CvD)fK(&6h`)t(dXt_&kCkKUClYV$
> zN+xzHMUxPJ3_5Q6g+<_n>CjQSxa%4WpH$VYR;l8Ncwq{R_#p5BJA^Ip{?rLK)lJ&E
> zKRlgiO`x?yf~(dBH`RG*pnnW4bn*T1+q|i-k4Z;y+>+q$?@w}NaWM*ic$AvJ$#}IX
> zdPpn%5p1rQ1EyfZiYAX!E;Ew?hJaIff!wcf@p3sS8Fx>;$?}RH0-GXysU%!>qjC)D
> z5PoB<tI)AB8etv9q?Sh6?qfooaLy;00aQIea~B3R{|)BmJ>Rxkaewof(A#%1)||t)
> zT@Zh?{k)bl7*Sp+EjIC2Tw&R8T`3O(Zn+UZ>vk?FE-TLb+>py%3zZVGO`$N7HeA^S
> zuzifb;o8&(pWS&E5Y|D`NAi>OiHnC}M;b01Dz1o+NX!!`4D3=3DLQDi|g2u?$8XdLW!
> zoW<TZKbyC193kD&BY%-o<cAqMzTdPTawoCs!OdiZJ7^PdX`>09Eb6qqjz%0l<Ypv(
> zS~}o@1bd2n95E<YB3gcP5y}>#G?*l2F{4M&2M}|w0g?#Z+Gjf-?8QhmbGWkDv4{UX
> z5QqnZsCBencwGUC6i9jg;I2TY&?391V}Tv9q*jgQJ`Q#>%YWQR09n)C@VgHT=3DwoOX
> z42jdt2zgw@mB}rs$f^CJ#$@SssLZHzQ<k0As8Vj{(2~_PNxhcoCA}8a1sTfQl$TF{
> z+;FeIWB|6i&?r)Lmp{^&{cJwQhPc;8-V4WBvj7xZp}Qaf$9^rp8N10@8|LmE?qDQm
> z0miLJlN(w^nSUS|-6I2RBz5GG`bq@}@K)}Fs;0kb{qsJF_w`^6WUU%w3CH@=3D6C|@!
> z3h|_sZSA3RsHF%)AE7^k^ik2Z5}$9RSm&FS5L8cL5X_ynezRpmuh(3i?)8Ap6Qvtb
> zk0Bb>Y1^a45&d^M=3D~3Yib<e~pG0SaKf2MmxSx<+U^?y$n*{2r{UVkX&*WDU|J$@W9
> zwXKMOMUMTJ?$57~cO|LB9RE3^4Lw;O&R1-#3Q7KW2UVD^C0Z9P=3D?q9;r=3DalkXd0Jy
> zXaK4lH20N-oy+Pv2ON^;aH|^rK%QIi{J>6eZ_OCW$pZ2_4|QC-*1Vm9wJ{DWL*<Kv
> zq1<$RxqonFmt1#y_K-7CG-d45x*Kt+xPOyIOmK3%C^(i2W}NU_d4rI}+ITB~Y^7J)
> zLt-rTrVN;=3Dtn7nyUY6NG&s4yDxAQMbtup{0JgG|fNzCZCR@*QI`&2SxMcAQX0_JW7
> zHl51XedDjxiK-j#Ii<cGt>vOM>8p#zC(ihA<bRGzO^&{UQ^+=3Du!F|8VB6@nZNxex|
> z3@`aUHK@v?7Yy_IhK*WjW8%lgt#L8yt01mxKLuuaZkergx78@W>zn2D_Juta>czNB
> z;tF{dv&{B6q!8*K=3D7|NcZ}LclHjtt@cdH!emBW!0=3D}9cC6#+4V4DZ{kg8TTPhK){8
> zPk(2arU}Z26rQYD2mLa9O0Q_$+*$~LIb}pbnawk<Hl{zG1(I5s1uSeZJkae)&S}6K
> zxv`<WrLhvwrk@%Tjr?dICOQs;+EkDM&%ud0;d+<0a_H9g>~IlI5wJHWJjUvdW9Wn`
> zGSaRjuZu=3D%sDQyaH%3wV#c&3lvGX%J3x82&R)K0vlcq-A0IQuYAVkNHh%JWl;-l~L
> z8=3D34O)e9s%|L5sENOTbaMX8s#XB!+(0(MT;HCEG@m7O~Gda@=3D@ZH3sL=3DnNecS(Axo
> zv1ZeXBvT>MMh9c&R9Y1U96c*B^?Ckq987-x1ZNcs`ImwmIhXOJOeu#TRycs(hJRg9
> zKv_Kkqg)~t&{EfuXLWN|5Gxx_mt2{ONRS2Ii>#{!YDkeC_CMVph?E`}<5zJ%H1ebp
> z6tY@?6>3kQz!6x+c-}W#j9eEM*Y(EM8P>}&?P_T;s@B}|R@SF7QN5QIevXBG2E1!w
> z9<ul~GC#FCs4gG+1j!E1vC{{D3V)N*eUpueR90FyQ~n!-(5Qp}mQ7W0C^Q8<x=3D1P$
> z#-#Ts5T2P$A7bxvh;w7P#a7;24<qJ_CV#*-iJR?(<7bSrYVKs)67WLebS5=3DdZ`a
> zy=3D?U8y*GKZthyR)W5#wJ;Zcu$rQk}9ur_pCYJpvE>~QKV%=3DogiUD>mTZGZ5l*X4?u
> z0gPDM+6TV@GRV~rg*kY-y|WMsZY&g`fX|Kf#PS5QD~}7#YZ?b&!3Li39An3W!alNT
> zxE9SO!YXmcGMTEa2R3C$l<)i(t^js<M?qmY5i4SH_J@v;g^)`P#kJ+rBx-WPY+v7P
> zywUnJfPd#sa`s<UFaCtIkbhF4eK-A_c*PXpKQo!w3n_Vv=3DX3NSiPvQ&W@0?=3D=3DY-Bm
> zhv~3$<;ESv$FplwQZySMeSHwG-xP^=3DWAgL$bvk3gT|D*-Hyu{$z!KIc?KqfcGDX#<
> z3%N;BI);G)o@zcL#Q;A~{j9l~kc+`-utw%-n&VY%2s8$xxGfC8)qilsmb+@4%u4#e
> zfVkrCF`{E9Q2o9S4k^CD%pl-8eCEZ0{BveC1Crh;5Ui}+G{|8&Wh#Rhu=3DmlLS6uvO
> zK=3DK-9TebQRLBTf-8;>6S%81V&VW9sWTme1v7cRR49omQ5M=3Dicksv&2=3DEvrCFOR-@q
> zTHNfxlnM~$VgHk?jDI+y{vln&1j6nSL?Q`1S*0}h#SD+e>A%y*ymiU6MCF(tp-emG
> zawUMfkckKE;`g>u!NUSKc1jYZ#n2mwyyNI^+BuQy1D&0=3D_5pufH?5DUwJP&^K(5}E
> z%kw)M3YqOl2>}ld?d5Q)3aGh=3Dz`2=3DI3`9+!n}}7neH^$F6MqI&|NIX{*ba_gC=3D=3D0=
@
> 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
p
> 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
*
> z?+gMrY8o9)25>M)XuE!6_M6McDjVAW0E}$mQ;-!iWjudnl`=3Dg)MI3L@A7MT`pgJ-+
> zg0(r@_`Ue)nRsR7aMUwg5M<UX;3>-GA<0^wn92|MahD6%aI7n1lL6Q|I^H^4amn;U
> z(Db>HIN8|F$Gv}i@$wb}wXySyL_1LK5CKkjY#@>_5kZXdgEsisH!^Dbpc;Ed;YLZ4
> zdz4^Wx<P+RL|0>kwVx-(ZZ<5As=3DC|tZ}xLv%AThH`}(O`KAk|>4Wml<{r5T@IkWaB
> zK@O-C4K97aaIFp>Qsl%-_N+C#*V>R{&muZc-6)AG8AvfDSiZ>-YmA)M1U%|2$D|rM
> zw=3DIc;hAW!Zwnpt6>2TkDx5sE;moa$0M*)-IV&H#!Yv^|1+Vg-XMwXGNMP?g<y#1;9
> z9@+yBMuV)`I=3D=3D^>Llb?iGrgB*!QW)Hj^`|8+EG#*BB~$G)v|-52y6DV3Iof%ch}P0
> zXn79w9Qzdvv~F$qDq)>;cRfiz)uSU7R`jO59XQ+RM2SX)bucp?@5T>uI6DZ=3DQ+z~e
> zUod}u4%a)|XOL(WqQrmyAQd-p;7AP(iS~$~Cf8F0a!Y{?!tPI>JCK^%a>TV&k`qIR
> z;>v$rE(xpV*%=3DeZ(qnEVf>7pnhFBb6SlNNky)+{ejl1n9UM3J{jBS{5JqRU7hG+>M
> zuz~=3D%OBl3`{bt=3Drbx@Bca_<!}xzYzhlmma7H1vz3%h<!aDCV^nvt_yq9F*t~$h#Ew
> z%+C90RW|(%sv2F+wz2BfRP9kOdUiIpmN8zU+zU9N03bHlX3?A>>m$navU_OAfKFpU
> ziA^A)(43TRfR{Xe4E<!5x<<QSd^`+`c>fhKVz*(bAHsONF=3Dr09%>iI}Deg&z)xCcY
> zo(wI@R2CNV7<#G0qZ#4PfKO>8q+wQgN8sYR@5~Dp&U3OPm)1P=3D14eeVlvpwPUcLlF
> zr!(2BSk8qKV;2Sq!Qf)$C|tKf!YPOOjcW)5q$*jm<>uc1q3Qk35repc!CMdFbyYP2
> zi|R`yuw(>7UG?4rs|aAjSG#AgjLv_~`LwT0FnwJ|-`C!A3XDu+O~~-`KJc?4epS3Y
> zYG7Bae%b0>TPc--W)Ljd)Trr3KsK$Mw>h(0dLOFDw6weIhzd`)YJQk&&*+W7dH2E$
> z;8+uRz$&{Qw=3D8v=3DV4vIuf_94|QQfMF@w!}V?9%4$96P1?N4!2aPps^N#Q=3DXJvP=3D@=
H
> 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
!
> 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
%
> z-gKU%d4ZKh{&~}Ve8+D&iDSIYvu(DHHEv0d?BECEr&Qp`6=3D9t}aq!q0j%K=3DLqAN&$
> zh!_9_+PdX-E6t7=3DM(&Bc)gO*UNtS~fAC4U+Hzj!Z$n2@yC=3Dk|}H<jw!f-~P>x>u!T
> zquph(O(h984HC!jV0u&6W(mu&ffrwbEE<Qg{duvcD#~so9S=3DvPuJ+#z-eWN|=3D>VU6
> z+$ZYJJxBL3msaI~ae()gQbK^@oK{SKxy$em<a5Y22FsN;>4;FKRr0JIqWToMW&$9R
> zLD*#SyO{<*R`_b6R6jqKrc=3DO3!A-7i2-7x<)#^nFnoa^AM6}xscyk6y-Y6?x|Mt1T
> zT$FJjP2O3ucpqU%6H|)*IJbR_Ak9dPhOB$=3DSUhyAiNa_Yp7lFEMC4|Ww*+2)5zr()
> zuV-^*(u=3D55QrHhfBk(|i+1kA8nZ@KL1>TnsQhZ{81YvPtHOdnvyfu2*%`Y8!=3Dc3oI
> z>cKa=3D>&nX@q=3DEc{LS=3DzC9LMZ#BeV7OtqUZ(2;h%-RS>J{*5ei^rbPMdsh^~Fp7l4?
> zkcw#+)zfE+63ZiR-8ZCdLVsF+l<Ahgg0^g7TMp93yUwsTIr|gwTPaq!fUXC*D;WiP
> z<S>1{SCu@>S<h-h*W+n5XtyaL(aWU>E?nsWI_{+4Icn)ttyg`@$@2=3DvbjYSY)}O-Y
> zyqw*S_1FJXNTTzAaZHk=3DL%;w_0UL&4`+=3DHH0k=3DqnVno4RRTe~=3DXJ?In{Y$a73&($=
C
> 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
R
> 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
p
> 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
!
> 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
`
> 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
G
> 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
m
> zE_b<8*O;~mA*J#r;g<+T7o_4<W*2!`E<jI`@QA!qt+uk|@>5O_(BJoG{!)+!7T}@d
> z#r6j<?4>8LXU*+}_5UdK`G|>-3)J;;LZJOoa1L)AQGf9Lpd06LeLxWY4S1@uDx|n@
> ze#cO=3DZwJ~;5p^wuar-S5s*KZ*O7UnGS0yq+!3>45o{;!iD$=3Dp;6Z+>mp5E*lDJR*z
> z3{$5J90qOLe+-lU@=3Du(5Ol$mJ*#J5J?r9urcz|Io?d-_>4O6Xc-_AeUVFgO3@;Q4H
> zzHLBx2Y)i;%P(L*bigH{FBVDF069R$zqb3eI1|~57r<x8Ed;7oJPh-V3fykHT)D=3Dk
> zIA4*AVRb&LSf)=3D;3n%ZSwhlrO{xsJq;i#_TCv|aUZWhQ>Uu`#*N5}Z(yjlIh%Pl-@
> z@x1Xzj<C?4h+epQWyZd1d2v#1vu~yKRC>n+zC(!BXAyrc1hw!2&xMH>diSl}g>hg|
> zom1xKkaVBppZtb0Ewm!Lw(dl*=3D7wQ2xl&xdxWu9Jd9E&Yy_(%38n)SjW_W*xi?L<N
> z_~0E(3$uIVO`sC(xbq=3Dopy9^iMUtGZXweMDq4Xa5NgeRSTWYNdn;GrLJA4_&YQIzX
> ze1-X>tipel<|6m2#Jp9a!z#PTJgQI&UvI-_+B#-G8F%P^)-t>$XlXujHv=3DCvyw#*D
> zyWkt1Rv`ESP0#VI)t@MvcU51z^rF`(bFzS|V&evps<P`~E_GD+khe<Tzq4(NsPj+3
> zO>&G0R`^)P^@af7fQ)SvS<dqcW^M>PD?JcDGbMjB>GJO$b-3RP(B`lb++Ky?cJ1D*
> zqEreDaxNC803r?Av4##AQ>C`v@0ZL#2rVlD!?kQ{bwcQ{yO&2D=3D$l-kgkZU?zrhVF
> z+Iy~S;BQM_NW4qx(E4)efN7y}b76DMG0B{p&a9DFK^3V9lNFnADI)s*`Ge09H+P+m
> zs6KyZd-t45<LFn&_>p9)tMR3z0!Y_${OdC(!*zoYIpb|!vbdQe-<dW+j?+->n#zfg
> zMvW1u5wF6jD*wv8msrNe#O{X*WUavjX$9Gu2S(AZv<WvWYk0v9SQ)?^WdL!E8j-AL
> zS`4}zglev`fTYM>3-VVRE%-|ynC<s5vh#mSjNmku7At9gQi{S36Cjy{6Rm~5MaJ0n
> z95{8pRhqAtGr0#P4&L?9G^U2|DGF;yd9NSORljw5!+xixZg*8?xlnJ~&J!whzl1OS
> zR8mf+kQVtd`hn)n7sFFrBt(o#{6^Sbzj<*NrK`fkUQKHdka$$cp9;DPQTuArV|sr{
> zAUG_sv{~BpRY!wbaSdpUADDz5B9uj9*M_b<qPKD;t+`}Ju9c+!9Uj*H`kZj?V7=3D;>
> zq1x;FzSWBn7H9Ay$5u-C&#Y}Zg;)1tKqG-Spy%scgcq>ov^{Fia?~=3D7vy`zhiXeB`
> z&VJr?8eoir_EJN6cX+~pqhv~&J|TbE`B<pM9{K#yq^-<%8QxzcJGJ7z6Sz{<8U|w8
> z-8kA}F#)EV9Y_DTA*&&5+Dw-b7uI@lYu<O4cu<a-n5qB}m4fi4Ap)-*tIXmSdIIRu
> z;#8iEwZFzMB#jnI`IiO?PusaPk`EZ<SR=3D1Zl(t+y`8^{*;)PE999jUL)<S;(1epJ8
> zw2RapPSB<EwZ|zWOG<}VFNGgk0XZYI<l)}&HhFh2*Tu(r>?!ZB^hJd0IAcUs*I-^$
> zsov$dtoB!J1d7l3Jz_M_HSHHqWr|Grmp*-uKLW<FoGJNG5f~I`p^ipTu-tqADMTaB
> zxZ|lCH4PaUyO^b#_QX-blv#fy1}@{?_DqYs(Z$Nly0G&Le$=3DWWRh#-e){^pmP}hC8
> z2KtsYgREBwe?AT9#r-roI+)TMe}|TAas7g@(~yPFG6O5d2}N@3Pq3F7X}ojpL%>gd
> z^zP5h{qqp0^?NDk=3DU0&4M@aPxkrHz2-%|#;SOcBMi&^4(T@DgWG*f?$Mxa^vDL;Hj
> zT<<t;r<L25pZ}%-c?+sapbzy&7A5}{kp@;Hj&0@?C=3D_*#5{MyaC@7bg@84FZCjjY(
> z^OL+fSoZbSZt@|)NR@P8z|D3{<o&Z^nI+D~N<~kne$lNNPVnfgpztP1fVI5pvWHDX
> zS|C1LCr6u=3D^)(%Qd!m16O$eA-@j9@ehc;^yBy6lLj^Hoe;3g}m6Sry4P>OrCTi0m{
> zU&O?%I27%)l0p<EG=3Di-5@bDr(zvA$30eo>n9F|qLm18Riu=3Ds&FXpI7Ejwv|T`WdKY
> z&iO8tA>Y^ecvAfY)~ZW1wj9v0vgAe$eGe;TPeNZ|IOAq=3DeExr<d3eWGs1mC+xL|)G
> z1wyq06l+Jt9pRu&x6|36>gvCen^e`^jlv~`Q|e$GsEKJ&MMj~Mrfgj_%aigjtCaCR
> z=3DAuBcv7$Q4xA9Wt*g6I2jRuQ$w;gSl;IeUnGuA2jOjex*?nu<!)wLIYhds{9l!tUw
> z+(iJsq9Yqf4jz9SJzp@;i^UM20V$V>EP9&cdqEQ2GVABBL&0n!X9XP=3D%?kl!0Sx-$
> zP3ZR8tqHK^(BOY;zNd4cn++{u^re-i?6KIxWK4noi|GbSL`lxiBo|(SSeS4(U)jHx
> zjXnj9aw;9|VEtlQ`-G67{MW5Q7ce@3@Rl05>+#p5Dy)AMJ=3D^>Y>-tiulAo$L;Hj70
> z$Q<75j4op=3DYB&<BpxJQvKJM7i(!_mc6%%}eLMgXEu2^Wd_YN&XRIy)ic30U`H9K$|
> zB7aI1T@cPYn<X*UO1ZJ|i7A!_;Kn&97-z}{hZb;4&nkAasUw*m%ZlW~k6RNoZ;4($
> zP;v*bF5Z9f0)%kp$B?&J-OQi?fW)Mnv?*kN<ZOTZ_QYB#@#Jh0EKMZ0uxUmEl_wTH
> z=3D@hZ00ei0xol>H{mSLD*KSUQcZYo1dG=3D1Rxkt}8nfd0dx7!BCCw#`p4^cr+Ga9xn@
> z)lLsZA#$$X)W!NFXDcm)vR8)ry8_FkpQT7N-?M*S^i6=3De83YSF<D!p>REN7gxa7so
> zbY$h;Y2=3Da@m)<5twDI^SJ=3DU91wuraMf6Xo)FjO`d>wLGJWA%R58i!#!AloTDM1Q_R
> zG&Pl=3Dii~R=3DWY>RFJ%<H(f1J!vD!qyz(HhTraJIK?De3@@xP`yyftb}I>%zMex&SHv
> zfzE%U^$Kh1C{*W7BsT=3DW0J@%|_dUEdj&FkvvdTs})}GQPqu3vFzkJqG*H^eNn)%YA
> z-)d%64*bhYhjx{}70mgw`&pb61sJ!Kuk6XV4@<oxVGjhn8cW7C0t!%K`Ca;;fO&vC
> zdo!?T<vg(Mez8yJGxT$GDFfE)#4r4V@-~08*zo=3DuukRTcQOQjxq3EU#O#xQo19DvF
> zfnxe%ThtpV1k?r7xZTke*@9^9MrTXO>W%HC)y&BjxHyMH*-p*YMO-<`gM%l0<xH3=3D
> zr2X2bsPdT26=3Do-`PcbvJ<sHHW%VDRtC{c-{5EK^qf(TJE2bV{^d$QMlNdYMbR#|_S
> z#fR16wF)vTWs3T_4*)a{%N0be*@UW^f4c?)nu2{#mfY*NRMY0y#`H&(1Y*we{$xOn
> z%kJWku{DqK9S>HouHD}!8^ucGCcrmtxRzp`4Z;n-M*VIA&F&1V1mE>Mj{XxZllcC=3D
> zxVT^tCv9c7Kxw{eo<16+)fDE#b*z7!VH4BY7LQH?h)XW`mN~oeH$ywFSqg6ZKFNYT
> z)q{oHfrW!PK9x%p2jJx4(1e^0l#xnN+Isx59H*eB6lU9Mz4^w6aw(RKEN}ViGfEq>
> z<l_C+8-lcx_K0)Ge(|h}%H8aO#DXT<8P4!B)I3#zX17Ny@@Jh(#jI0@i|&8_?GCBW
> zd7HsaRq|b?S*kkjgmxvFec%)OsX0|?D^DIWD&1m^?-$X?<h{7uc;NoVC9}Qv+}*K6
> z_I=3D(M7C|U*UxG4K1bL1uOhD6#h}S-)6^FGq!8TOSqL9IFAKc*p4ns64RY*LvzgK)&
> zREKnb^_Mg@7x@%G*04SnM+|=3DlRWydVC!Bh^HjWwy7)!;Ddg*JdfheYo5(9q>jh~dQ
> zjeQ+05<xzAVb9OPpY<ahem*=3DaPhVGnO2i0D++E&N6}^dSobrwJG~((`XU{MsF;L$B
> z4K$mowtAoLtX6~y$%1@)tG-@lf^85e?}t=3DdR>EkFA9Gq**@^4+=3DPZ9yi4K17YC7I~
> zayoQm4jDBNSZOC7D1g#CQt8f93plI5Pp_QHRCphLYD9V4Co}2nhzsq?_)aQQi~|D;
> z5km__9rTNQYGMMdUdegn_Bfcs_B@6oFw^|@uEAl%v&1hGDi!SA=3DqNVbk6oyGXkPup
> zqwSuW(9OamX^{Zs#EpNAf5nO}-wdtkVEHG2)Fjc|h9u&lyQtc)c9TT`@%v>4S}>#V
> z^J^?bet<YAgTQTwev3?484HI8VJk?BL--4zMEIs|VNYxgziNl2R77ez>ksw}q_W@{
> zN?$IE`ynaC)wVPc+Ovj)QS)%uMFGg;(svQe&+N<cGT5VA6Ul!?NR02LMtKD@w-p%F
> z5x#)w@=3Dj}{E&k(jF$Xsh{urD1R)S-0(IImr&~p>vv#A6l93eTkvY?YcHl?vi2D0V1
> z!p}>K4HKh|yFB?8+##_EGZ(Xp*1_h7)|lJ~f$~!jm0XoqC#>mABUIcf2I@3$hti_H
> z@<BzeXqXKk#>;=3D4ADk5>tmy+g1)pj5NsF2h;2aUQ3OR((CQuGCdc?fjEL8QGfz3VS
> z+PH-SLfjS*<O>wqF=3DU;N2U83UD<w)r3zd2bUXRWr&?$qo?%(iC;dR_RoIKb&<=3DDF!
> zfvQ6{<ex3D&C8M;Vn0xIDRWn?mbH?)ij5v(_(d!vk*I&r-FJfAn&qf}GpV&-j=3DM2S
> zdMG0NE7Y--3@Sdygm!WArv{x+$v~UN<fkU6tZ#r2Ae%UBq#dlj0YJjL2QjC&b2%jW
> z-Vs&!%l^1Ia&w%Gck}txQE=3DRUWjPatcpi;i)|Y8sy|T9Vc?tr-xXfoLOoqJa;`=3D;+
> z^We(YH7$QJd65m_G<h!jq<dL}voJ1o&0`LpPr4h=3D4}Stz(>itvE9jLDHqhg$hX3iG
> zFB0_-x1%v99@)cjn;Lp8)so1xuVE<Ksw5cxM?9GyP#p;R1vi_K(6i6E_1X&89db~7
> z;F#fLyU>+AAn0ffH`MOVgcDBy>pHc_z7xv?EaQKlry>tvshf}s=3D&08}@NZ@AUZ6N}
> z2nBE|2`~lSl|5EphhQ9qJh7+>tOI6<n-&kFIsVh$Fa$uUbwTa3tIP8uV;Ogb<-LOF
> z+j68Yle4cLE&C`rWmuimsusA#;jtp8kdEpDszZ9}ZUH*x1IroBP#Ch29s%iEh!HJ~
> zyS{&+0P%BdnLpMuQ7l^O4c4#t6_<<GVYoomGl?cEr1<N97zZj<?KxNwScAexx?sQZ
> zvg|GC6!crs;swq4n%J+bJlee?z^>qQy$L%}qIrjpA}kNM!>vM&U$Wg-xkCTi8I;bI
> z9nyN@*Ljv02@)t`mujFfAD;f%Rpo@$BsPCcjb+orCHB&uKbvsh(#A7%@@f_~a;>-$
> z^2>kRlGd3FK<IeGdo=3Dl0Sr59teh1`MOfb{*Cioj{a>jdSR4P6bZEDMl1J5x4@rHbk
> ze8B|~0<j~BfV}ayNX6JOBS7~ZJ7sk;zxPVb@Ks3fACe*4>ep(X?J*o469uGV-OYdK
> zdUo7x<FbgG%`@>tQaXBM(vx)%1|05ra;5xQmL<q9Ok60IYA}6Y1@TTE#ba2hGMc^z
> z%<<%reSU)UEs#qQH~d+!POf4#_O9anBf24ecW)i~NvC#_c_I6GiY@Y8f)_ML^y*T#
> zcv`R_)g{P8(_Y6O(-LgQ_R#xUVMu?Q%a>~p=3Dn#yzNVBnfT0Tok191vd=3DMFE@<dIGv
> zjKu&`MissO{e*HeUEmFKD+`Gg`o<8_FoTQ0KeZs$p|up|pGhbwy|-i@bUF&c*>9Am
> z-)=3DWOo@mFBF#pFw@<=3D$mo0)EMK{sn_U{Oo;ij=3D?{m~^T=3Dv{qZCo?BpVBFuk3wc22=
c
> zQ+Q-m+zyx4l#lmTHh1e`AJ~%KMFb|_CAhiRG%@a<Hhp>f6#F22GIc%NWM|4ArycBV
> zHDi~9Z&D0$)50l>z5I+enQIWnaIj8qjf{|(uY;SWzbX`yWt{I2EE*KmX3ZGdMzSKj
> zY;k8C%<g3uI!nk4riFt16SIF#z^aS<P{UdaW7q5A@M|)p=3Ddh1vOojU)#nnDxatmbT
> z-rmTnw^v>J)b!qh>k3?2UfG(3xGJ^AZx@a6cU@np><?)lLUI;<L9LuREJ;9l(^76a
> z?m70HnJ)&3P0Eqk@*;KJCZ^rHytL1yjJx-Er(j}J)(cY+1BX&+_!xhN`?!b#yZf-G
> zQE@Js8qFxfdD@>!S*Fn-BB4;Y#%$n388VN-6)$e)L>!1PE|_fua`@}CS-cVTBF%<U
> zsU}j_@s#2_Ke_&yB!TXV5~u{M02foWD~+N9NS2Q0xzs4w2D(>jh3jP$zSu_C-KBU=3D
> z?|~d-4(7&*yLk}tlTm-Fh7!ADb&Pzsg@IrEhadmt#iCIbjN4Dbm#`!3>L>rn6s^%_
> zs;5OMnD-sj25~Lc&ec->4pHBZ*g|tz76K&m2Rt)E@Gh3^OK4HT^)WkkqJXPbcU44|
> zN~eZ=3D`iNq*dwZ#bE&y;n6K8!FgxY%Es67nJ-gUc4voA61fGB?~Jglh*7P<2o4_-0F
> z@xFI8?12pf;98g>MYneXuP26z9sEYG1Ey1X?Yv>~zXy#heHQ@)+}Wy`?nAjXyt1ub
> zOW5QZr<`<wJH6&7jKiG8ORT-1+%yhTG6W?~p+B00k`2+2s9L<aGtYN#xVywIl?8f?
> zIm40%Jr32PWo3VUN%Km+M1}A*=3DF=3DP6DkIT!m(UrMK-f0P(Y2{;t)YemWeiu$97Q1Y
> zIAY%9Q^3Q`>&6qO2DGFau>pei>6)NrEN%UaA9N-ggu6;g?p=3Dku{Z01gt?F(epd8bL
> zeY;WxU`6o!aJyAvFs~M4`$38Dyku(`v!Ie6r3W)<stAAQf!7ojT4ZjK_WP!95OAs1
> zkFd0n8*Zb!m+34yaqB{M-IIHhF&Zpz&oOT1r)rBwip{d23Aq(Ww36)YTbTHo3h)TH
> z<&sd<*J@(slq<;ZnNv4?g6y+oJ-}Hb?T`i+qea?lf;6THi%zlwVX>?eO_mr0%DQ<b
> zXG1&DmOOvy_2b;{-pYxHfyex%?qs6cnt2A5@jbTV<slY_l=3Dph*V!RqaaM!hY6TVTT
> znHce2vZI%!UjTr>N=3D=3DX*^Pc$$PJ>9$!)7~OJ8x}%>9QOi#*DzrlS2ey@0vY;AThR+
> zY|zk}Am7OAJ5T-E@c`4(-%-M1B}{AMfG>Jdawvb>Di^4?I-Y*ms6N|RQkS>ReWkO(
> z9^jw1FI>%tG~gR%s8oa<8yHAWOB2#KYl(ZdKyBrt(Rvvmj3FGgpCHQd_KLobGR%}n
> z#3-fcu^KY<9c<G9q!5}m=3DlhU{0m6ae6w2S9Rj;7~e`845_DE|$9ZVd0fq)SZj`5Vq
> zyPkgmRJk13aEwFkUY@k)2rBsRScR=3D5%rwf-4EDs>wa^&VtDW}|_5ryQ!{Q$@%v6ZW
> zZ)P*1I8K$58EcLH84}GXC<nze*_1q+I3`s_QmPTQ;66p6G|PlS)}{-9oET8}pf|H+
> z=3D;QbFKD}B;ZYhplai+!HmrL+-Hl~|Sm$iSHAc?&PjKC1V3T;N&ZMs{*I8k1S9b@<9
> zQqIi*5q3^}X1@aq$S*S&KA?GLVNG9XaXDUp7ZDeAUrfub2CDhsK2q>p-R|??Fv8?!
> ztiv?IQ|uFO6(y<w?Bfv^j@TttGo*k8cVtZCbeitKcB{83YL?hVN>M@aEI9zuIL?1`
> z$rXTm43?hyF}v=3DKrVDRyPpa2b;tM64jgieD_eSlF+XQLSIjMc^nHQVTB6xlkr4S_`
> zX(ZbY8K}_tHQC+*42PnYo9ggvvB36?w@T=3D%eETIn1N}Mz7J#HZ@z2Wec<w^oOPQnX
> zM&KC_?HlI#aV=3De%WL=3D~gIH&Zrn$>?Ixf-2FzZ6N?5cHx=3D{0q%)iH0ZmE5v58iip2i
> zGxDt|PQndupOCA$-5!MMcyq@jj4p;v8SOqZREnz4a%Z3Q0cn{DS5!L5=3D4KoMa!G@r
> z9?_~xhTyix4FALZu||P^#JBm$4J?Y*b{Am0GztWLTcwSZxD=3Da{Sk_D_EVX|W&G|8p
> zW0FsgqOD+-zs<dT1V^j-TMJ$AZGSviom}!qPXX~48=3Duk<i&g;1s|*#+Ksi15ppO0{
> zCEXy340;rp(}x9o0BfS&9n)Ih>Vbami2;()01szXQ+GdC<}6Slx$@(|ht2#%TZZf0
> zQjiQeaBqg+hEfHyh+qNWE8l<WQrxKGvezGpcnEfOah7$bM0G)|`P|A+>YUPN@xJCz
> zcE<k_UL&YUiG(b5K7<Jm@}&q~$9V!yA)mL#wx+0#M`~DOB(cjAFil1sQC}8zZ}B_}
> zJV*Eul^UkLrz-@}0+!M7TC!VF^yhZ)W}}!Idd&?_liVFblWeK=3D6bpaQe=3D^Q2%~d=3D3
> z6lrLYPh^)d`DRoYqrzwDk7{JHGVuLB8LILM^T|x8fn;t+rxO2@64PP2OeWW|$+PNs
> zTiNcN*sWq_EsnhnD8{x{fJ8R>P{&Z#m@5(ih*y*|@82kYSqKTSPQmZ}?;IUVqp^oh
> zg3p8avrZpri=3Du4|>HmLZ@HDwt{1b4LLApr}FcR4#jq59O6q78mt{k}Wg$1RaH6uqD
> zvor_W7c@5-y1}?T8#0d;iMygMGyY&6)%Dp?bQ!bYM!Wco33Q2mP^i|)1|kduicUW?
> zid<in2+Di+Dcf(_2TKb*Eh)irzG}cLDqXIB6^L?+89p=3D{)bxLAcQ(+NAAcfyIM}es
> z_69e8X){|54N3v(F46Uj8s;usM*y*Unq2Vu%`$To<W7Jv`}H*9v5V%!j`5Xh1~c{w
> z(3L8|KaR1rD=3D>?wb$W&|5yT%{<9e8qlW4&q8Kue(psJ{sij0*1?6rTT61d;G1nr)S
> zZxkefw*q%8pQ(Svk?!%t-wyV#R_}nalt!57tx#ZI(~}eiob0$@1<BGDvvr8$5IlF}
> zFT+=3D5+j(uB#-pxcr5&H{i6B1O$iHaq#yU$@fCbv#KU9eI-<pOZ1~i-E)T=3DW@3-=3D%3
> zgDn!@P1T698Jed;wI-C{wT(Yb^h18ZzQ*&ikm=3DV?1Ok7U2d8n*hMBQti@bvcnzOns
> zjr^R%<Bohson9+QYW19>%_F#oc)+8;<lp67*Z7vB`f$VX=3Dg{VWBNNCyVaJgh3@-`!
> zMsW|}Q3Y0#<4QB5mO??+^@euBfR*${;})nR7|!T9Vh>4nK+J%K6d?QjBPP7xjC$p4
> zY78X3PC|dOGYXo9sn2C&4o99&ySfATXC0>2P^$2JD#R$P$0p|4PIjC`41kwT`x7-J
> zC=3DA8Ip@So~_{tU1IzybG{=3D8RsrwH`h$i+Q@R|t)yFFlVTyE7O+*z~*jKPrfvHG@*U
> z&$$`(*{bjIMa%MclWFLSitv8o-g1f#Bv-nv=3DH7qtr(=3DL`v6z4vuzu6U>c&i!MksaB
> z_AmBHePGc0oDyV>rT^1+GZ#1d<{R#pOm6n!8%N3*nBI9d6DJOp!&f3N-~uj&Q?39}
> zOYmXiIgJ4`0rGx+bd;P#_7C;lhGSvT@VZ%LXugih>lTdTl;Q9wIc>uQ@tPuGQBa@M
> zZxVl)eYub6{Y~yqc0>aS72ZH_D_gkRmA~y+Ov70c`MUNq!G3B=3DkWm9sJK`S(3wui}
> zYTZ5;2P-#Ef|05tyZik+Za%JR*-<K!s|+7P;-D8|a1pC);4*}6nD|b!_;p)wA7IXo
> zZ&@^PQ5A*ocdh>1QKl`~1#EWlWUG4-__cq635#e|$LLpmfuk%t?;t8qvF}Cb2;pd&
> z)bc2Jdw;8wKNK2vZ6hs8X?bbi25gfx@cDsrG^|_zc4(jN$pC(ve0{@E3Pu!ctuFT5
> z7%-a!`e#cbCnjp?3B*rEjcBPD3+#`8$qAvKQcBI5v`tn&p-(n|S>YTTuzk6su3~?%
> zizK+{+48RoZPOm^Dy?yc_PY=3DrFP$TUi5NdCbj;Y{wdn8{xx~f)xl~VV5Ry;8Lin4n
> z{=3Du|3E3Nif4n|*PM+_GqTKu4ylQ%@co`<QgLZztu$pQHj8e5>qw>M;v5uEioUF_+u
> z8bp~jdTyD<!_LJkX134mf%Em}e(ZmzNbM7U!GU6FpX;=3D?CUsp$^sI5r0y}ZRqjtuc
> zVUB%yXDQ=3DI2#jL31?*fi(X^EV>bJrTqDA7;*+3ldJPF`yUFb__C@Lb!S;_QNYrk^7
> z`>qWX$II%X_5BD3NMH@8AnkRMnsH#|Pv>dHJXa0kg|qd)N-cnf92<Pc!gPO4miGZ9
> z*;n(yB}c7C4}U`{SVY!=3Dr|*<-NWc&Dni<5yjhzXz=3D^lYdsQ<R#SMa`g(;$i)RS9<a
> zV(K@MLc!CtfI)Xo-+;r<4I9K*vdG)<JBdJ?YoKi4cl*GNu~WL9_ik~>FW7)82Lzp1
> z5uvB$9T88u5H*6(f)m(hs@Z>SSX~EhZcu-1mH{wJ^l01Qh4N%Gd$+auDRTUK!3?PT
> z?qO|N@SGW<wC~2N!S*L@Q^(v)1g|YUd}?mEy@SEF^_6}kvp%v&m{N>fj*qjIdeHsQ
> zN$TYNEUA6dDwTTw@RdD|+LNHLOAepg%$V3}OQEKV<@R72N;B@VZcl$^s&QJp&aKVd
> z+G@}z!2bX%t0{^}^;zl|{HLm>%0hWb%`n$U{D{sZ9Ce7(!_|UxR*TH89ed~}^9UnG
> z6mFK=3DNw<r`Q8cbUe*Q?eT&+|b%%ep7@P+V5ek<*I{MGz0a0r>BRBW%AK76|Boh#Cn
> z$iU};V<8Htz<FeEOiO=3Dm-iV$f_#54G(|Ed34oPoBsm<dc{6H*vlMoIlS)WxcE!~8i
> znRBh#Ui{vcC;xpY=3D3cf_6F_SJ^Z8$8_jvf462br`|G`3iGAqyab@0SqfI(XmQT?=3D|
> zHZu6#GR*Y8uIl$OP|4LR&{D3nQ?KN@x@^=3DJVBkyE<@aJ>AOU~z@8H}5V32I|yL2j*
> znpg1v2!=3Dl*aPSe24T3m%$6Fr1!RIv&vc?mG!9yb0i6iK;yey^}t?7VigLBZ2Lps&K
> z5xrhPE$wMZB~mNQnxHD$kD1^wC$QCNKrNm_ydAnz9@n>QFtBx$a|=3D6wg&aOVU8ZzZ
> zr(kcAt?WTy+{k~&5<bvnj!e0xvJEfN^cW=3DTFXQsf2F)gw&_1WurZ>92R2V)1nTt=3DL
> z5tGe0S<a_>u5w4N`C_z9FO-S=3D6gUX-%wvtJU4QCedVn`Vp-}i?Soqk5H7b|M0yTGL
> zfPWsc_-m}Hq7$k#Zn79Zv1A6`U-o+d+D>FA+%aucTTp+eLAMekg+tl5vcQ{~d`B=3DT
> zg_v!O>tve6Z#b$9P$~^x|J3CY5gDAd?*Ucvj4@aD_c-zM6TbE#He0Du+zP_4(b4Pi
> zm7^eCZi3)v^AOcWLWOPGVtK+4Woo1c1?5>KV*U&aww(l?=3DWt!><r>YG#%Kn#cuVqA
> zx=3D8e<NI-wR`TwW8n4W4!Ng+P6Uh#huQn8BRm%{?D_UoN}$r2Q%ozfWWa)S84?#c<7
> zXG$Yz{{N?<7vAn$_Me3fr)aydmlFbARoD|-RJq{RgG1pogS!9pz<D-2ttV1knjNsC
> zGLmzqV^@cNLAMh;S$jZJzn%;|(S7}-g!^807QugQUas1iqHzmm>kxRkZSn85n^_TB
> zth{aTaKUeb66ZSYT1()Il~{=3DSr#BjZbG0;{EMps_+&}DBvABZ%|H;YRmrOs;D37J-
> zAg7%}n_qGXc<v|Vszx%^KSGN{ERZRPqq=3D~cx_q`oWOA4qXOjRa-ay&b+bY3298#M#
> z>Rx|Q-mv7A;6wlzT^?BVD<RKb%Aw4i?FKect00RG2S27c8c)gIx?OzkM)((qs$vRv
> zWmNS`e3&9un6crW7lrF!Qv;{8KZ#sh$z)hcAK`;_3*G2?#iGH3a^{QLqr(L9m$ai$
> z1O4hY{QL0cZ>6dL8fhyg-!PCKOvWhO;Ld+)!vL`WRQwYXHCMmZXm=3DY=3D(KS(=3D!+D_H
> zR(RsU8&=3Dobkx9Dl`?rz=3DBA<rx+v)Zvmu-V|#3NdXA!jO*YDsUdb-=3DY~n059FZO`nq
> zW?i|lGLOqlsaTyqggg4nA@J2Xo+^j6`*cgfnmN^`!0^Blb1)2yxtotNDYE$wLsNh5
> z)gV0W%fE{LHu?<_NGz&c*3qP>BpHY1awWBC79k%gcZ#n_I)UfKW1de$yuf7DAtO=3D)
> zla&^|TFfinCPY_?HX|hm6lo2=3DkVnXzTtPcL#wj<4ScVvb!nPkl!dMG=3D*6&O$4MXlP
> z@9!Phoi6E^U@8uJMvB61+Z(b$V=3D{lN>^Bb$3wo6LI0CI*vt){7$sjiG_B7fCoWdQ1
> zPVeg`e-dV|>W*~LA1>MD|9|^u=3D6dfIN0X1utFgU$U{5~6CF-Nv6ju?FM59dfeY1Rf
> zzPvn9pOf8t=3Dvl2ozd9|I0xFN%%$=3Dq5O|m3u&DkkfMgdLZS*(S0snZd+=3D{<i0kCE=3D=
6
> z@uK)iF#~aM=3DXSgVBD~&Yr5zi_eRd{T1d=3D7SOsiM>cnH!YFoK|LG>M8tJ+mBUNVUxx
> zbKQe#JiAosa_o}HYEl2JQaVv0`;|*fnvw<-Oz2S9#sE<uXKsMFhZpEcbKXyTrPt`=3D
> z$x4IXBucUe6%qku37&%UCe44pnG>kr$$(vWjK24KhM|5vRCB*2+hlvc_cKHUi}3T+
> zLYhd{SW=3D6DSsMVuH5nmd5xXo&FmR>|x2?aq0F$+6sl}S6)!C?3Hlbr$f0taZj%K3n
> zOYa?j9Yyl}mgW4mHU>!7WaE4j0=3DJ3g4zht~8}r~vGl<(3{S@^ff9!u=3D7X)Jg6R9kC
> z{5J^MmkX<vQtIWtp`^Neb_~PzymOu36Rso;-wq;an}KRmLYDDdqI2cg5sw@Q^8<`8
> zaDK6R_E^givpmLy8<1@e>dwL><7wM@RP=3DVQGJETwM@3w|+Wp3_$Om-?=3D%LRnkmh^v
> z(%N)~D)@{USGwWjCvJb92jk}n_kByipj(+z)9z?6Ex}u+%_)g6@PkO6f2_jKBU4hy
> z02**DF3_?vzX6CRHJp~+u}U_G$83N9KftCgv~7&q^hkOob|jT*_Z?Gd2}uZigBxs7
> z;Id`Wf7jn^noP&cmld9hC1%{cPLQSJ%cs}$XUsAzN`VZyfAD{$vsdKsZXqeWmg<u5
> zzy^pLe<gOPN5d0#4cZ52)1){^Nbul8075&`B$$IU)av8424m!N@q*bD9GX=3DInTN%n
> zi8{7z?+aaM3j~xv)&Y+MeYAhVVo_)^Ua!otUOW1d4&|KN;!CAfac_z@j~VQ?Hk|qR
> zYacZc=3D|)W1F%p0L)sDnI;Q)nPe7$f1n;VQwvmHQcT=3DczPy)TFusbwyE0!5&(^o4me
> zRH&FHH*Kx%Yi8X~ZRbvIr@u-88wc0Bi8Z8|rVK@bN2_^M()2w!ro!Y2hE$e6XgGPO
> z?eDClOG4oHd!)De6noVp^|Pa9rpkh*HAAjpxB?oI+G2nH{kpP;ZY;88vT3<4v=3D$_B
> zn&fhFK>H-Hb%R|NT?~@hCt_5}5@zN8;<!I<U(G#Jo<l=3DIS$4tHP&kx$(lhrdjFlqE
> z?!sWqJbwF9iNXWlG})Dra6%<hP?|!`VL+VfP8@HJwFmyM>Yl6Gb;~V#iu-JhhgF7_
> zjQ%|qwh(_@hyWxf%go^9x%aQ3o6R{JU*vGEpdToWwhUxq_?^2!zJs`Mot3z&E3$3^
> zvFFBKNU8#e-)`GQwsfg|kq{ym2p(GjWr4#3Y!Wh&R!+cso{B^iv8>fsVdGOrG|b5S
> z$l^L?e`2T9Ct88z`T9=3D@lasjB%3=3DUq`hyub#_NACCaqRh;C{UX8lh_pg?~5u_nM;Q
> z_)M8E!A}~zxDFmum*Mlu`1Cx6o|GU?v6v*}_}aGsX7ms#qN~)R^=3DSbdTtyxYOm<$r
> z+GUf^MEW)5@OX=3DBYSBEtt0Y@i4<~G-NO)(-(DP@5HgoXBVXc$FO!UMFK{~>s5*NdI
> zkdS}BD~?3!BR${}-J7-u8F@$)cfeO&L1K{#TUSugha&Jkeybl$PzKPT00;((5YK|!
> zl2Vg)^76DwZ9y-oF%>RFdz@3i63HoBF_xH~b$pJATdZh}CQD~vGS`^}rk!G7Y<?Sx
> zI9st~b%RRl5oBEkb`}B%ULIc)l_3=3D*CeD8^+F@U?PlFqb`m2P^jt$^teNb@IfvEgK
> z17;o?Tq&!?_ksPFc!n?fUp89=3Dc1oaSBnyc4NwO5z<3DLheK(u!^07nEF3sUrC`C~{
> zaY<X70mJ!%n1EouA(@m&25R)5=3Dr}jDVk`LVS#$+;p-EnhS{5ag>?@rQt+VO-{~3Sd
> zEP)2|LLZ{!t*A#lr>9{aG?^g&7gzEZxN>J6-%23eH^lHeVd-}ki5wW!gzqKruycCW
> zT|?;LM;Uv#B3J;Y8>2>vnt9RM{r7U!L}<_u0{~D=3D<u*LZKFC?-n~;?lq@A_cgM5TX
> z_a@s^KkZs9=3D1A4(?g{~pB;4a9J{NyRmhJ%v`3NFfQMq~)ER$K4&PLBiR!asPdLr`H
> z&Ga73U>d*yh&WAvm-L4NF!xg9oIaKRb!jK-`;@ktoyHJfB2p52QCI<S30Qu-M>P@9
> zNOnzH|G9#{)q(l0ZRjmwoX=3D<!V>~BtbgOD|CTeS#(=3DEa8z0}hkKXxEm70G{jPiP{t
> z6>jK=3Dd@j9X_9NTHNGM2l0#4uo)}<4N{gaLkl4!#eoZHg65f%~2URz}Z|9a@{fCp^Q
> zHj&rhrwG2D0%edYVMe8>!D3Wx3D|yIF70Od08W~{9lTBuoa?oP8*3~1Bm8ox3ZCPC
> zrSt30z#?ahUKUE%D!d<5%RGOYR?R->>Q6_1jSlq9Y=3DKK9Q=3DUT=3Dki2X@L4|i@ily%n
> zm^FN_wWl-9t=3D<b&c?L~o-w)6AD=3D>&`c|Dl*gHUv!{<jPy(PI%D#ZLsK0ZP|osf^n&
> z8wCK+c4Iz<Aw?HY_ugM33|8As7S2_ZgBXKL8;y&;pVhYM--8hatqOl<Km(N)r>LA$
> z_8AYZll1O~`nadz@QX<`trp(;{S>6AmT**^ye>OW5E<9Ry8-iF3%In<3_9&2mOIfj
> z@QH4;VnuE!t;HriG*&G)v7lpUW+Rrboc?9*B8nKDb)b4QOeB@T|L0%ZfP58)nRNYH
> zn86%91_Q+&SrSQeIG=3DwysQ$`h@eXK9@aE$^ItJ;mim%n2dwaPXCQyfo*K0V`$TmEm
> zczQ-Q9-Ywqn<xTU&M52<7o6v{Qq#o`r_>nsz8$P7REHBcT4NL%IUTmbR)Mva<f51U
> zUBcBUPn~GE+j8#xhw{=3DLO^+t=3DJxYaK%m<ArJxA84qLZm0pyYoakYD@qYQ9m*xXPPB
> zEF^ln<;KV9$^n3sBY79T`SS=3DCUcxM?ka%(&-5u(xoQ{77-CgQ*a@o;5WAfIZe;6f#
> zm6;O;oOqyeT_U<JQn(Nx85d@e{YZS}J8?J30_aA(*a?Ppufx-H{uP6WTFi&79vkev
> z)bgJ3)GblJ$_9TiMdlbgzUF1m#>Mw6oe-MA$;`A|RDj*iy@MAOHFU&EZv!rPzT}hO
> zx4n}v_4ZbrCBqJe`?*#+9||cl>)UaD#np08%>-%?&gi1QBISX4Q7C<b2N}Bc0QYq*
> znc;_^bvsp739@!n?FS)vQ>mg-TnM-?*|<;<?LhE>Q&fM`X|{U@{L@@K!HjuC^*TmR
> zzWpa~@Q7gsGT#?BYzxR#u(C@ifda*1-g*T{saDm+rXy3xWsq8enoll1`V$oPJJ0g0
> zYj3FR48nWcWr`bJm>2=3DR^%eq8uO83oZ7MJ5_JTvPU2cVO<z7#Q+{{yC9`tpCqz#Lf
> z>qCmCBqo2^)>^Et#qSEQg*9#2jWW#!u{bI?CHt%?(O|obH0V%!dB00L%--5ln%rZ4
> zgjaL`b*iz=3D-0@uifC^3)!Q;tdX)VqYfGMjdA3$`gdKIp{2%TO_!XIj<Z)UFxN2F3q
> z8)ZT%!d?g6=3DjSgxP?@_|?Wy!L8>-;62K_=3DBeei#QjWo9w?3eNl5Sy%5UW>|{o?kS7
> zYG36trZ%_BT(G&YlS^R~$MYB6Pv{!}cuN&d2ki7LuR}>#!{!>WqCyh-{|f?)&V`sL
> z1V3L>VA*Qs(oiPYl;cCg%OL{?$~7s&NgHL`Ks<(lr?eH~J(me~-B8MFk0&0$sK$IV
> z>&$;XYsV7`uh6IdD;s7_zR?~1V3ONCH)f)DP*{X2Y&F7wg*^52eP_G31cSivAKeYd
> z;X-F<g7gb7V?#5f(Z=3D;pX@;!wRU?6wBukN}6qZvkDk3%<cU||d120wUz4s}yZkdc6
> zEB?(An5`b%?e}R6!7nWQQOi{;mQ4?7>kNMY0@}`(9rU3Hh((2ly(n<&#~t}#{mET%
> zbE#1A<$83Xk)C&pE$ms#K$sezVa4SeoG|Q->35fjYtTIkA*J1Wu%<`ICRG-;d3ps|
> zul&8Dh2lmJv^~K+{~X)xSsvOEd33n=3DAP3@2*AsR)=3D&j>4^>cfNSnI18TK`rV+{S-`
> zUoz2=3Dn(Q>s<NKWPm=3D!_5qAnqgMZSq6k4Y?FzYYdWN9)Y27XEEl<5k+m@%EH%gBmq&
> zHtOAg3YfX&7}|o+@}Ar&W9F?|)zB1_*2jhC6M&|v3M0ZOeA<$nK`|{4c3;$LfsUwg
> z#tXuIzoaS!hJK1>Cxl&k&Wm{q2C09eRejsZ|6R1}V76(E_bWbErPy6&o9S<O^Vdpj
> zM~c?KhYX0_GiT7?@WTDvz-4|jB836zJITC?9YkS>YrkATE4ufp`$;|^&hA2+jnUKy
> z8ssqB#L%Fy$w+*woWI#BG5)BKH*9i3Myr3c<2xr&Y)Z1_LFIEWSKJ_tWrly^Q+%0D
> zpu2d*8A}m|y>5uPe#@jD3MdjK<7)4)3sUy(;k;dx!b<-Lttgl<0XRZSd_!vy_)bs~
> zjQTh12(3do%Z2j!k96_VpRAkc#BsB_nT&2hmb*AtVn6Lq`@JBu<t^b;#opXutr&}V
> zq^ME^h!Rp_n{3!PNN@cS4ZVLZ1l8W<#FdbJ`(y$0wv}{t)Lc)3yCUiKKyqCM@WFc&
> z^kAVo8nZ?b9L@Hh!)E1Qh-cHNU^kBcHSV$%W`^RrjT1&$%;FcaB)c};cPlxs!uwio
> zH;R#!27=3Dqzz3SSpdpXu>rP)~aDARy+6-@(*e(grEfuPuoOoDT;eS?254#>U%q%nx6
> z+W_myf4u`D@(lGV&-+5dqv`aK76On!?sbz;kmWsI65%Nh@BUMWbqpKfJ2yJ>t<s1O
> ziYn0tg**8w7&9C(0WUXgOxjwlMB!X8v=3Dz+oh%3=3DE!EwUCZ-OzM?>cVq@R^$B#Pqds
> zLxnNRa|v26R#s*1_*H+DxI`4Xb9VEJ48IC+^6h9KbtI3{S;Qw`IuGFsw4LcsrFCht
> zS$kN&J#rG471=3DI#<6?E~Y?)Fh(7c*Lj~e~TIw!BH{K1hFBsQhN9<y0zcwKsko(x^v
> zJ@he|%{j(2e(0=3D`9Tmu=3D`X^rL!{>8g865I|P#ow!Bz)fxB~^b*l=3D^bO5!#*x*7MaH
> zqh{ONHCG?&iSrKNlH4;*3?*9kAeXGQu9obbmCE|9wz1nx$||RLbB38cv^q@55cqij
> zDBnZGW2G%N82>gaBoHLIHUXlBkIxsSB`$Hgy7NICX}@X#oaH8}{@2(sjDO5rwid~S
> z#Ja@nB%!V%kJf*981-j{MvvD@|J`h$v^seu-+!3t#olOc-NA4sLyU4S(-VnW|0HX#
> zzkB+s$cm*UofiRz3>sNI+tYrW+hgpy)ESE!Au!9%&<rNXh*PO)R`MD3*y$LQ2ieGv
> z7|IaeSbr_DC~|vSWX41P5XA7FuXg-tZhI6(PJ+!&)k1%5`Q`OOM~mKFk1o;ijju}J
> zY?5*veuHZ@9HQ<NLrsXsbGJ#nSIB}e4kNE3`pJP;bnv8Bf!Cao9oO6qZxShOK<e?L
> z=3Dp3*~I`qrl=3DL}3r{$WQnKl@($kG`58wc2^NQnNU8x0=3DCLdxP(UYs;6d5F(kW(RWtv
> zT)22!35I_nKQXO~1+s)-C{7<;1L2Lg%BB)c<CKmyaYZ0!Tc9;|QR6)(nD0dUfTdZ=3D
> zR2<{S!?gjJZ6pDINpBXcJAFad52Qr0?z&>&oth=3DYE2%<+Dk71&yW?pB_Rw1L-^b87
> zc9zGi0R~xFrvL~EzZ+5J``5f$mMhC4e%lau7hiweHM!#=3D+BR8`&K4<5C$j0fEK@v&
> z;BTTbgJ=3Dm<97(N1s47`W7gC8xKc4<mn3X0T66p#GVnYp(EHt5bq+Fg^xploqSNBeg
> z6~Z-2+Bl59QoEl)q+I26yu3Jgyj>Bq>z<E+Z}L^ksxL(eYicC$0bhRzkGvT$mdvG{
> zm!g08KD0GF1w3h1m0Lo3R(gDWwL0#}C6>59*#)-{6<Tbtbcyl~1l!@%;YU4)sP~+E
> z5KqCOYctf^2S|F%QcwLRzD~i_taPlbH9-`Yd5pBd3X^)=3DbN78yA@}U&?&;8VyPm>u
> z>(bU3$T0bg6i0c2vcF?#YvR*#Xzaj&7bAaI56bu<0#CqZyP%1Q4sAnZQO{pBp_JxK
> zbQ>ZNw@$LN{qe}{XI^{MT1?}@T;7!PC@Hch6Uc?5%k|W5$0k`dlHe0Yg<Lp^tPQ0c
> z73SZMsRLg@UHtJFESA{l{i%)n$`JqY%yLX2L^A)I6Ep<30_ohfdHCW@Thh55c?Ewr
> z5R1eJMSLVe#x&o$=3D6nk|l+WN-_L}F9kT#7Iq`9xpuZgC;z&0&Lg}gsSx^4xlg**&#
> zJYMQ34liN@nrO2lZ|*dop->^VFA{~y|B+tnltO6sI@TCraCTzSG8T_1ApV1=3DGFshj
> z6U>}yG*jbq6>_?ZicVLGn^s*EH5h;2;hywq;9@~f;5;t9FjEt^rZmEL+N}jhNQc&R
> zv!*f)FUjq@h3#4ib!Bnd_KsIUTI{WC6UufB=3DXJ+JiIQC@A?TkIF+IU7R#O)lOWG#x
> z_{iKirby>hZ;p^FaO(709GSMQW|LoV8cl?K`uy5%ZCr3Hv=3DYCK9Ufuvnm&IrlJdMr
> z8E9ZG9Q97t^ASq7DhqzhhVnY15;HrbQOf`5kRrqVJwg`eOajF^;_y+9nF^h_;FO@<
> zAolS)QJZ}YYZNL(z0_bOtcUcaaXA&L=3DK;%8$PcU@MB+ELg9%VQ->bW)K<+)bhaTmK
> zKCjBZ3{rpk+G5I+;)kX@&Ut^6K`vOXyBcbwk6~w<>1=3D6=3D=3DvhI5DYWLWW!GbU?a(a`
> zATilx%7gzfBAFz(Q6~3KyLf^=3DH$bvO0e>o1H(|!IUgTf}?+<7JJpW0-R9L;0bD@~g
> z8@?T*8^}wGLtHL|U;nI>G|$;_V%%{!{cA`;nJ-<SZGelcM1M@^EVzHt{<-*wsq$yi
> z1Bq#?tRR1jC<E%S${fcX^nNWYf>*w$a&hLh{~|h_HnDHMQ1ScAjudMS)U$>zIW(d|
> zS)eNn&T2U=3DW&ViRHYl7YW?9$BMvZS%M9T6?+29@408DnR;~?I=3DlA-WbCCI%Sei*R?
> zwZZsHs+B605jQLFGYo%01N2%2oqto?6G6Aiq%YZVLX!DVnp-#$jm|r3X9HVy$aSaS
> znX0ykr8oCWCrHPK+IqfHuygeT0AIN-<2%E`%ziz!F8p#JFV+cB=3DPJ+oL?(=3DTweK=3DF
> ze1qy15QTqdltEA#b*P}cCJ1Ll?kNG4c455X(TgW+nnl^BMR$J)miPfK%4tF9XWItU
> zU8n|Pg&qvh%qqF~F#?eqD^))V>{U{g&uSn1OIjZFb*IHtwXkQe7__--X<33IK_N6b
> zB;S1Cl6Zo3wXIjiPB4Vp{mgxrt~T;)8t-@KE;i_lSZ*}JS~YgJpji7$eK4<GWCrgV
> zKToP5b7&e*abbTwq7zXMuFtmek3VZu{QE5CHBc$0G}<2G-M(lU^IwsOUFl4Eue1kI
> zcugb&#Z1HNUIk7e;Dj-KT4UG^eBZl}PGnKUe6RX_U`Ek;cAClc`_q0_^1L)Nkq_>C
> zd9oj&J>r_va+;vOE_zNHtkwc#zm^3kRx5n~4m_r+Q_+9PY(<AmL~chXz(_EFoDT8g
> z`Z(@LOZbx|k)iIEf3Bw-7ffQmD=3DG#!@MKtMz-Ya3YaJvhLrr-&E>ScYyv%UU+8h2v
> zBF4pdK;ayJuA}^Kk;k?544{_0h*}^clFtzVi^;6tvpZDtdBWVoc^Nep*HIODO<a(r
> z6S1RKZy|rup9&Yc^jSUzEt`)w9`T&HIjuRip+u*7hccj1^Wu<cWe^#_!Y0TXkGise
> z!O>EU_Qw9&_yQgAN1&2j8Lmb)L3}ZX+oQdt(rOv9;dzpdH!TSlD&`uvPv6x*i>!&G
> zo|Rn%m;vpL^mh6Jih~n*HJ0zVP@(<DmJi;3P7QyClY*A|8Z_w{PBuQv96*vJ&o)e}
> zo2&y0Dj5vFkDXf9C)QE=3DP&nOSEEhVpI{Nbdg9)Kl9wlGqwR%-AM1vcd81)iFr%!gs
> zk_&t4O{Po`Dr6q2?gX^6cTF}cUtg~y%IyC%uHP7Ss#xvA`zg}VzsTFG{CRIJ@{UC?
> z0epY7?_nHlZaHONpX9R~72=3D9RI|;a?4)pY*+rVbIF?ycjHrllJ@8*q=3D@xP|-r4k<G
> z<=3Dm-$r!~s2il?b0g8d_>h2nzEZbVl@J@TW;c^oIc@!#ZO5sPSgEw1SjE{uOPo_%sg
> z1J-e@1T@USzW7~eRLKFp%Ey<S*sA3M;4FWrJQiylk;tg#+FX9Fhq-P$`>&DIr#MM%
> z<YN8)K?Q=3DxgES)|YueWcVx2vV0Im=3DaWR8yU-ZKUOgxD_v6PbzFtf;PMP5y$vO&6j=3D
> z0pE~ei8=3D_MC)&Z2An??=3DF*spF-pEu=3Do@q$@<l^0UZVr%J-gJ?yMg}`X`O;Y!Xrq4v
> zm?u)XJz&pR=3D+~9pKr>`{ioN;XxV><Uj7bJW#S?hD&p@<gMK!EWT>hlj>GT9L7EwVc
> zeuPMDsk&I)_bm4K{sqFHI)RS-aT4A40Lxm36#jEi!pF%{X8PZwZIb4hrLtLs7N5w{
> zPd1p@HmY)Fh#i&WN)9D!6?|?8O_+Z~2UDr3kuqdggw4#N`Diq)$AGI6YS22vgFaG<
> z@#p!@C#y4D=3D(+Gh{wRalO(&`VR|)^759G#Ik6|REuOr)x0j0cnup>#KHEn348?SVz
> zNkjE>oz*(ZVYe5Iran_cUnlZODqKM0AO9%Zddj{?YL8eQer1qVCtjNXJY;|GP|i3k
> z%OMVU`;i`$v9C}kV30mIY^AzQ;ha$s2>BG3`SDtT86n!?*-*;D<%qs;Suba-7yC0o
> zw6&p-oEEV&5=3Dpz=3D?@?na*9z0aQR_Nj_IfMb>44q<(+St5&*IC}`1~*Y?Xf1ynCufH
> za`!`+el6_OjO(`V3(rf2Bj0~rJvf0PO;;8Pvgo`kggv#mS9qlw$%W>jZw?@FBee1b
> zb>ruwJzB(e(en+nc`ocL{trI>G8X_Md`2`ytXb$a#{-=3DUglUiGvaih@N?{!#((4e8
> zJjO<JILN!^b7|c{3&h0UnUI~L#&i8J!OA}=3Dz+t`JR9Hrzx%o~hd7FRQ0_iLZd;<z`
> zpiJ<|ePzuWt88>Smb?-NTH`nvsl&Igl)9YH2`h}kE4pu@a1x#zQOU#GXuYS2AzKRZ
> zqX)fjXt&HYydaUT#APn3cb+AfWCOEV1Z*6N|Hccs-s8WYO{B(_^Rt!rpQjk%t5}>>
> zX^{<^@9(?D&5|UrS^0ltk&!b`2Xhsf_~bjgN6)XD!AV2O(#~NsufA*aBi%|XFCNYN
> zN4b{#QZPc@q8z@cx~^X2B55vqj#m;{qR+4fV>C*87O?<5K*GNT|MvugJ<7EeRw2X_
> zJw{^X$CnynXs3;b8fEURA52Rm78~u?=3DV7DxW>pAT8gk6;l7i<xVFL+&*7mwvV$)~c
> zaeV!8+QYrIt*SCA%K}2kfDpItza*_QG4`(uhfPV%|6F@UITBq+i9gEK12ONPFZki|
> zLZ#<nA0Jim{)7O(#wtVb%XJm`S9IvD2Ou&mQ#=3DE@`X$Wlh1i2qCRPQGgnQWO&m*q4
> zRp?jG^_Bt0A{)?1UNO*r-r%hY*A~z!D}78PP=3DAB3U*`1&lA6_9MuiN>Je00;-c|^4
> zm{py?Em+8r<S%#QG39#ZFIQ9Dv^3wqnA+0=3D2hiG0SKDr`BjQxh4y7scZJI|;u4&?J
> z1~P+4k18ikly#&o4r?MkT?zbIV-=3DXXWEnE2wClA#HKnd<_LWnA`K}j6vCM2<3p68J
> zwV9Rv#EX5{elg1^c#|O>!|0bHyO|b^m#-J=3DKE$_rU2dBUH%KcBEA55oqiAb#h
> z!bzPxIRE*yUj?)#%uh8&A$&KjY1sUzOnEdmU#1|NmNAak@6U18e)A(?UudYEFiT+z
> zDTTQZ20#ESmoqqjYawYd{<GFP{2uf_*kpv}A9mK<VY=3DU?>z-0IKIc~;aho%vDFd3%
> z{ChzalFCdM$LN@W#<S)OhqArfwsN=3Dl_S*IXVK+lca`D$eA7lWjQZt#hx7Xcl!3@U3
> zC6#{$q>P}o>&3MVtg2TjTkzXrY=3D($7=3DW~9pU#&MC{Ax{qxiTgeW}85?PQVGnM%O7f
> zW1>;S#a8eI&KPE4)D|Gt=3D&$GS?B7}1*{&Xc05)^7kb3(mG*e*Od<ap{G7Nsv;M3P^
> zJ}`e*+8CC_^xf?7$iQ;FO_J3d*tVP`80fNKMy;mjq=3Dip)szGspJnO_p>A_*zWsyq{
> zpQAzq2rd<Wo|<bhBv^!3d3?w*s@oqmskyQ>6WjkTvBI_g7VxSCgeanS{zYu8VrlJs
> zz~he+n+#RDmhzzdatH^|N+tt9Tsn~!c!)Zy?@ccun<knfODdWmuue(tUAf6FGF`W6
> zCw>_b4cWsP@pM9VMzt5e)Zcx4xriVynpah@<x`@6p6QLo>DtSm6JKOe_=3D;A}z#nlv
> zP*#;B+_r$Hrg36+2J8|B$@`$_<fRLG@5GCnhz&z#e{~{lpwh+&4!1>L4K1yh(z&_=3D
> z`4(XY9s|e-+oDA6S^LiEsHX$xet_{&@-Z9*dd_2U8%O0}3JZ_Ev63;y+|>Ti$aK_v
> z?RT1g>z5fDu7(Gn>bDXp4yrZO`vs^U4B{OUI@<LeGyUXdn@f2)a6eQ9j|-#wmvKOz
> znww4c<~y{5fodiW{v~?0)naH6+w7sKxhiDI2a{|HlG|=3Dgrn9da*BiI^(CaeA=3D`{o;
> zG7N(ajkxq*;V&W_SWi&Mcv=3Dw>m*3=3DJ1|2njccfWxCCp^=3D#j_&_3~wU|!+o#BQhfxp
> z`=3DyC#u`w)U$Q074-T#)+Bjkl%_xvjvQhGb*#HRGhRXdd1MqkDL!XAkI{&x>DT;7@v
> z;{<S_sfCSr$ezy^<An$98V<%kNJXff$aw$vrw}ZP0w+Rz1A$)fp7fdPi^PF&bO@1u
> zXR&V+C376^p&vH*l%O<)#H}Or)lbKsm{_hBf0anu<m_~rfaVP{f=3Drd%lo}x~4S)4=3D
> z2VGU$2@Bnb^t}`r+2xYkqG!~V851#vNy^U}&lcUwP&!0)U1-1Iy8s|LcQE_p3@NPP
> z`$QT9Sf)ljGVA1t;L)xyU|vUZPorReb!9ndsd!<GY?*l_CwC9{wX)3pY!X)?r8Z4?
> zU<A;q?M`P8LY9ncOzlF}-^^$me%l|xNKOlKv4jHlndIOA@05CDzB+244tje%gjzp*
> z{l70*uqYdZ0*Yol22+Sb7li_=3DstKX17^C+VZu`p%+?6il1n-Q1D9^SDRDAS*7iA3u
> zCt%V`q3^8W`W4#)@7JGY+kIyIc5Jd3axz_pwU*H>MYY6(F%t}4N7QD!y2X5?4X0d$
> ziQB1{d^-zHkVD~+XA$v19^I~zWk?Jjyw>7sJc~5Rtuye_bb?Xz50nX(wv@Iar_%b}
> z6n*T8cL!t31zX|Z;+keGSvWI)0s~W#lhIxf7)?|k&E^&1VlpmX3f0z(;|~@;f(*(e
> za1V6gJv~!8HyI~rO<ud3Xr2-5OSe`YQhDKvwQg<mua@v%IBZiKxtwUSNeD^L2OB^z
> z-e?aKYDD{Y$%3D4O0!KYXx1aOl}gt#7})-!P8ylAJ4QRu4`wG5)S@eYk?l3hOHx4|
> zFAx5_#~(9&!R5=3D36DyzJwYi>NX?O|vGOB6!T}9c%<80WHfP#35eMiU*DfQ-NN7Z}Q
> zr^blHUbf&`w+fncq#4eor--4MjX*%V(D#_qOv<^pPQ>6hceI1(wQZhj#WHTH>O;54
> zQeuSQr;7Xx%(JM@j!;W~f(3FIgGYS)lI}qr&W--&IbL1yfj>AHu!HITSt#s_Y_gSg
> z$Yhu=3D3Dk0$W>E8ceg2v?eOSe(i1er~At{5#^hN9^3vqB`sq$8#!3*+tGt@n4S@Fz4
> zHkqoYs5_42R+IZIgwwpMhqA3g5vI*}DWXSw?9Dfp`Bue48<{?TL1aJxX;kzWWOvUW
> zyUze}fQC0R0oR;>bBuUpm3|HcBdE$<>P_kIimtdtyDM45(Li38npv=3DOYsakCotU9k
> z<f)m|SqMPFTEsJ`oHsL4_By$@w7ZXURa5<tFgB!z`X^zyj{3DE-*bRchSqF%Flm{*
> z5VHCcHk{hEML>XmW+|{!3v)r#m@-1Y$!b_|gP5A!187QX31>>5HC7Ol^z9`+ngpvX
> z4OwZ$&TDUN9oN+|)zh*;d|}kX+vlQr<M6kKQ0Zgjou5*eXLsQ8_QQqez4OIkyD2?;
> z?XqWy89nWcXt^8J#h%)!7>_h*fiI|)=3DoC9kU!p_F&lr7w#&fyZ(?M{|8!{CP4W_`E
> zFNs6&OFsC(*oEQ&KbV{TSU<MGU7wC=3D+)hkoB1`UR17S#Hxh6s#kgl*hkWYN%Z$>Ja
> zi5rnLvWxDEmMMT&)OQ@wDXQgpgK9Tf&a2g|;GwFteJ$E<)`rd2qX?tOOBm;#IEF)(
> zl;_(La5K+;_{{eszMJ|r#mB$Kt95@uR2eMfNwB02Au`OZds<70-Oweew~=3DpuTtgki
> zvt{p0h)TAm2#e6k?g&xQ{1LqnfPUnY=3DKtB*KJ-~>?jY(egg}wrC*4Pgj#D9ePQoc`
> zuM(c8|7!#NRMtdb662dL((+T9_FMzwBu>zc`y`QnnJHV!h-v>F2LgUdd!!%UtW=3D@=3D
> z#uT*?ifKqVl)`%D)ec%I@;Yk=3DAbfq+E_M>bqe7x4)UDfZ2^(yo2XT+w(gGuUB$vdV
> z6Zzq_c)u{`_gB#!Riqb)_*Z>I9IyUc6lV$xp(bjj2H&Nj`Slm+ApXxUiYQZ9h|u+y
> zzu`fDScQ*kc%pqpMK61(oSEN6$2d}KjGp?~KViO7$trWsao7KJ{Pj5gC(aXK=3D~b67
> zo%saES7~xhv`1#uPJfPJ?@%-J|1d66b-!~kBdDLQ4X`r>rAclP#+A>Cdvsem`K2r4
> z?DJP_rLR>gCgkSjS`3AyRHt7$#mhAYhNW|Vw{+@d^OrS%){+zkc2OFU`>@g4Y{I}3
> zAVj9r^`D@v=3DDv;CJn?X`SL`q~JhnrcPAt%%0)YLc|BvSi7ZR)q=3Dywkgq!w6uE6(f4
> z0<p<r%*c3Q?N@9wKB`0nS0*goH&5Y*`7>-pE^1qWr3M)5%a(4Yvco^JyJrxkEm-=3D0
> z7DQl-;qlUG!O{PiR~QArTn+`RSBqc-DS0&y$j4t0;Bn|~+2sTwDeKhU)338{s||qm
> ztK8KvZ>FSQ-KREfcugy;9bu+!AG{GZ8gTB&beE5pGr(T-hCg$HVK@4<VxL_5;zR#7
> z`&aXn2H21l2Er`9{F<?fY7ZMu(ll0o=3DY6W5YF7*{uLN9Ei$g~|amxl*vhkRT5X;-)
> zqzHB92>9DC9us<gGV@gT`FKAR^0Kv?2_#PD+4ty|3B(W_cRALmlF04XL3K@Rq%)an
> z_w{(Ut1iuETE+QfW*uGt`(eYf%NQH`B}MrsfE*plcl4!@Rwx`un!ST3MOpuU_zU~{
> zN^Q3}v&R*+CNGDX19$$q1cpF_iTi<7!yoJdS>EQ0SQaMh0#@-d0#ldz=3DCf4&c5`PT
> z60U@{&5>U{AO_R-$3kxVmdUQKkdh=3D+EkXM_f+Qb1rSb>A2A8v#(|Skq4!e$LmU9*`
> zeP-0@F4s|{V|f)8uYfH7PBd|U7vo+@67CV_tQHOy#7czDHY>D8dY!-Vr#>9VU@dW5
> zOz&8tBAf1X+hnW)S}ma1mjdc2=3DbAl~;P2G5*8Zxnx0wfn5wQ}rb{rwhqE5|k-~39)
> z7ur5VH7?p-NHbyUSc9XXjj95y?CUL#4{gkLrs@W|O;$zrxTr7pR4m?qNSwxKbcWO8
> zk<q`Oio&KK>d<)_<sqh{mZX3&iYnDmIM-vftn@-*_Th)lja=3D-g5o`u-Q9!EijaRdj
> z7gOdr=3DA~^dD<iV7stx<_{TWj{h+xm<cbn`1Pk#&t;K$gRP!7`fWqKQ@kr`6RL_X!&
> zPGASoABACefD&AvSEmJk$#HF-sFa2|Ug!|ex=3DBEvA02)Yg)rr!#tw>PQ54oeG~zS-
> zv`k&u-No+{B&@3|SWsQOqPR8E)7|~|c>I5OpWJN%CF52$z~qcx-VZpi87-bcz9~2g
> z8~fY^I^R&eX<#Jf;^I_7Aw4?TM}Z05B~;3jMYk$Jqzy`Jf=3D0oA+U|EjE(U5V92NtW
> zT#J^P)07?5OfUNumDXEFDiomoy^MPdjn@oATz}mOUUXKauFeeuS%pBTV_$rZBBX~Q
> zp9AdhLlgWqF&lD?2@yK;Re{q-s1GCrhg`;yA*pX7tVs)dV=3D72IT(GGplhLhGjVK@9
> zg+%f0AU>TY+_i##aa0b1XT?TRZXboByVMDJjwy}tK8y=3DIFAR@n{bH$Cq2?!8AUJ(x
> zwlFW5_@b|pk?j85dP1RYIvOvodlg;=3DXFpv+c~31kSM}WV;cz22)Zb~e$%{Bs2`Im5
> zz#=3DIdUAg)c>SP*}2&MsvB6su3A=3DVl}dfUSp-b0I1^DG8`JDc<@kNhwZ>B;N4qu-^(
> zbQ^s#jDI*2Xjh~4C5tn$ODv@n&DtgH!d`?f3UD3EX>uiU8q~QV@0cD}G$1?+S~DIr
> zF)06Y7Bp7I@J7*zw7qsSVAGeu?@e&EqfzKzjGOgl3s~PzZiFR;*<-i$_subJ2Ee!9
> z0?_t5bRMC9?;GU^C)`2LhAz5ile&_-7I>QQTL@(NBh`0El1FdFLL8H0Dl8;R9=3D)V0
> zd}f|tkn8c(O0|khCc<HVBi^{m^8D{QHBqVcq0ep;y8_`=3DpT;VS9AKZ0DS1>CE)Njd
> z3Dc9VF;+rdZVLgiRPAB@h;$VctUXvPiauh<-@^cZh^g2PIX}wW&w|}^3S++$?7wmH
> z7FI=3D$4EC<V_9+K<|6Ix*ZMF?dCx-R%0C5i&o&fuI8I8h7x;g4aEc?$iREi)j=3DXH)0
> zR^Tzb{w`wRFiPZ%ADY4omG@pv8#5Y<t#Y(IEKJlv>^A{WKZ2Emz2sqh-?e)o1QqIK
> zwBMC~$%l!}uAQ{`J+-`HDx50REb5yCc#2VU6_-E~I$VYWG|phBUQ<BiAQkf40lk?{
> zo4Kd~QO&q2ErN}J$D&{l<tx9TYAfaMm8)rLNO@Ca*Zt^nY@Zk%bs|uzbPqB8Cm|L^
> z^=3DITiUMa2c5K5n0yS1-~<an839_Yk*Erk|;L-lfl8(1d+6gnp;BXFSvk2Rkg4speI
> zjr1KJk1c2<)p$+2zL;j(<n#K{TS2N_`(dXFN#U66wHMW6mY{7v4gu8+?Sfa1S=3D+J?
> z>k%4bTJ^W+{dQRVT<;Lzh6djk;_HpH=3DsOKp`*~YAL(u*JIVT5uxy=3DDh>&m>T(M3>y
> z1}wzDAS%Z3=3D-IrPOm=3D%z8`87gBYiudYSs~%Vc8bKJV)&g)g01J73O*5FUB6GvWyEA
> z5FMi2HNRBbw#vgL%z8W*-NZ)rR5-&TY#Gw_pB3mN6iLBJ(~y-Ok7?cAw21tfWT$3Y
> z&}DES4D?soGyTMK;N^6{x=3Dz$lyNTX^(oeSWP<HiuBLT`A)pBJxdEJP;eFS$a6Aw_f
> zpHwiN*Luo*iK5WGnX@NM;IK-QdK1OjO(5PwBuef^EOtROBV`0F*e1T{Q$h_Txqf|`
> z+n9cp3sC&FalEu5Z*H`T1b!JR_PFYd(si#9yIgeW)iNHCjCO!qpXq?bf1i<my7Lbr
> z5b`Ioud2Y{@5I!yYiq|>F~5EILSw>i5=3DP5OJ#Lf9->B;-P{J}^U7uohBwb<QdUCwg
> zB6atj)vrpP#7ljVrN717FX!}q{P8QvAwD{$A+2Q)os6$$Whk9KLhbCCw?*Bg>+ryW
> zT5qL=3DyY67n;#B*-z9yoV7){21zS88B0eTcsm@ij|38)F0Y%P1!7<5O6@w(lAg6LgE
> zs3*VQd%eu(v4r^<DhUILTc<k*+e3i8%d`Uq3Qu@jHGCT2f{g8KT4pm4KKKK>NMa!l
> zv0R!+k@A`2KG}-Usr|d>gsp|>;gk6Uy8VRnq*%Y2rnCM?3AQfzN}e}=3DjuXt0WCM|u
> z4G(qSRSiA9nR@#+Op_J3bum)j4w4GZ#jFEO2FQ~a>FVtCR360i1aS(7fnWx%hGr3i
> zj;a36QfUw)&G~oKONrF77bx_6Mzu<-@i4a>L4;ZB4cj8?fDOom9Vi4LsghyKdb#<t
> zS4(hHk@Jl$^ttg1l|oB@eMTL;p%KP)P@_%{nnXUgHmd^;w0)YzxCt=3DR6IsU_5^x*J
> z?x>NAaknwDRM0|4Jy{XbWTE}rgL!`*)!-YEe5f`ZIAz=3D{L|f-`W`opDiXf}hzi?5Z
> zia43(VAdk*@dI}D3^yCcY@s_M+TFH1sCNAkBNwmNB6yb^V`$oc7a$~NDx2}IpDF$V
> z8F*QLa53#gYCcWN6~VlL6p((c_(Uw)i_m+1s!nzzFB9&hyL!6u(FWgS`xwJI0}2VX
> zlTv%c#D*|cMUtT#J(GsDslb3{1`Q0eUi>@=3D1c7zUq4>Fq1|?%}HQ`&08h?KkKI5)S
> zKP5YhVM?T^l*0ml{I1RiR6su&?0}7e!H%>2PTK9u3pw2PYnf#h%qh7^_<TwwMc7{f
> zIZX1JG@5ju|DlubJ}jWIuI=3D~}x}P(&)m(1t1PD=3D2a3n&y=3D1YYc6Pl*}SRjk<!iU_J
> z>y2EFMP4+E$O5H=3D$CTU8jxfA)0&-k43*ggM6KU!WeQ*AMN}d;Zn0)8=3D(*eEsYO*ez
> zl<HD+u7}S6`M3)}%-Zl~OdEb_cb0@2ply?DxIwcIdmB;yH?yV3Jp<pUDxY&f8}yIL
> z;mT5Q@jqK$t883Upx&2*gcg|X&wks$F{wasVpR3jeB%BG4OYo2ogzsj=3Du`H#wv`AZ
> zD5G9QQ-s5R4E})^ZFi#_ZY=3D&kG?HZK%}0<T<&%e(wELK9VY~~l!g~wse;FT>`)>RC
> zWog;SBNNz2hSP~X2#1s^sxSf9H28l0zck5s3jaKD)qqd87>h{rY%e%OkigH~1Y!Ik
> zg`&}fz1E07?R68&pdj+j32$QsocddSrO>dz&6qBKh+6J8XQy=3D&on#ksQ*ncb?#!PC
> zx0A#>|9iCzZpLCG{PJxGn1rn&4A6x%*+NP-yzz2{iVm_bAwe`1y+jaB;0jt-=3D|ITD
> zQx*<q^@2jiC^z++9f5Tm)2oHX9K_kfrt;gNIm+0q=3DAkf(Um)f^yVEfjmOMFp3i;@)
> z8exKe#|G{*B6d+o>xekc26|T<+~;d}#~<z^G!e!&5f2)apid<QZ{=3Dq^)WS@enM2p+
> z<X3>ir6j<qa(;%IfL6f~<kQeRxda*2Z}lp92H-87-~pA@z#GsSLeu*Ix$|-MPRg|X
> z<gFYSepA3bN`-Xo7aedl<b_Gmc>xsj+>=3DOu_~FcbcgfgKl-4OgUtvp+$OWW*WjMXu
> ztj%d`4WUDTbkVPncWyd1Jak?rSk9}{TG{=3D2e&b6RG>^FEC=3D5K}-2jm7?n|Z@$J{Ii
> z2m-?u<^7lJ3iGUw3_M{)MC4O-Iu~Q4LZquWOg652I%<uk&)UwnWX2}Ub!+Hx<}|N=3D
> zA2yv;r9nNw;#6BOHnD;>!BH0^o&Y<XA}nF{Ws}KK-L9--D_2Qr{L93Dq$2(K1$Q9w
> zzHGRHYWbjH+ndWB4Du@I2V?oZwnR<vl9JSnjkA*9KKeqvIn+pM0A)c9&}{6*E2%5y
> z)*c@cb|t|6W2sfA@OMt=3D1u?H;56HZKJHr&Zz=3D5dlkBLC@?IE6n#3hDCS<jJeY995;
> zskhAuT=3DXVGN&K`q-BQ(|lB;Q?PQWaF+QhK2=3D=3D!UV5|pMgvtx~2ZN|QH=3D{mf*GqF}=
4
> zfYZV=3DyA&a%OLXaM%27p9dYErmJN$bic`B3lp95t&DPU>j<6hQ-&?>?bQW~FsjplPQ
> z)>CAA^vD3Mq@018HG*!qK(gBc6Z;gLRdIiX=3DYy{VRE^ylK5(R7gkH^ZcTlm?qSW_>
> z*Ugu>OoxYr1m&4uQSUfyP6CEJE2bHgL5ByV1FG<%u^DgC?2&O%08j{zPqXd~zt_Lt
> zio)$&SS6Qv+d3a@I|ZcWt5ha`t+Z^xJ+7NIs+B3?NPsfcI*=3Ds?mJ}raO_pA6Z0eLA
> zfUO|5GchYoyU_)w%Dn^8j4p-IkSi>;YIf8>y`2aZSRITr|8ijMhx{fV=3D7vw@6Q;N9
> zTjeBe)<oKN(&2VYw%({+VUbb$xPM`m@ypbn`lNjc@PpOt_EGtRYoEz~-BX76w*lN?
> z#{G$iE4^H@xiVNu%D@wgTD4Br!F(B*Dn^M%lQ*KwC->`(mixk%;>l6c-9KO0hk*%<
> zQu7mAU@<B;U=3Dd%4`~hhXfDf){|4I4sy42B&AKgP^?*g81>z2xz2QzF$RG%wR#zL_d
> z+(dhi)&^xhzM{k);&BRpc(}1wZPIGY`3<*U+k5{Ug@BS5BGZ@=3Dx1JPb+Z?DKZa$Xb
> zqL3-=3D^M@Pp=3D2iYXi;!iXp`i*w^p~BxOf-E(Ca|;A1=3Dry6EpOB>A4JF`<<!Z*0=3DbG=
?
> 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
vqE
> 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
<
> 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
r
> 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
;|0
> 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
V
> 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
>
> delta 1030772
> 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
K
> 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
@
> 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�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
-hu
> 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
X
> zITMI#ZmuGVk>I9luOqkDm=3D54%0CDiI#&uGj{kdqK%l83AXk$oFe?Z?CXlHtu|7Z#w
> zzka3!>&rJ;q97q%*Gx!<^De$h+scqEd&Barh8`4q@Ks7teWvq_eb#uEK>1*V<lsO3
> z;R5L&KZ>^@#A(Q*<R{9*F5?`jmcIiSZEmyL+fF#ug^(`D2<yHp(tYX@#CJ~|FB=3D53
> zSm(j{8MBB2+ct|Ef94WL?2xVFL6th{z*$LVut_Pdw;{(^Ca;SI`-;E~K+1HheG$i1
> z4>%?-*xSwBdyaI|u9!WK7hCeHL?lm*S`)XY&!rP9MZs@(7Va1?;6l|dHr0~OC0~@k
> zroh-kkyumBLP|itZ3idrL-aOi^w|5U>|eMr@5f*6Pt5qBf7NO%;Q8rrTw{tQpE0vG
> za7P$;HV6;-W(d7c0<Dx;n+#iD@eDtx0=3D9)xWFzh7P8sV(wv0=3D)g)?vfs<q$*C}25w
> z;TLu4baa@?e}gVpg7J6h5&Orea+5I70P7Jl9@99#-Ax3ASpf2U{1c@3Ga^&tJ*V#%
> zZY;;&Sok{Hf5pc-mG@WA>rm!?2;k@HiynSu+H|Upv%2hc`9RFra@KR!v44$(h2Kl2
> zX25<S7qf_U$*UUW`M}3#?s*gKrNmr&;X3cZ!JYwmSgdhJg-o!8I+p<x&^<I(@ie*~
> z!?*-SIvF_<m>-zC_Ebp@7$Wb($aaXKEMR~)j<0Tve{8%a*wr)hS_eLH;K?c`211)g
> zw4wYR`JK_-3wBn@prKD><Qsxhh5LCw4m|cG%UB$1(e`r>aky1VQKMw0e5;<k@;9}-
> z5mV57h=3Di=3DuqnUvn!chCG1VA8Y9GThOEUNLOcR+N_XOq5+Z<k(Rzt<w&zXicp>jD58
> z?amzpe}%Y2eVwG__%qp@-r#LJ$onMdx@QHCkestO&glj-0X=3DotoT`AKVdXQcZ_>n0
> z)ZF3MUyQHoPuJdzKS%|kRXHYV-HO(_1989$szfs7drrcQ2eIXXm{e0$lf>h3y|vG<
> z_a)0<P83JgUt(l8o9bu>YffnJ4if+gCteumf4k!?SWc!+a*gGPL?Thgc&{b-K^D_z
> zLNO{T$X6-%9bRvKoO4D0W**;<I`c_b!i@HASg{X2Q5!lR<X!0D7f3KJVAI3gvK^mF
> z@<HN&j`AR>m>`HK+e&hzrulRGJ{2t@a_jq9U6oXV8w-=3D~nSx#jZ1;qE>tW4>&xFWz
> ze`8*+*FZ2>Sxye{=3DU)a3WG$WUc@w;Px);H47S?!k!?5*1F=3D>qY_Y-#|x-b+vM*^EM
> zQ0&?&-sr=3D=3DutB_yCecx6pIGUYzF)+Hlp$%l?c3OL(9t}HyZZ`5FN?{_=3D&j=3DcE_;I=
i
> z+!Bimt48)S8BDg?_p^2}G<>R+ss^Oye`i)-&mYx0&io=3D)R|R}1xeYKc%j+F9-Iy)t
> z>_Y-g?z&98VSzgXe*BAg`gf|8FX^){nv&ngfIf7TD0LMQ_nS=3Dc(abL6QFc-P_ox|@
> zK{Th6xFYG%F4ZOr?t^%&_=3D(6tF5>S_mn1`n*JuDB<Nm0qpDnY03N_*H*t`tFf4)0^
> zeXW$|Wl@+ZXp@~lq@ZsHe>=3DiqQ<XWkrC@(%SHaK?^k&Y3J0|bX;SlX+{;nt?rf>o;
> zu~=3DQ*q6S*+nUj2}ijm_?anQwZKf+nt%daB6>W|MBQ)xNFXBMc>b^U>F?k_KjhS<_5
> zwI62ap3Iy$#zWEaz2do>JCn|Rf3zrN>@4dCqO=3DMqW<yW0u&lTw9ebC1Cl!4e$0wPR
> z3Ie9gW(wP*ysbs=3DaobUA)8bx1_sgu!QiA4UnSLi)LWq#>7<35p?lOP$ny9rqzFLmT
> zLA3FoTdBa(!56uog0MLqPkJdrQ2&Y!lx&^P`<ccE7);Z*AsI9JJ2q3Ie~;_hEdgx+
> zjc((kcQ-aWS;l86t3UFva8*F4zlqGzw6lyez`7Kut>d4kIHqYPFlXo`wS#1BCso|#
> z1)SSU692U-VjmEEQ3kJZ!+Zsl_mC)C0&b&GGi$)?VC<V-7jbsZv<a;@KQYaKaEFUS
> zeIwspU@w_FjZFMbxs~zgf2lk;pm}$-7YY0^S@aDTjanIbH5m|q=3D0PQRcGAL_7v!R1
> z_u*|%hk+_`#1xg29oO{Zm3O(8cCOq783uk}bvxvzgRpO#bWQQegp^hN4chnU4mJ`S
> zbTuDu1k{hSpx>r7+H)C7VaZ{Qp9zV5*d+h1S+T3<k}D*m)q?(<fBUF8M!bi}rheAn
> zP?*8-)qmbH=3DgwkFyyyav$-GUNX*`J<GZ~6(#^BiwEpFiSKH}0Cb0dUNcfuf317_F^
> z{QdudpGwsXw0t;^DDz8GX&BLZ@6RCOlPQ|m&Qj&g;}VTQAQ1m|>rn$gzMrzYs-G8E
> z1BA3cT9`!=3DBLw07e^;p81=3DohFz=3D7q4Qz5Hlt7}v2Q!Fz)s$jK!=3DC2<KaNS|Q4i!?=
b
> z9!sCtcERdDl*0D+2K7%E%8O_+OT=3D(a9?FwZ-oKb|rkrM~u9d+DE(WV9F^dU*#HR``
> ziF%_*s(dx$20A^Azc<Vcco6KO&C@^0t!X<FsnpNwHr;j{f6xIvQ)kQxoOzr(+s_mD
> z8HEvdF|IhT|G!(iS;oEXj+a`54-7%|Wu#{GvR?03wPvo2kH%4`EtmM7r7PE{6oe0=3D
> z4e>=3Dl49|3!=3DQ<r<yvz;^7|=3D{@*O^8rFqmGr2Q$=3DsH0Jf-LeJ6=3D=3D7I@@daH&5=
43vFX
> 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
S
> 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
e
> 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
l
> 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
=3D
> z2ZS&`H}SaJ#)Ng!ZP5i#15^GQaKig~jw(5T=3DL6laGoPq2+NFQ9hkCdYYS_%?`U^L(
> z!_@)fl))1-00^6v{}yss3^q|dl?8F;hKcW$?|lcvmvy}oz6U>nt71Iia;wewf%Px|
> zF<6N~nUfalBf@|(7ug<xGOch1Exy+Q;k!CrPkZ)XwT|6LxP=3D{ZE0H<nR#K!HKo6Wg
> z<F*Qy8AE|@%T|9?2AdHewn;HRrOIAlX@Lse!_5}b>y=3D!KLWkhr(Ki!8*Hv`(_2ZDV
> zJ65)N7yRB_rs$<AKi{<l%UCrW>cM2`0;Kdk;UT!#^W+O6>0VE`3LjQBpc}v$hyVx1
> zM6B|I^ovB(ew!zEz2B3ax#5Qoy*8EErK>pGh|M|9v>1QXjYp99%4(`>J5ICtlCm+$
> z%mzq9=3DQ!w^Z&>JV=3DDRaB+2D6DE@`vUX!*)f&Utu9z7;&Rcn&~CEzQVnS=3DGEh&Vu%q
> z&e4+N5MU@zJqXDLfVK(a-+nm}Cyc%to6`KJD%}yuo^CQLld>gySOUx96l`Nuu6;%Z
> z8N&EHtz>_dE^Pq13l2368{sd~wGZmrb`R?hTQV8Pgn9tSUU85EOKmpw@bLOb5=3D$%?
> z<f1ak2B!6X@&VoZh~Z(?qxW$3+jZoQ@`anGDdZs&lHr5(phiEahmcW-2QsEYDt*Xo
> zJv)pKZc3}HPTl3i7a<f5<MaEY4OIq{ONUZ7i6DRfYcwUi+x5NTr>Hw}PkNIUKAhgk
> z{zFZk9ZkP(_`WUk;@W1`0@+B^G#$SliJ^v+EK{k|{u%(dCfaI)1hhc&r3D~+?>!1^
> z<Shoj-GrF^CRg8Y<UX8M{k3XheiAeGUB@m5F?@=3DtLdfT<?F#vZ8JIhqG5MPa8U7xT
> z)6aj*KXy)O*BWBv#6>USb1DIl`Dx<q_8KOqq5*gu2Gk-(VPG-rO+SfW^dEZI8~(k1
> z@edC?a|_2AY>Splz{+iCnIU;wbVorJ#Jz*Rqo#)~Ksp<Huj5%l$$_(Kz9q7M<cJub
> zc_bnFJ?tDsk%1opkzx!x@Lw{j3_is&STKK|ZX{hRM$n}BU1oN%t3WcAk=3D)kwKE0-&
> zBk?RCdu?i(q&~5E=3DUzE{pD@-mjT9Y)P@v+ly(x0Zqf%i_f6$cZQ(5<58=3D`X}XLckw
> z=3D*C3-26;=3DzubQyc5fUTQh8yk%Bjd|b;f)y<D>+&zR2oTtE9OW&L*o1s8yj%weNBJ<
> zT$|(6+cCsly_bv-6S5a5<@uTLcP5{)zgWCxc#-tV8Lywu0fHsSqs}OrHAG?Ia_iBk
> zgdhDx^(Mf#gjc&MF{F!N%S1s@hb;kyrx-cvDg{w{1ntKmrTRh*wz`d#kzG@j7XY*u
> zy^9prKANOT_%f|KIAGMrSmjv<Iplwh#mA8RQMz<WO!(K|b`mKpscPtKRh7vYyrC+a
> zQ@kIB6AC3;fWs^V)0<Lb6G_!K&1@vT6DDW^X=3D=3Dz;dpscws_M3Gl(tO~qKZLg6Mowm
> zfi?(m_OL}3XJA}nS?L5P#ibn&-ls34e=3Df6d%xa&5ibsYHh^p>TgcnXQDbIi0G$)f#
> zRExsPX>aN8kY#KvY=3DKC7o+@ez<lzUW2JmPqpg4&`4-N+M`bI0GotDboUN=3DqY>f5Dt
> zuxF1(m8kC4d-hBod&b0xLoK&`vSxdzX{%1a`O_IbWWhFs2@253<suWynUzJE!y>}o
> z$|TTpe2dG#I}dgD^l(7(4+?*_s<1U-F*OVZYv=3DA&U<qY$l=3D3Uk8>%I?vn_bx(hP+M
> z@~smUg68B~5DV;D2WaS;TZ(r?E<!s72I5Y6M8xP?va_JzXgOM7V7{$9vd(5z|LcHt
> z^GA&kXUriVmJ0JUl-#uj^rbju$1r{Az8O3z3I3Whdi|I5_!uD{^*VnIwBFz<gM-l(
> zrJl7In(25=3DlO!2_ciToP#+z(aocEt?B$JixFaJN~i=3DY<$dZCUD_U59Q9Qw2^){})_
> zpIZ<J+SMv$BF@^|u1CV0M|T=3DdM+@uuj^Egq$^e^IoXI);3Wtor(d9<X7yhXRz@>hf
> zF+5j~px3WNGS|;khlYRt!qyL%I{k*44Ie!~3Kb0iX9-xpYfjcTfhJ)z)vuR;u8h}3
> z_-1`)I`*ar9Gnj^U_MG_I~&|%Hi{J#w570W1InalI_{~mdUA9GdT_KD>Lu=3DnEG>>g
> zEsJ^}+k3n}cjj7ECcQY_2n3k(ij1;J?hKDcs>#ZwaMj;$tu%klZg(F*+|X{WR?IV)
> zaL;tQv)to`c>b)Mo!68l-&LA?k>+nF82)_Q*&z4@``yI^?MFM*m&-bZP?05kwx+l{
> z>wb*SPm`@X;$}-1{UeY>yH8IvG!BBZVpcXt#)_!FlHRe9go+X=3D`88{H(ATPX70CBx
> zOk(<H3$#`UD?fkVMGBOLy@?JF+1rK*o-|}pDc`D>G4e=3D0amu3!3}Q(FZWrSfdDD)G
> zQYo%7=3DIpbzas|NBel^M=3DvT+eiPsne|h8ULz{_-ZpdD?-zbql_A*QaPNQ!*Lo@;+oY
> zCd}N(KuX}CF)A4jPnl!KHjfkdFtby0v6Q^gw#T?1;{AV+e(Koo9ON~`??h@W6@*z=3D
> zQT0ADZ}t{~z*`}iFynZfnP=3DNqMRqob6stw0NCP;BpF7bY;78d_J&-h|_w5-w=3DHE_n
> z%T~8>^dXwzbXe#59bRa8I`1zqigD!!<|{|ukM*xQ#A#n)e=3DG(OJQQ)bI+6v>-0p@;
> z2~?rU*yw*XV$=3D^XKR{oX5V`{eFSP%V$ivh(rKUYXvaIMo(kDbv>LW4pbbwvrlvuN0
> zp#)1%SJ>gjGg@5<S1PPhuBbM5HR*Xp5z9#+W{Z)_em_iO73ymp<gX8M6{Z=3DaT9CVp
> z7+sOSK=3Diq=3DP^=3D4)$EpJ8lnQ9-PiX_g<KZvBLXdy<l{I}bZ?rbo7r{12&jKMJXK`IH
> zcIxk23>Qu|OHMW|@|`_ezu46jxbJ#UCtdQ3O?;`TF~?b^|CVgO`G1Y%4l0EK3}9`P
> z8PB!L;Hm-YWNuW_34cj->*ZGLkso4nEN_m#u}B^v@#Ob!5m2m)-W#js&=3Ds@HcgZLv
> zBO8A^W*}=3DsScHHh=3D9rpR;}@zlcBGi%0&~sEm-<BTTJnV6#{6ykmgxrbRw}l%*!wnR
> zU)Qk=3Dz0a)?L|yO&I_HuPQWSvIXd1(SykT%f|CX}6?G1vfb<m1OzZP42TAHe@#FRs?
> zf{P-I_qt)pD9vW_ES49kuu})HQ?<7oyc2&vxF?th5)?0Y1^P-ysb(fYHbvE;#LP;N
> z3neE6jJ@oqe=3D|SQ&T~G)5xbxEyqIMtuBSsH?;b(<`PdLD8f`{G<2g*55+aC_AP*YQ
> z93}!E`v|d=3DJj9Kx=3D9ADKw5K`TQmf_uU9TsLqCUDP^;e3|a3Q1miFLu5QBj*s$fbX>
> z!<Q*r`1pbrW};8J!kk##$~y@7k_G2?M};9$7Rd_}N7@=3D{=3D>I8D__pITCvC{7V87oK
> z@KxOHGxSLeWdaeG=3DKt~q^>41%O>oKpVKBUi$tAT8u=3DzHSP^Zimwf&A6m7=3DBon-&Wv
> z$J$w*2Y?c>WYx@8z_cnH67)XXn9F}D+s2TbyTA-P_kYH}HkSfX^8@d5DjXgx6CZz+
> zBTUdTdg<C-yv5Ve4{8;lQTLYH8L%7tU=3DbWcHSSnD_^HC}@K#Z}p`lwPPj5>m2Zx7G
> zo~AAb$73IML`XAu_6W@};}1|PnA-KD4q~&?y$olVU;3?6URl8lS=3Dz|p(z<`b${Xd#
> zBHeM$?`Vb-T^A`%OMmVQ!^JozIuX%<#xCc9u?1T3BF*WU7q?{QX>-b?kzStF!j9?z
> z`gO5O&G^}bXRSTGhaNIXSgZ~<%J)BcYmW`cf0sKXvceBN{KkmiIT37fR!`-M8)M71
> z;Ls*y0T>J+J06`_#sM!8)#iV1l)G=3D!>cq|1a3_NK?uPvRGfdUIn~9bl^i~K9RZ2w{
> zQF9#Duskl}1JF`Y=3D_u?b+OD)+oqyyQspI%1QJM>araqa1YXX%p)^0d_5oy}kZmBPe
> zd-lJ4&+F*dgA;uohD9EF31&f;1aTqa{5-z|0>tUPu~eV@Z!?4MSCW5gFG;<mhay|_
> z;JT^`w<Szrn6U9-DaH1x3jiy=3D!*;VSo99&x_F`j*4_GZFZ&kNVX)>bZUtG0y9NCNe
> z&}J`#Cf9D2HY%xG0Wz2Ss7XD@dP=3D5){9dD9OrtSTc@u8xCAt&Lnl!5uu0e0t{<zj$
> zocT77bn&;Modp&R_}qVR^;W_9muj5MrKGNqfq*gK#4p0@N3Bsp+O^hHk)X73Xkwd|
> zqu<pRU3V{{k#nIN;PpGg%wUoKij!Id7Pwqe5`lqwPr+YYJ7FaPERb^`d||EN_?I|3
> zBW&*0r3tLC2vO@|6WnY-AnP~9jxF-G1T64Jkwx~z=3DpP`v4IF=3DHIyx{+_-co5=3D=3DOe=
B
> zvT1B}rU(!f-Yt@Y2U?X~$kiN>3%q)pQ7ZMGOQ@w;yXL^iutY=3DBPa?%om@_{4=3D$$@(
> z2}OM<r8ngPTCNr)BD(72tS*xxY602fAy28&Lk1BBZxHu2fMSh<MxSn%WWIX#Nhy#u
> z1;bsi5zv9@iPV4VeZ&`7lCcuEkiFK?nMD8*h3*9AX3rR}5Bk!QKM8vhv0wetRKH|s
> zZv5PX)|j%)rnA;AD_bYgp``I}$eAENl&iF>uK^Nm%RD$=3D(R5Ib&?(BnCye*G|0RnA
> zNoV4mAQyxcrB>(BF5A=3D_Yp7PW)HA&p>E@{CAB6hwBQ1Y0&X)nSu9WuBcRG2ru%ati
> zXaMj>B?S=3DCY^&`o$>Z2Vn@1vrL=3D@XI1cwsJ)LzTiL!`%lA1hb#Vc-tw$0TC}(v@0u
> zdbsDU!mo0e7<EwPYm8F{`k>_~1rkbBMG&tN0Qz~Z{hXM%%7I1HGFpM|)v*h%qM#i(
> zwF0t&TtR=3Di`T9A@tqp!g>$y=3Dtix0FbV+g-RxJ2-!|JcpoAnXZNK!TW*g&=3DmBK!U=3D=
}
> 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
0i!
> zOdiIfM=3D~>>$rXYz`S3&!LJS!xT1jHnP1&B!lD%dJaEz$iot+escMyLiP+AGao(J$#
> zkm4sw+3i*~8<RR|i*2L8QeXKT3Hiu&juX=3DXI6m3~$4;lLoTy&U-^&xqoyeEt|FcFX
> zt7An5KjIOLQ@}JS=3Dost>u`_{|=3DG5Zi4EGL;39E4Yx_}l6JZsn~!D-toc{Ehdo8EUQ
> z`oR$+%}v#Si$#n}+unbZ*pmADbPD)8gB85?auwgo;N{q$!aCt&y71(beJeD+<Y<OF
> zf>5IweXDg0%v?;lSF`2-0^r|Lb3@ZpKn^CAS<?EfW+Q$kyAR-TPN7+|M2i&z0e}`;
> zNXt}z9M4Rf<6cAvdZYF+Bve_cP0XV!fR=3DVLb{YWX=3DmLlNw?BVi`+2&MrjoOx-~jo0
> ztS11`6X%?nMUn7`YJcwqb3E!W#zdc-F{je=3DvsZdq6;*vK$-kX)Ev2@6oHA<1&S64|
> zcPtr0^@3mIyIV#*4r%x7Z+T_vZzGmS=3DROwr`Tu<A3WuZN(Pk((fsZX;r&(cBcxw%z
> zP{6eOqNG!rzWRS8-Dt5xyWriGvKT`c#v4}=3D-*WAZ0&ZqjlD+(y{lmM34F{X-G@iO4
> z*@taDv<dhFXmY6i$?L?|*)5@UkBK=3D@Jiw;Pni3m$*3G{O8eg74`hp{K_1}M#kdg-V
> zV8t;+-N-6Uc2p*6thrE}0Qh0>r(A3m#XrZmcyuifwz+>{W)4lF5Ps}SsH7i+)#LV1
> z|MS*GKk%HrQk6#%gYIKo39C+-^|)NLNQ(UbVF|x~W@I^kcMaaN0DSVXIpCd0EG8c^
> zAdh4iJ$UWfE*N2bbQf>n;#@oL_8W74WYm70W;_G+6uEYCfT2djOM#0RdR1`}vh?33
> zWlNRiUG#tVDXRFlEa8o~Q)u)Y^vI@Jh33f?3ObF8(RyB}D4$T2N^?BI#P+RE!P4^H
> zx59{XNLexzjW#K9+US1#YQ!tv0w*dDMvQzpvr~U^Gl5k00B!~oTpe@B)$o=3D3LX|RT
> zhl8#~Yzmd0oW^GU=3D<7);>Y2VPEl(EDa8%vcwElmV@!#1O`{s$q`ayF_Ai5=3D5|GRVg
> z-Rb2iNAP+y)Ke~=3D=3DkzTJ#`O-33CL3x?gN;G3;43GZ~2UU{Qox~7lRxkDQ_DON(q|^
> zrtM7|pA!w)ePpw<FSfU`76FXIi_=3D!#v!#m<WHg?5CoB}9>vYX6^>_O<2iqk>3uU`V
> zDAIpF+)H7Sp*QVlTsa%_+mbPB9Fs`GnamyL=3DM=3D#2QGua`=3DneNeR+V9f^4&QPTCW(B
> zRpd7rsBYC#yqO9F(zyEU*}tcH6qMCgF-cm6tGgQwt{m{C$Ic!I-^W?V8U(cA?}Flk
> z3H)wQ9XWl=3D;_G!MkzMn@LZ2pmhS6eex;1|oXpZQdo*gw%)%C-x3XP*}i;?mwrR;4L
> zm+Pjd2dP7&|7>%*m5(5oxlT>GkJv_j%5{Yp+k?`j;&3i7(Uqcmgo|lDpld)P9IYN*
> z(+0{;X&|+?>dg4{7in4!P&028!2cs~iBd7(XjUdH<Pl{{JYtd6HbNs?1klp@rLBKR
> zDDrI+q?WJ=3DhfTx+zQE1=3DL+ytynfy6ujyS%STh`^c7w4FyE5Q6+)AgHJ2u8Ud2c;{z
> zp6M0Gr9lnDkyJtXSf)sCDi9_qwpKGa8I(L5BjrGc$O1mg@H*0xQ@f|x>zglzN<Xpu
> zukIp^w^)M{Z{;0l&bfoHEQlO8T3>&vm@Bo7-<+SdT`=3DT27s1wVcH+C!*t1_Exdo}L
> zoRUjNY^AHY-(!jP1mshaigU{NGf>~zm``Crq61>&4Nsa;GjMold$>IeH{5KY03$!a
> z5I3c{=3D_^zpCCPBWFuUlo$kA-4|8y7I$63h`6lh60zl@gDK3U|5gV=3DVf!f$^C_(#CB
> zL7v`VhpwL7XV)OkkDg?oV{9ePJAZO1uoo9>mbIqKXryS=3D*EHR$c>fW=3DzD~favPz5v
> z7ADZLe_tMjYz-06Di-p3@H#6N8EJM_r<IsD9ay9JlT~6^pHHQT(kp~a;lR1{_4x}`
> z)Dh#ic|L|o{#{G)6IqI)PELOtGeyEGh?ga{O^=3D4@AXY4mq6-AyPF78MlI_Y|68j;5
> z{(fcp;j~~pC+H_703ejjBxm?*oy@I&F`Ho<V|cDEri;3SjokXF1<FroJbAqiQiI=3DQ
> zxMm^o?QaWg?YkUz>1^nj77tWZp(t{sw6Rc27~-~8n>q6<i1fZR*NT5?TdOQz2b7QP
> zTJ{SHg8}7Ua0gjqat!c}z}4q&a~vQ;meeuA!^Cp>gURzU)IhlMwzW-TpUV>3&hiqM
> zMxioPF_F)u4ICN5K{Dxq&cqiH()uP{KAgsIgowaKsn%McvImhS!;R*QN+1<VtTSl1
> zE(1Eu8U_T<e3k!Ef{lLzbNJtBSmV?;bd3oEXM|nUl}-Ovq_#tg1ZbgFG|J4Mf`W5*
> zK`bKQ@alBjh#%m1T4d;L4&)R~h+XiiCii1UkCQq@rC~UPY+I;PdD18}02r!YB}74x
> zWMQKh$C5Nrf-l@&8d33S@vi8C&1J(rKZqAnynIeGy&<KJD}8@o4s|(}Q9FVpdM^zt
> zDLHG+t;ERRb*9$z5NQE75-fW9ftW7N@FNCEe0cp$DA$(iD;2z+f|jEjlE~I&eP13M
> z{wSYk%de+_Quxvz=3D_ISKZ=3D%-WAd4AF$)4=3DZ=3D5R5`ymBq27yrP<;(1CGq$_ZOws+>=
R
> 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
6pO
> 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
S
> z!9?GP?pbDTDiX>v-OM}fV9|rl-eicBk<C$UFeH2$W#d+&Mq)55L2V<`FyueL2TX$-
> z4Gcw#JDrVWaZmpBDBz}l=3DlO2?T4bHUq1QGwxo|@agcOPReDY!C)Fe+BfN?QB7lu<s
> zX@da(V$*>2;H$Vu!zz)^4Xc2!iA~MhFlENC?~7MZoInA>;63;Bc7LNt3-+A1Rlm)y
> z2-V0rcIKl_4*NUfH5n<U!NL6%#Zk!t!Z8zSWQb_C*qD-`wR^&U#&9Rmm%*Wo520}=3D
> z=3D~t-yrTFW+q%d80)9CB`EIbVDgvxyk_2UHMM5=3DWhh|sFvG4xVV_8V@AIXKlU@9^y_
> z5qj<{QHp9@eN?z$bGg>1Vih_OPR@vt_4V(dD!YXMv-XtxZS<2m#?f38k2AsmBXl)~
> z{HM4<hjPyGF4We4(@8=3D-m9H3L%(@2_LLNDDr$l5D7)%*~XT6FhtLhduOZ~3VqNp?L
> zXn=3DviU8*Q(=3DoHsFUVk+nPg|Dod<5NXVO+X=3D2Hy3X-~bSJaY=3DgOIu!2hD-m&R<CuJ=
M
> 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
~
> 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
k
> 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
!9>
> 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
$
> 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
-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
-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
-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
O
> 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
ft=3D
> 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
*
> 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
+rW
> z&Ct)jamUSI0t8TE^Xd!1-mb{@gf0GTB3YP^BEb&>z>z>tHe;w+oE&+GS9uQDU|=3D3Y
> z-hb-2J=3DlaU0=3D{fb-G1E@TK!Txm=3DX=3D->W9x-Ky?j<4*}1T*2znW?SXv6BsavY@YV2=
3
> z0tRx~j9fkQa(mQfw*OY7PCp+1gkZNuS~V`XR$@t%0-fb9`1K3Q8td&Pu@%>M2jBh=3D
> z7*7+tW_9%b37pC`1m8^O8~KE1g7$Q;&3~aXi?0pJ)efe3Id1&g8c=3DCw##=3D&tfxnxj
> ziW!e$ox*r*gj5=3D(C|}S}`ttL5pt)eNST5p^g!paUX>y$6N}1=3D`>LMe6Mbkdjd=3DGTv
> z?T-oh&DDkQsq5`$^QIe&)b&L>+znSl6+xpgufG#jeqsq|Z*)FvLi4ohZ8XHVCVw(r
> z*eC~%6xEg^&(2%}d$}S5+P%VJlHjB+!-dkIzn}zp-}WF_$l&)EhipNuUj__9k+li+
> z2&k08&|r`tr|2%0NmY>HQz?s@d#Y3<OaM>0M-)GhRM0ph?B@%2dHXpXvdBB@te4K$
> zP228l6$MB9U3va#2k3H>!HLE(1AmIZYlhLZG>%>(_kiltW}h!`QN;A(at5!fHD%?2
> zFt-6guY9y&adJDN92>9dc-*~NP7vqcia9~2GXS<34Wc1u)KuB!-MvmHAEX>^PVeW@
> z7co3P4kS#?t{{>tVB;k`4r4&~+u~F-PV!3ZMhfeKbh&A3kQ~cFS0Xj8%zw2v7V>c!
> zYUVWoFk^tU2zx=3D3@1A7B+XxI>9+MxY(vfwAP2ZNlD1Qeppt{|YfK27s_`K~M<o&)L
> zOE1i7oYf?Alw15D<8Tn$uTuF^>6WFR<O%1L1ARnsi-E*;k(7%)8PY{6AsAmqDVLN!
> zi<>h6e#LASv?`HUy3D;TCw~EP<{@NUd3+?CNuu*0WzFYH<t^ik16#hT*7grfaJ5|x
> zPMSZM6IDnob+rS*B1D~y59pFcv?K)e*TdsXy^sdMN_wsc)*W7fv*kU(Uc#C4=3DA`gT
> zK)H%<)IoH{#6P8z(g@MSZhC?r|C1;y1Riz?s?7TZUD<*;Z)QL-Jb%d$s7tfkC_+ge
> z5iJfr^(2e#FIZup+||F{ld1|cw8m)2sHN}7YpjDW{l9=3DK1tO{(uF<RTB{7w%7<XP@
> z(kPM9bL}(gS&0_)dR8m_KlrpXSAI;P_}rxFGc=3DW4#<Lc2I`&mR97oyK|B^1aEjy;&
> z;gpR#RZ+~X{h03FZGTVP>$n#sB*n9L8RFhzp7I57j9BFR2&LP+;kuZ@`EKro0l;+j
> zwa?1)Gy&sRMdVjdNeV&>cv^B@I9sg)Ls~u7UQg1e7wgAD>TZuNyfcf*+wwxo>P?|b
> z*pyUEur=3Dv2db$@U`ceV3C~7I!q&_=3D<Cb~VKs@tTFmbx}7VSk)h1DG|OYw(>jg$1y<
> zI|Ocnh=3D+o)WGXl(WH;sbh%i{D5LcY(IV99g{+Ue#&!C$3!^gssi8P=3D=3D=3D^jTR)a?e=
2
> zA_1*iet+Bck%iDV9R$~=3Dn9uf^OzhaLje;6dLg=3D<+)9|i+H;1s!IH*MeX1ix=3D%=3DaA=
Z
> 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
g
> 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
R
> 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
s
> z5eP~gN!)Ed6+2s>BXif4Qtq|4qxBV$>iTZ#S@WW5G5>^xgB!;pWPiB&P+-m4Ke)WY
> za6=3D`DY?N2S%j3B!yW^7?Fr|DY7hC(jPiAPO+(hMfPz@tpqnI-Lz!7qPE3|sjb+v&o
> zO1W5myIPf@&%XzafA7NBK~H2&983%WTL}gvOZUbk=3Dw8GCnkwBIE_>|$hJQ4L2Gbc>
> zL5*akV&wOg%*=3DhdUetrce{|MmTH1WNzYN@F0U&~XpDPPw6e)y7p|+1t3#IVm9fEy{
> z4)$itC$VWIyLB!^49cW`>7^k)VuXuXF4Y)0cPQDc_y{7M$3xuX=3DUH0`2BWe5^3;Ve
> z<rA?-PFnnExgtK#MQRN+{T+4C-VMc5IKWY31H{NEnzp%fAxu0|sS-DSs8x@*PPE;8
> zt`-=3D&DJsY*_}LzpiQ^NP?ok~JxD112Lwf+q>uiM%SKy3<v-XC6Jy^AA8%nA*@QiuA
> z)B%C9!-!Jr?ll=3DRU&QC&d$MdPWD5n43Ldl9lR7A&?zRjr$nxNj=3D^76ntlTX*Iea#F
> zXL|22`1U)9Pc7`zLIGC-tVLN8v2ksQzS;^-Qg$o(W_!p99nx+S`D4eX%jHs}iEYU#
> zJ9YzqGC^>TY=3DI|#@6m}LG75i!rWD(R%FB+uzm3K!h4_JHor9?3l*9(_<Amk;$c1QY
> zDq2Wm-$U(^f~byZ0jpS7^ENKW;c@786P~8=3D7Urd30HupmMq?=3DL4NzW7cxjG{*jr|}
> zHWm2)sB1o1h>$=3DE_c^r{S;Dz;G}2q7S$hx+p$lD_pxxttxX>0eD}91Dbz0Vgod{zn
> z+`SL7NyPJF<uQaSHAgN<zo<GmPR1L^rSD5R0!T}Hx))L*d<qX*HC-H)3Zk19k)FV9
> zi{fFQtyk(ko4StT%NPx59%SRD>)dHUpe~crQW;Bf7r`2@ws(RdHge6*8ker}4lb<R
> zk^f-IXn%x%!PJLgvbyrV;CwhOP~S7{CK%&ZP7}imXjb|+MzLTRF1Z&@1&8`pYYbtF
> zpTk+{=3DH!0p`?eX>Afnjw^TQ%{0+-Z*=3DOE6JxaXD&LLA%!gf`nx>sykyWfUOpjX_fN
> z!j<Ih++}b7ZpMx<vhI)kS6|ZZ4&F-)1_wj>;@F~p`yfV`G;w5DJL!~?a48TWU`=3DS!
> z?CgjUDZ*X&cfZ<-0W(|i$7Y~p52nX0`;9aSJl0V{#q29%_3*vjz@1DMUxNWRm>^tu
> zw7$*b>Ko%qKj>eQwh!^3#Yv5eemH2W%u&h(Ewa>g1SB)*H@kOEy(GkRNrSoID@xNs
> z$@(gP2EiVpDDf7U+*CB<96~7`YwWsl$theHZp%faIdB*J1*k;D-$3f)^)E7oG64zr
> zT)>tv$6ogpxTtOv`13PIy-JUabi$gG%Aomsi}%f23scf`<~bl;m{kK{NHa`yst0<h
> zAMo1C>AxG|?r~jcd)3*BXYtbt2NJ<(|EQ9G!!zq-2VAS(H7$s4=3Drvd74i<xjkr3pr
> z)dHfUb~Ku_(w%!a;f@UB=3D<Qu<6u=3DT`{nj#7$-a^8h2PB3COWjf(c(As{|VK&Q;;p<
> z5vq=3DeWk(X?%hZ*%97WH>cUSf_!|&|$uo;RS_y@#zv-4F)^$C{f0ncFSXWkH_qtS?e
> z?i*BEDP)z(<{kZ-+tGO$O$;X$>{FL*;xuJ@0yIhYn+bjhfF;ru991(-_P0aKnt<GE
> z%0k&;x58OZe2Z57t&AkDaRuQ0FA=3Db*t0ex03=3D11@;f^53bwTH*+E^cWoqbb|9$=3D62
> zsKSt+%_?@cKYQMcdqE}RbgRZ89#^q{GU*caq+A9N6+i$=3DND*0hMCULH`_W*ip-&X5
> z|3lU9Z(Sut_ZO=3Dry_Mzj9(m8}=3Dls>I8aE^;xWEE6T&^;&i30<yRU`!HV&bq~=3D?^r*
> zYHL%GQ!!fR(cK}rDNL8<eZy?OOn7clz^bGvZl$38yZ4WrLuCil$xZGMumq-m+uEiv
> znK?gMFv=3DV(uE1Y<91x;LZs)&`;i{fJn+V1@_^c{R+V6|&Z<OQ)pD78h*IKDRi&*H+
> zY?`y|*DdMnahOmfqEos;BZjBTPwUISl>>(%zWlW64G}7}{p_i515&s)tu86HI58x@
> zm4PEeIF(Qnt=3Dx>5B4PAST=3DRE-+ZdMl(}+2x=3D$RtW9YK@o<7<9dtka|=3DAYreMhAf;=
Z
> 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
#
> zi`#SpRs|8h;o$L5DX#H6+SY(z^dmzm%>;UdED;vS*}LXDij9I;%#HDqJa<Y~KTwkv
> zB^Y&^FqSL6O8NVLiyRVmM$fkxt&iq6x6@J+H2qS!QdiO=3DCgpTFfd$b63YmjO)(7nt
> z`wvJyoe;I-W7??OQmO{aY$aMEBCGGea}4V_!Q1<mwT*!icLLhBHZ<G`XDr#u6$~BE
> zr?5m7-SRJ^%AaBmC)xbCY6-{(xrJ&|mI;OT+0mLg44-y?wUXI)0Gi9MI?~w=3DY-BR+
> zKuyPUf>uP5`SnJ0cK7^0!Z-M~#~=3Dn|@4eF{$KF0B9eU93ss@lSflL9sknbX+g*KY-
> z)VX0V1w$a~r@O})9c1P=3DvvB`yL1y)>ISJ{%M|$O2*sLA8!?hxQPXtd_jxD+2(#WDO
> z32>zY4!=3D8pqOiAc#985b7N=3DYYDD2qhH^{=3D=3DXHFRAa>c6n?g_9h>^X%I`2WLMB@L)=
N
> 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
Y
> z=3D{W}+EY=3Dzs=3D_6)(3B4|R5SR5+MwaXnys=3Ds%IuTK0??IN$UNB+-Js3*7;A3@0X)Aq=
s
> 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
W
> z*{(H$KT~b#2e;94COS?gQj;0Mo*)W!#zXHsUkJqU=3DlJZ)7&UgSeipGqf2o+Evu5_?
> z()LF!X4M+H<I)}Nn(Vm)G`h9m3YWX=3D*A_iyLG^`nVm$1BQ~{%NI*}$VKcPtyF*-e!
> z<a`BS20w{^t*W9F-yXz|Y67*te~2ynKmS2xlv8f8tqCaxPSA>vLljKTwmu@S(oVKv
> zAoUIqTgL~cGm2@)U5$|I1Bi~Yuz4^?o}3~nE(rU-G1VV?ux^k(9Zf%FS#wAyFoKC<
> z0Kg@Z&_rp#mE1OFVd9E#PJJ_6tQ=3DNF`v&lW6uDr|?@#ZRd&xDzgUC0^e+Eg*_w7us
> z9Z9E24l`7}=3Dm~2waRl#<N%KXvo2xRvU8a>TbJuFDWp9KC{7G}ycJ5V5z0<(eay7rD
> zWs}>g9vkV)ah68RKSczfT?A2NULgO~KF{2T;|;*!*JJnh_~b>Pt2$a1dg*JN2xJxi
> zGGR`Sv-|iw&JVVEk-omef7ixik^em7OaWCo=3DE`J5;v)>+q(9W}lHUe=3DT;&jPV(-#5
> zhw6itsjFLEU-lIPlZeOxo^d+YjDjQb=3Dlxjwys+~P{=3D>JW!fs$HQ}+0B+^BH2QYpOL
> zel}jiBJoG%?TgT>{m6@NM}fY?vS+oU=3D|ZD4jQWeV@);{1fy*oBf0zY?iibAP<6E}s
> zB`Msp02g^<-#pIX@c^u#8No?Ols-v@%?P*dE0@86&uJ+Mk!MJ;-?<$~HlFe=3DtU$TK
> z>xRRAN}j&-nw1qZ@Pu<j9M#O%ON!rgrPNOy^p#$I=3Dj$;`G+^Ho)3xTAJdzlhiM%O4
> z<Jp~eQ?K<zelSZne}9XPwwr|RkZH^1yN-S?TSbF8ppt!0#CVB+Ee5eJSZr#}OL@6x
> zEHoGA-9bU<03>X0qNAa8MmVMy;rwxt2*%|2j*J}m@7cff6Te^GNdy~sIv;&Mp?5M-
> z5~iJI+00h+wSo+31_NIlT;2P5lIn6|%7v{L$fdpcf3=3Dv1f6wAa*F=3DTWeIQL-{%+6y
> zYRmrsL`;!Q()022U=3Dn=3D|(^yrB*iS`*Vy`EyP8OpT0Jt-ThPqGT_ssPzWfXRz59Ogt
> z)_))H{cpyil&)#OX6x&7=3DWBW`o4D0!;gYl>#GnpEV97V5eQo+e;rJpC34~Vo5>#uj
> zk>!dHqdtT~f5;mQl~!c3n82fy_zbr?H9P3;aND%_O)pD&3Nb%=3D%!{>RSND9_L#RmU
> z?y=3DA&5e19=3D1!KA}@MObY|FZI|(g1!FWdvlB*Jm*LE_=3DHni=3D65Kl6r~HaOA=3Dv$x=
4%I
> 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
O
> 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
*
> z5LZtanP@T_k&_X9u!w^Y{9=3Dr8=3DF;F|>V%Z8^as|SwnA6p2D{K&6OvS%$Cx<XcmS0=3D
> z9omf)@-yj_z(dV|ouFgm2Zx7_9WwUP1i<)e?}tD+JR)&?ISgCtAwq^l9DJB*e;||p
> z%I?gxoMM)}`x|M9q0jh=3Db&`{qDaE|;_1Jfl=3D5~<$P1;OQIMTM`n0TUY6q373ywR20
> zO9iiLbsBm2<{oI|q^*+Nlpob#JM0itdxO{`fY1)O-LXfb3&<SqF~+cSaEvp)!0hBE
> zFv0YlaU`X?eLFC%6GfX<`K!eJe;Ow8FqTQvROtPL&rMQKk+05H6Ea-pJm8i!E=3DmG_
> ze}U=3Di=3D@Ui`A^XEn94NTl)&{f=3DOsoMoX5Ox}YuQ>Am`e`kgLj_DJegXXHm!49=3D_uE=
4
> ze-xMV+cjr7w!$tgf<Y0Y#t|y(p<?@CNJd?ICer=3DZOISk!W&Q!~;5C*7e@2b^`;LlY
> z^xq;-*u4sfz(y}P5|R|Nm7nM#!_Ib9VZVSko?j>WdjS~_^iBBy08p(*&sHQKAK!Fe
> z!#)Qb+4$^`w1*V0g*%w5-_j6RYk8II7}+&@{m(ezyb9XhFUlpzm9(z<EUv9#;1V4Y
> zx*1F&aU4v$Q<1R>fdW{8f0%kB*s*Kam-S^KYXgN5@C+}cP(va(lZP@1jVXdm&LXat
> zg{kIFh+v6P=3D!vZ?=3Du8huNtE5jCxNR&=3D9&m|Ai>AahJ=3DoYPK3@B!8>zrw;MJa8JLQ=
*
> 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
P
> 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�Jal32@tA~C^cAzUOn;HOCV
> z^?XhOvhef;OMgErmj~7J1c+HnbBsX_><{|PxNjb=3D<UIDv>54~Y$FR{84(fu#BC$Nh
> zcQiJor~|dN7;~}h5$J>kDr^Z`_nbIc9NG|E;%sx(r6_Y)@S&kWZBI31%T}$|h`mkv
> zGYns&!K2zpCe}!-PGk9@9dCC2jv-<_N=3D<&Q0szJh7k`xEgFRt{=3DV*N<U{9Dwjss+>
> z7?<06@GgPpR+lE|FD4TZIlh<CZ8|}1JBEDTSwaFz(ggE5fp7>NTT1AJrB^6R7OBQY
> zXRHgeN4Spz65d;Bkj4^p&h3~~XU7oZZd5Z68E1MBZq&X^CvUktwOV3#(d%M;o+K~u
> z=3DA-Xd1An1~a80xi=3D``;0czcgPUDlI`PE1HwMoZyaM4b!mkS>i%tGRV~R#jWGa2sn>
> z5i|2om)1ddvLePDCR3?G2VSg<5YHeub;eUj_Z2^G)SY{Z#GxSMS8mH3<YN^Koz8$2
> zrPJx*G-{Vow3e7H#r|~GlK7$0Rp_pDfiCvmuz#$nNS+Z^aY34uou$lS?P-<QW&xOl
> zt_vEggrXDtIw^JaR`|<o>Z)(Zn}L|DBhg@t=3DF1_6<-;f(CA+wmwX!V#KoU*?t=3D1DL
> zyni~(bd`1h!P9BRhr(<Oc#uvt(S3f)bgz|IW^G(;Qh&bG!m+Dqqk0epj{ZmJI*Tk1
> zOMmK<WrVari#OVrq`^@QT$~ZD0GAa^jKPN!_R3BdUD<X7W>}xA>rFG$pm-G)M<UOm
> zww0N7_)<bu2v-atCb*)_F?l!)a0p)hL(Jp@E?y}Y0}9hHj}0+0JN?1IsssFyykaL~
> zN1qZPH+TTF2qC^z`NTI-2#7U0)`L10HGe=3D-*EH6=3DfsZ_6y2Bkkg|)Cr%WkX<o1or=3D
> z^HmrM>=3DL$LzmKaKH_a2)gx+wSvl=3DJ#<P>M-=3Dn=3DN-KAz~U!4nFRbl_Jj?p;GavVYr=
w
> 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
=3D
> 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
kvt
> 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
l
> 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
m
> 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�PRCaXEb2$rO~h5QBeaQ0P_KjMo!buV^x1C?)7
> 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
$
> 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
=3D
> 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
_
> z^I><PwL*Gjl9&lr*{2>lux9eryCQqfjEH{^yS($pYotWane-Uc7_X;tCd~{#R?kfk
> z@_&H|1(4&_+NN%?#jE3TxP-FyQV&}txO2^DvjdThy2RkFgE1#=3Db`0OgS2zi%YArsW
> z-?Zak+c;h<+F9^^8Y3eZewzc(9wVFCm<xxOJreR9l}GRR7s~wD(q`=3DKt=3DgFUr@aAH
> z-V(rGnpRfI^tD`X#7>^s+dWirr}(T;)_;KJQ1GwWs!WtkGG+Km$<rJ-{w3;&D114Q
> zJSnKYwHEi`w&90n;LJ6+G-s(hXRy)hR8yh&6HPs=3DuMI$?Ep!lKvsG0wwP;T;W_})L
> zJWhuQSt??88-LADV^EtLBVQVoh<H|)2%#zvg^X3yVAph9cH`pHZ+QS?O;0WwGJnDD
> zJY|NwVT;a%iv3jA8|#^S)g5VLeb3S9Q2tdRc+?ezk?U3i_9I7KM&l1Lzq7xw8E9V!
> z;eme3*%W$Qi$|>TGErnnOw;)v5zrpnChR5UtM|)(S548@x1%VI2Q2&+EaMI0*gZ?D
> zCbI3U3%eDd;Bp;|adN@96KquzLVq6InH`s($!>vh;@F$aWu?zH5|l%FI_Ng#Wn%f_
> zUSSz94O^}!4*@ek($tTz3+=3DQ+;=3DA^l-l$93=3DxQfL1em1REYA#KGSoe?ZsiNg6>ggk
> znN+pqEcX?7WT$Z)@Ylc3$_18%M7NeY!VrHgx93U;!jR=3Dt*=3DoOowYV*oZhsPw`b_Wa
> zqTOSYZx^ejw_slTxnHD1VZQ0TBAQt2gE)@e(}AFVfMtx2hSE4|!{TwIYj7g5<fM6Z
> zn55;9@h;Sp9k9N%7Svg$s%kcZ1Wzm!|KMhCfLxpP$ULrv(lY>JGv$<iCmG%~(j!&R
> zdZPq{GptGEWe20?ykjI^Cx5gN7|CmEyHxF6+M-aZ*~s{_4pmE=3D#SFFGfWnaNUOajx
> zK(LPNco_G;R=3Dn7{QPxU<+v_2liX)`EqQVN^5#jHWc8%@i)NB(C^*W$7X_G{TVn?^%
> zFQJHffH;N8Dww*I_^n^=3DOy;k5a=3D=3DfvBiA`7G^ZY+rt#mkr`M5CEPqtymXMIfl_lP4
> zOj~oD8m=3DD&D6QV3S5r>@gUBa85LkmKT1AgHBCf9uxP^OG`$ftPBWlpd5Fe3vn#?p+
> zps~7i!5;g*^9Izb@tbG8Ot<70FXm}Cm-tDMM`LyLmESzRPST|U7D!Bp?Sm8J)!Ngj
> znG)s(sd(nCw|*u@q<`d{4O;GDJSu$`>BlvgoN^W-;Z9dLTE6Af`FNu)ulg&zSD_)Q
> zLAW^9sHO12J-!dmmi1`f!bYb3JS@tvNV=3DO&M~0VAaBHkXS@r4X62Z3bqdNMLA7F>8
> z2FGMBUF4+L{2!eSKk9g8*h0g&A2+r&DNHzk3zM!mNJT?2MSqB<2u1^Oy6mAmlg9O#
> z6dLqdil``k$9d*;=3DK@ab^$Mz7%@4$)#)5wtFnGT3<!`MK7A48x{0i3qrZ`%;*CM)U
> zAD0>Ng+d*k_v1U$?sj#AXr2tl5U=3D+1R14?623#vyLD&fE6L^Fine^|a+Eub7)00Xs
> z5V;kKHCW>S?|%<WhgFJR!<wV5GDa64-tB&<PLSje%!!^%@QvOl73mPe<9^r@W*7_k
> z+CJSUIb2YXniOYL4ua{8)MhOvlz5oa2I=3DKvb_nIoe!)_`zz72%=3D88tVeXRx|oK6or
> zbwal6n384Zl+24KmX-c&xp$Q%rya6(0sJ_<gr?MOzkfW87%xwdkjtUEA1|R8P{u;^
> z`WD!KVN&Uio8fIzQyHJm8WAvdh&DD&CQ|p^lG#?-gYCe@^n5Wx=3DeYx9iI-nG=3Doc_%
> z)!l|A+UY}_Tc+s?ReCgAG0f>ULXLsQI2W7La71=3DaU~b@M7n_OTAt!H+!u2^IQ&e08
> z6*)tIh<^>`B8&JPT1^q%Zxg$kx8c&st?Ye9^l_NVzMaoELQ3yb&n_U9nR7Svjoel7
> zNJi1Jc@wB3cSf5JD`M$Ze?YNk!mRpSh}zjs1exDY>%1-SY#w4prZX}gcq--{iJp1J
> zPbc_9DbR`Wq()K@g9ITzB)@b+IZ2_#5UEE=3DihoK!W35JrLLTVC2`SxY7{15a7wE4{
> z)er}_hnJ_DWFu3FERH#XzT=3DtG1&QBRe!*sR9oG86vQWc7S<TZ3KwEBE5Mm$NE5o<y
> zLZkL89wpmx3}jOAt5F3(CoHP5Prx+|)eM>d7r)WRXb(qlCJkC-QMp;YbG>Fi9lX8J
> z+<#Rq{y=3Dh?HU7VAjzqr$6<mCt)~b-_(8okZi%t5KYS8xt=3D4MRP@`F>Y#_i1=3D-@~ly
> z=3DmEu8fP(OcVOl1)?E<R>{PASEJ+ODWs7*3(aklEeiI}poAA9w%eAjY|KLz@E0>L>g
> z=3DRy3IwRQ1ep!d4&Eu>*1;vEf9!3;kOUVrMD3GIB^@j|$R2tVpJSt<&E3GUXt%L36e
> z=3D*h@#Fs?Pb<a}qNqHyEVOFe_hE2|@B2D%$8Q*h^^!P2`Sl3*Y2zb`{2I=3D!84J(aQ_
> zhrc_Hw4aZxdN%Wp9pbwU9OsM88AwSh3SE;J^_`K}))usw=3DsN7D`--iL3CdQx{C|PZ
> z`%jAhfY*SaC#f8=3D!LDRt%yz@85MymE;KKwaafBfLzfvH^_iqKhgl&q0wP9;z?A!Jk
> z?0qv%x2Tc(>)&oSMuWM<r{dpyXdM?y31wDdvNsqVtM=3D5~U;?xhgmOi(0Xk0;7LSh$
> zr7G+P3h#k4Sn`-k7J^Vt{}>SP6@NQ(maM(EW)H2Z!bHcOUAV?%3TDv+<0}DCk4E<!
> zAgwB|Q>5V$EcAc(94WSBr^E`@zAt!pAm`_4!xmfQ85ShilAp;bwB9EKF(<88cn&m^
> zdJP3NkECU4>!Mo?Zm#}M5F1=3DOot(<$yOCDoIwGHDrTEHge2@^Q^rvPiB7X^^t$!p!
> ze*G>O2rRW)_GDqG7W%nGLMV;j-Y2nNjg||r@^6A|Q+d#4-j7S_0w|TQ4S_?Rxqc!w
> zP>&})7P7GXCX{-YBdKE#G%P8}7~#Q(cQ3RmAfpFk+y!h|3SafwMFq4^bTO;7N$qy6
> z7+xou;1M-ORYJA8(!^6qGJh@W;WnGmBMnLCtjivMKa#ap+6?gVDl*XMeCz<P1JeE0
> z7lLCbs4;68_>4@62u?<|qEYA5t#Y2>8ygBKqosu(=3DU~IQ=3DQ82TQSgj9>XrSmZgrGe
> z>IN-4SO8#05yyki%tp(1Op*j3|0Gw*ZY#YYm2i4?2TU@9*uKm2I)7>|P;5%)%eGO#
> zN3Qf-tYN|t`NcIIW3@xWQGdeCYTOQUT9G}2t?N6VDbrTItjR)D!7ei7dT8o_87Xpk
> z@JGc&)p6)uy51hI%D#ab4-?)S!Q&S18mh7CuO9Zq7oC{uP&96pn(lU(v+VRs1&k*|
> z_r{P9yE{Jq=3D%=3D-eP=3DE3*PB{$rd(f^GX&1wimIpA@(%MQQ&jKhDXJhuIJ`MSddAZe`
> zL5c0mgf&?})mdUAJ0Gz}C&4WID7sS^KvZ4J;+V>gj~H16ycp>$-idHmYIX93U9b9D
> z1^6_do{;LTq6v1I&oMw>-LM3W^S!&PIiXldOY0G;sM4+8n1A@DIbTe@?|hM|2elvo
> zh28W*HsvNIXe~3-rApBpu5(O+K#~D@!TNb~vilMghwQqOg&_`?YOTRH<U@xwtBzqt
> z7~*p%$w%^h`^2&cjN^u|m<nl=3D<O=3Dj6b+^CZHzOP}<G{7)v<%7cM+plL2u2>_;R`$!
> zJGKOj%wSYDJAaMqL}@;qR~)r1L~v{=3Di=3DA#QN)wroKau947S&>Cb^0kU&pDnX2%N=3Dt
> z6sQP>%k?>Ux`@unCyA0wB*jVF!W~pvhbjV`BO!b7p>h(j7i*uSRwnPqvG)#RVAoTn
> zn&~<w&ftUZ0jGqH%+*D7#U?TTAl9j<4SFs@xogvmAAiI=3DU19Lk3+r%QlcJme`lyNZ
> z@4(5G+#fou3cn6RIORU5#Gv6z5~8W?Wyn&7$VJ9IXxtF}B$Fy~<(}CI%jZYdE13LD
> z+94qf4w}SVs571wB4ZZlLm*?mdLq-k>mty8g%PoZyC4Q>fp08YS=3Dd+eSXH5Yx6t0*
> z!PPzZdw+l|i%|BtJPO;42b+6$(DV&y3=3DvV{F#JP8(Xe`kSvqK?>DIZow3C;N0we9?
> z#Tga<Rt4I|6DVkg3ncQVp|j17+uvV`2(Y%HQ#M7DUM5ej1v|5aSFT9lwN^L%YvBwP
> zuu8cgdj1JyHzJEZH9UQJ@<L?(viHBJ+#BEFPJe(p*BQ`Ag$YeON}U^l?TP5yXYpPN
> zL~nF~B=3DLWRHx`7JoFqqOx7bzt=3D!1o~H=3DFBl6YoWD%ehSneX-m3#opnaF9XC_Te)`3
> z4#yhXl0`Qzxf;HgjomG`Jm3xPt_m8R&x(aE{Ep?SJ?U?J=3Dj7RE8j)2ER+Q9g!=3DfFP
> zHGhb%DOaiFdoK0+c>tj7Uk%*-MH=3DInvIY0E`bsK_W+vu{p7?aPG(|yM;aLXMX-ubq
> zuUMju!qHazBR8^3Bz1r$D@~6fn(T*8^3S-?IMn)2*+Kt2IPn`63n-Pfey-<hxS2MK
> z;5;x`^H^=3D!?S;Z(L4&##yZbS6!_!WlO@9ZY#%cR!p*DczJZr9|b$NF6Wz1yr;&4IG
> zAV}0G2HG|gayLGvdLrbA>lRMV*;xvhJF+b&Xn??9V(95dF@io?PeQe;6XUE9`2p5R
> zW2?ZFihVB%501F)JbyqVR~@E`DvPTp1|iU&v?*p;W2x~%W2q?RKz}Aj_P&*kXMb%v
> zQX;M@%>y8bFK=3D22yrxrbD3%%^%4rMjYoaG4u%zR|uj0Gc!R^`r<dz6Hq6yN#i@1)K
> zpnw?g+!&K+@)O~yH*dyGX<@RnsoGuGRdl%e20v+i{I)5#tt>*Pke1jict-14feG_5
> zI7q78qqK1o$fG$}?kGYtB&VDG&40=3Ddx_H|1b~%4%06NWopQd&nz;roPm4!(*J;nbq
> zh-zfAC+Y7HI=3DNdztDB0-5?qr10*1QT#v8n#IN^dbeFY#9l=3DS@N<#W1pPJx5xI%aA;
> z4a^@Sm*Z(X-YcJPkQ>U;Mrrbh(P(5Pf2qU4!m5+e{ltD&*%wm08En}RB!5+*YEfI}
> zlvpFa2rP4J`Jh#$^Cpoee_NTCiK35BJ>NWa1s`NkFk{otmBLsHa_svbSocR$>iaTq
> zq<Fg}{<Vj943Hqj)(I_-lIg96ArL=3DOSEj_YU-f{}II9N^_=3Dy7Y&O_pOW?$W8N11O>
> zU-Ok>+nu7m%=3DjzP98z%CLVt=3DnLeqwFJ|)Gy1BozFZK3Y^S<&}n*N=3D!^a=3DUunH|F2=
d
> zW2!(7fnP4Ihy7gE4UZ&qZ7Yo>tWkC$VVy1PUWMRZQF<s;WfP}b>QWs6@OJ=3DQ9L@m7
> z6EE0^m`f5#D9MV4)d0A=3D&F563W^RR&v$^frQ+QmPbwkf#prpRA0)MmRLXVmr!v{7o
> z$hTqqPg(Jvz$!kq(qupv?GXpaAlNWbC%o<qq<<ZK&kTYZD};z=3DO3Tzlk{X=3Dta}ydW
> zTD$Cb!~BcmW{d^mR263Uk*E!zk&w;c8XykpAI0!y9O$|%dpr{&wPjqhV8kWGoBN51
> z$=3D8dVYeT<7p{HeJ8h;_gB)68ZT%#(=3Dy^}aMYK@Y!vS8T!hHTmFk4%rL^yvv+BDvC8
> zWnT!o=3DfOj-O*`!RrG6ENl)g@N+tV~Lw&lPX|9geJ_6@#Vp>2~9efXb;_dWTiTqjkf
> zVl$;H@w8})a=3DL}6yJQ929$?Zm?>>^fX@pvsPJq(;+fu_cmw!0b+I4AjZh#uruqo1m
> zir<b}DP`9E+J3gejbOXUic7MwwbXRH8qTQv5&phwlD*Z8;4zYyOX$k}G4_M06;T_Q
> z9^&)37UGJA3O59>ddZC5%9fS9s7w6x6R&ho5oB5FOB2nXggm>OHZCb-n=3DhHgy9ef7
> zF7Qv;LxKr^FMp`2x<G&$xQ;J(C>3GA-~4cKaYijW)cn>Q0om<VkJPfIDGb*uogmri
> z3fnfI3P&SU5K*rQ*&-|iT!xpO>N>fK9e<;5qq7&1%oH*N&IpaWH7pjokX&<Kl{E|w
> zjQOWK6(Jrmiqon#=3D0Bal^h#kTM5VPQZdqV5F^@<JzkfWgP_iy;zrxxuHO7Mg95dof
> zXfSx|J=3D`F$`*pOsx4w}GLRwCSa7_x$*<K~)+n+(JXd<7d>+r6BE($a0qUn6mp>zS$
> zw*G(+y9o@C8#mCpM4sbck$ao!117Rma~+@I&h8Cx`^3J7t|`Y?2Vi2(!cPtgA}P@v
> zWCq%w41cV-yKB*tr|EW*4Hr$r^L>1IR@D+AUCUaIzF|5;8ruOwi1`I<P3+u?%4~n@
> z^tEbM=3Dtz;`)Cnu0Nht~F&{I{HTv9gWvJVN6Y&D8}cwsdIJ}{7MccL-OoQV=3DRz+1#9
> zYZlLCKQZVDAO0*vrzVX+;!A7|fRpQ3k>_$b!GFWpFEJ<~cE>&fXF?L`sgV$rC-?Se
> zH=3DuzR9vt#3**ZW<fTd2c`+zw@^a$teK`MSZc$jZ#=3Ds49b;mLU*_BTx6g%T(RC7lgu
> zS+wrr7t$0P^c11EaRzCWg?$wekPHn0olkacsB?0S{!vaCWb|U83Ds45?&Qy`KKh)-
> zhJWs4al>zA6Jfkx6rz|(Y?_w;NAiJu25UovKp((u^ckIZLE74xBM(7JdUfPX1Vs$C
> z4z>=3D1MfezpmX-c+oH98?l}c>=3DIJ;I;@@q6D#dcj{ev!1e19F7ln8gF!LVoJbZ8J~a
> zY8EIIR(!SEWiEJN<UP6m&t_F_KOa{(s(;<8<AkJU%lz8fwbO+yL8s|^CK3h=3D`*aIh
> zhW3jA80g7mV>xwF#Vh}8dQ@Q)>QOi>_3H3*Xs8nor_o3r)u1ZK_}>CdpDpyse}fQx
> zAOruFj6=3D|AaxpsuU2)Ih9QC3|ok-ehj7>;dB5#;c)7Y(Si{=3D|E$El^^8D()k#D5Gx
> z8Sr`YNQ_gU#|Yp^uLq^r8{3X`3)16QpIS>N!NQVvN$J3g(!jtZlYe1eBvr%RI=3D~yh
> zdIHlV^6X?Ay&5{A9)idgiL5FXB)4Hs-A3RnxAq4qk)vzNZ^no8t{9#<VuycWU=3DJ5x
> z<T!H%o95w=3DRFcaFp5IGRwCPS>Uw=3D!)!Xk~Cwej+4J(rjW2m>>hIfZ}=3DG-Y6NF_4nD
> zyps~-X>2?e+6NdqrrbK0(53&b2+`$~_ZrNwb{q0p_kx2>C%@M6XCK1`VW@aFjH9p(
> z!NDMqjF;M8i<mL!5+%uv{*{pjg&yD?`+J|8$<FavGA96>pU^X73FnC|L4SR_-h}MJ
> z&$cZ9ym~5PN$NA?n&ZEBJz{+2{KLzRdw}UE9fB4dqHYMrzW5uv<arKEatz)h^>Wt1
> z?Siv>@ozo8Fi(5K$>da)-FkJEYrr@mq&-l0V22JT;7ESIYsbEqIAk9BWw$2bt^zog
> zq%jxSCf7*#VQQyFJlAc0)PI2DIC61QanIDl+Yhfu>)aG8R_JL*ph7s2G`4WX|LZy9
> zT$dWfvuthze<n|7*m*i&!D7>MU{MLlXTABIQZXAJg5O0)c9}Y_7D@nON+JXlYkU@P
> z1#P~>S$Qvp)uZsNVcAlBG--c!`lXKX+U}~LX$}l>HYE?L^}8EjzkkvKc90UODyb(P
> zPFqv7lpZ1CM+=3D!(YQT3}O6|V0D~hs}28$vfauu|M>IEi?W6~PCw=3D;E>Ut>>%;ump2
> zu>wg!-jLrk7wAw>8{%u4vl5eCL$!Zz;I(oNO5V8*dUg2>8O{MQ2;Q30yl{H@PJ)}c
> z2bMHt2F(13iBd7K3xBvUKjo4esvUp=3D4HzELLCo8#GV5zc2?vCaA@ChV9<EwoF+DpM
> z`_VJ0&IVyNQ!`<l%nt9!^p8_FBe?G*2S1P|C~UQ6z3HK2L%HwG=3D)J{}$yYndTYBfR
> zz?rc<wO4w$Rt{qQfxnMCf81g~>(YWb(Rku5?hY%eX|B}~lYg(Te=3DKrv0-YLLO~QQF
> za1xzIZ?0G~oAnd4PsKmCqRDRFd;fh)!b3VWRO@fpiw4UCj<EtwA%Q=3D2<1YLx)ALDf
> z)SIAl3GRNmo%@sb_}F@Fk3`qs4o-%)QW?t?U>p!6h{MBQ88$|bXNRyF=3D=3DJHOVFOr=3D
> z{bZso%hb_6k$>+sU=3DBu<0mRGY_zuWn4N_5;kG>Bn<O$GHzz~n1QO=3DgocyX5@iGfWx
> z3~;^!p4JzQMrnmvf#L_D*_Z;aH&K!%Kx}5iSC&Crlwi~793+o4S{*lIhkM4erX!{c
> zA`@&TzA$$K%=3Df?N73@HUs$%UpfPO6AP;Qyb%itc4)qiO|#g#L>n#H=3D>yCB=3D3kvd~v
> zc4lWQOq<go*bEAO^VX`ks}~KbXC)QK8L03tG1~A!{5I`UAS0s6X6mnu5MM|Dyd<$s
> zPXW@0K}}fSdw9w+vclw^Z^*E<`r=3D8frpyL6^}H(EJsQ?U;moLLoS!4)uolK;p4dlx
> zwzgNaP=3D8Yhvev_dO<%0`NC)lpBj)19>TU7NJVJO-Y2<8ohWOuukafgAZXbB+er!<I
> zB8abO@yeYc1-0Sbu<Al|$?CAc`Bn*|Tlm80D@B0I%$@3jjv)7zAxiq7*;;lq(R+5;
> zk)HrxC}wmtb)@HXa|y=3DCG9%?Lc*nri;f>b}zkj=3Ds0Y3iEjFvtlr-SZ_BM5TFXbu)b
> z!_*n@wWD)cZ;~RY6aQ+4K@^NJ)b*HZRSRofsPzA|498L=3Dc^7q92uTV2W2GltpyWJS
> z*UwChaYn_+7q7}A<+i{iTCWWpfqq$`Yju&0NhBc>>7|uFX>d_6Zf#A)X=3D7Dmkr>!o
> z*MCh3`b19|=3Dh|?gRhQm(bs1hM;)@7d`wtbSozt_JnUEUwcYeqcVBh)0roG>#p5r~E
> zBu;RW!*fuM`D2qGZG85U5Yj~iYLo+7a7Z^ci@ohTryfl&wBZk(FxTdCF??Q7CLagz
> zO0fF$!}64mC9*0@XFX~2GPsbZT!)}ZjDN#-qw<hWTtW3n`8np%Z3-%HmX%i4-c`s5
> z!x2xrlCW6ON=3DW#-)fr(Pqg8%^a)z~cTEHbZ$e$arJk!=3DBLuJ^ZARj@x;DK0k6u#5L
> z)INDP%FC@VUb^+7-aypMuS#XmCxdR>B@HcCknJUvz7SbvDBqA3%}Tr;lcfRnD1Ynf
> zWMjAa*oA0lEWgDz{{%^dFS{(e8xotsey4pCHw--xxm4OPhQ_{oXDWjs)u}u~B7PSO
> zZPSnY@@On=3D7i7oFQ)BZ`INHuVw~vXfY2`B9zTe{dfqSf!Cl03?cL0NFM(I=3DVvFkT0
> zhU|c&i65wT9{0!B$gWtW9egbm^nVn!Dy_D_PA&Kj$mnX9$<y308kT@>aXFYmT^e
> z?ynqs^MN-*K;ucv;2#l07Pjky)QIye1yJQl2YussoZIGf?FgJzmVYx9%wftF30=3D0h
> zZ=3DF6_Bp3>Gee5l9E%(`_P4pYs^RzKksB&~vKj4zyA`c0jRjB=3DIr#aOW(|>X1TW@@=3D
> zk?zHlkuNZy#D9%hoi(tR<+zhbq?~iO3(oN98Wrt3lwh&+lui-{%Tnao3E3Z+MZgCi
> z<qeuY#^>&lp#N0hxo}zR0~jTKY8AKSnO~;vpN12j+%=3D3?^kC?u$k|;%^OBY?;y!h?
> zLbR+f5g9L>5TAVAj*amX7=3DP&0KP~9=3D;Tx&NU&*_PeB2)t6J-UDkn7wkMeUiiiGGsg
> zGdZl4CO)+NS9KGtiIE|hqbF>DLwyTg7|lcK7AyDe3b2wm>oJ9@#y|yjht}7&oab5d
> zvy=3Dykb_nUT26>VA=3Dy1%0o?-6^A6MJjiQ8JoQ_Vtr8rp<zZJ}P*Er0dIkMo`F6A#TQ
> zFdxl{Ty!#xXW!UW+l{0YS!%jzccAogKviw&*K`l83a&PL{YQB)zGgXiCM-&E)<itv
> z?l)VMWFlk#@RR+=3D(~A(ds3nmC>X6}ZWV>;`6CJKCgX7&wxl`b4wmoheOq~jx)XHYv
> zyud?%Wp}vnSE_aNt$$z{seYU5&04Q2KawKMSm!tK@^EHuUv>wFtr2XS#s3zfju)v5
> zVnA6PXR~URb}C6`;}0+_Q@9Lufi+UhC0s9yo~m2v^e#{KbPo&Q2cO@1xFujRR!agx
> z<#6{Se<Od+cU>MB)n#k~TabV42dY{uy&TDQ#cM~pm1r>-v446TWxZ;*zsi{hTC*rB
> z%kLL?;Fuaf0hK~fFn_<QGFV~qikV1@eF0KgC(dwHlquwWdtS~Jo@ttiJK@Qi1#wDO
> zQ$FygNmUVY;jSnfP(X#&HVo5YdRVlMATmv@<WW~_EVM3<LgX?*FrBj$pG!vHG&cBl
> zUa|Y<SbI-5Lx1lH@BflqQ+elf0zh;00n3cx@Isb=3DJPNB5(Z4*&b1FppHog6?-aK?y
> zZD=3D~yrOveUap$i#RY~bcCW@Yu3D*!xFha1bcRH}$8OoQBzU(!eoapxJ5KfItj2jR4
> zn1&p|1KDrJ`ou+2<UWU&ZX3zhbIsa7zD<7U*LkXSXn&6DCym43`Y@-2+DdEL?bv0u
> zHKXwZDiaJG301w&Nl<{3U|o7ry4a5Z4f$5y*|vlQBjQ<+J?JNsY)k8xy1YI5KPc|X
> zJ~P~)DO+xzCL8Lyq2J?LMbH)UH5{p8Cg)jSL|V;SrN8>e%^=3D=3Dk_>CQSAS+%1=3D!2es
> zPJLP-;eSPM8Hq9Z7KGh0l=3DWtAceEk0d(mq?TK-{yHmShry*oS#4VG)3XsYZK{v)Vx
> ziR3E<N^7vV+lzl-7MgBDBhaj>6N^Vyn2K_y@*xkbJ{1|<3+QASepuX{`qG)@4Oh1Z
> zx{$VBeS$x*GU6Q2Ljc;YN}w9USl(6Nmj{-bV1NG{7)?^5Q4GimVj}++y1Qv|v&T0K
> z@F(@~M%rX^@<Zojj9`EU9eF%;nUC!hr+DOzDZGJ6n<Hb-XjMcK3To<4?&@&r`C|wb
> zuFng@D0%n%%_bU8^*Bit)21>GQ18N++n^TVY9t#mj9skAI4E>p7T|H&rTCL)dKpla
> z3V$Yu&e!P)iE-Jfb9y;VbL;y;-acAPz_N3VRcftaYXzyzz<8jpKzM2#Q&?#Yjve&)
> z_V~Sw$4pW|x*(BplC-C<t<8CCNGbm(1>ZG*e(goapawJe^!7PMhdrqMgVZ_t)oA1Z
> zP;TmZp4Fk@EzUaa;mmuSvUOu73P6_hw|_;TCjJ=3DXs#}ndTr+5JIGI*95pmancsRcB
> z>6ui;!SgRnY7ITxkl1*{grq)JTJ+*b_II!vO3GhO{z}2`Pt{@2c>Fl7H*g7I(bM;{
> zX@nXwm~Ig;B$2xLfBZl&m)1<Il*0r;Km`lC@Ix%VGlEicWTiHKe*dvNzgb{@iGKk-
> zhqR>UKt<p)E2Bxx8{Uexo7w*`DO{sj#ZaPns?(oQ``ful&|>{Rq;S-m`)>VNDf!2$
> z&MmB&o8M6_U54Iwnv*Ep+g1xBu1Y4kMfP!|KyS!gxfA!EZ<3+=3DvFIn6VMW(qMvb~?
> z<tCYP7P4Lzb#VS*4+ruoaoIYty?<xU(Y-LR5YYG~pHriIT%VGYpFVPVwwoB!1R~jJ
> zeOgW+QuxpCvG=3D`-(W15qwcz3)j4htBKAhtK*AokWivKE;M6Jq}_Ihtr2iV{}%lc8t
> zJz&iMzu16-K?l=3D%V<u>t3T3E{(l;lc0>2FO%kgP0gt1)G&at_q`vy255`XcTW0|*<
> zJh}G?b(H1Y*+E9>Ri3l(Zv~-i1<aSK9h?5gR!2dO(afh_Lv_loTwlsDso}_a@?$Qt
> zvFmM{MAq7faBoGk@P4TZRX;7x71}Z4&a>$fXvkqR=3DJ_F5J>FtyALk$R^6OKwGTsuN
> z9@M}Ll}lS>4=3DSt%W*nWSTz~gncVUGHPq96MSXsRwQY0l8bb55`Bl(8H|L)uWS=3D*j`
> zUIJ35bsZ3^mb{g*@CKJ85pYLuut0CyJ2Wu3fVVA(qRf5_IHF3qHLbfy)r~A*DA(0h
> z`4Irmpc#&@>FC`h^P;VWp?iYqAp%RfqhN+SDHcX$k|XPYT&GX>;D6`<at`p#Rc8j3
> z7Q#@spSDMEQ3;|kqEkZ=3DK$4c)nF9+RfKDJ@{U9c{$guN*n|orZUsIQl;XSnE25dH*
> z^j>7Cy{<QZX6ZAE9{Iacq2B1#1hBERyl64GCp#yj<+X~hO_LhYi}NHQK1Bu#Y|F)G
> z)F^L3&e!gLc!(|ci+?rq>g({Iz>nWrs{3SxQ;Jo{whDqNY7)<ihV&aRsIVb*U@d({
> zA96w)?gYDJe=3DuxtWLhS5&(kpJV`&ErODP7X6p)z~`$P|3Q*~$}S8^~<9HyG^FzAWT
> z9G*_0Wm>X#ARPq?B4L;fQBY{35P7*Kl4hsq#WO%7MPy-B<bPC8>eoIZ($GAwS0C-x
> zJ^yZnPrJCIz**Neh$s#m?n1ROr%W>3Bze}p9jiW(It{<!1EKX|n|Se%%E;Og+wmxD
> zp`Q|xN1bIoC)!Cru8YuO0}q=3D}`d{=3D?{F$pM(?QUb$?7^qB{gZ7S##_n!1|fy>a%^<
> z@cD3YlctrfzJJ<5Kw`Z~95zC&fx091aYlRyO01HbD^~v8vZ`o7bIzC$d8o^j4RB*D
> zIGtik#jRzcv@SWyALVHrk|EcpAy4GEy{VNdZQIQsa+N$(^y~&T&tQk1r?h29<>oRO
> zgVC?r8O4O55t&Y`s?>wS<)0lF6NI1Ld1vp%3-{80%YQgqbHXE^%-i=3DNBl-VS!^Mo7
> z3|PPsA^aL>gN(WL{hhl<m+0@zNI{@@Bl7qKXfGo+PA0tX&MIFUuXxt@`L@o4Z(Y7{
> zvzJI*$?C`42GrH*kNV|^;8}sGjZ4KxnRb6?Z2a-t;&emy#Dp0Bb5wgVr1#w4+nYwd
> zT4*Bp6Mvp+0%m2IYuE}oNr;<hkM*InyBE}<ddVgUBe^&Q>#6EpeGFNpr=3Dc#<G7{5w
> zm1a}FBZX&Lf}t+AHd3f{lu_AWc?ix42@dW<41+^q;*$2mOivrP({uxPzNQ=3Do`fHIW
> zxAg1_SNKJ2TdMErBe>+vc`C-Lb)+?>^FMHyfqy+&wPgxFFvFQ<VV{CC71#ew{Imk+
> zSHBy)_#A-%x+}C0g+om{gyCW!DhdgcHLk<%B<um=3D%I;zICf@d{&O*m4osT3<#XrYj
> z6WqIBBquI|*zkZ6<nIO@p?qwj@pYisS}ZdR3PODP0mzBD{O~6-_$G8thHtiN|8Xgd
> z34e|9NX)Fq|GRI$?iB_+c-#+f7;F3IT37r<^rLy5pzdcfAzniZ8YWa-z$zYO(#s1m
> zsbplMW~n?SU8#~7{5V4M@#h`Z%=3DLt`&6{L-*>H*9XJ*TY2LF-i-nQIFoE6;g!%X_J
> ziQq5}EYqZ$!Hco#?Ba2N4J@6g{5~_s0Dpg*55&s}34B=3DbDK9_T%~X0gM&6}nqgd5A
> zap^EeCv&xSXrn3T0E8=3DbmAzuOxf@}D8ACDY_V67bih2}uKrEn7k)6OB-PG0vzk63}
> zE|(y4Qf$Q@eT^km;V|Frhan+OOq%q}Si9uLOCl8RI8Z)*Rh#g44Id6<(<TiLxPR!0
> z_A3NM-uSQc*GM>g-ghwxtRzH1{|b{-Xzg_cn!sPQp%LkKI9q6aq9cvJCYXSF&?vt5
> zIV`^q3+GqxaXKp}NGn+Tpfb(U3mPz5?JIr(4-6MfsprkA8Q{|Qeb4Z{l!LQhb};fB
> zEz^*Y8n;wFurq8iU9m|>78`UV@qbkk#4q#EqF22M_eWB)W%Pycfy9~c!~m8d1`fOo
> zL7V2$-S|^&&hKwX?~5GW-)%=3DB@Pl1(@I7~;T%+TV-;5njY}5QD!L3VNR2ZMElg#H2
> zK7{fBZkZ<^?Y9X)d@RgluX$HQVXr}J9x8ESfBZ;$bUhJ?R&<5uxhO-@G=3DJ#bRNjix
> zTwc&44+Dr0w^{Tu59fsJWh{b5{y*lPbs{|Ah4H_lmb2rz>m68BP^s-$WwB)kkrQH#
> zNkT0P+m8eDB6U3ZjKiWlvzC95nrsPVJXl)yd?Z+pz1ixic<IhNU339R%$Ko;=3D2+_^
> zbaRVSP1v`ihG1j)!=3D-hWFMr$I(qDrPArM5|yskL2HMi}gA(HM1d-z^Jus+SSUj1J1
> z*E`6ZhNa?;`%bYCL2GmVKE>EM=3DTkghYVoy7$_|Km;WRQuo4M+#i}>aSH!>d5NThRY
> zv~L5^!;{e7lKaa{Lw$Ac2s!ROg$+kRPd-Bwcz6W=3D0AU!WD#s${L4TF_p6OgJbEg1!
> zd_}zu`fqA#=3DJ$bYbU9fqlq!6Fc9Ik_>a_`@XyfAw<S5IkB&mDN;~jse0-6^$jA40;
> z%-bIFjodw#6bGbwe%SSP@^^s0FG&BI64GwD6r<YT{as0!mOX?In3qpGHqRh()k$0N
> z_V8P*uC(ziV*a(aWPcX_{`pw>NW&_#GR7=3D!qG>+{po3Zqt!=3D|1rL`HX(PitW@^YWQ
> zMW;iuQ1fyb)weG|Z$uQTm~zy(-4my$7>1@3o?>Whn<HQ7L0kG%g#C&;V)+ixN2dkG
> zN^Q-+!kft<lo~?Uw?i8WNp2b1hA0FmI8+tZHg@_U(0A~CE`NcbpO!Q}4DaT1?JsSa
> zNK+HTDdxXokEWgGy#=3DOhJ9PUSKv<EH*OEH|R8`uzKOSxLUN{2DaxvD=3D-LOMBE5^e}
> z?*}Sja)(@#0!*<Q+pW5pHz@)fGtwJo&qW_T&Rggzoew)lE2{}P?sT_Y*^gXu<nsy2
> zr)GXGlD&U|8h@8T0aWEA?98i&j3M@hD{-$im~3U6RBf)X7TnD~TBDW@B*DTU{w1dB
> z2zEHF;G$rda}{+c))g%arApNrHzD1;Gp^%#825rhOz<P@-tX~`S;QaQriVdw>*)#|
> z{Mh}-pYpfN-_7PGjC&lZB?W<VIkIyZwl(RJ`P<x1Z-0aM$yaUyZvoxjl44ii7|8l+
> zUtc8<oU@=3DCDJTw=3DU@sT{zLT9yVu-<kxs*a7S;NDV1)S=3Dn?<uHg9Hjkif;a`xFBNX}
> zzRM40Pzl`59G8E*|1!UYyfDLu5fT@q7h(})xDTe&k5HJf$HS^e8)##gl2_rEBZl2U
> zED)g#9)I&wx_5O6!t}BXLbvj*O-HQL9?C-=3D5v#GgLb4CK<<j`ITbcwewdy;%VOB8Z
> zb3TzBfKG(E_)V2377k*P<rldiF4BV1GCWb7dtq44;zFKS!AZMkSR$mA(K5n?X9HvS
> z?s1JQDO5ryD_XOrx+3X)p>d*cmk=3DvbjKaaa<9|UOAy1`A`qj9MW%&}8S^i*>(vZ)+
> zZk~!|9Qk(j6L&8^6{srs^H-&n6FL!_)|<bqovs6Y1+-HsdQFl3R9S8(#Qwfns7aV`
> zvzn6zVS9^FOlx;1PWKN=3Dn+aE()k-slu2!xtmFqZsRrdEz39|BnSf1l2QYRw~VUKB+
> zKYs`7d*ZfT%oNxfs&QNg#)*o&sd=3D1ik0jo!RImt+3L9JuzAz)f6x?7W2Rfc1dAb~8
> zH>ZA7T)~}rtE!xiy@h`NehKaoE(MUvV<T+UZAAPz3sOFA;gFEjl9WvIh~e|gnWs|+
> z`ub^+42n*nM0#<8U+xKWKMjOK9E*=3DRi+{_*93?C~_Y7(lB+#if4L8yl;1?yME86!$
> zCK(A5sV?@Le@T-3;{zwFWVG3!ej2p?K0%I-Q@j=3DnKou~OC4P$m)I}yUT~NyIL4ND|
> z1vpZ;Ms1UQ5M033w7wVELRWBmD;~x}g1g!KwQv>gYUW>}Y7i~O(=3DCc_JTfZ+Y=3D6V&
> z9clA{25mG7eid|#4a>`uv+@(t69od;2;P7c5I^J(|IApAmIaKAqhVGd)GXAnR=3D^GT
> zi)r-lk&;zIBJawEhe}=3D3cuF0nIr(0qV#3*+1rcyDiud@aw_;Nh88sBo7WqRrqT{7T
> z<=3DT8*E{~{%Cb9uuwgyS9H7MEe)qjj6r5t{lMdcl&QZfN>^hHG76;*rEecMJ*@1lvW
> z<SVE(YvLoHcXH%kIe4u~t6AQM)+*~OHh(Y?hU{U?N<ENith09c-!=3DfgYvI{$hjzM2
> z<D^z8n@JAHU=3Dvcle5!ViS1UhAV#bhr<U$Z<YZUlgR$9w0Kq^l!BH-|wqkoSZ54Dl@
> z&31T5tMy>%dm+Y9Vrcbi)S}oLJk4Cprp8T`$q8P$IGMiXJb%&Y+e`FU&HHI0<dr~d
> zd^J6+^!o|y=3Df-sa-4&JIaMGHK=3D^C6T*4qxT5ua$n{C-&;Q91s=3De<|5)r@;keboW<1
> zENd&tSIl14aQvefrb2t;$bVh9JGAfAF_^zcc#r~rmuJ(P8$+2$BqTYjYYG##BB$xQ
> zHHt1JiZ5FoQ8ZA0^VfADIc+ejy`;QdB9B4!tdgycit@@w3s=3D6iN~g5qB;+ru21w~`
> z21U2*RouNP1xEhN64{Lvq6fy<6B1!tFcp2yIDgKAlWm!6kLEXhNq;ePZGQnvrC5!U
> zue1=3D3^95Jp9bZb&ob#-JH0u>MF5rp3n2FBw+I!rohNPPQoITV}nlx`jpFU<yV8tWq
> zx1woV>!pC{w0UZYdu8yEUaG6q)7b<kUZia0laeOhFS3%WA~*t(E3*NZ;kLloB^1c5
> zA#KOWJ!u(>$BrLu)_>c3pKf&9$kh-66sNerwjPYATm~o>>0OqY4m&--wtD&d``yp;
> zJAX27?z`{Lv!$)7P8IFhqs>#P2lkdcU1hIMx`d!$LRl5?K6iz_IsvgGz}6P(#)R4V
> z{K9C0Xtm6KiS-gL@q{L-l*h)|Zc9seUNx>9RufM*XBe4@+<&Wh+RUgq^|peEVY8fv
> zEbhradzP~)sK9^m<Wmsn!Z0^tJeb8U#`y<I=3D6||Yi5(3&ON-z5_pU#4mM~9t$h#F8
> z*4}eVDw~_UnS%>7DX9vY4n6_Vj|JL?lWjeNap6J2o1qmB+)lEiK>{)f)s=3D#(6v!9j
> zrJPRUhcy6%g?|rRvvF-~^xjgFsYHs`@tl9v!@q$GHkRLle6;&8&XUyHCcq4F<`*Fz
> zJ^TtH$9cI3ykM&_VK3iS6on4x**-{vxk2=3D?R%GB1{fd<VT|2QsuvN5hqthaiw+QZX
> zNWu1h=3DA7Fas}?OlB@YDzw}AcYKJyAjN!{t)?&ETym4Ey@OB|?hmqygOF$kTEDUMl!
> z*y%NOMk8`8avkUcL&;Ro4_&yFLPkf<8+p{sX7mSTnu*m(V5hOh+|>-0ebVZ|<D7@;
> zj&o^lAp2X$|7Sfq{4nD=3DO-5F~@Sp|ydiNr;lclF^^4Jbohd4A~<(*4qv1<xJ;CR4Z
> zM@89NM1Q}gx=3DKn(LlnNipdrH-p9<KBM3-!H9GsQ7j)c*v8k%Wo-H>puPFbSeA%Zkz
> zd@RBCbvuU2HK=3DFg!mFmA10#2Ua%5GY+cOy6Nk@>bE>t1X>K$T-=3DjpT0m1Td~RbI39
> zlGI$-Ne8(!f_xhxTTdj;!iH7r$9{0I0`BR6ihqurzcO^u+x?y2=3D~1?ir5*>q-1`lM
> zc^y!iIHU{5CE#To!mr5HEu8j5EQAm$-8~hHHuC5X)k(AdR<yeY$uQw$GyAaf7y*P{
> z><Gd(RX14!g~)qCwAdY@EGhHUC3|dPA*;xDuY@spI(&(q)7W6uDCy<&H-$_VjI{|a
> zTYsNhos>Kg80<o(XubjyXr}A<JEgnW+r#pbZH?pTDJQ!2G_CYVoyQnc{^E))l|Zxm
> zx;*>DHC3b+(H+J@ZsNZx;n#UXxcs8PK3*$o5zRKwjhRob?Ws3a&62~*V#~)M!Z$$C
> z$oMaPTnmtTVDhCocz`cr?w#n}lYQ7;G=3DCQONYJ$8ck%O?gAPMkwitU_8`W4&C^!hf
> z=3D`~uSfHBguszRu?<9bAKOYF=3DIW<wHHXpm3v)?`0bQLVdeQLy=3DlZ1<l`{r`c>!*DGe
> zVAXqe^JEQ2-u0CeZ@VFkCwv21)RU>|A?P(7OSj;u>x@bj<g3r#S{cw($(V+Saeqh^
> zdW>(06hx_#y%fwN(_AUr7GV|I0!~BQzr<<L$isE<Bh?01uAYb5!!o&vsvKNSrF`t^
> z?<`a)C+Q=3D8z?Lg{<(;B;!KBO-|4aE()cMh1K-{ESS9KTdeW?2qzh^Gkw?K8=3Du*$-z
> zXHr48v@LJwSaKhl^1uE2+!G(=3Dj(^Psp2j4N12HiI!O2djoOGi&gaxo0hcYj?-!K`T
> zf<*Ih$&4bTC}{nr-KQ=3Dx;OF!r^TEY}db9&T^%GHXO=3DD#sa#)pTDcz|WRHnL-=3Dtkg;
> zLYBUkk_fewC}RW|sm$frz9R~}@}TG=3D4(n2h_8MlL9cm>SutOy!c;4l{{C`blV>M$x
> z^6wpFBgDs0OdHaI=3Dl1h9ByJ+4RynQQDA%2eoIlvFK~bZT(BR;6w#{%nASDZaia2mO
> z5`=3DdlD!%!J!om#o7YoG-!LuEmiB`5iq&>Fn<<Hm>`Uz!%JtL;TXFwZP6b!s?QI^6a
> zfiJF80SRu`&s9_3Zko<v^?!F;BF7mKI<T#(?!p|D%V#MNR8Q`4;A$b#|0XHn)4QLy
> z1d@eY;46UO^}yXcVx~;sV;MU|Xz~E^b!}9GE1{!g+3J)nQMye~71%)uYyd+*yuZ;X
> zQ!W}-_95ATOn?-w2g43Jt#S#DML<!6f9MfF$q;lXe<**xwM|Tx_Ee9riiCgsqYvF5
> zwV&32bq4<36iXK+wz8%lsM)qqpUjxBnW6?QG%L<JC{k^>vLz%dB4dtTI0rF~Vs`xC
> zROVROzLIKff{NZlK0E7?lHsfpJAs-W3$5eCBsxSnb(K<ixi6x1Lz5(L9t9%VUMF$a
> z@v3&MxY4Y*?sSeks857P?T>#-*+VRCQ-H^4Dl}prIB7vuO}pmtRcFX<66WVA+T%;W
> z72in*{?2|vfnQw}?^_M`VzeQ)Oxe45swq)c+~g@F-9@)*#-81zx=3D*tue5M4|&whbn
> z2K0<|XvXQo-N)k)7YyVfJV-39RDc5rXWJbXx8E6gI~^}XFk<wCLvnvw<-uk%L-V)H
> zs+$@e75y2fquLdsF-Fqmsq3EnrLCica}Lh?Hk;LXR1z4qDdBsQk;-CshW%IJaA;zY
> zw1X4FhkFKCXWc*?wXb_{@x&?{ymW<6vRG)ht0c7yH1n23w?6En8g~9YGA^+1axLav
> zGD~ovZDHg|`c|<#C%u39)nNBdhE1bRTo|C2=3Dn;!arsk!dd~M_&75`%^2LD(E64|6|
> zRNeU|<CMViw#j7j5&h@K8;Rf}k=3DqDL){lOlgjrQnG%Ip1!J{(~ez}4S9XP6pD0uzo
> zs~im$14znQK;!ThYt!@nk%Jp&U1i<#e5*6f8LsZlZ%CI1QEY#CFS~M2N_pI4emuk-
> zerQ5KeiRl6xJs*nm>y6^WYOrhCMk`BTuyq|WrhEDu}ak6^Rg*S%T6|lUL+4BgF4MF
> z8;J|J2aeNf6FI+@DXk94w_oN_c4jzm15UGUy=3D5%8fvAL8)9R5Hiu309L#!}ruNm3V
> zZ4!|P*yv9y*&2TyQyo(-4%;B|P-!42$gZpO^vk7j6ab~+G9WVlewo%_5fO*(K()xb
> z9o_w(MOBbd4^p`@K%JPF<@BS(;d^ACYR52oA4{*?QpY6_T?4*!@(9M`=3DlJFzwK(ZP
> z#nKbA)(5>QBgB#9O;pl&d3;LvSa{+6+&ab(_S{17GW37C%q>!8QdcGo;OVHw3TMsf
> z6ETMI(sKMeV`_wLI@7?y{-BztvA$G)F-lcF5RYvI@&5;{bN}U`v;FYZ*p-4KsgumI
> zZ-~as;<d)gWVY}xnJ48|cX#+5*R?extY777+2l)m{1uTROJp2=3Dt`B3E-E)dIsI6g^
> zi(O;nW7vQGG-1Fv+|Xyv8_$Dj7c#c=3DwJ0S#ACXr0G`b4*^bhg6$90?wl<<=3D#wFfK;
> zNeZ|E!dmYiRcj$L*ifhZ^~zgqk`Qju+=3DX=3DYK+|3)gygXEfwm7Ao$0T&SpCDiRxn#l
> zLF|jbn=3DTKdlx5wz{<vopl_dEK0}E9auuY6pmZE<z?0tRGt?UeLS!^WPyNT1Kr|<*b
> z6B$~`i-`qU))9_wQE74k7Ks;KAx+lx1lN29&(o_7D2iZKOA`pRG-sJfu;NGY>TNUo
> zWS;v<)~nTFV5Q+zd#fZ&rGCgQIyrrRPxY}r-LCdOd$HXp;=3DxNC>jswS+Tg@3s&>#A
> z#W8;hLwEYrSK4$7VTeP(OF()3%JM_E_Ta@g6Z}jhCx$qLQ|GdFjZIVg9Vv`-*2}t9
> z+NI{)oDoqiA{RMg=3D>IR>X_9tKo(6ZtDatB;^*vROiK$KQft|G+vmvUB2=3D~5Gc7+iC
> z6NUOWeF%x*BP1E_BrkTYpEe!Fj3qvrD>HxO=3DgZ-6`Ehx9-m0)hF_*3z0xq6uPK_Gz
> z^d&sPE869#CC4Tfq@#=3D(Vo7_f<(HlTGt<@^MCermoUXmME2GCZVE+;qK}>sk+?BP{
> zyi}z;_ySnIUA#AlI}9TJNTP(TagV0`)?3%5sX&&x8<}c{b9opc*P1lr>#cVEVfcRu
> zm)|izKkKT?+ODK>q8dJyE;8J*9+_)FZizmiUuncVPJ?&vu>#BV<utAARD67PemWa>
> zrhu%FGo6@V)=3D&-@c@RH2jTbK=3DXVFOkk+bCKZ#&U5y59TuhGsKk>N=3DyZD7hS&&qo0m
> z$MKGs4r^|@pm+Q?To!MN6FU?e?@WIm@y7zoc!`%E6w&9cq8H*;mIMrhjc`+l*o`8V
> zWy7juhVcntqJ(;q#k}iGaZvY(NOaeS;}Iyn8oFd!Y?R80wisX8!2A^fE_*0vHsvj<
> zk>bI}Kn6xr)C=3DAYwC$CeR&$s$8#IY_kDZJc<vE7-!x8Oo-n4e|n-?hP=3DhA;G<=3D4UB
> zt*^RA4Gu<&<Bh^(<Z^mQRZOlqh@*@cAqj@&bB5iit<8K%V{tR7nbN1G4PB`p3z~If
> z%ND7XWe;JQ<am|c|2pVEMS9ziTzU1&(CgCu@S>VhV4r2_GzCb*LSoD4XT}VSM1!ml
> zY|&9kWFnqvz)zC?|D<KvkCT5U`kv$lckQYq6sHnFKP3B?%?C9BNoVONOGi??tDaeF
> z+xi)*TrqQMb`MFV5FKu%7a0+s1dH&7G!V=3DC_LMvIWpn0QtvX{tebianHd+rfFqVL*
> zU3qn;4Ex~V3^30DTwcMHbmF?YfmvUVQ`P8+H!v05TxQf@5a2s+{+559c^NlJMN5R^
> zbGgWRLxUaQ6S_wxbpiS62DcC>WTwFt0rUIyslAkHO~XO^*&HUXqW>z~i?J#iUV~CA
> z$BBsRDz3G}@#d`3)m!vNgF11p#$E)v)A|1Fhgp;4&beck@x72qI*(XSKl-gGQyPX@
> z1fsw9AlS9EExqhUO#^?oTFSKmR$C(XMo{{O09E4r_MTG{DtmdV*vE(g-NT-q8ubKM
> zLwE%3_4Fov`O<yO07&;}`LG5F>SQ(bm7q0jpT%TRM&b51pz|iI!X3{WhrT4vgdyro
> z34Do&Kbf@>|6^M1ld2p1#R$Hxq>6H9hlGkqPeQUI^*}^MD+GT&@QNiEt!su%&j|`M
> z+G|_0;*-jPBha%DjQdNhu)wWzLp{F=3D#QaTD5qk-#;=3Dc4Psj9HB&ikF2yXiT=3DJ3Kfw
> zF|F_8;P+ytvPJe!svt>^E*iJc4a`N3eydVh#!2-cr_qi1HiIi4o@Bn(^MWY-=3Dcv5R
> zsH!V}oIdpnEdPHOXT?s;u_n6AuBeKhZ<h@c$M1mdi=3D7M}NghH;^OKshRV>W4&bq_Y
> zJ2&R;WBFR;o^)3n(awx8%!U6j<$|sVR2WU!yw=3D>ovlSpXB+kg&%^fy5i1L%Pz8lf0
> z!aK<;ykkWOUf-Jan`h2debddEJt^sz5qpeq^1k}El=3D^>o)TDluFuZFVSbn5^$K@wa
> zTYwF2DDhb3guD5|Vd17KWBivxuYlqQCnIm6?uuARD>SX>X<Nw`SChC!c5?+wbWzC}
> zzy84Iu(x#<-<Ag8-F*0nV6^)H5+<0)qMjy}NmjbC{Y?zS97oC?7Sufy7P~5&2(;h2
> z^#BL>TZw<=3DJi{cd%akc-qyw*F0+aC}#J5a7gw!1^_4HH}vir$UjxHB=3D7ZDdpAQg3P
> z(~abjEou%iwT6EO-xMaYZ9q&H0+1%Cyno;E9=3D!8$l>|0H6~1Ot{qG}x=3D4=3DnS^}VP7
> zit&5>Xyo-IFJbUq)&rUE=3D?;n|nx*&6bcEH$9shstdW}Q+MVQPSkpk~ZK$8K6580PW
> zG$_&wA6L2<Y~OexX}jTODbpDbXk@z5-XWG%U*{_R9h^!gk#<&9=3DxE7O<O8I1^}23C
> zc7o58>u_plbqg)^PF>cH?;W6lY3)a%QRQyd+Bt6#*#HXt@DrS9VbkS>Zo5rJxz}K?
> z*DZgs_ENi=3DFgxg5<?s!v-7zt1Dq1g~_}Y!m`|E@i7Wry)hlZ5Q_*B{VYS71Ln_oW6
> z_Gyy5fjid#r}+P_3v`GHqJ`CIqgi`ND(2kZz}m$FZm@ix!C7kww!y#P(3&^-Qq%gt
> zrB=3Dv5Z<Q@CwWXXW5t(Gt26lbSV^#kRCJKM^NLwkllbtyc3|La;dgCv+a&}7*PElJL
> zFARhM+h~!mUk);%_}lH8`@c-iYAiR<#&)h{hUu<vYT4slWJ>61WKv{dGu-ZHRRseI
> zuHvdwnJ6P8q#+_qo|OJuC)N_bom|3I&m^J^ru(cu9Tp+zbksR&$yA@;HT1!xdm(=3Di
> z*-IRRvGaD{--@4)cA{2}t#$+Wk<PD-d`UxZMdN!mZeSvY;kBJWGDjUC2uSBr;FIg=3D
> zec+Y+z*}(diXUvcf$;aZK9RjfqbrhD*ESNN@k+vC|BPg|*X0>=3D|Mfpx;>jwb@Ed~1
> zOyNGw(31f;PF6GYutcMMk=3D@^Np5K3EqN*q6XulxisSQuKWGUgCiM*Y8Yzc+cN<Qh9
> zRP`c--5Au^>j_BY+_K2Eg!`df5$o!E2yUQ7?U<gHP#x5#lJV)2ld9W;rbFSr;O;I6
> zkJO?0x;g3F`L9x#8k6OFp$w2PE^g0hm8&faZg~-ETlj?8V#(xZNf*2AO;>-dcN}lq
> zIyBM0YS11g>}VZ&6<>{2sw7#};H+Ty<$TLVVn_~3#fXmrggiMFMDR?D#_!S0L@P$e
> z#02bMUW>^F2G>F|pf%G6XD#eQOBF`CGpF-r*=3D2km0H0N_Jc%Gplj>>%N39n!{QL!i
> zu}pNS`;mIqKNkR|SqWYikQ#q9@yiK?Yt<*BBCe1ac?AUb10Dz{xwQ0DQCwF!2RWje
> zPL_1(W9(C_Stt}~U(y8iS&mGfsBlHvK-EsFN!YLSG~2s~(d!l3Ey(;OyrkOgx-Z?u
> zI)34hxaFWLA-ben7Fg|!WCuqa(_DkQw_doXJ@XE{HIWmff8QB9`PP3~KO0S+HGK{y
> zD&G*-rYpT}j~PDCWdqQkI|*+;)(&?*<pzDm#(`fClhsqyEa9e?s%&o|OhnY2Z3<~;
> z9#S0xE|+%p^SDHrbl>9Sdw~pVPnvT?<-m!pM*vO#QW%ti8>L;R019$Q{N5Ttnnmwj
> z&gUKw*9UEmDs#vKV}gH}VYVk4mA}0Z{wHPbxpTNk3Q>o+4HASYOi$aV$;3&<lZ?!C
> zC<yv;YC-(6pAzS2s26Y5r8Y^;E$gyUEOCzYd=3D$+SsL^4l$*vIu!kC&}@Ktg0|EO4X
> z{~YROJ)XQmi6}&_%bzl^O#!2YW>tDuLTEG``#IA(c$VrH!_|MMTob0`p|qRHDaVlP
> z;K1ea7@Dex4-RwyFIR`vYq{j@Lj1U&$RP$xB5_(eM!p0fzV;Xf8`8~fN;VDLLLDa(
> z$K<28OGT{IMQia&x#3*)C%4J+n{7@+AgyqWw`pFBLA61#a9=3Dx;<@X)H5WElqy5dGd
> zvi1lwG#k`*4hw(dL-9hno2s&{xx#h*FaJC8Ded7U%Aca~l2v~JiOJQ!;3E1KlSsgu
> zo_=3Dzbzku<H3Fmxo+Bz{VNMZp+q%;6z@G46CE#y??Iowu9S)TV;yz*=3D-d)=3DRaBA+G8
> z4qnbld{GeF#Pp)p=3Dw)hS78%I*!|i?`=3DXobCf4j@rlGA_c?;}E^btI~1-p@w+G?DDl
> zWe%vSuI@>z5+KEOv=3D9e}W&)hy!`WJ!P)94)8+Oazh2wxPjq-}NYK?+gE9r?8l-mO5
> z?pWG>qO8fDgr1;VF>#tYsd1@k0_*|Ta|Hb3Df>fB6cEdZZwyX&F`!C>p1<0*G#|#$
> zi7;5`aJ7G@TzqMM8Sk|nMyXYycO6lMnfUPRFt=3D#)XGF0W(MEjHIgk#D;Izzy+8;e2
> z_$F(ki{WhU-srhK)+l%brOvKedufKNH}?bKp%Ber7p<CiYKl{8sGXjt+<v7niP!@e
> zZ<L6voFi(QnHDf1sM>BEqNJa!)c^K)WR)KD5-NWuv@yJd=3D4=3D~3;@=3DeoC~VbL*Ja6#
> z@zV0!`6Um<bPFM7d)Hkg14b2*9AuL05@mlx#A4%HI)o8%mOL3H<s&MmV-QN*ivhvc
> zfSnb+5wa0x5Vv_1KIfwUz0gSb)E+1Z-bg$j305uIU)e1Ze*xU>aj;E=3DAF|HyPte?Q
> zs6l_&hztS)tdcd5aVdG%@}v_@6@uE{@W@<yxDT2`^@C7wkYtRP-S`pSGZ-3czuht-
> z1o$APUYi`o--ZSA8QUdQ%^u2x{ij@6gLtE{F%GBdb+X+CzXd#A9+5hq6pNWGr-YAf
> z(bM%NA|oq@getEScU=3D18ebkQ;<8L<z@mGH`Io9R0=3DY&n7YN-g-o{lE$X6VvmynzBI
> zGuhCF2Hp@A06yaE6=3Dk65U*zuS3v4b~dq&fRP}<)r_BRizVO?7ui8!F~SfbOoxS#S{
> z1{KFGq8=3D}NZk=3D{z5F5;%6o5sErcZt|W5~}w(K8;5($<gMG{o#VRtr8U902NZPwRg>
> zNiNb`V3*><Vt(DKzvwAsDy9-bGQLxEu6`a^aw~ua<D_Ou0_2sta!PnPXm5leWTxF`
> za|fz?ft^<&pgkN|KSxH{^jS_t!{MN%-gHq75_DL-yB2ETo*fW>C@yEzxn?&@u_)It
> zXrKdYx7vbNVs3O8o`jstF#$&a51fCiZ=3DhJ4*hE8KVor#CiA|`JeFzAyzh3fzYdd)_
> zlI(dne(*GsEBI6~NN3lW%E(WA@Fi7qBVeWTQ}qs6qk^MhM||yfCaS*XZ`L6mugJtP
> zO~TKMDr6r!w&K>U5#*(!#7?~;jFQlBhoFfEb;eULJ#_$<K<dSQgrsqC7sh|YCbGRW
> zmcT$vs@h3NTx@yoYSAPX+;5gVQ`b6Lja_9e7`aA<5++%H;(#e7VJ$6Y23#G;epo}S
> z74@1S)S7%Pm)0a~V>%w=3DErASu@WJC&OJC0U$z_Z3jVxI$IL9#>glu#i<WmzRpq*qt
> z1YH8O^-X(Q?foKRAWxI$_2z#hI7xbNc<3?1pSmFy3RxI;;q{>JTHl@elOc>F0~%H`
> zgcuL305~+HC!Xfc{ZyZ-#d9KuA>WQoUYvQ;4!i+rg-L7GyQrNWP>8ByYFz^?daqbK
> zCkGH*lEx9mya&%$ik4-O{m+$nI;MHRw~5Ha3a`G%B?2EQ%ct(GUO0a%p=3D^$MAyFvZ
> zB~09#m)5Wq0ToNSu3o8W1PZp=3D7(XDZn|aZ|^$aiy721NIg$}5YJJ6f+B%d<(vqU7!
> zlOP5Jqe^porS4_a9fN)_8jms6P6h2?YZ)a~YX7nc#G6SwzVn0!*Iq`9^-+Xiq$lX&
> zEcq#We;w7Fq5z*$1si{>D7$i7fOpDFvXmdZ7|h<QC<0*1S4kunI5he8y-PKyxMnQA
> zK>O**3J5jnRlfF2nlROH79W77w>8}QD(%yRz*53Nnq%5pH1E1>KvAp~F<e^HW+&Om
> zty>ZY`W=3D7kPN7FKbNSq!lw)tE-EaBmLq5=3DJ%qfa94*hrsw`zYi3M>5P<nFpatL~i>
> z=3DI^HnggWl~XOS{b?^CwmpV4@hYta}7+yLqO=3D1!jU^JYK=3DnDxOOC4VKZ2-dR&dk>L4
> z00wq0(M}32yJ<{nLX>eR^5pws3i7%yN<y`8D=3D<e`5Ug1pb7aDevzyMa#p*fFzeRUa
> zP}7sAxMh1(CFy?>cRQE^*fKw*5K2=3Dn?&l0($*`*3@&e+)>&h3XK+>I8O4&bG-@F+w
> z=3D#p9fEGQtL+{?y$&|M`);KqeuTmt@l)ihPd2-d#<P8%i0w8=3D7*>=3D^)ze&OGPB@J;b
> z3!T<+Y%1jT4TJAlkAWz9!N}VFCbRtZA{+AOA){jQyG?(+rc_FM!`@}^or=3D3xYJxP;
> za34!%kmC+jy(fvte<o&W#&uv)93<ZF9R^#wKLS%rI4=3DT7gD5Tyf8Ig#SjKxyXgr)H
> z<>I!bYZV@tLFXs0^p05A*;#(px@Rz{Zp^aJl}{F(Wc>!s-2~HIbXc8oTb&8myiF81
> z@?LZMNFaZdk}Af%fCe~u+#X3H)yqjD+ldBpm@`5>)RsY8oYp_1!CtkSx0~$KOT@bK
> z!{L7Xn6<a`>|cn4RnCKb(1&CJq&w;2q-50ZMG0Z7!Dzl%Sg?-);-8M7u$O+dB6<<@
> z#=3DcZe@-1=3DYdN~y=3D=3D<-HLe24ae*?v?JZ~FaGPiucf`xt=3DFD7SRLnzJ#05e|;3oP=
r$#
> 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
i
> zg{*GJ<vPi>bd=3D*%8^c4AEdu$i+KyyaG-H{?WK5yvT*vW&2=3Dk&_Bf$*`y}?x<{5m8=3D
> zV+Bs;sQaoJNdz>Wo@DT$tN#%i>7)?Mv%kjYG!(b%kToW~5mj;-8G>x^)PL^B%Ew?%
> zq#Ia&HqOF(*>hdtr^+6Ex8Wl+D6&nG!CgXV=3D(b4SCq!L=3DDNfD$S7=3Do;q%{N<uX;o9
> zDFA{it0>Y$av7c1uQ@u}7z@blqQ=3D-erjv8Yqmx()bO(P5CV?pS?BA*M(rzLEOaa7?
> zzgW_s73b3pbSt>G@C}KFc(Sos^r6}mMB_w%3e^*fa+r8za_OpN2rYKQ)t3Qd7=3D%qH
> zETqcN+>F{Nxa+Z?X1TupqDc=3Db1Z{K~asUg}ZO>WwF=3Dr$I6Bsoss*i|-89j`&(6;8p
> z@x~=3D#_;II*W8_RyAwey>hpvjk%KrZ-k^f1xbIv(nm4u|69Rd;z?YMZE0@g4LtcB8l
> z)1{j8VAFcHvXG>;q=3D3K(-+%r1(G*K2QE?4)Uko7g@_spCZ}p>PVCU^|w&UI#K}Dv>
> zQD24FDhTRU8wm(!w3qfoO?o=3D@AfaGKKh4Hn!7R=3DI@bw!&gC2~E2RrB&Zk>c948y|>
> z9L~UAq+F0j-c_M=3DiEYOCRWAjH{pHht#%;U4`5{@=3D_}O95xRfYx=3DUCE@H4|*a68W}A
> zL6m}hUE91X7+j#1`J$%ice0gmu(VVf$3gEnk*X*`O*amjX=3D~@xjLiD^p17Lv9v2Ku
> z9=3D~4p(C@i3EJ2%FVCJbap^f)uIzd_^SN(e=3DPdXkSbeC0cC@s~-fd!}7Bdu+J9xV<F
> zhkx9CTSJ^`=3D-3N;wyMt1z=3DY$lkU~>@A!lbgi_3A(HBmBTaIVfXkMFGJ9me<l^-H^z
> z3YBR_ZIA9HZg%TCtN^q)#go`-iU8CmRbg|pnA=3D?4K@ez|b-R&1{^Ib6YMGK{eRa@z
> zJycNo7a{mb9XN|!eyt#eey*^8Apbo3x5(1Sv+ZQf2?9q0mD1m1XMcMyA1-<_y2jog
> zN8(jC{*(l9*W{6VeT`W>e7$1C@6LX;))RzFGc3LN?*lkBUQik8J!3~$E1y$^7vFL+
> z`*Ob6_0R67&CjA)G6c4G-A;s|sff$2DaS=3D&pTitm4UHGn9uK;Ff<Rz@_XfZ%{}&-!
> z8H2zrMgzz${G`c(VhOH-dB$4f#RA8Z&inC;#(a~PZ~s{}gss>H65yyqM~;3}I`8cL
> z%+u<z1oeLHYmiuN8-)D}KvbT%gE=3DL(D@bOhU>U#l1xznXdO+e9MIJb#l9Xi3<7Jun
> zSlufQ5gL$1SYq3r8wTQka2BYdOh9W%y6UW4(^oQH8fz=3D>!XtSL?rC$d&;t?9N#Mbm
> z^xqx(%yxODZ3H-v7z_ZtyR0^(1uSY8bW*+dd~dmWF*$SF1R%|${#ZWlo1cUiz?zh|
> z=3D&gfobl!yXib_+?Lc8sBpKfgJ^tT152qFv!g06{j?6Qf#<e)@<`5SC4iBB&tXZ1l8
> zVt5vtF;!D;2MY!x{rS+sCEw;f6lkTFLu{qKbshrGD^*w^QU9O32#}+~H*v;%9Syoh
> zFTl(P$Bd!1w|{v3eA)#zOT##BvUcE@u=3DoOw6A!J6FAS*(e_w3}^F09vKUAa*SHmty
> zS4e0Z=3D1w^$4PHTi9TOlH_m00{Z~G7f%@Ly-;M5i=3DJ~H^Cx=3D0=3DzmxJ0`;DC6oOyI%=
L
> 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
}
> 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
=3D
> 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
-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
g
> zx#ysx&NTPP)4t11##J68${UD8Y=3DLkP%O+h&%AOWeJ07u|31VW%jj8E05fJM{dE}*{
> znHL5jMHvS=3D!|g0r^K(?6_7B^Mbpo=3D~e7bP)8gkC)aRrCd`rlH}^Loa{I6MX1<02@!
> z?POX4zMFq{oh4L~sQFLccA4Bb2ox0pagHNxDzUo0g0oz1DA#?;q(eYP+xk@&SRitL
> zNsAwWJX1~Df-S}%AfLTV6-IfGF#5Vd%b#xaFwp5vxqBEOQt@nGk;NZ*s34a=3DY}URx
> z->Bx3=3De|Lk61+|%u11LGCW~J>5RkdBWvG=3D-<iLOJZ?c?9oLxWGzAZOSN=3DuAqROWI(
> z<^jl8<0QoF$B<rJZNIhfI5UW&T9c6BBY+U_n=3DFXGVi#0}pGIiqc@VT))huVW1Zy2f
> z$8@3p%(iunyUprga81DUWSwQ#jTa9v%T&sGI`++DQ$m5(B%yvHA=3D;!cNKccQ^)`DZ
> z+_ispzV6Pxq(M)IZGIxeSB4&=3Drj!|O%?5~i&Rl07d3<b#BKn(}skT*BVl13;$c3=3DR
> z29@x;W-otA$38UB#0=3D3R9t8FYs%JzcrI$TvCi(t+4#2q8vDlXtaA36Jay5?0R+g`*
> zF>v;{srmB&JYy!qyfJqvENtuDa#6f@F<*Zw+fS=3DTs9Z{LuHZz?7fMu#<w~UcNWYN+
> z)$^`ku2<MLwv?x^FVODF<UgPe9Rl6uyNb91?wyp}(`pAD8-`(AYv#neZV=3DT%kR3nT
> z(#!A>z%Jy^Yp7!I8c&rMDAQ+-s2fw`lv@U~Cu`%Y2;<%4rC!xVv<GEh>ETZUbFP0-
> zyh?9|L$k8wRz@UAR{a@`y)gOb%`+jTLR@6U88<2yS%}#p0;6CLJ7k`7eo7won6|xw
> z0Efo0Kk-6?$N~g^$?QYzrGOJx{|{0yY7AMi_2LaOyz4eMO*}a9&!(ltpmjB<Z2P9k
> zM(bU3HURjnz-RbuK7zc)4(+M(n}dI;3o(^+?~2c}6i>T1n;}7ILYI@~Kff%$!FrsQ
> zxCFGiKgvf8?89Y9-vPsD6!=3D0U%N{?!EPBTDcv5yeh_EN1_TXFVI0@qt+AC%5hvj29
> zbA9_1#wlM_repE{FYOGiIx@{9w(~^%c>B##=3Dwg}@2eAC{%nsARA?1X>?xufsB^teA
> z<5XB^oTmGiIW`qmQQ|4aa2^opAZ!NRW8@IJtV9DBT|zT`T`GF<SdyQ)Rpc4n0$FPK
> znI+dPz^A*`Z&6Ls;;Ai%7+AjqhX(7m20T=3DOzf7qz)pl+mH=3DBIFlvK9z$P!#U2<{J)
> zZ}>|-P1&=3Dl`M$28i|nx?iJ^ZwuHsRERz@87HTU}K)=3DVSb8_44}L;>BI*o@yilIdSH
> zdP4Y^8a#dOcf>|tjew>>I8(4DY6^ZhgloIGDApTG&LE}Ii)-ixPX6BaOWwUrX4T(K
> zvpOX^t8`mqTq4q2m?iue5si$hR?-1hsG~2NN?Z@*ItpuL9!68#m5G1TKz3(`Z)M+w
> z{w#yPnbBpXc#uqK+lPuZVcd%7IcV@LC48lzh$@b<Ay}ZfBy+FSr8E;2Dx!)n`6X5g
> z=3D5VJ_SN)v<nHjSFM#lcwR{r~}C65aQ0*mWPZDUG>_zUvapS0*TBf%2Oc_)8}R*fL1
> zau=3DWS*jwbLkl?91_~w7*?Zi^YS>t+LyT9YwO&g{kI+5jbz%3ad;q}#dZ~A`IDBLdf
> z6x=3DB0Tz}Ih0yHOnZw-kgZ?X|?{;xY>v$PAr5E+lO$+yK5_uU})tGk^GEonfWdp!tC
> zeMm-!KLQHF`4F>RXF#rbS(Bc>6jxHQ4FV8s*c7WIg#G+!I5&S8Tyi(=3Di|a8##S0C~
> zks7^#5xJ!iS~=3Dm)L!xxN*nSU<Gx9b70#$;5W3d2cTUWYMq@%HD*Ru)vaMg|CyR2a(
> zC~EIpl=3D+*`8RdT&z>_Uvp1PACE02Ic_Cm-CaxTpDtcB^@rHtS%ZTctxl&!FMht^{>
> zg`cT+Atmxlki36h(MR<?s)ZMr)6q?pik65JkZ^CfGJ&Wz4H0e;-A!T2VaPZ{4w>j^
> zqof%hcUig@S|2V<?7LW?rECb^{PlG#1P8pFZtQ*}#Qp!b?tQhQUu#m|?e%3xIlLbb
> z^@a0$QK7>wA<z>Ld1h%st*hPqk_ChZKS?O|WImQSvc7-y)Qe}wmVlKNC0E$J7&{NV
> zWM*<=3D3sK(7DJyonAz>~LbIF=3Dg^Juvoabhp~&Tt1)tK^cj^PU;8d5twKqbh`emgu07
> z%8ecy1gZ9}v4;b9&j4%)X)gI9?F`d(U;NsL=3DQ)hpZzmAOP&gj^j;Nb8-pG5$Z#yD8
> zNiolKM_GTy$n*MSFL8!CT<bE-NJKKCW+wCRtB4R!w>1I_pv&DcgFdZKhBPJ&LssV>
> zK73Ia```w9$7>lqvU$35#kqkHIa)!Zv9F0AqHX-Kx>j6!+o}*#k>ki#=3D=3D0-(j`8Fw
> z814%hp1r7r6HsjjfrcD09jYxy>A3P}vC2wsh!=3DmT+>B0t(Sb|%bxO;n%+MMp^2Fz0
> zAzWM-Q&GM6%FV}fZcMvX-e_GTgbIu^%^KnEdQ!%?<)#W!CQ_T~9@e9qoJ`Ywxk{NF
> z;dW^_3AH7t%$$v)bFwAN_eFd<2q$W!MEe}xMLTVRlZk1qwfuMNP~$S*{pC1rJ&b;X
> zEpdMrI<$n3U>)wHVP29+x$BgQ?51sZRj${V6M`-g6ph)ycxFTw`cUBhT0laMu@4Yu
> z*^qz+p#HWZo`@|z1xZ$M^D-Txf^KUa`MD|)u4G|tl5sU<P`nM`*BT!`>R9v69z03!
> z>yF=3DgTLovEE%#^zZZ256Z>dLb33$30OVfYy!BtLO?9uzw<CrAPO&T{6nQ3~D1h<8j
> zSxSQVQEbYlXS?bo!B6kO3d#d+@*HP?L=3DA^G*kZ~^NoPT4+`NZBgQpeWA=3DQ%6PYooN
> zbDpS!-FQ~<wF>2U@W0d^hRHm=3DF^!bfqWeB8-mw%JV>7+T1XoH#KOb$Ndvo(LeLH^(
> zkpx#wUr<d=3Dl5greWCxHdee7UoeTH9}N1X+{`3nHv9xr*;)R{B;f|SW*DUkajtLTU|
> zE;O_OBfSnuE!3iq>Bs)nyu)Z<+f8c1N9S#9S9@VrCpJ_L5vK7PK2%#&xOswgb1a2%
> z?y6P=3DHJOM7c4p>@WuHW>`v6oI^-zBV;W9BJJ9b{1qVO55d*!r0EW!$vH;uOjYoY6Q
> zbJM2MwwC=3DWuReO3`i!Wi+=3DMuQBla4`-d0@p5S+}Zkd7MkdQ4+6(t;d|NM$OF)M9=3DL
> zBak9H?)cYX7BzYG%n)OSR(va>m4~v50@M5nX-_Xi5*)(ubbvvX7QE2R<ZXX$0*pe;
> zYP*C^aYT!5#l&*Y<e7ImMK%S9`Ll0dS#=3DMgau|f{Eqv4`Zdo3M{vB4{q?gho721SY
> z53a4?LYl9WERoS74;gZmbp_Tb3Q6Mwr+x;JH?8`GmDjieQ~vkXJBrE@T+BA|sIRha
> zHOi46m5c6KR~6{}xqvPyQ-6O6CMu5ILA3D`u^op2&(RG2inE{D?o~ez_fX7FpZ;(-
> zKxs7H8v>n^v0`8uh%u^*LkaUF#n6X#>l(u!ohEdW)fBKBPiTlyn1svt^xj~b;9$0%
> zLC}YNwEhUX2G5ypvSNeDy){gY>*Sh#_!IIJqm{~8G^1|+Xio+^E~9__bnOE(wOG$X
> zFYPgy0|r7(F<9ZUj(mri7#}9){_q>|`fv3FrBySZXwuZ*8D59%LnIN1IswvcEZkHJ
> z`UnaH6Y6|u?%$k^q8eJU7MV%$|E7XEe|u<3gs603KC$XAPnE+3v=3DcIf$Y+mh)As{B
> zOdSJ`wqaP0I(qbEFiw9NHOpw=3DV64?P;{Rwq*v)tjK(o@EbWHx>|9gg7mk^lN+{jz9
> zGkYR@rXsS8#-au1cMgAuAYOM93E{}oR10Ss({SIWtVBrIE|~&Mee-=3DLUPkwL`9q+b
> zKD|-0ppXf|@&@MBGo^mf&naSqCwtyU0i#v`^kR8AQcMrA1wwziA?|~i@Y4O6F>_-~
> zi~kKKhKYZhw_z-kDc0K4sF1crYrg&WXbch;q6^)rt&6gMRV`geIyC64nnqa78)~h1
> z((>er0F%0jEik})?YI)=3D6M$oS83q@(U)+P#s*7l-pE*I&IZv=3D~O;+=3D_*f`FSS>=3D|=
u
> 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
<
> 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
m
> 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
@
> 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%0A%v>f2K;;*SGd~TNu!S^90sJINIBu
> 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
{
> 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
k
> z-wBb@Esjn>A?MqJ)~M-6<H%=3DCR$PytN)?KTsx(b&bHQ#wxCUqV@7!E&7+0ygH(B)3
> z$c_`)>Y1auQ9s&*AVuKIE=3DzhhOx13Qfl=3DugW_xuAe^yC5I%bFq(@j~0K$~Uum=3D)<t
> z(H1CK8~Y*~$#<;GFO_H(j@AQ)%9iP5;2M4dr#k$|{H2*MFOUf=3DH=3DfG!?G?;B+|9&P
> z0Cy_utlzCy%NRJ@cmV0U9P8E%2)CKu`t#~Jof%Z?fAkGTrEe-=3DCgl1`W2^7qp@Ue#
> zVLz)_f9h-1;LMo~=3DxNC%nB<Mo0?C^~Xl6yOs7+Ja)}Az0PnEm=3Dj5k;0diGK59uN`6
> zOjei&Bv>Hl^th%|UBV<QdfH$y;r;U33)a2$VcX&c!!1!Y$V4?ZU_f5CRGFxXi|$lQ
> zhQX}6KsRE1YJk><1;Qn#G>lOXFH^^{`{Cldf4t5*xO~Kpo@*@dQnOd8wA=3D+8L47_K
> zMKpuxl4O)6-5f$twWWlDwdkQi-~}ZZF)btOO{NHJAQz8YfQAkbT0g+c$P)-mG@^yW
> z^p1@DKK_@fX3#-;>C-MtD8JBlvF0oN5L-I9JAzA(Rm>UR6P-6>iE~bv&bqSqmbe;q
> ze?zhr-ij!TZg`36<3qZ8)GPb%Xf8^niq#rlH59&cH#0(Rl(`j;H?RFs!sBsn&HWUw
> zDcKj|DGOKQM2DgR<C~n=3Dm%pLZkR?0C8?}(bTa$Lp31Wy}>+1Uk3OYDX2VjUW;`@oN
> zQ(_h*ao*8cFptZL4d%ZKp4{*^C&awbf0ObRzYSKS`vsiKFf5YgbwdKif+utI^?y$Z
> zeR~^1yDJ=3DvgX)zOp*=3Dh6B6rK7N#R03i=3DXk#E;sLe4PrO26J=3DtdIwG-lKby;rHSpS=
R
> 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
i
> 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
x
> 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
^
> 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
h
> z-+u&hFsv&&2iz|lTxe`1+z{^D&(C7!T<m>Rs)oCna`LFezK}Ulmg$;hG0AMqo~@^P
> zw}>K;<<UP&6U<~VU>1<1cubG6w6s~F%8X5@M?|7RPern`4ymflHG{$mQ6O$h-Pk-t
> z{3ddXu2OW{%-{3XvKY`Bz31GG<~WVwC4VGOM<ucoxU7PH-j$kLMz$yjJobU_$dsM6
> z{D5II7(N71Rg<G^yoJs!LiUW{uzJLCoWf1ZPCJ+)cmCU57cti>=3D1{aE5Zj5L^>=3Dmi
> zZ2HKIv=3DE`zdXK<z>zy+7>lpAoFNN6ewX1LuMnPdDBO0U*J7N#S+ILIOR(i0FPJhpY
> z;-kQn3a0UOTYUkFnu6;|ygkFys@xM|<9=3DzGnZIjxRq|=3DagAtN7Zi2}&d|_08y7~`R
> z#?Gdo#WS{*?I}f6H6c2Q*8&=3D#P8cosN!t)X0I?U`$6GPIAwtsY$=3Dv4WF@61$Ow!^+
> zgw}nu&}Id~Vs3&P&qJ>ess-r~e}5S|zWba!`8wJ?a9VuJd`KjkfNT=3DOTB_s&lWjrX
> z`qmbZwVtB2+DIqiUsO*H@W;qHo|Wd_By_2yU=3DkTqe}f+f|EV(PS3E?=3D;4XmChqGm=3D
> zAc7$nFna20I9Fyyw-*iz3iuccH|{)^I}T%sW^!G#TIZm;ME@Xrk#r`q@_$+MW}<%#
> zDX28`Xq9~=3D&QLQy+fMm-=3Dj5j_%EXrdg6>PMX9xmvwpJs;gDVNUhcVEqz>SmLnC6Y{
> zp_^K<vK~`&XC`DEEN<A=3DfO&vk_b%i}GE-m%^J39|LJ`}Vt5yZ}nk*=3D2!=3DssZ=3Dkn)=
P
> z?=3Dz94brdX$b!lctculj~zkeb*7NAQ~FSZ-hu75_8fzEtdJ3IUHVqsGu)`+4xdu5TB
> zbCBE15nh&TU{>VOrGX;=3Dp3J%$qUQBS7IyAraz9x3@rlg6P+|;Wk?N1RPW^45XenS?
> zebU&Nm%I3qm95f77I=3D)_0a1}yIPkfry++*JNapxS-wum_BT15bsDF5z2axOxyi2Uq
> z8zmd(_g&A-*x3WbF{}$}wv{=3D1ptdEFW-}-q$CW21KfHwjU@Em1(t|rceiiqN9gGt1
> z=3DB=3DWbICg-_e&ytjZdGsk-}oUY0uZMMV_6G4jPBC$l1-2g4P57e2&3w$6JB=3D&o6ce@
> z;5{gW<Lt4rW+G#ye}583^W=3DbrKumr(>oOY`S8Lpm^v3f{Wf=3Dqh88gnF?^t#4AHNRH
> z`u=3DT=3D1{IdpZ&6q#<kvJ2#kfk;tT^}@JIACoW#WvtBm#ILSVniv5m27DOEf$aqTV^+
> z;ky#*Y~!z$c%mPs*}VvEliBx@4_0$37Hy9idcvGH7SwWKcz=3DgPZOhmRD6s7G-%}y%
> z0Ak<W2K^AY9OKh&Gr3A*v37Gn8(oiHhj}jlkdX*-*D9s@a$``(47VyXjeXia%<6AJ
> z%SK~i_iV1sB}bs!z})*`fjicBN5?8xr8~jiD%#|{D&XHn8~*hevun6U+xcWIx>4lM
> zAf3*B5uS&?#ecy<Hc)i}ya;@{dh@>c$dZVWMQ+Brj<Cm73Vl!C^GQ2vTS!D}Opp~;
> zWab_;_IkhQV4=3Dw4d-k&#zvc2UvRnm}@NJF+2g*Ak`ki%o#XnY0Ik6sRnxjTd7&FLZ
> zyysSbpS4N8DF4?Z<-FqAnM_oF!Gu{Jf8f?^w4ewTE`L?QKJfERI0@bU9j6tQpUx~K
> zTY&xw?=3DqAtKFE)R{>2vt7Ng~eHDh{jGXFQEurT*j223*)<6MMu%-K!d45-0voKGj-
> z7hjVmW{kNoXUk2X5g7H8Jlp82Zz}chyJN`H#i*_F^)wEjaR=3D2D)*x^|W0QM<kW)9J
> zF9ZheihrGT=3DG~7<Z^iL;yb<S^Ph&t?iq@)=3DG<OFX<yj++T|th=3D=3D2)uKR#p?rJTI?=
K
> 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
k
> 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
S
> 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
t
> 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
Z;$
> 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
%
> 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
W
> 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
)
> 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
(
> z;uTF?1nP3$-prt&w|RyuWc_equ`I;!vsay-t%Mz0?oGg*u<^=3DX7JoqS?c@cZfH&oR
> z<F70!P2bPG2@h|RIjL%8V#|X3&J=3D*leAp|KJNi*4nA6@Y{Rh;oVPPbBpy|dd+lX^I
> z@Mg$>1GLVAKO`_boTE3gv}kYM=3DY}>JsR)!MdVaXTq6>j$$}-{PxrN4im9pb3JfT7C
> zQGi87cPS`huKm`TOn)432Zp9hOEMy@x2p5Eq0lgJ*M{Deo7*;3@JXmU*(Qdg_<jq(
> z$`nhB6}S>(Ri?}6uiaZ!6I?R*1b>>krN~mAvMX21uN|bY*rVSdi$aU8HYmX(kHh|m
> zyzQ(B4m>=3DM6I3wGX6UsTlYl82KXIR6q!o$_UOSynF8^dBt$*B_x?As|eO-+QfXz~%
> zU7~UYkOxWD;e3aU3Li`;dK{i-q13d@HKwqxTLdOfcsBxl!mbSO%L7_u1Xl@m3Ybs7
> z-Rh~zl2P92l23j-GppA^QxjhxN4RrZLoLQ#G;l^eJ{23pZG73QDx&X?&B#O^ToRmr
> zb3fkNTIaG_{C^Q;Fv>>)>o!(>8GHq(AilORGCvXPw8Q*gj4?V(QO~lQ^;iJ&lxGRW
> zo%g7NRN^Hlt)M#-vo|bFDayf2t&P3@S9il6dURPSECYStN~dVvpIZV~0EEPi>I_%9
> z+uJ#J%YOqiGO9HEFC{*A0RFFF_tGTK&wt&&_BWdamVc;8h5!@r`YoC-usf&o&R*K)
> z6#0>Cu8;8xLQ73i<oOzJ29z7iIh{VyiFRPY4?5E#Sa{w?UQaFW36scTxQr=3DWgmsx!
> zv^eW~%5Wv|THsBi?fEDt6UR8jcIz=3De-geE*uJ9i2HVhqfHi(zNPeAoX+p`^_z6jR_
> z!&1y7Du0Ycs2Q;ev8$qbiQnh^MHpdH*X5de9`!pO#Gwo)s?R*Nb-9PZQ|Pb-%Z1Fb
> zY?nt}e-ZF&3R&m8>|!fd$zk(;80fGd9f{1SXM35Lo11+-tr9woZ%zPcV~*fy8BO6l
> zqFvD3sv^LhH78G~-h20$Lz>wUxa8iVM*;JGvVSy*Z-Y@Qs<QN#9)(vOUbHaC+H%!A
> zL1?u|8lKj5?*2PnM}-K(L+7h{0+HEZyfGX&YnM>{Y`pkr^F_zX9q;=3D<5X&)&K;dZJ
> zN!L)`FnpH8?gRaNWjJRRK}AV|Bod=3D-RWS;+am~C-A*N6#UF)smMnnHrV5U2jz>032
> zGk?>2<T5n8K^rN>J}nW9f(MqlBWu02wHPUUgYwvTn9CpsRh7=3DUjz(Cx^^RbBRMhXJ
> zcO^#9&C5EQ-!<Px2_=3DvuGG}cSD&Oe=3Dwgr5Lh=3DYaNdD)ksb=3DT4O^q!*&{c0IbTI#O=
c
> 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
)
> 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%0D$qDp+UsU!J6;j+@UpT09GHlAZ
> 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
n
> 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
E
> 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
`
> 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
> z%0A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
C
> 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
=3D<
> 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
=3D
> zl&GK;N!B>%jQVSV6Mo0q6(>pFYDvphZ%*}}{JLy&t8QC2)~MsfgB%He?Wu`1&S-BS
> zZ_k*U(yRRg1nW-+Jq2|S;?~iN)b_Z}%w1O9#7V?}wQDC{R6*jcOLVpy1GbY&_j(vS
> zR8Uo|TIA7w#}C`H$J5#W3x-hsc0RZlT`s)PQeF|7H%?VN5r8_%$tgwylRPX+iaw23
> znbSZG-XYg~k5p_yE>7To+0h1lZHaZO08DtQij(1^#lcXC(8Mi}FGLhs5Apy8{aZ-b
> z*-KrI^LP?H=3DOL{zL%tIfT|nHQfQJ8+FVIUlo!Oi?sUH3BpuBmB;czd+8ipMFtjx8D
> za>w?-5~Q-x!U=3D(<56z7O;fvyYmn(EB#KqGqb({8(^L9IP1YkygwEcm);$tOq=3DiO<|
> z2Y-n%;O02O8RW3F-DnI&Vp<2n2`+y28Wt-pXUYqCDjbsdkJFS=3D^erH3v0sg#DMdeI
> zZ>#0uBvyFMiCLz(%jYw30R|_Tl%pIo>m=3DAu<V|D_aImbqnSn7hOXWQP(iuMQNPLDD
> z23iaXBRRRNqT;@P9;yjV&-rFGAJ12`FYOnFNvAt)W?>g3TvKT5NwKI+1AFE97v~4C
> z(#<Ycx>?8GJoLE8^Rde<*31-ue>sxpb~?fr0})7|i)_Hzl^KX@EDTXfhhv+{oNFD!
> zy`C&_V7(_v`e1Y^YJdCmJjr#hB_q?XpFzX9Z<Xz(U)a%qw4wQvUDvxAdcB;*hBri{
> z#tvXCAkd{_AsAy$YICp}2c!iRa&{s~)@^$CtqJ2Vk73g-l~za;X)I-M|AA}Sq(bAn
> z9_~UCKRKmL7%%EV%G&F0*$Cz{Qgm#dP<PWnkQ*wl=3D*9gBo}VxsQvJ`&nz)3HzWlIg
> zNfvr>WxjoXX2Sv#;72A)Hqy2iV3cqH+#$Q>MJXf|>HeV_Irg0#S_*mKdNjS!f;zGt
> znYAN1bT(q9koSSuP+V`qRbkb4O0HkG@_h3bDrVr2u$e4NO+pYx?t<N2fX`m=3DKmT#_
> zZ}L!}1Xt3Jbti8<**juCE}c=3D6gosz7g=3D&#QbQTVOlW*GRTGkk`!#DX!vJB~Sd4-xP
> z7s_fGCXEnW90obEAhYQWiipsamGgT-N=3D0X(g$VGMh9A=3DG9tbqUfZ$5^^a6=3D$Myniq
> zVQp5utl^=3D0p~>iy@e6G23YS5ZZzx0;kP@M3<sCiqzIBeNWYAfYTdqA?T~90g8y-lm
> z?pv;ZRtXFYj0U>66$0eO4HdtWl0Hv9WgsJ@xZ761<r*;jMkJbqO=3D9nUm#l!rDi>A@
> z6AZP6Vb2jr1^Up)`mRp;fyR`B1r7g?>a9oj5h$5x3C7FwqDIa55WYwR4dT3k``*Z?
> zG@`JmLd~kQ(TJ*W5WNDG!ILueD(QSw!XR3I#Rl>joqSgw%=3DBhMFRaSrbEqOhFZ~|y
> zJQ-v-BEcZXPCBEYNLAS$Qz`bjYPGZ`(uz3^c!6V;AVA#xs{a2;J1lP($0%Uoi*>gq
> z4X*W!GaV^uejycGoXVG#Dh!v%;p<0hTuinUB$4NUK?*TlM4hyOXUXzuQNA96?+h(}
> zaCYLOAYAEd3F^Wkc>c(@3!<8;7gsn>3cOO|@!?SyGU5kTHhk0l9sFGJYsl6540?6}
> zQnjG-4d{a>0CfYqurVIs4?|@MC@#63+02C>-eGdu-Vz*z<`HVikoh*AwcZ}~@)h8_
> zRdS19UP6Em#zoU!bizdAXKrOb6;8u{;>NH-8x_RYTuamPZAxsrN;K>mmaHKjAn{?m
> za)U}5WOOKozs0OAakLyaQ`*-DO^7wfaaR0REs5=3D6#ZHm-f}p_zstt5r{Hwi=3D1d-VZ
> zk=3DMQp@tHx-aIDM~M3bD%t*;8DI9%Z-2=3DylGMcM#W=3D<HEZL7d}bloBE+&qU{co_$tl
> zdUE|wTUxK*NVo*V!VK}Gf8A<1y`+g`+U)O-#9fS5y>9INK<sPMe)7wM@`)LdPd>;b
> zF2k_#zNOSmif2o6p6H2Dn%or>49JUd%nz`Q$=3D)4Pz(uajT^1=3DSk-9he_sOT!KKNq;
> z%9J1A5e_dfH<LRQxEzL!2*nS7C}807E-d6SvJ7?5)d!yuVP@P0L<>qZpTU2J3nEYX
> z)Y#o)$H1VH-rLqb5(H$GHOSNp5)2-EjK^;1{f&_oZ%Nd08?3Xq61JU}WXStOP#@9g
> zxqS+A*Jy2PiuI{GuUSr5Ql#J~^ukl8!W3fSrG24d+9A31w0?uQMH;4m9I}ABWp&_`
> zmiD<+huTxBHrugJ@@66V1ZhHUe+=3Dqo4>iy%nJXAYze%a%YhGgwVt(VfCvG`o=3D6jsf
> z_{l=3D^eM{Rtg%Z^YK7|TGXD2_<Lj(&qrvXLV7*GtP&>EuBmBQX`SeKg2M7{}(KqyXP
> z9+$W73J5c}wko3FMg)w1P=3D?C&jo^1uxwO<SbzBZmb}=3Do$YzZyz3SYcT8{BH|g);*{
> zasq%3uc!S`ud(E6KUNDHwLW0O@}_RrnKB)vw*I&fNy3%#`seJHX)7r+5k7EyoYwfD
> zC?8sg>^@nk3nRhv0X0yy@yfO&<(LMpxf|NVP|!}y;SO5e+OnU21Vk3od0Lankvw3i
> zG?(+T@qMz5r5M<w5+~=3Dt56tvlr%TCMM(J+c9NX<;wqmuqsO8A&iv}LV`<;|IX3TGp
> z%u$7yIcnr^Blo5(8J&G|HhqSbZwbyTZV|_-$<L!V*!uGtkVfLl>p*gAbN=3Dji@kEn7
> zSaBltXWL1J0J7kJ;iM29EuF1NEiI;|go~^^dO(i*RT<1Ubz&}FYgK{`Y6ht?7~~!!
> z&`JHOhO;AjG0=3DJi11Vc2B(&QZ?}yk}#ljg>_~vtH<2N(~x;m@GYM69f#{PY;#ZaxX
> z{`4GfRZ;9B`+t#!6%PjBXaM@1S_b;wQxmK@4pCS=3D4udp*1^|=3D0+9tvbr)K%UUkL1;
> zMrX%nA6E23d-*w|m@DLGh!g&$B)ICUAlRD+FDWe6>Vw{=3D2zhWGE4EWuY--UAJ0`A)
> zG&v1#DMU1SA|N|h+eT%ddP4adg}<lzq)~p8X?K(j-*-m!^41coktyrpkV-2`7iM7P
> zaOE{LsA-OWy;)Kwj*m0a<W#s_L0?aZZCW{|8Ksg3PGQgWeLg-2Ab0t){xvXegfVBP
> zwY<5D0-FaKUD#T5U`}uUSSn4teKZV1&6bmGmSh})`W2_q$}MKP3QR+U@WO_KbuFIn
> z;V9tFOR^-sf{ln$E5U7{P%p`O8N;?7iyV&2<vZJdgF`J3sN8T%tI)gN2a|MOzM*rQ
> zVF9uVHkO<ADD&gneprVssa~6*o0c&xUjq&5kNx>M<v=3D15CsuA>{|(2PKhi26=3De6Te
> zgj%zqb-3hnqxO@PZt+@R3K!zWYHI3Si+HSDm8ZTZvlOT_vG=3DN(u*l0`t!@${;L0BP
> z5M?ZXMe%~`-!eX5VVIs9z8Uszn;@>4M?WsxO*@Zd!?m%cWMa$JQEmB4SX$fmP&jS}
> zo!b)?cBCu0oW_Na>iZvJep~vs1efxG9q(6UX&1`F(x33BFLNsWx@u5k2#`T<^Xu>d
> zr}CVC&g_xvTrg-QSa=3D)$8KLJ%4CFwB4&cFmfM+NbU5eaizV_0p3<tAW5%}dnW8Gnw
> z&k!bmY`^MhH+<7brb*f>e?}wFb!50>f$u_EMA>R{{<3qQzNp|0l*iogJ*!p%InmvN
> zkd3MaMlJaB^6`j=3D_$L{^#jE*xAwKBT@jlV~XRhXB_PF%EYAcR-SEK|-a%|61iNZI3
> z-k{`?eh&Dh#E_$Z_EBUNiKko{?^T3`suFDibTH5t@uK`1%BNV=3D8+m9q(m&Fp45V2@
> z#-m8_4Q71d`5n`FNOJbyHgwqUtk2_V2^E?&9lz^Q+c-irjOi#4EzXlK%PZ;CG-*2r
> zl{Z|;;GvphMHx#R!4!sK2#^8HRi~SO4<6<TQNk0~qDhoDnLMBr<yA7uOGh4gh@vlU
> z>_8AmBb*v8DE?Yg-`b6?vc`LDLs_v^AowcrFvghth)h#81(|MF6j55l4btoS#pYns
> z@&ac@*yh%8&)#5Y+cLwNcYR0<Z*UbVEyit2$|+LUKmY9yKS1v>xJN9j8oPymO({lV
> zHu1j{J{#VT^@Za|nuK)eh-l;iPfqZZDFLq^9-&2zdpykw4AeDMa#<5a+Z0w;$D4?7
> z3*SO1u5__bAKybKOt~RPlp7J(+QPp;|5D>u2n6Iei#kBuk^s98ljR%^n057Aftv6|
> zzhpSJ!1s=3Drb^|!P^|cm`+MwQlS}))L$>rNftg5qBXDip$RO-FOk8}gaPH&_B=3D2*&}
> zCXX%KTUUKhc_S?3z0%V{92SX)xEh#WYWk1XGwZ$~EJ=3DK8NFgnL>w&U!7TR<jAo@~p
> zdBaD_hZb?nX2p=3DjXH_q)ng`n+2Kf{toKmV=3D=3DmiE(b->%`9Xi5C{Zm?hda0E_W!AqI
> zuqdoeUFkH<jfo%wn%@lsuES4Df(?%{8b^_8C)dG9L#xjtTJn<;&tqtW6<or~%h<X~
> z-mRuwVVQ3Pv&-zffl3<kC1A-2FCmBKX>9Thd3B;&=3Dur#txN8>b`5f9{N1I{eYsQU*
> z8o(cD>6u5i&=3DP!ytuO|E`*>Ulv1bLmhomrba#nW<#AF%?<ZG1TTC{fQz#KrQ{pU{!
> zF-VK+N!`upQ^}fb$X&wIy)>GO9I6W!nT$^ME7jAjG1po9*)WqNiU+3`5hu5Uq#wwb
> z5}{aOGMBMU=3DweI7XIpUSHU9|c#NJt9dH#;|Qf%Dx%f#5)Y)&(OYobBu0$6B8(3^yz
> z?$Wt8R*gmZoTG;ADQ{Ijv(P2Lj$v3-i+5~w9r$Zg7}>I-cp(JJKH&>&xBnqlEVr-;
> zIlwm}Af=3D`Sw%v<)Rudd!L0hCUOn2w9k0hwkL+qmfOkTnrT<1BP#q&LYB3}_34TKgy
> zuuR2IK}L{HDEF6t(A6gG)2EG7>e=3DyGI&z2&)jT_;s9(%3<r_f~BNqW>UJ-H)GFX9!
> zw_Z@3=3DMM`Jh;$8q>qIQYOHTBGFq95Gui0B=3D7HnfCQ-Vqd>_(n1Nvd(ueXLg*!N@$)
> z^`GT%)#-w_C)2gHkBFE4Iz|zX@>TOf=3DUDdYCCrl`OzES415#$$v)dgBBO%XB%(UNv
> zRc2Vzv=3D->3Q;qkuZjo8R&^D(yUQ?FFfYgI*G6_2B^5V<iU%|cuctvEl>7GrqR=3D=3DPd
> zmz878@?t(#07-obG3#AY#ON`ex|*xcY?2e=3D0Aw~LcnP<ULB36~59iB2>#NM4bfP7;
> zvQ=3DnOW3^p>I-Mb8Q$QP(h^E7C$PU|r|D1SFWt!|@{|RS<Xa&K|1^4Okh`!-_{G*5B
> z;AiT2Uw9szEd<(#ekJk4fH;}Orgo{>oncb;)pR#Xzmp!uk)=3D{PP=3D~VTU{@CFt_$T%
> zFJYPD)O_*@AfOL;^$n@9o9sPL3OyPH>i<x}1jfC8&QCs;y3PSkWt=3D3o308d5DG36M
> z8n+}r0G)YNgHbSZSrU`@36$oS0iVZ%=3Dzbr!89Mq(Gms_oQHClD9-xIJe>1OL$&Tu7
> zh$Os!$<0||$on6JqC>Q^&LK1P!RR~(+G&IZF<Y8tlI8V1nQ;BTnF|7`Vf(!e&eovT
> zn2)`GlPZ7}{4rg-J>vbHMJn$kn$@r$a|@FtgBk9+V9OCD?1-5kHsj@g&8+oE{LwRl
> zI>b|U;2tn@7THXXS#s<T6SUp&oIAW{wUu-6oc~3^+VYvmRr8+;5L&#mOZ4#jh0}>d
> z3{y?&ctRu`;7tM$suq4O?v9-3UYoZ;+tA~GklX*)Hr;ZySw73r_}G-Y*X5Jb8B+fu
> zBxq@)#VPdU8DGyBZD2$dDy6iIZO@>=3D9c#g|L{P#h-Va`7^_s+N<2+%G&65d91t9^1
> z%cH6l66a9`HM7FMQVdGndE{6tZ=3D4TedcpoWpsLIgck#8M7wA;`lP{uTh!pM^N%OXU
> z+X7o)QSD-s0OKo)Xu%=3DRxBZc;QY7&QG{<iyA+n$uen{l;Lf4y<M=3DVF|-lG882IXjH
> z;)w@Lnk0{|y4Of<nZh!<ds{P;>STR>9Bs?V@Eajv-E(IbhFU_oy^)LfG4<VSZpi4%
> z<6J%H^DhvsDOVS%Gu`=3D*L$F>x8%&gcpw@`cA^R!D0&Q{j`WfYM4hF*JnJU36mCyql
> zV?hsR`g}>TN}xk@XAvfG77W%oc$prn!;J$<OUh4T0@lt!;KuETaue<@&yWXc<d&&E
> zvYSyH5whC^F(VqOOTwUY++RB30UhDZuEo+P`9@Bb%ZujH1_W*#f^|&%@Z@TLtt1_Z
> zehZqtjO{i|r?eN0#7Kfzgu)mAToMOfgV*%Br9vaw;DxzIRdw^o(hapKSKhuieb?aR
> zz#gYqV)|T@O3I1A^R&2b>;&$JZp}GexITj-(+9e=3DgVk+e4{8`#1&I!ANEb*InQ!F*
> zN;>LXsHk2xP<Ql%QNZpm%V~9gc3NXy;~kH!#64UpLRkQ(FJnF?N7uK}VMBMM2<bY;
> z7deD}5~^_Y;$Z<)m}cTr&tS5zhXts1{Q06N;&)6ulb($Z+n_n+PRK(-sBp91zWQdw
> zEg5PmlK5_V053q$zle!L;sh%uceg{W<B79$S{SmaP~WT?bhfQag*#;qMWzY=3Df2A4<
> z5>gpHobBNFM+UOf#vLE=3DDbK&U?KAyt=3D$n)|0%2BjaDYtNX~}v4K&^l(jX#-fhOkhL
> z_%hLY1q`~o1h#t+PPe5d+g|tt^jiIE)0xTlx_+e-u?C9Nh=3DdQcisT;=3Dp_i3^$nsKh
> ztH|f5``=3D-C>g(GH*B%&$dvNp-f0p2ii)}Y)tJT8)6%YFqe<fj|gw9c<k0@M=3D{aodv
> z;xwwyu#J`DNd@NxmrLA;vUevthZ@=3Dg19$tpUA<>hmsPwi2p1ohQb9}c8=3D8NUYOxm?
> zwo?k6!OG{}Ohra-SgJQ%gE4`ddITjn1j;=3D`eZs@vsZU3O7zS8sGk0b0f5TMfblTty
> z=3D3q$T+XV+9LR00jEa}nCs{oq#=3D%|x8UgkDD9(za|)me`_o4<}FG9uV;pBt3`pqk}w
> zO}ejvfkE|q9OPzGd@BK7=3DmI{u7wf%8S)GX=3DHO(6UmnI4qMv&l(XXI%>I%JM+pLp2K
> zmT0cVD#saAR`dUbN8!~xe^V2{6Rs8Qsg<OP!u3%J8z$BcIzwxxu(rC2kRuv{I2`m@
> zb7V;4PH@1&YKoa9^8u{-`I7d>5!r1dymz~<>n2`;4!XdE=3DYOH`0SUAVHON7reCb?X
> z-REh<3i7b56icAP$4WCmF@nCHYw9$h=3D`{(i$i?+wxF#$9%;X_`f7NZN$i1nWYo(SU
> zVr7qR|I0J0k4`}s0hcUKS!u$lP(95d36G4Pd%~|Z1R%9!78>#e6l74NI6(JV5r#bj
> zI6W@ZXt+5{Zy4PeyU}Uxcm<14HFyqXWr}RuBl1KMaX1QL&Ve+{*M^g%1SO_dT|$oq
> z>d2>LDm3^(ZUxkBf3atRv&dUz^F-Yq%0dOD8$KTj>1quakVT_p&YR2Zb$(q{XN)5l
> z_&9V-gU^6$<miY?xyBqi3lk5-X8wPYewrIYr%$SLrcQD$@TT&Q>zjB2>d8_?Sqz1^
> zO4|0?L0Vj$4g?vg@+XE9F}B=3D=3DJ=3Di_^?PpI+<xB${NV^;Xe~uvw5POV~K3DK?Jd$?6
> z#^|bzlw%+oR+=3DiAP4Ik|<9o(iMoH%Xr;}b4Y|#JS9pCht5O%8{Vp@`kb*ZxABjf{G
> z`E@>2`X_XnaiUdFx#qpSHyk3JN_jhQ&YZ3*T*kU~&Z<lXgFAtdCQi;crw8}2AEnc=3D
> zvpN5C3>5NMf1L<2;*R2!V96Oi-W_1J0)e<d*duA3_C<2R2%9cn+4-c~;52Ac%3w9_
> zJ!83na1<h4R;CsCI=3D$J0-uqJns03p2U7_`}+S#jxqM3cv>)e4P2i4qdg_J`XMcTPC
> zg^BcR5S^lU%8Bx3fz~%-@v_^i6{i2kFR?Mjo)Q?_f19K9gHDK0bEFIsekm(4^djW*
> zv@o0c3?GX<b44A~^i@*lNoZTr*7|xkMwvV2J3EQnQJ6C^VgI?*mIIJ4_AfGqM~pnW
> zjQQ?%<DP!`L-=3DL*FM*mma~#U!nio|?$S8u1Uq<w{aT=3D6+`WFdDoCfD7+O?^5m_oMC
> z7_7_Ff5g_YaY7m=3Dqd&5~ldKN*Ak+z=3D=3DxREFRTw^Ha}w5dn-ilQVqLGv>sNNwfT+
> zQs0$K)X8LSiHMVpJixvE4W)(J8S|)75m(E@02*KA%u?QUQ3X+xE|+2}C%^eFyGO?w
> zC6>#!C1ge7S!Du{H9w@j8#g{oHUIRU_A_Pxe=3DWwE1&{CLv?_3yAy|wmN40F-(@cy>
> z`|x(BT(01OE@`qq0*LrEVn9NnIM?U{O>I!h#DOzn0|1epBNM)~0Vz>&{EqIs<@O^;
> zr7yvmpdyftXleYoN^EX|ZjcXb2s7?P@l4RSxcvn;>5qo1?9G*2xaa=3Dp`{8n2Q5mU(
> ze_^$zEt>!S`nJX_l*9JJqr3M5EbC<ESP7LzuIbSxNJ5|1Mf09mf`!Li^WQql%#old
> z>wrm#4#*GGRAhO2RK}c`Ybga1=3D^?@EU>6~e0E>I2Lln#VEDQC_6qk<-o04IQQ_?LN
> zCfhJq5ebKc?K+=3DN{4CAcfV!N7&7{Ktf7-ko3}%~EHtgpFQ+B?GTxcSevLUA7hqZR3
> z|Kp6OAs~hJW75Ehgzf)eMAy!AON{_V$-^d|HFe_7BMd29?sOH839rH<eRc%CMqRCH
> z%U*bYBlpDc4PUyNw21qEF)^6fjPJnGHvq3TL}t(X(Z>!iFa)LNc}zpmC&k^Ne-0x2
> zPWq?rap4}FVY-B2O(m#ZfY!gOBvG@ycB?MEih14^Ik~4-4|bu<D}HCjjhmTS$b>oB
> zU=3DxkV`mAfAc&LGS-}U`lNKsj$(Aigk!?;Ep+<f`Wv6pe9dM=3D8lo^EK@q_R5p2#&Ev
> zQeI>ia3e|>1>+Q7UGz^6>G2*}f5~YQ;hWOonai_Uj3buBQ2X25jXdPuTJQ5dt_F*C
> zU+bo_uW2w2=3DsRY(xn;!Ca;Z!IXR2C^Xcx5v$7OsbwYtWHIdg)a5NCsmYB+my;7bZw
> z?{iv*m0K5b;^sQ9;PL9vR&Hs+9>KORN+}aX&tRX&;jO)mfV+&-g4)2we}lw<WZ$Ed
> z)rnTnwMh7gB68!fg}4(<d=3DYI(MoO0$*UV8%Fes|{W*){@g1q9(l*c1Rb2GBHY~Ou7
> z8T(|WqqhP9qqz;ZHl#GmyY1xdZh#YCpwxoi$_ei4j_Tas95osUtqC;=3DN}48ApY_9!
> zwYg^LFqnAs1#d!c59EG{e;X%W&pDn!$f6`p*A@I_Z{^BD7>H}HCYC+{BCK$FpNiLB
> z+MrOaSPZ7PV%ESxE-ng$;UQZ)<uRgL-5QPEvV(!x>>k9U)Ce}JVc9_dR|Snv#^`(F
> zFm-%3$~g(-tnnIZvU(&%&j3@2^&zra`hD-vw8@hrb@CEc1zb1@f0SxY6UJ+?2I&jG
> zzgbbc0@=3Dx`s~IFeU9Af0NRSCeLDcaH>i&K0<%N!n%O^)2&ZrM{{nDstc)uD6`0zfz
> zabktky(7Y{T4rAC6Bf*_j#_G`PoXV46;XcGuAM7^k9B&60EvlEy~-=3D3O@3F=3D9k-p7
> zAQ41~QJeP)Y4H@#e=3D)*l+Nx6Nz7*n5AQ+ONt41m32)8%P@{Cg5AqKxy4_&P7%hmcA
> zS=3D6gs0X$E}H&G&YT3>EaGupk7$!v@-SdKQxQOpV#?mn^3?TT}4YhX1F2L-7--y>?I
> zD!b_v%~mv|7~3mzWdPK0+dn~+K%TbdSA#dwx|lHgEH(~Ye@m=3D$Q~)&9%AjnNz#Lc^
> zrK+yfb58x9lVD=3Dc#kH^dL~bRk`h2MZ?<B%3>ZoC6y{FojcDb0aQsxSiS<OSuDjQll
> zJG3M#u?(x(;eIb!?;zy4tffhUmOo)J{z!jK1C*a-1f7c-!-AoYs|s{5qo6A13b|@>
> zOnr3w=3D}Q1vf782?eMHC60H}ODWU)6MRDJQC3bJHl2dz5(oH21pylt-)m8JKD@8?Pv
> z(6(pN;-CPwi07s5%A_Gx!Ul}F`vr1TdM7O*c~VpSD;hjK9$%k)A$*c+kcOh;VRrKK
> zq_*COr}78}N3}(VLg<~x{7t(%ucd*k9vD&8K!fx{f6&J$g&E3Og2JU#mdvnrnS8Lk
> zD|f9#S2^lA8&gO-|58&!wZxCR*JB>eXoY+y2D{Mb*5ub<G5T8703uCcAVi<1cJ#(|
> z*fECGC6Al$-2)i0uqbCj9ptToFU%V$-EloEHf)yFMOZv>dE&-zO$bwBnu6YZWlJ($
> zRbtkNe+?f2S2BqSD{97pNYCStXUdya@R|_W{sj9UfPdho*6RunZW?t|g$&&5q7Pd`
> zg^KBegynLR;+oDTnO`^c3LwV%F|4v2QNBBeftZPXhnvu>b)0H`f05;})5pizGI_S-
> z(b8Yz*xl3|KQ5$CQnkVNclRvv2^%<!X}v;-f5cRi<1Lia@8}<c^dFN4*UjC>vFBzl
> z@ToU;;j&<gfkj-H{+=3DLQKlSMtKztX%Z|pyjLxIlpFQb7V$}yM}jVyw2it?Y#2I!ZH
> zOF+l@IW2;FSA28r=3DRBy&B|^}3G)|HP8Z^c}))FsqrNyqYx@r+2T1PbgK3Yl!pSTMB
> ze{;oNZI}AqvuWTAc4$iekYKFZm(~B(37({zWMFZ~r|_;X$f2mv3${;p4V|2&^C%x}
> zMm#V^bm!LaC!1)~)u>Z`HPIVctZoXO%D{AkQJsgUSkocbAmRM7J$`|Q7pH=3DhSLD*_
> zMBtPSibM|*!GN3=3DYAa=3DD{=3Dc?JJhQm|e<NZtmM8H!&!g~qsx>AIDAl)r^8%-M2eFA^
> zz)I*FUjdwFcAR$44<rVrY;gla_~3g8z2-HKt@N*F`g=3D}daBAfQ0{lY3I8wOr@@7X%
> z$I;E=3Dx%?|#pq!!*VGrJ{YMofRwp-T7Y&8v`hjJ>>lWSe9MvPVsB_$*X!a<kkfBpsV
> zh68@|i&2~U;`jsVhgzgv2jG+9scs#RYwb8{E0kFaSCl+Q4l7+tDN&N}w;nss(1B8r
> z<^@b#w~J7C7OU)b`~oM4+;m<Qw*!far>AmQ@2T?L9+Rgwi5HeGEMbpXZ`xV@2TOJC
> z=3D6*N_Te1DUZYQfCx)?+le_u!Hf6QY3e|5EIlBbVs#2Pvv5TFIRp%4OvK{fyO3aY&L
> z?rTp@LV=3Df^$GEb!5%t)U@Ouj9;#XYHazz6Cq!`XRebY9eb^`Ucc+FuEjZ|5^a@{;j
> zh^>>v^5FWoB;0Rd`DO>l2Qg_WQ=3Dh>ePR--_n%_SQ+{t7%>qYj&je;5Ve*td|KN(^B
> zW(bbd+3FO(JRPKG2zEl*Wws_usQ|=3D%e)&nOa=3DQYSz<^63-{8jF#P5bP`6F6^NY?#M
> z-WHFVCT&`8cDWs?goJovGj%~<q<)Xrx7~%Db!crhMwya8L2i~QCm89CZN(z(a7aGn
> zflgM)cl-tKMxq;Rmc!ZNe=3D*F)`^h#8K&b``l>zT%nBZE@;<OP{Ul9c9w|aPT|KRYr
> zfu#^4eqc-Oqs&#{SagK{B$TKg67+drs>B{}1k<Hya74d=3D3pA(+*`hN^p88jjprDm)
> z^{8Q)M?!-mI%jj-I+iT<CYMp`R^Qp~vgIVI?kduf+uMQ)mT4Cse`t;-kE1qpunnbY
> z{YOy(Z-~uQ&6)HZ^!)qd)lA`YXj#154PsTq2*RJfBFh2`>ogwM$$qZ-As*S<-+3)7
> zFe;BIi_~>pgP~&sX>m|Kv?_yavaUI$q1%>=3DGw|-U*ft~Q!x(n>7Vax6j1y(*<C!W^
> z2ez@)0I95C(B#D(e_@K_rb1D{_b#Yqy(p*wJ^_WdDoBAPolf<~)(sTtbC%eWepD*H
> z>tZx+X;*j0@J48dcx+Zc@cvY7$9sh*j8>Hr@#nXZLX*EnyOI9j=3D>x}pVJUN(-1zF#
> z;2l>RY!xH-{$sdIJWU;oKDZ62AkeJz!$HO8^rD!sKP6qXfBA8<huqzOpIbxJr-|MX
> zl)xuCBAEfmp{xIPa&eC{wkEB-mI<c@L?gj|{fR}TFts8fdDGI>0hAdtBnaHu4WAL0
> zRcScrDh>-|7%>2$aIzOHvN2SoQpHa%c=3D6=3D^6ajQnGz9Hgk0*|7oUV*?pKdD8XVxFB
> zZI_btIv~^(f9#yV*lQ)-Jx{S^w#p-9HN#!k6C(1x<6GzKkkfBnp3GWx7}oOUsH;US
> z8%l9=3D?;Jr<^PjL_#0K2!%$sk&G-M9TM(gPRSe@&^(bh3`y(3SDQzzNY3#<w1%aaa_
> zSL8_dl%P{qb$Ff*_Co*jp7l#ev*OEj0QcYVrL>k<f2&9|$Rhxhy=3D4kFl=3DJ92tYIEx
> z#{3-fmnTwV%OYw*$^gA$aH!sW@}@4eITEdZ?2&9Yj1$_2fia1N<0Pk><y%T_f%O-^
> ztN)98L;tx;^gah2ChTxej^raS6*XTR5uKw0>zl<hd)Y<~Rt!<je+Ct*I^~$gV;D0z
> z#zdb`f5MZKXZ-jW?1@-mc+>^e9PH`+*3jR+^5L?90d9BeC6dB0!#iV|iGYjc7K;(X
> z7*34fb+M!HNW)T1fY&1V4S7Tf86kby)pxp%*lYCsLpg0R5OS42gUS5WMbEO|r+~3A
> z@N7_uXoAEQmsRk%nI6b@tO%)xU7HVYfDvLDe~VYZ(0Q51WbH0x=3DK?>P-U6CgX}!4?
> z9=3D~wUVRE_5ar_fS#b>kN2{QS=3DFP!J5b=3Dtc=3DHqiNEXR966CSn`1*$^EM7}cBQ0jW5=
(
> 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
J
> zWENa%U6!@w`@a&DsV9?$D*h{RrzcE4^2M$Wa-xNWXHz6D&@$K=3D#7;!If9a6z-92VQ
> zQZ=3D$@>+>|>Og3Dbext!BURwa~yZKM1Lff%XTijxI858b%lC4{JUDvblUd~|?#>5|h
> zJU&`I*^Z@@hTBncT_zyfE$z+Bi|1SB3S>jj<CPPR%?o{h1aUd~5;;(HZB>>Vq7(DP
> zjloC|R|SDq!8ZBQ5;^5qf5sM`JzIW5CRB84i=3DrR`wKZMTWuVY1lit&Q>gftLFNva!
> zTa`!<69gS*vO(JtL3I>zMe<gFCX>zLh+AgX1};WwY9}~lm^9!*V#_B|Vl&&di%>5i
> zXcRPu&c$T)PrgvolagB9E~xdcoy-?Gvz-jmn&+Vj+1+>fuj|rse~zsRCgQpSW$Im{
> z$H2ercd3l8!fe{UQUWth)b}KajaR2s@sxDN>qhoo5*0hRZyu_xMMKR{%3)aXAhOKV
> zpNzhU_qMY9Y^Fe_l5W>&u(_$_%NkLfUG@EowSsV4x~}qv-IquI^!|-WbkcC~_;b^N
> zk5`o*XJ&_)Vx5<qe~~jS;L9{7Sw~=3D;MIL^)!NG6u`?fnx#71dxb|T&&-NeNEw=3D@wV
> z>`9%d8)YiC7Cv5cp9BWMaVQ~ul*yD|(HHgWeHwm(2cS3|&2HTSgzO5cka&bg?!+fk
> z$CMnso~j>!a9$?miecE3IGLCO?xgO%`P>phM&mIAvKw31f92mFi_p(2(sSPn0)gzl
> zIN~!FsVEz}(X<0%g25Ux7omVLeY&7fHHAFlg(Jo;r{k=3DWGV|thSds@sm_ilr;jgo#
> z@AUUO?ztAKr!rT=3D3?b!h3Hv-smNq-xB2avo(%5<3aTAZm;dC;upTOlgmfvIKGena~
> zAuoG(3WS>ae>R83oI}hL+yXE4o2pj@7RXmbc#`rhD8tU2NSadiCsq$<7NXGmOJwRa
> z`{}PZ&9af~&K^4}r7qvlm{){MnH!n@q|)TLyS53gEt#DPNN3diqO@3|gWuMY1j4-c
> z8xU*SbAUc_c5zJ@I#O~hFnH79!k;_<?r?63cT*Qse+ByW!cG9>xGDU|V1yHWla^=3DZ
> zd>@C}2lB7uO+lDeWGh%dzRAS32#wu!9uXqy4ivSCg{xGzO0-4~dWTY8Aa`oW=3DPfP=3D
> zIwm3k;*hGg(WqL;f{HHRl^yHEdGWk&aR8IjS?jpUHds<)k7?}ou<Qiho?yEP@UWF1
> zsm7kfe-O}74Nu~gRiZ$skKg$CHf?wK5jHX@F@s~!+Bn~9Zjkbtb=3D${r5Kvpl)Y8%;
> zOFC+mi(>bX8>zSo?P+xe=3Dr0Ydnv~-IZ8~LAZ#-~q^@i&}ynl*62{bP-Gn~=3Dr><P?+
> zTA(U)cHH}xIoNnF!6>AC&m9OR&)^sIuPc&^e*}r+cK0`D7#gu8QI$3v><fDc=3Dwecn
> z23JJrUsTl<&UVqYb}BKg2N5_{gwkwseJV%FgW)(Mm^-64TJMliZi}@!KAUUeCU)xd
> z^>{cPc1+#76IKkLx8;N&u5r@6!Rylw2uXi>Ebv~OZY5Y66>byRV#AiZxnxyd(t-m1
> zf1zOh$N!jNs<%4b0Ct_!Ecz2LC?CEFh7IE0Q06`H9zfz%3sP(;-o=3D3$sDcx7YDewz
> zkHX@8@<RWiY8`Vef5~5?ZP|OWlu1WBf`}^<@yEJ~srxy2yv6lE!)wzyonMh}O?#zt
> z9NJzO!4i&|X~&97r%P8tVs7~Tp5Z!Se~=3Dv6zEfuuy4fmmNb}m&?Mq8jZK^?2D7y}?
> zveH$H1rFAnI$zm_{u)t`&O5rNPztp{4?PU57W~h=3Do8_bb2nF6l@yAW-;D6+^K^JY$
> z7_i=3DY&W#}^G3(HaO2yp+wo8S=3DP8?yw=3D;8Z!9;I?}2abgtAY6%I)HN}jO7Wlpf3tM=
=3D
> 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
@
> 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
t
> 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
m
> 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
A
> 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
=3Dnt
> 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
*
> zrxp(4Ba~&3&Gn=3D1YH5@?L7I>7SEg0Hx4)g4>-lcf43_tiA6>r-kys3j%A8CGYk6Yk
> zg-@F;`?CW*f$AR5Tot-Me6k@;R6ErZf0jeY@@;}>aNY?e#Mfx|=3Dpu3NnTQxu6j>Ui
> z!JX!#j*auEo0CP(NRGEGrl^0FUm+F5QUC;Dq~C>3BUrIEkdGKgZ<ru4Rr1<?*wp~G
> zE5*q2SB`_uJl`tr=3D{Kg5mn3u7+aADY@-1M&rS|i)k!s->N~R;~W<py<oF(Xoe^sCH
> z*_ax34$@q@U}r@>f>YWLASZ*Uryi_}T>+r18fEX{NL;*bvx3M6ie2kuu0$TJz$Eac
> z3vQHE2%Ylrttfy>jDDPa_vNiF=3DquJ_Ed?C@FKwQLuA^3WJXD|1<5qi3z0tO;^MDkT
> zNys4Y3Eqoz$RaEKg<I=3DS^`5^we@KpK@nZlHMDyk}({QzPoxI7dd|v@@1`dVcD=3D>=3D4
> z(ZdaFdd!!C)$BO(_)Z6A`w3_nU^hjTA6c|1w%yq;F*P&7_0ugUJzoESmPmijkb=3DfU
> zcslhUKH4b`b#K?Sx+C+?2t#G9)m0RBgru*u50srN)3Ju`M&HToU1c`oe@903i4}vy
> zYD}jt`dQ7fSJWxda?`~mLboKuM;x4CX!8z^gTQyJhqMv#p#<^UcY#^N4f%XC%)}8j
> zIS(xv`l6-1%4RJ;?v=3D#SvQ1L+pvH6|7!Ztc31?!}3MbB)@zHTM1^Py&0~=3D^Zk~XBC
> zy_y;y#}EdmdOoMf^-3tzf3oCmf7T)Y2%`>WVE1&VTHeb%SkaI3&vzK}Du3(@3M3ho
> z(!pb%)+Z2I$8RD0_XDU(M<_Gx(G2K4KQXHx>GHf7WVHyz|LOfREhYRoS|Mq?l9Mba
> z*x%pjPj1;&nGO-N7)+p39!UD_{v%<rGxyN`&BX+-g2A-^hOs$;f5NB^cWASs?B&(t
> zT^#W~lUk$E%m=3DQ8!#E$6XDh|g{x_93n}Tj`NBKyvmeP-SoJm9-R3NKevVB{%P#4QB
> z-4veCW>%)<`JF=3D&OycWpT>Es7lP+li86E)W^0=3Ds@YOeKO$O)lp5!y>kJIM65uNEDn
> zb<!IMugqf)VKc!&f45ABY0_k_hbdH&>k{l8&K8;9qEYWqp06e>TKI_R*Dx_Lq?{$O
> znL_eQ+~k_Q=3Dw&49@Z>LC(w*un^?naX{0`g57w2hyVnGo!D0Se>pL@L18o3<vF;Fe}
> zu!l*ZRz^AXab<R!G20SNT?6IU+&+k}D00I`#=3Dw@lZY=3DKxf6sp=3D2%m7sP$1gN3`^0|
> zQ=3Dq^#6f>jMVl-Pp;b)Q9=3D>_jKl*}R~y5DpoYOW}c^1tnIi_Q|40Oxz2w$w~pX;!)Y
> zFJ6-Hv<#*;)i=3DdT>N2>R5&h#}gwIqVw8kZXlQ8ZN**BuxBgX$VP?$QKt0acH_J-qr
> zDLDr)v_MzYe;#Vf^Csdof>3VIK}dfVCPvL*#A0T*EE}^aOb&>e`WO0X!wm{F8sA0Y
> zBEFHM>CkVx;9LV2d3#9h`_Tj(h9LWlgSu)Tbxish;b#m=3DogOqf?P>$I0kmpu2PgQR
> z-Q8M~qBg0&3dJy3!t8A2E5V;Nbk8lTf&f3$PS(Yaf5JQn;XsN|;;>Ko#vx&%i@R+(
> z`BL66YlGPiuvS#LIoQN=3D^9f@T-z+e>BHy?gc_sYRC)_GW*ZF4oj(52QCAL|bLt>h`
> zo0OmyWd1lEcW%6$CxK|B0~IV=3D*NAMU90KuitBzq)z%nWx(Q&;zMhIosR6RakE^88W
> zJ;ge*e-5%nkU#2Bmjg4gM%W6;Y+sK{Qr+M}7VS;~1PC!IU*ZEA|6n{(nn=3DQlVVBUy
> zk}aMR{~rimHagRRer<fNQy^bs>m87>>AI<9dMR4MNP%)>-uG;UEG;6qGtnpW^T@Qd
> z0re+Phhxn*sW~9qG3HkMG3&7(mRvr2Cb$9me~*1xc<F#AGlhXKQV8a34gdG5P}iG;
> zk*M17G*X}UL1cy|u0kP^D_dR+JEJ*m1aZVs=3Dp!1FqZW#ZkojPV_zQes8Isj=3Dgzjdo
> zmgur+(MjYTm0C5;q)E?iC1ar25pv^#A)s;Bu=3D320<ge=3DjBJ#myKjfXs5=3D?nb5X^Kl
> ze>@9c4`N2%382(SF}E%bBq25&HDmrEZP~Em9NV;@W#x@Bb5@!yvgsPma}4}E3$QyK
> zYlr{6%fPsOS%VS=3D9s^nTLzhZ1@G^5d;N3u~u1?D&dhMnu&$Ex!Uj-?Q8f}BJoo+NM
> zfE9=3Di2rca93I8l{TCOU5RoYrp-rC~IfApQFkaF)J*21isr&t!!@3S;LOvs>(nX)|V
> z@_de3nRtaic%kK%hu>)o?JE)iyD$k9OAVxiVIeqSXRItud-eYky1;XqlL%@U$a4@I
> zXm8e8bd4GSZ2Kp$STv5!Kovh8*%2%_x_h&=3Dz`j!s40^XETqvy*ZC-ZvgpTd;e;>@J
> z^YNF)%0>FSwUC079@V_K6%lb+$Vp>JG`!t+lr6YUgvRC<?}IdoQ;5liL&tc7?HM=3DT
> z8ol?CNgd9dkV7wD`-4=3DANtvg~2RM;Q1%>AMOwKrkGj|Ewf2~5=3DbPP69>}%#zOX~EF
> z&#ZeocwoRj(F<V!4JCXTmqI0=3Df5Cf>ZR5FZhq5%^%MlYCfZf^-&LIpAn!#*Aw)0n>
> zwzNpzX`u^qBYy|lwZy2YNp4c#tLM`Rpy<xnS!(}?s7LF(!d@Xaf@$9~I0X|xRqxs}
> z{I59~Q4qw3y{^ze|4he4&_%ioNB0K~l3|$VHt)S_koPt;P(@8$t)xgae}MkGj`rPJ
> z7Ev(MNH&SlChTXovaE(d#47Tbbrr0PI!?GU3ib(bB|<bk^7(iPIpu>1=3Dv4u=3D&LDZy
> zLpCr@3()|vSwd$#V6n;p5tWS)xW*>kvEl=3D&T;d16str;QdntlsA$r>8abh=3Dp%uFwz
> zCWcKvAr3!6<oV$nX$eWLf8~5)8tddvNd;@A3yI07XA}utvYCaEU$J2PTU4|qXbXDq
> zxvqf#ec0nlTun@c=3DQ7IS!I5pV_eb@_6~R5fAx|9c1hquNeaIijOcCVHqaI)Fbq!uj
> z7?KpgdGr}j$d~H0a)+Ks)|-b<xy{%S_aY6(iNrFr`9xk^myx+3e+Y7qPr;lOSIH*p
> zUyg~fdn5SvBDOrq^nIqOeF8)BJ}ny=3DND_LSTce@NmF2RAnwYMbkId;zb;x^<bkGZm
> zl+2E&Z77`Af5|97z=3D)JH%FWhf)Aln&{P`s)@Fn%oe_~G9JU%%p%o`EmjQQ7Xe9o7h
> z+t#C?VN0!6W|#U;f7gdi;6qR~HUIrBI9KB$pjqZA{7HavGZ!FAi<)|9632DIg74Ri
> z$b7b02!aV7#W^x-;&Z(A;l^oTq&tJE)&>(-VQ6p(mzHE7al0)vSj&=3D7vOCt=3D&mF~<
> zf~=3Dj!%Z4K(?gtxhp`=3D4@0xC0Kb%aPB#&uLru-Kgu=3D$32=3De~{HLUUo|R7T#@bH3M{=
E
> zqQ{7sXf_SKP<&+DGR$l|k73wjpqx5D@q!-PCCUM9+X}#9nGy_^$=3D)QFD3=3D1?x)m2f
> zb+K!l(q=3DD#0hwt^Np{k4UcJ<~W_)dPA1zeA;Hc0P3V?b<y@PIR^jR(STY6%~J0xrt
> z0b~S;D*GISe=3DnFOeU8seDw=3D2ogt2wjkgtI0CuoZ^S@v7cKrtZcQ>9S65SHUFPGWw<
> zIKe_&Oje+IKENZQ3GD+XTWWFB8U~)*-q(}m(aJ4kk|?{d=3Db}E0QG$ocyW59$j*-a7
> zfV8*m`Z%3KNNF>+@C{@anlrTS=3DQ2Y&$X`e){!$2Bf73tTGUl3uPC<~(5*2V0#qx6a
> z-0FiL@{|yn#+)2itf+~s3D%oY4Fey-B)}wJT=3DHZBu%>oe2ZaF^gPPIeJ0mE@kN~zz
> zR2novK+Y`I;Sv8CqjK(O5rCr>7r0QC)D%&0OTex5{bL7yJ6*>U5`FQ0!3^C)6%vs0
> zc4VRef1byJ(=3D+A;;2{GOEmg@>K@qkc!*R2oyB!9*Q||}ZS?f|&^3dO<4?p27>g+})
> zet(#TjjHiRm<%XmgBxNQxsJP~uiZ<)16#y1Gr{?T5zc>Nf!|e)je3cqE{o^ckO~V+
> zKJ@SiL4Fss5aHjYSCU;CdajRH<7-JEUg#R~e?aP4D+&{gwwZ5724o8)=3Dr5t#kWVnf
> zg4n!hzizdCEDB#|>Pk!-Ra2a!aRH(4FkuUBCM5@eOk5mJlYO9x1tNHI+ngou^>)o}
> zhJ5{XEqX_T1cfR}o;iaA1FPPvY{`L~69!(4sWdPf1t=3DfiUmWS*5k0~H|IzmoMmn5n
> ze^|w{lHo%GI}>^Y&U6f+HUk#2HQ@2z<s^7LzeeqSLWc$PKe)_V0wPsW<NnQuQ?cj-
> zuoEyyMt$V%M}0Ufw;`I5Ut_=3D_ay?+eS(LN<(hL}7vR8%9nU<0TT%iaSJ4-^PwaHNi
> zEZ*m2FMf%w-Egq$B~1OVz?zKM2@G1~e~gSA7fvK~l~se6R(%l>ANb8_wNE6&G4`aw
> z5_Sa@P){yvY}fmy;TATs+U%Qo#gUYd9!Fn>F2D!ckUTg<HQc9-f71uvrddd6f%(T3
> z4Q;=3DFhCCq#j@)}rWI4+gqcUV=3Dn#ljGZelh~96;8zhdFt#;!K~_7@#Q1a`DBIf8?vR
> z<-wwUt1xa4b08X<w_yqVKl_<!pZ48VWB+%aTLLy|lMJynw8~<q=3DPnS-$dgB0R1Vm~
> zPFzEuCG~~~AG@3WjFW@xr_f|tT|3m$T=3D|z5hi&zEMjgem33-p`s@`<~eTB~PaHA(i
> z9y@;{otrEwXk|VLf9834DS0o(f0n<hFI1;AGHt&AFfq2COMO%-6AHojhhPnLcv)0s
> z3LQBNS(+vR2m>Ihx&+Pw;5oxr@3fO5$@>4$7};hVoo{pXqNFEPPj&)&XY<%uyzy>2
> zU7>4#*o=3D<YLUhZye_JAuPxmBearF0Pl(*~ZYPcc*Sl&i->yHg!xRDGMf05wdXI?h2
> zJD(k>ZAGqUwcqK`RkW9Wd3E||A_@Bv!9BDg!E19dc?jBsnFe{yzQYJ=3DY7bVhr%b4V
> zRBR^41|RpqCIe<9dd~Y6E&Y+<kG6Q5k?Jpml>;r+(w=3D{78WB^Hi@mmbBTHi3{*n`~
> zuGsA|4j+#+h>r@m#N2i%e_-M<eL*F4sZ-d1%>>bS4y?kGs5<cVQbu_x9%b3JvC{#h
> z`EX6KeUiof5|+YD&sePR_9{;h(!U6`TZ*uFzb1x-siG|-y{dV(@TKzJuP_3Q5OpRX
> z#AjODh(#MkdESkge`Hc%fNWB@O%=3DYWlDO88eu;?z$aG6;6gR{yf46ITvBMQgvCcf4
> z8{va>*_|cO@1xCabWqzF%rGAX1o@L82nzLj(#FG%Ua$wo>SrLgo(ASzJyBR3rGcJx
> zOR_Zr(4S3-41L`uFo@s>h{PeljmWD@(X$Wn4D-xy0jQ*gOBTkPUJjH{ys`SBeGG&;
> z6pX1PhYAnmE&Zr?e@rK+RCxiNpc+0$pdn}5(|~TP&IZfMf-$y*!@OxK{|r%uKGOr4
> zbt?{Y<7t932ZN{#qyc%YvDopt;yn%t_iMXliRS^oH&&%I?RzMFsYuB;>7-R~q^;So
> zD4(S)rvrg3kUb3F_cG*Yt_WC-_%Jtl)a0T&+%JxJynwble`E9zgqF#iRWe=3Di0nLIG
> zty^=3Dt9~A8}d6M2=3DLD;=3DsT&+Qk|4z44B5wu+vyrT&6@4j%m#-Wd!G|JwTu*wfmZa~^
> z-pH!;yL`=3D;^Fs_1RaVId;Z9AM5sl{=3D`>VaX`w6=3D%_Hugf69+`#v&+SAJ5Pd=3D@G-)=
B
> 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
a
> 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
aae
> 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
c
> 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
v
> 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
slt
> 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
=3D
> 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
=3D
> zw_~5GQ!`~`xV(ayC-e28CF-o~;!Wfqrw2W#ALM|c9G->W_e@Zu&O7D1RsD4obqvml
> z6L}!C&$L>xbX|YfQ&xGVJK~w@+{_YSBa5@^cJ!H{E7k6fd(yoK<#k#XWwFJ~UfVN*
> z3nUnkZ7+J)xfP}l<qoRRMTsrUSs&BpzvC!iS2h4q_k?FkmWGxGY7RIitYK}1#F<}C
> zjQT135}IFPCy7)AAXa;|Ns7MBSm+s2T03BOf6<*?L&JagZ>uo~+TQ6#$`m8ogs`sx
> zn5n;(6&co5iIL@K6#qR|TG^4<)S;WtASL+o5A*JL$Nf>lPU<zJ<r%qFc54?b@!d{8
> zXVlG8gn@p5v#dnw6O>YahjKTZk>91`7@iJ)l6%v{9I<}8k!V=3DNNxhzkC;ym(nAlI}
> zEsla&gr0v<?jb;)vlj*)#(dfRjw$iX^rpSi70?f|vjJ|hC%)ciI#|*7rK7KweTS+~
> zIyP^(_-=3D4X&`5g-t)c^|EHwJ}h)K5G4>S|w=3D5&uXr>h<BIp+NEom?~j;@6P4ZumI8
> zg2%*KUDjpsr#uf!szLsa*KkmfQVe|7LJMHqqW6DLKhx3a1BOu-KLGQMP4M{e!w)D5
> zS_Pk8tL*|&&Vi@~{Dgu7FeE%DeQ1381HZbd;Ei)P9;PH2hef^!3PSLh6j-cawOo_5
> z2d7-c2Nkur95B6mG|2%q)q~KkCb<-E-<!0hb3=3D$GCR=3DEvJT11<<udChdfV#{=3D?<R1
> zc5HtW-}s^fAglkoUy$*=3D98?h8wI0zJmsf3s6>eqPHiWjXZ@ra^r-`>B{!pXzP{l+4
> z;J^R~VHh`&cPcK7nm$IGDOlc(RHqy9D4#XVU0nXVgo%LyZpuy05R`-e(WxaER35fB
> z?>2)OPxqi-y%@|2sxCK-K1$1y;vD=3D+hn9cX4fvs~!!NmzO(wi&3}jazWp&`VkxIsW
> zix<gE)Lk=3DV>+opT<klgofBBiDM}>A?{2wCwx{+Idl5VmRFCMfBE}fiw5jpy9<VeEp
> z6jwlQj!U8y_XCJiM42?v1+SZ%q8UXuE69}UmtrF|x-keFc?~kb$be5O61v80UwD5e
> zBK$eZsL0XRqA{FNJOHXQ8ZSkD8#upiUy$RT_EL~4pCB|S2=3D$AZyZNf+d1f*8mGloG
> z+07xi$jKH%iG9IUnwJdBPxz$;G<^1PG~joH3E{)NPMeYxL0wsY!FxDAv!vI~XD+Os
> zV`N<vx^)vve4AJ_s|D?irj>@>l74@HGE<1%=3DVwlyw8wu<vmfQVr%wHbH>9X4Zc{`A
> z12+=3DT!Y)fy&M$0-8EIVl6HXt-%{V1+80T-zx9UvC)FF<PQJSSPDoCStjPHa{J6M9E
> zngg(b|JfXZlzgZPDbiaa^k?<vXnV&pg4^^J?%4TJ3&})*7!R{z7cDK5nz(=3DHLAcPt
> z7I8pcsu}zZ$S+l+=3Dfp~rJTW%XyKvzEXT{%T@I07kEBB&R;&gu;dv0Wxr0PaD>E_<|
> z{`6M>NOq_CE@!RGH<vUpK)t$CcU15Jn8z*1)pv#mW2dZgi=3D1zxmoUd9YwnVJV!h)p
> zUx#ZI7vhhbiH8(?1*LZ`ixhwEArNI@+`u)F>R*u|^w|t7E>japH6p|zu6R1mTc2}&
> zf2C`AE%p|BhYSUH63W$>xu#E118Kwrtwp8tsqg~mrO6zj&nT2Y{d}`cgCE<h!6;a4
> zijw+vhp9Mk?@}GQVzP_<2~w}6qPS*10yGI+ENViFH#+i5oQY}TA})VB%w#Wx`=3DD(;
> z(a@-6E(<Heajc!O83>Mu>Bnff6V`?{?3HnG0*2{&=3DA8%|$+X0VE}TJI^hR6b5;THf
> z?JDb@Cy%EGZ*NYy<TzTaqdK+sUNNy>A(<v@LSdocb}O+WCDK*!IEIhFuJK;><*pZG
> zLoZMR0nd?2KeXxxQ51hU5j1nYpA>Rx!@*NCJKy~m02k7I;x*jo-CU#3L0->q9#q;x
> z9Et0{MH7~4<gk!n)#>NpO<(AVF6~;N+LR6Yx=3D-ord+`G4W3rMNKIy*d&rrf`H2D!J
> zpEG3j7{&dXuUxU5xu0wvc|UvJ&(03Zc7$^m@rsF$lV{J*tJ8nsu(yCp{B_bXv?S7!
> z*JGB_7w`Nx@bSc8O|nAzgU{HvA_OYOQteHJHz|3x2opV7U2Ym8_(oD<4dz8-QGq14
> z(_*3psG|LUnFNc^4wRO_^J9Zv>f(`>fQ*u!MZaeswzPAp6qV4#A(|`{D>jkiS{hkH
> ziXaA_qh|VfYc_v)jL*=3Del@7Yl3gyxe_`3b2FIJkvu~09L8zpype058(l0l}%0W(C(
> ztvVvJj{g`1Aip(nPpR_~3T$@xL~ZFV`LtG*Nf<kyXvSJo0uREc-f&nVe&>D|oC6tv
> zPG&yc>eHO%;e<}_RmECF3yvW{dQGB<ppT<&3IaUR9CLrTb6dq-V{iH=3Dv+hCB#elY9
> zIM^_qv;WT)xe{t;<?}7FCDQ%FqjlZue3^P5u9Z1R1C?5l6%nTai?S3{wh1Wpu>l23
> zcoy4}G1tyrmG$^+fWuQOzK?Q-<kfsj6Vt&>(reIcA*|7TdrNo5njkrR)K9cNND7OU
> zWDAH>>CAs1yGrp<;IIK8EH0_F?(4G;&M+=3D7mrnyqk9?}l@eWl1)Ee8}$*(ClEn0(7
> z3VWdf6(An^_hF)JAIkUA=3D^5+HK2<UH?)L{MU#LEw#8hn|RmlUloR6{=3DVYsl>g{|!c
> z6^xZ44UFkE&LX3xUJkwaGXGdmtFF12k2XGg`f-0>JZDV)$F4l;`8dVumquPnAK15a
> z(AF+z52leIqeOA4wpIZyu?2fBM%nTzhK1lZbM|{9?h;!}aO||R;@=3Dh{gks@ne<)ya
> z*_4VTPq`AYM2x4BNP>S*0ni(=3DK(Fl0^xRML`?$@)xbqrE@`@C=3D484P}r}PfioH2<Z
> z`K*8MwOtR;Pj8@pCd!id*B*t`_bYOLsNIISU0guCxDIWpRAzbi&|#4|nwu-rjVxRC
> zOo`*wYDb-oa#!ER60X|r2)OV-pmlrgz-ROAEC8R83@Gyd9i=3DJjHMnZdju;}B*ZUgO
> z(_US2)rHJI<iN(Gcbuyc%SaJ80&?%JSQUTvScL)r!~IT|);tbu@!^0gKY~QJzQ8c?
> zTMLzq&xVMK=3D<N|LH;!lRbX1&9rCWP}T`gw{e-QC4@P;NpLY{Z?`I9toKcDqlH2J><
> zOSigA6a$HE0nGu%Da96lE7a+B%qv}$-0slQP$vTb1l*2s930<53gju&W6C>Q@2h|G
> zA$&%)-W)>(ku7fRBs~b6n%%(dpz!0;*oN|>N;A!4?PVqHy2ZYGPW?#E+w7A8dI|l&
> zoV~@iAZrP235Og1s*3;j)-jcJGWOF}gwi2t%lDRg0s<}9yif&<W4y}BY4zpX)bj7R
> zMWGy-#JfB@WX=3DHuH+1O{5=3DLM#J@tR=3DtuS0&!wlnjm@B6|r|oi?;ZQua?RFC2ETfsQ
> zw`BD#z^1E(lhk+{%O%yW#x-hM8Wx^myzyUV0XON0UwdUgfY54<EtvAoz4a#RWSdPN
> z`=3D&|6&}r1ri~hB!b6)gpqPnwwnFaCgL!CENn9H?@bK8yFBR+s-U|+5UwsC)du`;&Q
> zwtTIfS8Jtgwk`}=3D#BHXjvF)+XN|>|0r+aq;cv`Qb#HUqxd4$G-WzF?UcEf?PjP0$D
> zCnxeVpE-o4eC8MBE8_?|JC!C&i+|yz91j~dKRqOP^a9DGcvs3FQt258EF!(TbIHrp
> z9OlCX)cnInu$!~{SX9_fL(+euLe&;%j!85lk+#8Yz#UX@KL{H{3>shYWr{L=3Dg;5?m
> zI{=3D6QOh#S#69!x^Q5zPHFSYM0ci9^PSqkJ2KN0QKZ}YQebF=3DLL%(WgSj0!UeWL1^z
> zKNs&9tyrVBN|`U|UE|F?Q7P!wocTwgqaCi7J7(d4!PNqG;pg4oSR#KcGl!{h%D>}N
> ze)P%&_!e4#35X-~A|mIzpK1bfiVz7C%dHj``;F0QYk$Cgp9YRo#~P#xx?l9i!W-Sl
> z$RzFu@7|NS))-$8xZJZA3wX#X;CLQkXNt3X1@Xf**c1P$xqEqa`w~0n3a+c>3k%v_
> zu2OB)n#wd!*8d4UBCvm0s-G19#3>Ic`a3&Ahc9PyzMSE(gBg!!gl`;f=3Dpzu0hYY4)
> z*^s-^INfG)IG7B>Ce@xY-_FN<Q&|MM$Y)cF`Q|181U37aG}PnTvexS`9Z^TxnJw~(
> zlk(9BKLGC)c_)WUGn;+QKvfbQS2yJV*l-B)Uv4<LkhP|ntBijzKP-0veze4l)1h!Y
> z-`bDYS<IUjZ1%+1VU(QjgFkz6d34h7=3DlT>MJcNZvY`I0j;eqg_C>ds*i)s(tYtB>0
> z^X7wp<kGQHTEB7p9OX>#uT#!uZGnqH<jEc1fU-~HnE>^1@eMD@RdL_k#}?e`e@f_|
> zq}RQE=3D$#o8<c@!{X`*tcSsbQ)O46&KmoL;hqZLjr?4nvR(c+vFXrqT-^mgLWlV6sw
> zJOLX$4(;Y}TzQd)v8jMZVUJsVc8`9&e18<HrLp0^a8Hb-Gt5+cEcUY<8_-rP@5NP#
> zV6Dac${h;sFTg!EAZe>lF#;cXeDWagFzMOQA-y?JV3U6g3KWTfrj2lhO?o70j753C
> zbNo=3DaJU7zdZE($AgaCDC<|q-gN|UB0=3DwK{dOLn)i*hE!U;x{M6a?)<l@8J6Ju_S2`
> z!fkn2ZmfCZ=3Dq~m2gi;h0;CGtHBEv}<2r-S{*rmiODVdAzU&VMLo;)9Aa+?=3D%0oaC&
> z2aGD?gAsqa{ams86W@f^;V%>!nrB=3D$P9Ax^j=3D?i^Mn%K|62$0JD$jSw9mF3EAis)d
> z;zC@5xk9KwbSb-6l_E=3Dq0g)6b_?k~U5KmI&K#-Nk``LL{#9PL3cG%4yH)twQUG;{}
> zK_&UQ{L&K5HV9itUV6KsZOR!0;*?aB+%B&PYj}Sq+DFYmWbERC+<+Fp$<N>B<>ba1
> zn)RhSEeLprws_gVH=3D1n|0LfaLYX98(A%9K(4Y@cih9P=3D6Z}n_7OoHn3#HF%>I9SGF
> z(n9t{Nv_ZPe{6l$yaAhSN;i8%o(@?K7|X~IC|ET#Lju+0mvY1PxYN}hhg>#rlE|G0
> z*j9hp7dBAoTbHm^Zy!N%abL(FH**@_0?_fXx<&Dbk=3DMYL!XO({m5zeHB1S(_&R%Nw
> zdW7(%>h8yqs-9c%0-e`_x&V!{^=3Dt*u{mSXNIr>M1FWSV3yxJKb*}PbFMR-GNw!cf|
> z<0%&kP{h`#H*Y2g&N)7vzxI#)|1eyoc~E~eiop!x)jk9omX|5VhDRvzOm4{jgmz5P
> z29hWZos4K6nrdvwrB~q=3Dv%cFz7+4eTk>R7IrgUmQXJy2ptEJNfcdNgwm$M@njMH@v
> zscLyQxha3VOXm#M=3DcKE=3D{iuc6DYWKcVe$h$BnknU=3DfO3Y4LVu|n8!64W>9}Mu(f~e
> z&Ve&daqKe!W*8#aCh1BxN+YXwqQNbaV`|JS=3DIq#$B?%Qu6(7{rRMXadYT&?osHJWK
> zGcg{L9*Ogv5MQ`qKEXX79xEBCq|3ky**Ty~R&N;#_hVnTYmO>(-nQaCX^1rYBaOfg
> zzMG<ghD=3D7~@c*_f84|1^?(DNL@p^x1Rn1W<^5Wa5n3({CVY;h_ty+xDWxKsq^H>QH
> zl>Cb9O~?Glt%8f9Gdj6Vlp=3D@Qkl`E)llO(7<OMMDq}<9q$(*3_ItUk+J9FMf);4DD
> z*V`{-uuo#1dLS!+&Uqbm1BSE4Yvg7=3D2;4zB9<Z~O!g=3DZU<^oVBntkLofCzs?kXhhi
> z`QeYyfOQ>EgzCoYTplYw!I)^Stwb6lJS0rOcc{hdgEB@*#jKp@Dh&bNd{fl&1KR9;
> zTw=3DkvH&PS)Od)V)Z#X{m=3DmFtndjwS1NXRX(3=3D?QD%TKz7_V%}Tkb)2S(v0)-;Q0NY
> zs3}IMA_@rEUQpzTv_ueQZ1I2SJ?rkJb0$CqM|;o@f~H~{1E1w7q2>FJL8L_qy)qo}
> znwGTUs|b1LyNTjXE>>wy2L^&*>h?35u&#d}DP9V)=3DFP{(i5bFCMhlf$$s#3A|8y0L
> z)4b!pM3ly@gGZ>nWN3S!oF3oJtKwJSJ)dMQF^#2pMlt)raZ`tme{X;C(q7N+OH3at
> zk1><%=3DG1t|JSOTfWj-FP2<JNfxuk_Cdr_#>v!Zt@J<9@{)?bLxW(SbS=3DCgri^x`1$
> z^Hh}tfq8y9=3DSYVCY2TDLvOk5C@fi7p7IBFyRLUKE(Kf#@r7!16d}|2_V!Y}j^u_`w
> zBy8So$$US=3DfkBJ~bBKQtiwDV#1qiSRln9fs*wl#Em$`m?$0|^i7g<<3M??&1l0ddF
> zsRhG9qL(k8!d!Qs-pA&Po4SsUm_Bn(c+VULO+V-w``<MZvwPubVN8;(B*91AjtWN{
> z)-`*9_IqwDV`A7E#rSDAlCvyrRajHUkn@}54Z00>o@}xDGVgy~CUIm2OXtwz-(X-`
> z2b%ZongJ;ZgDJU8ZwkwTQJa14V`%Aw`NK<(XndLwSxeMXSrL_NVO3sJ>Po@}oQ7M!
> zjj@ojX9t1EMR`z#=3DLZF-7_y)pq1r!>ShepPdhdb>vk`O-)vV#$lxa=3D>UM6T<pEq}p
> zdxnM>IJ1S6jG2GRROoA!M#w+^&Ku8^mkTuwJ^YJ*92lMMP$pYm%zW%qp|k=3Dj`jIZb
> zn!oLn_4QJxBy}||2#BMm&gmzTNc}YWEoqm0$()TD>rl`b$gy4vdrxrMTWea89aOl8
> zebV>6ldzxUTGIznj}r{;(rHr(|MUP3Rau*db-GZSa!!9Ik~LGQ@@T43sr7E$X*u4p
> z-DCN&U)M=3Dyj<pW{C(zAq(>EvOv18PKbmdN6Y7ZmE>eI6fFP}^jDQ%$nGiPpxbPTDJ
> zvkb>5|0Y*U1@pQxQSVqtn5os6f!RM<4b}pnCc1>L*7)4*uv03OF4%bL7nOC&uU*i=3D
> z#3|j^m12M4n1O^~0WxYzX9#|<2z=3DdP&XVi>YVhnB*ZgsfMHDO+l#qXq4;?=3D)L2zlJ
> zl|RWab}>yw&RfR2t$GLhuhi^4{2g0)%+uSA%(ZZ?dgp*B8ntIfO1!vOiXJ)FnORJs
> zoEb@}%%r-<`nn%o>yFsdy$Ge2q>Qug#X;Lp>DzzKBTs*~B$U~kgb#m4;Yz*X5@33*
> z*Wpn3EC8L`AXJG(S7}<74%fi38qCa!^;SgY|Kk%-t+}eEl8UWI>03gnZOekiopvjE
> zK?!^j#681aG=3D=3D3JXCED>JB{TX>vmKZ+r-XO1|?&}R>!UxcCvk(Oh0a%NVHbr<t2?7
> z0=3D|EeEFPXRka^>*8?Fa;G2EEr!&cWrF8WkV?I;6X<GT}SXLdaHfPkX7jmT4J%ELjK
> z%?0$lAsmI{YW#Sm*EI`2y^7|tgRI=3DD;8*Ns!U?2XZPFZ7=3DSpH4$}#k<wG!EIcHn?r
> zQt2JetNX(0(j&d+Ge_sz8nDdy)J%*`*3y54*R!i_3U>=3DJ#!^y%Mm4L?Bmj*j^UHs5
> zXPF6?@zVpefb2R&gSn<{CX3!o=3D|@+u`C{$=3DLPRYXcQd2rUiD?imqOrj1$mlmm4CQg
> z^0KXHhNL9xVGOWQIbo&@O%KWwxOq%=3D!A|JVPRZwsG<sgp&nj>t1<TZqxiRWIxB7qB
> z-Gp;0`k(S&Rt1U#Ci0!_f9rEPw+E-sNV+RfiwhQSMyTDN_KlM<A4i7oG7qeCGxQLh
> zLH|ytF#POk@On05<`eVIbNsjzsyv{Hx~TPJ5eWg(5o6Go^ygf28eCDZM;r{${VO|9
> zGGs+T&qLtI=3D<`aE?}v6@d8o3e4i|sbw=3D`pVHQ-HI21ZKCu+?}#La+K#k>@3a(Cdp~
> z$L?<S{Q3?=3D5A5olVOwS)Pnw=3DU_i&u4Sc&{OParSw@7x*`z2NytYZVOnEj$CZ9WqmR
> zr)+a|JV1k88UTilku*f?1lJ1;GVN9m$dIuQ{MnQZ7P4hZX=3D_q$kxM6C%ol$IY~(}|
> zQ=3Dx1tmZv&`-A|z*rAv$$F<7;ZwdGREZSaB9XQhH4?GbK9?!>oP!F4HcyG&_e!;qac
> z4`}>`QOvx$GMwd}ja+YBhSK9xWk>FAx2{f&hUYw9KoQZ+CE#|Si!qnxDr-Whh{_b#
> zCHK4RHN%PQ9(c=3D@IHGBD9K3(Mv3@H0NPKL>s|^Sj_zk~U>bqvwZ#l&?Nt-6qXP0`i
> z_YdDZdets(v#udOcXT@<g{2CUzroO!uWZ#PR5B!Q>xxFAml%<e*>`Hn>)yt$jlGG6
> zq#9PndU}5TiSEE}Iky5O99ddhS@Z~X%E7%4=3DeJkxVPC}Bj0Mwh+e&}@xH&tXiW%um
> zPlOQP;^>y4j{_(9LU196?E7+aL~y`Ag>2n^)P|}J!Va^14P}+2ZtccU7U-AZl&IgW
> zz&S#F=3D`7<J9L7q=3Dk>@0I9ss}2Y%J4hzcJA$`zd)N=3DC7TEsj_ob(=3D7u0)oG)T4?wi=
8
> zG%x><b~NZicl10z1<ilf7;{OhTayM<95nr+l72T5R!XsG!5Ej=3D$zbPPkq0)d0Oa(|
> zWGJPy9io`Uh5nx(ziUgfg-MBCsOMi4Znv+9ZAe2xYrQ^X%HBjh$7k2>JtU}cw%!D4
> zx#Zij9!3*T`##j3w=3DKJmdeKFIuCIn+Td;`F&mrlwv=3Dzi_MTLKj3JY9xq*Z07;$lvV
> z5re3)50Ruy-BPz*(ibaQYxDy0pfAM`(tpDIYgyH95|82jLQNM2$h$xS^#j{jPNo5~
> zzd<7HR>8he$p~V0)%&zoUB)anf(_CGFibKkr@EkfG-UWxWvGt0YVKrGYFqB3%xjwh
> z+gVQY5{HQF-Z+0smzpddgT_3B^U{_gq{6Tm=3Drma6jxGOjwX5-M|23Rk92*Yfz|Jf=3D
> zC&>+MMr#cPu4ZUBk=3D0piXmubx?s_^kBWi3u)Cy-lBep!dZz>%keHL=3D+mQ*Or?HaMC
> z=3DXr~a$hR}r>P|Ap1u-B1B8vLBDGMu1aqcu$hhrPwJiLFCBv%&~w?W=3D1F~n!)!L_II
> zK!G)nXWwu@|HI-0b`8@Q&p;PU)roQXOWY<<79a7otKQl1-m3hc3YO}6>PBPERm>Q{
> zNQCo?S4$m9?Ag+|%jC&xr$#dRuZBzLpv&?p@5jS}qON7&B-;cVmmi584qx&iWP$ma
> z+_?$SiVuGzQ+C1){sn|>XHI1zsC^vH>xoQ8L%0<HIJU`1r6z~IAhgUizwt<vVFw*K
> zxrb_-iJ?X_=3Dz1w^@*vwWm%j}mtaX0l*<l{?i3$Z$y`s^VFopuP(O^Xt3H62JPFQ(m
> z-rnXDN&-m8<wxD$1N(pY+(hE4?n!R~$25wiUTlB0?VGMwOMxs&8OE)+7XY}7yKx@;
> zat~0HEAy$)8pMTs7GQn1uj8>E+c{2v-ifKrM-a_gy?uWz1-Nc-h9Z3sORt1@<E}Xp
> zk!R~qkh+AAfjg?q9-UgaxE@JOk4X*}hbfM6XPpmWaWm8f4!ESy6<Un6slI(NG_+3f
> zg<^kbX^Flml9uh$UDU}FO%P3DNK6rgTM{%*e_0xdX#LVHaR)r%LQxn!w~r+yTyI&c
> z{;iIxje0S4zS&}CsJ_b?#87uyVHh!l41+V$i2ocdX61~D6D4%1kfd42Wk*I)XEw&7
> z@|Vo=3DN35Y+GULq#DbDNp2)F$|!Z};69HW1BykiQv#&)N-M`{TM0zadfj|O_aXSLkE
> z)6n;{cdgo*(;Oh6uR<wULKj>jRPRJprM~hLd;^P3*1(|OgR5-#Ogbp1+yuW!NYTZ)
> z*x;jQCtX#b<bi|;5Mitk0$Se;Kn~g+q_sTc%c@t2j3}r@BIi=3DSTMmbDJ0W+Ii4}j*
> zjai8Q=3D+?lF@o7(C$cfgk_`8NNXnRsc&6s4+KY?!Gu|0jiT9UxzC6BW|R|RijhhzQ5
> zfiL<oB7URKDg%NN=3D_kV}CzX4&m$4REt4bsz6iJA;s8%|Q*_NTjj~<d;ti)Vld}Kct
> zO<#-u+EhB0kVud9DjwQ!ToQ~~Nr-=3DFA%E`?^8V)%yuI7Uek0J$D5JZ(HTjktQ{qyw
> zU2=3DB@iKy(&uwY$_$fzhqns7v>{-*oWZ>*;^20mboMSr`yIxnkSnjlc)*wp->h{zjw
> zTlF@cICav7C06|T6(YzmD+j%{ES@yvI(chW#lHmo;ywu>4`MgwHwcGv+=3DhRq9`V=3DD
> zmq(7<#8xl|l}Y?8_qG($P8_;X;p19{dtq9zX%9`2v#&)}$g8e;=3DcLN{Wv6e~9}}mS
> z-a=3DxQf5M~>>S$GCYD1m;E5%-%Ip7&s`aUnvM!0aX)LK8v(kl0dL|BJ`2cb>GO<L4=3D
> z&HV(fhPW-UG$;T`<5NbAZ^D1WPo-*;alV{b5d?dRaSuT!@7JY>kBdE<HA=3D7kl)@Lz
> z_gO>X{udmh1-n_qMq|d-?sB3<2~xOf`}~pciVfn|7mI!}+T>9biaxh3gB7{Q$jE!g
> zU``?Nrjy;X!G~Dx<O{8{A)|(e%TWzQJp}2)o>Qb2g<6FB50Wt+LpOiR(MBBSu;VKv
> z+b<<r%bN+v5@}Gs<Dk}pRV$t4mz1ZNG_knoeh}&(N@Xdvd?blMe>BAdK^Vdi{n(#0
> z$YV93da;-LwbY23a#I~DAQVZI{9PUtm6&T?3$3Z#SVU0{s@!dYM4Yrd;rR`^_bNxg
> z28Mj%z*6m{H$}6{na_Wxvk8YIZJzt@_`t6gnekA$W_5jEmG3y%AXHDx+g5uB*weS!
> zx8t<vES>ekCHwzvx9T%T4QHEgQFuvj6zX{UWRsK8mCz9s8uC#n;r7t(;A4cO_z>@6
> zvqmQitO;@0rRhPlG!ErgGkqpogzxfb^WW%(HEwi>Z}J+1v<`nTe0dh5k)~@+w!gL^
> zF+x#M+dFR0=3D|ovXzd05FCIjVSB$j01Fgd-wE3qs#4P1`LU`$@$pV<9ON}79>V9i?I
> zdVyR6<Y8oBvk%=3DUxMh=3DwPp>HG7<d9mcGz|cRA_#j(=3Div!32q=3DwIjc$+QZ*ZMKzcL=
J
> zw&{xiJr<Qt|1p2yv~3UZt3WavayQadBu2CY@m+8NL{PLTiCm2Nw~Z%VTJlDdlbLHv
> z=3DzI9bIY7}kuXZJL<Uc%pD>-7D!W_{CvI_wY$ib<m;ps?^Q2cYn<R%8;TxTPTw`q2^
> zsDc4a;Rtro8?HKxiEC!eX=3D1}c^cujwtAI)PZ1PDHc5QzH%B6#R!kG6ewVbn_N_hco
> zkJn{$PxF^!g!4e&jGGeCTrcAMR|gXrr9?7J@ggN%NDwURA!d&&W%3BY5ZvtPiBS_l
> z*;s_s`I6FOY}ju8%FJN|YMACP5_3bI<@-`;I?@)_4}9sF<9rGp_a@WW)yG>+E9gHp
> zAU=3DF#Qayh-&rjS7q5|2(j0;yXq8s!A&OdaKW0XY-)Xk59`sa$Tw*9)}xL+QMfPd)K
> zL0U|B6=3D$a)$8f=3Dh&3i;%5t~591P)LgCeZSW>9Ay4;wI)tXcP5k2DyP%z;p^@o=3Dyf%
> zxeu*ZJsPgdt)9xvulWO?0iHiN@brjT$N_s9fH8lso|9d+*mL+bXe^Z{M8Ik`Mv#k9
> zed3F^eKzc>^*(`Wj6+6Zmw?yPtyU<%Qm!YIC}jI1VT*Wz;y=3DDA(b@n{XvJtZR&j97
> z2N;InfyTHvb(9q@;zAFe8-}^hK3joY<*7<wU0beTSnN%t$Ax&<D}4_`bMgKFZGO&c
> zSw4T3Rg%^_$PrRp@CMgi&d1E!n58?qDV)9q1y|(`EqY7Ukr>A>JoWpY@Ep52Yfd*p
> z%~3c2KS030yLRei6?l9$uZ7WjD7b13Ggj(a78L?)r6C9?JFz_}8$St?xDhR~6B16#
> zlhr_mtAkl(pFbA)`mS=3DU11#TQsI|D@-Rtal*)lSJ`2x(GYTJmQ#>CMASPiq=3DO7}-J
> zfB>~y<r2=3DC!Ew*|-ACbS>Ox>xH@{MHk@&74YeDEN4jZqS)4P{Dho`mawq-bQtmSbL
> z*~-MLW4rFvw(bh*J$I!N+F0X-u@Niz8)qA(pA9=3DPQ^m}mJ0Fti=3Dd`3A6052NJV#6^
> zui&hId+*WvKXCqhy3~wFiAr%gbUubD8NUqyOh)~zWNOa2l!&o$@Ks%aYU`>6u<V>+
> zIi9G@{DENuKer1>Z{(d(;h77yIpFpN2xvbMalRu5L^FRbsriWZqckHH8Wo<ITU}jE
> zio6C?s~x0>u6z1m>5jTD)9`}7!c<DaHP~B!5d_SO|E8pRitO+eHqsBpy6afH4*Q$q
> zVA5#0QY3W}wl1JFn2y)SH9UmQ_#(SRgQb4R8|@GkLOav!Z}?)-J<*@CZHj7zHq%cA
> zfqa}{(`{Bd-nd?=3DqB3j1j7du1cAP3olKefnZ^Hbz+EKIwjd5OAvhGFeg5TAGwnz4V
> ze9Giyov|tQm#pX3Rn*&M{8DFEJ&<lRkMV~f=3D8RAiXRA{Sc<%o5-Qqm|p6^#K4ZJ3P
> zRRGe^`}S;?VA!$n(RX$NBL&^pCC$U(H`1gAcxVGG+qs>HAN5hg;E~wx+0r;gjAMJc
> zMSd3j)%3G?B}_SB_^eIa2@hfxmNx5us<SySH8TYL2YgZugH+5pdXnN3e{Yn1tbJ!M
> z3BrG&Zy2#*;#^no>i}16R5#P}NRoSJ``Og=3D<{Ic{n*vPFawg<-_k)}5uwp%Rz#XmA
> z7p#_c$GzL0A<BExzS)E?fNR$C6TNj58`g%z%#N}oI4uJ-xD-jYKCySqVPTtpKBlM@
> zpq9r#!yEAaY-*5^@JI9Dsmb<ACEG(O@jn%U3-9cH0>U3&GIYXcrlq-&K6~*%Yu8ZN
> zs~cVA#Ptelg>|aMOQ}3yba_(PL{|)*_kzS4fzv5B(;;$2+=3DB!H@S*&Lz<;II$pd1E
> zTz=3DH)&opaK0fG?)I)V+|Jah|xIxB2260an`K0I*o?I&xXGW3fOr)n$ucC<gqM7&%r
> zK_&LlJc42ws&vLS=3DU@xlyv+*)3t_8U&;rtoOIZ;ZR2Dde)c3<jHF7gMBDo!2o3BY#
> z2&f|d7c^R83V$q~>dOs>edu8FOD*{mub<&6=3Dm@m)>9-p2g@<Ho#Ur|Zb`SMAWa@!@
> zSsC=3DG2_CXUc0_K-5yo7W@{~^nckdZRputs`i1xb_C5x#|Gak^rImNcHB&u!hqp?7>
> z-?be&oT7&@v3ag0T?}dIht$gMs?}x%eTg&?lmb;B-^3uvN$y$e0+bhfVMAq{T{&#S
> zT4ByodcbuO0_U+>hnfq28wsQEF(VcFD^WJ8d>E-`$TN@bDb3Tkn(X^}eQ{fif7dW)
> z27vkodv8x70)m4l@O`z5Q+JMOb_iUP4AtU{Cv(H^L<?%RVqm7ei)Tzv27=3DlzX);Nm
> zd&%ZErf4DxTFr;7a}M;bT-2Zc{0Kk!W_PdJp8#}RS`*{xd1uOhJt?0<Tzo^D$Zjqv
> zw3Z%!Fd=3D9SzMLPp53MFH@+9ydw%>XwTkPRIdOx7366F21N|r+veIU6^?*GXhWa7x1
> z&6O&aw0#n0X8Z(t3T-F4k9HQhZys-_paT0+uF!~fPO+LaVYOSF_zVTFk1FoFR=3DYEL
> zAcc6cyf@#LHjbx%%rgW=3DXc<nZv<<V+-)5sCdS=3Dk0|0P5cJN$MMMx@s*Jb$O#>)u~#
> z8IjE6Tyi@!?BT;jeXW*?wc2uDUt`EBL_*6n2JmyhQ4M~M2cYLzY7?>SwdN0{d+FN@
> zpUPJ7z+0}w7BqqVNS4?l8Vd+Fqq`)L(_S~`Rcz?3pg*#IrmM{lNm5FJ&_~@Bp9;KT
> z$z3c2gOkPA2v6Gw0UY!G-x8xX6_FrYkk^5P8WM4TJHycREORHlG+OW&wP5Fe=3D&OGE
> zpKI|E;j@G8NajHZ0LWx+`0-RrK7L#+@X%y%J-O{~WQqw?9ca_pDzPl9(~ostcX6zx
> zRY{DoPjnZ53(B!z)x_tfXgDP*Uchr8-+;Np2gj&%d9bMUYy)py;;s|zemjH>lCrfx
> z71S3HE$xT1Dk1}Z8Ag}s_Tu!%C$ocmsv+L@Zw!Z4?Rk~Z%(!E^S$1Qg4EX{!<+Vt%
> zC`Xy6HZ?j&v@!zEE*K5>d-CKbQen@tB&9!1!2Za8p}}sh!RqReBcN_1d*jlAAMr7t
> zNwOJWkV5OeetrbO8=3DT%a5}ffSTlFOr?K9chH$vK^QS{(c8<YL2gp)No1N=3DbMZ=3D&X4
> zvE~PN5pOfsPdxJILcMA6?)Twgr+&J7tZq{+rrQ|xnlR#JO+M=3DRSCxnwZhT<YV%$;y
> zeR_X?&7Tso37L6NIo)V<4^rih(bL^U>}#CMnsH4&I2^UCc%U@0nTOdU)dLKuuQ`gb
> zg)cO%9;TCmI;u@0b&-)Fibca@XnM;k=3D`ujUue?CylO^~S9Gnx058f`KkZjL=3D`SVDS
> z%L76-cp=3DB`7KpJ@SJQJ6Ctw+x)T@rsA{6m|Z!-I|ZvktwRNb}Cr-}Ao-zHA8@x;Ti
> zG#FhPm*QdpS9G_*difJF)QB1!T{2(R6ci(AD66!Ic-i6Mj3I13|7qb$&a?;a$s3-x
> zO$P6GOR5aMi^f3IRB-+ElSFsOJHRyu1<Nj-&dIEcg!eatr`Bw=3DA~#FE8DceitAsj#
> zSa!{1{o}cNTG8;|dcq$7nV3rS93SwdSll0L?p#v8|65N})A644gQ*RBkhYL*m5wW0
> zY;PrNNz!QY67Zn1UOdB`v|s18XvNN{P~o8BB_C@A7msukJ<Ab6akj5cd!ni6M61Xn
> zg5JrCVzG$D$ErlN61RvRn`MA<iL?fPMRP-yt`+>xX45I;KqEKBjL6m}n!a1+t)U53
> zsh2Kunq}2;cVvS7L#&a%wLK;U?vYBD4w${N+<C@Gb{W2AF0Wv6Gufu*<<%nz<HJXe
> zP$M*G3>CiUtP-n&eIo7<tz-s2s<swOiy9w|K7AaUHJ6D5Jz8rRK+e*-u#l*Ka*f$q
> zT#@(YYMyKdQv^+8sOJJ|*I)O55<toa9=3DTS_j@`hu=3Dy&U>hW<IrCt!RKC>^IHIo|Jc
> zlJHx=3Dqc>MJMybLFFO_b^4Pv5dcR)y8yj}VcdCi>LfG~wIqvE+s{@BH^n0-4xXu=3D@2
> zYT_t$FUORejLCdeLxW&rar29RYjgiiRXzW#hO%){0>-^v{kENgLmLv+`Dh!!ws^}Q
> z=3D&ClXGTYJ!8(*CLQ?sKlZvf(Xu7k$V31p@eRui5Mvi!IVRr6=3D9mTzf0-jf`iYOrv-
> zrmRH)Hcv8UA0>^nO!c!qr%VKh4~HrsW;*^%Cm*`vABI(W1nc-dI<^jfv6>cCa>1GS
> zE6G{qi?M&X-GEk|pn=3DFpK|`7lroIu{M!Rm2{1uacYuC_kNW~GShY2Z0mt+sIYggHh
> zbpX?VO*t_{47drin}bXA7@q&%<!ItH@pg0v_tmpZz~c21Q>B*ci=3DY%5AYba~l@|;r
> zK6hmRK2_Y*kDwHv*VX)gO(LIgmv}Y2Lavr!gGOBox*K&@T=3D(`M*?jAkOB&#AVz9Z@
> zqcLj!t{M`TP=3DSmkBYi29_V&|TA$Pt**1@HcX?UTHR-?bXA?VWAM|JTGdF|T(HND=3DO
> zoJpN`88qfs$y`M*t_%vmb>rn?-bNse`e3rUmc`;t^y)tv`Ts+I`l)IQXEzQhPjr&;
> zD~lGHR1=3DAhGxh9JGc&Ewq2ov|hphvlGe6b5Egn0Q#Xe3}bI#dXFtAszzslNLeS8N3
> z^`@?>Y%Dw}IR-k7`jfs%U`5T+o`eB#$NxGZmSXvK8@1Ncte;NvL?ZlajX?oC0?Y@#
> zS><+_JI)87l_6Ds`COj3_6&w(U)G2P)x$%Ty-lC+f2g(5c+=3D;^|5Jl$PFJcK@*>GX
> zflgoMzw{**Gq`WEA^@YO8R{0YDcNME@^4F#5*Z2a0&)#$Dj`?!u*UgJ$BjVO5qn#`
> zJI`KstKG3LhUArMZ=3D~)h7LVXnJB?x*r3+$V7u{LXv8p?Nhf#y=3DS6Mxx_zlvjVB+}j
> z`#r7?Oz#KI+nMdga{&Y7<<CSFz5@0RY~e`K1C%$qvaZX1ypSClfB{#=3DV=3DV3;ynk)t
> zqLSKfElEmo52GXHtlFu#IZ@FFb^Qj8Eh(8GqC4y)v{kvjSmvCAG3A~<u_qbG)An&g
> zasVqV|G5c&=3DId_jI{{jQO!*B=3D?MSV>F;?iFhlXwNNNae+%bT|OD0pn^-C$C=3D;RxW=
=3D
> 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
9)@
> zZAU6?W3soE(mGR)Z-||wWa`kE#z~oT(A!d(ZcuDO+c)7+Id}y(D9OaaLZCbRzImKV
> zCx41QJf6hW7S*hT1&-6pb1)K^?V`w~4`7W8UPc&ke`L-wQ~EhW5Q7Z1M5e$qAI;uu
> zG^PRe-y$FA_rZ=3D?Nmb~JCDASko3z`*Q%jg3n=3D?5W?hngY+0G8E9{s2yxgZ5Z8=3D^3n
> zF`UQV|Mf*0!jop!5l*G2vp`Pen#PPV>!mso%@Y?VmffLJ+-XNmB~#>@=3DIUlFxE|s%
> z5lPEYf2~;W7JT*d=3D=3D{q-T=3D{MdTUU@`<B&B*2zCKJ=3DN0=3DJRfU}q!DMoQS^MKf`2=
JN)
> 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
NmI
> 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
w
> zbe3{g;(w)NiLqAxC)f;@UyN)U*y5=3D}+pjG{!raLDc#Vf~y^XQ%?GQ5-?Ag$5EmNpT
> z)@atU{^0^yY}k&vW?d|mHcqu&dZjW&)$;dbSlkd`r){y0xsr|hF<oP^+Q$x03vJg$
> zw_!LB5R4S=3DMEd~@AKFj_Cz4w%X^&r3>))Xa&wu{RN$O>!dkmUknTp6qvTE1Gx=3DLI*
> zZUHKyiCStF)VThAo=3DY!0V9ZXvi<ed^zXP`UCOtNa(sK>NaVc7}ood@29TxSNib977
> zv4hhIx*7yf?jc6%{0=3Dv}%&FI}Tg)d&Ti>Y4!Y3LG+n;oL_Pk)E^(X|P)Llh~$|on9
> zE`QdhPDIz|tUwbK{`8e}QIokiSLRV#&n|Z1&c{yhSI0BfZRtWc<~#c`^}D^okKB6F
> zwpmvZOPUh`j0+55g6Npq%;^7g?OACfpsRqfg=3D#3d3$fqP27WqY!MNKDA)Ws{N>jPs
> zIA<oO4vEgR<OH7xCf}R@LqNR02oz0XaWT-ma;1Ot419@Kt~i{dOi59+ft4n*Bn?_W
> z>z#0e|Nd4FXt=3DD2lU@$$>S|BSDMu)ns1VPRCA-J80$zdTXeLIPT4ACZ>dmmN*3SOL
> z_t-#G+vp6&mrrf+9po`%a_3-{K?I&1>H@{BNZZyE{JUh63)*zNFjUh`<~wsHq*--%
> z?fHKUEjUJLMcM5N^m1-RDZkC{^G-asJWj~7kGt_i2wcsQ%CJw+>B;lr!+9r)XKm=3D*
> z^!y@2R`uOy|F6C3eK_a1E`;IZV;bVnFd2q#)^j~N(9>8RCF^@fUy;7Z=3Dvk;ir|YCQ
> z|8`4{j8hzF0Mi@N<_fxhqN&U77eQT)ruu)i=3DloJ#nC~8o{539FI^Moz1u?+jq&8ea
> z*USnbKH8JPk5|+5D^|_(Xjh^C2xu8Z)~f-rEfH?G)zPkOX^LmlKfrXTDwQPiyj89f
> zPqi+-B`Et~>(4uJyDz1L)s_p^?r2zcgP>JVKkJd>P2sof*Sbt<FwPmunl30*f9-!(
> z658<r+FW#EwR=3DnKLbP~u!BRy(F(s`;6zVDoF{kOJ#R5XkB5;lg*jI`j3?XbrWP4pq
> zUr?ymbxMov)$8R!;hJG}KqceJ<y+{7jc9uUl!=3Dihs6rZHgrNC>TzQtU55FcKY%znV
> zC8*OUkst!p1w28rC^j@9W{j}FM;L#E^JpLf3GN4sSwq$-BRI2dRy`iVmV)-e?Sz1r
> zRG1}n*`@L(5f3(x%3AEq@$Z|gK5*0X(t**(;$o)MJY9<ApkG@k5xQZ7!BAV5U;Xwr
> z^-GnN;rNDVLv@kJM4U|9HTy!e=3D5oa_h7EpRO?)(pY73H3FE4ViyY`<9sP=3D!$1=3D8D;
> ze08IDL@xA~qQ;XQAb?{+?tZp$2o2<jvWLuUqZF$V&!@-%`L>hk%yKi}G;kAD`Ug9b
> zOevso=3D}%&6X&A-4SI_$8s}L-n#PMrOFKJFTNgPCg0pKwI7npF~iE5vp9@}p#YaI#1
> znJIy?R4=3DU2jvHV2WvhU{t0I46Ww$8DN7{&R6K@{h!&#bNCs8>muecetjvL)-g`01}
> zCC-v@H;qUpbyqW7$L@V?HI#$E?6j@*t3a=3DGFgy>18a96fIxCEP6|Sz_P?8KevWLIB
> zKzh5rwcAD|bG!wJD-(enZR`;@<Yb9%7MN?&5S|w&a>7>{5L}?`Kv;jf+E<jrNQf}j
> zf8#;7RNyVLCl5jm3x?CzU$`^%+;2s6jaBG0V+7w&(jki0{8u(!wSpiKX352JawYNw
> zXE>wtzuSoZob0(baqoN70LfVvLX!#f$PnNGKePSdB`Xhn6-b$aDl^Z;%LFEsXe{j3
> zH9h)+=3D6XjkH05^zI}Lw&LSUq4RKH!{vT$Ga#{U!x@kk|(^N6OP0Y7G^&u3;qc7=3DoO
> zg<__RrPYocm6spEfUA>bH(IS${do9b!1-JaB!GnssFzzalxUbRLmNtwon))kIJN3-
> z+Lvn<06@(^fq7*x>tkzl`LR$VWER;J8e9b!nyuN+4q&;;xo&?i=3DZu|WQf2aZTuSWg
> z6ow)A07=3D4Q;iDcA5y(_Di%qKe;FPEo0C>xpVs`=3DZ+)RHO(9+|`;v;(m3Enz(#NC7l
> z=3DPMy{b)8#%C)4LPuU_D*Cjt0=3DlK+Vh)oC5?C)2l;&~qNZX@+^8ajKh7EVEeqUxp*?
> z+?`$Jwd7nLbrgSObl^;Y-ltXTu7?Kh$8*UcXWno*-nBLOS44#Z8zUU}jEhJs00ENG
> zL^0jTcl)36n7g0k@FQ~upf@QN1)|9wEz|)$%=3DQhKRi!slTAxy8!-kmMP7Eieh=3Dzvw
> zCn>K1%z=3Dglm|B|?JYaV7*Gu(=3DX@L95!|k^oq*{!Kw|jp@w<5XBP9NG~F5tP9z|F4i
> zwP`57u;P4G^e!-S6`&B5GwzAiRY0OA8p@vU*(&qelat_GM{8w7;g5FVkTo;J-U{7o
> z9C--vXVUZ2@N&v;=3DW17vQDe6vv3k)qOY&Ikq(EeKmY8=3Dmbn~NBb?W<~wxkS>pt=3Db0
> zevT0h1U!ElI|0Y$<o9kLA)p0ERHRfSeyrPrlKwZ?)&KqwlK>2+>A^%1O+EmHmUB<h
> zo#pOJdP9;dx#}Lrxsd&CJ<!K6a;4Y&ged=3Dx>t*B29l=3D;Px-Y3zL5XdjUs`b*+Ly^u
> zhy(eS(y0b}!*K!cCUUsaT+HwKcflHHvn}6&Tnv8+O+{g=3DjE<0@TnIxN_jcUZ@o3K!
> zY&v!;;ifvs>|gdhYmTduaEzKQwYRep?&NJ$*P=3D|e^yw5`GfOo{MkC3>I^|%O9SC|c
> z+l{Vt>-@p<{+b^fzO0UuHPTM3WRQn5Kpx(Oh0p|g-tR1_DM5vsmlGhGqX!tk(dJwL
> zz3YGCFGHOyOk_iuo|j<kI(Et^E{XAJ&okdI1$U0y@9ksj^WWW56%&tie~&}a{!Q60
> zl}S0B!x9k7`D0+Og+MB+w~1IflbpOQ9Q)Z*=3D^NZLSCQ+2iKSx`(*0@~sRefenMxFe
> zssi1Z(D^6o3UccS0+Q!4`Md<nasHpOM00;DJau8@`&s&E++b(GpWlKjsQk!jS8#GY
> z#Zp*G_kYog9djB>j)&c>-Mk{1x*O;x^^;=3Dd@kKs#<v|zjVKas@nyl?*VM(Gnk}9-3
> zjU$LV7B>kRq%`l0r-m*$BA9H{y?aLCda+xkJbXNWl>N|ZA;tP9G_YZH36)kDwFQ52
> zK3?r);S*{DLoASV2&L>>?H0+J@b8SSS=3D^6uENHBrdYr$xS_~y7<|Ask7mDQUvy!Fm
> z_k<n<yv4Iy((9FEsy+-K?J9u+4bKpZM_lWz1bH>^X}3DeD8`@c(2H0y<l4BKi99o&
> znLHFE?}0D^L<~DQuG14jf%*1EvvYrm+arMUux4vBwU7;(E`mo~&F`9*1lIxVxW=3D!m
> zDCw_k=3DM8?@qx|EoeTyk2O`SWYZFh<jK<9ytm4w_q_;dASHf|3xe^rEEeEG_*UkkS9
> zQMNGYIgf6<HK__+Q1Ecom?_1Dbm=3D^^|Ec7EyrYX%cb1t^#Y<XE!Af1dgGhf`zt&0j
> zyag*X&7+nzHts6rK*THea^!6csf}6*=3DD-8A?KOdmwd=3D}3xf?Cws*icA)EZPa@d+;{
> z<s(nt&yj#{x%_%bO&iGGe47Svmr?N|+8Mwx*!z4GH{HlEqf7W#UqZ$#L45$v7NBk@
> zXMA;pKpoYJ(>3r8hEVL$iy(gy$bqMZ5!bQ*+K>5L?wVZze4q{`b8rJ}(p(|QSL5e5
> zsYV|TE=3Dw~O$a*M|)*Y~LLb=3DD&3y%V|Xv}do0^83GK@&^%#fz+J)Tuv2|6rS1IDGc>
> z`HhR`&`#X3ersJ*(Ekeli>rxjzhyDZ7?+qx6i3Prj^&c!E>f-fOXYv>vEEMm6+vnc
> z3|H9BNMv9UAAE|O8(KA>i4zR$%9WLTwV%_OfMa&!n|6=3Dez$sgpR>pT3Yn`C1cNdnu
> zzycvjk!O&Qe$6{)qug$_1*La?{XA6%;G1b3Q52a><@g?x^(M63OHZj~#QNG8YtS=3Da
> zz?oJiG~wg%G$e6ntbl)eZzNffRVLEOSpKv?PERF1L0Mwu1uQq<3V%i_%>a}9{}nST
> zYEjG1hZ}DpR_i;J^oW5E+HlW~XIs+V>otZ+UIp`lxEgIQnVm-m^lKUC#8@><`+zm5
> zjW23qMj+oVKzjOV@A`*9D+@f3Wo_m~n7_0mAQvCBy@iHcUW$M9)8R`l;e|RwwKzCf
> ztO`#}^1eKi<gC?&6=3DqndW>0bX(zcB85`?O{O2O375%u;uIPNi><tO9llD;eP<P9kZ
> zjnXL)g+ggg_{J2iWkBkfr~TsA`4=3DCle&7=3DthOU;nC!8M5(xaC)Wh)fmm>8z)<c3za
> zfbi@*=3DYmP;q(^^7ns3|w%3Xx0g1!&$ez6?d4N0;Q=3D@(L7q_19cv(V(~+)%RpksEh!
> z$2w=3DWxjCMq2~N5dSLpKU1~Fjt-VcM`=3Dke7!l15urkKZG}!3BeAuW`}a$PX3jaGy7%
> z?he0G6{Yf29TVQJdz|7jEPXq=3D$zcWurC$QQ?+tTJwD5mfZ;`0EH`}vXZ}WV(gCDH|
> z$pEhjbHm@=3Dqk*I|lU*b9KE9?{rf7qzjd>_t<Xr1!Xeqf`cL7zcq5nj174DHj#af>C
> zU8Ily+BePU5NYRTCOHAi4pY)O|3foRRlfg_i`x8u#IX`O>95d)$9ImP&HP;)(vIS5
> zH>gpMntp!=3D4&dQ&8l(rDf$TSB2>#CmvGcb>L(tHb9T}9;*&yL>D+OhU499mipfIn-
> z`9=3Dy6%4_|(WPtG?u42jf_8lvwsJ!o`N0n@VJDsSSSA{d+oMe1$G9M-QN#1ezu(g0m
> zf(5{(>yWI*hiTkvcWs6S$8@=3DAH@T;}??(whkoAAYwj~~{H)&0BLm4N|_iUDl^8hZ%
> zz)Hf*ze5jGu!(Ss0wrnNSgy(%weCLc--yn9e1lHpc1ZnP&+fL7q;MTP5uH+B7o}o0
> z83mc`RP_}Pyu%AmlC9MLy1Ou1IQwWXc8o9H?dPB)KLs$cms>KfG9e#&rn_88mfUL*
> z#U6ikgxXFu=3Dgl#u$$b8n@l@h^n!ZKOc+QCer*GYyPIha9FJ<7RFe3>&xiTX3P-~0d
> z!r{o(@g_P#Jy^Y4=3Dl6O?T=3Dn%IZff*varH;HP=3DGm`*!x<K8q8NdOQfmf;LL(`>jlU8
> zdCwHCKFX^+m|t5M7H-{ozNjm*i7cUvDwux=3DZ~d{t7)y_?0|8OsN?5m54icf1*qIRq
> zo7_dWFMG44mbMl%xF)4x2x1_s?396D^p&R^SJ2<dj4`x-wh03jZ6uWhOVmh@cR#)L
> z4$M<KJF@{C5M-q{%=3DQ$syK5mzmF_WYt}WYvFK3OC4duX6{a-&uakef~AwD6#!p?sr
> zP8xXhnPFJwSC4bS19_IkYgEA9&cIGupJO6R!xp^X@!*4Mu3$S?mQ`OEqEiC}QrD~R
> z$7F+(mUW2C;dO<-d4&ai`?+t{(I&-f4o%u#D7LbUa(osR2{&)nCmGURNei%?^?h8H
> z)d%43Io+LM)&aL;Zl$}G!ffKL$}fLDdtrQ?s;6eY=3DItEQCc`FL$_YRpoWT!W-<6A9
> zM}78D(;~}zDli!r2U1w+>AwuZvLhj#$vO?b(3zFggdQpG_}b^YEdIq;l)>!sMnXqh
> zF>;n)0Y_ip1xXZIclB-C3Tm=3Dq@e|!RX6kIY&X134jN(N^bpyj3Ba`_@O(uVzs;C5Z
> zgT4bZ5DR}QHpwtNV%t5s!ko}&$9}rwp6d-AYauk8nB2q2ENDAUfRq4<M-oi~>mGiw
> z^}DYGVLMdA1JMVTin@^zre_&}dmMOh5DVN2;|=3Dviw!FFafSR*lSN@aX9V5$_ddZ;>
> zlZ^pwDd$xrQi!4^apM6);I4lnyePXQ>kH4xt@*@OQyTHzlY3)7ty)wm05zv!>ym0r
> z=3D8mnr%K%Y|#P)`{*<hUG8Gb6EUrIg~vZvCj2(*r<W^QLTyreNAuax~yBMB5etiOaw
> zyS<;H-x3bBrg56>y&FY$TG5Hpq5b$C(El$X;IpMBxr-8Lltx6qVz+-o+s&EN`NCf4
> zC50&+ehl^?9;oNx`%I`WhSz09O(tydEAET^_kP#xOf!_~q$Y&(^|xJf_@``Wt{%uu
> zbx%O02#=3Dx{?HKmkvp(uE0rHD>$JOhmSZ?(Hvpzz_{pRS8_~p3}sCvquQ2rP9q^v5P
> zODEj=3DgS@xeSupWOyN-Y2_<uiL(-OIr7p>`;0#fO$#+PgRI=3Dd4Efg!g}SI@f^OX8$%
> zX1D55tLA$MzeeCJ1v*R^{cG(P>b!cWD1VH}OS!81_e=3D?flx<vrryf&-T6VG2C@j0%
> z{%{8@8U&`T<gy;I5b(q<<`b{UQZ~{?-<KbZ<*N@mVah?Buq%JANd7dz^QUk43dB+?
> z`17GI^W^ix_`4~>3$nC;G6M!6BtQ+u#GN7P9jC<ARVBkdmA{ZM*0U7bE9AI0KuxY0
> z<<tW}>=3Du7@u_*UECwxcy>t@!b2xhoec!J{F2`&X<mIMz)JU2a7rorslRL=3DBW?YwS3
> z%%Xa2ed<U_AB}&(fS1mZ;t(fLn}rh9I$Wx>n2bdZ3@)g;+7Hr`N?0F--8m9BCHhN=3D
> zP?7Ev;tzX6AG~9S?m>QiIbl@#`A>BWG2DrT=3D6NFul7`Y(>^2I|F`(87QEMN{A~55%
> zom6@Wo@#YykDta<veaUbU{lBTH(f4O1py(Vj9z<Z2abPwO^pn>gshTf4^^`$rt`PG
> zM7%5p5pvd#szFG&=3DovOv;yZsWMUBpI%{f^;2R5acQTW%bR@ZI<c$V>kAibkZXhIpC
> zA<PKpws&kCzJ;@XmG;ZufkgNqkxM4gANky0j8=3D@q5k*AdD0(e4W-moEG1f$rCm%@x
> zU$vP97|wrgq+}S<f)hvmG*p?})P}T*4g=3D+|h9bo&`1tJv9(EDd$g<yDP_`urLL)&A
> z;L7`1-(Uzvzqt|CeRfKQR*Q1x<Axg07}-nIhWma!BM|{XmTJh$^U#e6JB+V2s~fn)
> zlfH1AlR?&AU&`T+Ac<FQAyP6m*UYTGGjqH+=3Df!_4!a6P%Ht(R091*KX%z?xQBK0XI
> z7B}AbQ@!h8D)?0n6A7+Mo1x4a{t>DkBut6EigKA@ZSJ`qeZ*c#@tx&to@Le*F10Xu
> z??$jFj+q0#lFCoo7@RK4G7(a~MtT+7=3D=3D{Dk$~okRJWB~WP*o^-jF?gyqe_R({QV<{
> z!;gO%yw=3Dxx6xaf{orimCiJ&NFPFX^;enH^eLG8!l#Ro(=3Djh9rZTn+<aAG%Xdc)-2<
> z%%p6q6B*8h)npAJN6#bp=3D>A!Bg8x~=3Dt$0pn^QOeHgkXOh&gy%_AdRY(&*zgK=3Da7EY
> zppB*WbfYaPvztWEF)8O&HVDAG3q+XK)zW{mvYp@zr@7;}$ATTnWnW}kRV;<Z5S(gQ
> z6$3bu%Jw5mzO*jypDpQKG^+sR5+aASG-?ZZC+lMm7|Fw1UY$A6oUA|**wDYaf2V)3
> zLU5$*IXSA2r%jZlo@=3DfxwKwTN=3D$ZD)Fv3il#y1|n;kkT|8qrr%zn2cYmYZ3SOznS3
> zoW0gX7s79J(D8li!6NL*m%&V&vUK0aZ{P$=3D6x&2~W*Vg%ehwl^UsAxF3R>IL<KlgD
> z7c}QK9YztA$VhTX;s|1_5(QVHhW|P>UAba?zDjuf@7)x`k}LKLJU|K!ol)tVciFd_
> zJx}BFC6atp*drIV4||cP?K@?rTi}1M(u8&is$qX2Ui8NnmragCZBuBH!@(abKMUNr
> zc&Qz5ux-or^hQ89i+Ln>`WZKVo!2hGxIcp@%&xC#d-z~4!Fa!jiy+0lPPr{A-=3D23P
> zQ9*JFBk~j>7ktZb4@gQ|f!P4N%G!?=3DYAU15jYqW?ic{~AP}J%L($DEPEPj79Holro
> z5}Ck{9vrafyqJooScsMdxJW~!9D>I&O7lV5+;YQ*?>3-XizmWZu+mT6;VGyJ&mnle
> z*lb<Lj2WIOqEfQ6hy`-Yfc4vWSv5*u<lj$UtrAlJzmF6kV>o4eI#1E*TvnKH@|8~O
> z<vjd1#5yXrP9NkR@32Wzv`>HRCon3qe>FH!2Jsm(aCRd=3Dr;x{>4BKcWsb1Mw;pN;?
> zEY46g(D_r}I$ua7IJr;dIkmAp`^VZf9Rb>-iWjEs6$5xV;UZo7Z%5WfN|OBvhbp)o
> z-5wu6oFq1U@BCW?HDwVMn6=3D@DlOb2%LHzvyoPpmk{$JRW=3DedUkr)Pi7xX*I8vKD3P
> zej;LsDJk3jR^^=3D)6{4*?NO%$QC0QR|iXOX)f5(?kIPip&8z0d|qZe}JkLQ>pCTR8t
> zjl`+O%}+%8_e3JbE+nf*5ntq;V@RH6+LOeT1lMg{lL9nzL1E`rXlqMPv3x5Woh!)k
> z;Z`kS)VraflJa`{F~5JT5BrEysS6s4WbkOFM#zL*jb&Q>?T!$2Vszqa{o`;P!7)P-
> z$ED2QOA(ofjN2!QB-Uv^q^ub6YmJ@nHQWlu@8T~Rag8}NuvXQkjH!!4i9k2*%^eC+
> z(#$2!`o9A>K1<gD1c83us!dyLSw-5pd;No$m`F!xD<!n%QJ{aQ_&0V3L-?qTH!qjt
> zVAXcN`IfTDRs6|SA3$=3D_r(vNzaG%z)6K%_xbzhrB00nZqf(NgQEan|?Ue6#0^Sq)F
> zsG8&%MMw!y+l8h8Z;>o~)kpedbDE2dV(mVBHHnu%1G#WC7R@~!=3D=3DeP6EnVSqi9Hz5
> zL9wn8IOtVa0!x435stbbcOyW#5*j}Es(rfty9tLI$}6xss!hQ_K)zw!iF(`afUU5p
> z5{)$_Q@0-WnjmY3n5lG9A5oaj;N$uTOX<wbpDMl^59^j#_u-T(|L<J@Z!nW|ljq5r
> zKuT{1Uxx?5_K`;9huSHOp;c3h-=3D9aE^^cqPb7fc?>eYXA`_36MKA;nr>n~eB7vGo2
> zjp>UD3SdAhx}>fSXj3S*79~}ULH1q{?D0*(NN?q_W)99!OFk`aCdQH<T(`=3DUK0V5a
> zsIPAPv9Z-}#u*<jZAE0tuHvnz>Pnk}Zx8K`9L}edat~`SA`1!86rG(uDiV_lRR#$o
> z_(#M!%iw?5fr?SZgyl%|j&tpFT-D5b{Z<J>%~Iw*U*(Hh6??;ra>=3DS<i}e$jCOR-_
> z8}}3OBKcn{28z;z*9L3TMtUSE9q_|BcyQbD0|>N0M#}b6<;>w;a5!dwCtaEC>I`4k
> zm8S2hn{<3$^44hA5r=3D3zrSt?wy3)iluhs_Q)+~SQA}*;ZK(6xmQht{TZ$Q|x9J2a3
> zjGlqECqtK0@`!V~6fh>ttceRM%bp3~bAj%`)l}yp>{vYeG=3D+cD=3D_j#PHt9!u0Q_rf
> zNY$>S-csh|rmTtX1A(!+RNae2YvFI3YB3V%5woLK@zAVIT@)n-qSqajr@bODB7z0J
> z8=3D`;q9E@Nf%sU)32g-MirUC62QM4S(F;Gm(&fnV=3DD4PX3_%GTB$AlICA=3D1q6L7Wf|
> z$WcEpI1$Sfy+9agk97H!6cdGdGWK_5?_gMK!LWk3d!}4+IM>5vZ=3DNRpFQ6>R$PZWg
> zZ=3Dm3-u>P;|gi!_Y)T0Noj3{A{Q2Wes1LA){v!4w8c;C{*mh;#!zh7hkfC_D*tL$j)
> zr|xN6WoC=3DoEKs1ci1}Vav5^0Mtfr35i`X}vY0-ZwPXp>@_~@Loa(H*8N)9kANW_?i
> zw361N42RDI65TK~=3DTxT}>b9t{Ae??@1(E>5FE;r_`BJe@0uLC<4w&fp_~Af0czJ&a
> zxT$w@-C<KtW8Jt0B~YGDics%N`{~}g;A-@9ja{b^7gWgBieq%RASBT^A2Ntmmp8%e
> zyb{z0(t?KC8V?oNv{~gWo=3D?;$0z#ND9>|+G_d{BZweet@7U0lP`a=3DjMn7aci2Kiy4
> zJuzsks-3pD7!7P2FQI6Nmhm>rC=3DY*u1jJ|Uyphwq2;$WN(BZ$SfcB+pD<^f4%(7Fp
> zfUHarGvkR+4pZbjSc5QQS(0(m`b~bPK0Z8%=3Dhy<L3&<Lm5H_a(W4=3DzjxK1w5csXF9
> zHDlaPLU+F&(@kDp>cQx=3Dg|e~ltfI3Ti8sGsANhusB3tEtEj1TXh^<q?B<+6z1`A6p
> zU1Ht~Vt3AdF_N~2dBL*z!kR(dg3RPve&5=3D~9xFX0cVpr_2x=3DGNqY+!sol;&#(j<#U
> zzi%Z{V);8QMfVXH+eLcS@&QP8x90Wcm&<#>zF`-Y!#R^w<fC88+bX>D?zw0c_9p`}
> z78zbZCM>J>B9M!G%dKerL`i=3Dw(f1=3D3!KM%kMv|bexj{o^tk;_~>5OH8B;fB|+XJFb
> zYM;K@nJQ4y;M2VRPdr}c?eH`B-R;q7%-i=3D6gpE_XLTUhPPnEYEZ6BEcb&vbnO!j*X
> z$h7x#85nlwezP&%=3Dl~mBf^xmY*s^N((!hZB37o7@*uAEo?-(IM1h#)RHf>QgfPF1I
> zZ5ovz42$GFd--Ay9;`!dZE7YsKWmFlr!7bWOPD3c4(HRK!V2=3D?1DepD-FxO1Pvm^_
> z97iPZjH``uXrK3?D{Vt7akP@7-rx5ha4&G6>v5dlWfa&J^cTlsjL$Kamx)E<GRyc*
> z$<_BTI^|SR_q?1su{wYBU>qo?IWIwKF0t~4(y~9nUyGg=3DQ33W2mUp9O(G*EkaT&Oj
> zAfn?Uxzo0cj&aY+X7QbQGSADf4(qQ4(fQAG57~0?l_9UfOq1RP64AR>dtI)Cduhr@
> zBe%NCccQ@k^44CC{UE(rfzU5g{MN;t5Xx$DT}N-ty%qtrakhU508-dG(4YV?V@vh~
> zkf(^f`_PSPgU<PN(5>AL3?@5OUbUX7v?y7t80Z+bj5K_~4fmV$jCN8UCKt1E!x$D(
> zUCTb^L?ZH4qmIlOWeoxR?%Rkm1ZQOq_w7FsHgYYQQvCKO_)F5P4zG6QIb$G?V3)fV
> z@2Ik(zl}jzHLZVnF@@~wN=3DsWp#7=3DKfwVt|6ukD#Vq(Z*bidgH?ZPtS_%Z575UwEt7
> zWkdmlQA>YK=3DT9OJJ1wW!OJM^=3D$lx&1VB3$3u>*86ACIOrpGZdy`#OmaD+*OYK0MGT
> z<*ToUV}}r~M9%ZXW#cveJ_Q*q3h8_m9xJf#SLp%f+ZKOGT!Ei>-SFg_(M9$@bmdq$
> zEX8?Hzpnicx;7o6ppKdiMdV`fvYoHfOUVB|n`>Ehnar4-$%0j|Xud<1)yt3y;rgx|
> z_p)`0&lFG=3D7t#MEqG@N6r6iWr2eRZN!nI%8dKx|MyJT3;e5opd^+`Cq`{a%v{iPP|
> zy(=3DL1)?I&h8!mhbnB@&K5IVE#vr15+hB_R;`;5{Y32*hao|<*XwR7zq-S{|Q%EuK`
> z^-888PA;csjsnNly#%2Sw|gvm%3V)&2rh7O+B%!>MOvY|CzfCSbW~vQBkP;17WX@+
> z3g7EzjWp2oTYT0M3&<B5`R)R*S6L8y`e$@Bd1-%o^8DI*?G<?9L60ch60z{}vU0f*
> zei6&$)w=3DlQ9W=3D#^f$>tt({Md6!UMs@`%P`H4OYFXd4&%zKpHPfS`AzX4!W=3D}CSW0E
> z^Tv*qshFO{FPEie+Nqhiw8jQ8=3D!X;EN>yLIn!eD%to~)0I6$_yDC`@lH8A~5+3W_q
> zPfdTdatkA5h8q`~>8k+fO?+w)rw?A3Z7DIWeddktuBruMaMyjz6}+5Az}&ce?L?y}
> zdw&RXYMq5nI@Ly!v^bK)wUgr_0v)ihH9%v$*J>EOTd}0M$ElVJ`HGW<76L-zv9of~
> z6xe`{j1@;Y1=3D4X1>YX@D)vElrvoYR)W2Jwoov_q>jWK-R!5lZ#xmZ{|_qCA(YSrhh
> znz&K5gX@TP{jYQO@$uHlgh_d?)n_uObgf9ie6u$^x5v5Xm#=3DHMM%#n%DrB|B&*PWE
> z2cwfd4#mOhaJmheG6(Z)_IsHw08Xz8qkL!Y7=3Dn$x{rolWl>)oPuO6tA!vtl-C+mM|
> zrTW|~O2hHwmf3fSl>uOxGVgSY;zM;=3DWobcggu;#z<;lu3qYd7Et1CY?@1X<)OWmXZ
> zVD`k?K0`kbx8i@2p=3DziJHX)=3D`njLZ9=3DQjj`$_r9ACqT}l6v61>R;Eg6ti2Or?$fNc
> zdKxH~!)@7j$Yjk5v^@7rD}NoVp8S8j4Iw~POjJy-te?qg^V*`Jso&P~u+r2$@Cp*U
> z*^q%GTxq_*#9!qn&w_|d@@dz_fw_X>P`ey?yadA@U<R~-|6i&aQRpFWEPh{D6^5iO
> zJ-BoBtZ<>0(EVmPy~nz%kAWfIxrcQ|X7U9V<+0UcGA`$u{eDD)gRY-3xoUqNzU>QL
> zOo$Y$fhEF#J@D8o**ZyFny?|P8KrK+USl>|@FN!zUV1oHxr(YNLfAH#Mi~X|yPRF>
> znR|C1ype_mpf!Z=3DUOSdnn^Jqk6O^!f#121?!&85N^g<(n<Hax;R%iP7?2=3DV^QM%0~
> zg3>~sol4daYurxsQh{S@mZX25rw7j2tNnOYD+4)el`0oCLf||o`{%F9W?penEO~9?
> z@`#iqo@)0Kl4C#tn*jQeQUT;Pobub6&gZS!J!@>9+R&X(i_Xr2A<>~5J6@o;x^9r@
> zXgT_cPmTi5m?5d}TAux>c%6?qcn0KGTSQlZur&sapqZ8~UsSQaQE7jW!DC<EM)E%A
> z8S&7G)$Z_9Rc5SWt{T8v%ik+DXoVz&dkn|+gQdWqGDIwJdhr5v_W1{_W*y17S!)WT
> z3ezk)Eq)=3D8I_^i;Y&^b>A(?5aMKZ<=3D!<psjYDTG8cB2Ls_?t$FQg}X=3D=3D0{(N5Taw=
H
> z{Ra@;-967@>jgF5)-iuQn_Z5tz8J=3D8f371=3D^R-sLorjN)3zlAMQGjAMK+^c`gF6Xf
> zA8*79C>6NgUldLyr+}WpFEj(LQH%c$IPp&*t#$0sA7wXZD3sOfz`2iGm%~qq;0V_g
> z6H#XJ0Ck^DkEzflvbfUEa~7#JCN<Ulof*(ynOtRy)JB%uia&qD2cNut%gO*kuq22;
> zTRax#ccpp>-Rycv>uyOC_4Tl;lK$?)0pG2PQ=3D_J~d^Lp2k|hs(448wW8^Q7sbSN4o
> zajfTlbGSmyK&N4A)0vXcD^!QS%9n+xQtg%R13xlQOsa|4Rz;%dVP&MKWvq*qUpf&|
> zmMCxyrEG=3DSxdnfq!Z_@1*~+BzfUdEZvog#a)dxriOq}~#W}~u<#0Bco4+x4aP)_ni
> zs|M6Vzriy+p=3Drc0-W@XhuEHqry;4G}Ak;oVUVKeylxayTd#tOfhn9JUQ^Q9eN&AiY
> zG?e<CkGH99rtpX)6-D-0$KUP3*yoMZnY#-xWQB_Eu^@jRYD8ee0Y*^YJ?nn9pF|4b
> zy$P1HbEzW}w&H%eoW)n*0N^NQ+?&b2DcaZx2Ra~KK+FFkSzC7?mC?Ck!JSVn3?&cN
> z34gm_X7AlB6eK7-Jh6o(6yZ&2KZ|_O=3DZjW#u8y*OVHA9jt^2;<`A>Xp9tYGQUN=3D_J
> zS#uvWrdEGOc6>S$mv0SO<D5j?jcF(qbX(#8Odt+AU+18ps;2$4hoMYTGsm^QM?)-$
> zuAR{9)cz9#C(t>FAD7I!QHrokCjq|^MCV|$gwF@8KK#N9$@zowQ67nbn(X2kwpeZ|
> zZ3Zjmhv+|pBk?QlSG-PPW<79(zSkXJ>)n|~P4Rz7T7`noBoxaGspj*cr>&gomem^$
> zJ=3D3^q=3Dj6n6f3tNW%=3D2C=3Dm=3DmiqI8=3DEn0^!&sxLt`t0jc4}AQHet@2>XLPGwjV=
#hAX#
> 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
_
> z{7BNkGhFDdDR=3D5=3DV(z-x!TU136pR%l{^4To^V!xPxK$-wuMnWAUWR|Ur$%tE<j@pd
> z!=3D@k-f1yF<r>c)cB9Q=3D9iGOA7E1?SNXb_-Y1=3Do=3D#uV?TsNFprP=3Dh>KcK`ARLN7=
6BY
> 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
l
> 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
P
> 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
=3D
> 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
s
> zgL(9XQ-)C@CSsK-%~)8}Z6ZC-$|c>D<+@W4aqP=3D(U>-7OW<$olk>Ynnkgc@Ni$Sc1
> zy!C*_x&V?LoRzJwDZOGBe^59mf6aSL0C?!MM`8(<j4XHqL!1D?HO<X(FnpZcHMoo`
> zV*p)#-nHAE*CZ9*3ccC@;-~bcN!b>6yet{(yq+rfQ)OMuA|3{VoM4Q@Fh=3Dc^qY4$=3D
> z!Q7D23p6C!4Y<fXGTQPg)(8|<*_+}Td?q42jV&|t+#Si9$ixF~e<}>YvG&@M{@1wk
> z(0WZfb5mwRu>$iAB=3D9~Wq(6{F{V68G5x<w`FjMIoJ(pt(NTI*?8joEp&I)cVTPT$B
> z{Y;a1<ogI;QAM9-8HA=3DwYQvU*WLt<%ujO^_q6Nw{)>+#43tKP^b~}G(#NIXHIF+Z8
> ztiJEO4&Dq428bSXQV4wa!7sMjr7gnZ$P8*_VgqXBRtBFQ7A9Tos582+Q$z=3DtY&7fJ
> zINhs}n#$@5?$|I9ydkdKfAdWt0zczb656r=3D00000000000000tnaSaXH4uh15w<lF
> kZ7T^hGBq$aGB_|Xw{~C>BmoXIGBq$aGchnZ07Y;u@J3<m^8f$<
>
> --
> 2.45.2
>
Return-Path: <linux-kernel+bounces-665467-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 3F22741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:42:15 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 40CC73B5BB4
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:41:54 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 76A182857EF;
Wed, 28 May 2025 12:42:02 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="eFvIem2H"
Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.42])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 18B8C22A7FE
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:41:59 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.42
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436121; cv=none; b=F+uBudugQ6catOC3Ql2XLEWphWf68brsPJdkmsbeT/9RTHOewElojVMzZsHhJnTp2MoN0QYP65gjE8faQK6KDsm7JFabgB9FogoVHlzXjil3f1HbKL8WVB0J1sPDvwYLvpKsYwuTDe9usxg9+o9NwYOxbT3nD+nFGryWnQo1Qmg=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436121; c=relaxed/simple;
bh=e+jFQtVLztT7fy8i+vQ3FDEM65+gupHcYCuDEGeztok=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=p4oYrx0YDz/QFBIRfXXqdhIbVEsfWZIZzyjb4+6NxZGHiZrejZez39gJCh7dT5/j4zzGmxSL49i0rrQVTUv7UAaKWyxVBQRBpBnqAK8Yhf7S9bPGHp5Cln5rY2rYbcJwdsyGnFLh6XIb98Zk8RamVfTvmfGwb+fIxIS9RtwG19M=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=eFvIem2H; arc=none smtp.client-ip=209.85.208.42
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-5fbfdf7d353so5897245a12.0
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 05:41:59 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748436118; x=1749040918; darn=vger.kernel.org;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to;
bh=fcybqgDD5oDZApETTyhThYIrRhfcS6l0d/FaIxiSIYI=;
b=eFvIem2HHTv9kwy6miqKaejKjdIoD2byd5u5t34tj8JoSodlVDoeFpnsP7sUiIoaBV
4C7LF0prR3K23yPd5DUqY6P9IvsdFBuuQUsDHN7A5yde9OM3otf3l9h+2smPmR03Jtno
4Xa6cy9cJhiVDO0ZHhFhLpGb67DIukfeJ31m8yE+tZAAt1QyyRRvH+8KExLfIQAdJ/v6
xgjB161fld57KZJZFpaoF0Fu+d/waPkpfeSxKW4MRY53Zv1Rw+JgLgEADQW2b6sZ91xg
5mKavAFcgq/YpJu+UF9ZnN+GIQmyxVFbMrFy6a8UxMSQOKK9dz0A4Liwrzcj/WiogkHT
AMwg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748436118; x=1749040918;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=fcybqgDD5oDZApETTyhThYIrRhfcS6l0d/FaIxiSIYI=;
b=GIFLW3DaHpVrC8HOqnir+mRpEhi9PzLgVZVxfVzl9T5hOfU4plQLYBTRZj6LU3Fx+8
KcTQdXymVYHoLmet84iSO9Xar6zuTROz+OQHxbPV8QWqBZn0u7HuJfDSfvxcQQVOzy7q
bm5LCayfb6uUOYacC979dfk9fcx2yj5SKLw1xL4y7OLKVHl5q8i6HsYUsWUrVR4N+Cz0
6e7AnkfWJKj/Pd6oP5Hmef1uNydCu7Lw61ulqavy9bEuLXkbvAE+wdDWB4mVBYYm89L1
0Gi5n584rk/5dasc1ED7KvQVH6ua9pVWAY/kvo55Iouf3wG31kpGXhL6RUm9BqFy/p4k
KS/w==
X-Forwarded-Encrypted: i=1; AJvYcCXUf5MH9EhXQ3klm8NmJzf5w8C4oA/rSONCKTlR3ok0/FJ5HNmhvc7Wy1l+r4sWtwHugr4Sig0euc/MXaA=@vger.kernel.org
X-Gm-Message-State: AOJu0YzeaQq+NrAduKQ5UWFcXooPvwBFmeUWCpaT9ZEEiATqwk0g9Fb9
GYIv4x20VP9QzjM//cjmpB79GA/7K9jQftGb5Al23ehU+r25wyfG8PbT
X-Gm-Gg: ASbGncun1FYf8BNvaGS0XTHGTbCDEm+nN0x3I2UANG4zejWj05u+HNHocDHmf+0U4Hc
xOH7DP0n6twBAUMi7AXUa1rxvMTK9fdP3lcWtXkefWaNL4vfB+pw82B86os4/af0uVuNtXoEBC6
w9clmbprn0krSnf88RNrgh7hqyIdRpi63DnTxxKsjLaLOIouRMVA2eHcMb243llEXPw+awRtDVF
2vvhWdpgLT0E//Z8HTGF1ijny+3JYYmBK0ZMyapgbY/7QGCc9TpYRPzWL3BpTu/quas/ziHa32V
F28XnM/yRBLqW9rCzXY/73QZWskwbwV398UUk5cBR3e54FAEua0KCfJDGF43ouiJESbb6qxtg90
W1qnO/Zt1u8ZvFk1oyVVjRIKp1S/Smxzqa/AbaIOQK1j73xQjYhM=
X-Google-Smtp-Source: AGHT+IE3Rw4thyp1GWN412ZEdK69IMZD5DtxtrS1IfAeV52JV9OhYNh3EcnK3Cxlv7eNgKS/ZDA8kw==
X-Received: by 2002:a17:906:d7e8:b0:ad8:9b24:9d16 with SMTP id a640c23a62f3a-ad89b249d8emr334723566b.6.1748436117922;
Wed, 28 May 2025 05:41:57 -0700 (PDT)
Received: from ernest.hoecke-nb (248.201.173.83.static.wline.lns.sme.cust.swisscom.ch. [83.173.201.248])
by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad8a1b48b06sm100900566b.154.2025.05.28.05.41.56
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 05:41:57 -0700 (PDT)
Date: Wed, 28 May 2025 14:41:56 +0200
From: Ernest Van Hoecke <ernestvanhoecke@xxxxxxxxx>
To: Jayesh Choudhary <j-choudhary@xxxxxx>
Cc: Doug Anderson <dianders@xxxxxxxxxxxx>, andrzej.hajda@xxxxxxxxx,
neil.armstrong@xxxxxxxxxx, rfoss@xxxxxxxxxx, Laurent.pinchart@xxxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, tomi.valkeinen@xxxxxxxxxxxxxxxx, max.krummenacher@xxxxxxxxxxx,
jonas@xxxxxxxxx, jernej.skrabec@xxxxxxxxx, maarten.lankhorst@xxxxxxxxxxxxxxx,
mripard@xxxxxxxxxx, tzimmermann@xxxxxxx, airlied@xxxxxxxxx, simona@xxxxxxxx,
kieran.bingham+renesas@xxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, max.oss.09@xxxxxxxxx,
devarsht@xxxxxx, dmitry.baryshkov@xxxxxxxxxxxxxxxx, ernest.vanhoecke@xxxxxxxxxxx
Subject: Re: [PATCH v2] drm/bridge: ti-sn65dsi86: Add HPD for DisplayPort
connector type
Message-ID: <7256zmyip7iaenbrcfvggnrsh7qvg7tcbfgr7htywpxqkhnggp@2jlfcqn7oaxb>
References: <20250508115433.449102-1-j-choudhary@xxxxxx>
<mwh35anw57d6nvre3sguetzq3miu4kd43rokegvul7fk266lys@5h2euthpk7vq>
<CAD=FV=U7XJZg4Vh4xMKEiAuaJHNA1H11SiD19KLBazPmMEVduw@xxxxxxxxxxxxxx>
<0936a042-8ebe-42f7-b3eb-a4606120cc47@xxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <0936a042-8ebe-42f7-b3eb-a4606120cc47@xxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Jayesh,
On Wed, May 28, 2025 at 05:48:56PM +0530, Jayesh Choudhary wrote:
> As per the bindings, I see that we should have "no-hpd" property in
> the device description for platforms with bad HPD or disconnected HPD.
>
> Then we can read it in ti_sn65dsi86_probe() before resume call and use
> it as a conditional instead.
> Since I do not have any "bad HPD signal" board, I would need some
> help validating this on such boards from Ernest.
This sounds like a good approach to me, during my investigation I also
thought the "no-hpd" property should enter into the story.
I will gladly help with testing and will add a jumper to my board so I
can turn it into a bad/good HPD signal board.
Thanks for the efforts and kind regards,
Ernest
Return-Path: <linux-kernel+bounces-665466-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 14C5541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:43:09 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id ADCAC1BA4B47
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:43:16 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 70C7D1E3DC8;
Wed, 28 May 2025 12:42:47 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=fail reason="signature verification failed" (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="HemU4ZR9"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4B9D6279789;
Wed, 28 May 2025 12:41:48 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436110; cv=none; b=dnl/xBcysTjFZeSR2EgU7gySEP5uD4aXtx2apm8e6PioEddIORoJJhmhQPbeRrZSgI/39z+5ozQSLfJC0k7hIOPrEfvCbhu3vAAFSQOUdgPfe9ulfbXRCkzMgWISOmKbxgqUJyMc16lZvACroJ9IZ6hlU46aonLc36D5H9ro7Os=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436110; c=relaxed/simple;
bh=dfTfIF6aiQwL9K1VDJUnUooAAVSxhctFcX7H69BUpPA=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=YFVicM+EoPR8eTFOtY0Qpm5k4k8widG9SNiY5JRSN81raqaEz62Kz4UsTBcyxdzkAja9c5kBWseSC+eN+hZVjXxleX4DUcH8UJrTsqSLAexb2DNGWBCTWhWpl8gunCKpEPMbPrf1cEva0w9UynkLEA3fzNfgairTVD5EfWtq1TU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HemU4ZR9; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 34D0EC4CEF2;
Wed, 28 May 2025 12:41:48 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748436108;
bh=dfTfIF6aiQwL9K1VDJUnUooAAVSxhctFcX7H69BUpPA=;
h=References:In-Reply-To:From:Date:Subject:To:List-Id:Cc:From;
b=HemU4ZR9iSJPt9VU24SYQ+t0dZuWYZ+qNn4EF1kxlmTbGg+FXdknV3ozxsIZ+8SWt
iPPCCOuae1FsCLQ3YA3b1t+vuYUAASW0d8X5H6dn7bBrq6bm6RlAWC3ILy2XFwlDs0
BcGlcrjtB0K2vWcEXBKh9Ld4iA6HQ6zJ9OqAzaDTlB+kYsjmyY4jq5IutSva+l4A7M
82rSuztMyzOkMCUOh+IP0o1jMOsnY36PssGWtL0jAUrOVle/4yb7Xli+lD18ksPhs1
oH6VNg5jDhIDhmtq7RGzr2HChO5uWgw5l8OMUaOV7cWU+AocxsQNrAAO7B0q0Xa5S7
Y8b8a+Eh3YlTA==
Received: by mail-yw1-f181.google.com with SMTP id 00721157ae682-70e4043c5b7so31231657b3.1;
Wed, 28 May 2025 05:41:48 -0700 (PDT)
X-Forwarded-Encrypted: i=1; AJvYcCUHWRURWQdyhhAztudJr4bsbfGpVbS0LzmnaVIxJgUhMfASmUpnDTMJ0pGmBBNMzYlKTozAz+o62WWPdDBt@xxxxxxxxxxxxxxx, AJvYcCXw21P/jOEO3UfUzzW2s+56zJ49nBPd+QJI3nKJpt7z12jrBkShTJLhME47KjePAwSZ5zhAzFPmatuzZzBu/ZI=@vger.kernel.org
X-Gm-Message-State: AOJu0Yxa5y9sZ0Ns7r6kyfPt3bRzD8YgnpeD3bQbddECra3qVU3yVFgg
goZI1qqXA8aCnvfCRCg0a36Ol4vSZv+3GkntRcJah4egao3Pjx0A3WmiYBuU7DwgaNzSlzofEfm
1N3eTpJCk/ODhzQfWQ/MZYNmnlv32Gf0=
X-Google-Smtp-Source: AGHT+IHM8bnR8/+MwARaKiKNATWPPtGiKiyCtxBNXwJrP79zbUQAZeCme730qYirVW1ruZeanHjLmIE1SnZzh7lNGgY=
X-Received: by 2002:a05:690c:5a8f:b0:70e:5eda:4941 with SMTP id
00721157ae682-70e5eda499cmr89267437b3.23.1748436106346; Wed, 28 May 2025
05:41:46 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250528064625.533578-1-chris.lu@xxxxxxxxxxxx>
In-Reply-To: <20250528064625.533578-1-chris.lu@xxxxxxxxxxxx>
From: Josh Boyer <jwboyer@xxxxxxxxxx>
Date: Wed, 28 May 2025 08:41:32 -0400
X-Gmail-Original-Message-ID: <CA+5PVA7jHsaY6YcOszW0LPECJjCNYj=31wum57=9yc6EAgCNzQ@xxxxxxxxxxxxxx>
X-Gm-Features: AX0GCFuyrLZ7YQm2wdMknIWIIQXn7VUKc4ExmZvm0OR-fPPsQu9C6AmQguaElwc
Message-ID: <CA+5PVA7jHsaY6YcOszW0LPECJjCNYj=31wum57=9yc6EAgCNzQ@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v1] mediatek MT7925: update bluetooth firmware to 20250526153203
To: Chris Lu <chris.lu@xxxxxxxxxxxx>
Cc: David Woodhouse <dwmw2@xxxxxxxxxxxxx>, Ben Hutchings <ben@xxxxxxxxxxxxxxx>,
Marcel Holtmann <marcel@xxxxxxxxxxxx>, Johan Hedberg <johan.hedberg@xxxxxxxxx>,
Jiande Lu <jiande.lu@xxxxxxxxxxxx>, Will Lee <will-cy.Lee@xxxxxxxxxxxx>,
SS Wu <ss.wu@xxxxxxxxxxxx>, Steve Lee <steve.lee@xxxxxxxxxxxx>,
linux-firmware <linux-firmware@xxxxxxxxxx>,
linux-bluetooth <linux-bluetooth@xxxxxxxxxxxxxxx>,
linux-kernel <linux-kernel@xxxxxxxxxxxxxxx>,
linux-mediatek <linux-mediatek@xxxxxxxxxxxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Merged and pushed out.
https://gitlab.com/kernel-firmware/linux-firmware/-/merge_requests/565
josh
On Wed, May 28, 2025 at 2:47=E2=80=AFAM Chris Lu <chris.lu@xxxxxxxxxxxx> wr=
ote:
>
> Update binary firmware for MT7925 BT devices.
>
> File: mediatek/mt7925/BT_RAM_CODE_MT7925_1_1_hdr.bin
> Version: 20250526153203
>
> Signed-off-by: Chris Lu <chris.lu@xxxxxxxxxxxx>
> ---
> WHENCE | 2 +-
> .../mt7925/BT_RAM_CODE_MT7925_1_1_hdr.bin | Bin 459695 -> 459887 byt=
es
> 2 files changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/WHENCE b/WHENCE
> index 93f849c4..c653db09 100644
> --- a/WHENCE
> +++ b/WHENCE
> @@ -6225,7 +6225,7 @@ Licence: Redistributable. See LICENCE.mediatek for =
details.
> Driver: mt7925 - MediaTek MT7925 bluetooth chipset
>
> File: mediatek/mt7925/BT_RAM_CODE_MT7925_1_1_hdr.bin
> -Version: 20250425073330
> +Version: 20250526153203
>
> Licence: Redistributable. See LICENCE.mediatek for details.
>
> diff --git a/mediatek/mt7925/BT_RAM_CODE_MT7925_1_1_hdr.bin b/mediatek/mt=
7925/BT_RAM_CODE_MT7925_1_1_hdr.bin
> index cce1ddaeefac5a70d7ac9172ef78ce6043bf1334..9263027786aa73ad3de420ff1=
4131492ad7f16a6 100644
> GIT binary patch
> literal 459887
> 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
v
> z&6yTfZQd&O&)OD!q0W$y>(%#ryB8JdDbFd<2C9YDlKc2<UAg&;1x+0QZNsw$uL-}l
> z74s1Lff(M$Us-4^z@<t@;IA~($9=3Dn_HS2Sj6v5<FY_+lr>7;7V_&bf;zQ~q?ovPYu
> zZF5(GAEzPARIBtER@B?^6Zp<a!b^7i?$611Ad@?<)2y5uO|g@|8<L!7?|a*C<eEom
> zq3O6ng2&^os*3>P0cWlFW1Z@DAIE9vB}dnUCp&%U@Eq7a09*;8_EH{#YgmnjElSCi
> z;z~l{(^$=3D1Xg+M`8{4`p6)TH^6p~ky<QrkMK{fw=3DFMn4UDB_-d)!5%YF%BCCiRhAu
> zk52!jHz;j^%hm^L7-hKPVIfB;ucuxf^wMHI|M5^GB80Ch#w1Ty;{qkJ)jx`zS-({q
> zSk%osf9%4Q+$AY-eK<#oA9&Un-Grfg#nyIvE=3DAy$R1vVNyUhaVGzBkoO760@dOLyD
> z;BgW`^wR$X<E#57l)p|`^~U<(7$HLS+i;tvrZmZZNL!9(b_^oZ=3DisP6RO2cR1)9!+
> zYwlWR9qqu_N9y3$+r)tSao*K#o!IdT;hn1ozt@oY?wFAJk!nq-jX(;L&B;aTyb&1u
> z_U5d-ZMAfK3Pq1qK8<KeHS}NM^b|)ZF}~&m&)$$#zzbYzteeJOkLlG=3D2`(Pj9des>
> z&R00{Gc=3D5*cn7(_tx&F3Xk)?<I`9b-G7C*OJs_q>@6v9ZK|KJu<@xjuC46fqUe{aC
> zVula~Wb#S<ma!{+be0uYj56Sh6XaAFECb3(BSwQ3xv~=3DcEujpbBx79K^0(GKLF=3D=3DX
> zX-5rPth_Nf;Gs3U+`zia^E(}<Bpsr>hb<-4z3Yoid1#B8YvZE4?nZTY%CG6?o9A4)
> zt*xHWqQFt&D8O{p0autmi)rW4edaWBmJ%Kpezpu53agBvl!b;4WZ{Iqz9O~9RLJYL
> zI<?`aC<QKqb&5pW19?%|V-ghGd>l0yaDd^6=3DKT4wV1qb*Pe-+vC=3D^Iy_cXa``+fa<
> zdd=3DIWyOoCdd*06fRfDi>06H0u$M*XBDE#~j&0*5AUS1cm62tt)4Kn40EDlv+oXwFo
> zcAsOCe52gHdy-Z!ux28J)#|nOhpkS)=3Dv5JDARHkdxe*vkXmTB&zSU|842)yNRi+46
> zhb(v!pheLOUy}Ix@2rZq`96>E$udhq%^nBVeI#?=3D17(L#nZTtlKWU~;@i}hP@di(?
> zUa+qwqUIO5(08@=3D=3DXjLU!Zj5>_RTAGWKawTm+}U%fc8F2F|QIy8S5&99~=3DeNEn9GP
> z8eer93;n(>&m5a6*OFcmW5LrU;A4EnJjhdLeJcQ#-{y}1M?0uST=3Dg`uzToR|Qi6Ea
> zgV0$<75!44@VPDEQ%f@U)X2^z4uiw<6mYz9TR<K{1{_4D8@FMw{=3D(M0`WHK6UaZP~
> z`#0Z(^W_zxN_J^iE-2;b(PTBv_hWi+mXgXqiiH#^-c>m=3DcLdjEwGH-V-yZ@*#J2;J
> zHc(``ufT|xNmx1s0EKTfif0ofbU&+SVH|~ptqX>F6+F0H5bVODfWoyQsL|uS9_+u(
> zul$-iS0?pjUVU-e#3&Mv5GKdW-gwHe#g=3Dtakr@>O-Zb^x7*04CxU_936vB$ut;@EI
> zt}OaA%3Z3JhHJ;MZibP+gN!KC4bWCg?#@hXvTsz<u9LExsLVdOEPzpZ6A$yUV@?&A
> zK<UdxwO!w|n8;d(b!r3`1%Dj-$LtdJ0`qNany&sRsh$kV2fu=3D7wf3+&WzPhw+aixC
> zj2eV0j+obubB4=3D2?ed&oK95q2D0a!w?=3D7Uwa*G{hTx<w#(?8?#+S<kFe6un;5oB}9
> zR<dC`73i)K3$V{b{E^u)DU4v1V~`d^K2Xm`9M22_ZJTGG<#j@BuXtM@9Dt8P`U2UV
> zNk__intW3(vJkSFczNGL?nX3vS|=3D)cY;4I@i~JchLQCz@rr4yS*L2Iy$ilzUJ~;&}
> zy}pX%w|LF6tw-&pFiig%F><?G;;Fyi7;L@<2lc9wZ6=3DSQFN7xc`caazL7m%4bB(jm
> zxcb4f<IUuL<A(qyFs&Do|GQGWN#8oK#LQO!m%SS$ARG_?oE@tE1=3D&Xx@v|FZojVKo
> zV%|kA%BVxXR)@(~hP@3qmAY|)lED49*aJ9d6ktL4<uYFtXs<jOoFnqGHxW4DtlZ<C
> z{d;&99$@29*(>cCSg_9YFV*(^Ubh@RyvDtP#+6b?E~D2`Kh0H2rN{yztsE4$JQA>|
> z3L~%|S_zM@UyqBcJCpm)X1buag=3Dyx@MPrW^awCfbX{;1=3D5!3O32AOdasTb4u^7{)|
> z(xim^h~G6WT09AZm~&OJi^t~xPl7wZzgjY1T{?JGH{jEZIeK$iCo~QxvZ6wRK2ssv
> zCNdd&iUp=3Dd{e_k+P`BBoo^gtE7;%bP8~%V3mN4Rk${u-uW!z$Drd(;@gP7cjC^e=3Dx
> z6P;;mM#VQ>R7$i6KoVnf9V>YdrY4a*O9L}e3NlrN%ra>>6m7R?I*6!>7Rz9pyxI9M
> z`tBXnDGFlZjq(NpIIz?kr*;#F%hv@iwkWTAe7y=3D*)f*A*Blb0ww03Ru@_oZj&V$%-
> ze58}DZZO5`fQKBj{VO{&mT=3DS=3D@#R2E6B|k1E&4N_v|6Ei0AM`}aT+NY;QAbT-D-b<
> zgdZ7M_!6#+jLlx|pSET}!zGd5;St;DP_7pFz>S$)2i(d(iG(QU%VaI_%XX+>&M!0*
> zrm+P>79u60`x)SB7$YzL4QuIBV1l;l0zHZO3!ERt5g5&Ox|b5LN7|ia=3D%Yu?r9#^<
> zD&WcJPN^Gg?0LwQnz-@hL=3Dx+I4>;GVIT4WIRP9jLt=3D^LelmxL+7S<fIp}s!Xm9T8H
> z<HDXIob(k@NyJ8_B1{n#-8|{TW*8lNAli?!7V_q@#sWw-;4unYB+y*>EqahiHtzUx
> z(r+p%ze{hogzAux$DMXGcv(o~-f-m%pN>dbxNT}S<#kXZT<114H%w;@?{q_%F)Ij`
> zT0)DvFbLM<a-`QwQ4V;XFui1z&y6WX?WJ#L78Q`Vf`SbqxNckI!M58G+ot6v(4K;<
> zCb_ycI`C$P<_8#n?Va11dy*_)xH4CfbQZL50ZI+9VC5m0cQGL_J)iZamAuCK)^m+U
> zNrp6y8tg4?jM3;=3DXf$*WuP*_BW8y2jq5~;w#WrrXd}sIPAY;>~tGyw(S;e#owh`fo
> zhq)8M$x<4>tA}B?4Z6YF4M5?Msq@G8<5NQOtB@SGDy>jH7Y}3`D=3D6n!fYAy58!Pr-
> zOI46wc+A&fhVD!fk$gOufajoU_lVY(+3NhvQy^W7^j%>HXi<?Gae-}v5(Q!ef4Y8Q
> zZ}37q!;Gj9jnQnI(s~Xh;ZLqQ7v7o|Lrs*hW?4Ac4SHzHt%1k%toB#HB!IKr&<BId
> zL5+b7imovpJH=3D_mO-pExO5>+ILjWi%PZ-9i)eC;I&Ez+0n?C=3DF`^h+p11QK)(mkC|
> z8J3+O^4`3(kYI_jkBk{0B$xQ0gl+`eUJ**ZG6NF{7Xsjx??k`Gw8iFry9;c2oA=3DGg
> zy#D=3D97tO8P6@*=3DdR)2f}*qOATv)Yz&UNjmG-p`Lj|F)qF8?&=3D3$C15er$5qdN}F5H
> z2Y?Nb%%>8+aq=3DJxmSJm9orOHpr{F~8(M5_>dJDl+>Jz9v-cm7LH$i)`C6zyPNthFe
> zi>E!h<y(<{!j=3Dk$_H}eo%@oG8GG!o%AN>pFR$7Bz#RNX$Xo!p`w~!ba<u}4iyk}o{
> zd8TJ|Y9sTMmZ}aFIh<Au0okO=3Dk{%)YZ%s7hF_jSbQ9a>#_c?@S-PQ)q!HmPE@3<;|
> z0WIRvUiy}?Lm3F1RDL=3Dy>}t3C*v2a`1e{i-{L0b51VS@xG4fcjOp}M%3$b(D3SZvy
> zXq;eXBwO0MC>e3rN_krth&vC6DnsD>3;3(cz!&~j1JE=3D&YmD54g+U91@+Y?Ge44)S
> ztR`b+GkmZ`>K?T)`o(^|hz0Su7Vh5k<Wwe;t+=3D5py=3DN<9=3Du`vU%{T)%`b*xCf@dq4
> zMJ6soV5%J+(Jpw;CJ5C)mkfdbY5;nb-DVDWpcVXPh}~f@R0RTYq<~C^8Y)>Z$d{Lw
> z^u32ZU?}|+GF_DDJcMI&D6S6gM-y|noxli`pWD0{k)|W@TnyNnJ}=3Dg~0F6rBAbtr&
> zk|<3`VT?cOuI<sA5QfBLOlkNvd0$88^Rh$T78YqE9hO;e4j6tp(uBrYZ1{th76~PO
> zYrkqGek10|Iwf4%6tIC|Bkvu3m1JOsF$^@>B6ojKy{$vz@{<tLUHMooYn<~)<@J_t
> zBB;bWc_e;g(q$9aevWTTjwJKVOtU}Q04!!V?O!2x+VSgq5!p!_FM{PTPjz7Vqr#mh
> zV&@xpcT9SeWxu3?X@ESF!S^QMTd#pZ(do=3DTkX0dxz{ZY2B||C~JhW^%@bypFlEoXf
> z2|%b0YQlucy?1zE0Lr};P3ayy3Bwbg#TU?kbR9etPYDA;Gk8Djnq+RK9NUuYRr}gT
> z1BrJkN5UB$0c(90PprfJP^DbBc|lW>uzqX;SPP&-%=3Dj#;GNHadvuYgmFSYF+4oDbK
> z#@40GHZHk}<_uPr=3D{5%S;{1^8+E_P`w{qHg$gi5+WA0xb!tJXE*BYRSw39z=3D?|fU?
> z%cm7+FPtR{&|sq;2Mz@2eKV<VUCHG*nSp1V)7d3t;v~K+>8cCu-E%2cZCzR?d`%iJ
> zU5G<WL8Voa><c43)J=3DBT@3+hrfpY8n9SYdmLNxndkL!+^yCt?tPRi%&@GrmcWE6gd
> z#&&CCFhh>u4j&ik=3DF~$URr-ZWBQ`hpNMY)dK4YlqoX6^BMFM+VKsxH<$?p%=3Dl{Jn&
> z=3DxhMgo*{8Q{Y8;6^Sk(dALX(7m4AYe%&h*V{4P+9kCko(|Kur-_vN?Y8O(`?%`tSG
> z>-bv?6C!AEmW=3Df^L_jvs&a|wdmBH>MxNb_daj_J|_60<<&oF}xc4BiFaU>ID&ub6|
> z;Ty{KjwCk}pn0}{N!cd@A#SNKTBq~urXPf05p|@L#`bZ8cGJbQLdp$>5A99U7xf-Q
> z%azsh!^;Z0%z@C2*sdrA?ryj`8Wo=3DByOexvO`EWxl_pth-X{U&e_XOcR&)^WD-eG`
> zh5PLcf#YN*9<H72f{~bvgs^swflTVX<3Um*EanY2!3k@a5W)r-$4b_KEPsTTE<uqA
> z@q@;^$FC%Yf5BBRvM+u?2QMr8Yu7%JldyFxA&mr$Jey5Y#3&+bR_WiL!kTnKDtG?r
> z5o8!DUZ=3DAKboiT8?hJ!3FPXbKHKjV#gO=3D-i^Q;P#Q5oO^)DK7--u{za1Lt-~d2eij
> zG*E1)9n9r8Cl+x*#=3D(ai!FEE}T-xbHo!a<gRJL)gvyqEVeJIVED2B9cT8;y9a+q9R
> zLVo2K^shs_9u1vjS(ycdf`^2>=3Dt0_3mx!Y>)LbRh>@1JY!D(;(*xb<r`VSe@H~QsZ
> zb)*6qnN~xJ_Zr+&p7?+QnAp-bNU--@kKu04Q#)<{0d#o|8l|9fu}}}hoG@#%QIe%5
> zsD7!)w0c6yRx$OK*41fMHx=3D*32#?NQ^Y9YT{51!n#sw&xCzqNn0~LQn63ZkR(a19^
> z_$iToFcY1I4+;k6qC~cd^hCgIYlU~V^pS0HnqxxSjuoUO*jiD4_(g)gy9BFf@DNFu
> ziB{mX-U7h~z&HKAa;nCUCKhr9cSfp(Glo<&L53Z1oeqC{@N6dS#izGqq^x|&FO!5~
> zaiy~{-;ixINan8;zi_gJw}K5-NpaZ%Cq*_O{l;?d^)QhyPGPh}T6%<}ch`NjM-ucX
> z=3Dh@2Ej=3D<5KM`2s!Xq+ln1|v{O1k<)6${*f+j8*Vy8zk7j5ZngA+psPg)FJj-(bytI
> zBTav!cZhJT5+>loE~>)UfL{d*!R&=3De%_UsikXMq+;}i%$s^F7dU=3Dt~-2rKhJuC%Y>
> zPQNhnyD-eJ?VlWQ*|g@v2=3DfB)?;0^m1UXNy<+o)J(hJT_lxWXLO;|oS7_AT*2Qyd6
> zn9>}je1!O7b!=3DAy^{_vT3&&B2ve$N>Ba2K-@c$10EkM%0ru|0jfhm6y9<@uJ4VIu1
> znam*&e-um>Jn5`jQLTz;EbGb15Zz_4a~9KR!mC!8SL*1ct3RT4;~#CotgHSd%#!?{
> zK8d84zgb1sL^};@i$|A&C6wJBGV7YnF-XZ(<C*6j*A`sMZ)ss}vHiZsBTK7l;u)-J
> zydW&?QRDI|NSb0c-oC{JsQL0rOwQ5BxaY1s6+?FyYw(&@hT)$j#zl81K^+?UZW_)w
> z+@r|VDXT@p<z%;Zam}`x%#(V||IhqmsjK8}8W>Dv%@*68VH7D^t;@Somg8pnGzr5g
> zrQTlQKBlANYoqv85pY@023+~#h*YF=3Dg!mezkY!mPJ)hmU1CoNoO6LSl^>D9Nm0hwc
> zfQzUu$&J0PCwi3bgq?B%9Bg>=3DqjGTg&{})q6K%z3U{uL8LzzX`!F^HJ>AP~RW7|Qn
> zVtQ?F6+mvDT1O3-Q*R+A{PMVoB8@H$PJ+wT<ZTKv9@f<1?2~fNZ!@X(WhJ()NG74`
> z`?6dT#gRzz1&B8twTcR61-gj|mkIGs@AhY4$=3Dtx+@+06Cqf4~VPo*nBWINCAg9S)K
> zJK%65mh2Y`B#O|Njkh?;yYxscYI+B|e7x@Xq}}rLo?C%~n@p_nk??3v&ae?FKG_y{
> zH45&701cJ0TPv1L0>#Ee&w%9<6#EhmV%$Q61QFdKXe?Erp<XgkWGG43Oa=3DuDd`;eD
> z)eEctch{V|KC-g7s!5M`QsREB;cK0oF%1O2)4_w+zd`sPeC|&`Z@8SQ+XV665{7oq
> z$&CXifKYH|<~=3D+lEdn<}eU#~pkZ%QB=3D(3Lg0^v9iE1-*ahiU1MumG-p5d$M2iuE^5
> z+!pNVhn#**HU+nuTUpcs!k<9);^RD|=3DBLiMRdxB@*fQ1rUd%JU9ZTlribeaXXkw;Q
> zHmB-7h@K*y0isIS!-IA`*nrQWU)2eA&0qpLUM@J5V-tJ(+s~gClT_E1P@=3DF6U@nYw
> z!cef!T>Z~Mp$=3DxQs|Fj8L7Ip3_|`QlgS2d=3D!`n10XoxwD52AHu-Fu(%LGgwB(NhBF
> zVmF)@phWOr49^ymC)hQXj9BVe=3D{{}xzp<<)7r66RmiSkr)F1r$P<LyLNKXe(4nTg)
> z@M;#}$yE8CiX68eSf~QN5!S{}ZT?g8430Lx)>$vq>sIzb96Xtu1xj>sa=3DL8p4MY9f
> zG@EP^gr10e%75<K1c+<aOB*BdH@aUxz*&z^5aG@xA<9?!#|)^$mY@7r`UC3P`1}H(
> z&{j&m_B{M)jW$^_p&y^JewCMY4oAjXMOkdoDZ0cs^!DB-#h0Ad99RaQxZ395MPN3%
> zB|oI>2uh!pz39YMCHE3xd3bN`vVVv;gv2Q#eeB;<c}?g0IHo+i3%w;rm@LM&$>l8h
> zOx>2TEn6h*+}*?K6Xg1zpE+2bT2GE08BWpz1KTmQ2Xv(S%Nx;FnCd7UIn4^g{M=3D8q
> zT+YQbxWm>Qs@A$OgQ7@141(KR?CyL|%rCxrD=3D1102c!{)jE0O*;e!pWrjZ4vTcG$6
> zOTU+-<n2>8$er!}(4?Y;%dcLh^|<P<zXWHJd7<;ftYJ{8xy=3D}$mZP)@_OLrcv47o+
> zh!>hDb)7e*tGo3o<oNBusK)y``HCZ85i_AT{1C-QQ*$v&$Lp-6)TE<$JqQLsT8d@h
> z3Vd)h_l9V3x&yt6rv5{A$K?)3epPYNEk4S7+Fz3DFdE8&`9w{A|1c3v%))HS7HC4n
> z+4xl!tN=3DEDIST6%FINoNz9e1W<u(<nt~DV7(C*xx=3Dae!D&>;&A#3iWwKb*$WEfN_a
> z1}OGP2o1J(_=3DW(4+c3_on*q^|La9VxQXTHm;^X9$C$Bk6Xs2*T!V2J=3Dv7IM1j+fmq
> zT?&6OWYDWPfr78rnoaO$$K<c;rwE=3D~8wLK;Di(c3biM%Lv)cIL%z9FEIAW=3Dp!-e~>
> zS|oR(R~Y0~!KH!tEr-l_6YuD&X)*0!nIwPhOMPiI*d0hK)_w-7;vE}p53J%uVg;M`
> zEe&A5YwxvM6xGJ7q63i>+}Wx(abg@pND*tJ9uVJ5B|&7M1=3DZ8-ktTf!Cse2itnCFw
> zoPjH^bxs%Ozka9zYJgbXRbFSW8huqN?W&#@QT8vD!qEJl3lEAGZx9hu>)=3DGAP|8%K
> zA;IY@1js}vTV!^7LnmCSwP;!*NS59$Wd7tkDV&6vL|7dP0h3BI<Q~zyVZJmcouqN(
> z7EAz64N`gO^{4uk;o*HrMR`<KYdTpN*b>L}{WZom1bC*Z2Pz{{Rq1Zd>4a@y7!~HL
> zC9DQ$fwufw65!Im#x3eayz+6KNNVw_vT=3Dgxek%tctU-LLTi83W{e*ki${Zt?g(?HY
> zdW7|U4SreExp*qEUf9wWQ8VtrAiTCkppdzNfjJm#L<j>(MG#5Qn_G*}yVsT_xggdX
> zLPd~yfUx>&l^sSC!q2%|?1;cL6RT<mcsx;Jey-&3RA1FEA3X#-UZ-gf!c?n;^Hpg!
> z$j@vOtaax<BYsz6DYM!cjCxhl7q&NeoC&zbN}loSTyQ8IX8WbPa{Q4j)7@FEx?M=3Dj
> zb>d@bE9=3DeEvkQ2W&CAY5^Lx)OnQ<Nu&n1*tb5a4a`>9)h{@z%Kh>(Ml9elR;TujJZ
> z=3D28>P!~$w+Xby}NNAR(8El$nx9_8ed*Fb_|)Bvgs75ZXNA%ErEewn14hSFVq^j!1H
> zaO9H<ZQpxO4k7I6v}UbN*UCIb<<J&+qK^Db6x6+9pM@>L4IjDPNeOh0umj;cQ;6M9
> z*~pce%I3hSAS=3D!!J?n+ugwmQsF_hVKrAd<$J$&v>{ol*|bSEt-?RLnYBeto5B{%tG
> za;XI*<*4;^vA46hMrE(b(oWksE=3D^(5l7JO-;7^$1V6PlBuxCo4Vo7~AJT`~JWWk~&
> zo`9hLZ%?zk4~CwqvXD(jc!y*tOapjB?4gc|noUK~D0AxzN94iN+PfGmJf;ATJJZpk
> z(Oa|+vZz*R0YF|!+w#43Ra%DHaKMZ|&IAa-6}2GxD|L}!vR)oEP5-fCT&WaxgSpMV
> zT!trUqL%{&8a%J=3D(e~7NSX#Ali^TpK*Sxn0K%i1dhY~G*{O^+#^kW-pmWtz(4-cCX
> z0-5PxIOBBj2HgP`^>%1SxolOyNMcLr&A{eO^;$Xa(*}K-6g;-;PyB{EN|dEM-yPww
> zP=3DCQz8C};W4oA_dTs#EaU82t31%QQVU20aDQ6ET=3Dk+8-qF9hWFutG$<%HhIZNKtqV
> zRy)&W(jvjCeE@0Sl_j3KO%HjAB2sC&C(itaww9^{O(4JTYeGhVqvM^V=3Dii5UsSO5G
> z&yK5)wzko5hGp?0xD^@!Jfs!naWGsI$-M#ipm!y0Yy$+8qsiq+j%RJsN0r+h5m{yG
> z3;r-T#x@!$yKsdZ{9x?<BC!3mFALaMq|#LZ5r2BdATA><$vVyd@I(2pV8qm4b;6`V
> zC9y*QWwyx@$hy+Q>Bub+6AQm~2sHoy4;lyOEH`R3nE@)Qk{^!f*GsA_Ab=3DjM9)D4@
> zvt4_x5>4{?TvcAG6Ig~jC{vm+a>(Gy(ak0@xYh<$d$iLviI=3DH|M%&Q%-8E`FH7te}
> zBPNO(>C(u(t6C5@v<!bdoJe!LA*q?!dGlCdM$nu!Wk{Lq=3DQ_5evEK}pg&4S>cseLD
> z=3Dl`dsXXaN?eTC*fYqW<RQ4nps=3D<PqyYwta^r{T)xtBN5AZf+TC=3D+)tMhvYh*1*P&y
> zuh5T-_g(g&GrS9kIehBr$MlLp9pTc}xvrkVjhn23y~?5xqKYt-T$+_|O(sfHtNwa`
> zqtL1VVs*rH8p%xa?96{ES|Hodu%Io90C9<_QQq0KmydKdc;oqx|F6CgpN}Jbq89FM
> zQp~cX5G`-&u@YB=3DF!BIeY!bpLTY}iu6VgQQ6Ctecl39=3D>U_Awid~vIe5ZluVL!U!O
> z^(#Y%6t(`-g-<VQ01_Wv;l&eGgiT~^Y9Wtp-XuL=3D-;16C`Sh0q{Bc{-^V>@a9%z)}
> z9Qg;mCIyynpGULy{8x>p!#)C(j3q2Y3zRa<j_yR63zY_|Ryux9hT7YmN*RHY$6^mW
> z+G<zVWCHslpH;nl<5&pEwMGw*f%>3iN&&i&E;~rTQKPd6|1{;l=3D_KkND`AJn8P(cU
> zFD-*tk;tte6=3Dw`qpS84Mj4GOHhOr*e$5b#PwONme+vzoEz2~!HWf8!r$=3D|p+4~e@F
> z!j6Pp?eN_RV(BZNQ?mU8*s`|pZS#I2uc$7o-%MgVs2yox^%)2MuV~up+5<&cTG%S9
> z=3D@luey)h~=3Dp&;SD4{@#p#OHbL$<}qm<eSV_3#)#ylA2HuxGXgk`g{Am`G^ztJBX0`
> zp|<Swdl5qhoCSpPM)N)wN*AxK)P&}C3&rhOEu!wvVPW&rt(xe4eN7QxJ+BiC-WGJp
> z*?J&I2%?;;i}JXN(DDneEy%gEW_&KA;1H}EEz}A`SR5ww9qSnaT!iiiqt4AqR{-ZJ
> zA54~uCwGN|Ht=3Dnfdm!M`8|UfcNGOwzmYU|O?4D5zIi*!Zo6Svs1~)PwH;hn8zwTpX
> zCt7q3@T?=3D)IddQ(4xS4_*^22zpgWN>PRmS}C$;WkmpN=3D~L4=3DHfHPX!Kue2!U9LZnT
> zz{ZhLZw;l!&CNZ4TsPi-qO1^!-dT;f5>?Nj)Nz?NVJJ5CF?v>eL|ah6_mOeTSRzFl
> zQRv#4R@Zl`qCd^b7Gz=3DdU~zl>5<dSSL*iHB?^3qFSQZ?3819-%x!EmftZn<)lW#?M
> zav*8Q5*a&KnA0<X)83UI$S=3DZ;mY<DZyPnzh#sYmZhYSKI)^XXpq$O|1$_(dN7qr$a
> zSGQOV)WD1EN?qwq3pe3_R}?WKxhgkOnkko7F(6`y3Jo@UwaWiHIm@|DxDa4j;AYt)
> zPfB@CfS#D|WZn<2C<Z2&y2awGPl|>JoEzy%$Dv>~!XE}+(h5W0G`1Lb5rvM9eW9}@
> zKe&ZkZDkDg>RoO^xMUkWzH|8&+P;SvQ<kZ=3DRfM(uE_BQD$h+cdvGHZDl>7<e5^2Su
> zsx82FA;aYeuzhnw_3xawrXqEyHem&_s%Sb#yn10%{Ox4WX{T;2^J-9!rSbaIkF)b1
> zWbAGa7SMliv(CZX%76!mD?jN-B1p1)`1t%+f4jKbG2#wp|6NanF-WCwfDL>YnK=3DA6
> z1Agf04DSVu00Lsl;$l?)+t-vHb7@Xq9r=3D3W$5GbgV$Jq`Y<lRT1N6c2gNJ}<_IzHG
> zaMuXs22rz3^dF{4<>q8eysiBEX0E(rR{!F)v`8NK0?5&PaYDMxAjo`y8hcWM8HG)L
> z_PR`tXg&ofAL$T90(=3Dl0n11+N0Ca!7q)%*s$jR3%KS&f6!Ut;xD`vjyzqOpS3*&?%
> z&S4Gx%@CCY5Lo%LTKkWvGWswc<^5*ZA_pSCKuRzNu;=3D=3DD90)J^3hu`hwl1XYzJ2?k
> zdd4!e1BH$pZYkY3hep0XL_HN&Jv=3DQZpI~8U+wDiibt~R&!lW=3DW0hb3Omj8>7B3?RI
> zCv<L6C!T=3D`J0$fn;(M8eM`NR^D}N`*Zo$uXBBT|2q#KHgijs2S^_4u@MGAcpGsq5=3D
> zm8y<}ohv9Yujmi22la9!5g7q8Q}Xu#9DUpgr;YdmzW*KC?ox%co0IP33ak+y{;_uH
> z;8w$ZE#r9XSOpJxz0R*;)A36{#Y!Yqq2n;K)!q-3HmJqy0D)Xttz}Q2`(Z!6nE%O5
> zx0y#>?|*e3r_=3D^q^~9dAy899i=3Daw63eiQ?y^`PiS0*>pK9~RkF?t<Cfe0Pe(%<y9R
> zvyxdoU^j-#a-L2@08)<0Gx(NFv4EO07{jyyYTggt@$!>z8sr<ZE7iWsZ^>!q*AK!d
> zM=3Dlw*kfEzxqjTk_A&Q@u=3DW=3D8&yO8)824nOlwv4_taM|<m+reI5rW7Oio*S<q)&MpM
> zh!$pCO=3Dvm*nA!5uIrTES8$mOj5XXGB(AVmzqw29D{5NWd5pum8ShE}HyBizrB=3D`yl
> zb8?~Jt~GW!SeV}oKXE*2ZE}h!Y8|YhNr)7>G}MYw|0L~WOWKW<Dm8z}jI}NP1(0{$
> z)qRpVz%>LB&!i{b{ZkfJwHdm{OE{4cJSbWI4B%)h7T+V3Sp$MOf7*^tHZp%4CtKf>
> zg9YKJkN)tI)SF-{BD?wCCCj)&IOiFp^!?kl8g#v1<VPu071Tqi+7>ak9@M@%rs`*+
> z$6~)>kq-ud0u%z=3D0WKkOg|s($J&K7kV@L$~)k+X2GlP6Su`Sc;BFDhHFL?qC!K|rr
> zOW~F3D614~i!l8$w+GD?(CbMPh|CZ$m{LbygpX-DYJMO0q$2lsq)1zI7!;-k7R-UL
> z^H7uNduC4@K5B{r9OqET#0_{D?os4ImQW1&(@-Z5`?W20TBt#j0)wcU2h@Ps@BUTa
> z;TD2qQ--2~ekT5@JW>>ADW0WHZaW*mF<GXz!+&MCJvi1Cey&N$@g8eagknT+V~!G&
> zYQ1I!*I@l)Ftb9YGX3BU6HjkCvMzoi>@%$Vy<IGj?mNhV0ollN!)asTn(zEEn!Jyb
> zB1+3uu`Wn#ESLuidVkI6aV+OJwBpPYa8%gp?xke51s>dt6BsJ|oS%$xGY*usQ)MOe
> ztEw#Cr8v9{!<V)&J72{Xr0SQH;sy(YCU-yLIQu`}`U^NIZ>K_<m$f!go<LST%YluT
> zAcT(?%;@@^JqL=3DgO4ncii$n64wzfgFxO2vWj1%ALMUMxRA=3D}26Z}<VtX2{x`-e;2{
> zIhPK9>2T}Phi)eI8*b}Gbm|TvR^w8%r@)ZkI4lh@Ae$#~x;R2x<7=3D98({5i@e|PX7
> zn5_9QL#|K&?*);)Ip<k~OhE-4?ol6FL7fx{cLY2<V_n!XtpD>r3l^h4-h!*8e8Ybc
> zFj@h2qt8-^g*%0gr>TuD9&wLG<OecpTst9DQ_!cefw+GWom(S&o%3g<`3RK%D1_45
> zbxxC$O&|6vzc;T`o^E-@+ZJg70?+~-eA8)yMP#hR3Ak_7V0L^DySU<EQ<7l;*smFt
> zlqkx+2wBUB+?YX!nS^ZsXQfDq)!@+nCeb?NLi`N_>wi#MA`?{n7Z>Hj^}S<;nxnjK
> zc@J`!K%meTx$gLk;Ju*fDlfffw2{8#_yh886g}GWikkB0geE03oBzKL6dOyw5%Sh|
> zE6y@{uqkl`K&C9yB;L`)eh)I3t=3D&wIzgg!z*JHX}tS{g8$f&VCkcJ{Xzw(g6sf+)7
> zT6xa=3DP3d$EcEjMp_8uQ)w_ClROn_*$Qzeg`-FRs2k`W?jRd!>kp5&q5DTW{~;E&4f
> ze+DnlVw6&C<C4y|u|%L5Z7}{SBqoFzRmP6&)xSaoD%c&62+X`t@Lzmz6FQIyP$b~i
> zd%H-vz*F{(YFk$)g%He{;{RnUpTmigHwcSbv{;X-Vp)8GtLfh46-N1}Ys!s9O20ZM
> zp=3D0N7jE|f~CU!Y;LkO2DY-j@$_*s)_7tu+KrBi5CBOvAWBwhXMzwqLD`u-2{-J(TX
> zTV%o*YJ7r9|LzsySiHGUNRew|G<cqqX0Ab~7;r~Qv*NxQ6GG&rqYW#X<awYP5}9TG
> z-rDu8!56O;OVvpkEXkkj`zAiY?tIEJyK_i}T$hk?)F)#k{pA3Nq2s|T35vx_3unTR
> zk&5jZ?&S-)d7yfg&#T+h;33ca2o#1vh<Z0gEY?)EzFV8uME1s+hye3@!10Sr|K@$x
> zKc}AQa9O|aU6%hpS4-RZ9Lg7|(Z~N+nb1|3jYh-F28jHua5Hd2)gnRR4=3DMlf#;9_h
> z-v0!gG69vrvhaTJnej}>^6sI2(F~p5{q9586=3D*F!ge$MfuA>H#Yby<8hMGS0dk!No
> zC(vuaavoBQx#UrscOglAkUtF|^faKzR2K##y=3DID|_k2M@ph(6_tZ1HdR(pI~%c9i`
> zpwQ>tq=3D=3D8_4Jd`g?EK9k{G@}Q(-j5%Z3N3pYZstS%Ah8!eEzW(d@vQZ1YQzKu3*zf
> z&TQ}M9Jl35flP0~`QE5&ArizE?tWv_ZCd4lOluzVgP|ZMtALlHw&MG}UIui&6BdAO
> z$~z9rMsQD-r|lo^?CvR66#)&a@r?1oCp=3D6gVL2eBSD)2Og8TCSVva)uSy85DOU6mc
> zeG6&X!yKkPa}{^t&6<do1=3D#9ga5-Hl)ew{>T&uhj@leuK4Si*t`+T>zlBM%*Y?qQ`
> zRd_qB8uA`!9HlgWw-bnUB>~CP%9eWrviZu!EOl~!c@y1{C0bKtmZHLW#*n@$8a%)B
> zNz+6rP2s}IVUrgVSj)%6df})PG%Kd-FcNyZsOJ+NAz!Wu8+|6ba1^b%S7~t|KmM1z
> zARlqj!pAMRIV>PQDmBhAE_Ph(1Jg`=3D5XjX?D=3Dp0kvL=3D#H?7RtK)ajkztJ(Ou<kp2y
> zzB&ZD<l;JwbvY9c48OR~gEl1YGeviGP3s8&2$xE?7s$>sV~IiIswaa$O(dT4)B|#w
> zhWLal(72>$#F&xD)D~qk?x#r!fX~w@0?UNVl>AGUm+DZLM=3DcV+E)0TWKSyqdE<E7A
> z`A|2W<HUBGO_@ZY3RF^}-G|q*+y?EMcY!#%+N;xIT347v1{5iIJ%fY@2x!2`AV*mm
> z6_TWIOw9;rznmmmj+OI9x8lSzpCsm#+ak~quHWxZ+O4S^^?9yL(}0<_w)@j`V<aNK
> zax*xWu1j1&+Sh%2v^t(Wajx@GiSOHiATB@l`<ML`P5?>=3Dw-T$WNnw6dBy2{OOpMsb
> z<-J1nfwEHu0p>Pd)q2<FDa1)SKe7}_r5bAWDiS>kfuL2Wp#YLf&Yyhq$R|z>9jiPA
> zy}m9&?>*z}9DY;nY&WcZyrzN|ZiBr?^$OuA>*WBvqDL2v6B^HrRck>Du*YK^c&jV1
> z7Osh%`vp`r^lS#ULrlu>WD8(^ZwYCLA1kO@S&bB<;PfO6kux+DOT4?}f)F2B-Z?B{
> zc3L)oMHwJ}Q9jO#^<i}F8<mv5C`oAr7A;1n@YRGAO*5uCGGbtRmOxtHH{^zf;xuN{
> zd@lAZs1^>zN!Aj)62=3D*Bi|ozX#e1Gt<~}r|d}p8tZ1#Ep&qk4*DJ1;}tkk7QdH~IS
> za$gOTEy>8{NGnHHcS%?C%sjT=3D{=3D|8WLJJ8dAs%v?c__VqLR&OgQ(3BiR8V?LZ{oVO
> zGiLBYI&Q1`v;`%&=3DTbOC>AA|`M^>I}tB2TSzPM4q0Pg(>FTp?LbPK5qgn)tHNZ>2O
> zWlm`pn@y#Dq_pd?##{44^-`H!<C}s(MU4^y)^7aqt^H{&3T~Qepzwy0_6l}FaA6h<
> zR@Qm3b?CwmO|&=3DnNrtuqX8tBJgL02?kJwTDajo(lJRGX44Z~n7YTx=3DNw(9Zjwto6P
> zXo9I{jS$U50!{qGUzeB3WBDVP$-d_d$Y3965n@#bC+w*MljfhK7VJr9p+;Ss!;~}`
> zZ=3DV`6;tpeb>U%Uo6lAs`^KNK}o)$C_X;mes#~(a#vC%u6)S&PBV0kcUyEc#^!Rfij
> zeoesFU;YKf0nxgLPBZ1)XcSYi&f{S(zZXv^S#XzzZM2B5JWTXEcyq~1ytyL=3DT(L4+
> ztRzOl;@%*k1NF~-YuhH0l3S+^Ue%QtNcl;|s$G_3AJQcTBhc4y=3Dy4`yF-J47t?qJy
> zkpaJ!11*^z1REqC3H_O!-z%y)kMm^4c}EQpxGKS6nv~a8o&(g8#JMy&yp-z~Hf>9!
> zd5$z?Dk|~%R6sOz;B=3DEbU*d}-iJVB5d6F>q96>pJm}ZQ@iGp>VkTlANX&eDEJUUr2
> zS6Ha-SG#A5tNl4d9q)mj<hk<{`;b)dyUEoKb41K#TUc3k!;fI1NWQbI%}?<icr6mU
> zJnS{x;sKeQth#NBpq<)+lNiG?fLIz>q>I9ZXOw}=3De%zRZfpxt!5Xyg>Idoo-R3_06
> zyt7o+UdYpfJuJA>s6hPx`Vj?Sq7#F)>SpRC>-nM>fHo)rXrb{SOyeN3I(@fzL%;<_
> zLO+bj64--)meoPGgGN8!Bj4t7;9tpXawPDx(7Pb0bEag%xYGiDOGu|>c+pt5Z`z9|
> z5=3D^USjZUKPFs1QiNugg{y<nnsm{a$nL+rye8uo0}kR=3D_Xfdm+lVWq1}rX-7@{8GZl
> zHB+lkIW&!G)j;A``o*BHa{;eohaPWgLt!@jvoq#j2J*VygZ%+6u%#IDq5zRS@LXaq
> za2XkG`BFqS@`_!Vfki=3D3lhyH*bv3+kk?|h!H7m-R@x%*6x#*qOQXk{IT%a&|HiSxg
> z1Qy9p8t2FM%N96Gdx<HL$h4wJ{?`VG`})nwbriU$O3P5@xv+JY-J>c#4U|;bFO_Pl
> z5oXAPq*pZEn|G817Y(ban@+nUSSlz@0%iOlYZodN_2rDazoTSQ%bJT4;LiA*=3DGxB|
> zSfv-RZS2QDoBbg=3DU*?!#H8$5~%f&L4O2gm~%Z5LIz7hGceBTz|3`u4lTrwy>e^OD}
> zD*o2YnaNUHmbejj$O|QE1W<z~f=3D;I@rPAQ8<(Je5DDs+4q6Vha3^nz4aXf?FXKV4l
> zl+^KZ2>G_mzH3eCb#&dcp__%*_B;jC1iKNiLX<E?Z&aANj9<#u>5CJ(Zo?NYxOrIA
> zaosEx6d8wacv3k>S6YqOT@aJ+;bJdfEJ>U-e6eQ7N4?=3DKr6Wnkw8^cOu#wmu)xaH#
> zX44x}<Yv3f0k9OGK#VFNzu`B{%m$?2)HcFpJXDa%p83sL@U!3>coMAisVObAvr(0-
> zhLebyg`n1vvY|Rl5Hvc&D{>y$N{zvk5?IK(i=3Da-z$fE=3D!fRD26d|wN7Sn_v}n}(05
> zzn?#5!@1)_AC=3DVDY8!4D;|bC0r-75$>-*y{_?47G#%+fZ$O<S(M=3D1UvvpzYQhmY$T
> z`%7_VwD)hbvO)9NkzUG5uhVw2{v-9M(u=3D^osq%Bh;aO%qPpN{D9P|P7=3DE^B@8LAp%
> zbct&v3*-1Y3w;~sPttw<y@Gq=3DlW{DIXl=3D^V8)JsA3ZuB{tR>AGbEm67swxc=3D1AC&%
> zO?|slKWf~?*SQDA(mb(5G4=3D2a6nc?;DIdIzustVA|9iiQS@Z2;!rSwhoGNDgE_iMr
> zeY@=3D?pELPfvCsIhkPcTlR70`1$^9M|{eu4561eD5Jm5=3D2H0HDXGTMoG8T-q}j^vbo
> z%`s9M`B0HHo_tKNsvXm%cW=3DIaVd(M;W8yIh*L)&DAy~>Ok<h9guSOeo_&Cm04M0@P
> zyEoUm1?M)pp8;>a9FEU6YYbpXgt@j8>5Wt<mkf%6c!;WDS+8UER^UIbmXBcm?^^x|
> zbqsGcDKI0dQY`*qs|fs!K&?!oy!}BnL)TEfBvCN6qc&h4z;4?1mGPYVNts;vCpp(?
> zmrsKgf=3Dx<F3!#wAV-1G_8V~}&q4YB1fd$W5B|?WkR4j|iQ3ms-33t0m#etU`>pjKr
> zo&tMn7o?fJrl?2pXex>as-)z^{TW45hL;B2X0uG;y7FI{i7<fqC)NJyU62eZ+7QjF
> z)<4AuVd!hjYgMrlrF3;DM!N!xzqSo&lsEkeQTfL-B?j3O-kb?@w)$!88a^O#wqvPe
> zo&c)=3Dsxe<yd4Ex=3DV?Vl`{CSD5HAX`acK-1i_c|*c-S!Yx0}Nnf_9A*D_N0iHyj)><
> zuy!ZLo(uf$Zr;*^KmQG}@+&C&Z4$*ydSesTQp-mLNq<xVrm0)Gj=3DCt#k7f`@Ik1N7
> zb7MIc)jynSy8=3DjBDsd0>5KS&HG!RVt-CvtpQtQ@Gw3k0pARkNMx%8MB8^AMa@`UVD
> zGxiC^#RL&;_mlh9^)JwqQi8(j!yoCRoNNr$e<c@;7F|LzZk$iS_lFo-6bC=3Dmm_8Sr
> z6GI=3Dq{b%6vXP8YODzc<T{xmC2EgauP07ZBzJ7YZHhguvrKa<{)+x4u*`ZlH6-8VCE
> z8Ct_MX!71<z2{UgT***CpoIeg^M9&Q)mm`{DPl19<5#jpW67#?ntT*lt$eKkZLr)9
> z01N$sClLf8c`^yXU|5Wb#g2Z6otc*;jz#)=3DRh}<@HO?#1#bJNTDxb>5>@iOC*%(1u
> zbUM&`1qmG(C06oI{m?w^Pzat=3DgC!guP?=3D9fzzGm+!@JLgwiTvLWF=3DVNWwk9!ocCOV
> z>lFwsHtmX`?ODS_tZ%6k<}m{}rL2t$_(p(C*6H-x(?;nBgnTq}6%ehW2+f%9m+6|{
> z1!_tX{MvZNS%ocRrA*q1i?`36;ZWqhcUj9K0SA1$B&&Cz5z+gllT}tpgqyE_K)K|i
> zL-=3DLoJ1-OusA_rVd*B?D5|offZK+7mcyj^ZF?j6l`H~e8;5K1^fSm5S21Ig?z)@_%
> z*0I2$UMuAxx&pLPGY5Bk%W-pm$y*}qx`IG)o*<NVLaBHQ+MEz<Xs@9WP_D41<fTT-
> zY>Mkrn-M}%NZC9!;!GXTga+~Ah|`}1|5l$b@59#y&HnG^Kxvsz8@~`m;LcW%dY%dO
> zcgtYCk#U~9ho+53vuF-$F_TfrfD>9*DgLhn(wA8KUjufvvO2zkI@~AHIj=3DFRoKY3}
> zIwT2gNlgtH!fv;N;y1uER(HYv@iY0tWZDRvshJ<gU{HAr@WtiUrpG6*Y<jHS3M#6&
> zc6F7ZFmcxt=3DVKA<Bt?oEcy@M3OiV)uEP6H?-}BE-zH5CU3Z4&(H^m#2Fs@G0)J`KW
> z7fpFPAAId=3D3-D&HJ)u#W+I0Y4>5YasyzVT4Wr5tZ&vP0e*uw8b6JYR28tPKYmSA2f
> zG=3DL?qdA{S0R=3D5Q~2;{(JevPisuX`2l)n#uZx&XS1aFHp4@A?nGSHlRM8ZBHBJU!4X
> z)Qv_e4kgRb$5B(a#qS-2Rl@qM1Ak*gMu{DYT$~<F@M{dha!0kmxV(>C18#IyBlLFW
> zzS)g6XnPW0u&dtq_h}d5bI|F0%|%v*olNgAq(0zh9xC?i;4GQ_cZl?IP}C1it%(6P
> z#10(F!{?0nG<udw)PMgeotRv9hDfMLHj9qTB8_A2Qt|Tm_IZ^$`;g&C8zJSqUu!`a
> z+}L1x;~^4>w%B;Wbu#OSt=3DFSamOBAwJkqf|bNQmiao~B(hXTO-=3D^JT+O~q>Dd%C8=3D
> z`M}%Aou}f!{`>2YAX{bIr2$>HHwfdkzuK7XmzT4>S`IzD;q7F!;oH-VQeFs7$dPt;
> zD&P`bAdL6)R;2kh$wxHBnaM-!bokd0NiJ5q070=3DO#INjUPvzPL(dq#M;@lP64FMsA
> zpcv>--CxbI4NbD=3Df4^q#7`%@Fl(9X{+>cV&HZn_89G=3Dpr6x}$ND0{E!I+M<Y^42gU
> z+tX~V*xn&>%f5JNWBA`s_Vy8^AKELN>Y`wFM1-F6862N8(Dx0UpJ8}9@Pp*TwT0M0
> ziVnLk8~}308k$Oz%;ys<TS`+scQ?-Oes9Igb2z)sPkn{-uHeB^jbM98lT%W;YkHB?
> zigAL$Q0U#2a6llsoB<?>*5_AU2?vhl+Zasrbyxf<t<$2X7R92MgcY!a2b3G3uIB^(
> z%8dmTVWvC*I*aX4%u*oXQW$Hj*D7)>;kEU#Jd$#=3D>Uw{C`D)O4Ze#e>>|p@1FtJa!
> zm~vc%FrHT>Icbc=3DS9|{VsU2+fz;LPh3UkHFCXCAYX1Rq|$!hxn$Lmf(&v$I$X`1fT
> z{EdMQ@h38_CJFjsSL5Lu76`BYAU!6u)na$(9sbtv1djHodCMvNZlSwKLxT9X4#i?{
> zm6f|cjb(?@X8-~Sn_e312c9+r<oSGJyLw3!j5x9#9(!s4;nOiCiwDqA|K|lcup`?U
> z2VKa-Ov^-|L`+$jScaaI_P!2MA&D^n9h0~cUe1$VY2nMkBjk)DQ>2GoAmR9Gn?%%c
> z!~iG2hJIWY+S{VClwv9T<p1)50A9U@rsm%=3DGSmXiPzg(+1WPqS!jmLW{2Sy!PA;vv
> zwVuPYFk>+jZ9XhVS?}FN;EI%qt%ea7nfgBC0|$<|3kf&t3qt}M7QTb|=3DDDp6hs?rv
> zn)Bae+-5668!sTn)71~0XBe%^WmLnFasvN!E;KgRkaU>E9FNqj)i3L}Oo&<deQ
> z@9w?or7fmPZ#DJ$HzM?HhaU(z*>WZ-5A8VDSz}1(d(|7n`CQB0K-QXrCV<$HpVe;U
> z;|xOrv?1^Se}af<MG(F<C-ma0u+Pdx)j2ub4-+PO5&Pt?e5WSZIjrQXTYbgrwr$hX
> zeETrA)?&C79K}yUJ)Dz7=3DpX`0-b%S?G>tw75}XNIrK~f8r+?DNM833!q~0ky_|nsY
> zA_FEM@@w=3Dfx>rnM;Y-w?r+rB3vFmzP(~I5+HIYLH>RrjWv*{=3D7q>ErtBFvRd33sG2
> z)&nhh5DM`De}0=3DKlP}mI+f03In;^_o5EUt}|7+nVI~jL(laeuld^SAyut-t<8nn0>
> z)iz8JoBrEXcuF0Xe#@>SoozLMECqtb+yP~yfXw3XotD5AIyhYqn(xC3ZEQEn!$h3h
> z&GKc85w1030eoxyUYd?Bdjl%9fr&q%WTaMopWlxbJlhHK6tKpieqaEOy+3qFvY>8S
> zc;Ba@LHdxQ8h?A6MhZPI**o~HBA>Oy!!g@q)-^_)#FKjSG3Ss`?dBy)LeR$r)pZG3
> za2@C+k?4HZghlS(x;0GC_wz68|N2;E(`{6ea(^!_8vnqq%jEVNiHQq4-sgJNTN*x|
> z6;pT_`*sQr$2t<u)*8DxB%!+|B+1emfA0VWr|pPxozSFGT;L*BCP<_I-6He~kP9)z
> ztsXJv%Z5-`$)wb~Uc*I~Zr9eZH7?r|X@nwFIcf&Mo!qrTP(jEla^dJ8J1oaPAMY&)
> zbQRG%fL|6PL`d92S?@{aO|dIXGo_L@x3<xsCa1gYZfT%WZ=3D7ME>JH5aLdCmR$FWon
> zb(fu~<`6!7`O{MiwXch`MW+YeOI%mG=3D8np*g}))>Uw1~8(2*4L?}}d!{pYLzsL$Pw
> zGU>*gI&aS4SLbol&m<BpULli|lRGM&yP?WUQPu7UTu$NxNlL~)r{Qt5B8*G@LEZG+
> zCw|M#RZ7BKl9~i7Ob*FayM?8i^OA9b>K2_APyiWr|BjAV6uZ}>JE1nfjGDJIYSOXM
> zmMTM-F0sHc!DhT|RMmGEVL?v3NKHV=3DG0vv^R?YI{CQ$^OnP~*0mcaPg*TtCWHpL6>
> zG8VmG6&d-A!WoBuEpiCO2-$aT#n8n%dr$T;y|5AT35;}Hf<?9&{m-0&p;6fPmj0BS
> zyU=3D`kdb$A+HPv$`56V=3D3ZOz}KxURi}EI7EBs1L)rl40let>L1%;GA;;si{<s0uvVz
> z;R0yLkeXWkfZ^3@jwCj=3DxZ;LoejpAKVdE_{1WX~p`$1_lST`^a@m`D7n4SBo$ns(<
> z86=3Dezs99Ee3|lN*lx@$OE-<s*W>(M9DPz8t&LLm=3D<TkZ^!N3cl*jZdX%sA`U3yw`4
> zuUB$4J$JS`t9*U2rU%!H;WjswM$2xz4a{MM3=3Do1KGCn_oUb;eS3{c48TG6!qWn15`
> zB3zkaypwkz@22iue2sa?Nt%98y|+@0PRj&J3hH#Wk(=3DfqDx!y<HTLbfb55oPl!T}`
> zTGFEkoZXhrb+Rn*huIl&-WpZa2b?%^jT3&Bkxe=3DxvMDg;QS?d%@op};Tc(eiwCf_2
> zokSd~MS-UT<Eo=3Don!T=3Db9^5=3D-Hmu1r*Dpv8OQirz+{+x9F|70sZi;l2=3DZec4V{lm=
r
> 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
$miko
> zk@*7AlY((`f0Y<@$&qZw9`p-a1p$QITMw=3DZT6cFlIotKBFuCd>(`xmsNj{V@rck7K
> z4|>HNREGD*rllG#^@yp(AKlmcx3~TQJn=3DSVpc+UGB(uO^;?a7E$En4Ek|+_7YUs?F
> z9`<tI|N4Vocb5%C-9I;uEKj=3DnY^#A><(&r!)Qwu6a`LrcuLY&t3HKuZ{CO~VNZ@m7
> zQq@#$xAx*qxMF>ZIT(qT6$#HUD>g)LXV$<xfup>(NjiSu#SO<o+`XZ;#>N+yV7t?H
> zP=3D&;QSfddPlyqpeksA>TpNoC<c#Ytn5r?XYuHIWW&RHm)JhOA@M_-i-br5w0CH{l5
> zXjzS?Pqx}29$d$u*(C(uJKpt{JT>apW_aa+dt|w_pqZ0W<N5taX8;mGy61(n7y>Hq
> z-!?`3C$!+|mDFaCLS{o>ROuxB3I~v0Ab8gg5!gIDV*&0}ii1|#J5M_m<T(Dd3)nOh
> zW6M;hgJ*YBwtsYvC0{@(VY_4%au1jTDX2ri01N9OYf9Wj%6MgrbD_Y=3D47<tMO;9Cx
> zF19%{3?yfmZ=3Dgoe_Rcdvhr)+f8{S~4_EMnvV+cXs*?CCb!%5mlF$(X2<BS785~O$#
> z-{05cRfo9?m#&OfMbjHddQwjT_d_o)@&SG++Dpj=3Db2ZZuWjD|R8xSx!Ci_Gb+BOog
> zItX`QuWwD|^JTp*g$VpquYD0wP8$~#Mn?kac-N;|Tu}0`ZC;ir3=3DWMU-R7pHa882b
> zpK}$YlF5<Qb<Nse-$co^jcVv*;ZhFZHm&~l5;gw!Dh2I)31w{(4v{kN!=3DwIs)8z>q
> zb5Nbf^`&<S0}hwo(kS1=3D5ulI|p5_eFtkp58GCHAs9JaNtmVVxgn0t4$3SpZQcOQdH
> zz;(NJ2CKy4WM$iGnXs#06=3DA<oVSY4pGd+Qu<6Z(-aOVBq5A+7%k_c3V*L+Z|*~KU}
> zM@uv`=3D4!8^I)DXmhi*+#oT3j=3DVddX63O(j~_iSp&Xs=3DLx2RXA0M@*{W$^RL!=3D_!p=
*
> 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
w
> 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
c
> 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
v
> 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
S
> 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
QFI
> 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
F
> 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
p_L
> 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
I
> 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
V
> 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
C
> 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
P
> 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
rdo
> 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
URd
> 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
^YN
> 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
@q!
> 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
U
> zxRxbRyM*XB!SrbYryn}d?_^@oOIvwRaBtxyK`zV%@$vX=3D83cF_o8Rk3dma~I(d{+!
> zciou)laXI>OEIc!##zhO@qe#U;rdiTTr<F<sUZw2-@%fbU+DeHC&fOD+PH-x95dfN
> zT9Uk{Dctoh=3D)~j=3D6KdqAu?9<hZ^K#G5s&@0k*on}tjDg9x?}|ld%C)>Wu;|cafRcu
> zO?ze>JKdmXSEi?8gJ*g_;oN|+#*460Pka`=3DVVuDQ@kw0Q%Dx43>NEQmeAZ=3Dz8i_dS
> zNPG9FE^zfxiO&mq#~{YZA+4XBe137mSInVG&HtxEQrJK51jWXr%4OFH`V-17^rv0<
> z!j=3DGaLPniQ?Lj`f5816PAddl6_I3~hMv~kFAFFhscK|Nf?-+33>AO3s68|1!w7#M{
> zMj5D9xSEk=3D1T=3D^Uj!4DxE#1YC<9m1?4@>m2Xf6omUz!a;jqDV4PG8~N`O0r>y|LUC
> z07QRli)H@dlik7iv*eCi1V1-S-=3DKyr#wl?(sgR4LaFz1VE<m;fQ@tC+5MKIQeoj{^
> z(m(8!E@)LtoOIP#n1_X@Q@|m^X^oDEKqVqlCTyS$mCFH+H0R2O+ek~*19`fqD1%!h
> zUCey+vyuW_*LI6Cs})9E=3DoIo&{4=3DMMusPy`xph_M$>@#C4^pP^fc~4zxF^9dt^1{w
> z0H@64y{R3g=3DlR|;<)tas*)W1-=3D|0LV=3D!JMrH1lMQYN`W|?y>0P{?^OTD_>AG&GO%a
> z`wQT_+PNPyx32uL`^+GGf3`vvKgF}?$Jh8nkfz<=3DT4ygxvs-7D`|_Kp=3DiaHGlU5t*
> zsD)y}z2<hXTk@?TUhX%7EAZ#H`X&K`pEjFR?o1kdIjP;QL`YeJ$ga|R+CAI4)=3DD2R
> zX06ekZB%d>^$oQ+)Y$cI0Wwf@9mLe%IFU?R77`^Q{VPQ*8P2(LQKcX{JhG)sdXaY1
> zqcveZlnf1B5IeyAdCoMkpHFp!A+$dN<fXO@!^^(hX+i=3DKP$jp7YZGx3!?#-k+^L!^
> zTahFPo`r<v@)z1AothU`Qo=3Dx^=3D>J;WLJj|?wezvkY|ZPpP|fOi+U28h$nZZnrQBlQ
> zz*ew2;<so8>vwKP=3D;Ga1uVb?;9a0P_+B&GuEsI*lCwX_ew*e^)Gkfc$*WjWZb(J#t
> zE7;p_&LFkXDa(=3D8&bP`di<Ea>`=3Do$8xlM7&5dF<mk@+J$S4ymx+<dh3euvm16+qz!
> z=3D-R`)d=3D~jw(TLX3_bL0A`i%JO0wfhEfuKSv1L#-mt3|4OU7E%1^6*!&eGh~{a4T`J
> zJQy4C!Nwfb2iJ3>8@k0v0{2sgR_Jw=3DFh`RO(lJ8E7g~73loA?V#K2*TjNnLfAMGwZ
> z?kX=3DV{`=3D$N*jiL{f!0uP_vFZPAG$8#I|u{@OM|S1!pZk_I<e&oM@5B$$#LgyA+nIA
> zK6d59jeaqZaEUsnTuZs0)aC`MG;Ph&*I|`c88r2R^bDlS5}DcVID8&>jw(qIhTczl
> zAkfF0p+HsWa0;G@ObD<;jkD`_d>TFu5fS%~F0nX4l&9cxP+uA=3DB9h6Tc!F*O;5W9e
> zQI0#!YFpynR_t5r)txLsKFL>*Mn3DKwj(Lj+WJ`u(Q%iFbZ5h9;;GiT$Gs=3DUT(yoj
> z&}e0#gka`8&`mv?S96XJ;>4)YrGqI`FQ_55z%$zRSl6IGTF$1enfXb@-aRb@dW~Zu
> zM^WC5UYxJvb3hWEXAFixgY<m+MwZVYWsy#8yQfe`Drm(_=3Dn~m!{)98zY~8u;snh7|
> zr?U``2yZ#(rs0RBaI>I8W%*X-Qtw>Ax0hR*-&Z$<aU0$eS?@zE!|Wa}IbKIkLs1##
> zes-o`4NJQ+NiRJ@c|H)Dl1QAal2e}kQ8Y-LXPr4N4vwq^^EQ}`|FP6du~8K)aryZ8
> zhMuaPpDyW2PXLpVs3%s|Rd3q&p(up&{ZvI;?XYH7Fs>QtPCrmpz)sf+FknQ)zxW6i
> zRQObTXcp<!G~dIcxr8%l$McYG%}gHr30+6}h7F_;QP|QgM69QOert|r@tY(cvbKy6
> z?oO@0^yX0g*BoX-Bl6zvlR-)=3Dr7@a`?T!)Q#FnhuxqIMFZUE;-Ram=3D;+atCUl3P%I
> z?}fGnY&u>KY80Mknz}zpeE=3D~)&cDrG3uCnPOi#eH!89d=3D+Zs7+rOPN%rR3HXXDONC
> z4OQ-fuFjY}#X$|u{wP|T8UVHYMc>YCs|JhF<vQ#XI10UWz~gvUSg^jW*T4F#zaA<E
> zGcPoldG1VS%mc{VwNQyTpRB1!VQu^x4$u8u5GJWbXs(fMR8BfJD~smN7^NNmSEV!r
> z%C$z9#VYSFxqL#N*w!e8i|9hk6{Wr>*`yMR9$7@?sIAo#25aecx=3D;{i{(eanx}*}g
> zACw!tDOaXjW3mT)pmEI!2-F8uc@@0EG_!bAEqT$r;aB3lXa)1wEF9_NZ`*9>w@lz6
> z1Cu#Snz;zwKTggmM1*Pe%VrM>*gA(Ye97NR5$Ouh>)GVKs>EaN=3DTl(}k|dhgl2E|b
> z;`QM59Mp?4-$!ci6xz1mmY}A2=3D-y+Z@VgPhxT1ZM`rTk(^I57*Tz9?Y{zZEEY2N@2
> zA9Ea*`x>BQ!^78=3DE#`uzYAx)s>nO^Tu(ea_&cC=3D`P-Hu$PYUwB9`yw+id7fsb@v#q
> z?ptoWZ1U`ElILxsAt=3DA<5=3DKF{Cf^LW^($FZdNppX?WMISpse4gl1x~#PdCHD1d-~p
> zeg?yl6>@bgUP&s_N;NJsh)&JKBDZ7KRKWpM2~wg#EF(8JK3e9aAkkx{{9a2_42}*O
> zE=3DWa*`sjGUNI3(o4P4D&Oq>Hz;dGIU0lcn}PP?)Fg<4Gw=3D@$pr;*7Fg2b<zUqbEYq
> zV4a}CF-4ahj+w#nH<D4%;*y9OZ3w|ZjmwHd%L4M+8z{-YEfkGj531=3D%cWqgnM(zyD
> zjH?GnR*FLuI4dK_ViL=3D?*6Qra@lGs4d)WWcmR4dsJ<qMTQdv__8-IX8&E@+vhr6sN
> zo$rP=3DY(ATfo8w4=3DqsrBJ<$LhyiF{x{<Z0IxCKx@H&t;GhI4oH{qne;^jK~;Aak;be
> zW*72sM~SZ#YQH1GO|J-pxFF-K8)pz=3Dg>Aw≀bANNjCfe{_H2%}|bTF+g!n%#d{_
> zhFo_e4d$K`KYz>Mn{QyQKkjSE%Y1V=3DHp*K0M|w8}dkdVmVp1eHF_SUZHp`K#C|wjN
> z<wynw!}%?}&_$1kyDRuTO<<&ovm8e5Lpn=3DS*GQePQ?dRq9XC)O(0Soz`M2wO-lTiZ
> z=3D9y@FW@YEB7(f#Td}$+KeTY8VcIDizQ|XK!v5RVk|BT985Avw%l_S_jRN6X~Tefwj
> z(pnG^>GzH36?UDN*=3Dgf8x$}8qY!`MQr$#WPZr_>qD_Q{AJ^u5knApgjby*d6H487t
> zO-=3D$uZ<E&**#AQY1#R3tZeA}#;wRmix3zE2Ru|7ji32BvSb*~02FC7{pFd@rb8&@b
> zL0m_aWo~PuXFb-ociz}03D~x`O;Ti_e?bAo{*B<8X1cLjHB0NLnUP4vBZ|Xwwt`zB
> z(*}?hx|%A<u+HsZ6toQ~ml7y{W>Y6)8%_l`nW7-3G!t<CFaSg2@rpye7e=3Dr!v9Yf3
> zm$Deh>o-6i@$EG2{?mB5h8wR6*zg>tWTW!Ek=3DAv>P1Rc{+CM+cDz<vk0x_cEV-*|k
> z*?*MohT!yjtJ`)tSyzsR9G)Jv(~tyn(FS`U8%qc77aUn$1OIX(mmcs2VI{MH)55F2
> zs6?h<Pyc`F3`1svRqwjM;83vmewU_)Ll7`X%F6FU?34D0#i17uw-Mgl#X&l~yF!ll
> zb#S;nOYzl$;DPf<9i^Gkv3^c<a@;HP+xs<Q<tDN;M+(-&uqCzQk{J?j<%TkIx(CFV
> zs_Np?4}n<3AyDckV`4nW4U(S%TvZ=3D0tBb#>{~A!~nS=3D4wA+p1Y`6O{-6z0JzT%HvF
> zqSywA?bR;xZjR=3D%8NDTQBWPuZg=3Di#D=3Ds_Z>Gz23lo5$2NA$7zc<?~om&qar%=3DKpT=
`
> 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
!
> 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⁢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
T
> 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
D
> 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
G
> zFHzIl-KOrjZD*kX>-0uVGQ_b9<wo@RA`2#jI*k!yCL<U_87coe&?R#uw<q_4yt?^G
> zb83lJUuVBC{dg+gu7}nVp{%PVIb#N2T(xY;e=3D0&-G^Q<kljyM_EU5(!a&b2i3>_R}
> zYA$aQ4y+wX{DG*o<AJ2F|9q4N-JZ#nqbW@bTIzQz*GA)V5o{_2dh8lKGY7gX69pE<
> zW6UPj7~e+0>DFrYAfY}b_$9}vw=3D06nZw~7O?;mc*l2LM+bv0lW`@$_1XamNbm;T5@
> z>x*U(hD~;NPNzCIeeW-xo~sFGozus|3vj>Argn#O9*cuUg!hq0j&V?Mc-i9#Q54z-
> z#<ktk0=3D4*iSn&5EwnvohxBI9SllUln1dJE=3DdN#-s;C)RSD3K-H^bK?Lh$t?g=3D8*Jh
> zn2yiM8MVPeb_ija2vadJeSX><TjY>X4Y2DopWf`ZKCvh}7VcUCr;zr6h%2a1+tl!I
> zCpw{1a3(VY&N9wf{}5o1<(KwgMRy;Znj1=3DV+LL1Yw@+V2vi5?oPT2}%k6TqcJse$`
> zm;x`RypNog5>c8gNBzqm(+sS=3D<czp{*VjHmPObzmt9j+TOyb%2lzP(PH}CrLGhEow
> zMb)N{#u7P#NlQWj@3c+Nzo^$L&sRi8i<m+2bA2?yF_0qqEzE)bvbHfK)d1RmYABuv
> zw9IqZOpQU04Cqh3t!3xxhOr_q1E_cbCb(HlqTf+px`WNaP#<-x&g%$HR{V(^c;-_R
> zUrXh=3DQ3q#qfwyK^oRF*sg-+tN6mZg!;?9piR0LHL^iK}}-keMc-Q`G05mG~*=3DbP6f
> zAIR$6M*xdAOfMNloHEkc3dL!l6_6<<8EG`im$$~y*@0Z{im5?<50qckBj#W;vj(pU
> zEf#+$wPST4TAYI9?9aZ!uY}uM1FM5I+I_Uk7+|A#+$|`_NOWc4rfpogmp!$>;bWC;
> zxF~+7P(B+~0|tl{m9wfV2XGv`rA~zG(g}DOu8wcqWM}WDNBAc+tU@Vm4QIGWDE7rX
> zcVcE=3Dq>1s}qTeT%jH@2gT|jEP2pwm<ekgghMCO3DJ1<mm_dIs=3DBT}A~Q)iG6H2T3d
> zsLR=3DtJxn2D9Lqw9&~~t3=3Dz%vX2j5;b${bs<Ha~f`3OIIEWn~f6cMXu98>6kRrvMOm
> zl<X9|Dm-7oQ(BXTjV2t6?PsH3dSUhp8edA`Qw0MTZpi7fg752JH+9Fr5XYl&oy3Ii
> ze04F$-v+r=3D0l;V`w{-jrm7>F{o;g%dVVNvVvx?$rG*v>umgg=3DgV~-N(s99LzX<8ht
> zYXTBKl%K7CwTTru8Xg_0#mPN9xsYri<Lr%Nl>m=3Dbh&i>#H_g;#l$2<-qtyXz76<5n
> zcuifx9Q(I|CNLyDK!=3D9=3DP!0IhX6~lE^iB?T;C-TAs2Dp9-$wIurowMM_*LsUUQUS=3D
> z!+I&pw-&JSZJV8R_KEPMSunpDVyf7e0yToDMNT!*MZlD~@0|{Cv#Z6s82EL_mXHX2
> z#f0*+>~=3DEJvMRQp-(BTE_VZ^u(w)FRo@}`;z=3Dg74W~?V6ySEZ%tcaKcPjGVEEg2?y
> zD;)i(>>Z)-_hkGcc8p_9X3rs8VY?hTG4?U;`4Taw`L?DZN-GnMz;{xW=3DK^D&T-m`8
> zndS-5&(!vp@b7+p4eZD+g6uUT*-FShrTz>vUi|C=3Dc^b2?uzx=3D^<*juB@NCSa%ZJx^
> zQi7d_+VId_gt;`a0a`$16RvM4Q&O8ki#ttbdO>Mao$Rj&wG~JdLmpExd}CL1wT`{9
> z4vfN+34lnE2Dc+vU@?})qPDjgG%bp+?~aEB#qqiMo4JEfCQE0=3D8%*7}k?n`F_n^xz
> zOS8T0<C%#xDSmoDK}QQrJfw)r0#Uq2!y~{U!9$RWBsG>(Mie%bi@+$4OZPNimSj{D
> zO0YN^)zNuI<{L!Jx`62I;Q#M5;X+qA)0Om}#U_abU*(&7Y72~!V-)Z`>|=3Dvu{`=3D1t
> zK_x()JQU1$j=3D4R2vs6)vDY4{c*iegy^Y`Dzs<K(KOr{TTD?Gxv`e)OGaSO`s3;B*%
> zD*Vm)q+d=3DhLMZGQ?+~a5;{kDhf`=3D6)KDjYV*SK2TfEStbp6%I2?HaND8k;s-@!ySg
> z6Ug7hu<8O=3DzGUcW_~Bm$ta2QI<hKr~x%q+g66u;|LzR{6D{A;!YtS55b(O8PUWh06
> zjahIRGEQ5&Ns!-=3Dj&pX_>&c(?R|`z8D&27o=3DCtrXMg7Jb!)latjXd$GwNIU11Z@Cf
> z8mD<21(mk`v2PFgr*d!1SVAEtxk3wfvOgCBBWWcjhwIPRs{AHC@xXS1Im@#{2Y81R
> zC(`ky(I%%tTnRlx?ALcKjQEM2@LU(z$IvmKvDN9I8|&wJ%JR9A`Bkj&kegO7h(2_9
> zRV;_;eVFLxq{8}^t6Ccp%3fNvf^C8Lr`zjnMyBi9|4kzUoyN=3DBS3)j@(B$6pihg)C
> z|Gk897@W5TDzTmdC3$))(J_sZA@}NGz@Y;Kwka7<JHrg~>3L2u89?v&bXRTL%pOD7
> zwv)i%TS)<T<?3Bno$1C*usKh3AKBS+)d=3Dg`xmtrt<^Mj`7oDGFV?V7(HaG}!F!Iq`
> zLr<}j_S~%G>SK(!0)QDxFTmv~BgF~lM~YfFxRFMTfMO<=3D+*VwY6bBGb<q{wDmz*_X
> zGivW-X|6qp2e@-c(|)CmUfH>ep2EW>!<}emLM0oGToteBr4=3DsE<GaWg3^j`1T7#l)
> z;2f?@B8uoHb?)Q4nyW99Bd)2HU50>Kngowb7{O8J!0XI4DdfJZsgjAUJ8}VsTsBK>
> zxk6UxFN=3D7{a*_jJ>w*4?lf$e<yaa85)K)XT92r2D4`0c4s#5tD(8}Ur>lhDY!c5)-
> zpfMHO#;a7(FU?ExuChob;{JxQf%+Qxvqi<tb&Sb@x8~7o(Mu??n)WUb0vXN9{gVoW
> zNPjctv=3Dta<<uc9TnZz%j9Tdq7$7drHjVxj1Oc!Ey5V}SL=3D97+$uG0O$l%lkF!z#K|
> zg3;gi1A+Y<{)3+*9*gD9qWOs8^murm7L~T}2NC?@yRE`#`<qL>h?yAJk_MvZ%+U`W
> zGr#qQr>=3DqkeOCXpC^u95xKj`^6-2shvOJMi$+zXC{%tSS1`Xr}n@;xTLN4?a63hL<
> zqyQ7pqaXJpPf)s~Nx^RjAMRq?3G;TFxxVD^c96YVS35W^9oLnStMEd8cfc$mwk+{V
> z$O4lS*m=3DtvGH`MA0>*G43R+lV%=3DE$p{G=3D+zwb|}`lZHjKEe1Pfq2~BQV}u{AW4v~<
> zqSBaq5j$o{+gz`SHP>ky>Fgk$hXP(_zi$GPK$bY=3DmLxMpcB6z$V)fLkGCTa!zp~&5
> z3dHGLGq~FI%Hk$uE^@T8H_v!CPsL)j7&8rr4o<Sxl&ybIG&#MIgAZz7&ODl5(&=3De2
> z!5Ez@apgV&uKg}n#iv;*vcKl7I172dlO#RfR<k-|a5xx^9mV-aXz4NFGSkt95&E=3DZ
> zvTL3majA49dVJGa2zT=3DIHTITT8t7Q;Va}zP8S;JTJsOF&--5?`=3D#oIWakQm6;*!$e
> zy37ycGiEDyB|)UQ%Y3|3CdW>-(w%96kG?_~V9se(##VKhyOF6dz{+VUzhs)J#s+Oo
> z8McXI$wOscDy7e_5wA)v>QK+wvA!T0tLi-lzza(2|C*j8ngXOZ;MCQEc{Fc}BvAu9
> z<jB+a1`cX!TeDy{(B%Fzx-RL=3DX4+$xXX(G7PC$oQY+R`*jhG)#a3a!CO|G^x8RVZ$
> zh-UVV-NU=3Dm^yHINwgC!iWurlm=3D3M0jqy=3D=3Dr?kqy%Ru-{MJh1K)0!PIpb4BVu$R4p=
P
> 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
U
> z#vRmv#+O>TqI#%R+p@(sCHapo=3DrF}2V=3Dj5-epH0{@R=3DoXJ<}e0)nqcU3(}c3^pI7d
> zyi&@p8GNo~-B8rg<QagXjUV>5Q3hunO-OhQh6~8SMa#zeJa@uyHZlK~)nDOH!VNw0
> z+)-9JG?VH=3DxQ8@B;!B4=3DC87~(&46U>7wBtKR5%p%1|1$3W-U>8LWM);%|TpHroXsx
> zlY{LQU!!a-T6gwR>WUrAs@Su@Z<p1}Dg3jKC{h%UJ_eXo{8t?_XyVUnud?MKSqVBV
> zfX=3DXAGu?HL0+II)M5;D=3Dok(TCVn)yYp>1jhi`BBZykj(<-8c#c<tVS;arZp??)3NQ
> zXMnEjlY-aVDTnr+O6F~cGwhe~sg_6@!0@Hvx7%zqy(TkqT1wg6&1?+pjWqqz^?R|O
> z2BW8QKX-Zdp~X)=3DZ`&KVR{6NbP(@U1ao_L9R3V<8uf0%<*0b)IDAt)aEy3N!20_(G
> zX)ZIJDNZy|bCP4o**7$=3DTw8fWmoSv;koEMOsK6}%%{zK4m)*!LU*VdZBSGow6i8DX
> zqwXnFCjg8U>x|YQyNu6|oT6n14GFR>ga<ox+%K6z8$;n@!N>)0^GYb5peJ#nA@_)t
> z9s5)iUDR!=3DMyp_|U(f=3D5Z<vh~Pw6^R-IQkAq?mL^eVuncKCH?@M(-)IHY4u*te&c)
> zU9;fA$S_3To_>Bb{F72wIPfQ7l8S!GvziLw{6B-}c-gr^Li|8Bx8;R$4WSd`OMfz3
> zXIqETq-j@VkgFSJTcTa&D@4g*k^n(OA`RIdj;B9_)CR1HttaOu)Ld)0@gtXyQoqwI
> z;L_CF3ytXk=3DCXy(I+>q~4K=3D;G4FtLt^lQj~^X713yW5bs48$Vw{v!{*nTAX-f25XY
> zRz@vZA{l>zV06cy{Z9{g;rFV1MP7$*=3DVeV;0HzX4jzOj>j2L<g>LnD}ZL_cIlwB8?
> z?H}T6g&~xn7gNl(Nd<a5S#qR|>D_NZ4=3DC?uLqRB=3DN7$YbD?)daNuuUxPWFF5y`epW
> z&*8Ux(@8oG*6r>6Sz#-F6`<w+(M70Y;UPV|My~}R%mW|{|KL|4LK;<*$I&43`&i5a
> zX4XUBKLT|)(uN`TEZ;x~yJR#{F@<jB-A8m25ZKJ=3DJ@$67qW-R@<x;m?sRG@XKddVQ
> zO`YTXF-Z~(LFLa^HRO%=3D3p^;C%mafj+IOzTO4;W<W1g$}Id3xMO8sa_8^dlSCEdZP
> zHdZ7kfko<1sB5*~(}fq!fu=3D^TBtk^vWtr%T)l%gu=3DvVzszJk|ZMBDHu<0f#X$E?i1
> z$|2V!IN*$`c90%UJuD1n1$(}rY57s>zF6l|qq^A1Kyg(>N2emJ<`o$%1*TU=3DYLqr6
> z5RXgDlg}GI8a1P3eJLZ=3D<W#&#rcJvKWWoDU>UmEs$^MHf0Q#}O|G>x4QfF%qk9iRe
> z$Z;?taZ0k$tX9xOVM!Cm`7go{H;#a1Wk%ilG<ki)1uo!F#ML6L9-O^U=3D2JRARQv>#
> zQ=3D$kI5$lMg2G*T9-xuDV#&HXHSUFS(Ra9sIM}sr}C;Bu)3rR{`GX(SE?ki)VAq6bN
> zI_<-^Y5`?aV6EqFHXNS8)QPq6^%SK=3D0yR1LK&*SKbmfmjOfVb4(GSD-a)Nkn-i1cJ
> zQ8uMvYv3NT{uwIqdrp73?lPasv?*L%Ty_B`Mh~|^H6giS76@zZvR(8AFFjUUXroFh
> z8yXen6ItQI5}nOdwKsPeBLgW>x?|~EgUe5|x!!Z=3DYOkR?W4*2V_$zhf!qing^OqA%
> z-QP+O_`5^G10{V@Yh!ufyzD-S5W}Irsjd>#D(gSGz7gH6=3D=3DJ8d<TC+)o%aKg=3DD-=3D=
F
> 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
C
> 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≤?xhoL#$!$sXxf6iIp&q>5_~
> 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
v
> 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
`
> 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
eto
> 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
O
> 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
H
> zaKbParmF_Y(X)q^A_`4aES<f<IF#^;(b-k*#y?f%0o27E(dx)PbM9oL#1yOO$$#WJ
> zrq!l*nq?>_(2bcD*Hpp5$)2@_KP%u6oBi7M(y9HW4tWeX6PSGQ*WG-(2R=3D=3DfMmJDw
> zX$TbG$L8bK5s4?VBMy$Are`+k69^p%@}&!n>@d;pICyHPX~CgJb!*5(DvPDi0cxVp
> z2i%k<I<tPEh#l(0O0Bzk?peIH0(~H*yu?=3D+3Aqodbu9{%L4aw$!*&@8dftRJmD`|9
> zMP0`PkbP6F24dQM3^CT^4_~`jo=3DJy&K{|fwu*1Q(6dfelH4h$uVC11v54OFoRjS*a
> zLTmyhg@egrH!CGQ{Dc6D@rx}i;`>B5!)J#J$&cb?1AiNHOiKq8zp-TR^>2rMvp;gQ
> zRg26aTYQdpl~g=3DCi)7k;_(v9~(s&awOg=3Dp9Tv>sOpL4@RO4|tMH(=3Dj=3DY@y0!YvsC=
a
> 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
)
> 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
H
> z<tutSPl~_qX?dnQvyZRz;0S=3D8vE_7~GwsI6%?x<jTG<LV-KQD8sLeu7u_T#_Cc**7
> zS{Y?gVD27?bs6!6z9T~$FEwlm>w(D(vjSm+6JRAJc!CQls$l4;y5{yH9C8PcI7lOU
> zZS=3D0{&Yi9S+`Y9z@_72###IitOD&X-FpNpI%v457oqex@e6CV(@^RJZ!hi5+$51;x
> zTzJ(&!Xc=3D&^g|)uOGv@E>eXbyCYnS9szQ$4t4nc_-iznSSy&*?B`An;wKvs%_fONi
> z6w<#d2*9i7n+=3DfERL)GRdzSkGE8+GP0oA|jqyS>n9>mZd{Lc2csqxbZUDiSYt8S4E
> z>ZtlM)HJJ!a!zlT44Amt{yLT?wk2Y-lpzOlK|{6o1)W*s$*^_Xi|?aTrGnb8@xK08
> zX<ARWxmlTRqseSS2fw*SP#Gy%(a!8FEgLLFmm&H*uxKv#{MvVlY{&A0#=3DFDO|ElA#
> zJ=3D(X_M4!7~_S<|J4Vq#_ZUPU{J5}MOXOqKd!@LbT&`;y-T5LzF60|tisK*6d`vL_u
> zdroQzafYM&I+Ji)y~X5)T72SgInz&LtoSt4CaH8-7GwWM`Y=3D^%>~%<VqB2SDiOJS4
> zzNJWK$0vFEYTisze;Xn5%z)Nw&+uISMF)my!H-b%>GDm>hCg;)=3DCd*#89WK=3Db2LLL
> zhPYWUPNgg8u_JRAxiX%ncreDm13R2tJqls2Q_7$nG5Cg3OKQC?xD8x`Iw;N-#^Fh^
> zvaHD2Gpb6XGi9Yt&D%bUbi4)GibKy3U!fsg>*Z5vd5R;v9%kq>-v0UR3mf@HJnAvi
> zg)Fd~&uz_@Rv&K1c8QdL^0}r9iPY8A{a-C8dq8)GF3nl^HC;Wht_S9syw4?y=3D%($G
> zod+QnR>!yjM{?WEk5|h@3W`On)N&C)l3}I+nnw!+a4`D9af#$oL(8R=3Df_zE5<!6i;
> zcBTyaoHLhsr(7c~AGQwY<%~~6VK(%%e=3DmocvKnAUSnX-nuyur6Mex02Ht<5<Q01J1
> ztj0E{Bb;BCQ-uNet*ZkzlTRk4jsewcv80q<0b0HyXpPieya<SsdOiJl0c^QOFl)#h
> z>fUXJ>vnrfB1wby$o&7nX~nZw`VA-3&tg|Iqq|p-eD6RfHPXFB9MIah2QNFY0+~D_
> z$m|t`&uvFh8!xWP>Ts^&O4bab4id?@R{tShq3r(nE;cyg%ts8aX661S=3Dh^G7w<%x>
> zs>v94^8^H1YB}Uqz)E&-ZI2_gfuIp^0uqTJ9h?L}U=3DUt5VsL|*j4MN1a~_O0hp5YG
> zXqsRMWH1Pkw!krdLje2Q%;XwVms*-rZ1b=3DH-YWGYN8wL9^(o4v709*<8WD72pLK36
> zuF9NdwL4!ZDk0LI+@Eq*7@E8ln(iz*C%(z)0CRz8h=3Dk(vR<N=3Di(XS_b?UgOHOJdvO
> zwQSvXzd@Aqzv6itHN)OV-8S~@MH7sftu>h>h(xD|Cv8+e_5eV?Vm`Kp+qbn{IJW5C
> z)l}x*W|UCw#TBBtjwLp*k;^{#7x+(}ePcC{IEurHN_g&$bjV$mPe3tqypSA~FeiI`
> zc&RqrBrg|1T}-I7#F!lJVi2j<t5C=3D7age*vDKrLI-(i6@-2W0y%5z5TD3tcM=3DB%-O
> zy>1q{Ic{~*J_7iieH2fqx*Gt3v3Rv$QkW7X>p?~R5|)K;HQ}D>P636kFJ&c+8aFG{
> zhRpo-9gPC+bH?ZrDwZGx&)|X1-)d^zw)nX!N7L1vTQF@RAszhydli|l)18y_^Kl);
> zdBcen>}-LChYw6cd`Y6O>6X3|@6XRrPNG+PB^&|xsi4Ul3Ss+UQ)`~kiPcoa2}tDY
> zB>K2^@vUL#`13U=3DRj*KzlrdDwpro*Sm}z4@OX)J(F>md#k^##y)$Sqlr~W<~RvuLV
> zSM-Zqrg(%d*kn{;a3^SGmg8!FU^1>s8}+a@nR2hgDmMNotNT`fkf0}K^+e??k05U)
> z;?Du;GclAW#x6jXA|5;ilukKPDOIR50sUF`if=3D1=3D$r`a<2WH1<!kj6>XmV3+1%8sV
> z!`7yD@3T>eVO7b|_<z|U<cH|Iw}<PL5yz)m)+(gDZ6|d+CLaIVD82o2L#!WI513_k
> zX5rzXrqA6eQ?3a)zr=3DaeaY+Y6`lESsU&-a&_3F*pal+cIbv%nQR~B<}|6wctpZx*f
> z<w3U{I0H8-MXpE~95e6yGnw}+_>w%GahPXIAQRVfk?L94>YMDfC&v&Sqi8?<oJoqo
> z08K~H!*(BsKWwkR4rAyyOnhPI|7D&51E|5fZMIp|Eb$H2ZYSZT$pcg5NRW9Rn_m8J
> zWeraBeRXPmUV}TBBkD4;oPT|f6it^N3tG&kqLPgLR4~t|M+H-*Gcp-CPvz`Bc`*0+
> zI_mbDR!xP2mjw*vs7mq}4{TnwYSC*qWPLV*%i+GqDkUL{E|#LdC#jUL1Nh0ZWnS|<
> zp&@$%mL;>w5VIZ`m#fCC55`Y|nlOdF$~Jszl1b@6+-ZpH6G1LtO<DMHRScNC%OI}h
> z56fVGD1nk&iQRK?*A?i}eG3?uS-N$CIWgLkWjI&E^0w$GPoWY&U^zE=3Dd=3Dsnh4To*X
> z_@^9)@0cb;$b%$$9-inzXMQ$ng@(}pu&6%SH<m4mF-BtXCO%?oypfhs5i(xM865I9
> zMXD)iX>vK;nz<N{qzZMlbjRuW>yQPR=3DdANK9eb~-U7w#ig<=3Dp4=3D&`4~ROfK;2d>q)
> z@w2h0E&i@l1B>5Nsdf*nBjiEEGQu{5VQsr!9v0})rR&2lXU!T=3D{ZyrCS<TBXhs^q2
> zC@6LXaH%V^3Vb&I>Qg9~1BvD)dilsBWFeF!YRJOKFr1AtW>zo3O47^(CktweP$(%s
> zbmG<m$HJTl!S($8RovUhjacGs-OX2O^YT5|$W;WBL0;mnDhIQoRMs6!I7EtMsP~R<
> zI`FM=3D)GfaQkj%V+kUgUD*=3DDTfR#Z=3DcP<2uv{5hEom~nceOi<t()j{LJ+??yMi|*t+
> z(L)M$A3TwT$c0Hx-qw$TjJ`N89$R^E_DQ-RoNhB|EYmYXCgnIN48-us@vxYTDGZ>+
> z$+$|`s$NAI<r5TE`^RHXr+JqenF)c{@2(wdB#g~!K6>VvK1r;0<|{hO3wx|ToJqZH
> z5#YaPbrW{3|7}vQ&RInwYkk5^!S!xfRwEO}y>Ksn_ip4s_jR=3D-Cip<v6x*TwbM63S
> z`P^QY8hd96hw~k<7uz9awqjbLuXskb7Y+Vu23O7D|G=3Dl45T!QCtVJ4`Ye2!7Pl!3y
> zt5{WOFJXo%^&NS!0Bswn$lw59{sB?r0}sV=3DU6u`6G;d5xMDCH<%TeDEAN2QVO%6d+
> zV7J~V)JeRsP;^<4xZ>F+2VH7GXp8l*8~-DKYc)FqG<n((T?9$~FMjl0&9~NtJr_x1
> z#dp1WvirnQOx30wshnQ{4sPV0^oz7j)!9rQ_NaX35<H0B-X;7epiN^SpbJlPeZ#ge
> z!kxzostFW4XvJ$3GCeoh)h@u}1zn+?)C!LryPX%qIP$+o5pm}AhmvvM0ExH+26Dw>
> zE?ZBg9OtLS^s)DUtB2cj(1i7@mzIEFC($MDJwdUPRdf`4^AX^Zw#5DCI!=3DFh`zh}I
> zPA(KD0W9iTd-e{Y!9*hEj(<D6l?XxzH}27fdX7OTO9%8rA;*S9!ju3IjA@fk1u+$A
> zj-5Z`(ZpE_kJ<l=3DquG7@87>LvRDaU=3DjNwFM(`0Bw&E=3D7by*^dZb5%>|x28%|%sd)g
> z7Z75idp)e;XI2Q0C2$M=3DJ~G`b4p9-~&^Jt`DHqfrhxL#_@#mg`$ltaToquy<Xn1<T
> z<|#ydNTGsvxO3<EUG8?)hyhlx+|_gS{(YXB-?#e`jsZV*5(=3Dr_W%rg{sQ_+JIwCLp
> zQ9b(p#IR<67y=3D;UaMnFR187GdiVDo$#T{{kl-Z`XW`INid*Yc}Ix)C+m=3D*$n5rBXs
> z^!Kh6R$~GA)|GZnH+fawfM7f;Cb#wQ(=3DKLL6q<!)xHJw*9f2l(iR(vSB8M{=3Dia7`2
> zD+7a{AQl5GowXQNOJjCUwg{`z-lcilY`HCTW-0rWThDvmmDQ603qapdb|npj`1!_-
> zz2sOkoI5;&Q`{g)Xh`li!)9>gs;`tf(6QOD`kat_1$uLA&v<ADiy<<trNA}Uaj{ZS
> z2O8e(v#{_{CQGpUa(k}T`DUIvtz&Vwpr}DU^0$47D~z+7dX*RIzPi7)iSpmpHtaaj
> zr4Se+&qdrHn9ZjeEbz!5K&*I31)?hsBQ3{{(m>9J3%4CRrt+ASvxK3{9hk>JFkyG(
> z=3DBEbmNjaNGb#0(2o?sa~j{v4^<{Y9-aR-ul5&8=3D08ODU6wAf5z2JnquzB107VbjpV
> zjLrNq;9_zjx|1F0!GITnhlK(9A#;|w3KEwQYmYH&%E=3DjhGXJSp)=3D7Ze>j>cM+k-~|
> zn3(ahrFvwj$ypK6eOa533$I4Dr*t<jp;D~azfgfWn(4s}nDs6{QvNlO0?8d-RdaX=3D
> z3M!^0eM3~<o4ul_<syjN#wM6eQK>sp$rBdw>Dea$(9%gbnzVm1tY7#uZ5-)_f_&&m
> z_mPjo1}e7x&l!Tg+Z#fb(Xj@HAY;VcU!%~47u~QeiqAliSqj`X@4R_`AHxw;f;E%K
> z49*)BDirrvM0d1oFO~C|v!fFs5}YDh;sU6e$zUr1>Xy2UD2U~Pn}ZeP0b_{Kh^qnE
> z+zbJ3WF%sgPVzUy*qC$RnOY+Y{q1`{AGbL?3+9lN6PILKzU^!+f$(y-!eaYpEF`NE
> zxv)bp8!2InMKJZj^5<VzyAB(eUC<z<1Jlgv-oAG5)_jPpoKw6tK(ipLozG_76H&$o
> zlFrk~^t8H022Al(#e`v?wax5^txp`vGJU8oS%i!co6THzd$AI|6&}-j6!y2AzTSDZ
> zXq`V_ufFSi_VfKW)3ZEGP;J%9O5klUsAX)QqlUF~q#X;PNRH|!A<SAfPVh%SqZL%`
> zF{t@Lj;O@2=3D3q%x7e-B<OBTtP8Rs5TD3=3D4UvtG0C;uefI+Bx#~EXDh2MM!vkCnC+^
> zI@P?kfOCd|M-7lvvk!!@N3GecV3Njw4zT)jOcldI`K$G(7yK5TMv|GPTOeWcU?J08
> zA4D;vP;VmLs?Dc#P8-Y|-J@Q@9BU<@3fpSAmfL+O=3DkVzNC3K<X!Z6m?MRB2C$6e<(
> z-@Q;y4lXsJXgGJX*xDOl8L;`8z>)xA%;-$e*S?to+u0aA@jQ}*u)9xc-Y=3DKcRp^=3Dg
> zbO)Xh3z8Rn1_u2AQlUcXV7x(uI?L`rmWqqBzXWhZ@HQH}@=3DMS-+f&xRYLbNl%89^x
> zs7*p|_tTwTHI1U>WD0@t_d4s}`NTe2I9&;P{>Jq|d1k+CCg&0IO1A@EM>d}2|6gja
> zd+cq<43Sg5kV7Se>jE5|;8I5BOE7E2?>X0Soat?k&piWq?0%clhv{Z@ax*7-wrFQ4
> z)506)zNFC7gzoXW+&8%dKi?oG#xA|r)3zm>KHhfX0G*u#tC%-ppF7-o2P&sie;QZ}
> zxDAXCm*xb9BdE_Pkvq0`P&jd~HY6u7k<EOXwz1up(~Mb`a1S|_l70)J?y)|KtNEjg
> z;0@4GHez3uTlDg>Sj~q)wcWd%otWP7wdDCToi8q>B^DxYJ+^FIK3K!9r>XiDj>P_)
> z;IWS`^#lkb`*x^2$|U4Df*AGxq@wSWj?YHP8W823hbm+`y-T5>XBCP`;DsF1bwTBQ
> z-(P%)ZQ&Pqw9v|l!gq6mTRjC@<e&tR#UN_&1d|&@585{=3DWI^{k6LyMKRLVKhw)Sc`
> zRM?SBbB%t~d`GcUTK!N7xIlZ$On-5=3D<^r)eQx=3DqO+hQ<wj;VHd8dbD8e|BCo&3kvS
> zzmtxMvs`md-d;X$Ibx=3DqGE8=3D-@#S~bvv0ixRD{kp1mkB%yiI3N{yEx#KFl1j2iQ%3
> zo(6|*xjIF%LzfLSl6zGyZq=3D7+<6dqR?gFO?$u?&A{>mP->?ba+)H%D!oHw(6Co-n?
> zZ{US8F#F|qo8UeD%CkXcRIGRUd{;VqtwCEYm-Gw=3DA1JF-h1D$bEizT>G7W~Ray{^t
> zVp1hZ%X}t`?+SRDW&28uybVzHW;r_K0G^llCO0fLxI-fac3ATABo_b3AetbD_w<<d
> z36q<zElbmp0W6+jmi#G@$s*Z&r>Mo}{V0z_;iV3c#{Y5qokm=3DA#uhnG9z~`7V3*gR
> z{H5bAyQ+@X2-hNXH_go`1V2O4S20h^!eu*d5J#=3D)Je_^?J*Urb(heb;psmmR8%H_b
> zH<|IuH|IdtzPygK-W{W>llBf?-G0D&f8*~GjZ;2~$=3D9F;e4BRe&XT*p``OPApl~E}
> z^<i|8cYmWxW>Jcig=3DW?nzVzJmSwf6J;{2fc+5>c0?q^$)cPBrkrw#F=3D*&m}iztNI#
> zj>s6z51?XJa6cG&PQwRitkQ8K9NMk-N3|Bkb;ubD;o^cHgn8Hyt$z0sFfA%X)GGw`
> zenK`?tj7!0#c^e}`JtQ;Pt5SxZ*LwEtP5FepO9=3D$6W9ea<SeG|$K>CYmoz}*w}Q=3Dy
> zhCNTia=3D-1&<wJDWfKT1Bgf#op-R(N`w#?dDBC#;|fN_TuawYzl6D&Zqu5O=3D7Up%fV
> zX(|wi^)E*<JgjvC`2)CVJ84E)P$4j{lE)4-eET<Mn2rR)uF2OECYOD`B(LRGDr&aC
> zCr@ybn~ILY72?Lx?ht{qGghjlFI^gB>%Vb*_^J;vHTzMgIZ$cVWs<QfMZ`*^1i2Xu
> zF+=3D7Verf)oPX&+MYUYS$W>G5OF@8(CQK(+mRoZm>HKI1!fAsOnSdbT4X4}+iX|Zla
> zk68`Ff8i35lm7!#h!cY-fqRACGkNs2Zo6O_O?utKxJeAOO&qKX{MTGMvC&Elgl#O4
> zzuM-fhKqp^f){3z3^%Ft=3D8G&A`I4c_mx#Jz`nII#6;TL^8*8$X)z-n1CY_(*F5@^=3D
> z;prZ4!4YFT-;rF<Am^M$Q5a<>mn|WCUqV8&{TKcTYj&Zs74x#GOE{lU5UNQ`J7Nvh
> z!a$)$T&gTM6PD}6inZU~8+PqCS8qLfdC`D${sS4LPTGs8Jlch!9Ys7l2M*psALn;B
> zT_TVvg4xIl;mfh5AL@4@b3;pxy#}CQKcd}}C!`er6<=3D6*qDd0l#f1rpuVTa^n`prS
> zG=3Dh2L;p@|c`+WC5$WzYV&0V1>-aW+y*qXPCBPJeC>jHn>(X*<KwBgKXG|cl+OH@gm
> zj0z2WPkWiDEY(Th^jQ|~zH(vPbZd<(+%}a+i~p`i;P>M|D0fw^qM7NPFM6M|FWc3x
> zXNYXCOQr&yhz#uz?S{tX+t)tR$^(&Bg)5JYs|vG|QISg=3Dj>0h;IZ~D2KOe?^>8P=3Ds
> zX;@xQnuaX=3D9Ta*8)5WAz(u*fzy~6PcN+vP;K9OH+4gn9k$;W88h`?t6j+!@KU?_vL
> zNI`AYN^k-ra$GdZ3f4Z@7vIvk(CGFM$GZ_PK*tHMHGb}uc7FsE1#>eu^7Q!xw@8>f
> zXWKHmVP0&-DV!`j{&r_=3D#-&c(UD1?DZxR<ZtdEd)V7Hi7!!>N_mXNL;a0`xsVxNc@
> zdAd(Q*)N6-d~A+=3DRZcDlj<sbuA$)$=3D)%plHy_Z6iB-4PD+yz>XQ&?+Ww(uh2N;k~T
> zbDMPB;kfbU3al`(jjpNG?@E%!9JKh@rX4|$CyYC}U>aF5`vodqw$@ivvt4WvsSPxJ
> zX!I^g14BC1^1}VMF2u3_myy38L#Gyeb@dS~p3ZG$vaZtXCj-fR|EZ)CSnh@}#3~o2
> zAbfq%;*p)Vx-qV+zje?IsmJRQgopL5WLrm`F|~q=3D{l|C%l(4<nS!iBLRbH%{!@gpR
> z(6hnp0E;g5r^0BDR(%CHSlG!=3DA>*Ps<yq|%Mf&bDoE-JgSBd)z)?d9}ETkQfxbzv~
> z-0(?|xxOl>_i2?pm-6%q5mw~rETojMcOyRoT7+l&S>oj!vzsffE%AlpOHpomaA@;a
> zeCW(>;(7rWQ7Y4OB;WvdSHU-{8Ko|ZCh$OuQdtN8uTPXtpJ6@8nuz5sPz5tfzeLu$
> z4qz<m)T)}fVRJ6;O#a77GUpM*mS}F{vsbN)Hm|~iQd8oHa&iGgctjNaA`k+A(Tp3W
> zQTzlSw_A+d9=3Dk8*v}<f^Tok+CBCs}U>^bvXcVHGkvGuOG^nmYBvVjpN$~tDSyUdsO
> zAI>WK0Me2NAD4_u$)ArqC$Z*gc59AUpXO+@-gFtBZTq)!o2jrt`26T{LSqzac<`_q
> zk0$TlCC?gC7zIav?-a?(jYqPD=3DOKq}U2?^+F6(ME4|`b~@PWf(061B1ih9l2Mg0s8
> zFmN#!^I|3<CFG@HViaW><jtGoz0S8t@6pXkK4x~+_j2Jh&AwnmyQyG~J8GReUX-nb
> zMU;9q&_l+2<YjTo9y5b;Dl4^yA?&-2xPC*QRo*&Yq+vJCoA;YiPGodr97OZgeeb(U
> zFbA_H>qW6JMAc0$g#Xreoi9*1@X9s9mggHVjPj;w8!i1W8^5L|B3VoMqgFRZ)NVxx
> z?@k6Kju~rAjjTa;CE!u<k~sRCW2*LnByeiFCX?R@!dWyASD=3DbEv0+%$@?*}+?q{h_
> zSaQOKGZ70OF8;sr0dBIoPSqt6K<2?4dA=3D-_aPI|cTu}6avI?v30VkMy2nnK92}$2p
> zi{y57&i4;yssm<4JxZH6(vgVtB0_H)trV!|f`uI#$vIJ~O~j~pXtPAo)Ma+OVfIIt
> zMwpSc?(HJ>(y2mwBZerMzR?Yj<Q9yJK&#(W)x84n*U7FYA&Z0$`51QtLgyo3?%FMP
> z(Oq{K8I7gFt5V0q0v9tflxrJoGzH)W|Df_02NJa6826G6i$G`Xdp~bLyRYBn_<va`
> zm1R@2Y~#C<jj>+%1gpBeBY$4hk(mXPTkQPCLQ^BgkZN5%>H4HoF@38b{UKp5Jx3is
> zu`TX2*l(&aV`>z@bee1Ob`c@F7(>n8tyF3#v#9XSJvR^EEUmf6NZm}quZSAqL()1H
> z>8&X+#(Gj3LOXbn<zG;L;e#)|m+d=3D)-n8k2aj2ltaj>}_STtiVUlK`|*@FIht<)M|
> zg7Rbu@?(_Ve+GS|Ra#~6+Aw1KZ_7*|VOSW2<z>a>)~2(0<BwBnNCZpmr=3Dv`F#odRY
> z{F(Pvxh@jwDs*1C@g8D=3DT%Kt+5#JA5qUA%0YU`+!-FO;w$DH6Z{f9kEoEAR@-vgKv
> zUox`2lkp?~#rosO9l&d&9sx<^+5p<}q-IQ81uK(vR5mN1y-gbj8S$@i1Wf)%yDw(@
> z-dSZgVO1lom34y#UTzQZ(L#K!H`0pBau6PBYTd{1qe!XXN2N9Uknypi+NFsHqIQ;g
> zRtI&RrrLXuy-Y(1WF4Ho@e0F|EdU9s8NqrmrN*&uVrA1j&48j7UfJhhBU)&C2j$hQ
> z1~(Sxg^t$;hxsUk{IfZFs$IHlAf&9DM`=3Dl4+hKn7E8Q%wHgt9WPuiV_kdVw*lWT0d
> zS@XkY0!D1{og`ec|Hz^Cz=3DCH1V{j4)m&Xw4)5{T&?%EN5W^;<Yj7NFobm1qwZPtjj
> z?)L{Ntv<TVkzMu{L4Lg$B}RGPpT?hvjz>{lKKkZ(hd+@;g|zD%R>!f4!L3r5ZDhQ-
> zUjTQPwHY2^c+$~ys{n!wjwY?hUm~vmQbS#5NH4Y3)F2OAk)-}87_D-Z?E$1x$O<2v
> za%^6sK9aX$5+Oj2Tli&1gs^qjmex`9HEA|_0l-oMECnI?rs)<BoN0k?@jLB~&=3Du#o
> z;lhD32i~G*@c*gf!$MCX%0b7*{Q5dwn?I`$+*Y}i`=3D~GmY(XP3-Om@Sz~$xFA@O(O
> zNt$e7zkGms$1ycy>;A0}EbI=3D8>L{qd%l-#pU6ZaSGPV3)3OPD{DyKnrBQQv?$@kl$
> z_eupwHz0Gm1a6OI*XGj{o@Og>(icVShE9fsf;{=3DdJoe<|e<3jdeuh%tV>2s(BtjTQ
> zK))jfBA(e@X`;v>zgpltNANbQ4ifF4Xrtc)&W4Vy`Pq6j?QA=3D1*cDVkQIkN4JHW`v
> zg_z+jP}KdC+^Oal=3DE`~_@M>Ny?%-!Agi%8P0ZCYsV(S<j<fMubcoSwBz>DDAnTp*v
> zu<D-!7}^>NRJT|$zl$rj?K+z@z_<Cp>(h-}APGL2$$uGPSoJUMk&hF^2Chtn2y{Qz
> z#KwB{S!z^;T^g~L&QtKR2yuFXxBMOA*URwLc9J0<e0g&XoZEzxSpr7|D}$XXK#g}t
> zgh|t;I*%rlqQ4d!S;`|O@TL`X&K{2peu8W?3bw-0jk$HEcW@HFZyTi=3Du2tjn;XLPv
> zMXFHnfBS0dTi#DEHV{xo&csw9-rb4R!pJWb91h*MNp&S9x$&*If2Bc!XGaoc;0oW9
> zG983fBH*<lWWG8X&D@rvfS~HWMy0l#b3)9F+#ZR2&@rIjp5s;QHc0|<5ffWuh<x1D
> zI6UKP#l~tCQMMXhF^|}}eACj#Nh`f5O=3D&{9NmI?*E?=3D1Z{7h?@>U_q$`aj*nsN#K@
> z(YyO;H%3p}9vJT6@JQ<!0y+K5KmZJmpjvIh;1TbY+pMhH?FCGHQFjD_g|CBU@ZVVd
> zNzQlN#sgAIbX%Er5_t9)cT?9Cg*Rd|>u?aJbzrvT4KZ3uwShT>PLITu<+=3Dx1gy_e*
> z0NV?eL!7dE+Gg5_xwO=3De&d3fqo-xEuhRphP7<>9IlB$hP#-=3DRind8T8$T<2msYM|E
> z*g?1<^{d5qh2qh0X6<&4*IC=3D%6y86PF)c}If6cJ!$(a`*KS~wPey`#}6Pni8)`ANe
> z_gsJzK@nXuMA5e)(8^doNXK0M+Dnp;L<3CF=3D8hI957`k}uAz3va0dGIF4Kfz_TzHw
> zH*Dm?YP3A!+n#Eti```TcxItVJq|K#j&ZijZb~S&NoA0hYtXMsJ^v8C$P*lf#XKj%
> z9;(il#<1q<)kQo_*OwzU+>mLDZoU<Vl8`X4gZ%KsxLLoUx&>e_b!O5YYVgHAd!VxR
> zhP=3D0Fp(jI-rqj4Tu5T_QCT(I<dQ}nv!gZCszp0#$uy%L87v-MPb^dfhP&qAtntl&b
> zcw_pwjP5<MwvBrR6V7!ry5)4^ZyZxEYM3i}se0`wWT7X7_m*Yu=3DVgUTWAeOviV=3Dc5
> z2$#v67ba;4UD8h=3D2J)Ip(UZxq55J7<bF%r@{nzmhtu+@eGTT!zIRo@HEZVMP06P%?
> zKL9)2bj12;fY%AXStv^CVq#=3D@m*c>}Sn*g1B0_e*L+%UFb&0*r(Pgfv6yI0F?<0e1
> z*p9Iv=3DuUZ(3~daPPOtJH0puUkg>OD1A=3D9uv?HigmZJ6zueKWmG5QP&xxF>jz9HBZa
> z2lC0mD7{{6@7jz}WNJN5DLOt_Qs~^q77OI~`y0Rv4Y#RD<T4sTtI-N9&BggXW>u4d
> zpHn&RyY37!#|guGrK+s$>7HY&>QTZ4Wy{SRfG}4D<)YwI{r<GvX^mmV-N?2oiP(mx
> zT*%g8EG*l#CDbk2u>tJ0E-$9nZ|vs%8KnHaXLK#s=3DZ1xEv(a7XAXwjM?Gw#sg9!g-
> zFyX$p)t{-PH_iRYz=3D91@JlZyRL>Xu#V6NT+WvH77fn7k)#ms3M?T4^AspD<XrGedM
> z(epAogCgx!=3DP5x%^TGmD#l5NiIafI}9s}V3tjtHOYSDm5V@+womlW_>Cm|@AG{)vg
> zsYsLfh|K~<7fC3`_r8?-z3Qvi;5bFHYJp6|OWTS9_gVnA&S@y2lutGphw^#r(YAV*
> zkUkug+i>PSKLJneMh1`gqC|BCpM~eUHKwSg5ifC+UA$fN`OG(TMB_VBFa7btpLFgT
> z(ClHS!RQC&HF0;f+&W_(C#}eXtz*6**aUIh!Kt_zd>D849(}{Hb~?(u^P=3Dv*;sss}
> zq*@Y{pvk>PZG+`v3OBK8P;GlEM8JH4%$gIdecW;@iy=3DS62npP_g9QW;2hmzWO*&Su
> zch8HdAJuzd@05p$umt0+pxS=3D1m~H@&*y2&V@!qpXO)~4Qdus0%tBfX6=3DS#Z}nnsr%
> zXFpCLrE$VjQb1EAHzmMsa{JNac*R#r77y_U$Q~HAv*EW1W+g0XB_!-HBXJ(+(s;$-
> zHb(tk0Wsv|Vw0*D?GO?^-+tnUl?a(8u6^fr!#;llxj^9@yex>&y0YXUQp#Uq`i0Dc
> zy=3De_>oo7o;Udj()069R$zpv`AE>gaqVmQ}R5KW^&zu<21>m{zU3ymQg$lg-BP3L_2
> z0Sf=3D9ov#MKyGVYPu}VYH@vpyhtY&HHjVu}$l$R@@Xff~4_X6Q_-XRDoDSz-+SJa;#
> zX5J|lsf#)qfwdhu67^de5vdy3n09x%bn$h?8(m#MNa0?#JRA&Zp@&fb-^)8VO6Ikd
> z=3Dsy>}oM21y<e+n{{Bma{qRDgp3JFd!QlaNyx#v4g^wQrI`q_YT#KTO&8mHI51P+);
> z9a<k6>^~Wjd!|YEoVonk^o7wrliNiN+>_o{7_f}`U)?sp3#Sg;n;j}<aAgX15sV-O
> zXOazrs0LQXCS*ebR!qdbB}kODF*i+LRmpO?UL?B>5AnMZLksr_EhGH*U$tdc3wzSe
> zHGZ(Y4m=3D-TG(up=3DHLAJeGcDyg<Oc%xQSU^dc0iwlF=3DYERzLSRi?p&k-Ot%O4%U~Fs
> zvhlrYlaU1Qm)NE04#DH<hJ0J_9GKRuY#>qFZj?KDRf^Qwo5oj081wPo1oKLm{K^nF
> zQN2Rh3e7-|hvRdePu@(DavOWD+C))bwF-828LpUxYpY}#s;8Y*nwYe`O=3Dt})&25A;
> zh|3N0uE`srCf5yd4OR1Lz3+>4i!dECKS^w}p7yf4cwmI?m_!!Tn$UF%Cs~5O$Cl-J
> z4VF|v?i;05_-cFzIHw$n93p5D2FJ+5&W%GJWxILz^dzRG?ibdsKsYL8Vb-94dvEuj
> zkze%d;HS;NZCbdSWXxZlW3Iet#u;d$JpIoBo_yXsI8+bmn>s}?t7aDT9{2AyETyBj
> zyGdITX{e%*MKpS!D=3Dv-=3DaA?{bqFS;?{q0vsF%Jll>*a-apWe_=3D)1@z4OJHQJ32Nb?
> zLQt|5#Q>*a8oIb98_C&6)=3D)0Qi^|!xnH-4^n=3DR`m8?VBK=3Dj-&eaT}RIX<s<=3DV0CD=
^
> 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
(
> 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
M
> z>~H4h3>tJFX~UQhP<%QfJ`zE?QN+QFop}LBW0;1rIcT}v<HuB~qN6N5BL3@!AZ4}w
> zKBI2&?SZR4n(rQD*X>*IW^Z!kvXFBhQo0Sh+8a(D<$$1VqkcXdtlrbfN^5*R41)xN
> z_;RXy6=3D>3!hhAnOMS0<upIY-OUHq7>V|CqO_PUYRjTzi~$+Cxda-7h?{}Q$gGYUj_
> z-OHSakp^8ePew-Y1cg_$9YEbQWD*~B;QDH5+(QJ)^eIi^vq$obt)l1cvrk@<&Vm*;
> z8_j)b?i7roXbrvx(|dQxzG3?}tbx!_%BT<`j9OE<H6)8@eF=3D%6$V${LfjB)sn)H~;
> zIw~|n0ORbwQ0^s-9_i=3DHAFW+(2&oIdqHd$FO`B=3D@o?jd?goXlUa#wK{kxR%HP%aV~
> ze!Nw&1+bt6?k`=3DMi^EYgnYOz%)EJ=3D#if8?z;`wB84d@0vVs*Uv>y$R272_Wfw$zy+
> zl$5p6VO~IL73<t2YV~GSuV0oX4JEeu2qoTfOn}Z4=3D0`G9MnmtoQEWfIY0Vu~_Hm>(
> z3Z#q&KIk}1+^B#`HrIACEY-@r!=3Dx|*1a3`se_NPEm(<`_GR0rT95=3D&;%R<J9pA?+g
> zx%zi{af_fSpTLgn_58wx&W|k3SZO`~Rld3qngZthik5{1t1W|L8C<^LY|@xU`IFwV
> zmfv;|&P4p?Rb_&zDczM0d?_NZ#r$7;d~)%r$JTMdugMXDm}ZUqmxY^YBKmI2P|$QL
> zg%iHY*`_x8Ku<DU)KlqeA0l0m>^e?yqcQ(4<I5)F(R*@gO+JcgH5^x%p<$?(=3DFE2*
> zH|ZsJzT{YW1u6-$8`kyW|204Hz`7Iwj;fkcxvhqj5W-!FH0enWl?+)R7(^8-dqY%)
> zLp8(5NcA)k1`?fnFeyqP@H`wwn-cYGk*`(xXne$K5w<PbqtL-dH;EmQ#@L2%xFwCf
> zHU>AR6nF%aQ2UGs^-c;-0~7J70uNIc2?T^4s|D3m%miXrHW$+J@>w$+165F)$&s^!
> zK+V2}vCYFdgxbjgu+fuOW9j{M7I(nD(6PNL!7T)}!<~A0IGTFGdM(f~P5`-4=3DOk;y
> z=3Dq>MCpVvbGnk$uy2%i||_?IE1$)LJV26*|4J8GV<CGg9e>r1}CpAb;7G&|99Z^FDI
> zsrQ#<OMdjp#^2$84*qz^6T!=3Dck*5HSXb2|F;x?<g0k<R(pFyBHmr-4OqRCVm4j@!m
> zn=3D`<pUIZ0che7OCTic61{2+T_3!#F@wtC%ttBuaER~8lSfNMiPvAVowP<*i^=3D(YqM
> zX?PCN!GXJyaMJ~s<g))k*Pr>sA=3D^YlW)N;$=3Do_Qt^Hlgcdnk<n&}S0=3DpM}Eo5%yw$
> z%TSir7l+9xRk=3DaGX+sbdSyZsLYxONk&w+9B*RMnC_<7T7C%TF}o|*|tU09R&79yme
> zGKqtO(7k>#UM@n;{)snV$WdK{p|jp|9C}<NO4F3Zukbl<u@;V){&84olzuO7$hfLY
> z0%ITp{R(Y3<cJ1>%BhnvRk}^-vx`Ex3M^Yc@A|>)vrY2TIydN=3DMwGQ2;QWHD2|TN*
> zi8`DGvbuJho#!&#!CRu%spyZ418DRmKHC}r!=3DN66Qt-^l@^7!{&a%F6KqtB9>!PWC
> zTC%t`9$PoyVCu7+VxvaOKKZuV9PPJ_L$p<za-I?^Hby1}R<>z+4x;?gMuIX#P0OKE
> z!uEsmJ*6r0_282PUr_~QP<?^4=3D(snY^2@BnB8FxitphMLd#(0nh^aE_gBahAq8J6A
> zJD=3Dw9MweMva`87@ReM^}87lpb%1i0SVf#nQnQ5}=3D<h66Gke*j3QPd9$cuD!?8uV;=3D
> z%}YDSuΞ&-|hZz{t)3Suu`Rm6~y)w3c0**?lO`)mA&y#bs2c*+?vpp7S%_uKUar
> zKufB~VvsVX(LhYHqCiw0yGs)P>ovFRuufo3=3Di$e3;%t7Qy288FYIABeanTafBLU5U
> z#yAwIj^<Dbl6aarzEJDX$FRaXhcUq>4x;s|b6S;gpRS1`U5#xrnJE}%HF*jSGV{3p
> z9K!jC{7V_hB(X6W!G6+reRsg6i-Y4SrT>T_tPpjQh_JG6&8)%O@k?2rC;U}O|Baid
> zWuBh#7@CvtN;K8IHF`{?FOQW!B2PPEtovM8=3D5$<^I}&^v=3DrTJ{OTTG7#<)&G=3Duz5a
> z|M(XJtpe^zC&un1dS$-|I%bJv$81bO<I5m55#wX9^JMT;`_AYRV4O~LNH%B%G;%8X
> z8(6CPyj0b`h_lcfa-s6=3DeyrZb1G$-sWyu-UI|&=3DH>;D4KxU;O~LBgs6yQn!yOoL3+
> zb?kGtsb%XbJ-Se?<L?YFWI4f{%Y6Ye1Ukc+R?I3hO>l_3IAE_ldzmQt9bAzaa_9jb
> z8fA<YWQ;6vIREXaWamnw7&)U8660z^@~FFUq%s1}MF!~>QD6Xi@`FY(LtJ0WWrd$^
> zn`u3(cw=3D$p8({?;QcCFXSvW~>FW)7&N0$ui{i5?bF@6}p;2UWAiT<&lT@}oiTEp^N
> zl`t%(J92#a);|$Y`U|j*$%VFBqJ-cu)|Apg<I<ua?aaq2?kd0J%7g2}JC)I?Fr$<g
> zWihT=3D*DrOAZv``p^9r+4VYpf^Sr1;rd=3D}zf<VLk9cDrR;B^KB52`ZVX$35|4O9GPv
> zMlLmhV1<8fBfO}nowpns{dm#Op7COD>~k7AD?`QYcch4u<$r@cqW2Rcy4}jj>5dB6
> zd#R=3D>Fe)J5m(=3Dq6i<73rY=3DUp`J>NT``7=3DqPIs!v~pCfS&3dju?7O{mjf`0-x4s*!=
u
> z4I&^vK6mpj&<XZ(pMdtgu#y!*(0qiv)r$NFCgd<R^Wd^x9LAN(v(YDFiT|=3D5qPdz&
> z?_rq!H<ZK!uxUE)WOLNUak3#L^5$rIb9~>#<Zh(%v-c)PHgCON*(@@Gst3BtPq+CV
> z6t8&r0xq_}lg>P$GKD6*D?I1wQ#RJO@&S)@RiU5vbEVb2otYAfcQ@Y9u}?Csr-!bk
> zaFRSiPS)&Twf@JZZ=3D!|n$)Ebnsr6ia*w0uH|G8jEvl8l0ifTzpYCJR7kn{pp*s1zr
> zxh_WFBh<%6;M+^cH80dgAoS!=3D)Cds|-baCOVQ(c>-zWfkZ<y_e7>RHvm{5mrQk&PY
> zfkb~FjiP6CaLjUFRR?i%^XGGy%2*Ql4&Wp-5kp90suiqd|Gti5>pLMpX#+fORY?+w
> zi!Op=3D>)G>E&(60GXdeXQWTPci_=3Dzzj!-bX4+YEjDn^8b_(NoRIo?F~(YE?ljH5+P9
> zZ7s3nBY`yhfq{ionC@nl#T5fw66wu!K*F8w0wJS!$D%p-XCOU!-a9YYoic9F|5inD
> z8PsrwIsjRqqU<azkjl;JWz$b`IuyrDa=3DPazlMi-E1{|ck&VKG|<6!+B#WhPmf@&<9
> z@NT)8Q%9c7M~~Tv|I7kh5S0*eeK^Px^c&nlded$6xKHG?Je0W=3Da>h72GSzr@jR6Ai
> za5OL1eNhSo6?YR9Rb!b*=3D0Ak~3julz?$B?wS>i8>R<w+ELCqWtjUK!gH&z&Xi?nab
> ztMKJlUQ}sD7C9K@bKpPdDYFr<vn18T-OXs}NkH`hX*qdn!Dm`LM4i@O?9Zh%d%Kpe
> zDK4;%`dFSGy;FLo>pG+3SZ+X?7cc{?+_-yQFFsX<z)%<Rmq9jUUy}9o4yRp;o70M0
> z<t91i)xjoZHnqS(?1{gg0sI^%M4VlMbybuMP~_LU!CYJX{R+Og-9|;}hL-eHFW33k
> z((gDWkK0{cDDpDBxh!17k-RbFXTs*fs_4sRfluP>TJh|#`rS6J7pzZCh~}1q4x+Nx
> z`SVX)TB<gi^M@$ziC}>?_v|s^N(d4zv8SRGQEqpZny{dr*h6g%Mc?v^WQ`<dk%*u4
> z?RO4z?iDogQ!_7NAE3ukVdn^9?7sxm8;L^u?pI86Y4M^KWj>fq+bU`K@=3Dq_9&jM=3Dh
> z$}Y{RowRm3IS(HPOZl?eUsm6$<pD@cPRFkFv<=3D%1clE<oBf31yT4zz2bt8>EdUfCZ
> z)=3Dyb2f&BS~h=3D%c`EB04kiq?i8KqApM@=3Db`rpp_Wvtuvt>R35D2V%j=3De#uTD`5YW)=
(
> z*A9(#`2h=3D6N4ctmDgQ}URBQ_4!&Oqcf0oGWM~MRWXi;A=3DJt@-RM4e`ZL@KxUKYxNA
> zjpEd7jq<X76|2(gGgq_K+oOPJU}2~4Z=3DLPsMF?-tXH*A2=3Dh-N&q~>O1I$5Hp$;G8e
> z%<WbI8l2S;*$0gGXU=3DBI$<khS{(?`1wij%R4>e@Sn7C~INiNjeq|s42;>_x|lV}<)
> zh=3DO15%T5)Zp9ftPzO&@QyIS(j<~It>Va4Vo9-n!Tvm2qcO>^hz@hkt2{M}I3RC}WA
> z*3E>NNYR}_I8>}K4N$@~)KRmzRc-d)Ic5%=3D=3DRm^(=3D{?Y)4WOEHfb@~qfj!57kO3yq
> zDa4T3N#}eN7A(r??vT%1?=3D~&1(+^Z?xhQNsrr!Qc`RGUND+uX9I6GptYlG3Yu3A%6
> z3g#*oiX+&3upNx=3D2`X06+Y$1`2ZWrZkY0GYXD^9sa1-iRxvxHz9Ry~t;(&7n8csYW
> zqI`)1mVRNJd)B=3Dkq620_*Vtl*FAZ?(t56hdw(k;3A;;qU{S1a6u-W||H}B`2ZJ3jd
> z;pdyaqov}JIpUXt7KKmGH`D|I7x}8GS+K+#Ua|BO+pbn3^zUs_F}4DKGj}@MXs6DP
> zm$(=3D73tCEU-T&bm+Bn(Mt!OIds-4nfYLL9xn)V6_7W1?)fNETxD_s&@)>z0eIn@<O
> z%>08Qa<Taxs@=3D@1=3Df(<d%>NqdZum=3DUK^fqcYQe2FK(7nc$U=3DC4A3ddXGz3%`17`n=
r
> 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
~
> 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
n
> zhDu;Sf7HiD`E4%#pD7LSP9h0yC8SMCvP~`@94=3DZ~t*IXnY16fy9QD2C0YiIXGJ^!i
> zm52*nt88hne`iwZ>05UPcWOIPR2E{A#)-n4kVK~)L@z|jQNkbu{_^+C83&i3LAFzv
> zJ)VqUTkZ5LWm1H~<A}1f9)FL(m(#b_NL?8{$!7~Rta-Z;d*P>8`yljCNnv%$HVEbU
> zI2Q;EGx_dg`vIgD%!C2p8ZTQc6mzNcGgc5Z5IwG6iT3DT!3p5IUr~S*&mgoxxw2R=3D
> z09H3M0F~42haux(xLrR2F&*wb)2N)O`n)VmU6^|-*550iKgvEgD(?bR<FTu_Qe%$L
> z=3D#T&Kzhc$4+7%OM*CEj9LGcEl@*Ay$L&6)bad~Fe=3D%tJhrlTK2S^v2!r+7giq+{!n
> zm3#bzaGnduAx6<sQ!)03KXjDUk?T$><rdPkcBi`2#;iMBT?4s9)W{vO7kR6hTWr5`
> ziz<1y80p4&P!(|rJD^more1NDz^|3jNv*aTP{G)Y=3D-RJ3`Jh%pG-B7BVSW=3DQ0TOGJ
> zcJ^zfOF@scGk2evQXQwxbuyK)8WdGgUUPB8JSWcqI}nuFfSC4bUMe!QsU+?GBUtPj
> z3&h4$6wwI_TZBtLKLAYLs7)@nPH#Aa{_EGT>ft9N$}A|T8FcP2Y)^sgx>)BVSBx{6
> zDQ$0z_}@GPfB6q!{pu=3DDWm&eMYz54X!{W(49po|{g+Ygo*4kk}Y)K?vv&)5v&FH1u
> zZ-ES5@<-e-k{tb6%p!aG>Qaji6{EQ+a9Ax~vxMOO-8y>FNr8|!*+qWp#hY8j6lxUZ
> zS03L;Z(}P|ocfwcl6lqPN^O1A)t=3D;hsOqYTQ5~jA)z|itJQu#~L~Ef(GZZ*hwbXt~
> zEfM>owE}D|-R<C*PHEth4ZKRdvuENn;?3Y*v+5dkt@KY43H@`9PXRhQO(V#9`>_LO
> zrGn`Ax(@zN|H4yv@DEEHX7deUXI*0@cL8ic1SgMVNCXooMNGvMV-kp1;0{P`PsoUk
> zixk~C+m(=3D8I$6OUHS=3DA}h<-|#>#uW&YqIyPJXBu-xQ2~%$ORLbRzMlk6=3DGX>MT%w%
> zjcN?miCjNefT;<p-W!rV3SVM<=3D6@3f{K0tc1|vOv4hyxSN2Zr}h3-LziN34pY;H&P
> zVVp|qJo2cQQlgjXuvo#s(dorhFv#0aw^EsU*KuLunL>Wazr8Mg-9E3#N_|ULki2^t
> z?5~hc>k1VSxsohC3wTbb8`16$nJUmkn}4HET$sRaSpy+b#k6_o{N@Khb=3DMf<K}eW`
> zE}vb3?J%}Ac_0+`ha3^tL3boB56Amxf%!L7xl1HM=3D@)bC78BSg;dFg0*%&N`;_aH(
> z6mu(Fhm}#9{oQ7WlsE0y1;8=3DnPTy$r0Ix709(BY$6%(zF@96I6#P;Vu#jnrJn{C~M
> z(fsRW2765(n)g#CHMrK<#PZx0=3D@cm^3(zOmoK^H6!s1IrK1`7(!YQe1cT8b?%)a-Q
> z<QRF(!Hnh670_K(p`yE?6Iqaa|Jb1%^5Ig<)OK`hen%3~6cdH!eUTSx<R0I_|0T8@
> z3wf^((!nQV`9RH*ooXg2sC;0fGBxZ4vb;UX{dwc&DdA~<VQ-^(=3DTI=3Dv)~VnjU&*1-
> z*4s_zrJNBbueISFu3+h|VvaQXYlq4+pRZpE6bo%)4DtZK-NYW^);;yE{z$DnSO8iM
> zGeG1Fw?-w6yocJiZH!Y^*j~&Ls@G$9>yc=3DACXi*7SL&Ri(dvEzHOcsK)f3`pfX6An
> zG^l?UUf1H}8@a?J42PW(RmE1&YGKf$Kphr;{uYcaJx>ld!|{Wvhqnj+W3O4_`~2j;
> zOq~MIi1#h{y49QrSOq@l2;*q+@TnBCW&p#vYHZvbM{|$VOeMcqUBqQ*r$YL4IbOu!
> zrT!rQQ=3D?+X(!DEg-Jeh;vT%F8=3DYmy%i@u?dAQJ=3D`w%>YtWUQKe&vXdTA^K-Jb7^T@
> zlbdVV()$Q=3Demy(zy5pAm!V|7?d0^_<X&{9@cw5n5H`PoWUR1*LRd_~i`_0i<X!>MW
> z6!L0SA@vT}chc**E?#o^L`X~KS^}3D9(_$gY9$l~&L`;&YzgUEE96&eG=3DJbjhrH4X
> z*=3DtdY5MWHecJU&GYuT!^^b&p660<*BpU9vc=3D7I<S0mg77c9u3qRkZ`$>vy*QZP^AX
> zm=3D`OX#ETOt1{(1NviYJg!I(8Wi$Did2WS!gb?g!hR>*luTj*If6C4Z$qN7V0A+8il
> zEFx1W99*{bUwj+$HbPK}2Un?#m*Lr_ThYhC{*$j|f#l5I_Xsu|m(r?7`p_Yal4O;S
> zLp~vg_?AUfj8T{Qq&|0>3@Sh9yAzQ!HOT&HK*ZseS0|<3YhPwerY|0>ZF_zk^P*$;
> z40PL`(4V#q9FPG;kl<6+yj}n_0=3D)qgKd=3D3ooj-SS#0dQQVihPulslPp(kXxnsZlzz
> zBQNiN(U^1e^vD$svop)L=3DDfMU=3DBwhv13|wCs+s?QMz)4Dcdx*Y8eD4cqnYUh+X^KJ
> zuYlyuo7VLr56Vq=3D(~4I`_)Ukztn=3DVy(*`Te$5SpNx;*6SDcCHp7d3}Vh}4QZtJg{^
> zbg3M;(kFA+q%kj`e3?llWnw5k<=3Drj&PJgQMR8Zre2?txU@l_cLw)ncPz0p(JMt^|S
> zW|U+GZNbT4PaL!wW<a4b84HgT<~DmyINGm9i&|Ug(W0IS9@<Z~6`F-XP<eChBu@j|
> zcJDCErO6^UZitwOjwyVO608jnV=3D@c0!kvEezVepg=3DWi6>cKxmdQg`2O+3uvtj=3D;7?
> zJDd99n2jE%DyB{0XCkfLZU{z_5_k$rw(Bl8rB~oQZiOYF=3D_1~{{ee&RVHxCC<4Tv(
> z#-B!bvhQFNYIWm^;b*2VlfP$})DEhZQzNKi#W6iddNYG4CK%iyc$BDrX56FsK~(j~
> zrPZhPs73mJRV3HgdZHytq~9T2RstQz9O!tatUdPkho_o{CSDLfnUQ_f%Rj`xhnA~f
> zos?zc9C}MbpyV2@26CkssoNXS@?{Z13Uf>(N$`iWy@UpZQ(%`p9joE&beGD#JbsKr
> zlA<{I@Mr!|d!$ru*ZMPO(Io}e007p9ifD~2)fp0*b>ohAdQf>{D^_})(yLFYrIODW
> z@7jB5JZ+o#CgI?*;d)`8JB1Kmh5UU!osNA;B9n#v)aWP^b*$YfkTZ=3DDmpIk)JaS|A
> z?V00m5OOlZ$k?A|YlC_6hMq~uWqnV{Zs*VwB@XK+cYmhP*}*)Xj60hm^0N6_T0AqJ
> zH@;%wcD<zLiAnJ9o|{n5+NtzG(`W<+US`kt7%bIf!uWeu88ZV>tOY?73O7fPd%=3DZg
> z3vYWdFi66}sSlH`8rV2l|2n7gvF}YRqBiZyQzyAqJBa-#)VOm<vI>Ce8_U%20}&4+
> zUBbiv(qkJK?}9a2NzqxyEGZrwQUE7#FA>0Hp{tf<?@G;)Ve;#hvWk?<9}y73#k*p{
> zeSPG?{Th!o-&^inn{qLcs9SPdoi-aUx+VvAi!`pG#rloGIUDli4Z-o{w`NTgM|7ty
> zX*o$BywJxg80B}`?@w@-3L#W#*CUzoYDGk347}sZmBqaH|KA$QM-*ECb=3D2}yfBRQO
> zp@Y)Po74i4iC-jiDt3HSc7)6wkW2B=3Do+@?r{-*m8q4@&lp}O`@D?pvEQKHWqTo}Q&
> zu$|JjhPx8%X-TrFJEQjJ8c%OoEPYpz1AH?nbZd4EX!({xs!*iYn%a2Jb+T|Wx%yxQ
> zb_iTBB^h>y;A$pjUP|UYN=3D~^y|Kl+@Y_q8>JG}*jS30wZ?=3DV(~ib9gCl)2=3DM{&pl&
> z?N3b)6#FUPbz>G7;<2uCVIol%2Gx1Di?-}U9&RT(YP)LZ*ni;tOmpJvtIn!`AboSw
> zE2Hc)We1X#$rG-MUebqZo;MG~=3DE%lHtVAX~O$Fb{4L^<cZn6WK3*K2=3DJbEl3K_|iR
> z-U-rnr$2NbloreHgrci}uh94y7$#T;VsS`$%31td^%yc|I+gl3nD-T!KaTojnAM8a
> z4VY>jg_~MKua$09Bx!qYNWWH;;6LUBh1|qeLKW+!D(ee*l8}_^WUHHMB>CBDrFQTB
> z$TZQi4tHAy*`y@ipKZs?3k+E>B%$OZZZB<+72?$c!!;v-mD<z_K^!Jvh71OXrZACQ
> zQ@NGNSqCm7PeZ(0HMW^8p7OAW)&!@Br^AqteE%NKoJuNT;h?F^ykL@~)!whqf{xMD
> znE^zNd6>s&Kk=3Dh+nCt#~=3DL7{5dT)P3xG-#aGnlNs>2JMk%;54Eniy&y;amw<xA`We
> zk^1MXj2-JinAt&@os&!iT=3D-$Ek3Oe^>&F>OXoaUjD^e>l$i@iaDWk7JST)Saej0%C
> zcC^ykw;(vDqPT)tuG9dbR}HTI_H`=3Dz_I^pigpJoP4km~@4cF5F`j-`HUcP-Lg;7Ts
> ze*p`-Ac47B=3DuQC;GnwS$e>sWc2mApHs!4QB(F2cJf6?QR)FS7_RsP0(65v!DyP=3Dgi
> zw|Q)0^thX9RcZ?kH@tcx5hZ7VzqbQR`4!CvJ(_x_JCeT4IuUr70)(M>N{C}5xSG1-
> z1dXwEr7IbCyI6_wBfppFaxs2E!Q)09D%HTEh=3D|wfD|yN*>cqH2I!!)rbV($FukVA(
> zif1x9)Y4!B<drZ;U^V2NGRdIK8TRD`uQ<59Sk5q^ffP!37hCn#;?N~PI3qQ&`f7Yg
> zaI1xcmw_O=3DxjNC3b9b~~s#qE<Tn=3DYc&!!U;EBY6R%xoe@a#kV`a9V-AxQA6~lm3*$
> zw@HvUDWf99y8&v;+;Sko9CQ8g`h1$Lv)jXp>9Ok@+RgotY~Pe8Gl`AQ&L7+a9AJzP
> z)fl(q82TJ@!E-+X+!gA-@btc#X`r6`GZ3rHr>`SU&co+JSpUEs!iPQQN1dFJPQvB{
> z4}RLLlsrm${7N=3DZYD}5zh+qSjj*!SV0^;@QH8Ef^o8ip%E}*IoK1ZBeXrCM3EzKc<
> zKPpDXGyd_+oayIUYufJbLP1CK`D!sfaWtxsSUScosV`#}?${zf-n<4_?SItSJ^|);
> z9QPBpk+Is;m+IH04aA;7KITszt#1w^__16-im2I$;nM#=3D<-Q`kjY&sYlzYY79&DW7
> zmzthTgG&?jeo$IrJOb7b_hq*FrJ9mBhwIms;M}Bs9)Q~t?S1%8g198{HfX2!vBY!&
> zg9R0z;V{TtE%}VV1Ho!f_z~XVR5l%sE56Pl%2MxL9R05MG+Kga8a)d_Re44qX{jul
> z2i1PSVc2X!d%Wo*!{j6LM_)YtQzNhJ0{hJ3E-ki9zMtb?6WtAlkYOptWJxGn?~&k?
> zVQF<16d3ah6{*}wcXP)2{11sLL{^YT08qC>GdyF)ri)ALd|rX%-<T22#iS&J%Ru#=3D
> zag_jA55Qu-`nhSYMONWZ65Xy^YyIoEu8b#Cp`@msUaQ^3B--*ieh*C%{Ox+$I@ZS=3D
> zw3$pC*aHMZyGK7D$u+r)_`(*S8(nY0sa|4NJT15A@k#IPEMlz75w0`I+P;`<FnQ?V
> zuSc;wGyTLIJOUu$DiA}#-(N@b;Z>rbnb%beZ%%De7F{BA$Dbq_LCu$)-AQd9+Ba3E
> z1f=3DJ)rc%BhHF^^1gi+N{5#v4ygv8^vRXcCoKG(n2@|k%dtd2Sqits%gptT@<%n9Gf
> zR3MU_MRZe_p%)&mxtrol{3D^n7i6`7D};}lyk-3Vwk1_Am{cm2u6`r}f-hBzGEsa1
> zxL&jR%-`!5x@_YVr9o$oG_}XjZJm~ni=3D6~M73LoluE*a$Qjf`q+B^4sXzuevAF;lj
> z2_<JI#XNfsHuF_L4#7hehHSuDyq6KiuS6HB%B7fHRObyfg5<mF4A42ZN@GQ(V2ryW
> zaX*oKtWS?5s6Ym02|*R3;0R3dUzU5jZ`5}iAShNKtDKR*C_}^SfUfRc2@OQeiOYU%
> z;pn&X->T6w411jNX}o+VZX+~!h5)e<G%yRjBAi}VvcRRNgII=3D#l8>0LG7;$#je@D)
> z1K&3%I-gM`Vg9X_e_v#-OpTQ?AM-G^=3D!RusW8uDHpJ}XBxR0tGOPR}QK%&>C%mS$6
> z$JfpG(PX#z#w@`(NMKQxuEUVU1{}Li_f;nSjQj~*&ZM=3DYbiW%`0Alj04OSTOaF#<g
> zW^ukT=3DqVo&k-KLv{aw(!zDP7Z2iW@_0^<}uj{)Q-T`n0cVv^Z|hfUVmhOLKCBuq8H
> zNi+3lHl~GcJ`|q}T6IW6mI{2@mSMz{;-Bx3NsLF=3D0ls9fv$H{R$lfE8N3j4mN=3D10F
> zCbf`ZP@i!BJQ-fEJ#Md1X?3bj=3D$cijkI?NvUsn66BkBj@L;c3)ZuYo!d9VCDat@R*
> zejMW0-<fn<-eo#|Q;CQ&+o{{)N~2afBn#QkH&qUJgL_j>-cb!WwYRSL$j-Eeq+vbS
> zQXSpoh8r)?drpI__>GkrnbN>czt_U{li>>iyVAY^(Scbt&t2yv!CO-DiNP-A^^uy_
> z`MKWb&s6vmKk)~vgHO7M=3DbVIwge@@iJM*gLi6e)ekg(eNtNnEQRX}r-B7EWo1A|*!
> zkL>+42-9m~n!p1eXe^VF;(DP7hOW(hc;6e}ZcG$8=3D$clF9g1;X+8m^$xAW5Z{eG%O
> znp%3<@8-PIpulibnwqy*2VOH-Ms+E*@|d<*OFN;BSFE?B*0NEFmYd#&#JDZUGUTs>
> z=3D?_V8NQ&#LhhRY>78Wt_)#`Nw5uh{S-O^)}9i98;lG5*)^*0M`3Xx@Ye}<s0ZTSIu
> zkv><jQ}efLOJwVlgqgQtt4gQcJMuJT5}m|JwvMb-9m*_X`9_$`9b5{OFS#umk7D}S
> z3G-=3D|y_7uj(aSs=3DE1s@vrI@OH`Ux(m%v$O3KL{0f33>!PwQp$2a~WmR=3DSXg#HtB+i
> zm(yI=3Dmb;@hJm6OTzS9wj<1eP6OkCXKRg<KqT?vbBusy(HsB?6iO9Q8XG|I7qs7fwT
> z3hX_9I69Gq05z0hyAuuM1;LRF9=3D{c?*YLN)mv(Gtr>#$^ewahGGPEu;$w3H)`P*L2
> zF!n!;uE$ME$3}4gS?K^Zv8IB@Ji;&RGY!81GIB$(V#s$SOb9s%=3D9k>dQscy+);2N=3D
> zxptlqg_VPp&(&y=3D@V^r3VCR+hAV^+fxE0c;6S<yTbo%KCk^*mC2w&j4VP-nlt;FnY
> zV2tw~QJ@|dp7;7Ad0ZIxe@dgr|8Nd7BPN_+G$3yFF_`tgvnkJyBHDL$twBSEk!0Z8
> z-!~@9Yi%v(;uhPhCZ~T*AB+Qw0F=3DKHB(sGtH(wrvjvQFZaf(VQ_VbRXxN$FTM?ztF
> zq;i!f2$rcT<M+8@E#v1Cl#5ty(tsjLch)LrLK>qq8A6!2NPwC4Gw-cFZ&Z(v^q*qP
> z5cHl(yE=3Dykt2_ZYIOFlj<Q+WzhEWwJNmZZ(>AbMVT`bN7aYl$g!{c>dQ7(}aEE<Z`
> zbga5ZG8x_gT>Mz`)H_+taTvzCR8eKYwgX^>sWAU-qZhsoezo~E*Gyv;)b3<gw?)Y!
> z!CB}DUdjcnJZS)Rm#AxHg$x00B(8d4G@ZiHXu;B9av-+_DM%2EoffTYRoMH(=3D=3D6sz
> zTwg7uLhK||%&fgk&koV$P1Vc+yzOR4WVpPc*W!BaE0dr3?4%VkY8FsH&GBi{MdN;G
> z-o@E+ndq1IwQG6?vg!)Az}g<O!sdW)Gv;)|hr#m1BpyEg*=3DY~J<F!d^nTzI~A5*$f
> zOeob4GVKGec=3DCO?t>AUrp^QINq~C8gv3ioNqTT41Ru`9TwK4Sk;Y{rKf&y7MTpSl`
> z@CHOF{q!)s7d5RnV-27i>0Irkc(8t?2v)k27rB*&pH%U6PnKVNSz2j9S8N84@;=3DsN
> z6nb~|fztIa=3DFIt*kZ+)siaD`cOyeS=3DVmRnVS42AZ+KudW&BTnZaLpphe*&Ip-(xA%
> z`p0Y&>QqrqX1*FLZ{ejjgS+#w-<YqTowjc#kI|;x*E_vf#&qYE5x?bFlV@>kA@i0<
> z6nbrXF*Usaj6)?$yQ&h_w+$+7Z>QD7+0Q|4^zGrEnMEOmNh&gwIk9%!PcpYe82m9}
> z4`+JJqL%<J^l^o~$tZa-D@%5gk!Yp|fz5^)m#0m5c)VS`!`Nk_sVm5(P6Zbp<pCih
> z8JbUoByvIVzdYLDj$}T7S|&5}UNt{#rEA4Xhn&2b^e!`^a16f=3D0t2B>pr5l5n7k$;
> zacEA$9yTCKcIJNDK_WP0k#%(gjJ65bl=3D+N|kyVhZH*X4KU-=3D(QWyqP2Fc}qU9mrQZ
> z@H#2*-J0bdQ8j`9JDy;<$@Jj!s3*=3D;Jg#m@Y-1T}Z4h|5DQPBDy~|knv#=3DXRwkcDl
> zD>3<{Rm8GC#tHARZZ#CR5E1jhGPcdjjpPs$mT*kPp~7kV6=3D|WMMsn<(s5N2&SJ$gi
> zks9anebYarRN@4vAbdqDW}$$IO4X52;87dqau;CGDR9~p-EQFErrC<t4T0BDxcu^u
> zqkcqa<K5<IdBCy9q!LKKYKd9|Dw%qDV!%d2<TknJT6oYxN(MH(tA@m;h*u~NTISL;
> zNdvok9a(z3%YNwa3k@oPor(9Wka8^lJaAIe1ka;;<Q>4H7waj6*!?pWp|T<MrVm~?
> zlf;<~y3De))1hSpL$y+JxTxN6^$rpUWY+?_J3O-sX$Q(K8`LTm8PZU=3Dd7ep&lnz^F
> z+Q^0*+!+JPKgF>s`Ga0A>C9&A7>tvMEDMd6UUymlU^gTrBZR;`#V$^h*zZ3{Qt>GO
> z;cUVr0#nCJvbtx9Gj}sBN4I%#i;xBeSjA1R07n~H0w}h*#4iqa)#bdC)>=3D43`e3gE
> zw+qx}S~_Q<4lD2OknRVBC4+5bJ4%k&D!gfiPNw!jhw|~dy43BX<pQ7!`j_UX0%>yi
> zdN6s^=3D#@X=3D^W52J1x3#+{;g{DGr#>CurnN{fD5C;T8ug4dj`N+Q!%`vsly^Jtrm=3D&
> ze|<uF^1ZNZe)>-EtJomPLHprYPe3V!!%>6ebZdimZjr+(gA@RZLqsJPIyR!J^XJSZ
> z($ljsOkXz4C-6o9TqN%U4wpRU+xPfk4+R|C{#sb6gq3^&C$P>{!Md||rZ2dv6~qpm
> zX+}L{>TJj|x8eCv@AF`RB1QYZc_`p_Oa_8Hb%m@xEz(&Swh2s9(XEwM;Z1X!^j%9y
> zDSrK*P7$MEs5q!M?G9$Z7x5yI^F5ZjP>YVGlY*Z(mTjPwgU7`@<mC<gtJ(92_a}`;
> zec@>@Lk|CT5i1$svc_Hs7Uli#T;b(zzr;fK{<oS493jqIG8@~b@I)`sEh`2-AgYJo
> z^U<jFxR`Q8<w}RadEuBPhdR*_O-Q~DGBs__U|f1~opNAIftJ+;{g^O*3Q!x1zg5Vk
> zQ3Z7N^6M?Bnb~J3$&Ca4j(5rUlv=3DIMvUA@L4H1^7qCQauStG5sx9yAgKHDVLYjx{5
> zM)&-C^|{ho8;7o|X13YZ<X`z}(h2M&QVnvt>;L#=3D1;E=3D4^mP*3Yh5E6#MJ4ShPe?f
> zIaOZ1nG#>3Bw+{0>z#$tLS=3DeP?X@1u$XB+=3Dd2)e){<~HqsTX-tXDm1dCO8Al&A~P&
> z3EQi_RVnB*^kl!EbJp9VXK7xvku)Yylyq?adqzFIJ#Ku${l(sFLY&;+_1DU0D7nCb
> z<Z=3Dr?>Ci`+wt~z$tO{RJOhYNIG~IGb8A5Bdp|)?I=3Dro;c>kbVE=3D*FkyXNr#XqqEc=
=3D
> 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%0D+<jUpqLJ9N~uA@(CgJkYa
> zC8>1)D&gmw9(OzFcF7qqzVMV5S(-EPN~;m?eY@<lwj{{ri9&GBJ*z@s0fELWz%+l=3D
> zRt$5a1Ma2Zv^9aw&~2~pfAB&nxK+*2n0*TKp{ZQ32NNfn!zAVPMJ-v1W%&tLMWU5?
> zRHeZodw}a|JX<7#+VsV;;KOE$cEg|zO*prrf|O*+Al#0hiA?=3D=3DElJYJ!s*YJq?`?D
> z{%<Z71vuu%Oh+OaqkmVNJ7~yWZU>x8+`hm<G(TasQ2%-S6nCjH2Fkt}xt<`7TK)+H
> z03B}ui$(JDT3(zg2<1e?%H#Ex1OR!RF|OTX3gP@A^XE!*EgW`FKXLno0_t4XN5%w4
> zz%jZ_&bH|N0S{g`Myz<;IlL{()C#8(@hh|vkoBf39RjDi+2HB@6mPk?xJG$uPzl$!
> z39x0S&)e5>F+ulcA4eeS|4H0QuvB~h@QlB5``6t+2oVD6Nm&(goNr)^vI(sIy}%ij
> zrEv?tdmD{u%L(Pc_s4qpGF%pW2@!nZ+93ZM?dARp_L9pVk-km4nrzxku4-g+oiVxL
> z(1egDvGVVuKkCV^?0FAMHew?o(&bp$=3DIvi48U?DfC{=3Dl+QGI@Nl=3DQv(R)AyYa2-=3D=
U
> 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
=3D?
> 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
W
> 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ĕQ9V&|D%J2`^I!=3DO~gE&-=3D!!Fzt}(cDfa
> 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
> E3U$4zUH||9
>
> literal 459695
> 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
l
> zHf%DNirgQVV)NB8=3DdbLU=3DRx%W@1wPkhR9x-IYc=3Dzg)Dpbr$!PMu%d2N=3D{fZ@L(6O=
<
> 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
=3D
> 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
O
> z=3D-NYrnjOEO=3DCX|TJG}hZ3a90nDH-Ps{MO)VrxY*yG%{O4ycnS>HJx>6{1X2gp=3DkDi
> zRmC|S4(o&$fUKrZryRV>NeJ7EMckv^k=3D@HQ_U}>iO+vUeD3)>e{BLm$t?*ieqD!CK
> z0c_0v#U!;yI<8bC&h)%1XFEf$!q&Gq%LG*ahloYBB1lgv0KzqkC#4~Vx`(>GWSS)<
> zn`y+5UVeX4yLSAih<DJiGmRo2ViE%tj7@Rue!O?+n!Um2Ix5Qw{xAYRT}{T&C^C>m
> za~ZJ?y<f?Cc4^<<*s`*3t=3DQkFSSH*$l@xauY&qp2Fsoc`+wmw>Bntl3Q6(<hxo=3DW+
> z!8^LuFrPQZz_s>xz)-f9Sj>gmuz*X#_Vi)zCQ3p4yf^B*veEmu-hdY6ZD@o&PZm3$
> zqBez#EG3v{gi9MbKL;hrnSRz)rONti7i*U5O)>hZvi^;b4_%FgmGI$feA4`VSglyV
> z#=3D5S^N}JeB6gQ1`<gl9-ceffjKekf1Ai)&{t%ZGjGZK)A#fkuJb@3xENvX2W2<kKW
> zI6&JcDlad7FnOvcpxL_-;zQ1~ne06{X^75jM@S#!>foO;HzTe^Hg2t@p2o7Yj)<9?
> zM|P7hbCEer@^30q1X7(BcRue;3!}u2QB2fO%L<!vC2~z`2YS@*yH8JSoQnabsyW7i
> z%@-SI9=3DBu_`qi+cA|T?2xyKKQI{Wx_t+j=3D;!@Kjivy=3D+MH}d!6*V$V0TtZ=3DOwKfS=
q
> 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
j
> z=3D@M{^`_5~^7r}<QKqRgO60B!~suMY*Dd*D7d#chS%?20MRw4Ce_~{e!Qi6mp*ae^u
> zNJZv}^W_P>*^$@b&j%6Lw(6xhYLnN1WFIV<TpuWD@&iC;^XQRGLNSkr^gnfbt1j0>
> zlYW7R{%it$%Mks%0RF=3DxA(l2gu+aOOil&z0y!xk(PbuTmPTr_L1OzT!Q8~(ct6DzH
> zhEJ4b^-22^3B&+Z1M!%35ho7@@xT>L3-}}%vfeB2?Xc9Z1|JD{TC%i)i=3Dac;VbG>8
> z&_OuhT}}z@W~GH_>#1hYWV>^VmaV@iI=3DmZsQmq%2CyGv?p9+1ONrL#hs4<^iWd;6$
> zHHV3aV%i1N#j&taq8=3DC~ej6b>n?szS^ZIg37JaMQq%#jhAz3>)_SdhzI_{k0a96`D
> z_{RsILfm?WV2pT~vH}kO99J1ntOfG1lmb1v@xjy?q{9>*F=3DoT8V@#pbbKbn)2t?{*
> zINlc`%-(R8tZa~>_~jbbBpe({16OfJTu!TlYFm#t@^Bp|!ViT9VDtXtaN${-G8!e_
> z6n8xoqB5zvu|nFM>vZUTdRlchfT=3D^6?~as<g6PFT$URbnZ_kV*Z=3D;>~kwVer^D4-A
> zHS%%sxeMOmN$MEw0lSsyF~qRph`MMh!Q9(%-6Wd#8017i<LD#{36wM%2^|D3F!{aQ
> zGWW_A7*ZeGJc9RDlS!FHZfm*_4&)^K8c_l_lcgPDG)jBoi{~QCAk{guKRW9v0=3D&A<
> zVT$qd9M9_65udqyhNv+^zM#}33gXAv`VQeQUdgIA0V|?yUD*7Ul9Gr1wNiYdB3Eow
> zMoPJxg!?@0(4DqXM9+EUhERGrN%n`o$%T9L15f`H;0m3TPamq;NR)>@Lrn=3D|)@~j*
> z-}-f}W@?%@FB^z#y7G;$yFAfJ7az?Xb^12X6#&XnuoOjW6#p@8uzzszPDBeLp(TGK
> zhquVNeO&@>qR<A?h!S<Vn``xz)6H})pC>O4!d!%cC*ge&#_QwMe+zAwNb@nq6PP!K
> zxiHewzQ!HqPi~(x-)luw@u$(c>ew-S>ne;sM~=3D%|jkS$v9Y*sozdpzGFbf{L&F&oY
> zPe$}hKc!`YPhMj>z<bsdbX{FHW@Kdae`Zf$CVweZk1xFHLPsU1cwbFb8Btq6Yd~1m
> zB7ZWMa%M8TMRe2ba+U6?<M>&Pd_M8Xaxc2<_y>aNQcf7qO!C#Ht;2>{_jxqU5>%@@
> z4n>GCf8B=3D{SBNw6ywX~L%+dXErqh;>)tSko#pv+k>%C%@N9UDy0kq7YEVEtEc7>^s
> zr-rJ`PEWi{jtug57G=3D_U6+j*=3D9eM^i?*sr>namQQEqIWCMLqQ{f@$x=3DhCnYf@=3DVY=
l
> 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
}OP
> zL>o^yuxh3(wQ>dGEm8E6xjp=3D;wK=3D{y6?x%3InN6$E{tO0VENr*E{bxuDL__9h5T0_
> zUwn|`BK?L^$P7T$3YlTvR(Rf!?_;OGu75f8`%gWlNb)K>@X}BFBE{q6;nWeq7(cGM
> zVB|94ba`%dWwo9vekpT64K#1x25CbDu|Y;YONOXf&Y>+*A}46oKd4(X4zJIRn&D91
> zl!~R@GI5%qqMz=3D=3DT5qBM1?<BKJB|;79rzZl7CtR2QBq*Q=3DEU+NZVz)YZO=3Dp-&-=
=3DJA
> z_i~7}g(p<Z$rsEZ;I~~tEInY75y4<xH$L|(0iytx)g7$}6zfsn32$|~3spBROz+h0
> zu`x)?MjhxZ?zD)s0^HY9A`u$r_IdYYY5}E0-uE6q+Y)0N>0TftuGO1w%tgqAW0<VJ
> z(&bJ2)^m`SUs12w8bEYpS&_N9wR5_`b7><0J2a17T1#2?Wj>s~R^*kk&8Jpx@K+1`
> z0wYkI*~IU;-k#1st^NTQLNQy{4{oa7Gm&mV+uf^mUQx_9%f{S5WTo8XVjPor?l9ED
> zXKeCvv#D<)_^18}-YS?5%%Kxe4Zpg}mu=3D=3DGn>M4m55geyB5O9lN2TeUC=3D?_?=3Dkfp=
n
> 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
U
> zs_v?Ar@s$wQli#C$$XkM1pq69PQ$lzfr9tis-H`9%C4m^?Hw!+*dMO4)(~-+YPAY}
> zNeL%7^3GalS6)_+^~Td}TWz~E{xk$fNI1q5Y`?j-S|f+3)|f;}qQtVSsyw=3DZl*i0Y
> ztN-{k*58wDrx!tddAem2)SJ1fyApzAuP{yKK3@-to2WZp{L=3Dwt{T{qe!LIR6cGF;w
> z6dJhj0lWg}2}E_S%rPX_*zVEib>ZL9d4Ea>0_j9Owx~%t?gpawN$0ZvJKi&RL;tgd
> zv1ccqpuGKdfa@k^H%N)ed%`hBk@G|P^M}=3Do#qxoFy>a-7ce6Oes&H!Lec;W}23JN^
> z6psKO(#7Y$gu`IPaLfO}=3D^=3DSJWNs;}29Q__$HfYz^j(K@4Y$wA-VM}vAnK-@M%Mc+
> zE528UrPz^8IfE)s$JEKJyv-dMkqLIY6RIaguF!;I3Emi`!adV8iiPD5&CpWt(zp4I
> zxzr_C8jeg)u`e|MzK|hgt_6wj6am75%HM&404*EXOg(G(23T+}^e(6+xLc`_+G6}V
> zLUu<mBTdDF^K2I#Sdn9X2|6VIf$zSer*?I3AlzE1wj0@OkTB`8R3^HAITRDjr<YnW
> zO2^aaX}n%0nJg9FFI4$CG^Bx)0{z|uYW~sH+O!0o&EuoMk+$-)pP`_x$XiZdC5?^^
> zqo*0NXZ+L%*ojwjiI(CZe1}4DvHgW2g<ASLEBAEM=3DIa+5kenV;%AxmNw9b7u@|JE1
> zDanAeq^66|1>DV61C)qSB^@P}sLoZ=3DnUf&UmG-T|5q>=3DEZgkA)y4M<37wDWvT6pKL
> z%?T$1t)biQj$bz%p@HJkmd5ee9Wq4#N|hiZ-4!02ARwlb;(btGEKIK1Spv3v#h-)w
> z$X{@0M*rI*hytj3ukE&c%0mT(M5v@sZs-l5m=3D9w;l;nQk4eUAt6GOev5oh`7ujMU(
> z5|w(~e*m}dNU$2b>`aL-%J8Fgv9Mm1ILC<a^9jC9Sih)6X;}@u;r&1`kx4ZUBxd}=3D
> zDYNeoiv5Y-{%S7r2BBcrUuHRW)mIx|#JZ@G(t{OGj_(2Dur)m~4yv-q-8Z;SJ7k@G
> z`8wO>GRNR&RyUsc^EnW8<f-27)TaxTxpor!8YLe-OxUhWvn4O!SFE>MH`Z&Bo*4%1
> zhl)XJD8r#I`QgA~qvHBc1f)&;X5>I!^^QxxTtx-ptq;&o%&7061h)f3&Qlk<Un{_f
> z_OlDrX%O`IwZ!j3??8-B%5RWG9<V0)FE7jjd-?gF+%RHVy1SbVAB4OI1vRSf@6tO*
> zb=3Dj{GDXeyZ#Iw6QO$-z-Wd0sb2BTlh#deG??U3O8hnHV>A~DR18i9LZAjXt-n=3D@2D
> zroM?i5Jhr5BSQOPidTAdM9{rA|Dp}jeiODkCV6Y>mAq1p03gMr;<?>6g%?`txZU;-
> z6Kwf8Yc&AfqnJ09Q)qGzePFFE19u;ZMUXxhQdxd9riK@PMO-_(Sy2hX>Jj1(7TS;G
> z_=3D?&%h^!sGij>Ga+;~IisMQVrC$h1R&>}8gnGhqloh9B`?dg2#R?F?oA`m=3DKjnJzt
> zFu__+yQAR=3Do5tydW=3D=3DZY)6c`+3v3dHj)`-4a<bfG*aVXYTLU)vjzVVO&){BBelIsF
> zSo&kiLvV4viIy0AkJc1c%Tqo;Sz52c%;gKg^Pwr9_W?$vdj38;M4|eVe2H*87<a&w
> zf2)7d1>HIV?7sj$6{e#&h7IeHpl)W{V)k+d<US=3Dj;W~-KXPF9t<j4HF$6CW7$^QV8
> zI6=3DDuRG>x?1{WBx)+6l)#e7X@Yq@yIc<*GyFA<mtmG2_n4b!E5B*)FfESY_H!`m{w
> z`G&vQAkH}*liVtlc)NQW%)Mn7G03-@+LDu`nHb4YmCg`e|8L}rF@U+k)H`Czb13%Z
> zQMoI`D!4^H8aZ0SWs{MLir%X9bL!+>I^pcO8pDk;Ni65Z_!6dIg_j3~C`Y&SC;TzZ
> za}L)TfrI`j=3D+tI@H!{^i2n++2u%eeEnDy-3m+x0coT~(>m-9wuN7Dq#t+ujRJM7Ez
> zPW^vXR6p7v=3Dx}*gVb|9OcIu*~G{d)gfXCkNNQjuBvFRTy^?Q_MQvXo*$k>BBr;bVu
> z65kB$4l)|@upCidcJ80^c^~`w?EpVw7mccvh2)`%7PiKf^qdS`(5_~U88+8f(2hpA
> zw$Lv^39U+;d3S{GmGCdf)7zt~d*oYsOpL}X?PfOMah_M@qA1RfHDw;s@H21KjDiEu
> zzqvI7w|khwM&V<acbY4(Xp(t}hrQPF74M}m@}ke(TzOM%7an;>|Kj)GZ$FRM6glIb
> z9@g#9qUTLdXJ}w=3DSB*Szo(JAlva#TJ4-J6t9^pe=3Deov&4CaHuk?c66dHL09I#DaYd
> z1025LqYiESO}scy^1OT=3DOO*(9v%B&DN9SVA_~sYK!PDoxy6<p~B2VMb_`ok*5qr45
> zaJx7Vz<X3R&go=3DZjxC21Fq4G{U^@zNyY!f5pwHC`?6$}GQh?7SVdUr(db_FeI_P+w
> zYIG`S&=3Da*>u--a;5N<+QE$0};S&B_{)DVL0C}W|%-8JPMiaNc7MKEBHU0P9zT0?a|
> zyt<V>Qz;~jXPw0_EN7_#DCT6&THZ(l;Pv;3aGNN-J?LiR$xJp!@BaN@q*xlZJoq@u
> zY0cBb<&hUKZ1%e{Vj+8FFdrTwaXE%H){f+|ulg>JFmOgwt3vZ|KE!5Y$PY@)Y=3DDC;
> z_eMIV<r;bcOZvLn%-}&XRaH#`>|@yNpida&v;;y(x>E*;5fG#5xdVZ42r4OBMmZEF
> zT3V=3D3SD;~@H#>(14pu}=3Dbu<76ngrNczZpkkvLmq6^+X&%1ZHfXvmHMtLn4_v^5=3D5F
> z@rV54Kl>}ul6RD@vldDzW|8HByS*MlR#7YY4VxzU-^2{Norts@(Ttm*GpJBtVjLY{
> z5n%Gu9}2IiHKBCU0_u=3DM2Fo}MWzEi1wh6#wwAU4#8XlEkW1sNO4UaYU&Nr_^G7NUj
> z0Kpcarv?!t{sTp^t9;!znX5c+Nbl<v9H|$(o5_6!;uL^6X9v{^GToH7Cu0H@x&1ZZ
> z%&5H*Lb;}`>mZ{pwavZpQx-yid>r-Ft8DN7qwCi${R-b~><OJ^gHgC)B((NXaT9ds
> zuUtyKTn4Kc|BXQwk;)UrXQOiMRi8nu!a8XKzE(1tddd!}Jk#w#Nzi}70Zx+~KC;|(
> zQ&H(V>oRWA7lkWfAH^R90ZI2i3<Q7eJUV?qG;OanPl^+D{42aPn*z7{1Ik}gtzcvL
> zgyb2I3?DhFC@X2X?Hj8WO_*5U=3DO9ayqX4QSfM8s)IIQg5tq^RKolADm{&A>fn(u$U
> zuxUHpU1=3D{YgI7ItK473I;zy6D2$AR4eR#TIwg7E})F50A>gX9K-fWPj8BH+1hC1;~
> z*1%9YqtK<3EbCl9tLT16?<3!xfn3Ri%&VwJ)0RDXvW6rw^tC*5gfQ9syUJxrZq9mV
> zKmgxe2`@<u5K_I%{?o<TB;onG44nc5ykx`xw`6D~UI!J;G4x{J5mz;%rcN^rLuI%_
> zk0w@?#=3DX&L1Q5*O3iS4)CqYYC$Wt3(LQ;niWa0UKR12(4(?kZ(^kcZDc7E{RVKn{y
> zAYUN5d}2OZ(BNzT#>2NY(((bdBaYkg54D61je;2FaG7a)S~%wuo!HgBwacUkex#a5
> zrQ^FjP2v|QLCza~r=3DsT7Q&E#kaAaE_kMmBzxoL+&Fu+6{z^&|;<=3D|4?=3D2gmH@t=3DY=
z
> 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
p
> z*Y5m~a-{@gZrZfqG1n`-O(sDsMPeG~9VFBLDWglCncF!{!WO+uc=3D0um9tE5#-&uNI
> zdAWGj5q{tMGFXK0y%=3DR-V1(5e+mFsKJ<RNG*`PC>%5$#pUFJU&g6dioUqKG?U|#fX
> zcSa3b{3(U0<9Asl{5V^$tWo~U$XbBw#2;Kr96qrBlqzR~LMI~@m3`GlLW;PmJjqz1
> z^b8)y#Bz1GAHlk`Tdd*kZEU7Jwf)O-4^YiID;KU^bqn%{oR5N7^sr3cv@PS~zuUv9
> z+Ool673aL%qS5iqRC4v#$3}11r-L;S<W5+ApBJ7jABM*qhy*+((=3DU_vA<=3Dl8RUY59
> z(FcbI?Z|)?>}=3D`A2?;^a`PcBLvqJ0?m>a#Bqmh&3+6jWPkf^j@BsJz|VOyTtAoChC
> z-&;@tpYa{?lW7+*32MWaIK)2t-}7eSMxt^Z_>rM(ADAlrL2$6^<!z!%X|Y*1)lcFs
> zB{IeT1nd3zBXhv!@NBxw0^sygvtwy+jpB|q)zrZyX{xJam_foJkw3~BH7T`@r-^!W
> zE#E_Zl=3DI6j#8y=3D20T}BhDRj`MK`NiJm#x>}LmTIKUk6N4z@*k0Fz;k)ZBdj_88iw%
> zI`QY<3Te9EYvrH0(=3DM*j5sds5*fqctvZ&e%6x@LS$O@O$q&Og4U?oAPTU7(Y2t~mC
> z`F5Z13JWGnkL(;8w{jzm>T)Vil3ZR1OnpWLHUFJm@txSlE~GY@zaZW+*+a_wx@HNY
> z@P=3DdB#|oCeH|+3^4v#VP{Rm|jqXKMmb9XV%csyw-=3Do}yEa0WbbnXt*-(saDN7e*)v
> z(4t�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£`VgOmV
> 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
n
> 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
R
> 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
$
> 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
=3D
> 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
O
> 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
`
> zIoCl&en;)IMr(A`C`s6*VvDC+>tHBlU?CRY5yEUX&kQ$iT(BX!u7%5E%sQB5dr?*D
> z(q04tc2w?TcP)9gGmcep<s5|W0=3DpVrCoL`&0J-PreA<X!wYN_Kz-b(6<Vea(Jkpli
> z@bBq5D8px~vBuh1mnL^-&*?!cW->*Vy8tqRDOU9z@&9ak=3D$ogx;t)9<U8bCMQm>!?
> zDUze%mX}|r0OfuUs(U)0n-m%G?XP7>@ka6R_Qge~Be#)gESr!P>a9W*j}k%(D73N=3D
> z$*BX-b7HJm@Be=3D<d|g7ls;Q)2fG8$?$%Ry{)PB;@T7mk3nCO~Y-Q2%H3|V}%FY?qn
> zdoF@Auhej;ZiHukhG7qCjYr?eETrr!=3DuE$~zsUhRG~bE{fv{MxkVuhffkMUpSH)wd
> zd#h%uFPW7Jb>m&2_7jW80R~(4oZbozKil1$U+DW_SqPwFzRr_hiqATsc!s2>q3T~%
> zI4fr@6N~FLvOf4Y%9MH7iEnVEG%;AHdQClg|H#aMqC*}9&r(iBkK(>B=3D1@j~cC!Tw
> z;T-<>iF=3D;~zX-)lYYN}Y9x-OM)j$||%QM=3DXvRlfOt{FDmW3iPfZ1nfxFalxIukK&u
> ziO{zKbxnJ9li_P$JgM-!)USPh#p0Ph)Kks^I$yZkb*dZL1z7=3D?c6b3kYYnh;tOg{T
> zbwUVJd;VS>shQ7!2vE#nyAARcYXOH|k7uGdD!lGVT2b|&Df2xIjKwJNOF^nf(ZMzD
> zEkPsrs0=3DeFZ1gB&o#*}&SRO{_^PG@S>9LrLZaEn=3D3P$;em$50ov%Y!YJ}(hx;#v>b
> z_sNzce=3D0D8-e1q7EA2#R)IKLAK}957gO1EpAsFO}ousoEQBcrOA)k74$`9OrMm;<h
> zT}_)d?fD~4w|y_f0~>ypQ<ygTyGoc5l6UK1mKSc*jlq>GHX2ii956>}QkYoAarVeo
> z?E@M)%gK+xduo?-LJzYyu4}in$0&c7ZsYufv6=3D%S^ak^RP)dkP0ho#lD{(TQWY7hI
> z0Zk_(R5&U84ApPAO43$%gE7k9+8j+mc79)@B8b`Scb$jI0XP5JGW(02aM53<^(foS
> z>_5i`TuUXsqGN-EH8>iS86VV3gejc8_$E$u&SlkTDN1v2k;|!1LkBpRzZy;XxX0KL
> zia+97_$&BcZmfhFG>58VFx<S6nw9(9GO!ekDgP`kA-qoK%r?pV+VjkqYMJPX=3Du}Ai
> zV?1(2Pah4kLAPAu-lv+%R1^<Pb00DvHKiJ=3DVfK40)ug_Fqx!oS>hK;rv0)xOl;B4a
> z7Nb0H|2Qgq$q{jSf<xzUrK=3DzeWrB<Zg?ek6cYT&ysp39l(l?GQaiLy{F-Xf<28=3DHD
> zQ}j(3sNSJbIyDoz1$q=3DY*eZs9`R2F>AEgJqnBZvQPFS9*ES+vjIB5ZG&7eIK_XO_D
> zlFKFA(x;3$Z_1GgT+&8$e9^hb&1P=3D~Z1AOK&nKkhHm?!5Td6Nu0R)3@;^F}7bMIMD
> zj|`Yas*q?yTxiL3llG6fWR0xN5ZZ*!t{}>>u$<D^=3DDX!_Vr_CPkTA6EDyRurWx`2}
> z$&y+Y#O5d4YNRaa3}D7$p-RqpVV9Z2cG4DKVcK=3DL%@$(JR~!E0${q0(va0s2HXCrZ
> zr>&-fB<`1NKzFdYgx``l#Gjelx$>Dv6Xao$Ca(sIn#_gjBb%LN4ubjPw>p4;@N?zo
> z{A)*K1IROpv^oF0rWqx#)!~n;J#acvn>l=3DBq?{Vpi@KWF7OC@Wf4-{cJXeu)WjxL-
> z6g^>x6`+Z$CW-Cz4N`Q4mUb^bI-clhJB~*WIh0s`BBxr6iGK=3Du3Sq4g-g>V=3D0-;)b
> zrvwjO%30nQYYsG@+>6x4)LG9kbxZgtFn)`Z#UTM6)g3I23;J_k7<skc(*Bdyq((lX
> zxKC6-Su&>)pFqj+0PI_=3D<xKmTZ6;VLiQ8_&q?(?HA=3Dq<)*xXD(b;3lTb7`t&S;T!q
> zG+p?74G)?pp4Jc7T%k&TCu+`8zCYd5@TJg$a<jENBV|pKIK$FqxP(ff@i6gurRSAe
> zyIW}kUU`%G2oEa9fW>j)t<T#N&no8DE)jB#7Le%sGRq$Av&aINu8Va(^$m$oSfc@D
> zAC#?Mt&RilEP%OfrGfD;CAb1fFt5d%R3ZVUw+C>qJmGa9EG(YIf{<kYSo4q56s1i^
> z6nr`-Hgvo4SvoTGa5+EQ(tI%cvoraf15mnfd7ufDn?)uR(V8UoCHu!sYiRZ8qPv(o
> zz@z{74Rj_RKN?5{CE2&SVcWjRew^w)((&h_2-?*WSYk1M>|y$|LRPPxX>c1I?HK`K
> zU1UwGJfo#I#RZ&&2)mvaUtzO-zCh*GGVb!yogiSP%MxKNyVn?S-J2zlQ2Y2_Nzi?r
> zT*I$%r?+TVF*{b(&w?YI_F<}J4U2ZC!Djc^6~}5>w48m~&-r+}!cu~LB{-N-Wl;<g
> zwpWx+7qhf0l~L<u^?zM6gL+_sgc^oNZza%|TIXa*@Keq7$5CA_Yat_jcrjvrL@UM5
> z(A?j%_>PZV8^y8s&4_-2y|FW)Px1f7vX@(gL#x)EiI`N5X?Q4Lq9l~aATsQ73_{@s
> zJ!I_q_)$^vx@J{Zx(5c0*jlz$2~r7XJexfc$7R8QlUTt_%m8ahxg8SNTjg^MAB<@J
> z?`z%Wk78(I70b&S2H-0l`H7e?o3^=3Di(LPfjll>TgsU9jkgKTKolw`<Ob3T#?V<4Dp
> z^&00d2^RC;lr%wM-$4B^KU27q<H^O<3Qg-5Ujw+S{BD<(S|(li1>@@`;YGBfyQ(&4
> zu0w&Y*U)d6rIoH@L9zpr2J`f%TpWC;@I2Ot^SI0ylnu6Wi^j8%zhi&?@pT5PwX-zH
> z@gS;&c&F9sr_?f6HIN3x(Rr-oz}P%@14cWVjJxt>y9}#_w;Pv6@&RBjdpc?)Kv@Lp
> zRI5Y__N3f2o4bsNv;UFfFQ1l07$XePu=3D^2F*}vr4cty?c0Iof*8ro{4Guze?7L+5#
> z?>pFsYW#m-+cyv&;PrG%5lGP;Q<AGpZ>NK+$$yN0Zi3|be14;D?e7diT^54;yf=3DP>
> zpwT;&>X6)x=3D*)7Yr|Wv0n}8vjo&}h&9AU$PnBHbCg?uAbHe;_nXJ~txrKFeTSCsED
> z6m@gL3NhL9a%xNa^GLXw|BylV!)G{)dxvF%*#nU;PAu0t(?D4+%63J1W<s-#llvy6
> za(mh${4)?Qjir6wDqDf7{1p&LKtBR?Uy~y53F4X}TH{r9Tv1u6<$8qD`3N%MJwZ@>
> zaz*J}$(j^+cYW0X&ZAA+M>86lA7Zr#&+3if2U}1%aoYjsR><2j!+W21-9;sL%ky&`
> zu^<6k$g{ts3<f?w5P5Am-(MZ$zdU100e#~YtdudSe_$G42;GPdIi?C$slV1reI8p9
> zsp@TwH;w=3Da^8tynydQ8Pg+j%41LCW7LJ13lie>}@Tr@M=3Dv~Zv(<P0j<tw2H2u%Czy
> ziRbr*>)9g@=3DUOLuI@l*7BY_a+h=3DUfBKRJYhZw>Ay4C0psj4++YzbAs5RD6Z$cOzaA
> zyj&=3DzPY<M7p97`LABTxg7N@n!S{Isx8U1Sl$BA5k%`VQ}Ma!q81j4iXj7D<NV5j50
> zbJBnf%6e=3DXXO@=3Dbv!$+Pd~0VVvMp;jWL~C`csgfl?YHS;<idii$ANO1s$U3Mx|A%P
> z9YYBR+0$gW%9BT^fFVY{O)CCgXQojt5dm`lGH_o0T75CbnGuuzvyG{<7cvv&M4NQ9
> z-xm$Wk!@GFxHv)P6&)7!xTe(A=3D<g50foFZ?TRlLyuhJ7Kf0ja0(Ksrc@vuSjZ^{W*
> zj~aeKcFUECsw-H!LMnQva-l=3Dmxrcz^GBXBOPDGvf#)^t)?=3DC6X7%FOP=3DGNU4`7m38
> z?9kD>&nT`@8RT&$zt?Ji`Da!f-bq(>9yjJnH?Mx6(e5la4$?vnhUKlGsdc`Q(vdTn
> zK-x*^)l)0Yc||giqat+moQx<tgk4H<Xzv{CkT3Bp9_k=3D=3Dc0|e<R5o0lnZEtUnLyvd
> z0L?VB<ZAAd+ck12!}f*}=3Dlo)$vc_|;J{NbP(sAaL1IM5Pa`_g@>0)FSiuVqoenidd
> z`pi?19>m%=3Dwl2=3DHqxVb$vH=3DlW9GTv#EJrqa#h4~T&iP(%)d`9F0Q@$qP)*AKcA$a7
> z{6@#!2<Z|M;;>&>u87*OX*gQvmSZvA5E1+pe;~7v%K`9;o%Zhmt;M0OS)P%~gMz*O
> z5m$Ff;30It<<+|$hOY|8CC195zU>~>=3D|w1mS%)q`R02Kz-Hg1EEyH&Ecpwhw)(8Re
> zmAE?FyN<YGt{A0sVlv-$j!C^Pai||QdF3W4Q29o9HMKI?i!+_aqKk6P__v)|tm2Bw
> z4AdzAqv`<{f;c#w9w9VoI9dUfOgO3(c)>b0!d~&jZG`e2a&FaHAx5e|o(l8KVCB%G
> z15!!sRS8t|j9SFDfk#RBLu2O0myg6^@<bofg?wJyo@3?15;fZ9njN?0-6szb78ki%
> z51l35=3D4mjm1gaOTga!7AWKac!j2G94qo$NBPp4&$7T=3De=3DFKAjqyr7$Hm9FM=3DwA1)=
P
> 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
>K2
> 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
k
> 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
@
> zLq)zzaDZzcJv@7?6Miy&{EoS1<P+j}Mh?)!L=3D+v0*Th32?Zp){bR>F`0N|HHYQD69
> zD8%#C4J0wO)i;Hkb}nPzwH7KQaNt338b4RRU!d!e36rAviLv{STBgyR;i)VUgB)u{
> zjp$Hd04}tc3(O4*lo2<p7eW7%bN<xtzq9&}6r0KpqvuJ9!&?qrCV>~9ZA|;`&e{Xc
> zXE~7G^IUPL^@30JN-I0H$KX$T-K^W(cu*J7X|rq+stVC|412%;#^ITSZernl+<jH%
> z)qgaIg8dcAr-A0IH(_A@BUQZ4`1jJu`K*$bLzOSGG;q!^q}&Z+i=3D~52y<i_|+1X{;
> z`uaiS(lNzhotnAj8MrKA0g3T2Kz~EfK`fhp*X}oF&f+A^!ZTa6(045_4Q+;n9D69h
> z_!YF1Yfmm(L+yjD1TLP;P@<qVr32wTeN~YQ-sp9f5=3D0Bp(ftAyQBLj`#6qEtnRI>B
> z8RubT=3D&9;pkOf02VYn+AY*a1YVmotxTo@Q=3D>q*~qyt6SJn-O9+JVxgOw~A{M2IQc9
> zD^O=3Dv8=3D4Uap|)td>Yo?FUEn3caGnAeU{lN&tX_&)cKP2%UejMbX0X5Jpy_+8C56ve
> zIF%b8i6bc0ip~jP-63QOksAa%+$D4gp{9{1W6uTV?3<hHRI8tOM?O-va1{VkPP0Sm
> z17M1Yske#`tZOH9Wp*YkUMT8tKJ2n2`s`;`(TFLkq)(>KW%_p$vYQDr{riIdx`$N|
> z(P=3DCDniXG(TwZNtB)|);Lz<49;y|yk0m8@eM1<N~4fNm}W=3DWJSVtUxny;Avm4C*98
> zFO^nArQA!gTHn=3Dr$mMIpNEW2gGN?dtzB}e34?e2Cv}^vXunQTu-4hYAxOXc*s?cJh
> z=3D*d;(Hi`~qw|d!=3DW#$=3DEIT17)ys#@6sg_x;<$knCA`xM?iC6ME<KM|n4|o_XI=3DKg=
<
> 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
=3D
> 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
;
> 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
=3D
> zAGqVrcIDF;{qS_L|6tWIuD9ukHc9;W=3Dbv^GH?#xWuP91;@_N@lr}L_^h9GIx%{F}e
> zD`9%IJTKI}sJsvm_l`cYcK~oC`n>|^tzKEr(WT>*cDr=3DT5%zUX9Xf7umK>_kJtI33
> zei2l7$3-JM!wU{+mK&pL3c2S;QVLLU6FBTPmz@UI!TA0YCObiY&WwJIFIvD%THqyg
> z`sbKt0xQi#D<TsF6EPjz6zRYD5C?~7(2XLM<n;TtAxNk-`<0)6;{3h$zvi978V%QQ
> z0hAW0JDxrqgTF7yJ&7n@pqWNcQgDf*`Jj%!gffCww9XHwzsfB9V#F|iMOf5+-kgy>
> zni>%aLbXBYbV)Qy2SiL;4Yr>h9X$BT9&U~-Xlwt&xdZi9M;`}{^V8V%`wVQm?*#3(
> zE|qVv^ObCzW;L%RHaVdRtWB|ogbN0YU|I-zf`?w{&6}wOs3kbXQ(ztA+@oxi4+}ct
> z*w`i=3DAzyB|@yFzv3<J(Mj=3D9Y#h&$(Z;3*f|G)@LOuEVLLbM5uPIBi11?z=3DmYI?PFU
> zzqG<IvIGI?wI!R`WkJ?GJi&hfGI8C^Ubhf1%?zc1xAi0>%MD;`Dck<_iN~*Z_T^<k
> z>zadtg9R}jWI?=3DoP|ZNxlyZ-H#jd9A+OnNy57#?+aADnd+6Q(yylW^KHt2a%C{*81
> z2njQFo))#}yeN5{E`<<{c`#$-o16|{gNxCXki<p(y?z>t>(_QF&6LyCD+6$PbZjo`
> zvXT<4qvNh5+}fJjoCXap;C)1gpvft&GZALF`bW7ZEq)UXq^>o%>9}C|><t@cF|=3D}3
> z<2?mOZ~Rl6SL5kzY$mDhB(a1G^68f!w@Rf2o)JBL0oU3(?<gGBIe<!^9Q?1O`Qyg_
> zE@zP#KK%y}%dUft*Rdj|Kx$&ZLOb?JcDukkYiT||{0c?w^Zl$soHydxSZk%AsEVcu
> z&*+`t31>St2^UN~ybcq$9FLk*QeQFiw2YcyO&L;(Ni49g5TZ*kzQOy)+~okFMPiHK
> zbTf%c&vp~(B)9ILrf6KfBKOg@=3DXF#&GL{%Z$-N^L7M|h@-KntbGQioIa-%+Z$}8nC
> zcP<4!_YqU5mScx<kDw6BWZS0~O#i$#@o&!S{lg#cQJhHakTVafaOZ;T;0(Nqaca9)
> zQJEbUGN^Q3M=3DfyGAj1;Na4;Wgt<p=3D5;{IWb^$*qk2|wqjXoCbIt}vPB2`ixYC#(E5
> z!DFF%=3DmJIWSeua*X`E;G6}*&aXD@D!qsbi2?pALtT>tGdy;*!`l($!n`5sp56tC|g
> zh><B)mp5kUTmkCKp(-`XtURm73qoLH9>d%4cbjO}ApVdt@rjSvoH;ClY`(b~CrhX{
> zeFI_UEq?Ofo$!C;sD-{_6xY9<7x5<*_L@PS`0_VvD%_+`z>Y&h9SiVYNbfstEDem$
> zAocpQO5PGdNHulgzU3$BeOG~`gHES(kaYhM>|O+xSAZ-Qn#VTyY5)IgG<QS@NE{@M
> zh~;{0(83FY-fB+tgoQ^xoOX**>w#MjPwC94ES|@#(HF_ZpjL}eLsSQ#G~P^+8dGCE
> zen#w}3$_cw0~tcQu?7O?tA*r^R)~h(6aijW8XBdR(Wi!VFw^5i+_(1P1agWRBP3T_
> z!AWEp5e~q7gscDrGfBz?Mp$RW15o*qkOQ1(n-lH^fLk}1Drd@{FD3>6-6nxz;e`Q}
> zp>2iB8_p~k5x<<3$<Zpd|CZ$Hto;tGqNUCS^*wB0%Xw4fev{gsb)qA@dVb7`8@#=3DM
> zukFi-GiHAP4gBv9YT-3CSP282KxN35hUQPBHB5eaC=3Dl_AHv10%f?u(y$C^)-pr`%8
> zEiI9&`jKjWHYew}=3D+aPmi`{?JRK!aXfG2{u6|*m-MV?L0p|Q;J!*e_R9aTJ@Zz7{G
> zJMlM@4Py8?$dNMf2J2$rMqlzIm3qUCVc_UxX4y%Lla3+8+OV5-zDE5O*A9L-b{2ZM
> zZdhuE_gc@ATT|Ln<m8Y`-*lvrb$6LG>&b>E%B7*)<ksS&TL*#})y^2V{RU%F&9pzR
> z<o2bss4?;fZvXo%*;U<sPgqL~2a9ih#Q>yGC|!I))whviGXvI-(?2;**T5+Rh^kJP
> z%?+K62R_jkkXVUocjH8u!7&xBYRvJe-2ccBXh9hQ0@G><88gC%O4&TuNLMNy=3Duw;L
> z*-d8y27@Upozd$U97$?{cCebqe)A$lD%1KiUNKF;V`P>TK#%R+TjpIR7&*Jb4_GCn
> zyNW58*z)kJ2p<km^Qa5(iXKmZnEMq<6V4|9pvmh2<!8Nm+Iwv80^8DK2l>H5<j5M6
> z>hDcT3%|F5-66z@kkcBQ3FWvzI_7?i=3DeDKCbcUQJ<)6L(VsAG57-=3D#?O8$ImL`zRi
> zPZ2a!@x`JY7sdF>cVJal$fkb1#GoifJ@Tbg`n4?dTWs&K_GYUlzi61%c+nD`ta>;`
> z<G84GplAAxl`8!?k18=3DPxJ@tLBi2(>8G5VXa2qAiw$u@tH~>3p8H9X)wUtxaf>6qM
> zS7_6iF(cA7{98(Hu`-KF4KbE~b=3DPgcE|A^6Co!aSFA!l`BHiPgr-F989%~DuI8^){
> zpR}lZW#t)nE93r^sJOGVCYys4tBQebR|{at;(4?&kFB^OjMa(XDBkoawBIr*XoJ}l
> znuO7C2drYpf`*wMW#lUG63&Of+IxdU&bGM)JDRx+-?nId4sCH}kuDL}%;LN_<&rj<
> zg3S$wEl}4?>VmM~R=3DfxZDjLP83v^n^Kj`@KUa1<nbz&y+^1aSKCSqnDB#V=3Dgp{ANd
> zYrb?*=3Ds4!0L9IiBY6x1LyMHQXlOzVB`h^Jo+5VeuQK5i>NvXk`oMI5e9KuU13OlI$
> zfjg_>)wW_KO#OvjJd1Uw`%49vSULt<IQ*T?qo&_HL85kvqBRCgpOz9Hr~vSVg(Vod
> zKqAqG{H%hN>S&GijTuQOs^Kv+ZVaNFK72vG$n0(Y0QOc$CG!=3D02|;GKp4c@4(t!OX
> zVO@ar1NAwVYM%!XFzzh6lahtB_8^G&$>=3Dda_o+nv@e}PB!@^v*ROLAz5?24&H?A=3D)
> z*P$##rai&@uDv~7_<EmpxiIEIsc&f7C8EaCq^2E?KB!<`5JmV5_PVQEhZX{T=3D?X?L
> zgdn%_qC0#cZ5c=3D~QJrAU*OoMe%UieR8^lh($nLUoTo{F^&0;_(r#eJ90z@GXcP_ju
> z^{<PAQ+xbzIf(|aHzl3ocV!DtuhpfS-JBAEU$v6~O)d1PU4~b}1AC<AwtR;{mdklr
> zNw*^PRv0F-UhOQ9$MBKlW!P*perX-`V&(dNW8|~>z)gL^aC<MFJmD4)!$*j-xY%*i
> zfZT83kUb^-G2y${**!-XJRkz!{sqbskg>7ZNOutU4ArL*<`b6&QliuAY)RFe<`FO{
> z3Md}F$Sc~6mKR7<yMgvy6e76`LEe3g45;ECGQ&@gj#z&oS#ch=3DmT^LnN!3Ac1Jzq)
> z4hx`aNG-lkIiqsCRdm5%#m=3D-<1JT{(N)9AzNHpWZFiY>M1~ODrjFXpvY7ArLVwg#V
> zU&*mYZ#9Eto)vZNS~(iVC)eIyM4>dc(%q*N&yzvAEH;ZSNiWqHL6bEbPiSg(5~j2T
> z%m&gy75P6Rj44?%*R^rw+G;&8l>T7VBKq>~a;F%p3Q9U}p<NRhh7qXqRq&5aM=3Do*>
> zJ+(S?uE&)-f)C$?)`bx%!j3P#kNHX;a+8k#W_qgrfI?uDgi4bfc>?y1k+a0KCaZWt
> zZF<cHtfTwr-)}m49HUj|E!D5>^T5&%tJ<c+&A7x`LB9{Lp2ZQJ=3D+GE-^H>(V{xGjW
> z=3DhQ&XAH>Y~0+U-yOXm7(S>qvKsg?&tei_?D&6;Ax&cb(WE_9$^5bW07Y2SvB9Q>EN
> zrkb;Q6>*RmM>!dwd&_y0n^VE=3D@@vkPsLnez+byshY7A)4)NQ@FKR4kB_d3*+lG{S_
> z&OF3~Lh*&A^gE=3DCg^DcH3m_3UE7X-MPZb1U^O<FUkaNQ!IqdO5qNu&KYpC5>!L(2?
> zu*CL9`k8)$iKGQ1U%(ondP=3Dbl{tK_`E(SG2K$aJFY*(=3DoPOP-RWk`~RUnw1zxNF;J
> zC7iPXo*jQa)U&Z!OK@v@jMw5O>4om&IqwZ-nbritk6Vm%EMc{nxSE4f30^Wfv_Sx-
> zyG2jaWrge<;)p)wKnnqre@#d-iFYMmhgf)BV(qI+GJjRzEOGjQ)lQ4Ws!<HEv%lVS
> z5-Uld|AZiI51=3DvNQIY(hg$kEMH|O-6!`Tr)w=3Dn?Rf`a4!!8d(l1F4{k*EG<9qHBYa
> zi|+pi6_V^5gC@Te3NnPPo4sqA^hInuU}bc8gYiB5IU$f-jB21KecBiN_NGqU+VGvT
> zD@Dau7RJziPY1JFo7cjr^qD6clG4>>*^L#85t#3`oxGITCfr2uRFdR<PhMlgS|_`!
> z@R%sK+jTRomhcXkl$LQCftEJh$y!O_#p=3D<Cmx<#~3XpRF<Nkxgy)5~}NZArugFA1$
> zU+1E1K_ZvlMULW4ZISn~*0(i+D@8EsCo%U~ri9RZed25aTDNLySzlOn-LR#$qvMpz
> z?B3z2Z!SUWot2$sa?fGtfYG@Y?!`pqav(|!K1Ld8Tlo(wDgg1gKpF0>#DE(^K(A&k
> zswm74yf<N-g>R(xKjKQ&T5RW=3D!&;J_+vR@nVg#=3Dy1#ZJAe7f@hmk@4;q?TZoMZ&*X
> znN;s<`c9H&UMoNmuZ7#Wm8t|W=3D`q`AiPgVgd2{TpL~Sxho_as@CPtfHmw4xJh0iD6
> z%4J7RATpN1uYrA9H|zJN1`Ifcm*o@D#Yd9|nPX|+;cvtylk^t)NOd9CNm+$y(=3D*m0
> zb?Ff?V@&>f2t`}i=3DBNaz)u-0Kh5QIvgupO<6n+nt;5d=3D|PxOna*u2%<tQg4~X-a(z
> z*TBZ0lgsE}Y?};_bmlcy=3DDEV4UVR_iW`^A4Zip>?5MjCb57ExRS1)Q<)0@9oFz{Gd
> z^F`4Ng++AmG~3|7qbOuImN4_6gW0~;fcKw(N({lz#}iC@@hlH@Q*XCjyVH{tG@r!$
> zn=3Dxdmg4z7i*qBP@Q1U(L(Fo9`c#>Mp(L;ZduG(X>v0P?iN-aEk_B{yK|JC&T+!_hN
> zekLRZ2z;G&8qYcw`^CTQIsOm6nCe>~1Rq>&v>-T=3Dsi;u40Ea+zcal<w8esq=3DbPM}Y
> z4#}9JU_0S4C3g*Jn}y^iI;$xw4kQ~HpFu9k16s=3DlYm7`QF@Pn{7G}1g?SRRlm^pQ?
> z6)w!Fj2jP-z7AAJBVBracd-O@<dH-<M4UGvE?Hg2u+*6w;_+42oPqJvDWRO7;veG+
> z3&##B`H>;8nL(hPkPvagnwoiH;whtN=3DZv7q*9`KeGR+xkOc^{ay|CWIIy)f0S!)62
> zUgy0@KYzm6t*h=3DIVeNF1bIu-hAjCU9ey?Tr8pK+9U2i{=3D9Cpaqz=3D?_lT9EM7UtcO3
> z^dtC2V$R8%CqfuYt|1Q|yK7ZD4B`m`bWBGV37NBaF0Ih#YcZpA9L&It;KKB!rv9Y6
> z*IErn!Xr$(`e!~6JoI+{{5JmI66ztP-9Nx&|F8@UOBG?qf=3DUg}m@uL}I}0KRje}@Z
> z9heUmp{dY@RVh{Ql#&#tb>2Mam;*{p@(PJW+cA@RHEx`x{jabre|vCdygo_lDNQz%
> z!Nso;)b6`bnfrkgA~K+}llQS77FWhV_KA%uqu}FJ;=3DZTfVNn}f2Od@U5qje+wSffs
> zLjchpz}$hM0$LHg^Og!qmG6h%xnvFaPMV`t&VU^?`4BXP^b{8kY92PDwZ{?neX}ui
> z);~jo?zT+dY#T|;6ZE>N-)b}}CTUfK;kzQ99GVcV%i`T1;YJ!2YYh`&ii0KzA+D5-
> z7MOdUxM3KoA3%|yUWBi71G{fLGZwfQN~EKI%kpbal$&Ks1c!}W-_SG(GRqp;;cbW#
> zz;IE-c1}|)z8v-2IioMM1F&}mC5WPlP_m^>;D7Hq|3&3_$=3DUL?L7S$~s1VHip$%{&
> zu@yJNZwmxKjN;abKs)x^pMWVr=3DIpkJ2zJC+9ZpbCdz%~-CbFrBY9eI1;iAxfSj`g8
> zzN@9zUULgv^EJ*#Da8QL*GJ37XjjsjMEBu6JHouSIddjFrsLWc3?PHrpNAj)<^Een
> zR;`x~XsBH_2G*b>i{)w5n{ay}kMHv1#88guTACTDwSbRnyz*5DsS?ovqPDc-Ny>I%
> zWwC8CGP=3Dyi8HL=3D@V=3D%hqAw>V6m|-CG$Pr~p`9F8MSB0^H4?)9bnmvwS%e_ULQG7dI
> z*1`%y)x$pUVbBo$@5cv^eR62Iqm^aK3=3D;KgF{*<RkZYFag44%4o-Ba<>wJ_@%})A<
> zWUuCdDuH6JqSY8(b34_eG%6#>fmMksbvb4LgvmxSC{)XVQs8~-epqhNW*{Bj+Y4|;
> z53x}&em$yL7<EPM;%y{KXc&aQMwz5y)eNHT_7AT3Dha>|$@WqXal43tKRgX`$mMVF
> zySmhCP7Vdo47T2wZ>KUA!*S(zfAa0q4;QB2vmacHa1<(WQgKVa#N2w`nt0zp6E?-e
> zb7WRUa~55sHj-rSOv5j#&nP?JvuJwD7|l%>FIPu@x=3DWA0wojTtT-0?%UU0XYvfL8b
> zYDu4;Ov!UNLWOtCydAnbn3FVVh9KyjAf?8Cskp%8;O)99h=3DbBeNI;!?Kc=3DV9%7|2&
> zH_25tBoj>k=3DyqPX1zEDqy7~10cSs8E3fVo14Y0sHbmqfs^l9(Dr;U^W?jT&-u}bpp
> z3!lbb!wuQfZN)H{DUjHWMTB;YFyGARD7sCU0_J}_8da{7UjICDnS`?0&jV9u*c4v4
> z2qRDkq}76h_*63$CQ90v@|GH2=3DtRt8bhIK`b!c+CI9;tT5ubp=3Dde@fs=3DI=3Dv*616d=
M
> z!iJ1z$<F<Sg8NJHct|SM_qTT*k1Qh<E>c5>5c<YEpoOVC*GqNod*LE(#+5t1?t26i
> zayQk}ed}G+Z7Dwqyd*pG_;g{&doB@`4wuU@O@W10SPvV9^FHLM#+H{IS<Siv&7JQE
> z`=3D>9&!rGraWX)Xl>N3@o<3}hJ*XsaR2AY(>ieqmzWuAMCs_ki3`S893FV`$!D0aW!
> z!)9ns9_~-Zy%=3DR)4BOOqhzFPEXBk68=3DhwzBIb$-w<ei$;cfLMB)o@(u?U>SCvY8w+
> zSERQUTXNFpJ<Er;ce8y<SNrcgNmejAarH+NB8XVC_K{z{pR@Zpuq~%3k%?WUd>Vuj
> z+SEVJ9Dz)YP(Oa5$dXr|WX+Skl^$O`$p!o#{%ZjKhE$v#`gy?aLM9bC-1?uAF=3DC=3DT
> zw0f6i<NQVc5}m!)Mi9>cFz%jKkmO6cD@2NzK10Z2OO-)n28+|2i`0}^`T(z)DAfa;
> zVI{gI9Et?sG~I^BhYg(#GEu3020>dXP1fTk_BRv=3Dm{FTK4BVQO1%w#=3DI}eTT8Xc-!
> zn`0P65nRf>WPwOeebR({7LZ}qC7m%rj5bDe6G2}}5wUY-H7~tP4o>j)h_>=3D;dhzQW
> z%<+htIvD*2%B%`tHTT<0v+~9EZdD8f-Xq56uSoljOT50K_kb;0_9wMr=3DSTZO^Diuw
> z7iQ{Wl4E!(R6`OD?}wqPf^$K%{M8KK#Afa`Uf721N5AYI{-c>W6YOLY!80jqE2knG
> zd}d=3Ds$NE{OPn4TKLr6%F2>H`xMT@F^z>+<ai52=3DR&hWvYA<}trwd7W!fRX?T%olW8
> zNN1Qu4-v&?XsH;s1($vqxCa)6hww|}o!t6OgkW>r)7GB}m=3DZdP*0&T7AhQG7nupE8
> zngH=3Dw=3DK9bBWXP|9t<2N~PYirup7LPaX=3Dt$H=3DfutqL-TLjm+-^QMXJ<q#W)If*Lnt=
w
> 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
r
> zpHp}jq_+&%G^ZWqlo-%J*XRt3O05D9yUL|9Rorph$PDm)GaY5rMyL2Z(6-x*qFf;U
> zvgO{GxZnseLd563$n-mU7(OIy{1wNhO+2tDF|435dg!}eVqX3*Sk8L=3DU-fI^HC=3DAa
> zTsRpIf{fjpgcVJ1>8djExD0qx!`#F%VD=3D!|BQNXTY}F!WGH8;UxC*V;?yGE@KPVn?
> zljbbdHmSl(=3D>cez<4pM^!jMX8bsiR4f{fPJ`t}fPQ4mZPkOP|?d0=3D2rMbWABhIffR
> z@@C*Yx)7H{Z6?b7Gv#$~_CgSGDp-^vuNx)hbCAK+gL#o-ubN8VS(C6eb2GKw0_hoE
> zckrC&TBmBuvijCDvI*5x>kmrMo)qg8w}9FOjduPA+p#Rq8cbv_u0y^X-By?dddN(S
> zhz0VkjCfG=3DMq}`ru7k`DgLMK^*Rg-R(oxg#dMp^>ob>E|cTa)JXj7|L1IHYfHeL*L
> zJyF|CDgaeD5x?$*b7A9T8%CmppXD0Rw%-*cVll-@?$oD>5ffH9TgY6p8`rrIxTrfC
> zW`Q5$XUKmxc2Og<T6)crhv$tI5K6hk@4a_~0a_KZ{@k9BK-$?+bu{q&6-Y0Qn<(?p
> zFk)000FJ3lK8)eEAiy_W12Bl!HMr0kK4Cqo=3D}4;3_A-}Bc`O)ELasnGk67-?^C$0`
> z7L9a+yoP!iQd3CVMymsbgMUun&v0$`&kUt|dGjDMl((RY>N3`ymx=3D8Qf!?YsEZ*~^
> z%w~8s4P<Cv3JbUm!x|tu@?H-t>79QgIy53E`|gX|%bnIy_(dO|92YWBs??f!udFhS
> zKlGGq{{v<*&yUhJ#HO(qr<C?oH`kz!W4s)!jdmf#zXxWiqV>e18;BmbuAJ!SVcVJY
> z5;xI(Z;q(epY2Jinp)>fXe@lTLGEAYURNP)e1><mm>ZU3dk6O91!87xvT&vK5F}ch
> zbvFK`gnU&BX~;l$&x^HMv}f`p>i)2)#q<$8fyJ!wB0oSYm1p+}Dyx`p7(o%BFFxo|
> z_d*TB@W=3D{{!`pqD-^BCSi7<z|f6-^}X{}YvvRQ&IT?qg)OYpXRpQ#B8)<)Jn(U0u1
> z@r2^W=3DRMz<R%1z_I?iz%JucU~78Hy8(6|ek|5-y@Ty6P`+r*+0GxU0}k1W5*kZwg7
> zm{D4OTqoPEt*=3Dsn`PWaG{tJ4Rk&rxp92BVjj#+T4&k>tyMzkA1L)B;8q?s&<$0;fu
> zR+<!m>rNQp8Um=3D6b<S7?zytcT7Gs*d;c7Kx9}gIo<7-)#Y&?+H4c!P=3D=3DU{B=3D+BaJ=
i
> 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
b
> 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
B
> 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
H
> zz-wJ?Xq#|TLYVCSwO64Q&|s;&=3DgSaSNsf^d4H&U_-+^AwF+=3DY8Tq-PhYjBu*frz1W
> zich)*1%p2@ww|E+9}dnbWg?ub--N4FS)`7D=3D+g+6vGg3J1CQ~s43%Ew$eid0>?X$z
> z4&S)<kS{YT5Wwl@_Do@~yPCz`d!jvEO#v2&!%%=3DLe;Zm9nSDKjWd;-<tTiy>RZ{4R
> z>=3DKJ+J&d*QIrU@uSG*FoqBYR}!cB;teYBIwP_<`@O;Z}+{LT6f$nBQ1HVmQsWiW(F
> z^}%=3D(-RH8E5cP&~h52R&W^;(26fs7YvL#%nacY90<2}l72s)qT3@PVO)bZtnXI_gB
> z))|wY5(DZ)L#P@KD@R3v2|!E*M8FzKyZzKNAMT-&>1S^<UE33INem-$uLlR>H&_Tg
> z0MH_Io43D>&dh*{9#JN~z(*!ZR7p8g|H~{r9-Cz^$(k&gbdj)}rnU-}-NV|_l=3DOpK
> z3BGi)hb}!o#lQeT2ze7qD+QD%p)<s1`ZP{*i<p`VV#{dtyg-Ek-}&W6QG<F!3yp%b
> zspBC9KT0Dbx#4FU@KB-(F8?K|$w=3DHuWQ{`$+pn}^^hhGTn0pNM^@RuS17!c^C7Wby
> zQNhPCpD{qP$M-ArX8eVnXH-d#`AMMMStT7dS)mMa0s(5v@I?Zrv>oVg6P#*Sj*77H
> zaUk+({)?3B?Hv{(cDdA1v_yX_hU}3l74^%Pel|t{J?V7kRZ1<d#y?!j$|Iob3q%H>
> z0`R>Y&-ur#&0_zOe#?!59&i`Fn=3D(Uoc=3D2fIb@e+kfa)Fh3+^*Ezmb4C0&ppB76j`m
> zgv#6b5~E&8E;GO}21f<OxQPq{B`JNrSm`U6KR~P#48AXj?u-Et+Ia05xu-9@#H`w3
> zi>X|91$pu(7?aE1CkNXC6T8RSV3}>}DAD|IXzqqa&kq$HE5f_ay|j!1(;-N^C7BJ=3D
> ze2D6wK@>yd7UyjpS`6^|IXs=3DuHiu%HB6oYSHnj9ck6oANdf?KlcU5iWfaa1aCJM3h
> z5ah<rhxoB;-z4Sk23DNUDy$f3*oAU8tthaFHk7^#%8LwyqM3K+6DQ5;+a@}>hLr=3Dx
> zcZpal-6xYGYcPBATEhmbEeW02O-bzK&4V7KfFCMc3E)D^{Q_E>0t&qpGp-98#aut$
> zviJ1Ycy4VNwNV^4dobP3Po)$-=3DDU{S_7OF{A#BW%2zEO4B)rz4qr%Od{o2_164aMZ
> zrj!ss*8;WJiXD)hs&^?Ra5u?8z%+}JQUpeQ+8kqjf)CA{itXlnV+HNYJ5YWE(@&w+
> ze<F4KK=3DAO0Zwza<F<7Ple*WScW$-c3wZ-1ymmQB(bh;QXIHON<eF*2Owlinw5uHC}
> zpeXnXrMPOl@b5Hxe3~1Rnx}WRv>t#Z+W*R|_*I8#)_=3DP)Iq2_ahT{<q7oUJEb!til
> zNf*ZVCyWfHx=3D^b}+3LquvcyY=3DbHa#HIWwSi$fh@gQ5DNQ_$EWp^so+A894`dg!1>T
> z6ysCz!Zl?{VMP;jZ!R)|9~ReGLN96l-A_&p2AxEjdH26Vp#BMe@+oTq*GNL8RCj?z
> zF&-I@;r&m=3D%Nf>9^?-&$3KFtGSiS8MS79>QbtXCH#eg_k7=3Djc8d=3D>-?{ulgd^t(gK
> ze#&Wf^raW~{O$b%(ZZAQyzKuL7n4y^y1$e3*^M4m0=3D5Z=3D%Gy-!1>6OFN>QTNZ5Mb^
> zm__a;;rvAf0M~kI)5vx3^o8{%P@KLnI|Oa2lZ~on;ouUaJt%@whu_>~|EHy%dA;<s
> z3^_1{m+{9wfjo72e+DcW=3DN(sm#!7y%c>=3DfI6lYZY;my!*-dO^fQJ73Z`nr>8s~P*%
> zU3A;RWOVV_`5B`cUXHc!98)hZ;9E1b@N0FbGj6-^-7PJSG<lqNC20VR4fEZ2VwjPC
> z!Zf(5-B__EwQ01NTpjs*-GYvyZ+v^cB8Rf%eXcP+RM6}fEn#(YHfry%*Y!tN7a7DE
> z*|-w>S^~zMhpW~yAeqt`g@lX=3D${QK;+L-XRdvB9%pLnu?*6N3_iv9q@dnX6IK^7a6
> zwOYB?pB?F|!RP`X7~+j^B?{)?d4u@usvCEd2Ulze6BJ&J+4#kkmpRR^@d@@(xDPG7
> zu+~}CA+daan6yIG3T}vRnM^cHAMXXuW6Gn~_Ckm#E}n<GR0lL4`w%_n%L`Ts2l8tu
> z-BLre)*Ii!J80pvK060#fx8d$0*{D1SV(SZ9v(SR#)X50CTQSqW#=3D_#1%&_3%kYT=3D
> zw~j{M;Ac2fQp!-wq-&J-<j*lN&`ZE+8_mrX=3D^B=3DBY`RL)d&^@Q`+Y3gzp?LxAuiyS
> z^FFaV8*4x=3DCd8VD>$EwRe+*@Fg7YLj;UA3m0uDb4ze_4*hib*^<RV>j`|T#E8gc@b
> zX)7_Y3nb%4(4p@CMIw;m4)7;@lWRuKa}$8Kap^htzHt?XzaJxGHzuu@NxLGi;K@h~
> z(h9nNNA11$g!&R_4!2s?$bZ%pYFn&p-h-Fa;iynwa&7`~PE5sINi%L2_2)I8xtf^e
> zFpjna=3D~6~V!2i*EEX?w-G;qz8`95uLcNk`gn`VtmYd2+2jH<juiP93BVt?(~!s5*h
> z^8l0kpRV~wH<#ND|KAzeGq()>b%CDiS5I+>?%G?I<gOnwp(O=3DvkNBylhNff2Qf1>e
> zQR$vX`XocniNFe0l5cjahC@}`5%6d&QtL}zAQ;T^Jpnb63%5x!wxI8PQ->mLom<XI
> z*nMQ>fRS~oB&Y6!D<*n!(A+_%!<Ws@4Gcm&*|w5jEhypT#zO<P8d)*pS~Yg_kl0!o
> zx12Xi8JYU$JV=3Dsf2hbaU4{({e#6Tp_#;zIXi(7j%yFWB#PSz?y#P17~rq1n%MhT}u
> z-Fh2Uc@0$tixP8*xRR-Yu%DYgwvdz0BWPGj=3DIF;d-`l8Mc@!0mFG&D_J}@2|v8()C
> z>5WAJD6G$z)G7a{Ww0xzby@+efUcwN##Tio<v>*gyiDY439f1Yy<r>x_ZgsDdW3zI
> zCGroj0>1IJfT7T$LvZE@FwOU*-~h`=3DHY7DaXxiviWEnAc*m;*k35V&=3D^Xs6VY+R#k
> zF<ZRyu!4AUcYr~5-o!Ye;~(P4Q@cgpq!9Z;22x|12bBAOj<rs#)0dR=3Dr<8bJZM6Ss
> zIeSzTPDRoIx!}J8LqV|b-VZxHumBRM2%L*?gY+nFla4&4>T@+sCw@4*--|4l`bpt>
> zu#cj@)^SJ02BKw$?wfeOz=3DJMgj8Vn+MxPz!%f0@L2Yl1?=3D@H3lAIyz4R;6l{^RU$n
> z#R(@apj3lUVqBdma*kPys5;<`)qldG3I3Fad;tw?ZS}SlNJ%TTUs2dblR!X%Jkehr
> z5B*F=3Dpo{sUSU%Kz^VCeFm@P7&a@}qo;uRJ>x@Y*8aglg0vLbo$f<i3^q&n8WL9-~V
> zy`<v72G88UAsu44*Z7+j8XEi^Sb_H^WaceEpR12faf_a>y;xC|bSzU!ApU)vIdNxj
> zt&N=3DX7<QoXJCDj^c!=3D<djB<9E&Yn&n#KSyI`x$02I{EHlpKT^PfW_>T#|LlWqDM&M
> z&^{r_QFearhvU|3KR#FF@<+eNX(*vXfjAoL6(Utk0jV3hba?qhronOt(leRLv)6E5
> zXLbpeXi}nWSjZJn;);wmV#ZXIi5RMhP<j;oLJaU`K~reirf9ERohbFe$xdue25jPl
> zv;03N#KC?9s{otKr`)G-7hLi3jYIUH30ccG9Z)-v!)zUHd3#c*o9f^8`kMA;+0p<X
> za||NCDfoO62KeG`y+28nO53)h_=3DOJZ6yv;@>VEytZi5$=3D57R+e(zoyy1Kj|kH?}a9
> zXVBqkJ%f5U5oYig`q=3DIyZ#QG?sQA%AAr?WQ`aAF#K=3D(8o*c%ekFM9m#DyGePD!9iU
> zbp5x7GST@pWLzGVkhRHrW}K1rX#K6(o?;p>!<M3p(7*-GT@J0XHN2c{sS%=3DO$eVz;
> z6si%97#=3DYMg^2d7n>jeRkYpBs=3D{9_|#T$%2j8Md5h+XXsGU0o0F|SBWPt8!Dh?z<a
> zBrGc~9EVSZ<oL54XjBvlsX!m&op)|C1LBegWDF@f35N+8eMkIv7-LExMTl^+2zJ0a
> zkWn|}2uUoqEaUX(-|6WkKV}tA_`7#V0uaVrM~e5^(99?#&o<g%Z#CPki%8&gB<z?$
> zYiJ|Gb&7-A-7j#7M_%;*-phC?I#uZVl<wsGC{7e})Fqu4p2A&(%0zU?DJO0xok(rA
> zXLK2ygA~K;<!XKfHfp#LoSmu&5t2b4l@WRq%1gy_X?m-7*ZOhw8|Uz>i>)Aj`@fRe
> zx+zM1UR7ciA}8EF45xPL4p{+J_{%Cc3FylX`&5CBP*TPjs|C;*2zf#ptWOrJfMuG#
> zcq{>9u&_S4p;Gk=3Dh~4!97t3Q!y%`$iUnk#w02ZGaMIRh=3DlvTcwHx1$3CB5g}rafxI
> z^t;Fgo(txA39jp`#1GV0{l;7J&z_FTjuEg})kX<mAI!|0Uh|;zSi&5kK8>D-|Alh_
> z>9a<ZlwL&rA|C@1M*hmPcJ_n*xYtDziAGV$6vZgv(Y2Nccm5e17<+*QfdMwC#4glR
> z&CQx2cg;r>G^kDKN}SThh~_#_K$KC!p8zq!E5O97U7-5#>7*>SPv@D_u7fwBcTwa!
> zr4>g~6fdx;S{7>fT`}XTk8J>w;(KMyKU|Ra#$jZI`k!oOMNnBI5*;4iqmBbu|34D<
> z)F}Fqx|Ryj=3D%^KKQB|U})c&RGlc#YZiqc7nw{#Pn#ATQc-EJTT3ZxP~@CboEhuRxk
> zQUg^gNnbj;8n<b9ibf{vT8|t>Rcimt^*wEm=3D+s1oEK@IZV}PW1I@g*i_wd47#7-M!
> zQJ~(AAKr+^s5wAdmbqQ5>|q$KNkoN-L4UM(gcR;lXfuAd2^x|?!Ay2cEuQ`qGk}vy
> ziw(cfU!`=3DF2^_B6;*Dk7Q;z7gpw-W~N83itflTK6Z)~touiE14oRc2>81|RRTTPU<
> zb}wPJ1Q#N4(@`{)u$mq1{i{qAiWIOE0=3DIPiJ{`Mdbs&@TpSi2k6t)JgMlvQJGSlQi
> zIESvH>4=3D(iv4$I>Ri<WWe_E$xZDFY;9y>J%idBlp4*{_x(y@eb@S9jKG%l)cSF<f7
> z_#<FaU)qvEOK-Yn?oVs?KE7?`q*t&2O=3D{w@-sTz6>sgxJRjEi^b#!!%@3qn9yn>(Y
> zv6lFI8b<?ix+5=3DIHG^S<jDW9wVMPTw04r{0F&eQ1Wh;4z{?~`T``^@NE-!-ez1xcQ
> z+~_QCeSPbREvT)^$PjN;vs+J|h9qebhK{8kzu0r#V>hph@#7DteM1NfeS-`5*4w+F
> ztcM$&CxiAz>%7eH^~mxOWO+p9{FS^;Tri=3DRvh3(+M?59~ogsj^7auSYfh`ZUnO3F~
> z^dV1qXqwfao`IrkO*)~Q9j87<{h2K0=3DO^44jK?<*BIuVXWf+4Ab%s}gy3&<55>?!B
> ztQf)?ygY7h@0lzs%M7Xqb@Sd{5m9#4#vS6#Y$tRk8$Wp`@G;AfKa*3a5Qe|jme6}?
> znZm#%iMdTNVR_b?6E;Eb_uhiuU*^)L3qIB`l)57k?^cwb!cb<FE%J|I(@e*$XIVtE
> z>CzAbw#ne{IO#aVu3uT-*>W8(Z#`7#XYx`Z_p15D@hbwn*0-rry2D?mu)!r+J_kpH
> zS8c1&gS||*ZxqiW<MtTN&UBDY;$A&?=3DEFKjz#RZFY#pI$Am}-VLMLWx=3DMEx?=3D7M1P
> z<+~dYJmV-!&<QJppFbB&9~tM@y!PhhoK3XybOT`&wCgzP(sl|kAxT7>*Ox}J07IT}
> z>$-GpP)HbnI_8$co(bJp5c~~GZzqofvdCng@0?qi18SSEgiPB(=3DZByBkl^3q!wM)x
> zsL8=3D0k$DqKt7<$4AK$H@-$!}}q@j_P(EDL4aM}>B*mZ?=3D;xYa0-uRtWmsw2ppzv|j
> zcyICTTXF1OAWRDmdC+~WY=3DTFT{ZmToond-usIQm=3D*iY%jfFgmcDKRFurEK@$Wd9@u
> z>@I(eK^VCQy@@(`s&MQ8`JgYPfF)1xyb(R#&#>Q{e8fX8pumf)s5^wv;WQ_q#?+bk
> zTpcdURy;~IRTO_#)ucG8SuWX=3DoQ_zlNhpwg-V9nDWZp#2pQf3=3DN&yO?^c+H&Cbcel
> zk#_LO{;6nZn}hLq{Of>AGUv3!^JycZ1<{zwDt7gPr%?2YNv0yz%J39q4#eo^S`kk%
> zDB;!KkMg`$$!XEaw#|tt`ZJ2!ON{S)I&(tZJN?Xv)??}zSyWAHBmokp%FnCbI~4Yn
> zCi0~Gr@NY`!Ki@9u`k?B;j)%au5gp-*o@g7Vv}8YH-xRW3Pq6J@)DDmkv|3P4RwcP
> z8#vQMt^?+H;fYxm;vQuxV-0Sx$)>MY1{^hZ0HYOWlF;LywTE3sH>5U0?h&j}G)rD6
> ziLCne;hI8f5A8hoCUc-d&?k%EgvH28*r!ccXLH+Uc6jo{_^Gq~i&75adm?`r4m4Gg
> z3qCxWYWaCH<C0oBuazUdtD0clbTkr-d$$&qC1Tot*LSPZY|J@aRWv21Aj`Z92BLJH
> zMD_T%?v)|y50F?Khpu<&m*PpIrR=3Do&W1(KIUU|jV6Y%-Zm7cy=3Do{JrJ=3DPS_cM<kJ1
> z?nEQ>`qTGK-QAv{Q&6-XZ&ihi5vHf`bP~v=3DdgMQtR{j}ZQB4~SmKt;u?=3D1AaPH4g-
> zYl0TXZ%nnkN5*p#g<q}6sj1(QzOMVOhNgp1|D|FONopF++EIA2xlH}^+cwb|eyp{u
> z)(;dZ&D5MpOqw#BAvl16HHo@D@8poi{_9)TV9Y?CWKt@aMY6UqyD9ywApNPodI8NU
> z3RKAxWfgfIIC+5p_gyBBI!|Y4Y+|1D-ZiayjQ>aM!kD><bb{AzF7_rHx!Bp$<B>rT
> zKAVeKS?3Fd(t5X6d^Z}YJv(|=3D_N{RY=3D$Tb_dS@YQy<nv=3DwYBmk>}-a7AR-QQ2pP41
> zMX1Yh-$2;9N2O0d!gr$#{?j6Xr`8ShQ&66wI;F8ymt3e_0c4=3D2O?Q~+L(2)LB9!(J
> zW3CHBoSa5gXLS}Uy4?)-0l|oou9nv^^BU#THksxF>UmQw#DI8hb4y49{lb*}#xUAm
> z4d@b4`DCn=3DGwL9Ql(fvg4DbsZ&6E=3DuFFEjX`Ohi_C4_H|un>)Am;x2-v6!yzR<sW&
> zXUElMr#>v=3D$<!VQeG9U!;?ZOwC%`*MFZI$~@D_g@;#CVc*xho?kFcTR@dR6{gWdZ?
> zQ(bWc|Hgz;*wrbq44g{ex<tAnFvSPNBxYg@%z+G{*t!#K!0A(1!zC?^K6N}dwmZ;J
> zvbO%ZSKK51ezHu{1SXsPOCPrE&0KNT;>Ivz#E#dgR(Z<sZ#&P6RqHE5%VKX^kqUkb
> z>-o^xb}+&^rrCmrLL5LQ14R36^~_=3D(bf8CSDL^k)4+r|p^QNQ&7E@J{bp4K;AU%7?
> z3iP=3D<+q*;$Pp;?5OpdP`uoZ|}?a)*alyZ{evHAL^#ec)?NIKnKmCa{NJc2el%ztk?
> z`qW6Sc}J*!TQ0WVV}cw^-O&ZBy#W^HNd8-wLJz#$y&LI6gcx4jY(TF1il{AH!^D;n
> zhir3Bnjn3tZyOZ%408HE`K7D&3Dh3dG}b^x`)jU`aA_uR0(t9SKg;8K*uPRL@uzB;
> zvfuumD_!`a{67Dx(ANRd4vVG)QF8N5TUXQLNVAbu5Bx^986bf@H#@7;RQd~lnd*8Q
> z8-93M*8?N;07zw0uOD-SV?om|=3Drd39XIBuyTRygty3C)&$&JdxKZDO<B=3DU>SD@cwY
> zWiLk5A(?vBztk`_e9JY}Y_D&RdK!uD09vJJfLrbS;qDTJ8{69ex(1I7B`Q#G+8Dq$
> z%t?e*4`tfNq7%KjNsnk!#4_wRvOx&HS3q_GxyrieLKwa+2st+4U4jer4)pvdtC@N5
> zDOyl;$~%7)TCfV0I<KWg#F`bxN?Z&f0&f8Xt14!yL1HIS$Pi7?iKWsVFOm<@;GWM;
> zJsI1>EmHkg-2jvV2#K;@srsVfTCnPE4+xL$--%j`4CkXmxGDt7#rVQcPpr9;{RLa(
> zt_9~MfEt0ELvN-Z1c7W?<LpfjQ+Ec25fK5QN@e7M3O0o_eo@JyFl|F3y-kG!PEFJy
> z!tp)DoN_!WRhIPSY&7ah+HtEtx}B^<>%n>mWbtI&aUPdZ4khi|&Tx<YNZ6kCC!Szy
> zEG*$<&Zw2{0H9Hc1BtV!N}m;O1J=3DPM_fF+ePFVh1=3DP%!7`!|}5ES~UFeDTDq@@3N}
> zH(HJjaQV~-(hsN^Px1Q`f6Bv1%{T@yXGFg#Wi_m&PR@jm)%9ej<lx#|9h_896|03!
> z3qiY{hJtV&t!Yoo63Dk2NhUmw?3fu)m@Xp^Xnc#L2K7`s^AB{kI#y{+v24?dlII0G
> z!2NrN_8<buc<=3DZ{3aW;Yd=3DUD?9dFFBic>P%s4#V90D;8;fFzJKfx_0ED$%j?^Qx87
> zC5CzGp?^cMrCQ*VDPq&FjN*zBS@6nCME@Thp=3Dp)NLoXtIniTVO_FAViM+BT!ah1Fi
> zRi!e-kNopiT$V|>Mo~%!qOzX$D04Pd8^qR+EgXh2p&W8V(?(zBB&&haLgV?@>WvtH
> zjF=3De%Ht{eQ49~}RoHk_$qeoK4XNytg7$9*Q#Ft&D1Mz*3MgI~6kC<bw>W~>Si5ZQR
> z=3DHly+0N6?;EXCDPdF>JMN@lJ5&T<o*RLId3j<!pqEc$0?o%~jgpqMh`>=3Dv<1OulDY
> z4U&I0v;Zk2VaPXQ2nlifn1R$ku7gXU6UCF)nb}V`?%Uf{Y2*Y~NN8ttlbcpE$i^r#
> zBt?W+q#T$>VL7yi*;p89S1Pf>6!&`$!r~ga=3DEvml?yv{O%`G6}HzSl@wJ;<uF^nT;
> z-8W>a2FQT^>%`Zlk#cs}z{s9QHRJvBq)ehhFC-7Zl8QE5<F}j*A^c-9PTB`E&R(*1
> zIWh<((iJlU@@?TKivpJY*C&rBsc@5*yOfv7`1UV{6kHV2#wKFXS*7>)QNTCppvFo}
> z5YIg~$6O-kO)APFsA~X(Q`%LX%D;|p);NO+nta_$IQslr%XJ`Qyn>2@-OzFnbS*X3
> zjA_g?VI1WBBPXtd07a5$iLQ2`>5HSOYP&~ozOp1j@q{o(g5UVQZs3_1bFF&#ZsQ`g
> zH!T%J@DGrxBD24@cVi()pk}UMF88_mcgjd5JPPD8ha^j~T8Yp&(M5gE3`D0hs&J$v
> zs-DTa`2i^2R*b&Pvz;Z6VP^yP;7OQHL>uPp^blk=3DpTdH<U2Zj=3Do{le}OgL(VtYH%y
> z(C=3D3U+nmpOQ)C3c6tT&N(o**EP3K`a253#r1evWCvYhSKx3^ND^JCRI$#2sVb%j-Y
> zH(mBJ`Sg3}{cd)|T2Ru{@##+vJOW$h3#)sc9C?}g+f5jjpPrRyO9Xr=3DmsP31O3^}2
> z%_ZA6Uj^tMmeH=3DfHvCveSJ@40h1^nNF{6_?bl28ED{AM$XnpGe=3DwKmp6@RCws~7MI
> z$G7&Lv{38djK=3D$9!^<_Z_fIZn?LDTcc7xo&!?-$wt^<w09W3RGKP^Icyz?H!Lculr
> z^H?Le@Z<>prsRcWLAsJQWb9*!<M(U!H+?Kp#sV%916O?CLau-SdQJm}{D$x$Bvo?)
> z`=3Do?FzAwLUa#$`s4iu{|%@rm~48xs~^A?NC@5b|HyICt}?s_r1;M0|v{C7ZuY~;>5
> zN6wlYmSzm#e^;u|sw=3D9j6i=3DA{^^1n3Yez$Pz<`blD>fw16}d?`EBGeHbSZ{o-_exa
> za?otwWk2li?x3uqtNc4+rnWaBZ8On3|LDoYh>q^c+h_^uRA`AxYKXqH><U4@hLxs}
> zHMH}K$5O^0xX@=3DE<ZT_Tb^Gy5#1PXD!rv;Cp50KD)L;Sf@irJlrH6YvphMNXk<dKN
> zsQx+X5fAw*d{+4!Rq~=3DY!Uk#~;TtxJv>3=3DhV&)jT1jKqdbsVfVfu0a!)AG`5Yt;k9
> z^UI}V9Vxt11v^@Te_1*64GcHDyiyLv7+rhiAE*6$vLW8Fv38u5;GoMO+>#s>4vy&Q
> z%ioK=3D^_DF($7K)(J~<&)I=3DREZ00U~ahgZK-W`DfJri(Gz2TG&+k-RVyk^PppJgB0w
> z4fd<EXzg=3D80>a^Mv6VwRiy8+~OwyH^^yY|XTn}K;vy<=3D}mLt<;M(YvHXWD_umvGzL
> zem2$4U$#%x#xF=3D&{8q99@SEVqNp3krudWJLasX|*5l##BGvdzKAM1Y#fwsLv{1+G#
> z6kR1fEzg3e6xjf36BbekSZV0|z>;PAwSs%<^r|vzZ5N~)!^HBaRvtD`wq(T>{K}a=3D
> z;!D{f4Mevw_q!@UN8z1lFGeRqkeV#GCRCtYqf2E;&TYo#gb_Zt|NR5{%?rshlJdzR
> zjas^iY00+2qt>o!S%1Q)hqS2DZP((TfPGJGu%=3D`tvLPcEz1ci017WL6*8~&46}SF?
> zqNpjyXfFjtl~3$D%71>WJY!Ma17Ghgy^mx>lt+Rn2&LU>m?RvDE(|^EYWl6^$lP-0
> zJiU!LoWU>#iPOWt%~k1l_wVkWsMNCJ$=3D1$xsDK{Ff$c~O28vec!16RaJ*n@m1zYhA
> zCT|sqpiwR$mUI+5n}J*A)k4lWNYg6yTkyLu3~N?Pw9FRIvq*!JPwUHCOPsSs`*e`g
> z?M;A4L+|_1>YkV}&=3Dw25C?J<Y(j#VG|9o!}Bk-mBLRf@}Vsi-7e-MtXYR812s<!nY
> z0^#Rage(sJLG4q*ZFebAOdFQIyXLua+u5$JZnxQm6wGp~O~cLK&~qenL7aKU&sX$D
> zOx?gMgaJ89aRPTC+3&V8X<u*-dNUw#=3D5o}b{(fRLPoxC~*xZV`FoJaJd_@Jd#s97H
> z%c3psceCB!B9t9-<stLSbLk2IQfD_6g-6BM8eVcWBJ%B$YM4cf@>(BT0oM3`UO{Re
> zPY^(OKm=3DooNsG~gadJY$l-`qgNp_$gRe@&R{k3GsmtUYNZ*}}Hcc8+Kf=3D&Y=3D%;*0y
> zPuHlP=3DQ6rC7d6EHWYd;7SoKnIMM3v)NOY<A#&WD^wkA`ZrRI?_X=3D{dNMzD0MYZey6
> zS<s6;$F>jD@n2=3DJv^e|JFb1;^6=3DDqLb<#YCSfSf%i8P%fWl$V*7oCVRhtWpnz>tSB
> z^O8qv@i3k=3DX*H88kR}@Y?S^a$OF!5wlOpjF<{8?-VTj^4t?V0{U6Qdhnn8eV5!ZhK
> zXr{Lx2d95kcg#Dp2V^J=3DRSAxZlYR%w3z>Hg!{(KMx4B+R-483Wm2fhrATR%b%F{U5
> zi^{YEPj>pKNsG*`vsU9<H8szP9A6l-lj9v#+UbQPm-{pyJlqr79w$vszV=3DF#vT}v(
> z3(tN7p4w1V>qrX^6l-K1pu@v@6p{HiQyNzWZqis`tXcX{68TW%p1=3D|{P4{-^IvRhQ
> z_!+umHSo=3D`=3D{D86>v^#^kr`kPng-d1{MUzgx(uj_uJy{qtYPel<{IAxJI6(TZIGAd
> zUiEQW^^--F4mm7}@i{e*_GaVuP%-d-6I1osq9%rWxL54u;cd3kGg~$ci6{;5c0<7D
> zj7?4@g$$dl-lW;@z0#1z$=3D<9;b0OO+9+yuW6v33(0%-*_Hj^d0^FuS^U4AEOoV+`u
> zjH8(;pR(U*caNgr7ibVr{Vum&Lu|Ehj=3D3crxic})<J*x--}9h1F_4%1BTE%E7lKS2
> zqkj1tJ?XMsJ+Ox9&th3R7BQkfy?Zj+L*saCTA(Z}Ot$_uNNjDF*jzjpOlWr+N9MGJ
> z!K?^zH;vJ_*`LN1<l57PM<^s#68rXNYphfRt?Cfzw}{>VpYj%&>|mAmIAD!nRCb3o
> zfwo%gdiV7u_wIn*xGT-;8@PduhpSpEzshOz)L(0Nr*T}Q*hlEy4l=3D)&42yNiU}StY
> z)UoiDBBr%-1b)JZO_m7H<C;h1lNG|m5)xHqxucE^Gm-!RP1dkic>;BgWoz;YK67Eg
> zQM}}taH>;Bo1cnK@DaUmUIM!Tm&W!N{Y9$k=3Dny$x?$r0<IaJ05{$UC=3D!*+k+t5hxw
> z-jldNXF7dmUi7wfZoOnw&Nb821zgB?f3%bf;9b|xs(yST6H^TAJ#M1gO(*$W^=3D$y(
> zuG9Zzoq<7@0n7Q{TbXrJo=3D8`uonPk>O=3DTh{Z2g3J@6#_!A93_r9Oxw=3D6>xpk%love
> zzG(M3Br2-mb&8K`z0~%@4F5QAn{D%G`oG5rJu*#$yyLqpP}&-yF5uE2lsq>Pc0ewN
> zIq&_yb8dg!Y!ynL;+tX!YGwFLP)W;|O?nS?1SRNoFSq=3Db7|a=3Dl+-B`s=3Do$k7SM(hc
> zK{N^=3D3|WP75Pi83{ql^fV;5eS<{O9kBjaElg9QCSLaAU-FP5@T|5oe6>o&?s9LLD#
> zAm6L%oW54T+(@m=3Dux1@LuJn2B=3D#{N0*xV@eKijdu0a$4J@G`sgzC+MAE%FN<?cB=3D8
> z)m2EfESV)(`k@QfE%QZ9e^}aTKwIP){_`3njU{kyt8w8t0y#Gg$?tBX-XWy?SepuV
> za~|%M92-fPE`sm`Y&2G}QaZ$y$*LJM`$xZ`+EGfeYruk3NbJzu3k}eq=3DFSF#2giNt
> zKLEi%eayia=3DwiO=3DuSpVXT0D&~DIsOl?bY_i;9}QNwpPTAVR!~3&($h=3Dg>5S1N6TW`
> zx~C3xD9qyL_n+(7V|f0p8;;GDcF%Q&OYXYm(`{&pVS_?fFhVEA0D3-wpHCT*b^{%`
> zZjMde$)I`boqF*BsNo~;=3DzJ^Q+|?(Xz_?6+>s=3D}4!Fii>f~ngIE^Q$M29E>|m*f+I
> z$JZ2-7Kt;_0%>riNtulOHI9d`sxeT~%KDysi#4^5V$NMkS2<Bu>G<esFND>wIbmh)
> zu-ibu?$6>9!r{Mx7|3fqXaFH+^^HS$!&>17YQOK?+L6|ATf{aO(+sq%U&IEJvzLh4
> ztR@Aw(8nFcvEB;7WyQtfgRTUFH34@lQpvo`c<80C)s84k=3DiV){)Kgh(yXnrdHxaSM
> zRX6`zBhC%c5H<hhF{_K|o=3DGx!_W?{$F26#6I^CnM2@ieSQF~1dp1@lGjft@u%B+q`
> z33|Q?WAA+mPpZR_2_zTjoIs^$Y3U(q@6^A|aFQB&c%sKU#=3DQW;uV|b>s@CNa>nn}|
> zW|7svcp45s?P*{x%<hXy&xc9O&y=3D-*&o_Tdq!zEi^(?0e{_tfpO*=3D#R`Ly><{TP9-
> zQb7VylJwYfvobDWMFXKPR=3D}t`&UdEo7q?EziEfJI&4BCsv3!7+7AOFv)mQ2PJsf_>
> zD&q7~5O8st_newrU21sY;fpv~bKGKVcewHv10g9UfSQL&p&5yWe0rw2_P+z(o5We;
> z(tj(4FkBe}P;|6-#WhS@aHAY=3Dp|Gw$CIc^u{XLz0qF;Dzco#WW{u83c$J|x6ev(av
> zq7~!j;oM+2MiN)YQ|km}h&S=3D<kNqgur4(u)BMO5AjW2>{O_~dsksa*22fut+Df!7g
> zl)47Jn%gX(zFST>h)f_$cCsDaAvoo|yqk7Qf#{EYR^v&$byyp4>P)waMW!Z$moJu<
> zfde*!eSpCOqZMt2&pS8p($Aez9pA>J<E%ohr|3*Orz+8cVuQ)kjuv~(WB^>T>+RzC
> z<om`LAan*jb^zbZI0ig?t?Js=3D{%B1H2Jvdh+n`Ay*R6VgXYldD)Uvt(y|nci<R_@O
> z1=3D_1t7WC+`*I=3D6Wm45OB6hqDvPpXkcI+*jIEKzn?4aQC(w4Ppe8<kDpitHg6!gdff
> zl*FJk;pQ7EnX6)pi4252;|5|{_36cyl-@|E$}4FhIJO6gY2%FZzlepPyN54<zjwiA
> z+}mdra2O;(#}tCL?O|+lm0wu}mX@X78&|&c1ah6KBhzRaa$|pcmtuD}ZW2a5-0_gP
> zANfYnQY$3W0D&ovV{-)d9PPBuX#bo9B-zjO427pcknUyEtdu&4X7|3DpLH~2hoY_Q
> zQs`c;Rn!)PL${_R;y_7e<~23EOKXPuLQ|0uPfUN&5bH3)O|K$>QyxMV<)T@FHYM;R
> zGHXUcH+doPsNVX6uOKn*OgYg11YaHj(&Rcn<US4M>MP<$o%e`R_9;tT<Vk2;YL2Bd
> zC2!-fO&hb>!xhNuCRGU1Xj&Z$%YE;Bw!n$1%oHLG!9YBh?&$Es(<j~sM4JvXgIKgh
> zaW(cfcyWh;H^x<8ATjEdH970n%ZTq`{E82<pz5FFyJ28mHf)d+=3D-}4OQKPe@98{=3D~
> zy<@PR-6@ryCK|O(%^MF-iXxJ=3Dm<(3{+(bpWP1SPMtzb>ru^Uh4Xaun!*R4?D=3DrDWX
> zj8@^f=3Dd;%Q>&0@Uh>ykDRyDU3;-#O4@QRR8Kb|i38Gj&2U77L4Xe}yxt~lj-+oj$F
> zoPm>G!{P$>6uJHJ)+~2FT7L0=3Dfva!CmnH@*990caw}E#8ljz+POgnCvJhqIEXbZ}i
> z#<odj>JxotxEQ{R04oO~iL8eMuwsdZt1A*M8Tjj-{&E$$SX3-b)3!^@MmZBb2bh%n
> z7&SRy*D)$S{uiEo93W%ATluT{b;()d6+1SXJzXY2z96O&;PlR@Hu6P?60F~o^cG1b
> zkAAjUW5t_we7kk_J`>Wy!))l#B14iiPIqeqsM6_re8Z!Z4$syw+TqPNvmxHFc5D1U
> z{`uBT`eaK_{dI=3DE4aI5bFh!eU4EN#eVxvjNchR9hfJ8PRK0wi%{gaE*HsojfbvRZg
> z!%IH&3~Bq{{uFIezWE_!>XK3rf)um*t;!Y_ZiByk8q$y&Kk@zWu5^ZI0ZhL%xHX69
> zKpXpjvfDk@U3uJ5BgS%a9NsCd_qx&|A#BL{V+QPxCAk?zcoS7?2x7f9cCFzH@b&R?
> zKY>LZEJXVDwliU!L7CT&IT{7ndJal!wKR0<|J?QG33f3O>DK)w_FEwPJPnnU?KtnP
> z8sKm*B(EoDzCOD=3D#`SUGk+?ZpU?G2I)XG2}wsD^fiLFh_rlB?7cxEQ$hXcNpQOG1S
> zx?mq>!@go-g<z4U>?i<Ut&El}^WizQ4j{`-bXoUdIhOykWvrQC6(=3DAWpw*lK+>$6o
> zu#M94HE$lgHk9i{ta*PYyoMvQtCPtSQyWDH(jVpthfv-FpO|s{Ef)9NvU_QB@OM5Y
> z;vQ}tXGA{lL#Mgc194m)Ng=3DZOmk~gj`|!OC?-xqOYx9_Aup<%qPhg0;cP&qiX}BFD
> zcReSj7wV0x<`#({?heQ+xN(VzLR8JxXqzmG_)?6;`&=3DX&w~~Xj7}vz1<=3Dvez4}|$>
> zzhtTSh@6RYCdZhY>8LPmMO5dV4?<Hy5Kav>M9~Zq&%SFrNJr<y^D6fy{QB0O<6*<3
> z=3DPK`C;XhxWjRNodjr-c_M@i12X8Neo4y6Fd&q|4++va^z^Xs;EsPZp5n3qhW)fes@
> zCLY&e^`e3?E0!<RrOzL@H@lSWaj=3DJEbW1LSy2e@LHZQhp(7+CeyFC6J5b=3D;H#g|I?
> z)0F5hy=3DAo7g{#$ba)PuHsVr!N*C2{{7m9!grp(YE(;48LM3QWqjHcIdPQbZ;*9Pn|
> zG_@h@(Vm<x%wthzmWs9l_nVeinh1cKw#mlB)nLkXf^5#z@d3W;eLP<4?KaDX@evlo
> z-EWt=3D7(z`jEtFq0Ck#(<)GtMl@$g4?$`}M%5eT^(JZqo(Q+~U%l5QQHFMDdjlg?%o
> z@bj4S4~R&@2@e6Y0x({Wd0g$;?TjvFv)?g^<cI8Ti~RGp1AAjbx1U@sc*1?cLN>i6
> z$nce}-$gV*hpu`2pn<DjX;f$?1q5E|Cy-}l{=3D*FM{jzNn-i83}-3=3DPvqYW(p7D6KV
> z(91D?v6o=3DxtLKEV1}$fv4uq!Rar4FkzDSr`u7VzRNx4X>uFASA-6U~}eEjQopx@n;
> zIRf9=3Dwqtnh>kH8;5vV9+Oj2DSL8*b$YAtv@A4t$Rf+%>+rp5Q${_O#vP(NxuwNU&$
> zqAVSY>wA#xX}HzhkkECyqGgv4U1Ld>99e&Wi%>VbQev~nC7Dw!J^qfUqn}gh`+>-w
> z?e37KDs>}(m)%}RyVYQztaBp77;OeqeCROtMH2Z2>_wa>sKbDmPG5H!$i6HAFG;L2
> zl0HEzf%tJEqR!EqZZxhCmC&Xy+Ia*PdZD!Td>{LJ%5N|{dT$(;9SYGSqEbowv9j>#
> zt$<piz7G!U1iDbOW%52Ea}Zu|_$mGSt*}GwO!STk@TA<wi*cB7tihac#*PpS2m(%;
> z65`}ZbiU2hD-K%saozUjHq=3Dy;Cu;T*wjSbc33vnZZPTI&d_zz~UXJL5i=3DZowBYZUC
> z?&;~n-{T!nd1lBf;)v!V2<I7_>3?G{w@Z>KMJvX{91^@>Ie|C^uNrdZ4Pi@luaARX
> z`qBtlkt-@L-S;7_<X&7M6U&w?$K&6x_~{^o2rXlb2QONf3L8A4TWl%4j=3D2xV=3D)SU`
> z?HfHuJ5t}3Ce1jJ>DuQn5(l-(_ZR23eW1jmXY7$8&NzR&gGI30k9498Z4<h&>gaRU
> zpc7(D#4sLRTzOygY+L()@%sE3>9ErZxxEXO?H06cRl+_8F}4nZTd`T5PTIWki@<IK
> z>GULhaA-&T*lJ;?5T!*F8L)ffA}V<Je7E^XA3UPQ$$nAXmER=3D)Jb%4ZVMLq)oCr=3DO
> zqW73RkD1(OLIppiRHx}NB6-;itHqleDLVN%Pxo&m$Dq>Z!#}>=3Dhd>EW@qRT>nYm_n
> z4KYpCTea&Q@*7wid5f1d|M)KpM}2!xNM2ch+9x?_JZhiovDmtdT**e~UQsdRaiTNW
> z(9)$O{-Uyb6_?|9t}i=3DByi{Xzm+7^!aJXgrM2iU|2{_q-nOtb^KY81j41sf5{M$Sa
> zy-%&xkN<2j`BmBBom+$rykA;hJ7&^Y*6i2mwM>4$ujzlfvetb3-P2roU9V9*!=3D22!
> z-9Zp$w*11A3psp*`aH^wQ@i^FGiLu(Bdx8pZ`YBEeQl5>04M-S@&R$|tA5%XyiP4!
> zT9+koX$y_B|Fi>fjBv>?6qdL~z3*!52Ap-x1TsEA!RP!)Xy?LT&%$cDCvZQjLyzGT
> z?6(J})Rbg*P_XML6&8rZn!8mA+Onm6t>;!fF1<DY_;1V5=3D6Ek=3D)s}#J1dn~38;|7T
> zRP(R!Nb<*7uXa=3D}%Lj@_LOJkR4Mq1WzFqZr5iGu6?5H?e>|iF#ds-BT#R~`f_Hg9x
> ze;=3DQxbx>2h5IadEL`I*IdScErcjuiOGB(rcGxk<#9qD*pY;|w91E-zMl4=3D@}V17Qh
> zW|ADbvTe`?M=3D=3DVwQ5pz#=3DpY%!m<?ZXhwqkvWldCrP|Ek?lpxq;oAT7Ex;kcw1(LPm
> z*9qQD+f+lJLl><*J6{D$ENAxjH>LV?Z48bJC2wvxq2s~%CE1J!k0A8IyaxY%uuRYb
> zS+qf+;4RXb#)+yxX)(97XVfxYi&Vdkg@p<3R`RI&w4k=3DpHH?&iMJH<giyWO8agh7R
> zD?l-YHnM_6y+)Q(r~CUCh!+ziopV**PB<P^(#~s551+CByI^fvT(%#gbL|sX9b5s+
> z3BeF-1pY(O1?MmZS8HL@s!x3nmzAC`CJAxpV|~3l_R0k7XzFiOe8my0%Q2J>m(b};
> z3QEp-{FZuGhhs>OAf@LQ;@H4-@Z~j|)=3DLeyGqq*o@s^P%!i)rm$qSY<+}tSonavX0
> zc`k;8UkAFn*8`-F@7m=3DnW!GrW&p_Oq1`jq~7e-O=3DFWv=3DfLRKs<>h416VqSR@W&r?K
> zd%kAuDN5T^hcXx7R_+>}>E@w)TB%4!?-3Shp=3D~c9q|K<^@isN*@e~cTz8MW(E^NaD
> z>)Sv7f5jB55WI%bh8-6uzOD(GyelADffSL!g5N2(=3DmF=3D;_YgMYMc~O<dl6S60r0Tz
> zk_PD(jqH>&1(WS=3D&S>saT<H1jh_c>3q`VDsTGdi?+hdPkt>iU5YX~ai@k3EQ1EQ2F
> zrtV#WQ+oOY$kjuvRg*<#*$Bxm`7^JxQZ_O=3D`O7!#qlXcxuwnarg76JN9|-RfLaOAJ
> zHq99(J_Sg|FjUrkjk7o!=3DF_#Gt;YlGOzi;m@S+`p&N|*iaGz%qc4hQ(L!d^tmqM>h
> zxJRT2@2NTl<Wl`r%K+OcVUwB6=3Dt!Fqka(7EnsM7;4FPuD!uU_w!?1(B)FlLynf!VT
> z_JSja+`fVX_Rj+NStr4I`goBu^-7@+0Fs6Xaz!TX5&{~!gQ%6&HO=3D&~Mnovjh#i^Z
> zq5PLQ6Mk$O26$gMD<c-U;2<Y)H8Xo3$j}traR9fxmJEN|*%7S}(-V#Hshw^@R)OGB
> z$h06zpEgf0GG}wz6T{-&+FWzZHJNNIUyD)2-L$WZR%{V)&44+-fTzM+S0#qZ!zQJg
> zGZuCQiE)=3DHGoArZ46h^yeQ8PfqV-1&n$-_AqLp4gG6LzQlp^e)J%)z<*7lo%#D=3DgV
> z=3D|<B(gFua^INB0t7EXnOPXn~(hDnW*|2^L4tfw9npHkqMAn<^}pnrZopclV!KN00V
> z#LGY~<`y|4xpw2<v2eb-GF1HrO)K3b_&}i~=3DfLnTs@NPZGnI{;j+lyPEE<Kk=3DA}qG
> zi7chizu8%qoTjOUD2~G~U21utTec{o(c83S{#TQU`X(J`ID`s(+JOiv{l90KeGJ`M
> zZ=3Dk7c5mf|F*BE=3D@)@%0ggDrD$T@9S_Q&k5%esA6(Jn>n@GB&jQOp(LAEAQbug6UgV
> zpGbbYN$rdBI43QY632r%|4TH-)tC;kK8S4${`HI}%h(I7z~I}Ylz%IA4>5X_e1bt>
> z#AEUEFy{pBKt0^wM>DXS&@OCPXxhHDpF%76-SdPC<M|M51vAo6Vfb8K*#-@BiqD-6
> z9)xrL5O7s><mDCLyl2Qpw-w>fpo3*mZt{0N5Yz)QgxJ$y@fy=3Dz%!^#-gaxq0BMF?V
> z;|VyTmP~}%B*wcuLYgz)(@oPQN=3DL`=3D=3D6wCAa`a6JEsZxTkN`PA#=3Do)sfe2?I*#$m=
_
> zR*i9@qKtmg|KJJZpL#~-W)pda4lTh1Z#MP5O~ehW44ry4{QkToD)(hiNjh4Lx|SfX
> z-;WV0_ZYC@4tBM|pwk`-D~jrRNk#NJSq$~{tt84+jpCC(2|v)tAKzY9@`+fyE=3DQq|
> zO_pPGri(dm*&c2GtemJcdM}%RO2vFuT$$cbp}o*PTBG*By)ztDvRiR(^Dvr}?`^G`
> zV%5^D2lJb>kgzuNkoPXJr<^AM%F-vKB!rQ>^76dsD-dy#9-cUM(I|9?ljyD~lpEKh
> z682(OSqsNq2X(-etHa3tzS7M&A-7c%gT9_2{sk@{^d^sy^$!aU8{@o~`Uj+nc>FrC
> zja4V5Uu4iU8Aj}+%2W&z4yo2aTy&>wdMhNhyK5jWI9I_WS@~=3D=3D3JmXQHO-z(=3D+aEC
> ziYl};cX#^Ug)RJ#7yKZAgu?UDQPd^qup2k23Vc%7#F{?EOi{G_1I{1!f2VtTav!~j
> zKeuzXJ)E9PPkIGFuhD&A_-OuMk7+9^H&7j0;o);X&Vovxl$^06$^D+YS*UD>`&urQ
> zVH2MEGElqBor-;tne=3DZEv-`9wFWl?+3FNyKf_4|YEXUaZMsO6`!p<Z_ISsYtU{l6Q
> zK6(KDfV_vdz#u5FS$rCr+)A!$UWQxHfg%*77%l6+BM-Xjz>l+a`K+WOffJ^s5OEd0
> zqt1u^qK!>DYtG+on@Vb?Nn_0iuVZNW)4C_B?6O4+$^l2^%2!VG-KII@;%^M(6a~%x
> zc`9GQ?fF|`cr$U-{gIP#pEQ#pTi2IPM<*Tz79p0g4;fV)AO)_v0}8BHG8MP&ehCoJ
> z7y>m+I_kwQGr+7NNxJED8iTE{Pj=3DHh0D;@F#A6*k$MHMtYhY;)N=3D`+5IFE|J3RU<q
> zFhSC)i&`69lW|8cll0UjLB~IRJS{Si+=3DC{~_TlSTxB+^QDYPZ&H!6SL6ys^k0JTs7
> z*yNJsRrgqoy8_!9hfeAwWc7ZAS5Y$JV{A6^bw{he+wq~Aq2PFQA?!kvZ91lZg0h?$
> zF`P@N=3DSrCt4>9LYoWvZ1$_Tuw7owRF7wfvK0Dsuuric{y<%GMesd#d*O|sOg3Rdu3
> zXAb7kYs5a4vy?!DfEO)m_tuBD{;`R!lmr#pt@Lp()cc@M69d!kxY#0}V{Lk7fT;Yv
> zAv5fZFiO7sg`5e62zGv{)4Hk3r8mQ0I{~Qtd{%l(j;IG?MtQF2v{uL6DjDlwN+UIG
> zZ-ODvIoiaTJQ37b4{mxl;=3DU3p&+j880}dJYkM%KkX17N~AA00=3D+o`8`Vv=3D7!zi^Nt
> z>i(aogH{?rYD<<X)0{*)N?b|8xw)s|1^7H_@v>gc>_P<O!TlhLsZr&g31$D>VJh~M
> zZW0YoH0%cXO^dob11jGNJPb_oJ`bBZ{pX;R+7L<W48oe|qdJGR&zDGug@~6|j>lH>
> zej(G(cE-R#Jb5*O7Y7U>ax-B-2gsUCM$nU)_90OKi0Rosm_yG$-D;Ai7Jv=3D|cvoLk
> zKiMC@F-Zlf!y+mT^>kOO!hadC3Kp#l2{JpaAI;@Kb&o9XfueG<hTguVS~>FWoX`xW
> z6&z}CxhlLjLt^1~Ebqd2nnyBu6P9ZMZ{o6RXCKJt=3DZK+LZ2ahzEKu1nBa&qx_*3<4
> z=3DlH{e2m|zq9A<0}%#B_uaVHN(;^YHnFb0soSyL(IQo0m(@Di$8fze;70q@_`juHX2
> z)DGGxlw8|+DIvpkQgsR6oya(LjP&}DMvW%F+F;g#xQFY(z&Kvy`k8;nCM9op<`wvn
> z(l~Mz(wat&l@F17VV+U5^|cklh8Boe7!p8%D(EZTU4vqf@Yt?p)cZ`RQ_xp)`4A3R
> zA!JWTfBy8!(%#%Uv)aQcOKNvT6P1!KJ$JtJXq#*7e&IXVe9wgBC`#$c4Xd`*VQ5NG
> z_@bNFiAEks$vlE*<5BGdh-Bfi^UAKH5*ED3J3Q3a3RdyF3h>6!ksd598#u4H7`?$E
> zFdSv81}2D(N1>ZE9+8LKb7$=3DN!x6lRNHszNq5hDZ846JgCU)Yp6E})I%t=3DA~J3pOD
> z=3DjRv$*pTz<{P!#ecnTm`_XFfkby+_!We&}0?MH}la%$VEeRPC{ymb<{L-n)Vy3Gmm
> zD7Nvqn&WoWCTxKng<oynh9S$;GB+#gK4uSx%0CSzL=3D+WalSGfOEJDWRsEKmXFdNT^
> zbI)juAW8GX-guqdzS=3D0~TpMkDsi|HXtzgp=3DHXg;sdg!5DW!deeBC`Yg0|KR!^cbpI
> z5PgreF)fh(!JF-l5g26x4EYRBi{kVg)zY<LQr*A_T|4FxhjdSW%iFwthrTSvr^8OX
> z(vOK`!~$}@dT7pBBj6`ptL~j7&I);Mc>H4TJ)W3Gl(%L@BMA>px5$m>S^94lw=3D2uW
> zGcD=3DnKBiUppcsJJQ9w8!Fr6%SlpsTqW#A7_y%`dS)gEeC^R{s=3DYr%-g0G-3oZUh?-
> zlYyp}6*ZTdkV@#@4td4ZWlNaV&WfnQ;6XNw4HTBafkuRAQ5oy(LwsFl7Xp_B2{P^m
> z&3m);;y(;XZY)0TvS^$A3&KjzXh2X0hX83?7CK#c^oIGH`2Q1^b?iu5@1q5REgrQc
> z%LI4_YCBuXtVCeZu#pp`UaqW@(xhWDVHiscmF(h90<Wr|h0NTM9FRm~m8!zpUD|ca
> zHx7Ur%0QbJ_jtEqn@!kbB!_VsQ<mcxKYF=3Ddeiw_5gnkBn3V<5NyEfr>U^I(*1mjsr
> zy&y=3DS?fI%)lP5XQ#sw2MThhA<X{Tmg7DZNww3;4efmfUsk}qL3L5W)L%fWhjJD0$Z
> z);1pouvUpNl)+(7I2MmVGE4~DsG3P87SHsu^(rtYIROY^bPw6A>(QUwvn_8ZFadvX
> zoHQ;Ys{o+W>-`DjOEP}(j(&d`?~|L+hiB+_T$L#U->5EGLL{vrfOs8G92uu0GNR;l
> zW(ODcn+z(wIRGuM9?)`wGb0kb&rIYHizeeEG_Y9ENFHfmiB8!Ll9|giW<!#>Eo`Tj
> zBRgmwKXM<OVmx1-7x@K7FtN&@n3*TZgYZ;PGB?H`f8-yLlbji6#z?lUt}dUBD5@Om
> zY~+TZYMcPEaPESZ=3DIyONZgF(yKdVKJ`Ceb3;x5M?7Kq>CmcSTF9U9NjxCrg6FzlW~
> zh@=3D<(v4?@keFXGMAvoC4IL_2LO{!ouT(tGouiw~u4=3DT%j0%T}~Q7(SBKN5k0Xs6iV
> zj&_!gF&zVQ>5^Uu(=3DP?ha*O^z<g)$I1E*G^rDDY7#r{A$)T5Sn2V-v}E3-g;VGcXr
> zNih$bvZb~+a*6>D>~T0!f;AJw6d8NhL*a2yyZ@ggHUtpMyNZ|tG0yj!Xo0`XCp;qT
> z2S8=3DlMNYMJSv^>bY&y&$TxK9mNccWHLr&*};}Mwg`AQ4-;jd1>x;DTKir$?n)xX4-
> zjb}+B&Q)~*(6`G!No8KpnjSW;8Q2PLV?%QSDfk-qW^uZ~M(~k8Ud4oA8Q=3Do1)O4W(
> z*rDK|_yjwdeW<p7I}tW)=3D7uGYks67c)2?vk@{`^PkVq$|jDMz&Rl5Rq`$iU*xGTFX
> z(IBlYeu^tCFR0xM1e&(OKw!u(kH21TcO<O)t`c&pol;vE-y8n_B=3DO7ok#<u&H5tJ|
> zd7)i$#c5ZcjK)uf7c{lAl?43g=3DM%PxO99rNWiQGw-#c^K&w#A03^g-xHGmn0X|N|J
> z_=3DiaDa@f_F9pXp@>L^AkEn{`7y)Kr5>Ki-O=3DaLC8Yd{a2<R+_wTtIK`6meBkR;5cp
> zMA+sI8}*e!=3DO%q;2TSW`KZMlz!}GuhPLV()CV=3Dhlg>TgHZ;~rxZ9_^3d-|-)?hz#S
> z=3DaNu}ll!oL4mOk>bO#!GX%>6y)CTUD+>cwdl^VZ8gRD{hWSl}sMs{p#R%tJg>+cxV
> za=3Dm%q*dG&+brKlWjQIu3)Yb7EfC|9XGaIb!0cggQ3KVto)Kz=3D4(PC~)yvE5-iD^RY
> zb`IP+7@5mR-wB(gcs5ZQOw>pOSnqc!-q8wXGHP65LTd6Xbvr?t>!VR}CWc^oYoQ+4
> z1-MMs;5+(*jP`1ljfkYAO-Tfq+U)sfsO+eyk1TUfq4v^#RMl!)y58LhE2%CpnfFb{
> zE+5Wbn7GKwWFhCX0GADF@9vAQKrpIeOc6!_C8~>sNJ6e{WNpB*u49X0fI);V47fZ|
> zu^Df>A7i$`-2DZG+_rY^wpNkXME22#dtPf#fVZ4#WRR&hy%~VUqx_J;0-`^&Eq1MV
> z=3D=3DvzyFV`-yXF%eNxMT+1xJbd<nq4s%-tXB=3Dd7-E|Dm732VD9iNk^IRuf$#*Qka++3
> zhhH`zdi?9mQfCrFkO$;ZRCh<yKmtvIiXs*pHi4GpeVt$3VUBKDItRuI$603MCAJ%7
> zE8{$q39zC@rC4Va+@jLP>^EaTz?@5mw@)MaJIs&OI_5A<zw@*|!&u3eG=3Dvmy$L-LI
> zirJ!NqjzEVkw5Vv#a%W@?!D-l-h0fOOiNghxex)pUqFr}g;7G=3D)3RrJjSWJiMBXVi
> zEmK@ZMUYK|FC)&mP;=3D2=3DQUac-6rZPY0mJVR3Q<*NYYt&8k#biQ;cTd^VhM82(;h#%
> ztpdmuw0=3Dw9K-r`e0s5O=3DFXBh4FsyMYi>*0N|KG|1<^_-A<<YT9M~;>B{=3DwlaH+9kL
> zIcIBLd@z=3DK(3RhGO#)gzp6?3**iT;rFf?lwdkhKNbxx#PJ9z=3DeQ5fLvf8(L6rJb?N
> zAzixzWo#Ak4S$=3Dkvggo%>AWee-g>+F3$453#QEWIKh6fSXKnD`is42-hW&IQ&Fdpf
> z)>fU}yT*40kYY<HoQp}~v`<hl5e`nW;>GZgBzLQC!Sbtx;3hY17sz%GLrJn=3D#P@^V
> z-R9)MPPj3r$mv7x<Xx)M0nBm`{DtH3yyM$P`9~6;QQ9!`kCthLvyaX|_r)yuHHaoF
> z!#tz<`M)qZ)_p-0*05!{y??{dyw$BXDx-&v_qG^q3<a~`=3D2{osy;1G1@ZK1LxBq#B
> z=3D;5C!MiySMmsIY~r639=3D^=3Dmqiced7z>ds$oZrAr*f4o-tclxAic2|Lq4Bx)9Cia`v
> z71)|BHhSH0<6X>Hbb&N)PQq$A1lPw>G>bnqVcJ&c0}XXML5=3DiGxmU~E-Z~TQXvrtZ
> z_MNL88*TqIig6YJd)m-t^}K79Q<c-vU1;)>8ny54l3_H@?K-%pyH%uJv^XJk*r+;i
> zJZWnMdz$e8mIu}sD~fG_)*_5XYU81pU4?#b#$FRf+~Jk3V-uG7COVeIq|E-BEI1~y
> zwt|)$;ZV#o1H8KT*4|Oa($=3D)*K;As&8P+JhHHlS5wLw(@ut!MY*oXli@dZI*eUN70
> zu}5!-<4u&*l5=3DOw4}Gg@4ib<N$$FAlwlE^*;opJko(QMbj0?jNk=3DhbXb>%IDjob^{
> zGM`VUGmPtAg30e^-6Tm!7?Funs%n7~ses1%vR8?UhG&C8%q-D{rTn%kHl*^EaPsTV
> ziPI;y5;plp{Zd=3D4fG4IVI_}Pax%F-ll1Qe8^0{~L*eB+|SSk9yf}xOZ@`*9N2_xfi
> znc_{V0la}_WQZi2#$jB<W5LmL8K|E8DC=3DP<=3DQDOl{q55;4W>Gch8o^eIU~dxu0?|r
> z-7A3;v`?-LnaJ&3&lhZ~s_i)&F-Bz9s4eKmLx<+tp4d`T%(Q!mUYhH?enR0t_?$gn
> zpYHeH6g}jb%^>9R1{TKlGW%1pD{1oDEPAv}G41Ycr-!rs(#J~FbeN<DAiEjm5ROH;
> zX!d1(9#`$i3OQ<c<_1y#Nv;|=3D9?>?BYJT=3DjelS4PR*GyY$4+!m4z<UP7k+oug$t01
> z4dr&K1ndRw(q`u~a9nzAZWG|cTxTuvsl2dey(LtwV@iJ|;A>5(s+5e#vrcA>TjoW~
> z*DBwYdb&`g$(&0DQn}PP=3Dp?m`xv4a9aoc{(<@Dg87M}%}+SMJ;nn&ELi9$~?4`Ljc
> zPfu=3Dhb^myHsTscA)FySxj1Y$kOXW`VQ?S*wk|;I?b!PmpnOmqSj-9(1&{Dy(cI#Yu
> ziEiu}twcU?9y^`Fn5VZ3`FLF?+*87wxZy+Tz#mqcKmX6cn64#c(kZwE0)bT30qH5B
> zw|6K~U;8VHCK@Tf1|^;}dN{tgk>c|y0Qo%X9?O7iEqg+KEkvwi9uGff#C6feN9cCv
> zslaY)$yX6-gb_6y$_@I+^sB2Eg+5#m00Vt88-Zy2yvYkv_~xeK9VIj|_K<C7{!2eO
> zHl4K6tLSliaipqt3E852#6N7{tuNVcdAAK3sCnGKo9h2l_lM}Ex6fWXU${kZI6Kka
> zI?>5qX3(eKi%DI7lL($P8*x-7bQuy#>A9IKg*jmPy=3Dvv8Bw8gQXVgX>n3|=3D8h-qxI
> z|N9G^=3Dk{F}zDh6N(t7e?rU%)hL=3DJ3-G?c1LngG%-W(br<d<eCBMdQ~RUYg}08aDg%
> zZpPd%s5DtiAfd)*{cMI@p|F9wh%!WB89e0noM9zmmHVA*w)w}Ge_G$k-Yks^nLEX@
> zLl<ug`BOPQ{e@Kx{`?XPY7|43a#ifAPL@9|&c~Xl)O*u&B0yE!YS+EGfWZcY_IZKN
> z%Ex5llCU?jbCQuYi`AhD@%+cETEs)yfa;Dtd2oU6e{)(&U(O5Hrum~e?qhlGk2R@;
> z%#bnUa~k%$EsqB@Tx(U=3D-LM@v6c>WD*F_UbF(;q%KjcG|aR9Gvl>MqF_Jv-4%wE!i
> zJaIjLh;1AGEy@$pe$=3DV?tQqCDsAu{S=3Dx>{~ur5K)2K<zF$m3}tX)XAL(LbnDkxpHb
> zQ{9_tG;!8y2c&=3Duhv7w5*7#V+CiEmW<fhmjb*pd&AjhrRYarGQb23a>X#!h&Hq~pR
> z>cuf_YsG(ULmL8t?{;Q1DR-0jnYkv6O0<DaU3M9V5!1#n(^~DzGK9T9zcKRFGzKlo
> zjZupJ&}yMxfIy&sad4(uFsJp|1E;u2v3cF6y;^L8AbK4BYNh)V`jhdF3<C#EpFtWF
> zC=3D0yn!c{rE87vy*)KW2X;)j>`hx;HY&N_GhJC`9Y7s(O46j|Mo<}KLXkbgX3KYCn-
> z1#ROj7eFW(=3Dei`X*Nwx6!JqZxzq53X8uDjtIhUTxtL-X5_q?_bjR)1Gd=3DL#(6w|l|
> z8TL?}hnp1-;zQDS9aW|-b0n(C+riez+nAdhy4_GcTMSH(V$$7L5|r@=3DV$y)%)Rdnt
> zRhV-~H6fsDVat~5)<7B@yH@e`7^Y>1F<j5K@(?$_8I&VkDwz;xw;Hg*TEBg@@ghHw
> zf*ZM(D}<n4souY=3Dn|&5Xu6*z8g_>8s4zElhVseSBSD@22t)sat#2?1C3}?h2l-mj#
> zog=3DQjAk8)^5G;cWh*U%R(*1k;-yf)u1hp2lzD)?Po)Ppa9fR`@Kzy`Cn(|&x=3DQL+4
> z8~}$cidHTJ6^7h8*u$(Joo+$OmV&xac^C7%0~F$<NdpeIfgY2zcVOs;njSeK=3D^we#
> z_A38dMM!<nnWx;%8m%0qUbRa^_30#dlNKefGzUR$jBqBlIrxfHyf+H6ZIu&y5uRRI
> zM_+hep}(s=3D-lNM$lmv}>A?z;{3N`o*qg^R~MWyXLbow_Kl1n4IOwiV$yjUQj-`!V)
> z`xFMa8GDd*?aI|=3Dv_Q?H;asew0+|1a`M`zLq75#>kDgHScJrx@WgG4(*SN7@WQ*fg
> zyt_32Ay?R%14N6`aYfKO?CoE1rJ(93o7~m~`b1x(*<C3elt#oAkxpga-94=3DUbIOBK
> z<GFg7T&C2@ap*jff(v!dO~NQTKO888W*C9J6t9TdBW=3DcO#~}kbYx1+?0Cy!28ihwE
> zekNj-4ORVwnvT~mRXU+`2w_BreU@`VWa);s|0z^YdBVVNR81a#en%<bDeOo0M5}rv
> zT_}4&!3@55ZGU<eyQz@1A}q-a*E*hf-p18CVsOhHi$%=3D>-S(|;9HKsBZZq=3D@sb1`I
> z>l*e6)a(7FGQZrnJSin1D30O@O9>Mi=3D+@E?08V}&iuByT3r}1NfPrGw4&_nV*PTsD
> zfQkW0mq<=3D;&`4)hi?Y&_G*e$gMa4WXtuiKd=3D;0T(t{lQNDqHlxctEN|lv-v)-}cvb
> zZ#LuYU_kvR)<9k93(_%-XLL_y(%A%C?#Py?OlUKWT_*6zq!B=3DtkQP!U=3DTwvyE@{X=3D
> z{LxAh7I53CGA~=3Dp`&z>saw0Aj3O3`oNG|KGUMK>tx33Jl;0I{$v#k#oWtRp>IQba}
> zK16ZhxJ!6sizv3&!nKS&Z+E$`5W$5unedJ~5;?N}u8eIIAOL5s1uls`hU}FWJ)%t6
> z73YsPi-dqv$N#OK@<&e^RMm`NvyoWdf<J6CcR;##a|rb9OoYGiy&m~w9znBHur~Ty
> z`>O5bcr=3DpL@eCd%OkXe>@0Y<eA4g=3D2Oxm*oLA4om7hY~?)GL%4fqgVFXSzl8w?dGv
> zO1lYu#koAp9@Y&wGHELQuA*zo-bf+pT|WSmaEj9z73C1d0Kzxa&cp8_?~5dkf9vGS
> z)~ljtV>%ZOMrxi5=3D;szPd}$s)NvdL0g5-`&{8}B?goJc+?GnmReX;P>(!`x1=3DhLfx
> zNA^=3D+`^QE?O~P%XX+B@4^Ex}8xo@3s)?T3Xp#eo>W1K@(Cn$aGwUHL>covVRP}MTO
> z1>&{0Qc`E|+d!8|<LkRO%@M`-C&9E#G2$(D1Kxi|O@4#+j`mRsX$aCYgY#y6i($8Y
> z7}Gs;G4Q;BmvhruNu{KCFDJ!J2j!EPG{K{c{93oNdWCEQ*@4JbTyO@S&7ZDq{JC5f
> z|6Kbzdmf?a)kPu?vj3c;J}J@VgV<1&O9N*NfapyVXcVePfTDzU>o1?`F8{xI)o~sS
> z-4Mt~l6lx{Z!alk(hj1gE*8kv{I(Hg>e`Oi;-n99R6BagkFXDTgoKcVj~KFBOt+c+
> zX5x%*HRxL2jQ{A%?|?+-_lRTk7m?Sa)qH6c?6v6tQza!)yLASaHxPhA)oDTx6c1xd
> zH&4p`A-vy!UjAxAbW$gc2}$nlW#0Dg2K^z}5o#NQ4St+ILQKR3d_50AJxMt3WVkyH
> zNk-JncdlB1fF6zAp_W&qM7M&aln@MdJBW*x^gtLsEZ~-Yr_i_13+yL<Lcts&Dqt<B
> z)7ay}>B~iT>`qK%))=3D{7czXZDA6WKvyN(P7#Ztgee;%NF+|wj4dAI`E+_8+H+B01x
> zi49xDEz)60|A}aW5JhwN{;(-9<uDg1g=3D~pq72NIj38DeuwcY(VyM%aq>@gxyT|5f4
> zJFk~|sEP>e$rPTBT36<V?b?M=3Dd0i^&-8l4#b70Zm^BIaV2u94nqja2)X1i!zc3zSr
> z<`m}UrP#B3<d7#KJS7@MU4WciIO;9IGybyH7?&+)q^Rp@9BBfan_`LEsy7)@t=3D9RQ
> zTdZkVC_M!yCReYZpA60&i-dC7?mQD*8|x&xq3=3DG2alSLL_t24#X>G{98<{>Lj%T1M
> zu}GawNn|5eF7MPv+SW($gWyOrUUDTVdjdKkCqE-f2l&33&V@PNhq?A9O&g73S<#yK
> zlqO~t>>gqYBZ@UGX_Bo0hb`5Vb!DB^M^@?VzO)MNeVYP#lxQWgUpDA8s;5e=3DfT5J|
> zNqb;b0}`*TZDBfMqP&w+Gw~TTQq1!sProMEn`ZE`qq^U8s!_o8AZ@tacsU#=3D*R4M;
> zD)OTXU;O6nPG?8oG{F-ITEhQBFz|wL=3D-XD>2?|#`;O$kIdZNmw>d#W{ht*nZed9Zs
> zus%Cdugwc}BYrW$Me?(X=3DCNYmc)aJ06*mkTlUgb49DGQOz{8sBVDp&}m|Hdn0HgYA
> zw--o-2+{S`&z*>KkJH2{5b>KElY?4pIuEemU9kpR1$`~S^suhJsosa$(uXTOImHSE
> zn|$1}{J34TUHWyAZdL0sECzI=3DQO*HXB;f+B6aBGx)gyKmin)sc1URxOubYP&p}jJW
> zTou8VFE~qbm4|9<(P5PyyCqR;Czf8u*<Y?MKv7nbA5geBN9zsbLRVOO*GU@J@eEVI
> zr$siX7Z9orDs(x<BQXj*Fjl1Uh-d?W<rAbk=3D>vbRFg(RW{Kmr9njQ_BfmO~3baRjz
> zsE~F;38{GCnL`@On3Ebp!7{4FdOZLpV=3D1*QJoeA<7{2hP{@46h)4tWpEJ{j(#8Q5O
> ziVNA-_MTF$UOUGq#F4aAC~C}IeNSL#69QNXfk$oC^EOCL#{$<Kxk3&fe&>?PxS}nx
> zu2y{KE_JHrH1GE5m9NGWS@MMPp_C(Y29R!LbItZD>`f4&I(l}L=3Dw52Lo+VTqc9O?H
> zz37gOcc%pi%@_^hg%lm*V2dgz53>vEAu^15(-xwh1n>;CWZYNIKisPPG2+j({z*j~
> zbGiMZuXkqQbPcB3!<OH4oGuJcmcdmyDZwdzZ+C;F;rG|p1@9RTzOK6xT@wvVJJZyJ
> z6$E)&qeDBoTdCPG2)t{s_cn@<;UsF>7uk)_cb-{Yc>}*ZjDfQ;#PWqp31S?b%?i+*
> zG7#R4=3D+P<9prC1=3DP4YvOLUv)^fnYSCKFSQD@-vQpCO7Pox`UmEPX<kQ-peX7fETZk
> zMumBbY!DyEz0>C%9^t$OvJC;D(o?Nvr@|#uwfEsli>IHkQ@PyKba1&c@AT(x(tX>!
> z))~dPE;DUscC;_q<*Qwoo2EB4{iO7_ei1C}qb_Qk2jJ{ra1fx;#uOLy?1XnN?Jxi|
> zSD*95f|GZ?jVohu1{<%?rzw`sDyT=3DG6Qs7QQ_1-#fCmo0M)c{^iXVL$w9v{In&*4~
> zeV~+S>xRRv_}UCcH?ZVg3Q(YI{zlc-A1EPNIS$~x`poT?h2!sh;Izab|7=3DFEs)vlG
> z)}O13lLEGn@VNG#K1F<cj*Z5TOH5I<X_y>I^>xADj}*M5e?#16a+uZKPa|ca<$wSL
> z&5k0v1)%elIm+|Bh2%VGJV24*9*mnA`|JU-J}0cJ1`o^eW8NPLS{^_qdGfd?iaqO*
> z&}ZNR4UxPGM2XB;oZ!54ZqY*Kp;|~x7~FE5_(fbUea_Q>+$?8(Utht)>=3DMou$l!^<
> zwpsp^k@*b5zL%~1nw$%#eQY*M?f+m*wf=3DZ=3DopVo<&W*;N7j03};Z)|8!?A^y5}Iuu
> zK(c`N<r2W7sV_G0A`j?3GNBC-q&*Po&4VzE4z{$PXz_J5aTc4u&tq?9Nvca_$X6Bx
> z*e<m9>0od0|H5)H|6I|XKEUjqp`hwfgAxO3(OPLf6AAH_%u=3Dar?M)m>t5mXjBI~-9
> zfwMl`83?!%2}r#3sCO6iX(w=3D%E_dMqA*f2bGEOx*nI?PjsXD+K2ZTS)S7;nL61*9Y
> zP^#5=3DpLoy5=3Drl2|pY@$Xrs|BiqH_@g%G%!R`1ZhCLHwXr8oHg&cPLl$hP&U#EoSo$
> z8a&il!I&r31@Ciya|q~5gbxUzI+@)m;cCA+(V_aZ1xjmL${3Z&GOke(V#FZRy?+&0
> zQS#JHr8gL*v|l?Q60=3D-;eX9WC*AzVQD{jcwkmG^Z7WSt0UVs$YdNY$=3D4CYrP1WlGz
> zA(cF!DAJ=3DK958a-A=3DZ5asaQMkF}NK>E~Y0VNu4$cj)S`PH_NYaj#V1H-XqmV$3n8l
> zc8lXDSGg}1lw65QoOl3N_rsc!g79z_2(!K+0CUio?@>@zvcuP1<*}Bp!3!+k3Wlm5
> z^}ULwN@k_;-H6Co2X}*GbJE_wl^b<^TQs$%f%R-x(B9y}Ud66uV!@6Fu)!}@CW0CI
> z;Mu%dbBeFOE!5}Zc*qMb#<c=3D(jyD11$5PTL(j`sv4Wrh&Tf?;W@fW)K@HT`$%AbxK
> zHzSBK0TP+Xl`pwc-2K}>+3_-2o~}tyUyPnGDyT3n!VhT<ZMio`7sx}T%3EE&??3)L
> z3d@Yz)Y&u%eK_aN+K)*fJOqePSMiI`V6l?!=3DV+f@RQ*P8zQ^@R2A=3DkXmUo<JnAbdM
> ze4f4kz<Ng~Niuq{3LT!M1+%aq%S~r1>A(wk<owz`S!@uv+Cbl!u=3D3QlcBlQf=3DNHf4
> zYh&x|uKdxZYbgy2ZOZ;$KJyRtVMYoSdwPSZ%R4>)+@9E469`?pil{}SuKL#%KG>?#
> z|E~jUya$Z!1(sq1V<=3DYQq8!&n_Q1%wi@Ih?U{<E<8Ve(-mC>n75XZhK77A-jSjhRD
> zZ8xU*SSwALNgESaxsO&Mdp&QXUy92}jhl5W2-#u85G=3DJiOqcTH8i)_^FE#72VotS-
> zttQ+X^15F|QuQO6YM6xdcY^{P0_#KgEinTcepQ&7<nD%!0G=3DL~wQo0F&V7Of&ZA%_
> z0<wz)LwJ(_*il)ecp%x4tlHPOpRRY41+dk_N4qqu*I_X+DStKP85gIp(f(^(us83w
> z0c8Ef<ubRT^BkJZ%c721v}#t_PNJGlJx);$_u?^F)h;|W55byNm&*A?qVxJ1RJ7Ub
> zd%Yp!T(i^Az+8IVsY#CgdUPPw5<s+}MNd)Kj)H$W11dy2+BlO*UQiw1RZ}c9Wyi@=3D
> z$P&mE4IC-|)?mB;tt4@LIlXMN^tba$I(qBXWB)un%-D{4v7^8Ka)FLQ|8`z=3D5V^>u
> z-_Q;%&6TXV^?y`TvhZb?$*p3adINIPP7lQ0_>mT6%CK7&l6YqJD9Q3VN)4^B1%NOI
> zhfqCMlnpKyTcd_%PV4;lKL?xbFJW5CSI~|EQcv6UCQ}00%V}f;pq=3DfHaCT(zY>}@!
> zsCxFty)25FB5q~aU<T*a{z}W)cjkN_67C;;7#{I!)0fs<@ft9$6nAG5#=3DZ}3g|+E*
> zVtjK)CXKe7Z^ax7r2_@*DIqDCgMVgMwp?3QiXg?a%#|I#nK<m0%OB*kKnKW%?)Q#`
> z0_K+)l;xuC=3D87NGOFdg*mn*$QGMnj>avezM$mwUmA0fi4Gb?W7(e!7jR!+`U7^9)c
> zie0oeocx>7s#%|Qx+1jK9y#drIRzv{Q`eER+BoQ!IW<HL4L2R*nfC+MbmHz$ne8hh
> z!BX_u!U(A9E_!QP#sCD(Idx{E6BfJ7i{rpJO+4n)4Hs=3D+KJ!6(Pd3<mPF1JnI&eG;
> z4QNs$6*-HK7qN>R<PbsVC@YGC3i*A~qO1Lg-5vnh{WG3OPbskZ9X@>AR|(3Y!a9bg
> z6JJc`t`9;bBCOa?p|Z*J#Sc|dTC$zN*ChU61P)<H_|^OO%cxKC!HL!gEQTDf8NgQ@
> zP<2e<oDmcgq|*CSz8YiI0epEyabYuD<CAxc?yoMR&*l8uLk=3DN{z3L9nS3QR#LGT*_
> z{l0HA+O$LEHQve$wjA;miR?`06u#40@F8|&KNy;qXVJNFH~XnlPl^vq;$MpdG9ZKI
> zMW8c*NV8VGp?f9Y+dCzy_HiPrsST%XZN_9(SuT_eIDk|5KNc7obVLa`54WSqoC#+u
> zg@S%K-iqO<aCA;bo^hX4^9}&g=3D!lschIx$pJ8Y-qD)a;%A(Tvaxv3G3D1c;00kv(C
> z@xWr&-4I#b3@1;r)Gcpuf%4{@H-lslY<!E@nxzxdM#s|;;)6efoI9jE!@qFnK-$XU
> zu!!+P18bqOS?{nCJc=3Dso!MUFXC77#Qd&>c#u8vT7LS*Biwr0H)5lI-PTJ?jCj^$A|
> zu9{0jr~3ku4OMQ89;)C$+GLQFL_Bo-L3%L1&74^>d9JHuDfV!$U9LkL6B$flM$I^j
> zIUNmuF$f?kqt7GOXV3~oi7F_vAb=3Da^m%c7;{XCc&HG1Vr0BV*YTZ!u_MkIjadw;p!
> zGMz{yW^uh)UM^^jmlR)~APPzP+92{z&k&Mn&{ed}V75usaGye-4)qs@7r~s~A3Y_G
> zU^O~XzMfSZG(7m88dQ>RNHqofy<)latgDRXG<ba-K(6zS?04J|S&}(l_?pIaw7cTh
> zrvjS2XQrgJv98g(HK1L>RMs9GQM|_NPEXS!VmFLMzn3T7bZh}u_zHpz^#1w(Ef5#{
> zp+I9m$irY9^CP-D9EH`>I-LC0prO`(XzPZ%`>4EnkTn5A^WZDBE~ngh&<nJsZzdkk
> z;6J3I$tX?&^@_M3+UTiVax8S_v*0Tw8h7YAewK-8u$hG8nS_G^2%J)vuTY0+vXV&L
> z6X|(;>QL~9Bs9-Bac+2(4t7+xE^W4WrgIL8Ddy}1v8j-1XYG%AX7oM8c`QD(>lA*2
> z3NZTv6hg#e)mEB9r635vzbSVyU+Y6Nxkx)Mr6gBGKPoa}DrA(UKD2gQ@R^1GMDM=3DX
> zf$t!s%~SuOk+SzQqDm+Y8a+&>w=3DDN<j5?j`tQ6dGo)pWi4fz=3Dg17diGTrO$#0aI|6
> zf<JbVqc`?~+#zr6KmV*v<PS|$n37->Lu4+Ozev+}LR&8DM+6Q;u!5lByjT?7(7z=3Dp
> zU-1!%s6%U^P2Au4t^gB1V9w;1DOh3CRTpsUYUVlBE1xT$1ERKY>cCul_6{7~n#_l;
> z!$KuJKWn^nMH*eJq%s=3DH{T5X<V_G!R5NByqE!UZOi=3Dx;ONhHHL=3Diz5uux^JHKuqMv
> zc%`LQD*Bg@s)^4-Vehdt5RA-HY$C|EILT8-?C^wdW8xZEP7jCJxs1Pl(+NAOrR-%H
> zG)dY9SaeS;{}GrUKy>wQ^&7?m<hf{S^*1Mhi`-iP&$5<RTy=3DdxblGk9PrT#1T1a{q
> zwk)na%=3DJ@FidL3Ct&LFchj-Hzm0)E~Ms=3D2VJiav<N77I)p$5P>oQyP_GKD{jpDGGK
> z0_;8%?+CS>N80uu)BER>&k8Z}0=3D^Vv!q{wkek1qJ6%!0R9q&*Gj9~p$(cx{T=3D;703
> zethQlA0Nsb+!*BHrxG(F(#CG@^+2FeBHY`QKVmW>+Anx6{W+1A+(l;QB!cSnZjX}E
> z!(v}n4|~tc9zSSNSzj?H<7k81lolzJtvnOxd_`Kh>>=3D{PK}STKU5~vnJry1J%QRja
> zTn7wP`hU7CYvFoO4SKxvWSn}ai@fd~MBM0U(S&iiCLg{OQhY0R!<VZzSS>k>mg}SY
> z|A8iV&N!MGO~wUZO7Ul05|TtuzrO5@)8h@-MbP;X-B`~5cY~cDFxkBX-k+24Vd-EO
> zs+@!7{bHZi?jZ#>?CcY41fEN2`T>Ooe@2C0N%38h#)6)%9Bo0ce~u(FOYXBEqR<fv
> zd-O^do2!^mvGWVNJ5(z7A)!?zmq;x!%_91JPG9CoKRuNmDBR>7og+JMsXjsn-uOj~
> zmT5RNIpRg<yaeFS!<9UHR5~2;swp;?+n$bJJ8ZgsW`GUA-zWkDEqUvI39Q}^uiBqa
> z@d#m%$2@7*?qPii*Pdj{#To=3DLTqY-<Mqc-%D6qYUrD^Y@GiN`JE0?eqImC(bc!mKt
> z4iI`twBhTj>}H`qDch+!<$%WIS|=3DEBF2@3;+4;)$TZrkO?g6c-#FXFHB#B_*`3f~M
> zp`HzKF6D$SKW!|O?8y!l!v!S)>x%Prd~JsR<!F=3D9(Y;U>suX2ZvNM-KwOrshLaWda
> ze`oknj4cwK+XB(nov^UpO&a?y;|g>ufKGJq?R*xcW>-^XAf)x1=3DqWDfi(7k0&8rna
> zXq|rv$`Y4aasaqP8ztO*Ov?tmOld|<fDJ%1bUx>{j=3D)io)ckiGB-U82rxrL>CA4q`
> z*((4g3LUim6eL9I&KWMjbP0V`t!UzodOigzW!IW7_0GrmCItMh>+*3ngUMD98;{hl
> zfwVh?+*T`5*Jm1V8xVNIY{j+Y*VL>i6ll=3D>JGJ+gCF^vPTOI5kO&wD^D{5d|at?j^
> z@3j#96%YYzlE$tJUun^469@1n1X7$nfA1Fw>cyM|7@p1rhpsr$hwlm8n_W$=3De#2nj
> zA}8hcawT+6{(5e$YtQgLqR*qF#_mcAa2KaqoHMx?tqoPGS{P*nN1_TW9vwI!)$Upb
> zFt`6-y6b0WX=3D;&s-yiNUo=3DTK2BdLd(K?`lX-QQUv*Q2<amER|HehLB2zbb{>4AH}4
> zI1N~fTixT*yG3ob959m0^tK9d(JQJvsS;&>u?y6dwGha|m8LtB%^(3*d^t2Fi91Ja
> zbH3Zqwp87|j}lWf*>n}o%ItctJdX%SAo-p-vACJwR6gj9S#?I6Aba&A8!Vlef9;7Q
> z#WLbd$OI1)0_*Ge?4M`Fi)}p*vo+(_7u<U!oLO6e-nrCoy3cup;zxn@1rB!b^^K;J
> z;GoU0EOYq<?oUbhtkt|%9)$M59!LG?({(0xQ9%;eB8H4|0Wx<1J2D-R=3D0>=3Db-RbnY
> z0A4h51Lu$+v<X}5Yc5Pg<3nx`GjyB#Qceb8lF*bftE&5&&CjC-1@~SLclV7?=3Dc=3D=3Dq
> zS1&`4lfF$65VHXFSlYBjF5@cJ8)X;isWyNRZ<`Iw!~eoFc(cz4x%-~5Qh@zHk15E;
> zTPsUM?>n{9ju$E;3=3Dd6%!J2QP9>=3D!GH~GidK6L3j@Vq_7ztx0fTlSoyWdd7V=3DNQ+L
> z1D5e5nI->O&R}NA@wM2A*>A=3DD7IRB5kgT*$w3D$1H4$23@-eB9@bLo5x>O>mNrPYe
> zp>(Gx_m&Jaxm2Zc7<B+p-Q<a8Oj{i1Ys39rP=3D{V$wg%K}$^`pMiWop8O<<}(RH!+2
> zWV@_YnZr#CbzE>838@14C5-oaWsM}Ag;VP_=3DtmmOz#a4o?`7>|&>=3DXP!uvp4R+jl1
> z!ub*Km9X|i&NG}&z|f!;{-cNeO3&<j87Y>d$;vc+xeXs9l%e=3DuH(ESp1L_0NZOWky
> zhIBEQYdAQ^GuN9L31(a~0p9P<R0*;Es1j`2*I!}k9STp|<{Qly+Xb>zO)b$0?YZh+
> zQgn@FvH$c{(tgQlAc5yObN;2icSviJC>8f{_A)NfxAkdB5=3DM7QgExhd%)8*$Cd#YU
> zqo9(l0MA(YC@EBVUD+xDoIzt_gelTCFOjWOleJn_(~5(9lVezu5d7zwIn~{_IIp#B
> z3-7CGz*94#RjFh^<XQ{7WFzwLXBYa#^p`xC$Ua45AuEV^EnVhOiX;a&S4I?7W|Tc_
> zdHo}W`0<M(_AmRnkfOchB{Mlu6tC<gpuY6nh^C34%`@>b6z~xbmnvm%tBo6C{x9^O
> z2O07?#hX2kJ3fosSqk+)^5zYgz|HXw>a+$39Wo&qaUVCup@CoB(MZURDCrzY{`c;F
> z@M%4j^Dqhk!9LYycH|IE5FFKcS341V1yEMz@}+7pIM&KMQF9$IiTEfy<-yJlE4Gty
> zy{MPL0Qx-%y**tuDzDS2Yy*J-nJv09lRHpmYGXM+i9ENZnAxIk8gyzDb{L;q)c7IN
> zo2#^GCVY7bgB*<XZNUsa(Rg_PL-x0R;&y?ECj3x<M(AoxeFL0gq7WG%pYh*^o7Nu@
> zD%rkgLon?owxXc?R;#eQmt|`muM$sHDK)AM&F9P<6$QEYeoQupA>|*3@DQ}sb=3DP0=3D
> zJmkGHggy>*1UWIpR-kuylm<Ym*w6q>Ll^$*VrhDCWW8iAC!TGfZOpo7KgIZ}g2Sos
> z8%do2%-EPWES%xrp4*i+GDVjiD?0krMB6g#rg<r9Zds0N7~7$Uy0TeqK~aVQ{4cRw
> z$6dm{ABqiN#1zNq_13DVdk%$Vo@laUg)||JwHM7RJ*at&Ys_GfHu;Sp>-$%JWNI2D
> zV=3D)S3-trEcHomQ-i|ah{hMU?^BgP1K)TdCUQV^3Dh0qb&kiXO#6zhj=3D+?xANi*-+r
> z<AoX;>j%0EdbJM<pG9nSwqDr`dF5tnniPkr=3DrIJL@^d8cUiwgVs%X2x#Zn=3DHq}dE%
> zrGMLLG#K`wwu<s1ai2eKeFQ2=3Da}az<S<7b6O&{JI>%H}_KB&JJ*`8Oth3$x_|FS$3
> zOc+_<`tl^-jvZV+DNARaXFU<R?&xl3;kFE3^q2j<=3DwRhZjB-Noc3`YlMS+nnVD*4F
> z2Pot*vp(VtTK|?0Gazlp#GMJi3QKnr{m$_b(9Rbq8|(?z06pR;R@M})sH;vaAVsw{
> zYCj0KFgCAo|1(vFCl%|*SOr+yO<)elp+MJ0x{Xzpc3=3D`!LS02i))-(|s&Km_@*p1G
> z5<e&1yae-}p?+4;->-J`3O*dVzs^Off1F@oV;^qDc!k^8D}A=3DmQmX_L&{UxQcUb&4
> zBNdM#{iINtlB~D?E<nW)72@ZL$7<5)1<g)IaBLBEUxn)8lMP;@&?u;k$@bkER}X;;
> zdW`0~x~1#8*yHV9z15t;$1b3jVU#6xKn0&yroPY9C&+5~GF7TtZNmt2DKWqkHxiZm
> zDJqxI@5`n9tLdt09V6ktBo`#&IAzKv=3Dg=3D>+KJ0e*x36(#YE#2(A&<hTeHfNv1xNEo
> zgZrVp5WICeg(-hSy(TYIq@fn}RZjUjX$PRM2yt;q-9*9a8;P&Emu^DvPkH(BC2Vc+
> zwo>JOpTr%L^gmezcxOvdzLKhkab$wKXFidcdDdKZa^0Xf`UHw?<#*0Y&WtD^+{A;i
> zT%?g)>HMQ0ifhUhg}8oEUB2hCT%HAqpPp*QO7>$P*NHuM(5z?6FydmyY>~^+Zj&4%
> z@t%>KWPhi8Fcr~q`(1Ir{<nAp5_&t+-W(DLoxeQ;Wkp^Mm+E(LYv|MvV+iF}PDJ)c
> z@vSw<r`i1pqPx)Ji9i0&LZ!#`c??K<nZJoZwe)@DAqey(CF4=3D^vC_7ovAA|ejh<p!
> z5j@G0&E85v%qyr~-5anII;OAH48L<||5Y`=3DTPu3u{)g+{d)Fm{%GZ_u=3DG;t{yxQu^
> z^h|RoXh4a-)9*;4zJ|r}cj^cS0B<<sF0T-FqsFY+Ik#PZ0|F|Z(7nIVdJ2()Yo;=3DU
> zMNjz5Ic91LYQ2s@Vp>~wY<%UsI*|%LvP&csH){ah76gbaeD2hHsqBPdlKWOi`o7E7
> zOIt?Zi#&$|cPrt@fG?1=3DnFvlFO`_f5=3DJ8Trw7VdD`2!ThcL;WbSqmihjcrqlh0>QM
> zm58S!`p|_|khCSb+cbbs6wGqvxM`Ky|E@Go8apauk04O9oT(4V-&u0cg(pHhzPDb#
> zzaYA9DAX#x=3Dm2$|QOvB)8T-$mWO>rzFy+DHiL0Gorv;a(4_8rT5hg7MgtF7YtpGoy
> zPq1A#9TdOQ>D<WZ#M~h2B0CHdmm7KPyCt}fZ}fK3eipwfEqKWz1T5)14418{@a-=3D;
> z%9@0R(-_Cufb*w*68y+R4wt5a5%M{KIigtYHMHumXXN!mO}zZ9$hn#u7{b{dpkKDc
> z%4%8uSjz3#+bA890vETXVg$-105V>{N}2SCs7U<#mB>mNVC``t4^P}SXxz^#FMaYz
> zUSMRiQWH9kviH31;r*0N;&I}v&CHEUe)yQ~tjzO>?S;EQ6Uj#2Ym#Ol9bgb(j0pJJ
> zo-c<`v%Sb_2Bn|S96Xki@O0A`_NVNRpMtN#V5WE-YTEjXK~Ar*Ff$6coh{5wM(JeD
> zA@RcNv!kG!=3DL|<?+Lq{_aRgNU_xHALm2%*!Pg?xLAtIqm#8NH(d4T~PHrhY)_dC3g
> z8H`K}zdc)DZB~-M0mGmUdmixp4b%KL?bNht+VLP@c=3D@@C^8?C<3311%ahGm%*)xsx
> zlh#F6?$iP>o+V>eOiGbZ@E}TKNrliQ8o77D@-!f6)#)fO0G0naj1rnnw(_4X#k4J!
> zr&85`db0-dfQA!-aD{_OmH8!UypZtZj_!Yy=3D+MdqxAZJBd(KLj$17yiETPUoNtEe9
> zJ5!9cLp~dNfb+5K$o;pvqeNUB5WA}AI#p~(5jWIi?2%BDRkdA4e?n7nj5CHJuEGY!
> z=3D`ny29RLcsGxnoU33x2#UNi8>47Cdi1}otVzL)0LU1G)?a1XO7@PE$;M2Vzag`pV{
> zc3z|LIY|OC1{1(UUd*SA_r-0GQV%pXUaINXiF4cG#LPOfghLLP7voSHf0eXiD(~dq
> zm<+@L{{d`@A*9|ATbjcZgRy%hBV4X(_)jCrS!aJcn-GLkdIh*^2jw<*?6?3>Jj{zw
> z3~n_hR8&!Q?QP}Rx@1u!2((Yi*rphHed5w%X_RjfQ-<tA?2;ZSDv2UKNZ^-;+t}`8
> z{QNtR2reNq+s3d^Tvyy?JT=3DVjz484aCpzthUH66!{DqXOU}MV%@4UEslb0XTGIwAV
> z{;$6=3D6PrX%Do`OyW;job1PDFNo5G8vW4R%kFznz4WRk`h@yVA{sVl*V9YB^M8Xc|=3D
> z|1toxK@g)vQy2f=3DTEju7wD3P{Ie0;#m@f>L%d`|EUSRDT_!CDTlRSUAU}KmUaE2?A
> zjhgPHwOS+{3XZ<0Ez{~nV976RV|{A>cz|}gz3*z2mYrMTyrhU3>`p0A>pVLs``=3Dwp
> zizHL+p%C7R+mQWO?GAwAIUsd}1P%&GoT=3DRu<uBUym*N<_5&&^9-SX~TgdLf{qiDha
> z0fXZEZ2}rH->Ew5O`ZgH4EH86@h`4lOyK|G#`|k6j92be!b=3D?Bl>N9s@f2TzMD}F~
> zUaw_CSlAHiA`MbL-tK&~?X$%<)5nbw<U_YrP>_Yf$4Df43A)$#d2auQfxVKt1l6S&
> zfz$;Uj#m2%@(xiym&D9=3D1mrl3ii(TVSHtViH;YN@jKNrxK5mF#CDW>hKn;LFb)`NG
> zShRIQ2?l*b3SoNJ3QY0dYhYO1q$Y^=3D+qv<;|GzQYufULqp}J*uTT;SL84ZM4d<@2a
> ziAtO8=3D>12ov+wI<gFb8JPn>ecV-Ydf$4iCdv;=3DY3Mutb*(!j^h>U0oo_^bhaz?o1R
> z6pi4@&&^m@_FNc7JW4_t*-etW2J&(*^lW9;!2qlGDNDUeq4$)<E3+gBuF(tbm~0Ty
> z`?6OM2FBGTtBpEP(Y{VU^zDS!6CmY_UVb223l)wTQ5u4kMT3yMM5V+(Oe&6<dbUCw
> zFP%k%gHP~=3D#R3T)YD-_2w9t&qV>M)p<)sFzMi!&UK?o(DTA2|7^vc)kUB6Rub4-Rh
> zMv?1ibg_eiV5Y9F@^!k7=3D<MhUK-_#;r~`5%TflFe5`ne4V*v_T^xrDi4e^DY0Kq^3
> zWzBE#mZAC3d)dMC8pxrvs|DM_ac~N0Q!yKXt3a^r9{pc2*gO&ku$KFpV)vWzMO+e4
> zTk>-CfJmm?O6UayR^Kf@TI%-#naQ&`ukr<Yn!Sg0USWTvh&bxDVPCX~f-ZMXhH>|r
> z(JpjMmfzZhbpb2ria9leR9KW#geMI~ij?nprSsk$2B$1A>TF(Oi)ivD2{EzWxCW(Z
> z5^KRlnX#{B3JM@45~Ny(yl|T$8;0Pb_;j`xbM$g1ymet+1naVe*gP@6X*>fbu_TuN
> zl8XZcYnB6pAU-%rRCKjuBP3`%yavo*0FtUDM;F;kQ>_HvoT>I!VKrZ6fz*9M`6h^I
> zT59{Gs)3U;b1m%H_ImzFi4HaEzMUk#U`2wBZ2OB-Uyc3;$HH1ycEyD9R!|-PMny@X
> zs@)`dxYq0Xe&&?|O2NCNWs?rsA+Ex^-;lr+Mtn?k0F@e6z}D*Nx?3N~((H|hf9MnM
> zLlPYZdG5Q@Gc^}BuVk`qvFUg2iI4&pyli@%l#5U2D80)EB8*W8W^i?hibZGpAURT?
> zo=3DU}hI!?GW{;)%f>rk&=3D3HmEf1%v&<^5o>v`2~{i!v*mFBT*!ASSP&;vesch-#iit
> z&L-Jbk{t&u7dtD0b8@XxgccpwcIl`kmT<urdabaSKqIgN+Iy`k-oR~vkrMT<0E=3D*T
> zzJDkBS_{&zen81{DyNE7kiO$a&bGI?b34qwzkK51pDt!E$aFOKg`Wp($j1%pJZLWf
> zNkF#0-M}-;7@3Ol%MC;g+F-?|Tr7L75o+(L?FRti_JDvrYa4`nKKH~kQQLqCiVOUj
> z;mTZ>OO&IxBIN`LZo^0zG|IzpcIEzuR9Hu@(?5S9Qpq7y*8j3DB~0xW0)~zkeCB%o
> zVX$h&cRt#pwYY^5m~VlIO-XfU91**ug)I*hN+ypNNKZCI?=3D=3DVHnoh;F`YrlpYK%x#
> zz`7O)P>fbpaj|37+yZGV9g!Y(<=3Dbt%B6U3--a=3Dj~{u|pWsQPs3^VJV|vZfjOq)kVi
> z!&7s}p~f2CqiB$#@gHd_Hb5oas4%?9@S_MfEh_VCWReiWP&yzXP+vvJp51NbU<r?l
> z=3DjnP%i%o646Cr}R$Cp`<7uAP)tj`sEG&WN|<aZ4l)XN&_`%xK0$hMCUDYoZ@hCTtu
> zsYLnN$RtVmp_56m_=3D?7&|McyD4a1(O9;Q6=3DQUcVnyLu7ObF1$>NLx{2!vN%chp?Fq
> zxNL*%KftzL#0j?9>43!e7Au_4qknV<=3D(aA(BsPb_%4;JIq;%zGEfwsiZy9&BLf*pZ
> ziYtPBSdbBrEwn&3>Mdsa+yB$~pJ*cDl|Q2%ro3_Zr$gdDZ~&>b))rEGkBGd<^5J(T
> zehb=3DjQSs-S;8D`EMZ4D>z#(r8K!S7M{@fqnjDcK`@d-uMJljmMx<!O`Mzm0gwe}h4
> zZI`KA0^2RES~ODqXQKLj`5vEKan{P%7XO1Mvc|jH5%{ZK#e|nw^{T%h+7ti7#_aC2
> zy2dUG#+?}Pd6>zM3kZyEfqcNFj{2JgWcCm8Jzou9Z~q{TFpvAVtshAsc=3Dz33gOPOL
> z%T5s@Bp9t@TxJO}`3N3(3LQhudK}87TO)!P#)VI)aWXe#e#>SmXqlQ*7uY!1TEt!n
> zNMH|e#ZO_ab#GC$AJ055VaRt;Zh(GL8)H9EOYZSbu+mzIwrA0|=3DFQZJ`~IqbsCezO
> zjnF!N@`nP#C98ha+w}#8iZ9k#Tj!}N<<Cl#asPF}U#&wk%$mprE^cHq$(d{DoZ~^6
> zstGYFZ(%SET)V}>+Wkk#JmN^@$uqZrRI9&OS*EIVq$lnsfJ?QHDI&t1>x!yu+Ui6I
> z)ROq6lOe>>oZj^{^spA2E-L>#AwMwopX20T*dEEwjt>7*L56pj@*7Fi5N!90B_#%r
> zZ#?OB%2tbLO|BAaWFxo+3LM{vrQxN#fKapJ7!9LJj@v8GCeHl24+ft)C`h};@&`!h
> z!X)Dw<^3#f7AXAUiL(rG9f_vV-4hc7>ieN0`PlrwGy8vxLvrWv@AYK;dCYpv>&GD@
> zh8LVCWcEl8Q-3WR-E}Ad-8NQ6W$o<(8_bC~H^E|ylMGg$rAe$SL$o+q5Ezgv+^a4J
> z|CpkP)~;#pG!{wIYHm!dhX|A$hy4yO7ThJ`goqq4nNH9PmBiq7{aKW5os#}AxhFXK
> z)?W%%r;wkRi2C74U7As>Zlo}WOHgY7?=3D*T5Mqf+N;#JGtLINOFMTzr}w4vEccp?Lb
> zyLo-`6muyZU}iUz65lr~5!RecLn~11Aqe4ne0ZMgbp$u*cmb+R)0Hx-<0Xlo@YXNt
> zaYdI5r-%!OhDO-njRFT(j1iXzU*_h5TFt4CL;)3jt=3D*L&{i}%ZQ)`Ta)Ffvjj07hk
> z_&A56_rz~_*k!U-Q{fnA01$X!i5Cw{-Bd=3D9ngbPAXb&b|iI<#M?0ZYVz`t|RYD>a=3D
> zA&M|~gArzB$WfGXW9<R-uPYplQJ6gAw%Q#Zo_&HJ+42=3DRrulr2&|1w^P@nz^wkGch
> zbFA9WRZgo(C)NQuI|X}6zz0i_QA)1*$N56ghXqVflsaoR6}qdh<Al0O!p6l>1ZWrQ
> z5<Ne`;%7S9owC6C>G*W?-X+VIc0rjw_d{5g`f7iPdhmn!Qw>*;Om&Zv!*%hFDd5(i
> zP9PxWSj{EWF`~E6#RKy(?dvm*)DFZzeadFa$QZ2k(YV@5X78Voh$UO+s<>LIZJ7e2
> z+V9Y9vvhS`;a@+0!r_WBH@qN&6)kUSD}CQ7p`C|)>-o0mOg%JDo`b@soCAR(u8zw$
> zfje|<JTe47;&XwChChpg^S@}|&@lGP%eMkw{P@7wQtX@6f!KaAW0Fl*Za@G`fXOKg
> zH}>aH9UObU{{zBQk?Diid0U)Uu9@awe<keLdv6mXSA~*E1Sv4%`5+k^86S1_?g`72
> zv7+GuA*;-+2h;5Ol!tk7rn^;VUXz89^4Z%{C8V^pRL2x<(?maplUIz#deu{+8*RHy
> zGs3VmLIAOI3VZ)W898LTqEXClJ8(2smfh8ig)S}NS~*;b48)kU)%2VfuQFPjGP*hc
> zu$7%#sKCQuPkgK?nwV`0>It2YtJ<}14J}?4SnGq$(Sp*uffn4XesPjvIIup>@AB_T
> zzr@QSw2@!^yEU3|wtNPP2@r)BQzqrdIHi~D`yf`Y+TJft#hg0TZQE!(^%OX;zA9NR
> z4}AZ-Z3cZIdG3ouDn)#J1)A`(jNw2DdwYu`ULKx6)rdVe*IQw80a4VQFAybdUcll!
> z6b`p!=3DO9h@a0~HtQ3)?-riiD^DDN;?y&&8s7#~^I9h_*Fq4t(@$od3i)P;lJ9;(US
> zTai|^#|?y_;Dj_%=3D86!VaM+i~Xn{ypUl{yqrl{8LdjyKu;%-3isl`e;56*dSFEip7
> zp5zHM+B%?Fgqpj;Iv-Mc<W*jKl0&d(FZG<b$ejcyd}QKyF{>UJWkyPakzE2x+Dc6A
> zt8K7?D)-FE^mvPbfvs_GqV&Dj6I@J{aP*SXL|FP<><K~<-I)*`cB0tg3ey?<Xr$AM
> zNX76R<{{abw=3DQio3}Y@1<u$Qs<#LG$D7tI&Pu<-<Wa!{bpJ!w|>y2!oMpDW&fmyq7
> zGb!%YS;jV_(KD4H_!BX_wxsGw8RdFGFhFD_azV{TBX&~hZ<_%ndyPGZy=3D@JRQlI#m
> zuAK*c<#-`8IHBM5B@uy;31jiJro9CRhVdUVZfSTb>UXK#=3DAp&?ZpV-mhUT&M2yXId
> zB8!{s1*^gpONkPIoS=3DI{50@T8hXn+bXXHUY1Q)~Yz(ID&e!&$?gb2sQi*x1L{va~H
> zxBGe5*im+PW#sBL;}SmP8*9#DNdn;c?dd#2hwcGQg0H&7&xjHFTB$pv*C4YM@0JN9
> zK{DB07z3!QmgF<N?wtHbe3dUn?u}mxgd<u80;31h@E@tc<#7A#X4erxe2bX5IM3Fo
> zKfemUk@Aw1K`O<_ClYv`@kjN$m<|`{AR|wj`?~eVTP2A3wy<AbOw#V*Rtgq>wA*$<
> zmcm9bEi_WFmOAn;5Zy6v@iu8;4uw{wiq^_AFJmqFE(ul#sc4U!%H-<T!|Yfu(F+v(
> zR|<mQJ~{YD5!AMs-96i--WKE>V)_f-xczCI^Hf!t#*%?%Mg9Y(3t_47C<?>OEgb`H
> z`V}DY$1ejWez8YUhmAdo7+tGc%p=3D9EJQHk)J^BhV6-K|d?t#Rj5b2-u6r#7}EZ)4X
> zmj%AJ<BET)DH8Wsn2!eP=3DlSCYjt1?8V&Q{4P8#IOs9O`sG-<v{#!-R0@;*zbMGxYm
> zQ_sH+mLgz33%Nw*Aq=3DylWmBC31@ZXUW$o%x9X)QRw|C&3kc~WE*6EihMbH>6IJ2J0
> z$6fLy5SywjcaQb+ayW@JT*S;OBu(}Yof+i9W?|IYvhb#px8h58v{cRb{V>XtBgN-?
> zVd!OSAVCv%3_qkPjDFr-RNVBJX5`l|JV%YT>D=3D+dEPaYa!-ZSut`O4*eB<k7HpS2g
> z2DP3=3Dz|_#eEFQC-okz$TOa{B07uf1ogG>}RQD1wlqkBpZ=3DM-+6aNj}J(wM#Inj~Hk
> z8zhJn5~6vWAsq{~w1HQ{Uu&foHc!a_9IRcVy1G4f576SnNR1qAD`PbF#E&2*#KVg$
> zF-CVSmz5FZ5yOy!Al5=3DQ8Q&v2NMcNIU`<8v1W@PIjc&cRWL@4w$nYOzn>n7L<b>l{
> z=3DY5~fllk4CLB(37?H#ngpD$V$)>XYkg<L&dm}}Oprti8m&^D|G1TxRYN8wfd@67<G
> zTB-;sxx!MP?Hb2cKW+xS-@?R}XBL_r)$DoDcao5)?@Kn-jcoXW02Qb0CHzCXD7+5a
> zrf)ciiemJ7v{b`Q<h0fQ+&9{_?W#xyVDm1J%;9z?UPN6jhmk`i*Q|S~0Q3d~&+1n`
> zysPiF0nYAA$j9m?pAPgdJDGx`Z)UbyR)QQ|P84UM4$?yy_E7<T3vjJXodH~HY#E=3Di
> z@H9AIb2qymd1{WR__}+~%a~!e!f?>c%3sR@ICHs=3D%E*wd=3DE;=3D(u&kJw$!iwR<*56u
> z_*@?7&CPs+5+=3D{-t*xq#Ol=3DYEG!s8gZcF4GnCm<`dH=3DALI7Mi{NMC6KRaDbGsGwyz
> ztY{!%%2dX};lVL#D?7@+(!n7atTZr~-bUyl9!o+zu>o+GuwF5)BfzdM4aUJBMSXIB
> z^RF@{u&O12%%+l%sAG52c?&Wx<Mld$>Uq&>j6JJImkS?#N497Ggl%?bep+6`5F#WU
> z$nOr~^Spr?n|;uv?@)>>8HYMen#DkyFg!R8?gS-jAc^X8eCjW}Tv0(108A7eq8BP)
> z0*m2KwF*u<0wS`fD<0e+39Ty4=3D5q+>g~q7WV}SEJc_G5=3DS(#!~Kw1vjO*-Ztg$<!l
> z;LiPc)AuUMcZq_Iu3s&Wli%R?8aHij0{#hJ4vv-|(iAXNL<=3D5t1Tw*p3j~L+87ZEZ
> z9+kwBZpjrZJock4wBez?!iwJxInJy_y`t7TQ3i%I2)+iK$vF0vXJaH65JW{R-ptVJ
> z>NK#oP5(bG#*+?KQVcr%A2T!^FCB0g_&@8=3Dx(dD!rfI_|9w>F!Y&7=3D1Ho9!AkuvK*
> zL>?2C!7h8y)V9XBmd=3DO0x2PX`<Z<IOV3REyvqqapbGB$h0|^*YZVlfWaEH{2s~tOi
> z%QnC9;$^6mCVjJ>B&d0vThZ{{HnV6A2Mo%DZFA#13IY2aZOjp@_mag?mm8oL4_y6+
> z;yA;?E;-5Uia;BU=3DWW8ee38i`ZH@mdI;QUh44zwh0@|Hg7QR^woKsjE0TH_)Nnu3V
> z`oq8;Ak$OLauhtAD{I<fxDAK<AmK$ze#|W**t<V>P`35v=3D}cE4xI)aF83~iCy|-@D
> z1#^E6=3DY%}5#y4JC`s<?5mh_f?@n9LF_7c0JOZ+qk-;1&lwRM9)GpQJ%a%312rvS#J
> zEyY>Nq=3DT8$&orQw@0m{Az#``?;1v)IX@a-4Fr~G`(Bhn7G}n`qe@KOh7U@lnB_Ctl
> z!yjM;g6v{hgZy?Yk{0m%ftM#-CN17^z7Lf#+%TO#D_6$~yjsJG2n3%8nA7tH5--Sp
> zXOxr+nma^vIuuGZgvX(EhLaTvxw02ZQIpD<6COkwIHc?5dW0%%E^_RDcashnx4Up`
> ziG`lb7!2~~)VXGC2ASXfB1NAByh#alc+vCw)*=3Ds1OPIy+649Q>*1Evm01{tt66NGc
> zn$`hefV^P<#AOV6b8hk1&r(iNWrXMgNMAe1^b^Z>VX_FokcYT8TISJx+h(f1X!}8*
> zU;Z;Da*l1nVZJ=3DU32n0oPLSJRU=3D-t3&pg9mZ9wYz2o2+D59`5VWHCHe%ASQ79Q8i}
> z0{2jKyYj<W;wi!NR)wX+IQ{H0gNVkm_A(eR2(R%xA`ZZaSPfj(kwG^Z8ffU-o+*WR
> z->b5Bec9<M-p8WWRFW`nFCowJ0+e^FUfz@)rtq0;ZisDXQ^b4?$awi5GlzIFx3x%a
> zd_Po?ob!`)<J7wItLQXKOWo9M0)yc_o`C4meR8E`R1|-Bo!FEZ@`^@y&XD_J*DP+c
> z+dOND0ZC8YGV?4SxFZV8ooM_2GljM(UbmsjjRJu9UAdZ5-5Vdvj30%g6@1w6Bi6Z9
> z6DJvVlV7vB@GanzN!OhrNc;qaqcmg=3DP^BWzb4l6kG0=3DhfirVsPCI-7J3eSpbCXw#K
> z_(tRCnajs#S+9JE)tOo(r(+|JsG9>z;WN#YYvajV#hA!k^JY1vnz;<nED)+`&%mh0
> zX3nSyV_<JIc-r_5773GX+ZKJWA$ckaN!!^9ck%P8Wrc{6m(AeQDq9`JS?1^{6;Xa@
> z?d~bxD&c-NK^>&tq+Es_!@D#shhI<WQS^DxYm<n8sf>7cAkJ?E$6(_K!2*=3D4#xp1!
> z!^+!jG+^x18>Ji%2nhOV*l03PyC5(8cNH2ebkmlky?p+*db!+Vk7?nNzfOz_iUPaZ
> zPwMN8sLL5`Y+>Dbil%_<n;i#EasTp^xMAS`SyBv+lVNhhTH6h-<L{qFQ>;E|Ew8a0
> z_vsmwy7Ec(^~2z373n^$AmBN`?n-($mV0y8Q!tFUK3{#$e9uBY_6LQxUk6AREAi75
> zEmuc>C0SFo^~Z7-EA{clspc@NJR~lLi6wN4m0Hjzf75`TNj^y}CSVxj(}mf?8}A}6
> z6*G@<J?1W=3Dqi!?L1GZzEEAoxMy4GIy6h1XBnwS5jinZFXJ=3DuA{W2@L8aAhJ0?xgm#
> zhVP>t!|=3D7-#K2bbY@6+CMTk)2zFok*M*NH>NdI!g$2)*^Ij@^=3D&s;V;?d|wZ?W7SY
> zYn$GsA7&FET`%;FFZd?*&I?Xh&l%bjZOlvUz!as>MgmYODHy_0xi|FX^dvX~f?t}o
> zOE5)(V!BHs4g87E0!?aP$xL;hqsE^Do<ZA41?0(ryFYBeBUn_HWC~qZDv#TIYoiU6
> z*i|&7EFR%nCyYLslhrAKi%q`Kn}t&Z+JiFZ6m)qN4ToMghE@)~`vAwmqlQMTg^R5h
> zfOQKUv!vrTjc^!)T9?XSqnY&Ep|SN+D7ozvBbQty_qfh!x6;Y-M~7ya&qMFH-~6D3
> z<h(()!LYH+@Ug<#4YZ0u`w%f2xx)fw$mMMf(h{|;;2V5B(y10nqSn@soTJNMt}(c%
> zM%ezd+)*ws&a=3D}Wm$>S4d<|ebfjRz?7%P<dm6ff7wOnf02v(=3Du_~^#LvE{>+h0Tu7
> zx~N7DDIU6ltf@GkQ+Tdfwpao*ii8`sWWeeKq!SFhH~h}=3DWL`d~VdZ~V8!Qrz!cx9q
> z<!Id?KAtlX#H8dEK6lSiw8z8{UWVoJu|8SCC1fl-K$4i;RiAG8Xhv_GlPUQ#^~jM<
> z0|!*6+F)o;+iMyiLy?EuO&=3DVP`@4!jfRBujyw^b;JB&fQK-Jn=3DX6e?pqn^)^(|@w<
> zfvEutLcfF-WvN0bziyaOQI6XK=3De9O#B^RPjfKCu;7%#Qj!&W@Ep6f*Zsg`w+{T3aQ
> zbx%j*tgpix!+iyWY>y%RtC6fvJ}=3Dg1@kcmOrf~E}JUyhR#RlWkv=3D*R(Lveo`9jn^p
> zdTCb;s-S(WX6D$DVgCM~JNA01>jrnh4~z~@YB_y^3-YxZ_iOpwhh<(RDamQf&QDS>
> z-<nG>o)0`nlVRo5z5gJg!wI8(aLiQySY3n@YHDCUvp}RIq?NG-ky;p!+C$wHk6*YM
> zc67rfn4ylRW_5KIKi-a&JTQvY<R%`;`Wy)16w(>RvY0BoK0T;!{P7a#Dqy?mp;qb%
> zJr8IB7(JzQ;aKH)&Cdg=3D8<&xh^bd-|C85f>_`pmKD<b9^=3DXkYpJCi6p4=3DmFIeM{a~
> zQrU}ndFdbL3BO(hQilR)@Wg*9{Byqs`4`<uZ>gNCG1j(_J4&Q^HWyA^ca&UtF1`xh
> zSL>_2wb50js>w}C4+B*65NebXB!DY^P~oD>n4aCHJXW`wxax8oK$!UTWdd1r;rE{T
> zmPDc{ccY|YQ{)#WiR!ycG7;u@0;=3D;GqOrSKfDIAW3>klp94`c1TuN^PU{@|YWydR=3D
> zh|SfUE@GHXwp7TK66%`!_8Jr9tQ=3DK>;#0GtqOw=3DZVJeYH2Kz5}B11$wKn%3=3D5Om8d
> z;c*m;yg%M0)z<h84h`(h=3Dyp@C3)Z$4{5i)d2wW&~Z?0CH+r~FGb*L`;WWAwE7wVXn
> z(yvGaQ2x_bSoFvRn^Z{D@s((hDjPU};s=3DXjC2bPD7dWKW2xmou<E|~Hasi|U3?Dgt
> z_bWat%0fdmGY4LxQe?&5=3D7)G(PPXq!VdnJu5Dc+HJ6VtnztZsBkFpCh4fstjTbI*G
> zYZk#zhz4|@4%qy^Ti3nwie5oim*=3Db6Zkn|&0&Qx4Taga8GWXaOMB;^J#{NWs{;y3e
> zT1P=3Dp#hV7;Xi0ne+2(eiO8A{@JPHt3nKcH92BbS1a7faB5HLvh>>SVa0hdN&hf3MD
> za0+3}mwjG|*ywHr_Fhf-e8|c-l&t1$cAO#A=3DMA-zV^$poIq8b(6eOXcde;}QAq<9M
> zLW(D!-R~&J<%Zg>ubG_n6yB@4B57XPy@Go|1LvtcT}0Co{T-x1Ls5zUUKjsIRav``
> zPCg9dnJ@SaB*>*l9QY{*B3s}-b3O<RJLz2bI<49=3DT^&&!(i_6BldUe4aWypzG{nJ{
> zq;zcrM_XR>T`%G58ws!FPnAT8lTaB}EXheH0pw?^j)z;axrzWxL2oeVj;7p;JCKnd
> z$OcLC@?IA)<&k0|I4*$9k(|*NOg1avL!^%x`s69Ue97HM8IgUlQmN<mHn7CSMXouV
> zr;`x!=3D9Av@N=3D4WFzh(Bk_&5Mo<Ps!)QO3fL3DLkOK{X2r(vpTHbG{kb?``ldKufPF
> zG%_#n{3)enP^`ipmo!?uE}8$@Q?<~TG_DwqZS;1Yq#NxSo=3Dj+pmMJg{+94m`x3|t&
> zlrBO~FaN#i3Yw$ps=3Dy#DY?NO?Qck}b^4HZrRhz?BAx#!)ZJ~3y1h!mBT^$1X<&Jmw
> z%eV@k=3DKHG2%(vB65JUDT;k69^^Fj<<gVKJ1f&E%Sl!2(3{t0vUcs}BzR%Em6g0Teq
> z0ePRdGc&Jm_ZOZ9gGU-@DvipVTl8>PfeKw%sG)+J`vgM8ww=3Dz8?PPdInvBfnYcXpe
> z5jJ1_4S_}7M{-FTNRCjD2Il_z<f17#7^p0f8Sa0Flc;7T2sC@)iR3nRE7|JQvb4ic
> zC^~2aA=3D*gnO$x9k)sj(OvDCllY<jXuagUWIU3DJ{{%Wv0aJV{v1f&U(6))1SMv0y;
> zalqFD14#R=3D`I;%gAr8TRZ^=3D{O)P3R9pfwC|$46iSmSwoAk~$+*BYd%VY&8-k!d(2d
> zcfpLz0R-q)8(`yVyK{6m50>GDpMUGj=3D_#38uXk#o)^iQTWwLt<I2^8SQm4PRErV|T
> z>~ZY8z%sCAf3D>~bL-yeE-=3Dk23FhUS>V2a2J*h6Eex&j6i10#K(_2}OlFQwJM>wQk
> zBwLeQHmyl7nRU@m9xR~y<<TzevojYbjxs_zdz%cL0z1E1Zw&tAA<V6Kz`)W+=3DOSKd
> zxz2~f$(;Bo_ep!%;iz;E#fYgZc|B8tf_A{l5)@1%<0nRguywadia?&EwYfgE*Ko5-
> ztTZ9oU{;<Ku-enBXbQi_io+f+3d0{E1^8YF)(4x1Km*{vU?rY@YkX>5U6YD|>FIB8
> zS+tse8*0b&%yAk#gqRlvV)P_&amMD9`V?qbZ)iR&`;x;uDYdkuD!J}0RCs|z2?g>D
> znfVQpyQ0Qp@;m+o+AEhJTo&0fzR7NcZsqEiz1~^jI+Z*U?S}f*lBt;pN4&IX*7y`7
> zE)x{~99BZIrt|rS<AJ*J(N${l{CC4QT&9FWk>c=3DYMhYHF$lZ?s$utzH2*!I?+1{LT
> zECAKcCcTk`UYc4orjhH)P7;rS%w_XHmG4U9flz+tz?@G1V1Gs<sW9Zpx-^4N+u7J)
> znsBJ(9&nvAO7SRI=3D6FawT71Pau@C=3DhjUEssm))gB^sq@EQ3cVzc@lIYU?M-sftf@g
> ztPEQcD&y?Qm!YN5g_vI=3Dg9&eL=3D(W&dwGc#IixRW6TcO_T6qHw=3DIDlRJaGcANSc>6{
> zyAY<xQ}hh@?)TefKET=3DY(vu&4ZQ{L}+%*47;QcG&D2hV?8lXxjc<I#Q)|RQZN=3D`0Q
> zU$f9*M+R|;u`&BCQq(uu{k)d(0-W9XzAyVlXM>K+JCEc@fQQ}P<8J@7G>(q$lw&y`
> zPbUfGQN5vWVkf10XOHC}xX8=3DUT5`61X0T|5LUUw@3HFQgV%oBb!!x$dlv0ik+X^A2
> z-~^WQY^%DRzJ&Y~J>pm|aGrxLDEZ3OXNu#Dz?$ozW;RR^*iCxe9CIb8k4-aVMp^>S
> zp3E^(2F>MzSWo6-g6-xEe2eFY2mMstcXFu%n{*ak#<h16s@dmz-9edIW|Bqjrd(G1
> zI-ouuDEJ>)F%b^3<(x%z!Czbj0~bSB0VtnX2#OA&@~$+0`{pUlr)KL$G5T2NTa$LK
> zQ&x@X3d?J^TQ$Bxs7}X<&WG)2@jF1tNZUsmCa`gy<Hsy(!^Z@E4Nb&+k#vcqQTA6t
> z^VkqwtRfou%3>tVZ~{rdu8asr`7N_NCTZ?>1UZf?Bi>eiJG{u7hK6_V1ZQ<@r@Ve5
> zXHV#pr#Y{V*xwYgpETmEb0zVC>UbXyb%G>!_VpY222Sw$WqB%$x5rYJbnEarr-vS!
> z7aHzH?d*nKJZ%#i9T~3!T?ewMDQtk&>4m@vqyG8Cb>xdQ1h3QN^tOJawF;iz+684k
> zWiv9kb7$a|t=3DFfyl&hYGeK}y}e}}iXy+6+l7M^Ngxi!KR+cMK`YS&WrVyYZMQAQis
> zmQ&(qYADpM6CpRlKZY31QWjX+szk#~aduUr?jG~gbc5V!frC!59J)2Bt(|#n%^T{S
> z@4yz3(iF*#xUF=3DSDXU%-zk^Ce1xdz3&8(}^T3Fd$)MzS=3D#2b=3DB8r^P`d)85=3Dza{E=
~
> zl`4Y0lE~t0^s=3D;<*F`UMr%mfG)$ip)ojoFs<73f*@<)$7{62Q(!JOBcUhHgM@8)HW
> zSo3u6jk}#I93S8?A2Qg%+%{Y3qxR*j>lw|&uh5QjjxM-nF>lSP!QZQH`rkAABX;)w
> z8R2sd(d#J4#EVfj4ilYNQch*rD?RI$M&>b0L-H#_xFi{-zdOnhg|Eg~OMA>$3mOYj
> zBkTZ^Esi27f``5BZ%s3pYTXIAt#=3D~Go{1)(qeS+#Yi?~wIyckl&<S$-=3DoL(v5IXS*
> z0#Xr>Da-uIkV<!>qF%qf4FOxO%01HXNt|Gmj4&)Q;?>MK|0LK}q`Kt4ar(S>HS0ee
> z+B+X@BP)lsO*<r{aLhtDrm>k*r}KJ%|H>(!9O~&3?r8>&Rj;%s-R*$ZkAoTkMv~;h
> zJ4&P91Zxk;S@beZ(GNXy1Xhyo2k!<Ug0Dv+y!3&@m3!*WxsOPV0HnyzXzpxn;Y44(
> zkh8>ykWe>12}-zmMaZjx)-p;fIU<FIc9bWD&N^MortiwGp=3De_X=3D)dXsNI{3tBGU4?
> zyTFq>2#W5O;qhiXo7MKPtJT4CNlPODu5cwe?L#l`T@`eoRQ3nY1#7X+DL!0VlI3c>
> zUM7MTmKI#LA!2f7bT{0`ns=3D?9XW^56*5<yy207qtbc4JFO*IPGT@aOqr(+}H{yhdE
> z7xpChq{hhmF}GxY=3DXAw%7%GH9?>8}%vCq)g1qJw=3D2laj5fKFE#03$nuV<}yZu0G?Y
> z->Mt>YwzcD9v#+obr$r=3DX$2AueFl>3w;{m?a4t%6VPnq(m?NP8>3}DqV@#;uiX`j&
> zPRV~Zy1;9rVRKKn0A-Xa0t~oGY<VaRn)q+{8ONF!fQhV<Elb!9+->Hy0cyLAb~rqM
> zhkc@>hGTiLz02UJL8i(nq{Iq(EDy&rL-lV!c*OF0*8y>@|FH^AJa=3D9EuV0dm<Tg7v
> zqESei&a-;Y-d^dRqoqx{LWf~GvJxtRd(%L|Qr&I8N%q=3D(OL~&Sc)8R<);T?Z--;t=3D
> zhO_RvS{@2YbKs&grCQ2I&~?%&MP27Q-xl%TQ9Ix^rie(NV5?up^l>`=3D$^aKQCfDSC
> z@xBi(4vexjYw&pUvgB@*U##Tba^j^$o3tt+Bd+6km$SeUfIo!`4Jsg(u<^760(MX`
> zsd_HN%{tJM@h8z4m&co*lIRf5dMvi{oaYKd1h(GDI$@CIFVcX2pXPk9D$@d*X4WW)
> zv1aN_>I410oJ9<x${lLqm;@@8cBGP_MaoJ|I56)tOAK%XCyWG85gbmPgqs611&%@K
> zpu|-!gzE3fr|Ptz_NtYPg_w-*{{S>kIKnz(uZG|aB2MxkM-s)RX4UqvH!WNlwE{3n
> zcJAXQ#7VUYf09k-mhgr8X2SL`Xnik|S8f%$Z78-XvRD~_wrkIyCs<w@AFE(z@b)HS
> zw!oau9!IZx;(wM&qi9m_zNpj*RQS7T%yC?%ihZEB&2V(7&yDR#3A?Vp;>w^riO68P
> z$~of^iq~=3DY1ld-ewSn{FTpwE*XLQgHq%>vMXOJH=3DpG=3D~}ErMRmSXyFH_I6-jDm=3Dc=
a
> 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
B
> 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
C
> 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
k
> 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
r
> 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
ggs
> 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
=3D
> zE1SNgWPm*tsHsC0rQckhy@lGQ=3D7Idv0Z8vGn;m4BSaIlTy&QKBfe||LT-2MFw{YzN
> zFWWnlSYjE0*Gv1Oq)G0ue2VfLZ~dIHSNDE7OovJ~qnNXG1Vy;DG}$#_Of34Cx^n8p
> zEQ?s7(w&~2w(fi&kOe{nPJB(wf_5PG$7J6CN4k+D*DxwIm5R4h9A~+9C7ZI3QF>O3
> zJcJ*#{M<DHggd0K7XVKEm1*#^r-)2KXlBnh$3xvCR5q|AO1BG9Z&~0lT)2WFzvC~b
> z7SBJ%EuR+qAJ(G)p7iNKpEy?rqtg93noF5kr8jP|fq4j3M8m@u9M#KQ5k`{&u-Bxm
> zx~)hX|NdiJfXGeW>Js#8nSJijm!UF=3DQxVz>$@gDGr&;+=3D7{Gf#VuQp&ve}zR+=3D=3DX=
G
> z;|VVu79s`kW!SsidO+Bp@gEe6Hgjb^K(5~<ycu@~6m~OF$3@i%tWI*f{b-?_4$;Xy
> z{tT{|DH-p|Gk;bBz(Hx6G&VB@wRyE)Ye3SgqOrKuYBghzD>Q%oWm@&`;AL>Od4m}R
> z%)AnAH7`jDIQ!C+LPs%Hbk)(#8SRAu5dP8&$w-IXaC6v0_FSummD`vFdFshVliE^Q
> zir~++`I{cdWlqv5{qx$YJZ@3qc@@Z&B%5jJ!=3D-VEy&5V*=3D=3DIRs&rDMS*?@FhE=3D1G=
!
> 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
+$|
> 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ⅆ=3D7J8-
> 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
q
> z@3vl~s@4-$U{OyPVM;v8GL4mI&Rn(HQ+?cjAqAptmGS0dm1AD242;3%xXjGcziv#o
> zFgbV2)<Q&GoFu?lGpv*@ze&#GZhD{A<fx7nWk}BCQ>Z-Iv6}^{3Rz8l-j!;2R3eFH
> z!W_yl{RK6iJjN0JyaSe*W{Trf9-~-fj~NUiR`9lwlFrt1Yozt;0Wm*%U!>-YD<LKt
> zznR}Q)78%M(9m;NM770T-`?P#K}yk?$BQ(pP6O-KopDW?Un>yvdbmK{liyg;iiCE!
> zrSy{QhNH7z*=3DYOe%I<3(_f}Yc6SkgTy2Z5yo=3D4{Wo;hv>v3$<6Jt|U32Z7@s2>cmz
> zo->a#8<ExnAxaF2=3DqVX=3DgSmpRg*)=3D*81=3DKCFf40ZHUy8NMU(L%{v>1GVFRE86$EZ=
{
> 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
&
> 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
e
> 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
`
> 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
F
> zd<YS8o0lb}d<jQ}bqi$))8BiK&40oz8^2sFmnSJDIHBM$+hXKKqd)h6OU`o&-EJJC
> zW{UPhJtq6c1A&eiaK>LrN(V&oXDzmC<iYa3ne{3BkSxAZk0>Dde}c#$Lp@vJ0!Z7a
> zwPpP#aevZ!J0V+N3KrOcm8CMUCM1i3rGs_gw@_jj6cflK<GBqV&<^T#-8;!CgK%Kh
> z4ipKBpPcXN0UvT0dD_VTv<nK1&cJ!;(t5Po@NOH5dRvYISMxkZ!+?{TcF7|jUX}Cg
> zZQIs)Ak}a-dA~=3D}-1jE8%4k9D2UVFljBJuj^Et~bFsv3A(m}aN(|Xkgz;n(X*g(Wd
> zdJ{U*{5_C)Uhc+?UyYEq;4+P5%hOA{oEFu%mj1n+uAVxbxodGKmjj~;5hq!SNba31
> zDfBt{({;dPbXw>VSy4Rr)633q#*B&UO{_0^MH?POA&$VSfDN8aL~Re%S}mf5H7ABF
> zY(!)KS>?{nj0DiUf$WW~Es0j}<35OOV+dC3Kwj3=3DcVy0F8)ZAh<D8nssSlH0Pov}7
> zk?^<8bq5Q4QCv`fL4o)9>X_ol&W%ozWM(em<}|MF!-re1q?{VG47!7xa5@#gjtsS}
> zDh6GfH87#}j43pQM4U%Ii<y_kgpB?+zL+mRSJmSOeNy>$taAc!7w%^NvK{B32v@j#
> zXAuVRk)4*(AB$juj~@Mywl-0Yeih$4hDilSmxH#mCo@O$;w-vO?FE<{gWf^vC?9kV
> zwf<P>`-)4rYP>Ld=3D#u}A>;HYZPu9i7h20i{{!D(vw}i6WJtw2X+R0yo&=3DtDRqevlc
> zAZ0ov)^g+w7q<BHSigI*q4J9y`BI?h2A?lZH4{t4lG0gr#sBDHu$285M0gM94xd(+
> z&D3N0!oaY+X7;XK(Wt`nu;<oEe0){g<@T%j`<B2TvJ;Q?@$xu;b|H#a$0u^y2ldm5
> zfLFb(3~O^JquwrvZ`m|->|XF1G_2tjZBYiWBb4;oWo(+MW5P|Ai3~y(OH6kvxk3=3D_
> z18ad@qTr8&VUl`mkC#Dw(9q?5B;a5-G9=3DLA;zqhJ{M3;6Am6|Hbd~4f7=3Dg$|tSU=3Dt
> zpM=3D8=3DCz2&T_V*4;DsAa0ZNa#>@tqWwKcxJ!GbC4v`AkvZqpQA%iMK;?A1n{f4s<%}
> zZL90!0R$4sqOpz+0A(^ZuLXt89vlQJZay{!IVu)ni^}~ecg=3D<DQeyo5?ux2YRkhVz
> z%Eokqo0T6+&ZDf{m|YvJ?^rT7-(UmIRP1GM?hgow)^)hB6aOTB#+W2^W*^@6I!-^i
> zXoEd1-vKqC64xFAzs(hig>Wv~q6ZGmkAla@G(H43L^qi=3D6JQQYR)0<6#>}tM7U<#!
> zfAW4;UNnY@gdMIrQ*ARfGqKS%Kp{FFV@O8qZ<8s1<6KsB@c%u02x+8(*?e{99DoEf
> zpbvt+Ze{L;la;+LfOtZ43`YX()qg4xs+dk@=3D-q6(V0&81MhmOV<CVI`2ynS>*0hOL
> zAn#*qY|T|@FWB0S4btS81sMqcdo_5#|4<m7Lk;s;s1xbG@NX|k@Vv!S$D(*3#i^~O
> zsy{&v2o-2{<@|OHeG=3D%|Aa^QnsU_?^dFI%hNt&jL{qmCp^vknS_T?wwLY8f&Ko|?N
> z?9)k0evHaWcZ4-$6TW@7{FNV(t)(8Rpexixzz}p0t1qC%7hkDombmf7do1|RSGkSI
> zqDiPlRnX8kJmkjb2iT=3D-iOWDP!`ae<%&h-<V+nc<2>THTg&RgmO6Yfnvnqxa6ka!<
> zPtEOg*QF${G%Y3&aVH!m#a~jTyXZ&!3_T`m<|_kGeo+~v3&P^{vj;lRK^Ue;V?xCm
> zQnA#Xe{)1w{aB{PgSp`f1K{D`n&X{Y2vd2_XXvi%a?Zv=3D{%#4Qdn`jBT4rp+){?Un
> z6)_BY%eo=3Dr?StMA9FuQr+S{Z<9ngi&-75-gbE%TPQMj}`=3D$?=3D%p3;ZjoHBe~L62mo
> zoyu%s5o4+z9NWBVaIR|`RW%mhwoL<UD4{YW|4{k8uW4Y<*&mdY?)H|p07xzDA$jBg
> zi;O>=3DvFsN|B>1<#pOQZ$r8eHh%^(<<9#hqOOa+(Vg_+#<OJIjxN5cG@aakCFwXP+9
> zELS37L}CH=3D>hm;(_V!Jg;pZ*K9KABtIimpE0;K_4S}=3DP`o!xtNnya+jA|16wG$anl
> zX4aX5I1qCJ23(cS#2wysX!2hrB?WVCDPzm~)2*|Ju>j^<g#9Y~td3B72M(PlL-&Zo
> zwr>heph!cpr`nc<Oj1jT#Rc?X$9oF%N_CYTR5p=3DBhKUiUPTqooMVsj|48%XthwigO
> zeOL}x$5tjEvuSsYwXw+<O<dUKrPO!F=3DA17N?`}YcRDc@6#F!cDMI{~~ra8M7AIrqg
> zLje@v_|9&|V<^dgvN5!u(Jeq*M!6({%%c9!hAON#pa6*TsIZ-RC34c8%z7cN&E#ZE
> zP!oF)sS3xjOM+U-DoU}maGx9$fyH%{Qu-q>sJ0X=3DPK(|c>m)V}XWo<{f&e8`qNq>{
> zr%+3YGTx~y!o_Gkz!=3Dp}L9IBx1-Er>?^DyK2??o)Mc>%TLvOj8p+!nuS$weKbt~AP
> z4aRRtzez~pY2c_l%g7WOQqB}{?*?Au0Pa^h&RVmUZG<Mgt0{R3yJB++M<L8r`Unz$
> zao@1G20Gum>d?#?-mwv-qVjRQTEPUeRrP)NaE#4r%<QIsReB%Ee*K2|`z(ay)fq#n
> zx<z?}97l8)@J1!yaGCW0s>L;%Yz)%~CExU8Ro@<uUVf7$(&Hbh{hTbq2?>Yg>?=3D#M
> zpUNGM`?B1MTj&)77taJq%Fy!I>1?yH7eK*CU(?syIj-7c?5yC`_-kpBWYXXZE73Kc
> zhJ4TSZK9tG8nQ<j=3D_VQdObRo;z2GcgkJTfvqX<pDY-4Bx&yq%;AwRj)?VXA*%=3D)+U
> z=3D_jZV<umeLg9tP}r^V&tL{1;c{@ntTGLkA)&}_-azp>sGRmUis&EQMk93hWqxMAb%
> zp_fd7TkRur>ocBn8;o$CF<8pEHOM!vvH8h=3D9XZ;n?vp=3D)&b0Zpr)}S`+<H<S>|r-t
> z!w_-SJp9R!9c5dGK8R-ggVP3>@?Fv1fFJ2ACj-JTHjz>*+~LQ~G*j*)6TyF}%*B=3Di
> z-u?40X=3DkvY=3D2usCz_^&UN=3D0KP$pr=3DCb{HZG|L<oQ_<aHUK^puAc9e#Rbe2cZF`qn=
@
> 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%0D7WsnF#
> zwYDARL1XIF_ottsp#C-@6-9zLMh<oYB(dK>93V)+TApFF#XaaQ!;OtUARMh&n0xQ_
> zv$^5G9AOE8f*vOla93Zy`$x{!rjd;7>u&peS>_JU-~4B4_?ST))7tc(*eW@^Zcbi}
> z<-(BD*?>tTy8iN@BVFj40NGurx{#MGta+vN05|upY%t>l#E~oShSNJ-r*>*mD$>Pn
> z>>KEa$24g%w8V$2UnKkOdyuezEqvR&K1zAc0Jcerj(f;~2Pb9o8O*LfmB3u=3D<FwS5
> zcs_5fV$FSG%AeKke#kaWJB37`eTbh@>30qz2(kRaDegsGlorm;qJzj<w}e%YrPM8v
> z?8s=3DXe@VQayLH*l&qX8GzR_;y`f)AK&=3D@%(KoXtOlxby|@DE~l@ct}}oB6Ru2uNhB
> z4W=3D@`;dZ&9=3D}7eS=3DygoaN1A*rr-xAFR^Q+0kGVv#sQBQ)3ql*mT7@v5|8#oQ<iL!Z
> zZnuP7xD?h>Q%2d>h;T)rWM}Kl`QizJk=3D(vR5LtKzh@RH@?uO~^9R^n9{9LS!b4(LG
> zqbqbD{0;(54*o}ZFJD?FC@c_S6ev;fCQ=3DZV6a)jj53S@vOYh>tWAZ65^RxmHxjzXv
> zf7Nv0N08;<jM_}?Q5oOgKiHUqoT^?1roE@;>&ZH*^P$C93Ejx4mcmQ}0E7{{jeQIA
> zrgzk|1KLS#laTYN>zrw-o4#wQoFCftJX!hO!uT~-x0L=3D8kTpB)zezOaaa+H3R6JJ+
> zhjU0!v+)Jv34LcRKm;c^jq<U@1s~AZ_7A$k0SxTs%ny4VV$g*o_~@k;NX|A0bySD+
> zPSjl-zZB^}n~G=3D|?&NU9cZj{Abc0&q=3DaK=3DS{l0d~5}Eh&QB9taZ>5Q<9(H?4ikFMO
> zE=3DJ7!MvMSQu`g=3D?Hy@;n$1Y!a$zXFCAEHFa<Z8bT5AeQ5S=3DFEwRx@y`A+xM=3DQiVI=
o
> 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
r
> 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
> UHZ3wRGBq$XGBq$aGB_|X3J3BFd;kCd
>
> --
> 2.45.2
>
Return-Path: <linux-kernel+bounces-665468-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 6F44341E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:44:18 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 6AEBC3B2538
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:43:57 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 1D39B2857EF;
Wed, 28 May 2025 12:44:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="RihmlOvW"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5806B1E3DC8;
Wed, 28 May 2025 12:44:10 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436252; cv=none; b=FPwHjQLbnjstCfspyz3UvToxQZych7j7zkJNgkMaB8bAETHNJ6XDMZNZRkU3IGB6qmzwsQ6Z3YhnoOeA4as1cbDNIPVLkFlujRCNcJtYDxcHDaXRbKPozTpKb2D9zVFiuOxcsk+zkQeoX5tG9/+4SV4uzIottQrrTw7GRsG62w4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436252; c=relaxed/simple;
bh=crBVArDH+A3z/R+SIMKBS2QOt2TADWyRrbSjnmFUSHE=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=n4SwKwZcKWOS06choqQXBpIFQi7ndxPeW3HwWoLZeCqGXf9cBdi0GJ40oSXfwq5/+XanQcLdAHqNFSCcfFBMrlX2wuxIBgeYwPmTHUhkV9dsxPMTnMsom/cCygvEgb+m2d1eVjzE8QPHVpZ5Mfo6fOcSqXHK8q+034MNklxIVL8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RihmlOvW; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 455D5C4CEE7;
Wed, 28 May 2025 12:44:10 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748436250;
bh=crBVArDH+A3z/R+SIMKBS2QOt2TADWyRrbSjnmFUSHE=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=RihmlOvWB26JeWPZ01gn4DDSvN0v/bsJ24ZjWydEYlCtxxDaIKIxV/YNfaabOGB9h
OXBFLRKSH6KB0zFiClo9Ueilpp7aV6kPqR1/b8J/v7SJX+lBKu/iqwA+iK3mlhbOWr
Lw2qTrBXMlB+JUf69B5AF94nHIS7axSjPl4FYbz6XbMWU+DHd2Qb7q14YopImJ8ygc
4VOMlX46DoB9BK+vxIjI0zGNdYzvZ4J0gnIrsqxsByPzYgi+QZzgHXGQ+8UAadQzIb
lot4/IFFmFqKL/pyzPnMiPZe/dSH43o5tjFIeEu/7i4PPTLR1ivMEj58tyMa/o1iI3
FgD0DyGc2tMlw==
Date: Wed, 28 May 2025 09:44:07 -0300
From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
To: Ian Rogers <irogers@xxxxxxxxxx>
Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>,
Namhyung Kim <namhyung@xxxxxxxxxx>,
Mark Rutland <mark.rutland@xxxxxxx>,
Alexander Shishkin <alexander.shishkin@xxxxxxxxxxxxxxx>,
Jiri Olsa <jolsa@xxxxxxxxxx>,
Adrian Hunter <adrian.hunter@xxxxxxxxx>,
Kan Liang <kan.liang@xxxxxxxxxxxxxxx>,
James Clark <james.clark@xxxxxxxxxx>,
linux-perf-users@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH v2] perf pmu: Avoid segv for missing name/alias_name in
wildcarding
Message-ID: <aDcFF35JF4002MfK@x1>
References: <20250527215035.187992-1-irogers@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20250527215035.187992-1-irogers@xxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 02:50:35PM -0700, Ian Rogers wrote:
> The pmu name or alias_name fields may be NULL and should be skipped if
> so. This is done in all loops of perf_pmu___name_match except the
> final wildcard loop which was an oversight.
>
> Fixes: c786468a3585 ("perf pmu: Rename name matching for no suffix or wildcard variants")
I fixed the Fixes: to the right commit, as it seems to have been rebased
and ended up not present on my local repo:
Fixes: 63e287131cf0c59b ("perf pmu: Rename name matching for no suffix or wildcard variants")
⬢ [acme@toolbx perf-tools-next]$ git tag --contains 63e287131cf0c59b | grep ^v6
v6.15
v6.15-rc1
v6.15-rc2
v6.15-rc3
v6.15-rc4
v6.15-rc5
v6.15-rc6
v6.15-rc7
⬢ [acme@toolbx perf-tools-next]$
Or something else:
⬢ [acme@toolbx perf-tools-next]$ git tag --contains 86468a358 | grep ^v6
error: malformed object name 86468a358
⬢ [acme@toolbx perf-tools-next]$ git cat-file -t c786468a3585
fatal: Not a valid object name c786468a3585
⬢ [acme@toolbx perf-tools-next]$
further details:
commit 63e287131cf0c59b026053d6d63fe271604ffa7e
Author: Ian Rogers <irogers@xxxxxxxxxx>
Date: Fri Jan 31 23:43:18 2025 -0800
perf pmu: Rename name matching for no suffix or wildcard variants
Wildcard PMU naming will match a name like pmu_1 to a PMU name like
pmu_10 but not to a PMU name like pmu_2 as the suffix forms part of
the match. No suffix matching will match pmu_10 to either pmu_1 or
pmu_2. Add or rename matching functions on PMU to make it clearer what
kind of matching is being performed.
Signed-off-by: Ian Rogers <irogers@xxxxxxxxxx>
Reviewed-by: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>
Link: https://lore.kernel.org/r/20250201074320.746259-4-irogers@xxxxxxxxxx
Signed-off-by: Namhyung Kim <namhyung@xxxxxxxxxx>
Thanks, applied.
- Arnaldo
> Signed-off-by: Ian Rogers <irogers@xxxxxxxxxx>
> Acked-by: Namhyung Kim <namhyung@xxxxxxxxxx>
> ---
> v2. Rebase resolving merge conflicts, add Namhyung's Acked-by.
> ---
> tools/perf/util/pmu.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
> index bc1178234d3b..609828513f6c 100644
> --- a/tools/perf/util/pmu.c
> +++ b/tools/perf/util/pmu.c
> @@ -2143,6 +2143,9 @@ static bool perf_pmu___name_match(const struct perf_pmu *pmu, const char *to_mat
> for (size_t i = 0; i < ARRAY_SIZE(names); i++) {
> const char *name = names[i];
>
> + if (!name)
> + continue;
> +
> if (wildcard && perf_pmu__match_wildcard_uncore(name, to_match))
> return true;
> if (!wildcard && perf_pmu__match_ignoring_suffix_uncore(name, to_match))
> --
> 2.49.0.1204.g71687c7c1d-goog
>
Return-Path: <linux-kernel+bounces-665469-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 0B9F641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:45:13 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id C23081BA5B14
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:45:25 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 993FA286424;
Wed, 28 May 2025 12:45:05 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="emJiWeVa"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id C27BC283FF6;
Wed, 28 May 2025 12:45:04 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436304; cv=none; b=qE5/3NODVJ32l6xjL/qgP4m+Mg4tTDtMEIR1nGREbU/IBuU2hjlpIrGE/AUTggAa2Pml62ckxErlmXwOejTUhnXtDmNp2V/2de06DvMVe14tRVGBu9tNzqU4KMR2KdPstz2ZUkVh1C5i8DJmE8J3Yr8Y+S6lQa++9MTXyePnc1g=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436304; c=relaxed/simple;
bh=jPRH3OiK/9a97AF/dwI7dyrPsGMp9AO1LyvMSi3+Sc8=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=G2+UuSKQqtA6Yw4Hzq1kaDr/M6qx3jpA9NHxgawSUb7TIxN8AaSeGSwOdqAP5zfYom5t7gQT1+Zt0zZyHYZEEBKUTRfH9pL3LGhbfrloiRD+YYb1xl0XPRQ3vUaDKBv7d5IHnbtQEdlMDM49nRXpKqJmpPH05WxEIHimTCF73u4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=emJiWeVa; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 38105C4CEE7;
Wed, 28 May 2025 12:45:01 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748436304;
bh=jPRH3OiK/9a97AF/dwI7dyrPsGMp9AO1LyvMSi3+Sc8=;
h=Date:Subject:To:Cc:References:From:In-Reply-To:From;
b=emJiWeVa/VjqGNMEKf7A2csHkn4bg6RJdJPE0suLmSmPzPBjBnPdde2jtE3w9Xq2z
eWYE/WCRPTSyF2hMHNDXe/RL7pZv6cN3SPTXMnRM/HuO3VWfhNW8LKfN9yn2nCbcom
Enhd1sp0SyXskxDr5K/vLJ+3YlQrC/2BFgUPU+8YRLLNg5td2Rz8uW2eKfBe4H4K2Z
7b5veurmdOEAfYhiXvuHs/qByX08aHcaBkpo1CsPIaoeVnIZaUZnJ9JVlfnZcLm+H2
pVMRkA/2XpIwRJnPLqrLRfW1hsLWWsWB7GKTAJKDZKPmUXBbiagFkUX2Eqfq2JoiID
beQScaDzurshw==
Message-ID: <7aa4a8c8-a719-4c53-8732-25b7908af30f@xxxxxxxxxx>
Date: Wed, 28 May 2025 14:44:59 +0200
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 2/2] ASoC: dt-bindings: tas57xx: add tas5753 compatibility
To: Bram Vlerick <bram.vlerick@xxxxxxxxxxxxxxxxxxxx>,
Kevin Cernekee <cernekee@xxxxxxxxxxxx>, Liam Girdwood <lgirdwood@xxxxxxxxx>,
Mark Brown <broonie@xxxxxxxxxx>, Jaroslav Kysela <perex@xxxxxxxx>,
Takashi Iwai <tiwai@xxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>, Conor Dooley
<conor+dt@xxxxxxxxxx>, Neil Armstrong <neil.armstrong@xxxxxxxxxx>
Cc: linux-sound@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx, peter@xxxxxxxxxxxxx
References: <20250528-asoc-tas5753-support-v1-0-a50c3f6734ee@xxxxxxxxxxxxxxxxxxxx>
<20250528-asoc-tas5753-support-v1-2-a50c3f6734ee@xxxxxxxxxxxxxxxxxxxx>
From: Krzysztof Kozlowski <krzk@xxxxxxxxxx>
Content-Language: en-US
Autocrypt: addr=krzk@xxxxxxxxxx; keydata=
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 a/A=
In-Reply-To: <20250528-asoc-tas5753-support-v1-2-a50c3f6734ee@xxxxxxxxxxxxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 28/05/2025 14:10, Bram Vlerick wrote:
> Add tas5753 to ti,tas57xx devicetree bindings.
>
> Signed-off-by: Bram Vlerick <bram.vlerick@xxxxxxxxxxxxxxxxxxxx>
> ---
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>
Best regards,
Krzysztof
Return-Path: <linux-kernel+bounces-665470-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 37EE041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:45:33 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 7DB8917F894
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:45:34 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 675F13595D;
Wed, 28 May 2025 12:45:28 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="muAyxPrr"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 913A727A448;
Wed, 28 May 2025 12:45:27 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436327; cv=none; b=cqLsoaEY+aZ9gATZe7ArHu9Uhfa5JXVxC0zzlrQAOU7GmIsIkvsAvT+HFInYcxwSMekyppsCRxwP4mdXlPhWkDoyTsA7E/ZiX50KfxbGwtn/z6zws25IOLyeFe2EwlzsYtL+vjvt9gYDHGc0mXzJ3FPTWrep+pVVxuZoRdoz5Xw=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436327; c=relaxed/simple;
bh=LmgEcjResPLXXpFob/3Qa7tbGuBJRLI/7Xpku70pX8o=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=u00MXJy1ZGV1t3bDLfkDQ2f/gdcy9rW25OA3UY++RUqgVuiOubxzQWYojvDZaqdqaW4VPR9P91JsJ+kSwtTBmq+iyFD2Nrdfl/OEpz7BYW57o6cTEgLQb+SzefD8eBY6L+ZIEm91Dft9YqinnZEiUhQj4FvRnhi87raQkS2b7sU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=muAyxPrr; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id EC895C4CEE7;
Wed, 28 May 2025 12:45:23 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748436327;
bh=LmgEcjResPLXXpFob/3Qa7tbGuBJRLI/7Xpku70pX8o=;
h=Date:Subject:To:Cc:References:From:In-Reply-To:From;
b=muAyxPrrQfAiKqrfximT+GDqOnM4CS0L94Azb4XzOrb1W1jcZp3z3GRc1tB+Y/pL8
ePEXZt64V73V7hVJzxAAlpmdyNUU26wir0mn3oE6bz/OEJRkaiopKzdsxaLRcO4Z2x
hAeaIkgVrQD7r3jO81z2CJ8SxSKed/4b6W0nssW7aXCbqUE0kC4oZKsA1e9t0wrVu0
otDdIZqkS2vkaA4v9TWHuIilfQ28RPEre3jgzaNnOaJ+VaHk0JFwZ+N38gWxbFs8k9
J5eB4+QpcclcMeXw0iZ9M3xSxMcwKGd6RZIwh5fZVqP3wLosvyCEHce7nEvrArw2nA
2zEikJN3ksVeA==
Message-ID: <bf7281d8-20bb-4013-a0e2-6cdaf4e0349c@xxxxxxxxxx>
Date: Wed, 28 May 2025 14:45:22 +0200
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 1/2] ASoC: tas571x: add support for tas5753
To: Bram Vlerick <bram.vlerick@xxxxxxxxxxxxxxxxxxxx>,
Kevin Cernekee <cernekee@xxxxxxxxxxxx>, Liam Girdwood <lgirdwood@xxxxxxxxx>,
Mark Brown <broonie@xxxxxxxxxx>, Jaroslav Kysela <perex@xxxxxxxx>,
Takashi Iwai <tiwai@xxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>, Conor Dooley
<conor+dt@xxxxxxxxxx>, Neil Armstrong <neil.armstrong@xxxxxxxxxx>
Cc: linux-sound@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx, peter@xxxxxxxxxxxxx
References: <20250528-asoc-tas5753-support-v1-0-a50c3f6734ee@xxxxxxxxxxxxxxxxxxxx>
<20250528-asoc-tas5753-support-v1-1-a50c3f6734ee@xxxxxxxxxxxxxxxxxxxx>
From: Krzysztof Kozlowski <krzk@xxxxxxxxxx>
Content-Language: en-US
Autocrypt: addr=krzk@xxxxxxxxxx; keydata=
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 a/A=
In-Reply-To: <20250528-asoc-tas5753-support-v1-1-a50c3f6734ee@xxxxxxxxxxxxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 28/05/2025 14:10, Bram Vlerick wrote:
> Add support for tas5753, device is similar to tas5733 but with added
> headphone / line driver.
>
> Signed-off-by: Bram Vlerick <bram.vlerick@xxxxxxxxxxxxxxxxxxxx>
> ---
> sound/soc/codecs/tas571x.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 52 insertions(+)
>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>
Best regards,
Krzysztof
Return-Path: <linux-kernel+bounces-665471-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 73EE541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:47:53 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 5D86A9E3F0E
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:47:32 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 05F5C284B50;
Wed, 28 May 2025 12:47:48 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="MnBd9OAr"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 39F3C7E9;
Wed, 28 May 2025 12:47:46 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436467; cv=none; b=GXzDbCwy+eu5xJjYDMR2T/ubKxjYA7ilQGLHWnkj7gp2OFHhrWgk6ge+EAuxr3k2vKN+CmEnhoO7uOWbQUEbtbphT65xyN6wb0w6g1415FmQpUyCBlGBi9EOcFL7DBiXIW9CYUCb9Ri8hC4goeHnncZQuVdDi5wBMYTmZZDKY2o=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436467; c=relaxed/simple;
bh=5oEXoX22yAUoOjEnWSuham9SHeuLu8axVh5UAaxDY6w=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=QovOesVhN7lmz+2biDe95t1atm25YmZPyodeF0qInGDnQ6k7AzKbcRM9zwNMyZVUietlIBRCtiAKRzU29Ym6CuTo7T8kcaDq2oK1xy4FSYYiAHZHhtoCwOGkVHRyKeUGXxBuTd6+eGrCRnQoGS1pT9mNJwmhdTkJ8K7e3pAo1us=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MnBd9OAr; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2EC2DC4CEE7;
Wed, 28 May 2025 12:47:46 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748436466;
bh=5oEXoX22yAUoOjEnWSuham9SHeuLu8axVh5UAaxDY6w=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=MnBd9OArWVsMiwvVioDRZjfX1vjGGefk9ubxzWAbYwlc3ca97MP8cUdRgoASZuipd
sPPEB3XgzM2KbRr7cfT+lKKIXw4xOyJb+N5Ce9RC3LjGdMokyPOUzRnFEf1TIpyB9o
z9Ae/bbZSPZpCcmO14ddAp/Sdi60FWjG52Br6VhJweD2eFaXEEKl/RlhoDHQ+3DuNW
zV0nghLNOQXOEgJXc/kCEmv+szVhafPuC0+1w4qyV9PwPUSRvIbEUjbEQqN+mGZOk5
YJQYYGQaR3L2Tbusczn1fAYAg2RobXjb2nIetErWi2HVWh6oJ3kq5dQ0NDBdhrPmN+
PNUMJN3je8yqQ==
Date: Wed, 28 May 2025 09:47:43 -0300
From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
To: Ian Rogers <irogers@xxxxxxxxxx>
Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>,
Namhyung Kim <namhyung@xxxxxxxxxx>,
Mark Rutland <mark.rutland@xxxxxxx>,
Alexander Shishkin <alexander.shishkin@xxxxxxxxxxxxxxx>,
Jiri Olsa <jolsa@xxxxxxxxxx>,
Adrian Hunter <adrian.hunter@xxxxxxxxx>,
Kan Liang <kan.liang@xxxxxxxxxxxxxxx>,
Miguel Ojeda <ojeda@xxxxxxxxxx>,
Alex Gaynor <alex.gaynor@xxxxxxxxx>,
Boqun Feng <boqun.feng@xxxxxxxxx>, Gary Guo <gary@xxxxxxxxxxx>,
=?iso-8859-1?Q?Bj=F6rn?= Roy Baron <bjorn3_gh@xxxxxxxxxxxxxx>,
Benno Lossin <benno.lossin@xxxxxxxxx>,
Andreas Hindborg <a.hindborg@xxxxxxxxxx>,
Alice Ryhl <aliceryhl@xxxxxxxxxx>, Trevor Gross <tmgross@xxxxxxxxx>,
Danilo Krummrich <dakr@xxxxxxxxxx>,
Jiapeng Chong <jiapeng.chong@xxxxxxxxxxxxxxxxx>,
James Clark <james.clark@xxxxxxxxxx>,
Howard Chu <howardchu95@xxxxxxxxx>,
Weilin Wang <weilin.wang@xxxxxxxxx>,
Stephen Brennan <stephen.s.brennan@xxxxxxxxxx>,
Andi Kleen <ak@xxxxxxxxxxxxxxx>, Dmitry Vyukov <dvyukov@xxxxxxxxxx>,
linux-perf-users@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH v1 3/6] perf symbol: Move demangling code out of
symbol-elf.c
Message-ID: <aDcF7_pIU5M_XEAs@x1>
References: <20250527180703.129336-1-irogers@xxxxxxxxxx>
<20250527180703.129336-4-irogers@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20250527180703.129336-4-irogers@xxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 11:07:00AM -0700, Ian Rogers wrote:
> symbol-elf.c is used when building with libelf, symbol-minimal is used
> otherwise. There is no reason the demangling code with no dependencies
> on libelf is part of symbol-elf.c so move to symbol.c. This allows
> demangling tests to pass with NO_LIBELF=1.
At this point:
⬢ [acme@toolbx perf-tools-next]$ alias m='rm -rf ~/libexec/perf-core/ ; make -k O=/tmp/build/$(basename $PWD)/ -C tools/perf install-bin && perf test python && cat /tmp/build/$(basename $PWD)/feature/test-all.make.output'
⬢ [acme@toolbx perf-tools-next]$ m
rm: cannot remove '/home/acme/libexec/perf-core/scripts/python/Perf-Trace-Util/lib/Perf/Trace/__pycache__/Core.cpython-313.pyc': Permission denied
make: Entering directory '/home/acme/git/perf-tools-next/tools/perf'
BUILD: Doing 'make -j32' parallel build
Warning: Kernel ABI header differences:
diff -u tools/arch/arm64/include/asm/cputype.h arch/arm64/include/asm/cputype.h
Auto-detecting system features:
... libdw: [ on ]
... glibc: [ on ]
... libelf: [ on ]
... libnuma: [ on ]
... numa_num_possible_cpus: [ on ]
... libperl: [ on ]
... libpython: [ on ]
... libcrypto: [ on ]
... libcapstone: [ on ]
... llvm-perf: [ on ]
... zlib: [ on ]
... lzma: [ on ]
... get_cpuid: [ on ]
... bpf: [ on ]
... libaio: [ on ]
... libzstd: [ on ]
INSTALL libsubcmd_headers
INSTALL libperf_headers
INSTALL libapi_headers
INSTALL libsymbol_headers
INSTALL libbpf_headers
AR /tmp/build/perf-tools-next/libpmu-events.a
CC /tmp/build/perf-tools-next/util/symbol-elf.o
util/symbol-elf.c: In function â??get_plt_got_nameâ??:
util/symbol-elf.c:563:21: error: implicit declaration of function â??demangle_symâ??; did you mean â??dso__demangle_symâ??? [-Wimplicit-function-declaration]
563 | demangled = demangle_sym(di->dso, 0, sym_name);
| ^~~~~~~~~~~~
| dso__demangle_sym
util/symbol-elf.c:563:19: error: assignment to â??char *â?? from â??intâ?? makes pointer from integer without a cast [-Wint-conversion]
563 | demangled = demangle_sym(di->dso, 0, sym_name);
| ^
util/symbol-elf.c: In function â??dso__synthesize_plt_symbolsâ??:
util/symbol-elf.c:761:27: error: assignment to â??char *â?? from â??intâ?? makes pointer from integer without a cast [-Wint-conversion]
761 | demangled = demangle_sym(dso, 0, elf_name);
| ^
util/symbol-elf.c: In function â??dso__load_sym_internalâ??:
util/symbol-elf.c:1778:27: error: assignment to â??char *â?? from â??intâ?? makes pointer from integer without a cast [-Wint-conversion]
1778 | demangled = demangle_sym(dso, kmodule, elf_name);
| ^
make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:85: /tmp/build/perf-tools-next/util/symbol-elf.o] Error 1
make[3]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:142: util] Error 2
make[2]: *** [Makefile.perf:798: /tmp/build/perf-tools-next/perf-util-in.o] Error 2
make[1]: *** [Makefile.perf:290: sub-make] Error 2
make: *** [Makefile:119: install-bin] Error 2
make: Leaving directory '/home/acme/git/perf-tools-next/tools/perf'
⬢ [acme@toolbx perf-tools-next]$
- Arnaldo
Return-Path: <linux-kernel+bounces-665472-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 52BDF41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:48:14 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 38C964A10AE
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:48:11 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 480DE2857F7;
Wed, 28 May 2025 12:48:04 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="GHlR2/Dl"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id CCCC427A448
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:48:01 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436483; cv=none; b=WYzDIiRhoHVxTt/ryrqwEp1//2koCbQkHuNbq6PeR1ZOyrEiRfMnY21e2IZuphQhgC1x0P/Ye9QqTYw4qWPDTP+LDezaoZ88kp8CUb33lmXF0NRUHP1T/fDJH9xSOyJnTAeBxlUZf9YbCU5P9LLKrDhn5ub5+14XPxSmMYwRROQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436483; c=relaxed/simple;
bh=fPpDhX/Lj4v0Tt2tZ4P8Q8dmeNG2Pvm0ZZhF2NT86wk=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=Ze5edqujmA5jp+V20kGr/w3+ZaFG5Ztt0MwOr6n+L0WSdrdA/zHx6cqy+0IgOBk3LuVFO+sOZBtv2eGY6lGO1fh9WLsXHOngyMWlJQQOJKSJ8faXT2zcueC19+XmOkEdKuGHmwNBlCXYhoO+BW8/dIlH/BmEDo53o5MPz+Qug4s=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=GHlR2/Dl; arc=none smtp.client-ip=170.10.133.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748436480;
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:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=Cb3aorbBqYJpCjQzgfwsaacNftxmHwGivS7PvwgLlWk=;
b=GHlR2/DlgngX5An/kzqeDT41z6ndO/h9CEvRGHVTbmQyUlqgphq+3UA8La2XCQ0tm3vDz9
bcsLYjj9o6zyEGVlspCXTWwtEV9u4cHM6bj1YQ8zBs1aRzjyMGhxK2p+neIxrTxm+e72qW
WHR/e/BcgqcF4oZGiZDT/+Q3ea/+eRY=
Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com
[209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS
(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
us-mta-500-GBU5ENEOOxeiNmj6su9y_Q-1; Wed, 28 May 2025 08:47:59 -0400
X-MC-Unique: GBU5ENEOOxeiNmj6su9y_Q-1
X-Mimecast-MFC-AGG-ID: GBU5ENEOOxeiNmj6su9y_Q_1748436478
Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-43efa869b19so29214145e9.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 05:47:59 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748436478; x=1749041278;
h=content-transfer-encoding:in-reply-to:content-language:from
:references:cc:to:subject:user-agent:mime-version:date:message-id
:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
bh=Cb3aorbBqYJpCjQzgfwsaacNftxmHwGivS7PvwgLlWk=;
b=gMcEN9o0zHuiH7IZalm4WN02tYcEWVDWq6JQrWAPT1kqCTzhkbni9sUNRUHGFUvhdg
8dpVzr5hrw+G16EqF+4wZNHZ29RqSjliUsUPayaV0Rbl9lGRKgDXavjqk27M+0DnPArU
pn5FeGzBIPMh7y8En0LfU2dovtJI24iNNpS0oeY3iYVE6/hiYfezA+PQfcGt16oBYY+J
M+oJzxBJnR97+x/HCh4A8IxRzMUU+z3X+GeT7s7L2IlYtxlAA13Ue9KGGH1/6OCotxlX
K8qxVGSNOWo4qIyD5hXZfhhy32xJd4usbhnkNiIFoHWNhFky7QRj4NiIfPl/w5fumP0E
R6yw==
X-Forwarded-Encrypted: i=1; AJvYcCX26Of5QsvvqtdVV8Lnz/DAVRwiYN08EvOAExPdudcwNCuglGxaQjF544MWZm3eMQySLrDfZd0TpqkpbJQ=@vger.kernel.org
X-Gm-Message-State: AOJu0YwwsYJTNm6Bb2SR8WxBluGLZQQHeqTJB+YgruneD8DX9M9hVNMj
C4I05w+OquYToEBldLhIkevSd2YgVgCBltRILp8u7paecQaxJmunPMYXvcRCA2Ub81weMB+FqUM
OxXJ+BSXoPTQz5EeKitG/OgtKPnUY+Nvc4L2gJZ+0ZvhX59VQED/K0m4O399+6hDh4z0Xj+3Pf4
3f
X-Gm-Gg: ASbGncvsSDWXVHB2xCWjxRVnQP53T2OKGtVHZsdMvUn/5O1PHEFCUrypcNAidXOavNC
VWTKtbF0Ptcr8gKM7vJJgz2m+7PejMM2uk0l3epXs38We2VSc/vYeApJLnJJXyM+fURpKkvaZYh
bxKH9VSXC07FoqxrWn9SI7J2Q4wyNaUoYsQiu1MChuBS6Y0pmvNrjQDBHDU8LE7oPdvz+nMuEX3
gGTT8poWCJTVjfEFqk8lzcvRvhrCWLiawkGk/k2e6XCrqh9sqwS3MRoUJjsufIByMbGS0BiFE9c
c14r2UxL3h4=
X-Received: by 2002:a05:600c:3ca6:b0:44a:b478:1387 with SMTP id 5b1f17b1804b1-44c9465c97cmr164194715e9.17.1748436477895;
Wed, 28 May 2025 05:47:57 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IHn0xiKEpcJSzSrh775DNRafffjgj/uUM/6Uo2WjKb9P9Ak0t6BCmVMWXg+UmWKgjy5tjhLsg==
X-Received: by 2002:a05:600c:3ca6:b0:44a:b478:1387 with SMTP id 5b1f17b1804b1-44c9465c97cmr164194465e9.17.1748436477454;
Wed, 28 May 2025 05:47:57 -0700 (PDT)
Received: from [10.43.17.53] ([85.93.96.130])
by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-450ccd8540asm5108215e9.8.2025.05.28.05.47.56
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 05:47:57 -0700 (PDT)
Message-ID: <2b5f6cd0-2b5f-4687-ad43-73a7be8fbfd0@xxxxxxxxxx>
Date: Wed, 28 May 2025 14:47:56 +0200
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH] bpf: Specify access type of bpf_sysctl_get_name args
To: Eduard Zingerman <eddyz87@xxxxxxxxx>
Cc: bpf@xxxxxxxxxxxxxxx, Martin KaFai Lau <martin.lau@xxxxxxxxx>,
Alexei Starovoitov <ast@xxxxxxxxxx>, Daniel Borkmann <daniel@xxxxxxxxxxxxx>,
Andrii Nakryiko <andrii@xxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx,
Yonghong Song <yonghong.song@xxxxxxxxx>
References: <20250527165412.533335-1-jmarchan@xxxxxxxxxx>
<m2ecw97mxn.fsf@xxxxxxxxx>
From: Jerome Marchand <jmarchan@xxxxxxxxxx>
Content-Language: en-US
In-Reply-To: <m2ecw97mxn.fsf@xxxxxxxxx>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 27/05/2025 23:39, Eduard Zingerman wrote:
> "Jerome Marchand" <jmarchan@xxxxxxxxxx> writes:
>
>> The second argument of bpf_sysctl_get_name() helper is a pointer to a
>> buffer that is being written to. However that isn't specify in the
>> prototype.
>>
>> Until commit 37cce22dbd51a ("bpf: verifier: Refactor helper access
>> type tracking"), all helper accesses were considered as a possible
>> write access by the verifier, so no big harm was done. However, since
>> then, the verifier might make wrong asssumption about the content of
>> that address which might lead it to make faulty optimizations (such as
>> removing code that was wrongly labeled dead). This is what happens in
>> test_sysctl selftest to the tests related to sysctl_get_name.
>>
>> Correctly mark the second argument of bpf_sysctl_get_name() as
>> ARG_PTR_TO_UNINIT_MEM.
>>
>> Signed-off-by: Jerome Marchand <jmarchan@xxxxxxxxxx>
>> ---
>
> Looks like we don't run bpf_sysctl_get_name tests on the CI.
> CI executes the following binaries:
> - test_progs{,-no_alu32,-cpuv4}
> - test_verifier
> - test_maps
> test_progs is what is actively developed.
>
> I agree with the reasoning behind this patch, however, could you please
> add a selftest demonstrating unsafe behaviour?
Do you mean to write a selftest that demonstrate the current unsafe
behavior of the bpf_sysctl_get_name helper? I could write something
similar as the failing test_sysctl cases.
I'm thinking that a more general test that would check that helpers
don't access memory in a different way than advertised in their
prototype would be more useful. But that's quite a different endeavor.
Regards,
Jerome
> You can use tools/testing/selftests/bpf/progs/verifier_and.c as an
> example of verifier test checking for specific log message.
> (framework also supports execution if __retval is specified,
> tests can be written in plain C as well, e.g. as in .../iters.c).
>
Return-Path: <linux-kernel+bounces-665473-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D941041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:48:49 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 218D316C903
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:48:51 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 5C9732857E4;
Wed, 28 May 2025 12:48:44 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="a6GljPw+"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5DD172192EA;
Wed, 28 May 2025 12:48:42 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436523; cv=none; b=tPJl4zlFr3r52BZ1zx/Xvix5bcoKaZYP47qYlQZZosL4lo01mczlTJDnrdenODNjrK9KD+inrno7NQv2TwcX9ZfdNbl5YKQbL5yNPdd0neYwBA/LUuiwSaLBBQc3A1IC3jC2RzsRl1248sppYWiL+Hj+JZswn5buzikzyqgXYUU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436523; c=relaxed/simple;
bh=Ug8/vudQFIbaLAckMyOPR6Hl0BP4LHF3OKGs6fH3eek=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=k/04Q2WmWtSgj+UMJXUgUCkVz+jUHK91N3LGq4n5nugIUHLiB1o85UTptftrf9X6zJeJq9aOAd5mSbzdpmhRl7uzXdY8fwSwp01VrPqcIMwF4fwODiurbeit3mJiJLNl+/9jjSXnfEKnaL636W5XMWXUgS+k/5SsSA6tdRgVDb8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=a6GljPw+; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 53553C4CEE7;
Wed, 28 May 2025 12:48:42 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748436522;
bh=Ug8/vudQFIbaLAckMyOPR6Hl0BP4LHF3OKGs6fH3eek=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=a6GljPw+XJSS9WFNCvIH9kT3JiTTMaOxXtpF2Hqw2Gy89QBK8A3MPzzeie2ZiiK1t
Jqx2L0pjrrV+CZ4wIaLJHx1TLnAr8tdykz6lZAeH3ZE/zVNALh06cYqY7BMvOcr2lS
xjumZzwavAo1I7n/+LK4lJDdDoFe/Crno46Od3N0UHkz3hYjNETKrej+FZVh7DiSoI
/0nkDpUyHhB3SzevdsFmquQKUO6MU9RxC7VY29Ojc79pYG9N+OkniO2MtHit0FLtdj
nWyDG1iw5jBr4QvAExgFfyP/fBXO8ILg22hz7FKBLvkQKPyPuNm/5juYuNrAKquRyw
M5PBwQ0yZD2yQ==
Date: Wed, 28 May 2025 09:48:40 -0300
From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
To: Ian Rogers <irogers@xxxxxxxxxx>
Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>,
Namhyung Kim <namhyung@xxxxxxxxxx>,
Mark Rutland <mark.rutland@xxxxxxx>,
Alexander Shishkin <alexander.shishkin@xxxxxxxxxxxxxxx>,
Jiri Olsa <jolsa@xxxxxxxxxx>,
Adrian Hunter <adrian.hunter@xxxxxxxxx>,
Kan Liang <kan.liang@xxxxxxxxxxxxxxx>,
Miguel Ojeda <ojeda@xxxxxxxxxx>,
Alex Gaynor <alex.gaynor@xxxxxxxxx>,
Boqun Feng <boqun.feng@xxxxxxxxx>, Gary Guo <gary@xxxxxxxxxxx>,
=?iso-8859-1?Q?Bj=F6rn?= Roy Baron <bjorn3_gh@xxxxxxxxxxxxxx>,
Benno Lossin <benno.lossin@xxxxxxxxx>,
Andreas Hindborg <a.hindborg@xxxxxxxxxx>,
Alice Ryhl <aliceryhl@xxxxxxxxxx>, Trevor Gross <tmgross@xxxxxxxxx>,
Danilo Krummrich <dakr@xxxxxxxxxx>,
Jiapeng Chong <jiapeng.chong@xxxxxxxxxxxxxxxxx>,
James Clark <james.clark@xxxxxxxxxx>,
Howard Chu <howardchu95@xxxxxxxxx>,
Weilin Wang <weilin.wang@xxxxxxxxx>,
Stephen Brennan <stephen.s.brennan@xxxxxxxxxx>,
Andi Kleen <ak@xxxxxxxxxxxxxxx>, Dmitry Vyukov <dvyukov@xxxxxxxxxx>,
linux-perf-users@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH v1 1/6] perf symbol: Fix use-after-free in
filename__read_build_id
Message-ID: <aDcGKINHFEEacu3x@x1>
References: <20250527180703.129336-1-irogers@xxxxxxxxxx>
<20250527180703.129336-2-irogers@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250527180703.129336-2-irogers@xxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 11:06:58AM -0700, Ian Rogers wrote:
> The same buf is used for the program headers and reading notes. As the
> notes memory may be reallocated then this corrupts the memory pointed
> to by the phdr. Using the same buffer is in any case a logic
> error. Rather than deal with the duplicated code, introduce an elf32
> boolean and a union for either the elf32 or elf64 headers that are in
> use. Let the program headers have their own memory and grow the buffer
> for notes as necessary.
Applied.
- Arnaldo
> Before `perf list -j` compiled with asan would crash with:
> ```
> ==4176189==ERROR: AddressSanitizer: heap-use-after-free on address 0x5160000070b8 at pc 0x555d3b15075b bp 0x7ffebb5a8090 sp 0x7ffebb5a8088
> READ of size 8 at 0x5160000070b8 thread T0
> #0 0x555d3b15075a in filename__read_build_id tools/perf/util/symbol-minimal.c:212:25
> #1 0x555d3ae43aff in filename__sprintf_build_id tools/perf/util/build-id.c:110:8
> ...
>
> 0x5160000070b8 is located 312 bytes inside of 560-byte region [0x516000006f80,0x5160000071b0)
> freed by thread T0 here:
> #0 0x555d3ab21840 in realloc (perf+0x264840) (BuildId: 12dff2f6629f738e5012abdf0e90055518e70b5e)
> #1 0x555d3b1506e7 in filename__read_build_id tools/perf/util/symbol-minimal.c:206:11
> ...
>
> previously allocated by thread T0 here:
> #0 0x555d3ab21423 in malloc (perf+0x264423) (BuildId: 12dff2f6629f738e5012abdf0e90055518e70b5e)
> #1 0x555d3b1503a2 in filename__read_build_id tools/perf/util/symbol-minimal.c:182:9
> ...
> ```
>
> Note: this bug is long standing and not introduced by the other asan
> fix in commit fa9c4977fbfb ("perf symbol-minimal: Fix double free in
> filename__read_build_id").
>
> Fixes: b691f64360ecec49 ("perf symbols: Implement poor man's ELF parser")
> Signed-off-by: Ian Rogers <irogers@xxxxxxxxxx>
> ---
> tools/perf/util/symbol-minimal.c | 168 +++++++++++++------------------
> 1 file changed, 70 insertions(+), 98 deletions(-)
>
> diff --git a/tools/perf/util/symbol-minimal.c b/tools/perf/util/symbol-minimal.c
> index d8da3da01fe6..c9b7a1ca5e52 100644
> --- a/tools/perf/util/symbol-minimal.c
> +++ b/tools/perf/util/symbol-minimal.c
> @@ -90,11 +90,23 @@ int filename__read_build_id(const char *filename, struct build_id *bid)
> {
> FILE *fp;
> int ret = -1;
> - bool need_swap = false;
> + bool need_swap = false, elf32;
> u8 e_ident[EI_NIDENT];
> - size_t buf_size;
> - void *buf;
> int i;
> + union {
> + struct {
> + Elf32_Ehdr ehdr32;
> + Elf32_Phdr *phdr32;
> + };
> + struct {
> + Elf64_Ehdr ehdr64;
> + Elf64_Phdr *phdr64;
> + };
> + } hdrs;
> + void *phdr;
> + size_t phdr_size;
> + void *buf = NULL;
> + size_t buf_size = 0;
>
> fp = fopen(filename, "r");
> if (fp == NULL)
> @@ -108,119 +120,79 @@ int filename__read_build_id(const char *filename, struct build_id *bid)
> goto out;
>
> need_swap = check_need_swap(e_ident[EI_DATA]);
> + elf32 = e_ident[EI_CLASS] == ELFCLASS32;
>
> - /* for simplicity */
> - fseek(fp, 0, SEEK_SET);
> -
> - if (e_ident[EI_CLASS] == ELFCLASS32) {
> - Elf32_Ehdr ehdr;
> - Elf32_Phdr *phdr;
> -
> - if (fread(&ehdr, sizeof(ehdr), 1, fp) != 1)
> - goto out;
> + if (fread(elf32 ? (void *)&hdrs.ehdr32 : (void *)&hdrs.ehdr64,
> + elf32 ? sizeof(hdrs.ehdr32) : sizeof(hdrs.ehdr32),
> + 1, fp) != 1)
> + goto out;
>
> - if (need_swap) {
> - ehdr.e_phoff = bswap_32(ehdr.e_phoff);
> - ehdr.e_phentsize = bswap_16(ehdr.e_phentsize);
> - ehdr.e_phnum = bswap_16(ehdr.e_phnum);
> + if (need_swap) {
> + if (elf32) {
> + hdrs.ehdr32.e_phoff = bswap_32(hdrs.ehdr32.e_phoff);
> + hdrs.ehdr32.e_phentsize = bswap_16(hdrs.ehdr32.e_phentsize);
> + hdrs.ehdr32.e_phnum = bswap_16(hdrs.ehdr32.e_phnum);
> + } else {
> + hdrs.ehdr64.e_phoff = bswap_64(hdrs.ehdr64.e_phoff);
> + hdrs.ehdr64.e_phentsize = bswap_16(hdrs.ehdr64.e_phentsize);
> + hdrs.ehdr64.e_phnum = bswap_16(hdrs.ehdr64.e_phnum);
> }
> + }
> + phdr_size = elf32 ? hdrs.ehdr32.e_phentsize * hdrs.ehdr32.e_phnum
> + : hdrs.ehdr64.e_phentsize * hdrs.ehdr64.e_phnum;
> + phdr = malloc(phdr_size);
> + if (phdr == NULL)
> + goto out;
>
> - buf_size = ehdr.e_phentsize * ehdr.e_phnum;
> - buf = malloc(buf_size);
> - if (buf == NULL)
> - goto out;
> -
> - fseek(fp, ehdr.e_phoff, SEEK_SET);
> - if (fread(buf, buf_size, 1, fp) != 1)
> - goto out_free;
> -
> - for (i = 0, phdr = buf; i < ehdr.e_phnum; i++, phdr++) {
> - void *tmp;
> - long offset;
> -
> - if (need_swap) {
> - phdr->p_type = bswap_32(phdr->p_type);
> - phdr->p_offset = bswap_32(phdr->p_offset);
> - phdr->p_filesz = bswap_32(phdr->p_filesz);
> - }
> -
> - if (phdr->p_type != PT_NOTE)
> - continue;
> -
> - offset = phdr->p_offset;
> - if (phdr->p_filesz > buf_size) {
> - buf_size = phdr->p_filesz;
> - tmp = realloc(buf, buf_size);
> - if (tmp == NULL)
> - goto out_free;
> - buf = tmp;
> - }
> - fseek(fp, offset, SEEK_SET);
> - if (fread(buf, phdr->p_filesz, 1, fp) != 1)
> - goto out_free;
> + fseek(fp, elf32 ? hdrs.ehdr32.e_phoff : hdrs.ehdr64.e_phoff, SEEK_SET);
> + if (fread(phdr, phdr_size, 1, fp) != 1)
> + goto out_free;
>
> - ret = read_build_id(buf, phdr->p_filesz, bid, need_swap);
> - if (ret == 0) {
> - ret = bid->size;
> - break;
> - }
> - }
> - } else {
> - Elf64_Ehdr ehdr;
> - Elf64_Phdr *phdr;
> + if (elf32)
> + hdrs.phdr32 = phdr;
> + else
> + hdrs.phdr64 = phdr;
>
> - if (fread(&ehdr, sizeof(ehdr), 1, fp) != 1)
> - goto out;
> + for (i = 0; i < elf32 ? hdrs.ehdr32.e_phnum : hdrs.ehdr64.e_phnum; i++) {
> + size_t p_filesz;
>
> if (need_swap) {
> - ehdr.e_phoff = bswap_64(ehdr.e_phoff);
> - ehdr.e_phentsize = bswap_16(ehdr.e_phentsize);
> - ehdr.e_phnum = bswap_16(ehdr.e_phnum);
> + if (elf32) {
> + hdrs.phdr32[i].p_type = bswap_32(hdrs.phdr32[i].p_type);
> + hdrs.phdr32[i].p_offset = bswap_32(hdrs.phdr32[i].p_offset);
> + hdrs.phdr32[i].p_filesz = bswap_32(hdrs.phdr32[i].p_offset);
> + } else {
> + hdrs.phdr64[i].p_type = bswap_32(hdrs.phdr64[i].p_type);
> + hdrs.phdr64[i].p_offset = bswap_64(hdrs.phdr64[i].p_offset);
> + hdrs.phdr64[i].p_filesz = bswap_64(hdrs.phdr64[i].p_filesz);
> + }
> }
> + if ((elf32 ? hdrs.phdr32[i].p_type : hdrs.phdr64[i].p_type) != PT_NOTE)
> + continue;
>
> - buf_size = ehdr.e_phentsize * ehdr.e_phnum;
> - buf = malloc(buf_size);
> - if (buf == NULL)
> - goto out;
> -
> - fseek(fp, ehdr.e_phoff, SEEK_SET);
> - if (fread(buf, buf_size, 1, fp) != 1)
> - goto out_free;
> -
> - for (i = 0, phdr = buf; i < ehdr.e_phnum; i++, phdr++) {
> + p_filesz = elf32 ? hdrs.phdr32[i].p_filesz : hdrs.phdr64[i].p_filesz;
> + if (p_filesz > buf_size) {
> void *tmp;
> - long offset;
> -
> - if (need_swap) {
> - phdr->p_type = bswap_32(phdr->p_type);
> - phdr->p_offset = bswap_64(phdr->p_offset);
> - phdr->p_filesz = bswap_64(phdr->p_filesz);
> - }
> -
> - if (phdr->p_type != PT_NOTE)
> - continue;
>
> - offset = phdr->p_offset;
> - if (phdr->p_filesz > buf_size) {
> - buf_size = phdr->p_filesz;
> - tmp = realloc(buf, buf_size);
> - if (tmp == NULL)
> - goto out_free;
> - buf = tmp;
> - }
> - fseek(fp, offset, SEEK_SET);
> - if (fread(buf, phdr->p_filesz, 1, fp) != 1)
> + buf_size = p_filesz;
> + tmp = realloc(buf, buf_size);
> + if (tmp == NULL)
> goto out_free;
> + buf = tmp;
> + }
> + fseek(fp, elf32 ? hdrs.phdr32[i].p_offset : hdrs.phdr64[i].p_offset, SEEK_SET);
> + if (fread(buf, p_filesz, 1, fp) != 1)
> + goto out_free;
>
> - ret = read_build_id(buf, phdr->p_filesz, bid, need_swap);
> - if (ret == 0) {
> - ret = bid->size;
> - break;
> - }
> + ret = read_build_id(buf, p_filesz, bid, need_swap);
> + if (ret == 0) {
> + ret = bid->size;
> + break;
> }
> }
> out_free:
> free(buf);
> + free(phdr);
> out:
> fclose(fp);
> return ret;
> --
> 2.49.0.1204.g71687c7c1d-goog
>
Return-Path: <linux-kernel+bounces-665474-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 38B4541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:49:23 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 85EE016DF55
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:49:24 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 7F88E2857F7;
Wed, 28 May 2025 12:49:15 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="VQ0pdLNS"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id BAB987E9;
Wed, 28 May 2025 12:49:14 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436554; cv=none; b=ijbKhnV7f62l5OD/HOR14l5r1JvpWc+TiqKCweu9rMPuEh1FgpD7j/qwJ7gXO70XkN4tzxbCxuVwj2dNWeIyTFzBs8IM0aEz+KVqRF9RY8arbKUCcQ7ZKoIGZchDBi3THEDGVBJ89xO/QNbXiGBtKdDhMvcH1/UHUXLsWBGnE5g=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436554; c=relaxed/simple;
bh=X/IS5lYHsTDLAlHNttA49/Zy4IooIj/ybKO85yqOzZs=;
h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References:
Content-Type:MIME-Version; b=bEcNcsiquFFEh28Acu4PTy9rTKYfKQT7yl1uwaESBIQflm9roIug4S6AfFRc1YK4vcELFx2ExbAwuXNbbp8yFh2N6Gzhsr3uuiDWkg09ljkuZAVvmGaiD+ElFa5NDI/XBA/lreEP0E661E6MIxHiqFNSuNR55/uS3DIuNkBoF/A=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VQ0pdLNS; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5F6E7C4CEE7;
Wed, 28 May 2025 12:49:09 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748436554;
bh=X/IS5lYHsTDLAlHNttA49/Zy4IooIj/ybKO85yqOzZs=;
h=Subject:From:To:Cc:Date:In-Reply-To:References:From;
b=VQ0pdLNSXlcJDrxExPgrTgBQHlndAfRHjuHPwTXmzv9hkc+vs7XxAQT7+EMZsemIF
y0evmUYyrUqpbMHIavufzd27jC2r4qWw7onRO+R6kAY3HWO+I8Lau2VkC/QOIq0gZd
17VkioiZo/xzynYTnKfU76gZ12EuJJUL9A6W+evAXhHHK4Fern4qD0m6dRM7if9CCr
5MVAtL+w42aAryy+bBv3/tesy0RX7Yi/Bzwcs99L3vxYSEqVLAMFUjj4vQussOA2ku
livtepZlNPeOhU0Rx1rG3WjLnsI2mpVOPwH0fQESkP9a+E+0J4x6H7Y5cIMdpsm43a
Ly/OFuG9A+feA==
Message-ID: <c4adbc456e702b6e04b160efb996212fe3ee9d04.camel@xxxxxxxxxx>
Subject: Re: [PATCH v5 1/1] x86: kvm: svm: set up ERAPS support for guests
From: Amit Shah <amit@xxxxxxxxxx>
To: Tom Lendacky <thomas.lendacky@xxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx,
kvm@xxxxxxxxxxxxxxx, x86@xxxxxxxxxx, linux-doc@xxxxxxxxxxxxxxx
Cc: bp@xxxxxxxxx, tglx@xxxxxxxxxxxxx, peterz@xxxxxxxxxxxxx,
jpoimboe@xxxxxxxxxx, pawan.kumar.gupta@xxxxxxxxxxxxxxx, corbet@xxxxxxx,
mingo@xxxxxxxxxx, dave.hansen@xxxxxxxxxxxxxxx, hpa@xxxxxxxxx,
seanjc@xxxxxxxxxx, pbonzini@xxxxxxxxxx, daniel.sneddon@xxxxxxxxxxxxxxx,
kai.huang@xxxxxxxxx, sandipan.das@xxxxxxx, boris.ostrovsky@xxxxxxxxxx,
Babu.Moger@xxxxxxx, david.kaplan@xxxxxxx, dwmw@xxxxxxxxxxxx,
andrew.cooper3@xxxxxxxxxx, amit.shah@xxxxxxx
Date: Wed, 28 May 2025 14:49:07 +0200
In-Reply-To: <43bbb306-782b-401d-ac96-cc8ca550af7d@xxxxxxx>
References: <20250515152621.50648-1-amit@xxxxxxxxxx>
<20250515152621.50648-2-amit@xxxxxxxxxx>
<43bbb306-782b-401d-ac96-cc8ca550af7d@xxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
User-Agent: Evolution 3.56.2 (3.56.2-1.fc42)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Mon, 2025-05-19 at 16:22 -0500, Tom Lendacky wrote:
> On 5/15/25 10:26, Amit Shah wrote:
>=20
[...]
> > diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
> > index 571c906ffcbf..0cca1865826e 100644
> > --- a/arch/x86/kvm/cpuid.c
> > +++ b/arch/x86/kvm/cpuid.c
> > @@ -1187,6 +1187,9 @@ void kvm_set_cpu_caps(void)
> > =C2=A0 F(SRSO_USER_KERNEL_NO),
> > =C2=A0 );
> > =C2=A0
> > + if (tdp_enabled)
> > + kvm_cpu_cap_check_and_set(X86_FEATURE_ERAPS);
>=20
> Should this be moved to svm_set_cpu_caps() ? And there it can be
>=20
> if (npt_enabled)
> kvm_cpu_cap...
Yea, I don't mind moving that to svm-only code. Will do.
> > =C2=A0 case 0x80000021:
> > - entry->ebx =3D entry->ecx =3D entry->edx =3D 0;
> > + entry->ecx =3D entry->edx =3D 0;
> > =C2=A0 cpuid_entry_override(entry, CPUID_8000_0021_EAX);
> > + if (kvm_cpu_cap_has(X86_FEATURE_ERAPS))
> > + entry->ebx &=3D GENMASK(23, 16);
> > + else
> > + entry->ebx =3D 0;
> > +
>=20
> Extra blank line.
Hm, helps with visual separation of the if-else and the break. I
prefer to keep it, unless it breaks style guidelines.
> > =C2=A0 break;
> > =C2=A0 /* AMD Extended Performance Monitoring and Debug */
> > =C2=A0 case 0x80000022: {
> > diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
> > index a89c271a1951..a2b075ed4133 100644
> > --- a/arch/x86/kvm/svm/svm.c
> > +++ b/arch/x86/kvm/svm/svm.c
> > @@ -1363,6 +1363,9 @@ static void init_vmcb(struct kvm_vcpu *vcpu)
> > =C2=A0 if (boot_cpu_has(X86_FEATURE_V_SPEC_CTRL))
> > =C2=A0 set_msr_interception(vcpu, svm->msrpm,
> > MSR_IA32_SPEC_CTRL, 1, 1);
> > =C2=A0
> > + if (boot_cpu_has(X86_FEATURE_ERAPS) && npt_enabled)
>=20
> Should this be:
>=20
> if (kvm_cpu_cap_has(X86_FEATURE_ERAPS))
>=20
> ?
Indeed this is better. There was some case I wanted to cover
initially, but I don't think it needs to only depend on the host caps
in the current version at least.
[...]
=C2=A0
> > +static inline void vmcb_set_flush_guest_rap(struct vmcb *vmcb)
> > +{
> > + vmcb->control.erap_ctl |=3D ERAP_CONTROL_FLUSH_RAP;
> > +}
> > +
> > +static inline void vmcb_clr_flush_guest_rap(struct vmcb *vmcb)
> > +{
> > + vmcb->control.erap_ctl &=3D ~ERAP_CONTROL_FLUSH_RAP;
> > +}
> > +
> > +static inline void vmcb_enable_extended_rap(struct vmcb *vmcb)
>=20
> s/extended/larger/ to match the bit name ?
I also prefer it with the "larger" name, but that is a confusing bit
name -- so after the last round of review, I renamed the accessor
functions to be "better", while leaving the bit defines match what the
CPU has.
I don't mind switching this back - anyone else have any other opinions?
>=20
> > +{
> > + vmcb->control.erap_ctl |=3D ERAP_CONTROL_ALLOW_LARGER_RAP;
> > +}
> > +
> > +static inline bool vmcb_is_extended_rap(struct vmcb *vmcb)
>=20
> s/is_extended/has_larger/
>=20
> Thanks,
> Tom
Thanks for the review!
Amit
Return-Path: <linux-kernel+bounces-665475-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E146B41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:50:07 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 3AD0A176D00
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:50:09 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 291FD2857E9;
Wed, 28 May 2025 12:49:54 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Z3fMib8k"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 60BF62459EA;
Wed, 28 May 2025 12:49:53 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436593; cv=none; b=rGa+pn5uIMTmqYYWZnf2GaZ8mm/80uuuss/Wcz+MfWd/6V6BszEciOBVvSf0ufcU0Al+BoWQJWJkP9krhbu/xELFcbBpKPnwP1yNJoPgYRfvFOdqhbj/S1ruCPJryUpgctfR3zdSH7sY/qTnE7gEluM4QdQjwCHMB4+AYLVOFDk=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436593; c=relaxed/simple;
bh=zG58Qfis3MVaxADVC9NvFFiFdyxhDqPETkMDlqepafI=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=ggttLufYTKLzOusnTHB032xOYFNSCE2Qix5JfprofIshqiH7+Ehq9Wk/NzNNjNM5DqYsdFIUDH/u7CUi1YOjDUIuLap1qe6oYZ8OZEu9WI4TS3Gaknv8jUsOZ4+BtjZ2Aq/aFsPHCq4HhHbuPIaHdCmlaKGJl1sbjjYWnl1YtAU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Z3fMib8k; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id BB56BC4CEE7;
Wed, 28 May 2025 12:49:52 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748436593;
bh=zG58Qfis3MVaxADVC9NvFFiFdyxhDqPETkMDlqepafI=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=Z3fMib8k5j19SJ1VaOYDiWEju48wR5yrDqs+ASX1wA5cAhU+g7gtiWzPvrKPTASBW
VUDKcfu/+Hxm4JmubjLeHeP8RiaPwr97FTx+PkjWDr/QplXqWnt1Aeom1/rf0a1dWz
HG1c9RPX9igTHNqkngoSn9mdarEeWFVQvAxg23jGClYeFQOhjgw/M2m9TniTSQ+k56
TDDTpm14LhI7yC2M3si2aOzXuErK5HVxt0CNHJNata+AbCrlSIfVmwKM+PKtofsBP0
zu6DFtlyfB0mOpXDxhCEIAFmhupX767JhILffKGyMESkRVOr0jbIyjaoREYcgYt6VW
CNNKpElrG6NGQ==
Date: Wed, 28 May 2025 09:49:50 -0300
From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
To: Ian Rogers <irogers@xxxxxxxxxx>
Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>,
Namhyung Kim <namhyung@xxxxxxxxxx>,
Mark Rutland <mark.rutland@xxxxxxx>,
Alexander Shishkin <alexander.shishkin@xxxxxxxxxxxxxxx>,
Jiri Olsa <jolsa@xxxxxxxxxx>,
Adrian Hunter <adrian.hunter@xxxxxxxxx>,
Kan Liang <kan.liang@xxxxxxxxxxxxxxx>,
Miguel Ojeda <ojeda@xxxxxxxxxx>,
Alex Gaynor <alex.gaynor@xxxxxxxxx>,
Boqun Feng <boqun.feng@xxxxxxxxx>, Gary Guo <gary@xxxxxxxxxxx>,
=?iso-8859-1?Q?Bj=F6rn?= Roy Baron <bjorn3_gh@xxxxxxxxxxxxxx>,
Benno Lossin <benno.lossin@xxxxxxxxx>,
Andreas Hindborg <a.hindborg@xxxxxxxxxx>,
Alice Ryhl <aliceryhl@xxxxxxxxxx>, Trevor Gross <tmgross@xxxxxxxxx>,
Danilo Krummrich <dakr@xxxxxxxxxx>,
Jiapeng Chong <jiapeng.chong@xxxxxxxxxxxxxxxxx>,
James Clark <james.clark@xxxxxxxxxx>,
Howard Chu <howardchu95@xxxxxxxxx>,
Weilin Wang <weilin.wang@xxxxxxxxx>,
Stephen Brennan <stephen.s.brennan@xxxxxxxxxx>,
Andi Kleen <ak@xxxxxxxxxxxxxxx>, Dmitry Vyukov <dvyukov@xxxxxxxxxx>,
linux-perf-users@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH v1 2/6] perf test demangle-java: Don't segv if demangling
fails
Message-ID: <aDcGbmJXkLL4TVzC@x1>
References: <20250527180703.129336-1-irogers@xxxxxxxxxx>
<20250527180703.129336-3-irogers@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250527180703.129336-3-irogers@xxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 11:06:59AM -0700, Ian Rogers wrote:
> The buffer returned by dso__demangle_sym may be NULL, don't segv in
> strcmp if this happens. Currently this happens for NO_LIBELF=1 builds.
>
> Signed-off-by: Ian Rogers <irogers@xxxxxxxxxx>
> ---
> tools/perf/tests/demangle-java-test.c | 5 +++++
> 1 file changed, 5 insertions(+)
Thanks, applied to perf-tools-next,
- Arnaldo
> diff --git a/tools/perf/tests/demangle-java-test.c b/tools/perf/tests/demangle-java-test.c
> index ebaf60cdfa99..0fb3e5a4a0ed 100644
> --- a/tools/perf/tests/demangle-java-test.c
> +++ b/tools/perf/tests/demangle-java-test.c
> @@ -30,6 +30,11 @@ static int test__demangle_java(struct test_suite *test __maybe_unused, int subte
>
> for (i = 0; i < ARRAY_SIZE(test_cases); i++) {
> buf = dso__demangle_sym(/*dso=*/NULL, /*kmodule=*/0, test_cases[i].mangled);
> + if (!buf) {
> + pr_debug("FAILED to demangle: \"%s\"\n \"%s\"\n", test_cases[i].mangled,
> + test_cases[i].demangled);
> + continue;
> + }
> if (strcmp(buf, test_cases[i].demangled)) {
> pr_debug("FAILED: %s: %s != %s\n", test_cases[i].mangled,
> buf, test_cases[i].demangled);
> --
> 2.49.0.1204.g71687c7c1d-goog
Return-Path: <linux-kernel+bounces-665476-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 3231841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:51:08 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 67CC317F36B
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:51:09 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 4BD73285406;
Wed, 28 May 2025 12:51:04 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="C/Kny2Ua"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0A4CC3398A
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:51:01 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436663; cv=none; b=l6aXy/OcscEc4SDHml7XdtwPUskNypVg09Fef94QJVCIfBs/9cfR/w7nKclRnLCxNM5kuBS0vnnd+3j95vhm7xu7yT2W5qIQuvvLd30gk5pYzVtWTg2GupnWHgmFGEuyLqu1zP7KQ5ZL8MpLyVYtm03douICinneY82nuaNivDQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436663; c=relaxed/simple;
bh=QQICW+CypoFjK5BqJ6heT+1m+k+pLORcZ4vDWH1R5VQ=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=rryqr7ZnQGN/wwZr37wYYbZ0WXf/n6fsqrpAZlDOnlJyVYrTenzbLqRxP43XUanZXQJh109oV8tpSF2A2JPsHJgKDD2s3rJNoah26gWLnw5gv7DkuL5lojZs7CWz4PPK0Hou/5pyu+1wEysi7YXLVZuwFBBcAkdYqahmhT0goC0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=C/Kny2Ua; arc=none smtp.client-ip=170.10.129.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748436661;
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:
in-reply-to:in-reply-to:references:references;
bh=VWR+5p6ptUR6spJK+eA+18Unm4RrTl1BPCG1yFI4dP4=;
b=C/Kny2Uaw1MQvIC9jWoc2DFg11zc1C6yZjp5tEn7V+49KiGfwL4G2bcjJGlJV5ttFhNJO3
OO/n0iRXFUIJl2LkG0Sp8scDtG3CJoFIDZeURQY2WmXqmbidD221F4T/MjwPvl/InQrYje
ev+axCfar1FaK0/AIxq2ZnjoJzfiHXE=
Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com
[209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS
(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
us-mta-515-hJqwx2FPPEOAZybcE2atKQ-1; Wed, 28 May 2025 08:50:59 -0400
X-MC-Unique: hJqwx2FPPEOAZybcE2atKQ-1
X-Mimecast-MFC-AGG-ID: hJqwx2FPPEOAZybcE2atKQ_1748436658
Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-3a35ec8845cso2081568f8f.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 05:50:59 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748436658; x=1749041458;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=VWR+5p6ptUR6spJK+eA+18Unm4RrTl1BPCG1yFI4dP4=;
b=DrQyrZIP9nZQkYH/TJXfUPYiViImIQ4ingmzo00afE/IOzoF9cosYbp9jA7n2bEt5k
t7zzPKM3NixEgMhJkSz0SWA07RDA6b9X21yrPIp6w9voX3EwYllfOR85joFOdLlD3Qe3
9mWSdhTMDYwZlLBev47KUX+s03o1aSIqVey50HBy4+LEvV6tfwntd2vIDUw8RXg5XMks
z8zfD2hN0AKsdaaEr6omlht+mkpagqLBVuVp+rM1uyWZx2jeX/EDPkmuLM96aNPFAy1r
SEGZRLHn+pPJPL+QgzlY+oH4bdB7qGSEJxVEewmWkHzMxkz96aVEM0XANOhK/qyLTUTa
U6BQ==
X-Forwarded-Encrypted: i=1; AJvYcCW1+Z96oABtnXhtRGeIoz1e1HEMIBnstyMt6xXvkcGkO4YfAthGS0Su0vplhGqywWO0yqkenXnPnPfGk1Q=@vger.kernel.org
X-Gm-Message-State: AOJu0Yx5e/PV1sUqFJ+6CC+VzAZWRdMXJ+LJN21WmQscKHWOdlUi9mIf
ZR+h+njUvcEZhQZDmFDkI64wnFF5Lyxi1BXyUjAXTBGBHEtHLcN+R4h3w7/HXj5IhMfJSbVAxjc
/Xu62o0ErYZoXWkJhMsoTbZiS1nWQBnaxj06f/Bxqvr2jQNrVmRafFuZ9pfK0LHykTFA+fDxRug
==
X-Gm-Gg: ASbGncteWyHCfwhE6uMzLtmGDQZK3LGhzHxSDQzsM8A/R1PUh7skHW3/mjfrjXDvuPk
xgOJWnLWmqqEp52eivL45WnXex20nJWNraWWUNeLz+GPloCT2/nAqnxuj8q/tquVJIdB/tDA+l0
jkYPZmx2Ej9lIo2APAMl0Q8pkbO7GeOs8A3BT5hh93irLytPODZBXW290Eq2RLtl3OOQ93AVqx5
HgI1k7xto4BaPsk+sD9HDs8uiHDrJFGa+zsHAAHcHoZsd71CQT5PS5hSk5mJEbKhc2yGMi3XMJm
ofZPxg==
X-Received: by 2002:a05:6000:2dc4:b0:3a4:dfc2:2a3e with SMTP id ffacd0b85a97d-3a4e957b210mr1631504f8f.39.1748436658022;
Wed, 28 May 2025 05:50:58 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IHGDT3PcePhhoStWwOcSwIXapMw5WkiamBsXKooLqximtwBRdLGBqfc9aCDPZLpSSxOK/eQEQ==
X-Received: by 2002:a05:6000:2dc4:b0:3a4:dfc2:2a3e with SMTP id ffacd0b85a97d-3a4e957b210mr1631488f8f.39.1748436657639;
Wed, 28 May 2025 05:50:57 -0700 (PDT)
Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575])
by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4500e1dd6c8sm20848545e9.37.2025.05.28.05.50.56
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 05:50:56 -0700 (PDT)
Date: Wed, 28 May 2025 08:50:54 -0400
From: "Michael S. Tsirkin" <mst@xxxxxxxxxx>
To: Jason Wang <jasowang@xxxxxxxxxx>
Cc: xuanzhuo@xxxxxxxxxxxxxxxxx, eperezma@xxxxxxxxxx,
virtualization@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH V2 00/19] virtio_ring in order support
Message-ID: <20250528084904-mutt-send-email-mst@xxxxxxxxxx>
References: <20250528064234.12228-1-jasowang@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528064234.12228-1-jasowang@xxxxxxxxxx>
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 02:42:15PM +0800, Jason Wang wrote:
> Hello all:
>
> This sereis tries to implement the VIRTIO_F_IN_ORDER to
> virtio_ring. This is done by introducing virtqueue ops so we can
> implement separate helpers for different virtqueue layout/features
> then the in-order were implemented on top.
>
> Tests shows 3%-5% imporvment with packed virtqueue PPS with KVM guest
> testpmd on the host.
ok this looks quite clean. We are in the merge window so not merging new
intrusive stuff, but after rc2 or so pls ping me I will put it in next.
> Changes since V1:
>
> - use const global array of function pointers to avoid indirect
> branches to eliminate retpoline when mitigation is enabled
> - fix used length calculation when processing used ids in a batch
> - fix sparse warnings
>
> Please review.
>
> Thanks
>
> Jason Wang (19):
> virtio_ring: rename virtqueue_reinit_xxx to virtqueue_reset_xxx()
> virtio_ring: switch to use vring_virtqueue in virtqueue_poll variants
> virtio_ring: unify logic of virtqueue_poll() and more_used()
> virtio_ring: switch to use vring_virtqueue for virtqueue resize
> variants
> virtio_ring: switch to use vring_virtqueue for virtqueue_kick_prepare
> variants
> virtio_ring: switch to use vring_virtqueue for virtqueue_add variants
> virtio: switch to use vring_virtqueue for virtqueue_add variants
> virtio_ring: switch to use vring_virtqueue for enable_cb_prepare
> variants
> virtio_ring: use vring_virtqueue for enable_cb_delayed variants
> virtio_ring: switch to use vring_virtqueue for disable_cb variants
> virtio_ring: switch to use vring_virtqueue for detach_unused_buf
> variants
> virtio_ring: use u16 for last_used_idx in virtqueue_poll_split()
> virtio_ring: introduce virtqueue ops
> virtio_ring: determine descriptor flags at one time
> virtio_ring: factor out core logic of buffer detaching
> virtio_ring: factor out core logic for updating last_used_idx
> virtio_ring: factor out split indirect detaching logic
> virtio_ring: factor out split detaching logic
> virtio_ring: add in order support
>
> drivers/virtio/virtio_ring.c | 896 ++++++++++++++++++++++++++---------
> 1 file changed, 684 insertions(+), 212 deletions(-)
>
> --
> 2.31.1
Return-Path: <linux-kernel+bounces-665477-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id CBA4741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:51:23 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 577E67AF91A
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:50:05 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 2E2A72857E4;
Wed, 28 May 2025 12:51:11 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="rCl0VbJJ"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 59D96284B50;
Wed, 28 May 2025 12:51:09 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436670; cv=none; b=DdkGwa1VyWLk7nMfmOqDArRfnEmJ7RvDTASrw3Xpp0mnFbMe+6/txdzBAk/jlHs+vIxtrekoinMD1o64fsw63u3tkGar6aTJLxR7JhZgFAwtN18mLTz93sKNKWCN9yhmw1pFNjzeeIwNUkwhkHZEnMpEopXfgP84nu0NB2zBRP8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436670; c=relaxed/simple;
bh=cLH9qffAGEku8VAcA1NrwyVqoqY9fO9tSWVZlmurDRk=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=NJ2VGlJNSDGclZGEoHKT2duGyN8kF/vCDIUw/WYcgf7zorj+Xli+/l/P83aUH8IIf6zvwiWg8QV4gsDzRSBL5iW+YFq9yzG/Q1x/kXubKsz1N5Bq1CXvXOIWAIPbnn1po9YVQRGfq9uSYTGlECquXsAlvFa6+qXtrA8RPNSmjBk=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=rCl0VbJJ; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3B976C4CEED;
Wed, 28 May 2025 12:51:09 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748436669;
bh=cLH9qffAGEku8VAcA1NrwyVqoqY9fO9tSWVZlmurDRk=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=rCl0VbJJYSTxtsSM0wq5JtaYgNdWBxXSGev4c807eFT2cV0Gk7WtBct0tOIb4NUYd
3+TAXbamprgrXeBEJltFYsgApJkycB2LPzp5v6k26B3D2f6nLoTTK5y/vTDSmTYisT
S265Obji7Ruw1g/U4o/KtKC1WsqV/R3ZqWcAOQySG8d9RZUtw9XxClmxNLCRw56o5X
S8EEquEI1YYGqGwe/JYbUY5PGI8kl929Q/FNLe3cqCbGkx7AJ3WY0wPrW7ADja9QWQ
MxjZoH2mUsUGdY/+oEQdhE/MMFVPnmCDt2JglVpzlN8FS/2fkl9RiSu41y1ysQVRGs
qmIy29xfDUx0g==
Date: Wed, 28 May 2025 09:51:06 -0300
From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
To: Ian Rogers <irogers@xxxxxxxxxx>
Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>,
Namhyung Kim <namhyung@xxxxxxxxxx>,
Mark Rutland <mark.rutland@xxxxxxx>,
Alexander Shishkin <alexander.shishkin@xxxxxxxxxxxxxxx>,
Jiri Olsa <jolsa@xxxxxxxxxx>,
Adrian Hunter <adrian.hunter@xxxxxxxxx>,
Kan Liang <kan.liang@xxxxxxxxxxxxxxx>,
Miguel Ojeda <ojeda@xxxxxxxxxx>,
Alex Gaynor <alex.gaynor@xxxxxxxxx>,
Boqun Feng <boqun.feng@xxxxxxxxx>, Gary Guo <gary@xxxxxxxxxxx>,
=?iso-8859-1?Q?Bj=F6rn?= Roy Baron <bjorn3_gh@xxxxxxxxxxxxxx>,
Benno Lossin <benno.lossin@xxxxxxxxx>,
Andreas Hindborg <a.hindborg@xxxxxxxxxx>,
Alice Ryhl <aliceryhl@xxxxxxxxxx>, Trevor Gross <tmgross@xxxxxxxxx>,
Danilo Krummrich <dakr@xxxxxxxxxx>,
Jiapeng Chong <jiapeng.chong@xxxxxxxxxxxxxxxxx>,
James Clark <james.clark@xxxxxxxxxx>,
Howard Chu <howardchu95@xxxxxxxxx>,
Weilin Wang <weilin.wang@xxxxxxxxx>,
Stephen Brennan <stephen.s.brennan@xxxxxxxxxx>,
Andi Kleen <ak@xxxxxxxxxxxxxxx>, Dmitry Vyukov <dvyukov@xxxxxxxxxx>,
linux-perf-users@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH v1 4/6] perf intel-tpebs: Avoid race when evlist is being
deleted
Message-ID: <aDcGukvGcklMWe8E@x1>
References: <20250527180703.129336-1-irogers@xxxxxxxxxx>
<20250527180703.129336-5-irogers@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250527180703.129336-5-irogers@xxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 11:07:01AM -0700, Ian Rogers wrote:
> Reading through the evsel->evlist may seg fault if a sample arrives
> when the evlist is being deleted. Detect this case and ignore samples
> arriving when the evlist is being deleted.
Thanks, applied to perf-tools-next,
- Arnaldo
> Fixes: bcfab08db7fb ("perf intel-tpebs: Filter non-workload samples")
> Signed-off-by: Ian Rogers <irogers@xxxxxxxxxx>
> ---
> tools/perf/util/intel-tpebs.c | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/tools/perf/util/intel-tpebs.c b/tools/perf/util/intel-tpebs.c
> index 4ad4bc118ea5..3b92ebf5c112 100644
> --- a/tools/perf/util/intel-tpebs.c
> +++ b/tools/perf/util/intel-tpebs.c
> @@ -162,9 +162,17 @@ static bool is_child_pid(pid_t parent, pid_t child)
>
> static bool should_ignore_sample(const struct perf_sample *sample, const struct tpebs_retire_lat *t)
> {
> - pid_t workload_pid = t->evsel->evlist->workload.pid;
> - pid_t sample_pid = sample->pid;
> + pid_t workload_pid, sample_pid = sample->pid;
>
> + /*
> + * During evlist__purge the evlist will be removed prior to the
> + * evsel__exit calling evsel__tpebs_close and taking the
> + * tpebs_mtx. Avoid a segfault by ignoring samples in this case.
> + */
> + if (t->evsel->evlist == NULL)
> + return true;
> +
> + workload_pid = t->evsel->evlist->workload.pid;
> if (workload_pid < 0 || workload_pid == sample_pid)
> return false;
>
> --
> 2.49.0.1204.g71687c7c1d-goog
Return-Path: <linux-kernel+bounces-665478-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 6870741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:51:59 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 8EDD94A103D
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:52:00 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id CDD0D284B25;
Wed, 28 May 2025 12:51:52 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="hRTYQjBy"
Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7FB2F2857E0
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:51:49 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436711; cv=none; b=edrokVDQ22CV4qV3Ekq9GedOvoPn0C9lRfLihGaLtArfobFpHceTx0fR53/HaY0wsBCN73Y6epI11DyKswsE4E3w0ak81+IGly3J9kPVoD5HOaH9xxsiCrs6XwQHTX1Pcwm6V5pCi/FxRYJsIjT8f8ukUlxa0zxgZA0C6x5un+A=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436711; c=relaxed/simple;
bh=smnmeCYjTzrN7LZXl255smVaN14J1a0yovz29gZaSe4=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=kqtLzN+FZernnBHyjc05kzsvNj5SzddVqJTKg5tir/Y02OI51PEzwSzE8GuWClG2a1HQTmELyms06xIv3+tynA5GcETXZ/+nqWASpGCbosEJ6fc3q4VLnsjTGHReXrmGSxX+/x+ziVaWlvsGjYmAM/33s9EY4kef8LADjufkFZA=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=hRTYQjBy; arc=none smtp.client-ip=209.85.221.48
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org
Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-3a4e575db1aso184455f8f.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 05:51:49 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=linaro.org; s=google; t=1748436708; x=1749041508; darn=vger.kernel.org;
h=content-transfer-encoding:in-reply-to:autocrypt:content-language
:from:references:cc:to:subject:user-agent:mime-version:date
:message-id:from:to:cc:subject:date:message-id:reply-to;
bh=gtxFBVmEk7OdwaX8iO3/bw0IJ4UWR9xfEnW8+jRDwF4=;
b=hRTYQjByxz8tUg+v5qNHFSF0N1NN0zvNq/apZ9uLhnxdNHEhyqT4PtHylGFHjwaHyV
bcHP2m9AcLzOEoDAbUeg7lZ/aPNz8JXv+4AwcivV2hhe8rG7TOnDsiPu3kB2vwfo9Ba0
37KmteoDyj0UL1pGv0H9iQ7KCv9rBLAB//3fSVweYDKG+S0j9ytwPiXs7eQ4azRgl4Li
1YZlPhcab3nUh3kBb11XXw0VygNQHO0BZ125xzD42rNlLizuRIaQ5SlmwLxe78+5deWl
SJoO+ahGwN3lAlU+9b2ltoVXIWrFiitW+gxQupS4XW7e5oUVVmEUahpD4WBGC0mv+4CM
s8Mw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748436708; x=1749041508;
h=content-transfer-encoding:in-reply-to:autocrypt:content-language
:from:references:cc:to:subject:user-agent:mime-version:date
:message-id:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=gtxFBVmEk7OdwaX8iO3/bw0IJ4UWR9xfEnW8+jRDwF4=;
b=Ct543yle0srUrGuKveQ6DZKPDeaL7EYfO9mFJxf/4o4pOCGPUN6zy2gTWx7cNc7KzF
yVl5S+2WZZl1Tl2onM8EXVWmmGI5ZoU4GK7dx36poFXHAv6j4UqLNMTqsxlMNvVutuzg
E9JoHTtl8l9EIv93W11dx0YwILC+LTSksqyXJ0ma/d6qLuDajOlcn9qO2/RDhfmDTsNi
lX4ngGE6HUtUPhfUnMYsIPdaOG20CVi8KKMtgJMTAtIW2NCXUhRZ4XCTnROF7nH4fTdv
32oPy/z7pRJBNXN+i/NFAB+6hcEJLqesSqCBywj4ON6wxH4cLqSauskyqgBoZdruvoEl
oChQ==
X-Forwarded-Encrypted: i=1; AJvYcCXB3nJZeMk+cM+ElPSDwvRIgCNUxD1iFDn4IobhXQlHuMHS7WDHKt14HWFKgrMqdGUclOg282qcUC4MNtY=@vger.kernel.org
X-Gm-Message-State: AOJu0YztYg9Cq7nGh4/KWYzvpF/8CrPSTJx7Ot+/sFLTMbu2oz+mDtcB
SGCZeX9cr9OMnunJ08MBt4paeb40RUQbgmBdQqMjqBInjEYiva/shYCL+Nf+T8KwmsM=
X-Gm-Gg: ASbGncuqtkF80L7ZFVianehYbBuGTRu8IOaSy7zALI0e7NyGS3DXW9wgI8muFyVVLOs
8P5pLAo8GTGZcmy077okA3zxuTjT3WEUzhGUck06wLesb9jdUUjZSHiXABijPrtp2rZqXiErdlO
Qa+RWlyI/oGP00SaVZYZr8Q1K0tw68+asipUWtN2B+7u4Hl8/i4dDZEPK0JWIOnk4dtMNt/5QM0
bE6TasgKY2JEBgS2b5Iyj9rhh4KSsGWy1bNFvETS51aWAaQhw+Duv+QuCyzYPCZT2W1kDHrLtan
DXlWLxdc0YgxdwlwgvQf+oMAqmmwZ9nCAnwjZCPUippu9AuFeqPDqjG9AVE0S/YP1pU4mq4=
X-Google-Smtp-Source: AGHT+IHZRUnH5Rp4aCZ1f9KHXVlEFS+hqrw/ulDU4vW45oSOCS0VZWSjD+ROhW/0PEAj5L3PAac3+A==
X-Received: by 2002:a05:6000:4210:b0:3a4:e0e1:8dc8 with SMTP id ffacd0b85a97d-3a4e0e18ffamr1983903f8f.9.1748436707566;
Wed, 28 May 2025 05:51:47 -0700 (PDT)
Received: from [192.168.1.29] ([178.197.223.125])
by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a4eac7e0c8sm1423525f8f.30.2025.05.28.05.51.44
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 05:51:46 -0700 (PDT)
Message-ID: <4a2a8504-310d-4b65-ba52-1854f461b604@xxxxxxxxxx>
Date: Wed, 28 May 2025 14:51:43 +0200
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 01/17] pinctrl: starfive: Allow compile testing on other
platforms
To: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>
Cc: Linus Walleij <linus.walleij@xxxxxxxxxx>,
Basavaraj Natikar <Basavaraj.Natikar@xxxxxxx>,
Shyam Sundar S K <Shyam-sundar.S-k@xxxxxxx>,
Andrew Jeffery <andrew@xxxxxxxxxxxxxxxxxxxx>, Joel Stanley <joel@xxxxxxxxx>,
Avi Fishman <avifishman70@xxxxxxxxx>, Tomer Maimon <tmaimon77@xxxxxxxxx>,
Tali Perry <tali.perry1@xxxxxxxxx>, Patrick Venture <venture@xxxxxxxxxx>,
Nancy Yuen <yuenn@xxxxxxxxxx>, Benjamin Fair <benjaminfair@xxxxxxxxxx>,
=?UTF-8?Q?Jonathan_Neusch=C3=A4fer?= <j.neuschaefer@xxxxxxx>,
=?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= <rafal@xxxxxxxxxx>,
Broadcom internal kernel review list
<bcm-kernel-feedback-list@xxxxxxxxxxxx>, Ray Jui <rjui@xxxxxxxxxxxx>,
Scott Branden <sbranden@xxxxxxxxxxxx>,
Geert Uytterhoeven <geert+renesas@xxxxxxxxx>,
David Rhodes <david.rhodes@xxxxxxxxxx>,
Richard Fitzgerald <rf@xxxxxxxxxxxxxxxxxxxxx>,
Charles Keepax <ckeepax@xxxxxxxxxxxxxxxxxxxxx>,
Lorenzo Bianconi <lorenzo@xxxxxxxxxx>, Sean Wang <sean.wang@xxxxxxxxxx>,
Jesper Nilsson <jesper.nilsson@xxxxxxxx>,
Lars Persson <lars.persson@xxxxxxxx>,
Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx>,
Damien Le Moal <dlemoal@xxxxxxxxxx>, Vladimir Zapolskiy <vz@xxxxxxxxx>,
Michal Simek <michal.simek@xxxxxxx>, Emil Renner Berthing <kernel@xxxxxxxx>,
Jianlong Huang <jianlong.huang@xxxxxxxxxxxxxxxx>,
Hal Feng <hal.feng@xxxxxxxxxxxxxxxx>,
Matthias Brugger <matthias.bgg@xxxxxxxxx>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxx>,
Alexandre Belloni <alexandre.belloni@xxxxxxxxxxx>,
Maxime Coquelin <mcoquelin.stm32@xxxxxxxxx>,
Alexandre Torgue <alexandre.torgue@xxxxxxxxxxx>, linux-gpio@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-aspeed@xxxxxxxxxxxxxxxx,
openbmc@xxxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx,
linux-renesas-soc@xxxxxxxxxxxxxxx, linux-sound@xxxxxxxxxxxxxxx,
patches@xxxxxxxxxxxxxxxxxxxxx, linux-mediatek@xxxxxxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxx, linux-riscv@xxxxxxxxxxxxxxxxxxx,
linux-rtc@xxxxxxxxxxxxxxx, linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx
References: <20250528-pinctrl-const-desc-v1-0-76fe97899945@xxxxxxxxxx>
<20250528-pinctrl-const-desc-v1-1-76fe97899945@xxxxxxxxxx>
<CAMuHMdX7krbAssbYpJ1RA1EkpOP26nUhuhmtSW8X9nJkB5amBQ@xxxxxxxxxxxxxx>
From: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>
Content-Language: en-US
Autocrypt: addr=krzysztof.kozlowski@xxxxxxxxxx; keydata=
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
2+47PN9NZAOyb771QoVr8A==
In-Reply-To: <CAMuHMdX7krbAssbYpJ1RA1EkpOP26nUhuhmtSW8X9nJkB5amBQ@xxxxxxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 28/05/2025 14:36, Geert Uytterhoeven wrote:
> Hi Krzysztof,
>
> On Wed, 28 May 2025 at 12:41, Krzysztof Kozlowski
> <krzysztof.kozlowski@xxxxxxxxxx> wrote:
>> Always descent to drivers/pinctrl/starfive/ because limiting it with
>> SOC_STARFIVE is redundant since all of its Kconfig entries are already
>
> ... since its Makefile doesn't build anything if no Starfive-specific
> pin control Kconfig options are enabled?
Yes, that's better. Thank you.
>
>> have "depends on SOC_STARFIVE". This allows compile testing on other
>> architectures with allyesconfig.
>>
>> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>
>> ---
>> drivers/pinctrl/Makefile | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/pinctrl/Makefile b/drivers/pinctrl/Makefile
>> index ac27e88677d14f1c697e0d0be9f295c746556f4d..dcede70b25660833a158c298d1269d6ecea9dd8b 100644
>> --- a/drivers/pinctrl/Makefile
>> +++ b/drivers/pinctrl/Makefile
>> @@ -82,7 +82,7 @@ obj-y += sophgo/
>> obj-y += spacemit/
>> obj-$(CONFIG_PINCTRL_SPEAR) += spear/
>> obj-y += sprd/
>> -obj-$(CONFIG_SOC_STARFIVE) += starfive/
>> +obj-y += starfive/
>> obj-$(CONFIG_PINCTRL_STM32) += stm32/
>> obj-y += sunplus/
>> obj-$(CONFIG_PINCTRL_SUNXI) += sunxi/
>
> The actual change LGTM, so
> Reviewed-by: Geert Uytterhoeven <geert+renesas@xxxxxxxxx>
>
Ack
Best regards,
Krzysztof
Return-Path: <linux-kernel+bounces-665479-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 9574E41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:52:11 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id C33274A1D8D
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:52:12 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id DEC272868A4;
Wed, 28 May 2025 12:51:55 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="aEt+GYsq"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id C6B10286426;
Wed, 28 May 2025 12:51:54 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436714; cv=none; b=urG2aXT7Po3FVg/bI3p1ilhXRO8kEfTkWpIfhTBewVnpK3+/lmDi/O49UXUTbcE1KnRAP635YVpxUyRfLQm6Yqp/euVe6Vu0wnhcCcvdku0j3MAaurjd65J7fpfc/cgPvJhlxvg9eITAxDuysj++HmQqX1Jq0UejOGesacRnP9w=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436714; c=relaxed/simple;
bh=SnUlBhjo9u7u7RSQrf1KxHe5OU8VLd3rhNPNiG04UYs=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=iowaPBtb46JBPx0BqR9LJKXCGn6VWwVIEM1usKVQhpTh2O7tV4Vfpx+jxcPZ3ejxeNJD72JUIjobnN1Giw+ARA6+UgDeikoMLjSCBucF6GRBhUm9Tmyvfg1Kkp4FFPSAJEfUgRuWWD8Bkk9qVNZH3TjB5KJ8MjJ64jD+3j44Tko=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=aEt+GYsq; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id A382FC4CEE7;
Wed, 28 May 2025 12:51:53 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748436714;
bh=SnUlBhjo9u7u7RSQrf1KxHe5OU8VLd3rhNPNiG04UYs=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=aEt+GYsqzE/+UQ/K7Hk/i0gSau9lkAT3hL2R69tTRbqACtYt9VtHrhU5qY0ibd3Xj
EJQ3E8/eVuQ9CMfiomfFvchMrdqbskU2hRlkRmAtm4ZIk8qi0YifCqF9f6QQA6JgtE
p9De0b1FMSRDj/IMgpOUzmtgoo7e4OSxEvq6HLAAHH/hJqFzgGBn4DqT7Lqat/SLZg
i0LTZOqnq5R4P1I+l0r6kgNzamQPvGQG6wa2Lk1zJDGxHNf7he3hgN4ROBnp87OAo+
yqhhzH8qztpN1ghO3+normZFf8fTYF/IPwFkOX9NyZx1nJKPkCY5jmDg9H6VKHkSff
XClTH+H/YL33g==
Date: Wed, 28 May 2025 14:51:51 +0200
From: Lorenzo Bianconi <lorenzo@xxxxxxxxxx>
To: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>
Cc: Linus Walleij <linus.walleij@xxxxxxxxxx>,
Basavaraj Natikar <Basavaraj.Natikar@xxxxxxx>,
Shyam Sundar S K <Shyam-sundar.S-k@xxxxxxx>,
Andrew Jeffery <andrew@xxxxxxxxxxxxxxxxxxxx>,
Joel Stanley <joel@xxxxxxxxx>, Avi Fishman <avifishman70@xxxxxxxxx>,
Tomer Maimon <tmaimon77@xxxxxxxxx>,
Tali Perry <tali.perry1@xxxxxxxxx>,
Patrick Venture <venture@xxxxxxxxxx>, Nancy Yuen <yuenn@xxxxxxxxxx>,
Benjamin Fair <benjaminfair@xxxxxxxxxx>,
Jonathan =?iso-8859-1?Q?Neusch=E4fer?= <j.neuschaefer@xxxxxxx>,
=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <rafal@xxxxxxxxxx>,
Broadcom internal kernel review list <bcm-kernel-feedback-list@xxxxxxxxxxxx>,
Ray Jui <rjui@xxxxxxxxxxxx>, Scott Branden <sbranden@xxxxxxxxxxxx>,
Geert Uytterhoeven <geert+renesas@xxxxxxxxx>,
David Rhodes <david.rhodes@xxxxxxxxxx>,
Richard Fitzgerald <rf@xxxxxxxxxxxxxxxxxxxxx>,
Charles Keepax <ckeepax@xxxxxxxxxxxxxxxxxxxxx>,
Sean Wang <sean.wang@xxxxxxxxxx>,
Jesper Nilsson <jesper.nilsson@xxxxxxxx>,
Lars Persson <lars.persson@xxxxxxxx>,
Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx>,
Damien Le Moal <dlemoal@xxxxxxxxxx>,
Vladimir Zapolskiy <vz@xxxxxxxxx>,
Michal Simek <michal.simek@xxxxxxx>,
Emil Renner Berthing <kernel@xxxxxxxx>,
Jianlong Huang <jianlong.huang@xxxxxxxxxxxxxxxx>,
Hal Feng <hal.feng@xxxxxxxxxxxxxxxx>,
Matthias Brugger <matthias.bgg@xxxxxxxxx>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxx>,
Alexandre Belloni <alexandre.belloni@xxxxxxxxxxx>,
Maxime Coquelin <mcoquelin.stm32@xxxxxxxxx>,
Alexandre Torgue <alexandre.torgue@xxxxxxxxxxx>,
linux-gpio@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-aspeed@xxxxxxxxxxxxxxxx, openbmc@xxxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx,
linux-renesas-soc@xxxxxxxxxxxxxxx, linux-sound@xxxxxxxxxxxxxxx,
patches@xxxxxxxxxxxxxxxxxxxxx, linux-mediatek@xxxxxxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxx, linux-riscv@xxxxxxxxxxxxxxxxxxx,
linux-rtc@xxxxxxxxxxxxxxx, linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [PATCH 16/17] pinctrl: Constify static 'pinctrl_desc'
Message-ID: <aDcG58lXUgtW7pRZ@lore-desk>
References: <20250528-pinctrl-const-desc-v1-0-76fe97899945@xxxxxxxxxx>
<20250528-pinctrl-const-desc-v1-16-76fe97899945@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha512;
protocol="application/pgp-signature"; boundary="/Ro94xiBz0rUYauQ"
Content-Disposition: inline
In-Reply-To: <20250528-pinctrl-const-desc-v1-16-76fe97899945@xxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
--/Ro94xiBz0rUYauQ
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
> The local static 'struct pinctrl_desc' is not modified, so can be made
> const for code safety.
>=20
> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>
For airoha bits:
Acked-by: Lorenzo Bianconi <lorenzo@xxxxxxxxxx>
> ---
> drivers/pinctrl/berlin/berlin.c | 2 +-
> drivers/pinctrl/cirrus/pinctrl-cs42l43.c | 2 +-
> drivers/pinctrl/mediatek/pinctrl-airoha.c | 2 +-
> drivers/pinctrl/pinctrl-artpec6.c | 2 +-
> drivers/pinctrl/pinctrl-bm1880.c | 2 +-
> drivers/pinctrl/pinctrl-k210.c | 2 +-
> drivers/pinctrl/pinctrl-lpc18xx.c | 2 +-
> drivers/pinctrl/pinctrl-mlxbf3.c | 2 +-
> drivers/pinctrl/pinctrl-tb10x.c | 2 +-
> drivers/pinctrl/pinctrl-zynq.c | 2 +-
> drivers/pinctrl/starfive/pinctrl-starfive-jh7100.c | 2 +-
> 11 files changed, 11 insertions(+), 11 deletions(-)
>=20
> diff --git a/drivers/pinctrl/berlin/berlin.c b/drivers/pinctrl/berlin/ber=
lin.c
> index c372a2a24be4bb80b1f2475ef8512171c8e1326f..e5a35b803ce66d247c5e5ad78=
e6677570a1add60 100644
> --- a/drivers/pinctrl/berlin/berlin.c
> +++ b/drivers/pinctrl/berlin/berlin.c
> @@ -283,7 +283,7 @@ static int berlin_pinctrl_build_state(struct platform=
_device *pdev)
> return 0;
> }
> =20
> -static struct pinctrl_desc berlin_pctrl_desc =3D {
> +static const struct pinctrl_desc berlin_pctrl_desc =3D {
> .name =3D "berlin-pinctrl",
> .pctlops =3D &berlin_pinctrl_ops,
> .pmxops =3D &berlin_pinmux_ops,
> diff --git a/drivers/pinctrl/cirrus/pinctrl-cs42l43.c b/drivers/pinctrl/c=
irrus/pinctrl-cs42l43.c
> index 628b60ccc2b07dc77e36da8919436fa348749e0c..a90beb986f5bb707c54552e13=
33802943a4b04bc 100644
> --- a/drivers/pinctrl/cirrus/pinctrl-cs42l43.c
> +++ b/drivers/pinctrl/cirrus/pinctrl-cs42l43.c
> @@ -448,7 +448,7 @@ static const struct pinconf_ops cs42l43_pin_conf_ops =
=3D {
> .pin_config_group_set =3D cs42l43_pin_config_group_set,
> };
> =20
> -static struct pinctrl_desc cs42l43_pin_desc =3D {
> +static const struct pinctrl_desc cs42l43_pin_desc =3D {
> .name =3D "cs42l43-pinctrl",
> .owner =3D THIS_MODULE,
> =20
> diff --git a/drivers/pinctrl/mediatek/pinctrl-airoha.c b/drivers/pinctrl/=
mediatek/pinctrl-airoha.c
> index b97b28ebb37a6ec092360f8ea404dd67e6c43eac..ccd2b512e8365b3a5af0bb223=
329f39119bc7078 100644
> --- a/drivers/pinctrl/mediatek/pinctrl-airoha.c
> +++ b/drivers/pinctrl/mediatek/pinctrl-airoha.c
> @@ -2852,7 +2852,7 @@ static const struct pinctrl_ops airoha_pctlops =3D {
> .dt_free_map =3D pinconf_generic_dt_free_map,
> };
> =20
> -static struct pinctrl_desc airoha_pinctrl_desc =3D {
> +static const struct pinctrl_desc airoha_pinctrl_desc =3D {
> .name =3D KBUILD_MODNAME,
> .owner =3D THIS_MODULE,
> .pctlops =3D &airoha_pctlops,
> diff --git a/drivers/pinctrl/pinctrl-artpec6.c b/drivers/pinctrl/pinctrl-=
artpec6.c
> index 717f9592b28b51737e67aafc93664b1345511908..af67057128ff1e9e766b958fe=
ce9c71518c89081 100644
> --- a/drivers/pinctrl/pinctrl-artpec6.c
> +++ b/drivers/pinctrl/pinctrl-artpec6.c
> @@ -907,7 +907,7 @@ static const struct pinconf_ops artpec6_pconf_ops =3D=
{
> .pin_config_group_set =3D artpec6_pconf_group_set,
> };
> =20
> -static struct pinctrl_desc artpec6_desc =3D {
> +static const struct pinctrl_desc artpec6_desc =3D {
> .name =3D "artpec6-pinctrl",
> .owner =3D THIS_MODULE,
> .pins =3D artpec6_pins,
> diff --git a/drivers/pinctrl/pinctrl-bm1880.c b/drivers/pinctrl/pinctrl-b=
m1880.c
> index b0000fe5b31dfbcd6af6eaf0c01029f00cbd205b..387798fb09be51cabd5cb76e0=
d90a28b1d363050 100644
> --- a/drivers/pinctrl/pinctrl-bm1880.c
> +++ b/drivers/pinctrl/pinctrl-bm1880.c
> @@ -1298,7 +1298,7 @@ static const struct pinmux_ops bm1880_pinmux_ops =
=3D {
> .set_mux =3D bm1880_pinmux_set_mux,
> };
> =20
> -static struct pinctrl_desc bm1880_desc =3D {
> +static const struct pinctrl_desc bm1880_desc =3D {
> .name =3D "bm1880_pinctrl",
> .pins =3D bm1880_pins,
> .npins =3D ARRAY_SIZE(bm1880_pins),
> diff --git a/drivers/pinctrl/pinctrl-k210.c b/drivers/pinctrl/pinctrl-k21=
0.c
> index eddb01796a83eb86c8c5bcf6788c999e8bf2926a..66c04120c29deccf53b21cbf8=
705f1d10c74ace5 100644
> --- a/drivers/pinctrl/pinctrl-k210.c
> +++ b/drivers/pinctrl/pinctrl-k210.c
> @@ -879,7 +879,7 @@ static const struct pinctrl_ops k210_pinctrl_ops =3D {
> .dt_free_map =3D pinconf_generic_dt_free_map,
> };
> =20
> -static struct pinctrl_desc k210_pinctrl_desc =3D {
> +static const struct pinctrl_desc k210_pinctrl_desc =3D {
> .name =3D "k210-pinctrl",
> .pins =3D k210_pins,
> .npins =3D K210_NPINS,
> diff --git a/drivers/pinctrl/pinctrl-lpc18xx.c b/drivers/pinctrl/pinctrl-=
lpc18xx.c
> index 0f5a7bed2f81b731714e3b65908df23f2ffdfd63..5e0201768323521754e7ecd27=
e878a81925c18a6 100644
> --- a/drivers/pinctrl/pinctrl-lpc18xx.c
> +++ b/drivers/pinctrl/pinctrl-lpc18xx.c
> @@ -1257,7 +1257,7 @@ static const struct pinctrl_ops lpc18xx_pctl_ops =
=3D {
> .dt_free_map =3D pinctrl_utils_free_map,
> };
> =20
> -static struct pinctrl_desc lpc18xx_scu_desc =3D {
> +static const struct pinctrl_desc lpc18xx_scu_desc =3D {
> .name =3D "lpc18xx/43xx-scu",
> .pins =3D lpc18xx_pins,
> .npins =3D ARRAY_SIZE(lpc18xx_pins),
> diff --git a/drivers/pinctrl/pinctrl-mlxbf3.c b/drivers/pinctrl/pinctrl-m=
lxbf3.c
> index ffb5dda364dc81808cfd5a168ce3f1e9f119357d..fcd9d46de89fb3e5215784109=
ba31b171fd15448 100644
> --- a/drivers/pinctrl/pinctrl-mlxbf3.c
> +++ b/drivers/pinctrl/pinctrl-mlxbf3.c
> @@ -231,7 +231,7 @@ static const struct pinmux_ops mlxbf3_pmx_ops =3D {
> .gpio_request_enable =3D mlxbf3_gpio_request_enable,
> };
> =20
> -static struct pinctrl_desc mlxbf3_pin_desc =3D {
> +static const struct pinctrl_desc mlxbf3_pin_desc =3D {
> .name =3D "pinctrl-mlxbf3",
> .pins =3D mlxbf3_pins,
> .npins =3D ARRAY_SIZE(mlxbf3_pins),
> diff --git a/drivers/pinctrl/pinctrl-tb10x.c b/drivers/pinctrl/pinctrl-tb=
10x.c
> index d6bb8f58978df1577db24f96c2174f47962b5520..2d2e9f697ff99b4209dda8d55=
11f478a18b26a21 100644
> --- a/drivers/pinctrl/pinctrl-tb10x.c
> +++ b/drivers/pinctrl/pinctrl-tb10x.c
> @@ -735,7 +735,7 @@ static const struct pinmux_ops tb10x_pinmux_ops =3D {
> .set_mux =3D tb10x_pctl_set_mux,
> };
> =20
> -static struct pinctrl_desc tb10x_pindesc =3D {
> +static const struct pinctrl_desc tb10x_pindesc =3D {
> .name =3D "TB10x",
> .pins =3D tb10x_pins,
> .npins =3D ARRAY_SIZE(tb10x_pins),
> diff --git a/drivers/pinctrl/pinctrl-zynq.c b/drivers/pinctrl/pinctrl-zyn=
q.c
> index caa8a2ca3e681718fe213921deca8d130371b122..dcde86fed10db3e2dfebc19cb=
841ea7f63e74989 100644
> --- a/drivers/pinctrl/pinctrl-zynq.c
> +++ b/drivers/pinctrl/pinctrl-zynq.c
> @@ -1143,7 +1143,7 @@ static const struct pinconf_ops zynq_pinconf_ops =
=3D {
> .pin_config_group_set =3D zynq_pinconf_group_set,
> };
> =20
> -static struct pinctrl_desc zynq_desc =3D {
> +static const struct pinctrl_desc zynq_desc =3D {
> .name =3D "zynq_pinctrl",
> .pins =3D zynq_pins,
> .npins =3D ARRAY_SIZE(zynq_pins),
> diff --git a/drivers/pinctrl/starfive/pinctrl-starfive-jh7100.c b/drivers=
/pinctrl/starfive/pinctrl-starfive-jh7100.c
> index 27f99183d994dccb92aac81ca42228bdb9225e87..aeaa0ded7c1e5ee7f9c5e4113=
bfd208fb844ba7d 100644
> --- a/drivers/pinctrl/starfive/pinctrl-starfive-jh7100.c
> +++ b/drivers/pinctrl/starfive/pinctrl-starfive-jh7100.c
> @@ -898,7 +898,7 @@ static const struct pinconf_ops starfive_pinconf_ops =
=3D {
> .is_generic =3D true,
> };
> =20
> -static struct pinctrl_desc starfive_desc =3D {
> +static const struct pinctrl_desc starfive_desc =3D {
> .name =3D DRIVER_NAME,
> .pins =3D starfive_pins,
> .npins =3D ARRAY_SIZE(starfive_pins),
>=20
> --=20
> 2.45.2
>=20
--/Ro94xiBz0rUYauQ
Content-Type: application/pgp-signature; name=signature.asc
-----BEGIN PGP SIGNATURE-----
iHUEABYKAB0WIQTquNwa3Txd3rGGn7Y6cBh0uS2trAUCaDcG5wAKCRA6cBh0uS2t
rABgAQDChqlOupLj8dMgBJtw+ZYSz23faF0MajHN6Bznec2ZxQD/b4iuNIDVxDRu
w5SyOOU+1pIOKkH9BqiTR31e740csQc=
=S7ff
-----END PGP SIGNATURE-----
--/Ro94xiBz0rUYauQ--
Return-Path: <linux-kernel+bounces-665480-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E121441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:52:35 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 0F2D57B1467
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:51:08 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 28D5C28642F;
Wed, 28 May 2025 12:52:08 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KIKZgbMn"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5D61428541C;
Wed, 28 May 2025 12:52:07 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436727; cv=none; b=aaU6bi3PoEfDO1z8rTWMKQ6EWb9JkyyB89eymRJwcADmEeKOZs6GvhA/MpR7qcBC58yy9tRHj/3cMzaoUJG8snAmOc+q+hTDe43ZmW1qteUScrVvR8kYyA561Edo8S6yDAxbfxbwDZJuGgYcf2ttdqnqdDQMkNERMRC+9Quh/NE=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436727; c=relaxed/simple;
bh=Tx1soG5xi0/OQ1HgMXSwNaV5R2DfipanGqwLWjiDG/k=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=nOXuWOgKnxGeDwLkdjpCLD41uNxR+JoN0uLqYZMvlYbwQbQegzrEIJ4jUJh+IMB1/5PKKHpa+uWT8eaLYmA+vYydX9t0uEyw0VCcjyAYXC7fQ6xJ4Rm2leTIYHqTYGHGV03cK3dHjuGR7QxJotHqSACEONtoU8u2+96mD56cKC8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KIKZgbMn; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id B20C1C4CEEF;
Wed, 28 May 2025 12:52:06 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748436726;
bh=Tx1soG5xi0/OQ1HgMXSwNaV5R2DfipanGqwLWjiDG/k=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=KIKZgbMnYKb8Uv9YpuRtgDyLrpcxf3WqxH0bcjyAmyP5j0Vwn9w3Fntx6TuM6FRL5
/zO0qR/R+ZQODy223sQh4EHiH7xNJ2OcweKJDZK1udEcdDHJvyLhMq33eUq/YWdPVq
IJ7Kl+QNOvi4oAw0Nvrgtvzyazif2lJg1UtYvfumUBxcYeq9SLrHOKi5HH/es1n4eb
eCgtvZKGQTyCaYv2EwD+/bjFbyJu53Rpe6G2tJYaTcx+PvunQgHiAveBhzGvxlHZwQ
AWmH8iXLM/nhowb+OaD/PwPtGyrJy8JH9VoFmynLEncQ4VNiaQiaAnFJwiRk62VHRV
Zmb5qa25Ks0Mw==
Date: Wed, 28 May 2025 07:52:05 -0500
From: "Rob Herring (Arm)" <robh@xxxxxxxxxx>
To: Tommaso Merciai <tommaso.merciai.xr@xxxxxxxxxxxxxx>
Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx, Maxime Ripard <mripard@xxxxxxxxxx>,
Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>,
David Airlie <airlied@xxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>, Conor Dooley <conor+dt@xxxxxxxxxx>,
devicetree@xxxxxxxxxxxxxxx,
Geert Uytterhoeven <geert+renesas@xxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
biju.das.jz@xxxxxxxxxxxxxx, Thomas Zimmermann <tzimmermann@xxxxxxx>,
Magnus Damm <magnus.damm@xxxxxxxxx>, tomm.merciai@xxxxxxxxx,
linux-renesas-soc@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH RESEND] dt-bindings: gpu: mali-bifrost: Add compatible
for RZ/G3E SoC
Message-ID: <174843671875.3661556.2233132513679539264.robh@xxxxxxxxxx>
References: <20250528073040.904033-1-tommaso.merciai.xr@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528073040.904033-1-tommaso.merciai.xr@xxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 09:30:40 +0200, Tommaso Merciai wrote:
> Add a compatible string for the Renesas RZ/G3E SoC variants that
> include a Mali-G52 GPU. These variants share the same restrictions on
> interrupts, clocks, and power domains as the RZ/G2L SoC, so extend
> the existing schema validation accordingly.
>
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>
> Reviewed-by: Geert Uytterhoeven <geert+renesas@xxxxxxxxx>
> Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@xxxxxxxxxxxxxx>
> ---
> Documentation/devicetree/bindings/gpu/arm,mali-bifrost.yaml | 2 ++
> 1 file changed, 2 insertions(+)
>
Applied, thanks!
Return-Path: <linux-kernel+bounces-665481-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 7A85341E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:52:50 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 8782BA2085C
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:52:13 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 6D3282868A7;
Wed, 28 May 2025 12:52:17 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="E1iu/fi+"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id A05412857E9;
Wed, 28 May 2025 12:52:16 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436736; cv=none; b=LL5zw5cjgNOf59suxe/vpVq+y98vza1BVAGSjjN9EIX2NlrAm4UCjMP7hZZV4DvEwwjOviYAzeUCPNQABmvnOnRt0K01Uhw30dwz3qDt/8eFGUlKPJIEtuTJNR/S0DuDwA/FaHPQlaZamWD+bWFKlXSzok34I2Fksx922lcJ24I=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436736; c=relaxed/simple;
bh=/7nc0zNXso/vg7/WocILzt8NiGgJZkpeuyv+TmpJgmA=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=eaAlSwqh0NL3K7ivSGxoxZTndwmkGS3uJICKoO6RSXvaEM2b66Q2yupC6TbqfBx1oqj5K/9uEQo7uYHpsiD+YOGnfJV2DkIiA03/Y5gFO/+BXL7WPDfDGwvm1dGXGk2COLoOKF/7QrPCyADC8uy8fktv0wEgMWRHTIkHAZCZcTo=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=E1iu/fi+; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 944AEC4CEE7;
Wed, 28 May 2025 12:52:15 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748436736;
bh=/7nc0zNXso/vg7/WocILzt8NiGgJZkpeuyv+TmpJgmA=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=E1iu/fi+ZFkGZjfL8K7ror9VBvwW9RNtuulNJQ50cw/e7tyReflVdoIDmOdQpzMoT
YPalzoxFULCr8pdfE9n+3ZDH8jwmcyBNBkiwW3FJBfW5rhYevsvsjcnBHRrC7OAWSW
Aisw7u/ikdFnFXkr7nExR7Cky5hfpIx23femLnWRPkWlXNV/PoeQvMCuuur6vL5kJr
oXP/+NsEhML2WUFvNizTUh5+QDPCyL4I4HX6aO/bqPc0W98ocn7vbnU51013lny7jC
BHEsQCBZFuj3+pjpIxGOXIH/oAXHLGWqd3CNNOVlbZXi/Xa8XWaI4zGXFtNgZMw/Md
15aTSUjk1g5Jg==
Date: Wed, 28 May 2025 09:52:13 -0300
From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
To: Ian Rogers <irogers@xxxxxxxxxx>
Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>,
Namhyung Kim <namhyung@xxxxxxxxxx>,
Mark Rutland <mark.rutland@xxxxxxx>,
Alexander Shishkin <alexander.shishkin@xxxxxxxxxxxxxxx>,
Jiri Olsa <jolsa@xxxxxxxxxx>,
Adrian Hunter <adrian.hunter@xxxxxxxxx>,
Kan Liang <kan.liang@xxxxxxxxxxxxxxx>,
Miguel Ojeda <ojeda@xxxxxxxxxx>,
Alex Gaynor <alex.gaynor@xxxxxxxxx>,
Boqun Feng <boqun.feng@xxxxxxxxx>, Gary Guo <gary@xxxxxxxxxxx>,
=?iso-8859-1?Q?Bj=F6rn?= Roy Baron <bjorn3_gh@xxxxxxxxxxxxxx>,
Benno Lossin <benno.lossin@xxxxxxxxx>,
Andreas Hindborg <a.hindborg@xxxxxxxxxx>,
Alice Ryhl <aliceryhl@xxxxxxxxxx>, Trevor Gross <tmgross@xxxxxxxxx>,
Danilo Krummrich <dakr@xxxxxxxxxx>,
Jiapeng Chong <jiapeng.chong@xxxxxxxxxxxxxxxxx>,
James Clark <james.clark@xxxxxxxxxx>,
Howard Chu <howardchu95@xxxxxxxxx>,
Weilin Wang <weilin.wang@xxxxxxxxx>,
Stephen Brennan <stephen.s.brennan@xxxxxxxxxx>,
Andi Kleen <ak@xxxxxxxxxxxxxxx>, Dmitry Vyukov <dvyukov@xxxxxxxxxx>,
linux-perf-users@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH v1 5/6] perf test intel-pt: Skip jitdump test if no libelf
Message-ID: <aDcG_RVzA4d5FY2R@x1>
References: <20250527180703.129336-1-irogers@xxxxxxxxxx>
<20250527180703.129336-6-irogers@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250527180703.129336-6-irogers@xxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 11:07:02AM -0700, Ian Rogers wrote:
> jitdump support is only present if building with libelf. Skip the
> intel-pt jitdump test if perf isn't compiled with libelf support.
Thanks, applied to perf-tools-next,
- Arnaldo
> Signed-off-by: Ian Rogers <irogers@xxxxxxxxxx>
> ---
> tools/perf/tests/shell/test_intel_pt.sh | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/tools/perf/tests/shell/test_intel_pt.sh b/tools/perf/tests/shell/test_intel_pt.sh
> index f3a9a040bacc..32a9b8dcb200 100755
> --- a/tools/perf/tests/shell/test_intel_pt.sh
> +++ b/tools/perf/tests/shell/test_intel_pt.sh
> @@ -288,6 +288,11 @@ test_jitdump()
> jitdump_incl_dir="${script_dir}/../../util"
> jitdump_h="${jitdump_incl_dir}/jitdump.h"
>
> + if ! perf check feature -q libelf ; then
> + echo "SKIP: libelf is needed for jitdump"
> + return 2
> + fi
> +
> if [ ! -e "${jitdump_h}" ] ; then
> echo "SKIP: Include file jitdump.h not found"
> return 2
> --
> 2.49.0.1204.g71687c7c1d-goog
Return-Path: <linux-kernel+bounces-665482-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 8A32A41E003FB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:52:50 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 214351BC0DE3
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:53:03 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 9010E286D5B;
Wed, 28 May 2025 12:52:25 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Qyq82CRO"
Received: from mail-ej1-f66.google.com (mail-ej1-f66.google.com [209.85.218.66])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 11CE328641B;
Wed, 28 May 2025 12:52:22 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.66
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436744; cv=none; b=PYunkI7+QE9LglcHY1LtcsbAZfNDAJ3GI7aoNoKOisqP04PZD7SuZUIovWgvRSMnhgqt56GOzL3fZhkrPRj+7wRe7g0sp3meRrEHGCeEZ0TggOZZiTfc/dkjwz1dZ1ldn4OE1DqT2VpAKyKSQ0wvcKmHaVasMo3qQuT6o7pv/vU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436744; c=relaxed/simple;
bh=rSHnMm/I4ZVMAQknHKeTSE6S/3hkTR9sAaQ2wgg/3GU=;
h=MIME-Version:From:Date:Message-ID:Subject:To:Content-Type; b=aZpYyNMDXSvoRNJ8G7DNn8tRPe+Dgwgv1/8xkhAyuqCSfNPsWY/Hg2D3Z5lPkVDQo/K0EQycZk16SxIf2c4mDOcOt6vSvLw8CsgEmz5sd220WyWgiwnax/SxdPAcVbZNJdl5XNDoBq6abDhzbd9jzbHzFwovCjeXanUn3HZ5FTo=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Qyq82CRO; arc=none smtp.client-ip=209.85.218.66
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-ej1-f66.google.com with SMTP id a640c23a62f3a-ad5740dd20eso683777466b.0;
Wed, 28 May 2025 05:52:22 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748436741; x=1749041541; darn=vger.kernel.org;
h=to:subject:message-id:date:from:mime-version:from:to:cc:subject
:date:message-id:reply-to;
bh=Q6gUi0f9uAatD/UfV5AR0D8k7xuPtA+o2t8ZNTCP0J4=;
b=Qyq82CROaBL21M2MwV+P90fTXoOJGXXa1D8VBiCp+HPSFf+gYxoZVoaMsjflyAyJmU
ViEdmU3pCGKnsGi9qSW4Q6AGH8zO6sZhdSDSSIoYgIQV9nYxwZUAbPnv93FO8r98qG0y
xTqLt8CPxWnOQwA6iOMUzCsHo37WLK5eKGT8+WjH9N44cjn01ug44+8V+24oYyITXk6X
Nr+XOOphLEDEhLiRCFt2moru0Amd1+1uyteZfvytHlmr1WT7LYOUBHsQ0POUGk2VSCly
oJsan4PFdRA4E+z+edTICDULIvU+ypjw10SOUPX0NiWqWQlDXB5ETy9oYWW0RwMC96vo
kSdg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748436741; x=1749041541;
h=to:subject:message-id:date:from:mime-version:x-gm-message-state
:from:to:cc:subject:date:message-id:reply-to;
bh=Q6gUi0f9uAatD/UfV5AR0D8k7xuPtA+o2t8ZNTCP0J4=;
b=WfsXzF826uT+7P8pVNJnS0jAzSt3BXLRSQbl3JiNKRVWYr95VvA2aJcPvlYB/PzSn5
eAn1xIoXrtRsOuGtgvgQrZImT21kiKt1KwNzPuQD9xxZ4TI6a+NbA+T2xc1ddSOwCW0p
VXfKRmSTylHlaywn+JxS8Qkust4KltTyIFB1vJMld9iPFkezsPTiSvCxlxBiYsILH98g
KABzCWrf9BHBH4SDNK4Hq6N/ktdNy11itkPyGv/L+eOlJlSr3j86Yn4fUuDMEdGEb1EW
ZAMgU+L1DdEzH/DmN6LKaUpgyHlWBVnXp4vPxL78sV4gE6bi7uFWB2A2v+EAH/+Hq/Tl
C4+w==
X-Forwarded-Encrypted: i=1; AJvYcCUuqWGr9RO5R7caYCiuit7q1r8JWXo7pGXDb9PkQHs+WcQWCUiwXCONsHXga611GRs2WYfYMXoBDdP/Fbo=@vger.kernel.org, AJvYcCWXJfsD7Ayhsr43DENRGlfe1BKCsoXhDcZdFTbVoQlau+Ga7IzVfBKaGlxg+D09vAWoDXAKs29r@xxxxxxxxxxxxxxx, AJvYcCX9eLg3KDReupqtxyaeE1Ufc9wxEPzW9U5hsGkY2/Es1fqgEpoI56G0OR33d6xw8tNQP8Kiguu1ZRlha1uxqPZ1@xxxxxxxxxxxxxxx
X-Gm-Message-State: AOJu0YxRXFTGc/95UhCpis7ctIwmKGRfxQqx/xbUqOgaG6ozx336P+KO
k+zeOQiwADWT48jCJnq1orAcvrOzELCe5w8ItTTXQOEcSF2c6oGZFa7gX/LSUVlpPlx2mmjqZr4
Gbr+iotN2sD2BydLoHxbviRdYuhDnZYe2VM7B+5I=
X-Gm-Gg: ASbGncsz1o3xzk/g6HPZZbvTBkUG+xC7hf7AysvENqOVOqxcGvSkNeBWkMt3y0q7tuU
z9qgvPfv/qTKBxdfVZvtnRdeV5W41db8RUSBK5zmWotVywz2RcKOJKtkZYYk9p33jvPfrWK5VDQ
NQMUkIIVTe1a3tsgrSQUT+iPb8fk+TGZr0BSnU2EtyaK21
X-Google-Smtp-Source: AGHT+IH3Z8+NTchkkrhzXIRW9XhN78aZiIFMRJuj2GxLRE0a/FSnwoZZ/z81gAnvkQOnuGdnHPKq/HcUz08E8e439B8=
X-Received: by 2002:a17:907:2da0:b0:ad8:8d3c:8a73 with SMTP id
a640c23a62f3a-ad88d3c8d43mr640644366b.17.1748436741125; Wed, 28 May 2025
05:52:21 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
From: ying chen <yc1082463@xxxxxxxxx>
Date: Wed, 28 May 2025 20:52:09 +0800
X-Gm-Features: AX0GCFvcMRe9eaU2zLXLzQ3AXlGsNYT_X_RyAVlEYp0RSgrVDkCPnVNhzQh1ogQ
Message-ID: <CAN2Y7hxscai7JuC0fPE8DZ3QOPzO_KsE_AMCuyeTYRQQW_mA2w@xxxxxxxxxxxxxx>
Subject: [bug report, linux 6.15-rc4] A large number of connections in the
SYN_SENT state caused the nf_conntrack table to be full.
To: pablo@xxxxxxxxxxxxx, kadlec@xxxxxxxxxxxxx, fw@xxxxxxxxx,
davem@xxxxxxxxxxxxx, edumazet@xxxxxxxxxx, kuba@xxxxxxxxxx, pabeni@xxxxxxxxxx,
netfilter-devel@xxxxxxxxxxxxxxx, coreteam@xxxxxxxxxxxxx,
netdev@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hello all,
I encountered an "nf_conntrack: table full" warning on Linux 6.15-rc4.
Running cat /proc/net/nf_conntrack showed a large number of
connections in the SYN_SENT state.
As is well known, if we attempt to connect to a non-existent port, the
system will respond with an RST and then delete the conntrack entry.
However, when we frequently connect to non-existent ports, the
conntrack entries are not deleted, eventually causing the nf_conntrack
table to fill up.
The problem can be reproduced using the following command:
hping3 -S -V -p 9007 --flood xx.x.xxx.xxx
~$ cat /proc/net/nf_conntrack
ipv4 2 tcp 6 112 SYN_SENT src=xx.x.xxx.xxx dst=xx.xx.xx.xx
sport=2642 dport=9007 src=xx.xx.xx.xx dst=xx.x.xxx.xxx sport=9007
dport=2642 mark=0 zone=0 use=2
ipv4 2 tcp 6 111 SYN_SENT src=xx.x.xxx.xxx dst=xx.xx.xx.xx
sport=11510 dport=9007 src=xx.xx.xx.xx dst=xx.x.xxx.xxx sport=9007
dport=11510 mark=0 zone=0 use=2
ipv4 2 tcp 6 111 SYN_SENT src=xx.x.xxx.xxx dst=xx.xx.xx.xx
sport=28611 dport=9007 src=xx.xx.xx.xx dst=xx.x.xxx.xxx sport=9007
dport=28611 mark=0 zone=0 use=2
ipv4 2 tcp 6 112 SYN_SENT src=xx.x.xxx.xxx dst=xx.xx.xx.xx
sport=62849 dport=9007 src=xx.xx.xx.xx dst=xx.x.xxx.xxx sport=9007
dport=62849 mark=0 zone=0 use=2
ipv4 2 tcp 6 111 SYN_SENT src=xx.x.xxx.xxx dst=xx.xx.xx.xx
sport=3410 dport=9007 src=xx.xx.xx.xx dst=xx.x.xxx.xxx sport=9007
dport=3410 mark=0 zone=0 use=2
ipv4 2 tcp 6 111 SYN_SENT src=xx.x.xxx.xxx dst=xx.xx.xx.xx
sport=44185 dport=9007 [UNREPLIED] src=xx.xx.xx.xx dst=xx.x.xxx.xxx
sport=9007 dport=44185 mark=0 zone=0 use=2
ipv4 2 tcp 6 111 SYN_SENT src=xx.x.xxx.xxx dst=xx.xx.xx.xx
sport=51099 dport=9007 src=xx.xx.xx.xx dst=xx.x.xxx.xxx sport=9007
dport=51099 mark=0 zone=0 use=2
ipv4 2 tcp 6 112 SYN_SENT src=xx.x.xxx.xxx dst=xx.xx.xx.xx
sport=23609 dport=9007 src=xx.xx.xx.xx dst=xx.x.xxx.xxx sport=9007
dport=23609 mark=0 zone=0 use=2
Return-Path: <linux-kernel+bounces-665483-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D7CCA41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:54:34 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id D5A5C3B2669
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:54:13 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 6E85A28641C;
Wed, 28 May 2025 12:54:27 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="SfDn8l2h"
Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4174A214211
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:54:25 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436866; cv=none; b=tlOTbZXkoJcIeDUyvZKjAkzWlYgzwgpW5vbzoxPf2vVLx0U4CzJnl7FdA9gBUO/usQjEG+wzv4fow66FElDmpgSnFErPYvoO46TjvMoavUqaWF7awI70nnxQ3HtFzgYb4Z0mDUrIQLJPcflg9MoVQzeKKg+KvJgw5r2RlopYX74=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436866; c=relaxed/simple;
bh=4kzUi/76sU4TOqttKuHGINwdxexMyc5EKBLODsQjbIM=;
h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From:
To:Cc:Content-Type; b=d19w4LUtWa+DsTCJ+egS/WTbNTSJWo0H+/kqyNkUED0tyrcfKIzAI2i5r2H5cPCKJ7IntnmAa67uTum9SpZ4jrf8xdwTOlvrHqk9N1vu1U+c6TgUuyegt3DgIWHtjXALBRZ+EOVUpBP3EgXzB5AfKNCGVQch78b3AQuU27sTBnE=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=SfDn8l2h; arc=none smtp.client-ip=209.85.216.74
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com
Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-31147652b36so3562156a91.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 05:54:25 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=google.com; s=20230601; t=1748436864; x=1749041664; darn=vger.kernel.org;
h=cc:to:from:subject:message-id:references:mime-version:in-reply-to
:date:from:to:cc:subject:date:message-id:reply-to;
bh=xuuvC7M6sC9txYVcxiKR7Nz7uk/ZLoX9CRoOMl5AG9g=;
b=SfDn8l2hz+9fZu0Gd0vx2BgA0Dw904zl0x1+/FLzUrd9wBxGOhpRr3JCZkN02wyY/N
gIRkJLJ09jR8MSpCPZY1ELkZu+rlZ5UkUNAJ1ujBianemAoDJ4yYynTl75gXWst+lDQl
2E7cYi7AmAwdxyj7kMdvEudVBpeZ0qvGJnlPyx0vMSSdeyHRW4hgAS5sznrPiFOzUekS
GfuLStDxAKzQPkIlCaYER05LYGgBpVQW+qMYcPT8sGydr9tOn/KShx2uc6QqK/xAAIsA
rZDGOZzxsMi7tYAuD3WxoKNXcb0PqBlqEWn56n/KrURGIl00xz8K0++Uzh1kRcLPLtht
XccQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748436864; x=1749041664;
h=cc:to:from:subject:message-id:references:mime-version:in-reply-to
:date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
bh=xuuvC7M6sC9txYVcxiKR7Nz7uk/ZLoX9CRoOMl5AG9g=;
b=lmrrc7uiMu8Lgj5qDQtRiiQdPKaTFH48WmgBVqO1Ia7akLoj34RpT2AyD9f8tP4lwd
d1IldvTEa3imoVP7tLNwO+QbbHWX4RSQMCcgxbRI8DkchpUVSxMsZdgD13UAmOBDyuaE
S5lQLYypdQ7CpUX55xKbuUJj7uAjHVBR8cHKLvtHiFqlFZVIGBDxl0DCqY3aE71GsJ49
cuFg8Yk4dHQ3ttRnOetkcvX33BpGq1l4e6gOd3EBQPhuXdXDWY1v/YY9LnhE0hTzgq9b
UZ5x5JB6GEkbTyjIbgnWNQwjW+NpuJU+J2RZr6yqyIDG0uYQb1o7EJgMQBQpluOdxBXv
mH0A==
X-Forwarded-Encrypted: i=1; AJvYcCV0Hu3ixwQ3MgYhHFbU7bNCGWRYoTu9VOcbLir1K+XQS2iEUw/fbyz+QNX85f/c+djRBYGlLPgNVk6yy9Q=@vger.kernel.org
X-Gm-Message-State: AOJu0YwMvUb+p2iqJMpMncwRmnDSXERdeh3/8N8xjoPjF55Md9S1vMOx
xeiWvcjK+sOZwAKGX5DgmR+f1FkIZxvzSzYOkSb1Opf1FkTI8Z2aQtKL7zlzS+W8BYC3b3D0dtO
f/3DlAw==
X-Google-Smtp-Source: AGHT+IHklk6ygB6BrAMAW+vre57cickd20wXmOPZTFQC5U6g6cHQDuc5vbvNaOVhN+qmRiCUV+DfgdMkufQ=
X-Received: from pjuj14.prod.google.com ([2002:a17:90a:d00e:b0:311:4201:4021])
(user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3911:b0:311:f30b:c18
with SMTP id 98e67ed59e1d1-311f30b0ff9mr2383545a91.4.1748436864587; Wed, 28
May 2025 05:54:24 -0700 (PDT)
Date: Wed, 28 May 2025 05:54:22 -0700
In-Reply-To: <7cc5cd92-1854-4e0e-93b7-e4eee5991334@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
Mime-Version: 1.0
References: <20250523001138.3182794-1-seanjc@xxxxxxxxxx> <20250523001138.3182794-3-seanjc@xxxxxxxxxx>
<7cc5cd92-1854-4e0e-93b7-e4eee5991334@xxxxxxxxx>
Message-ID: <aDcHfuAbPMrhI9As@xxxxxxxxxx>
Subject: Re: [PATCH v4 2/4] KVM: x86/mmu: Dynamically allocate shadow MMU's
hashed page list
From: Sean Christopherson <seanjc@xxxxxxxxxx>
To: Xiaoyao Li <xiaoyao.li@xxxxxxxxx>
Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx>, kvm@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
Vipin Sharma <vipinsh@xxxxxxxxxx>, James Houghton <jthoughton@xxxxxxxxxx>
Content-Type: text/plain; charset="us-ascii"
X-Spam-Status: No, score=-11.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025, Xiaoyao Li wrote:
> On 5/23/2025 8:11 AM, Sean Christopherson wrote:
> > Dynamically allocate the (massive) array of hashed lists used to track
> > shadow pages, as the array itself is 32KiB, i.e. is an order-3 allocation
> > all on its own, and is *exactly* an order-3 allocation. Dynamically
> > allocating the array will allow allocating "struct kvm" using kvmalloc(),
> > and will also allow deferring allocation of the array until it's actually
> > needed, i.e. until the first shadow root is allocated.
> >
> > Opportunistically use kvmalloc() for the hashed lists, as an order-3
> > allocation is (stating the obvious) less likely to fail than an order-4
> > allocation, and the overhead of vmalloc() is undesirable given that the
> > size of the allocation is fixed.
> >
> > Cc: Vipin Sharma <vipinsh@xxxxxxxxxx>
> > Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx>
> > ---
> > arch/x86/include/asm/kvm_host.h | 4 ++--
> > arch/x86/kvm/mmu/mmu.c | 23 ++++++++++++++++++++++-
> > arch/x86/kvm/x86.c | 5 ++++-
> > 3 files changed, 28 insertions(+), 4 deletions(-)
> >
> > diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
> > index 330cdcbed1a6..9667d6b929ee 100644
> > --- a/arch/x86/include/asm/kvm_host.h
> > +++ b/arch/x86/include/asm/kvm_host.h
> > @@ -1343,7 +1343,7 @@ struct kvm_arch {
> > bool has_private_mem;
> > bool has_protected_state;
> > bool pre_fault_allowed;
> > - struct hlist_head mmu_page_hash[KVM_NUM_MMU_PAGES];
> > + struct hlist_head *mmu_page_hash;
> > struct list_head active_mmu_pages;
> > /*
> > * A list of kvm_mmu_page structs that, if zapped, could possibly be
> > @@ -2006,7 +2006,7 @@ void kvm_mmu_vendor_module_exit(void);
> > void kvm_mmu_destroy(struct kvm_vcpu *vcpu);
> > int kvm_mmu_create(struct kvm_vcpu *vcpu);
> > -void kvm_mmu_init_vm(struct kvm *kvm);
> > +int kvm_mmu_init_vm(struct kvm *kvm);
> > void kvm_mmu_uninit_vm(struct kvm *kvm);
> > void kvm_mmu_init_memslot_memory_attributes(struct kvm *kvm,
> > diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c
> > index cbc84c6abc2e..41da2cb1e3f1 100644
> > --- a/arch/x86/kvm/mmu/mmu.c
> > +++ b/arch/x86/kvm/mmu/mmu.c
> > @@ -3882,6 +3882,18 @@ static int mmu_alloc_direct_roots(struct kvm_vcpu *vcpu)
> > return r;
> > }
> > +static int kvm_mmu_alloc_page_hash(struct kvm *kvm)
> > +{
> > + typeof(kvm->arch.mmu_page_hash) h;
>
> Out of curiousity, it is uncommon in KVM to use typeof() given that we know
> what the type actually is. Is there some specific reason?
I'm pretty sure it's a leftover from various experiments. IIRC, I was trying to
do something odd and was having a hard time getting the type right :-)
I'll drop the typeof() in favor of "struct hlist_head *", using typeof here isn't
justified and IMO makes the code a bit harder to read.
Return-Path: <linux-kernel+bounces-665484-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id B920541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:55:23 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 110D7166FAD
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:55:25 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 4828528641F;
Wed, 28 May 2025 12:55:17 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b="ndnJc5FP"
Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id E9572214211;
Wed, 28 May 2025 12:55:14 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.96.170.134
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436916; cv=none; b=oN4wG9okM4XejT7Nj/j++D52dHxWTJ75RDze2Z8sLcPJpyY4pOeyIKkmkpu5xKjybWHjxLnTmaYl2v4rokPb8jAIQPx7x+uIC1r/Tlbpp6zY8fqweQVuvjyMnpyYdaylwXi0wAau0+ft8Vqw/LO2H6+JZHl6KoeTJzUhzBpS6r8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436916; c=relaxed/simple;
bh=u06uU+f22ZydMweS4ad4ipwJZCaFj54prJ9Y8i2zNxA=;
h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=mBLvBUyjYWfZVef32EbL5fRmd0nHV0u+VnqgbHDqJxFWvArRssYgLl7z8ag9ZDUh1i4kIzWdDVkT0hhuFXMOtPmg0V5fwDQEMOq32rjOnAUzyQkqxMTAHRW1/6ZJw2BoEjqdgARtBHqOWcxAghOVPE9MQI2L9sIhM0ZV32AXDB8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net; spf=pass smtp.mailfrom=rjwysocki.net; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b=ndnJc5FP; arc=none smtp.client-ip=79.96.170.134
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rjwysocki.net
Received: from kreacher.localnet (unknown [5.63.189.50])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
(No client certificate requested)
by cloudserver094114.home.pl (Postfix) with ESMTPSA id 6D2D166810C;
Wed, 28 May 2025 14:55:03 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rjwysocki.net;
s=dkim; t=1748436904;
bh=u06uU+f22ZydMweS4ad4ipwJZCaFj54prJ9Y8i2zNxA=;
h=From:Subject:Date;
b=ndnJc5FPKZ/gAEhXWrUWuQ6N9zgrgwaDt4sG1DWP0owFVQwK1CZf7V3HCLkv2cHX2
Vpud6wmvofFI8Oj6VQryqoPqtveIFlwXF6gBVPfR9m0i0XuxdjgA/L4yVB2OxZ/alm
uGdy/tdhka3APiXK2yPQIWaQf6BkyPiQsNrvicF3jeSY/WgCVAw9vNb/0Qpz6grmvn
uEZJNphV2DHygPhapge0M1qhWVO4Pv6egj76Vf7Mr2n+VgT4HfVLGYOISquf4OqYEL
g2QNMwFWsEV0YVZPoJcrfoiZ70lJTSx3zhosD8y2QYFxXAbmXtuZES0XRjfJsAiANR
opTZ0doBCBCpA==
From: "Rafael J. Wysocki" <rjw@xxxxxxxxxxxxx>
To: x86 Maintainers <x86@xxxxxxxxxx>
Cc: LKML <linux-kernel@xxxxxxxxxxxxxxx>, Linux PM <linux-pm@xxxxxxxxxxxxxxx>,
Len Brown <lenb@xxxxxxxxxx>, Peter Zijlstra <peterz@xxxxxxxxxxxxx>,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>, Borislav Petkov <bp@xxxxxxx>,
Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
Artem Bityutskiy <artem.bityutskiy@xxxxxxxxxxxxxxx>,
"Gautham R. Shenoy" <gautham.shenoy@xxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>,
Todd Brandt <todd.e.brandt@xxxxxxxxxxxxxxx>
Subject:
[PATCH v1 0/2] x86/smp: Fix power regression introduced by commit
96040f7273e2
Date: Wed, 28 May 2025 14:53:13 +0200
Message-ID: <2006806.PYKUYFuaPT@xxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 7Bit
Content-Type: text/plain; charset="UTF-8"
X-CLIENT-IP: 5.63.189.50
X-CLIENT-HOSTNAME: 5.63.189.50
X-VADE-SPAMSTATE: clean
X-VADE-SPAMCAUSE: dmFkZTEHEdcPvDb44RX7oLy/l0XZsAaDsySGk2yiU1eNtMaRD1jj7PwTFn2xAYp8o0iAjmTVoe6ZGZaOOMsZJ49A4eudkghxFhzckY2diivE17GlEIoxg8trE3zRqjV8o1kzpBEeyA4kmvhEP8t9tE65NjajAvWfVkFgA181gCxV6f8eY7uKPMacthbKQ3Wz9UMXuYmHytYdGi64pBHYmmT2Ez24Ij5HjNr+/vUcx/BtM21yBQTYe5pReKOOdaAoHDKaLGS+flJe0i2Hnac7cR4W640PkdYrwZeJ9l9p6kmWypBNs+6zOHQhZIav6rMmxp2+ZzutyIyh9KbgLbUrwlyhqOqdtl2rGjTR5BH9A90WJYQyuIZurD17gJfpCkyLGNysSpxtW7hXgoSYIra1Vf33ek+bFEz6UddXUA/mwUC3mCONoWF3H1gmhoE3XsXPCpfm8yWTyMdi/ClUWfpSzCrtYPaZx7iM52v158hmVMM8NGgrnMCVo+EokCwQNDW7DcJ1MZ/K/cNm4omDL2tNcglj+gjRkxhMcGvexr96oj8BqOdFVIW3zxovRr/D3RjjHBj9iWkH+9lE1Yvk4IEUnxYZMsR0dQQSHj59TQkzopjwVGSB2EMZOqr6j8tY6TywLhLCMl4hFxYK60pOTdWG2WlfYrIRARlPzTBPqVQG7yeOR4IygA
X-DCC--Metrics: v370.home.net.pl 1024; Body=12 Fuz1=12 Fuz2=12
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Everyone,
Commit 96040f7273e2 ("x86/smp: Eliminate mwait_play_dead_cpuid_hint()")
that shipped in 6.15 introduced a nasty power regression on systems that
start with "nosmt" in the kernel command line which prevents it from entering
deep package idle states (for instance, PC10) later on. Idle power, including
power in suspend-to-idle, goes up significantly on those systems as a result.
Address this by reverting commit 96040f7273e2 (patch [1/2]) and using a
different approach, which is to retain mwait_play_dead_cpuid_hint() and
still prefer it to hlt_play_dead() in case it is needed when cpuidle is
not available, but prefer cpuidle_play_dead() to it by default (patch [2/2]).
Thanks!
Return-Path: <linux-kernel+bounces-665485-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1CAAE41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:56:12 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 5C12A169CFD
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:56:13 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 19609286424;
Wed, 28 May 2025 12:56:05 +0000 (UTC)
Received: from mail-qt1-f182.google.com (mail-qt1-f182.google.com [209.85.160.182])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0E39421322F;
Wed, 28 May 2025 12:56:02 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.182
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436964; cv=none; b=cQl/kupMyDYxygt4tezguJF6IgNAMQ3HQ91FlCfxckK4X0N2/GzsoI10VxY5q74BJDUV2lxRZcovm5uJY3BahVo6tLMosM3kRkFvu7QgMDmiT4CpcrHRmT7L5qCPQoph59DGqK8Js7wn3bsu9XedvLTsN86K4WUFb9BzpZ0nSh4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436964; c=relaxed/simple;
bh=+PhLsl6QIi9rIQ0T45j63xL9sX0VWjfxjI9Tcf3ANwo=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=ZZzRc1BJFSWy+1J/9kFUHO6qz2+H1CRuLRf7XjNfBsErEoO8V4m+7nPDs48zli8ryNuqsjWgtecwmx/m62KFkRNmi7cSsr/UEJB9HTm6MzX4oPUMt9WZhPCQR/ncwRtw4VHKYl6EPDNtTuc1pZsFErSyIwGsmHKnKc5HeCc4Qnw=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux-m68k.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.160.182
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux-m68k.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-qt1-f182.google.com with SMTP id d75a77b69052e-47692b9d059so57543271cf.3;
Wed, 28 May 2025 05:56:02 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748436961; x=1749041761;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=kpBCbmssZZU2OxX6932Syq4YOVYfQLXpGhSUVPiLHKA=;
b=ab6dLn8w6c4GmA3zf/78J4M737G4B/QUoVh9dn1gtnoDGdng+UCBuPnexT8ilI3bJL
VItbrTw91zv7kiUDekbCyKKQhjEdVw+aLS9ua/DsQ4qxeCXUpyvu7OhuobfdQSKJbDnE
f9FMEKTxQpdQThKdQm3bpLFTDseaJ7xxZ0rXCV+rvSv64T+iBxHPiuULjO7hncf+KV4T
sV2WcKA8vhBh/vF92z4S1lQsojxuPbXJCJWdDGEIugAhDno8mQjBHsUtljHQ+XCFb4fa
jOY8dieBroDaLwqyglDV1y+TvOdVcn5j7dBNQ1AwaHyrt5OdreEav0NIyF7n4qG9NOOc
dbPA==
X-Forwarded-Encrypted: i=1; AJvYcCUbchEUMvu1435+udPmlc1t7q/NBDQQNqpfLTFQfhYiFBCyvQ6uyKedhgR2cF1NcOZ/i6lxy82U+DTSlX88@xxxxxxxxxxxxxxx, AJvYcCUuLHabSiSItSMIdkae9o7ZsMA94meVebHZCXBlRFtoTMQ+EHjjnUsRL+VenVQCZ7kOgw7OoiHo9QU7@xxxxxxxxxxxxxxx, AJvYcCVnhUeyf/mb1POKCG/LLnkPEnxl0uA7WxI1reOVtY51+fyPbArS7mlHFXccYkVadZLrd5HA4VZlEy3f@xxxxxxxxxxxxxxx, AJvYcCXBp/pNOYFE9Uc1cA/oyijJKjibLKRGDndapGCTqiltba41mfQEXh8SFtdsaxBsIoYce+g59DDLmFdAFgiWtlPq2kQ=@vger.kernel.org, AJvYcCXZLrxo+IhWXKeFae//nGo5g6J7hJZ37Wc93KrVXfli0fh/gsPf5Tl2NteHS8QrjTp7Hx0if5wA6UV/abo=@vger.kernel.org
X-Gm-Message-State: AOJu0Yz+6LVpOayFVC7AcXs2/N1ypEOTaURZe6OxHuCk8j9GyTXH8yZd
1wRQlSypjMh8eos+VmGe9oH2PQFEWsPvf4OmY/APabAl8vMRghWj22nmxISMdruc
X-Gm-Gg: ASbGncvY2bNUqn3kp0nkfZfxv3NF5NkdKn7g73TJo3LA4I/JRFjz2xbJqCHrPpcxABr
RzI68JXTnOYVd4R26in8SozRFcupVtsMcBycGsCCwddeDOSuGJMrP+eguaTdlfUZjK/CZJI3EBt
QoHWj6mV6hkD1hUlxumGV75PrDeZNgwEEIEEG/oQoBQ+ODnJW575Zr20S40gMH1HogoNvwyCfCe
PDh772oKkL+72jGu50pnClyLlo8NOZEQCLssqG3xbhly6kN5qDO0HzS8NzdaGAfH8Y+N7FCqUak
66Z85CS4giZ6wSU5EXqwC8sY0rzpGOf3zgeXIAtG1ZpZHFvL6TyidqPjF4LJnjF9Wm/ecW5Ap9G
n0EoO+16U7tgYRdZBsA==
X-Google-Smtp-Source: AGHT+IHfeApnVHkjrZgUpPXzGnPyaya3Y+pEdPNILryJcS1vH+5VauihlFQrd6UcHdUAWv1LoKoerA==
X-Received: by 2002:a05:622a:4a0b:b0:494:a447:5bbb with SMTP id d75a77b69052e-49f46657f26mr288348621cf.16.1748436961470;
Wed, 28 May 2025 05:56:01 -0700 (PDT)
Received: from mail-qk1-f179.google.com (mail-qk1-f179.google.com. [209.85.222.179])
by smtp.gmail.com with ESMTPSA id d75a77b69052e-4a3c80d7838sm5582141cf.64.2025.05.28.05.56.01
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 05:56:01 -0700 (PDT)
Received: by mail-qk1-f179.google.com with SMTP id af79cd13be357-7c59e7039eeso601643285a.2;
Wed, 28 May 2025 05:56:01 -0700 (PDT)
X-Forwarded-Encrypted: i=1; AJvYcCVMDpqNpfAz8+p88Omw201cvmzEYpO1XjThN/vuPN+7W3K/FOWkfsEvhdSkbZWHi4Fjc2L0I+C1PMby@xxxxxxxxxxxxxxx, AJvYcCVqqdjRthiBroK1nefAWRIcvbAG3VaN2FQr9KS/OyY9aKm7AaeAOgir4KMAceJfXEUtptFH+5NkKcAk5PE4@xxxxxxxxxxxxxxx, AJvYcCX/xa/dM6zXui3njLrJd33Kiy+uXqcj/Z6z15qDDQMHte5yXt15jm7TIPboZ+2OUzxWrm1OhXCHgw5xOky5jT98o6k=@vger.kernel.org, AJvYcCX8IJhVj/32he8yUgKYpzaONeOX/FhphBPw8ftrDMbjFnGlufp3oMapwogFG47huEM/nuEGgj6ZSrQF@xxxxxxxxxxxxxxx, AJvYcCXQ55Xh6nybQB6YHiDYOLIbflIMzgH+XR6c2SjuYDElzBLjKUQoI/sHM+1FihDPeQi0aBAYSjMDmzipwj0=@vger.kernel.org
X-Received: by 2002:a05:6102:3e94:b0:4dd:b9bc:df71 with SMTP id
ada2fe7eead31-4e4240b1619mr13395283137.10.1748436481362; Wed, 28 May 2025
05:48:01 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250528-pinctrl-const-desc-v1-0-76fe97899945@xxxxxxxxxx> <20250528-pinctrl-const-desc-v1-4-76fe97899945@xxxxxxxxxx>
In-Reply-To: <20250528-pinctrl-const-desc-v1-4-76fe97899945@xxxxxxxxxx>
From: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 14:47:49 +0200
X-Gmail-Original-Message-ID: <CAMuHMdUWqvHGKHqUWf6xdVBzaungUq1Fq=g_+qFQRO5+fq4=vQ@xxxxxxxxxxxxxx>
X-Gm-Features: AX0GCFtImpXXWdP8CtUa2VgvQDuwNbZqXjPeWpaGOsf8DlxmYUgiiqknnvQgxJg
Message-ID: <CAMuHMdUWqvHGKHqUWf6xdVBzaungUq1Fq=g_+qFQRO5+fq4=vQ@xxxxxxxxxxxxxx>
Subject: Re: [PATCH 04/17] pinctrl: Constify pointers to 'pinctrl_desc'
To: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>
Cc: Linus Walleij <linus.walleij@xxxxxxxxxx>, Basavaraj Natikar <Basavaraj.Natikar@xxxxxxx>,
Shyam Sundar S K <Shyam-sundar.S-k@xxxxxxx>, Andrew Jeffery <andrew@xxxxxxxxxxxxxxxxxxxx>,
Joel Stanley <joel@xxxxxxxxx>, Avi Fishman <avifishman70@xxxxxxxxx>,
Tomer Maimon <tmaimon77@xxxxxxxxx>, Tali Perry <tali.perry1@xxxxxxxxx>,
Patrick Venture <venture@xxxxxxxxxx>, Nancy Yuen <yuenn@xxxxxxxxxx>,
Benjamin Fair <benjaminfair@xxxxxxxxxx>, =?UTF-8?Q?Jonathan_Neusch=C3=A4fer?= <j.neuschaefer@xxxxxxx>,
=?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= <rafal@xxxxxxxxxx>,
Broadcom internal kernel review list <bcm-kernel-feedback-list@xxxxxxxxxxxx>, Ray Jui <rjui@xxxxxxxxxxxx>,
Scott Branden <sbranden@xxxxxxxxxxxx>, David Rhodes <david.rhodes@xxxxxxxxxx>,
Richard Fitzgerald <rf@xxxxxxxxxxxxxxxxxxxxx>, Charles Keepax <ckeepax@xxxxxxxxxxxxxxxxxxxxx>,
Lorenzo Bianconi <lorenzo@xxxxxxxxxx>, Sean Wang <sean.wang@xxxxxxxxxx>,
Jesper Nilsson <jesper.nilsson@xxxxxxxx>, Lars Persson <lars.persson@xxxxxxxx>,
Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx>, Damien Le Moal <dlemoal@xxxxxxxxxx>,
Vladimir Zapolskiy <vz@xxxxxxxxx>, Michal Simek <michal.simek@xxxxxxx>,
Emil Renner Berthing <kernel@xxxxxxxx>, Jianlong Huang <jianlong.huang@xxxxxxxxxxxxxxxx>,
Hal Feng <hal.feng@xxxxxxxxxxxxxxxx>, Matthias Brugger <matthias.bgg@xxxxxxxxx>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxx>,
Alexandre Belloni <alexandre.belloni@xxxxxxxxxxx>, Maxime Coquelin <mcoquelin.stm32@xxxxxxxxx>,
Alexandre Torgue <alexandre.torgue@xxxxxxxxxxx>, linux-gpio@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-aspeed@xxxxxxxxxxxxxxxx,
openbmc@xxxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx,
linux-renesas-soc@xxxxxxxxxxxxxxx, linux-sound@xxxxxxxxxxxxxxx,
patches@xxxxxxxxxxxxxxxxxxxxx, linux-mediatek@xxxxxxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxx, linux-riscv@xxxxxxxxxxxxxxxxxxx,
linux-rtc@xxxxxxxxxxxxxxx, linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 at 12:41, Krzysztof Kozlowski
<krzysztof.kozlowski@xxxxxxxxxx> wrote:
> Pin controller core code only stores the pointer to
> 'struct pinctrl_desc' and does not modify it anywhere. The pointer can
> be changed to pointer to const which makes the code safer, explicit and
> later allows constifying 'pinctrl_desc' allocations in individual
> drivers.
>
> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>
Reviewed-by: Geert Uytterhoeven <geert+renesas@xxxxxxxxx>
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
Return-Path: <linux-kernel+bounces-665486-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E03B241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:56:23 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 1AB1D3B3B63
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:56:03 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id B86B12868B7;
Wed, 28 May 2025 12:56:07 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qgYYVKsy"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id DBF9F21322F;
Wed, 28 May 2025 12:56:06 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436967; cv=none; b=Ms4fyhZFCH1+qlp0Hf7HOwHltBU5Bm12a/ug8pTE+kMZzgdn6nfzB52YwFckPZECMpgjf6OsTcGeK+J46GxAxyfz+EKB34DlmhrH2cm8dhiOAT9CB8j4iG2DbVERqd5RdDyGng/vybtbot0AzRKLooZyXZz/CJRzdAAf08V0lfk=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436967; c=relaxed/simple;
bh=ZZ5PY3sUoQIO0CS2xr1nvj/M4VraGiH0oMZykVxMChc=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=SV+kecochVGJ6rL7pWs9+vNDsYxMtfGBpd/9J46XOWyQxdj9zRgho5gVf1vfqjg9EkdQpWhyyH+EawaWk50eXFzBBOSlQ6GlqPWEPEsKrKRDKbGh9BaHtYTHC1Q3/qDpbadew5kR4vMEGSU+FvbkOISHgvb67pXys+8cGm/8vOM=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qgYYVKsy; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id CB204C4CEF1;
Wed, 28 May 2025 12:56:05 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748436966;
bh=ZZ5PY3sUoQIO0CS2xr1nvj/M4VraGiH0oMZykVxMChc=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=qgYYVKsyNZvHVIcSC7TXODCukpomzDTeEa9qjbVoVFINev5ukW+0p44PEfIfeV9aU
aI+E4ZuO2djI+JCYHpfsJzhxKc0FxMEjFSQHW6+fc2UIhKQeJzwkdyCdaE20xO8iqE
qqgeZxHL3UVaSRP+zcxTOzVAXVOciQYGL0f0BbTRB8C1KYowXCFPFVxnr3xoKCAbsu
Uzx4OPLzAhY8qqtzFr88WC8At0pQ2CnUmsaaUw1VX1SgNiTFSxINa/n4w2zVi8q4La
nCTiTjeAesKkYswlBIoG6igD5YZWu90Y7SJcS+8tUb7Sjuc2A4BWyLC93kORGAngI7
eITH0kuA0V2Lw==
Date: Wed, 28 May 2025 09:56:03 -0300
From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
To: Howard Chu <howardchu95@xxxxxxxxx>
Cc: Ian Rogers <irogers@xxxxxxxxxx>, Peter Zijlstra <peterz@xxxxxxxxxxxxx>,
Ingo Molnar <mingo@xxxxxxxxxx>, Namhyung Kim <namhyung@xxxxxxxxxx>,
Mark Rutland <mark.rutland@xxxxxxx>,
Alexander Shishkin <alexander.shishkin@xxxxxxxxxxxxxxx>,
Jiri Olsa <jolsa@xxxxxxxxxx>,
Adrian Hunter <adrian.hunter@xxxxxxxxx>,
Kan Liang <kan.liang@xxxxxxxxxxxxxxx>,
Miguel Ojeda <ojeda@xxxxxxxxxx>,
Alex Gaynor <alex.gaynor@xxxxxxxxx>,
Boqun Feng <boqun.feng@xxxxxxxxx>, Gary Guo <gary@xxxxxxxxxxx>,
=?iso-8859-1?Q?Bj=F6rn?= Roy Baron <bjorn3_gh@xxxxxxxxxxxxxx>,
Benno Lossin <benno.lossin@xxxxxxxxx>,
Andreas Hindborg <a.hindborg@xxxxxxxxxx>,
Alice Ryhl <aliceryhl@xxxxxxxxxx>, Trevor Gross <tmgross@xxxxxxxxx>,
Danilo Krummrich <dakr@xxxxxxxxxx>,
Jiapeng Chong <jiapeng.chong@xxxxxxxxxxxxxxxxx>,
James Clark <james.clark@xxxxxxxxxx>,
Weilin Wang <weilin.wang@xxxxxxxxx>,
Stephen Brennan <stephen.s.brennan@xxxxxxxxxx>,
Andi Kleen <ak@xxxxxxxxxxxxxxx>, Dmitry Vyukov <dvyukov@xxxxxxxxxx>,
linux-perf-users@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH v2 6/7] perf test trace_summary: Skip --bpf-summary tests
if no libbpf
Message-ID: <aDcH40nLHuEXELjT@x1>
References: <20250528032637.198960-1-irogers@xxxxxxxxxx>
<20250528032637.198960-7-irogers@xxxxxxxxxx>
<CAH0uvoiEY0kkz09TavHG-KHqtk7UNHyRLfYC382D_yhvrstBGw@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <CAH0uvoiEY0kkz09TavHG-KHqtk7UNHyRLfYC382D_yhvrstBGw@xxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 09:17:25PM -0700, Howard Chu wrote:
> Hello Ian,
>
> On Tue, May 27, 2025 at 8:26â?¯PM Ian Rogers <irogers@xxxxxxxxxx> wrote:
> >
> > If perf is built without libbpf (e.g. NO_LIBBPF=1) then the
> > --bpf-summary perf trace tests will fail. Skip the tests as this is
> > expected behavior.
> >
> > Signed-off-by: Ian Rogers <irogers@xxxxxxxxxx>
>
> Acked-by: Howard Chu <howardchu95@xxxxxxxxx>
Thanks, applied to perf-tools-next,
BTW, my answers were for v1 but b4 gets v2, for instance, the one that
is failing:
⬢ [acme@toolbx perf-tools-next]$ b4 am -P3 -ctsl --cc-trailers 20250527180703.129336-5-irogers@xxxxxxxxxx
Grabbing thread from lore.kernel.org/all/20250527180703.129336-5-irogers@xxxxxxxxxx/t.mbox.gz
Breaking thread to remove parents of 20250527180703.129336-1-irogers@xxxxxxxxxx
Checking for newer revisions
Grabbing search results from lore.kernel.org
Added from v2: 8 patches
Analyzing 21 messages in the thread
Analyzing 0 code-review messages
Will use the latest revision: v2
You can pick other revisions using the -vN flag
Unknown range value specified: 3
Checking attestation on all messages, may take a moment...
---
â?? [PATCH v2 3/7] perf symbol: Move demangling code out of symbol-elf.c
+ Link: https://lore.kernel.org/r/20250528032637.198960-4-irogers@xxxxxxxxxx
+ Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
---
â?? Signed: DKIM/google.com
---
Total patches: 1 (cherrypicked: 3)
---
Cover: ./v2_20250527_irogers_various_asan_and_test_fixes.cover
Link: https://lore.kernel.org/r/20250528032637.198960-1-irogers@xxxxxxxxxx
Base: not specified
git am ./v2_20250527_irogers_various_asan_and_test_fixes.mbx
⬢ [acme@toolbx perf-tools-next]$
⬢ [acme@toolbx perf-tools-next]$ git am ./v2_20250527_irogers_various_asan_and_test_fixes.mbx
Applying: perf symbol: Move demangling code out of symbol-elf.c
⬢ [acme@toolbx perf-tools-next]$
⬢ [acme@toolbx perf-tools-next]$ m
rm: cannot remove '/home/acme/libexec/perf-core/scripts/python/Perf-Trace-Util/lib/Perf/Trace/__pycache__/Core.cpython-313.pyc': Permission denied
make: Entering directory '/home/acme/git/perf-tools-next/tools/perf'
BUILD: Doing 'make -j32' parallel build
Warning: Kernel ABI header differences:
diff -u tools/arch/arm64/include/asm/cputype.h arch/arm64/include/asm/cputype.h
Auto-detecting system features:
... libdw: [ on ]
... glibc: [ on ]
... libelf: [ on ]
... libnuma: [ on ]
... numa_num_possible_cpus: [ on ]
... libperl: [ on ]
... libpython: [ on ]
... libcrypto: [ on ]
... libcapstone: [ on ]
... llvm-perf: [ on ]
... zlib: [ on ]
... lzma: [ on ]
... get_cpuid: [ on ]
... bpf: [ on ]
... libaio: [ on ]
... libzstd: [ on ]
INSTALL libsubcmd_headers
INSTALL libperf_headers
INSTALL libapi_headers
INSTALL libsymbol_headers
PERF_VERSION = 6.15.rc7.g50ec05a72bc1
LINK /tmp/build/perf-tools-next/libperf-jvmti.so
INSTALL libbpf_headers
GEN perf-archive
GEN perf-iostat
CC /tmp/build/perf-tools-next/util/symbol.o
CC /tmp/build/perf-tools-next/util/header.o
CC /tmp/build/perf-tools-next/util/symbol-elf.o
CXX /tmp/build/perf-tools-next/util/demangle-cxx.o
util/symbol-elf.c: In function â??get_plt_got_nameâ??:
util/symbol-elf.c:563:21: error: implicit declaration of function â??demangle_symâ??; did you mean â??dso__demangle_symâ??? [-Wimplicit-function-declaration]
563 | demangled = demangle_sym(di->dso, 0, sym_name);
| ^~~~~~~~~~~~
| dso__demangle_sym
util/symbol-elf.c:563:19: error: assignment to â??char *â?? from â??intâ?? makes pointer from integer without a cast [-Wint-conversion]
563 | demangled = demangle_sym(di->dso, 0, sym_name);
| ^
util/symbol-elf.c: In function â??dso__synthesize_plt_symbolsâ??:
util/symbol-elf.c:761:27: error: assignment to â??char *â?? from â??intâ?? makes pointer from integer without a cast [-Wint-conversion]
761 | demangled = demangle_sym(dso, 0, elf_name);
| ^
util/symbol-elf.c: In function â??dso__load_sym_internalâ??:
util/symbol-elf.c:1778:27: error: assignment to â??char *â?? from â??intâ?? makes pointer from integer without a cast [-Wint-conversion]
1778 | demangled = demangle_sym(dso, kmodule, elf_name);
| ^
make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:85: /tmp/build/perf-tools-next/util/symbol-elf.o] Error 1
make[4]: *** Waiting for unfinished jobs....
make[3]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:142: util] Error 2
make[2]: *** [Makefile.perf:798: /tmp/build/perf-tools-next/perf-util-in.o] Error 2
make[1]: *** [Makefile.perf:290: sub-make] Error 2
make: *** [Makefile:119: install-bin] Error 2
make: Leaving directory '/home/acme/git/perf-tools-next/tools/perf'
⬢ [acme@toolbx perf-tools-next]$
I can try fixing those up, but I'm concentrated now in getting as much
low hanging fruits as possible for this merge, and the patches in this
series were mostly super small and fixed things.
- Arnaldo
Return-Path: <linux-kernel+bounces-665487-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id F18D741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:56:34 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 35356174965
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:56:36 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 7841328642F;
Wed, 28 May 2025 12:56:17 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="l1GgMpk4"
Received: from fllvem-ot04.ext.ti.com (fllvem-ot04.ext.ti.com [198.47.19.246])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B69D421322F
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:56:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.246
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748436976; cv=none; b=CK7vRUlhknkUO2hhyDcaPYArvPp84+pT5Z+27lQNJxbcSdB6ou87sS/JQS6d793MLcjt5p17oX+8X6iQ6IIoBojr/EguJOmyu1LU/GSjvhrtuqu6NsWacbTAIiDDrk0I9mbX3734aktVqIK27OkoBkHAtfIeoooneLvmtGJGKf4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748436976; c=relaxed/simple;
bh=wrTsX888SHe2pwLAvDM5IvkLDcqY4EVJA4saPsPNazI=;
h=Message-ID:Date:MIME-Version:Subject:To:CC:References:From:
In-Reply-To:Content-Type; b=f73K5nshS8GkxVQpoJh1AnYeM5QgAckO129Vxl9zL7hRnoaS0TqQq/Awur5pQvCo5gNTTpe3W2z1HAke4Mkd8fy+hxX+T/TLqHELWVXpiIveTiIp7CGFgXqB6zV19jVBtp3jPF58xNzyMWlolmoc/WWbC8zRvt5t/Qjtl0V0OyY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=l1GgMpk4; arc=none smtp.client-ip=198.47.19.246
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com
Received: from fllvem-sh04.itg.ti.com ([10.64.41.54])
by fllvem-ot04.ext.ti.com (8.15.2/8.15.2) with ESMTP id 54SBQ6qt2044934;
Wed, 28 May 2025 06:26:06 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com;
s=ti-com-17Q1; t=1748431566;
bh=Ng5y3IcVaAM8zkZwvKrmrajhf/9Uq276eRu5V1b+gKg=;
h=Date:Subject:To:CC:References:From:In-Reply-To;
b=l1GgMpk4Cgpdj70UtUfKKl8sKqjDNWPO8pfX3YHpl6W8PsXvxKUfS5ZDOi9byBS+o
kxMP4zAFee6buyhlcWSTqi3kVyE0/IfN+iol6d7OuulduAhSBr11GzPsUiAzWZFrL8
4ZJyARVAa1XwTiaK5w7PipBPuW1LlaOvLu4tGl2c=
Received: from DFLE114.ent.ti.com (dfle114.ent.ti.com [10.64.6.35])
by fllvem-sh04.itg.ti.com (8.18.1/8.18.1) with ESMTPS id 54SBQ6vX3571213
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA256 bits=128 verify=FAIL);
Wed, 28 May 2025 06:26:06 -0500
Received: from DFLE103.ent.ti.com (10.64.6.24) by DFLE114.ent.ti.com
(10.64.6.35) with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Wed, 28
May 2025 06:26:05 -0500
Received: from lelvsmtp5.itg.ti.com (10.180.75.250) by DFLE103.ent.ti.com
(10.64.6.24) with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via
Frontend Transport; Wed, 28 May 2025 06:26:06 -0500
Received: from [172.24.227.14] (jayesh-hp-z2-tower-g5-workstation.dhcp.ti.com [172.24.227.14])
by lelvsmtp5.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54SBPw66052053;
Wed, 28 May 2025 06:25:58 -0500
Message-ID: <870d036a-0fa0-43e0-8b72-428096173526@xxxxxx>
Date: Wed, 28 May 2025 16:55:57 +0530
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [RFC PATCH v2 2/3] drm/bridge: cadence: cdns-mhdp8546*: Change
drm_connector from pointer to structure
To: Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx>
CC: <jonas@xxxxxxxxx>, <jernej.skrabec@xxxxxxxxx>,
<maarten.lankhorst@xxxxxxxxxxxxxxx>, <mripard@xxxxxxxxxx>,
<tzimmermann@xxxxxxx>, <airlied@xxxxxxxxx>, <simona@xxxxxxxx>,
<lumag@xxxxxxxxxx>, <jani.nikula@xxxxxxxxx>, <andy.yan@xxxxxxxxxxxxxx>,
<mordan@xxxxxxxxx>, <linux@xxxxxxxxxxx>, <viro@xxxxxxxxxxxxxxxxxx>,
<yamonkar@xxxxxxxxxxx>, <sjakhade@xxxxxxxxxxx>,
<quentin.schulz@xxxxxxxxxxxxxxxxxx>, <jsarha@xxxxxx>,
<linux-kernel@xxxxxxxxxxxxxxx>, <devarsht@xxxxxx>,
<dianders@xxxxxxxxxxxx>, <andrzej.hajda@xxxxxxxxx>,
<neil.armstrong@xxxxxxxxxx>, <rfoss@xxxxxxxxxx>,
<Laurent.pinchart@xxxxxxxxxxxxxxxx>, <dri-devel@xxxxxxxxxxxxxxxxxxxxx>,
<alexander.stein@xxxxxxxxxxxxxxx>
References: <20250521073237.366463-1-j-choudhary@xxxxxx>
<20250521073237.366463-3-j-choudhary@xxxxxx>
<19dd2795-c693-4c1a-989c-8b3bc2b3cdfd@xxxxxxxxxxxxxxxx>
<493afc6c-59a0-4f6b-9a9e-568dd2eff873@xxxxxx>
<2a15263b-2d36-4c46-be0f-4145069d134f@xxxxxx>
<027ad6e9-5070-43f2-a082-fd498cc6d31d@xxxxxxxxxxxxxxxx>
Content-Language: en-US
From: Jayesh Choudhary <j-choudhary@xxxxxx>
In-Reply-To: <027ad6e9-5070-43f2-a082-fd498cc6d31d@xxxxxxxxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"; format=flowed
Content-Transfer-Encoding: 8bit
X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi,
On 27/05/25 17:07, Tomi Valkeinen wrote:
> Hi,
>
> On 27/05/2025 13:39, Jayesh Choudhary wrote:
>>
>>
>> On 27/05/25 14:59, Jayesh Choudhary wrote:
>>> Hello Tomi,
>>>
>>> On 27/05/25 13:28, Tomi Valkeinen wrote:
>>>> Hi,
>>>>
>>>> On 21/05/2025 10:32, Jayesh Choudhary wrote:
>>>>> After adding DBANC framework, mhdp->connector is not initialised during
>>>>> bridge calls. But the asyncronous work scheduled depends on the
>>>>> connector.
>>>>> We cannot get to drm_atomic_state in these asyncronous calls running on
>>>>> worker threads. So we need to store the data that we need in mhdp
>>>>> bridge
>>>>> structure.
>>>>> Like other bridge drivers, use drm_connector pointer instead of
>>>>> structure
>>>>> and make appropriate changes to the conditionals and assignments
>>>>> related
>>>>> to mhdp->connector.
>>>>> Also, in the atomic enable call, move the connector and connector
>>>>> state
>>>>> calls above, so that we do have a connector before we can retry the
>>>>> asyncronous work in case of any failure.
>>>>>
>>>>
>>>> I don't quite understand this patch. You change the mhdp->connector to a
>>>> pointer, which is set at bridge_enable and cleared at bridge_disable.
>>>> Then you change the "mhdp->connector.dev" checks to "mhdp->connector".
>>>>
>>>> So, now in e.g. cdns_mhdp_fw_cb(), we check for mhdp->connector, which
>>>> is set at bridge_enable(). Can we ever have the bridge enabled before
>>>> the fb has been loaded? What is the check even supposed to do there?
>>>>
>>>> Another in cdns_mhdp_hpd_work(), it checks for mhdp->connector. So...
>>>> HPD code behaves differently based on if the bridge has been enabled or
>>>> not? What is it supposed to do?
>>>>
>>>> Isn't the whole "if (mhdp->connector.dev)" code for the legacy
>>>> non-DRM_BRIDGE_ATTACH_NO_CONNECTOR case?
>>>>
>>>> Â Tomi
>>>
>>> I misinterpreted your comment in v1[0] regarding finding the connector
>>> from the current state in cdns_mhdp_modeset_retry_fn() and I missed
>>> this. I was more focused on finding a connector for that function.
>>>
>>> For the current code, in all the conditionals involving mhdp->connector,
>>> we are entering else statements as connector is not initialised.
>>> So I will just drop if statements in cdns_mhdp_fw_cb() and
>>> cdns_mhdp_hpd_work() (like you said, its legacy case) while still having
>>> mhdp->connector as pointer as we need it for
>>> cdns_mhdp_modeset_retry_fn() and in cdns-mhdp8546-hdcp driver.
>>>
>>> That should be okay?
>>>
>>> [0]: https://lore.kernel.org/all/e76f94b9-b138-46e7-bb18-
>>> b33dd98c9abb@xxxxxxxxxxxxxxxx/
>>>
>>> Warm Regards,
>>> Jayesh
>>>
>>>
>>
>> Tomi,
>>
>> One more thing here. Should this be squashed with the first patch as
>> this is sort of removing !(DRM_BRIDGE_ATTACH_NO_CONNECTOR) case and
>> associated changes?
>
>
> All the legacy code should be removed in the previous patch, yes. But
> it's not quite clear to me what's going on here. At least parts of this
> patch seem to be... fixing some previous code? You move the
> drm_atomic_get_new_connector_for_encoder() call to be earlier in the
> bridge_enable. That doesn't sound like removing the legacy code. But
> it's not quite clear to me why that's done (or why it wasn't needed
> earlier. or was it?).
>
> Tomi
>
drm_atomic_get_new_connector_for_encoder() call is moved earlier
in bridge_enable to address the cases when we get error in
cdns_mhdp_link_up(mhdp) or cdns_mhdp_reg_read(mhdp, CDNS_DPTX_CAR,
&resp), and we goto 'out' to schedule modeset_retry_work. We need to
have drm_connector before that if we want to change the connector
link state here.
In legacy usecase we are not hitting this as attach already initialised
mhdp->connector before bridge_enable() that would be used by
cdns_mhdp_modeset_retry_fn() as required.
These errors usually don't hit during bridge_enable calls but in
one of my boards, I saw cdns_mhdp_link_up() giving error and after
that the null pointer dereference in cdns_mhdp_modeset_retry_fn()
while trying to access the mutex there (&conn->dev->mode_config.mutex)
-Jayesh
>>
>>>>
>>>>> Fixes: fb43aa0acdfd ("drm: bridge: Add support for Cadence MHDP8546
>>>>> DPI/DP bridge")
>>>>> Signed-off-by: Jayesh Choudhary <j-choudhary@xxxxxx>
>>>>> ---
>>>>>  .../drm/bridge/cadence/cdns-mhdp8546-core.c  | 28 ++++++++
>>>>> +----------
>>>>>  .../drm/bridge/cadence/cdns-mhdp8546-core.h  | 2 +-
>>>>>  .../drm/bridge/cadence/cdns-mhdp8546-hdcp.c  | 8 +++---
>>>>> Â 3 files changed, 19 insertions(+), 19 deletions(-)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c b/
>>>>> drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
>>>>> index 66bd916c2fe9..5388e62f230b 100644
>>>>> --- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
>>>>> +++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
>>>>> @@ -740,7 +740,7 @@ static void cdns_mhdp_fw_cb(const struct
>>>>> firmware *fw, void *context)
>>>>> Â Â Â Â Â bridge_attached = mhdp->bridge_attached;
>>>>> Â Â Â Â Â spin_unlock(&mhdp->start_lock);
>>>>> Â Â Â Â Â if (bridge_attached) {
>>>>> -Â Â Â Â Â Â Â if (mhdp->connector.dev)
>>>>> +Â Â Â Â Â Â Â if (mhdp->connector)
>>>>> Â Â Â Â Â Â Â Â Â Â Â Â Â drm_kms_helper_hotplug_event(mhdp->bridge.dev);
>>>>> Â Â Â Â Â Â Â Â Â else
>>>>> Â Â Â Â Â Â Â Â Â Â Â Â Â drm_bridge_hpd_notify(&mhdp->bridge,
>>>>> cdns_mhdp_detect(mhdp));
>>>>> @@ -1759,17 +1759,25 @@ static void cdns_mhdp_atomic_enable(struct
>>>>> drm_bridge *bridge,
>>>>> Â Â Â Â Â struct cdns_mhdp_device *mhdp = bridge_to_mhdp(bridge);
>>>>> Â Â Â Â Â struct cdns_mhdp_bridge_state *mhdp_state;
>>>>> Â Â Â Â Â struct drm_crtc_state *crtc_state;
>>>>> -Â Â Â struct drm_connector *connector;
>>>>> Â Â Â Â Â struct drm_connector_state *conn_state;
>>>>> Â Â Â Â Â struct drm_bridge_state *new_state;
>>>>> Â Â Â Â Â const struct drm_display_mode *mode;
>>>>> Â Â Â Â Â u32 resp;
>>>>> -Â Â Â int ret;
>>>>> +Â Â Â int ret = 0;
>>>>> Â Â Â Â Â dev_dbg(mhdp->dev, "bridge enable\n");
>>>>> Â Â Â Â Â mutex_lock(&mhdp->link_mutex);
>>>>> +Â Â Â mhdp->connector = drm_atomic_get_new_connector_for_encoder(state,
>>>>> +Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â bridge->encoder);
>>>>> +Â Â Â if (WARN_ON(!mhdp->connector))
>>>>> +Â Â Â Â Â Â Â goto out;
>>>>> +
>>>>> +Â Â Â conn_state = drm_atomic_get_new_connector_state(state, mhdp-
>>>>>> connector);
>>>>> +Â Â Â if (WARN_ON(!conn_state))
>>>>> +Â Â Â Â Â Â Â goto out;
>>>>> +
>>>>> Â Â Â Â Â if (mhdp->plugged && !mhdp->link_up) {
>>>>> Â Â Â Â Â Â Â Â Â ret = cdns_mhdp_link_up(mhdp);
>>>>> Â Â Â Â Â Â Â Â Â if (ret < 0)
>>>>> @@ -1789,15 +1797,6 @@ static void cdns_mhdp_atomic_enable(struct
>>>>> drm_bridge *bridge,
>>>>> Â Â Â Â Â cdns_mhdp_reg_write(mhdp, CDNS_DPTX_CAR,
>>>>> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â resp | CDNS_VIF_CLK_EN | CDNS_VIF_CLK_RSTN);
>>>>> -Â Â Â connector = drm_atomic_get_new_connector_for_encoder(state,
>>>>> -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â bridge->encoder);
>>>>> -Â Â Â if (WARN_ON(!connector))
>>>>> -Â Â Â Â Â Â Â goto out;
>>>>> -
>>>>> -Â Â Â conn_state = drm_atomic_get_new_connector_state(state, connector);
>>>>> -Â Â Â if (WARN_ON(!conn_state))
>>>>> -Â Â Â Â Â Â Â goto out;
>>>>> -
>>>>> Â Â Â Â Â if (mhdp->hdcp_supported &&
>>>>> Â Â Â Â Â Â Â Â Â mhdp->hw_state == MHDP_HW_READY &&
>>>>> Â Â Â Â Â Â Â Â Â conn_state->content_protection ==
>>>>> @@ -1857,6 +1856,7 @@ static void cdns_mhdp_atomic_disable(struct
>>>>> drm_bridge *bridge,
>>>>> Â Â Â Â Â Â Â Â Â cdns_mhdp_hdcp_disable(mhdp);
>>>>> Â Â Â Â Â mhdp->bridge_enabled = false;
>>>>> +Â Â Â mhdp->connector = NULL;
>>>>> Â Â Â Â Â cdns_mhdp_reg_read(mhdp, CDNS_DP_FRAMER_GLOBAL_CONFIG, &resp);
>>>>> Â Â Â Â Â resp &= ~CDNS_DP_FRAMER_EN;
>>>>> Â Â Â Â Â resp |= CDNS_DP_NO_VIDEO_MODE;
>>>>> @@ -2157,7 +2157,7 @@ static void cdns_mhdp_modeset_retry_fn(struct
>>>>> work_struct *work)
>>>>> Â Â Â Â Â mhdp = container_of(work, typeof(*mhdp), modeset_retry_work);
>>>>> -Â Â Â conn = &mhdp->connector;
>>>>> +Â Â Â conn = mhdp->connector;
>>>>> Â Â Â Â Â /* Grab the locks before changing connector property */
>>>>> Â Â Â Â Â mutex_lock(&conn->dev->mode_config.mutex);
>>>>> @@ -2234,7 +2234,7 @@ static void cdns_mhdp_hpd_work(struct
>>>>> work_struct *work)
>>>>> Â Â Â Â Â int ret;
>>>>> Â Â Â Â Â ret = cdns_mhdp_update_link_status(mhdp);
>>>>> -Â Â Â if (mhdp->connector.dev) {
>>>>> +Â Â Â if (mhdp->connector) {
>>>>> Â Â Â Â Â Â Â Â Â if (ret < 0)
>>>>> Â Â Â Â Â Â Â Â Â Â Â Â Â schedule_work(&mhdp->modeset_retry_work);
>>>>> Â Â Â Â Â Â Â Â Â else
>>>>> diff --git a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.h b/
>>>>> drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.h
>>>>> index bad2fc0c7306..b297db53ba28 100644
>>>>> --- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.h
>>>>> +++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.h
>>>>> @@ -375,7 +375,7 @@ struct cdns_mhdp_device {
>>>>> Â Â Â Â Â Â */
>>>>> Â Â Â Â Â struct mutex link_mutex;
>>>>> -Â Â Â struct drm_connector connector;
>>>>> +Â Â Â struct drm_connector *connector;
>>>>> Â Â Â Â Â struct drm_bridge bridge;
>>>>> Â Â Â Â Â struct cdns_mhdp_link link;
>>>>> diff --git a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-hdcp.c b/
>>>>> drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-hdcp.c
>>>>> index 42248f179b69..59f18c3281ef 100644
>>>>> --- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-hdcp.c
>>>>> +++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-hdcp.c
>>>>> @@ -394,7 +394,7 @@ static int _cdns_mhdp_hdcp_disable(struct
>>>>> cdns_mhdp_device *mhdp)
>>>>> Â Â Â Â Â int ret;
>>>>> Â Â Â Â Â dev_dbg(mhdp->dev, "[%s:%d] HDCP is being disabled...\n",
>>>>> -Â Â Â Â Â Â Â mhdp->connector.name, mhdp->connector.base.id);
>>>>> +Â Â Â Â Â Â Â mhdp->connector->name, mhdp->connector->base.id);
>>>>> Â Â Â Â Â ret = cdns_mhdp_hdcp_set_config(mhdp, 0, false);
>>>>> @@ -445,7 +445,7 @@ static int cdns_mhdp_hdcp_check_link(struct
>>>>> cdns_mhdp_device *mhdp)
>>>>> Â Â Â Â Â dev_err(mhdp->dev,
>>>>> Â Â Â Â Â Â Â Â Â "[%s:%d] HDCP link failed, retrying authentication\n",
>>>>> -Â Â Â Â Â Â Â mhdp->connector.name, mhdp->connector.base.id);
>>>>> +Â Â Â Â Â Â Â mhdp->connector->name, mhdp->connector->base.id);
>>>>> Â Â Â Â Â ret = _cdns_mhdp_hdcp_disable(mhdp);
>>>>> Â Â Â Â Â if (ret) {
>>>>> @@ -487,13 +487,13 @@ static void cdns_mhdp_hdcp_prop_work(struct
>>>>> work_struct *work)
>>>>> Â Â Â Â Â struct cdns_mhdp_device *mhdp = container_of(hdcp,
>>>>> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â struct cdns_mhdp_device,
>>>>> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â hdcp);
>>>>> -Â Â Â struct drm_device *dev = mhdp->connector.dev;
>>>>> +Â Â Â struct drm_device *dev = mhdp->connector->dev;
>>>>> Â Â Â Â Â struct drm_connector_state *state;
>>>>> Â Â Â Â Â drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
>>>>> Â Â Â Â Â mutex_lock(&mhdp->hdcp.mutex);
>>>>> Â Â Â Â Â if (mhdp->hdcp.value != DRM_MODE_CONTENT_PROTECTION_UNDESIRED) {
>>>>> -Â Â Â Â Â Â Â state = mhdp->connector.state;
>>>>> +Â Â Â Â Â Â Â state = mhdp->connector->state;
>>>>> Â Â Â Â Â Â Â Â Â state->content_protection = mhdp->hdcp.value;
>>>>> Â Â Â Â Â }
>>>>> Â Â Â Â Â mutex_unlock(&mhdp->hdcp.mutex);
>>>>
>
Return-Path: <linux-kernel+bounces-665488-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 84FA541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:58:01 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 3AB121BC4D17
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:58:14 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 897DD286426;
Wed, 28 May 2025 12:57:53 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZD/wViPJ"
Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id CAF78246774;
Wed, 28 May 2025 12:57:50 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748437072; cv=none; b=aOiyjFW1mSsahXWWnRsypFMW4sXHSYkJ9G7suz1f84V/v1F0r2s4M+6IntT4rfLmwQyKPCnUDgUdVg/31Ge2AO0xBq4KkZpTQbVzOMxYmJDXcGgtp99h0P0rH/+vTcLc0stRzqwxX5RWlfuHqqgdvfg/e3Jm04si2sK4kcdRJwI=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748437072; c=relaxed/simple;
bh=WpeZQl5vh0yqYxs+79UsHi2F/aa84sVNJqFa7mJ4Avc=;
h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=IB4dNENg1rijFIFUott8/NQbFWj6vBfJiS5AYX5aLHRJivp0+fuD1ilNuKVDbnYY9dGDmoJFuwxJX2pOg/1kzhhqwW00KkaEUn7S8D2VYLgQ+JDJtAKOViiP/ZQ9Om3w5nqms84Rs3RS+KRz40CxVmLrUbA6pbyxd21MFxth0GA=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZD/wViPJ; arc=none smtp.client-ip=209.85.221.52
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-3a36f26584bso2754810f8f.0;
Wed, 28 May 2025 05:57:50 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748437069; x=1749041869; darn=vger.kernel.org;
h=in-reply-to:content-disposition:mime-version:references:subject:cc
:to:from:date:message-id:from:to:cc:subject:date:message-id:reply-to;
bh=qz431+WLyrOYjxIXVQx5eCUQ1G5IA4208Qab297D8GM=;
b=ZD/wViPJNg/FqKxbWpXaB/MW2Vt3Z2mb+ngEhaaRURUbC2HtKoDxDeiMAiqup6AS6D
wt15zExhb1YZoTd6wn3xvIPT51dmerOpnLOx+9E3duLBi+qebQIGLERs9DyIP8XM7sBj
d50+qiZqSb61bnI95Dka58D5fNhwvmwMf7Pm3xNMv2ZtJ15Yr9GtuPddNchgvhqlnI5o
NoCyp7Vkxt/RnHTRmQNX3eeUMtqaGBDjjqJZlCt4za4bsp+FsocuwdQVfpnGXqI5qHuQ
RxmSqz9rXgbqn40To+GFqM5LDH7pAYSrOW1eg3UZq53J/Q6ZhqNXqZd1J0BjuVYVocqP
erQA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748437069; x=1749041869;
h=in-reply-to:content-disposition:mime-version:references:subject:cc
:to:from:date:message-id:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=qz431+WLyrOYjxIXVQx5eCUQ1G5IA4208Qab297D8GM=;
b=R3zlYNbA07qBzg4BjsBZmL9Fzaa/JG/Mc7KcgRUzAYIPcEhHgESDskztU3Ws2BDytg
baMtI0aRRz8ocnOxAKMi9rRADJRQOXbx52wfaNENDC3ZWQVncc6UcXTzgMxpgK8OKYNf
RfsIppfgemuiFoKWyb7h2Lb0lwvztzQKb6huc4P3z0sQI+AkooNGduw8gAV+Z9AKQKyD
no+Ice4Ljvv4Fx7lfVnQ0uqwKJKubM95An4Dx2gYbYtDgYsF7+UbzrMJ7fyJN3AR+t0K
P1Zl1UnhtMJESeqBCjrQLl4+QVp4XWI1FIkVk8q74jThwKHI8SGnrPxKWDvgCvKLL/aI
gtYw==
X-Forwarded-Encrypted: i=1; AJvYcCUCbdbg0uxCQpZsuVLURmwl5YXjFGjczv8PJ2wC24EwC97P+LouerPC9jS5L66HqeyJDMf76SEumPaJNm7b@xxxxxxxxxxxxxxx, AJvYcCVhW7vvMMhIGukeaRDeG62AUgQ86O37SMs1/mjMLfnojt1uQJCGU/en+/Hk25CFVYJ1afVdmKwlscPO@xxxxxxxxxxxxxxx, AJvYcCWCBrDvSWQ2XmNao0RuLCvgyIxKbkdGFFJhrpU01WSnXTnBpicv+OEgOTAHMqIIy3l0sOobX6f20/75@xxxxxxxxxxxxxxx
X-Gm-Message-State: AOJu0YwCloU9NTeBZJCrYLrqDfyTP9kfBM+aAdYGiZ7BAPCTU7lY460g
AZro3C3aBpbkPhf1oZUxhG3lI6Z8vgj/clbR27XuDdZqEgtuWrd4NgzX
X-Gm-Gg: ASbGnctAxS2n8S4W0HoJAlwhh9fx29asN2UVtBDQjJ3p84UpsW7arcgqnkkDRbQ5WxV
b6c9b2dh2Fjz9DhzlVcG6Ug6sxYyv8vh4waL3Cb1XOfBrmJySyvjiXkz608yLb0VMnFI8jZLU8F
m2stwbw2XUedqZF1UaNWhOkR16PhrRjpPq5sx3LB+hi0kuReDpkpzM2O5sVMNY0Ka5yFB+y0l3k
FQ93V72xyw2dV09X4879YbAgVKgAVeJ+Vx49qdXnb/NpID/LcO0u4CURBhqMDFycgsyz33DG5Kv
lomJ/qzWPoZbn2abWPF+3gfgJigzE4j6TrCJhwPpjfjum5XtbZTAUB121m7G9jrVEZ+5JOLRK/Q
+FzCnnjI=
X-Google-Smtp-Source: AGHT+IEl/pHPv7vigoqckP9ECM+urkLDQK2RF8IW0Ah4JbrbzZh1z1Et6i/TKjhKBeupCdDcJQ72Aw==
X-Received: by 2002:a5d:584c:0:b0:3a4:d452:fff with SMTP id ffacd0b85a97d-3a4d45211edmr11122707f8f.17.1748437068809;
Wed, 28 May 2025 05:57:48 -0700 (PDT)
Received: from Ansuel-XPS. (93-34-88-225.ip49.fastwebnet.it. [93.34.88.225])
by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a4eac6e615sm1446608f8f.19.2025.05.28.05.57.47
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 05:57:48 -0700 (PDT)
Message-ID: <6837084c.050a0220.1e474f.3f20@xxxxxxxxxxxxx>
X-Google-Original-Message-ID: <aDcISot-sCztcyqa@Ansuel-XPS.>
Date: Wed, 28 May 2025 14:57:46 +0200
From: Christian Marangi <ansuelsmth@xxxxxxxxx>
To: Krzysztof Kozlowski <krzk@xxxxxxxxxx>
Cc: Michael Turquette <mturquette@xxxxxxxxxxxx>,
Stephen Boyd <sboyd@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>,
Felix Fietkau <nbd@xxxxxxxx>, linux-clk@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH 4/5] dt-bindings: clock: airoha: Document support for
AN7583 clock
References: <20250528004924.19970-1-ansuelsmth@xxxxxxxxx>
<20250528004924.19970-5-ansuelsmth@xxxxxxxxx>
<f9aebfb8-6312-45db-be12-94580ad412cb@xxxxxxxxxx>
<6836cf62.5d0a0220.35d0aa.2025@xxxxxxxxxxxxx>
<969c42d7-0a40-4daf-a074-f2713d0d0412@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <969c42d7-0a40-4daf-a074-f2713d0d0412@xxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,SPF_HELO_NONE,SPF_PASS,
WEIRD_QUOTING autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 01:56:54PM +0200, Krzysztof Kozlowski wrote:
> On 28/05/2025 10:54, Christian Marangi wrote:
> > On Wed, May 28, 2025 at 09:30:37AM +0200, Krzysztof Kozlowski wrote:
> >> On 28/05/2025 02:49, Christian Marangi wrote:
> >>> - if:
> >>> properties:
> >>> compatible:
> >>> @@ -75,6 +78,17 @@ allOf:
> >>> reg:
> >>> maxItems: 1
> >>>
> >>> + required:
> >>> + - reg
> >>> +
> >>> + - if:
> >>> + properties:
> >>> + compatible:
> >>> + const: airoha,an7583-clock
> >>> + then:
> >>> + properties:
> >>> + reg: false
> >>
> >>
> >> No resources here, so this should be part of parent node.
> >>
> >
> > Ok hope you can help here. This is another case of "MFD" thing.
> >
> > I was with the idea that it was O.K. to use this with very different
> > devices. (current scenario Clock controller and MDIO controller)
> >
> > The node structure I had in mind was
> >
> > system-controller@1fa20000 {
> > compatible = "airoha,an7583-scu", "syscon", "simple-mfd";
> > reg = <0x0 0x1fb00000 0x0 0x970>;
> >
> > scuclk: scuclk {
> > compatible = "airoha,an7583-clock";
> > #clock-cells = <1>;
> > #reset-cells = <1>;
> > };
> >
> > mdio {
> > compatible = "airoha,an7583-mdio";
> > #address-cells = <1>;
> > #size-cells = <0>;
> >
> > mdio_0: bus@0 {
> > reg = <0>;
> > resets = <&scuclk AN7583_MDIO0>;
> > };
> >
> > mdio_1: bus@1 {
> > reg = <1>;
> > resets = <&scuclk AN7583_MDIO1>;
> > };
> > };
> > };
> >
> > But you want
> >
> > system-controller@1fa20000 {
> > compatible = "airoha,an7583-scu", "syscon";
> > reg = <0x0 0x1fb00000 0x0 0x970>;
> >
> > #clock-cells = <1>;
> > #reset-cells = <1>;
> >
>
> mdio could be here just to group the bus (it's pretty common I think),
> although not sure if compatible is useful then.
>
> > mdio_0: bus@0 {
> > reg = <0>;
> > resets = <&scuclk AN7583_MDIO0>;
> > };
> >
> > mdio_1: bus@1 {
> > reg = <1>;
> > resets = <&scuclk AN7583_MDIO1>;
> > };
> > };
> >
> > Again sorry if this question keeps coming around and I can totally
> > understand if you are getting annoyed by this. The reason I always ask
> > this is because it's a total PAIN to implement this with the driver
> > structure due to the old "simple-mfd" model.
>
> ... and Rob was saying multiple times: be careful when adding
> simple-mfd. If it bites back, then I am sorry, but everyone were warned,
> weren't they?
>
> What is exactly the pain anyway? You cannot instantiate children from
> SCU driver?
>
Answering below since they are related.
> >
> > (as again putting everything in a single node conflicts with the OF
> > principle of autoprobing stuff with compatible property)
>
> I am not sure if I follow. What principle? Where is this principle
> expressed?
>
> And you do not have in your second example additional compatibles, so
> even if such principle exists it is not broken: everything autoprobes, I
> think.
>
> >
>
>
The principle I'm talking about is one driver for one compatible.
(to be more precise excluding syscon compatible that is actually
ignored, if a driver for the compatible is found, any other compatible
is ignored.)
This means that declaring multiple compatible as:
compatible = "airoha,clock", "airoha,mdio"
doesn't result in the clock driver and the mdio driver probed but only
one of the 2 (probably only clock since it does have priority)
The "simple-mfd" compatible is just a simple compatible that indicate to
the OF system that every child (with a compatible) should be also probed.
And then automagically the driver gets probed.
Now the ""PAIN"" explaination. Not using the "simple-mfd" way with the
child with compatible and putting everything in the node means having to
create a dedicated MFD driver that just instruct to manually probe the
clock and mdio driver. (cause the compatible system can't be used)
So it's 3 driver instead of 2 with the extra effort of MFD driver
maintainer saying "Why simple-mfd is not used?"
There is a solution for this but I always feel it's more of a workaround
since it doesn't really describe the HW with the DT node.
The workaround is:
system-controller@1fa20000 {
/* The parent SCU node implement the clock driver */
compatible = "airoha,an7583-scu", "syscon";
reg = <0x0 0x1fb00000 0x0 0x970>;
#clock-cells = <1>;
#reset-cells = <1>;
/* Clock driver is instructed to probe child */
mdio {
compatible = "airoha,an7583-mdio";
#address-cells = <1>;
#size-cells = <0>;
mdio_0: bus@0 {
reg = <0>;
resets = <&scuclk AN7583_MDIO0>;
};
mdio_1: bus@1 {
reg = <1>;
resets = <&scuclk AN7583_MDIO1>;
};
};
};
But this really moves the probe from the simple-mfd to the clock driver.
So it's either 3 solution
1. 2 driver + "simple-mfd"
2. 3 driver + PAIN (due to MFD required driver)
3. 2 driver + not very correct DT node structure
Maybe option 3. is more acceptable?
The SCU node is mainly clock + reset controller and the MDIO bus is an
expansion of it?
Hope the long explaination makes sense to you (especially about the
OF principle thing)
--
Ansuel
Return-Path: <linux-kernel+bounces-665489-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id CB41F41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:00:00 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 007C517CD1A
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:00:02 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 22B7028688F;
Wed, 28 May 2025 12:59:52 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="E2hOF5uy"
Received: from mail-qt1-f174.google.com (mail-qt1-f174.google.com [209.85.160.174])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B4C52283FC3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:59:49 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.174
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748437191; cv=none; b=TQxKDgYYvdV/BZnfgFq1LBtqKlZGNIIpqyI71+fWLYV71JxenkNUZ+XLIXJ79qDkbXGIxtFk6qFj1OtJcSJzVgjn1L+nH7QZNUhZHMpQFOM8CkPmCMBf9Rgrrhpka0E2MAtD8A1kiWBMTvSNrjKq7/PI5iKAxdvfctZjS260JIk=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748437191; c=relaxed/simple;
bh=C0NmBaW0ATR+BjEQEZWGSFa+sfjvBIIHXFfmCizBQV8=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=TUqLop4wD75a1pCaIIsBrKPwaSeWoXs07XSdI0p8H7Qf5XtP816DktMzQRy5ogdttSaCBh+jYycJaRlvrntclVSeI9HLrIBTi2AeJRvyxHwePKd9vC0dy8ombE7WUlcDvJNP8YL9QgaarTrUlzwqNtD1AOqswRu2qF6KPEa6tSQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=E2hOF5uy; arc=none smtp.client-ip=209.85.160.174
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com
Received: by mail-qt1-f174.google.com with SMTP id d75a77b69052e-47691d82bfbso86046821cf.0
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 05:59:49 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=google.com; s=20230601; t=1748437188; x=1749041988; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=mh3KYFguc08WUp3HQG/e3NOwLqhhclGw8CBRTTOw3xk=;
b=E2hOF5uyCYaFXLK3QY9yHNIuPk9SUOYJMKyVoeum8fZWf28pRvz+yGCaCAh0uTmMP1
XazinLmHV98caDDOhInckm9MLVURIyaxdQrGOtS71bmbeZ/TovcclOODD6hY0XeprTrl
hn0jKnv9mLhw0fuYbKWlSyJ45qlThQJEYEX4yan3lbhf8VcGNZiCvstgvJH5HvjH9hSi
LLVXqo1OC9vprxNx40wGa3rHrXEYfJH+U+WAoATWbD/g1PN6YmoglWNmPCnni5CIrIDY
DyET9POZX0Kismg6eNLFhFWGtl5LWZlqOIp1fde3Hf2XHrmbpaChA9Ej9iP+xbLRLTJM
Pxdw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748437188; x=1749041988;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=mh3KYFguc08WUp3HQG/e3NOwLqhhclGw8CBRTTOw3xk=;
b=JEogf4s1HTLjKsYIGEC3rAMwN5edYeWOzgMX/RqehlLLCecrB9IhLe13wHxyAPzC0S
hTexcDLbjriyrqg5fP1zQmAIi5RaA7U/TDU9W17jLD9pKetZhsVVhtSzEn6CmF/jHuQj
oU/ozRZnMwvtUqSGCs52NXHOETq8hMklJO30x4UZhiW26S2M0vkPg10WIGBByymfwe1e
3GKLKogvCA5p5RAQ9QWmC7/fCSpfc2OD5iqalXjxkSL8B6Mgnx6KaC6R47hEPZ38fiUt
Vot91zN7XFJfqFvLyW6bCTMNsaePtRORNqbyLaktClrqdDFbqoPBvsOEB7CwjOOaPOOT
JF5w==
X-Forwarded-Encrypted: i=1; AJvYcCW9obzcL5/igYYdItFJdspquDlKW0a5D8NVJaHmeaOWN6POEllR9Kw7W5m9HooQjkyGQqrw5doQnhr2OA4=@vger.kernel.org
X-Gm-Message-State: AOJu0Yz3BsLQ7EUmAR8SB6aQ06RDU3gFretQ2mEYuHqkdt8HlwwdF31d
+7wk9wX/YGRBkzm5HjZQsVmIB0954FgpTHlsWw+iQKQOFgX6SrTGsYJR908ynEpdU5FjCjklXRT
gCDRwNI4YJGzTd6dab1YzG2ZIWDRcLjuoYneWvm6/
X-Gm-Gg: ASbGncuFx570JqksK6zOdy9b6VS8RwQSMgEF2GBxaWRPB26Wrw5qD2kKX61DQM+hfjM
na7+lY2kSdTrpptvLgt9qaVg5XLRzZqQis8lJdvLjNCN5LtX1qKfVyu/qMt0Ld5pr6LgVt6NaW+
8LhAkW+ael+Qf4Mcihc6HW9y7KENOLD8qUbycXB1pf+e4=
X-Google-Smtp-Source: AGHT+IFAJntWLEM+jLIr7N9mWP3wVZkrJg6XEkO/SEN/9+02OAMFuE/XmC+xS/0WBbR3yG/snqITFeF03Is/SbZOa1Q=
X-Received: by 2002:a05:622a:540c:b0:477:1edc:baaa with SMTP id
d75a77b69052e-49f46154670mr281543701cf.6.1748437188237; Wed, 28 May 2025
05:59:48 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <CAN2Y7hxscai7JuC0fPE8DZ3QOPzO_KsE_AMCuyeTYRQQW_mA2w@xxxxxxxxxxxxxx>
In-Reply-To: <CAN2Y7hxscai7JuC0fPE8DZ3QOPzO_KsE_AMCuyeTYRQQW_mA2w@xxxxxxxxxxxxxx>
From: Eric Dumazet <edumazet@xxxxxxxxxx>
Date: Wed, 28 May 2025 05:59:36 -0700
X-Gm-Features: AX0GCFv6GDabW9ltrrqADmuYBvRnrtFJ8jrQAKBbibiNhMSdO8QJCQSrZAN03og
Message-ID: <CANn89iLB39WjshWbDesxK_-oY1xaJ-bR4p+tRC1pPU=W+9L=sw@xxxxxxxxxxxxxx>
Subject: Re: [bug report, linux 6.15-rc4] A large number of connections in the
SYN_SENT state caused the nf_conntrack table to be full.
To: ying chen <yc1082463@xxxxxxxxx>
Cc: pablo@xxxxxxxxxxxxx, kadlec@xxxxxxxxxxxxx, fw@xxxxxxxxx,
davem@xxxxxxxxxxxxx, kuba@xxxxxxxxxx, pabeni@xxxxxxxxxx,
netfilter-devel@xxxxxxxxxxxxxxx, coreteam@xxxxxxxxxxxxx,
netdev@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-11.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 5:52=E2=80=AFAM ying chen <yc1082463@xxxxxxxxx> wro=
te:
>
> Hello all,
>
> I encountered an "nf_conntrack: table full" warning on Linux 6.15-rc4.
> Running cat /proc/net/nf_conntrack showed a large number of
> connections in the SYN_SENT state.
> As is well known, if we attempt to connect to a non-existent port, the
> system will respond with an RST and then delete the conntrack entry.
> However, when we frequently connect to non-existent ports, the
> conntrack entries are not deleted, eventually causing the nf_conntrack
> table to fill up.
>
> The problem can be reproduced using the following command:
> hping3 -S -V -p 9007 --flood xx.x.xxx.xxx
>
> ~$ cat /proc/net/nf_conntrack
> ipv4 2 tcp 6 112 SYN_SENT src=3Dxx.x.xxx.xxx dst=3Dxx.xx.xx.xx
> sport=3D2642 dport=3D9007 src=3Dxx.xx.xx.xx dst=3Dxx.x.xxx.xxx sport=3D90=
07
> dport=3D2642 mark=3D0 zone=3D0 use=3D2
> ipv4 2 tcp 6 111 SYN_SENT src=3Dxx.x.xxx.xxx dst=3Dxx.xx.xx.xx
> sport=3D11510 dport=3D9007 src=3Dxx.xx.xx.xx dst=3Dxx.x.xxx.xxx sport=3D9=
007
> dport=3D11510 mark=3D0 zone=3D0 use=3D2
> ipv4 2 tcp 6 111 SYN_SENT src=3Dxx.x.xxx.xxx dst=3Dxx.xx.xx.xx
> sport=3D28611 dport=3D9007 src=3Dxx.xx.xx.xx dst=3Dxx.x.xxx.xxx sport=3D9=
007
> dport=3D28611 mark=3D0 zone=3D0 use=3D2
> ipv4 2 tcp 6 112 SYN_SENT src=3Dxx.x.xxx.xxx dst=3Dxx.xx.xx.xx
> sport=3D62849 dport=3D9007 src=3Dxx.xx.xx.xx dst=3Dxx.x.xxx.xxx sport=3D9=
007
> dport=3D62849 mark=3D0 zone=3D0 use=3D2
> ipv4 2 tcp 6 111 SYN_SENT src=3Dxx.x.xxx.xxx dst=3Dxx.xx.xx.xx
> sport=3D3410 dport=3D9007 src=3Dxx.xx.xx.xx dst=3Dxx.x.xxx.xxx sport=3D90=
07
> dport=3D3410 mark=3D0 zone=3D0 use=3D2
> ipv4 2 tcp 6 111 SYN_SENT src=3Dxx.x.xxx.xxx dst=3Dxx.xx.xx.xx
> sport=3D44185 dport=3D9007 [UNREPLIED] src=3Dxx.xx.xx.xx dst=3Dxx.x.xxx.x=
xx
> sport=3D9007 dport=3D44185 mark=3D0 zone=3D0 use=3D2
> ipv4 2 tcp 6 111 SYN_SENT src=3Dxx.x.xxx.xxx dst=3Dxx.xx.xx.xx
> sport=3D51099 dport=3D9007 src=3Dxx.xx.xx.xx dst=3Dxx.x.xxx.xxx sport=3D9=
007
> dport=3D51099 mark=3D0 zone=3D0 use=3D2
> ipv4 2 tcp 6 112 SYN_SENT src=3Dxx.x.xxx.xxx dst=3Dxx.xx.xx.xx
> sport=3D23609 dport=3D9007 src=3Dxx.xx.xx.xx dst=3Dxx.x.xxx.xxx sport=3D9=
007
> dport=3D23609 mark=3D0 zone=3D0 use=3D2
The default timeout is 120 seconds.
/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_syn_sent
Return-Path: <linux-kernel+bounces-665490-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 81FCF41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:01:47 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id A75BD17C56A
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:01:48 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id EDE1819CD07;
Wed, 28 May 2025 13:01:42 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=ciq.com header.i=@ciq.com header.b="hh3VhMnG"
Received: from mail-qt1-f169.google.com (mail-qt1-f169.google.com [209.85.160.169])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2EE9426AEC
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:01:38 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.169
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748437302; cv=none; b=tf1+F90ZhMxlhTughpSFqtIDm5g36i/Rlnij5JvEJWmzDB9wAGTo58VFJMwjntx+DP2XraxeKVqUnMRZdQSqOTj8aikckNFzyTOqidEyc2ms1SDjws4Q6BWHsfrEtAOlkyOuWWchFfZbq9iqNFiUi0qbiutMtXu7sluvu7AIAEo=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748437302; c=relaxed/simple;
bh=IDUpsfHZ2AH+U1rKwA/IQTqNl27rntnPiEG0JxCqPMc=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=WRVzXYU0tRLzeWe85VGc4Se4leAaORIkqa0fRoZ0ucnvKngT4CkZyzsNWk9KIlOwiwhHty2h03PP1yl36yvw7LGSM8sYndJKq1Z++XaZ3prl1S594E/OX5y7b0HPXAjbmK2NSg03A/s4ZORpWOV1AFhtr3Y1f2/CPmd8KR0whjI=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=ciq.com; spf=pass smtp.mailfrom=ciq.com; dkim=pass (2048-bit key) header.d=ciq.com header.i=@ciq.com header.b=hh3VhMnG; arc=none smtp.client-ip=209.85.160.169
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=ciq.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ciq.com
Received: by mail-qt1-f169.google.com with SMTP id d75a77b69052e-47690a4ec97so41006591cf.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 06:01:38 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=ciq.com; s=s1; t=1748437298; x=1749042098; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=WdTBfL4v5yjVyTe4ji2bqNzULXH9IrkaNLBy8k+ftBw=;
b=hh3VhMnGPlCTz1gzMd370EtwUETu+YexgFvsP0VXAQ4X9miH/5WohfEb4iyWuRsEOV
89MEqHYyydywQbr0ds2YxGWoE/npFBP4Qlcfsa8WdvUYWay2YkBhALEV6qabzXnytrQn
seXAKNiYQl1IDbGmIFaGnjnTxqGXsBDM38QvSERAOMXKxd1Xm22XXTsKTkHNbwyWZ7E9
WZvFCY3zBlgwXAWIMz38lXi8xyBhCGgFRLBbzTBVaTVNxRPNiDGy597OZzQuGFFdLJ/X
0LquhmP7l+9WVnrs6JJ8i0c9zzS5olgOwn4LkUB/taXglTllVgS0u0E5V0ldC5AYiA33
z/IQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748437298; x=1749042098;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=WdTBfL4v5yjVyTe4ji2bqNzULXH9IrkaNLBy8k+ftBw=;
b=KjUdF9FU5iEYYUduT0Bj9yLZ1k39VAVrQPSCQiLy/QZTwq9lIB92fWzdAqC3EJHfmz
cIEEcwg8BxJdIoEHSAWuXS2RlpP1otQAQ1hgHALNKBdMM7jZqp5bm90CmX4AMa88Wj9e
M2bBnq266iOQUquE+TZioo2TIm14I/IGG28yIPkTbPUeu8uCZQpCQP/7v9ICVs8Zp5jS
XQHuFIC/zAavjGA7ncU5y+fpb6DoDUcs4IOpoFP/JOR5bE5n3aFSi/aRTONApSfwishM
pAUyvDOf5DcwlykeOu4oS9SphjS9f2mUVxlxSujeRzJh/o7fHmpw4l/8pOlvE68WF3b8
3ieA==
X-Forwarded-Encrypted: i=1; AJvYcCV1znTpNoA9PP5Vy9UnoE4QpDdDiQDEQmOahsxt67clQpxQ1mkxeNF/fGHAwxBwVgkIMw/IaoUOcE/J0TY=@vger.kernel.org
X-Gm-Message-State: AOJu0Ywbcw846/poJCIGHsw499RDvyeJJb9q/7rPgGkVZzWpeTgAwlAR
9VBZPL5AKp3QeDnQpJ41kxTIQEKxxN0Z+AVFl+huotYKS6vJIfy4HKWFaaL/QLCKSazNEFfPO5K
owHw/u01GooEcCiE93YNS+MrqhpE39bpflvCRZNtBCw==
X-Gm-Gg: ASbGncuWsZKNaUzFvI5ZADQ6dMJCApu1rxdwaxLBpamurcZ23xrQjtEExuagbU0PXEH
Yewxl8ExsF3V/KWIg2HgQQpzs1CnOHM10LdpCmbFldtrPYzGSDpd4hg40HFKDEP8caqwEduGesd
aEwEXcLzEjxYs5iyY7FPKe9lLglb59SE+w
X-Google-Smtp-Source: AGHT+IFU9HRd8Z2NHXDUti6Rzo2QxfPYr9ibpOVOYfcSdksMHy6ckLo7YTZaTUCa9+aafWQRbLsvRBJms4rHDxY/5NA=
X-Received: by 2002:a05:622a:1146:b0:494:a099:daee with SMTP id
d75a77b69052e-4a3800e6784mr35251551cf.19.1748437297821; Wed, 28 May 2025
06:01:37 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250527162445.028718347@xxxxxxxxxxxxxxxxxxx>
In-Reply-To: <20250527162445.028718347@xxxxxxxxxxxxxxxxxxx>
From: Brett Mastbergen <bmastbergen@xxxxxxx>
Date: Wed, 28 May 2025 09:01:26 -0400
X-Gm-Features: AX0GCFsWHcrqN1_NeXTzUkCpGXT3fVMnMV6OhgqOX67GdQ4WyBq7Uin5PrObcX4
Message-ID: <CAOBMUvgRZmc=Q-dCS7X=9QzFgUHzgkXkqAtNcncLZUi+Fu0Zxg@xxxxxxxxxxxxxx>
Subject: Re: [PATCH 6.12 000/626] 6.12.31-rc1 review
To: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
Cc: stable@xxxxxxxxxxxxxxx, patches@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, torvalds@xxxxxxxxxxxxxxxxxxxx,
akpm@xxxxxxxxxxxxxxxxxxxx, linux@xxxxxxxxxxxx, shuah@xxxxxxxxxx,
patches@xxxxxxxxxxxx, lkft-triage@xxxxxxxxxxxxxxxx, pavel@xxxxxxx,
jonathanh@xxxxxxxxxx, f.fainelli@xxxxxxxxx, sudipm.mukherjee@xxxxxxxxx,
srw@xxxxxxxxxxxxxxxx, rwarsow@xxxxxx, conor@xxxxxxxxxx, hargar@xxxxxxxxxxxxx,
broonie@xxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 12:45=E2=80=AFPM Greg Kroah-Hartman
<gregkh@xxxxxxxxxxxxxxxxxxx> wrote:
>
> This is the start of the stable review cycle for the 6.12.31 release.
> There are 626 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Thu, 29 May 2025 16:22:51 +0000.
> Anything received after that time might be too late.
>
> The whole patch series can be found in one patch at:
> https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-=
6.12.31-rc1.gz
> or in the git tree and branch at:
> git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable=
-rc.git linux-6.12.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
Builds successfully. Boots and works on qemu and Dell XPS 15 9520 w/
Intel Core i7-12600H
Tested-by: Brett Mastbergen <bmastbergen@xxxxxxx>
Thanks,
Brett
Return-Path: <linux-kernel+bounces-665491-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 5A65F41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:02:04 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 1806C7AA232
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:00:45 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 55C702110;
Wed, 28 May 2025 13:01:55 +0000 (UTC)
Received: from mail-oa1-f50.google.com (mail-oa1-f50.google.com [209.85.160.50])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 32BCB3595D;
Wed, 28 May 2025 13:01:52 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.50
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748437314; cv=none; b=nySrysMTn2BJWq8Tha4AR3ixTAbENfDp4L2p6A7GXcwULDQXJ1a92EVOvHA+xPIJcDA0K/PdGAMHs7VzFwCiL+mGd5V5X9lu3FHeyiP1cxbdERtb/JM7gjD7B72JKqMGokxhw34fvQyzQ60S+7/FhNJc/EH1iinPtlocJTBkESI=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748437314; c=relaxed/simple;
bh=y9bMKWA1mUCVhYWK+2mE7dMzU1P7hxUNnWy/QdoIJFY=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=gvMJtkrodsUI3j++zARCTGRMxpM/JSGvrTEQtyWwl19snFuQt+rpaPqW/AZWWQFfVZl2MUhywxzwREak/+FOx7+8r/EkWzI2ivtoht72z+SmAO9EMvAJTiCycq5XiIxL1L7SWo+e8tioCCFDGxNI8zIGqeFGZS1r3Ws8hfEycLE=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux-m68k.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.160.50
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux-m68k.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-oa1-f50.google.com with SMTP id 586e51a60fabf-2e8f84653c3so4952fac.0;
Wed, 28 May 2025 06:01:52 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748437312; x=1749042112;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=IbSvaL2uho5iBNc6UnxSmb8ikoxZVNAuMK5QOEf9/rc=;
b=BbTRec1bpCnN4rHckQFYX/xiPcs2SeZiLpQA4hYIzslpPo4VIDm23IprF8ZPrxyp8Z
go++DU7QhfzytUMRiVqKemrg1NT2TA0Z0TJLiuAZTx91650yOh4m3eJVKJwgHb2j3qU/
68CI5+7rkPvkSa9P1v8nZCm9hkMbEr8UDggsqdRxi+oXcS8yTuX//sLXfd89rUDT6s52
ZvmHBplLV3IW+O/bqb7xclTT5Y5HnO1RwCkrNjW5nMdAyh5VPTfSMvwDJO2A+Ac11oVx
D+BPKtesekyi7fvHO7L4uq8hg+OkfYg78h94ks2fRxqd1K4aHitLX8Js8G+ZrR+hURxr
flcQ==
X-Forwarded-Encrypted: i=1; AJvYcCVZLXfTd7UFlxEjHH8O7C7pVO927/oElFlPnlw7HDaTfkqfixZKd86Elk7wGZmQpN+RxKPRid5uDiNUK/ml@xxxxxxxxxxxxxxx, AJvYcCWZwOO3VpxZxygy18Vj8uvOH8X/Grwfr7sIBbRnRMFIbTEH/hP7hwzaB/8FQq956QfAnTMPSBkV4SPu@xxxxxxxxxxxxxxx, AJvYcCWgZSGL9zOcq02+QzzLQ1SLhRK1C6+cp0z5ChGv8w+nyhaSY1Stx5A5BhYFL3H38cseGEPmKXlUiotW/fk=@vger.kernel.org, AJvYcCWt3MH2kG4BDq3KtqrgHzbVg8gwBrjNxRYNuKqjvcoOJft3U9+aA/TBM7JPqLwA1ID4czCzzQUO1DjXYTM/H4akrmc=@vger.kernel.org, AJvYcCXSoSr0uSSc0Iq5eRHN8eG9AeLbNvjw6hq09REB+FypHQ6PsZ4ReYLMMN4uueSOIcQXD/uTi2RktF5o@xxxxxxxxxxxxxxx
X-Gm-Message-State: AOJu0Yx/OQ6bLrzJlcN/AyaUmMpkOkkRv4XCv0uF+Fh9PPwk0TIBcRLi
Ev6p9t9krNrfROARyrIggY+5aOaJ/AdReEy+XnnI4GHbMGYFYDpgpbbmWUtrQWjY
X-Gm-Gg: ASbGncvGVf36xJt0B8A2czpq+epOKCzoihdsQJF7I46vcr8Lb1iuKSzzPohszC5SBs5
VJG4KrL4WwF7OQmH47sQwJ6S1Kf4oJ3G2z/iol+uYDKXEjRWFbQcDWDizwKNlPBGPCpemXHfeyo
hIsk8cGSZ1TA0n+ZxggSV6N8JkTnAlefzQwyiX5ZtI0jR5hW02t1EhbFStJYY7n1SeFJyG65xxI
RcVsnphOnAktY29ASS3qc6XMpSYpo75UmbnFzUW8hBsNcNP3XZVSo6oT8O/C6InU3zfKDbu6Gec
1iGvGREWdCowG5GnjJAUrNqtb75SBqb9ksCgyLEwvxbYRes5JMxBmGEj1ivMkcVQBHuZ7gR3gtk
XG7KKcqXyoDKu6izi6yOLsN30kzsd
X-Google-Smtp-Source: AGHT+IFzcGONDX9eh+40zCjEjeFb827OyifAm7A+OIhWfUZ92FQgovECyH9fx8Gqkz32CO+JnAyf/A==
X-Received: by 2002:a05:6871:e809:b0:29e:6bdb:e362 with SMTP id 586e51a60fabf-2e861e86388mr8793896fac.17.1748437311165;
Wed, 28 May 2025 06:01:51 -0700 (PDT)
Received: from mail-qt1-f178.google.com (mail-qt1-f178.google.com. [209.85.160.178])
by smtp.gmail.com with ESMTPSA id d75a77b69052e-4a3c0a6443asm5766681cf.4.2025.05.28.06.01.50
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 06:01:51 -0700 (PDT)
Received: by mail-qt1-f178.google.com with SMTP id d75a77b69052e-4774d68c670so17827391cf.0;
Wed, 28 May 2025 06:01:50 -0700 (PDT)
X-Forwarded-Encrypted: i=1; AJvYcCWd/ngvJU7ORBgFZGig8fmQD8V+K9FlzCiIFf4p6nUl5XBhdv3RhLgisfnfy8nD5PfToGe03awvkW/o@xxxxxxxxxxxxxxx, AJvYcCXHmFd9VzH/Sti9F6bliEjmWdOvgeIQVtnDmSZrlfm6CiReQt/cdw0WHoY5OWAtiErx61vQWUVOSzhyCbmO@xxxxxxxxxxxxxxx, AJvYcCXcAltGmwP5hvB2y5IavOMge3M3Orgi9yRrGvT/mmVjlowIyFXMJd4j+v5WZdT7GWbMNznhs5Zif2RU@xxxxxxxxxxxxxxx, AJvYcCXjSqWj6c4ravcAstUXBZn2CNPoquKiP4Yd/pFpcl2rzb/5UKXmrZ6iYMDGqGj/+9DLWGHW7GgNmPJ37l45FkJJla8=@vger.kernel.org, AJvYcCXnQBrVzL9MiiQxR0fSehtVn1NFtO8kV4TUQV/a5ssbmwMwQeCkDCHqu9NJZUpAsaudT3hQQlbcK9WUo4Y=@vger.kernel.org
X-Received: by 2002:a05:6102:2911:b0:4df:93e0:fb7 with SMTP id
ada2fe7eead31-4e42419b8c0mr12541235137.25.1748436893682; Wed, 28 May 2025
05:54:53 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250528-pinctrl-const-desc-v1-0-76fe97899945@xxxxxxxxxx> <20250528-pinctrl-const-desc-v1-14-76fe97899945@xxxxxxxxxx>
In-Reply-To: <20250528-pinctrl-const-desc-v1-14-76fe97899945@xxxxxxxxxx>
From: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 14:54:41 +0200
X-Gmail-Original-Message-ID: <CAMuHMdUGDf5n_Fg7pwiPumm95nPUXyH15geAy2ULwY3U+OtZJA@xxxxxxxxxxxxxx>
X-Gm-Features: AX0GCFu5yojjEPsbiWTwjJJQ5khyE5KBTwGS5B0aqZkGtvZvOhYOGPRkjlMB-4Q
Message-ID: <CAMuHMdUGDf5n_Fg7pwiPumm95nPUXyH15geAy2ULwY3U+OtZJA@xxxxxxxxxxxxxx>
Subject: Re: [PATCH 14/17] pinctrl: renesas: Move fixed assignments to
'pinctrl_desc' definition
To: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>
Cc: Linus Walleij <linus.walleij@xxxxxxxxxx>, Basavaraj Natikar <Basavaraj.Natikar@xxxxxxx>,
Shyam Sundar S K <Shyam-sundar.S-k@xxxxxxx>, Andrew Jeffery <andrew@xxxxxxxxxxxxxxxxxxxx>,
Joel Stanley <joel@xxxxxxxxx>, Avi Fishman <avifishman70@xxxxxxxxx>,
Tomer Maimon <tmaimon77@xxxxxxxxx>, Tali Perry <tali.perry1@xxxxxxxxx>,
Patrick Venture <venture@xxxxxxxxxx>, Nancy Yuen <yuenn@xxxxxxxxxx>,
Benjamin Fair <benjaminfair@xxxxxxxxxx>, =?UTF-8?Q?Jonathan_Neusch=C3=A4fer?= <j.neuschaefer@xxxxxxx>,
=?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= <rafal@xxxxxxxxxx>,
Broadcom internal kernel review list <bcm-kernel-feedback-list@xxxxxxxxxxxx>, Ray Jui <rjui@xxxxxxxxxxxx>,
Scott Branden <sbranden@xxxxxxxxxxxx>, Geert Uytterhoeven <geert+renesas@xxxxxxxxx>,
David Rhodes <david.rhodes@xxxxxxxxxx>, Richard Fitzgerald <rf@xxxxxxxxxxxxxxxxxxxxx>,
Charles Keepax <ckeepax@xxxxxxxxxxxxxxxxxxxxx>, Lorenzo Bianconi <lorenzo@xxxxxxxxxx>,
Sean Wang <sean.wang@xxxxxxxxxx>, Jesper Nilsson <jesper.nilsson@xxxxxxxx>,
Lars Persson <lars.persson@xxxxxxxx>,
Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx>, Damien Le Moal <dlemoal@xxxxxxxxxx>,
Vladimir Zapolskiy <vz@xxxxxxxxx>, Michal Simek <michal.simek@xxxxxxx>,
Emil Renner Berthing <kernel@xxxxxxxx>, Jianlong Huang <jianlong.huang@xxxxxxxxxxxxxxxx>,
Hal Feng <hal.feng@xxxxxxxxxxxxxxxx>, Matthias Brugger <matthias.bgg@xxxxxxxxx>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxx>,
Alexandre Belloni <alexandre.belloni@xxxxxxxxxxx>, Maxime Coquelin <mcoquelin.stm32@xxxxxxxxx>,
Alexandre Torgue <alexandre.torgue@xxxxxxxxxxx>, linux-gpio@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-aspeed@xxxxxxxxxxxxxxxx,
openbmc@xxxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx,
linux-renesas-soc@xxxxxxxxxxxxxxx, linux-sound@xxxxxxxxxxxxxxx,
patches@xxxxxxxxxxxxxxxxxxxxx, linux-mediatek@xxxxxxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxx, linux-riscv@xxxxxxxxxxxxxxxxxxx,
linux-rtc@xxxxxxxxxxxxxxx, linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Krzysztof,
On Wed, 28 May 2025 at 12:42, Krzysztof Kozlowski
<krzysztof.kozlowski@xxxxxxxxxx> wrote:
> Assign 'struct pinctrl_desc' .pins and .npins members in definition to
> make clear that number of pins is fixed and have less code in the probe.
>
> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>
Reviewed-by: Geert Uytterhoeven <geert+renesas@xxxxxxxxx>
Acked-by: Geert Uytterhoeven <geert+renesas@xxxxxxxxx>
> --- a/drivers/pinctrl/renesas/pinctrl-rzn1.c
> +++ b/drivers/pinctrl/renesas/pinctrl-rzn1.c
> @@ -680,6 +680,8 @@ static struct pinctrl_desc rzn1_pinctrl_desc = {
This structure could be made const...
> .pmxops = &rzn1_pmx_ops,
> .confops = &rzn1_pinconf_ops,
> .owner = THIS_MODULE,
> + .pins = rzn1_pins,
> + .npins = ARRAY_SIZE(rzn1_pins),
> };
>
> static int rzn1_pinctrl_parse_groups(struct device_node *np,
> @@ -878,8 +880,6 @@ static int rzn1_pinctrl_probe(struct platform_device *pdev)
>
> ipctl->dev = &pdev->dev;
> rzn1_pinctrl_desc.name = dev_name(&pdev->dev);
... if you would replace this assignment by a hardcoded name
like "pinctrl-rzn1".
> - rzn1_pinctrl_desc.pins = rzn1_pins;
> - rzn1_pinctrl_desc.npins = ARRAY_SIZE(rzn1_pins);
>
> ret = rzn1_pinctrl_probe_dt(pdev, ipctl);
> if (ret) {
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
Return-Path: <linux-kernel+bounces-665492-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id BD65E41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:02:36 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 221E73BED4F
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:01:55 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 266032868A6;
Wed, 28 May 2025 13:01:59 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b="VEJ7skyY"
Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2BAA628643A
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:01:55 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748437318; cv=none; b=cYvn1dpAMPuhKSzBWFGD69/bk7isRgWPGpS67gQX28oBS/3XqFGJVM0VCDLCnqC2PpFMXD61iN2HC//hxqVe0kwDRkvAtIdNk+fhwKXLPduu3BDepRS7yg56TY4sv04H4bRL/ligzLp1X8KrM/2Q/ZTBpL2paVrcRFI+4KpJqqM=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748437318; c=relaxed/simple;
bh=3fdhLQX+NQLmc6QGTAqlK00Eg5rw8NhfRluCa8iiXMY=;
h=Message-ID:Date:MIME-Version:Subject:To:References:Cc:From:
In-Reply-To:Content-Type; b=Rlw8I1/zg44s5vqe5xgP/0deqefbl91c4C3tv15gD6BN/OVHGXBoOpDcC9ZsUdCPbZ0hBbXzgVcKwshtyAVxmFnbOMim3NJQUv6J/G1eDTXyzZjQH9jAboeeBECbF5V8e4bgUfvlXsYeNvQP6ukSFXGClfED35ET2cvqAbs7Vk4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b=VEJ7skyY; arc=none smtp.client-ip=209.85.221.53
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com
Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-3a37a243388so4420285f8f.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 06:01:55 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=suse.com; s=google; t=1748437314; x=1749042114; darn=vger.kernel.org;
h=content-transfer-encoding:in-reply-to:from:cc:content-language
:references:to:subject:user-agent:mime-version:date:message-id:from
:to:cc:subject:date:message-id:reply-to;
bh=38Mq7+TilqUZQ4Ql8ESWjfob/Radawj4R/EYIugjyyY=;
b=VEJ7skyYTmJC3WgcJvkposYs3w8E05DqtZNZSCKONO+i3M8zN/tvjGUvbHc/MMdtDK
SEbf9pwrSUUHxylcuYxCx+JiOQgGAKSsFn/LJgWh9Iy5+/FwJEIT2jVzMXqI8Exhh78d
Nw+vDf3nBKzaS1cVVTYFn+FQghmQWC86ifxHZcWr3Ah35QCJq9ZEaRcJxvLZvYbZN+oz
l8mclo7QimMQ15D8rkROuf/aI0RSLhaH/8be371sBmvakeIJAmLP6Vja/qJwCZFS34xA
2BjCRyJJAO1Xuyj2be0MNVAu5/FHX/MHMOH5/K9RnAEBK6o+Lo0CRIK8A2pgU4LLar69
BzHA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748437314; x=1749042114;
h=content-transfer-encoding:in-reply-to:from:cc:content-language
:references:to:subject:user-agent:mime-version:date:message-id
:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
bh=38Mq7+TilqUZQ4Ql8ESWjfob/Radawj4R/EYIugjyyY=;
b=mULoSmc/u6rl4/GsJRg4Flm/bToFhaTmOU/lW8JTfXkDr+RSqFwS5OqlX00wB8zC1u
48tyIBJEWeg5mMrgwY2ClNammY3ni8Sqwt65QBRAZLCK8Y8xdjTb0N8sIVs6Rl7GxvFt
Tf1yyBBpFS7KM8YGa3MjEIhGwbvw8natEmDSLvbtq8bv+aiw5iY2L7ew01H9Els3TBsA
YFvmFapqor4LGkMPrau4SmjhiganRb6f/TpDF1Fj3O+KCRKWDXQDAjVIw4tNreCTV6h/
xzSnhrXWWJRiqe2vl+2o366lP9kF9FiPQ4J5n+vNYXyUoKTdlLFFiys1xnPN2LGou5e/
mKqg==
X-Forwarded-Encrypted: i=1; AJvYcCWynUd9UewZJG6LrTPaT5rYMPrU/p0OWlTLBs9+WOTJqmiv+gR6gPBC7EmvNz/hZOcPhXEOadIQJwAPDCs=@vger.kernel.org
X-Gm-Message-State: AOJu0YxB9RG/H9BY0CDMqRkaQ50SAg8osi7eC6WCjHqw6fwVgTKZS7Xu
eqZrEUJZDBeIRCOH1MUCN/YMhA6Ssz27xzs9OBsi3DbxqzjYlWPUyiZ/v6JWic8KOnU=
X-Gm-Gg: ASbGncvO5Eoaay5G8pJrcaT64WQM9BU9qLwKkDz87CrBw8kraaiBYz8+CTvSrgzQLJ1
qLvNyUTXxP2CWPTBxQVmufawLk1CavRGYBaxWn/QUYZkfSwJXTQD71qk/4u0NfSgKJ+yXuvzHfU
WWg+1MpWP9ITn2Z9IpBkW+2lIj2MK7FfN2dpOBSL54QsR4/wRn9uTvquEw3Q44wz+QLOIIX7/8v
HSGVkEQVAEQQ+CZwEtqJiswlf0ARStlm5IKpR08Ag8pxVMpzO/JqXwfmr+8/YJpftR3++krihyN
VRNy7GQnJhGNq3S/Bmi/sVn2a03szVVTE1RXPzTk4COrzhXqYDQhtd1v/ydp1ym28DKsmyhu93M
/IG/9/mL0pFyzqJiV8zMREeXGv0n6
X-Google-Smtp-Source: AGHT+IExPO/fecpqiLxlv8l+LWdTeQWEk5Jra7qPNcPeYoy57qjUZpayKMg+tDR4rnGK4U0piqGy8g==
X-Received: by 2002:a05:6000:2313:b0:3a4:e67d:371b with SMTP id ffacd0b85a97d-3a4e67d376fmr3335891f8f.29.1748437314208;
Wed, 28 May 2025 06:01:54 -0700 (PDT)
Received: from ?IPV6:2001:a61:13aa:4c01:67ac:b222:f455:8b70? ([2001:a61:13aa:4c01:67ac:b222:f455:8b70])
by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a4eace3283sm1405971f8f.89.2025.05.28.06.01.53
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 06:01:53 -0700 (PDT)
Message-ID: <df01d028-cf41-49be-8f70-b512f57c5cc6@xxxxxxxx>
Date: Wed, 28 May 2025 15:01:52 +0200
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [syzbot] [usb?] WARNING in dtv5100_i2c_msg/usb_submit_urb
To: syzbot <syzbot+0335df380edd9bd3ff70@xxxxxxxxxxxxxxxxxxxxxxxxx>,
gregkh@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-usb@xxxxxxxxxxxxxxx, syzkaller-bugs@xxxxxxxxxxxxxxxx
References: <68351d36.a70a0220.253bc2.009d.GAE@xxxxxxxxxx>
Content-Language: en-US
Cc: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>
From: Oliver Neukum <oneukum@xxxxxxxx>
In-Reply-To: <68351d36.a70a0220.253bc2.009d.GAE@xxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 27.05.25 04:02, syzbot wrote:
>
> ------------[ cut here ]------------
> usb 1-1: BOGUS control dir, pipe 80000280 doesn't match bRequestType c0
> WARNING: CPU: 0 PID: 5833 at drivers/usb/core/urb.c:413 usb_submit_urb+0x1112/0x1870 drivers/usb/core/urb.c:411
[..]
> Call Trace:
> <TASK>
> usb_start_wait_urb+0x114/0x4c0 drivers/usb/core/message.c:59
> usb_internal_control_msg drivers/usb/core/message.c:103 [inline]
> usb_control_msg+0x232/0x3e0 drivers/usb/core/message.c:154
> dtv5100_i2c_msg+0x250/0x330 drivers/media/usb/dvb-usb/dtv5100.c:60
> dtv5100_i2c_xfer+0x1a4/0x3c0 drivers/media/usb/dvb-usb/dtv5100.c:86
Hi,
these transfers are done via control transfers to endpoint 0.
So this is not yet another one of those cases that a driver fails
to verify that it operates on the intended hardware.
I'd say that a driver can assume that endpoint 0 exists and is
a control endpoint.
But I am afraid we never check that. Should we?
Regards
Oliver
Return-Path: <linux-kernel+bounces-665493-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id CDE9141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:08:44 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 3A9BA4E2752
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:08:43 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 85092286880;
Wed, 28 May 2025 13:08:35 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=fail reason="signature verification failed" (2048-bit key) header.d=armlinux.org.uk header.i=@armlinux.org.uk header.b="rTQMV09z"
Received: from pandora.armlinux.org.uk (pandora.armlinux.org.uk [78.32.30.218])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id AB9F52192F1;
Wed, 28 May 2025 13:08:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=78.32.30.218
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748437714; cv=none; b=WX2rWVhwGqkPiGlBGMJdqBjDYHPp/+OBtzgsWRqcHvscFm6csWybd3Fp9q7PSoxLp4NV0IxLCdz1oXBIRZHP++pQI18DxxOzRhVUyvbL8cwBYXuDtQ8Mb+bRrVpm2v8D8E/OpaP0edXobVpjHUjR5VbjgZZHA7TM2bPszXLkCps=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748437714; c=relaxed/simple;
bh=LvuTwweVOkXy6LNGPlHmJTdLDN6UIWQ127kpvTnTNZQ=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=tCIQUe+YLAFFmYE3Xpr2AlAUajUR5Yjz/YWcBbponiuha+riaL65rFGftn35dlLXLnKtgHY1oqi+HNjh65Zndk13VazItVz2TpCKuXLrbTD4P+ZnxQAqmT0VEoOMT67YS/7hDvBVBZSF9tnHSZC517rv7Z1B1RuM7OP2OmQRlB4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=armlinux.org.uk; spf=none smtp.mailfrom=armlinux.org.uk; dkim=pass (2048-bit key) header.d=armlinux.org.uk header.i=@armlinux.org.uk header.b=rTQMV09z; arc=none smtp.client-ip=78.32.30.218
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=armlinux.org.uk
Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=armlinux.org.uk
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
d=armlinux.org.uk; s=pandora-2019; h=Sender:In-Reply-To:Content-Type:
MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:Reply-To:
Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:
Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:
List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive;
bh=1frZwLooVKoM3mdNMU1fW6HD3+l5Q34lRajwGBwac14=; b=rTQMV09zYs3kFsDij10lnOsTU0
28koBg7TNZM/ejICs0sIAeGAoHGwbsCwkLnnGmCEvifUpXS7Z+SXwC3uW+fbWUxHGdWCro+QVBrtr
YVisiTqfcQK9KQc6Zwsk2Ba4mvAHAR4zvAN98gvZ+rhukdRcyTWnBbIitZHWiWKgNUUDMlMSWNvYv
LMNULSJFA9RqSA6AJbGUGuHRLMgnxJskpCqwfRK4cg+25LiDXcLtEJl1PDXT2QNhIGeBf9YFKhD+X
KdFFaMVm2e0U9pLjUTQSi1L38YgeHGD5rX+Klkgd/WyoV49v08uIsRWRdYc8v8OtvgK5jzuxy/dIe
CgRBjCFQ==;
Received: from shell.armlinux.org.uk ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:37986)
by pandora.armlinux.org.uk with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
(Exim 4.96)
(envelope-from <linux@xxxxxxxxxxxxxxx>)
id 1uKGW4-0000Hf-2B;
Wed, 28 May 2025 14:08:20 +0100
Received: from linux by shell.armlinux.org.uk with local (Exim 4.96)
(envelope-from <linux@xxxxxxxxxxxxxxxxxxxxx>)
id 1uKGVz-0002Qs-1F;
Wed, 28 May 2025 14:08:15 +0100
Date: Wed, 28 May 2025 14:08:15 +0100
From: "Russell King (Oracle)" <linux@xxxxxxxxxxxxxxx>
To: Yajun Deng <yajun.deng@xxxxxxxxx>
Cc: Andrew Lunn <andrew@xxxxxxx>, hkallweit1@xxxxxxxxx, davem@xxxxxxxxxxxxx,
edumazet@xxxxxxxxxx, kuba@xxxxxxxxxx, pabeni@xxxxxxxxxx,
netdev@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH net-next] net: phy: Add c45_phy_ids sysfs entry
Message-ID: <aDcKvwDaa6_1gZY7@xxxxxxxxxxxxxxxxxxxxx>
References: <20250523132606.2814-1-yajun.deng@xxxxxxxxx>
<2eec1d17-a6d1-4859-9cc9-43eeac23edbd@xxxxxxx>
<fad26dc95cbe08a87b30d98a55b7e3d987683589@xxxxxxxxx>
<aDQkLcfeu8zw8CJ_@xxxxxxxxxxxxxxxxxxxxx>
<552f550315dc503250cc61fdcd13db38c1ea00f5@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <552f550315dc503250cc61fdcd13db38c1ea00f5@xxxxxxxxx>
Sender: Russell King (Oracle) <linux@xxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Mon, May 26, 2025 at 08:52:12AM +0000, Yajun Deng wrote:
> May 26, 2025 at 4:19 PM, "Russell King (Oracle)" <linux@xxxxxxxxxxxxxxx> wrote:
> > On Mon, May 26, 2025 at 08:11:21AM +0000, Yajun Deng wrote:
> > > $ ls /sys/class/net/eth0/phydev/c45_phy_ids
> > >
> > > mmd10_device_id mmd17_device_id mmd23_device_id mmd2_device_id mmd7_device_id
> > >
> > > mmd11_device_id mmd18_device_id mmd24_device_id mmd30_device_id mmd8_device_id
> > >
> > > mmd12_device_id mmd19_device_id mmd25_device_id mmd31_device_id mmd9_device_id
> > >
> > > mmd13_device_id mmd1_device_id mmd26_device_id mmd3_device_id
> > >
> > > mmd14_device_id mmd20_device_id mmd27_device_id mmd4_device_id
> > >
> > > mmd15_device_id mmd21_device_id mmd28_device_id mmd5_device_id
> > >
> > > mmd16_device_id mmd22_device_id mmd29_device_id mmd6_device_id
> > >
> >
> > I suspect you don't have a PHY that defines all these IDs. Are you sure
> >
> > your .is_visible() is working properly?
> >
>
> I'm just determining if it's a c45 device and not filtering PHY ID content now.
> I can add this condition.
I'm talking about listing all 31 entries, whether they're implemented in
the PHY or not. Look at mmds_present in struct phy_c45_device_ids to
determine which IDs should be exported as well as checking whether the
ID value you're exporting is not 0 or ~0.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
Return-Path: <linux-kernel+bounces-665494-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 90EB641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:09:06 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id F20CA1BC5821
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:09:18 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id E9D6F286436;
Wed, 28 May 2025 13:08:57 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Np/WK2Ga"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2C5B128369F;
Wed, 28 May 2025 13:08:56 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748437737; cv=none; b=lQ4KZs8O3ptj1ct36tj4ROOQf682PD86cUSsclEL2e1jB/fxSdRO2FzQiKsDmBD1fMjIK6/R4fGS4A5SZbJjkfx3Sx6qxD/n6KRQoTrpyqwFhsnd/5qF/0UvnYhYIcd2a9RaoLO4VvuWtDaESb01Z1g5SgcEKvtMgO21sFd6GWk=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748437737; c=relaxed/simple;
bh=Mk5F2XnA3g8hN7duqFGxmuou7OdhCtgoPWCpS5amOi8=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=vGJn+H2HvtYFJkZ6/ytZ1Qa/+nachhziUJ05vhJQF91rkUFvgAWE5bKqYV5x0mwZn8kMTjkryxcN5b9pidtiM63IINs70Y2PPzRRSJ9Hg3fZBRcftqcRV7SI2BUg01avMzY2MalOT0VRnze2l0BuGtKJ6AdyjA3bLFOQ4evAB/4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Np/WK2Ga; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 143D5C4CEE7;
Wed, 28 May 2025 13:08:55 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748437736;
bh=Mk5F2XnA3g8hN7duqFGxmuou7OdhCtgoPWCpS5amOi8=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=Np/WK2GabatE2gne2mHHy4kvHMSkTY5j9zZW/VAFLl5C8mOQIBcZGfgdrkdVt4DI9
akDQqxkSnZvD8qEg/4i4P5w/B3uk4xXgDuE35ML1BL+TCD/rQb98JapJKaoMsiwHu4
7Q20Rw/ilgKfg/kds48n+6mBq7in2AOCKkChq0LoTkwbmGtdQ+KOuT20jvu1lD4OMr
9BJ/wyWuhoHwjIHdUQ91HPlGrhJu5s7Mr6FgIt01rIALediM07eAuP5NYJPXWMOjnL
HNHE/5wMfsIOuswUJIImO1b3YggxEd/KjU7O2msmrw7iCLJXf14scVavqoc8mh2Fxm
s/ClZMgtHWDaA==
Date: Wed, 28 May 2025 10:08:53 -0300
From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
To: Leo Yan <leo.yan@xxxxxxx>
Cc: Namhyung Kim <namhyung@xxxxxxxxxx>, Ian Rogers <irogers@xxxxxxxxxx>,
Adrian Hunter <adrian.hunter@xxxxxxxxx>,
"Liang, Kan" <kan.liang@xxxxxxxxxxxxxxx>,
James Clark <james.clark@xxxxxxxxxx>,
linux-perf-users@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH] perf tests switch-tracking: Fix timestamp comparison
Message-ID: <aDcK5arEEsccWsJC@x1>
References: <20250331172759.115604-1-leo.yan@xxxxxxx>
<aC_Vn95vYqcXul03@x1>
<aC_WFRe_4HjVPUrM@x1>
<20250523081036.GB2566836@xxxxxxxxxxxxxxx>
<aDCsmjb7Fex1ccOW@x1>
<20250527094924.GF2566836@xxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250527094924.GF2566836@xxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 10:49:24AM +0100, Leo Yan wrote:
> On Fri, May 23, 2025 at 02:12:58PM -0300, Arnaldo Carvalho de Melo wrote:
> [...]
> > Thanks for the extra info, I'll add it to the commit log message, and
> > perhaps we could make this test exclusive and use stress-ng to generate
> > some background noise in the form of a good number of processes, see:
> > root@x1:~# stress-ng --switch $(($(nproc) * 2)) --timeout 30s & for a in $(seq 50) ; do perf test switch ; done
> Thanks for sharing the test command.
>
> > Now with your patch it also fails, so its for another reason:
> > --- start ---
> > test child forked, pid 1777071
> > Using CPUID GenuineIntel-6-BA-3
> > mmap size 528384B
> > 45221 events recorded
> > Missing comm events
> > ---- end(-1) ----
> > 113: Track with sched_switch : FAILED!
> >
> > Lots of short lived processes makes it fail as well :-\
> I searched internal CI record, we also occasionally saw the error:
> Missing cycles events
> I will find time to check if anything in test can be improved. Seems
> to me, the test is fragile if system has background activities.
Great!
> > Your patch is correct, so I'll probably just add your comments and go
> > with it.
> Thanks! Also thanks Ian's suggestion for the iteration command.
You're welcome, thanks for your work on improving perf, really
appreciated!
- Arnaldo
Return-Path: <linux-kernel+bounces-665495-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 10B3C41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:09:29 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 0D1C81BC54EC
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:09:42 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 7D423286884;
Wed, 28 May 2025 13:09:21 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=lunn.ch header.i=@lunn.ch header.b="04EQCtkq"
Received: from vps0.lunn.ch (vps0.lunn.ch [156.67.10.101])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 288B6279903;
Wed, 28 May 2025 13:09:17 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=156.67.10.101
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748437760; cv=none; b=oxOK0nll/OwtIDanBHWssScsQYqxvQQ+NO1Zzl9R57mED/6a834GrHLOEdxt0fDNO+DJWwscVM+v/oznjsJYxVq8S5I2ljy4eFtrbNe7ACC6n9lFgvUtp+erGzi6yNZpXUTT/xy46zwfxl0/8wySoxZxA79VaDTfxwe2MRsvYoo=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748437760; c=relaxed/simple;
bh=3prwoC0crX/v6y6Rwo4FYGS2OLUSUM0Y8higC18BW1k=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=XuNJwwul3cyRCKXwdXAFSaD/sgj00yxdgqjNBEhLMcowlKQwk8oHo7sGyBWeOG/XrVHbqkH6+Pw9newxIpESp2ispoDnU0pvjxXrxlv/vHmJqJAPSWxIKVmTkTcnGCfGTpY/1ASBbXJY9Zdc4XA2/v6Xuql2ACrPhZu8sw4z1ig=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=lunn.ch; spf=pass smtp.mailfrom=lunn.ch; dkim=pass (1024-bit key) header.d=lunn.ch header.i=@lunn.ch header.b=04EQCtkq; arc=none smtp.client-ip=156.67.10.101
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=lunn.ch
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=lunn.ch
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lunn.ch;
s=20171124; h=In-Reply-To:Content-Disposition:Content-Type:MIME-Version:
References:Message-ID:Subject:Cc:To:From:Date:From:Sender:Reply-To:Subject:
Date:Message-ID:To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:
Content-ID:Content-Description:Content-Disposition:In-Reply-To:References;
bh=ZV21XWo54z3BlML2GgcnFBxYilTl6UY75ewquPky//0=; b=04EQCtkqm1WGgwmHxnkzaZVswO
YWaYfyUBEy3FlMgziPdZR/K/J827iN6UiI5z7CLCw/osQIXDF6Em8y0ApXmUIb3i4glqqbe2IxV4S
FekvfBg5UTXIa/wAbIJglu+DaVebiqoyYB1nYhIcw1UKe5xK65NuJYXfGtj6NrpyltAM=;
Received: from andrew by vps0.lunn.ch with local (Exim 4.94.2)
(envelope-from <andrew@xxxxxxx>)
id 1uKGWs-00EB2C-6J; Wed, 28 May 2025 15:09:10 +0200
Date: Wed, 28 May 2025 15:09:10 +0200
From: Andrew Lunn <andrew@xxxxxxx>
To: Quentin Schulz <quentin.schulz@xxxxxxxxx>
Cc: Jakob Unterwurzacher <jakobunt@xxxxxxxxx>, foss+kernel@xxxxxxxxx,
conor+dt@xxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx, heiko@xxxxxxxxx,
jakob.unterwurzacher@xxxxxxxxx, krzk+dt@xxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-rockchip@xxxxxxxxxxxxxxxxxxx, robh@xxxxxxxxxx,
Kever Yang <kever.yang@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v2] arm64: dts: rockchip: support Ethernet Switch adapter
for RK3588 Jaguar
Message-ID: <3303d8d4-ec5a-4cdc-8391-ab6e35d76b33@xxxxxxx>
References: <20250523-jaguar-mezz-eth-switch-v2-1-aced8bf6612d@xxxxxxxxx>
<20250527131142.1100673-1-jakob.unterwurzacher@xxxxxxxxx>
<35e0a925-4cba-41de-8fe4-4dd10e8816f1@xxxxxxx>
<380ba32b-bb9a-411e-8006-127461cac08a@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <380ba32b-bb9a-411e-8006-127461cac08a@xxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 09:56:51AM +0200, Quentin Schulz wrote:
> Hi Andrew,
>
> On 5/27/25 6:18 PM, Andrew Lunn wrote:
> > On Tue, May 27, 2025 at 03:11:42PM +0200, Jakob Unterwurzacher wrote:
> > > > @Jakob, is this something you could check? devmem2 0xfd58c31c w 0x3c0000
> > > > should do the trick to disable the circuitry according to the TRM?
> > >
> > > I measured TXCLK vs TXD3 on an oscilloscope on gmac1:
> > >
> > > Setting Decimal Actual TXCLK delay (ps)
> > > 00 0 47
> > > 0a 10 283
> > > 10 16 440
> > > 20 32 893
> > > 30 48 1385
> > > 40 64 1913
> > > 50 80 2514
> > > 60 96 3077
> > > 70 112 3565
> > > 7f 127 4009
> > >
> > > off x -315
> > >
> > > Setting = tx_delay (hex)
> > > Decimal = tx_delay (dec)
> > > Actual TXCLK delay (ps) = Measurement from oscilloscope
> > >
> > > Plotting this we can deduce that one tx_delay unit is about 31ps.
> >
> > Nice to see somebody actually do the measurements. Based on this, it
> > would be good to implement:
> >
> > tx-internal-delay-ps:
> > description:
> > RGMII Transmit Clock Delay defined in pico seconds. This is used for
> > controllers that have configurable TX internal delays. If this
> > property is present then the MAC applies the TX delay.
> >
> > For the moment, please limit it to just the device you measured it on.
> >
>
> What exactly do you mean with "limit it to just the device you measured it
> on"?
Nobody seems to know if rx_delay & tx_delay operate the same across
the whole range of SoCs. I don't particularly care if these properties
are difference between SoC, they are vendor properties, with
undocumented magic values. However 'tx-internal-delay-ps' is
standardised, and has a very clear meaning. I don't want it used
unless somebody has performed a measurement and we know that 2000
produces a 2ns delay.
> I'll need to implement reading the delay from the stmmac driver to use this
> property, do I need to restrict reading this property to the SoC we tested
> (RK3588)?
Yes, please only allow it to be used on RK3588, and any other SoC you
can test and verify its behaviour.
> I assume you're then expecting tx-internal-delay-ps only on this new DTSO's
> gmac1?
I would like rx_delay and tx_delay to be marked deprecated, with the
end goal they are no longer used, the standard properties take there
place. But to get there, we need more measurements from real hardware,
or some other way to be sure what we have the correct delay.
> Would you still want rx_delay/tx_delay to be set to 0x00? Maybe only
> rx_delay since we won't have a companion rx-internal-delay-ps for now (until
> someone from Rockchip answers :); adding Kever back to the Cc for that)? Or
> should I remove both of them?
rx-internal-delay-ps and rx_delay should be mutually exclusive. If
both are present -EINVAL. We have to keep supporting rx_delay for
rk3588 otherwise we break backwards compatibility, but ideally no more
instances of it should be added once rx-internal-delay-ps is added.
Andrew
Return-Path: <linux-kernel+bounces-665496-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E78B841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:10:14 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id E5FC81BC6081
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:10:27 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 26E5C286884;
Wed, 28 May 2025 13:10:06 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="ugVpcmlI"
Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.41])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 88996279903
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:10:02 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.41
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748437804; cv=none; b=Q0ed7hYNpGrzso0hL/fXn+ArNafP7bE8HRQCSiLXx1U1c2akLb1PYgfdsdGXQ6lZhomoOVQMJJJYEPEeGDXaob/pFDrr7csBHbKX3AMnvzsLX16Hx4+JOf3ln1sStC7UMW7bFH29PTUF1m5mBHsUDLMsLHK86DEFADfp4UDfvNM=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748437804; c=relaxed/simple;
bh=7TPZwdIPwmw4UR6wtL6uqEsrSOMS8c3M8ouvk93pX7k=;
h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References:
In-Reply-To:Content-Type; b=IQFpmuH5FrRbI1oSV5aSx4co7encId6oRjeJJ8GDijHj2u7g7+GjCkx+WcchA3qpRcqYWYm5/JZqcO991PBk92QbKu+vFAsapyZHAG+oLoKINkXzBjZmQDTthgk1DKeM+oo8mcC/1JL1HJltowO7zgOjIpAVOFDniR01tVzzmmU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=ugVpcmlI; arc=none smtp.client-ip=209.85.218.41
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org
Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-ad1b94382b8so763168366b.0
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 06:10:02 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=linaro.org; s=google; t=1748437801; x=1749042601; darn=vger.kernel.org;
h=content-transfer-encoding:in-reply-to:content-language:references
:cc:to:from:subject:user-agent:mime-version:date:message-id:from:to
:cc:subject:date:message-id:reply-to;
bh=z9+xHaxKhbPsEc6xOO5pfmbbYaY7x26j+ttvRrojUuE=;
b=ugVpcmlIXRsnM4PG+/0Gcz9ASEURkUx99KyqAStF3mrI0+hxIMyH+W+0yTlAlhp28a
YHNqqeHEZcW4blvlgUZ8knoUZ0vNtinJHbzVGTErlogt2c8Ys++v6FMGVSI7BwZ+s6xu
ThvfU0QUhpNIq3OKXk+tFRWvI4k5Sj69yYgkjvu4cLy56MYc6UUpd+fp5Oa8nO6YvRgP
ojmmrYL74gpb46OYSnI6dinEIjNgU3TiUN6+IahUSXTLYI9jnPV5TRgk9fbK0KHopohN
T0HrBHsD2oP48dA8OSWhYpmowpfeXSYwFKRxwI4qzii/Mil51xh2xkO9TTbTekdIhVlz
jJgw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748437801; x=1749042601;
h=content-transfer-encoding:in-reply-to:content-language:references
:cc:to:from:subject:user-agent:mime-version:date:message-id
:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
bh=z9+xHaxKhbPsEc6xOO5pfmbbYaY7x26j+ttvRrojUuE=;
b=JW9bw3Ftt7FQ/w9fGoHS9Wzx7pdGBVx+G5exFdUgI7dc7YCTs4XH/EhTRpLRveqHN3
6Xa2BNevF8OraoOrjDT2XRS2mvXB38XmBjvb07PNx3rGET3dk/QRdCurRlTlpYe7zwjr
3vftrm27iKEWF40vtdfEtZVrQYpznJ/VDWcFJiycQ0ddLeW7hwBYyYzQPDzsOYoK+LV6
PKZ2nQev0cijG7fN0/Vw5utOM3pJqkKqEcq+ilhrKNBdfzEFT0MDayJbnODKxEuf/OqS
LUqtU0LFeoivh/eYloBU1UxMjrWIs5+dlQak1PIb1r3+MgYkSFYL6nifeL2SMs3+U6VA
h0eQ==
X-Forwarded-Encrypted: i=1; AJvYcCXLRTMPISWrC9yNEE4bm7MmIptHIauscTU0aFVjzuQVGP1voHGPF6PgMhpTA6bZyX8T+Ie2CtefiiNmbHA=@vger.kernel.org
X-Gm-Message-State: AOJu0Yy2TB570++K1D66vzaCE17ILLXbtaeeIrGDtWfVqv3wWwPe9Qhz
fxFfHrnoYP28Ka4veryBwttWRNjtut8c+7TTxirhITpVP4OhKbtRfEUvudst6Lbtmdc=
X-Gm-Gg: ASbGncsrvQqtrMydHbD165vNMil37qPlDW7LpHqhzhrs7RMC7/wAWglP2P9Mj4GssnB
pMPrF279QUxoFt2Ky+ck6OlJ949nF/EuQMszke4DE93RKtkP/YhXWJo3HbMT2+xHPkmiJKBZpDR
pfyJsX613Y3hCyYfqFOddYu2G9fIEf0VUAPP62N5qszcGNytk5j/sNJURx3D0ZRWyXjfmjfJU4b
m0TvS/SM1l9FyRGrINtS2AMGLiVEXGo8d79oh0AvX/GutLQ1Q5tdGA3Ilqr5WnUDuA0NGF3hb2x
S8hPdq/0Iy6t807KgCq6eRsNFOAFjCIroMoEL2Fjs1QcJZS3enctuW/gy18=
X-Google-Smtp-Source: AGHT+IF8B/2tTVv6HqhSsoLN2fJLeFE0SP+vAc3O6/hAnJNPKIqcmwJjUw3s8noqz2W7TfqWl20+fw==
X-Received: by 2002:a17:907:9616:b0:ad2:2e5c:89c5 with SMTP id a640c23a62f3a-ad85b13879amr1623882266b.20.1748437800581;
Wed, 28 May 2025 06:10:00 -0700 (PDT)
Received: from [192.168.0.14] ([79.115.63.75])
by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad8a1b5bd07sm105387766b.176.2025.05.28.06.09.59
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 06:10:00 -0700 (PDT)
Message-ID: <30da0c82-ef21-4089-b71c-8444314035e0@xxxxxxxxxx>
Date: Wed, 28 May 2025 14:09:58 +0100
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 24/25] PCI: Perform reset_resource() and build fail list
in sync
From: Tudor Ambarus <tudor.ambarus@xxxxxxxxxx>
To: =?UTF-8?Q?Ilpo_J=C3=A4rvinen?= <ilpo.jarvinen@xxxxxxxxxxxxxxx>
Cc: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>, linux-pci@xxxxxxxxxxxxxxx,
=?UTF-8?Q?Micha=C5=82_Winiarski?= <michal.winiarski@xxxxxxxxx>,
Igor Mammedov <imammedo@xxxxxxxxxx>, LKML <linux-kernel@xxxxxxxxxxxxxxx>,
Mika Westerberg <mika.westerberg@xxxxxxxxxxxxxxx>,
William McVicker <willmcvicker@xxxxxxxxxx>
References: <20241216175632.4175-1-ilpo.jarvinen@xxxxxxxxxxxxxxx>
<20241216175632.4175-25-ilpo.jarvinen@xxxxxxxxxxxxxxx>
<5f103643-5e1c-43c6-b8fe-9617d3b5447c@xxxxxxxxxx>
<8f281667-b4ef-9385-868f-93893b9d6611@xxxxxxxxxxxxxxx>
<3a47fc82-dc21-46c3-873d-68e713304af3@xxxxxxxxxx>
<6e4b340b-a239-4550-b091-139c3724a54c@xxxxxxxxxx>
Content-Language: en-US
In-Reply-To: <6e4b340b-a239-4550-b091-139c3724a54c@xxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 5/28/25 12:39 PM, Tudor Ambarus wrote:
>
>
> On 5/28/25 12:22 PM, Tudor Ambarus wrote:
>>
>> On 5/6/25 4:53 PM, Ilpo Järvinen wrote:
>>> On Tue, 6 May 2025, Tudor Ambarus wrote:
>>>
>>>> Hi!
>>>>
>>>> On 12/16/24 5:56 PM, Ilpo Järvinen wrote:
>>>>> Resetting resource is problematic as it prevent attempting to allocate
>>>>> the resource later, unless something in between restores the resource.
>>>>> Similarly, if fail_head does not contain all resources that were reset,
>>>>> those resource cannot be restored later.
>>>>>
>>>>> The entire reset/restore cycle adds complexity and leaving resources
>>>>> into reseted state causes issues to other code such as for checks done
>>>>> in pci_enable_resources(). Take a small step towards not resetting
>>>>> resources by delaying reset until the end of resource assignment and
>>>>> build failure list (fail_head) in sync with the reset to avoid leaving
>>>>> behind resources that cannot be restored (for the case where the caller
>>>>> provides fail_head in the first place to allow restore somewhere in the
>>>>> callchain, as is not all callers pass non-NULL fail_head).
>>>>>
>>>>> The Expansion ROM check is temporarily left in place while building the
>>>>> failure list until the upcoming change which reworks optional resource
>>>>> handling.
>>>>>
>>>>> Ideally, whole resource reset could be removed but doing that in a big
>>>>> step would make the impact non-tractable due to complexity of all
>>>>> related code.
>>>>>
>>>>> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@xxxxxxxxxxxxxxx>
>>>> I'm hitting the BUG_ON(!list_empty(&add_list)); in
>>>> pci_assign_unassigned_bus_resources() [1] with 6.15-rc5 and the the
>>>> pixel6 downstream pcie driver.
>>>>
>>>> I saw the thread where "a34d74877c66 PCI: Restore assigned resources
>>>> fully after release" fixes things for some other cases, but it's not the
>>>> case here.
>>>>
>>>> Reverting the following patches fixes the problem:
>>>> a34d74877c66 PCI: Restore assigned resources fully after release
>>>> 2499f5348431 PCI: Rework optional resource handling
>>>> 96336ec70264 PCI: Perform reset_resource() and build fail list in sync
>>> So it's confirmed that you needed to revert also this last commit
>>> 96336ec70264, not just the rework change?
>> I needed to revert 96336ec70264 as well otherwise the build fails.
>>>> In the working case the add_list list is empty throughout the entire
>>>> body of pci_assign_unassigned_bus_resources().
>>>>
>>>> In the failing case __pci_bus_size_bridges() leaves the add_list not
>>>> empty and __pci_bus_assign_resources() does not consume the list, thus
>>>> the BUG_ON. The failing case contains an extra print that's not shown
>>>> when reverting the blamed commits:
>>>> [ 13.951185][ T1101] pcieport 0000:00:00.0: bridge window [mem
>>>> 0x00100000-0x001fffff] to [bus 01-ff] add_size 100000 add_align 100000
>>>>
>>>> I've added some prints trying to describe the code path, see
>>>> https://paste.ofcode.org/Aeu2YBpLztc49ZDw3uUJmd#
>>>>
>>>> Failing case:
>>>> [ 13.944231][ T1101] pci 0000:01:00.0: [144d:a5a5] type 00 class
>>>> 0x000000 PCIe Endpoint
>>>> [ 13.944412][ T1101] pci 0000:01:00.0: BAR 0 [mem
>>>> 0x00000000-0x000fffff 64bit]
>>>> [ 13.944532][ T1101] pci 0000:01:00.0: ROM [mem 0x00000000-0x0000ffff
>>>> pref]
>>>> [ 13.944649][ T1101] pci 0000:01:00.0: enabling Extended Tags
>>>> [ 13.944844][ T1101] pci 0000:01:00.0: PME# supported from D0 D3hot D3cold
>>>> [ 13.945015][ T1101] pci 0000:01:00.0: 15.752 Gb/s available PCIe
>>>> bandwidth, limited by 8.0 GT/s PCIe x2 link at 0000:00:00.0 (capable of
>>>> 31.506 Gb/s with 16.0 GT/s PCIe x2 link)
>>>> [ 13.950616][ T1101] __pci_bus_size_bridges: before pbus_size_mem.
>>>> list empty? 1
>>>> [ 13.950784][ T1101] pbus_size_mem: 2. list empty? 1
>>>> [ 13.950886][ T1101] pbus_size_mem: 1 list empty? 0
>>>> [ 13.950982][ T1101] pbus_size_mem: 3. list empty? 0
>>>> [ 13.951082][ T1101] pbus_size_mem: 4. list empty? 0
>>>> [ 13.951185][ T1101] pcieport 0000:00:00.0: bridge window [mem
>>>> 0x00100000-0x001fffff] to [bus 01-ff] add_size 100000 add_align 100000
>>>> [ 13.951448][ T1101] __pci_bus_size_bridges: after pbus_size_mem. list
>>>> empty? 0
>>>> [ 13.951643][ T1101] pci_assign_unassigned_bus_resources: before
>>>> __pci_bus_assign_resources -> list empty? 0
>>>> [ 13.951924][ T1101] pcieport 0000:00:00.0: bridge window [mem
>>>> 0x40000000-0x401fffff]: assigned
>>>> [ 13.952248][ T1101] pci_assign_unassigned_bus_resources: after
>>>> __pci_bus_assign_resources -> list empty? 0
>>>> [ 13.952634][ T1101] ------------[ cut here ]------------
>>>> [ 13.952818][ T1101] kernel BUG at drivers/pci/setup-bus.c:2514!
>>>> [ 13.953045][ T1101] Internal error: Oops - BUG: 00000000f2000800 [#1]
>>>> SMP
>>>> ...
>>>> [ 13.976086][ T1101] Call trace:
>>>> [ 13.976206][ T1101] pci_assign_unassigned_bus_resources+0x110/0x114 (P)
>>>> [ 13.976462][ T1101] pci_rescan_bus+0x28/0x48
>>>> [ 13.976628][ T1101] exynos_pcie_rc_poweron
>>>>
>>>> Working case:
>>>> [ 13.786961][ T1120] pci 0000:01:00.0: [144d:a5a5] type 00 class
>>>> 0x000000 PCIe Endpoint
>>>> [ 13.787136][ T1120] pci 0000:01:00.0: BAR 0 [mem
>>>> 0x00000000-0x000fffff 64bit]
>>>> [ 13.787280][ T1120] pci 0000:01:00.0: ROM [mem 0x00000000-0x0000ffff
>>>> pref]
>>>> [ 13.787541][ T1120] pci 0000:01:00.0: enabling Extended Tags
>>>> [ 13.787808][ T1120] pci 0000:01:00.0: PME# supported from D0 D3hot D3cold
>>>> [ 13.787988][ T1120] pci 0000:01:00.0: 15.752 Gb/s available PCIe
>>>> bandwidth, limited by 8.0 GT/s PCIe x2 link at 0000:00:00.0 (capable of
>>>> 31.506 Gb/s with 16.0 GT/s PCIe x2 link)
>>>> [ 13.795279][ T1120] __pci_bus_size_bridges: before pbus_size_mem.
>>>> list empty? 1
>>>> [ 13.795408][ T1120] pbus_size_mem: 2. list empty? 1
>>>> [ 13.795495][ T1120] pbus_size_mem: 2. list empty? 1
>>>> [ 13.795577][ T1120] __pci_bus_size_bridges: after pbus_size_mem. list
>>>> empty? 1
>>>> [ 13.795692][ T1120] pci_assign_unassigned_bus_resources: before
>>>> __pci_bus_assign_resources -> list empty? 1
>>>> [ 13.795849][ T1120] pcieport 0000:00:00.0: bridge window [mem
>>>> 0x40000000-0x401fffff]: assigned
>>>> [ 13.796072][ T1120] pci_assign_unassigned_bus_resources: after
>>>> __pci_bus_assign_resources -> list empty? 1
>>>> [ 13.796662][ T1120] cpif: s5100_poweron_pcie: DBG: MSI sfr not set
>>>> up, yet(s5100_pdev is NULL)
>>>> [ 13.796666][ T1120] cpif: register_pcie: s51xx_pcie_init start
>>>>
>>>>
>>>> Any hints are welcomed. Thanks,
>>>> ta
>>> Hi and thanks for the report.
>> Hi! Thanks for the help. I've been out of office for the last 2 weeks,
>> sorry for the delayed reply.
>>
>>> The interesting part occurs inside reassign_resources_sorted() where most
>>> items are eliminated from realloc_head by the list_del().
>>>
>>> My guess is that somehow, the change in 96336ec70264 from !res->flags
>>> to the more complicated check somehow causes this. If the new check
>>> doesn't match and subsequently, no match is found from the head list, the
>>> loop will do continue and not remove the entry from realloc_head.
>> I added a print right there and it seems it's something else. See below.
>>> But it's hard to confirm without knowing what that resources realloc_head
>>> contains. Perhaps if you print the resources that are processed around
>>> that part of the code in reassign_resources_sorted(), comparing the log
>>> from the reverted code with the non-working case might help to understand
>>> what is different there and why. To understand better what is in the head
>>> list, it would be also useful to know from which device the resources were
>>> added into the head list in pdev_sort_resources().
>>>
>> I added the suggested prints
>> (https://paste.ofcode.org/DgmZGGgS6D36nWEzmfCqMm) on top of v6.15 with
>> the downstream PCIe pixel driver and I obtain the following. Note that
>> all added prints contain "tudor" for differentiation.
>>
>> [ 15.211179][ T1107] pci 0001:01:00.0: [144d:a5a5] type 00 class
>> 0x000000 PCIe Endpoint
>> [ 15.212248][ T1107] pci 0001:01:00.0: BAR 0 [mem
>> 0x00000000-0x000fffff 64bit]
>> [ 15.212775][ T1107] pci 0001:01:00.0: ROM [mem 0x00000000-0x0000ffff
>> pref]
>> [ 15.213195][ T1107] pci 0001:01:00.0: enabling Extended Tags
>> [ 15.213720][ T1107] pci 0001:01:00.0: PME# supported from D0 D3hot
>> D3cold
>> [ 15.214035][ T1107] pci 0001:01:00.0: 15.752 Gb/s available PCIe
>> bandwidth, limited by 8.0 GT/s PCIe x2 link at 0001:00:00.0 (capable of
>> 31.506 Gb/s with 16.0 GT/s PCIe x2 link)
>> [ 15.222286][ T1107] pci 0001:01:00.0: tudor: 1: pbus_size_mem: BAR 0
>> [mem 0x00000000-0x000fffff 64bit] list empty? 1
>> [ 15.222813][ T1107] pci 0001:01:00.0: tudor: 1: pbus_size_mem: ROM
>> [mem 0x00000000-0x0000ffff pref] list empty? 1
>> [ 15.224429][ T1107] pci 0001:01:00.0: tudor: 2: pbus_size_mem: ROM
>> [mem 0x00000000-0x0000ffff pref] list empty? 0
>> [ 15.224750][ T1107] pcieport 0001:00:00.0: bridge window [mem
>> 0x00100000-0x001fffff] to [bus 01-ff] add_size 100000 add_align 100000
>>
>> [ 15.225393][ T1107] tudor : pci_assign_unassigned_bus_resources:
>> before __pci_bus_assign_resources -> list empty? 0
>> [ 15.225594][ T1107] pcieport 0001:00:00.0: tudor:
>> pdev_sort_resources: bridge window [mem 0x00100000-0x001fffff] resource
>> added in head list
>> [ 15.226078][ T1107] pcieport 0001:00:00.0: bridge window [mem
>> 0x40000000-0x401fffff]: assigned
>> [ 15.226419][ T1107] tudor : pci_assign_unassigned_bus_resources:
>> after __pci_bus_assign_resources -> list empty? 0
>> [ 15.226442][ T1107] ------------[ cut here ]------------
>> [ 15.227587][ T1107] kernel BUG at drivers/pci/setup-bus.c:2522!
>> [ 15.227813][ T1107] Internal error: Oops - BUG: 00000000f2000800 [#1]
>> SMP
>> ...
>> [ 15.251570][ T1107] Call trace:
>> [ 15.251690][ T1107] pci_assign_unassigned_bus_resources+0x110/0x114 (P)
>> [ 15.251945][ T1107] pci_rescan_bus+0x28/0x48
>>
>> I obtain the following output when using the same prints adapted
>> (https://paste.ofcode.org/37w7RnKkPaCxyNhi5yhZPbZ) and with the blamed
>> commits reverted:
>> a34d74877c66 PCI: Restore assigned resources fully after release
>> 2499f5348431 PCI: Rework optional resource handling
>> 96336ec70264 PCI: Perform reset_resource() and build fail list in sync
>>
>> [ 15.200456][ T1102] pci 0000:01:00.0: [144d:a5a5] type 00 class
>> 0x000000 PCIe Endpoint
>> [ 15.200632][ T1102] pci 0000:01:00.0: BAR 0 [mem
>> 0x00000000-0x000fffff 64bit]
>> [ 15.200755][ T1102] pci 0000:01:00.0: ROM [mem 0x00000000-0x0000ffff
>> pref]
>> [ 15.200876][ T1102] pci 0000:01:00.0: enabling Extended Tags
>> [ 15.201075][ T1102] pci 0000:01:00.0: PME# supported from D0 D3hot D3cold
>> [ 15.201254][ T1102] pci 0000:01:00.0: 15.752 Gb/s available PCIe
>> bandwidth, limited by 8.0 GT/s PCIe x2 link at 0000:00:00.0 (capable of
>> 31.506 Gb/s with 16.0 GT/s PCIe x2 link)
>> [ 15.206555][ T1102] pci 0000:01:00.0: tudor: 1: pbus_size_mem: BAR 0
>> [mem 0x00000000-0x000fffff 64bit] list empty? 1
>> [ 15.206737][ T1102] pci 0000:01:00.0: tudor: 1: pbus_size_mem: ROM
>> [mem 0x00000000-0x0000ffff pref] list empty? 1
>> [ 15.206901][ T1102] tudor : pci_assign_unassigned_bus_resources:
>> before __pci_bus_assign_resources -> list empty? 1
>> [ 15.207072][ T1102] pcieport 0000:00:00.0: tudor:
>> pdev_sort_resources: bridge window [mem 0x00100000-0x002fffff] resource
>> added in head list
>> [ 15.207396][ T1102] pcieport 0000:00:00.0: bridge window [mem
>> 0x40000000-0x401fffff]: assigned
>> [ 15.208165][ T1102] tudor : pci_assign_unassigned_bus_resources:
>> after __pci_bus_assign_resources -> list empty? 1
>> [ 15.208783][ T1102] cpif: s5100_poweron_pcie: DBG: MSI sfr not set
>> up, yet(s5100_pdev is NULL)
>> [ 15.208786][ T1102] cpif: register_pcie: s51xx_pcie_init start
>
> I see my email client split the lines for the prints making the output
> very hard to read. Added the output here too:
> https://paste.ofcode.org/AEfjASQW8Z2jbMak5VkmpJ
With the following change things get back to how they were before
2499f5348431:
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index 5247370010aa..1589dd8afa69 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -1214,9 +1214,10 @@ static int pbus_size_mem(struct pci_bus *bus,
unsigned long mask,
__func__, r_name, r, list_empty(realloc_head));
/* Put SRIOV requested res to the optional list */
- if (realloc_head && pci_resource_is_optional(dev, i)) {
+ if (realloc_head && pci_resource_is_iov(i)) {
add_align = max(pci_resource_alignment(dev, r), add_align);
- add_to_list(realloc_head, dev, r, 0, 0 /* Don't care */);
+ resource_set_size(r, 0);
+ add_to_list(realloc_head, dev, r, r_size, 0 /* Don't care */);
children_add_size += r_size;
pci_info(dev, "tudor: 2: %s: %s %pR list empty? %d\n",
__func__, r_name, r, list_empty(realloc_head));
--
2.49.0.1238.gf8c92423fb-goog
Return-Path: <linux-kernel+bounces-665497-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 55ECF41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:10:34 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id B5BA44E28E8
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:10:34 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id E3E0128689A;
Wed, 28 May 2025 13:10:23 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=marvell.com header.i=@marvell.com header.b="FZVJWZNx"
Received: from mx0a-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id ADFAB28642F;
Wed, 28 May 2025 13:10:20 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=67.231.148.174
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748437822; cv=none; b=Ppb8GlNHqumfA0kOHPR9szCUWZ1fF+MuelUh8dLR1Uq3HRF6ZagNNIFNw6xeNa27DKAlbiPtVjnriwqw5uJa2stFoeF/mkDiVEgXdhQquKU0ecu2cqULRmvSXpiVavXVWepaa3HNR1VjHpkh/An9h3VFXRnvJhZakzu0vzowlYc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748437822; c=relaxed/simple;
bh=3//2x1aqktliMt3C7OKPxIAa3P4Rzdpq3q8YXamdG9s=;
h=Date:From:To:CC:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=JS52oamZpGW73qxsfYtrUUHC0SM4a+G2N9YOBDHDg23IKeWI+fuLrP0pViAet6BgYHrztbu8wmswcAkdw9uF2wu46WTBrvi2kv0yI/kYGhfnTZAslctaCa+6lXWRzOg/AgjgqLz3lYaP0ODzS+iAi9qs6NkFext73536CLCYjto=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=marvell.com; spf=pass smtp.mailfrom=marvell.com; dkim=pass (2048-bit key) header.d=marvell.com header.i=@marvell.com header.b=FZVJWZNx; arc=none smtp.client-ip=67.231.148.174
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=marvell.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=marvell.com
Received: from pps.filterd (m0431384.ppops.net [127.0.0.1])
by mx0a-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SCiolB005896;
Wed, 28 May 2025 06:09:44 -0700
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=
cc:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to; s=pfpt0220; bh=lhFFwHACWIeW/4ep5BhL9R3Wp
6JYUJNGPHcV8EAW4ro=; b=FZVJWZNx1k5Ry+wcedX0t7LEWZ6oG0S/JJrhPlbQX
krl7+d4j++obUfQqiT+zx+K1oIptoHlGb2rEAyO2jcxzvUWuKe4Ufdtt2EvEoxdI
XX7JjVd0io4MmcekL4RXIhrE4HQVHXW1Licp5nfcW1NeaQ6ETyldHk1HqgyNF1K8
3BhnpwEmTdSxzTDMbszAa0D6TKSo4OGsWxUrMzmnY0B8hXm5gnCPS0IpONgWxYQp
Qp+1EkWktCxOk3FPYvpHy9eOFiQBFpa33Ypk5dPmhvPAAq8DsB6XkPQRD2XCUA21
r6CGkrk3T72OKOjnGVDHGS/DfPKKv5+TTdaOKLNUYt5AA==
Received: from dc5-exch05.marvell.com ([199.233.59.128])
by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 46x2rkr2ug-2
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 06:09:44 -0700 (PDT)
Received: from DC5-EXCH05.marvell.com (10.69.176.209) by
DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
15.2.1544.4; Wed, 28 May 2025 06:09:40 -0700
Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH05.marvell.com
(10.69.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend
Transport; Wed, 28 May 2025 06:09:40 -0700
Received: from f50a6ab61f9a (unknown [10.193.66.37])
by maili.marvell.com (Postfix) with SMTP id 441653F7045;
Wed, 28 May 2025 06:09:34 -0700 (PDT)
Date: Wed, 28 May 2025 13:09:33 +0000
From: Subbaraya Sundeep <sbhatta@xxxxxxxxxxx>
To: "Gupta, Suraj" <Suraj.Gupta2@xxxxxxx>
CC: Sean Anderson <sean.anderson@xxxxxxxxx>,
"andrew+netdev@xxxxxxx"
<andrew+netdev@xxxxxxx>,
"davem@xxxxxxxxxxxxx" <davem@xxxxxxxxxxxxx>,
"edumazet@xxxxxxxxxx" <edumazet@xxxxxxxxxx>,
"kuba@xxxxxxxxxx"
<kuba@xxxxxxxxxx>,
"pabeni@xxxxxxxxxx" <pabeni@xxxxxxxxxx>,
"vkoul@xxxxxxxxxx" <vkoul@xxxxxxxxxx>,
"Simek, Michal"
<michal.simek@xxxxxxx>,
"Pandey, Radhey Shyam" <radhey.shyam.pandey@xxxxxxx>,
"horms@xxxxxxxxxx" <horms@xxxxxxxxxx>,
"netdev@xxxxxxxxxxxxxxx"
<netdev@xxxxxxxxxxxxxxx>,
"linux-arm-kernel@xxxxxxxxxxxxxxxxxxx"
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>,
"linux-kernel@xxxxxxxxxxxxxxx"
<linux-kernel@xxxxxxxxxxxxxxx>,
"git (AMD-Xilinx)" <git@xxxxxxx>,
"Katakam,
Harini" <harini.katakam@xxxxxxx>
Subject: Re: [PATCH net-next] net: xilinx: axienet: Configure and report
coalesce parameters in DMAengine flow
Message-ID: <aDcLDdKA2GNRIY3G@f50a6ab61f9a>
References: <20250525102217.1181104-1-suraj.gupta2@xxxxxxx>
<679d6810-9e76-425c-9d4e-d4b372928cc3@xxxxxxxxx>
<BL3PR12MB6571ABA490895FDB8225CAEBC967A@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <BL3PR12MB6571ABA490895FDB8225CAEBC967A@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDExNSBTYWx0ZWRfX6XRbvJ3Qdt9e mMPjkhiUIbUREw3clM21ckDVA+Bq6UwtCLBQwE4HZ+Kycg4VI4XAFmMMC7K9+m+GA9RRxn/GNT6 KGIRVrJK4d+HiEFevevglF1PRTu697xhCZY9esibIH6o6zpq1pk9qepkEvQTIvd6D4e1nvc9lLt
Cw7kQMXec/ACqZSbZKXEsr2eHtMu1uXPKZJF4HwJF8VZmCPSkiSa6eAGRwphqEP40SfJCXgio4N g5N/+fAsC3mxb//WsyUIdn16iCxlfs8NVTMLhuvwEUB4pc35M9Fxo0AOkFpK6DCrWUa2XsyzSUv 9KP3Oq/+uc++YA6I9D5Cnj6b6GQK2u4dpJf/X0u2LxFZKRALmAuk3vG9CdUOf0U4LKbI1iRP9pA
lxIvN8rngti42iDbo6BXv8jqaecDAcsfO1d7CzhTsXHIDY1u3l8avhiccTizflVBJ8TUFJ8T
X-Proofpoint-GUID: qPMMYTQBXYqk7OnWGy4VniD-WZ2prfLP
X-Authority-Analysis: v=2.4 cv=fvzcZE4f c=1 sm=1 tr=0 ts=68370b18 cx=c_pps a=rEv8fa4AjpPjGxpoe8rlIQ==:117 a=rEv8fa4AjpPjGxpoe8rlIQ==:17 a=kj9zAlcOel0A:10 a=dt9VzEwgFbYA:10 a=VwQbUJbxAAAA:8 a=zd2uoN0lAAAA:8 a=J1Y8HTJGAAAA:8 a=1XWaLZrsAAAA:8 a=20KFwNOVAAAA:8
a=JfrnYn6hAAAA:8 a=Phdkh1rV2inUpnr7k2QA:9 a=CjuIK1q_8ugA:10 a=y1Q9-5lHfBjTkpIzbSAN:22 a=1CNFftbPRP8L7MoqJWF3:22
X-Proofpoint-ORIG-GUID: qPMMYTQBXYqk7OnWGy4VniD-WZ2prfLP
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 2025-05-28 at 12:00:56, Gupta, Suraj (Suraj.Gupta2@xxxxxxx) wrote:
> [AMD Official Use Only - AMD Internal Distribution Only]
>
Fix your mail settings. Cannot be internal if posting to mailing list :)
Thanks,
Sundeep
> > -----Original Message-----
> > From: Sean Anderson <sean.anderson@xxxxxxxxx>
> > Sent: Tuesday, May 27, 2025 9:47 PM
> > To: Gupta, Suraj <Suraj.Gupta2@xxxxxxx>; andrew+netdev@xxxxxxx;
> > davem@xxxxxxxxxxxxx; edumazet@xxxxxxxxxx; kuba@xxxxxxxxxx;
> > pabeni@xxxxxxxxxx; vkoul@xxxxxxxxxx; Simek, Michal <michal.simek@xxxxxxx>;
> > Pandey, Radhey Shyam <radhey.shyam.pandey@xxxxxxx>; horms@xxxxxxxxxx
> > Cc: netdev@xxxxxxxxxxxxxxx; linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; linux-
> > kernel@xxxxxxxxxxxxxxx; git (AMD-Xilinx) <git@xxxxxxx>; Katakam, Harini
> > <harini.katakam@xxxxxxx>
> > Subject: Re: [PATCH net-next] net: xilinx: axienet: Configure and report coalesce
> > parameters in DMAengine flow
> >
> > Caution: This message originated from an External Source. Use proper caution
> > when opening attachments, clicking links, or responding.
> >
> >
> > On 5/25/25 06:22, Suraj Gupta wrote:
> > > Add support to configure / report interrupt coalesce count and delay
> > > via ethtool in DMAEngine flow.
> > > Netperf numbers are not good when using non-dmaengine default values,
> > > so tuned coalesce count and delay and defined separate default values
> > > in dmaengine flow.
> > >
> > > Netperf numbers and CPU utilisation change in DMAengine flow after
> > > introducing coalescing with default parameters:
> > > coalesce parameters:
> > > Transfer type Before(w/o coalescing) After(with coalescing)
> > > TCP Tx, CPU utilisation% 925, 27 941, 22
> > > TCP Rx, CPU utilisation% 607, 32 741, 36
> > > UDP Tx, CPU utilisation% 857, 31 960, 28
> > > UDP Rx, CPU utilisation% 762, 26 783, 18
> > >
> > > Above numbers are observed with 4x Cortex-a53.
> >
> > How does this affect latency? I would expect these RX settings to increase latency
> > around 5-10x. I only use these settings with DIM since it will disable coalescing
> > during periods of light load for better latency.
> >
> > (of course the way to fix this in general is RSS or some other method involving
> > multiple queues).
> >
>
> I took values before NAPI addition in legacy flow (rx_threshold: 24, rx_usec: 50) as reference. But netperf numbers were low with them, so tried tuning both and selected the pair which gives good numbers.
>
> > > Signed-off-by: Suraj Gupta <suraj.gupta2@xxxxxxx>
> > > ---
> > > This patch depend on following AXI DMA dmengine driver changes sent to
> > > dmaengine mailing list as pre-requisit series:
> > > https://lore.kernel.org/all/20250525101617.1168991-1-suraj.gupta2@amd.
> > > com/
> > > ---
> > > drivers/net/ethernet/xilinx/xilinx_axienet.h | 6 +++
> > > .../net/ethernet/xilinx/xilinx_axienet_main.c | 53 +++++++++++++++++++
> > > 2 files changed, 59 insertions(+)
> > >
> > > diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet.h
> > > b/drivers/net/ethernet/xilinx/xilinx_axienet.h
> > > index 5ff742103beb..cdf6cbb6f2fd 100644
> > > --- a/drivers/net/ethernet/xilinx/xilinx_axienet.h
> > > +++ b/drivers/net/ethernet/xilinx/xilinx_axienet.h
> > > @@ -126,6 +126,12 @@
> > > #define XAXIDMA_DFT_TX_USEC 50
> > > #define XAXIDMA_DFT_RX_USEC 16
> > >
> > > +/* Default TX/RX Threshold and delay timer values for SGDMA mode with
> > DMAEngine */
> > > +#define XAXIDMAENGINE_DFT_TX_THRESHOLD 16
> > > +#define XAXIDMAENGINE_DFT_TX_USEC 5
> > > +#define XAXIDMAENGINE_DFT_RX_THRESHOLD 24
> > > +#define XAXIDMAENGINE_DFT_RX_USEC 16
> > > +
> > > #define XAXIDMA_BD_CTRL_TXSOF_MASK 0x08000000 /* First tx packet */
> > > #define XAXIDMA_BD_CTRL_TXEOF_MASK 0x04000000 /* Last tx packet */
> > > #define XAXIDMA_BD_CTRL_ALL_MASK 0x0C000000 /* All control bits */
> > > diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
> > > b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
> > > index 1b7a653c1f4e..f9c7d90d4ecb 100644
> > > --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
> > > +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
> > > @@ -1505,6 +1505,7 @@ static int axienet_init_dmaengine(struct
> > > net_device *ndev) {
> > > struct axienet_local *lp = netdev_priv(ndev);
> > > struct skbuf_dma_descriptor *skbuf_dma;
> > > + struct dma_slave_config tx_config, rx_config;
> > > int i, ret;
> > >
> > > lp->tx_chan = dma_request_chan(lp->dev, "tx_chan0"); @@ -1520,6
> > > +1521,22 @@ static int axienet_init_dmaengine(struct net_device *ndev)
> > > goto err_dma_release_tx;
> > > }
> > >
> > > + tx_config.coalesce_cnt = XAXIDMAENGINE_DFT_TX_THRESHOLD;
> > > + tx_config.coalesce_usecs = XAXIDMAENGINE_DFT_TX_USEC;
> > > + rx_config.coalesce_cnt = XAXIDMAENGINE_DFT_RX_THRESHOLD;
> > > + rx_config.coalesce_usecs = XAXIDMAENGINE_DFT_RX_USEC;
> >
> > I think it would be clearer to just do something like
> >
> > struct dma_slave_config tx_config = {
> > .coalesce_cnt = 16,
> > .coalesce_usecs = 5,
> > };
> >
> > since these are only used once. And this ensures that you initialize the whole struct.
> >
> > But what tree are you using? I don't see these members on net-next or dmaengine.
>
> These changes are proposed in separate series in dmaengine https://lore.kernel.org/all/20250525101617.1168991-2-suraj.gupta2@xxxxxxx/ and I described it here below my SOB.
>
> >
> > > + ret = dmaengine_slave_config(lp->tx_chan, &tx_config);
> > > + if (ret) {
> > > + dev_err(lp->dev, "Failed to configure Tx coalesce parameters\n");
> > > + goto err_dma_release_tx;
> > > + }
> > > + ret = dmaengine_slave_config(lp->rx_chan, &rx_config);
> > > + if (ret) {
> > > + dev_err(lp->dev, "Failed to configure Rx coalesce parameters\n");
> > > + goto err_dma_release_tx;
> > > + }
> > > +
> > > lp->tx_ring_tail = 0;
> > > lp->tx_ring_head = 0;
> > > lp->rx_ring_tail = 0;
> > > @@ -2170,6 +2187,19 @@ axienet_ethtools_get_coalesce(struct net_device
> > *ndev,
> > > struct axienet_local *lp = netdev_priv(ndev);
> > > u32 cr;
> > >
> > > + if (lp->use_dmaengine) {
> > > + struct dma_slave_caps tx_caps, rx_caps;
> > > +
> > > + dma_get_slave_caps(lp->tx_chan, &tx_caps);
> > > + dma_get_slave_caps(lp->rx_chan, &rx_caps);
> > > +
> > > + ecoalesce->tx_max_coalesced_frames = tx_caps.coalesce_cnt;
> > > + ecoalesce->tx_coalesce_usecs = tx_caps.coalesce_usecs;
> > > + ecoalesce->rx_max_coalesced_frames = rx_caps.coalesce_cnt;
> > > + ecoalesce->rx_coalesce_usecs = rx_caps.coalesce_usecs;
> > > + return 0;
> > > + }
> > > +
> > > ecoalesce->use_adaptive_rx_coalesce = lp->rx_dim_enabled;
> > >
> > > spin_lock_irq(&lp->rx_cr_lock);
> > > @@ -2233,6 +2263,29 @@ axienet_ethtools_set_coalesce(struct net_device
> > *ndev,
> > > return -EINVAL;
> > > }
> > >
> > > + if (lp->use_dmaengine) {
> > > + struct dma_slave_config tx_cfg, rx_cfg;
> > > + int ret;
> > > +
> > > + tx_cfg.coalesce_cnt = ecoalesce->tx_max_coalesced_frames;
> > > + tx_cfg.coalesce_usecs = ecoalesce->tx_coalesce_usecs;
> > > + rx_cfg.coalesce_cnt = ecoalesce->rx_max_coalesced_frames;
> > > + rx_cfg.coalesce_usecs = ecoalesce->rx_coalesce_usecs;
> > > +
> > > + ret = dmaengine_slave_config(lp->tx_chan, &tx_cfg);
> > > + if (ret) {
> > > + NL_SET_ERR_MSG(extack, "failed to set tx coalesce parameters");
> > > + return ret;
> > > + }
> > > +
> > > + ret = dmaengine_slave_config(lp->rx_chan, &rx_cfg);
> > > + if (ret) {
> > > + NL_SET_ERR_MSG(extack, "failed to set rx coalesce
> > parameters");
> > > + return ret;
> > > + }
> > > + return 0;
> > > + }
> > > +
> > > if (new_dim && !old_dim) {
> > > cr = axienet_calc_cr(lp, axienet_dim_coalesce_count_rx(lp),
> > > ecoalesce->rx_coalesce_usecs);
Return-Path: <linux-kernel+bounces-665498-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id B367841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:10:51 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 230A44E2963
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:10:52 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id B4AD02868A2;
Wed, 28 May 2025 13:10:36 +0000 (UTC)
Received: from Chamillionaire.breakpoint.cc (Chamillionaire.breakpoint.cc [91.216.245.30])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3492F286889;
Wed, 28 May 2025 13:10:33 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.216.245.30
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748437836; cv=none; b=kFO8H+H9oEcmLDv7Gyc0wTfu0AC/c2yju9459Vnu/S47iq4OnON5yfQUGCkbYdtktnhP3WqXSHgxdlSTE3Hz8gxfo4tIEYH5XALVRsbroRIeqfB/+gmxUHsBfGB+o914GKO45xqPD3aP2S4Wyp6a4D+2Al4Yq9Gy2wi9UbP5M28=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748437836; c=relaxed/simple;
bh=5gw9lFZJbt318WQjHz4/WwLts5uGrE1i3Hhu6mIN18M=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=kiqmeUmneWN/zeH3//YcTJ5zFo75ZPN5yq/hcsSjgwJf3qaGRZ+LoKYpBdeAFRkNAJ93SZL3tmK56pQ/eDtC2ARp7k8TJMCNLecCAf46TvQwqk1JJ/RyNx80045mNv2C5HnFohkgd60i/Fl3geA+ovAdw/9amVp5bJ0IrqqP530=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=strlen.de; spf=pass smtp.mailfrom=strlen.de; arc=none smtp.client-ip=91.216.245.30
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=strlen.de
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=strlen.de
Received: by Chamillionaire.breakpoint.cc (Postfix, from userid 1003)
id 1E2A86042D; Wed, 28 May 2025 15:10:32 +0200 (CEST)
Date: Wed, 28 May 2025 15:09:54 +0200
From: Florian Westphal <fw@xxxxxxxxx>
To: ying chen <yc1082463@xxxxxxxxx>
Cc: pablo@xxxxxxxxxxxxx, kadlec@xxxxxxxxxxxxx, davem@xxxxxxxxxxxxx,
edumazet@xxxxxxxxxx, kuba@xxxxxxxxxx, pabeni@xxxxxxxxxx,
netfilter-devel@xxxxxxxxxxxxxxx, coreteam@xxxxxxxxxxxxx,
netdev@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [bug report, linux 6.15-rc4] A large number of connections in
the SYN_SENT state caused the nf_conntrack table to be full.
Message-ID: <aDcLIh2lPkAWOVCI@xxxxxxxxx>
References: <CAN2Y7hxscai7JuC0fPE8DZ3QOPzO_KsE_AMCuyeTYRQQW_mA2w@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <CAN2Y7hxscai7JuC0fPE8DZ3QOPzO_KsE_AMCuyeTYRQQW_mA2w@xxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
ying chen <yc1082463@xxxxxxxxx> wrote:
> Hello all,
>
> I encountered an "nf_conntrack: table full" warning on Linux 6.15-rc4.
> Running cat /proc/net/nf_conntrack showed a large number of
> connections in the SYN_SENT state.
> As is well known, if we attempt to connect to a non-existent port, the
> system will respond with an RST and then delete the conntrack entry.
> However, when we frequently connect to non-existent ports, the
> conntrack entries are not deleted, eventually causing the nf_conntrack
> table to fill up.
Yes, what do you expect to happen?
Return-Path: <linux-kernel+bounces-665499-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 00C0C41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:11:06 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id B2C5B4E299C
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:11:06 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 0C93128688E;
Wed, 28 May 2025 13:11:01 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="oewuF3I5"
Received: from casper.infradead.org (casper.infradead.org [90.155.50.34])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id AEAE17E9;
Wed, 28 May 2025 13:10:58 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748437860; cv=none; b=FXfQX0RrLvaay0seDFZD06E96pT5W4EfQ6HLvePDM0RopNKS3DAmGW4+kX0Oi8au/pGR/+NNXsK/Txz1eS4oulXznbrYTVkpd7v2qMSl/J8YvpbJFh5VIK7/lsL/k2wWYns3dpF4deTsot2L+D9KHJl/Hi94vwzqRM9NwLWZMeA=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748437860; c=relaxed/simple;
bh=KpW/GiAaO4IEYVE6pBKqBoHdlU5iOrI46SKaEKNozU8=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=oB3cqgBjMDHwN1ImM4PPbfplYayvZlrjEr2O/YjKjGjAg71WhOfVKGvpaeHQZaRAv9Tvzho2BTm876bRxY8kTatku83THwj9o/A+AsT4y44BIW7uwKxqUFYJ5SKpsXJB7UQFrsU5VFm/W2Uw6HTbLod7OXi3OjtNMFT7jBC6pXM=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=oewuF3I5; arc=none smtp.client-ip=90.155.50.34
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org
Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version:
References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To:
Content-Transfer-Encoding:Content-ID:Content-Description;
bh=rI1fCTktbDZK+H9GNDwtSrkRyZD7L6P9hnuVyfA7BUo=; b=oewuF3I5HpADvb9JIl1NwmNqrM
XDhuRIk63Y5TizxQOMADXEbIjqN7Ib7FNVPF5ES9wGipGJTWNfNWLlgLWVlPv4oaoFx25hrJYh6hH
/R/+RXWkhnuMFaf7SYY+zVLsP8fRby1ZvDNj93tL1p8Nv/5987vhSx7v0MUXpJWPOtMPVDxjuQOfE
9jr+IxpFHkrX4bNrdRGIKPCfr56k7Cql7UTptKK/E5tmLg+DRRGCyaBbSf+YIiu4l1bajlYd912Ja
5nyu2lC4iuuKP1Xdh/zSxkl38Xn+i+mlWodTGbFM1nk1F/qI4D0qsRvruXTfE2s7cgu6z2g5AVOEW
S4Wgd7Iw==;
Received: from 77-249-17-252.cable.dynamic.v4.ziggo.nl ([77.249.17.252] helo=noisy.programming.kicks-ass.net)
by casper.infradead.org with esmtpsa (Exim 4.98.2 #2 (Red Hat Linux))
id 1uKGYX-0000000DfGu-14zX;
Wed, 28 May 2025 13:10:53 +0000
Received: by noisy.programming.kicks-ass.net (Postfix, from userid 1000)
id AB4E8300263; Wed, 28 May 2025 15:10:52 +0200 (CEST)
Date: Wed, 28 May 2025 15:10:52 +0200
From: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
To: Juergen Gross <jgross@xxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx, x86@xxxxxxxxxx, xin@xxxxxxxxx,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>,
Ingo Molnar <mingo@xxxxxxxxxx>, Borislav Petkov <bp@xxxxxxxxx>,
Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
"H. Peter Anvin" <hpa@xxxxxxxxx>, stable@xxxxxxxxxxxxxxx
Subject: Re: [PATCH 3/3] x86/alternative: make kernel ITS thunks read-only
Message-ID: <20250528131052.GZ39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <20250528123557.12847-1-jgross@xxxxxxxx>
<20250528123557.12847-4-jgross@xxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528123557.12847-4-jgross@xxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 02:35:57PM +0200, Juergen Gross wrote:
> When allocating memory pages for kernel ITS thunks, make them read-only
> after having written the last thunk.
>
> This will be needed when X86_FEATURE_PSE isn't available, as the thunk
> memory will have PAGE_KERNEL_EXEC protection, which is including the
> write permission.
>
> Cc: <stable@xxxxxxxxxxxxxxx>
> Fixes: 5185e7f9f3bd ("x86/module: enable ROX caches for module text on 64 bit")
> Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
> ---
> arch/x86/kernel/alternative.c | 16 ++++++++++++++++
> 1 file changed, 16 insertions(+)
>
> diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
> index ecfe7b497cad..bd974a0ac88a 100644
> --- a/arch/x86/kernel/alternative.c
> +++ b/arch/x86/kernel/alternative.c
> @@ -217,6 +217,15 @@ static void *its_alloc(void)
> return no_free_ptr(page);
> }
>
> +static void its_set_kernel_ro(void *addr)
> +{
> +#ifdef CONFIG_MODULES
> + if (its_mod)
> + return;
> +#endif
> + execmem_restore_rox(addr, PAGE_SIZE);
> +}
> +
> static void *its_allocate_thunk(int reg)
> {
> int size = 3 + (reg / 8);
> @@ -234,6 +243,8 @@ static void *its_allocate_thunk(int reg)
> #endif
>
> if (!its_page || (its_offset + size - 1) >= PAGE_SIZE) {
> + if (its_page)
> + its_set_kernel_ro(its_page);
> its_page = its_alloc();
> if (!its_page) {
> pr_err("ITS page allocation failed\n");
> @@ -2338,6 +2349,11 @@ void __init alternative_instructions(void)
> apply_retpolines(__retpoline_sites, __retpoline_sites_end);
> apply_returns(__return_sites, __return_sites_end);
>
> + /* Make potential last thunk page read-only. */
> + if (its_page)
> + its_set_kernel_ro(its_page);
> + its_page = NULL;
> +
> /*
> * Adjust all CALL instructions to point to func()-10, including
> * those in .altinstr_replacement.
No, this is all sorts of wrong. Execmem API should ensure this.
Return-Path: <linux-kernel+bounces-665500-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id C94D241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:12:20 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 215E14E2BA4
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:12:22 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 35331286889;
Wed, 28 May 2025 13:12:15 +0000 (UTC)
Received: from mail-oi1-f199.google.com (mail-oi1-f199.google.com [209.85.167.199])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5A83113A26D
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:12:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.199
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748437934; cv=none; b=BPEWZJf6G2y0f+oTQdEFtM2fqa2FACKRBE3eOMmcuAseaHk6uRn0252HiJpthx7kPSR+bW9WRSmTjrqb5bj4xYw8LrqlKli/E2qYbWKH8Wbf6Z2QlJjpvKqZSHRBuxXy+X80Zxb7NrHYyuunaPQrPVuO6kqK/qJ7tew/qjqBrSY=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748437934; c=relaxed/simple;
bh=u3E+p0YK3EjavDdgvYc10Ll4ApdsWBtA5D7ZIeuCLA8=;
h=MIME-Version:Date:In-Reply-To:Message-ID:Subject:From:To:
Content-Type; b=HtcxQvoD6u6lzh5S140rekGferzaFQjLF4I4jRVaK3V1blYIi0y1OhNi/lWPsNFZu80ZrSD6q6l9CHEolTyOG6BsfLmrpSXiW2HU/6KPksjkZFqu2bf7RCjN85uuQy7zufIcFafGJOMHYw2QplDOjea8i6zVZ3GKlEY49uz/RY0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=syzkaller.appspotmail.com; spf=pass smtp.mailfrom=M3KW2WVRGUFZ5GODRSRYTGD7.apphosting.bounces.google.com; arc=none smtp.client-ip=209.85.167.199
Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=syzkaller.appspotmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=M3KW2WVRGUFZ5GODRSRYTGD7.apphosting.bounces.google.com
Received: by mail-oi1-f199.google.com with SMTP id 5614622812f47-4063a606742so1150247b6e.3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 06:12:13 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748437932; x=1749042732;
h=to:from:subject:message-id:in-reply-to:date:mime-version
:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
bh=NjMgq5YPEqClBeK1w0Fn9qy7mcRG8bP+yBk7386/22A=;
b=dv8uIprV/9DbDNHx/m8xIgWOo/ItTks7dzDJv48t3ybHFcuF7nvRGLpMmzM5WMlSEj
MkOOAoYxmPN07Ie5T3ZAOZnXimCcFNx/WR09qh97db3zYcQ7R73/ULnzmMH95w7ucIK2
7N9LWv7UtSuhSGy3xgWnG71/ObSgqsKISZmgNSRlblQSB6dH4oKEQ2hY6ZrMwUGCEv5P
2wvoPUFekvzn0dWoegh8z+jcsNGc8OkeuCpZw8EnDHWvc+ZF60Iu8uC7eQdQDpU9I284
MYyy7pHxQFF3eVCAoqE5ZHipOgd/TMIWJhEa9q3dVpjb0Gd+vKGBRgMsGTQ1XqiiOE+w
rWqQ==
X-Forwarded-Encrypted: i=1; AJvYcCUamfAhBSrXQp5vOHg42OJ+VE9k6yStult2w85x1N2FltCaS93DmVP0OYODXDU4R9StOhdNRj7xdEVweF0=@vger.kernel.org
X-Gm-Message-State: AOJu0YyJBFKbGVQF4ypXMPus9XJFRzA7SFVXAF2rM5lafZ1bCCWpgL4b
8eo/gsBQk1GzGNCAE+CIWZArM2R85jTWJd4NnO2ouJqA6FnVb3UquqS4D+S9wn+nKx8DPA81vB2
sAS0NTM4rHC+Bc1kFMx2pAuNrkP26vI6WTWHaUP2aa0jR6UhMG9+8F8Dl6YE=
X-Google-Smtp-Source: AGHT+IFvHD9chitsQ2/drZtV3SXkmJTqKG1P/5ky6Q16A7AZI2qwD4DbDQxH3sHJm6ZvU8cIiTNkl3kRjFEQEe4VmK2jFrM3zDIj
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-Received: by 2002:a05:6e02:2601:b0:3dc:79e5:e6a8 with SMTP id
e9e14a558f8ab-3dc9b734464mr173032695ab.15.1748437922096; Wed, 28 May 2025
06:12:02 -0700 (PDT)
Date: Wed, 28 May 2025 06:12:02 -0700
In-Reply-To: <CAGR7w82zibJcdbxq8d-VZDj-uO3kXZbMuSx=HZTMRVdfnLiaQA@xxxxxxxxxxxxxx>
X-Google-Appengine-App-Id: s~syzkaller
X-Google-Appengine-App-Id-Alias: syzkaller
Message-ID: <68370ba2.a70a0220.253bc2.00cc.GAE@xxxxxxxxxx>
Subject: Re: [syzbot] [i2c?] KMSAN: uninit-value in __i2c_smbus_xfer
From: syzbot <syzbot+0a36c1fec090c67a9885@xxxxxxxxxxxxxxxxxxxxxxxxx>
To: abhinav.ogl@xxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
syzkaller-bugs@xxxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
X-Spam-Status: No, score=-3.0 required=5.0 tests=FROM_LOCAL_HEX,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hello,
syzbot tried to test the proposed patch but the build/boot failed:
kernel/futex/core.c:629:15: error: no member named 'page' in 'struct futex_key::(unnamed at ./include/linux/futex.h:33:2)'
Tested on:
commit: feacb177 Merge tag 'sched_ext-for-6.16' of git://git.k..
git tree: upstream
kernel config: https://syzkaller.appspot.com/x/.config?x=9dc42c34a3f5c357
dashboard link: https://syzkaller.appspot.com/bug?extid=0a36c1fec090c67a9885
compiler: Debian clang version 20.1.6 (++20250514063057+1e4d39e07757-1~exp1~20250514183223.118), Debian LLD 20.1.6
patch: https://syzkaller.appspot.com/x/patch.diff?x=14ae03f4580000
Return-Path: <linux-kernel+bounces-665501-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id C1A5641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:12:41 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 36E8D3B8428
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:12:19 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id D0D4428689C;
Wed, 28 May 2025 13:12:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jyFc8qUj"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id D7ED1286889;
Wed, 28 May 2025 13:12:31 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748437951; cv=none; b=NNZsEU+EhuQDx95Ff94Vm3wzJ1hm3u3pue87XYqY6B6xdcw2xZYG52qpYSuyGrmqFDQ+mIS+hx3EtOB2RkCh9NPXsULkdYQFWxYtTw6aMvddAyCzmdpzg6pOufwgBMvo5SOP2b4IQIJvjnR6twZE4Te/VbnSeu5MaKeetf2nXUw=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748437951; c=relaxed/simple;
bh=EqWt9GMIHdOPGRd1vILReywY43NpJizJom1wC9tnJ00=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=GV5swdJKqBO421TYEWrpkKtz5czRdlBDKU/cjFJwIHxXcNAs+w2DHxjccneFiQckV7KzlKwcMHIEh0qCCDs20xN45tCTf4AqePF4brQhjINl3hv6O+vX5mghldemHgZPJ8FjfTKp44swRLI71PN1RdMc2lrjAyXxjMbqH3dW6P4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jyFc8qUj; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id C33A3C4CEE7;
Wed, 28 May 2025 13:12:30 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748437951;
bh=EqWt9GMIHdOPGRd1vILReywY43NpJizJom1wC9tnJ00=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=jyFc8qUjPnsNVR7Q8Cp7oZ9r80DMe+12qPnNn/dZflByBdp7etMcSobP1FC3W8/sX
rCeVIyHoIV1Qo6K75Oco+2Ko/69ndnZxnH6dlXBwE4KQzrJEBNmrqZgKKCOAWf1/+0
+lUEmdHKJK+W0eHJ6azAPKFVZun9AoSZadGYeAOfOsgXgzcdlm7XsQLyTSqj11bjVm
UfIjpwMMrZbEC7B1MT6QSd5oO4u2Na3hWUxzeoIqEgwqurxNE2zZJJZ1cL78qcNqy/
rmz/nf5hieZW+kYM4SyY/J1zl2TLhJo29lg5kROzucO611gPRxhAmjpn9Om6/jM8z6
pHk2i+4U+62QA==
Date: Wed, 28 May 2025 10:12:28 -0300
From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
To: Ian Rogers <irogers@xxxxxxxxxx>
Cc: Namhyung Kim <namhyung@xxxxxxxxxx>,
Peter Zijlstra <peterz@xxxxxxxxxxxxx>,
Ingo Molnar <mingo@xxxxxxxxxx>, Mark Rutland <mark.rutland@xxxxxxx>,
Alexander Shishkin <alexander.shishkin@xxxxxxxxxxxxxxx>,
Jiri Olsa <jolsa@xxxxxxxxxx>,
Adrian Hunter <adrian.hunter@xxxxxxxxx>,
Kan Liang <kan.liang@xxxxxxxxxxxxxxx>,
James Clark <james.clark@xxxxxxxxxx>,
Yicong Yang <yangyicong@xxxxxxxxxxxxx>,
Howard Chu <howardchu95@xxxxxxxxx>, Andi Kleen <ak@xxxxxxxxxxxxxxx>,
Michael Petlan <mpetlan@xxxxxxxxxx>,
Anne Macedo <retpolanne@xxxxxxxxxx>,
"Dr. David Alan Gilbert" <linux@xxxxxxxxxxx>,
Dmitry Vyukov <dvyukov@xxxxxxxxxx>,
linux-perf-users@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH v1 1/2] perf machine: Factor creating a "live" machine
out of dwarf-unwind
Message-ID: <aDcLvCHGtGRHoA08@x1>
References: <20250313052952.871958-1-irogers@xxxxxxxxxx>
<Z9Rk-YdoK-fK_62d@x1>
<Z9SK96s4PAp680k6@x1>
<Z9SLL50yuiLOGGYI@x1>
<Z9oGI8G3cOoluIKf@xxxxxxxxxx>
<CAP-5=fWaTU7Ouj6ZnF2jaoiQbT_Niavx-JA=_bMdYRsr7T-P8w@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <CAP-5=fWaTU7Ouj6ZnF2jaoiQbT_Niavx-JA=_bMdYRsr7T-P8w@xxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 02:17:40PM -0700, Ian Rogers wrote:
> On Tue, Mar 18, 2025 at 4:47â?¯PM Namhyung Kim <namhyung@xxxxxxxxxx> wrote:
> > On Fri, Mar 14, 2025 at 05:01:51PM -0300, Arnaldo Carvalho de Melo wrote:
> > > On Fri, Mar 14, 2025 at 05:00:58PM -0300, Arnaldo Carvalho de Melo wrote:
> > > > On Fri, Mar 14, 2025 at 02:18:49PM -0300, Arnaldo Carvalho de Melo wrote:
> > > > > On Wed, Mar 12, 2025 at 10:29:51PM -0700, Ian Rogers wrote:
> > > > > > Factor out for use in places other than the dwarf unwinding tests for
> > > > > > libunwind.
> > > > > Testing with another patchset being reviewed/tested, seems to work, if
> > > > > it showed the line number would be even better!
> > > > But it gets the lines, at least in this secoond attempt, after applying
> > > > Namhyungs fix for the previous problem (int16_t):
> > > Nevermind, this time I built with DEBUG=1, so DWARF, probably.
> > Can I get your Tested-by?
> Ping. Thanks,
⬢ [acme@toolbx perf-tools-next]$ git log --oneline -1 ; time make -C tools/perf build-test
⬢ [acme@toolbx perf-tools-next]$ git log --oneline -1 ; time make -C tools/perf build-test
9360bbbbbe349ad5 (HEAD -> perf-tools-next) perf test trace_summary: Skip --bpf-summary tests if no libbpf
make: Entering directory '/home/acme/git/perf-tools-next/tools/perf'
- tarpkg: ./tests/perf-targz-src-pkg .
make_static: cd . && make LDFLAGS=-static NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 NO_JVMTI=1 NO_LIBTRACEEVENT=1 NO_LIBELF=1 -j32 DESTDIR=/tmp/tmp.pLPZo5eOU4
make_with_gtk2: cd . && make GTK2=1 -j32 DESTDIR=/tmp/tmp.UCW5KoJO7G
- /home/acme/git/perf-tools-next/tools/perf/BUILD_TEST_FEATURE_DUMP: cd . && make FEATURE_DUMP_COPY=/home/acme/git/perf-tools-next/tools/perf/BUILD_TEST_FEATURE_DUMP feature-dump
cd . && make FEATURE_DUMP_COPY=/home/acme/git/perf-tools-next/tools/perf/BUILD_TEST_FEATURE_DUMP feature-dump
make_install_prefix_O: cd . && make install prefix=/tmp/krava FEATURES_DUMP=/home/acme/git/perf-tools-next/tools/perf/BUILD_TEST_FEATURE_DUMP -j32 O=/tmp/tmp.ltUruVMFZe DESTDIR=/tmp/tmp.SF7aKXi9C9
failed to find: /tmp/krava/etc/bash_completion.d/perf
make_no_scripts_O: cd . && make NO_LIBPYTHON=1 NO_LIBPERL=1 FEATURES_DUMP=/home/acme/git/perf-tools-next/tools/perf/BUILD_TEST_FEATURE_DUMP -j32 O=/tmp/tmp.dDLcnrMf0E DESTDIR=/tmp/tmp.EPrIBPWlr1
make_doc_O: cd . && make doc FEATURES_DUMP=/home/acme/git/perf-tools-next/tools/perf/BUILD_TEST_FEATURE_DUMP -j32 O=/tmp/tmp.BzKY8ivHAr DESTDIR=/tmp/tmp.VzvzdPnp0f
make_no_syscall_tbl_O: cd . && make FEATURES_DUMP=/home/acme/git/perf-tools-next/tools/perf/BUILD_TEST_FEATURE_DUMP -j32 O=/tmp/tmp.5kxtJHPWTs DESTDIR=/tmp/tmp.jE9lxo6oW9
<SNIP>
make_minimal_O: cd . && make NO_LIBPERL=1 NO_LIBPYTHON=1 NO_GTK2=1 NO_DEMANGLE=1 NO_LIBELF=1 NO_BACKTRACE=1 NO_LIBNUMA=1 NO_LIBBIONIC=1 NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1 NO_LIBBPF=1 NO_LIBCRYPTO=1 NO_SDT=1 NO_JVMTI=1 NO_LIBZSTD=1 NO_LIBCAP=1 NO_CAPSTONE=1 FEATURES_DUMP=/home/acme/git/perf-tools-next/tools/perf/BUILD_TEST_FEATURE_DUMP -j32 O=/tmp/tmp.lElrNycGd2 DESTDIR=/tmp/tmp.d7wt9o5uE5
cd . && make NO_LIBPERL=1 NO_LIBPYTHON=1 NO_GTK2=1 NO_DEMANGLE=1 NO_LIBELF=1 NO_BACKTRACE=1 NO_LIBNUMA=1 NO_LIBBIONIC=1 NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1 NO_LIBBPF=1 NO_LIBCRYPTO=1 NO_SDT=1 NO_JVMTI=1 NO_LIBZSTD=1 NO_LIBCAP=1 NO_CAPSTONE=1 FEATURES_DUMP=/home/acme/git/perf-tools-next/tools/perf/BUILD_TEST_FEATURE_DUMP -j32 O=/tmp/tmp.lElrNycGd2 DESTDIR=/tmp/tmp.d7wt9o5uE5
BUILD: Doing 'make -j32' parallel build
Warning: Kernel ABI header differences:
diff -u tools/arch/arm64/include/asm/cputype.h arch/arm64/include/asm/cputype.h
Makefile.config:685: Warning: Disabled BPF skeletons as libelf is required by bpftool
Makefile.config:726: Disabling post unwind, no support found.
Makefile.config:863: Python support disabled by user
Makefile.config:968: No libllvm 13+ found, slower source file resolution, please install llvm-devel/llvm-dev
GEN /tmp/tmp.lElrNycGd2/common-cmds.h
CC /tmp/tmp.lElrNycGd2/dlfilters/dlfilter-test-api-v0.o
CC /tmp/tmp.lElrNycGd2/dlfilters/dlfilter-test-api-v2.o
<SNIP>
CC /tmp/tmp.lElrNycGd2/tests/dlfilter-test.o
CC /tmp/tmp.lElrNycGd2/util/tool.o
CC /tmp/tmp.lElrNycGd2/tests/sigtrap.o
CC /tmp/tmp.lElrNycGd2/tests/event_groups.o
CC /tmp/tmp.lElrNycGd2/util/sample.o
CC /tmp/tmp.lElrNycGd2/tests/symbols.o
CC /tmp/tmp.lElrNycGd2/util/sample-raw.o
CC /tmp/tmp.lElrNycGd2/util/s390-sample-raw.o
CC /tmp/tmp.lElrNycGd2/tests/util.o
util/debug.c: In function â??__dump_stackâ??:
util/debug.c:323:17: error: implicit declaration of function â??backtrace_symbols_fdâ?? [-Wimplicit-function-declaration]
323 | backtrace_symbols_fd(stackdump, stackdump_size, fileno(file));
| ^~~~~~~~~~~~~~~~~~~~
CC /tmp/tmp.lElrNycGd2/util/amd-sample-raw.o
make[6]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:85: /tmp/tmp.lElrNycGd2/util/debug.o] Error 1
make[6]: *** Waiting for unfinished jobs....
CC /tmp/tmp.lElrNycGd2/tests/hwmon_pmu.o
CC /tmp/tmp.lElrNycGd2/tests/tool_pmu.o
MKDIR /tmp/tmp.lElrNycGd2/tests/workloads/
CC /tmp/tmp.lElrNycGd2/tests/workloads/noploop.o
CC /tmp/tmp.lElrNycGd2/tests/workloads/thloop.o
CC /tmp/tmp.lElrNycGd2/tests/workloads/leafloop.o
CC /tmp/tmp.lElrNycGd2/tests/workloads/sqrtloop.o
CC /tmp/tmp.lElrNycGd2/tests/workloads/brstack.o
CC /tmp/tmp.lElrNycGd2/tests/workloads/datasym.o
CC /tmp/tmp.lElrNycGd2/tests/workloads/landlock.o
LD /tmp/tmp.lElrNycGd2/tests/workloads/perf-test-in.o
LD /tmp/tmp.lElrNycGd2/tests/perf-test-in.o
LD /tmp/tmp.lElrNycGd2/perf-test-in.o
AR /tmp/tmp.lElrNycGd2/libperf-test.a
LD /tmp/tmp.lElrNycGd2/perf-in.o
make[5]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:142: util] Error 2
make[4]: *** [Makefile.perf:798: /tmp/tmp.lElrNycGd2/perf-util-in.o] Error 2
make[4]: *** Waiting for unfinished jobs....
CC /tmp/tmp.lElrNycGd2/pmu-events/pmu-events.o
LD /tmp/tmp.lElrNycGd2/pmu-events/pmu-events-in.o
make[3]: *** [Makefile.perf:290: sub-make] Error 2
make[2]: *** [Makefile:76: all] Error 2
make[1]: *** [tests/make:341: make_minimal_O] Error 1
make: *** [Makefile:109: build-test] Error 2
make: Leaving directory '/home/acme/git/perf-tools-next/tools/perf'
real 3m7.724s
user 31m43.201s
sys 5m40.288s
⬢ [acme@toolbx perf-tools-next]$
Return-Path: <linux-kernel+bounces-665502-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 0067541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:13:08 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id A294A17B8C8
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:13:08 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 83C48284696;
Wed, 28 May 2025 13:13:00 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RktasItC"
Received: from mail-ed1-f45.google.com (mail-ed1-f45.google.com [209.85.208.45])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 34E4A286885
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:12:57 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.45
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748437979; cv=none; b=qk0AD4pK3EuYggfrDwtDxAS6dj2Va3YqrTMGvTAYxmgXo9jYFYaUgU4QcWOFWgKI1yRi2diVluSqX5LanlCHfJ57T3KbVJeSEbZtXfPuysyDDQT5/MHDShzEHqeWzS157A4HSuST3xrf8gB9DQZpu1nFW7udPdHzPqjy/G9dCQw=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748437979; c=relaxed/simple;
bh=K6H2BFUCEi2QfQRKc29UYNQrKB2mTNx4SSTK6IFQD8o=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=rSwn4/cVmO0Hn1ipMFVJuC4bVRVjsaze3FbvaQ8yTKUNMdY4DAFDhhDpQUzedBVWobjeqwROON8q50v1CB8MvFXI/RdYWCMtJJDPk/Eg6wRzlDaTwEqQuM3uUzEX0Vet6wEGskVwr9wihI46uC1p2oz/GTfBcXQ1/xIt3dJQrJc=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RktasItC; arc=none smtp.client-ip=209.85.208.45
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-ed1-f45.google.com with SMTP id 4fb4d7f45d1cf-5fff52493e0so5598889a12.3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 06:12:57 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748437976; x=1749042776; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=EDxFHQvEkH1JIzWvj5qIpEsR4Lb7D0NeMUS03kwt69g=;
b=RktasItCAwq7jpeMemmWWxE13GUpbsAU4UUl4g63ktfU/Ty/pRahof6To9QCVqkp+P
NEoha9Ywd6IwmlUA1Fypli0iybtZpVpoA6DaeVPwUDTTU+bRQwEkHAkYPul7jqbx+zOv
icS/M4+rU+nNcba8JdZBUl7plEFXxa5MZC6Cv7EfaaRzoDziyAB94N0/LYX/Tm3n+z8o
7ktVapuhN1DOKxoHDbbUvocImWlQUQDdsipR1rJrzs0ZjqCZ7pkayEMNBUb3X+CDz/O3
8eRmm0lGNDUavPIzf9hoWDWbofD22ReCdBZNisy8pjTO0b//vXZdcWjy2lwusH8+URMn
uWNg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748437976; x=1749042776;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=EDxFHQvEkH1JIzWvj5qIpEsR4Lb7D0NeMUS03kwt69g=;
b=HquaRdOIUcVxMSSlr9Yj8YzD6ISz2mmTp2WA7OhVUHQYJBNs2VjJEUUod/b6wIcTQ7
+XH63QBQWKDjw5FTVO4QH/ldiYhmFr2wMBAy2cFm+ykojfFmmEyIRYg5LXh5UkCr3IDp
lZrvYL+tieP7/U7Om6XJGpZmfU29qhykjul/YplebMmsTZuX1RTmNSO34GSWyprFV9xc
C2Artmy2BYK8zlr4VP7vJlue076vpmWNaTTnsQRt2uwgqTaAIX0GB3fsw6ozkdsIsXNN
E2s3KP5jnBq1OIgNbFycqs9odvsIQ7fCVKOWML6oVR6/WxD3KWeKXtZwi0ZsoeBY5nLp
OVmQ==
X-Gm-Message-State: AOJu0Yxs229O4im4VC1yUMCWNxR3H2JgRKhbEAq/IqRTk944MMsP/p0Z
sjRJw816moqGBDNcth1bTBy60mIPKu72qwrdux/tXZQ3LgPvM4dacBbxzfGIzYMWhtat9gSd3sQ
++2LW5N1Dz1MPkx6Fee3U1rdI5nK/ZPU=
X-Gm-Gg: ASbGncucexovYwhKu1ObgzLOpdMyd6eMT5eMcl5ZV9F9kQlp27GCZscHnK7SzR52QhI
9KodYJLJrQF33XbFIpMgOaHV17UMfE78ubWaZprLUYBINFiPhkoUsvrE9dU4XCaL5PNWsCxFzc2
5dnqQ5iTOlw4oxmIYQQmLUHhCc75Z202o=
X-Google-Smtp-Source: AGHT+IFhkhDVGFAANmTtdUTChqLRW2O0erNbFgfxUTwqBrgn25zK3RMdSjfzeIrEwQHrkRWadm35PCO2q/W+U2IREXg=
X-Received: by 2002:a05:6402:90a:b0:601:9aeb:3d9 with SMTP id
4fb4d7f45d1cf-602d9bf0911mr12054019a12.20.1748437976241; Wed, 28 May 2025
06:12:56 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <2e6ec46b8d5e6755be291cec8e2ec57ef286e97b.1748356035.git.mst@xxxxxxxxxx>
In-Reply-To: <2e6ec46b8d5e6755be291cec8e2ec57ef286e97b.1748356035.git.mst@xxxxxxxxxx>
From: Stefan Hajnoczi <stefanha@xxxxxxxxx>
Date: Wed, 28 May 2025 09:12:42 -0400
X-Gm-Features: AX0GCFs6Nw5SDcEM0_7E5W7keZ9RJNrn9CqAZhQPdhLm4jHtE_pv_-tpv8ft8nI
Message-ID: <CAJSP0QV1OfRb8K1yA5rKe_SybpbdETanL+XgcGJ6hhpyHB8RBw@xxxxxxxxxxxxxx>
Subject: Re: [PATCH] virtio: document ENOSPC
To: "Michael S. Tsirkin" <mst@xxxxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx, Parav Pandit <parav@xxxxxxxxxx>,
Jason Wang <jasowang@xxxxxxxxxx>, Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx>,
=?UTF-8?Q?Eugenio_P=C3=A9rez?= <eperezma@xxxxxxxxxx>,
virtualization@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 10:28=E2=80=AFAM Michael S. Tsirkin <mst@xxxxxxxxxx=
> wrote:
>
> drivers handle ENOSPC specially since it's an error one can
> get from a working VQ. Document the semantics.
>
> Reported-by: Parav Pandit <parav@xxxxxxxxxx>
> Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx>
> ---
> drivers/virtio/virtio_ring.c | 4 ++++
> 1 file changed, 4 insertions(+)
Reviewed-by: Stefan Hajnoczi <stefanha@xxxxxxxxxx>
Return-Path: <linux-kernel+bounces-665503-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 15F0941E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:13:35 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id ABCF61BC4CF4
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:13:47 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 613FD28688E;
Wed, 28 May 2025 13:13:27 +0000 (UTC)
Received: from foss.arm.com (foss.arm.com [217.140.110.172])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 1D76E2AF1D
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:13:22 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438006; cv=none; b=h+/xwB/SDVHuxE3h6BWmy1SN105lNp2yXrGx9WieiZ0k/l3bIHhynf2xGkx64UxQ2JI0TdbGGSQOg7JcWndixx27lKI3cN4olmz/k3rTeM84erljlbR/5oFgBP0jt6ayBwfB+EDDhJ+/M+ynkJFYbHDOqzHRtgdxj6kzM5ixJFE=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438006; c=relaxed/simple;
bh=icVAaUNcnwE6V1S7ePnwBbL+ofBUkgwVb+S3UT6IZMM=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=nwuZ774uVKzc3qgfP1tPfCQHyviM570+7VcxTGg73CMPaPmi8lEQucOsorwUUi4kX7NZ41sk9ikMYmi8M2o4jTapvlFBK9oUGdz5N3i8CNF2KaCQJ7p1qS1kd8CwaQq7Yg9/Pa6/5yde3X3idOH/ovR9Z6cN3hdKwWP61Ng4h1Y=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 9E7601A2D;
Wed, 28 May 2025 06:13:05 -0700 (PDT)
Received: from [10.57.94.142] (unknown [10.57.94.142])
by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id B4CB53F5A1;
Wed, 28 May 2025 06:13:20 -0700 (PDT)
Message-ID: <e3e6a3e0-3012-4d95-9236-4b4d57c7974c@xxxxxxx>
Date: Wed, 28 May 2025 14:13:19 +0100
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [v3 PATCH 0/6] arm64: support FEAT_BBM level 2 and large block
mapping when rodata=full
Content-Language: en-GB
To: Yang Shi <yang@xxxxxxxxxxxxxxxxxxxxxx>, will@xxxxxxxxxx,
catalin.marinas@xxxxxxx, Miko.Lenczewski@xxxxxxx,
scott@xxxxxxxxxxxxxxxxxxxxxx, cl@xxxxxxxxxx
Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
Dev Jain <dev.jain@xxxxxxx>
References: <20250304222018.615808-1-yang@xxxxxxxxxxxxxxxxxxxxxx>
<3750d3f8-17c6-4bb8-8107-215d442e4ec3@xxxxxxxxxxxxxxxxxxxxxx>
<2fb974bb-1470-4a5f-90d5-97456140c98f@xxxxxxx>
<22b53cff-00db-48f1-b1e8-b11a54ebb147@xxxxxxxxxxxxxxxxxxxxxx>
<4794885d-2e17-4bd8-bdf3-8ac37047e8ee@xxxxxxxxxxxxxxxxxxxxxx>
<5c6d9706-7684-4288-b630-c60b3766b13f@xxxxxxx>
<4d02978c-03c0-48fe-84eb-0f3fa0c54fea@xxxxxxxxxxxxxxxxxxxxxx>
<912c3126-8ba7-4c3a-b168-438f92e89217@xxxxxxx>
<2ab5f65c-b9dc-471c-9b61-70d765af285e@xxxxxxxxxxxxxxxxxxxxxx>
<239d4e93-7ab6-4fc9-b907-7ca9d71f81fd@xxxxxxx>
<1141d96c-f785-48ee-a0f6-9ec658cc11c2@xxxxxxxxxxxxxxxxxxxxxx>
<9cdb027c-27db-4195-825d-1d63bec1b69b@xxxxxxxxxxxxxxxxxxxxxx>
From: Ryan Roberts <ryan.roberts@xxxxxxx>
In-Reply-To: <9cdb027c-27db-4195-825d-1d63bec1b69b@xxxxxxxxxxxxxxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 28/05/2025 01:00, Yang Shi wrote:
> Hi Ryan,
>
> I got a new spin ready in my local tree on top of v6.15-rc4. I noticed there
> were some more comments on Miko's BBML2 patch, it looks like a new spin is
> needed. But AFAICT there should be no significant change to how I advertise
> AmpereOne BBML2 in my patches. We will keep using MIDR list to check whether
> BBML2 is advertised or not and the erratum seems still be needed to fix up
> AA64MMFR2 BBML2 bits for AmpereOne IIUC.
Yes, I agree this should not impact you too much.
>
> You also mentioned Dev was working on patches to have __change_memory_common()
> apply permission change on a contiguous range instead of on page basis (the
> status quo). But I have not seen the patches on mailing list yet. However I
> don't think this will result in any significant change to my patches either,
> particularly the split primitive and linear map repainting.
I think you would need Dev's series to be able to apply the permissions change
without needing to split the whole range to pte mappings? So I guess your change
must either be implementing something similar to what Dev is working on or you
are splitting the entire range to ptes? If the latter, then I'm not keen on that
approach.
Regarding the linear map repainting, I had a chat with Catalin, and he reminded
me of a potential problem; if you are doing the repainting with the machine
stopped, you can't allocate memory at that point; it's possible a CPU was inside
the allocator when it stopped. And I think you need to allocate intermediate
pgtables, right? Do you have a solution to that problem? I guess one approach
would be to figure out how much memory you will need and pre-allocate prior to
stoping the machine?
>
> So I plan to post v4 patches to the mailing list. We can focus on reviewing the
> split primitive and linear map repainting. Does it sound good to you?
That works assuming you have a solution for the above.
Thanks,
Ryan
>
> Thanks,
> Yang
>
>
> On 5/7/25 2:16 PM, Yang Shi wrote:
>>
>>
>> On 5/7/25 12:58 AM, Ryan Roberts wrote:
>>> On 05/05/2025 22:39, Yang Shi wrote:
>>>>
>>>> On 5/2/25 4:51 AM, Ryan Roberts wrote:
>>>>> On 14/04/2025 22:24, Yang Shi wrote:
>>>>>> On 4/14/25 6:03 AM, Ryan Roberts wrote:
>>>>>>> On 10/04/2025 23:00, Yang Shi wrote:
>>>>>>>> Hi Ryan,
>>>>>>>>
>>>>>>>> I know you may have a lot of things to follow up after LSF/MM. Just gently
>>>>>>>> ping,
>>>>>>>> hopefully we can resume the review soon.
>>>>>>> Hi, I'm out on holiday at the moment, returning on the 22nd April. But
>>>>>>> I'm very
>>>>>>> keen to move this series forward so will come back to you next week.
>>>>>>> (although
>>>>>>> TBH, I thought I was waiting for you to respond to me... :-| )
>>>>>>>
>>>>>>> FWIW, having thought about it a bit more, I think some of the suggestions I
>>>>>>> previously made may not have been quite right, but I'll elaborate next week.
>>>>>>> I'm
>>>>>>> keen to build a pgtable splitting primitive here that we can reuse with
>>>>>>> vmalloc
>>>>>>> as well to enable huge mappings by default with vmalloc too.
>>>>>> Sounds good. I think the patches can support splitting vmalloc page table
>>>>>> too.
>>>>>> Anyway we can discuss more after you are back. Enjoy your holiday.
>>>>> Hi Yang,
>>>>>
>>>>> Sorry I've taken so long to get back to you. Here's what I'm currently
>>>>> thinking:
>>>>> I'd eventually like to get to the point where the linear map and most vmalloc
>>>>> memory is mapped using the largest possible mapping granularity (i.e. block
>>>>> mappings at PUD/PMD, and contiguous mappings at PMD/PTE level).
>>>>>
>>>>> vmalloc has history with trying to do huge mappings by default; it ended up
>>>>> having to be turned into an opt-in feature (instead of the original opt-out
>>>>> approach) because there were problems with some parts of the kernel expecting
>>>>> page mappings. I think we might be able to overcome those issues on arm64 with
>>>>> BBML2.
>>>>>
>>>>> arm64 can already support vmalloc PUD and PMD block mappings, and I have a
>>>>> series (that should make v6.16) that enables contiguous PTE mappings in
>>>>> vmalloc
>>>>> too. But these are currently limited to when VM_ALLOW_HUGE is specified. To be
>>>>> able to use that by default, we need to be able to change permissions on
>>>>> sub-regions of an allocation, which is where BBML2 and your series come in.
>>>>> (there may be other things we need to solve as well; TBD).
>>>>>
>>>>> I think the key thing we need is a function that can take a page-aligned
>>>>> kernel
>>>>> VA, will walk to the leaf entry for that VA and if the VA is in the middle of
>>>>> the leaf entry, it will split it so that the VA is now on a boundary. This
>>>>> will
>>>>> work for PUD/PMD block entries and contiguous-PMD/contiguous-PTE entries. The
>>>>> function can assume BBML2 is present. And it will return 0 on success, -EINVAL
>>>>> if the VA is not mapped or -ENOMEM if it couldn't allocate a pgtable to
>>>>> perform
>>>>> the split.
>>>> OK, the v3 patches already handled page table allocation failure with returning
>>>> -ENOMEM and BUG_ON if it is not mapped because kernel assumes linear mapping
>>>> should be always present. It is easy to return -EINVAL instead of BUG_ON.
>>>> However I'm wondering what usecases you are thinking about? Splitting vmalloc
>>>> area may run into unmapped VA?
>>> I don't think BUG_ON is the right behaviour; crashing the kernel should be
>>> discouraged. I think even for vmalloc under correct conditions we shouldn't see
>>> any unmapped VA. But vmalloc does handle it gracefully today; see (e.g.)
>>> vunmap_pmd_range() which skips the pmd if its none.
>>>
>>>>> Then we can use that primitive on the start and end address of any range for
>>>>> which we need exact mapping boundaries (e.g. when changing permissions on part
>>>>> of linear map or vmalloc allocation, when freeing part of a vmalloc
>>>>> allocation,
>>>>> etc). This way we only split enough to ensure the boundaries are precise, and
>>>>> keep larger mappings inside the range.
>>>> Yeah, makes sense to me.
>>>>
>>>>> Next we need to reimplement __change_memory_common() to not use
>>>>> apply_to_page_range(), because that assumes page mappings only. Dev Jain has
>>>>> been working on a series that converts this to use walk_page_range_novma() so
>>>>> that we can change permissions on the block/contig entries too. That's not
>>>>> posted publicly yet, but it's not huge so I'll ask if he is comfortable with
>>>>> posting an RFC early next week.
>>>> OK, so the new __change_memory_common() will change the permission of page
>>>> table, right?
>>> It will change permissions of all the leaf entries in the range of VAs it is
>>> passed. Currently it assumes that all the leaf entries are PTEs. But we will
>>> generalize to support all the other types of leaf entries too.,
>>>
>>>> If I remember correctly, you suggested change permissions in
>>>> __create_pgd_mapping_locked() for v3. So I can disregard it?
>>> Yes I did. I think this made sense (in my head at least) because in the context
>>> of the linear map, all the PFNs are contiguous so it kind-of makes sense to
>>> reuse that infrastructure. But it doesn't generalize to vmalloc because vmalloc
>>> PFNs are not contiguous. So for that reason, I think it's preferable to have an
>>> independent capability.
>>
>> OK, sounds good to me.
>>
>>>
>>>> The current code assumes the address range passed in by change_memory_common()
>>>> is *NOT* physically contiguous so __change_memory_common() handles page table
>>>> permission on page basis. I'm supposed Dev's patches will handle this then my
>>>> patch can safely assume the linear mapping address range for splitting is
>>>> physically contiguous too otherwise I can't keep large mappings inside the
>>>> range. Splitting vmalloc area doesn't need to worry about this.
>>> I'm not sure I fully understand the point you're making here...
>>>
>>> Dev's series aims to use walk_page_range_novma() similar to riscv's
>>> implementation so that it can walk a VA range and update the permissions on each
>>> leaf entry it visits, regadless of which level the leaf entry is at. This
>>> doesn't make any assumption of the physical contiguity of neighbouring leaf
>>> entries in the page table.
>>>
>>> So if we are changing permissions on the linear map, we have a range of VAs to
>>> walk and convert all the leaf entries, regardless of their size. The same goes
>>> for vmalloc... But for vmalloc, we will also want to change the underlying
>>> permissions in the linear map, so we will have to figure out the contiguous
>>> pieces of the linear map and call __change_memory_common() for each; there is
>>> definitely some detail to work out there!
>>
>> Yes, this is my point. When changing underlying linear map permission for
>> vmalloc, the linear map address may be not contiguous. This is why
>> change_memory_common() calls __change_memory_common() on page basis.
>>
>> But how Dev's patch work should have no impact on how I implement the split
>> primitive by thinking it further. It should be the caller's responsibility to
>> make sure __create_pgd_mapping_locked() is called for contiguous linear map
>> address range.
>>
>>>
>>>>> You'll still need to repaint the whole linear map with page mappings for the
>>>>> case !BBML2 case, but I'm hoping __create_pgd_mapping_locked() (potentially
>>>>> with
>>>>> minor modifications?) can do that repainting on the live mappings; similar to
>>>>> how you are doing it in v3.
>>>> Yes, when repainting I need to split the page table all the way down to PTE
>>>> level. A simple flag should be good enough to tell
>>>> __create_pgd_mapping_locked()
>>>> do the right thing off the top of my head.
>>> Perhaps it may be sufficient to reuse the NO_BLOCK_MAPPINGS and NO_CONT_MAPPINGS
>>> flags? For example, if you are find a leaf mapping and NO_BLOCK_MAPPINGS is set,
>>> then you need to split it?
>>
>> Yeah, sounds feasible. Anyway I will figure it out.
>>
>>>
>>>>> Miko's BBML2 series should hopefully get imminently queued for v6.16.
>>>> Great! Anyway my series is based on his advertising BBML2 patch.
>>>>
>>>>> So in summary, what I'm asking for your large block mapping the linear map
>>>>> series is:
>>>>> Â Â Â - Paint linear map using blocks/contig if boot CPU supports BBML2
>>>>> Â Â Â - Repaint linear map using page mappings if secondary CPUs don't
>>>>> support BBML2
>>>> OK, I just need to add some simple tweak to split down to PTE level to v3.
>>>>
>>>>> Â Â Â - Integrate Dev's __change_memory_common() series
>>>> OK, I think I have to do my patches on top of it. Because Dev's patch need
>>>> guarantee the linear mapping address range is physically contiguous.
>>>>
>>>>> Â Â Â - Create primitive to ensure mapping entry boundary at a given page-
>>>>> aligned VA
>>>>> Â Â Â - Use primitive when changing permissions on linear map region
>>>> Sure.
>>>>
>>>>> This will be mergable on its own, but will also provide a great starting base
>>>>> for adding huge-vmalloc-by-default.
>>>>>
>>>>> What do you think?
>>>> Definitely makes sense to me.
>>>>
>>>> If I remember correctly, we still have some unsolved comments/questions for v3
>>>> in my replies on March 17, particularly:
>>>> https://lore.kernel.org/linux-arm-kernel/2b715836-b566-4a9e-
>>>> b344-9401fa4c0feb@xxxxxxxxxxxxxxxxxxxxxx/
>>> Ahh sorry about that. I'll take a look now...
>>
>> No problem.
>>
>> Thanks,
>> Yang
>>
>>>
>>> Thanks,
>>> Ryan
>>>
>>>> Thanks,
>>>> Yang
>>>>
>>>>> Thanks,
>>>>> Ryan
>>>>>
>>>>>
>>>>>> Thanks,
>>>>>> Yang
>>>>>>
>>>>>>> Thanks,
>>>>>>> Ryan
>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Yang
>>>>>>>>
>>>>>>>>
>>>>>>>> On 3/13/25 10:40 AM, Yang Shi wrote:
>>>>>>>>> On 3/13/25 10:36 AM, Ryan Roberts wrote:
>>>>>>>>>> On 13/03/2025 17:28, Yang Shi wrote:
>>>>>>>>>>> Hi Ryan,
>>>>>>>>>>>
>>>>>>>>>>> I saw Miko posted a new spin of his patches. There are some slight
>>>>>>>>>>> changes
>>>>>>>>>>> that
>>>>>>>>>>> have impact to my patches (basically check the new boot parameter).
>>>>>>>>>>> Do you
>>>>>>>>>>> prefer I rebase my patches on top of his new spin right now then restart
>>>>>>>>>>> review
>>>>>>>>>>> from the new spin or review the current patches then solve the new
>>>>>>>>>>> review
>>>>>>>>>>> comments and rebase to Miko's new spin together?
>>>>>>>>>> Hi Yang,
>>>>>>>>>>
>>>>>>>>>> Sorry I haven't got to reviewing this version yet, it's in my queue!
>>>>>>>>>>
>>>>>>>>>> I'm happy to review against v3 as it is. I'm familiar with Miko's series
>>>>>>>>>> and am
>>>>>>>>>> not too bothered about the integration with that; I think it's pretty
>>>>>>>>>> straight
>>>>>>>>>> forward. I'm more interested in how you are handling the splitting,
>>>>>>>>>> which I
>>>>>>>>>> think is the bulk of the effort.
>>>>>>>>> Yeah, sure, thank you.
>>>>>>>>>
>>>>>>>>>> I'm hoping to get to this next week before heading out to LSF/MM the
>>>>>>>>>> following
>>>>>>>>>> week (might I see you there?)
>>>>>>>>> Unfortunately I can't make it this year. Have a fun!
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> Yang
>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>> Ryan
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> Thanks,
>>>>>>>>>>> Yang
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On 3/4/25 2:19 PM, Yang Shi wrote:
>>>>>>>>>>>> Changelog
>>>>>>>>>>>> =========
>>>>>>>>>>>> v3:
>>>>>>>>>>>> Â Â Â Â Â Â * Rebased to v6.14-rc4.
>>>>>>>>>>>> Â Â Â Â Â Â * Based on Miko's BBML2 cpufeature patch (https://
>>>>>>>>>>>> lore.kernel.org/
>>>>>>>>>>>> linux-
>>>>>>>>>>>> arm-kernel/20250228182403.6269-3-miko.lenczewski@xxxxxxx/).
>>>>>>>>>>>> Â Â Â Â Â Â Â Â Also included in this series in order to have the complete
>>>>>>>>>>>> patchset.
>>>>>>>>>>>> Â Â Â Â Â Â * Enhanced __create_pgd_mapping() to handle split as well per
>>>>>>>>>>>> Ryan.
>>>>>>>>>>>> Â Â Â Â Â Â * Supported CONT mappings per Ryan.
>>>>>>>>>>>> Â Â Â Â Â Â * Supported asymmetric system by splitting kernel linear
>>>>>>>>>>>> mapping if
>>>>>>>>>>>> such
>>>>>>>>>>>> Â Â Â Â Â Â Â Â system is detected per Ryan. I don't have such system to test,
>>>>>>>>>>>> so the
>>>>>>>>>>>> Â Â Â Â Â Â Â Â testing is done by hacking kernel to call linear mapping
>>>>>>>>>>>> repainting
>>>>>>>>>>>> Â Â Â Â Â Â Â Â unconditionally. The linear mapping doesn't have any block and
>>>>>>>>>>>> cont
>>>>>>>>>>>> Â Â Â Â Â Â Â Â mappings after booting.
>>>>>>>>>>>>
>>>>>>>>>>>> RFC v2:
>>>>>>>>>>>> Â Â Â Â Â Â * Used allowlist to advertise BBM lv2 on the CPUs which can
>>>>>>>>>>>> handle TLB
>>>>>>>>>>>> Â Â Â Â Â Â Â Â conflict gracefully per Will Deacon
>>>>>>>>>>>> Â Â Â Â Â Â * Rebased onto v6.13-rc5
>>>>>>>>>>>> Â Â Â Â Â Â * https://lore.kernel.org/linux-arm-
>>>>>>>>>>>> kernel/20250103011822.1257189-1-
>>>>>>>>>>>> yang@xxxxxxxxxxxxxxxxxxxxxx/
>>>>>>>>>>>>
>>>>>>>>>>>> RFC v1: https://lore.kernel.org/lkml/20241118181711.962576-1-
>>>>>>>>>>>> yang@xxxxxxxxxxxxxxxxxxxxxx/
>>>>>>>>>>>>
>>>>>>>>>>>> Description
>>>>>>>>>>>> ===========
>>>>>>>>>>>> When rodata=full kernel linear mapping is mapped by PTE due to arm's
>>>>>>>>>>>> break-before-make rule.
>>>>>>>>>>>>
>>>>>>>>>>>> A number of performance issues arise when the kernel linear map is
>>>>>>>>>>>> using
>>>>>>>>>>>> PTE entries due to arm's break-before-make rule:
>>>>>>>>>>>> Â Â Â Â Â Â - performance degradation
>>>>>>>>>>>> Â Â Â Â Â Â - more TLB pressure
>>>>>>>>>>>> Â Â Â Â Â Â - memory waste for kernel page table
>>>>>>>>>>>>
>>>>>>>>>>>> These issues can be avoided by specifying rodata=on the kernel command
>>>>>>>>>>>> line but this disables the alias checks on page table permissions and
>>>>>>>>>>>> therefore compromises security somewhat.
>>>>>>>>>>>>
>>>>>>>>>>>> With FEAT_BBM level 2 support it is no longer necessary to
>>>>>>>>>>>> invalidate the
>>>>>>>>>>>> page table entry when changing page sizes. This allows the kernel to
>>>>>>>>>>>> split large mappings after boot is complete.
>>>>>>>>>>>>
>>>>>>>>>>>> This patch adds support for splitting large mappings when FEAT_BBM
>>>>>>>>>>>> level 2
>>>>>>>>>>>> is available and rodata=full is used. This functionality will be used
>>>>>>>>>>>> when modifying page permissions for individual page frames.
>>>>>>>>>>>>
>>>>>>>>>>>> Without FEAT_BBM level 2 we will keep the kernel linear map using PTEs
>>>>>>>>>>>> only.
>>>>>>>>>>>>
>>>>>>>>>>>> If the system is asymmetric, the kernel linear mapping may be repainted
>>>>>>>>>>>> once
>>>>>>>>>>>> the BBML2 capability is finalized on all CPUs. See patch #6 for more
>>>>>>>>>>>> details.
>>>>>>>>>>>>
>>>>>>>>>>>> We saw significant performance increases in some benchmarks with
>>>>>>>>>>>> rodata=full without compromising the security features of the kernel.
>>>>>>>>>>>>
>>>>>>>>>>>> Testing
>>>>>>>>>>>> =======
>>>>>>>>>>>> The test was done on AmpereOne machine (192 cores, 1P) with 256GB
>>>>>>>>>>>> memory and
>>>>>>>>>>>> 4K page size + 48 bit VA.
>>>>>>>>>>>>
>>>>>>>>>>>> Function test (4K/16K/64K page size)
>>>>>>>>>>>>       - Kernel boot. Kernel needs change kernel linear mapping
>>>>>>>>>>>> permission at
>>>>>>>>>>>> Â Â Â Â Â Â Â Â boot stage, if the patch didn't work, kernel typically didn't
>>>>>>>>>>>> boot.
>>>>>>>>>>>> Â Â Â Â Â Â - Module stress from stress-ng. Kernel module load change
>>>>>>>>>>>> permission
>>>>>>>>>>>> for
>>>>>>>>>>>> Â Â Â Â Â Â Â Â linear mapping.
>>>>>>>>>>>> Â Â Â Â Â Â - A test kernel module which allocates 80% of total memory via
>>>>>>>>>>>> vmalloc(),
>>>>>>>>>>>> Â Â Â Â Â Â Â Â then change the vmalloc area permission to RO, this also
>>>>>>>>>>>> change
>>>>>>>>>>>> linear
>>>>>>>>>>>> Â Â Â Â Â Â Â Â mapping permission to RO, then change it back before
>>>>>>>>>>>> vfree(). Then
>>>>>>>>>>>> launch
>>>>>>>>>>>> Â Â Â Â Â Â Â Â a VM which consumes almost all physical memory.
>>>>>>>>>>>> Â Â Â Â Â Â - VM with the patchset applied in guest kernel too.
>>>>>>>>>>>> Â Â Â Â Â Â - Kernel build in VM with guest kernel which has this series
>>>>>>>>>>>> applied.
>>>>>>>>>>>> Â Â Â Â Â Â - rodata=on. Make sure other rodata mode is not broken.
>>>>>>>>>>>> Â Â Â Â Â Â - Boot on the machine which doesn't support BBML2.
>>>>>>>>>>>>
>>>>>>>>>>>> Performance
>>>>>>>>>>>> ===========
>>>>>>>>>>>> Memory consumption
>>>>>>>>>>>> Before:
>>>>>>>>>>>> MemTotal:Â Â Â Â Â Â 258988984 kB
>>>>>>>>>>>> MemFree:Â Â Â Â Â Â Â 254821700 kB
>>>>>>>>>>>>
>>>>>>>>>>>> After:
>>>>>>>>>>>> MemTotal:Â Â Â Â Â Â 259505132 kB
>>>>>>>>>>>> MemFree:Â Â Â Â Â Â Â 255410264 kB
>>>>>>>>>>>>
>>>>>>>>>>>> Around 500MB more memory are free to use. The larger the machine, the
>>>>>>>>>>>> more memory saved.
>>>>>>>>>>>>
>>>>>>>>>>>> Performance benchmarking
>>>>>>>>>>>> * Memcached
>>>>>>>>>>>> We saw performance degradation when running Memcached benchmark with
>>>>>>>>>>>> rodata=full vs rodata=on. Our profiling pointed to kernel TLB
>>>>>>>>>>>> pressure.
>>>>>>>>>>>> With this patchset we saw ops/sec is increased by around 3.5%, P99
>>>>>>>>>>>> latency is reduced by around 9.6%.
>>>>>>>>>>>> The gain mainly came from reduced kernel TLB misses. The kernel TLB
>>>>>>>>>>>> MPKI is reduced by 28.5%.
>>>>>>>>>>>>
>>>>>>>>>>>> The benchmark data is now on par with rodata=on too.
>>>>>>>>>>>>
>>>>>>>>>>>> * Disk encryption (dm-crypt) benchmark
>>>>>>>>>>>> Ran fio benchmark with the below command on a 128G ramdisk (ext4) with
>>>>>>>>>>>> disk
>>>>>>>>>>>> encryption (by dm-crypt).
>>>>>>>>>>>> fio --directory=/data --random_generator=lfsr --norandommap --
>>>>>>>>>>>> randrepeat 1 \
>>>>>>>>>>>> Â Â Â Â Â Â Â Â --status-interval=999 --rw=write --bs=4k --loops=1 --
>>>>>>>>>>>> ioengine=sync \
>>>>>>>>>>>> Â Â Â Â Â Â Â Â --iodepth=1 --numjobs=1 --fsync_on_close=1 --
>>>>>>>>>>>> group_reporting --
>>>>>>>>>>>> thread \
>>>>>>>>>>>> Â Â Â Â Â Â Â Â --name=iops-test-job --eta-newline=1 --size 100G
>>>>>>>>>>>>
>>>>>>>>>>>> The IOPS is increased by 90% - 150% (the variance is high, but the
>>>>>>>>>>>> worst
>>>>>>>>>>>> number of good case is around 90% more than the best number of bad
>>>>>>>>>>>> case).
>>>>>>>>>>>> The bandwidth is increased and the avg clat is reduced proportionally.
>>>>>>>>>>>>
>>>>>>>>>>>> * Sequential file read
>>>>>>>>>>>> Read 100G file sequentially on XFS (xfs_io read with page cache
>>>>>>>>>>>> populated).
>>>>>>>>>>>> The bandwidth is increased by 150%.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> MikoÅ?aj Lenczewski (1):
>>>>>>>>>>>> Â Â Â Â Â Â Â Â Â Â arm64: Add BBM Level 2 cpu feature
>>>>>>>>>>>>
>>>>>>>>>>>> Yang Shi (5):
>>>>>>>>>>>> Â Â Â Â Â Â Â Â Â Â arm64: cpufeature: add AmpereOne to BBML2 allow list
>>>>>>>>>>>> Â Â Â Â Â Â Â Â Â Â arm64: mm: make __create_pgd_mapping() and helpers non-void
>>>>>>>>>>>> Â Â Â Â Â Â Â Â Â Â arm64: mm: support large block mapping when rodata=full
>>>>>>>>>>>> Â Â Â Â Â Â Â Â Â Â arm64: mm: support split CONT mappings
>>>>>>>>>>>> Â Â Â Â Â Â Â Â Â Â arm64: mm: split linear mapping if BBML2 is not supported on
>>>>>>>>>>>> secondary
>>>>>>>>>>>> CPUs
>>>>>>>>>>>>
>>>>>>>>>>>>      arch/arm64/Kconfig                 | 11 +++++
>>>>>>>>>>>>      arch/arm64/include/asm/cpucaps.h   | 2 +
>>>>>>>>>>>> Â Â Â Â Â arch/arm64/include/asm/cpufeature.h | 15 ++++++
>>>>>>>>>>>>      arch/arm64/include/asm/mmu.h       | 4 ++
>>>>>>>>>>>>      arch/arm64/include/asm/pgtable.h   | 12 ++++-
>>>>>>>>>>>>      arch/arm64/kernel/cpufeature.c     | 95 ++++++++++++++++++++++++
>>>>>>>>>>>> ++++++
>>>>>>>>>>>> +++++++
>>>>>>>>>>>>      arch/arm64/mm/mmu.c                | 397 ++++++++++++++++++++
>>>>>>>>>>>> ++++
>>>>>>>>>>>> ++++++
>>>>>>>>>>>> ++++
>>>>>>>>>>>> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>>>>>>>>>>> +++++
>>>>>>>>>>>> +++++
>>>>>>>>>>>> ++++++++++++++++++++++-------------------
>>>>>>>>>>>>      arch/arm64/mm/pageattr.c           | 37 ++++++++++++---
>>>>>>>>>>>>      arch/arm64/tools/cpucaps           | 1 +
>>>>>>>>>>>> Â Â Â Â Â 9 files changed, 518 insertions(+), 56 deletions(-)
>>>>>>>>>>>>
>>>>>>>>>>>>
>>
>
Return-Path: <linux-kernel+bounces-665504-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id B70F441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:15:42 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 6298D1BC58A3
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:15:55 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 763A62857EA;
Wed, 28 May 2025 13:15:35 +0000 (UTC)
Received: from mail-io1-f79.google.com (mail-io1-f79.google.com [209.85.166.79])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6518F1E3DC8
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:15:33 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.166.79
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438135; cv=none; b=ghZHJvK1S4bCDHowrwxkMXPd2wVLeKtfz9x7U0yYnbMJr3NP0Mn7CU8UY53W7Yn8JoXITfzTfTzXx71N1H5EhMuBquWLyQyCGj+j+aJAsJKyi3WR191+9ll6qNyBcH6om9Me3tupZZSMdrSO2gRkFYtjfiVDa169shlccBD9Sc8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438135; c=relaxed/simple;
bh=PIRdrkn4tXQ/Nrngd/B6xUH/lNsjoWD2K2FQZhbNEiw=;
h=MIME-Version:Date:Message-ID:Subject:From:To:Content-Type; b=lcayHtPEND3IUtfRLqXfBiEG9vKialfCjen5SS31qRVW+scGDm2ixfOr52TY+AEMfN+WEXE5CEm2/3SoPSfOXNTFigiwiCW19hT/EGEMuZkAepC4BeRutaIW5N49F5F+BiGfZo03qU2QZxLbA0bqmKGljsniCTonSXf0mSRuAWo=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=syzkaller.appspotmail.com; spf=pass smtp.mailfrom=M3KW2WVRGUFZ5GODRSRYTGD7.apphosting.bounces.google.com; arc=none smtp.client-ip=209.85.166.79
Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=syzkaller.appspotmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=M3KW2WVRGUFZ5GODRSRYTGD7.apphosting.bounces.google.com
Received: by mail-io1-f79.google.com with SMTP id ca18e2360f4ac-86cda073958so299212239f.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 06:15:33 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748438132; x=1749042932;
h=to:from:subject:message-id:date:mime-version:x-gm-message-state
:from:to:cc:subject:date:message-id:reply-to;
bh=GX4lpjdQUN+6EDguSjn+NQtMuXJztbQghOCQZ9PhaHQ=;
b=lAntByJcmOySsA0HvZ9pcJqrxJmD2yyGZRQ4USy2l9hJ/dcLABBzYKo294MdeqA+LQ
6/7diTg+opIAGsV8nYT0aLOkNE3TUVDmfpURu2vyDGSbELjJ8WxfbcQIeGigSxWLFPGt
Kafpet0Rd0qAxU26E4fva22sMbnAo6ipjEY45AWSnk6c7sZcHuXyXatW6YrevT2TyMLp
5+ABFMV+YSi64jYMWRqIsDguc+NzBk+00dCuNThTY6WQH2F0Jk90s/P0VxLsQBjAMQFx
YbsG5biIYj1WolDdQgHEpz/HON7H5l1oaw0UXuucYsfDxy2T1XPCZtTOf0p7fBC2nEhp
1YLg==
X-Forwarded-Encrypted: i=1; AJvYcCW34tpcpAQo24IiQHduviOEB3lqE9DSs7+IRyVyllKRzWTGNd/Tn04Abtrc1aAoxkxyqqPtnAPjLeyxpg0=@vger.kernel.org
X-Gm-Message-State: AOJu0Yw8HUto+uCms7/IeV3c3CQulJPibpQS/yS6Lyhz4Je0w5zNzBMC
M+SWV5ivYxb24xvQXcpwgj9GD4STto/bMCWy8yW7pkny8mnTglerocMXvHiLjK0fxULCSD7IrGP
i4QMfFu2fjuTEERrlANJflDPEpr0oWXpi3DMNuwmyEjNBuPFU8Hq0b1X+ZNA=
X-Google-Smtp-Source: AGHT+IHJDVCZxm4KIQ1DwJLE+6C3Ib6KsrUY/6QQGyvT43fuL7kZcOJ4XOaZXovq85X5staTd1+teEXQo7NcDSb96lK4fAAkeT0C
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-Received: by 2002:a05:6e02:1a22:b0:3dc:79e5:e696 with SMTP id
e9e14a558f8ab-3dd8b01b114mr18743335ab.11.1748438132458; Wed, 28 May 2025
06:15:32 -0700 (PDT)
Date: Wed, 28 May 2025 06:15:32 -0700
X-Google-Appengine-App-Id: s~syzkaller
X-Google-Appengine-App-Id-Alias: syzkaller
Message-ID: <68370c74.a70a0220.253bc2.00cd.GAE@xxxxxxxxxx>
Subject: [syzbot] [bcachefs?] UBSAN: shift-out-of-bounds in __bch2_bkey_unpack_key
From: syzbot <syzbot+cfd994b9cdf00446fd54@xxxxxxxxxxxxxxxxxxxxxxxxx>
To: kent.overstreet@xxxxxxxxx, linux-bcachefs@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, syzkaller-bugs@xxxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
X-Spam-Status: No, score=-3.0 required=5.0 tests=FROM_LOCAL_HEX,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hello,
syzbot found the following issue on:
HEAD commit: 785cdec46e92 Merge tag 'x86-core-2025-05-25' of git://git...
git tree: upstream
console+strace: https://syzkaller.appspot.com/x/log.txt?x=10b5adf4580000
kernel config: https://syzkaller.appspot.com/x/.config?x=cf9956a5a76267c7
dashboard link: https://syzkaller.appspot.com/bug?extid=cfd994b9cdf00446fd54
compiler: Debian clang version 20.1.6 (++20250514063057+1e4d39e07757-1~exp1~20250514183223.118), Debian LLD 20.1.6
syz repro: https://syzkaller.appspot.com/x/repro.syz?x=11e626d4580000
C reproducer: https://syzkaller.appspot.com/x/repro.c?x=15e626d4580000
Downloadable assets:
disk image: https://storage.googleapis.com/syzbot-assets/0672bd8fdf4a/disk-785cdec4.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/df460fea958f/vmlinux-785cdec4.xz
kernel image: https://storage.googleapis.com/syzbot-assets/7ae41e61549e/bzImage-785cdec4.xz
mounted in repro: https://storage.googleapis.com/syzbot-assets/8a6de6365ccd/mount_0.gz
The issue was bisected to:
commit cd3cdb1ef706a1ac725194d81858d58375739b25
Author: Kent Overstreet <kent.overstreet@xxxxxxxxx>
Date: Tue Apr 22 13:14:19 2025 +0000
bcachefs: Single err message for btree node reads
bisection log: https://syzkaller.appspot.com/x/bisect.txt?x=138c6df4580000
final oops: https://syzkaller.appspot.com/x/report.txt?x=104c6df4580000
console output: https://syzkaller.appspot.com/x/log.txt?x=178c6df4580000
IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+cfd994b9cdf00446fd54@xxxxxxxxxxxxxxxxxxxxxxxxx
Fixes: cd3cdb1ef706 ("bcachefs: Single err message for btree node reads")
bcachefs (loop0): sb invalid before write: Unsupported superblock version_min 0.0: (unknown version) (min 0.9: (unknown version), max 1.28: inode_has_case_insensitive)
emergency read only at seq 10
------------[ cut here ]------------
UBSAN: shift-out-of-bounds in fs/bcachefs/bkey.c:163:16
shift exponent 4294967127 is too large for 64-bit type 'u64' (aka 'unsigned long long')
CPU: 0 UID: 0 PID: 5832 Comm: read_btree_node Not tainted 6.15.0-syzkaller-01958-g785cdec46e92 #0 PREEMPT(full)
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/07/2025
Call Trace:
<TASK>
dump_stack_lvl+0x189/0x250 lib/dump_stack.c:120
ubsan_epilogue+0xa/0x40 lib/ubsan.c:231
__ubsan_handle_shift_out_of_bounds+0x386/0x410 lib/ubsan.c:492
get_inc_field fs/bcachefs/bkey.c:163 [inline]
__bch2_bkey_unpack_key+0xdc4/0xe10 fs/bcachefs/bkey.c:284
__bch2_bkey_compat+0x4db/0xbd0 fs/bcachefs/bkey_methods.c:480
bch2_bkey_compat fs/bcachefs/bkey_methods.h:134 [inline]
validate_bset_keys+0x6c1/0x1390 fs/bcachefs/btree_io.c:983
bch2_btree_node_read_done+0x18c8/0x4f60 fs/bcachefs/btree_io.c:1211
btree_node_read_work+0x426/0xe30 fs/bcachefs/btree_io.c:1400
bch2_btree_node_read+0x887/0x29f0 fs/bcachefs/btree_io.c:-1
bch2_btree_node_fill+0xd12/0x14f0 fs/bcachefs/btree_cache.c:994
bch2_btree_node_get_noiter+0xa2c/0x1000 fs/bcachefs/btree_cache.c:1261
found_btree_node_is_readable fs/bcachefs/btree_node_scan.c:85 [inline]
try_read_btree_node fs/bcachefs/btree_node_scan.c:220 [inline]
read_btree_nodes_worker+0x1319/0x1e20 fs/bcachefs/btree_node_scan.c:269
kthread+0x711/0x8a0 kernel/kthread.c:464
ret_from_fork+0x4e/0x80 arch/x86/kernel/process.c:148
ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245
</TASK>
---[ end trace ]---
---
This report is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzkaller@xxxxxxxxxxxxxxxx.
syzbot will keep track of this issue. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.
For information about bisection process see: https://goo.gl/tpsmEJ#bisection
If the report is already addressed, let syzbot know by replying with:
#syz fix: exact-commit-title
If you want syzbot to run the reproducer, reply with:
#syz test: git://repo/address.git branch-or-commit-hash
If you attach or paste a git patch, syzbot will apply it before testing.
If you want to overwrite report's subsystems, reply with:
#syz set subsystems: new-subsystem
(See the list of subsystem names on the web dashboard)
If the report is a duplicate of another one, reply with:
#syz dup: exact-subject-of-another-report
If you want to undo deduplication, reply with:
#syz undup
Return-Path: <linux-kernel+bounces-665505-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 8189141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:17:54 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 69331165845
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:17:42 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id A1B18286D5D;
Wed, 28 May 2025 13:17:29 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="f5pa5OML"
Received: from relay4-d.mail.gandi.net (relay4-d.mail.gandi.net [217.70.183.196])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2EBB31AC891;
Wed, 28 May 2025 13:17:25 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.196
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438248; cv=none; b=iZrJyYhcLrTLpuvxTsR+5t2nxHqt677QrgSv4taKW1nVqI0KijS9pArmLav4QfEnY+ba5riFw3dIVc440XNHiv8u1F4L7kAo1shUenvHGs+tFiViPL9eDsVDMh13llnNQAqsW4omAQtIe+1KNt4eISWUa8yZp47Zmo9QSJfgMis=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438248; c=relaxed/simple;
bh=XyqXMFLpjQUAOlJ4J5EDK/pH8DkmZweApWK3C83/s9M=;
h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=lTwtom7UDk55/6MI0z4C4+F/pyV0v0TSW/kNCxSY7+5AP0t7qQpdC1f4/IGu8YpJGJN31zuJnWHJjSRMOOT7/Lyz/cpr4Rw/dBQMqZa7dBuxZA5RPeeHXDuF3ANT82I52wyGgn2Ye5xZ/yYLVDL5dVirbYnSgEGsr6sx/NFOkm8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=f5pa5OML; arc=none smtp.client-ip=217.70.183.196
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com
Received: by mail.gandi.net (Postfix) with ESMTPSA id 6A39F43B39;
Wed, 28 May 2025 13:17:16 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1;
t=1748438238;
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:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=jhe4l8G7g9CuqxjAYyb4mOmnurWtrgOLitbau5hV8GQ=;
b=f5pa5OML32eamqT/6wf2JaYwGb0E5OBrE0uNEUr8vEb16KKhlfBTpZDLQHmDC/oAIXmR9t
vcX791GXDtrvMNye5H6KAGRHoyE3dUpWmtObyq6EskJBei0K/i9c1Tr4phPLQAOKuAzPHA
vi77pjqXAe+bz+l4KaFY9wvE47MJaWIyyfYpJEChna3qJI07jAqbeQEv/h0M1CjLFQOmes
rfK8CxgR7KVVBBVCs63WpBYxdL6QLOFCThoNCHt306T6lLopESzqT6oLss/sDpaI5Oj10w
mONgTGbx2jnBGcMlY5QDvJTbNctGKdnZTt47lbkAlN3/KKQg5tt6FiHHCwkZYQ==
Date: Wed, 28 May 2025 15:17:15 +0200
From: Kory Maincent <kory.maincent@xxxxxxxxxxx>
To: Paolo Abeni <pabeni@xxxxxxxxxx>
Cc: Andrew Lunn <andrew@xxxxxxx>, Oleksij Rempel <o.rempel@xxxxxxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet
<edumazet@xxxxxxxxxx>, Jakub Kicinski <kuba@xxxxxxxxxx>, Jonathan Corbet
<corbet@xxxxxxx>, Donald Hunter <donald.hunter@xxxxxxxxx>, Rob Herring
<robh@xxxxxxxxxx>, Andrew Lunn <andrew+netdev@xxxxxxx>, Simon Horman
<horms@xxxxxxxxxx>, Heiner Kallweit <hkallweit1@xxxxxxxxx>, Russell King
<linux@xxxxxxxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>, Conor
Dooley <conor+dt@xxxxxxxxxx>, Liam Girdwood <lgirdwood@xxxxxxxxx>, Mark
Brown <broonie@xxxxxxxxxx>, Thomas Petazzoni
<thomas.petazzoni@xxxxxxxxxxx>, netdev@xxxxxxxxxxxxxxx,
linux-doc@xxxxxxxxxxxxxxx, Kyle Swenson <kyle.swenson@xxxxxxxx>, Dent
Project <dentproject@xxxxxxxxxxxxxxxxxxx>, kernel@xxxxxxxxxxxxxx, Maxime
Chevallier <maxime.chevallier@xxxxxxxxxxx>, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, Krzysztof Kozlowski
<krzysztof.kozlowski@xxxxxxxxxx>
Subject: Re: [PATCH net-next v12 00/13] Add support for PSE budget
evaluation strategy
Message-ID: <20250528151715.59b8f738@kmaincent-XPS-13-7390>
In-Reply-To: <8b3cdc35-8bcc-41f6-84ec-aee50638b929@xxxxxxxxxx>
References: <20250524-feature_poe_port_prio-v12-0-d65fd61df7a7@xxxxxxxxxxx>
<8b3cdc35-8bcc-41f6-84ec-aee50638b929@xxxxxxxxxx>
Organization: bootlin
X-Mailer: Claws Mail 4.2.0 (GTK 3.24.41; x86_64-pc-linux-gnu)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
X-GND-State: clean
X-GND-Score: -100
X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtddtgddvfeefieculddtuddrgeefvddrtddtmdcutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfitefpfffkpdcuggftfghnshhusghstghrihgsvgenuceurghilhhouhhtmecufedtudenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhepfffhvfevuffkjghfohfogggtgfesthhqredtredtjeenucfhrhhomhepmfhorhihucforghinhgtvghnthcuoehkohhrhidrmhgrihhntggvnhhtsegsohhothhlihhnrdgtohhmqeenucggtffrrghtthgvrhhnpefguddtfeevtddugeevgfevtdfgvdfhtdeuleetffefffffhffgteekvdefudeiieenucffohhmrghinhepsghoohhtlhhinhdrtghomhenucfkphepledtrdekledrudeifedruddvjeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeeltddrkeelrdduieefrdduvdejpdhhvghlohepkhhmrghinhgtvghnthdqigfrufdqudefqdejfeeltddpmhgrihhlfhhrohhmpehkohhrhidrmhgrihhntggvnhhtsegsohhothhlihhnrdgtohhmpdhnsggprhgtphhtthhopedvkedprhgtphhtthhopehprggsvghnihesrhgvughhrghtrdgtohhmpdhrtghpthhtoheprghnughrvgifsehluhhnnhdrtghhpdhrtghpthhtohepohdrrhgvmhhpvghlsehpvghnghhuthhrohhnihigrdguvgdprhgtphhtthhopegurghvvghmsegurghvvghmlhhofhhtrdhnvghtp
dhrtghpthhtohepvgguuhhmrgiivghtsehgohhoghhlvgdrtghomhdprhgtphhtthhopehkuhgsrgeskhgvrhhnvghlrdhorhhgpdhrtghpthhtoheptghorhgsvghtsehlfihnrdhnvghtpdhrtghpthhtohepughonhgrlhgurdhhuhhnthgvrhesghhmrghilhdrtghomh
X-GND-Sasl: kory.maincent@xxxxxxxxxxx
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Le Wed, 28 May 2025 09:31:20 +0200,
Paolo Abeni <pabeni@xxxxxxxxxx> a =C3=A9crit :
> On 5/24/25 12:56 PM, Kory Maincent wrote:
> > From: Kory Maincent (Dent Project) <kory.maincent@xxxxxxxxxxx>
> >=20
> > This series brings support for budget evaluation strategy in the PSE
> > subsystem. PSE controllers can set priorities to decide which ports sho=
uld
> > be turned off in case of special events like over-current.
> >=20
> > This patch series adds support for two budget evaluation strategy.
> > 1. Static Method:
> >=20
> > This method involves distributing power based on PD classification.
> > It=E2=80=99s straightforward and stable, the PSE core keeping track =
of the
> > budget and subtracting the power requested by each PD=E2=80=99s clas=
s.
> >=20
> > Advantages: Every PD gets its promised power at any time, which
> > guarantees reliability.
> >=20
> > Disadvantages: PD classification steps are large, meaning devices
> > request much more power than they actually need. As a result, the po=
wer
> > supply may only operate at, say, 50% capacity, which is inefficient =
and
> > wastes money.
> >=20
> > 2. Dynamic Method:
> >=20
> > To address the inefficiencies of the static method, vendors like
> > Microchip have introduced dynamic power budgeting, as seen in the
> > PD692x0 firmware. This method monitors the current consumption per p=
ort
> > and subtracts it from the available power budget. When the budget is
> > exceeded, lower-priority ports are shut down.
> >=20
> > Advantages: This method optimizes resource utilization, saving costs.
> >=20
> > Disadvantages: Low-priority devices may experience instability.
> >=20
> > The UAPI allows adding support for software port priority mode managed =
from
> > userspace later if needed.
> >=20
> > Patches 1-2: Add support for interrupt event report in PSE core, ethtool
> > and ethtool specs.
> > Patch 3: Adds support for interrupt and event report in TPS23881 driver.
> > Patches 4,5: Add support for PSE power domain in PSE core and ethtool.
> > Patches 6-8: Add support for budget evaluation strategy in PSE core,
> > ethtool and ethtool specs.
> > Patches 9-11: Add support for port priority and power supplies in PD692=
x0
> > drivers.
> > Patches 12,13: Add support for port priority in TPS23881 drivers.
> >=20
> > Signed-off-by: Kory Maincent (Dent Project) <kory.maincent@xxxxxxxxxxx>=
=20
>=20
> I'm sorry, even if this has been posted (just) before the merge window,
> I think an uAPI extension this late is a bit too dangerous, please
> repost when net-next will reopen after the merge window.
Ok I will.
Would it be possible to review the netlink part of the series? (patch 2, 7 =
and
8)=20
Regard,
--=20
K=C3=B6ry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com
Return-Path: <linux-kernel+bounces-665506-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 0E3AA41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:18:02 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id A513E1BC0916
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:18:13 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 77F942874EF;
Wed, 28 May 2025 13:17:38 +0000 (UTC)
Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8EE391AC891;
Wed, 28 May 2025 13:17:35 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.176.79.56
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438258; cv=none; b=NLk6BLu6V51y8YY3kRIUj/eeEEYJHaS5I3/fIdgM8fyG017C4gTqf3m/u7QTG5R2BJmI8ug2kaZ+UOHwc8Je0MgXBiIADMNBUdWODPy+SZmcMHwwHrDg7ro9oLCeGJuAZQOgcljX5a1kHOYFIS5Sm6Yu37+8Hd+P+6OPgeM0oi8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438258; c=relaxed/simple;
bh=GZfblSZ2sTL48y/a1XWqWbkhf8ZyUELSfA0kRxh1n+w=;
h=Date:From:To:CC:Subject:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=UNb6yqFdA8ailBL4xT18fup61h7p69CzLR5pRH5AGBJS457MSFNZSMFLDv58X2tDTz7LI2KGGUs75K6PmbUFpRk4N8xazxuCisgL3MT6mVBs+VEHf5rXzTBasm/UQKPSpV8xburmUB/YE4rFZGBR5xwQnrkOisjgpeJYwzcYsJ4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=185.176.79.56
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com
Received: from mail.maildlp.com (unknown [172.18.186.31])
by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4b6qmV1qghz6M4Mc;
Wed, 28 May 2025 21:17:30 +0800 (CST)
Received: from frapeml500008.china.huawei.com (unknown [7.182.85.71])
by mail.maildlp.com (Postfix) with ESMTPS id DCE7114034D;
Wed, 28 May 2025 21:17:32 +0800 (CST)
Received: from localhost (10.203.177.66) by frapeml500008.china.huawei.com
(7.182.85.71) with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Wed, 28 May
2025 15:17:31 +0200
Date: Wed, 28 May 2025 14:17:30 +0100
From: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
To: Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx>
CC: Marc Zyngier <maz@xxxxxxxxxx>, Thomas Gleixner <tglx@xxxxxxxxxxxxx>, "Rob
Herring" <robh@xxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>, "Conor
Dooley" <conor+dt@xxxxxxxxxx>, Catalin Marinas <catalin.marinas@xxxxxxx>,
Will Deacon <will@xxxxxxxxxx>, Arnd Bergmann <arnd@xxxxxxxx>, "Sascha
Bischoff" <sascha.bischoff@xxxxxxx>, Timothy Hayes <timothy.hayes@xxxxxxx>,
"Liam R. Howlett" <Liam.Howlett@xxxxxxxxxx>, Mark Rutland
<mark.rutland@xxxxxxx>, Jiri Slaby <jirislaby@xxxxxxxxxx>,
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>, <linux-kernel@xxxxxxxxxxxxxxx>,
<devicetree@xxxxxxxxxxxxxxx>
Subject: Re: [PATCH v4 19/26] arm64: Add support for GICv5 GSB barriers
Message-ID: <20250528141730.0000232e@xxxxxxxxxx>
In-Reply-To: <20250513-gicv5-host-v4-19-b36e9b15a6c3@xxxxxxxxxx>
References: <20250513-gicv5-host-v4-0-b36e9b15a6c3@xxxxxxxxxx>
<20250513-gicv5-host-v4-19-b36e9b15a6c3@xxxxxxxxxx>
X-Mailer: Claws Mail 4.3.0 (GTK 3.24.42; x86_64-w64-mingw32)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: lhrpeml500003.china.huawei.com (7.191.162.67) To
frapeml500008.china.huawei.com (7.182.85.71)
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, 13 May 2025 19:48:12 +0200
Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx> wrote:
> The GICv5 architecture introduces two barriers instructions
> (GSB SYS, GSB ACK) that are used to manage interrupt effects.
>
> Rework macro used to emit the SB barrier instruction and implement
> the GSB barriers on top of it.
>
> Suggested-by: Marc Zyngier <maz@xxxxxxxxxx>
> Signed-off-by: Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx>
> Cc: Will Deacon <will@xxxxxxxxxx>
> Cc: Catalin Marinas <catalin.marinas@xxxxxxx>
> Cc: Marc Zyngier <maz@xxxxxxxxxx>
> ---
> arch/arm64/include/asm/barrier.h | 3 +++
> arch/arm64/include/asm/sysreg.h | 10 +++++++---
> 2 files changed, 10 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm64/include/asm/barrier.h b/arch/arm64/include/asm/barrier.h
> index 1ca947d5c93963d33fe8fb02d6037fc71bd9fd7a..f5801b0ba9e9e7e0433f16ffedf0ec7dfb3e358e 100644
> --- a/arch/arm64/include/asm/barrier.h
> +++ b/arch/arm64/include/asm/barrier.h
> @@ -44,6 +44,9 @@
> SB_BARRIER_INSN"nop\n", \
> ARM64_HAS_SB))
>
> +#define gsb_ack() asm volatile(GSB_ACK_BARRIER_INSN : : : "memory")
> +#define gsb_sys() asm volatile(GSB_SYS_BARRIER_INSN : : : "memory")
> +
> #ifdef CONFIG_ARM64_PSEUDO_NMI
> #define pmr_sync() \
> do { \
> diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysreg.h
> index 2639d3633073de10f5040a7efff059021f847530..e7734f90bb723bfbd8be99f16dd6d6fdc7fa57e8 100644
> --- a/arch/arm64/include/asm/sysreg.h
> +++ b/arch/arm64/include/asm/sysreg.h
> @@ -112,10 +112,14 @@
> /* Register-based PAN access, for save/restore purposes */
> #define SYS_PSTATE_PAN sys_reg(3, 0, 4, 2, 3)
>
> -#define __SYS_BARRIER_INSN(CRm, op2, Rt) \
> - __emit_inst(0xd5000000 | sys_insn(0, 3, 3, (CRm), (op2)) | ((Rt) & 0x1f))
> +#define __SYS_BARRIER_INSN(op0, op1, CRn, CRm, op2, Rt) \
> + __emit_inst(0xd5000000 | \
> + sys_insn((op0), (op1), (CRn), (CRm), (op2)) | \
> + ((Rt) & 0x1f))
Perhaps indent as something like the following for readbility?
#define __SYS_BARRIER_INSN(op0, op1, CRn, CRm, op2, Rt) \
__emit_inst(0xd5000000 | \
sys_insn((op0), (op1), (CRn), (CRm), (op2)) | \
((Rt) & 0x1f))
>
> -#define SB_BARRIER_INSN __SYS_BARRIER_INSN(0, 7, 31)
> +#define SB_BARRIER_INSN __SYS_BARRIER_INSN(0, 3, 3, 0, 7, 31)
> +#define GSB_SYS_BARRIER_INSN __SYS_BARRIER_INSN(1, 0, 12, 0, 0, 31)
> +#define GSB_ACK_BARRIER_INSN __SYS_BARRIER_INSN(1, 0, 12, 0, 1, 31)
>
> #define SYS_DC_ISW sys_insn(1, 0, 7, 6, 2)
> #define SYS_DC_IGSW sys_insn(1, 0, 7, 6, 4)
>
Return-Path: <linux-kernel+bounces-665507-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 9621641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:18:13 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 07BE61BC1611
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:18:26 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 73C38286D62;
Wed, 28 May 2025 13:17:44 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="xDjHDgkj"
Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 058B223CB
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:17:41 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438263; cv=none; b=Uck40K7VD51YhEGBojJPbLvja9oYeKlgBxbF+PTChK4wggbO2LEvBdTml8t3eRESIJaXuiZIAN/pwYhYWdM6B+dlkW0HC+4pHehGSR8opv9AmHq2qkqK16zRweTkUQYUtKlOxQYmpbdtErqEVNXEhfAw6daypZ/zPf7gAFXWZBU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438263; c=relaxed/simple;
bh=+8JeJ0WuWhzvAWlP/eWg/yGnQ5jEOIHa1Vy8lkmwQAI=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=jhJ8+TV5efEY5Z1LfTE7nafQZUcbfHqw/CkuUqPlTo+43ZgytXQcqFDiVN/uG9tkVBlBRUjm6l4Z2ilzhfR8RYs0Ko1qsJwhodNQGiewnGdb8AWUqdvc3SFyzxAxqz6gwOwIIgVBYGRVWJFbWg5TpSbUpvsjRBhTYEGVMOPoZ0Q=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=xDjHDgkj; arc=none smtp.client-ip=209.85.221.41
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org
Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-3a4c4e6a0ccso3367504f8f.3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 06:17:41 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=linaro.org; s=google; t=1748438260; x=1749043060; darn=vger.kernel.org;
h=content-transfer-encoding:in-reply-to:from:content-language
:references:cc:to:subject:user-agent:mime-version:date:message-id
:from:to:cc:subject:date:message-id:reply-to;
bh=etuOIVUU4x5SySaTzeLNRaqDZ3hUnhSaZPYuWZNFHOo=;
b=xDjHDgkjiAQIndoaIzHn1Uc+K0cJAoizjAHQicY87NOfQD5c0YoHvu2tbGQdjCruNx
7juAQuxEPoyLd5uIIDL50t1opayQZ0DtZ66rjInnvEqIAIEQoGY0124sRqZVh/cwfdMv
1mUS5lWPJrrfAiBIBaOKCjq3crMOSgV8Sl65fmW4jabg6Grk40B3m0cOvA7Ox8AL/8j1
FRnuOdWsBfMooh1W2E5LlShZsquGXCuxCw4j+LWxBx1qtA+zsGzcKaeEfcezWW7Vzhpj
FSvM8A5AiuVALahUlTILjAC1SEq+rwfKfQ12arGDcIqsNGlb/g4eQEb6U5nKraJQPQXE
oQnQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748438260; x=1749043060;
h=content-transfer-encoding:in-reply-to:from:content-language
:references:cc:to:subject:user-agent:mime-version:date:message-id
:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
bh=etuOIVUU4x5SySaTzeLNRaqDZ3hUnhSaZPYuWZNFHOo=;
b=Om3MpgdvZxtw6Z0svc8ez/mSz97KT9FGROMo/g9dyhPZIIDmI2TROSGR7pGOrreiGe
yqCqExwXt+ycXl84DxVRRBF3q7BnU1l24yg3S9G0nmfK+r/oBRWb9x/biPaMmBZ+3wOT
WC/fyjHo2rVcX9ALAteoiw+yAnLqFvgDVafvt20mFYJhV2xSTPnSgPoOE9RFvwerYaaD
OL1jN5iSu7DZBfoUS4P9nwa7S9j4cqps0GbT7UsTK7mBdmWh+M9BLT7rg4nczpNSZGHC
UUWm8y4Jc6FF+fVTQ0pVKNcOhtTULRwdjut/86NxwisAm0wQhYlrUBZtmSb/GHmZqcBj
XN6A==
X-Forwarded-Encrypted: i=1; AJvYcCWXTz0K+7aCaW4by36yCnISiDUJGMcuW0CUvZfkEId6XO83lQg9yfY1tWXjaahoS0qMVT3XXOwCGka1+No=@vger.kernel.org
X-Gm-Message-State: AOJu0YzHaP4Zm5ZNgnsJOquwUpez9Psmj7/dEqqBKNI3SJdNMxbvd+kV
pDArCzq9m79xz73ePQnl5bhHCy1l90lCql+wROY5JDxn7rcrEN2HLcAQ8ipM4Gw9PVA=
X-Gm-Gg: ASbGncsP/PHv795AeNxnJ1Un9yn/wCJUchiedlJE9VaBbpR52ECx5n8mqq/8gntXex1
s6ICurLqvQ0uD0ZZgGG8JoGd1e2Ee0dTi9X/lOou0TkcGDYHoa+GSkFXc80/uHX7GjsmR2+MTWj
sMjLqzp/PNsnbJOfWA7VJCtrDWeEvo3oo5YwOiAsvT2lZsYDyS7m0rplo45zdnqK/KYzjVwzuja
o17J7RVl9/MQvceeAxHGHZr00lrTJ+jN8T72smzRvs81GOhbHbqWo6q5yjvnxUwWIOCpyEvTuYN
C0NsVQSDfSd/38hC24CYj3COOqEo9eebGT9KLr6aWMOGOZjt+3e+6kioFTfdDpfuGAOqVf4f1CX
6zv9nX5ZlcSmkg5T0Eg0h9m5ZWA==
X-Google-Smtp-Source: AGHT+IF6k9N6RDrHL9CWqquYKN5znltPLRFbYrRqu24xJR1k0tX7fObXTd2EmsKCVpIINagQQXmgGQ==
X-Received: by 2002:a05:6000:4308:b0:3a4:ed1e:405b with SMTP id ffacd0b85a97d-3a4ed1e40c4mr749522f8f.46.1748438260235;
Wed, 28 May 2025 06:17:40 -0700 (PDT)
Received: from [192.168.10.46] (146725694.box.freepro.com. [130.180.211.218])
by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-3a4eac6ed4dsm1509868f8f.17.2025.05.28.06.17.38
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 06:17:39 -0700 (PDT)
Message-ID: <a6d64948-e713-4a50-9d4e-6de02a550d06@xxxxxxxxxx>
Date: Wed, 28 May 2025 15:17:38 +0200
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH v4 0/2] Add the NXP S32 Watchdog
To: Guenter Roeck <linux@xxxxxxxxxxxx>, wim@xxxxxxxxxxxxxxxxxx
Cc: linux-watchdog@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
S32@xxxxxxx, ghennadi.procopciuc@xxxxxxx, thomas.fossati@xxxxxxxxxx,
robh@xxxxxxxxxx, krzk+dt@xxxxxxxxxx, conor+dt@xxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx, alexandru-catalin.ionita@xxxxxxx
References: <20250410082616.1855860-1-daniel.lezcano@xxxxxxxxxx>
<650c336b-a698-42f5-ad59-7dcdf24667f4@xxxxxxxxxx>
<2a8e1ae7-2a8a-4cd8-b699-c010019c766e@xxxxxxxxxxxx>
Content-Language: en-US
From: Daniel Lezcano <daniel.lezcano@xxxxxxxxxx>
In-Reply-To: <2a8e1ae7-2a8a-4cd8-b699-c010019c766e@xxxxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Guenter, Wim,
On 14/05/2025 20:09, Guenter Roeck wrote:
[ ... ]
> AFAICS the patches do have Reviewed-by: tags, so this is just waiting
> for Wim
> to pick it up.
I fetched the watchdog tree and saw it was updated from May 23th but I
don't see this watchdog series.
Is it possible to give a status about it ?
Thanks
-- Daniel
--
<http://www.linaro.org/> Linaro.org â?? Open source software for ARM SoCs
Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog
Return-Path: <linux-kernel+bounces-665508-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id A4E9141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:18:51 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id EDAAD4E2F32
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:18:27 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 834E92857E6;
Wed, 28 May 2025 13:18:10 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="EyQhrn7j"
Received: from casper.infradead.org (casper.infradead.org [90.155.50.34])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3505123CB;
Wed, 28 May 2025 13:18:08 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438289; cv=none; b=iv8vbPE+6URVp+mL0sdWjZ0b3wBNhquIzsd55JgTLG5z22fEQpyxKEK/RKMnzbNFXOX27KfRfKlXrUYv71iFNo+JlqKDEIZC2l01pIyuVsb93jo5O7mNQqwdIB6BIAbZOXSkKwcSWyBscfXRHSHlSQ3yIhDYdLserpaTlACrbSc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438289; c=relaxed/simple;
bh=JyQ/g7Kg5zGeYkYRJRGiz+qenkQhnkpuUKlYzzPl8U4=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=k10uxEPoW4O1DGTReVXmhqk2H7NJQUiLrzTLY/PqtDoCKVogPLnDC5hdp1IM4NePk0HAwPSA6zEjIgSUSxkG4Tu3SJFaX+xKf1GrUzN8l4eImPEG0NGTi+F/d1NVvJq6xLRg9jaYTNs7CCku47Kd1xhIaXPD3J7cBGgPDnVZYiU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=EyQhrn7j; arc=none smtp.client-ip=90.155.50.34
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org
Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version:
References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To:
Content-Transfer-Encoding:Content-ID:Content-Description;
bh=AVELsSfT+NEsd6GMqBswfz7jVJ/MdJvCvrkyarXhQCQ=; b=EyQhrn7jpycft0MeKIZGHyWnJS
ibq1GqgdSdrU8tsQyawklHn+12vyeXjBzV6dery6l2SD8cOTNx5/oB1HNcGEL27lWhewnxWPye9Js
nA79OsaIKp86WbLInP4ThC6poftelv6zYQUUzgfcoTLjXC6WNJkI5k9klFu3NHap01jEkk9HkQwIF
1727Xlwu+i8z1/1hu9w0iIHPk1ptBXXpHj7GNzKXQip+nCN7GB54WuQaRC65UPCcEp8Yt9Cv/ibPp
4gfdH+rM+/abnV9+WYPqErR8508sW8sjHs6pNJ4MCMF1J3d1B+PElS4/YArtLUsBm97tBYSup/C9n
BerYQpKw==;
Received: from 77-249-17-252.cable.dynamic.v4.ziggo.nl ([77.249.17.252] helo=noisy.programming.kicks-ass.net)
by casper.infradead.org with esmtpsa (Exim 4.98.2 #2 (Red Hat Linux))
id 1uKGfS-0000000DfhL-3vdd;
Wed, 28 May 2025 13:18:03 +0000
Received: by noisy.programming.kicks-ass.net (Postfix, from userid 1000)
id D91C9300155; Wed, 28 May 2025 15:17:59 +0200 (CEST)
Date: Wed, 28 May 2025 15:17:59 +0200
From: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
To: "Rafael J. Wysocki" <rjw@xxxxxxxxxxxxx>
Cc: x86 Maintainers <x86@xxxxxxxxxx>, LKML <linux-kernel@xxxxxxxxxxxxxxx>,
Linux PM <linux-pm@xxxxxxxxxxxxxxx>, Len Brown <lenb@xxxxxxxxxx>,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>, Borislav Petkov <bp@xxxxxxx>,
Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
Artem Bityutskiy <artem.bityutskiy@xxxxxxxxxxxxxxx>,
"Gautham R. Shenoy" <gautham.shenoy@xxxxxxx>,
Ingo Molnar <mingo@xxxxxxxxxx>,
Todd Brandt <todd.e.brandt@xxxxxxxxxxxxxxx>
Subject: Re: [PATCH v1 0/2] x86/smp: Fix power regression introduced by
commit 96040f7273e2
Message-ID: <20250528131759.GA39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <2006806.PYKUYFuaPT@xxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <2006806.PYKUYFuaPT@xxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 02:53:13PM +0200, Rafael J. Wysocki wrote:
> Hi Everyone,
>
> Commit 96040f7273e2 ("x86/smp: Eliminate mwait_play_dead_cpuid_hint()")
> that shipped in 6.15 introduced a nasty power regression on systems that
> start with "nosmt" in the kernel command line which prevents it from entering
> deep package idle states (for instance, PC10) later on. Idle power, including
> power in suspend-to-idle, goes up significantly on those systems as a result.
>
> Address this by reverting commit 96040f7273e2 (patch [1/2]) and using a
> different approach, which is to retain mwait_play_dead_cpuid_hint() and
> still prefer it to hlt_play_dead() in case it is needed when cpuidle is
> not available, but prefer cpuidle_play_dead() to it by default (patch [2/2]).
I don't understand. The revert says the reason it regresses is that it
goes into play_dead before cpuidle is initialized. The fix is then to
call cpuidle first.
But if cpuidle isn't initialized yet, how does that fix anything?
Return-Path: <linux-kernel+bounces-665509-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 7216E41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:19:11 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 6699C16B163
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:19:03 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 60C38284B37;
Wed, 28 May 2025 13:18:53 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="swqB3TSB"
Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 17349279903;
Wed, 28 May 2025 13:18:50 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438332; cv=none; b=gFkpm5dbBshHgN6LsuzYaNBWcf+AhqvMCXR8ic8ZVDLTvdcZfOhXmfceRMie3oXPVBoEPo7km2cMiAwGNYeFGpeOoYRCAqbVdOX4+rQOvvkxwa/++lOy7q6/2jZix+iFu2gRq/3qIP8gvby02Apgy3fi0KbjKAS51NUlWK+5/7E=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438332; c=relaxed/simple;
bh=7HyDbaSY7vbBw4ErHLqBEibTA7gjG9fAwM9QL6eQWEE=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=udMn2d7KxXelz7xFMPWr3zspSUSMmT7HDlbE8aF+6iGWQJtoKISiMRLOYvfjvvMb+xLAy8Dx8q+rArzhvyhk4QLapr+bXLxzgs3OrHU2/fu4aOqwaPL2J/udguXjSE41zenrPqFyXAl8xdIaAiqSOO7kQMpi9PSiDCVNxjzFaC0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=swqB3TSB; arc=none smtp.client-ip=148.163.156.1
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com
Received: from pps.filterd (m0356517.ppops.net [127.0.0.1])
by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S2XrjN012354;
Wed, 28 May 2025 13:18:45 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc
:content-transfer-encoding:content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to; s=pp1; bh=i7TrvR
j1Oh8eIIYCbVDuZ00tzac1Amn0ypbuJeHijFo=; b=swqB3TSB/cWJG8cQzXKMJb
uGGBXFDlHgDAs2WkR7xFdENjsZ7CUZ2d+bLeKV1H0u63Srbo3Qjmfr5hJ5xLbcj8
WXqssT+eo1Abhhf1C+FPXp38wB1sfT3VlCLEtnmBqnZqe6PHm7aTb2xe3IvyJTPW
N8s28tnNZXys7tqWiMQe3dc/9Gy1n4FOOD2Lq/QQZkzuSMxqgDQTzDXXr3QfdhkI
xwpmfh7yrNrULImZr7Dgs59qttHKFGgSjagMvKu/XuMgsLFrr1et07aQO+DbZPFj
Xa07F5o8pLINVX69ZqHUqO6bYeajXVgQmDY+YlCcweLE1m29qcWFccWWx+uI9feg
==
Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221])
by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 46wgsgd19b-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 13:18:45 +0000 (GMT)
Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1])
by ppma13.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 54SAhupU021309;
Wed, 28 May 2025 13:18:44 GMT
Received: from smtprelay06.fra02v.mail.ibm.com ([9.218.2.230])
by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 46utnmqds9-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 13:18:44 +0000
Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106])
by smtprelay06.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 54SDIgXZ22086032
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Wed, 28 May 2025 13:18:42 GMT
Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1])
by IMSVA (Postfix) with ESMTP id 9583120043;
Wed, 28 May 2025 13:18:42 +0000 (GMT)
Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1])
by IMSVA (Postfix) with ESMTP id B454E20040;
Wed, 28 May 2025 13:18:40 +0000 (GMT)
Received: from linux.ibm.com (unknown [9.124.209.136])
by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTPS;
Wed, 28 May 2025 13:18:40 +0000 (GMT)
Date: Wed, 28 May 2025 18:48:37 +0530
From: Vishal Chourasia <vishalc@xxxxxxxxxxxxx>
To: Michal =?iso-8859-1?Q?Koutn=FD?= <mkoutny@xxxxxxxx>
Cc: Tejun Heo <tj@xxxxxxxxxx>, Johannes Weiner <hannes@xxxxxxxxxxx>,
Jonathan Corbet <corbet@xxxxxxx>, cgroups@xxxxxxxxxxxxxxx,
linux-doc@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH] Documentation: cgroup: clarify controller enabling
semantics
Message-ID: <aDcNLTA2JfoLXdIM@xxxxxxxxxxxxx>
References: <20250527085335.256045-2-vishalc@xxxxxxxxxxxxx>
<vzdrzqphpjnvrfynx7ajdrgfraavebig4edipde3kulxp2euqh@7p32zx7ql6k6>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <vzdrzqphpjnvrfynx7ajdrgfraavebig4edipde3kulxp2euqh@7p32zx7ql6k6>
X-TM-AS-GCONF: 00
X-Authority-Analysis: v=2.4 cv=OIIn3TaB c=1 sm=1 tr=0 ts=68370d35 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=8nJEP1OIZ-IA:10 a=dt9VzEwgFbYA:10 a=VnNF1IyMAAAA:8 a=sJNq94hGihU767Vwfd0A:9 a=3ZKOabzyN94A:10 a=wPNLvfGTeEIA:10
X-Proofpoint-GUID: gZa7q5qYtC7tZPcdzV8irWfpZBYMoIy-
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDExNCBTYWx0ZWRfX2i0x2PtMVyNe WNd4x+G9moReVzqwHJVaW2rnDGAFW7ON7PDNgUJuHf1CpZ0u1346LDUK9PWNBUH6kuRJUf2jGFm Dy4g4lYq8Xt+I3wr6U09pbljwqD84IHGVD5j3B9VMLXz1NG8TpCj+E3tw8KLJPhC7VVm8bej4L1
4bj7dZvbaPoKPOkP+Z/hiDmk9+7nkTU3Pgk2vWAmlFGSFHHC0sWsj/5EV8hr6mpO/39OCBtAMa2 q0ndco+fi8G86dOfc5GfpT89+xXE9tGeL40E9MEyAdTnu8F3+WNVA8HaZt531bq0GBT0mbxf1hB 0DJOeI/JutGdo7YonxPMwhiinqzmltpKB18gqPS/dGJEMfyLzB0RAdTNDA6xgpGz/sZKMCwGryJ
u+bJ7aCGxsuwq+ZMNVKqhsbk21BDz5XV2K5CIkAQ8qLP13qgyR2Skg6z9m3iu2gDtJRdtL3+
X-Proofpoint-ORIG-GUID: gZa7q5qYtC7tZPcdzV8irWfpZBYMoIy-
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 spamscore=0
bulkscore=0 priorityscore=1501 adultscore=0 lowpriorityscore=0
suspectscore=0 phishscore=0 malwarescore=0 clxscore=1015 mlxscore=0
mlxlogscore=478 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280114
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 11:58:50AM +0200, Michal Koutný wrote:
> Hello.
>
> On Tue, May 27, 2025 at 02:23:36PM +0530, Vishal Chourasia <vishalc@xxxxxxxxxxxxx> wrote:
> > --- a/Documentation/admin-guide/cgroup-v2.rst
> > +++ b/Documentation/admin-guide/cgroup-v2.rst
> > @@ -438,8 +438,8 @@ Controlling Controllers
> > Enabling and Disabling
> > ~~~~~~~~~~~~~~~~~~~~~~
> >
> > -Each cgroup has a "cgroup.controllers" file which lists all
> > -controllers available for the cgroup to enable::
> > +Each cgroup has a cgroup.controllers file, which lists all the controllers
> > +available for that cgroup and which can be enabled for its children.
> >
> > # cat cgroup.controllers
> > cpu io memory
>
> Honestly, I see little difference between the two resulting formulations.
> Could you perhaps add an example where the documentation confused you or
> behavior was not what you expected based on the docs?
Hello Michal,
The part that was confused me, was the meaning behind controller being
available vs. enabled in a cgroup.
Though, the documentation does mention what it means for a controller to
be enabled in a cgroup later in the text. But at the point of the
change it is unclear.
Thanks
Vishal
>
> Thanks,
> Michal
Return-Path: <linux-kernel+bounces-665510-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 7A60D41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:19:36 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 90EA63BB537
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:19:15 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 9C90021773D;
Wed, 28 May 2025 13:19:30 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b="W7OKqz5R"
Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4D4D3246778
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:19:27 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438369; cv=none; b=pK/BPV8MVUci/2iOgoy4SW2TXNtSPsrJxJKNvPZg7fGePc9Lm9BqHsAUFjJtb2QTyuleCTbO0vedm9hcPXTUXLsOtC/qa8ciUaGspiTntf3p5ubeq/Xn5NgyHu0Ovvqna7Pc3jcj8QMNxcJ/K9eQNPKcpnFPdLa6YlIQQYxJc/w=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438369; c=relaxed/simple;
bh=ra9kGNznn5FPL7pCbL0i/6dtHCz3ipBftUYBX6kmPr0=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=lacBOFvLahDxCZ7O9bBdYzB06AWZtrS4SDQmVx6pZU/hG1ZA89yAEhpnU9fAwIbMM4RLJgT7FQKYmrTc77QwofWOJMJY/yzkxPjwAXvzaCRCxvip2dpRw1vz+vb/8QzYgtx21OKFG0l/BaZ12zEPtLlsT1SkcmPs8P7nPXuWhwM=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b=W7OKqz5R; arc=none smtp.client-ip=209.85.218.49
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com
Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-ad55d6aeb07so110482666b.0
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 06:19:26 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=suse.com; s=google; t=1748438365; x=1749043165; darn=vger.kernel.org;
h=in-reply-to:autocrypt:from:content-language:references:cc:to
:subject:user-agent:mime-version:date:message-id:from:to:cc:subject
:date:message-id:reply-to;
bh=ra9kGNznn5FPL7pCbL0i/6dtHCz3ipBftUYBX6kmPr0=;
b=W7OKqz5RqEELdXHOMTicwBV9zLH7M3ZcISDm52IOWzrlejHwCXkyjPQWzGER9n+9VQ
OV8HwfMHD9qu3VHBUbSj0ufnNBqTFV13LnraWntfUA+HHf+NhSg0PJZbCfj3r2Pi6t+y
yMzwJ0eDItu1fdfFEkXSVBQO0avj/ScmUXGasZkWpUPGVbfqWc0wxi9UbQP2gOUZrLcn
sAaDfUvrZDQeJNL18ozjvQQJuXYpEgLUeAxepBTokJHMjID7cc24jr2fWMApXyMvBiBR
E/sSc8jxe3Pz50H+xGLVobCmI79AxMA09gMXb4R+MbA0S6PaIP5ZUBIgXMlU8+UPdiB7
FG0w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748438365; x=1749043165;
h=in-reply-to:autocrypt:from:content-language:references:cc:to
:subject:user-agent:mime-version:date:message-id:x-gm-message-state
:from:to:cc:subject:date:message-id:reply-to;
bh=ra9kGNznn5FPL7pCbL0i/6dtHCz3ipBftUYBX6kmPr0=;
b=EKqxji0FqVRDeWfbBjp6UZzgFHENcmgg1DlzImbhsDLMK7cRWSI+Zc1AjGlhX6wNTh
fsjyhy9TrLAUMrh55wizgjlHdXoEquIivgRg4837Cu0q1jgBo0KPttEsJ296mv6aCUEJ
kWD6S7NWMQgq2Obhi40kYvJ54HrOlnt2IsyL6KeNbmo9Oc5FnZIND6yPw1dfnsTGFSaE
AkLlB/nzEcwPpWUX0YLcV8P9HSShibLKfgBYaLH8zsTYUjB076RV7L1D3qHHP47n14Sb
NRqXGL+dP8J4+8NYkHQgoy1FhYRR8bRhDMH++0vVfQiwPoVUySvReU15/riYaZWwbJyA
sPAQ==
X-Gm-Message-State: AOJu0YywWoZsUV6JC4z8Evvozr5hXZ7hbWmjepmsB7NRhd9qeeISgdKC
fIqJRzsFn8vDPEvvSmUSiMONyh8eYqoJNKqy7PjdbGIKCuqIE3+6oebOfBDU9cqrmPM=
X-Gm-Gg: ASbGncvLrkMPsHUqo6I5GL9dhVopqewIabW4LowrnfRCT2Sz3TtCpnnBzcRqQZdUS5Y
y0aBJFK3bYkh8opYbTgUZHW1cHIjihPFo7EYp75mrMwn+9xkxY027oKuGQFtFLcg95JXsOwOyVA
DfSOpqD14df+38AHQkHjit4oI5kBbJ2hOV7BxIKXSbbnFZ+WjMcRsRTzBctPUPzDxoGSfp3a0rR
+QWEdOYj1Y87FSMyAGe/jX0CBeSO14/O1UGS0yZQuocogXRIDWJQEf6KYYZaHtwNLoPFgH/2O2r
OM3iXo/IarlN3KY/lXGzf9Vjw7BZ+JnXqIYMClCikeT1bv2SffcaGLdhUSidv0K2cs7v2TsEUAW
05JtiSE9ladjmT6FRZBKW9xEGzZo6N+77SKY5KERpKhL2H5kn96jJIWqyRenOb0trpWe16j2lhd
tO
X-Google-Smtp-Source: AGHT+IEoIHZkDhKtCpn+u5SK67h73HcbRYyn3rxoXUr8468+Zku53ZeUuW31cQhw2Dxf8WwALXvanw==
X-Received: by 2002:a17:907:2cc3:b0:ad8:9257:5728 with SMTP id a640c23a62f3a-ad8925758ccmr590305466b.27.1748438365378;
Wed, 28 May 2025 06:19:25 -0700 (PDT)
Received: from ?IPV6:2003:e5:872a:8800:5c7b:1ac1:4fa0:423b? (p200300e5872a88005c7b1ac14fa0423b.dip0.t-ipconnect.de. [2003:e5:872a:8800:5c7b:1ac1:4fa0:423b])
by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad8a19acb33sm107462066b.1.2025.05.28.06.19.24
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 06:19:25 -0700 (PDT)
Message-ID: <044f0048-95bb-4822-978e-a23528f3891f@xxxxxxxx>
Date: Wed, 28 May 2025 15:19:24 +0200
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 3/3] x86/alternative: make kernel ITS thunks read-only
To: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx, x86@xxxxxxxxxx, xin@xxxxxxxxx,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>,
Borislav Petkov <bp@xxxxxxxxx>, Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
"H. Peter Anvin" <hpa@xxxxxxxxx>, stable@xxxxxxxxxxxxxxx
References: <20250528123557.12847-1-jgross@xxxxxxxx>
<20250528123557.12847-4-jgross@xxxxxxxx>
<20250528131052.GZ39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Content-Language: en-US
From: =?UTF-8?B?SsO8cmdlbiBHcm/Dnw==?= <jgross@xxxxxxxx>
Autocrypt: addr=jgross@xxxxxxxx; keydata=
xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOB
ycWxw3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJve
dYm8Of8Zd621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJ
NwQpd369y9bfIhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvx
XP3FAp2pkW0xqG7/377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEB
AAHNH0p1ZXJnZW4gR3Jvc3MgPGpncm9zc0BzdXNlLmNvbT7CwHkEEwECACMFAlOMcK8CGwMH
CwkIBwMCAQYVCAIJCgsEFgIDAQIeAQIXgAAKCRCw3p3WKL8TL8eZB/9G0juS/kDY9LhEXseh
mE9U+iA1VsLhgDqVbsOtZ/S14LRFHczNd/Lqkn7souCSoyWsBs3/wO+OjPvxf7m+Ef+sMtr0
G5lCWEWa9wa0IXx5HRPW/ScL+e4AVUbL7rurYMfwCzco+7TfjhMEOkC+va5gzi1KrErgNRHH
kg3PhlnRY0Udyqx++UYkAsN4TQuEhNN32MvN0Np3WlBJOgKcuXpIElmMM5f1BBzJSKBkW0Jc
Wy3h2Wy912vHKpPV/Xv7ZwVJ27v7KcuZcErtptDevAljxJtE7aJG6WiBzm+v9EswyWxwMCIO
RoVBYuiocc51872tRGywc03xaQydB+9R7BHPzsBNBFOMcBYBCADLMfoA44MwGOB9YT1V4KCy
vAfd7E0BTfaAurbG+Olacciz3yd09QOmejFZC6AnoykydyvTFLAWYcSCdISMr88COmmCbJzn
sHAogjexXiif6ANUUlHpjxlHCCcELmZUzomNDnEOTxZFeWMTFF9Rf2k2F0Tl4E5kmsNGgtSa
aMO0rNZoOEiD/7UfPP3dfh8JCQ1VtUUsQtT1sxos8Eb/HmriJhnaTZ7Hp3jtgTVkV0ybpgFg
w6WMaRkrBh17mV0z2ajjmabB7SJxcouSkR0hcpNl4oM74d2/VqoW4BxxxOD1FcNCObCELfIS
auZx+XT6s+CE7Qi/c44ibBMR7hyjdzWbABEBAAHCwF8EGAECAAkFAlOMcBYCGwwACgkQsN6d
1ii/Ey9D+Af/WFr3q+bg/8v5tCknCtn92d5lyYTBNt7xgWzDZX8G6/pngzKyWfedArllp0Pn
fgIXtMNV+3t8Li1Tg843EXkP7+2+CQ98MB8XvvPLYAfW8nNDV85TyVgWlldNcgdv7nn1Sq8g
HwB2BHdIAkYce3hEoDQXt/mKlgEGsLpzJcnLKimtPXQQy9TxUaLBe9PInPd+Ohix0XOlY+Uk
QFEx50Ki3rSDl2Zt2tnkNYKUCvTJq7jvOlaPd6d/W0tZqpyy7KVay+K4aMobDsodB3dvEAs6
ScCnh03dDAFgIq5nsB11j3KPKdVoPlfucX2c7kGNH+LUMbzqV6beIENfNexkOfxHfw==
In-Reply-To: <20250528131052.GZ39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Content-Type: multipart/signed; micalg=pgp-sha256;
protocol="application/pgp-signature";
boundary="------------L8pGC02gsWWwYfQeBk1AzooM"
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--------------L8pGC02gsWWwYfQeBk1AzooM
Content-Type: multipart/mixed; boundary="------------FmWIKz2UCoukIvM9oevBOgHI";
protected-headers="v1"
From: =?UTF-8?B?SsO8cmdlbiBHcm/Dnw==?= <jgross@xxxxxxxx>
To: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx, x86@xxxxxxxxxx, xin@xxxxxxxxx,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>,
Borislav Petkov <bp@xxxxxxxxx>, Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
"H. Peter Anvin" <hpa@xxxxxxxxx>, stable@xxxxxxxxxxxxxxx
Message-ID: <044f0048-95bb-4822-978e-a23528f3891f@xxxxxxxx>
Subject: Re: [PATCH 3/3] x86/alternative: make kernel ITS thunks read-only
References: <20250528123557.12847-1-jgross@xxxxxxxx>
<20250528123557.12847-4-jgross@xxxxxxxx>
<20250528131052.GZ39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
In-Reply-To: <20250528131052.GZ39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
--------------FmWIKz2UCoukIvM9oevBOgHI
Content-Type: multipart/mixed; boundary="------------Ngi5ISy4WN4v8wbJEjxC5Hnu"
--------------Ngi5ISy4WN4v8wbJEjxC5Hnu
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: base64
T24gMjguMDUuMjUgMTU6MTAsIFBldGVyIFppamxzdHJhIHdyb3RlOg0KPiBPbiBXZWQsIE1h
eSAyOCwgMjAyNSBhdCAwMjozNTo1N1BNICswMjAwLCBKdWVyZ2VuIEdyb3NzIHdyb3RlOg0K
Pj4gV2hlbiBhbGxvY2F0aW5nIG1lbW9yeSBwYWdlcyBmb3Iga2VybmVsIElUUyB0aHVua3Ms
IG1ha2UgdGhlbSByZWFkLW9ubHkNCj4+IGFmdGVyIGhhdmluZyB3cml0dGVuIHRoZSBsYXN0
IHRodW5rLg0KPj4NCj4+IFRoaXMgd2lsbCBiZSBuZWVkZWQgd2hlbiBYODZfRkVBVFVSRV9Q
U0UgaXNuJ3QgYXZhaWxhYmxlLCBhcyB0aGUgdGh1bmsNCj4+IG1lbW9yeSB3aWxsIGhhdmUg
UEFHRV9LRVJORUxfRVhFQyBwcm90ZWN0aW9uLCB3aGljaCBpcyBpbmNsdWRpbmcgdGhlDQo+
PiB3cml0ZSBwZXJtaXNzaW9uLg0KPj4NCj4+IENjOiA8c3RhYmxlQHZnZXIua2VybmVsLm9y
Zz4NCj4+IEZpeGVzOiA1MTg1ZTdmOWYzYmQgKCJ4ODYvbW9kdWxlOiBlbmFibGUgUk9YIGNh
Y2hlcyBmb3IgbW9kdWxlIHRleHQgb24gNjQgYml0IikNCj4+IFNpZ25lZC1vZmYtYnk6IEp1
ZXJnZW4gR3Jvc3MgPGpncm9zc0BzdXNlLmNvbT4NCj4+IC0tLQ0KPj4gICBhcmNoL3g4Ni9r
ZXJuZWwvYWx0ZXJuYXRpdmUuYyB8IDE2ICsrKysrKysrKysrKysrKysNCj4+ICAgMSBmaWxl
IGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKykNCj4+DQo+PiBkaWZmIC0tZ2l0IGEvYXJjaC94
ODYva2VybmVsL2FsdGVybmF0aXZlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUu
Yw0KPj4gaW5kZXggZWNmZTdiNDk3Y2FkLi5iZDk3NGEwYWM4OGEgMTAwNjQ0DQo+PiAtLS0g
YS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYw0KPj4gKysrIGIvYXJjaC94ODYva2Vy
bmVsL2FsdGVybmF0aXZlLmMNCj4+IEBAIC0yMTcsNiArMjE3LDE1IEBAIHN0YXRpYyB2b2lk
ICppdHNfYWxsb2Modm9pZCkNCj4+ICAgCXJldHVybiBub19mcmVlX3B0cihwYWdlKTsNCj4+
ICAgfQ0KPj4gICANCj4+ICtzdGF0aWMgdm9pZCBpdHNfc2V0X2tlcm5lbF9ybyh2b2lkICph
ZGRyKQ0KPj4gK3sNCj4+ICsjaWZkZWYgQ09ORklHX01PRFVMRVMNCj4+ICsJaWYgKGl0c19t
b2QpDQo+PiArCQlyZXR1cm47DQo+PiArI2VuZGlmDQo+PiArCWV4ZWNtZW1fcmVzdG9yZV9y
b3goYWRkciwgUEFHRV9TSVpFKTsNCj4+ICt9DQo+PiArDQo+PiAgIHN0YXRpYyB2b2lkICpp
dHNfYWxsb2NhdGVfdGh1bmsoaW50IHJlZykNCj4+ICAgew0KPj4gICAJaW50IHNpemUgPSAz
ICsgKHJlZyAvIDgpOw0KPj4gQEAgLTIzNCw2ICsyNDMsOCBAQCBzdGF0aWMgdm9pZCAqaXRz
X2FsbG9jYXRlX3RodW5rKGludCByZWcpDQo+PiAgICNlbmRpZg0KPj4gICANCj4+ICAgCWlm
ICghaXRzX3BhZ2UgfHwgKGl0c19vZmZzZXQgKyBzaXplIC0gMSkgPj0gUEFHRV9TSVpFKSB7
DQo+PiArCQlpZiAoaXRzX3BhZ2UpDQo+PiArCQkJaXRzX3NldF9rZXJuZWxfcm8oaXRzX3Bh
Z2UpOw0KPj4gICAJCWl0c19wYWdlID0gaXRzX2FsbG9jKCk7DQo+PiAgIAkJaWYgKCFpdHNf
cGFnZSkgew0KPj4gICAJCQlwcl9lcnIoIklUUyBwYWdlIGFsbG9jYXRpb24gZmFpbGVkXG4i
KTsNCj4+IEBAIC0yMzM4LDYgKzIzNDksMTEgQEAgdm9pZCBfX2luaXQgYWx0ZXJuYXRpdmVf
aW5zdHJ1Y3Rpb25zKHZvaWQpDQo+PiAgIAlhcHBseV9yZXRwb2xpbmVzKF9fcmV0cG9saW5l
X3NpdGVzLCBfX3JldHBvbGluZV9zaXRlc19lbmQpOw0KPj4gICAJYXBwbHlfcmV0dXJucyhf
X3JldHVybl9zaXRlcywgX19yZXR1cm5fc2l0ZXNfZW5kKTsNCj4+ICAgDQo+PiArCS8qIE1h
a2UgcG90ZW50aWFsIGxhc3QgdGh1bmsgcGFnZSByZWFkLW9ubHkuICovDQo+PiArCWlmIChp
dHNfcGFnZSkNCj4+ICsJCWl0c19zZXRfa2VybmVsX3JvKGl0c19wYWdlKTsNCj4+ICsJaXRz
X3BhZ2UgPSBOVUxMOw0KPj4gKw0KPj4gICAJLyoNCj4+ICAgCSAqIEFkanVzdCBhbGwgQ0FM
TCBpbnN0cnVjdGlvbnMgdG8gcG9pbnQgdG8gZnVuYygpLTEwLCBpbmNsdWRpbmcNCj4+ICAg
CSAqIHRob3NlIGluIC5hbHRpbnN0cl9yZXBsYWNlbWVudC4NCj4gDQo+IE5vLCB0aGlzIGlz
IGFsbCBzb3J0cyBvZiB3cm9uZy4gRXhlY21lbSBBUEkgc2hvdWxkIGVuc3VyZSB0aGlzLg0K
DQpZb3UgYXJlIGF3YXJlIHRoYXQgdGhpcyBwYXRjaCBpcyBiYXNpY2FsbHkgbWlycm9yaW5n
IHRoZSB3b3JrIHdoaWNoIGlzDQphbHJlYWR5IGRvbmUgZm9yIG1vZHVsZXMgaW4gYWx0ZXJu
YXRpdmUuYz8NCg0KDQpKdWVyZ2VuDQo=
--------------Ngi5ISy4WN4v8wbJEjxC5Hnu
Content-Type: application/pgp-keys; name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Disposition: attachment; filename="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Description: OpenPGP public key
Content-Transfer-Encoding: quoted-printable
-----BEGIN PGP PUBLIC KEY BLOCK-----
xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjri
oyspZKOBycWxw3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2
kaV2KL9650I1SJvedYm8Of8Zd621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i
1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y9bfIhWUiVXEK7MlRgUG6MvIj6Y3Am/B
BLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xqG7/377qptDmrk42GlSK
N4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR3Jvc3Mg
PGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsE
FgIDAQIeAQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4F
UGNQH2lvWAUy+dnyThpwdtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3Tye
vpB0CA3dbBQp0OW0fgCetToGIQrg0MbD1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u
+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbvoPHZ8SlM4KWm8rG+lIkGurq
qu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v5QL+qHI3EIP
tyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVy
Z2VuIEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJ
CAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4
RF7HoZhPVPogNVbC4YA6lW7DrWf0teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz7
8X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC/nuAFVGy+67q2DH8As3KPu0344T
BDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0LhITTd9jLzdDad1pQ
SToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLmXBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkM
nQfvUewRz80hSnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMB
AgAjBQJTjHDXAhsDBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/
Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJnFOXgMLdBQgBlVPO3/D9R8LtF9DBAFPN
hlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1jnDkfJZr6jrbjgyoZHi
w/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0N51N5Jf
VRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwP
OoE+lotufe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK
/1xMI3/+8jbO0tsn1tqSEUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1
c2UuZGU+wsB5BBMBAgAjBQJTjHDrAhsDBwsJCAcDAgEGFQgCCQoLBBYCAwECHgEC
F4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3g3OZUEBmDHVVbqMtzwlmNC4
k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5dM7wRqzgJpJ
wK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu
5D+jLRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzB
TNh30FVKK1EvmV2xAKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37Io
N1EblHI//x/e2AaIHpzK5h88NEawQsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6
AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpWnHIs98ndPUDpnoxWQugJ6MpMncr
0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZRwgnBC5mVM6JjQ5x
Dk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNVbVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mm
we0icXKLkpEdIXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0I
v3OOImwTEe4co3c1mwARAQABwsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMv
Q/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEwTbe8YFsw2V/Buv6Z4Mysln3nQK5ZadD
534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1vJzQ1fOU8lYFpZXTXIH
b+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8VGiwXvT
yJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqc
suylWsviuGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5B
jR/i1DG86lem3iBDXzXsZDn8R3/CwO0EGAEIACAWIQSFEmdy6PYElKXQl/ew3p3W
KL8TLwUCWt3w0AIbAgCBCRCw3p3WKL8TL3YgBBkWCAAdFiEEUy2wekH2OPMeOLge
gFxhu0/YY74FAlrd8NAACgkQgFxhu0/YY75NiwD/fQf/RXpyv9ZX4n8UJrKDq422
bcwkujisT6jix2mOOwYBAKiip9+mAD6W5NPXdhk1XraECcIspcf2ff5kCAlG0DIN
aTUH/RIwNWzXDG58yQoLdD/UPcFgi8GWtNUp0Fhc/GeBxGipXYnvuWxwS+Qs1Qay
7/Nbal/v4/eZZaWs8wl2VtrHTS96/IF6q2o0qMey0dq2AxnZbQIULiEndgR625EF
RFg+IbO4ldSkB3trsF2ypYLij4ZObm2casLIP7iB8NKmQ5PndL8Y07TtiQ+Sb/wn
g4GgV+BJoKdDWLPCAlCMilwbZ88Ijb+HF/aipc9hsqvW/hnXC2GajJSAY3Qs9Mib
4Hm91jzbAjmp7243pQ4bJMfYHemFFBRaoLC7ayqQjcsttN2ufINlqLFPZPR/i3IX
kt+z4drzFUyEjLM1vVvIMjkUoJs=3D
=3DeeAB
-----END PGP PUBLIC KEY BLOCK-----
--------------Ngi5ISy4WN4v8wbJEjxC5Hnu--
--------------FmWIKz2UCoukIvM9oevBOgHI--
--------------L8pGC02gsWWwYfQeBk1AzooM
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature.asc"
-----BEGIN PGP SIGNATURE-----
wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmg3DVwFAwAAAAAACgkQsN6d1ii/Ey8o
ywf/W7CEoAq5j23MBDnI6xxWTZ1oO0S+WG7iPgl+tco29Nfv02PLc5G1qKIqnIFjV+Nu441jB7DI
IidZY9p1SgDiK8aYzyFc48dSjcLbrKP44gk6DshbrwwcaRBwmxE+u3Xx455llJRs3XWWXPy1nM3h
Px5a4Zp6pugFBfIdZ6LAGYHxG6504mwdPQfbu/VvJcJ46Bgh8z7cVIUlqs5xZetr6KkmJ8IHbKVI
Rppm8R9sP/uR0Pdntl/N2F1jHBsHzhvDhKkEZubGJSwiHpX5OZedunOYfkZIb4U7dtMAIxsFhZHN
QHDpnyqXRgnoKXKrKlnjyrOwJFaYjU4G9FO/eCB5LA==
=PjpB
-----END PGP SIGNATURE-----
--------------L8pGC02gsWWwYfQeBk1AzooM--
Return-Path: <linux-kernel+bounces-665511-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1DC3441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:20:40 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 34E1B3B5B30
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:20:19 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 8C1E1286D48;
Wed, 28 May 2025 13:20:31 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="AsBDSu5F"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id C82A223CB;
Wed, 28 May 2025 13:20:30 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438430; cv=none; b=OTVEHGPpighBR9mjY1ZW+FtNQ8zdcbkiMW5Tv+zNro51TroG6Lkg2NZKI7g76cL0pNaU+gHSitmYdT1XDoHV6rS/a3b0SNO/54X4YB47qVCpyjK6FRuNzrJvaBpXcP3cyf+GmDIbgIh4wfSqZhE43vTAP8thiokl0lzLyJVJKX4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438430; c=relaxed/simple;
bh=zpWkRzpL1C1wvvbWchbIoGchgtFgQWV3X6yXDovDrAc=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=dYIzOAww49rIqRFWZOcb2pxwd11evdCGd6EjiQF5oIHkQR/FdBwRMq9ZZ1/1aqCbKaGHXNPJu9XHnmqf06v3XzbAkuyg7MS686bPU1pqS1DdDX2CvWwTvCwgLe9Hdo2clSzkBIFbGTQhncOYm2v8g5gfGSl8nj2GLUVtkjFvUs4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=AsBDSu5F; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 40A5DC4CEE7;
Wed, 28 May 2025 13:20:30 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748438430;
bh=zpWkRzpL1C1wvvbWchbIoGchgtFgQWV3X6yXDovDrAc=;
h=References:In-Reply-To:From:Date:Subject:To:Cc:From;
b=AsBDSu5FRR8uEmQbjNLsGm3374RoccQXcTz/X/CD92r4TOjoUCSB3Gu8V/ukAn3f4
vseF7e3ugk3EGKjstDTHtT5cyQeIVZDyLRm0aqy2OUaSA2/jhcGxl+XddBO8j8tbAo
cmpvqxJ/fdJrDxk66sH0Qis7BqO1m/j9FEG+oKyn0FppduD92TFQoQWZ2dfEvqm+lX
C9adiSXr4uuSYY2F+tSj4hVpvVN+4yKoiCHwYRRmT9ErzXi0K26UBJ+trpwb8u4U/b
6Ckv7De1aLpsqh1gJ/5QY8HQEpmIhOH2FcxRkFZ/78Dk3SXquN/0wnxhZQc0UJNlF/
VhQQmfM0/VeMQ==
Received: by mail-oi1-f169.google.com with SMTP id 5614622812f47-3feb3f54339so3904217b6e.1;
Wed, 28 May 2025 06:20:30 -0700 (PDT)
X-Forwarded-Encrypted: i=1; AJvYcCUfgKBp3PFqykOY/Mr30/XhC2rkcsdNQZCZ0EGtkw4DhJ4G2tl868fQhfPjMeZ3qljf+GTRJtWWsHtAAp4=@vger.kernel.org, AJvYcCX+K+I24CQAIRq7KZvfteH6MRj2VHSLMTGtdrpbWdBCF5SYYzjE1wKYcb5N7/gd/PQbhGgUSceOU8w=@vger.kernel.org
X-Gm-Message-State: AOJu0YyVIqwHc+HQqGeYx94uk3ARJGFb4EW0M2KFKQ46qsSjMJx1PGYg
MIvfLS+hiv4uUdR4QYq/wRQlfsyoPSqvVfSghNjCa1BLzclFbl3yIQg6BYQma30RnG4xRYsWggo
1IPTmPkhttA30tH0R988Ojo5VOjVH3LE=
X-Google-Smtp-Source: AGHT+IFkwud3yYeLapngqvo6cYzzvuTV5s6QtdDYYMRDy6+GZADou18DJw3mNX6kjJmg7SCa4PL1LBDrZB+RcJeKPz4=
X-Received: by 2002:a05:6808:2b06:b0:402:17a8:af08 with SMTP id
5614622812f47-406467d087fmr7651740b6e.9.1748438429625; Wed, 28 May 2025
06:20:29 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <2006806.PYKUYFuaPT@xxxxxxxxxxxxx> <20250528131759.GA39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
In-Reply-To: <20250528131759.GA39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
From: "Rafael J. Wysocki" <rafael@xxxxxxxxxx>
Date: Wed, 28 May 2025 15:20:16 +0200
X-Gmail-Original-Message-ID: <CAJZ5v0i=TWMjPKxGa8eT-prV=dtQo=pwys5amcj3QL9qo=EYyQ@xxxxxxxxxxxxxx>
X-Gm-Features: AX0GCFuEgUkMOGqlQvpYEqqL33KbB4TEexttzkuk0hi3BVR-IbleJPyuVqM_zqk
Message-ID: <CAJZ5v0i=TWMjPKxGa8eT-prV=dtQo=pwys5amcj3QL9qo=EYyQ@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v1 0/2] x86/smp: Fix power regression introduced by commit 96040f7273e2
To: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: "Rafael J. Wysocki" <rjw@xxxxxxxxxxxxx>, x86 Maintainers <x86@xxxxxxxxxx>,
LKML <linux-kernel@xxxxxxxxxxxxxxx>, Linux PM <linux-pm@xxxxxxxxxxxxxxx>,
Len Brown <lenb@xxxxxxxxxx>, Thomas Gleixner <tglx@xxxxxxxxxxxxx>, Borislav Petkov <bp@xxxxxxx>,
Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
Artem Bityutskiy <artem.bityutskiy@xxxxxxxxxxxxxxx>,
"Gautham R. Shenoy" <gautham.shenoy@xxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>,
Todd Brandt <todd.e.brandt@xxxxxxxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 3:18=E2=80=AFPM Peter Zijlstra <peterz@xxxxxxxxxxxx=
g> wrote:
>
> On Wed, May 28, 2025 at 02:53:13PM +0200, Rafael J. Wysocki wrote:
> > Hi Everyone,
> >
> > Commit 96040f7273e2 ("x86/smp: Eliminate mwait_play_dead_cpuid_hint()")
> > that shipped in 6.15 introduced a nasty power regression on systems tha=
t
> > start with "nosmt" in the kernel command line which prevents it from en=
tering
> > deep package idle states (for instance, PC10) later on. Idle power, in=
cluding
> > power in suspend-to-idle, goes up significantly on those systems as a r=
esult.
> >
> > Address this by reverting commit 96040f7273e2 (patch [1/2]) and using a
> > different approach, which is to retain mwait_play_dead_cpuid_hint() and
> > still prefer it to hlt_play_dead() in case it is needed when cpuidle is
> > not available, but prefer cpuidle_play_dead() to it by default (patch [=
2/2]).
>
> I don't understand. The revert says the reason it regresses is that it
> goes into play_dead before cpuidle is initialized. The fix is then to
> call cpuidle first.
>
> But if cpuidle isn't initialized yet, how does that fix anything?
The revert fixes the bug.
The other patch does what the reverted commit was supposed to be
doing, but differently.
Return-Path: <linux-kernel+bounces-665512-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id B9FC441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:20:53 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 0952D16E024
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:20:55 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id D1CC42874EB;
Wed, 28 May 2025 13:20:36 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="oCYq2K9h"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2036023CB;
Wed, 28 May 2025 13:20:35 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438436; cv=none; b=isCzrwnUbiGWY1Jo5YZbhNH8/noy6oARxbSwLsSr4TI9E3tIaH/UCtQ9qE1lAYrQDzFcz1xtfp6QAH2n+5I9rHdkYMZqW9tFtLg6oyVDKOcAzXFcb3q0KRjkm8CJAxFKs3eEhjgSVVlXJvvRcZHvmeujPopXVt4P+i5jlyN39DE=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438436; c=relaxed/simple;
bh=bqh02R+RktuC2AJ2tt0yfPMqfFsQm9schP9JHE8WnDI=;
h=From:To:Cc:In-Reply-To:References:Subject:Message-Id:Date:
MIME-Version:Content-Type; b=D2gkpuvBt0iHLcJwyHkemJovwTTPoaehYo+DBqFNlzvpRM+ukD/f4hWTdMIY8va2oz2a8CC+Pk9hnZoSwupeGxQBDl13nn33BKS+B7r+8IBCisN9Mli3Oepx2+zMJf8XpEZQZzaPvh7TJZpYToi51MEWmWNSvWT1NFWTol1F3to=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=oCYq2K9h; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 12F5BC4CEE7;
Wed, 28 May 2025 13:20:33 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748438435;
bh=bqh02R+RktuC2AJ2tt0yfPMqfFsQm9schP9JHE8WnDI=;
h=From:To:Cc:In-Reply-To:References:Subject:Date:From;
b=oCYq2K9hh6jJLtZockCyaC3kKwD2EPfD3X+pHxuN21Qz18vP9Ks+0oCP3aSV9PLEi
H4k5zDX1E72ULPi8XwG1LCEdy2VgNc5PEyBdr9uNVmFwUjVrpnVoKdjk39WNeKRNBA
frQIZtDYmK7sxgUE+ChQ03fmpO5XVWf07bDTzo/sDGsa5+ICSR28yj92U+I5uwcbSn
7fi2KGxww94+pnybT6QW28gBSPtq542WXeCgj+MyKNGB3o9cCBM+Zt6uW5Tk5845RB
Ihh/oQNvZKJiL4AhIPdGPGdTkYwa8WxjGYAc64tOJC8Zl5PcjwIKd3t7gLptZ9CbQL
PgS6fAaqZBJ7w==
From: Mark Brown <broonie@xxxxxxxxxx>
To: Kevin Cernekee <cernekee@xxxxxxxxxxxx>,
Liam Girdwood <lgirdwood@xxxxxxxxx>, Jaroslav Kysela <perex@xxxxxxxx>,
Takashi Iwai <tiwai@xxxxxxxx>,
Bram Vlerick <bram.vlerick@xxxxxxxxxxxxxxxxxxxx>
Cc: linux-sound@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
peter@xxxxxxxxxxxxx, kamel.bouhara@xxxxxxxxxxx
In-Reply-To: <20250528-tas5733-fix-controls-size-v1-1-5c70595accaf@xxxxxxxxxxxxxxxxxxxx>
References: <20250528-tas5733-fix-controls-size-v1-1-5c70595accaf@xxxxxxxxxxxxxxxxxxxx>
Subject: Re: [PATCH] ASoC: tas571x: fix tas5733 num_controls
Message-Id: <174843843382.44834.14730284248939713769.b4-ty@xxxxxxxxxx>
Date: Wed, 28 May 2025 14:20:33 +0100
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
X-Mailer: b4 0.15-dev-c25d1
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 10:25:48 +0200, Bram Vlerick wrote:
> Commit e3de7984e451 ("ASoC: tas571x: add separate tas5733 controls")
> introduces a separate struct for the tas5733 controls but did not update
> the num_controls with the correct ARRAY_SIZE.
>
> Fixes: e3de7984e451 ("ASoC: tas571x: add separate tas5733 controls")
>
>
> [...]
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
Thanks!
[1/1] ASoC: tas571x: fix tas5733 num_controls
commit: bc4005ef43104da589951dba69291360c6a11ae7
All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying
to this mail.
Thanks,
Mark
Return-Path: <linux-kernel+bounces-665513-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id AC93141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:22:05 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id EEE3C189E5DE
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:22:17 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 55478246769;
Wed, 28 May 2025 13:21:57 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="aDDD7Asz"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 991A22857D2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:21:56 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438516; cv=none; b=VlNjwEP5wF6i7wBzoeLNJnW+iKIpPnEsJ6SzrAKNn2/u9Vfpe+HgVsh3RA2QZgK612eKO8LgUama2j5YtCPis1zi+XeE2IlKwYB76WH0gzfwxWebCwbCh4YsAn795+RUoQydibCp8IKwz9ffrPLmjlejUN6RATuJli6fE2gGo0w=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438516; c=relaxed/simple;
bh=g+xOFZ57Bsw1wMhdPNhPQ3EPoGnnqN87CcjYVj3CF94=;
h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=kajKT5s5XpmYBqaE8S5mp4HdYxvbJ4yGx+Sf+dlBoyh3c0fJd9W3Av/PtBujfHxBfKqUCV2VRYmSFQXH2lzlDxjezw5lMwEYykiV+aqvLmrBhk4Xo/PNPWsBG0Wfcsn64h2DdBr4qe7TJC0IgpCI2wlKyGzUNG/BsnxGT0zxgd4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=aDDD7Asz; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2D9EBC4CEE7;
Wed, 28 May 2025 13:21:53 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748438516;
bh=g+xOFZ57Bsw1wMhdPNhPQ3EPoGnnqN87CcjYVj3CF94=;
h=From:To:Cc:Subject:Date:From;
b=aDDD7AszRyVaRBu6mbucjjvqIYsnL0MnUri9+IbJl0PBXTbVzH38hkf9h4zKvjNLX
H5Gqg7STXWEFlRHOxo5ri+u07BldrSB7YTKT8JhNqu5R8JIHpPhy42QYBPGVXWA0Hw
YkbZTV2kapsJuXU2/uAe+JJ0vunTY+SNBVRW8WsE3sSPzknJVvauNxihQPEY7dN4pS
GtsCEfBRBAeVajEIwGIVvMGaCkn+/B1D5czx3PzmU6RCRcewIL8Je0pNTvmJ7babpk
YkGFPULzGg1PO0tMTYKRXjPObZDBgIWN7vIlVG2hJYwjk1UdlCOZl2sJoiWzL/wFUS
9OWbPrRr1bNJg==
From: Michael Walle <mwalle@xxxxxxxxxx>
To: Douglas Anderson <dianders@xxxxxxxxxxxx>,
Andrzej Hajda <andrzej.hajda@xxxxxxxxx>,
Neil Armstrong <neil.armstrong@xxxxxxxxxx>,
Robert Foss <rfoss@xxxxxxxxxx>,
Laurent Pinchart <Laurent.pinchart@xxxxxxxxxxxxxxxx>,
Jonas Karlman <jonas@xxxxxxxxx>,
Jernej Skrabec <jernej.skrabec@xxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>
Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Michael Walle <mwalle@xxxxxxxxxx>
Subject: [PATCH] drm/bridge: ti-sn65dsi86: fix REFCLK setting
Date: Wed, 28 May 2025 15:21:48 +0200
Message-Id: <20250528132148.1087890-1-mwalle@xxxxxxxxxx>
X-Mailer: git-send-email 2.39.5
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
The bridge has three bootstrap pins which are sampled to determine the
frequency of the external reference clock. The driver will also
(over)write that setting. But it seems this is racy after the bridge is
enabled. It was observed that although the driver write the correct
value (by sniffing on the I2C bus), the register has the wrong value.
The datasheet states that the GPIO lines have to be stable for at least
5us after asserting the EN signal. Thus, there seems to be some logic
which samples the GPIO lines and this logic appears to overwrite the
register value which was set by the driver. Waiting 20us after
asserting the EN line resolves this issue.
Signed-off-by: Michael Walle <mwalle@xxxxxxxxxx>
---
I couldn't find a good commit for a Fixes: tag and I'm not sure how
fixes are handled in drm.
drivers/gpu/drm/bridge/ti-sn65dsi86.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
index 60224f476e1d..fcef43154558 100644
--- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c
+++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
@@ -386,6 +386,17 @@ static int __maybe_unused ti_sn65dsi86_resume(struct device *dev)
gpiod_set_value_cansleep(pdata->enable_gpio, 1);
+ /*
+ * After EN is deasserted and an external clock is detected, the bridge
+ * will sample GPIO3:1 to determine its frequency. The driver will
+ * overwrite this setting. But this is racy. Thus we have to wait a
+ * couple of us. According to the datasheet the GPIO lines has to be
+ * stable at least 5 us (td5) but it seems that is not enough and the
+ * refclk frequency value is lost/overwritten by the bridge itself.
+ * Waiting for 20us seems to work.
+ */
+ usleep_range(20, 30);
+
/*
* If we have a reference clock we can enable communication w/ the
* panel (including the aux channel) w/out any need for an input clock
--
2.39.5
Return-Path: <linux-kernel+bounces-665514-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 7739541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:22:50 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 3F06A7A2A17
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:21:31 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id BF9CC286D51;
Wed, 28 May 2025 13:22:40 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="olyCyipN"
Received: from casper.infradead.org (casper.infradead.org [90.155.50.34])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id A76FD2459EA;
Wed, 28 May 2025 13:22:38 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438560; cv=none; b=LgbghBUxbifSN4X5xMBQyYwKNgYYq4a44CXiapqxdQcQvUlrbOQ/mt9K7kpRdhj5qmbagwSpSYv3E/NSgwEnHcJOYkVhV1obfsJTP1FOHvFMWnsBh6O4H0oDaiPomTOujFzlztyDwZ7PUZiGtNOTTLJOygx2Buu+FNRuw70tvQ0=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438560; c=relaxed/simple;
bh=4Pn5+IaraLwfB51pd3e88aEPpbE+Xpl78G5c8jBouU4=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=bHylBcd0YOKReQAuRbqgKDc273u0stNHCMsGXm16lu1HMUkYiKiZuqQMOqyhcIhmkIjzmdielYlQmy+JbYQWBoCkoXe5uFIKd3znp1/d5YD5QvD1O6PyQkng5Q7ULFkV6i0LrtOU5PcvZNmvs0C6h+Djj7LNXVwaIQ0yozeropI=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=olyCyipN; arc=none smtp.client-ip=90.155.50.34
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org
Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Transfer-Encoding:
Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:
Sender:Reply-To:Content-ID:Content-Description;
bh=EKajYrvbUK7K9eBj0BAcVo9PVCzIMkEs/jt3hskWVO0=; b=olyCyipNVyN0DI1Kq+4tOKvnyO
GlVT+ibtDB4n4Emex6vrP2lhgZaTRQGDL1Yg+x+otaG+Pvcwrj/m+g+lI7G/FzyfvF5nTZBTXlDra
wWFwjz5etn3iUWbLyZLSxpmZ8CFOAAmCx7MDmXDeZjCh/DUGpvIkNEPaCOQd1zYqEuVnWCyydm7Wz
QemXA26cgxJF3RLRoKgR9q9FOAfdYsu/s9d3KmRAO4QjqPDCOnXx/Lts7JxoemlalYqJolw0QWsjp
EWm1gzPRGFO9wW/knkhvImSIuEYVRoMcwqF21JkBPZSEUuy2/31KZtVAyJ//4wxYh9IuJaUF1+jlM
/4ulWODw==;
Received: from 77-249-17-252.cable.dynamic.v4.ziggo.nl ([77.249.17.252] helo=noisy.programming.kicks-ass.net)
by casper.infradead.org with esmtpsa (Exim 4.98.2 #2 (Red Hat Linux))
id 1uKGjp-0000000Dfve-48jJ;
Wed, 28 May 2025 13:22:34 +0000
Received: by noisy.programming.kicks-ass.net (Postfix, from userid 1000)
id 09B7F300263; Wed, 28 May 2025 15:22:32 +0200 (CEST)
Date: Wed, 28 May 2025 15:22:31 +0200
From: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
To: =?iso-8859-1?Q?J=FCrgen_Gro=DF?= <jgross@xxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx, x86@xxxxxxxxxx, xin@xxxxxxxxx,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>,
Ingo Molnar <mingo@xxxxxxxxxx>, Borislav Petkov <bp@xxxxxxxxx>,
Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
"H. Peter Anvin" <hpa@xxxxxxxxx>, stable@xxxxxxxxxxxxxxx
Subject: Re: [PATCH 3/3] x86/alternative: make kernel ITS thunks read-only
Message-ID: <20250528132231.GB39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <20250528123557.12847-1-jgross@xxxxxxxx>
<20250528123557.12847-4-jgross@xxxxxxxx>
<20250528131052.GZ39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<044f0048-95bb-4822-978e-a23528f3891f@xxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
In-Reply-To: <044f0048-95bb-4822-978e-a23528f3891f@xxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 03:19:24PM +0200, J=FCrgen Gro=DF wrote:
> On 28.05.25 15:10, Peter Zijlstra wrote:
> > On Wed, May 28, 2025 at 02:35:57PM +0200, Juergen Gross wrote:
> > > When allocating memory pages for kernel ITS thunks, make them read-on=
ly
> > > after having written the last thunk.
> > >=20
> > > This will be needed when X86_FEATURE_PSE isn't available, as the thunk
> > > memory will have PAGE_KERNEL_EXEC protection, which is including the
> > > write permission.
> > >=20
> > > Cc: <stable@xxxxxxxxxxxxxxx>
> > > Fixes: 5185e7f9f3bd ("x86/module: enable ROX caches for module text o=
n 64 bit")
> > > Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
> > > ---
> > > arch/x86/kernel/alternative.c | 16 ++++++++++++++++
> > > 1 file changed, 16 insertions(+)
> > >=20
> > > diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternat=
ive.c
> > > index ecfe7b497cad..bd974a0ac88a 100644
> > > --- a/arch/x86/kernel/alternative.c
> > > +++ b/arch/x86/kernel/alternative.c
> > > @@ -217,6 +217,15 @@ static void *its_alloc(void)
> > > return no_free_ptr(page);
> > > }
> > > +static void its_set_kernel_ro(void *addr)
> > > +{
> > > +#ifdef CONFIG_MODULES
> > > + if (its_mod)
> > > + return;
> > > +#endif
> > > + execmem_restore_rox(addr, PAGE_SIZE);
> > > +}
> > > +
> > > static void *its_allocate_thunk(int reg)
> > > {
> > > int size =3D 3 + (reg / 8);
> > > @@ -234,6 +243,8 @@ static void *its_allocate_thunk(int reg)
> > > #endif
> > > if (!its_page || (its_offset + size - 1) >=3D PAGE_SIZE) {
> > > + if (its_page)
> > > + its_set_kernel_ro(its_page);
> > > its_page =3D its_alloc();
> > > if (!its_page) {
> > > pr_err("ITS page allocation failed\n");
> > > @@ -2338,6 +2349,11 @@ void __init alternative_instructions(void)
> > > apply_retpolines(__retpoline_sites, __retpoline_sites_end);
> > > apply_returns(__return_sites, __return_sites_end);
> > > + /* Make potential last thunk page read-only. */
> > > + if (its_page)
> > > + its_set_kernel_ro(its_page);
> > > + its_page =3D NULL;
> > > +
> > > /*
> > > * Adjust all CALL instructions to point to func()-10, including
> > > * those in .altinstr_replacement.
> >=20
> > No, this is all sorts of wrong. Execmem API should ensure this.
>=20
> You are aware that this patch is basically mirroring the work which is
> already done for modules in alternative.c?
I am having trouble parsing that -- where does alternative.c do this to
modules?
Return-Path: <linux-kernel+bounces-665515-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 6B39B41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:23:00 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 777D69E1FB7
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:22:37 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id B512A2874EF;
Wed, 28 May 2025 13:22:44 +0000 (UTC)
Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 931EE286D74;
Wed, 28 May 2025 13:22:41 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438564; cv=none; b=Pba4b1V9XHQTlOrardD3+xGxeI8vYHdlV/COvcnF3a++M3rLNc1G07SLpYqt502Il0MO3PgMubfuCxxiLOFaK6rOF17XaCHaZQ7QcI73tgv3qII+NA9WT4tTlbky9dJN4/wcDGrlt6AxHjyogAkgo0Cfs9xbXtybjPwLeBHZ468=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438564; c=relaxed/simple;
bh=9B09LdKjupc2KUC3Z122eNeKX4XjkQrIA4hbaw1bsnY=;
h=Subject:To:References:Cc:From:Message-ID:Date:MIME-Version:
In-Reply-To:Content-Type; b=ubuZWzRT5SGuTqdJeAtMbBFAOH745xI4CfpJ2Muu6fVjNNlxU/drj4bwGCuoOlXF3SzIyuQyZLw939VwimeN4VCtqe5TqIVQYwP4Ev50roZrN3Z+I7YqaLzD7AIkpD2M3uyxamg08ZBYDzj81YGjPWT1E2T1Vl4/HrQiRPVQYuk=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com
Received: from mail.maildlp.com (unknown [172.19.163.216])
by dggsgout12.his.huawei.com (SkyGuard) with ESMTPS id 4b6qtS26YMzKHLyf;
Wed, 28 May 2025 21:22:40 +0800 (CST)
Received: from mail02.huawei.com (unknown [10.116.40.128])
by mail.maildlp.com (Postfix) with ESMTP id B71401A1ABE;
Wed, 28 May 2025 21:22:38 +0800 (CST)
Received: from [10.174.178.185] (unknown [10.174.178.185])
by APP4 (Coremail) with SMTP id gCh0CgCnC2AdDjdokjQdNw--.49955S3;
Wed, 28 May 2025 21:22:38 +0800 (CST)
Subject: Re: [PATCH 1/2] ftrace: fix UAF when lookup kallsym after ftrace
disabled
To: Steven Rostedt <rostedt@xxxxxxxxxxx>
References: <20250523083945.3390587-1-yebin@xxxxxxxxxxxxxxx>
<20250523083945.3390587-2-yebin@xxxxxxxxxxxxxxx>
<20250523135452.626d8dcd@xxxxxxxxxxxxxxxxxx>
<6833C4F1.3030300@xxxxxxxxxxxxxxx>
<20250527094131.1f4a92ab@xxxxxxxxxxxxxxxxxx>
Cc: mhiramat@xxxxxxxxxx, mathieu.desnoyers@xxxxxxxxxxxx,
mark.rutland@xxxxxxx, linux-trace-kernel@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, yebin10@xxxxxxxxxx
From: yebin <yebin@xxxxxxxxxxxxxxx>
Message-ID: <68370E1D.3070802@xxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 21:22:37 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101
Thunderbird/38.1.0
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
In-Reply-To: <20250527094131.1f4a92ab@xxxxxxxxxxxxxxxxxx>
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Transfer-Encoding: 7bit
X-CM-TRANSID:gCh0CgCnC2AdDjdokjQdNw--.49955S3
X-Coremail-Antispam: 1UD129KBjvJXoW3JryxJFWkKw43Kr1UZF4kXrb_yoWxWr4Upr
yftFWqkF4UZF4vk3Z29w18Wryjy3yUtrW3Was8Gr1fZw4Dtry0grs7tFs8uFyxJr15GrWS
vF4jvr9rWrWDZFJanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2
9KBjDU0xBIdaVrnRJUUUkEb4IE77IF4wAFF20E14v26r4j6ryUM7CY07I20VC2zVCF04k2
6cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M28lY4IEw2IIxxk0rwA2F7IY1VAKz4
vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_Ar0_tr1l84ACjcxK6xIIjxv20xvEc7Cj
xVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x
0267AKxVW0oVCq3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG
6I80ewAv7VC0I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFV
Cjc4AY6r1j6r4UM4x0Y48IcVAKI48JMxk0xIA0c2IEe2xFo4CEbIxvr21lc7CjxVAaw2AF
wI0_JF0_Jw1l42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4
xG67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r126r1D
MIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I
0E14v26r1j6r4UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVWU
JVW8JwCI42IY6I8E87Iv6xkF7I0E14v26r1j6r4UYxBIdaVFxhVjvjDU0xZFpf9x07UK2N
tUUUUU=
X-CM-SenderInfo: p1hex046kxt4xhlfz01xgou0bp/
X-Spam-Status: No, score=-5.9 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,NICE_REPLY_A,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 2025/5/27 21:41, Steven Rostedt wrote:
> On Mon, 26 May 2025 09:33:37 +0800
> yebin <yebin@xxxxxxxxxxxxxxx> wrote:
>
>> On 2025/5/24 1:54, Steven Rostedt wrote:
>>> On Fri, 23 May 2025 16:39:44 +0800
>>> Ye Bin <yebin@xxxxxxxxxxxxxxx> wrote:
>>>
>>>> Above issue may happens as follow:
>>>> (1) Add kprobe trace point;
>>>> (2) insmod test.ko;
>>>> (3) Trigger ftrace disabled;
>>>
>>> This is the bug. How was ftrace_disabled triggered? That should never
>>> happen. Was test.ko buggy?
>>>
>> Yes. The following warning is reported during concurrent registration
>> between register_kprobe() and live patch, causing ftrace_disabled.
>>
>> WARNING: CPU: 56 PID: 2769 at kernel/trace/ftrace.c:2612
>> ftrace_modify_all_code+0x116/0x140
>
> OK, so it is a buggy module.
>
>>>> (4) rmmod test.ko;
>>>> (5) cat /proc/kallsyms; --> Will trigger UAF as test.ko already removed;
>>>> ftrace_mod_get_kallsym()
>>>> ...
>>>> strscpy(module_name, mod_map->mod->name, MODULE_NAME_LEN);
>>>> ...
>>>>
>>>> As ftrace_release_mod() judge 'ftrace_disabled' is true will return, and
>>>> 'mod_map' will remaining in ftrace_mod_maps. 'mod_map' has no chance to
>>>> release. Therefore, this also causes residual resources to accumulate.
>>>> To solve above issue, unconditionally clean up'mod_map'.
>>>>
>>>> Fixes: aba4b5c22cba ("ftrace: Save module init functions kallsyms symbols for tracing")
>>>
>>> This is *not* a fix. ftrace_disabled gets set when a bug is triggered. If
>>> this prevents ftrace_disabled from getting set, then it would be a fix. But
>>> if something else happens when ftrace_disabled is set, it just fixes a
>>> symptom and not the bug itself.
>>>
>> There are multiple causes for triggering ftrace_disabled. I agree that
>
> Yes, just like there's multiple causes for BUG_ON() ;-)
>
> The ftrace_disable is used to help keep the system from being totally
> corrupted. When it triggers, the best thing to do is a reboot.
>
>> aba4b5c22cba is not faulty. However, the incorporation of this patch
>> will cause problems due to triggering ftrace_disabled. The generation of
>> ftrace_disabled is beyond our control. This is related to the user. What
>> we can do is even if there are no additional derivative problems.
>
> Well, when a user inserts a module, then they become a kernel developer too ;-)
>
>>>
>>>> Signed-off-by: Ye Bin <yebin10@xxxxxxxxxx>
>>>> ---
>>>> kernel/trace/ftrace.c | 3 ---
>>>> 1 file changed, 3 deletions(-)
>>>>
>>>> diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
>>>> index a3d4dfad0cbc..ff5d9d73a4a7 100644
>>>> --- a/kernel/trace/ftrace.c
>>>> +++ b/kernel/trace/ftrace.c
>>>> @@ -7438,9 +7438,6 @@ void ftrace_release_mod(struct module *mod)
>>>>
>>>> mutex_lock(&ftrace_lock);
>>>>
>>>> - if (ftrace_disabled)
>>>> - goto out_unlock;
>>>> -
>>>
>>> Here you delete the check, and the next patch you have:
>>>
>>> + if (ftrace_disabled || (mod && !mod->num_ftrace_callsites)) {
>>> + mutex_unlock(&ftrace_lock);
>>> + return;
>>> + }
>>> +
>>>
>> The second patch I added judgment when initializing 'mod_map' in
>> ftrace_free_mem(). The first patch removes the judgment when
>> ftrace_release_mod() releases'mod_map'. The logic modified by the two
>> patches is isolated.
>
> Actually I think both patches are buggy.
>
> When ftrace_disabled is set, we don't know the state of the code and we do
> not want to do *any* more text modification. That's what ftrace_disable
> means. Something went wrong with text modification and any more changes can
> cause a bigger problem.
>
This problem can be solved by releasing the 'mod_map' resource when the
module is unloaded. Freeing up these resources is just an address that
cannot be translated into symbols, and there are no worse consequences.
> We don't add "exceptions".
>
> If you are worried about unloading modules when ftrace_disable is set, what
> is a much safer solution is to up the module count of all modules that have
> any ftrace callsites active, and prevent those modules from being removed.
>
I don't think it's necessary to introduce logic to restrict module
unloading here, which doesn't bring benefits but increases the cost of
interpretation for maintainers.
> Again, the only solution to a ftrace_disable being set is a full reboot.
>
We can't ask users to know such specialized details of the
implementation, which are unclear even to developers unfamiliar with the
ftrace module. Users can accept planned reboot system recovery, but
should not accept casual operations and the system crashes.All we can do
is do a good job of protection, give users more tolerance.Perhaps a
system that is dead but won't lie down is also a very undesirable
situation.However, ftrace is used to collect information and locate
faults. Even if it does not work, it does not affect services.In the
production environment, the most afraid of using ftrace suddenly crashes
the system.Therefore, the robustness of the tool itself is very important.
> -- Steve
>
I reworked the two patches, and the changes to the existing process
should be minimal. I don't know if I can get your approval. If you
agree, I'll post another V3 version.
PATCH[1/2]:
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 51580e54677f..b3436d86e470 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -7438,9 +7438,10 @@ void ftrace_release_mod(struct module *mod)
mutex_lock(&ftrace_lock);
- if (ftrace_disabled)
- goto out_unlock;
-
+ /*
+ * To avoid the UAF problem after the module is unloaded, the
+ * 'mod_map' resource needs to be released unconditionally.
+ */
list_for_each_entry_safe(mod_map, n, &ftrace_mod_maps, list) {
if (mod_map->mod == mod) {
list_del_rcu(&mod_map->list);
@@ -7451,6 +7452,9 @@ void ftrace_release_mod(struct module *mod)
}
}
+ if (ftrace_disabled)
+ goto out_unlock;
+
/*
* Each module has its own ftrace_pages, remove
* them from the list.
PATCH[2/2]:
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index a3d4dfad0cbc..51580e54677f 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -7629,6 +7629,9 @@ allocate_ftrace_mod_map(struct module *mod,
{
struct ftrace_mod_map *mod_map;
+ if (ftrace_disabled)
+ return NULL;
+
mod_map = kmalloc(sizeof(*mod_map), GFP_KERNEL);
if (!mod_map)
return NULL;
Return-Path: <linux-kernel+bounces-665516-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 4B2D841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:23:30 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id DC5604A5A1B
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:23:15 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 1FBA4286D78;
Wed, 28 May 2025 13:23:08 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="bXHor/Y7"
Received: from mail-qt1-f176.google.com (mail-qt1-f176.google.com [209.85.160.176])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id ADD3B2868A1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:23:05 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.176
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438587; cv=none; b=lfVrjDRFiWr4gGwEX2sru/QAbVbbxHw1mUcOLfwxxb/nHod1GmcOC7GPwRXuqxjqQyivbeOjgxlW2m7M61N1+aDYS53tlzHerkYiMbifNElA0qIlE3W92LgujnTicfPgMdEHpKQ43tW7UaH+zxh9/yB9PY3gYxqzzACXyC0dvhA=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438587; c=relaxed/simple;
bh=wLAIAFZApvRfJYt9cSIjJYMbXnMPn+iDGWN+sR5UeVM=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=au3PDJdkTROx+eBoxBsS8McXm8H2+Ig7wbzedUC1ephO24jPWjkOj+KqSYIDL8E372dRtnOSKohFxtWHIc6jd1tXNi3xxpEejDa6JlgFv3cbSdtzG8+QDSone1ioqhDhMd0Qq7gHckN6DG7ZAQdsXJZRTl5AUHMTTfxKliKTMsA=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=bXHor/Y7; arc=none smtp.client-ip=209.85.160.176
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com
Received: by mail-qt1-f176.google.com with SMTP id d75a77b69052e-476b89782c3so42609011cf.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 06:23:05 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=google.com; s=20230601; t=1748438584; x=1749043384; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=wLAIAFZApvRfJYt9cSIjJYMbXnMPn+iDGWN+sR5UeVM=;
b=bXHor/Y7iQUXdwSub6pJ/SULEIUI9E2G2oEq5gCdmBNzJVk/WLvueLT9dqNF6vGO0u
jwZy5d+WWZ6RkjW0yV+i5AnCp96ClSK7wnVzflG0GZb0ljTG0NEvFs/sjhiHNbE9zIJP
wZ5dhtaUWNiuPFYV2QBsHIqJBlZPgMTA3UM6KbHET60PIPtok/itn5OfFFTzXhpgEG7J
shImmydziY1PQlihUm8Vdf4oDYFmoiky+Mq+bTSljcNVwkc2QZroAxVDoIiZsHQapUST
cbnP3s8kBFciuwnQk8RBVGB79itJKm9m6SK3EEO1yOXSc1tA4oxha8hTscS4pjW6SoHS
RTrw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748438584; x=1749043384;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=wLAIAFZApvRfJYt9cSIjJYMbXnMPn+iDGWN+sR5UeVM=;
b=rF++YHCKSZPnaN03+I6rZnLAZGiCFAvxfqi+20ymGKAljGb0AhD9Q3SAJ/3LTw0N/m
bLd97UeRQkPHQmbWuu7WVHy7Tc6QZl9zBcp69vHn2ZXW3359uR9a0vbMO56P4jbADp2e
Vglc48zxF2r1LzlpXhXx8VkJarkiBf/3sKadglAb6gTUMQlXvCGFiImBfho8+t2KWW1g
uaeaCaX6OE1ysgp53Z4yJ+1huh8e4HpjTeRBMOJo748prvU8LFqh4X8BUEq4RQ2nUzEf
k4giYNU2MylojSZyanqgw0bRHZ3tFj3821MJhgtTwRFimRLPXAh4LqE5lSdZoP7yA9cB
9A+w==
X-Forwarded-Encrypted: i=1; AJvYcCVzsnsKxsd1GWdzr27afjbv3jpOVoSIqj4iiZU8kBSfBZzB0fNsPbUpbLbO6Ey6LzTxhZlE9EllG6jQCvk=@vger.kernel.org
X-Gm-Message-State: AOJu0YyfIY6rOCaFriec7xGpP5qP7zTcZ8CWLkTcszsI9rJypNV1+ume
clw8UIjsuWdIXUvtZc8HbqEa5fBS9eIpWexGNLHBm2Ji2OCVIOOYfXkhIhq7egi1psM1mpNH/BM
ldf9CXOAVBVSVgS80ll9IGNcDfPMXqnkhghlY5GYX
X-Gm-Gg: ASbGncs24Fe/Hfx4fYkBcYhl0pGVlY43/0useov7y0yW1k/amYZ5J2fkJGtHLdu+Fjd
42AxIlk7TN/xdF414Lh2AFB4KTLujqZkaNpZmPHNsGtRfqazcLYBW6w8ocvqII4VgkJ66fJSzk7
r1K4VzinhgYYTnZVWmPplrc/0ogCnMlmzYO4kM1s0uEwI=
X-Google-Smtp-Source: AGHT+IGbZYbMUUF0o/p3mJU8DlaGsdqh7xPg6DKlw1BJkyhZ4Y5kJip0JlOAmFjFmFCnoDaO4CJolysrrKy64JLg9BY=
X-Received: by 2002:a05:622a:608d:b0:494:b1f9:d683 with SMTP id
d75a77b69052e-4a38c7dd4cfmr34934901cf.49.1748438584068; Wed, 28 May 2025
06:23:04 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <CANn89i+C-qk-WhEanMS_tRiYJHHixH33MAO3u-wQVdWGJOjskw@xxxxxxxxxxxxxx>
<20250526194619126ArX868H3UosA7Jz31tRqF@xxxxxxxxxx>
In-Reply-To: <20250526194619126ArX868H3UosA7Jz31tRqF@xxxxxxxxxx>
From: Eric Dumazet <edumazet@xxxxxxxxxx>
Date: Wed, 28 May 2025 06:22:53 -0700
X-Gm-Features: AX0GCFuFbinN-PIix2adUwdlDdRnQDxrOpLHN9thHLQVIv65tW3K_tN3mCvIi88
Message-ID: <CANn89iL43q7tCETt3gW9L_HVHdRrovu9mauekA3QrWrpVSm+Ow@xxxxxxxxxxxxxx>
Subject: Re: [PATCH net-next] net: arp: use kfree_skb_reason() in arp_rcv()
To: jiang.kun2@xxxxxxxxxx
Cc: davem@xxxxxxxxxxxxx, kuba@xxxxxxxxxx, dsahern@xxxxxxxxxx,
pabeni@xxxxxxxxxx, horms@xxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, xu.xin16@xxxxxxxxxx, yang.yang29@xxxxxxxxxx,
wang.yaxin@xxxxxxxxxx, fan.yu9@xxxxxxxxxx, he.peilin@xxxxxxxxxx,
tu.qiang35@xxxxxxxxxx, qiu.yutan@xxxxxxxxxx, zhang.yunkai@xxxxxxxxxx,
ye.xingchen@xxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-11.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Mon, May 26, 2025 at 4:47=E2=80=AFAM <jiang.kun2@xxxxxxxxxx> wrote:
>
> >Are these errors common enough to get dedicated drop reasons ? Most
> >stacks have implemented ARP more than 20 years ago.
> >
> >I think that for rare events like this, the standard call graph should
> >be plenty enough. (perf record -ag -e skb:kfree_skb)
> >
> >Otherwise we will get 1000 drop reasons, and the profusion of names
> >makes them useless.
>
> Thank you for your feedback.
>
> Maliciously crafted ARP packets often trigger these two scenarios.
> Using perf cannot directly distinguish between the two cases;
> additionally, enabling perf in embedded environments may lead to
> noticeable performance overhead.
ARP packets are local to the domain. They are not a concern, really.
If your local domain has 'malicious hosts', they could actually
trigger more issues by sending
complete packets, to make sure to fill various hash tables.
Return-Path: <linux-kernel+bounces-665517-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 752C241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:24:02 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id A0F5E1BC5E1D
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:24:15 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id D140D286D62;
Wed, 28 May 2025 13:23:55 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="SvGahb1D"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1073A246326
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:23:54 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438635; cv=none; b=eox+7iE/oGukKwIXSVER1UEKdQ96Xv271I1arF+EgNVezm801KRMkV8fg8cIjXxD1dJ51cE6levyMX2KVLfSs2HBNhmUC52vmi2PNCIR8w8k0HmekDuxUgpHkHzZGtxLO6uAUy38BNvcbthIvKvzW+AvrljLC77L+CWwrDmNZR0=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438635; c=relaxed/simple;
bh=5vKSGaBChbSlR5lX+l//vJBLLeI/kpeZbgb9bJhXdmI=;
h=MIME-Version:Date:From:To:Cc:Subject:In-Reply-To:References:
Message-ID:Content-Type; b=aDr3VDQv/7KThivOQDOJ1proLXV4s4TIwA6FusTkEY5Ip2ShSAMlI3bY/OxUqwJV/DtLB7JElIpjc2e/jf6f+FLcvzqUlZmr8+5cggILt8iubZaSRZ+GzLCc50/S5ZRmg5v8SjSZa+vFi07LYlnjbJtwPmsuE6Lz+zgxDoZRRxs=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SvGahb1D; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id AEA28C4CEE7;
Wed, 28 May 2025 13:23:49 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748438634;
bh=5vKSGaBChbSlR5lX+l//vJBLLeI/kpeZbgb9bJhXdmI=;
h=Date:From:To:Cc:Subject:In-Reply-To:References:From;
b=SvGahb1Do9eqe3wYzPHut9tiGeekau9E3fkbyq23F3FrZk/QHelsJAtjySHEJh/S2
BP/9WfUEWcRRx5e+n07v424qqusqgcwVW0B1iKztcH9mvKersXINz2nOVHJ033iSbM
t5aeZXGDeNd0MYvnQo5kOg1eZ5YEsJu4zHSkJQHWl9jQQyuONp4yNjCvyTsL3CV/tP
y4G3wCbrF7x3FU0EHTfQ0jnZhCxXpwQc2wMCGhb4+JCD4QKVz2RfnSux88ZJGtnKTT
3ZWXiI9Euov3Ym4g6mVEjSxIgRGRRyI7qJOAxlrUKosARIRmzlfONW3KZG90X+TrM3
9JG2TsMFQCGFg==
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Date: Wed, 28 May 2025 15:23:47 +0200
From: Michael Walle <mwalle@xxxxxxxxxx>
To: Devarsh Thakkar <devarsht@xxxxxx>
Cc: Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx>, Aradhya Bhatia
<aradhya.bhatia@xxxxxxxxx>, dri-devel@xxxxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-phy@xxxxxxxxxxxxxxxxxxx, Francesco
Dolcini <francesco@xxxxxxxxxx>, Jyri Sarha <jyri.sarha@xxxxxx>, Maarten
Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>, Maxime Ripard
<mripard@xxxxxxxxxx>, Thomas Zimmermann <tzimmermann@xxxxxxx>, David Airlie
<airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>, Vinod Koul
<vkoul@xxxxxxxxxx>, Kishon Vijay Abraham I <kishon@xxxxxxxxxx>, Andrzej
Hajda <andrzej.hajda@xxxxxxxxx>, Neil Armstrong <neil.armstrong@xxxxxxxxxx>,
Robert Foss <rfoss@xxxxxxxxxx>, Laurent Pinchart
<Laurent.pinchart@xxxxxxxxxxxxxxxx>, Jonas Karlman <jonas@xxxxxxxxx>, Jernej
Skrabec <jernej.skrabec@xxxxxxxxx>
Subject: Re: [PATCH v2 03/18] drm/tidss: Adjust the pclk based on the HW
capabilities
In-Reply-To: <ab5f27ac-6bbe-4746-a2bd-e5f1a667ae91@xxxxxx>
References: <20250402-cdns-dsi-impro-v2-0-4a093eaa5e27@xxxxxxxxxxxxxxxx>
<20250402-cdns-dsi-impro-v2-3-4a093eaa5e27@xxxxxxxxxxxxxxxx>
<DA6TT575Z82D.3MPK8HG5GRL8U@xxxxxxxxxx>
<8fc0c880-0809-43d6-b03a-1a5728f5d0d4@xxxxxxxxxxxxxxxx>
<ab5f27ac-6bbe-4746-a2bd-e5f1a667ae91@xxxxxx>
Message-ID: <27fa4ad56a57f0c408d3b119a620c1cb@xxxxxxxxxx>
X-Sender: mwalle@xxxxxxxxxx
Content-Type: text/plain; charset=US-ASCII;
format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Devarsh, Hi Tomi,
>>> While testing Aardhya's OLDI support patches [1], I've noticed that
>>> the resulting LVDS clock is wrong if this patch is applied.
>>>
>>>> In practice, with the current K3 SoCs, the display PLL is capable of
>>>> producing very exact clocks, so most likely the rounded rate is the
>>>> same
>>>> as the original one.
>>>
>
> Yes, display PLL is flexible and device manager should set exact
> frequency.
> Please note that there was a bug in device manager in earlier releases
> which
> would prevent setting it to exact clocks. You should try with latest
> SDK
> release firmware binaries (11.0...(10.1 should also work though)) if
> seeing
> any misbehaviour in that regard.
Yes, I don't doubt that. But it's the way the driver is handling the
clock w.r.t. to the fixed-clock-divider in the LVDS case which is
causing
problems.
>>> This is now what I'm seeing. Most SoCs have that fixed clock thingy
>>> for (some?) VPs, e.g. [2]. And clk_round_rate() will return the
>>> fixed clock rate for this clock, which will then result in an LVDS
>>> clock which is way off.
>>>
>>> I'm testing on an AM67A (J722S) and I've backported some of the
>>> patches as well as dtsi fragmets from downstream. Thus, it might be
>>> as well the case that the fixed-factor-clock node is wrong here.
>>> OTOH other K3 SoCs do this in mainline as well.
>>
>> Thanks for findings this (It's not a fixed clock, but a (fixed)
>> divider). I can reproduce on my AM62 SK's OLDI output.
>>
>> I didn't see AM625 TRM explaining the DSS + OLDI clocking. I remember
>> it
>> was a bit "interesting". Afaics from testing, the VP clock is derived
>> from the OLDI serial clock divided by 7. To change the VP clock, we
>> need
>> to set the OLDI clock's rate. But the code we have at the moment is
>> using clk_round_rate/set_rate to the VP clock.
>>
>
> This is correct. The pixel clock is derived as OLDI clock/7 when OLDI
> is
> enabled.
What means "if OLDI is enabled"? Is there any other clock otherwise or
none at all? Reading the clock ID desciption in the TISCI documentation,
I presume there is no configurable clock for the first VP at all. I.e.
if one compares it with DSS1 which has two muxed clocks, DSS0 only has
one muxed clock (DEV_DSS0_DPI_1_IN_CLK) and DEV_DSS0_DPI_0_IN_CLK is
fixed,
presumely thats the fixed /7 clock.
Also how is this handled for the DSS1 (on an AM67A)? The TI downstream
kernel also has a fixed-clock-divider for the VP1 on DSS1, but I think
that is wrong, because it's actually configurable (if OLDI is
disabled?).
>> And we get the crtc atomic_check called before setting the OLDI clock
>> rate, so it doesn't even work by luck (i.e. if the OLDI clock was set
>> earlier, the VP clock would already have the right rate, and it would
>> seem that everything is ok). In the atomic_check we see the OLDI
>> bypass
>> clock (25 MHz), which results in 3571428 Hz VP clock.
>>
>> And with this patch, the code then decides that 3571428 Hz is what the
>> HW can do, and uses it as the pixel clock.
FWIW, I'm seeing exactly 300MHz on the AM67A (the FCLK is 2.1GHz
according
to k3conf).
-michael
>>
>> Aradhya, Devarsh, do you remember how the clocking goes here? Or if
>> it's
>> in the TRM, please point me to it...
>>
>
> I think what you described is correct, if any specific questions I can
> help
> check. But any misbehaviour you are seeing w.r.t clock setting (i.e.
> what
> driver is trying to set versus what actually is getting set)
> then please dump the dss clock tree along with relevant details of test
> done:
>
> k3conf dump clock <display_device_id>
>
> You can get the device ID via TISCI Doc [1]
>
> [1]:
> https://downloads.ti.com/tisci/esd/latest/5_soc_doc/am62x/clocks.html#clock-for-am62x-device
>
> Regards
> Devarsh
Return-Path: <linux-kernel+bounces-665518-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 298C041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:25:09 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 5CD2B169F34
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:25:10 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id CC61B286D75;
Wed, 28 May 2025 13:25:01 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=lunn.ch header.i=@lunn.ch header.b="CvNTTWZq"
Received: from vps0.lunn.ch (vps0.lunn.ch [156.67.10.101])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6BB841FAA;
Wed, 28 May 2025 13:24:59 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=156.67.10.101
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438701; cv=none; b=EJmfcWG6ROLnJ6ZwcsuxEJR/1SAux2iaekDJJraJQPPnueA6J98tonQojUfaX33HTIVxYgYvyQ+mMM0oe3boZQ/IUeNYhD4dxWFNT4ZkWagVZb9zpiokuoDsoZ03cGchWDO+hoxI4KrlK51lYIY1yJ5x3UgYcnx2v1h2Qs1+AQg=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438701; c=relaxed/simple;
bh=3EaQ0vYUuKF1jmAFbBVV6X09cz1ehGj922mtt6MzENI=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=cjosWkV7JFp7wBk4QUE3Lp0oAzK7QIwUoD3GhCZGMC6xnGPEDjUodFDXkHvxOVHB+OATBlHs4thVaecK0OqdbGLqfc0zKAXZxFCDGgbiUzUYm1IhtphRWoKVzx7qR7JQC3yM4rMGrWSQ/8/MSVyHsA0pzxCz6aUwNKkfCderMoo=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=lunn.ch; spf=pass smtp.mailfrom=lunn.ch; dkim=pass (1024-bit key) header.d=lunn.ch header.i=@lunn.ch header.b=CvNTTWZq; arc=none smtp.client-ip=156.67.10.101
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=lunn.ch
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=lunn.ch
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lunn.ch;
s=20171124; h=In-Reply-To:Content-Transfer-Encoding:Content-Disposition:
Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:From:
Sender:Reply-To:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:
Content-Transfer-Encoding:Content-ID:Content-Description:Content-Disposition:
In-Reply-To:References; bh=eBLT1coqN7DWf9zqS26cnLXO/a+cQ5A8TJyemfvfOhg=; b=Cv
NTTWZqEWIqlQKLw1iqZfeKB2gycKP4fQnxaOgVhW9sQoXjUgOMqlAPqOY/cEdYB0XM/boQ+lyJ8s+
kqj5B6BKu2PlJbvkVkPJ277StCNkbUonv85HBREfXR+xowx5Nj4vC0mlLHpG03b0Wk7ggawLr63qs
WWFpLv9UJKSTCO4=;
Received: from andrew by vps0.lunn.ch with local (Exim 4.94.2)
(envelope-from <andrew@xxxxxxx>)
id 1uKGm5-00EB7S-MN; Wed, 28 May 2025 15:24:53 +0200
Date: Wed, 28 May 2025 15:24:53 +0200
From: Andrew Lunn <andrew@xxxxxxx>
To: James Hilliard <james.hilliard1@xxxxxxxxx>
Cc: "Russell King (Oracle)" <linux@xxxxxxxxxxxxxxx>, netdev@xxxxxxxxxxxxxxx,
linux-sunxi@xxxxxxxxxxxxxxx, Andrew Lunn <andrew+netdev@xxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>,
Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Maxime Coquelin <mcoquelin.stm32@xxxxxxxxx>,
Alexandre Torgue <alexandre.torgue@xxxxxxxxxxx>,
Furong Xu <0x1207@xxxxxxxxx>,
Kunihiko Hayashi <hayashi.kunihiko@xxxxxxxxxxxxx>,
linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH v2 1/3] net: stmmac: allow drivers to explicitly select
PHY device
Message-ID: <f915a0ca-35c9-4a95-8274-8215a9a3e8f5@xxxxxxx>
References: <20250527175558.2738342-1-james.hilliard1@xxxxxxxxx>
<631ed4fe-f28a-443b-922b-7f41c20f31f3@xxxxxxx>
<CADvTj4rGdb_kHV_gjKTJNkzYEPMzqLcHY_1xw7wy5r-ryqDfNQ@xxxxxxxxxxxxxx>
<fe8fb314-de99-45c2-b71e-5cedffe590b0@xxxxxxx>
<CADvTj4qRmjUQJnhamkWNpHGNAtvFyOJnbaQ5RZ6NYYqSNhxshA@xxxxxxxxxxxxxx>
<014d8d63-bfb1-4911-9ea6-6f4cdabc46e5@xxxxxxx>
<CADvTj4oVj-38ohw7Na9rkXLTGEEFkLv=4S40GPvHM5eZnN7KyA@xxxxxxxxxxxxxx>
<aDbA5l5iXNntTN6n@xxxxxxxxxxxxxxxxxxxxx>
<CADvTj4qP_enKCG-xpNG44ddMOJj42c+yiuMjV_N9LPJPMJqyOg@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <CADvTj4qP_enKCG-xpNG44ddMOJj42c+yiuMjV_N9LPJPMJqyOg@xxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 05:57:38AM -0600, James Hilliard wrote:
> On Wed, May 28, 2025 at 1:53â?¯AM Russell King (Oracle)
> <linux@xxxxxxxxxxxxxxx> wrote:
> >
> > On Tue, May 27, 2025 at 02:37:03PM -0600, James Hilliard wrote:
> > > On Tue, May 27, 2025 at 2:30â?¯PM Andrew Lunn <andrew@xxxxxxx> wrote:
> > > >
> > > > > Sure, that may make sense to do as well, but I still don't see
> > > > > how that impacts the need to runtime select the PHY which
> > > > > is configured for the correct MFD.
> > > >
> > > > If you know what variant you have, you only include the one PHY you
> > > > actually have, and phy-handle points to it, just as normal. No runtime
> > > > selection.
> > >
> > > Oh, so here's the issue, we have both PHY variants, older hardware
> > > generally has AC200 PHY's while newer ships AC300 PHY's, but
> > > when I surveyed our deployed hardware using these boards many
> > > systems of similar age would randomly mix AC200 and AC300 PHY's.
> > >
> > > It appears there was a fairly long transition period where both variants
> > > were being shipped.
> >
> > Given that DT is supposed to describe the hardware that is being run on,
> > it should _describe_ _the_ _hardware_ that the kernel is being run on.
> >
> > That means not enumerating all possibilities in DT and then having magic
> > in the kernel to select the right variant. That means having a correct
> > description in DT for the kernel to use.
>
> The approach I'm using is IMO quite similar to say other hardware
> variant runtime detection DT features like this:
> https://github.com/torvalds/linux/commit/157ce8f381efe264933e9366db828d845bade3a1
That is for things link a HAT on a RPi. It is something which is easy
to replace, and is expected to be replaced.
You are talking about some form of chiplet like component within the
SoC package. It is not easy to replace, and not expected to be
replaced.
Different uses cases altogether.
What i think we will end up with is the base SoC .dtsi file, and two
additional .dtsi files describing the two PHY variants.
Andrew
Return-Path: <linux-kernel+bounces-665519-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 2D0D441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:26:18 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 04A2B1BC66AB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:26:31 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id E9A61286D74;
Wed, 28 May 2025 13:26:09 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UWjAUUJ5"
Received: from mail-ed1-f47.google.com (mail-ed1-f47.google.com [209.85.208.47])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8123C1FAA;
Wed, 28 May 2025 13:26:07 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.47
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438769; cv=none; b=e0jiwNzLtazEUOCt8X7Y+AfP6UP9B74tFN0FY/Sl4Q6fOKHHOLGZMyKYIcT9wiu/GG5rqdhZM7Bwtmc+loQbN/KXf6AxIzS8pAJVIpiXeztjauxF5h6Y6PrtxHA8BRJmeV/FV1t/FccmfvrwlaM9eIivJD/QhDOotQPTdHWXDBo=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438769; c=relaxed/simple;
bh=rxep3wf4faA2onypK2iZ/bRRCLhtffcSXOxeWi8D5cg=;
h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=sVnJsbGA92GGtM0MjoS/SqB2T2a4NSmlM1TdJePeOIsH0N5LZo9Fhz52f+ZLcA8Awhc8/5baNWu5Zw5ZAXkn6Eat+GXAJwVAldFc82GThUN+EC6ppRYBSAulS9aVRN3kYH/YU5EFRs3436O5UXVWer0r7AeClbbhbZ+ASuZb29o=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UWjAUUJ5; arc=none smtp.client-ip=209.85.208.47
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-ed1-f47.google.com with SMTP id 4fb4d7f45d1cf-604e299b5b6so1766842a12.0;
Wed, 28 May 2025 06:26:07 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748438766; x=1749043566; darn=vger.kernel.org;
h=content-transfer-encoding:mime-version:message-id:date:subject:cc
:to:from:from:to:cc:subject:date:message-id:reply-to;
bh=ieSLku7E97lhZ4UgdnDAb1QCFNhVxCm/IzChsnoZiEc=;
b=UWjAUUJ5665ICvx61xNY6FK/9oHtzZc6a4KQT2vCkLxbY9HmJmQN9PvCE8psN6kP24
TrtFqM3+4XuJP7yi29DrkTTqfMSg5HPA3Wwg+zIbR+AI+L2qKi5Nw6s7zdcglWziqidb
P06TTV6bOJ+kYFt8+6MwuRa0J6qTQpLl6eChDTqnCDF86MlpHVrwcZrfMg77VKHlVpLZ
qyUyjry3C6MEws4M0jnTF86M2kpwaw7jpynQ4fjD6R2kwHFeLZKwWwSPFppPNMk6p9Ik
kvBez8B4rfuyY/OaQha+/XaVz+oEduN/04aOg2MPdZDZQMXcXzC296i3UGuKKqAnxzWa
l2yA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748438766; x=1749043566;
h=content-transfer-encoding:mime-version:message-id:date:subject:cc
:to:from:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=ieSLku7E97lhZ4UgdnDAb1QCFNhVxCm/IzChsnoZiEc=;
b=LutXOfge8/OnymtH5ba8fcPsedAmbtgs43SOpWaVvRpbklmp3S4jeNdQnRWHhy4G2n
PcaKu9RKzzEdokRo7eEWtDWsNi6wsAxcp4l0AWuUPBlEZAUyk+6jv+EJ89dB5ABRCe/t
93GzfTA10S2olPfoTMF5yPVjjyBNOikHgawRzahDYpaBlNfUt1YqbehYMsioK6myA+U3
N8xNZFruv11mE0oTF2SFYc1qnxA1kdJdPAWghwtGV1uq5/5e6E4NXyGNaYYErsKSh162
cuRh8fBUQqMPTJ8BfdhTugVzgK9l0sQpAKAyoRzhhX1ZY7HmiNQeOTxqLxijML25iq0v
6uQQ==
X-Forwarded-Encrypted: i=1; AJvYcCWIJ1P3hnSNpbX921UbzYKdMPx9tkpB231Pca3ZV8L/89UfALRqd8mAys8dzCK9xBzSdsZAThZT6mgV5HD4@xxxxxxxxxxxxxxx, AJvYcCXQmg11sfpnl36i9hLkZYtX99HyUS1RLbPjv9F1sNTmlqPtUErbiWctvoW9ia9yCfWudjVW/QpSCCc=@vger.kernel.org
X-Gm-Message-State: AOJu0YwTUI0aRYqPYbIkTlXbVF5Do+p0IjP51nm3x73rePt3SyVFveR+
dOv5gDfbtaVU96Zu+m6Q/jCJc6rVNbB3GKtvvS7wEOnV5g1jizZn8yOC
X-Gm-Gg: ASbGncuLkjeTbX7kBpWkfOyluXiyoVrV/5/mnNP1LJgIj828lnyjY58vbiSeTMnKiH3
ZB9elTvVaSvztdF02h14E0JmWNlmM3U2IQ8fKXY3Z6gquJyJmcC1uUTrJO2Sf+PWRsYODnzouBW
GrEApjTbUIjnSlXT9Va14DuW4zMlSXE+5bNI0RhYckDhumJYENnHeDhf0g8wwAqhzxsk8rYWM38
WP6Jw+JQ5RzAsTfl2U4uSGUv2ILtrlUzDy1agj2L8EkW7mp/EIIUgL1ZvIY7NusH9J3sKN1nbP3
3b/ESFVdYN+bZrJDHaOLiZ+mzcMjdRoGg4hoNyuUQrU680eXPRFYpxEV5GWTJqU/IGeNrT4obNn
F
X-Google-Smtp-Source: AGHT+IGH6NhjWRQzveyywsEHiNFK4CABJe+WM0+dyFghWFFkW3BP9KOOz7lN2b71Pta0/mTCAqJMrA==
X-Received: by 2002:a17:907:9717:b0:ad5:6258:996f with SMTP id a640c23a62f3a-ad8989f78acmr418190566b.19.1748438765502;
Wed, 28 May 2025 06:26:05 -0700 (PDT)
Received: from iku.Home ([2a06:5906:61b:2d00:7078:193c:ccdc:e2f5])
by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad8a19ad462sm107742766b.4.2025.05.28.06.26.04
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 06:26:04 -0700 (PDT)
From: Prabhakar <prabhakar.csengg@xxxxxxxxx>
X-Google-Original-From: Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
To: Geert Uytterhoeven <geert+renesas@xxxxxxxxx>,
Michael Turquette <mturquette@xxxxxxxxxxxx>,
Stephen Boyd <sboyd@xxxxxxxxxx>
Cc: linux-renesas-soc@xxxxxxxxxxxxxxx,
linux-clk@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Prabhakar <prabhakar.csengg@xxxxxxxxx>,
Biju Das <biju.das.jz@xxxxxxxxxxxxxx>,
Fabrizio Castro <fabrizio.castro.jz@xxxxxxxxxxx>,
Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Subject: [PATCH] clk: renesas: r9a09g056: Add clock and reset entries for USB2.0
Date: Wed, 28 May 2025 14:25:58 +0100
Message-ID: <20250528132558.167178-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
X-Mailer: git-send-email 2.49.0
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Add clock and reset entries for USB2.0.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
---
drivers/clk/renesas/r9a09g056-cpg.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/clk/renesas/r9a09g056-cpg.c b/drivers/clk/renesas/r9a09g056-cpg.c
index 13b5db79aab4..e370ffb8c1e2 100644
--- a/drivers/clk/renesas/r9a09g056-cpg.c
+++ b/drivers/clk/renesas/r9a09g056-cpg.c
@@ -134,6 +134,7 @@ static const struct cpg_core_clk r9a09g056_core_clks[] __initconst = {
DEF_DDIV("ca55_0_coreclk3", R9A09G056_CA55_0_CORE_CLK3, CLK_PLLCA55,
CDDIV1_DIVCTL3, dtable_1_8),
DEF_FIXED("iotop_0_shclk", R9A09G056_IOTOP_0_SHCLK, CLK_PLLCM33_DIV16, 1, 1),
+ DEF_FIXED("usb2_0_clk_core0", R9A09G056_USB2_0_CLK_CORE0, CLK_QEXTAL, 1, 1),
DEF_FIXED("gbeth_0_clk_ptp_ref_i", R9A09G056_GBETH_0_CLK_PTP_REF_I,
CLK_PLLETH_DIV_125_FIX, 1, 1),
DEF_FIXED("gbeth_1_clk_ptp_ref_i", R9A09G056_GBETH_1_CLK_PTP_REF_I,
@@ -219,6 +220,12 @@ static const struct rzv2h_mod_clk r9a09g056_mod_clks[] __initconst = {
BUS_MSTOP(8, BIT(4))),
DEF_MOD("sdhi_2_aclk", CLK_PLLDTY_ACPU_DIV4, 10, 14, 5, 14,
BUS_MSTOP(8, BIT(4))),
+ DEF_MOD("usb2_0_u2h0_hclk", CLK_PLLDTY_DIV8, 11, 3, 5, 19,
+ BUS_MSTOP(7, BIT(7))),
+ DEF_MOD("usb2_0_u2p_exr_cpuclk", CLK_PLLDTY_ACPU_DIV4, 11, 5, 5, 21,
+ BUS_MSTOP(7, BIT(9))),
+ DEF_MOD("usb2_0_pclk_usbtst0", CLK_PLLDTY_ACPU_DIV4, 11, 6, 5, 22,
+ BUS_MSTOP(7, BIT(10))),
DEF_MOD_MUX_EXTERNAL("gbeth_0_clk_tx_i", CLK_SMUX2_GBE0_TXCLK, 11, 8, 5, 24,
BUS_MSTOP(8, BIT(5)), 1),
DEF_MOD_MUX_EXTERNAL("gbeth_0_clk_rx_i", CLK_SMUX2_GBE0_RXCLK, 11, 9, 5, 25,
@@ -280,6 +287,9 @@ static const struct rzv2h_reset r9a09g056_resets[] __initconst = {
DEF_RST(10, 7, 4, 24), /* SDHI_0_IXRST */
DEF_RST(10, 8, 4, 25), /* SDHI_1_IXRST */
DEF_RST(10, 9, 4, 26), /* SDHI_2_IXRST */
+ DEF_RST(10, 12, 4, 29), /* USB2_0_U2H0_HRESETN */
+ DEF_RST(10, 14, 4, 31), /* USB2_0_U2P_EXL_SYSRST */
+ DEF_RST(10, 15, 5, 0), /* USB2_0_PRESETN */
DEF_RST(11, 0, 5, 1), /* GBETH_0_ARESETN_I */
DEF_RST(11, 1, 5, 2), /* GBETH_1_ARESETN_I */
DEF_RST(13, 13, 6, 14), /* GPU_0_RESETN */
--
2.49.0
Return-Path: <linux-kernel+bounces-665520-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 8638241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:26:53 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 4C4F018803A4
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:27:02 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id AEE982874EB;
Wed, 28 May 2025 13:26:38 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="hVmcOgcn"
Received: from mail-ed1-f67.google.com (mail-ed1-f67.google.com [209.85.208.67])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6F62C284696;
Wed, 28 May 2025 13:26:36 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.67
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438798; cv=none; b=R6mpWf2zWmnYDBzihJ3mjXbVvR6O5ztte8Wom9GPMB5HbOr2ttXDZOYIqvEfVb8IibuO9stZ8xLTP2NbnZ59qNuBnshj5wbJdrkYlfqWARc5FKZafARKTC7LP5OYPNyq7xOUlzmTeCzqeAPfolPhnBSyUJ95CsSk8MqtOMIUrrQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438798; c=relaxed/simple;
bh=VPsQqkwfPHGKSpcpB8sg7p0QtkZWF9LZET1JEEHDW4w=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=RO69bCe/KtISj36pd0wSuQWgbr3xMRLidfFIbTSFXOax2hgQxNHvlyvmYGZhRX4Z9jirzTMFf+8QfaOHGYS5Iq37EVDXlQB2c6S/5KWD3PttssQR2Au2Hjoz9q/I95804HhL98Qph5MlF0sDm0zLKxaD8oTFzlv3JoNzJMfHrn4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=hVmcOgcn; arc=none smtp.client-ip=209.85.208.67
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-ed1-f67.google.com with SMTP id 4fb4d7f45d1cf-604e745b6fbso4620821a12.2;
Wed, 28 May 2025 06:26:36 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748438795; x=1749043595; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=VPsQqkwfPHGKSpcpB8sg7p0QtkZWF9LZET1JEEHDW4w=;
b=hVmcOgcnciSLSb3chLtS/4fV9Aw/7dR6Aw/+gRJeuWddE4dXwGytcOQnT0y+egFsGN
9JCAIlFrg4vWnM8TxLyKwMMjwtnndxFBy8XRBwTkpEmJvKlZSSQwi31Yxd++LBRdxWdj
inbGUuUMcFl8c1a2yiG2s6Wu9PQJG3Mn1zk+Fr6eaRjJLHDIQ3RUwiW1b6RNPHAVadyv
kQJTYUCkZt1YUbubu/42OH4U/EVGcatm48a0iqC6v5AGqCDWVT0egu/UyatkOaCy4rv5
qbTAToMfQ2gorYnf11nQp33QQmVHroXC6pMwklWz+FWyzOKY1sD1Il3Hl58p4cepJCtd
dKoA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748438795; x=1749043595;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=VPsQqkwfPHGKSpcpB8sg7p0QtkZWF9LZET1JEEHDW4w=;
b=dv9vRrVKGtFGtJRm8IWZtjBaXnblOa25Lr2qJTPHl65k6oxP4OwZUL78nTz7PdnyLq
6qmPIhV3mf448xwx4K0GtAlLFQauNn1NLKrBTGf7MtQUgXTo/Jc3/zAV7STLgJzXSeR7
JsJglrZ7Y9RV4/IjGF2O9GSgJBWWn92rItwayQgxtgUmMZKZ9nAftz0Z7+HX74drZZCv
Gj5B0ZYAjuC0OeIGrmx5PkQHELyKiVe9zUgn6OL23ixS2Q7eFBEn8llHE97PFACcd85k
joO2xmiS54Zfsfa+1s01HXHzo1Wq13EtL42mbKvddd2IcVdbMNHPnFTYF3ffRlqcE6U+
o6KQ==
X-Forwarded-Encrypted: i=1; AJvYcCU4CkxwTO/kx4+y7L+/Q9qfnDY6KS8i0dtrZkENxnT6mzxfrEmnHFnnJkDF+uYu2S41hxKGgtTep0mPWBbI214Q@xxxxxxxxxxxxxxx, AJvYcCUFSfuOK4irxpCON7enEuUFIoXe2HCQ0l8udRL1891+sLUYejc1SY0zi+rLpBmTDG09ObzLc3uX@xxxxxxxxxxxxxxx, AJvYcCVN9wuGEIgRT8TBnhuuRbfHGHgNOn8Dn7rVSDaQGuJO9VilNaP7OJaOEdV5iOZYM/ZHE/3UbmPGilAoJMQ=@vger.kernel.org
X-Gm-Message-State: AOJu0YyeRMFm4gbCZzBEhLGMYl1jSH5yeqrZRYTRF/9O9QavxDlnrknL
TPRILA5Xpt9nxm0tPjyZCmBmaCRYkXh108zzEc3xL4SF2bhGBVH1n5Jcn+PLC59mp0n6EpchMRe
SUZauUJ2a2Nf8o18GDu7YoTKWz5RmeGk=
X-Gm-Gg: ASbGncs5V4ZfoMNDb4cAcGDJl+rcLoJnYpnv8KO4ZYJmxupwzWeiLzjyJelYPuLAJbz
/qIyymG2G/QZbAE06IvuB4RUXenAJmYu1cTrQp9Lj6x3VnCK4qfUpZdZuVZMcMUShLFAlmYxaXh
o9IGKJutc2sXBPQd7a3r9kMQEZvu8yCgnJ0g==
X-Google-Smtp-Source: AGHT+IGY3WTGofHERJhXHFrVQNx0Lrd8u5WGFlxYXOOuC8HUrH3lQtd0jPe8jURqgKSoVM5HoKIfeodRWCOxl77FccQ=
X-Received: by 2002:a17:907:2da5:b0:ad5:34cf:d23f with SMTP id
a640c23a62f3a-ad8a1f0f399mr213276466b.21.1748438794380; Wed, 28 May 2025
06:26:34 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <CAN2Y7hxscai7JuC0fPE8DZ3QOPzO_KsE_AMCuyeTYRQQW_mA2w@xxxxxxxxxxxxxx>
<aDcLIh2lPkAWOVCI@xxxxxxxxx>
In-Reply-To: <aDcLIh2lPkAWOVCI@xxxxxxxxx>
From: ying chen <yc1082463@xxxxxxxxx>
Date: Wed, 28 May 2025 21:26:22 +0800
X-Gm-Features: AX0GCFuIrdW9VNZ1czfCrrMjSQPt9e8UqQ69svvcfmWJ9RkuT0Vx34are8Ftpmk
Message-ID: <CAN2Y7hzKd+VxWy56q9ad8xwCcHPy5qoEaswZapnF87YkyYMcsA@xxxxxxxxxxxxxx>
Subject: Re: [bug report, linux 6.15-rc4] A large number of connections in the
SYN_SENT state caused the nf_conntrack table to be full.
To: Florian Westphal <fw@xxxxxxxxx>
Cc: pablo@xxxxxxxxxxxxx, kadlec@xxxxxxxxxxxxx, davem@xxxxxxxxxxxxx,
edumazet@xxxxxxxxxx, kuba@xxxxxxxxxx, pabeni@xxxxxxxxxx,
netfilter-devel@xxxxxxxxxxxxxxx, coreteam@xxxxxxxxxxxxx,
netdev@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 9:10=E2=80=AFPM Florian Westphal <fw@xxxxxxxxx> wro=
te:
>
> ying chen <yc1082463@xxxxxxxxx> wrote:
> > Hello all,
> >
> > I encountered an "nf_conntrack: table full" warning on Linux 6.15-rc4.
> > Running cat /proc/net/nf_conntrack showed a large number of
> > connections in the SYN_SENT state.
> > As is well known, if we attempt to connect to a non-existent port, the
> > system will respond with an RST and then delete the conntrack entry.
> > However, when we frequently connect to non-existent ports, the
> > conntrack entries are not deleted, eventually causing the nf_conntrack
> > table to fill up.
>
> Yes, what do you expect to happen?
I understand that the conntrack entry should be deleted immediately
after receiving the RST reply.
Return-Path: <linux-kernel+bounces-665521-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id A1ADA41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:27:15 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 519043B67CB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:26:48 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 118FB2857C1;
Wed, 28 May 2025 13:27:02 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="IGUkPiDx";
dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="IGUkPiDx"
Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011001.outbound.protection.outlook.com [52.101.65.1])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id D7F1A286D72;
Wed, 28 May 2025 13:26:56 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.1
ARC-Seal:i=3; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438820; cv=fail; b=ZPw3ugJYWwIbKytnFjmRWXB/Zz6FAAD2rL7euaeT2ISB9dnlMNmv2ePq3JtEVP8Aq14hS4jAfWd2Yj8P/xHL40hGWYQY/Pbk3Jy52x4kH1jtzyqDRJUkeH2nE0jVdyPT8w85def36rKJAdWprbgIx3jGzNq45cLDvxwekCsjI3g=
ARC-Message-Signature:i=3; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438820; c=relaxed/simple;
bh=fjik1RjtYZ0zNBRT/4AtCpwPxJ+k1ESpEjIkno0hEUs=;
h=Message-ID:Date:Subject:To:Cc:References:From:In-Reply-To:
Content-Type:MIME-Version; b=YFqut+gDHt2fp+HFoQ0AVQiGD6QaWHlDZ7SADlEtCzy+OK2+suQkC32Nm07WSNHOqVIOWejJW7cVTRacM6T8sBkSCpgUkncpyVWJ5ADVyLKXKd1giV5i8xfgKkfabMIXt3TYzKA9mdXndtikAvG2bGIR6ZZdncWUj06dab+qxRc=
ARC-Authentication-Results:i=3; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=IGUkPiDx; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=IGUkPiDx; arc=fail smtp.client-ip=52.101.65.1
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com
ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass;
b=SEVK4vAB0EXpn45K0qwhzqb4tbSGiZxtS8zX9oBKW3AyiYk69CYZOrVMT/9Of/M85+WVY1hTQEAV5PWtGFAoccqxeGIrjIX/5IUGpL6BXVGEn0lEMfDx581zJumgxO9RbSNbGJciP63QbndoXEQ4XShJPuBBxljRqIzkMo8cvj5En8moyx3Ym1LYhAgR13yihLDjrDif8qYYfyfvXdGT3ZHlG9tIfT8r3eHMybNECP2KUMOfnx3HQOFVazqtpBz+RP1MYV/mApu0h9DXly/vR/8jy2FP3NQHKjnu8cxhd0RpCpJVueHQPqlej1v8gH083kD9LqRNYW+vp+c8fSbYYQ==
ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=8aOrNN1YkvSffTqNanEUWTGR/b1BxrX+YemS9hhSrKY=;
b=SuYOmAt57LMb/xoA6Fi1vZmGnESILqo38lVMMsOKuwSS2qpTu+bs/J1DFZyGOsnQc8Q6wlkyIxcAjMH6FeZsPkPFXt41A4Wf4IIf0k6zCRjv4sFlQL0/ev9Ud+DCb7eDX4ySrxPD4P8dDfX7CB/eJP2bsiIwErNJukccsfLwsPdecm4hSZlr6OBbFsMWlbfzlhsAlqWinScz+Ha9Q/j2G6Rlac47tp8uoveYEe+CCg2+V7AKcoTzLW4GeHCt3LIis5pIfJrYByedfAjAorcM7m76Ruj8wzbNQdaNXvM12MRdWDLfUxO4CjpQqbBh6JLPzUbSaC3gX9eiQUrNDnedPA==
ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is
4.158.2.129) smtp.rcpttodomain=huawei.com smtp.mailfrom=arm.com; dmarc=pass
(p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass
(signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1
spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com]
dmarc=[1,1,header.from=arm.com])
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=8aOrNN1YkvSffTqNanEUWTGR/b1BxrX+YemS9hhSrKY=;
b=IGUkPiDxRyg/s/Cr/Wi848is3JxvvCkunxXJ8mOo0l+OPFj4yeIB0Cm7R62O3+pVNRqT2bvhy1uLyUt3xyN2IAe9efdXCyeLDCW2I8DG209GSjuic5iRW1OUIrgcqRCsN7WxtDYdVdOlNeywOGaPDCAsfGP7QUmieZnTyprnYFM=
Received: from DUZPR01CA0026.eurprd01.prod.exchangelabs.com
(2603:10a6:10:46b::20) by GV2PR08MB9160.eurprd08.prod.outlook.com
(2603:10a6:150:e0::8) with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.26; Wed, 28 May
2025 13:26:50 +0000
Received: from DB1PEPF000509F4.eurprd02.prod.outlook.com
(2603:10a6:10:46b:cafe::71) by DUZPR01CA0026.outlook.office365.com
(2603:10a6:10:46b::20) with Microsoft SMTP Server (version=TLS1_3,
cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.25 via Frontend Transport; Wed,
28 May 2025 13:27:19 +0000
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129)
smtp.mailfrom=arm.com; dkim=pass (signature was verified)
header.d=arm.com;dmarc=pass action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
4.158.2.129 as permitted sender) receiver=protection.outlook.com;
client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C
Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by
DB1PEPF000509F4.mail.protection.outlook.com (10.167.242.150) with Microsoft
SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.18
via Frontend Transport; Wed, 28 May 2025 13:26:50 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=bRsfj5rDFKasY6uNJRoZidt0oNRJokv/duzpKeZHP0e4XefQX3jbkQCfs3rIm8edxctEVHutQ9iJEF5jPE28A9W0JnTZLzbZCtZjE6SJHVFzvE7o+p8lH1BqsHNKFSv1toGaHFBV9/HR8k/RZYOR1a0o+A/nxECnM97dM235xovthwcMqNXnvqmXT24zyBuUmV75375EA99zgFEcvGMRGaQMplF+lfqxtYY3WyAERRPKpfZcMDOKz/VJiheeyosrUa9hu12Z9bP6XDq2llti/DpzlJqopJUbCAnfJn8ah3zmF6gHLwZJRQlEf62+nWuKiD68Bd1Emt3/R1kZJhwa/g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=8aOrNN1YkvSffTqNanEUWTGR/b1BxrX+YemS9hhSrKY=;
b=oMXe/yKjC6YWHbzXNxQlR3M52p3KY7fw23lGB+T0Rrnuj8L4B07CYWdAjp4PTcEuxIRuvz8ICjlDCauSEMTdI2fvgzU4NF7BLo0ykqHpZhkG9fY9ZjRxB0i02e96sDV6/i4UMy98rsiyupSTNot0Mms788MDGMXGgBSLNo01goc4rz7VQvQ//EIWPuZKz5mM9xPPhQ9SBQypWQfmYdUp2dFIwiC7egHxDKhwf5JQzm7L0JGerEZB1NK6UZBIhJVCTNokhLSq6wVbc2s1fPens+aXfovPL8in7TzWo1ZQVPUy8Dx1IEFlBfsK/TcTqUO7TYZERrD37w0diwvKrjtocw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=8aOrNN1YkvSffTqNanEUWTGR/b1BxrX+YemS9hhSrKY=;
b=IGUkPiDxRyg/s/Cr/Wi848is3JxvvCkunxXJ8mOo0l+OPFj4yeIB0Cm7R62O3+pVNRqT2bvhy1uLyUt3xyN2IAe9efdXCyeLDCW2I8DG209GSjuic5iRW1OUIrgcqRCsN7WxtDYdVdOlNeywOGaPDCAsfGP7QUmieZnTyprnYFM=
Authentication-Results-Original: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=arm.com;
Received: from VI0PR08MB10391.eurprd08.prod.outlook.com (2603:10a6:800:20c::6)
by DB5PR08MB9970.eurprd08.prod.outlook.com (2603:10a6:10:489::12) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.29; Wed, 28 May
2025 13:26:17 +0000
Received: from VI0PR08MB10391.eurprd08.prod.outlook.com
([fe80::4ce3:fe44:41cb:c70]) by VI0PR08MB10391.eurprd08.prod.outlook.com
([fe80::4ce3:fe44:41cb:c70%3]) with mapi id 15.20.8769.022; Wed, 28 May 2025
13:26:17 +0000
Message-ID: <237e957e-82fa-41ea-9f6e-bd37f51003aa@xxxxxxx>
Date: Wed, 28 May 2025 15:26:14 +0200
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 0/3] cpufreq: CPPC: Some optimizations for cppc_cpufreq.c.
To: Lifeng Zheng <zhenglifeng1@xxxxxxxxxx>, rafael@xxxxxxxxxx,
viresh.kumar@xxxxxxxxxx, robert.moore@xxxxxxxxx, lenb@xxxxxxxxxx
Cc: linux-pm@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-acpi@xxxxxxxxxxxxxxx, acpica-devel@xxxxxxxxxxxxxxx,
linuxarm@xxxxxxxxxx, jonathan.cameron@xxxxxxxxxx, zhanjie9@xxxxxxxxxxxxx,
lihuisong@xxxxxxxxxx, cenxinghai@xxxxxxxxxxxxxx, yubowen8@xxxxxxxxxx
References: <20250526113057.3086513-1-zhenglifeng1@xxxxxxxxxx>
Content-Language: en-US
From: Pierre Gondois <pierre.gondois@xxxxxxx>
In-Reply-To: <20250526113057.3086513-1-zhenglifeng1@xxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: LO4P265CA0091.GBRP265.PROD.OUTLOOK.COM
(2603:10a6:600:2bc::8) To VI0PR08MB10391.eurprd08.prod.outlook.com
(2603:10a6:800:20c::6)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-TrafficTypeDiagnostic:
VI0PR08MB10391:EE_|DB5PR08MB9970:EE_|DB1PEPF000509F4:EE_|GV2PR08MB9160:EE_
X-MS-Office365-Filtering-Correlation-Id: 1a03c977-6f92-4d73-1a92-08dd9deb4daf
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted:
BCL:0;ARA:13230040|366016|1800799024|376014|7416014;
X-Microsoft-Antispam-Message-Info-Original:
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
=?utf-8?Q?b5GdKT0Bun4=3D?=
X-Forefront-Antispam-Report-Untrusted:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB10391.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR08MB9970
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
DB1PEPF000509F4.eurprd02.prod.outlook.com
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id-Prvs:
c9cce1bb-fdb6-49d7-7ffc-08dd9deb399f
X-Microsoft-Antispam:
BCL:0;ARA:13230040|82310400026|1800799024|36860700013|35042699022|376014|7416014|14060799003;
X-Microsoft-Antispam-Message-Info:
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
=?utf-8?Q?cAHnrp?=
X-Forefront-Antispam-Report:
CIP:4.158.2.129;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:outbound-uk1.az.dlp.m.darktrace.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(1800799024)(36860700013)(35042699022)(376014)(7416014)(14060799003);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 13:26:50.1634
(UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 1a03c977-6f92-4d73-1a92-08dd9deb4daf
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[4.158.2.129];Helo=[outbound-uk1.az.dlp.m.darktrace.com]
X-MS-Exchange-CrossTenant-AuthSource:
DB1PEPF000509F4.eurprd02.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR08MB9160
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Reviewed-by: Pierre Gondois <pierre.gondois@xxxxxxx>
On 5/26/25 13:30, Lifeng Zheng wrote:
> This patch series makes some minor optimizations for cppc_cpufreq.c to
> makes codes cleaner.
>
> Lifeng Zheng (3):
> cpufreq: CPPC: Remove cpu_data_list
> cpufreq: CPPC: Return void in populate_efficiency_class()
> cpufreq: CPPC: Remove forward declaration of
> cppc_cpufreq_register_em()
>
> drivers/cpufreq/cppc_cpufreq.c | 59 +++++++++-------------------------
> include/acpi/cppc_acpi.h | 1 -
> 2 files changed, 15 insertions(+), 45 deletions(-)
>
Return-Path: <linux-kernel+bounces-665522-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 998EF41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:27:47 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 910A818863A4
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:28:00 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id EE998286D7D;
Wed, 28 May 2025 13:27:38 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IGOvaoOM"
Received: from mail-pg1-f172.google.com (mail-pg1-f172.google.com [209.85.215.172])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id EF221280CD6;
Wed, 28 May 2025 13:27:36 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.172
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438858; cv=none; b=TGV8Rv/jSNNP9CV+AAI/yyXikPuZ7RpgZ46F9K0Zh3FYpYP6SPqbJP6T0bgKSNKs3rufdUS3XTjExOL31I6CfA4Qmdqk5bDxCmlIKTXdF/qyuu3P5OhAXtLR9J53K8wnDKbeJmMZq/raDfxY2Y7Y/Km7q1qb6C2osSejsWX8l2o=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438858; c=relaxed/simple;
bh=lSfHkFCVDHLdXBRkbgVAw2G4M1lVP1t+7+KMdCqg+HM=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=RayTqy02Lq99GD5KCsaGoHJ9fp+CwsdLaJ+MUkY4ZTlK/RZKBwu41JTFQXhbB/UkZvRJaPt+ncDNddEHSyOgYHubtK6r+OqPxLv9CiHiJUivHDpAvPxmStAhqbN6eMzzpxZlSxsc5d5dEVPS1g2B1hkLeMO3Kjx3/W+D5/F/rYw=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=IGOvaoOM; arc=none smtp.client-ip=209.85.215.172
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-pg1-f172.google.com with SMTP id 41be03b00d2f7-b2c3c689d20so1903272a12.3;
Wed, 28 May 2025 06:27:36 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748438856; x=1749043656; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=lSfHkFCVDHLdXBRkbgVAw2G4M1lVP1t+7+KMdCqg+HM=;
b=IGOvaoOMETaupxEevkps8f2p5IQnl//JAS/THS+AnQxb7rDkd0216kjK8D6unIsMk4
US6g8bwU4ifKJ/aD+ka3B51mi7ussB2eYdrzowIGnGY6cAYbYNQBw/kXV5wnt9de5teE
662e0Gqah5MAZ4ar51y6Kwx8Rpt0UKXrqSr9OvPO7eWgsHnIb/zM1MTbmNa5R47MGXGm
CWDvXvaSh4GScarsZ6VOK5w5ArMBNcoAu7sV87hvNZRaTcWX5Ztl9tUbVTnJjXzYqM3B
MoJ46JzgGzI85Ipu2PWtk2FDe8+te8D7GicptTckXBEcKnkS3B2z6/6Y0MBiZvZqJe78
iU5A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748438856; x=1749043656;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=lSfHkFCVDHLdXBRkbgVAw2G4M1lVP1t+7+KMdCqg+HM=;
b=tsE3XXz6lzu51xj816N2LKtcDIAgeDtxkJJvx83Ii6nVQMaZO0vocPQXXyredDIyzJ
MheqmE7V/XedbBdVEvxIfIRkJoGSHfXjXh9+XvnW/CwWXUzwpzhhZjff96BRqLIql8Sk
ZWQt7gPjeITjn16wZ8zwdRqsK9wREsDobZpTAVYTzkvxD7nEpn/cspX03RNORGs1jYNo
aEGfe3DP7kgCrz/TTyRY6OHmQImcKHa5GcSGNoziccoNYiV+AzlqcbVc1m+a4roPCneR
q7XMUC+Wf/qQQeIqL9tCW0vizasTczR4u/IRH4qFU6UkKiASlSO2saMcqzmcGyPaDE36
PDDg==
X-Forwarded-Encrypted: i=1; AJvYcCUP4KTvTUnRWtQFlcGeKKfenhMf1TEGLPGjkLaA9JXx3sFHxgOG/Q373BVrG7lcYfv+nlyjXgDf7js=@vger.kernel.org, AJvYcCXGV3OTIgN83Fmf0SGQgOiQMvIzr/KDi3Udbyg4buZHSM5S/3x/L4bf56QJrsfEdXg6PJCQ0ZAYsiUgjv/A@xxxxxxxxxxxxxxx
X-Gm-Message-State: AOJu0Yx3vdSSs8RMtNKUCgwmI7vOSqimZQjUBNrXlaUo47j1V8ivP/1l
BaHqsLC3NKyBVoF/F6FhSAmSHGowLgs/Bj/jBhkkIkeZWpY+kLc07frafzAIf55X30omCVxGLyN
JKWpbUNaGsjHszyx6E/KmNLRfwwGKWAI=
X-Gm-Gg: ASbGncuXoZXQNifZx8KliNGCoCAM2zcHvkhMBhpfeFSC7R1i8G7syrq8sEn/vmlpgNC
aAjXHip2MjNOrV8FyqGIKPT1tsUVafA6Y5sPLRS0X4Rsvjr3OeS9Sp62M8KFr3KMUJk0Bjbbuiv
tLYWB4uNK1aaQsSPUKKmheGAaKL5noWm5gJQ==
X-Google-Smtp-Source: AGHT+IE8A/WefRhv+yEHpkfsasM6OCUafbW3rvLcBYLAQRHpXljhc+qmXMPPcSHp1aceeBzxtwjfg2gk8PQd+3suTmc=
X-Received: by 2002:a17:90b:4f91:b0:311:d670:a10d with SMTP id
98e67ed59e1d1-311d670ad63mr5041465a91.26.1748438856040; Wed, 28 May 2025
06:27:36 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250528080119.9380-1-gye976@xxxxxxxxx> <CAHp75VdhgftCKAuBuoDJ4d9HcKLqkGJ+bdx5gxQmkCSWO7SBAw@xxxxxxxxxxxxxx>
In-Reply-To: <CAHp75VdhgftCKAuBuoDJ4d9HcKLqkGJ+bdx5gxQmkCSWO7SBAw@xxxxxxxxxxxxxx>
From: Gyeyoung Baek <gye976@xxxxxxxxx>
Date: Wed, 28 May 2025 22:27:25 +0900
X-Gm-Features: AX0GCFv5n5Tx1GeAZ6E4RTBC15ADAix-zpm_A13yjpAq9CwDIQUgVGzs-ktRiIc
Message-ID: <CAKbEznv+GCBOaWxkgcufJrX4knYT=JKQC3iekowFThs7b7CuXw@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v2] iio: trigger: Avoid data race
To: Andy Shevchenko <andy.shevchenko@xxxxxxxxx>
Cc: Jonathan Cameron <jic23@xxxxxxxxxx>, David Lechner <dlechner@xxxxxxxxxxxx>,
=?UTF-8?B?TnVubyBTw6E=?= <nuno.sa@xxxxxxxxxx>,
Andy Shevchenko <andy@xxxxxxxxxx>, linux-iio@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 6:22=E2=80=AFPM Andy Shevchenko
<andy.shevchenko@xxxxxxxxx> wrote:
>
> On Wed, May 28, 2025 at 10:01=E2=80=AFAM Gyeyoung Baek <gye976@xxxxxxxxx>=
wrote:
> >
> > A data race could occur between `atomic_read()` and `atomic_set()`.
> > Use `atomic_cmpxchg_relaxed()` to group them atomically.
> >
> > Previously the main logic was executed when `use_count` was 0.
> > Now it returns early when `use_count` was not 0.
>
> This needs Fixes tag, otherwise LGTM,
> Reviewed-by: Andy Shevchenko <andy@xxxxxxxxxx>
Yes, then I'll send v3, thanks!
> --
> With Best Regards,
> Andy Shevchenko
Return-Path: <linux-kernel+bounces-665523-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 4E65741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:28:15 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 5B257A234F8
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:27:54 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 311CD2874F4;
Wed, 28 May 2025 13:28:05 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="awmgPPsu"
Received: from mail-ej1-f67.google.com (mail-ej1-f67.google.com [209.85.218.67])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B9DC828314A;
Wed, 28 May 2025 13:28:02 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.67
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438884; cv=none; b=FN6xt44r/mg4hllEKaONDbzbit/s33zhgf4HDWcXsdbBXGK4I5DV7VD/otMwSmcIoyF1pe9A2P4YaNbxRwtUQJvHiVsAabOHFF7+5tOiVJEjjtw4v2bRAm6iss9Jm9YV8RnajsKSfr8J9wrQmS13vGH8TCWJJzzu4Dzb1SxkSYc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438884; c=relaxed/simple;
bh=WmaV+BsdxzfYtuA+yPtSU5SX378QrBQeFZ9Ye5eP3f4=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=ttzJH7lhXvVez1OnXgXsr+WxOS/CvQRMJx3eIQiD7M9h7Qih/DQhyVXvr4Io3vQZLgUTA2GndUOt7SKUxkdf2PBTjoPvDgpuzW0ym4UVKPzqrw8GWDidICHkNaexLMVAmrrPqAKDz7hmb//UPKUp/9dWX4Atv+NyJnm5T7J3eG0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=awmgPPsu; arc=none smtp.client-ip=209.85.218.67
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-ej1-f67.google.com with SMTP id a640c23a62f3a-acb5ec407b1so764599866b.1;
Wed, 28 May 2025 06:28:02 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748438881; x=1749043681; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=9hJmDMyrzKSMNIijzlmQpeW/FMMtaWb1uFYuAqgq3KE=;
b=awmgPPsutGVOmqFc9hn6uFhjyAOfVAke3fTu3hkwZbbcPnTW/08CFpETNuglgCBBMh
yFFsO5xFEAj5jsEaMZh12jgZuu0e3rTQVKa6rY4/Pm07pktIJUmPzJjc+Xrl2NVis7kB
I/m2712vZI4L7C+gVIwvMa/1jmQEWSNb9/G/9aJ3Phkue30FYxGGx37ACsFDCDUtUs3X
apLjPJIHiM819z0+IK2xDHedpHah4nFHYDeTynjKMJGSl7DM9n28FhMYQ77MnNzqb8ge
WGlnT7YdyFzdvVLZBB4CekN3ltlNWBsdcwFnEsJmNM94UvqgaJhNrHDMoL3PDGr6XKsj
qCGQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748438881; x=1749043681;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=9hJmDMyrzKSMNIijzlmQpeW/FMMtaWb1uFYuAqgq3KE=;
b=qBb8fOtd/lMokehAK26Bjbt86pJvLd2xSvoRUjvVWIhWcMjrs/nrRJrV6hkvr69rBP
oy8tk7MreaP35q3IqR+aKKSqpTRWxP3lWEroAUxLqPIgx1UMCuAb3AUgx6nLxuba+rni
Opy4QYX/8iEOyZvxFgSRBtqlFo9hanjGaIkiuEolUQapB4qYzHE24pN8agRVv2+NiaFZ
DDzEhTf6/Ag7cqMSix/BWqoOzREK4UsgoLmzrheCJv8b6NSz48oszrT1PhShI4vCc8Yn
C6E5EGC9/2Ab+7RvPRixW3S2c38VXKaiNhaLM3vrf7+Kzr5p4QkFN+EObAScIizwqEKW
q6UQ==
X-Forwarded-Encrypted: i=1; AJvYcCUhbjLiOIhn8yY6PUAuLwNLuc8MDgol1UJF8o8cGtioADFblzS0z8642P0oMm8GWrfK64kVaBLXNLoEClg=@vger.kernel.org, AJvYcCV/aCPBPh/9uwMDY8f/x1/Blyv2n5R0mntQzqkwLQjBX6hnlvJvHsGXRxm6zlZ0sMyIfjgofLRtpEjwG1DE8jUv@xxxxxxxxxxxxxxx, AJvYcCX3jL2a7HGHYMuLktjejehRGPJRymZB07t7+7TFsL92QZnul+v02x203u951/wTmNQffABTckap@xxxxxxxxxxxxxxx
X-Gm-Message-State: AOJu0YzvmQxFvVFACKabK209kBYbYRfKWJU8a/iX6dn2JZW/yXn45rHV
UIWZTbIqGCsNO94afELYBKuTeUxdZDKkwEEACKokFreo+aeDixmdWVOQlSaBxOYK1ccHxB5Nnly
m35yTyT0qKe1EaE5lrm4BEwwEVGvLG/9T6kN3c7E=
X-Gm-Gg: ASbGncvOR1SEbVDPokm9uATHAwdIYD3ckTz9t4ZiWBZD/z09BoTNT6GNVV3os4jjgbq
QSN0Y+XrCEotWs24uA2IWMLXqfEf0C7qoegokUrNsWbM720GChjHhVJOgrnwaoM+mUt1+a8MhiR
a/xJZeEj6kVd66RvtzX9I7TUCMQ7vwyyUQGg==
X-Google-Smtp-Source: AGHT+IEpjbfpKulVFIt4AC10v2ut2jASUrjSGDRXvKIp9xRXWPZYssr353ljZQWyevyvBk9stFJp94Pv9QSSh6wuo1Q=
X-Received: by 2002:a17:907:7e8c:b0:ad2:3577:38fb with SMTP id
a640c23a62f3a-ad85b1ce89emr1504443066b.30.1748438880648; Wed, 28 May 2025
06:28:00 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <CAN2Y7hxscai7JuC0fPE8DZ3QOPzO_KsE_AMCuyeTYRQQW_mA2w@xxxxxxxxxxxxxx>
<CANn89iLB39WjshWbDesxK_-oY1xaJ-bR4p+tRC1pPU=W+9L=sw@xxxxxxxxxxxxxx>
In-Reply-To: <CANn89iLB39WjshWbDesxK_-oY1xaJ-bR4p+tRC1pPU=W+9L=sw@xxxxxxxxxxxxxx>
From: ying chen <yc1082463@xxxxxxxxx>
Date: Wed, 28 May 2025 21:27:48 +0800
X-Gm-Features: AX0GCFtroHeHBCi1nDR6fGoECh-sg4FRt1kFUHtgLBXg1EIkgvg6NV-35vK1Smc
Message-ID: <CAN2Y7hxi+CoMhPO7QzaqzHOcg2ksP9ixCzxHazAV73P5bbeFFQ@xxxxxxxxxxxxxx>
Subject: Re: [bug report, linux 6.15-rc4] A large number of connections in the
SYN_SENT state caused the nf_conntrack table to be full.
To: Eric Dumazet <edumazet@xxxxxxxxxx>
Cc: pablo@xxxxxxxxxxxxx, kadlec@xxxxxxxxxxxxx, fw@xxxxxxxxx,
davem@xxxxxxxxxxxxx, kuba@xxxxxxxxxx, pabeni@xxxxxxxxxx,
netfilter-devel@xxxxxxxxxxxxxxx, coreteam@xxxxxxxxxxxxx,
netdev@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 8:59=E2=80=AFPM Eric Dumazet <edumazet@xxxxxxxxxx> =
wrote:
>
> On Wed, May 28, 2025 at 5:52=E2=80=AFAM ying chen <yc1082463@xxxxxxxxx> w=
rote:
> >
> > Hello all,
> >
> > I encountered an "nf_conntrack: table full" warning on Linux 6.15-rc4.
> > Running cat /proc/net/nf_conntrack showed a large number of
> > connections in the SYN_SENT state.
> > As is well known, if we attempt to connect to a non-existent port, the
> > system will respond with an RST and then delete the conntrack entry.
> > However, when we frequently connect to non-existent ports, the
> > conntrack entries are not deleted, eventually causing the nf_conntrack
> > table to fill up.
> >
> > The problem can be reproduced using the following command:
> > hping3 -S -V -p 9007 --flood xx.x.xxx.xxx
> >
> > ~$ cat /proc/net/nf_conntrack
> > ipv4 2 tcp 6 112 SYN_SENT src=3Dxx.x.xxx.xxx dst=3Dxx.xx.xx.xx
> > sport=3D2642 dport=3D9007 src=3Dxx.xx.xx.xx dst=3Dxx.x.xxx.xxx sport=3D=
9007
> > dport=3D2642 mark=3D0 zone=3D0 use=3D2
> > ipv4 2 tcp 6 111 SYN_SENT src=3Dxx.x.xxx.xxx dst=3Dxx.xx.xx.xx
> > sport=3D11510 dport=3D9007 src=3Dxx.xx.xx.xx dst=3Dxx.x.xxx.xxx sport=
=3D9007
> > dport=3D11510 mark=3D0 zone=3D0 use=3D2
> > ipv4 2 tcp 6 111 SYN_SENT src=3Dxx.x.xxx.xxx dst=3Dxx.xx.xx.xx
> > sport=3D28611 dport=3D9007 src=3Dxx.xx.xx.xx dst=3Dxx.x.xxx.xxx sport=
=3D9007
> > dport=3D28611 mark=3D0 zone=3D0 use=3D2
> > ipv4 2 tcp 6 112 SYN_SENT src=3Dxx.x.xxx.xxx dst=3Dxx.xx.xx.xx
> > sport=3D62849 dport=3D9007 src=3Dxx.xx.xx.xx dst=3Dxx.x.xxx.xxx sport=
=3D9007
> > dport=3D62849 mark=3D0 zone=3D0 use=3D2
> > ipv4 2 tcp 6 111 SYN_SENT src=3Dxx.x.xxx.xxx dst=3Dxx.xx.xx.xx
> > sport=3D3410 dport=3D9007 src=3Dxx.xx.xx.xx dst=3Dxx.x.xxx.xxx sport=3D=
9007
> > dport=3D3410 mark=3D0 zone=3D0 use=3D2
> > ipv4 2 tcp 6 111 SYN_SENT src=3Dxx.x.xxx.xxx dst=3Dxx.xx.xx.xx
> > sport=3D44185 dport=3D9007 [UNREPLIED] src=3Dxx.xx.xx.xx dst=3Dxx.x.xxx=
.xxx
> > sport=3D9007 dport=3D44185 mark=3D0 zone=3D0 use=3D2
> > ipv4 2 tcp 6 111 SYN_SENT src=3Dxx.x.xxx.xxx dst=3Dxx.xx.xx.xx
> > sport=3D51099 dport=3D9007 src=3Dxx.xx.xx.xx dst=3Dxx.x.xxx.xxx sport=
=3D9007
> > dport=3D51099 mark=3D0 zone=3D0 use=3D2
> > ipv4 2 tcp 6 112 SYN_SENT src=3Dxx.x.xxx.xxx dst=3Dxx.xx.xx.xx
> > sport=3D23609 dport=3D9007 src=3Dxx.xx.xx.xx dst=3Dxx.x.xxx.xxx sport=
=3D9007
> > dport=3D23609 mark=3D0 zone=3D0 use=3D2
>
> The default timeout is 120 seconds.
>
> /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_syn_sent
Yes=EF=BC=8CThe timeout is 120 seconds.
Return-Path: <linux-kernel+bounces-665524-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id C093141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:28:34 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id E8F04A23B88
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:28:08 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id B318E2882AC;
Wed, 28 May 2025 13:28:14 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="WqKNbQGq"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 37BC4286D61
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:28:11 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438893; cv=none; b=dtyZq5d0Qj0dojRgnrA7rDW8DZyVmPdnmW8O6L7w3k24HJ8go/vhba17QhLgBuCjaNYXWNV3aubeQ3Y+JGi3QWtwynJ2lRtweiQNPWdGhr408qLvHnkb0zHau12ovAza78WBRfztuEHKcv9kgFk6NjCex4KXvTAsw8Mhw7WeRbs=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438893; c=relaxed/simple;
bh=U8qomunlThM/3D2+2iMrsHuOsKr3NIw4n9pmpjV816I=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=cgRKvWhpEYa6BOwUOjA0zl+PAJzWYCrXkCirVQ1l3ZHAOjjsOA1kQGCp/u5udQdqnIfCbSFK0wLxoVWE8aEaLDHp9tdfcWAfoxLzG81lQtywznduv5oTlgyvwhDEyMTIAB01sidvEtifd+tRhuo3LQVEAMawggH8dV8hJDDQtTY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=WqKNbQGq; arc=none smtp.client-ip=170.10.133.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748438891;
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:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=UQ9g5LYyLjb8/iVLB1DcVfsrw8TL+AlPQukLnrUz7KA=;
b=WqKNbQGqXHMPojkzFZzexUioP1T1hLWNGueHBZ39Y5EKlXQfutHKiRBDgYf6ZLZ1yHjHKk
O4qiWI96m6jaS4EsMY7kkpOfFeS34UtD9WjX2tZu0dcNHYuQy2MYFQxz16DC8udILZ7ZKM
4g2aqO7CmMUwMZvjOSUDlN66rbdk7dI=
Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com
[209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS
(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
us-mta-112-NEXDybS5MAugasUiXeF77Q-1; Wed, 28 May 2025 09:28:09 -0400
X-MC-Unique: NEXDybS5MAugasUiXeF77Q-1
X-Mimecast-MFC-AGG-ID: NEXDybS5MAugasUiXeF77Q_1748438889
Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-3a4ee113461so32142f8f.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 06:28:09 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748438888; x=1749043688;
h=content-transfer-encoding:in-reply-to:from:references:cc:to
:content-language:subject:user-agent:mime-version:date:message-id
:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
bh=UQ9g5LYyLjb8/iVLB1DcVfsrw8TL+AlPQukLnrUz7KA=;
b=pIrcqQROPKvM8DO2dETgMEklIoAOj+S+cU35P44f+wzskIhH3wzXfk8n9hHFPUBDlY
uhbDzXxx8ufnAyX1vrDFEABVdgRulEpVkVV4ayi5mFHifiVN6I1fMz5TVAa++IN1JqVK
YTTq4CY0wuSNEtgxFK0mPqz9Sy89xyRIdx0/fehD2fuffMwlcX9C1alqi0BcI4tEIXKF
4WdsHnpBiYIWvnrV8B7BWpDRgOGdwlozrJj26jq1FDs9r97rfVvWB0RTRFJynevQ9vws
FgRUnGEffgRkBvVRZr/CRdhBbMokAKp7oVa5n6cezuxaQrDnOoaZ61auq8No90Slct6H
+7ZQ==
X-Forwarded-Encrypted: i=1; AJvYcCWuvfWKJDfBr8e6lEvG3m+KS2I83WU9YWQI9BRGW8uk0l3zOxVNVtQSvlAZdxewjERuJnVTI4fI6FDBUcM=@vger.kernel.org
X-Gm-Message-State: AOJu0YwOgMue9QQcZ/l/JMYCUh4B/ji5j2NyIVJy2Lt/lXCjFn9w0WC8
IHPiCCx8d6UcVWGPL2Yea/q5IdSXTAoDmqz3gSvpXqShG5DqoY0OAQRetAW1pZGb3LkXqeJXsuA
jAjrtTQgNLHfEON0BqE7lV1ql4iS5h+HJb0iIkD4zTrg9yJKuwJfKPswWsuebUwhwGA==
X-Gm-Gg: ASbGncv+wBnGZUQAuBv2BilAJ4bmT6k7Mz1CuZUN6KQNZICxaZnSCD5MsyPToimoBCu
STpKIpMn2Wvk0Tk5VXqcxeD5WWPp9WYRRanrsXE3DEuWpixBpLXEePxAdhuDxoqXtjpkxLePmgi
HF5g30r2ZHD4EYdLPvR2NHELEjUfc/R36SwEiOqpsnNSphhSebZOCG89NgTgr3EAzoeeN6lUgDQ
gv7B2lTHnmGCkUt8Yk3t60zVjk/9nArIOLrIhVNhhyzr1rmL+1TtyneFf6MSSCZWmylAAuRG+rv
IDYwYEKJLWlXN0bNGrG/lE7ZdoiOwnpR0h8+N9Fs+Gsxk5FHN5m/fg==
X-Received: by 2002:a05:6000:250f:b0:3a4:eac6:e320 with SMTP id ffacd0b85a97d-3a4eac6e4cfmr2302679f8f.3.1748438888527;
Wed, 28 May 2025 06:28:08 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IFbyayzrF6O0WPxMeyUA9UrtC3EPJ8bgX9wDZpJ1+cDqAh15SKbYxky+R1yioFLQpmt8Yx37g==
X-Received: by 2002:a05:6000:250f:b0:3a4:eac6:e320 with SMTP id ffacd0b85a97d-3a4eac6e4cfmr2302654f8f.3.1748438888177;
Wed, 28 May 2025 06:28:08 -0700 (PDT)
Received: from ?IPV6:2a01:e0a:f0e:9070:527b:9dff:feef:3874? ([2a01:e0a:f0e:9070:527b:9dff:feef:3874])
by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45072555885sm17994055e9.17.2025.05.28.06.28.06
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 06:28:07 -0700 (PDT)
Message-ID: <92c7e99c-5574-422c-92f1-62d5cde58fec@xxxxxxxxxx>
Date: Wed, 28 May 2025 15:28:06 +0200
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [RFC PATCH v2 0/9] KVM: Enable Nested Virt selftests
Content-Language: en-US
To: Ganapatrao Kulkarni <gankulkarni@xxxxxxxxxxxxxxxxxxxxxx>,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, kvmarm@xxxxxxxxxxxxxxx,
linux-kselftest@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Cc: maz@xxxxxxxxxx, oliver.upton@xxxxxxxxx, joey.gouly@xxxxxxx,
suzuki.poulose@xxxxxxx, yuzenghui@xxxxxxxxxx, seanjc@xxxxxxxxxx,
darren@xxxxxxxxxxxxxxxxxxxxxx
References: <20250512105251.577874-1-gankulkarni@xxxxxxxxxxxxxxxxxxxxxx>
From: Eric Auger <eauger@xxxxxxxxxx>
In-Reply-To: <20250512105251.577874-1-gankulkarni@xxxxxxxxxxxxxxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Ganapatrao,
On 5/12/25 12:52 PM, Ganapatrao Kulkarni wrote:
> This patch series makes the selftest work with NV enabled. The guest code
> is run in vEL2 instead of EL1. We add a command line option to enable
> testing of NV. The NV tests are disabled by default.
For commodity, I would add in the coverletter that for all tests
enhanced with vEL2 testing "-g 1" option shall be added to force that mode.
I don't really get how you chose tests capable to run at vEL2 and
excluded others? Wouldn't it make sense to have a way to run all tests
in either mode?
Thanks
Eric
>
> Modified around 12 selftests in this series.
>
> Changes since v1:
> - Updated NV helper functions as per comments [1].
> - Modified existing testscases to run guest code in vEL2.
>
> [1] https://lkml.iu.edu/hypermail/linux/kernel/2502.0/07001.html
>
> Ganapatrao Kulkarni (9):
> KVM: arm64: nv: selftests: Add support to run guest code in vEL2.
> KVM: arm64: nv: selftests: Add simple test to run guest code in vEL2
> KVM: arm64: nv: selftests: Enable hypervisor timer tests to run in
> vEL2
> KVM: arm64: nv: selftests: enable aarch32_id_regs test to run in vEL2
> KVM: arm64: nv: selftests: Enable vgic tests to run in vEL2
> KVM: arm64: nv: selftests: Enable set_id_regs test to run in vEL2
> KVM: arm64: nv: selftests: Enable test to run in vEL2
> KVM: selftests: arm64: Extend kvm_page_table_test to run guest code in
> vEL2
> KVM: arm64: nv: selftests: Enable page_fault_test test to run in vEL2
>
> tools/testing/selftests/kvm/Makefile.kvm | 2 +
> tools/testing/selftests/kvm/arch_timer.c | 8 +-
> .../selftests/kvm/arm64/aarch32_id_regs.c | 34 ++++-
> .../testing/selftests/kvm/arm64/arch_timer.c | 118 +++++++++++++++---
> .../selftests/kvm/arm64/nv_guest_hypervisor.c | 68 ++++++++++
> .../selftests/kvm/arm64/page_fault_test.c | 35 +++++-
> .../testing/selftests/kvm/arm64/set_id_regs.c | 57 ++++++++-
> tools/testing/selftests/kvm/arm64/vgic_init.c | 54 +++++++-
> tools/testing/selftests/kvm/arm64/vgic_irq.c | 27 ++--
> .../selftests/kvm/arm64/vgic_lpi_stress.c | 19 ++-
> .../testing/selftests/kvm/guest_print_test.c | 32 +++++
> .../selftests/kvm/include/arm64/arch_timer.h | 16 +++
> .../kvm/include/arm64/kvm_util_arch.h | 3 +
> .../selftests/kvm/include/arm64/nv_util.h | 45 +++++++
> .../selftests/kvm/include/arm64/vgic.h | 1 +
> .../testing/selftests/kvm/include/kvm_util.h | 3 +
> .../selftests/kvm/include/timer_test.h | 1 +
> .../selftests/kvm/kvm_page_table_test.c | 30 ++++-
> tools/testing/selftests/kvm/lib/arm64/nv.c | 46 +++++++
> .../selftests/kvm/lib/arm64/processor.c | 61 ++++++---
> tools/testing/selftests/kvm/lib/arm64/vgic.c | 8 ++
> 21 files changed, 604 insertions(+), 64 deletions(-)
> create mode 100644 tools/testing/selftests/kvm/arm64/nv_guest_hypervisor.c
> create mode 100644 tools/testing/selftests/kvm/include/arm64/nv_util.h
> create mode 100644 tools/testing/selftests/kvm/lib/arm64/nv.c
>
Return-Path: <linux-kernel+bounces-665525-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id AECD241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:29:08 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id B1AD41667D4
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:29:09 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 50B6B2874E2;
Wed, 28 May 2025 13:29:01 +0000 (UTC)
Received: from mail.enpas.org (zhong.enpas.org [46.38.239.100])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 46A94280A39;
Wed, 28 May 2025 13:28:57 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=46.38.239.100
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438940; cv=none; b=dqR38MerC2EQlbDiQfkqBB1AWivcbtcz3mHyCsK/HteNT3Kh1maM9aF1rUEY7cEzYG2Ps4ZOVFIRelWVqJF4BXDREAfl0AsQnJDlOonLZ2tuZ0vSxJTL30drXaKad5ouDjMxITNqMgPNet3LF9RhnqZZPyW6wjLjXTgqislJk40=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438940; c=relaxed/simple;
bh=JdfXJ/vInh7/MMrsz8IDuINMM9tubZrHEwzHj6RsruM=;
h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=EP56GyP0JJ2wyLu1ZZyHDfD50TiKZ4L0ucViS/7otWreqPexBKns7PGB414EW4snE9b0B/8kjV+ZEwWWcyM9ixX/SDebPmduO6kaP+3G/oxiOLZG4O5mMfyXcDKf2Ndz44l3611ixuwteNCIxGqJisuet19VbM5cIHHVqv+FmiQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=enpas.org; spf=pass smtp.mailfrom=enpas.org; arc=none smtp.client-ip=46.38.239.100
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=enpas.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=enpas.org
Received: from [127.0.0.1] (localhost [127.0.0.1])
by mail.enpas.org (Postfix) with ESMTPSA id 7F57110392E;
Wed, 28 May 2025 13:28:47 +0000 (UTC)
From: Max Staudt <max@xxxxxxxxx>
To: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>,
Jiri Slaby <jirislaby@xxxxxxxxxx>
Cc: Johan Hovold <johan@xxxxxxxxxx>,
linux-serial@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Max Staudt <max@xxxxxxxxx>,
stable@xxxxxxxxxxxxxxx
Subject: [PATCH v2 1/2] tty: Register device *after* creating the cdev for a tty
Date: Wed, 28 May 2025 22:28:15 +0900
Message-Id: <20250528132816.11433-1-max@xxxxxxxxx>
X-Mailer: git-send-email 2.39.5
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
This change makes the tty device file available only after the tty's
backing character device is ready.
Since 6a7e6f78c235975cc14d4e141fa088afffe7062c, the class device is
registered before the cdev is created, and userspace may pick it up,
yet open() will fail because the backing cdev doesn't exist yet.
Userspace is racing the bottom half of tty_register_device_attr() here,
specifically the call to tty_cdev_add().
dev_set_uevent_suppress() was used to work around this, but this fails
on embedded systems that rely on bare devtmpfs rather than udev.
On such systems, the device file is created as part of device_add(),
and userspace can pick it up via inotify, irrespective of uevent
suppression.
So let's undo the existing patch, and create the cdev first, and only
afterwards register the class device in the kernel's device tree.
However, this restores the original race of the cdev existing before the
class device is registered, and an attempt to tty_[k]open() the chardev
between these two steps will lead to tty->dev being assigned NULL by
alloc_tty_struct().
This will be addressed in a second patch.
Fixes: 6a7e6f78c235 ("tty: close race between device register and open")
Signed-off-by: Max Staudt <max@xxxxxxxxx>
Cc: <stable@xxxxxxxxxxxxxxx>
---
drivers/tty/tty_io.c | 54 +++++++++++++++++++++++++-------------------
1 file changed, 31 insertions(+), 23 deletions(-)
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index ca9b7d7bad2b..e922b84524d2 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -3245,6 +3245,7 @@ struct device *tty_register_device_attr(struct tty_driver *driver,
struct ktermios *tp;
struct device *dev;
int retval;
+ bool cdev_added = false;
if (index >= driver->num) {
pr_err("%s: Attempt to register invalid tty line number (%d)\n",
@@ -3257,24 +3258,6 @@ struct device *tty_register_device_attr(struct tty_driver *driver,
else
tty_line_name(driver, index, name);
- dev = kzalloc(sizeof(*dev), GFP_KERNEL);
- if (!dev)
- return ERR_PTR(-ENOMEM);
-
- dev->devt = devt;
- dev->class = &tty_class;
- dev->parent = device;
- dev->release = tty_device_create_release;
- dev_set_name(dev, "%s", name);
- dev->groups = attr_grp;
- dev_set_drvdata(dev, drvdata);
-
- dev_set_uevent_suppress(dev, 1);
-
- retval = device_register(dev);
- if (retval)
- goto err_put;
-
if (!(driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)) {
/*
* Free any saved termios data so that the termios state is
@@ -3288,19 +3271,44 @@ struct device *tty_register_device_attr(struct tty_driver *driver,
retval = tty_cdev_add(driver, devt, index, 1);
if (retval)
- goto err_del;
+ return ERR_PTR(retval);
+
+ cdev_added = true;
+ }
+
+ dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+ if (!dev) {
+ retval = -ENOMEM;
+ goto err_del_cdev;
}
- dev_set_uevent_suppress(dev, 0);
- kobject_uevent(&dev->kobj, KOBJ_ADD);
+ dev->devt = devt;
+ dev->class = &tty_class;
+ dev->parent = device;
+ dev->release = tty_device_create_release;
+ dev_set_name(dev, "%s", name);
+ dev->groups = attr_grp;
+ dev_set_drvdata(dev, drvdata);
+
+ retval = device_register(dev);
+ if (retval)
+ goto err_put;
return dev;
-err_del:
- device_del(dev);
err_put:
+ /*
+ * device_register() calls device_add(), after which
+ * we must use put_device() instead of kfree().
+ */
put_device(dev);
+err_del_cdev:
+ if (cdev_added) {
+ cdev_del(driver->cdevs[index]);
+ driver->cdevs[index] = NULL;
+ }
+
return ERR_PTR(retval);
}
EXPORT_SYMBOL_GPL(tty_register_device_attr);
--
2.39.5
Return-Path: <linux-kernel+bounces-665526-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 75A1341E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:29:20 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id A82B316B5F8
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:29:21 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C0F862882AC;
Wed, 28 May 2025 13:29:03 +0000 (UTC)
Received: from mail.enpas.org (zhong.enpas.org [46.38.239.100])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1ACD4286D63;
Wed, 28 May 2025 13:29:00 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=46.38.239.100
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748438943; cv=none; b=kiBwELeOhtTpkCwu4w2xgD76dIvvH0kWBjAbKzFkCDi82LBxa7+K+Hal+M0B4tYjTUx9SU01xpT5rgSppHtjGNPMju8XZqPB1JA/d7T6r/yLgUR9HhkW0myyobC37gGRDgNVMxJKySauHHrMkD0CrYyb+grINlNLric3oUHKSg4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748438943; c=relaxed/simple;
bh=G9JqeHpPW6gvOfEzKz4n2RVCy66x2CW3mDkGusy5R6E=;
h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:
MIME-Version; b=CXRxy1z5SeycSFnl+ovPl3Fmw2jP11AVsD+8AGpr/NiemXbVoaKSa3C0JkdgCXESIQnhgkZ4xu0E30+T84CKe/oISvHZ4y+FzJaAOlbCeaBPp+P0Wc9RVKa1d4NJ5tT3kmReJVRWqIClbiYUeDwy2coFUIALm6swjp+vn0Fngec=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=enpas.org; spf=pass smtp.mailfrom=enpas.org; arc=none smtp.client-ip=46.38.239.100
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=enpas.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=enpas.org
Received: from [127.0.0.1] (localhost [127.0.0.1])
by mail.enpas.org (Postfix) with ESMTPSA id 814C510392F;
Wed, 28 May 2025 13:28:50 +0000 (UTC)
From: Max Staudt <max@xxxxxxxxx>
To: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>,
Jiri Slaby <jirislaby@xxxxxxxxxx>
Cc: Johan Hovold <johan@xxxxxxxxxx>,
linux-serial@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Max Staudt <max@xxxxxxxxx>,
stable@xxxxxxxxxxxxxxx
Subject: [PATCH v2 2/2] tty: Fix race against tty_open() in tty_register_device_attr()
Date: Wed, 28 May 2025 22:28:16 +0900
Message-Id: <20250528132816.11433-2-max@xxxxxxxxx>
X-Mailer: git-send-email 2.39.5
In-Reply-To: <20250528132816.11433-1-max@xxxxxxxxx>
References: <20250528132816.11433-1-max@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Since the chardev is now created before the class device is registered,
an attempt to tty_[k]open() the chardev between these two steps will
lead to tty->dev being assigned NULL by alloc_tty_struct().
alloc_tty_struct() is called via tty_init_dev() when the tty is firstly
opened, and is entered with tty_mutex held, so let's lock the critical
section in tty_register_device_attr() with the same global mutex.
This guarantees that tty->dev can be assigned a sane value.
Fixes: 6a7e6f78c235 ("tty: close race between device register and open")
Signed-off-by: Max Staudt <max@xxxxxxxxx>
Cc: <stable@xxxxxxxxxxxxxxx>
---
drivers/tty/tty_io.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index e922b84524d2..94768509e2d2 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -3258,6 +3258,8 @@ struct device *tty_register_device_attr(struct tty_driver *driver,
else
tty_line_name(driver, index, name);
+ mutex_lock(&tty_mutex);
+
if (!(driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)) {
/*
* Free any saved termios data so that the termios state is
@@ -3271,7 +3273,7 @@ struct device *tty_register_device_attr(struct tty_driver *driver,
retval = tty_cdev_add(driver, devt, index, 1);
if (retval)
- return ERR_PTR(retval);
+ goto err_unlock;
cdev_added = true;
}
@@ -3294,6 +3296,8 @@ struct device *tty_register_device_attr(struct tty_driver *driver,
if (retval)
goto err_put;
+ mutex_unlock(&tty_mutex);
+
return dev;
err_put:
@@ -3309,6 +3313,9 @@ struct device *tty_register_device_attr(struct tty_driver *driver,
driver->cdevs[index] = NULL;
}
+err_unlock:
+ mutex_unlock(&tty_mutex);
+
return ERR_PTR(retval);
}
EXPORT_SYMBOL_GPL(tty_register_device_attr);
--
2.39.5
Return-Path: <linux-kernel+bounces-665527-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 5D28141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:30:47 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id F13993AC5A8
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:30:25 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id F24E83207;
Wed, 28 May 2025 13:30:39 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b="IXzpZcKN"
Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.53])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id AE9A81367
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:30:36 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.53
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439038; cv=none; b=OVUZrCFcJKp7Vu9wHNanSZ6srayXd5+k1Cee8sEw/QoZku1mIDYtvy+GF/fM5J8E5Ej/Na2b/XAGPBg3A+fATA9ZqIErezPjlNUJMyWRz2L2CueCXj72+4yLG6T5/XG9yQN85qT/ZvzjbXZubTmqAWz8dbkwRVsQ768rvDm55zc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439038; c=relaxed/simple;
bh=nbxHvc/1UXYMfKxHHjVvBcdBjfJFZfU930enKhM3DyU=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=R/WXueJVKkIoPynesAa2jYfK8zwNQQvIbxN4K4OqF5FCWuCwPEMO+nX8PX3d34L+kK9vrfzd+O1KJHFG5B1PVymphn7yA//+uvK1CpPxAOcv5mgny+7+w5URu5T9rzPvh1zhIWr4KFm+krLc6lwIBXUhR9KsTAdu+PDhlcNtZGc=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b=IXzpZcKN; arc=none smtp.client-ip=209.85.218.53
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com
Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-ad883afdf0cso491395966b.0
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 06:30:36 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=suse.com; s=google; t=1748439035; x=1749043835; darn=vger.kernel.org;
h=in-reply-to:autocrypt:from:content-language:references:cc:to
:subject:user-agent:mime-version:date:message-id:from:to:cc:subject
:date:message-id:reply-to;
bh=nbxHvc/1UXYMfKxHHjVvBcdBjfJFZfU930enKhM3DyU=;
b=IXzpZcKNezv4HCi95pzlhtKqUuvM4puJbRZyDr4kgD+/76QggZh9co6bKWFczD9UL0
9rLrsEZRyW7eRsqn2krckaPWsESfCzLaF6YK0Qn62JiklatGpSMgbfEs24Ntsye7h7u/
Joghwasb0QeFuRyUa9WI9p9YkvCEeRRRNT+iWeIBPE0PXucFtJxOc4qttj2yNPffiT8o
ljmAujdVJoFrt7Z0sUqcjirFBX7Ir01Z7ymdXQi/4yIQAd1PBZfSEqB9RIID44mgJhy2
iP9MrdxgpncIPuM5IPXPdvj30B2TrsqawJ8uGa95z4Wy6b6mSzkhfNOHjFfdkjSSSX58
pEAA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748439035; x=1749043835;
h=in-reply-to:autocrypt:from:content-language:references:cc:to
:subject:user-agent:mime-version:date:message-id:x-gm-message-state
:from:to:cc:subject:date:message-id:reply-to;
bh=nbxHvc/1UXYMfKxHHjVvBcdBjfJFZfU930enKhM3DyU=;
b=RwYaGqsQFcoN64BabgleVY/SBwR1hw/OianVS+7H/FTaTjt5peNjRf72zbe9VZCc3d
Lbd6vs2FUrtAyQFhVjM6Boi1pp7zekJr2Qq4USsHO43/bUhweq41r/b9NYmRgbfWN2aR
nh2tX5ggSod0JFvZYaJMF27NFT7/xgxJhdAdo3MPxsfWO/7zq7wIWIzRuqczN0l1wjjN
RF3HxkdCxUtTKWuXOHn+mn2Pm90I50Keup+cBEaA2cZE12+VrhokzBSprIa2X2+MmIlL
8CZe87itA1Viff3b7VIVLtP9PmnGovvnBSxbxnLwcHZac8d3I3Ur8O3t/m5TDi2WUHnW
vaQQ==
X-Gm-Message-State: AOJu0Yw2uCwz7EzgXmp4Pp5moeQVUEOL9P7f89HMxFP+wQXT0Vub2zZb
IYJ/ywYvi+8KQjDzijCcf/02zm1BdNWOsOGRbfncRz1xVLg5R7sF4lodIQB/rjI4kso=
X-Gm-Gg: ASbGncvxWS4FrOV6z1YekWklxTsIAUCtxn4VlDJx8W7g8riGOYqUwpWfdK3FKDYodOs
nQKYOKvFsHuJVh3SEG4tLBV+hLmkqTvxqNN9BxwTPhhxqWRD5MEsssOQ2yIc6y+sECciEXyFVUG
O2xgHABe+q8ftJeRPra7Be4JvcAZPeVgSEgxct/ODBZJOYeYzRCR/yI3kXt2tdQbAi3BBWgMcSk
4gbdfpQUpK4NeDgeugOihiiTDFqXMaPOIQl+E7S809h7pAnNXO70keIvCQUA11sgvY82pg+fFgV
mbwXUBYk1nFfZ5mq4I4m8A1g7IXWMyPhshmBW5FegKYlMFxFde6WqeACE5VNBIWHafn9BcN93OG
hzEYcUcw+/STbx85o486CuTQNIzf0Phw3lhgYSBtIvJo9hqnpjHaC8Z+Vnveld73PVlAZzirASk
PL
X-Google-Smtp-Source: AGHT+IHftjl/IElewdxmuBkjHJFkfiEQrS+QzWH7g5Rh+/nBIQX8StE5oEUjnma1M/1rud3PTR90AA==
X-Received: by 2002:a17:907:7288:b0:ad8:9e80:6ba3 with SMTP id a640c23a62f3a-ad89e807c46mr234927766b.7.1748439034778;
Wed, 28 May 2025 06:30:34 -0700 (PDT)
Received: from ?IPV6:2003:e5:872a:8800:5c7b:1ac1:4fa0:423b? (p200300e5872a88005c7b1ac14fa0423b.dip0.t-ipconnect.de. [2003:e5:872a:8800:5c7b:1ac1:4fa0:423b])
by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad8a19accc3sm108090166b.9.2025.05.28.06.30.34
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 06:30:34 -0700 (PDT)
Message-ID: <7c8bf4f5-29a0-4147-b31a-5e420b11468e@xxxxxxxx>
Date: Wed, 28 May 2025 15:30:33 +0200
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 3/3] x86/alternative: make kernel ITS thunks read-only
To: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx, x86@xxxxxxxxxx, xin@xxxxxxxxx,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>,
Borislav Petkov <bp@xxxxxxxxx>, Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
"H. Peter Anvin" <hpa@xxxxxxxxx>, stable@xxxxxxxxxxxxxxx
References: <20250528123557.12847-1-jgross@xxxxxxxx>
<20250528123557.12847-4-jgross@xxxxxxxx>
<20250528131052.GZ39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<044f0048-95bb-4822-978e-a23528f3891f@xxxxxxxx>
<20250528132231.GB39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Content-Language: en-US
From: =?UTF-8?B?SsO8cmdlbiBHcm/Dnw==?= <jgross@xxxxxxxx>
Autocrypt: addr=jgross@xxxxxxxx; keydata=
xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOB
ycWxw3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJve
dYm8Of8Zd621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJ
NwQpd369y9bfIhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvx
XP3FAp2pkW0xqG7/377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEB
AAHNH0p1ZXJnZW4gR3Jvc3MgPGpncm9zc0BzdXNlLmNvbT7CwHkEEwECACMFAlOMcK8CGwMH
CwkIBwMCAQYVCAIJCgsEFgIDAQIeAQIXgAAKCRCw3p3WKL8TL8eZB/9G0juS/kDY9LhEXseh
mE9U+iA1VsLhgDqVbsOtZ/S14LRFHczNd/Lqkn7souCSoyWsBs3/wO+OjPvxf7m+Ef+sMtr0
G5lCWEWa9wa0IXx5HRPW/ScL+e4AVUbL7rurYMfwCzco+7TfjhMEOkC+va5gzi1KrErgNRHH
kg3PhlnRY0Udyqx++UYkAsN4TQuEhNN32MvN0Np3WlBJOgKcuXpIElmMM5f1BBzJSKBkW0Jc
Wy3h2Wy912vHKpPV/Xv7ZwVJ27v7KcuZcErtptDevAljxJtE7aJG6WiBzm+v9EswyWxwMCIO
RoVBYuiocc51872tRGywc03xaQydB+9R7BHPzsBNBFOMcBYBCADLMfoA44MwGOB9YT1V4KCy
vAfd7E0BTfaAurbG+Olacciz3yd09QOmejFZC6AnoykydyvTFLAWYcSCdISMr88COmmCbJzn
sHAogjexXiif6ANUUlHpjxlHCCcELmZUzomNDnEOTxZFeWMTFF9Rf2k2F0Tl4E5kmsNGgtSa
aMO0rNZoOEiD/7UfPP3dfh8JCQ1VtUUsQtT1sxos8Eb/HmriJhnaTZ7Hp3jtgTVkV0ybpgFg
w6WMaRkrBh17mV0z2ajjmabB7SJxcouSkR0hcpNl4oM74d2/VqoW4BxxxOD1FcNCObCELfIS
auZx+XT6s+CE7Qi/c44ibBMR7hyjdzWbABEBAAHCwF8EGAECAAkFAlOMcBYCGwwACgkQsN6d
1ii/Ey9D+Af/WFr3q+bg/8v5tCknCtn92d5lyYTBNt7xgWzDZX8G6/pngzKyWfedArllp0Pn
fgIXtMNV+3t8Li1Tg843EXkP7+2+CQ98MB8XvvPLYAfW8nNDV85TyVgWlldNcgdv7nn1Sq8g
HwB2BHdIAkYce3hEoDQXt/mKlgEGsLpzJcnLKimtPXQQy9TxUaLBe9PInPd+Ohix0XOlY+Uk
QFEx50Ki3rSDl2Zt2tnkNYKUCvTJq7jvOlaPd6d/W0tZqpyy7KVay+K4aMobDsodB3dvEAs6
ScCnh03dDAFgIq5nsB11j3KPKdVoPlfucX2c7kGNH+LUMbzqV6beIENfNexkOfxHfw==
In-Reply-To: <20250528132231.GB39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Content-Type: multipart/signed; micalg=pgp-sha256;
protocol="application/pgp-signature";
boundary="------------L69koOEljdcF9MVPUuFhn8Cb"
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--------------L69koOEljdcF9MVPUuFhn8Cb
Content-Type: multipart/mixed; boundary="------------vuh9P78POzL0ISLqQ6jiBRpD";
protected-headers="v1"
From: =?UTF-8?B?SsO8cmdlbiBHcm/Dnw==?= <jgross@xxxxxxxx>
To: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx, x86@xxxxxxxxxx, xin@xxxxxxxxx,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>,
Borislav Petkov <bp@xxxxxxxxx>, Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
"H. Peter Anvin" <hpa@xxxxxxxxx>, stable@xxxxxxxxxxxxxxx
Message-ID: <7c8bf4f5-29a0-4147-b31a-5e420b11468e@xxxxxxxx>
Subject: Re: [PATCH 3/3] x86/alternative: make kernel ITS thunks read-only
References: <20250528123557.12847-1-jgross@xxxxxxxx>
<20250528123557.12847-4-jgross@xxxxxxxx>
<20250528131052.GZ39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<044f0048-95bb-4822-978e-a23528f3891f@xxxxxxxx>
<20250528132231.GB39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
In-Reply-To: <20250528132231.GB39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
--------------vuh9P78POzL0ISLqQ6jiBRpD
Content-Type: multipart/mixed; boundary="------------oIQOW2zmWhZj7EZXcAARi2OI"
--------------oIQOW2zmWhZj7EZXcAARi2OI
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: base64
T24gMjguMDUuMjUgMTU6MjIsIFBldGVyIFppamxzdHJhIHdyb3RlOg0KPiBPbiBXZWQsIE1h
eSAyOCwgMjAyNSBhdCAwMzoxOToyNFBNICswMjAwLCBKw7xyZ2VuIEdyb8OfIHdyb3RlOg0K
Pj4gT24gMjguMDUuMjUgMTU6MTAsIFBldGVyIFppamxzdHJhIHdyb3RlOg0KPj4+IE9uIFdl
ZCwgTWF5IDI4LCAyMDI1IGF0IDAyOjM1OjU3UE0gKzAyMDAsIEp1ZXJnZW4gR3Jvc3Mgd3Jv
dGU6DQo+Pj4+IFdoZW4gYWxsb2NhdGluZyBtZW1vcnkgcGFnZXMgZm9yIGtlcm5lbCBJVFMg
dGh1bmtzLCBtYWtlIHRoZW0gcmVhZC1vbmx5DQo+Pj4+IGFmdGVyIGhhdmluZyB3cml0dGVu
IHRoZSBsYXN0IHRodW5rLg0KPj4+Pg0KPj4+PiBUaGlzIHdpbGwgYmUgbmVlZGVkIHdoZW4g
WDg2X0ZFQVRVUkVfUFNFIGlzbid0IGF2YWlsYWJsZSwgYXMgdGhlIHRodW5rDQo+Pj4+IG1l
bW9yeSB3aWxsIGhhdmUgUEFHRV9LRVJORUxfRVhFQyBwcm90ZWN0aW9uLCB3aGljaCBpcyBp
bmNsdWRpbmcgdGhlDQo+Pj4+IHdyaXRlIHBlcm1pc3Npb24uDQo+Pj4+DQo+Pj4+IENjOiA8
c3RhYmxlQHZnZXIua2VybmVsLm9yZz4NCj4+Pj4gRml4ZXM6IDUxODVlN2Y5ZjNiZCAoIng4
Ni9tb2R1bGU6IGVuYWJsZSBST1ggY2FjaGVzIGZvciBtb2R1bGUgdGV4dCBvbiA2NCBiaXQi
KQ0KPj4+PiBTaWduZWQtb2ZmLWJ5OiBKdWVyZ2VuIEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+
DQo+Pj4+IC0tLQ0KPj4+PiAgICBhcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyB8IDE2
ICsrKysrKysrKysrKysrKysNCj4+Pj4gICAgMSBmaWxlIGNoYW5nZWQsIDE2IGluc2VydGlv
bnMoKykNCj4+Pj4NCj4+Pj4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5h
dGl2ZS5jIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMNCj4+Pj4gaW5kZXggZWNm
ZTdiNDk3Y2FkLi5iZDk3NGEwYWM4OGEgMTAwNjQ0DQo+Pj4+IC0tLSBhL2FyY2gveDg2L2tl
cm5lbC9hbHRlcm5hdGl2ZS5jDQo+Pj4+ICsrKyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5h
dGl2ZS5jDQo+Pj4+IEBAIC0yMTcsNiArMjE3LDE1IEBAIHN0YXRpYyB2b2lkICppdHNfYWxs
b2Modm9pZCkNCj4+Pj4gICAgCXJldHVybiBub19mcmVlX3B0cihwYWdlKTsNCj4+Pj4gICAg
fQ0KPj4+PiArc3RhdGljIHZvaWQgaXRzX3NldF9rZXJuZWxfcm8odm9pZCAqYWRkcikNCj4+
Pj4gK3sNCj4+Pj4gKyNpZmRlZiBDT05GSUdfTU9EVUxFUw0KPj4+PiArCWlmIChpdHNfbW9k
KQ0KPj4+PiArCQlyZXR1cm47DQo+Pj4+ICsjZW5kaWYNCj4+Pj4gKwlleGVjbWVtX3Jlc3Rv
cmVfcm94KGFkZHIsIFBBR0VfU0laRSk7DQo+Pj4+ICt9DQo+Pj4+ICsNCj4+Pj4gICAgc3Rh
dGljIHZvaWQgKml0c19hbGxvY2F0ZV90aHVuayhpbnQgcmVnKQ0KPj4+PiAgICB7DQo+Pj4+
ICAgIAlpbnQgc2l6ZSA9IDMgKyAocmVnIC8gOCk7DQo+Pj4+IEBAIC0yMzQsNiArMjQzLDgg
QEAgc3RhdGljIHZvaWQgKml0c19hbGxvY2F0ZV90aHVuayhpbnQgcmVnKQ0KPj4+PiAgICAj
ZW5kaWYNCj4+Pj4gICAgCWlmICghaXRzX3BhZ2UgfHwgKGl0c19vZmZzZXQgKyBzaXplIC0g
MSkgPj0gUEFHRV9TSVpFKSB7DQo+Pj4+ICsJCWlmIChpdHNfcGFnZSkNCj4+Pj4gKwkJCWl0
c19zZXRfa2VybmVsX3JvKGl0c19wYWdlKTsNCj4+Pj4gICAgCQlpdHNfcGFnZSA9IGl0c19h
bGxvYygpOw0KPj4+PiAgICAJCWlmICghaXRzX3BhZ2UpIHsNCj4+Pj4gICAgCQkJcHJfZXJy
KCJJVFMgcGFnZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7DQo+Pj4+IEBAIC0yMzM4LDYgKzIz
NDksMTEgQEAgdm9pZCBfX2luaXQgYWx0ZXJuYXRpdmVfaW5zdHJ1Y3Rpb25zKHZvaWQpDQo+
Pj4+ICAgIAlhcHBseV9yZXRwb2xpbmVzKF9fcmV0cG9saW5lX3NpdGVzLCBfX3JldHBvbGlu
ZV9zaXRlc19lbmQpOw0KPj4+PiAgICAJYXBwbHlfcmV0dXJucyhfX3JldHVybl9zaXRlcywg
X19yZXR1cm5fc2l0ZXNfZW5kKTsNCj4+Pj4gKwkvKiBNYWtlIHBvdGVudGlhbCBsYXN0IHRo
dW5rIHBhZ2UgcmVhZC1vbmx5LiAqLw0KPj4+PiArCWlmIChpdHNfcGFnZSkNCj4+Pj4gKwkJ
aXRzX3NldF9rZXJuZWxfcm8oaXRzX3BhZ2UpOw0KPj4+PiArCWl0c19wYWdlID0gTlVMTDsN
Cj4+Pj4gKw0KPj4+PiAgICAJLyoNCj4+Pj4gICAgCSAqIEFkanVzdCBhbGwgQ0FMTCBpbnN0
cnVjdGlvbnMgdG8gcG9pbnQgdG8gZnVuYygpLTEwLCBpbmNsdWRpbmcNCj4+Pj4gICAgCSAq
IHRob3NlIGluIC5hbHRpbnN0cl9yZXBsYWNlbWVudC4NCj4+Pg0KPj4+IE5vLCB0aGlzIGlz
IGFsbCBzb3J0cyBvZiB3cm9uZy4gRXhlY21lbSBBUEkgc2hvdWxkIGVuc3VyZSB0aGlzLg0K
Pj4NCj4+IFlvdSBhcmUgYXdhcmUgdGhhdCB0aGlzIHBhdGNoIGlzIGJhc2ljYWxseSBtaXJy
b3JpbmcgdGhlIHdvcmsgd2hpY2ggaXMNCj4+IGFscmVhZHkgZG9uZSBmb3IgbW9kdWxlcyBp
biBhbHRlcm5hdGl2ZS5jPw0KPiANCj4gSSBhbSBoYXZpbmcgdHJvdWJsZSBwYXJzaW5nIHRo
YXQgLS0gd2hlcmUgZG9lcyBhbHRlcm5hdGl2ZS5jIGRvIHRoaXMgdG8NCj4gbW9kdWxlcz8N
Cg0KSGF2ZSBhIGxvb2sgYXQgaXRzX2ZpbmlfbW9kKCkuDQoNCg0KSnVlcmdlbg0K
--------------oIQOW2zmWhZj7EZXcAARi2OI
Content-Type: application/pgp-keys; name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Disposition: attachment; filename="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Description: OpenPGP public key
Content-Transfer-Encoding: quoted-printable
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
kt+z4drzFUyEjLM1vVvIMjkUoJs=3D
=3DeeAB
-----END PGP PUBLIC KEY BLOCK-----
--------------oIQOW2zmWhZj7EZXcAARi2OI--
--------------vuh9P78POzL0ISLqQ6jiBRpD--
--------------L69koOEljdcF9MVPUuFhn8Cb
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature.asc"
-----BEGIN PGP SIGNATURE-----
wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmg3D/kFAwAAAAAACgkQsN6d1ii/Ey9F
Dgf8CtY11GTpCyhQQ4rVkNZvOF+9StCr8+dla2eruAf3u13kQRq9DJj8eXdyvrHXa5VNh9Sxc/bP
2R9oqQttZYoiFFKc//iMGCZZb6lAQ8laESqyYM6sOaCLseTT787t0LILUAXNyrydKCdgmEMivNMv
Fh84Osn431nJ3/Pcj4e9xcoqQtblv7QTtm3+llW8v8OPxgB0x479bkq8ekggtc0wc3snUA6+eNis
aJuPLobOLRKgnRqhZWEQqoSmluyUWyTAu+LPq4M5b7BpW71PGsY2a9i37tvgQfSJKqrvN/XHn9dX
ghdajMYjq/7aoOTXiiap59TlBW5cK9GMCzGqZ+wtgQ==
=al9Z
-----END PGP SIGNATURE-----
--------------L69koOEljdcF9MVPUuFhn8Cb--
Return-Path: <linux-kernel+bounces-665528-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id A967641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:30:54 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id C20A84E2956
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:30:55 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 1A7E628751E;
Wed, 28 May 2025 13:30:42 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DzIl/V/y"
Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.41])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id BC78328641B;
Wed, 28 May 2025 13:30:39 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.41
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439041; cv=none; b=cuDF/ACwDgygVZPrjgoS99XdAi05ofAo4pWKHcI4fKuG55/yqQhOjXHpOAFUyEZeuhfO3h38vHZJDFMqYoj9OafTSaS4Sp2HMcBuVFE6SVyv1jMxRkO69OE3VhGYCWTvFCop0SuaqTBAmlI1NmrYK4kK+i9Mqa0hqQ+hJAsCXdc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439041; c=relaxed/simple;
bh=3u2Qw3HOw0iC5C8vTgWluP0FOEKnaGzNEAyur2Cmlqs=;
h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=UQH4KrpfX/NLY4NLueGCJ2wYMb8QDgyJOa3Wv8Sr8y1fjg3pg+ZKCqOzV8P9G57WNLLGax2FLyfhlPuh2jbvWlVR8JIW9fB7A0q6Mv6Jn14DGmOyo4jPOl4GanoUiAAR03P4QWlFj+O38UlBx0HSm2vx9QIkR0rSVLfLZtX3suo=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=DzIl/V/y; arc=none smtp.client-ip=209.85.218.41
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-ad1a87d93f7so749227866b.0;
Wed, 28 May 2025 06:30:39 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748439038; x=1749043838; darn=vger.kernel.org;
h=content-transfer-encoding:mime-version:message-id:date:subject:cc
:to:from:from:to:cc:subject:date:message-id:reply-to;
bh=p8wMbq77IiXjEJTnbDulm6U0IolIMNTt+1mFsUjgJAs=;
b=DzIl/V/ypVVVJhPK+IwwWDCY0ZMqxALrNG6prDQb6gREMs/KjI4IcjUiBtIr0L/hN7
n2e1VSUdja850drsADJpxMh55S/XWwBsK3Hok3e4DUEyF9cY9J/a9wkBVguzJnqEROdE
eEWwOGC8NteGGjYkFhHcTTCw96JD+nhSjOzhCfTd6BfLTrDJ9HsmmDKiq322l8tDKpP0
RaQiL4GgcAeUqEEPIpNffGNNxhHpuxEBdVR+xEfhL5MigQtinI0xCmXirj5cCYvaDCOT
aek1QBspnlm7Z3wYP9iCTSSapl1lftQpDh9yv3ETaXUx+kNLc36ums9JKS0jIPA6QSxg
ToFQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748439038; x=1749043838;
h=content-transfer-encoding:mime-version:message-id:date:subject:cc
:to:from:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=p8wMbq77IiXjEJTnbDulm6U0IolIMNTt+1mFsUjgJAs=;
b=ewIb03dNjr4K6qSSu1BfnwByohTp7y2QAXxLA1NtGl5Od/mpONwTrpjkU9Irhbrisu
c03FYgKfbWtcV4145Bnr4ztZ0jgJvqrGGXpR0Ig4K5oi1gDg+KxX7QoflcgH/20c8ig+
GKVo67noNZyzdFUQtCBRrXEpbnCKwj/9GfR5K6ZJKEte33w9AGDxy0JmdOwO++YjzPGF
Fw/7A221PXh/29lbnyQbI5xbrJIGGqHy5UtDCqlWN6aL/BEKACsUhMqn2L1kTA8eY61n
2MCjSKR0iJRIsTJGO/o3+t0Sci5jX7+K2l1S7XTKcgqnuFPyyLRb0yusF68grDZho4+O
yLhw==
X-Forwarded-Encrypted: i=1; AJvYcCV7XbL3rvN94/16jJhe6OYT3+4wbku1ZWreagNcad0gegGMoPdCc0RcTWP9S3KINs1mpW3pNF9iYRJO@xxxxxxxxxxxxxxx, AJvYcCVOEeZO2ARH6inG1wKdTkwT5XjcSi0zED95KVjHV0UwBUBR2tvpjvSe7TaaYJhS7eDVY+FGzuX3cqEC0Zx4@xxxxxxxxxxxxxxx
X-Gm-Message-State: AOJu0Ywxvas4EjwzvLrVpa/2ceegME6E1rBFUq9L+ZSFKLbk5W8RkLLG
x0CozWT0fhpBLtGdM47BBc4ddGQrI+5by3pQVTs3MQPdEZ+TNoCAzOEL
X-Gm-Gg: ASbGncvyUmOaqb+Nh/f+NcIP9k8Kp7g80kqwlS/FWNqouts10flRJohl8Qruyk/xtgs
qBxk6Lh+Ex4KVP8UUsSvdk/RAsAj4C/4tZdghnBSXy9zjEAjdlDdHF/LekC/dUr0mIWuXmOpGAq
mC177daBnKY9U5gpbO9np+6GKlBAJ7v6UktNYvEeK2pfP5ZD4t0JUzVa2P8hXBNzQTNAW824RUb
eJ64ZZAz1rZIYLjq0w6XXVBteLxK6jK+PRAAc5JPb0Tp6RRgKHcc6EnHBuxoz8fFQZkAFIFWafM
9XtegcDyNvOGYuxJ3XuhRX66fIX40aANWJzYrvyWsrP6rmhVL8faqOwRZdQ8EsJ0T5PJTZpKlpC
X
X-Google-Smtp-Source: AGHT+IGmXfR+303chgQTvSMbIO1FLMjMjgBIXw/DQX1tU3NwAwIjXBVkZyauZLcXX0fF26IEp3H2xA==
X-Received: by 2002:a17:907:2688:b0:ad5:a29c:efed with SMTP id a640c23a62f3a-ad85b1de649mr1508189866b.33.1748439037752;
Wed, 28 May 2025 06:30:37 -0700 (PDT)
Received: from iku.Home ([2a06:5906:61b:2d00:7078:193c:ccdc:e2f5])
by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad8a1b477casm107207666b.127.2025.05.28.06.30.36
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 06:30:37 -0700 (PDT)
From: Prabhakar <prabhakar.csengg@xxxxxxxxx>
X-Google-Original-From: Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
To: Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Geert Uytterhoeven <geert+renesas@xxxxxxxxx>,
Magnus Damm <magnus.damm@xxxxxxxxx>,
Fabrizio Castro <fabrizio.castro.jz@xxxxxxxxxxx>
Cc: linux-renesas-soc@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Prabhakar <prabhakar.csengg@xxxxxxxxx>,
Biju Das <biju.das.jz@xxxxxxxxxxxxxx>,
Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Subject: [PATCH] dt-bindings: reset: renesas,rzv2h-usb2phy: Document RZ/V2N SoC support
Date: Wed, 28 May 2025 14:30:31 +0100
Message-ID: <20250528133031.167647-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
X-Mailer: git-send-email 2.49.0
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Document support for the USB2PHY reset controller found on the Renesas
RZ/V2N (R9A09G056) SoC. The reset controller IP is functionally identical
to that on the RZ/V2H(P) SoC, so no driver changes are needed. The existing
`renesas,r9a09g057-usb2phy-reset` compatible will be used as a fallback
for the RZ/V2N SoC.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
---
.../bindings/reset/renesas,rzv2h-usb2phy-reset.yaml | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml b/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
index c79f61c2373b..c1b800a10b53 100644
--- a/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
+++ b/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
@@ -15,7 +15,12 @@ description:
properties:
compatible:
- const: renesas,r9a09g057-usb2phy-reset # RZ/V2H(P)
+ oneOf:
+ - items:
+ - const: renesas,r9a09g056-usb2phy-reset # RZ/V2N
+ - const: renesas,r9a09g057-usb2phy-reset
+
+ - const: renesas,r9a09g057-usb2phy-reset # RZ/V2H(P)
reg:
maxItems: 1
--
2.49.0
Return-Path: <linux-kernel+bounces-665529-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D12A041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:31:20 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 0EFB417F1CD
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:31:22 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 11BE8284B58;
Wed, 28 May 2025 13:31:14 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="QDm/OLtB"
Received: from mail-pf1-f179.google.com (mail-pf1-f179.google.com [209.85.210.179])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id CAE40284B37
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:31:10 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.179
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439073; cv=none; b=TcqUjeRvrkC+7KcNyxwti1OfxAm3imPiOiElrrN68VxAZHmEIQbWivB/NKm+aV4xVFC1JXAxHqY4YyeH49lMI4Dc1HgJcvEE+6HO1yetorR4XVPR+JeDyUhk2y4kTGF11fb2YoRgIw37MarU4miWwPt7FCBHUjop94uyQI+pA/0=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439073; c=relaxed/simple;
bh=Vg+FrRbGTeA8f3PlM/x8Z6doWF3ojO83xJlLB1B3f6M=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=Tcaa9Ph/tx7mWv1XTZToXww6sHGsp8XKTJr99UqFkLXHC5IIYVgfWgPZOJ9CyjfaVa2F4HfrCNbNCwjo5I+K/2gdug+GaLo9RNHz5646o2t3PkWYm3KIWgvx7jTLaKo6B1VqKp1/hz/TFNB8uH+aDeXUjJodXtHQKTosxAMGhhA=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=QDm/OLtB; arc=none smtp.client-ip=209.85.210.179
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org
Received: by mail-pf1-f179.google.com with SMTP id d2e1a72fcca58-7406c6dd2b1so700661b3a.0
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 06:31:10 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=linaro.org; s=google; t=1748439070; x=1749043870; darn=vger.kernel.org;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:from:to:cc:subject:date:message-id:reply-to;
bh=8UdvRNXq8aAecD2U0dxQ0wWai5QzfjmCr8Z4Xq1f1YE=;
b=QDm/OLtBHw+gGCXuqIxydGAHuyck0tTiBNtReqL/f1zP5YQUuIjSEdSFEPbgONw9vj
sgAumuToC4b1b3Jxs22ce1/+CQaBhVby+GVjXwH0ymAWwlKwWiaJBNiz++gEJQG0rH5B
Gwa2h5BB+WnC/rg2Ih6eCELqxAN+3tt3IGhLKIape1vYGECzDWKKsGtf5UtWTxZ/mw+2
+OTdRRN0holGgrR866/8OgZ4tkY8kYG+KVrpPHDdoe0wN47ZGESs/oytgfVP4Esfd3FT
hB8WLgpBkWV1xxbxUAwtHXdvPxeyA9jFQ6haXjuEigHwjb8Nd8d/+ngfgGbyJfjn5PlG
YSaw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748439070; x=1749043870;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=8UdvRNXq8aAecD2U0dxQ0wWai5QzfjmCr8Z4Xq1f1YE=;
b=wK1ViQDVkWC2dQxduylWVL/RstnGmBpUJXlRvcQxC4yHCMs5sdIfq2D/UH/PdyHUe6
TIEIdaY9fB8Kezb/AzZbqyPRiq1HNw5OGYuJjbU6DuOzxac92f4MvBw5GvF9GzCZS3pi
i+7FNRETVXwejE/JZLGkpMgWbnUGyCCXTyaKbe1ueyHFkzqmGbHqV4OkO3fW7ICf7kRQ
6D6IP/TMdjOGPtWUl+B/oiZiiYj84MngovgZoG1BZxQ9m1tIFLuolSaj2g8Cx8B8d34O
Ukzsd2qNuhozRfqUGY09IYk8Qjxy29fwnxnnBKdXy5HksmqTXyyHLjaw9dhCOh6q6CNL
OPag==
X-Forwarded-Encrypted: i=1; AJvYcCUokbd0Npt48SjZaYS+Rp2Wjs4YOWBOuh8u86uiRc6RWhxh38RuGZVF2FFiondP80nyeeTq8EvYYdathZ4=@vger.kernel.org
X-Gm-Message-State: AOJu0YwvXKxBHo8BtKTlamq6ApF353tX9ymhyznzoVd9Be6rSCRTQqQf
yZAbWxlLkNH4chFOHg6hTePeWOBGig5xzUDtrIUdhO+5qmmbqh2l/Iw4u4cYg++XiCLW+CDPvmb
ltXqj9GQaEzKJ73OZ5oTc6wihlUmq8VzhRR+N3aZRjw==
X-Gm-Gg: ASbGncuWIo+pqF82EfGDVhfll1PwbKWRPe4pLcroYiv83V1QTDt5XW/dDR3Q7Yii3QH
qMyvHEPr3Im1KVhiRZ37/1YJpspO5G/51HHKr4DcqZ2m9mSsg+tae9QUFsg4036J77ph4/43exV
1XnqgyCrK++ihRoyKrgzfByqGV7g6tRNJl4yuH9fGDsydHTepmt/NH8KI+G+J4lh/1Mg==
X-Google-Smtp-Source: AGHT+IG9j6POnBtn5e0Q2pGrtNN2Sbh3sgqFrqPfg1VSh05XHmn/iVMWNJ6bEEiFKPdnKFJUg0aWvLMjuZxJtWY11l8=
X-Received: by 2002:a05:6a20:cfa9:b0:218:574e:830d with SMTP id
adf61e73a8af0-218ccd94689mr6594968637.21.1748439069932; Wed, 28 May 2025
06:31:09 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250522005016.2148-1-jie.gan@xxxxxxxxxxxxxxxx>
<757925b7-3795-409a-9419-b33767c49e2e@xxxxxxxxxxxxxxxx> <2f010e28-121e-4e60-bf48-5ee5bcd0cbea@xxxxxxxxxxxxxxxx>
In-Reply-To: <2f010e28-121e-4e60-bf48-5ee5bcd0cbea@xxxxxxxxxxxxxxxx>
From: Mike Leach <mike.leach@xxxxxxxxxx>
Date: Wed, 28 May 2025 14:30:58 +0100
X-Gm-Features: AX0GCFs8sPqVEo-rRNs0GPnAqg3ldJr20mhUWNavfYnn9A10EucMPhXNzc1P-NU
Message-ID: <CAJ9a7Vg7MtLaud715JYEo5JD6x4WmHq9TsSSor1-TYq5M5u+cw@xxxxxxxxxxxxxx>
Subject: Re: [PATCH] arm64: dts: qcom: qcs615: fix a crash issue caused by
infinite loop for Coresight
To: Jie Gan <jie.gan@xxxxxxxxxxxxxxxx>
Cc: Konrad Dybcio <konrad.dybcio@xxxxxxxxxxxxxxxx>, Bjorn Andersson <andersson@xxxxxxxxxx>,
Konrad Dybcio <konradybcio@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>, Conor Dooley <conor+dt@xxxxxxxxxx>,
Suzuki K Poulose <suzuki.poulose@xxxxxxx>, James Clark <james.clark@xxxxxxxxxx>,
linux-arm-msm@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi,
This is clearly a platform issue - loops as you describe are not
permitted by the CoreSight architecture specification.
We should not be trying to fix issues that are out of specification in
the drivers.
Regards
Mike
On Mon, 26 May 2025 at 01:40, Jie Gan <jie.gan@xxxxxxxxxxxxxxxx> wrote:
>
>
>
> On 5/22/2025 11:06 PM, Konrad Dybcio wrote:
> > On 5/22/25 2:50 AM, Jie Gan wrote:
> >> An infinite loop has been created by the Coresight devices. When only a
> >> source device is enabled, the coresight_find_activated_sysfs_sink function
> >> is recursively invoked in an attempt to locate an active sink device,
> >> ultimately leading to a stack overflow and system crash. Therefore, disable
> >> the replicator1 to break the infinite loop and prevent a potential stack
> >> overflow.
> >
> > Is it something we can fix the driver not to do instead?
> >
>
> As Suzuki mentioned in other mail thread, it is very difficult to
> observe the scenario that there is a loop in the path by current driver.
>
> I tried fix the issue in driver before send this DT fix patch.
> I will continue to seek an option of fixing in driver.
>
> Thanks,
> Jie
>
> > Konrad
> >
> >>
> >> replicator1_out -> funnel_swao_in6 -> tmc_etf_swao_in -> tmc_etf_swao_out
> >> | |
> >> replicator1_in replicator_swao_in
> >> | |
> >> replicator0_out1 replicator_swao_out0
> >> | |
> >> replicator0_in funnel_in1_in3
> >> | |
> >> tmc_etf_out <- tmc_etf_in <- funnel_merg_out <- funnel_merg_in1 <- funnel_in1_out
> >>
> >> [call trace]
> >> dump_backtrace+0x9c/0x128
> >> show_stack+0x20/0x38
> >> dump_stack_lvl+0x48/0x60
> >> dump_stack+0x18/0x28
> >> panic+0x340/0x3b0
> >> nmi_panic+0x94/0xa0
> >> panic_bad_stack+0x114/0x138
> >> handle_bad_stack+0x34/0xb8
> >> __bad_stack+0x78/0x80
> >> coresight_find_activated_sysfs_sink+0x28/0xa0 [coresight]
> >> coresight_find_activated_sysfs_sink+0x5c/0xa0 [coresight]
> >> coresight_find_activated_sysfs_sink+0x5c/0xa0 [coresight]
> >> coresight_find_activated_sysfs_sink+0x5c/0xa0 [coresight]
> >> coresight_find_activated_sysfs_sink+0x5c/0xa0 [coresight]
> >> ...
> >> coresight_find_activated_sysfs_sink+0x5c/0xa0 [coresight]
> >> coresight_enable_sysfs+0x80/0x2a0 [coresight]
> >>
> >> side effect after the change:
> >> Only trace data originating from AOSS can reach the ETF_SWAO and EUD sinks.
> >>
> >> Fixes: bf469630552a ("arm64: dts: qcom: qcs615: Add coresight nodes")
> >> Signed-off-by: Jie Gan <jie.gan@xxxxxxxxxxxxxxxx>
> >> ---
> >> arch/arm64/boot/dts/qcom/qcs615.dtsi | 1 +
> >> 1 file changed, 1 insertion(+)
> >>
> >> diff --git a/arch/arm64/boot/dts/qcom/qcs615.dtsi b/arch/arm64/boot/dts/qcom/qcs615.dtsi
> >> index f08ba09772f3..b67c1f8a1118 100644
> >> --- a/arch/arm64/boot/dts/qcom/qcs615.dtsi
> >> +++ b/arch/arm64/boot/dts/qcom/qcs615.dtsi
> >> @@ -1902,6 +1902,7 @@ replicator@604a000 {
> >>
> >> clocks = <&aoss_qmp>;
> >> clock-names = "apb_pclk";
> >> + status = "disabled";
> >>
> >> in-ports {
> >> port {
>
--
Mike Leach
Principal Engineer, ARM Ltd.
Manchester Design Centre. UK
Return-Path: <linux-kernel+bounces-665530-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1C22541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:31:34 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 21ECF1BC76C7
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:31:47 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 7E904C147;
Wed, 28 May 2025 13:31:26 +0000 (UTC)
Received: from mail.enpas.org (zhong.enpas.org [46.38.239.100])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id DB87D7FBA2;
Wed, 28 May 2025 13:31:23 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=46.38.239.100
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439085; cv=none; b=uA5vN5OIJB/E223RXfZRU6ZCPypsmmqwxUIwtoST1J9gQb/6GDxTiRKCWMR06lVMN6uEOBbBk5sgZUGL3bk/I/gsD+dJioBOLhCIcgGRjs3ZguUnBSpQprQOIM8IxB2COt8K8R7HjavhPMfRWCejUID1y91+exW4Zm08Wk/Ohug=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439085; c=relaxed/simple;
bh=9GKAxXzOyI6ofZz7YPv5ib0aESLjWf40bDf8lwn3igg=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=NNgKrB3bcRojufPxhwJgMeu56JZs2xTbZWRR8/rmfR/EXvE+rPxdKKHsjPpN/1ZLZk+FD4gSRse3v0PKQgbnPZspKGPoBaun4s5s4HKCf8PrgITVsEQ8wqpicjIQAEhwMlFzReVljNjIC2DcVe7aFsfosEwkwKSIaMEOb/nzyug=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=enpas.org; spf=pass smtp.mailfrom=enpas.org; arc=none smtp.client-ip=46.38.239.100
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=enpas.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=enpas.org
Received: from [127.0.0.1] (localhost [127.0.0.1])
by mail.enpas.org (Postfix) with ESMTPSA id CA49310392E;
Wed, 28 May 2025 13:31:20 +0000 (UTC)
Message-ID: <bcbc2f6f-9935-415c-ac79-f839afe6204d@xxxxxxxxx>
Date: Wed, 28 May 2025 22:31:15 +0900
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH v1] tty: Register device *after* creating the cdev for a
tty
To: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
Cc: Jiri Slaby <jirislaby@xxxxxxxxxx>, linux-serial@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
References: <20250526112523.23122-1-max@xxxxxxxxx>
<2025052801-human-aversion-3518@gregkh>
Content-Language: en-US
From: Max <max@xxxxxxxxx>
Autocrypt: addr=max@xxxxxxxxx; keydata=
xsNNBFWfXgEBIADcbJMG2xuJBIVNlhj5AFBwKLZ6GPo3tGxHye+Bk3R3W5uIws3Sxbuj++7R
PoWqUkvrdsxJAmnkFgMKx4euW/MCzXXgEQOM2nE0CWR7xmutpoXYc9BLZ2HHE2mSkpXVa1Ea
UTm00jR+BUXgG/ZzCRkkLvN1W9Hkdb75qE/HIpkkVyDiSteJTIjGnpTnJrwiHbZVvXoR/Bx3
IWFNpuG80xnsGv3X9ierbalXaI3ZrmFiezbPuGzG1kqV1q0gdV4DNuFVi1NjpQU1aTmBV8bv
gDi2Wygs1pOSj+dlLPwUJ+9jGVzFXiM3xUkNaJc4UPRKxAGskh1nWDdg0odbs0OarQ0o+E+v
d7WbKK7TR1jfYNcQ+Trr0ca0m72XNFk0hUxNyaEv3kkZEpAv0IDKqXFQD700kr3ftZ8ZKOxd
CP4UqVYI+1d0nR9LnJYVjRpKI9QqIx492As6Vl1YPjUbmuKi4OT2JdvaT4czGq9EJkbhjC8E
KQqc2mWeLnnwiMJwp8fMGTq+1TuBgNIbVSdTeyMnNr5w0UmJ4Y/TNFnTsOR0yytpJlHU4YiW
HDQKaw6wzvdxql2DCjRvn+Hgm9ifMmtPn5RO3PGvq7XQJ0bNzJ/lXl9ts9QbeR62vQUuv63S
P6WIU+uEUZVtaNJIjmsoEkziMX01Agi+5gCgKkY8mLakdXOAGX9CaUrVAH/ssM0SIwgxbmeH
F0mwfbd7OuPYCKpmIiX1wqNfiLhcTgV3lJ12Gz7XeeIH3JW5gw6tFGN3pQQNsy6SqtThyFQN
RlLNZWEHBh2RdE1Bh3HFFCgdbQ2CISV+nEGdTpP+wjlP17FaBUEREM/j4FT5Dn1y/XICJog/
dymN4Srn8BZ0q1HQBVIJszdfpBa37Fj3gHQbUPinoDsNCCjNibOD06Xk4hvex307pcsXe/Gi
qON0vCtTfbF9jUmao84LpOMjfnqMXQDl3bIi0GwvdXWTvTNM3gCllj1sygWYvPn405BHysbk
xbuGCP1qwRRYxrkBpCOUxBz48fT+90CewfwvhuYjBc1dPu0x2io+TRex2rfpMLbjUhYWYeun
Oo/w+7Ea8UoxqLkvQjNY7IDBtvtPQdW5NxPh1kYOOMCMTGPR7wKMo7O0clMQ3Gviu12nvt2X
2rKtI56oU9pEFpIY/moDM+nDNR3fIi1BjdBfhGhSi6uRWy1vgBHYdW0rItPqYtQ9R/AxMbFN
Kv4axzus1+yAfqSAWyp1DCC8+PX+x4gYEh0rbh2Ii91jdhzONzoEjMy8VCfu9hgeE4XazsFD
234zaonkEh8Mpo/SyYH4x0iMO0UyKn1RbyC9zTmAtlIvYUsQdF8exWwF07vvqbzKWkHv8a+y
RFT9nuZZtVN3ABEBAAHNGk1heCBTdGF1ZHQgPG1heEBlbnBhcy5vcmc+wsN9BBMBCgAnAhsD
CAsJCAcNDAsKBRUKCQgLAh4BAheAAhkBBQJnpyx4BQkWM613AAoJEGVYAQQ5PhMuwdof/As9
qacD3VIJTjG051QAficPVM6bDHQAxuzGFEyj29MiUXEZe+G1YTcp3XbJoLB5KBYG4t6sKmnh
3Cc7XE65MMY0e3OScL172cq74VZ4q7xh0vqTKkARgFNBWvjV9P3fUxfKFopfjf5iYtGYhYVu
nr29CgE4Xv5x86mTFlcBXhYMS7kHvxgQ2rpdSwwdABNI+801J93vKyyDze6vZPHZ89rQmoGj
ESWeNwMF5/fre+qmkUyS650gsMoErmHxG4OGSxecwADZOVUMwraeYRPbbU9deGipUGeoEcFB
eVo2eKDW/okO8m2NOIIRgg1PYfX+cZ0exmGqdX+/Hpmyv0esqBE+9SxNDgm9HcctApStRTWX
ZQF/MuqmwfKN6wqEKZYIo/Cex7Olbu91yfz+Agti/ZCT59FRNIHw75dOVk294hyH6QdJEYfd
92zPw/xfMxC5EuKbQIZX4D8/0GyVdzoYNbkFWFZ8a4Sz+XVQrlO9j5+yHhxfIqcD4Mfti8A0
BijPdn1TAdOreyMYqyKrh4gHfxEkELT01ZeVUCanmvOt87SiimhG1dJhurYpC/rme08k/cJ+
LeblkAKPJWdy/XUxTQ/l5xPr0mrZdVA4BAv7RYIhhdpf/DuOF5bfN/ByY+Oq5MTh7VEUXq6L
m39hWIF37Q+y33R3inwuzKgbEuEY/K0w+JnmPeCWDT83dfoeA3ZaTMybEvYdgsRpxBK4muBl
dHBKsA7AfPFaWO8XrjKO1FITxGjG2T/IQ9suTA6ITVZ0eLWI+RcuFZboVjYyh85C1KkXaCHG
nAOLADB63tGzWPBNPCfX8RkEsUy3arxTQordxVOGHpzxubVPVnDPj5WwUkE5TJhpfycuLGaB
bKiFRZKccchDRxHi0JSoLzDh6uV6r6exk/2RzdsG8NAfLMB6D/lfibSM0IIGOgGa2/OD+aKO
vw+A6ei+bMg8WRxPe/WVK1cSuR3hUSZvLb8fjY6YfonsOgcbUx2ci9+e/2DxbXbdQvLBUGfZ
iDo6SikLvkY0hFok8QbvVib7wwCqRvedHEaE0417IWkydinXUoDSAJdOm4cqZZmwTEJ7JgQh
z/C+yXevWIbc3u7xqB5bdrc6eToTQMamxSpl5IYGlWrPzS/kTm6W3tBRcaTnFKz7g0zpWddP
i1ecrTrJ+6KVfyzffS/DHwRBy0GKHDoakqlnpxM+ImA1OCsQaq4BGu4M4X6mJZVUy+wcpGnO
r3bYwZ2RuSUctBcPN1A0A1OakoHZ1gnN6ctR8L3NLCR/UZL66XwXxgUqnoNU9qWd3G2OQhLA
8EK88WVd+FAvHBTva1b6HdyCcCVGq9X5DSbGpKAG3juYUvNrCsDVZiYQZTdrHS7mOjTOwU0E
VZ96mAEQAMPq/us9ZHl8E8+V6PdoOGvwNh0DwxjVF7kT/LEIwLu94jofUSwz8sgiQqz/AEJg
HFysMbTxpUnq9sqVMr46kOMVavkRhwZWtjLGhr9iiIRJDnCSkjYuzEmLOfAgkKo+moxz4PZk
DL0sluOCJeWWm3fFMs4y3YcMXC0DMNGOtK+l1Xno4ZZ2euAy2+XlOgBQQH3cOyPdMeJvpu7m
nY8CXejH/aS40H4b/yaDu1RUa1+NajnmX+EwRoHsnJcXm62Qu8zjyhYdQjV8B2raMk5HcIzl
jeVRpEQDlQMUGXESGF4CjYlMGlTidRy6d5GydhRLZXHOLdqG2HZKz1/cot7x5Qle2+P50I32
iB0u4aPCyeKYJV6m/evBGWwYWYvCUJWnghbP5F2ouC/ytfyzXVNAJKJDkz//wqU27K26vWjy
Bh0Jdg+G8HivgZLmyZP229sYH0ohrJBoc68ndh9ukw53jASNGkzQ6pONue8+NKF9NUNONkw4
jjm7lqD/VWFe5duMgSoizu/DkoN+QJwOu/z10y3oN9X7EMImppCdEVS01hdJSyEcyUq90v/O
kt8tWo906trE65NkIj+ZSaONYAhTK+Yp/jrG88W2WAZU54CwHtoMxhbMH9xRM0hB97rBvaLO
JwGBAU0+HrxOp1Sqy2M1v91XBt4HeW8YxzNEexq1ZtNnABEBAAHCw2UEGAEKAA8CGwwFAmen
LMoFCRYzkTIACgkQZVgBBDk+Ey6DPh/9HslbVBJqC3fFRqQBEByWI1khEkgM+WzbzClbdAhZ
Se+NMLCE5pqDRCUMzZyTm2+v5ipLA1ysZuW2K+5qDvo94H4kt1Na5IrAU1OtQIU55h+zPNXh
9zj3EKhJDB/HgYmXy23WQpyet1lRN/Qp+rkEc+ktjl5LLpWbbznr/zH2ukmAlVIUgQ9WggXH
1WuYyEc6oi5z8scLaj0uNSAlY3YWMDWE3e0uLPZ8WRp31dmv0KnQEMVT8Om1LTYEEL9sK+Gt
pGDvTj73WxNyrF/5v3O4LDRqRTw71rOIJqxlhoIXId8JPxOYSfn6NFFcfRjLWX3l2ctxuC4b
Fhces0lU4wx42eq/ue02xNn7TNt7PCXmEiFPpngFi8aq+1JEftWa7JHVFUxBYgRu4GmLKh36
FhmO0suRDu8WBEnzMkVflsLs4jJ8kYUU8O9yWQSQHnfYzePspxPTVPO37yMNy6KEh9mKJiw/
NsOdowacJR/ZOsrhE4d132i6qjn4xgEc7NmVKXbjF6wGOIp8+xq5wgTze7pPFV/IR6X6dtGb
yYnu3VyLDESULYuWiV0jeTKZSrsOcMSKpmDkz4VAv1pab3EzSvSXWhUL4w3V9gK3lzMRDPWf
sBcrsZQcwjlCRhNsU0d0vd+IqRLMZED3ZzMI4qPO9QGxJ0itEEFw0DaOs7nEw1OhuSfpyYdJ
cr5jApjab0YmVkNhoBMquJL/B5Qz1w4PHVOrqT69DhtDC3EfehNFBBvV8juoB5HcfbzmNGVX
JUTLEY+/Eze7Nq0tcU1oUtk6qH/2LRP/Cg3xLuGoNC0kOOsbEFVeSbsxdT8Q3OpeQNh5Nk5l
QXVd3ooZkmgRYEUPdWfgbQ7CH3zwVgeipvXSfC/8GH3sdbyhVkW/7UyPVIzDmGkU0Pjq1hsQ
WXzTkkLacTG9TBDsCk5xt3jH6hT6WKB3ToHltePN/u9xc44jAfZsgxi+NW20bAn2tg9V/RcP
jVhyMfm+4u3OTEMvZT6lNOKybxqo2FQcz1SbMHCNKLbQzyYIuvVY1mcA0p/GRyR87qTOqn1N
ZMNH8IIiNv0vm2GoQdm9icfyXkvVwwlWB87421PAWE6iZe2pv9aM6znfcQ8UuQqrs+3UpxK3
vs56eN8VtSWgviHk/k/DeTJ+VNSZowxO9Dn0oG43aecjHOdRq1ES5+yf2moX0e3+mJQuOCHc
UZW4kivHnEPTY4R09+wGgi/axkz/G4mmUjOtoJd//iavtmmP3dx6a/UfXbJgLWGWy6IZszAB
6RWhzkRPkZdlGjxnltyQqhy35ZHKsbg/oNBHaRGrLbp6+Z2sWX3Vzzb9k/Gs0+asQMSe0poq
1Nk4wgjdif6n69chAwuDQyOfWdz/dQ==
In-Reply-To: <2025052801-human-aversion-3518@gregkh>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 5/28/25 17:23, Greg Kroah-Hartman wrote:
> As 0-day points out, I think this adds a new locking issue :(
>
> But it's really hard to detect this, as you are doing both a revert and
> a change in the same commit. Can you make this as 2 patches, one that
> does the revert which would be "easy" to review, and the second one that
> does the new fix? That way we can detect what is going on easier.
Done!
Thanks for reviewing this, I've scratched my head about this locking for
a while, and just when I thought I had used a suitable lock... Well,
that's where maintainers (and now automation) come in :)
>> Fixes: 6a7e6f78c235 ("tty: close race between device register and open")
>> Signed-off-by: Max Staudt <max@xxxxxxxxx>
>
> You also forgot to add cc: stable on this :(
Done. I wasn't sure whether this needs to go to -stable, but since
you're the maintainer for both tty and stable, I figured you'd make a
choice anyway.
Thanks,
Max
Return-Path: <linux-kernel+bounces-665531-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id DA57A41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:32:19 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 33BFE4E383F
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:32:21 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 1156B2874EF;
Wed, 28 May 2025 13:32:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="OYjcPFjF"
Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id D139428689D;
Wed, 28 May 2025 13:32:10 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439132; cv=none; b=l/QSac6TBV0XGuJMeCL+c0lmPE/eEqC8UT+ncgCmwPABm73y2laX25sdGBGWbpoubH8fYq8WMce6E5ZcakE5xbV5gQF6MZpWzRluvi5f2jojfIy2aRZsM466nw+E1deGjuODRo1M7wjOyw4ARuiwCuosjunVUzVFoXJL4bL/JhU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439132; c=relaxed/simple;
bh=eX/daBorH/smLCo4dfPUeMY+z3xMXmm8aak/L0nuKGE=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=am3MJB6AIk3LpXO+aZp4CjSS81ZVxG6GRTyYblAg3DEQxulHHPXQN2PNkQTzIEgnbRqIfslUIPYdXAA66rSwq0tw+5RqW3eqrgY8+sxJk/vDyR6sCuAOnXFxoyxjyHtzvCaoggy8JH9M3iqCcu+1fClha0RxgJjNQXZUcNBfW5o=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=OYjcPFjF; arc=none smtp.client-ip=148.163.156.1
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com
Received: from pps.filterd (m0356517.ppops.net [127.0.0.1])
by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SD66uW012388;
Wed, 28 May 2025 13:32:06 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc
:content-transfer-encoding:content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to; s=pp1; bh=X6d7v5
KHeDqP4SfAbwNK+BtPEbep1L/+/1PYfLP9vuQ=; b=OYjcPFjFymhSOiNINpxnAg
Fa7AzXrjoVg7P8Gspa+aXvxb7LqsIHZgkGQ72Kc0skhoC/g8pzEvuV0EfqB6sg1k
Z8lNGym27uzLwSG+O/3UeqVe/Ng+PoV9mltivBaiOnWJ+C5lDnfQlifpXeTnm6Pm
EAmFXGHy7FUNVXsq+pJQ323rIuYCZfNBBu4jXUieYRCCOZTGdMVEdLjoQqcvfLJU
KE+XQ8Lx+1z+DtIWXkduSBs0mUGaPr078t5u1JwFglGA/lcBO7c6msJwnRQ+MWaI
fzwDRxMvHKayXvyPOzXLLKH8An15VHdCSbpo4cws/7FY/o7ys6vx2aigfok0zGYg
==
Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219])
by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 46wgsgd3je-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 13:32:05 +0000 (GMT)
Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1])
by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 54SAcxke015803;
Wed, 28 May 2025 13:31:49 GMT
Received: from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225])
by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 46uu537bc3-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 13:31:49 +0000
Received: from smtpav03.fra02v.mail.ibm.com (smtpav03.fra02v.mail.ibm.com [10.20.54.102])
by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 54SDVlR254198746
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Wed, 28 May 2025 13:31:47 GMT
Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1])
by IMSVA (Postfix) with ESMTP id 94E7E2004D;
Wed, 28 May 2025 13:31:47 +0000 (GMT)
Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1])
by IMSVA (Postfix) with ESMTP id A16EB20043;
Wed, 28 May 2025 13:31:45 +0000 (GMT)
Received: from linux.ibm.com (unknown [9.124.209.136])
by smtpav03.fra02v.mail.ibm.com (Postfix) with ESMTPS;
Wed, 28 May 2025 13:31:45 +0000 (GMT)
Date: Wed, 28 May 2025 19:01:42 +0530
From: Vishal Chourasia <vishalc@xxxxxxxxxxxxx>
To: Michal =?iso-8859-1?Q?Koutn=FD?= <mkoutny@xxxxxxxx>
Cc: Tejun Heo <tj@xxxxxxxxxx>, Johannes Weiner <hannes@xxxxxxxxxxx>,
Jonathan Corbet <corbet@xxxxxxx>, cgroups@xxxxxxxxxxxxxxx,
linux-doc@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH] Documentation: cgroup: clarify controller enabling
semantics
Message-ID: <aDcQPgjzx-X2Kj5s@xxxxxxxxxxxxx>
References: <20250527085335.256045-2-vishalc@xxxxxxxxxxxxx>
<vzdrzqphpjnvrfynx7ajdrgfraavebig4edipde3kulxp2euqh@7p32zx7ql6k6>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <vzdrzqphpjnvrfynx7ajdrgfraavebig4edipde3kulxp2euqh@7p32zx7ql6k6>
X-TM-AS-GCONF: 00
X-Authority-Analysis: v=2.4 cv=OIIn3TaB c=1 sm=1 tr=0 ts=68371055 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=8nJEP1OIZ-IA:10 a=dt9VzEwgFbYA:10 a=VnNF1IyMAAAA:8 a=ihcwlhghPN_qPqRxoEcA:9 a=3ZKOabzyN94A:10 a=wPNLvfGTeEIA:10
X-Proofpoint-GUID: a6VRcOVsuolG0IXKqeIGJA0iNkgN6ltU
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDExOSBTYWx0ZWRfXwGHLpxZXd/i6 s3cO+s3LPeKtfBoDgsO2WPbPiDDxoS8QnHOrtE257zpWQeaPZX97O4M2pqT7ImqlbDFEvDuVtNi 7lGwd1TWV5fA9dAwFRswII3VSNrg/EkyEgIWzMbRlKgcJdckwfYawa9uQaeYHLtPuomhDWHhCNK
0WyIlh1ZsmhuO5gLKOpOc0LbJEdd+fejNmJcCJ0urwn7Ot2t5jdioe683qChfBFTp5fzmHjK9eq CGeCoexuWpOhsb+t5M5EOuSXai0+lTjLcrnl56phjufPoah37hnHUKWkvOayS2SbDHparR27Clx +H94sccmp2mQNXv22vol8KmjJsrHlQZLGyU/ThMqOBXykm8umnQb4raZNIBuCL+xocdrWb+iBIk
VJHDBV9SzPSxReP3ulc+pMb934Se6bilCO+tg/BJvMgcjKWhlbalodgyKMkXLecDPBCTViyf
X-Proofpoint-ORIG-GUID: a6VRcOVsuolG0IXKqeIGJA0iNkgN6ltU
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 spamscore=0
bulkscore=0 priorityscore=1501 adultscore=0 lowpriorityscore=0
suspectscore=0 phishscore=0 malwarescore=0 clxscore=1015 mlxscore=0
mlxlogscore=371 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280119
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 11:58:50AM +0200, Michal Koutný wrote:
> Hello.
>
> On Tue, May 27, 2025 at 02:23:36PM +0530, Vishal Chourasia <vishalc@xxxxxxxxxxxxx> wrote:
> > --- a/Documentation/admin-guide/cgroup-v2.rst
> > +++ b/Documentation/admin-guide/cgroup-v2.rst
> > @@ -438,8 +438,8 @@ Controlling Controllers
> > Enabling and Disabling
> > ~~~~~~~~~~~~~~~~~~~~~~
> >
> > -Each cgroup has a "cgroup.controllers" file which lists all
> > -controllers available for the cgroup to enable::
> > +Each cgroup has a cgroup.controllers file, which lists all the controllers
> > +available for that cgroup and which can be enabled for its children.
> >
> > # cat cgroup.controllers
> > cpu io memory
>
> Honestly, I see little difference between the two resulting formulations.
> Could you perhaps add an example where the documentation confused you or
> behavior was not what you expected based on the docs?
You are right, there is little difference. I wanted to highlight the
point, that, Availablity means controller can be used to resource
control a cgroup, while Enablement means controller is now "availble" to
children of the cgroup.
Regards,
Vishal
>
> Thanks,
> Michal
Return-Path: <linux-kernel+bounces-665533-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 0756141E003FB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:33:33 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 3BCF34E08D1
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:33:34 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 083462882B0;
Wed, 28 May 2025 13:33:19 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="baW+lHSG"
Received: from mx07-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B0C441E8854;
Wed, 28 May 2025 13:33:16 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.207.212.93
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439198; cv=none; b=c58zkA9Sun2vNINfy7dBCB2S9abQ2E9MLoILYEq73fdwiprM2+JMmAkMbvFlSe10LV/u1Kq1UpUXA87kESpw7IMiJZOvFKpTPOnrtPEUwjsXQ6DJT6jXuXuAUBgIxUvlDzBwMo14l8C4mq29+5avMIVno07qWu0lQ8KCG3wr+SY=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439198; c=relaxed/simple;
bh=sU2RhePat1aQjBO237+i5tjmIArbuVyp7bQ9whF+JYE=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References:
In-Reply-To:To:CC; b=na+UOJetPCsKZliw3wkdtubzMDuzxHUuZoxjFpieUncAlzKDp+RZsCxRyRLk4GCsDS3r0EtpLTX97ogOPLWymvaV4G9jSbooz7YP16VzJlINSm7GfU9CA37nXQPmafvFNYiE7umHfYcoKkBrZitcqX/fHBH1cLmi2MfYw88icN0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=baW+lHSG; arc=none smtp.client-ip=91.207.212.93
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com
Received: from pps.filterd (m0046660.ppops.net [127.0.0.1])
by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SC8uDe028907;
Wed, 28 May 2025 15:33:05 +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h=
cc:content-transfer-encoding:content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to; s=selector1; bh=
R4Em2WOCtNmZnECHj9cB8orbqHwuCdEzrhZKZaFoeaU=; b=baW+lHSG6gqHQtNc
WioG13qng65SbE66I+iN7vtV2Bfhy7OpljEHKFm9tgq5sEfkke044NNyjCqszh0h
oinxydP5M3D8WElRd9PfrGJtwa94KGvlr8w8PW56fljMYLnbcSE0eFa2ityk5EgZ
9D+2+qDvj8yYv7YPhwfWpKuP6Q+w2zFWPx8u2Ci4vzIr+fymwJxgHYJWQ13k/U5B
6vr5EQ/SzM7CWdZdj9Yar6cpwngbaTLU152SYi7fEkloqEBHsXz4YTDGPjso0Jcy
jzWcrlLUjcTMwBxjtIVc4ruM59sXMA2AO0zcFp1+bjIr6oGqRdW2+MDBDJetZJLD
PUpSXg==
Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35])
by mx07-00178001.pphosted.com (PPS) with ESMTPS id 46u3891qv2-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 15:33:05 +0200 (MEST)
Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20])
by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id CA49F4005C;
Wed, 28 May 2025 15:31:52 +0200 (CEST)
Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70])
by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 0326E6CCEFD;
Wed, 28 May 2025 15:31:07 +0200 (CEST)
Received: from localhost (10.48.86.185) by SHFDAG1NODE2.st.com (10.75.129.70)
with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 28 May
2025 15:31:06 +0200
From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= <clement.legoffic@xxxxxxxxxxx>
Date: Wed, 28 May 2025 15:31:02 +0200
Subject: [PATCH v4 9/9] ARM: dts: stm32: add Hardware debug port (HDP) on
stm32mp157c-dk2 board
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Message-ID: <20250528-hdp-upstream-v4-9-7e9b3ad2036d@xxxxxxxxxxx>
References: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
In-Reply-To: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
To: Linus Walleij <linus.walleij@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Maxime Coquelin <mcoquelin.stm32@xxxxxxxxx>,
Alexandre Torgue
<alexandre.torgue@xxxxxxxxxxx>,
Bartosz Golaszewski <brgl@xxxxxxxx>
CC: <linux-kernel@xxxxxxxxxxxxxxx>, <linux-gpio@xxxxxxxxxxxxxxx>,
<devicetree@xxxxxxxxxxxxxxx>,
<linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>,
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>,
=?utf-8?q?Cl=C3=A9ment_Le_Goffic?=
<clement.legoffic@xxxxxxxxxxx>
X-Mailer: b4 0.15-dev-6f78e
X-ClientProxiedBy: SHFCAS1NODE2.st.com (10.75.129.73) To SHFDAG1NODE2.st.com
(10.75.129.70)
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On the stm32mp157fc-dk2 board, we can observe the hdp GPOVAL function on
SoC pin E13 accessible on the pin 5 on the Arduino connector CN13.
Add the relevant configuration but keep it disabled as it's used for
debug only.
Signed-off-by: Clément Le Goffic <clement.legoffic@xxxxxxxxxxx>
---
arch/arm/boot/dts/st/stm32mp157c-dk2.dts | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/arch/arm/boot/dts/st/stm32mp157c-dk2.dts b/arch/arm/boot/dts/st/stm32mp157c-dk2.dts
index 324f7bb988d1..8a8fdf338d1d 100644
--- a/arch/arm/boot/dts/st/stm32mp157c-dk2.dts
+++ b/arch/arm/boot/dts/st/stm32mp157c-dk2.dts
@@ -63,6 +63,12 @@ &dsi_out {
remote-endpoint = <&panel_in>;
};
+&hdp {
+ pinctrl-names = "default", "sleep";
+ pinctrl-0 = <&hdp2_gpo &hdp2_pins_a>;
+ pinctrl-1 = <&hdp2_sleep_pins_a>;
+};
+
&i2c1 {
touchscreen@38 {
compatible = "focaltech,ft6236";
--
2.43.0
Return-Path: <linux-kernel+bounces-665532-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 01E2241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:33:32 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id DECC41BC5D8A
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:33:44 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id A90972882A2;
Wed, 28 May 2025 13:33:18 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="odvNrkoR"
Received: from mx08-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4E97A7FBA2;
Wed, 28 May 2025 13:33:15 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.207.212.93
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439198; cv=none; b=b4Uu66Byj4MwpppgQxMCxIJuyB2XmTvOWzUeFDJfY/2iFvtOY7YAus8WYVlihBb8a3xkbu1qU/hTySLWslvIaO6j3ajy5xxUh2KSNAEhEiTMHURuN40JXOehZf7jpOJ48Eml1AGrVkLZOgilaonroQm6NYeWCoXjthTfHtGEl60=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439198; c=relaxed/simple;
bh=+HZ1hAlMJLfS8JRxhzEDYGYpGNGcjsFe5N6n4fXa37s=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References:
In-Reply-To:To:CC; b=e5sPavOoPLRe87Jm0uZgvNcTVy3fMfFbIKN+YUnhB8QPKt/KqMMsg29UM+9XPoB9vYvvW58qbb0blAjM3YBozKDOSdvzNJd/hHrOjhE/T5Ue4/i/P+JDeGOOM0ieRPx8rdy2K+DoOjmRWx3vFXH3mSN9K8EFcW3H2huWVdQ4IBc=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=odvNrkoR; arc=none smtp.client-ip=91.207.212.93
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com
Received: from pps.filterd (m0369457.ppops.net [127.0.0.1])
by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SC68gI005524;
Wed, 28 May 2025 15:33:05 +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h=
cc:content-transfer-encoding:content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to; s=selector1; bh=
q1Xe+iFfoFaZmcBVvqZtaLKC4sE7WOeQvKFEpMrwsnw=; b=odvNrkoRVpw2eeBF
6BILyXCBCKpMRfy+QKoOohuD5teIPpRe7OsA2d7uZTMuctfU6zFmMZYahdmUAe1I
goDmOhgSXIaPDR4e/Akj7Kgpb5sC0oGU3HSxIBlCdwZm4TumemNYY+nqdkEehZzN
Z6ujf6C8Me0DWbHXLLFdeXul2qiXl/2QD10C/qrr08apZedHfLy7zskuGTurE6GO
nIapA9MNIlzHJDpy7lKEzIYdL2zAQSDCruhftpp7/ANhgelRXjA6nrL9ZYb7l2FO
5RnHAlvMjznpgfhO8+ho/2519eJoWRFbSjm0qit6QpUYRDeqI7fx9pf1IlVHKhD4
+/GZMQ==
Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35])
by mx07-00178001.pphosted.com (PPS) with ESMTPS id 46w54hrb5u-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 15:33:05 +0200 (MEST)
Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20])
by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id 25BA540070;
Wed, 28 May 2025 15:31:49 +0200 (CEST)
Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70])
by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 6C9076CCEEE;
Wed, 28 May 2025 15:31:05 +0200 (CEST)
Received: from localhost (10.48.86.185) by SHFDAG1NODE2.st.com (10.75.129.70)
with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 28 May
2025 15:31:05 +0200
From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= <clement.legoffic@xxxxxxxxxxx>
Date: Wed, 28 May 2025 15:31:00 +0200
Subject: [PATCH v4 7/9] ARM: dts: stm32: add Hardware debug port (HDP) on
stm32mp25
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Message-ID: <20250528-hdp-upstream-v4-7-7e9b3ad2036d@xxxxxxxxxxx>
References: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
In-Reply-To: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
To: Linus Walleij <linus.walleij@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Maxime Coquelin <mcoquelin.stm32@xxxxxxxxx>,
Alexandre Torgue
<alexandre.torgue@xxxxxxxxxxx>,
Bartosz Golaszewski <brgl@xxxxxxxx>
CC: <linux-kernel@xxxxxxxxxxxxxxx>, <linux-gpio@xxxxxxxxxxxxxxx>,
<devicetree@xxxxxxxxxxxxxxx>,
<linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>,
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>,
=?utf-8?q?Cl=C3=A9ment_Le_Goffic?=
<clement.legoffic@xxxxxxxxxxx>
X-Mailer: b4 0.15-dev-6f78e
X-ClientProxiedBy: SHFCAS1NODE2.st.com (10.75.129.73) To SHFDAG1NODE2.st.com
(10.75.129.70)
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Add the hdp devicetree node for stm32mp25 SoC family
Signed-off-by: Clément Le Goffic <clement.legoffic@xxxxxxxxxxx>
---
arch/arm64/boot/dts/st/stm32mp251.dtsi | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/arch/arm64/boot/dts/st/stm32mp251.dtsi b/arch/arm64/boot/dts/st/stm32mp251.dtsi
index 87110f91e489..0fd79acd458f 100644
--- a/arch/arm64/boot/dts/st/stm32mp251.dtsi
+++ b/arch/arm64/boot/dts/st/stm32mp251.dtsi
@@ -917,6 +917,13 @@ package_otp@1e8 {
};
};
+ hdp: pinctrl@44090000 {
+ compatible = "st,stm32mp251-hdp";
+ reg = <0x44090000 0x400>;
+ clocks = <&rcc CK_BUS_HDP>;
+ status = "disabled";
+ };
+
rcc: clock-controller@44200000 {
compatible = "st,stm32mp25-rcc";
reg = <0x44200000 0x10000>;
--
2.43.0
Return-Path: <linux-kernel+bounces-665534-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 858B441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:33:55 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id C084E1BC674C
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:34:05 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id D8914288529;
Wed, 28 May 2025 13:33:20 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="WdYSj0zs"
Received: from mx08-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7D9AC28750A;
Wed, 28 May 2025 13:33:18 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.207.212.93
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439200; cv=none; b=RETVXJo7HfNJF4ki+56XFy9xcjAB/KO7Tg7TUPc5HtnyOqJnMysxjN19qYUwFTjhASG2oOR8bdnkQ+pM9QKatPXSqTdU8O5sUEfw3S3lZXIMKdCHBzJ3QegD9G0POocSTPrY0LUTv2r7YUvtfLMIyXKxuOx3QLW0Kgf0je9EEMc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439200; c=relaxed/simple;
bh=YZQE4tYZuMccx0vKTjnDG64cQ5GRtL3RUxH8TgioquI=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References:
In-Reply-To:To:CC; b=uLAVpQJsr6xDcr9q9FkCY93KSpEejHx8aYLKaRZrBdMWBbQY6TxzI2+RkEQtvLOqUVWvdJlh/O8hqareNo3WDeplc46JGDK0MXfGKm3HKkq3ggvWHcy8LZ/+wo1OWgmQ7mm6qZpjR/4KZ7myV0GcR4EZNvpxgKKPs2nEkEHLQcg=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=WdYSj0zs; arc=none smtp.client-ip=91.207.212.93
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com
Received: from pps.filterd (m0369457.ppops.net [127.0.0.1])
by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SBAXrj009337;
Wed, 28 May 2025 15:33:05 +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h=
cc:content-transfer-encoding:content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to; s=selector1; bh=
XDiPaUX7L0zqYZu1CgdfB/6W9p+CHs7zwPywjjpA6ls=; b=WdYSj0zss0JLMrhz
BBK6oxqpQpWLDCothYG4R3TiJJp89TYqqVpJEQ2vPcrglPaYtWkhQT0vgOF292j0
mRZOQqkbdLo6U3uRnzY83Rswc+70/apKF75Sq6ICbGjYXMWhUtn552pGXgvX+jK8
HwHvY3NkCxs5Qu8DCtnRAs+3e3fyKLYEniiCFvBsLXQnBEe/ALyR8WrBnnmFm6cN
v+KUdjkm45aYi36NW1AfImbc0sgqBBhx6T7M6IlP+prBqeXOd10VLAqfk5tLUYTc
NcQjJhSoG58sd8Kkv3Q3/F9dQaBFhzfo5TF+AzgL2V4PqKJ0rPm4DpBWvdslZnal
C7TpZw==
Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35])
by mx07-00178001.pphosted.com (PPS) with ESMTPS id 46w54hrb5v-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 15:33:05 +0200 (MEST)
Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20])
by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id 620134006B;
Wed, 28 May 2025 15:31:48 +0200 (CEST)
Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70])
by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id ADAF86CCEF6;
Wed, 28 May 2025 15:31:04 +0200 (CEST)
Received: from localhost (10.48.86.185) by SHFDAG1NODE2.st.com (10.75.129.70)
with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 28 May
2025 15:31:04 +0200
From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= <clement.legoffic@xxxxxxxxxxx>
Date: Wed, 28 May 2025 15:30:59 +0200
Subject: [PATCH v4 6/9] ARM: dts: stm32: add Hardware debug port (HDP) on
stm32mp15
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Message-ID: <20250528-hdp-upstream-v4-6-7e9b3ad2036d@xxxxxxxxxxx>
References: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
In-Reply-To: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
To: Linus Walleij <linus.walleij@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Maxime Coquelin <mcoquelin.stm32@xxxxxxxxx>,
Alexandre Torgue
<alexandre.torgue@xxxxxxxxxxx>,
Bartosz Golaszewski <brgl@xxxxxxxx>
CC: <linux-kernel@xxxxxxxxxxxxxxx>, <linux-gpio@xxxxxxxxxxxxxxx>,
<devicetree@xxxxxxxxxxxxxxx>,
<linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>,
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>,
=?utf-8?q?Cl=C3=A9ment_Le_Goffic?=
<clement.legoffic@xxxxxxxxxxx>
X-Mailer: b4 0.15-dev-6f78e
X-ClientProxiedBy: SHFCAS1NODE2.st.com (10.75.129.73) To SHFDAG1NODE2.st.com
(10.75.129.70)
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Add the hdp devicetree node for stm32mp15 SoC family
Signed-off-by: Clément Le Goffic <clement.legoffic@xxxxxxxxxxx>
---
arch/arm/boot/dts/st/stm32mp151.dtsi | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/arch/arm/boot/dts/st/stm32mp151.dtsi b/arch/arm/boot/dts/st/stm32mp151.dtsi
index 0daa8ffe2ff5..b1b568dfd126 100644
--- a/arch/arm/boot/dts/st/stm32mp151.dtsi
+++ b/arch/arm/boot/dts/st/stm32mp151.dtsi
@@ -270,6 +270,13 @@ dts: thermal@50028000 {
status = "disabled";
};
+ hdp: pinctrl@5002a000 {
+ compatible = "st,stm32mp151-hdp";
+ reg = <0x5002a000 0x400>;
+ clocks = <&rcc HDP>;
+ status = "disabled";
+ };
+
mdma1: dma-controller@58000000 {
compatible = "st,stm32h7-mdma";
reg = <0x58000000 0x1000>;
--
2.43.0
Return-Path: <linux-kernel+bounces-665535-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 99FB541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:34:03 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id E330A4E2AC4
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:34:04 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id B7D37288C18;
Wed, 28 May 2025 13:33:21 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="kl814dqG"
Received: from mx07-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9691428751D;
Wed, 28 May 2025 13:33:18 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.207.212.93
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439201; cv=none; b=mR0vdrmGLZ0SAu9PXgd2ZZuEwbdJU1BPqLSrPz0Si7IN4GARv2iHiVj5BLBA54FEVHnPCunyRtVOZjyl7teSfFZ+7jhjaW75eHxG92440QZJ1RLKHASA2yananRyFE8TE0hTUpGgTTy12HFSDsAcRtLB6F5BFKs5kerkJVaVuko=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439201; c=relaxed/simple;
bh=G4nnRfKUQeHDcQinxtuGQUF6giZzdtMuIKCcHDFpGxY=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References:
In-Reply-To:To:CC; b=GrE3XyLN4zTmln/YX4iDRQtEPTv1P70lkKvzK6/dwkvaezMwFKaDD69ZbWJMLNI8dScSrxWEZCbXAOrcTfTNx2oC2vHvHQZMMVVkJwX6cPVd6mvCEB+/SO8INbGi9xGMzC+adloOn0MAj6wxDhgZYC8TeqhaJ+L4F6FJo1RHLW0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=kl814dqG; arc=none smtp.client-ip=91.207.212.93
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com
Received: from pps.filterd (m0046660.ppops.net [127.0.0.1])
by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SC8uDa028907;
Wed, 28 May 2025 15:32:57 +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h=
cc:content-transfer-encoding:content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to; s=selector1; bh=
/fb3UPZu5WN39hqyomy18YDn8fBiBvMNblbm+Y5i2po=; b=kl814dqGPeFuSLFL
npVSgaX618J4kCsu13eiO+jS2rH+UwlnExum79SSgzu8sVDRqxWyh43XzWFvJNaI
gp3/uJCyBnwk0T3A8g97n+0TSMTKgThX4gdhYb8iNevZ4+h7TzzeQsyXevcrSEAO
jg2wWKkt/39v95TeHUDp9gyUs+CPJCklub2/iMzG02TOpBxpJBgiRtzdMYIQU14L
f0tdL9RGS4sFMBULRG4S/EoXeapvNYwM/94/Y9Q2Z+9rDI+iEByJ9YpnB55QKb+m
dTQeq6ik1qNCphbvI87+g61bskosNsIESA0MnzzVtI0bUAowOuM95AwwMQ7Se4s0
++t4Gw==
Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35])
by mx07-00178001.pphosted.com (PPS) with ESMTPS id 46u3891que-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 15:32:57 +0200 (MEST)
Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20])
by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id 14C2F4004F;
Wed, 28 May 2025 15:31:45 +0200 (CEST)
Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70])
by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 066E06CCECA;
Wed, 28 May 2025 15:31:01 +0200 (CEST)
Received: from localhost (10.48.86.185) by SHFDAG1NODE2.st.com (10.75.129.70)
with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 28 May
2025 15:31:00 +0200
From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= <clement.legoffic@xxxxxxxxxxx>
Date: Wed, 28 May 2025 15:30:54 +0200
Subject: [PATCH v4 1/9] gpio: mmio: add BGPIOF_NO_INPUT flag for GPO
gpiochip
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Message-ID: <20250528-hdp-upstream-v4-1-7e9b3ad2036d@xxxxxxxxxxx>
References: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
In-Reply-To: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
To: Linus Walleij <linus.walleij@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Maxime Coquelin <mcoquelin.stm32@xxxxxxxxx>,
Alexandre Torgue
<alexandre.torgue@xxxxxxxxxxx>,
Bartosz Golaszewski <brgl@xxxxxxxx>
CC: <linux-kernel@xxxxxxxxxxxxxxx>, <linux-gpio@xxxxxxxxxxxxxxx>,
<devicetree@xxxxxxxxxxxxxxx>,
<linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>,
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>,
=?utf-8?q?Cl=C3=A9ment_Le_Goffic?=
<clement.legoffic@xxxxxxxxxxx>
X-Mailer: b4 0.15-dev-6f78e
X-ClientProxiedBy: SHFCAS1NODE2.st.com (10.75.129.73) To SHFDAG1NODE2.st.com
(10.75.129.70)
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
When using bgpio_init with a gpiochip acting as a GPO (output only), the
gpiochip ops `direction_input` was set to `bgpio_simple_dir_in` by
default but we have no input ability.
Adding this flag allows to set a valid ops for the `direction_output`
ops without setting a valid ops for `direction_input` by default.
Signed-off-by: Clément Le Goffic <clement.legoffic@xxxxxxxxxxx>
---
drivers/gpio/gpio-mmio.c | 11 ++++++++++-
include/linux/gpio/driver.h | 1 +
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/drivers/gpio/gpio-mmio.c b/drivers/gpio/gpio-mmio.c
index 4841e4ebe7a6..09b9e1275e7e 100644
--- a/drivers/gpio/gpio-mmio.c
+++ b/drivers/gpio/gpio-mmio.c
@@ -335,6 +335,11 @@ static int bgpio_dir_return(struct gpio_chip *gc, unsigned int gpio, bool dir_ou
return pinctrl_gpio_direction_input(gc, gpio);
}
+static int bgpio_dir_in_err(struct gpio_chip *gc, unsigned int gpio)
+{
+ return -EINVAL;
+}
+
static int bgpio_simple_dir_in(struct gpio_chip *gc, unsigned int gpio)
{
return bgpio_dir_return(gc, gpio, false);
@@ -566,7 +571,11 @@ static int bgpio_setup_direction(struct gpio_chip *gc,
gc->direction_output = bgpio_dir_out_err;
else
gc->direction_output = bgpio_simple_dir_out;
- gc->direction_input = bgpio_simple_dir_in;
+
+ if (flags & BGPIOF_NO_INPUT)
+ gc->direction_input = bgpio_dir_in_err;
+ else
+ gc->direction_input = bgpio_simple_dir_in;
}
return 0;
diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h
index 4c0294a9104d..42890db9b10e 100644
--- a/include/linux/gpio/driver.h
+++ b/include/linux/gpio/driver.h
@@ -749,6 +749,7 @@ int bgpio_init(struct gpio_chip *gc, struct device *dev,
#define BGPIOF_NO_OUTPUT BIT(5) /* only input */
#define BGPIOF_NO_SET_ON_INPUT BIT(6)
#define BGPIOF_PINCTRL_BACKEND BIT(7) /* Call pinctrl direction setters */
+#define BGPIOF_NO_INPUT BIT(8) /* only output */
#ifdef CONFIG_GPIOLIB_IRQCHIP
int gpiochip_irqchip_add_domain(struct gpio_chip *gc,
--
2.43.0
Return-Path: <linux-kernel+bounces-665536-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E8DDD41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:34:18 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 0D753A22945
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:33:46 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 081D3288C2F;
Wed, 28 May 2025 13:33:22 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="Vgx6lHBJ"
Received: from mx07-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id AA24526A0E0;
Wed, 28 May 2025 13:33:19 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.207.212.93
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439201; cv=none; b=U+85XmiRS5Ozc8ctnuzNB3j1tWTDNL5PlW4wyDSXpz2Czj1WgXZmp5m/+RDOjLZaqlqm2ijA9sNZvKXj7XCOAeK7MtxYn7e7RDEXrTk6cy7PNLYzX4taxoqhfgMZUxWt+70l5qjMyrTS5INBBJVojylgwmr2zchNpaVRCHuChyU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439201; c=relaxed/simple;
bh=0gXlghNReQ3xJ96aGlYAz/HNqdU+fsvzFoHWeweIWEM=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References:
In-Reply-To:To:CC; b=lRiII+tZckK3RoCnOFfdM03h7QeKL1gRh9xcf6HRAFHYJ9m8LdyKjAhxHWNovCPrMva46dzvqpy4VO8TRgMh7ud0w2Gj4MNRRU0ORQqb0fJxGuzGr/iC1R3Tu0wrkl5mz6G9Fa3UovhfJTzJFap8KVq82oBKNkpP2dmOyF3z2r4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=Vgx6lHBJ; arc=none smtp.client-ip=91.207.212.93
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com
Received: from pps.filterd (m0046661.ppops.net [127.0.0.1])
by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SC50nv016771;
Wed, 28 May 2025 15:33:05 +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h=
cc:content-transfer-encoding:content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to; s=selector1; bh=
E50xYFA31UxV2r8i4ZX3G+C/OQH/OeYpXAFoahXjSdE=; b=Vgx6lHBJQdIh+MUI
arbDveMPv8zTQMBrwDm4eeG+uDzjIXdRp9xyVK+J71R4PQaU+yd6001npOIdj99d
GqbHWfNog7vETGZrXGggrUoMDrSK72vhw0hGMuPTK+MBagPebEyemKf0p7FdyzcT
V+bhOzdFUYtlb0aaIf2uFIk/ps9V2ZWyizpvSeoMjsU7JRdLZ6NwGvp53uT2M0mK
9Ch3nZe/8NjAa1C5b+TqqJlRSF426OPsgyYVHZux6JGCe9jOvL5Xbh4uFJs+OvdB
a5Phs+8zkjy+xuHJxONWrJ+geKpHChgJs2382GSTKRWxR6Lk/vVE2FJW+HQ8z521
+XHyXA==
Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35])
by mx07-00178001.pphosted.com (PPS) with ESMTPS id 46u50gsjhv-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 15:33:05 +0200 (MEST)
Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20])
by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id 8E34C4006D;
Wed, 28 May 2025 15:31:48 +0200 (CEST)
Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70])
by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 38F2E6CCEF7;
Wed, 28 May 2025 15:31:06 +0200 (CEST)
Received: from localhost (10.48.86.185) by SHFDAG1NODE2.st.com (10.75.129.70)
with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 28 May
2025 15:31:05 +0200
From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= <clement.legoffic@xxxxxxxxxxx>
Date: Wed, 28 May 2025 15:31:01 +0200
Subject: [PATCH v4 8/9] ARM: dts: stm32: add alternate pinmux for HDP pin
and add HDP pinctrl node
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Message-ID: <20250528-hdp-upstream-v4-8-7e9b3ad2036d@xxxxxxxxxxx>
References: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
In-Reply-To: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
To: Linus Walleij <linus.walleij@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Maxime Coquelin <mcoquelin.stm32@xxxxxxxxx>,
Alexandre Torgue
<alexandre.torgue@xxxxxxxxxxx>,
Bartosz Golaszewski <brgl@xxxxxxxx>
CC: <linux-kernel@xxxxxxxxxxxxxxx>, <linux-gpio@xxxxxxxxxxxxxxx>,
<devicetree@xxxxxxxxxxxxxxx>,
<linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>,
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>,
=?utf-8?q?Cl=C3=A9ment_Le_Goffic?=
<clement.legoffic@xxxxxxxxxxx>
X-Mailer: b4 0.15-dev-6f78e
X-ClientProxiedBy: SHFCAS1NODE2.st.com (10.75.129.73) To SHFDAG1NODE2.st.com
(10.75.129.70)
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Introduce hdp node to output a user defined value on port hdp2.
Add pinctrl nodes to be able to output this signal on one SoC pin.
Signed-off-by: Clément Le Goffic <clement.legoffic@xxxxxxxxxxx>
---
arch/arm/boot/dts/st/stm32mp15-pinctrl.dtsi | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/arch/arm/boot/dts/st/stm32mp15-pinctrl.dtsi b/arch/arm/boot/dts/st/stm32mp15-pinctrl.dtsi
index 40605ea85ee1..4a31e9f7a897 100644
--- a/arch/arm/boot/dts/st/stm32mp15-pinctrl.dtsi
+++ b/arch/arm/boot/dts/st/stm32mp15-pinctrl.dtsi
@@ -5,6 +5,14 @@
*/
#include <dt-bindings/pinctrl/stm32-pinfunc.h>
+&hdp {
+ /omit-if-no-ref/
+ hdp2_gpo: hdp2-pins {
+ function = "gpoval2";
+ pins = "HDP2";
+ };
+};
+
&pinctrl {
/omit-if-no-ref/
adc1_ain_pins_a: adc1-ain-0 {
@@ -731,6 +739,23 @@ pins {
};
};
+ /omit-if-no-ref/
+ hdp2_pins_a: hdp2-0 {
+ pins {
+ pinmux = <STM32_PINMUX('E', 13, AF0)>; /* HDP2 */
+ bias-disable;
+ drive-push-pull;
+ slew-rate = <2>;
+ };
+ };
+
+ /omit-if-no-ref/
+ hdp2_sleep_pins_a: hdp2-sleep-0 {
+ pins {
+ pinmux = <STM32_PINMUX('E', 13, ANALOG)>; /* HDP2 */
+ };
+ };
+
/omit-if-no-ref/
i2c1_pins_a: i2c1-0 {
pins {
--
2.43.0
Return-Path: <linux-kernel+bounces-665537-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 6032441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:34:40 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id A530D7A45D7
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:33:20 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C331328980F;
Wed, 28 May 2025 13:33:27 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="bcd8cvsK"
Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5F31126A0E0;
Wed, 28 May 2025 13:33:25 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.132.182.106
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439207; cv=none; b=WUNou7a0vfih0kbFdTS6ouKCyqNOeVoY9B6rkYuWG2/NU2EtPeZCbu6/+dRUSR2HNclubo5LEe5MOh64dwA1Sxy5WlhvoOcxfY9fEBiLPkAKBEHHr8qMlOFUySXiwJTd+sAE80gXZ/wPwNSQuz3dThOOEjFXhVXnQtLnQbJ6ZN4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439207; c=relaxed/simple;
bh=KHbjyN2d2s1I0/J03YDGAwgAwHS1sT7K6Bg42y+oCC0=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References:
In-Reply-To:To:CC; b=j0RjYt5sQXiBGaErpXnpI0hTghaMTEK/x+v3vnFOsi3B2bI5rf4e0Lwsf7xLa7RW/rZzndwuWV14b4DowCeV5nGS5yx7rRxZHapY+Nd57QIpkELU4X/TUd5va/DTIctteV9+ptrIbJIWlSEUy1pDJX0ScUa9hnMB6ihfhZZW/dc=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=bcd8cvsK; arc=none smtp.client-ip=185.132.182.106
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com
Received: from pps.filterd (m0369458.ppops.net [127.0.0.1])
by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SCXnlC019251;
Wed, 28 May 2025 15:33:05 +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h=
cc:content-transfer-encoding:content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to; s=selector1; bh=
vOKCvrg9T946MeKb54UlHJZ6LDnhr4kD9B8NCELZ49s=; b=bcd8cvsK+mcjyYwr
BG8kIBEUsHAZLder+fY5vncgL2M9lQI8otrEzOVGGF9Cz+gpQcXi2zh+7i/fHChD
wJZ16YghCKv19E6OmgefAhGEOGOUHeBeeCcP0JFMiCoci4/TtgAs0upaBl8GPdmL
EixYoeIEyAVI5+iJm6qDNlaUKVutUS9l7M2StK5NcNW9OMJ2J8Qa+v0hpgW99lsC
NHZOPXiwlG/xB78O0HMLglkeEtxlwBd3uJVehWVhLmKQ4e5FE1985fCw4v537pCN
UpLlNiamFfPQWEmrbiKuUES5Jzi5BeR15aGFogNVwsGA3uyfll9PD5/RAactdBtm
Zkonwg==
Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35])
by mx07-00178001.pphosted.com (PPS) with ESMTPS id 46uqp4quvb-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 15:33:05 +0200 (MEST)
Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20])
by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id E1FF340051;
Wed, 28 May 2025 15:31:48 +0200 (CEST)
Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70])
by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 419386CB808;
Wed, 28 May 2025 15:31:03 +0200 (CEST)
Received: from localhost (10.48.86.185) by SHFDAG1NODE2.st.com (10.75.129.70)
with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 28 May
2025 15:31:03 +0200
From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= <clement.legoffic@xxxxxxxxxxx>
Date: Wed, 28 May 2025 15:30:57 +0200
Subject: =?utf-8?q?=5BPATCH_v4_4/9=5D_MAINTAINERS=3A_add_Cl=C3=A9ment_Le_?=
=?utf-8?q?Goffic_as_STM32_HDP_maintainer?=
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Message-ID: <20250528-hdp-upstream-v4-4-7e9b3ad2036d@xxxxxxxxxxx>
References: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
In-Reply-To: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
To: Linus Walleij <linus.walleij@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Maxime Coquelin <mcoquelin.stm32@xxxxxxxxx>,
Alexandre Torgue
<alexandre.torgue@xxxxxxxxxxx>,
Bartosz Golaszewski <brgl@xxxxxxxx>
CC: <linux-kernel@xxxxxxxxxxxxxxx>, <linux-gpio@xxxxxxxxxxxxxxx>,
<devicetree@xxxxxxxxxxxxxxx>,
<linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>,
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>,
=?utf-8?q?Cl=C3=A9ment_Le_Goffic?=
<clement.legoffic@xxxxxxxxxxx>
X-Mailer: b4 0.15-dev-6f78e
X-ClientProxiedBy: SHFCAS1NODE2.st.com (10.75.129.73) To SHFDAG1NODE2.st.com
(10.75.129.70)
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Add Clément Le Goffic as STM32 HDP maintainer.
Signed-off-by: Clément Le Goffic <clement.legoffic@xxxxxxxxxxx>
---
MAINTAINERS | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/MAINTAINERS b/MAINTAINERS
index f21f1dabb5fe..c0c30fe00a2a 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -23023,6 +23023,12 @@ F: drivers/bus/stm32_etzpc.c
F: drivers/bus/stm32_firewall.c
F: drivers/bus/stm32_rifsc.c
+ST STM32 HDP PINCTRL DRIVER
+M: Clément Le Goffic <clement.legoffic@xxxxxxxxxxx>
+S: Maintained
+F: Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl-hdp.yaml
+F: drivers/pinctrl/stm32/pinctrl-stm32-hdp.c
+
ST STM32 I2C/SMBUS DRIVER
M: Pierre-Yves MORDRET <pierre-yves.mordret@xxxxxxxxxxx>
M: Alain Volmat <alain.volmat@xxxxxxxxxxx>
--
2.43.0
Return-Path: <linux-kernel+bounces-665538-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1EA1341E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:34:55 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 08ADD9E5A10
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:34:16 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id CF34A289812;
Wed, 28 May 2025 13:33:27 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="gdaXVjjM"
Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6727828934F;
Wed, 28 May 2025 13:33:25 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.132.182.106
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439207; cv=none; b=UweLsQF8Xj79/SRuz7J+O2u24t6i0CKsnlTL1/IwFLr2sta8m89PG3JMO+CkEFGoDeTZ6UoRd038Ea2Trmeg/5g9djo1C6eDXNPGflJ7ZkY28uvC7hvBzoH4EL3FsOL4wpMExdrcP7M/FbLKBpmBKVLCHM5nmA9STSbix7MFHs4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439207; c=relaxed/simple;
bh=boGb5qPxMhchm3MxITlTwMVZFwScFXaTDK244hYhxD4=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References:
In-Reply-To:To:CC; b=tPfLchg9l2sgZu6gpbfxsBv7Lj3k5L25AdXWJ7ddOl21R2Q2jhQ92ARGfXgQKwhCQ9ZkGGK9G68/vjjZS/uzybuhu46i1+mddZdi6ErvJ09/eaSqSVmgDHZKsRLcfOXpe4G0la/oMczj2IHHOdlWgi1Y/xcDVAC3+9bvWdg/3JU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=gdaXVjjM; arc=none smtp.client-ip=185.132.182.106
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com
Received: from pps.filterd (m0241204.ppops.net [127.0.0.1])
by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SCX9tb024738;
Wed, 28 May 2025 15:33:05 +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h=
cc:content-transfer-encoding:content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to; s=selector1; bh=
8Ccd/GmmVAtJ9YjezxivUTBQH7dGSnkjYiVGpP3ihZI=; b=gdaXVjjMGwwioBNy
ZhDgesU82QoE3/jIF2KWxlUBpjIeAY3TCDhIC2JNdgc0Th9D0xP9C/iuKAoS8UE0
txitkniJD0OxhOsStU7rT0uulLbhXTVj74Aoy6LOV4bl55eatwNZYcvIfkUb76ZF
09Su/Y9ZLDjKaim9maMWhyVd0brATr+CF8urMHUHctiG8GiWxvDQ8D4QTbM3X8eU
yuCi/6ajEW1pontfreeke2bVjUh4r780ZKY5qG76TRX4B9uT0N0QKxNGz3VZQh+k
9P1rHE1+E9G9QJnTwSnLwv35ELDJbIOnHOZdC5oi5yE7/gBb6Nh8czx9R/Vh52l0
Tv0M+g==
Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35])
by mx07-00178001.pphosted.com (PPS) with ESMTPS id 46u5f2a2pe-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 15:33:05 +0200 (MEST)
Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20])
by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id A631540050;
Wed, 28 May 2025 15:31:48 +0200 (CEST)
Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70])
by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 0588D6CCEEF;
Wed, 28 May 2025 15:31:04 +0200 (CEST)
Received: from localhost (10.48.86.185) by SHFDAG1NODE2.st.com (10.75.129.70)
with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 28 May
2025 15:31:03 +0200
From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= <clement.legoffic@xxxxxxxxxxx>
Date: Wed, 28 May 2025 15:30:58 +0200
Subject: [PATCH v4 5/9] ARM: dts: stm32: add Hardware debug port (HDP) on
stm32mp13
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Message-ID: <20250528-hdp-upstream-v4-5-7e9b3ad2036d@xxxxxxxxxxx>
References: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
In-Reply-To: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
To: Linus Walleij <linus.walleij@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Maxime Coquelin <mcoquelin.stm32@xxxxxxxxx>,
Alexandre Torgue
<alexandre.torgue@xxxxxxxxxxx>,
Bartosz Golaszewski <brgl@xxxxxxxx>
CC: <linux-kernel@xxxxxxxxxxxxxxx>, <linux-gpio@xxxxxxxxxxxxxxx>,
<devicetree@xxxxxxxxxxxxxxx>,
<linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>,
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>,
=?utf-8?q?Cl=C3=A9ment_Le_Goffic?=
<clement.legoffic@xxxxxxxxxxx>
X-Mailer: b4 0.15-dev-6f78e
X-ClientProxiedBy: SHFCAS1NODE2.st.com (10.75.129.73) To SHFDAG1NODE2.st.com
(10.75.129.70)
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Add the hdp devicetree node for stm32mp13 SoC family
Signed-off-by: Clément Le Goffic <clement.legoffic@xxxxxxxxxxx>
---
arch/arm/boot/dts/st/stm32mp131.dtsi | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/arch/arm/boot/dts/st/stm32mp131.dtsi b/arch/arm/boot/dts/st/stm32mp131.dtsi
index 8512a6e46b33..9e3797ee1f7b 100644
--- a/arch/arm/boot/dts/st/stm32mp131.dtsi
+++ b/arch/arm/boot/dts/st/stm32mp131.dtsi
@@ -954,6 +954,13 @@ dts: thermal@50028000 {
status = "disabled";
};
+ hdp: pinctrl@5002a000 {
+ compatible = "st,stm32mp131-hdp";
+ reg = <0x5002a000 0x400>;
+ clocks = <&rcc HDP>;
+ status = "disabled";
+ };
+
mdma: dma-controller@58000000 {
compatible = "st,stm32h7-mdma";
reg = <0x58000000 0x1000>;
--
2.43.0
Return-Path: <linux-kernel+bounces-665539-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id A8B2041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:34:57 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id E36CB4E30C3
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:34:58 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 5261F28A1F3;
Wed, 28 May 2025 13:33:29 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="rQMBYRe9"
Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5F38428641B;
Wed, 28 May 2025 13:33:24 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.132.182.106
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439208; cv=none; b=SoBdKd1R33BwSOPM/L0WOBsgnqV8EJP2scGTxcq4xty6/wFT5K6d2slpC46kQCsgIhDl2gBbGZYDX9hQYyRkOU0lhmxy+SpOPbfvcKu5UH/aDafTI7HGL6HvTvLq7NdJ2UGK+OnnYh5checQhZiNoGJpuuCA5VSFRmme1YW08dk=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439208; c=relaxed/simple;
bh=4NzQEyGuuhQqMI+JX4hmBGOVfN3uMFbj3qdQV/5CUys=;
h=From:Subject:Date:Message-ID:MIME-Version:Content-Type:To:CC; b=Xo3bg3wsAuFxv9sdsW70/yBwgXkYJEBXgwarkzB1mX4if3YyNzKVuLNPg/rLu5RTfdlhKodW7KtU8l5LUWjwJEuPPR9YtVIcDSORkXKOh52U2IDb7fPNLZb/btyO7kSCjYGpqj9j3v5WkWuhe4dlisR7+RDfGWrQA3a33AlPIAY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=rQMBYRe9; arc=none smtp.client-ip=185.132.182.106
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com
Received: from pps.filterd (m0288072.ppops.net [127.0.0.1])
by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SDCReO030453;
Wed, 28 May 2025 15:33:05 +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h=
cc:content-transfer-encoding:content-type:date:from:message-id
:mime-version:subject:to; s=selector1; bh=3ZdAYLi+zIrBjJb1+1raCe
B2n0nRobcH9FY//yBTp6s=; b=rQMBYRe993nQCtuSSzJVisWB/h5StgWmgGoxkP
uUNNq3m5acVbtH0YnJtQcSTmtGqhsYjtK91/N7upA/Gx1A7HWX5EmgR4tWKIfIzu
luqu0HID2e7hn35j7jL4XCtwuRNOTGs8txL27/TeqjNv+1B4yf6VF4vTpNhvBqcB
vDTAHahsBvfDkA79lyWzp4U+5ckfmh1Nb/HCwwr4/t946eHsfAVlJjtD2c+fOTb1
HG45HR4JAVnjQBm5bwdo7DUQJwbPEKeK0J9rbytdTV/6y7VGiAr7xR3xvvpTxfCf
I2nFq8+F4pmJvuTOuuxUxkUZcyNfFekV2dY7Z9r6gEavHbVQ==
Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35])
by mx07-00178001.pphosted.com (PPS) with ESMTPS id 46u3hka5qf-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 15:33:05 +0200 (MEST)
Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20])
by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id 0F76B4006F;
Wed, 28 May 2025 15:31:49 +0200 (CEST)
Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70])
by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 455D56CBDEC;
Wed, 28 May 2025 15:31:00 +0200 (CEST)
Received: from localhost (10.48.86.185) by SHFDAG1NODE2.st.com (10.75.129.70)
with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 28 May
2025 15:30:59 +0200
From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= <clement.legoffic@xxxxxxxxxxx>
Subject: [PATCH v4 0/9] Introduce HDP support for STM32MP platforms
Date: Wed, 28 May 2025 15:30:53 +0200
Message-ID: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
X-B4-Tracking: v=1; b=H4sIAA4QN2gC/2XNSw6CMBSF4a2Yji0pt49QR+7DOCh9SAdQ0mKjI
ezdQmJUHJ6bfP+dUbLR24ROhxlFm33yYSiDHQ9Id2q4WexN2QgIcALAcGdGfB/TFK3qsQCw3Ki
aKelQIWO0zj+23OVadufTFOJzq+d6vb5D/DeUa0ywNIRJLTilRJ1dSKlKU6VDj9ZUhg/nQHYcC
ufUibZpuXO6+ef0m9Mdp4W3RmhVS8mE2H1fluUFdChY5CgBAAA=
X-Change-ID: 20250224-hdp-upstream-622e5da14a9f
To: Linus Walleij <linus.walleij@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Maxime Coquelin <mcoquelin.stm32@xxxxxxxxx>,
Alexandre Torgue
<alexandre.torgue@xxxxxxxxxxx>,
Bartosz Golaszewski <brgl@xxxxxxxx>
CC: <linux-kernel@xxxxxxxxxxxxxxx>, <linux-gpio@xxxxxxxxxxxxxxx>,
<devicetree@xxxxxxxxxxxxxxx>,
<linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>,
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>,
=?utf-8?q?Cl=C3=A9ment_Le_Goffic?=
<clement.legoffic@xxxxxxxxxxx>,
Krzysztof Kozlowski
<krzysztof.kozlowski@xxxxxxxxxx>
X-Mailer: b4 0.15-dev-6f78e
X-ClientProxiedBy: SHFCAS1NODE2.st.com (10.75.129.73) To SHFDAG1NODE2.st.com
(10.75.129.70)
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
This patch series introduces the Hardware Debug Port (HDP) support for
STM32MP platforms.
It includes updates to the mmio gpio driver, the addition of device tree
bindings, the HDP driver, and updates to the device tree files for
STM32MP13, STM32MP15,
and STM32MP25 SoCs.
The series also updates the MAINTAINERS file to include myself as the
maintainer for the STM32 HDP driver and adds the necessary
pinmux configurations for HDP pins on STM32MP157C-DK2 as example.
Signed-off-by: Clément Le Goffic <clement.legoffic@xxxxxxxxxxx>
---
Changes in v4:
- 's/Add/add/g' in MAINTAINERS commit message.
- Fix the (wrong) status update for the thermal node in stm32mp131.dtsi
file.
- Do not enable HDP by default during compile testing.
- Change the bindings file name:
's/st,stm32-pinctrl-hdp.yaml/st,stm32-hdp.yaml/g'
- Add Krzysztof Kozlowski's 'Reviewd-by' trailer on bindings.
- Link to v3: https://lore.kernel.org/r/20250523-hdp-upstream-v3-0-bd6ca199466a@xxxxxxxxxxx
Changes in v3:
- Use `bgpio_init()` function:
- Add add patch to create the `BGPIOF_NO_INPUT` flag needed for the
`bgpio_setup_direction()` used in `bgpio_init()`
- Remove `stm32_hdp_gpio_get` and `stm32_hdp_gpio_set`
- Use `static` pm ops
- Update bindings:
- add pattern instruction for pin values
- remove function's maxItems to use `function: true`
- fix the compatible in the exemples
- Link to v2: https://lore.kernel.org/r/20250520-hdp-upstream-v2-0-53f6b8b5ffc8@xxxxxxxxxxx
Changes in v2:
- Remove bindings header files with function name as #define
- Add match_data with function name for three compatible:
"st,stm32mp131-hdp", "st,stm32mp151-hdp" and "st,stm32mp251-hdp".
- Rework a bit the driver to use match_data.
- Remove the use of `dev_err_probe(` in the resume ops.
- Remove `MODULE_ALIAS(`.
- Remove the vertical bar in bindings description paragraph.
- Fix an error in the `pinctrl-0` parameter of the binding example, it
was refering a node that wasn't existing.
- Use uppercase pin names.
- Link to v1: https://lore.kernel.org/r/20250225-hdp-upstream-v1-0-9d049c65330a@xxxxxxxxxxx
---
Clément Le Goffic (9):
gpio: mmio: add BGPIOF_NO_INPUT flag for GPO gpiochip
dt-bindings: pinctrl: stm32: Introduce HDP
pinctrl: stm32: Introduce HDP driver
MAINTAINERS: add Clément Le Goffic as STM32 HDP maintainer
ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp13
ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp15
ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp25
ARM: dts: stm32: add alternate pinmux for HDP pin and add HDP pinctrl node
ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp157c-dk2 board
.../devicetree/bindings/pinctrl/st,stm32-hdp.yaml | 187 ++++++
MAINTAINERS | 6 +
arch/arm/boot/dts/st/stm32mp131.dtsi | 7 +
arch/arm/boot/dts/st/stm32mp15-pinctrl.dtsi | 25 +
arch/arm/boot/dts/st/stm32mp151.dtsi | 7 +
arch/arm/boot/dts/st/stm32mp157c-dk2.dts | 6 +
arch/arm64/boot/dts/st/stm32mp251.dtsi | 7 +
drivers/gpio/gpio-mmio.c | 11 +-
drivers/pinctrl/stm32/Kconfig | 14 +
drivers/pinctrl/stm32/Makefile | 1 +
drivers/pinctrl/stm32/pinctrl-stm32-hdp.c | 720 +++++++++++++++++++++
include/linux/gpio/driver.h | 1 +
12 files changed, 991 insertions(+), 1 deletion(-)
---
base-commit: a08b2b34239e63bd839078de98911d3653cdab83
change-id: 20250224-hdp-upstream-622e5da14a9f
Best regards,
--
Clément Le Goffic <clement.legoffic@xxxxxxxxxxx>
Return-Path: <linux-kernel+bounces-665540-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D17B041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:35:33 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 6E9503AC802
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:34:48 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id EAAE528A415;
Wed, 28 May 2025 13:33:29 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="Qe7xCjp9"
Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B9B4328689D;
Wed, 28 May 2025 13:33:26 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.132.182.106
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439208; cv=none; b=cVi+vyArDkG5Hz7BhjxvhA5Whw2JmG5AThjobWmweo9z9ndMwjI5s7SWhjDLLKFEyGdshMPLT3JpWz8as33aOP2dPmV8D6tl1w9MvQ27PJV/MZLMMzABxkoVPEYQL+VHJff76rAFmOVKXm4BfmvmfDUZ+pq9/yAO3kHesE6A2bs=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439208; c=relaxed/simple;
bh=VUL4h+my6kYZPm2C3NXaVh1zxCIDWJhVLsxhcN6DgCM=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References:
In-Reply-To:To:CC; b=YYnLlSvXFyjpyCwk7IPj6MpfkKotiCae+54MWs+mKcQYVN/SS0p7ku7O5b4geg/bs4AT+s+9n0Ys6OQrENTx/twJIRsUH6JQhT/RbZ8vfhkEJ2gnnM5shJe9PDcY8Rr0MZDPFrbchJRJOnKkn0M7s8uTZ6mYidstLI0Z54MOh6E=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=Qe7xCjp9; arc=none smtp.client-ip=185.132.182.106
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com
Received: from pps.filterd (m0241204.ppops.net [127.0.0.1])
by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SCWCLi023315;
Wed, 28 May 2025 15:33:05 +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h=
cc:content-transfer-encoding:content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to; s=selector1; bh=
6XATvg+AfewEfEryDUnSIUhx29yPgHEJAquL7ajt0nY=; b=Qe7xCjp9tu+nN0M1
nNwsrs+dqfdk4c1tCsd6fTErW26sktUDRlQzu90luO6f8YBUnHFnjomi5deH3iir
KJ8vTKrnGZMSMnqBwmJk6UwDtUbifNBhFfEWD3jln6iAPUhXTUPaObywhBweGMDv
8mmh8LFUXJLIISNIMtWXzb1dQQUGhI40QKd5kI+D9P2rmUMShhQc7DC+vOOwERUW
72YJAqd6ShVM0xbMXKwBZhR8cneh4AMMqx4PsXlRdx6/JiORy0CeHrvZi4iwmmhj
5CRwEBM2RPXtEvPJDWO9RTzZ7LW1kFcEfEaUnN38NMk0pMqnqbeptiaGSuOTOl8U
zECPhw==
Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35])
by mx07-00178001.pphosted.com (PPS) with ESMTPS id 46u5f2a2pf-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 15:33:05 +0200 (MEST)
Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20])
by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id 713C84006C;
Wed, 28 May 2025 15:31:48 +0200 (CEST)
Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70])
by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id BD70B6CCEF0;
Wed, 28 May 2025 15:31:01 +0200 (CEST)
Received: from localhost (10.48.86.185) by SHFDAG1NODE2.st.com (10.75.129.70)
with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 28 May
2025 15:31:01 +0200
From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= <clement.legoffic@xxxxxxxxxxx>
Date: Wed, 28 May 2025 15:30:55 +0200
Subject: [PATCH v4 2/9] dt-bindings: pinctrl: stm32: Introduce HDP
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Message-ID: <20250528-hdp-upstream-v4-2-7e9b3ad2036d@xxxxxxxxxxx>
References: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
In-Reply-To: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
To: Linus Walleij <linus.walleij@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Maxime Coquelin <mcoquelin.stm32@xxxxxxxxx>,
Alexandre Torgue
<alexandre.torgue@xxxxxxxxxxx>,
Bartosz Golaszewski <brgl@xxxxxxxx>
CC: <linux-kernel@xxxxxxxxxxxxxxx>, <linux-gpio@xxxxxxxxxxxxxxx>,
<devicetree@xxxxxxxxxxxxxxx>,
<linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>,
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>,
=?utf-8?q?Cl=C3=A9ment_Le_Goffic?=
<clement.legoffic@xxxxxxxxxxx>,
Krzysztof Kozlowski
<krzysztof.kozlowski@xxxxxxxxxx>
X-Mailer: b4 0.15-dev-6f78e
X-ClientProxiedBy: SHFCAS1NODE2.st.com (10.75.129.73) To SHFDAG1NODE2.st.com
(10.75.129.70)
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
'HDP' stands for Hardware Debug Port, it is an hardware block in
STMicrolectronics' MPUs that let the user decide which internal SoC's
signal to observe.
It provides 8 ports and for each port there is up to 16 different
signals that can be output.
Signals are different for each MPU.
Signed-off-by: Clément Le Goffic <clement.legoffic@xxxxxxxxxxx>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>
---
.../devicetree/bindings/pinctrl/st,stm32-hdp.yaml | 187 +++++++++++++++++++++
1 file changed, 187 insertions(+)
diff --git a/Documentation/devicetree/bindings/pinctrl/st,stm32-hdp.yaml b/Documentation/devicetree/bindings/pinctrl/st,stm32-hdp.yaml
new file mode 100644
index 000000000000..416b41275714
--- /dev/null
+++ b/Documentation/devicetree/bindings/pinctrl/st,stm32-hdp.yaml
@@ -0,0 +1,187 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+# Copyright (C) STMicroelectronics 2025.
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/pinctrl/st,stm32-pinctrl-hdp.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: STM32 Hardware Debug Port Mux/Config
+
+maintainers:
+ - Clément LE GOFFIC <clement.legoffic@xxxxxxxxxxx>
+
+description:
+ STMicroelectronics's STM32 MPUs integrate a Hardware Debug Port (HDP).
+ It allows to output internal signals on SoC's GPIO.
+
+properties:
+ compatible:
+ enum:
+ - st,stm32mp131-hdp
+ - st,stm32mp151-hdp
+ - st,stm32mp251-hdp
+
+ reg:
+ maxItems: 1
+
+ clocks:
+ maxItems: 1
+
+patternProperties:
+ "^hdp[0-7]-pins$":
+ type: object
+ $ref: pinmux-node.yaml#
+ additionalProperties: false
+
+ properties:
+ pins:
+ pattern: '^HDP[0-7]$'
+
+ function: true
+
+ required:
+ - function
+ - pins
+
+allOf:
+ - $ref: pinctrl.yaml#
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: st,stm32mp131-hdp
+ then:
+ patternProperties:
+ "^hdp[0-7]-pins$":
+ properties:
+ function:
+ enum: [ pwr_pwrwake_sys, pwr_stop_forbidden, pwr_stdby_wakeup, pwr_encomp_vddcore,
+ bsec_out_sec_niden, aiec_sys_wakeup, none, ddrctrl_lp_req,
+ pwr_ddr_ret_enable_n, dts_clk_ptat, sram3ctrl_tamp_erase_act, gpoval0,
+ pwr_sel_vth_vddcpu, pwr_mpu_ram_lowspeed, ca7_naxierrirq, pwr_okin_mr,
+ bsec_out_sec_dbgen, aiec_c1_wakeup, rcc_pwrds_mpu, ddrctrl_dfi_ctrlupd_req,
+ ddrctrl_cactive_ddrc_asr, sram3ctrl_hw_erase_act, nic400_s0_bready, gpoval1,
+ pwr_pwrwake_mpu, pwr_mpu_clock_disable_ack, ca7_ndbgreset_i,
+ bsec_in_rstcore_n, bsec_out_sec_bsc_dis, ddrctrl_dfi_init_complete,
+ ddrctrl_perf_op_is_refresh, ddrctrl_gskp_dfi_lp_req, sram3ctrl_sw_erase_act,
+ nic400_s0_bvalid, gpoval2, pwr_sel_vth_vddcore, pwr_mpu_clock_disable_req,
+ ca7_npmuirq0, ca7_nfiqout0, bsec_out_sec_dftlock, bsec_out_sec_jtag_dis,
+ rcc_pwrds_sys, sram3ctrl_tamp_erase_req, ddrctrl_stat_ddrc_reg_selfref_type0,
+ dts_valobus1_0, dts_valobus2_0, tamp_potential_tamp_erfcfg, nic400_s0_wready,
+ nic400_s0_rready, gpoval3, pwr_stop2_active, ca7_nl2reset_i,
+ ca7_npreset_varm_i, bsec_out_sec_dften, bsec_out_sec_dbgswenable,
+ eth1_out_pmt_intr_o, eth2_out_pmt_intr_o, ddrctrl_stat_ddrc_reg_selfref_type1,
+ ddrctrl_cactive_0, dts_valobus1_1, dts_valobus2_1, tamp_nreset_sram_ercfg,
+ nic400_s0_wlast, nic400_s0_rlast, gpoval4, ca7_standbywfil2,
+ pwr_vth_vddcore_ack, ca7_ncorereset_i, ca7_nirqout0, bsec_in_pwrok,
+ bsec_out_sec_deviceen, eth1_out_lpi_intr_o, eth2_out_lpi_intr_o,
+ ddrctrl_cactive_ddrc, ddrctrl_wr_credit_cnt, dts_valobus1_2, dts_valobus2_2,
+ pka_pka_itamp_out, nic400_s0_wvalid, nic400_s0_rvalid, gpoval5,
+ ca7_standbywfe0, pwr_vth_vddcpu_ack, ca7_evento, bsec_in_tamper_det,
+ bsec_out_sec_spniden, eth1_out_mac_speed_o1, eth2_out_mac_speed_o1,
+ ddrctrl_csysack_ddrc, ddrctrl_lpr_credit_cnt, dts_valobus1_3, dts_valobus2_3,
+ saes_tamper_out, nic400_s0_awready, nic400_s0_arready, gpoval6,
+ ca7_standbywfi0, pwr_rcc_vcpu_rdy, ca7_eventi, ca7_dbgack0, bsec_out_fuse_ok,
+ bsec_out_sec_spiden, eth1_out_mac_speed_o0, eth2_out_mac_speed_o0,
+ ddrctrl_csysreq_ddrc, ddrctrl_hpr_credit_cnt, dts_valobus1_4, dts_valobus2_4,
+ rng_tamper_out, nic400_s0_awavalid, nic400_s0_aravalid, gpoval7 ]
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: st,stm32mp151-hdp
+ then:
+ patternProperties:
+ "^hdp[0-7]-pins$":
+ properties:
+ function:
+ enum: [ pwr_pwrwake_sys, cm4_sleepdeep, pwr_stdby_wkup, pwr_encomp_vddcore,
+ bsec_out_sec_niden, none, rcc_cm4_sleepdeep, gpu_dbg7, ddrctrl_lp_req,
+ pwr_ddr_ret_enable_n, dts_clk_ptat, gpoval0, pwr_pwrwake_mcu, cm4_halted,
+ ca7_naxierrirq, pwr_okin_mr, bsec_out_sec_dbgen, exti_sys_wakeup,
+ rcc_pwrds_mpu, gpu_dbg6, ddrctrl_dfi_ctrlupd_req, ddrctrl_cactive_ddrc_asr,
+ gpoval1, pwr_pwrwake_mpu, cm4_rxev, ca7_npmuirq1, ca7_nfiqout1,
+ bsec_in_rstcore_n, exti_c2_wakeup, rcc_pwrds_mcu, gpu_dbg5,
+ ddrctrl_dfi_init_complete, ddrctrl_perf_op_is_refresh,
+ ddrctrl_gskp_dfi_lp_req, gpoval2, pwr_sel_vth_vddcore, cm4_txev, ca7_npmuirq0,
+ ca7_nfiqout0, bsec_out_sec_dftlock, exti_c1_wakeup, rcc_pwrds_sys, gpu_dbg4,
+ ddrctrl_stat_ddrc_reg_selfref_type0, ddrctrl_cactive_1, dts_valobus1_0,
+ dts_valobus2_0, gpoval3, pwr_mpu_pdds_not_cstbydis, cm4_sleeping, ca7_nreset1,
+ ca7_nirqout1, bsec_out_sec_dften, bsec_out_sec_dbgswenable,
+ eth_out_pmt_intr_o, gpu_dbg3, ddrctrl_stat_ddrc_reg_selfref_type1,
+ ddrctrl_cactive_0, dts_valobus1_1, dts_valobus2_1, gpoval4, ca7_standbywfil2,
+ pwr_vth_vddcore_ack, ca7_nreset0, ca7_nirqout0, bsec_in_pwrok,
+ bsec_out_sec_deviceen, eth_out_lpi_intr_o, gpu_dbg2, ddrctrl_cactive_ddrc,
+ ddrctrl_wr_credit_cnt, dts_valobus1_2, dts_valobus2_2, gpoval5,
+ ca7_standbywfi1, ca7_standbywfe1, ca7_evento, ca7_dbgack1,
+ bsec_out_sec_spniden, eth_out_mac_speed_o1, gpu_dbg1, ddrctrl_csysack_ddrc,
+ ddrctrl_lpr_credit_cnt, dts_valobus1_3, dts_valobus2_3, gpoval6,
+ ca7_standbywfi0, ca7_standbywfe0, ca7_dbgack0, bsec_out_fuse_ok,
+ bsec_out_sec_spiden, eth_out_mac_speed_o0, gpu_dbg0, ddrctrl_csysreq_ddrc,
+ ddrctrl_hpr_credit_cnt, dts_valobus1_4, dts_valobus2_4, gpoval7 ]
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: st,stm32mp251-hdp
+ then:
+ patternProperties:
+ "^hdp[0-7]-pins$":
+ properties:
+ function:
+ enum: [ pwr_pwrwake_sys, cpu2_sleep_deep, bsec_out_tst_sdr_unlock_or_disable_scan,
+ bsec_out_nidenm, bsec_out_nidena, cpu2_state_0, rcc_pwrds_sys, gpu_dbg7,
+ ddrss_csysreq_ddrc, ddrss_dfi_phyupd_req, cpu3_sleep_deep,
+ d2_gbl_per_clk_bus_req, pcie_usb_cxpl_debug_info_ei_0,
+ pcie_usb_cxpl_debug_info_ei_8, d3_state_0, gpoval0, pwr_pwrwake_cpu2,
+ cpu2_halted, cpu2_state_1, bsec_out_dbgenm, bsec_out_dbgena, exti1_sys_wakeup,
+ rcc_pwrds_cpu2, gpu_dbg6, ddrss_csysack_ddrc, ddrss_dfi_phymstr_req,
+ cpu3_halted, d2_gbl_per_dma_req, pcie_usb_cxpl_debug_info_ei_1,
+ pcie_usb_cxpl_debug_info_ei_9, d3_state_1, gpoval1, pwr_pwrwake_cpu1,
+ cpu2_rxev, cpu1_npumirq1, cpu1_nfiqout1, bsec_out_shdbgen, exti1_cpu2_wakeup,
+ rcc_pwrds_cpu1, gpu_dbg5, ddrss_cactive_ddrc, ddrss_dfi_lp_req, cpu3_rxev,
+ hpdma1_clk_bus_req, pcie_usb_cxpl_debug_info_ei_2,
+ pcie_usb_cxpl_debug_info_ei_10, d3_state_2, gpoval2, pwr_sel_vth_vddcpu,
+ cpu2_txev, cpu1_npumirq0, cpu1_nfiqout0, bsec_out_ddbgen, exti1_cpu1_wakeup,
+ cpu3_state_0, gpu_dbg4, ddrss_mcdcg_en, ddrss_dfi_freq_0, cpu3_txev,
+ hpdma2_clk_bus_req, pcie_usb_cxpl_debug_info_ei_3,
+ pcie_usb_cxpl_debug_info_ei_11, d1_state_0, gpoval3, pwr_sel_vth_vddcore,
+ cpu2_sleeping, cpu1_evento, cpu1_nirqout1, bsec_out_spnidena, exti2_d3_wakeup,
+ eth1_out_pmt_intr_o, gpu_dbg3, ddrss_dphycg_en, ddrss_obsp0, cpu3_sleeping,
+ hpdma3_clk_bus_req, pcie_usb_cxpl_debug_info_ei_4,
+ pcie_usb_cxpl_debug_info_ei_12, d1_state_1, gpoval4, cpu1_standby_wfil2,
+ none, cpu1_nirqout0, bsec_out_spidena, exti2_cpu3_wakeup, eth1_out_lpi_intr_o,
+ gpu_dbg2, ddrctrl_dfi_init_start, ddrss_obsp1, cpu3_state_1,
+ d3_gbl_per_clk_bus_req, pcie_usb_cxpl_debug_info_ei_5,
+ pcie_usb_cxpl_debug_info_ei_13, d1_state_2, gpoval5, cpu1_standby_wfi1,
+ cpu1_standby_wfe1, cpu1_halted1, cpu1_naxierrirq, bsec_out_spnidenm,
+ exti2_cpu2_wakeup, eth2_out_pmt_intr_o, gpu_dbg1, ddrss_dfi_init_complete,
+ ddrss_obsp2, d2_state_0, d3_gbl_per_dma_req, pcie_usb_cxpl_debug_info_ei_6,
+ pcie_usb_cxpl_debug_info_ei_14, cpu1_state_0, gpoval6, cpu1_standby_wfi0,
+ cpu1_standby_wfe0, cpu1_halted0, bsec_out_spidenm, exti2_cpu1__wakeup,
+ eth2_out_lpi_intr_o, gpu_dbg0, ddrss_dfi_ctrlupd_req, ddrss_obsp3, d2_state_1,
+ lpdma1_clk_bus_req, pcie_usb_cxpl_debug_info_ei_7,
+ pcie_usb_cxpl_debug_info_ei_15, cpu1_state_1, gpoval7 ]
+
+required:
+ - compatible
+ - reg
+ - clocks
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/clock/stm32mp1-clks.h>
+
+ pinctrl@54090000 {
+ compatible = "st,stm32mp151-hdp";
+ reg = <0x54090000 0x400>;
+ clocks = <&rcc HDP>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&hdp2_gpo>;
+ hdp2_gpo: hdp2-pins {
+ function = "gpoval2";
+ pins = "HDP2";
+ };
+ };
--
2.43.0
Return-Path: <linux-kernel+bounces-665541-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id EF42741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:35:40 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id F26DBA2453B
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:34:54 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id A2BA828A707;
Wed, 28 May 2025 13:33:30 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="aQ7ZeDz+"
Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B9ADA286892;
Wed, 28 May 2025 13:33:26 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.132.182.106
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439209; cv=none; b=WHMa3KtQu+7e6NFTwCnEte1FDuAo4yCW/O2P8UN2fdDhdHIWC2RIdn6qRD8Z/+l1hGe56z+/oG4zi/SbtAviLJKCPQ4vdET+eQ2QUa3vkg97lpXtCTsLgy7VoxYyXiyr2tY5JfNCH9W2T4/OvIUZ+UyIfz5gbTfdKFK9p96sIsE=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439209; c=relaxed/simple;
bh=KZ6JT0P85iM5mwDcDBn+YHoeZudn6dLoQuicqNLki3M=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References:
In-Reply-To:To:CC; b=KeJ+IgpcIjKLNWtb4ybxRIlaXyiqXHSFrmKv3O4hvfTiMIi+cRSgF2V3bw1oSz73RS/UIr/zjp7T4vkYvpyqxEQlaV9xoE98BckzydOPhS5f4SdGgBnEdq4wHq9UaS4N+teQKyUcEkxHY5XO95D7Z/8yQYIZ1B/WgyeI9UvYT0U=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=aQ7ZeDz+; arc=none smtp.client-ip=185.132.182.106
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com
Received: from pps.filterd (m0369458.ppops.net [127.0.0.1])
by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SD3soZ017013;
Wed, 28 May 2025 15:33:05 +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h=
cc:content-transfer-encoding:content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to; s=selector1; bh=
QzIsvRlXee6/tWNO5sJSQeHtyCdD/P2tXODJC9NdfjI=; b=aQ7ZeDz+ZwRSU4fk
wN+8canX+UZeqgAobTOgIchxJ5+i+6t4hFigZbub2rbCrGloM/O65rm6nbAX2u/S
KJJp/Sn2eb7F7I1o7qXvh2KxJZJBuWlAntNE4ow7WafLRBuVqJNhAkQWNy9sHcpk
rnGsev/D1JqdUGJqSQ+fmP1ICVXC+jZzUmTqFwgwWI75sUkUOj7wrKFq0UO/E4iJ
r6PTIPzKW5jCcBhqt9B0WS+seBDEL/DJeKq334QoDiCH0ZxS4SXap9BUH1q5Mu27
oC17F0Lajdg6fKkRkC48sWP5vKMbZoJ+b+MWAPmWpVQLz7gb1BhXoBvEX5PpKvGZ
ihPCIQ==
Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35])
by mx07-00178001.pphosted.com (PPS) with ESMTPS id 46uqp4quvc-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 15:33:05 +0200 (MEST)
Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20])
by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id 3C4C14006A;
Wed, 28 May 2025 15:31:48 +0200 (CEST)
Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70])
by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 89A2C6CCEF3;
Wed, 28 May 2025 15:31:02 +0200 (CEST)
Received: from localhost (10.48.86.185) by SHFDAG1NODE2.st.com (10.75.129.70)
with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 28 May
2025 15:31:02 +0200
From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= <clement.legoffic@xxxxxxxxxxx>
Date: Wed, 28 May 2025 15:30:56 +0200
Subject: [PATCH v4 3/9] pinctrl: stm32: Introduce HDP driver
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Message-ID: <20250528-hdp-upstream-v4-3-7e9b3ad2036d@xxxxxxxxxxx>
References: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
In-Reply-To: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
To: Linus Walleij <linus.walleij@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Maxime Coquelin <mcoquelin.stm32@xxxxxxxxx>,
Alexandre Torgue
<alexandre.torgue@xxxxxxxxxxx>,
Bartosz Golaszewski <brgl@xxxxxxxx>
CC: <linux-kernel@xxxxxxxxxxxxxxx>, <linux-gpio@xxxxxxxxxxxxxxx>,
<devicetree@xxxxxxxxxxxxxxx>,
<linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>,
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>,
=?utf-8?q?Cl=C3=A9ment_Le_Goffic?=
<clement.legoffic@xxxxxxxxxxx>
X-Mailer: b4 0.15-dev-6f78e
X-ClientProxiedBy: SHFCAS1NODE2.st.com (10.75.129.73) To SHFDAG1NODE2.st.com
(10.75.129.70)
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
This patch introduce the driver for the Hardware Debug Port available on
STM32MP platforms. The HDP allows the observation of internal SoC
signals by using multiplexers. Each HDP port can provide up to 16
internal signals (one of them can be software controlled as a GPO).
Signed-off-by: Clément Le Goffic <clement.legoffic@xxxxxxxxxxx>
---
drivers/pinctrl/stm32/Kconfig | 14 +
drivers/pinctrl/stm32/Makefile | 1 +
drivers/pinctrl/stm32/pinctrl-stm32-hdp.c | 720 ++++++++++++++++++++++++++++++
3 files changed, 735 insertions(+)
diff --git a/drivers/pinctrl/stm32/Kconfig b/drivers/pinctrl/stm32/Kconfig
index 2656d3d3ae40..3f5131206335 100644
--- a/drivers/pinctrl/stm32/Kconfig
+++ b/drivers/pinctrl/stm32/Kconfig
@@ -57,4 +57,18 @@ config PINCTRL_STM32MP257
depends on OF && HAS_IOMEM
default MACH_STM32MP25
select PINCTRL_STM32
+
+config PINCTRL_STM32_HDP
+ tristate "STMicroelectronics STM32 Hardware Debug Port (HDP) pin control"
+ depends on OF && HAS_IOMEM
+ default ARCH_STM32 && !ARM_SINGLE_ARMV7M
+ select PINMUX
+ select GENERIC_PINCONF
+ select GPIOLIB
+ help
+ The Hardware Debug Port allows the observation of internal signals.
+ It uses configurable multiplexer to route signals in a dedicated observation register.
+ This driver also permits the observation of signals on external SoC pins.
+ It permits the observation of up to 16 signals per HDP line.
+
endif
diff --git a/drivers/pinctrl/stm32/Makefile b/drivers/pinctrl/stm32/Makefile
index 7b17464d8de1..98a1bbc7e16c 100644
--- a/drivers/pinctrl/stm32/Makefile
+++ b/drivers/pinctrl/stm32/Makefile
@@ -11,3 +11,4 @@ obj-$(CONFIG_PINCTRL_STM32H743) += pinctrl-stm32h743.o
obj-$(CONFIG_PINCTRL_STM32MP135) += pinctrl-stm32mp135.o
obj-$(CONFIG_PINCTRL_STM32MP157) += pinctrl-stm32mp157.o
obj-$(CONFIG_PINCTRL_STM32MP257) += pinctrl-stm32mp257.o
+obj-$(CONFIG_PINCTRL_STM32_HDP) += pinctrl-stm32-hdp.o
diff --git a/drivers/pinctrl/stm32/pinctrl-stm32-hdp.c b/drivers/pinctrl/stm32/pinctrl-stm32-hdp.c
new file mode 100644
index 000000000000..e91442eb566b
--- /dev/null
+++ b/drivers/pinctrl/stm32/pinctrl-stm32-hdp.c
@@ -0,0 +1,720 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (C) STMicroelectronics 2025 - All Rights Reserved
+ * Author: Clément Le Goffic <clement.legoffic@xxxxxxxxxxx> for STMicroelectronics.
+ */
+#include <linux/bits.h>
+#include <linux/clk.h>
+#include <linux/gpio/driver.h>
+#include <linux/io.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
+#include <linux/pinctrl/consumer.h>
+#include <linux/pinctrl/pinconf-generic.h>
+#include <linux/pinctrl/pinctrl.h>
+#include <linux/pinctrl/pinmux.h>
+#include <linux/platform_device.h>
+#include <linux/pm.h>
+
+#include "../core.h"
+
+#define DRIVER_NAME "stm32_hdp"
+#define HDP_CTRL_ENABLE 1
+#define HDP_CTRL_DISABLE 0
+
+#define HDP_CTRL 0x000
+#define HDP_MUX 0x004
+#define HDP_VAL 0x010
+#define HDP_GPOSET 0x014
+#define HDP_GPOCLR 0x018
+#define HDP_GPOVAL 0x01c
+#define HDP_VERR 0x3f4
+#define HDP_IPIDR 0x3f8
+#define HDP_SIDR 0x3fc
+
+#define HDP_MUX_SHIFT(n) ((n) * 4)
+#define HDP_MUX_MASK(n) (GENMASK(3, 0) << HDP_MUX_SHIFT(n))
+#define HDP_MUX_GPOVAL(n) (0xf << HDP_MUX_SHIFT(n))
+
+#define HDP_PIN 8
+#define HDP_FUNC 16
+#define HDP_FUNC_TOTAL (HDP_PIN * HDP_FUNC)
+
+struct stm32_hdp {
+ struct device *dev;
+ void __iomem *base;
+ struct clk *clk;
+ struct pinctrl_dev *pctl_dev;
+ struct gpio_chip gpio_chip;
+ u32 mux_conf;
+ u32 gposet_conf;
+ const char * const *func_name;
+};
+
+static const struct pinctrl_pin_desc stm32_hdp_pins[] = {
+ PINCTRL_PIN(0, "HDP0"),
+ PINCTRL_PIN(1, "HDP1"),
+ PINCTRL_PIN(2, "HDP2"),
+ PINCTRL_PIN(3, "HDP3"),
+ PINCTRL_PIN(4, "HDP4"),
+ PINCTRL_PIN(5, "HDP5"),
+ PINCTRL_PIN(6, "HDP6"),
+ PINCTRL_PIN(7, "HDP7"),
+};
+
+static const char * const func_name_mp13[] = {
+ //HDP0 functions:
+ "pwr_pwrwake_sys",
+ "pwr_stop_forbidden",
+ "pwr_stdby_wakeup",
+ "pwr_encomp_vddcore",
+ "bsec_out_sec_niden",
+ "aiec_sys_wakeup",
+ "none",
+ "none",
+ "ddrctrl_lp_req",
+ "pwr_ddr_ret_enable_n",
+ "dts_clk_ptat",
+ "none",
+ "sram3ctrl_tamp_erase_act",
+ "none",
+ "none",
+ "gpoval0",
+ //HDP1 functions:
+ "pwr_sel_vth_vddcpu",
+ "pwr_mpu_ram_lowspeed",
+ "ca7_naxierrirq",
+ "pwr_okin_mr",
+ "bsec_out_sec_dbgen",
+ "aiec_c1_wakeup",
+ "rcc_pwrds_mpu",
+ "none",
+ "ddrctrl_dfi_ctrlupd_req",
+ "ddrctrl_cactive_ddrc_asr",
+ "none",
+ "none",
+ "sram3ctrl_hw_erase_act",
+ "nic400_s0_bready",
+ "none",
+ "gpoval1",
+ //HDP2 functions:
+ "pwr_pwrwake_mpu",
+ "pwr_mpu_clock_disable_ack",
+ "ca7_ndbgreset_i",
+ "none",
+ "bsec_in_rstcore_n",
+ "bsec_out_sec_bsc_dis",
+ "none",
+ "none",
+ "ddrctrl_dfi_init_complete",
+ "ddrctrl_perf_op_is_refresh",
+ "ddrctrl_gskp_dfi_lp_req",
+ "none",
+ "sram3ctrl_sw_erase_act",
+ "nic400_s0_bvalid",
+ "none",
+ "gpoval2",
+ //HDP3 functions:
+ "pwr_sel_vth_vddcore",
+ "pwr_mpu_clock_disable_req",
+ "ca7_npmuirq0",
+ "ca7_nfiqout0",
+ "bsec_out_sec_dftlock",
+ "bsec_out_sec_jtag_dis",
+ "rcc_pwrds_sys",
+ "sram3ctrl_tamp_erase_req",
+ "ddrctrl_stat_ddrc_reg_selfref_type0",
+ "none",
+ "dts_valobus1_0",
+ "dts_valobus2_0",
+ "tamp_potential_tamp_erfcfg",
+ "nic400_s0_wready",
+ "nic400_s0_rready",
+ "gpoval3",
+ //HDP4 functions:
+ "none",
+ "pwr_stop2_active",
+ "ca7_nl2reset_i",
+ "ca7_npreset_varm_i",
+ "bsec_out_sec_dften",
+ "bsec_out_sec_dbgswenable",
+ "eth1_out_pmt_intr_o",
+ "eth2_out_pmt_intr_o",
+ "ddrctrl_stat_ddrc_reg_selfref_type1",
+ "ddrctrl_cactive_0",
+ "dts_valobus1_1",
+ "dts_valobus2_1",
+ "tamp_nreset_sram_ercfg",
+ "nic400_s0_wlast",
+ "nic400_s0_rlast",
+ "gpoval4",
+ //HDP5 functions:
+ "ca7_standbywfil2",
+ "pwr_vth_vddcore_ack",
+ "ca7_ncorereset_i",
+ "ca7_nirqout0",
+ "bsec_in_pwrok",
+ "bsec_out_sec_deviceen",
+ "eth1_out_lpi_intr_o",
+ "eth2_out_lpi_intr_o",
+ "ddrctrl_cactive_ddrc",
+ "ddrctrl_wr_credit_cnt",
+ "dts_valobus1_2",
+ "dts_valobus2_2",
+ "pka_pka_itamp_out",
+ "nic400_s0_wvalid",
+ "nic400_s0_rvalid",
+ "gpoval5",
+ //HDP6 functions:
+ "ca7_standbywfe0",
+ "pwr_vth_vddcpu_ack",
+ "ca7_evento",
+ "none",
+ "bsec_in_tamper_det",
+ "bsec_out_sec_spniden",
+ "eth1_out_mac_speed_o1",
+ "eth2_out_mac_speed_o1",
+ "ddrctrl_csysack_ddrc",
+ "ddrctrl_lpr_credit_cnt",
+ "dts_valobus1_3",
+ "dts_valobus2_3",
+ "saes_tamper_out",
+ "nic400_s0_awready",
+ "nic400_s0_arready",
+ "gpoval6",
+ //HDP7 functions:
+ "ca7_standbywfi0",
+ "pwr_rcc_vcpu_rdy",
+ "ca7_eventi",
+ "ca7_dbgack0",
+ "bsec_out_fuse_ok",
+ "bsec_out_sec_spiden",
+ "eth1_out_mac_speed_o0",
+ "eth2_out_mac_speed_o0",
+ "ddrctrl_csysreq_ddrc",
+ "ddrctrl_hpr_credit_cnt",
+ "dts_valobus1_4",
+ "dts_valobus2_4",
+ "rng_tamper_out",
+ "nic400_s0_awavalid",
+ "nic400_s0_aravalid",
+ "gpoval7",
+};
+
+static const char * const func_name_mp15[] = {
+ //HDP0 functions:
+ "pwr_pwrwake_sys",
+ "cm4_sleepdeep",
+ "pwr_stdby_wkup",
+ "pwr_encomp_vddcore",
+ "bsec_out_sec_niden",
+ "none",
+ "rcc_cm4_sleepdeep",
+ "gpu_dbg7",
+ "ddrctrl_lp_req",
+ "pwr_ddr_ret_enable_n",
+ "dts_clk_ptat",
+ "none",
+ "none",
+ "none",
+ "none",
+ "gpoval0",
+ //HDP1 functions:
+ "pwr_pwrwake_mcu",
+ "cm4_halted",
+ "ca7_naxierrirq",
+ "pwr_okin_mr",
+ "bsec_out_sec_dbgen",
+ "exti_sys_wakeup",
+ "rcc_pwrds_mpu",
+ "gpu_dbg6",
+ "ddrctrl_dfi_ctrlupd_req",
+ "ddrctrl_cactive_ddrc_asr",
+ "none",
+ "none",
+ "none",
+ "none",
+ "none",
+ "gpoval1",
+ //HDP2 functions:
+ "pwr_pwrwake_mpu",
+ "cm4_rxev",
+ "ca7_npmuirq1",
+ "ca7_nfiqout1",
+ "bsec_in_rstcore_n",
+ "exti_c2_wakeup",
+ "rcc_pwrds_mcu",
+ "gpu_dbg5",
+ "ddrctrl_dfi_init_complete",
+ "ddrctrl_perf_op_is_refresh",
+ "ddrctrl_gskp_dfi_lp_req",
+ "none",
+ "none",
+ "none",
+ "none",
+ "gpoval2",
+ //HDP3 functions:
+ "pwr_sel_vth_vddcore",
+ "cm4_txev",
+ "ca7_npmuirq0",
+ "ca7_nfiqout0",
+ "bsec_out_sec_dftlock",
+ "exti_c1_wakeup",
+ "rcc_pwrds_sys",
+ "gpu_dbg4",
+ "ddrctrl_stat_ddrc_reg_selfref_type0",
+ "ddrctrl_cactive_1",
+ "dts_valobus1_0",
+ "dts_valobus2_0",
+ "none",
+ "none",
+ "none",
+ "gpoval3",
+ //HDP4 functions:
+ "pwr_mpu_pdds_not_cstbydis",
+ "cm4_sleeping",
+ "ca7_nreset1",
+ "ca7_nirqout1",
+ "bsec_out_sec_dften",
+ "bsec_out_sec_dbgswenable",
+ "eth_out_pmt_intr_o",
+ "gpu_dbg3",
+ "ddrctrl_stat_ddrc_reg_selfref_type1",
+ "ddrctrl_cactive_0",
+ "dts_valobus1_1",
+ "dts_valobus2_1",
+ "none",
+ "none",
+ "none",
+ "gpoval4",
+ //HDP5 functions:
+ "ca7_standbywfil2",
+ "pwr_vth_vddcore_ack",
+ "ca7_nreset0",
+ "ca7_nirqout0",
+ "bsec_in_pwrok",
+ "bsec_out_sec_deviceen",
+ "eth_out_lpi_intr_o",
+ "gpu_dbg2",
+ "ddrctrl_cactive_ddrc",
+ "ddrctrl_wr_credit_cnt",
+ "dts_valobus1_2",
+ "dts_valobus2_2",
+ "none",
+ "none",
+ "none",
+ "gpoval5",
+ //HDP6 functions:
+ "ca7_standbywfi1",
+ "ca7_standbywfe1",
+ "ca7_evento",
+ "ca7_dbgack1",
+ "none",
+ "bsec_out_sec_spniden",
+ "eth_out_mac_speed_o1",
+ "gpu_dbg1",
+ "ddrctrl_csysack_ddrc",
+ "ddrctrl_lpr_credit_cnt",
+ "dts_valobus1_3",
+ "dts_valobus2_3",
+ "none",
+ "none",
+ "none",
+ "gpoval6",
+ //HDP7 functions:
+ "ca7_standbywfi0",
+ "ca7_standbywfe0",
+ "none",
+ "ca7_dbgack0",
+ "bsec_out_fuse_ok",
+ "bsec_out_sec_spiden",
+ "eth_out_mac_speed_o0",
+ "gpu_dbg0",
+ "ddrctrl_csysreq_ddrc",
+ "ddrctrl_hpr_credit_cnt",
+ "dts_valobus1_4",
+ "dts_valobus2_4",
+ "none",
+ "none",
+ "none",
+ "gpoval7"
+};
+
+static const char * const func_name_mp25[] = {
+ //HDP0 functions:
+ "pwr_pwrwake_sys",
+ "cpu2_sleep_deep",
+ "bsec_out_tst_sdr_unlock_or_disable_scan",
+ "bsec_out_nidenm",
+ "bsec_out_nidena",
+ "cpu2_state_0",
+ "rcc_pwrds_sys",
+ "gpu_dbg7",
+ "ddrss_csysreq_ddrc",
+ "ddrss_dfi_phyupd_req",
+ "cpu3_sleep_deep",
+ "d2_gbl_per_clk_bus_req",
+ "pcie_usb_cxpl_debug_info_ei_0",
+ "pcie_usb_cxpl_debug_info_ei_8",
+ "d3_state_0",
+ "gpoval0",
+ //HDP1 functions:
+ "pwr_pwrwake_cpu2",
+ "cpu2_halted",
+ "cpu2_state_1",
+ "bsec_out_dbgenm",
+ "bsec_out_dbgena",
+ "exti1_sys_wakeup",
+ "rcc_pwrds_cpu2",
+ "gpu_dbg6",
+ "ddrss_csysack_ddrc",
+ "ddrss_dfi_phymstr_req",
+ "cpu3_halted",
+ "d2_gbl_per_dma_req",
+ "pcie_usb_cxpl_debug_info_ei_1",
+ "pcie_usb_cxpl_debug_info_ei_9",
+ "d3_state_1",
+ "gpoval1",
+ //HDP2 functions:
+ "pwr_pwrwake_cpu1",
+ "cpu2_rxev",
+ "cpu1_npumirq1",
+ "cpu1_nfiqout1",
+ "bsec_out_shdbgen",
+ "exti1_cpu2_wakeup",
+ "rcc_pwrds_cpu1",
+ "gpu_dbg5",
+ "ddrss_cactive_ddrc",
+ "ddrss_dfi_lp_req",
+ "cpu3_rxev",
+ "hpdma1_clk_bus_req",
+ "pcie_usb_cxpl_debug_info_ei_2",
+ "pcie_usb_cxpl_debug_info_ei_10",
+ "d3_state_2",
+ "gpoval2",
+ //HDP3 functions:
+ "pwr_sel_vth_vddcpu",
+ "cpu2_txev",
+ "cpu1_npumirq0",
+ "cpu1_nfiqout0",
+ "bsec_out_ddbgen",
+ "exti1_cpu1_wakeup",
+ "cpu3_state_0",
+ "gpu_dbg4",
+ "ddrss_mcdcg_en",
+ "ddrss_dfi_freq_0",
+ "cpu3_txev",
+ "hpdma2_clk_bus_req",
+ "pcie_usb_cxpl_debug_info_ei_3",
+ "pcie_usb_cxpl_debug_info_ei_11",
+ "d1_state_0",
+ "gpoval3",
+ //HDP4 functions:
+ "pwr_sel_vth_vddcore",
+ "cpu2_sleeping",
+ "cpu1_evento",
+ "cpu1_nirqout1",
+ "bsec_out_spnidena",
+ "exti2_d3_wakeup",
+ "eth1_out_pmt_intr_o",
+ "gpu_dbg3",
+ "ddrss_dphycg_en",
+ "ddrss_obsp0",
+ "cpu3_sleeping",
+ "hpdma3_clk_bus_req",
+ "pcie_usb_cxpl_debug_info_ei_4",
+ "pcie_usb_cxpl_debug_info_ei_12",
+ "d1_state_1",
+ "gpoval4",
+ //HDP5 functions:
+ "cpu1_standby_wfil2",
+ "none",
+ "none",
+ "cpu1_nirqout0",
+ "bsec_out_spidena",
+ "exti2_cpu3_wakeup",
+ "eth1_out_lpi_intr_o",
+ "gpu_dbg2",
+ "ddrctrl_dfi_init_start",
+ "ddrss_obsp1",
+ "cpu3_state_1",
+ "d3_gbl_per_clk_bus_req",
+ "pcie_usb_cxpl_debug_info_ei_5",
+ "pcie_usb_cxpl_debug_info_ei_13",
+ "d1_state_2",
+ "gpoval5",
+ //HDP6 functions:
+ "cpu1_standby_wfi1",
+ "cpu1_standby_wfe1",
+ "cpu1_halted1",
+ "cpu1_naxierrirq",
+ "bsec_out_spnidenm",
+ "exti2_cpu2_wakeup",
+ "eth2_out_pmt_intr_o",
+ "gpu_dbg1",
+ "ddrss_dfi_init_complete",
+ "ddrss_obsp2",
+ "d2_state_0",
+ "d3_gbl_per_dma_req",
+ "pcie_usb_cxpl_debug_info_ei_6",
+ "pcie_usb_cxpl_debug_info_ei_14",
+ "cpu1_state_0",
+ "gpoval6",
+ //HDP7 functions:
+ "cpu1_standby_wfi0",
+ "cpu1_standby_wfe0",
+ "cpu1_halted0",
+ "none",
+ "bsec_out_spidenm",
+ "exti2_cpu1__wakeup",
+ "eth2_out_lpi_intr_o",
+ "gpu_dbg0",
+ "ddrss_dfi_ctrlupd_req",
+ "ddrss_obsp3",
+ "d2_state_1",
+ "lpdma1_clk_bus_req",
+ "pcie_usb_cxpl_debug_info_ei_7",
+ "pcie_usb_cxpl_debug_info_ei_15",
+ "cpu1_state_1",
+ "gpoval7",
+};
+
+static const char * const stm32_hdp_pins_group[] = {
+ "HDP0",
+ "HDP1",
+ "HDP2",
+ "HDP3",
+ "HDP4",
+ "HDP5",
+ "HDP6",
+ "HDP7"
+};
+
+static int stm32_hdp_gpio_get_direction(struct gpio_chip *gc, unsigned int offset)
+{
+ return GPIO_LINE_DIRECTION_OUT;
+}
+
+static int stm32_hdp_pinctrl_get_groups_count(struct pinctrl_dev *pctldev)
+{
+ return ARRAY_SIZE(stm32_hdp_pins);
+}
+
+static const char *stm32_hdp_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
+ unsigned int selector)
+{
+ return stm32_hdp_pins[selector].name;
+}
+
+static int stm32_hdp_pinctrl_get_group_pins(struct pinctrl_dev *pctldev, unsigned int selector,
+ const unsigned int **pins, unsigned int *num_pins)
+{
+ *pins = &stm32_hdp_pins[selector].number;
+ *num_pins = 1;
+
+ return 0;
+}
+
+static const struct pinctrl_ops stm32_hdp_pinctrl_ops = {
+ .get_groups_count = stm32_hdp_pinctrl_get_groups_count,
+ .get_group_name = stm32_hdp_pinctrl_get_group_name,
+ .get_group_pins = stm32_hdp_pinctrl_get_group_pins,
+ .dt_node_to_map = pinconf_generic_dt_node_to_map_all,
+ .dt_free_map = pinconf_generic_dt_free_map,
+};
+
+static int stm32_hdp_pinmux_get_functions_count(struct pinctrl_dev *pctldev)
+{
+ return HDP_FUNC_TOTAL;
+}
+
+static const char *stm32_hdp_pinmux_get_function_name(struct pinctrl_dev *pctldev,
+ unsigned int selector)
+{
+ struct stm32_hdp *hdp = pinctrl_dev_get_drvdata(pctldev);
+
+ return hdp->func_name[selector];
+}
+
+static int stm32_hdp_pinmux_get_function_groups(struct pinctrl_dev *pctldev, unsigned int selector,
+ const char *const **groups,
+ unsigned int *num_groups)
+{
+ u32 index = selector / HDP_FUNC;
+
+ *groups = &stm32_hdp_pins[index].name;
+ *num_groups = 1;
+
+ return 0;
+}
+
+static int stm32_hdp_pinmux_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector,
+ unsigned int group_selector)
+{
+ struct stm32_hdp *hdp = pinctrl_dev_get_drvdata(pctldev);
+
+ unsigned int pin = stm32_hdp_pins[group_selector].number;
+ u32 mux;
+
+ func_selector %= HDP_FUNC;
+ mux = readl_relaxed(hdp->base + HDP_MUX);
+ mux &= ~HDP_MUX_MASK(pin);
+ mux |= func_selector << HDP_MUX_SHIFT(pin);
+
+ writel_relaxed(mux, hdp->base + HDP_MUX);
+ hdp->mux_conf = mux;
+
+ return 0;
+}
+
+static const struct pinmux_ops stm32_hdp_pinmux_ops = {
+ .get_functions_count = stm32_hdp_pinmux_get_functions_count,
+ .get_function_name = stm32_hdp_pinmux_get_function_name,
+ .get_function_groups = stm32_hdp_pinmux_get_function_groups,
+ .set_mux = stm32_hdp_pinmux_set_mux,
+ .gpio_set_direction = NULL,
+};
+
+static struct pinctrl_desc stm32_hdp_pdesc = {
+ .name = DRIVER_NAME,
+ .pins = stm32_hdp_pins,
+ .npins = ARRAY_SIZE(stm32_hdp_pins),
+ .pctlops = &stm32_hdp_pinctrl_ops,
+ .pmxops = &stm32_hdp_pinmux_ops,
+ .owner = THIS_MODULE,
+};
+
+static const struct of_device_id stm32_hdp_of_match[] = {
+ {
+ .compatible = "st,stm32mp131-hdp",
+ .data = &func_name_mp13,
+ },
+ {
+ .compatible = "st,stm32mp151-hdp",
+ .data = &func_name_mp15,
+ },
+ {
+ .compatible = "st,stm32mp251-hdp",
+ .data = &func_name_mp25,
+ },
+ {}
+};
+MODULE_DEVICE_TABLE(of, stm32_hdp_of_match);
+
+static int stm32_hdp_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct stm32_hdp *hdp;
+ u8 version;
+ int err;
+
+ hdp = devm_kzalloc(dev, sizeof(*hdp), GFP_KERNEL);
+ if (!hdp)
+ return -ENOMEM;
+ hdp->dev = dev;
+
+ platform_set_drvdata(pdev, hdp);
+
+ hdp->base = devm_platform_ioremap_resource(pdev, 0);
+ if (IS_ERR(hdp->base))
+ return PTR_ERR(hdp->base);
+
+ hdp->func_name = of_device_get_match_data(dev);
+ if (!hdp->func_name)
+ return dev_err_probe(dev, -ENODEV, "No function name provided\n");
+
+ hdp->clk = devm_clk_get_enabled(dev, NULL);
+ if (IS_ERR(hdp->clk))
+ return dev_err_probe(dev, PTR_ERR(hdp->clk), "No HDP clock provided\n");
+
+ err = devm_pinctrl_register_and_init(dev, &stm32_hdp_pdesc, hdp, &hdp->pctl_dev);
+ if (err)
+ return dev_err_probe(dev, err, "Failed to register pinctrl\n");
+
+ err = pinctrl_enable(hdp->pctl_dev);
+ if (err)
+ return dev_err_probe(dev, err, "Failed to enable pinctrl\n");
+
+ hdp->gpio_chip.get_direction = stm32_hdp_gpio_get_direction;
+ hdp->gpio_chip.ngpio = ARRAY_SIZE(stm32_hdp_pins);
+ hdp->gpio_chip.can_sleep = true;
+ hdp->gpio_chip.names = stm32_hdp_pins_group;
+
+ err = bgpio_init(&hdp->gpio_chip, dev, 4,
+ hdp->base + HDP_GPOVAL,
+ hdp->base + HDP_GPOSET,
+ hdp->base + HDP_GPOCLR,
+ NULL, NULL, BGPIOF_NO_INPUT);
+ if (err)
+ return dev_err_probe(dev, err, "Failed to init bgpio\n");
+
+
+ err = devm_gpiochip_add_data(dev, &hdp->gpio_chip, hdp);
+ if (err)
+ return dev_err_probe(dev, err, "Failed to add gpiochip\n");
+
+ writel_relaxed(HDP_CTRL_ENABLE, hdp->base + HDP_CTRL);
+
+ version = readl_relaxed(hdp->base + HDP_VERR);
+ dev_dbg(dev, "STM32 HDP version %u.%u initialized\n", version >> 4, version & 0x0f);
+
+ return 0;
+}
+
+static void stm32_hdp_remove(struct platform_device *pdev)
+{
+ struct stm32_hdp *hdp = platform_get_drvdata(pdev);
+
+ writel_relaxed(HDP_CTRL_DISABLE, hdp->base + HDP_CTRL);
+}
+
+static int stm32_hdp_suspend(struct device *dev)
+{
+ struct stm32_hdp *hdp = dev_get_drvdata(dev);
+
+ hdp->gposet_conf = readl_relaxed(hdp->base + HDP_GPOSET);
+
+ pinctrl_pm_select_sleep_state(dev);
+
+ clk_disable_unprepare(hdp->clk);
+
+ return 0;
+}
+
+static int stm32_hdp_resume(struct device *dev)
+{
+ struct stm32_hdp *hdp = dev_get_drvdata(dev);
+ int err;
+
+ err = clk_prepare_enable(hdp->clk);
+ if (err) {
+ dev_err(dev, "Failed to prepare_enable clk (%d)\n", err);
+ return err;
+ }
+
+ writel_relaxed(HDP_CTRL_ENABLE, hdp->base + HDP_CTRL);
+ writel_relaxed(hdp->gposet_conf, hdp->base + HDP_GPOSET);
+ writel_relaxed(hdp->mux_conf, hdp->base + HDP_MUX);
+
+ pinctrl_pm_select_default_state(dev);
+
+ return 0;
+}
+
+static DEFINE_SIMPLE_DEV_PM_OPS(stm32_hdp_pm_ops, stm32_hdp_suspend, stm32_hdp_resume);
+
+static struct platform_driver stm32_hdp_driver = {
+ .probe = stm32_hdp_probe,
+ .remove = stm32_hdp_remove,
+ .driver = {
+ .name = DRIVER_NAME,
+ .pm = pm_sleep_ptr(&stm32_hdp_pm_ops),
+ .of_match_table = stm32_hdp_of_match,
+ }
+};
+
+module_platform_driver(stm32_hdp_driver);
+
+MODULE_AUTHOR("Clément Le Goffic");
+MODULE_DESCRIPTION("STMicroelectronics STM32 Hardware Debug Port driver");
+MODULE_LICENSE("GPL");
--
2.43.0
Return-Path: <linux-kernel+bounces-665543-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 6391641E003FB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:35:56 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id ACD8C4E3637
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:35:57 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 8CE00288537;
Wed, 28 May 2025 13:34:26 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=lunn.ch header.i=@lunn.ch header.b="ArBPduF6"
Received: from vps0.lunn.ch (vps0.lunn.ch [156.67.10.101])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3A86C28850F;
Wed, 28 May 2025 13:34:23 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=156.67.10.101
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439265; cv=none; b=rrCUVtSS2bivdiO3uXeRffBUQKwaowF9RozteH7SS5UYl18qJg1LQxzIWU6CYIDtgm8wKDQC8ojrgIgvTXahpJNe04lm2tf1o2IXNwJ8KCeP5BE+tzFrZWU+TFiMn77Cly1a2la6N49jN5jZTKA0m3rifavmTqaapQ303LcV+Ow=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439265; c=relaxed/simple;
bh=lSlTzvqYvzVkhoHlYSWjOtonFkIYqKQkc5ttEOkBwr4=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=USlUidsu06evRSHr+w2NZJppE+9FKpDj3K41H9OdPc+BO9IWq+5ynGlNhTto/EKMMHgW4UfpwHRzp20Zqr2I6eyDO4Wy9IBAgKP+yCfoM+AjehPA8q/zN6VJZ8EPj+EFbxbunaiYuWcUl1/FSCC/zdVuUKnVS5LYmfOdB0OhUFQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=lunn.ch; spf=pass smtp.mailfrom=lunn.ch; dkim=pass (1024-bit key) header.d=lunn.ch header.i=@lunn.ch header.b=ArBPduF6; arc=none smtp.client-ip=156.67.10.101
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=lunn.ch
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=lunn.ch
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lunn.ch;
s=20171124; h=In-Reply-To:Content-Disposition:Content-Type:MIME-Version:
References:Message-ID:Subject:Cc:To:From:Date:From:Sender:Reply-To:Subject:
Date:Message-ID:To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:
Content-ID:Content-Description:Content-Disposition:In-Reply-To:References;
bh=DKPJPtI3URqKQogiR3sy89lcY7NU2XOj83Ly1vrJsws=; b=ArBPduF6FEK+oQkYDHWrDH38DX
zMVKHZWk7bT/9yjo6req6iBhzjD83I2xsJv7gUe2f96C6hKZkNPmcY46+zIA4xHEL9pFI/i0Oe3X3
YHgMPthcDlqbpDAr4q+L6DgsEG+md87R40Q0PBYpGW8ZehzzI/DAAbAb9ie7/FME+CBE=;
Received: from andrew by vps0.lunn.ch with local (Exim 4.94.2)
(envelope-from <andrew@xxxxxxx>)
id 1uKGvA-00EBBB-18; Wed, 28 May 2025 15:34:16 +0200
Date: Wed, 28 May 2025 15:34:16 +0200
From: Andrew Lunn <andrew@xxxxxxx>
To: weishangjuan@xxxxxxxxxxxxxxxxxx
Cc: andrew+netdev@xxxxxxx, davem@xxxxxxxxxxxxx, edumazet@xxxxxxxxxx,
kuba@xxxxxxxxxx, pabeni@xxxxxxxxxx, robh@xxxxxxxxxx,
krzk+dt@xxxxxxxxxx, conor+dt@xxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
mcoquelin.stm32@xxxxxxxxx, alexandre.torgue@xxxxxxxxxxx,
vladimir.oltean@xxxxxxx, rmk+kernel@xxxxxxxxxxxxxxx,
yong.liang.choong@xxxxxxxxxxxxxxx,
prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx, inochiama@xxxxxxxxx,
jan.petrous@xxxxxxxxxxx, jszhang@xxxxxxxxxx, p.zabel@xxxxxxxxxxxxxx,
0x1207@xxxxxxxxx, boon.khai.ng@xxxxxxxxxx,
linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, ningyu@xxxxxxxxxxxxxxxxxx,
linmin@xxxxxxxxxxxxxxxxxx, lizhi2@xxxxxxxxxxxxxxxxxx
Subject: Re: [PATCH v2 1/2] dt-bindings: ethernet: eswin: Document for
EIC7700 SoC
Message-ID: <ea59176e-e415-4b39-81af-ad0e2130b826@xxxxxxx>
References: <20250528041455.878-1-weishangjuan@xxxxxxxxxxxxxxxxxx>
<20250528041558.895-1-weishangjuan@xxxxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528041558.895-1-weishangjuan@xxxxxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
> +examples:
> + - |
> + gmac0: ethernet@50400000 {
> + compatible = "eswin,eic7700-qos-eth", "snps,dwmac";
> + reg = <0x0 0x50400000 0x0 0x10000>;
> + interrupt-parent = <&plic>;
> + interrupt-names = "macirq";
> + interrupts = <61>;
> + phy-mode = "rgmii-txid";
Does the PCB has extra long clock lines in one direction? That is very
odd.
https://github.com/torvalds/linux/commit/157ce8f381efe264933e9366db828d845bade3a1
Andrew
Return-Path: <linux-kernel+bounces-665542-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 9F19941E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:35:55 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id F028D1BC65A1
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:35:55 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id E46432882DE;
Wed, 28 May 2025 13:33:52 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="E4k91/RM"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 89A872882CA
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:33:49 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439231; cv=none; b=YJFIdco3x4EroHUuAxKom5uHCMOdWvo9lXON6DJ5ROx0DwGgdzKrD35LuDJ4KaJ02mveuxr1AilNhCFK+linjhRm0/3itV6kiiKHkfTKYBbpCT1E+Xd/QIs8IvAfSLOa7XLXRbvF5o2FWmr2CWkfERcCUJQ5J1/URSrc6NICi5s=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439231; c=relaxed/simple;
bh=j19Gb78WLZI81hhcl7O6CNrnt9wT3VbY8Uu+y0jIpQc=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=fAk5ARnD0lTSUKWHI0E5JAMW1QfAoV2F7qw4y8ztnyINvBRRnlDtKFOCHbcZy4AaWUGqU4MCZiRnfwbhdafS1yFUvtV5UZuyUSOvas7oTPf+H0Ex+zsXjBWEwWsCn/MZY06CeO65PPG+CCaY8oyXjgK3E68/jhico8llgygQDOI=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=E4k91/RM; arc=none smtp.client-ip=170.10.133.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748439228;
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:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=MY7dIzvhqKQ78x3ZBXAWRPIno47BbkAAxPa3qgWZaRY=;
b=E4k91/RMW90JAd1qMCCHDOfyPXTLSMOGALCoS8/EydDk3L4SIprYnPq14IXkmSoLrYpvdd
cEgSlhra4NZu2ARvawcpTjLQJ83zpnlGHNq7Tpl1qNNZzfqf4r9rz5wLrs1uMKJ1vFDeiw
OWrOCh+7GJWFeDN95/oixCcQ17TkBzg=
Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com
[209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS
(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
us-mta-178-hscCGGppN7K0URG3tDA2cA-1; Wed, 28 May 2025 09:33:47 -0400
X-MC-Unique: hscCGGppN7K0URG3tDA2cA-1
X-Mimecast-MFC-AGG-ID: hscCGGppN7K0URG3tDA2cA_1748439226
Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-3a4d8983eecso1728951f8f.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 06:33:46 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748439226; x=1749044026;
h=content-transfer-encoding:in-reply-to:from:references:cc:to
:content-language:subject:user-agent:mime-version:date:message-id
:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
bh=MY7dIzvhqKQ78x3ZBXAWRPIno47BbkAAxPa3qgWZaRY=;
b=AK2LbHUHzODQK1aaALjKEI+D+wL/ICbwyngrQDgVGX3h8wVLszB8K+mzamTqNZ+a4U
qNZWrKv4S8t3UJHyEnCkt5kEnJ5W+YDtL7V071cPdBrFJJlqaBrdzx1rJxtp4jE+lvXH
lvz8XdYazAPzUkoPHwzp02ymqalR276AJ3UfagGEFuBOIjB+TsdkgHI9gJyVil0FVgIf
WPPHeXb+evWE2r+mpgl1Jx0r/Nyjo2AOxay0XTF5mRSeW9r6KfNp6Uxd6bbQP6Cy2NdZ
UoW5lKodY9E7ozyFmbaV+HS3l6dWatojiCPlrsgAGIDeSz+NbiLgwg42cd+PvFmJJe9L
YSlQ==
X-Forwarded-Encrypted: i=1; AJvYcCWFMB/cbrVqAgsvDVrz8FffoTu250XjVC1FyQqmB9Oio0kB/QEfDb7sQIpvocJRbwuz6m2prrp99x7SaLU=@vger.kernel.org
X-Gm-Message-State: AOJu0Yyb+dCPyl48rZ4z/Qfv41ePWcfu1bm2qCHGp10dVVHYjJl8M7ur
fZAhEtYamOVu+MeBXFmazxmHnTwJ/f24TBOq0rXV/5p0Lz97N/5cIw/k8JA4wyH5UBttlN3vbay
J++3Sv2yMFSZpuLQfrBYZDr+j0hRvJBZa9/KS9fxFrsW4EYPaurfSKAnkalvEfkJvZA==
X-Gm-Gg: ASbGnctRxTY70qO9VezuntXwnr4rZuh3ClkaVbOTOjtmfdefKnbednONsKCwVi+TFFf
2o7H9iOaztjYse0l068Cv2GIgC9igODfUMrapNk3rMSO001jWNmCPF5K7+8PGa4EjUDD5ho+Qok
9OlOagYCKLgBCOlssEhLo5wjCMkfV8CvFKGwzV6yF/F3LaEvhDqyFhAftNTbAjVsEJ4dMcTf5Y2
uS2kNkCt+YiQU0x2e3JrVXu8+EkxJg8n6gVjvKT9PNTBpVKuFjQkDOXiCfjKN97tqmZ+QAR+Nue
1Zr2zHwwjvKtyQU2KEf6lYQliJSPyaVndIgcyMgyYuptZgTsYsSJAQ==
X-Received: by 2002:a05:6000:18ac:b0:3a4:d3ff:cef2 with SMTP id ffacd0b85a97d-3a4d3ffd31bmr10702825f8f.27.1748439225666;
Wed, 28 May 2025 06:33:45 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IEAIpa+RxRPf6tIbm4faSkGMORwUvQ1kSvzXDebp/C9JP6wXZATaOvGCzJaeUMMdK7sedyDUA==
X-Received: by 2002:a05:6000:18ac:b0:3a4:d3ff:cef2 with SMTP id ffacd0b85a97d-3a4d3ffd31bmr10702799f8f.27.1748439225216;
Wed, 28 May 2025 06:33:45 -0700 (PDT)
Received: from ?IPV6:2a01:e0a:f0e:9070:527b:9dff:feef:3874? ([2a01:e0a:f0e:9070:527b:9dff:feef:3874])
by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a4eace3a76sm1507826f8f.98.2025.05.28.06.33.43
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 06:33:44 -0700 (PDT)
Message-ID: <8ab8b36b-7e5a-4790-92c2-1b1ff456a1e6@xxxxxxxxxx>
Date: Wed, 28 May 2025 15:33:43 +0200
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [RFC PATCH v2 1/9] KVM: arm64: nv: selftests: Add support to run
guest code in vEL2.
Content-Language: en-US
To: Ganapatrao Kulkarni <gankulkarni@xxxxxxxxxxxxxxxxxxxxxx>,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, kvmarm@xxxxxxxxxxxxxxx,
linux-kselftest@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Cc: maz@xxxxxxxxxx, oliver.upton@xxxxxxxxx, joey.gouly@xxxxxxx,
suzuki.poulose@xxxxxxx, yuzenghui@xxxxxxxxxx, seanjc@xxxxxxxxxx,
darren@xxxxxxxxxxxxxxxxxxxxxx
References: <20250512105251.577874-1-gankulkarni@xxxxxxxxxxxxxxxxxxxxxx>
<20250512105251.577874-2-gankulkarni@xxxxxxxxxxxxxxxxxxxxxx>
From: Eric Auger <eauger@xxxxxxxxxx>
In-Reply-To: <20250512105251.577874-2-gankulkarni@xxxxxxxxxxxxxxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi,
On 5/12/25 12:52 PM, Ganapatrao Kulkarni wrote:
> This patch adds required changes to vcpu init to run a guest code
> in vEL2 context and also adds NV specific helper functions.
>
> Signed-off-by: Ganapatrao Kulkarni <gankulkarni@xxxxxxxxxxxxxxxxxxxxxx>
> ---
> tools/testing/selftests/kvm/Makefile.kvm | 2 +
> .../kvm/include/arm64/kvm_util_arch.h | 3 +
> .../selftests/kvm/include/arm64/nv_util.h | 45 ++++++++++++++
> .../selftests/kvm/include/arm64/vgic.h | 1 +
> .../testing/selftests/kvm/include/kvm_util.h | 3 +
> tools/testing/selftests/kvm/lib/arm64/nv.c | 46 ++++++++++++++
> .../selftests/kvm/lib/arm64/processor.c | 61 ++++++++++++++-----
> tools/testing/selftests/kvm/lib/arm64/vgic.c | 8 +++
> 8 files changed, 155 insertions(+), 14 deletions(-)
> create mode 100644 tools/testing/selftests/kvm/include/arm64/nv_util.h
> create mode 100644 tools/testing/selftests/kvm/lib/arm64/nv.c
>
> diff --git a/tools/testing/selftests/kvm/Makefile.kvm b/tools/testing/selftests/kvm/Makefile.kvm
> index f773f8f99249..3348f729d3b2 100644
> --- a/tools/testing/selftests/kvm/Makefile.kvm
> +++ b/tools/testing/selftests/kvm/Makefile.kvm
> @@ -37,6 +37,7 @@ LIBKVM_arm64 += lib/arm64/processor.c
> LIBKVM_arm64 += lib/arm64/spinlock.c
> LIBKVM_arm64 += lib/arm64/ucall.c
> LIBKVM_arm64 += lib/arm64/vgic.c
> +LIBKVM_arm64 += lib/arm64/nv.c
>
> LIBKVM_s390 += lib/s390/diag318_test_handler.c
> LIBKVM_s390 += lib/s390/processor.c
> @@ -155,6 +156,7 @@ TEST_GEN_PROGS_arm64 += arm64/vgic_irq
> TEST_GEN_PROGS_arm64 += arm64/vgic_lpi_stress
> TEST_GEN_PROGS_arm64 += arm64/vpmu_counter_access
> TEST_GEN_PROGS_arm64 += arm64/no-vgic-v3
> +TEST_GEN_PROGS_arm64 += arm64/nv_guest_hypervisor
> TEST_GEN_PROGS_arm64 += access_tracking_perf_test
> TEST_GEN_PROGS_arm64 += arch_timer
> TEST_GEN_PROGS_arm64 += coalesced_io_test
> diff --git a/tools/testing/selftests/kvm/include/arm64/kvm_util_arch.h b/tools/testing/selftests/kvm/include/arm64/kvm_util_arch.h
> index e43a57d99b56..ab5279c24413 100644
> --- a/tools/testing/selftests/kvm/include/arm64/kvm_util_arch.h
> +++ b/tools/testing/selftests/kvm/include/arm64/kvm_util_arch.h
> @@ -2,6 +2,9 @@
> #ifndef SELFTEST_KVM_UTIL_ARCH_H
> #define SELFTEST_KVM_UTIL_ARCH_H
>
> +#define CurrentEL_EL1 (1 << 2)
> +#define CurrentEL_EL2 (2 << 2)
nit: not yet used in this patch.
> +
> struct kvm_vm_arch {};
>
> #endif // SELFTEST_KVM_UTIL_ARCH_H
> diff --git a/tools/testing/selftests/kvm/include/arm64/nv_util.h b/tools/testing/selftests/kvm/include/arm64/nv_util.h
> new file mode 100644
> index 000000000000..622a17c9d142
> --- /dev/null
> +++ b/tools/testing/selftests/kvm/include/arm64/nv_util.h
> @@ -0,0 +1,45 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +/*
> + * Copyright (c) 2025 Ampere Computing
> + */
> +#ifndef SELFTEST_NV_UTIL_H
> +#define SELFTEST_NV_UTIL_H
> +
> +#include <linux/bitmap.h>
> +#include <vgic.h>
> +
> +#define HCR_NV2 (UL(1) << 45)
> +#define HCR_AT (UL(1) << 44)
> +#define HCR_NV (UL(1) << 42)
> +#define HCR_E2H (UL(1) << 34)
> +#define HCR_TTLB (UL(1) << 25)
> +
> +/* Enable NV2 and guest in VHE mode */
> +#define HCR_EL2_NV_EANBLE (HCR_E2H | HCR_NV | HCR_NV2 | HCR_AT | HCR_TTLB)
ENABLE
> +
> +struct kvm_vm *nv_vm_create_with_vcpus_gic(uint32_t nr_vcpus,
> + struct kvm_vcpu **vcpus, int *gic_fd, void *guest_code);
> +
> +struct kvm_vm *__nv_vm_create_with_vcpus_gic(struct vm_shape shape,
> + uint32_t nr_vcpus, struct kvm_vcpu **vcpus,
> + uint64_t extra_mem_pages, int *gic_fd, void *guest_code);
> +
> +/* NV helpers */
> +static inline void init_vcpu_nested(struct kvm_vcpu_init *init)
> +{
> + init->features[0] |= (1 << KVM_ARM_VCPU_HAS_EL2);
> +}
> +
> +static inline bool kvm_arm_vcpu_has_el2(struct kvm_vcpu_init *init)
> +{
> + unsigned long features = init->features[0];
> +
> + return test_bit(KVM_ARM_VCPU_HAS_EL2, &features);
> +}
> +
> +static inline bool is_vcpu_nested(struct kvm_vcpu *vcpu)
> +{
> + return vcpu->nested;
> +}
> +
> +#endif /* SELFTEST_NV_UTIL_H */
> diff --git a/tools/testing/selftests/kvm/include/arm64/vgic.h b/tools/testing/selftests/kvm/include/arm64/vgic.h
> index c481d0c00a5d..46142fa36199 100644
> --- a/tools/testing/selftests/kvm/include/arm64/vgic.h
> +++ b/tools/testing/selftests/kvm/include/arm64/vgic.h
> @@ -17,6 +17,7 @@
> index)
>
> int vgic_v3_setup(struct kvm_vm *vm, unsigned int nr_vcpus, uint32_t nr_irqs);
> +void vgic_v3_close(int gic_fd);
>
> #define VGIC_MAX_RESERVED 1023
>
> diff --git a/tools/testing/selftests/kvm/include/kvm_util.h b/tools/testing/selftests/kvm/include/kvm_util.h
> index 373912464fb4..9b26b9124dc3 100644
> --- a/tools/testing/selftests/kvm/include/kvm_util.h
> +++ b/tools/testing/selftests/kvm/include/kvm_util.h
> @@ -65,6 +65,9 @@ struct kvm_vcpu {
> struct kvm_dirty_gfn *dirty_gfns;
> uint32_t fetch_index;
> uint32_t dirty_gfns_count;
> +#ifdef __aarch64__
> + bool nested;
> +#endif
> };
>
> struct userspace_mem_regions {
> diff --git a/tools/testing/selftests/kvm/lib/arm64/nv.c b/tools/testing/selftests/kvm/lib/arm64/nv.c
> new file mode 100644
> index 000000000000..e930808a7ed4
> --- /dev/null
> +++ b/tools/testing/selftests/kvm/lib/arm64/nv.c
> @@ -0,0 +1,46 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright (c) 2025 Ampere Computing LLC
> + */
> +
> +#include <linux/compiler.h>
> +#include <assert.h>
> +
> +#include "guest_modes.h"
> +#include "kvm_util.h"
> +#include "nv_util.h"
> +#include "processor.h"
> +
> +struct kvm_vm *__nv_vm_create_with_vcpus_gic(struct vm_shape shape, uint32_t nr_vcpus,
> + struct kvm_vcpu **vcpus, uint64_t extra_mem_pages, int *gic_fd, void *guest_code)
> +{
> + struct kvm_vcpu_init init;
> + struct kvm_vm *vm;
> + int i;
> +
> + TEST_REQUIRE(kvm_has_cap(KVM_CAP_ARM_EL2));
> +
> + vm = __vm_create(shape, nr_vcpus, extra_mem_pages);
> + vm_ioctl(vm, KVM_ARM_PREFERRED_TARGET, &init);
> + init_vcpu_nested(&init);
> +
> + for (i = 0; i < nr_vcpus; ++i) {
> + vcpus[i] = aarch64_vcpu_add(vm, i, &init, guest_code);
> + __TEST_REQUIRE(is_vcpu_nested(vcpus[i]), "Failed to Enable NV");
> + }
> +
> + /* vgic is not created, If gic_fd argument is NULL */
> + if (gic_fd) {
> + *gic_fd = vgic_v3_setup(vm, nr_vcpus, 64);
> + __TEST_REQUIRE(*gic_fd >= 0, "Failed to create vgic-v3");
> + }
> +
> + return vm;
> +}
> +
> +struct kvm_vm *nv_vm_create_with_vcpus_gic(uint32_t nr_vcpus,
> + struct kvm_vcpu **vcpus, int *gic_fd, void *guest_code)
> +{
> + return __nv_vm_create_with_vcpus_gic(VM_SHAPE_DEFAULT,
> + nr_vcpus, vcpus, 0, gic_fd, guest_code);
> +}
> diff --git a/tools/testing/selftests/kvm/lib/arm64/processor.c b/tools/testing/selftests/kvm/lib/arm64/processor.c
> index 7ba3aa3755f3..6e759981bf9e 100644
> --- a/tools/testing/selftests/kvm/lib/arm64/processor.c
> +++ b/tools/testing/selftests/kvm/lib/arm64/processor.c
> @@ -10,6 +10,7 @@
>
> #include "guest_modes.h"
> #include "kvm_util.h"
> +#include "nv_util.h"
> #include "processor.h"
> #include "ucall_common.h"
>
> @@ -258,14 +259,49 @@ void virt_arch_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent)
> }
> }
>
> +static void aarch64_vcpu_set_reg(struct kvm_vcpu *vcpu, uint64_t sctlr_el1,
> + uint64_t tcr_el1, uint64_t ttbr0_el1)
I am not sure it is worth introducing this helper. Some reg values are
set externally while fpen is set here. That looks odd to me.
> +{
> + uint64_t fpen;
> +
> + /*
> + * Enable FP/ASIMD to avoid trapping when accessing Q0-Q15
> + * registers, which the variable argument list macros do.
> + */
> + fpen = 3 << 20;
> +
> + if (is_vcpu_nested(vcpu)) {
> + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_CPTR_EL2), fpen);
> + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_SCTLR_EL2), sctlr_el1);
> + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TCR_EL2), tcr_el1);
> + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_MAIR_EL2), DEFAULT_MAIR_EL1);
> + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TTBR0_EL2), ttbr0_el1);
> + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_HCR_EL2), HCR_EL2_NV_EANBLE);
> + } else {
> + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_CPACR_EL1), fpen);
> + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_SCTLR_EL1), sctlr_el1);
> + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TCR_EL1), tcr_el1);
> + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_MAIR_EL1), DEFAULT_MAIR_EL1);
> + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TTBR0_EL1), ttbr0_el1);
> +
> + }
> +
> + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TPIDR_EL1), vcpu->id);
> +}
> +
> void aarch64_vcpu_setup(struct kvm_vcpu *vcpu, struct kvm_vcpu_init *init)
> {
> struct kvm_vcpu_init default_init = { .target = -1, };
> struct kvm_vm *vm = vcpu->vm;
> uint64_t sctlr_el1, tcr_el1, ttbr0_el1;
>
> - if (!init)
> + if (!init) {
> init = &default_init;
> + } else {
> + /* Is this vcpu a Guest-Hypersior */
> + if (kvm_arm_vcpu_has_el2(init))
> + vcpu->nested = true;
> + }
>
> if (init->target == -1) {
> struct kvm_vcpu_init preferred;
> @@ -275,12 +311,6 @@ void aarch64_vcpu_setup(struct kvm_vcpu *vcpu, struct kvm_vcpu_init *init)
>
> vcpu_ioctl(vcpu, KVM_ARM_VCPU_INIT, init);
>
> - /*
> - * Enable FP/ASIMD to avoid trapping when accessing Q0-Q15
> - * registers, which the variable argument list macros do.
> - */
> - vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_CPACR_EL1), 3 << 20);
> -
> sctlr_el1 = vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_SCTLR_EL1));
> tcr_el1 = vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TCR_EL1));
>
> @@ -349,11 +379,7 @@ void aarch64_vcpu_setup(struct kvm_vcpu *vcpu, struct kvm_vcpu_init *init)
> if (use_lpa2_pte_format(vm))
> tcr_el1 |= (1ul << 59) /* DS */;
>
> - vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_SCTLR_EL1), sctlr_el1);
> - vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TCR_EL1), tcr_el1);
> - vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_MAIR_EL1), DEFAULT_MAIR_EL1);
> - vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TTBR0_EL1), ttbr0_el1);
> - vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TPIDR_EL1), vcpu->id);
> + aarch64_vcpu_set_reg(vcpu, sctlr_el1, tcr_el1, ttbr0_el1);
> }
>
> void vcpu_arch_dump(FILE *stream, struct kvm_vcpu *vcpu, uint8_t indent)
> @@ -387,7 +413,11 @@ static struct kvm_vcpu *__aarch64_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id,
>
> aarch64_vcpu_setup(vcpu, init);
>
> - vcpu_set_reg(vcpu, ARM64_CORE_REG(sp_el1), stack_vaddr + stack_size);
> + if (is_vcpu_nested(vcpu))
> + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_SP_EL2), stack_vaddr + stack_size);
> + else
> + vcpu_set_reg(vcpu, ARM64_CORE_REG(sp_el1), stack_vaddr + stack_size);
> +
> return vcpu;
> }
>
> @@ -457,7 +487,10 @@ void vcpu_init_descriptor_tables(struct kvm_vcpu *vcpu)
> {
> extern char vectors;
>
> - vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_VBAR_EL1), (uint64_t)&vectors);
> + if (is_vcpu_nested(vcpu))
> + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_VBAR_EL2), (uint64_t)&vectors);
> + else
> + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_VBAR_EL1), (uint64_t)&vectors);
> }
>
> void route_exception(struct ex_regs *regs, int vector)
> diff --git a/tools/testing/selftests/kvm/lib/arm64/vgic.c b/tools/testing/selftests/kvm/lib/arm64/vgic.c
> index 4427f43f73ea..67822b803d0f 100644
> --- a/tools/testing/selftests/kvm/lib/arm64/vgic.c
> +++ b/tools/testing/selftests/kvm/lib/arm64/vgic.c
> @@ -79,6 +79,14 @@ int vgic_v3_setup(struct kvm_vm *vm, unsigned int nr_vcpus, uint32_t nr_irqs)
> return gic_fd;
> }
>
> +void vgic_v3_close(int gic_fd)
> +{
> + if (gic_fd < 0)
> + return;
> +
> + close(gic_fd);
> +}
> +
> /* should only work for level sensitive interrupts */
> int _kvm_irq_set_level_info(int gic_fd, uint32_t intid, int level)
> {
Thanks
Eric
Return-Path: <linux-kernel+bounces-665545-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id A2C1141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:36:28 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id E3E9B4E46E4
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:36:29 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 54C8B288CBC;
Wed, 28 May 2025 13:35:03 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mcZ1hRKl"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8709928750D;
Wed, 28 May 2025 13:35:02 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439302; cv=none; b=dmZViHZUZlj1pBP/FMwLTJn4rbp7X79IyLUU4glX94/+Ux82GDGL1N7eqiqEynUgJ4bWRx6B/AKLje1dwGhhAQ6hkxP1XCV/JcpJ+8ly99JA0NgJ5dwna+CclpenYQCDKtCf+GaC30mx+oiCsPCDk5tJqFjvSXCP0JdVm1/ZS7c=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439302; c=relaxed/simple;
bh=AL79StjEVtOpavdCkIahecDYTSI5U301axB+UHG6/+4=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=i48dwgptsdM3eJq0oS0o0PRBCY81k5wdCEnQ4Q98yFrU1i5jIDZGpEnRi2OVHw9QpteKwaaW2asMtHvsqfoP+M24cWUOOBxDQeZ0zMn9f9pVHW+jFPFk3VKbEbOk4fCT2Dd2kisTD9BLqWRi4xtRpN1772TrmtubvLAq9qxsk+U=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mcZ1hRKl; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id CC0E8C4CEE7;
Wed, 28 May 2025 13:34:59 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748439301;
bh=AL79StjEVtOpavdCkIahecDYTSI5U301axB+UHG6/+4=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=mcZ1hRKl5SI6DfS7sQRRpj9srZkoV1J1Ed07m7kfcRYNurWctQ2ZJdCkF3SD+LI1j
/pTze2DEljbQvvEtdsJNehKbTrKru8jANdHP0ioR5QtL1QeaCtH3Lg0L/7to98X+PA
HBT4BHe+F4DXI7paCfPryMjT8TbQKGI3Zrco3GORP3ur8QKLVlwGACfAT9DnQW7ZwI
nJzLtwY8xiOPD9/WYwHLTudmE4cw0pcDj9IJZM7ElP/X0B/uX1waFeIHkIZaSFFHou
IMA8EsJuXVSMmpXvuyWPfsTPtEt8QMLXq+Ue46tGtpdO72UAduNeiFbpA/jxus95ng
UDzauWwz9ka0g==
Date: Wed, 28 May 2025 14:34:57 +0100
From: Conor Dooley <conor@xxxxxxxxxx>
To: Yao Zi <ziyao@xxxxxxxxxxx>
Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>,
Jiri Slaby <jirislaby@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>, Lubomir Rintel <lkundrak@xxxxx>,
devicetree@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-serial@xxxxxxxxxxxxxxx
Subject: Re: [PATCH] dt-bindings: serial: 8250: Make clocks and
clock-frequency exclusive
Message-ID: <20250528-drastic-clever-e6122922e360@spud>
References: <20250524105602.53949-1-ziyao@xxxxxxxxxxx>
<20250527-polio-snooze-c05aafc1e270@spud>
<aDZ0NPg2UCVZisk2@xxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
protocol="application/pgp-signature"; boundary="340YyRNb6DFGG/A4"
Content-Disposition: inline
In-Reply-To: <aDZ0NPg2UCVZisk2@xxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
--340YyRNb6DFGG/A4
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On Wed, May 28, 2025 at 02:25:56AM +0000, Yao Zi wrote:
> On Tue, May 27, 2025 at 04:24:11PM +0100, Conor Dooley wrote:
> > On Sat, May 24, 2025 at 10:56:02AM +0000, Yao Zi wrote:
> > > The 8250 binding before converting to json-schema states,
> > >=20
> > > - clock-frequency : the input clock frequency for the UART
> > > or
> > > - clocks phandle to refer to the clk used as per Documentation/devi=
cetree
> > >=20
> > > for clock-related properties, where "or" indicates these properties
> > > shouldn't exist at the same time.
> > >=20
> > > Additionally, the behavior of Linux's driver is strange when both clo=
cks
> > > and clock-frequency are specified: it ignores clocks and obtains the
> > > frequency from clock-frequency, left the specified clocks unclaimed. =
It
> > > may even be disabled, which is undesired most of the time.
> >=20
> > That sounds like an issue in the driver itself, no? If the clock phandle
> > is present it sounds like the driver should be claiming the clock
> > whether a frequency is specified or not. If so, that should be fixed
> > whether this patch gets applied or not.
>=20
> Agree.
>=20
> > >=20
> > > But "anyOf" doesn't prevent these two properties from coexisting, as =
it
> > > considers the object valid as long as there's at LEAST one match.
> > >=20
> > > Let's switch to "oneOf" and disallows the other property if one exist=
s,
> > > exclusively matching the original binding and avoid future confusion =
on
> > > the driver's behavior.
> >=20
> > Have you checked whether or not there are devices that have both
> > in-tree? If there are, can you fix them up as part of the change, rather
> > than adding new warnings.
>=20
> Had taken a brief search, seems all UARTs ship both clock-frqeuency and
> clocks properties are snps,dw-apb-uart variants, which are not related
> to the generic 8250 binding. So I think it shouldn't cause new warnings.
>=20
> > >=20
> > > Fixes: e69f5dc623f9 ("dt-bindings: serial: Convert 8250 to json-schem=
a")
> > > Signed-off-by: Yao Zi <ziyao@xxxxxxxxxxx>
> > > ---
> > > Documentation/devicetree/bindings/serial/8250.yaml | 10 +++++++---
> > > 1 file changed, 7 insertions(+), 3 deletions(-)
> > >=20
> > > diff --git a/Documentation/devicetree/bindings/serial/8250.yaml b/Doc=
umentation/devicetree/bindings/serial/8250.yaml
> > > index dc0d52920575..4322394f5b8f 100644
> > > --- a/Documentation/devicetree/bindings/serial/8250.yaml
> > > +++ b/Documentation/devicetree/bindings/serial/8250.yaml
> > > @@ -45,9 +45,13 @@ allOf:
> > > - ns16550
> > > - ns16550a
> > > then:
> > > - anyOf:
> > > - - required: [ clock-frequency ]
> > > - - required: [ clocks ]
> > > + oneOf:
> > > + - allOf:
> >=20
> > Why is the allOf needed here? Does
> > oneOf:
> > - required: foo
> > - required: bar
> > not work? There's a bunch of bindings doing that, so not sure why it
> > doesn't work in your case.
>=20
> Oops, you're right, it does work here and emits an "... is valid under
> each of ..." error. Will change to this form in v2.
With that,
Reviewed-by: Conor Dooley <conor.dooley@xxxxxxxxxxxxx>
I'd suggest you also send the driver patch to solve the issue on
platforms with whatever existing devicetree with both properties that
you're dealing with - or at the very least it'd open some discussion
about your problem.
--340YyRNb6DFGG/A4
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iHUEABYIAB0WIQRh246EGq/8RLhDjO14tDGHoIJi0gUCaDcRAQAKCRB4tDGHoIJi
0itSAP0cec8wqaljsnwTaGRD+Bzi9Y3dDDG+9F/K2r9XJm7/WgEAg+BAR0d6I+M8
A+ibSVgjYRZXLGLRDFAtnxKWNYwlQwU=
=ibR1
-----END PGP SIGNATURE-----
--340YyRNb6DFGG/A4--
Return-Path: <linux-kernel+bounces-665544-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 6162141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:36:35 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 98A901BC7B4E
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:36:29 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 1CB312874F0;
Wed, 28 May 2025 13:34:47 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="X//Zv9nN"
Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B3BD3286D7D;
Wed, 28 May 2025 13:34:44 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439286; cv=none; b=ept30hfsWG8WAS18SogveSekvG8Kow7lo9+dFo/Snq7jswC7GEwK/3HQHzb1hzzGDrqwfnGaRtg4QhR24M9TLYxZ2hx578Q+C/2j0pm/5pBv6bhNwDthzhQ0BSyJH9dDv9nycImaW9RHmv4calvawvUjMPnw+VNMKdN/zaeCHUs=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439286; c=relaxed/simple;
bh=qAXP3u+F6kQv8fklR/9r9VbSdVa03zSafbWjGJc6TIQ=;
h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=e8/lrFwmP+AffnBvvwecCsa/Y7JdKyJ0nvXARA4DOodGhLyBlqEtV4rsdIMoXBS1Teec5rCkBwh0gRlZvHygq/DYTn5pl1LTT9AZQN41MQ8vF2SHn0jL2+2ONPiHR9O354DaQpkdF92Gz93TbgngYEINDfXXOZHCD1K7KCGtsEU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=X//Zv9nN; arc=none smtp.client-ip=209.85.218.49
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-ad8826c05f2so435543066b.3;
Wed, 28 May 2025 06:34:44 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748439283; x=1749044083; darn=vger.kernel.org;
h=content-transfer-encoding:mime-version:message-id:date:subject:cc
:to:from:from:to:cc:subject:date:message-id:reply-to;
bh=60xNEii/ejRTOcRUkHwbDeFVkYWfusBxmvyh2qWNN6c=;
b=X//Zv9nNB6iCXC3Z4W/y8rU6JXbXQ8hS4eB3zn7dIpfXJlmyLjwD7CgUtUdfJh2WOZ
DvyAjFhyNuSkUazUeOst5rvETonISSesPAY88kaDP7dSmEN4k2LaXJ55WR3ExewfD2Az
Jgd5e/2UwNYXkw+ANY2Bn5oiuYj3w3OfLdzZivWcWXLsLKjNuT0FnyoOxFvtGpbztMSp
KXE188DyCl4PTAI4DrQ1EbFO055tQITcvQBbHsj9uoF0qq4IZrJmHZ6YzRfCEJfQUEP4
huQ654j38GixaoEnial/N+Ll9ikZV79toVJm9+sxvgGWlSiEDi4pT8BxAKY3AqD1OvX9
qSng==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748439283; x=1749044083;
h=content-transfer-encoding:mime-version:message-id:date:subject:cc
:to:from:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=60xNEii/ejRTOcRUkHwbDeFVkYWfusBxmvyh2qWNN6c=;
b=gJ2C/qRuTt5eSGrxvtKmM+wHk1F3u0YasWngPfAf5NFIQHZm1EgDVXv2twlbvCxY+A
KlPqHWRMSCX2DDRxfFpDsZ8OXnZEk9cV+wZyyCUTzjcLDaLA9FxPY8YGW5YxcvGStAAu
LlxPPE/npzWTfxxKscWaEqXS1MZfbfupQ4IwuH5WKEhfvXLiCpsycIaL+My/ZVe7FjPa
X3mFzJRSPDVtryqEUr2JiyaI9iqOb+48FOOVoLGnZG5N5ZIw0WW9EWqiblaplCqrDRFi
hu/mq8lpAtiDa3vunCW5UrqcsaUaVqtmILIsu1xrMJpjn89tneKL2VdFldxHMZl1OSUO
fSMA==
X-Forwarded-Encrypted: i=1; AJvYcCVDfWEMXUaeqQIH41+KQ0P8aLzQzDFPpa5s01AosH+ZvLtc+30Bi656JkxihL/Tnx2wde4HvvRoSbRQ@xxxxxxxxxxxxxxx, AJvYcCVLXzRT5LiKrpNyDh866GokUeXJFdlqkHjVyh+HRS5csqE9NhoGQEQSJ+H57Wf94c2CpP+chutrtrFdSG7a@xxxxxxxxxxxxxxx, AJvYcCXEMzCjiK1ZfCIc0V0GsZpEHqtsYGAvyYtfdfBf1fUTo4N+tTcgHAXal3xHOwO+3D1GoiYWBF9WHrsZ4a/WYJK48G4=@vger.kernel.org
X-Gm-Message-State: AOJu0Yy0kcSFB8wUbqJfZZPwXwGkKEe8kcAhiehCB94wvPfqgVaO024t
cpO6nP5PZWiAvlBS51aW8BRLbiwtenUUOJOkJaSWKQIoNKVHQr8v2Lad
X-Gm-Gg: ASbGncvJRFiVNEvb2DmRm5QSvXU3nozTGfFSSa4JEwoChIhyXXuy/u913KEk5Zg3+c7
DE0Czyg7604rAc3UjxFv9BODnUKKYkDw/dpZJK3JQpFfoWCo9s4QwwuvorInVMyyqCtQTfYzGHL
lX83+87/815Mr4G+ee6JJhO+hRKkut8xwq/zIyX/b4coL1ZVDXdKYKSbvAmONLUuIS8KdRQpECy
H28xKihpvN4Yb3cKGlyH74dMQtDlk0ruZGfGlXzvWo3RpXfAsDqf4XsWWzWAuvZqLcf0AR0+IzQ
4BGZeOR5LHA/dQ8mozpqfyzpYBbH8UJpT6u61vLPqvkDx0OQB0B7Vz9gEO+jKdDc0f2QEXP+RgL
o
X-Google-Smtp-Source: AGHT+IFOoYxe9+Z/+NoI14zW+cDeiop575WEkIIi/FLFUl9a9GCb/oDdN6EXweUmggecB51ORj+C3g==
X-Received: by 2002:a17:907:8687:b0:ad8:8883:9fef with SMTP id a640c23a62f3a-ad88883a01fmr714474966b.26.1748439282766;
Wed, 28 May 2025 06:34:42 -0700 (PDT)
Received: from iku.Home ([2a06:5906:61b:2d00:7078:193c:ccdc:e2f5])
by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad8a1b486d5sm107881266b.149.2025.05.28.06.34.42
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 06:34:42 -0700 (PDT)
From: Prabhakar <prabhakar.csengg@xxxxxxxxx>
X-Google-Original-From: Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
To: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Geert Uytterhoeven <geert+renesas@xxxxxxxxx>,
Magnus Damm <magnus.damm@xxxxxxxxx>,
Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx>
Cc: linux-usb@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
linux-renesas-soc@xxxxxxxxxxxxxxx,
Prabhakar <prabhakar.csengg@xxxxxxxxx>,
Biju Das <biju.das.jz@xxxxxxxxxxxxxx>,
Fabrizio Castro <fabrizio.castro.jz@xxxxxxxxxxx>,
Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Subject: [PATCH] dt-bindings: usb: renesas,usbhs: Add RZ/V2N SoC support
Date: Wed, 28 May 2025 14:34:40 +0100
Message-ID: <20250528133440.168133-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
X-Mailer: git-send-email 2.49.0
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Document the Renesas USBHS controller found on the Renesas RZ/V2N
(R9A09G056) SoC. The USBHS block on RZ/V2N is functionally identical to
the one on the RZ/G2L family, so no driver changes are needed. The
existing "renesas,rzg2l-usbhs" fallback compatible will continue to be
used for handling this IP.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
---
Documentation/devicetree/bindings/usb/renesas,usbhs.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/usb/renesas,usbhs.yaml b/Documentation/devicetree/bindings/usb/renesas,usbhs.yaml
index 6f4d41ba6ca7..a19816bbb1fd 100644
--- a/Documentation/devicetree/bindings/usb/renesas,usbhs.yaml
+++ b/Documentation/devicetree/bindings/usb/renesas,usbhs.yaml
@@ -27,6 +27,7 @@ properties:
- renesas,usbhs-r9a07g044 # RZ/G2{L,LC}
- renesas,usbhs-r9a07g054 # RZ/V2L
- renesas,usbhs-r9a08g045 # RZ/G3S
+ - renesas,usbhs-r9a09g056 # RZ/V2N
- renesas,usbhs-r9a09g057 # RZ/V2H(P)
- const: renesas,rzg2l-usbhs
--
2.49.0
Return-Path: <linux-kernel+bounces-665547-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id EB09241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:36:55 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 444324E4760
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:36:57 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id F0140288526;
Wed, 28 May 2025 13:36:09 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mejfVGoM"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 159D92857EE;
Wed, 28 May 2025 13:36:08 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439369; cv=none; b=bazlNP7VVgx9FrjRwa6TkKcJ7i7pCosGidHK887snoyp9+qwVQaXK8pbdQYzTd+NBnVSdLAzuUUX0KZPRDxABMMHOnNtsaKnuoc1TR+LRTWa4koGWk08dxL0rn5nnmfLCbUelwam0878eoh+bBjdZeEnzez/tkn2u0fp1NusoL8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439369; c=relaxed/simple;
bh=FhkUHMohrBHoaITaVyjCBqGPqxWKRhauPBqe5J+ZFNs=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=HqgxAOHOjQzgczuiMg5GhJ2HWJZSuoRosHAz8Ppd7WNslcwAd888ruOJ03Js/x3gBnDrzNAOBitmvTfnwceiF71JY8Vgd75samvYLOIt4pvw4eoqfCJA20JRuyPc0iNA1jzahBa3PafNs4kVWyQAAYzWaxyjf8wBIkd7TDCSEu4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mejfVGoM; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 84F0CC4CEE7;
Wed, 28 May 2025 13:36:05 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748439368;
bh=FhkUHMohrBHoaITaVyjCBqGPqxWKRhauPBqe5J+ZFNs=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=mejfVGoMxI8Zhe+fiFnLmMr4HCcGZ3Wuuuu0ZBVJxLq7daSTi/gd8hRfTaRXbzm67
SgVUUs3Marz6sfS3axwPXX3xFzwoArB7d6olXA3CZji3FEgAv8xQJdhNNiuyqbXIwt
jBjGmeOBZwKpu1b3XQicdOqYBBLNAkrdgSQARKSd/SDbW+qnCE7psiaW34V/+2rWVB
Tdkq/X8NPmK1zF4Hog3y20lDQ0ojK2xVvowd/UdnTJbE+ib+BcK7fQf3+tqCN20VfY
78Sm8EjaSaOIKhqhVI7upQzXJAXH9VHFj5HijWs/H9TUR7nEpN2nSL5Hg41ieZemv0
YLx7bB5hJ126Q==
Date: Wed, 28 May 2025 14:36:03 +0100
From: Conor Dooley <conor@xxxxxxxxxx>
To: Prabhakar <prabhakar.csengg@xxxxxxxxx>
Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Geert Uytterhoeven <geert+renesas@xxxxxxxxx>,
Magnus Damm <magnus.damm@xxxxxxxxx>,
Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx>,
linux-usb@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-renesas-soc@xxxxxxxxxxxxxxx,
Biju Das <biju.das.jz@xxxxxxxxxxxxxx>,
Fabrizio Castro <fabrizio.castro.jz@xxxxxxxxxxx>,
Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Subject: Re: [PATCH] dt-bindings: usb: renesas,usbhs: Add RZ/V2N SoC support
Message-ID: <20250528-achiness-easel-6ea5af62106b@spud>
References: <20250528133440.168133-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
protocol="application/pgp-signature"; boundary="dCH9tE1cQr8pCh13"
Content-Disposition: inline
In-Reply-To: <20250528133440.168133-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
--dCH9tE1cQr8pCh13
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On Wed, May 28, 2025 at 02:34:40PM +0100, Prabhakar wrote:
> From: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
>=20
> Document the Renesas USBHS controller found on the Renesas RZ/V2N
> (R9A09G056) SoC. The USBHS block on RZ/V2N is functionally identical to
> the one on the RZ/G2L family, so no driver changes are needed. The
> existing "renesas,rzg2l-usbhs" fallback compatible will continue to be
> used for handling this IP.
>=20
> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Acked-by: Conor Dooley <conor.dooley@xxxxxxxxxxxxx>
--dCH9tE1cQr8pCh13
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iHUEABYIAB0WIQRh246EGq/8RLhDjO14tDGHoIJi0gUCaDcRQwAKCRB4tDGHoIJi
0lRpAP91o80LW7znud+X5kxB4V/yuWsIkYrI4sDMBxpm3z7+JAEAuR9jTnEYUfSC
aaq/1JLRgjGNV58BDvnty5Acc3s0XQo=
=4pIE
-----END PGP SIGNATURE-----
--dCH9tE1cQr8pCh13--
Return-Path: <linux-kernel+bounces-665549-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 4769541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:37:21 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 955A64E47CD
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:37:22 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 6B0A3246789;
Wed, 28 May 2025 13:37:17 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dfhkTfGA"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id AA12A28641B;
Wed, 28 May 2025 13:37:16 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439436; cv=none; b=eeDRetGCGdCJ0Is4DijWiHY55lUWt3+NXmxeqVa0mXFiFWHiK63GHf37PSYsFndzv/W5zrJqeAXl+pM2jnU+pb4SO0KDlyxZFQDBP3cswzkOT+JZLjaDZtXG17dzree5koebMEP4WnG8CNYR01jdN6pbDBAd/9ZyQpkVQD922hA=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439436; c=relaxed/simple;
bh=nWFmuHlsVICUVjcmX3HASFKYD2geEtzh77n0smErV5s=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=RHDCDYfMMS+8SK5L4aRZ4g2GU+LP5HP3Gan8YgdeubbcvXUqhzFuYyZGgIie0/xooUpcYVqB9ram7PFtK1nLa2WCC2Y3xmNkzHHMJdH3K+MehW08ZqtDlOtDypYw82awCaIwN4qHJkJNstFDmJKn/mD1akRwNoXt8yFS+OgLuh4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dfhkTfGA; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 09365C4CEE7;
Wed, 28 May 2025 13:37:11 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748439436;
bh=nWFmuHlsVICUVjcmX3HASFKYD2geEtzh77n0smErV5s=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=dfhkTfGAGj8CW86+wX4vgwR36+FSjwtbRaQmfW3e/KE7u96dkxxYjsZNCilBYOLfP
YxSs5o4KgUFCX4SBmkCEQtIEkEtcRSj0cj5o0J435qnnBBw8Hf9XBYcGJsWeg6JiKb
B+B5+BBMF7k8103mzMvcN243sqa4xsdxrzl9eEuIkG/HdhMkkRvuw3yzuaSN2o1JyM
/Y5YWldpSOSdi71Hu54Hmt8IBJODH7mllMjHWBUGLijUQSCDDR1KLZ5A+D2yv5f8h2
3GVoVUkwNsN5Zsb/CiaYqsHqQKDV6STUlRQpbpCHdJ94zQQuYCeq4pf2N43uT+MB3I
TzPK2g5xiTHzQ==
Date: Wed, 28 May 2025 14:37:09 +0100
From: Conor Dooley <conor@xxxxxxxxxx>
To: Dario Binacchi <dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx, michael@xxxxxxxxxxxxxxxxxxxx,
linux-amarula@xxxxxxxxxxxxxxxxxxxx,
Alexander Stein <alexander.stein@xxxxxxxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Fabio Estevam <festevam@xxxxxxx>,
Francesco Dolcini <francesco.dolcini@xxxxxxxxxxx>,
Frank Li <Frank.Li@xxxxxxx>,
Frieder Schrempf <frieder.schrempf@xxxxxxxxxx>,
Heiko Schocher <hs@xxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Marek Vasut <marex@xxxxxxx>,
Max Merchel <Max.Merchel@xxxxxxxxxxxxxxx>,
Michael Walle <mwalle@xxxxxxxxxx>, Peng Fan <peng.fan@xxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>, Shawn Guo <shawnguo@xxxxxxxxxx>,
Tim Harvey <tharvey@xxxxxxxxxxxxx>, devicetree@xxxxxxxxxxxxxxx
Subject: Re: [PATCH v2 3/4] dt-bindings: arm: fsl: add i.MX28 Amarula rmm
board
Message-ID: <20250528-viewless-consumer-ec85e353582f@spud>
References: <20250528121306.1464830-1-dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
<20250528121306.1464830-4-dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
protocol="application/pgp-signature"; boundary="4EGpcGhWdCTivEIc"
Content-Disposition: inline
In-Reply-To: <20250528121306.1464830-4-dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
--4EGpcGhWdCTivEIc
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On Wed, May 28, 2025 at 02:11:40PM +0200, Dario Binacchi wrote:
> The board includes the following resources:
> - 256 Mbytes NAND Flash
> - 128 Mbytes DRAM DDR2
> - CAN
> - USB 2.0 high-speed/full-speed
> - Ethernet MAC
>=20
> Signed-off-by: Dario Binacchi <dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
Acked-by: Conor Dooley <conor.dooley@xxxxxxxxxxxxx>
--4EGpcGhWdCTivEIc
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iHUEABYIAB0WIQRh246EGq/8RLhDjO14tDGHoIJi0gUCaDcRhQAKCRB4tDGHoIJi
0l8SAP0XQPahB24PbgqJBY1MivzfYl77mDTy4+oOIaLKmuQlzgD/QExr6pC/YZMk
vcDtr9EgoxGgshea76kDK5vhCJKg5Q8=
=AHuM
-----END PGP SIGNATURE-----
--4EGpcGhWdCTivEIc--
Return-Path: <linux-kernel+bounces-665546-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 644C741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:37:39 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 6D38B3A71A4
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:36:20 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 20A5A28641B;
Wed, 28 May 2025 13:35:52 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="r89pZ3Wd"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 61732246789;
Wed, 28 May 2025 13:35:51 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439351; cv=none; b=cfDmJ+HA9aTGSXFEFfdwPNm0288G/3+4PBSMrnPYFSCu7S10weSfrdzqmd7m8XctZ8f6atRdB7J73EGKFQkR6ScQSQTPUnZrsnmnbgZn/ZaNfr2GBoZeFzzLKxYxrKjfoLQMqcsGf+sm/9jp/eIc54//6CqJBuej4+PaTjIFFXQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439351; c=relaxed/simple;
bh=knk8q/FALEdjxGDuprxqQZMXz1KpNrrRmanSda0rE9Y=;
h=Content-Type:Date:Message-Id:To:Subject:Cc:From:References:
In-Reply-To; b=ZXQ6xZlAJ7oucAsdZnG1LA+zXg7gFZ0j5VDq+sPJW8a84hp3Zqr0JDISovYhojvZrKmDNdnRMyy1mbqU5HimmCOnQ7P9emUJcgfHlvsP+iwMeE1NziJ5nmKWv+Rc+U9QRiUJ4HfDxwouwHSrnE250x/ACknGicKoUgfZwNT7cRs=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=r89pZ3Wd; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6F396C4CEE7;
Wed, 28 May 2025 13:35:50 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748439350;
bh=knk8q/FALEdjxGDuprxqQZMXz1KpNrrRmanSda0rE9Y=;
h=Date:To:Subject:Cc:From:References:In-Reply-To:From;
b=r89pZ3Wdo58sTUeYve6Z5etikGXEkbsTZZLsstU3BSl7yQb2w3O0x086ke1cXkE11
Wk6bi1CWkXiEui30ORYSiE3pjAuIZmjnvpGuN+se+sB32KLPiuBYQ3rywb33VoJ3Qa
okX8PIH7HjV4K51cDIXqVaEUGP4c1oSyRJK5+5OxcO6FJYkKBm5uU3zLXZq8Ri+tVp
rTN45IXVzpegS73DEUgEbJxytYo9dYz78bqBQrsqVSNoE4sia5dJiW7y+YLS+bAZ/n
FtSHe5t9O2FUfa41JRb5NJa2OoEBmU5v9pOKh817aSxskdjU1QeD3ljZEqf9XMqsLo
kc4dtZVrRQI/Q==
Content-Type: multipart/signed;
boundary=a01ec67d579d790ebeab352c5a5d5a4c98173c681872122f1d16c4e94ddd;
micalg=pgp-sha384; protocol="application/pgp-signature"
Date: Wed, 28 May 2025 15:35:46 +0200
Message-Id: <DA7U0RDHCIDK.2KTS6YW127P4Z@xxxxxxxxxx>
To: "Aradhya Bhatia" <aradhya.bhatia@xxxxxxxxx>, "Rob Herring"
<robh@xxxxxxxxxx>, "Krzysztof Kozlowski" <krzk+dt@xxxxxxxxxx>, "Conor
Dooley" <conor+dt@xxxxxxxxxx>, "Tomi Valkeinen"
<tomi.valkeinen@xxxxxxxxxxxxxxxx>, "Jyri Sarha" <jyri.sarha@xxxxxx>
Subject: Re: [PATCH v9 4/4] drm/tidss: Add OLDI bridge support
Cc: "Maarten Lankhorst" <maarten.lankhorst@xxxxxxxxxxxxxxx>, "Thomas
Zimmermann" <tzimmermann@xxxxxxx>, "Maxime Ripard" <mripard@xxxxxxxxxx>,
"David Airlie" <airlied@xxxxxxxxx>, "Laurent Pinchart"
<laurent.pinchart@xxxxxxxxxxxxxxxx>, "Simona Vetter" <simona@xxxxxxxx>,
"Nishanth Menon" <nm@xxxxxx>, "Vignesh Raghavendra" <vigneshr@xxxxxx>,
"Devarsh Thakkar" <devarsht@xxxxxx>, "Praneeth Bajjuri" <praneeth@xxxxxx>,
"Udit Kumar" <u-kumar1@xxxxxx>, "Jayesh Choudhary" <j-choudhary@xxxxxx>,
"Francesco Dolcini" <francesco@xxxxxxxxxx>, "Alexander Sverdlin"
<alexander.sverdlin@xxxxxxxxxxx>, "DRI Development List"
<dri-devel@xxxxxxxxxxxxxxxxxxxxx>, "Devicetree List"
<devicetree@xxxxxxxxxxxxxxx>, "Linux Kernel List"
<linux-kernel@xxxxxxxxxxxxxxx>
From: "Michael Walle" <mwalle@xxxxxxxxxx>
X-Mailer: aerc 0.16.0
References: <20250528122544.817829-1-aradhya.bhatia@xxxxxxxxx>
<20250528122544.817829-5-aradhya.bhatia@xxxxxxxxx>
In-Reply-To: <20250528122544.817829-5-aradhya.bhatia@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
MIME_HEADER_CTYPE_ONLY,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
--a01ec67d579d790ebeab352c5a5d5a4c98173c681872122f1d16c4e94ddd
Mime-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=UTF-8
On Wed May 28, 2025 at 2:25 PM CEST, Aradhya Bhatia wrote:
> From: Aradhya Bhatia <a-bhatia1@xxxxxx>
>
> The AM62x and AM62Px SoCs feature 2 OLDI TXes each, which makes it
> possible to connect them in dual-link or cloned single-link OLDI display
> modes. The current OLDI support in tidss_dispc.c can only support for
> a single OLDI TX, connected to a VP and doesn't really support
> configuration of OLDIs in the other modes. The current OLDI support in
> tidss_dispc.c also works on the principle that the OLDI output can only
> be served by one, and only one, DSS video-port. This isn't the case in
> the AM62Px SoC, where there are 2 DSS controllers present that share the
> OLDI TXes.
>
> Having their own devicetree and their own bridge entity will help
> support the various display modes and sharing possiblilities of the OLDI
> hardware.
>
> For all these reasons, add support for the OLDI TXes as DRM bridges.
>
> Signed-off-by: Aradhya Bhatia <a-bhatia1@xxxxxx>
> Signed-off-by: Aradhya Bhatia <aradhya.bhatia@xxxxxxxxx>
Tested-by: Michael Walle <mwalle@xxxxxxxxxx> # on am67a
(with local patches from downstream for DSS support)
Thanks,
-michael
--a01ec67d579d790ebeab352c5a5d5a4c98173c681872122f1d16c4e94ddd
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iKgEABMJADAWIQTIVZIcOo5wfU/AngkSJzzuPgIf+AUCaDcRMxIcbXdhbGxlQGtl
cm5lbC5vcmcACgkQEic87j4CH/j14QGAhZrSdUr0WUS2+40Cu+09ap7KmA0xJXOl
kBaZaFsgOAQPknZDiT5jW3JdM/NC+9a2AYCjb3vFpm/xWsU0e7rREQ/lVfuS+lze
HVJTtpGmGdwseReGa8Xo16GwG2hExmjdjpU=
=hq/P
-----END PGP SIGNATURE-----
--a01ec67d579d790ebeab352c5a5d5a4c98173c681872122f1d16c4e94ddd--
Return-Path: <linux-kernel+bounces-665548-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E0C0F41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:37:48 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 19DB6188B237
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:37:24 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 2A46D288C0E;
Wed, 28 May 2025 13:36:36 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KizkiBLZ"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5576F2857EE;
Wed, 28 May 2025 13:36:34 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439395; cv=none; b=q0ao/47bWfdFH7KsnrTkPxm4P0YgosUIS/2cBaB6rk7fR8N35IBypESJQq0lEUGjLI/rM7kWjKIqRvesuHlS0/Q+URycfHGq0oPERXny2aNXK6mGhxFwvLjoyAfBpY3RC+FYk0AbKefegJWsWC8RZAOZ0LyTuzw9YCHdYk0ULf4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439395; c=relaxed/simple;
bh=1upF5iqjxie2p7TO11TXMuHwHpi5QAhmmGahibyTmRc=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=pvUvOOuufOyFukghgmvLRHIvvxmFulc5yjCptOkAK8cGf/V9Dus20uYd12+2mqrQUon4E1/q2t2DdIvC6cZOybPDYz8w0mkWLfOIC9IEVFR1bMoxkMxj0lWOh42md+YkLKiJUZMnjqCJ1VCXue57K026ftAxTEKxbhq9O6jzPyo=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KizkiBLZ; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2C895C4CEE7;
Wed, 28 May 2025 13:36:32 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748439394;
bh=1upF5iqjxie2p7TO11TXMuHwHpi5QAhmmGahibyTmRc=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=KizkiBLZAvJq1dp0wk5UwNav7sFxYW7s9dOAxxFGNk3wiyID2XMmX/4IsjxAlhFZO
00FCiIlVGe55e5eFHn7amFqjUIz5fYZR51woYb0y6alZkrUY52zZFB1csi3NldnIY6
Iau7wOUu1aQL/rO8B067HyBMjLdduV2i5eaum/vcRNagWppuXb5uT4o4cqzGN1W7sj
Vi8yUMqwS00rRDyxLlahlSkQS3MVFWvvfMFbR4O/jjxDDg6EXHpGPpr3P1OXwrHIob
FK8RQm2sjjWmPFFxUSFNlNUZhLOHGkim90IK30AlKLrxh9AngEnTSnGMZs0vnw9+ug
jPW8lZ+Wpr3mg==
Date: Wed, 28 May 2025 14:36:29 +0100
From: Conor Dooley <conor@xxxxxxxxxx>
To: Prabhakar <prabhakar.csengg@xxxxxxxxx>
Cc: Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Geert Uytterhoeven <geert+renesas@xxxxxxxxx>,
Magnus Damm <magnus.damm@xxxxxxxxx>,
Fabrizio Castro <fabrizio.castro.jz@xxxxxxxxxxx>,
linux-renesas-soc@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, Biju Das <biju.das.jz@xxxxxxxxxxxxxx>,
Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Subject: Re: [PATCH] dt-bindings: reset: renesas,rzv2h-usb2phy: Document
RZ/V2N SoC support
Message-ID: <20250528-geranium-eternal-571bc93bca54@spud>
References: <20250528133031.167647-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
protocol="application/pgp-signature"; boundary="2486ZaeyJjBnH63V"
Content-Disposition: inline
In-Reply-To: <20250528133031.167647-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
--2486ZaeyJjBnH63V
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On Wed, May 28, 2025 at 02:30:31PM +0100, Prabhakar wrote:
> From: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
>=20
> Document support for the USB2PHY reset controller found on the Renesas
> RZ/V2N (R9A09G056) SoC. The reset controller IP is functionally identical
> to that on the RZ/V2H(P) SoC, so no driver changes are needed. The existi=
ng
> `renesas,r9a09g057-usb2phy-reset` compatible will be used as a fallback
> for the RZ/V2N SoC.
>=20
> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Acked-by: Conor Dooley <conor.dooley@xxxxxxxxxxxxx>
--2486ZaeyJjBnH63V
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iHUEABYIAB0WIQRh246EGq/8RLhDjO14tDGHoIJi0gUCaDcRXQAKCRB4tDGHoIJi
0m4TAP4m919fURQSYEeYPyRVOMhCTQRkpeLhKNoSI8BmCWHspAEAksc112ujTGm+
9iwV9UyyPP/XWB3mR2i2SfWvY/TcnwM=
=4/Ob
-----END PGP SIGNATURE-----
--2486ZaeyJjBnH63V--
Return-Path: <linux-kernel+bounces-665550-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 2FDAC41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:39:14 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 7A10F4A3C71
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:39:15 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id D95B42882A6;
Wed, 28 May 2025 13:39:07 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GhCCRGkK"
Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8C40F26A0E0;
Wed, 28 May 2025 13:39:05 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439547; cv=none; b=Lac9aS3oDslfdF09LJN4AnKMACjxTtsidjTdyKxDjIBIBuU189wi1YiXiIdIt+LPnwLrqKBTrEjtjjyNqfkxp2mbqEpOdeFxSKrR5ahq3quWjHCnxeSMMPUFIRiapGtnwBRR32hC6Qb4119QKmPgW0klp67QQioUVaEdeJtq3N4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439547; c=relaxed/simple;
bh=XhsAe7+5ooO9w3eLRw5+xUsEm7gR5gLMmX5HOCIA4XE=;
h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=Pgmur1SkR/hpAJoCRpB5W8MukxzoG0/BoekLJOkmzGu++TcbyYhZKrC6oiBAikV1qTO9qakNXi34b49r6knOE3RDa23LijMcL8UQ/GhRSEBWNSRNVhQnDy+p7iYAtRwpi5AoS2MqM+zR5UB0WKZLP35rk/c1GdFleFAD8de8Ubs=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GhCCRGkK; arc=none smtp.client-ip=209.85.221.49
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-3a365a6804eso2887838f8f.3;
Wed, 28 May 2025 06:39:05 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748439544; x=1749044344; darn=vger.kernel.org;
h=content-transfer-encoding:mime-version:message-id:date:subject:cc
:to:from:from:to:cc:subject:date:message-id:reply-to;
bh=Gcx+WlhvWOc4VQ1Qrqwnlw9XmLmnMgNUTYRDj8TgLrA=;
b=GhCCRGkKRtg12KwLORUUEKYOME95B2FyXojMz46IoHPQpxNzkl6WieEw47MY3IDvsz
74thCAmyTNkmmNF8zQRpNU7KvQJDzPoPc0oTLMblpmLPBp5nw9xkemFX8opOjS2KdbgU
Gv+XtCvW0FEmMqiK3nuPoquu6qnftZ9+N6tlD9WmgV4g5abpj7LVy0mraXoZRWDqe5HW
pczvbl+20tAZFS7HFYn1i+H0QacqMyHyojBB6qQbUMD1Kzl1zEaIYDuwn/A5RtjjVKv1
A5RF8XU5/t4dezoB2BCI8+3MaTwFBCxpWY6z84+02dQrdOJo9ChkZKpcFhuC4RZJW3KI
Z4zQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748439544; x=1749044344;
h=content-transfer-encoding:mime-version:message-id:date:subject:cc
:to:from:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=Gcx+WlhvWOc4VQ1Qrqwnlw9XmLmnMgNUTYRDj8TgLrA=;
b=asPg28s55Zct2QwGYbesEBGxKjMO+ngcT0i8TzK1CfONlIMMZqc24pfkLsrc+ZBPiL
0Nx2jWs0MIQGhCOSpZgTg7rNX9/OD3EN4H9MCZyxg88Q4c7aqoCVvUL/fA08r3Fycvi1
lBiEsOaB4CFixrUByBKNj+6nBzM0et2NSPaBhshdAQkt4IrnX3+xOIBaTYxBM4+XKxcg
sPCIRnaoIO3FWk77AOqWzrzmQoQFJ43wESbusZD7dQrPmcohiv1JjV8Tj2q6xRdrLwti
4GP4UzdaIdEov1p5fXgkxXT+whg8u0dmwBwD/IS2rxyEKhRJc8bX84VNOpvYsoQ+qePR
kvJQ==
X-Forwarded-Encrypted: i=1; AJvYcCVRkKiyjNAzBc0b5joIPpvjbxdGaA1wrKYrCtFlUYK4n5TLretrXUgrr0v61p/Pt2/fW8EOc4XyHPLX@xxxxxxxxxxxxxxx, AJvYcCVYwUPchKhiWkNjomnLbrUrJ3X3JXTbVVnHUZulKqDQqErLWZ3vVbgAoSE18SXlZgYBmS3ZLuSLIVDkhVqQ@xxxxxxxxxxxxxxx, AJvYcCWUIj9fkLmTk343DamkVTnfvB3eUmRYJct711IKqTiU9VeXyIf3aZzLU2avUy0Mp8WF3VIXe1uVCSrNFnEKmEQNjfM=@vger.kernel.org
X-Gm-Message-State: AOJu0Yxq95ODuLHAEhfJw1sDCEcH+SXw7zql6OaJ/EcgTl99cwBKbrw1
7qlSUOA3QOHtre5tbAYS0J8a0glTQlwXhGeOkf3BUjb/oTpFpu9XiN9MxqEUK1jZ
X-Gm-Gg: ASbGnctbtL9TOPvV4Qh1TuB9Wf0jqHWkN1UpdFIQvutF7HdCr3fB9KkEXpvMhOiIdAv
50+A5+SF5Qni5z7jApQ+1XHgz4ainystclFCJzOHCGKIHT1yb6ep4bbGpFymEMKP6dQy/zv0w/O
/DbxVx6MmaBDzf/itLQqDWWdmtHDbl3jAjHEITuzCxK4j1PD0GAdd8PqzYXZecmkyXB0+AqFsQQ
DSlErh4RFggNkubtd4LssElKXaXo1A3ZF7xfJnw7xIqHUFlRH0ZtocFjF4vFNJ+yQ20kbDnGXb3
kFQmaHX2oZJBj9R/qgHY3Vwy1u7qOGNba5wntwc1jBGx6eZArxGHZyoyJmV1T6KM9yPgH+8v53V
e
X-Google-Smtp-Source: AGHT+IGMEQa3lxp2ZRj8eP4aLq9vdjyWpPZAPQ7Y+N8XaT3vap/p8VkDkHt1ioZAELbgXk1At/1pmQ==
X-Received: by 2002:a5d:4448:0:b0:3a4:e673:26cb with SMTP id ffacd0b85a97d-3a4e6732770mr2920173f8f.40.1748439543816;
Wed, 28 May 2025 06:39:03 -0700 (PDT)
Received: from iku.Home ([2a06:5906:61b:2d00:7078:193c:ccdc:e2f5])
by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-450064a133csm22631925e9.11.2025.05.28.06.39.02
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 06:39:03 -0700 (PDT)
From: Prabhakar <prabhakar.csengg@xxxxxxxxx>
X-Google-Original-From: Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
To: Vinod Koul <vkoul@xxxxxxxxxx>,
Kishon Vijay Abraham I <kishon@xxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Geert Uytterhoeven <geert+renesas@xxxxxxxxx>,
Magnus Damm <magnus.damm@xxxxxxxxx>,
Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx>
Cc: linux-phy@xxxxxxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
linux-renesas-soc@xxxxxxxxxxxxxxx,
Prabhakar <prabhakar.csengg@xxxxxxxxx>,
Biju Das <biju.das.jz@xxxxxxxxxxxxxx>,
Fabrizio Castro <fabrizio.castro.jz@xxxxxxxxxxx>,
Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Subject: [PATCH] dt-bindings: phy: renesas,usb2-phy: Document RZ/V2N SoC support
Date: Wed, 28 May 2025 14:38:58 +0100
Message-ID: <20250528133858.168582-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
X-Mailer: git-send-email 2.49.0
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Document support for the USB2.0 phy found on the Renesas RZ/V2N
(R9A09G056) SoC. The USB2.0 phy is functionally identical to that on the
RZ/V2H(P) SoC, so no driver changes are needed. The existing
`renesas,usb2-phy-r9a09g057` compatible will be used as a fallback
for the RZ/V2N SoC.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
---
Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml b/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
index 2822dce8d9f4..f45c5f039ae8 100644
--- a/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
+++ b/Documentation/devicetree/bindings/phy/renesas,usb2-phy.yaml
@@ -40,6 +40,10 @@ properties:
- renesas,usb2-phy-r9a07g054 # RZ/V2L
- const: renesas,rzg2l-usb2-phy
+ - items:
+ - const: renesas,usb2-phy-r9a09g056 # RZ/V2N
+ - const: renesas,usb2-phy-r9a09g057
+
reg:
maxItems: 1
--
2.49.0
Return-Path: <linux-kernel+bounces-665551-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id EC55741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:39:54 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 7ABAC7A24E6
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:38:36 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 9EA592882AC;
Wed, 28 May 2025 13:39:46 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="IhgsVX/V"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id DB4B726A0E0;
Wed, 28 May 2025 13:39:45 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439586; cv=none; b=R4CAcwUVZhwcltaY74KloXtOTZYHas3jitYKS/NG1r17IeyWyLSXmAYBnhG1CN7aacM65EotwoKvj+GM09gciNzriqmcTE/GtK65mS3lSEJWaco2BcWfVjjpvYBDFeBCk2xevUC6Xbs52YMpBSXgIxm3MAGu/HKBaql4AxunYKY=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439586; c=relaxed/simple;
bh=ZDCkiWTSUutPpidL4yxIxvrpNX9oGUvaRD1iiumCPrA=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=Slar2TcWOufQSKt+J+NvqNb2/msMeKlplVG6kPa6+iG2qpbx/RsVVkRsjJPIYZOaDxpB3ZiQy70BUa6ZcnmXEU4IwQeXvLqwS0y3rXIbxBmb5jAxdIrQxj4wwuHozza8rrRM+QHXTwM+a7rgiBMtwzIlmGThOwtByBF15mcKCNQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=IhgsVX/V; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 32C48C4CEE7;
Wed, 28 May 2025 13:39:42 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748439585;
bh=ZDCkiWTSUutPpidL4yxIxvrpNX9oGUvaRD1iiumCPrA=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=IhgsVX/VgZv4mWKaIDhGq6Sy6mSnktVxPrbhwjX02DgsKX8s2yF6syckTB/0CYKZB
L3fwJ81DTGtaHSvdmzeXNEfxapzoddam2d1YuhPC1fkKX4tT5XoY3MbiShhzzhN2At
QT24NHe9A2T3A+ag5RRG4uef7m2cPbg83mMCJcq66IXft15D4+Rxe+M7hrogLlfTEo
o9LJ0fawVDictOX7WVHoIeHeIRGJqUj44RnxedcsPjjpcmqc4W5eIBsqM3LlCEe410
PGgUd1o9b/L3ELyMpPz8CtS1x54zijcL1yS+w/5+YqjVWX/Um0+mofy0ZwQ1ArElJ7
vscuhtbAGfH1g==
Date: Wed, 28 May 2025 14:39:39 +0100
From: Conor Dooley <conor@xxxxxxxxxx>
To: Dario Binacchi <dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx, michael@xxxxxxxxxxxxxxxxxxxx,
linux-amarula@xxxxxxxxxxxxxxxxxxxx,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Fabio Estevam <festevam@xxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Lee Jones <lee@xxxxxxxxxx>,
Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>,
Shawn Guo <shawnguo@xxxxxxxxxx>, devicetree@xxxxxxxxxxxxxxx,
imx@xxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
Subject: Re: [PATCH v2 1/4] dt-bindings: mfd: convert mxs-lradc bindings to
json-schema
Message-ID: <20250528-kitchen-snowy-e9a97843419f@spud>
References: <20250528121306.1464830-1-dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
<20250528121306.1464830-2-dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
protocol="application/pgp-signature"; boundary="hItL2TUlX6LkKJfG"
Content-Disposition: inline
In-Reply-To: <20250528121306.1464830-2-dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
--hItL2TUlX6LkKJfG
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On Wed, May 28, 2025 at 02:11:38PM +0200, Dario Binacchi wrote:
> Convert the Freescale MXS Low-Resoulution ADC (LRADC) device tree
> binding documentation to json-schema.
>=20
> The clocks and #io-channel-cells properties have also been added; They
> are present in the respective SoC DTSI files but were missing from the
> old mxs-lradc.txt file.
>=20
> Signed-off-by: Dario Binacchi <dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
Reviewed-by: Conor Dooley <conor.dooley@xxxxxxxxxxxxx>
--hItL2TUlX6LkKJfG
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iHUEABYIAB0WIQRh246EGq/8RLhDjO14tDGHoIJi0gUCaDcSGwAKCRB4tDGHoIJi
0soAAP9SfwHOSL1Ms8FpK7wxpbph1w25Kea+OlBcRLmP/UiQRAEAsqbLvfI5diEw
y90b4EL9sNqb/XkTmdiiZmLczzii1gU=
=5qe/
-----END PGP SIGNATURE-----
--hItL2TUlX6LkKJfG--
Return-Path: <linux-kernel+bounces-665552-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 4282641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:42:22 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 079FE3B03EB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:41:54 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 479BE288502;
Wed, 28 May 2025 13:42:03 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="dvDTI76j"
Received: from mail-qt1-f180.google.com (mail-qt1-f180.google.com [209.85.160.180])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 229752853EF
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:41:59 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.180
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439722; cv=none; b=ORlnpw26BRrYtGUhEZ3JIfR6vc4JtiOO7Lbtib8LdCUvthnPSMlNKHYO1tkXFjSlWYCpxvmoi3ITp4ILLBVnIv6mRWuc5cP8oDtsBLwD1rVdBrt5s7RlW9ea0qVDsf20Oxw9jSg0mKKoYYhJfLuNTTzNMjLGZNn1URqUc8l0jnk=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439722; c=relaxed/simple;
bh=q6+NUbSkDfbULFIkQSRxG3LqAFTgY8fsGbQ0EjJoDmg=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=qMwihIxCT3KJdPNDBDnOP9m38989vK3aXMr54Yv2Hcln2RcGn5O/PQe2R25g3mSYOx8UxbcDsaWvpeaTWDsKDnOQut0hnsQGB2o22p3xDWvQ4Ukl/DObkstO/V96I1NUo90sWN3ihvVCpbWgtE8ZE4nBTJpHk36DuoGtjc71604=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=dvDTI76j; arc=none smtp.client-ip=209.85.160.180
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com
Received: by mail-qt1-f180.google.com with SMTP id d75a77b69052e-47677b77725so41399911cf.3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 06:41:59 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=google.com; s=20230601; t=1748439719; x=1749044519; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=q6+NUbSkDfbULFIkQSRxG3LqAFTgY8fsGbQ0EjJoDmg=;
b=dvDTI76jZZGKZmTUy8Wff5m8yyne23JCwucBRkoFbQLgPKmcWzyLZ2j6RrrAgnWDlA
Db5GSXJPcEIp1gJIjJmCCAnswBjT7gBApuO25JjYe/9SkA5BSUfPS02mZUwesFAVHmL+
mrvM509kQpcIPbIWZPVIWspkkPPA3rxuHJKyloF4yoyc0wrHf8oA325hyPgtI6+n0Uo0
qUPjyuJAKbzSwr10pvyQU8OKlKxenOXH7rvszJf1DqxBrBU2ZdhzifhdezlkvRgijtFs
CLqEaXxVmkLzvJya9w2F3JcjClKiCSTiyXAgdCTx/qnSD394/bmpLZdVjJPwcdOpAOJK
EANw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748439719; x=1749044519;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=q6+NUbSkDfbULFIkQSRxG3LqAFTgY8fsGbQ0EjJoDmg=;
b=FjTRhJe5ZzMwejRELtuuqTrcp3w8kh+j12h9jX1cwGVc1JkFHvQkuFlkaecJaatbgl
zUIDEaSH6pkp/vR1DkoArFgHvR74Dgk0lsMU++0fGDB2k0yxahwT5MyGLI9ZgglcIy7Y
jQfYOHsbNMUJeUu9k/fS0NOLPfEzamxh9AjkJpRZcu0MXV8ldmSiuzC1fPHmwbTSts/w
J7xuYQXRAn3g01vunNmKrZ/kJgy60EYhk2i0cw1oqVW3j/hxXPP1q1F/LHZVdVRzo8Rc
aN5KGXJ7YICAndspxZBiBJaCW5XSXFSHgAfOOlId260AnvL4QP95nlkbBTkYKZ65OvDG
hoAQ==
X-Forwarded-Encrypted: i=1; AJvYcCWvKwwS6Pto4VVEgXD9MxbImLfiV5FdJH/mwyKmIsjus7lDHX4WnZAHPOH3jmn6pOiXhHUpXhHeJpJLnzs=@vger.kernel.org
X-Gm-Message-State: AOJu0Yx/L21gOA0WSHT1EQWTmiG0iuIAvE7HfiylkQ6hul4dYPvDmYfc
6eZ7LPP6TP2jOP9TXcjsXNK0qZKHL6Dsy+nKsFYX7oe4Ort1cljt9FUiQafjniXZAScGZbvUa2V
wBm8VbIp29ictywM/lryQS8hPXQ4Nm5qvKczgpn2x
X-Gm-Gg: ASbGncvn4OSgPhCCq5rrAuYMp/hzeNRbeUR5ZcAjMhqnYPGJBAILuZ3+ubXn7vBtXyc
mQQmqC4mwDgsZwXFokY4FE62Cj2Joxix14MH3zH90XtmXgDSDifDVHdtb0Ht82G4686mihtZR5H
33k1U/I4/tWqbiLQo5Oo6GRsW/8LdKLL8rJqfP1ky+e2nkjef98W34Fw==
X-Google-Smtp-Source: AGHT+IFXUSUWOaRqlGgnQsk3Ddxf9ikBISkt0/KlPz6xvIxI0l0YyOvrvNO9ok6mnWdgT9562252wxJ87xj+prWb40Q=
X-Received: by 2002:a05:622a:5c15:b0:476:add4:d2a9 with SMTP id
d75a77b69052e-49f46c33b2dmr291076841cf.30.1748439717984; Wed, 28 May 2025
06:41:57 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <CAN2Y7hxscai7JuC0fPE8DZ3QOPzO_KsE_AMCuyeTYRQQW_mA2w@xxxxxxxxxxxxxx>
<aDcLIh2lPkAWOVCI@xxxxxxxxx> <CAN2Y7hzKd+VxWy56q9ad8xwCcHPy5qoEaswZapnF87YkyYMcsA@xxxxxxxxxxxxxx>
In-Reply-To: <CAN2Y7hzKd+VxWy56q9ad8xwCcHPy5qoEaswZapnF87YkyYMcsA@xxxxxxxxxxxxxx>
From: Eric Dumazet <edumazet@xxxxxxxxxx>
Date: Wed, 28 May 2025 06:41:45 -0700
X-Gm-Features: AX0GCFtlj7sv-EQdf2aW5VpoDTLIYK53zi24E4KIItVmjWV2JQld-StOJ3wEEoo
Message-ID: <CANn89iLG4mgzHteS7ARwafw-5KscNv7vBD3zM9J6yZwDq+RbcQ@xxxxxxxxxxxxxx>
Subject: Re: [bug report, linux 6.15-rc4] A large number of connections in the
SYN_SENT state caused the nf_conntrack table to be full.
To: ying chen <yc1082463@xxxxxxxxx>
Cc: Florian Westphal <fw@xxxxxxxxx>, pablo@xxxxxxxxxxxxx, kadlec@xxxxxxxxxxxxx,
davem@xxxxxxxxxxxxx, kuba@xxxxxxxxxx, pabeni@xxxxxxxxxx,
netfilter-devel@xxxxxxxxxxxxxxx, coreteam@xxxxxxxxxxxxx,
netdev@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-11.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 6:26=E2=80=AFAM ying chen <yc1082463@xxxxxxxxx> wro=
te:
>
> On Wed, May 28, 2025 at 9:10=E2=80=AFPM Florian Westphal <fw@xxxxxxxxx> w=
rote:
> >
> > ying chen <yc1082463@xxxxxxxxx> wrote:
> > > Hello all,
> > >
> > > I encountered an "nf_conntrack: table full" warning on Linux 6.15-rc4=
.
> > > Running cat /proc/net/nf_conntrack showed a large number of
> > > connections in the SYN_SENT state.
> > > As is well known, if we attempt to connect to a non-existent port, th=
e
> > > system will respond with an RST and then delete the conntrack entry.
> > > However, when we frequently connect to non-existent ports, the
> > > conntrack entries are not deleted, eventually causing the nf_conntrac=
k
> > > table to fill up.
> >
> > Yes, what do you expect to happen?
> I understand that the conntrack entry should be deleted immediately
> after receiving the RST reply.
Then it probably hints that you do not receive RST for all your SYN packets=
.
Return-Path: <linux-kernel+bounces-665553-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id A38D941E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:42:42 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id E67F71BC4284
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:42:45 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 00CFB288C03;
Wed, 28 May 2025 13:42:07 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="GNsjXw9M"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1A45A288526;
Wed, 28 May 2025 13:42:05 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439726; cv=none; b=QxhoyCZGRjS3YQ34/MUdaKqTWRoUr/bHoO4FjWPOo5/GZjr29E5h/uDfoUyWIYbdvsG04hv8yBgLf7+1LB4GpreN61pXEgCMsJBWN2p+Ho5JPaj98w3J6UrG5Huyea4t2c68qfegrerj52dV8HkGhSHJFCQoN7aMuLLnl1dYIGU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439726; c=relaxed/simple;
bh=V9S/2REy6SRPwlWHL+UjOecCAm58nBM9YBmNFi5Tywo=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=A01xXwPLpDjaqBG5BScIvwppG1CDEPvM1o9dKc7ixDmS7j9vTMG5XJ6VUkQJfgqHPGIWZwMkUDIV9z9AflZbdtKc9hKpV+J5DxFSeuFpYuM7+GldbJziZiZXQT4rEUHf1bxP/gW/yFedc/zXLQteotgWO9Y9d47MQPfBQ1yujGo=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GNsjXw9M; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8C975C4CEF4;
Wed, 28 May 2025 13:42:05 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748439725;
bh=V9S/2REy6SRPwlWHL+UjOecCAm58nBM9YBmNFi5Tywo=;
h=References:In-Reply-To:From:Date:Subject:To:Cc:From;
b=GNsjXw9M9L1DpZv3jViNj4XkRdb+mXI+2m/G47jUDBV7WxLPvUEubGj+1ixOIJqRZ
e717/UmjcPxGcIwM1BREjJHjlHf7DQ6xXKLJDrFl1tj04VPf1Nl1KOdgCgSbhZFqe1
fB4uuTK4326ar1JEQv1u6vI97cf23A7RHdJvMGc4fpP8miZY3I2LE258OtWM74XvuF
uyjjxH7Jkv2eBczrYAMXiiQ4xzeMUCcmt8tKkGRjgdQl+plEZu+sAUbi3CzKXza/g/
qkqGVbbTWmfb3tPdTBHScCSnX5dqhvmCdvqDtXY9/jBXm1ah6dywidLzlVPvpGBgkS
H/v7sUXokTZ5Q==
Received: by mail-ed1-f41.google.com with SMTP id 4fb4d7f45d1cf-604b9c53f6fso6198532a12.2;
Wed, 28 May 2025 06:42:05 -0700 (PDT)
X-Forwarded-Encrypted: i=1; AJvYcCUdtAbmoiLXxg2NpIyWwsqEG7J42UhRVk1A0nkoP7m5sJggzseyC6MA5pTNOBf1/DWGFykmxNlfqDDe@xxxxxxxxxxxxxxx, AJvYcCV3Cp7hU17NJmrsFwFeoidb7DPFuxPCZA+U+5V2x7u+CFOoBx7oVm/BxLoheOD+YFbn+jjMKpZK2jMxC0A=@vger.kernel.org, AJvYcCX73D11X+0+lxz62B7/QDlmHJzZKFS+UhdTeNPLYr377J6/iIfUa/Clqe0OYO/OSAYnl12xEfZegv8WVLbH@xxxxxxxxxxxxxxx, AJvYcCXeW1In+Cg42CG1OuKvYhPAX9K12ySHnulPo+cZGmOlJT8DetDG7/fllGhk3erseAs3bxtqSWVMt50n@xxxxxxxxxxxxxxx
X-Gm-Message-State: AOJu0Yy4DhbO8wojG3FVTKyg4jyvKZDfiX283MHZ1cjmS2Yn14jEHpcv
Jdzrdkb2lz2MoaatIrqt4gxPcybLDNQxfFBkCdi62TdH2Jl+KveVobuGv6s6nX5IrnHrJjFyBVv
YjoU952VBTKI3d3E9cFqlXFOvO/nzsA==
X-Google-Smtp-Source: AGHT+IF33pDJOIkUnFeeemo7C8vEsrRKhSwUSbgBJjMPDXVeNtNZPzFqXBOHGol2WTjwYaKgOgXZo2D8V9wI8E6hrhc=
X-Received: by 2002:a17:907:7f09:b0:ad5:23e3:48b6 with SMTP id
a640c23a62f3a-ad85b2b586fmr1522153166b.45.1748439724013; Wed, 28 May 2025
06:42:04 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250520-6-10-rocket-v5-0-18c9ca0fcb3c@xxxxxxxxxxxxxxx> <20250520-6-10-rocket-v5-1-18c9ca0fcb3c@xxxxxxxxxxxxxxx>
In-Reply-To: <20250520-6-10-rocket-v5-1-18c9ca0fcb3c@xxxxxxxxxxxxxxx>
From: Rob Herring <robh@xxxxxxxxxx>
Date: Wed, 28 May 2025 08:41:51 -0500
X-Gmail-Original-Message-ID: <CAL_Jsq+2mvUDWWvtPSryAiCNJP_=1vNRxARxWTS=-O-LTQO3Dg@xxxxxxxxxxxxxx>
X-Gm-Features: AX0GCFtEoojAQ2L7InqgVIis2qLVvXMe-zX4FDkooFBAAdsDZZRxWtAdT4YSjTY
Message-ID: <CAL_Jsq+2mvUDWWvtPSryAiCNJP_=1vNRxARxWTS=-O-LTQO3Dg@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v5 01/10] dt-bindings: npu: rockchip,rknn: Add bindings
To: Tomeu Vizoso <tomeu@xxxxxxxxxxxxxxx>
Cc: Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>, Conor Dooley <conor+dt@xxxxxxxxxx>,
Heiko Stuebner <heiko@xxxxxxxxx>, Oded Gabbay <ogabbay@xxxxxxxxxx>, Jonathan Corbet <corbet@xxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>, Maxime Ripard <mripard@xxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>, David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
Sumit Semwal <sumit.semwal@xxxxxxxxxx>, =?UTF-8?Q?Christian_K=C3=B6nig?= <christian.koenig@xxxxxxx>,
Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx>,
Nicolas Frattaroli <nicolas.frattaroli@xxxxxxxxxxxxx>, Jeff Hugo <jeff.hugo@xxxxxxxxxxxxxxxx>,
devicetree@xxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx,
linux-rockchip@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, linux-doc@xxxxxxxxxxxxxxx,
linux-media@xxxxxxxxxxxxxxx, linaro-mm-sig@xxxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 20, 2025 at 5:27=E2=80=AFAM Tomeu Vizoso <tomeu@xxxxxxxxxxxxxxx=
> wrote:
>
> Add the bindings for the Neural Processing Unit IP from Rockchip.
>
> v2:
> - Adapt to new node structure (one node per core, each with its own
> IOMMU)
> - Several misc. fixes from Sebastian Reichel
>
> v3:
> - Split register block in its constituent subblocks, and only require
> the ones that the kernel would ever use (Nicolas Frattaroli)
> - Group supplies (Rob Herring)
> - Explain the way in which the top core is special (Rob Herring)
>
> v4:
> - Change required node name to npu@ (Rob Herring and Krzysztof Kozlowski)
> - Remove unneeded items: (Krzysztof Kozlowski)
> - Fix use of minItems/maxItems (Krzysztof Kozlowski)
> - Add reg-names to list of required properties (Krzysztof Kozlowski)
> - Fix example (Krzysztof Kozlowski)
>
> v5:
> - Rename file to rockchip,rk3588-rknn-core.yaml (Krzysztof Kozlowski)
> - Streamline compatible property (Krzysztof Kozlowski)
>
> Signed-off-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx>
> Signed-off-by: Tomeu Vizoso <tomeu@xxxxxxxxxxxxxxx>
> ---
> .../bindings/npu/rockchip,rk3588-rknn-core.yaml | 147 +++++++++++++++=
++++++
> 1 file changed, 147 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/npu/rockchip,rk3588-rknn-c=
ore.yaml b/Documentation/devicetree/bindings/npu/rockchip,rk3588-rknn-core.=
yaml
> new file mode 100644
> index 0000000000000000000000000000000000000000..9eb426367afcbc03c387d43c4=
b8250cdd1b9ee86
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/npu/rockchip,rk3588-rknn-core.yam=
l
> @@ -0,0 +1,147 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/npu/rockchip,rk3588-rknn-core.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Neural Processing Unit IP from Rockchip
> +
> +maintainers:
> + - Tomeu Vizoso <tomeu@xxxxxxxxxxxxxxx>
> +
> +description:
> + Rockchip IP for accelerating inference of neural networks, based on NV=
IDIA's
> + open source NVDLA IP.
> +
> + There is to be a node per each core in the NPU. In Rockchip's design t=
here
> + will be one core that is special and needs to be powered on before any=
of the
> + other cores can be used. This special core is called the top core and =
should
> + have the compatible string that corresponds to top cores.
Is this really a distinction in the h/w? If you change which core is
the top one in the DT, does it still work?
> +
> +properties:
> + $nodename:
> + pattern: '^npu@[a-f0-9]+$'
> +
> + compatible:
> + enum:
> + - rockchip,rk3588-rknn-core-top
> + - rockchip,rk3588-rknn-core
> +
> + reg:
> + maxItems: 3
> +
> + reg-names:
> + items:
> + - const: pc
> + - const: cna
> + - const: core
> +
> + clocks:
> + minItems: 2
> + maxItems: 4
> +
> + clock-names:
> + items:
> + - const: aclk
> + - const: hclk
> + - const: npu
> + - const: pclk
> + minItems: 2
It is odd that the non-top cores only have bus clocks and no module
clock. But based on the clock names, I'm guessing the aclk/hclk are
not shared, but the npu and pclk are shared. Since you make the top
core probe first, then it will enable the shared clocks and the
non-top cores don't have to worry about them. If so, that is wrong as
it is letting the software design define the bindings.
Rob
Return-Path: <linux-kernel+bounces-665554-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id C656641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:43:43 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 3A8C57A14D9
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:42:24 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id B82FA2882B0;
Wed, 28 May 2025 13:43:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="cNLQj2/2"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id EF4DD2036E9;
Wed, 28 May 2025 13:43:31 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439812; cv=none; b=Hc39Hkz9CAZMh0TstuBkKFynv2O8FhW53PW1sK0X4Topu6zc12/DSyNbuSmix3HQ/xKrODW6u0kWBqQGQwjsRY6gxD3s2kUCiyJ74GmIDzsZXuJPoH3WMX4PO0nrgZjv4/hyMIH1kG0NxMShdytHi/NSXEOqmCm9VLf8KQdVkp8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439812; c=relaxed/simple;
bh=vGq1HLmqALcNndq/cJJqVAuCSHa0StLEkf2aGzgkQAQ=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=jGtOZKi+9DFgD6M6hkuOc/lL6c0D0Cvfzm2g9ixBfBZqs0u0qKvsMPvv9TXls4PF9iaCiFSHeZG3VzjPplip8sfoiJFeRG5AZyW8tvKqT4F/zkbYABJBKqYVb62z0XW8vA00dcgaF9lmgtxMkbix3JJYzEOT9mhNQEeVPsGj1z0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cNLQj2/2; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id A0003C4CEE7;
Wed, 28 May 2025 13:43:29 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748439811;
bh=vGq1HLmqALcNndq/cJJqVAuCSHa0StLEkf2aGzgkQAQ=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=cNLQj2/2JUOfB2qDCAd+SDA0xzg1qDYDxvANL1nXVK2Z+5pepxh+ZXhYn8Vv4P++l
qHbXKCBahtH7aTtpv0xAAolaiIZj5TnUcDGs9LDsEMIb+Kw61bUtPcj1pN+8QTChHe
kL+2bJAftqGMyF4gGEgt+QFaPrJZG6k6/2d+o0ZK3yndspvsIUtcP/UMP1povs9h/y
WPmH70NjGmrr07yaRO0f0R7ZoOvHG48tXD951zJSaWTiRcqD5TxGzvxaHEFrjs7eNy
ckLouls9V0EHDvNKvjoRvBD2LqsJVQOSUSxLuMo3eh4WiSxSi0LE/aXjH0y3SkqqEY
LlNuwpOFTfrpw==
Date: Wed, 28 May 2025 14:43:27 +0100
From: Conor Dooley <conor@xxxxxxxxxx>
To: Drew Fustini <drew@xxxxxxxx>
Cc: Oliver O'Halloran <oohall@xxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>, nvdimm@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [RESEND PATCH v2] dt-bindings: pmem: Convert binding to YAML
Message-ID: <20250528-repulsive-osmosis-d473fbc61716@spud>
References: <20250520021440.24324-1-drew@xxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
protocol="application/pgp-signature"; boundary="y1QSOGp96aDgzao8"
Content-Disposition: inline
In-Reply-To: <20250520021440.24324-1-drew@xxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
--y1QSOGp96aDgzao8
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On Tue, May 27, 2025 at 11:17:04PM -0700, Drew Fustini wrote:
> Convert the PMEM device tree binding from text to YAML. This will allow
> device trees with pmem-region nodes to pass dtbs_check.
>=20
> Signed-off-by: Drew Fustini <drew@xxxxxxxx>
> ---
> v2 resend:
> - actually put v2 in the Subject
> - add Conor's Acked-by
> - https://lore.kernel.org/all/20250520-refract-fling-d064e11ddbdf@spud/
I guess this is the one you mentioned on irc?
Acked-by: Conor Dooley <conor.dooley@xxxxxxxxxxxxx>
--y1QSOGp96aDgzao8
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iHUEABYIAB0WIQRh246EGq/8RLhDjO14tDGHoIJi0gUCaDcS/wAKCRB4tDGHoIJi
0t39AP4vyfGKrHVY+bMT/PuBxs9qpgknPf0LIFJyfN2eoUZWEwEA8dr+FIxtNK1p
vEPMaK/ldN2T0lMdbk0tXTjE6+2fPg4=
=Z0xj
-----END PGP SIGNATURE-----
--y1QSOGp96aDgzao8--
Return-Path: <linux-kernel+bounces-665555-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id F135141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:44:19 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id C135C189E6E7
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:44:32 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id BD8512882AC;
Wed, 28 May 2025 13:44:11 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="R2aYRG6X"
Received: from mail-qt1-f172.google.com (mail-qt1-f172.google.com [209.85.160.172])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8555F3D561;
Wed, 28 May 2025 13:44:09 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.172
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439851; cv=none; b=OTNMoDIJt1ZVFYq2GQDW4znyuNV0llMIhjIkFfbR/LU45ue5uyQDmPoIq0F/sYCP7yMp87y2routFh8FoYYxvDrM2s1SHW5fVQ6y/t0U8oSTR7IUHWZ65z2vzuek0l/FOJg1whhJnUYqdp4YJYUa4MWtsGBSMHPWd0fdFABAxnQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439851; c=relaxed/simple;
bh=ivXPZGYPGUFwUchdnZTRkdaXf0SBh7scsOYbpyld1To=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=Q7skjtZjWXHb0oJeYXZgUjmsKdpCbZ8ah9rxBApPNpe7qeM+9lUr++ugpqD+orj1GvqqxVlzMcVPA9f0wxSADI+QWSZ38tjzS8QRz8K+jP3waPwCaaFqjDhAHWjETS1l61H/8dmfjtRPxUW6hMv80NnH6jicQwG24Cd8xl7HlOA=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=R2aYRG6X; arc=none smtp.client-ip=209.85.160.172
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-qt1-f172.google.com with SMTP id d75a77b69052e-47686580529so37647781cf.2;
Wed, 28 May 2025 06:44:09 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748439848; x=1749044648; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=ivXPZGYPGUFwUchdnZTRkdaXf0SBh7scsOYbpyld1To=;
b=R2aYRG6X70C3XjKApol9M4WLvymVFHGQumDPDX9rgrwNvdnIovv3j0J6q8xCSoDLD3
8/PxJBuQkPNDoC34REnPu7qDLRKmiM8D06c3lvQFtmKRSUu3BFBPvEBqka7ZQMhilb47
sjkq+eOqPYbS6ekC580JvpqpEmKL4s3XRDEMW8n/GCQ3KYlPSlYFFNefa+xCiqV1K0GM
TsYfYjp39k96xf9wyIcAHu0xFWJ11vbGInPUPk2BTOPmeW4magjjP78B6mePfTKF3Yhf
9103V9Z8CjDSm1Lr+ILB5+szBgvvBzk+6wtfWcsjDv4Xt0YdtZrl9jVkaI+IBxJXbPPY
yePw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748439848; x=1749044648;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=ivXPZGYPGUFwUchdnZTRkdaXf0SBh7scsOYbpyld1To=;
b=K7WFj9rVPFDQc1niocvUp/MBuajiaXtbDXKsmjMWGCgyEHuEWuKnyx1wj0wu/8MPGU
bnZGQrXzpPBLLbTy7GUCWfOAG9aIVPbwvUH7NXnDVnirLrC6JmuzJMKN1pHFwcqk3h7Q
gvk8KnFYgvCCnQhg0P74ERTPxGA3JWQcwTjtvYOVGfGnVve3vOeS+f6pa/IAe7RgTQbx
+Wq+VhwM4i+TjWJAVXwOfLPA+TaF02xq9t3OGIRsueQ2aQyGtQT/p7iJ5WNZRvclmX/A
mFdnBuixBziS6jF9rMHf4mY0vRQiKAjNZ4u/jKCdfylBObKAE6mgvAFipqPyeqOvCxls
23sA==
X-Forwarded-Encrypted: i=1; AJvYcCWuhSMjnh/99W9I4wQAU6VKlB/b9Y8PpzodvJGf5dU5jnKkGvLV1zSRs91ZWjr4zpvtNj363ecEeh1VrHw=@vger.kernel.org
X-Gm-Message-State: AOJu0Yz1E/tM0eDlfuhNJIrNEluOGwgww9yE80HzkRAda815AQxaA/4J
4OxMAsjmKhHay2tgTfcuZVdoD3dqt3HrIGawaoBkwjt+iQjwGCbsC4qqpEmnyk21jYN6Dob4Ahu
zG7nYtcMwDuFR6IIVtlJocos1qcGQya8Yt9aaCeE=
X-Gm-Gg: ASbGncsmlWR4By+QTGylRN3f5DKij8jQ4Odu5KZbgyYJqcTRqumBskILa7wdqpRiNlK
Y7DGUti7PCmJ6RpcZWTuZ94ko0oBn0G8R2+EBNOeeEwe2YWBwRyNvbyq8fdFDnVIIzQNY9+mvqS
useFKRhZbuwFoj3f6Xf5/taIBqnpULL3qcsg==
X-Google-Smtp-Source: AGHT+IEfSGvN6Gi909FdJQ3g/ClhFdpKwiegzmk+Sy9zxTE47iRN11ZKMPOf7QUGW25a6G9/V6ECQjq6/86XIs5fPvY=
X-Received: by 2002:a05:6102:8096:b0:4c1:9780:383e with SMTP id
ada2fe7eead31-4e42406acdamr13895204137.4.1748439837746; Wed, 28 May 2025
06:43:57 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <CAOU40uDDL9-ivR=8nx67T9_j+1+2dCXNyBUqFvOPyv0cpPr5Yg@xxxxxxxxxxxxxx>
<j3gqh3iv7hsanemh3ctsrzcd3hljhsmdwe65vrnsjrygsz5dzx@7wvtrimqooim>
In-Reply-To: <j3gqh3iv7hsanemh3ctsrzcd3hljhsmdwe65vrnsjrygsz5dzx@7wvtrimqooim>
From: Xianying Wang <wangxianying546@xxxxxxxxx>
Date: Wed, 28 May 2025 21:43:46 +0800
X-Gm-Features: AX0GCFuT-UwMcOAG3n596KKZpc-LvyGfVxAFZf_8ZpDZcgKK1gzjSc_o5WzfRKI
Message-ID: <CAOU40uAurZLiPCiDNh8Gz3JaYOSRGTLkqQNddZi=kX3UdkP7Pw@xxxxxxxxxxxxxx>
Subject: Re: [BUG] general protection fault in input_unregister_device
To: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx>
Cc: linux-input@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Dmitry,
Here is the trimmed reproducer. If it still doesn't work, please feel
free to contact me anytime.
C reproducer :https://pastebin.com/raw/NkJX5AfA
Best regards,
Xianying
Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx> =E4=BA=8E2025=E5=B9=B45=E6=9C=
=8828=E6=97=A5=E5=91=A8=E4=B8=89 05:02=E5=86=99=E9=81=93=EF=BC=9A
>
> Hi Xianying,
>
> On Tue, May 27, 2025 at 04:21:40PM +0800, Xianying Wang wrote:
> > Hi,
> >
> > I discovered a kernel crash described as "general protection fault in
> > input_unregister_device." The crash occurs in the input subsystem,
> > specifically in the function input_unregister_device
> > (drivers/input/input.c:2500), due to dereferencing a non-canonical
> > address, resulting in a general protection fault.
> >
> > According to the crash report, the faulting address is
> > 0xdffffc00000000a4, which corresponds to a KASAN shadow memory region.
> > The crash is triggered when mac_hid_toggle_emumouse calls
> > mac_hid_stop_emulation, which in turn invokes
> > mac_hid_destroy_emumouse, eventually leading to a call to
> > input_unregister_device with an invalid or uninitialized input_dev
> > pointer.
> >
> > The report indicates that a corrupted or NULL input_dev structure was
> > passed into input_unregister_device, possibly due to a use-after-free,
> > double unregister, or incomplete initialization in the emumouse path
> > in mac_hid.
> >
> > This can be reproduced on:
> >
> > HEAD commit:
> >
> > commit adc218676eef25575469234709c2d87185ca223a
> >
> > report: https://pastebin.com/raw/4TeX6E8M
> >
> > console output : https://pastebin.com/raw/ZE2AZ1Gq
> >
> > kernel config : https://pastebin.com/raw/BpCtvUt2
> >
> > C reproducer :
> >
> > part1=EF=BC=9Ahttps://pastebin.com/raw/jhU9v99k
> >
> > part2=EF=BC=9Ahttps://pastebin.com/raw/dcaKCHZ1
> >
> > part3=EF=BC=9Ahttps://pastebin.com/raw/CzgGBb7C
> >
> > part4=EF=BC=9Ahttps://pastebin.com/raw/MnwtYcjd
> >
> > part5=EF=BC=9Ahttps://pastebin.com/raw/VE8xNmHT
>
> Could you try to trim the reproducer to something more manageable? There
> are really too many things going on to make sense of it...
>
> I guess we are ending calling mac_hid_stop_emulation() with NULL input
> device, but I can;t see how this happens unless we manage to overwrite
> sysctl table memory with some garbae earlier....
>
> Thanks.
>
> --
> Dmitry
Return-Path: <linux-kernel+bounces-665556-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D36CA41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:44:31 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id DD9F21BA2FDD
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:44:44 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id EE7FD28851E;
Wed, 28 May 2025 13:44:16 +0000 (UTC)
Received: from foss.arm.com (foss.arm.com [217.140.110.172])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 47CE43D561;
Wed, 28 May 2025 13:44:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439856; cv=none; b=h3tXLAJWVfW1P03+dhUb0QmIZO/7T9xy3U7eWyXWhqu2vzNZg3lK0fy847c8IeRx5AOLYpnc553xr5w/C5bBdNXyc+J23L4JXBt96vmIbg4SZlhDgJH4aUUhFRlWfT6H2VqZeJJwM9G1zByoJOXrp25D2L0UwqxhLA/lvrnHr50=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439856; c=relaxed/simple;
bh=ssEvzcF1KEh4FgwJ6vegA4MuX2MBgaNAln+EWkDI8pY=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=P7NS4LsgOEljA8YO08fVjFCu1F5E/zNSpkQ4HyUragobsx7dJeNAWZLmtqeN4daiVj4J8vCAJoOVyzLRAT+dNuDF5OM9QBvTdZnfH0xH78kWM8/HxXb4xIZ6Um/xKrrQ6MkznsI8WJtqJ2uRHk7ixrwHMEw9Fw2rmW99acgA4k4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 112811A2D;
Wed, 28 May 2025 06:43:57 -0700 (PDT)
Received: from [10.57.94.142] (unknown [10.57.94.142])
by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 071D93F5A1;
Wed, 28 May 2025 06:44:11 -0700 (PDT)
Message-ID: <7df6ecb7-0aa8-4f18-ba8a-ce6d095cbd42@xxxxxxx>
Date: Wed, 28 May 2025 14:44:10 +0100
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH v2] selftests/mm: add simple VM_PFNMAP tests based on
mmap'ing /dev/mem
Content-Language: en-GB
To: David Hildenbrand <david@xxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx
Cc: linux-mm@xxxxxxxxx, linux-kselftest@xxxxxxxxxxxxxxx,
Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>, Shuah Khan <shuah@xxxxxxxxxx>,
Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>, Ingo Molnar
<mingo@xxxxxxxxxx>, Peter Xu <peterx@xxxxxxxxxx>, Dev Jain
<dev.jain@xxxxxxx>, Aishwarya TCV <Aishwarya.TCV@xxxxxxx>
References: <20250509153033.952746-1-david@xxxxxxxxxx>
<232960c2-81db-47ca-a337-38c4bce5f997@xxxxxxx>
<7cb7f23a-ce9e-4664-8083-deb73ed23da3@xxxxxxxxxx>
<3c15a093-7c19-4c2a-a571-56a5ed4b445f@xxxxxxxxxx>
<ee8db861-3632-48a1-977d-b05670d9637a@xxxxxxx>
<2de2bbdb-f719-4faf-822c-d855f1eb653a@xxxxxxxxxx>
From: Ryan Roberts <ryan.roberts@xxxxxxx>
In-Reply-To: <2de2bbdb-f719-4faf-822c-d855f1eb653a@xxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 28/05/2025 13:40, David Hildenbrand wrote:
> On 28.05.25 12:53, Ryan Roberts wrote:
>> On 28/05/2025 11:48, David Hildenbrand wrote:
>>> On 28.05.25 12:44, David Hildenbrand wrote:
>>>> On 28.05.25 12:34, Ryan Roberts wrote:
>>>>> Hi David,
>>>>>
>>>>>
>>>>> On 09/05/2025 16:30, David Hildenbrand wrote:
>>>>>> Let's test some basic functionality using /dev/mem. These tests will
>>>>>> implicitly cover some PAT (Page Attribute Handling) handling on x86.
>>>>>>
>>>>>> These tests will only run when /dev/mem access to the first two pages
>>>>>> in physical address space is possible and allowed; otherwise, the tests
>>>>>> are skipped.
>>>>>
>>>>> We are seeing really horrible RAS errors with this test when run on arm64 tx2
>>>>> machine. Based solely on reviewing the code, I think the problem is that tx2
>>>>> doesn't have anything at phys address 0, so test_read_access() is trying to
>>>>> put
>>>>> trasactions out to a bad address on the bus.
>>>>>
>>>>> tx2 /proc/iomem:
>>>>>
>>>>> $ sudo cat /proc/iomem
>>>>> 30000000-37ffffff : PCI ECAM
>>>>> 38000000-3fffffff : PCI ECAM
>>>>> 40000000-5fffffff : PCI Bus 0000:00
>>>>> ...
>>>>>
>>>>> Whereas my x86 box has some reserved memory:
>>>>>
>>>>> $ sudo cat /proc/iomem
>>>>> 00000000-00000fff : Reserved
>>>>> 00001000-0003dfff : System RAM
>>>>> ...
>>>>>
>>>>
>>>> A quick fix would be to make this test specific to x86 (the only one I
>>>> tested on). We should always have the lower two pages IIRC (BIOS stuff etc).
>>
>> I'm not sure how far along this patch is? I'm guessing mm-stable? Perhaps you
>> can do the quick fix, then I'd be happy to make this more robust for arm64 later?
>
> Can you give the following a quick test on that machine? Then, I can send it as a
> proper patch later.
The machine in question is part of our CI infra, so not easy for me to run an
ad-hoc test. I've asked Aishwarya if it's possible to queue up a CI job with the
patch, but that will involve running the whole test run I think, so probably
will take a couple of days to turn around.
FWIW, the change looks good to me:
Reviewed-by: Ryan Roberts <ryan.roberts@xxxxxxx>
>
>
> From 40fea063f2fcf1474fb47cb9aebdb04fd825032b Mon Sep 17 00:00:00 2001
> From: David Hildenbrand <david@xxxxxxxxxx>
> Date: Wed, 28 May 2025 14:35:23 +0200
> Subject: [PATCH] selftests/mm: two fixes for the pfnmap test
>
> When unregistering the signal handler, we have to pass SIG_DFL, and
> blindly reading from PFN 0 and PFN 1 seems to be problematic on !x86
> systems. In particularly, on arm64 tx2 machines where noting resides
> at these physical memory locations, we can generate RAS errors.
>
> Let's fix it by scanning /proc/iomem for actual "System RAM".
>
> Reported-by: Ryan Roberts <ryan.roberts@xxxxxxx>
> Closes: https://lore.kernel.org/all/232960c2-81db-47ca-
> a337-38c4bce5f997@xxxxxxx/T/#u
> Fixes: 2616b370323a ("selftests/mm: add simple VM_PFNMAP tests based on
> mmap'ing /dev/mem")
> Signed-off-by: David Hildenbrand <david@xxxxxxxxxx>
> ---
> Â tools/testing/selftests/mm/pfnmap.c | 61 +++++++++++++++++++++++++++--
> Â 1 file changed, 57 insertions(+), 4 deletions(-)
>
> diff --git a/tools/testing/selftests/mm/pfnmap.c b/tools/testing/selftests/mm/
> pfnmap.c
> index 8a9d19b6020c7..4943927a7d1ea 100644
> --- a/tools/testing/selftests/mm/pfnmap.c
> +++ b/tools/testing/selftests/mm/pfnmap.c
> @@ -12,6 +12,8 @@
> Â #include <stdint.h>
> Â #include <unistd.h>
> Â #include <errno.h>
> +#include <stdio.h>
> +#include <ctype.h>
> Â #include <fcntl.h>
> Â #include <signal.h>
> Â #include <setjmp.h>
> @@ -43,14 +45,62 @@ static int test_read_access(char *addr, size_t size, size_t
> pagesize)
> Â Â Â Â Â Â Â Â Â Â Â Â /* Force a read that the compiler cannot optimize out. */
> Â Â Â Â Â Â Â Â Â Â Â Â *((volatile char *)(addr + offs));
> Â Â Â Â }
> -Â Â Â if (signal(SIGSEGV, signal_handler) == SIG_ERR)
> +Â Â Â if (signal(SIGSEGV, SIG_DFL) == SIG_ERR)
> Â Â Â Â Â Â Â Â return -EINVAL;
> Â
> Â Â Â Â return ret;
> Â }
> Â
> +static int find_ram_target(off_t *phys_addr,
> +Â Â Â Â Â Â Â unsigned long pagesize)
> +{
> +Â Â Â unsigned long long start, end;
> +Â Â Â char line[80], *end_ptr;
> +Â Â Â FILE *file;
> +
> +Â Â Â /* Search /proc/iomem for the first suitable "System RAM" range. */
> +Â Â Â file = fopen("/proc/iomem", "r");
> +Â Â Â if (!file)
> +Â Â Â Â Â Â Â return -errno;
> +
> +Â Â Â while (fgets(line, sizeof(line), file)) {
> +Â Â Â Â Â Â Â /* Ignore any child nodes. */
> +Â Â Â Â Â Â Â if (!isalnum(line[0]))
> +Â Â Â Â Â Â Â Â Â Â Â continue;
> +
> +Â Â Â Â Â Â Â if (!strstr(line, "System RAM\n"))
> +Â Â Â Â Â Â Â Â Â Â Â continue;
> +
> +Â Â Â Â Â Â Â start = strtoull(line, &end_ptr, 16);
> +Â Â Â Â Â Â Â /* Skip over the "-" */
> +Â Â Â Â Â Â Â end_ptr++;
> +Â Â Â Â Â Â Â /* Make end "exclusive". */
> +Â Â Â Â Â Â Â end = strtoull(end_ptr, NULL, 16) + 1;
> +
> +Â Â Â Â Â Â Â /* Actual addresses are not exported */
> +Â Â Â Â Â Â Â if (!start && !end)
> +Â Â Â Â Â Â Â Â Â Â Â break;
> +
> +Â Â Â Â Â Â Â /* We need full pages. */
> +Â Â Â Â Â Â Â start = (start + pagesize - 1) & ~(pagesize - 1);
> +Â Â Â Â Â Â Â end &= ~(pagesize - 1);
> +
> +Â Â Â Â Â Â Â if (start != (off_t)start)
> +Â Â Â Â Â Â Â Â Â Â Â break;
> +
> +Â Â Â Â Â Â Â /* We need two pages. */
> +Â Â Â Â Â Â Â if (end > start + 2 * pagesize) {
> +Â Â Â Â Â Â Â Â Â Â Â fclose(file);
> +Â Â Â Â Â Â Â Â Â Â Â *phys_addr = start;
> +Â Â Â Â Â Â Â Â Â Â Â return 0;
> +Â Â Â Â Â Â Â }
> +Â Â Â }
> +Â Â Â return -ENOENT;
> +}
> +
> Â FIXTURE(pfnmap)
> Â {
> +Â Â Â off_t phys_addr;
> Â Â Â Â size_t pagesize;
> Â Â Â Â int dev_mem_fd;
> Â Â Â Â char *addr1;
> @@ -63,14 +113,17 @@ FIXTURE_SETUP(pfnmap)
> Â {
> Â Â Â Â self->pagesize = getpagesize();
> Â
> +Â Â Â /* We'll require two physical pages throughout our tests ... */
> +Â Â Â if (find_ram_target(&self->phys_addr, self->pagesize))
> +Â Â Â Â Â Â Â SKIP(return, "Cannot find ram target in '/dev/iomem'\n");
> +
> Â Â Â Â self->dev_mem_fd = open("/dev/mem", O_RDONLY);
> Â Â Â Â if (self->dev_mem_fd < 0)
> Â Â Â Â Â Â Â Â SKIP(return, "Cannot open '/dev/mem'\n");
> Â
> -Â Â Â /* We'll require the first two pages throughout our tests ... */
> Â Â Â Â self->size1 = self->pagesize * 2;
> Â Â Â Â self->addr1 = mmap(NULL, self->size1, PROT_READ, MAP_SHARED,
> -Â Â Â Â Â Â Â Â Â Â Â Â Â Â self->dev_mem_fd, 0);
> +Â Â Â Â Â Â Â Â Â Â Â Â Â Â self->dev_mem_fd, self->phys_addr);
> Â Â Â Â if (self->addr1 == MAP_FAILED)
> Â Â Â Â Â Â Â Â SKIP(return, "Cannot mmap '/dev/mem'\n");
> Â
> @@ -129,7 +182,7 @@ TEST_F(pfnmap, munmap_split)
> Â Â Â Â Â */
> Â Â Â Â self->size2 = self->pagesize;
> Â Â Â Â self->addr2 = mmap(NULL, self->pagesize, PROT_READ, MAP_SHARED,
> -Â Â Â Â Â Â Â Â Â Â Â Â Â Â self->dev_mem_fd, 0);
> +Â Â Â Â Â Â Â Â Â Â Â Â Â Â self->dev_mem_fd, self->phys_addr);
> Â Â Â Â ASSERT_NE(self->addr2, MAP_FAILED);
> Â }
> Â
Return-Path: <linux-kernel+bounces-665557-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id B6CD841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:44:50 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 606114E43CE
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:44:51 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 26A20288506;
Wed, 28 May 2025 13:44:42 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=lunn.ch header.i=@lunn.ch header.b="O8iQQ/V8"
Received: from vps0.lunn.ch (vps0.lunn.ch [156.67.10.101])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id A7E623D561;
Wed, 28 May 2025 13:44:39 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=156.67.10.101
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439881; cv=none; b=WHgA/ER/+0jHzVbI8IeeCKnV3PmFqYdeTxmKZj2b7TuatlApPHR5S1052xS01ieqrcRLEJQuTfEQkTbnTSZ39K4tDCxC3DeIu0smtu1DxBPNRbiQPNCgrub3JZUS0Y5LL2iX5pLTi9kNE4fdjCo7mT0Z4HQOAOE8Qvne/Ow7uiE=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439881; c=relaxed/simple;
bh=E15IkgiQNik1xTR6jnoo1aTBBTDqNYSMkDv5a0E6euk=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=kwQFB83XEbvUEZPY4sRrjF99KrArG6PV0LNkAfO579VkxggBmytLag8GX17zL50as65LmNZ1JfHCJ1qrwsOyI1Oi5R6Q5niyXicmZrXmuO4jxJ5LU47nESU3VsAVMKsmOzmQ9RBUf70/7OEEdY9jubaAFj8ZqwO5AUe92RSIaeA=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=lunn.ch; spf=pass smtp.mailfrom=lunn.ch; dkim=pass (1024-bit key) header.d=lunn.ch header.i=@lunn.ch header.b=O8iQQ/V8; arc=none smtp.client-ip=156.67.10.101
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=lunn.ch
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=lunn.ch
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lunn.ch;
s=20171124; h=In-Reply-To:Content-Disposition:Content-Type:MIME-Version:
References:Message-ID:Subject:Cc:To:From:Date:From:Sender:Reply-To:Subject:
Date:Message-ID:To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:
Content-ID:Content-Description:Content-Disposition:In-Reply-To:References;
bh=MBbrn7eQDWJVCAKImqv3Knw41beS2cHZDNUxETDEwfM=; b=O8iQQ/V8bHl6lOCEVTlkgRjo44
gcgAFR2K9InA3NJSn5okPeS35of+VlF+V2w7viINNPtJbrMNDgEsU6GQ4isK4scegHzenw8YdCiSd
nVUaAEytpdXsvMKdXFQTmALESkOqOSgRjHyrC+sjcGoTmnR9KapDaflyr9RjgT+u0MrU=;
Received: from andrew by vps0.lunn.ch with local (Exim 4.94.2)
(envelope-from <andrew@xxxxxxx>)
id 1uKH55-00EBEE-SV; Wed, 28 May 2025 15:44:31 +0200
Date: Wed, 28 May 2025 15:44:31 +0200
From: Andrew Lunn <andrew@xxxxxxx>
To: weishangjuan@xxxxxxxxxxxxxxxxxx
Cc: andrew+netdev@xxxxxxx, davem@xxxxxxxxxxxxx, edumazet@xxxxxxxxxx,
kuba@xxxxxxxxxx, pabeni@xxxxxxxxxx, robh@xxxxxxxxxx,
krzk+dt@xxxxxxxxxx, conor+dt@xxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
mcoquelin.stm32@xxxxxxxxx, alexandre.torgue@xxxxxxxxxxx,
vladimir.oltean@xxxxxxx, rmk+kernel@xxxxxxxxxxxxxxx,
yong.liang.choong@xxxxxxxxxxxxxxx,
prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx, inochiama@xxxxxxxxx,
jan.petrous@xxxxxxxxxxx, jszhang@xxxxxxxxxx, p.zabel@xxxxxxxxxxxxxx,
0x1207@xxxxxxxxx, boon.khai.ng@xxxxxxxxxx,
linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, ningyu@xxxxxxxxxxxxxxxxxx,
linmin@xxxxxxxxxxxxxxxxxx, lizhi2@xxxxxxxxxxxxxxxxxx
Subject: Re: [PATCH v2 2/2] =?iso-8859-1?Q?ethernet?=
=?iso-8859-1?B?OqBlc3dpbjqgQWRkoGVpYzc3MDCgZXRoZXJuZXSgZHJpdmVy?=
Message-ID: <2c2dc4cb-57aa-476a-8668-c0b358f0ee0c@xxxxxxx>
References: <20250528041455.878-1-weishangjuan@xxxxxxxxxxxxxxxxxx>
<20250528041634.912-1-weishangjuan@xxxxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528041634.912-1-weishangjuan@xxxxxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
> +/* PHY default addr in mdio*/
> +#define PHY_ADDR -1
PHY addresses are 0 to 31. How can -1 be a default?
> +static struct clk *dwc_eth_find_clk(struct plat_stmmacenet_data *plat_dat,
> + const char *name)
> +{
> + for (int i = 0; i < plat_dat->num_clks; i++)
> + if (strcmp(plat_dat->clks[i].id, name) == 0)
> + return plat_dat->clks[i].clk;
> +
> + return NULL;
> +}
Please look at the cleanup work Russell King has been doing the last
couple of months. Is this still needed?
> +static int dwc_eth_dwmac_config_dt(struct platform_device *pdev,
> + struct plat_stmmacenet_data *plat_dat)
> +{
> + struct device *dev = &pdev->dev;
> + u32 burst_map = 0;
> + u32 bit_index = 0;
> + u32 a_index = 0;
> +
> + if (!plat_dat->axi) {
> + plat_dat->axi = devm_kzalloc(&pdev->dev, sizeof(struct stmmac_axi), GFP_KERNEL);
> +
> + if (!plat_dat->axi)
> + return -ENOMEM;
> + }
> +
> + plat_dat->axi->axi_lpi_en = device_property_read_bool(dev,
> + "snps,en-lpi");
> + if (device_property_read_u32(dev, "snps,write-requests",
> + &plat_dat->axi->axi_wr_osr_lmt)) {
> + /**
> + * Since the register has a reset value of 1, if property
> + * is missing, default to 1.
> + */
Is that described in the binding? Please fully describe all the DT
properties, including what happens when they are not present.
> + ret = of_property_read_u32_index(pdev->dev.of_node, "eswin,phyaddr", 0,
> + &dwc_priv->phyaddr);
> + if (ret)
> + dev_warn(&pdev->dev, "can't get phyaddr (%d)\n", ret);
Are we talking about the Ethernet PHY here or a generic PHY? You
should not need any vendor properties for an Ethernet phy, phy-handle
points to the PHY on an MDIO bus.
> + ret = of_property_read_variable_u32_array(pdev->dev.of_node, "dly-param-1000m",
> + &dwc_priv->dly_param_1000m[0], 3, 0);
> + if (ret != 3) {
> + dev_err(&pdev->dev, "can't get delay param for 1Gbps mode (%d)\n", ret);
> + return ret;
> + }
> +
> + ret = of_property_read_variable_u32_array(pdev->dev.of_node, "dly-param-100m",
> + &dwc_priv->dly_param_100m[0], 3, 0);
> + if (ret != 3) {
> + dev_err(&pdev->dev, "can't get delay param for 100Mbps mode (%d)\n", ret);
> + return ret;
> + }
> +
> + ret = of_property_read_variable_u32_array(pdev->dev.of_node, "dly-param-10m",
> + &dwc_priv->dly_param_10m[0], 3, 0);
> + if (ret != 3) {
> + dev_err(&pdev->dev, "can't get delay param for 10Mbps mode (%d)\n", ret);
> + return ret;
> + }
rx-internal-delay-ps:
description:
RGMII Receive Clock Delay defined in pico seconds. This is used for
controllers that have configurable RX internal delays. If this
property is present then the MAC applies the RX delay.
tx-internal-delay-ps:
description:
RGMII Transmit Clock Delay defined in pico seconds. This is used for
controllers that have configurable TX internal delays. If this
property is present then the MAC applies the TX delay.
The RGMII standard only talks about 2ns delay. There is no delay per
link speed. This is something specific to your hardware. Please figure
out how you can map these standard properties to what you need for
100Mbps and 10Mbps.
Andrew
---
pw-bot: cr
Return-Path: <linux-kernel+bounces-665558-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 03EEC41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:45:34 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id E5CBD1BC7B39
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:45:46 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C970C278158;
Wed, 28 May 2025 13:45:26 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="q8Fh4VjZ"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0FB37139E;
Wed, 28 May 2025 13:45:26 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439926; cv=none; b=mYKHj+T0dfMmFPXtYlmyqjCJvwHS9VA+2AArUDWed+jfGJyBruWayF3SSZPdzG7IUkDLFs3pq8vKwhDE99hc1YuD4b1Q08m2z4Bt1AHi6kszxwg7Uu5o3SSj7OttRT6wzrpA8zRKoIKv1L4nHCHyC89KlnsGBsOs6dGpwr+R86k=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439926; c=relaxed/simple;
bh=YpI7VKMUnaWy2OYCxLRua4soQ2wih1E7n3F4O5SEpHg=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=mSg5oyIJDDaQUWricjs1kWr/jv5gQNUTJxyZL3wfjzFQwqozoZV0l8NvHNvdX4wtH/u3zv9DMy1nIKZcRdRzp8zwVkvmENSiXGlbn7x9M+G1lXfJx1QHN6i9s/ESTKCWDk7BTK6Ksptlho0DJ5oJ+Ndu5i2yxFg1dkLFOhYTtI0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=q8Fh4VjZ; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id A64CDC4CEE7;
Wed, 28 May 2025 13:45:22 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748439925;
bh=YpI7VKMUnaWy2OYCxLRua4soQ2wih1E7n3F4O5SEpHg=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=q8Fh4VjZflZWOyDxuwWeoPAWKpSMpoQGfH3d/UzptDGO0ayaOZLubXxI9zBphBWnx
3IpJaRKCInlxC7w0dzWQwiDw7+DgyZ76zNjiWE6gqVOy+aI6U1AJxjIyxJ1045AKr4
acCGwsvoMUp7L3GGl0fkMZozYOzzXjgr6tH8iiVaz/An2AT5aP6Ekneq8wJn9mK1t4
3CW2M9xJGTyL/iPKHgieqkmLhULPwa9mXsEYCYfv1BPmKnUqdLsyXp4WW/Pl2DLTQ7
LY9TXLQF3+6CIYnMES03m1DTM4CM3UOck4Vxy0w7Rk9bxWtIJlDWTAzMKt0vaOQYsi
/vuUCecnjrf3Q==
Date: Wed, 28 May 2025 14:45:20 +0100
From: Conor Dooley <conor@xxxxxxxxxx>
To: Prabhakar <prabhakar.csengg@xxxxxxxxx>
Cc: Vinod Koul <vkoul@xxxxxxxxxx>,
Kishon Vijay Abraham I <kishon@xxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Geert Uytterhoeven <geert+renesas@xxxxxxxxx>,
Magnus Damm <magnus.damm@xxxxxxxxx>,
Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx>,
linux-phy@xxxxxxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-renesas-soc@xxxxxxxxxxxxxxx,
Biju Das <biju.das.jz@xxxxxxxxxxxxxx>,
Fabrizio Castro <fabrizio.castro.jz@xxxxxxxxxxx>,
Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Subject: Re: [PATCH] dt-bindings: phy: renesas,usb2-phy: Document RZ/V2N SoC
support
Message-ID: <20250528-taekwondo-selector-997da403fbed@spud>
References: <20250528133858.168582-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
protocol="application/pgp-signature"; boundary="x5utOjCwDC7uVpEq"
Content-Disposition: inline
In-Reply-To: <20250528133858.168582-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
--x5utOjCwDC7uVpEq
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On Wed, May 28, 2025 at 02:38:58PM +0100, Prabhakar wrote:
> From: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
>=20
> Document support for the USB2.0 phy found on the Renesas RZ/V2N
> (R9A09G056) SoC. The USB2.0 phy is functionally identical to that on the
> RZ/V2H(P) SoC, so no driver changes are needed. The existing
> `renesas,usb2-phy-r9a09g057` compatible will be used as a fallback
> for the RZ/V2N SoC.
>=20
> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Acked-by: Conor Dooley <conor.dooley@xxxxxxxxxxxxx>
--x5utOjCwDC7uVpEq
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iHUEABYIAB0WIQRh246EGq/8RLhDjO14tDGHoIJi0gUCaDcTcAAKCRB4tDGHoIJi
0jO7AP4pKes/qNTY9Yn16W/MygrNIOvDmAvPi1ZIGUZQOZHyiQEAowAYXVSdz544
hd3YgUOaEQLB6HYBhRVH2x/O4XH+bg8=
=FbES
-----END PGP SIGNATURE-----
--x5utOjCwDC7uVpEq--
Return-Path: <linux-kernel+bounces-665559-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id DBED941E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:46:03 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id E36009E6A99
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:45:42 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 8461D278158;
Wed, 28 May 2025 13:45:56 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="scTt5q38"
Received: from casper.infradead.org (casper.infradead.org [90.155.50.34])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 618F9548EE;
Wed, 28 May 2025 13:45:54 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439955; cv=none; b=WnimeS+kbFsO4WnCtMxerkCTruznvBz0EEEtYSJXQuAwIOdm4yMZl54KMlNwrLGHdaZNbXstEcnmo2TsxL+t0QqtB+lJuUyvUIF1kCt19JdZ64xtCbD6UvL4BgUzAkTYq+7QEyMlv/PfggB8G2f0+SyladBo/jUjldzTudHDbm8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439955; c=relaxed/simple;
bh=NhKDJGKersmYwYbpcpxHMhulBIGoduKgjFIZ/h9f4Xo=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=LCEgospQB4bkgYCFNtaes4dWdzzphmVPGuvbqvWReomQoQrngOoyPLUZ9RvBDYAuP/dBIKPvqxhj7CQDv18RwVUQDA54BRtsMeFfbQLYVfnk3GdU++iucElUcoTe8lL0ZF/3EMsrMv+o2nIAtZ2OhdCM8oJ0sPwysYF1bXJCyn8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=scTt5q38; arc=none smtp.client-ip=90.155.50.34
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org
Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Transfer-Encoding:
Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:
Sender:Reply-To:Content-ID:Content-Description;
bh=RJTCnxK1El4r0A3ClIoA68ji0JX4Tz5IvIhvEj1UhXI=; b=scTt5q38Q6lSPhAtr0dXmNDhgM
ypwqrkoRXPv+Wr1bHPWDqTleGFtWeH8JtWgbfSFW2jYuJXfFy31HjlTskC5j2MxDwzAF5bmkEok7M
RvyRjS8LR45QPKIX7+qEZ0SeB70ER9Ka4tjMekrJQMvOJxgj7ARhL0X//KM+m3Ij3/vu3S8TdZVkQ
NoU9mTK/gy0ewgbiQHpUP+7HfUV2Yz3cu+6YT6gtwEy7fQ0dZ7nOYGZAY+ozfohpc0UOxo3D+TKyW
CCDc7GLIArvxmWTnFGpO9hxQB/u256zJLc9603181iKRgzrkzOletd86sPjCovJleSPuMf2dEy35W
/xes/BuQ==;
Received: from 77-249-17-252.cable.dynamic.v4.ziggo.nl ([77.249.17.252] helo=noisy.programming.kicks-ass.net)
by casper.infradead.org with esmtpsa (Exim 4.98.2 #2 (Red Hat Linux))
id 1uKH6J-0000000DhDE-3k3S;
Wed, 28 May 2025 13:45:47 +0000
Received: by noisy.programming.kicks-ass.net (Postfix, from userid 1000)
id 791A9300263; Wed, 28 May 2025 15:38:07 +0200 (CEST)
Date: Wed, 28 May 2025 15:38:07 +0200
From: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
To: "Rafael J. Wysocki" <rafael@xxxxxxxxxx>
Cc: "Rafael J. Wysocki" <rjw@xxxxxxxxxxxxx>,
x86 Maintainers <x86@xxxxxxxxxx>,
LKML <linux-kernel@xxxxxxxxxxxxxxx>,
Linux PM <linux-pm@xxxxxxxxxxxxxxx>, Len Brown <lenb@xxxxxxxxxx>,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>, Borislav Petkov <bp@xxxxxxx>,
Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
Artem Bityutskiy <artem.bityutskiy@xxxxxxxxxxxxxxx>,
"Gautham R. Shenoy" <gautham.shenoy@xxxxxxx>,
Ingo Molnar <mingo@xxxxxxxxxx>,
Todd Brandt <todd.e.brandt@xxxxxxxxxxxxxxx>
Subject: Re: [PATCH v1 0/2] x86/smp: Fix power regression introduced by
commit 96040f7273e2
Message-ID: <20250528133807.GC39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <2006806.PYKUYFuaPT@xxxxxxxxxxxxx>
<20250528131759.GA39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<CAJZ5v0i=TWMjPKxGa8eT-prV=dtQo=pwys5amcj3QL9qo=EYyQ@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <CAJZ5v0i=TWMjPKxGa8eT-prV=dtQo=pwys5amcj3QL9qo=EYyQ@xxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 03:20:16PM +0200, Rafael J. Wysocki wrote:
> On Wed, May 28, 2025 at 3:18â?¯PM Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
> >
> > On Wed, May 28, 2025 at 02:53:13PM +0200, Rafael J. Wysocki wrote:
> > > Hi Everyone,
> > >
> > > Commit 96040f7273e2 ("x86/smp: Eliminate mwait_play_dead_cpuid_hint()")
> > > that shipped in 6.15 introduced a nasty power regression on systems that
> > > start with "nosmt" in the kernel command line which prevents it from entering
> > > deep package idle states (for instance, PC10) later on. Idle power, including
> > > power in suspend-to-idle, goes up significantly on those systems as a result.
> > >
> > > Address this by reverting commit 96040f7273e2 (patch [1/2]) and using a
> > > different approach, which is to retain mwait_play_dead_cpuid_hint() and
> > > still prefer it to hlt_play_dead() in case it is needed when cpuidle is
> > > not available, but prefer cpuidle_play_dead() to it by default (patch [2/2]).
> >
> > I don't understand. The revert says the reason it regresses is that it
> > goes into play_dead before cpuidle is initialized. The fix is then to
> > call cpuidle first.
> >
> > But if cpuidle isn't initialized yet, how does that fix anything?
>
> The revert fixes the bug.
This is not what I asked.
> The other patch does what the reverted commit was supposed to be
> doing, but differently.
No, it does not.
The whole point was that mwait_play_dead did not DTRT because hints are
stupid and it could not select the deepest C state in an unambiguous
fashion.
And now you're restoring that -- code you all argued was fundamentally
buggered.
Yes is 'fixes' things on old platforms, but it is equally broken on the
new platforms where you all argued it was broken on. So either way
around you're going to need to fix those, and this isn't it.
Now, SMT siblings are all AP, by definition. So can't we simply send
them INIT instead of doing CLI;HLT, that way they drop into
Wait-for-SIPI and the ucode can sort it out?
Return-Path: <linux-kernel+bounces-665560-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 3648641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:46:19 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 8BF827A8A64
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:45:00 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id D87A9142E6F;
Wed, 28 May 2025 13:46:10 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Fz/vjLJB"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1BBC174420;
Wed, 28 May 2025 13:46:09 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439970; cv=none; b=A2Eo0kvZOeTBkHfpCM1i5H4N88Q5DSy+EXIWYJghSeXukXtZ2EFdCRc521qosxqSmpPq4DjjYFXtrgQiD5HIRX0MbjErpcQkBsG3Txmkm7ysVx/8DMFcM57nQVYVtqCkrrpriechl87pWTPMvuvOFDBvGtmkuaDC6JijNk4gCh8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439970; c=relaxed/simple;
bh=oq6Fac4wS0SHANH2J2t3p21BoUKhwTFerUYFaLqweXU=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=dnGTjRU5ZeTrEhwqJh0uHYc5ECpvcnQFoXZGTJliwrAGNL7PXXzD+Ph8jxFVxmTgtaImoadVzi2PuFlPd5q9rttE48HM/PQVJv0kJ27BAOaquWSOVIS6YqVgfq882qknOAW2tfi7msytwpaWcA3DRnefFI2kEnI7LdrCm9kxMqY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Fz/vjLJB; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 08F8DC4CEE7;
Wed, 28 May 2025 13:46:06 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748439969;
bh=oq6Fac4wS0SHANH2J2t3p21BoUKhwTFerUYFaLqweXU=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=Fz/vjLJBco5Nolft1Ameracr5zQZuWlEjDpRrZfwHbbD1CdFkvvu7lcYeOq8Dm1iN
jIRW6PW2JF6IRXEBZU5XemKRYa+DIh+K9Xen+vwLg14fNQpziBW3M3gKUNKlWdc2Pp
vIGsAXGkw4opFX2GH41OOq8IWSrAttIbQbyD6cS1Clirj4qJ0EDFgzBoQuDcA8a+Cp
s0LpDAOSuYh8g0XACgKgFEhHAwyICnrve8/hboDl5wKMyTJLZs4jZ6IB3RBeg+VM3Q
eeit6KsvBpRXCw9DHZ7jFkfJ+I/5S+Yhh/Eq8jApLuptSeFLuUWUe9l1qQHGj8pmxz
FTvC+hUjrxyDg==
Date: Wed, 28 May 2025 14:46:03 +0100
From: Conor Dooley <conor@xxxxxxxxxx>
To: Jianhua Lin <jianhua.lin@xxxxxxxxxxxx>
Cc: mchehab@xxxxxxxxxx, robh@xxxxxxxxxx, krzk+dt@xxxxxxxxxx,
conor+dt@xxxxxxxxxx, matthias.bgg@xxxxxxxxx,
angelogioacchino.delregno@xxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx,
linux-mediatek@xxxxxxxxxxxxxxxxxxx,
Project_Global_Chrome_Upstream_Group@xxxxxxxxxxxx
Subject: Re: [PATCH 0/2] Add MT8189 jpeg encoder and decoder compatible
Message-ID: <20250528-energetic-voltage-b02704c14df8@spud>
References: <20250528095748.17485-1-jianhua.lin@xxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
protocol="application/pgp-signature"; boundary="vv8zY9ORmuVZuCZ/"
Content-Disposition: inline
In-Reply-To: <20250528095748.17485-1-jianhua.lin@xxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
--vv8zY9ORmuVZuCZ/
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On Wed, May 28, 2025 at 05:57:46PM +0800, Jianhua Lin wrote:
> This series is based on tag: next-20250528, linux-next/master
>=20
> jianhua.lin (2):
> dt-bindings: media: mediatek-jpeg-encoder: Add MT8189 compatible
> string
> dt-bindings: media: mediatek-jpeg-decoder: Add MT8189 compatible
> string
Acked-by: Conor Dooley <conor.dooley@xxxxxxxxxxxxx>
--vv8zY9ORmuVZuCZ/
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iHUEABYIAB0WIQRh246EGq/8RLhDjO14tDGHoIJi0gUCaDcTmwAKCRB4tDGHoIJi
0sGYAQC2bzGNx7UyUv973y6yM7B6lHc6xUzFs1DLjDP/D/+C4wEA4pyq+WoirUwj
3RkNS7UtPhUxDGsw7kjuGUrdy7EvEQs=
=pFRV
-----END PGP SIGNATURE-----
--vv8zY9ORmuVZuCZ/--
Return-Path: <linux-kernel+bounces-665561-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 7D2E641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:46:28 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 36A8C4E5241
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:46:29 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id CCC8C288527;
Wed, 28 May 2025 13:46:12 +0000 (UTC)
Received: from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net [217.70.183.194])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9D7E3548EE;
Wed, 28 May 2025 13:46:07 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.194
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748439972; cv=none; b=SyK+3iLtBxRzS0l+K+LBCwWr6YxxTcDyAvXiLlqd4FcJiPl2+VQbdTCa/KyikHt7NlHigrSBzYtC+sAqSMb3cuGquqkMARkX3W893Ei+ENjDH0P7J42k14aXmbOMSyBwEBkaFZA/m4Z1eCA4SIouii1uAZ9fLvHKrT06x7yiP0s=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748439972; c=relaxed/simple;
bh=9QsVaD96h9TZ8yRguSQmceVk5sbKpRXUCWFq4YA94Uc=;
h=From:To:Cc:Subject:References:Date:In-Reply-To:Message-ID:
MIME-Version:Content-Type; b=c4nsfwiunfqzhRfqHRUTnpHaUT1t5FChEcOVNV5Fxz6PIcmPf3+Xv4ugUYCyEUkNiTh9p5Cfb523nx4BK7osMQZka8+TR7jNGzLqD1oB7a8PJHvPAKEzoNFULsDVKIvT7AxhVkept2+j1RcaNyeRq1J2JPzA9T5G6/rM4m5FpE4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=korsgaard.com; spf=pass smtp.mailfrom=korsgaard.com; arc=none smtp.client-ip=217.70.183.194
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=korsgaard.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=korsgaard.com
Received: by mail.gandi.net (Postfix) with ESMTPSA id 42762438DA;
Wed, 28 May 2025 13:46:04 +0000 (UTC)
Received: from peko by dell.be.48ers.dk with local (Exim 4.96)
(envelope-from <peter@xxxxxxxxxxxxx>)
id 1uKH6Z-001CgK-2G;
Wed, 28 May 2025 15:46:03 +0200
From: Peter Korsgaard <peter@xxxxxxxxxxxxx>
To: Bram Vlerick <bram.vlerick@xxxxxxxxxxxxxxxxxxxx>
Cc: Kevin Cernekee <cernekee@xxxxxxxxxxxx>, Liam Girdwood
<lgirdwood@xxxxxxxxx>, Mark Brown <broonie@xxxxxxxxxx>, Jaroslav Kysela
<perex@xxxxxxxx>, Takashi Iwai <tiwai@xxxxxxxx>, Rob Herring
<robh@xxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>, Conor
Dooley <conor+dt@xxxxxxxxxx>, Neil Armstrong <neil.armstrong@xxxxxxxxxx>,
linux-sound@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx
Subject: Re: [PATCH 1/2] ASoC: tas571x: add support for tas5753
References: <20250528-asoc-tas5753-support-v1-0-a50c3f6734ee@xxxxxxxxxxxxxxxxxxxx>
<20250528-asoc-tas5753-support-v1-1-a50c3f6734ee@xxxxxxxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 15:46:03 +0200
In-Reply-To: <20250528-asoc-tas5753-support-v1-1-a50c3f6734ee@xxxxxxxxxxxxxxxxxxxx>
(Bram Vlerick's message of "Wed, 28 May 2025 14:10:08 +0200")
Message-ID: <87plfsx2zo.fsf@xxxxxxxxxxxxxxxx>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain
X-GND-State: clean
X-GND-Score: -100
X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtddtgddvfeegvdculddtuddrgeefvddrtddtmdcutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfitefpfffkpdcuggftfghnshhusghstghrihgsvgenuceurghilhhouhhtmecufedtudenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephffvvefufhffjgfkfgggtgesthdttddttdertdenucfhrhhomheprfgvthgvrhcumfhorhhsghgrrghrugcuoehpvghtvghrsehkohhrshhgrggrrhgurdgtohhmqeenucggtffrrghtthgvrhhnpeetgfelveffveehtdevgeefjeeiudduledtffehgefgleekteektedutdfhleeiueenucfkphepkedvrddugeefrdelhedrvddvvdenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeekvddrudegfedrleehrddvvddvpdhhvghlohepuggvlhhlrdgsvgdrgeekvghrshdrughkpdhmrghilhhfrhhomhepphgvthgvrheskhhorhhsghgrrghrugdrtghomhdpnhgspghrtghpthhtohepudefpdhrtghpthhtohepsghrrghmrdhvlhgvrhhitghksehophgvnhhpihigvghlshihshhtvghmshdrohhrghdprhgtphhtthhopegtvghrnhgvkhgvvgestghhrhhomhhiuhhmrdhorhhgpdhrtghpthhtoheplhhgihhrugifohhougesghhmrghilhdrtghomhdprhgtphhtthhopehpvghrvgigsehpvghrvgigrdgtiidprhgtphhtthhopehtihifrghisehsuhhsvgdrtghomhdpr
hgtphhtthhopegsrhhoohhnihgvsehkvghrnhgvlhdrohhrghdprhgtphhtthhopehrohgshheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepkhhriihkodgutheskhgvrhhnvghlrdhorhhg
X-GND-Sasl: peter@xxxxxxxxxxxxx
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
>>>>> "Bram" == Bram Vlerick <bram.vlerick@xxxxxxxxxxxxxxxxxxxx> writes:
> Add support for tas5753, device is similar to tas5733 but with added
> headphone / line driver.
> Signed-off-by: Bram Vlerick <bram.vlerick@xxxxxxxxxxxxxxxxxxxx>
Acked-by: Peter Korsgaard <peter@xxxxxxxxxxxxx>
--
Bye, Peter Korsgaard
Return-Path: <linux-kernel+bounces-665562-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id F3E7E41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:47:09 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 0C2761BC77D3
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:47:21 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 1CEC62882A3;
Wed, 28 May 2025 13:46:57 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="ID4CJZUv"
Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id E5680284693;
Wed, 28 May 2025 13:46:52 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440015; cv=none; b=kJZWOhbieaX937IzEg7QXCrr/hIT7gsb1fgt57CwXxdvyicNSDtZZpizPthFQegM5zBBYGoaIGTbK0yoxVWCE1l/Es/sPj6mF//YF6Pu4Eg62melQZX+QCl1IYCdBmXAnMJanrlNKuVQ7D3QoX9o4XU+BAjfWj3Bclz3fFTiwN4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440015; c=relaxed/simple;
bh=bRhT0/Vrg1JnPizBgA3qMrogzVvnIT1PA+IxOge4Atc=;
h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References:
Content-Type:MIME-Version; b=Z4RrjhUqaDLtc+e3ZMdttAhT1D9L54VwucxgHlwcSZGVystr19Bbjj4lUtbNrOwOXwF1dGwQxuqdvT8dm+GqOwllWvWwNQ1PCmXWfuAnlUqXHJw2kYFm6hBxAJy0ysU2OltmhRZA4xpStkpIOZs61l5qXxhY94trVrJXyaCdiH8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=ID4CJZUv; arc=none smtp.client-ip=148.251.105.195
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com;
s=mail; t=1748440010;
bh=bRhT0/Vrg1JnPizBgA3qMrogzVvnIT1PA+IxOge4Atc=;
h=Subject:From:To:Cc:Date:In-Reply-To:References:From;
b=ID4CJZUvB8i/vqNMQcZ63Wk0iegU4ufRF3U/AJa/CUDFlKVAXN0NeHrQX6RsWXkpi
ZqHw2vMzcHzAl5ENuiw0saWcoQ1zwbmh2aZ0iz9tIGIS3zbndhdAZ/VE6n+EF0gpLK
kQi0/GuwGsMSC2Hlh+65dCa0miGMcP8sXiXHyPt31PaeT6sXD8KQgUtpDUAuFGOb5I
7HAWAtZOqHa71LIpUDab6LShxpo/69vP99oVa16uFIUYIPUDC93fH222+oUAG9oIHV
2EpmoCSpqUjG/QUGEAa0YgYT20fgQqIr1HBTYlrTq0RIfnhcNCaIy9OP8QoZjeHVF6
4EfWcAOxbVyCQ==
Received: from [IPv6:2606:6d00:17:b2fc::5ac] (unknown [IPv6:2606:6d00:17:b2fc::5ac])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(No client certificate requested)
(Authenticated sender: nicolas)
by bali.collaboradmins.com (Postfix) with ESMTPSA id 6915F17E0FC2;
Wed, 28 May 2025 15:46:49 +0200 (CEST)
Message-ID: <03a87e1c9e8f77887c2457b9c3fcbf0c6a6cf287.camel@xxxxxxxxxxxxx>
Subject: Re: [PATCH v2 2/7] media: chips-media: wave5: Improve performance
of decoder
From: Nicolas Dufresne <nicolas.dufresne@xxxxxxxxxxxxx>
To: "jackson.lee" <jackson.lee@xxxxxxxxxxxxxxx>, "mchehab@xxxxxxxxxx"
<mchehab@xxxxxxxxxx>, "hverkuil-cisco@xxxxxxxxx"
<hverkuil-cisco@xxxxxxxxx>, "bob.beckett@xxxxxxxxxxxxx"
<bob.beckett@xxxxxxxxxxxxx>
Cc: "linux-media@xxxxxxxxxxxxxxx" <linux-media@xxxxxxxxxxxxxxx>,
"linux-kernel@xxxxxxxxxxxxxxx" <linux-kernel@xxxxxxxxxxxxxxx>,
"lafley.kim" <lafley.kim@xxxxxxxxxxxxxxx>, "b-brnich@xxxxxx"
<b-brnich@xxxxxx>, "hverkuil@xxxxxxxxx" <hverkuil@xxxxxxxxx>, Nas Chung
<nas.chung@xxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 09:46:47 -0400
In-Reply-To: <SE1P216MB1303C1D1C2A9FA165A01B71AED64A@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <20250522072606.51-1-jackson.lee@xxxxxxxxxxxxxxx>
<20250522072606.51-3-jackson.lee@xxxxxxxxxxxxxxx>
<3afbd0253fabcf9f8795ab2231107e2e9da012cc.camel@xxxxxxxxxxxxx>
<SE1P216MB1303C1D1C2A9FA165A01B71AED64A@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Organization: Collabora Canada
Content-Type: text/plain; charset="UTF-8"
User-Agent: Evolution 3.56.2 (3.56.2-1.fc42)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi,
Le mardi 27 mai 2025 à 04:58 +0000, jackson.lee a écrit :
>
>
> > -----Original Message-----
> > From: Nicolas Dufresne <nicolas.dufresne@xxxxxxxxxxxxx>
> > Sent: Saturday, May 24, 2025 2:39 AM
> > To: jackson.lee <jackson.lee@xxxxxxxxxxxxxxx>; mchehab@xxxxxxxxxx;
> > hverkuil-cisco@xxxxxxxxx; sebastian.fricke@xxxxxxxxxxxxx;
> > bob.beckett@xxxxxxxxxxxxx; dafna.hirschfeld@xxxxxxxxxxxxx
> > Cc: linux-media@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; lafley.kim
> > <lafley.kim@xxxxxxxxxxxxxxx>; b-brnich@xxxxxx; hverkuil@xxxxxxxxx; Nas
> > Chung <nas.chung@xxxxxxxxxxxxxxx>
> > Subject: Re: [PATCH v2 2/7] media: chips-media: wave5: Improve performance
> > of decoder
> >
> > Hi,
> >
> > Le jeudi 22 mai 2025 à 16:26 +0900, Jackson.lee a écrit :
> > > From: Jackson Lee <jackson.lee@xxxxxxxxxxxxxxx>
> > >
> > > The current decoding method was to wait until each frame was decoded
> > > after feeding a bitstream. As a result, performance was low and Wave5
> > > could not achieve max pixel processing rate.
> > >
> > > Update driver to use an asynchronous approach for decoding and feeding
> > > a bitstream in order to achieve full capabilities of the device.
> > >
> > > WAVE5 supports command-queueing to maximize performance by pipelining
> > > internal commands and by hiding wait cycle taken to receive a command
> > > from Host processor.
> > >
> > > Instead of waiting for each command to be executed before sending the
> > > next command, Host processor just places all the commands in the
> > > command-queue and goes on doing other things while the commands in the
> > > queue are processed by VPU.
> > >
> > > While Host processor handles its own tasks, it can receive VPU
> > > interrupt request (IRQ).
> > > In this case, host processor can simply exit interrupt service routine
> > > (ISR) without accessing to host interface to read the result of the
> > > command reported by VPU.
> > > After host processor completed its tasks, host processor can read the
> > > command result when host processor needs the reports and does response
> > > processing.
> > >
> > > To archive this goal, the device_run() calls v4l2_m2m_job_finish so
> > > that next command can be sent to VPU continuously, if there is any
> > > result, then irq is triggered and gets decoded frames and returns them
> > > to upper layer.
> > > Theses processes work independently each other without waiting a
> > > decoded frame.
> > >
> > > Signed-off-by: Jackson Lee <jackson.lee@xxxxxxxxxxxxxxx>
> > > Signed-off-by: Nas Chung <nas.chung@xxxxxxxxxxxxxxx>
> > > ---
> > >  .../platform/chips-media/wave5/wave5-hw.c    | 2 +-
> > >  .../chips-media/wave5/wave5-vpu-dec.c        | 84
> > > +++++++++++--------
> > > Â .../platform/chips-media/wave5/wave5-vpuapi.c |Â 2 +
> > > Â .../platform/chips-media/wave5/wave5-vpuapi.h |Â 3 +
> > > Â 4 files changed, 57 insertions(+), 34 deletions(-)
> > >
> > > diff --git a/drivers/media/platform/chips-media/wave5/wave5-hw.c
> > > b/drivers/media/platform/chips-media/wave5/wave5-hw.c
> > > index d94cf84c3ee5..687ce6ccf3ae 100644
> > > --- a/drivers/media/platform/chips-media/wave5/wave5-hw.c
> > > +++ b/drivers/media/platform/chips-media/wave5/wave5-hw.c
> > > @@ -102,7 +102,7 @@ static void _wave5_print_reg_err(struct vpu_device
> > *vpu_dev, u32 reg_fail_reason
> > > Â dev_dbg(dev, "%s: queueing failure: 0x%x\n", func, reg_val);
> > > Â break;
> > > Â case WAVE5_SYSERR_RESULT_NOT_READY:
> > > - dev_err(dev, "%s: result not ready: 0x%x\n", func,
> > reg_fail_reason);
> > > + dev_dbg(dev, "%s: result not ready: 0x%x\n", func,
> > > +reg_fail_reason);
> > > Â break;
> > > Â case WAVE5_SYSERR_ACCESS_VIOLATION_HW:
> > > Â dev_err(dev, "%s: access violation: 0x%x\n", func,
> > > reg_fail_reason); diff --git
> > > a/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c
> > > b/drivers/media/platform/chips- media/wave5/wave5-vpu-dec.c index
> > > 32de43de1870..995234a3a6d6 100644
> > > --- a/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c
> > > +++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c
> > > @@ -347,13 +347,12 @@ static void wave5_vpu_dec_finish_decode(struct
> > vpu_instance *inst)
> > > Â struct vb2_v4l2_buffer *dec_buf = NULL;
> > > Â struct vb2_v4l2_buffer *disp_buf = NULL;
> > > Â struct vb2_queue *dst_vq = v4l2_m2m_get_dst_vq(m2m_ctx);
> > > - struct queue_status_info q_status;
> > >
> > > Â dev_dbg(inst->dev->dev, "%s: Fetch output info from firmware.",
> > > __func__);
> > >
> > > Â ret = wave5_vpu_dec_get_output_info(inst, &dec_info);
> > > Â if (ret) {
> > > - dev_warn(inst->dev->dev, "%s: could not get output info.",
> > __func__);
> > > + dev_dbg(inst->dev->dev, "%s: could not get output info.",
> > > +__func__);
> >
> > Wouldn't it be better to check the return value to possibly differentiate
> > some errors from something similar to EGAIN?
> >
>
> In case of this, when get_result command is requested to VPU, there could be no output.
> So it is not error case and EAGIAN is not proper because the wave5_vpu_dec_finish_decode is triggered by PIC_Done
> interrupt.
> So I think it is proper code.
My worry is that you are silencing possible problems. I checked further, it may return
EINVAL, EIO and EAGAIN and whatever read_poll_timeout() returns on timeout. For most, this
trace was noise, so now I agree with the change, but can you go find the EINVAL and add
a warn_on around it, since this is a programming error, it would happen if dec_info is
a null pointer. Can be patch in itself, before this one.
>
>
> > > Â v4l2_m2m_job_finish(inst->v4l2_m2m_dev, m2m_ctx);
> > > Â return;
> > > Â }
> > > @@ -441,20 +440,6 @@ static void wave5_vpu_dec_finish_decode(struct
> > vpu_instance *inst)
> > > Â }
> > > Â spin_unlock_irqrestore(&inst->state_spinlock, flags);
> > > Â }
> > > -
> > > - /*
> > > - * During a resolution change and while draining, the firmware may
> > flush
> > > - * the reorder queue regardless of having a matching decoding
> > operation
> > > - * pending. Only terminate the job if there are no more IRQ coming.
> > > - */
> > > - wave5_vpu_dec_give_command(inst, DEC_GET_QUEUE_STATUS, &q_status);
> > > - if (q_status.report_queue_count == 0 &&
> > > - Â Â Â (q_status.instance_queue_count == 0 ||
> > dec_info.sequence_changed)) {
> > > - dev_dbg(inst->dev->dev, "%s: finishing job.\n", __func__);
> > > - pm_runtime_mark_last_busy(inst->dev->dev);
> > > - pm_runtime_put_autosuspend(inst->dev->dev);
> > > - v4l2_m2m_job_finish(inst->v4l2_m2m_dev, m2m_ctx);
> > > - }
> > > Â }
> > >
> > > Â static int wave5_vpu_dec_querycap(struct file *file, void *fh, struct
> > > v4l2_capability *cap) @@ -1146,8 +1131,8 @@ static int
> > > write_to_ringbuffer(struct vpu_instance *inst, void *buffer, size_t b
> > > Â static int fill_ringbuffer(struct vpu_instance *inst)
> > > Â {
> > > Â struct v4l2_m2m_ctx *m2m_ctx = inst->v4l2_fh.m2m_ctx;
> > > - struct v4l2_m2m_buffer *buf, *n;
> > > - int ret;
> > > + struct vpu_src_buffer *vpu_buf;
> > > + int ret = 0;
> > >
> > > Â if (m2m_ctx->last_src_buf)Â {
> > > Â struct vpu_src_buffer *vpu_buf =
> > > wave5_to_vpu_src_buf(m2m_ctx->last_src_buf);
> > > @@ -1158,9 +1143,8 @@ static int fill_ringbuffer(struct vpu_instance
> > *inst)
> > > Â }
> > > Â }
> > >
> > > - v4l2_m2m_for_each_src_buf_safe(m2m_ctx, buf, n) {
> > > - struct vb2_v4l2_buffer *vbuf = &buf->vb;
> > > - struct vpu_src_buffer *vpu_buf = wave5_to_vpu_src_buf(vbuf);
> > > + list_for_each_entry(vpu_buf, &inst->avail_src_bufs, list) {
> > > + struct vb2_v4l2_buffer *vbuf = &vpu_buf->v4l2_m2m_buf.vb;
> > > Â struct vpu_buf *ring_buffer = &inst->bitstream_vbuf;
> > > Â size_t src_size = vb2_get_plane_payload(&vbuf->vb2_buf, 0);
> > > Â void *src_buf = vb2_plane_vaddr(&vbuf->vb2_buf, 0); @@ -
> > 1220,9
> > > +1204,13 @@ static int fill_ringbuffer(struct vpu_instance *inst)
> > > Â dev_dbg(inst->dev->dev, "last src buffer written to
> > the ring buffer\n");
> > > Â break;
> > > Â }
> > > +
> > > + inst->queuing_num++;
> > > + list_del_init(&vpu_buf->list);
> > > + break;
> > > Â }
> > >
> > > - return 0;
> > > + return ret;
> > > Â }
> > >
> > > Â static void wave5_vpu_dec_buf_queue_src(struct vb2_buffer *vb) @@
> > > -1236,6 +1224,11 @@ static void wave5_vpu_dec_buf_queue_src(struct
> > vb2_buffer *vb)
> > > Â vbuf->sequence = inst->queued_src_buf_num++;
> > >
> > > Â v4l2_m2m_buf_queue(m2m_ctx, vbuf);
> > > +
> > > + INIT_LIST_HEAD(&vpu_buf->list);
> > > + mutex_lock(&inst->feed_lock);
> > > + list_add_tail(&vpu_buf->list, &inst->avail_src_bufs);
> > > + mutex_unlock(&inst->feed_lock);
> > > Â }
> > >
> > > Â static void wave5_vpu_dec_buf_queue_dst(struct vb2_buffer *vb) @@
> > > -1385,6 +1378,13 @@ static int streamoff_output(struct vb2_queue *q)
> > > Â dma_addr_t new_rd_ptr;
> > > Â struct dec_output_info dec_info;
> > > Â unsigned int i;
> > > + struct vpu_src_buffer *vpu_buf, *tmp;
> > > +
> > > + inst->retry = false;
> > > + inst->queuing_num = 0;
> > > +
> > > + list_for_each_entry_safe(vpu_buf, tmp, &inst->avail_src_bufs, list)
> > > + list_del_init(&vpu_buf->list);
> > >
> > > Â for (i = 0; i < v4l2_m2m_num_dst_bufs_ready(m2m_ctx); i++) {
> > > Â ret = wave5_vpu_dec_set_disp_flag(inst, i); @@ -1580,10
> > +1580,19 @@
> > > static void wave5_vpu_dec_device_run(void *priv)
> > >
> > > Â dev_dbg(inst->dev->dev, "%s: Fill the ring buffer with new
> > bitstream data", __func__);
> > > Â pm_runtime_resume_and_get(inst->dev->dev);
> > > - ret = fill_ringbuffer(inst);
> > > - if (ret) {
> > > - dev_warn(inst->dev->dev, "Filling ring buffer failed\n");
> > > - goto finish_job_and_return;
> > > + if (!inst->retry) {
> > > + mutex_lock(&inst->feed_lock);
> > > + ret = fill_ringbuffer(inst);
> > > + mutex_unlock(&inst->feed_lock);
> > > + if (ret < 0) {
> > > + dev_warn(inst->dev->dev, "Filling ring buffer
> > failed\n");
> > > + goto finish_job_and_return;
> > > + } else if (!inst->eos &&
> > > + inst->queuing_num == 0 &&
> > > + inst->state == VPU_INST_STATE_PIC_RUN) {
> > > + dev_dbg(inst->dev->dev, "%s: no bitstream for feeding,
> > so skip ", __func__);
> > > + goto finish_job_and_return;
> > > + }
> > > Â }
> > >
> > > Â switch (inst->state) {
> > > @@ -1639,7 +1648,7 @@ static void wave5_vpu_dec_device_run(void *priv)
> > > Â }
> > >
> > > Â if (q_status.instance_queue_count) {
> > > - dev_dbg(inst->dev->dev, "%s: leave with active job",
> > __func__);
> > > + v4l2_m2m_job_finish(inst->v4l2_m2m_dev, m2m_ctx);
> > > Â return;
> > > Â }
> > >
> > > @@ -1650,14 +1659,21 @@ static void wave5_vpu_dec_device_run(void *priv)
> > > Â dev_err(inst->dev->dev,
> > > Â "Frame decoding on m2m context (%p), fail: %d
> > (result: %d)\n",
> > > Â m2m_ctx, ret, fail_res);
> > > - break;
> > > + goto finish_job_and_return;
> > > + }
> > > +
> > > + if (fail_res == WAVE5_SYSERR_QUEUEING_FAIL) {
> > > + inst->retry = true;
> > > + } else {
> > > + inst->retry = false;
> > > + if (!inst->eos)
> > > + inst->queuing_num--;
> >
> > I looked into the original state machine violation you had in previous
> > version, and I got the impression that the reason you did hit that was
> > that you actually call device_run passed inst->eos. Its probably not that
> > simple in practice, but I think you forgot to adapt the job_ready() ops to
> > prevent more device_run() called passed CMD_STOP and having all pending
> > buffer written in the ring buffer.
> >
> > As a side effect, you endup calling device_run() in a race with the
> > finish() setting the state to STOP. I really think there is a way to use
> > inst->eos boolean to prevent that race in the first place. Might need to
> > be combined with checking if you have buffers prior to command stop that
> > did not yet fit into the ring buffer.
> >
>
>
> The queuing_num is used to check if there is input data or not, so it was declared in the int type.
> If there is no input data, then the device_run will be not called until queuing input data.
> In case of eos sent, device_run should be ran continuously until getting eos from VPU, the code was needed.
> If my answer is not correct, please let me know.
Running in loop anything is never the right approach. The device_run() should be run
when a useful event occur and filtered by the job_ready() ops. I believe I'm proposing some
hint how to solve this design issue. The issue is quite clear with the follow up patch trying
to reduce the CPU usage due to spinning.
>
>
> > > Â }
> > > - /* Return so that we leave this job active */
> > > - dev_dbg(inst->dev->dev, "%s: leave with active job",
> > __func__);
> > > - return;
> > > - default:
> > > - WARN(1, "Execution of a job in state %s illegal.\n",
> > state_to_str(inst->state));
> > > Â break;
> > > + default:
> > > + dev_dbg(inst->dev->dev, "Execution of a job in state %s
> > illegal.\n",
> > > + state_to_str(inst->state));
> > > +
> > > Â }
> > >
> > > Â finish_job_and_return:
> > > @@ -1755,6 +1771,8 @@ static int wave5_vpu_open_dec(struct file *filp)
> > > Â inst->ops = &wave5_vpu_dec_inst_ops;
> > >
> > > Â spin_lock_init(&inst->state_spinlock);
> > > + mutex_init(&inst->feed_lock);
> > > + INIT_LIST_HEAD(&inst->avail_src_bufs);
> > >
> > > Â inst->codec_info = kzalloc(sizeof(*inst->codec_info), GFP_KERNEL);
> > > Â if (!inst->codec_info)
> > > diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpuapi.c
> > > b/drivers/media/platform/chips-media/wave5/wave5-
> > > vpuapi.c
> > > index e5e879a13e8b..68d86625538f 100644
> > > --- a/drivers/media/platform/chips-media/wave5/wave5-vpuapi.c
> > > +++ b/drivers/media/platform/chips-media/wave5/wave5-vpuapi.c
> > > @@ -255,6 +255,8 @@ int wave5_vpu_dec_close(struct vpu_instance *inst,
> > u32 *fail_res)
> > > Â if (inst_count == 1)
> > > Â pm_runtime_dont_use_autosuspend(vpu_dev->dev);
> > >
> > > + mutex_destroy(&inst->feed_lock);
> > > +
> > > Â unlock_and_return:
> > > Â mutex_unlock(&vpu_dev->hw_lock);
> > > Â pm_runtime_put_sync(inst->dev->dev);
> > > diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h
> > > b/drivers/media/platform/chips-media/wave5/wave5-
> > > vpuapi.h
> > > index f3c1ad6fb3be..fd0aef0bac4e 100644
> > > --- a/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h
> > > +++ b/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h
> > > @@ -818,6 +818,9 @@ struct vpu_instance {
> > > Â bool cbcr_interleave;
> > > Â bool nv21;
> > > Â bool eos;
> > > + bool retry; /* retry to feed bitstream if failure reason is
> > WAVE5_SYSERR_QUEUEING_FAIL*/
> > > + int queuing_num; /* check if there is input buffer or not */
> >
> > This is described as a boolean, but is implemented as a counter. What does
> > it count exactly ?
> > I think it needs a better name too.
> >
>
> Please refer to the above comment.
That won't work for me, I'm requesting you to correct the comment to properly
say this is a counter.
Nicolas
>
> Thanks
> Jackson
>
>
> > Nicolas
> >
> > > + struct mutex feed_lock; /* lock for feeding bitstream buffers */
> > > Â struct vpu_buf bitstream_vbuf;
> > > Â dma_addr_t last_rd_ptr;
> > > Â size_t remaining_consumed_bytes;
Return-Path: <linux-kernel+bounces-665563-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 495D841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:47:19 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id B01263B4E94
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:46:54 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 24EB928851C;
Wed, 28 May 2025 13:47:00 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="fzYmNNTg"
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id C70A92882A7
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:46:57 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440019; cv=none; b=nA5NRMLr78LJfXNwv37Eqxu3BFHLgKT0tmRaeO2kqzJnSltyCZXqPHt8CtgjmeFahcgd/Rif7r70B1fhVW/ETPDNoj2Bew4ozOZ7IM2bN/SQjK6sugisEcJfCVX5V9d5O7KF1jbQAcodOFnO3cnIIB3rDmw5Bl74oVqHdheJA84=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440019; c=relaxed/simple;
bh=RBVICSM8RX282qeCWOc/Wd287XW8yna0X4/TtLvIEf0=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=mJiAle5I1Qlr9NG9Q7Hz4d46l9pMK3FRRLGb6Or+vUpnIVDnUxtxdIQRfh2528JRgXTTKi+bSJ0pPAv5OMyiu/dihDv+t5mbKOQiUiK3JMUkXBjGyAsRMwoQtVQ2Ms4D9Q7uUYpH2QLjHwAfvkb26Wlf4Bsyf9VKGPDCFE0EX54=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=fzYmNNTg; arc=none smtp.client-ip=205.220.168.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com
Received: from pps.filterd (m0279865.ppops.net [127.0.0.1])
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S5ANdq028239
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:46:57 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=
cc:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to; s=qcppdkim1; bh=5hzV+dhuyMo7C+u+YPUX5zpP
lQzTgz3llouJ+CsCBVw=; b=fzYmNNTgwrqs0DoPvI0SKeeE3FN8BfECbJvsi/Z0
uH7iK415EphqNWCfHB5TRcHFrkbN7nRluHqUOU8QEHi0YwxFE6feQdPTqeZ7Xxgp
NQhQgZ8m0PEhoIzygOwYGNjhbSbDOMo71rbs9Bzo3UdHLXB+sSvj+kZStzHFRGTF
d4/wEcV8cpRYPFEd3HRjLtP0uoVL3qOX0kb1V6JJ4uImYJwWuHzKNjPlX3zf7H/X
ANwNfNbKPgHDm5k8Laea/91SWlDCaNF6a8twZo4xEmdr9k0bKaocMDKPZ2U/x/Jz
lvQibPYNLzdbZ+RhisoY4mwSgZ87ZuM/7GTdELhKsJtdHw==
Received: from mail-qv1-f72.google.com (mail-qv1-f72.google.com [209.85.219.72])
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46w992mdqr-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT)
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:46:56 +0000 (GMT)
Received: by mail-qv1-f72.google.com with SMTP id 6a1803df08f44-6fabd295d12so13413786d6.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 06:46:56 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748440015; x=1749044815;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=5hzV+dhuyMo7C+u+YPUX5zpPlQzTgz3llouJ+CsCBVw=;
b=txZSrKkzXYWRV5EYfjOy4Lr8/wLJEG34V19su+eKAsNDVo/DPPo8g9+9HZtHP5fMXG
pIilP94Rh+TDtjVmkNd3ZRCLmWdc6UQuuvUncrHtAkCAh9+8mw1TbKSPgOeLl+OT+gof
mDf4djoWCbHrMmIRjVGDJjnBe0UcsiM2bYm47rqIt+nHE9rzs7Pe9a4oaXQOcYRQEPzC
2xC+M8iXlw+dArjz2CeOwh5k79Rl2E32Zl8ygUQTQYj4ZNTxXaHzYwIQ491nFGEZ9I6V
czWG0jTWLg3e2cqzrgAypEugfvRI6cYbdibAE2ba2RRrdas5husyAf8Xid9RHcLH6Ki3
N0GQ==
X-Forwarded-Encrypted: i=1; AJvYcCUmq3Kn/9jfSdh61aeaZ0U8SGft4KK3NO8/In9lNDYhfPRbqUtHb5hjgsh2dOfPqFp4qWvAAuKYjUviQYw=@vger.kernel.org
X-Gm-Message-State: AOJu0YxLBwCf6IckSk00zcAy8mGRRks0UryzSoi54g7Nl+sngtgIqf45
6/0aXegfUzK2XnjjCyOVWtlQ51O+KpSXNn+9OaePiVQ8zQtpZP41oJEAyK6GzkUeD9JVQU8CryX
IWdAgOprOvlCn0FaYPxkpJZ/C5NSyw3ZRqpfzLrxX81paod6ULOCDuytA99lnsMydJg4=
X-Gm-Gg: ASbGncsGHR3GpG0EvZF+zusuqT/XRt9Rng/zsoLTTbhr5IZjbN7CSPpRvcRHgvlQpvp
QiRcOE4JfAjpNuzaSo/WBSR4nIwe/CORPlbpos+k50wvGQi2546PvX9FbOk5V3G1vR0i2dWj8Xf
xApmBuVElxdntdAn9fdc1Pxrt44ujPw8NzbPGSHk/ACxe36CAACgTs5lN65ifFuwoHG+SZZjI88
ZtY34Y/BdumFjf0k2fz4pNpvHurscmpoZNPFOrY30NdiukFbMf7PljGLXLtlT9CYGh2jqYkFGXB
3hc6EaGQeCNBA9+4cA0MXvQowt4hdMgGNYXGgWe3dYBhkoQ3rghcwWzvnb786lcqX6mzyl6EGoc
=
X-Received: by 2002:a05:6214:2264:b0:6e8:8798:275d with SMTP id 6a1803df08f44-6fabedbda93mr35115086d6.0.1748440015375;
Wed, 28 May 2025 06:46:55 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IEX8saC8JowDgKFJqADUdGr+8GS/y//V7WI+R18oHaifS73zDbALgMCfKIS/VbxRoERUhg0rQ==
X-Received: by 2002:a05:6214:2264:b0:6e8:8798:275d with SMTP id 6a1803df08f44-6fabedbda93mr35114386d6.0.1748440014911;
Wed, 28 May 2025 06:46:54 -0700 (PDT)
Received: from eriador.lumag.spb.ru (2001-14ba-a0c3-3a00--7a1.rev.dnainternet.fi. [2001:14ba:a0c3:3a00::7a1])
by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5532f62b0a8sm294266e87.82.2025.05.28.06.46.53
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 06:46:54 -0700 (PDT)
Date: Wed, 28 May 2025 16:46:52 +0300
From: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
To: Tommaso Merciai <tommaso.merciai.xr@xxxxxxxxxxxxxx>
Cc: tomm.merciai@xxxxxxxxx, linux-renesas-soc@xxxxxxxxxxxxxxx,
biju.das.jz@xxxxxxxxxxxxxx, Andrzej Hajda <andrzej.hajda@xxxxxxxxx>,
Neil Armstrong <neil.armstrong@xxxxxxxxxx>,
Robert Foss <rfoss@xxxxxxxxxx>,
Laurent Pinchart <Laurent.pinchart@xxxxxxxxxxxxxxxx>,
Jonas Karlman <jonas@xxxxxxxxx>,
Jernej Skrabec <jernej.skrabec@xxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
Adam Ford <aford173@xxxxxxxxx>,
Douglas Anderson <dianders@xxxxxxxxxxxx>,
Jesse Van Gavere <jesseevg@xxxxxxxxx>, dri-devel@xxxxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH v2 0/2] Improve adv7511_mode_set()
Message-ID: <wbja4vmaeqwuoyvfayra6tzik5n477yqaq6v2dmasgtvjlp6wp@bxccfh3hwc55>
References: <20250528070452.901183-1-tommaso.merciai.xr@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528070452.901183-1-tommaso.merciai.xr@xxxxxxxxxxxxxx>
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEyMCBTYWx0ZWRfX1jNFkNNr9RWe
YgW1KCjz3TVfPegE/ICNq+oPTyob8DernjtjcNr7Tl/A8b3T5aMoURC1MvJcx01ikg0fFDuWQhF
Fz4hVNFwQGt0uv1u2nhAT0r2g4pkzCfNGDC6OC7H175DJ6tqCHh8Z93fYzeEstA+8lS5907YUbs
9vn+10t4ALWOvNABG09ErV9cUT2PFpu/Ut46kHRZ0kKisEqOOlry+iiZz+lEMGWRmGL7V02a5iE
nC+5+lIdvF+HOWTgL9AfYQ8oSOMUwXlW34E/mTKa5XvcHiOc3BdO/UQp3Nv743WDEZ6Mqymx9r6
meIW7rsn1IYKzed9UCXW3cEg7mDcZcbwpLDB/wLm7UJcggokss81tw4e8WVd75yjz/eD8nuaW5L
KDCsd3snUm7EVEZQf/qpsjyBwpPRW6SXCi2iWRB0fwgJY1KkUSZWmhj0WObzxX688ieCV0B0
X-Authority-Analysis: v=2.4 cv=Fes3xI+6 c=1 sm=1 tr=0 ts=683713d0 cx=c_pps
a=7E5Bxpl4vBhpaufnMqZlrw==:117 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10
a=dt9VzEwgFbYA:10 a=EUspDBNiAAAA:8 a=mDXOUA0a1PfOXZ9ygMcA:9 a=CjuIK1q_8ugA:10
a=pJ04lnu7RYOZP9TFuWaZ:22
X-Proofpoint-GUID: E4KXIP734w2EZ8iQX2vfMsCZms6THcUm
X-Proofpoint-ORIG-GUID: E4KXIP734w2EZ8iQX2vfMsCZms6THcUm
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_07,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
mlxscore=0 malwarescore=0 impostorscore=0 phishscore=0 clxscore=1015
lowpriorityscore=0 bulkscore=0 priorityscore=1501 mlxlogscore=963 spamscore=0
adultscore=0 suspectscore=0 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280120
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 09:04:36AM +0200, Tommaso Merciai wrote:
> Dear All,
>
> Currently adv7511_bridge_atomic_enable() call adv7511_power_on(), then
> adv7511_dsi_config_timing_gen() that is responsible to update h/v porch
> params.
>
> But during the adv7511_mode_set() adv7511->curr_mode change and this is
> not reflected into the h/v ADV porch regs, then h/w porch regs are keeping
> the old values.
>
> This series fix this issue moving adv711_dsi_config_timing_gen() into
> the adv7511_mode_set().
>
> Thanks & Regards,
> Tommaso
For the series:
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
--
With best wishes
Dmitry
Return-Path: <linux-kernel+bounces-665564-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 91C5041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:49:10 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id A82354E505B
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:49:11 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 770902874E4;
Wed, 28 May 2025 13:49:04 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="GLxs0TxI"
Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0E97E3D561;
Wed, 28 May 2025 13:49:01 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440143; cv=none; b=V6TWQUPF99EHGa1ty0+DjhxsHIvZqiO9F3kWzS9P9Hnobn27Yx3cE1Bhn1nSRlicEiQjdO9jAj6f/hhJuRYq1M5PPil04gjddCKCfmMyVttZ0UQMZsWQtNMdw/zVR2XPPf04khKY2j5nZYwQwSN1f5HsGoGLVrzcYT1zruHKBwc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440143; c=relaxed/simple;
bh=U3Zeg461BcQ45bSY3V6xOeWA6myBDPj8t0xHlLX5S68=;
h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=MahCOx6GAZNuTCw25MvA6GLMwmbQ7xag2ZAq2h7jPsu+4J7wcfxxB0bVr7CnoH77Pq672W0AN4oXvsGuMKlePcX1RGIBDe7UBvfNXmO5q0ELUnq84K6j+QMYayVWIQOoFqR+HDM9C+7cNs5aoyTTNP3cLmh3NKvskMLQ1ybmhi8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=GLxs0TxI; arc=none smtp.client-ip=148.163.156.1
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com
Received: from pps.filterd (m0353729.ppops.net [127.0.0.1])
by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S5ZFbb007498;
Wed, 28 May 2025 13:48:40 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc
:content-transfer-encoding:date:from:message-id:mime-version
:subject:to; s=pp1; bh=d39gSKHNC284284u0Og7cE96FODSGufXxda6EnOsZ
O8=; b=GLxs0TxI4I7EX+bqm08L8v4oyGatExbpAlP7pKDWFxeavgqismlzzE2LP
/TwG0lN3i/n/c2QSMNhnz80BHmukaYrs+wjYqozL75mxdzE1wKvOmZQVOSMfzQ4W
RaO50Klngr3HXdtvw/WYLx33e0mbvOpio7hDJAuJEofkvFn0xyk1Wu5tzi4hpJWa
mCDEIq+GKD55etFGFnHmdVFHSKS34WwEBz3QkiFyz53S22uFSXBubezCNXAVXgEc
+4kEhIwHxOT4Hcn6XOw6GtzG5SaI8AhkrZWXuyKyDITclheGQTHbcNmjSI1qBrj3
0EKwEGxiM9YvN7vgNSX5oKLiVl8pQ==
Received: from pps.reinject (localhost [127.0.0.1])
by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 46wvfb27sg-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 13:48:40 +0000 (GMT)
Received: from m0353729.ppops.net (m0353729.ppops.net [127.0.0.1])
by pps.reinject (8.18.0.8/8.18.0.8) with ESMTP id 54SDdMRb003075;
Wed, 28 May 2025 13:48:40 GMT
Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92])
by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 46wvfb27sb-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 13:48:39 +0000 (GMT)
Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1])
by ppma22.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 54SAl0Vf016202;
Wed, 28 May 2025 13:48:38 GMT
Received: from smtprelay02.fra02v.mail.ibm.com ([9.218.2.226])
by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 46uru0qu3e-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 13:48:38 +0000
Received: from smtpav03.fra02v.mail.ibm.com (smtpav03.fra02v.mail.ibm.com [10.20.54.102])
by smtprelay02.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 54SDmWaO36372936
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Wed, 28 May 2025 13:48:32 GMT
Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1])
by IMSVA (Postfix) with ESMTP id 7764920040;
Wed, 28 May 2025 13:48:32 +0000 (GMT)
Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1])
by IMSVA (Postfix) with ESMTP id 3C5F320063;
Wed, 28 May 2025 13:48:28 +0000 (GMT)
Received: from localhost.localdomain (unknown [9.43.74.199])
by smtpav03.fra02v.mail.ibm.com (Postfix) with ESMTP;
Wed, 28 May 2025 13:48:27 +0000 (GMT)
From: Aditya Bodkhe <adityab1@xxxxxxxxxxxxx>
To: linuxppc-dev@xxxxxxxxxxxxxxxx
Cc: linux-kernel@xxxxxxxxxxxxxxx, linux-trace-kernel@xxxxxxxxxxxxxxx,
maddy@xxxxxxxxxxxxx, mpe@xxxxxxxxxxxxxx, npiggin@xxxxxxxxx,
christophe.leroy@xxxxxxxxxx, rostedt@xxxxxxxxxxx, mhiramat@xxxxxxxxxx,
mark.rutland@xxxxxxx, Aditya Bodkhe <aditya.b1@xxxxxxxxxxxxx>
Subject: [PATCH 1/2] powerpc/ftrace: support CONFIG_FUNCTION_GRAPH_RETVAL
Date: Wed, 28 May 2025 19:18:19 +0530
Message-Id: <20250528134820.74121-1-adityab1@xxxxxxxxxxxxx>
X-Mailer: git-send-email 2.39.3 (Apple Git-146)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-TM-AS-GCONF: 00
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDExOSBTYWx0ZWRfX+pg/+IcbRaFj oXqbKnTslzKV8Q6pwrBpAR5KSCLy6q2zhvYupIc/UDOSiV9tVKqM9g/GqwuOySPWrLcy89AfaL8 eVneIkEV3Y5w/3pfRU4NnQE3zIqKA1lVhKcAs6PlYLp4Fyi8dlvG3/Zu4JIXYS+dRnZVOtzvlMX
+6jdZd/xGiWr+N9OjnUO3ccuQG0kNP8AaWlLTa+3grfNmYNKdAHxtnbWU6D28L6Ml9UQZbY0CAt onwUwrpSQuYrqRLsTITnX3w07t0M34M2kHxqiDIycdHW7Art1G0aRdSWNrghuM4wRyoROg1vn/8 JTg3ASbKR+XIsOm4PLjOOhLmRL2q/3BFhdhejx9ntjX3DkkdN2iWUAjTLfYVQPAEDpu2imkDyQx
RPE35R0pHKmstvSNhzk+VSTRoXaiW+Mat9zsOmj+aRHHKnU2ZJpifO4i6bRNVoj6adk1L4dT
X-Proofpoint-ORIG-GUID: KKO0TYATbZexYmOzXBgc018ZPDY4dIDL
X-Authority-Analysis: v=2.4 cv=bt5MBFai c=1 sm=1 tr=0 ts=68371438 cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=dt9VzEwgFbYA:10 a=VnNF1IyMAAAA:8 a=f-JPSP1mq3vSRxYuwIAA:9
X-Proofpoint-GUID: uTXIcz3ei5cApGLwxDGX-hcXMplvJDKz
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=999
impostorscore=0 malwarescore=0 bulkscore=0 spamscore=0 lowpriorityscore=0
suspectscore=0 adultscore=0 priorityscore=1501 phishscore=0 mlxscore=0
clxscore=1011 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280119
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Aditya Bodkhe <aditya.b1@xxxxxxxxxxxxx>
commit a1be9ccc57f0 ("function_graph: Support recording and printing the
return value of function") introduced support for function graph return
value tracing.
Additionally, commit a3ed4157b7d8 ("fgraph: Replace fgraph_ret_regs with
ftrace_regs") further refactored and optimized the implementation,
making `struct fgraph_ret_regs` unnecessary.
This patch enables the above modifications for powerpc64, ensuring that
function graph return value tracing is available on this architecture.
After this patch, v6.14+ kernel can also be built with FPROBE on powerpc
but there are a few other build and runtime dependencies for FPROBE to
work properly. The next patch addresses them.
Signed-off-by: Aditya Bodkhe <aditya.b1@xxxxxxxxxxxxx>
---
arch/powerpc/Kconfig | 1 +
arch/powerpc/include/asm/ftrace.h | 15 +++++++++
arch/powerpc/kernel/trace/ftrace_entry.S | 41 ++++++++++++++----------
3 files changed, 40 insertions(+), 17 deletions(-)
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index c3e0cc83f120..9163521bc4b9 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -250,6 +250,7 @@ config PPC
select HAVE_FUNCTION_ARG_ACCESS_API
select HAVE_FUNCTION_DESCRIPTORS if PPC64_ELF_ABI_V1
select HAVE_FUNCTION_ERROR_INJECTION
+ select HAVE_FUNCTION_GRAPH_FREGS
select HAVE_FUNCTION_GRAPH_TRACER
select HAVE_FUNCTION_TRACER if !COMPILE_TEST && (PPC64 || (PPC32 && CC_IS_GCC))
select HAVE_GCC_PLUGINS if GCC_VERSION >= 50200 # plugin support on gcc <= 5.1 is buggy on PPC
diff --git a/arch/powerpc/include/asm/ftrace.h b/arch/powerpc/include/asm/ftrace.h
index 82da7c7a1d12..6ffc9c9cf4e3 100644
--- a/arch/powerpc/include/asm/ftrace.h
+++ b/arch/powerpc/include/asm/ftrace.h
@@ -50,6 +50,21 @@ static __always_inline struct pt_regs *arch_ftrace_get_regs(struct ftrace_regs *
asm volatile("mfmsr %0" : "=r" ((_regs)->msr)); \
} while (0)
+#undef ftrace_regs_get_return_value
+static __always_inline unsigned long
+ftrace_regs_get_return_value(const struct ftrace_regs *fregs)
+{
+ return arch_ftrace_regs(fregs)->regs.gpr[3];
+}
+#define ftrace_regs_get_return_value ftrace_regs_get_return_value
+
+#undef ftrace_regs_get_frame_pointer
+static __always_inline unsigned long
+ftrace_regs_get_frame_pointer(const struct ftrace_regs *fregs)
+{
+ return arch_ftrace_regs(fregs)->regs.gpr[1];
+}
+
static __always_inline void
ftrace_regs_set_instruction_pointer(struct ftrace_regs *fregs,
unsigned long ip)
diff --git a/arch/powerpc/kernel/trace/ftrace_entry.S b/arch/powerpc/kernel/trace/ftrace_entry.S
index 3565c67fc638..eafbfb7584ed 100644
--- a/arch/powerpc/kernel/trace/ftrace_entry.S
+++ b/arch/powerpc/kernel/trace/ftrace_entry.S
@@ -409,23 +409,30 @@ EXPORT_SYMBOL(_mcount)
_GLOBAL(return_to_handler)
/* need to save return values */
#ifdef CONFIG_PPC64
- std r4, -32(r1)
- std r3, -24(r1)
+ stdu r1, -SWITCH_FRAME_SIZE(r1)
+ std r4, GPR4(r1)
+ std r3, GPR3(r1)
+ /* Save previous stack pointer (r1) */
+ addi r3, r1, SWITCH_FRAME_SIZE
+ std r3, GPR1(r1)
/* save TOC */
- std r2, -16(r1)
- std r31, -8(r1)
+ std r2, 24(r1)
+ std r31, 32(r1)
mr r31, r1
- stdu r1, -112(r1)
-
+ /* pass ftrace_regs/pt_regs to ftrace_return_to_handler */
+ addi r3, r1, STACK_INT_FRAME_REGS
/*
* We might be called from a module.
* Switch to our TOC to run inside the core kernel.
*/
LOAD_PACA_TOC()
#else
- stwu r1, -16(r1)
- stw r3, 8(r1)
- stw r4, 12(r1)
+ stwu r1, -SWITCH_FRAME_SIZE(r1)
+ stw r4, GPR4(r1)
+ stw r3, GPR3(r1)
+ addi r3, r1, SWITCH_FRAME_SIZE
+ stw r3, GPR1(r1)
+ addi r3, r1, STACK_INT_FRAME_REGS
#endif
bl ftrace_return_to_handler
@@ -435,15 +442,15 @@ _GLOBAL(return_to_handler)
mtlr r3
#ifdef CONFIG_PPC64
- ld r1, 0(r1)
- ld r4, -32(r1)
- ld r3, -24(r1)
- ld r2, -16(r1)
- ld r31, -8(r1)
+ ld r4, GPR4(r1)
+ ld r3, GPR3(r1)
+ ld r2, 24(r1)
+ ld r31, 32(r1)
+ ld r1, 0(r1)
#else
- lwz r3, 8(r1)
- lwz r4, 12(r1)
- addi r1, r1, 16
+ lwz r3, GPR3(r1)
+ lwz r4, GPR4(r1)
+ addi r1, r1, SWITCH_FRAME_SIZE
#endif
/* Jump back to real return address */
--
2.43.5
Return-Path: <linux-kernel+bounces-665565-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id B1E7141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:49:24 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 84A201BC82A4
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:49:37 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 4300B2874F2;
Wed, 28 May 2025 13:49:14 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="pevBmcVQ"
Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id D8E252853EB;
Wed, 28 May 2025 13:49:11 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440153; cv=none; b=ZJoGdeIObOGZk+5IWJ+eNB30BaDvrVsinq1pOpAqJ4It7WvqzNz+W2JUCfuUAuVpQZwCq6V07zBw6EmLtC6y0K/8NnqKDIW7qjUtBuowZCvfTdOImm6GyMDumxoRdlCkPs6HTGzmAscVybRQghVJB1QAEkYQzku8jGtAPbFmoSk=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440153; c=relaxed/simple;
bh=5RYpfXsEJ7sevgRKClv5ZrckB2deWXjonbx9Z6UXLSM=;
h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:
MIME-Version; b=l8GjfLxXHhG56is+Q1wcicod/gHQeuLzI5LlM/96OXGAfzsCq2aJHvmNSEdNhoT26Xc6s8dQuToOmF2xy47k9CaxTLJeFPKBANKJPaOEbk6gYjnccOJtmCu+AHc6DvueMWyWB5JYThoI6jjs/HCtEW8APgfAdsd0oR0Q47p/6qI=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=pevBmcVQ; arc=none smtp.client-ip=148.163.158.5
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com
Received: from pps.filterd (m0353725.ppops.net [127.0.0.1])
by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S2M81H004256;
Wed, 28 May 2025 13:48:48 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc
:content-transfer-encoding:date:from:in-reply-to:message-id
:mime-version:references:subject:to; s=pp1; bh=rVFTIldYvXpd2qDOz
z3YuFbzbBJnslDYobwgibhjA+I=; b=pevBmcVQbxivXXJGWIXRgIkqExLU8xOs/
p6y8w/to8FrmoZRk/Lby35B0k+fo/Jte+QbNOSfGRisgHtl6BlqSCbHYlaC3RRV9
kxE1wdcnqdMVLUH3UOwRm1K4P13EE2MMLJaw6sYv2PjUCeKDOLK5jN4KvaP1k9Db
CJd7T8WX2isBsyszMsZFkFkY4i5MxGIsI8dMvi4IX2S//F9gXv+BzVoOfMBdVfyl
oo+Px2vKnV1qj4i3TpMPF1ooQjz3NLNe/WRsFuGSFz85vL8mujl50hIf7v06q2Bh
CmkA/xVpen/O8IBw6ZVyp4HxcUP+s/qnK5da9YYoodk5mSv0vXe4Q==
Received: from pps.reinject (localhost [127.0.0.1])
by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 46wgsjd5bh-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 13:48:48 +0000 (GMT)
Received: from m0353725.ppops.net (m0353725.ppops.net [127.0.0.1])
by pps.reinject (8.18.0.8/8.18.0.8) with ESMTP id 54SDlnwA024228;
Wed, 28 May 2025 13:48:47 GMT
Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219])
by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 46wgsjd5be-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 13:48:47 +0000 (GMT)
Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1])
by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 54SAlA5D015826;
Wed, 28 May 2025 13:48:47 GMT
Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229])
by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 46uu537d0n-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 13:48:46 +0000
Received: from smtpav03.fra02v.mail.ibm.com (smtpav03.fra02v.mail.ibm.com [10.20.54.102])
by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 54SDmfrm52691336
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Wed, 28 May 2025 13:48:41 GMT
Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1])
by IMSVA (Postfix) with ESMTP id 7EAB72004D;
Wed, 28 May 2025 13:48:41 +0000 (GMT)
Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1])
by IMSVA (Postfix) with ESMTP id 3E9462004B;
Wed, 28 May 2025 13:48:37 +0000 (GMT)
Received: from localhost.localdomain (unknown [9.43.74.199])
by smtpav03.fra02v.mail.ibm.com (Postfix) with ESMTP;
Wed, 28 May 2025 13:48:37 +0000 (GMT)
From: Aditya Bodkhe <adityab1@xxxxxxxxxxxxx>
To: linuxppc-dev@xxxxxxxxxxxxxxxx
Cc: linux-kernel@xxxxxxxxxxxxxxx, linux-trace-kernel@xxxxxxxxxxxxxxx,
maddy@xxxxxxxxxxxxx, mpe@xxxxxxxxxxxxxx, npiggin@xxxxxxxxx,
christophe.leroy@xxxxxxxxxx, rostedt@xxxxxxxxxxx, mhiramat@xxxxxxxxxx,
mark.rutland@xxxxxxx, Hari Bathini <hbathini@xxxxxxxxxxxxx>,
Aditya Bodkhe <aditya.b1@xxxxxxxxxxxxx>
Subject: [PATCH 2/2] powerpc/fprobe: fix updated fprobe for function-graph tracer
Date: Wed, 28 May 2025 19:18:20 +0530
Message-Id: <20250528134820.74121-2-adityab1@xxxxxxxxxxxxx>
X-Mailer: git-send-email 2.39.3 (Apple Git-146)
In-Reply-To: <20250528134820.74121-1-adityab1@xxxxxxxxxxxxx>
References: <20250528134820.74121-1-adityab1@xxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-TM-AS-GCONF: 00
X-Authority-Analysis: v=2.4 cv=Qspe3Uyd c=1 sm=1 tr=0 ts=68371440 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=dt9VzEwgFbYA:10 a=VnNF1IyMAAAA:8 a=eJdZZeSqwtc_5qrUTOUA:9
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDExOSBTYWx0ZWRfXzXzQ0vDOwPa4 yQFR21u0084zLJKFl/+IfT4zTV43TjGLQUlD0Cu4yE9oAogrk9EYz2cEUXgCD0twqjgaPPj1kjb CR9chjHJxmW+iQhsE7Qx3MJZucatG5hjnxkSkHJ4R2rrwr7CoK7ENIFVhIvs16K09uS++cF1nWi
+lRojuo+dZy2dz2Nkcek7BHx+2/KOeNV/ze9f96XDVRsYqGNgUkICljReqIsChFxzEgx0w/+Ncd nsxlh01aj/yivrp5vhYeBhKQl9GzAjlK3/4yFiJWvEZlbl7UaW+2gIKn53XSpVbpg9Xm40plys9 PkQcUX/OtfD6o7lYJePbXOtdZ8x8jLqaw/vn0Koy2ASutczt1h8ndjWuHhcLvOilYhD8mt4Q4QP
nkQGBTCS2CBcloM1uaezeADeP3YkOPJ4YsHYrmfzBDr9cELsf+dQoEaS8m1iOtr10uSo8cnv
X-Proofpoint-ORIG-GUID: uNhrfTvm3M97-lTnYrx3fGQD5Xa6dDlz
X-Proofpoint-GUID: g2lbWCX53h9a0ziFEy7VuvzpaFsiejbs
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_06,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 clxscore=1015
lowpriorityscore=0 phishscore=0 malwarescore=0 suspectscore=0
priorityscore=1501 bulkscore=0 mlxscore=0 impostorscore=0 spamscore=0
mlxlogscore=604 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280119
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Hari Bathini <hbathini@xxxxxxxxxxxxx>
Since commit 4346ba160409 ("fprobe: Rewrite fprobe on function-graph
tracer"), FPROBE depends on HAVE_FUNCTION_GRAPH_FREGS. With previous
patch adding HAVE_FUNCTION_GRAPH_FREGS for powerpc, FPROBE can be
enabled on powerpc. But with the commit b5fa903b7f7c ("fprobe: Add
fprobe_header encoding feature"), asm/fprobe.h header is needed to
define arch dependent encode/decode macros. The fprobe header MSB
pattern on powerpc is not 0xf. So, define FPROBE_HEADER_MSB_PATTERN
expected on powerpc.
Also, commit 762abbc0d09f ("fprobe: Use ftrace_regs in fprobe exit
handler") introduced HAVE_FTRACE_REGS_HAVING_PT_REGS for archs that
have pt_regs in ftrace_regs. Advertise that on powerpc to reuse
common definitions like ftrace_partial_regs().
Signed-off-by: Hari Bathini <hbathini@xxxxxxxxxxxxx>
Signed-off-by: Aditya Bodkhe <aditya.b1@xxxxxxxxxxxxx>
---
arch/powerpc/Kconfig | 1 +
arch/powerpc/include/asm/fprobe.h | 12 ++++++++++++
2 files changed, 13 insertions(+)
create mode 100644 arch/powerpc/include/asm/fprobe.h
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 9163521bc4b9..2203e4fb64c1 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -246,6 +246,7 @@ config PPC
select HAVE_EFFICIENT_UNALIGNED_ACCESS
select HAVE_GUP_FAST
select HAVE_FTRACE_GRAPH_FUNC
+ select HAVE_FTRACE_REGS_HAVING_PT_REGS
select HAVE_FTRACE_MCOUNT_RECORD
select HAVE_FUNCTION_ARG_ACCESS_API
select HAVE_FUNCTION_DESCRIPTORS if PPC64_ELF_ABI_V1
diff --git a/arch/powerpc/include/asm/fprobe.h b/arch/powerpc/include/asm/fprobe.h
new file mode 100644
index 000000000000..d64bc28fb3d3
--- /dev/null
+++ b/arch/powerpc/include/asm/fprobe.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _ASM_PPC_FPROBE_H
+#define _ASM_PPC_FPROBE_H
+
+#include <asm-generic/fprobe.h>
+
+#ifdef CONFIG_64BIT
+#undef FPROBE_HEADER_MSB_PATTERN
+#define FPROBE_HEADER_MSB_PATTERN (PAGE_OFFSET & ~FPROBE_HEADER_MSB_MASK)
+#endif
+
+#endif /* _ASM_PPC_FPROBE_H */
--
2.43.5
Return-Path: <linux-kernel+bounces-665566-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1DF5041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:49:38 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 5C7094E53D8
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:49:39 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id B72E92882DC;
Wed, 28 May 2025 13:49:25 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="hCLTUpWl"
Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id ECCF22882A8;
Wed, 28 May 2025 13:49:22 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440165; cv=none; b=dyCqxKdxc4rRyDTMPQxEcJV3UkKrxJ2iQVE0ghuW1VyTz5+lsdqtU5QoBMhaQrEA3JyTDXy58Pj+/aUjk9cFVflrAlufh6Cpgn9W5wc8BJdiUUMY2/islT5aG1kBU3FBg7ugpN0w7L/H05PLN0DEVBcfO4TXNdbw4d70eBtaf64=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440165; c=relaxed/simple;
bh=xnT/zC5PKsZjc9EY6L5bqKkp0emOIn4winQ+EC8I16g=;
h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References:
Content-Type:MIME-Version; b=QL3fyl0yJ0jhij9/UHGs8HC+y0P07rU2/cd/kOHWoXmQAY049zOnMSTrU74EXa+mv44Vji9ez/4KGldy6bKoubRzSDLHzVu2MnlwjZTnKN99C+BRrsBzbeGPjTVraDyJJcQbDzS0W5pIVCPr/bTemb7MiGRTYdfOrX/XW7XnTVY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=hCLTUpWl; arc=none smtp.client-ip=148.251.105.195
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com;
s=mail; t=1748440160;
bh=xnT/zC5PKsZjc9EY6L5bqKkp0emOIn4winQ+EC8I16g=;
h=Subject:From:To:Cc:Date:In-Reply-To:References:From;
b=hCLTUpWlgZGE12nzg409+ZreJkdgk5SVxC1ZmySY3dHveR1YLSMfHIwXlh3r1JtIZ
hofR4c4sYzrFsKxCExNjEEJQaGOnQCWDcvJTDYI9H2pXkLGMM+R8ucU1hq9urEF1DA
0NlwS3soyZPxy4KiaXfk7NzYWVdnXLUrjMGssqQX8dY/pCUXxz3+WVsL4ygwFN28lY
6r6n15I9ELj/1iSKDYoJV0c1TFJYgxUL0OCcbN1U/ySiIuPo40+XvJHG1MxCEV6ebK
M3vnSvQeDz1lpKpLgQoP4JS+LectKNx1TEMM8CUDpf9sXXiNrAdUKzOc2o9egRPMEB
obv24a9KI0h7w==
Received: from [IPv6:2606:6d00:17:b2fc::5ac] (unknown [IPv6:2606:6d00:17:b2fc::5ac])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits))
(No client certificate requested)
(Authenticated sender: nicolas)
by bali.collaboradmins.com (Postfix) with ESMTPSA id 9D59617E153E;
Wed, 28 May 2025 15:49:19 +0200 (CEST)
Message-ID: <43d3d88e292c3aaf25eda8514451ef1949612620.camel@xxxxxxxxxxxxx>
Subject: Re: [PATCH v2 4/7] media: chips-media: wave5: Use spinlock whenever
statue is changed
From: Nicolas Dufresne <nicolas.dufresne@xxxxxxxxxxxxx>
To: "jackson.lee" <jackson.lee@xxxxxxxxxxxxxxx>, "mchehab@xxxxxxxxxx"
<mchehab@xxxxxxxxxx>, "hverkuil-cisco@xxxxxxxxx"
<hverkuil-cisco@xxxxxxxxx>, "bob.beckett@xxxxxxxxxxxxx"
<bob.beckett@xxxxxxxxxxxxx>
Cc: "linux-media@xxxxxxxxxxxxxxx" <linux-media@xxxxxxxxxxxxxxx>,
"linux-kernel@xxxxxxxxxxxxxxx" <linux-kernel@xxxxxxxxxxxxxxx>,
"lafley.kim" <lafley.kim@xxxxxxxxxxxxxxx>, "b-brnich@xxxxxx"
<b-brnich@xxxxxx>, "hverkuil@xxxxxxxxx" <hverkuil@xxxxxxxxx>, Nas Chung
<nas.chung@xxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 09:49:18 -0400
In-Reply-To: <SE1P216MB130368B2DDB6A235D2603E04ED64A@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <20250522072606.51-1-jackson.lee@xxxxxxxxxxxxxxx>
<20250522072606.51-5-jackson.lee@xxxxxxxxxxxxxxx>
<effe40f0d4caef43bf772d350a67d68833941cbb.camel@xxxxxxxxxxxxx>
<SE1P216MB130368B2DDB6A235D2603E04ED64A@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Organization: Collabora Canada
Content-Type: text/plain; charset="UTF-8"
User-Agent: Evolution 3.56.2 (3.56.2-1.fc42)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Le mardi 27 mai 2025 à 05:02 +0000, jackson.lee a écrit :
> Hi Nicolas
>
> > -----Original Message-----
> > From: Nicolas Dufresne <nicolas.dufresne@xxxxxxxxxxxxx>
> > Sent: Saturday, May 24, 2025 2:41 AM
> > To: jackson.lee <jackson.lee@xxxxxxxxxxxxxxx>; mchehab@xxxxxxxxxx;
> > hverkuil-cisco@xxxxxxxxx; sebastian.fricke@xxxxxxxxxxxxx;
> > bob.beckett@xxxxxxxxxxxxx; dafna.hirschfeld@xxxxxxxxxxxxx
> > Cc: linux-media@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; lafley.kim
> > <lafley.kim@xxxxxxxxxxxxxxx>; b-brnich@xxxxxx; hverkuil@xxxxxxxxx; Nas
> > Chung <nas.chung@xxxxxxxxxxxxxxx>
> > Subject: Re: [PATCH v2 4/7] media: chips-media: wave5: Use spinlock
> > whenever statue is changed
> >
> > Hi,
> >
> > Le jeudi 22 mai 2025 à 16:26 +0900, Jackson.lee a écrit :
> > > From: Jackson Lee <jackson.lee@xxxxxxxxxxxxxxx>
> > >
> > > The device_run and finish_decode is not any more synchronized, so lock
> > > was needed in the device_run whenever state was changed.
> >
> > Can you try to introduce the locking ahead of the patches, otherwise this
> > break bisectability as the in-between become racy.
>
>
> Do you want to introduce this patch ahead of the performance patch?
I'm sure you can find the right anwser if you understand why I'm asking this. The way
patchset should be layout is so that at any step applying the set, the driver
should remain stable. If one patch above breaks something, and you fix it in the
next patch, this is not a bisectable set.
git bisect does not know about "sets" and shouldn't need to know about it either.
regards,
Nicolas
>
> Thanks
> Jackson
>
> >
> > Nicolas
> >
> > >
> > > Signed-off-by: Jackson Lee <jackson.lee@xxxxxxxxxxxxxxx>
> > > Signed-off-by: Nas Chung <nas.chung@xxxxxxxxxxxxxxx>
> > > ---
> > > Â drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c | 8 +++++++-
> > > Â 1 file changed, 7 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c
> > > b/drivers/media/platform/chips- media/wave5/wave5-vpu-dec.c index
> > > 42981c3b49bc..719c5527eb7f 100644
> > > --- a/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c
> > > +++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c
> > > @@ -1577,6 +1577,7 @@ static void wave5_vpu_dec_device_run(void *priv)
> > > Â struct queue_status_info q_status;
> > > Â u32 fail_res = 0;
> > > Â int ret = 0;
> > > + unsigned long flags;
> > >
> > > Â dev_dbg(inst->dev->dev, "%s: Fill the ring buffer with new
> > bitstream data", __func__);
> > > Â pm_runtime_resume_and_get(inst->dev->dev);
> > > @@ -1617,7 +1618,9 @@ static void wave5_vpu_dec_device_run(void *priv)
> > > Â }
> > > Â spin_unlock_irqrestore(&inst->state_spinlock, flags);
> > > Â } else {
> > > + spin_lock_irqsave(&inst->state_spinlock, flags);
> > > Â switch_state(inst, VPU_INST_STATE_INIT_SEQ);
> > > + spin_unlock_irqrestore(&inst->state_spinlock, flags);
> > > Â }
> > >
> > > Â break;
> > > @@ -1628,8 +1631,9 @@ static void wave5_vpu_dec_device_run(void *priv)
> > > Â * we had a chance to switch, which leads to an invalid state
> > > Â * change.
> > > Â */
> > > + spin_lock_irqsave(&inst->state_spinlock, flags);
> > > Â switch_state(inst, VPU_INST_STATE_PIC_RUN);
> > > -
> > > + spin_unlock_irqrestore(&inst->state_spinlock, flags);
> > > Â /*
> > > Â * During DRC, the picture decoding remains pending, so just
> > leave the job
> > > Â * active until this decode operation completes.
> > > @@ -1643,7 +1647,9 @@ static void wave5_vpu_dec_device_run(void *priv)
> > > Â ret = wave5_prepare_fb(inst);
> > > Â if (ret) {
> > > Â dev_warn(inst->dev->dev, "Framebuffer preparation,
> > fail: %d\n",
> > > ret);
> > > + spin_lock_irqsave(&inst->state_spinlock, flags);
> > > Â switch_state(inst, VPU_INST_STATE_STOP);
> > > + spin_unlock_irqrestore(&inst->state_spinlock, flags);
> > > Â break;
> > > Â }
> > >
Return-Path: <linux-kernel+bounces-665567-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id CF96141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:49:50 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 01C864E5400
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:49:52 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 63BA02882A3;
Wed, 28 May 2025 13:49:37 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="i8MzSD6n"
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 299D92874F2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:49:34 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440176; cv=none; b=VPH1JyPORxAfKMou3QjDpBvjlMdVi3xBEVkPTN83Dh69sm6uj/6f4T6b6sbVBx8N8nEtVj5xidWBvhzT4mER7gwi2FdTozY2H51P69SRbTX4CNcduCytxrIoaM/lgzo1Ge2jDG9twICBCt54DxdRlWdcHn/aWdrA6WiZFvjmg2M=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440176; c=relaxed/simple;
bh=ghaXBE1MgUHH3Jlnqhk3hqjJWrRd4NAWpHTaQalt0HU=;
h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:
MIME-Version:Content-Type; b=KWvmnGek/1fniL0EKQ3ReJH6J4EAkX9FvfwFcDbFZCefIz7e+yS6TFsoTIIaSYR4GydF0LrQrSBr+LJ+U/vXYTBP2C/kio7LnOTrf89mjvBXGexD0JioDjeRs9KhYCyDFQHrc2Ty1U/+Zst29dxa+gO4iAixl2yyDA8gYeNRt34=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=i8MzSD6n; arc=none smtp.client-ip=205.220.168.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com
Received: from pps.filterd (m0279867.ppops.net [127.0.0.1])
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S9lCkf013860
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:49:34 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=
cc:content-transfer-encoding:content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
aR8odOp1bWcix/LESz5USRpAg6qn2kdhUsn02vsANFE=; b=i8MzSD6nVRzQJFym
YeapS9mErWPakUo/a349MpEC/gkKDj+SMzl+ehS5QHAd60G5R5x7SL0GWnFzXfr8
AINR7hl68lundk6eiXStqVMcvLBSiXEivBvFygOYQalAEIDuWXyvwUbMzJxq4aZe
hYokdVFaQaV1DeqjeqpZK5FZhEJKORO8W8kCm1OlgJnGaUGy+SU3IW2lgk9xOBPN
Nk3f5t/wkOKj/1S7PyIkoOYiayOcvwwt5sVZoRORkQPkisygtbL34rMERCXcJGQb
RnSs/eVUS/BZT+Bqsi0KGuZLTgKlfWZnsDYxm5wYboenKTE5tZSgmInoVzFQMcPw
vtXP7g==
Received: from mail-qv1-f69.google.com (mail-qv1-f69.google.com [209.85.219.69])
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46w691cw20-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT)
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:49:34 +0000 (GMT)
Received: by mail-qv1-f69.google.com with SMTP id 6a1803df08f44-6faa913360fso73022986d6.3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 06:49:33 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748440167; x=1749044967;
h=content-transfer-encoding:mime-version:references:in-reply-to
:message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=aR8odOp1bWcix/LESz5USRpAg6qn2kdhUsn02vsANFE=;
b=ldRD7ISQSZCaJcPpNvD8nB2zpVs6b4B/ihQywo2vBQ1x2dkJbHfntMoKJNAhgZt9dq
wD/lfpLB57fMF6Tkt1bVd+/I2WXC3HteKnVclBZ/BpdGte2kbr16EodO/xEb2gEBlpxp
PIGhe7oN8PjKnL5X3FoRQEgrXs7JoA1LkXXA+0dbnIPPEK41ld+gl19VLry5O5Z6WN50
/EE2AA4fJCKV8QPqA9xl/fPEvgC8OvHNGlye+iuXW9pMP+hXlyjckEWwYFOSN4oYmmo8
dGFSKFamIELDecO1jLCdz8qPAEDoJ2+baE8J1+dVbH5xwSqyRqJ9icC1aOfraCHG4zkm
psGA==
X-Forwarded-Encrypted: i=1; AJvYcCW16ATLTyegd/PORWAeS9XFTgywCAMmcvJMqFBwWVVPMPpwrgtOfleF8ZWDZl3uY13Nwc1UDQkQWq6xvZY=@vger.kernel.org
X-Gm-Message-State: AOJu0YzpDQaN0IcdkKVqgwgBl8ti36cFBZPgLcy8lwpCXJqCTAYLIbvp
QBCRSPfyTJFr5mlgjfaaCgyy4cz25azSXCLOqGczyFiihMVRjR2Sr2Ja0MZNp1w8ombtvvi8566
ri3tSgT08Ohh36Hoo5EhmiAT3xOnh0YU4OPISQAszQhhqbsEn3DdawFXMoqzccSK339s=
X-Gm-Gg: ASbGncthRl19qgEOy7ISob2hfgm7PW3hGrZ+79sCAOBNMq2zbORwKEMVIUSkApBQxVz
xsV62FktEnYBzn8IYTIN2bSeOjv9hbbRvURJaivj+8a4X5rpYlhJ6QuBJw3Jof3dNZRGVFQe2rK
lWHWeSBnFfGiNBirQdyezIot8d90rcbojKPfR/dsD+ivvQ5XrFI7L5ATvmz4ASb4w9WrXogfi17
yLeCYgNps+yDTr1IT68HZHUHtrqWlGu7VHlVvHbS9vQ0ZAtKr9Q1K5TPnGR8KjZ7J24RELnk7pP
GrabLgfqsywby7L1DBGyoZW9eUEJT3Nq1DHV25djQll895k3/X9Yp9VFhA0zOsOqyITgwSa3SjB
Bw4Qb1krJg5DmvUJ3ZZ6+Tx4C
X-Received: by 2002:a05:6214:4115:b0:6ed:19d1:212f with SMTP id 6a1803df08f44-6fa9cff156fmr267535416d6.5.1748440166988;
Wed, 28 May 2025 06:49:26 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IHDO6tyMZzFc/D9U+K6bEzH7XCUHyfwSxg+WJm9sWUexygSxn7JoUOf89bLsbQ1ceAIxPl3Rg==
X-Received: by 2002:a05:6214:4115:b0:6ed:19d1:212f with SMTP id 6a1803df08f44-6fa9cff156fmr267534936d6.5.1748440166606;
Wed, 28 May 2025 06:49:26 -0700 (PDT)
Received: from umbar.lan (2001-14ba-a0c3-3a00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a0c3:3a00:264b:feff:fe8b:be8a])
by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5532f6a6253sm289576e87.202.2025.05.28.06.49.25
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 06:49:25 -0700 (PDT)
From: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
To: tomm.merciai@xxxxxxxxx,
Tommaso Merciai <tommaso.merciai.xr@xxxxxxxxxxxxxx>
Cc: linux-renesas-soc@xxxxxxxxxxxxxxx, biju.das.jz@xxxxxxxxxxxxxx,
Andrzej Hajda <andrzej.hajda@xxxxxxxxx>,
Neil Armstrong <neil.armstrong@xxxxxxxxxx>,
Robert Foss <rfoss@xxxxxxxxxx>,
Laurent Pinchart <Laurent.pinchart@xxxxxxxxxxxxxxxx>,
Jonas Karlman <jonas@xxxxxxxxx>,
Jernej Skrabec <jernej.skrabec@xxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
Adam Ford <aford173@xxxxxxxxx>,
Douglas Anderson <dianders@xxxxxxxxxxxx>,
Jesse Van Gavere <jesseevg@xxxxxxxxx>, dri-devel@xxxxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH v2 0/2] Improve adv7511_mode_set()
Date: Wed, 28 May 2025 16:49:25 +0300
Message-Id: <174844015640.298125.2461085924621609472.b4-ty@xxxxxxxxxxxxxxxx>
X-Mailer: git-send-email 2.39.5
In-Reply-To: <20250528070452.901183-1-tommaso.merciai.xr@xxxxxxxxxxxxxx>
References: <20250528070452.901183-1-tommaso.merciai.xr@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
X-Authority-Analysis: v=2.4 cv=WfoMa1hX c=1 sm=1 tr=0 ts=6837146e cx=c_pps
a=wEM5vcRIz55oU/E2lInRtA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10
a=dt9VzEwgFbYA:10 a=EUspDBNiAAAA:8 a=Uzkek4HQei2ilSC5KyYA:9 a=QEXdDO2ut3YA:10
a=OIgjcC2v60KrkQgK7BGD:22
X-Proofpoint-GUID: ReQ8-66kT_ZcjsTrEKOErTfkKptFatDv
X-Proofpoint-ORIG-GUID: ReQ8-66kT_ZcjsTrEKOErTfkKptFatDv
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEyMSBTYWx0ZWRfX3zT5CupwGA7g
X//yOfzUJJAKU0FqINt3aowng36asX6eCqos4ZjBi5mq9xQVaX0ZdYkwfadcTNw0bvZdTIu/Cl4
g4yXnrgnGxSKPMmW53lPZmWej8fXy+8WdGYB9atyYrf1eycO0ARxlULRs454gCnsR5aeUk1q9od
qrqr3wrwZbA6iXjmtL6eAWWsyWXIyN6B3HO0ee04sLrNXcCL1XqdkGpXwiKH/kUeDQfwWe5it6r
lZe1uAY0LX1fu+ev3Y/bp1ZSAFvNJlrSKJTpSA8ZvY/rlZnXpzrKC5OlbWUx65M7do6CLbhARLm
kaD+2OYd5+3oktuKmlzJS7P7j8ZhJPsxuJCaaDGN5bgMJp3VSITiCMWcNzzRHBibLQJJYnRK05/
esnQPsUeN3M5dEC+7qzYLw4TP+5Hb8xHmvgqK+11O86t7VLPGjjM5b4nK57fztl9ZJiFTfxZ
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_07,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
lowpriorityscore=0 phishscore=0 mlxlogscore=999 priorityscore=1501 mlxscore=0
bulkscore=0 adultscore=0 spamscore=0 suspectscore=0 malwarescore=0
clxscore=1015 impostorscore=0 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280121
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 09:04:36 +0200, Tommaso Merciai wrote:
> Currently adv7511_bridge_atomic_enable() call adv7511_power_on(), then
> adv7511_dsi_config_timing_gen() that is responsible to update h/v porch
> params.
>
> But during the adv7511_mode_set() adv7511->curr_mode change and this is
> not reflected into the h/v ADV porch regs, then h/w porch regs are keeping
> the old values.
>
> [...]
Applied to drm-misc-next, thanks!
[1/2] drm/bridge: adv7511: Move adv711_dsi_config_timing_gen() into adv7511_mode_set()
commit: 1f5090c4ae71d070aa9dac49b8ef3efe0da0fb36
[2/2] drm/bridge: adv7511: Rename adv7511_dsi_config_timing_gen() into adv7533_dsi_config_timing_gen()
commit: 6e76b312a681224881c05835ed5a26e012ce80ea
Best regards,
--
Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
Return-Path: <linux-kernel+bounces-665568-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 89E7441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:50:47 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id C18E61BC84D5
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:50:59 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 88907288511;
Wed, 28 May 2025 13:50:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=blackhole.kfki.hu header.i=@blackhole.kfki.hu header.b="APQCFQVk"
Received: from smtp-out.kfki.hu (smtp-out.kfki.hu [148.6.0.49])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0528F1F37D3;
Wed, 28 May 2025 13:50:28 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.6.0.49
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440231; cv=none; b=ZUpZyjw+e87Ke6TTdfoaGxCVT1y2Ksc86HliN9PdK3F3ddpkAfbo4umMT4ffFyLvueXIZCCI2kf0EJB2y8WF9prt0tmqn6x+ZKDmwNEhd4phxX2Iy5rC1bQmXvpbSdJ0npl48YCEW9vHMHZW1dKoI+sDk7hlIluMfP5LpsQULWI=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440231; c=relaxed/simple;
bh=Mpg9XUQl59h3pBUPCN3zmB3GaCOs4B75IwcrLW4NqHU=;
h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:
MIME-Version:Content-Type; b=dtK0e/1HCGUpw8NUeUtfpNUesPk5z+bFzGM5TsuvcHWVfyL16HVqep9iRg4VsCxo/MPwoae9b/3yXGVjAzlHOAjkGKliXtRO7Lw4LlgwvipQrK1k9gUvdNw2IGwuLoRVLE5UGcNQ/0DDodxhLP+1Z2/woPQh3H5S8SW68hnT1oI=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=blackhole.kfki.hu; spf=pass smtp.mailfrom=blackhole.kfki.hu; dkim=pass (1024-bit key) header.d=blackhole.kfki.hu header.i=@blackhole.kfki.hu header.b=APQCFQVk; arc=none smtp.client-ip=148.6.0.49
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=blackhole.kfki.hu
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=blackhole.kfki.hu
Received: from localhost (localhost [127.0.0.1])
by smtp0.kfki.hu (Postfix) with ESMTP id E1F8719201A0;
Wed, 28 May 2025 15:45:02 +0200 (CEST)
Authentication-Results: smtp012.wigner.hu (amavis); dkim=pass (1024-bit key)
reason="pass (just generated, assumed good)" header.d=blackhole.kfki.hu
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
blackhole.kfki.hu; h=content-id:mime-version:references
:message-id:in-reply-to:from:from:date:date:received:received
:received:received; s=20151130; t=1748439901; x=1750254302; bh=h
8HpPOKmadZTCE9YZDzfLUVOhtwWReeTJejqPLhcSh0=; b=APQCFQVkqQ4hnav5I
QB6OUfiOG26fnJRO2a3/UiISo/Rd/E9cFQvj9Mo6JofAC9UNoIZAQfdKGLgjiASD
ZktPvu3kIFP58NkjcTWmUpPswyq+9b0NddrmaVTRd0BnED1mrPhbvKl9GSsSmitQ
JfU7eO4ulRul6hMa/fQgdqlspU=
X-Virus-Scanned: Debian amavis at smtp0.kfki.hu
Received: from smtp0.kfki.hu ([127.0.0.1])
by localhost (smtp0.kfki.hu [127.0.0.1]) (amavis, port 10026) with ESMTP
id W5zIGn_boHeP; Wed, 28 May 2025 15:45:01 +0200 (CEST)
Received: from blackhole.kfki.hu (blackhole.szhk.kfki.hu [148.6.240.2])
by smtp0.kfki.hu (Postfix) with ESMTP id 09878192019E;
Wed, 28 May 2025 15:45:00 +0200 (CEST)
Received: by blackhole.kfki.hu (Postfix, from userid 1000)
id 90E6C34316A; Wed, 28 May 2025 15:45:00 +0200 (CEST)
Received: from localhost (localhost [127.0.0.1])
by blackhole.kfki.hu (Postfix) with ESMTP id 8F5B1343169;
Wed, 28 May 2025 15:45:00 +0200 (CEST)
Date: Wed, 28 May 2025 15:45:00 +0200 (CEST)
From: Jozsef Kadlecsik <kadlec@xxxxxxxxxxxxxxxxx>
To: Eric Dumazet <edumazet@xxxxxxxxxx>
cc: ying chen <yc1082463@xxxxxxxxx>, Florian Westphal <fw@xxxxxxxxx>,
pablo@xxxxxxxxxxxxx, kadlec@xxxxxxxxxxxxx, davem@xxxxxxxxxxxxx,
kuba@xxxxxxxxxx, pabeni@xxxxxxxxxx, netfilter-devel@xxxxxxxxxxxxxxx,
coreteam@xxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [bug report, linux 6.15-rc4] A large number of connections in
the SYN_SENT state caused the nf_conntrack table to be full.
In-Reply-To: <CANn89iLG4mgzHteS7ARwafw-5KscNv7vBD3zM9J6yZwDq+RbcQ@xxxxxxxxxxxxxx>
Message-ID: <5611b12b-d560-cbb8-1d74-d935f60244dd@xxxxxxxxxxxxxxxxx>
References: <CAN2Y7hxscai7JuC0fPE8DZ3QOPzO_KsE_AMCuyeTYRQQW_mA2w@xxxxxxxxxxxxxx> <aDcLIh2lPkAWOVCI@xxxxxxxxx> <CAN2Y7hzKd+VxWy56q9ad8xwCcHPy5qoEaswZapnF87YkyYMcsA@xxxxxxxxxxxxxx> <CANn89iLG4mgzHteS7ARwafw-5KscNv7vBD3zM9J6yZwDq+RbcQ@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="110363376-769770083-1748439818=:6759"
Content-ID: <c1387642-c4d5-c4ae-a0e2-bda921178228@xxxxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
--110363376-769770083-1748439818=:6759
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-ID: <0fe7b6ac-9804-75fc-cbe2-69870eb5e0cf@xxxxxxxxxxxxxxxxx>
Content-Transfer-Encoding: quoted-printable
On Wed, 28 May 2025, Eric Dumazet wrote:
> On Wed, May 28, 2025 at 6:26=E2=80=AFAM ying chen <yc1082463@xxxxxxxxx>=
wrote:
>>
>> On Wed, May 28, 2025 at 9:10=E2=80=AFPM Florian Westphal <fw@xxxxxxxxx=
> wrote:
>>>
>>> ying chen <yc1082463@xxxxxxxxx> wrote:
>>>> Hello all,
>>>>
>>>> I encountered an "nf_conntrack: table full" warning on Linux 6.15-rc=
4.
>>>> Running cat /proc/net/nf_conntrack showed a large number of
>>>> connections in the SYN_SENT state.
>>>> As is well known, if we attempt to connect to a non-existent port, t=
he
>>>> system will respond with an RST and then delete the conntrack entry.
>>>> However, when we frequently connect to non-existent ports, the
>>>> conntrack entries are not deleted, eventually causing the nf_conntra=
ck
>>>> table to fill up.
>>>
>>> Yes, what do you expect to happen?
>> I understand that the conntrack entry should be deleted immediately
>> after receiving the RST reply.
>
> Then it probably hints that you do not receive RST for all your SYN=20
> packets.
And Eric has got right: because the states are in SYN_SENT then either th=
e=20
RST packets were not received or out of the window or invalid from other=20
reasons.
Best regards,
Jozsef
--110363376-769770083-1748439818=:6759--
Return-Path: <linux-kernel+bounces-665569-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 5ADB341E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:50:56 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id A09674E555A
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:50:53 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id E95A8288531;
Wed, 28 May 2025 13:50:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=blackhole.kfki.hu header.i=@blackhole.kfki.hu header.b="IXiTzO5i"
Received: from smtp-out.kfki.hu (smtp-out.kfki.hu [148.6.0.50])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9F8DC2853EB;
Wed, 28 May 2025 13:50:29 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.6.0.50
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440232; cv=none; b=SAe6lk9rAF/G9jjQ/aZXKtTl93B3gv1eeABUUvKOKIgzMfyEEiHVkIkcl7lLQzyiv0zdmaemT2W/h9daXcVEYe9DpA5X613Vhebt2XhGbkIs41VkAKl+ixg1NqvDBYYFodGie61f2RZeGaUqpng3A24l2IQZ9KBU7wRv6f/0qac=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440232; c=relaxed/simple;
bh=LhTAubIh/5Hl+CIcaPgophp5ZeXXrXTUiUkisse0S+8=;
h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:
MIME-Version:Content-Type; b=ZOXrLcwSWE4PgZ/UXCjtbnQunoJHT9SD99zltYbiK6sRhge/BYwdPffeH3+hFnVhGIOFMnFBpq/W44nAC9G/Rm6f1y58IHSb378lbtkyyEH3n9SH9i9liVJ6LOPxaxgYSYVM8metTQxPMR7zgTbs/ltOmiqAhQbWX2Va4lf2/zg=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=blackhole.kfki.hu; spf=pass smtp.mailfrom=blackhole.kfki.hu; dkim=pass (1024-bit key) header.d=blackhole.kfki.hu header.i=@blackhole.kfki.hu header.b=IXiTzO5i; arc=none smtp.client-ip=148.6.0.50
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=blackhole.kfki.hu
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=blackhole.kfki.hu
Received: from localhost (localhost [127.0.0.1])
by smtp1.kfki.hu (Postfix) with ESMTP id CC9A15C001C8;
Wed, 28 May 2025 15:41:51 +0200 (CEST)
Authentication-Results: smtp012.wigner.hu (amavis); dkim=pass (1024-bit key)
reason="pass (just generated, assumed good)" header.d=blackhole.kfki.hu
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
blackhole.kfki.hu; h=mime-version:references:message-id
:in-reply-to:from:from:date:date:received:received:received
:received; s=20151130; t=1748439709; x=1750254110; bh=/fG8h8umIg
Qf40nj8YywHmoTEtPnasUPoFQqus8jBP8=; b=IXiTzO5iaeYL9q7PkhRaFysSgs
hS9M2kyI5eChYASXA82JeUJszt0TltYhlv/o8/gkWGIHtECXjJCUT3gNSmEtXDoj
F/VUwbusekwlwpktWUYQjBTcayTroVlZtpvq/kBx7y6n65554Lcso4yM9MK2p4cR
0gXh4zL5hhWepBsc8=
X-Virus-Scanned: Debian amavis at smtp1.kfki.hu
Received: from smtp1.kfki.hu ([127.0.0.1])
by localhost (smtp1.kfki.hu [127.0.0.1]) (amavis, port 10026) with ESMTP
id eU4Vi8ytn2d6; Wed, 28 May 2025 15:41:49 +0200 (CEST)
Received: from blackhole.kfki.hu (blackhole.szhk.kfki.hu [148.6.240.2])
by smtp1.kfki.hu (Postfix) with ESMTP id 6E60A5C001C0;
Wed, 28 May 2025 15:41:49 +0200 (CEST)
Received: by blackhole.kfki.hu (Postfix, from userid 1000)
id F1D4234316A; Wed, 28 May 2025 15:41:48 +0200 (CEST)
Received: from localhost (localhost [127.0.0.1])
by blackhole.kfki.hu (Postfix) with ESMTP id EFBAD343169;
Wed, 28 May 2025 15:41:48 +0200 (CEST)
Date: Wed, 28 May 2025 15:41:48 +0200 (CEST)
From: Jozsef Kadlecsik <kadlec@xxxxxxxxxxxxxxxxx>
To: ying chen <yc1082463@xxxxxxxxx>
cc: Florian Westphal <fw@xxxxxxxxx>, pablo@xxxxxxxxxxxxx, kadlec@xxxxxxxxxxxxx,
davem@xxxxxxxxxxxxx, edumazet@xxxxxxxxxx, kuba@xxxxxxxxxx,
pabeni@xxxxxxxxxx, netfilter-devel@xxxxxxxxxxxxxxx, coreteam@xxxxxxxxxxxxx,
netdev@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [bug report, linux 6.15-rc4] A large number of connections in
the SYN_SENT state caused the nf_conntrack table to be full.
In-Reply-To: <CAN2Y7hzKd+VxWy56q9ad8xwCcHPy5qoEaswZapnF87YkyYMcsA@xxxxxxxxxxxxxx>
Message-ID: <a752bbbf-08c0-3885-65ba-79577a1ad5a8@xxxxxxxxxxxxxxxxx>
References: <CAN2Y7hxscai7JuC0fPE8DZ3QOPzO_KsE_AMCuyeTYRQQW_mA2w@xxxxxxxxxxxxxx> <aDcLIh2lPkAWOVCI@xxxxxxxxx> <CAN2Y7hzKd+VxWy56q9ad8xwCcHPy5qoEaswZapnF87YkyYMcsA@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="110363376-2043345281-1748439708=:6759"
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
--110363376-2043345281-1748439708=:6759
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: quoted-printable
On Wed, 28 May 2025, ying chen wrote:
> On Wed, May 28, 2025 at 9:10=E2=80=AFPM Florian Westphal <fw@xxxxxxxxx>=
wrote:
>>
>> ying chen <yc1082463@xxxxxxxxx> wrote:
>>> Hello all,
>>>
>>> I encountered an "nf_conntrack: table full" warning on Linux 6.15-rc4=
.
>>> Running cat /proc/net/nf_conntrack showed a large number of
>>> connections in the SYN_SENT state.
>>> As is well known, if we attempt to connect to a non-existent port, th=
e
>>> system will respond with an RST and then delete the conntrack entry.
>>> However, when we frequently connect to non-existent ports, the
>>> conntrack entries are not deleted, eventually causing the nf_conntrac=
k
>>> table to fill up.
>>
>> Yes, what do you expect to happen?
> I understand that the conntrack entry should be deleted immediately=20
> after receiving the RST reply.
No, the conntrack entry will be in the CLOSE state with the timeout value=
=20
of /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_close
Best regards,
Jozsef
--110363376-2043345281-1748439708=:6759--
Return-Path: <linux-kernel+bounces-665570-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 2628E41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:51:23 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id E52E14E547B
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:51:17 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 7DB292882D1;
Wed, 28 May 2025 13:50:52 +0000 (UTC)
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0C1C914E2F2;
Wed, 28 May 2025 13:50:51 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440252; cv=none; b=fJAxWqBRTRzMVcZX1Ns0HgG6M+2B6muEwBJruOGS4xAon8spqaBtWIlgkibOkdTqtN0ywqwD607yMia8qU3QgatXfigTeepPagGPhWA/4zyAYYHuNeDN9Lb7jH30EUS54Ow3g2l/6THRAqmDqHc6w+d/t5E05zm24qK+e7DT+6I=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440252; c=relaxed/simple;
bh=PJgWTfGidrPmfVhado8gvfzsvWoybwmRfTPeu3u2Oys=;
h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=oWbpAX6c8Q6nTAKRhtfkgZQTsaeI/mJWzB0gGtLTEXT51KhmHM870wuPOeDLyUSfHZc/IouuBDqoHweFumFM57R772OE1KRcR1xrAfCy374M5mz4iRT7hImY3C+YNEFmq3/bicymhj01oeXDuSTI2LjKGWdywbgy9j8rozspDJM=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id B3441C4CEE7;
Wed, 28 May 2025 13:50:50 +0000 (UTC)
Date: Wed, 28 May 2025 09:51:50 -0400
From: Steven Rostedt <rostedt@xxxxxxxxxxx>
To: Menglong Dong <menglong8.dong@xxxxxxxxx>
Cc: alexei.starovoitov@xxxxxxxxx, jolsa@xxxxxxxxxx, bpf@xxxxxxxxxxxxxxx,
Menglong Dong <dongml2@xxxxxxxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH bpf-next 00/25] bpf: tracing multi-link support
Message-ID: <20250528095150.02e28aec@xxxxxxxxxxxxxxxxxx>
In-Reply-To: <20250528034712.138701-1-dongml2@xxxxxxxxxxxxxxx>
References: <20250528034712.138701-1-dongml2@xxxxxxxxxxxxxxx>
X-Mailer: Claws Mail 3.20.0git84 (GTK+ 2.24.33; x86_64-pc-linux-gnu)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 11:46:47 +0800
Menglong Dong <menglong8.dong@xxxxxxxxx> wrote:
> After four months, I finally finish the coding and testing of this series.
> This is my first time to write such a complex series, and it's so hard :/
> Anyway, I finished it.
> (I'm scared :/)
>
Note, sending out a complex series like this at the start of the merge
window is not good timing.
Most kernel maintainers will not be able to even look at this until the
merge window is closed (in two weeks).
That includes myself.
-- Steve
Return-Path: <linux-kernel+bounces-665571-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E020541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:51:49 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 0F1E24E54FC
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:51:51 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 8CAAC288502;
Wed, 28 May 2025 13:51:39 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="sNur76GO"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id A532014E2F2;
Wed, 28 May 2025 13:51:38 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440298; cv=none; b=dW3ZboZUmTfFgLycoVA+DfAD6WmZl6TMncjVxG31eBnjCcbsdjPfnSgNJ6BQufj13QLPjVTBwgsHBncpNXZeEXbztunFbYuERH33ylL2mHz2l3cMUPbRcXIh1S7I7Lo8V5X+ftfobA5ZSqHMKIzstMzPOdTavuuDF5AEWl4k5So=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440298; c=relaxed/simple;
bh=IyUnagWMTY5SZb2DJi6QqqYHDlcgl8CuOOKESJjMUKI=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=KCLL+0TM2iJdgEzvgH8t0gigLs0OFmO66tGhgrT9a1Rcdb1muTrd3HNkWMMJDvAKisHWbrP8PRhvNssjA5KG0ncDluTfOYQL6NFYjMvMj+Y7dbVYvJuq9HcW3n4+aNFzW7MTlJQt2IfIXY+Ql9aYebZ3KfCcrAQ+bJZgqvGrRNg=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=sNur76GO; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id BF43BC4CEE3;
Wed, 28 May 2025 13:51:37 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748440298;
bh=IyUnagWMTY5SZb2DJi6QqqYHDlcgl8CuOOKESJjMUKI=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=sNur76GODkMQtGVGYj5tKo2ZIGjq4ng3Yz9ArlQwegmbDTfT2R6m+1T3xCxPlwC/4
hdSBN9kU54Z2/Hj3qUJoNaEmxaJnzczmcYhwIK6tAXxpj8lLRh231notuOLRQkuw05
VjwEotsDhDNBcK3+jLFspYqvOMck2XUUWnNCKyCZmUxvUzFMwA2G+Q/gg5fXIoZ52B
fKpXNm8g/Pj96OlXk5ygerjZkjpErmQ5v6Bj0gAiblsRAKKArgomGjOIAiY4gC7yTm
WB6Tl4oqvpHxMglVCgWfl976As/v4pCGzuTNjg16syBd+jMcgmgiK+O9KLWBJ16FA5
GA9E23sGFUFxQ==
Date: Wed, 28 May 2025 10:51:35 -0300
From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
To: Toke =?iso-8859-1?Q?H=F8iland-J=F8rgensen?= <toke@xxxxxxxxxx>
Cc: Mina Almasry <almasrymina@xxxxxxxxxx>, netdev@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-kselftest@xxxxxxxxxxxxxxx,
Jesper Dangaard Brouer <hawk@xxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>,
Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Simon Horman <horms@xxxxxxxxxx>, Shuah Khan <shuah@xxxxxxxxxx>,
Ilias Apalodimas <ilias.apalodimas@xxxxxxxxxx>
Subject: Re: [PATCH RFC net-next v2] page_pool: import Jesper's page_pool
benchmark
Message-ID: <aDcU51dx0N9d-aHz@x1>
References: <20250525034354.258247-1-almasrymina@xxxxxxxxxx>
<87iklna61r.fsf@xxxxxxx>
<CAHS8izOSW8dZpqgKT=ZxqpctVE3Y9AyR8qXyBGvdW0E8KFgonA@xxxxxxxxxxxxxx>
<87h615m6cp.fsf@xxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <87h615m6cp.fsf@xxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 11:28:54AM +0200, Toke Høiland-Jørgensen wrote:
> Mina Almasry <almasrymina@xxxxxxxxxx> writes:
> > On Mon, May 26, 2025 at 5:51�AM Toke Høiland-Jørgensen <toke@xxxxxxxxxx> wrote:
> >> Back when you posted the first RFC, Jesper and I chatted about ways to
> >> avoid the ugly "load module and read the output from dmesg" interface to
> >> the test.
> > I agree the existing interface is ugly.
> >> One idea we came up with was to make the module include only the "inner"
> >> functions for the benchmark, and expose those to BPF as kfuncs. Then the
> >> test runner can be a BPF program that runs the tests, collects the data
> >> and passes it to userspace via maps or a ringbuffer or something. That's
> >> a nicer and more customisable interface than the printk output. And if
> >> they're small enough, maybe we could even include the functions into the
> >> page_pool code itself, instead of in a separate benchmark module?
> >> WDYT of that idea? :)
> > ...but this sounds like an enormous amount of effort, for something
> > that is a bit ugly but isn't THAT bad. Especially for me, I'm not that
> > much of an expert that I know how to implement what you're referring
> > to off the top of my head. I normally am open to spending time but
> > this is not that high on my todolist and I have limited bandwidth to
> > resolve this :(
> > I also feel that this is something that could be improved post merge.
agreed
> > I think it's very beneficial to have this merged in some form that can
> > be improved later. Byungchul is making a lot of changes to these mm
> > things and it would be nice to have an easy way to run the benchmark
> > in tree and maybe even get automated results from nipa. If we could
> > agree on mvp that is appropriate to merge without too much scope creep
> > that would be ideal from my side at least.
> Right, fair. I guess we can merge it as-is, and then investigate whether
> we can move it to BPF-based (or maybe 'perf bench' - Cc acme) later :)
tldr; I'd advise to merge it as-is, then kfunc'ify parts of it and use
it from a 'perf bench' suite.
Yeah, the model would be what I did for uprobes, but even then there is
a selftests based uprobes benchmark ;-)
The 'perf bench' part, that calls into the skel:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/perf/bench/uprobe.c
The skel:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/perf/util/bpf_skel/bench_uprobe.bpf.c
While this one is just to generate BPF load to measure the impact on
uprobes, for your case it would involve using a ring buffer to
communicate from the skel (BPF/kernel side) to the userspace part,
similar to what is done in various other BPF based perf tooling
available in:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/perf/util/bpf_skel
Like at this line (BPF skel part):
https://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.git/tree/tools/perf/util/bpf_skel/off_cpu.bpf.c?h=perf-tools-next#n253
The simplest part is in the canonical, standalone runqslower tool, also
hosted in the kernel sources:
BPF skel sending stuff to userspace:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/bpf/runqslower/runqslower.bpf.c#n99
The userspace part that reads it:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/bpf/runqslower/runqslower.c#n90
This is a callback that gets called for every event that the BPF skel
produces, called from this loop:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/bpf/runqslower/runqslower.c#n162
That handle_event callback was associated via:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/bpf/runqslower/runqslower.c#n153
There is a dissection I did about this process a long time ago, but
still relevant, I think:
http://oldvger.kernel.org/~acme/bpf/devconf.cz-2020-BPF-The-Status-of-BTF-producers-consumers/#/33
The part explaining the interaction userspace/kernel starts here:
http://oldvger.kernel.org/~acme/bpf/devconf.cz-2020-BPF-The-Status-of-BTF-producers-consumers/#/40
(yeah, its http, but then, its _old_vger ;-)
Doing it in perf is interesting because it gets widely packaged, so
whatever you add to it gets visibility for people using 'perf bench' and
also gets available in most places, it would add to this collection:
root@number:~# perf bench
Usage:
perf bench [<common options>] <collection> <benchmark> [<options>]
# List of all available benchmark collections:
sched: Scheduler and IPC benchmarks
syscall: System call benchmarks
mem: Memory access benchmarks
numa: NUMA scheduling and MM benchmarks
futex: Futex stressing benchmarks
epoll: Epoll stressing benchmarks
internals: Perf-internals benchmarks
breakpoint: Breakpoint benchmarks
uprobe: uprobe benchmarks
all: All benchmarks
root@number:~#
the 'perf bench' that uses BPF skel:
root@number:~# perf bench uprobe baseline
# Running 'uprobe/baseline' benchmark:
# Executed 1,000 usleep(1000) calls
Total time: 1,050,383 usecs
1,050.383 usecs/op
root@number:~# perf trace --summary perf bench uprobe trace_printk
# Running 'uprobe/trace_printk' benchmark:
# Executed 1,000 usleep(1000) calls
Total time: 1,053,082 usecs
1,053.082 usecs/op
Summary of events:
uprobe-trace_pr (1247691), 3316 events, 96.9%
syscall calls errors total min avg max stddev
(msec) (msec) (msec) (msec) (%)
--------------- -------- ------ -------- --------- --------- --------- ------
clock_nanosleep 1000 0 1101.236 1.007 1.101 50.939 4.53%
close 98 0 32.979 0.001 0.337 32.821 99.52%
perf_event_open 1 0 18.691 18.691 18.691 18.691 0.00%
mmap 209 0 0.567 0.001 0.003 0.007 2.59%
bpf 38 2 0.380 0.000 0.010 0.092 28.38%
openat 65 0 0.171 0.001 0.003 0.012 7.14%
mprotect 56 0 0.141 0.001 0.003 0.008 6.86%
read 68 0 0.082 0.001 0.001 0.010 11.60%
fstat 65 0 0.056 0.001 0.001 0.003 5.40%
brk 10 0 0.050 0.001 0.005 0.012 24.29%
pread64 8 0 0.042 0.001 0.005 0.021 49.29%
<SNIP other syscalls>
root@number:~#
- Arnaldo
Return-Path: <linux-kernel+bounces-665572-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D4FE841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:53:05 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id D40FA170CF0
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:53:06 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 5DBBA287517;
Wed, 28 May 2025 13:53:00 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="IcMF8OcT"
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id A95C8246774
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:52:57 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440379; cv=none; b=m17vcNsZWjE8F04vlgNXjFGWfBNHGU0P4w73LumS8VLG3vh1YlNXNut3+muOzAYG36Vxkn5tRwoiWZkJHEifBnNGzhwUWppyBp/euihZbZV0gGKMQxgrcLz3dqXsR5oALfCsHazRQ9ZQUFIcBKwF4F5v0Qh6pi8VZ1ipvrpyfAE=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440379; c=relaxed/simple;
bh=ZM+bfC5Cy6/BIP9OgPrZkki/Bpj6SNjAkFXoj8Ys+Yg=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=tNNjFWFCO9zxRxVRRWiYSUrEkZiyv+Fzkq8U5tnwpOEBjutO1NhG2nBA7hIHUnCHtXyKf4RBlxHSx3Y5hXFdLeZLNMNhXmgYoRAtOl+tUWCeosmztzPWCovS5TkbxjZQUDf10UImrYKNGjoyznbDUTZz+MdUUxgVjDCCe6mMowY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=IcMF8OcT; arc=none smtp.client-ip=205.220.168.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com
Received: from pps.filterd (m0279862.ppops.net [127.0.0.1])
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S82RGs010166
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:52:57 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=
cc:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to; s=qcppdkim1; bh=uBOPP2nWIT9/99XuC1utjy9X
r9ENEyP8GmiGj5aqQeY=; b=IcMF8OcTKzpCpORhkdZ+5HMQxFh8cpXzRL8dh9xq
vy85syvW/t72U9pzGDYZaEjIibHFwKTEMF0i0+vR7siWRyWVKQ2S/xF6KSbVEAR5
NSkywzlZatgJAYnomK4F7tQKUeOTnBkqZW28i2eWw8NA0daK3Sz/Z6Aa6pCmKAhx
VqO+ik7C/3DyJJ7aXSdlpdyg4nIk50K2sUFvr0IDJNObnOJqwBvIO855rdX6njbs
X9PZjdmjPNWpeyo7sM+kjkIv2JXtJq1ZyvX+2d9oCwAsEkWWbOKLbB8U4Ffl65KH
We+JpV+Cn2GBGUAbx/GCHEZn7LEJOTQWqM3qlSrnKZICww==
Received: from mail-qv1-f70.google.com (mail-qv1-f70.google.com [209.85.219.70])
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46u6vjtep1-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT)
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:52:56 +0000 (GMT)
Received: by mail-qv1-f70.google.com with SMTP id 6a1803df08f44-6fab1b8d379so23210306d6.0
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 06:52:56 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748440375; x=1749045175;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=uBOPP2nWIT9/99XuC1utjy9Xr9ENEyP8GmiGj5aqQeY=;
b=q3mmDpaMuecRq58D6w1xD72KPph0TaxfDh8AqwG8lyHCjXkMsJS5QKcegXLwoSGURP
6cs43rsZU15EH0c/iekJEsxunGOfKh0v18ncoPpqeBBivyYcXPlV0kY4xFGUcnA3Lvs4
A6kNtJnub4eRgstM/f6sTCSHfjmB8H1WKBrnJvtYPNkNEG2a4/ikAYlFD62H89qfztzO
M3rCBqKP2eluwS4Ywo0YhsLU+Em4UCPr9sgX4qbSwIydxIHa2mroIfgsb4sfbyLpMRkO
RPlsKy+KF/H2WoggUFw1bhJuugZbMgNlRC6Fq4SgVzPtcGRv+oq9T9rMHZ5K54M0wlAw
FMPg==
X-Forwarded-Encrypted: i=1; AJvYcCVVmJNUB2NxwXGje+wuNe0mRb/WPVVMEQqQBYu8OQgTqfnw6Pk2IzIohTyU2muFlEm76h/ZB3bkx6hTobY=@vger.kernel.org
X-Gm-Message-State: AOJu0YwXI5Z8AaGBdziOPg1JNORfsS9RCygOaL56yh01U5zE6tlL/RUe
sa6xX98R8tQWDWYAV3GS+eX1ybH0bX53Nxms0g3amRV3uCzdikrRe0kZXkEIxbXX+BSR3GKNbuY
tPfnKHMDjQHeHUTNLzo03JsWBWBeRqj5PLzXVSivN+LNFfegPcqJhhL2cq7j9VpmX9J8=
X-Gm-Gg: ASbGncumby0q4Igi7Cg9RrzgAKtGKORaSb6TCmBDnm542HvqhqZd0RPKcgYmEScEt1h
C3KINygTlHCZyYPbQVRG3bKY1imYO676yC9GWoIAJ5znTCXc7i5WWpvh+9cx7E16n4UVfJ6cMjg
fQNqwRZM+MHXazNHcRjtKODSzGq4UuzElflHEmgY23zbUDS+TJn3wX/jbwiuycWte9RRP61ETVi
ydiVHgSQ7teQ0K6hD7TLgTQb7bo/MEVHq3+H9I7j7HqEzPdYGlU2prEqzPsRf1NNdF1iRCQh0ud
vmoAOPx+My1js4fyrd2XgfJq9lPW6mMtM7GwgFmu9Pi6etOdBMNkVjAQDrGZl1gtwM+wN02Mo5k
=
X-Received: by 2002:a05:6214:f0d:b0:6fa:c043:7781 with SMTP id 6a1803df08f44-6fac043c742mr27775706d6.6.1748440375240;
Wed, 28 May 2025 06:52:55 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IHNkR85opKcDfwQLxCDd6W5iPsD1U2otytKAVtAxdS8qF08guHyXNDqm8ewQIw/BFu5tF2iEA==
X-Received: by 2002:a05:6214:f0d:b0:6fa:c043:7781 with SMTP id 6a1803df08f44-6fac043c742mr27775336d6.6.1748440374835;
Wed, 28 May 2025 06:52:54 -0700 (PDT)
Received: from eriador.lumag.spb.ru (2001-14ba-a0c3-3a00--7a1.rev.dnainternet.fi. [2001:14ba:a0c3:3a00::7a1])
by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5532f6a5fd9sm291521e87.169.2025.05.28.06.52.53
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 06:52:54 -0700 (PDT)
Date: Wed, 28 May 2025 16:52:52 +0300
From: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
To: Heiko Stuebner <heiko@xxxxxxxxx>
Cc: andrzej.hajda@xxxxxxxxx, neil.armstrong@xxxxxxxxxx, rfoss@xxxxxxxxxx,
Laurent.pinchart@xxxxxxxxxxxxxxxx, jonas@xxxxxxxxx,
jernej.skrabec@xxxxxxxxx, maarten.lankhorst@xxxxxxxxxxxxxxx,
mripard@xxxxxxxxxx, tzimmermann@xxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH] drm/bridge: analogix_dp: Fix clk-disable removal
Message-ID: <o3oipiu2hotkdbihnlpamq3lmbpxrlay5tyvmir7qnbqhrdq6u@d52lzumxexva>
References: <20250527225120.3361663-1-heiko@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250527225120.3361663-1-heiko@xxxxxxxxx>
X-Authority-Analysis: v=2.4 cv=UOXdHDfy c=1 sm=1 tr=0 ts=68371538 cx=c_pps
a=oc9J++0uMp73DTRD5QyR2A==:117 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10
a=dt9VzEwgFbYA:10 a=EUspDBNiAAAA:8 a=A2JJf1eg9WQolHiAK1QA:9 a=CjuIK1q_8ugA:10
a=iYH6xdkBrDN1Jqds4HTS:22
X-Proofpoint-ORIG-GUID: lfenAXbUKeR4lPDsqtL-4nFN9jmXDDKd
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEyMSBTYWx0ZWRfXx58qXha9vuE1
uhie4LYueR1y2BHHjEqJD/ErvERa38pZdkox4KXHa7D3hqwuiVaB01Em7YWUT0Y5ZeugVPbfCWe
EQdpix2WPgJ3ssOzVkx7YDIYBbDrXs9yZDGOTRjFCCHgyahPEAnW2BBa40vP8wOSBoilgIQC9A3
MAFa7MxPQdC7Vh5OaJliU1WZz1N0nTMBS5nZ19e0IrdewySmA39F2efQ1JQr/5l5dC3E8Dkhj4I
UWSAlWUml0OlGQ9cBbyLDoofsJUtVZDCjz7hqEKcun8PpOW2rdZyCljtGcD9f/7HpCpV9yeNL1f
5t0YOvwAf2h3iCr12Bj0PTCFJBEGum5dyH+Y9T46Yh216jsHRm9NZxAndzox1zNZWEeMOM8lxsB
JpI7rrlPTRxZaMfCZzjVaV0wppdnPHSnPzXmH0Et+1siaN9yTkadrL0qn9sLs5afUDCY11iu
X-Proofpoint-GUID: lfenAXbUKeR4lPDsqtL-4nFN9jmXDDKd
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_07,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
clxscore=1015 phishscore=0 mlxscore=0 adultscore=0 priorityscore=1501
mlxlogscore=966 bulkscore=0 malwarescore=0 impostorscore=0 spamscore=0
suspectscore=0 lowpriorityscore=0 classifier=spam authscore=0 authtc=n/a
authcc= route=outbound adjust=0 reason=mlx scancount=1
engine=8.19.0-2505160000 definitions=main-2505280121
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 12:51:19AM +0200, Heiko Stuebner wrote:
> Commit 6579a03e68ff ("drm/bridge: analogix_dp: Remove the unnecessary
> calls to clk_disable_unprepare() during probing") removed the mismatched
> clock_disable calls from analogix_dp_probe.
>
> But that patch was created and sent before
> commit e5e9fa9f7aad ("drm/bridge: analogix_dp: Add support to get panel
> from the DP AUX bus") was merged, so couldn't know about this change.
>
> So in the original patch the last change is
> if (ret) {
> dev_err(&pdev->dev, "failed to request irq\n");
> - goto err_disable_clk;
> + return ERR_PTR(ret);
> }
> disable_irq(dp->irq);
>
> return dp;
> -
> -err_disable_clk:
> - clk_disable_unprepare(dp->clock);
> - return ERR_PTR(ret);
> }
> EXPORT_SYMBOL_GPL(analogix_dp_probe);
>
> the analogix_dp_core.c actually now has the runtime-pm handling between
> disable_irq() and return do introducing another goto err_clk_disable there.
>
> So remove that one too and return an error pointer, to not create build
> breakage.
>
> Fixes: 6579a03e68ff ("drm/bridge: analogix_dp: Remove the unnecessary calls to clk_disable_unprepare() during probing")
> Signed-off-by: Heiko Stuebner <heiko@xxxxxxxxx>
> ---
> When I reviewed the original patch, I failed to see that difference :-(
> But I do wonder how dim was able to apply the original patch.
>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
--
With best wishes
Dmitry
Return-Path: <linux-kernel+bounces-665573-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 29B6641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:53:29 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 0FEBE188EAF6
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:53:41 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id E744828850B;
Wed, 28 May 2025 13:53:18 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=mailerdienst.de header.i=@mailerdienst.de header.b="ZSdRO8sm"
Received: from mxout3.routing.net (mxout3.routing.net [134.0.28.8])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0D3E686323;
Wed, 28 May 2025 13:53:14 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=134.0.28.8
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440398; cv=none; b=GSZYXw6/4dQGWcjzSfPS71WyL3nFtpMv05+fIsIj1Uk9PzD5odgoyZsjHFut6cul0gV8s35SYliDpew98jF0vgCy3K8A4fdcBh7mZqdYqnoJdrgpTbXlQGUt5FEyxnfeZAd8s7hrPQYSdf2q/eujq6mivVqzRPeGNeQyzAPYrHQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440398; c=relaxed/simple;
bh=KIQK8+ItF9LQsxxYe8mbJmOP1jp7O83BOKoxqnMSxNQ=;
h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=SK2OPoyboUQG78Oh1gmvC6Scjf5f5MOLCuWGptnJW5ICg2swa/m+YOD3CmWU0IAplZsJ85mgCH4KjSu4dogn7buZQQBo9omVdGc0gbOCtlC3MRxdDjr0+fPgNc92vqBU8+cPZjeG6L26cMediGZzrfNA9qnfwBXBlv+YQ8RDGkk=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=fw-web.de; spf=pass smtp.mailfrom=fw-web.de; dkim=pass (1024-bit key) header.d=mailerdienst.de header.i=@mailerdienst.de header.b=ZSdRO8sm; arc=none smtp.client-ip=134.0.28.8
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=fw-web.de
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fw-web.de
Received: from mxbulk.masterlogin.de (unknown [192.168.10.85])
by mxout3.routing.net (Postfix) with ESMTP id 073AD604DC;
Wed, 28 May 2025 13:53:07 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailerdienst.de;
s=20200217; t=1748440387;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:cc:mime-version:mime-version:
content-transfer-encoding:content-transfer-encoding;
bh=/IYn+Ak3aJNTaLzk0CMzwKGukq1D6rOsByjE7CfES9I=;
b=ZSdRO8smi2hWk/PzPnGVQxbayF0NO5QBIO9DbjkNur9j5VDSieATcAPjRC3DQ+wceS9DaQ
rv4V45NILSzZeZUyvVZnFX/AymgbAuYd3mJK90Ht7hpcE9XfeK6MUnHEsLGxnte/hLYlHD
zihODtfXtsWxaipmiIzQd/5pq60qyT8=
Received: from frank-u24.. (fttx-pool-194.15.80.234.bambit.de [194.15.80.234])
by mxbulk.masterlogin.de (Postfix) with ESMTPSA id BE1B21226F1;
Wed, 28 May 2025 13:53:06 +0000 (UTC)
From: Frank Wunderlich <linux@xxxxxxxxx>
To: MyungJoo Ham <myungjoo.ham@xxxxxxxxxxx>,
Kyungmin Park <kyungmin.park@xxxxxxxxxxx>,
Chanwoo Choi <cw00.choi@xxxxxxxxxxx>,
Georgi Djakov <djakov@xxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Matthias Brugger <matthias.bgg@xxxxxxxxx>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxx>,
Jia-Wei Chang <jia-wei.chang@xxxxxxxxxxxx>,
Johnson Wang <johnson.wang@xxxxxxxxxxxx>
Cc: Frank Wunderlich <frank-w@xxxxxxxxxxxxxxx>,
linux-pm@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx,
linux-mediatek@xxxxxxxxxxxxxxxxxxx
Subject: [RFC v1] dt-bindings: interconnect: add mt7988-cci compatible
Date: Wed, 28 May 2025 15:52:49 +0200
Message-ID: <20250528135251.6492-1-linux@xxxxxxxxx>
X-Mailer: git-send-email 2.43.0
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Frank Wunderlich <frank-w@xxxxxxxxxxxxxxx>
Add compatible for Mediatek MT7988 SoC with mediatek,mt8183-cci fallback
which is taken by driver.
Signed-off-by: Frank Wunderlich <frank-w@xxxxxxxxxxxxxxx>
---
.../bindings/interconnect/mediatek,cci.yaml | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/Documentation/devicetree/bindings/interconnect/mediatek,cci.yaml b/Documentation/devicetree/bindings/interconnect/mediatek,cci.yaml
index 58611ba2a0f4..2c6785c588e9 100644
--- a/Documentation/devicetree/bindings/interconnect/mediatek,cci.yaml
+++ b/Documentation/devicetree/bindings/interconnect/mediatek,cci.yaml
@@ -17,9 +17,15 @@ description: |
properties:
compatible:
- enum:
- - mediatek,mt8183-cci
- - mediatek,mt8186-cci
+ oneOf:
+ - items:
+ - enum:
+ - mediatek,mt8183-cci
+ - mediatek,mt8186-cci
+ - items:
+ - enum:
+ - mediatek,mt7988-cci
+ - const: mediatek,mt8183-cci
clocks:
items:
--
2.43.0
Return-Path: <linux-kernel+bounces-665574-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 2F01841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:55:11 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id D53DD7A8F49
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:53:50 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id B61C22882C9;
Wed, 28 May 2025 13:55:00 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Vor7yCXb"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 053D01A073F
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:54:59 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440500; cv=none; b=MvCF0ddGf8wvYVBElmrTJlyUfaoCqwcMkQeHAdzKpdsZNdNIRB6wsQHI6QN7UHbp6W2hIA6xgzGVNZEsy6+LDkqM/MK8XNfKJGPQDY3BAmL+FB96dpF2PHd7xJSnjuShyPnRlIwuatdpIcbZhtRVxxjJoZ4qW9lABkl96lqnq0w=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440500; c=relaxed/simple;
bh=k97NcxBl4V7jw/PvcH6y9RiaFq021QEAdtz1/8OVZ2U=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=ovUPkGFhrAEhHbH4FzFVykJexCuw9s+5ktyFJ3L7I4lWKSjIx10t6SUMO/qHt9z2aomYD7M+mrHa5wmbqZyhuf7Je/5sGcP40eJqB64C0S3PnDdUjxlALe6LXGUJPgjpLhpIMuBP0bW6lM0H9y+FUa3JGieP8iayH3ND78bpvKc=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Vor7yCXb; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 88F6BC4AF0B
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:54:59 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748440499;
bh=k97NcxBl4V7jw/PvcH6y9RiaFq021QEAdtz1/8OVZ2U=;
h=References:In-Reply-To:From:Date:Subject:To:Cc:From;
b=Vor7yCXbUII3CJMh3yiK8Ji+X7/nRgSwsVbGgKIeau3fsDhwBvllBrG0NOn45Nb2O
WE/WwfvlwwQ8Qn1Ihff94T07cw8EnjVz94BkDLK6EUcl/f85WRd69yGFxTSQ9+Okd0
YfGo1DfDUPWj5xVwdL7/+hEA2yD2UObAaycctd9pTkxIx8WqiRQN1kSChJCVLxuAs4
gcaV/pFSr+bn1MnP7pXI4uIGu2kAVX6GwsG6Zpu1N411rGfN7O/06KVlPhMNWTtmZe
F6j0kRQ07HMdLnyf7Q8x9vBi6FmDraVclfoc1qH9ORh7cQfQ9pkoj9KaqzkWAok4KO
DofQhJt3M752w==
Received: by mail-ed1-f49.google.com with SMTP id 4fb4d7f45d1cf-602039559d8so8975797a12.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 06:54:59 -0700 (PDT)
X-Forwarded-Encrypted: i=1; AJvYcCUeeLcYySj3sR1bce8rn0ySaPXR4z9TIScqoD/TH69mE97ll1/6TyXfg+x4ADgNZAtQSDjWSQRexkiCQEU=@vger.kernel.org
X-Gm-Message-State: AOJu0Yy4FUFNJfHYV9QxX8pZEN2IcFshco0xNIi4eTz0UJQv+KN3iVk5
qIEt/qQ2mr/MCMFFCCfXbucyID5GeysNAwxB1AiLRtXvyWVcTsEp+NDNFMRlZ6K7caNQLUfsSAO
uK8WZ0LJzZXzuhZ2akwQtJ0zzGc4gcyM=
X-Google-Smtp-Source: AGHT+IEEuH8vRL+51mbmcyHxCEMeNyKwMN7QxI+1DOg59ySqj2dvrjBCrMYw1ofvYnVrmpTtEve02p2f+n5x+8YfqEs=
X-Received: by 2002:a05:6402:d45:b0:602:ef0a:cef8 with SMTP id
4fb4d7f45d1cf-602ef29d3cfmr11484327a12.18.1748440498076; Wed, 28 May 2025
06:54:58 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250520064936.32291-1-yangtiezhu@xxxxxxxxxxx>
<e005dd551aec8bea185b3d37295876bd75d7b3e4.camel@xxxxxxxxxxx>
<a918b221-b7f3-9994-9a7a-d10345aa30df@xxxxxxxxxxx> <19f4722d5cdb90a207129ee675c7278423cd328c.camel@xxxxxxxxxxx>
In-Reply-To: <19f4722d5cdb90a207129ee675c7278423cd328c.camel@xxxxxxxxxxx>
From: Huacai Chen <chenhuacai@xxxxxxxxxx>
Date: Wed, 28 May 2025 21:54:45 +0800
X-Gmail-Original-Message-ID: <CAAhV-H5GEZu=r=gX4afNB2F4w_LpXa1FwuWdyDE=+pGJNnqxww@xxxxxxxxxxxxxx>
X-Gm-Features: AX0GCFtlAzfumS6XolzoJ0MKPafRHvauugEExtVKJnN5aI2CpQXMkQBN4tLLIfg
Message-ID: <CAAhV-H5GEZu=r=gX4afNB2F4w_LpXa1FwuWdyDE=+pGJNnqxww@xxxxxxxxxxxxxx>
Subject: Re: [RFC PATCH] LoongArch: Do not include larchintrin.h
To: Xi Ruoyao <xry111@xxxxxxxxxxx>
Cc: Tiezhu Yang <yangtiezhu@xxxxxxxxxxx>, loongarch@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 11:47=E2=80=AFAM Xi Ruoyao <xry111@xxxxxxxxxxx> wro=
te:
>
> On Tue, 2025-05-27 at 11:17 +0800, Tiezhu Yang wrote:
> > On 2025/5/21 =E4=B8=8B=E5=8D=881:41, Xi Ruoyao wrote:
> > > On Tue, 2025-05-20 at 14:49 +0800, Tiezhu Yang wrote:
> > > > larchintrin.h is a system header of compiler, include it in the
> > > > kernel header may lead to the fatal error "'larchintrin.h' file
> > > > not found".
> > > >
> > > > There are two related cases so far:
> > > >
> > > > (1) When compiling samples/bpf, it has been fixed in the latest
> > > > kernel [1].
> > > >
> > > > (2) When running bcc script, it has been fixed in the latest
> > > > bcc [2] [3], like this:
> > > >
> > > > $ /usr/share/bcc/tools/filetop
> > > > In file included from <built-in>:4:
> > > > In file included from /virtual/include/bcc/helpers.h:54:
> > > > In file included from arch/loongarch/include/asm/page.h:7:
> > > > In file included from arch/loongarch/include/asm/addrspace.h:9:
> > > > arch/loongarch/include/asm/loongarch.h:11:10: fatal error:
> > > > 'larchintrin.h' file not found
> > > > 11 | #include <larchintrin.h>
> > > > | ^~~~~~~~~~~~~~~
> > > > 1 error generated.
> > > >
> > > > Maybe there are same errors for the other unknown projects, it is
> > > > annoyance to add the include path each time. In order to avoid
> > > > such
> > > > errors once and for all, do not include larchintrin.h, just use
> > > > the
> > > > builtin functions directly.
> > >
> > > Sorry, but in GCC those builtin functions are not documented and may
> > > subject to change in the future. Only the larchintrin.h interface
> > > is
> > > documented.
> >
> > AFAICT, the LoongArch Base Built-in Functions are listed in the GCC
> > documentation [1], they will not be changed easily and frequently in
> > my opinion.
> >
> > __builtin_loongarch_cpucfg()
> > __builtin_loongarch_csrrd_w()
> > __builtin_loongarch_csrrd_d()
> > __builtin_loongarch_csrwr_w()
> > __builtin_loongarch_csrwr_d()
> > __builtin_loongarch_csrxchg_w()
> > __builtin_loongarch_csrxchg_d()
> > __builtin_loongarch_iocsrrd_w()
> > __builtin_loongarch_iocsrrd_d()
> > __builtin_loongarch_iocsrwr_w()
> > __builtin_loongarch_iocsrwr_d()
> >
> > > Thus if you don't want to rely on GCC for those operations, you may
> > > need
> > > to write inline asm...
> >
> > so these builtin functions can be used directly and safely.
>
> Oops, I mistakenly believed they were like __builtin_lsx_* which are not
> documented.
>
> So yes they can be used directly.
I don't think so.
1. csr & iocsr can be only used in kernel mode, if the kernel doesn't
use the convenient short names, then the short names are totally
useless.
2. We get larchintrin.h included by "KBUILD_CFLAGS +=3D -isystem $(shell
$(CC) -print-file-name=3Dinclude)", and this manner is also used by
other architectures.
3. I don't think there will be many projects that need to be modified.
Huacai
>
> --
> Xi Ruoyao <xry111@xxxxxxxxxxx>
> School of Aerospace Science and Technology, Xidian University
Return-Path: <linux-kernel+bounces-665575-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id B6CDE41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:55:45 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id EDB6317451D
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:55:46 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 1B1FD288516;
Wed, 28 May 2025 13:55:34 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="i2ed7Bfe"
Received: from mail-ej1-f67.google.com (mail-ej1-f67.google.com [209.85.218.67])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id EDFCB27B4E0;
Wed, 28 May 2025 13:55:30 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.67
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440533; cv=none; b=s1Fnme+U7g5UFQSy0th0kjDph9su5tHiX6uKX09wcMNjVIpgqKfDUmtmct2+XZR/cMudmhYkWS2RxOGDCaGHRAP6p0EYhLJ1qFMfoq4ZoXea/DJ1/wE0+Ez+ffqv4Gxo/cDzkjfH1UfBEbcV2SbXntsFVLzg1oZaqrR2T3z05gI=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440533; c=relaxed/simple;
bh=cizbWJhNnoTY8XfopW2vv/PcAdMGNagiDc1j7/VnlC0=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=N00b4cn2IpbDU0PMVUB0Ms6eLyaPO8dAbt/kon5W3tvNb8fUHmyYyLikutIezSnI2rS6hGiP250PjkQZe+/ghmHLtouNUGOF6AQn4dZdL7nbSSJawOrq8ooqvR/PaNSIi1MCOK/INBacd8nQaObJMh0y9dS1Ja49wEnshvaTdRA=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=i2ed7Bfe; arc=none smtp.client-ip=209.85.218.67
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-ej1-f67.google.com with SMTP id a640c23a62f3a-ad89ee255easo152318266b.3;
Wed, 28 May 2025 06:55:30 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748440529; x=1749045329; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=EE2Weyrrn7JR/8bPBhAPvwqdpmtHybqVorQ0umSeJlc=;
b=i2ed7BfekULxK8K0wIMtOObISepwWFoo+dGT4qhHmIg/qVr9lvQ39w79Q5Qizg/xL7
3wqOpGBLZEujQKx0Q9pYlX6xnl1IVJoMzlZhsoxdb5pvT08qagzg6FsocOqOx//sX6GM
WTyT8yew8ua5s7WvglEX0330/jfHKlp3DbJCbYoGIArdX5qJWJM/yKjuSribC8vBAdUA
9c0rQl+LwWmEMHgsP56UAi6l3SyfZptkwt/SvjiWkBOkRBCgIT1vy7xS3p7Ug+kcrRSH
gTngEcOw8V3DjusPd4bgFJC2IRERa5jqwiRBhu3E4LWocvC93JaMCM2g8g+piJAibRdY
GR1g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748440529; x=1749045329;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=EE2Weyrrn7JR/8bPBhAPvwqdpmtHybqVorQ0umSeJlc=;
b=ZkbzAenSGqAtzYgwqcWVl52W2sWK1dOBc+5gt2FjLFP475TaK02W42pHYlX1v1jdNY
PFVLAdIds/4UayVgOEYYv+Gu+6rskA8t5E+THEpIMZqV5CsNoq5BtWZlB1YcMPXzUgk5
J+ZBnPyKibmHwGfkmdfjndOyGCmie3VLXzMdM2RkkHJHrwvDlvFJ6KFYyvKL34YJrjIe
x3aTJTtrKS0BEsHcBnKDvtolwA20iKI2qs7PwxGDHhM7axEGm/zSSjHZ6mS1zoTF0ONP
XH/XSCkpoKlU4NdjsPVk3F7a6ZRGyr+raLqSQ5yfudr7aFYYqO2sQuGPyNJxdXfUYkKh
fdAQ==
X-Forwarded-Encrypted: i=1; AJvYcCUPXLTUq6Yx51dU0AznNB0Pj2NE14o55Fm2Pf8/CNhlPJ548ZUrUezI4HSeKDweB54Ec7In4WXfSggBmuUjuKi6@xxxxxxxxxxxxxxx, AJvYcCUbROt+bwLEsbuBPQh0ggW6bQYhOKTyC3jZRYJd/3P+4BpOG8iNg8NuWlQrG8W52GzuwUkRxZJD@xxxxxxxxxxxxxxx, AJvYcCV+padC0XQQlbcWmlvNRFn8b9/aauH1WTRuHJ4NBX1sVyqaxDFv0GOzbKiydqHz+wZgA91ra9hPMFQVs7Y=@vger.kernel.org
X-Gm-Message-State: AOJu0YxfvuCYDeQRxFuAh1I5YAMoc8b/1UNhfQTJ8VmVxrfsDBW9dEe9
2aI6+4V8RkvPL8vurXBWeLo3YbfATKmaaUS7C+v2A2ihKgu6qrPo386aEcpT2BlQ5KPQPP+vkqq
GpdweqmkkYlyiaP3I/e9BaT0G3hvbZ6R6dr4f+lU=
X-Gm-Gg: ASbGnctKJ9C13mQiH0LSVGTMTAbgmA9ggUFcp85n6/EG+Bh4hb04I9YfceOWSsy1iqa
hg1yGKyDtLuuhMKmmSM7Ds0PKhl08I+dJufQRNOhVM87919JjyTO7hsOKCZ3yrS4QoDyfG5H3YE
tibufTnsvg0DH6MZ4D/jWU7WNc8xn9e/Eo7w==
X-Google-Smtp-Source: AGHT+IEMNxQwYe0PiRvW6i3nRvxF7iXoyc7113soCxABNzX5iPmSIF/KlgnecMzeHFZ7NAJdXj9IwClcMHKFmkzyqEc=
X-Received: by 2002:a17:907:8dcb:b0:ad5:1fe4:4d0d with SMTP id
a640c23a62f3a-ad85b2065d0mr1493993766b.61.1748440529052; Wed, 28 May 2025
06:55:29 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <CAN2Y7hxscai7JuC0fPE8DZ3QOPzO_KsE_AMCuyeTYRQQW_mA2w@xxxxxxxxxxxxxx>
<aDcLIh2lPkAWOVCI@xxxxxxxxx> <CAN2Y7hzKd+VxWy56q9ad8xwCcHPy5qoEaswZapnF87YkyYMcsA@xxxxxxxxxxxxxx>
<a752bbbf-08c0-3885-65ba-79577a1ad5a8@xxxxxxxxxxxxxxxxx>
In-Reply-To: <a752bbbf-08c0-3885-65ba-79577a1ad5a8@xxxxxxxxxxxxxxxxx>
From: ying chen <yc1082463@xxxxxxxxx>
Date: Wed, 28 May 2025 21:55:17 +0800
X-Gm-Features: AX0GCFv4WyVGNk1XgwUI6BUykrsR8nrzZf3wKx_YdLMfBB2SmClpyALWr5FpEic
Message-ID: <CAN2Y7hzOXtVGh1d84afxOWv-EcLLUCn+FmH4Yr1OHFBmFVZR4Q@xxxxxxxxxxxxxx>
Subject: Re: [bug report, linux 6.15-rc4] A large number of connections in the
SYN_SENT state caused the nf_conntrack table to be full.
To: Jozsef Kadlecsik <kadlec@xxxxxxxxxxxxxxxxx>
Cc: Florian Westphal <fw@xxxxxxxxx>, pablo@xxxxxxxxxxxxx, kadlec@xxxxxxxxxxxxx,
davem@xxxxxxxxxxxxx, edumazet@xxxxxxxxxx, kuba@xxxxxxxxxx, pabeni@xxxxxxxxxx,
netfilter-devel@xxxxxxxxxxxxxxx, coreteam@xxxxxxxxxxxxx,
netdev@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 9:41=E2=80=AFPM Jozsef Kadlecsik
<kadlec@xxxxxxxxxxxxxxxxx> wrote:
>
> On Wed, 28 May 2025, ying chen wrote:
>
> > On Wed, May 28, 2025 at 9:10=E2=80=AFPM Florian Westphal <fw@xxxxxxxxx>=
wrote:
> >>
> >> ying chen <yc1082463@xxxxxxxxx> wrote:
> >>> Hello all,
> >>>
> >>> I encountered an "nf_conntrack: table full" warning on Linux 6.15-rc4=
.
> >>> Running cat /proc/net/nf_conntrack showed a large number of
> >>> connections in the SYN_SENT state.
> >>> As is well known, if we attempt to connect to a non-existent port, th=
e
> >>> system will respond with an RST and then delete the conntrack entry.
> >>> However, when we frequently connect to non-existent ports, the
> >>> conntrack entries are not deleted, eventually causing the nf_conntrac=
k
> >>> table to fill up.
> >>
> >> Yes, what do you expect to happen?
> > I understand that the conntrack entry should be deleted immediately
> > after receiving the RST reply.
>
> No, the conntrack entry will be in the CLOSE state with the timeout value
> of /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_close
>
> Best regards,
> Jozsef
The conntrack entry does not transition to the CLOSE state and remains
in the SYN_SENT state until the nf_conntrack_tcp_timeout_syn_sent
timeout is reached.
According to the code, the conntrack entry should be deleted
immediately after the RST reply.
int nf_conntrack_tcp_packet(struct nf_conn *ct,
struct sk_buff *skb,
unsigned int dataoff,
enum ip_conntrack_info ctinfo,
const struct nf_hook_state *state)
{
......
if (!test_bit(IPS_SEEN_REPLY_BIT, &ct->status)) {
/* If only reply is a RST, we can consider ourselves not to
have an established connection: this is a fairly common
problem case, so we can delete the conntrack
immediately. --RR */
if (th->rst) {
nf_ct_kill_acct(ct, ctinfo, skb);
return NF_ACCEPT;
}
Return-Path: <linux-kernel+bounces-665576-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 5247F41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:57:22 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 633633BDBB2
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:57:01 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id E1AA5288505;
Wed, 28 May 2025 13:57:15 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="czqTBOAx"
Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.15])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7708221322F
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:57:12 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=192.198.163.15
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440634; cv=fail; b=UuMsEkSUQvsj3py6EAoONPfe+h47HEILCJNAuON0yvqNPk3z0c6ZutJJosnJR555MeyY15BVB4Hc9IBVEu421nemdmspzzI4/0kUAiJDM2M4fgUoaHkfAi1j9KR2nyZEh0OQwpygqe744FOJyjymIbwkpXGNVMrqH+NYyynbc8U=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440634; c=relaxed/simple;
bh=H6LeQesTlX6+vbVvRnMTBOZvyiM2cM6GoWKsxdWvCkY=;
h=Date:From:To:CC:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=IJ4KHvgMSb1t1l3niFIkTVrY9bPbPxGjDsZWuAb+1ioExTUexteOdYhAVuM4StjFNzO7lnvlTH0eL5DUz4DhuXBWyGeWpgEXkCnG5qNQHovwbA23/F9XAtuPHhdcj3d4r7eC+9WUMNr2r5+EhlEx0KNuIC+giOgOdKqaNqUVZp0=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=czqTBOAx; arc=fail smtp.client-ip=192.198.163.15
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748440632; x=1779976632;
h=date:from:to:cc:subject:message-id:references:
in-reply-to:mime-version;
bh=H6LeQesTlX6+vbVvRnMTBOZvyiM2cM6GoWKsxdWvCkY=;
b=czqTBOAxCCxi7Z3S0jyBi2RW1mRokwzrxpO3rKLer3z2HNoptg0xWYbG
EuDHx+rL067JaUreFjtXMcEsKjsrlczrNVABULzlXfmZ/ADoCWtXJLk67
/WEsQdK0Izm7c22ljS+n9hnAkr2F+Xhnof/dSHgVQlVivX/9F9yF3KftE
ovGATi+Qmy6BwZm7P1XW7yikdqEjK5/G+7cPYWjkeziVTHw7QgGuTAnCO
zuEhl05ElyK3LDLwq4eQklyEUv3ZeRDWp7RCBcIBw61ZAj5/TS/NQBsR+
rXLvcFc3fsgOjsZkflV+ynKJ+kmgxjeSm2onDszPFZj86TnP0tborQNgb
A==;
X-CSE-ConnectionGUID: 7kHvkj8hQOW9VkK4NwRQCA==
X-CSE-MsgGUID: LfDRbAYyRT2S9RTU0Wd2zQ==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="50623909"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="50623909"
Received: from orviesa005.jf.intel.com ([10.64.159.145])
by fmvoesa109.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 06:57:11 -0700
X-CSE-ConnectionGUID: j3ywkt9XQ0KEtAeqR3Wcvw==
X-CSE-MsgGUID: Ev1vGsyzRVO3bW7nRBW5Sw==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="148536716"
Received: from orsmsx903.amr.corp.intel.com ([10.22.229.25])
by orviesa005.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 06:57:12 -0700
Received: from ORSMSX901.amr.corp.intel.com (10.22.229.23) by
ORSMSX903.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
15.2.1544.25; Wed, 28 May 2025 06:57:11 -0700
Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by
ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
15.2.1544.25 via Frontend Transport; Wed, 28 May 2025 06:57:10 -0700
Received: from NAM12-MW2-obe.outbound.protection.outlook.com (40.107.244.78)
by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
15.1.2507.55; Wed, 28 May 2025 06:57:10 -0700
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=rPPyPF2hLHBkhjLlddIGIQWqj5j8TXmmJ2rkDHl6lIj/y4QGRygzHC6Ei4OOOYrrh/2u7oXDCrxHmNlg1f2pwgxjL+gUMlHzABbebhFhRgtWxJ+PqEVQSG56NDWmBV78Qj52EbCPAx3Ly0NQQdVKAVmlww/yduKlJWkj9bJ66k+rpWF6/GzsOPzcrH59fltpKegeonJ6dczQJN9jN3zDUVfUu7BuNInkePvzO+t+OKA2eHFG9KquW+vgxg78+OcCQuUUU4k3KQPSt3QuZtd360pztInzNEf/icZ3WdCYDRg+0l4XtsSCCPBr92k3vz1IGP1CotV8CaqUJmXljPgCaA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=BmBrLh1owI68JqNJF19vdb+Ac21G6eXmKRw6O7dG5ZU=;
b=wJjiAdaLVcYOCJEBFDEuy+LKskdZvcQ+otKttp44/2x66x5hFFvrDc6GqrVHBoe/K9yoRxbayH7wJ7AMlr1he0pwNbweWLATGT4VRnnaRlLyojyVJWVdGKwTWcJhWOaxQ6aQHj/r00uDgR8w+mlpwS5FMR3Da3vCcjnCkj0jAZ3/4Krc6NP59VEg6X3ULUDXoTqNaJknmu1YSZUMO9rgeGN6q0hjRX3GjP+dwduwBPd2bsO4r0u0g4MswvChCDY0XmzA0HJejDNfv8Ttw4CR87iD/JfJFCDGWQYtx1etPKoZ5fwzbU6pkEstCeCw3uZxWDem+NZbFhbS8Kh5rq9hCw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com;
dkim=pass header.d=intel.com; arc=none
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=intel.com;
Received: from CY5PR11MB6139.namprd11.prod.outlook.com (2603:10b6:930:29::17)
by MW4PR11MB6837.namprd11.prod.outlook.com (2603:10b6:303:221::16) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.26; Wed, 28 May
2025 13:56:54 +0000
Received: from CY5PR11MB6139.namprd11.prod.outlook.com
([fe80::7141:316f:77a0:9c44]) by CY5PR11MB6139.namprd11.prod.outlook.com
([fe80::7141:316f:77a0:9c44%5]) with mapi id 15.20.8769.025; Wed, 28 May 2025
13:56:54 +0000
Date: Wed, 28 May 2025 08:56:51 -0500
From: Lucas De Marchi <lucas.demarchi@xxxxxxxxx>
To: Heiko Stuebner <heiko@xxxxxxxxx>, Dmitry Baryshkov
<dmitry.baryshkov@xxxxxxxxxxxxxxxx>
CC: <andrzej.hajda@xxxxxxxxx>, <neil.armstrong@xxxxxxxxxx>,
<rfoss@xxxxxxxxxx>, <Laurent.pinchart@xxxxxxxxxxxxxxxx>, <jonas@xxxxxxxxx>,
<jernej.skrabec@xxxxxxxxx>, <maarten.lankhorst@xxxxxxxxxxxxxxx>,
<mripard@xxxxxxxxxx>, <tzimmermann@xxxxxxx>,
<dri-devel@xxxxxxxxxxxxxxxxxxxxx>, <linux-kernel@xxxxxxxxxxxxxxx>
Subject: Re: [PATCH] drm/bridge: analogix_dp: Fix clk-disable removal
Message-ID: <jeslyq3zv3l3fakeixfpxw2xeoq55jraag7pfn6xbq65h3armq@uq76bx7xyydo>
References: <20250527225120.3361663-1-heiko@xxxxxxxxx>
Content-Type: text/plain; charset="us-ascii"; format=flowed
Content-Disposition: inline
In-Reply-To: <20250527225120.3361663-1-heiko@xxxxxxxxx>
X-ClientProxiedBy: SJ0PR03CA0003.namprd03.prod.outlook.com
(2603:10b6:a03:33a::8) To CY5PR11MB6139.namprd11.prod.outlook.com
(2603:10b6:930:29::17)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: CY5PR11MB6139:EE_|MW4PR11MB6837:EE_
X-MS-Office365-Filtering-Correlation-Id: 59730f6b-e812-4e17-a30c-08dd9def810e
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|7053199007;
X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?EFBTV1Vdb0xdb/uWz0PbBPjkmPA1AiX8AhSzK1xaEWEjbHYRFHnU0aIpP/J0?=
=?us-ascii?Q?qORxTTWxKXt0xIxxoxBCJZYaQivW8Ok1oTKryjigSGVAdNhxFNsN/4f48B+Y?=
=?us-ascii?Q?q5pCDhWtTBQiiNdBRG76uwuV0Lu342Qho1ysRMiV1U5lYdK/MiQIRzYmkySf?=
=?us-ascii?Q?a8ccm3xXlQ86/wTVUpRlZLH+uLkzY26OzNKzwBwD0ojO54gOmwjjTgNlGGY5?=
=?us-ascii?Q?b4B6KhjsflJGGdStv7GY0rCVio4TcTkk/33pzyrEVIA2ABq8I8Fyep6Ytfko?=
=?us-ascii?Q?ZrGiqEjsBEcW+oxasW7dJs9YiA19MV8ZB1y7upSHRgIpabJ+I+vTlPvhR/EP?=
=?us-ascii?Q?HmkG9vFzh65Ny3BGRcafkj/eL3OJsdsFflxW9klwPAGMKUe7Ow8GeQBQ18Qq?=
=?us-ascii?Q?YUdQ2ttD9p7qxyL9VbpLxDu3U21t0d+0SCfmwNi85SnfZkmQJYOn7NWXZtDu?=
=?us-ascii?Q?VsukGK7jbBVrbjOOver862jx8iwJITgocuLJaglYYoP47iPcx1V0F6XrpfDP?=
=?us-ascii?Q?htRL3FpGNsRf6nYeSXE7ECOvjbpR5fezZyKFIC8RsUmoiuvoVD2/5dbGJyHK?=
=?us-ascii?Q?aLQJD51Paa04vRh+q19t+IEGw7hNCTpY+5rgNa+tGqD3OKcqcROkKsd5RXil?=
=?us-ascii?Q?Q9cbZ9BCUyEENK45awxHLqnbZzunapzyPl0mGarioFv8KdU3vtvHfGcDtiEf?=
=?us-ascii?Q?j+UCC9x+CwW2cDDPKScZYAAbkC0w6iUiQkqonrcZUhz3J7qpC08I5SJSdl/k?=
=?us-ascii?Q?OZgbo2ctdmVEaNonN08MROSvV94Dsaa7geDboU8qOmQ7wgk62pUi7g5UT6KC?=
=?us-ascii?Q?P6ltg/WUnjeeyZDiLXUXrYFBasrkHEcoFBxz++x1ztEEjjBp65GC1te5qBrX?=
=?us-ascii?Q?4lS16aYjDNPUFqMeg+sEbOGDVuNZAwlVFiLIvcPEFd1GQ8oG9CT/mOsQV+RK?=
=?us-ascii?Q?t4OJnPCcynSRr1iHSqETslSPo8CRwcoidu2c5q1u6EHSatD4kexIPRpxuWM9?=
=?us-ascii?Q?ql+CsABpIKiTfLQX+m4imOSzqyg83TEJ8kuBUVUyb4nYEYcMnfF+Nmk7MQ6a?=
=?us-ascii?Q?QBkionFNcBUAC23kBbgcBdAyxVyIaEdShRJElTLY2m29VnTQtPrvizcv1Vhs?=
=?us-ascii?Q?G/zEJw2UcmAeqrHfe4Wd4wmUI9ez7SEv152d8nwgmsVQbMveYsVtR0DRkSB0?=
=?us-ascii?Q?0m0Kt3U3ikPioGmmm6xtnzjhPScjMLEQlfXgdxGhiMEsgjGwWF7Jzx0WUgU0?=
=?us-ascii?Q?6sQ/9bWNcfhrBKeqd6mP0AdvfBn8eXt4nHek7awURnAC2NgIImc9j8VmhzKd?=
=?us-ascii?Q?xNYq2TbtwDtVMbb8TIOaTR0ocSiCUf4k/rZ4nkEbq2vY+SUJAE6BfH4tuXO0?=
=?us-ascii?Q?6pOdPoSIZFowHtnbCMSlUkzPMi9vtbqDtOnLTpZ0mc3UpYUJZFnpi0V1CNDd?=
=?us-ascii?Q?Y1uGoz55bfM=3D?=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY5PR11MB6139.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(7053199007);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?SbgE2oYGhlUTrpeJOijgs5PZaXKFiGcqCxdH85TdlE+PfTplgklkT0yHTKjF?=
=?us-ascii?Q?L2mqSoNFMsPtGUH4FIa4EN4KifEjSOYhxNeDfn7mtT6ejq1Uaq1BYClB/vAi?=
=?us-ascii?Q?nINaDyQgTbQTuiZMvE5u/0jnZ/GNs4bUw5E3pj6TB3LFSSWl5sSpJoW9PtHf?=
=?us-ascii?Q?69u7PauLDQmkqNFzeD02s0MXDyN6Zybv4JfshY4Q9HDgGfqJP1oDXMUCk/WJ?=
=?us-ascii?Q?3g+06hnuSMmf4N3QktY7q6Co+Req/my5Y7qRpyB+DFqdpv3Kk3kchkZN7+hW?=
=?us-ascii?Q?zibDFc1MRas0iXXXPlMPzeClvzmBbDtouqDfT4wd2N6vPJv/KDiLmH7IRazU?=
=?us-ascii?Q?EXvCpT+X065DYoBSIJ/3UPbylOYGJ1IekuUAlObVDLoRCuWl15h+065mw+iB?=
=?us-ascii?Q?f6UvQriB5XfPSy0Y26FsxVmTLbNZSUVYUx/6LuWXR3XZOhf27pcO97qlwlHm?=
=?us-ascii?Q?0KLzPp/cgvcx6Jv1mM3nNn5eq8n4pe72VK1rKcd85xj/+W837htbr3qghv8y?=
=?us-ascii?Q?0J5ArmjaAr0Dzn4HYI6t5ZoHeWv4qfMFyhPM9kz/aFKdW7/hSIXOzTkHOT3C?=
=?us-ascii?Q?1ile9U4+T49Qap7NWrFvjKNeo50pOhwRUoHezkT81jsCuYVpcF7LjLOHvlni?=
=?us-ascii?Q?FFwFIuqIBZLBbi4hg88qc73cs0U1jEh5OX3OYGf37wpRb77isyW4sOx0AeCl?=
=?us-ascii?Q?I2srgkDbWjFqH35AQmQrAJlKLPt6Tm1wIzOpsbS0lyCaRwimQaigmYP5eVjX?=
=?us-ascii?Q?fhb/mM0zBZ/jOO2mhyOYuUlphFL01Ott9iFfSlZ6bjGxvFlPJD/9eBHOBjrW?=
=?us-ascii?Q?Oqea/2Sugh/A7XEZPF+/JBxRGPjNjYhhVO6XjX2E2cvjvCxd9u7gcGbISAwn?=
=?us-ascii?Q?hmkSWesTl/5hluFLZ658s8dDp1r5iBM+a/+c7oBUreDyZvqqw3vnn0wq/Z8I?=
=?us-ascii?Q?BctO16Iy3XaFpdfMCisdYEbDDJ7T8tY3tmGPzSKqvoblDxhh5xzmGDtBK/id?=
=?us-ascii?Q?9aDyiJM+efm/J7cPvoRyPO/BdXNcwLwXAet6nfkeq9wTO5n2Qoe7dR7hU5qc?=
=?us-ascii?Q?j4An/T6gMbgRZA0F3TuGOga29TszbTjV3hvOLykCeRprPkVewb4w3AQ+9Hr9?=
=?us-ascii?Q?IyioCjLqWSwqN7EOOhzS8Jaug0OevlHC3/5O4sODDz61Im9Yhrz1uEAIPSD1?=
=?us-ascii?Q?EQlNkP3XSGd/WNMn7UVKVCCyTJnDUPKdzvp66kspQoFyWCGfqkIXMasHcATI?=
=?us-ascii?Q?zp1cDPnwgG/YwJdTbd2ekt1Cdjx24sIubNxXE36fdVjzIUgUMgmESO++YsW+?=
=?us-ascii?Q?ga/r+JxSH0aTprIbtlVME4GpaUHEbRJqff6mq4w+AiggVToXUGcy6fldc/HA?=
=?us-ascii?Q?mDGIO7dCwLPqalO1DjuKkC1Mgzid+TC1PWOiC6TVvLRd7mN7aQ1MkQfEbiM8?=
=?us-ascii?Q?KfPfUqE2m5b73fWJocJyX1g3m9wZA6SsA9EO4bCDxEEDcDN1PRpVfxLJ33uU?=
=?us-ascii?Q?pE6IKzi5nHEaLP9Wb8qWA5tjjFwHU5ruJaDW3fS9p93lHg+lcLo10H09IBwL?=
=?us-ascii?Q?SMPYGEnJnCE0wGss0ju5ck1VYzPZIvtSvy4v3tTEZS46FZYApqKvfjZDLzan?=
=?us-ascii?Q?Lw=3D=3D?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 59730f6b-e812-4e17-a30c-08dd9def810e
X-MS-Exchange-CrossTenant-AuthSource: CY5PR11MB6139.namprd11.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 13:56:54.6102
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: O6Fqp0/Yg8guJlIhWlgUd59H2h+ImaFOG7mEfn4IzAOiJji4xvg2cHzwH4OrMuH2O3BBj+mqoCbka4EmU8SWXUuHx2Iyxv1j8WgxE94KwGM=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR11MB6837
X-OriginatorOrg: intel.com
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 12:51:19AM +0200, Heiko Stuebner wrote:
>Commit 6579a03e68ff ("drm/bridge: analogix_dp: Remove the unnecessary
>calls to clk_disable_unprepare() during probing") removed the mismatched
>clock_disable calls from analogix_dp_probe.
>
>But that patch was created and sent before
>commit e5e9fa9f7aad ("drm/bridge: analogix_dp: Add support to get panel
>from the DP AUX bus") was merged, so couldn't know about this change.
>
>So in the original patch the last change is
> if (ret) {
> dev_err(&pdev->dev, "failed to request irq\n");
>- goto err_disable_clk;
>+ return ERR_PTR(ret);
> }
> disable_irq(dp->irq);
>
> return dp;
>-
>-err_disable_clk:
>- clk_disable_unprepare(dp->clock);
>- return ERR_PTR(ret);
> }
> EXPORT_SYMBOL_GPL(analogix_dp_probe);
>
>the analogix_dp_core.c actually now has the runtime-pm handling between
>disable_irq() and return do introducing another goto err_clk_disable there.
>
>So remove that one too and return an error pointer, to not create build
>breakage.
>
>Fixes: 6579a03e68ff ("drm/bridge: analogix_dp: Remove the unnecessary calls to clk_disable_unprepare() during probing")
>Signed-off-by: Heiko Stuebner <heiko@xxxxxxxxx>
Reviewed-by: Lucas De Marchi <lucas.demarchi@xxxxxxxxx>
Dmitry, maybe you have to enable a config in your build tests so we
don't have broken builds?
Lucas De Marchi
Return-Path: <linux-kernel+bounces-665577-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 31D7941E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:57:36 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 6981A17BF3D
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:57:37 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 41C8D288516;
Wed, 28 May 2025 13:57:31 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Rxx79Xja"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7B55220E6EB;
Wed, 28 May 2025 13:57:30 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440650; cv=none; b=gTvQoaaRi2i5pk5aa4fjGOepcMEw5WknAcmh3JTXhwmXpIIGiYs81O1cs3yjls0CPFtDHEW1WCjcwMNGNVrsMKAJm9pOL5Qhkvz4mlW+Mjh1nBrJSuQBJ9GR6nq6EsQdFvlwH5Z7J6Y+Qx+ADns8d6apu4VV2nMXs3DUfbm/Yg0=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440650; c=relaxed/simple;
bh=re9cRmPSpTjjnS1xkzSl4ZvxwlyiJAj7HZDGSgvROcE=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=dEBR2Rc1zX9POgR8GrQQ5nDWrmmPxe2Z8zgmlNxm1L5iQaub5rNC6pAaC9BclXr233xCjO9yzChTc2C7nEl2dfnpDQYpjZb9SnTy1QAvIm47JbDWaBEVqNQBdZES90/rsXWHWe/IMzc6gDyM181AWF4QTEpPPjlNpYIbOc2oPFc=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Rxx79Xja; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id A89C6C4CEE3;
Wed, 28 May 2025 13:57:29 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748440649;
bh=re9cRmPSpTjjnS1xkzSl4ZvxwlyiJAj7HZDGSgvROcE=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=Rxx79Xja/lpk9Jv96m91WBwxJVpbig0PH+b3FXzT2BVLwQJHaIUnCM2KsR7/VNAR8
5tLUVDfGrhMpLSU6PxOQUL3e0cigY+a2Ka1u/F4pMOhrbkuV5hW7CKoBcnSCQOtwOW
X685PM4Fq7qW5h8ruQfyMv5aX0uDY//ips2p5osVrAKO4PKBa944IngsY9K02pYWZd
16FE/R9FZQ50P6LkAoStIxhJa6LE1tPnN2dXTmPdug8tM0PVg+yE8V0XTI3RxQyrxW
IO2KMLKlfutlThMmSYvjFi+zj4D/aAf4fBl5Ynl/82H5Gt7Cm+ERZLYeTwJzcfs5gv
M0fjiAHOphslQ==
Date: Wed, 28 May 2025 08:57:28 -0500
From: "Rob Herring (Arm)" <robh@xxxxxxxxxx>
To: Frank Li <Frank.Li@xxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
Daniel Lezcano <daniel.lezcano@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>, imx@xxxxxxxxxxxxxxx,
Conor Dooley <conor+dt@xxxxxxxxxx>
Subject: Re: [PATCH 1/1] dt-bindings: timer: Add fsl,vf610-pit.yaml
Message-ID: <174844064699.3859704.6624203332315321505.robh@xxxxxxxxxx>
References: <20250522205710.502779-1-Frank.Li@xxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250522205710.502779-1-Frank.Li@xxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Thu, 22 May 2025 16:57:09 -0400, Frank Li wrote:
> Add binding doc fsl,vf610-pit.yaml to fix below CHECK_DTB warnings:
>
> arch/arm/boot/dts/nxp/vf/vf610m4-colibri.dtb:
> /soc/bus@40000000/pit@40037000: failed to match any schema with compatible: ['fsl,vf610-pit']
>
> Signed-off-by: Frank Li <Frank.Li@xxxxxxx>
> ---
> .../bindings/timer/fsl,vf610-pit.yaml | 54 +++++++++++++++++++
> 1 file changed, 54 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/timer/fsl,vf610-pit.yaml
>
Applied, thanks!
Return-Path: <linux-kernel+bounces-665578-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id A2AEF41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:58:29 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 0F9027A42ED
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:57:11 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 4EE81286890;
Wed, 28 May 2025 13:58:19 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Gsa1Uh2n"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 06B4520B81D
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:58:15 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440698; cv=none; b=om1JrBSzQcZld/UIfvLjHQKiLUyWb4fDb+bKnTIvR0JT0DcIvhNC+yrR9XIu5LsXR5Qzm1OqyRZK8o8g9gduPb4BPjgHsAEzyHmCOut3UWhXQyjvWT0UmuCW/QdOWPRZ+tOfp/oT70KqmuuUvX7qnjVUfgq6lfFQc211BJU9jik=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440698; c=relaxed/simple;
bh=d9/ar5v16RsbtX277WP290VgdFIsq/m2Gd1iupLMNYI=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=b/PKe807NYSJd0/NOcKBrRPNgO0SCvVckixjEwdWW+Ij0IVyjb1KC9p1jjz+GR0EHho1M7qdbXYbCy7I9QkXvSx9dpmjs0Y5R2vA44l+9xr9PPtuuky75STLvg7XKXTys0lG1QfnxdVkD4yoQZzRNwT4+sXlIUCt3rgkKKCkLcQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Gsa1Uh2n; arc=none smtp.client-ip=170.10.133.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748440694;
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:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=cHNl3ldABX8E7TPXyDDnG8CSbzly8EDwfMe7Y6Vc170=;
b=Gsa1Uh2nP3Hmn+LmOUjmnteFYvMxUIJ6n4IASig/vSqCzyGjB8AW47xvAbH++kPH0MbSww
MV+EiCUjBUnBmF6vnsEfmJbj9vi/5qiuVynx+gVnOTVsn/7pbrroU1d96r2cUDQfDSBWa6
lkykcnM0dgp6QXgoqrHiwhZBChjnVd8=
Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com
[209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS
(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
us-mta-590-E5j77aPKObeHj7qA95bXFA-1; Wed, 28 May 2025 09:58:13 -0400
X-MC-Unique: E5j77aPKObeHj7qA95bXFA-1
X-Mimecast-MFC-AGG-ID: E5j77aPKObeHj7qA95bXFA_1748440692
Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-43cf5196c25so26374605e9.0
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 06:58:13 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748440692; x=1749045492;
h=content-transfer-encoding:in-reply-to:from:references:cc:to
:content-language:subject:user-agent:mime-version:date:message-id
:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
bh=cHNl3ldABX8E7TPXyDDnG8CSbzly8EDwfMe7Y6Vc170=;
b=nwhoTsbhc9pMOk9kWkt0QYRi3lFPPB44t4+9f+lfZ5XYBlF4cmaq2V2pN9jnzVZvVl
1tAWE2vJBLPJ94dOndnXysRQn1dttz6ixaJGkAIJO8ZwfPZUEBothEYC3okxSEa2v0nc
Rajmaw5R5B0bl4PrrXxxdy1e4Y9/3X3/UQRC8Io/KlVWGSi5nKzFzqfyz1ygsQecZpT9
zlUZb7YAvJw33hlYmyyvRX1L4J4GkwiyZmrkm45SmlXexzL3Ry1ErMeJQX+APE/yF2uE
/XrJTYuHi3GeZXU1q3Tln9h+7M97UldV81Jr3IR+vl/LOUO13ml2vCXyZNOENFu4mb+a
cSmA==
X-Forwarded-Encrypted: i=1; AJvYcCWhILG15nFhprLSnLUES1WFcbpRXZKJ68+awayPs59Ktotdp5n9Dp3yOuzjcjH5BZc+JCRwNQ+g/0fmY2U=@vger.kernel.org
X-Gm-Message-State: AOJu0Yy/kTQcr+S6NuehbU6wAxnFjBtbDXUA5GF3eh7SCjZQEy9PbG7y
mJIR3IxDDhTzmllXJgdHdAfcY4UJvvyk3BRLpi9PN1o2u0mpIzyq0ATH00u3QnY6p6heCNJebbL
z01XJiGIj8+AdEUQzCYL/6L6HccVy0vXbPZWkn73Hf3ZdALqn3yrUn56lnnVeyA74GQ==
X-Gm-Gg: ASbGncvDGVLKCtNzu9xjtU59gyp5DJr2TNdnHfzXg+JX1AJODlRbTOKyT2J93OhsNt0
o1eTwNqEmRa/MlGczZE1dJfuGqQDgqFUAhppVTHG95bOCIuCKXItSKyxhvuU4CIYP4f98uzoSpi
D+DvPKm8Gaz7/ViGhA0WoDqJ0BVr7DlAe4uW82CVW59WI3B/3PoJjSGjP+946StRz5jlO98/A+r
CGx23UF6HguUHS1BSsCcs/2L1VhOkOGbYhFI7OTbvTImsJCZ1hP0cfuSv6NvEXwvxZ4uZNhKEfW
wT96WcsXaqadh2ekBt97lmW7ggU8GzdzMdAqxiuUHIjIprCIwPOrmw==
X-Received: by 2002:a05:600c:8189:b0:43c:f050:fed3 with SMTP id 5b1f17b1804b1-44c919e13f3mr144959675e9.11.1748440692158;
Wed, 28 May 2025 06:58:12 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IGqzLEDkfQmQWWcPbXN4NNDgGddj948ymAUAzbar+s/KIa9aBEzkLArwvflMAWN7lKAl99o7w==
X-Received: by 2002:a05:600c:8189:b0:43c:f050:fed3 with SMTP id 5b1f17b1804b1-44c919e13f3mr144959375e9.11.1748440691703;
Wed, 28 May 2025 06:58:11 -0700 (PDT)
Received: from ?IPV6:2a01:e0a:f0e:9070:527b:9dff:feef:3874? ([2a01:e0a:f0e:9070:527b:9dff:feef:3874])
by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4500e1de18dsm23518245e9.40.2025.05.28.06.58.10
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 06:58:11 -0700 (PDT)
Message-ID: <1e0250cd-e70e-45d9-92fc-1bf377ff835a@xxxxxxxxxx>
Date: Wed, 28 May 2025 15:58:09 +0200
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [RFC PATCH v2 3/9] KVM: arm64: nv: selftests: Enable hypervisor
timer tests to run in vEL2
Content-Language: en-US
To: Ganapatrao Kulkarni <gankulkarni@xxxxxxxxxxxxxxxxxxxxxx>,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, kvmarm@xxxxxxxxxxxxxxx,
linux-kselftest@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Cc: maz@xxxxxxxxxx, oliver.upton@xxxxxxxxx, joey.gouly@xxxxxxx,
suzuki.poulose@xxxxxxx, yuzenghui@xxxxxxxxxx, seanjc@xxxxxxxxxx,
darren@xxxxxxxxxxxxxxxxxxxxxx
References: <20250512105251.577874-1-gankulkarni@xxxxxxxxxxxxxxxxxxxxxx>
<20250512105251.577874-4-gankulkarni@xxxxxxxxxxxxxxxxxxxxxx>
From: Eric Auger <eauger@xxxxxxxxxx>
In-Reply-To: <20250512105251.577874-4-gankulkarni@xxxxxxxxxxxxxxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Ganapatrao,
On 5/12/25 12:52 PM, Ganapatrao Kulkarni wrote:
> Adding required changes to enable and test HVTIMER and HPTIMER
> in vEL2. In default case, PTIMER and VTIMER are validated and with
> NV enabled (with argument "-g 1"), HPTIMER and HVTIMER are validated
> by injecting respective timer interrupts.
>
> Signed-off-by: Ganapatrao Kulkarni <gankulkarni@xxxxxxxxxxxxxxxxxxxxxx>
> ---
> tools/testing/selftests/kvm/arch_timer.c | 8 +-
> .../testing/selftests/kvm/arm64/arch_timer.c | 118 +++++++++++++++---
> .../selftests/kvm/include/arm64/arch_timer.h | 16 +++
> .../selftests/kvm/include/timer_test.h | 1 +
> 4 files changed, 123 insertions(+), 20 deletions(-)
>
> diff --git a/tools/testing/selftests/kvm/arch_timer.c b/tools/testing/selftests/kvm/arch_timer.c
> index acb2cb596332..5c30bda0462b 100644
> --- a/tools/testing/selftests/kvm/arch_timer.c
> +++ b/tools/testing/selftests/kvm/arch_timer.c
> @@ -35,6 +35,7 @@ struct test_args test_args = {
> .migration_freq_ms = TIMER_TEST_MIGRATION_FREQ_MS,
> .timer_err_margin_us = TIMER_TEST_ERR_MARGIN_US,
> .reserved = 1,
> + .is_nested = false,
> };
>
> struct kvm_vcpu *vcpus[KVM_MAX_VCPUS];
> @@ -43,6 +44,7 @@ struct test_vcpu_shared_data vcpu_shared_data[KVM_MAX_VCPUS];
> static pthread_t pt_vcpu_run[KVM_MAX_VCPUS];
> static unsigned long *vcpu_done_map;
> static pthread_mutex_t vcpu_done_map_lock;
> +bool is_nested;
>
> static void *test_vcpu_run(void *arg)
> {
> @@ -193,6 +195,7 @@ static void test_print_help(char *name)
> pr_info("\t-o: Counter offset (in counter cycles, default: 0) [aarch64-only]\n");
> pr_info("\t-e: Interrupt arrival error margin (in us) of the guest timer (default: %u)\n",
> TIMER_TEST_ERR_MARGIN_US);
> + pr_info("\t-g: Enable Nested Virtualization, run guest code as guest hypervisor (default: Disabled)\n");
I would recommend "default: 0" in all enhanced tests to clarify that 0/1
are the values to be used.
Thanks
Eric
> pr_info("\t-h: print this help screen\n");
> }
>
> @@ -200,7 +203,7 @@ static bool parse_args(int argc, char *argv[])
> {
> int opt;
>
> - while ((opt = getopt(argc, argv, "hn:i:p:m:o:e:")) != -1) {
> + while ((opt = getopt(argc, argv, "hn:i:p:m:o:e:g:")) != -1) {
> switch (opt) {
> case 'n':
> test_args.nr_vcpus = atoi_positive("Number of vCPUs", optarg);
> @@ -226,6 +229,9 @@ static bool parse_args(int argc, char *argv[])
> test_args.counter_offset = strtol(optarg, NULL, 0);
> test_args.reserved = 0;
> break;
> + case 'g':
> + test_args.is_nested = atoi_non_negative("Is Nested", optarg);
> + break;
> case 'h':
> default:
> goto err;
> diff --git a/tools/testing/selftests/kvm/arm64/arch_timer.c b/tools/testing/selftests/kvm/arm64/arch_timer.c
> index eeba1cc87ff8..50bf05bb6f85 100644
> --- a/tools/testing/selftests/kvm/arm64/arch_timer.c
> +++ b/tools/testing/selftests/kvm/arm64/arch_timer.c
> @@ -12,16 +12,22 @@
> #include "timer_test.h"
> #include "ucall_common.h"
> #include "vgic.h"
> +#include <nv_util.h>
>
> enum guest_stage {
> GUEST_STAGE_VTIMER_CVAL = 1,
> GUEST_STAGE_VTIMER_TVAL,
> GUEST_STAGE_PTIMER_CVAL,
> GUEST_STAGE_PTIMER_TVAL,
> + GUEST_STAGE_HVTIMER_CVAL,
> + GUEST_STAGE_HVTIMER_TVAL,
> + GUEST_STAGE_HPTIMER_CVAL,
> + GUEST_STAGE_HPTIMER_TVAL,
> GUEST_STAGE_MAX,
> };
>
> static int vtimer_irq, ptimer_irq;
> +static int hvtimer_irq, hptimer_irq;
>
> static void
> guest_configure_timer_action(struct test_vcpu_shared_data *shared_data)
> @@ -47,6 +53,26 @@ guest_configure_timer_action(struct test_vcpu_shared_data *shared_data)
> shared_data->xcnt = timer_get_cntct(PHYSICAL);
> timer_set_ctl(PHYSICAL, CTL_ENABLE);
> break;
> + case GUEST_STAGE_HVTIMER_CVAL:
> + timer_set_next_cval_ms(HVIRTUAL, test_args.timer_period_ms);
> + shared_data->xcnt = timer_get_cntct(HVIRTUAL);
> + timer_set_ctl(HVIRTUAL, CTL_ENABLE);
> + break;
> + case GUEST_STAGE_HVTIMER_TVAL:
> + timer_set_next_tval_ms(HVIRTUAL, test_args.timer_period_ms);
> + shared_data->xcnt = timer_get_cntct(HVIRTUAL);
> + timer_set_ctl(HVIRTUAL, CTL_ENABLE);
> + break;
> + case GUEST_STAGE_HPTIMER_CVAL:
> + timer_set_next_cval_ms(HPHYSICAL, test_args.timer_period_ms);
> + shared_data->xcnt = timer_get_cntct(HPHYSICAL);
> + timer_set_ctl(HPHYSICAL, CTL_ENABLE);
> + break;
> + case GUEST_STAGE_HPTIMER_TVAL:
> + timer_set_next_tval_ms(HPHYSICAL, test_args.timer_period_ms);
> + shared_data->xcnt = timer_get_cntct(HPHYSICAL);
> + timer_set_ctl(HPHYSICAL, CTL_ENABLE);
> + break;
> default:
> GUEST_ASSERT(0);
> }
> @@ -75,6 +101,16 @@ static void guest_validate_irq(unsigned int intid,
> accessor = PHYSICAL;
> timer_irq = ptimer_irq;
> break;
> + case GUEST_STAGE_HVTIMER_CVAL:
> + case GUEST_STAGE_HVTIMER_TVAL:
> + accessor = HVIRTUAL;
> + timer_irq = hvtimer_irq;
> + break;
> + case GUEST_STAGE_HPTIMER_CVAL:
> + case GUEST_STAGE_HPTIMER_TVAL:
> + accessor = HPHYSICAL;
> + timer_irq = hptimer_irq;
> + break;
> default:
> GUEST_ASSERT(0);
> return;
> @@ -142,38 +178,79 @@ static void guest_code(void)
> {
> uint32_t cpu = guest_get_vcpuid();
> struct test_vcpu_shared_data *shared_data = &vcpu_shared_data[cpu];
> + bool is_nested = false;
> + enum arch_timer vtimer, ptimer;
> + int vtmr_irq, ptmr_irq;
> + enum guest_stage stage_vtimer_cval, stage_vtimer_tval;
> + enum guest_stage stage_ptimer_cval, stage_ptimer_tval;
>
> - local_irq_disable();
> + if (read_sysreg(CurrentEL) == CurrentEL_EL2)
> + is_nested = true;
>
> + local_irq_disable();
> gic_init(GIC_V3, test_args.nr_vcpus);
>
> - timer_set_ctl(VIRTUAL, CTL_IMASK);
> - timer_set_ctl(PHYSICAL, CTL_IMASK);
> + if (is_nested) {
> +
> + vtimer = HVIRTUAL;
> + ptimer = HPHYSICAL;
> + vtmr_irq = hvtimer_irq;
> + ptmr_irq = hptimer_irq;
> + stage_vtimer_cval = GUEST_STAGE_HVTIMER_CVAL;
> + stage_vtimer_tval = GUEST_STAGE_HVTIMER_TVAL;
> + stage_ptimer_cval = GUEST_STAGE_HPTIMER_CVAL;
> + stage_ptimer_tval = GUEST_STAGE_HPTIMER_TVAL;
> + } else {
> + vtimer = VIRTUAL;
> + ptimer = PHYSICAL;
> + vtmr_irq = vtimer_irq;
> + ptmr_irq = ptimer_irq;
> + stage_vtimer_cval = GUEST_STAGE_VTIMER_CVAL;
> + stage_vtimer_tval = GUEST_STAGE_VTIMER_TVAL;
> + stage_ptimer_cval = GUEST_STAGE_PTIMER_CVAL;
> + stage_ptimer_tval = GUEST_STAGE_PTIMER_TVAL;
> + }
> +
> + timer_set_ctl(vtimer, CTL_IMASK);
> + timer_set_ctl(ptimer, CTL_IMASK);
> + gic_irq_enable(vtmr_irq);
> + gic_irq_enable(ptmr_irq);
>
> - gic_irq_enable(vtimer_irq);
> - gic_irq_enable(ptimer_irq);
> local_irq_enable();
>
> - guest_run_stage(shared_data, GUEST_STAGE_VTIMER_CVAL);
> - guest_run_stage(shared_data, GUEST_STAGE_VTIMER_TVAL);
> - guest_run_stage(shared_data, GUEST_STAGE_PTIMER_CVAL);
> - guest_run_stage(shared_data, GUEST_STAGE_PTIMER_TVAL);
> + guest_run_stage(shared_data, stage_vtimer_cval);
> + guest_run_stage(shared_data, stage_vtimer_tval);
> + guest_run_stage(shared_data, stage_ptimer_cval);
> + guest_run_stage(shared_data, stage_ptimer_tval);
>
> GUEST_DONE();
> }
>
> static void test_init_timer_irq(struct kvm_vm *vm)
> {
> - /* Timer initid should be same for all the vCPUs, so query only vCPU-0 */
> - vcpu_device_attr_get(vcpus[0], KVM_ARM_VCPU_TIMER_CTRL,
> - KVM_ARM_VCPU_TIMER_IRQ_PTIMER, &ptimer_irq);
> - vcpu_device_attr_get(vcpus[0], KVM_ARM_VCPU_TIMER_CTRL,
> - KVM_ARM_VCPU_TIMER_IRQ_VTIMER, &vtimer_irq);
>
> - sync_global_to_guest(vm, ptimer_irq);
> - sync_global_to_guest(vm, vtimer_irq);
> -
> - pr_debug("ptimer_irq: %d; vtimer_irq: %d\n", ptimer_irq, vtimer_irq);
> + /* Timer initid should be same for all the vCPUs, so query only vCPU-0 */
> + if (is_vcpu_nested(vcpus[0])) {
> + vcpu_device_attr_get(vcpus[0], KVM_ARM_VCPU_TIMER_CTRL,
> + KVM_ARM_VCPU_TIMER_IRQ_HPTIMER, &hptimer_irq);
> + vcpu_device_attr_get(vcpus[0], KVM_ARM_VCPU_TIMER_CTRL,
> + KVM_ARM_VCPU_TIMER_IRQ_HVTIMER, &hvtimer_irq);
> +
> + sync_global_to_guest(vm, hptimer_irq);
> + sync_global_to_guest(vm, hvtimer_irq);
> +
> + pr_debug("hptimer_irq: %d; hvtimer_irq: %d\n", hptimer_irq, hvtimer_irq);
> + } else {
> + vcpu_device_attr_get(vcpus[0], KVM_ARM_VCPU_TIMER_CTRL,
> + KVM_ARM_VCPU_TIMER_IRQ_PTIMER, &ptimer_irq);
> + vcpu_device_attr_get(vcpus[0], KVM_ARM_VCPU_TIMER_CTRL,
> + KVM_ARM_VCPU_TIMER_IRQ_VTIMER, &vtimer_irq);
> +
> + sync_global_to_guest(vm, ptimer_irq);
> + sync_global_to_guest(vm, vtimer_irq);
> +
> + pr_debug("ptimer_irq: %d; vtimer_irq: %d\n", ptimer_irq, vtimer_irq);
> + }
> }
>
> static int gic_fd;
> @@ -184,7 +261,10 @@ struct kvm_vm *test_vm_create(void)
> unsigned int i;
> int nr_vcpus = test_args.nr_vcpus;
>
> - vm = vm_create_with_vcpus(nr_vcpus, guest_code, vcpus);
> + if (test_args.is_nested)
> + vm = nv_vm_create_with_vcpus_gic(nr_vcpus, vcpus, NULL, guest_code);
> + else
> + vm = vm_create_with_vcpus(nr_vcpus, guest_code, vcpus);
>
> vm_init_descriptor_tables(vm);
> vm_install_exception_handler(vm, VECTOR_IRQ_CURRENT, guest_irq_handler);
> diff --git a/tools/testing/selftests/kvm/include/arm64/arch_timer.h b/tools/testing/selftests/kvm/include/arm64/arch_timer.h
> index bf461de34785..82ba908fba8b 100644
> --- a/tools/testing/selftests/kvm/include/arm64/arch_timer.h
> +++ b/tools/testing/selftests/kvm/include/arm64/arch_timer.h
> @@ -11,6 +11,8 @@
> enum arch_timer {
> VIRTUAL,
> PHYSICAL,
> + HVIRTUAL,
> + HPHYSICAL,
> };
>
> #define CTL_ENABLE (1 << 0)
> @@ -37,8 +39,10 @@ static inline uint64_t timer_get_cntct(enum arch_timer timer)
>
> switch (timer) {
> case VIRTUAL:
> + case HVIRTUAL:
> return read_sysreg(cntvct_el0);
> case PHYSICAL:
> + case HPHYSICAL:
> return read_sysreg(cntpct_el0);
> default:
> GUEST_FAIL("Unexpected timer type = %u", timer);
> @@ -52,9 +56,11 @@ static inline void timer_set_cval(enum arch_timer timer, uint64_t cval)
> {
> switch (timer) {
> case VIRTUAL:
> + case HVIRTUAL:
> write_sysreg(cval, cntv_cval_el0);
> break;
> case PHYSICAL:
> + case HPHYSICAL:
> write_sysreg(cval, cntp_cval_el0);
> break;
> default:
> @@ -68,8 +74,10 @@ static inline uint64_t timer_get_cval(enum arch_timer timer)
> {
> switch (timer) {
> case VIRTUAL:
> + case HVIRTUAL:
> return read_sysreg(cntv_cval_el0);
> case PHYSICAL:
> + case HPHYSICAL:
> return read_sysreg(cntp_cval_el0);
> default:
> GUEST_FAIL("Unexpected timer type = %u", timer);
> @@ -83,9 +91,11 @@ static inline void timer_set_tval(enum arch_timer timer, int32_t tval)
> {
> switch (timer) {
> case VIRTUAL:
> + case HVIRTUAL:
> write_sysreg(tval, cntv_tval_el0);
> break;
> case PHYSICAL:
> + case HPHYSICAL:
> write_sysreg(tval, cntp_tval_el0);
> break;
> default:
> @@ -100,8 +110,10 @@ static inline int32_t timer_get_tval(enum arch_timer timer)
> isb();
> switch (timer) {
> case VIRTUAL:
> + case HVIRTUAL:
> return read_sysreg(cntv_tval_el0);
> case PHYSICAL:
> + case HPHYSICAL:
> return read_sysreg(cntp_tval_el0);
> default:
> GUEST_FAIL("Could not get timer %d\n", timer);
> @@ -115,9 +127,11 @@ static inline void timer_set_ctl(enum arch_timer timer, uint32_t ctl)
> {
> switch (timer) {
> case VIRTUAL:
> + case HVIRTUAL:
> write_sysreg(ctl, cntv_ctl_el0);
> break;
> case PHYSICAL:
> + case HPHYSICAL:
> write_sysreg(ctl, cntp_ctl_el0);
> break;
> default:
> @@ -131,8 +145,10 @@ static inline uint32_t timer_get_ctl(enum arch_timer timer)
> {
> switch (timer) {
> case VIRTUAL:
> + case HVIRTUAL:
> return read_sysreg(cntv_ctl_el0);
> case PHYSICAL:
> + case HPHYSICAL:
> return read_sysreg(cntp_ctl_el0);
> default:
> GUEST_FAIL("Unexpected timer type = %u", timer);
> diff --git a/tools/testing/selftests/kvm/include/timer_test.h b/tools/testing/selftests/kvm/include/timer_test.h
> index 9b6edaafe6d4..95f61c4a8a80 100644
> --- a/tools/testing/selftests/kvm/include/timer_test.h
> +++ b/tools/testing/selftests/kvm/include/timer_test.h
> @@ -26,6 +26,7 @@ struct test_args {
> /* Members of struct kvm_arm_counter_offset */
> uint64_t counter_offset;
> uint64_t reserved;
> + bool is_nested;
> };
>
> /* Shared variables between host and guest */
Return-Path: <linux-kernel+bounces-665579-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D7A6041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:59:08 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 2104E168F6D
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:59:10 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id CC5C82874ED;
Wed, 28 May 2025 13:59:02 +0000 (UTC)
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6371320B81D
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:59:02 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440742; cv=none; b=k6P9QIioK57qxnxGpgksCaeqsrIsoOPf4ZGUGjE/dsLyqgvyZGZWLglX0U4JL+xRI5p6ZfV4IWFznJvP8m2p7tr6Bq6n61bsGxTJ2c+ZGI2jz13d3Qw3imtHd7x3FLv2102azAJzNBWAnHOBgrsIz9oKQ3mzOjN73w0mHTqTJFQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440742; c=relaxed/simple;
bh=lvfyVyNh2GfH/oh2OLT87WzGcnpGXZD/TplYVhyCgNs=;
h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=lyPRi0htF6CbPjW58cvp8HOuyfWaVl0yA4x1nUnDvr/eW0CU4WxeIjP0WeZ+CbBzgdauuxCdOEQECVxOShF+OBcXr+2TLoOR3pvh23MC3c+E+j5hxwCzHnhdL/of2JJ+e0lcRB1oSyURRucvC+7Pspe2nW5sbQ34B2YqUl/0Zyo=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 040F4C4CEE3;
Wed, 28 May 2025 13:59:00 +0000 (UTC)
Date: Wed, 28 May 2025 10:00:00 -0400
From: Steven Rostedt <rostedt@xxxxxxxxxxx>
To: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: Ingo Molnar <mingo@xxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx, Dietmar
Eggemann <dietmar.eggemann@xxxxxxx>, Linus Torvalds
<torvalds@xxxxxxxxxxxxxxxxxxxx>, Shrikanth Hegde <sshegde@xxxxxxxxxxxxx>,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>, Valentin Schneider
<vschneid@xxxxxxxxxx>, Mel Gorman <mgorman@xxxxxxx>, Vincent Guittot
<vincent.guittot@xxxxxxxxxx>, Sebastian Andrzej Siewior
<bigeasy@xxxxxxxxxxxxx>
Subject: Re: [PATCH 00/43] sched: Use the SMP scheduler on UP too
Message-ID: <20250528100000.0ab0a8b1@xxxxxxxxxxxxxxxxxx>
In-Reply-To: <20250528085813.GX39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <20250528080924.2273858-1-mingo@xxxxxxxxxx>
<20250528085813.GX39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
X-Mailer: Claws Mail 3.20.0git84 (GTK+ 2.24.33; x86_64-pc-linux-gnu)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 10:58:13 +0200
Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
> You know about unifdef, right :-)
I didn't know about that!
>
> $ unifdef -m -DCONFIG_SMP=y kernel/sched/*.[ch] include/linux/sched.h include/linux/sched/*.h
Cool!
Although I wish there was better documentation about it.
-- Steve
Return-Path: <linux-kernel+bounces-665580-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id EACFE41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:59:56 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 3CCA94E3C51
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 13:59:58 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id EC6AC28851B;
Wed, 28 May 2025 13:59:50 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b="a9rwiP4Y"
Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 35A4228643A;
Wed, 28 May 2025 13:59:47 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.96.170.134
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440790; cv=none; b=NAJJeQyJj3GQV2gS74A4bbJKV77RGDvXrhfoAvpSBn3pmdxJejsmi6obdVPrO3gcsJ07r3WmwQ5N7205H827nBhvfJjdhQezngaaHEWWJhfaRrOfzKVnB/ZPPlW8vdyxxo1sUUb0oOQZsl5OxiDhd5/Q8r4vIvGNniSadViIq34=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440790; c=relaxed/simple;
bh=keU5ngDbfNyJ99ZyYcjp9U+daYH5n6t4r62lhQZewAM=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=F9UnJvPxPqai2o3cztoPz2lCu5YflQE2Z66Lwb2KSLFh/fgbZRcZ+2Qkx43a9r1bsOyboUYJk6ke7TTsyznKd4MLRESqvnzfLm4U18Y3GX0/3RofaS4+3abb8zK0Kh2pZKfvQYBl97JbwaBpv9dY7S/GxWlRel+PqBqBiKZep7U=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net; spf=pass smtp.mailfrom=rjwysocki.net; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b=a9rwiP4Y; arc=none smtp.client-ip=79.96.170.134
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rjwysocki.net
Received: from kreacher.localnet (unknown [5.63.189.50])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
(No client certificate requested)
by cloudserver094114.home.pl (Postfix) with ESMTPSA id 96BD66680C5;
Wed, 28 May 2025 14:55:01 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rjwysocki.net;
s=dkim; t=1748436902;
bh=keU5ngDbfNyJ99ZyYcjp9U+daYH5n6t4r62lhQZewAM=;
h=From:Subject:Date;
b=a9rwiP4YBID5AEMl88r98X0/YUjecAMXTGehm+rI8XaSaDPHnfQct6wkChpjCUR2M
1YifvrF2Q3LcSuC5HIqDvTKY2DCp1IPDWJ5qoBN8hti6XCCZM1XTh+o3S4S1ET9/IL
TnFFTfvJG5msYWh8BUHEuQZIJ26ZmqMcpvEqaiOXuQBcffT7b/S86RFFbmizl60+RO
MnzYRJYcGRgpV/dnRppojDMibcZWpy3MvBp6JS/DRIcb/vPoVzvm52mu3jFBlFTFxe
HhGxzUwUZfj1mSd8OCF1nxt42gFsIEWuKMY/4mitvxFnsm7wrDcvZyaUwRAzv4tg1b
9spZzrow5b17w==
From: "Rafael J. Wysocki" <rjw@xxxxxxxxxxxxx>
To: x86 Maintainers <x86@xxxxxxxxxx>
Cc: LKML <linux-kernel@xxxxxxxxxxxxxxx>, Linux PM <linux-pm@xxxxxxxxxxxxxxx>,
Len Brown <lenb@xxxxxxxxxx>, Peter Zijlstra <peterz@xxxxxxxxxxxxx>,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>, Borislav Petkov <bp@xxxxxxx>,
Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
Artem Bityutskiy <artem.bityutskiy@xxxxxxxxxxxxxxx>,
"Gautham R. Shenoy" <gautham.shenoy@xxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>,
Todd Brandt <todd.e.brandt@xxxxxxxxxxxxxxx>
Subject:
[PATCH v1 2/2] x86/smp: Prefer cpuidle_play_dead() to
mwait_play_dead_cpuid_hint()
Date: Wed, 28 May 2025 14:54:49 +0200
Message-ID: <3633769.iIbC2pHGDl@xxxxxxxxxxxxx>
In-Reply-To: <2006806.PYKUYFuaPT@xxxxxxxxxxxxx>
References: <2006806.PYKUYFuaPT@xxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 7Bit
Content-Type: text/plain; charset="UTF-8"
X-CLIENT-IP: 5.63.189.50
X-CLIENT-HOSTNAME: 5.63.189.50
X-VADE-SPAMSTATE: clean
X-VADE-SPAMCAUSE: dmFkZTFxkQHn3iCFbbSyiDpq8O8fxHSz0xYZKn6328KRsDmyVOaUGJ5g9Pr88Mn+X1Ui8c/1Qb79P6Egeac0Wd4sy6JCX3KJ8P1U64eCx1OWa9IyZBsPPK141xkOOqyv/1Zw1QatQDlGB1yvkLOMXmCIAxkp70zSNBD+o+hqAg2qBFKsovAAPZZDWVM7txTozblkZF1eJ0XJ7pt6v7XqlFsO0rolzhHpavgnhWYGpyOXvsRTfKUvYlv9wsRDHePo6aQnJXczz+S8EYGfHpo5I4rhmR4dky+Ke+Gndp63BdmPoFR5Kj/OTkj1EaUzRCA+oOB4QoAjMMFv2OYrjxrYTUWJw73Tc20c4APwngYflEi8giQzRlt560/yFzju9koWkC242yDLQqC7sYVR1SeRj/Pv9uNTh+Oe9h9mxtQVLPALHvGM81Vaysotj4uNCPrBIKZKaj+LeTDWutps2VJAGLFbTexMH27DhYJ+SorOA3NUpZMbd15anfnRxafGyaX5ouSUbJenPXRNPCdULXesceieZqGBJEcqxrYGsXN4Y1gx4fuHfsY7W0mRke7t0MZl1qcpy5Dqjff3t4Pp9ajDtI9fs1J/ifowUmZ2P0NBQXP4NiKsUIzfvKMeeMQ3YBxVXxvmdWH366PtoP6liJLj/jpdwS+F94D5sbaqKUMmjsivEd2gbQ
X-DCC--Metrics: v370.home.net.pl 1024; Body=12 Fuz1=12 Fuz2=12
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: "Rafael J. Wysocki" <rafael.j.wysocki@xxxxxxxxx>
Currently, mwait_play_dead_cpuid_hint() looks up the MWAIT hint of the
deepest idle state by inspecting CPUID leaf 0x05 with the assumption
that, if the number of sub-states for a given major C-state is nonzero,
those sub-states are always represented by consecutive numbers starting
from 0. This assumption is not based on the documented platform behavior
and in fact it is not met on recent Intel platforms (eg. Sierra Forest).
For this reason, it is better to let the cpuidle driver for the given
platform put CPUs going offline into appropriate idle state and only
if that fails, fall back to mwait_play_dead_cpuid_hint(), which may
still be the next best "play dead" variant if cpuidle is not available.
For example, when "nosmt" is passed to the kernel in the command line,
SMT siblings are disabled early, before cpuidle gets ready, but they
need to be put into sufficiently deep idle states to allow the whole
processor to reach deep package idle states, like PC10, later on.
Tested-by: Todd Brandt <todd.e.brandt@xxxxxxxxxxxxxxx>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
---
arch/x86/kernel/smpboot.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -1377,9 +1377,10 @@
play_dead_common();
tboot_shutdown(TB_SHUTDOWN_WFS);
+ /* Each call in the following sequence returns only on errors. */
+ cpuidle_play_dead();
mwait_play_dead_cpuid_hint();
- if (cpuidle_play_dead())
- hlt_play_dead();
+ hlt_play_dead();
}
#else /* ... !CONFIG_HOTPLUG_CPU */
Return-Path: <linux-kernel+bounces-665581-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D4C8441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:00:06 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id A29B91BC778A
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:00:19 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 080EE288C06;
Wed, 28 May 2025 13:59:52 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b="qYmj06y/"
Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 359D220B81D;
Wed, 28 May 2025 13:59:47 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.96.170.134
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440791; cv=none; b=RvCx9Sxn0FuxKe4sHf3BbFJEbT/gOOTL+OAVuPO9+t7MFvUdh7SovhX3Z258KrgDEdcVrExf41OXf0LPFVmGJxMSNKpiT8+frtODffUVChUhC8fmnTrxxiBuQkdedTAQL/X1nsWMf2F4vH/2Hyq3pFte2ukZg8PuM6nRFRU7HP4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440791; c=relaxed/simple;
bh=GidpZsTdS1mvFVZhMXx5AjlxUimuu/0oP04bsW6NDt0=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=mhJNEsdq6cpUXXqLdqx/J/+WTaMh6l/k3dWRyB6O7dk/CCAKY0hx0THVKFaYBOoEihRtlN+ajYAtG+M3HSR3036ISOQU1DcMRVL4xGPYfxoBTwUfuHA5kVyW8XTjZHNfsxNvz7zeTXKUI+BQzKzAdG4uds6oYFd4RHUk2jOSjKI=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net; spf=pass smtp.mailfrom=rjwysocki.net; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b=qYmj06y/; arc=none smtp.client-ip=79.96.170.134
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rjwysocki.net
Received: from kreacher.localnet (unknown [5.63.189.50])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
(No client certificate requested)
by cloudserver094114.home.pl (Postfix) with ESMTPSA id 9073266808C;
Wed, 28 May 2025 14:55:02 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rjwysocki.net;
s=dkim; t=1748436903;
bh=GidpZsTdS1mvFVZhMXx5AjlxUimuu/0oP04bsW6NDt0=;
h=From:Subject:Date;
b=qYmj06y/nV3RBN8Fv+zAmh9NV3LKKLHOdDrbzBcaDhQk9MDi3ifDcpMHQf2gsJgek
va06FTPQm6czxhfAXhJ6WxME+BD34MwmG8DevcNaiMgfRZa/ezDUWxFCwGJTI/HOnj
kf0+6YiXxdlZvGeiiH7CrwKyE/O0xkEIlP1SOEf4MBI2gZjRWPmVxrbyyW9C+c9+bj
aIFguT8ukNOiietqjHyMz026EP+tod/MoqpJ5uk3eC+5LRELvPlu0hkd7xa2HWTRi2
ezbpKTmMfUk13XcC1fy4rc8f6m220KAG2RRJVZKdwDsWgyuTRg/BoxkcyaWLYkEizQ
ntoe97QkZcv0w==
From: "Rafael J. Wysocki" <rjw@xxxxxxxxxxxxx>
To: x86 Maintainers <x86@xxxxxxxxxx>
Cc: LKML <linux-kernel@xxxxxxxxxxxxxxx>, Linux PM <linux-pm@xxxxxxxxxxxxxxx>,
Len Brown <lenb@xxxxxxxxxx>, Peter Zijlstra <peterz@xxxxxxxxxxxxx>,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>, Borislav Petkov <bp@xxxxxxx>,
Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
Artem Bityutskiy <artem.bityutskiy@xxxxxxxxxxxxxxx>,
"Gautham R. Shenoy" <gautham.shenoy@xxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>,
Todd Brandt <todd.e.brandt@xxxxxxxxxxxxxxx>
Subject:
[PATCH v1 1/2] Revert "x86/smp: Eliminate mwait_play_dead_cpuid_hint()"
Date: Wed, 28 May 2025 14:53:50 +0200
Message-ID: <7811828.EvYhyI6sBW@xxxxxxxxxxxxx>
In-Reply-To: <2006806.PYKUYFuaPT@xxxxxxxxxxxxx>
References: <2006806.PYKUYFuaPT@xxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 7Bit
Content-Type: text/plain; charset="UTF-8"
X-CLIENT-IP: 5.63.189.50
X-CLIENT-HOSTNAME: 5.63.189.50
X-VADE-SPAMSTATE: clean
X-VADE-SPAMCAUSE: dmFkZTFxkQHn3iCFbbSyiDpq8O8fxHSz0xYZKn6328KRsDmyVOaUGJ5g9Pr88Mn+X1Ui8c/1Qb79P6Egeac0Wd4sy6JCX3KJ8P1U64eCx1OWa9IyZBsPPK141xkOOqyv/1Zw1QatQDlGB1yvkLOMXmCIAxkp70zSNBD+o+hqAg2qBFKsovAAPZZDWVM7txTozblkZF1eJ0XJ7pt6v7XqlFsO0rolzhHpavgnhWYGpyOXvsRTfKUvYlv9wsRDHePo6aQnJXczz+S8EYGfHpo5I4rhmR4dky+Ke+Gndp63BdmPoFR5Kj/OTkj1EaUzRCA+oOB4QoAjMMFv2OYrjxrYTUWJw73TCS0jrhzgA/flO6Xqujmn+vAEAQ+axfmVYpRJVSlP9ZXYBnFqcAdW8TsUL9ksWIhX3xI5Qyei3oWArXep7LaNMMAaiGAQsNPcOjP87pwjeZVreH9GvRVVadL1FlFGq6QbPh5OoIYwyxTOoqMUFY+GsM/USIXxn+9CsKxYs/gVczqEqmhP5FyHJMkFfdcLM1VL7rK394QhEbKO9gw5wZKwrU6KIoegU5gO0xWuDd2WrRAi0gyib3a+NPnePFw1e+mu9WLf+3uErb/F8slWWzvCdxw6R+SvdixosfwcrVPBnpeBo8pWaRJxOF5qNnjUerbLR+2lv7rHfBROzcD4hA0MtA
X-DCC--Metrics: v370.home.net.pl 1024; Body=12 Fuz1=12 Fuz2=12
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: "Rafael J. Wysocki" <rafael.j.wysocki@xxxxxxxxx>
Revert commit 96040f7273e2 ("x86/smp: Eliminate mwait_play_dead_cpuid_hint()")
because it introduced a significant power regression on systems that start
with "nosmt" in the kernel command line.
Namely, on such systems, SMT siblings permanently go offline early,
when cpuidle has not been initialized yet, so after the above commit,
hlt_play_dead() is called for them. Later on, when the processor
attempts to enter a deep package C-state, including PC10 which is
requisite for reaching minimum power in suspend-to-idle, it is not
able to do that because of the SMT siblings staying in C1 (which
they have been put into by HLT).
Fixes: 96040f7273e2 ("x86/smp: Eliminate mwait_play_dead_cpuid_hint()")
Reported-by: Todd Brandt <todd.e.brandt@xxxxxxxxxxxxxxx>
Tested-by: Todd Brandt <todd.e.brandt@xxxxxxxxxxxxxxx>
Cc: 6.15+ <stable@xxxxxxxxxxxxxxx> # 6.15+
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
---
arch/x86/kernel/smpboot.c | 54 ++++++++++++++++++++++++++++++++++++++++------
1 file changed, 47 insertions(+), 7 deletions(-)
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -1238,10 +1238,6 @@
local_irq_disable();
}
-/*
- * We need to flush the caches before going to sleep, lest we have
- * dirty data in our caches when we come back up.
- */
void __noreturn mwait_play_dead(unsigned int eax_hint)
{
struct mwait_cpu_dead *md = this_cpu_ptr(&mwait_cpu_dead);
@@ -1288,6 +1284,50 @@
}
/*
+ * We need to flush the caches before going to sleep, lest we have
+ * dirty data in our caches when we come back up.
+ */
+static inline void mwait_play_dead_cpuid_hint(void)
+{
+ unsigned int eax, ebx, ecx, edx;
+ unsigned int highest_cstate = 0;
+ unsigned int highest_subcstate = 0;
+ int i;
+
+ if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD ||
+ boot_cpu_data.x86_vendor == X86_VENDOR_HYGON)
+ return;
+ if (!this_cpu_has(X86_FEATURE_MWAIT))
+ return;
+ if (!this_cpu_has(X86_FEATURE_CLFLUSH))
+ return;
+
+ eax = CPUID_LEAF_MWAIT;
+ ecx = 0;
+ native_cpuid(&eax, &ebx, &ecx, &edx);
+
+ /*
+ * eax will be 0 if EDX enumeration is not valid.
+ * Initialized below to cstate, sub_cstate value when EDX is valid.
+ */
+ if (!(ecx & CPUID5_ECX_EXTENSIONS_SUPPORTED)) {
+ eax = 0;
+ } else {
+ edx >>= MWAIT_SUBSTATE_SIZE;
+ for (i = 0; i < 7 && edx; i++, edx >>= MWAIT_SUBSTATE_SIZE) {
+ if (edx & MWAIT_SUBSTATE_MASK) {
+ highest_cstate = i;
+ highest_subcstate = edx & MWAIT_SUBSTATE_MASK;
+ }
+ }
+ eax = (highest_cstate << MWAIT_SUBSTATE_SIZE) |
+ (highest_subcstate - 1);
+ }
+
+ mwait_play_dead(eax);
+}
+
+/*
* Kick all "offline" CPUs out of mwait on kexec(). See comment in
* mwait_play_dead().
*/
@@ -1337,9 +1377,9 @@
play_dead_common();
tboot_shutdown(TB_SHUTDOWN_WFS);
- /* Below returns only on error. */
- cpuidle_play_dead();
- hlt_play_dead();
+ mwait_play_dead_cpuid_hint();
+ if (cpuidle_play_dead())
+ hlt_play_dead();
}
#else /* ... !CONFIG_HOTPLUG_CPU */
Return-Path: <linux-kernel+bounces-665582-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 9F08041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:00:26 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id D21839E1BFF
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:00:04 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 39084288C8B;
Wed, 28 May 2025 14:00:03 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="MQWv9oF3"
Received: from mail-ej1-f68.google.com (mail-ej1-f68.google.com [209.85.218.68])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id C631D2874ED;
Wed, 28 May 2025 14:00:00 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.68
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440802; cv=none; b=Tr7pMVdOlUWsTJOINw2g2I3Xb6Tu8bLTBmCCjuY52yF9z1/TVD88EZQWru1LZlV18uRPcaDdmSmf/95EbLSwBoVAQAS5NHijvfkS3gqMNn6zrm5RHXblBKGfVhFke50ARam16XYWFKexehH1rgKbvababIzjdjPnb8luQSAkTkw=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440802; c=relaxed/simple;
bh=jDWMGCBFBAmmQhAZ09sBNpBGKcM+6Klk14eVZPogPE4=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=rq5qMXAq9feysE+ds2vx8lr60Y/29CxkDkhyOPz1AH5qGX7uCW2mIm94RnZkfwaTWmGXz69spLSQ/mdz/L5x4m0JfD7dMZHt3wPMdqPSNcfdJNOKn9ulIWWQqw/Oi+At7PMHT8eLpSa0KlXIwsxSx/01P46N4MXkNGRKMzqCqb4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=MQWv9oF3; arc=none smtp.client-ip=209.85.218.68
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-ej1-f68.google.com with SMTP id a640c23a62f3a-ad1d1f57a01so889959566b.2;
Wed, 28 May 2025 07:00:00 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748440799; x=1749045599; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=jDWMGCBFBAmmQhAZ09sBNpBGKcM+6Klk14eVZPogPE4=;
b=MQWv9oF3OJxBuPiv+p/jXrNVQOYUlf8qLxAkaD7c0wMDRcxjKQgvIaEbZ4eNjFqm64
klfIHuzviHKJDt4b1FtBI9QOFdrTzYlOJ0nPZqCZe4BrESLxKXLBuURxQrCoPc+KpnfJ
Ms+NHoiFnMRHE0Iub127vebxCMygvjJnIczwoMF3trq7Fpufe0Lm50vhV1qRCYE5em1t
5WzvIlFh483OOjyebDJ8BZhPevdnXnuGuoStL7UX4Fmv8Go+j2n932kHH6YAgu2JOpZd
5+DsJjD9whx+cRoQkRMHYxZyEaLrC8H5vHdIdRQjaL7uEHKtxqmcXpv7/sge3jz0G7bv
P/NQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748440799; x=1749045599;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=jDWMGCBFBAmmQhAZ09sBNpBGKcM+6Klk14eVZPogPE4=;
b=UtK+5PLmSGY8JJ4lFHiUNsE8es8WGIsbVwgYlk+IVy2C9Dp7KTJmm8Ximh2mrOeH7x
crCA5SaOxdVpA3Osqh02EQit1701k5WQYc+4bHuzCgvygNHn+aKJeSqEbGHkDULSG16X
G6v1UBiOV3OntT8cs8QJaeVgY1TFKeEf6aPXMLYNfO1fmkWwm4LwrXfmu52U7PncJrCa
Dd6CPUMFpFj7Ldp9VrTQa6Hrgyli2NILMKhMWJtQet7LUyVu3slLN98abmB9/jFWsezU
Xx+jzMjBMy4oTcSuMx/stbIT1aQmQPQUgrVXxBPNYbqUwSqtK/M99jMdiEBY1FUdEPqH
FCzA==
X-Forwarded-Encrypted: i=1; AJvYcCUU4fEmdhyYZcfEnVYd8+Zi0GgdQ5t31feoBs3UHY4VKk4M/GiKIT1NOkt3qPDW9MfrEWGXcKy/rkwHMj3wYw77@xxxxxxxxxxxxxxx, AJvYcCWhX3TAjau1+VynwrvhvVtrO5WfgIVOpFol6PFXNxvXlEMCnzKLcVtygLMmnJptHmbw2PXpZNU7@xxxxxxxxxxxxxxx, AJvYcCXG0EupXfXsZpqAuj4yUSaSIgfliv0rAYSozt4a8pvMoIb4CxU5TTcTmzmsDaSFAHiQB4eHCE7q3fEPHWc=@vger.kernel.org
X-Gm-Message-State: AOJu0YzFETetvyHEdtW8FG6Uo/kuGab6lleAfuVAy/aF5IHp9CVVFHDX
7Xvc9cSYhZ50LTo397cZpmJIrLr4BCMLyPW5DfJuQ9fnowq1gCwYxSbQH5uMrQc/ZoEfpFou4d0
pos+mjx0SlgMQl3kz02LuLxi85WZESro=
X-Gm-Gg: ASbGncsPZO3xiX1QP2bpI3W0oY33ybrjbieuVYI5IWKcEDPjuJEpPczroTC8aZ4yPub
FsFdub89sagKe6G4cm6kXsMGtfeErU3DuhJZ1B0LQI4mQFa5K/l2YNX9AY4qAdEjk//LJ6aRkJf
vKU+ZoQyv15nZCOqXvXfaNkrs77B2MVIVzog==
X-Google-Smtp-Source: AGHT+IH8f0JYmjfBUBPYnA648QhneJOatZxwlVfzIb3tmGjf46Ypy+jLXOvc5AiUNS+l6hFGY0ZB0Kl8A0MN+bbpDFI=
X-Received: by 2002:a17:907:3ea7:b0:ac6:f3f5:3aa5 with SMTP id
a640c23a62f3a-ad8a1f0d657mr220144066b.16.1748440798781; Wed, 28 May 2025
06:59:58 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <CAN2Y7hxscai7JuC0fPE8DZ3QOPzO_KsE_AMCuyeTYRQQW_mA2w@xxxxxxxxxxxxxx>
<aDcLIh2lPkAWOVCI@xxxxxxxxx> <CAN2Y7hzKd+VxWy56q9ad8xwCcHPy5qoEaswZapnF87YkyYMcsA@xxxxxxxxxxxxxx>
<CANn89iLG4mgzHteS7ARwafw-5KscNv7vBD3zM9J6yZwDq+RbcQ@xxxxxxxxxxxxxx> <5611b12b-d560-cbb8-1d74-d935f60244dd@xxxxxxxxxxxxxxxxx>
In-Reply-To: <5611b12b-d560-cbb8-1d74-d935f60244dd@xxxxxxxxxxxxxxxxx>
From: ying chen <yc1082463@xxxxxxxxx>
Date: Wed, 28 May 2025 21:59:47 +0800
X-Gm-Features: AX0GCFuXGt78Q0HnJTJb2d_BkBMcOhFo-eb4XfPaFy_IvoMd825HFkT-P2HgpDg
Message-ID: <CAN2Y7hxZdWLfd34LPzhUPZJ-oMksajLMVt5K8B6Gy70e9TXMpw@xxxxxxxxxxxxxx>
Subject: Re: [bug report, linux 6.15-rc4] A large number of connections in the
SYN_SENT state caused the nf_conntrack table to be full.
To: Jozsef Kadlecsik <kadlec@xxxxxxxxxxxxxxxxx>
Cc: Eric Dumazet <edumazet@xxxxxxxxxx>, Florian Westphal <fw@xxxxxxxxx>, pablo@xxxxxxxxxxxxx,
kadlec@xxxxxxxxxxxxx, davem@xxxxxxxxxxxxx, kuba@xxxxxxxxxx, pabeni@xxxxxxxxxx,
netfilter-devel@xxxxxxxxxxxxxxx, coreteam@xxxxxxxxxxxxx,
netdev@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 9:45=E2=80=AFPM Jozsef Kadlecsik
<kadlec@xxxxxxxxxxxxxxxxx> wrote:
>
> On Wed, 28 May 2025, Eric Dumazet wrote:
>
> > On Wed, May 28, 2025 at 6:26=E2=80=AFAM ying chen <yc1082463@xxxxxxxxx>=
wrote:
> >>
> >> On Wed, May 28, 2025 at 9:10=E2=80=AFPM Florian Westphal <fw@xxxxxxxxx=
> wrote:
> >>>
> >>> ying chen <yc1082463@xxxxxxxxx> wrote:
> >>>> Hello all,
> >>>>
> >>>> I encountered an "nf_conntrack: table full" warning on Linux 6.15-rc=
4.
> >>>> Running cat /proc/net/nf_conntrack showed a large number of
> >>>> connections in the SYN_SENT state.
> >>>> As is well known, if we attempt to connect to a non-existent port, t=
he
> >>>> system will respond with an RST and then delete the conntrack entry.
> >>>> However, when we frequently connect to non-existent ports, the
> >>>> conntrack entries are not deleted, eventually causing the nf_conntra=
ck
> >>>> table to fill up.
> >>>
> >>> Yes, what do you expect to happen?
> >> I understand that the conntrack entry should be deleted immediately
> >> after receiving the RST reply.
> >
> > Then it probably hints that you do not receive RST for all your SYN
> > packets.
>
> And Eric has got right: because the states are in SYN_SENT then either th=
e
> RST packets were not received or out of the window or invalid from other
> reasons.
>
> Best regards,
> Jozsef
I also suspect it's due to being "out of the window", but I'm not sure why.
Return-Path: <linux-kernel+bounces-665584-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 7C4E241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:01:06 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id BB9039E081C
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:00:42 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 47598288C1F;
Wed, 28 May 2025 14:00:28 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="RFSEQJLT"
Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id BCAF6288528
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:00:24 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440827; cv=none; b=PXsAEsEVTIBschOZsW2DO6Q9P/5JmaPgqBmRaJLu2LDtuw1Jccq+qs+WhOEINrOHUTcdKOfyyugoN27zsa4Robh4nB8qVhbVEvsbHj2cE7N+m4RiActVqHXu0oFiGf/dI0Yw3RNZ1bp7x5twsX3GUdwWRR813vLtau5AW0WhGfU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440827; c=relaxed/simple;
bh=HqmXzcz1Fhb5aWwjj60lQbn31SSuMbIoGTI7rS/zLpk=;
h=Mime-Version:Content-Type:Date:Message-Id:From:To:Cc:Subject:
References:In-Reply-To; b=iWbKi01dXZPkDlWj3C6XXNhyNkSp6a2r05vMbZG0Iy/TkeEf2ATaQQXWntS77H58IILeYUbJE6fDPWe6qsgQX8TJYlc/D9HfZL8I9hoJxhzvxNdDmZQY2zrF1VTGOJdW/DoskU1jjbE76m/6aXEWTCpsxlg2uGcm40e92RB/8PU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=RFSEQJLT; arc=none smtp.client-ip=209.85.128.45
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org
Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-450cd6b511cso1100955e9.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 07:00:24 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=linaro.org; s=google; t=1748440823; x=1749045623; darn=vger.kernel.org;
h=in-reply-to:references:subject:cc:to:from:message-id:date
:content-transfer-encoding:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=uLCejufrq+qP3M9mNyL+ruMGCziYJYfpyzwNMPCLUy4=;
b=RFSEQJLTchsvDKMOoRbUNsmbJ6wUxuxW4ZORdFRMio+qgL96Xq2QoeIHjIl9FE9pqJ
ACzfpHfFpN7SDblZtnPfJ0dy7YmaG7haut4dAd6nZdtTf6zWOpagMkdkrjRE6F1Z6w91
Mmg0jsUZ07xy3h3aUWAVl8pEVkd2CgXTqZURm/x7bfEDaxbpy5Kc6N8gq+opZVA22dAC
TWsh/8h7vpZFzdkgKr1hQ5j3q66M8H9BE7l7c/FVMbZM0HnO7vL/MLisCCTkWYnm3783
tJtVy4ERTTcD5FDOv5TfrFbR7mSIRfEwBTDXdG+h7Nna0EeksZ0493/kbQ4bDCAE6JXs
w9yA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748440823; x=1749045623;
h=in-reply-to:references:subject:cc:to:from:message-id:date
:content-transfer-encoding:mime-version:x-gm-message-state:from:to
:cc:subject:date:message-id:reply-to;
bh=uLCejufrq+qP3M9mNyL+ruMGCziYJYfpyzwNMPCLUy4=;
b=Prz3UBklgWb7cF49PkrmLRQiQEdU8hBcJOB1LQbellHcOrhT+19tJbob27uswirkl5
Ac5Mqsw3iLWCPlah5kZl1s2MrN9IQChzHU9kgQC20ojeATgZ9ES9nC+e7SvA/rBgDu70
OUWdKK3+EYitB+f6x88Ja6Y+EXXeXjvUOCiBKehZGBP7RWDWfLvaEUANXB84wWd/OyY5
TY/zZa31G1x/QJn8lfPt6kcRqDVTAwOhYTmyq2Jd68+nxs0baaXTupiXrqCrvn/kGEo+
PHcXE2+BfLhl7zC6seOqhsySW4ordInM0NHyUniXd6vqs3Ny6yrE000f4vrdXLCuo3m3
NPJA==
X-Forwarded-Encrypted: i=1; AJvYcCUlyC8BV7Qk/gYOP/e2qIhqsBZsVNQemKVxIdlXwxzrZHzWDbr5Om1T52Iv3F93HPjlXaZpofgLHCzYUr0=@vger.kernel.org
X-Gm-Message-State: AOJu0Yw+aIiDkbLVvHKjMaL2qG5C1BTWt9Tl5M+G+0I5jzMrppe7xVtU
FdcbBsxP3dIG1oYjPkrZAPhhiOjrP7plFyHELPAFt1efyQ/VQBNYIQ0geXXDn0n7jU0=
X-Gm-Gg: ASbGncsrmDJTSdpOQ6JAppfnpQirjuZsd13/7hOXV4NivzevH/JRgNdHfgcT/8KLpHU
/+c+qXjOnMJc42ji5KW10Ou0lBlBs93AQB5epkXr3f0eNDlVx6l8GGa1Vn+imkeiNqrKuPx3BqT
QmkmCFkE46WmltfYYKPL5Un3U0GFq00bhjR4mr8SKLQDyLbD63wmCtioRlPBXBZOEjfZf1qFj8I
w7S7EGb+MtYTKHSJpUFOvSt7YMIq8oSAcK3tiloII31LZwgdmxAwM+kb58YOVOJIA4/6ZiI4e1Y
a0btGNAsM6NCVVYr7rsrYfi5DIj/YUACt0Mc41YszGLAPZ3nFwQmMTFBfIGbMbZVJn4SK+METbR
Jug==
X-Google-Smtp-Source: AGHT+IG4/Cne7nqOIsE/PY37ws2Wr1tDPTEMkErYoJ1bGl8pKJEeVcseVqH5nyS1AL3VO3u2TuUQQA==
X-Received: by 2002:a05:600c:6386:b0:442:f4a3:b5f2 with SMTP id 5b1f17b1804b1-45072545b44mr22307925e9.6.1748440822669;
Wed, 28 May 2025 07:00:22 -0700 (PDT)
Received: from localhost ([2a00:2381:fd67:101:6c39:59e6:b76d:825])
by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-450064aeb6csm23449655e9.24.2025.05.28.07.00.21
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 07:00:22 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
Mime-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=UTF-8
Date: Wed, 28 May 2025 15:00:21 +0100
Message-Id: <DA7UJKPSD154.2FRUF06DRZO7K@xxxxxxxxxx>
From: "Alexey Klimov" <alexey.klimov@xxxxxxxxxx>
To: "Dmitry Baryshkov" <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
Cc: <robdclark@xxxxxxxxx>, <will@xxxxxxxxxx>, <robin.murphy@xxxxxxx>,
<linux-arm-msm@xxxxxxxxxxxxxxx>, <joro@xxxxxxxxxx>,
<iommu@xxxxxxxxxxxxxxx>, <linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>,
<linux-kernel@xxxxxxxxxxxxxxx>, <stable@xxxxxxxxxxxxxxx>,
<andersson@xxxxxxxxxx>
Subject: Re: [PATCH] iommu/arm-smmu-qcom: Add SM6115 MDSS compatible
X-Mailer: aerc 0.20.0
References: <20250528003118.214093-1-alexey.klimov@xxxxxxxxxx>
<ehriorde5zbfoo6b7rzemnzegnwqfdobzwyjra755ynk2me2g6@om6g57n26zbp>
In-Reply-To: <ehriorde5zbfoo6b7rzemnzegnwqfdobzwyjra755ynk2me2g6@om6g57n26zbp>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed May 28, 2025 at 9:52 AM BST, Dmitry Baryshkov wrote:
> On Wed, May 28, 2025 at 01:31:18AM +0100, Alexey Klimov wrote:
>> Add the SM6115 MDSS compatible to clients compatible list, as it also
>> needs that workaround.
>> Without this workaround, for example, QRB4210 RB2 which is based on
>> SM4250/SM6115 generates a lot of smmu unhandled context faults during
>> boot:
>>=20
>> arm_smmu_context_fault: 116854 callbacks suppressed
>> arm-smmu c600000.iommu: Unhandled context fault: fsr=3D0x402,
>> iova=3D0x5c0ec600, fsynr=3D0x320021, cbfrsynra=3D0x420, cb=3D5
>> arm-smmu c600000.iommu: FSR =3D 00000402 [Format=3D2 TF], SID=3D0x420
>> arm-smmu c600000.iommu: FSYNR0 =3D 00320021 [S1CBNDX=3D50 PNU PLVL=3D1]
>> arm-smmu c600000.iommu: Unhandled context fault: fsr=3D0x402,
>> iova=3D0x5c0d7800, fsynr=3D0x320021, cbfrsynra=3D0x420, cb=3D5
>> arm-smmu c600000.iommu: FSR =3D 00000402 [Format=3D2 TF], SID=3D0x420
>>=20
>> and also leads to failed initialisation of lontium lt9611uxc driver
>> and gpu afterwards:
>
> Nit: there is nothing failing the lt9611uxc on its own. binding all MDSS
> components (triggered by lt9611uxc attaching to the DSI bus) produces
> the failure.
Oh, I didn't mean to express that something failed in lt9611uxc itself, I
was just trying to list observed problems.
Apart from hdmi bridge and gpu the failed component will be soundcard drive=
r
since it depends on lt9611uxc.. So, if you have rewording in mind feel free
to suggest it.
Or maybe something like this will look better:
and also failed initialisation of lontium lt9611uxc, gpu and dpu is observe=
d:
(kernel trace as in the original email)
[..]
>
> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
>
> I'd also propose:
>
> Fixes: 3581b7062cec ("drm/msm/disp/dpu1: add support for display on SM611=
5")
>
> This way this is going to be fixed for all platforms using display on
> SM6115.
Yes. Thanks. Checkpatch suggested "Fixes" tag but it was unclear when it
started to horribly fail during boot -- sometime around 6.14 or 6.15 cycle.
Best regards,
Alexey
Return-Path: <linux-kernel+bounces-665583-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id B410541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:01:17 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 170491C003E4
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:01:28 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 1508A2882A7;
Wed, 28 May 2025 14:00:31 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Lz0nYryM"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 89ECF33086
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:00:08 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440817; cv=none; b=CVnFqfYC5zQ9QQEcQfsN5geqHMut/fvqzH94awICPFweVG54LFO0MS71X8m2NVk1D+P+hl2Eheey8fJCoJTdqH2ERrvCa7kSESs04z6ojh0uEArDL6GKtMZDSGPi0p8CNm3s2vpGe5FYg6vsomp1KGyOvMDUaf4nmzjq3zV2zhM=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440817; c=relaxed/simple;
bh=PbiZlEzWUVopMjb9ZNVupI7WuRI8dfHpcZYs/poA2Ko=;
h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=rq1FAimL8zx0YwfzS7KI9JHV0CDZgOh3NnKCMN97WnWr/evU2XHu9XNj+Rcev9bLeRXd4WzQrQ/f+NSe1r1OX7VOQpjKf4EFpCJhH8ZPB9bSYIuVZoh5cpn70X+mfBWcWCsKAYtqndAxgFL4kVp3kfeV+PNnqi0QUhTgsGz7ZmI=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Lz0nYryM; arc=none smtp.client-ip=170.10.133.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748440807;
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:
content-transfer-encoding:content-transfer-encoding;
bh=ugFzuL9L0Secq109FVV7BTO3OF/2/pc2I7bSZ2jl8gg=;
b=Lz0nYryMrC+6Jy6Urh4Rd9yCfzR2XBVLwXiDEjEZmMyEwgiKUpcjS+g3YDTlAnvMoeCRx8
U3O02cbM1SaVME0ytc6Sjk4uaw15+VWM8fjrXNDdk7qvTQTDVsPEVCjv63E8kMjBdzBLxZ
VBWah3d20fShfVCOw9lKdIIqo9T4J14=
Received: from mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com
(ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by
relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,
cipher=TLS_AES_256_GCM_SHA384) id us-mta-44-xK6IY4lsPhaWS1XxET9E6Q-1; Wed,
28 May 2025 10:00:01 -0400
X-MC-Unique: xK6IY4lsPhaWS1XxET9E6Q-1
X-Mimecast-MFC-AGG-ID: xK6IY4lsPhaWS1XxET9E6Q_1748440800
Received: from mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.15])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
(No client certificate requested)
by mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id D41E61945108;
Wed, 28 May 2025 13:59:59 +0000 (UTC)
Received: from gerbillo.redhat.com (unknown [10.45.224.128])
by mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id C8EC51956095;
Wed, 28 May 2025 13:59:55 +0000 (UTC)
From: Paolo Abeni <pabeni@xxxxxxxxxx>
To: torvalds@xxxxxxxxxxxxxxxxxxxx
Cc: kuba@xxxxxxxxxx,
davem@xxxxxxxxxxxxx,
netdev@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
bpf@xxxxxxxxxxxxxxx
Subject: [GIT PULL] Networking for v6.16
Date: Wed, 28 May 2025 15:59:41 +0200
Message-ID: <20250528135941.50128-1-pabeni@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Scanned-By: MIMEDefang 3.0 on 10.30.177.15
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Linus!
Beware, there is a semantic conflict with your tree, which will cause
build failure for CONFIG_AMD_NB enabled builds unless you also apply:
https://lore.kernel.org/linux-next/20250514152318.52714b39@xxxxxxxxxxxxxxxx/
I'm aware of the following conflicts with your tree:
drivers/net/ethernet/wangxun/txgbe/txgbe_irq.c
https://lore.kernel.org/linux-next/20250507124900.4dad50d4@xxxxxxxxxxxxxxxx/
net/unix/af_unix.c
https://lore.kernel.org/linux-next/20250526123701.01aec1c4@xxxxxxxxxxxxxxxx/
With the ftrace tree:
include/trace/events/tcp.h
https://lore.kernel.org/linux-next/20250516162301.6c5d2d3c@xxxxxxxxxxxxxxxx/
With the rdma-fixes tree:
drivers/infiniband/hw/irdma/main.c
https://lore.kernel.org/linux-next/20250513130630.280ee6c5@xxxxxxxxxxxxxxxx/
With the reset tree:
MAINTAINERS
https://lore.kernel.org/linux-next/20250506112554.3832cd40@xxxxxxxxxxxxxxxx/
The following changes since commit 5cdb2c77c4c3d36bdee83d9231649941157f8204:
Merge tag 'net-6.15-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net (2025-05-22 09:15:19 -0700)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git tags/net-next-6.16
for you to fetch changes up to f6bd8faeb113c8ab783466bc5bc1a5442ae85176:
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net (2025-05-28 10:11:15 +0200)
----------------------------------------------------------------
Networking changes for 6.16.
Core
----
- Implement the Device Memory TCP transmit path, allowing zero-copy
data transmission on top of TCP from e.g. GPU memory to the wire.
- Move all the IPv6 routing tables management outside the RTNL scope,
under its own lock and RCU. The route control path is now 3x times
faster.
- Convert queue related netlink ops to instance lock, reducing
again the scope of the RTNL lock. This improves the control plane
scalability.
- Refactor the software crc32c implementation, removing unneeded
abstraction layers and improving significantly the related
micro-benchmarks.
- Optimize the GRO engine for UDP-tunneled traffic, for a 10%
performance improvement in related stream tests.
- Cover more per-CPU storage with local nested BH locking; this is a
prep work to remove the current per-CPU lock in local_bh_disable()
on PREMPT_RT.
- Introduce and use nlmsg_payload helper, combining buffer bounds
verification with accessing payload carried by netlink messages.
Netfilter
---------
- Rewrite the procfs conntrack table implementation, improving
considerably the dump performance. A lot of user-space tools
still use this interface.
- Implement support for wildcard netdevice in netdev basechain
and flowtables.
- Integrate conntrack information into nft trace infrastructure.
- Export set count and backend name to userspace, for better
introspection.
BPF
---
- BPF qdisc support: BPF-qdisc can be implemented with BPF struct_ops
programs and can be controlled in similar way to traditional qdiscs
using the "tc qdisc" command.
- Refactor the UDP socket iterator, addressing long standing issues
WRT duplicate hits or missed sockets.
Protocols
---------
- Improve TCP receive buffer auto-tuning and increase the default
upper bound for the receive buffer; overall this improves the single
flow maximum thoughput on 200Gbs link by over 60%.
- Add AFS GSSAPI security class to AF_RXRPC; it provides transport
security for connections to the AFS fileserver and VL server.
- Improve TCP multipath routing, so that the sources address always
matches the nexthop device.
- Introduce SO_PASSRIGHTS for AF_UNIX, to allow disabling SCM_RIGHTS,
and thus preventing DoS caused by passing around problematic FDs.
- Retire DCCP socket. DCCP only receives updates for bugs, and major
distros disable it by default. Its removal allows for better
organisation of TCP fields to reduce the number of cache lines hit
in the fast path.
- Extend TCP drop-reason support to cover PAWS checks.
Driver API
----------
- Reorganize PTP ioctl flag support to require an explicit opt-in for
the drivers, avoiding the problem of drivers not rejecting new
unsupported flags.
- Converted several device drivers to timestamping APIs.
- Introduce per-PHY ethtool dump helpers, improving the support for
dump operations targeting PHYs.
Tests and tooling
-----------------
- Add support for classic netlink in user space C codegen, so that
ynl-c can now read, create and modify links, routes addresses and
qdisc layer configuration.
- Add ynl sub-types for binary attributes, allowing ynl-c to output
known struct instead of raw binary data, clarifying the classic
netlink output.
- Extend MPTCP selftests to improve the code-coverage.
- Add tests for XDP tail adjustment in AF_XDP.
New hardware / drivers
----------------------
- OpenVPN virtual driver: offload OpenVPN data channels processing
to the kernel-space, increasing the data transfer throughput WRT
the user-space implementation.
- Renesas glue driver for the gigabit ethernet RZ/V2H(P) SoC.
- Broadcom asp-v3.0 ethernet driver.
- AMD Renoir ethernet device.
- ReakTek MT9888 2.5G ethernet PHY driver.
- Aeonsemi 10G C45 PHYs driver.
Drivers
-------
- Ethernet high-speed NICs:
- nVidia/Mellanox (mlx5):
- refactor the stearing table handling to reduce significantly
the amount of memory used
- add support for complex matches in H/W flow steering
- improve flow streeing error handling
- convert to netdev instance locking
- Intel (100G, ice, igb, ixgbe, idpf):
- ice: add switchdev support for LLDP traffic over VF
- ixgbe: add firmware manipulation and regions devlink support
- igb: introduce support for frame transmission premption
- igb: adds persistent NAPI configuration
- idpf: introduce RDMA support
- idpf: add initial PTP support
- Meta (fbnic):
- extend hardware stats coverage
- add devlink dev flash support
- Broadcom (bnxt):
- add support for RX-side device memory TCP
- Wangxun (txgbe):
- implement support for udp tunnel offload
- complete PTP and SRIOV support for AML 25G/10G devices
- Ethernet NICs embedded and virtual:
- Google (gve):
- add device memory TCP TX support
- Amazon (ena):
- support persistent per-NAPI config
- Airoha:
- add H/W support for L2 traffic offload
- add per flow stats for flow offloading
- RealTek (rtl8211): add support for WoL magic packet
- Synopsys (stmmac):
- dwmac-socfpga 1000BaseX support
- add Loongson-2K3000 support
- introduce support for hardware-accelerated VLAN stripping
- Broadcom (bcmgenet):
- expose more H/W stats
- Freescale (enetc, dpaa2-eth):
- enetc: add MAC filter, VLAN filter RSS and loopback support
- dpaa2-eth: convert to H/W timestamping APIs
- vxlan: convert FDB table to rhashtable, for better scalabilty
- veth: apply qdisc backpressure on full ring to reduce TX drops
- Ethernet switches:
- Microchip (kzZ88x3): add ETS scheduler support
- Ethernet PHYs:
- RealTek (rtl8211):
- add support for WoL magic packet
- add support for PHY LEDs
- CAN:
- Adds RZ/G3E CANFD support to the rcar_canfd driver.
- Preparatory work for CAN-XL support.
- Add self-tests framework with support for CAN physical interfaces.
- WiFi:
- mac80211:
- scan improvements with multi-link operation (MLO)
- Qualcomm (ath12k):
- enable AHB support for IPQ5332
- add monitor interface support to QCN9274
- add multi-link operation support to WCN7850
- add 802.11d scan offload support to WCN7850
- monitor mode for WCN7850, better 6 GHz regulatory
- Qualcomm (ath11k):
- restore hibernation support
- MediaTek (mt76):
- WiFi-7 improvements
- implement support for mt7990
- Intel (iwlwifi):
- enhanced multi-link single-radio (EMLSR) support on 5 GHz links
- rework device configuration
- RealTek (rtw88):
- improve throughput for RTL8814AU
- RealTek (rtw89):
- add multi-link operation support
- STA/P2P concurrency improvements
- support different SAR configs by antenna
- Bluetooth:
- introduce HCI Driver protocol
- btintel_pcie: do not generate coredump for diagnostic events
- btusb: add HCI Drv commands for configuring altsetting
- btusb: add RTL8851BE device 0x0bda:0xb850
- btusb: add new VID/PID 13d3/3584 for MT7922
- btusb: add new VID/PID 13d3/3630 and 13d3/3613 for MT7925
- btnxpuart: implement host-wakeup feature
Signed-off-by: Paolo Abeni <pabeni@xxxxxxxxxx>
----------------------------------------------------------------
Aaradhana Sahu (2):
wifi: ath12k: Resolve multicast packet drop by populating key_cipher in ath12k_install_key()
wifi: ath12k: Introduce check against zero for ahvif->key_cipher in ath12k_mac_op_tx()
Aditya Kumar Singh (19):
wifi: ath12k: move firmware stats out of debugfs
wifi: ath12k: add get_txpower mac ops
wifi: ath12k: fix SLUB BUG - Object already free in ath12k_reg_free()
wifi: ath12k: add reference counting for core attachment to hardware group
wifi: ath12k: fix failed to set mhi state error during reboot with hardware grouping
wifi: ath12k: fix ATH12K_FLAG_REGISTERED flag handling
wifi: ath12k: fix firmware assert during reboot with hardware grouping
wifi: ath12k: fix ath12k_core_pre_reconfigure_recovery() with grouping
wifi: ath12k: handle ath12k_core_restart() with hardware grouping
wifi: ath12k: handle ath12k_core_reset() with hardware grouping
wifi: ath12k: reset MLO global memory during recovery
wifi: ath12k: Fix frequency range in driver
wifi: ath12k: Update frequency range if reg rules changes
wifi: mac80211: handle non-MLO mode as well in ieee80211_num_beaconing_links()
wifi: ath12k: handle scan link during vdev create
wifi: ath12k: Use scan link ID 15 for all scan operations
wifi: ath12k: fix mac pdev frequency range update
wifi: mac80211: validate SCAN_FLAG_AP in scan request during MLO
wifi: mac80211: accept probe response on link address as well
Aishwarya R (1):
wifi: ath12k: remove redundant regulatory rules intersection logic in host
Alexander Duyck (1):
net: phylink: Drop unused defines for SUPPORTED/ADVERTISED_INTERFACES
Alexey Charkov (1):
dt-bindings: net: via-rhine: Convert to YAML
Alexey Kodanev (1):
wifi: rtw88: fix the 'para' buffer size to avoid reading out of bounds
Allan Wang (2):
wifi: mt76: mt7925: add EHT preamble puncturing
wifi: mt76: mt7925: add rfkill_poll for hardware rfkill
Alok Tiwari (2):
emulex/benet: correct command version selection in be_cmd_get_stats()
Doc: networking: Fix various typos in rds.rst
Aloka Dixit (1):
wifi: ath12k: pass link_conf for tx_arvif retrieval
Alper Ak (1):
documentation: networking: devlink: Fix a typo in devlink-trap.rst
Amery Hung (16):
bpf: Prepare to reuse get_ctx_arg_idx
bpf: net_sched: Support implementation of Qdisc_ops in bpf
bpf: net_sched: Add basic bpf qdisc kfuncs
bpf: net_sched: Add a qdisc watchdog timer
bpf: net_sched: Support updating bstats
bpf: net_sched: Disable attaching bpf qdisc to non root
libbpf: Support creating and destroying qdisc
selftests/bpf: Add a basic fifo qdisc test
selftests/bpf: Add a bpf fq qdisc to selftest
selftests/bpf: Test attaching bpf qdisc to mq and non root
bpf: net_sched: Fix using bpf qdisc as default qdisc
bpf: net_sched: Fix bpf qdisc init prologue when set as default qdisc
selftests/bpf: Test setting and creating bpf qdisc as default qdisc
bpf: net_sched: Make some Qdisc_ops ops mandatory
selftests/bpf: Test attaching a bpf qdisc with incomplete operators
selftests/bpf: Cleanup bpf qdisc selftests
Amit Cohen (2):
net: bridge: Prevent unicast ARP/NS packets from being suppressed by bridge
selftests: test_bridge_neigh_suppress: Test unicast ARP/NS with suppression
Andrea Mayer (1):
ipv6: sr: switch to GFP_ATOMIC flag to allocate memory during seg6local LWT setup
Andrii Staikov (1):
ixgbe: add support for FW rollback mode
Andy Shevchenko (1):
net: phy: Refactor fwnode_get_phy_node()
Anjaneyulu (1):
wifi: iwlwifi: parse active and 20 MHz AP NVM channel flag
Antonio Quartulli (34):
batman-adv: no need to start/stop queue on mesh-iface
net: introduce OpenVPN Data Channel Offload (ovpn)
ovpn: add basic netlink support
ovpn: add basic interface creation/destruction/management routines
ovpn: keep carrier always on for MP interfaces
ovpn: introduce the ovpn_peer object
ovpn: introduce the ovpn_socket object
ovpn: implement basic TX path (UDP)
ovpn: implement basic RX path (UDP)
ovpn: implement packet processing
ovpn: store tunnel and transport statistics
ovpn: implement TCP transport
skb: implement skb_send_sock_locked_with_flags()
ovpn: add support for MSG_NOSIGNAL in tcp_sendmsg
ovpn: implement multi-peer support
ovpn: implement peer lookup logic
ovpn: implement keepalive mechanism
ovpn: add support for updating local or remote UDP endpoint
ovpn: implement peer add/get/dump/delete via netlink
ovpn: implement key add/get/del/swap via netlink
ovpn: kill key and notify userspace in case of IV exhaustion
ovpn: notify userspace when a peer is deleted
ovpn: add basic ethtool support
testing/selftests: add test tool and scripts for ovpn module
MAINTAINERS: add Sabrina as official reviewer for ovpn
MAINTAINERS: update git URL for ovpn
ovpn: set skb->ignore_df = 1 before sending IPv6 packets out
ovpn: don't drop skb's dst when xmitting packet
selftest/net/ovpn: fix crash in case of getaddrinfo() failure
ovpn: fix ndo_start_xmit return value on error
selftest/net/ovpn: extend coverage with more test cases
ovpn: drop useless reg_state check in keepalive worker
ovpn: improve 'no route to host' debug message
ovpn: fix check for skb_to_sgvec_nomark() return value
Arend van Spriel (3):
wifi: brcmfmac: support per-vendor cfg80211 callbacks and firmware events
wifi: brcmfmac: make per-vendor event map const
wifi: brcmfmac: cyw: support external SAE authentication in station mode
Arnd Bergmann (2):
bnxt_en: hide CONFIG_DETECT_HUNG_TASK specific code
mdio: fix CONFIG_MDIO_DEVRES selects
Aryan Srivastava (1):
net: phy: aquantia: fix commenting format
Avraham Stern (4):
wifi: iwlwifi: mld: start AP with the correct bandwidth
wifi: iwlwifi: mld: force the responder to use the full bandwidth
wifi: iwlwifi: mld: add debugfs for using ptp clock time for monitor interface
wifi: iwlwifi: add range response version 10 support
Balamurugan Mahalingam (1):
wifi: ath12k: Add support for link specific datapath stats
Balamurugan S (7):
wifi: ath12k: fix incorrect CE addresses
wifi: ath12k: add ath12k_hw_params for IPQ5332
wifi: ath12k: avoid m3 firmware download in AHB device IPQ5332
wifi: ath12k: Add hw_params to remap CE register space for IPQ5332
wifi: ath12k: add AHB driver support for IPQ5332
wifi: ath12k: enable ath12k AHB support
wifi: ath12k: Add support to clear qdesc array in REO cache
Baochen Qiang (34):
wifi: ath12k: don't put ieee80211_chanctx_conf struct in ath12k_link_vif
wifi: ath11k: determine PM policy based on machine model
wifi: ath11k: introduce ath11k_core_continue_suspend_resume()
wifi: ath11k: refactor ath11k_core_suspend/_resume()
wifi: ath11k: support non-WoWLAN mode suspend as well
wifi: ath11k: choose default PM policy for hibernation
Reapply "wifi: ath11k: restore country code during resume"
wifi: ath12k: introduce ath12k_fw_feature_supported()
wifi: ath12k: use fw_features only when it is valid
wifi: ath12k: support MLO as well if single_chip_mlo_support flag is set
wifi: ath12k: identify assoc link vif in station mode
wifi: ath12k: make assoc link associate first
wifi: ath12k: group REO queue buffer parameters together
wifi: ath12k: alloc REO queue per station
wifi: ath12k: don't skip non-primary links for WCN7850
wifi: ath12k: support 2 channels for single pdev device
wifi: ath12k: fix a possible dead lock caused by ab->base_lock
wifi: ath12k: refactor ath12k_reg_chan_list_event()
wifi: ath12k: refactor ath12k_reg_build_regd()
wifi: ath12k: add support to select 6 GHz regulatory type
wifi: ath12k: move reg info handling outside
wifi: ath12k: store reg info for later use
wifi: ath12k: determine interface mode in _op_add_interface()
wifi: ath12k: update regulatory rules when interface added
wifi: ath12k: update regulatory rules when connection established
wifi: ath12k: save power spectral density(PSD) of regulatory rule
wifi: ath12k: add parse of transmit power envelope element
wifi: ath12k: save max transmit power in vdev start response event from firmware
wifi: ath12k: fill parameters for vdev set TPC power WMI command
wifi: ath12k: add handler for WMI_VDEV_SET_TPC_POWER_CMDID
wifi: ath12k: use WMI_VDEV_SET_TPC_POWER_CMDID when EXT_TPC_REG_SUPPORT for 6 GHz
wifi: ath12k: fix regdomain update failure after 11D scan completes
wifi: ath12k: fix regdomain update failure when adding interface
wifi: ath12k: fix regdomain update failure when connection establishes
Baris Can Goral (1):
replace strncpy with strscpy_pad
Bartosz Golaszewski (1):
bcma: use new GPIO line value setter callbacks
Benjamin Berg (5):
wifi: mac80211: do not offer a mesh path if forwarding is disabled
wifi: iwlwifi: fix thermal code compilation with -Werror=cast-qual
wifi: iwlwifi: mvm: use a radio/system specific power budget
wifi: iwlwifi: mld: use a radio/system specific power budget
wifi: iwlwifi: mld: call thermal exit without wiphy lock held
Benjamin Lin (1):
wifi: mt76: mt7996: drop fragments with multicast or broadcast RA
Bert Karwatzki (1):
wifi: check if socket flags are valid
Bhaskar Chowdhury (1):
wifi: iwlwifi: fw: api: Absolute rudimentary typo fixes in the file power.h
Biju Das (19):
dt-bindings: can: renesas,rcar-canfd: Simplify the conditional schema
dt-bindings: can: renesas,rcar-canfd: Document RZ/G3E support
can: rcar_canfd: Use of_get_available_child_by_name()
can: rcar_canfd: Drop RCANFD_GAFLCFG_GETRNC macro
can: rcar_canfd: Update RCANFD_GERFL_ERR macro
can: rcar_canfd: Drop the mask operation in RCANFD_GAFLCFG_SETRNC macro
can: rcar_canfd: Add rcar_canfd_setrnc()
can: rcar_canfd: Update RCANFD_GAFLCFG macro
can: rcar_canfd: Add rnc_field_width variable to struct rcar_canfd_hw_info
can: rcar_canfd: Add max_aflpn variable to struct rcar_canfd_hw_info
can: rcar_canfd: Add max_cftml variable to struct rcar_canfd_hw_info
can: rcar_canfd: Add {nom,data}_bittiming variables to struct rcar_canfd_hw_info
can: rcar_canfd: Add ch_interface_mode variable to struct rcar_canfd_hw_info
can: rcar_canfd: Add shared_can_regs variable to struct rcar_canfd_hw_info
can: rcar_canfd: Add struct rcanfd_regs variable to struct rcar_canfd_hw_info
can: rcar_canfd: Add sh variable to struct rcar_canfd_hw_info
can: rcar_canfd: Add external_clk variable to struct rcar_canfd_hw_info
can: rcar_canfd: Enhance multi_channel_irqs handling
can: rcar_canfd: Add RZ/G3E support
Bitterblue Smith (10):
wifi: rtw88: usb: Enable switching the RTL8814AU to USB 3
wifi: rtw88: usb: Enable RX aggregation for RTL8814AU
wifi: rtw88: Set AMPDU factor to hardware for RTL8814A
wifi: rtw88: Don't set SUPPORTS_AMSDU_IN_AMPDU for RTL8814AU
wifi: rtw88: Fix the module names printed in dmesg
wifi: rtw88: Fix RX aggregation settings for RTL8723DS
wifi: rtw88: Handle RTL8723D(S) with blank efuse
wifi: rtw88: usb: Reduce control message timeout to 500 ms
wifi: rtw88: usb: Upload the firmware in bigger chunks
wifi: rtw88: Fix the random "error beacon valid" messages for USB
Bo-Cun Chen (1):
net: ethernet: mtk_eth_soc: convert cap_bit in mtk_eth_muxc struct to u64
Boon Khai Ng (3):
net: stmmac: Refactor VLAN implementation
net: stmmac: stmmac_vlan: rename VLAN functions and symbol to generic symbol.
net: stmmac: dwxgmac2: Add support for HW-accelerated VLAN stripping
Breno Leitao (23):
net: pass const to msg_data_left()
trace: tcp: Add tracepoint for tcp_sendmsg_locked()
netlink: Introduce nlmsg_payload helper
neighbour: Use nlmsg_payload in neightbl_valid_dump_info
neighbour: Use nlmsg_payload in neigh_valid_get_req
rtnetlink: Use nlmsg_payload in valid_fdb_dump_strict
mpls: Use nlmsg_payload in mpls_valid_fib_dump_req
ipv6: Use nlmsg_payload in inet6_valid_dump_ifaddr_req
ipv6: Use nlmsg_payload in inet6_rtm_valid_getaddr_req
mpls: Use nlmsg_payload in mpls_valid_getroute_req
net: fib_rules: Use nlmsg_payload in fib_valid_dumprule_req
net: fib_rules: Use nlmsg_payload in fib_{new,del}rule()
ipv6: Use nlmsg_payload in addrlabel file
ipv6: Use nlmsg_payload in addrconf file
ipv6: Use nlmsg_payload in route file
ipv4: Use nlmsg_payload in devinet file
ipv4: Use nlmsg_payload in fib_frontend file
ipv4: Use nlmsg_payload in route file
ipv4: Use nlmsg_payload in ipmr file
vxlan: Use nlmsg_payload in vxlan_vnifilter_dump
trace: tcp: Add const qualifier to skb parameter in tcp_probe event
net: Use nlmsg_payload in neighbour file
net: Use nlmsg_payload in rtnetlink file
Bui Quang Minh (7):
selftests: net: move xdp_helper to net/lib
selftests: net: add flag to force zerocopy mode in xdp_helper
selftests: net: retry when bind returns EBUSY in xdp_helper
selftests: net: add a virtio_net deadlock selftest
xsk: respect the offsets when copying frags
xsk: convert xdp_copy_frags_from_zc() to use page_pool_dev_alloc()
xsk: add missing virtual address conversion for page
Carolina Jubran (1):
net/mlx5e: Reuse per-RQ XDP buffer to avoid stack zeroing overhead
Chandrashekar Devegowda (1):
Bluetooth: btintel_pcie: Dump debug registers on error
Charles Han (1):
wifi: mt76: mt7996: Add NULL check in mt7996_thermal_init
Chen Linxuan (1):
docs: tproxy: fix formatting for nft code block
Chen Ni (5):
wifi: rtw88: sdio: Remove redundant 'flush_workqueue()' calls
wifi: rtw88: usb: Remove redundant 'flush_workqueue()' calls
net/mlx5: Use to_delayed_work()
net: prestera: Use to_delayed_work()
Bluetooth: hci_uart: Remove unnecessary NULL check before release_firmware()
Chiachang Wang (2):
xfrm: Migrate offload configuration
xfrm: Refactor migration setup during the cloning process
Chin-Yen Lee (1):
wifi: rtw89: fix firmware scan delay unit for WiFi 6 chips
Chris Packham (1):
net: mdio: Add RTL9300 MDIO driver
Christian Lamparter (1):
wifi: p54: prevent buffer-overflow in p54_rx_eeprom_readback()
Christian Marangi (18):
net: phy: mediatek: permit to compile test GE SOC PHY driver
net: phy: mediatek: add Airoha PHY ID to SoC driver
net: dsa: mt7530: generalize read port stats logic
net: dsa: mt7530: move pkt size and rx err MIB counter to rmon stats API
net: dsa: mt7530: move pause MIB counter to eth_ctrl stats API
net: dsa: mt7530: move pkt stats and err MIB counter to eth_mac stats API
net: dsa: mt7530: move remaining MIB counter to define
net: dsa: mt7530: implement .get_stats64
net: phy: mediatek: init val in .phy_led_polarity_set for AN7581
net: phy: pass PHY driver to .match_phy_device OP
net: phy: bcm87xx: simplify .match_phy_device OP
net: phy: nxp-c45-tja11xx: simplify .match_phy_device OP
net: phy: introduce genphy_match_phy_device()
net: phy: Add support for Aeonsemi AS21xxx PHYs
dt-bindings: net: Document support for Aeonsemi PHYs
dt-bindings: net: dsa: mediatek,mt7530: Add airoha,an7583-switch
net: dsa: mt7530: Add AN7583 support
net: phy: mediatek: Add Airoha AN7583 PHY support
Christoph Hellwig (1):
sctp: mark sctp_do_peeloff static
Christophe JAILLET (5):
wifi: ath10k: Constify structures in hw.c
wifi: mt76: Remove an unneeded local variable in mt76x02_dma_init()
net: airoha: Fix an error handling path in airoha_alloc_gdm_port()
mlxsw: core_thermal: Constify struct thermal_zone_device_ops
cxgb4: Constify struct thermal_zone_device_ops
ChunHao Lin (2):
r8169: add support for RTL8127A
net: phy: realtek: add RTL8127-internal PHY
Colin Ian King (6):
ice: make const read-only array dflt_rules static
net: axienet: Fix spelling mistake "archecture" -> "architecture"
net/mlx5: Fix spelling mistakes in mlx5_core_dbg message and comments
net: dsa: rzn1_a5psw: Make the read-only array offsets static const
net: ip_gre: Fix spelling mistake "demultiplexor" -> "demultiplexer"
wifi: ath10k: Fix spelling mistake "comple" -> "complete"
Cosmin Ratiu (11):
net/mlx5: Avoid using xso.real_dev unnecessarily
xfrm: Use xdo.dev instead of xdo.real_dev
xfrm: Remove unneeded device check from validate_xmit_xfrm
xfrm: Add explicit dev to .xdo_dev_state_{add,delete,free}
bonding: Mark active offloaded xfrm_states
bonding: Fix multiple long standing offload races
IB/IPoIB: Enqueue separate work_structs for each flushed interface
IB/IPoIB: Replace vlan_rwsem with the netdev instance lock
IB/IPoIB: Allow using netdevs that require the instance lock
net/mlx5e: Don't drop RTNL during firmware flash
net/mlx5e: Convert mlx5 netdevs to instance locking
Dan Carpenter (7):
wifi: ath12k: Fix a couple NULL vs IS_ERR() bugs
wifi: ath12k: Fix buffer overflow in debugfs
rxrpc: rxgk: Set error code in rxgk_yfs_decode_ticket()
rxrpc: rxgk: Fix some reference count leaks
wifi: mt76: mt7925: Fix logical vs bitwise typo
wifi: mt76: mt7996: remove duplicate check in mt7996_mcu_sta_mld_setup_tlv()
net/mlx5: HWS, Fix an error code in mlx5hws_bwc_rule_create_complex()
Daniel Braunwarth (1):
net: phy: realtek: Add support for WOL magic packet on RTL8211F
Daniel Gabay (1):
wifi: iwlwifi: mld: add monitor internal station
Daniel Golle (1):
net: ethernet: mtk_eth_soc: add support for MT7988 internal 2.5G PHY
Dave Ertman (4):
iidc/ice/irdma: Rename IDC header file
iidc/ice/irdma: Rename to iidc_* convention
iidc/ice/irdma: Break iidc.h into two headers
iidc/ice/irdma: Update IDC to support multiple consumers
Dave Marquardt (4):
net: ibmveth: Indented struct ibmveth_adapter correctly
net: ibmveth: Reset the adapter when unexpected states are detected
net: ibmveth: added KUnit tests for some buffer pool functions
net: ibmveth: Refactored veth_pool_store for better maintainability
David Heidelberg (2):
dt-bindings: net: Add generic wireless controller
dt-bindings: wireless: qcom,wcnss: Use wireless-controller.yaml
David Howells (15):
rxrpc: kdoc: Update function descriptions and add link from rxrpc.rst
rxrpc: Pull out certain app callback funcs into an ops table
rxrpc: Remove some socket lock acquire/release annotations
rxrpc: Allow CHALLENGEs to the passed to the app for a RESPONSE
rxrpc: Add the security index for yfs-rxgk
rxrpc: Add YFS RxGK (GSSAPI) security class
rxrpc: rxgk: Provide infrastructure and key derivation
rxrpc: rxgk: Implement the yfs-rxgk security class (GSSAPI)
rxrpc: rxgk: Implement connection rekeying
rxrpc: Allow the app to store private data on peer structs
rxrpc: Display security params in the afs_cb_call tracepoint
afs: Use rxgk RESPONSE to pass token for callback channel
rxrpc: Add more CHALLENGE/RESPONSE packet tracing
rxrpc: rxperf: Add test RxGK server keys
crypto/krb5: Fix change to use SG miter to use offset
David S. Miller (5):
Merge branch 'bridge-mc-per-vlan-qquery'
Merge branch 'pds_core-cleanups'
Merge branch 'lan78xx-phylink-prep'
Merge tag 'ovpn-net-next-20250515' of https://github.com/OpenVPN/ovpn-net-next
Merge branch 'so_passrights'
David Wei (6):
io_uring/zcrx: selftests: switch to using defer() for cleanup
io_uring/zcrx: selftests: set hds_thresh to 0
io_uring/zcrx: selftests: add test case for rss ctx
io_uring/zcrx: selftests: use rand_port()
io_uring/zcrx: selftests: parse json from ethtool -g
io_uring/zcrx: selftests: fix setting ntuple rule into rss
Dian-Syuan Yang (1):
wifi: rtw89: leave idle mode when setting WEP encryption for AP mode
Dimitri Fedrau (5):
dt-bindings: net: ethernet-phy: add property mac-termination-ohms
dt-bindings: net: dp83822: add constraints for mac-termination-ohms
net: phy: Add helper for getting MAC termination resistance
net: phy: dp83822: Add support for changing the MAC termination
net: phy: marvell-88q2xxx: Enable temperature measurement in probe again
Dinesh Karthikeyan (1):
wifi: ath12k: Add support to simulate firmware crash
Dmitry Antipov (3):
wifi: rtw88: do not ignore hardware read error during DPK
wifi: rt2x00: remove weird self-assignment in rt2800_loft_search()
Bluetooth: MGMT: iterate over mesh commands in mgmt_mesh_foreach()
Donald Hunter (2):
tools: ynl: handle broken pipe gracefully in CLI
tools: ynl: parse extack for sub-messages
Dr. David Alan Gilbert (13):
qed: Remove unused qed_memset_*ctx functions
qed: Remove unused qed_calc_*_ctx_validation functions
qed: Remove unused qed_ptt_invalidate
qed: Remove unused qed_print_mcp_trace_*
qed: Remove unused qed_db_recovery_dp
net: 802: Remove unused p8022 code
octeontx2-af: Remove unused rvu_npc_enable_bcast_entry
rxrpc: Remove deadcode
wifi: rtlwifi: Remove unused rtl_usb_{resume|suspend}
wifi: rtlwifi: Remove uncalled stub rtl*_phy_ap_calibrate
wifi: rtlwifi: Remove unused rtl_bb_delay()
strparser: Remove unused __strp_unpause
sctp: Remove unused sctp_assoc_del_peer and sctp_chunk_iif
Easwar Hariharan (1):
netfilter: xt_IDLETIMER: convert timeouts to secs_to_jiffies()
Edward Adam Davis (1):
wifi: mac80211_hwsim: Prevent tsf from setting if beacon is disabled
Eelco Chaudron (1):
openvswitch: Stricter validation for the userspace action
Emmanuel Grumbach (7):
wifi: iwlwifi: mld: remove stored_beacon support
wifi: iwlwifi: update the PHY_CONTEXT_CMD API
wifi: iwlwifi: pcie: add support for the reset handshake in MSI
wifi: iwlwifi: add support for ALIVE v8
wifi: iwlwifi: mld: support for COMPRESSED_BA_RES_API_S_VER_7
wifi: iwlwifi: add support PE RF
wifi: iwlwifi: drop whtc RF
En-Wei Wu (1):
Bluetooth: btusb: use skb_pull to avoid unsafe access in QCA dump handling
Eric Biggers (13):
r8152: use SHA-256 library API instead of crypto_shash API
net/tg3: use crc32() instead of hand-rolled equivalent
net: apple: bmac: use crc32() instead of hand-rolled equivalent
net: introduce CONFIG_NET_CRC32C
net: add skb_crc32c()
net: use skb_crc32c() in skb_crc32c_csum_help()
RDMA/siw: use skb_crc32c() instead of __skb_checksum()
sctp: use skb_crc32c() instead of __skb_checksum()
net: fold __skb_checksum() into skb_checksum()
lib/crc32: remove unused support for CRC32C combination
net: add skb_copy_and_crc32c_datagram_iter()
nvme-tcp: use crc32c() and skb_copy_and_crc32c_datagram_iter()
net: remove skb_copy_and_hash_datagram_iter()
Eric Dumazet (18):
net: rps: change skb_flow_limit() hash function
net: rps: annotate data-races around (struct sd_flow_limit)->count
net: add data-race annotations in softnet_seq_show()
net: rps: remove kfree_rcu_mightsleep() use
net: remove cpu stall in txq_trans_update()
tcp: add tcp_rcvbuf_grow() tracepoint
tcp: fix sk_rcvbuf overshoot
tcp: adjust rcvbuf in presence of reorders
tcp: add receive queue awareness in tcp_rcv_space_adjust()
tcp: remove zero TCP TS samples for autotuning
tcp: fix initial tp->rcvq_space.space value for passive TS enabled flows
tcp: always seek for minimal rtt in tcp_rcv_rtt_update()
tcp: skip big rtt sample if receive queue is not empty
tcp: increase tcp_limit_output_bytes default value to 4MB
tcp: always use tcp_limit_output_bytes limitation
tcp: increase tcp_rmem[2] to 32 MB
net: rfs: add sock_rps_delete_flow() helper
net: add debug checks in ____napi_schedule() and napi_poll()
Faicker Mo (1):
net: openvswitch: Fix the dead loop of MPLS parse
Faizal Rahim (13):
net: stmmac: move frag_size handling out of spin_lock
net: ethtool: mm: reset verification status when link is down
igc: rename xdp_get_tx_ring() for non-xdp usage
igc: rename I225_RXPBSIZE_DEFAULT and I225_TXPBSIZE_DEFAULT
igc: use FIELD_PREP and GENMASK for existing TX packet buffer size
igc: optimize TX packet buffer utilization for TSN mode
igc: use FIELD_PREP and GENMASK for existing RX packet buffer size
igc: set the RX packet buffer size for TSN mode
igc: add support for frame preemption verification
igc: add support to set tx-min-frag-size
igc: block setting preemptible traffic class in taprio
igc: add support to get MAC Merge data via ethtool
igc: add support to get frame preemption statistics via ethtool
Fan Gong (1):
hinic3: module initialization and tx/rx logic
Felix Maurer (1):
selftests: can: Import tst-filter from can-tests
Feng Jiang (1):
wifi: mt76: scan: Fix 'mlink' dereferenced before IS_ERR_OR_NULL check
Feng Yang (1):
selftests/bpf: Fix compilation errors
Fernando Fernandez Mancera (2):
net: hsr: sync hw addr of slave2 according to slave1 hw addr on PRP
netfilter: nft_tunnel: fix geneve_opt dump
Florian Westphal (15):
netfilter: nf_tables: export set count and backend name to userspace
selftests: netfilter: add conntrack stress test
netfilter: nf_conntrack: speed up reads from nf_conntrack proc file
selftests: netfilter: nft_fib.sh: check lo packets bypass fib lookup
selftests: netfilter: fix conntrack stress test failures on debug kernels
selftests: netfilter: nft_concat_range.sh: add coverage for 4bit group representation
netfilter: xtables: support arpt_mark and ipv6 optstrip for iptables-nft only builds
selftests: netfilter: nft_fib.sh: add 'type' mode tests
selftests: netfilter: move fib vrf test to nft_fib.sh
netfilter: nf_tables: nft_fib_ipv6: fix VRF ipv4/ipv6 result discrepancy
netfilter: nf_tables: nft_fib: consistent l3mdev handling
selftests: netfilter: nft_fib.sh: add type and oif tests with and without VRFs
netfilter: conntrack: make nf_conntrack_id callable without a module dependency
netfilter: nf_tables: add packets conntrack state to debug trace info
selftests: netfilter: nft_queue.sh: include file transfer duration in log message
Frank Wunderlich (1):
net: phy: mediatek: do not require syscon compatible for pio property
Gal Pressman (2):
selftests: drv-net: rss_input_xfrm: Check test prerequisites before running
ethtool: Block setting of symmetric RSS when non-symmetric rx-flow-hash is requested
Gang Yan (5):
selftests: mptcp: add struct params in mptcp_diag
selftests: mptcp: refactor send_query parameters for code clarity
selftests: mptcp: refactor NLMSG handling with 'proto'
selftests: mptcp: add helpers to get subflow_info
selftests: mptcp: add chk_sublfow in diag.sh
Geert Uytterhoeven (1):
dt-bindings: net: snps,dwmac: Align mdio node in example with bindings
Geliang Tang (3):
mptcp: sched: split validation part
selftests: mptcp: diag: drop nlh parameter of recv_nlmsg
selftests: mptcp: sockopt: use IPPROTO_MPTCP for getaddrinfo
Greg Kroah-Hartman (1):
net: phy: fix up const issues in to_mdio_device() and to_phy_device()
Gur Stavi (1):
queue_api: reduce risk of name collision over txq
Gustavo A. R. Silva (2):
wifi: mac80211: Avoid -Wflex-array-member-not-at-end warnings
wifi: iwlwifi: mvm: Avoid -Wflex-array-member-not-at-end warning
Haiyang Zhang (1):
net: mana: Add support for Multi Vports on Bare metal
Haiyue Wang (2):
selftests: iou-zcrx: Get the page size at runtime
selftests: iou-zcrx: Clean up build warnings for error format
Hangbin Liu (8):
bonding: assign random address if device address is same as bond
selftests: net: disable rp_filter after namespace initialization
selftests: net: remove redundant rp_filter configuration
selftests: net: use setup_ns for bareudp testing
selftests: net: use setup_ns for SRv6 tests and remove rp_filter configuration
selftests: netfilter: remove rp_filter configuration
selftests: mptcp: remove rp_filter configuration
selftests: net: move wait_local_port_listen to lib.sh
Hari Chandrakanthan (1):
wifi: ath12k: fix link valid field initialization in the monitor Rx
Hari Kalavakunta (1):
net: ncsi: Fix GCPS 64-bit member variables
Hariprasad Kelam (4):
octeontx2-pf: AF_XDP: code clean up
octeontx2-af: NPC: Clear Unicast rule on nixlf detach
octeontx2-pf: QOS: Perform cache sync on send queue teardown
octeontx2-pf: QOS: Refactor TC_HTB_LEAF_DEL_LAST callback
Heiner Kallweit (19):
r8169: add helper rtl_csi_mod for accessing extended config space
r8169: add helper rtl8125_phy_param
net: phy: remove device_phy_find_device
net: phy: remove redundant dependency on NETDEVICES for PHYLINK and PHYLIB
r8169: refactor chip version detection
r8169: add RTL_GIGA_MAC_VER_LAST to facilitate adding support for new chip versions
r8169: use pci_prepare_to_sleep in rtl_shutdown
net: phy: remove function stubs
r8169: merge chip versions 70 and 71 (RTL8126A)
r8169: merge chip versions 64 and 65 (RTL8125D)
r8169: merge chip versions 52 and 53 (RTL8117)
net: phy: factor out provider part from mdio_bus.c
net: phy: remove stub for mdiobus_register_board_info
net: phy: remove Kconfig symbol MDIO_DEVRES
net: phy: fixed_phy: remove fixed_phy_register_with_gpiod
net: phy: make mdio consumer / device layer a separate module
net: phy: fixed_phy: remove irq argument from fixed_phy_add
net: phy: fixed_phy: remove irq argument from fixed_phy_register
net: phy: fixed_phy: constify status argument where possible
Henk Vergonet (1):
wifi: mt76: mt76x2: Add support for LiteOn WN4516R,WN4519R
Henry Martin (2):
wifi: mt76: mt7996: Fix null-ptr-deref in mt7996_mmio_wed_init()
wifi: mt76: mt7915: Fix null-ptr-deref in mt7915_mmio_wed_init()
Horatiu Vultur (3):
net: lan966x: Fix 1-step timestamping over ipv4 or ipv6
net: phy: mscc: Fix memory leak when using one step timestamping
net: phy: mscc: Stop clearing the the UDPv4 checksum for L2 frames
Howard Hsu (2):
wifi: mt76: remove capability of partial bandwidth UL MU-MIMO
wifi: mt76: mt7996: fix beamformee SS field
Hsin-chen Chuang (4):
Bluetooth: Introduce HCI Driver protocol
Bluetooth: btusb: Add HCI Drv commands for configuring altsetting
Revert "Bluetooth: btusb: Configure altsetting for HCI_USER_CHANNEL"
Revert "Bluetooth: btusb: add sysfs attribute to control USB alt setting"
Huacai Chen (3):
net: stmmac: dwmac-loongson: Move queue number init to common function
net: stmmac: dwmac-loongson: Add new multi-chan IP core support
net: stmmac: dwmac-loongson: Add new GMAC's PCI device ID support
Huajian Yang (1):
netfilter: bridge: Move specific fragmented packet to slow_path instead of dropping it
Ido Schimmel (16):
vxlan: Add RCU read-side critical sections in the Tx path
vxlan: Simplify creation of default FDB entry
vxlan: Insert FDB into hash table in vxlan_fdb_create()
vxlan: Unsplit default FDB entry creation and notification
vxlan: Relocate assignment of default remote device
vxlan: Use a single lock to protect the FDB table
vxlan: Add a linked list of FDB entries
vxlan: Use linked list to traverse FDB entries
vxlan: Convert FDB garbage collection to RCU
vxlan: Convert FDB flushing to RCU
vxlan: Rename FDB Tx lookup function
vxlan: Create wrappers for FDB lookup
vxlan: Do not treat dst cache initialization errors as fatal
vxlan: Introduce FDB key structure
vxlan: Convert FDB table to rhashtable
ipv4: Honor "ignore_routes_with_linkdown" sysctl in nexthop selection
Ilan Peer (1):
wifi: iwlfiwi: mvm: Fix the rate reporting
Jacob Keller (2):
net: ptp: introduce .supported_extts_flags to ptp_clock_info
net: ptp: introduce .supported_perout_flags to ptp_clock_info
Jakub Kicinski (189):
Merge branch 'rps-misc-changes'
Merge branch 'udp_tunnel-gro-optimizations'
net: avoid potential race between netdev_get_by_index_lock() and netns switch
net: designate XSK pool pointers in queues as "ops protected"
netdev: add "ops compat locking" helpers
netdev: don't hold rtnl_lock over nl queue info get when possible
xdp: double protect netdev->xdp_flags with netdev->lock
netdev: depend on netdev->lock for xdp features
docs: netdev: break down the instance locking info per ops struct
netdev: depend on netdev->lock for qstats in ops locked drivers
Merge branch 'net-depend-on-instance-lock-for-queue-related-netlink-ops'
Merge branch 'bridge-prevent-unicast-arp-ns-packets-from-being-suppressed-by-bridge'
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Merge branch 'tcp-add-a-new-tw_paws-drop-reason'
Merge branch 'net-stmmac-stmmac_pltfr_find_clk'
Merge branch 'trace-add-tracepoint-for-tcp_sendmsg_locked'
netlink: specs: rename rtnetlink specs in accordance with family name
netlink: specs: rt-route: specify fixed-header at operations level
netlink: specs: rt-addr: remove the fixed members from attrs
netlink: specs: rt-route: remove the fixed members from attrs
netlink: specs: rt-addr: add C naming info
netlink: specs: rt-route: add C naming info
tools: ynl: support creating non-genl sockets
tools: ynl-gen: don't consider requests with fixed hdr empty
tools: ynl: don't use genlmsghdr in classic netlink
tools: ynl-gen: consider dump ops without a do "type-consistent"
tools: ynl-gen: use family c-name in notifications
tools: ynl: generate code for rt-addr and add a sample
tools: ynl: generate code for rt-route and add a sample
Merge branch 'tools-ynl-c-basic-netlink-raw-support'
Merge branch 'net-retire-dccp-socket'
Merge branch 'add-l2-hw-acceleration-for-airoha_eth-driver'
net: convert dev->rtnl_link_state to a bool
Merge branch 'pktgen-code-cleanup'
Merge branch 'add-support-for-mdb-offload-failure-notification'
Merge branch 'cpsw-bindings-for-5000m-fixed-link'
Merge branch '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue
Merge branch 'fix-late-dma-unmap-crash-for-page-pool'
Merge branch 'net-convert-exit_batch_rtnl-to-exit_rtnl'
Merge branch 'net-stmmac-remove-unnecessary-initialisation-of-1-s-tic-counter'
Merge branch 'net-mlx5-hws-refactor-action-ste-handling'
Merge branch 'rxrpc-afs-add-afs-gssapi-security-class-to-af_rxrpc-and-kafs'
Merge branch 'net-stmmac-qcom-ethqos-simplifications'
Merge branch 'mptcp-various-small-and-unrelated-improvements'
Merge branch 'qed-deadcoding'
Merge branch 'net-introduce-nlmsg_payload-helper'
Merge branch 'net-stmmac-anarion-cleanups'
Merge branch 'net-stmmac-ingenic-cleanups'
Merge branch 'net-ptp-driver-opt-in-for-supported-ptp-ioctl-flags'
Merge branch 'net-ethernet-ti-am65-cpsw-fix-mac-address-fetching'
docs: networking: clarify intended audience of netdevices.rst
Merge branch 'net-stmmac-sti-cleanups'
Merge branch 'adopting-nlmsg_payload-in-ipv4-ipv6'
Merge branch '10GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Merge branch 'net-stmmac-sunxi-cleanups'
netdev: fix the locking for netdev notifications
net: add UAPI to the header guard in various network headers
tools: ynl: add missing header deps
Merge branch 'net-adopting-nlmsg_payload-final-series'
Merge branch 'net-stmmac-socfpga-fix-init-ordering-and-cleanups'
Merge branch 'bnxt_en-update-for-net-next'
Merge tag 'for-netdev' of https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next
Merge branch 'net-phy-dp83822-add-support-for-changing-the-mac-series-termination'
Merge branch 'add-gbeth-glue-layer-driver-for-renesas-rz-v2h-p-soc'
Merge branch 'net-followup-series-for-exit_rtnl'
Merge branch 'implement-udp-tunnel-port-for-txgbe'
netlink: specs: allow header properties for attribute sets
netlink: specs: rt-link: remove the fixed members from attrs
netlink: specs: rt-link: remove if-netnsid from attr list
netlink: specs: rt-link: remove duplicated group in attr list
netlink: specs: rt-link: add C naming info
netlink: specs: rt-link: adjust AF_ nest for C codegen
netlink: specs: rt-link: make bond's ipv6 address attribute fixed size
netlink: specs: rt-link: add notification for newlink
netlink: specs: rt-neigh: add C naming info
netlink: specs: rt-neigh: make sure getneigh is consistent
netlink: specs: rtnetlink: correct notify properties
netlink: specs: rt-rule: add C naming info
Merge branch 'netlink-specs-rtnetlink-adjust-specs-for-c-codegen'
Merge branch 'r8169-merge-chip-versions'
Merge branch 'enable-multiple-irq-lines-support-in-airoha_eth-driver'
Merge branch '1GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue
Merge branch 'net-mlx5-hws-improve-ip-version-handling'
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Merge branch 'net-bcmasp-add-v3-0-and-remove-v2-0'
Merge branch 'tcp-fastopen-observability'
tools: ynl: fix the header guard name for OVPN
Merge branch 'fix-netdevim-to-correctly-mark-napi-ids'
Merge branch 'io_uring-zcrx-fix-selftests-and-add-new-test-for-rss-ctx'
Merge branch 'net-stmmac-socfpga-1000basex-support-and-cleanups'
Merge branch 'net-stmmac-dwmac-loongson-add-loongson-2k3000-support'
Merge branch 'veth-qdisc-backpressure-and-qdisc-check-refactor'
Merge branch 'virtio-net-disable-delayed-refill-when-pausing-rx'
Merge branch 'phase-out-hybrid-pci-devres-api'
Merge branch 'io_uring-zcrx-selftests-more-cleanups'
Merge branch 'xsk-respect-the-offsets-when-copying-frags'
Merge tag 'nf-next-25-04-29' of git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-next
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Merge branch '1GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue
tools: ynl-gen: fix comment about nested struct dict
tools: ynl-gen: factor out free_needs_iter for a struct
tools: ynl-gen: fill in missing empty attr lists
tools: ynl: let classic netlink requests specify extra nlflags
tools: ynl-gen: support using dump types for ntf
tools: ynl-gen: support CRUD-like notifications for classic Netlink
tools: ynl-gen: multi-attr: type gen for string
tools: ynl-gen: mutli-attr: support binary types with struct
tools: ynl-gen: array-nest: support put for scalar
tools: ynl-gen: array-nest: support binary array with exact-len
tools: ynl-gen: don't init enum checks for classic netlink
tools: ynl: allow fixed-header to be specified per op
Merge branch 'net-stmmac-replace-speed_mode_2500-method'
Merge tag 'for-netdev' of https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next
Merge branch 'selftests-mptcp-increase-code-coverage'
Merge branch 'net-ethtool-introduce-ethnl-dump-helpers'
selftests: net: exit cleanly on SIGTERM / timeout
Merge branch 'devlink-sanitize-variable-typed-attributes'
Merge tag 'wireless-next-2025-05-06' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next
tools: ynl-gen: rename basic presence from 'bit' to 'present'
tools: ynl-gen: split presence metadata
tools: ynl-gen: move the count into a presence struct too
Merge branch 'tools-ynl-gen-split-presence-metadata'
netlink: specs: nl80211: drop structs which are not uAPI
netlink: specs: ovs: correct struct names
netlink: specs: remove implicit structs for SNMP counters
netlink: specs: rt-link: remove implicit structs from devconf
Merge branch 'netlink-specs-remove-phantom-structs'
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
selftests: net-drv: remove the nic_performance and nic_link_layer tests
Merge branch 'add-more-features-for-enetc-v4-round-2'
Merge branch 'dpaa_eth-conversion-to-ndo_hwtstamp_get-and-ndo_hwtstamp_set'
Merge tag 'batadv-next-pullrequest-20250509' of git://git.open-mesh.org/linux-merge
Merge branch 'refactoring-designware-vlan-code'
selftests: drv-net: ping: make sure the ping test restores checksum offload
Merge branch 'selftests-net-configure-rp_filter-in-setup_ns'
Merge branch 'net-vertexcom-mse102x-improve-rx-handling'
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/linux
netlink: fix policy dump for int with validation callback
tools: ynl-gen: support sub-type for binary attributes
tools: ynl-gen: auto-indent else
tools: ynl-gen: support struct for binary attributes
Merge branch 'net-mlx5-hws-complex-matchers-and-rehash-mechanism-fixes'
Merge branch 'misc-drivers-sw-timestamp-changes'
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Merge branch 'tcp-receive-side-improvements'
net: sched: uapi: add more sanely named duplicate defines
tools: ynl-gen: array-nest: support arrays of nests
netlink: specs: rt-link: add C naming info for ovpn
tools: ynl-gen: factor out the annotation of pure nested struct
tools: ynl-gen: prepare for submsg structs
tools: ynl-gen: submsg: plumb thru an empty type
tools: ynl-gen: submsg: render the structs
tools: ynl-gen: submsg: support parsing and rendering sub-messages
tools: ynl: submsg: reverse parse / error reporting
tools: ynl: enable codegen for all rt- families
tools: ynl: add a sample for rt-link
Merge branch 'tools-ynl-gen-support-sub-messages-and-rt-link'
Merge branch 'vsock-test-improve-sigpipe-test-reliability'
Merge branch '200GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue
Merge branch 'queue_api-reduce-risk-of-name-collision-over-txq'
Merge branch 'add-built-in-2-5g-ethernet-phy-support-on-mt7988'
net: let lockdep compare instance locks
Merge branch 'net-phy-fixed_phy-simplifications-and-improvements'
Merge branch 'net-bcmgenet-64bit-stats-and-expose-more-stats-in-ethtool'
Merge branch 'ipv6-follow-up-for-rtnl-free-rtm_newroute-series'
Merge branch 'net-airoha-add-per-flow-stats-support-to-hw-flowtable-offloading'
tools: ynl-gen: add makefile deps for neigh
netlink: specs: tc: remove duplicate nests
netlink: specs: tc: use tc-gact instead of tc-gen as struct name
netlink: specs: tc: add C naming info
netlink: specs: tc: drop the family name prefix from attrs
tools: ynl-gen: support passing selector to a nest
tools: ynl-gen: move fixed header info from RenderInfo to Struct
tools: ynl-gen: support local attrs in _multi_parse
tools: ynl-gen: support weird sub-message formats
tools: ynl: enable codegen for TC
netlink: specs: tc: add qdisc dump to TC spec
tools: ynl: add a sample for TC
Merge branch 'tools-ynl-gen-add-support-for-inherited-selector-and-therefore-tc'
Merge branch 'net-faster-and-simpler-crc32c-computation'
Merge branch 'net-phy-add-support-for-new-aeonsemi-phys'
Merge branch 'net-mlx5-hws-set-of-fixes-and-adjustments'
Merge branch 'net-mlx5-convert-mlx5-to-netdev-instance-locking'
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Merge tag 'for-net-next-2025-05-22' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next
Merge tag 'wireless-next-2025-05-22' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next
Merge branch 'refactor-phy-reset-handling-and'
Merge branch 'devmem-tcp-minor-cleanups-and-ksft-improvements'
Janne Grunau (3):
dt-bindings: net: Add network-class schema for mac-address properties
dt-bindings: wireless: bcm4329-fmac: Use wireless-controller.yaml schema
dt-bindings: wireless: silabs,wfx: Use wireless-controller.yaml
Jason A. Donenfeld (2):
wireguard: netlink: use NLA_POLICY_MASK where possible
wireguard: selftests: specify -std=gnu17 for bash
Jason Xing (5):
net: thunder: make tx software timestamp independent
net: mlx4: add SOF_TIMESTAMPING_TX_SOFTWARE flag when getting ts info
net: atlantic: generate software timestamp just before the doorbell
net: cxgb4: generate software timestamp just before the doorbell
net: stmmac: generate software timestamp just before the doorbell
Jedrzej Jagielski (14):
devlink: add value check to devlink_info_version_put()
ixgbe: add initial devlink support
ixgbe: add handler for devlink .info_get()
ixgbe: add .info_get extension specific for E610 devices
ixgbe: add E610 functions getting PBA and FW ver info
ixgbe: extend .info_get() with stored versions
ixgbe: add device flash update via devlink
ixgbe: add support for devlink reload
ixgbe: add FW API version check
ixgbe: add E610 implementation of FW recovery mode
ixgbe: create E610 specific ethtool_ops structure
ixgbe: add support for ACPI WOL for E610
ixgbe: apply different rules for setting FC on E610
ixgbe: add E610 .set_phys_id() callback implementation
Jeff Johnson (3):
wifi: ath12k: Fix misspelling "upto" in dp.c
wifi: ath12k: ahb: Replace del_timer_sync() with timer_delete_sync()
wifi: iwlwifi: Add short description to enum iwl_power_scheme
Jeremy Harris (2):
tcp: fastopen: note that a child socket was created
tcp: fastopen: pass TFO child indication through getsockopt
Jeremy Kerr (2):
net: mctp: use nlmsg_payload() for netlink message data extraction
net: mctp: start tx queue on netdev open
Jesper Dangaard Brouer (2):
net: sched: generalize check for no-queue qdisc on TX queue
veth: apply qdisc backpressure on full ptr_ring to reduce TX drops
Jiande Lu (1):
Bluetooth: btusb: Add new VID/PID 13d3/3630 for MT7925
Jiawen Wu (17):
net: txgbe: Update module description
net: txgbe: Support to set UDP tunnel port
net: wangxun: restrict feature flags for tunnel packets
net: txgbe: Fix pending interrupt
net: wangxun: Correct clerical errors in comments
net: libwx: Fix log level
net: txgbe: Remove specified SP type
net: wangxun: Use specific flag bit to simplify the code
net: txgbe: Distinguish between 40G and 25G devices
net: txgbe: Implement PHYLINK for AML 25G/10G devices
net: txgbe: Support to handle GPIO IRQs for AML devices
net: txgbe: Correct the currect link settings
net: txgbe: Restrict the use of mismatched FW versions
net: txgbe: Implement PTP for AML devices
net: txgbe: Implement SRIOV for AML devices
net: libwx: Fix statistics of multicast packets
net: txgbe: Support the FDIR rules assigned to VFs
Jiayuan Chen (2):
tcp: add TCP_RFC7323_TW_PAWS drop reason
tcp: add LINUX_MIB_PAWS_TW_REJECTED counter
Jiri Pirko (4):
tools: ynl-gen: allow noncontiguous enums
devlink: define enum for attr types of dynamic attributes
devlink: avoid param type value translations
devlink: use DEVLINK_VAR_ATTR_TYPE_* instead of NLA_* in fmsg
Jiri Slaby (SUSE) (1):
irqdomain: ssb: Switch to irq_domain_create_linear()
Joe Damato (4):
netdevsim: Mark NAPI ID on skb in nsim_rcv
selftests: drv-net: Factor out ksft C helpers
selftests: drv-net: Test that NAPI ID is non-zero
tools/Makefile: Add ynl target
Johan Hovold (4):
wifi: ath12k: extend dma mask to 36 bits
wifi: ath11k: fix ring-buffer corruption
wifi: ath11k: fix rx completion meta data corruption
wifi: ath12k: fix ring-buffer corruption
Johannes Berg (141):
wifi: free SKBTX_WIFI_STATUS skb tx_flags flag
wifi: cfg80211/mac80211: remove more 5/10 MHz code
wifi: iwlwifi: mvm: remove IWL_EMPTYING_HW_QUEUE_DELBA state
wifi: iwlwifi: fw: do reset handshake during assert if needed
wifi: iwlwifi: mld: remove P2P powersave tracking
wifi: iwlwifi: mld: tests: simplify le32 bitfield handling
net: ethernet: mtk_wed: annotate RCU release in attach()
Merge tag 'ath-next-20250418' of git://git.kernel.org/pub/scm/linux/kernel/git/ath/ath into wireless-next
wifi: iwlwifi: mld: clarify variable type
wifi: iwlwifi: mld: fix iwl_mld_emlsr_disallowed_with_link() return
wifi: iwlwifi: mld: use cfg80211_chandef_get_width()
wifi: iwlwifi: mld: allow EMLSR on separated 5 GHz subbands
wifi: iwlwifi: define API for external FSEQ images
wifi: iwlwifi: mld: skip unknown FW channel load values
wifi: iwlwifi: clean up band in RX metadata
wifi: iwlwifi: mld: rx: simplify channel handling
wifi: iwlwifi: mld: simplify iwl_mld_rx_fill_status()
wifi: iwlwifi: clean up config macro
Revert "wifi: iwlwifi: clean up config macro"
wifi: iwlwifi: mld: refactor tests to use chandefs
wifi: iwlwifi: mld: tests: extend link pair tests
wifi: iwlwifi: avoid scheduling restart during restart
wifi: iwlwifi: implement TOP reset follower
wifi: iwlwifi: mld: handle SW reset w/o NIC error
wifi: iwlwifi: implement TOP reset
wifi: iwlwifi: dvm: fix various W=1 warnings
wifi: iwlwifi: mld: set rx_mpdu_cmd_hdr_size
wifi: iwlwifi: mvm: remove nl80211 testmode
wifi: iwlwifi: clean up config macro
wifi: iwlwifi: remove TH/TH1 RF types
wifi: iwlwifi: unify some configurations
wifi: iwlwifi: pcie: add entry for Killer AX1650i on AdL-P
wifi: iwlwifi: tests: check for device names
wifi: iwlwifi: cfg: remove fw_name_mac
wifi: iwlwifi: cfg: unify Qu/QuZ configs
wifi: iwlwifi: cfg: unify Killer 1650s/i with Qu/Hr
wifi: iwlwifi: cfg: remove unused config externs
wifi: iwlwifi: cfg: remove max_tx_agg_size
wifi: iwlwifi: cfg: remove iwl_ax201_cfg_qu_hr
wifi: iwlwifi: cfg: remove duplicated iwl_cfg_gl
wifi: iwlwifi: cfg: remove duplicated Sc device configs
wifi: iwlwifi: cfg: remove iwl_cfg_br
wifi: iwlwifi: tests: check configs are not duplicated
wifi: iwlwifi: tests: check transport configs are not duplicated
wifi: iwlwifi: cfg: clean up BW limit and subdev matching
wifi: iwlwifi: cfg: rename BW_NO_LIMIT to BW_NOT_LIMITED
wifi: iwlwifi: pcie: remove 'ent' argument from alloc
wifi: iwlwifi: cfg: minor fixes for Sc
wifi: iwlwifi: cfg: finish config split
wifi: iwlwifi: cfg: move all names out of configs
wifi: iwlwifi: tests: check for duplicate name strings
wifi: iwlwifi: cfg: reduce mac_type to u8
wifi: iwlwifi: cfg: remove unnecessary configs
wifi: iwlwifi: pcie: don't call itself indirectly
wifi: iwlwifi: mvm: add command order checks to kunit
wifi: iwlwifi: remove iwl_cmd_groups_verify_sorted()
wifi: iwlwifi: pcie: rename "continuous" memory
wifi: iwlwifi: pcie: move ME check data to pcie
wifi: iwlwifi: pcie: move invalid TX CMD into PCIe
wifi: iwlwifi: pcie: move wait_command_queue into PCIe
wifi: iwlwifi: unexport iwl_trans_pcie_send_hcmd()
wifi: iwlwifi: remove PM mode and send-in-D3
wifi: iwlwifi: pass full FW info to transport
wifi: iwlwifi: trans: remove hw_id_str
wifi: iwlwifi: trans: remove hw_wfpm_id
wifi: iwlwifi: pcie: remove constant wdg_timeout
wifi: iwlwifi: remove bc_table_dword transport config
wifi: iwlwifi: trans: remove SCD base address validation
wifi: iwlwifi: trans: collect device information
wifi: iwlwifi: rework transport configuration
wifi: iwlwifi: move STEP config into trans->conf
wifi: iwlwifi: trans: move ext_32khz_clock_valid to config
wifi: iwlwifi: remove sku_id from trans
wifi: iwlwifi: fw: remove RATE_MCS_NSS_POS
wifi: iwlwifi: rename modulation type values
wifi: iwlwifi: mld: build HT/VHT injected rate in v2
wifi: iwlwifi: mld: don't report bad EHT rate to mac80211
wifi: iwlwifi: mvm: don't report bad EHT rate to mac80211
wifi: iwlwifi: mvm: remove HT greenfield support
wifi: iwlwifi: tests: allow same config for different MACs
wifi: iwlwifi: cfg: use minimum API version 97 for Sc/Dr
wifi: iwlwifi: tests: simplify devinfo_no_trans_cfg_dups()
wifi: iwlwifi: dvm: pair transport op-mode enter/leave
wifi: iwlwifi: pcie: log async commands
wifi: iwlwifi: dvm: init 'keep_alive_beacons' in power tables
wifi: iwlwifi: remove NVM C step override
wifi: iwlwifi: mvm: fix beacon CCK flag
wifi: iwlwifi: make iwl_uefi_get_uats_table() return void
wifi: iwlwifi: fix 6005N/SFF match
wifi: iwlwifi: handle v3 rates
wifi: iwlwifi: cfg: remove 6 GHz from ht40_bands
wifi: iwlwifi: cfg: inline HT params
wifi: iwlwifi: pcie: remove 0x2726 devices
wifi: iwlwifi: add JF1/JF2 RF for dynamic FW building
wifi: iwlwifi: build 9000 series FW filenames dynamically
wifi: iwlwifi: cfg: remove QuZ/JF special cases
wifi: iwlwifi: cfg: remove 'cdb' value
wifi: iwlwifi: cfg: build ax210 family FW names dynamically
wifi: iwlwifi: cfg: handle cc firmware dynamically
wifi: iwlwifi: cfg: remove nvm_hw_section_num from new devices
wifi: iwlwifi: pass trans to iwl_parse_nvm_mcc_info()
wifi: iwlwifi: rename cfg_trans_params to mac_cfg
wifi: iwlwifi: cfg: remove dbgc_supported field
wifi: iwlwifi: cfg: remove rf_id field
wifi: iwlwifi: rename struct iwl_base_params
wifi: iwlwifi: cfg: remove eeprom_size from new devices
wifi: iwlwifi: cfg: remove DCCM offsets from new devices
wifi: iwlwifi: cfg: move MAC parameters to MAC data
wifi: iwlwifi: remove unused high_temp from iwl_cfg
wifi: iwlwifi: cfg: add ucode API min/max to MAC config
wifi: iwlwifi: cfg: unify num_rbds config
wifi: iwlwifi: cfg: unify JF configs
wifi: iwlwifi: cfg: unify HR configs
wifi: iwlwifi: cfg: add GF RF config
wifi: iwlwifi: cfg: add FM RF config
wifi: iwlwifi: cfg: clean up Sc/Dr/Br configs
wifi: iwlwifi: rename iwl_cfg to iwl_rf_cfg
wifi: iwlwifi: mvm/mld: allow puncturing use in 5 GHz
wifi: iwlwifi: dbg: fix dump trigger split check
wifi: iwlwifi: cfg: remove some unused names
wifi: iwlwifi: cfg: fix some device names
wifi: iwlwifi: cfg: fix Ma device configs
wifi: iwlwifi: cfg: fix and unify Killer/JF configs
wifi: iwlwifi: cfg: unify and add some Killer devices
wifi: iwlwifi: cfg: clean up HR device matching
wifi: iwlwifi: tests: make subdev match test more precise
wifi: iwlwifi: cfg: clean up JF device matching
wifi: iwlwifi: cfg: clean up GF device matching
wifi: iwlwifi: cfg: fix and clean up FM/WH device matching
wifi: iwlwifi: cfg: fix PE RF names
wifi: iwlwifi: cfg: add a couple of older devices
wifi: iwlwifi: cfg: remove MAC type/step matching
wifi: iwlwifi: cfg: mark Ty devices as discrete
wifi: iwlwifi: cfg: clean up dr/br configs
wifi: iwlwifi: cfg: reduce configuration struct size
wifi: iwlwifi: fw: api: include required headers in rs/location
Merge tag 'iwlwifi-next-2025-05-15' of https://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-next
Merge tag 'rtw-next-2025-05-16' of https://github.com/pkshih/rtw
net: netlink: reduce extack cookie size
Merge tag 'ath-next-20250521' of git://git.kernel.org/pub/scm/linux/kernel/git/ath/ath
Merge tag 'mt76-next-2025-05-21' of https://github.com/nbd168/wireless
Jon Kohler (1):
vhost/net: Defer TX queue re-enable until after sendmsg
Jonas Gorski (1):
net: dsa: b53: implement setting ageing time
Jordan Rife (8):
bpf: udp: Make mem flags configurable through bpf_iter_udp_realloc_batch
bpf: udp: Make sure iter->batch always contains a full bucket snapshot
bpf: udp: Get rid of st_bucket_done
bpf: udp: Use bpf_udp_iter_batch_item for bpf_udp_iter_state batch items
bpf: udp: Avoid socket skips and repeats during iteration
selftests/bpf: Return socket cookies from sock_iter_batch progs
selftests/bpf: Add tests for bucket resume logic in UDP socket iterators
wireguard: allowedips: add WGALLOWEDIP_F_REMOVE_ME flag
Joseph Huang (3):
net: bridge: mcast: Add offload failed mdb flag
net: bridge: Add offload_fail_notification bopt
net: bridge: mcast: Notify on mdb offload failure
Joshua Washington (1):
xdp: create locked/unlocked instances of xdp redirect target setters
Julian Vetter (4):
eth: nfp: remove __get_unaligned_cpu32 from netronome drivers
net: remove __get_unaligned_cpu32 from macvlan driver
net: ipvlan: remove __get_unaligned_cpu32 from ipvlan driver
wifi: mac80211: Replace __get_unaligned_cpu32 in mesh_pathtbl.c
Justin Chen (8):
dt-bindings: net: brcm,asp-v2.0: Remove asp-v2.0
dt-bindings: net: brcm,unimac-mdio: Remove asp-v2.0
net: bcmasp: Remove support for asp-v2.0
net: phy: mdio-bcm-unimac: Remove asp-v2.0
dt-bindings: net: brcm,asp-v2.0: Add asp-v3.0
dt-bindings: net: brcm,unimac-mdio: Add asp-v3.0
net: bcmasp: Add support for asp-v3.0
net: phy: mdio-bcm-unimac: Add asp-v3.0
Justin Iurman (2):
net: ipv6: ioam6: use consistent dst names
net: ipv6: ioam6: fix double reallocation
Justin Lai (3):
rtase: Add ndo_setup_tc support for CBS offload in traffic control setup
rtase: Modify the format specifier in snprintf to %u
rtase: Use min() instead of min_t()
Kalesh AP (2):
bnxt_en: Remove unused field "ref_count" in struct bnxt_ulp
bnxt_en: Remove unused macros in bnxt_ulp.h
Kang Yang (14):
wifi: ath12k: delete mon reap timer
wifi: ath12k: parse msdu_end tlv in ath12k_dp_mon_rx_parse_status_tlv()
wifi: ath12k: avoid call ath12k_dp_mon_parse_rx_dest_tlv() for WCN7850
wifi: ath12k: add srng config template for mon status ring
wifi: ath12k: add ring config for monitor mode on WCN7850
wifi: ath12k: add interrupt configuration for mon status ring
wifi: ath12k: add monitor mode handler by monitor status ring interrupt
wifi: ath12k: add support to reap and process monitor status ring
wifi: ath12k: fix macro definition HAL_RX_MSDU_PKT_LENGTH_GET
wifi: ath12k: use ath12k_buffer_addr in ath12k_dp_rx_link_desc_return()
wifi: ath12k: add support to reap and process mon dest ring
wifi: ath12k: init monitor parameters for WCN7850
wifi: ath12k: use different packet offset for WCN7850
wifi: ath12k: enable monitor mode for WCN7850
Karol Kolacinski (3):
ice: remove SW side band access workaround for E825
ice: refactor ice_sbq_msg_dev enum
ice: enable timesync operation on 2xNAC E825 devices
Karthikeyan Kathirvel (1):
wifi: ieee80211: define beacon protection bit field
Karthikeyan Periyasamy (4):
wifi: ath12k: Replace band define G with GHZ where appropriate
wifi: ath12k: fix NULL access in assign channel context handler
wifi: ath12k: Refactor the monitor channel context procedure
wifi: ath12k: Move to NO_VIRTUAL monitor
Kees Cook (20):
wifi: carl9170: Add __nonstring annotations for unterminated strings
net: ethtool: Adjust exactly ETH_GSTRING_LEN-long stats to use memcpy
net/mlx5e: ethtool: Fix formatting of ptp_rq0_csum_complete_tail_slow
emulex/benet: Annotate flash_cookie as nonstring
ipv4: fib: Fix fib_info_hash_alloc() allocation type
pds_core: Allocate pdsc_viftype_defaults copy with ARRAY_SIZE()
net/mlx4_core: Adjust allocation type for buddy->bits
nfp: xsk: Adjust allocation type for nn->dp.xsk_pools
ptp: ocp: Add const to bp->attr_group allocation type
wifi: rtw89: fw: Remove "const" on allocation type
Bluetooth: btintel: Check dsbr size from EFI variable
net: core: Convert inet_addr_is_any() to sockaddr_storage
net: core: Switch netif_set_mac_address() to struct sockaddr_storage
net/ncsi: Use struct sockaddr_storage for pending_mac
ieee802154: Use struct sockaddr_storage with dev_set_mac_address()
net: usb: r8152: Convert to use struct sockaddr_storage internally
net: core: Convert dev_set_mac_address() to struct sockaddr_storage
rtnetlink: do_setlink: Use struct sockaddr_storage
net: core: Convert dev_set_mac_address_user() to use struct sockaddr_storage
wireguard: global: add __nonstring annotations for unterminated strings
Kevin Paul Reddy Janagari (1):
tipc: Removing deprecated strncpy()
Kiran K (1):
Bluetooth: btintel_pcie: Do not generate coredump for diagnostic events
Konrad Dybcio (1):
net: ipa: Make the SMEM item ID constant
Kory Maincent (1):
net: Add support for providing the PTP hardware source in tsinfo
Krzysztof HaÅ?asa (1):
usbnet: asix AX88772: leave the carrier control to phylink
Krzysztof Kozlowski (3):
ptp: Do not enable by default during compile testing
Bluetooth: btmrvl_sdio: Fix wakeup source leaks on device unbind
Bluetooth: btmtksdio: Fix wakeup source leaks on device unbind
Kuan-Chung Chen (6):
wifi: rtw89: 8922a: fix TX fail with wrong VCO setting
wifi: rtw89: set pre-calculated antenna matrices for HE trigger frame
wifi: rtw89: 8922a: increase beacon loss to 6 seconds
wifi: rtw89: acpi: introduce country specific TAS enabling
wifi: rtw89: phy: add C2H event handler for report of FW scan
wifi: rtw89: constrain TX power according to dynamic antenna power table
Kuniyuki Iwashima (56):
net: ena: Support persistent per-NAPI config.
selftest: net: Remove DCCP bits.
net: Retire DCCP socket.
net: Unexport shared functions for DCCP.
tcp: Rename tcp_or_dccp_get_hashinfo().
net: Factorise setup_net() and cleanup_net().
net: Add ops_undo_single for module load/unload.
net: Add ->exit_rtnl() hook to struct pernet_operations.
nexthop: Convert nexthop_net_exit_batch_rtnl() to ->exit_rtnl().
vxlan: Convert vxlan_exit_batch_rtnl() to ->exit_rtnl().
ipv4: ip_tunnel: Convert ip_tunnel_delete_nets() callers to ->exit_rtnl().
ipv6: Convert tunnel devices' ->exit_batch_rtnl() to ->exit_rtnl().
xfrm: Convert xfrmi_exit_batch_rtnl() to ->exit_rtnl().
bridge: Convert br_net_exit_batch_rtnl() to ->exit_rtnl().
bonding: Convert bond_net_exit_batch_rtnl() to ->exit_rtnl().
gtp: Convert gtp_net_exit_batch_rtnl() to ->exit_rtnl().
bareudp: Convert bareudp_exit_batch_rtnl() to ->exit_rtnl().
geneve: Convert geneve_exit_batch_rtnl() to ->exit_rtnl().
net: Remove ->exit_batch_rtnl().
net: Drop hold_rtnl arg from ops_undo_list().
pfcp: Convert pfcp_net_exit() to ->exit_rtnl().
ppp: Split ppp_exit_net() to ->exit_rtnl().
net: Fix wild-memory-access in __register_pernet_operations() when CONFIG_NET_NS=n.
ipv6: Validate RTA_GATEWAY of RTA_MULTIPATH in rtm_to_fib6_config().
ipv6: Get rid of RTNL for SIOCDELRT and RTM_DELROUTE.
ipv6: Move some validation from ip6_route_info_create() to rtm_to_fib6_config().
ipv6: Check GATEWAY in rtm_to_fib6_multipath_config().
ipv6: Move nexthop_find_by_id() after fib6_info_alloc().
ipv6: Split ip6_route_info_create().
ipv6: Preallocate rt->fib6_nh->rt6i_pcpu in ip6_route_info_create().
ipv6: Preallocate nhc_pcpu_rth_output in ip6_route_info_create().
ipv6: Don't pass net to ip6_route_info_append().
ipv6: Rename rt6_nh.next to rt6_nh.list.
ipv6: Factorise ip6_route_multipath_add().
ipv6: Protect fib6_link_table() with spinlock.
ipv6: Defer fib6_purge_rt() in fib6_add_rt2node() to fib6_add().
ipv6: Protect nh->f6i_list with spinlock and flag.
ipv6: Get rid of RTNL for SIOCADDRT and RTM_NEWROUTE.
ipv6: Restore fib6_config validation for SIOCADDRT.
ipv6: Remove rcu_read_lock() in fib6_get_table().
inet: Remove rtnl_is_held arg of lwtunnel_valid_encap_type(_attr)?().
ipv6: Narrow down RCU critical section in inet6_rtm_newroute().
Revert "ipv6: sr: switch to GFP_ATOMIC flag to allocate memory during seg6local LWT setup"
Revert "ipv6: Factorise ip6_route_multipath_add()."
ipv6: Pass gfp_flags down to ip6_route_info_create_nh().
ipv6: Revert two per-cpu var allocation for RTM_NEWROUTE.
af_unix: Factorise test_bit() for SOCK_PASSCRED and SOCK_PASSPIDFD.
af_unix: Don't pass struct socket to maybe_add_creds().
scm: Move scm_recv() from scm.h to scm.c.
tcp: Restrict SO_TXREHASH to TCP socket.
net: Restrict SO_PASS{CRED,PIDFD,SEC} to AF_{UNIX,NETLINK,BLUETOOTH}.
af_unix: Move SOCK_PASS{CRED,PIDFD,SEC} to struct sock.
af_unix: Inherit sk_flags at connect().
af_unix: Introduce SO_PASSRIGHTS.
selftest: af_unix: Test SO_PASSRIGHTS.
calipso: Don't call calipso functions for AF_INET sk.
Kurt Kanzenbach (6):
igb: Link IRQs to NAPI instances
igb: Link queues to NAPI instances
igb: Add support for persistent NAPI config
igb: Get rid of spurious interrupts
igc: Limit netdev_tc calls to MQPRIO
igc: Change Tx mode for MQPRIO offloading
Kyungwook Boo (1):
i40e: fix MMIO write access to an invalid page in i40e_clear_hw
Lad Prabhakar (5):
dt-bindings: net: dwmac: Increase 'maxItems' for 'interrupts' and 'interrupt-names'
dt-bindings: net: Document support for Renesas RZ/V2H(P) GBETH
net: stmmac: Add DWMAC glue layer for Renesas GBETH
MAINTAINERS: Add entry for Renesas RZ/V2H(P) DWMAC GBETH glue layer driver
dt-bindings: net: renesas-gbeth: Add support for RZ/V2N (R9A09G056) SoC
Larysa Zaremba (4):
ice: do not add LLDP-specific filter if not necessary
ice: remove headers argument from ice_tc_count_lkups
ice: support egress drop rules on PF
ice: enable LLDP TX for VFs through tc
Lee Trager (6):
pldmfw: Don't require send_package_data or send_component_table to be defined
eth: fbnic: Accept minimum anti-rollback version from firmware
eth: fbnic: Add support for multiple concurrent completion messages
eth: fbnic: Add mailbox support for PLDM updates
eth: fbnic: Add devlink dev flash support
eth: fbnic: Replace kzalloc/fbnic_fw_init_cmpl with fbnic_fw_alloc_cmpl
Leon Romanovsky (2):
xfrm: validate assignment of maximal possible SEQ number
xfrm: prevent configuration of interface index when offload is used
Leon Yen (1):
wifi: mt76: mt7925: introduce thermal protection
Lingbo Kong (1):
wifi: ath12k: Abort scan before removing link interface to prevent duplicate deletion
Linus Walleij (1):
net: ethernet: cortina: Use TOE/TSO on all TCP
Liwei Sun (1):
Bluetooth: btusb: Add new VID/PID 13d3/3584 for MT7922
Lorenzo Bianconi (13):
net: airoha: Add l2_flows rhashtable
net: airoha: Add L2 hw acceleration support
net: airoha: Add matchall filter offload support
net: airoha: Introduce airoha_irq_bank struct
net: airoha: Enable multiple IRQ lines support in airoha_eth driver.
net: airoha: npu: Move memory allocation in airoha_npu_send_msg() caller
net: airoha: Add FLOW_CLS_STATS callback support
net: airoha: ppe: Disable packet keepalive
Revert "wifi: mt76: Check link_conf pointer in mt76_connac_mcu_sta_basic_tlv()"
dt-bindings: net: airoha: Add EN7581 memory-region property
net: airoha: Do not store hfwd references in airoha_qdma struct
net: airoha: Add the capability to allocate hwfd buffers via reserved-memory
net: airoha: Add the capability to allocate hfwd descriptors in SRAM
Lucien.Jheng (1):
net: phy: air_en8811h: Add clk provider for CKO pin
Luiz Augusto von Dentz (3):
Bluetooth: ISO: Fix not using SID from adv report
Bluetooth: ISO: Fix getpeername not returning sockaddr_iso_bc fields
Bluetooth: L2CAP: Fix not checking l2cap_chan security level
MD Danish Anwar (1):
net: ti: icssg-prueth: Add ICSSG FW Stats
Maharaja Kennadyrajan (3):
wifi: ath12k: Fix spelling errors in mac.c file
wifi: ath12k: Prevent sending WMI commands to firmware during firmware crash
wifi: ath12k: fix node corruption in ar->arvifs list
Marc Kleine-Budde (1):
Merge patch series "Add support for RZ/G3E CANFD"
Mark Bloch (1):
net/mlx5e: Allow setting MAC address of representors
Martin KaFai Lau (4):
Merge branch 'selftests-xsk-add-tests-for-xdp-tail-adjustment-in-af_xdp'
Merge branch 'bpf-qdisc'
Merge branch 'bpf-udp-exactly-once-socket-iteration'
Merge branch 'fix-bpf-qdisc-bugs-and-clean-up'
Martyna Szapar-Mudlaw (1):
ice: improve error message for insufficient filter space
Mateusz Pacuszka (2):
ice: fix check for existing switch rule
ice: receive LLDP on trusted VFs
Mateusz Polchlopek (1):
idpf: assign extracted ptype to struct libeth_rqe_info field
Matthias Schiffer (3):
batman-adv: constify and move broadcast addr definition
net: phy: dp83867: remove check of delay strap configuration
net: phy: dp83867: use 2ns delay if not specified in DTB
Matthieu Baerts (NGI0) (5):
mptcp: sched: remove mptcp_sched_data
mptcp: pass right struct to subflow_hmac_valid
mptcp: add MPJoinRejected MIB counter
selftests: mptcp: validate MPJoinRejected counter
selftests: mptcp: info: hide 'grep: write error' warnings
Maxime Chevallier (6):
net: stmmac: socfpga: Enable internal GMII when using 1000BaseX
net: stmmac: socfpga: Don't check for phy to enable the SGMII adapter
net: stmmac: socfpga: Remove unused pcs-mdiodev field
net: ethtool: Introduce per-PHY DUMP operations
net: ethtool: phy: Convert the PHY_GET command to generic phy dump
net: ethtool: netlink: Use netdev_hold for dumpit() operations
Mengyuan Lou (6):
net: libwx: Add mailbox api for wangxun pf drivers
net: libwx: Add sriov api for wangxun nics
net: libwx: Redesign flow when sriov is enabled
net: libwx: Add msg task func
net: ngbe: add sriov function support
net: txgbe: add sriov function support
Miaoqing Pan (2):
dt-bindings: net: wireless: ath12k: describe firmware-name property
wifi: ath12k: support usercase-specific firmware overrides
Michael Chan (1):
bnxt_en: Change FW message timeout warning
Michael Klein (6):
net: phy: realtek: remove unsed RTL821x_PHYSR* macros
net: phy: realtek: Clean up RTL821x ExtPage access
net: phy: realtek: add RTL8211F register defines
net: phy: realtek: Group RTL82* macro definitions
net: phy: realtek: use __set_bit() in rtl8211f_led_hw_control_get()
net: phy: realtek: Add support for PHY LEDs on RTL8211E
Michael Lo (4):
wifi: mt76: mt7925: fix host interrupt register initialization
wifi: mt76: mt7925: ensure all MCU commands wait for response
wifi: mt76: mt7925: extend MCU support for testmode
wifi: mt76: mt7925: add test mode support
Michael Walle (2):
net: ethernet: ti: am65-cpsw: set fwnode for ports
net: ethernet: ti: am65-cpsw: handle -EPROBE_DEFER
Michal Koutný (2):
netfilter: xt_cgroup: Make it independent from net_cls
net: cgroup: Guard users of sock_cgroup_classid()
Michal Luczaj (7):
net: Drop unused @sk of __skb_try_recv_from_queue()
af_unix: Remove unix_unhash()
vsock/virtio: Linger on unsent data
vsock: Move lingering logic to af_vsock core
vsock/test: Introduce vsock_wait_sent() helper
vsock/test: Introduce enable_so_linger() helper
vsock/test: Add test for an unexpectedly lingering close()
Michal Swiatkowski (1):
idpf: remove unreachable code from setting mailbox
Milena Olech (10):
idpf: change the method for mailbox workqueue allocation
idpf: add initial PTP support
virtchnl: add PTP virtchnl definitions
idpf: move virtchnl structures to the header file
idpf: negotiate PTP capabilities and get PTP clock
idpf: add mailbox access to read PTP clock time
idpf: add PTP clock configuration
idpf: add Tx timestamp capabilities negotiation
idpf: add Tx timestamp flows
idpf: add support for Rx timestamping
Mina Almasry (16):
netmem: add niov->type attribute to distinguish different net_iov types
net: add get_netmem/put_netmem support
net: devmem: Implement TX path
net: add devmem TCP TX documentation
net: enable driver support for netmem TX
gve: add netmem TX support to GVE DQO-RDA mode
net: check for driver support in netmem TX
selftests: ncdevmem: Implement devmem TCP TX
net: devmem: move list_add to net_devmem_bind_dmabuf.
page_pool: fix ugly page_pool formatting
net: devmem: preserve sockc_err
net: devmem: ksft: add ipv4 support
net: devmem: ksft: add exit_wait to make rx test pass
net: devmem: ksft: add 5 tuple FS support
net: devmem: ksft: upgrade rx test to send 1K data
net: devmem: ncdevmem: remove unused variable
Ming Yen Hsieh (4):
wifi: mt76: add mt76_connac_mcu_build_rnr_scan_param routine
wifi: mt76: mt7925: add RNR scan support for 6GHz
wifi: mt76: mt7925: prevent multiple scan commands
wifi: mt76: mt7925: refine the sniffer commnad
Mingcong Bai (1):
wifi: rtlwifi: disable ASPM for RTL8723BE with subsystem ID 11ad:1723
Miri Korenblit (37):
wifi: iwlwifi: re-add IWL_AMSDU_8K case
wifi: iwlwifi: mld: avoid memory leak if mcc_init fails
wifi: iwlwifi: mld: stop hw if mcc_init fails
wifi: iwlwifi: mld: don't do iwl_trans_stop_device twice
wifi: iwlwifi: mld: refactor purging async notifications
wifi: iwlwifi: mld: properly handle async notification in op mode start
wifi: iwlwifi: mld: inform trans on init failure
wifi: iwlwifi: set step_urm in transport and not in the opmodes
wifi: iwlwifi: add definitions for iwl_mac_power_cmd version 2
wifi: iwlwifi: pcie: make sure to lock rxq->read
wifi: iwlwifi: move phy_filters to fw_runtime
wifi: iwlwifi: prepare for reading WPFC from UEFI
wifi: iwlwifi: read WPFC also from UEFI
wifi: iwlwifi: mld: send the WPFC table to the FW
wifi: iwlwifi: mld: check for NULL before referencing a pointer
wifi: iwlwifi: mld: don't return an error if the FW is dead
wifi: iwlwifi: mld: support iwl_mac_power_cmd version 2
wifi: iwlwifi: mvm: support ROC command version 6
wifi: iwlwifi: mvm: support iwl_mac_power_cmd version 2
wifi: iwlwifi: remove duplicated line
wifi: iwlwifi: bump FW API to 99 for BZ/SC/DR devices
wifi: iwlwifi: print the DSM value when read from UEFI
wifi: iwlwifi: mld: don't check the TPT counters when scanning
wifi: iwlwifi: debug: set CDB indication from CSR
wifi: iwlwifi: mld: remove one more error in unallocated BAID
wifi: iwlwifi: pcie: remove iwl_trans_pcie_gen2_send_hcmd
wifi: iwlwifi: mld: avoid init-after-queue
wifi: iwlwifi: stop supporting TX_CMD_API_S_VER_8
wifi: iwlwifi: use normal versioning convention for iwl_tx_cmd
wifi: iwlwifi: remove GEN3 from a couple of macros
wifi: iwlwifi: use bc entries instead of bc table also for pre-ax210
wifi: iwlwifi: unify iwlagn_scd_bc_tbl_entry and iwl_gen3_bc_tbl_entry
wifi: iwlwifi: remove unused macro
wifi: iwlwifi: map iwl_context_info to the matching struct
wifi: iwlwifi: fix a wrong comment
wifi: iwlwifi: rename ctx-info-gen3 to ctx-info-v2
wifi: iwlwifi: mld: allow 2 ROCs on the same vif
Mohan Kumar G (2):
wifi: mac80211: Update MCS15 support in link_conf
wifi: ath12k: Send MCS15 support to firmware during peer assoc
Mohsin Bashir (6):
eth: fbnic: add locking support for hw stats
eth: fbnic: add coverage for hw queue stats
eth: fbnic: add coverage for RXB stats
eth: fbnic: add support for TMI stats
eth: fbnic: add support for TTI HW stats
eth: fbnic: fix `tx_dropped` counting
Moon Yeounsu (1):
net: dlink: add synchronization for stats update
Muhammad Usama Anjum (1):
wifi: ath11k: Fix QMI memory reuse logic
Muna Sinada (5):
wifi: ath12k: remove open parenthesis
wifi: mac80211: Add link iteration macro for link data
wifi: mac80211: Create separate links for VLAN interfaces
wifi: mac80211: VLAN traffic in multicast path
wifi: ath12k: Prevent multicast duplication for dynamic VLAN
Neeraj Sanjay Kale (2):
dt-bindings: net: bluetooth: nxp: Add support for host-wakeup
Bluetooth: btnxpuart: Implement host-wakeup feature
Nelson Escobar (1):
net/enic: Allow at least 8 RQs to always be used
Nikita Zhandarovich (1):
net: usb: aqc111: fix error handling of usbnet read calls
Niklas Söderlund (1):
net: phy: marvell-88q2xxx: Enable temperature sensor for mv88q211x
Nithyanantham Paramasivam (1):
wifi: ath12k: Enable REO queue lookup table feature on QCN9274
Oleksij Rempel (9):
net: dsa: microchip: add ETS scheduler support for KSZ88x3 switches
net: usb: lan78xx: Improve error handling in PHY initialization
net: usb: lan78xx: remove explicit check for missing PHY driver
net: usb: lan78xx: refactor PHY init to separate detection and MAC configuration
net: usb: lan78xx: move LED DT configuration to helper
net: usb: lan78xx: Extract PHY interrupt acknowledgment to helper
net: usb: lan78xx: Refactor USB link power configuration into helper
net: usb: lan78xx: Extract flow control configuration to helper
net: phy: microchip: document where the LAN88xx PHYs are used
Ondrej Jirman (2):
wifi: rtw89: Convert rtw89_core_set_supported_band to use devm_*
wifi: rtw89: Fix inadverent sharing of struct ieee80211_supported_band data
P Praneesh (19):
wifi: ath12k: refactor ath12k_hw_regs structure
wifi: ath12k: Add extra TLV tag parsing support in monitor Rx path
wifi: ath12k: Avoid fetch Error bitmap and decap format from Rx TLV
wifi: ath12k: change the status update in the monitor Rx
wifi: ath12k: Avoid packet offset and FCS length from Rx TLV
wifi: ath12k: add monitor interface support on QCN9274
wifi: ath12k: Fix memory leak during vdev_id mismatch
wifi: ath12k: Fix memory corruption during MLO multicast tx
wifi: ath12k: Fix invalid memory access while forming 802.11 header
wifi: ath12k: add rx_info to capture required field from rx descriptor
wifi: ath12k: replace the usage of rx desc with rx_info
wifi: ath12k: Handle error cases during extended skb allocation
wifi: ath12k: Refactor tx descriptor handling in tx completion handler
wifi: ath12k: Fix memory leak during extended skb allocation
wifi: ath12k: Use skb->len for dma_unmap_single() length parameter
wifi: ath12k: Add MSDU length validation for TKIP MIC error
wifi: ath12k: Avoid allocating rx_stats when ext_rx_stats is disabled
wifi: ath12k: Fix invalid RSSI values in station dump
wifi: ath12k: fix memory leak in WMI firmware stats
Pablo Neira Ayuso (2):
netfilter: nft_set_pipapo: prevent overflow in lookup table allocation
netfilter: nft_set_pipapo: clamp maximum map bucket size to INT_MAX
Pagadala Yesu Anjaneyulu (10):
wifi: iwlwifi: rename ppag_ver to ppag_bios_rev
wifi: iwlwifi: fw: support reading PPAG BIOS table revision 4
wifi: iwlwifi: fw: support PPAG command version 7
wifi: iwlwifi: mld: add RFI_CONFIG_CMD to iwl_mld_system_names array
wifi: iwlwifi: mld: Correct comments for cleanup functions
wifi: iwlwifi: mld: Fix ROC activity cleanup in iwl_mld_vif
wifi: iwlwifi: mld: move aux_sta member from iwl_mld_link to iwl_mld_vif
wifi: iwlwifi: mld: Block EMLSR only when ready to enter ROC
wifi: iwlwifi: mld: add support for ROC on BSS
wifi: iwlwifi: Add helper function to extract device ID
Paolo Abeni (33):
udp_tunnel: create a fastpath GRO lookup.
udp_tunnel: use static call for GRO hooks when possible
udp: properly deal with xfrm encap and ADDRFORM
Merge branch 'eth-fbnic-extend-hardware-stats-coverage'
Merge branch 'net-dsa-mt7530-modernize-mib-handling-fix'
Merge branch 'introducing-openvpn-data-channel-offload'
Merge branch 'mitigate-double-allocations-in-ioam6_iptunnel'
Merge branch 'net-pktgen-fix-checkpatch-code-style-errors-warnings'
Merge branch 'vxlan-convert-fdb-table-to-rhashtable'
Merge branch 'ionic-support-qsfp-cmis'
Merge branch 'ipv6-no-rtnl-for-ipv6-routing-table'
Merge branch 'ip-improve-tcp-sock-multipath-routing'
Merge branch 'tools-ynl-gen-additional-c-types-and-classic-netlink-handling'
Merge branch 'net-ibmveth-make-ibmveth-use-new-reset-function-and-new-kunit-testsg'
Merge tag 'nf-next-25-05-06' of git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-next
Merge branch 'net-phy-realtek-add-support-for-phy-leds'
Merge branch 'device-memory-tcp-tx'
Merge branch 'tools-ynl-gen-support-sub-types-for-binary-attributes'
Merge branch 'amd-xgbe-add-support-for-amd-renoir'
Merge branch 'eth-fbnic-add-devlink-dev-flash-support'
Merge branch 'octeontx2-improve-mailbox-tracing'
Merge branch 'net-cover-more-per-cpu-storage-with-local-nested-bh-locking'
Merge branch 'add-functions-for-txgbe-aml-devices'
Merge branch 'add-the-capability-to-consume-sram-for-hwfd-descriptor-queue-in-airoha_eth-driver'
Merge tag 'linux-can-next-for-6.16-20250522' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next
Merge tag 'ipsec-next-2025-05-23' of git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec-next
Merge tag 'nf-next-25-05-23' of git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-next
Merge branch 'net-convert-dev_set_mac_address-to-struct-sockaddr_storage'
Merge branch 'wireguard-updates-for-6-16'
Merge branch 'vsock-sock_linger-rework'
Merge branch 'octeontx2-pf-do-not-detect-macsec-block-based-on-silicon'
Merge branch 'net_sched-hfsc-address-reentrant-enqueue-adding-class-to-eltree-twice'
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pauli Virtanen (2):
Bluetooth: add support for SIOCETHTOOL ETHTOOL_GET_TS_INFO
Bluetooth: separate CIS_LINK and BIS_LINK link types
Pedro Falcato (1):
mptcp: Align mptcp_inet6_sk with other protocols
Pedro Tammela (2):
net_sched: hfsc: Address reentrant enqueue adding class to eltree twice
selftests/tc-testing: Add a test for HFSC eltree double add with reentrant enqueue behaviour on netem
Peter Chiu (7):
wifi: mt76: mt7996: rework WA mcu command for mt7990
wifi: mt76: mt7996: rework DMA configuration for mt7990
wifi: mt76: mt7996: adjust HW capabilities for mt7990
wifi: mt76: mt7996: add PCI device id for mt7990
wifi: mt76: mt7996: set EHT max ampdu length capability
wifi: mt76: mt7996: fix invalid NSS setting when TX path differs from NSS
wifi: mt76: mt7996: change max beacon size
Peter Seiderer (10):
net: pktgen: fix code style (ERROR: "foo * bar" should be "foo *bar")
net: pktgen: fix code style (ERROR: space prohibited after that '&')
net: pktgen: fix code style (WARNING: suspect code indent for conditional statements)
net: pktgen: fix code style (WARNING: Block comments)
net: pktgen: fix code style (WARNING: Missing a blank line after declarations)
net: pktgen: fix code style (WARNING: macros should not use a trailing semicolon)
net: pktgen: fix code style (WARNING: quoted string split across lines)
net: pktgen: fix code style (ERROR: else should follow close brace '}')
net: pktgen: fix code style (WARNING: please, no space before tabs)
net: pktgen: fix code style (WARNING: Prefer strscpy over strcpy)
Petr Malat (1):
sctp: Do not wake readers in __sctp_write_space()
Phil Sutter (14):
netfilter: nf_tables: Introduce functions freeing nft_hook objects
netfilter: nf_tables: Introduce nft_hook_find_ops{,_rcu}()
netfilter: nf_tables: Introduce nft_register_flowtable_ops()
netfilter: nf_tables: Pass nf_hook_ops to nft_unregister_flowtable_hook()
netfilter: nf_tables: Have a list of nf_hook_ops in nft_hook
netfilter: nf_tables: Prepare for handling NETDEV_REGISTER events
netfilter: nf_tables: Respect NETDEV_REGISTER events
netfilter: nf_tables: Wrap netdev notifiers
netfilter: nf_tables: Handle NETDEV_CHANGENAME events
netfilter: nf_tables: Sort labels in nft_netdev_hook_alloc()
netfilter: nf_tables: Support wildcard netdev hook specs
netfilter: nf_tables: Add notifications for hook changes
selftests: netfilter: Torture nftables netdev hooks
selftests: netfilter: Fix skip of wildcard interface test
Philipp Stanner (8):
net: prestera: Use pure PCI devres API
net: octeontx2: Use pure PCI devres API
net: tulip: Use pure PCI devres API
net: ethernet: natsemi: Use pure PCI devres API
net: ethernet: sis900: Use pure PCI devres API
net: mdio: thunder: Use pure PCI devres API
net: thunder_bgx: Use pure PCI devres API
net: thunder_bgx: Don't disable PCI device manually
Ping-Ke Shih (7):
wifi: rtw89: set 2TX for 1SS rate by default
wifi: rtw89: fw: cast mfw_hdr pointer from address of zeroth byte of firmware->data
wifi: rtw89: phy: reset value of force TX power for MAC ID
wifi: rtw89: 8852c: update supported firmware format to 2
wifi: rtw89: 8922a: rfk: adjust timeout time of RX DCK
wifi: rtw89: pci: configure manual DAC mode via PCI config API only
wifi: rtw89: pci: enlarge retry times of RX tag to 1000
Piotr Wejman (1):
net: e1000e: convert to ndo_hwtstamp_get() and ndo_hwtstamp_set()
Po-Hao Huang (12):
wifi: rtw89: 8922a: use SW CRYPTO when broadcast in MLO mode
wifi: rtw89: Adjust management queue mapping for [MLO, HW-1]
wifi: rtw89: Configure scan band when mlo_dbcc_mode changes
wifi: rtw89: extend join_info H2C command for MLO fields
wifi: rtw89: add MLD capabilities declaration
wifi: rtw89: Fill in correct Rx link ID for MLO
wifi: rtw89: allow driver to do specific band TX for MLO
wifi: rtw89: send nullfunc based on the given link
wifi: rtw89: add MLO track for MLSR switch decision
wifi: rtw89: debug: extend dbgfs for MLO
wifi: rtw89: debug: add MLD table dump
wifi: rtw89: debug: add FW log component for MLO
Pradeep Kumar Chitrapu (1):
wifi: ath12k: Fix incorrect rates sent to firmware
Przemek Kitszel (1):
ixgbe: wrap netdev_priv() usage
Qasim Ijaz (3):
wifi: mt76: mt7996: prevent uninit return in mt7996_mac_sta_add_links
wifi: mt76: mt7996: avoid NULL pointer dereference in mt7996_set_monitor()
wifi: mt76: mt7996: avoid null deref in mt7996_stop_phy()
Qiu Yutan (1):
net: neigh: use kfree_skb_reason() in neigh_resolve_output() and neigh_connected_output()
Raj Kumar Bhagat (3):
dt-bindings: net: wireless: describe the ath12k AHB module for IPQ5332
wifi: ath12k: add support for fixed QMI firmware memory
wifi: ath12k: fix cleanup path after mhi init
Rajat Soni (2):
wifi: ath12k: Add helper function ath12k_mac_update_freq_range()
wifi: ath12k: fix memory leak in ath12k_service_ready_ext_event
Raju Rangoju (6):
amd-xgbe: Convert to SPDX identifier
amd-xgbe: reorganize the code of XPCS access
amd-xgbe: reorganize the xgbe_pci_probe() code path
amd-xgbe: add support for new XPCS routines
amd-xgbe: Add XGBE_XPCS_ACCESS_V3 support to xgbe_pci_probe()
amd-xgbe: add support for new pci device id 0x1641
Ramasamy Kaliappan (4):
wifi: ath12k: Fix the QoS control field offset to build QoS header
wifi: cfg80211: Add support to get EMLSR capabilities of non-AP MLD
wifi: mac80211: update ML STA with EML capabilities
wifi: ath12k: update EMLSR capabilities of ML Station
Rameshkumar Sundaram (5):
wifi: ath12k: fix wrong handling of CCMP256 and GCMP ciphers
wifi: ath12k: avoid multiple skb_cb fetch in ath12k_mac_mgmt_tx_wmi()
wifi: ieee80211: Add helpers to fetch EMLSR delay and timeout values
wifi: nl80211: add link id of transmitted profile for MLO MBSSID
wifi: mac80211: restructure tx profile retrieval for MLO MBSSID
Ramya Gnanasekar (1):
wifi: ath12k: Fix WMI tag for EHT rate in peer assoc
Rand Deeb (1):
ixgbe: Fix unreachable retry logic in combined and byte I2C write functions
Rengarajan S (1):
net: lan743x: Modify the EEPROM and OTP size for PCI1xxxx devices
Rob Herring (Arm) (1):
wifi: ath11k: Use of_property_present() to test property presence
Rosen Penev (1):
wifi: ath9k: ahb: do ioremap resource in one step
Ruben Wauters (2):
tools: ynl: fix typo in info string
ipv4: ip_tunnel: Replace strcpy use with strscpy
Rui Salvaterra (1):
igc: enable HW vlan tag insertion/stripping by default
Russell King (Oracle) (43):
net: stmmac: provide stmmac_pltfr_find_clk()
net: stmmac: dwc-qos: use stmmac_pltfr_find_clk()
net: stmmac: stm32: simplify clock handling
net: ethtool: fix get_ts_stats() documentation
net: stmmac: dwc-qos: remove tegra_eqos_init()
net: stmmac: intel: remove eee_usecs_rate and hardware write
net: stmmac: intel-plat: remove eee_usecs_rate and hardware write
net: stmmac: remove eee_usecs_rate
net: stmmac: remove GMAC_1US_TIC_COUNTER definition
net: stmmac: qcom-ethqos: set serdes speed using serdes_speed
net: stmmac: qcom-ethqos: remove ethqos->speed
net: stmmac: qcom-ethqos: remove unnecessary setting max_speed
net: stmmac: qcom-ethqos: remove speed_mode_2500() method
net: stmmac: anarion: clean up anarion_config_dt() error handling
net: stmmac: anarion: clean up interface parsing
net: stmmac: anarion: use stmmac_pltfr_probe()
net: stmmac: anarion: use devm_stmmac_pltfr_probe()
net: stmmac: imx: use stmmac_pltfr_probe()
net: stmmac: ingenic: convert to stmmac_pltfr_pm_ops
net: stmmac: ingenic: convert to devm_stmmac_pltfr_probe()
net: stmmac: intel: remove unnecessary setting max_speed
net: stmmac: sun8i: use stmmac_pltfr_probe()
net: stmmac: sti: use phy_interface_mode_is_rgmii()
net: stmmac: sti: convert to devm_stmmac_pltfr_probe()
net: stmmac: sti: convert to stmmac_pltfr_pm_ops
net: stmmac: sunxi: convert to set_clk_tx_rate()
net: stmmac: sunxi: use stmmac_pltfr_probe()
net: stmmac: sunxi: use devm_stmmac_pltfr_probe()
net: stmmac: dwc-qos: use PHY clock-stop capability
net: stmmac: mediatek: stop initialising plat->mac_interface
net: stmmac: socfpga: init dwmac->stmmac_rst before registration
net: stmmac: socfpga: provide init function
net: stmmac: socfpga: convert to stmmac_pltfr_pm_ops
net: stmmac: socfpga: call set_phy_mode() before registration
net: stmmac: socfpga: convert to devm_stmmac_pltfr_probe()
net: stmmac: visconti: convert to set_clk_tx_rate() method
net: stmmac: dwc-qos: calibrate tegra with mdio bus idle
net: stmmac: use a local variable for priv->phylink_config
net: stmmac: use priv->plat->phy_interface directly
net: stmmac: add get_interfaces() platform method
net: stmmac: intel: move phy_interface init to tgl_common_data()
net: stmmac: intel: convert speed_mode_2500() to get_interfaces()
net: stmmac: remove speed_mode_2500() method
Saeed Mahameed (1):
net: Kconfig NET_DEVMEM selects GENERIC_ALLOCATOR
Saket Kumar Bhaskar (1):
selftests/bpf: Fix bpf selftest build warning
Salah Triki (1):
wireless: purelifi: plfxlc: fix memory leak in plfxlc_usb_wreq_asyn()
Samuel Williams (1):
wifi: mt76: mt7921: add 160 MHz AP for mt7922 device
Sarika Sharma (3):
wifi: ath12k: using msdu end descriptor to check for rx multicast packets
wifi: ath12k: correctly handle mcast packets for clients
wifi: ath12k: fix invalid access to memory
Sascha Hauer (13):
wifi: mwifiex: deduplicate code in mwifiex_cmd_tx_rate_cfg()
wifi: mwifiex: use adapter as context pointer for mwifiex_hs_activated_event()
wifi: mwifiex: drop unnecessary initialization
wifi: mwifiex: make region_code_mapping_t const
wifi: mwifiex: pass adapter to mwifiex_dnld_cmd_to_fw()
wifi: mwifiex: simplify mwifiex_setup_ht_caps()
wifi: mwifiex: fix indention
wifi: mwifiex: make locally used function static
wifi: mwifiex: move common settings out of switch/case
wifi: mwifiex: remove unnecessary queue empty check
wifi: mwifiex: let mwifiex_init_fw() return 0 for success
wifi: mwifiex: drop asynchronous init waiting code
wifi: mwifiex: remove mwifiex_sta_init_cmd() last argument
Sebastian Andrzej Siewior (18):
net: page_pool: Don't recycle into cache on PREEMPT_RT
net: dst_cache: Use nested-BH locking for dst_cache::cache
ipv4/route: Use this_cpu_inc() for stats on PREEMPT_RT
ipv6: sr: Use nested-BH locking for hmac_storage
xdp: Use nested-BH locking for system_page_pool
xfrm: Use nested-BH locking for nat_keepalive_sk_ipv[46]
openvswitch: Merge three per-CPU structures into one
openvswitch: Use nested-BH locking for ovs_pcpu_storage
openvswitch: Move ovs_frag_data_storage into the struct ovs_pcpu_storage
net/sched: act_mirred: Move the recursion counter struct netdev_xmit
net/sched: Use nested-BH locking for sch_frag_data_storage
mptcp: Use nested-BH locking for hmac_storage
rds: Disable only bottom halves in rds_page_remainder_alloc()
rds: Acquire per-CPU pointer within BH disabled section
rds: Use nested-BH locking for rds_page_remainder
netfilter: nf_dup{4, 6}: Move duplication check to task_struct
netfilter: nft_inner: Use nested-BH locking for nft_pcpu_tun_ctx
netfilter: nf_dup_netdev: Move the recursion counter struct netdev_xmit
Sergio Perez Gonzalez (1):
net: macb: Check return value of dma_set_mask_and_coherent()
Shannon Nelson (6):
ionic: extend the QSFP module sprom for more pages
ionic: support ethtool get_module_eeprom_by_page
ionic: add module eeprom channel data to ionic_if and ethtool
pds_core: remove extra name description
pds_core: smaller adminq poll starting interval
pds_core: init viftype default in declaration
Shay Drory (1):
net: Look for bonding slaves in the bond's network namespace
Shayne Chen (6):
wifi: mt76: mt7996: add macros for pci device ids
wifi: mt76: connac: rework TX descriptor and TX free for mt7990
Revert "wifi: mt76: mt7996: fill txd by host driver"
wifi: mt76: mt7996: fix RX buffer size of MCU event
wifi: mt76: fix available_antennas setting
wifi: mt76: support power delta calculation for 5 TX paths
Shengyu Qu (1):
net: bridge: locally receive all multicast packets if IFF_ALLMULTI is set
Shruti Parab (1):
bnxt_en: Report the ethtool coredump length after copying the coredump
Siddharth Vadapalli (2):
dt-bindings: net: ethernet-controller: add 5000M speed to fixed-link
dt-bindings: net: ti: k3-am654-cpsw-nuss: evaluate fixed-link property
Sidhanta Sahu (1):
wifi: ath12k: Fix memory leak due to multiple rx_stats allocation
Simon Horman (5):
octeon_ep_vf: Remove octep_vf_wq
s390: ism: Pass string literal as format argument of dev_set_name()
wifi: brcmsmac: Spelling corrections
net: dlink: Correct endian treatment of t_SROM data
net: ethernet: mtk_eth_soc: Correct spelling
Simon Wunderlich (1):
batman-adv: Start new development cycle
Sky Huang (2):
net: phy: mediatek: Sort config and file names in Kconfig and Makefile
net: phy: mediatek: add driver for built-in 2.5G ethernet PHY on MT7988
Slawomir Mrozowicz (4):
ixgbe: add E610 functions for acquiring flash data
ixgbe: read the OROM version information
ixgbe: read the netlist version information
ixgbe: devlink: add devlink region support for E610
Somashekhar Puttagangaiah (5):
wifi: iwlwifi: mld: allow EMLSR with 2.4 GHz when BT is ON
wifi: iwlwifi: mld: add kunit test for emlsr with bt on
wifi: iwlwifi: pcie: Add support for new device ids
wifi: iwlwifi: handle reasons recommended by FW for leaving EMLSR
wifi: iwlwifi: mld: add debug log instead of warning
Sowmiya Sree Elavalagan (4):
wifi: ath12k: Power up root PD
wifi: ath12k: Register various userPD interrupts and save SMEM entries
wifi: ath12k: Power up userPD
wifi: ath12k: Power down userPD
Sriram R (2):
wifi: ath12k: Pass correct values of center freq1 and center freq2 for 320 MHz
wifi: ath12k: Fix the enabling of REO queue lookup table feature
Stanislav Fomichev (8):
configs/debug: run and debug PREEMPT
net/mlx5: support software TX timestamp
net: devmem: TCP tx netlink api
selftests: net: validate team flags propagation
net: devmem: support single IOV with sendmsg
selftests: ncdevmem: make chunking optional
selftests: ncdevmem: add tx test with multiple IOVs
af_packet: move notifier's packet_dev_mc out of rcu critical section
StanleyYP Wang (7):
wifi: mt76: connac: add support to load firmware for mt7990
wifi: mt76: mt7996: rework register mapping for mt7990
wifi: mt76: mt7996: add eeprom support for mt7990
wifi: mt76: mt7996: rework background radar check for mt7990
wifi: mt76: mt7915: set correct background radar capability
wifi: mt76: mt7915: rework radar HWRDD idx
wifi: mt76: mt7996: rework radar HWRDD idx
Stefan Wahren (6):
dt-bindings: vertexcom-mse102x: Fix IRQ type in example
net: vertexcom: mse102x: Add warning about IRQ trigger type
net: vertexcom: mse102x: Drop invalid cmd stats
net: vertexcom: mse102x: Implement flag for valid CMD
net: vertexcom: mse102x: Return code for mse102x_rx_pkt_spi
net: vertexcom: mse102x: Simplify mse102x_rx_pkt_spi
Stefano Garzarella (4):
vsock/test: add timeout_usleep() to allow sleeping in timeout sections
vsock/test: retry send() to avoid occasional failure in sigpipe test
vsock/test: check also expected errno on sigpipe test
vsock/virtio: fix `rx_bytes` accounting for stream sockets
Stefano Radaelli (1):
net: phy: add driver for MaxLinear MxL86110 PHY
Steffen Klassert (2):
Merge branch 'xfrm & bonding: Correct use of xso.real_dev'
Merge branch 'Update offload configuration with SA'
Stone Zhang (1):
wifi: ath11k: fix node corruption in ar->arvifs list
Subbaraya Sundeep (8):
octeontx2-af: convert dev_dbg to tracepoint in mbox
octeontx2-af: Display names for CPT and UP messages
octeontx2: Add pcifunc also to mailbox tracepoints
octeontx2: Add new tracepoint otx2_msg_status
octeontx2-pf: Add tracepoint for NIX_PARSE_S
octeontx2-af: Send Link events one by one
octeontx2-af: Add MACSEC capability flag
octeontx2-pf: macsec: Get MACSEC capability flag from AF
Sumanth Gavini (4):
selftests: drv-net: Fix "envirnoments" to "environments"
selftests: nci: Fix "Electrnoics" to "Electronics"
selftests: net: Fix spellings
nfc: Correct Samsung "Electronics" spelling in copyright headers
Suraj Gupta (1):
net: xilinx: axienet: Fix Tx skb circular buffer occupancy check in dmaengine xmit
Suraj P Kizhakkethil (1):
wifi: ath12k: Pass correct values of center freq1 and center freq2 for 160 MHz
Sven Eckelmann (2):
batman-adv: Switch to crc32 header for crc32c
batman-adv: Drop unused net_namespace.h include
Taehee Yoo (2):
eth: bnxt: add support rx side device memory TCP
eth: bnxt: fix deadlock when xdp is attached or detached
Tatyana Nikolova (1):
ice: Replace ice specific DSCP mapping num with a kernel define
Thangaraj Samynathan (3):
net: lan743x: Allocate rings outside ZONE_DMA
net: lan743x: rename lan743x_reset_phy to lan743x_hw_reset_phy
net: lan743x: Fix PHY reset handling during initialization and WOL
Thiraviyam Mariyappan (1):
wifi: ath12k: Enable AST index based address search in Station Mode
Thomas WeiÃ?schuh (5):
wifi: ath10k: Don't use %pK through printk
wifi: ath11k: Don't use %pK through printk
wifi: ath12k: Don't use %pK through printk
wifi: wcn36xx: Don't use %pK through printk
wifi: mwifiex: Don't use %pK through printk
Thomas Wu (1):
wifi: ath12k: Disable broadcast TWT feature in HE MAC capabilities
Thorsten Blum (4):
hamradio: Remove unnecessary strscpy_pad() size arguments
rocker: Simplify if condition in ofdpa_port_fdb()
xfrm: Remove unnecessary strscpy_pad() size arguments
mptcp: pm: Return local variable instead of freed pointer
Ting-Ying Li (1):
wifi: brcmfmac: Fix structure size for WPA3 external SAE
Toke Høiland-Jørgensen (5):
page_pool: Move pp_magic check into helper functions
page_pool: Track DMA-mapped pages and unmap them when destroying the pool
tc: Return an error if filters try to attach too many actions
Revert "mac80211: Dynamically set CoDel parameters per station"
wifi: ath9k_htc: Abort software beacon handling if disabled
Tristram Ha (1):
net: dsa: microchip: Add SGMII port support to KSZ9477 switch
Tushar Vyavahare (2):
selftests/xsk: Add packet stream replacement function
selftests/xsk: Add tail adjustment tests and support check
Victor Nogueira (1):
selftests: tc-testing: Pre-load IFE action and its submodules
Vignesh C (1):
wifi: ath12k: Fix scan initiation failure handling
Vincent Mailhol (2):
can: dev: add struct data_bittiming_params to group FD parameters
selftests: can: test_raw_filter.sh: add support of physical interfaces
Vinith Kumar R (3):
wifi: ath12k: change soc name to device name
wifi: ath12k: Add device dp stats support
wifi: ath12k: print device dp stats in debugfs
Vlad Dogaru (17):
net/mlx5: HWS, Fix matcher action template attach
net/mlx5: HWS, Remove unused element array
net/mlx5: HWS, Make pool single resource
net/mlx5: HWS, Refactor pool implementation
net/mlx5: HWS, Cleanup after pool refactoring
net/mlx5: HWS, Add fullness tracking to pool
net/mlx5: HWS, Fix pool size optimization
net/mlx5: HWS, Implement action STE pool
net/mlx5: HWS, Use the new action STE pool
net/mlx5: HWS, Cleanup matcher action STE table
net/mlx5: HWS, Free unused action STE tables
net/mlx5: HWS, Export action STE tables to debugfs
net/mlx5: HWS, Fix IP version decision
net/mlx5: HWS, Harden IP version definer checks
net/mlx5: HWS, Disallow matcher IP version mixing
net/mlx5: SWS, fix reformat id error handling
net/mlx5: HWS, register reformat actions with fw
Vladimir Oltean (17):
net: ethtool: mm: extract stmmac verification logic into common library
net: dsa: convert to ndo_hwtstamp_get() and ndo_hwtstamp_set()
net: dpaa_eth: convert to ndo_hwtstamp_set()
net: dpaa_eth: add ndo_hwtstamp_get() implementation
net: dpaa_eth: simplify dpaa_ioctl()
net: dpaa2-eth: convert to ndo_hwtstamp_set()
net: dpaa2-eth: add ndo_hwtstamp_get() implementation
net: gianfar: convert to ndo_hwtstamp_get() and ndo_hwtstamp_set()
net: mvpp2: convert to ndo_hwtstamp_get() and ndo_hwtstamp_set()
net: ixp4xx_eth: convert to ndo_hwtstamp_get() and ndo_hwtstamp_set()
net: enetc: convert to ndo_hwtstamp_get() and ndo_hwtstamp_set()
net: mlxsw: convert to ndo_hwtstamp_get() and ndo_hwtstamp_set()
net: cpsw: convert to ndo_hwtstamp_get() and ndo_hwtstamp_set()
net: cpsw: isolate cpsw_ndo_ioctl() to just the old driver
net: lan743x: convert to ndo_hwtstamp_set()
net: lan743x: implement ndo_hwtstamp_get()
net: stmmac: convert to ndo_hwtstamp_get() and ndo_hwtstamp_set()
VÃctor Gonzalo (1):
wifi: iwlwifi: Add missing MODULE_FIRMWARE for Qu-c0-jf-b0
WangYuli (3):
bna: bnad_dim_timeout: Rename del_timer_sync in comment
Bluetooth: btusb: Add RTL8851BE device 0x0bda:0xb850
wireguard: selftests: cleanup CONFIG_UBSAN_SANITIZE_ALL
Wei Fang (17):
net: enetc: add initial netc-lib driver to support NTMP
net: enetc: add command BD ring support for i.MX95 ENETC
net: enetc: move generic MAC filtering interfaces to enetc-core
net: enetc: add MAC filtering for i.MX95 ENETC PF
net: enetc: add debugfs interface to dump MAC filter
net: enetc: add set/get_rss_table() hooks to enetc_si_ops
net: enetc: make enetc_set_rss_key() reusable
net: enetc: add RSS support for i.MX95 ENETC PF
net: enetc: change enetc_set_rss() to void type
net: enetc: enable RSS feature by default
net: enetc: extract enetc_refresh_vlan_ht_filter()
net: enetc: move generic VLAN hash filter functions to enetc_pf_common.c
net: enetc: add VLAN filtering support for i.MX95 ENETC PF
net: enetc: add loopback support for i.MX95 ENETC PF
net: enetc: fix implicit declaration of function FIELD_PREP
net: enetc: fix the error handling in enetc4_pf_netdev_create()
net: phy: clear phydev->devlink when the link is deleted
Wen Gong (6):
wifi: ath12k: add configure country code for WCN7850
wifi: ath12k: use correct WMI command to set country code for WCN7850
wifi: ath12k: add 11d scan offload support
wifi: ath12k: store and send country code to firmware after recovery
wifi: ath12k: avoid deadlock during regulatory update in ath12k_regd_update()
wifi: ath12k: read country code from SMBIOS for WCN7850
Wentao Liang (4):
octeontx2-pf: Add error log forcn10k_map_unmap_rq_policer()
wifi: brcm80211: fmac: Add error log in brcmf_usb_dl_cmd()
net/mlx5_core: Add error handling inmlx5_query_nic_vport_qkey_viol_cntr()
net/mlx5: Add error handling in mlx5_query_nic_vport_node_guid()
Willem de Bruijn (3):
ipv4: prefer multipath nexthop that matches source address
ip: load balance tcp connections to single dst addr and port
selftests/net: test tcp connection load balancing
Xuanqiang Luo (1):
netfilter: conntrack: Remove redundant NFCT_ALIGN call
Yang Li (1):
wifi: iwlwifi: mvm: Remove duplicated include in iwl-utils.c
Yedidya Benshimol (3):
wifi: iwlwifi: Add a new version for sta config command
wifi: iwlwifi: Add a new version for mac config command
wifi: iwlwifi: Add support for a new version for link config command
Yevgeny Kliteynik (12):
net/mlx5: HWS, expose function mlx5hws_table_ft_set_next_ft in header
net/mlx5: HWS, add definer function to get field name str
net/mlx5: HWS, expose polling function in header file
net/mlx5: HWS, introduce isolated matchers
net/mlx5: HWS, support complex matchers
net/mlx5: HWS, force rehash when rule insertion failed
net/mlx5: HWS, fix counting of rules in the matcher
net/mlx5: HWS, fix redundant extension of action templates
net/mlx5: HWS, rework rehash loop
net/mlx5: HWS, dump bad completion details
net/mlx5: HWS, fix typo - 'nope' to 'nop'
net/mlx5: HWS, handle modify header actions dependency
Yingying Tang (2):
wifi: ath12k: Reorder and relocate the release of resources in ath12k_core_deinit()
wifi: ath12k: Adjust the process of resource release for ahb bus
Yixun Lan (1):
dt-bindings: net: sun8i-emac: Add A523 EMAC0 compatible
Yong Wang (3):
net: bridge: mcast: re-implement br_multicast_{enable, disable}_port functions
net: bridge: mcast: update multicast contex when vlan state is changed
selftests: net/bridge : add tests for per vlan snooping with stp state changes
Youn MÃ?LOIS (1):
Bluetooth: btusb: Add new VID/PID 13d3/3613 for MT7925
Yu Zhang(Yuriy) (1):
wifi: ath11k: support DBS and DFS compatibility
Yury Norov (1):
wifi: carl9170: micro-optimize carl9170_tx_shift_bm()
Yuuki NAGAO (1):
wifi: rtw88: rtw8822bu VID/PID for BUFFALO WI-U2-866DM
Zak Kemble (3):
net: bcmgenet: switch to use 64bit statistics
net: bcmgenet: count hw discarded packets in missed stat
net: bcmgenet: expose more stats in ethtool
Zhen XIN (2):
wifi: rtw88: sdio: map mgmt frames to queue TX_DESC_QSEL_MGMT
wifi: rtw88: sdio: call rtw_sdio_indicate_tx_status unconditionally
Zhengchao Shao (1):
ipv4: remove unnecessary judgment in ip_route_output_key_hash_rcu
Zhongqiu Duan (1):
netfilter: nft_quota: match correctly when the quota just depleted
Zijun Hu (2):
sock: Correct error checking condition for (assign|release)_proto_idx()
net: Delete the outer () duplicated of macro SOCK_SKB_CB_OFFSET definition
Zilin Guan (2):
xfrm: use kfree_sensitive() for SA secret zeroization
tipc: use kfree_sensitive() for aead cleanup
Zong-Zhe Yang (37):
wifi: rtw89: fix typo of "access" in rtw89_sar_info description
wifi: rtw89: regd: introduce string getter for reuse
wifi: rtw89: sar: introduce structure to wrap query parameters
wifi: rtw89: sar: add skeleton for SAR configuration via ACPI
wifi: rtw89: acpi: introduce method evaluation function for reuse
wifi: rtw89: acpi: support loading static SAR table
wifi: rtw89: acpi: support loading dynamic SAR tables and indicator
wifi: rtw89: acpi: support loading GEO SAR tables
wifi: rtw89: sar: add skeleton for different configs by antenna
wifi: rtw89: 8922a: support different SAR configs by antenna
wifi: rtw89: 8852c: support different SAR configs by antenna
wifi: rtw89: 8852bx: support different SAR configs by antenna
wifi: rtw89: regd: indicate if regd_UK TX power settings follow regd_ETSI
wifi: rtw89: add suffix "_ax" to Wi-Fi 6 HW scan struct and func
wifi: rtw89: refactor flow that hw scan handles channel list
wifi: rtw89: mcc: make GO announce one-time NoA for HW scan process
wifi: rtw89: don't re-randomize TSF of AP/GO
wifi: rtw89: mcc: make GO+STA mode calculate dynamic beacon offset
wifi: rtw89: mcc: handle the case where NoA start time has passed
wifi: rtw89: mcc: update entire plan when courtesy config changes
wifi: rtw89: mcc: support courtesy mechanism on both roles at the same time
wifi: rtw89: mcc: refine filling function of start TSF
wifi: rtw89: mcc: avoid that loose pattern sets negative timing for auxiliary GO
wifi: rtw89: extend mapping from Qsel to DMA ch for MLO
wifi: rtw89: roc: dynamically handle link id and link instance index
wifi: rtw89: introduce helper to get designated link for MLO
wifi: rtw89: extract link part from core tx write function
wifi: rtw89: chan: re-calculate MLO DBCC mode during setting channel
wifi: rtw89: add handling of mlo_link_cfg H2C command and C2H event
wifi: rtw89: debug: add mlo_mode dbgfs
wifi: rtw89: declare MLO support if prerequisites are met
wifi: rtw89: mcc: pass whom to stop at when pausing chanctx
wifi: rtw89: mcc: drop queued chanctx changes when stopping
wifi: rtw89: mcc: add courtesy mechanism conditions to P2P roles
wifi: rtw89: mcc: introduce calculation of anchor pattern
wifi: rtw89: mcc: deal with non-periodic NoA
wifi: rtw89: mcc: avoid redundant recalculations if no chance to improve
sunliming (1):
wifi: mt76: mt7996: fix uninitialized symbol warning
zhenwei pi (1):
selftests: mptcp: use IPPROTO_MPTCP for getaddrinfo
Documentation/admin-guide/bug-hunting.rst | 2 +-
.../devicetree/bindings/net/aeonsemi,as21xxx.yaml | 122 +
.../devicetree/bindings/net/airoha,en7581-eth.yaml | 13 +
.../bindings/net/allwinner,sun8i-a83t-emac.yaml | 1 +
.../bindings/net/bluetooth/nxp,88w8987-bt.yaml | 17 +
.../devicetree/bindings/net/brcm,asp-v2.0.yaml | 23 +-
.../devicetree/bindings/net/brcm,unimac-mdio.yaml | 2 +-
.../bindings/net/can/renesas,rcar-canfd.yaml | 171 +-
.../bindings/net/dsa/mediatek,mt7530.yaml | 5 +
.../bindings/net/ethernet-controller.yaml | 27 +-
.../devicetree/bindings/net/ethernet-phy.yaml | 10 +
.../devicetree/bindings/net/network-class.yaml | 46 +
.../bindings/net/renesas,r9a09g057-gbeth.yaml | 203 ++
.../devicetree/bindings/net/snps,dwmac.yaml | 27 +-
.../devicetree/bindings/net/ti,dp83822.yaml | 4 +
.../bindings/net/ti,k3-am654-cpsw-nuss.yaml | 2 +
.../devicetree/bindings/net/vertexcom-mse102x.yaml | 2 +-
.../devicetree/bindings/net/via,vt8500-rhine.yaml | 41 +
.../devicetree/bindings/net/via-rhine.txt | 17 -
.../bindings/net/wireless/brcm,bcm4329-fmac.yaml | 2 +-
.../bindings/net/wireless/qcom,ath12k.yaml | 6 +
.../bindings/net/wireless/qcom,ipq5332-wifi.yaml | 315 +++
.../bindings/net/wireless/silabs,wfx.yaml | 5 +-
.../bindings/net/wireless/wireless-controller.yaml | 23 +
.../devicetree/bindings/soc/qcom/qcom,wcnss.yaml | 5 +-
Documentation/netlink/genetlink-c.yaml | 3 +
Documentation/netlink/genetlink-legacy.yaml | 3 +
Documentation/netlink/netlink-raw.yaml | 3 +
Documentation/netlink/specs/devlink.yaml | 24 +
Documentation/netlink/specs/ethtool.yaml | 27 +
Documentation/netlink/specs/netdev.yaml | 12 +
Documentation/netlink/specs/nl80211.yaml | 68 -
Documentation/netlink/specs/ovpn.yaml | 367 +++
Documentation/netlink/specs/ovs_datapath.yaml | 10 +-
Documentation/netlink/specs/ovs_vport.yaml | 5 +-
.../netlink/specs/{rt_addr.yaml => rt-addr.yaml} | 24 +-
.../netlink/specs/{rt_link.yaml => rt-link.yaml} | 248 +-
.../netlink/specs/{rt_neigh.yaml => rt-neigh.yaml} | 12 +-
.../netlink/specs/{rt_route.yaml => rt-route.yaml} | 22 +-
.../netlink/specs/{rt_rule.yaml => rt-rule.yaml} | 8 +-
Documentation/netlink/specs/tc.yaml | 514 +++--
Documentation/networking/dccp.rst | 219 --
.../device_drivers/ethernet/huawei/hinic3.rst | 137 ++
.../networking/device_drivers/ethernet/index.rst | 2 +
.../device_drivers/ethernet/meta/fbnic.rst | 60 +
.../device_drivers/ethernet/ti/icssg_prueth.rst | 56 +
Documentation/networking/devlink/devlink-info.rst | 4 +
Documentation/networking/devlink/devlink-trap.rst | 2 +-
Documentation/networking/devlink/index.rst | 1 +
Documentation/networking/devlink/ixgbe.rst | 171 ++
Documentation/networking/devmem.rst | 150 +-
Documentation/networking/index.rst | 1 -
Documentation/networking/ip-sysctl.rst | 8 +-
.../networking/net_cachelines/net_device.rst | 3 +-
Documentation/networking/net_cachelines/snmp.rst | 2 +
Documentation/networking/netdev-features.rst | 5 +
Documentation/networking/netdevices.rst | 67 +-
Documentation/networking/netmem.rst | 23 +-
Documentation/networking/rds.rst | 8 +-
Documentation/networking/rxrpc.rst | 39 +-
Documentation/networking/tproxy.rst | 4 +-
Documentation/networking/xfrm_device.rst | 10 +-
.../translations/zh_CN/admin-guide/bug-hunting.rst | 2 +-
.../translations/zh_TW/admin-guide/bug-hunting.rst | 2 +-
.../userspace-api/netlink/netlink-raw.rst | 2 +-
MAINTAINERS | 50 +-
arch/alpha/include/uapi/asm/socket.h | 2 +
arch/m68k/coldfire/m5272.c | 2 +-
arch/m68k/configs/amiga_defconfig | 2 -
arch/m68k/configs/apollo_defconfig | 2 -
arch/m68k/configs/atari_defconfig | 2 -
arch/m68k/configs/bvme6000_defconfig | 2 -
arch/m68k/configs/hp300_defconfig | 2 -
arch/m68k/configs/mac_defconfig | 2 -
arch/m68k/configs/multi_defconfig | 2 -
arch/m68k/configs/mvme147_defconfig | 2 -
arch/m68k/configs/mvme16x_defconfig | 2 -
arch/m68k/configs/q40_defconfig | 2 -
arch/m68k/configs/sun3_defconfig | 2 -
arch/m68k/configs/sun3x_defconfig | 2 -
arch/mips/bcm47xx/setup.c | 2 +-
arch/mips/configs/bigsur_defconfig | 1 -
arch/mips/configs/gpr_defconfig | 1 -
arch/mips/configs/mtx1_defconfig | 1 -
arch/mips/include/uapi/asm/socket.h | 2 +
arch/parisc/include/uapi/asm/socket.h | 2 +
arch/powerpc/configs/pmac32_defconfig | 1 -
arch/powerpc/configs/ppc6xx_defconfig | 1 -
arch/sparc/include/uapi/asm/socket.h | 2 +
crypto/krb5/rfc3961_simplified.c | 1 +
drivers/bcma/driver_gpio.c | 8 +-
drivers/bluetooth/Kconfig | 12 -
drivers/bluetooth/btintel.c | 13 +-
drivers/bluetooth/btintel.h | 6 -
drivers/bluetooth/btintel_pcie.c | 141 +-
drivers/bluetooth/btintel_pcie.h | 19 +
drivers/bluetooth/btmrvl_sdio.c | 4 +-
drivers/bluetooth/btmtksdio.c | 2 +-
drivers/bluetooth/btnxpuart.c | 58 +-
drivers/bluetooth/btusb.c | 204 +-
drivers/bluetooth/hci_aml.c | 3 +-
drivers/infiniband/hw/irdma/main.c | 125 +-
drivers/infiniband/hw/irdma/main.h | 3 +-
drivers/infiniband/hw/irdma/osdep.h | 2 +-
drivers/infiniband/hw/irdma/type.h | 4 +-
drivers/infiniband/sw/siw/Kconfig | 1 +
drivers/infiniband/sw/siw/siw.h | 22 +-
drivers/infiniband/ulp/ipoib/ipoib.h | 13 +-
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 65 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 127 +-
drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 8 +-
drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 19 +-
drivers/net/Kconfig | 15 +
drivers/net/Makefile | 1 +
drivers/net/bareudp.c | 16 +-
drivers/net/bonding/bond_alb.c | 8 +-
drivers/net/bonding/bond_main.c | 180 +-
drivers/net/can/ctucanfd/ctucanfd_base.c | 8 +-
drivers/net/can/dev/dev.c | 12 +-
drivers/net/can/dev/netlink.c | 74 +-
drivers/net/can/flexcan/flexcan-core.c | 4 +-
drivers/net/can/ifi_canfd/ifi_canfd.c | 10 +-
drivers/net/can/kvaser_pciefd.c | 6 +-
drivers/net/can/m_can/m_can.c | 8 +-
drivers/net/can/peak_canfd/peak_canfd.c | 6 +-
drivers/net/can/rcar/rcar_canfd.c | 280 ++-
drivers/net/can/rockchip/rockchip_canfd-core.c | 4 +-
.../net/can/rockchip/rockchip_canfd-timestamp.c | 2 +-
drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c | 10 +-
drivers/net/can/usb/esd_usb.c | 6 +-
drivers/net/can/usb/etas_es58x/es58x_core.c | 4 +-
drivers/net/can/usb/etas_es58x/es58x_fd.c | 6 +-
drivers/net/can/usb/gs_usb.c | 8 +-
drivers/net/can/usb/kvaser_usb/kvaser_usb.h | 2 +-
drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c | 6 +-
drivers/net/can/usb/peak_usb/pcan_usb_core.c | 6 +-
drivers/net/can/xilinx_can.c | 16 +-
drivers/net/dsa/b53/b53_common.c | 28 +
drivers/net/dsa/b53/b53_priv.h | 1 +
drivers/net/dsa/b53/b53_regs.h | 7 +
drivers/net/dsa/bcm_sf2.c | 1 +
drivers/net/dsa/dsa_loop.c | 2 +-
drivers/net/dsa/hirschmann/hellcreek.h | 2 +-
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c | 24 +-
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.h | 5 +-
drivers/net/dsa/microchip/Kconfig | 1 +
drivers/net/dsa/microchip/ksz9477.c | 194 +-
drivers/net/dsa/microchip/ksz9477.h | 4 +-
drivers/net/dsa/microchip/ksz_common.c | 134 +-
drivers/net/dsa/microchip/ksz_common.h | 44 +-
drivers/net/dsa/microchip/ksz_ptp.c | 26 +-
drivers/net/dsa/microchip/ksz_ptp.h | 7 +-
drivers/net/dsa/mt7530-mmio.c | 1 +
drivers/net/dsa/mt7530.c | 270 ++-
drivers/net/dsa/mt7530.h | 60 +-
drivers/net/dsa/mv88e6xxx/chip.h | 2 +-
drivers/net/dsa/mv88e6xxx/hwtstamp.c | 24 +-
drivers/net/dsa/mv88e6xxx/hwtstamp.h | 16 +-
drivers/net/dsa/mv88e6xxx/ptp.c | 11 +-
drivers/net/dsa/ocelot/felix.c | 11 +-
drivers/net/dsa/rzn1_a5psw.c | 5 +-
drivers/net/dsa/sja1105/sja1105_ptp.c | 46 +-
drivers/net/dsa/sja1105/sja1105_ptp.h | 7 +-
drivers/net/ethernet/airoha/Kconfig | 7 +
drivers/net/ethernet/airoha/airoha_eth.c | 492 +++-
drivers/net/ethernet/airoha/airoha_eth.h | 102 +-
drivers/net/ethernet/airoha/airoha_npu.c | 178 +-
drivers/net/ethernet/airoha/airoha_npu.h | 4 +-
drivers/net/ethernet/airoha/airoha_ppe.c | 485 +++-
drivers/net/ethernet/airoha/airoha_ppe_debugfs.c | 9 +-
drivers/net/ethernet/airoha/airoha_regs.h | 203 +-
drivers/net/ethernet/amazon/ena/ena_netdev.c | 2 +-
drivers/net/ethernet/amd/pds_core/adminq.c | 4 +-
drivers/net/ethernet/amd/pds_core/core.c | 7 +-
drivers/net/ethernet/amd/xgbe/xgbe-common.h | 122 +-
drivers/net/ethernet/amd/xgbe/xgbe-dcb.c | 117 +-
drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c | 117 +-
drivers/net/ethernet/amd/xgbe/xgbe-desc.c | 117 +-
drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 268 +--
drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 117 +-
drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c | 117 +-
drivers/net/ethernet/amd/xgbe/xgbe-i2c.c | 117 +-
drivers/net/ethernet/amd/xgbe/xgbe-main.c | 117 +-
drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 117 +-
drivers/net/ethernet/amd/xgbe/xgbe-pci.c | 204 +-
drivers/net/ethernet/amd/xgbe/xgbe-phy-v1.c | 117 +-
drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 117 +-
drivers/net/ethernet/amd/xgbe/xgbe-platform.c | 117 +-
drivers/net/ethernet/amd/xgbe/xgbe-ptp.c | 117 +-
drivers/net/ethernet/amd/xgbe/xgbe-smn.h | 30 +
drivers/net/ethernet/amd/xgbe/xgbe.h | 128 +-
drivers/net/ethernet/apple/bmac.c | 60 +-
drivers/net/ethernet/aquantia/atlantic/aq_main.c | 1 -
drivers/net/ethernet/aquantia/atlantic/aq_nic.c | 2 +
drivers/net/ethernet/broadcom/Kconfig | 1 +
drivers/net/ethernet/broadcom/asp2/bcmasp.c | 176 +-
drivers/net/ethernet/broadcom/asp2/bcmasp.h | 78 +-
.../net/ethernet/broadcom/asp2/bcmasp_ethtool.c | 36 +-
drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c | 13 +-
.../net/ethernet/broadcom/asp2/bcmasp_intf_defs.h | 3 +-
drivers/net/ethernet/broadcom/bgmac.c | 2 +-
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 214 +-
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 3 +-
drivers/net/ethernet/broadcom/bnxt/bnxt_coredump.c | 11 +-
drivers/net/ethernet/broadcom/bnxt/bnxt_hwrm.h | 2 +-
drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c | 5 -
drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h | 4 -
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 4 +-
drivers/net/ethernet/broadcom/genet/bcmgenet.c | 277 ++-
drivers/net/ethernet/broadcom/genet/bcmgenet.h | 32 +-
drivers/net/ethernet/broadcom/genet/bcmmii.c | 2 +-
drivers/net/ethernet/broadcom/tg3.c | 23 +-
drivers/net/ethernet/brocade/bna/bnad.c | 2 +-
drivers/net/ethernet/cadence/macb_main.c | 6 +-
drivers/net/ethernet/cavium/thunder/nicvf_queues.c | 8 +-
drivers/net/ethernet/cavium/thunder/thunder_bgx.c | 13 +-
drivers/net/ethernet/chelsio/cxgb/cxgb2.c | 2 +-
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 20 +-
drivers/net/ethernet/chelsio/cxgb4/cxgb4_thermal.c | 2 +-
drivers/net/ethernet/chelsio/cxgb4/sge.c | 5 +-
.../chelsio/inline_crypto/ch_ipsec/chcr_ipsec.c | 18 +-
.../chelsio/inline_crypto/ch_ktls/chcr_ktls.c | 2 +-
drivers/net/ethernet/cisco/enic/enic.h | 1 +
drivers/net/ethernet/cisco/enic/enic_main.c | 3 +-
drivers/net/ethernet/cortina/gemini.c | 37 +-
drivers/net/ethernet/dec/tulip/tulip_core.c | 2 +-
drivers/net/ethernet/dec/tulip/winbond-840.c | 2 +-
drivers/net/ethernet/dlink/dl2k.c | 14 +-
drivers/net/ethernet/dlink/dl2k.h | 18 +-
drivers/net/ethernet/emulex/benet/be_cmds.c | 8 +-
drivers/net/ethernet/emulex/benet/be_cmds.h | 2 +-
drivers/net/ethernet/faraday/ftgmac100.c | 2 +-
drivers/net/ethernet/freescale/Kconfig | 1 -
drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 41 +-
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 41 +-
drivers/net/ethernet/freescale/enetc/Kconfig | 12 +-
drivers/net/ethernet/freescale/enetc/Makefile | 4 +
drivers/net/ethernet/freescale/enetc/enetc.c | 123 +-
drivers/net/ethernet/freescale/enetc/enetc.h | 51 +-
.../net/ethernet/freescale/enetc/enetc4_debugfs.c | 90 +
.../net/ethernet/freescale/enetc/enetc4_debugfs.h | 20 +
drivers/net/ethernet/freescale/enetc/enetc4_hw.h | 12 +
drivers/net/ethernet/freescale/enetc/enetc4_pf.c | 369 ++-
drivers/net/ethernet/freescale/enetc/enetc_cbdr.c | 50 +
.../net/ethernet/freescale/enetc/enetc_ethtool.c | 78 +-
drivers/net/ethernet/freescale/enetc/enetc_pf.c | 107 +-
drivers/net/ethernet/freescale/enetc/enetc_pf.h | 14 +-
.../net/ethernet/freescale/enetc/enetc_pf_common.c | 93 +-
.../net/ethernet/freescale/enetc/enetc_pf_common.h | 3 +
drivers/net/ethernet/freescale/enetc/enetc_vf.c | 12 +-
drivers/net/ethernet/freescale/enetc/ntmp.c | 462 ++++
.../net/ethernet/freescale/enetc/ntmp_private.h | 104 +
drivers/net/ethernet/freescale/gianfar.c | 53 +-
drivers/net/ethernet/google/gve/gve_ethtool.c | 4 +-
drivers/net/ethernet/google/gve/gve_main.c | 9 +-
drivers/net/ethernet/google/gve/gve_tx_dqo.c | 8 +-
drivers/net/ethernet/huawei/Kconfig | 1 +
drivers/net/ethernet/huawei/Makefile | 1 +
drivers/net/ethernet/huawei/hinic3/Kconfig | 20 +
drivers/net/ethernet/huawei/hinic3/Makefile | 21 +
drivers/net/ethernet/huawei/hinic3/hinic3_common.c | 53 +
drivers/net/ethernet/huawei/hinic3/hinic3_common.h | 27 +
drivers/net/ethernet/huawei/hinic3/hinic3_hw_cfg.c | 25 +
drivers/net/ethernet/huawei/hinic3/hinic3_hw_cfg.h | 53 +
.../net/ethernet/huawei/hinic3/hinic3_hw_comm.c | 32 +
.../net/ethernet/huawei/hinic3/hinic3_hw_comm.h | 13 +
.../net/ethernet/huawei/hinic3/hinic3_hw_intf.h | 113 +
drivers/net/ethernet/huawei/hinic3/hinic3_hwdev.c | 24 +
drivers/net/ethernet/huawei/hinic3/hinic3_hwdev.h | 81 +
drivers/net/ethernet/huawei/hinic3/hinic3_hwif.c | 21 +
drivers/net/ethernet/huawei/hinic3/hinic3_hwif.h | 58 +
drivers/net/ethernet/huawei/hinic3/hinic3_irq.c | 62 +
drivers/net/ethernet/huawei/hinic3/hinic3_lld.c | 414 ++++
drivers/net/ethernet/huawei/hinic3/hinic3_lld.h | 21 +
drivers/net/ethernet/huawei/hinic3/hinic3_main.c | 354 +++
drivers/net/ethernet/huawei/hinic3/hinic3_mbox.c | 16 +
drivers/net/ethernet/huawei/hinic3/hinic3_mbox.h | 15 +
drivers/net/ethernet/huawei/hinic3/hinic3_mgmt.h | 13 +
.../ethernet/huawei/hinic3/hinic3_mgmt_interface.h | 105 +
.../net/ethernet/huawei/hinic3/hinic3_netdev_ops.c | 78 +
.../net/ethernet/huawei/hinic3/hinic3_nic_cfg.c | 233 ++
.../net/ethernet/huawei/hinic3/hinic3_nic_cfg.h | 41 +
.../net/ethernet/huawei/hinic3/hinic3_nic_dev.h | 82 +
drivers/net/ethernet/huawei/hinic3/hinic3_nic_io.c | 21 +
drivers/net/ethernet/huawei/hinic3/hinic3_nic_io.h | 120 +
.../ethernet/huawei/hinic3/hinic3_queue_common.c | 68 +
.../ethernet/huawei/hinic3/hinic3_queue_common.h | 54 +
drivers/net/ethernet/huawei/hinic3/hinic3_rx.c | 341 +++
drivers/net/ethernet/huawei/hinic3/hinic3_rx.h | 90 +
drivers/net/ethernet/huawei/hinic3/hinic3_tx.c | 670 ++++++
drivers/net/ethernet/huawei/hinic3/hinic3_tx.h | 135 ++
drivers/net/ethernet/huawei/hinic3/hinic3_wq.c | 29 +
drivers/net/ethernet/huawei/hinic3/hinic3_wq.h | 76 +
drivers/net/ethernet/ibm/Kconfig | 13 +
drivers/net/ethernet/ibm/ibmveth.c | 358 ++-
drivers/net/ethernet/ibm/ibmveth.h | 65 +-
drivers/net/ethernet/intel/Kconfig | 3 +
drivers/net/ethernet/intel/e1000e/e1000.h | 2 +-
drivers/net/ethernet/intel/e1000e/netdev.c | 75 +-
drivers/net/ethernet/intel/i40e/i40e_common.c | 7 +-
drivers/net/ethernet/intel/ice/devlink/devlink.c | 45 +-
drivers/net/ethernet/intel/ice/ice.h | 67 +-
drivers/net/ethernet/intel/ice/ice_common.c | 22 +-
drivers/net/ethernet/intel/ice/ice_common.h | 3 +-
drivers/net/ethernet/intel/ice/ice_dcb.c | 2 +-
drivers/net/ethernet/intel/ice/ice_dcb_lib.c | 49 +-
drivers/net/ethernet/intel/ice/ice_dcb_lib.h | 9 +
drivers/net/ethernet/intel/ice/ice_dcb_nl.c | 4 +-
drivers/net/ethernet/intel/ice/ice_eswitch.c | 6 +
drivers/net/ethernet/intel/ice/ice_ethtool.c | 10 +-
drivers/net/ethernet/intel/ice/ice_ethtool_fdir.c | 2 +-
drivers/net/ethernet/intel/ice/ice_idc.c | 207 +-
drivers/net/ethernet/intel/ice/ice_idc_int.h | 5 +-
drivers/net/ethernet/intel/ice/ice_lib.c | 71 +-
drivers/net/ethernet/intel/ice/ice_lib.h | 3 +-
drivers/net/ethernet/intel/ice/ice_main.c | 81 +-
drivers/net/ethernet/intel/ice/ice_ptp.c | 65 +-
drivers/net/ethernet/intel/ice/ice_ptp_hw.c | 82 +-
drivers/net/ethernet/intel/ice/ice_ptp_hw.h | 5 -
drivers/net/ethernet/intel/ice/ice_repr.c | 10 +-
drivers/net/ethernet/intel/ice/ice_sbq_cmd.h | 11 +-
drivers/net/ethernet/intel/ice/ice_sriov.c | 4 +
drivers/net/ethernet/intel/ice/ice_switch.c | 4 +-
drivers/net/ethernet/intel/ice/ice_tc_lib.c | 266 ++-
drivers/net/ethernet/intel/ice/ice_tc_lib.h | 11 +-
drivers/net/ethernet/intel/ice/ice_txrx.c | 17 +-
drivers/net/ethernet/intel/ice/ice_type.h | 7 +-
drivers/net/ethernet/intel/ice/ice_vf_lib.c | 26 +
drivers/net/ethernet/intel/ice/ice_vf_lib.h | 12 +
drivers/net/ethernet/intel/ice/ice_virtchnl.c | 53 +-
drivers/net/ethernet/intel/idpf/Kconfig | 1 +
drivers/net/ethernet/intel/idpf/Makefile | 3 +
drivers/net/ethernet/intel/idpf/idpf.h | 19 +
.../net/ethernet/intel/idpf/idpf_controlq_api.h | 3 +
drivers/net/ethernet/intel/idpf/idpf_dev.c | 14 +
drivers/net/ethernet/intel/idpf/idpf_ethtool.c | 67 +
drivers/net/ethernet/intel/idpf/idpf_lan_pf_regs.h | 4 +
drivers/net/ethernet/intel/idpf/idpf_lan_txrx.h | 13 +-
drivers/net/ethernet/intel/idpf/idpf_lib.c | 75 +-
drivers/net/ethernet/intel/idpf/idpf_main.c | 9 +-
drivers/net/ethernet/intel/idpf/idpf_ptp.c | 873 +++++++
drivers/net/ethernet/intel/idpf/idpf_ptp.h | 362 +++
.../net/ethernet/intel/idpf/idpf_singleq_txrx.c | 25 +-
drivers/net/ethernet/intel/idpf/idpf_txrx.c | 171 +-
drivers/net/ethernet/intel/idpf/idpf_txrx.h | 18 +-
drivers/net/ethernet/intel/idpf/idpf_virtchnl.c | 161 +-
drivers/net/ethernet/intel/idpf/idpf_virtchnl.h | 84 +
.../net/ethernet/intel/idpf/idpf_virtchnl_ptp.c | 615 +++++
drivers/net/ethernet/intel/idpf/virtchnl2.h | 314 ++-
drivers/net/ethernet/intel/igb/igb.h | 5 +-
drivers/net/ethernet/intel/igb/igb_main.c | 78 +-
drivers/net/ethernet/intel/igb/igb_ptp.c | 20 +-
drivers/net/ethernet/intel/igb/igb_xsk.c | 1 +
drivers/net/ethernet/intel/igc/igc.h | 16 +-
drivers/net/ethernet/intel/igc/igc_base.h | 1 +
drivers/net/ethernet/intel/igc/igc_defines.h | 55 +-
drivers/net/ethernet/intel/igc/igc_ethtool.c | 81 +
drivers/net/ethernet/intel/igc/igc_main.c | 90 +-
drivers/net/ethernet/intel/igc/igc_ptp.c | 14 +-
drivers/net/ethernet/intel/igc/igc_regs.h | 16 +
drivers/net/ethernet/intel/igc/igc_tsn.c | 247 +-
drivers/net/ethernet/intel/igc/igc_tsn.h | 52 +
drivers/net/ethernet/intel/ixgbe/Makefile | 4 +-
drivers/net/ethernet/intel/ixgbe/devlink/devlink.c | 557 +++++
drivers/net/ethernet/intel/ixgbe/devlink/devlink.h | 12 +
drivers/net/ethernet/intel/ixgbe/devlink/region.c | 290 +++
drivers/net/ethernet/intel/ixgbe/ixgbe.h | 24 +
drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c | 1 +
drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c | 1 +
drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | 1 +
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c | 56 +-
drivers/net/ethernet/intel/ixgbe/ixgbe_e610.c | 1509 ++++++++++++-
drivers/net/ethernet/intel/ixgbe/ixgbe_e610.h | 19 +
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 257 ++-
drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c | 12 +-
drivers/net/ethernet/intel/ixgbe/ixgbe_fw_update.c | 707 ++++++
drivers/net/ethernet/intel/ixgbe/ixgbe_fw_update.h | 12 +
drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c | 51 +-
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 282 ++-
drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c | 4 +-
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 16 +-
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 5 +
drivers/net/ethernet/intel/ixgbe/ixgbe_type_e610.h | 175 +-
drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c | 1 +
drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c | 1 +
drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c | 2 +-
drivers/net/ethernet/intel/ixgbevf/ipsec.c | 21 +-
drivers/net/ethernet/marvell/Kconfig | 1 -
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 58 +-
.../ethernet/marvell/octeon_ep_vf/octep_vf_main.c | 2 -
.../ethernet/marvell/octeon_ep_vf/octep_vf_main.h | 2 -
drivers/net/ethernet/marvell/octeontx2/af/mbox.c | 17 +-
drivers/net/ethernet/marvell/octeontx2/af/mbox.h | 2 +
.../net/ethernet/marvell/octeontx2/af/mcs_rvu_if.c | 2 +
drivers/net/ethernet/marvell/octeontx2/af/rvu.c | 11 +-
drivers/net/ethernet/marvell/octeontx2/af/rvu.h | 4 +-
.../net/ethernet/marvell/octeontx2/af/rvu_cgx.c | 4 +-
.../net/ethernet/marvell/octeontx2/af/rvu_npc.c | 58 +-
.../net/ethernet/marvell/octeontx2/af/rvu_rep.c | 2 +
.../net/ethernet/marvell/octeontx2/af/rvu_trace.c | 2 +
.../net/ethernet/marvell/octeontx2/af/rvu_trace.h | 88 +-
drivers/net/ethernet/marvell/octeontx2/nic/cn10k.c | 9 +-
.../ethernet/marvell/octeontx2/nic/cn10k_ipsec.c | 18 +-
.../ethernet/marvell/octeontx2/nic/otx2_common.c | 37 +
.../ethernet/marvell/octeontx2/nic/otx2_common.h | 10 +-
.../net/ethernet/marvell/octeontx2/nic/otx2_pf.c | 37 +-
.../net/ethernet/marvell/octeontx2/nic/otx2_txrx.c | 11 +-
.../net/ethernet/marvell/octeontx2/nic/otx2_vf.c | 16 +-
.../net/ethernet/marvell/octeontx2/nic/otx2_xsk.c | 42 +-
drivers/net/ethernet/marvell/octeontx2/nic/qos.c | 4 +-
.../net/ethernet/marvell/octeontx2/nic/qos_sq.c | 22 +
drivers/net/ethernet/marvell/octeontx2/nic/rep.c | 12 +-
.../ethernet/marvell/prestera/prestera_counter.c | 3 +-
.../net/ethernet/marvell/prestera/prestera_pci.c | 6 +-
drivers/net/ethernet/mediatek/mtk_eth_path.c | 45 +-
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 119 +-
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 61 +-
drivers/net/ethernet/mediatek/mtk_wed.c | 4 +-
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 1 +
drivers/net/ethernet/mellanox/mlx4/mr.c | 2 +-
drivers/net/ethernet/mellanox/mlx5/core/Makefile | 3 +-
drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 3 +-
drivers/net/ethernet/mellanox/mlx5/core/en.h | 7 +
.../net/ethernet/mellanox/mlx5/core/en/health.c | 2 +
drivers/net/ethernet/mellanox/mlx5/core/en/ptp.c | 25 +-
.../ethernet/mellanox/mlx5/core/en/reporter_tx.c | 4 -
drivers/net/ethernet/mellanox/mlx5/core/en/trap.c | 12 +-
drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c | 4 +-
drivers/net/ethernet/mellanox/mlx5/core/en/xdp.h | 6 -
.../ethernet/mellanox/mlx5/core/en_accel/ipsec.c | 28 +-
.../ethernet/mellanox/mlx5/core/en_accel/ipsec.h | 1 +
drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c | 2 +
.../net/ethernet/mellanox/mlx5/core/en_ethtool.c | 6 +-
drivers/net/ethernet/mellanox/mlx5/core/en_fs.c | 4 +
drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 82 +-
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 8 +
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 81 +-
drivers/net/ethernet/mellanox/mlx5/core/en_stats.c | 3 +-
drivers/net/ethernet/mellanox/mlx5/core/en_stats.h | 2 +-
drivers/net/ethernet/mellanox/mlx5/core/en_tx.c | 7 +-
drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.c | 28 +-
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 31 +-
drivers/net/ethernet/mellanox/mlx5/core/fs_core.h | 4 +
.../net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c | 3 +
.../net/ethernet/mellanox/mlx5/core/lib/clock.c | 26 +-
drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c | 6 +-
.../mellanox/mlx5/core/steering/hws/action.c | 127 +-
.../mellanox/mlx5/core/steering/hws/action.h | 10 +-
.../mlx5/core/steering/hws/action_ste_pool.c | 467 ++++
.../mlx5/core/steering/hws/action_ste_pool.h | 69 +
.../ethernet/mellanox/mlx5/core/steering/hws/bwc.c | 414 ++--
.../ethernet/mellanox/mlx5/core/steering/hws/bwc.h | 20 +-
.../mellanox/mlx5/core/steering/hws/bwc_complex.c | 1348 ++++++++++-
.../mellanox/mlx5/core/steering/hws/bwc_complex.h | 21 +
.../ethernet/mellanox/mlx5/core/steering/hws/cmd.c | 1 -
.../ethernet/mellanox/mlx5/core/steering/hws/cmd.h | 1 -
.../mellanox/mlx5/core/steering/hws/context.c | 8 +-
.../mellanox/mlx5/core/steering/hws/context.h | 2 +
.../mellanox/mlx5/core/steering/hws/debug.c | 71 +-
.../mellanox/mlx5/core/steering/hws/debug.h | 2 +
.../mellanox/mlx5/core/steering/hws/definer.c | 290 ++-
.../mellanox/mlx5/core/steering/hws/definer.h | 2 +
.../mellanox/mlx5/core/steering/hws/fs_hws.c | 71 +-
.../mellanox/mlx5/core/steering/hws/fs_hws.h | 16 +
.../mellanox/mlx5/core/steering/hws/internal.h | 1 +
.../mellanox/mlx5/core/steering/hws/matcher.c | 716 +++---
.../mellanox/mlx5/core/steering/hws/matcher.h | 43 +-
.../mellanox/mlx5/core/steering/hws/mlx5hws.h | 11 +
.../mellanox/mlx5/core/steering/hws/pat_arg.c | 76 +-
.../mellanox/mlx5/core/steering/hws/pat_arg.h | 5 +-
.../mellanox/mlx5/core/steering/hws/pool.c | 515 ++---
.../mellanox/mlx5/core/steering/hws/pool.h | 103 +-
.../mellanox/mlx5/core/steering/hws/rule.c | 191 +-
.../mellanox/mlx5/core/steering/hws/rule.h | 12 +-
.../mellanox/mlx5/core/steering/hws/send.c | 122 +-
.../mellanox/mlx5/core/steering/hws/send.h | 1 +
.../mellanox/mlx5/core/steering/hws/table.c | 16 +-
.../mellanox/mlx5/core/steering/hws/table.h | 5 +
.../mellanox/mlx5/core/steering/sws/fs_dr.c | 10 +-
.../mellanox/mlx5/core/steering/sws/fs_dr.h | 10 +-
drivers/net/ethernet/mellanox/mlx5/core/vport.c | 18 +-
drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | 8 +-
drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 63 +-
drivers/net/ethernet/mellanox/mlxsw/spectrum.h | 7 +-
.../net/ethernet/mellanox/mlxsw/spectrum_ethtool.c | 2 +-
drivers/net/ethernet/mellanox/mlxsw/spectrum_ptp.c | 30 +-
drivers/net/ethernet/mellanox/mlxsw/spectrum_ptp.h | 20 +-
drivers/net/ethernet/meta/Kconfig | 1 +
drivers/net/ethernet/meta/fbnic/fbnic.h | 6 +-
drivers/net/ethernet/meta/fbnic/fbnic_csr.h | 34 +
drivers/net/ethernet/meta/fbnic/fbnic_devlink.c | 258 ++-
drivers/net/ethernet/meta/fbnic/fbnic_ethtool.c | 178 +-
drivers/net/ethernet/meta/fbnic/fbnic_fw.c | 311 ++-
drivers/net/ethernet/meta/fbnic/fbnic_fw.h | 56 +-
drivers/net/ethernet/meta/fbnic/fbnic_hw_stats.c | 335 ++-
drivers/net/ethernet/meta/fbnic/fbnic_hw_stats.h | 48 +
drivers/net/ethernet/meta/fbnic/fbnic_mac.c | 7 +-
drivers/net/ethernet/meta/fbnic/fbnic_netdev.c | 47 +-
drivers/net/ethernet/meta/fbnic/fbnic_pci.c | 10 +
drivers/net/ethernet/microchip/lan743x_ethtool.c | 18 +-
drivers/net/ethernet/microchip/lan743x_main.c | 23 +-
drivers/net/ethernet/microchip/lan743x_main.h | 1 +
drivers/net/ethernet/microchip/lan743x_ptp.c | 62 +-
drivers/net/ethernet/microchip/lan743x_ptp.h | 7 +-
.../net/ethernet/microchip/lan966x/lan966x_main.c | 6 +
.../net/ethernet/microchip/lan966x/lan966x_main.h | 5 +
.../net/ethernet/microchip/lan966x/lan966x_ptp.c | 63 +-
drivers/net/ethernet/microsoft/mana/mana_en.c | 24 +-
drivers/net/ethernet/mscc/ocelot_net.c | 33 +-
drivers/net/ethernet/mscc/ocelot_ptp.c | 48 +-
drivers/net/ethernet/mscc/ocelot_vsc7514.c | 2 +
drivers/net/ethernet/natsemi/natsemi.c | 2 +-
drivers/net/ethernet/netronome/nfp/crypto/ipsec.c | 11 +-
drivers/net/ethernet/netronome/nfp/nfd3/dp.c | 2 +-
drivers/net/ethernet/netronome/nfp/nfdk/dp.c | 2 +-
.../net/ethernet/netronome/nfp/nfp_net_common.c | 2 +-
.../net/ethernet/pensando/ionic/ionic_ethtool.c | 99 +-
drivers/net/ethernet/pensando/ionic/ionic_if.h | 17 +-
drivers/net/ethernet/qlogic/qed/qed.h | 1 -
drivers/net/ethernet/qlogic/qed/qed_dbg_hsi.h | 31 -
drivers/net/ethernet/qlogic/qed/qed_debug.c | 25 -
drivers/net/ethernet/qlogic/qed/qed_dev.c | 19 -
drivers/net/ethernet/qlogic/qed/qed_hsi.h | 52 -
drivers/net/ethernet/qlogic/qed/qed_hw.c | 11 -
drivers/net/ethernet/qlogic/qed/qed_hw.h | 9 -
.../net/ethernet/qlogic/qed/qed_init_fw_funcs.c | 138 --
drivers/net/ethernet/qualcomm/Kconfig | 1 -
drivers/net/ethernet/realtek/r8169.h | 7 +-
drivers/net/ethernet/realtek/r8169_main.c | 434 ++--
drivers/net/ethernet/realtek/r8169_phy_config.c | 205 +-
drivers/net/ethernet/realtek/rtase/rtase.h | 15 +
drivers/net/ethernet/realtek/rtase/rtase_main.c | 66 +-
drivers/net/ethernet/renesas/ravb_ptp.c | 11 +-
drivers/net/ethernet/rocker/rocker_ofdpa.c | 2 +-
drivers/net/ethernet/sis/sis900.c | 2 +-
drivers/net/ethernet/stmicro/stmmac/Kconfig | 12 +
drivers/net/ethernet/stmicro/stmmac/Makefile | 3 +-
drivers/net/ethernet/stmicro/stmmac/common.h | 1 +
.../net/ethernet/stmicro/stmmac/dwmac-anarion.c | 25 +-
.../ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c | 57 +-
drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c | 14 +-
.../net/ethernet/stmicro/stmmac/dwmac-ingenic.c | 46 +-
.../net/ethernet/stmicro/stmmac/dwmac-intel-plat.c | 9 -
drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c | 42 +-
drivers/net/ethernet/stmicro/stmmac/dwmac-intel.h | 1 -
.../net/ethernet/stmicro/stmmac/dwmac-loongson.c | 108 +-
.../net/ethernet/stmicro/stmmac/dwmac-mediatek.c | 1 -
.../ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c | 43 +-
.../ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c | 146 ++
.../net/ethernet/stmicro/stmmac/dwmac-socfpga.c | 101 +-
drivers/net/ethernet/stmicro/stmmac/dwmac-sti.c | 88 +-
drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c | 57 +-
drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 10 +-
drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c | 58 +-
.../net/ethernet/stmicro/stmmac/dwmac-visconti.c | 25 +-
drivers/net/ethernet/stmicro/stmmac/dwmac4.h | 41 -
drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c | 295 +--
drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h | 25 +-
.../net/ethernet/stmicro/stmmac/dwxgmac2_core.c | 89 +-
.../net/ethernet/stmicro/stmmac/dwxgmac2_descs.c | 18 +
drivers/net/ethernet/stmicro/stmmac/hwif.c | 9 +
drivers/net/ethernet/stmicro/stmmac/hwif.h | 62 +-
drivers/net/ethernet/stmicro/stmmac/stmmac.h | 18 +-
.../net/ethernet/stmicro/stmmac/stmmac_ethtool.c | 43 +-
drivers/net/ethernet/stmicro/stmmac/stmmac_fpe.c | 174 +-
drivers/net/ethernet/stmicro/stmmac/stmmac_fpe.h | 5 -
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 157 +-
.../net/ethernet/stmicro/stmmac/stmmac_platform.c | 11 +
.../net/ethernet/stmicro/stmmac/stmmac_platform.h | 3 +
drivers/net/ethernet/stmicro/stmmac/stmmac_vlan.c | 374 +++
drivers/net/ethernet/stmicro/stmmac/stmmac_vlan.h | 64 +
drivers/net/ethernet/ti/am65-cpsw-nuss.c | 28 +-
drivers/net/ethernet/ti/cpsw.c | 26 +
drivers/net/ethernet/ti/cpsw_new.c | 4 +-
drivers/net/ethernet/ti/cpsw_priv.c | 70 +-
drivers/net/ethernet/ti/cpsw_priv.h | 6 +-
drivers/net/ethernet/ti/icssg/icssg_common.c | 24 +-
drivers/net/ethernet/ti/icssg/icssg_prueth.h | 2 +-
drivers/net/ethernet/ti/icssg/icssg_stats.c | 8 +-
drivers/net/ethernet/ti/icssg/icssg_stats.h | 58 +-
drivers/net/ethernet/ti/icssg/icssg_switch_map.h | 33 +
drivers/net/ethernet/vertexcom/mse102x.c | 80 +-
drivers/net/ethernet/wangxun/Kconfig | 4 +-
drivers/net/ethernet/wangxun/libwx/Makefile | 2 +-
drivers/net/ethernet/wangxun/libwx/wx_ethtool.c | 22 +-
drivers/net/ethernet/wangxun/libwx/wx_hw.c | 347 ++-
drivers/net/ethernet/wangxun/libwx/wx_hw.h | 5 +
drivers/net/ethernet/wangxun/libwx/wx_lib.c | 188 +-
drivers/net/ethernet/wangxun/libwx/wx_lib.h | 8 +-
drivers/net/ethernet/wangxun/libwx/wx_mbx.c | 176 ++
drivers/net/ethernet/wangxun/libwx/wx_mbx.h | 77 +
drivers/net/ethernet/wangxun/libwx/wx_ptp.c | 30 +-
drivers/net/ethernet/wangxun/libwx/wx_sriov.c | 909 ++++++++
drivers/net/ethernet/wangxun/libwx/wx_sriov.h | 18 +
drivers/net/ethernet/wangxun/libwx/wx_type.h | 115 +-
drivers/net/ethernet/wangxun/ngbe/ngbe_main.c | 94 +-
drivers/net/ethernet/wangxun/ngbe/ngbe_mdio.c | 5 +
drivers/net/ethernet/wangxun/ngbe/ngbe_type.h | 3 +
drivers/net/ethernet/wangxun/txgbe/Makefile | 3 +-
drivers/net/ethernet/wangxun/txgbe/txgbe_aml.c | 385 ++++
drivers/net/ethernet/wangxun/txgbe/txgbe_aml.h | 15 +
drivers/net/ethernet/wangxun/txgbe/txgbe_ethtool.c | 38 +-
drivers/net/ethernet/wangxun/txgbe/txgbe_ethtool.h | 2 +
drivers/net/ethernet/wangxun/txgbe/txgbe_fdir.c | 23 +-
drivers/net/ethernet/wangxun/txgbe/txgbe_hw.c | 4 +-
drivers/net/ethernet/wangxun/txgbe/txgbe_irq.c | 60 +-
drivers/net/ethernet/wangxun/txgbe/txgbe_main.c | 206 +-
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c | 47 +-
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.h | 2 +-
drivers/net/ethernet/wangxun/txgbe/txgbe_type.h | 116 +-
drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 8 +-
drivers/net/ethernet/xscale/ixp4xx_eth.c | 61 +-
drivers/net/geneve.c | 16 +-
drivers/net/gtp.c | 18 +-
drivers/net/hamradio/baycom_epp.c | 5 +-
drivers/net/hyperv/netvsc_drv.c | 6 +-
drivers/net/ipa/data/ipa_data-v3.1.c | 1 -
drivers/net/ipa/data/ipa_data-v3.5.1.c | 1 -
drivers/net/ipa/data/ipa_data-v4.11.c | 1 -
drivers/net/ipa/data/ipa_data-v4.2.c | 1 -
drivers/net/ipa/data/ipa_data-v4.5.c | 1 -
drivers/net/ipa/data/ipa_data-v4.7.c | 1 -
drivers/net/ipa/data/ipa_data-v4.9.c | 1 -
drivers/net/ipa/data/ipa_data-v5.0.c | 1 -
drivers/net/ipa/data/ipa_data-v5.5.c | 1 -
drivers/net/ipa/ipa_data.h | 2 -
drivers/net/ipa/ipa_mem.c | 21 +-
drivers/net/ipvlan/ipvlan_core.c | 2 +-
drivers/net/macvlan.c | 20 +-
drivers/net/mctp/mctp-usb.c | 2 +
drivers/net/mdio/Kconfig | 48 +-
drivers/net/mdio/Makefile | 1 +
drivers/net/mdio/mdio-bcm-unimac.c | 2 +-
drivers/net/mdio/mdio-realtek-rtl9300.c | 522 +++++
drivers/net/mdio/mdio-thunder.c | 10 +-
drivers/net/mdio/of_mdio.c | 2 +-
drivers/net/netdevsim/ipsec.c | 15 +-
drivers/net/netdevsim/netdev.c | 4 +
drivers/net/ovpn/Makefile | 22 +
drivers/net/ovpn/bind.c | 55 +
drivers/net/ovpn/bind.h | 101 +
drivers/net/ovpn/crypto.c | 210 ++
drivers/net/ovpn/crypto.h | 145 ++
drivers/net/ovpn/crypto_aead.c | 389 ++++
drivers/net/ovpn/crypto_aead.h | 29 +
drivers/net/ovpn/io.c | 458 ++++
drivers/net/ovpn/io.h | 34 +
drivers/net/ovpn/main.c | 279 +++
drivers/net/ovpn/main.h | 14 +
drivers/net/ovpn/netlink-gen.c | 213 ++
drivers/net/ovpn/netlink-gen.h | 41 +
drivers/net/ovpn/netlink.c | 1258 +++++++++++
drivers/net/ovpn/netlink.h | 18 +
drivers/net/ovpn/ovpnpriv.h | 55 +
drivers/net/ovpn/peer.c | 1364 +++++++++++
drivers/net/ovpn/peer.h | 163 ++
drivers/net/ovpn/pktid.c | 129 ++
drivers/net/ovpn/pktid.h | 86 +
drivers/net/ovpn/proto.h | 118 +
drivers/net/ovpn/skb.h | 61 +
drivers/net/ovpn/socket.c | 233 ++
drivers/net/ovpn/socket.h | 49 +
drivers/net/ovpn/stats.c | 21 +
drivers/net/ovpn/stats.h | 47 +
drivers/net/ovpn/tcp.c | 598 +++++
drivers/net/ovpn/tcp.h | 36 +
drivers/net/ovpn/udp.c | 449 ++++
drivers/net/ovpn/udp.h | 25 +
drivers/net/pfcp.c | 23 +-
drivers/net/phy/Kconfig | 29 +-
drivers/net/phy/Makefile | 22 +-
drivers/net/phy/air_en8811h.c | 103 +-
drivers/net/phy/aquantia/aquantia_main.c | 6 +-
drivers/net/phy/as21xxx.c | 1087 +++++++++
drivers/net/phy/bcm87xx.c | 14 +-
drivers/net/phy/dp83640.c | 13 +-
drivers/net/phy/dp83822.c | 33 +
drivers/net/phy/dp83867.c | 76 +-
drivers/net/phy/fixed_phy.c | 40 +-
drivers/net/phy/icplus.c | 6 +-
drivers/net/phy/marvell-88q2xxx.c | 111 +-
drivers/net/phy/marvell10g.c | 12 +-
drivers/net/phy/mdio_bus.c | 476 +---
drivers/net/phy/mdio_bus_provider.c | 484 ++++
drivers/net/phy/mdio_device.c | 1 +
drivers/net/phy/mediatek/Kconfig | 20 +-
drivers/net/phy/mediatek/Makefile | 3 +-
drivers/net/phy/mediatek/mtk-2p5ge.c | 321 +++
drivers/net/phy/mediatek/mtk-ge-soc.c | 91 +-
drivers/net/phy/micrel.c | 23 +-
drivers/net/phy/microchip.c | 2 +
drivers/net/phy/microchip_rds_ptp.c | 5 +-
drivers/net/phy/mscc/mscc_ptp.c | 20 +-
drivers/net/phy/mxl-86110.c | 616 +++++
drivers/net/phy/nxp-c45-tja11xx.c | 54 +-
drivers/net/phy/nxp-tja11xx.c | 6 +-
drivers/net/phy/phy_device.c | 102 +-
drivers/net/phy/phylink.c | 7 -
drivers/net/phy/realtek/realtek_main.c | 337 ++-
drivers/net/phy/teranetics.c | 3 +-
drivers/net/ppp/ppp_generic.c | 25 +-
drivers/net/tap.c | 14 +-
drivers/net/team/team_core.c | 2 +-
drivers/net/tun.c | 8 +-
drivers/net/usb/Kconfig | 4 +-
drivers/net/usb/aqc111.c | 10 +-
drivers/net/usb/asix.h | 1 -
drivers/net/usb/asix_common.c | 22 -
drivers/net/usb/asix_devices.c | 17 +-
drivers/net/usb/lan78xx.c | 462 +++-
drivers/net/usb/r8152.c | 98 +-
drivers/net/veth.c | 57 +-
drivers/net/vrf.c | 4 +-
drivers/net/vxlan/vxlan_core.c | 560 ++---
drivers/net/vxlan/vxlan_private.h | 11 +-
drivers/net/vxlan/vxlan_vnifilter.c | 20 +-
drivers/net/wireguard/allowedips.c | 102 +-
drivers/net/wireguard/allowedips.h | 4 +
drivers/net/wireguard/cookie.c | 4 +-
drivers/net/wireguard/netlink.c | 47 +-
drivers/net/wireguard/noise.c | 4 +-
drivers/net/wireguard/selftest/allowedips.c | 48 +
drivers/net/wireless/ath/ath10k/ahb.c | 2 +-
drivers/net/wireless/ath/ath10k/bmi.c | 6 +-
drivers/net/wireless/ath/ath10k/ce.c | 32 +-
drivers/net/wireless/ath/ath10k/core.c | 4 +-
drivers/net/wireless/ath/ath10k/htc.c | 6 +-
drivers/net/wireless/ath/ath10k/htt_rx.c | 2 +-
drivers/net/wireless/ath/ath10k/hw.c | 62 +-
drivers/net/wireless/ath/ath10k/hw.h | 34 +-
drivers/net/wireless/ath/ath10k/mac.c | 22 +-
drivers/net/wireless/ath/ath10k/pci.c | 2 +-
drivers/net/wireless/ath/ath10k/sdio.c | 2 +-
drivers/net/wireless/ath/ath10k/testmode.c | 4 +-
drivers/net/wireless/ath/ath10k/txrx.c | 2 +-
drivers/net/wireless/ath/ath10k/usb.c | 4 +-
drivers/net/wireless/ath/ath10k/wmi.c | 4 +-
drivers/net/wireless/ath/ath11k/ahb.c | 4 +-
drivers/net/wireless/ath/ath11k/ce.c | 11 +-
drivers/net/wireless/ath/ath11k/core.c | 302 ++-
drivers/net/wireless/ath/ath11k/core.h | 16 +
drivers/net/wireless/ath/ath11k/dp_rx.c | 25 +-
drivers/net/wireless/ath/ath11k/hal.c | 4 +-
drivers/net/wireless/ath/ath11k/hif.h | 14 +-
drivers/net/wireless/ath/ath11k/mac.c | 52 +-
drivers/net/wireless/ath/ath11k/mhi.c | 14 +-
drivers/net/wireless/ath/ath11k/mhi.h | 4 +-
drivers/net/wireless/ath/ath11k/pci.c | 50 +-
drivers/net/wireless/ath/ath11k/qmi.c | 13 +-
drivers/net/wireless/ath/ath11k/testmode.c | 2 +-
drivers/net/wireless/ath/ath12k/Kconfig | 8 +
drivers/net/wireless/ath/ath12k/Makefile | 1 +
drivers/net/wireless/ath/ath12k/ahb.c | 1155 ++++++++++
drivers/net/wireless/ath/ath12k/ahb.h | 80 +
drivers/net/wireless/ath/ath12k/ce.c | 103 +-
drivers/net/wireless/ath/ath12k/ce.h | 18 +-
drivers/net/wireless/ath/ath12k/core.c | 329 ++-
drivers/net/wireless/ath/ath12k/core.h | 169 +-
drivers/net/wireless/ath/ath12k/debugfs.c | 497 +++-
drivers/net/wireless/ath/ath12k/debugfs.h | 17 +-
.../net/wireless/ath/ath12k/debugfs_htt_stats.c | 3 +
drivers/net/wireless/ath/ath12k/dp.c | 154 +-
drivers/net/wireless/ath/ath12k/dp.h | 53 +-
drivers/net/wireless/ath/ath12k/dp_mon.c | 1097 ++++++++-
drivers/net/wireless/ath/ath12k/dp_mon.h | 8 +-
drivers/net/wireless/ath/ath12k/dp_rx.c | 596 +++--
drivers/net/wireless/ath/ath12k/dp_rx.h | 41 +-
drivers/net/wireless/ath/ath12k/dp_tx.c | 209 +-
drivers/net/wireless/ath/ath12k/dp_tx.h | 3 +-
drivers/net/wireless/ath/ath12k/fw.c | 9 +-
drivers/net/wireless/ath/ath12k/fw.h | 3 +-
drivers/net/wireless/ath/ath12k/hal.c | 153 +-
drivers/net/wireless/ath/ath12k/hal.h | 80 +-
drivers/net/wireless/ath/ath12k/hal_desc.h | 13 +-
drivers/net/wireless/ath/ath12k/hal_rx.c | 121 +-
drivers/net/wireless/ath/ath12k/hal_rx.h | 27 +-
drivers/net/wireless/ath/ath12k/hw.c | 511 ++++-
drivers/net/wireless/ath/ath12k/hw.h | 30 +-
drivers/net/wireless/ath/ath12k/mac.c | 1439 +++++++++---
drivers/net/wireless/ath/ath12k/mac.h | 56 +
drivers/net/wireless/ath/ath12k/mhi.c | 9 +-
drivers/net/wireless/ath/ath12k/pci.c | 66 +-
drivers/net/wireless/ath/ath12k/pci.h | 5 +-
drivers/net/wireless/ath/ath12k/peer.c | 5 +-
drivers/net/wireless/ath/ath12k/peer.h | 3 +-
drivers/net/wireless/ath/ath12k/qmi.c | 238 +-
drivers/net/wireless/ath/ath12k/qmi.h | 5 +-
drivers/net/wireless/ath/ath12k/reg.c | 526 +++--
drivers/net/wireless/ath/ath12k/reg.h | 20 +-
drivers/net/wireless/ath/ath12k/testmode.c | 4 +-
drivers/net/wireless/ath/ath12k/wmi.c | 558 +++--
drivers/net/wireless/ath/ath12k/wmi.h | 119 +-
drivers/net/wireless/ath/ath9k/ahb.c | 13 +-
drivers/net/wireless/ath/ath9k/htc_drv_beacon.c | 3 +
drivers/net/wireless/ath/carl9170/tx.c | 3 +-
drivers/net/wireless/ath/wcn36xx/testmode.c | 2 +-
drivers/net/wireless/ath/wil6210/txrx.h | 4 +-
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 44 +-
.../broadcom/brcm80211/brcmfmac/cfg80211.h | 25 +
.../wireless/broadcom/brcm80211/brcmfmac/common.c | 1 +
.../wireless/broadcom/brcm80211/brcmfmac/core.c | 2 +
.../broadcom/brcm80211/brcmfmac/cyw/core.c | 308 +++
.../broadcom/brcm80211/brcmfmac/cyw/fwil_types.h | 87 +
.../wireless/broadcom/brcm80211/brcmfmac/feature.c | 3 +-
.../wireless/broadcom/brcm80211/brcmfmac/feature.h | 4 +-
.../wireless/broadcom/brcm80211/brcmfmac/fweh.c | 7 +-
.../wireless/broadcom/brcm80211/brcmfmac/fweh.h | 8 +-
.../wireless/broadcom/brcm80211/brcmfmac/fwvid.h | 29 +
.../net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 23 +-
.../wireless/broadcom/brcm80211/brcmsmac/aiutils.c | 6 +-
.../wireless/broadcom/brcm80211/brcmsmac/aiutils.h | 2 +-
.../wireless/broadcom/brcm80211/brcmsmac/ampdu.c | 4 +-
.../wireless/broadcom/brcm80211/brcmsmac/channel.c | 4 +-
.../net/wireless/broadcom/brcm80211/brcmsmac/dma.c | 2 +-
.../broadcom/brcm80211/brcmsmac/mac80211_if.c | 4 +-
.../wireless/broadcom/brcm80211/brcmsmac/main.c | 4 +-
.../wireless/broadcom/brcm80211/brcmsmac/main.h | 2 +-
.../net/wireless/broadcom/brcm80211/brcmsmac/pmu.c | 2 +-
drivers/net/wireless/intel/iwlwifi/Makefile | 17 +-
drivers/net/wireless/intel/iwlwifi/cfg/1000.c | 51 +-
drivers/net/wireless/intel/iwlwifi/cfg/2000.c | 90 +-
drivers/net/wireless/intel/iwlwifi/cfg/22000.c | 378 +---
drivers/net/wireless/intel/iwlwifi/cfg/5000.c | 83 +-
drivers/net/wireless/intel/iwlwifi/cfg/6000.c | 227 +-
drivers/net/wireless/intel/iwlwifi/cfg/7000.c | 173 +-
drivers/net/wireless/intel/iwlwifi/cfg/8000.c | 92 +-
drivers/net/wireless/intel/iwlwifi/cfg/9000.c | 168 +-
drivers/net/wireless/intel/iwlwifi/cfg/ax210.c | 228 +-
drivers/net/wireless/intel/iwlwifi/cfg/bz.c | 169 +-
drivers/net/wireless/intel/iwlwifi/cfg/dr.c | 170 +-
drivers/net/wireless/intel/iwlwifi/cfg/rf-fm.c | 51 +
drivers/net/wireless/intel/iwlwifi/cfg/rf-gf.c | 42 +
drivers/net/wireless/intel/iwlwifi/cfg/rf-hr.c | 42 +
drivers/net/wireless/intel/iwlwifi/cfg/rf-jf.c | 84 +
drivers/net/wireless/intel/iwlwifi/cfg/rf-pe.c | 16 +
drivers/net/wireless/intel/iwlwifi/cfg/rf-wh.c | 15 +
drivers/net/wireless/intel/iwlwifi/cfg/sc.c | 148 +-
drivers/net/wireless/intel/iwlwifi/dvm/agn.h | 4 +-
drivers/net/wireless/intel/iwlwifi/dvm/debugfs.c | 8 +-
drivers/net/wireless/intel/iwlwifi/dvm/dev.h | 3 +-
drivers/net/wireless/intel/iwlwifi/dvm/devices.c | 4 +-
drivers/net/wireless/intel/iwlwifi/dvm/eeprom.c | 53 +-
drivers/net/wireless/intel/iwlwifi/dvm/led.c | 6 +-
drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c | 10 +-
drivers/net/wireless/intel/iwlwifi/dvm/main.c | 77 +-
drivers/net/wireless/intel/iwlwifi/dvm/power.c | 34 +-
drivers/net/wireless/intel/iwlwifi/dvm/rx.c | 8 +-
drivers/net/wireless/intel/iwlwifi/dvm/rxon.c | 8 +-
drivers/net/wireless/intel/iwlwifi/dvm/tx.c | 6 +-
drivers/net/wireless/intel/iwlwifi/dvm/ucode.c | 10 +-
drivers/net/wireless/intel/iwlwifi/fw/acpi.c | 28 +-
drivers/net/wireless/intel/iwlwifi/fw/acpi.h | 11 +-
drivers/net/wireless/intel/iwlwifi/fw/api/alive.h | 10 +
.../net/wireless/intel/iwlwifi/fw/api/commands.h | 6 +-
.../net/wireless/intel/iwlwifi/fw/api/datapath.h | 2 +-
.../net/wireless/intel/iwlwifi/fw/api/dbg-tlv.h | 8 +-
.../net/wireless/intel/iwlwifi/fw/api/location.h | 89 +-
.../net/wireless/intel/iwlwifi/fw/api/mac-cfg.h | 192 +-
drivers/net/wireless/intel/iwlwifi/fw/api/mac.h | 6 +-
.../net/wireless/intel/iwlwifi/fw/api/phy-ctxt.h | 9 +-
drivers/net/wireless/intel/iwlwifi/fw/api/power.h | 47 +-
drivers/net/wireless/intel/iwlwifi/fw/api/rs.h | 83 +-
drivers/net/wireless/intel/iwlwifi/fw/api/rx.h | 32 +-
drivers/net/wireless/intel/iwlwifi/fw/api/stats.h | 5 +-
drivers/net/wireless/intel/iwlwifi/fw/api/tdls.h | 6 +-
drivers/net/wireless/intel/iwlwifi/fw/api/tx.h | 40 +-
drivers/net/wireless/intel/iwlwifi/fw/dbg.c | 120 +-
drivers/net/wireless/intel/iwlwifi/fw/dbg.h | 6 +-
drivers/net/wireless/intel/iwlwifi/fw/debugfs.c | 2 +-
drivers/net/wireless/intel/iwlwifi/fw/dump.c | 12 +-
drivers/net/wireless/intel/iwlwifi/fw/error-dump.h | 7 +-
drivers/net/wireless/intel/iwlwifi/fw/file.h | 28 +
drivers/net/wireless/intel/iwlwifi/fw/init.c | 20 +-
drivers/net/wireless/intel/iwlwifi/fw/paging.c | 4 +-
drivers/net/wireless/intel/iwlwifi/fw/pnvm.c | 61 +-
drivers/net/wireless/intel/iwlwifi/fw/pnvm.h | 5 +-
drivers/net/wireless/intel/iwlwifi/fw/regulatory.c | 45 +-
drivers/net/wireless/intel/iwlwifi/fw/regulatory.h | 23 +-
drivers/net/wireless/intel/iwlwifi/fw/rs.c | 137 +-
drivers/net/wireless/intel/iwlwifi/fw/runtime.h | 9 +-
drivers/net/wireless/intel/iwlwifi/fw/smem.c | 4 +-
drivers/net/wireless/intel/iwlwifi/fw/uefi.c | 74 +-
drivers/net/wireless/intel/iwlwifi/fw/uefi.h | 37 +-
drivers/net/wireless/intel/iwlwifi/iwl-config.h | 498 ++--
...l-context-info-gen3.h => iwl-context-info-v2.h} | 59 +-
.../net/wireless/intel/iwlwifi/iwl-context-info.h | 14 +-
drivers/net/wireless/intel/iwlwifi/iwl-csr.h | 29 +-
drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.c | 8 +-
drivers/net/wireless/intel/iwlwifi/iwl-devtrace.h | 9 +-
drivers/net/wireless/intel/iwlwifi/iwl-drv.c | 154 +-
drivers/net/wireless/intel/iwlwifi/iwl-drv.h | 4 +-
drivers/net/wireless/intel/iwlwifi/iwl-fh.h | 30 +-
drivers/net/wireless/intel/iwlwifi/iwl-io.c | 24 +-
drivers/net/wireless/intel/iwlwifi/iwl-io.h | 14 +-
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c | 122 +-
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.h | 16 +-
drivers/net/wireless/intel/iwlwifi/iwl-nvm-utils.c | 17 +-
drivers/net/wireless/intel/iwlwifi/iwl-op-mode.h | 17 +-
drivers/net/wireless/intel/iwlwifi/iwl-trans.c | 237 +-
drivers/net/wireless/intel/iwlwifi/iwl-trans.h | 241 +-
drivers/net/wireless/intel/iwlwifi/iwl-utils.c | 1 -
drivers/net/wireless/intel/iwlwifi/mld/agg.c | 14 +-
drivers/net/wireless/intel/iwlwifi/mld/ap.c | 9 +
drivers/net/wireless/intel/iwlwifi/mld/coex.c | 8 +-
drivers/net/wireless/intel/iwlwifi/mld/d3.c | 9 +-
drivers/net/wireless/intel/iwlwifi/mld/debugfs.c | 25 +-
drivers/net/wireless/intel/iwlwifi/mld/fw.c | 121 +-
drivers/net/wireless/intel/iwlwifi/mld/iface.c | 49 +-
drivers/net/wireless/intel/iwlwifi/mld/iface.h | 11 +-
drivers/net/wireless/intel/iwlwifi/mld/link.c | 9 +-
drivers/net/wireless/intel/iwlwifi/mld/link.h | 10 +-
.../net/wireless/intel/iwlwifi/mld/low_latency.c | 12 +-
drivers/net/wireless/intel/iwlwifi/mld/mac80211.c | 94 +-
drivers/net/wireless/intel/iwlwifi/mld/mcc.c | 4 +-
drivers/net/wireless/intel/iwlwifi/mld/mld.c | 95 +-
drivers/net/wireless/intel/iwlwifi/mld/mld.h | 21 +-
drivers/net/wireless/intel/iwlwifi/mld/mlo.c | 235 +-
drivers/net/wireless/intel/iwlwifi/mld/mlo.h | 16 +-
drivers/net/wireless/intel/iwlwifi/mld/notif.c | 65 +-
drivers/net/wireless/intel/iwlwifi/mld/notif.h | 2 +-
drivers/net/wireless/intel/iwlwifi/mld/phy.c | 43 +
drivers/net/wireless/intel/iwlwifi/mld/phy.h | 5 +
drivers/net/wireless/intel/iwlwifi/mld/power.c | 3 +
drivers/net/wireless/intel/iwlwifi/mld/ptp.c | 2 +-
.../net/wireless/intel/iwlwifi/mld/regulatory.c | 6 +-
drivers/net/wireless/intel/iwlwifi/mld/roc.c | 105 +-
drivers/net/wireless/intel/iwlwifi/mld/rx.c | 155 +-
drivers/net/wireless/intel/iwlwifi/mld/scan.c | 3 +
drivers/net/wireless/intel/iwlwifi/mld/sta.c | 54 +-
drivers/net/wireless/intel/iwlwifi/mld/sta.h | 7 +
drivers/net/wireless/intel/iwlwifi/mld/stats.c | 29 +-
.../net/wireless/intel/iwlwifi/mld/tests/Makefile | 2 +-
drivers/net/wireless/intel/iwlwifi/mld/tests/agg.c | 14 +-
.../intel/iwlwifi/mld/tests/emlsr_with_bt.c | 140 ++
.../net/wireless/intel/iwlwifi/mld/tests/hcmd.c | 6 +-
.../intel/iwlwifi/mld/tests/link-selection.c | 144 +-
.../net/wireless/intel/iwlwifi/mld/tests/link.c | 4 +-
.../net/wireless/intel/iwlwifi/mld/tests/utils.c | 39 +-
.../net/wireless/intel/iwlwifi/mld/tests/utils.h | 84 +-
drivers/net/wireless/intel/iwlwifi/mld/thermal.c | 89 +-
drivers/net/wireless/intel/iwlwifi/mld/tlc.c | 8 +-
drivers/net/wireless/intel/iwlwifi/mld/tx.c | 122 +-
drivers/net/wireless/intel/iwlwifi/mvm/coex.c | 6 +-
drivers/net/wireless/intel/iwlwifi/mvm/d3.c | 34 +-
drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c | 4 +-
drivers/net/wireless/intel/iwlwifi/mvm/fw.c | 85 +-
drivers/net/wireless/intel/iwlwifi/mvm/led.c | 4 +-
drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c | 19 +-
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 155 +-
drivers/net/wireless/intel/iwlwifi/mvm/mld-mac.c | 46 +-
.../net/wireless/intel/iwlwifi/mvm/mld-mac80211.c | 15 -
drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c | 10 +-
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 54 +-
drivers/net/wireless/intel/iwlwifi/mvm/nvm.c | 42 +-
drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 122 +-
drivers/net/wireless/intel/iwlwifi/mvm/power.c | 5 +-
drivers/net/wireless/intel/iwlwifi/mvm/quota.c | 43 +-
drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c | 23 +-
drivers/net/wireless/intel/iwlwifi/mvm/rs.c | 204 +-
drivers/net/wireless/intel/iwlwifi/mvm/rs.h | 5 +-
drivers/net/wireless/intel/iwlwifi/mvm/rx.c | 6 +-
drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c | 83 +-
drivers/net/wireless/intel/iwlwifi/mvm/sta.c | 34 +-
drivers/net/wireless/intel/iwlwifi/mvm/sta.h | 7 +-
.../net/wireless/intel/iwlwifi/mvm/tests/Makefile | 2 +-
.../net/wireless/intel/iwlwifi/mvm/tests/hcmd.c | 38 +
.../net/wireless/intel/iwlwifi/mvm/time-event.c | 12 +-
drivers/net/wireless/intel/iwlwifi/mvm/tt.c | 93 +-
drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 194 +-
drivers/net/wireless/intel/iwlwifi/mvm/utils.c | 24 +-
.../pcie/{ctxt-info-gen3.c => ctxt-info-v2.c} | 200 +-
.../net/wireless/intel/iwlwifi/pcie/ctxt-info.c | 20 +-
drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 2383 +++++++++-----------
drivers/net/wireless/intel/iwlwifi/pcie/internal.h | 114 +-
drivers/net/wireless/intel/iwlwifi/pcie/rx.c | 187 +-
.../net/wireless/intel/iwlwifi/pcie/trans-gen2.c | 144 +-
drivers/net/wireless/intel/iwlwifi/pcie/trans.c | 292 +--
drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c | 76 +-
drivers/net/wireless/intel/iwlwifi/pcie/tx.c | 226 +-
drivers/net/wireless/intel/iwlwifi/tests/devinfo.c | 174 +-
drivers/net/wireless/intersil/p54/fwio.c | 2 +
drivers/net/wireless/intersil/p54/p54.h | 1 +
drivers/net/wireless/intersil/p54/txrx.c | 13 +-
drivers/net/wireless/marvell/mwifiex/cfg80211.c | 42 +-
drivers/net/wireless/marvell/mwifiex/cfp.c | 4 +-
drivers/net/wireless/marvell/mwifiex/cmdevt.c | 74 +-
drivers/net/wireless/marvell/mwifiex/init.c | 21 +-
drivers/net/wireless/marvell/mwifiex/main.c | 44 +-
drivers/net/wireless/marvell/mwifiex/main.h | 13 +-
drivers/net/wireless/marvell/mwifiex/pcie.c | 2 +-
drivers/net/wireless/marvell/mwifiex/sta_cmd.c | 51 +-
drivers/net/wireless/marvell/mwifiex/txrx.c | 3 +-
drivers/net/wireless/marvell/mwifiex/util.c | 20 +-
drivers/net/wireless/marvell/mwifiex/wmm.c | 12 +-
drivers/net/wireless/mediatek/mt76/channel.c | 4 +-
drivers/net/wireless/mediatek/mt76/mac80211.c | 10 +-
drivers/net/wireless/mediatek/mt76/mt76.h | 20 +-
drivers/net/wireless/mediatek/mt76/mt7615/init.c | 2 +-
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c | 6 +-
drivers/net/wireless/mediatek/mt76/mt76_connac.h | 7 +-
.../net/wireless/mediatek/mt76/mt76_connac3_mac.h | 1 +
.../net/wireless/mediatek/mt76/mt76_connac_mcu.c | 43 +-
.../net/wireless/mediatek/mt76/mt76_connac_mcu.h | 14 +
drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c | 1 -
drivers/net/wireless/mediatek/mt76/mt76x2/usb.c | 2 +
.../net/wireless/mediatek/mt76/mt76x2/usb_init.c | 13 +-
.../net/wireless/mediatek/mt76/mt7915/debugfs.c | 28 +-
drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c | 33 +-
drivers/net/wireless/mediatek/mt76/mt7915/eeprom.h | 1 +
drivers/net/wireless/mediatek/mt76/mt7915/init.c | 14 +-
drivers/net/wireless/mediatek/mt76/mt7915/mac.c | 60 +-
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c | 48 +-
drivers/net/wireless/mediatek/mt76/mt7915/mcu.h | 2 +-
drivers/net/wireless/mediatek/mt76/mt7915/mmio.c | 6 +
drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h | 25 +-
drivers/net/wireless/mediatek/mt76/mt7921/main.c | 5 +
drivers/net/wireless/mediatek/mt76/mt7925/Makefile | 1 +
drivers/net/wireless/mediatek/mt76/mt7925/init.c | 8 +-
drivers/net/wireless/mediatek/mt76/mt7925/main.c | 28 +
drivers/net/wireless/mediatek/mt76/mt7925/mcu.c | 154 +-
drivers/net/wireless/mediatek/mt76/mt7925/mcu.h | 82 +-
drivers/net/wireless/mediatek/mt76/mt7925/mt7925.h | 6 +
drivers/net/wireless/mediatek/mt76/mt7925/pci.c | 7 +-
drivers/net/wireless/mediatek/mt76/mt7925/regs.h | 2 +-
.../net/wireless/mediatek/mt76/mt7925/testmode.c | 201 ++
.../net/wireless/mediatek/mt76/mt7996/coredump.c | 4 +-
.../net/wireless/mediatek/mt76/mt7996/debugfs.c | 17 +-
drivers/net/wireless/mediatek/mt76/mt7996/dma.c | 196 +-
drivers/net/wireless/mediatek/mt76/mt7996/eeprom.c | 42 +-
drivers/net/wireless/mediatek/mt76/mt7996/init.c | 41 +-
drivers/net/wireless/mediatek/mt76/mt7996/mac.c | 120 +-
drivers/net/wireless/mediatek/mt76/mt7996/main.c | 29 +-
drivers/net/wireless/mediatek/mt76/mt7996/mcu.c | 120 +-
drivers/net/wireless/mediatek/mt76/mt7996/mcu.h | 12 +-
drivers/net/wireless/mediatek/mt76/mt7996/mmio.c | 195 +-
drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h | 82 +-
drivers/net/wireless/mediatek/mt76/mt7996/pci.c | 21 +-
drivers/net/wireless/mediatek/mt76/mt7996/regs.h | 51 +-
drivers/net/wireless/purelifi/plfxlc/usb.c | 4 +-
drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 2 +-
drivers/net/wireless/realtek/rtlwifi/core.c | 11 -
drivers/net/wireless/realtek/rtlwifi/core.h | 1 -
drivers/net/wireless/realtek/rtlwifi/pci.c | 10 +
.../net/wireless/realtek/rtlwifi/rtl8192de/phy.c | 5 -
.../net/wireless/realtek/rtlwifi/rtl8192de/phy.h | 1 -
.../net/wireless/realtek/rtlwifi/rtl8192du/phy.c | 5 -
.../net/wireless/realtek/rtlwifi/rtl8192du/phy.h | 1 -
.../net/wireless/realtek/rtlwifi/rtl8192ee/phy.c | 4 -
.../net/wireless/realtek/rtlwifi/rtl8192ee/phy.h | 1 -
.../net/wireless/realtek/rtlwifi/rtl8821ae/phy.c | 4 -
.../net/wireless/realtek/rtlwifi/rtl8821ae/phy.h | 1 -
drivers/net/wireless/realtek/rtlwifi/usb.c | 12 -
drivers/net/wireless/realtek/rtlwifi/usb.h | 2 -
drivers/net/wireless/realtek/rtw88/coex.c | 2 +-
drivers/net/wireless/realtek/rtw88/fw.c | 8 +-
drivers/net/wireless/realtek/rtw88/hci.h | 8 +
drivers/net/wireless/realtek/rtw88/mac.c | 11 +-
drivers/net/wireless/realtek/rtw88/mac.h | 2 +
drivers/net/wireless/realtek/rtw88/mac80211.c | 2 +
drivers/net/wireless/realtek/rtw88/main.c | 35 +-
drivers/net/wireless/realtek/rtw88/main.h | 4 +
drivers/net/wireless/realtek/rtw88/pci.c | 2 +
drivers/net/wireless/realtek/rtw88/rtw8703b.c | 61 +-
drivers/net/wireless/realtek/rtw88/rtw8723cs.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8723d.c | 1 +
drivers/net/wireless/realtek/rtw88/rtw8723de.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8723ds.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8723du.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8723x.c | 59 +
drivers/net/wireless/realtek/rtw88/rtw8812a.c | 2 +
drivers/net/wireless/realtek/rtw88/rtw8812au.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8814a.c | 12 +
drivers/net/wireless/realtek/rtw88/rtw8814ae.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8814au.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8821a.c | 2 +
drivers/net/wireless/realtek/rtw88/rtw8821au.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8821c.c | 2 +
drivers/net/wireless/realtek/rtw88/rtw8821ce.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8821cs.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8821cu.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8822b.c | 2 +
drivers/net/wireless/realtek/rtw88/rtw8822be.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8822bs.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8822bu.c | 4 +-
drivers/net/wireless/realtek/rtw88/rtw8822c.c | 5 +-
drivers/net/wireless/realtek/rtw88/rtw8822ce.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8822cs.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8822cu.c | 2 +-
drivers/net/wireless/realtek/rtw88/sdio.c | 27 +-
drivers/net/wireless/realtek/rtw88/usb.c | 63 +-
drivers/net/wireless/realtek/rtw89/acpi.c | 1037 ++++++++-
drivers/net/wireless/realtek/rtw89/acpi.h | 190 ++
drivers/net/wireless/realtek/rtw89/cam.c | 7 +
drivers/net/wireless/realtek/rtw89/chan.c | 418 ++--
drivers/net/wireless/realtek/rtw89/chan.h | 17 +-
drivers/net/wireless/realtek/rtw89/core.c | 493 ++--
drivers/net/wireless/realtek/rtw89/core.h | 144 +-
drivers/net/wireless/realtek/rtw89/debug.c | 174 +-
drivers/net/wireless/realtek/rtw89/fw.c | 480 +++-
drivers/net/wireless/realtek/rtw89/fw.h | 94 +-
drivers/net/wireless/realtek/rtw89/mac.c | 58 +-
drivers/net/wireless/realtek/rtw89/mac.h | 19 +-
drivers/net/wireless/realtek/rtw89/mac80211.c | 38 +-
drivers/net/wireless/realtek/rtw89/mac_be.c | 3 +
drivers/net/wireless/realtek/rtw89/pci.c | 36 +-
drivers/net/wireless/realtek/rtw89/phy.c | 131 +-
drivers/net/wireless/realtek/rtw89/phy.h | 15 +
drivers/net/wireless/realtek/rtw89/phy_be.c | 2 +-
drivers/net/wireless/realtek/rtw89/ps.c | 147 ++
drivers/net/wireless/realtek/rtw89/ps.h | 3 +
drivers/net/wireless/realtek/rtw89/reg.h | 15 +-
drivers/net/wireless/realtek/rtw89/regd.c | 46 +-
drivers/net/wireless/realtek/rtw89/rtw8851b.c | 2 +
drivers/net/wireless/realtek/rtw89/rtw8852a.c | 2 +
drivers/net/wireless/realtek/rtw89/rtw8852b.c | 2 +
.../net/wireless/realtek/rtw89/rtw8852b_common.c | 24 +
drivers/net/wireless/realtek/rtw89/rtw8852bt.c | 2 +
drivers/net/wireless/realtek/rtw89/rtw8852c.c | 30 +-
drivers/net/wireless/realtek/rtw89/rtw8922a.c | 32 +-
drivers/net/wireless/realtek/rtw89/rtw8922a_rfk.c | 5 -
drivers/net/wireless/realtek/rtw89/sar.c | 296 ++-
drivers/net/wireless/realtek/rtw89/sar.h | 19 +-
drivers/net/wireless/realtek/rtw89/ser.c | 3 +
drivers/net/wireless/realtek/rtw89/txrx.h | 31 +
drivers/net/wireless/realtek/rtw89/wow.c | 3 +-
drivers/net/wireless/virtual/mac80211_hwsim.c | 12 +-
drivers/nfc/s3fwrn5/core.c | 2 +-
drivers/nfc/s3fwrn5/firmware.c | 2 +-
drivers/nfc/s3fwrn5/firmware.h | 2 +-
drivers/nfc/s3fwrn5/i2c.c | 2 +-
drivers/nfc/s3fwrn5/nci.c | 2 +-
drivers/nfc/s3fwrn5/nci.h | 2 +-
drivers/nfc/s3fwrn5/phy_common.c | 4 +-
drivers/nfc/s3fwrn5/phy_common.h | 4 +-
drivers/nfc/s3fwrn5/s3fwrn5.h | 2 +-
drivers/nfc/virtual_ncidev.c | 2 +-
drivers/nvme/host/Kconfig | 4 +-
drivers/nvme/host/tcp.c | 124 +-
drivers/nvme/target/rdma.c | 2 +-
drivers/nvme/target/tcp.c | 2 +-
drivers/ptp/Kconfig | 4 +-
drivers/ptp/ptp_chardev.c | 16 +-
drivers/ptp/ptp_clockmatrix.c | 14 +-
drivers/ptp/ptp_fc3.c | 1 +
drivers/ptp/ptp_idt82p33.c | 15 +-
drivers/ptp/ptp_ocp.c | 2 +-
drivers/s390/net/ism_drv.c | 2 +-
drivers/ssb/driver_gpio.c | 8 +-
drivers/target/iscsi/iscsi_target.c | 2 +-
drivers/vhost/net.c | 30 +-
fs/afs/Kconfig | 1 +
fs/afs/Makefile | 1 +
fs/afs/cm_security.c | 340 +++
fs/afs/internal.h | 20 +
fs/afs/main.c | 1 +
fs/afs/misc.c | 27 +
fs/afs/rxrpc.c | 40 +-
fs/afs/server.c | 2 +
include/crypto/krb5.h | 5 +
include/keys/rxrpc-type.h | 17 +
include/linux/btf.h | 1 +
include/linux/can/dev.h | 28 +-
include/linux/crc32.h | 23 -
include/linux/dccp.h | 289 ---
include/linux/ethtool.h | 98 +-
include/linux/fsl/ntmp.h | 121 +
include/linux/ieee80211.h | 78 +
include/linux/inet.h | 2 +-
include/linux/mdio.h | 5 +-
include/linux/mm.h | 58 +
include/linux/net.h | 15 +-
include/linux/net/intel/iidc.h | 109 -
include/linux/net/intel/iidc_rdma.h | 68 +
include/linux/net/intel/iidc_rdma_ice.h | 70 +
include/linux/net_tstamp.h | 7 +-
include/linux/netdevice.h | 49 +-
include/linux/netdevice_xmit.h | 6 +
include/linux/netfilter.h | 15 +-
include/linux/netlink.h | 3 +-
include/linux/pds/pds_adminq.h | 3 +-
include/linux/phy.h | 70 +-
include/linux/phy_fixed.h | 30 +-
include/linux/poison.h | 4 +
include/linux/ptp_clock_kernel.h | 18 +
include/linux/sched.h | 1 +
include/linux/skbuff.h | 41 +-
include/linux/skbuff_ref.h | 4 +-
include/linux/soc/mediatek/mtk_wed.h | 2 +-
include/linux/socket.h | 2 +-
include/linux/stmmac.h | 4 +-
include/linux/tcp.h | 5 +-
include/linux/tfrc.h | 51 -
include/linux/udp.h | 19 +
include/linux/uio.h | 8 +-
include/linux/virtio_vsock.h | 1 +
include/net/af_rxrpc.h | 54 +-
include/net/af_vsock.h | 1 +
include/net/bluetooth/bluetooth.h | 4 +
include/net/bluetooth/hci.h | 4 +-
include/net/bluetooth/hci_core.h | 51 +-
include/net/bluetooth/hci_drv.h | 76 +
include/net/bluetooth/hci_mon.h | 2 +
include/net/cfg80211.h | 44 +-
include/net/checksum.h | 12 -
include/net/devlink.h | 10 +-
include/net/dropreason-core.h | 10 +
include/net/dsa.h | 5 +-
include/net/flow.h | 1 +
include/net/inet_hashtables.h | 7 +-
include/net/ip6_fib.h | 1 +
include/net/ip_fib.h | 3 +-
include/net/ip_tunnels.h | 7 +-
include/net/lwtunnel.h | 13 +-
include/net/mac80211.h | 28 +-
include/net/mana/mana.h | 4 +-
include/net/mptcp.h | 13 +-
include/net/net_namespace.h | 4 +-
include/net/netdev_lock.h | 47 +-
include/net/netdev_queues.h | 22 +-
include/net/netdev_rx_queue.h | 6 +-
include/net/netfilter/nf_tables.h | 12 +-
include/net/netfilter/nft_fib.h | 9 +
include/net/netlink.h | 22 +
include/net/netmem.h | 34 +-
include/net/netns/ipv4.h | 11 +
include/net/netns/ipv6.h | 1 +
include/net/nexthop.h | 2 +
include/net/p8022.h | 16 -
include/net/page_pool/helpers.h | 11 +
include/net/page_pool/types.h | 6 +
include/net/route.h | 3 +
include/net/rps.h | 29 +-
include/net/rstreason.h | 2 +-
include/net/sch_generic.h | 8 +
include/net/scm.h | 121 +-
include/net/sctp/checksum.h | 29 +-
include/net/sctp/sctp.h | 2 -
include/net/sctp/sm.h | 1 -
include/net/sctp/structs.h | 2 -
include/net/secure_seq.h | 4 -
include/net/sock.h | 46 +-
include/net/strparser.h | 2 -
include/net/tcp.h | 3 +-
include/net/udp.h | 1 +
include/net/udp_tunnel.h | 15 +
include/net/vxlan.h | 5 +-
include/net/xdp.h | 4 +
include/net/xfrm.h | 19 +-
include/soc/mscc/ocelot.h | 7 +-
include/trace/events/afs.h | 11 +-
include/trace/events/rxrpc.h | 163 +-
include/trace/events/sock.h | 1 -
include/trace/events/sunrpc.h | 2 -
include/trace/events/tcp.h | 99 +-
include/uapi/asm-generic/socket.h | 2 +
include/uapi/linux/devlink.h | 15 +
include/uapi/linux/ethtool.h | 134 +-
include/uapi/linux/ethtool_netlink_generated.h | 14 +
include/uapi/linux/fib_rules.h | 4 +-
include/uapi/linux/if_addr.h | 4 +-
include/uapi/linux/if_addrlabel.h | 4 +-
include/uapi/linux/if_alg.h | 6 +-
include/uapi/linux/if_arcnet.h | 6 +-
include/uapi/linux/if_bonding.h | 6 +-
include/uapi/linux/if_bridge.h | 10 +-
include/uapi/linux/if_fc.h | 6 +-
include/uapi/linux/if_hippi.h | 6 +-
include/uapi/linux/if_link.h | 15 +
include/uapi/linux/if_packet.h | 4 +-
include/uapi/linux/if_plip.h | 4 +-
include/uapi/linux/if_slip.h | 4 +-
include/uapi/linux/if_x25.h | 6 +-
include/uapi/linux/if_xdp.h | 6 +-
include/uapi/linux/ip6_tunnel.h | 4 +-
include/uapi/linux/neighbour.h | 4 +-
include/uapi/linux/net_dropmon.h | 4 +-
include/uapi/linux/net_tstamp.h | 6 +-
include/uapi/linux/netdev.h | 1 +
include/uapi/linux/netfilter/nf_tables.h | 22 +
include/uapi/linux/netfilter/nfnetlink.h | 2 +
include/uapi/linux/netlink_diag.h | 4 +-
include/uapi/linux/nl80211.h | 6 +
include/uapi/linux/ovpn.h | 109 +
include/uapi/linux/pkt_cls.h | 5 +-
include/uapi/linux/pkt_sched.h | 5 +-
include/uapi/linux/rxrpc.h | 77 +-
include/uapi/linux/snmp.h | 1 +
include/uapi/linux/tcp.h | 1 +
include/uapi/linux/udp.h | 1 +
include/uapi/linux/wireguard.h | 9 +
io_uring/zcrx.c | 3 +-
kernel/bpf/btf.c | 7 +-
kernel/configs/debug.config | 5 +
lib/crc32.c | 6 -
lib/pldmfw/pldmfw.c | 6 +
lib/tests/crc_kunit.c | 6 -
mm/page_alloc.c | 8 +-
net/802/Makefile | 5 +-
net/802/p8022.c | 64 -
net/8021q/vlan.c | 1 -
net/Kconfig | 7 +-
net/Makefile | 1 -
net/batman-adv/main.c | 4 +-
net/batman-adv/main.h | 3 +-
net/batman-adv/mesh-interface.c | 15 -
net/batman-adv/send.c | 4 +-
net/batman-adv/translation-table.c | 2 +-
net/bluetooth/Makefile | 3 +-
net/bluetooth/af_bluetooth.c | 87 +
net/bluetooth/hci_conn.c | 79 +-
net/bluetooth/hci_core.c | 45 +-
net/bluetooth/hci_drv.c | 105 +
net/bluetooth/hci_event.c | 40 +-
net/bluetooth/hci_sock.c | 12 +-
net/bluetooth/hci_sync.c | 63 +-
net/bluetooth/iso.c | 30 +-
net/bluetooth/mgmt.c | 3 +-
net/bluetooth/mgmt_util.c | 2 +-
net/bridge/br.c | 22 +-
net/bridge/br_arp_nd_proxy.c | 7 +
net/bridge/br_input.c | 3 +-
net/bridge/br_mdb.c | 28 +-
net/bridge/br_mst.c | 4 +-
net/bridge/br_multicast.c | 103 +-
net/bridge/br_private.h | 41 +-
net/bridge/br_switchdev.c | 13 +-
net/bridge/netfilter/nf_conntrack_bridge.c | 12 +-
net/core/datagram.c | 90 +-
net/core/dev.c | 183 +-
net/core/dev.h | 22 +-
net/core/dev_api.c | 11 +-
net/core/dev_ioctl.c | 6 +-
net/core/devmem.c | 132 +-
net/core/devmem.h | 84 +-
net/core/dst_cache.c | 30 +-
net/core/fib_rules.c | 14 +-
net/core/lock_debug.c | 6 +-
net/core/lwtunnel.c | 15 +-
net/core/neighbour.c | 16 +-
net/core/net-procfs.c | 9 +-
net/core/net_namespace.c | 171 +-
net/core/netdev-genl-gen.c | 13 +
net/core/netdev-genl-gen.h | 1 +
net/core/netdev-genl.c | 157 +-
net/core/netmem_priv.h | 33 +-
net/core/page_pool.c | 89 +-
net/core/pktgen.c | 103 +-
net/core/rtnetlink.c | 63 +-
net/core/scm.c | 122 +
net/core/secure_seq.c | 42 -
net/core/skbuff.c | 214 +-
net/core/sock.c | 104 +-
net/core/sock_diag.c | 2 -
net/core/sysctl_net_core.c | 6 +-
net/core/utils.c | 8 +-
net/core/xdp.c | 72 +-
net/dccp/Kconfig | 46 -
net/dccp/Makefile | 30 -
net/dccp/ackvec.c | 403 ----
net/dccp/ackvec.h | 136 --
net/dccp/ccid.c | 219 --
net/dccp/ccid.h | 262 ---
net/dccp/ccids/Kconfig | 55 -
net/dccp/ccids/ccid2.c | 794 -------
net/dccp/ccids/ccid2.h | 121 -
net/dccp/ccids/ccid3.c | 866 -------
net/dccp/ccids/ccid3.h | 148 --
net/dccp/ccids/lib/loss_interval.c | 184 --
net/dccp/ccids/lib/loss_interval.h | 69 -
net/dccp/ccids/lib/packet_history.c | 439 ----
net/dccp/ccids/lib/packet_history.h | 142 --
net/dccp/ccids/lib/tfrc.c | 46 -
net/dccp/ccids/lib/tfrc.h | 73 -
net/dccp/ccids/lib/tfrc_equation.c | 702 ------
net/dccp/dccp.h | 483 ----
net/dccp/diag.c | 85 -
net/dccp/feat.c | 1581 -------------
net/dccp/feat.h | 133 --
net/dccp/input.c | 739 ------
net/dccp/ipv4.c | 1101 ---------
net/dccp/ipv6.c | 1174 ----------
net/dccp/ipv6.h | 27 -
net/dccp/minisocks.c | 266 ---
net/dccp/options.c | 609 -----
net/dccp/output.c | 708 ------
net/dccp/proto.c | 1293 -----------
net/dccp/qpolicy.c | 136 --
net/dccp/sysctl.c | 107 -
net/dccp/timer.c | 272 ---
net/dccp/trace.h | 82 -
net/devlink/dev.c | 2 +-
net/devlink/health.c | 52 +-
net/devlink/netlink_gen.c | 29 +-
net/devlink/param.c | 46 +-
net/dsa/port.c | 10 +-
net/dsa/user.c | 41 +-
net/ethtool/common.c | 29 +-
net/ethtool/ioctl.c | 99 +-
net/ethtool/mm.c | 279 ++-
net/ethtool/netlink.c | 217 +-
net/ethtool/netlink.h | 4 -
net/ethtool/phy.c | 342 +--
net/ethtool/tsinfo.c | 23 +
net/hsr/hsr_device.c | 5 +
net/hsr/hsr_main.c | 9 +
net/hsr/hsr_main.h | 1 +
net/hsr/hsr_slave.c | 2 +
net/ieee802154/nl-phy.c | 6 +-
net/ipv4/Kconfig | 2 +-
net/ipv4/af_inet.c | 5 +-
net/ipv4/devinet.c | 4 +-
net/ipv4/fib_frontend.c | 8 +-
net/ipv4/fib_semantics.c | 50 +-
net/ipv4/gre_demux.c | 2 +-
net/ipv4/inet_connection_sock.c | 23 +-
net/ipv4/inet_diag.c | 4 +-
net/ipv4/inet_hashtables.c | 36 +-
net/ipv4/inet_timewait_sock.c | 4 -
net/ipv4/ip_gre.c | 27 +-
net/ipv4/ip_output.c | 3 +-
net/ipv4/ip_tunnel.c | 29 +-
net/ipv4/ip_vti.c | 9 +-
net/ipv4/ipip.c | 9 +-
net/ipv4/ipmr.c | 8 +-
net/ipv4/netfilter/ip_tables.c | 2 +-
net/ipv4/netfilter/nf_dup_ipv4.c | 6 +-
net/ipv4/netfilter/nft_fib_ipv4.c | 11 +-
net/ipv4/nexthop.c | 38 +-
net/ipv4/proc.c | 1 +
net/ipv4/route.c | 26 +-
net/ipv4/tcp.c | 53 +-
net/ipv4/tcp_fastopen.c | 1 +
net/ipv4/tcp_input.c | 110 +-
net/ipv4/tcp_ipv4.c | 7 +-
net/ipv4/tcp_minisocks.c | 9 +-
net/ipv4/tcp_output.c | 5 +-
net/ipv4/udp.c | 227 +-
net/ipv4/udp_offload.c | 172 +-
net/ipv4/udp_tunnel_core.c | 15 +
net/ipv6/addrconf.c | 12 +-
net/ipv6/addrlabel.c | 8 +-
net/ipv6/af_inet6.c | 2 +-
net/ipv6/inet6_connection_sock.c | 2 -
net/ipv6/ioam6_iptunnel.c | 76 +-
net/ipv6/ip6_fib.c | 115 +-
net/ipv6/ip6_gre.c | 22 +-
net/ipv6/ip6_output.c | 5 +-
net/ipv6/ip6_tunnel.c | 24 +-
net/ipv6/ip6_vti.c | 27 +-
net/ipv6/netfilter.c | 12 +-
net/ipv6/netfilter/ip6_tables.c | 2 +-
net/ipv6/netfilter/nf_dup_ipv6.c | 6 +-
net/ipv6/netfilter/nft_fib_ipv6.c | 17 +-
net/ipv6/route.c | 424 ++--
net/ipv6/seg6_hmac.c | 13 +-
net/ipv6/sit.c | 23 +-
net/ipv6/tcp_ipv6.c | 5 +-
net/ipv6/udp.c | 2 +
net/ipv6/udp_offload.c | 5 +
net/key/af_key.c | 2 +-
net/mac80211/cfg.c | 78 +-
net/mac80211/chan.c | 3 +
net/mac80211/debugfs_sta.c | 6 -
net/mac80211/ibss.c | 19 +-
net/mac80211/ieee80211_i.h | 16 +-
net/mac80211/iface.c | 87 +-
net/mac80211/link.c | 90 +-
net/mac80211/mesh.c | 10 +-
net/mac80211/mesh_hwmp.c | 6 +-
net/mac80211/mesh_pathtbl.c | 2 +-
net/mac80211/mesh_plink.c | 10 +-
net/mac80211/mlme.c | 4 +-
net/mac80211/parse.c | 3 -
net/mac80211/rate.c | 12 +-
net/mac80211/rc80211_minstrel_ht.c | 13 +-
net/mac80211/scan.c | 18 +-
net/mac80211/spectmgmt.c | 55 +-
net/mac80211/sta_info.c | 28 -
net/mac80211/sta_info.h | 11 -
net/mac80211/tdls.c | 4 +-
net/mac80211/tx.c | 35 +-
net/mac80211/util.c | 25 +-
net/mctp/device.c | 4 +-
net/mctp/neigh.c | 5 +-
net/mpls/af_mpls.c | 8 +-
net/mptcp/mib.c | 1 +
net/mptcp/mib.h | 1 +
net/mptcp/pm.c | 5 +-
net/mptcp/protocol.c | 12 +-
net/mptcp/protocol.h | 10 +-
net/mptcp/sched.c | 35 +-
net/mptcp/subflow.c | 12 +-
net/ncsi/internal.h | 23 +-
net/ncsi/ncsi-pkt.h | 23 +-
net/ncsi/ncsi-rsp.c | 39 +-
net/netfilter/Kconfig | 6 +-
net/netfilter/core.c | 3 -
net/netfilter/ipvs/Kconfig | 2 +-
net/netfilter/nf_conntrack_core.c | 10 +-
net/netfilter/nf_conntrack_standalone.c | 88 +-
net/netfilter/nf_dup_netdev.c | 22 +-
net/netfilter/nf_tables_api.c | 428 +++-
net/netfilter/nf_tables_offload.c | 51 +-
net/netfilter/nf_tables_trace.c | 54 +-
net/netfilter/nfnetlink.c | 1 +
net/netfilter/nft_chain_filter.c | 94 +-
net/netfilter/nft_flow_offload.c | 2 +-
net/netfilter/nft_inner.c | 18 +-
net/netfilter/nft_quota.c | 20 +-
net/netfilter/nft_set_pipapo.c | 64 +-
net/netfilter/nft_tunnel.c | 8 +-
net/netfilter/xt_IDLETIMER.c | 12 +-
net/netfilter/xt_TCPOPTSTRIP.c | 4 +-
net/netfilter/xt_cgroup.c | 26 +
net/netfilter/xt_mark.c | 2 +-
net/netlabel/netlabel_kapi.c | 3 +
net/netlink/policy.c | 5 +
net/openvswitch/Kconfig | 2 +-
net/openvswitch/actions.c | 86 +-
net/openvswitch/datapath.c | 33 +-
net/openvswitch/datapath.h | 52 +-
net/openvswitch/flow.c | 2 +-
net/openvswitch/flow_netlink.c | 3 +-
net/packet/af_packet.c | 21 +-
net/packet/internal.h | 1 +
net/rds/connection.c | 6 +-
net/rds/page.c | 25 +-
net/rxrpc/Kconfig | 23 +
net/rxrpc/Makefile | 6 +-
net/rxrpc/af_rxrpc.c | 130 +-
net/rxrpc/ar-internal.h | 83 +-
net/rxrpc/call_accept.c | 34 +-
net/rxrpc/call_object.c | 24 +-
net/rxrpc/conn_event.c | 134 +-
net/rxrpc/conn_object.c | 2 +
net/rxrpc/insecure.c | 13 +-
net/rxrpc/io_thread.c | 12 +-
net/rxrpc/key.c | 187 ++
net/rxrpc/oob.c | 379 ++++
net/rxrpc/output.c | 60 +-
net/rxrpc/peer_object.c | 22 +-
net/rxrpc/protocol.h | 20 +
net/rxrpc/recvmsg.c | 132 +-
net/rxrpc/rxgk.c | 1371 +++++++++++
net/rxrpc/rxgk_app.c | 286 +++
net/rxrpc/rxgk_common.h | 139 ++
net/rxrpc/rxgk_kdf.c | 288 +++
net/rxrpc/rxkad.c | 296 ++-
net/rxrpc/rxperf.c | 78 +-
net/rxrpc/security.c | 3 +
net/rxrpc/sendmsg.c | 25 +-
net/rxrpc/server_key.c | 42 +
net/rxrpc/txbuf.c | 8 -
net/sched/Kconfig | 14 +-
net/sched/Makefile | 1 +
net/sched/act_api.c | 16 +-
net/sched/act_mirred.c | 28 +-
net/sched/bpf_qdisc.c | 475 ++++
net/sched/sch_api.c | 11 +-
net/sched/sch_frag.c | 10 +-
net/sched/sch_generic.c | 7 +-
net/sched/sch_hfsc.c | 9 +-
net/sctp/Kconfig | 2 +-
net/sctp/associola.c | 18 -
net/sctp/offload.c | 1 -
net/sctp/sm_make_chunk.c | 8 -
net/sctp/socket.c | 9 +-
net/strparser/strparser.c | 13 -
net/tipc/crypto.c | 2 +-
net/tipc/link.c | 2 +-
net/tipc/node.c | 2 +-
net/unix/af_unix.c | 104 +-
net/vmw_vsock/af_vsock.c | 33 +
net/vmw_vsock/virtio_transport_common.c | 52 +-
net/wireless/nl80211.c | 42 +-
net/xdp/xsk_buff_pool.c | 6 +-
net/xfrm/xfrm_device.c | 18 +-
net/xfrm/xfrm_interface_core.c | 34 +-
net/xfrm/xfrm_nat_keepalive.c | 30 +-
net/xfrm/xfrm_policy.c | 4 +-
net/xfrm/xfrm_state.c | 46 +-
net/xfrm/xfrm_user.c | 77 +-
rust/kernel/net/phy.rs | 1 +
samples/bpf/sockex2_kern.c | 1 -
scripts/checkpatch.pl | 2 +-
security/lsm_audit.c | 19 -
security/selinux/hooks.c | 41 +-
security/selinux/include/classmap.h | 2 -
security/selinux/nlmsgtab.c | 1 -
security/smack/smack_lsm.c | 9 +-
tools/Makefile | 16 +-
tools/include/uapi/asm-generic/socket.h | 2 +
tools/include/uapi/linux/if_xdp.h | 6 +-
tools/include/uapi/linux/netdev.h | 1 +
tools/lib/bpf/libbpf.h | 5 +-
tools/lib/bpf/netlink.c | 20 +-
tools/net/ynl/Makefile.deps | 17 +
tools/net/ynl/generated/Makefile | 7 +-
tools/net/ynl/lib/ynl-priv.h | 19 +-
tools/net/ynl/lib/ynl.c | 160 +-
tools/net/ynl/lib/ynl.h | 18 +
tools/net/ynl/pyynl/cli.py | 15 +-
tools/net/ynl/pyynl/lib/__init__.py | 5 +-
tools/net/ynl/pyynl/lib/ynl.py | 39 +-
tools/net/ynl/pyynl/ynl_gen_c.py | 843 +++++--
tools/net/ynl/pyynl/ynl_gen_rst.py | 2 +-
tools/net/ynl/samples/.gitignore | 6 +-
tools/net/ynl/samples/devlink.c | 7 +-
tools/net/ynl/samples/rt-addr.c | 80 +
tools/net/ynl/samples/rt-link.c | 184 ++
tools/net/ynl/samples/rt-route.c | 80 +
tools/net/ynl/samples/tc.c | 80 +
tools/testing/selftests/Makefile | 2 +
tools/testing/selftests/bpf/config | 2 +
tools/testing/selftests/bpf/prog_tests/bpf_qdisc.c | 231 ++
.../selftests/bpf/prog_tests/sock_iter_batch.c | 447 +++-
.../testing/selftests/bpf/progs/bpf_qdisc_common.h | 27 +
.../bpf/progs/bpf_qdisc_fail__incompl_ops.c | 41 +
tools/testing/selftests/bpf/progs/bpf_qdisc_fifo.c | 126 ++
tools/testing/selftests/bpf/progs/bpf_qdisc_fq.c | 756 +++++++
.../testing/selftests/bpf/progs/bpf_tracing_net.h | 1 +
tools/testing/selftests/bpf/progs/setget_sockopt.c | 11 +
.../testing/selftests/bpf/progs/sock_iter_batch.c | 24 +-
tools/testing/selftests/bpf/progs/xsk_xdp_progs.c | 50 +
tools/testing/selftests/bpf/xsk_xdp_common.h | 1 +
tools/testing/selftests/bpf/xskxceiver.c | 118 +-
tools/testing/selftests/bpf/xskxceiver.h | 2 +
tools/testing/selftests/drivers/net/.gitignore | 2 +-
tools/testing/selftests/drivers/net/Makefile | 6 +-
tools/testing/selftests/drivers/net/hw/Makefile | 3 +-
tools/testing/selftests/drivers/net/hw/devmem.py | 45 +-
tools/testing/selftests/drivers/net/hw/iou-zcrx.c | 27 +-
tools/testing/selftests/drivers/net/hw/iou-zcrx.py | 140 +-
.../selftests/drivers/net/hw/lib/py/__init__.py | 1 -
.../selftests/drivers/net/hw/lib/py/linkconfig.py | 222 --
tools/testing/selftests/drivers/net/hw/ncdevmem.c | 327 ++-
.../selftests/drivers/net/hw/nic_link_layer.py | 113 -
.../selftests/drivers/net/hw/nic_performance.py | 137 --
.../selftests/drivers/net/hw/rss_input_xfrm.py | 5 +
.../selftests/drivers/net/hw/xsk_reconfig.py | 60 +
tools/testing/selftests/drivers/net/lib/py/env.py | 2 +-
tools/testing/selftests/drivers/net/lib/py/load.py | 20 +-
.../selftests/drivers/net/lib/sh/lib_netcons.sh | 1 -
tools/testing/selftests/drivers/net/napi_id.py | 23 +
.../testing/selftests/drivers/net/napi_id_helper.c | 83 +
.../selftests/drivers/net/netdevsim/peer.sh | 2 +-
tools/testing/selftests/drivers/net/ping.py | 16 +
tools/testing/selftests/drivers/net/queues.py | 4 +-
tools/testing/selftests/drivers/net/team/Makefile | 2 +-
tools/testing/selftests/drivers/net/team/config | 1 +
.../selftests/drivers/net/team/propagation.sh | 80 +
tools/testing/selftests/nci/nci_dev.c | 2 +-
tools/testing/selftests/net/Makefile | 2 +-
tools/testing/selftests/net/af_unix/scm_rights.c | 80 +-
tools/testing/selftests/net/bareudp.sh | 49 +-
tools/testing/selftests/net/busy_poll_test.sh | 2 +-
tools/testing/selftests/net/can/.gitignore | 2 +
tools/testing/selftests/net/can/Makefile | 11 +
tools/testing/selftests/net/can/test_raw_filter.c | 405 ++++
tools/testing/selftests/net/can/test_raw_filter.sh | 45 +
tools/testing/selftests/net/config | 1 -
tools/testing/selftests/net/fib_rule_tests.sh | 3 -
tools/testing/selftests/net/fib_tests.sh | 123 +-
.../selftests/net/forwarding/bridge_igmp.sh | 80 +-
.../testing/selftests/net/forwarding/bridge_mld.sh | 81 +-
tools/testing/selftests/net/forwarding/config | 1 +
tools/testing/selftests/net/icmp_redirect.sh | 2 -
.../selftests/net/ipv6_route_update_soft_lockup.sh | 1 -
tools/testing/selftests/net/lib.sh | 47 +
tools/testing/selftests/net/lib/.gitignore | 1 +
tools/testing/selftests/net/lib/Makefile | 1 +
tools/testing/selftests/net/lib/ksft.h | 56 +
tools/testing/selftests/net/lib/py/ksft.py | 24 +-
tools/testing/selftests/net/lib/py/ynl.py | 4 +-
.../{drivers/net => net/lib}/xdp_helper.c | 82 +-
tools/testing/selftests/net/mptcp/Makefile | 2 +-
tools/testing/selftests/net/mptcp/diag.sh | 32 +
tools/testing/selftests/net/mptcp/mptcp_connect.c | 21 +-
tools/testing/selftests/net/mptcp/mptcp_diag.c | 231 +-
tools/testing/selftests/net/mptcp/mptcp_inq.c | 16 +-
tools/testing/selftests/net/mptcp/mptcp_join.sh | 26 +-
tools/testing/selftests/net/mptcp/mptcp_lib.sh | 10 +-
tools/testing/selftests/net/mptcp/mptcp_sockopt.c | 16 +-
tools/testing/selftests/net/net_helper.sh | 25 -
tools/testing/selftests/net/netfilter/Makefile | 2 +
.../selftests/net/netfilter/br_netfilter.sh | 3 -
.../selftests/net/netfilter/bridge_brouter.sh | 2 -
tools/testing/selftests/net/netfilter/config | 1 +
.../selftests/net/netfilter/conntrack_resize.sh | 427 ++++
.../selftests/net/netfilter/conntrack_vrf.sh | 37 -
tools/testing/selftests/net/netfilter/ipvs.sh | 6 -
.../selftests/net/netfilter/nft_concat_range.sh | 165 +-
tools/testing/selftests/net/netfilter/nft_fib.sh | 635 +++++-
.../net/netfilter/nft_interface_stress.sh | 154 ++
.../selftests/net/netfilter/nft_nat_zones.sh | 2 -
tools/testing/selftests/net/netfilter/nft_queue.sh | 38 +-
tools/testing/selftests/net/netfilter/rpath.sh | 18 +-
tools/testing/selftests/net/ovpn/.gitignore | 2 +
tools/testing/selftests/net/ovpn/Makefile | 32 +
tools/testing/selftests/net/ovpn/common.sh | 108 +
tools/testing/selftests/net/ovpn/config | 10 +
tools/testing/selftests/net/ovpn/data64.key | 5 +
tools/testing/selftests/net/ovpn/ovpn-cli.c | 2383 ++++++++++++++++++++
tools/testing/selftests/net/ovpn/tcp_peers.txt | 5 +
.../testing/selftests/net/ovpn/test-chachapoly.sh | 9 +
.../selftests/net/ovpn/test-close-socket-tcp.sh | 9 +
.../selftests/net/ovpn/test-close-socket.sh | 45 +
tools/testing/selftests/net/ovpn/test-float.sh | 9 +
tools/testing/selftests/net/ovpn/test-tcp.sh | 9 +
tools/testing/selftests/net/ovpn/test.sh | 117 +
tools/testing/selftests/net/ovpn/udp_peers.txt | 6 +
tools/testing/selftests/net/pmtu.sh | 1 -
tools/testing/selftests/net/reuseport_addr_any.c | 36 +-
.../selftests/net/srv6_end_dt46_l3vpn_test.sh | 5 -
.../selftests/net/srv6_end_dt4_l3vpn_test.sh | 5 -
.../testing/selftests/net/srv6_end_flavors_test.sh | 4 +-
.../selftests/net/srv6_end_next_csid_l3vpn_test.sh | 77 +-
.../net/srv6_end_x_next_csid_l3vpn_test.sh | 83 +-
.../selftests/net/srv6_hencap_red_l3vpn_test.sh | 74 +-
.../selftests/net/srv6_hl2encap_red_l2vpn_test.sh | 83 +-
.../selftests/net/test_bridge_neigh_suppress.sh | 125 +
tools/testing/selftests/net/udpgro.sh | 2 +-
tools/testing/selftests/net/udpgro_bench.sh | 2 +-
tools/testing/selftests/net/udpgro_frglist.sh | 2 +-
tools/testing/selftests/net/udpgro_fwd.sh | 2 +-
.../tc-testing/tc-tests/infra/qdiscs.json | 35 +
tools/testing/selftests/tc-testing/tdc.sh | 4 +
tools/testing/selftests/wireguard/netns.sh | 29 +
tools/testing/selftests/wireguard/qemu/Makefile | 3 +-
.../testing/selftests/wireguard/qemu/debug.config | 1 -
tools/testing/vsock/timeout.c | 18 +
tools/testing/vsock/timeout.h | 1 +
tools/testing/vsock/util.c | 38 +
tools/testing/vsock/util.h | 2 +
tools/testing/vsock/vsock_test.c | 129 +-
1735 files changed, 83145 insertions(+), 38939 deletions(-)
create mode 100644 Documentation/devicetree/bindings/net/aeonsemi,as21xxx.yaml
create mode 100644 Documentation/devicetree/bindings/net/network-class.yaml
create mode 100644 Documentation/devicetree/bindings/net/renesas,r9a09g057-gbeth.yaml
create mode 100644 Documentation/devicetree/bindings/net/via,vt8500-rhine.yaml
delete mode 100644 Documentation/devicetree/bindings/net/via-rhine.txt
create mode 100644 Documentation/devicetree/bindings/net/wireless/qcom,ipq5332-wifi.yaml
create mode 100644 Documentation/devicetree/bindings/net/wireless/wireless-controller.yaml
create mode 100644 Documentation/netlink/specs/ovpn.yaml
rename Documentation/netlink/specs/{rt_addr.yaml => rt-addr.yaml} (89%)
rename Documentation/netlink/specs/{rt_link.yaml => rt-link.yaml} (93%)
rename Documentation/netlink/specs/{rt_neigh.yaml => rt-neigh.yaml} (97%)
rename Documentation/netlink/specs/{rt_route.yaml => rt-route.yaml} (93%)
rename Documentation/netlink/specs/{rt_rule.yaml => rt-rule.yaml} (97%)
delete mode 100644 Documentation/networking/dccp.rst
create mode 100644 Documentation/networking/device_drivers/ethernet/huawei/hinic3.rst
create mode 100644 Documentation/networking/device_drivers/ethernet/ti/icssg_prueth.rst
create mode 100644 Documentation/networking/devlink/ixgbe.rst
create mode 100644 drivers/net/ethernet/amd/xgbe/xgbe-smn.h
create mode 100644 drivers/net/ethernet/freescale/enetc/enetc4_debugfs.c
create mode 100644 drivers/net/ethernet/freescale/enetc/enetc4_debugfs.h
create mode 100644 drivers/net/ethernet/freescale/enetc/ntmp.c
create mode 100644 drivers/net/ethernet/freescale/enetc/ntmp_private.h
create mode 100644 drivers/net/ethernet/huawei/hinic3/Kconfig
create mode 100644 drivers/net/ethernet/huawei/hinic3/Makefile
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_common.c
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_common.h
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_hw_cfg.c
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_hw_cfg.h
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_hw_comm.c
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_hw_comm.h
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_hw_intf.h
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_hwdev.c
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_hwdev.h
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_hwif.c
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_hwif.h
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_irq.c
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_lld.c
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_lld.h
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_main.c
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_mbox.c
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_mbox.h
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_mgmt.h
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_mgmt_interface.h
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_netdev_ops.c
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_nic_cfg.c
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_nic_cfg.h
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_nic_dev.h
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_nic_io.c
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_nic_io.h
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_queue_common.c
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_queue_common.h
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_rx.c
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_rx.h
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_tx.c
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_tx.h
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_wq.c
create mode 100644 drivers/net/ethernet/huawei/hinic3/hinic3_wq.h
create mode 100644 drivers/net/ethernet/intel/idpf/idpf_ptp.c
create mode 100644 drivers/net/ethernet/intel/idpf/idpf_ptp.h
create mode 100644 drivers/net/ethernet/intel/idpf/idpf_virtchnl_ptp.c
create mode 100644 drivers/net/ethernet/intel/ixgbe/devlink/devlink.c
create mode 100644 drivers/net/ethernet/intel/ixgbe/devlink/devlink.h
create mode 100644 drivers/net/ethernet/intel/ixgbe/devlink/region.c
create mode 100644 drivers/net/ethernet/intel/ixgbe/ixgbe_fw_update.c
create mode 100644 drivers/net/ethernet/intel/ixgbe/ixgbe_fw_update.h
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/steering/hws/action_ste_pool.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/steering/hws/action_ste_pool.h
create mode 100644 drivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c
create mode 100644 drivers/net/ethernet/stmicro/stmmac/stmmac_vlan.c
create mode 100644 drivers/net/ethernet/stmicro/stmmac/stmmac_vlan.h
create mode 100644 drivers/net/ethernet/wangxun/libwx/wx_mbx.c
create mode 100644 drivers/net/ethernet/wangxun/libwx/wx_mbx.h
create mode 100644 drivers/net/ethernet/wangxun/libwx/wx_sriov.c
create mode 100644 drivers/net/ethernet/wangxun/libwx/wx_sriov.h
create mode 100644 drivers/net/ethernet/wangxun/txgbe/txgbe_aml.c
create mode 100644 drivers/net/ethernet/wangxun/txgbe/txgbe_aml.h
create mode 100644 drivers/net/mdio/mdio-realtek-rtl9300.c
create mode 100644 drivers/net/ovpn/Makefile
create mode 100644 drivers/net/ovpn/bind.c
create mode 100644 drivers/net/ovpn/bind.h
create mode 100644 drivers/net/ovpn/crypto.c
create mode 100644 drivers/net/ovpn/crypto.h
create mode 100644 drivers/net/ovpn/crypto_aead.c
create mode 100644 drivers/net/ovpn/crypto_aead.h
create mode 100644 drivers/net/ovpn/io.c
create mode 100644 drivers/net/ovpn/io.h
create mode 100644 drivers/net/ovpn/main.c
create mode 100644 drivers/net/ovpn/main.h
create mode 100644 drivers/net/ovpn/netlink-gen.c
create mode 100644 drivers/net/ovpn/netlink-gen.h
create mode 100644 drivers/net/ovpn/netlink.c
create mode 100644 drivers/net/ovpn/netlink.h
create mode 100644 drivers/net/ovpn/ovpnpriv.h
create mode 100644 drivers/net/ovpn/peer.c
create mode 100644 drivers/net/ovpn/peer.h
create mode 100644 drivers/net/ovpn/pktid.c
create mode 100644 drivers/net/ovpn/pktid.h
create mode 100644 drivers/net/ovpn/proto.h
create mode 100644 drivers/net/ovpn/skb.h
create mode 100644 drivers/net/ovpn/socket.c
create mode 100644 drivers/net/ovpn/socket.h
create mode 100644 drivers/net/ovpn/stats.c
create mode 100644 drivers/net/ovpn/stats.h
create mode 100644 drivers/net/ovpn/tcp.c
create mode 100644 drivers/net/ovpn/tcp.h
create mode 100644 drivers/net/ovpn/udp.c
create mode 100644 drivers/net/ovpn/udp.h
create mode 100644 drivers/net/phy/as21xxx.c
create mode 100644 drivers/net/phy/mdio_bus_provider.c
create mode 100644 drivers/net/phy/mediatek/mtk-2p5ge.c
create mode 100644 drivers/net/phy/mxl-86110.c
create mode 100644 drivers/net/wireless/ath/ath12k/ahb.c
create mode 100644 drivers/net/wireless/ath/ath12k/ahb.h
create mode 100644 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/fwil_types.h
create mode 100644 drivers/net/wireless/intel/iwlwifi/cfg/rf-fm.c
create mode 100644 drivers/net/wireless/intel/iwlwifi/cfg/rf-gf.c
create mode 100644 drivers/net/wireless/intel/iwlwifi/cfg/rf-hr.c
create mode 100644 drivers/net/wireless/intel/iwlwifi/cfg/rf-jf.c
create mode 100644 drivers/net/wireless/intel/iwlwifi/cfg/rf-pe.c
create mode 100644 drivers/net/wireless/intel/iwlwifi/cfg/rf-wh.c
rename drivers/net/wireless/intel/iwlwifi/{iwl-context-info-gen3.h => iwl-context-info-v2.h} (86%)
create mode 100644 drivers/net/wireless/intel/iwlwifi/mld/tests/emlsr_with_bt.c
create mode 100644 drivers/net/wireless/intel/iwlwifi/mvm/tests/hcmd.c
rename drivers/net/wireless/intel/iwlwifi/pcie/{ctxt-info-gen3.c => ctxt-info-v2.c} (75%)
create mode 100644 drivers/net/wireless/mediatek/mt76/mt7925/testmode.c
create mode 100644 fs/afs/cm_security.c
create mode 100644 include/linux/fsl/ntmp.h
delete mode 100644 include/linux/net/intel/iidc.h
create mode 100644 include/linux/net/intel/iidc_rdma.h
create mode 100644 include/linux/net/intel/iidc_rdma_ice.h
delete mode 100644 include/linux/tfrc.h
create mode 100644 include/net/bluetooth/hci_drv.h
delete mode 100644 include/net/p8022.h
create mode 100644 include/uapi/linux/ovpn.h
delete mode 100644 net/802/p8022.c
create mode 100644 net/bluetooth/hci_drv.c
delete mode 100644 net/dccp/Kconfig
delete mode 100644 net/dccp/Makefile
delete mode 100644 net/dccp/ackvec.c
delete mode 100644 net/dccp/ackvec.h
delete mode 100644 net/dccp/ccid.c
delete mode 100644 net/dccp/ccid.h
delete mode 100644 net/dccp/ccids/Kconfig
delete mode 100644 net/dccp/ccids/ccid2.c
delete mode 100644 net/dccp/ccids/ccid2.h
delete mode 100644 net/dccp/ccids/ccid3.c
delete mode 100644 net/dccp/ccids/ccid3.h
delete mode 100644 net/dccp/ccids/lib/loss_interval.c
delete mode 100644 net/dccp/ccids/lib/loss_interval.h
delete mode 100644 net/dccp/ccids/lib/packet_history.c
delete mode 100644 net/dccp/ccids/lib/packet_history.h
delete mode 100644 net/dccp/ccids/lib/tfrc.c
delete mode 100644 net/dccp/ccids/lib/tfrc.h
delete mode 100644 net/dccp/ccids/lib/tfrc_equation.c
delete mode 100644 net/dccp/dccp.h
delete mode 100644 net/dccp/diag.c
delete mode 100644 net/dccp/feat.c
delete mode 100644 net/dccp/feat.h
delete mode 100644 net/dccp/input.c
delete mode 100644 net/dccp/ipv4.c
delete mode 100644 net/dccp/ipv6.c
delete mode 100644 net/dccp/ipv6.h
delete mode 100644 net/dccp/minisocks.c
delete mode 100644 net/dccp/options.c
delete mode 100644 net/dccp/output.c
delete mode 100644 net/dccp/proto.c
delete mode 100644 net/dccp/qpolicy.c
delete mode 100644 net/dccp/sysctl.c
delete mode 100644 net/dccp/timer.c
delete mode 100644 net/dccp/trace.h
create mode 100644 net/rxrpc/oob.c
create mode 100644 net/rxrpc/rxgk.c
create mode 100644 net/rxrpc/rxgk_app.c
create mode 100644 net/rxrpc/rxgk_common.h
create mode 100644 net/rxrpc/rxgk_kdf.c
create mode 100644 net/sched/bpf_qdisc.c
create mode 100644 tools/net/ynl/samples/rt-addr.c
create mode 100644 tools/net/ynl/samples/rt-link.c
create mode 100644 tools/net/ynl/samples/rt-route.c
create mode 100644 tools/net/ynl/samples/tc.c
create mode 100644 tools/testing/selftests/bpf/prog_tests/bpf_qdisc.c
create mode 100644 tools/testing/selftests/bpf/progs/bpf_qdisc_common.h
create mode 100644 tools/testing/selftests/bpf/progs/bpf_qdisc_fail__incompl_ops.c
create mode 100644 tools/testing/selftests/bpf/progs/bpf_qdisc_fifo.c
create mode 100644 tools/testing/selftests/bpf/progs/bpf_qdisc_fq.c
delete mode 100644 tools/testing/selftests/drivers/net/hw/lib/py/linkconfig.py
delete mode 100644 tools/testing/selftests/drivers/net/hw/nic_link_layer.py
delete mode 100644 tools/testing/selftests/drivers/net/hw/nic_performance.py
create mode 100755 tools/testing/selftests/drivers/net/hw/xsk_reconfig.py
create mode 100755 tools/testing/selftests/drivers/net/napi_id.py
create mode 100644 tools/testing/selftests/drivers/net/napi_id_helper.c
create mode 100755 tools/testing/selftests/drivers/net/team/propagation.sh
create mode 100644 tools/testing/selftests/net/can/.gitignore
create mode 100644 tools/testing/selftests/net/can/Makefile
create mode 100644 tools/testing/selftests/net/can/test_raw_filter.c
create mode 100755 tools/testing/selftests/net/can/test_raw_filter.sh
create mode 100644 tools/testing/selftests/net/lib/ksft.h
rename tools/testing/selftests/{drivers/net => net/lib}/xdp_helper.c (69%)
delete mode 100644 tools/testing/selftests/net/net_helper.sh
create mode 100755 tools/testing/selftests/net/netfilter/conntrack_resize.sh
create mode 100755 tools/testing/selftests/net/netfilter/nft_interface_stress.sh
create mode 100644 tools/testing/selftests/net/ovpn/.gitignore
create mode 100644 tools/testing/selftests/net/ovpn/Makefile
create mode 100644 tools/testing/selftests/net/ovpn/common.sh
create mode 100644 tools/testing/selftests/net/ovpn/config
create mode 100644 tools/testing/selftests/net/ovpn/data64.key
create mode 100644 tools/testing/selftests/net/ovpn/ovpn-cli.c
create mode 100644 tools/testing/selftests/net/ovpn/tcp_peers.txt
create mode 100755 tools/testing/selftests/net/ovpn/test-chachapoly.sh
create mode 100755 tools/testing/selftests/net/ovpn/test-close-socket-tcp.sh
create mode 100755 tools/testing/selftests/net/ovpn/test-close-socket.sh
create mode 100755 tools/testing/selftests/net/ovpn/test-float.sh
create mode 100755 tools/testing/selftests/net/ovpn/test-tcp.sh
create mode 100755 tools/testing/selftests/net/ovpn/test.sh
create mode 100644 tools/testing/selftests/net/ovpn/udp_peers.txt
Return-Path: <linux-kernel+bounces-665585-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 3604741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:02:56 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id DCB263B51B5
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:02:34 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id D33EB2874EC;
Wed, 28 May 2025 14:02:46 +0000 (UTC)
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 64838158218;
Wed, 28 May 2025 14:02:45 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748440966; cv=none; b=s5vfuZXoCKBRYCMtVeJYEz6wSfLBtAnF+D98zQEfhzOAtNPu8LAlJcwI6wuYhhBBzusENG2SaO0huq2rvU7Ae50wdLnvNMbhjiVxDQj4dZtMg1L2ep0LPlMVqBq9XI/epbyiMGQNrGKQ1W9pLc4nk+xABPH/VrGWSStJyaeUPys=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748440966; c=relaxed/simple;
bh=6rP9uumW2dRvvfBLPAtOem3d+giinVW++XhqPnPmrPc=;
h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=p6CrfzvW7DoDsvvl5M6UjnsUu+cHuc9AIEpxwyqaz55+Ww09B7nFu77udoxSx3HmokxN5LK/J6V+ZCcVOLlZ6sKRIyJAaBQJAlu/RSTF0mN5ucb4+87fiLiM6tzC8qn5MnBs3+WZ/EtjZsquPxS1xR0HWeKA2eW95D71l++QUvA=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2945BC4CEE3;
Wed, 28 May 2025 14:02:42 +0000 (UTC)
Date: Wed, 28 May 2025 10:03:41 -0400
From: Steven Rostedt <rostedt@xxxxxxxxxxx>
To: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: Lyude Paul <lyude@xxxxxxxxxx>, rust-for-linux@xxxxxxxxxxxxxxx, Thomas
Gleixner <tglx@xxxxxxxxxxxxx>, Boqun Feng <boqun.feng@xxxxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx, Daniel Almeida
<daniel.almeida@xxxxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>, Juri Lelli
<juri.lelli@xxxxxxxxxx>, Vincent Guittot <vincent.guittot@xxxxxxxxxx>,
Dietmar Eggemann <dietmar.eggemann@xxxxxxx>, Ben Segall
<bsegall@xxxxxxxxxx>, Mel Gorman <mgorman@xxxxxxx>, Valentin Schneider
<vschneid@xxxxxxxxxx>, Will Deacon <will@xxxxxxxxxx>, Waiman Long
<longman@xxxxxxxxxx>, Miguel Ojeda <ojeda@xxxxxxxxxx>, Alex Gaynor
<alex.gaynor@xxxxxxxxx>, Gary Guo <gary@xxxxxxxxxxx>, =?UTF-8?B?QmrDtnJu?=
Roy Baron <bjorn3_gh@xxxxxxxxxxxxxx>, Benno Lossin <lossin@xxxxxxxxxx>,
Andreas Hindborg <a.hindborg@xxxxxxxxxx>, Alice Ryhl
<aliceryhl@xxxxxxxxxx>, Trevor Gross <tmgross@xxxxxxxxx>, Danilo Krummrich
<dakr@xxxxxxxxxx>, David Woodhouse <dwmw@xxxxxxxxxxxx>, Jens Axboe
<axboe@xxxxxxxxx>, Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>,
NeilBrown <neilb@xxxxxxx>, Caleb Sander Mateos <csander@xxxxxxxxxxxxxxx>,
Ryo Takakura <ryotkkr98@xxxxxxxxx>, K Prateek Nayak
<kprateek.nayak@xxxxxxx>
Subject: Re: [RFC RESEND v10 03/14] irq & spin_lock: Add counted interrupt
disabling/enabling
Message-ID: <20250528100341.2d5755c9@xxxxxxxxxxxxxxxxxx>
In-Reply-To: <20250528091023.GY39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <20250527222254.565881-1-lyude@xxxxxxxxxx>
<20250527222254.565881-4-lyude@xxxxxxxxxx>
<20250528091023.GY39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
X-Mailer: Claws Mail 3.20.0git84 (GTK+ 2.24.33; x86_64-pc-linux-gnu)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 11:10:23 +0200
Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
> Also, is there effort planned to fully remove the save/restore variant?
> As before, my main objection is adding variants with overlapping
> functionality while not cleaning up the pre-existing code.
I'm sure we could get people to do that. When all the strncpy()'s are
removed what are those folks going to do next?
-- Steve
Return-Path: <linux-kernel+bounces-665586-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E2A6441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:04:45 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id C1ABA1BC3ECA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:04:58 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 70A1D286D42;
Wed, 28 May 2025 14:04:37 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b="XLSzmyY0"
Received: from out30-118.freemail.mail.aliyun.com (out30-118.freemail.mail.aliyun.com [115.124.30.118])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7CEC438FB0;
Wed, 28 May 2025 14:04:30 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.124.30.118
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441076; cv=none; b=WQ6H1SoVvOZbXlCye1l8lxGoem+3oUe3Aeu5n+dQRAYw8KD/05m9OZ/gKuLh+0ZL4khSdT3EWZsb+zyCp54hkqK+LsahwKYsd1H/ep66BnMbWoHiNmn8YERhuLaSx8HZy3MGqwsGkxYv4J2cDBIW3BdL9D2HbWJM5bTVOpc8Iso=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441076; c=relaxed/simple;
bh=9xvdpUTqNvPH1sdA+4tjhROXXbncThrelIiLgy3shaM=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=o5Urw72IcYx/GSJjGgzftrpGISMTFtaR34K2BgfQ9Ura+cvJR82g/ZWetNwRwEI8KP0AYmzDBsAO/Uvtg1bi4lkpL1+szEa6no9BR6IsBsy/25G1pZuDh7kK3JcnGwo+ln16q7YJlj/5kdwbGI/pBcFDaGfVHquIECnUMNoagOU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com; spf=pass smtp.mailfrom=linux.alibaba.com; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b=XLSzmyY0; arc=none smtp.client-ip=115.124.30.118
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.alibaba.com
DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed;
d=linux.alibaba.com; s=default;
t=1748441069; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type;
bh=VS4Pm+zKew2qwigMu2CJywp/34i9y6xWwalLXDrUznQ=;
b=XLSzmyY0jzpoGn037vaBy6kxc02OH2OcK0g6QCtmx9pyEP2sprwUY4+awoHhgllMqC/Y6+Klt7Lyb22zAEWd4JCzgSDSquYIOGEp9Z+4s7wrB3sMPpfKsxZJ4+m1PTKSVDQRYw73XcLk1jWrqNgA4c7RuXLP/N3v4Nd8PFsb4pc=
Received: from 30.39.222.111(mailfrom:baolin.wang@xxxxxxxxxxxxxxxxx fp:SMTPD_---0WcDdxLt_1748441065 cluster:ay36)
by smtp.aliyun-inc.com;
Wed, 28 May 2025 22:04:26 +0800
Message-ID: <e800189d-ad3d-409d-bfba-2c32a6ac66c0@xxxxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 22:04:24 +0800
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH v7 06/12] khugepaged: introduce khugepaged_scan_bitmap for
mTHP support
To: David Hildenbrand <david@xxxxxxxxxx>, Nico Pache <npache@xxxxxxxxxx>,
David Rientjes <rientjes@xxxxxxxxxx>, zokeefe@xxxxxxxxxx
Cc: linux-mm@xxxxxxxxx, linux-doc@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-trace-kernel@xxxxxxxxxxxxxxx,
ziy@xxxxxxxxxx, lorenzo.stoakes@xxxxxxxxxx, Liam.Howlett@xxxxxxxxxx,
ryan.roberts@xxxxxxx, dev.jain@xxxxxxx, corbet@xxxxxxx, rostedt@xxxxxxxxxxx,
mhiramat@xxxxxxxxxx, mathieu.desnoyers@xxxxxxxxxxxx,
akpm@xxxxxxxxxxxxxxxxxxxx, baohua@xxxxxxxxxx, willy@xxxxxxxxxxxxx,
peterx@xxxxxxxxxx, wangkefeng.wang@xxxxxxxxxx, usamaarif642@xxxxxxxxx,
sunnanyong@xxxxxxxxxx, vishal.moola@xxxxxxxxx,
thomas.hellstrom@xxxxxxxxxxxxxxx, yang@xxxxxxxxxxxxxxxxxxxxxx,
kirill.shutemov@xxxxxxxxxxxxxxx, aarcange@xxxxxxxxxx, raquini@xxxxxxxxxx,
anshuman.khandual@xxxxxxx, catalin.marinas@xxxxxxx, tiwai@xxxxxxx,
will@xxxxxxxxxx, dave.hansen@xxxxxxxxxxxxxxx, jack@xxxxxxx, cl@xxxxxxxxxx,
jglisse@xxxxxxxxxx, surenb@xxxxxxxxxx, hannes@xxxxxxxxxxx, mhocko@xxxxxxxx,
rdunlap@xxxxxxxxxxxxx
References: <20250515032226.128900-1-npache@xxxxxxxxxx>
<20250515032226.128900-7-npache@xxxxxxxxxx>
<9c54397f-3cbf-4fa2-bf69-ba89613d355f@xxxxxxxxxxxxxxxxx>
<CAA1CXcC9MB2Nw4MmGajESfH8DhAsh4QvTj4ABG3+Rg2iPi087w@xxxxxxxxxxxxxx>
<ed1d1281-ece3-4d2c-8e58-aaeb436d3927@xxxxxxxxxxxxxxxxx>
<CAA1CXcAWcahkxzsvK_bcWei6or_gKBjt+97dqhuSem8N7cBAQw@xxxxxxxxxxxxxx>
<1f00fdc3-a3a3-464b-8565-4c1b23d34f8d@xxxxxxxxxxxxxxxxx>
<cf33ff99-ac97-4a33-9df0-01a59d5b8424@xxxxxxxxxx>
From: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx>
In-Reply-To: <cf33ff99-ac97-4a33-9df0-01a59d5b8424@xxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-10.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,
USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 2025/5/28 17:26, David Hildenbrand wrote:
> On 22.05.25 11:39, Baolin Wang wrote:
>>
>>
>> On 2025/5/21 18:23, Nico Pache wrote:
>>> On Tue, May 20, 2025 at 4:09â?¯AM Baolin Wang
>>> <baolin.wang@xxxxxxxxxxxxxxxxx> wrote:
>>>>
>>>> Sorry for late reply.
>>>>
>>>> On 2025/5/17 14:47, Nico Pache wrote:
>>>>> On Thu, May 15, 2025 at 9:20â?¯PM Baolin Wang
>>>>> <baolin.wang@xxxxxxxxxxxxxxxxx> wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 2025/5/15 11:22, Nico Pache wrote:
>>>>>>> khugepaged scans anons PMD ranges for potential collapse to a
>>>>>>> hugepage.
>>>>>>> To add mTHP support we use this scan to instead record chunks of
>>>>>>> utilized
>>>>>>> sections of the PMD.
>>>>>>>
>>>>>>> khugepaged_scan_bitmap uses a stack struct to recursively scan a
>>>>>>> bitmap
>>>>>>> that represents chunks of utilized regions. We can then determine
>>>>>>> what
>>>>>>> mTHP size fits best and in the following patch, we set this
>>>>>>> bitmap while
>>>>>>> scanning the anon PMD. A minimum collapse order of 2 is used as
>>>>>>> this is
>>>>>>> the lowest order supported by anon memory.
>>>>>>>
>>>>>>> max_ptes_none is used as a scale to determine how "full" an order
>>>>>>> must
>>>>>>> be before being considered for collapse.
>>>>>>>
>>>>>>> When attempting to collapse an order that has its order set to
>>>>>>> "always"
>>>>>>> lets always collapse to that order in a greedy manner without
>>>>>>> considering the number of bits set.
>>>>>>>
>>>>>>> Signed-off-by: Nico Pache <npache@xxxxxxxxxx>
>>>>>>
>>>>>> Sigh. You still haven't addressed or explained the issues I
>>>>>> previously
>>>>>> raised [1], so I don't know how to review this patch again...
>>>>> Can you still reproduce this issue?
>>>>
>>>> Yes, I can still reproduce this issue with today's (5/20) mm-new
>>>> branch.
>>>>
>>>> I've disabled PMD-sized THP in my system:
>>>> [root]# cat /sys/kernel/mm/transparent_hugepage/enabled
>>>> always madvise [never]
>>>> [root]# cat
>>>> /sys/kernel/mm/transparent_hugepage/hugepages-2048kB/enabled
>>>> always inherit madvise [never]
>>>>
>>>> And I tried calling madvise() with MADV_COLLAPSE for anonymous memory,
>>>> and I can still see it collapsing to a PMD-sized THP.
>>> Hi Baolin ! Thank you for your reply and willingness to test again :)
>>>
>>> I didn't realize we were talking about madvise collapse-- this makes
>>> sense now. I also figured out why I could "reproduce" it before. My
>>> script was always enabling the THP settings in two places, and I only
>>> commented out one to test this. But this time I was doing more manual
>>> testing.
>>>
>>> The original design of madvise_collapse ignores the sysfs and
>>> collapses even if you have an order disabled. I believe this behavior
>>> is wrong, but by design. I spent some time playing around with madvise
>>> collapses with and w/o my changes. This is not a new thing, I
>>> reproduced the issue in 6.11 (Fedora 41), and I think its been
>>> possible since the inception of madvise collapse 3 years ago. I
>>> noticed a similar behavior on one of my RFC since it was "breaking"
>>> selftests, and the fix was to reincorporate this broken sysfs
>>> behavior.
>>
>> OK. Thanks for the explanation.
>>
>>> 7d8faaf15545 ("mm/madvise: introduce MADV_COLLAPSE sync hugepage
>>> collapse")
>>> "This call is independent of the system-wide THP sysfs settings, but
>>> will fail for memory marked VM_NOHUGEPAGE."
>>>
>>> The second condition holds true (and fails for VM_NOHUGEPAGE), but I
>>> dont know if we actually want madvise_collapse to be independent of
>>> the system-wide.
>>
>> This design principle surprised me a bit, and I failed to find the
>> reason in the commit log. I agree that "never should mean never," and we
>> should respect the THP/mTHP sysfs setting. Additionally, for the
>> 'shmem_enabled' sysfs interface controlled for shmem/tmpfs, THP collapse
>> can still be prohibited through the 'deny' configuration. The rules here
>> are somewhat confusing.
>
> I recall that we decided to overwrite "VM_NOHUGEPAGE", because the
> assumption is that the same app that triggered MADV_NOHUGEPAGE triggers
> the collapse. So the app decides on its own behavior.
>
> Similarly, allowing for collapsing in a VM without VM_HUGEPAGE in the
> "madvise" mode would be fine.
>
> But in the "never" case, we should just "never" collapse.
OK. Let's fix the "never" case first. Thanks.
Return-Path: <linux-kernel+bounces-665587-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 0039C41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:05:15 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 5C1161BC6A64
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:05:28 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 7274C287518;
Wed, 28 May 2025 14:05:07 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="MdfI/omr"
Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id F23861A5BA3;
Wed, 28 May 2025 14:05:04 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441106; cv=none; b=HCPUeAkTL+XBc5/9jXuyMGVTRUzKWorUHo99yDQqt9icmVfPlngsv3y0kukxpjFXIk9B70h/F2mKmP5TWkGVcDCNcGg0HXvW/nVGYzggR51Eu/bStOOuvbyNHypPZSzjq4V1aK6xxOF6kwrS0JMvyOw1w4LHsZWIRjcjKLdiu8A=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441106; c=relaxed/simple;
bh=zjn5gJRBgTscFFqn7FJUgUIpKHNTfnPwm0I1AAWljy4=;
h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=EhJq/GimghOa9/VfGGeNaRaH3EfRqj7H6FgqYjuAjaosz1tshb1eeJEYJOtkk9mNxaooRGv8LlRUHtFZQpNK2kVm31GzTf8XcUhGBMqbGyUd7yMPJNkURD8gFmZuAoI3Gc/5HwTiQpa2QQXcgIDfUXEsla6qnHKFz8xk/AqFVp8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=MdfI/omr; arc=none smtp.client-ip=209.85.221.46
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-3a366843fa6so2853063f8f.1;
Wed, 28 May 2025 07:05:04 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748441103; x=1749045903; darn=vger.kernel.org;
h=content-transfer-encoding:mime-version:message-id:date:subject:cc
:to:from:from:to:cc:subject:date:message-id:reply-to;
bh=oPEjb9xSYINExy0eyIdBHIutjX/5AUSSUBN5rBiGPII=;
b=MdfI/omrnUGROE7u6KoEZVVGzO58cnZdmD7RZqpYDk+OeY5v5Frq0bsFtmDKx2vmZJ
MYKeo2NuumD2W9gExFsD/c4b5GZgycola9Nea0l32NFK728A7DXM2hMFcF0E6xMUMWA2
plJrGv0m3LQHmDf7x0PYK2qGt8IWrksndOfgME0vsULrYLPxEvjitwozJ0iLduFq4Lh0
jM6TeVy0S3z5JOW+YvcuNcqUMtUYVhts/fwY0kzKxBh1fKew4JkyHzNGmiOEZpsQ1TVw
sGYGqAaiOARXMYcRfai/9YjFDjZnCYDh+mYCBwjMLaw3REoWkKtpMig3Iqxu2T5TLc9E
KduQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748441103; x=1749045903;
h=content-transfer-encoding:mime-version:message-id:date:subject:cc
:to:from:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=oPEjb9xSYINExy0eyIdBHIutjX/5AUSSUBN5rBiGPII=;
b=NDKbLitt7WNUlZNvDrv0gI6FA/fk5ubufrnJSAH7eDcXG8FTQNltjESp15oxUUIBap
CtqqTkIjJtETOcbaVGxg5x+BPZGLDbRTFzxMHiMGq6yrUk5ogyF9k5cVcufrZ9O391BO
/7p6tEx+hmKgDVwHbR6u4g2N5OZOz+Tqf4E6klkpwdbFmpdBcjJKrefOURzPpta0au3Y
8laX/PfCPTYLhIwSFL70hSJhe89joGNX8yNtwMDr/xEuEciOYA+ix2sG4RwMnZcC03JB
gpOypP2xRhBnK+bY1AI36eRflZlICeaSYtThBqahrP2a1nPQLDDoA8WzN+O7CNPdKGTl
G7qQ==
X-Forwarded-Encrypted: i=1; AJvYcCVOcsNvr983MRriJZD5SV8TN9xPkcdhpJQ1nesFaDcmdLC385isVXrCOad5kaNyVQ+2PC68SGpAy6EvOdPB@xxxxxxxxxxxxxxx, AJvYcCVhQ8iyJKFXype+0/9okX/oIFqBBAL+DviFmZLgImfrvmn8XFmjvhp0BVjCs8ZCGj0H5K/KyBE8Rn1e@xxxxxxxxxxxxxxx
X-Gm-Message-State: AOJu0YwuMDJTxMA2LmZtrF6Uk3cGn8lzvaujgiQcbdCGuHC6JgJ/bG4j
IKKfDSrf2VK3lGY0DWzYLy97fb1jv2Gvro3BP6avgXhCg5C/sCxQTaXO1hoL4C/S
X-Gm-Gg: ASbGncswQCN2mpON6jDXa3J6s3cnhoLsaVT0U1DwzrmOHX6MoTp6FKuik4RHCkwTF5e
nNML16BB82CnR30IamvYcHK9znbgv5ZK4DiX7VGdw6AHCiWOKoMSr43cVrrtsdy+S8KW+xWQV2R
RhnHMj8aGIHmcoLZrk2KN/HZ6FriqOs7JUkxXygHrV72OhKFprY55rAeDOpA57I7SxRM9XkRPUl
UA1BrnkkyXwzC8TdSHWEJocYr2ajM5GZJ2G89DSqzAzEpIAxuIGNd7BpC9LxnPqjkEU7I7PpEvK
j0ZEeenuLrQCiacBLLtZtYUO3bPnXNL4D0euljn7U6NBG+PR5Uox9ztE/Svq7U6Ol+RaSE9Vumd
J
X-Google-Smtp-Source: AGHT+IHgujYjNU6Xq5ZNRiDumeW0aKz5xZPU9Qup+8+ClYpot9snD3m49i9q/XW2gyj5h/3d/p97IA==
X-Received: by 2002:a5d:4102:0:b0:3a4:cddc:d3da with SMTP id ffacd0b85a97d-3a4cddcd4f1mr12452290f8f.36.1748441102966;
Wed, 28 May 2025 07:05:02 -0700 (PDT)
Received: from iku.Home ([2a06:5906:61b:2d00:7078:193c:ccdc:e2f5])
by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-450787ccbd1sm18846795e9.25.2025.05.28.07.05.02
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 07:05:02 -0700 (PDT)
From: Prabhakar <prabhakar.csengg@xxxxxxxxx>
X-Google-Original-From: Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
To: Geert Uytterhoeven <geert+renesas@xxxxxxxxx>,
Magnus Damm <magnus.damm@xxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>
Cc: linux-renesas-soc@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Prabhakar <prabhakar.csengg@xxxxxxxxx>,
Biju Das <biju.das.jz@xxxxxxxxxxxxxx>,
Fabrizio Castro <fabrizio.castro.jz@xxxxxxxxxxx>,
Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Subject: [PATCH 0/2] Add USB2.0 support for R9A09G056 SoC and RZ/V2N EVK
Date: Wed, 28 May 2025 15:04:51 +0100
Message-ID: <20250528140453.181851-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
X-Mailer: git-send-email 2.49.0
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Hi all,
This patch series adds USB2.0 support for the R9A09G056 SoC and the
RZ/V2N EVK board.
The first patch updates the device tree source file for the R9A09G056
SoC to include the USB2.0 controller configuration. The second patch
enables USB2.0 support in the device tree for the RZ/V2N EVK board.
Note the binding and clock patches have been sent separately,
clock:
https://lore.kernel.org/all/20250528132558.167178-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx/
bindings:
https://lore.kernel.org/all/20250528133031.167647-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx/
https://lore.kernel.org/all/20250528133440.168133-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx/
https://lore.kernel.org/all/20250528133858.168582-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx/
Cheers,
Prabhakar
Lad Prabhakar (2):
arm64: dts: renesas: r9a09g056: Add USB2.0 support
arm64: dts: renesas: r9a09g056n48-rzv2n-evk: Enable USB2.0 support
arch/arm64/boot/dts/renesas/r9a09g056.dtsi | 66 +++++++++++++++++++
.../dts/renesas/r9a09g056n48-rzv2n-evk.dts | 36 ++++++++++
2 files changed, 102 insertions(+)
--
2.49.0
Return-Path: <linux-kernel+bounces-665588-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 21DD241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:05:23 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id C069B16CE03
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:05:22 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id AF947288537;
Wed, 28 May 2025 14:05:08 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mrOJiEZ3"
Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 31546283C9F;
Wed, 28 May 2025 14:05:05 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441107; cv=none; b=dOCiwwSBmNUwaafP00lEQnT4JHk3LLki73aE40JVOec3p7i7gWz05WL/4YqZJP1n5EhzjB+q1zmAIS4B8rtDHhg7gnKt+WZzdBMB+U5SCQ1KG+2hg+PoNKQDX6qJl7gYtrD4/4kB5I2T6Jhr9TlLZQ01E5OjuTK+D/MUDA8XNP0=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441107; c=relaxed/simple;
bh=5DMeEe+nP0mHofrnt7GfPk1MGvXTANxWKSg46gQH1M0=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=fdClPnmvpI7Q2hL4rnoCgSGBQpxsGEz2geT+rkYoXR6mbGc9B6NKJPrnizOaMuuVKP0ABuLF543cJue/jyuD6xaEI2wAGWkvzLlZCW8igia70RzBi3khChyYLPzr3T37OCz0NYS7Q7Xi1NMqiHGcaH9i1a0gEDjtmHoAN1XYj7g=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=mrOJiEZ3; arc=none smtp.client-ip=209.85.128.53
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-43cfe574976so36181405e9.1;
Wed, 28 May 2025 07:05:05 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748441104; x=1749045904; darn=vger.kernel.org;
h=content-transfer-encoding:mime-version:references:in-reply-to
:message-id:date:subject:cc:to:from:from:to:cc:subject:date
:message-id:reply-to;
bh=qJ9cnFO/vbXkCLu0tCtnN/yMKzSUnqE6ZPE2Ep+D7W0=;
b=mrOJiEZ31FLZHbfcq1LDnbxJiURlgSOuleLdOqZWDosqOeKKfVWMjSjpjexTFUiY5S
v5Xh3y59AaYItKEcv3xBkvpf4oqWSHIu9A3P9jBxbB7+whquAHeNe6mKHQ584Unm1q9o
HS67wEVrs9qmYrVFnfBHFITqclFkR75TVcLqjlL5stL+Jwbo3WEDGeEfSRJvykywrv8V
1/UCoIrh1E1OcaRsrqzSolSxS0+14aYrOwboLE8OtqFbc0UuZSU/2tVyGUI7KaeKHTqA
sLCo1Kuq4nUuPSnYHAtWSXELdo+HCEUAYbGxrB2qok5SI8GhshjWMmpLnDkKo6LJPG8Z
2jjQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748441104; x=1749045904;
h=content-transfer-encoding:mime-version:references:in-reply-to
:message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=qJ9cnFO/vbXkCLu0tCtnN/yMKzSUnqE6ZPE2Ep+D7W0=;
b=qx3Xh1tJG1i8KgYcGhLb8InKgb6C0NQ1BbPUoZErQKgSGrK4tCPBmSXH61KPxR47da
mA5QxQ6lQ6TpfxYD5zFlTnV43WVyG/7zu0iCpu12CIWVUrx0vXu6xKtMXp4RwYskDhZn
Ab6IAHwnHA7WJCBl16BPckh/Ke+6t+JBG1UBz4GcRy+pQgcEk9qKn0MQLgr0zrhx70gU
mZKbIZltm21ZR3unCtTL5H7ZfGey1vozB11+3ZftVxO9dS1aShJ52gP8yUw58vwCzpXI
TUhGwk7NiqmQWBw9MIOYkktJf1miHDKjUW+ibhlNa6GGEQV7VpjAGTp23A1bao2HhfWj
tnZA==
X-Forwarded-Encrypted: i=1; AJvYcCV0ElWo6sjVKvBJUwRH+Vt8mFrTYOK3MxIQjuqH243lZqtDiTE6ZZbWC7NPRHQ6Svk3xMiKB9Y7EI0yaisY@xxxxxxxxxxxxxxx, AJvYcCWI5Jwk2EGd8aHAOSellJxwOULoSVKFVJqNKPMqbRsyCryjd+jYo5CFbzgGmfUW1+fhGhjw19elS0sO@xxxxxxxxxxxxxxx
X-Gm-Message-State: AOJu0YwhX2cUe/j0SK17SNPcKYneb6ZNzyBrrBn6XtDeUS/HY50Ib1yt
vRWLtMI2iB9vFxw0JBSfvOfqchw5Pu0IU8y/Kh324n5tqEtCAvHbE3G3
X-Gm-Gg: ASbGncs20Cp4pc7fDj45CHl7nbNbHcyx0aMwJTqJ29NH1hHumHAHCSBZY9d6Xzrl/cI
xaNjkxdumstJTArp1G2rmUnRWwpNkLQbsZTUGltJE7pvaoVCbMIXTgM/dVqFqXur9qnkJ1zM1OX
UlHowvqkSMZpdJ3UXSiQsRA8e2W8f43MJBrkJdNtcfSBszl563A3LxoevlB+zYd8xkJlgxeai8z
oBsoSdM/Oe5spy9aLffV7K6788OStoU4bAfIPiMAwXQhM3k6Jl8XKBD2e/rei/DAftuwZ+p/KZh
PAHBgXkfBtvRyrvDxOI1HJDM89PMKpe5gcraYtlzxR9T+FpNjeyZP5GddOGNS6tqPKEW2f2pgLE
S
X-Google-Smtp-Source: AGHT+IGudAWACBinVZ9qBUn8vuuoVUV5Mklzj6E9Fvs++YleA3Uf4d+E4lneqbl1Em4T/OmwJNENBQ==
X-Received: by 2002:a05:600c:6749:b0:44b:eb56:1d48 with SMTP id 5b1f17b1804b1-45072545a0fmr24378135e9.4.1748441103699;
Wed, 28 May 2025 07:05:03 -0700 (PDT)
Received: from iku.Home ([2a06:5906:61b:2d00:7078:193c:ccdc:e2f5])
by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-450787ccbd1sm18846795e9.25.2025.05.28.07.05.03
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 07:05:03 -0700 (PDT)
From: Prabhakar <prabhakar.csengg@xxxxxxxxx>
X-Google-Original-From: Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
To: Geert Uytterhoeven <geert+renesas@xxxxxxxxx>,
Magnus Damm <magnus.damm@xxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>
Cc: linux-renesas-soc@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Prabhakar <prabhakar.csengg@xxxxxxxxx>,
Biju Das <biju.das.jz@xxxxxxxxxxxxxx>,
Fabrizio Castro <fabrizio.castro.jz@xxxxxxxxxxx>,
Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Subject: [PATCH 1/2] arm64: dts: renesas: r9a09g056: Add USB2.0 support
Date: Wed, 28 May 2025 15:04:52 +0100
Message-ID: <20250528140453.181851-2-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
X-Mailer: git-send-email 2.49.0
In-Reply-To: <20250528140453.181851-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
References: <20250528140453.181851-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
The Renesas RZ/V2N (R9A09G056) SoC features a single-channel USB2.0
interface with host and peripheral (function) support.
Add the ECHI, OHCI, USB2.0 PHY and reset control nodes for USB2.0
channel in R9A09G056 SoC DTSI.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
---
arch/arm64/boot/dts/renesas/r9a09g056.dtsi | 66 ++++++++++++++++++++++
1 file changed, 66 insertions(+)
diff --git a/arch/arm64/boot/dts/renesas/r9a09g056.dtsi b/arch/arm64/boot/dts/renesas/r9a09g056.dtsi
index 9adf216b6d0e..d17d6a9ed0d2 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g056.dtsi
+++ b/arch/arm64/boot/dts/renesas/r9a09g056.dtsi
@@ -569,6 +569,72 @@ gic: interrupt-controller@14900000 {
interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_LOW>;
};
+ ohci0: usb@15800000 {
+ compatible = "generic-ohci";
+ reg = <0 0x15800000 0 0x100>;
+ interrupts = <GIC_SPI 742 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cpg CPG_MOD 0xb3>, <&cpg CPG_MOD 0xb6>;
+ resets = <&usb20phyrst>, <&cpg 0xac>;
+ phys = <&usb2_phy0 1>;
+ phy-names = "usb";
+ power-domains = <&cpg>;
+ status = "disabled";
+ };
+
+ ehci0: usb@15800100 {
+ compatible = "generic-ehci";
+ reg = <0 0x15800100 0 0x100>;
+ interrupts = <GIC_SPI 743 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cpg CPG_MOD 0xb3>, <&cpg CPG_MOD 0xb6>;
+ resets = <&usb20phyrst>, <&cpg 0xac>;
+ phys = <&usb2_phy0 2>;
+ phy-names = "usb";
+ companion = <&ohci0>;
+ power-domains = <&cpg>;
+ status = "disabled";
+ };
+
+ usb2_phy0: usb-phy@15800200 {
+ compatible = "renesas,usb2-phy-r9a09g056", "renesas,usb2-phy-r9a09g057";
+ reg = <0 0x15800200 0 0x700>;
+ interrupts = <GIC_SPI 745 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cpg CPG_MOD 0xb3>,
+ <&cpg CPG_CORE R9A09G056_USB2_0_CLK_CORE0>;
+ clock-names = "fck", "usb_x1";
+ resets = <&usb20phyrst>;
+ #phy-cells = <1>;
+ power-domains = <&cpg>;
+ status = "disabled";
+ };
+
+ hsusb: usb@15820000 {
+ compatible = "renesas,usbhs-r9a09g056",
+ "renesas,rzg2l-usbhs";
+ reg = <0 0x15820000 0 0x10000>;
+ interrupts = <GIC_SPI 751 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 752 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 753 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 754 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cpg CPG_MOD 0xb3>, <&cpg CPG_MOD 0xb5>;
+ resets = <&usb20phyrst>,
+ <&cpg 0xae>;
+ phys = <&usb2_phy0 3>;
+ phy-names = "usb";
+ power-domains = <&cpg>;
+ status = "disabled";
+ };
+
+ usb20phyrst: usb20phy-reset@15830000 {
+ compatible = "renesas,r9a09g056-usb2phy-reset",
+ "renesas,r9a09g057-usb2phy-reset";
+ reg = <0 0x15830000 0 0x10000>;
+ clocks = <&cpg CPG_MOD 0xb6>;
+ resets = <&cpg 0xaf>;
+ power-domains = <&cpg>;
+ #reset-cells = <0>;
+ status = "disabled";
+ };
+
sdhi0: mmc@15c00000 {
compatible = "renesas,sdhi-r9a09g056", "renesas,sdhi-r9a09g057";
reg = <0x0 0x15c00000 0 0x10000>;
--
2.49.0
Return-Path: <linux-kernel+bounces-665589-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 258A541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:05:34 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 09B154E077F
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:05:33 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id AD759288C2E;
Wed, 28 May 2025 14:05:09 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="I7pXTYCE"
Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 467052874EF;
Wed, 28 May 2025 14:05:07 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441108; cv=none; b=kyQ8Is6wX0NdWWbZ+fWXhdobLdnct+QmLJtoxn5TaJ2uFIhu6kRy/irMhRXn9KmvX8f1x3XgA9gD4Gzk0XXXxR8MYBeHvD2xHeyypUBMyTfJHDjJtMvqmJ2cwpZqNlELNbLgXeXzXozrTP5kSztn7B9Qx8ICfGFyRjVkFq7il68=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441108; c=relaxed/simple;
bh=eK8J4rKSp8TMiHRSS+hbmaeMQ60qgYoItb86jAoi6TA=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=KCxS7TaOS/3zFi6NdJD2ihKT+jHQGY1Oy1eLNjzOE7H/d/QBKAbGz8KUV9iTV3lMFmmZB6WVkSydrTCgmIp5a0hoScimwlrIiiN7IL63dJ815pkmwSzbKtDR1q00txWw1bN91K3Lgd8HxMAnn1Yag16A3TuJ9dpEDfyMKOW4j9k=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=I7pXTYCE; arc=none smtp.client-ip=209.85.128.52
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-450cd6b511cso1150115e9.2;
Wed, 28 May 2025 07:05:06 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748441105; x=1749045905; darn=vger.kernel.org;
h=content-transfer-encoding:mime-version:references:in-reply-to
:message-id:date:subject:cc:to:from:from:to:cc:subject:date
:message-id:reply-to;
bh=wywLmOGfapMCxW2dgEXjBZVhH7MDXoBTN5ewWnefwOE=;
b=I7pXTYCEpdZh8VvDFbCds7XHA8srnqW8SqyRDCJFSLxB3Dk3b1ybunQi9hPcqwEFuk
I7Nt45l7xldXFo1B5Q2vc0TWMbIk4ZEb2ioHVwTUQsmAt8OMJq0kN6akg2Dagw8uh9JZ
Z1llo0PC8tGwyxyJo+sFszDGqok1HTU7XPmTqd7vRkAtUCMi0UOBKx53IlUIwWyXKv65
V2BgLHtFVgtjXr7hpmdMc45iTa2agFMbq79AIBcsgAGik0OTCyXQ9VpHcGQUCHAJvuGp
gUWXMt2YjhYowJWyUyiVay20hmEiUZki4sSmVK2EKYgs4kItootKIs7YwOXnSLC4EnMx
/x6w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748441105; x=1749045905;
h=content-transfer-encoding:mime-version:references:in-reply-to
:message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=wywLmOGfapMCxW2dgEXjBZVhH7MDXoBTN5ewWnefwOE=;
b=CJXoKCbRKglSQpnQIllCSE5RWAASXPtsgucxRfsXUVjlFPsEurJYVN8vr+qzPPD/AW
qNLlJkeyBX7lRX3M/H8p6Lqz1QGTJaLV304LjjkPRUpKvKMHN6+IzIY5oJwTLBihuS/2
RigoWvS7GzwZUdLX9XsoRKh5FOqiAYRfGrYazZlWoEF4UUcmwmG5QD/5h2cH6szReX+n
HdVrN8LqquijWLOcp3ea3Nic8HpdrAIbsvCpxogl3TmFqLaQhmTr5yjAR2G+aW1swxd8
KZZTZj68YT1KLP/9KVzupLYP7bPYZ4dZugmhM86B//pujQra8o0wvMPNXRwTnhoZOOOE
EIXQ==
X-Forwarded-Encrypted: i=1; AJvYcCVKp3AsmMB+w4ipK4XSVJmc3GLoH7wfote3wne72xVxZFmVX66kk8lN9GzM/TeZidXbWn+l/DCUf8bl@xxxxxxxxxxxxxxx, AJvYcCWP9jWPrUqtmVC3FO0NN1MznvoL11mADTwMciCFmhyiCJv/gF7BnmRgQpl/ansi8usbeagnIqh1mRfhh9LL@xxxxxxxxxxxxxxx
X-Gm-Message-State: AOJu0YyPDQY29J4K4uD+AEVV+R6hoWkcMGjquzW84+Afjyzjo3c+rLkN
uJNCID9yY2KsgUJBa0jaRC8CKTeegUnGx4t6LQouFnWF/tPc2jv/3CJbV+lvCqLE
X-Gm-Gg: ASbGncviTNh+8whtGlJ98Ex3CHbKQYrrGSI3DGgJ3XCwejf1xOnPi8ocOyvxGIRQ8ls
D+ckcUR3upoirGiXRG43ZmbmfRgTpKjCQPZ4NnJTw+Mw1LRsYRZiG/+vBtSD34s68tqy2QEY0dV
3qvSiXEH2h0eChC4AuQTs2yOqAgVNAqusa+oUVcwefNZjh+huP4zCfL9StfD+2iTxxVkkIFefRN
k5eTgK0GeHdRI+VMaYn+asqzEh7+BOTIESE81ypdksC9gifkdvjFpjD0tob2SZuj5VouBwJLezn
6qq6HhAu6MOEmmvyvahR1Xr1Kcqkt6qf/q8N04uv+DlMeXpFUVsYQZwoC20HchPf8ZQOiG4ih2n
r
X-Google-Smtp-Source: AGHT+IG3wbpyLM9y8mxjXehCmiOh/DrSRXXFvOxHsVMVuB/IqbCLyu39wh+w7m2yy/yJNfsrBTqa1Q==
X-Received: by 2002:a05:600c:5118:b0:442:e0f9:394d with SMTP id 5b1f17b1804b1-45077d424fbmr21309815e9.24.1748441104969;
Wed, 28 May 2025 07:05:04 -0700 (PDT)
Received: from iku.Home ([2a06:5906:61b:2d00:7078:193c:ccdc:e2f5])
by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-450787ccbd1sm18846795e9.25.2025.05.28.07.05.04
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 07:05:04 -0700 (PDT)
From: Prabhakar <prabhakar.csengg@xxxxxxxxx>
X-Google-Original-From: Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
To: Geert Uytterhoeven <geert+renesas@xxxxxxxxx>,
Magnus Damm <magnus.damm@xxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>
Cc: linux-renesas-soc@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Prabhakar <prabhakar.csengg@xxxxxxxxx>,
Biju Das <biju.das.jz@xxxxxxxxxxxxxx>,
Fabrizio Castro <fabrizio.castro.jz@xxxxxxxxxxx>,
Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Subject: [PATCH 2/2] arm64: dts: renesas: r9a09g056n48-rzv2n-evk: Enable USB2.0 support
Date: Wed, 28 May 2025 15:04:53 +0100
Message-ID: <20250528140453.181851-3-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
X-Mailer: git-send-email 2.49.0
In-Reply-To: <20250528140453.181851-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
References: <20250528140453.181851-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Enable USB2.0 support on the RZ/V2N EVK board, CN2 connector on the EVK
supports host/function operation.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
---
.../dts/renesas/r9a09g056n48-rzv2n-evk.dts | 36 +++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/arch/arm64/boot/dts/renesas/r9a09g056n48-rzv2n-evk.dts b/arch/arm64/boot/dts/renesas/r9a09g056n48-rzv2n-evk.dts
index 55aa2bdce132..795d9f6b9651 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g056n48-rzv2n-evk.dts
+++ b/arch/arm64/boot/dts/renesas/r9a09g056n48-rzv2n-evk.dts
@@ -82,6 +82,11 @@ &audio_extal_clk {
clock-frequency = <22579200>;
};
+&ehci0 {
+ dr_mode = "otg";
+ status = "okay";
+};
+
ð0 {
pinctrl-0 = <ð0_pins>;
pinctrl-names = "default";
@@ -103,6 +108,11 @@ &gpu {
mali-supply = <®_0p8v>;
};
+&hsusb {
+ dr_mode = "otg";
+ status = "okay";
+};
+
&i2c0 {
pinctrl-0 = <&i2c0_pins>;
pinctrl-names = "default";
@@ -190,6 +200,11 @@ phy1: ethernet-phy@1 {
};
};
+&ohci0 {
+ dr_mode = "otg";
+ status = "okay";
+};
+
&ostm0 {
status = "okay";
};
@@ -302,6 +317,16 @@ sd1-dat-cmd {
slew-rate = <0>;
};
};
+
+ usb20_pins: usb20 {
+ ovc {
+ pinmux = <RZV2N_PORT_PINMUX(9, 6, 14)>; /* OVC */
+ };
+
+ vbus {
+ pinmux = <RZV2N_PORT_PINMUX(9, 5, 14)>; /* VBUS */
+ };
+ };
};
&qextal_clk {
@@ -330,6 +355,17 @@ &sdhi1 {
status = "okay";
};
+&usb20phyrst {
+ status = "okay";
+};
+
+&usb2_phy0 {
+ pinctrl-0 = <&usb20_pins>;
+ pinctrl-names = "default";
+
+ status = "okay";
+};
+
&wdt1 {
status = "okay";
};
--
2.49.0
Return-Path: <linux-kernel+bounces-665590-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 8A5BE41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:05:57 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 108451BC8120
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:06:04 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 10BFC2874E3;
Wed, 28 May 2025 14:05:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="fL2+OEMj"
Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4B182288C88
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:05:10 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.13
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441112; cv=none; b=KgaiBMRyrZjjdl81bldDF4p9rW7x97RSYaritHEiTHlfiyum+LL7R6mdF83sM9JWXG17VG4E+1dpBtqh4VIhUz0puOss7X0VpFF0n8F8d5duUCjQe9LStksvXoMA8mQIc1gM/94mzQxukD2CuiLUJoDS1RTNH0cGGHSAhDlWGc4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441112; c=relaxed/simple;
bh=a+b8oFQ+o3n4GVpZkSbmFKxukgJHOdKZ0BeU7RaJ1ok=;
h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=WII5CNLb62u2x+E+TURaIUqbDoft7S+1Pnnc3tmmtoEdbbtjDiSp3j2UPfS3/n+o7Z0VZH1GC9u0baeK6/l6IO4pHkjB6E4TBVoc6WhlkUMtmUIFgX4/dDicydBfvNmk/dwewfwf6chDTR6TJKNsOeXJ1khS7wgtcNgtliNgpYU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=fL2+OEMj; arc=none smtp.client-ip=198.175.65.13
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748441110; x=1779977110;
h=from:to:cc:subject:date:message-id:mime-version:
content-transfer-encoding;
bh=a+b8oFQ+o3n4GVpZkSbmFKxukgJHOdKZ0BeU7RaJ1ok=;
b=fL2+OEMjSWClt3iluBKvP6Nw4XilZSvoeMaAZh8npvBJ2uZTmMdI5Fj6
ZxF+szFh1khVag54cUX+AohSn9wdwvnR6LpDyR7g6+8D7TZ92IDZVPCbZ
tHF3EAec/RoYX8ecvRio+hhdHGrRQr7fdvzYMKcY1ouTHB72kDbeuw0Yk
0awgJZ7BZKmLkz8y1h+sZWvc7uztoPljwp4VwLKTQ8eoLbu4AiOTxenLi
ylMOgkITNE3CsJ1X7tr25tO0l9zN3FSNNRvU4WTA6FGJnDQOkdlrxgkXk
Li0o/N+60dpjSUPG6ltcJvWZdgFDpjn9Fwq/OV24T/bsQz7BwZft4HYyu
g==;
X-CSE-ConnectionGUID: 6WY25BupTY+h3cfdNzd6ug==
X-CSE-MsgGUID: vwlZEb/7S92cZXJ/cW/0bQ==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="61524766"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="61524766"
Received: from fmviesa007.fm.intel.com ([10.60.135.147])
by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:09 -0700
X-CSE-ConnectionGUID: T4slOBrWRYOzAaVlSgycZQ==
X-CSE-MsgGUID: qwiu8CfXTtaojvQo5zb2hA==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="143238784"
Received: from sannilnx-dsk.jer.intel.com ([10.12.231.107])
by fmviesa007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:04 -0700
From: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
To: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>,
Richard Weinberger <richard@xxxxxx>,
Vignesh Raghavendra <vigneshr@xxxxxx>,
Lucas De Marchi <lucas.demarchi@xxxxxxxxx>,
=?UTF-8?q?Thomas=20Hellstr=C3=B6m?= <thomas.hellstrom@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>,
Karthik Poosa <karthik.poosa@xxxxxxxxx>,
Raag Jadav <raag.jadav@xxxxxxxxx>
Cc: Reuven Abliyev <reuven.abliyev@xxxxxxxxx>,
Oren Weil <oren.jer.weil@xxxxxxxxx>,
linux-mtd@xxxxxxxxxxxxxxxxxxx,
intel-xe@xxxxxxxxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx,
intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
Subject: [PATCH v11 00/10] mtd: add driver for Intel discrete graphics
Date: Wed, 28 May 2025 16:51:05 +0300
Message-ID: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
X-Mailer: git-send-email 2.43.0
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Add driver for access to Intel discrete graphics card
internal NVM device.
Expose device on auxiliary bus by i915 and Xe drivers and
provide mtd driver to register this device with MTD framework.
This is a rewrite of "drm/i915/spi: spi access for discrete graphics"
and "spi: add driver for Intel discrete graphics"
series with connection to the Xe driver and splitting
the spi driver part to separate module in mtd subsystem.
This series intended to be pushed through drm-xe-next.
V2: Replace dev_* prints with drm_* prints in drm (xe and i915) patches.
Enable NVM device on Battlemage HW (xe driver patch)
Fix overwrite register address (xe driver patch)
Add Rodrigo's r-b
V3: Use devm_pm_runtime_enable to simplify flow.
Drop print in i915 unload that was accidentally set as error.
Drop HAS_GSC_NVM macro in line with latest Xe changes.
Add more Rodrigo's r-b and Miquel's ack.
V4: Add patch that always creates mtd master device
and adjust mtd-intel-dg power management to use this device.
V5: Fix master device creation to accomodate for devices without
partitions (create partitoned master in this case)
Rebase over latest drm-xe-next
Add ack's
V6: Fix master device release (use rigth idr in release)
Rebase over latest drm-xe-next
Grammar and style fixes
V7: Add patch with non-posted erase support (fix hang on BMG)
Rebase over latest drm-xe-next
V8: Create separate partition device under master device, if requested
and configure parent of usual partitions to this partition.
Rebase over drm-tip.
V9: Fix checkpatch warning on non-posted erase patch.
Add Rodrigo's review and ack.
V10: Drop master device creation patch as it now in mtd-next.
Drop power-management patch, it will be merged lately after
master device patch is propagated.
Rebase over drm-tip.
V11: Fix review comments.
Add reviewed-by.
Add cleanup in error path.
Add PADDING region that exists on some BMG devices.
Alexander Usyskin (9):
mtd: add driver for intel graphics non-volatile memory device
mtd: intel-dg: implement region enumeration
mtd: intel-dg: implement access functions
mtd: intel-dg: register with mtd
mtd: intel-dg: align 64bit read and write
drm/i915/nvm: add nvm device for discrete graphics
drm/i915/nvm: add support for access mode
drm/xe/nvm: add on-die non-volatile memory device
drm/xe/nvm: add support for access mode
Reuven Abliyev (1):
drm/xe/nvm: add support for non-posted erase
MAINTAINERS | 7 +
drivers/gpu/drm/i915/Makefile | 4 +
drivers/gpu/drm/i915/i915_driver.c | 6 +
drivers/gpu/drm/i915/i915_drv.h | 3 +
drivers/gpu/drm/i915/i915_reg.h | 1 +
drivers/gpu/drm/i915/intel_nvm.c | 121 ++++
drivers/gpu/drm/i915/intel_nvm.h | 15 +
drivers/gpu/drm/xe/Makefile | 1 +
drivers/gpu/drm/xe/regs/xe_gsc_regs.h | 4 +
drivers/gpu/drm/xe/xe_device.c | 5 +
drivers/gpu/drm/xe/xe_device_types.h | 6 +
drivers/gpu/drm/xe/xe_heci_gsc.c | 5 +-
drivers/gpu/drm/xe/xe_nvm.c | 167 ++++++
drivers/gpu/drm/xe/xe_nvm.h | 15 +
drivers/gpu/drm/xe/xe_pci.c | 6 +
drivers/mtd/devices/Kconfig | 11 +
drivers/mtd/devices/Makefile | 1 +
drivers/mtd/devices/mtd_intel_dg.c | 830 ++++++++++++++++++++++++++
include/linux/intel_dg_nvm_aux.h | 32 +
19 files changed, 1236 insertions(+), 4 deletions(-)
create mode 100644 drivers/gpu/drm/i915/intel_nvm.c
create mode 100644 drivers/gpu/drm/i915/intel_nvm.h
create mode 100644 drivers/gpu/drm/xe/xe_nvm.c
create mode 100644 drivers/gpu/drm/xe/xe_nvm.h
create mode 100644 drivers/mtd/devices/mtd_intel_dg.c
create mode 100644 include/linux/intel_dg_nvm_aux.h
--
2.43.0
Return-Path: <linux-kernel+bounces-665591-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 8FF5841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:06:10 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id B6C1FA21F50
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:05:39 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 4D0692882DC;
Wed, 28 May 2025 14:05:17 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="LE0GNPzf"
Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9E463287518
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:05:14 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.13
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441116; cv=none; b=t4OASpP9+wtTSzxwk098OtcW5vwTi5DsMEhQqeeOcpy5Cwnw6HyOOtQhk0ji+jGUpbOD/T8l+zsgJQE22CbEo8oM1p6SMxdL29jadYkRdG2Mu4J2qhaUnnW/9hgIi+DnPPjoV8fLSaKy1tkQS/O2rUST0OqAy3H+8SGc+Eh2Bv0=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441116; c=relaxed/simple;
bh=vdI/8IOI+awAv03+bcdIajiB8C8rs77C4e9IwS0AfQI=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=jgAqTpaa5oGr5LtXzPgRfnBy6yCzy9SjDaw5/FgfS82hlEAP6wKzyghAYYQ4WiQoXxWVQ52er009yotOmtfyjyGT63eRkk9pcJKuGVJhvvdY4MAMIWqyyiGV93URHVZu8/z0+MzsmiQv/R1YG5FsnuRKxj3b3EEldbBNgsP0b+Q=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=LE0GNPzf; arc=none smtp.client-ip=198.175.65.13
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748441115; x=1779977115;
h=from:to:cc:subject:date:message-id:in-reply-to:
references:mime-version:content-transfer-encoding;
bh=vdI/8IOI+awAv03+bcdIajiB8C8rs77C4e9IwS0AfQI=;
b=LE0GNPzfvq91tOm6NINrccqRhSzzYZkHfUQvhY5bEpz53T9byiAVoHAU
OwDqh7lBMonKWOFAeYWI8yuODF1PS23JyNK3kerY459VW8v0IB5SEWmoT
csMQtsSH9GHU2ntbVf1AyWKlv74lhtQDD6obkpTsXlQ4cOXgHv/w8c65H
Efj3S22bfLUFKvdS8eNgMm16nIGmxeQT0WJ3NIah4oD7T4y67HxWTVrHK
Pkmwt86QdwFPmsJJ/D+zI7pKw7HvMy/KpYKuF/Zb+9+38GDjrnEv5fJxz
zNmuEE80GCa1s2DRPvVxnnSYm/QE5s81ja+JyQ8khFOHF1RZ55Jx8MnU4
Q==;
X-CSE-ConnectionGUID: 9bEXMxnDSDu6LsvJfYpUwA==
X-CSE-MsgGUID: YrqIqb8xSjuKYRO+pDuSLw==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="61524842"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="61524842"
Received: from fmviesa007.fm.intel.com ([10.60.135.147])
by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:15 -0700
X-CSE-ConnectionGUID: tK/eYM0ZRw2Hmq8rhlPcew==
X-CSE-MsgGUID: rsdDUH/eQlC9jyh+MCbvLQ==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="143238853"
Received: from sannilnx-dsk.jer.intel.com ([10.12.231.107])
by fmviesa007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:09 -0700
From: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
To: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>,
Richard Weinberger <richard@xxxxxx>,
Vignesh Raghavendra <vigneshr@xxxxxx>,
Lucas De Marchi <lucas.demarchi@xxxxxxxxx>,
=?UTF-8?q?Thomas=20Hellstr=C3=B6m?= <thomas.hellstrom@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>,
Karthik Poosa <karthik.poosa@xxxxxxxxx>,
Raag Jadav <raag.jadav@xxxxxxxxx>
Cc: Reuven Abliyev <reuven.abliyev@xxxxxxxxx>,
Oren Weil <oren.jer.weil@xxxxxxxxx>,
linux-mtd@xxxxxxxxxxxxxxxxxxx,
intel-xe@xxxxxxxxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx,
intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Alexander Usyskin <alexander.usyskin@xxxxxxxxx>,
Tomas Winkler <tomasw@xxxxxxxxx>
Subject: [PATCH v11 01/10] mtd: add driver for intel graphics non-volatile memory device
Date: Wed, 28 May 2025 16:51:06 +0300
Message-ID: <20250528135115.2512429-2-alexander.usyskin@xxxxxxxxx>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
References: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Add auxiliary driver for intel discrete graphics
non-volatile memory device.
CC: Lucas De Marchi <lucas.demarchi@xxxxxxxxx>
Reviewed-by: Raag Jadav <raag.jadav@xxxxxxxxx>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>
Acked-by: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>
Co-developed-by: Tomas Winkler <tomasw@xxxxxxxxx>
Signed-off-by: Tomas Winkler <tomasw@xxxxxxxxx>
Signed-off-by: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
---
MAINTAINERS | 7 ++
drivers/mtd/devices/Kconfig | 11 +++
drivers/mtd/devices/Makefile | 1 +
drivers/mtd/devices/mtd_intel_dg.c | 134 +++++++++++++++++++++++++++++
include/linux/intel_dg_nvm_aux.h | 30 +++++++
5 files changed, 183 insertions(+)
create mode 100644 drivers/mtd/devices/mtd_intel_dg.c
create mode 100644 include/linux/intel_dg_nvm_aux.h
diff --git a/MAINTAINERS b/MAINTAINERS
index e72666dc0973..7840ebe597d3 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -11898,6 +11898,13 @@ L: linux-kernel@xxxxxxxxxxxxxxx
S: Supported
F: arch/x86/include/asm/intel-family.h
+INTEL DISCRETE GRAPHICS NVM MTD DRIVER
+M: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
+L: linux-mtd@xxxxxxxxxxxxxxxxxxx
+S: Supported
+F: drivers/mtd/devices/mtd_intel_dg.c
+F: include/linux/intel_dg_nvm_aux.h
+
INTEL DRM DISPLAY FOR XE AND I915 DRIVERS
M: Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>
M: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>
diff --git a/drivers/mtd/devices/Kconfig b/drivers/mtd/devices/Kconfig
index ff2f9e55ef28..59be6d3f0d32 100644
--- a/drivers/mtd/devices/Kconfig
+++ b/drivers/mtd/devices/Kconfig
@@ -183,6 +183,17 @@ config MTD_POWERNV_FLASH
platforms from Linux. This device abstracts away the
firmware interface for flash access.
+config MTD_INTEL_DG
+ tristate "Intel Discrete Graphics non-volatile memory driver"
+ depends on AUXILIARY_BUS
+ depends on MTD
+ help
+ This provides an MTD device to access Intel Discrete Graphics
+ non-volatile memory.
+
+ To compile this driver as a module, choose M here: the module
+ will be called mtd-intel-dg.
+
comment "Disk-On-Chip Device Drivers"
config MTD_DOCG3
diff --git a/drivers/mtd/devices/Makefile b/drivers/mtd/devices/Makefile
index d11eb2b8b6f8..9fe4ce9cffde 100644
--- a/drivers/mtd/devices/Makefile
+++ b/drivers/mtd/devices/Makefile
@@ -18,6 +18,7 @@ obj-$(CONFIG_MTD_SST25L) += sst25l.o
obj-$(CONFIG_MTD_BCM47XXSFLASH) += bcm47xxsflash.o
obj-$(CONFIG_MTD_ST_SPI_FSM) += st_spi_fsm.o
obj-$(CONFIG_MTD_POWERNV_FLASH) += powernv_flash.o
+obj-$(CONFIG_MTD_INTEL_DG) += mtd_intel_dg.o
CFLAGS_docg3.o += -I$(src)
diff --git a/drivers/mtd/devices/mtd_intel_dg.c b/drivers/mtd/devices/mtd_intel_dg.c
new file mode 100644
index 000000000000..c2d0dbfb0378
--- /dev/null
+++ b/drivers/mtd/devices/mtd_intel_dg.c
@@ -0,0 +1,134 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright(c) 2019-2025, Intel Corporation. All rights reserved.
+ */
+
+#include <linux/device.h>
+#include <linux/intel_dg_nvm_aux.h>
+#include <linux/io.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/string.h>
+#include <linux/slab.h>
+#include <linux/types.h>
+
+struct intel_dg_nvm {
+ struct kref refcnt;
+ void __iomem *base;
+ size_t size;
+ unsigned int nregions;
+ struct {
+ const char *name;
+ u8 id;
+ u64 offset;
+ u64 size;
+ } regions[] __counted_by(nregions);
+};
+
+static void intel_dg_nvm_release(struct kref *kref)
+{
+ struct intel_dg_nvm *nvm = container_of(kref, struct intel_dg_nvm, refcnt);
+ int i;
+
+ pr_debug("freeing intel_dg nvm\n");
+ for (i = 0; i < nvm->nregions; i++)
+ kfree(nvm->regions[i].name);
+ kfree(nvm);
+}
+
+static int intel_dg_mtd_probe(struct auxiliary_device *aux_dev,
+ const struct auxiliary_device_id *aux_dev_id)
+{
+ struct intel_dg_nvm_dev *invm = auxiliary_dev_to_intel_dg_nvm_dev(aux_dev);
+ struct intel_dg_nvm *nvm;
+ struct device *device;
+ unsigned int nregions;
+ unsigned int i, n;
+ int ret;
+
+ device = &aux_dev->dev;
+
+ /* count available regions */
+ for (nregions = 0, i = 0; i < INTEL_DG_NVM_REGIONS; i++) {
+ if (invm->regions[i].name)
+ nregions++;
+ }
+
+ if (!nregions) {
+ dev_err(device, "no regions defined\n");
+ return -ENODEV;
+ }
+
+ nvm = kzalloc(struct_size(nvm, regions, nregions), GFP_KERNEL);
+ if (!nvm)
+ return -ENOMEM;
+
+ kref_init(&nvm->refcnt);
+
+ for (n = 0, i = 0; i < INTEL_DG_NVM_REGIONS; i++) {
+ if (!invm->regions[i].name)
+ continue;
+
+ char *name = kasprintf(GFP_KERNEL, "%s.%s",
+ dev_name(&aux_dev->dev), invm->regions[i].name);
+ if (!name)
+ continue;
+ nvm->regions[n].name = name;
+ nvm->regions[n].id = i;
+ n++;
+ }
+ nvm->nregions = n; /* in case where kasprintf fail */
+
+ nvm->base = devm_ioremap_resource(device, &invm->bar);
+ if (IS_ERR(nvm->base)) {
+ ret = PTR_ERR(nvm->base);
+ goto err;
+ }
+
+ dev_set_drvdata(&aux_dev->dev, nvm);
+
+ return 0;
+
+err:
+ kref_put(&nvm->refcnt, intel_dg_nvm_release);
+ return ret;
+}
+
+static void intel_dg_mtd_remove(struct auxiliary_device *aux_dev)
+{
+ struct intel_dg_nvm *nvm = dev_get_drvdata(&aux_dev->dev);
+
+ if (!nvm)
+ return;
+
+ dev_set_drvdata(&aux_dev->dev, NULL);
+
+ kref_put(&nvm->refcnt, intel_dg_nvm_release);
+}
+
+static const struct auxiliary_device_id intel_dg_mtd_id_table[] = {
+ {
+ .name = "i915.nvm",
+ },
+ {
+ .name = "xe.nvm",
+ },
+ {
+ /* sentinel */
+ }
+};
+MODULE_DEVICE_TABLE(auxiliary, intel_dg_mtd_id_table);
+
+static struct auxiliary_driver intel_dg_mtd_driver = {
+ .probe = intel_dg_mtd_probe,
+ .remove = intel_dg_mtd_remove,
+ .driver = {
+ /* auxiliary_driver_register() sets .name to be the modname */
+ },
+ .id_table = intel_dg_mtd_id_table
+};
+module_auxiliary_driver(intel_dg_mtd_driver);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Intel Corporation");
+MODULE_DESCRIPTION("Intel DGFX MTD driver");
diff --git a/include/linux/intel_dg_nvm_aux.h b/include/linux/intel_dg_nvm_aux.h
new file mode 100644
index 000000000000..00b6c1301bd8
--- /dev/null
+++ b/include/linux/intel_dg_nvm_aux.h
@@ -0,0 +1,30 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright(c) 2019-2025, Intel Corporation. All rights reserved.
+ */
+
+#ifndef __INTEL_DG_NVM_AUX_H__
+#define __INTEL_DG_NVM_AUX_H__
+
+#include <linux/auxiliary_bus.h>
+#include <linux/container_of.h>
+#include <linux/ioport.h>
+#include <linux/types.h>
+
+#define INTEL_DG_NVM_REGIONS 13
+
+struct intel_dg_nvm_region {
+ const char *name;
+};
+
+struct intel_dg_nvm_dev {
+ struct auxiliary_device aux_dev;
+ bool writable_override;
+ struct resource bar;
+ const struct intel_dg_nvm_region *regions;
+};
+
+#define auxiliary_dev_to_intel_dg_nvm_dev(auxiliary_dev) \
+ container_of(auxiliary_dev, struct intel_dg_nvm_dev, aux_dev)
+
+#endif /* __INTEL_DG_NVM_AUX_H__ */
--
2.43.0
Return-Path: <linux-kernel+bounces-665592-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 7435C41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:06:15 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 890C44E371C
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:06:13 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 312AB28852C;
Wed, 28 May 2025 14:05:23 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="GdzhH9HS"
Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7566428850D
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:05:20 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.13
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441122; cv=none; b=V3YHA0dUcOt2Srvw/B5KYy5iUh7dR6/k3opb3iAYL/XW+p8N9tA/1jsCFgZ7Lkq4QEhTjhReRoJltjjbkqyVjfhZIXvNNJbtKPmepvqCRL1fzQB57HZIinQc/7Wlkt99QLTwdDJDvivNAOiChuH0rH/pc/qIykeLSdt4u6d3ud8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441122; c=relaxed/simple;
bh=xuOsmuG5r7vSiKxfwOymLvRfT9zBWtOZCDj+znIt+wE=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=nvQ0JYxVUW72jL16FMU1yPxbZejwjqOWTNxyDBYfybVyTwi1IHXWO2VjbssX3nQG480yMrfsDR49bnY1v/T9giELnGcdEyd2KvyfoHgTMDUHgBdzyyxm5R5KeqUht38hRrqg9+Q+n+VrBZfh9WTZnLKoqmBwxJ4lvIOuOPRd0FY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=GdzhH9HS; arc=none smtp.client-ip=198.175.65.13
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748441121; x=1779977121;
h=from:to:cc:subject:date:message-id:in-reply-to:
references:mime-version:content-transfer-encoding;
bh=xuOsmuG5r7vSiKxfwOymLvRfT9zBWtOZCDj+znIt+wE=;
b=GdzhH9HSj0F7uodEAQLAx1A8tWmD4eUdnP5vD29gboTN0SwVi4Jtiwma
HWzVUcU69Wd/CcLFVUt37eLXMenH8zjOIz9G6zW5SCiuIc9alNE3C46zC
eo41qrooU/KM5wyb/1MouUymBWChrcRLruO9TzrRM3uA3NJE+vbobspJr
SnypQPLFsUbG2KlWvNMp1gGQMN6lN61pZ2CLoYT2dYua0vYtoHgspuXqw
jnDCR7gP9TGeBIgUJ3baCx8231tHaHwJ3SiQV0HgmUUb0QaiHtVmrwyhl
m5q3J+W37b9HF8VFN6cl7tM95NLNC3y7tVDKY2CSXzqJ0Yqttx6OT51DK
Q==;
X-CSE-ConnectionGUID: I2U7S0h7TZK6joYAgFU3dA==
X-CSE-MsgGUID: 9dUScp7JTQGQxcrDeVYcgg==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="61524903"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="61524903"
Received: from fmviesa007.fm.intel.com ([10.60.135.147])
by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:20 -0700
X-CSE-ConnectionGUID: XS25QKXrSRS+RPwKIQ46LA==
X-CSE-MsgGUID: 41Gy93DqTXS9GgI93xC79A==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="143238888"
Received: from sannilnx-dsk.jer.intel.com ([10.12.231.107])
by fmviesa007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:14 -0700
From: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
To: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>,
Richard Weinberger <richard@xxxxxx>,
Vignesh Raghavendra <vigneshr@xxxxxx>,
Lucas De Marchi <lucas.demarchi@xxxxxxxxx>,
=?UTF-8?q?Thomas=20Hellstr=C3=B6m?= <thomas.hellstrom@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>,
Karthik Poosa <karthik.poosa@xxxxxxxxx>,
Raag Jadav <raag.jadav@xxxxxxxxx>
Cc: Reuven Abliyev <reuven.abliyev@xxxxxxxxx>,
Oren Weil <oren.jer.weil@xxxxxxxxx>,
linux-mtd@xxxxxxxxxxxxxxxxxxx,
intel-xe@xxxxxxxxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx,
intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Alexander Usyskin <alexander.usyskin@xxxxxxxxx>,
Tomas Winkler <tomasw@xxxxxxxxx>
Subject: [PATCH v11 02/10] mtd: intel-dg: implement region enumeration
Date: Wed, 28 May 2025 16:51:07 +0300
Message-ID: <20250528135115.2512429-3-alexander.usyskin@xxxxxxxxx>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
References: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
In intel-dg, there is no access to the spi controller,
the information is extracted from the descriptor region.
CC: Lucas De Marchi <lucas.demarchi@xxxxxxxxx>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>
Acked-by: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>
Co-developed-by: Tomas Winkler <tomasw@xxxxxxxxx>
Signed-off-by: Tomas Winkler <tomasw@xxxxxxxxx>
Signed-off-by: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
---
drivers/mtd/devices/mtd_intel_dg.c | 206 +++++++++++++++++++++++++++++
1 file changed, 206 insertions(+)
diff --git a/drivers/mtd/devices/mtd_intel_dg.c b/drivers/mtd/devices/mtd_intel_dg.c
index c2d0dbfb0378..478dd2b158e3 100644
--- a/drivers/mtd/devices/mtd_intel_dg.c
+++ b/drivers/mtd/devices/mtd_intel_dg.c
@@ -3,6 +3,8 @@
* Copyright(c) 2019-2025, Intel Corporation. All rights reserved.
*/
+#include <linux/bitfield.h>
+#include <linux/bits.h>
#include <linux/device.h>
#include <linux/intel_dg_nvm_aux.h>
#include <linux/io.h>
@@ -22,9 +24,207 @@ struct intel_dg_nvm {
u8 id;
u64 offset;
u64 size;
+ unsigned int is_readable:1;
+ unsigned int is_writable:1;
} regions[] __counted_by(nregions);
};
+#define NVM_TRIGGER_REG 0x00000000
+#define NVM_VALSIG_REG 0x00000010
+#define NVM_ADDRESS_REG 0x00000040
+#define NVM_REGION_ID_REG 0x00000044
+/*
+ * [15:0]-Erase size = 0x0010 4K 0x0080 32K 0x0100 64K
+ * [23:16]-Reserved
+ * [31:24]-Erase MEM RegionID
+ */
+#define NVM_ERASE_REG 0x00000048
+#define NVM_ACCESS_ERROR_REG 0x00000070
+#define NVM_ADDRESS_ERROR_REG 0x00000074
+
+/* Flash Valid Signature */
+#define NVM_FLVALSIG 0x0FF0A55A
+
+#define NVM_MAP_ADDR_MASK GENMASK(7, 0)
+#define NVM_MAP_ADDR_SHIFT 0x00000004
+
+#define NVM_REGION_ID_DESCRIPTOR 0
+/* Flash Region Base Address */
+#define NVM_FRBA 0x40
+/* Flash Region __n - Flash Descriptor Record */
+#define NVM_FLREG(__n) (NVM_FRBA + ((__n) * 4))
+/* Flash Map 1 Register */
+#define NVM_FLMAP1_REG 0x18
+#define NVM_FLMSTR4_OFFSET 0x00C
+
+#define NVM_ACCESS_ERROR_PCIE_MASK 0x7
+
+#define NVM_FREG_BASE_MASK GENMASK(15, 0)
+#define NVM_FREG_ADDR_MASK GENMASK(31, 16)
+#define NVM_FREG_ADDR_SHIFT 12
+#define NVM_FREG_MIN_REGION_SIZE 0xFFF
+
+static inline void idg_nvm_set_region_id(struct intel_dg_nvm *nvm, u8 region)
+{
+ iowrite32((u32)region, nvm->base + NVM_REGION_ID_REG);
+}
+
+static inline u32 idg_nvm_error(struct intel_dg_nvm *nvm)
+{
+ void __iomem *base = nvm->base;
+
+ u32 reg = ioread32(base + NVM_ACCESS_ERROR_REG) & NVM_ACCESS_ERROR_PCIE_MASK;
+
+ /* reset error bits */
+ if (reg)
+ iowrite32(reg, base + NVM_ACCESS_ERROR_REG);
+
+ return reg;
+}
+
+static inline u32 idg_nvm_read32(struct intel_dg_nvm *nvm, u32 address)
+{
+ void __iomem *base = nvm->base;
+
+ iowrite32(address, base + NVM_ADDRESS_REG);
+
+ return ioread32(base + NVM_TRIGGER_REG);
+}
+
+static int idg_nvm_get_access_map(struct intel_dg_nvm *nvm, u32 *access_map)
+{
+ u32 fmstr4_addr;
+ u32 fmstr4;
+ u32 flmap1;
+ u32 fmba;
+
+ idg_nvm_set_region_id(nvm, NVM_REGION_ID_DESCRIPTOR);
+
+ flmap1 = idg_nvm_read32(nvm, NVM_FLMAP1_REG);
+ if (idg_nvm_error(nvm))
+ return -EIO;
+ /* Get Flash Master Baser Address (FMBA) */
+ fmba = (FIELD_GET(NVM_MAP_ADDR_MASK, flmap1) << NVM_MAP_ADDR_SHIFT);
+ fmstr4_addr = fmba + NVM_FLMSTR4_OFFSET;
+
+ fmstr4 = idg_nvm_read32(nvm, fmstr4_addr);
+ if (idg_nvm_error(nvm))
+ return -EIO;
+
+ *access_map = fmstr4;
+ return 0;
+}
+
+/*
+ * Region read/write access encoded in the access map
+ * in the following order from the lower bit:
+ * [3:0] regions 12-15 read state
+ * [7:4] regions 12-15 write state
+ * [19:8] regions 0-11 read state
+ * [31:20] regions 0-11 write state
+ */
+static bool idg_nvm_region_readable(u32 access_map, u8 region)
+{
+ if (region < 12)
+ return access_map & BIT(region + 8); /* [19:8] */
+ else
+ return access_map & BIT(region - 12); /* [3:0] */
+}
+
+static bool idg_nvm_region_writable(u32 access_map, u8 region)
+{
+ if (region < 12)
+ return access_map & BIT(region + 20); /* [31:20] */
+ else
+ return access_map & BIT(region - 8); /* [7:4] */
+}
+
+static int idg_nvm_is_valid(struct intel_dg_nvm *nvm)
+{
+ u32 is_valid;
+
+ idg_nvm_set_region_id(nvm, NVM_REGION_ID_DESCRIPTOR);
+
+ is_valid = idg_nvm_read32(nvm, NVM_VALSIG_REG);
+ if (idg_nvm_error(nvm))
+ return -EIO;
+
+ if (is_valid != NVM_FLVALSIG)
+ return -ENODEV;
+
+ return 0;
+}
+
+static int intel_dg_nvm_init(struct intel_dg_nvm *nvm, struct device *device)
+{
+ u32 access_map = 0;
+ unsigned int i, n;
+ int ret;
+
+ /* clean error register, previous errors are ignored */
+ idg_nvm_error(nvm);
+
+ ret = idg_nvm_is_valid(nvm);
+ if (ret) {
+ dev_err(device, "The MEM is not valid %d\n", ret);
+ return ret;
+ }
+
+ if (idg_nvm_get_access_map(nvm, &access_map))
+ return -EIO;
+
+ for (i = 0, n = 0; i < nvm->nregions; i++) {
+ u32 address, base, limit, region;
+ u8 id = nvm->regions[i].id;
+
+ address = NVM_FLREG(id);
+ region = idg_nvm_read32(nvm, address);
+
+ base = FIELD_GET(NVM_FREG_BASE_MASK, region) << NVM_FREG_ADDR_SHIFT;
+ limit = (FIELD_GET(NVM_FREG_ADDR_MASK, region) << NVM_FREG_ADDR_SHIFT) |
+ NVM_FREG_MIN_REGION_SIZE;
+
+ dev_dbg(device, "[%d] %s: region: 0x%08X base: 0x%08x limit: 0x%08x\n",
+ id, nvm->regions[i].name, region, base, limit);
+
+ if (base >= limit || (i > 0 && limit == 0)) {
+ dev_dbg(device, "[%d] %s: disabled\n",
+ id, nvm->regions[i].name);
+ nvm->regions[i].is_readable = 0;
+ continue;
+ }
+
+ if (nvm->size < limit)
+ nvm->size = limit;
+
+ nvm->regions[i].offset = base;
+ nvm->regions[i].size = limit - base + 1;
+ /* No write access to descriptor; mask it out*/
+ nvm->regions[i].is_writable = idg_nvm_region_writable(access_map, id);
+
+ nvm->regions[i].is_readable = idg_nvm_region_readable(access_map, id);
+ dev_dbg(device, "Registered, %s id=%d offset=%lld size=%lld rd=%d wr=%d\n",
+ nvm->regions[i].name,
+ nvm->regions[i].id,
+ nvm->regions[i].offset,
+ nvm->regions[i].size,
+ nvm->regions[i].is_readable,
+ nvm->regions[i].is_writable);
+
+ if (nvm->regions[i].is_readable)
+ n++;
+ }
+
+ dev_dbg(device, "Registered %d regions\n", n);
+
+ /* Need to add 1 to the amount of memory
+ * so it is reported as an even block
+ */
+ nvm->size += 1;
+
+ return n;
+}
+
static void intel_dg_nvm_release(struct kref *kref)
{
struct intel_dg_nvm *nvm = container_of(kref, struct intel_dg_nvm, refcnt);
@@ -85,6 +285,12 @@ static int intel_dg_mtd_probe(struct auxiliary_device *aux_dev,
goto err;
}
+ ret = intel_dg_nvm_init(nvm, device);
+ if (ret < 0) {
+ dev_err(device, "cannot initialize nvm %d\n", ret);
+ goto err;
+ }
+
dev_set_drvdata(&aux_dev->dev, nvm);
return 0;
--
2.43.0
Return-Path: <linux-kernel+bounces-665593-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E9B6541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:06:38 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 3645CA229EC
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:06:03 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 01533289E02;
Wed, 28 May 2025 14:05:29 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="bQp8+eqj"
Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 803F428983F
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:05:26 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.13
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441128; cv=none; b=T4qNk1t4nCF+XA/V9PDYgSrYzJAJjaTchgwAOEUAuM2pFdXhMexP6UBb5YRg69TIoe0KFULqom4kLBWlCFqSKcACxKjZMcREHL+5CkdbKlPA09DWTD4wutHrk4ARNaXiW+hxjRrB+FTJyADD7BhoJPZ+P0F0h0N2/MZOAmeI1V4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441128; c=relaxed/simple;
bh=WvLWJRAv8idelb+wbiysTqm+mBTnrzkj5Bl282lOSrk=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=UzUUwI290NkxdkTSr9u33HQjWoJs1O1tYApCpOdNzfcVhFl2pADPIPk/1cWVJQ8WDuJ0v6spxQ/ZTZBo3UbFKCQyx2BxDz3zrtBe7rTQfMTiYUQEonkyIQv6LZrDsItdRd6iKCZTTAXD0dd2U80dXBXxUF2AkX8IzzmPOUgTIbA=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=bQp8+eqj; arc=none smtp.client-ip=198.175.65.13
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748441127; x=1779977127;
h=from:to:cc:subject:date:message-id:in-reply-to:
references:mime-version:content-transfer-encoding;
bh=WvLWJRAv8idelb+wbiysTqm+mBTnrzkj5Bl282lOSrk=;
b=bQp8+eqjJ2tqU30CUoSQSPj6dBieLM23n4FAazuJsdQSbcs0VSDEJhxg
YdpStP17REWemnR+WI2xAeV95t8/wgmqMCTESg9dakwyBg1PH4Oc2snZ/
01ePSNWbjui0Kavb9RG58SgKKIlBhtqReqnnTtJV2jQ08kB+FFUUMqI3t
EWFe39EFmbITIuyTdlTgIbdXSsrj8y5dz1SpUsWkSJZ6+BecGU6pATvml
zVdc5jbYS8XFriv33AvYLx7BrQUK83DwLK4X3KqW0cktanuxBQ3XWv6NJ
gzsmD+c2O1nUOZmNh4EB3KUKyQeDbfy5XR4kaQZUJVHfe3AsCM1849EAO
Q==;
X-CSE-ConnectionGUID: /AJzpZ7hQVSHnDYEd6WUnQ==
X-CSE-MsgGUID: s+1upi82TQO9bAzGiHVnzQ==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="61524988"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="61524988"
Received: from fmviesa007.fm.intel.com ([10.60.135.147])
by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:26 -0700
X-CSE-ConnectionGUID: mqiy/PgSQOuSrS6yxPJxXA==
X-CSE-MsgGUID: GMTYIw/dS46Yu4F4VHCfVg==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="143238927"
Received: from sannilnx-dsk.jer.intel.com ([10.12.231.107])
by fmviesa007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:20 -0700
From: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
To: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>,
Richard Weinberger <richard@xxxxxx>,
Vignesh Raghavendra <vigneshr@xxxxxx>,
Lucas De Marchi <lucas.demarchi@xxxxxxxxx>,
=?UTF-8?q?Thomas=20Hellstr=C3=B6m?= <thomas.hellstrom@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>,
Karthik Poosa <karthik.poosa@xxxxxxxxx>,
Raag Jadav <raag.jadav@xxxxxxxxx>
Cc: Reuven Abliyev <reuven.abliyev@xxxxxxxxx>,
Oren Weil <oren.jer.weil@xxxxxxxxx>,
linux-mtd@xxxxxxxxxxxxxxxxxxx,
intel-xe@xxxxxxxxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx,
intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Alexander Usyskin <alexander.usyskin@xxxxxxxxx>,
Tomas Winkler <tomasw@xxxxxxxxx>,
Vitaly Lubart <lubvital@xxxxxxxxx>
Subject: [PATCH v11 03/10] mtd: intel-dg: implement access functions
Date: Wed, 28 May 2025 16:51:08 +0300
Message-ID: <20250528135115.2512429-4-alexander.usyskin@xxxxxxxxx>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
References: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Implement read(), erase() and write() functions.
CC: Lucas De Marchi <lucas.demarchi@xxxxxxxxx>
CC: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>
Reviewed-by: Raag Jadav <raag.jadav@xxxxxxxxx>
Acked-by: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>
Co-developed-by: Tomas Winkler <tomasw@xxxxxxxxx>
Signed-off-by: Tomas Winkler <tomasw@xxxxxxxxx>
Co-developed-by: Vitaly Lubart <lubvital@xxxxxxxxx>
Signed-off-by: Vitaly Lubart <lubvital@xxxxxxxxx>
Signed-off-by: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
---
drivers/mtd/devices/mtd_intel_dg.c | 197 +++++++++++++++++++++++++++++
1 file changed, 197 insertions(+)
diff --git a/drivers/mtd/devices/mtd_intel_dg.c b/drivers/mtd/devices/mtd_intel_dg.c
index 478dd2b158e3..4d6e2c009b45 100644
--- a/drivers/mtd/devices/mtd_intel_dg.c
+++ b/drivers/mtd/devices/mtd_intel_dg.c
@@ -5,13 +5,16 @@
#include <linux/bitfield.h>
#include <linux/bits.h>
+#include <linux/delay.h>
#include <linux/device.h>
#include <linux/intel_dg_nvm_aux.h>
#include <linux/io.h>
+#include <linux/io-64-nonatomic-lo-hi.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/string.h>
#include <linux/slab.h>
+#include <linux/sizes.h>
#include <linux/types.h>
struct intel_dg_nvm {
@@ -91,6 +94,33 @@ static inline u32 idg_nvm_read32(struct intel_dg_nvm *nvm, u32 address)
return ioread32(base + NVM_TRIGGER_REG);
}
+static inline u64 idg_nvm_read64(struct intel_dg_nvm *nvm, u32 address)
+{
+ void __iomem *base = nvm->base;
+
+ iowrite32(address, base + NVM_ADDRESS_REG);
+
+ return readq(base + NVM_TRIGGER_REG);
+}
+
+static void idg_nvm_write32(struct intel_dg_nvm *nvm, u32 address, u32 data)
+{
+ void __iomem *base = nvm->base;
+
+ iowrite32(address, base + NVM_ADDRESS_REG);
+
+ iowrite32(data, base + NVM_TRIGGER_REG);
+}
+
+static void idg_nvm_write64(struct intel_dg_nvm *nvm, u32 address, u64 data)
+{
+ void __iomem *base = nvm->base;
+
+ iowrite32(address, base + NVM_ADDRESS_REG);
+
+ writeq(data, base + NVM_TRIGGER_REG);
+}
+
static int idg_nvm_get_access_map(struct intel_dg_nvm *nvm, u32 *access_map)
{
u32 fmstr4_addr;
@@ -155,6 +185,173 @@ static int idg_nvm_is_valid(struct intel_dg_nvm *nvm)
return 0;
}
+__maybe_unused
+static unsigned int idg_nvm_get_region(const struct intel_dg_nvm *nvm, loff_t from)
+{
+ unsigned int i;
+
+ for (i = 0; i < nvm->nregions; i++) {
+ if ((nvm->regions[i].offset + nvm->regions[i].size - 1) >= from &&
+ nvm->regions[i].offset <= from &&
+ nvm->regions[i].size != 0)
+ break;
+ }
+
+ return i;
+}
+
+static ssize_t idg_nvm_rewrite_partial(struct intel_dg_nvm *nvm, loff_t to,
+ loff_t offset, size_t len, const u32 *newdata)
+{
+ u32 data = idg_nvm_read32(nvm, to);
+
+ if (idg_nvm_error(nvm))
+ return -EIO;
+
+ memcpy((u8 *)&data + offset, newdata, len);
+
+ idg_nvm_write32(nvm, to, data);
+ if (idg_nvm_error(nvm))
+ return -EIO;
+
+ return len;
+}
+
+__maybe_unused
+static ssize_t idg_write(struct intel_dg_nvm *nvm, u8 region,
+ loff_t to, size_t len, const unsigned char *buf)
+{
+ size_t len_s = len;
+ size_t to_shift;
+ size_t len8;
+ size_t len4;
+ ssize_t ret;
+ size_t to4;
+ size_t i;
+
+ idg_nvm_set_region_id(nvm, region);
+
+ to4 = ALIGN_DOWN(to, sizeof(u32));
+ to_shift = min(sizeof(u32) - ((size_t)to - to4), len);
+ if (to - to4) {
+ ret = idg_nvm_rewrite_partial(nvm, to4, to - to4, to_shift, (u32 *)&buf[0]);
+ if (ret < 0)
+ return ret;
+
+ buf += to_shift;
+ to += to_shift;
+ len_s -= to_shift;
+ }
+
+ len8 = ALIGN_DOWN(len_s, sizeof(u64));
+ for (i = 0; i < len8; i += sizeof(u64)) {
+ u64 data;
+
+ memcpy(&data, &buf[i], sizeof(u64));
+ idg_nvm_write64(nvm, to + i, data);
+ if (idg_nvm_error(nvm))
+ return -EIO;
+ }
+
+ len4 = len_s - len8;
+ if (len4 >= sizeof(u32)) {
+ u32 data;
+
+ memcpy(&data, &buf[i], sizeof(u32));
+ idg_nvm_write32(nvm, to + i, data);
+ if (idg_nvm_error(nvm))
+ return -EIO;
+ i += sizeof(u32);
+ len4 -= sizeof(u32);
+ }
+
+ if (len4 > 0) {
+ ret = idg_nvm_rewrite_partial(nvm, to + i, 0, len4, (u32 *)&buf[i]);
+ if (ret < 0)
+ return ret;
+ }
+
+ return len;
+}
+
+__maybe_unused
+static ssize_t idg_read(struct intel_dg_nvm *nvm, u8 region,
+ loff_t from, size_t len, unsigned char *buf)
+{
+ size_t len_s = len;
+ size_t from_shift;
+ size_t from4;
+ size_t len8;
+ size_t len4;
+ size_t i;
+
+ idg_nvm_set_region_id(nvm, region);
+
+ from4 = ALIGN_DOWN(from, sizeof(u32));
+ from_shift = min(sizeof(u32) - ((size_t)from - from4), len);
+
+ if (from - from4) {
+ u32 data = idg_nvm_read32(nvm, from4);
+
+ if (idg_nvm_error(nvm))
+ return -EIO;
+ memcpy(&buf[0], (u8 *)&data + (from - from4), from_shift);
+ len_s -= from_shift;
+ buf += from_shift;
+ from += from_shift;
+ }
+
+ len8 = ALIGN_DOWN(len_s, sizeof(u64));
+ for (i = 0; i < len8; i += sizeof(u64)) {
+ u64 data = idg_nvm_read64(nvm, from + i);
+
+ if (idg_nvm_error(nvm))
+ return -EIO;
+
+ memcpy(&buf[i], &data, sizeof(data));
+ }
+
+ len4 = len_s - len8;
+ if (len4 >= sizeof(u32)) {
+ u32 data = idg_nvm_read32(nvm, from + i);
+
+ if (idg_nvm_error(nvm))
+ return -EIO;
+ memcpy(&buf[i], &data, sizeof(data));
+ i += sizeof(u32);
+ len4 -= sizeof(u32);
+ }
+
+ if (len4 > 0) {
+ u32 data = idg_nvm_read32(nvm, from + i);
+
+ if (idg_nvm_error(nvm))
+ return -EIO;
+ memcpy(&buf[i], &data, len4);
+ }
+
+ return len;
+}
+
+__maybe_unused
+static ssize_t
+idg_erase(struct intel_dg_nvm *nvm, u8 region, loff_t from, u64 len, u64 *fail_addr)
+{
+ void __iomem *base = nvm->base;
+ const u32 block = 0x10;
+ u64 i;
+
+ for (i = 0; i < len; i += SZ_4K) {
+ iowrite32(from + i, base + NVM_ADDRESS_REG);
+ iowrite32(region << 24 | block, base + NVM_ERASE_REG);
+ /* Since the writes are via sgunit
+ * we cannot do back to back erases.
+ */
+ msleep(50);
+ }
+ return len;
+}
+
static int intel_dg_nvm_init(struct intel_dg_nvm *nvm, struct device *device)
{
u32 access_map = 0;
--
2.43.0
Return-Path: <linux-kernel+bounces-665595-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 40C3341E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:06:52 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id BA15C4E0D0E
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:06:48 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 8DF2628A1ED;
Wed, 28 May 2025 14:05:39 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="JA8PK0FI"
Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 65267288C3B
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:05:37 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.13
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441138; cv=none; b=AEyW1abXBAuo6xX37kf0ysTmU9r5wYljGGPqR7cPzbDlm37ZVd//hN5wdAUkc5vKHlpHvKjMrSNBHry88TCJL/K+TEzhE7/ahQBcMtpqourxWdF6KHbQOVtSe8WqgIW57YspEY6LP2xekjGUjhLP3VqeysYo+S/o55QBWdkydLc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441138; c=relaxed/simple;
bh=MMMc1QOoouxBif3/5VRy4IB5iB739EPi4BNzKnIooWs=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=eZbjYU1d5aUslbUldnivw5Ivxg0xe0bUgVhy1Z5vmxb0qJ+RfRxTuu8vHIZPW0WyWSaHmrG01c+3LoNxd/s1LYP29AKWZiLI92FJOrP0pbGBqMn3g6k49KXoZvXNMRVWWb9ez8C3LKBVRn+tRQO4TRDrR4WBGRTSCXya1xe3E58=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=JA8PK0FI; arc=none smtp.client-ip=198.175.65.13
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748441138; x=1779977138;
h=from:to:cc:subject:date:message-id:in-reply-to:
references:mime-version:content-transfer-encoding;
bh=MMMc1QOoouxBif3/5VRy4IB5iB739EPi4BNzKnIooWs=;
b=JA8PK0FI/Nh8+WCxBqr8ABvyK91hiW3WcX0291dk3L65booDeBETGoyb
QKzY/oV+izI3xE2FCr9ejvJK+s65RaTkhOEbIHarvUS7Bs8CRHAkhHiuD
xZWcrtR4oXM6s0ba5OpKtqTED1fnOYr1Z5Bz9WrOMzXb5EtLiVeNHUCqo
oO8t3k5Et2wQ/DU5JINY9FGRxvNW56KgKDVf0otuwXDD5Bpxvgps9FB9U
1b5Es1Ou723pYW4g2gmpUCwA1eaQYGN10CfH7h0ZyfsFkCB4h+nhKu/Jb
YXYQdoXX7FChgmQbWEav4B3k+DkQcG/zkubff3eoPwp3llHUJk/k0/vxF
A==;
X-CSE-ConnectionGUID: JuWbkWqYRe6a8gN94PTV5w==
X-CSE-MsgGUID: ig/UulcrQsKf7OuuDcurjQ==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="61525082"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="61525082"
Received: from fmviesa007.fm.intel.com ([10.60.135.147])
by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:37 -0700
X-CSE-ConnectionGUID: 8Hpll7dLRSWzEu7/btNDWw==
X-CSE-MsgGUID: GwSQwc13RTCEFQVNzrx0EQ==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="143239011"
Received: from sannilnx-dsk.jer.intel.com ([10.12.231.107])
by fmviesa007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:32 -0700
From: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
To: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>,
Richard Weinberger <richard@xxxxxx>,
Vignesh Raghavendra <vigneshr@xxxxxx>,
Lucas De Marchi <lucas.demarchi@xxxxxxxxx>,
=?UTF-8?q?Thomas=20Hellstr=C3=B6m?= <thomas.hellstrom@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>,
Karthik Poosa <karthik.poosa@xxxxxxxxx>,
Raag Jadav <raag.jadav@xxxxxxxxx>
Cc: Reuven Abliyev <reuven.abliyev@xxxxxxxxx>,
Oren Weil <oren.jer.weil@xxxxxxxxx>,
linux-mtd@xxxxxxxxxxxxxxxxxxx,
intel-xe@xxxxxxxxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx,
intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
Subject: [PATCH v11 05/10] mtd: intel-dg: align 64bit read and write
Date: Wed, 28 May 2025 16:51:10 +0300
Message-ID: <20250528135115.2512429-6-alexander.usyskin@xxxxxxxxx>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
References: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
GSC NVM controller HW errors on quad access overlapping 1K border.
Align 64bit read and write to avoid readq/writeq over 1K border.
Acked-by: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>
Signed-off-by: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
---
drivers/mtd/devices/mtd_intel_dg.c | 35 ++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/drivers/mtd/devices/mtd_intel_dg.c b/drivers/mtd/devices/mtd_intel_dg.c
index 6d971fb77938..97e1dc1ada5d 100644
--- a/drivers/mtd/devices/mtd_intel_dg.c
+++ b/drivers/mtd/devices/mtd_intel_dg.c
@@ -246,6 +246,24 @@ static ssize_t idg_write(struct intel_dg_nvm *nvm, u8 region,
len_s -= to_shift;
}
+ if (!IS_ALIGNED(to, sizeof(u64)) &&
+ ((to ^ (to + len_s)) & GENMASK(31, 10))) {
+ /*
+ * Workaround reads/writes across 1k-aligned addresses
+ * (start u32 before 1k, end u32 after)
+ * as this fails on hardware.
+ */
+ u32 data;
+
+ memcpy(&data, &buf[0], sizeof(u32));
+ idg_nvm_write32(nvm, to, data);
+ if (idg_nvm_error(nvm))
+ return -EIO;
+ buf += sizeof(u32);
+ to += sizeof(u32);
+ len_s -= sizeof(u32);
+ }
+
len8 = ALIGN_DOWN(len_s, sizeof(u64));
for (i = 0; i < len8; i += sizeof(u64)) {
u64 data;
@@ -303,6 +321,23 @@ static ssize_t idg_read(struct intel_dg_nvm *nvm, u8 region,
from += from_shift;
}
+ if (!IS_ALIGNED(from, sizeof(u64)) &&
+ ((from ^ (from + len_s)) & GENMASK(31, 10))) {
+ /*
+ * Workaround reads/writes across 1k-aligned addresses
+ * (start u32 before 1k, end u32 after)
+ * as this fails on hardware.
+ */
+ u32 data = idg_nvm_read32(nvm, from);
+
+ if (idg_nvm_error(nvm))
+ return -EIO;
+ memcpy(&buf[0], &data, sizeof(data));
+ len_s -= sizeof(u32);
+ buf += sizeof(u32);
+ from += sizeof(u32);
+ }
+
len8 = ALIGN_DOWN(len_s, sizeof(u64));
for (i = 0; i < len8; i += sizeof(u64)) {
u64 data = idg_nvm_read64(nvm, from + i);
--
2.43.0
Return-Path: <linux-kernel+bounces-665594-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 0D74C41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:06:59 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 7D9CA3A3C9B
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:06:14 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 1ECCF288C2C;
Wed, 28 May 2025 14:05:35 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="UbJElaxF"
Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 38F07288C29
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:05:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.13
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441134; cv=none; b=ETkq+jVuqBIqx7FGZN81C7l6/InUj93RzTs9h54Gqu05rv4BffsLY8/31bb/phxGw4F67cSRi47X0puPn794Yl4oJC31aeiHaQv9wTaz4Gwk49Ow+WspyczsDhQX7kkH1MkANAIw249VLcoQtf40shupkzZmI2IBx+lML1rPSMw=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441134; c=relaxed/simple;
bh=H1b7SLKQ9nZnC9EGLA4fx2BneF/NmYFhOwbTjSbPXOQ=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=II7IkOJ0dC4MKm+u6scHH7ZCKNg0p8K9eAY1MKZlVUjLx7JEJRbXm8vFXl8yJeaLUkry/AX3/bFJjB/bYf9gqJRCs2urUn1bw4ZlCNB6eLD6YVz/LdJNplLKU9P6Dca/OppiynC13Sy9gKu+zMjCr7BEmB1vZAZSXCu6TwT1WOQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=UbJElaxF; arc=none smtp.client-ip=198.175.65.13
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748441132; x=1779977132;
h=from:to:cc:subject:date:message-id:in-reply-to:
references:mime-version:content-transfer-encoding;
bh=H1b7SLKQ9nZnC9EGLA4fx2BneF/NmYFhOwbTjSbPXOQ=;
b=UbJElaxFZN09oUbxfiAAUIhJN60UVJYm5lT6J0ka7pnY8R8HwbD8A9eK
06os2X1Ec9rcAo84fAsQNUuPGHGtJ1sKMUaJv8z0SYfHibfBEaao1Ac3y
S77VOsVHAdJ/xrHbMI/a8e4FfQ963jPJRuar8EMUmwRiYdj0dqkNAi3LM
NZjw+mvRCIlolfzmtdKr6V4U15Y6Mp4P1IgfmPaum5tlbU0GHECL7rbZK
4XpcSxCK6CcXwycJdiqjFmRQ85gTUF3habhnaM6AxFcWb6XA5Fzk0FCbR
ZE+xPHsSUcsr8Hc0Y5FcAw+W5jGTHmIWJ8cRercdOM1EGLI584IvRtCD/
A==;
X-CSE-ConnectionGUID: 6zmSFA6/Sg6Bz2A32SnDOA==
X-CSE-MsgGUID: l1qAiq8tQCa78oSuNq1dmw==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="61525046"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="61525046"
Received: from fmviesa007.fm.intel.com ([10.60.135.147])
by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:32 -0700
X-CSE-ConnectionGUID: SR8mWKfJRfKljODEljL+pg==
X-CSE-MsgGUID: JDjZarNeQMa1hpZSUk3UsA==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="143238964"
Received: from sannilnx-dsk.jer.intel.com ([10.12.231.107])
by fmviesa007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:26 -0700
From: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
To: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>,
Richard Weinberger <richard@xxxxxx>,
Vignesh Raghavendra <vigneshr@xxxxxx>,
Lucas De Marchi <lucas.demarchi@xxxxxxxxx>,
=?UTF-8?q?Thomas=20Hellstr=C3=B6m?= <thomas.hellstrom@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>,
Karthik Poosa <karthik.poosa@xxxxxxxxx>,
Raag Jadav <raag.jadav@xxxxxxxxx>
Cc: Reuven Abliyev <reuven.abliyev@xxxxxxxxx>,
Oren Weil <oren.jer.weil@xxxxxxxxx>,
linux-mtd@xxxxxxxxxxxxxxxxxxx,
intel-xe@xxxxxxxxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx,
intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Alexander Usyskin <alexander.usyskin@xxxxxxxxx>,
Tomas Winkler <tomasw@xxxxxxxxx>,
Vitaly Lubart <lubvital@xxxxxxxxx>
Subject: [PATCH v11 04/10] mtd: intel-dg: register with mtd
Date: Wed, 28 May 2025 16:51:09 +0300
Message-ID: <20250528135115.2512429-5-alexander.usyskin@xxxxxxxxx>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
References: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Register the on-die nvm device with the mtd subsystem.
Refcount nvm object on _get and _put mtd callbacks.
For erase operation address and size should be 4K aligned.
For write operation address and size has to be 4bytes aligned.
CC: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>
CC: Lucas De Marchi <lucas.demarchi@xxxxxxxxx>
Acked-by: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>
Co-developed-by: Tomas Winkler <tomasw@xxxxxxxxx>
Signed-off-by: Tomas Winkler <tomasw@xxxxxxxxx>
Co-developed-by: Vitaly Lubart <lubvital@xxxxxxxxx>
Signed-off-by: Vitaly Lubart <lubvital@xxxxxxxxx>
Signed-off-by: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
---
drivers/mtd/devices/mtd_intel_dg.c | 228 ++++++++++++++++++++++++++++-
1 file changed, 224 insertions(+), 4 deletions(-)
diff --git a/drivers/mtd/devices/mtd_intel_dg.c b/drivers/mtd/devices/mtd_intel_dg.c
index 4d6e2c009b45..6d971fb77938 100644
--- a/drivers/mtd/devices/mtd_intel_dg.c
+++ b/drivers/mtd/devices/mtd_intel_dg.c
@@ -5,6 +5,7 @@
#include <linux/bitfield.h>
#include <linux/bits.h>
+#include <linux/cleanup.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/intel_dg_nvm_aux.h>
@@ -12,6 +13,8 @@
#include <linux/io-64-nonatomic-lo-hi.h>
#include <linux/kernel.h>
#include <linux/module.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/partitions.h>
#include <linux/string.h>
#include <linux/slab.h>
#include <linux/sizes.h>
@@ -19,6 +22,8 @@
struct intel_dg_nvm {
struct kref refcnt;
+ struct mtd_info mtd;
+ struct mutex lock; /* region access lock */
void __iomem *base;
size_t size;
unsigned int nregions;
@@ -185,7 +190,6 @@ static int idg_nvm_is_valid(struct intel_dg_nvm *nvm)
return 0;
}
-__maybe_unused
static unsigned int idg_nvm_get_region(const struct intel_dg_nvm *nvm, loff_t from)
{
unsigned int i;
@@ -217,7 +221,6 @@ static ssize_t idg_nvm_rewrite_partial(struct intel_dg_nvm *nvm, loff_t to,
return len;
}
-__maybe_unused
static ssize_t idg_write(struct intel_dg_nvm *nvm, u8 region,
loff_t to, size_t len, const unsigned char *buf)
{
@@ -274,7 +277,6 @@ static ssize_t idg_write(struct intel_dg_nvm *nvm, u8 region,
return len;
}
-__maybe_unused
static ssize_t idg_read(struct intel_dg_nvm *nvm, u8 region,
loff_t from, size_t len, unsigned char *buf)
{
@@ -333,7 +335,6 @@ static ssize_t idg_read(struct intel_dg_nvm *nvm, u8 region,
return len;
}
-__maybe_unused
static ssize_t
idg_erase(struct intel_dg_nvm *nvm, u8 region, loff_t from, u64 len, u64 *fail_addr)
{
@@ -422,6 +423,147 @@ static int intel_dg_nvm_init(struct intel_dg_nvm *nvm, struct device *device)
return n;
}
+static int intel_dg_mtd_erase(struct mtd_info *mtd, struct erase_info *info)
+{
+ struct intel_dg_nvm *nvm = mtd->priv;
+ size_t total_len;
+ unsigned int idx;
+ ssize_t bytes;
+ loff_t from;
+ size_t len;
+ u8 region;
+ u64 addr;
+
+ if (WARN_ON(!nvm))
+ return -EINVAL;
+
+ if (!IS_ALIGNED(info->addr, SZ_4K) || !IS_ALIGNED(info->len, SZ_4K)) {
+ dev_err(&mtd->dev, "unaligned erase %llx %llx\n",
+ info->addr, info->len);
+ info->fail_addr = MTD_FAIL_ADDR_UNKNOWN;
+ return -EINVAL;
+ }
+
+ total_len = info->len;
+ addr = info->addr;
+
+ guard(mutex)(&nvm->lock);
+
+ while (total_len > 0) {
+ if (!IS_ALIGNED(addr, SZ_4K) || !IS_ALIGNED(total_len, SZ_4K)) {
+ dev_err(&mtd->dev, "unaligned erase %llx %zx\n", addr, total_len);
+ info->fail_addr = addr;
+ return -ERANGE;
+ }
+
+ idx = idg_nvm_get_region(nvm, addr);
+ if (idx >= nvm->nregions) {
+ dev_err(&mtd->dev, "out of range");
+ info->fail_addr = MTD_FAIL_ADDR_UNKNOWN;
+ return -ERANGE;
+ }
+
+ from = addr - nvm->regions[idx].offset;
+ region = nvm->regions[idx].id;
+ len = total_len;
+ if (len > nvm->regions[idx].size - from)
+ len = nvm->regions[idx].size - from;
+
+ dev_dbg(&mtd->dev, "erasing region[%d] %s from %llx len %zx\n",
+ region, nvm->regions[idx].name, from, len);
+
+ bytes = idg_erase(nvm, region, from, len, &info->fail_addr);
+ if (bytes < 0) {
+ dev_dbg(&mtd->dev, "erase failed with %zd\n", bytes);
+ info->fail_addr += nvm->regions[idx].offset;
+ return bytes;
+ }
+
+ addr += len;
+ total_len -= len;
+ }
+
+ return 0;
+}
+
+static int intel_dg_mtd_read(struct mtd_info *mtd, loff_t from, size_t len,
+ size_t *retlen, u_char *buf)
+{
+ struct intel_dg_nvm *nvm = mtd->priv;
+ unsigned int idx;
+ ssize_t ret;
+ u8 region;
+
+ if (WARN_ON(!nvm))
+ return -EINVAL;
+
+ idx = idg_nvm_get_region(nvm, from);
+
+ dev_dbg(&mtd->dev, "reading region[%d] %s from %lld len %zd\n",
+ nvm->regions[idx].id, nvm->regions[idx].name, from, len);
+
+ if (idx >= nvm->nregions) {
+ dev_err(&mtd->dev, "out of range");
+ return -ERANGE;
+ }
+
+ from -= nvm->regions[idx].offset;
+ region = nvm->regions[idx].id;
+ if (len > nvm->regions[idx].size - from)
+ len = nvm->regions[idx].size - from;
+
+ guard(mutex)(&nvm->lock);
+
+ ret = idg_read(nvm, region, from, len, buf);
+ if (ret < 0) {
+ dev_dbg(&mtd->dev, "read failed with %zd\n", ret);
+ return ret;
+ }
+
+ *retlen = ret;
+
+ return 0;
+}
+
+static int intel_dg_mtd_write(struct mtd_info *mtd, loff_t to, size_t len,
+ size_t *retlen, const u_char *buf)
+{
+ struct intel_dg_nvm *nvm = mtd->priv;
+ unsigned int idx;
+ ssize_t ret;
+ u8 region;
+
+ if (WARN_ON(!nvm))
+ return -EINVAL;
+
+ idx = idg_nvm_get_region(nvm, to);
+
+ dev_dbg(&mtd->dev, "writing region[%d] %s to %lld len %zd\n",
+ nvm->regions[idx].id, nvm->regions[idx].name, to, len);
+
+ if (idx >= nvm->nregions) {
+ dev_err(&mtd->dev, "out of range");
+ return -ERANGE;
+ }
+
+ to -= nvm->regions[idx].offset;
+ region = nvm->regions[idx].id;
+ if (len > nvm->regions[idx].size - to)
+ len = nvm->regions[idx].size - to;
+
+ guard(mutex)(&nvm->lock);
+
+ ret = idg_write(nvm, region, to, len, buf);
+ if (ret < 0) {
+ dev_dbg(&mtd->dev, "write failed with %zd\n", ret);
+ return ret;
+ }
+
+ *retlen = ret;
+
+ return 0;
+}
+
static void intel_dg_nvm_release(struct kref *kref)
{
struct intel_dg_nvm *nvm = container_of(kref, struct intel_dg_nvm, refcnt);
@@ -430,9 +572,78 @@ static void intel_dg_nvm_release(struct kref *kref)
pr_debug("freeing intel_dg nvm\n");
for (i = 0; i < nvm->nregions; i++)
kfree(nvm->regions[i].name);
+ mutex_destroy(&nvm->lock);
kfree(nvm);
}
+static int intel_dg_mtd_get_device(struct mtd_info *mtd)
+{
+ struct mtd_info *master = mtd_get_master(mtd);
+ struct intel_dg_nvm *nvm = master->priv;
+
+ if (WARN_ON(!nvm))
+ return -EINVAL;
+ pr_debug("get mtd %s %d\n", mtd->name, kref_read(&nvm->refcnt));
+ kref_get(&nvm->refcnt);
+
+ return 0;
+}
+
+static void intel_dg_mtd_put_device(struct mtd_info *mtd)
+{
+ struct mtd_info *master = mtd_get_master(mtd);
+ struct intel_dg_nvm *nvm = master->priv;
+
+ if (WARN_ON(!nvm))
+ return;
+ pr_debug("put mtd %s %d\n", mtd->name, kref_read(&nvm->refcnt));
+ kref_put(&nvm->refcnt, intel_dg_nvm_release);
+}
+
+static int intel_dg_nvm_init_mtd(struct intel_dg_nvm *nvm, struct device *device,
+ unsigned int nparts, bool writable_override)
+{
+ struct mtd_partition *parts = NULL;
+ unsigned int i, n;
+ int ret;
+
+ dev_dbg(device, "registering with mtd\n");
+
+ nvm->mtd.owner = THIS_MODULE;
+ nvm->mtd.dev.parent = device;
+ nvm->mtd.flags = MTD_CAP_NORFLASH;
+ nvm->mtd.type = MTD_DATAFLASH;
+ nvm->mtd.priv = nvm;
+ nvm->mtd._write = intel_dg_mtd_write;
+ nvm->mtd._read = intel_dg_mtd_read;
+ nvm->mtd._erase = intel_dg_mtd_erase;
+ nvm->mtd._get_device = intel_dg_mtd_get_device;
+ nvm->mtd._put_device = intel_dg_mtd_put_device;
+ nvm->mtd.writesize = SZ_1; /* 1 byte granularity */
+ nvm->mtd.erasesize = SZ_4K; /* 4K bytes granularity */
+ nvm->mtd.size = nvm->size;
+
+ parts = kcalloc(nvm->nregions, sizeof(*parts), GFP_KERNEL);
+ if (!parts)
+ return -ENOMEM;
+
+ for (i = 0, n = 0; i < nvm->nregions && n < nparts; i++) {
+ if (!nvm->regions[i].is_readable)
+ continue;
+ parts[n].name = nvm->regions[i].name;
+ parts[n].offset = nvm->regions[i].offset;
+ parts[n].size = nvm->regions[i].size;
+ if (!nvm->regions[i].is_writable && !writable_override)
+ parts[n].mask_flags = MTD_WRITEABLE;
+ n++;
+ }
+
+ ret = mtd_device_register(&nvm->mtd, parts, n);
+
+ kfree(parts);
+ return ret;
+}
+
static int intel_dg_mtd_probe(struct auxiliary_device *aux_dev,
const struct auxiliary_device_id *aux_dev_id)
{
@@ -461,6 +672,7 @@ static int intel_dg_mtd_probe(struct auxiliary_device *aux_dev,
return -ENOMEM;
kref_init(&nvm->refcnt);
+ mutex_init(&nvm->lock);
for (n = 0, i = 0; i < INTEL_DG_NVM_REGIONS; i++) {
if (!invm->regions[i].name)
@@ -488,6 +700,12 @@ static int intel_dg_mtd_probe(struct auxiliary_device *aux_dev,
goto err;
}
+ ret = intel_dg_nvm_init_mtd(nvm, device, ret, invm->writable_override);
+ if (ret) {
+ dev_err(device, "failed init mtd %d\n", ret);
+ goto err;
+ }
+
dev_set_drvdata(&aux_dev->dev, nvm);
return 0;
@@ -504,6 +722,8 @@ static void intel_dg_mtd_remove(struct auxiliary_device *aux_dev)
if (!nvm)
return;
+ mtd_device_unregister(&nvm->mtd);
+
dev_set_drvdata(&aux_dev->dev, NULL);
kref_put(&nvm->refcnt, intel_dg_nvm_release);
--
2.43.0
Return-Path: <linux-kernel+bounces-665598-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 6028441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:07:30 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id A22914E535A
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:07:22 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 3819F28935C;
Wed, 28 May 2025 14:05:56 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="V1Vg0RUA"
Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6939228A71A
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:05:53 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.13
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441155; cv=none; b=hn6I6PJBbDv+nAff/2YGkknOdWjzGVq2uYx0TbQ+sPCGuZDx4wP6DS3ohglx4WyLe0GdIu40pU55V+m7V5DVUku2QSZcDk+EUwOc0YrUE9c0yroCCMx9uf0mlKupINQL7iwmU5pEL5fZWl5JwHjjtnm65a/Rk9FMtWiPmiCwVGg=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441155; c=relaxed/simple;
bh=dwgUQc5Nfwk6m4k6OFonRzkMBcsQnk6U+Nke7KShjnk=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=Ae0c5gSrzFQ1T8nWBD6x0yzhGrIXiZcV9Uz3/O8tFkXavWpnmv7uDni7F9bcKydm4qmK09tQCZPOJbVm8OuOrihYQqNAkd1L3GrBw28EEtu53tazOaXlj0e0i2DBQVFt3uKhNxdB4RvtHEtxmiimyN1zCfbBY4NFjXOTFMKSgyQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=V1Vg0RUA; arc=none smtp.client-ip=198.175.65.13
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748441154; x=1779977154;
h=from:to:cc:subject:date:message-id:in-reply-to:
references:mime-version:content-transfer-encoding;
bh=dwgUQc5Nfwk6m4k6OFonRzkMBcsQnk6U+Nke7KShjnk=;
b=V1Vg0RUAC1YDO1g04Sp4Hs7UE/UsJx3poF/l3qBPXOLFCDIc8YJI0df+
3say/EssL9itU5gGqFAL99lLOPB5eqyb8n/LGzab4PRMNED3Sn4EYMGZ8
ntu29gxWneov1Rq7Sjckugol0X1FU42T3tmTH5cDNIjaO8OSgFVHpahZx
LiL7oEdc3hNvwvErxiZ9Y2+JrOJuGjsizSqm05uHvCf+8LPrYdu+cMK/A
cpqiWfVYWGwtikALYKD+hv7OMPHzHBmBbbn7A4OqhH9r40ku5hc7rfZsm
TE4zIbLlQtQ3K9JlhClYnPYsXOTJBS1PunACHNqXqzeTy9lrtbAvr/qCk
g==;
X-CSE-ConnectionGUID: 5rFfLM4xRp+5DOMLi8QjDQ==
X-CSE-MsgGUID: gTYKY/77QtyP2NvEzVQaQA==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="61525138"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="61525138"
Received: from fmviesa007.fm.intel.com ([10.60.135.147])
by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:53 -0700
X-CSE-ConnectionGUID: /9XkjIXXReKQi7rzjfdVdg==
X-CSE-MsgGUID: TO+JuOyeTdmnn3iSq6QfMg==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="143239123"
Received: from sannilnx-dsk.jer.intel.com ([10.12.231.107])
by fmviesa007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:48 -0700
From: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
To: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>,
Richard Weinberger <richard@xxxxxx>,
Vignesh Raghavendra <vigneshr@xxxxxx>,
Lucas De Marchi <lucas.demarchi@xxxxxxxxx>,
=?UTF-8?q?Thomas=20Hellstr=C3=B6m?= <thomas.hellstrom@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>,
Karthik Poosa <karthik.poosa@xxxxxxxxx>,
Raag Jadav <raag.jadav@xxxxxxxxx>
Cc: Reuven Abliyev <reuven.abliyev@xxxxxxxxx>,
Oren Weil <oren.jer.weil@xxxxxxxxx>,
linux-mtd@xxxxxxxxxxxxxxxxxxx,
intel-xe@xxxxxxxxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx,
intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
Subject: [PATCH v11 08/10] drm/xe/nvm: add on-die non-volatile memory device
Date: Wed, 28 May 2025 16:51:13 +0300
Message-ID: <20250528135115.2512429-9-alexander.usyskin@xxxxxxxxx>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
References: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Enable access to internal non-volatile memory on DGFX
with GSC/CSC devices via a child device.
The nvm child device is exposed via auxiliary bus.
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>
Acked-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>
Signed-off-by: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
---
drivers/gpu/drm/xe/Makefile | 1 +
drivers/gpu/drm/xe/xe_device.c | 5 ++
drivers/gpu/drm/xe/xe_device_types.h | 6 ++
drivers/gpu/drm/xe/xe_nvm.c | 107 +++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_nvm.h | 15 ++++
drivers/gpu/drm/xe/xe_pci.c | 6 ++
6 files changed, 140 insertions(+)
create mode 100644 drivers/gpu/drm/xe/xe_nvm.c
create mode 100644 drivers/gpu/drm/xe/xe_nvm.h
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index e4bf484d4121..4c51fe3520dc 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -80,6 +80,7 @@ xe-y += xe_bb.o \
xe_mmio.o \
xe_mocs.o \
xe_module.o \
+ xe_nvm.o \
xe_oa.o \
xe_observation.o \
xe_pat.o \
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index d4b6e623aa48..845b38aea692 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -46,6 +46,7 @@
#include "xe_memirq.h"
#include "xe_mmio.h"
#include "xe_module.h"
+#include "xe_nvm.h"
#include "xe_oa.h"
#include "xe_observation.h"
#include "xe_pat.h"
@@ -884,6 +885,8 @@ int xe_device_probe(struct xe_device *xe)
return err;
}
+ xe_nvm_init(xe);
+
err = xe_heci_gsc_init(xe);
if (err)
return err;
@@ -941,6 +944,8 @@ void xe_device_remove(struct xe_device *xe)
{
xe_display_unregister(xe);
+ xe_nvm_fini(xe);
+
drm_dev_unplug(&xe->drm);
xe_bo_pci_dev_remove_all(xe);
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 50b2bfa682ac..938cf1a440de 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -35,6 +35,7 @@
#include "intel_display_device.h"
#endif
+struct intel_dg_nvm_dev;
struct xe_ggtt;
struct xe_pat_ops;
struct xe_pxp;
@@ -319,6 +320,8 @@ struct xe_device {
u8 has_fan_control:1;
/** @info.has_flat_ccs: Whether flat CCS metadata is used */
u8 has_flat_ccs:1;
+ /** @info.has_gsc_nvm: Device has gsc non-volatile memory */
+ u8 has_gsc_nvm:1;
/** @info.has_heci_cscfi: device has heci cscfi */
u8 has_heci_cscfi:1;
/** @info.has_heci_gscfi: device has heci gscfi */
@@ -544,6 +547,9 @@ struct xe_device {
/** @heci_gsc: graphics security controller */
struct xe_heci_gsc heci_gsc;
+ /** @nvm: discrete graphics non-volatile memory */
+ struct intel_dg_nvm_dev *nvm;
+
/** @oa: oa observation subsystem */
struct xe_oa oa;
diff --git a/drivers/gpu/drm/xe/xe_nvm.c b/drivers/gpu/drm/xe/xe_nvm.c
new file mode 100644
index 000000000000..33ba635ce116
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_nvm.c
@@ -0,0 +1,107 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright(c) 2019-2025, Intel Corporation. All rights reserved.
+ */
+
+#include <linux/intel_dg_nvm_aux.h>
+#include <linux/pci.h>
+
+#include "xe_device_types.h"
+#include "xe_nvm.h"
+#include "xe_sriov.h"
+
+#define GEN12_GUNIT_NVM_BASE 0x00102040
+#define GEN12_GUNIT_NVM_SIZE 0x80
+#define HECI_FW_STATUS_2_NVM_ACCESS_MODE BIT(3)
+
+static const struct intel_dg_nvm_region regions[INTEL_DG_NVM_REGIONS] = {
+ [0] = { .name = "DESCRIPTOR", },
+ [2] = { .name = "GSC", },
+ [9] = { .name = "PADDING", },
+ [11] = { .name = "OptionROM", },
+ [12] = { .name = "DAM", },
+};
+
+static void xe_nvm_release_dev(struct device *dev)
+{
+}
+
+int xe_nvm_init(struct xe_device *xe)
+{
+ struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
+ struct auxiliary_device *aux_dev;
+ struct intel_dg_nvm_dev *nvm;
+ int ret;
+
+ if (!xe->info.has_gsc_nvm)
+ return 0;
+
+ /* No access to internal NVM from VFs */
+ if (IS_SRIOV_VF(xe))
+ return 0;
+
+ /* Nvm pointer should be NULL here */
+ if (WARN_ON(xe->nvm))
+ return -EFAULT;
+
+ xe->nvm = kzalloc(sizeof(*nvm), GFP_KERNEL);
+ if (!xe->nvm)
+ return -ENOMEM;
+
+ nvm = xe->nvm;
+
+ nvm->writable_override = false;
+ nvm->bar.parent = &pdev->resource[0];
+ nvm->bar.start = GEN12_GUNIT_NVM_BASE + pdev->resource[0].start;
+ nvm->bar.end = nvm->bar.start + GEN12_GUNIT_NVM_SIZE - 1;
+ nvm->bar.flags = IORESOURCE_MEM;
+ nvm->bar.desc = IORES_DESC_NONE;
+ nvm->regions = regions;
+
+ aux_dev = &nvm->aux_dev;
+
+ aux_dev->name = "nvm";
+ aux_dev->id = (pci_domain_nr(pdev->bus) << 16) | pci_dev_id(pdev);
+ aux_dev->dev.parent = &pdev->dev;
+ aux_dev->dev.release = xe_nvm_release_dev;
+
+ ret = auxiliary_device_init(aux_dev);
+ if (ret) {
+ drm_err(&xe->drm, "xe-nvm aux init failed %d\n", ret);
+ goto err;
+ }
+
+ ret = auxiliary_device_add(aux_dev);
+ if (ret) {
+ drm_err(&xe->drm, "xe-nvm aux add failed %d\n", ret);
+ auxiliary_device_uninit(aux_dev);
+ goto err;
+ }
+ return 0;
+
+err:
+ kfree(nvm);
+ xe->nvm = NULL;
+ return ret;
+}
+
+void xe_nvm_fini(struct xe_device *xe)
+{
+ struct intel_dg_nvm_dev *nvm = xe->nvm;
+
+ if (!xe->info.has_gsc_nvm)
+ return;
+
+ /* No access to internal NVM from VFs */
+ if (IS_SRIOV_VF(xe))
+ return;
+
+ /* Nvm pointer should not be NULL here */
+ if (WARN_ON(!nvm))
+ return;
+
+ auxiliary_device_delete(&nvm->aux_dev);
+ auxiliary_device_uninit(&nvm->aux_dev);
+ kfree(nvm);
+ xe->nvm = NULL;
+}
diff --git a/drivers/gpu/drm/xe/xe_nvm.h b/drivers/gpu/drm/xe/xe_nvm.h
new file mode 100644
index 000000000000..7f3d5f57bed0
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_nvm.h
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright(c) 2019-2025 Intel Corporation. All rights reserved.
+ */
+
+#ifndef __XE_NVM_H__
+#define __XE_NVM_H__
+
+struct xe_device;
+
+int xe_nvm_init(struct xe_device *xe);
+
+void xe_nvm_fini(struct xe_device *xe);
+
+#endif
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index b68c90910d82..6aa9850bb342 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -63,6 +63,7 @@ struct xe_device_desc {
u8 has_display:1;
u8 has_fan_control:1;
+ u8 has_gsc_nvm:1;
u8 has_heci_gscfi:1;
u8 has_heci_cscfi:1;
u8 has_llc:1;
@@ -271,6 +272,7 @@ static const struct xe_device_desc dg1_desc = {
PLATFORM(DG1),
.dma_mask_size = 39,
.has_display = true,
+ .has_gsc_nvm = 1,
.has_heci_gscfi = 1,
.require_force_probe = true,
};
@@ -282,6 +284,7 @@ static const u16 dg2_g12_ids[] = { INTEL_DG2_G12_IDS(NOP), 0 };
#define DG2_FEATURES \
DGFX_FEATURES, \
PLATFORM(DG2), \
+ .has_gsc_nvm = 1, \
.has_heci_gscfi = 1, \
.subplatforms = (const struct xe_subplatform_desc[]) { \
{ XE_SUBPLATFORM_DG2_G10, "G10", dg2_g10_ids }, \
@@ -318,6 +321,7 @@ static const __maybe_unused struct xe_device_desc pvc_desc = {
PLATFORM(PVC),
.dma_mask_size = 52,
.has_display = false,
+ .has_gsc_nvm = 1,
.has_heci_gscfi = 1,
.max_remote_tiles = 1,
.require_force_probe = true,
@@ -346,6 +350,7 @@ static const struct xe_device_desc bmg_desc = {
.dma_mask_size = 46,
.has_display = true,
.has_fan_control = true,
+ .has_gsc_nvm = 1,
.has_heci_cscfi = 1,
.needs_scratch = true,
};
@@ -589,6 +594,7 @@ static int xe_info_init_early(struct xe_device *xe,
xe->info.dma_mask_size = desc->dma_mask_size;
xe->info.is_dgfx = desc->is_dgfx;
xe->info.has_fan_control = desc->has_fan_control;
+ xe->info.has_gsc_nvm = desc->has_gsc_nvm;
xe->info.has_heci_gscfi = desc->has_heci_gscfi;
xe->info.has_heci_cscfi = desc->has_heci_cscfi;
xe->info.has_llc = desc->has_llc;
--
2.43.0
Return-Path: <linux-kernel+bounces-665596-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id AAE2F41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:07:41 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id A195C18856CB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:07:13 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 94113288CB4;
Wed, 28 May 2025 14:05:45 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="SEh7LNKk"
Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 15891288C8B
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:05:43 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.13
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441144; cv=none; b=X0EknRgKZKYi6e+oqMIqgEoeKy/YsPlo7LguAbQEU4nUBHzVPKBXNgtv7vGS2t/k6kYTmG7GRRTNQaRlDYocJW3/5XCVDN0W66gJZfPMamIAYE+UIMscD24kz2h3KTkHNqS3boT5gJHwSepN1S8Aakn1Xu+h+4TmksXL8WCHQCM=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441144; c=relaxed/simple;
bh=qJ+24LbrBZuds95I+vzHtz82YkOFfVavJUczZuOdlR4=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=BvwNVcz5ervjL+8C4f0y3RgOSFJnKsHHI0utwfdZskFBy2bNc0sTFnCdmq9nxvNCSJI8KoFV4uAgqQqsGY/uCMEeRNCRCj6lth/fMoVZj7f6Zz/V7j0xFP9y+ZrvMe8P+N9jMl9y+H0kxt+BoKUAx1LuGKP/7rITCPDHHSZ3iRk=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=SEh7LNKk; arc=none smtp.client-ip=198.175.65.13
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748441143; x=1779977143;
h=from:to:cc:subject:date:message-id:in-reply-to:
references:mime-version:content-transfer-encoding;
bh=qJ+24LbrBZuds95I+vzHtz82YkOFfVavJUczZuOdlR4=;
b=SEh7LNKkpbMR2wF5Jq2iYafhKF1YFL9tkS6N+ILJgMhyLiLgi2YQzoW3
khPIQz/UQ1Wk0RsX0Sy0/FjXTN/QEc1kFcC6+asiz1d8Irmmuc4ldmY3J
0vgGgGvnyIS+SYd6tDcNEPCGak2w2YUj4Oav6adwzknzIRS22XgloI29R
DC9jUpc/MY//z7fDBIBtPXTgTY8/Xk48LaA/pav1DSsfSEMWkNqT1Lh7N
22SiR+//kNeKWtB9ayNZhr3uxOHtE8zBKoHt8Nx01l3AxjbW7hAbHhcYh
VtS0GzUX99ZB34MGtUaz1sl5YynWbTPFiqUDtsEn54Dzh6VVMHQD40xNa
w==;
X-CSE-ConnectionGUID: XU2vZ5NqTlWn9+z0X8xSwg==
X-CSE-MsgGUID: r+LGPTtfRr6+vyMRtZgA3Q==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="61525111"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="61525111"
Received: from fmviesa007.fm.intel.com ([10.60.135.147])
by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:43 -0700
X-CSE-ConnectionGUID: tzwX/n3BTP29rveybZrAPA==
X-CSE-MsgGUID: byJCCZIVTfOgyqZtYvPfug==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="143239073"
Received: from sannilnx-dsk.jer.intel.com ([10.12.231.107])
by fmviesa007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:37 -0700
From: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
To: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>,
Richard Weinberger <richard@xxxxxx>,
Vignesh Raghavendra <vigneshr@xxxxxx>,
Lucas De Marchi <lucas.demarchi@xxxxxxxxx>,
=?UTF-8?q?Thomas=20Hellstr=C3=B6m?= <thomas.hellstrom@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>,
Karthik Poosa <karthik.poosa@xxxxxxxxx>,
Raag Jadav <raag.jadav@xxxxxxxxx>
Cc: Reuven Abliyev <reuven.abliyev@xxxxxxxxx>,
Oren Weil <oren.jer.weil@xxxxxxxxx>,
linux-mtd@xxxxxxxxxxxxxxxxxxx,
intel-xe@xxxxxxxxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx,
intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Alexander Usyskin <alexander.usyskin@xxxxxxxxx>,
Tomas Winkler <tomasw@xxxxxxxxx>
Subject: [PATCH v11 06/10] drm/i915/nvm: add nvm device for discrete graphics
Date: Wed, 28 May 2025 16:51:11 +0300
Message-ID: <20250528135115.2512429-7-alexander.usyskin@xxxxxxxxx>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
References: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Enable access to internal non-volatile memory on
DGFX devices via a child device.
The nvm child device is exposed via auxiliary bus.
CC: Lucas De Marchi <lucas.demarchi@xxxxxxxxx>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>
Acked-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>
Co-developed-by: Tomas Winkler <tomasw@xxxxxxxxx>
Signed-off-by: Tomas Winkler <tomasw@xxxxxxxxx>
Signed-off-by: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
---
drivers/gpu/drm/i915/Makefile | 4 ++
drivers/gpu/drm/i915/i915_driver.c | 6 ++
drivers/gpu/drm/i915/i915_drv.h | 3 +
drivers/gpu/drm/i915/i915_reg.h | 1 +
drivers/gpu/drm/i915/intel_nvm.c | 98 ++++++++++++++++++++++++++++++
drivers/gpu/drm/i915/intel_nvm.h | 15 +++++
6 files changed, 127 insertions(+)
create mode 100644 drivers/gpu/drm/i915/intel_nvm.c
create mode 100644 drivers/gpu/drm/i915/intel_nvm.h
diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index 1a90eb1f180a..2e0fa85491a8 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -212,6 +212,10 @@ i915-y += \
i915-y += \
gt/intel_gsc.o
+# graphics nvm device (DGFX) support
+i915-y += \
+ intel_nvm.o
+
# graphics hardware monitoring (HWMON) support
i915-$(CONFIG_HWMON) += \
i915_hwmon.o
diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
index 2b0bcb9aa3c7..c7ab0352d31d 100644
--- a/drivers/gpu/drm/i915/i915_driver.c
+++ b/drivers/gpu/drm/i915/i915_driver.c
@@ -82,6 +82,8 @@
#include "soc/intel_dram.h"
#include "soc/intel_gmch.h"
+#include "intel_nvm.h"
+
#include "i915_debugfs.h"
#include "i915_driver.h"
#include "i915_drm_client.h"
@@ -646,6 +648,8 @@ static int i915_driver_register(struct drm_i915_private *dev_priv)
/* Depends on sysfs having been initialized */
i915_perf_register(dev_priv);
+ intel_nvm_init(dev_priv);
+
for_each_gt(gt, dev_priv, i)
intel_gt_driver_register(gt);
@@ -688,6 +692,8 @@ static void i915_driver_unregister(struct drm_i915_private *dev_priv)
i915_hwmon_unregister(dev_priv);
+ intel_nvm_fini(dev_priv);
+
i915_perf_unregister(dev_priv);
i915_pmu_unregister(dev_priv);
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 93b4c504b710..1212117d07ef 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -65,6 +65,7 @@
struct drm_i915_clock_gating_funcs;
struct vlv_s0ix_state;
struct intel_pxp;
+struct intel_dg_nvm_dev;
#define GEM_QUIRK_PIN_SWIZZLED_PAGES BIT(0)
@@ -310,6 +311,8 @@ struct drm_i915_private {
struct i915_perf perf;
+ struct intel_dg_nvm_dev *nvm;
+
struct i915_hwmon *hwmon;
struct intel_gt *gt[I915_MAX_GT];
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 2e4190da3e0d..7f538ef3cbb5 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -321,6 +321,7 @@
#define DG2_GSC_HECI2_BASE 0x00374000
#define MTL_GSC_HECI1_BASE 0x00116000
#define MTL_GSC_HECI2_BASE 0x00117000
+#define GEN12_GUNIT_NVM_BASE 0x00102040
#define HECI_H_CSR(base) _MMIO((base) + 0x4)
#define HECI_H_CSR_IE REG_BIT(0)
diff --git a/drivers/gpu/drm/i915/intel_nvm.c b/drivers/gpu/drm/i915/intel_nvm.c
new file mode 100644
index 000000000000..ae7f9f2c01bf
--- /dev/null
+++ b/drivers/gpu/drm/i915/intel_nvm.c
@@ -0,0 +1,98 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright(c) 2019-2024, Intel Corporation. All rights reserved.
+ */
+
+#include <linux/intel_dg_nvm_aux.h>
+#include <linux/irq.h>
+#include <linux/pci.h>
+#include "i915_reg.h"
+#include "i915_drv.h"
+#include "intel_nvm.h"
+
+#define GEN12_GUNIT_NVM_SIZE 0x80
+
+static const struct intel_dg_nvm_region regions[INTEL_DG_NVM_REGIONS] = {
+ [0] = { .name = "DESCRIPTOR", },
+ [2] = { .name = "GSC", },
+ [11] = { .name = "OptionROM", },
+ [12] = { .name = "DAM", },
+};
+
+static void i915_nvm_release_dev(struct device *dev)
+{
+}
+
+int intel_nvm_init(struct drm_i915_private *i915)
+{
+ struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
+ struct auxiliary_device *aux_dev;
+ struct intel_dg_nvm_dev *nvm;
+ int ret;
+
+ /* Only the DGFX devices have internal NVM */
+ if (!IS_DGFX(i915))
+ return 0;
+
+ /* Nvm pointer should be NULL here */
+ if (WARN_ON(i915->nvm))
+ return -EFAULT;
+
+ i915->nvm = kzalloc(sizeof(*nvm), GFP_KERNEL);
+ if (!i915->nvm)
+ return -ENOMEM;
+
+ nvm = i915->nvm;
+
+ nvm->writable_override = true;
+ nvm->bar.parent = &pdev->resource[0];
+ nvm->bar.start = GEN12_GUNIT_NVM_BASE + pdev->resource[0].start;
+ nvm->bar.end = nvm->bar.start + GEN12_GUNIT_NVM_SIZE - 1;
+ nvm->bar.flags = IORESOURCE_MEM;
+ nvm->bar.desc = IORES_DESC_NONE;
+ nvm->regions = regions;
+
+ aux_dev = &nvm->aux_dev;
+
+ aux_dev->name = "nvm";
+ aux_dev->id = (pci_domain_nr(pdev->bus) << 16) | pci_dev_id(pdev);
+ aux_dev->dev.parent = &pdev->dev;
+ aux_dev->dev.release = i915_nvm_release_dev;
+
+ ret = auxiliary_device_init(aux_dev);
+ if (ret) {
+ drm_err(&i915->drm, "i915-nvm aux init failed %d\n", ret);
+ goto err;
+ }
+
+ ret = auxiliary_device_add(aux_dev);
+ if (ret) {
+ drm_err(&i915->drm, "i915-nvm aux add failed %d\n", ret);
+ auxiliary_device_uninit(aux_dev);
+ goto err;
+ }
+ return 0;
+
+err:
+ kfree(nvm);
+ i915->nvm = NULL;
+ return ret;
+}
+
+void intel_nvm_fini(struct drm_i915_private *i915)
+{
+ struct intel_dg_nvm_dev *nvm = i915->nvm;
+
+ /* Only the DGFX devices have internal NVM */
+ if (!IS_DGFX(i915))
+ return;
+
+ /* Nvm pointer should not be NULL here */
+ if (WARN_ON(!nvm))
+ return;
+
+ auxiliary_device_delete(&nvm->aux_dev);
+ auxiliary_device_uninit(&nvm->aux_dev);
+ kfree(nvm);
+ i915->nvm = NULL;
+}
diff --git a/drivers/gpu/drm/i915/intel_nvm.h b/drivers/gpu/drm/i915/intel_nvm.h
new file mode 100644
index 000000000000..a9e4046b830f
--- /dev/null
+++ b/drivers/gpu/drm/i915/intel_nvm.h
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright(c) 2019-2024 Intel Corporation. All rights reserved.
+ */
+
+#ifndef __INTEL_NVM_H__
+#define __INTEL_NVM_H__
+
+struct drm_i915_private;
+
+int intel_nvm_init(struct drm_i915_private *i915);
+
+void intel_nvm_fini(struct drm_i915_private *i915);
+
+#endif /* __INTEL_NVM_H__ */
--
2.43.0
Return-Path: <linux-kernel+bounces-665597-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 7CD3441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:07:53 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 14AAB3BD38F
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:06:49 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 44541289344;
Wed, 28 May 2025 14:05:51 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="islx2qSV"
Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id D5AC028A70C
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:05:48 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.13
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441150; cv=none; b=A1CxR1iUalyAVQHYwNKGnoCbLZGMpiGfENJbifxzLsdK6uMT9Zoj5dFDkFhrg3/GQ3AVZsFUzgDeSXPSMUASHkQdZE5X+JdR7UCZHSP09czAD6TzeoOu1z7zuXmXWBEiRffCfS/l52uy96GhT/KLRSYA2mOPxc7QnkFHzqTZBsc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441150; c=relaxed/simple;
bh=brHnIOdScb0KxCyYh6StjKNndkZEaHPzreNgxMkxZxU=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=QyQzTL9JTCO+EIuNaRfL7X0GCg3Lj6KVij/90vjnhsnQMXy51do/XqoEjEgTJNWnzcU8igfcLl3+lME1SexWyVEinWOxtAAykin73xWBIHbQslCguQmWlom8yCjgUbvCgTB3jtanPsrxxYXvWSz63er/fvDrhj8VmUeGmMZTn2s=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=islx2qSV; arc=none smtp.client-ip=198.175.65.13
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748441149; x=1779977149;
h=from:to:cc:subject:date:message-id:in-reply-to:
references:mime-version:content-transfer-encoding;
bh=brHnIOdScb0KxCyYh6StjKNndkZEaHPzreNgxMkxZxU=;
b=islx2qSVno8YcvcRs54gjUr2Cis2TjQq8e2T1K3Ni7hGIA3gV2tu68BV
T5FwYRXeboNC1WrdXuQ3dy0mrW8U+HINXC8Fp0TRinmKBpuGPV6mK4xLM
T2xMe4677Sqdt2EHtdeF9/7UOhrIlB5UOEfZvu4PzMUG0LZ78yJ4e4QEY
Bs/h9SZHu4B2956O6N+/hcrfwcipLHUGoukKkoY1kgpV7vcWB+GaQz85l
pAZQQkJdHrEuqxM0RVE7WI6c+dLq+VRa1eRZ6o/rtXShJEMquHKjjchh8
6oNR8PEIvOn4/kLvtr7KXYBAUYkbMxi06br6g4GLFRXis+j/djDkzG8WY
w==;
X-CSE-ConnectionGUID: UqM9+zbLQTaOy+4YhKurwQ==
X-CSE-MsgGUID: /cm7mwk/TxmrEc7QBBqU+w==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="61525118"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="61525118"
Received: from fmviesa007.fm.intel.com ([10.60.135.147])
by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:49 -0700
X-CSE-ConnectionGUID: kpI1v/bwQx6zKE3xrzpgNQ==
X-CSE-MsgGUID: D/YINYFmRDW52AGrLXEWBQ==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="143239097"
Received: from sannilnx-dsk.jer.intel.com ([10.12.231.107])
by fmviesa007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:42 -0700
From: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
To: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>,
Richard Weinberger <richard@xxxxxx>,
Vignesh Raghavendra <vigneshr@xxxxxx>,
Lucas De Marchi <lucas.demarchi@xxxxxxxxx>,
=?UTF-8?q?Thomas=20Hellstr=C3=B6m?= <thomas.hellstrom@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>,
Karthik Poosa <karthik.poosa@xxxxxxxxx>,
Raag Jadav <raag.jadav@xxxxxxxxx>
Cc: Reuven Abliyev <reuven.abliyev@xxxxxxxxx>,
Oren Weil <oren.jer.weil@xxxxxxxxx>,
linux-mtd@xxxxxxxxxxxxxxxxxxx,
intel-xe@xxxxxxxxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx,
intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
Subject: [PATCH v11 07/10] drm/i915/nvm: add support for access mode
Date: Wed, 28 May 2025 16:51:12 +0300
Message-ID: <20250528135115.2512429-8-alexander.usyskin@xxxxxxxxx>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
References: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Check NVM access mode from GSC FW status registers
and overwrite access status read from SPI descriptor, if needed.
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>
Acked-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>
Signed-off-by: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
---
drivers/gpu/drm/i915/intel_nvm.c | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/intel_nvm.c b/drivers/gpu/drm/i915/intel_nvm.c
index ae7f9f2c01bf..4624cba26fa7 100644
--- a/drivers/gpu/drm/i915/intel_nvm.c
+++ b/drivers/gpu/drm/i915/intel_nvm.c
@@ -11,6 +11,7 @@
#include "intel_nvm.h"
#define GEN12_GUNIT_NVM_SIZE 0x80
+#define HECI_FW_STATUS_2_NVM_ACCESS_MODE BIT(3)
static const struct intel_dg_nvm_region regions[INTEL_DG_NVM_REGIONS] = {
[0] = { .name = "DESCRIPTOR", },
@@ -23,6 +24,28 @@ static void i915_nvm_release_dev(struct device *dev)
{
}
+static bool i915_nvm_writable_override(struct drm_i915_private *i915)
+{
+ bool writable_override;
+ resource_size_t base;
+
+ if (IS_DG1(i915)) {
+ base = DG1_GSC_HECI2_BASE;
+ } else if (IS_DG2(i915)) {
+ base = DG2_GSC_HECI2_BASE;
+ } else {
+ drm_err(&i915->drm, "Unknown platform\n");
+ return true;
+ }
+
+ writable_override =
+ !(intel_uncore_read(&i915->uncore, HECI_FWSTS(base, 2)) &
+ HECI_FW_STATUS_2_NVM_ACCESS_MODE);
+ if (writable_override)
+ drm_info(&i915->drm, "NVM access overridden by jumper\n");
+ return writable_override;
+}
+
int intel_nvm_init(struct drm_i915_private *i915)
{
struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
@@ -44,7 +67,7 @@ int intel_nvm_init(struct drm_i915_private *i915)
nvm = i915->nvm;
- nvm->writable_override = true;
+ nvm->writable_override = i915_nvm_writable_override(i915);
nvm->bar.parent = &pdev->resource[0];
nvm->bar.start = GEN12_GUNIT_NVM_BASE + pdev->resource[0].start;
nvm->bar.end = nvm->bar.start + GEN12_GUNIT_NVM_SIZE - 1;
--
2.43.0
Return-Path: <linux-kernel+bounces-665599-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 36DF741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:08:28 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 290799E589F
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:07:12 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 63E1828AAE7;
Wed, 28 May 2025 14:06:01 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="IPx63CV8"
Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id F168528A735
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:05:58 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.13
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441160; cv=none; b=oVjyfWHNt1rBVc1RU1xpPWVogPqkrsyVj+PbToAncyOJfrVQ418KF4DHfp5CCzrSZKRZFPFn4+Jrvp76kEWq9/PHQJ2GdavXm4CwxF1W6bFIYQ8oa9jXVXELHI+tvsagag/vr4/3zPdV/uBSBhHXgJ88OhiQNzoNH8QbMOxqA+g=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441160; c=relaxed/simple;
bh=luOze6g0PP5F5pCLOK5jBaa2umhqnsfnayAFqvQ9H4M=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=UfELq5JOz99owFF6oSe8Sov9zzw3vG+OBomkn6lLJhYwBEWAF8vTbWC2EkjWvI3v0PnDqAt1M+wYSUdGv9InMgjNta5aa7oSgaBcPLEMuCO4kf7qUxYV012nYPVgsCKcoT5qTMVtyxFJtHyUR9XxfCrQRqgIyGUhF02UzCfRmkg=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=IPx63CV8; arc=none smtp.client-ip=198.175.65.13
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748441159; x=1779977159;
h=from:to:cc:subject:date:message-id:in-reply-to:
references:mime-version:content-transfer-encoding;
bh=luOze6g0PP5F5pCLOK5jBaa2umhqnsfnayAFqvQ9H4M=;
b=IPx63CV8KTHnInz3r+h7NlonDcl5qvy+gG/opHSZZ9HdIhyY3q5Ic9Zx
k1b2+2dV2qEU6x4u4LxJZu3Fhddz672IM5krlAtiexsTAUh6e9fi0TH+n
76CHpMASaW2FkseJHSmRouTqf+KQsaZ6gQsoHVXVnNBREsgQeih+75epI
SLqqaPGZw8LtoRci+LI8mPa7CdLGyaXJltDmVG3FbVjAw3cuiFsaQrg3z
DOw8SlpGwAlshlk+/e+HljsLfd+hmWAhdAyDKt3rAUcDGTnknT1oaWWHn
sVN+z7jhEw1Kqwe0gJiVlWGot8mlSHdo+fjYUhxohDSLW03XhFBs6EcXy
w==;
X-CSE-ConnectionGUID: ouKPnr2vRsOasnHfYFvBTQ==
X-CSE-MsgGUID: ylJIR3eWQ2+DOipc+CVSBA==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="61525159"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="61525159"
Received: from fmviesa007.fm.intel.com ([10.60.135.147])
by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:59 -0700
X-CSE-ConnectionGUID: mgVxrcfnQM6GGEThWBtUMA==
X-CSE-MsgGUID: 2w3uEq3qRkm6nkCiUod65A==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="143239149"
Received: from sannilnx-dsk.jer.intel.com ([10.12.231.107])
by fmviesa007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:53 -0700
From: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
To: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>,
Richard Weinberger <richard@xxxxxx>,
Vignesh Raghavendra <vigneshr@xxxxxx>,
Lucas De Marchi <lucas.demarchi@xxxxxxxxx>,
=?UTF-8?q?Thomas=20Hellstr=C3=B6m?= <thomas.hellstrom@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>,
Karthik Poosa <karthik.poosa@xxxxxxxxx>,
Raag Jadav <raag.jadav@xxxxxxxxx>
Cc: Reuven Abliyev <reuven.abliyev@xxxxxxxxx>,
Oren Weil <oren.jer.weil@xxxxxxxxx>,
linux-mtd@xxxxxxxxxxxxxxxxxxx,
intel-xe@xxxxxxxxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx,
intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
Subject: [PATCH v11 09/10] drm/xe/nvm: add support for access mode
Date: Wed, 28 May 2025 16:51:14 +0300
Message-ID: <20250528135115.2512429-10-alexander.usyskin@xxxxxxxxx>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
References: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Check NVM access mode from GSC FW status registers
and overwrite access status read from SPI descriptor, if needed.
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>
Acked-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>
Signed-off-by: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
---
drivers/gpu/drm/xe/regs/xe_gsc_regs.h | 4 +++
drivers/gpu/drm/xe/xe_heci_gsc.c | 5 +---
drivers/gpu/drm/xe/xe_nvm.c | 37 ++++++++++++++++++++++++++-
3 files changed, 41 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/xe/regs/xe_gsc_regs.h b/drivers/gpu/drm/xe/regs/xe_gsc_regs.h
index 7702364b65f1..9b66cc972a63 100644
--- a/drivers/gpu/drm/xe/regs/xe_gsc_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_gsc_regs.h
@@ -16,6 +16,10 @@
#define MTL_GSC_HECI1_BASE 0x00116000
#define MTL_GSC_HECI2_BASE 0x00117000
+#define DG1_GSC_HECI2_BASE 0x00259000
+#define PVC_GSC_HECI2_BASE 0x00285000
+#define DG2_GSC_HECI2_BASE 0x00374000
+
#define HECI_H_CSR(base) XE_REG((base) + 0x4)
#define HECI_H_CSR_IE REG_BIT(0)
#define HECI_H_CSR_IS REG_BIT(1)
diff --git a/drivers/gpu/drm/xe/xe_heci_gsc.c b/drivers/gpu/drm/xe/xe_heci_gsc.c
index 27d11e06a82b..6d7b62724126 100644
--- a/drivers/gpu/drm/xe/xe_heci_gsc.c
+++ b/drivers/gpu/drm/xe/xe_heci_gsc.c
@@ -11,15 +11,12 @@
#include "xe_device_types.h"
#include "xe_drv.h"
#include "xe_heci_gsc.h"
+#include "regs/xe_gsc_regs.h"
#include "xe_platform_types.h"
#include "xe_survivability_mode.h"
#define GSC_BAR_LENGTH 0x00000FFC
-#define DG1_GSC_HECI2_BASE 0x259000
-#define PVC_GSC_HECI2_BASE 0x285000
-#define DG2_GSC_HECI2_BASE 0x374000
-
static void heci_gsc_irq_mask(struct irq_data *d)
{
/* generic irq handling */
diff --git a/drivers/gpu/drm/xe/xe_nvm.c b/drivers/gpu/drm/xe/xe_nvm.c
index 33ba635ce116..20aa3b5d3637 100644
--- a/drivers/gpu/drm/xe/xe_nvm.c
+++ b/drivers/gpu/drm/xe/xe_nvm.c
@@ -6,8 +6,11 @@
#include <linux/intel_dg_nvm_aux.h>
#include <linux/pci.h>
+#include "xe_device.h"
#include "xe_device_types.h"
+#include "xe_mmio.h"
#include "xe_nvm.h"
+#include "regs/xe_gsc_regs.h"
#include "xe_sriov.h"
#define GEN12_GUNIT_NVM_BASE 0x00102040
@@ -26,6 +29,38 @@ static void xe_nvm_release_dev(struct device *dev)
{
}
+static bool xe_nvm_writable_override(struct xe_device *xe)
+{
+ struct xe_gt *gt = xe_root_mmio_gt(xe);
+ bool writable_override;
+ resource_size_t base;
+
+ switch (xe->info.platform) {
+ case XE_BATTLEMAGE:
+ base = DG2_GSC_HECI2_BASE;
+ break;
+ case XE_PVC:
+ base = PVC_GSC_HECI2_BASE;
+ break;
+ case XE_DG2:
+ base = DG2_GSC_HECI2_BASE;
+ break;
+ case XE_DG1:
+ base = DG1_GSC_HECI2_BASE;
+ break;
+ default:
+ drm_err(&xe->drm, "Unknown platform\n");
+ return true;
+ }
+
+ writable_override =
+ !(xe_mmio_read32(>->mmio, HECI_FWSTS2(base)) &
+ HECI_FW_STATUS_2_NVM_ACCESS_MODE);
+ if (writable_override)
+ drm_info(&xe->drm, "NVM access overridden by jumper\n");
+ return writable_override;
+}
+
int xe_nvm_init(struct xe_device *xe)
{
struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
@@ -50,7 +85,7 @@ int xe_nvm_init(struct xe_device *xe)
nvm = xe->nvm;
- nvm->writable_override = false;
+ nvm->writable_override = xe_nvm_writable_override(xe);
nvm->bar.parent = &pdev->resource[0];
nvm->bar.start = GEN12_GUNIT_NVM_BASE + pdev->resource[0].start;
nvm->bar.end = nvm->bar.start + GEN12_GUNIT_NVM_SIZE - 1;
--
2.43.0
Return-Path: <linux-kernel+bounces-665600-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E54A741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:08:48 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 3A8A31C00C99
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:08:00 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 9D4A128A735;
Wed, 28 May 2025 14:06:06 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="cfol7nDS"
Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 21CB628A73B
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:06:04 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.13
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441165; cv=none; b=QLGcp6LqNJUzW4SbHGjd0iJMKe/d2S2QJQl5MPEZsNaNgpfBB/WUmY9xaMt+P5Yjmw1naoCcT7s0ebBNd+I4RLr+T0jNWunfLK+Igjt69Lwf4oHYGpy+DnU0H0C3qZEu+nAaZIYH1TlYdcUZWhS7YV1a1TSKsdcF+9zc3hT70Ws=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441165; c=relaxed/simple;
bh=fH2hdGzwTf4pZxd5L5oHs+dVIY/4d4It2eb8BdPFp3E=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=VRMgGV0h29NtLssC9galXVatJMeVell3QGjHm/6XdImJIaZm6lI5QWRlQ5SvfzkHTTFDcd135nIJC++1xGCobBfrsg+hqDExszUpAPzk5XUZupv2a9lGTfSCsD+29DSAQDVvOzl6U6v8ua8cFFhGBRcKbXmuGAGgBLyYn9xNV7A=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=cfol7nDS; arc=none smtp.client-ip=198.175.65.13
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748441164; x=1779977164;
h=from:to:cc:subject:date:message-id:in-reply-to:
references:mime-version:content-transfer-encoding;
bh=fH2hdGzwTf4pZxd5L5oHs+dVIY/4d4It2eb8BdPFp3E=;
b=cfol7nDSnzw0kKeLi9d89AMZscRbE/FZbwLrcV3dgLBj8Iby/6y0XY1E
kg60fj1RVCuqixqc1+uS2V7iQkSd+lYkie37q9sRH5Xsq2BAJ7D3+F0FD
O6bmPw8TnzJFMgpW9faGU0ZQGN5m3aGCr6Gi9JTCZJpaMQ2/fyTijX+6s
nIp4NmEE8u59h5UGfKnLjhLFojHG4eltRjAnOl79JTowSRARSGemcgsJv
XLt4Y4CZW2TVYBFhtw8dpSLgZBsa2CKhPK40bvTXDxnCVlR1UA9Z76LrQ
PCMmP90E/m3zX94VQM0bEjdupJRsfu4iH0yEtm3Fml2TPzJyLdwRM3Kfk
w==;
X-CSE-ConnectionGUID: 0iuQPSfzSvmSpzzRedy4Ig==
X-CSE-MsgGUID: k33pgiggTwy8wDiWRfXSpQ==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="61525162"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="61525162"
Received: from fmviesa007.fm.intel.com ([10.60.135.147])
by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:06:04 -0700
X-CSE-ConnectionGUID: UbkNrucWQgyX1vWN4u4AKQ==
X-CSE-MsgGUID: ttg0zycSRYq8FPm5EsLpfA==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="143239170"
Received: from sannilnx-dsk.jer.intel.com ([10.12.231.107])
by fmviesa007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:05:58 -0700
From: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
To: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>,
Richard Weinberger <richard@xxxxxx>,
Vignesh Raghavendra <vigneshr@xxxxxx>,
Lucas De Marchi <lucas.demarchi@xxxxxxxxx>,
=?UTF-8?q?Thomas=20Hellstr=C3=B6m?= <thomas.hellstrom@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>,
Karthik Poosa <karthik.poosa@xxxxxxxxx>,
Raag Jadav <raag.jadav@xxxxxxxxx>
Cc: Reuven Abliyev <reuven.abliyev@xxxxxxxxx>,
Oren Weil <oren.jer.weil@xxxxxxxxx>,
linux-mtd@xxxxxxxxxxxxxxxxxxx,
intel-xe@xxxxxxxxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx,
intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
Subject: [PATCH v11 10/10] drm/xe/nvm: add support for non-posted erase
Date: Wed, 28 May 2025 16:51:15 +0300
Message-ID: <20250528135115.2512429-11-alexander.usyskin@xxxxxxxxx>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
References: <20250528135115.2512429-1-alexander.usyskin@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Reuven Abliyev <reuven.abliyev@xxxxxxxxx>
Erase command is slow on discrete graphics storage
and may overshot PCI completion timeout.
BMG introduces the ability to have non-posted erase.
Add driver support for non-posted erase with polling
for erase completion.
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>
Acked-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>
Signed-off-by: Reuven Abliyev <reuven.abliyev@xxxxxxxxx>
Signed-off-by: Alexander Usyskin <alexander.usyskin@xxxxxxxxx>
---
drivers/gpu/drm/xe/xe_nvm.c | 25 ++++++++++++++++++
drivers/mtd/devices/mtd_intel_dg.c | 42 ++++++++++++++++++++++++++++--
include/linux/intel_dg_nvm_aux.h | 2 ++
3 files changed, 67 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_nvm.c b/drivers/gpu/drm/xe/xe_nvm.c
index 20aa3b5d3637..61b0a1531a53 100644
--- a/drivers/gpu/drm/xe/xe_nvm.c
+++ b/drivers/gpu/drm/xe/xe_nvm.c
@@ -14,7 +14,15 @@
#include "xe_sriov.h"
#define GEN12_GUNIT_NVM_BASE 0x00102040
+#define GEN12_DEBUG_NVM_BASE 0x00101018
+
+#define GEN12_CNTL_PROTECTED_NVM_REG 0x0010100C
+
#define GEN12_GUNIT_NVM_SIZE 0x80
+#define GEN12_DEBUG_NVM_SIZE 0x4
+
+#define NVM_NON_POSTED_ERASE_CHICKEN_BIT BIT(13)
+
#define HECI_FW_STATUS_2_NVM_ACCESS_MODE BIT(3)
static const struct intel_dg_nvm_region regions[INTEL_DG_NVM_REGIONS] = {
@@ -29,6 +37,16 @@ static void xe_nvm_release_dev(struct device *dev)
{
}
+static bool xe_nvm_non_posted_erase(struct xe_device *xe)
+{
+ struct xe_gt *gt = xe_root_mmio_gt(xe);
+
+ if (xe->info.platform != XE_BATTLEMAGE)
+ return false;
+ return !(xe_mmio_read32(>->mmio, XE_REG(GEN12_CNTL_PROTECTED_NVM_REG)) &
+ NVM_NON_POSTED_ERASE_CHICKEN_BIT);
+}
+
static bool xe_nvm_writable_override(struct xe_device *xe)
{
struct xe_gt *gt = xe_root_mmio_gt(xe);
@@ -86,6 +104,7 @@ int xe_nvm_init(struct xe_device *xe)
nvm = xe->nvm;
nvm->writable_override = xe_nvm_writable_override(xe);
+ nvm->non_posted_erase = xe_nvm_non_posted_erase(xe);
nvm->bar.parent = &pdev->resource[0];
nvm->bar.start = GEN12_GUNIT_NVM_BASE + pdev->resource[0].start;
nvm->bar.end = nvm->bar.start + GEN12_GUNIT_NVM_SIZE - 1;
@@ -93,6 +112,12 @@ int xe_nvm_init(struct xe_device *xe)
nvm->bar.desc = IORES_DESC_NONE;
nvm->regions = regions;
+ nvm->bar2.parent = &pdev->resource[0];
+ nvm->bar2.start = GEN12_DEBUG_NVM_BASE + pdev->resource[0].start;
+ nvm->bar2.end = nvm->bar2.start + GEN12_DEBUG_NVM_SIZE - 1;
+ nvm->bar2.flags = IORESOURCE_MEM;
+ nvm->bar2.desc = IORES_DESC_NONE;
+
aux_dev = &nvm->aux_dev;
aux_dev->name = "nvm";
diff --git a/drivers/mtd/devices/mtd_intel_dg.c b/drivers/mtd/devices/mtd_intel_dg.c
index 97e1dc1ada5d..b438ee5aacc3 100644
--- a/drivers/mtd/devices/mtd_intel_dg.c
+++ b/drivers/mtd/devices/mtd_intel_dg.c
@@ -25,6 +25,9 @@ struct intel_dg_nvm {
struct mtd_info mtd;
struct mutex lock; /* region access lock */
void __iomem *base;
+ void __iomem *base2;
+ bool non_posted_erase;
+
size_t size;
unsigned int nregions;
struct {
@@ -41,6 +44,7 @@ struct intel_dg_nvm {
#define NVM_VALSIG_REG 0x00000010
#define NVM_ADDRESS_REG 0x00000040
#define NVM_REGION_ID_REG 0x00000044
+#define NVM_DEBUG_REG 0x00000000
/*
* [15:0]-Erase size = 0x0010 4K 0x0080 32K 0x0100 64K
* [23:16]-Reserved
@@ -72,6 +76,9 @@ struct intel_dg_nvm {
#define NVM_FREG_ADDR_SHIFT 12
#define NVM_FREG_MIN_REGION_SIZE 0xFFF
+#define NVM_NON_POSTED_ERASE_DONE BIT(23)
+#define NVM_NON_POSTED_ERASE_DONE_ITER 3000
+
static inline void idg_nvm_set_region_id(struct intel_dg_nvm *nvm, u8 region)
{
iowrite32((u32)region, nvm->base + NVM_REGION_ID_REG);
@@ -373,13 +380,32 @@ static ssize_t idg_read(struct intel_dg_nvm *nvm, u8 region,
static ssize_t
idg_erase(struct intel_dg_nvm *nvm, u8 region, loff_t from, u64 len, u64 *fail_addr)
{
+ void __iomem *base2 = nvm->base2;
void __iomem *base = nvm->base;
const u32 block = 0x10;
+ u32 iter = 0;
+ u32 reg;
u64 i;
for (i = 0; i < len; i += SZ_4K) {
iowrite32(from + i, base + NVM_ADDRESS_REG);
iowrite32(region << 24 | block, base + NVM_ERASE_REG);
+ if (nvm->non_posted_erase) {
+ /* Wait for Erase Done */
+ reg = ioread32(base2 + NVM_DEBUG_REG);
+ while (!(reg & NVM_NON_POSTED_ERASE_DONE) &&
+ ++iter < NVM_NON_POSTED_ERASE_DONE_ITER) {
+ msleep(10);
+ reg = ioread32(base2 + NVM_DEBUG_REG);
+ }
+ if (reg & NVM_NON_POSTED_ERASE_DONE) {
+ /* Clear Erase Done */
+ iowrite32(reg, base2 + NVM_DEBUG_REG);
+ } else {
+ *fail_addr = from + i;
+ return -ETIME;
+ }
+ }
/* Since the writes are via sgunit
* we cannot do back to back erases.
*/
@@ -388,7 +414,8 @@ idg_erase(struct intel_dg_nvm *nvm, u8 region, loff_t from, u64 len, u64 *fail_a
return len;
}
-static int intel_dg_nvm_init(struct intel_dg_nvm *nvm, struct device *device)
+static int intel_dg_nvm_init(struct intel_dg_nvm *nvm, struct device *device,
+ bool non_posted_erase)
{
u32 access_map = 0;
unsigned int i, n;
@@ -448,7 +475,10 @@ static int intel_dg_nvm_init(struct intel_dg_nvm *nvm, struct device *device)
n++;
}
+ nvm->non_posted_erase = non_posted_erase;
+
dev_dbg(device, "Registered %d regions\n", n);
+ dev_dbg(device, "Non posted erase %d\n", nvm->non_posted_erase);
/* Need to add 1 to the amount of memory
* so it is reported as an even block
@@ -729,7 +759,15 @@ static int intel_dg_mtd_probe(struct auxiliary_device *aux_dev,
goto err;
}
- ret = intel_dg_nvm_init(nvm, device);
+ if (invm->non_posted_erase) {
+ nvm->base2 = devm_ioremap_resource(device, &invm->bar2);
+ if (IS_ERR(nvm->base2)) {
+ ret = PTR_ERR(nvm->base2);
+ goto err;
+ }
+ }
+
+ ret = intel_dg_nvm_init(nvm, device, invm->non_posted_erase);
if (ret < 0) {
dev_err(device, "cannot initialize nvm %d\n", ret);
goto err;
diff --git a/include/linux/intel_dg_nvm_aux.h b/include/linux/intel_dg_nvm_aux.h
index 00b6c1301bd8..625d46a6b96e 100644
--- a/include/linux/intel_dg_nvm_aux.h
+++ b/include/linux/intel_dg_nvm_aux.h
@@ -20,7 +20,9 @@ struct intel_dg_nvm_region {
struct intel_dg_nvm_dev {
struct auxiliary_device aux_dev;
bool writable_override;
+ bool non_posted_erase;
struct resource bar;
+ struct resource bar2;
const struct intel_dg_nvm_region *regions;
};
--
2.43.0
Return-Path: <linux-kernel+bounces-665601-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E422041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:09:10 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id CE4491883065
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:09:09 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 47E56286D42;
Wed, 28 May 2025 14:08:50 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="jje2RgIY"
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2545238FB0
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:08:47 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441329; cv=none; b=tD9gg6LH/lsCKfrwlamURUKg0CDoPpAXdCxH1q5IjWkmHH76YQtSkGcZBs5fo5fgZown3CBhyUSqA47DRpixrCg/F6KETawgPRYgzucuMBa1cULbyHMhZE1xlNlAD1THHGyDBcp6/1D6L3O34ITrMZ2k0O16AcQwqT/uuvEicuw=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441329; c=relaxed/simple;
bh=oje1uT4DfQgi/MzRvPGP49Wn11GSzin9n3V01bfKijw=;
h=From:To:Cc:In-Reply-To:References:Subject:Message-Id:Date:
MIME-Version:Content-Type; b=rqjbFz8QmcNW53YZgTuVan5aZqfovza4H0kAtgLA1KAB1RnLMkfHZ1wFvEgYmBuGrlLCRxZ8O/4yjasQGox2KIc9O+Llfg4TyKurO1Z+fM1etH8F4VW9uEp2WUA1BEDiZGf631g1Jz8Cukn1hrOIKpZBbYwe/AI8o0W4rsfDumA=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=jje2RgIY; arc=none smtp.client-ip=205.220.168.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com
Received: from pps.filterd (m0279863.ppops.net [127.0.0.1])
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S6OfRI028874
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:08:47 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=
cc:content-transfer-encoding:content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
fSFpanlCd3QG3PGIaRTOjidLhr0r0dGvANBn6D3rDi8=; b=jje2RgIY1ZeyWFUa
feaj7Cca3/ucoKI9zamf1wnCy4L3sVgCYy18VV+z9DCo7Rmfenofk9ChKw5W237r
B7XCI+I7fFDtQrfxRpvvtxR4tocjl0ZoWqMLBBLU7gLSNR4CROTOyJPfizsUTlB7
/5pQzVh5zspcCju1K8yS7ypHTQUgdby0p0B+zcWyplnjqEHhto8f1LDaNbPwsMWR
1fAcU5gxefhJJVnHuAZlNMbftFGBq3vzIn712DltgAwbhxEF1p31hRS99um1vjw9
vZe0eClZh9dvTMCDOdaPHTR1CFBVRdrdvQIniEhVFokuouwLEH0FJfQpLrpiDQ46
V5z6bg==
Received: from mail-il1-f197.google.com (mail-il1-f197.google.com [209.85.166.197])
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46whuf2tpa-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT)
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:08:47 +0000 (GMT)
Received: by mail-il1-f197.google.com with SMTP id e9e14a558f8ab-3dd7e0c7195so25137815ab.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 07:08:47 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748441314; x=1749046114;
h=content-transfer-encoding:mime-version:date:message-id:subject
:references:in-reply-to:cc:to:from:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=fSFpanlCd3QG3PGIaRTOjidLhr0r0dGvANBn6D3rDi8=;
b=uzij6fx7iuKD3o52jE6qy/vjKUDSLClFBLATid2Fs3ksA0GAlEFAtQaxYruoDzAcVl
EawDtkZLzPfXPlw52T//0J3raU9v0L1nOzu/fkjuj3N5pHS5p/IlpCZuHt/cT+pxJak7
5qlpHxjGVlr8JoLzs+IfD3EHRYsDGns/2ze7X3xt5DsXMilqb9huPjmV1Yr3Oga+9HZg
wuNQWvzQKRr2LE0CxESKpmT6QmGuchM6crnj7yZLrGqP3ax01p4EB9GHeDDQsKStwaxD
Nd6UBaOWusnJJWhkQ7NTifuCZyNB45OveTWvp3ohj/yhPO/isNrNy0wq8zhmkUe6Eq5h
ijsw==
X-Forwarded-Encrypted: i=1; AJvYcCULI/mrvAqNMjbM68A8MZabQimWqN+6lDiIUubIcH7Qd5mcozPnub5nylXhOCKsxOabeEemonN5SyZ+1Z0=@vger.kernel.org
X-Gm-Message-State: AOJu0YxzQlciUmm5QgloSH+LiIqQ/nxww3+VW34OhdohjxNry2HswBhz
AVmkTdavfqyklrF00T38wv5ZY2oFqhzuQrafx3cbEQ6RaZcppZh3DrunuI+XKtB1DWk4sBJfa7/
cOgt3DMdb58Ppwj68as0gZNU6ALysGoKqKrVCuxOKFVmV6kO8LLDQ33/LnwusIQg50/I=
X-Gm-Gg: ASbGnctvdPKm+xdBj2LZ9tSmwFaa9k7LYmJxFyCA6cogrGSiPc5erq1CFYF8aHZkkSk
4ic8LrlriSm9adYdAKYFssXRMJ0IW4ltg1xHVCNjGyZD4GTzLSHOKNzQBk4rBIWCnAshABdz0IV
kaCWuRrfCUVu3hsQx8Mc3bWqlwP0D1PHmzzv87neDdYWB87yEFRT7DAVGaP4hB5QJVxp35ftt1x
7OwhNgGbuPJEtnqB+BF7jt1rvRDNJjar501txvhutFMBEQIfnkcVicQjmZ7SDdyi52dx/4zYVzG
jfvyV9OlB9fMr1+v8lphkYtgaXPffJEQjllYynJKVfIEIoE6lNTzKBSmV+mLo4MTK60GAn6Swti
i8O6tBhqsq4qAyvsrVDX199Iz
X-Received: by 2002:a05:6e02:17c6:b0:3dc:8b57:b770 with SMTP id e9e14a558f8ab-3dc9b697450mr155527745ab.11.1748441314245;
Wed, 28 May 2025 07:08:34 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IG3/IrURGfZHuF1uVWj+6vn3B5a1R5Lj0MNa3HPhG6oLZTFAIcn0Koqx6e0QULRt+G7HCLk4g==
X-Received: by 2002:a05:6e02:17c6:b0:3dc:8b57:b770 with SMTP id e9e14a558f8ab-3dc9b697450mr155527385ab.11.1748441313824;
Wed, 28 May 2025 07:08:33 -0700 (PDT)
Received: from umbar.lan (2001-14ba-a0c3-3a00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a0c3:3a00:264b:feff:fe8b:be8a])
by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-32a79ee1ab5sm2604621fa.62.2025.05.28.07.08.32
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 07:08:33 -0700 (PDT)
From: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
To: andrzej.hajda@xxxxxxxxx, neil.armstrong@xxxxxxxxxx, rfoss@xxxxxxxxxx,
Heiko Stuebner <heiko@xxxxxxxxx>
Cc: Laurent.pinchart@xxxxxxxxxxxxxxxx, jonas@xxxxxxxxx,
jernej.skrabec@xxxxxxxxx, maarten.lankhorst@xxxxxxxxxxxxxxx,
mripard@xxxxxxxxxx, tzimmermann@xxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
In-Reply-To: <20250527225120.3361663-1-heiko@xxxxxxxxx>
References: <20250527225120.3361663-1-heiko@xxxxxxxxx>
Subject: Re: [PATCH] drm/bridge: analogix_dp: Fix clk-disable removal
Message-Id: <174844131284.307638.13863376143596559629.b4-ty@xxxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 17:08:32 +0300
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
X-Mailer: b4 0.14.2
X-Authority-Analysis: v=2.4 cv=OslPyz/t c=1 sm=1 tr=0 ts=683718ef cx=c_pps
a=5fI0PjkolUL5rJELGcJ+0g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10
a=dt9VzEwgFbYA:10 a=EUspDBNiAAAA:8 a=XtzDPwPC1q_kEnb0TJMA:9 a=QEXdDO2ut3YA:10
a=HaQ4K6lYObfyUnnIi04v:22
X-Proofpoint-ORIG-GUID: 5Zl5e0tVhDby3Z0Bdf7eyMDQ8ojBWdmU
X-Proofpoint-GUID: 5Zl5e0tVhDby3Z0Bdf7eyMDQ8ojBWdmU
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEyNCBTYWx0ZWRfXyGLOBbrlWaNV
GNXd0WqFqYY6PLQYBWJb4uETNzxwTCmbsVAVMIGUaFHMDhxsu1GqLa0P1JlwJ29XlBFwp7c1y8V
jH3aD9MwgzAmF8ySdJaa6ocr12y4F3CuNWbtHC3+qPx30NDVIu+Kxwk6f/USJ16szZsxgu/Djvj
iqTnsigUUL7dZ+sk/Wfc64IImw3FO+L2dXeMBRmV3HJ5/z6LeLo8jVrJcd61MdNPWTeHb9Ncqhz
CckqpEHkEUpiCJpcBMNUN71BnTlvGkzhR56Ogo7cCsiCRkDxBzeDwNwpUN1UcJKDUT62vlsJUVV
LUds8+JWtZiyh95arVqGMH6RwMgkf2Gg9GUGDLWRZlBiltgHkNFwOMwfOoIQuUhnLpoTsSj93cf
2yWO7lwxl8PwLhCCLskxmXSKseyZJmdfT23AnGVGrOv1cE1uso7RgMViHfNW5m3uXHNKgJzp
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_07,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
impostorscore=0 phishscore=0 mlxlogscore=790 adultscore=0 malwarescore=0
bulkscore=0 priorityscore=1501 clxscore=1015 mlxscore=0 lowpriorityscore=0
spamscore=0 suspectscore=0 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280124
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 00:51:19 +0200, Heiko Stuebner wrote:
> Commit 6579a03e68ff ("drm/bridge: analogix_dp: Remove the unnecessary
> calls to clk_disable_unprepare() during probing") removed the mismatched
> clock_disable calls from analogix_dp_probe.
>
> But that patch was created and sent before
> commit e5e9fa9f7aad ("drm/bridge: analogix_dp: Add support to get panel
> from the DP AUX bus") was merged, so couldn't know about this change.
>
> [...]
Applied to drm-misc-next-fixes, thanks!
[1/1] drm/bridge: analogix_dp: Fix clk-disable removal
commit: fd03f82a026cc03cb8051a8c6487c99f96c9029f
Best regards,
--
Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
Return-Path: <linux-kernel+bounces-665602-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 0E60A41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:09:31 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 22A5B163E89
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:09:32 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id ABA9C2882AF;
Wed, 28 May 2025 14:09:24 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="caebcaXG"
Received: from mail-lf1-f47.google.com (mail-lf1-f47.google.com [209.85.167.47])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 56ABC38FB0;
Wed, 28 May 2025 14:09:22 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.47
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441364; cv=none; b=g2ghpjxhFkoSDwbIUVQN6Luq1Ycr19maFfUCnaTPeAtlWTV39JGBVxsQbjIS9an+LN829KvjgE1JbbGwSxizAzOnr5CPC9wSW2i2p1tbyRELglyaz4nUcv5rdNQ5jVRjXSyNdLCMaozAHGix+cEyqvBJb0Y/bdHWV26izbPmzKg=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441364; c=relaxed/simple;
bh=PNNjnY8qFFr8VVPEB1+kvLJElP/RtVTkzjXbyUtYBzc=;
h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=kz/TL9qigXdrTFgzL5d8FarK111N6Fp902Bt/jRv57+ph5gcWydMezIbv8G4hICjF0ud3T2IoiuDRiQ3/FoTGG3kiH9d0NvOqL07R7drEmDqiGCGM5I+c/2UAuX7Tvm2RdvgMMDIE8Ac7Nd5P6IYU0904w1ddGovz5r7F/JL0uc=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=caebcaXG; arc=none smtp.client-ip=209.85.167.47
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-lf1-f47.google.com with SMTP id 2adb3069b0e04-553331c3dc7so611829e87.3;
Wed, 28 May 2025 07:09:21 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748441360; x=1749046160; darn=vger.kernel.org;
h=content-transfer-encoding:mime-version:message-id:date:subject:cc
:to:from:from:to:cc:subject:date:message-id:reply-to;
bh=Xde3QcEaLdUdjjxYrQVArbtAlmWgNtbJbn/lPMARRtw=;
b=caebcaXGuhB+eG9mJPMgFbZCfTtE5/FFba2klC+tR9rklzafywSR6FOQOBIWbcWSPD
LSC5rFPSLvdVmoGprnQUgRJBAICjNX3j8OhfJE/HvD/H3XFWikLxknr3EUc8ZWb9gVtw
88XyU3KNtUjTUD1v800LyhXDBK6LatyhQkSp95XLLC1xdxfWviObXXVVqyPaFJpb2oI5
Yhy/3turAmpn8WjsbmYIbYLjWgCfnUQ3p4YB1PkT5nEyR/NECn+fSokcV8hN0ZbuuEem
tFZgXXwVXDe2t6v3Sv/R6DtXCraR5l+TgLVzSDV0mddwvFVbiBCoUFhI17ZSXQyj+4jF
kiiA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748441360; x=1749046160;
h=content-transfer-encoding:mime-version:message-id:date:subject:cc
:to:from:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=Xde3QcEaLdUdjjxYrQVArbtAlmWgNtbJbn/lPMARRtw=;
b=A7SKswLLWL28Z350RlYQx34faroG+mJzjhtHEnyH182V0Yaex/ERgOhDw3V1l+0c25
4v09iOiutgrUk7uxtvnBLLYI+nMB23V9FQ7ME9Z588JVQ4l4otceb6cG0JOihsai/t9l
Jo5YOYukTXIfClupt6pnpQKZ4wLoTdZBMat2ZAslRekUoZFsx+QTNMprvR3wPEj3xG7s
hbwaUeWnoUP7WK+EKM6K/hjGWnsALijqyKyFDf2cwJLnhMIKvaB9AGIp+o95vfgFGBdu
e0BJej6JHXLP3FRDavxMTvcKU8OvuWasMoERT9Z4vp9gFNGgX5UyYBzDtTcVTFx7gYAr
oBLw==
X-Forwarded-Encrypted: i=1; AJvYcCUF4newc4GfZqwa0sH+hvommM8f3tOyjAGomz0N+UsVIbIN+0Fg49vw8mNUbLArJ10gipTDnORzBuPX@xxxxxxxxxxxxxxx, AJvYcCUVFTAsUMcOiQbqa/Gb+FIdg0WvtwJFMHHzz9r1ribY5r797nSf5CzqtbUfoDQi4DE5c4fQInAIxK/uOyYB@xxxxxxxxxxxxxxx, AJvYcCXuqmxt39eqUY8WpNwF98SBgW5t/YeQvHik0VZSHb/UkMh7Z4qDbaH4R6yiA0Co+wAvStdfXu24Sbl/@vger.kernel.org
X-Gm-Message-State: AOJu0YztyM83mkcpqHR7AetuB10klJr4a4c5zsgadZJ3zgXsGFCT+nOH
A0eeBcH3ZrGOd0QQTaFGpr/1tECfnrT84IDzmMjLlCjVRJoY0+v4o4jg
X-Gm-Gg: ASbGncuNohcu7oIuw06mFJsfW988AnqjtdaQdPZ3ARBrFA5k/IwRltsh0S7h+lzFQ+c
sPP+uNJvKliocxpCDI/p/JSEtOkXkIOtCQ8l6GyWccndWMLDgFKq5jg2OwcsFruJ9V8gEOI6wwx
JSqqRUPqH6qnbRksyO6jUc7Y1QVOJSpaaAq/zsXZyHcYclHyvCEDhhZPKn7LuBDvcnz0qhe0Chn
NmBLFJujJE+CLOV6LputeXmxTimHHCOIJzStmqfUVdQWd003uTtSWRoyuZfx02lG3u86pXIuh30
WX/VkJ6MJC/voK828OXxWxw8Lkih3I1OIv4xOLHdJYQCYbWFpkDx/ATHU0KKYO8vahTybnnMMPe
Q+Z5CH7xIJ79O8OhoHLGNgJBhxGWURAvOdA==
X-Google-Smtp-Source: AGHT+IHfnh9vdk+RemNz3ZB0OBfCZjiGqQpUV6d0Y93UkvUovkg7i/ks7VL90KlEwuCeuKiWJ5b3Qg==
X-Received: by 2002:a05:6512:1304:b0:553:3407:eee0 with SMTP id 2adb3069b0e04-5533407f3cfmr590221e87.4.1748441359957;
Wed, 28 May 2025 07:09:19 -0700 (PDT)
Received: from gmail.com (213-67-3-247-no600.tbcn.telia.com. [213.67.3.247])
by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5532f61c4b2sm298226e87.45.2025.05.28.07.09.19
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 07:09:19 -0700 (PDT)
From: "Edgar E. Iglesias" <edgar.iglesias@xxxxxxxxx>
To: mturquette@xxxxxxxxxxxx,
sboyd@xxxxxxxxxx,
robh@xxxxxxxxxx,
krzk+dt@xxxxxxxxxx,
conor+dt@xxxxxxxxxx,
jank@xxxxxxxxxxx
Cc: edgar.iglesias@xxxxxxx,
linux-clk@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
Subject: [PATCH v2 0/2] clk: fixed-mmio: Add optional ready registers
Date: Wed, 28 May 2025 16:09:15 +0200
Message-ID: <20250528140917.876453-1-edgar.iglesias@xxxxxxxxx>
X-Mailer: git-send-email 2.43.0
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: "Edgar E. Iglesias" <edgar.iglesias@xxxxxxx>
I'm not sure if this is a good idea but while doing some stuff in emulation
I had a need to wait for a fixed-mmio-clock to go ready before using
devices it drives. I figured it may be useful to have a generic way to
describe a simple polling for readiness.
Cheers,
Edgar
ChangeLog:
v1 -> v2:
* dt-binding: Add unit suffix, ready-timeout -> ready-timeout-us
* example: Remove unused label and renamed to clock@
Edgar E. Iglesias (2):
dt-bindings: clk: fixed-mmio-clock: Add optional ready reg
clk: fixed-mmio: Add optional poll for clk readiness
.../bindings/clock/fixed-mmio-clock.yaml | 37 ++++++++++++++++++-
drivers/clk/clk-fixed-mmio.c | 35 ++++++++++++++++++
2 files changed, 71 insertions(+), 1 deletion(-)
base-commit: feacb1774bd5eac6382990d0f6d1378dc01dd78f
--
2.43.0
Return-Path: <linux-kernel+bounces-665603-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 4905441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:09:51 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 1FD3C3BB001
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:09:22 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 1D1A6288C25;
Wed, 28 May 2025 14:09:28 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OEw6jAMk"
Received: from mail-lj1-f174.google.com (mail-lj1-f174.google.com [209.85.208.174])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 85BD028850D;
Wed, 28 May 2025 14:09:25 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.174
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441367; cv=none; b=cRdnYsemEbcSlPLHbvja9yMh1p2YKT2gfJ6tVhCVew3ZSOr2vIyTa4Pk+zdjbf7S2LNUiaddWk3bJZcEK9OVKHOmOy43NN0oYkQOiJXEiU2Nqt9/IeniklnkUuF/leSZoPCVyldDgyEqKbTJGind4Ye2AT/S13bvxE6D+k++rmY=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441367; c=relaxed/simple;
bh=0l7IyD1PyOaJwVzZrY+VbZbwmJfSATFaL3URmnvCnO4=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=dzC7XQhBiExKWhucuV382ASAdVlxatj/hnlSfgUTkZeJ/MPnHbPhnclUYwrryMdT3LLNcgacOJvKSTkcPG+CKoOq3dUe6xFnND9ZDCRRINgvHso7snR5Q6DLrvdxQX4uUTX4L2DmQNVIxsG6KUNiPWHvz0QfjUBRz0aZvc9vDz8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=OEw6jAMk; arc=none smtp.client-ip=209.85.208.174
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-lj1-f174.google.com with SMTP id 38308e7fff4ca-3280ce0795bso43966281fa.2;
Wed, 28 May 2025 07:09:25 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748441363; x=1749046163; darn=vger.kernel.org;
h=content-transfer-encoding:mime-version:references:in-reply-to
:message-id:date:subject:cc:to:from:from:to:cc:subject:date
:message-id:reply-to;
bh=LkQmm/gioi3gmAXZMIqfVwvbbPw33JSg0RZs+1a/uyU=;
b=OEw6jAMk26phMWaeD24klBt5ltl6zT7WrC2Au2srKKZqUWhMn23Cd4XU/K6R9Wm0QU
+Zj/o7UPrzm1p5GJT5tvgI08uX76Py45BDUP48UoXAE5zpIzQH2jloW9qtfAtQIozoo4
r4mfmmc0ZZyfNi9Sc9WXdOsfr8Qlco5N21P4ywo82sfp+UV2G/BzvAqkCx0Yc8wbpx0Y
jExeY5EVYHWpIA9zRNjG3EBcW/XINyAMVXVXwa/2wxzNusUVfyDQQ8wx4CAwunzfAgwL
Ej34ih4zdZyKCHnChPHmDUiXJihCYyJ208vvDbVS0uWv1XIoOrSPd3MY3DJV55mpehxQ
tbiQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748441363; x=1749046163;
h=content-transfer-encoding:mime-version:references:in-reply-to
:message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=LkQmm/gioi3gmAXZMIqfVwvbbPw33JSg0RZs+1a/uyU=;
b=tuJC6cJM2SXbKfLEINzmoBM0qLAKhNBWsnfM0VHjZ6S09SsvAZyyHFrdpvnnYi3DAd
FM2GzS9t6zRBQNx6KiZumypCWnLMgLKVVxv8LrBrEM88769jpDSItTer+Spa1g7EvsXR
1JYarZmTqTq9tMYTopNjrAhCNomQLeEr56HBB7GCz11aNmQxZUGNgb0JNAq+cXk16TXi
1BhHaKYIKI6a1Ve5dSf8Y2tnIoh3FjXAK9J9JN7fbeBbhDXhOSQMn7gyDAdLjJjwunWE
GQ1j9SoG11YgR2lnYP4mwqd2wvKJXwOcy+mEPTD7G+fwlmNRotm09kjLyttqNVPR7Jjy
2ALw==
X-Forwarded-Encrypted: i=1; AJvYcCURrqsTJh0jj9+vv6/642C8AIyG4VN1x6td5sSNAtmP1H9DSSBOT1QaoZsHtvZHtiCQDhC7j+z1lKRJ@xxxxxxxxxxxxxxx, AJvYcCUgkTsX1yPrm/MOuNgl1e3SYKd1/7yfIHZ0BiG/gGzFSqfpP1A4poU/xnu59+B0jR8Zze5tng45vxud@xxxxxxxxxxxxxxx, AJvYcCVAIsEKiW4pR1YfDvn9U5wETmjQBAOSpIItjHWleNqP/6xgnRnxqvq4hbqqsYOr8OCmAacKQFl4iFiGa0OR@xxxxxxxxxxxxxxx
X-Gm-Message-State: AOJu0YyQ+gEyl7ppNLWRshYWrTdJQa0LeynJkFsfNiKiB9LXmXaWwZEV
5NnUJre1d3r4bt4I8y7fTaHz3zea0s/0WRdrgNKNPQz2urJ/5b0b+BwfQ5YG8oxvhS4=
X-Gm-Gg: ASbGncvs9iJGnC90YjyaOgzPVcymxt/q9qIdABWfmNJR8Xl2AC/5Y/CZ+lI3rcwYEqL
McPknrA6rpWmAmBnPbZUHoZcSLpbrjZYy3qQ1XRqr9I+BVacEBzXZ/7IYEmJjseshnO1p/1l4XC
hEF0QiFeTM3KJ+k8xxWWaAKouWWvgYU6CUQupnxH+MWSWw/l7k745frjoY60O/W1v+B94Yuyyae
xsPzTYNwYVBytbCzQ1uER6pSYP1vvL0q/ie1bXACbQrWQ7zzpxatp7kc0LcFuOM/8Lpzs91nptH
dKkvkzp8y3Leefks8ZjgHNHxiwIA8F4vJXfpOt+wnitBPv11U/VEzb7wOsoIU0mA+96L66AECR4
jb3oR15XqGz2BoTmPCez2TIU=
X-Google-Smtp-Source: AGHT+IF97u69sZZS/R60n7jejBcfArSpYTBnl4M0lKfAJC66H6RU04HITU+/63ETFHC9psvysJoGyQ==
X-Received: by 2002:a05:651c:3123:b0:329:2135:9cb2 with SMTP id 38308e7fff4ca-32a79b831c9mr7611821fa.41.1748441362956;
Wed, 28 May 2025 07:09:22 -0700 (PDT)
Received: from gmail.com (213-67-3-247-no600.tbcn.telia.com. [213.67.3.247])
by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-32a79f698dcsm2594311fa.92.2025.05.28.07.09.20
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 07:09:20 -0700 (PDT)
From: "Edgar E. Iglesias" <edgar.iglesias@xxxxxxxxx>
To: mturquette@xxxxxxxxxxxx,
sboyd@xxxxxxxxxx,
robh@xxxxxxxxxx,
krzk+dt@xxxxxxxxxx,
conor+dt@xxxxxxxxxx,
jank@xxxxxxxxxxx
Cc: edgar.iglesias@xxxxxxx,
linux-clk@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
Subject: [PATCH v2 1/2] dt-bindings: clk: fixed-mmio-clock: Add optional ready reg
Date: Wed, 28 May 2025 16:09:16 +0200
Message-ID: <20250528140917.876453-2-edgar.iglesias@xxxxxxxxx>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250528140917.876453-1-edgar.iglesias@xxxxxxxxx>
References: <20250528140917.876453-1-edgar.iglesias@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: "Edgar E. Iglesias" <edgar.iglesias@xxxxxxx>
Add an optional ready register and properties describing bitfields
that signal when the clock is ready. This can for example be useful
to describe PLL lock bits.
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xxxxxxx>
---
.../bindings/clock/fixed-mmio-clock.yaml | 37 ++++++++++++++++++-
1 file changed, 36 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/clock/fixed-mmio-clock.yaml b/Documentation/devicetree/bindings/clock/fixed-mmio-clock.yaml
index e22fc272d023..57419b4de343 100644
--- a/Documentation/devicetree/bindings/clock/fixed-mmio-clock.yaml
+++ b/Documentation/devicetree/bindings/clock/fixed-mmio-clock.yaml
@@ -10,6 +10,11 @@ description:
This binding describes a fixed-rate clock for which the frequency can
be read from a single 32-bit memory mapped I/O register.
+ An optional ready register can be specified in a second reg entry.
+ The ready register will be polled until it signals ready prior to reading
+ the fixed rate. This is useful for example to optionally wait for a PLL
+ to lock.
+
It was designed for test systems, like FPGA, not for complete,
finished SoCs.
@@ -21,7 +26,10 @@ properties:
const: fixed-mmio-clock
reg:
- maxItems: 1
+ minItems: 1
+ items:
+ - description: Fixed rate register
+ - description: Optional clock ready register
"#clock-cells":
const: 0
@@ -29,6 +37,24 @@ properties:
clock-output-names:
maxItems: 1
+ ready-timeout-us:
+ description:
+ Optional timeout in micro-seconds when polling for clock readiness.
+ 0 means no timeout.
+ default: 0
+
+ ready-mask:
+ description:
+ Optional mask to apply when reading the ready register.
+ $ref: /schemas/types.yaml#/definitions/uint32
+ default: 0xffffffff
+
+ ready-value:
+ description:
+ When a ready register is specified in reg, poll the ready reg until
+ ready-reg & ready-mask == ready-value.
+ $ref: /schemas/types.yaml#/definitions/uint32
+
required:
- compatible
- reg
@@ -44,4 +70,13 @@ examples:
reg = <0xfd020004 0x4>;
clock-output-names = "sysclk";
};
+ - |
+ clock@fd040000 {
+ compatible = "fixed-mmio-clock";
+ #clock-cells = <0>;
+ reg = <0xfd040000 0x4 0xfd040004 0x4>;
+ ready-mask = <1>;
+ ready-value = <1>;
+ clock-output-names = "pclk";
+ };
...
--
2.43.0
Return-Path: <linux-kernel+bounces-665604-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id F10BB41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:09:52 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id C3C8F16BC28
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:09:50 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 0FFB6288C8B;
Wed, 28 May 2025 14:09:29 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LTbwWYdC"
Received: from mail-lj1-f170.google.com (mail-lj1-f170.google.com [209.85.208.170])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7BBFC288531;
Wed, 28 May 2025 14:09:26 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.170
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441368; cv=none; b=A8acNFUlGtwJrcfaPa7RbkUDVQes8ahCQ3phN6P9eaH7ZXWUFGLP8APMm16b2GGL/B4ompFbd4OUWa8iALkwPKG4z1Fer/Zx9RJMFO+KE21cfuDp+sfnWLGuLlSJO6+wJtYuSXq3dXV0BBuW7+gorcGKXWT0U60b/Qw5CsZF21I=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441368; c=relaxed/simple;
bh=7yjB8O1nptaMCAdyW34dheYmTFFgAPJt00GF5IcxxAA=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=np9CNvv+PjpNGyq6ZNChYnQqJS9xe+mWdxcq7sBQie+uyJqqWi8olo37n9zyjIHEJB/xVVCdDQZmnblJ7x1mIkVdKcnhuJAGZJnc1O8DmfG5qiuSm4ynMWnTz67ckOBOQtf18VV1WHW8gWTXCDpCmfEhN9zpHU6upI340zyfR1Y=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=LTbwWYdC; arc=none smtp.client-ip=209.85.208.170
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-lj1-f170.google.com with SMTP id 38308e7fff4ca-32a6b34acd9so19843291fa.1;
Wed, 28 May 2025 07:09:26 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748441365; x=1749046165; darn=vger.kernel.org;
h=content-transfer-encoding:mime-version:references:in-reply-to
:message-id:date:subject:cc:to:from:from:to:cc:subject:date
:message-id:reply-to;
bh=YrwViwkA5g2e7HXh/5c2XXJyUI4AHTmxngFmEUZQuds=;
b=LTbwWYdCFvgfIUqXRH0LVFyWp7aBTfTExUTE5fF2K+7EPT4GMKigTqqUdfm1yzuot/
UcMjMLZUkmQpn4JknUKFwKBlVHZVQH29l/Wz3S86nN148Zd+gQtmCFBuPumdnQCbEDjZ
1D6w/XoGRTlAL2LPTHpnRi2C9+Uw5ppz8v6kQ2PY2DJ7XV4mjypi6mZGuJydhM4uAJl7
00L9Wb6zeJ1wuwCNmLMxGE87rd2wBkP5Vc5Z1O5GDegtDpm2R0NeZeTy995p/F3vp2Ym
Gu9a4MSInLz+tNcFNT0cFpAioix0vbKj+SycqN13q5ftiKjo7W/UHcDtp62pXbXMR+Nu
l6VQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748441365; x=1749046165;
h=content-transfer-encoding:mime-version:references:in-reply-to
:message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=YrwViwkA5g2e7HXh/5c2XXJyUI4AHTmxngFmEUZQuds=;
b=BU+cTbJF7XCT7xSmobVsMA4rQQX2G9dODHZeUZuFLrVsetVNGCPl1UNbFPmjc8Fs34
amUbZsd7AGF5ByVwTkFgbOmCYA2NFYgGovLf6M/KqvGtx2r09M1ku15tQyzbnZiPs/cT
5QXpn7muDDaz2Vblzgbf7gduCkIXQMWfrS2+PI5aJv4h9IzDno2spAVTgc4nvJiKcvZn
RMrn7rmmzB+3eD4tRsE4zcZFK7ztHwiOTdouNgN3NElzJG1tyIYqiBv1tE7BecmooGDP
IG1tasgqaU/o6oOK2Ada1Zv82oVwHIMsbNEpAkWBatz8ynda1A3P9j0yAXJvMOxw5r4j
/tvA==
X-Forwarded-Encrypted: i=1; AJvYcCVzTL8fkRhwXPTOOMJU0j2ssGwCbhS0sGIIPrOQhh+qDrOLJp3FvmIv5nKfV+fUg7lsr5tqtAhII02gkcYM@xxxxxxxxxxxxxxx, AJvYcCWHdlJqWCsqO5/y40InWjkVJsoXHD3PrAzRG0fhImOpytPZ20mdvnnR3t8OuA3cJG6qM1+P26S0VS0g@xxxxxxxxxxxxxxx, AJvYcCWSsfovvbdiAc0M/QRREkhJGtR2V3xJhbAHWRLG9zR3GqTv3Ajo/OB5p46UteYE5NfoGWbr0qnoYWOA@xxxxxxxxxxxxxxx
X-Gm-Message-State: AOJu0YzeBeFeDmE0d7/IVtw/jnjqplhPEwfiD96bqLhfMDwjeK3E6nmq
4Kc/BDZuvXpvn5hVw+JSnFfiwMzLoCTNf0QZMGdEBSJ9mVvlF4dTuUom
X-Gm-Gg: ASbGncuw0/zCfX2/V5Ts/ETQH4YL3rz382a1nlaujH5wMe+AnmBuYr6KIM77TybVS38
vX2mmADKNc5XaXWFqBe/ecjo4QH2721l/VVHEdHALXqj3oNmC0jKG43gG1tFWxF0ISQjWPAevWA
nK5jBSvL9dfs5ZPwXDnL1wUO/MO1NATpVQTaI+6kqn4TSZwocAgMJbGjRkLuvdskjDV/Q4D72+u
46LdCBD5tGdJilVy7fCfUnNpDqXSWE28RXpLQnWHTR9ml8YqVvGYqUJcBR4SxUlzKrYLWKrOHFE
EBiKzMqGlJyOD4quI4iPCcYagFdQ8VwV8q7PlTPssZ7aHNeFZkx12UuHIfahhPMOCCID6ic3eC1
x/4njbY58vZqJ674cpqIsUb0=
X-Google-Smtp-Source: AGHT+IE+D40YZKOj0M6nRWuqWZuGsVn3rPHjUaIwL3IGMIhNtG8XnOqVIcyPMEvcMHIpB8Nj/U2uvQ==
X-Received: by 2002:a05:651c:b10:b0:300:26bc:4311 with SMTP id 38308e7fff4ca-3295b9e1d79mr44721701fa.18.1748441364204;
Wed, 28 May 2025 07:09:24 -0700 (PDT)
Received: from gmail.com (213-67-3-247-no600.tbcn.telia.com. [213.67.3.247])
by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-32a79e9a6cdsm2654091fa.17.2025.05.28.07.09.23
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 07:09:23 -0700 (PDT)
From: "Edgar E. Iglesias" <edgar.iglesias@xxxxxxxxx>
To: mturquette@xxxxxxxxxxxx,
sboyd@xxxxxxxxxx,
robh@xxxxxxxxxx,
krzk+dt@xxxxxxxxxx,
conor+dt@xxxxxxxxxx,
jank@xxxxxxxxxxx
Cc: edgar.iglesias@xxxxxxx,
linux-clk@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
Subject: [PATCH v2 2/2] clk: fixed-mmio: Add optional poll for clk readiness
Date: Wed, 28 May 2025 16:09:17 +0200
Message-ID: <20250528140917.876453-3-edgar.iglesias@xxxxxxxxx>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250528140917.876453-1-edgar.iglesias@xxxxxxxxx>
References: <20250528140917.876453-1-edgar.iglesias@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: "Edgar E. Iglesias" <edgar.iglesias@xxxxxxx>
Add optional poll for clk readiness prior to reading the fixed rate.
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xxxxxxx>
---
drivers/clk/clk-fixed-mmio.c | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/drivers/clk/clk-fixed-mmio.c b/drivers/clk/clk-fixed-mmio.c
index 3bfcf4cd98a2..1b764c446ce5 100644
--- a/drivers/clk/clk-fixed-mmio.c
+++ b/drivers/clk/clk-fixed-mmio.c
@@ -11,10 +11,36 @@
#include <linux/clk-provider.h>
#include <linux/io.h>
+#include <linux/iopoll.h>
#include <linux/module.h>
#include <linux/of_address.h>
#include <linux/platform_device.h>
+static int fixed_mmio_clk_wait_ready(struct device_node *node,
+ void __iomem *base)
+{
+ u32 ready_mask;
+ u32 ready_val;
+ u32 timeout;
+ u32 v;
+
+ if (of_property_read_u32(node, "ready-timeout-us", &timeout))
+ timeout = 0;
+
+ if (of_property_read_u32(node, "ready-mask", &ready_mask))
+ ready_mask = ~0;
+
+ if (of_property_read_u32(node, "ready-val", &ready_val)) {
+ pr_err("%pOFn: missing ready-val property\n", node);
+ return -EINVAL;
+ }
+
+ pr_info("%pOFn: wait for clock\n", node);
+ return readl_relaxed_poll_timeout_atomic(base, v,
+ (v & ready_mask) == ready_val,
+ 1, timeout);
+}
+
static struct clk_hw *fixed_mmio_clk_setup(struct device_node *node)
{
struct clk_hw *clk;
@@ -23,6 +49,15 @@ static struct clk_hw *fixed_mmio_clk_setup(struct device_node *node)
u32 freq;
int ret;
+ base = of_iomap(node, 1);
+ if (base) {
+ /* Wait for clk to get ready. */
+ ret = fixed_mmio_clk_wait_ready(node, base);
+ iounmap(base);
+ if (ret)
+ return ERR_PTR(ret);
+ }
+
base = of_iomap(node, 0);
if (!base) {
pr_err("%pOFn: failed to map address\n", node);
--
2.43.0
Return-Path: <linux-kernel+bounces-665605-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 489F641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:10:19 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 54C231693DB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:10:19 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 5155428850D;
Wed, 28 May 2025 14:10:10 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="MmiVGNHU"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8792827AC50;
Wed, 28 May 2025 14:10:09 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441409; cv=none; b=mKdoNDLRCgJhz8xldERMfx71esfHO++YmF1EpPteXRln80FvHVh36oTEI0F44gfvbZNCb3xcEX53abmkEQcq61S7lV2jYp0F3mFHz8dsXQsLKsGdjJW0Wt7Cy+BhtfLTclWOdIYsvMjiFVvmbyJF/bop4qXU0fqIrtbG9ssL1/g=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441409; c=relaxed/simple;
bh=tC5NUiE+rCAqZQe8ytkJqWiWbf0cJ4RmDhgSv5rmL10=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=JCnJSA8Qf9VKQWNNICDg7pnTUKeyiLVErRF8Wp8wl/uOHBRZ5oy+ME817krh3AjpDvRkXvnG+2rsvhA/Ce9QaY/5Xr7GbMo605hT1UmMSepIhUhbDINZhyKs/2ekmk6p5SCqZp6xL6QrubMhOAatpc/j5RfuPk0g2wPEAWyd2MI=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MmiVGNHU; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2E9DFC4CEE3;
Wed, 28 May 2025 14:10:08 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748441408;
bh=tC5NUiE+rCAqZQe8ytkJqWiWbf0cJ4RmDhgSv5rmL10=;
h=From:To:Cc:Subject:Date:In-Reply-To:References:From;
b=MmiVGNHUf8M2wFf0WFu5cQVsZWiAoTUMRPcKVJj4gq4tdxkynu1mYKtHzS/aTcgtO
wuUwAZkuMRN9m8g1mtX7OVoVBuNb/yoyuXPcbRTgjUXD2fm7bQxfjmCIp4iu7IZD19
BwZGFJz7K7hFpXvPAGrgkm+PAKTvIwsJbBui5RHaNlh8bGNwRmKImKN1yDwGveVXxX
odswcry/bsM4u8gxgUQNdHl29s/ibTUIexkndhwj2Wi138D1HPxVwhRTZZpwSEhQIS
Pv7nm1Fgy/GOTLg7gN+ZB6tKqUgYRreaK0aF8pesT1oeaDEBw4ZfDVyhTceGLwhUQJ
60WTLjrQk04lw==
From: cel@xxxxxxxxxx
To: jlayton@xxxxxxxxxx,
okorniev@xxxxxxxxxx,
Dai.Ngo@xxxxxxxxxx,
tom@xxxxxxxxxx,
NeilBrown <neil@xxxxxxxxxx>,
Su Hui <suhui@xxxxxxxxxxxx>
Cc: Chuck Lever <chuck.lever@xxxxxxxxxx>,
linux-nfs@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
kernel-janitors@xxxxxxxxxxxxxxx
Subject: Re: [PATCH] nfsd: Replace simple_strtoul with kstrtoint in expkey_parse
Date: Wed, 28 May 2025 10:10:03 -0400
Message-ID: <174844138406.135094.10722176151660746055.b4-ty@xxxxxxxxxx>
X-Mailer: git-send-email 2.49.0
In-Reply-To: <20250527092548.1931636-1-suhui@xxxxxxxxxxxx>
References: <20250527092548.1931636-1-suhui@xxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Chuck Lever <chuck.lever@xxxxxxxxxx>
On Tue, 27 May 2025 17:25:49 +0800, Su Hui wrote:
> kstrtoint() is better because simple_strtoul() ignores overflow and the
> type of 'fsidtype' is 'int' rather than 'unsigned long'.
>
>
Applied to nfsd-testing, thanks!
[1/1] nfsd: Replace simple_strtoul with kstrtoint in expkey_parse
commit: 901218eec3b10a773edcdca717dfe5bedde03f46
--
Chuck Lever
Return-Path: <linux-kernel+bounces-665606-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 8349641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:11:12 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id E74094E50A9
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:11:07 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 60BF8288C19;
Wed, 28 May 2025 14:10:50 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ncskE/1q"
Received: from mail-lf1-f51.google.com (mail-lf1-f51.google.com [209.85.167.51])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id E8D5F2797B5;
Wed, 28 May 2025 14:10:47 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.51
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441449; cv=none; b=u/dtwD78+NXLsbKH2PbvMMdN5e0U/nXj8goxpjFSho1n3NloQD5jBKplKB/s/gCGvdFgEbILJu5e7yNOUJw8zlMoBZhJZenKEJerUJpnJEVkocCNeiL5He1I2jB/InLnB/GbUq9BRpNcmUD244jyaDb5tpKX3SXD+3YZiCcxtLc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441449; c=relaxed/simple;
bh=SH5cP+3YWmXs8/zc7fXq9BP075bBVMwRnqEHsDoMzq4=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=SYF43egu2qr9kEwlc55+Wij9uDd6wJJbH3DI8IcFEj1NJ25jOPkm+xbASfXCCytTyYROyQVwaB4OJgTbsZy9Ow7IUfImE/dgFxDdaRXrUEO7LN6dl02nUYhdyoSL7VjrcUNaqR7jJeQIG8xe+hNV8lptqPMY7GEnBr4gtodTIgY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ncskE/1q; arc=none smtp.client-ip=209.85.167.51
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-lf1-f51.google.com with SMTP id 2adb3069b0e04-54b0d638e86so7496540e87.1;
Wed, 28 May 2025 07:10:47 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748441446; x=1749046246; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=SH5cP+3YWmXs8/zc7fXq9BP075bBVMwRnqEHsDoMzq4=;
b=ncskE/1qpE5GIB0tRRJI0OpXtkQeUZl/GfBepqdstOKB06Zuixq7BFZCRt5fEKykrl
ak7SuuutO7XkXpxb3+78XexF74Pcc30lPd4IuKAZwmN5n3FGpTi6ZI/OOdsUk6Kw2aHs
8maw20gFpwp7R787w4oO3M8PPIYhO0JA7LUsKzrFVk2m2G6BimP4RWuu84SVCJxAc7GW
QKm3OSYT/7a+icMaH8RI/hLxSj5dvxv1WgWptksm10yMsXOriFpdnMnjGDccUKcithfw
/zkl2OjuPUU9+egrpiqfHjU70w7SNYgYJe8LQZ8Bm9RviJve1EaKsA+XWYonumTZS5i9
Fshg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748441446; x=1749046246;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=SH5cP+3YWmXs8/zc7fXq9BP075bBVMwRnqEHsDoMzq4=;
b=Svu1dNYN1ykfCyzMDej2Kk81tE1WHNpq/5Tv1fM7iIfcXP1mTG1Mj3g3RhFf2IQ3D2
Z6kn8FkE4OJaP2VTqGWl7jyH5/J7Tzw3pVf++ybIyVO/VLU9B6tEzPTeC3wIrgPJwgLz
udWzIPW7s6gI0PyYYEPin80WSTEkwNGD+/JNmHIWqxyQ/Jpbt/k0UsiuqtyHLg4VemDy
mKAfihjTDVjtkJT2Kn1oIxl0UrKi5P7NwaqmlX3I0kkhxQBWK921UBw36b9Ngidh3R9T
RGrtz6KyBIi2iVj5qLFDzMHitcmBR4oZWlinrGM8UjH2pVwoaosfMrgdp5XYgAjD3Vga
5Kjw==
X-Forwarded-Encrypted: i=1; AJvYcCU87L2M7n42vA5/SG8CS5ZwI9K3d5LMBWJz/osFyFdH7En96lu41Yc8D03B9Ci+OPMQ90mVs7OuUzPl@xxxxxxxxxxxxxxx, AJvYcCUpkr5ry1iQfpgHvKChPBnuwrYBfBWGUN6mYenRAhDmwr/XOvvw8LdhWYJ6C/U+1utPvs8hdmvvImMgC+A=@vger.kernel.org, AJvYcCVLRu25OYdCSSZBQZKAFdBwokVQDCJi5lWd+ppYHQ5NrWEzcfY19tmwqiLUQa/taejRbJU0f0hVRacohP3L@xxxxxxxxxxxxxxx, AJvYcCWWrKmJvshohWo4xnniKKDXdio7m9PjREs1gcfIo72LVnCELaRKYmUKThV+Ew91uYGIdBxf8Avz5KmihARFVzA=@vger.kernel.org, AJvYcCWcSVKarrOr47JCMbSAAZ50S+5K4DIO/oNuht+AvSQOQrBhbQE7ofDz9zlEJy9msqOU5ISI8xDUOx+7u/6JNjtV@xxxxxxxxxxxxxxx, AJvYcCXEUnIE1efEM936bzs4jIbxfGQ+FHEBnWkzGxpdYkUYf30tPKBZuCKrCPXUKAt8kxR2JeGojKZvwJs+@xxxxxxxxxxxxxxx, AJvYcCXHHOuIYT8xMBeBxv3f1IX8l+uU3gv6/Jj50ozBBIY+q5QbnJuzm+L7dfVm3hQh+woG7u55GYb/@vger.kernel.org
X-Gm-Message-State: AOJu0YwWLRHXw262es9Or2NgQ1WXcNnCJ6fw24YJe7XrMwq5WbPButOj
4l/USUbmtMi5qeYDWB7Wk3dWC5WXLhivt9t0qx6oZcb8mDCGaQFOO/E9HnEPmbBTWJUeMbE4p2x
qCkzM6wDOlRX9Pmu6+tq0CyenUCTFb9I=
X-Gm-Gg: ASbGncscClWaQg69lVFecrPgKEPkr10wuO25UXRabc01e75p5XnOtpTptyCBKRZts6o
hC96Eg7eOT7Xk+qnU7MWgiHU5dhEB1kNCUA4I3FKoLj13nanXsNAFGzk022fsg7zyaHitpRh2Gi
8cLnqmjjDpzj6gwhSCCeC79lDRmpDeibbyYzKsrXJfKzu/fg9B
X-Google-Smtp-Source: AGHT+IG3dTRzhOJeaA21sQ8Cl6CUs5QffL1O5Hi46hlWsg6xnHSKewHgYxirdmC8QSEO4fDwgYnRgzhaJUbQ8K+6RKc=
X-Received: by 2002:a05:651c:1469:b0:32a:7122:58cc with SMTP id
38308e7fff4ca-32a71225a60mr20885251fa.6.1748441445644; Wed, 28 May 2025
07:10:45 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250524-cstr-core-v10-0-6412a94d9d75@xxxxxxxxx> <aDbniZzL1ZOSnfVi@xxxxxxxxxx>
In-Reply-To: <aDbniZzL1ZOSnfVi@xxxxxxxxxx>
From: Tamir Duberstein <tamird@xxxxxxxxx>
Date: Wed, 28 May 2025 10:10:09 -0400
X-Gm-Features: AX0GCFtCzkUkdNofO07GNzu_PibpIwzD2C0rC3Syu4m48_lWgFYSC9rhS2sdGcs
Message-ID: <CAJ-ks9mcPd+-tFRuhxVGrYRPFEtJa3nQTdkvTtzLppqitVfaLg@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v10 0/5] rust: replace kernel::str::CStr w/ core::ffi::CStr
To: Alice Ryhl <aliceryhl@xxxxxxxxxx>
Cc: Michal Rostecki <vadorovsky@xxxxxxxxxxxxxx>, Miguel Ojeda <ojeda@xxxxxxxxxx>,
Alex Gaynor <alex.gaynor@xxxxxxxxx>, Boqun Feng <boqun.feng@xxxxxxxxx>,
Gary Guo <gary@xxxxxxxxxxx>, =?UTF-8?Q?Bj=C3=B6rn_Roy_Baron?= <bjorn3_gh@xxxxxxxxxxxxxx>,
Andreas Hindborg <a.hindborg@xxxxxxxxxx>, Trevor Gross <tmgross@xxxxxxxxx>,
Brendan Higgins <brendan.higgins@xxxxxxxxx>, David Gow <davidgow@xxxxxxxxxx>,
Rae Moar <rmoar@xxxxxxxxxx>, Danilo Krummrich <dakr@xxxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>, Maxime Ripard <mripard@xxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>, David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>, "Rafael J. Wysocki" <rafael@xxxxxxxxxx>,
Luis Chamberlain <mcgrof@xxxxxxxxxx>, Russ Weight <russ.weight@xxxxxxxxx>,
FUJITA Tomonori <fujita.tomonori@xxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Saravana Kannan <saravanak@xxxxxxxxxx>, Peter Zijlstra <peterz@xxxxxxxxxxxxx>,
Ingo Molnar <mingo@xxxxxxxxxx>, Will Deacon <will@xxxxxxxxxx>, Waiman Long <longman@xxxxxxxxxx>,
Nathan Chancellor <nathan@xxxxxxxxxx>, Nick Desaulniers <nick.desaulniers+lkml@xxxxxxxxx>,
Bill Wendling <morbo@xxxxxxxxxx>, Justin Stitt <justinstitt@xxxxxxxxxx>, Andrew Lunn <andrew@xxxxxxx>,
Heiner Kallweit <hkallweit1@xxxxxxxxx>, Russell King <linux@xxxxxxxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>, Bjorn Helgaas <bhelgaas@xxxxxxxxxx>,
Arnd Bergmann <arnd@xxxxxxxx>, Jens Axboe <axboe@xxxxxxxxx>, Benno Lossin <lossin@xxxxxxxxxx>,
=?UTF-8?Q?Krzysztof_Wilczy=C5=84ski?= <kwilczynski@xxxxxxxxxx>,
rust-for-linux@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-kselftest@xxxxxxxxxxxxxxx, kunit-dev@xxxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx, llvm@xxxxxxxxxxxxxxx, linux-pci@xxxxxxxxxxxxxxx,
nouveau@xxxxxxxxxxxxxxxxxxxxx, linux-block@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 6:38=E2=80=AFAM Alice Ryhl <aliceryhl@xxxxxxxxxx> w=
rote:
>
> On Sat, May 24, 2025 at 04:33:00PM -0400, Tamir Duberstein wrote:
> > This picks up from Michal Rostecki's work[0]. Per Michal's guidance I
> > have omitted Co-authored tags, as the end result is quite different.
> >
> > Link: https://lore.kernel.org/rust-for-linux/20240819153656.28807-2-vad=
orovsky@xxxxxxxxxxxxxx/t/#u [0]
> > Closes: https://github.com/Rust-for-Linux/linux/issues/1075
> >
> > Signed-off-by: Tamir Duberstein <tamird@xxxxxxxxx>
>
> Overall LGTM, thanks! Left a few comments on individual patches, but I
> can probably give a RB when those a fixed. :)
Thanks for looking! You say a few comments, but I only saw one. Did
some get lost?
Return-Path: <linux-kernel+bounces-665607-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 5E68741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:12:30 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id D3C643B6105
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:12:00 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 7183A288520;
Wed, 28 May 2025 14:12:13 +0000 (UTC)
Received: from mail-lf1-f51.google.com (mail-lf1-f51.google.com [209.85.167.51])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id C320E19B3CB;
Wed, 28 May 2025 14:12:10 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.51
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441532; cv=none; b=P7RNQ1cXCQYlYNUkzhpMswWlMMFliyYQ6UBpO+NbASvhWu24mTTXe/bSBhvJr0HQLM9DNbHK+Pu/IF3uZAxlaOKRwdgQLNp0laWuo38H2cnGLIyceckD7Gs9FpBX8nBg+ySawJ97+aFgHWCogLXb7Kl0TIm5JKhbX1NSEjqXSFE=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441532; c=relaxed/simple;
bh=RgnF/poN7NkMo2BBglJzOP/AgJJGoqN5W76orbXdxCE=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=bVaQpTqMB28ReTURkX2pEz4t74SjH5h9oiFxJz763TpweHf6fappqIw0UYTqRfkqYyEXNMZdzRPvznQ/ze8Fc2NSyR4lCwiJllTpR7RqsfCiJOFeO4+/H0Bkw58ELkhxVOCpUSsFVz2D7kNXHwJUQ6hzdA/BtalQQ5i9rdW6bwY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=csie.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.167.51
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=csie.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-lf1-f51.google.com with SMTP id 2adb3069b0e04-55329bd977aso944117e87.1;
Wed, 28 May 2025 07:12:10 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748441527; x=1749046327;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:reply-to:in-reply-to:references:mime-version:x-gm-message-state
:from:to:cc:subject:date:message-id:reply-to;
bh=Ksdw7M5oeACHV4O06/7f6T9AIjZYxql+qwEMoPd8Euo=;
b=FMYztMJhhU1xXoh0DDkL9wzlxXzxnqlLpHBF/Pbo3LZLpYz2k381a2e+SJA+YLyWOn
1wO0cxCxZrDFZqh1Kzs6ft/L6dvrrD5KJXaCPqXg3vHFU4ke5siQnA8EGRAeQxBtxnfj
LDbzNftwiAEZIbYOvD99h8Xi2SHMHlleuZyNgQ0tk0vwP0sFEvg0P3SG6hbyjEqU1gzP
hvpgQo1z1eLNaDEPUhuFnZOuc3ZghUBm07M1ndzVw4taWz02Kxx6qsJf4+I7lN9TQ+qh
2aNilZsT1NgGcFcahvR9Ylxqqyx5i/9a2u1ZjTCDzchVTEBGHMiP0Q3PEO3mWERyRKdD
tctg==
X-Forwarded-Encrypted: i=1; AJvYcCVf4cSbbZgitCIpodZbYpgPPzUTlLG46Ke9E9S4Lbxnr1TDbymiMtqzluXQL8XDT5L4L3kpAmRX82PJcAo=@vger.kernel.org, AJvYcCVoQeqNpgoEio6x6zWOsc+PAhjUt3DpmeAdsHHtGkoyTEjk379HDpNkrE1OFB4V2R3VC3L3obYX@xxxxxxxxxxxxxxx
X-Gm-Message-State: AOJu0Yz/cBcNcetFVqbe0HxArkDH1Dlnxb05qjGkI5RmubDZC4A9jBhc
Qm8i9B09fB64BLlU5InoIsdnAqyi59NWDLWluAgxcj0+9JGX5GvVd5CtixaYS35f
X-Gm-Gg: ASbGncvyWvtlFBvESV5NJhTzLQvh7lugiuj9a/TnqL6aJeKrn7VtdNxwhC98XSe6itE
9Q35CG9/l8mw7Olb1yFpopuiq5rfpU60r4rThmIrIX7T319F1ucxixPHZcKFZcXSW7YuQ/JgJ4I
S5rY/4/3x42LTpEIKS29ewIXa7ocWmXhnzSjb79QuDg7xsXB5OVe6tteR/ARUQRvuQKjovQeKpD
saJUga+WDg91wkHS6Pk+OwGnT2aq+eUVlza888QZRF1n42Ma/WiG5KL/Bd6VvjKp0IPIfAelfh9
/0J0BLoEgrCN37TI4qrh4/vKTzzdkrxczK0ooJyB1NmXQBbKfkynAaBBC9B6HUniIvv5ucQOyJa
pDFBkEkRN
X-Google-Smtp-Source: AGHT+IHPkU1HOH6Azz6SI+m7AVROLNZoTJwibx8Ipm/kJ+LLQsZKFeo76hF6rK47R6w0jKpxMgLJaA==
X-Received: by 2002:a05:6512:3408:b0:549:8c0c:ea15 with SMTP id 2adb3069b0e04-5532ccfd942mr1828332e87.0.1748441526984;
Wed, 28 May 2025 07:12:06 -0700 (PDT)
Received: from mail-lj1-f177.google.com (mail-lj1-f177.google.com. [209.85.208.177])
by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5532f6a5f86sm296428e87.179.2025.05.28.07.12.05
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 07:12:05 -0700 (PDT)
Received: by mail-lj1-f177.google.com with SMTP id 38308e7fff4ca-32a61af11ffso11488781fa.1;
Wed, 28 May 2025 07:12:05 -0700 (PDT)
X-Forwarded-Encrypted: i=1; AJvYcCVlBMpyE66xpTY2OvcrFGKjdo85mlQXDEi7u3DIyH6wuBoQs4wh7mVutBRl7PxOmcdbXULXyP0Fh/LwLqM=@vger.kernel.org, AJvYcCW0aapBmvDVZFKvc782+pbCxZnZ+KIEZWGgA9lLzrrjvZ1HLFy4cxNSqFNdVHemD1ldXU0RB/wJ@xxxxxxxxxxxxxxx
X-Received: by 2002:a05:651c:418e:b0:326:cf84:63c4 with SMTP id
38308e7fff4ca-32a736a7554mr15406341fa.1.1748441525068; Wed, 28 May 2025
07:12:05 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250527175558.2738342-1-james.hilliard1@xxxxxxxxx>
<631ed4fe-f28a-443b-922b-7f41c20f31f3@xxxxxxx> <CADvTj4rGdb_kHV_gjKTJNkzYEPMzqLcHY_1xw7wy5r-ryqDfNQ@xxxxxxxxxxxxxx>
<fe8fb314-de99-45c2-b71e-5cedffe590b0@xxxxxxx> <CADvTj4qRmjUQJnhamkWNpHGNAtvFyOJnbaQ5RZ6NYYqSNhxshA@xxxxxxxxxxxxxx>
<014d8d63-bfb1-4911-9ea6-6f4cdabc46e5@xxxxxxx> <CADvTj4oVj-38ohw7Na9rkXLTGEEFkLv=4S40GPvHM5eZnN7KyA@xxxxxxxxxxxxxx>
<aDbA5l5iXNntTN6n@xxxxxxxxxxxxxxxxxxxxx> <CADvTj4qP_enKCG-xpNG44ddMOJj42c+yiuMjV_N9LPJPMJqyOg@xxxxxxxxxxxxxx>
<f915a0ca-35c9-4a95-8274-8215a9a3e8f5@xxxxxxx>
In-Reply-To: <f915a0ca-35c9-4a95-8274-8215a9a3e8f5@xxxxxxx>
Reply-To: wens@xxxxxxxx
From: Chen-Yu Tsai <wens@xxxxxxxx>
Date: Wed, 28 May 2025 22:11:50 +0800
X-Gmail-Original-Message-ID: <CAGb2v66PEA4OJxs2rHrYFAxx8bw4zab7TUXQr+DM-+ERBO-UyQ@xxxxxxxxxxxxxx>
X-Gm-Features: AX0GCFvkvTc-VRmYOaYU5xGuR2czReptL7cuDFoxwx0sxNWmjpy1lDF4i_MRIR8
Message-ID: <CAGb2v66PEA4OJxs2rHrYFAxx8bw4zab7TUXQr+DM-+ERBO-UyQ@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v2 1/3] net: stmmac: allow drivers to explicitly select
PHY device
To: Andrew Lunn <andrew@xxxxxxx>
Cc: James Hilliard <james.hilliard1@xxxxxxxxx>,
"Russell King (Oracle)" <linux@xxxxxxxxxxxxxxx>, netdev@xxxxxxxxxxxxxxx, linux-sunxi@xxxxxxxxxxxxxxx,
Andrew Lunn <andrew+netdev@xxxxxxx>, "David S. Miller" <davem@xxxxxxxxxxxxx>,
Eric Dumazet <edumazet@xxxxxxxxxx>, Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Maxime Coquelin <mcoquelin.stm32@xxxxxxxxx>, Alexandre Torgue <alexandre.torgue@xxxxxxxxxxx>,
Furong Xu <0x1207@xxxxxxxxx>, Kunihiko Hayashi <hayashi.kunihiko@xxxxxxxxxxxxx>,
linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 9:25=E2=80=AFPM Andrew Lunn <andrew@xxxxxxx> wrote:
>
> On Wed, May 28, 2025 at 05:57:38AM -0600, James Hilliard wrote:
> > On Wed, May 28, 2025 at 1:53=E2=80=AFAM Russell King (Oracle)
> > <linux@xxxxxxxxxxxxxxx> wrote:
> > >
> > > On Tue, May 27, 2025 at 02:37:03PM -0600, James Hilliard wrote:
> > > > On Tue, May 27, 2025 at 2:30=E2=80=AFPM Andrew Lunn <andrew@xxxxxxx=
> wrote:
> > > > >
> > > > > > Sure, that may make sense to do as well, but I still don't see
> > > > > > how that impacts the need to runtime select the PHY which
> > > > > > is configured for the correct MFD.
> > > > >
> > > > > If you know what variant you have, you only include the one PHY y=
ou
> > > > > actually have, and phy-handle points to it, just as normal. No ru=
ntime
> > > > > selection.
> > > >
> > > > Oh, so here's the issue, we have both PHY variants, older hardware
> > > > generally has AC200 PHY's while newer ships AC300 PHY's, but
> > > > when I surveyed our deployed hardware using these boards many
> > > > systems of similar age would randomly mix AC200 and AC300 PHY's.
> > > >
> > > > It appears there was a fairly long transition period where both var=
iants
> > > > were being shipped.
> > >
> > > Given that DT is supposed to describe the hardware that is being run =
on,
> > > it should _describe_ _the_ _hardware_ that the kernel is being run on=
.
> > >
> > > That means not enumerating all possibilities in DT and then having ma=
gic
> > > in the kernel to select the right variant. That means having a correc=
t
> > > description in DT for the kernel to use.
> >
> > The approach I'm using is IMO quite similar to say other hardware
> > variant runtime detection DT features like this:
> > https://github.com/torvalds/linux/commit/157ce8f381efe264933e9366db828d=
845bade3a1
>
> That is for things link a HAT on a RPi. It is something which is easy
> to replace, and is expected to be replaced.
Actually it's for second sourced components that are modules _within_
the device (a tablet or a laptop) that get swapped in at the factory.
Definitely not something easy to replace and not expected to be replaced
by the end user.
The other thing is that there are no distinguishing identifiers for a
device tree match for the swap-in variants at the board / device level.
Though I do have something that does DT fixups in the kernel for IDs
passed over by the firmware. There are other reasons for this arrangement,
one being that the firmware is not easily upgradable.
ChenYu
> You are talking about some form of chiplet like component within the
> SoC package. It is not easy to replace, and not expected to be
> replaced.
>
> Different uses cases altogether.
>
> What i think we will end up with is the base SoC .dtsi file, and two
> additional .dtsi files describing the two PHY variants.
>
> Andrew
>
Return-Path: <linux-kernel+bounces-665608-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id A7A8F41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:12:53 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 7CCA89E0F06
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:12:14 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id BC628288C2E;
Wed, 28 May 2025 14:12:19 +0000 (UTC)
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 50D84247285;
Wed, 28 May 2025 14:12:19 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441539; cv=none; b=M9eRxxP2BX+ALaK+USdefzv14JpOTtcs+MCYXw1tRL5Mg/AvAU0CO6eZyuXFUPc8I7Esfs1wDHsGoU6Xvqyc4NjhnQE0a53oQxHkTb3bGahiIfG6dcVejD/LrUAwpL/XB4YJiufIkR7P9CH2ID8Jr3yXA3IhYe1N9UwmfbEKzKo=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441539; c=relaxed/simple;
bh=oG4ypAGdLjwXhX+tqp2oG4fyMx5KH/HkGNDMrgscEHs=;
h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=Dh/kPGSba93b8+9RuXTT8qkDOseTbxIBfUNPfog5wCVz5FM99Bvgz0hi0kF8ycn3ntU6AEJVrslH6r41zBP4H6y9XnXxJb3zrIDUZDBPgtnurn2ll30DINGX2TdEzAofnbYwpUQijX4hGo+7r+tJxfYl2ziYKP+AwF9H97AYf28=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4BA4AC4CEE3;
Wed, 28 May 2025 14:12:18 +0000 (UTC)
Date: Wed, 28 May 2025 10:13:18 -0400
From: Steven Rostedt <rostedt@xxxxxxxxxxx>
To: yebin <yebin@xxxxxxxxxxxxxxx>
Cc: mhiramat@xxxxxxxxxx, mathieu.desnoyers@xxxxxxxxxxxx,
mark.rutland@xxxxxxx, linux-trace-kernel@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, yebin10@xxxxxxxxxx
Subject: Re: [PATCH 1/2] ftrace: fix UAF when lookup kallsym after ftrace
disabled
Message-ID: <20250528101318.5ee12329@xxxxxxxxxxxxxxxxxx>
In-Reply-To: <68370E1D.3070802@xxxxxxxxxxxxxxx>
References: <20250523083945.3390587-1-yebin@xxxxxxxxxxxxxxx>
<20250523083945.3390587-2-yebin@xxxxxxxxxxxxxxx>
<20250523135452.626d8dcd@xxxxxxxxxxxxxxxxxx>
<6833C4F1.3030300@xxxxxxxxxxxxxxx>
<20250527094131.1f4a92ab@xxxxxxxxxxxxxxxxxx>
<68370E1D.3070802@xxxxxxxxxxxxxxx>
X-Mailer: Claws Mail 3.20.0git84 (GTK+ 2.24.33; x86_64-pc-linux-gnu)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 21:22:37 +0800
yebin <yebin@xxxxxxxxxxxxxxx> wrote:
> This problem can be solved by releasing the 'mod_map' resource when the
> module is unloaded. Freeing up these resources is just an address that
> cannot be translated into symbols, and there are no worse consequences.
OK, I'm fine with releasing the mod_map resource without doing the text
modifications.
>
> > Again, the only solution to a ftrace_disable being set is a full reboot.
> >
> We can't ask users to know such specialized details of the
> implementation, which are unclear even to developers unfamiliar with the
> ftrace module. Users can accept planned reboot system recovery, but
> should not accept casual operations and the system crashes.All we can do
> is do a good job of protection, give users more tolerance.Perhaps a
> system that is dead but won't lie down is also a very undesirable
> situation.However, ftrace is used to collect information and locate
> faults. Even if it does not work, it does not affect services.In the
> production environment, the most afraid of using ftrace suddenly crashes
> the system.Therefore, the robustness of the tool itself is very important.
Preventing ftrace from crashing the system is the reason ftrace_disabled is
set and stops it from doing any more damage.
If you are worried about users not knowing that a reboot is necessary, we
could always add the "Dazed and confused, but trying to continue" message
that could also recommend a reboot.
> > -- Steve
> >
>
> I reworked the two patches, and the changes to the existing process
> should be minimal. I don't know if I can get your approval. If you
> agree, I'll post another V3 version.
>
> PATCH[1/2]:
> diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
> index 51580e54677f..b3436d86e470 100644
> --- a/kernel/trace/ftrace.c
> +++ b/kernel/trace/ftrace.c
> @@ -7438,9 +7438,10 @@ void ftrace_release_mod(struct module *mod)
>
> mutex_lock(&ftrace_lock);
>
> - if (ftrace_disabled)
> - goto out_unlock;
> -
> + /*
> + * To avoid the UAF problem after the module is unloaded, the
> + * 'mod_map' resource needs to be released unconditionally.
> + */
> list_for_each_entry_safe(mod_map, n, &ftrace_mod_maps, list) {
> if (mod_map->mod == mod) {
> list_del_rcu(&mod_map->list);
> @@ -7451,6 +7452,9 @@ void ftrace_release_mod(struct module *mod)
> }
> }
>
> + if (ftrace_disabled)
> + goto out_unlock;
> +
> /*
> * Each module has its own ftrace_pages, remove
> * them from the list.
Yes, this is more appropriate.
Thanks,
-- Steve
>
> PATCH[2/2]:
> diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
> index a3d4dfad0cbc..51580e54677f 100644
> --- a/kernel/trace/ftrace.c
> +++ b/kernel/trace/ftrace.c
> @@ -7629,6 +7629,9 @@ allocate_ftrace_mod_map(struct module *mod,
> {
> struct ftrace_mod_map *mod_map;
>
> + if (ftrace_disabled)
> + return NULL;
> +
> mod_map = kmalloc(sizeof(*mod_map), GFP_KERNEL);
> if (!mod_map)
> return NULL;
Return-Path: <linux-kernel+bounces-665609-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id CA2F241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:13:43 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 806851BC557C
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:13:56 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 31B00288527;
Wed, 28 May 2025 14:13:34 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="aj3lQrZm"
Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9D58B19B3CB;
Wed, 28 May 2025 14:13:31 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441613; cv=none; b=JX17+Rrqlg2brq4eqfPXk64dnYxn3IuhHy0ebjP4uHBPbEfSVbo0sKTOaY9r+tkJt4DYFOVZlf4ITMVtND9ioAyi6RM+VBLMk2GltAxczEsr11+OA5ySXniT0nx00PGjQ1wGcacFUc7yklLZ/1f2rQEsbeYRztNw7QWOsGpDGwg=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441613; c=relaxed/simple;
bh=dpXIbCAlYRmIowUQvMgyFGOg+FO7ISbS1+UG1ZIuELM=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=eh5UOxZqe27YJCyPegZNUsTwHatFrfvrqtooR0b1vJgKVyJf43Gk5kL9/e3d1SoMErsc4UIumnvssfIAEO0VIj2K2hUAeEYsvqTGad8YeXyuNM93FB1lmu3l+v3HgP+jL+WrIaVZJykRL8tYdnWF9tQLHKWqpd5I8rsxCe1r4e0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=aj3lQrZm; arc=none smtp.client-ip=209.85.128.47
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-43cfe574976so36299995e9.1;
Wed, 28 May 2025 07:13:31 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748441610; x=1749046410; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=u/NvBcF4s3yGqfgtLGu/F6IheBb4FWCw8Mlh0+qa7IM=;
b=aj3lQrZmOCGZLdTm/WMkY5TkY8J5IBvf2ww++U0GuXzFo+Yy5RHQmk1Bu55dSRRMSc
cNhLOgofEkW5KqDwlRVZ0lP/jjqaHYxUs6Q/UtguxWHpdIYB0w2Vva3vd4S05AtUuY3M
oy7oSOqJkKyD43SYTTYFHyJBtKM4HfZIKLqLxKx6LOrTBrLRRmDUsMMfKpx3g5+spxAb
KhtXTapjS8sD+OuZPwEwcaG73Ew2TvO0WP46COqBug88jqdONMC8ct1iI4Kk1zNRceMc
WB2IgImBKFCuOpB7Im++v6Itf4Q9ASTRxCNdHdYBgBX96V5ZZGBR5hVpKROxFxPMpWSR
ECjg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748441610; x=1749046410;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=u/NvBcF4s3yGqfgtLGu/F6IheBb4FWCw8Mlh0+qa7IM=;
b=gEzt297PDL/27IqXsRaA6sz8KoktLxt0Kkwk8ny9g3qdGfGsE9iX7hmWhxaXJssJcC
2P7QAjb751pwpQ0PKX4m7uYq3bI4sDc4wYxUw9nKXHdvP4cw495ftDhdaYlmV09R6nND
zT4AL0wWmIOG/N/uPxXfZF78UB+IB1ylr4l/chSCskJDfba0iObwBcJ9XxZLgvgbo4HD
ndmzo0Uq8lbbH68bXHzxdXLB1yGsBtanuzPfoQI9r3hPBHqwats5wGIzF6RKhdC03rnG
180Q7n8WUjy9xIg3o2dskWxqZokkxovnOHapS0oD7cGWSkVXAZ+8KuQTabSHvgOaAAph
HEyQ==
X-Forwarded-Encrypted: i=1; AJvYcCU4JThMBpKxFCY4l95uyXad1g0a9t3M68n1LrH83/Ve15FxLX+r+pQ+JgbinDRK9fhPcTaF2m6YRbJb@xxxxxxxxxxxxxxx, AJvYcCWaf4Y3qMxt3+KJZ2pGMDLyWKpezByiVoQVb0xUEI+pu9TRPSpMPiIwRU9qmnoH2TEQ8C0/gWF6zOGA+QO1@xxxxxxxxxxxxxxx, AJvYcCX/egNEtAVE8lIsvmWEK79WV5q4QQQcl74t+itvqVANEHjuYShvw+O4fr8jZB/qwXsk1uID7Ke5Hi17@xxxxxxxxxxxxxxx, AJvYcCXw3LjwQHxzD+fHj0nMHzFUlzPdaWQSWNQWQWpr3DhDVmiFq8NkCGJOWdRIIUgFQIlhqHuBWYM9QPtGlNhyPXG5IRQ=@vger.kernel.org
X-Gm-Message-State: AOJu0YyVeRkyYpPfptMKT4uas9rcQNq5tC7/gqoskh0P1sX4exiaRA6f
EtVr2WuTX1ibiCqTccG2TfwYNjLVTEo2R9Y2A19j0PXuL2JNe28UcloJhdrmmaSXUtnvSiC9KAo
eRQ6kJVNe2h9MWZL77vs6wFqbS9uFxGY=
X-Gm-Gg: ASbGncvwn8k0Qv+K4gDYbghXiRzJ0WQiqDonp05mHk9c5M8uiL30vuoMh0MCTEuZ5xW
LU+9NQO0+W/ItBdAEhwXrrCrsGyN8eBMPAYWa7ft8EOLEA9YSTVtQE/QsH6s/knRQacqObBW7Jd
aXy8taws1OisP6f8Vb0MgIcifpPDZ3jYIVtA/HUOh+A2E56bh15tmOBz8gwdy/ljvd+w==
X-Google-Smtp-Source: AGHT+IHkpT2ySjMUdtYwChJ0/5/1rzDmtMoM740OXZxSdgP34XADiDvdJ0+rhe/twNar59adXV7Gqw4wW8anaLlVuPA=
X-Received: by 2002:a05:600c:3b17:b0:43c:f1b8:16ad with SMTP id
5b1f17b1804b1-450787c9705mr26585325e9.30.1748441609568; Wed, 28 May 2025
07:13:29 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250512184302.241417-1-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
<20250512184302.241417-2-prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
<CAMuHMdU=iuVFo=VJjV7UM-fLTeZk9TwyOJwojOVOSJiniRneHA@xxxxxxxxxxxxxx>
<CA+V-a8sOGEEajx9TQsVBb+NeFRUx2eSo81ZdRQMsLzd0Eiox2w@xxxxxxxxxxxxxx> <CAMuHMdXb5ZCX=U_BR0=AkGtdGkVosty0cGsbKQryTy11Au8H-A@xxxxxxxxxxxxxx>
In-Reply-To: <CAMuHMdXb5ZCX=U_BR0=AkGtdGkVosty0cGsbKQryTy11Au8H-A@xxxxxxxxxxxxxx>
From: "Lad, Prabhakar" <prabhakar.csengg@xxxxxxxxx>
Date: Wed, 28 May 2025 15:13:02 +0100
X-Gm-Features: AX0GCFv1m8Xej_HgH71EgZ4Kvyv9BeSbuvPePanFkBHFJSxJNoRIerOZEfcK3ek
Message-ID: <CA+V-a8sUyZHGPwUzfUan8tmsF19mB2EPN599Tzu2kaoYxSMaHw@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v5 1/4] clk: renesas: rzv2h-cpg: Add support for DSI clocks
To: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>
Cc: Fabrizio Castro <fabrizio.castro.jz@xxxxxxxxxxx>, Andrzej Hajda <andrzej.hajda@xxxxxxxxx>,
Neil Armstrong <neil.armstrong@xxxxxxxxxx>, Robert Foss <rfoss@xxxxxxxxxx>,
Laurent Pinchart <Laurent.pinchart@xxxxxxxxxxxxxxxx>, Jonas Karlman <jonas@xxxxxxxxx>,
Jernej Skrabec <jernej.skrabec@xxxxxxxxx>, David Airlie <airlied@xxxxxxxxx>,
Simona Vetter <simona@xxxxxxxx>, Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>, Thomas Zimmermann <tzimmermann@xxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>, Conor Dooley <conor+dt@xxxxxxxxxx>,
Michael Turquette <mturquette@xxxxxxxxxxxx>, Stephen Boyd <sboyd@xxxxxxxxxx>,
Biju Das <biju.das.jz@xxxxxxxxxxxxxx>, Magnus Damm <magnus.damm@xxxxxxxxx>,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-renesas-soc@xxxxxxxxxxxxxxx,
linux-clk@xxxxxxxxxxxxxxx,
Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Geert,
On Wed, May 28, 2025 at 8:09=E2=80=AFAM Geert Uytterhoeven <geert@linux-m68=
k.org> wrote:
>
> Hi Prabhakar,
>
> On Tue, 27 May 2025 at 23:51, Lad, Prabhakar <prabhakar.csengg@xxxxxxxxx>=
wrote:
> > On Fri, May 23, 2025 at 3:45=E2=80=AFPM Geert Uytterhoeven <geert@linux=
-m68k.org> wrote:
> > > On Mon, 12 May 2025 at 20:43, Prabhakar <prabhakar.csengg@xxxxxxxxx> =
wrote:
> > > > From: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
> > > >
> > > > Add support for PLLDSI and PLLDSI divider clocks.
> > > >
> > > > Introduce the `renesas-rzv2h-dsi.h` header to centralize and share
> > > > PLLDSI-related data structures, limits, and algorithms between the =
RZ/V2H
> > > > CPG and DSI drivers.
> > > >
> > > > The DSI PLL is functionally similar to the CPG's PLLDSI, but has sl=
ightly
> > > > different parameter limits and omits the programmable divider prese=
nt in
> > > > CPG. To ensure precise frequency calculations-especially for milliH=
z-level
> > > > accuracy needed by the DSI driver-the shared algorithm allows both =
drivers
> > > > to compute PLL parameters consistently using the same logic and inp=
ut
> > > > clock.
> > > >
> > > > Co-developed-by: Fabrizio Castro <fabrizio.castro.jz@xxxxxxxxxxx>
> > > > Signed-off-by: Fabrizio Castro <fabrizio.castro.jz@xxxxxxxxxxx>
> > > > Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.c=
om>
>
> > > > +static int rzv2h_cpg_plldsi_div_determine_rate(struct clk_hw *hw,
> > > > + struct clk_rate_requ=
est *req)
> > > > +{
> > > > + struct rzv2h_plldsi_div_clk *dsi_div =3D to_plldsi_div_clk(=
hw);
> > > > + struct rzv2h_cpg_priv *priv =3D dsi_div->priv;
> > > > + struct rzv2h_plldsi_parameters *dsi_dividers =3D &priv->pll=
dsi_div_parameters;
> > > > + u64 rate_millihz;
> > > > +
> > > > + /*
> > > > + * Adjust the requested clock rate (`req->rate`) to ensure =
it falls within
> > > > + * the supported range of 5.44 MHz to 187.5 MHz.
> > > > + */
> > > > + req->rate =3D clamp(req->rate, 5440000UL, 187500000UL);
> > > > +
> > > > + rate_millihz =3D mul_u32_u32(req->rate, MILLI);
> > > > + if (rate_millihz =3D=3D dsi_dividers->error_millihz + dsi_d=
ividers->freq_millihz)
> > > > + goto exit_determine_rate;
> > > > +
> > > > + if (!rzv2h_dsi_get_pll_parameters_values(priv->dsi_limits,
> > > > + dsi_dividers, rate=
_millihz)) {
> > > > + dev_err(priv->dev,
> > > > + "failed to determine rate for req->rate: %l=
u\n",
> > > > + req->rate);
> > > > + return -EINVAL;
> > > > + }
> > > > +
> > > > +exit_determine_rate:
> > > > + req->best_parent_rate =3D req->rate * dsi_dividers->csdiv;
> > >
> > > Shouldn't this also update req->rate with the actual rate?
> > >
> > > req->rate =3D DIV_ROUND_CLOSEST_ULL(dsi_dividers->freq_millihz, M=
ILLI);
> > >
> > Agreed, I will update it.
>
> I think not updating req->rate may cause clk_get_rate() to return
> an incorrect value (can error_millihz > 1000?). Any chance this fix
> can simplify the clock handling in the DSI driver?
>
Yes, error_millihz can be greater than 1000, as result the DSI driver
does check this (>=3D 500) and proceeds to try the next one.
Cheers,
Prabhaar
Return-Path: <linux-kernel+bounces-665610-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 5776841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:14:32 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 28EF81BC55E3
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:14:45 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 0B8AA288534;
Wed, 28 May 2025 14:14:23 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="lVVoA1jc"
Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id C7D411F37D3;
Wed, 28 May 2025 14:14:18 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441662; cv=none; b=VXDucbNJ2Bqy8Oor47Ls/Vw3s3GkiVD8SnxMFlh0Pt+2UpvLm7zVvFmGTSJ1tN1MIgcwWHGUriags6pf7ggjgeXhah7yBEUOHHrpqEGMwaZVpxzxMzQUdWtrZkv1zqPkdxrKkDoXcR9bfTm6VWLPORt3ocIgJyMVLDXa2HNLja4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441662; c=relaxed/simple;
bh=Xck/nwOYiqy1ZVp9Sss2kWwcLSvKVmGgOkD7OBgsZBA=;
h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References:
Content-Type:MIME-Version; b=BNJvlo543y8RY3naKobMMhnHKGZWlwPYnt3Z4kpqojYCoQVOCzkhYufW5WYCl0uS4WnRFMb30O8RdRRBDTn7aFQ6nsFoqCCKgFawjGGyiPSCYHJBqUjPXF9VY4GtUumu72R016FWHlT2shv4pHqkoScYlUTbbupW0ssrP/ayF4A=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=lVVoA1jc; arc=none smtp.client-ip=148.251.105.195
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com;
s=mail; t=1748441656;
bh=Xck/nwOYiqy1ZVp9Sss2kWwcLSvKVmGgOkD7OBgsZBA=;
h=Subject:From:To:Cc:Date:In-Reply-To:References:From;
b=lVVoA1jctbfwewW2KGob5hfTDoq2NQRzQk9gxJCzi1YcEl/+KT9lpM1mZDY7EpwAz
C01gp7g9uaW3/+R4aPvO6wDfW5R1enrQHhY17Rc4ZbwusXt7h3uDWywQzwv3+uHrrJ
eyXVnqTow726pX7uJU1Zh9KVXNThuEmBMg///ei+djpn3Olt5z7LlLIGYfjVzSUyVS
Cob+tignic8jH9R0rI61lG5DM3Ej2AQt6cNGR2LAloGMo6fvEbUWpg5GqiDbnM6mLF
WDNyYPavHzBqZqlWkUbSY/zfiMhnakM4/8bZ+WN4gDOyZVH9dAF3IHgby93SQWFHEg
LI1+Pb7C4IL6Q==
Received: from [IPv6:2606:6d00:17:b2fc::5ac] (unknown [IPv6:2606:6d00:17:b2fc::5ac])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(No client certificate requested)
(Authenticated sender: nicolas)
by bali.collaboradmins.com (Postfix) with ESMTPSA id 524C317E3700;
Wed, 28 May 2025 16:14:14 +0200 (CEST)
Message-ID: <7cf3e219758a67d08137ebea5e52a1abad835e65.camel@xxxxxxxxxxxxx>
Subject: Re: [RFC PATCH 07/11] arm64: dts: imx8mp: fix VPU_BUS clock setting
From: Nicolas Dufresne <nicolas.dufresne@xxxxxxxxxxxxx>
To: Adam Ford <aford173@xxxxxxxxx>, Marco Felsch <m.felsch@xxxxxxxxxxxxxx>
Cc: benjamin.gaignard@xxxxxxxxxxxxx, p.zabel@xxxxxxxxxxxxxx,
mchehab@xxxxxxxxxx, shawnguo@xxxxxxxxxx, Sascha Hauer
<s.hauer@xxxxxxxxxxxxxx>, kernel@xxxxxxxxxxxxxx, festevam@xxxxxxxxx,
robh@xxxxxxxxxx, krzk+dt@xxxxxxxxxx, conor+dt@xxxxxxxxxx,
paulk@xxxxxxxxxxx, hverkuil@xxxxxxxxx, laurent.pinchart@xxxxxxxxxxxxxxxx,
sebastian.fricke@xxxxxxxxxxxxx, ming.qian@xxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-media@xxxxxxxxxxxxxxx,
linux-rockchip@xxxxxxxxxxxxxxxxxxx, imx@xxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx
Date: Wed, 28 May 2025 10:14:12 -0400
In-Reply-To: <CAHCN7xLecU12XtXFuwfNP+eee+9RLCSB9iErNmk7VFV+WrozJA@xxxxxxxxxxxxxx>
References: <20250502150513.4169098-1-m.felsch@xxxxxxxxxxxxxx>
<20250502150513.4169098-8-m.felsch@xxxxxxxxxxxxxx>
<CAHCN7x+Lu9momgX3Vwp+Yu+Tet5Q=k2vCL83SMLuad24SDchEg@xxxxxxxxxxxxxx>
<20250502165535.aeb2osq2vnxsudmq@xxxxxxxxxxxxxx>
<CAHCN7xLecU12XtXFuwfNP+eee+9RLCSB9iErNmk7VFV+WrozJA@xxxxxxxxxxxxxx>
Organization: Collabora Canada
Content-Type: text/plain; charset="UTF-8"
User-Agent: Evolution 3.56.2 (3.56.2-1.fc42)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi,
Le mardi 27 mai 2025 à 22:05 -0500, Adam Ford a écrit :
> On Fri, May 2, 2025 at 11:55â?¯AM Marco Felsch <m.felsch@xxxxxxxxxxxxxx> wrote:
> >
> > On 25-05-02, Adam Ford wrote:
> > > On Fri, May 2, 2025 at 10:10â?¯AM Marco Felsch <m.felsch@xxxxxxxxxxxxxx> wrote:
> > > >
> > > > The VPU_PLL clock must be set before the VPU_BUS clock which is derived
> > > > from the VPU_PLL clock else the VPU_BUS clock is 300MHz and not 600MHz.
>
> I did verify the current clock rate ends up at 300MHz instead of the
> desired 600 or 800MHz, so we should do something.
>
This reminded me of:Â
https://patchwork.linuxtv.org/project/linux-media/patch/20250217-b4-hantro-av1-clock-rate-v2-1-e179fad52641@xxxxxxxxxxxxx/
Which also made me discover that this patch wasn't picked despite being mark accepted. We
will favour DT clock settings from here, since its not really managable otherwise, old board
will stay like this, otherwise we face backward compatibility issues.
Note that G2 and VC8K can be run at higher rate, but to be stable, you need
to also control voltage and proper cooling, not something we want "by default".
Nicolas
>
> > > >
> > > > Signed-off-by: Marco Felsch <m.felsch@xxxxxxxxxxxxxx>
> > > > ---
> > > > Â arch/arm64/boot/dts/freescale/imx8mp.dtsi | 4 ++--
> > > > Â 1 file changed, 2 insertions(+), 2 deletions(-)
> > > >
> > > > diff --git a/arch/arm64/boot/dts/freescale/imx8mp.dtsi b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
> > > > index 97b09b647ec7..7f4bdefb3480 100644
> > > > --- a/arch/arm64/boot/dts/freescale/imx8mp.dtsi
> > > > +++ b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
> > > > @@ -2289,8 +2289,8 @@ vpumix_blk_ctrl: blk-ctrl@38330000 {
> > > > Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â <&clk IMX8MP_CLK_VPU_G2_ROOT>,
> > > > Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â <&clk IMX8MP_CLK_VPU_VC8KE_ROOT>;
> > > > Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â clock-names = "g1", "g2", "vc8000e";
> > > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â assigned-clocks = <&clk IMX8MP_CLK_VPU_BUS>, <&clk IMX8MP_VPU_PLL>;
> > > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â assigned-clock-parents = <&clk IMX8MP_VPU_PLL_OUT>;
> > > > +Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â assigned-clocks = <&clk IMX8MP_VPU_PLL>, <&clk IMX8MP_CLK_VPU_BUS>;
> > > > +Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â assigned-clock-parents = <0>, <&clk IMX8MP_VPU_PLL_OUT>;
> > > > Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â assigned-clock-rates = <600000000>, <600000000>;
> > >
> > > I think there was a move to make the default be overdrive [1]Â and [2]
> > > and use a 'nominal' device tree for those who are not in overdrive
> > > mode. According to the TRM, the VPU_BUS_CLK_ROOT, the nominal is
> > > 600MHz and the overdrive is 800MHz. Based on that, I wonder if the
> > > values here should be 800MHz and if we should add the nominal values
> > > of 600MHz to the imx8m-nominal.dtsi file.
> >
> > You're right, Ahamd and Lucas did change this. I will adapt it later on.
>
> I updated my device tree to run in overdrive mode and ran fluster at
> the higher rates:
> VPU_G1 - 800MHz,
> VPU-G2 - 700MHz
> VPU-Bus - 800MHz
>
> ./fluster.py run -d GStreamer-VP8-V4L2SL-Gst1.0
> Ran 57/61 tests successfully              in 5.922 secs
> (vs 7.059 secs at nominal speed)
>
> ./fluster.py run -dGStreamer-H.264-V4L2SL-Gst1.0
> Ran 129/135 tests successfully              in 40.107 secs
> (vs 45.741 secs at nominal speed)
>
> If you want, I can submit the clock updates I have for overdrive or
> send them to you to save you some time.
>
> adam
>
> >
> > Regards,
> > Â Marco
Return-Path: <linux-kernel+bounces-665611-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id BA42F41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:14:52 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 8D4644E1EF0
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:14:53 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 23261288531;
Wed, 28 May 2025 14:14:46 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="mSMSB54D"
Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on2074.outbound.protection.outlook.com [40.107.96.74])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 01FBD28642C;
Wed, 28 May 2025 14:14:42 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.96.74
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441684; cv=fail; b=DMwTXzce0HrDTCoDrG9U8ZnYhBLkh/kVKTMXU07UMd3++hXS3VeRq0UpgF6CyHTWsGNr1adVng1/5O4qbzLvu9KWt/YsjdOT59RZCHKyI5hLlXevW3zl/1D2Wgnl56ypDEFsk6XiZJKygPFlhYewDYzflsQqmwTF67ND6YGp+as=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441684; c=relaxed/simple;
bh=1mVYw4VdZ+IQsddrTcXUFjuyJlyJXzLXDB/tny971ck=;
h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To:
Content-Type:MIME-Version; b=Mxnz8v2FBeBzrG8Mr4jTz1lME4pP8VNqtXqAavViZHg8exZizPpQp+PpBRerIog/KpFrrLh6GOWmlm9wYDZ4a60+X4NURNAJfXxKom8kpd8FbUAYQ3LwToHjli6bLpRTyNsy8WRN+w9YmkHZdNoLFuElDebOPAh4D2DuNyNBv8U=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=mSMSB54D; arc=fail smtp.client-ip=40.107.96.74
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com
Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=bhPmp5UbXbbzgrqHtCxVzyTfEceah1JDtmNM9k79GVKeRY3Ez6M2xP/37d9UySBwkqI3BTujOF7Xkg20Z4z+IBAgGo5sYfiKJgJ4rsGJM4qlMxtY2cEmmqqVgkBHfrNQd+RsfeTphbZ2+ex09tPKjlegAOtApB/QRMSUxJTphvxe0MUZ0fty/4J4ZaowrtLBSJwchF1rY+4LNfyjpA6xsoKdbY+nmtcZfOsmTpKIu0l0RHAWLZobTO87AGWIar1XKvx7GPQk9097j0rLrUMmTQGl40T8ltKIj6SRXj090DWPOnTJrULqSCzDXvNxcPIAsjFym3brTrLTKDt00kTKpw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=1mVYw4VdZ+IQsddrTcXUFjuyJlyJXzLXDB/tny971ck=;
b=YuqWvC6yi+eOzNKMZ+TmuekNf6uKdu+dwWNi0anO5HlA41WXMmK0uqCqdwFcO/2usoiCg1cVBbkhiBq0MtC9BT0XdYQBMtSQqKCFTuCb2tQNohvNzIfKsxoTuGoPWMFNwEE3HiDBGWOdlK7jnwvobnKGDZYK+qlvCf8XG/MbDgDGjfpkiW2mgj/x8Ta4GIk+H3CW/tjsoIz+PDTJXd+OKF73PK/xWwZHfgCEDoTtUutQnwuNw4vc5S6uqsIsWqJ2UgrANX50sLGnjrTFsTzopQqhMP4aOYtCHVTgD0plWSyf98vJAw1n93rq8fjSqFa1/w+SvG+KtDI5ndRU891vXw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass
header.d=amd.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=1mVYw4VdZ+IQsddrTcXUFjuyJlyJXzLXDB/tny971ck=;
b=mSMSB54DHUUiLdyeVyViDVwi1k83TBUggD8DLxkvlXT9d3NxRXkIBIIK68AkhTxFQ5ivIEmBQ+F4jjJnjzmMdYZ7SLhtLt16fp1R6+Y9ge1VoRfYX4Vt5iCMo8s2W02vancjXU/5MpVgG3tmkEWxbrjUbE1ul+g3p4JQvWB5o9M=
Received: from DS7PR12MB6095.namprd12.prod.outlook.com (2603:10b6:8:9c::19) by
CY3PR12MB9606.namprd12.prod.outlook.com (2603:10b6:930:102::10) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.29; Wed, 28 May
2025 14:14:40 +0000
Received: from DS7PR12MB6095.namprd12.prod.outlook.com
([fe80::c48a:6eaf:96b0:8405]) by DS7PR12MB6095.namprd12.prod.outlook.com
([fe80::c48a:6eaf:96b0:8405%6]) with mapi id 15.20.8769.022; Wed, 28 May 2025
14:14:40 +0000
From: "Limonciello, Mario" <Mario.Limonciello@xxxxxxx>
To: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx>, "Rafael J. Wysocki"
<rjw@xxxxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>
CC: Thomas Gleixner <tglx@xxxxxxxxxxxxx>, "H. Peter Anvin" <hpa@xxxxxxxxx>,
Peter Zijlstra <peterz@xxxxxxxxxxxxx>, "Ugwekar, Dhananjay"
<Dhananjay.Ugwekar@xxxxxxx>, Linux Kernel Mailing List
<linux-kernel@xxxxxxxxxxxxxxx>, Linux Next Mailing List
<linux-next@xxxxxxxxxxxxxxx>
Subject: Re: linux-next: manual merge of the tip tree with the pm tree
Thread-Topic: linux-next: manual merge of the tip tree with the pm tree
Thread-Index: AQHbwvoUOif/c+EZnkiNnTIGpgFimLPOdgUAgBkLSgCAAK5vgA==
Date: Wed, 28 May 2025 14:14:40 +0000
Message-ID: <45b82a09-07a4-4bbd-a71c-d86010542dfe@xxxxxxx>
References: <20250512145517.6e0666e3@xxxxxxxxxxxxxxxx>
<20250512152326.3f2f0226@xxxxxxxxxxxxxxxx>
<20250528135020.79fec9ca@xxxxxxxxxxxxxxxx>
In-Reply-To: <20250528135020.79fec9ca@xxxxxxxxxxxxxxxx>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
user-agent: Mozilla Thunderbird
authentication-results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=amd.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: DS7PR12MB6095:EE_|CY3PR12MB9606:EE_
x-ms-office365-filtering-correlation-id: 0e18d9ce-4593-449d-6751-08dd9df1fc3c
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;ARA:13230040|366016|1800799024|376014|38070700018;
x-microsoft-antispam-message-info:
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
x-forefront-antispam-report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR12MB6095.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(38070700018);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
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
=?utf-8?Q?+qJ4=3D?=
Content-Type: text/plain; charset="utf-8"
Content-ID: <BC968EA40821924FBB41BA76663B375D@xxxxxxxxxxxxxxxxxxxxxxxxx>
Content-Transfer-Encoding: base64
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-OriginatorOrg: amd.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB6095.namprd12.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 0e18d9ce-4593-449d-6751-08dd9df1fc3c
X-MS-Exchange-CrossTenant-originalarrivaltime: 28 May 2025 14:14:40.0953
(UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: ScStfpNMjW0hgjdCo3/i9HeZSGcAIfaQhCWtR8QoMzcgmVWcBG9geVkUNLf9HhKvENbDyndhtj06AdGwXVLoqg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY3PR12MB9606
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
T24gNS8yNy8yNSAyMjo1MCwgU3RlcGhlbiBSb3Rod2VsbCB3cm90ZToNCj4gSGkgYWxsLA0KPiAN
Cj4gT24gTW9uLCAxMiBNYXkgMjAyNSAxNToyMzoyNiArMTAwMCBTdGVwaGVuIFJvdGh3ZWxsIDxz
ZnJAY2FuYi5hdXVnLm9yZy5hdT4gd3JvdGU6DQo+Pg0KPj4gT24gTW9uLCAxMiBNYXkgMjAyNSAx
NDo1NToxNyArMTAwMCBTdGVwaGVuIFJvdGh3ZWxsIDxzZnJAY2FuYi5hdXVnLm9yZy5hdT4gd3Jv
dGU6DQo+Pj4NCj4+PiBUb2RheSdzIGxpbnV4LW5leHQgbWVyZ2Ugb2YgdGhlIHRpcCB0cmVlIGdv
dCBhIGNvbmZsaWN0IGluOg0KPj4+DQo+Pj4gICAgZHJpdmVycy9jcHVmcmVxL2FtZC1wc3RhdGUu
Yw0KPj4+DQo+Pj4gYmV0d2VlbiBjb21taXQ6DQo+Pj4NCj4+PiAgICA2MDhhNzZiNjUyODggKCJj
cHVmcmVxL2FtZC1wc3RhdGU6IEFkZCBzdXBwb3J0IGZvciB0aGUgIlJlcXVlc3RlZCBDUFUgTWlu
IGZyZXF1ZW5jeSIgQklPUyBvcHRpb24iKQ0KPj4+DQo+Pj4gZnJvbSB0aGUgcG0gdHJlZSBhbmQg
Y29tbWl0Og0KPj4+DQo+Pj4gICAgZDc0ODRiYWJkMmM0ICgieDg2L21zcjogUmVuYW1lICdyZG1z
cmxfb25fY3B1KCknIHRvICdyZG1zcnFfb25fY3B1KCknIikNCj4+Pg0KPj4+IGZyb20gdGhlIHRp
cCB0cmVlLg0KPj4+DQo+Pj4gSSBmaXhlZCBpdCB1cCAodGhlIGZvcm1lciByZW1vdmVkIGEgbGlu
ZSB1cGRhdGVkIGJ5IHRoZSBsYXR0ZXIpIGFuZCBjYW4NCj4+PiBjYXJyeSB0aGUgZml4IGFzIG5l
Y2Vzc2FyeS4gVGhpcyBpcyBub3cgZml4ZWQgYXMgZmFyIGFzIGxpbnV4LW5leHQgaXMNCj4+PiBj
b25jZXJuZWQsIGJ1dCBhbnkgbm9uIHRyaXZpYWwgY29uZmxpY3RzIHNob3VsZCBiZSBtZW50aW9u
ZWQgdG8geW91cg0KPj4+IHVwc3RyZWFtIG1haW50YWluZXIgd2hlbiB5b3VyIHRyZWUgaXMgc3Vi
bWl0dGVkIGZvciBtZXJnaW5nLiAgWW91IG1heQ0KPj4+IGFsc28gd2FudCB0byBjb25zaWRlciBj
b29wZXJhdGluZyB3aXRoIHRoZSBtYWludGFpbmVyIG9mIHRoZSBjb25mbGljdGluZw0KPj4+IHRy
ZWUgdG8gbWluaW1pc2UgYW55IHBhcnRpY3VsYXJseSBjb21wbGV4IGNvbmZsaWN0cy4NCj4+DQo+
PiBBY3R1YWxseSBpdCBuZWVkZWQgdGhlIGZpeCB1cCBiZWxvdy4NCj4+DQo+Pg0KPj4gZGlmZiAt
LWNjIGRyaXZlcnMvY3B1ZnJlcS9hbWQtcHN0YXRlLmMNCj4+IGluZGV4IGQ5NmJiM2UyMDJlZSw2
NmZkYzc0ZjEzZWYuLjBkNGMwZGU4OWEwMA0KPj4gLS0tIGEvZHJpdmVycy9jcHVmcmVxL2FtZC1w
c3RhdGUuYw0KPj4gKysrIGIvZHJpdmVycy9jcHVmcmVxL2FtZC1wc3RhdGUuYw0KPj4gQEBAIC0z
ODksMTAgLTM4OSw5ICszODksMTAgQEBAIHN0YXRpYyBpbmxpbmUgaW50IGFtZF9wc3RhdGVfY3Bw
Y19lbmFibA0KPj4gICAgc3RhdGljIGludCBtc3JfaW5pdF9wZXJmKHN0cnVjdCBhbWRfY3B1ZGF0
YSAqY3B1ZGF0YSkNCj4+ICAgIHsNCj4+ICAgIAl1bmlvbiBwZXJmX2NhY2hlZCBwZXJmID0gUkVB
RF9PTkNFKGNwdWRhdGEtPnBlcmYpOw0KPj4gICAtCXU2NCBjYXAxLCBudW1lcmF0b3I7DQo+PiAg
ICsJdTY0IGNhcDEsIG51bWVyYXRvciwgY3BwY19yZXE7DQo+PiAgICsJdTggbWluX3BlcmY7DQo+
PiAgICANCj4+IC0gCWludCByZXQgPSByZG1zcmxfc2FmZV9vbl9jcHUoY3B1ZGF0YS0+Y3B1LCBN
U1JfQU1EX0NQUENfQ0FQMSwNCj4+ICsgCWludCByZXQgPSByZG1zcnFfc2FmZV9vbl9jcHUoY3B1
ZGF0YS0+Y3B1LCBNU1JfQU1EX0NQUENfQ0FQMSwNCj4+ICAgIAkJCQkgICAgICZjYXAxKTsNCj4+
ICAgIAlpZiAocmV0KQ0KPj4gICAgCQlyZXR1cm4gcmV0Ow0KPj4gQEBAIC00MDEsMjIgLTQwMCw2
ICs0MDEsMjIgQEBADQo+PiAgICAJaWYgKHJldCkNCj4+ICAgIAkJcmV0dXJuIHJldDsNCj4+ICAg
IA0KPj4gLSAJcmV0ID0gcmRtc3JsX29uX2NwdShjcHVkYXRhLT5jcHUsIE1TUl9BTURfQ1BQQ19S
RVEsICZjcHBjX3JlcSk7DQo+PiArKwlyZXQgPSByZG1zcnFfb25fY3B1KGNwdWRhdGEtPmNwdSwg
TVNSX0FNRF9DUFBDX1JFUSwgJmNwcGNfcmVxKTsNCj4+ICAgKwlpZiAocmV0KQ0KPj4gICArCQly
ZXR1cm4gcmV0Ow0KPj4gICArDQo+PiAgICsJV1JJVEVfT05DRShjcHVkYXRhLT5jcHBjX3JlcV9j
YWNoZWQsIGNwcGNfcmVxKTsNCj4+ICAgKwltaW5fcGVyZiA9IEZJRUxEX0dFVChBTURfQ1BQQ19N
SU5fUEVSRl9NQVNLLCBjcHBjX3JlcSk7DQo+PiAgICsNCj4+ICAgKwkvKg0KPj4gICArCSAqIENs
ZWFyIG91dCB0aGUgbWluX3BlcmYgcGFydCB0byBjaGVjayBpZiB0aGUgcmVzdCBvZiB0aGUgTVNS
IGlzIDAsIGlmIHllcywgdGhpcyBpcyBhbg0KPj4gICArCSAqIGluZGljYXRpb24gdGhhdCB0aGUg
bWluX3BlcmYgdmFsdWUgaXMgdGhlIG9uZSBzcGVjaWZpZWQgdGhyb3VnaCB0aGUgQklPUyBvcHRp
b24NCj4+ICAgKwkgKi8NCj4+ICAgKwljcHBjX3JlcSAmPSB+KEFNRF9DUFBDX01JTl9QRVJGX01B
U0spOw0KPj4gICArDQo+PiAgICsJaWYgKCFjcHBjX3JlcSkNCj4+ICAgKwkJcGVyZi5iaW9zX21p
bl9wZXJmID0gbWluX3BlcmY7DQo+PiAgICsNCj4+ICAgIAlwZXJmLmhpZ2hlc3RfcGVyZiA9IG51
bWVyYXRvcjsNCj4+ICAgIAlwZXJmLm1heF9saW1pdF9wZXJmID0gbnVtZXJhdG9yOw0KPj4gICAg
CXBlcmYubWluX2xpbWl0X3BlcmYgPSBGSUVMRF9HRVQoQU1EX0NQUENfTE9XRVNUX1BFUkZfTUFT
SywgY2FwMSk7DQo+IA0KPiBUaGlzIGlzIG5vdyBhIGNvbmZsaWN0IGJldHdlZW4gdGhlIHBtIHRy
ZWUgYW5kIExpbnVzJyB0cmVlLg0KPiANCg0KSSB0aG91Z2h0IHRoYXQgSW5nbyBhZGRlZCBhbiBl
eHRyYSAjZGVmaW5lIGZvciBjb21wYXRpYmlsaXR5Pw0KDQo=
Return-Path: <linux-kernel+bounces-665612-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 68D9A41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:15:39 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 985EE4E1ECF
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:15:40 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 5B3482882CA;
Wed, 28 May 2025 14:15:33 +0000 (UTC)
Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 28F0CEAD7;
Wed, 28 May 2025 14:15:28 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.176.79.56
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441732; cv=none; b=qD45FN+rm9chbFjNs2o2egRRwZ4EIja/hX7jVXmYAI4ZRZ+7fomskGPvp5hBbcKwECRhRIjbXjTnTs6DLS7uXnbs3nSoQCr+WB6p/T0TlbAOhzU10EXnn2+j1Qr1JpC2CP+806/+MNTgM26ld4EB0MkPOAK2x4158Ekht/A6hKI=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441732; c=relaxed/simple;
bh=VTSrIEdQEdu3UCYZs59KzmUF3zx9ivQk+muz5QkMSLg=;
h=Date:From:To:CC:Subject:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=Dhj07ydmq4US670kWj1KtZNqC9aDxn9pGMkW+zhJ143rIB6sMK+LWaBiHzl016G7mNUHowdRsseDaQLPQ37UBKHbW5DP+WtDNpcCzK6YT6uq7IKXdTHNXYtCMH39mFbrSJSU7JRMLqUpEznfyLiOBXf2m40p0Tzlj/rWAkUcrrw=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=185.176.79.56
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com
Received: from mail.maildlp.com (unknown [172.18.186.31])
by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4b6s1x6GF0z6J9yF;
Wed, 28 May 2025 22:14:13 +0800 (CST)
Received: from frapeml500008.china.huawei.com (unknown [7.182.85.71])
by mail.maildlp.com (Postfix) with ESMTPS id B8434140113;
Wed, 28 May 2025 22:15:26 +0800 (CST)
Received: from localhost (10.203.177.66) by frapeml500008.china.huawei.com
(7.182.85.71) with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Wed, 28 May
2025 16:15:25 +0200
Date: Wed, 28 May 2025 15:15:24 +0100
From: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
To: Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx>
CC: Marc Zyngier <maz@xxxxxxxxxx>, Thomas Gleixner <tglx@xxxxxxxxxxxxx>, "Rob
Herring" <robh@xxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>, "Conor
Dooley" <conor+dt@xxxxxxxxxx>, Catalin Marinas <catalin.marinas@xxxxxxx>,
Will Deacon <will@xxxxxxxxxx>, Arnd Bergmann <arnd@xxxxxxxx>, "Sascha
Bischoff" <sascha.bischoff@xxxxxxx>, Timothy Hayes <timothy.hayes@xxxxxxx>,
"Liam R. Howlett" <Liam.Howlett@xxxxxxxxxx>, Mark Rutland
<mark.rutland@xxxxxxx>, Jiri Slaby <jirislaby@xxxxxxxxxx>,
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>, <linux-kernel@xxxxxxxxxxxxxxx>,
<devicetree@xxxxxxxxxxxxxxx>
Subject: Re: [PATCH v4 20/26] irqchip/gic-v5: Add GICv5 PPI support
Message-ID: <20250528151524.00006dd9@xxxxxxxxxx>
In-Reply-To: <20250513-gicv5-host-v4-20-b36e9b15a6c3@xxxxxxxxxx>
References: <20250513-gicv5-host-v4-0-b36e9b15a6c3@xxxxxxxxxx>
<20250513-gicv5-host-v4-20-b36e9b15a6c3@xxxxxxxxxx>
X-Mailer: Claws Mail 4.3.0 (GTK 3.24.42; x86_64-w64-mingw32)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: lhrpeml500001.china.huawei.com (7.191.163.213) To
frapeml500008.china.huawei.com (7.182.85.71)
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, 13 May 2025 19:48:13 +0200
Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx> wrote:
> The GICv5 CPU interface implements support for PE-Private Peripheral
> Interrupts (PPI), that are handled (enabled/prioritized/delivered)
> entirely within the CPU interface hardware.
>
> To enable PPI interrupts, implement the baseline GICv5 host kernel
> driver infrastructure required to handle interrupts on a GICv5 system.
>
> Add the exception handling code path and definitions for GICv5
> instructions.
>
> Add GICv5 PPI handling code as a specific IRQ domain to:
>
> - Set-up PPI priority
> - Manage PPI configuration and state
> - Manage IRQ flow handler
> - IRQs allocation/free
> - Hook-up a PPI specific IRQchip to provide the relevant methods
>
> PPI IRQ priority is chosen as the minimum allowed priority by the
> system design (after probing the number of priority bits implemented
> by the CPU interface).
>
> Co-developed-by: Sascha Bischoff <sascha.bischoff@xxxxxxx>
> Signed-off-by: Sascha Bischoff <sascha.bischoff@xxxxxxx>
> Co-developed-by: Timothy Hayes <timothy.hayes@xxxxxxx>
> Signed-off-by: Timothy Hayes <timothy.hayes@xxxxxxx>
> Signed-off-by: Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx>
> Cc: Will Deacon <will@xxxxxxxxxx>
> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Cc: Catalin Marinas <catalin.marinas@xxxxxxx>
> Cc: Marc Zyngier <maz@xxxxxxxxxx>
A few trivial things inline.
J
> ---
> MAINTAINERS | 2 +
> arch/arm64/include/asm/sysreg.h | 19 ++
> drivers/irqchip/Kconfig | 5 +
> drivers/irqchip/Makefile | 1 +
> drivers/irqchip/irq-gic-v5.c | 460 +++++++++++++++++++++++++++++++++++++
> include/linux/irqchip/arm-gic-v5.h | 16 ++
> 6 files changed, 503 insertions(+)
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index d51efac8f9aa21629a0486977fdc76a2eaf5c52f..14d25cd8cd323b8f61b6523784ee65d63f6c1924 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysreg.h
> index e7734f90bb723bfbd8be99f16dd6d6fdc7fa57e8..9d28d408f9c6df24526dd8ecbf3c7d920246b22d 100644
> --- a/arch/arm64/include/asm/sysreg.h
> +++ b/arch/arm64/include/asm/sysreg.h
> @@ -1079,6 +1079,25 @@
>
> #define GCS_CAP(x) ((((unsigned long)x) & GCS_CAP_ADDR_MASK) | \
> GCS_CAP_VALID_TOKEN)
> +/*
> + * Definitions for GICv5 instructions
> + */
> +#define GICV5_OP_GIC_CDDI sys_insn(1, 0, 12, 2, 0)
> +#define GICV5_OP_GIC_CDEOI sys_insn(1, 0, 12, 1, 7)
> +#define GICV5_OP_GICR_CDIA sys_insn(1, 0, 12, 3, 0)
> +
> +/* Shift and mask definitions for GIC CDDI */
Technically just masks (which are shifted) but none the less I wouldn't
expect the comment to say Shift and mask.
> +#define GICV5_GIC_CDDI_TYPE_MASK GENMASK_ULL(31, 29)
> +#define GICV5_GIC_CDDI_ID_MASK GENMASK_ULL(23, 0)
> +
> +/* Shift and mask definitions for GICR CDIA */
Likewise.
> +#define GICV5_GIC_CDIA_VALID_MASK BIT_ULL(32)
Maybe
GICV5_GICR_CDIA_VALID(r) etc given the instruction define name.
> +#define GICV5_GIC_CDIA_VALID(r) FIELD_GET(GICV5_GIC_CDIA_VALID_MASK, r)
Personally I rarely see benefit in wrapping FIELD_GET() in another macro
The bare code is only a little shorter and the FIELD_GET() inline keeps things nice
and clear. It's your code though so keep this if you really want to!
> +#define GICV5_GIC_CDIA_TYPE_MASK GENMASK_ULL(31, 29)
> +#define GICV5_GIC_CDIA_ID_MASK GENMASK_ULL(23, 0)
> +
> +#define gicr_insn(insn) read_sysreg_s(GICV5_OP_GICR_##insn)
> +#define gic_insn(v, insn) write_sysreg_s(v, GICV5_OP_GIC_##insn)
>
> #define ARM64_FEATURE_FIELD_BITS 4
>
> diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig
> index 08bb3b031f23093311cf2f0918ad43e575b581d1..0f268f35b78531775aa233bfc362bfe119a68275 100644
> --- a/drivers/irqchip/Kconfig
> +++ b/drivers/irqchip/Kconfig
> @@ -54,6 +54,11 @@ config ARM_GIC_V3_ITS_FSL_MC
> depends on FSL_MC_BUS
> default ARM_GIC_V3_ITS
>
> +config ARM_GIC_V5
> + bool
> + select IRQ_DOMAIN_HIERARCHY
> + select GENERIC_IRQ_EFFECTIVE_AFF_MASK
> +
> config ARM_NVIC
> bool
> select IRQ_DOMAIN_HIERARCHY
> diff --git a/drivers/irqchip/Makefile b/drivers/irqchip/Makefile
> index 365bcea9a61ff89e2cb41034125b3fc8cd494d81..3f8225bba5f0f9ce5dbb629b6d4782eacf85da44 100644
> --- a/drivers/irqchip/Makefile
> +++ b/drivers/irqchip/Makefile
> @@ -35,6 +35,7 @@ obj-$(CONFIG_ARM_GIC_V3) += irq-gic-v3.o irq-gic-v3-mbi.o irq-gic-common.o
> obj-$(CONFIG_ARM_GIC_V3_ITS) += irq-gic-v3-its.o irq-gic-v4.o irq-gic-v3-its-msi-parent.o
> obj-$(CONFIG_ARM_GIC_V3_ITS_FSL_MC) += irq-gic-v3-its-fsl-mc-msi.o
> obj-$(CONFIG_PARTITION_PERCPU) += irq-partition-percpu.o
> +obj-$(CONFIG_ARM_GIC_V5) += irq-gic-v5.o
> obj-$(CONFIG_HISILICON_IRQ_MBIGEN) += irq-mbigen.o
> obj-$(CONFIG_ARM_NVIC) += irq-nvic.o
> obj-$(CONFIG_ARM_VIC) += irq-vic.o
> diff --git a/drivers/irqchip/irq-gic-v5.c b/drivers/irqchip/irq-gic-v5.c
> new file mode 100644
> index 0000000000000000000000000000000000000000..a50982e5d98816d88e4fca37cc0ac31684fb6c76
> --- /dev/null
> +++ b/drivers/irqchip/irq-gic-v5.c
> @@ -0,0 +1,460 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Copyright (C) 2024-2025 ARM Limited, All Rights Reserved.
> + */
> +
> +#define pr_fmt(fmt) "GICv5: " fmt
> +
> +#include <linux/irqdomain.h>
> +#include <linux/wordpart.h>
> +
> +#include <linux/irqchip.h>
> +#include <linux/irqchip/arm-gic-v5.h>
> +
> +#include <asm/cpufeature.h>
> +#include <asm/exception.h>
> +
> +static u8 pri_bits __ro_after_init = 5;
> +
> +#define GICV5_IRQ_PRI_MASK 0x1f
> +#define GICV5_IRQ_PRI_MI (GICV5_IRQ_PRI_MASK & GENMASK(4, 5 - pri_bits))
> +struct gicv5_chip_data {
> + struct fwnode_handle *fwnode;
> + struct irq_domain *ppi_domain;
> +};
> +
> +static struct gicv5_chip_data gicv5_global_data __read_mostly;
> +enum {
> + PPI_PENDING,
> + PPI_ACTIVE,
> + PPI_HM
> +};
> +
> +static __always_inline u64 read_ppi_sysreg_s(unsigned int irq,
> + const unsigned int which)
Name the enum and use that here rather than an unsigned int?
Might as well give the compiler a hand.
Maybe I'm missing a later use of this that means we can't do that.
This is almost enough combinations to justify a look up table but
I guess the compiler might not figure out how to optimize that.
> +{
> + switch (which) {
> + case PPI_PENDING:
> + return irq < 64 ? read_sysreg_s(SYS_ICC_PPI_SPENDR0_EL1) :
> + read_sysreg_s(SYS_ICC_PPI_SPENDR1_EL1);
> + case PPI_ACTIVE:
> + return irq < 64 ? read_sysreg_s(SYS_ICC_PPI_SACTIVER0_EL1) :
> + read_sysreg_s(SYS_ICC_PPI_SACTIVER1_EL1);
> + case PPI_HM:
> + return irq < 64 ? read_sysreg_s(SYS_ICC_PPI_HMR0_EL1) :
> + read_sysreg_s(SYS_ICC_PPI_HMR1_EL1);
> + default:
> + BUILD_BUG_ON(1);
> + }
> +}
> +
> +static __always_inline void write_ppi_sysreg_s(unsigned int irq, bool set,
> + const unsigned int which)
Likewise - nicer with enum perhaps.
> +{
> + u64 bit = BIT_ULL(irq % 64);
> +
> + switch (which) {
> + case PPI_PENDING:
> + if (set) {
> + if (irq < 64)
> + write_sysreg_s(bit, SYS_ICC_PPI_SPENDR0_EL1);
> + else
> + write_sysreg_s(bit, SYS_ICC_PPI_SPENDR1_EL1);
> + } else {
> + if (irq < 64)
> + write_sysreg_s(bit, SYS_ICC_PPI_CPENDR0_EL1);
> + else
> + write_sysreg_s(bit, SYS_ICC_PPI_CPENDR1_EL1);
> + }
> + return;
> + case PPI_ACTIVE:
> + if (set) {
> + if (irq < 64)
> + write_sysreg_s(bit, SYS_ICC_PPI_SACTIVER0_EL1);
> + else
> + write_sysreg_s(bit, SYS_ICC_PPI_SACTIVER1_EL1);
> + } else {
> + if (irq < 64)
> + write_sysreg_s(bit, SYS_ICC_PPI_CACTIVER0_EL1);
> + else
> + write_sysreg_s(bit, SYS_ICC_PPI_CACTIVER1_EL1);
> + }
> + return;
> + default:
> + BUILD_BUG_ON(1);
> + }
> +}
> +
> +static int gicv5_ppi_irq_get_irqchip_state(struct irq_data *d,
> + enum irqchip_irq_state which,
> + bool *val)
> +{
> + u64 hwirq_id_bit = BIT_ULL(d->hwirq % 64);
> +
> + switch (which) {
> + case IRQCHIP_STATE_PENDING:
> + *val = !!(read_ppi_sysreg_s(d->hwirq, PPI_PENDING) & hwirq_id_bit);
The !! isn't needed AFAICS but maybe adds a small amount of documentation value if
people don't notice that *val is a bool. I'd call it state as per the
definition as that's kind of more obviously boolean than 'val'.
> + return 0;
> + case IRQCHIP_STATE_ACTIVE:
> + *val = !!(read_ppi_sysreg_s(d->hwirq, PPI_ACTIVE) & hwirq_id_bit);
> + return 0;
> + default:
> + pr_debug("Unexpected PPI irqchip state\n");
> + return -EINVAL;
> + }
> +}
> +
> +static void __exception_irq_entry gicv5_handle_irq(struct pt_regs *regs)
> +{
> + bool valid;
> + u32 hwirq;
> + u64 ia;
> +
> + ia = gicr_insn(CDIA);
> + valid = GICV5_GIC_CDIA_VALID(ia);
> +
> + if (!valid)
> + return;
> +
> + /*
> + * Ensure that the CDIA instruction effects (ie IRQ activation) are
> + * completed before handling the interrupt.
> + */
> + gsb_ack();
> +
> + /*
> + * Ensure instruction ordering between an acknowledgment and subsequent
> + * instructions in the IRQ handler using an ISB.
> + */
> + isb();
> +
> + hwirq = FIELD_GET(GICV5_HWIRQ_INTID, ia);
As below - the GICV5_HWIRQ defines other than this one are going from
hwirq to something the GIC cares about - this one is extracting the
software managed hwirq from the CDIA register.
> +
> + handle_irq_per_domain(hwirq);
> +}
> +
> +static void gicv5_cpu_disable_interrupts(void)
> +{
> + u64 cr0;
> +
> + cr0 = FIELD_PREP(ICC_CR0_EL1_EN, 0);
> + write_sysreg_s(cr0, SYS_ICC_CR0_EL1);
This might get more complex later, but if not why not squash
to one line? Given the register name is right there, there
isn't a lot of documentation benefit in having cr0 as
the variable name.
> +}
> +
> +static void gicv5_cpu_enable_interrupts(void)
> +{
> + u64 cr0, pcr;
> +
> + write_sysreg_s(0, SYS_ICC_PPI_ENABLER0_EL1);
> + write_sysreg_s(0, SYS_ICC_PPI_ENABLER1_EL1);
> +
> + gicv5_ppi_priority_init();
> +
> + pcr = FIELD_PREP(ICC_PCR_EL1_PRIORITY, GICV5_IRQ_PRI_MI);
> + write_sysreg_s(pcr, SYS_ICC_PCR_EL1);
> +
> + cr0 = FIELD_PREP(ICC_CR0_EL1_EN, 1);
> + write_sysreg_s(cr0, SYS_ICC_CR0_EL1);
Similar to above, I'd squash into single line.
> +}
> +
> +static int gicv5_starting_cpu(unsigned int cpu)
> +{
> + if (WARN(!gicv5_cpuif_has_gcie(),
> + "GICv5 system components present but CPU does not have FEAT_GCIE"))
Alignment off to my eyes. Either a tab or align with !
> + return -ENODEV;
> +
> + gicv5_cpu_enable_interrupts();
> +
> + return 0;
> +}
> +
> diff --git a/include/linux/irqchip/arm-gic-v5.h b/include/linux/irqchip/arm-gic-v5.h
> new file mode 100644
> index 0000000000000000000000000000000000000000..4ff0ba64d9840c3844671f7850bb3d81ba2eb1b6
> --- /dev/null
> +++ b/include/linux/irqchip/arm-gic-v5.h
> @@ -0,0 +1,16 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +/*
> + * Copyright (C) 2025 ARM Limited, All Rights Reserved.
> + */
> +#ifndef __LINUX_IRQCHIP_ARM_GIC_V5_H
> +#define __LINUX_IRQCHIP_ARM_GIC_V5_H
> +
> +#include <asm/sysreg.h>
> +
> +#define GICV5_HWIRQ_ID GENMASK(23, 0)
> +#define GICV5_HWIRQ_TYPE GENMASK(31, 29)
> +#define GICV5_HWIRQ_INTID GENMASK_ULL(31, 0)
Maybe some hint as to what these are in from their naming?
First two are from hwirq as defined in the irq domain stuff.
Not the 3rd one if I follow this right.
> +
> +#define GICV5_HWIRQ_TYPE_PPI UL(0x1)
> +
> +#endif
>
Return-Path: <linux-kernel+bounces-665613-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 0F56941E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:15:53 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 75E104E2094
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:15:53 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 96756288526;
Wed, 28 May 2025 14:15:48 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="OHUtPla8"
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4CF403BB44
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:15:45 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441747; cv=none; b=ZqfLaSPypx0BF2hyG3muCNKxzJX+eM/J9vAlyKviVq22P7WWKR3+WNRyoLU3npCztz8JgGXCRrFbz4Mnwtopl+3SV6EZrzQdEfCcnK6PmmkmJmcFRB9K+fiBmramfOryNBoy/VE3z9qeSHWHuIU2kPLvZGKuSv9h6VBQobo9wNs=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441747; c=relaxed/simple;
bh=oH5seIgO7GikF7klnt9IfbiX24eWzPldETBsqQsbdgQ=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=Jn5AlRR2duUpaqoJ2Vh3HECgADd1rc/MejV4Ue0raL8TeelFG45ZlRwCjx0JGInaU3j+g0RIq1JZuufA14gY4VEQoOs0ZVAwuS4KdMAL5S6ybhMZYlsZRoSSkfyIKqWBP0TWborlAEYDq+9oMSHyEE9W3GsofQnsnj6Ei/4+5PU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=OHUtPla8; arc=none smtp.client-ip=205.220.168.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com
Received: from pps.filterd (m0279866.ppops.net [127.0.0.1])
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S6XKk1002117
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:15:44 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=
cc:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to; s=qcppdkim1; bh=PKKIFVUFjBYMIYlOdCe4wRf/
gEEm+3cc8dZgEMLxB3Y=; b=OHUtPla8m4LJ8EO6FaK2J/jO34HZo7XpCdeRqzZI
+85e80eqy4DYaXc166F9v9bHMULmTJzO/vm3OT+ECGY1sF/rsa1sgCW0NkxW1KVX
5hS9E8cAAlqLwAegGxNzciC5i6/CJyTSnIpWiX/vRhdnVcj+d1SrqxD94V56PrBP
5if2AJG2tm5HBCF3/j6BQfNTJm3B87B7tQ//3qJstJotYnePjPhAMrxiPYLh3a5W
MtDPDGkYf1t/4Ebb6GDZZS0hqn7plCK00DkYhu+Wq7jX1e0HxIZeB1fGQxM02tfM
pZiITSdgaPzglE4bBiaXpe61OKXuSjQgwXxo1Gk6efO0QA==
Received: from mail-il1-f200.google.com (mail-il1-f200.google.com [209.85.166.200])
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46wavkv8c0-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT)
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:15:44 +0000 (GMT)
Received: by mail-il1-f200.google.com with SMTP id e9e14a558f8ab-3dc8ab0ac67so79087055ab.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 07:15:44 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748441743; x=1749046543;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=PKKIFVUFjBYMIYlOdCe4wRf/gEEm+3cc8dZgEMLxB3Y=;
b=vAR11XYT95ljFZetCbpGsntxiMqVwy+xbE49Pe5l7dqx3Ij4Vddts+p2JHkflE/xbl
g7Dp3Z2kH6d69p+969GvmOuANw21U64rWDnyaGCL+quavSiDP525QFO47aUppF9Q9Gme
0XMTujWm6ymVNExRGRCGXBRJBpwSIfQ70Z/n23lsp7R31Z9xhY07zl1Dt9ht4mhRkXUV
QTzwjLx97bvq3dtJygNkofE1VBiMK/ltw+invglLoZv/70wDZPZ88BuPT7Z4tXEMqPDF
MBpzP8ilwMY2BKJBJspUuLIv3FDy/MuUp+havALI7mQxUdPRGb+Xn8BnvwMcATaFzJiJ
5x/w==
X-Forwarded-Encrypted: i=1; AJvYcCUJdK4lIO2NCji1DNV/pBTNmUQbkW6haaFgerqPgzAwDo1md13+avqMYYIbufN1UrlXgakSRRYhwJLiukY=@vger.kernel.org
X-Gm-Message-State: AOJu0YzNfUfOG6lifZ1lsSVtwpC+yJIOajytQDpCRykWqoCDIhGgFN2s
Sj3TIP11vNOFlmes6QkhHY9UWLJmWDyWmqF+cEOP/KjwYkUtY5sJk5JBkWOksgrYTKKj4KTPquS
FRIvmDMAKiSJV2jwMbStTpqPMeIStyVxUV2sQBt+lcdx0fQbKTYLXIWpiLn6Dl+0PIjI=
X-Gm-Gg: ASbGncsuRurd3O/KidVfIb6xIm0fZXRrL4eF0uTYwZWN4l85TjGtue9KpI96lR/alMw
zn0x219CxekQcXh802G2K1W4ydzstP69AOBvwZP0kt2z2gbki1VP2wGDvZ2FmpsUrb6KWGw3Wr8
1iIvmMVeAgB+q6603XRo4o+tF1ER80NoDEWTnAQQqBf9HEpFxdoZS+fg2/xtT1apNUDTya+dPbq
khj/ihkBXQhJ8PgBo7muhMuO6IDHKUHh4aNhH7tmAPMIWfYbEI1tYg0BKo+wwLBHPVai8EibY8z
o8zcPJ3J3+ihMGuBNQQxyy8OFKyJliY0Ue5UCrFhSX/fR2uj22uhBqPiPtq+qf7gJEO1qtSaTuM
=
X-Received: by 2002:a05:6e02:1c0c:b0:3db:754c:63b with SMTP id e9e14a558f8ab-3dc9b6d3b48mr187418835ab.12.1748441736797;
Wed, 28 May 2025 07:15:36 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IFO/qLKlIuHWvcnnRm0piuVuCFI+VpDYEPSMU6XOu9GU61UnMzyorzXe9JnyOOAIzHoUfmr3Q==
X-Received: by 2002:a05:6e02:1c0c:b0:3db:754c:63b with SMTP id e9e14a558f8ab-3dc9b6d3b48mr187412855ab.12.1748441732235;
Wed, 28 May 2025 07:15:32 -0700 (PDT)
Received: from eriador.lumag.spb.ru (2001-14ba-a0c3-3a00--7a1.rev.dnainternet.fi. [2001:14ba:a0c3:3a00::7a1])
by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5532f62a635sm297843e87.86.2025.05.28.07.15.29
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 07:15:31 -0700 (PDT)
Date: Wed, 28 May 2025 17:15:28 +0300
From: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
To: Johan Hovold <johan@xxxxxxxxxx>
Cc: Bryan O'Donoghue <bod@xxxxxxxxxx>,
Vikash Garodia <quic_vgarodia@xxxxxxxxxxx>,
Stanimir Varbanov <stanimir.k.varbanov@xxxxxxxxx>,
Mauro Carvalho Chehab <mchehab@xxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Konrad Dybcio <konradybcio@xxxxxxxxxx>,
Bjorn Andersson <andersson@xxxxxxxxxx>, linux-media@xxxxxxxxxxxxxxx,
linux-arm-msm@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, Johan Hovold <johan+linaro@xxxxxxxxxx>
Subject: Re: [PATCH 0/8] Reup: SM8350 and SC8280XP venus support
Message-ID: <d7gvn7awccrhg4ie2c3vicxpknqteo27rxnlh4lfsecobz2zpp@vpwug3qhufkk>
References: <20250304-b4-linux-media-comitters-sc8280xp-venus-v1-0-279c7ea55493@xxxxxxxxxx>
<8cfaeb25-2657-9df4-5cea-018aad62f579@xxxxxxxxxxx>
<it3njgklhnedjzojafuxpjy3o5zfulgdclweyobv7kjgtpjmzx@6opje7yms4yg>
<1dd6e03d-09be-4853-741a-4fb47b7619a0@xxxxxxxxxxx>
<70891a99-d2ca-4fd3-a88d-2f66a9a78f66@xxxxxxxxxx>
<aDWZmJMIOVyzu1Lc@xxxxxxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <aDWZmJMIOVyzu1Lc@xxxxxxxxxxxxxxxxxxxx>
X-Proofpoint-GUID: j8K6mZk0xqFX5l18x5tXIS6FZWQ1TDdd
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEyNSBTYWx0ZWRfX6YBwuDep2d4s
3h5ZaQlUZh9unRZR6nVpL8FP/9OdXQ8hqzAeQ7TI17tDhcBUyfYTZxjQbFq2WTZQkMNxY0F/mkX
yEOXtGvl493nlXSJzEQ7mEa852qDru8RQtOpExB/K8GcqA4xMPeVOV4KS98P+P6gW7mAzQ01zbS
Ww1wSYJ4olUWzzKlxYwX34S1L2H6t46DcKqsjqo4ZqpuHadlbmjXo5RLMWn7XFWpJDsszsatdV9
Y15Z90tdHilywUgFT6fcJkNudY2DJsYIljeem+SzP16iEd6GKLMtIZfMmHMMTxltXjouj1lt8Fj
nOcZSaBbBRxMZ1cwEPtVFTCq5KzqhUvpxGY6rFMq+rc4nikhWOEJmLPFHOG+sTbdqps2B7DXNY0
l/uHoFMEdX1qB4kFXStQv8vEHZ2WyvKc/f3txp3A7cJ68oK8CciMZkUP7HDP9pPxhKxlPOcO
X-Authority-Analysis: v=2.4 cv=fMk53Yae c=1 sm=1 tr=0 ts=68371a90 cx=c_pps
a=i7ujPs/ZFudY1OxzqguLDw==:117 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10
a=dt9VzEwgFbYA:10 a=NEAV23lmAAAA:8 a=kLdZMHmJudiyi1bg_n4A:9 a=CjuIK1q_8ugA:10
a=Ti5FldxQo0BAkOmdeC3H:22
X-Proofpoint-ORIG-GUID: j8K6mZk0xqFX5l18x5tXIS6FZWQ1TDdd
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_07,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
malwarescore=0 adultscore=0 impostorscore=0 phishscore=0 suspectscore=0
spamscore=0 priorityscore=1501 lowpriorityscore=0 clxscore=1015 mlxscore=0
mlxlogscore=999 bulkscore=0 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280125
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 12:53:12PM +0200, Johan Hovold wrote:
> Hi Bryan,
>
> On Fri, Apr 04, 2025 at 10:02:47AM +0100, Bryan O'Donoghue wrote:
> > On 04/04/2025 06:24, Vikash Garodia wrote:
> > >>> How different is this from sm8250 which is already enabled on iris driver ?
> > >> As far as I remember, SM8250 support in Iris did not reach
> > >> feature-parity yet. So in my opinion it is fine to add new platforms to
> > >> the Venus driver, that will later migrate to the Iris driver.
> > > I would say, from decoder side all codecs are there now on Iris. H264 merged,
> > > while h265 and VP9 dec are posted as RFC, there is one compliance failure which
> > > is under debug to post them as regular patches.
> > > If we are mainly looking for decode usecases, then we should be on Iris.
> > > Preference would be to stay on Iris, otherwise we would have that extra ask to
> > > port it later from venus to iris.
> >
> > Right now venus represents 9/20 - 45% of the patches being churned for
> > sc8280xp.
> >
> > https://github.com/jhovold/linux/tree/wip/sc8280xp-6.14-rc7
> >
> > This is a good debate to have, however my memory of what we collectively
> > agreed both in public and private was to continue to merge new silicon
> > <= HFI6XX into venus unless and until iris hit feature parity for HFI6XX
> > and to continue with venus at that point for < HFI6XX.
> >
> > So merging sc8280xp - HFI6XX is consistent with our agreement, the right
> > thing to do for our users and a big win in terms of technical debt
> > reduction.
> >
> > I will post an update to this series ASAP.
>
> It seems things may be moving again on the firmware front, so could you
> please respin this series so we can have video acceleration support for
> the X13s in 6.17?
And thanks to Mark, we indeed now have qcvss8280.mbn in linux-firmware.
It would be nice to get driver bits reposted and hopefully merged
--
With best wishes
Dmitry
Return-Path: <linux-kernel+bounces-665614-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id CBBC941E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:16:08 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 0715C3BDBAE
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:15:46 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C26DF288C8B;
Wed, 28 May 2025 14:15:54 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Snu4wPcE"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 02F3A288C3E
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:15:53 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441754; cv=none; b=WnzWDp66xn9RPc2oxOh4wK4nUnioss/Q7Av89+AitXlqbkFgy9Vh/pGnYK1vZ51z3sjukBbbDHL1nV9kIJ8HwaiXXgutFi4qw9lHclx98F8EoaBoaxRZ81IEts4wnao0GQ29ZqiWojv7S9mpYRscmHnigJnk9PYuULIb0dPXgfs=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441754; c=relaxed/simple;
bh=DBQy4jo6CMhz0+laP75ph4Nt2uY9aLQkxx8p/xzxpBc=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=lHrrW9zV5vmL4nvNIOtpS1KTQu4bCaCdokaIqCzwwuBLU1mIkfExhciubpLuUHe3gLbnV83BC9N575ZRmQeqSEwzwKwf0KYPC7h5Iy9RKBT2iIt8w7VwpjAHZ5dhbnsD+DmovviO3sIzBcqFVk73a5prkHmCIWX3DHT9uxdOPJM=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Snu4wPcE; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPS id 74E9EC4CEE3;
Wed, 28 May 2025 14:15:53 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748441753;
bh=DBQy4jo6CMhz0+laP75ph4Nt2uY9aLQkxx8p/xzxpBc=;
h=From:Date:Subject:To:Cc:Reply-To:From;
b=Snu4wPcEKodZc/fM5KOXDiBSAUe/HfStv/yW0409crV2xy9qPk2jJ9pGd4m01Aa7C
DBaEEGO5ZGs72J4i+k21zjdt00G3h7hwqTErJH04OBUiQpqRVZPc9FHkB6axLUhqkk
xsvqqrLSxG05UDBxjVVqopN/ywXv/4JmUABEnhJyiEYw95UvYJaWJ7M5d/DesCdEFZ
gmoRrfauKkHg/MrtuTtXMYDAPT/BhQAwWxvlrToZHp6dCAVirJYAw5rh2LVG2FDokT
nY8TnIyqTD5KwOPvewccTZZYzTm+QHZdiJK2URX+srRN2Lgf2itGt08eZyg7n5KPJ7
5Mqi5yrHnuK/A==
Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1])
by smtp.lore.kernel.org (Postfix) with ESMTP id 69CE4C5AD49;
Wed, 28 May 2025 14:15:53 +0000 (UTC)
From: Lorenzo Stoakes via B4 Relay <devnull+lorenzo.stoakes.oracle.com@xxxxxxxxxx>
Date: Wed, 28 May 2025 15:15:39 +0100
Subject: [PATCH] tools/testing/vma: add missing function stub
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20250528-fix-vma-test-v1-1-c8a5f533b38f@xxxxxxxxxx>
X-B4-Tracking: v=1; b=H4sIAIoaN2gC/6tWKk4tykwtVrJSqFYqSi3LLM7MzwNyDHUUlJIzE
vPSU3UzU4B8JSMDI1MDUyML3bTMCt2y3ETdktTiEl1T8yRDY4s0I4s0EzMloJaColSgPNi46Nj
aWgBi0eRgXgAAAA==
X-Change-ID: 20250528-fix-vma-test-57b138f28f46
To: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,
"Liam R. Howlett" <Liam.Howlett@xxxxxxxxxx>,
Vlastimil Babka <vbabka@xxxxxxx>, Jann Horn <jannh@xxxxxxxxxx>,
Pedro Falcato <pfalcato@xxxxxxx>
Cc: linux-mm@xxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>
X-Mailer: b4 0.14.2
X-Developer-Signature: v=1; a=openpgp-sha256; l=1135;
i=lorenzo.stoakes@xxxxxxxxxx; h=from:subject:message-id;
bh=/hWcNyu2zzVdPtWKaUfZnsHVgBszi7eCqsh7pAsYZzg=;
b=owGbwMvMwCUmzHegU0pdXZrxtFoSQ4a51Iwc4TXuqSqOcrbiiccWGMd4nwi7cCZ+zctrbQE/v
ldHFU/sKGVhEONikBVTZDlcaRzdE7ii7ojXo0yYOaxMIEMYuDgFYCLbNzEyrLyw98zFvw9i+V4G
vqiOOf/6x7RIl2cvmMVWS8k0nG179IGR4Z/AucNunizR/YtdqrsjOWUl3s0703VzacOL3RIxQnb
z+QE=
X-Developer-Key: i=lorenzo.stoakes@xxxxxxxxxx; a=openpgp;
fpr=5BEF5562908102FB56727B7CC52D7AFE85F25509
X-Endpoint-Received: by B4 Relay for lorenzo.stoakes@xxxxxxxxxx/default
with auth_id=414
X-Original-From: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>
Reply-To: lorenzo.stoakes@xxxxxxxxxx
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>
The hugetlb fix introduced in commit ee40c9920ac2 ("mm: fix copy_vma()
error handling for hugetlb mappings") mistakenly did not provide a stub for
the VMA userland testing, which results in a compile error when trying to
build this.
Provide this stub to resolve the issue.
---
Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>
---
tools/testing/vma/vma_internal.h | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/tools/testing/vma/vma_internal.h b/tools/testing/vma/vma_internal.h
index f6e45e62da3a6ee007b7431573f27ef5c2533865..441feb21aa5a92b7edddb07258c7f368171de15b 100644
--- a/tools/testing/vma/vma_internal.h
+++ b/tools/testing/vma/vma_internal.h
@@ -1461,4 +1461,9 @@ static inline int __call_mmap_prepare(struct file *file,
return file->f_op->mmap_prepare(desc);
}
+static inline void fixup_hugetlb_reservations(struct vm_area_struct *vma)
+{
+ (void)vma;
+}
+
#endif /* __MM_VMA_INTERNAL_H */
---
base-commit: 1637eadc7fdf2fa4069a149b1e836656a3b64150
change-id: 20250528-fix-vma-test-57b138f28f46
Best regards,
--
Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>
Return-Path: <linux-kernel+bounces-665615-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 6885D41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:16:39 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 6F3411BC5AE6
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:16:52 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 5422627AC50;
Wed, 28 May 2025 14:16:34 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="qjpKfob7"
Received: from out-171.mta0.migadu.com (out-171.mta0.migadu.com [91.218.175.171])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7939C286892
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:16:31 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.171
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441793; cv=none; b=Cf3TVbo+Dkn/5q1BUAoMN6O8HnxBOfNBptRbnWhFecwoR+01rQHO7G2LaN1pC0OOSgBZ8yz0GsLj3mfggXRqyJxF27iVw7vO0RX4vLXA/YIdEKUuVNQTrVOKJ723NcdfUSEgZmzwvzhCVQs8HLlnLtR8CCwlWAH+lPHm/21FVc4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441793; c=relaxed/simple;
bh=BaZazWUNwzpYDJYIgR7YjT89yC060LzmEBjX/G4NG70=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=KBzcWSJDIDWQa3DPKQqyPzboZOsEKfcCgHuoilhLm89/lDc6bF8RcyQ6c0VSdC2TKiBLKTzGYueYwnPWfKUPSo8APo/xBnhNYDI9iWdv33WwSTa19441GoUSCV00jmvuahAbafSTSWmh0nMvPg1ddabGYgy4laQ/Fxfx9VTLSw4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=qjpKfob7; arc=none smtp.client-ip=91.218.175.171
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev
Message-ID: <ace8be22-3dba-41b0-81f0-bf6d661b4343@xxxxxxxxx>
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1;
t=1748441779;
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:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=c5mLYhkH15cgSjxuuv6l4kYe/fzzBQUwpR9u2pfZOy8=;
b=qjpKfob7Z9nwJXoxx5GUB/npEZom5q2cVoX+WSrhUvhCp38miksFI15n7HED2ElCpa+Gzh
rMarA3QV5uYksrG/9PUOkqwZt07frFarx52lcp28KkCgCK6TwCddvcYR3TQi0qP59jouqi
jrs60IDKyBiuILyERrfCfy38ldk8MHk=
Date: Wed, 28 May 2025 07:16:11 -0700
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Subject: Re: [PATCH v3 9/9] RISC-V: KVM: Upgrade the supported SBI version to
3.0
To: Andrew Jones <ajones@xxxxxxxxxxxxxxxx>,
=?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= <rkrcmar@xxxxxxxxxxxxxxxx>
Cc: Atish Patra <atish.patra@xxxxxxxxx>, Anup Patel <anup@xxxxxxxxxxxxxx>,
Will Deacon <will@xxxxxxxxxx>, Mark Rutland <mark.rutland@xxxxxxx>,
Paul Walmsley <paul.walmsley@xxxxxxxxxx>, Palmer Dabbelt
<palmer@xxxxxxxxxxx>, Mayuresh Chitale <mchitale@xxxxxxxxxxxxxxxx>,
linux-riscv@xxxxxxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, Palmer Dabbelt <palmer@xxxxxxxxxxxx>,
kvm@xxxxxxxxxxxxxxx, kvm-riscv@xxxxxxxxxxxxxxxxxxx,
linux-riscv <linux-riscv-bounces@xxxxxxxxxxxxxxxxxxx>
References: <20250522-pmu_event_info-v3-0-f7bba7fd9cfe@xxxxxxxxxxxx>
<20250522-pmu_event_info-v3-9-f7bba7fd9cfe@xxxxxxxxxxxx>
<DA3KSSN3MJW5.2CM40VEWBWDHQ@xxxxxxxxxxxxxxxx>
<61627296-6f94-45ea-9410-ed0ea2251870@xxxxxxxxx>
<DA5YWWPPVCQW.22VHONAQHOCHE@xxxxxxxxxxxxxxxx>
<20250526-224478e15ee50987124a47ac@orel>
Content-Language: en-US
X-Report-Abuse: Please report any abuse attempt to abuse@xxxxxxxxxx and include these headers.
From: Atish Patra <atish.patra@xxxxxxxxx>
In-Reply-To: <20250526-224478e15ee50987124a47ac@orel>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Migadu-Flow: FLOW_OUT
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 5/26/25 4:13 AM, Andrew Jones wrote:
> On Mon, May 26, 2025 at 11:00:30AM +0200, Radim KrÄ?máÅ? wrote:
>> 2025-05-23T10:16:11-07:00, Atish Patra <atish.patra@xxxxxxxxx>:
>>> On 5/23/25 6:31 AM, Radim KrÄ?máÅ? wrote:
>>>> 2025-05-22T12:03:43-07:00, Atish Patra <atishp@xxxxxxxxxxxx>:
>>>>> Upgrade the SBI version to v3.0 so that corresponding features
>>>>> can be enabled in the guest.
>>>>>
>>>>> Signed-off-by: Atish Patra <atishp@xxxxxxxxxxxx>
>>>>> ---
>>>>> diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h
>>>>> -#define KVM_SBI_VERSION_MAJOR 2
>>>>> +#define KVM_SBI_VERSION_MAJOR 3
>>>> I think it's time to add versioning to KVM SBI implementation.
>>>> Userspace should be able to select the desired SBI version and KVM would
>>>> tell the guest that newer features are not supported.
>
> We need new code for this, but it's a good idea.
>
>>>
>>> We can achieve that through onereg interface by disabling individual SBI
>>> extensions.
>>> We can extend the existing onereg interface to disable a specific SBI
>>> version directly
>>> instead of individual ones to save those IOCTL as well.
>>
>> Yes, I am all in favor of letting userspace provide all values in the
>> BASE extension.
>
We already support vendorid/archid/impid through one reg. I think we
just need to add the SBI version support to that so that user space can
set it.
> This is covered by your recent patch that provides userspace_sbi.
Why do we need to invent new IOCTL for this ? Once the user space sets
the SBI version, KVM can enforce it.
> With that, userspace can disable all extensions that aren't
> supported by a given spec version, disable BASE and then provide
> a BASE that advertises the version it wants. The new code is needed
> for extensions that userspace still wants KVM to accelerate, but then
> KVM needs to be informed it should deny all functions not included in
> the selected spec version.
>
> Thanks,
> drew
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@xxxxxxxxxxxxxxxxxxx
> http://lists.infradead.org/mailman/listinfo/linux-riscv
Return-Path: <linux-kernel+bounces-665616-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id EF1C841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:18:44 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 2EC5D4E3F0F
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:18:44 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 93A69288C00;
Wed, 28 May 2025 14:18:33 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=blackhole.kfki.hu header.i=@blackhole.kfki.hu header.b="InFNyCxO"
Received: from smtp-out.kfki.hu (smtp-out.kfki.hu [148.6.0.50])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id AB05919B3CB;
Wed, 28 May 2025 14:18:29 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.6.0.50
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441912; cv=none; b=ragr9AO8dzirnoF3oNkkWquf+3u0xkaKp+X8jKwviR4UlsDng9jH4yX/uTnoXSM+HCn47xRTC5cyACxYlTmlWxllT7NL7VsY2d9GHWYRTPRzc7eGt+uaaepsTPhAZylpHpx2xxbeYqQIDDUoY15JgMh4pVIIFfcBfaDq6S336DU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441912; c=relaxed/simple;
bh=6M/v2fzkiyJF+7ss0mIkL0h8Qze2igYDZv1WDkBUazM=;
h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:
MIME-Version:Content-Type; b=C7SVmnp6cAj5iq4OTILXwEj0GiHF7rZlZkD+6QDy5QUk3zdxJ1c1/a5OuBFL9gXAIJp6/IT/KCVD6hDCqXVOmQuoSsujOqJzHWVAkXMz2GO+WlTU9pIINFxLSd7/zBMGRXR5fbd+/B6FJjJMmpRX4awUewo7MxaLmZi1DAE2YK0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=blackhole.kfki.hu; spf=pass smtp.mailfrom=blackhole.kfki.hu; dkim=pass (1024-bit key) header.d=blackhole.kfki.hu header.i=@blackhole.kfki.hu header.b=InFNyCxO; arc=none smtp.client-ip=148.6.0.50
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=blackhole.kfki.hu
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=blackhole.kfki.hu
Received: from localhost (localhost [127.0.0.1])
by smtp1.kfki.hu (Postfix) with ESMTP id D54315C001C8;
Wed, 28 May 2025 16:18:27 +0200 (CEST)
Authentication-Results: smtp012.wigner.hu (amavis); dkim=pass (1024-bit key)
reason="pass (just generated, assumed good)" header.d=blackhole.kfki.hu
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
blackhole.kfki.hu; h=content-id:mime-version:references
:message-id:in-reply-to:from:from:date:date:received:received
:received:received; s=20151130; t=1748441906; x=1750256307; bh=N
4WEikdHsV0G9jD6Juw+YqI0CSAD7KKrObbmYIgn/Z4=; b=InFNyCxO+uwwuOkK6
PqFvwU3qeI/DLV1AFD3T5q7T25ujO6H7mgik6SI8+/p7jN5WDS3tzd21A7hiAxkF
5e9RVZYw5OcomMYf7R1mk6rj1r9xIRnmFMCvkB34TZxMQrF8JHauogac7OxPwmdl
GmF8QJ6Mrxhd9DKEyonje9UZko=
X-Virus-Scanned: Debian amavis at smtp1.kfki.hu
Received: from smtp1.kfki.hu ([127.0.0.1])
by localhost (smtp1.kfki.hu [127.0.0.1]) (amavis, port 10026) with ESMTP
id OcjPxtQOXhh1; Wed, 28 May 2025 16:18:26 +0200 (CEST)
Received: from blackhole.kfki.hu (blackhole.szhk.kfki.hu [IPv6:2001:738:5001:1::240:2])
by smtp1.kfki.hu (Postfix) with ESMTP id DFE855C001C0;
Wed, 28 May 2025 16:18:25 +0200 (CEST)
Received: by blackhole.kfki.hu (Postfix, from userid 1000)
id 98F6F34316A; Wed, 28 May 2025 16:18:25 +0200 (CEST)
Received: from localhost (localhost [127.0.0.1])
by blackhole.kfki.hu (Postfix) with ESMTP id 97B8A343169;
Wed, 28 May 2025 16:18:25 +0200 (CEST)
Date: Wed, 28 May 2025 16:18:25 +0200 (CEST)
From: Jozsef Kadlecsik <kadlec@xxxxxxxxxxxxxxxxx>
To: ying chen <yc1082463@xxxxxxxxx>
cc: Eric Dumazet <edumazet@xxxxxxxxxx>, Florian Westphal <fw@xxxxxxxxx>,
pablo@xxxxxxxxxxxxx, kadlec@xxxxxxxxxxxxx, davem@xxxxxxxxxxxxx,
kuba@xxxxxxxxxx, pabeni@xxxxxxxxxx, netfilter-devel@xxxxxxxxxxxxxxx,
coreteam@xxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [bug report, linux 6.15-rc4] A large number of connections in
the SYN_SENT state caused the nf_conntrack table to be full.
In-Reply-To: <CAN2Y7hxZdWLfd34LPzhUPZJ-oMksajLMVt5K8B6Gy70e9TXMpw@xxxxxxxxxxxxxx>
Message-ID: <c9255252-3b6a-886a-5959-d59d0bb4640e@xxxxxxxxxxxxxxxxx>
References: <CAN2Y7hxscai7JuC0fPE8DZ3QOPzO_KsE_AMCuyeTYRQQW_mA2w@xxxxxxxxxxxxxx> <aDcLIh2lPkAWOVCI@xxxxxxxxx> <CAN2Y7hzKd+VxWy56q9ad8xwCcHPy5qoEaswZapnF87YkyYMcsA@xxxxxxxxxxxxxx> <CANn89iLG4mgzHteS7ARwafw-5KscNv7vBD3zM9J6yZwDq+RbcQ@xxxxxxxxxxxxxx>
<5611b12b-d560-cbb8-1d74-d935f60244dd@xxxxxxxxxxxxxxxxx> <CAN2Y7hxZdWLfd34LPzhUPZJ-oMksajLMVt5K8B6Gy70e9TXMpw@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="110363376-1127963621-1748441824=:6759"
Content-ID: <d964ed54-d089-1618-352e-efd16b44b2df@xxxxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
--110363376-1127963621-1748441824=:6759
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-ID: <c7035ed8-91a2-96cf-8334-b403f81ddcd1@xxxxxxxxxxxxxxxxx>
Content-Transfer-Encoding: quoted-printable
On Wed, 28 May 2025, ying chen wrote:
> On Wed, May 28, 2025 at 9:45=E2=80=AFPM Jozsef Kadlecsik
> <kadlec@xxxxxxxxxxxxxxxxx> wrote:
>>
>> On Wed, 28 May 2025, Eric Dumazet wrote:
>>
>>> On Wed, May 28, 2025 at 6:26=E2=80=AFAM ying chen <yc1082463@xxxxxxxx=
m> wrote:
>>>>
>>>> On Wed, May 28, 2025 at 9:10=E2=80=AFPM Florian Westphal <fw@strlen.=
de> wrote:
>>>>>
>>>>> ying chen <yc1082463@xxxxxxxxx> wrote:
>>>>>> Hello all,
>>>>>>
>>>>>> I encountered an "nf_conntrack: table full" warning on Linux 6.15-=
rc4.
>>>>>> Running cat /proc/net/nf_conntrack showed a large number of
>>>>>> connections in the SYN_SENT state.
>>>>>> As is well known, if we attempt to connect to a non-existent port,=
the
>>>>>> system will respond with an RST and then delete the conntrack entr=
y.
>>>>>> However, when we frequently connect to non-existent ports, the
>>>>>> conntrack entries are not deleted, eventually causing the nf_connt=
rack
>>>>>> table to fill up.
>>>>>
>>>>> Yes, what do you expect to happen?
>>>> I understand that the conntrack entry should be deleted immediately
>>>> after receiving the RST reply.
>>>
>>> Then it probably hints that you do not receive RST for all your SYN
>>> packets.
>>
>> And Eric has got right: because the states are in SYN_SENT then either=
the
>> RST packets were not received or out of the window or invalid from oth=
er
>> reasons.
> I also suspect it's due to being "out of the window", but I'm not sure =
why.
tcpdump of the traffic from the targeted machine with both the SYN and RS=
T=20
packets could help (raw pcap or at least the output with absolute seqs).
Best regards,
Jozsef
--110363376-1127963621-1748441824=:6759--
Return-Path: <linux-kernel+bounces-665617-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 38B9B41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:19:11 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id EDF5E1BC4239
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:19:23 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id D9CDC288C1E;
Wed, 28 May 2025 14:18:58 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=mailbox.org header.i=@mailbox.org header.b="TJnJr1yD"
Received: from mout-p-202.mailbox.org (mout-p-202.mailbox.org [80.241.56.172])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B8C4413AF2;
Wed, 28 May 2025 14:18:55 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=80.241.56.172
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441937; cv=none; b=uiJ+Ir9u1lvau6hkwg+8uhE19adYBCq13UtttWlTqmPdxO8sFP79c0vxi8LNv+6xRSAFhhiEQERLCP8E+KghptFHkn5I3IgC5ftDiPhCLVweAlAJZG1AXbVyO59poD9pZJJ6g/8W7mCQi+dH8hBlrWMICvgRW1nexL8MH2mbInA=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441937; c=relaxed/simple;
bh=zJx6vFfwz0MYTEHthiU61dRG76ot+J1AonqUVhsuUz0=;
h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References:
Content-Type:MIME-Version; b=evvXz9IVJOAQwf6nNXsbCSpa+V4ZasYurtbf3PymtNeOLR3sROJtf3rAHjytJXLyYiVzMosHd+JQsxE9ovrzKWswigpM55NoxmcpueNIeBe04UCPGfw6e+TCbxyanGCGUHvLg8kdbr4MEAHK9zsycdRpJOXqPfSwWwyvm7YtPZM=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=mailbox.org; spf=pass smtp.mailfrom=mailbox.org; dkim=pass (2048-bit key) header.d=mailbox.org header.i=@mailbox.org header.b=TJnJr1yD; arc=none smtp.client-ip=80.241.56.172
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=mailbox.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mailbox.org
Received: from smtp102.mailbox.org (smtp102.mailbox.org [IPv6:2001:67c:2050:b231:465::102])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(No client certificate requested)
by mout-p-202.mailbox.org (Postfix) with ESMTPS id 4b6s792zx3z9swD;
Wed, 28 May 2025 16:18:45 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailbox.org; s=mail20150812;
t=1748441925; h=from:from:reply-to:reply-to:subject:subject:date:date:
message-id:message-id:to:to:cc:cc:mime-version:mime-version:
content-type:content-type:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=zJx6vFfwz0MYTEHthiU61dRG76ot+J1AonqUVhsuUz0=;
b=TJnJr1yDLKr7T7cAmicStZcRlA8JXH9j13Oh8esWSeeepjouJBcnEQdg5nD8+CN6fFcVRD
nyrSXhLPlMvsOWb5dmXyV57DQWLs4lCg8h21dj0UV1gLhSQ+PqoHzrs0MktM3kcTQOv3Tz
VBqJRrdR/oGhIs7WY3mzAjxbRQUhpSTKVqH+6d5h7HpRjGCQIeCsy3PugkdN2ZlS2D8x5G
Ft+kRUI2xzuE9c13mTzMYRXoC4wd517ZaJxnNNCcHX1K9j00VDmjGPj748+hdBLFjt/1kN
JiF1Ken79t+9APOBjhHOqbJPNBQOCon9xR24tXyu9T4k9QG4wIkinlKw8bWbog==
Message-ID: <f46f73db6594c7cd40149e35da9f188baa5961a2.camel@xxxxxxxxxxx>
Subject: Re: [PATCH v11 00/10] Improve gpu_scheduler trace events + UAPI
From: Philipp Stanner <phasta@xxxxxxxxxxx>
Reply-To: phasta@xxxxxxxxxx
To: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@xxxxxxx>
Cc: Christian =?ISO-8859-1?Q?K=F6nig?= <christian.koenig@xxxxxxx>,
=?ISO-8859-1?Q?Ma=EDra?= Canal <mcanal@xxxxxxxxxx>, Thomas
=?ISO-8859-1?Q?Hellstr=F6m?= <thomas.hellstrom@xxxxxxxxxxxxxxx>, Abhinav
Kumar <quic_abhinavk@xxxxxxxxxxx>, Alex Deucher
<alexander.deucher@xxxxxxx>, Boris Brezillon
<boris.brezillon@xxxxxxxxxxxxx>, Danilo Krummrich <dakr@xxxxxxxxxx>, David
Airlie <airlied@xxxxxxxxx>, Dmitry Baryshkov <lumag@xxxxxxxxxx>, Felix
Kuehling <Felix.Kuehling@xxxxxxx>, Frank Binns <frank.binns@xxxxxxxxxx>,
Jonathan Corbet <corbet@xxxxxxx>, Liviu Dudau <liviu.dudau@xxxxxxx>, Lizhi
Hou <lizhi.hou@xxxxxxx>, Lucas De Marchi <lucas.demarchi@xxxxxxxxx>, Lucas
Stach <l.stach@xxxxxxxxxxxxxx>, Lyude Paul <lyude@xxxxxxxxxx>, Maarten
Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>, Matt Coster
<matt.coster@xxxxxxxxxx>, Matthew Brost <matthew.brost@xxxxxxxxx>, Maxime
Ripard <mripard@xxxxxxxxxx>, Melissa Wen <mwen@xxxxxxxxxx>, Min Ma
<min.ma@xxxxxxx>, Oded Gabbay <ogabbay@xxxxxxxxxx>, Philipp Stanner
<phasta@xxxxxxxxxx>, Qiang Yu <yuq825@xxxxxxxxx>, Rob Clark
<robdclark@xxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>, Rodrigo Vivi
<rodrigo.vivi@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>, Steven Price
<steven.price@xxxxxxx>, Sumit Semwal <sumit.semwal@xxxxxxxxxx>, Thomas
Zimmermann <tzimmermann@xxxxxxx>, amd-gfx@xxxxxxxxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, etnaviv@xxxxxxxxxxxxxxxxxxxxx,
freedreno@xxxxxxxxxxxxxxxxxxxxx, intel-xe@xxxxxxxxxxxxxxxxxxxxx,
lima@xxxxxxxxxxxxxxxxxxxxx, linaro-mm-sig@xxxxxxxxxxxxxxxx,
linux-arm-msm@xxxxxxxxxxxxxxx, linux-doc@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-media@xxxxxxxxxxxxxxx,
nouveau@xxxxxxxxxxxxxxxxxxxxx
Date: Wed, 28 May 2025 16:18:30 +0200
In-Reply-To: <20250526125505.2360-1-pierre-eric.pelloux-prayer@xxxxxxx>
References: <20250526125505.2360-1-pierre-eric.pelloux-prayer@xxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MBO-RS-ID: 71bbfe2918ed815d7c0
X-MBO-RS-META: 1d87cwrtfwt5qgx3mzet88gb4nq4xi15
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Mon, 2025-05-26 at 14:54 +0200, Pierre-Eric Pelloux-Prayer wrote:
> Hi,
>=20
> The initial goal of this series was to improve the drm and amdgpu
> trace events to be able to expose more of the inner workings of
> the scheduler and drivers to developers via tools.
>=20
> Then, the series evolved to become focused only on gpu_scheduler.
> The changes around vblank events will be part of a different
> series, as well as the amdgpu ones.
>=20
> Moreover Sima suggested to make some trace events stable uAPI,
> so tools can rely on them long term.
>=20
> The first patches extend and cleanup the gpu scheduler events,
> then add a documentation entry in drm-uapi.rst.
>=20
> The last 2 patches are new in v8. One is based on a suggestion
> from Tvrtko and gets rid of drm_sched_job::id. The other is a
> cleanup of amdgpu trace events to use the fence=3D%llu:%llu format.
>=20
> The drm_sched_job patches don't affect gpuvis which has code to parse
> the gpu_scheduler events but these events are not enabled.
>=20
> Changes since v10:
> * fixed 2 errors reported by kernel test robot
> * rebased on drm-misc-next
>=20
> Changes since v9:
> * fixed documentation link syntax
> * fixed typos in commit messages
> * spelled out that these events cannot be used before
> =C2=A0 drm_sched_job_arm has been called
>=20
> Changes since v8:
> * swapped patches 8 & 9
> * rebased on drm-next
>=20
> Changes since v7:
> * uint64_t -> u64
> * reworked dependencies tracing (Tvrtko)
> * use common name prefix for all events (Tvrtko)
> * dropped drm_sched_job::id (Tvrtko)
>=20
> Useful links:
> - userspace tool using the updated events:
> https://gitlab.freedesktop.org/tomstdenis/umr/-/merge_requests/37
> - v8:
> https://lists.freedesktop.org/archives/dri-devel/2025-March/496781.html
>=20
> Pierre-Eric Pelloux-Prayer (10):
> =C2=A0 drm/debugfs: Output client_id in in drm_clients_info
> =C2=A0 drm/sched: Store the drm client_id in drm_sched_fence
> =C2=A0 drm/sched: Add device name to the drm_sched_process_job event
> =C2=A0 drm/sched: Cleanup gpu_scheduler trace events
> =C2=A0 drm/sched: Trace dependencies for GPU jobs
> =C2=A0 drm/sched: Add the drm_client_id to the drm_sched_run/exec_job
> events
> =C2=A0 drm/sched: Cleanup event names
> =C2=A0 drm: Get rid of drm_sched_job.id
> =C2=A0 drm/doc: Document some tracepoints as uAPI
> =C2=A0 drm/amdgpu: update trace format to match gpu_scheduler_trace
Applied to drm-misc-next
Thanks
P.
>=20
> =C2=A0Documentation/gpu/drm-uapi.rst=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0 19 ++++
> =C2=A0drivers/accel/amdxdna/aie2_ctx.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 3 +-
> =C2=A0drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c=C2=A0=C2=A0=C2=A0 |=C2=
=A0=C2=A0 2 +-
> =C2=A0drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 3 +-
> =C2=A0drivers/gpu/drm/amd/amdgpu/amdgpu_job.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 |=C2=A0=C2=A0 8 +-
> =C2=A0drivers/gpu/drm/amd/amdgpu/amdgpu_job.h=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 |=C2=A0=C2=A0 3 +-
> =C2=A0drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h=C2=A0=C2=A0=C2=A0=C2=A0 |=
=C2=A0 32 ++----
> =C2=A0drivers/gpu/drm/drm_debugfs.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0 10 +-
> =C2=A0drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c=C2=A0 |=C2=A0=C2=A0 2 =
+-
> =C2=A0drivers/gpu/drm/imagination/pvr_job.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 2 +-
> =C2=A0drivers/gpu/drm/imagination/pvr_queue.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 |=C2=A0=C2=A0 5 +-
> =C2=A0drivers/gpu/drm/imagination/pvr_queue.h=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 |=C2=A0=C2=A0 2 +-
> =C2=A0drivers/gpu/drm/lima/lima_gem.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 2 +-
> =C2=A0drivers/gpu/drm/lima/lima_sched.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 6 +-
> =C2=A0drivers/gpu/drm/lima/lima_sched.h=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 3 +-
> =C2=A0drivers/gpu/drm/lima/lima_trace.h=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 6 +-
> =C2=A0drivers/gpu/drm/msm/msm_gem_submit.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 8 +-
> =C2=A0drivers/gpu/drm/nouveau/nouveau_sched.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 |=C2=A0=C2=A0 3 +-
> =C2=A0drivers/gpu/drm/panfrost/panfrost_drv.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 |=C2=A0=C2=A0 2 +-
> =C2=A0drivers/gpu/drm/panthor/panthor_drv.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 3 +-
> =C2=A0drivers/gpu/drm/panthor/panthor_mmu.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 2 +-
> =C2=A0drivers/gpu/drm/panthor/panthor_sched.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 |=C2=A0=C2=A0 5 +-
> =C2=A0drivers/gpu/drm/panthor/panthor_sched.h=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 |=C2=A0=C2=A0 3 +-
> =C2=A0.../gpu/drm/scheduler/gpu_scheduler_trace.h=C2=A0=C2=A0 | 103 +++++=
++++++++---
> --
> =C2=A0drivers/gpu/drm/scheduler/sched_entity.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0 |=C2=A0 16 ++-
> =C2=A0drivers/gpu/drm/scheduler/sched_fence.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 |=C2=A0=C2=A0 4 +-
> =C2=A0drivers/gpu/drm/scheduler/sched_internal.h=C2=A0=C2=A0=C2=A0 |=C2=
=A0=C2=A0 2 +-
> =C2=A0drivers/gpu/drm/scheduler/sched_main.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 |=C2=A0 12 +-
> =C2=A0.../gpu/drm/scheduler/tests/mock_scheduler.c=C2=A0 |=C2=A0=C2=A0 3 =
+-
> =C2=A0drivers/gpu/drm/v3d/v3d_submit.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 2 +-
> =C2=A0drivers/gpu/drm/xe/xe_sched_job.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 3 +-
> =C2=A0include/drm/gpu_scheduler.h=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=
=A0 13 ++-
> =C2=A032 files changed, 191 insertions(+), 101 deletions(-)
>=20
Return-Path: <linux-kernel+bounces-665618-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 52C6741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:19:24 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 1F37A1BC48F8
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:19:36 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 627362882DC;
Wed, 28 May 2025 14:19:04 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="VkeOzXk5"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8D8C62882AB;
Wed, 28 May 2025 14:19:03 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748441943; cv=none; b=ItLbbT6MXSAa8HXISsDbTnhF7DS3ucr2zduTR+WA9JPi+dJFcOs5wCX8JAe7+oieWnaOTyoYk5MJrjLutMtBuLrHcaTH20j64+a6ew17ueHfPm0synGu4uP4coIglj3/7ffGmoQkgSFKs9lcnt4R5bWXWF/lgoGvOGPMjW6zXsU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748441943; c=relaxed/simple;
bh=78K9IapfEUA0fFpl8LYkfjYQvXb/zqZqFdh+VYT4FJQ=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=DkLXKmZwE6eeN1k5rQ7gP5s7ejwLouPEFY9AqV5bmxP8hMkQzgvaDd8TBQ0r3NYq36t1Fquu8xjxBXYByvZ+cRzj/XUXf41BsNotCBTwHfepzsXa5DLAXQ83Fp+8xxNLXPnm0nNPHHOrgCtG9wsUKb9ZJFhR8K1lcBFciB16iGk=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VkeOzXk5; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id CB70CC4CEE3;
Wed, 28 May 2025 14:19:02 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748441943;
bh=78K9IapfEUA0fFpl8LYkfjYQvXb/zqZqFdh+VYT4FJQ=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=VkeOzXk5eN+qrU03KZerCJkDAKnh8wRqro+X+AhBJBc8PifbmrRAc7xFN7hOyrJhv
YuWH3To3Cku6KJ6Bj4LyKfoGNRaQt+JCqQi/HpFULd1mEXAAMfNVTJrYyJXBGFi9t/
CiI7iQfuvkIIi3N+R8u5PnQI3VT07VKW86Uy6Fq67CgEpm7Z2BTV4KDWrCFMw7rR/X
DG1T56yPZ9LShXI/wJZGo4wrbTVonT2ei3JlAf4qD9t3Mc4zL69HkK4qubSV76E+rN
aqs/b1z/Ix2qzhtSvjo6CrXO6LPVQy60spli6q5XfIGfNYT5NmG3VUxjqzV4stWCft
xrS69ZDzlonEQ==
Date: Wed, 28 May 2025 09:19:01 -0500
From: Rob Herring <robh@xxxxxxxxxx>
To: "Edgar E. Iglesias" <edgar.iglesias@xxxxxxxxx>
Cc: mturquette@xxxxxxxxxxxx, sboyd@xxxxxxxxxx, krzk+dt@xxxxxxxxxx,
conor+dt@xxxxxxxxxx, jank@xxxxxxxxxxx, edgar.iglesias@xxxxxxx,
linux-clk@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH v2 1/2] dt-bindings: clk: fixed-mmio-clock: Add optional
ready reg
Message-ID: <20250528141901.GA3966725-robh@xxxxxxxxxx>
References: <20250528140917.876453-1-edgar.iglesias@xxxxxxxxx>
<20250528140917.876453-2-edgar.iglesias@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528140917.876453-2-edgar.iglesias@xxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 04:09:16PM +0200, Edgar E. Iglesias wrote:
> From: "Edgar E. Iglesias" <edgar.iglesias@xxxxxxx>
>
> Add an optional ready register and properties describing bitfields
> that signal when the clock is ready. This can for example be useful
> to describe PLL lock bits.
>
> Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xxxxxxx>
> ---
> .../bindings/clock/fixed-mmio-clock.yaml | 37 ++++++++++++++++++-
> 1 file changed, 36 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/devicetree/bindings/clock/fixed-mmio-clock.yaml b/Documentation/devicetree/bindings/clock/fixed-mmio-clock.yaml
> index e22fc272d023..57419b4de343 100644
> --- a/Documentation/devicetree/bindings/clock/fixed-mmio-clock.yaml
> +++ b/Documentation/devicetree/bindings/clock/fixed-mmio-clock.yaml
> @@ -10,6 +10,11 @@ description:
> This binding describes a fixed-rate clock for which the frequency can
> be read from a single 32-bit memory mapped I/O register.
>
> + An optional ready register can be specified in a second reg entry.
> + The ready register will be polled until it signals ready prior to reading
> + the fixed rate. This is useful for example to optionally wait for a PLL
> + to lock.
> +
> It was designed for test systems, like FPGA, not for complete,
> finished SoCs.
>
> @@ -21,7 +26,10 @@ properties:
> const: fixed-mmio-clock
>
> reg:
> - maxItems: 1
> + minItems: 1
> + items:
> + - description: Fixed rate register
> + - description: Optional clock ready register
>
> "#clock-cells":
> const: 0
> @@ -29,6 +37,24 @@ properties:
> clock-output-names:
> maxItems: 1
>
> + ready-timeout-us:
> + description:
> + Optional timeout in micro-seconds when polling for clock readiness.
> + 0 means no timeout.
> + default: 0
> +
> + ready-mask:
> + description:
> + Optional mask to apply when reading the ready register.
> + $ref: /schemas/types.yaml#/definitions/uint32
> + default: 0xffffffff
> +
> + ready-value:
> + description:
> + When a ready register is specified in reg, poll the ready reg until
> + ready-reg & ready-mask == ready-value.
> + $ref: /schemas/types.yaml#/definitions/uint32
And next someone wants to add an enable bit, so there's another 2-3 new
properties. And it never ends...
So no, create a specific binding for your h/w.
Rob
Return-Path: <linux-kernel+bounces-665619-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E283441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:20:42 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id CEA531BC4675
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:20:55 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 2A98F28852C;
Wed, 28 May 2025 14:20:35 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="ZoPl5l4B"
Received: from relay4-d.mail.gandi.net (relay4-d.mail.gandi.net [217.70.183.196])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B6D0713AF2;
Wed, 28 May 2025 14:20:31 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.196
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442034; cv=none; b=LNi1nR/XouvbFsHSYDAAK4EASdDjLOJKaohtNfSUMIuuvV7L9HAvajPVSUT9SCiPnriedNTFUO7zvH/iqwq57NE5fHptBedNg2Eztf6nder1Rb75EC//ROM378vWdj88rN5dJaeNfOGAmM4V8DG3KVFrhkvAtnwDDjbYwhSSedc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442034; c=relaxed/simple;
bh=IAmFVHlk4nuMOFtQv4aOrf2liouMBgPnbsltL1EJW04=;
h=From:To:Cc:In-Reply-To:References:Subject:Message-Id:Date:
MIME-Version:Content-Type; b=D8FvBtrrgeVwHaZoxvLAHAAedpJMcYQsjj1sbIKRMekZptbG4dgsmbU9NTqIkmchxUjH46BCUu0C1JbX7BKoIZJkfAdHl+Dr4NJpPbfr94XNR+V/NW78e77QJw+93OE2KI8FZ1lQ/tRw8ErGa5yigMAd/wp2B9YPgcURfJ2xd0o=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=ZoPl5l4B; arc=none smtp.client-ip=217.70.183.196
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com
Received: by mail.gandi.net (Postfix) with ESMTPSA id 5049043B39;
Wed, 28 May 2025 14:20:27 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1;
t=1748442029;
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:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=cMf/Hnpv8Kkgl2xtdJEs4s67UUfmu0Eb4EkJAcuiJ54=;
b=ZoPl5l4Bc9sqvQi2thDwCWwhk5PjKwCCN3n/aQ5kZ4NplF+u0r3r+1MEIONI2Ui9oaeiqe
WZs5Fge+nMbp4fz/eG2+8veOdhCml9z3FBDTn4sgpSpu5HyuxTbV4Bp6d8+g5MNkSs8s26
7bGo8GfafcJlkDqv9W+uLSKc7tHj8Kl2nShiODJPxSWrXr+3g7E7SKKIe9E1QotQqz3Lxt
OCOoMGWxKHcasdtt3Cs3627y5E5w9717QCWPRhBFFeDL3ECLBLfjGsu/RHvEpVQ9iw4zLD
DyqdgFsC/yWqONV/ev72/pjqxlcdGtgkaE1QDjfAwMkS1pL0DxUX7A/1fCdMYQ==
From: Louis Chauvet <louis.chauvet@xxxxxxxxxxx>
To: Melissa Wen <melissa.srw@xxxxxxxxx>,
=?utf-8?q?Ma=C3=ADra_Canal?= <mairacanal@xxxxxxxxxx>,
Haneen Mohammed <hamohammed.sa@xxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>, Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>, rdunlap@xxxxxxxxxxxxx,
arthurgrillo@xxxxxxxxxx, Jonathan Corbet <corbet@xxxxxxx>,
pekka.paalanen@xxxxxxxxxxxxx, Simona Vetter <simona@xxxxxxxx>,
Rodrigo Siqueira <siqueira@xxxxxxxxxx>,
Simona Vetter <simona.vetter@xxxxxxxx>,
Louis Chauvet <louis.chauvet@xxxxxxxxxxx>
Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
jeremie.dautheribes@xxxxxxxxxxx, miquel.raynal@xxxxxxxxxxx,
thomas.petazzoni@xxxxxxxxxxx, seanpaul@xxxxxxxxxx, marcheu@xxxxxxxxxx,
nicolejadeyee@xxxxxxxxxx, linux-doc@xxxxxxxxxxxxxxx,
Pekka Paalanen <pekka.paalanen@xxxxxxxxxxxxx>,
=?utf-8?q?Jos=C3=A9_Exp=C3=B3sito?= <jose.exposito89@xxxxxxxxx>
In-Reply-To: <20250415-yuv-v18-0-f2918f71ec4b@xxxxxxxxxxx>
References: <20250415-yuv-v18-0-f2918f71ec4b@xxxxxxxxxxx>
Subject: Re: [PATCH v18 0/8] drm/vkms: Add support for YUV and
DRM_FORMAT_R*
Message-Id: <174844202720.20871.17817031129231550592.b4-ty@xxxxxxxxxxx>
Date: Wed, 28 May 2025 16:20:27 +0200
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
X-Mailer: b4 0.14.2
X-GND-State: clean
X-GND-Score: -100
X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtddtgddvfeegleculddtuddrgeefvddrtddtmdcutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfitefpfffkpdcuggftfghnshhusghstghrihgsvgenuceurghilhhouhhtmecufedtudenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephffvvegjfhfukfffgggtgffosehtjeertdertdejnecuhfhrohhmpefnohhuihhsucevhhgruhhvvghtuceolhhouhhishdrtghhrghuvhgvthessghoohhtlhhinhdrtghomheqnecuggftrfgrthhtvghrnhepjeehieelvdekieegledutdeljedvhfelfeelffffiedttedvledttddttdfgleetnecukfhppedvtddtudemkeeiudemgedugedtmegtkeeitdemfeduudekmeguieehvdemjedvtdejmeelfhehnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepvddttddumeekiedumeegudegtdemtgekiedtmeefuddukeemugeihedvmeejvddtjeemlehfhedphhgvlhhopegluddvjedrtddrtddrudgnpdhmrghilhhfrhhomheplhhouhhishdrtghhrghuvhgvthessghoohhtlhhinhdrtghomhdpnhgspghrtghpthhtohepvdeipdhrtghpthhtoheplhhinhhugidqkhgvrhhnvghlsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtohephhgrmhhohhgrmhhmvggurdhsrgesghhmrghilhdrtghomhdprhgtphhtthhopehmihhquhgvlhdrrhgrhihnrghls
egsohhothhlihhnrdgtohhmpdhrtghpthhtohepphgvkhhkrgdrphgrrghlrghnvghnsegtohhllhgrsghorhgrrdgtohhmpdhrtghpthhtoheprhguuhhnlhgrphesihhnfhhrrgguvggrugdrohhrghdprhgtphhtthhopehpvghkkhgrrdhprggrlhgrnhgvnheshhgrlhhonhhiihhtthihrdhfihdprhgtphhtthhopegrrhhthhhurhhgrhhilhhlohesrhhishgvuhhprdhnvghtpdhrtghpthhtohepmhgvlhhishhsrgdrshhrfiesghhmrghilhdrtghomh
X-GND-Sasl: louis.chauvet@xxxxxxxxxxx
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, 15 Apr 2025 15:55:31 +0200, Louis Chauvet wrote:
> This patchset is extracted from [1]. The goal is to introduce the YUV
> support, thanks to Arthur's work.
>
> - PATCH 2: Document pixel_arbg_u16
> - PATCH 3: Add the support of YUV formats
> - PATCH 4: Add some drm properties to expose more YUV features
> - PATCH 5: Cleanup the todo
> - PATCH 6..7: Add some kunit tests
> - PATCH 8: Add the support of DRM_FORMAT_R1/2/4/8
>
> [...]
Applied, thanks!
[1/8] drm/vkms: Document pixel_argb_u16
commit: c76e2c78bc2a35ca04eead275f14b6d23ae9a89f
[2/8] drm/vkms: Add YUV support
commit: fe22d21e93426294eb0ebdb0bf5f6d6b77481ecc
[3/8] drm/vkms: Add range and encoding properties to the plane
commit: 81dbec07197678fc2d86f1494dfaf44023864842
[4/8] drm/vkms: Drop YUV formats TODO
commit: f776e5cef757927b038a9c07c0c68f34d35f7787
[5/8] drm: Export symbols to use in tests
commit: 11d435b81e5dd2cc48daa2d3d71a19bcbc46e807
[6/8] drm/vkms: Create KUnit tests for YUV conversions
commit: 3e897853debde269ab01f0d3d28c3e7b37bf2c39
[7/8] drm/vkms: Add how to run the Kunit tests
commit: c59176cbca1188b906a36f06004a98a6264a8008
[8/8] drm/vkms: Add support for DRM_FORMAT_R*
commit: ef818481d9fbaf3483dde0d1faa565a016810de3
Best regards,
--
Louis Chauvet <louis.chauvet@xxxxxxxxxxx>
Return-Path: <linux-kernel+bounces-665620-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 4D7E841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:25:40 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 754B24A4948
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:25:41 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 0FAA6288C00;
Wed, 28 May 2025 14:25:33 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="pFPu6Nv5"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 422B013AF2;
Wed, 28 May 2025 14:25:31 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442332; cv=none; b=bpg6XFc9kjHRmFVkYg+nSj8Kze/3g3Oq78y7Jf4NZJ6rswpt+CJhDoBs4i8jl8ZtCTK6Gi2JqaNc6BXaPTMZoSihKG4uLx8L6/qSUef6RqrUWz3360Qm/2J6YZwhAb3s1IvRYh1lep0UOfP3dG4W1Od9Dr/bpCDE/FDvfshfP78=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442332; c=relaxed/simple;
bh=IGnOjm9mSj79ffcLMCdQ5dCfH2Vp1XxSc1dFI2W3IWU=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=ifMkcnpaD/q3RrpjMlcQ8ZF8VjpCm7hePPpPRyed1m1BGkakFXFtpYXytBqeXPJyI0oJOurG6Jj86rP6PtLyCqIxQVEoXoSxHU65n/92CmKzpj5yPMBCFSQBbgFx3wpOOGCZ1wMfBV4I5526qr/USfqTVSOtqZK6Wxg6kiXDLkg=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pFPu6Nv5; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id A4869C4CEF0;
Wed, 28 May 2025 14:25:31 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748442331;
bh=IGnOjm9mSj79ffcLMCdQ5dCfH2Vp1XxSc1dFI2W3IWU=;
h=References:In-Reply-To:From:Date:Subject:To:Cc:From;
b=pFPu6Nv5KUg54HCB1RFBZehdsUXuEPF41F5OcBAmTuDSqDk71OuYotBlFk6ApoS6/
qDP2JKUFl4ozF0Apnlw7dCeWRz/Z3LGMvFfm7zS6B5UcKQN4btfND+V5Jr9dq+J7aH
YPAAxwr4Y0AbWePJtjRmdxXuibZn4/J/JodkKIzBIaFTMxoGSrgpvnYXvwwSeso581
i515JJQaspU14NCE7XD2vbIdq3b3ZsvgRXjFsXOc4v6Jxct+lDcMyrPzOC7b1p4P5q
Egbl/e5nWToQz9BRJeTjX4pPJnFg/BskCw1WgQgzbFTPJHNixez+UKj/cG5MolZuy3
Tt2fGENUuNbcA==
Received: by mail-oi1-f177.google.com with SMTP id 5614622812f47-3f9a7cbc8f1so929804b6e.0;
Wed, 28 May 2025 07:25:31 -0700 (PDT)
X-Forwarded-Encrypted: i=1; AJvYcCUaioPM6b07S/HU7hCjZ0DkieQ5kqazmwDK1h1VqawMpWHPJPLSz0uHr4tYm/dh4T5QzsmfMOdZwbC3XP8=@vger.kernel.org, AJvYcCXpNHc2/bHC/vnTw4dn/W4o10qBBkzkvNU9HqbPCmh9mRUCMiCJaYAEQ0cx/Syoep75vQWb821TTag=@vger.kernel.org
X-Gm-Message-State: AOJu0Yw63c8tbhT7pfNOdSF4U4zsbv8tiWuEqbedGpJWM+izO8DX2G3o
TL0XtsJyeJIHNRsb1uEikIpP395xbBG66mPn7QyHWC242WY2cQW2v3wNG664VNnpzXberGaAV1K
wfjXBIu3wLjtB4wk4h90ssUt7Ybc6yBQ=
X-Google-Smtp-Source: AGHT+IFBffpsH1BwM4rm3RKitOIYehD5JkfJiM7Akv8GtbDS6I+0PNtu7adSWCuQP2UV0B5aF4Hy2BVM7MD0imWH0JM=
X-Received: by 2002:a05:6808:3307:b0:401:918a:5b81 with SMTP id
5614622812f47-406468464ccmr9420552b6e.25.1748442330895; Wed, 28 May 2025
07:25:30 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <2006806.PYKUYFuaPT@xxxxxxxxxxxxx> <20250528131759.GA39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<CAJZ5v0i=TWMjPKxGa8eT-prV=dtQo=pwys5amcj3QL9qo=EYyQ@xxxxxxxxxxxxxx> <20250528133807.GC39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
In-Reply-To: <20250528133807.GC39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
From: "Rafael J. Wysocki" <rafael@xxxxxxxxxx>
Date: Wed, 28 May 2025 16:25:19 +0200
X-Gmail-Original-Message-ID: <CAJZ5v0g2+OVdFM-bUCOynNivUc4doxH=ukt9e9Z_nKpoZh6gPA@xxxxxxxxxxxxxx>
X-Gm-Features: AX0GCFsL9gL26hQm_JdbGOMd4-i0oGeAZbKK_nVZQB08D27ommvyh01AYcly-4Q
Message-ID: <CAJZ5v0g2+OVdFM-bUCOynNivUc4doxH=ukt9e9Z_nKpoZh6gPA@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v1 0/2] x86/smp: Fix power regression introduced by commit 96040f7273e2
To: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: "Rafael J. Wysocki" <rafael@xxxxxxxxxx>, "Rafael J. Wysocki" <rjw@xxxxxxxxxxxxx>,
x86 Maintainers <x86@xxxxxxxxxx>, LKML <linux-kernel@xxxxxxxxxxxxxxx>,
Linux PM <linux-pm@xxxxxxxxxxxxxxx>, Len Brown <lenb@xxxxxxxxxx>,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>, Borislav Petkov <bp@xxxxxxx>,
Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
Artem Bityutskiy <artem.bityutskiy@xxxxxxxxxxxxxxx>,
"Gautham R. Shenoy" <gautham.shenoy@xxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>,
Todd Brandt <todd.e.brandt@xxxxxxxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 3:45=E2=80=AFPM Peter Zijlstra <peterz@xxxxxxxxxxxx=
g> wrote:
>
> On Wed, May 28, 2025 at 03:20:16PM +0200, Rafael J. Wysocki wrote:
> > On Wed, May 28, 2025 at 3:18=E2=80=AFPM Peter Zijlstra <peterz@infradea=
d.org> wrote:
> > >
> > > On Wed, May 28, 2025 at 02:53:13PM +0200, Rafael J. Wysocki wrote:
> > > > Hi Everyone,
> > > >
> > > > Commit 96040f7273e2 ("x86/smp: Eliminate mwait_play_dead_cpuid_hint=
()")
> > > > that shipped in 6.15 introduced a nasty power regression on systems=
that
> > > > start with "nosmt" in the kernel command line which prevents it fro=
m entering
> > > > deep package idle states (for instance, PC10) later on. Idle power=
, including
> > > > power in suspend-to-idle, goes up significantly on those systems as=
a result.
> > > >
> > > > Address this by reverting commit 96040f7273e2 (patch [1/2]) and usi=
ng a
> > > > different approach, which is to retain mwait_play_dead_cpuid_hint()=
and
> > > > still prefer it to hlt_play_dead() in case it is needed when cpuidl=
e is
> > > > not available, but prefer cpuidle_play_dead() to it by default (pat=
ch [2/2]).
> > >
> > > I don't understand. The revert says the reason it regresses is that i=
t
> > > goes into play_dead before cpuidle is initialized. The fix is then to
> > > call cpuidle first.
> > >
> > > But if cpuidle isn't initialized yet, how does that fix anything?
> >
> > The revert fixes the bug.
>
> This is not what I asked.
>
> > The other patch does what the reverted commit was supposed to be
> > doing, but differently.
>
> No, it does not.
If cpuidle is available and works, it will do the same thing.
> The whole point was that mwait_play_dead did not DTRT because hints are
> stupid and it could not select the deepest C state in an unambiguous
> fashion.
Yes, on some systems.
> And now you're restoring that -- code you all argued was fundamentally
> buggered.
>
> Yes is 'fixes' things on old platforms, but it is equally broken on the
> new platforms where you all argued it was broken on. So either way
> around you're going to need to fix those, and this isn't it.
There are systems where mwait_play_dead_cpuid_hint() does not work and
there are systems where it works. Some of the latter are actually
new.
Regardless, if cpuidle_play_dead() runs before it and cpuidle is
there, the right thing will be done because cpuidle_play_dead() will
not return in that case.
The only question is what to do when cpuidle is not there.
The commit reverted by the first patch removed
mwait_play_dead_cpuid_hint() altogether, so it never runs and the only
fallback is hlt_play_dead(), but this doesn't work for disabling SMT
siblings.
If mwait_play_dead_cpuid_hint() is allowed to run before
hlt_play_dead() though, then worst-case it may use an unrecognized
MWAIT hint and the CPU should fall back to C1. If the MWAIT hint is
valid though, it will enter a deep idle state and that's what happens
on all of the systems tested in the lab (20+), including the most
recent ones.
> Now, SMT siblings are all AP, by definition. So can't we simply send
> them INIT instead of doing CLI;HLT, that way they drop into
> Wait-for-SIPI and the ucode can sort it out?
No, I don't think so. I don't think that Wait-for-SIPI is an idle state.
But we are discussing patch [2/2] here while really the problem is
that the commit in question is broken, so it needs to be reverted in
the first place.
Return-Path: <linux-kernel+bounces-665621-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E7CCA41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:26:44 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id A12D13A4F5F
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:26:22 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 03F2D288531;
Wed, 28 May 2025 14:26:41 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=fail reason="signature verification failed" (2048-bit key) header.d=surriel.com header.i=@surriel.com header.b="IDo7N+g2"
Received: from shelob.surriel.com (shelob.surriel.com [96.67.55.147])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id E1A9613AF2;
Wed, 28 May 2025 14:26:33 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=96.67.55.147
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442398; cv=none; b=mpQFCnMe0rtMUN7e3Zkjh2w2wy4RrezvHWfg8dGtceQY+J8kgwmE6oGJT5u7UweFQtodu5JVAaCvK5QRxq4fbRRDoqxpdCocJxixRImZ7I51SrSAW10VPvQMyurCUUq7YlBgXKjutX8kpI8U9zZcoecVRh9mFGu9RWQ4zg9bbpA=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442398; c=relaxed/simple;
bh=g8gTRASmmvSsfuZwzuPFcSFC+02zA9q+IRn3Y7AYods=;
h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References:
Content-Type:MIME-Version; b=XigXvJERqZ4GbXB12thWcACM22nzM4kMVhYFxgnme9sdHhIo+vyiGMiaFLOHe77IWDApyjJrvX2T7i0s89lrcbfto/NBWzIGlM/3VG5Mnbb60SUN9xgWoxD82zeNoxFpBZ5eDmxZ9tekXz3vW8Fb7bXLdTnWgAlMoDSsjtn/ER8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=surriel.com; spf=pass smtp.mailfrom=surriel.com; dkim=pass (2048-bit key) header.d=surriel.com header.i=@surriel.com header.b=IDo7N+g2; arc=none smtp.client-ip=96.67.55.147
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=surriel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=surriel.com
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=surriel.com
; s=mail; h=MIME-Version:Content-Transfer-Encoding:Content-Type:References:
In-Reply-To:Date:Cc:To:From:Subject:Message-ID:Sender:Reply-To:Content-ID:
Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc
:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe:
List-Post:List-Owner:List-Archive;
bh=g8gTRASmmvSsfuZwzuPFcSFC+02zA9q+IRn3Y7AYods=; b=IDo7N+g2tDs+yPTInSf/SucK5j
qXu8UivasSaNrRDtcv6nLuxf4VEwNySE17EcHfu3nNBhkZ0AY6fOkrGBz31fThJXI7nUSy9GGtJ6e
DsT3LpdecwvvRjxt8RnV4D3QNmQliSDt+qg5t47i/i+PTEEo98YM/FWYdxHm3UtxEnkhNEb9o3zU9
t4OqiA6ARR37gu9RYwGWCEX5aTd2YSpr9xjAF3Pwkxospgs404TLxdY65KGAhsVPMa1SEXi020KR/
5wY86pEBCOY3ZFjmju3CnwKSAN7QZVnvMlZ01IyIFiJbkA8r42V+eqfPh0WEjmSCBv426xuXJ8GZo
T+BtA8eg==;
Received: from fangorn.home.surriel.com ([10.0.13.7])
by shelob.surriel.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
(Exim 4.97.1)
(envelope-from <riel@xxxxxxxxxxx>)
id 1uKHiz-000000000so-1SBT;
Wed, 28 May 2025 10:25:45 -0400
Message-ID: <43ae7b3bf94b67611069572b7e3e909a922c964f.camel@xxxxxxxxxxx>
Subject: Re: [PATCH 1/2] x86/tlb/trace: Export the TLB_REMOTE_WRONG_CPU enum
From: Rik van Riel <riel@xxxxxxxxxxx>
To: Tal Zussman <tz2294@xxxxxxxxxxxx>, Steven Rostedt <rostedt@xxxxxxxxxxx>,
Masami Hiramatsu <mhiramat@xxxxxxxxxx>, Mathieu Desnoyers
<mathieu.desnoyers@xxxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>, Andrew
Morton <akpm@xxxxxxxxxxxxxxxxxxxx>, David Hildenbrand <david@xxxxxxxxxx>,
Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>, "Liam R. Howlett"
<Liam.Howlett@xxxxxxxxxx>, Vlastimil Babka <vbabka@xxxxxxx>, Mike Rapoport
<rppt@xxxxxxxxxx>, Suren Baghdasaryan <surenb@xxxxxxxxxx>, Michal Hocko
<mhocko@xxxxxxxx>, x86@xxxxxxxxxx
Cc: linux-kernel@xxxxxxxxxxxxxxx, linux-trace-kernel@xxxxxxxxxxxxxxx,
linux-mm@xxxxxxxxx
Date: Wed, 28 May 2025 10:25:45 -0400
In-Reply-To: <20250528-tlb-trace-fix-v1-1-2e94c58f450d@xxxxxxxxxxxx>
References: <20250528-tlb-trace-fix-v1-0-2e94c58f450d@xxxxxxxxxxxx>
<20250528-tlb-trace-fix-v1-1-2e94c58f450d@xxxxxxxxxxxx>
Autocrypt: addr=riel@xxxxxxxxxxx; prefer-encrypt=mutual;
keydata=mQENBFIt3aUBCADCK0LicyCYyMa0E1lodCDUBf6G+6C5UXKG1jEYwQu49cc/gUBTTk33A
eo2hjn4JinVaPF3zfZprnKMEGGv4dHvEOCPWiNhlz5RtqH3SKJllq2dpeMS9RqbMvDA36rlJIIo47
Z/nl6IA8MDhSqyqdnTY8z7LnQHqq16jAqwo7Ll9qALXz4yG1ZdSCmo80VPetBZZPw7WMjo+1hByv/
lvdFnLfiQ52tayuuC1r9x2qZ/SYWd2M4p/f5CLmvG9UcnkbYFsKWz8bwOBWKg1PQcaYHLx06sHGdY
dIDaeVvkIfMFwAprSo5EFU+aes2VB2ZjugOTbkkW2aPSWTRsBhPHhV6dABEBAAG0HlJpayB2YW4gU
mllbCA8cmllbEByZWRoYXQuY29tPokBHwQwAQIACQUCW5LcVgIdIAAKCRDOed6ShMTeg05SB/986o
gEgdq4byrtaBQKFg5LWfd8e+h+QzLOg/T8mSS3dJzFXe5JBOfvYg7Bj47xXi9I5sM+I9Lu9+1XVb/
r2rGJrU1DwA09TnmyFtK76bgMF0sBEh1ECILYNQTEIemzNFwOWLZZlEhZFRJsZyX+mtEp/WQIygHV
WjwuP69VJw+fPQvLOGn4j8W9QXuvhha7u1QJ7mYx4dLGHrZlHdwDsqpvWsW+3rsIqs1BBe5/Itz9o
6y9gLNtQzwmSDioV8KhF85VmYInslhv5tUtMEppfdTLyX4SUKh8ftNIVmH9mXyRCZclSoa6IMd635
Jq1Pj2/Lp64tOzSvN5Y9zaiCc5FucXtB9SaWsgdmFuIFJpZWwgPHJpZWxAc3VycmllbC5jb20+iQE
+BBMBAgAoBQJSLd2lAhsjBQkSzAMABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRDOed6ShMTe
g4PpB/0ZivKYFt0LaB22ssWUrBoeNWCP1NY/lkq2QbPhR3agLB7ZXI97PF2z/5QD9Fuy/FD/jddPx
KRTvFCtHcEzTOcFjBmf52uqgt3U40H9GM++0IM0yHusd9EzlaWsbp09vsAV2DwdqS69x9RPbvE/Ne
fO5subhocH76okcF/aQiQ+oj2j6LJZGBJBVigOHg+4zyzdDgKM+jp0bvDI51KQ4XfxV593OhvkS3z
3FPx0CE7l62WhWrieHyBblqvkTYgJ6dq4bsYpqxxGJOkQ47WpEUx6onH+rImWmPJbSYGhwBzTo0Mm
G1Nb1qGPG+mTrSmJjDRxrwf1zjmYqQreWVSFEt26tBpSaWsgdmFuIFJpZWwgPHJpZWxAZmIuY29tP
okBPgQTAQIAKAUCW5LbiAIbIwUJEswDAAYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQznneko
TE3oOUEQgAsrGxjTC1bGtZyuvyQPcXclap11Ogib6rQywGYu6/Mnkbd6hbyY3wpdyQii/cas2S44N
cQj8HkGv91JLVE24/Wt0gITPCH3rLVJJDGQxprHTVDs1t1RAbsbp0XTksZPCNWDGYIBo2aHDwErhI
omYQ0Xluo1WBtH/UmHgirHvclsou1Ks9jyTxiPyUKRfae7GNOFiX99+ZlB27P3t8CjtSO831Ij0Ip
QrfooZ21YVlUKw0Wy6Ll8EyefyrEYSh8KTm8dQj4O7xxvdg865TLeLpho5PwDRF+/mR3qi8CdGbkE
c4pYZQO8UDXUN4S+pe0aTeTqlYw8rRHWF9TnvtpcNzZw==
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
User-Agent: Evolution 3.54.3 (3.54.3-1.fc41)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 2025-05-28 at 01:35 -0400, Tal Zussman wrote:
> When the TLB_REMOTE_WRONG_CPU enum was introduced for the tlb_flush
> tracepoint, the enum was not exported to userspace. Add it to the
> appropriate macro definition to enable parsing by userspace tools, as
> per [0].
>=20
> [0] Link:
> https://lore.kernel.org/all/20150403013802.220157513@xxxxxxxxxxx
>=20
> Fixes: 2815a56e4b72 ("x86/mm/tlb: Add tracepoint for TLB flush IPI to
> stale CPU")
> Signed-off-by: Tal Zussman <tz2294@xxxxxxxxxxxx>
Good catch. Thank you!
Reviewed-by: Rik van Riel <riel@xxxxxxxxxxx>
--=20
All Rights Reversed.
Return-Path: <linux-kernel+bounces-665622-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 567A141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:27:02 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 0E1573A963E
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:26:34 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 9E037288C0B;
Wed, 28 May 2025 14:26:52 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=fail reason="signature verification failed" (2048-bit key) header.d=surriel.com header.i=@surriel.com header.b="iiHSrwGb"
Received: from shelob.surriel.com (shelob.surriel.com [96.67.55.147])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7F6D8286D48;
Wed, 28 May 2025 14:26:50 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=96.67.55.147
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442411; cv=none; b=ui+p3AlqsNVFtGeiPlDWDbddEY3vRNibXvGHEOUZzcEas/rFnfn6tVJWRJq81PPqyAgqNo6jnhJkRzl5XyaNptA9Q1CHkllnMHM3dv+DqVb7af+q19IyCIymf0RqYJJ/ekAU3hLKbB0smMGDbTvC2QRgjgqGQe9EP++qByvW4f4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442411; c=relaxed/simple;
bh=cS79qCw02W352C4o5afUgwhUGwcsuYgeRjXGbXZOI8U=;
h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References:
Content-Type:MIME-Version; b=Vn/W5ZzvVs5ZkJXMTYcyekfWBCie9Pn9TQHzKZqVDTAGpRGcPxmEa6fpe08UcqvUsduLRCFZb+fGR1K5I7gqhz8MRWCDWQzTgM0X7tJMeAISC4QlUKw8QroofdKvFDRNIE6upVnhyaZpYLchZP50fDnrXske7rj+pV37Kvhp8ZQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=surriel.com; spf=pass smtp.mailfrom=surriel.com; dkim=pass (2048-bit key) header.d=surriel.com header.i=@surriel.com header.b=iiHSrwGb; arc=none smtp.client-ip=96.67.55.147
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=surriel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=surriel.com
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=surriel.com
; s=mail; h=MIME-Version:Content-Transfer-Encoding:Content-Type:References:
In-Reply-To:Date:Cc:To:From:Subject:Message-ID:Sender:Reply-To:Content-ID:
Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc
:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe:
List-Post:List-Owner:List-Archive;
bh=cS79qCw02W352C4o5afUgwhUGwcsuYgeRjXGbXZOI8U=; b=iiHSrwGbrwswQJmrXNS4YYn773
kGLotIEZIyAPFV8+h+WqbAVM9Bl7VS9C6jzQMLjg0b/NaMXooV9/Hfu6ZHAo6k3V5K5yLGZOsa11/
SseSd9Q9Ej0iFITTMbX/T6xAQZw8L4m+yel7ystwEK0ly9rnzKOO77DHCxkgVOSpT0CT04p9nOwWi
YIbBTsQMz65FhF3aTl1bAnYIGaWo/vME4yph61afiuI2yeK50NqkLOHrB6kk2C/WvQftYkwJWu7+C
oPtuNEymkRDfACZXLRPUBJFG4J2O3kIzsg2qPB6y8Ml/EL8g9K1UlWZGfcjGkktRVnV2UIM9PhLjj
cGLZePeA==;
Received: from fangorn.home.surriel.com ([10.0.13.7])
by shelob.surriel.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
(Exim 4.97.1)
(envelope-from <riel@xxxxxxxxxxx>)
id 1uKHjh-000000000tN-0jg8;
Wed, 28 May 2025 10:26:29 -0400
Message-ID: <05b6280b2550011623a433017baa8f17bc83fe9d.camel@xxxxxxxxxxx>
Subject: Re: [PATCH 2/2] mm: Remove tlb_flush_reason::NR_TLB_FLUSH_REASONS
From: Rik van Riel <riel@xxxxxxxxxxx>
To: Tal Zussman <tz2294@xxxxxxxxxxxx>, Steven Rostedt <rostedt@xxxxxxxxxxx>,
Masami Hiramatsu <mhiramat@xxxxxxxxxx>, Mathieu Desnoyers
<mathieu.desnoyers@xxxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>, Andrew
Morton <akpm@xxxxxxxxxxxxxxxxxxxx>, David Hildenbrand <david@xxxxxxxxxx>,
Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>, "Liam R. Howlett"
<Liam.Howlett@xxxxxxxxxx>, Vlastimil Babka <vbabka@xxxxxxx>, Mike Rapoport
<rppt@xxxxxxxxxx>, Suren Baghdasaryan <surenb@xxxxxxxxxx>, Michal Hocko
<mhocko@xxxxxxxx>, x86@xxxxxxxxxx
Cc: linux-kernel@xxxxxxxxxxxxxxx, linux-trace-kernel@xxxxxxxxxxxxxxx,
linux-mm@xxxxxxxxx
Date: Wed, 28 May 2025 10:26:29 -0400
In-Reply-To: <20250528-tlb-trace-fix-v1-2-2e94c58f450d@xxxxxxxxxxxx>
References: <20250528-tlb-trace-fix-v1-0-2e94c58f450d@xxxxxxxxxxxx>
<20250528-tlb-trace-fix-v1-2-2e94c58f450d@xxxxxxxxxxxx>
Autocrypt: addr=riel@xxxxxxxxxxx; prefer-encrypt=mutual;
keydata=mQENBFIt3aUBCADCK0LicyCYyMa0E1lodCDUBf6G+6C5UXKG1jEYwQu49cc/gUBTTk33A
eo2hjn4JinVaPF3zfZprnKMEGGv4dHvEOCPWiNhlz5RtqH3SKJllq2dpeMS9RqbMvDA36rlJIIo47
Z/nl6IA8MDhSqyqdnTY8z7LnQHqq16jAqwo7Ll9qALXz4yG1ZdSCmo80VPetBZZPw7WMjo+1hByv/
lvdFnLfiQ52tayuuC1r9x2qZ/SYWd2M4p/f5CLmvG9UcnkbYFsKWz8bwOBWKg1PQcaYHLx06sHGdY
dIDaeVvkIfMFwAprSo5EFU+aes2VB2ZjugOTbkkW2aPSWTRsBhPHhV6dABEBAAG0HlJpayB2YW4gU
mllbCA8cmllbEByZWRoYXQuY29tPokBHwQwAQIACQUCW5LcVgIdIAAKCRDOed6ShMTeg05SB/986o
gEgdq4byrtaBQKFg5LWfd8e+h+QzLOg/T8mSS3dJzFXe5JBOfvYg7Bj47xXi9I5sM+I9Lu9+1XVb/
r2rGJrU1DwA09TnmyFtK76bgMF0sBEh1ECILYNQTEIemzNFwOWLZZlEhZFRJsZyX+mtEp/WQIygHV
WjwuP69VJw+fPQvLOGn4j8W9QXuvhha7u1QJ7mYx4dLGHrZlHdwDsqpvWsW+3rsIqs1BBe5/Itz9o
6y9gLNtQzwmSDioV8KhF85VmYInslhv5tUtMEppfdTLyX4SUKh8ftNIVmH9mXyRCZclSoa6IMd635
Jq1Pj2/Lp64tOzSvN5Y9zaiCc5FucXtB9SaWsgdmFuIFJpZWwgPHJpZWxAc3VycmllbC5jb20+iQE
+BBMBAgAoBQJSLd2lAhsjBQkSzAMABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRDOed6ShMTe
g4PpB/0ZivKYFt0LaB22ssWUrBoeNWCP1NY/lkq2QbPhR3agLB7ZXI97PF2z/5QD9Fuy/FD/jddPx
KRTvFCtHcEzTOcFjBmf52uqgt3U40H9GM++0IM0yHusd9EzlaWsbp09vsAV2DwdqS69x9RPbvE/Ne
fO5subhocH76okcF/aQiQ+oj2j6LJZGBJBVigOHg+4zyzdDgKM+jp0bvDI51KQ4XfxV593OhvkS3z
3FPx0CE7l62WhWrieHyBblqvkTYgJ6dq4bsYpqxxGJOkQ47WpEUx6onH+rImWmPJbSYGhwBzTo0Mm
G1Nb1qGPG+mTrSmJjDRxrwf1zjmYqQreWVSFEt26tBpSaWsgdmFuIFJpZWwgPHJpZWxAZmIuY29tP
okBPgQTAQIAKAUCW5LbiAIbIwUJEswDAAYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQznneko
TE3oOUEQgAsrGxjTC1bGtZyuvyQPcXclap11Ogib6rQywGYu6/Mnkbd6hbyY3wpdyQii/cas2S44N
cQj8HkGv91JLVE24/Wt0gITPCH3rLVJJDGQxprHTVDs1t1RAbsbp0XTksZPCNWDGYIBo2aHDwErhI
omYQ0Xluo1WBtH/UmHgirHvclsou1Ks9jyTxiPyUKRfae7GNOFiX99+ZlB27P3t8CjtSO831Ij0Ip
QrfooZ21YVlUKw0Wy6Ll8EyefyrEYSh8KTm8dQj4O7xxvdg865TLeLpho5PwDRF+/mR3qi8CdGbkE
c4pYZQO8UDXUN4S+pe0aTeTqlYw8rRHWF9TnvtpcNzZw==
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
User-Agent: Evolution 3.54.3 (3.54.3-1.fc41)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 2025-05-28 at 01:35 -0400, Tal Zussman wrote:
> This has been unused since it was added 11 years ago in commit
> d17d8f9dedb9 ("x86/mm: Add tracepoints for TLB flushes").
>=20
> Signed-off-by: Tal Zussman <tz2294@xxxxxxxxxxxx>
>=20
Reviewed-by: Rik van Riel <riel@xxxxxxxxxxx>
--=20
All Rights Reversed.
Return-Path: <linux-kernel+bounces-665623-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id EB74F41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:28:25 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id B8F67189A89D
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:28:38 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id A1C0A288C1F;
Wed, 28 May 2025 14:28:18 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="J7V4HdhH"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id E03E282C60;
Wed, 28 May 2025 14:28:17 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442498; cv=none; b=erLvqAYGRyTxHbErO5UZLPdl1RkFTrka0h0TR1Ywl0pZ0rHk3yq8S7H1CAuGKfhGRFvGyyP76ix+S+VK/lHJVLkMc2nEco3C8pk/Bh0Lqe2oceHWjZ4qsN3wcb/kLpIB2nlkzhLI+lQHIVnYLdSch7nqT6muZQyWLgaBq/nRhbM=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442498; c=relaxed/simple;
bh=Pj2dKcYrs8qtXXImT3zhxemqWnlmlXzSCeJP/bi3GqI=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=flufaKY5SSO0N1It0+X0w7oK0ebvAZsYjw9uqDyavxG7bN896NzbqOXPDOAAP7+P3YUn7m6askAzbRnSmJJV4mkGRFG+M3hd2715VMyeWL7/Y8QaeOPFRy7DEN1rxZKmkGh+nafbvDJ5EmB8qH6L3mWZQyy4I5YKMBRY1rA3ed8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=J7V4HdhH; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 589E9C4CEE3;
Wed, 28 May 2025 14:28:12 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748442497;
bh=Pj2dKcYrs8qtXXImT3zhxemqWnlmlXzSCeJP/bi3GqI=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=J7V4HdhH4LP0/xhdufXH7ukurAfnZkeM28NOSeG7dnwmm7xGN2Q21KwDYd99fZser
ENBiRECT9v5o6UwShPCdLRJs5hb76XQNPWD2f/FtHeNJ16IQ1P1atj4YicGXgqoJn1
Qd2um5zkwTUZJ2j0jGLZXafqR8nLyKbFR3akyuxesS0b0jKtOD4xUph+xmh7+49kee
b927Nhc/iraXGDSm+YLrubDnVPbh8ckd6J+rDLrEABHeq1f/+nNRsVK6PeHmm6jOV6
1a5v0NhCdVWXwv5mJEnlDyFrPrmCiExJ30hu90lAAlQ9yyNdZtG+Q+Zw+BxBaQHGoV
bk/5c/9YQyLKA==
Date: Wed, 28 May 2025 16:28:09 +0200
From: Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx>
To: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
Cc: Marc Zyngier <maz@xxxxxxxxxx>, Thomas Gleixner <tglx@xxxxxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Catalin Marinas <catalin.marinas@xxxxxxx>,
Will Deacon <will@xxxxxxxxxx>, Arnd Bergmann <arnd@xxxxxxxx>,
Sascha Bischoff <sascha.bischoff@xxxxxxx>,
Timothy Hayes <timothy.hayes@xxxxxxx>,
"Liam R. Howlett" <Liam.Howlett@xxxxxxxxxx>,
Mark Rutland <mark.rutland@xxxxxxx>,
Jiri Slaby <jirislaby@xxxxxxxxxx>,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx
Subject: Re: [PATCH v4 18/26] arm64: smp: Support non-SGIs for IPIs
Message-ID: <aDcdeWuwCzZ4pA9y@lpieralisi>
References: <20250513-gicv5-host-v4-0-b36e9b15a6c3@xxxxxxxxxx>
<20250513-gicv5-host-v4-18-b36e9b15a6c3@xxxxxxxxxx>
<20250528131744.00001544@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528131744.00001544@xxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 01:17:44PM +0100, Jonathan Cameron wrote:
> On Tue, 13 May 2025 19:48:11 +0200
> Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx> wrote:
>
> > From: Marc Zyngier <maz@xxxxxxxxxx>
> >
> > The arm64 arch has relied so far on GIC architectural software
> > generated interrupt (SGIs) to handle IPIs. Those are per-cpu
> > software generated interrupts.
> >
> > arm64 architecture code that allocates the IPIs virtual IRQs and
> > IRQ descriptors was written accordingly.
> >
> > On GICv5 systems, IPIs are implemented using LPIs that are not
> > per-cpu interrupts - they are just normal routable IRQs.
> >
> > Add arch code to set-up IPIs on systems where they are handled
> > using normal routable IRQs.
> >
> > For those systems, force the IRQ affinity (and make it immutable)
> > to the cpu a given IRQ was assigned to.
> >
> > Signed-off-by: Marc Zyngier <maz@xxxxxxxxxx>
> > [timothy.hayes@xxxxxxx: fixed ipi/irq conversion, irq flags]
> > Signed-off-by: Timothy Hayes <timothy.hayes@xxxxxxx>
> > [lpieralisi: changed affinity set-up, log]
> > Signed-off-by: Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx>
> > Cc: Will Deacon <will@xxxxxxxxxx>
> > Cc: Catalin Marinas <catalin.marinas@xxxxxxx>
> Hi Lorenzo,
>
> A few trivial comments inline.
>
> > +
> > +static int ipi_to_irq(int ipi, int cpu)
>
> Maybe this naming needs a breadcrumb to indicate this only
> applies only to lpi case as it's directly computed in the old ppi code?
> A comment might do the job.
Maybe rename it to ipi_to_irq_percpu() (similar to what we did for
set_smp_ipi_range()) and then
static int ipi_to_irq(int ipi)
{
ipi_to_irq_percpu(ipi, 0);
}
and use ipi_to_irq() in ppi code ?
Likely overkill, not a big deal anyway.
> > +{
> > + return ipi_irq_base + (cpu * nr_ipi) + ipi;
> > +}
> > +
> > +static int irq_to_ipi(int irq)
> > +{
> > + return (irq - ipi_irq_base) % nr_ipi;
> > +}
>
>
> > +static void ipi_setup_lpi(int ipi, int ncpus)
> > +{
> > + for (int cpu = 0; cpu < ncpus; cpu++) {
> > + int err, irq;
> > +
> > + irq = ipi_to_irq(ipi, cpu);
> > +
> > + err = irq_force_affinity(irq, cpumask_of(cpu));
> > +
> Trivial local consistency thing but maybe no blank line here or...
> > + WARN(err, "Could not force affinity IRQ %d, err=%d\n", irq, err);
> > +
> > + err = request_irq(irq, ipi_handler, IRQF_NO_AUTOEN, "IPI",
> > + &irq_stat);
> > +
> here to match the style in ipi_setup_ppi()
Done.
Thanks,
Lorenzo
> > + WARN(err, "Could not request IRQ %d, err=%d\n", irq, err);
> > +
> > + irq_set_status_flags(irq, (IRQ_HIDDEN | IRQ_NO_BALANCING_MASK));
> > +
> > + get_ipi_desc(cpu, ipi) = irq_to_desc(irq);
> > + }
> > +}
>
Return-Path: <linux-kernel+bounces-665624-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 2359241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:29:43 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 9AF4E189D0D9
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:29:55 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 967B5288C2D;
Wed, 28 May 2025 14:29:34 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="I7laG2yp"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id D123182C60;
Wed, 28 May 2025 14:29:33 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442573; cv=none; b=oTgIBhOAfVSghperg10dB7ViVD+uFs7O/imbPbzwP3hZ4F+/exBce65W7bQhxEHgJzonu2tttmbWggU5cQ/VR5G25AosInl02cbo3zYPFCV5Hq2CAMETTD7Y1nIXHmUkwPC77u7Qe5lj9djcU8iJlPpe7O6nu3Az5zsx78CNNYA=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442573; c=relaxed/simple;
bh=ubMRziPv811a1c4W27GNJyX/xyPJhyiu/AXagdFgPWI=;
h=Date:Content-Type:MIME-Version:From:Cc:To:In-Reply-To:References:
Message-Id:Subject; b=fJ0jAWEiuNj87H/0Ic+D2b6xzR/jWzbaza4SDLiVqi5XD84GvQyUs33xiTNa9oCM7OdKGgfAHBS8Ke9AL+HwAgxxp8IGHFdMav76K7hY9SGmtE2PO8JaGxoEC1L/qAstJBBxcggKghCXZSUlV1M8OUYMU/XBWKWDo6FY8pyfvzg=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=I7laG2yp; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 70CBFC4CEE3;
Wed, 28 May 2025 14:29:33 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748442573;
bh=ubMRziPv811a1c4W27GNJyX/xyPJhyiu/AXagdFgPWI=;
h=Date:From:Cc:To:In-Reply-To:References:Subject:From;
b=I7laG2ypimp7SHSqxMa5Zv8dK5qj7rZUUI7/nErluXMBjhHHMSEtM6yvXCbavNUhJ
ey5iPZkBWJFk8SdpyOmPE4kc14L+AahhnxT82ig5yydt8ZG7426O9eTfU0PgtGGVRe
xxUm5obNaIxguw+DGXasu5SNYMHJKYo3ZwA+moZEIC0Zh1EYIv/kuGIZpD27Mc3PFs
S/T8x6XVxdLiEpgBzOnm7N4RHNl+O3rbxGrGNaiysI7sIoqd0AJeh3oRi0giO6QTLq
5vjtSN63MVbmCnUuTtCt2hed50uiXtRzJcJndBPHYw5f+w44UAcfR7sRFzPy5iAn6o
F4Q1/RWE7qBow==
Date: Wed, 28 May 2025 09:29:31 -0500
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
From: "Rob Herring (Arm)" <robh@xxxxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx,
Bartosz Golaszewski <brgl@xxxxxxxx>,
Alexandre Torgue <alexandre.torgue@xxxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Linus Walleij <linus.walleij@xxxxxxxxxx>,
linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx,
Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>,
devicetree@xxxxxxxxxxxxxxx, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Maxime Coquelin <mcoquelin.stm32@xxxxxxxxx>, linux-gpio@xxxxxxxxxxxxxxx
To: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= <clement.legoffic@xxxxxxxxxxx>
In-Reply-To: <20250528-hdp-upstream-v4-2-7e9b3ad2036d@xxxxxxxxxxx>
References: <20250528-hdp-upstream-v4-0-7e9b3ad2036d@xxxxxxxxxxx>
<20250528-hdp-upstream-v4-2-7e9b3ad2036d@xxxxxxxxxxx>
Message-Id: <174844257180.4036102.7091043043619447480.robh@xxxxxxxxxx>
Subject: Re: [PATCH v4 2/9] dt-bindings: pinctrl: stm32: Introduce HDP
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 15:30:55 +0200, Clément Le Goffic wrote:
> 'HDP' stands for Hardware Debug Port, it is an hardware block in
> STMicrolectronics' MPUs that let the user decide which internal SoC's
> signal to observe.
> It provides 8 ports and for each port there is up to 16 different
> signals that can be output.
> Signals are different for each MPU.
>
> Signed-off-by: Clément Le Goffic <clement.legoffic@xxxxxxxxxxx>
> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>
> ---
> .../devicetree/bindings/pinctrl/st,stm32-hdp.yaml | 187 +++++++++++++++++++++
> 1 file changed, 187 insertions(+)
>
My bot found errors running 'make dt_binding_check' on your patch:
yamllint warnings/errors:
dtschema/dtc warnings/errors:
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/pinctrl/st,stm32-hdp.yaml: $id: Cannot determine base path from $id, relative path/filename doesn't match actual path or filename
$id: http://devicetree.org/schemas/pinctrl/st,stm32-pinctrl-hdp.yaml
file: /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/pinctrl/st,stm32-hdp.yaml
doc reference errors (make refcheckdocs):
See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20250528-hdp-upstream-v4-2-7e9b3ad2036d@xxxxxxxxxxx
The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.
If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:
pip3 install dtschema --upgrade
Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.
Return-Path: <linux-kernel+bounces-665625-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 82E5B41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:30:32 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id BE09B4E22FD
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:30:33 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 5885E288C25;
Wed, 28 May 2025 14:30:26 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="OAHZ1WsQ"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 937B26F06B;
Wed, 28 May 2025 14:30:25 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442625; cv=none; b=k/UemPVJtCXvJ4K5UFKWhQha7cCRMy48VEi056F1HeyGWw31PFE2vRvaSjC1B1GkxRghoRE5khtu/mU4SKKNzeCXMHi5Puwrvb8jNZeBqilHmnFzOtrqA6iBiwi9csyZWqwPDEy87PrOrwBbkPZrA/feVNAKoPjSv2tA76uTHh0=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442625; c=relaxed/simple;
bh=jRw483kLKF6vHdjKiRX9zkkws+EBqLZOZl2WRGzktK0=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=JGRWZzoXg1rjr1/YrMbRM+rwQDhraIa1AzQPT4Gy7T/Ir+AjOP0xHT805c/ilZkUXAuKTGAo+n7SoJnmmZiwugcLLIheHoFOmI65ni/aCbX/6JpR4WT7NZJBnZ5D5YebYz6cfUItCDhlVFgY5Ldf7WxfpM6WsFzK3pa97fOexRQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OAHZ1WsQ; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id D1AF1C4CEE3;
Wed, 28 May 2025 14:30:19 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748442625;
bh=jRw483kLKF6vHdjKiRX9zkkws+EBqLZOZl2WRGzktK0=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=OAHZ1WsQXlff4iqaAu5tKd8JOIXR5fjx+s868eTzXBOzHYeN3azGgI7++pyxeUlU+
vScL0aZzfhY015PrsVRJ0VCLHJuckAhC63a1YnpwqTMtKP9Ecyh7sfoY0KNnWJ66xv
uQLH/K2esf1gEm691fBWnbi0FR+9j6hhzvsWuwyfnYiPurPQBbBUKZKGLAIHz2g10/
GPByNjTT5pLzkvh0GRbknt5xOKG4OJs55y+UZoMFEbE5HH+XdMEgYEcLnUNLuQzCwZ
7DotAIGnRZcylqYb8b4xaHFFnTqie0OGCeL6Q09zR1FusUM+nsQ0XM4MuZOf28pBTi
Vs3l7WowTe1dg==
Date: Wed, 28 May 2025 16:30:16 +0200
From: Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx>
To: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
Cc: Marc Zyngier <maz@xxxxxxxxxx>, Thomas Gleixner <tglx@xxxxxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Catalin Marinas <catalin.marinas@xxxxxxx>,
Will Deacon <will@xxxxxxxxxx>, Arnd Bergmann <arnd@xxxxxxxx>,
Sascha Bischoff <sascha.bischoff@xxxxxxx>,
Timothy Hayes <timothy.hayes@xxxxxxx>,
"Liam R. Howlett" <Liam.Howlett@xxxxxxxxxx>,
Mark Rutland <mark.rutland@xxxxxxx>,
Jiri Slaby <jirislaby@xxxxxxxxxx>,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx
Subject: Re: [PATCH v4 14/26] arm64/sysreg: Add ICH_HFGITR_EL2
Message-ID: <aDcd+CyDORzgkfXK@lpieralisi>
References: <20250513-gicv5-host-v4-0-b36e9b15a6c3@xxxxxxxxxx>
<20250513-gicv5-host-v4-14-b36e9b15a6c3@xxxxxxxxxx>
<20250528122826.0000566c@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528122826.0000566c@xxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 12:28:26PM +0100, Jonathan Cameron wrote:
> On Tue, 13 May 2025 19:48:07 +0200
> Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx> wrote:
>
> > Add ICH_HFGITR_EL2 register description to sysreg.
> >
> > Signed-off-by: Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx>
> > Cc: Will Deacon <will@xxxxxxxxxx>
> > Cc: Catalin Marinas <catalin.marinas@xxxxxxx>
> > Cc: Marc Zyngier <maz@xxxxxxxxxx>
>
> Hi Lorenzo,
>
> > ---
> > arch/arm64/tools/sysreg | 15 +++++++++++++++
> > 1 file changed, 15 insertions(+)
> >
> > diff --git a/arch/arm64/tools/sysreg b/arch/arm64/tools/sysreg
> > index 0927754d9fe2c5addbd9693d83b7324f1af66d3e..d2f53fb7929c69895fe8a21ba625d058a844d447 100644
> > --- a/arch/arm64/tools/sysreg
> > +++ b/arch/arm64/tools/sysreg
> > @@ -3616,6 +3616,21 @@ Res0 1
> > Field 0 ICC_APR_EL1
> > EndSysreg
> >
> > +Sysreg ICH_HFGITR_EL2 3 4 12 9 7
> > +Res0 63:11
> > +Field 10 GICRCDNMIA
> > +Field 9 GICRCDIA
> > +Field 8 GICCDDI
> > +Field 7 GICCDEOI
> > +Field 6 GICCDHM
> > +Field 5 GICCRDRCFG
>
> GICCDRCFG in the spec. (you have a bonus R)
Bah. Good catch - I should move to autogeneration.
> Of course the real question was what am I avoiding that made checking these
> against the spec feel like a good idea? :)
:)
> FWIW with that fixed,
> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
> for patches 2 to 14.
Thanks,
Lorenzo
> > +Field 4 GICCDPEND
> > +Field 3 GICCDAFF
> > +Field 2 GICCDPRI
> > +Field 1 GICCDDIS
> > +Field 0 GICCDEN
> > +EndSysreg
> > +
> > Sysreg ICH_HCR_EL2 3 4 12 11 0
> > Res0 63:32
> > Field 31:27 EOIcount
> >
>
Return-Path: <linux-kernel+bounces-665626-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1B49D41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:32:56 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id BD637189F144
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:33:04 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id ED2DC288C88;
Wed, 28 May 2025 14:32:42 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=fail reason="signature verification failed" (2048-bit key) header.d=armlinux.org.uk header.i=@armlinux.org.uk header.b="0g0dZYmb"
Received: from pandora.armlinux.org.uk (pandora.armlinux.org.uk [78.32.30.218])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7DBF8548EE;
Wed, 28 May 2025 14:32:40 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=78.32.30.218
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442762; cv=none; b=WCedmAtR84Y7ZhNRJnvuKaiqnLYWYwE8+dNgzcvct/Gmaggq+Onk7eUrwwEkplL6KWshIqvzkji81KB823BxA4/qFgSWtwGzau3tzhOCVPhoNq62siSnGo6rkOTWlg98MbCwkNsMuuVcoM2kpNkqNgB3xBuIMHEn36mKeGv1uyg=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442762; c=relaxed/simple;
bh=1vSCO5vTiinfXc1wGmDJEIBv6Q5jDE79VgZ6H2zNW6E=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=cz/13QY+huomBUoVAINd9RIn4Ep+nG5bQpXf4ZBj9kwnbe9RhYCDDaQNuJEe/MhpgN1+UYfExxm/Ch2aaVGrwaILBfn6lJ3BhmKZQ1heAMNGPLeTxRrtDzPK0PYFDQnGlWBfUwI4RLOE29Rlv3N5Ch0vaybY2RQ0fIUPw1mZyZ0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=armlinux.org.uk; spf=none smtp.mailfrom=armlinux.org.uk; dkim=pass (2048-bit key) header.d=armlinux.org.uk header.i=@armlinux.org.uk header.b=0g0dZYmb; arc=none smtp.client-ip=78.32.30.218
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=armlinux.org.uk
Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=armlinux.org.uk
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
d=armlinux.org.uk; s=pandora-2019; h=Sender:In-Reply-To:Content-Type:
MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:Reply-To:
Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:
Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:
List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive;
bh=U+FDShjpx6kGEUB2/dQKTjU6xdyCNeX5trpYm619UV4=; b=0g0dZYmb7qFGfQ6Gt46nLap1SM
L54LEYGcitbtYKGtm9Fz/qwyr1CXW4N6f2R0fuO8qrUfCyopQMDIvPocpm79WXDEZ6nYQVga+Dxli
tsnaCIBD9NDb0B3YXnWZ5FFmDWioIi3kERl1fFLstxdirVcevQWSL3slMVX/xcjm6J5fzLvljyKX6
DuK4Lq/+Zgs3yg0vnTiIurv7ny7d2x+Y9Ynr+4A6DwvY/9aZcbAAWJkLUC6TfjccvbKpNqTSjRuog
bu18UN9MXxuWyUJKrjjFyQjmJRpewfpkHUvev73LP6t2aRCste0h1QQmVmxs7Gwy0RQL8nQ5uYkcl
GCfODJSw==;
Received: from shell.armlinux.org.uk ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:38612)
by pandora.armlinux.org.uk with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
(Exim 4.96)
(envelope-from <linux@xxxxxxxxxxxxxxx>)
id 1uKHpN-0000Ns-0k;
Wed, 28 May 2025 15:32:21 +0100
Received: from linux by shell.armlinux.org.uk with local (Exim 4.96)
(envelope-from <linux@xxxxxxxxxxxxxxxxxxxxx>)
id 1uKHpF-0002UB-2v;
Wed, 28 May 2025 15:32:13 +0100
Date: Wed, 28 May 2025 15:32:13 +0100
From: "Russell King (Oracle)" <linux@xxxxxxxxxxxxxxx>
To: weishangjuan@xxxxxxxxxxxxxxxxxx
Cc: andrew+netdev@xxxxxxx, davem@xxxxxxxxxxxxx, edumazet@xxxxxxxxxx,
kuba@xxxxxxxxxx, pabeni@xxxxxxxxxx, robh@xxxxxxxxxx,
krzk+dt@xxxxxxxxxx, conor+dt@xxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
mcoquelin.stm32@xxxxxxxxx, alexandre.torgue@xxxxxxxxxxx,
vladimir.oltean@xxxxxxx, yong.liang.choong@xxxxxxxxxxxxxxx,
prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx, inochiama@xxxxxxxxx,
jan.petrous@xxxxxxxxxxx, jszhang@xxxxxxxxxx, p.zabel@xxxxxxxxxxxxxx,
0x1207@xxxxxxxxx, boon.khai.ng@xxxxxxxxxx,
linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, ningyu@xxxxxxxxxxxxxxxxxx,
linmin@xxxxxxxxxxxxxxxxxx, lizhi2@xxxxxxxxxxxxxxxxxx
Subject: Re: [PATCH v2 2/2] =?iso-8859-1?Q?ethernet?=
=?iso-8859-1?B?OqBlc3dpbjqgQWRkoGVpYzc3MDCgZXRoZXJuZXSgZHJpdmVy?=
Message-ID: <aDcebRguDnM7sqVk@xxxxxxxxxxxxxxxxxxxxx>
References: <20250528041455.878-1-weishangjuan@xxxxxxxxxxxxxxxxxx>
<20250528041634.912-1-weishangjuan@xxxxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528041634.912-1-weishangjuan@xxxxxxxxxxxxxxxxxx>
Sender: Russell King (Oracle) <linux@xxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 12:16:25PM +0800, weishangjuan@xxxxxxxxxxxxxxxxxx wrote:
> +static struct clk *dwc_eth_find_clk(struct plat_stmmacenet_data *plat_dat,
> + const char *name)
> +{
> + for (int i = 0; i < plat_dat->num_clks; i++)
> + if (strcmp(plat_dat->clks[i].id, name) == 0)
> + return plat_dat->clks[i].clk;
> +
> + return NULL;
> +}
Okay, I think this driver is mindless copying of dwmac-dwc-qos-eth.c
between 24th February and 9th April 2025. I can say this because I added
this function to that driver and later removed it.
Looking at the rest of the code, I doubt this even does anything useful
(hence "mindless copying") as you're not fetching any clocks into this
array, and plat_dat->num_clks will be zero here. Thus, this will return
NULL. Therefore, you haven't thought about whether you need this or not,
but have just copied dwmac-dwc-qos-eth.c and then modified it until it
works for you.
You haven't acknowledged where you derived this code from - you've cut
the header of your source file out, and basically are claiming it to be
all your own work. I know this is rubbish for the reason I've stated
above. This is quite simply plagiarism. I am not impressed.
Thus I will end the review here, and simply state that this is not
acceptable.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
Return-Path: <linux-kernel+bounces-665627-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 0462F41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:33:15 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id A22B09E45AC
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:32:41 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 8246A289364;
Wed, 28 May 2025 14:32:47 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Pd0Ki3/F"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 01868289345
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:32:44 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442766; cv=none; b=d5ZSvs1w5eDImzYf6CSv/QiBOnAweXGrtqwjcWMAdW65pSW/ELGJp2JVjYSLgQkOKtJUgOzDm/Izw6/98T3H6JXz0bfrf7sr/dvzUJlxRCRNtsq2Q0qqZt24KVsxjWay9qJZch4NYtMCRP9ZmDcu4OSXLlx4VU7iQN4+ctb1Bnk=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442766; c=relaxed/simple;
bh=JBYwdCdTyvYoQAXWxDyaQxN2QX3e1Xl53i4v/JIvq8g=;
h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=kLvbUOKgX6S6YEjLeJzfgdcl0H8Ltx2gN3D2lYFPlUz+c01S7mJwBoBr+N/+eCx5z+uZ7dUz07fGVHkpawK0nTGiHFq2StNDpyq81PY2bQ45C79YGI/fo+Wwj9qupMDPmxIg0DznGnI1OaoQmk8+Yg8PNUFHcz6apx9fZ+AffS4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Pd0Ki3/F; arc=none smtp.client-ip=170.10.133.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748442763;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:cc:mime-version:mime-version:
content-transfer-encoding:content-transfer-encoding;
bh=eBwB1N+lCFgkoewCyl34COuFv/09dqI6TaRz6nP+SHg=;
b=Pd0Ki3/FUZK7Ti95N3fpyNAWALh4VmLS7S6lfmLXGgT5wdBN2YbkEL7vN/K0pTefr912Q/
fiTp2o2gL0+85LLf3PV8BZfXRO49l1UH0AdcHQuCZfAi0+XqcinaWdaJk9UA7IpkOq98In
cV1N+tkGwIgykM59YHnNkiCL34LwL48=
Received: from mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com
(ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by
relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,
cipher=TLS_AES_256_GCM_SHA384) id us-mta-68-H7OXcgnFOLqjTVayGDFiGA-1; Wed,
28 May 2025 10:32:42 -0400
X-MC-Unique: H7OXcgnFOLqjTVayGDFiGA-1
X-Mimecast-MFC-AGG-ID: H7OXcgnFOLqjTVayGDFiGA_1748442761
Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
(No client certificate requested)
by mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 275351955DAD;
Wed, 28 May 2025 14:32:36 +0000 (UTC)
Received: from fedora.redhat.com (unknown [10.45.225.94])
by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id C93EC19560AA;
Wed, 28 May 2025 14:32:33 +0000 (UTC)
From: Tomas Glozar <tglozar@xxxxxxxxxx>
To: Steven Rostedt <rostedt@xxxxxxxxxxx>
Cc: linux-trace-kernel@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
John Kacur <jkacur@xxxxxxxxxx>,
Luis Goncalves <lgoncalv@xxxxxxxxxx>,
Tomas Glozar <tglozar@xxxxxxxxxx>
Subject: [RFC PATCH 0/2] rtla/timerlat: Implement flexible actions on latency threshold overflow
Date: Wed, 28 May 2025 16:28:56 +0200
Message-ID: <20250528142858.185017-1-tglozar@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
rtla-timerlat defines the -i and -T options to set a threshold for
latency, stopping tracing if a sample above the threshold is
encountered. After tracing is stopped, one of two optional actions can
be enabled: saving trace output and auto-analysis. Auto-analysis is
enabled by default, unless --aa-only is supplied, while trace output has
to be explicitly set with -t/--trace-output.
This is an RFC of a feature extending this to a potentionally arbitrary
action. It adds a new option, -A/--action-on-overflow, that takes
the action to be performed and optionally, arguments to that action. For
example:
$ rtla timerlat hist -T 10 -A command,exec=date
will print the date after stopping tracing. The argument also supports
trace output, via -A trace (equivalent to -t), and can be specified
multiple times. See the patch log for more information on the actions
implemented in the RFC.
The feature was inspired by a case where collecting perf data on rtla
latency overflow was required, which can be done by sending a signal
to the perf process. In general, the feature is aiming to allow
integration with external tooling.
The RFC contains two patches. The first one clearly distinguishes
between rtla-timerlat tracing modes with regards to collecting data:
BPF-only mode, tracefs-only mode, and mixed mode. It is not a hard
prerequisite of the other patch, but is expected to be useful in
the implementation of the next version of the patchset. The second one
contains the actions feature itself.
Missing functionality in this RFC expected to be in the final version:
- Allowing the tracing to continue after the action. This is expected
to be implemented via either explicitly stopping tracing with "-A stop"
if needed (and not stopping if any other action is specified), or vice
versa by explicitly continuing with "-A continue". The latter might be
better for more meaningful backwards compatibility.
An unresolved question is whether to stop tracing or not during
the execution of the actions, if the measurement is to continue.
- Specifying a trace output file, like -t does, e.g. "-A trace,file=a.txt".
- Converting auto-analysis into an action of this kind.
- Multiple actions of same kind in one run, e.g.:
"-A signal,pid=2,num=2 -A signal,pid=3,num=2"
- Properly handling errors when adding actions.
- Providing the latency to the exec action command via an environmental
variable.
- Plus there are a few minor checkpatch issues.
Suggestions (e.g. with respect to your own use cases) are most welcome.
Tomas Glozar (2):
rtla/timerlat: Introduce enum timerlat_tracing_mode
rtla/timerlat: Add action on threshold
tools/tracing/rtla/src/Build | 1 +
tools/tracing/rtla/src/actions.c | 155 +++++++++++++++++++++++++
tools/tracing/rtla/src/actions.h | 33 ++++++
tools/tracing/rtla/src/timerlat.c | 66 +++++++++--
tools/tracing/rtla/src/timerlat.h | 22 +++-
tools/tracing/rtla/src/timerlat_hist.c | 83 ++++++++-----
tools/tracing/rtla/src/timerlat_top.c | 89 ++++++++------
7 files changed, 375 insertions(+), 74 deletions(-)
create mode 100644 tools/tracing/rtla/src/actions.c
create mode 100644 tools/tracing/rtla/src/actions.h
--
2.49.0
Return-Path: <linux-kernel+bounces-665628-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id DA4B741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:33:39 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 86CD34E127B
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:33:10 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id E601628980F;
Wed, 28 May 2025 14:32:48 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Q5jHZ/4r"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 89808548EE
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:32:45 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442767; cv=none; b=SuB+dv1p5o427Pvw13lQ44CjF1qOhX8NrbSwuoKHPorv+L23HCC4B9/49VBZGbt/bsoYRjzHhmALxz3EtWl+DmwSWj/Pv3P61t/643VrCAZ0xbhdla6AjGkGpqAzzxEW9LViKWH+hJr8/yQCWLssBbv7APupnBBJXDKLdfLsvE4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442767; c=relaxed/simple;
bh=7pzEOFDkSk4OGTttMhg7+3fNiqnabN4HSGPccqE4KZs=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=PeK9BjvobtPZG6gWpzmTKExKzJj6VPBmq3HzWJX2PUjav2ad010A5lilXsNJkxDtzG2lQ76MLhTO9zBSxVl1XvQYW/Ct8ScW1UHZ2ad1CVcdlZAUO6kXJIcB9epRg0t43nmibxxPSAqCJRMfGOhGNUQdRhqPd/3UszK9xsQNuIQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Q5jHZ/4r; arc=none smtp.client-ip=170.10.129.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748442764;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:cc:mime-version:mime-version:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=X9FghnowdvIfcJWFBcyPjWLjwFh8ZP/bVgyoxmiG59E=;
b=Q5jHZ/4rsTZEzbRZT2UMrfi5Sgoqj2njTxSLqRg97TcJGOJsWnFRHJglidttmk8GGNcbXY
AzO8uLPiWOlYi4gE5KT91WhHRw+sB3D0XctxSA2n8FDS3nORy8s6O7rZ6HWhFQ3WvUTs1P
kzcrXwcKBXf+6nLjR5nbMQZnf5/M9ys=
Received: from mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com
(ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by
relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,
cipher=TLS_AES_256_GCM_SHA384) id us-mta-387-V5p-lMsaMT68GLKarubc0Q-1; Wed,
28 May 2025 10:32:40 -0400
X-MC-Unique: V5p-lMsaMT68GLKarubc0Q-1
X-Mimecast-MFC-AGG-ID: V5p-lMsaMT68GLKarubc0Q_1748442759
Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
(No client certificate requested)
by mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 9B8B6195608A;
Wed, 28 May 2025 14:32:39 +0000 (UTC)
Received: from fedora.redhat.com (unknown [10.45.225.94])
by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 405A019560AA;
Wed, 28 May 2025 14:32:36 +0000 (UTC)
From: Tomas Glozar <tglozar@xxxxxxxxxx>
To: Steven Rostedt <rostedt@xxxxxxxxxxx>
Cc: linux-trace-kernel@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
John Kacur <jkacur@xxxxxxxxxx>,
Luis Goncalves <lgoncalv@xxxxxxxxxx>,
Tomas Glozar <tglozar@xxxxxxxxxx>
Subject: [RFC PATCH 1/2] rtla/timerlat: Introduce enum timerlat_tracing_mode
Date: Wed, 28 May 2025 16:28:57 +0200
Message-ID: <20250528142858.185017-2-tglozar@xxxxxxxxxx>
In-Reply-To: <20250528142858.185017-1-tglozar@xxxxxxxxxx>
References: <20250528142858.185017-1-tglozar@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
After the introduction of BPF-based sample collection, rtla-timerlat
effectively runs in one of three modes:
- Pure BPF mode, with tracefs only being used to set up the timerlat
tracer. Sample processing and stop on threshold are handled by BPF.
- tracefs mode. BPF is unsupported or kernel is lacking the necessary
trace event (osnoise:timerlat_sample). Stop on theshold is handled by
timerlat tracer stopping tracing in all instances.
- BPF/tracefs mixed mode - BPF is used for sample collection for top or
histogram, tracefs is used for trace output and/or auto-analysis. Stop
on threshold is handled both through BPF program, which stops sample
collection for top/histogram and wakes up rtla, and by timerlat
tracer, which stops tracing for trace output/auto-analysis instances.
Add enum timerlat_tracing_mode, with three values:
- TRACING_MODE_BPF
- TRACING_MODE_TRACEFS
- TRACING_MODE_MIXED
Those represent the modes described above. A field of this type is added
to struct timerlat_params, named "mode", replacing the no_bpf variable.
params->mode is set in timerlat_{top,hist}_parse_args to
TRACING_MODE_BPF or TRACING_MODE_MIXED based on whether trace output
and/or auto-analysis is requested. timerlat_{top,hist}_main then checks
if BPF is not unavailable or disabled, in that case, it sets
params->mode to TRACING_MODE_TRACEFS.
A condition is added to timerlat_apply_config that skips setting
timerlat tracer thresholds if params->mode is TRACING_MODE_BPF (those
are unnecessary, since they only turn off tracing, which is already
turned off in that case, since BPF is used to collect samples).
Signed-off-by: Tomas Glozar <tglozar@xxxxxxxxxx>
---
tools/tracing/rtla/src/timerlat.c | 24 ++++++-----
tools/tracing/rtla/src/timerlat.h | 18 +++++++++
tools/tracing/rtla/src/timerlat_hist.c | 49 +++++++++++++----------
tools/tracing/rtla/src/timerlat_top.c | 55 +++++++++++++++-----------
4 files changed, 94 insertions(+), 52 deletions(-)
diff --git a/tools/tracing/rtla/src/timerlat.c b/tools/tracing/rtla/src/timerlat.c
index c29e2ba2d7d8..63d6d43eafff 100644
--- a/tools/tracing/rtla/src/timerlat.c
+++ b/tools/tracing/rtla/src/timerlat.c
@@ -40,16 +40,22 @@ timerlat_apply_config(struct osnoise_tool *tool, struct timerlat_params *params)
CPU_SET(i, ¶ms->monitored_cpus);
}
- retval = osnoise_set_stop_us(tool->context, params->stop_us);
- if (retval) {
- err_msg("Failed to set stop us\n");
- goto out_err;
- }
+ if (params->mode != TRACING_MODE_BPF) {
+ /*
+ * In tracefs and mixed mode, timerlat tracer handles stopping
+ * on threshold
+ */
+ retval = osnoise_set_stop_us(tool->context, params->stop_us);
+ if (retval) {
+ err_msg("Failed to set stop us\n");
+ goto out_err;
+ }
- retval = osnoise_set_stop_total_us(tool->context, params->stop_total_us);
- if (retval) {
- err_msg("Failed to set stop total us\n");
- goto out_err;
+ retval = osnoise_set_stop_total_us(tool->context, params->stop_total_us);
+ if (retval) {
+ err_msg("Failed to set stop total us\n");
+ goto out_err;
+ }
}
diff --git a/tools/tracing/rtla/src/timerlat.h b/tools/tracing/rtla/src/timerlat.h
index 73045aef23fa..e0a553545d03 100644
--- a/tools/tracing/rtla/src/timerlat.h
+++ b/tools/tracing/rtla/src/timerlat.h
@@ -1,6 +1,23 @@
// SPDX-License-Identifier: GPL-2.0
#include "osnoise.h"
+/*
+ * Define timerlat tracing mode.
+ *
+ * There are three tracing modes:
+ * - tracefs-only, used when BPF is unavailable.
+ * - BPF-only, used when BPF is available and neither trace saving nor
+ * auto-analysis are enabled.
+ * - mixed mode, used when BPF is available and either trace saving or
+ * auto-analysis is enabled (which rely on sample collection through
+ * tracefs).
+ */
+enum timerlat_tracing_mode {
+ TRACING_MODE_BPF,
+ TRACING_MODE_TRACEFS,
+ TRACING_MODE_MIXED,
+};
+
struct timerlat_params {
/* Common params */
char *cpus;
@@ -30,6 +47,7 @@ struct timerlat_params {
cpu_set_t hk_cpu_set;
struct sched_attr sched_param;
struct trace_events *events;
+ enum timerlat_tracing_mode mode;
union {
struct {
/* top only */
diff --git a/tools/tracing/rtla/src/timerlat_hist.c b/tools/tracing/rtla/src/timerlat_hist.c
index 9d9efeedc4c2..70548beed812 100644
--- a/tools/tracing/rtla/src/timerlat_hist.c
+++ b/tools/tracing/rtla/src/timerlat_hist.c
@@ -802,6 +802,9 @@ static struct timerlat_params
params->bucket_size = 1;
params->entries = 256;
+ /* default to BPF mode */
+ params->mode = TRACING_MODE_BPF;
+
while (1) {
static struct option long_options[] = {
{"auto", required_argument, 0, 'a'},
@@ -1054,6 +1057,13 @@ static struct timerlat_params
if (params->kernel_workload && params->user_workload)
timerlat_hist_usage("--kernel-threads and --user-threads are mutually exclusive!");
+ /*
+ * If auto-analysis or trace output is enabled, switch from BPF mode to
+ * mixed mode
+ */
+ if (params->mode == TRACING_MODE_BPF && params->trace_output && !params->no_aa)
+ params->mode = TRACING_MODE_MIXED;
+
return params;
}
@@ -1149,7 +1159,6 @@ int timerlat_hist_main(int argc, char *argv[])
pthread_t timerlat_u;
int retval;
int nr_cpus, i;
- bool no_bpf = false;
params = timerlat_hist_parse_args(argc, argv);
if (!params)
@@ -1161,12 +1170,6 @@ int timerlat_hist_main(int argc, char *argv[])
goto out_exit;
}
- retval = timerlat_hist_apply_config(tool, params);
- if (retval) {
- err_msg("Could not apply config\n");
- goto out_free;
- }
-
trace = &tool->trace;
/*
* Save trace instance into global variable so that SIGINT can stop
@@ -1175,24 +1178,30 @@ int timerlat_hist_main(int argc, char *argv[])
*/
hist_inst = trace;
+ /*
+ * Try to enable BPF, unless disabled explicitly.
+ * If BPF enablement fails, fall back to tracefs mode.
+ */
if (getenv("RTLA_NO_BPF") && strncmp(getenv("RTLA_NO_BPF"), "1", 2) == 0) {
debug_msg("RTLA_NO_BPF set, disabling BPF\n");
- no_bpf = true;
- }
-
- if (!no_bpf && !tep_find_event_by_name(trace->tep, "osnoise", "timerlat_sample")) {
+ params->mode = TRACING_MODE_TRACEFS;
+ } else if (!tep_find_event_by_name(trace->tep, "osnoise", "timerlat_sample")) {
debug_msg("osnoise:timerlat_sample missing, disabling BPF\n");
- no_bpf = true;
- }
-
- if (!no_bpf) {
+ params->mode = TRACING_MODE_TRACEFS;
+ } else {
retval = timerlat_bpf_init(params);
if (retval) {
debug_msg("Could not enable BPF\n");
- no_bpf = true;
+ params->mode = TRACING_MODE_TRACEFS;
}
}
+ retval = timerlat_hist_apply_config(tool, params);
+ if (retval) {
+ err_msg("Could not apply config\n");
+ goto out_free;
+ }
+
retval = enable_timerlat(trace);
if (retval) {
err_msg("Failed to enable timerlat tracer\n");
@@ -1320,7 +1329,7 @@ int timerlat_hist_main(int argc, char *argv[])
trace_instance_start(&record->trace);
if (!params->no_aa)
trace_instance_start(&aa->trace);
- if (no_bpf) {
+ if (params->mode == TRACING_MODE_TRACEFS) {
trace_instance_start(trace);
} else {
retval = timerlat_bpf_attach();
@@ -1333,7 +1342,7 @@ int timerlat_hist_main(int argc, char *argv[])
tool->start_time = time(NULL);
timerlat_hist_set_signals(params);
- if (no_bpf) {
+ if (params->mode == TRACING_MODE_TRACEFS) {
while (!stop_tracing) {
sleep(params->sleep_time);
@@ -1362,7 +1371,7 @@ int timerlat_hist_main(int argc, char *argv[])
} else
timerlat_bpf_wait(-1);
- if (!no_bpf) {
+ if (params->mode != TRACING_MODE_TRACEFS) {
timerlat_bpf_detach();
retval = timerlat_hist_bpf_pull_data(tool);
if (retval) {
@@ -1410,7 +1419,7 @@ int timerlat_hist_main(int argc, char *argv[])
osnoise_destroy_tool(tool);
free(params);
free_cpu_idle_disable_states();
- if (!no_bpf)
+ if (params->mode != TRACING_MODE_TRACEFS)
timerlat_bpf_destroy();
out_exit:
exit(return_value);
diff --git a/tools/tracing/rtla/src/timerlat_top.c b/tools/tracing/rtla/src/timerlat_top.c
index 79cb6f28967f..30f1d6cbcad1 100644
--- a/tools/tracing/rtla/src/timerlat_top.c
+++ b/tools/tracing/rtla/src/timerlat_top.c
@@ -559,6 +559,9 @@ static struct timerlat_params
/* display data in microseconds */
params->output_divisor = 1000;
+ /* default to BPF mode */
+ params->mode = TRACING_MODE_BPF;
+
while (1) {
static struct option long_options[] = {
{"auto", required_argument, 0, 'a'},
@@ -790,6 +793,13 @@ static struct timerlat_params
if (params->kernel_workload && params->user_workload)
timerlat_top_usage("--kernel-threads and --user-threads are mutually exclusive!");
+ /*
+ * If auto-analysis or trace output is enabled, switch from BPF mode to
+ * mixed mode
+ */
+ if (params->mode == TRACING_MODE_BPF && params->trace_output && !params->no_aa)
+ params->mode = TRACING_MODE_MIXED;
+
return params;
}
@@ -994,7 +1004,6 @@ int timerlat_top_main(int argc, char *argv[])
char *max_lat;
int retval;
int nr_cpus, i;
- bool no_bpf = false;
params = timerlat_top_parse_args(argc, argv);
if (!params)
@@ -1006,38 +1015,38 @@ int timerlat_top_main(int argc, char *argv[])
goto out_exit;
}
- retval = timerlat_top_apply_config(top, params);
- if (retval) {
- err_msg("Could not apply config\n");
- goto out_free;
- }
-
trace = &top->trace;
/*
- * Save trace instance into global variable so that SIGINT can stop
- * the timerlat tracer.
- * Otherwise, rtla could loop indefinitely when overloaded.
- */
+ * Save trace instance into global variable so that SIGINT can stop
+ * the timerlat tracer.
+ * Otherwise, rtla could loop indefinitely when overloaded.
+ */
top_inst = trace;
+ /*
+ * Try to enable BPF, unless disabled explicitly.
+ * If BPF enablement fails, fall back to tracefs mode.
+ */
if (getenv("RTLA_NO_BPF") && strncmp(getenv("RTLA_NO_BPF"), "1", 2) == 0) {
debug_msg("RTLA_NO_BPF set, disabling BPF\n");
- no_bpf = true;
- }
-
- if (!no_bpf && !tep_find_event_by_name(trace->tep, "osnoise", "timerlat_sample")) {
+ params->mode = TRACING_MODE_TRACEFS;
+ } else if (!tep_find_event_by_name(trace->tep, "osnoise", "timerlat_sample")) {
debug_msg("osnoise:timerlat_sample missing, disabling BPF\n");
- no_bpf = true;
- }
-
- if (!no_bpf) {
+ params->mode = TRACING_MODE_TRACEFS;
+ } else {
retval = timerlat_bpf_init(params);
if (retval) {
debug_msg("Could not enable BPF\n");
- no_bpf = true;
+ params->mode = TRACING_MODE_TRACEFS;
}
}
+ retval = timerlat_top_apply_config(top, params);
+ if (retval) {
+ err_msg("Could not apply config\n");
+ goto out_free;
+ }
+
retval = enable_timerlat(trace);
if (retval) {
err_msg("Failed to enable timerlat tracer\n");
@@ -1166,7 +1175,7 @@ int timerlat_top_main(int argc, char *argv[])
trace_instance_start(&record->trace);
if (!params->no_aa)
trace_instance_start(&aa->trace);
- if (no_bpf) {
+ if (params->mode == TRACING_MODE_TRACEFS) {
trace_instance_start(trace);
} else {
retval = timerlat_bpf_attach();
@@ -1179,7 +1188,7 @@ int timerlat_top_main(int argc, char *argv[])
top->start_time = time(NULL);
timerlat_top_set_signals(params);
- if (no_bpf)
+ if (params->mode == TRACING_MODE_TRACEFS)
retval = timerlat_top_main_loop(top, record, params, ¶ms_u);
else
retval = timerlat_top_bpf_main_loop(top, record, params, ¶ms_u);
@@ -1187,7 +1196,7 @@ int timerlat_top_main(int argc, char *argv[])
if (retval)
goto out_top;
- if (!no_bpf)
+ if (params->mode != TRACING_MODE_TRACEFS)
timerlat_bpf_detach();
if (params->user_workload && !params_u.stopped_running) {
--
2.49.0
Return-Path: <linux-kernel+bounces-665629-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 36B0841E003FB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:33:40 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id F136C3B608A
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:32:59 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 3E8F2288C88;
Wed, 28 May 2025 14:32:51 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="OO6CleXO"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 65F99289360
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:32:47 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442769; cv=none; b=kBntyCev25M/EHA2SkXIMNUeDIf018pPsoo09zHwbBc69fdwLbC5IPVUA8fKOTX7m9IH/Wjc4GpMssAcGLHse3h08WkbWqiMhSOvtnsGa5mG47pxI9evrxFTZ0SmmH6Wpgbrfu8+OrUZG+ebF7QfLRxxgxug7Z+GKPab1Fmvc3Q=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442769; c=relaxed/simple;
bh=ISyB477vsWeF42Yz0SalyeZ2i4D75hkmWsj/iYuj4CI=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=BU1HnquGhesV5H9WzkdwH6eSIfRzA503lGxUTzsyvAz5BUFL1PyZYvgpfvmVtu/GHnLsQfgk8ImtrzyMIpRH5nQ0v20hiTbRNHDUzesgnqWn2EEYp1fSqnJ2OVO7cfL6UYlC+T21vwGeMlhuLr6hOghHagIg19+7VbU7nrEAA3o=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=OO6CleXO; arc=none smtp.client-ip=170.10.129.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748442766;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:cc:mime-version:mime-version:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=pvzNszbzHtfrqe4Ama9R3Qoz9uboq2bWIkQhK85os6U=;
b=OO6CleXOBn4KY4LfiSjJI6vAFvbe66Ve9GDaA4of16xGzUHMAnSgY6V6OzWJ2+8A+WHpes
dbhZDyINS3Dpb2JYxTcz5+itB9N9p8dIOemI31H3tWUIzyVQGQZZQ4iH3eUA53TAACSh2/
7lvgSINv5/n/jcbkxhFpOt2+5Ms13Yg=
Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com
(ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by
relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,
cipher=TLS_AES_256_GCM_SHA384) id us-mta-623-93D2QbdFNZ2vz1SoMBxQgA-1; Wed,
28 May 2025 10:32:43 -0400
X-MC-Unique: 93D2QbdFNZ2vz1SoMBxQgA-1
X-Mimecast-MFC-AGG-ID: 93D2QbdFNZ2vz1SoMBxQgA_1748442762
Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
(No client certificate requested)
by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 9450B1801A08;
Wed, 28 May 2025 14:32:42 +0000 (UTC)
Received: from fedora.redhat.com (unknown [10.45.225.94])
by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 33E3819560AA;
Wed, 28 May 2025 14:32:39 +0000 (UTC)
From: Tomas Glozar <tglozar@xxxxxxxxxx>
To: Steven Rostedt <rostedt@xxxxxxxxxxx>
Cc: linux-trace-kernel@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
John Kacur <jkacur@xxxxxxxxxx>,
Luis Goncalves <lgoncalv@xxxxxxxxxx>,
Tomas Glozar <tglozar@xxxxxxxxxx>
Subject: [RFC PATCH 2/2] rtla/timerlat: Add action on threshold
Date: Wed, 28 May 2025 16:28:58 +0200
Message-ID: <20250528142858.185017-3-tglozar@xxxxxxxxxx>
In-Reply-To: <20250528142858.185017-1-tglozar@xxxxxxxxxx>
References: <20250528142858.185017-1-tglozar@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Extend the functionality provided by the -t/--trace option, which
triggers saving the contents of a tracefs buffer after tracing is
stopped, to support implementing arbitrary actions.
A new option, -A/--action-on-overflow, is added. Supported actions are:
- -A trace: Saves tracefs buffer. Same as -t.
- -A signal,num=<sig>,pid=<pid>: Sends signal to process. "parent" might
be specified instead of number to send signal to parent process.
- -A exec,command=<command>: Execute shell command.
The action is executed when tracing is stopped, at the same place as
saving the trace output. Multiple actions might be specified and will be
executed in order; however, only one action of each type is allowed.
If the action fails, the following actions are not executed. For
example, this command:
$ rtla timerlat -T 20 -A trace -A command,"grep ipi_send timerlat_output.txt" -A signal,num=2,pid=parent
will send signal 2 (SIGINT) to parent process, but only if saved trace
contains the text "ipi_send".
This way, the feature can be used for flexible reactions on latency
spikes, and allows combining rtla with other tooling like perf.
Signed-off-by: Tomas Glozar <tglozar@xxxxxxxxxx>
---
tools/tracing/rtla/src/Build | 1 +
tools/tracing/rtla/src/actions.c | 155 +++++++++++++++++++++++++
tools/tracing/rtla/src/actions.h | 33 ++++++
tools/tracing/rtla/src/timerlat.c | 42 +++++++
tools/tracing/rtla/src/timerlat.h | 4 +-
tools/tracing/rtla/src/timerlat_hist.c | 36 ++++--
tools/tracing/rtla/src/timerlat_top.c | 36 ++++--
7 files changed, 283 insertions(+), 24 deletions(-)
create mode 100644 tools/tracing/rtla/src/actions.c
create mode 100644 tools/tracing/rtla/src/actions.h
diff --git a/tools/tracing/rtla/src/Build b/tools/tracing/rtla/src/Build
index 7bb7e39e391a..66631280b75b 100644
--- a/tools/tracing/rtla/src/Build
+++ b/tools/tracing/rtla/src/Build
@@ -1,5 +1,6 @@
rtla-y += trace.o
rtla-y += utils.o
+rtla-y += actions.o
rtla-y += osnoise.o
rtla-y += osnoise_top.o
rtla-y += osnoise_hist.o
diff --git a/tools/tracing/rtla/src/actions.c b/tools/tracing/rtla/src/actions.c
new file mode 100644
index 000000000000..de3a4a031699
--- /dev/null
+++ b/tools/tracing/rtla/src/actions.c
@@ -0,0 +1,155 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <stdlib.h>
+#include <string.h>
+
+#include "actions.h"
+
+/*
+ * action_options_init - initialize struct action_options
+ */
+void
+action_options_init(struct action_options *opts)
+{
+ opts->actions_length = 0;
+ for (int i = 0; i < ACTION_FIELD_N; i++) {
+ opts->actions[i] = ACTION_NONE;
+ opts->action_present[i] = false;
+ }
+ opts->trace_output = NULL;
+}
+
+/*
+ * action_options_destroy - destroy struct action_options
+ */
+void
+action_options_destroy(struct action_options *opts)
+{
+ if (opts->command)
+ free(opts->command);
+}
+
+/*
+ * action_add_trace_output - add an action to output trace
+ */
+int
+action_add_trace_output(struct action_options *opts, char *trace_output)
+{
+ if (opts->action_present[ACTION_TRACE_OUTPUT])
+ return 1;
+ opts->action_present[ACTION_TRACE_OUTPUT] = true;
+
+ opts->actions[opts->actions_length++] = ACTION_TRACE_OUTPUT;
+ opts->trace_output = trace_output;
+
+ return 0;
+}
+
+/*
+ * action_add_trace_output - add an action to send signal to a process
+ */
+int
+action_add_signal(struct action_options *opts, int signal, int pid)
+{
+ if (opts->action_present[ACTION_SIGNAL])
+ return 1;
+ opts->action_present[ACTION_SIGNAL] = true;
+
+ opts->actions[opts->actions_length++] = ACTION_SIGNAL;
+ opts->signal = signal;
+ opts->pid = pid;
+
+ return 0;
+}
+
+/*
+ * action_add_exec - add an action to execute a shell command
+ */
+int
+action_add_exec(struct action_options *opts, char *command)
+{
+ if (opts->action_present[ACTION_EXEC])
+ return 1;
+ opts->action_present[ACTION_EXEC] = true;
+
+ opts->actions[opts->actions_length++] = ACTION_EXEC;
+ if (opts->command)
+ free(opts->command);
+ opts->command = calloc(sizeof(char), strlen(command) + 1);
+ if (!opts->command)
+ return -1;
+ strcpy(opts->command, command);
+
+ return 0;
+}
+
+/*
+ * action_parse - add an action based on text specification
+ */
+int
+action_parse(struct action_options *opts, char *trigger)
+{
+ enum action_type type = ACTION_NONE;
+ char *token;
+ char trigger_c[strlen(trigger)];
+
+ /* For ACTION_SIGNAL */
+ int signal = 0, pid = 0;
+
+ if (opts->actions_length == ACTION_FIELD_N)
+ return -1;
+
+ strcpy(trigger_c, trigger);
+ token = strtok(trigger_c, ",");
+
+ if (strcmp(token, "trace") == 0)
+ type = ACTION_TRACE_OUTPUT;
+ else if (strcmp(token, "signal") == 0)
+ type = ACTION_SIGNAL;
+ else if (strcmp(token, "exec") == 0)
+ type = ACTION_EXEC;
+ else
+ /* Invalid trigger type */
+ return -1;
+
+ token = strtok(NULL, ",");
+
+ switch (type) {
+ case ACTION_TRACE_OUTPUT:
+ /* Takes no argument */
+ if (token != NULL)
+ return -1;
+ return action_add_trace_output(opts, "timerlat_trace.txt");
+ case ACTION_SIGNAL:
+ /* Takes two arguments, num (signal) and pid */
+ while (token != NULL) {
+ if (strlen(token) > 4 && strncmp(token, "num=", 4) == 0) {
+ signal = atoi(token + 4);
+ } else if (strlen(token) > 4 && strncmp(token, "pid=", 4) == 0) {
+ if (strncmp(token + 4, "parent", 7) == 0)
+ pid = -1;
+ else
+ pid = atoi(token + 4);
+ } else {
+ /* Invalid argument */
+ return -1;
+ }
+
+ token = strtok(NULL, ",");
+ }
+
+ if (!signal || !pid)
+ /* Missing argument */
+ return -1;
+
+ return action_add_signal(opts, signal, pid);
+ case ACTION_EXEC:
+ if (token == NULL)
+ return -1;
+ if (strlen(token) > 8 && strncmp(token, "command=", 8) == 0) {
+ return action_add_exec(opts, token + 8);
+ }
+ return -1;
+ default:
+ return -1;
+ }
+}
diff --git a/tools/tracing/rtla/src/actions.h b/tools/tracing/rtla/src/actions.h
new file mode 100644
index 000000000000..70caeca9b85b
--- /dev/null
+++ b/tools/tracing/rtla/src/actions.h
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#include <stdbool.h>
+
+enum action_type {
+ ACTION_NONE = 0,
+ ACTION_TRACE_OUTPUT,
+ ACTION_SIGNAL,
+ ACTION_EXEC,
+ ACTION_FIELD_N
+};
+
+struct action_options {
+ enum action_type actions[ACTION_FIELD_N];
+ int actions_length;
+ bool action_present[ACTION_FIELD_N];
+
+ /* For ACTION_TRACE_OUTPUT */
+ char *trace_output;
+
+ /* For ACTION_SIGNAL */
+ int signal;
+ int pid;
+
+ /* For ACTION_COMMAND */
+ char *command;
+};
+
+void action_options_init(struct action_options *opts);
+void action_options_destroy(struct action_options *opts);
+int action_add_trace_output(struct action_options *opts, char *trace_output);
+int action_add_signal(struct action_options *opts, int signal, int pid);
+int action_add_exec(struct action_options *opts, char *command);
+int action_parse(struct action_options *opts, char *trigger);
diff --git a/tools/tracing/rtla/src/timerlat.c b/tools/tracing/rtla/src/timerlat.c
index 63d6d43eafff..98d8c4950f03 100644
--- a/tools/tracing/rtla/src/timerlat.c
+++ b/tools/tracing/rtla/src/timerlat.c
@@ -13,6 +13,7 @@
#include <fcntl.h>
#include <stdio.h>
#include <sched.h>
+#include <signal.h>
#include "timerlat.h"
@@ -126,6 +127,47 @@ timerlat_apply_config(struct osnoise_tool *tool, struct timerlat_params *params)
return -1;
}
+/*
+ * timerlat_execute_actions - execute actions at threshold overflow
+ */
+int
+timerlat_execute_actions(struct osnoise_tool *record, struct action_options *action_opts)
+{
+ int i, pid, retval;
+
+ for (i = 0; i < action_opts->actions_length; i++) {
+ switch (action_opts->actions[i]) {
+ case ACTION_TRACE_OUTPUT:
+ retval = save_trace_to_file(record->trace.inst, action_opts->trace_output);
+ if (retval) {
+ err_msg("Error saving trace\n");
+ return retval;
+ }
+ break;
+ case ACTION_SIGNAL:
+ if (action_opts->pid == -1)
+ pid = getppid();
+ else
+ pid = action_opts->pid;
+ retval = kill(pid, action_opts->signal);
+ if (retval) {
+ err_msg("Error sending signal\n");
+ return retval;
+ }
+ break;
+ case ACTION_EXEC:
+ retval = system(action_opts->command);
+ if (retval)
+ return retval;
+ break;
+ default:
+ break;
+ }
+ }
+
+ return 0;
+}
+
static void timerlat_usage(int err)
{
int i;
diff --git a/tools/tracing/rtla/src/timerlat.h b/tools/tracing/rtla/src/timerlat.h
index e0a553545d03..35d274fc2875 100644
--- a/tools/tracing/rtla/src/timerlat.h
+++ b/tools/tracing/rtla/src/timerlat.h
@@ -1,4 +1,5 @@
// SPDX-License-Identifier: GPL-2.0
+#include "actions.h"
#include "osnoise.h"
/*
@@ -22,7 +23,6 @@ struct timerlat_params {
/* Common params */
char *cpus;
cpu_set_t monitored_cpus;
- char *trace_output;
char *cgroup_name;
unsigned long long runtime;
long long stop_us;
@@ -48,6 +48,7 @@ struct timerlat_params {
struct sched_attr sched_param;
struct trace_events *events;
enum timerlat_tracing_mode mode;
+ struct action_options action_opts;
union {
struct {
/* top only */
@@ -69,6 +70,7 @@ struct timerlat_params {
};
};
+int timerlat_execute_actions(struct osnoise_tool *tool, struct action_options *action_opts);
int timerlat_apply_config(struct osnoise_tool *tool, struct timerlat_params *params);
int timerlat_hist_main(int argc, char *argv[]);
diff --git a/tools/tracing/rtla/src/timerlat_hist.c b/tools/tracing/rtla/src/timerlat_hist.c
index 70548beed812..072d445782ad 100644
--- a/tools/tracing/rtla/src/timerlat_hist.c
+++ b/tools/tracing/rtla/src/timerlat_hist.c
@@ -753,6 +753,7 @@ static void timerlat_hist_usage(char *usage)
" in nanoseconds",
" -u/--user-threads: use rtla user-space threads instead of kernel-space timerlat threads",
" -k/--kernel-threads: use timerlat kernel-space threads instead of rtla user-space threads",
+ " -A/--action-on-overflow <action>: trigger action on threshold overflow, multiple -A are allowed",
" -U/--user-load: enable timerlat for user-defined user-space workload",
" --warm-up s: let the workload run for s seconds before collecting data",
" --trace-buffer-size kB: set the per-cpu trace buffer size in kB",
@@ -786,11 +787,14 @@ static struct timerlat_params
int auto_thresh;
int retval;
int c;
+ char *trace_output;
params = calloc(1, sizeof(*params));
if (!params)
exit(1);
+ action_options_init(¶ms->action_opts);
+
/* disabled by default */
params->dma_latency = -1;
@@ -807,6 +811,7 @@ static struct timerlat_params
while (1) {
static struct option long_options[] = {
+ {"action-on-overflow", required_argument, 0, 'A'},
{"auto", required_argument, 0, 'a'},
{"cpus", required_argument, 0, 'c'},
{"cgroup", optional_argument, 0, 'C'},
@@ -847,7 +852,7 @@ static struct timerlat_params
/* getopt_long stores the option index here. */
int option_index = 0;
- c = getopt_long(argc, argv, "a:c:C::b:d:e:E:DhH:i:knp:P:s:t::T:uU0123456:7:8:9\1\2:\3:",
+ c = getopt_long(argc, argv, "A:a:c:C::b:d:e:E:DhH:i:knp:P:s:t::T:uU0123456:7:8:9\1\2:\3:",
long_options, &option_index);
/* detect the end of the options. */
@@ -866,8 +871,15 @@ static struct timerlat_params
params->print_stack = auto_thresh;
/* set trace */
- params->trace_output = "timerlat_trace.txt";
+ action_add_trace_output(¶ms->action_opts, "timerlat_trace.txt");
+ break;
+ case 'A':
+ retval = action_parse(¶ms->action_opts, optarg);
+ if (retval) {
+ err_msg("Invalid action %s\n", optarg);
+ exit(EXIT_FAILURE);
+ }
break;
case 'c':
retval = parse_cpu_set(optarg, ¶ms->monitored_cpus);
@@ -956,13 +968,14 @@ static struct timerlat_params
case 't':
if (optarg) {
if (optarg[0] == '=')
- params->trace_output = &optarg[1];
+ trace_output = &optarg[1];
else
- params->trace_output = &optarg[0];
+ trace_output = &optarg[0];
} else if (optind < argc && argv[optind][0] != '-')
- params->trace_output = argv[optind];
+ trace_output = argv[optind];
else
- params->trace_output = "timerlat_trace.txt";
+ trace_output = "timerlat_trace.txt";
+ action_add_trace_output(¶ms->action_opts, trace_output);
break;
case 'u':
params->user_workload = 1;
@@ -1061,7 +1074,8 @@ static struct timerlat_params
* If auto-analysis or trace output is enabled, switch from BPF mode to
* mixed mode
*/
- if (params->mode == TRACING_MODE_BPF && params->trace_output && !params->no_aa)
+ if (params->mode == TRACING_MODE_BPF &&
+ (params->action_opts.action_present[ACTION_TRACE_OUTPUT] || !params->no_aa))
params->mode = TRACING_MODE_MIXED;
return params;
@@ -1254,7 +1268,7 @@ int timerlat_hist_main(int argc, char *argv[])
}
}
- if (params->trace_output) {
+ if (params->action_opts.action_present[ACTION_TRACE_OUTPUT]) {
record = osnoise_init_trace_tool("timerlat");
if (!record) {
err_msg("Failed to enable the trace instance\n");
@@ -1325,7 +1339,7 @@ int timerlat_hist_main(int argc, char *argv[])
* tracing while enabling other instances. The trace instance is the
* one with most valuable information.
*/
- if (params->trace_output)
+ if (params->action_opts.action_present[ACTION_TRACE_OUTPUT])
trace_instance_start(&record->trace);
if (!params->no_aa)
trace_instance_start(&aa->trace);
@@ -1395,8 +1409,7 @@ int timerlat_hist_main(int argc, char *argv[])
if (!params->no_aa)
timerlat_auto_analysis(params->stop_us, params->stop_total_us);
- save_trace_to_file(record ? record->trace.inst : NULL,
- params->trace_output);
+ timerlat_execute_actions(record, ¶ms->action_opts);
}
out_hist:
@@ -1417,6 +1430,7 @@ int timerlat_hist_main(int argc, char *argv[])
osnoise_destroy_tool(aa);
osnoise_destroy_tool(record);
osnoise_destroy_tool(tool);
+ action_options_destroy(¶ms->action_opts);
free(params);
free_cpu_idle_disable_states();
if (params->mode != TRACING_MODE_TRACEFS)
diff --git a/tools/tracing/rtla/src/timerlat_top.c b/tools/tracing/rtla/src/timerlat_top.c
index 30f1d6cbcad1..ab89184387b8 100644
--- a/tools/tracing/rtla/src/timerlat_top.c
+++ b/tools/tracing/rtla/src/timerlat_top.c
@@ -513,6 +513,7 @@ static void timerlat_top_usage(char *usage)
" -u/--user-threads: use rtla user-space threads instead of kernel-space timerlat threads",
" -k/--kernel-threads: use timerlat kernel-space threads instead of rtla user-space threads",
" -U/--user-load: enable timerlat for user-defined user-space workload",
+ " -A/--action-on-overflow <action>: trigger action on threshold overflow, multiple -A are allowed",
" --warm-up s: let the workload run for s seconds before collecting data",
" --trace-buffer-size kB: set the per-cpu trace buffer size in kB",
" --deepest-idle-state n: only go down to idle state n on cpus used by timerlat to reduce exit from idle latency",
@@ -545,11 +546,14 @@ static struct timerlat_params
long long auto_thresh;
int retval;
int c;
+ char *trace_output;
params = calloc(1, sizeof(*params));
if (!params)
exit(1);
+ action_options_init(¶ms->action_opts);
+
/* disabled by default */
params->dma_latency = -1;
@@ -564,6 +568,7 @@ static struct timerlat_params
while (1) {
static struct option long_options[] = {
+ {"action-on-overflow", required_argument, 0, 'A'},
{"auto", required_argument, 0, 'a'},
{"cpus", required_argument, 0, 'c'},
{"cgroup", optional_argument, 0, 'C'},
@@ -598,7 +603,7 @@ static struct timerlat_params
/* getopt_long stores the option index here. */
int option_index = 0;
- c = getopt_long(argc, argv, "a:c:C::d:De:hH:i:knp:P:qs:t::T:uU0:1:2:345:6:7:",
+ c = getopt_long(argc, argv, "A:a:c:C::d:De:hH:i:knp:P:qs:t::T:uU0:1:2:345:6:7:",
long_options, &option_index);
/* detect the end of the options. */
@@ -617,7 +622,14 @@ static struct timerlat_params
params->print_stack = auto_thresh;
/* set trace */
- params->trace_output = "timerlat_trace.txt";
+ action_add_trace_output(¶ms->action_opts, "timerlat_trace.txt");
+ break;
+ case 'A':
+ retval = action_parse(¶ms->action_opts, optarg);
+ if (retval) {
+ err_msg("Invalid action %s\n", optarg);
+ exit(EXIT_FAILURE);
+ }
break;
case '5':
/* it is here because it is similar to -a */
@@ -712,14 +724,14 @@ static struct timerlat_params
case 't':
if (optarg) {
if (optarg[0] == '=')
- params->trace_output = &optarg[1];
+ trace_output = &optarg[1];
else
- params->trace_output = &optarg[0];
+ trace_output = &optarg[0];
} else if (optind < argc && argv[optind][0] != '-')
- params->trace_output = argv[optind];
+ trace_output = argv[optind];
else
- params->trace_output = "timerlat_trace.txt";
-
+ trace_output = "timerlat_trace.txt";
+ action_add_trace_output(¶ms->action_opts, trace_output);
break;
case 'u':
params->user_workload = true;
@@ -797,7 +809,8 @@ static struct timerlat_params
* If auto-analysis or trace output is enabled, switch from BPF mode to
* mixed mode
*/
- if (params->mode == TRACING_MODE_BPF && params->trace_output && !params->no_aa)
+ if (params->mode == TRACING_MODE_BPF &&
+ (params->action_opts.action_present[ACTION_TRACE_OUTPUT] || !params->no_aa))
params->mode = TRACING_MODE_MIXED;
return params;
@@ -1099,7 +1112,7 @@ int timerlat_top_main(int argc, char *argv[])
}
}
- if (params->trace_output) {
+ if (params->action_opts.action_present[ACTION_TRACE_OUTPUT]) {
record = osnoise_init_trace_tool("timerlat");
if (!record) {
err_msg("Failed to enable the trace instance\n");
@@ -1171,7 +1184,7 @@ int timerlat_top_main(int argc, char *argv[])
* tracing while enabling other instances. The trace instance is the
* one with most valuable information.
*/
- if (params->trace_output)
+ if (params->action_opts.action_present[ACTION_TRACE_OUTPUT])
trace_instance_start(&record->trace);
if (!params->no_aa)
trace_instance_start(&aa->trace);
@@ -1214,8 +1227,7 @@ int timerlat_top_main(int argc, char *argv[])
if (!params->no_aa)
timerlat_auto_analysis(params->stop_us, params->stop_total_us);
- save_trace_to_file(record ? record->trace.inst : NULL,
- params->trace_output);
+ timerlat_execute_actions(record, ¶ms->action_opts);
} else if (params->aa_only) {
/*
* If the trace did not stop with --aa-only, at least print the
--
2.49.0
Return-Path: <linux-kernel+bounces-665630-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 4088041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:34:27 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 2F5351BA0F06
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:34:40 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 91558288C3B;
Wed, 28 May 2025 14:34:19 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="iz6o/u7S"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id CE5C9193077;
Wed, 28 May 2025 14:34:18 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442858; cv=none; b=Hj418L5PDz9Gf1/fOmAEp6iWhG7kxsRP8Vjz8b6QUxEceOSDdUqghHAMCONjYftWlc4cBy1kSdLd+6RlG7QjT2bLbg60uHEyAU2qLxzcoLGb1GbzDi21DX3NN6iOGOBN4pbkRwgrS9L2E3cqBbaCgLSen4OpfHqCUdizh6Qs8NY=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442858; c=relaxed/simple;
bh=bD/iZOx/OO0MmzF4E85/i3xPWDZwNRVsc8nz96LYuR4=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=diQsPisY5T4ndQuYQqRKBMZhmfj94te6zwSRlXksSXqxnbfeEU79S35Ccce29EL3MUzHJNmO5yZNHzgNVt69NhLrjmqHebREEBpC0HX8NkzJK1K4wCEFWm6GCJzjZd+1+VwYOr+diq5Ck2txKNiacV4QWWydgKA/MdkD4niQZ6U=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=iz6o/u7S; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 94BC2C4CEE3;
Wed, 28 May 2025 14:34:12 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748442858;
bh=bD/iZOx/OO0MmzF4E85/i3xPWDZwNRVsc8nz96LYuR4=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=iz6o/u7SG54xss53eKO8vPEeMsmQBvFSsZxs0lpx8xsH7bcPcl4x2z6O9PazMOtgo
yxIfXXtttpo/zAr4CQbPZDf6U1ucqr+T/B9wseTSog9s2LwnP+crfUqPjmN6Qgjj/j
8FQyKpmcrFfS3/M6Hptkbt648JUVg7hGhHbkwa2gLIVi6L5uxfqcPwmwXJTOI5IAQl
xTLpYNifM3+x67pPSeYiITjt0NEeLVB1p3MsRoZ10JF4oY900vlov9f6vW2R8/yuqi
7DzrqGUshosPYRz7M/9M700ZennoVRAeLLFA9uT0Bbf6Shq4kqjMebK9IGP/AOt+lA
wBbg7F5UngOKA==
Date: Wed, 28 May 2025 16:34:09 +0200
From: Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx>
To: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
Cc: Marc Zyngier <maz@xxxxxxxxxx>, Thomas Gleixner <tglx@xxxxxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Catalin Marinas <catalin.marinas@xxxxxxx>,
Will Deacon <will@xxxxxxxxxx>, Arnd Bergmann <arnd@xxxxxxxx>,
Sascha Bischoff <sascha.bischoff@xxxxxxx>,
Timothy Hayes <timothy.hayes@xxxxxxx>,
"Liam R. Howlett" <Liam.Howlett@xxxxxxxxxx>,
Mark Rutland <mark.rutland@xxxxxxx>,
Jiri Slaby <jirislaby@xxxxxxxxxx>,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx
Subject: Re: [PATCH v4 19/26] arm64: Add support for GICv5 GSB barriers
Message-ID: <aDce4TGxUoGGONA3@lpieralisi>
References: <20250513-gicv5-host-v4-0-b36e9b15a6c3@xxxxxxxxxx>
<20250513-gicv5-host-v4-19-b36e9b15a6c3@xxxxxxxxxx>
<20250528141730.0000232e@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528141730.0000232e@xxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 02:17:30PM +0100, Jonathan Cameron wrote:
> On Tue, 13 May 2025 19:48:12 +0200
> Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx> wrote:
>
> > The GICv5 architecture introduces two barriers instructions
> > (GSB SYS, GSB ACK) that are used to manage interrupt effects.
> >
> > Rework macro used to emit the SB barrier instruction and implement
> > the GSB barriers on top of it.
> >
> > Suggested-by: Marc Zyngier <maz@xxxxxxxxxx>
> > Signed-off-by: Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx>
> > Cc: Will Deacon <will@xxxxxxxxxx>
> > Cc: Catalin Marinas <catalin.marinas@xxxxxxx>
> > Cc: Marc Zyngier <maz@xxxxxxxxxx>
> > ---
> > arch/arm64/include/asm/barrier.h | 3 +++
> > arch/arm64/include/asm/sysreg.h | 10 +++++++---
> > 2 files changed, 10 insertions(+), 3 deletions(-)
> >
> > diff --git a/arch/arm64/include/asm/barrier.h b/arch/arm64/include/asm/barrier.h
> > index 1ca947d5c93963d33fe8fb02d6037fc71bd9fd7a..f5801b0ba9e9e7e0433f16ffedf0ec7dfb3e358e 100644
> > --- a/arch/arm64/include/asm/barrier.h
> > +++ b/arch/arm64/include/asm/barrier.h
> > @@ -44,6 +44,9 @@
> > SB_BARRIER_INSN"nop\n", \
> > ARM64_HAS_SB))
> >
> > +#define gsb_ack() asm volatile(GSB_ACK_BARRIER_INSN : : : "memory")
> > +#define gsb_sys() asm volatile(GSB_SYS_BARRIER_INSN : : : "memory")
> > +
> > #ifdef CONFIG_ARM64_PSEUDO_NMI
> > #define pmr_sync() \
> > do { \
> > diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysreg.h
> > index 2639d3633073de10f5040a7efff059021f847530..e7734f90bb723bfbd8be99f16dd6d6fdc7fa57e8 100644
> > --- a/arch/arm64/include/asm/sysreg.h
> > +++ b/arch/arm64/include/asm/sysreg.h
> > @@ -112,10 +112,14 @@
> > /* Register-based PAN access, for save/restore purposes */
> > #define SYS_PSTATE_PAN sys_reg(3, 0, 4, 2, 3)
> >
> > -#define __SYS_BARRIER_INSN(CRm, op2, Rt) \
> > - __emit_inst(0xd5000000 | sys_insn(0, 3, 3, (CRm), (op2)) | ((Rt) & 0x1f))
> > +#define __SYS_BARRIER_INSN(op0, op1, CRn, CRm, op2, Rt) \
> > + __emit_inst(0xd5000000 | \
> > + sys_insn((op0), (op1), (CRn), (CRm), (op2)) | \
> > + ((Rt) & 0x1f))
>
> Perhaps indent as something like the following for readbility?
> #define __SYS_BARRIER_INSN(op0, op1, CRn, CRm, op2, Rt) \
> __emit_inst(0xd5000000 | \
> sys_insn((op0), (op1), (CRn), (CRm), (op2)) | \
> ((Rt) & 0x1f))
>
I can do - even though readability is subjective, this looks nicer to
me but if possible I'd avoid the churn required if I change it and then
it is not readable for other people.
Noted.
Thanks,
Lorenzo
> >
> > -#define SB_BARRIER_INSN __SYS_BARRIER_INSN(0, 7, 31)
> > +#define SB_BARRIER_INSN __SYS_BARRIER_INSN(0, 3, 3, 0, 7, 31)
> > +#define GSB_SYS_BARRIER_INSN __SYS_BARRIER_INSN(1, 0, 12, 0, 0, 31)
> > +#define GSB_ACK_BARRIER_INSN __SYS_BARRIER_INSN(1, 0, 12, 0, 1, 31)
> >
> > #define SYS_DC_ISW sys_insn(1, 0, 7, 6, 2)
> > #define SYS_DC_IGSW sys_insn(1, 0, 7, 6, 4)
> >
>
Return-Path: <linux-kernel+bounces-665631-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D12EF41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:34:57 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id A7EC33B6CE8
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:34:36 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id D9CF9288C92;
Wed, 28 May 2025 14:34:49 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qmjn/eJ8"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0419D193077;
Wed, 28 May 2025 14:34:48 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442889; cv=none; b=oK5xfaN5K0pAsz+ubuASzf3UgQrrzgnM6yXMTqaZSe8JVPM7YRHGHAp1BAP8f8Q3jfJunlwymgEjLxvaZFXD4OVEOuM/q5vbbhuw6ty2BSfdRAJ7kYtKkYvQimF31DuHWid3U8Ws9kBXEqbEEjPVjc8cmCMWS72LLRFA7pCrfMw=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442889; c=relaxed/simple;
bh=la70WX+ZHL0nPCFtUsmvxU0TbQDjoteqMB0xVg2UTpo=;
h=From:Subject:Date:Message-Id:MIME-Version:Content-Type:To:Cc; b=Hqh/4kpAGLoOCKJ43ne+A3ZZwoNdStpG2W3XbT+NavwV2UPhQbbZr1P6lWjRvLfMFyjBTwSK7MJiFGaKZC7mks03aj6aAiyT8Iq7/Bv/bfse9ugFGYN2FbXAwvE/V/kgWaIw5BqQtPTD7BrXAFGCQmGnYr57WnnYwc6CDn1/pao=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qmjn/eJ8; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8BC51C4CEE3;
Wed, 28 May 2025 14:34:46 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748442888;
bh=la70WX+ZHL0nPCFtUsmvxU0TbQDjoteqMB0xVg2UTpo=;
h=From:Subject:Date:To:Cc:From;
b=qmjn/eJ8MyNPMizk1BpxNT4BSJ5d8cWdaFq1rS427rcoeOpAmw7i4Ooxu45hBdelx
xDD3IaO6jOgfoYgjkxOhCrq6yRuCKhK158MJWgGwRu6AIsebHZhm+xK+TXht41ldqx
m3LWt+2BXGqM+V5v6SnrPZiC4wFULOsmdsQJu6RP+k8xoVPGo9J7RhWR54/+07foML
MVyMX1BSaVj2ZYuR4Hf2Xz+agj9RJCQaG21o3lpl2muq/IWeBkGwjXZp9XtQ6WJUtz
hbhk/oxhQFD15hnqUYPcCvvPDtnRyeWbLXcl87e35p269vfMUoedaIrflxIGdDnn7Y
NLA9Q0g3KcdoQ==
From: Jeff Layton <jlayton@xxxxxxxxxx>
Subject: [PATCH v11 00/10] ref_tracker: add ability to register a debugfs
file for a ref_tracker_dir
Date: Wed, 28 May 2025 10:34:32 -0400
Message-Id: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
X-B4-Tracking: v=1; b=H4sIAPgeN2gC/2XQS2oDMQwG4KuEWXeKXxrJXfUepQs/kyElCZ4wt
ITcvZpAqVvhlWy+35Juw1LaXJbhZXcbWlnnZT6fuND6aTekQzjtyzhnvhiMMqCctmMr9dpCOo4
57usyWpwwWmWLqWFgdOH3+fOR+PbO9WFeruf29fhg1dvtT5T7H7XqUY1VWSAga4yyr8fSTuXj+
dz2w5a1mt6D8IZ91JRciFkbU4W3vUfhLftkNXhnKFGNwrvek/COPaQACcl7cE546LyRHtjrFGO
uPDzFLPzUeauEn9jThMn4UHmPQXj89XyEx23/SAmyx5iS9NR7uT9iPylEjdnG6El433svvN/6D
5GIggPj5PxadQFGNqAVJ+QEUBEVTF7/Sbjf798wo54L8AIAAA==
X-Change-ID: 20250413-reftrack-dbgfs-3767b303e2fa
To: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Simon Horman <horms@xxxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>, Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>
Cc: Kuniyuki Iwashima <kuniyu@xxxxxxxxxx>, Qasim Ijaz <qasdev00@xxxxxxxxx>,
Nathan Chancellor <nathan@xxxxxxxxxx>, Andrew Lunn <andrew@xxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
Jeff Layton <jlayton@xxxxxxxxxx>,
=?utf-8?q?Thomas_Wei=C3=9Fschuh?= <thomas.weissschuh@xxxxxxxxxxxxx>
X-Mailer: b4 0.14.2
X-Developer-Signature: v=1; a=openpgp-sha256; l=4580; i=jlayton@xxxxxxxxxx;
h=from:subject:message-id; bh=la70WX+ZHL0nPCFtUsmvxU0TbQDjoteqMB0xVg2UTpo=;
b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoNx7/6/eA3upt3zeE4DWP2UU17Ec+usxykPRIq
ef5IGth2byJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaDce/wAKCRAADmhBGVaC
FT1WD/4hg4MqOVwhf66jaDEuhZ+DfRLZx83XT+w0cGXI5pG4f3e9TndsQV38W5/Kxrpdgk2Ni2Z
Qye+uNd/Ww93OBsrB57zk4oMD2qzStmB9fCm3MzOEn57/+/zV64UEoUgFU+jEywVyTgF+sWqW0s
cbKH5JvnSsY8v480OMPPV/i3P5XjUeiIdCvMQLF3cMvFoVOCxNgBATH/6JRrVxN880H9UqO298h
4AnOyicPD3xwzP7CwbHXtoUKlSgD9g0TGwYmEFY5+SUA3cFBVODGI8Q/Q3XWLMeTzSbRmnl0Spq
8Pgae+GF9lqD34HF8+EAEpig3Hq1iatLSl0nXzY9Av+XfPc7dsS0UgWdy12lMCjtoEd6j/P0wUW
BcUNW0cVF4OrmGUR6ihEpjbl2LIyL3UUV/fGXTQb+pcpfS3XPRDqUuquuAmzbANoujA3kdfhfQ+
8CKcHLt9K7Gs3l/S8vTOedKx4+bFmQZYXiRja+K7C71+fcTqwY52EJKj928jor+bnYbi5bslxOI
JoetmyOxsaG0jAcLsXzAvwKY49bdWH4FQWijTEI/Ai2fvV4jD7z/rtxxLsM5zJmcS02zjZUqPjH
HfgI4qsS6X7ZqMx4eZSp6vdmszjqoHxLRJIHXkHiYnfWDK/JbBjKoji/tBwXOalABiHKaCMJoTl
nzY+9z8sSlGvQKg==
X-Developer-Key: i=jlayton@xxxxxxxxxx; a=openpgp;
fpr=4BC0D7B24471B2A184EAF5D3000E684119568215
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
More CI reports [1]. This time it showed what I consider to be an
existing bug in the i915 driver. It can call ref_tracker_dir_init() more
than once on the same dir object, which could cause reference tracking
objects to leak.
The first patch in the series ensures that this doesn't happen. The rest
is basically identical to v10 aside from a small format cleanup.
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_148490v6/index.html
Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
---
Changes in v11:
- don't call ref_tracker_dir_init() more than once for same i915 objects
- use %llx in format for net_cookie in symlink name
- Link to v10: https://lore.kernel.org/r/20250527-reftrack-dbgfs-v10-0-dc55f7705691@xxxxxxxxxx
Changes in v10:
- drop the i915 symlink patch
- Link to v9: https://lore.kernel.org/r/20250509-reftrack-dbgfs-v9-0-8ab888a4524d@xxxxxxxxxx
Changes in v9:
- fix typo in ref_tracker_dir_init() kerneldoc header
- Link to v8: https://lore.kernel.org/r/20250507-reftrack-dbgfs-v8-0-607717d3bb98@xxxxxxxxxx
Changes in v8:
- fix up compiler warnings that the KTR warned about
- ensure builds with CONFIG_DEBUG_FS=n and CONFIG_REF_TRACKER=y work
- Link to v7: https://lore.kernel.org/r/20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@xxxxxxxxxx
Changes in v7:
- include net->net_cookie in netns symlink name
- add __ostream_printf to ref_tracker_dir_symlink() stub function
- remove unneeded #include of seq_file.h
- Link to v6: https://lore.kernel.org/r/20250430-reftrack-dbgfs-v6-0-867c29aff03a@xxxxxxxxxx
Changes in v6:
- clean up kerneldoc comment for ref_tracker_dir_debugfs()
- add missing stub function for ref_tracker_dir_symlink()
- temporary __maybe_unused on ref_tracker_dir_seq_print() to silence compiler warning
- Link to v5: https://lore.kernel.org/r/20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@xxxxxxxxxx
Changes in v5:
- add class string to each ref_tracker_dir
- auto-register debugfs file for every tracker in ref_tracker_dir_init
- add function to allow adding a symlink for each tracker
- add patches to create symlinks for netns's and i915 entries
- change output format to print class@%p instead of name@%p
- eliminate the name field in ref_tracker_dir
- fix off-by-one bug when NULL terminating name string
- Link to v4: https://lore.kernel.org/r/20250418-reftrack-dbgfs-v4-0-5ca5c7899544@xxxxxxxxxx
Changes in v4:
- Drop patch to widen ref_tracker_dir_.name, use NAME_MAX+1 (256) instead since this only affects dentry name
- Link to v3: https://lore.kernel.org/r/20250417-reftrack-dbgfs-v3-0-c3159428c8fb@xxxxxxxxxx
Changes in v3:
- don't overwrite dir->name in ref_tracker_dir_debugfs
- define REF_TRACKER_NAMESZ and use it when setting name
- Link to v2: https://lore.kernel.org/r/20250415-reftrack-dbgfs-v2-0-b18c4abd122f@xxxxxxxxxx
Changes in v2:
- Add patch to do %pK -> %p conversion in ref_tracker.c
- Pass in output function to pr_ostream() instead of if statement
- Widen ref_tracker_dir.name to 64 bytes to accomodate unique names
- Eliminate error handling with debugfs manipulation
- Incorporate pointer value into netdev name
- Link to v1: https://lore.kernel.org/r/20250414-reftrack-dbgfs-v1-0-f03585832203@xxxxxxxxxx
---
Jeff Layton (10):
i915: only initialize struct ref_tracker_dir once
ref_tracker: don't use %pK in pr_ostream() output
ref_tracker: add a top level debugfs directory for ref_tracker
ref_tracker: have callers pass output function to pr_ostream()
ref_tracker: add a static classname string to each ref_tracker_dir
ref_tracker: allow pr_ostream() to print directly to a seq_file
ref_tracker: automatically register a file in debugfs for a ref_tracker_dir
ref_tracker: add a way to create a symlink to the ref_tracker_dir debugfs file
net: add symlinks to ref_tracker_dir for netns
ref_tracker: eliminate the ref_tracker_dir name field
drivers/gpu/drm/display/drm_dp_tunnel.c | 2 +-
drivers/gpu/drm/i915/intel_runtime_pm.c | 4 +-
drivers/gpu/drm/i915/intel_wakeref.c | 3 +-
include/linux/ref_tracker.h | 58 +++++++++-
lib/ref_tracker.c | 190 +++++++++++++++++++++++++++++---
net/core/dev.c | 2 +-
net/core/net_namespace.c | 34 +++++-
7 files changed, 267 insertions(+), 26 deletions(-)
---
base-commit: fefff2755f2aa4125dce2a1edfe7e545c7c621f2
change-id: 20250413-reftrack-dbgfs-3767b303e2fa
Best regards,
--
Jeff Layton <jlayton@xxxxxxxxxx>
Return-Path: <linux-kernel+bounces-665632-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 6A65D41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:35:13 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 74434173A0F
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:35:11 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id D226A289364;
Wed, 28 May 2025 14:34:51 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="B/G2qhEf"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1DC11288CAF;
Wed, 28 May 2025 14:34:50 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442891; cv=none; b=EIlkk0W/GFVblRYMduCZ6rBW7C3338rzHkkmglclpSd4DNXMIagvoqtyAdEtDs7yJObHXxj8z4Z3f/IXNbY1tZkZZJ461UKwBxThASEi5AbZzgdgjrKCKGMTIHZAPfdhLb+sVwU1YU78BD2mSRWBktGGDa9odQvZzOWieWd0dN4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442891; c=relaxed/simple;
bh=xcaFZVbsEvJyxxrP8wl5wB3qpU0YQ92i4Uv2VYSOZus=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:
In-Reply-To:To:Cc; b=tX1b/O+1MHFFzSE5mFcIbZMjxKfHCe4DvQFLkqFFtHjKD7wZZf+12fvL6V7FIgYKbU2MVniKSazPxf+XhrCiPa03pqaimODqZ7+eoOfe//gk62Gx0x31zFlM6cmdUO0Up+8RQavTuRlioNlGiwHfOxJ0f0YcTd/pzo3/LZZCsb8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=B/G2qhEf; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id AFF92C4CEED;
Wed, 28 May 2025 14:34:48 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748442890;
bh=xcaFZVbsEvJyxxrP8wl5wB3qpU0YQ92i4Uv2VYSOZus=;
h=From:Date:Subject:References:In-Reply-To:To:Cc:From;
b=B/G2qhEfNssorY7U9YWyXBSF7siZDygdMbGGxq3Z1zMJG1BOR6WnZJHoytMqI6HMA
Jv6kwz9FIZEzHSvHjG+622OTB/CQK4fL/nJ3TQ0/Jnjh+f1w4t5MKbHrQMNtZsaXvU
Edwkx2rs8uiYpN4VBBmwr6YarYl+L6+LkS5TStvuDEI536z9IKFG4dQJoKhbSwbJj3
jnc5K0/IC94l99/xZP8liBxOCibFhq+nfibRak53dL/yVUQnlhjgnGJtX9GtNEXAXs
98Mn1XX1DgV119J3GDqSCYg8jcyrNHscE+4chldrjM8IcmehLDIVy4MovwNIaps+z5
2EZfxIpGMV1rg==
From: Jeff Layton <jlayton@xxxxxxxxxx>
Date: Wed, 28 May 2025 10:34:33 -0400
Subject: [PATCH v11 01/10] i915: only initialize struct ref_tracker_dir
once
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20250528-reftrack-dbgfs-v11-1-94ae0b165841@xxxxxxxxxx>
References: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
In-Reply-To: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
To: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Simon Horman <horms@xxxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>, Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>
Cc: Kuniyuki Iwashima <kuniyu@xxxxxxxxxx>, Qasim Ijaz <qasdev00@xxxxxxxxx>,
Nathan Chancellor <nathan@xxxxxxxxxx>, Andrew Lunn <andrew@xxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
Jeff Layton <jlayton@xxxxxxxxxx>
X-Mailer: b4 0.14.2
X-Developer-Signature: v=1; a=openpgp-sha256; l=1979; i=jlayton@xxxxxxxxxx;
h=from:subject:message-id; bh=xcaFZVbsEvJyxxrP8wl5wB3qpU0YQ92i4Uv2VYSOZus=;
b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoNx8EmI6fWV2Eg8Xc7r5K/kMheNd8UdmOtmoO3
tlVLfOHahKJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaDcfBAAKCRAADmhBGVaC
FbGSD/9jzwiUc0TWPeNT+GglWj/jlFf8GvvgXw380X6AKkj9UkpMXvsNnjcHnLVrEtdetSkTa67
0P95tMf5mkiIf9XnYUBTyEcX4lUdPd2u4abq3MGbVpWOM+I1b2nbRl+OgSqNlnZEPnLeshSDqWW
Seqpn1O3eD64B8a+Z7LwoAtDcT+zyvrJL+stNAHG3862LEL+Z0oM2EaXzYanp8Gta584DmX126s
q0KynOEuesl4MPcWxsrXeuTlo2r/e5NFR03fdj65XU6PurTxRfSx0qeJhvqUnk+GL/uk99jaLVi
bT2jX4M7ZDzJ01dMo5aQ0+7NHCFU/XPSQmGsNcr0L51DzYrtQLY2IceI03bu2uxve8bw8CAD6Lz
umSxnAZw3JPlW3y8/HpE3Z9GSFuE5eK4ZBLLZQI4YoePaj8X9GpjCsUqNdBH3XQTcykWfttlL0E
X/Wk6+v/6uwHVBKIiXp1PiH86jscrzXxXMvSmR8dzgeJfHeEqxPQGagtt30bGHdWhZpZTPrOc06
ZNBi4Gr4jj3vnXFNFNqKnn20TvarkHh/8pkECDEqJjoO3kC6vg7zrAileGhwJelCMTzrLsX4Wrg
6FkJtAnd+wlZqn3zJFa4LQ5HZiHGJi6PPeYp16L4iSnL/XzzvsySBsouY5Xc04Vu/BBvIdmnGyk
vwygWSCqB3E/RRA==
X-Developer-Key: i=jlayton@xxxxxxxxxx; a=openpgp;
fpr=4BC0D7B24471B2A184EAF5D3000E684119568215
X-Spam-Status: No, score=-4.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
PDS_OTHER_BAD_TLD,RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
I got some warnings from the i915 CI with the ref_tracker debugfs
patches applied, that indicated that these ref_tracker_dir_init() calls
were being called more than once. If references were held on these
objects between the initializations, then that could lead to leaked ref
tracking objects.
Since these objects are zalloc'ed, ensure that they are only initialized
once by testing whether the first byte of the name field is 0.
Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
---
drivers/gpu/drm/i915/intel_runtime_pm.c | 3 ++-
drivers/gpu/drm/i915/intel_wakeref.c | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c
index 8d9f4c410546e4144d4bc8bbc6696f3bd9498848..1b2ad1e0aef7d317f63a23b39193ea81c90401f0 100644
--- a/drivers/gpu/drm/i915/intel_runtime_pm.c
+++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
@@ -59,7 +59,8 @@ static struct drm_i915_private *rpm_to_i915(struct intel_runtime_pm *rpm)
static void init_intel_runtime_pm_wakeref(struct intel_runtime_pm *rpm)
{
- ref_tracker_dir_init(&rpm->debug, INTEL_REFTRACK_DEAD_COUNT, dev_name(rpm->kdev));
+ if (!rpm->debug.name[0])
+ ref_tracker_dir_init(&rpm->debug, INTEL_REFTRACK_DEAD_COUNT, dev_name(rpm->kdev));
}
static intel_wakeref_t
diff --git a/drivers/gpu/drm/i915/intel_wakeref.c b/drivers/gpu/drm/i915/intel_wakeref.c
index 07e81be4d3920febece34709c63a63204a41583c..3cfd68c98023fef75faa4dd69eba55e093130dd7 100644
--- a/drivers/gpu/drm/i915/intel_wakeref.c
+++ b/drivers/gpu/drm/i915/intel_wakeref.c
@@ -114,7 +114,8 @@ void __intel_wakeref_init(struct intel_wakeref *wf,
"wakeref.work", &key->work, 0);
#if IS_ENABLED(CONFIG_DRM_I915_DEBUG_WAKEREF)
- ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, name);
+ if (!wf->debug.name[0])
+ ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, name);
#endif
}
--
2.49.0
Return-Path: <linux-kernel+bounces-665633-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 2DB3141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:35:35 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 8FA129E273B
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:35:06 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id E367B289E2B;
Wed, 28 May 2025 14:34:53 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KbjB/Ymh"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2F61928983C;
Wed, 28 May 2025 14:34:52 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442893; cv=none; b=P3I0NwyDghPMCojm3VJBzgTJQhPxd4OK+3HmcW0POywSKM+uHtPi1s7OgXzXzXGhxFvdPAC1Pt/633MVPtlB+jHIiT0yMWyIo5aMLOgPIJ44K3En69RwM++KLnj+4Ex/U9blNIozgVV06aJwYkiwM+PqLh/cfqB2CbnSbvIBm0c=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442893; c=relaxed/simple;
bh=qdjjg9250uAChp/B6CMoiJw5KiM08dmL8XUQ0eA5f48=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:
In-Reply-To:To:Cc; b=rKcDHtpvVYnhNXvot1Z2KuOaIDX/353ESAENgfpUGjkM5adq+Vl/Lp1h7V/cDaK+MBOEgqzZXSqXc6Rr88xhaRdGWSD7RWQyPkfF5GRU9t8A3T3KLkeJewlrfCc3Vci59xpQ3Shgtak3JEZUdcDCFnidKQUIcO2nq0+THPS7UA4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KbjB/Ymh; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id B72D2C4CEF2;
Wed, 28 May 2025 14:34:50 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748442892;
bh=qdjjg9250uAChp/B6CMoiJw5KiM08dmL8XUQ0eA5f48=;
h=From:Date:Subject:References:In-Reply-To:To:Cc:From;
b=KbjB/YmhiCt6CS/s2sK7gorqgj0pgctI/gklL+W77Nt7oqgNFRj311zEg0ZZu3Day
j0yF03Nsy4SnoUuPkglrrnUcIey9LO02w7vLxP7USdjT7SFiNU0B0fT8dNWiqTE+40
2qIsr8LpWSbbZzgI1tUECZyyy6KRGTODRZVrYMKEqOa7jLSm8R6rPzlZ/vIfRQYsSb
+WzWSMQkXQl7sem+IkQXhXZIHVDHBWp4ckbDJ2kzQe8rAsNQaCsG2gpLi5K9QtHsdh
5TZd5ThwyBvkWsFDZe9RHQe9GlnnJxgy9FQz8pCoRb8eutSFIX/65jVw2pjVdmuheF
TX8Mzn/RpDDpA==
From: Jeff Layton <jlayton@xxxxxxxxxx>
Date: Wed, 28 May 2025 10:34:34 -0400
Subject: [PATCH v11 02/10] ref_tracker: don't use %pK in pr_ostream()
output
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Message-Id: <20250528-reftrack-dbgfs-v11-2-94ae0b165841@xxxxxxxxxx>
References: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
In-Reply-To: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
To: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Simon Horman <horms@xxxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>, Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>
Cc: Kuniyuki Iwashima <kuniyu@xxxxxxxxxx>, Qasim Ijaz <qasdev00@xxxxxxxxx>,
Nathan Chancellor <nathan@xxxxxxxxxx>, Andrew Lunn <andrew@xxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
Jeff Layton <jlayton@xxxxxxxxxx>,
=?utf-8?q?Thomas_Wei=C3=9Fschuh?= <thomas.weissschuh@xxxxxxxxxxxxx>
X-Mailer: b4 0.14.2
X-Developer-Signature: v=1; a=openpgp-sha256; l=1830; i=jlayton@xxxxxxxxxx;
h=from:subject:message-id; bh=qdjjg9250uAChp/B6CMoiJw5KiM08dmL8XUQ0eA5f48=;
b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoNx8E+Fg7R+6kQ+LbHF70JI1PJ65oWGl4hND0Z
u2iXxq+6vqJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaDcfBAAKCRAADmhBGVaC
FSRWEACXlmsKIOth5AjxZbIwAfkmicqVRAiisExNrivGXUhDCG+uXWcuRNuR5/+c/7HF2Hp1OY8
dDdVPC0nzT4Ri8kDMvwBmobP60bRP4WtQkouO9kNbYEiJ3P6s7sBTv45/MEjSkcK8I0I+oPEABR
NQaAL89bznuKcpInKUDP+UGBBtUfH8Lgli4pTi9TTlkd8iKSXW7APJpiuiI/rqTbBIOxnwo8Q7r
vNis4lkbwuVhNmRpYbEgybI1WY/J1ZHmNX+pJ2aC0q9XaoVOBl5xuvahfa977noGK15DXOZNTm1
3Khy1vZXABLDfdxB8zOKucJn2me+wV3sEDG1J1St2D15bfxvKE4WqURr8uOdypBXgXuS5po/l6O
FXpTa0IOEM9jzoaLyy0mw+rPR4hlTaYuHuuphOgJsUJQs6Rk1qYYq/8vLHaKiLL734xv+u4IQ/i
hvcpUy/F1sbja6qNLhTYuEisY9M2oG4zD/+085cDVx1n/qlKUAnfEGvyj4Z0VQKBwfY8EqeLBpA
U5oXt4Cc+yJsUZvp+Lrkb6cv1MVAgitUleAvzktux4WvNUu/nly/7sjzh7bfeLdq1nTNrvaFwDw
j+sCn4Ehcm3txItPnY29/nLdvMATAZQQhE5/xqRkpQ9wclk8gj9fCcwzdsg4Y28DEaujNWnLeZp
q4BTqGF7DVXoqEQ==
X-Developer-Key: i=jlayton@xxxxxxxxxx; a=openpgp;
fpr=4BC0D7B24471B2A184EAF5D3000E684119568215
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
As Thomas WeiÃ?schuh points out [1], it is now preferable to use %p
instead of hashed pointers with printk(), since raw pointers should no
longer be leaked into the kernel log. Change the ref_tracker
infrastructure to use %p instead of %pK in its formats.
[1]: https://lore.kernel.org/netdev/20250414-restricted-pointers-net-v1-0-12af0ce46cdd@xxxxxxxxxxxxx/
Cc: Thomas WeiÃ?schuh <thomas.weissschuh@xxxxxxxxxxxxx>
Reviewed-by: Thomas WeiÃ?schuh <thomas.weissschuh@xxxxxxxxxxxxx>
Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
---
lib/ref_tracker.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c
index cf5609b1ca79361763abe5a3a98484a3ee591ff2..de71439e12a3bab6456910986fa611dfbdd97980 100644
--- a/lib/ref_tracker.c
+++ b/lib/ref_tracker.c
@@ -96,7 +96,7 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *dir,
stats = ref_tracker_get_stats(dir, display_limit);
if (IS_ERR(stats)) {
- pr_ostream(s, "%s@%pK: couldn't get stats, error %pe\n",
+ pr_ostream(s, "%s@%p: couldn't get stats, error %pe\n",
dir->name, dir, stats);
return;
}
@@ -107,13 +107,13 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *dir,
stack = stats->stacks[i].stack_handle;
if (sbuf && !stack_depot_snprint(stack, sbuf, STACK_BUF_SIZE, 4))
sbuf[0] = 0;
- pr_ostream(s, "%s@%pK has %d/%d users at\n%s\n", dir->name, dir,
+ pr_ostream(s, "%s@%p has %d/%d users at\n%s\n", dir->name, dir,
stats->stacks[i].count, stats->total, sbuf);
skipped -= stats->stacks[i].count;
}
if (skipped)
- pr_ostream(s, "%s@%pK skipped reports about %d/%d users.\n",
+ pr_ostream(s, "%s@%p skipped reports about %d/%d users.\n",
dir->name, dir, skipped, stats->total);
kfree(sbuf);
--
2.49.0
Return-Path: <linux-kernel+bounces-665634-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 9C36741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:35:51 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 32F0A1BA3F33
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:35:56 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id DFE7A28A415;
Wed, 28 May 2025 14:34:55 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="YemqRJbL"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2B814288C26;
Wed, 28 May 2025 14:34:54 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442895; cv=none; b=uxtTkaFtIv+Re/gcWcbn0V+pFim6hNR4orTJxW9W9uQOXLith8b9dy8N88tSf8Ju1UQcyrru8d23f5Uf7Dj8rWBbfrmgNigv0FEiBLrAyeAW43oPhA7mGUS7zHGgXCCZpJ7zBYlIhOrw00Ab1DT7LfzsvwuHmYNpAC2mHhP+i8k=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442895; c=relaxed/simple;
bh=LxLVRB8GvDbWgwRUBMxy60vYqqNKxSuBn+6jZzlFCL8=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:
In-Reply-To:To:Cc; b=EG3kqNr2Y/Ihlsi0XqusrKZkv+dssaLgy8cK0Z50UBq8sjW+Fdo7pSeubi0JvMHNFgU1Odkms2TGK+oWF1ktj3X+gs5OrZsQFcDtj5gjBQ3AuEd/8hbk6NiofZPYNl3e0q4gegLAwjQ0RuutVbtkzLWSP+NHxHYTuAW3Uv3uTO8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=YemqRJbL; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id D1CA4C4CEF6;
Wed, 28 May 2025 14:34:52 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748442894;
bh=LxLVRB8GvDbWgwRUBMxy60vYqqNKxSuBn+6jZzlFCL8=;
h=From:Date:Subject:References:In-Reply-To:To:Cc:From;
b=YemqRJbLG4RaBxL/301sTdPNenZhSt2Mog5tm1ymhn1tTsbRq7gjonaBcQQszsVsT
tTYFCKzifPMCZ8KXfhvxx9DK0N8DdBlx55Ta+lt6REedUjVpAGLhrXiDfNI6RupUTZ
3wJ5zeI2B0hkLWijamgn2wlrirEYCIUE5lR8/1C3dNMhzBqVKOGeajiVyBCheVH4ZW
UE/LT2SeB1+oK/NP2WjiI0P7QMW+43Rj+8sNaztmmRWLxjwsJUxeZpUx8YtgySP3Ml
kvo8pDSuYm4pOv15JAIJRLbWMVEYMSSKjZhG7g0rUZ6TOfQuJpr5TFLkJaGHxgC1QN
K4JODSwTiI8bQ==
From: Jeff Layton <jlayton@xxxxxxxxxx>
Date: Wed, 28 May 2025 10:34:35 -0400
Subject: [PATCH v11 03/10] ref_tracker: add a top level debugfs directory
for ref_tracker
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20250528-reftrack-dbgfs-v11-3-94ae0b165841@xxxxxxxxxx>
References: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
In-Reply-To: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
To: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Simon Horman <horms@xxxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>, Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>
Cc: Kuniyuki Iwashima <kuniyu@xxxxxxxxxx>, Qasim Ijaz <qasdev00@xxxxxxxxx>,
Nathan Chancellor <nathan@xxxxxxxxxx>, Andrew Lunn <andrew@xxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
Jeff Layton <jlayton@xxxxxxxxxx>
X-Mailer: b4 0.14.2
X-Developer-Signature: v=1; a=openpgp-sha256; l=1182; i=jlayton@xxxxxxxxxx;
h=from:subject:message-id; bh=LxLVRB8GvDbWgwRUBMxy60vYqqNKxSuBn+6jZzlFCL8=;
b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoNx8EIvxwwvu2Rez69XJFIEm8ehsmoMNYZvgu+
go5k0V3q4yJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaDcfBAAKCRAADmhBGVaC
FaO+EADEIFnvTcw6Nwx3C27bRQvHJHCMfcvXKPs5gkHanmnl7cFOF7k/qJJuuY+z2gKwAtMadU2
S4zlTlXXF7kwaphIWiJIPc6R8oeCjisEOd4/ge1e2j38lmPdBPcxggMXuIhQkO7nDG7tF9ZW/F2
KRPZk4a5jrcUYYErdmn0YXeuoPCrw+1Uf6LMjtI/VeUIQx/eQAurDBLDdM+9ClNHtoLKsz/M3gK
b1t8RtoyUyCqlkOMl8/rHLlcGvwKh8iN8BsJlYztPGBEe4kml4vcPczfWtWXP4x9IQ0mGKLpQh+
E6WFCmgIyEzyk3TWxvL5coz6cDPRT3+Ap91KGDGlsPR4KrOAJlCEvxsbFUZvlJgZt2L3uUcZC6J
SV0qXv07AiDo8vbBj4S94UjMGhsLo3xjbMxZANpyzAhPAEnHn5PlibrpdwkJ1cNfcSI0FeZrrCy
raxU3SfLdUUDZv3GRx+epyQGKTLvzkIMP7RpOwbxg4xHR9U3X7R2K+QaPvvYvuu0ZbobfNLxvYi
yCZ76fIojCtdL9CPftqGZfbzepFV+vskaaCelS4YahquYOhbhGdB2RWHko7hVlAtzcm4xMrUOkd
IUmY4ea80AUChnPpl4slnHrSxBth+vqcuFHNbWzKW1Kip/i1aJD9aMrzVSt+zziA5KelceJSzD9
qZCW6MtA4UVYq1w==
X-Developer-Key: i=jlayton@xxxxxxxxxx; a=openpgp;
fpr=4BC0D7B24471B2A184EAF5D3000E684119568215
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Add a new "ref_tracker" directory in debugfs. Each individual refcount
tracker can register files under there to display info about
currently-held references.
Reviewed-by: Andrew Lunn <andrew@xxxxxxx>
Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
---
lib/ref_tracker.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c
index de71439e12a3bab6456910986fa611dfbdd97980..34ac37db209077d6771d5f4367e53d19ba3169c6 100644
--- a/lib/ref_tracker.c
+++ b/lib/ref_tracker.c
@@ -273,3 +273,19 @@ int ref_tracker_free(struct ref_tracker_dir *dir,
return 0;
}
EXPORT_SYMBOL_GPL(ref_tracker_free);
+
+#ifdef CONFIG_DEBUG_FS
+#include <linux/debugfs.h>
+
+static struct dentry *ref_tracker_debug_dir = (struct dentry *)-ENOENT;
+
+static int __init ref_tracker_debugfs_init(void)
+{
+ ref_tracker_debug_dir = debugfs_create_dir("ref_tracker", NULL);
+ if (IS_ERR(ref_tracker_debug_dir))
+ pr_warn("ref_tracker: unable to create debugfs ref_tracker directory: %pe\n",
+ ref_tracker_debug_dir);
+ return 0;
+}
+late_initcall(ref_tracker_debugfs_init);
+#endif /* CONFIG_DEBUG_FS */
--
2.49.0
Return-Path: <linux-kernel+bounces-665636-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id BD1CA41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:36:14 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id ECA817AA9FB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:34:55 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 3B226288C96;
Wed, 28 May 2025 14:35:00 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Mp7sPzIY"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4B3B128AAFE;
Wed, 28 May 2025 14:34:58 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442899; cv=none; b=nJ79JWY+SJ1pirO+XsqHu9/HTnHphNykxr+Jqxprp7EUi9FkczMK08mzMjO85Cb4KX/Cz2ZHJYSS6aR4DCC0Tpl17SXgtq1KKl4mGwwtUGd2Vv7VdaigEz5sHtsEGwigKrr9NIHWfj2YMte31VT5VpIr7muTBfULI+i+pfP11+M=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442899; c=relaxed/simple;
bh=yBa7ifHp2eEzkVC7ksvSn07Jj9NvKIPB+yWSqGSHorE=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:
In-Reply-To:To:Cc; b=N1Dn3CK5207/fPn1tV4UomKIiq4aJFM4MZ+YFYUVFDnAYoRbNjP8OsWL7/FmK+7Zz+l6kWMqbgcmZs0yWiQJ4TjTNknYvgc5GkshcGwh1b5s4nbcK3HbRxPU91wH5EabpfAUB8r5++6oFBcsFucRzFjoLzQs0HE/LkfXuF2I/M8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Mp7sPzIY; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id E14F4C4CEED;
Wed, 28 May 2025 14:34:56 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748442898;
bh=yBa7ifHp2eEzkVC7ksvSn07Jj9NvKIPB+yWSqGSHorE=;
h=From:Date:Subject:References:In-Reply-To:To:Cc:From;
b=Mp7sPzIY1gPH6IBnKaOobixohW9sngW5pUFTPCRR3UWJeLsX15NRHFpeq2xJyoCIU
a9uYu1LGpp2jQUwBkrFp0GJivihc8NQPRVKBzyXpAD0kgkSaf7kUAI9cLU2EslvCTy
4cGM9zxFk1k1Ms4HTX68V94tYDlxdfBJIq5uOnt3MWkPRoM0tfq0lBf9Kp2PRlZV5O
52BrZW+cc0qVtTlB+4A+ASPslJhgWkQvgCGtX+7SaOnjUd2aA2W8st6Yfz86LfVGDm
xSxeVmdIW3M+uky/m4aaf9mpsC4S6bihOnvV7Xwnrj9amWO0UIh+eRfvKLhnU7hBiT
Y7EmJQME+DV7w==
From: Jeff Layton <jlayton@xxxxxxxxxx>
Date: Wed, 28 May 2025 10:34:37 -0400
Subject: [PATCH v11 05/10] ref_tracker: add a static classname string to
each ref_tracker_dir
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20250528-reftrack-dbgfs-v11-5-94ae0b165841@xxxxxxxxxx>
References: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
In-Reply-To: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
To: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Simon Horman <horms@xxxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>, Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>
Cc: Kuniyuki Iwashima <kuniyu@xxxxxxxxxx>, Qasim Ijaz <qasdev00@xxxxxxxxx>,
Nathan Chancellor <nathan@xxxxxxxxxx>, Andrew Lunn <andrew@xxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
Jeff Layton <jlayton@xxxxxxxxxx>
X-Mailer: b4 0.14.2
X-Developer-Signature: v=1; a=openpgp-sha256; l=6071; i=jlayton@xxxxxxxxxx;
h=from:subject:message-id; bh=yBa7ifHp2eEzkVC7ksvSn07Jj9NvKIPB+yWSqGSHorE=;
b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoNx8F17DDgq/6aKRW8+AjuMf9twD61q0iG//V+
g821NuXlP+JAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaDcfBQAKCRAADmhBGVaC
FdruEACl9d3KF9MnOGca38VAjVRvu2FxFIinj83AUttzdTNh+2NbCV+23PISNr3j6hKhoT654sD
zSkaO9MqkyW8uQr1fA8u28UC5HpwxoUsewad9NpUhafbs3Fg7+GNOJx3g2oTdcYOWcAuhxvQ34v
9jO83cEbBoToA40gNNVcFdoDgejXWc/ThTLk1si1kPdWXZ1mx0H2oH/tlb4bZeOaR9P0c1tFhnC
p5cRFVqxxj7McM+PwoXsujvcph4pIKJZudxqrMN5e755pN3P4uGMeBu/QcAberGqeFv5kSvg7xP
aHbf+ec94mYVwIauHlx2N8andt/gGmV+a2XZ2Neyfb6q1C/5ksGkJPAHEc1FEz79XRtf1qL27zc
Cmx9Yts0ho/p6gwf2m+VeYIEHA1QjOinPbQ1wq734jEy1U0H2cyFMx+697U1Os1tOkFFCn/Rt37
yxkwuf9XnwMMGDkjLfOyCPRxw4ScdWiTDL5LVkSzhiarLjw1/1UY/KPl/dkdN87R0Wqk0y/OkSO
+HXYpiWwLWVgXZyk4Cxyf5uDrTLPqIASdiOwQY/dpE34wRvNnyGGGp3/Vxj0IEYCiom0FZmk4FQ
wjPWrapclnKj+0WI7mCtTHZLHhOw99f3nK3zp/1bpsQ+iaFpLBBgw/j5ABMhSjMMiQmou0H3FgY
zFR7ziUH2sp3NXQ==
X-Developer-Key: i=jlayton@xxxxxxxxxx; a=openpgp;
fpr=4BC0D7B24471B2A184EAF5D3000E684119568215
X-Spam-Status: No, score=-4.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
PDS_OTHER_BAD_TLD,RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
A later patch in the series will be adding debugfs files for each
ref_tracker that get created in ref_tracker_dir_init(). The format will
be "class@%px". The current "name" string can vary between
ref_tracker_dir objects of the same type, so it's not suitable for this
purpose.
Add a new "class" string to the ref_tracker dir that describes the
the type of object (sans any individual info for that object).
Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
---
drivers/gpu/drm/display/drm_dp_tunnel.c | 2 +-
drivers/gpu/drm/i915/intel_runtime_pm.c | 5 +++--
drivers/gpu/drm/i915/intel_wakeref.c | 4 ++--
include/linux/ref_tracker.h | 4 ++++
lib/test_ref_tracker.c | 2 +-
net/core/dev.c | 2 +-
net/core/net_namespace.c | 4 ++--
7 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/display/drm_dp_tunnel.c b/drivers/gpu/drm/display/drm_dp_tunnel.c
index 076edf1610480275c62395334ab0536befa42f15..b9c12b8bf2a3e400b6d8e9d184145834c603b9e1 100644
--- a/drivers/gpu/drm/display/drm_dp_tunnel.c
+++ b/drivers/gpu/drm/display/drm_dp_tunnel.c
@@ -1920,7 +1920,7 @@ drm_dp_tunnel_mgr_create(struct drm_device *dev, int max_group_count)
}
#ifdef CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG
- ref_tracker_dir_init(&mgr->ref_tracker, 16, "dptun");
+ ref_tracker_dir_init(&mgr->ref_tracker, 16, "drm_dptun", "dptun");
#endif
for (i = 0; i < max_group_count; i++) {
diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c
index 1b2ad1e0aef7d317f63a23b39193ea81c90401f0..90d90145a1890bf788e789858ddad3b3d8e3b978 100644
--- a/drivers/gpu/drm/i915/intel_runtime_pm.c
+++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
@@ -59,8 +59,9 @@ static struct drm_i915_private *rpm_to_i915(struct intel_runtime_pm *rpm)
static void init_intel_runtime_pm_wakeref(struct intel_runtime_pm *rpm)
{
- if (!rpm->debug.name[0])
- ref_tracker_dir_init(&rpm->debug, INTEL_REFTRACK_DEAD_COUNT, dev_name(rpm->kdev));
+ if (!rpm->debug.class)
+ ref_tracker_dir_init(&rpm->debug, INTEL_REFTRACK_DEAD_COUNT,
+ "intel_runtime_pm", dev_name(rpm->kdev));
}
static intel_wakeref_t
diff --git a/drivers/gpu/drm/i915/intel_wakeref.c b/drivers/gpu/drm/i915/intel_wakeref.c
index 3cfd68c98023fef75faa4dd69eba55e093130dd7..21dcee7c9a659ac1fb0aa19f3018647be3bda754 100644
--- a/drivers/gpu/drm/i915/intel_wakeref.c
+++ b/drivers/gpu/drm/i915/intel_wakeref.c
@@ -114,8 +114,8 @@ void __intel_wakeref_init(struct intel_wakeref *wf,
"wakeref.work", &key->work, 0);
#if IS_ENABLED(CONFIG_DRM_I915_DEBUG_WAKEREF)
- if (!wf->debug.name[0])
- ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, name);
+ if (!wf->debug.class)
+ ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, "intel_wakeref", name);
#endif
}
diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h
index a0a1ee43724ffa00e60c116be18e481bfe1d1455..3968f993db81e95c0d58c81454311841c1b9cd35 100644
--- a/include/linux/ref_tracker.h
+++ b/include/linux/ref_tracker.h
@@ -19,6 +19,7 @@ struct ref_tracker_dir {
bool dead;
struct list_head list; /* List of active trackers */
struct list_head quarantine; /* List of dead trackers */
+ const char *class; /* object classname */
char name[32];
#endif
};
@@ -27,6 +28,7 @@ struct ref_tracker_dir {
static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir,
unsigned int quarantine_count,
+ const char *class,
const char *name)
{
INIT_LIST_HEAD(&dir->list);
@@ -36,6 +38,7 @@ static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir,
dir->dead = false;
refcount_set(&dir->untracked, 1);
refcount_set(&dir->no_tracker, 1);
+ dir->class = class;
strscpy(dir->name, name, sizeof(dir->name));
stack_depot_init();
}
@@ -60,6 +63,7 @@ int ref_tracker_free(struct ref_tracker_dir *dir,
static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir,
unsigned int quarantine_count,
+ const char *class,
const char *name)
{
}
diff --git a/lib/test_ref_tracker.c b/lib/test_ref_tracker.c
index b983ceb12afcb84ad60360a1e6fec0072e78ef79..d263502a4c1db248f64a66a468e96c8e4cffab25 100644
--- a/lib/test_ref_tracker.c
+++ b/lib/test_ref_tracker.c
@@ -64,7 +64,7 @@ static int __init test_ref_tracker_init(void)
{
int i;
- ref_tracker_dir_init(&ref_dir, 100, "selftest");
+ ref_tracker_dir_init(&ref_dir, 100, "selftest", "selftest");
timer_setup(&test_ref_tracker_timer, test_ref_tracker_timer_func, 0);
mod_timer(&test_ref_tracker_timer, jiffies + 1);
diff --git a/net/core/dev.c b/net/core/dev.c
index 3eb4e945f3120f26605a0b407cb98b12492bc61e..bac9d29486556023cd99f5101b96b052acb9ba70 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -11713,7 +11713,7 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name,
dev->priv_len = sizeof_priv;
- ref_tracker_dir_init(&dev->refcnt_tracker, 128, name);
+ ref_tracker_dir_init(&dev->refcnt_tracker, 128, "netdev", name);
#ifdef CONFIG_PCPU_DEV_REFCNT
dev->pcpu_refcnt = alloc_percpu(int);
if (!dev->pcpu_refcnt)
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
index 42ee7fce3d95b5a2756d6a3780edba070f01ddb6..8708eb975295ffb78de35fcf4abef7cc281f5a51 100644
--- a/net/core/net_namespace.c
+++ b/net/core/net_namespace.c
@@ -403,8 +403,8 @@ static __net_init void preinit_net(struct net *net, struct user_namespace *user_
{
refcount_set(&net->passive, 1);
refcount_set(&net->ns.count, 1);
- ref_tracker_dir_init(&net->refcnt_tracker, 128, "net refcnt");
- ref_tracker_dir_init(&net->notrefcnt_tracker, 128, "net notrefcnt");
+ ref_tracker_dir_init(&net->refcnt_tracker, 128, "net_refcnt", "net_refcnt");
+ ref_tracker_dir_init(&net->notrefcnt_tracker, 128, "net_notrefcnt", "net_notrefcnt");
get_random_bytes(&net->hash_mix, sizeof(u32));
net->dev_base_seq = 1;
--
2.49.0
Return-Path: <linux-kernel+bounces-665635-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 4EEE541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:36:19 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id D22B84E3FCA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:35:58 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 3E6C028AAEB;
Wed, 28 May 2025 14:34:58 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="tlgaHZGm"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4E59228A724;
Wed, 28 May 2025 14:34:56 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442897; cv=none; b=h5P7UEzMShBE1hKvU6MJJLcp3M3GbqaPidcsjN8GpsPzSxpmZOXLaJk75lIQ0SU45DxCk4vpGXEkcNa/uT4oao9h1Vdi7Dz7hGpiS752/O2f9KqjzGw/nhYj1hDf1ICpKvoY/abe9ob6nYtJlJjYdwFNxf9MQzs8GgHuuVMVSWU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442897; c=relaxed/simple;
bh=jHVEVy1GEirWdHs1IJVtpuQ6jElofdeZ5cfT2E8mzAk=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:
In-Reply-To:To:Cc; b=RaF28MOjcMZ8dePAyHH+sX3P6yfVyyjWPBx5+Dz0Zms7YLk67VV782g0cTkByvDf8b57TxGeIHgRtTkDgrSMO81vdHcSRyS5DYr0ZwL3tEcNsw4+wRVvTdPGuJrD7MGPEmdwCLvwCvva4vnr1vKpqPV/QYS6INv/FNLYLBmjxIM=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=tlgaHZGm; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id D8666C4CEEF;
Wed, 28 May 2025 14:34:54 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748442896;
bh=jHVEVy1GEirWdHs1IJVtpuQ6jElofdeZ5cfT2E8mzAk=;
h=From:Date:Subject:References:In-Reply-To:To:Cc:From;
b=tlgaHZGmpciD919foUtiVyDb7z4kKbKDA84tTtL4GWgN8m1Mi5XqPVI2Vl370VmEE
yNwSqDE0RufEzCkS19v9PAm3O4wxNUk1xVuvp4I5yyY0CDIKR3T7dT1ZSNLr3geQmb
I7uNu6U4AeuAbf79fj7ELIPijPr7HdGVhSvjZXIQXJ/frbzZ7wfpSrQQvEyXrvazgv
wvoIDYNdssNbUJZh2jR0jEwzMiOWboXPqSHDVOLro77Wnf4vpu0sPnXEoCHrNbHOjW
fHxiBlHR1WcpCNYlFyeL0/SRthxodKxdH4JIX1ea4MZm1CD1MPPdZbNvT2GSCH6zSr
dkhP4NXGESAmQ==
From: Jeff Layton <jlayton@xxxxxxxxxx>
Date: Wed, 28 May 2025 10:34:36 -0400
Subject: [PATCH v11 04/10] ref_tracker: have callers pass output function
to pr_ostream()
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20250528-reftrack-dbgfs-v11-4-94ae0b165841@xxxxxxxxxx>
References: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
In-Reply-To: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
To: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Simon Horman <horms@xxxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>, Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>
Cc: Kuniyuki Iwashima <kuniyu@xxxxxxxxxx>, Qasim Ijaz <qasdev00@xxxxxxxxx>,
Nathan Chancellor <nathan@xxxxxxxxxx>, Andrew Lunn <andrew@xxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
Jeff Layton <jlayton@xxxxxxxxxx>
X-Mailer: b4 0.14.2
X-Developer-Signature: v=1; a=openpgp-sha256; l=4242; i=jlayton@xxxxxxxxxx;
h=from:subject:message-id; bh=jHVEVy1GEirWdHs1IJVtpuQ6jElofdeZ5cfT2E8mzAk=;
b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoNx8FmZtnBL+zLjp+PEeI71Y4FFL+3F+XQH46u
6+TgXwowQ+JAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaDcfBQAKCRAADmhBGVaC
FQC1D/4g7U2suKxkXU+QlGTLqD1ATt20dDu/2nHpmNyYaxeizvdQCSTcdfxVaVH4UrT9KYpBvEn
un0ebpHfOu0ygg2IiTsQEIhejqllwaJtpWqznAkKwA7+7XPT7H0oEthmQVyS7x3VBsY4FyhQzVU
3FODmp6o8v2RaJmBIZCDAMlXB0crYXVJckj1Z+9Ti9ptTDU2IhqdKlKNgIeUCLyWuQB6eAjqeMP
Eh1x/l06Gi4E5IEskp0NGJNLnnuw2bFHjbdRdEv085Mp4EEGkHwr97qSb8RVmOtIh4GPk665iGJ
oQJf5ElEikeFHKtAhd20eizbXf9UzOhD/N+wjvF0Euy2M+qoO0Bradu/hoTUNPGqUzMpW1u2bRv
18Zn4LdfkyOb7YLRqCZ6cCXJVphESKfgVvR5jt+nzKQ/ytqU7w/KaTobLwRRjBbcgwcdlpBNZLv
J/zDXVJECuKqu9fW/dGsR/9volvzMAOkpvZFK32FZL46dMeFFWttmE31TqDA32TdtEZiVBP/9ta
E6GC5kNzRV34qL8P809Eu8MpQSIKdXcoK5SUW6hfhKaQKLNyZSJ5VfQFAxzaDnxCeT8pve+t+Rf
XbdvilZGJ9oxJgEZPapHEnX+P3faDJrwWVfahQ1CB9zBU02q7OpWEZ+rWHRMAR398EfJ+c5hmq2
Ltf2I+3V+NuJ1Xg==
X-Developer-Key: i=jlayton@xxxxxxxxxx; a=openpgp;
fpr=4BC0D7B24471B2A184EAF5D3000E684119568215
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
In a later patch, we'll be adding a 3rd mechanism for outputting
ref_tracker info via seq_file. Instead of a conditional, have the caller
set a pointer to an output function in struct ostream. As part of this,
the log prefix must be explicitly passed in, as it's too late for the
pr_fmt macro.
Reviewed-by: Andrew Lunn <andrew@xxxxxxx>
Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
---
include/linux/ref_tracker.h | 2 ++
lib/ref_tracker.c | 51 ++++++++++++++++++++++++++++++++-------------
2 files changed, 38 insertions(+), 15 deletions(-)
diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h
index 8eac4f3d52547ccbaf9dcd09962ce80d26fbdff8..a0a1ee43724ffa00e60c116be18e481bfe1d1455 100644
--- a/include/linux/ref_tracker.h
+++ b/include/linux/ref_tracker.h
@@ -6,6 +6,8 @@
#include <linux/spinlock.h>
#include <linux/stackdepot.h>
+#define __ostream_printf __printf(2, 3)
+
struct ref_tracker;
struct ref_tracker_dir {
diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c
index 34ac37db209077d6771d5f4367e53d19ba3169c6..607718d00ffa74bd6d9abf97e913abcfd56dd1c8 100644
--- a/lib/ref_tracker.c
+++ b/lib/ref_tracker.c
@@ -63,21 +63,37 @@ ref_tracker_get_stats(struct ref_tracker_dir *dir, unsigned int limit)
}
struct ostream {
+ void __ostream_printf (*func)(struct ostream *stream, char *fmt, ...);
+ char *prefix;
char *buf;
int size, used;
};
+static void __ostream_printf pr_ostream_log(struct ostream *stream, char *fmt, ...)
+{
+ va_list args;
+
+ va_start(args, fmt);
+ vprintk(fmt, args);
+ va_end(args);
+}
+
+static void __ostream_printf pr_ostream_buf(struct ostream *stream, char *fmt, ...)
+{
+ int ret, len = stream->size - stream->used;
+ va_list args;
+
+ va_start(args, fmt);
+ ret = vsnprintf(stream->buf + stream->used, len, fmt, args);
+ va_end(args);
+ stream->used += min(ret, len);
+}
+
#define pr_ostream(stream, fmt, args...) \
({ \
struct ostream *_s = (stream); \
\
- if (!_s->buf) { \
- pr_err(fmt, ##args); \
- } else { \
- int ret, len = _s->size - _s->used; \
- ret = snprintf(_s->buf + _s->used, len, pr_fmt(fmt), ##args); \
- _s->used += min(ret, len); \
- } \
+ _s->func(_s, fmt, ##args); \
})
static void
@@ -96,8 +112,8 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *dir,
stats = ref_tracker_get_stats(dir, display_limit);
if (IS_ERR(stats)) {
- pr_ostream(s, "%s@%p: couldn't get stats, error %pe\n",
- dir->name, dir, stats);
+ pr_ostream(s, "%s%s@%p: couldn't get stats, error %pe\n",
+ s->prefix, dir->name, dir, stats);
return;
}
@@ -107,14 +123,15 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *dir,
stack = stats->stacks[i].stack_handle;
if (sbuf && !stack_depot_snprint(stack, sbuf, STACK_BUF_SIZE, 4))
sbuf[0] = 0;
- pr_ostream(s, "%s@%p has %d/%d users at\n%s\n", dir->name, dir,
- stats->stacks[i].count, stats->total, sbuf);
+ pr_ostream(s, "%s%s@%p has %d/%d users at\n%s\n", s->prefix,
+ dir->name, dir, stats->stacks[i].count,
+ stats->total, sbuf);
skipped -= stats->stacks[i].count;
}
if (skipped)
- pr_ostream(s, "%s@%p skipped reports about %d/%d users.\n",
- dir->name, dir, skipped, stats->total);
+ pr_ostream(s, "%s%s@%p skipped reports about %d/%d users.\n",
+ s->prefix, dir->name, dir, skipped, stats->total);
kfree(sbuf);
@@ -124,7 +141,8 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *dir,
void ref_tracker_dir_print_locked(struct ref_tracker_dir *dir,
unsigned int display_limit)
{
- struct ostream os = {};
+ struct ostream os = { .func = pr_ostream_log,
+ .prefix = "ref_tracker: " };
__ref_tracker_dir_pr_ostream(dir, display_limit, &os);
}
@@ -143,7 +161,10 @@ EXPORT_SYMBOL(ref_tracker_dir_print);
int ref_tracker_dir_snprint(struct ref_tracker_dir *dir, char *buf, size_t size)
{
- struct ostream os = { .buf = buf, .size = size };
+ struct ostream os = { .func = pr_ostream_buf,
+ .prefix = "ref_tracker: ",
+ .buf = buf,
+ .size = size };
unsigned long flags;
spin_lock_irqsave(&dir->lock, flags);
--
2.49.0
Return-Path: <linux-kernel+bounces-665637-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1B9C141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:37:04 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 884BCA220C5
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:36:04 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 19EDE28B50A;
Wed, 28 May 2025 14:35:02 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mHjl3DmV"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5123F28B4E1;
Wed, 28 May 2025 14:35:00 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442901; cv=none; b=PXMkRcsVhiMgBwwTa28KO6nZUt37WLHsJTztCUXt52J1eNnUc7nSP4TVdkTwsFALXT3S+lv7SmjzrWWnHGlmAAT54dzQj4youSzi61oFUN2+CzsnFY6KJ+nqvEfggAWbiDyRIQrbDJldIic+eXYQuNQ8jrZmLHKEiSLtqE28iHQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442901; c=relaxed/simple;
bh=sWMiF3Jp8psrx0vXllDtK7/+QK0kGDwaFLz+zCQWWb4=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:
In-Reply-To:To:Cc; b=rN33e8+6ZDx9h2NBFL1rcZFM3AutmRv6hFXVnwvQaKO9zN2acPN+9tDI7ogmeBfLD0HxKN2BLALvi/0KVXtuWINrnPB3Rng52PqEAXj6vByx6a0cjw+kjv29dd5nfGlXHUzziv0AIHWy6L2ymREkAnK3dhPOBZf1hsvs2NNUoCE=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mHjl3DmV; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id E89A6C4CEF1;
Wed, 28 May 2025 14:34:58 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748442900;
bh=sWMiF3Jp8psrx0vXllDtK7/+QK0kGDwaFLz+zCQWWb4=;
h=From:Date:Subject:References:In-Reply-To:To:Cc:From;
b=mHjl3DmVqOyQj6LIFz1SYtL1YCu88illwSUyBb3Fs85pkmZd8jgBYjY8/Di8VV1TC
cft1is6xV0F97gBWe6Hf6WcILD5OyOg+IfVZ7njcjJGs62oRwbCRkeZ77eFLLBOOt5
cK06+3Ll5DO/CnXy1DXG5Ge1O+HhY9zhO0U7wwuk1zr0oN9Xrn7btjsbwgZmJr1ZCJ
S9TzVruOdr3B+CfrwWoT4r+RUFN9ypZLZsvpklraFBEkcQ5beMTSlNHPWVJTK2h9yi
QW2ky0/gkanEh2f1R7P5oS6nCDbRPt1UVCO0mC0UEjjXjsPIXMUY/s1uB0vNwqW35u
+CgvgK+LuxzQg==
From: Jeff Layton <jlayton@xxxxxxxxxx>
Date: Wed, 28 May 2025 10:34:38 -0400
Subject: [PATCH v11 06/10] ref_tracker: allow pr_ostream() to print
directly to a seq_file
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20250528-reftrack-dbgfs-v11-6-94ae0b165841@xxxxxxxxxx>
References: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
In-Reply-To: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
To: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Simon Horman <horms@xxxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>, Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>
Cc: Kuniyuki Iwashima <kuniyu@xxxxxxxxxx>, Qasim Ijaz <qasdev00@xxxxxxxxx>,
Nathan Chancellor <nathan@xxxxxxxxxx>, Andrew Lunn <andrew@xxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
Jeff Layton <jlayton@xxxxxxxxxx>
X-Mailer: b4 0.14.2
X-Developer-Signature: v=1; a=openpgp-sha256; l=1919; i=jlayton@xxxxxxxxxx;
h=from:subject:message-id; bh=sWMiF3Jp8psrx0vXllDtK7/+QK0kGDwaFLz+zCQWWb4=;
b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoNx8FcfDlMWQ2oIJlhlzWQq8wxdlXVv6cgcDK3
X8YzGsS6mGJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaDcfBQAKCRAADmhBGVaC
FRO6D/4yuAvBXbS8oPQDp0cb7e/vofNMacyg+14J1yzPF6XORw47ErSf/ZW9xe/NgwYevYJQ78P
gRJvJXQk/AwtF5EXg6eTvHALZsVOrm+RkgSzH9qkVNRo8fJY0T0v0yMpMt0+VcPf16ZB0/J7ewD
AErr7so25xZw+muohmbh66c649lnV6GcLtqhy3mvHiXu6pJk8rzucB0NLZMbcL0084OpwM5gPMy
0J6MzjgWv6tHIRkpYGwPWo7HXvMS/q7cu5SARdM8DMal9lagZJ0Pe5B+J1H92MnkiQ0N9OpaG4F
otCUEZmbNMoyMGxotMBH/hka7x0qVe5B9xituxJcU+m+8lb01TJU4RrAEZ2X9Zd9RLlQQyMLQyK
Ayxjn9Nd95zLliHUXdWY7+9quncGzBeYrhCiurUfMKgw6CCgVBDw8Nm79pUkrBMTiPVCNUMBEi+
EHYE3oCAHefmtkG4w27ozGyYtCWWYio+e5wCBLKX4hf5JZDRBJ4QJIN1a7OiePgnjWzqELojuwi
rpod4tJJdEIIkYr4tKTDoarn1WgHvXshPSinVO9gSTy5ArvHUksk6RTh9mPTKmwcef/WjP046/l
kg5dmaug7Vvt2Ad/kWQ4CNbBjtpAGYtkyoAcasvgmAgL5U24ePJrN9VZPjO8wjC3xQpOYRpQJC7
5RzCxJUsoyFr83Q==
X-Developer-Key: i=jlayton@xxxxxxxxxx; a=openpgp;
fpr=4BC0D7B24471B2A184EAF5D3000E684119568215
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Allow pr_ostream to also output directly to a seq_file without an
intermediate buffer. The first caller of +ref_tracker_dir_seq_print()
will come in a later patch, so mark that __maybe_unused for now. That
designation will be removed once it is used.
Reviewed-by: Andrew Lunn <andrew@xxxxxxx>
Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
---
lib/ref_tracker.c | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c
index 607718d00ffa74bd6d9abf97e913abcfd56dd1c8..6e85e7eb347d86775ba38a72dad7159f9ac41ed9 100644
--- a/lib/ref_tracker.c
+++ b/lib/ref_tracker.c
@@ -8,6 +8,7 @@
#include <linux/slab.h>
#include <linux/stacktrace.h>
#include <linux/stackdepot.h>
+#include <linux/seq_file.h>
#define REF_TRACKER_STACK_ENTRIES 16
#define STACK_BUF_SIZE 1024
@@ -66,6 +67,7 @@ struct ostream {
void __ostream_printf (*func)(struct ostream *stream, char *fmt, ...);
char *prefix;
char *buf;
+ struct seq_file *seq;
int size, used;
};
@@ -300,6 +302,30 @@ EXPORT_SYMBOL_GPL(ref_tracker_free);
static struct dentry *ref_tracker_debug_dir = (struct dentry *)-ENOENT;
+static void __ostream_printf pr_ostream_seq(struct ostream *stream, char *fmt, ...)
+{
+ va_list args;
+
+ va_start(args, fmt);
+ seq_vprintf(stream->seq, fmt, args);
+ va_end(args);
+}
+
+static __maybe_unused int
+ref_tracker_dir_seq_print(struct ref_tracker_dir *dir, struct seq_file *seq)
+{
+ struct ostream os = { .func = pr_ostream_seq,
+ .prefix = "",
+ .seq = seq };
+ unsigned long flags;
+
+ spin_lock_irqsave(&dir->lock, flags);
+ __ref_tracker_dir_pr_ostream(dir, 16, &os);
+ spin_unlock_irqrestore(&dir->lock, flags);
+
+ return os.used;
+}
+
static int __init ref_tracker_debugfs_init(void)
{
ref_tracker_debug_dir = debugfs_create_dir("ref_tracker", NULL);
--
2.49.0
Return-Path: <linux-kernel+bounces-665638-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id AE8A141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:37:05 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 313A51882449
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:37:03 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id D98B628B7EC;
Wed, 28 May 2025 14:35:03 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="tDuUEv4e"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id E773328B7C9;
Wed, 28 May 2025 14:35:02 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442903; cv=none; b=lBWq+d31eqapH6WAAotGtqP9MWo6YJtczasQs2bCRm3MnNU0Klttn76aHbYAqQmmeFX0vqRayiPsEpc2MH2nGxCaYJYdB9ygHb9Re2kooVYyeUQ2rOgaS64isylMFjuSjVZEdG2UOvqC1yHvJOtWGxgwhtsAjxOTlFz7JHMZQW0=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442903; c=relaxed/simple;
bh=YUzGN4pDQEVUn13ezU+iyAv9BvSGVVgHmEotghHtWUM=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:
In-Reply-To:To:Cc; b=N7n0PUMKvSdrYwqfPZoWRG6rPZAHosQt4eJAvP3rSRxSDHKlq9YVdA7iEjEnmQJwiZ8CTNt0SbvxKvo0F6N2tshx9l7dpS2hZqPUpHFDo6KH4wtG4O3zuuhathkxVXJhfFhsOk4tg5klHyQ+WvPIS0lqM8iL6psdl4n2eoxs+L8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=tDuUEv4e; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id EF4FCC4CEEF;
Wed, 28 May 2025 14:35:00 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748442902;
bh=YUzGN4pDQEVUn13ezU+iyAv9BvSGVVgHmEotghHtWUM=;
h=From:Date:Subject:References:In-Reply-To:To:Cc:From;
b=tDuUEv4eLCK1xSiJAa07yXp4KUTJgztf0yG/0xbMVvDEPDQux8oKgh7o8JZOH80HB
OjDipwJABUUiKw16Dg9TKKAL4BiD6oCwgiogHZHNliLeY90CgaMKWfFduSb76pwPRO
BCmqetRwEjlJTpu3FESmHaTWUye6tD28JM8QNwIatl0DhPTofh9pH7ECVOFE9t0gQJ
lnLacJnzxaCnJ/Ky24BHtsiJXs8p1lxppIStlmfUVil2ISLgsVBjVJ2RaElzjQeORl
5HSijHEmR/5uQdn7Tp5XhXlqdrT8Ee1kc5DFaXt9fx5KGtU9Polqiwl5Hg3gM2O6g5
WpH2bfZkl5L9Q==
From: Jeff Layton <jlayton@xxxxxxxxxx>
Date: Wed, 28 May 2025 10:34:39 -0400
Subject: [PATCH v11 07/10] ref_tracker: automatically register a file in
debugfs for a ref_tracker_dir
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20250528-reftrack-dbgfs-v11-7-94ae0b165841@xxxxxxxxxx>
References: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
In-Reply-To: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
To: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Simon Horman <horms@xxxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>, Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>
Cc: Kuniyuki Iwashima <kuniyu@xxxxxxxxxx>, Qasim Ijaz <qasdev00@xxxxxxxxx>,
Nathan Chancellor <nathan@xxxxxxxxxx>, Andrew Lunn <andrew@xxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
Jeff Layton <jlayton@xxxxxxxxxx>
X-Mailer: b4 0.14.2
X-Developer-Signature: v=1; a=openpgp-sha256; l=5577; i=jlayton@xxxxxxxxxx;
h=from:subject:message-id; bh=YUzGN4pDQEVUn13ezU+iyAv9BvSGVVgHmEotghHtWUM=;
b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoNx8FZjgVZBg6I+yFSchXKb+8fjEwvDfOWumKM
M1qVwkNEQyJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaDcfBQAKCRAADmhBGVaC
FZwqD/447d166xLPc2jQc9YTZ0yDpKwSkOL2LsXqlIkpnAKe3WD0Sg7/lNI2kdUrNbNMxqabF04
LRNI1ubydMJ0yZ4TMtQaRbnpTsbRmpsC4z9z74wflMTbxlCsZNYQChGRvPbkLBUaqTNgZc2T6tl
UdnqxVoSeHDO5U4URoc3WTI6gKM1RSBhHU+ouH5H9jvNxzGBNhjqjxFWUsoRDZGXlHG1rgFKGni
6+UCW5EKm285dPSrmVOxsjkeaBuHDR119KIvgvDB4I9d2P9kg7J0fpvq9sA2fTREJanUgw4hQub
xuevjpVLMxURgFir265Uw+DFCqZVuEBVXs+jb3pTbnDj74cjTriTVHgyb4d7MLOEvSF318yHzTx
wJHRrjyqiI5SRl9ur4e0x+r2ODxonMWk/tSvSj5BN2bRBHwDATM9NGN4XLVX6OY5D0VvP9Ni2vh
CqVsVyvaQD5dgqWQezZYJ3kIsckrXmQ08mTZ5VrRKGKr60pHTFVFxLeJYApkJB/rZsXcC6yyKFW
/toanbV5DME6huuqyIEkvNuxRKIT9WLQ0A3jz0m+AkY92fk5xHVq86WQC5k2BDsuRXHPM1u0srM
uRAousj8+mEbKmOuZQpz45mLdWE5AQhOPqHzRDYfQvEv9Q+IFuWsmo4kbli4OkzTONjHVKL0wrr
Hl57CG47IXyHcsw==
X-Developer-Key: i=jlayton@xxxxxxxxxx; a=openpgp;
fpr=4BC0D7B24471B2A184EAF5D3000E684119568215
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Currently, there is no convenient way to see the info that the
ref_tracking infrastructure collects. Attempt to create a file in
debugfs when called from ref_tracker_dir_init().
The file is given the name "class@%px", as having the unmodified address
is helpful for debugging. This should be safe since this directory is only
accessible by root
If debugfs file creation fails, a pr_warn will be isssued.
Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
---
include/linux/ref_tracker.h | 23 ++++++++++++++
lib/ref_tracker.c | 73 +++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 94 insertions(+), 2 deletions(-)
diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h
index 3968f993db81e95c0d58c81454311841c1b9cd35..dd289fdda12b1a10197912f5796f97002e785aaf 100644
--- a/include/linux/ref_tracker.h
+++ b/include/linux/ref_tracker.h
@@ -20,12 +20,27 @@ struct ref_tracker_dir {
struct list_head list; /* List of active trackers */
struct list_head quarantine; /* List of dead trackers */
const char *class; /* object classname */
+#ifdef CONFIG_DEBUG_FS
+ struct dentry *dentry;
+#endif
char name[32];
#endif
};
#ifdef CONFIG_REF_TRACKER
+#ifdef CONFIG_DEBUG_FS
+
+void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir);
+
+#else /* CONFIG_DEBUG_FS */
+
+static inline void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir)
+{
+}
+
+#endif /* CONFIG_DEBUG_FS */
+
static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir,
unsigned int quarantine_count,
const char *class,
@@ -39,7 +54,11 @@ static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir,
refcount_set(&dir->untracked, 1);
refcount_set(&dir->no_tracker, 1);
dir->class = class;
+#ifdef CONFIG_DEBUG_FS
+ dir->dentry = NULL;
+#endif
strscpy(dir->name, name, sizeof(dir->name));
+ ref_tracker_dir_debugfs(dir);
stack_depot_init();
}
@@ -68,6 +87,10 @@ static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir,
{
}
+static inline void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir)
+{
+}
+
static inline void ref_tracker_dir_exit(struct ref_tracker_dir *dir)
{
}
diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c
index 6e85e7eb347d86775ba38a72dad7159f9ac41ed9..1df12625d80cc7cff65d9f6be89e1dd5c5ffb7f6 100644
--- a/lib/ref_tracker.c
+++ b/lib/ref_tracker.c
@@ -29,6 +29,14 @@ struct ref_tracker_dir_stats {
} stacks[];
};
+#ifdef CONFIG_DEBUG_FS
+static void ref_tracker_debugfs_remove(struct ref_tracker_dir *dir);
+#else
+static inline void ref_tracker_debugfs_remove(struct ref_tracker_dir *dir)
+{
+}
+#endif
+
static struct ref_tracker_dir_stats *
ref_tracker_get_stats(struct ref_tracker_dir *dir, unsigned int limit)
{
@@ -184,6 +192,7 @@ void ref_tracker_dir_exit(struct ref_tracker_dir *dir)
bool leak = false;
dir->dead = true;
+ ref_tracker_debugfs_remove(dir);
spin_lock_irqsave(&dir->lock, flags);
list_for_each_entry_safe(tracker, n, &dir->quarantine, head) {
list_del(&tracker->head);
@@ -311,8 +320,7 @@ static void __ostream_printf pr_ostream_seq(struct ostream *stream, char *fmt, .
va_end(args);
}
-static __maybe_unused int
-ref_tracker_dir_seq_print(struct ref_tracker_dir *dir, struct seq_file *seq)
+static int ref_tracker_dir_seq_print(struct ref_tracker_dir *dir, struct seq_file *seq)
{
struct ostream os = { .func = pr_ostream_seq,
.prefix = "",
@@ -326,6 +334,67 @@ ref_tracker_dir_seq_print(struct ref_tracker_dir *dir, struct seq_file *seq)
return os.used;
}
+static int ref_tracker_debugfs_show(struct seq_file *f, void *v)
+{
+ struct ref_tracker_dir *dir = f->private;
+
+ return ref_tracker_dir_seq_print(dir, f);
+}
+
+static int ref_tracker_debugfs_open(struct inode *inode, struct file *filp)
+{
+ struct ref_tracker_dir *dir = inode->i_private;
+
+ return single_open(filp, ref_tracker_debugfs_show, dir);
+}
+
+static const struct file_operations ref_tracker_debugfs_fops = {
+ .owner = THIS_MODULE,
+ .open = ref_tracker_debugfs_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+};
+
+/**
+ * ref_tracker_dir_debugfs - create debugfs file for ref_tracker_dir
+ * @dir: ref_tracker_dir to be associated with debugfs file
+ *
+ * In most cases, a debugfs file will be created automatically for every
+ * ref_tracker_dir. If the object was created before debugfs is brought up
+ * then that may fail. In those cases, it is safe to call this at a later
+ * time to create the file.
+ */
+void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir)
+{
+ char name[NAME_MAX + 1];
+ int ret;
+
+ /* No-op if already created */
+ if (!IS_ERR_OR_NULL(dir->dentry))
+ return;
+
+ ret = snprintf(name, sizeof(name), "%s@%px", dir->class, dir);
+ name[sizeof(name) - 1] = '\0';
+
+ if (ret < sizeof(name))
+ dir->dentry = debugfs_create_file(name, S_IFREG | 0400,
+ ref_tracker_debug_dir, dir,
+ &ref_tracker_debugfs_fops);
+ else
+ dir->dentry = ERR_PTR(-ENAMETOOLONG);
+
+ if (IS_ERR(dir->dentry))
+ pr_warn("ref_tracker: unable to create debugfs file for %s: %pe\n",
+ name, dir->dentry);
+}
+EXPORT_SYMBOL(ref_tracker_dir_debugfs);
+
+static void ref_tracker_debugfs_remove(struct ref_tracker_dir *dir)
+{
+ debugfs_remove(dir->dentry);
+}
+
static int __init ref_tracker_debugfs_init(void)
{
ref_tracker_debug_dir = debugfs_create_dir("ref_tracker", NULL);
--
2.49.0
Return-Path: <linux-kernel+bounces-665639-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id A9E5241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:37:39 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 5CC294A1580
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:37:05 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 3439628C00F;
Wed, 28 May 2025 14:35:06 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="MN9J0LwS"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5B33B28BA9F;
Wed, 28 May 2025 14:35:04 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442905; cv=none; b=B1duHZwu2cAVMS/7xRFfUFvDlSJ1h1ntHLlxccBzZcqpVKwUj/cx8Y58AUEJKOl0AtAaOdyv9c82rQFpLBmjT2rUasAProeZR64pwwmdZkMJ/OILcaCk+0D9uO0gBi79q6eo/c0qMnVX/TjWCwWAw4PO+xrQbHCi8B4qEsLL/XU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442905; c=relaxed/simple;
bh=G4yxeje4skzZFbWd4GKautKhwMx5ZwXU4VPyyJVpR7k=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:
In-Reply-To:To:Cc; b=L3cRZxbwJK5CcvjTuTI0Ubfml+/5v5Abl0gya/M0rSxMLWmhZsUfH1rjqhmcXdPfxDngnwOPBm6i8Tcr+FlAxrNLLIIKg4hL1jzXvDzRDiO1MND7TxsZYdgkmxIIsu71GKUTsOCMLSEHwZi7mRYHHvjd8i3X8Kb7TEstkgSJM7I=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MN9J0LwS; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 03DFEC4CEED;
Wed, 28 May 2025 14:35:02 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748442904;
bh=G4yxeje4skzZFbWd4GKautKhwMx5ZwXU4VPyyJVpR7k=;
h=From:Date:Subject:References:In-Reply-To:To:Cc:From;
b=MN9J0LwScpAJM+P6wmfSdcRrHrJUHhAVUAA7LwFOKW9bIN8x+Q93O9nq+FjTcyKKe
a3I/89NqOFFU2rc1FWRSC5uaf0YRC+f+1cQBL6S7D9KQYbhEO8kpaytnkl66yrIWW1
oSBBNDYVJo9XGF56gsJlbPmm08I9EJ2dy+euI0RfM4oZzQPL3ohScirZADLoO94LYq
5X2HvaUjYi6YLUpVp/sPWnMOSdiON7WFxoYIOn0GrKKhcVy9jFMxgQnVAQ0WnGIoPM
cZuGs8j9LiK+G1ScEpJZpFn7Tl2h/YVBZ1y4lNWJ+XG+dabUKCqwW69ZeDO/I0ojfU
rUR7yZMGcHPBw==
From: Jeff Layton <jlayton@xxxxxxxxxx>
Date: Wed, 28 May 2025 10:34:40 -0400
Subject: [PATCH v11 08/10] ref_tracker: add a way to create a symlink to
the ref_tracker_dir debugfs file
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20250528-reftrack-dbgfs-v11-8-94ae0b165841@xxxxxxxxxx>
References: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
In-Reply-To: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
To: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Simon Horman <horms@xxxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>, Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>
Cc: Kuniyuki Iwashima <kuniyu@xxxxxxxxxx>, Qasim Ijaz <qasdev00@xxxxxxxxx>,
Nathan Chancellor <nathan@xxxxxxxxxx>, Andrew Lunn <andrew@xxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
Jeff Layton <jlayton@xxxxxxxxxx>
X-Mailer: b4 0.14.2
X-Developer-Signature: v=1; a=openpgp-sha256; l=3234; i=jlayton@xxxxxxxxxx;
h=from:subject:message-id; bh=G4yxeje4skzZFbWd4GKautKhwMx5ZwXU4VPyyJVpR7k=;
b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoNx8FNAc9FDz4vDSLIOq5xZZRQ+6QHi1HAd2Bf
GNUh5Qr+F2JAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaDcfBQAKCRAADmhBGVaC
FSraD/9XEI2gBLK6O+RNZw7Jm1o9g5fCqvVptwiesaXtZvsxcbs6pIP1HOfEoYgr2mJkzBmmzu2
f2N7l/z9PTB+ADHaOurmsbpmAn+3FBgB7QYQ4+8kVFvSLi743+OYgVMwxKGQryVmA5zX5k7MgNH
C8xmXZWd1484Oit4Hnrpsk+YXUiXfFfYD4t+uKrHRhblKEiA2GdKzlHGjjqxrKpPzIDcclIB4tc
+3Y7Dd76obDHECu9WT42fD81hBIkQBTp6zxAGSxINiXYCTe/f+38AaRWqjv48KyXb4RHrFc3qdE
qY65GsVXLInrM+AK+Nf0XzI4G8ThkWgn5lEEuKVcOno8QB7/0HMkqS0MF3dcPoB4BqZbpbeZQQg
FHUgIcNypW8HbodbZTvcYlOFZqJ9VpOrJBXo5Satut55qG/zGK8g9cFCW4p4D8HjfKUnHhyx3f7
52uvZ4oDFB0WSWlQeCd7YOdp2gkRK4h++TDsbE1iGVpsL8YDg2Sip8yS7tXrFKGP6g2nwo9mvtv
0kp0RHgMHSIq8RngGE2g9Eh8xnNsWJD1YcY1/957xhdaA6MqwW1GuQ+E9XjN+kjpi3XeY2wq31w
33x8n0xwH0BZve8VfiRTuC5NE/+WnYC6QJOI3VY47L7vIzB4RGha/h6vaXQb70brOH44ziuiOnq
fEiMhGtI/ITMLWQ==
X-Developer-Key: i=jlayton@xxxxxxxxxx; a=openpgp;
fpr=4BC0D7B24471B2A184EAF5D3000E684119568215
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Add the ability for a subsystem to add a user-friendly symlink that
points to a ref_tracker_dir's debugfs file.
Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
---
include/linux/ref_tracker.h | 13 +++++++++++++
lib/ref_tracker.c | 28 ++++++++++++++++++++++++++++
2 files changed, 41 insertions(+)
diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h
index dd289fdda12b1a10197912f5796f97002e785aaf..ddc5a7b2bd84692bbc1e1ae67674ec2c6857e1ec 100644
--- a/include/linux/ref_tracker.h
+++ b/include/linux/ref_tracker.h
@@ -22,6 +22,7 @@ struct ref_tracker_dir {
const char *class; /* object classname */
#ifdef CONFIG_DEBUG_FS
struct dentry *dentry;
+ struct dentry *symlink;
#endif
char name[32];
#endif
@@ -32,6 +33,7 @@ struct ref_tracker_dir {
#ifdef CONFIG_DEBUG_FS
void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir);
+void ref_tracker_dir_symlink(struct ref_tracker_dir *dir, const char *fmt, ...);
#else /* CONFIG_DEBUG_FS */
@@ -39,6 +41,11 @@ static inline void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir)
{
}
+static inline __ostream_printf
+void ref_tracker_dir_symlink(struct ref_tracker_dir *dir, const char *fmt, ...)
+{
+}
+
#endif /* CONFIG_DEBUG_FS */
static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir,
@@ -56,6 +63,7 @@ static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir,
dir->class = class;
#ifdef CONFIG_DEBUG_FS
dir->dentry = NULL;
+ dir->symlink = NULL;
#endif
strscpy(dir->name, name, sizeof(dir->name));
ref_tracker_dir_debugfs(dir);
@@ -91,6 +99,11 @@ static inline void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir)
{
}
+static inline __ostream_printf
+void ref_tracker_dir_symlink(struct ref_tracker_dir *dir, const char *fmt, ...)
+{
+}
+
static inline void ref_tracker_dir_exit(struct ref_tracker_dir *dir)
{
}
diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c
index 1df12625d80cc7cff65d9f6be89e1dd5c5ffb7f6..5e84e5fd78e147a036d4adb511e657da07866a55 100644
--- a/lib/ref_tracker.c
+++ b/lib/ref_tracker.c
@@ -390,8 +390,36 @@ void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir)
}
EXPORT_SYMBOL(ref_tracker_dir_debugfs);
+void __ostream_printf ref_tracker_dir_symlink(struct ref_tracker_dir *dir, const char *fmt, ...)
+{
+ char name[NAME_MAX + 1];
+ va_list args;
+ int ret;
+
+ /* Already created, or dentry doesn't exist? Do nothing */
+ if (!IS_ERR_OR_NULL(dir->symlink) || IS_ERR_OR_NULL(dir->dentry))
+ return;
+
+ va_start(args, fmt);
+ ret = vsnprintf(name, sizeof(name), fmt, args);
+ va_end(args);
+ name[sizeof(name) - 1] = '\0';
+
+ if (ret < sizeof(name))
+ dir->symlink = debugfs_create_symlink(name, ref_tracker_debug_dir,
+ dir->dentry->d_name.name);
+ else
+ dir->symlink = ERR_PTR(-ENAMETOOLONG);
+
+ if (IS_ERR(dir->symlink))
+ pr_warn("ref_tracker: unable to create debugfs symlink for %s: %pe\n",
+ name, dir->symlink);
+}
+EXPORT_SYMBOL(ref_tracker_dir_symlink);
+
static void ref_tracker_debugfs_remove(struct ref_tracker_dir *dir)
{
+ debugfs_remove(dir->symlink);
debugfs_remove(dir->dentry);
}
--
2.49.0
Return-Path: <linux-kernel+bounces-665641-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 5E5BC41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:38:06 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 5D5191BC5ECA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:37:52 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 6A88928C846;
Wed, 28 May 2025 14:35:10 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KsmplJWI"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 682CE28C5C1;
Wed, 28 May 2025 14:35:09 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442909; cv=none; b=F075R7ScQpT/mWqglNjqPi0P5MVI/XvNbaARjbk0Vy7EmjvGEhWqlIosu08bhalwTLG1FdppDAHFwyertEmkQ9Qlz6PdnmuV4gi79Z/bNKXLQlTxFI6xUWQ2DZszTlFRlZqG0lxmyPgx7aGxgSXS/T/kpCgN02xKQeeaBy+tnlc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442909; c=relaxed/simple;
bh=AKX4FDPj3rW/ap6FeR0RTU27EfheF4Zl72HxiGiuS/M=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:
In-Reply-To:To:Cc; b=BJliUuriAz0CXKCPLfeJZoDHaDlvYx7anaM2Hr11UDzgY+3z3HxTac7bsfbwJRfrNbL+FQaP8eQ4Z/B46cDwMw6qShx7aIXamf/66k59N0zIdQprFdQxlOOYnAysM8GSOrK8lMIuBtMLyg9dJ2T1BY/U8YGQCjpJ3TkkIRrqOYc=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KsmplJWI; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 14400C4CEEE;
Wed, 28 May 2025 14:35:07 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748442908;
bh=AKX4FDPj3rW/ap6FeR0RTU27EfheF4Zl72HxiGiuS/M=;
h=From:Date:Subject:References:In-Reply-To:To:Cc:From;
b=KsmplJWIe6eBjKs2ARkYqjXvZwSJSqvbEtq/5plylP8xAw+qAbbZcbLPl5JOnplgC
Ko9Aq0v0JiWMtRyuAXdRautc+ae4QJ11jFResDh5FxURw7NMFc/tHEyetpPy7C8BeL
itcRbCQMILfrlSVD+k5SpuCeRrGEFoxf+xL/p5GmfIfzx22hMaQGxIWFNhoLA/GDBL
UwGXKfmeYTGqp6MG2l8cz/g1MG2HUAXNTjNXwDPZ+ktH6YuYEYdt8L5UJ3OwiL4F3k
yHUqYP2/eY2SSWXoxwp4kR4WflKuO1Pi+S38f8F9SnROB2E9ZjRc5lBMGrgUl79PU/
ZVzyaOEXcerlA==
From: Jeff Layton <jlayton@xxxxxxxxxx>
Date: Wed, 28 May 2025 10:34:42 -0400
Subject: [PATCH v11 10/10] ref_tracker: eliminate the ref_tracker_dir name
field
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20250528-reftrack-dbgfs-v11-10-94ae0b165841@xxxxxxxxxx>
References: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
In-Reply-To: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
To: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Simon Horman <horms@xxxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>, Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>
Cc: Kuniyuki Iwashima <kuniyu@xxxxxxxxxx>, Qasim Ijaz <qasdev00@xxxxxxxxx>,
Nathan Chancellor <nathan@xxxxxxxxxx>, Andrew Lunn <andrew@xxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
Jeff Layton <jlayton@xxxxxxxxxx>
X-Mailer: b4 0.14.2
X-Developer-Signature: v=1; a=openpgp-sha256; l=7441; i=jlayton@xxxxxxxxxx;
h=from:subject:message-id; bh=AKX4FDPj3rW/ap6FeR0RTU27EfheF4Zl72HxiGiuS/M=;
b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoNx8GUbNe0u/9+9+eE7tgiRVcVreJlMB6qUWTK
YYte8dlDn2JAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaDcfBgAKCRAADmhBGVaC
FZwJD/4wTMXd3CKNRCdy4SCb43tF0jNLN6JTuCLLf5Bc9AMN+mmv7hKG50iBaC7ntaOM2LNfCJo
9p2qOlsHHA/E0I+cBlmh9TrY+novMQNP5P4pCUTYzUedZQRW8/mZXrNkIIllcXH6luuKvVDu/YW
SedDu47Vd7lWfER699RoPt02Zh6NKSA3MFGKOkxJw2UYIx6yN7s/aoCgwtUdjwWXOBSpbsXBs2k
dV8lU7N/aJu5oleDQ8eU3BBlJDfyoiDjcLvJxcPJeHVieoyMjlDm8ZAkofJAKfWR5+/QvdW7BJq
NmPXu9y0NPfCHlKde5I5LIknE8Vs3CRXAqgRbUfHVEPWJnRvc3CzBAjxtfJJB9Su38S7YyXz9V0
yGg0NtpVsBAqFyqDbG/2cLFiy5UxsMA6xBNllEVMJr0va274Mr3D9MzZ36ltVh6UJqidzN24WYN
iVE4R34xDvqZbQa7wyhIhLfjAn6/JxZZbllWuyJljw9o1CJeZ5y3veWem0/PxjXth+gTx/Nlgot
eZXxptUbrPEec4ZMb0Mu06NHacjxqeSsn6sEncdujnWsKj368Q81EDilGlVUy3Y7YUpawHrrFiL
CADngVBvEZO0k/8jaFXP2FBOZX8K8yZVU8RHlzS7yLhuBKCqLqDYdv9tbpUNA9JlrCY+zty6DWm
48eNtT2ri4usDWA==
X-Developer-Key: i=jlayton@xxxxxxxxxx; a=openpgp;
fpr=4BC0D7B24471B2A184EAF5D3000E684119568215
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Now that we have dentries and the ability to create meaningful symlinks
to them, don't keep a name string in each tracker. Switch the output
format to print "class@address", and drop the name field.
Also, add a kerneldoc header for ref_tracker_dir_init().
Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
---
drivers/gpu/drm/display/drm_dp_tunnel.c | 2 +-
drivers/gpu/drm/i915/intel_runtime_pm.c | 2 +-
drivers/gpu/drm/i915/intel_wakeref.c | 2 +-
include/linux/ref_tracker.h | 20 ++++++++++++++------
lib/ref_tracker.c | 6 +++---
lib/test_ref_tracker.c | 2 +-
net/core/dev.c | 2 +-
net/core/net_namespace.c | 4 ++--
8 files changed, 24 insertions(+), 16 deletions(-)
diff --git a/drivers/gpu/drm/display/drm_dp_tunnel.c b/drivers/gpu/drm/display/drm_dp_tunnel.c
index b9c12b8bf2a3e400b6d8e9d184145834c603b9e1..1205a4432eb4142344fb6eed1cb5ba5b21ec6953 100644
--- a/drivers/gpu/drm/display/drm_dp_tunnel.c
+++ b/drivers/gpu/drm/display/drm_dp_tunnel.c
@@ -1920,7 +1920,7 @@ drm_dp_tunnel_mgr_create(struct drm_device *dev, int max_group_count)
}
#ifdef CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG
- ref_tracker_dir_init(&mgr->ref_tracker, 16, "drm_dptun", "dptun");
+ ref_tracker_dir_init(&mgr->ref_tracker, 16, "drm_dptun");
#endif
for (i = 0; i < max_group_count; i++) {
diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c
index 90d90145a1890bf788e789858ddad3b3d8e3b978..7ce3e6de0c1970697e0e58198e1e3852975ee7bc 100644
--- a/drivers/gpu/drm/i915/intel_runtime_pm.c
+++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
@@ -61,7 +61,7 @@ static void init_intel_runtime_pm_wakeref(struct intel_runtime_pm *rpm)
{
if (!rpm->debug.class)
ref_tracker_dir_init(&rpm->debug, INTEL_REFTRACK_DEAD_COUNT,
- "intel_runtime_pm", dev_name(rpm->kdev));
+ "intel_runtime_pm");
}
static intel_wakeref_t
diff --git a/drivers/gpu/drm/i915/intel_wakeref.c b/drivers/gpu/drm/i915/intel_wakeref.c
index 21dcee7c9a659ac1fb0aa19f3018647be3bda754..080535fc71d8c25dcc848eefd063361bbe21b305 100644
--- a/drivers/gpu/drm/i915/intel_wakeref.c
+++ b/drivers/gpu/drm/i915/intel_wakeref.c
@@ -115,7 +115,7 @@ void __intel_wakeref_init(struct intel_wakeref *wf,
#if IS_ENABLED(CONFIG_DRM_I915_DEBUG_WAKEREF)
if (!wf->debug.class)
- ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, "intel_wakeref", name);
+ ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, "intel_wakeref");
#endif
}
diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h
index ddc5a7b2bd84692bbc1e1ae67674ec2c6857e1ec..5878e7fce712930700054033ff5f21547e75224f 100644
--- a/include/linux/ref_tracker.h
+++ b/include/linux/ref_tracker.h
@@ -24,7 +24,6 @@ struct ref_tracker_dir {
struct dentry *dentry;
struct dentry *symlink;
#endif
- char name[32];
#endif
};
@@ -48,10 +47,21 @@ void ref_tracker_dir_symlink(struct ref_tracker_dir *dir, const char *fmt, ...)
#endif /* CONFIG_DEBUG_FS */
+/**
+ * ref_tracker_dir_init - initialize a ref_tracker dir
+ * @dir: ref_tracker_dir to be initialized
+ * @quarantine_count: max number of entries to be tracked
+ * @class: pointer to static string that describes object type
+ *
+ * Initialize a ref_tracker_dir. If debugfs is configured, then a file
+ * will also be created for it under the top-level ref_tracker debugfs
+ * directory.
+ *
+ * Note that @class must point to a static string.
+ */
static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir,
unsigned int quarantine_count,
- const char *class,
- const char *name)
+ const char *class)
{
INIT_LIST_HEAD(&dir->list);
INIT_LIST_HEAD(&dir->quarantine);
@@ -65,7 +75,6 @@ static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir,
dir->dentry = NULL;
dir->symlink = NULL;
#endif
- strscpy(dir->name, name, sizeof(dir->name));
ref_tracker_dir_debugfs(dir);
stack_depot_init();
}
@@ -90,8 +99,7 @@ int ref_tracker_free(struct ref_tracker_dir *dir,
static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir,
unsigned int quarantine_count,
- const char *class,
- const char *name)
+ const char *class)
{
}
diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c
index 5e84e5fd78e147a036d4adb511e657da07866a55..5fb384dd919e1f1ad632eaf595b954118bcfddab 100644
--- a/lib/ref_tracker.c
+++ b/lib/ref_tracker.c
@@ -123,7 +123,7 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *dir,
stats = ref_tracker_get_stats(dir, display_limit);
if (IS_ERR(stats)) {
pr_ostream(s, "%s%s@%p: couldn't get stats, error %pe\n",
- s->prefix, dir->name, dir, stats);
+ s->prefix, dir->class, dir, stats);
return;
}
@@ -134,14 +134,14 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *dir,
if (sbuf && !stack_depot_snprint(stack, sbuf, STACK_BUF_SIZE, 4))
sbuf[0] = 0;
pr_ostream(s, "%s%s@%p has %d/%d users at\n%s\n", s->prefix,
- dir->name, dir, stats->stacks[i].count,
+ dir->class, dir, stats->stacks[i].count,
stats->total, sbuf);
skipped -= stats->stacks[i].count;
}
if (skipped)
pr_ostream(s, "%s%s@%p skipped reports about %d/%d users.\n",
- s->prefix, dir->name, dir, skipped, stats->total);
+ s->prefix, dir->class, dir, skipped, stats->total);
kfree(sbuf);
diff --git a/lib/test_ref_tracker.c b/lib/test_ref_tracker.c
index d263502a4c1db248f64a66a468e96c8e4cffab25..b983ceb12afcb84ad60360a1e6fec0072e78ef79 100644
--- a/lib/test_ref_tracker.c
+++ b/lib/test_ref_tracker.c
@@ -64,7 +64,7 @@ static int __init test_ref_tracker_init(void)
{
int i;
- ref_tracker_dir_init(&ref_dir, 100, "selftest", "selftest");
+ ref_tracker_dir_init(&ref_dir, 100, "selftest");
timer_setup(&test_ref_tracker_timer, test_ref_tracker_timer_func, 0);
mod_timer(&test_ref_tracker_timer, jiffies + 1);
diff --git a/net/core/dev.c b/net/core/dev.c
index bac9d29486556023cd99f5101b96b052acb9ba70..a062912525ee573504a9cc252f71aed22693d24f 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -11713,7 +11713,7 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name,
dev->priv_len = sizeof_priv;
- ref_tracker_dir_init(&dev->refcnt_tracker, 128, "netdev", name);
+ ref_tracker_dir_init(&dev->refcnt_tracker, 128, "netdev");
#ifdef CONFIG_PCPU_DEV_REFCNT
dev->pcpu_refcnt = alloc_percpu(int);
if (!dev->pcpu_refcnt)
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
index b2fd9c5635ecf8fccd48f1d5b967a5c6c41cfec4..8d21c8f4eb83597ddee5fd345b5e38b308ce0335 100644
--- a/net/core/net_namespace.c
+++ b/net/core/net_namespace.c
@@ -403,8 +403,8 @@ static __net_init void preinit_net(struct net *net, struct user_namespace *user_
{
refcount_set(&net->passive, 1);
refcount_set(&net->ns.count, 1);
- ref_tracker_dir_init(&net->refcnt_tracker, 128, "net_refcnt", "net_refcnt");
- ref_tracker_dir_init(&net->notrefcnt_tracker, 128, "net_notrefcnt", "net_notrefcnt");
+ ref_tracker_dir_init(&net->refcnt_tracker, 128, "net_refcnt");
+ ref_tracker_dir_init(&net->notrefcnt_tracker, 128, "net_notrefcnt");
get_random_bytes(&net->hash_mix, sizeof(u32));
net->dev_base_seq = 1;
--
2.49.0
Return-Path: <linux-kernel+bounces-665640-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D4ABC41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:38:47 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 0B9E63BBF55
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:36:57 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id BE7DF28C2C6;
Wed, 28 May 2025 14:35:07 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="rVjGgmEE"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id EF976288CBF;
Wed, 28 May 2025 14:35:06 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442907; cv=none; b=oqDjLZxhIODxHEorZ0cv4sSb41BRtltKuwmF60smCuxWsnLRyi0qnb476+XqvfJJFKhehKsp0ztFv7KVFc68rLW8FW4fsO/wcfqAUOPGSGZDQxyrbFDSl9QmCzDHUAguuLtHdX1eUk6ywoEC83dPSqnlYPjQ8QOBHLG3D3fV7o0=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442907; c=relaxed/simple;
bh=C3NjXad8atSO1FZ7CKOXtU5VIRqVojZ9jejAtjAiqWM=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:
In-Reply-To:To:Cc; b=K9Af5XnA9hTHPSJoYIl4FOU6XDEXWxXGtiOaMy9hCGu0UtBPPJaavYwd5EZ21YOyy7mB28h9KVh+B1ARnH4Dmv2Zx1z8awoYuv1DrcPqIUFmtOonk5nQU3ac7cKgpNTGEIzmoypXZOaKpvuv770rVM/DdU0j9TsIL2dcjAuKb40=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=rVjGgmEE; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0BE21C4CEF1;
Wed, 28 May 2025 14:35:04 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748442906;
bh=C3NjXad8atSO1FZ7CKOXtU5VIRqVojZ9jejAtjAiqWM=;
h=From:Date:Subject:References:In-Reply-To:To:Cc:From;
b=rVjGgmEEhYyWizmS5qe9pgAkmMhCy5Zj85Jv1kZ7Y2O8Ub7mlkHLihVkcMAk3H3ZN
E7iRTygacktYSR7oOXiWRsD4zfrryIKN6MiIByx2cAu0X0ow+A4BOIK/GAo71/xF9U
X0OyB/gT4HHIT4NlCAS4XfvCMoDEPPA/8sG+R8eCIs8o12IXwBeruZ6koDYesPjKar
GanDmCR5KWzx8+sbyDd4E+RoofJiXj/MsPXJt6yO5IfAiFcv2mYlmADVxxkrg+cOGw
ZuH41NBRrISpjmG1UOZLM69X4riZAMF9v1FcxoWKrsjFaiKUW4GbyMBfWRkZ6OfIkA
D7xaTgAaGNONA==
From: Jeff Layton <jlayton@xxxxxxxxxx>
Date: Wed, 28 May 2025 10:34:41 -0400
Subject: [PATCH v11 09/10] net: add symlinks to ref_tracker_dir for netns
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20250528-reftrack-dbgfs-v11-9-94ae0b165841@xxxxxxxxxx>
References: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
In-Reply-To: <20250528-reftrack-dbgfs-v11-0-94ae0b165841@xxxxxxxxxx>
To: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Simon Horman <horms@xxxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>, Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>,
Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>,
Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>,
Tvrtko Ursulin <tursulin@xxxxxxxxxxx>
Cc: Kuniyuki Iwashima <kuniyu@xxxxxxxxxx>, Qasim Ijaz <qasdev00@xxxxxxxxx>,
Nathan Chancellor <nathan@xxxxxxxxxx>, Andrew Lunn <andrew@xxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, intel-gfx@xxxxxxxxxxxxxxxxxxxxx,
Jeff Layton <jlayton@xxxxxxxxxx>
X-Mailer: b4 0.14.2
X-Developer-Signature: v=1; a=openpgp-sha256; l=1850; i=jlayton@xxxxxxxxxx;
h=from:subject:message-id; bh=C3NjXad8atSO1FZ7CKOXtU5VIRqVojZ9jejAtjAiqWM=;
b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoNx8G2qhxKRFMIuvaikAolyZRaHqqMfY9w6wlB
B8ZCTg6SAqJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaDcfBgAKCRAADmhBGVaC
FX5mD/4nt7J4dnvaIJZmR0mApa7CMh0kmPKOmUvWbpC4J99+rVd4RfMPu6Hwcj8EaNHJNOyw/+h
sasuPE/veTJqNVEI4OOcaNY99cNzGgv22I/eGcGZ4NLvKp3mtxed01UIeZAW6SlYpYVHrBc3cxV
UdGhqdnLJx+91ZubJppxk+9lUHIw4s8xgdSPiz+D/EG66drv/cYSsNETN1Wtjnp1qSMu82c9T4o
HKs0MLdC3XLCARnfPb0Tb27kbfZmziu50XXL/szr7zIEyQvAlRnWg6pitWPGj19nOnPhMKYrrgH
ymKlmIOce9dEypxjDuoIj2WHuSqNuAWNj8DNinabRBoN3+/ccM6WXPya3+Go9mOTuQ/9+VDcfX6
ev+KRvhuwjK1bz+3NCwIi1PWmdmIQFZsppnGicY/PhokPcGBEfXl3zG114KX3y3gDBwyKQbs9Fz
KOM1hEEy2P9tGBDRVhBZlfelyhJ+V6UIC+pQYeTa0wr1nJNaQRuyEb3PRAO/Jzenz49IjbGui1D
ue7VyzRbPo6IhyX389oz6CjJNxBzxPrJLFN/RZJsRHjTwORAmkLQZaIuGLd+JM6a5s96nSP8Qhv
UgStVmt3LYhMSTBdzfg9EqLvvcNMqqbrYDFIUkAtpOXONInWIOi6kyQYexpxxUHP6DF+eb/Udxo
4+/1LJXwJxD4rDw==
X-Developer-Key: i=jlayton@xxxxxxxxxx; a=openpgp;
fpr=4BC0D7B24471B2A184EAF5D3000E684119568215
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
After assigning the inode number to the namespace, use it to create a
unique name for each netns refcount tracker with the ns.inum and
net_cookie values in it, and register a symlink to the debugfs file for
it.
init_net is registered before the ref_tracker dir is created, so add a
late_initcall() to register its files and symlinks.
Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
---
net/core/net_namespace.c | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
index 8708eb975295ffb78de35fcf4abef7cc281f5a51..b2fd9c5635ecf8fccd48f1d5b967a5c6c41cfec4 100644
--- a/net/core/net_namespace.c
+++ b/net/core/net_namespace.c
@@ -791,12 +791,40 @@ struct net *get_net_ns_by_pid(pid_t pid)
}
EXPORT_SYMBOL_GPL(get_net_ns_by_pid);
+#ifdef CONFIG_NET_NS_REFCNT_TRACKER
+static void net_ns_net_debugfs(struct net *net)
+{
+ ref_tracker_dir_symlink(&net->refcnt_tracker, "netns-%llx-%u-refcnt",
+ net->net_cookie, net->ns.inum);
+ ref_tracker_dir_symlink(&net->notrefcnt_tracker, "netns-%llx-%u-notrefcnt",
+ net->net_cookie, net->ns.inum);
+}
+
+static int __init init_net_debugfs(void)
+{
+ ref_tracker_dir_debugfs(&init_net.refcnt_tracker);
+ ref_tracker_dir_debugfs(&init_net.notrefcnt_tracker);
+ net_ns_net_debugfs(&init_net);
+ return 0;
+}
+late_initcall(init_net_debugfs);
+#else
+static void net_ns_net_debugfs(struct net *net)
+{
+}
+#endif
+
static __net_init int net_ns_net_init(struct net *net)
{
+ int ret;
+
#ifdef CONFIG_NET_NS
net->ns.ops = &netns_operations;
#endif
- return ns_alloc_inum(&net->ns);
+ ret = ns_alloc_inum(&net->ns);
+ if (!ret)
+ net_ns_net_debugfs(net);
+ return ret;
}
static __net_exit void net_ns_net_exit(struct net *net)
--
2.49.0
Return-Path: <linux-kernel+bounces-665642-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id CE2F741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:39:00 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 2BD17163900
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:37:51 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id EEC4B288C96;
Wed, 28 May 2025 14:36:16 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmo-cybersecurity.com header.i=@gmo-cybersecurity.com header.b="Iyn9wVTe"
Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 71E4119B3CB
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:36:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.51
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748442975; cv=none; b=tezY5ShMb4D+yupKQ1439i816dRCyEg1OZS5wDYk40ML5kT0dz9FxYy/mjlEjUbWX6y81u6ulsOs1sh/XakA3KHjCzMVutoEKdZ3cJe+qhfhdBWzw6sWVRJ0uVLFUxYeF7EiuH2i0tltgj3NQsahlUuKtWbU8aYGUoAAZy7e3gI=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748442975; c=relaxed/simple;
bh=kZdtPLtiwt1WDJ8IbtVBanoaZhX6emGAKLby7L4oq3Y=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=R0+BW9sEoTk+j/pcqGP4wigUX0Sxo8mbz0RHUNG3wLk77u7SV5x2gSpORPDyX7HOZ1qDZiIZgEOClavr3xka0iVCN0nQ34/iCyrQwjZNdRc8AVJhZt5Q4S79Pj8j8Yvs31Q0eA54K5xPnxMAIhW1oEeozS8kC22dpkeNhxr5b4k=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmo-cybersecurity.com; spf=pass smtp.mailfrom=gmo-cybersecurity.com; dkim=pass (2048-bit key) header.d=gmo-cybersecurity.com header.i=@gmo-cybersecurity.com header.b=Iyn9wVTe; arc=none smtp.client-ip=209.85.221.51
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmo-cybersecurity.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmo-cybersecurity.com
Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-3a4bdee0bf7so3084384f8f.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 07:36:13 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmo-cybersecurity.com; s=google; t=1748442972; x=1749047772; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=i3u1tiLuHtSwquV3XWda37V0Wy2peP3hAf6J/XwOj40=;
b=Iyn9wVTe/uux7zmHD7vNNJmrk5KOZM2Z98BfCWPUCWbI1+T1mAsGArG0KL3WWtayQC
SxiPAh2Pz/4+OsG5Eees+zu71BrWCsRyV21YQZfjwMUzTin/Zt7ixd50mbAHzanxHxG+
D5E8olt00yq+6v+55Jv2Lfaea3CNujEXVZixyp95+2Kz/u3k8Nvs0x98A5MvF8Wl9Dgb
oOenxmwxaSQmLnt+TdSST2/3AyifKxwor8cPGUEW23LhYLlk0yf1o35TyAW5pS7EvgJK
vSWIgQxeN0x4xGiBPCgFreu+GOHxm1mJ09uVvYufa83sCF1BcmZuI6PgBuqEwGbqpWqb
QC5Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748442972; x=1749047772;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=i3u1tiLuHtSwquV3XWda37V0Wy2peP3hAf6J/XwOj40=;
b=acBYhpBdzCpYIE+ptVA5bs+XB6fNmNOouEbAhOCOtt3NrfTeFPWWmKyW+duMHza17W
ZCV5lkebq2FzCq9w4pZgvK6aZkS5SJSdV5NvRkrb5T1PWhlCm7wfK9fn0Gbc1Ta9l+yi
R5/P1pdrXhzlF9EcJvsWRGVKOQmu593MrgXTwfNxMFQJUO4Uj2Wn8qi42DZzqh1UNyWG
+f/NDfyI+4cySu7LIoIFFCKl9h6YtdWlbNRWNAKWHt744Hk+QtSxm1pce7zmfbG3loir
3EYR/E3NZaigmvNvxsCN+WhoFQPjnx3qbd/UQY98Qa0jk3kFDIIYhMvDxXP+6MpvG9wp
i8QQ==
X-Forwarded-Encrypted: i=1; AJvYcCUseyZF21YgM+8N9m7ObSTeaZAATcMdBxzYzD+TKAN6nEuKkFG4rG+yOCq+jrwFwcoyebPpyrbl3tRv+ZA=@vger.kernel.org
X-Gm-Message-State: AOJu0YzFiVrWsMvTcQL3ifa7UNP9Sd8HELRCfZUcOpWCmVPr7NU4o5Cc
vaYNz6qtNi6qewQfpXCY6R+vtO+g5b5046QPX1cMHQiAEP6NT6vsZBbAxKqPJ7w542IlV/kq9GR
TVV49Qoc/80E9bKxRlA6YwXcKO76oI0+vtgr3Zw41Sg==
X-Gm-Gg: ASbGncupSqjVggxnm4e3X3Wncy6e3Ev1OfBNIJtFigH/Y4/0sKToNvx3IpjX+JdXS11
vhIjgI6sMTf+RGadOK7MkMQEhW0791fEZDFD9s++8wl0v6TeLhZ6UxXeaNRo7sLCySk4sAiQMP4
a4EuI9N08jQU7CS7LnA47KcE6vHGrlkIKezmQ=
X-Google-Smtp-Source: AGHT+IH7yF1AuOcjbaAOHuQ3ZEWVAuHmuJDzgC0s0JkYyOYDFPU6CteR3EjlyEPVIQtcXYyc1ihSJZMaHl1DL1yvv50=
X-Received: by 2002:a5d:5648:0:b0:3a4:ea40:4d46 with SMTP id
ffacd0b85a97d-3a4ea404f84mr1792896f8f.28.1748442971361; Wed, 28 May 2025
07:36:11 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <CAA3_Gnogt7GR0gZVZwQ4vXXav6TpXMK6t=QTLsqKOaX3Bo_tNA@xxxxxxxxxxxxxx>
<CANn89iLVq=3d7Ra7gKmTpLcMzuWv+KamYs=KjUHH2z3cPpDBDA@xxxxxxxxxxxxxx>
In-Reply-To: <CANn89iLVq=3d7Ra7gKmTpLcMzuWv+KamYs=KjUHH2z3cPpDBDA@xxxxxxxxxxxxxx>
From: =?UTF-8?B?5oi455Sw5pmD5aSq?= <kota.toda@xxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 23:35:59 +0900
X-Gm-Features: AX0GCFt8IHdrgw66Ok-mDEgqM1lC1lAB5ev1oiemIeLCWaTRnSWwrFQQ1YK1Koc
Message-ID: <CAA3_GnrVyeXtLjhZ_d9=0x58YmK+a9yADfp+LRCBHQo_TEDyvw@xxxxxxxxxxxxxx>
Subject: Re: [PATCH net] bonding: Fix header_ops type confusion
To: Eric Dumazet <edumazet@xxxxxxxxxx>
Cc: netdev@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, pabeni@xxxxxxxxxx,
=?UTF-8?B?5bCP5rGg5oKg55Sf?= <yuki.koike@xxxxxxxxxxxxxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Thank you for your review.
2025=E5=B9=B45=E6=9C=8826=E6=97=A5(=E6=9C=88) 17:23 Eric Dumazet <edumazet@=
google.com>:
>
> On Sun, May 25, 2025 at 10:08=E2=80=AFPM =E6=88=B8=E7=94=B0=E6=99=83=E5=
=A4=AA <kota.toda@xxxxxxxxxxxxxxxxxxxxx> wrote:
> >
> > In bond_setup_by_slave(), the slave=E2=80=99s header_ops are unconditio=
nally
> > copied into the bonding device. As a result, the bonding device may inv=
oke
> > the slave-specific header operations on itself, causing
> > netdev_priv(bond_dev) (a struct bonding) to be incorrectly interpreted
> > as the slave's private-data type.
> >
> > This type-confusion bug can lead to out-of-bounds writes into the skb,
> > resulting in memory corruption.
> >
> > This patch adds two members to struct bonding, bond_header_ops and
> > header_slave_dev, to avoid type-confusion while keeping track of the
> > slave's header_ops.
> >
> > Fixes: 1284cd3a2b740 (bonding: two small fixes for IPoIB support)
> > Signed-off-by: Kota Toda <kota.toda@xxxxxxxxxxxxxxxxxxxxx>
> > Signed-off-by: Yuki Koike <yuki.koike@xxxxxxxxxxxxxxxxxxxxx>
> > Co-Developed-by: Yuki Koike <yuki.koike@xxxxxxxxxxxxxxxxxxxxx>
> > Reviewed-by: Paolo Abeni <pabeni@xxxxxxxxxx>
> > Reported-by: Kota Toda <kota.toda@xxxxxxxxxxxxxxxxxxxxx>
> > ---
> > drivers/net/bonding/bond_main.c | 61
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
> > include/net/bonding.h | 5 +++++
> > 2 files changed, 65 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond=
_main.c
> > index 8ea183da8d53..690f3e0971d0 100644
> > --- a/drivers/net/bonding/bond_main.c
> > +++ b/drivers/net/bonding/bond_main.c
> > @@ -1619,14 +1619,65 @@ static void bond_compute_features(struct bondin=
g *bond)
> > netdev_change_features(bond_dev);
> > }
> >
> > +static int bond_hard_header(struct sk_buff *skb, struct net_device *de=
v,
> > + unsigned short type, const void *daddr,
> > + const void *saddr, unsigned int len)
> > +{
> > + struct bonding *bond =3D netdev_priv(dev);
> > + struct net_device *slave_dev;
> > +
> > + slave_dev =3D bond->header_slave_dev;
> > +
> > + return dev_hard_header(skb, slave_dev, type, daddr, saddr, len);
> > +}
> > +
> > +static void bond_header_cache_update(struct hh_cache *hh, const
> > struct net_device *dev,
> > + const unsigned char *haddr)
> > +{
> > + const struct bonding *bond =3D netdev_priv(dev);
> > + struct net_device *slave_dev;
> > +
> > + slave_dev =3D bond->header_slave_dev;
>
> I do not see any barrier ?
>
> > +
> > + if (!slave_dev->header_ops || !slave_dev->header_ops->cache_update=
)
> > + return;
> > +
> > + slave_dev->header_ops->cache_update(hh, slave_dev, haddr);
> > +}
> > +
> > static void bond_setup_by_slave(struct net_device *bond_dev,
> > struct net_device *slave_dev)
> > {
> > + struct bonding *bond =3D netdev_priv(bond_dev);
> > bool was_up =3D !!(bond_dev->flags & IFF_UP);
> >
> > dev_close(bond_dev);
> >
> > - bond_dev->header_ops =3D slave_dev->header_ops;
> > + /* Some functions are given dev as an argument
> > + * while others not. When dev is not given, we cannot
> > + * find out what is the slave device through struct bonding
> > + * (the private data of bond_dev). Therefore, we need a raw
> > + * header_ops variable instead of its pointer to const header_ops
> > + * and assign slave's functions directly.
> > + * For the other case, we set the wrapper functions that pass
> > + * slave_dev to the wrapped functions.
> > + */
> > + bond->bond_header_ops.create =3D bond_hard_header;
> > + bond->bond_header_ops.cache_update =3D bond_header_cache_update;
> > + if (slave_dev->header_ops) {
> > + bond->bond_header_ops.parse =3D slave_dev->header_ops->parse;
> > + bond->bond_header_ops.cache =3D slave_dev->header_ops->cache;
> > + bond->bond_header_ops.validate =3D slave_dev->header_ops->vali=
date;
> > + bond->bond_header_ops.parse_protocol =3D
> > slave_dev->header_ops->parse_protocol;
>
> All these updates probably need WRITE_ONCE(), and corresponding
> READ_ONCE() on reader sides, at a very minimum ...
>
> RCU would even be better later.
>
I believe that locking is not necessary in this patch. The update of
`header_ops` only happens when a slave is newly enslaved to a bond.
Under such circumstances, members of `header_ops` are not called in
parallel with updating. Therefore, there is no possibility of race
conditions occurring.
>
> > + } else {
> > + bond->bond_header_ops.parse =3D NULL;
> > + bond->bond_header_ops.cache =3D NULL;
> > + bond->bond_header_ops.validate =3D NULL;
> > + bond->bond_header_ops.parse_protocol =3D NULL;
> > + }
> > +
> > + bond->header_slave_dev =3D slave_dev;
> > + bond_dev->header_ops =3D &bond->bond_header_ops;
> >
> > bond_dev->type =3D slave_dev->type;
> > bond_dev->hard_header_len =3D slave_dev->hard_header_len;
> > @@ -2676,6 +2727,14 @@ static int bond_release_and_destroy(struct
> > net_device *bond_dev,
> > struct bonding *bond =3D netdev_priv(bond_dev);
> > int ret;
> >
> > + /* If slave_dev is the earliest registered one, we must clear
> > + * the variables related to header_ops to avoid dangling pointer.
> > + */
> > + if (bond->header_slave_dev =3D=3D slave_dev) {
> > + bond->header_slave_dev =3D NULL;
> > + bond_dev->header_ops =3D NULL;
> > + }
> > +
> > ret =3D __bond_release_one(bond_dev, slave_dev, false, true);
> > if (ret =3D=3D 0 && !bond_has_slaves(bond) &&
> > bond_dev->reg_state !=3D NETREG_UNREGISTERING) {
> > diff --git a/include/net/bonding.h b/include/net/bonding.h
> > index 95f67b308c19..cf8206187ce9 100644
> > --- a/include/net/bonding.h
> > +++ b/include/net/bonding.h
> > @@ -215,6 +215,11 @@ struct bond_ipsec {
> > */
> > struct bonding {
> > struct net_device *dev; /* first - useful for panic debug */
> > + struct net_device *header_slave_dev; /* slave net_device for
> > header_ops */
> > + /* maintained as a non-const variable
> > + * because bond's header_ops should change depending on slaves.
> > + */
> > + struct header_ops bond_header_ops;
> > struct slave __rcu *curr_active_slave;
> > struct slave __rcu *current_arp_slave;
> > struct slave __rcu *primary_slave;
Return-Path: <linux-kernel+bounces-665643-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 648AC41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:39:35 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 1BFBD16A144
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:38:11 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id B1456288C9B;
Wed, 28 May 2025 14:37:52 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="erkqbxt8"
Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id CC65F288504
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:37:49 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443071; cv=none; b=nDIvApLWkJ25rae+/5D0Z59H2wfjteoNHGu41VvVSGP1TZM23effoS8bkww9xf/8YShNyJd8QUm0oiToNjcdWO7uswUyG972522G2y3lrxCg7qAu81AHZGwCt0ZHO7W5MaMdnfno9me/rKu4jOBCbf1lp/iFa8VhzdIu5WZ0Fbg=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443071; c=relaxed/simple;
bh=E/d0r6OOpns+M1s/P1Grzi0S5pY57VyTC8g4426MF4A=;
h=Mime-Version:Content-Type:Date:Message-Id:Cc:Subject:From:To:
References:In-Reply-To; b=E67lV362sX+e+hPNiMog51jNcqiJHOo/4DeoQNdLQvy6Xn7M2MapBv3jtpDUzvjfRxOsQwQGW1Dn++SlV+o1fGyDe8ILRQGmmZJCLtXr/cYEP9Sg/KK+fXFblNmffJ1YOCfVfERso4+Xl/ymM7eSmWG5ev6bBGyV0z1HjEbK+4o=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=erkqbxt8; arc=none smtp.client-ip=209.85.128.52
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org
Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-43d2d952eb1so36614825e9.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 07:37:49 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=linaro.org; s=google; t=1748443068; x=1749047868; darn=vger.kernel.org;
h=in-reply-to:references:to:from:subject:cc:message-id:date
:content-transfer-encoding:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=8e/FVNVV68OMZMjntDEe+D+IU61dqOd3DPdYBN+2WAg=;
b=erkqbxt8Z1K4KelvFp4KBetLfSTi7qibcWWSbW+liggles7H3+h63gj9e1GpVyRDeM
1vIf/sIiVKj5E7gQo4Lvtc6F4a84YfMcW7ln2HwqFrP+cetnIoeEZDbFlVFA7xytmAFk
rwSpK/RWeIkyfj0HDn1NTLSJlEvwN4eyJmKO6jei2b1Cn2dxlpeKXOa0PWtAEgSqp+a8
ba8ngUVlKeG4wvmkozZigPdqn+YP1lLYXMYWAxjTOIvCyEAdxlVRyJf184woEILNa2gV
3bMnxsSkmq/wNunhPVxfyXhEk91yVFGogEiJD4a3u0vwqZQcIVlFF3TbxvAK0YRbifE1
efuQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748443068; x=1749047868;
h=in-reply-to:references:to:from:subject:cc:message-id:date
:content-transfer-encoding:mime-version:x-gm-message-state:from:to
:cc:subject:date:message-id:reply-to;
bh=8e/FVNVV68OMZMjntDEe+D+IU61dqOd3DPdYBN+2WAg=;
b=nir3U53kqYdwaVXfi4PjEbm7XzVzcHXaq0oXlI0J08ulvvnutRTwc4BUFkt0eElMrC
6SHE1wJ50QGcokubYfLSqF20j9WwszgE7C7cX4d7eLs9Nh+2NbbcaMpyXTyY9q0zyQ8Z
n+rj/KchWSQX+XOKvOJm/N+Xjw209lehiQOv1VwYPAPeQDnXqy6JkpmvIrMFq5WN5zzN
n+9wsKO7fAtqjLEIM4Rvro+GWU1NbCeBtc/Z+rmdoSFbo9fy199R5Htl/rQALSsLYwbg
lpVG1yRs0PtjdOyO2Xp7+WOw3Y3bjw4dh1QeFbqZqFzjfq5GQ00pZnQDXYN1D1Xufidd
N7gQ==
X-Forwarded-Encrypted: i=1; AJvYcCXg3Z8+k475TrAqgSqqnfkNfVP8pbT+G7ao/toczDyJN9ZmwfkWk5OqYYYnd7gJSt9dtM4+xKgnQrKy7N4=@vger.kernel.org
X-Gm-Message-State: AOJu0Yx8HUVEiOvhcRaL4PDyRBCUQCKxNZwKOMqZByruu9Fq+OkTPjnP
Bf/WkjYr0JDkyEkyjozN3KhQr2GgNj8oREdZuMs6uoIURqnNjKOisIASWQkWkza5vxE=
X-Gm-Gg: ASbGncuKvNXwig/Srj8lbQInN8W+sKCxx+3A9fcIUl86zHW6VRmfwXXxlJDTY/0j8jF
r1aG2iYv6bw/wo0Jp+/3/5WrAitM75uqmMaZOXvPF56G0L7Ml/UVbit/HxLA11agQtgVHD0bSkc
ZhDr4ZAawizBJ9AHb1gpoRqNYq0GPzVOdJM+zovDEaL/iwaoPj2wzICFMBwoQlzj3LIJVaSaFg/
6JESeIYwPPtUJcZ8ZClN8twEKP0wbZl4f3hxUjjb1PM0fSX/IqrPatUZp6pHPkVhp7f0V8/4sJq
Ol6YDjNzmCYwllACA7Eqr2e3t6sFS/jyN2ilYjco0expalx32CUquP2U
X-Google-Smtp-Source: AGHT+IHIM9BVzOCXjIDgxXeOl1dIOtdnPxWp/iK5O/TdB3YnpE+mVV2tCG/RghqPvH2Xw5hFmwSDyA==
X-Received: by 2002:a05:600c:1d0d:b0:43c:f0ae:da7 with SMTP id 5b1f17b1804b1-44c9141d90emr133062395e9.7.1748443068029;
Wed, 28 May 2025 07:37:48 -0700 (PDT)
Received: from localhost ([2a00:2381:fd67:101:6c39:59e6:b76d:825])
by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-450064a133csm24375355e9.11.2025.05.28.07.37.46
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 07:37:47 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
Mime-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=UTF-8
Date: Wed, 28 May 2025 15:37:46 +0100
Message-Id: <DA7VC87A0OMF.1X5XEWVCHFLE5@xxxxxxxxxx>
Cc: "Srinivas Kandagatla" <srini@xxxxxxxxxx>, "Mark Brown"
<broonie@xxxxxxxxxx>, <linux-sound@xxxxxxxxxxxxxxx>, "Liam Girdwood"
<lgirdwood@xxxxxxxxx>, "Rob Herring" <robh@xxxxxxxxxx>, "Krzysztof
Kozlowski" <krzk+dt@xxxxxxxxxx>, "Conor Dooley" <conor+dt@xxxxxxxxxx>,
"Bjorn Andersson" <andersson@xxxxxxxxxx>, "Dmitry Baryshkov"
<lumag@xxxxxxxxxx>, "Konrad Dybcio" <konradybcio@xxxxxxxxxx>, "Konrad
Dybcio" <konrad.dybcio@xxxxxxxxxxxxxxxx>, "Jaroslav Kysela"
<perex@xxxxxxxx>, "Takashi Iwai" <tiwai@xxxxxxxx>,
<linux-arm-msm@xxxxxxxxxxxxxxx>, <devicetree@xxxxxxxxxxxxxxx>,
<linux-kernel@xxxxxxxxxxxxxxx>, <linux-gpio@xxxxxxxxxxxxxxx>
Subject: Re: [PATCH v3 02/12] dt-bindings: arm: qcom-soc: ignore "wsa" from
being selected as SoC component
From: "Alexey Klimov" <alexey.klimov@xxxxxxxxxx>
To: "Krzysztof Kozlowski" <krzysztof.kozlowski@xxxxxxxxxx>
X-Mailer: aerc 0.20.0
References: <20250522-rb2_audio_v3-v3-0-9eeb08cab9dc@xxxxxxxxxx>
<20250522-rb2_audio_v3-v3-2-9eeb08cab9dc@xxxxxxxxxx>
<20250523-fancy-upbeat-stoat-e9ecbd@kuoka>
In-Reply-To: <20250523-fancy-upbeat-stoat-e9ecbd@kuoka>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Fri May 23, 2025 at 9:12 AM BST, Krzysztof Kozlowski wrote:
> On Thu, May 22, 2025 at 06:40:52PM GMT, Alexey Klimov wrote:
>> The pattern matching incorrectly selects "wsa" because of "sa" substring
>> and evaluates it as a SoC component or block.
>>=20
>> Wsa88xx are family of amplifiers and should not be evaluated here.
>>=20
>> Signed-off-by: Alexey Klimov <alexey.klimov@xxxxxxxxxx>
>> ---
>> Documentation/devicetree/bindings/arm/qcom-soc.yaml | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>=20
>> diff --git a/Documentation/devicetree/bindings/arm/qcom-soc.yaml b/Docum=
entation/devicetree/bindings/arm/qcom-soc.yaml
>> index a77d68dcad4e52e4fee43729ac8dc1caf957262e..99521813a04ca416fe90454a=
811c4a13143efce3 100644
>> --- a/Documentation/devicetree/bindings/arm/qcom-soc.yaml
>> +++ b/Documentation/devicetree/bindings/arm/qcom-soc.yaml
>> @@ -23,7 +23,7 @@ description: |
>> select:
>> properties:
>> compatible:
>> - pattern: "^qcom,.*(apq|ipq|mdm|msm|qcm|qcs|q[dr]u|sa|sar|sc|sd[am=
x]|sm|x1[ep])[0-9]+.*$"
>> + pattern: "^qcom,(?!.*wsa)(apq|ipq|mdm|msm|qcm|qcs|q[dr]u|sa|sar|s=
c|sd[amx]|smx1[ep])[0-9]+.*$"
>
> Why dropping front .*? Are you sure this matches what we want - so
> incorrect compatibles? To me it breaks the entire point of this select,
> so I am sure you did not test whether it still works. To remind: this is
> to select incorrect compatibles.
Thanks, great point. I tested it with regular dtbs checks with different
dtb files but I didn't check if it selects incorrect compatibles.
> (?!wsa)
> Because qcom,x-wsa8845 should be matched and cause warnings.
This is now confusing. I thought that the main job for the pattern above
is to avoid selecting wsa88xx amplifiers in the first place. Or, if I can
quote yourself: "What is WSA8815 that it should be here?"
If said wsa8845 with incorrect or correct should be selected by that patter=
n
then why not just leave that pattern as it is then? I am lost.
> And probably we are getting past the point of readability, so could you
> try:
>
> compatible:
> anyOf:
> - pattern: "^qcom,.*(apq|ipq|mdm|msm|qcm|qcs|q[dr]u|sar|sc|sd[amx]|sm=
|x1[ep])[0-9]+.*$"
> - pattern: "^qcom,.*(?!wsa)sa[0-9]+.*$"
Thanks, that one is much better for readability. I'll test that one then.
Best regards,
Alexey
Return-Path: <linux-kernel+bounces-665645-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id AE12141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:40:07 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id ED3C2167280
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:39:46 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 0EEF6288C8C;
Wed, 28 May 2025 14:39:40 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="eR/C+2CG"
Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id BAC38288C37;
Wed, 28 May 2025 14:39:37 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443179; cv=none; b=qQlX0ufL7MCmFh87Heox6JHdm8eSGo2TdeC7A6/2SuBtHK54n27NZocb2dGRnCzk2ucsrKfQJYg5o8wt2438l/xcct0hCduB3Mr0/g0Gn2QCIeQErJvfiShkXoP/9AeW1vmQIXQPKAhV3OV0zCeN4gokhT7EXxB7Q8riX6ZSveo=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443179; c=relaxed/simple;
bh=WQWL+eAKKiAuLfGDDdt/xLT8MzV7WUoPJ6v+IwTBPeU=;
h=Content-Type:Mime-Version:Subject:From:In-Reply-To:Date:Cc:
Message-Id:References:To; b=C24DYq5xv0jd/HZDxjq0B+5TlgqcH/4TIobGXZPnzucs87WSpvGSpVos8njMW13edZVe3NftwCPgHuRK6zbhjqJDLdSGrxyP8iyWRWaMFh60AaETBxFLVdlwrGy1UA0a4s6sa55ySfTmRO6sRX72FoE+6wh+NYB7KYh0eFZoJ7U=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=eR/C+2CG; arc=none smtp.client-ip=148.163.156.1
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com
Received: from pps.filterd (m0356517.ppops.net [127.0.0.1])
by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SE9qCt032761;
Wed, 28 May 2025 14:39:14 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc
:content-transfer-encoding:content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to; s=pp1; bh=oAjHp1
ItUS1j3EslUs9fCVFgilA9MP6Ipijq08HmnZg=; b=eR/C+2CGMvXBi+Apg76Vw8
lTh8VVSbt+DgMQj8vGIiZxy8KW7GrAX26bIQ0wpofCOBlJHNRnvf8pg/5PArVecL
JUSHaTi3WNMKD2LNfXje0mu0RGUdLzQ83f3A9CbvXroXvfsX/r8oZ8GjL4pbKDs2
C9WlZInJnl2FNbgYXDMm2A3CN6k1Hlm9q1AUZQyMZMIX60liaNn5VBpPnX7eosMz
X9hgT2HkS23TsMZrYXmQ5KjEYRQLM1FFoYghzmI2E+jvgrxXeUvQC0MI8JfXRWjE
wl9y4myjYCejvx9IWw81DarQPJrvOT06vPjE0nD9LSAKCDF3+qGaYUgBdFhp3CDQ
==
Received: from pps.reinject (localhost [127.0.0.1])
by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 46x40jr5x4-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 14:39:14 +0000 (GMT)
Received: from m0356517.ppops.net (m0356517.ppops.net [127.0.0.1])
by pps.reinject (8.18.0.8/8.18.0.8) with ESMTP id 54SEQ71X009419;
Wed, 28 May 2025 14:39:13 GMT
Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92])
by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 46x40jr5wy-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 14:39:13 +0000 (GMT)
Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1])
by ppma22.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 54SAvDbg016187;
Wed, 28 May 2025 14:39:12 GMT
Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227])
by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 46uru0r13y-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 14:39:12 +0000
Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101])
by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 54SEd8Yo37421542
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Wed, 28 May 2025 14:39:08 GMT
Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1])
by IMSVA (Postfix) with ESMTP id 3165120043;
Wed, 28 May 2025 14:39:08 +0000 (GMT)
Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1])
by IMSVA (Postfix) with ESMTP id C63B920040;
Wed, 28 May 2025 14:39:02 +0000 (GMT)
Received: from smtpclient.apple (unknown [9.61.244.234])
by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTPS;
Wed, 28 May 2025 14:39:02 +0000 (GMT)
Content-Type: text/plain;
charset=utf-8
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3776.700.51\))
Subject: Re: [PATCH v3] docs: powerpc: Add htm.rst to table of contents
From: Athira Rajeev <atrajeev@xxxxxxxxxxxxx>
In-Reply-To: <20250528054146.2658537-2-me@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 20:08:48 +0530
Cc: Hari Bathini <hbathini@xxxxxxxxxxxxx>,
Shuah Khan <skhan@xxxxxxxxxxxxxxxxxxx>,
linux-kernel-mentees@xxxxxxxxxxxxxxx,
Madhavan Srinivasan <maddy@xxxxxxxxxxxxx>,
Michael Ellerman <mpe@xxxxxxxxxxxxxx>,
Nicholas Piggin <npiggin@xxxxxxxxx>,
Christophe Leroy <christophe.leroy@xxxxxxxxxx>,
Jonathan Corbet <corbet@xxxxxxx>,
"open list:LINUX FOR POWERPC (32-BIT AND 64-BIT)" <linuxppc-dev@xxxxxxxxxxxxxxxx>,
"open list:DOCUMENTATION" <linux-doc@xxxxxxxxxxxxxxx>,
open list <linux-kernel@xxxxxxxxxxxxxxx>,
Randy Dunlap <rdunlap@xxxxxxxxxxxxx>
Content-Transfer-Encoding: quoted-printable
Message-Id: <7FF625BF-03E1-4EB4-BEE2-BEAEB1C5DD96@xxxxxxxxxxxxx>
References: <20250528054146.2658537-2-me@xxxxxxxxxxxxxxxxxxx>
To: Brigham Campbell <me@xxxxxxxxxxxxxxxxxxx>
X-Mailer: Apple Mail (2.3776.700.51)
X-TM-AS-GCONF: 00
X-Authority-Analysis: v=2.4 cv=SdL3duRu c=1 sm=1 tr=0 ts=68372012 cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=IkcTkHD0fZMA:10 a=dt9VzEwgFbYA:10 a=wukD7SXyAAAA:8 a=JfrnYn6hAAAA:8 a=VnNF1IyMAAAA:8 a=bs08ehmE3BuyNYDtbNMA:9
a=QEXdDO2ut3YA:10 a=n7THaJik3DRP1sDdJiGm:22 a=1CNFftbPRP8L7MoqJWF3:22
X-Proofpoint-GUID: LUmEJCQEVgou63X75IUsqr_P7UpE6I4P
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEyNyBTYWx0ZWRfX/5sC9EyYfYQf 4kBPoiHoytPVz02DUtS9VKeo7L+jJYfqh9khKL62ieg7w++gwphVlKl3d7NmIarLpGjYjMS7SVx OQ0AZeXmArv5kE3jFEldcDsFm3p0wPJ28L4Ua4XtcilZDiUPO+xeDaf1nJmnFK1alYCockum3cr
5M2y/huHRw2U9qbukcN2OXQkwOeEUw0wg13qKkHrPmsuy8jVg7SW2tdEclyEUblZLaF88xWwm1X Q1lEx3sgIm2CeA2L4HePa2RRvPBDMFCkURkOgI0njKrZATte9wC7JoBzlDEHeH8rpbBmpZ3jJ0k l/UI7MSfaDZ/uP8UqPlDYwf2lCjY7XX+Kql2e927YyG6Q6KiBDa+YFtXJmoH8FkX3DS73Y7IkFz
HVI4OE69Rqcz6o+F5/nDBm0Fs9JrkliF4lkKTJx2KejYs7bmvIHTYJdtD+zE5oom/5H6ug+r
X-Proofpoint-ORIG-GUID: OqOX88odwfV-1paicwDnn1JM_cS2iwlR
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_07,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0
lowpriorityscore=0 mlxscore=0 adultscore=0 priorityscore=1501
impostorscore=0 malwarescore=0 mlxlogscore=999 suspectscore=0 bulkscore=0
spamscore=0 clxscore=1011 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280127
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
> On 28 May 2025, at 11:11=E2=80=AFAM, Brigham Campbell =
<me@xxxxxxxxxxxxxxxxxxx> wrote:
>=20
> Fix the following documentation build error, which was introduced when
> Documentation/arch/powerpc/htm.rst was added to the repository without
> any reference to the document.
>=20
> Documentation/arch/powerpc/htm.rst: WARNING: document isn't included =
in any toctree [toc.not_included]
>=20
> Fixes: ab1456c5aa7a ("powerpc/pseries/htmdump: Add documentation for =
H_HTM debugfs interface")
> Acked-by: Randy Dunlap <rdunlap@xxxxxxxxxxxxx>
> Tested-by: Randy Dunlap <rdunlap@xxxxxxxxxxxxx>
> Signed-off-by: Brigham Campbell <me@xxxxxxxxxxxxxxxxxxx>
Thanks for the fix
Tested-by: Athira Rajeev <atrajeev@xxxxxxxxxxxxx>
Thanks
Athira
> ---
> Changes in v3:
> - Edit commit message to conform better to de facto kernel development =
style.
> - No changes to the diff.
>=20
> Documentation/arch/powerpc/index.rst | 1 +
> 1 file changed, 1 insertion(+)
>=20
> diff --git a/Documentation/arch/powerpc/index.rst =
b/Documentation/arch/powerpc/index.rst
> index 0560cbae5fa1..53fc9f89f3e4 100644
> --- a/Documentation/arch/powerpc/index.rst
> +++ b/Documentation/arch/powerpc/index.rst
> @@ -19,6 +19,7 @@ powerpc
> elf_hwcaps
> elfnote
> firmware-assisted-dump
> + htm
> hvcs
> imc
> isa-versions
> --=20
> 2.49.0
>=20
>=20
>=20
Return-Path: <linux-kernel+bounces-665644-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 5C5EE41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:40:24 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 653443A2AF7
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:38:56 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 16F43288C84;
Wed, 28 May 2025 14:39:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="We/bsCcO"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5BB2A1F473C
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:39:10 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443152; cv=none; b=FTV8OzddsHdSRboH2R4nxyYvj30e+oFHRp1iL0GhgWhW5K22NeuKYBw4FW4MigVi5RUDqc9N3RtgrS9LMvRf93pZjlf/WCcG/VqEVtwFhLUWhYTrgfUbw102e7ojf/MU1zIQNvxrx6t8oeMHV+3Nouzqe0WQO6uwz3mZ5jZxFt4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443152; c=relaxed/simple;
bh=MDmnkq8+Itlg3khoIZNBGAIgH4Fb/xMO2XKebl8pjFM=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=AlkXkVwZj2LT62iYuhzuV0t6BWEBWNTL3Yn4qlGutx1xFyHHqve4PcumzmdOvWv2yBr2gPDuouZoPKRswq6vC10XUxtIuFHTLY5oYMFqMEGVCChz5DEHJ4QCmuYGEqTR0fdZvbfK/OFSlg0dAMHLsM3VqXrB58XjH7/T/nHZIvE=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=We/bsCcO; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 33433C4CEED;
Wed, 28 May 2025 14:39:09 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748443150;
bh=MDmnkq8+Itlg3khoIZNBGAIgH4Fb/xMO2XKebl8pjFM=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=We/bsCcOlCTZfNb1DUVQgicc8PAfli6EFlqnWncULdYK/TmHdJHOWhZ3OUh/jaFSL
omS7gB7RwuJ8+veFWfewUHEoWJXQpWK0tVAKSOF+R/e0zjVWZJHXOW6OJJpwSNh0hn
72TsGoFyuwUtCR1jN9H03yfHdfOfwUvg5p4Ve75BiwFeA4UGwOb1vyHy8nZD5zq2vN
JpaNchKBLi7KHvlpn4nC7Hk4BvdPXiugKaagEE5mIZbthW1y9cCnEMwdfHV1E35J+f
ol4MPdBSldz7PxoFjq16jzWZ+EyGbkD0DpSf7USAZH4agtpg1KwXp4tNs+iivUbIYZ
zI2nK49X6e8dw==
Date: Wed, 28 May 2025 15:39:07 +0100
From: Conor Dooley <conor@xxxxxxxxxx>
To: =?iso-8859-1?Q?Cl=E9ment_L=E9ger?= <cleger@xxxxxxxxxxxx>
Cc: linux-riscv@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
Paul Walmsley <paul.walmsley@xxxxxxxxxx>,
Palmer Dabbelt <palmer@xxxxxxxxxxx>,
Albert Ou <aou@xxxxxxxxxxxxxxxxx>, Alexandre Ghiti <alex@xxxxxxxx>
Subject: Re: [PATCH] riscv: cpufeature: add validation for zfa, zfh and zfhmin
Message-ID: <20250528-stuffing-parasitic-89064d69d780@spud>
References: <20250527100001.33284-1-cleger@xxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
protocol="application/pgp-signature"; boundary="KDMI6SrfLb5YgK4d"
Content-Disposition: inline
In-Reply-To: <20250527100001.33284-1-cleger@xxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
--KDMI6SrfLb5YgK4d
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On Tue, May 27, 2025 at 12:00:00PM +0200, Cl=E9ment L=E9ger wrote:
> These extensions depends on the F one. Add a validation callback
> checking for the F extension to be present. Now that extensions are
> correctly reported using the F/D presence, we can remove the
> has_fpu() check in hwprobe_isa_ext0().
>=20
> Signed-off-by: Cl=E9ment L=E9ger <cleger@xxxxxxxxxxxx>
Reviewed-by: Conor Dooley <conor.dooley@xxxxxxxxxxxxx>
--KDMI6SrfLb5YgK4d
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iHUEABYIAB0WIQRh246EGq/8RLhDjO14tDGHoIJi0gUCaDcgCgAKCRB4tDGHoIJi
0tcIAP96A+ZQ0TxlKr55JHZ0NuqQ1MG8NvB7955IHUTsvSSHSwEAiC6UiaVfS5AS
pw2FqoPvoXb/TdUUyuHoIubHVOoX5ws=
=g5Ge
-----END PGP SIGNATURE-----
--KDMI6SrfLb5YgK4d--
Return-Path: <linux-kernel+bounces-665646-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 3638441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:41:00 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 70552161812
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:41:01 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 191B5288C80;
Wed, 28 May 2025 14:40:55 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="q13dAWkW";
dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="0NQTSWS3"
Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 40998288C1D
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:40:51 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443253; cv=fail; b=K6/x9M4ZM+THiOArFmHje4ZcIpVVaSANFGYAwJZ0hFUGalKtR7bkMUovBV54b9ioU98VzXJJQJ1zZr3thor+/LXRg1U/9poo3UKzlbdk1qwCd6i0v9yfb0iA4gVQDoZzZIEcT9cJiqApTQWUDeCUC69Xigxh8unblUWX4cjvtcQ=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443253; c=relaxed/simple;
bh=WOLTYOCRQaRkNGSN09Qqcu1gh4Ap4T2ka2TKxR6zgoc=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=hhUyLmTVWLWWhoqzagqjhv5gE33x79UBpTOqOkp50krClqKqvax5Dt7T5QkgsvbS+aWl+8Qb3F2j8DjyfB682TGh3rP/lIMLCe7WalIgUtU/wXlJveqGO3umUa/2qMc3XNg+IscX9c3QMnnSSe5Y84rqlBQvSV7pVa65bt44TKQ=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=q13dAWkW; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=0NQTSWS3; arc=fail smtp.client-ip=205.220.177.32
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com
Received: from pps.filterd (m0246630.ppops.net [127.0.0.1])
by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SCq9as031340;
Wed, 28 May 2025 14:40:42 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc
:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to; s=corp-2025-04-25; bh=w2fU5bqcNOMReRL1tg
6iOuNtmSQ1rprfLIYARE/jzt0=; b=q13dAWkW6rR7T8WpsSGwVpbdGVN2UznwVt
CYGYiM2gsKKVdgaJkT6mkGzPkp6F+ar6L1RQgrreLcHX2QtLtJPYaJiD63rm4dOP
gRc683LtZQ/n0Tkx08bk7q9jDKLnavjlZ1yvpAQmozSRj/xjM4nXIexITDUH+RaF
jObYg2XnvVtAZlX3TC4uk4gzwmGnpSKS1x7fVDjN3kyrlnXlhSGqlDhpa+Z8llyE
1tsae9+9+bZp3zos3y8OF2q9dWXwbpf7N0dKNTjxF0n4KsoxvE5ExqlEhhnvWw7/
vZv/9vigDwmV2iRnRQAKQ8GHR0uQLd1wo415HDsCYEesq01eUnaA==
Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2])
by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 46v2pewuxv-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Wed, 28 May 2025 14:40:42 +0000 (GMT)
Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1])
by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 54SE1JRq028430;
Wed, 28 May 2025 14:40:41 GMT
Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10on2040.outbound.protection.outlook.com [40.107.93.40])
by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 46u4jah0a8-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Wed, 28 May 2025 14:40:41 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=dCsyBplFV/gWUW7PvOABc8oM0OEny7jVr/RHnGCk2IP/PfdGzMtgWi5BL9YxQqIsneY8JrObKJE463hCaLSg4P7jUM0C2KlFMZmKYpe+ZmPEBArZTY54bAONw8LFAGYJW9ZRNDVf8vpm5phI11gO5UzetvCQcQdwZToJ1LAq4tFCEco4yXUldhFGvuMsv5k1LDDs6ybKnegi0xLMuli5YxazfmzeXSrfh/xirkR7EQ/XVl1PgpM039Kr9OLZ9xiYuAuIBkkAUT4he6abHIUyEde+xONXMWd3dwF456iN8tQJOLh5LZ1SnOpsqRIK4mmPtE1412qRTuZLBxlHQ85YRQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=w2fU5bqcNOMReRL1tg6iOuNtmSQ1rprfLIYARE/jzt0=;
b=wvkAMB8w/6wMdfFts1lzrI0NjWXPIAitRL+3UXsj6OXZTyVLPNct3eIM3S7+CVVkqVAjqJy4w186mf6jW8QjdptTqb0ixz51ZFIChBMJvCageRMDxnosKqVpjZUsRPvKkmMD/IEi4CFQ/fWvHp3xR7cAOTeBCDNjq7ZM9I46dKiPHmbj+WGaY+eE0nbijLcfdMh0Z4g9d5rgJdlosaBH9A+DIhExzmDwZKM6Zqpxcrk+DryiSpoz6C3B8aNbSXTfcfQ4ztImSC/AsnpE1/A5OMKc3vDm+h1RMLhg8jKkyfpHbgpNtg0y0pkovK8lK1bFd+cxAxF2iuzy454l3JSPKA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com;
dkim=pass header.d=oracle.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=w2fU5bqcNOMReRL1tg6iOuNtmSQ1rprfLIYARE/jzt0=;
b=0NQTSWS3UizoNWv/iXbqQJdyyXncRukpz7R53+kmGwTXsawD8k4cDhfhmeNfK1RnLYXVJU7tx865cVYG83BHiDcT/SCB48xNCFk/2arEoypTED9sPWidmuUWFRfVX43lNfEiFLOBa5VwVa57qWVz5z3OztxoK94Z07l0dJle/zc=
Received: from PH0PR10MB5777.namprd10.prod.outlook.com (2603:10b6:510:128::16)
by DM3PPFBD8703CAB.namprd10.prod.outlook.com (2603:10b6:f:fc00::c46) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8746.40; Wed, 28 May
2025 14:40:37 +0000
Received: from PH0PR10MB5777.namprd10.prod.outlook.com
([fe80::75a8:21cc:f343:f68c]) by PH0PR10MB5777.namprd10.prod.outlook.com
([fe80::75a8:21cc:f343:f68c%6]) with mapi id 15.20.8746.035; Wed, 28 May 2025
14:40:37 +0000
Date: Wed, 28 May 2025 10:40:34 -0400
From: "Liam R. Howlett" <Liam.Howlett@xxxxxxxxxx>
To: lorenzo.stoakes@xxxxxxxxxx
Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,
Vlastimil Babka <vbabka@xxxxxxx>, Jann Horn <jannh@xxxxxxxxxx>,
Pedro Falcato <pfalcato@xxxxxxx>, linux-mm@xxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH] tools/testing/vma: add missing function stub
Message-ID: <2zr7b6mawiqiwczuyfolwdqw662binsxjnwv7ou25reqvbmhqv@5ije6q7b4mom>
Mail-Followup-To: "Liam R. Howlett" <Liam.Howlett@xxxxxxxxxx>,
lorenzo.stoakes@xxxxxxxxxx, Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,
Vlastimil Babka <vbabka@xxxxxxx>, Jann Horn <jannh@xxxxxxxxxx>, Pedro Falcato <pfalcato@xxxxxxx>,
linux-mm@xxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
References: <20250528-fix-vma-test-v1-1-c8a5f533b38f@xxxxxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528-fix-vma-test-v1-1-c8a5f533b38f@xxxxxxxxxx>
User-Agent: NeoMutt/20240425
X-ClientProxiedBy: YQ1P288CA0013.CANP288.PROD.OUTLOOK.COM
(2603:10b6:c01:9e::9) To PH0PR10MB5777.namprd10.prod.outlook.com
(2603:10b6:510:128::16)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PH0PR10MB5777:EE_|DM3PPFBD8703CAB:EE_
X-MS-Office365-Filtering-Correlation-Id: c744c888-ce37-4c6d-47bb-08dd9df59c7e
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?sWzFSIMeP/fU2MQ/jtyr7rbJiZjordPgWHqI4P8mmffGzXYBy//qCDwyNbUt?=
=?us-ascii?Q?chTUBD5vTxfKXsMqEkiQ38KB3RRwYevlet8gpQE+eg+2Jj4oN1UVzSwVeE8s?=
=?us-ascii?Q?/1vH3U5blcQTYv4BmQ2uRf6De7SGDQvUU+IutelV0VLv5pw0Ja3UjIQ9ylDR?=
=?us-ascii?Q?VfM7ihU+9qaeTZdp5TR2Y9PvUyQX/SMLE7ET4xofMN5wOgB7VF3bT6eK0LJR?=
=?us-ascii?Q?sSz3WKGyOrCG+Ki6G0FVTB9rkz5QFwo0NrvqQf1+989TWgidB/ZLjOY6dyru?=
=?us-ascii?Q?DxjxOUeDv6fPKVM+j27W68lohNzYEg81RaD8GtAN7FDFigXAObqDkxBvwyRr?=
=?us-ascii?Q?klm4Wm0XUWVvyFE8EXuQB5yrn/4P2CEWSvX1gSdOORZgAtXjHr82xmkIcHdO?=
=?us-ascii?Q?61TRBQ03w7i5sNilv2nr4YinnRySVjXYUBW0kPEY7ZaIGbhyliyadSp34+B+?=
=?us-ascii?Q?POGEM146qo2dqjBqEYCZr7NRSFxeYf4zP6iWKyY8zf6I34+LPE56fbnXR5az?=
=?us-ascii?Q?DPZhBByfYyt+pVBEKn6trh9V2SKXYCdtufI7Rxy6YMEQN9fv6L9NnEu+xUih?=
=?us-ascii?Q?+0rtKvWaPWRta58b5JdNQzJG/7DXKnbgZqgFzNGoP9T/U+IbsocozVZqHtB8?=
=?us-ascii?Q?UGqxZcjXIrHX8L94q6lSrvy1ERgMpAPm6JvkZF8sCPCzkpfeeQ+tf0A+s8hz?=
=?us-ascii?Q?DNDF5Z68Xx0rnSBz8/evDEDxaLaQAKVflidIF815ns98lBqdZsktWuS6tiKd?=
=?us-ascii?Q?NQ/CTlBckTSZlYBAF+TvCa3tZVjYxKlWyJy7RU/2ZukPL/b+RnMVwVn8Gp0i?=
=?us-ascii?Q?V8KOn4Oz6Im2kJxCq8TwlrYco2cvwo2O/XQdT+jItl/2PB6Q5vf1TE1W8BQJ?=
=?us-ascii?Q?CO20XL/rdMeWeVsei82NOu5if6JotVvrYviOGBDLiQG7k4rrvcWLqT0TexFO?=
=?us-ascii?Q?Q70/NJc2ZjQOiwHk8dcGfZZBVyg867KMqRy6Gt/8gzHIalvnC8k87aGZY/88?=
=?us-ascii?Q?pvn1xof/j0xWlQf2I4o2r6QTw+9G0FMizBDAhTBGCwaQiHyN4U6cDBNwjcoi?=
=?us-ascii?Q?lGXsJEGfjKgiJffuuzckk+utfL2eZtlJGSw3UVzAaWE3Vn373QNdV56+5GTe?=
=?us-ascii?Q?d8u7zskNVt/1o5BI0Hs15RyjGUxnJYkqkeE0mkamnaBwEJvZ+KMfgFHEfqzu?=
=?us-ascii?Q?TJ6izQszYOQlWF+gzsQgXQnRi8cDMT/3bTDhJ0EIkG6yN0jVKXlxAqfTaYHi?=
=?us-ascii?Q?X5OCdi6HA/6UsIxwFthvtE1iikT4Tyy8wBShp775AOQ1F30wlaCmRb8MuC/J?=
=?us-ascii?Q?ItMcUhZtEcpArgeqckxhHfo5UnkLDs2U8/gLT1cqGZPp1DQ0hl4UsB7jb848?=
=?us-ascii?Q?vUr5OIZ4iKqMjVri4640Alee8AxFrgOLLjb/rzHuTMKm9OI3e4j+KZvBEYFd?=
=?us-ascii?Q?MUzpKmho+YY=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR10MB5777.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?ZlIL9nq5Bb5Bq9UV3yPjZMndPw4XOPInSvZOHhshAagcGgUZLt8rFtqCgAbr?=
=?us-ascii?Q?jSM1wOVkalzmKvs7TVDS48qvRA8vr/CVNyotICG3qAVJ9oXajHOSYLEH9uJ1?=
=?us-ascii?Q?Uj4qPCnDjvkTGLjU21WYZPXI3ukOl4anaBSTIgZB0yp2+w0PDO/AyhOAvFiM?=
=?us-ascii?Q?00hI0UmOfOhjgz6zOs59Wi+/sEZ1wCByHgBV3cvg/jnADe57A+hjg53knu90?=
=?us-ascii?Q?Utd1V0NLbseqfdZiL7HOdqHLV3ZenTibeWI8cbFbHqEltKwwwGC/aUImDGQD?=
=?us-ascii?Q?3UV47OypDBaUYbJN+2tKkFTNbGxaLjYDvWvECHgMHAGDs43u61G1FkFRKG9p?=
=?us-ascii?Q?9ImeLBZI0Z1lrkjWp5YG8mbiFHA8o0GJGbsD+/S6CV+3JuxJcscXxO10x99r?=
=?us-ascii?Q?h0eEg6nB6lW7O41zgRElGsniFS+qnHcUrl84UUjx1TjH5rc2SheKwRi2DFx/?=
=?us-ascii?Q?Yfl9PQRMY4VLt7u9dc+H83fU4cZsqigLOMA4EREWnDVDzX+okZeJbKLeiBmB?=
=?us-ascii?Q?u1pd7D4MkQdMjbuegXTt2XwnKYzTjfcNSmC3Ogcgewt8rTDtfTSokqT3kFIZ?=
=?us-ascii?Q?BtQlXbAcQ8YX8+mfxe7Tdpk7bJbQ5r+MZAn0y6y3pTV+9bnFXwfQHBdlWqxM?=
=?us-ascii?Q?JdP8a75OBSF9SXUWYTYDJ+ALj8zPy5L3lOvDO/+QDgxaIfvlBS64mgLHuujZ?=
=?us-ascii?Q?DJY6eKaobK7LLAYWqvWjjnIJ5VDQDyRtzBb3w4aLeNBWgIz0vkUkVJug1Nfr?=
=?us-ascii?Q?kcGY7xKaK2M8sItnXIBKxSJF4haudiZOHnjuPFkRKpZPMrpv3lHs8Vd0O1gu?=
=?us-ascii?Q?pJebQmjrB+ptqqTnyCGisdOp2usaiTQvhuDPjviCmX/qyaUJA24CfIsQbifP?=
=?us-ascii?Q?Ku2cIME1sMy/bEv5Zi0c0Umzq+UJ0V5vAhv58HfjLMnqDHc+y9IlHI3/1rjE?=
=?us-ascii?Q?bqGc1UwQtwt/00Fr7rfV356KvENZNkHKox73lrCXnl9pA700C13dVMqVZ4DO?=
=?us-ascii?Q?kuY7Qv6fg2IPcJM0gJWylzUTgdRfXSDAwUv9Ufp7fq0W7Tqhc4Dh6l49B/iU?=
=?us-ascii?Q?LXIOgM4SSsx8zvzlla/yMErSew/tOVPZzzgMdOEOpPWQR3MPAXO4u7vOwEoZ?=
=?us-ascii?Q?wGrE3BhaSxFX57M9ZkB5UUA28JzwWdOtpzBoibk5hb7lTjYfA8QxbZJSADFw?=
=?us-ascii?Q?AoN1u036rYRjeR8R8Wg54x19Gb8r6nqmUhbLTHG+H3Br8X5M29xHfnT2Tn3P?=
=?us-ascii?Q?3CggENxvNfr8CE2neej8Hu+VCicdnVHp8kPoO3XllBIr+jqHqA6cGI83nK3l?=
=?us-ascii?Q?DTvQ2AuB87lxXiBTcR4Aam5ke+G07d+wjeUBzoQkN8lpHFqSIzznzJ1e9aU1?=
=?us-ascii?Q?W6fKxJngX5q17LOgVx5EGl+h6yJ3xNN2P0dVtZ6N+0s2pQr9G9BxUW/n54JX?=
=?us-ascii?Q?uQjfPjINfAJ81LFoHuFoj8gsCiEDoVZ+omzAkcPxfYg+8y+oIwgod6yH4QnJ?=
=?us-ascii?Q?Y77OGIHXrG4knApJ72weMoBU+ondEIL9hFMLNwxM9JBwIYFFBCrlLDFjPEek?=
=?us-ascii?Q?4YX38ZB1Uh/lInlIzXVdqAdkIgbK/2b6ZCzsnvwZ?=
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0:
VNrb+lw2VXgBgFnMeBijQoH6NKjK5bqKCzu3MdvpstBQPy2YiyxGpQu3udUA6HK7Pig69KJnYGdixdBxC7LQRfnBp7PGmA1RIHzz7n/hJ6P/R5wbAEs7rS9HQNtKo7rjmOWYZLKwXu+5AYrDRChv7kLTzOEP5J/WzWH+6hlwDXYLi5KXEDr3BTs/KBWt/DPK3utM/7Z5EwjrIUl73kTSYWp+STlv3ROH9/mS/+c8iLNaT9eeh/Nq6w+GDE5+yyr//cT9jbMMaUOGzkVP1LnVzleJl/VPWSKUDD8ZlllihBtuhmgfogPIJ4IBvtUtpJaHL9m7Go7Nj39/XomNdsUfQMKeh7zZ129UKYb5Yhn1xklj+O9ACiFE/OuG8gELAgrq6+WGLbPHDVJfxkidyh9A8Ts66AK8k1V2UXhiPQe+3tb8kfGSpbYgwRbgT5+NtzGu3uJZ30uRHzUKWzh97x18UfQzJ8YuykANi2s2lHthjgqZQbs4uTlpxzR5MmoeR29R2EgLNhO7hfH+mUvh6hweDRkS85AA5niADM+GvSKjAfYIDZXUwzLFnHU7KS+B8NrVM160qvITeMvxD7XeUqbuVX439YpHHBrYiLxmVIbU6IM=
X-OriginatorOrg: oracle.com
X-MS-Exchange-CrossTenant-Network-Message-Id: c744c888-ce37-4c6d-47bb-08dd9df59c7e
X-MS-Exchange-CrossTenant-AuthSource: PH0PR10MB5777.namprd10.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 14:40:37.5879
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 30bpdaP10egac/65gPx1Z/rK4DaTg1r1OqKCDqDVPkNVAmpJ+gNdFytI8hVoLbvCP39VSYop4kAWBPB4bRY9CA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPFBD8703CAB
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_07,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 phishscore=0 suspectscore=0
adultscore=0 malwarescore=0 bulkscore=0 mlxscore=0 mlxlogscore=999
classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000
definitions=main-2505280127
X-Proofpoint-ORIG-GUID: zW06jEKFsERG900gOv3jB4D1ftCsBeA8
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEyNyBTYWx0ZWRfX4XUCjfA/wd4J fPb4dha1cPqMa8tB9IZnSrdqNEWlmfJ3ct07MMhycyU+u+kGTVoRD1mb92RaKH4ngSkNZxrQnWP bSYujZalNAt8KXYb8Ybzf+o61cjwfLHlnKfsJlRDHVH9eAiO5pdnTLsp0ciWY/A7evtdtPwUJn3
U4uns/95lgXNx0A6kzbXPKmOZOvdX+ZKGUWPMZF/lNh96x8KTkVzepESSFig6s4p2eFnYD0XRl+ AEzP6yJmgonc9r+x5K3ysl8VzbWUwYr4OFrCIPRGf+Pka9yTbZkI6jeAzvfHy0ga83UABM+V0l+ 5UArjeejB18QwTglkndvE/LmULWCH306C2KaIZGNM1YOEYaenQpkb06oyQISqPF78gIbuEaMBww
ckZQLwtr/VcIKh/5701PDvn6hQgS9TQ6oxq6cMAT6VyzLmnbTaWjK3361MxorHCJZ/JFrGAl
X-Proofpoint-GUID: zW06jEKFsERG900gOv3jB4D1ftCsBeA8
X-Authority-Analysis: v=2.4 cv=TdeWtQQh c=1 sm=1 tr=0 ts=6837206a cx=c_pps a=XiAAW1AwiKB2Y8Wsi+sD2Q==:117 a=XiAAW1AwiKB2Y8Wsi+sD2Q==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19
a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10 a=dt9VzEwgFbYA:10 a=GoEa3M9JfhUA:10 a=VwQbUJbxAAAA:8 a=yPCof4ZbAAAA:8 a=StxAKNcFnPo4rBptOFAA:9 a=CjuIK1q_8ugA:10
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
* Lorenzo Stoakes via B4 Relay <devnull+lorenzo.stoakes.oracle.com@xxxxxxxxxx> [250528 10:16]:
> From: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>
>
> The hugetlb fix introduced in commit ee40c9920ac2 ("mm: fix copy_vma()
> error handling for hugetlb mappings") mistakenly did not provide a stub for
> the VMA userland testing, which results in a compile error when trying to
> build this.
>
> Provide this stub to resolve the issue.
I need to be more careful in reviews for these things in the future.
LGTM.
Reviewed-by: Liam R. Howlett <Liam.Howlett@xxxxxxxxxx>
>
> ---
> Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>
> ---
> tools/testing/vma/vma_internal.h | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/tools/testing/vma/vma_internal.h b/tools/testing/vma/vma_internal.h
> index f6e45e62da3a6ee007b7431573f27ef5c2533865..441feb21aa5a92b7edddb07258c7f368171de15b 100644
> --- a/tools/testing/vma/vma_internal.h
> +++ b/tools/testing/vma/vma_internal.h
> @@ -1461,4 +1461,9 @@ static inline int __call_mmap_prepare(struct file *file,
> return file->f_op->mmap_prepare(desc);
> }
>
> +static inline void fixup_hugetlb_reservations(struct vm_area_struct *vma)
> +{
> + (void)vma;
> +}
> +
> #endif /* __MM_VMA_INTERNAL_H */
>
> ---
> base-commit: 1637eadc7fdf2fa4069a149b1e836656a3b64150
> change-id: 20250528-fix-vma-test-57b138f28f46
>
> Best regards,
> --
> Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>
>
>
Return-Path: <linux-kernel+bounces-665647-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 6EC6E41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:41:12 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id CBB7E163612
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:41:12 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id D8963289344;
Wed, 28 May 2025 14:41:02 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Gs3/86No"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6E642288CB4
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:41:00 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443262; cv=none; b=HGIC7VistZZo3RSCZlK7TKa76znNb3ml+sgFoWUH3Lu/FHtUJs5GuI7Xr8dde+iVnO/BobFyPzc+LCQHc7sGyES4hvph83g2z/PtmvlnLhwzIZkjxcPII6zi2H081EuH5T+kjZEwftwFguK7cCtaiVLtJOyJnOIPevqlKOWXx/o=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443262; c=relaxed/simple;
bh=Fm5mERkZ5mbb6HoXIl9RdvgtWoN6R79PF710VN5hP1c=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=E0XygSRi6+CDW2IrcO179Jh6+nRJ00gZHk8GbEoPo1OmPlW/gacWxmteAL3xwDWHPEGRmi/W2Jb1u4SEEuLErxCJnblrVod4Ag2GgbYfwOlDW6K5whqwqMQ3qVHZKnpQM4c5U69QoZstPrdggcMq8+uOlzL1m3iE46ADoqQfIxQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Gs3/86No; arc=none smtp.client-ip=170.10.129.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748443259;
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:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references:autocrypt:autocrypt;
bh=cKL8YRgpNYt5G4RoAQa5HP5khXCi0wFujxghLQX798Q=;
b=Gs3/86NoQmp4j93BtDyZfgf/KGZiRr0UfgNPbDQAXlZxWxOdMdNim1+zOe8y8JZpanUWGI
/elM/777HT1auje6gCu7poR4NZ5CRzGjK67NdwmSYmQP6CHa75HqmTxShg/23YPGwnbD3I
tzI3cejm4XKO0wtU1MdUFshbvwjxEMs=
Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com
[209.85.222.200]) by relay.mimecast.com with ESMTP with STARTTLS
(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
us-mta-687-QTM3fYzePBu4wRGkqNqdrg-1; Wed, 28 May 2025 10:40:58 -0400
X-MC-Unique: QTM3fYzePBu4wRGkqNqdrg-1
X-Mimecast-MFC-AGG-ID: QTM3fYzePBu4wRGkqNqdrg_1748443257
Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-7d0981315c8so6194585a.0
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 07:40:58 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748443257; x=1749048057;
h=content-transfer-encoding:in-reply-to:autocrypt:from
:content-language:references:cc:to:subject:user-agent:mime-version
:date:message-id:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=cKL8YRgpNYt5G4RoAQa5HP5khXCi0wFujxghLQX798Q=;
b=NXj452oFZ8v8iIuY3WT6UpOTjg5FTkVyRkqFjTfLRwta1eGYe1d2jLgyuoxSv8a8EQ
M7Kqg0F7mhQgeENTi9gcyJRRCV3Kyv0uxYpI7rOfhy0i3m7HaSqINUfxAj8VpgjfwgGg
M1+SgdD9fvhg36kbc+bWkBjNokmb0huPWzNSCJKfY8iGuoEj+Xr39WFbze7acHMBYyNg
wkXbCa6hpUonlvis40ukF2csrfmbKzAN8kElaWl2KXh2RPrb0NVYyPA95bzHTlU5HhRI
pY+cmbw80SqkWPp241wLc6mWdTv0jD80u/IMs2BBHPS8hf6AjpTBPc9G9t0n+7OugONk
WUVw==
X-Gm-Message-State: AOJu0YwXcwYxpgHWx+vF4Eo0ODiNr45XC56iOG2lAlcy6/IXuAcdlzzd
+SB8Gqk7hxNHLGIDOgDh79cdslu53X8eNoXmOAN5OpsziB5YW3NfzacVPaJs7FeR098Asy2QZDy
EfwyYTujNQJOET5hR8/AqAa0Xx+MiLWVQgJ+OD3RgADblAkyQp0hfQEkCpx9kUobObA==
X-Gm-Gg: ASbGnctiFgwSmy8bEU4VdwjiT6pXJsXlFaAQK8ljTX8YL0Hw5/b1V7uQLZhPb8RqhUV
GdUUPLUIPcUAnWr6L+DpHfZyavW5hfywIt2iEeitcDaUAOMFUGODbRF0sgIbqhYuZfp10PowbRQ
ufgnhEl9S6Od7JeVlp3sGEAoEQ7A7jSElC4cmxloOSxhb2rWiE9s0xx/b5WseAdIcT8eBo+iHRj
FbSyPRpiCXvzJcQ6ZneMNZ99WaqUzGfbheHvWEiNuacyeAASuH35XTZLYwYGz8j2/2FXVsuo8FI
tK/i1iFqcUYEIKeXAO0AmcsxovMRcIq7BF8WZcGbe3cSsLUi5emqV3R9IlVge2aJHl4=
X-Received: by 2002:a05:620a:470b:b0:7ca:cd71:2bea with SMTP id af79cd13be357-7ceecbe06abmr2836880585a.37.1748443257483;
Wed, 28 May 2025 07:40:57 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IE4rSonxKZdNqsFk8pafzF6Bnr5HCcMsto+364S0zQ3gXfJGfRmrOenFL6UZ1DMmdjdyjz1fA==
X-Received: by 2002:a05:620a:470b:b0:7ca:cd71:2bea with SMTP id af79cd13be357-7ceecbe06abmr2836875585a.37.1748443257132;
Wed, 28 May 2025 07:40:57 -0700 (PDT)
Received: from [192.168.1.17] (pool-68-160-160-85.bstnma.fios.verizon.net. [68.160.160.85])
by smtp.gmail.com with ESMTPSA id af79cd13be357-7cfb8212465sm77474585a.43.2025.05.28.07.40.55
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 07:40:56 -0700 (PDT)
Message-ID: <d6940b24-d78f-4da5-a8fa-6a408528822f@xxxxxxxxxx>
Date: Wed, 28 May 2025 10:40:55 -0400
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH v2 45/62] x86/extable: Define ELF section entry size for
exception tables
To: Josh Poimboeuf <jpoimboe@xxxxxxxxxx>, x86@xxxxxxxxxx
Cc: linux-kernel@xxxxxxxxxxxxxxx, Petr Mladek <pmladek@xxxxxxxx>,
Miroslav Benes <mbenes@xxxxxxx>, live-patching@xxxxxxxxxxxxxxx,
Song Liu <song@xxxxxxxxxx>, laokz <laokz@xxxxxxxxxxx>,
Jiri Kosina <jikos@xxxxxxxxxx>, Marcos Paulo de Souza <mpdesouza@xxxxxxxx>,
Weinan Liu <wnliu@xxxxxxxxxx>, Fazla Mehrab <a.mehrab@xxxxxxxxxxxxx>,
Chen Zhongjin <chenzhongjin@xxxxxxxxxx>, Puranjay Mohan <puranjay@xxxxxxxxxx>
References: <cover.1746821544.git.jpoimboe@xxxxxxxxxx>
<198cfbd12e54dfce1309828e146b90b1f7b200a5.1746821544.git.jpoimboe@xxxxxxxxxx>
Content-Language: en-US
From: Joe Lawrence <joe.lawrence@xxxxxxxxxx>
Autocrypt: addr=joe.lawrence@xxxxxxxxxx; keydata=
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
pNzsRQ==
In-Reply-To: <198cfbd12e54dfce1309828e146b90b1f7b200a5.1746821544.git.jpoimboe@xxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 5/9/25 4:17 PM, Josh Poimboeuf wrote:
> In preparation for the objtool klp diff subcommand, define the entry
> size for the __ex_table section in its ELF header. This will allow
> tooling to extract individual entries.
>
> Signed-off-by: Josh Poimboeuf <jpoimboe@xxxxxxxxxx>
> ---
> arch/x86/include/asm/asm.h | 20 ++++++++++++--------
> kernel/extable.c | 2 ++
> 2 files changed, 14 insertions(+), 8 deletions(-)
>
> diff --git a/arch/x86/include/asm/asm.h b/arch/x86/include/asm/asm.h
> index f963848024a5..62dff336f206 100644
> --- a/arch/x86/include/asm/asm.h
> +++ b/arch/x86/include/asm/asm.h
> @@ -138,15 +138,17 @@ static __always_inline __pure void *rip_rel_ptr(void *p)
>
> # include <asm/extable_fixup_types.h>
>
> +#define EXTABLE_SIZE 12
>
> + > [ ... snip ... ]
>
EXTABLE_SIZE defined in arch/x86/ ...
> diff --git a/kernel/extable.c b/kernel/extable.c
> index 71f482581cab..0ae3ee2ef266 100644
> --- a/kernel/extable.c
> +++ b/kernel/extable.c
> @@ -55,6 +55,8 @@ const struct exception_table_entry *search_exception_tables(unsigned long addr)
> {
> const struct exception_table_entry *e;
>
> + BUILD_BUG_ON(EXTABLE_SIZE != sizeof(struct exception_table_entry));
> +
but referenced in kernel/ where a non-x86 build like ppc64le build won't
know what EXTABLE_SIZE is :(
--
Joe
Return-Path: <linux-kernel+bounces-665648-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D509F41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:43:22 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id EBC413BE40D
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:43:00 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id E036B288CBF;
Wed, 28 May 2025 14:43:14 +0000 (UTC)
Received: from mail.actia.se (mail.actia.se [212.181.117.226])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id E95751F4727;
Wed, 28 May 2025 14:43:10 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.181.117.226
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443394; cv=none; b=OM6V3Y4f2K1DTzOq4fYbS86LmDstdP3ghs19hoywvLQwA2IdiiIQr1O0XdJFD8cNSB4THKS/D3/oyLLWUzoYtOVhCWVdvQm0R7mgCxWUiEcTPUWF/ZRGWUcQjPHOhdEe/xle4SJflrwGkoj1D56sox/IX1tLMpFR0OaSiF+r7Mw=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443394; c=relaxed/simple;
bh=R+GbZ6nN6HjbsTbeOTTVLhsFdyWsq+06/Ht/0stBoYc=;
h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To:
Content-Type:MIME-Version; b=oJ6HiaDlw7YEHmAfT+kZrnCK1fzKq7AdrbI/mCTCkuv2WnBc/iQvm2H7hhtYs+Si2NqDYcXicqCdp02+C6142C0ryqnGmVB9IbZTE/YHw7Qwg1jSLFht6mgpAetRlGdTSwAWq8sktLKHRXGxVJth/NPVHZPPs1pYM4tSnwU6ABY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=actia.se; spf=pass smtp.mailfrom=actia.se; arc=none smtp.client-ip=212.181.117.226
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=actia.se
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=actia.se
Received: from S036ANL.actianordic.se (10.12.31.117) by S035ANL.actianordic.se
(10.12.31.116) with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 28 May
2025 16:43:08 +0200
Received: from S036ANL.actianordic.se ([fe80::e13e:1feb:4ea6:ec69]) by
S036ANL.actianordic.se ([fe80::e13e:1feb:4ea6:ec69%3]) with mapi id
15.01.2507.039; Wed, 28 May 2025 16:43:08 +0200
From: John Ernberg <john.ernberg@xxxxxxxx>
To: =?iso-8859-2?Q?Horia_Geant=E3?= <horia.geanta@xxxxxxx>, Pankaj Gupta
<pankaj.gupta@xxxxxxx>, Gaurav Jain <gaurav.jain@xxxxxxx>, Herbert Xu
<herbert@xxxxxxxxxxxxxxxxxxx>, "David S . Miller" <davem@xxxxxxxxxxxxx>, "Rob
Herring" <robh@xxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>, "Conor
Dooley" <conor+dt@xxxxxxxxxx>, Shawn Guo <shawnguo@xxxxxxxxxx>, Sascha Hauer
<s.hauer@xxxxxxxxxxxxxx>
CC: Frank Li <Frank.li@xxxxxxx>, Pengutronix Kernel Team
<kernel@xxxxxxxxxxxxxx>, Fabio Estevam <festevam@xxxxxxxxx>, Thomas Richard
<thomas.richard@xxxxxxxxxxx>, "linux-crypto@xxxxxxxxxxxxxxx"
<linux-crypto@xxxxxxxxxxxxxxx>, "devicetree@xxxxxxxxxxxxxxx"
<devicetree@xxxxxxxxxxxxxxx>, "linux-kernel@xxxxxxxxxxxxxxx"
<linux-kernel@xxxxxxxxxxxxxxx>, "imx@xxxxxxxxxxxxxxx" <imx@xxxxxxxxxxxxxxx>,
"linux-arm-kernel@xxxxxxxxxxxxxxxxxxx"
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>, John Ernberg <john.ernberg@xxxxxxxx>,
Frank Li <Frank.Li@xxxxxxx>
Subject: [PATCH v3 2/4] crypto: caam - Support iMX8QXP and variants thereof
Thread-Topic: [PATCH v3 2/4] crypto: caam - Support iMX8QXP and variants
thereof
Thread-Index: AQHbz97Tel4fhEuYF0q9EmqYDGkHbg==
Date: Wed, 28 May 2025 14:43:07 +0000
Message-ID: <20250528144259.2603914-3-john.ernberg@xxxxxxxx>
References: <20250528144259.2603914-1-john.ernberg@xxxxxxxx>
In-Reply-To: <20250528144259.2603914-1-john.ernberg@xxxxxxxx>
Accept-Language: en-US, sv-SE
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: git-send-email 2.49.0
x-esetresult: clean, is OK
x-esetid: 37303A2956B14453607C60
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
The iMX8QXP (and variants such as the QX, DX, DXP) all identify as iMX8QXP.
They have the exact same restrictions as the supported iMX8QM introduced
at commit 61bb8db6f682 ("crypto: caam - Add support for i.MX8QM")
Loosen the check a little bit with a wildcard to also match the iMX8QXP
and its variants.
Signed-off-by: John Ernberg <john.ernberg@xxxxxxxx>
Reviewed-by: Frank Li <Frank.Li@xxxxxxx>
---
v3:
- no changes
v2:
- Collect review tag
---
drivers/crypto/caam/ctrl.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/crypto/caam/ctrl.c b/drivers/crypto/caam/ctrl.c
index 766c447c9cfb..ce7b99019537 100644
--- a/drivers/crypto/caam/ctrl.c
+++ b/drivers/crypto/caam/ctrl.c
@@ -573,7 +573,7 @@ static const struct soc_device_attribute caam_imx_soc_t=
able[] =3D {
{ .soc_id =3D "i.MX7*", .data =3D &caam_imx7_data },
{ .soc_id =3D "i.MX8M*", .data =3D &caam_imx7_data },
{ .soc_id =3D "i.MX8ULP", .data =3D &caam_imx8ulp_data },
- { .soc_id =3D "i.MX8QM", .data =3D &caam_imx8ulp_data },
+ { .soc_id =3D "i.MX8Q*", .data =3D &caam_imx8ulp_data },
{ .soc_id =3D "VF*", .data =3D &caam_vf610_data },
{ .family =3D "Freescale i.MX" },
{ /* sentinel */ }
--=20
2.49.0
Return-Path: <linux-kernel+bounces-665649-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 6A4FE41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:43:38 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 7B0913BF497
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:43:11 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id EC2F0289833;
Wed, 28 May 2025 14:43:15 +0000 (UTC)
Received: from mail.actia.se (mail.actia.se [212.181.117.226])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id E95CD20C47C;
Wed, 28 May 2025 14:43:10 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.181.117.226
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443395; cv=none; b=K/9mV76ccdTwE9PR7szJlPmUJxB+B9zMWMgy1E9EJ0jchGgSbSrIMY0aqZUs1V6PVz5kP93Z3SaSSqltZaoA2zmmkun3XR98kv7fL2SBxL84OgPaL8ACD/gU9NPs43UZmQUtfOR3x36APsXyqNemG1okQWOzteBSdNAb2OoAVmQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443395; c=relaxed/simple;
bh=lpHAaiWow+aad2BBKkvtJuEQxaOZwqLxi8ae+QrPWKA=;
h=From:To:CC:Subject:Date:Message-ID:Content-Type:MIME-Version; b=Yk+olMbAZSbm+9j51IQ/G5hR7cn+uACNZ3qmgkBgXkK07dq9XvXqgSfVc6NYPQdZbHltfimMTDbjGmYs7jpHeZ+/ImrfXCZaFdXcQR+zv4F5W8LgC057KQatGulh4S/NmP8BhbCTlZReeGrxGwzuvtIgYM6RXEkbLPIub63xteQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=actia.se; spf=pass smtp.mailfrom=actia.se; arc=none smtp.client-ip=212.181.117.226
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=actia.se
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=actia.se
Received: from S036ANL.actianordic.se (10.12.31.117) by S036ANL.actianordic.se
(10.12.31.117) with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 28 May
2025 16:43:07 +0200
Received: from S036ANL.actianordic.se ([fe80::e13e:1feb:4ea6:ec69]) by
S036ANL.actianordic.se ([fe80::e13e:1feb:4ea6:ec69%3]) with mapi id
15.01.2507.039; Wed, 28 May 2025 16:43:07 +0200
From: John Ernberg <john.ernberg@xxxxxxxx>
To: =?utf-8?B?SG9yaWEgR2VhbnTEgw==?= <horia.geanta@xxxxxxx>, Pankaj Gupta
<pankaj.gupta@xxxxxxx>, Gaurav Jain <gaurav.jain@xxxxxxx>, Herbert Xu
<herbert@xxxxxxxxxxxxxxxxxxx>, "David S . Miller" <davem@xxxxxxxxxxxxx>, "Rob
Herring" <robh@xxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>, "Conor
Dooley" <conor+dt@xxxxxxxxxx>, Shawn Guo <shawnguo@xxxxxxxxxx>, Sascha Hauer
<s.hauer@xxxxxxxxxxxxxx>
CC: Frank Li <Frank.li@xxxxxxx>, Pengutronix Kernel Team
<kernel@xxxxxxxxxxxxxx>, Fabio Estevam <festevam@xxxxxxxxx>, Thomas Richard
<thomas.richard@xxxxxxxxxxx>, "linux-crypto@xxxxxxxxxxxxxxx"
<linux-crypto@xxxxxxxxxxxxxxx>, "devicetree@xxxxxxxxxxxxxxx"
<devicetree@xxxxxxxxxxxxxxx>, "linux-kernel@xxxxxxxxxxxxxxx"
<linux-kernel@xxxxxxxxxxxxxxx>, "imx@xxxxxxxxxxxxxxx" <imx@xxxxxxxxxxxxxxx>,
"linux-arm-kernel@xxxxxxxxxxxxxxxxxxx"
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>, John Ernberg <john.ernberg@xxxxxxxx>
Subject: [PATCH v3 0/4] crypto: caam - iMX8QXP support (and related fixes)
Thread-Topic: [PATCH v3 0/4] crypto: caam - iMX8QXP support (and related
fixes)
Thread-Index: AQHbz97TPuW5MW56gEKcuq8Jspje1Q==
Date: Wed, 28 May 2025 14:43:07 +0000
Message-ID: <20250528144259.2603914-1-john.ernberg@xxxxxxxx>
Accept-Language: en-US, sv-SE
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: git-send-email 2.49.0
x-esetresult: clean, is OK
x-esetid: 37303A2955B14453607C60
Content-Type: text/plain; charset="utf-8"
Content-ID: <47E64EBDE00C974EAAF9F94B34C0B364@xxxxxxxx>
Content-Transfer-Encoding: base64
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
VGhpcyBzZXJpZXMgZW5hYmxlcyB0aGUgdXNlIG9mIHRoZSBDQUFNIChDcnlwdG9ncmFwaGljIEFj
Y2VsZXJhdGlvbiBhbmQNCkFzc3VyYW5jZSBNb2R1bGUpIG9uIHRoZSBpTVg4UVhQIChhbmQgaXRz
IHZhcmlhbnRzKS4NCg0KdjM6IChkZXRhaWxlZCBjaGFuZ2Vsb2cgaW4gZWFjaCBwYXRjaCkNCiAt
IEZpeCBkZXZpY2V0cmVlIENJIGRldGVjdGVkIGVycm9ycyAoUm9iIEhlcnJpbmcncyBib3QpDQog
LSBEZWNsYXJlIHRoZSBjb21wYXRpYmxlcyBjb3JyZWN0bHkgaW4gYmluZGluZ3MgKEtyenlzenRv
ZiBLb3psb3dza2kpDQoNCnYyOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9saW51eC1jcnlwdG8v
MjAyNTA1MjcwNzE1NTIuMTQyNDk5Ny0xLWpvaG4uZXJuYmVyZ0BhY3RpYS5zZS9UDQogLSBDbGFy
aWZ5IGluIHRoZSBjb21taXQgbWVzc2FnZSBob3cgdGhlIGNyYXNoIGZpeCB3b3JrcyAoRnJhbmsg
TGkpDQogLSBSZXN0cmljdCBwb3dlci1kb21haW5zIG9ubHkgZm9yIGlNWDhRKiBTb0NzIGluIGJp
bmRpbmdzIChGcmFuayBMaSkNCiAtIENvbGxlY3QgdGFncw0KDQp2MTogaHR0cHM6Ly9sb3JlLmtl
cm5lbC5vcmcvbGludXgtY3J5cHRvLzIwMjUwNTIzMTMxODE0LjEwNDc2NjItMS1qb2huLmVybmJl
cmdAYWN0aWEuc2UvVA0KDQpIb3JpYSBHZWFudMSDICgxKToNCiAgYXJtNjQ6IGR0czogZnJlZXNj
YWxlOiBpbXg4cXhwL2lteDhxbTogQWRkIENBQU0gc3VwcG9ydA0KDQpKb2huIEVybmJlcmcgKDMp
Og0KICBjcnlwdG86IGNhYW0gLSBQcmV2ZW50IGNyYXNoIG9uIHN1c3BlbmQgd2l0aCBpTVg4UU0g
LyBpTVg4VUxQDQogIGNyeXB0bzogY2FhbSAtIFN1cHBvcnQgaU1YOFFYUCBhbmQgdmFyaWFudHMg
dGhlcmVvZg0KICBkdC1iaW5kaW5nczogY3J5cHRvOiBmc2wsc2VjLXY0LjA6IEFkZCBwb3dlciBk
b21haW5zIGZvciBpTVg4UU0gYW5kDQogICAgaU1YOFFYUA0KDQogLi4uL2JpbmRpbmdzL2NyeXB0
by9mc2wsc2VjLXY0LjAueWFtbCAgICAgICAgIHwgNDUgKysrKysrKysrKysrKysrKysrLQ0KIC4u
Li9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1zZWN1cml0eS5kdHNpICB8IDM4ICsrKysrKysr
KysrKysrKysNCiBhcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0uZHRzaSAgICAg
fCAgMSArDQogYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHF4cC5kdHNpICAgIHwg
IDEgKw0KIGRyaXZlcnMvY3J5cHRvL2NhYW0vY3RybC5jICAgICAgICAgICAgICAgICAgICB8ICA3
ICstLQ0KIGRyaXZlcnMvY3J5cHRvL2NhYW0vaW50ZXJuLmggICAgICAgICAgICAgICAgICB8ICAx
ICsNCiA2IGZpbGVzIGNoYW5nZWQsIDg5IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pDQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3Mt
c2VjdXJpdHkuZHRzaQ0KDQotLSANCjIuNDkuMA0K
Return-Path: <linux-kernel+bounces-665650-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1CDD841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:43:54 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 3B4A64A0853
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:43:45 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id E6C1A28A1D1;
Wed, 28 May 2025 14:43:16 +0000 (UTC)
Received: from mail.actia.se (mail.actia.se [212.181.117.226])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id BA340288C25;
Wed, 28 May 2025 14:43:14 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.181.117.226
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443396; cv=none; b=MSft3erdl/KD4L1zF7KJbydbjo0j9zZ47aAD7VodT0KJrOccaLhlVguU6nYR5wdxnT8xH3mFHM9BQvtdKDN3VjmwnW7HjzmzP0vOuSRN0pAdYT1HZMNKHpu9Tgkj8B0zHVKtcqj7dxVs3d7mVjQ6CAoVy23zoJkTvyzoTUARFao=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443396; c=relaxed/simple;
bh=lPkvLuqnIArzHwKYZ3O4kp4RNaEm/NYSJXDcaA05IOU=;
h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To:
Content-Type:MIME-Version; b=dvAY+MdTtG+48LEvx6433gE88l0C8wtUX0mzcMzKyd0HqiZaJEi5d1Rso3TrjvXOJJurWOdWtpLWhcSP4iI4FzPgA8WcYHHNjvpfCWiA8A/Ax9sh9CeCNXHWnJEZK6IFe179Z41j8GNs+GQS5oFG4grfsm+qAQYZrvijf+bHzBE=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=actia.se; spf=pass smtp.mailfrom=actia.se; arc=none smtp.client-ip=212.181.117.226
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=actia.se
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=actia.se
Received: from S036ANL.actianordic.se (10.12.31.117) by S035ANL.actianordic.se
(10.12.31.116) with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 28 May
2025 16:43:08 +0200
Received: from S036ANL.actianordic.se ([fe80::e13e:1feb:4ea6:ec69]) by
S036ANL.actianordic.se ([fe80::e13e:1feb:4ea6:ec69%3]) with mapi id
15.01.2507.039; Wed, 28 May 2025 16:43:08 +0200
From: John Ernberg <john.ernberg@xxxxxxxx>
To: =?iso-8859-2?Q?Horia_Geant=E3?= <horia.geanta@xxxxxxx>, Pankaj Gupta
<pankaj.gupta@xxxxxxx>, Gaurav Jain <gaurav.jain@xxxxxxx>, Herbert Xu
<herbert@xxxxxxxxxxxxxxxxxxx>, "David S . Miller" <davem@xxxxxxxxxxxxx>, "Rob
Herring" <robh@xxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>, "Conor
Dooley" <conor+dt@xxxxxxxxxx>, Shawn Guo <shawnguo@xxxxxxxxxx>, Sascha Hauer
<s.hauer@xxxxxxxxxxxxxx>
CC: Frank Li <Frank.li@xxxxxxx>, Pengutronix Kernel Team
<kernel@xxxxxxxxxxxxxx>, Fabio Estevam <festevam@xxxxxxxxx>, Thomas Richard
<thomas.richard@xxxxxxxxxxx>, "linux-crypto@xxxxxxxxxxxxxxx"
<linux-crypto@xxxxxxxxxxxxxxx>, "devicetree@xxxxxxxxxxxxxxx"
<devicetree@xxxxxxxxxxxxxxx>, "linux-kernel@xxxxxxxxxxxxxxx"
<linux-kernel@xxxxxxxxxxxxxxx>, "imx@xxxxxxxxxxxxxxx" <imx@xxxxxxxxxxxxxxx>,
"linux-arm-kernel@xxxxxxxxxxxxxxxxxxx"
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>, John Ernberg <john.ernberg@xxxxxxxx>
Subject: [PATCH v3 3/4] dt-bindings: crypto: fsl,sec-v4.0: Add power domains
for iMX8QM and iMX8QXP
Thread-Topic: [PATCH v3 3/4] dt-bindings: crypto: fsl,sec-v4.0: Add power
domains for iMX8QM and iMX8QXP
Thread-Index: AQHbz97TDhLekXOKbkmerT2PfEO8vg==
Date: Wed, 28 May 2025 14:43:07 +0000
Message-ID: <20250528144259.2603914-4-john.ernberg@xxxxxxxx>
References: <20250528144259.2603914-1-john.ernberg@xxxxxxxx>
In-Reply-To: <20250528144259.2603914-1-john.ernberg@xxxxxxxx>
Accept-Language: en-US, sv-SE
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: git-send-email 2.49.0
x-esetresult: clean, is OK
x-esetid: 37303A2956B14453607C60
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
NXP SoCs like the iMX8QM, iMX8QXP or iMX8DXP use power domains for
resource management.
Allow specifying them for such SoCs.
Signed-off-by: John Ernberg <john.ernberg@xxxxxxxx>
---
v3:
- Fix warnings discovered by Rob Herring's bot
- Declare the compatibles correctly (Krzysztof Kozlowski)
v2:
- Adjust commit message (Frank Li)
- Only allow power-domains when compatible with imx8qm (Frank Li)
---
.../bindings/crypto/fsl,sec-v4.0.yaml | 45 ++++++++++++++++++-
1 file changed, 44 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/crypto/fsl,sec-v4.0.yaml b/D=
ocumentation/devicetree/bindings/crypto/fsl,sec-v4.0.yaml
index 75afa441e019..a4ada0e2d97c 100644
--- a/Documentation/devicetree/bindings/crypto/fsl,sec-v4.0.yaml
+++ b/Documentation/devicetree/bindings/crypto/fsl,sec-v4.0.yaml
@@ -46,6 +46,7 @@ properties:
- items:
- enum:
- fsl,imx6ul-caam
+ - fsl,imx8qm-caam
- fsl,sec-v5.0
- const: fsl,sec-v4.0
- const: fsl,sec-v4.0
@@ -77,6 +78,9 @@ properties:
interrupts:
maxItems: 1
=20
+ power-domains:
+ maxItems: 1
+
fsl,sec-era:
description: Defines the 'ERA' of the SEC device.
$ref: /schemas/types.yaml#/definitions/uint32
@@ -106,7 +110,9 @@ patternProperties:
- const: fsl,sec-v5.0-job-ring
- const: fsl,sec-v4.0-job-ring
- items:
- - const: fsl,sec-v5.0-job-ring
+ - enum:
+ - fsl,imx8qm-job-ring
+ - fsl,sec-v5.0-job-ring
- const: fsl,sec-v4.0-job-ring
- const: fsl,sec-v4.0-job-ring
=20
@@ -116,6 +122,9 @@ patternProperties:
interrupts:
maxItems: 1
=20
+ power-domains:
+ maxItems: 1
+
fsl,liodn:
description:
Specifies the LIODN to be used in conjunction with the ppid-to-l=
iodn
@@ -212,6 +221,40 @@ required:
- reg
- ranges
=20
+allOf:
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: fsl,imx8qm-caam
+ then:
+ required:
+ - power-domains
+ else:
+ properties:
+ power-domains: false
+
+ - if:
+ patternProperties:
+ '^jr@[0-9a-f]+$':
+ type: object
+ properties:
+ compatible:
+ contains:
+ const: fsl,imx8qm-job-ring
+ then:
+ patternProperties:
+ '^jr@[0-9a-f]+$':
+ type: object
+ required:
+ - power-domains
+ else:
+ patternProperties:
+ '^jr@[0-9a-f]+$':
+ type: object
+ properties:
+ power-domains: false
+
additionalProperties: false
=20
examples:
--=20
2.49.0
Return-Path: <linux-kernel+bounces-665651-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id EDFCC41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:44:03 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 25E6E1BA1FBC
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:44:14 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 42E3928A713;
Wed, 28 May 2025 14:43:18 +0000 (UTC)
Received: from mail.actia.se (mail.actia.se [212.181.117.226])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B8A7C289812;
Wed, 28 May 2025 14:43:15 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.181.117.226
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443397; cv=none; b=Ewl03WJoilMETFXs2IevGOXXYPMX5HjPv1l8U2yxxV1bfrUoHIv7ptTzwCce77FlvC6186XV7EgCe3UPlIwmz6RnxlfF+qiN0yhgcbLzKRsP4ySV5p7bBrp5NgmreRM/9m7hTwKckwBc1cXkGQV0IDZMbavzCSRL/t3n6MRRZr0=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443397; c=relaxed/simple;
bh=abC6uraCLSUTnAYB4jmIhkqVK5vXXVPLLmEZmI5ug1o=;
h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To:
Content-Type:MIME-Version; b=Zsmb9iR5dZ0JKY2bGneSTX5FLbBOQLT7eZwxp8hlHI63x2uOOoY/TtLejidbNGwGp/o1MQuwDpTPPT98QI+5KBCmbP8y2fd9NWEDy/PXs4PXzqW2I1dBewDBzFbiZOO+cUByHbLWraNytneruriBk4YB285KToBTjkBDlcBvgEU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=actia.se; spf=pass smtp.mailfrom=actia.se; arc=none smtp.client-ip=212.181.117.226
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=actia.se
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=actia.se
Received: from S036ANL.actianordic.se (10.12.31.117) by S036ANL.actianordic.se
(10.12.31.117) with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 28 May
2025 16:43:07 +0200
Received: from S036ANL.actianordic.se ([fe80::e13e:1feb:4ea6:ec69]) by
S036ANL.actianordic.se ([fe80::e13e:1feb:4ea6:ec69%3]) with mapi id
15.01.2507.039; Wed, 28 May 2025 16:43:07 +0200
From: John Ernberg <john.ernberg@xxxxxxxx>
To: =?iso-8859-2?Q?Horia_Geant=E3?= <horia.geanta@xxxxxxx>, Pankaj Gupta
<pankaj.gupta@xxxxxxx>, Gaurav Jain <gaurav.jain@xxxxxxx>, Herbert Xu
<herbert@xxxxxxxxxxxxxxxxxxx>, "David S . Miller" <davem@xxxxxxxxxxxxx>, "Rob
Herring" <robh@xxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>, "Conor
Dooley" <conor+dt@xxxxxxxxxx>, Shawn Guo <shawnguo@xxxxxxxxxx>, Sascha Hauer
<s.hauer@xxxxxxxxxxxxxx>
CC: Frank Li <Frank.li@xxxxxxx>, Pengutronix Kernel Team
<kernel@xxxxxxxxxxxxxx>, Fabio Estevam <festevam@xxxxxxxxx>, Thomas Richard
<thomas.richard@xxxxxxxxxxx>, "linux-crypto@xxxxxxxxxxxxxxx"
<linux-crypto@xxxxxxxxxxxxxxx>, "devicetree@xxxxxxxxxxxxxxx"
<devicetree@xxxxxxxxxxxxxxx>, "linux-kernel@xxxxxxxxxxxxxxx"
<linux-kernel@xxxxxxxxxxxxxxx>, "imx@xxxxxxxxxxxxxxx" <imx@xxxxxxxxxxxxxxx>,
"linux-arm-kernel@xxxxxxxxxxxxxxxxxxx"
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>, John Ernberg <john.ernberg@xxxxxxxx>,
"stable@xxxxxxxxxx" <stable@xxxxxxxxxx>
Subject: [PATCH v3 1/4] crypto: caam - Prevent crash on suspend with iMX8QM /
iMX8ULP
Thread-Topic: [PATCH v3 1/4] crypto: caam - Prevent crash on suspend with
iMX8QM / iMX8ULP
Thread-Index: AQHbz97TifK0/bkJfUas794AaCBb6Q==
Date: Wed, 28 May 2025 14:43:07 +0000
Message-ID: <20250528144259.2603914-2-john.ernberg@xxxxxxxx>
References: <20250528144259.2603914-1-john.ernberg@xxxxxxxx>
In-Reply-To: <20250528144259.2603914-1-john.ernberg@xxxxxxxx>
Accept-Language: en-US, sv-SE
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: git-send-email 2.49.0
x-esetresult: clean, is OK
x-esetid: 37303A2955B14453607C60
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Since the CAAM on these SoCs is managed by another ARM core, called the
SECO (Security Controller) on iMX8QM and Secure Enclave on iMX8ULP, which
also reserves access to register page 0 suspend operations cannot touch
this page.
This is similar to when running OPTEE, where OPTEE will reserve page 0.
Track this situation using a new state variable no_page0, reflecting if
page 0 is reserved elsewhere, either by other management cores in SoC or
by OPTEE.
Replace the optee_en check in suspend/resume with the new check.
optee_en cannot go away as it's needed elsewhere to gate OPTEE specific
situations.
Fixes the following splat at suspend:
Internal error: synchronous external abort: 0000000096000010 [#1] SMP
Hardware name: Freescale i.MX8QXP ACU6C (DT)
pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=3D--)
pc : readl+0x0/0x18
lr : rd_reg32+0x18/0x3c
sp : ffffffc08192ba20
x29: ffffffc08192ba20 x28: ffffff8025190000 x27: 0000000000000000
x26: ffffffc0808ae808 x25: ffffffc080922338 x24: ffffff8020e89090
x23: 0000000000000000 x22: ffffffc080922000 x21: ffffff8020e89010
x20: ffffffc080387ef8 x19: ffffff8020e89010 x18: 000000005d8000d5
x17: 0000000030f35963 x16: 000000008f785f3f x15: 000000003b8ef57c
x14: 00000000c418aef8 x13: 00000000f5fea526 x12: 0000000000000001
x11: 0000000000000002 x10: 0000000000000001 x9 : 0000000000000000
x8 : ffffff8025190870 x7 : ffffff8021726880 x6 : 0000000000000002
x5 : ffffff80217268f0 x4 : ffffff8021726880 x3 : ffffffc081200000
x2 : 0000000000000001 x1 : ffffff8020e89010 x0 : ffffffc081200004
Call trace:
readl+0x0/0x18
caam_ctrl_suspend+0x30/0xdc
dpm_run_callback.constprop.0+0x24/0x5c
device_suspend+0x170/0x2e8
dpm_suspend+0xa0/0x104
dpm_suspend_start+0x48/0x50
suspend_devices_and_enter+0x7c/0x45c
pm_suspend+0x148/0x160
state_store+0xb4/0xf8
kobj_attr_store+0x14/0x24
sysfs_kf_write+0x38/0x48
kernfs_fop_write_iter+0xb4/0x178
vfs_write+0x118/0x178
ksys_write+0x6c/0xd0
__arm64_sys_write+0x14/0x1c
invoke_syscall.constprop.0+0x64/0xb0
do_el0_svc+0x90/0xb0
el0_svc+0x18/0x44
el0t_64_sync_handler+0x88/0x124
el0t_64_sync+0x150/0x154
Code: 88dffc21 88dffc21 5ac00800 d65f03c0 (b9400000)
Fixes: d2835701d93c ("crypto: caam - i.MX8ULP donot have CAAM page0 access"=
)
Fixes: 61bb8db6f682 ("crypto: caam - Add support for i.MX8QM")
Cc: stable@xxxxxxxxxx # v6.10+
Signed-off-by: John Ernberg <john.ernberg@xxxxxxxx>
---
I noticed this when enabling the iMX8QXP support (next patch), hence the
iMX8QXP backtrace, but the iMX8QM CAAM integration works exactly the same
and according to the NXP tree [1] the iMX8ULP suffers the same issue.
[1]: https://github.com/nxp-imx/linux-imx/commit/653712ffe52dd59f407af1b781=
ce318f3d9e17bb
---
v3:
- no changes
v2:
- Adjust commit message to make it clearer what is happening around no_pag=
e0 (Frank Li)
---
drivers/crypto/caam/ctrl.c | 5 +++--
drivers/crypto/caam/intern.h | 1 +
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/crypto/caam/ctrl.c b/drivers/crypto/caam/ctrl.c
index 38ff931059b4..766c447c9cfb 100644
--- a/drivers/crypto/caam/ctrl.c
+++ b/drivers/crypto/caam/ctrl.c
@@ -831,7 +831,7 @@ static int caam_ctrl_suspend(struct device *dev)
{
const struct caam_drv_private *ctrlpriv =3D dev_get_drvdata(dev);
=20
- if (ctrlpriv->caam_off_during_pm && !ctrlpriv->optee_en)
+ if (ctrlpriv->caam_off_during_pm && !ctrlpriv->no_page0)
caam_state_save(dev);
=20
return 0;
@@ -842,7 +842,7 @@ static int caam_ctrl_resume(struct device *dev)
struct caam_drv_private *ctrlpriv =3D dev_get_drvdata(dev);
int ret =3D 0;
=20
- if (ctrlpriv->caam_off_during_pm && !ctrlpriv->optee_en) {
+ if (ctrlpriv->caam_off_during_pm && !ctrlpriv->no_page0) {
caam_state_restore(dev);
=20
/* HW and rng will be reset so deinstantiation can be removed */
@@ -908,6 +908,7 @@ static int caam_probe(struct platform_device *pdev)
=20
imx_soc_data =3D imx_soc_match->data;
reg_access =3D reg_access && imx_soc_data->page0_access;
+ ctrlpriv->no_page0 =3D !reg_access;
/*
* CAAM clocks cannot be controlled from kernel.
*/
diff --git a/drivers/crypto/caam/intern.h b/drivers/crypto/caam/intern.h
index e51320150872..51c90d17a40d 100644
--- a/drivers/crypto/caam/intern.h
+++ b/drivers/crypto/caam/intern.h
@@ -115,6 +115,7 @@ struct caam_drv_private {
u8 blob_present; /* Nonzero if BLOB support present in device */
u8 mc_en; /* Nonzero if MC f/w is active */
u8 optee_en; /* Nonzero if OP-TEE f/w is active */
+ u8 no_page0; /* Nonzero if register page 0 is not controlled by Linux */
bool pr_support; /* RNG prediction resistance available */
int secvio_irq; /* Security violation interrupt number */
int virt_en; /* Virtualization enabled in CAAM */
--=20
2.49.0
Return-Path: <linux-kernel+bounces-665652-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 0248541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:44:30 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id D690C3BE842
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:43:47 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 12BCE28AAE9;
Wed, 28 May 2025 14:43:19 +0000 (UTC)
Received: from mail.actia.se (mail.actia.se [212.181.117.226])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B64F1289E33;
Wed, 28 May 2025 14:43:16 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.181.117.226
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443398; cv=none; b=X27pS3tOhHUse72KpJRFX7aWyL0/SsVKGEIGPk/fB9ta6hoL99pwaK239kh+WUmVsJ7pk0Y0kzqwzAfntmi0wT5AdtNaY8ZISOHMMuVbTpSwJdMO4jVTv1BoROV7x/0AE0a1Q7R/4TKNXSktcLdTwKru3v0NEuZ9Rc9WT5B6WD4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443398; c=relaxed/simple;
bh=W0xV6EzExbkEJOL/y+gejGBDzr+C+HIce0XGvVtJSLE=;
h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To:
Content-Type:MIME-Version; b=FOpbMs2H36WutCIbBgy8krpVhD+QrQ8PkBac336BlYlG332usPYY9oirYc0zfob6cjifp5GKWiyFjf9KoURrydcXPK79Np0pmjJ0wFGLiaD7syNnJmgcU8ZHuhY1+np1J7rOsBFd41wenJGWGICBCgrHu2G40VIqrpe4gsopg6E=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=actia.se; spf=pass smtp.mailfrom=actia.se; arc=none smtp.client-ip=212.181.117.226
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=actia.se
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=actia.se
Received: from S036ANL.actianordic.se (10.12.31.117) by S035ANL.actianordic.se
(10.12.31.116) with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 28 May
2025 16:43:08 +0200
Received: from S036ANL.actianordic.se ([fe80::e13e:1feb:4ea6:ec69]) by
S036ANL.actianordic.se ([fe80::e13e:1feb:4ea6:ec69%3]) with mapi id
15.01.2507.039; Wed, 28 May 2025 16:43:08 +0200
From: John Ernberg <john.ernberg@xxxxxxxx>
To: =?utf-8?B?SG9yaWEgR2VhbnTEgw==?= <horia.geanta@xxxxxxx>, Pankaj Gupta
<pankaj.gupta@xxxxxxx>, Gaurav Jain <gaurav.jain@xxxxxxx>, Herbert Xu
<herbert@xxxxxxxxxxxxxxxxxxx>, "David S . Miller" <davem@xxxxxxxxxxxxx>, "Rob
Herring" <robh@xxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>, "Conor
Dooley" <conor+dt@xxxxxxxxxx>, Shawn Guo <shawnguo@xxxxxxxxxx>, Sascha Hauer
<s.hauer@xxxxxxxxxxxxxx>
CC: Frank Li <Frank.li@xxxxxxx>, Pengutronix Kernel Team
<kernel@xxxxxxxxxxxxxx>, Fabio Estevam <festevam@xxxxxxxxx>, Thomas Richard
<thomas.richard@xxxxxxxxxxx>, "linux-crypto@xxxxxxxxxxxxxxx"
<linux-crypto@xxxxxxxxxxxxxxx>, "devicetree@xxxxxxxxxxxxxxx"
<devicetree@xxxxxxxxxxxxxxx>, "linux-kernel@xxxxxxxxxxxxxxx"
<linux-kernel@xxxxxxxxxxxxxxx>, "imx@xxxxxxxxxxxxxxx" <imx@xxxxxxxxxxxxxxx>,
"linux-arm-kernel@xxxxxxxxxxxxxxxxxxx"
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>, John Ernberg <john.ernberg@xxxxxxxx>
Subject: [PATCH v3 4/4] arm64: dts: freescale: imx8qxp/imx8qm: Add CAAM
support
Thread-Topic: [PATCH v3 4/4] arm64: dts: freescale: imx8qxp/imx8qm: Add CAAM
support
Thread-Index: AQHbz97Tt285JTpbTEmv8WU56gl5og==
Date: Wed, 28 May 2025 14:43:08 +0000
Message-ID: <20250528144259.2603914-5-john.ernberg@xxxxxxxx>
References: <20250528144259.2603914-1-john.ernberg@xxxxxxxx>
In-Reply-To: <20250528144259.2603914-1-john.ernberg@xxxxxxxx>
Accept-Language: en-US, sv-SE
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: git-send-email 2.49.0
x-esetresult: clean, is OK
x-esetid: 37303A2956B14453607C60
Content-Type: text/plain; charset="utf-8"
Content-ID: <0A8DC40C555BA24E83914717FD2E9602@xxxxxxxx>
Content-Transfer-Encoding: base64
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
RnJvbTogSG9yaWEgR2VhbnTEgyA8aG9yaWEuZ2VhbnRhQG54cC5jb20+DQoNClRoZSBpTVg4UVhQ
IGFuZCBpTVg4UU0gaGF2ZSBhIENBQU0gKENyeXB0b2dyYXBoaWMgQWNjZWxlcmF0aW9uIGFuZA0K
QXNzdXJhbmNlIE1vZHVsZSkgbGlrZSBtYW55IG90aGVyIGlNWHMuDQoNCkFkZCB0aGUgZGVmaW5p
dGlvbnMgZm9yIGl0Lg0KDQpKb2IgUmluZ3MgMCBhbmQgMSBhcmUgYm91bmQgdG8gdGhlIFNFQ08g
KFNlY3VyaXR5IENvbnRyb2xsZXIpIEFSTSBjb3JlDQphbmQgYXJlIG5vdCBleHBvc2VkIG91dHNp
ZGUgaXQuIFRoZXJlJ3Mgbm8gcG9pbnQgdG8gZGVmaW5lIHRoZW0gaW4gdGhlDQpiaW5kaW5ncyBh
cyB0aGV5IGNhbm5vdCBiZSB1c2VkIG91dHNpZGUgdGhlIFNFQ08uDQoNClNpZ25lZC1vZmYtYnk6
IEhvcmlhIEdlYW50xIMgPGhvcmlhLmdlYW50YUBueHAuY29tPg0KW2plcm5iZXJnOiBDb21taXQg
bWVzc2FnZSwgZml4ZWQgZHRic19jaGVjayB3YXJuaW5ncywgdHJpbW1lZCBtZW1vcnkgcmFuZ2Vz
XQ0KU2lnbmVkLW9mZi1ieTogSm9obiBFcm5iZXJnIDxqb2huLmVybmJlcmdAYWN0aWEuc2U+DQoN
Ci0tLQ0KDQpJbXBvcnRlZCBmcm9tIE5YUCB0cmVlLCB0cmltbWVkIGRvd24gYW5kIGZpeGVkIHRo
ZSBkdGJzX2NoZWNrIHdhcm5pbmdzLg0KQ29uc3RyYWluZWQgdGhlIHJhbmdlcyB0byB0aGUgbmVl
ZGVkIG9uZXMuDQpDaGFuZ2VkIHRoZSBjb21taXQgbWVzc2FnZS4NCk9yaWdpbmFsIGhlcmU6IGh0
dHBzOi8vZ2l0aHViLmNvbS9ueHAtaW14L2xpbnV4LWlteC9jb21taXQvNjk5ZTU0YjM4NmNiOWI1
M2RlZjQwMTc5OGQwYTRlNjQ2MTA1NTgzZA0KDQotLS0NCg0KdjM6DQogLSBubyBjaGFuZ2VzDQoN
CnYyOg0KIC0gVXNlIG5ldyBjb21wYXRpYmxlcyBpbnRyb2R1Y2VkIGluIDMvNCAoRnJhbmsgTGkp
DQotLS0NCiAuLi4vYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3Mtc2VjdXJpdHkuZHRzaSAgfCAz
OCArKysrKysrKysrKysrKysrKysrDQogYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14
OHFtLmR0c2kgICAgIHwgIDEgKw0KIGFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhx
eHAuZHRzaSAgICB8ICAxICsNCiAzIGZpbGVzIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKykNCiBj
cmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1z
ZWN1cml0eS5kdHNpDQoNCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2Fs
ZS9pbXg4LXNzLXNlY3VyaXR5LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9p
bXg4LXNzLXNlY3VyaXR5LmR0c2kNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw
MDAwMDAuLjllY2FiYjJkMDNlOQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvYXJjaC9hcm02NC9ib290
L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1zZWN1cml0eS5kdHNpDQpAQCAtMCwwICsxLDM4IEBADQor
Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArDQorLyoNCisgKiBDb3B5cmlnaHQg
MjAxOSBOWFANCisgKi8NCisNCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZmlybXdhcmUvaW14L3Jz
cmMuaD4NCisNCitzZWN1cml0eV9zdWJzeXM6IGJ1c0AzMTQwMDAwMCB7DQorCWNvbXBhdGlibGUg
PSAic2ltcGxlLWJ1cyI7DQorCSNhZGRyZXNzLWNlbGxzID0gPDE+Ow0KKwkjc2l6ZS1jZWxscyA9
IDwxPjsNCisJcmFuZ2VzID0gPDB4MzE0MDAwMDAgMHgwIDB4MzE0MDAwMDAgMHg5MDAwMD47DQor
DQorCWNyeXB0bzogY3J5cHRvQDMxNDAwMDAwIHsNCisJCWNvbXBhdGlibGUgPSAiZnNsLGlteDhx
bS1jYWFtIiwgImZzbCxzZWMtdjQuMCI7DQorCQlyZWcgPSA8MHgzMTQwMDAwMCAweDkwMDAwPjsN
CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNDggSVJRX1RZUEVfTEVWRUxfSElHSD47DQorCQkj
YWRkcmVzcy1jZWxscyA9IDwxPjsNCisJCSNzaXplLWNlbGxzID0gPDE+Ow0KKwkJcmFuZ2VzID0g
PDAgMHgzMTQwMDAwMCAweDkwMDAwPjsNCisJCWZzbCxzZWMtZXJhID0gPDk+Ow0KKwkJcG93ZXIt
ZG9tYWlucyA9IDwmcGQgSU1YX1NDX1JfQ0FBTV9KUjI+Ow0KKw0KKwkJc2VjX2pyMjoganJAMzAw
MDAgew0KKwkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDhxbS1qb2ItcmluZyIsICJmc2wsc2VjLXY0
LjAtam9iLXJpbmciOw0KKwkJCXJlZyA9IDwweDMwMDAwIDB4MTAwMDA+Ow0KKwkJCWludGVycnVw
dHMgPSA8R0lDX1NQSSA0NTMgSVJRX1RZUEVfTEVWRUxfSElHSD47DQorCQkJcG93ZXItZG9tYWlu
cyA9IDwmcGQgSU1YX1NDX1JfQ0FBTV9KUjI+Ow0KKwkJfTsNCisNCisJCXNlY19qcjM6IGpyQDQw
MDAwIHsNCisJCQljb21wYXRpYmxlID0gImZzbCxpbXg4cW0tam9iLXJpbmciLCAiZnNsLHNlYy12
NC4wLWpvYi1yaW5nIjsNCisJCQlyZWcgPSA8MHg0MDAwMCAweDEwMDAwPjsNCisJCQlpbnRlcnJ1
cHRzID0gPEdJQ19TUEkgNDU0IElSUV9UWVBFX0xFVkVMX0hJR0g+Ow0KKwkJCXBvd2VyLWRvbWFp
bnMgPSA8JnBkIElNWF9TQ19SX0NBQU1fSlIzPjsNCisJCX07DQorCX07DQorfTsNCmRpZmYgLS1n
aXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0uZHRzaSBiL2FyY2gvYXJt
NjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS5kdHNpDQppbmRleCA2ZmEzMWJjOWVjZTguLjZk
ZjAxODY0M2YyMCAxMDA2NDQNCi0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lt
eDhxbS5kdHNpDQorKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0uZHRz
aQ0KQEAgLTYxMiw2ICs2MTIsNyBAQCB2cHVfZHNwOiBkc3BANTU2ZTgwMDAgew0KIAl9Ow0KIA0K
IAkvKiBzb3J0ZWQgaW4gcmVnaXN0ZXIgYWRkcmVzcyAqLw0KKwkjaW5jbHVkZSAiaW14OC1zcy1z
ZWN1cml0eS5kdHNpIg0KIAkjaW5jbHVkZSAiaW14OC1zcy1jbTQxLmR0c2kiDQogCSNpbmNsdWRl
ICJpbXg4LXNzLWF1ZGlvLmR0c2kiDQogCSNpbmNsdWRlICJpbXg4LXNzLXZwdS5kdHNpIg0KZGlm
ZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxeHAuZHRzaSBiL2Fy
Y2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxeHAuZHRzaQ0KaW5kZXggMDUxMzgzMjZm
MGE1Li5lMTQwMTU1ZDY1YzYgMTAwNjQ0DQotLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVz
Y2FsZS9pbXg4cXhwLmR0c2kNCisrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lt
eDhxeHAuZHRzaQ0KQEAgLTMyMSw2ICszMjEsNyBAQCBtYXAwIHsNCiAJLyogc29ydGVkIGluIHJl
Z2lzdGVyIGFkZHJlc3MgKi8NCiAJI2luY2x1ZGUgImlteDgtc3MtaW1nLmR0c2kiDQogCSNpbmNs
dWRlICJpbXg4LXNzLXZwdS5kdHNpIg0KKwkjaW5jbHVkZSAiaW14OC1zcy1zZWN1cml0eS5kdHNp
Ig0KIAkjaW5jbHVkZSAiaW14OC1zcy1jbTQwLmR0c2kiDQogCSNpbmNsdWRlICJpbXg4LXNzLWdw
dTAuZHRzaSINCiAJI2luY2x1ZGUgImlteDgtc3MtYWRtYS5kdHNpIg0KLS0gDQoyLjQ5LjANCg==
Return-Path: <linux-kernel+bounces-665653-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id EF5F641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:45:38 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id BE1721BA1B91
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:45:51 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id A94A71DE3A4;
Wed, 28 May 2025 14:45:30 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="HI6pUFuM"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0CFDF22339
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:45:27 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443529; cv=none; b=DFJQoz0XdpGHFuFOJY2sl9eDjRkChI6VpDOaKiackdoP4fM2xu5AlGJa/U19QVF0wlzkUX0rYPsGCHmwYpy2c6WFL6Za0O6AeVwkTh8TLb55lA0To9zr7jjxlgFJoxaXoU5DfUFK9tT7hZB8VUFJykj9Kaeib7VHq3BbdSf38sg=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443529; c=relaxed/simple;
bh=pmJnWyaWtacG4qA9MnSrkri+m0ZViEInoNhsLA5VOO8=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=ESH7kcVyWYKnL4VrY+n9p9v8wuAWEd8/AiY0W9URtWr6RklDl4MdRynlC37ha/rJSyPZ5e3n2OKfyufu1ctLK4EIQjPOaNIYSigbl/WnxnLMQQWTdK3E8c0YGgjkTcCbngSdHb+IK0y5dMh/V528Es10AUlBNQsoA8JLdeuLNdo=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=HI6pUFuM; arc=none smtp.client-ip=170.10.133.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748443527;
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:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references:autocrypt:autocrypt;
bh=8NsMEdT9aL0A0o+tflXH9VCdZUeVOkrNj4UYHGNir0U=;
b=HI6pUFuM+jKPLUR6IlTJ7TOlx2d1jJUoIeNVwCI+sCYO056Fu9ZxkPtQhwJHqC5PCF0gzD
T8MGsaGitOHHVjaV7I9wKfQW2aYtCdI5rt5J3HWYp2VzVAhWQm3jdyaCYoygqQlY3tVkSw
wAQgA5jYoJqHmZHGZR/K1JiFld2b/fI=
Received: from mail-qv1-f71.google.com (mail-qv1-f71.google.com
[209.85.219.71]) by relay.mimecast.com with ESMTP with STARTTLS
(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
us-mta-410-kdK8cEuDNQ-oSrS-7Dsnow-1; Wed, 28 May 2025 10:45:25 -0400
X-MC-Unique: kdK8cEuDNQ-oSrS-7Dsnow-1
X-Mimecast-MFC-AGG-ID: kdK8cEuDNQ-oSrS-7Dsnow_1748443525
Received: by mail-qv1-f71.google.com with SMTP id 6a1803df08f44-6faa5bef30bso61477326d6.3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 07:45:25 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748443525; x=1749048325;
h=content-transfer-encoding:in-reply-to:autocrypt:from
:content-language:references:cc:to:subject:user-agent:mime-version
:date:message-id:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=8NsMEdT9aL0A0o+tflXH9VCdZUeVOkrNj4UYHGNir0U=;
b=LlI+H+0PoV2UegM0vicM8pIJLA0flRT5Q45/PdCIEw86ADZrhH9S/tRpbmvJYQU0zB
IsVY0Q1GkmBDfin8wPdfYBWpupGEy/zprhloYmdMkjKfBHPiKz/D2Z3bn8q6edPW4Oe6
mawwLiJNiNcRfVp4Yx/fBxY/OFxcAIgQD7HV8AAIt9dzszpvqWlY9W4lxFpveLr3JKvz
HZSLQhlkqD7LaWKDs2xvcdZHUrDblMztQzGfV9OO58yeq3UF0lJ776dmNZs5K2+Rb2ua
d3zdeVfdUEKPAu+yOB+bKcsTQY2OYnn6I+Rp1ahvA8EoyPS0CfabQjp6WW6AMnmoUv9I
xLkA==
X-Gm-Message-State: AOJu0YwGML+iYWT4UcGeM9lbl3JuNYGuzAFbE5jR3It0stVhpMc+kd9z
zX0ouM2wVBuhX6N3v4GWoWSEQ7HBmvDpF0vcimC+cnXaGtWeHLWDkIp/9XLap7EJaqhG+uLWgIe
u/GSRmvIUWihpL4/XCVwtxzrXZKAyWEOe9ldEvsSyJ27DblM+5qkaqItqqxdXlSs1yA==
X-Gm-Gg: ASbGnctihVdt2gL24yx+6akf3aqRKQ1GqeyjkYiOoDzCOos44zeqaltjGl/gN/qPDbU
ymB/5BvqpmVlHyLetg+blRgSBjiuZHp8aL/rdbKYgkroE6ODzw7My84H4XpJeuFska8uol2pXe8
G6olwHy+8So5aaeGVNODpRyIQCRtE+Zsa0nHUTWkmmml9IFKdlOUmc1NXvlZLEORBryWNuOQRe9
xD813Ubq47dKmRsZ6tmORSEsIhGmYhE83SUNPU8MJoYJnV0JqfpVaXHHCVBMGBlXjOXvCzAIgib
99/7VsZs9cR8AAMQDCaquSPN6Cujk8gIc+8XiLkLNcHB/HTj5jJlxe6sGZdyDAt8hl0=
X-Received: by 2002:a05:6214:20e5:b0:6fa:9b5e:f1d1 with SMTP id 6a1803df08f44-6fa9d2954d2mr264243056d6.24.1748443524815;
Wed, 28 May 2025 07:45:24 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IEjuC/6+FGCtr2tyOGkUY41luUxvRRwiJGQ2hOzrBdgImVPVlnSyRIaLJNcGzFhoJ53ssTsYA==
X-Received: by 2002:a05:6214:20e5:b0:6fa:9b5e:f1d1 with SMTP id 6a1803df08f44-6fa9d2954d2mr264242576d6.24.1748443524365;
Wed, 28 May 2025 07:45:24 -0700 (PDT)
Received: from [192.168.1.17] (pool-68-160-160-85.bstnma.fios.verizon.net. [68.160.160.85])
by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6fac0b22361sm7140546d6.2.2025.05.28.07.45.23
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 07:45:23 -0700 (PDT)
Message-ID: <88a28ee7-ec83-4925-9cae-085b0dcc78fe@xxxxxxxxxx>
Date: Wed, 28 May 2025 10:45:22 -0400
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH v2 49/62] kbuild,objtool: Defer objtool validation step
for CONFIG_LIVEPATCH
To: Josh Poimboeuf <jpoimboe@xxxxxxxxxx>, x86@xxxxxxxxxx
Cc: linux-kernel@xxxxxxxxxxxxxxx, Petr Mladek <pmladek@xxxxxxxx>,
Miroslav Benes <mbenes@xxxxxxx>, live-patching@xxxxxxxxxxxxxxx,
Song Liu <song@xxxxxxxxxx>, laokz <laokz@xxxxxxxxxxx>,
Jiri Kosina <jikos@xxxxxxxxxx>, Marcos Paulo de Souza <mpdesouza@xxxxxxxx>,
Weinan Liu <wnliu@xxxxxxxxxx>, Fazla Mehrab <a.mehrab@xxxxxxxxxxxxx>,
Chen Zhongjin <chenzhongjin@xxxxxxxxxx>, Puranjay Mohan <puranjay@xxxxxxxxxx>
References: <cover.1746821544.git.jpoimboe@xxxxxxxxxx>
<0a12cca631dd6f4c55015e224acefb641b3824ce.1746821544.git.jpoimboe@xxxxxxxxxx>
Content-Language: en-US
From: Joe Lawrence <joe.lawrence@xxxxxxxxxx>
Autocrypt: addr=joe.lawrence@xxxxxxxxxx; keydata=
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
pNzsRQ==
In-Reply-To: <0a12cca631dd6f4c55015e224acefb641b3824ce.1746821544.git.jpoimboe@xxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 5/9/25 4:17 PM, Josh Poimboeuf wrote:
> In preparation for the objtool klp diff subcommand, defer objtool
> validation for CONFIG_LIVEPATCH until the final pre-link archive (e.g.,
> vmlinux.o, module-foo.o) is built. This will simplify the process of
> generating livepatch modules.
>
> Delayed objtool is generally preferred anyway, and is already standard
> for IBT and LTO. Eventually the per-translation-unit mode will be
> phased out.
>
> Signed-off-by: Josh Poimboeuf <jpoimboe@xxxxxxxxxx>
> ---
> scripts/Makefile.lib | 2 +-
> scripts/link-vmlinux.sh | 3 ++-
> 2 files changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
> index bfd55a6ad8f1..a68390ff5cd9 100644
> --- a/scripts/Makefile.lib
> +++ b/scripts/Makefile.lib
> @@ -278,7 +278,7 @@ objtool-args = $(objtool-args-y) \
> $(if $(delay-objtool), --link) \
> $(if $(part-of-module), --module)
>
> -delay-objtool := $(or $(CONFIG_LTO_CLANG),$(CONFIG_X86_KERNEL_IBT))
> +delay-objtool := $(or $(CONFIG_LTO_CLANG),$(CONFIG_X86_KERNEL_IBT),$(CONFIG_LIVEPATCH))
>
> cmd_objtool = $(if $(objtool-enabled), ; $(objtool) $(objtool-args) $@)
> cmd_gen_objtooldep = $(if $(objtool-enabled), { echo ; echo '$@: $$(wildcard $(objtool))' ; } >> $(dot-target).cmd)
> diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
> index 51367c2bfc21..acffa3c935f2 100755
> --- a/scripts/link-vmlinux.sh
> +++ b/scripts/link-vmlinux.sh
> @@ -60,7 +60,8 @@ vmlinux_link()
> # skip output file argument
> shift
>
> - if is_enabled CONFIG_LTO_CLANG || is_enabled CONFIG_X86_KERNEL_IBT; then
> + if is_enabled CONFIG_LTO_CLANG || is_enabled CONFIG_X86_KERNEL_IBT ||
> + is_enabled CONFIG_LIVEPATCH; then
> # Use vmlinux.o instead of performing the slow LTO link again.
> objs=vmlinux.o
> libs=
At this commit, I'm getting the following linker error on ppc64le:
ld -EL -m elf64lppc -z noexecstack --no-warn-rwx-segments -pie -z notext
--build-id=sha1 -X --orphan-handling=error
--script=./arch/powerpc/kernel/vmlinux.lds -o .tmp_vmlinux1
--whole-archive vmlinux.o .vmlinux.export.o init/version-timestamp.o
--no-whole-archive --start-group --end-group .tmp_vmlinux0.kallsyms.o
arch/powerpc/tools/vmlinux.arch.o
vmlinux.o:(__ftr_alt_97+0x20): relocation truncated to fit:
R_PPC64_REL14 against `.text'+4b54
vmlinux.o:(__ftr_alt_97+0x270): relocation truncated to fit:
R_PPC64_REL14 against `.text'+173ecc
* Note: I dropped ("[PATCH v2 45/62] x86/extable: Define ELF section
entry size for exception tables") since it doesn't build as per the
comment I left on that patch.
--
Joe
Return-Path: <linux-kernel+bounces-665654-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1359B41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:46:41 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id D310E4A09A5
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:46:38 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 2328528C2B6;
Wed, 28 May 2025 14:45:53 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="PhXEuso1"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0EAFB1C5485;
Wed, 28 May 2025 14:45:51 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443552; cv=none; b=WjQ8oyXPmcdjmisUvVS7WfBKW0Fi2vzsbo8WClfkPifVati9rLrLJRluA1sra3GgxNhXD5BLETl0QmN+FcWzeFbx4/RGBsMEp8UFl26rHO3OJYB8d9Of47IcbQNHgw/GDdgDZCi7FfjZzur4cvwMge8Vm4NJrOJfSJF8t7976lQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443552; c=relaxed/simple;
bh=5pMjgztKFg6Bo3bS0LIzfpMDgWFo5t3faxUx133uLyY=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:
In-Reply-To:To:Cc; b=bltFRWVzzVDueKrf8N71I5GG/apgDIY2D9wDjG6wHywOqj4Weo1KfVU4MtBgiK53qcusDSZGuNPQztvQYJNxzRqL9M6PyyLx3/aqOk8fBuY7q4mu8ZaQCWIjntWTEp4Y0OEIvtljpzTDtrQn3WfBklrWmcBxSeOvXq73CxflvLE=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PhXEuso1; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPS id 9E718C4CEED;
Wed, 28 May 2025 14:45:51 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748443551;
bh=5pMjgztKFg6Bo3bS0LIzfpMDgWFo5t3faxUx133uLyY=;
h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From;
b=PhXEuso1uBib7KZOBvQ5Y2w2bZqEYGg64LV0+kmO4Ts0in1b1KiyUdgB/2/jxxAU7
bThl9Ap7di5zzQy5CDwkN4APnOalu8ZlZoIVme9dPxjL+cFWZ8wnny2ohMr4Ms7RG+
7jBZScUGkwCmRDo7szamrQf57vkZXQp1jNXpgfggNilHSQKkkMOwTdE90709Qd5mRZ
FQ3VBA2qQc/uNWzmb7pdCUOw5ZKfrDNxhTGpkZGKNc1vvzUKs8E2sp8Uc+SDng66lP
KcadRqtDyD1KCzGSb/MlMUrie25vPusI16qWbhd/PyTk944IwmbIZRCX/2mhKBt4IO
dCZfW0aBmBvHA==
Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1])
by smtp.lore.kernel.org (Postfix) with ESMTP id 8C868C5AD49;
Wed, 28 May 2025 14:45:51 +0000 (UTC)
From: George Moussalem via B4 Relay <devnull+george.moussalem.outlook.com@xxxxxxxxxx>
Date: Wed, 28 May 2025 18:45:48 +0400
Subject: [PATCH v2 2/5] dt-bindings: net: qca,ar803x: Add IPQ5018 Internal
GE PHY support
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20250528-ipq5018-ge-phy-v2-2-dd063674c71c@xxxxxxxxxxx>
References: <20250528-ipq5018-ge-phy-v2-0-dd063674c71c@xxxxxxxxxxx>
In-Reply-To: <20250528-ipq5018-ge-phy-v2-0-dd063674c71c@xxxxxxxxxxx>
To: Andrew Lunn <andrew@xxxxxxx>, Heiner Kallweit <hkallweit1@xxxxxxxxx>,
Russell King <linux@xxxxxxxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>, Florian Fainelli <f.fainelli@xxxxxxxxx>,
Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>,
Bjorn Andersson <andersson@xxxxxxxxxx>,
Konrad Dybcio <konradybcio@xxxxxxxxxx>,
Michael Turquette <mturquette@xxxxxxxxxxxx>,
Stephen Boyd <sboyd@xxxxxxxxxx>
Cc: netdev@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-arm-msm@xxxxxxxxxxxxxxx,
linux-clk@xxxxxxxxxxxxxxx, George Moussalem <george.moussalem@xxxxxxxxxxx>
X-Mailer: b4 0.14.2
X-Developer-Signature: v=1; a=ed25519-sha256; t=1748443549; l=3491;
i=george.moussalem@xxxxxxxxxxx; s=20250321; h=from:subject:message-id;
bh=P7wjTTsDWLxWFS7rhrkYINOQIR4qqqVUnnCYcf/iIyE=;
b=YDiV2+Np/ub7nIMfml1CMK3k00v32bjdZk0DkA+kEO4xd8+B98bc0gPkH4YDPmDwV0YLmK3rV
2+4k2SIyP5HCdVcmHkiGZyu/xNMB4FBXV3X08FuX579lCTpvfafeuL+
X-Developer-Key: i=george.moussalem@xxxxxxxxxxx; a=ed25519;
pk=/PuRTSI9iYiHwcc6Nrde8qF4ZDhJBlUgpHdhsIjnqIk=
X-Endpoint-Received: by B4 Relay for george.moussalem@xxxxxxxxxxx/20250321
with auth_id=364
X-Original-From: George Moussalem <george.moussalem@xxxxxxxxxxx>
Reply-To: george.moussalem@xxxxxxxxxxx
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: George Moussalem <george.moussalem@xxxxxxxxxxx>
Document the IPQ5018 Internal Gigabit Ethernet PHY found in the IPQ5018
SoC. Its output pins provide an MDI interface to either an external
switch in a PHY to PHY link scenario or is directly attached to an RJ45
connector.
The PHY supports 10/100/1000 mbps link modes, CDT, auto-negotiation and
802.3az EEE.
For operation, the LDO controller found in the IPQ5018 SoC for which
there is provision in the mdio-4019 driver. In addition, the PHY needs
to take itself out of reset and enable the RX and TX clocks.
Two common archictures across IPQ5018 boards are:
1. IPQ5018 PHY --> MDI --> RJ45 connector
2. IPQ5018 PHY --> MDI --> External PHY
In a phy to phy architecture, DAC values need to be set to accommodate
for the short cable length. As such, add an optional boolean property so
the driver sets the correct register values for the DAC accordingly.
Signed-off-by: George Moussalem <george.moussalem@xxxxxxxxxxx>
---
.../devicetree/bindings/net/qca,ar803x.yaml | 52 +++++++++++++++++++++-
1 file changed, 51 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/net/qca,ar803x.yaml b/Documentation/devicetree/bindings/net/qca,ar803x.yaml
index 3acd09f0da863137f8a05e435a1fd28a536c2acd..de0c26f59babf0b7020d7a1d54229005822d5472 100644
--- a/Documentation/devicetree/bindings/net/qca,ar803x.yaml
+++ b/Documentation/devicetree/bindings/net/qca,ar803x.yaml
@@ -14,10 +14,41 @@ maintainers:
description: |
Bindings for Qualcomm Atheros AR803x PHYs
-allOf:
+oneOf:
- $ref: ethernet-phy.yaml#
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - ethernet-phy-id004d.d0c0
+
+ then:
+ properties:
+ reg:
+ const: 7 # This PHY is always at MDIO address 7 in the IPQ5018 SoC
+ clocks:
+ items:
+ - description: RX clock
+ - description: TX clock
+ resets:
+ items:
+ - description:
+ GE PHY MISC reset which triggers a reset across MDC, DSP, RX, and TX lines.
+ qcom,dac-preset-short-cable:
+ description:
+ Set if this phy is connected to another phy to adjust the values for
+ MDAC and EDAC to adjust amplitude, bias current settings, and error
+ detection and correction algorithm to accommodate for short cable length.
+ If not set, it is assumed the MDI output pins of this PHY are directly
+ connected to an RJ45 connector and default DAC values will be used.
+ type: boolean
properties:
+ compatible:
+ enum:
+ - ethernet-phy-id004d.d0c0
+
qca,clk-out-frequency:
description: Clock output frequency in Hertz.
$ref: /schemas/types.yaml#/definitions/uint32
@@ -132,3 +163,22 @@ examples:
};
};
};
+ - |
+ #include <dt-bindings/clock/qcom,gcc-ipq5018.h>
+ #include <dt-bindings/reset/qcom,gcc-ipq5018.h>
+
+ mdio {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ /* add alias to set qcom,dac-preset-short-cable on boards that need it */
+ ge_phy: ethernet-phy@7 {
+ compatible = "ethernet-phy-id004d.d0c0";
+ reg = <7>;
+
+ clocks = <&gcc GCC_GEPHY_RX_CLK>,
+ <&gcc GCC_GEPHY_TX_CLK>;
+
+ resets = <&gcc GCC_GEPHY_MISC_ARES>;
+ };
+ };
--
2.49.0
Return-Path: <linux-kernel+bounces-665655-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id B699141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:46:45 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id E90D61BA4CCD
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:46:51 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 1D4F528C2B5;
Wed, 28 May 2025 14:45:53 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="cNxar7ja"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0EBB91CD21C;
Wed, 28 May 2025 14:45:51 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443552; cv=none; b=fom9FDxeIyz+GpB+Kid5+EJM5NOYx/oSH5eBJGrVIjjrC4JRC+4rkxcAp8LC+WLVKgkcRReUoeVxr6yg4Z9jWx5qe0h4Bm39NRkzCP70lrYYMcbXh5ZvBy6aUvpBUzJol2NM89U+x6ZRobaVKo8pyMes7Ab7BolvxlSJJx9sfH0=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443552; c=relaxed/simple;
bh=mcxHScRRpkp4Uu2d9/8fUpUC++QWS+mrt+7i0BGybRw=;
h=From:Subject:Date:Message-Id:MIME-Version:Content-Type:To:Cc; b=NaF5m1uO8/YhKKShnXQ2A671L8tArPeZoKOmQVF4inxpnNUCxf39L3bJHyJW+Ga87EN7MA7kXf0e9Zx75DVl7RBoW9cr++m9zg/S3BRd5QaKs/fQ0y8La32nclzl3JW78kgS+c6+29XQ2HspQ2X3JtqAOpx4OFsyFVOzjEHTwuc=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cNxar7ja; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPS id 7D5E1C4CEE3;
Wed, 28 May 2025 14:45:51 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748443551;
bh=mcxHScRRpkp4Uu2d9/8fUpUC++QWS+mrt+7i0BGybRw=;
h=From:Subject:Date:To:Cc:Reply-To:From;
b=cNxar7jauXnukzP9wHTPQvY9aZbUDCBDtwkvaqzNAZV978+r2bTUKV+EivkasdSJc
Skc3x5nJJZUVFM9yoSfs/9QHCTN9WSFOOAsE7fDrX8LPDxWMMThvlsmAH+hm0+eD2v
h3i5Y8Z7RQ3glWMoMRHirmg6PM8u95vTVYf4SPQBbIntom+ZHUbNMx6L69qtvEyYiy
PsKwSiue9aIXJD4Zr/JIr1Q87ENu8N4CfbVmpl+PAFGHvR/hhsuG3oThLaSv3/Lain
ColKAKoZNelWuolMdgaXvCIgcaTzVmekXDhbnaYwmWq+DEk+AC32VhGRdnTe0cISot
DXnYLfrjvSYIA==
Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1])
by smtp.lore.kernel.org (Postfix) with ESMTP id 68289C3ABB2;
Wed, 28 May 2025 14:45:51 +0000 (UTC)
From: George Moussalem via B4 Relay <devnull+george.moussalem.outlook.com@xxxxxxxxxx>
Subject: [PATCH v2 0/5] Add support for the IPQ5018 Internal GE PHY
Date: Wed, 28 May 2025 18:45:46 +0400
Message-Id: <20250528-ipq5018-ge-phy-v2-0-dd063674c71c@xxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
X-B4-Tracking: v=1; b=H4sIAJohN2gC/13MQQ6CMBCF4auQWVtTSscQV97DsCh0sBOVQouNh
HB3K+5c/jN53wqRAlOEc7FCoMSR/ZBDHQronBluJNjmBiUVSl1JweOEsqxF/oxuEbY9oTa90R1
ZyKMxUM/vHbw2uR3H2Ydl91P5vf4oVPhPpVJIYa1p6xo1Kawu/jU/vL8fO/+EZtu2D0swIkSuA
AAA
X-Change-ID: 20250430-ipq5018-ge-phy-db654afa4ced
To: Andrew Lunn <andrew@xxxxxxx>, Heiner Kallweit <hkallweit1@xxxxxxxxx>,
Russell King <linux@xxxxxxxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>, Florian Fainelli <f.fainelli@xxxxxxxxx>,
Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>,
Bjorn Andersson <andersson@xxxxxxxxxx>,
Konrad Dybcio <konradybcio@xxxxxxxxxx>,
Michael Turquette <mturquette@xxxxxxxxxxxx>,
Stephen Boyd <sboyd@xxxxxxxxxx>
Cc: netdev@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-arm-msm@xxxxxxxxxxxxxxx,
linux-clk@xxxxxxxxxxxxxxx, George Moussalem <george.moussalem@xxxxxxxxxxx>
X-Mailer: b4 0.14.2
X-Developer-Signature: v=1; a=ed25519-sha256; t=1748443549; l=2668;
i=george.moussalem@xxxxxxxxxxx; s=20250321; h=from:subject:message-id;
bh=mcxHScRRpkp4Uu2d9/8fUpUC++QWS+mrt+7i0BGybRw=;
b=6y1+mzVRoK34jBTmE2aoRxLBA16LvQBIi3RENJ/8xDnL4keYU/GcoKnpIA+UdpJPgWJyYlRlE
Qb7IoK10bvVBmW1HkRfAgHHcx9uQPPwmzvUx/ftcpq56uxRbl0/XvF6
X-Developer-Key: i=george.moussalem@xxxxxxxxxxx; a=ed25519;
pk=/PuRTSI9iYiHwcc6Nrde8qF4ZDhJBlUgpHdhsIjnqIk=
X-Endpoint-Received: by B4 Relay for george.moussalem@xxxxxxxxxxx/20250321
with auth_id=364
X-Original-From: George Moussalem <george.moussalem@xxxxxxxxxxx>
Reply-To: george.moussalem@xxxxxxxxxxx
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
The IPQ5018 SoC contains an internal Gigabit Ethernet PHY with its
output pins that provide an MDI interface to either an external switch
in a PHY to PHY link architecture or directly to an attached RJ45
connector.
The PHY supports 10/100/1000 mbps link modes, CDT, auto-negotiation and
802.3az EEE.
The LDO controller found in the IPQ5018 SoC needs to be enabled to drive
power to the CMN Ethernet Block (CMN BLK) which the GE PHY depends on.
The LDO must be enabled in TCSR by writing to a specific register.
In a phy to phy architecture, DAC values need to be set to accommodate
for the short cable length.
Signed-off-by: George Moussalem <george.moussalem@xxxxxxxxxxx>
---
Changes in v2:
- Moved values for MDAC and EDAC into the driver and converted DT
property qca,dac to a new boolean: qcom,dac-preset-short-cable as per
discussion.
- Added compatible string along with a condition with a description of
properties including clocks, resets, and qcom,dac-preset-short-cable
in the bindings to address bindings issues reported by Rob and to
bypass restrictions on nr of clocks and resets in ethernet-phy.yaml
- Added example to bindings file
- Renamed all instances of IPQ5018_PHY_MMD3* macros to IPQ5018_PHY_PCS*
- Removed qca,eth-ldo-ready property and moved the TCSR register to the
mdio bus the phy is on as there's already support for setting this reg
property in the mdio-ipq4019 driver as per commit:
23a890d493e3ec1e957bc925fabb120962ae90a7
- Explicitly probe on PHY ID as otherwise the PHY wouldn't come up and
initialize as found during further testing when the kernel is flashed
to NAND
- Link to v1: https://lore.kernel.org/r/20250525-ipq5018-ge-phy-v1-0-ddab8854e253@xxxxxxxxxxx
---
George Moussalem (5):
clk: qcom: gcc-ipq5018: fix GE PHY reset
dt-bindings: net: qca,ar803x: Add IPQ5018 Internal GE PHY support
net: phy: qcom: at803x: Add Qualcomm IPQ5018 Internal PHY support
arm64: dts: qcom: ipq5018: Add MDIO buses
arm64: dts: qcom: ipq5018: Add GE PHY to internal mdio bus
.../devicetree/bindings/net/qca,ar803x.yaml | 52 +++++-
arch/arm64/boot/dts/qcom/ipq5018.dtsi | 51 +++++-
drivers/clk/qcom/gcc-ipq5018.c | 2 +-
drivers/net/phy/qcom/Kconfig | 2 +-
drivers/net/phy/qcom/at803x.c | 197 ++++++++++++++++++++-
5 files changed, 291 insertions(+), 13 deletions(-)
---
base-commit: ebfff09f63e3efb6b75b0328b3536d3ce0e26565
change-id: 20250430-ipq5018-ge-phy-db654afa4ced
Best regards,
--
George Moussalem <george.moussalem@xxxxxxxxxxx>
Return-Path: <linux-kernel+bounces-665658-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 0FE2541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:46:53 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id F3D9717E047
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:46:47 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 6C34328C5A7;
Wed, 28 May 2025 14:45:53 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="bu3Ddp2k"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 44FC728B419;
Wed, 28 May 2025 14:45:52 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443552; cv=none; b=saULwrNKzQQJk4UWpQxD3CrmirwOi00l44i12xjeddd8/4Q/5fln5d6RbF3bsyIlCeBYGWi42AFHR2Owbxj3neVQMr6C7XqTgU776IzjICfVa/faa41RSnMK36RgzF3QhNEwgpJp6zo7LNIb8ICwiz5xpBVcZauUBwaZcpbrP5I=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443552; c=relaxed/simple;
bh=fY+l6Ps6NFjPp8H1FTNbFmkXe5TI6m53tpp5kLmq6ks=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:
In-Reply-To:To:Cc; b=I96Y0IdtRVUycnvEUWFO+eTk7PuwqZe41RduFCFVojT4I9ykRTEorYTLS9jsxj3xdI65BuihmoyzVICND3SM2e+h89ESSs05ePvldqq0Zlkzwc/+8GDWSYf3rZxMErighWSpg1UM/Ni0AvzufOCoZs3GnYCXxtX8Mf6lovozCaA=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bu3Ddp2k; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPS id C9514C4CEEF;
Wed, 28 May 2025 14:45:51 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748443551;
bh=fY+l6Ps6NFjPp8H1FTNbFmkXe5TI6m53tpp5kLmq6ks=;
h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From;
b=bu3Ddp2ka9q5DyNFUz9Mr98I1vQjHBAMtfVqGyF929IZjna3PpCXfPW/VwbNJ0qRZ
C46gIGhwpc/Ow5CzMuvFlM+wEH+hEXZfU5bl5Z+aKTUKNEH29R4gwUvciW0fezeVsi
J5+pe4Q2PcMoL/XQstlE/1NnstuLUxDfgRFrTxaOCk41tdQV5+5owQo/z/Gz3sUEn2
2A477zqYoxACEfzzRAeKnwVJYOcmecknZ12dIMbqYrUD/RTvSMeH9t+b0wrZBNUdMg
iw5L5cSItk/hbHofdgkK7BzB/8YU9oBos930OF2MG1ITz/upkw3m/M4e9iiw8Tgwvg
wxarXmu2prKvg==
Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1])
by smtp.lore.kernel.org (Postfix) with ESMTP id BF04BC5B552;
Wed, 28 May 2025 14:45:51 +0000 (UTC)
From: George Moussalem via B4 Relay <devnull+george.moussalem.outlook.com@xxxxxxxxxx>
Date: Wed, 28 May 2025 18:45:51 +0400
Subject: [PATCH v2 5/5] arm64: dts: qcom: ipq5018: Add GE PHY to internal
mdio bus
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20250528-ipq5018-ge-phy-v2-5-dd063674c71c@xxxxxxxxxxx>
References: <20250528-ipq5018-ge-phy-v2-0-dd063674c71c@xxxxxxxxxxx>
In-Reply-To: <20250528-ipq5018-ge-phy-v2-0-dd063674c71c@xxxxxxxxxxx>
To: Andrew Lunn <andrew@xxxxxxx>, Heiner Kallweit <hkallweit1@xxxxxxxxx>,
Russell King <linux@xxxxxxxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>, Florian Fainelli <f.fainelli@xxxxxxxxx>,
Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>,
Bjorn Andersson <andersson@xxxxxxxxxx>,
Konrad Dybcio <konradybcio@xxxxxxxxxx>,
Michael Turquette <mturquette@xxxxxxxxxxxx>,
Stephen Boyd <sboyd@xxxxxxxxxx>
Cc: netdev@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-arm-msm@xxxxxxxxxxxxxxx,
linux-clk@xxxxxxxxxxxxxxx, George Moussalem <george.moussalem@xxxxxxxxxxx>
X-Mailer: b4 0.14.2
X-Developer-Signature: v=1; a=ed25519-sha256; t=1748443549; l=2303;
i=george.moussalem@xxxxxxxxxxx; s=20250321; h=from:subject:message-id;
bh=y1umjiNASV+etOSubDvR4l343800ONATOPkAQu4T8kA=;
b=kcj8aIQFIt/fW5UDnVZlEfilk6D5Bz84KOgRmYFPp4kkSwV9MLqq/D9RGVOla8XY9WTcrI+uB
EYMY9578cqCBb8V/l36iuGVB4YIVhdxWUZunRRJr1jwWxv0USERltjR
X-Developer-Key: i=george.moussalem@xxxxxxxxxxx; a=ed25519;
pk=/PuRTSI9iYiHwcc6Nrde8qF4ZDhJBlUgpHdhsIjnqIk=
X-Endpoint-Received: by B4 Relay for george.moussalem@xxxxxxxxxxx/20250321
with auth_id=364
X-Original-From: George Moussalem <george.moussalem@xxxxxxxxxxx>
Reply-To: george.moussalem@xxxxxxxxxxx
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: George Moussalem <george.moussalem@xxxxxxxxxxx>
The IPQ5018 SoC contains an internal GE PHY, always at phy address 7.
As such, let's add the GE PHY node to the SoC dtsi.
The LDO controller found in the SoC must be enabled to provide constant
low voltages to the PHY. The mdio-ipq4019 driver already has support
for this, so adding the appropriate TCSR register offset.
In addition, the GE PHY outputs both the RX and TX clocks to the GCC
which gate controls them and routes them back to the PHY itself.
So let's create two DT fixed clocks and register them in the GCC node.
Signed-off-by: George Moussalem <george.moussalem@xxxxxxxxxxx>
---
arch/arm64/boot/dts/qcom/ipq5018.dtsi | 29 ++++++++++++++++++++++++++---
1 file changed, 26 insertions(+), 3 deletions(-)
diff --git a/arch/arm64/boot/dts/qcom/ipq5018.dtsi b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
index 03ebc3e305b267c98a034c41ce47a39269afce75..6c42ed826c3c60960b08afb0b324cfb89f02329d 100644
--- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
@@ -16,6 +16,18 @@ / {
#size-cells = <2>;
clocks {
+ gephy_rx_clk: gephy-rx-clk {
+ compatible = "fixed-clock";
+ clock-frequency = <125000000>;
+ #clock-cells = <0>;
+ };
+
+ gephy_tx_clk: gephy-tx-clk {
+ compatible = "fixed-clock";
+ clock-frequency = <125000000>;
+ #clock-cells = <0>;
+ };
+
sleep_clk: sleep-clk {
compatible = "fixed-clock";
#clock-cells = <0>;
@@ -184,7 +196,8 @@ pcie0_phy: phy@86000 {
mdio0: mdio@88000 {
compatible = "qcom,ipq5018-mdio";
- reg = <0x00088000 0x64>;
+ reg = <0x00088000 0x64>,
+ <0x019475c4 0x4>;
#address-cells = <1>;
#size-cells = <0>;
@@ -192,6 +205,16 @@ mdio0: mdio@88000 {
clock-names = "gcc_mdio_ahb_clk";
status = "disabled";
+
+ ge_phy: ethernet-phy@7 {
+ compatible = "ethernet-phy-id004d.d0c0";
+ reg = <7>;
+
+ clocks = <&gcc GCC_GEPHY_RX_CLK>,
+ <&gcc GCC_GEPHY_TX_CLK>;
+
+ resets = <&gcc GCC_GEPHY_MISC_ARES>;
+ };
};
mdio1: mdio@90000 {
@@ -232,8 +255,8 @@ gcc: clock-controller@1800000 {
<&pcie0_phy>,
<&pcie1_phy>,
<0>,
- <0>,
- <0>,
+ <&gephy_rx_clk>,
+ <&gephy_tx_clk>,
<0>,
<0>;
#clock-cells = <1>;
--
2.49.0
Return-Path: <linux-kernel+bounces-665657-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D811641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:46:54 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id C63763A18CD
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:46:14 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 19FF428C2A9;
Wed, 28 May 2025 14:45:53 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="X7HZd+Ll"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0EB671C84B6;
Wed, 28 May 2025 14:45:51 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443552; cv=none; b=YwEqvDBfH0rkA5fFtx9mmj2/UOi+EwhsRMy4yp/JV+iD0DmpHRtLkc0icUZJSauKMi2xzYKp4OgBA4aSX6nk7lCwOHASHICs5oWPaOQt2h0yhwMkJJmS3OiHGa+ETT+jkcpU9BGVej2T18pBnE/Oeu755WrxpQVeKjvhQofhkCw=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443552; c=relaxed/simple;
bh=PEvKO/wryGgjZziPiEVFS4XnMJm6SAdt0loKuMnLA9A=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:
In-Reply-To:To:Cc; b=Cb7yEZJTKw4OjML5cz6SvONgOT2g3YjTLVCL4huuJcmdiKgis0wFXuIbqcPA0VTW2brchHNXCK8dxiGtoHSreejomtZU+DAwLSBTb5jLrNcWG7BgEjhUfE98tWq/pqcQRhSmZDv7tNsHbzH8zYjHQl4WHVx5uzURD/K4KDhSKfo=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=X7HZd+Ll; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPS id 8E100C4CEEE;
Wed, 28 May 2025 14:45:51 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748443551;
bh=PEvKO/wryGgjZziPiEVFS4XnMJm6SAdt0loKuMnLA9A=;
h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From;
b=X7HZd+Ll6udHHaRkGFj2oihkjy9Is68p5WdFt4+vGRMETR7GXP76MIg2Ozb+pdPLC
vVbjWD5TxYrD2Cb5u2yeVQq2gXlxR++PsNE26LaEkKu+afd4laG5ebenkf7vg59lZ1
bowfuLIrhnif7S85lOmaHWzosGGBLePLb8wGmqn/5ZP/OkvIcOlEx9a6Hyg64+0EXP
zeO3kA13boOFBuHsvzn1deG0NNkvJr1RE6mwa/nL0HwJX9cpa+wtcbuDUNX7q/mAMV
F3QE8vEmpMAENU3jX3eVbm9yAKYJ0EO0UEw2CvJn00BdKss0gU4G3tgawL9O04yAeh
gT0fLnFAQQ5iw==
Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1])
by smtp.lore.kernel.org (Postfix) with ESMTP id 7ACA8C5B543;
Wed, 28 May 2025 14:45:51 +0000 (UTC)
From: George Moussalem via B4 Relay <devnull+george.moussalem.outlook.com@xxxxxxxxxx>
Date: Wed, 28 May 2025 18:45:47 +0400
Subject: [PATCH v2 1/5] clk: qcom: gcc-ipq5018: fix GE PHY reset
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20250528-ipq5018-ge-phy-v2-1-dd063674c71c@xxxxxxxxxxx>
References: <20250528-ipq5018-ge-phy-v2-0-dd063674c71c@xxxxxxxxxxx>
In-Reply-To: <20250528-ipq5018-ge-phy-v2-0-dd063674c71c@xxxxxxxxxxx>
To: Andrew Lunn <andrew@xxxxxxx>, Heiner Kallweit <hkallweit1@xxxxxxxxx>,
Russell King <linux@xxxxxxxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>, Florian Fainelli <f.fainelli@xxxxxxxxx>,
Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>,
Bjorn Andersson <andersson@xxxxxxxxxx>,
Konrad Dybcio <konradybcio@xxxxxxxxxx>,
Michael Turquette <mturquette@xxxxxxxxxxxx>,
Stephen Boyd <sboyd@xxxxxxxxxx>
Cc: netdev@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-arm-msm@xxxxxxxxxxxxxxx,
linux-clk@xxxxxxxxxxxxxxx, George Moussalem <george.moussalem@xxxxxxxxxxx>
X-Mailer: b4 0.14.2
X-Developer-Signature: v=1; a=ed25519-sha256; t=1748443549; l=1149;
i=george.moussalem@xxxxxxxxxxx; s=20250321; h=from:subject:message-id;
bh=oIkUIGsEO4IxSACM3i9ZzN1oSf3eDEKLwbaKL+SIoYs=;
b=plBci8b7HYWaMG2G9Eb+G7+BUipdemJQtdLnwRhaIW7a2U+uloPVTxAQzgwBVkFZoRuft6kDd
u81Ysjr9Pi7ANUj9eLZlr8hLZ2KTDpxiQX/dsHbJrA9yUUWlCn4aXW5
X-Developer-Key: i=george.moussalem@xxxxxxxxxxx; a=ed25519;
pk=/PuRTSI9iYiHwcc6Nrde8qF4ZDhJBlUgpHdhsIjnqIk=
X-Endpoint-Received: by B4 Relay for george.moussalem@xxxxxxxxxxx/20250321
with auth_id=364
X-Original-From: George Moussalem <george.moussalem@xxxxxxxxxxx>
Reply-To: george.moussalem@xxxxxxxxxxx
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: George Moussalem <george.moussalem@xxxxxxxxxxx>
The MISC reset is supposed to trigger a resets across the MDC, DSP, and
RX & TX clocks of the IPQ5018 internal GE PHY. So let's set the bitmask
of the reset definition accordingly in the GCC as per the downstream
driver.
Link: https://git.codelinaro.org/clo/qsdk/oss/kernel/linux-ipq-5.4/-/commit/00743c3e82fa87cba4460e7a2ba32f473a9ce932
Signed-off-by: George Moussalem <george.moussalem@xxxxxxxxxxx>
---
drivers/clk/qcom/gcc-ipq5018.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/clk/qcom/gcc-ipq5018.c b/drivers/clk/qcom/gcc-ipq5018.c
index 70f5dcb96700f55da1fb19fc893d22350a7e63bf..02d6f08f389f24eccc961b9a4271288c6b635bbc 100644
--- a/drivers/clk/qcom/gcc-ipq5018.c
+++ b/drivers/clk/qcom/gcc-ipq5018.c
@@ -3660,7 +3660,7 @@ static const struct qcom_reset_map gcc_ipq5018_resets[] = {
[GCC_WCSS_AXI_S_ARES] = { 0x59008, 6 },
[GCC_WCSS_Q6_BCR] = { 0x18004, 0 },
[GCC_WCSSAON_RESET] = { 0x59010, 0},
- [GCC_GEPHY_MISC_ARES] = { 0x56004, 0 },
+ [GCC_GEPHY_MISC_ARES] = { 0x56004, .bitmask = 0xf },
};
static const struct of_device_id gcc_ipq5018_match_table[] = {
--
2.49.0
Return-Path: <linux-kernel+bounces-665656-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D5C1241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:47:05 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 5AEF41880653
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:47:02 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 7C5DB28C5B8;
Wed, 28 May 2025 14:45:53 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="aEvTFSCD"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0EC1C1D5AB7;
Wed, 28 May 2025 14:45:51 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443552; cv=none; b=X3qzW5MrHlOOex9leukBhUnh6fKCdRptErT+rL+UwdiOspURBdLM1vGs4MvMyt5KDkz2r6RtAzNCSg7JHxtysof13Gb9mQoSrd72p2pyFNo6F8dIYy7y4etGy6+KIqAWENmsjjv7wktpgtES2VsC7ZB1O2BEeofMTd3IJmxtCeg=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443552; c=relaxed/simple;
bh=8Ch1dMLWM2FHMpg8Uktr1Ihz4jf3cn7XYXwzpnTS05g=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:
In-Reply-To:To:Cc; b=ukqkl5+SDfikuDkuMRhMDerDZHSjd6Las+InMsizizTCHwVbPWrga65Ehy0iSRSs3J77e46rPSqi9Vsub6m3+6lGIO3DMnLZBUAWbZyxjHZgoWNm4PgsOT6HtLTY1s2aKUdWSg1xRZcJFqWBNXgjovj8kJNdL+lfYO3TVBlKZE0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=aEvTFSCD; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPS id AB3D4C4CEF3;
Wed, 28 May 2025 14:45:51 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748443551;
bh=8Ch1dMLWM2FHMpg8Uktr1Ihz4jf3cn7XYXwzpnTS05g=;
h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From;
b=aEvTFSCDqRESaYsKAztcHDOmlw2/cG4ml1Y0KTJQuz2EWQXa3lXN9gYhkZ+PR4PAi
Z3obzOMJTkSgBOX4a+NbsfE3C6hf79XW5jRq50dFu0RE9vxWipI4bJaVIz4XmOwiI1
xTRG7+vW3oLWmCxnod1rgk7e6lgBSnBoQcaU1G39Ky9g+TEJVRsy0NhQnkYcWQ7Qc5
2V00icCz5m048OvAJYe2NqXRLcnxac3C0yJIPTd9GkAWD37jnC26ROI1v6FxhjKi/3
3m58WMAMLSolhvUEqsBxEn+ZcVH0UJwgMHGGFIwHytwYa9vZir6A71nlRfe1TLMB8y
72dGxHUeasqbQ==
Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1])
by smtp.lore.kernel.org (Postfix) with ESMTP id A1833C3ABB2;
Wed, 28 May 2025 14:45:51 +0000 (UTC)
From: George Moussalem via B4 Relay <devnull+george.moussalem.outlook.com@xxxxxxxxxx>
Date: Wed, 28 May 2025 18:45:49 +0400
Subject: [PATCH v2 3/5] net: phy: qcom: at803x: Add Qualcomm IPQ5018
Internal PHY support
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20250528-ipq5018-ge-phy-v2-3-dd063674c71c@xxxxxxxxxxx>
References: <20250528-ipq5018-ge-phy-v2-0-dd063674c71c@xxxxxxxxxxx>
In-Reply-To: <20250528-ipq5018-ge-phy-v2-0-dd063674c71c@xxxxxxxxxxx>
To: Andrew Lunn <andrew@xxxxxxx>, Heiner Kallweit <hkallweit1@xxxxxxxxx>,
Russell King <linux@xxxxxxxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>, Florian Fainelli <f.fainelli@xxxxxxxxx>,
Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>,
Bjorn Andersson <andersson@xxxxxxxxxx>,
Konrad Dybcio <konradybcio@xxxxxxxxxx>,
Michael Turquette <mturquette@xxxxxxxxxxxx>,
Stephen Boyd <sboyd@xxxxxxxxxx>
Cc: netdev@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-arm-msm@xxxxxxxxxxxxxxx,
linux-clk@xxxxxxxxxxxxxxx, George Moussalem <george.moussalem@xxxxxxxxxxx>
X-Mailer: b4 0.14.2
X-Developer-Signature: v=1; a=ed25519-sha256; t=1748443549; l=10400;
i=george.moussalem@xxxxxxxxxxx; s=20250321; h=from:subject:message-id;
bh=0oys1TqFW/zfc7JfpiP4+i00oxFAKGo9oEkBTeSE9e4=;
b=jhGPRmT8F4NYaZT07nF0hZ+cl5HGSbemUjkUIE/nkmYTr86iDol38heo1NxdNu0/r9h1QVDB/
KIIcw1uKnpYC6mqh4Cshlc8wSTp9U0nvQ0YBHhMxC+TjqofZhsaOCiR
X-Developer-Key: i=george.moussalem@xxxxxxxxxxx; a=ed25519;
pk=/PuRTSI9iYiHwcc6Nrde8qF4ZDhJBlUgpHdhsIjnqIk=
X-Endpoint-Received: by B4 Relay for george.moussalem@xxxxxxxxxxx/20250321
with auth_id=364
X-Original-From: George Moussalem <george.moussalem@xxxxxxxxxxx>
Reply-To: george.moussalem@xxxxxxxxxxx
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: George Moussalem <george.moussalem@xxxxxxxxxxx>
The IPQ5018 SoC contains a single internal Gigabit Ethernet PHY which
provides an MDI interface directly to an RJ45 connector or an external
switch over a PHY to PHY link.
The PHY supports 10/100/1000 mbps link modes, CDT, auto-negotiation and
802.3az EEE.
Let's add support for this PHY in the at803x driver as it falls within
the Qualcomm Atheros OUI.
Signed-off-by: George Moussalem <george.moussalem@xxxxxxxxxxx>
---
drivers/net/phy/qcom/Kconfig | 2 +-
drivers/net/phy/qcom/at803x.c | 197 ++++++++++++++++++++++++++++++++++++++++--
2 files changed, 190 insertions(+), 9 deletions(-)
diff --git a/drivers/net/phy/qcom/Kconfig b/drivers/net/phy/qcom/Kconfig
index 570626cc8e14d3e6615f74a6377f0f7c9f723e89..84239e08a8dfa466b0a7b2a5ec724a168b692cd2 100644
--- a/drivers/net/phy/qcom/Kconfig
+++ b/drivers/net/phy/qcom/Kconfig
@@ -7,7 +7,7 @@ config AT803X_PHY
select QCOM_NET_PHYLIB
depends on REGULATOR
help
- Currently supports the AR8030, AR8031, AR8033, AR8035 model
+ Currently supports the AR8030, AR8031, AR8033, AR8035, IPQ5018 model
config QCA83XX_PHY
tristate "Qualcomm Atheros QCA833x PHYs"
diff --git a/drivers/net/phy/qcom/at803x.c b/drivers/net/phy/qcom/at803x.c
index 26350b962890b0321153d74758b13d817407d094..1dc3ce7d1299de9725684f792308ba65ea47f90a 100644
--- a/drivers/net/phy/qcom/at803x.c
+++ b/drivers/net/phy/qcom/at803x.c
@@ -7,19 +7,24 @@
* Author: Matus Ujhelyi <ujhelyi.m@xxxxxxxxx>
*/
-#include <linux/phy.h>
-#include <linux/module.h>
-#include <linux/string.h>
-#include <linux/netdevice.h>
+#include <linux/bitfield.h>
+#include <linux/clk.h>
+#include <linux/clk-provider.h>
#include <linux/etherdevice.h>
#include <linux/ethtool_netlink.h>
-#include <linux/bitfield.h>
-#include <linux/regulator/of_regulator.h>
-#include <linux/regulator/driver.h>
-#include <linux/regulator/consumer.h>
+#include <linux/mfd/syscon.h>
+#include <linux/module.h>
+#include <linux/netdevice.h>
#include <linux/of.h>
+#include <linux/phy.h>
#include <linux/phylink.h>
+#include <linux/regmap.h>
+#include <linux/regulator/consumer.h>
+#include <linux/regulator/driver.h>
+#include <linux/regulator/of_regulator.h>
+#include <linux/reset.h>
#include <linux/sfp.h>
+#include <linux/string.h>
#include <dt-bindings/net/qca-ar803x.h>
#include "qcom.h"
@@ -96,6 +101,8 @@
#define ATH8035_PHY_ID 0x004dd072
#define AT8030_PHY_ID_MASK 0xffffffef
+#define IPQ5018_PHY_ID 0x004dd0c0
+
#define QCA9561_PHY_ID 0x004dd042
#define AT803X_PAGE_FIBER 0
@@ -108,6 +115,50 @@
/* disable hibernation mode */
#define AT803X_DISABLE_HIBERNATION_MODE BIT(2)
+#define IPQ5018_PHY_FIFO_CONTROL 0x19
+#define IPQ5018_PHY_FIFO_RESET GENMASK(1, 0)
+
+#define IPQ5018_PHY_DEBUG_EDAC 0x4380
+#define IPQ5018_PHY_MMD1_MDAC 0x8100
+#define IPQ5018_PHY_DAC_MASK GENMASK(15, 8)
+
+/* MDAC and EDAC values for short cable length */
+#define IPQ5018_PHY_DEBUG_EDAC_VAL 0x10
+#define IPQ5018_PHY_MMD1_MDAC_VAL 0x10
+
+#define IPQ5018_PHY_MMD1_MSE_THRESH1 0x1000
+#define IPQ5018_PHY_MMD1_MSE_THRESH2 0x1001
+#define IPQ5018_PHY_PCS_AZ_CTRL1 0x8008
+#define IPQ5018_PHY_PCS_AZ_CTRL2 0x8009
+#define IPQ5018_PHY_PCS_CDT_THRESH_CTRL3 0x8074
+#define IPQ5018_PHY_PCS_CDT_THRESH_CTRL4 0x8075
+#define IPQ5018_PHY_PCS_CDT_THRESH_CTRL5 0x8076
+#define IPQ5018_PHY_PCS_CDT_THRESH_CTRL6 0x8077
+#define IPQ5018_PHY_PCS_CDT_THRESH_CTRL7 0x8078
+#define IPQ5018_PHY_PCS_CDT_THRESH_CTRL9 0x807a
+#define IPQ5018_PHY_PCS_CDT_THRESH_CTRL13 0x807e
+#define IPQ5018_PHY_PCS_CDT_THRESH_CTRL14 0x807f
+
+#define IPQ5018_PHY_MMD1_MSE_THRESH1_VAL 0xf1
+#define IPQ5018_PHY_MMD1_MSE_THRESH2_VAL 0x1f6
+#define IPQ5018_PHY_PCS_AZ_CTRL1_VAL 0x7880
+#define IPQ5018_PHY_PCS_AZ_CTRL2_VAL 0xc8
+#define IPQ5018_PHY_PCS_CDT_THRESH_CTRL3_VAL 0xc040
+#define IPQ5018_PHY_PCS_CDT_THRESH_CTRL4_VAL 0xa060
+#define IPQ5018_PHY_PCS_CDT_THRESH_CTRL5_VAL 0xc040
+#define IPQ5018_PHY_PCS_CDT_THRESH_CTRL6_VAL 0xa060
+#define IPQ5018_PHY_PCS_CDT_THRESH_CTRL7_VAL 0xc24c
+#define IPQ5018_PHY_PCS_CDT_THRESH_CTRL9_VAL 0xc060
+#define IPQ5018_PHY_PCS_CDT_THRESH_CTRL13_VAL 0xb060
+#define IPQ5018_PHY_PCS_NEAR_ECHO_THRESH_VAL 0x90b0
+
+#define IPQ5018_PHY_DEBUG_ANA_LDO_EFUSE 0x1
+#define IPQ5018_PHY_DEBUG_ANA_LDO_EFUSE_MASK GENMASK(7, 4)
+#define IPQ5018_PHY_DEBUG_ANA_LDO_EFUSE_DEFAULT 0x50
+#define IPQ5018_PHY_DEBUG_ANA_DAC_FILTER 0xa080
+
+#define IPQ5018_TCSR_ETH_LDO_READY BIT(0)
+
MODULE_DESCRIPTION("Qualcomm Atheros AR803x PHY driver");
MODULE_AUTHOR("Matus Ujhelyi");
MODULE_LICENSE("GPL");
@@ -133,6 +184,13 @@ struct at803x_context {
u16 led_control;
};
+struct ipq5018_priv {
+ int num_clks;
+ struct clk_bulk_data *clks;
+ struct reset_control *rst;
+ bool set_short_cable_dac;
+};
+
static int at803x_write_page(struct phy_device *phydev, int page)
{
int mask;
@@ -987,6 +1045,115 @@ static int at8035_probe(struct phy_device *phydev)
return at8035_parse_dt(phydev);
}
+static int ipq5018_cable_test_start(struct phy_device *phydev)
+{
+ phy_write_mmd(phydev, MDIO_MMD_PCS, IPQ5018_PHY_PCS_CDT_THRESH_CTRL3,
+ IPQ5018_PHY_PCS_CDT_THRESH_CTRL3_VAL);
+ phy_write_mmd(phydev, MDIO_MMD_PCS, IPQ5018_PHY_PCS_CDT_THRESH_CTRL4,
+ IPQ5018_PHY_PCS_CDT_THRESH_CTRL4_VAL);
+ phy_write_mmd(phydev, MDIO_MMD_PCS, IPQ5018_PHY_PCS_CDT_THRESH_CTRL5,
+ IPQ5018_PHY_PCS_CDT_THRESH_CTRL5_VAL);
+ phy_write_mmd(phydev, MDIO_MMD_PCS, IPQ5018_PHY_PCS_CDT_THRESH_CTRL6,
+ IPQ5018_PHY_PCS_CDT_THRESH_CTRL6_VAL);
+ phy_write_mmd(phydev, MDIO_MMD_PCS, IPQ5018_PHY_PCS_CDT_THRESH_CTRL7,
+ IPQ5018_PHY_PCS_CDT_THRESH_CTRL7_VAL);
+ phy_write_mmd(phydev, MDIO_MMD_PCS, IPQ5018_PHY_PCS_CDT_THRESH_CTRL9,
+ IPQ5018_PHY_PCS_CDT_THRESH_CTRL9_VAL);
+ phy_write_mmd(phydev, MDIO_MMD_PCS, IPQ5018_PHY_PCS_CDT_THRESH_CTRL13,
+ IPQ5018_PHY_PCS_CDT_THRESH_CTRL13_VAL);
+ phy_write_mmd(phydev, MDIO_MMD_PCS, IPQ5018_PHY_PCS_CDT_THRESH_CTRL3,
+ IPQ5018_PHY_PCS_NEAR_ECHO_THRESH_VAL);
+
+ /* we do all the (time consuming) work later */
+ return 0;
+}
+
+static int ipq5018_config_init(struct phy_device *phydev)
+{
+ struct ipq5018_priv *priv = phydev->priv;
+ u16 val = 0;
+
+ /*
+ * set LDO efuse: first temporarily store ANA_DAC_FILTER value from
+ * debug register as it will be reset once the ANA_LDO_EFUSE register
+ * is written to
+ */
+ val = at803x_debug_reg_read(phydev, IPQ5018_PHY_DEBUG_ANA_DAC_FILTER);
+ at803x_debug_reg_mask(phydev, IPQ5018_PHY_DEBUG_ANA_LDO_EFUSE,
+ IPQ5018_PHY_DEBUG_ANA_LDO_EFUSE_MASK,
+ IPQ5018_PHY_DEBUG_ANA_LDO_EFUSE_DEFAULT);
+ at803x_debug_reg_write(phydev, IPQ5018_PHY_DEBUG_ANA_DAC_FILTER, val);
+
+ /* set 8023AZ CTRL values */
+ phy_write_mmd(phydev, MDIO_MMD_PCS, IPQ5018_PHY_PCS_AZ_CTRL1,
+ IPQ5018_PHY_PCS_AZ_CTRL1_VAL);
+ phy_write_mmd(phydev, MDIO_MMD_PCS, IPQ5018_PHY_PCS_AZ_CTRL2,
+ IPQ5018_PHY_PCS_AZ_CTRL2_VAL);
+
+ /* set MSE threshold values */
+ phy_write_mmd(phydev, MDIO_MMD_PMAPMD, IPQ5018_PHY_MMD1_MSE_THRESH1,
+ IPQ5018_PHY_MMD1_MSE_THRESH1_VAL);
+ phy_write_mmd(phydev, MDIO_MMD_PMAPMD, IPQ5018_PHY_MMD1_MSE_THRESH2,
+ IPQ5018_PHY_MMD1_MSE_THRESH2_VAL);
+
+ /* PHY DAC values are optional and only set in a PHY to PHY link architecture */
+ if (priv->set_short_cable_dac) {
+ /* setting MDAC (Multi-level Digital-to-Analog Converter) in MMD1 */
+ phy_modify_mmd(phydev, MDIO_MMD_PMAPMD, IPQ5018_PHY_MMD1_MDAC,
+ IPQ5018_PHY_DAC_MASK, IPQ5018_PHY_MMD1_MDAC_VAL);
+
+ /* setting EDAC (Error-detection and Correction) in debug register */
+ at803x_debug_reg_mask(phydev, IPQ5018_PHY_DEBUG_EDAC,
+ IPQ5018_PHY_DAC_MASK, IPQ5018_PHY_DEBUG_EDAC_VAL);
+ }
+
+ return 0;
+}
+
+static void ipq5018_link_change_notify(struct phy_device *phydev)
+{
+ mdiobus_modify_changed(phydev->mdio.bus, phydev->mdio.addr,
+ IPQ5018_PHY_FIFO_CONTROL, IPQ5018_PHY_FIFO_RESET,
+ phydev->link ? IPQ5018_PHY_FIFO_RESET : 0);
+}
+
+static int ipq5018_probe(struct phy_device *phydev)
+{
+ struct device *dev = &phydev->mdio.dev;
+ struct ipq5018_priv *priv;
+ int ret;
+
+ priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
+ if (!priv)
+ return -ENOMEM;
+
+ priv->set_short_cable_dac = of_property_read_bool(dev->of_node,
+ "qcom,dac-preset-short-cable");
+
+ priv->num_clks = devm_clk_bulk_get_all(dev, &priv->clks);
+ if (priv->num_clks < 0)
+ return dev_err_probe(dev, priv->num_clks,
+ "failed to acquire clocks\n");
+
+ ret = clk_bulk_prepare_enable(priv->num_clks, priv->clks);
+ if (ret)
+ return dev_err_probe(dev, ret,
+ "failed to enable clocks\n");
+
+ priv->rst = devm_reset_control_array_get_exclusive(dev);
+ if (IS_ERR_OR_NULL(priv->rst))
+ return dev_err_probe(dev, PTR_ERR(priv->rst),
+ "failed to acquire reset\n");
+
+ ret = reset_control_reset(priv->rst);
+ if (ret)
+ return dev_err_probe(dev, ret, "failed to reset\n");
+
+ phydev->priv = priv;
+
+ return 0;
+}
+
static struct phy_driver at803x_driver[] = {
{
/* Qualcomm Atheros AR8035 */
@@ -1078,6 +1245,19 @@ static struct phy_driver at803x_driver[] = {
.read_status = at803x_read_status,
.soft_reset = genphy_soft_reset,
.config_aneg = at803x_config_aneg,
+}, {
+ PHY_ID_MATCH_EXACT(IPQ5018_PHY_ID),
+ .name = "Qualcomm Atheros IPQ5018 internal PHY",
+ .flags = PHY_IS_INTERNAL | PHY_POLL_CABLE_TEST,
+ .probe = ipq5018_probe,
+ .config_init = ipq5018_config_init,
+ .link_change_notify = ipq5018_link_change_notify,
+ .read_status = at803x_read_status,
+ .config_intr = at803x_config_intr,
+ .handle_interrupt = at803x_handle_interrupt,
+ .cable_test_start = ipq5018_cable_test_start,
+ .cable_test_get_status = qca808x_cable_test_get_status,
+ .soft_reset = genphy_soft_reset,
}, {
/* Qualcomm Atheros QCA9561 */
PHY_ID_MATCH_EXACT(QCA9561_PHY_ID),
@@ -1104,6 +1284,7 @@ static const struct mdio_device_id __maybe_unused atheros_tbl[] = {
{ PHY_ID_MATCH_EXACT(ATH8032_PHY_ID) },
{ PHY_ID_MATCH_EXACT(ATH8035_PHY_ID) },
{ PHY_ID_MATCH_EXACT(ATH9331_PHY_ID) },
+ { PHY_ID_MATCH_EXACT(IPQ5018_PHY_ID) },
{ PHY_ID_MATCH_EXACT(QCA9561_PHY_ID) },
{ }
};
--
2.49.0
Return-Path: <linux-kernel+bounces-665659-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 9833C41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:48:33 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id EA8D8A22FF1
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:47:20 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 690032853E5;
Wed, 28 May 2025 14:45:56 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="MAyLUtsM"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 64D9B28B509;
Wed, 28 May 2025 14:45:52 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443552; cv=none; b=uJVyaDMA4ZOaaLGSd4Kpkj1ao2bTzHOLwr1BBTAtGv2GbIxu8AVQ28Ty/bxw1HicWosmfHiuFdMH9qES/qyj5LijuRthZXdh4jZTd9Vqos/3yRPk8A0CP2thNB1uca8jNcw7SGddVbbUB7u8rwjo80ZcZhb/BSertLkCxDIzRsk=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443552; c=relaxed/simple;
bh=KDE3jONM29soNGXCY5a31Z2K0OCOU1Kyc6sBdjJm2W4=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:
In-Reply-To:To:Cc; b=rA1XMJ1Fe4d1imoNCQedDnNLyWUfhJ4TV4cgJlaIlYcs/mPwPBP9pVhdy2GANOTbupgx9dqe8RvwUWVZt1wmf/dWB2z/rTm5x9Yrpiwv9dkq4yUcwEeoFzQSHzbjxIOZCJeWPxdMd86e1lsbpNMc79NMygPQGpPZh8HV8yBD2IY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MAyLUtsM; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPS id BB259C4CEF0;
Wed, 28 May 2025 14:45:51 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748443551;
bh=KDE3jONM29soNGXCY5a31Z2K0OCOU1Kyc6sBdjJm2W4=;
h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From;
b=MAyLUtsM/BSCiqduynzRHnqM/tGQ9P4dwuTWF2PhOY2biyg5Um/U9JPb/+f2lkHRH
MuhjEc/lR7zqliYhXv7fdxumxKSnlfWuN6P3uXy3cRBjm25FhuwiEQibSR5fNQ1pGc
ybzwpaTZK+/gZx/q5P7i6gg8mqXYWpUVUQ/ei73YkwsA7w8NUA/cUj+JmJonHDBgWG
86YsswjQILPdsWz/RqXQGbd3xcqei9V2sVrhtwft8nAiCIFCilW/74m90h9FTuioHZ
uE0ZLWb54jbVb5RXjLvCiT/nuSXdQwjb97bn2QQnK3MRjohMiszzlpe2sL8cCXPqWe
rHhXgfYHuPG8Q==
Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1])
by smtp.lore.kernel.org (Postfix) with ESMTP id AFECDC5B543;
Wed, 28 May 2025 14:45:51 +0000 (UTC)
From: George Moussalem via B4 Relay <devnull+george.moussalem.outlook.com@xxxxxxxxxx>
Date: Wed, 28 May 2025 18:45:50 +0400
Subject: [PATCH v2 4/5] arm64: dts: qcom: ipq5018: Add MDIO buses
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20250528-ipq5018-ge-phy-v2-4-dd063674c71c@xxxxxxxxxxx>
References: <20250528-ipq5018-ge-phy-v2-0-dd063674c71c@xxxxxxxxxxx>
In-Reply-To: <20250528-ipq5018-ge-phy-v2-0-dd063674c71c@xxxxxxxxxxx>
To: Andrew Lunn <andrew@xxxxxxx>, Heiner Kallweit <hkallweit1@xxxxxxxxx>,
Russell King <linux@xxxxxxxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>, Florian Fainelli <f.fainelli@xxxxxxxxx>,
Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>,
Bjorn Andersson <andersson@xxxxxxxxxx>,
Konrad Dybcio <konradybcio@xxxxxxxxxx>,
Michael Turquette <mturquette@xxxxxxxxxxxx>,
Stephen Boyd <sboyd@xxxxxxxxxx>
Cc: netdev@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-arm-msm@xxxxxxxxxxxxxxx,
linux-clk@xxxxxxxxxxxxxxx, George Moussalem <george.moussalem@xxxxxxxxxxx>
X-Mailer: b4 0.14.2
X-Developer-Signature: v=1; a=ed25519-sha256; t=1748443549; l=1458;
i=george.moussalem@xxxxxxxxxxx; s=20250321; h=from:subject:message-id;
bh=4Z6dvq+B+YexBDa/RxyvWcr+v3oZkqxqlrrl5K8MHDY=;
b=EAjnILhijNnzbfArUiedgXalZcEkkjwbe2NfRJ9PsDO1Uh6HkD4hyOBGO5iexkzcoPH3C0kAP
4dZ96UtYzZsDJk4OEOxCmSQwZPvB4ZFrDLL+W1eMkObatV7IIe8vOoV
X-Developer-Key: i=george.moussalem@xxxxxxxxxxx; a=ed25519;
pk=/PuRTSI9iYiHwcc6Nrde8qF4ZDhJBlUgpHdhsIjnqIk=
X-Endpoint-Received: by B4 Relay for george.moussalem@xxxxxxxxxxx/20250321
with auth_id=364
X-Original-From: George Moussalem <george.moussalem@xxxxxxxxxxx>
Reply-To: george.moussalem@xxxxxxxxxxx
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: George Moussalem <george.moussalem@xxxxxxxxxxx>
IPQ5018 contains two mdio buses of which one bus is used to control the
SoC's internal GE PHY, while the other bus is connected to external PHYs
or switches.
There's already support for IPQ5018 in the mdio-ipq4019 driver, so let's
simply add the mdio nodes for them.
Signed-off-by: George Moussalem <george.moussalem@xxxxxxxxxxx>
---
arch/arm64/boot/dts/qcom/ipq5018.dtsi | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/ipq5018.dtsi b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
index 130360014c5e14c778e348d37e601f60325b0b14..03ebc3e305b267c98a034c41ce47a39269afce75 100644
--- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
@@ -182,6 +182,30 @@ pcie0_phy: phy@86000 {
status = "disabled";
};
+ mdio0: mdio@88000 {
+ compatible = "qcom,ipq5018-mdio";
+ reg = <0x00088000 0x64>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ clocks = <&gcc GCC_MDIO0_AHB_CLK>;
+ clock-names = "gcc_mdio_ahb_clk";
+
+ status = "disabled";
+ };
+
+ mdio1: mdio@90000 {
+ compatible = "qcom,ipq5018-mdio";
+ reg = <0x00090000 0x64>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ clocks = <&gcc GCC_MDIO1_AHB_CLK>;
+ clock-names = "gcc_mdio_ahb_clk";
+
+ status = "disabled";
+ };
+
tlmm: pinctrl@1000000 {
compatible = "qcom,ipq5018-tlmm";
reg = <0x01000000 0x300000>;
--
2.49.0
Return-Path: <linux-kernel+bounces-665660-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 35CF941E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:48:57 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 94A8B1BC7E3F
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:48:20 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 3E4FF28B518;
Wed, 28 May 2025 14:47:06 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=altera.com header.i=@altera.com header.b="Y2rnf0Ln"
Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2045.outbound.protection.outlook.com [40.107.223.45])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id E983B2AD31;
Wed, 28 May 2025 14:47:02 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.223.45
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443624; cv=fail; b=bJhEaY5tfWPxlFa4BrGgSXpr5anoYAaZ/CRHyfb21vRepNGVryLTCnH2L0192gxohgYWjk6ZQjixQXc7ukJ8gDBOga2QOOMo758HFSCoeC/pMUxaMGO4oDe9KT9pCdcco5VWDYIvR1YC5LJCLjZza5m36MYR0s04E8Jgv6gVJUE=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443624; c=relaxed/simple;
bh=SHDgfUWIn+UenKOEL3OLGOg+bn2HTmsbeBf9xZc9h5M=;
h=From:To:Cc:Subject:Date:Message-Id:Content-Type:MIME-Version; b=MJMzQgei159lqUt2l4yUj7a8Ag/jDH7aEHrUM+uEIOHp1mHOZdNa4hFIu6Go9U3P2nEbk5GpeNI2JP6SFTM/U8uH1eGkbucDJuu50k4Cagt+mW8FAD+QofkOgUNCeOn1JBRfP0orlCzA+NcG/2lw1pRXEMBHInVhg1zsYWb53eU=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=altera.com; spf=pass smtp.mailfrom=altera.com; dkim=pass (2048-bit key) header.d=altera.com header.i=@altera.com header.b=Y2rnf0Ln; arc=fail smtp.client-ip=40.107.223.45
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=altera.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=altera.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=Bvm866YUyiM33abZqGD8XwC1jV5yeW1Rz6HsI4tEZWwm/7S1DFOOdz+Kt0Wgr52gsffodOyZXoYgQBljOQq4x/DndnxdyzYmDYzT2mJ7SzYQrwmJ6Dk0xNOU8nJIFPevHrBpo1XVIRAIFKp8hA1pxpkvNkRXh1Mh0CwkAVsDILcN1u5WYf/X+G3r61cFgjjhxlnmdNDLTV3Y+rOb5NQweB1AxQRK+cZb6nUXC+GkNIDQpCEj9EP+9MKgKf3gI+adsDTwqUTksqpqgfIjDTtDJnbmAMcwoS3iaCMkdA2TzZkldL6mCdAJ46clsVm7fo/3eA6gGvkf0lMQXSEFJ0Ng0Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=3gw5aM1Y+1DUB+PdxNOMnaHTImfqiN23RA2dTvv1ky4=;
b=RY2yGoitSRzSCCDsmQvq4E1UTOprhuI4AcIiH9Tuh0OKf5Qi2JxJxcAk8AsmvNNEP/553MzfWfuGFB/Q1mfK551NIpECF4qGCHV4kgnq6OKOeS0xUshb7DN0bu3dyTqpf0IsIJTs6a8wcl5j6MFpWyrKsIJQKY9XTvZ3AAprhQr/BxnMabeoMz5TS1SSErgNFWSnb3ZyAfAk+Mw/38LpcTc6kVaiVTZCpinLgc6Hi+JJxFslEo315mnopLlqVSnnQ0QdEp9cw2BDomy8QydXYQgLLLpOi4d+rScFhbbvmn9N1l+mYJsI5esZh5d0p3qd1iJ1OlFaqkzbphXREABbxQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=altera.com; dmarc=pass action=none header.from=altera.com;
dkim=pass header.d=altera.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=altera.com;
s=selector2;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=3gw5aM1Y+1DUB+PdxNOMnaHTImfqiN23RA2dTvv1ky4=;
b=Y2rnf0LnRft9JtLpr6T33sRiFST2VqZqLpz7qGLaDOGE65etGIRuKQICs5o+gGQz/xcCl7A8LH2pqH+aLciElvwnUR6Yea4P5iVF6c2ZyNwAOkytGpg7gjmpxsT/0A1WBTjvY8i8I30c2nqW0PNJ7etvqFUpu6wcUCUO6KdjIOfj8HYPf0TFNT7PxoOGvKcgkGzi6N+HyKq2UUb7gnHiuklUXD0aokxI4TcGpTSdOVLEx/Y5Ia6K4R+EdbOdl4OlTrg7dRccaJ+MAdy0v1DOxEUky+tQVmPATgemi6FAEV3CYvwOvuFumoN+p4LhZQO04CBT4aQU0in2Ub7jhbEhSw==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=altera.com;
Received: from DM6PR03MB3465.namprd03.prod.outlook.com (2603:10b6:5:ae::19) by
BN9PR03MB6140.namprd03.prod.outlook.com (2603:10b6:408:11d::21) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.25; Wed, 28 May
2025 14:46:59 +0000
Received: from DM6PR03MB3465.namprd03.prod.outlook.com
([fe80::1ddf:36b:d443:f30]) by DM6PR03MB3465.namprd03.prod.outlook.com
([fe80::1ddf:36b:d443:f30%7]) with mapi id 15.20.8769.019; Wed, 28 May 2025
14:46:59 +0000
From: Matthew Gerlach <matthew.gerlach@xxxxxxxxxx>
To: andrew+netdev@xxxxxxx,
davem@xxxxxxxxxxxxx,
edumazet@xxxxxxxxxx,
kuba@xxxxxxxxxx,
pabeni@xxxxxxxxxx,
robh@xxxxxxxxxx,
krzk+dt@xxxxxxxxxx,
conor+dt@xxxxxxxxxx,
maxime.chevallier@xxxxxxxxxxx,
richardcochran@xxxxxxxxx,
netdev@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
Cc: Mun Yew Tham <mun.yew.tham@xxxxxxxxxx>,
Matthew Gerlach <matthew.gerlach@xxxxxxxxxx>
Subject: [PATCH v2] dt-bindings: net: Convert socfpga-dwmac bindings to yaml
Date: Wed, 28 May 2025 07:46:50 -0700
Message-Id: <20250528144650.48343-1-matthew.gerlach@xxxxxxxxxx>
X-Mailer: git-send-email 2.35.3
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-ClientProxiedBy: SJ0P220CA0003.NAMP220.PROD.OUTLOOK.COM
(2603:10b6:a03:41b::34) To DM6PR03MB3465.namprd03.prod.outlook.com
(2603:10b6:5:ae::19)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: DM6PR03MB3465:EE_|BN9PR03MB6140:EE_
X-MS-Office365-Filtering-Correlation-Id: 612ce8d3-0e3d-4810-5b2f-08dd9df67fcc
X-MS-Exchange-AtpMessageProperties: SA
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|1800799024|366016|7416014|376014|921020;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?mkTgxioXJJKrTintKqocc+Lq9VWILALuAkXR9X1+zm0xs1833tYy8vtKmYUI?=
=?us-ascii?Q?vQjWsgLVObNIolx/HH09kWbAPWEChVwj57vfZTEKaybMKUUNPRKkyxM5IpXZ?=
=?us-ascii?Q?Kcxd2I87xDAxII4xNPkXdCCX43fgundCZZrIYZ5GIRWSz3wxatrnBtkkFRTK?=
=?us-ascii?Q?c3p2A9UtqtCTnyQOFp5qS2O61uY9moSNowrbQbNeib4gVgZTHux/W1+14a6W?=
=?us-ascii?Q?9K5PASskWUcgUpgK7nk6FYIo3fx/nU7shMlhBW8DQt6agNMpxYKU0gKfZ/Hw?=
=?us-ascii?Q?D8PjO156l1IHU05FBxgHq2cba36Ja6+VtROHLgsk60rkt+A3k8Dp+thxKC0Q?=
=?us-ascii?Q?NCTqvzIevIkl/SlBoxaYYNaBYm4FFMe2N7W5PXJGs1bJADJIhtKxMbnf9ogo?=
=?us-ascii?Q?uVl9oRwzvM7D/UPScn/kK9/+KKpm8vMVPptzCn4Lh4hNmvxTxQk5jcyXMR0B?=
=?us-ascii?Q?dfWXdbSRissu0ZtRoRiD3Bt1dpTkjyl41aj9h3oIOfjIKQvdzJf2uMX9DxTF?=
=?us-ascii?Q?1guLCizyseOUwn9O6+PawJo7WtHDbt6kgrYxYO4aqT/bwbfTJnEjLhviwJ7N?=
=?us-ascii?Q?mK9jMJ9sRNDzvH5wL2cNhoU3/MqnJ11fZgckXpQhaEoXDTYH4lKBjhqdlopr?=
=?us-ascii?Q?X3xJyYqLNijWSZOhrJzPQp0CaWcCRCVFWqlVeEbzOIsYwWB3YrIE7AEK4/lR?=
=?us-ascii?Q?1UMNonHHd052Fp7PqEqQ0gyajAaaoDURTflU4Qni3ViN36nML7AAigRO8uQv?=
=?us-ascii?Q?EP3DYWinfY2n8rwEdJe3k05lUmOqozYjYq1pL/gxL6akDspyGEmcQHEIskTF?=
=?us-ascii?Q?/7JkRlXoV9YmIRdMp81EIjwRtAwGdyDMpcvDJrm1JxToRByOizC4EFETbipD?=
=?us-ascii?Q?5DTSSEbD83Xx2s5+++0km5drCClbmNTXiWmTQfDaqAFTuKmOXIk2IEnGOFhk?=
=?us-ascii?Q?eQ16aH9j/QGarF8JKe0bwaau6RRB+TC2Bzuksk0CISjAkhrTz0paUP8qTZXj?=
=?us-ascii?Q?/cBkpwFJH6SI4jRiu06Wy9+Bq7uSDuzft9ZFap9CTJ/hx+VxPztL4WpSkoqv?=
=?us-ascii?Q?XYd5Z08uEkSMLYQL/6/3dnJn+LjZKlzPyShmQzdcNPkb73xixOFzeeKkCwTI?=
=?us-ascii?Q?nfc5Lp3172pyZKvSNbZUUKcE4VcJ+ahGV4A1nCIxtGsMGFGGUuce6u4AuD/u?=
=?us-ascii?Q?02FST339f0SjynLcQq1kJS7UNRhNCkfL6KueD05uudfGwkCwvLOsnHLVLSSH?=
=?us-ascii?Q?A8L25bnw8di+eO4XUm5/jeTFREWIlRsGlYVtHOEBL7mYe+PWaAGtHMmFVTm5?=
=?us-ascii?Q?UWAze39EXFFIAggjaCVH5Nkj+LYFAlEuvEr7vtziStdR6cqkVPm1ZNHya86v?=
=?us-ascii?Q?LpS9v/KNSgy/qNZ8i9A74nyNNuAY2sMi0n2mj0nscqYofITqoQ=3D=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR03MB3465.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(7416014)(376014)(921020);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?NB7caWSXitQy3TN2ZCrXWqy8PUxrsWxc5jOQ7VpJDe8NTNdBJ5Fpv7j1tGd2?=
=?us-ascii?Q?jL4GiAeymU3BwuB3Xzb0TpWCwU3+Pcw7Z7D3jbdauzauPiVYLDBmqs/bYG2w?=
=?us-ascii?Q?VhUcdhE+0YFaK8dmGOxIYHQAkt9mhr/t0uufLn5JXgUSyPZ8jjfu78kAWgxl?=
=?us-ascii?Q?JFHfpbnXb6DxsCoRyNUCXEmYt3A0WHg6kDoF8hZ/HLVYtMcSbogR7xzcmQ6P?=
=?us-ascii?Q?GI1JDwD0+t0Z6xLSe/pZvLC2CFC3fN06kNpDrcYD/DtYBQswXOKUT8qFMoZo?=
=?us-ascii?Q?6QGQrsW0QN1nU42xFU2rLw9V+Sfw822/BCvKVfhzu6VvGxgv3nV2rjpWHbtW?=
=?us-ascii?Q?yXPixMuEjHg473kg0KZSmtLZ+PuCXrdvMH84fDrT9PF1LqmT4JZyrBD8ZUFI?=
=?us-ascii?Q?ep0sHZYRd3Gt4u9LC5ylxso2bhZWzgoFeaBhAnBuUovHiu1hnuaBWT9jLQVY?=
=?us-ascii?Q?3y3zmgqoUpDl57+HG4N9pyR54Xx3BkR2kgV2FA/eye6mUydBwM7fSy17+x2A?=
=?us-ascii?Q?8ASvr7WGJL0YSjHj8mEqKtaIXDwuLcgThxRFmHYgXnq6KVQAHf8yln3SlyXe?=
=?us-ascii?Q?GoVIcfxvSuylY+EVkmehvnKteZ+sJ7ZjBc+J2kwNX1gMy7mXFX3R6loUpl/N?=
=?us-ascii?Q?+U6eIihh5nGfGGt/lw9RYYUqoizhJQp0DdKB9rIn6b7BHR89jDV/ULat4pRI?=
=?us-ascii?Q?u81UTQ/QZcIVEplOFicHN/667mgroAu41k4w3VHl304x6b8d8sl0UfAbJAxN?=
=?us-ascii?Q?YS5uYCgjrdiv2FytRsTpZCqaJ5RyajzVS/iZYiG+YQogNWDEDAbd/LMa2I4b?=
=?us-ascii?Q?0h0ZmKQMrct2TGgSjwQz0I0yERsoIOIwxUK7ek1Oe4Y2UknjAin3fA2NvuzP?=
=?us-ascii?Q?BnJ1MrK6GlTrD8vKaaF9J9qiHWeI+xjN8mykJPfFn/Dd9KZt1zAPYxwUYeuD?=
=?us-ascii?Q?1YuJazDKsItkhmv0zYKhcWQYticUso8+7Mlhe9gycHJxdLLbzV6kOr9cwkG/?=
=?us-ascii?Q?9/FbybvHO31YOwsiCQQ8YQiTThXtpbVMWny4dLgm0MhnOH+4+uTExZSug3Rt?=
=?us-ascii?Q?lJw1goJmw9WdCTWJeNLOv+FgLjOntPrKZbgnvx6ShklIiZlLH1ug6+6EB/8w?=
=?us-ascii?Q?5h4W6QvGiA1amt2tqGbBhdL0PJf64V4IH3LSFTsOGWQbEBjSy4liaCSHk3P7?=
=?us-ascii?Q?yuh8sIA5bjTpe2bEH7mp+IpVf3FZvWgEhwOFg3hQ5PKtqRoOPFUGNyHcqjhd?=
=?us-ascii?Q?cwOpj84xIcqBDoF0F5Y+Upnz1TsMs5wxOwfnBVFa/GgH6508mKkyrftUHgNp?=
=?us-ascii?Q?qWNXKcuESRk5mHUML7Ijr++V7f0QKxYuVAxoFOFK9DslVau2xG6WB+ErJynX?=
=?us-ascii?Q?ErGGJaHykqM5Lfmjf+RVYkZluUL19pqzEFF5V4bvSD0jhJxmQb1kWtif5WAL?=
=?us-ascii?Q?FT3Vsdnuxu4b0nAamDVukkMit2fStNxxNZCEs0Xj4Gx/ntIrnGJSXssJm+79?=
=?us-ascii?Q?zWrO25XsFWhk833QV9JTzcg1sE+MYmP7Bodpo8lpKOWd69OFGHEpXz8pC3YE?=
=?us-ascii?Q?2WpR6mj2Lqc4JR6jjKUyGz5HWxav3OfuxbDNzXqQDyKvz0/5O1GnqdpgkGho?=
=?us-ascii?Q?HA=3D=3D?=
X-OriginatorOrg: altera.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 612ce8d3-0e3d-4810-5b2f-08dd9df67fcc
X-MS-Exchange-CrossTenant-AuthSource: DM6PR03MB3465.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 14:46:58.9550
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: fbd72e03-d4a5-4110-adce-614d51f2077a
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: agyMVMtIV+YJWAi0Q1yvCDarWKOI6LPXOuXlvB5h+Bg+PKmV1tqSpNl4/y6RfCpUIFENgOpKf4oKbpSYvyUUqxTDbNw0159y0TGXI4Ioyp4=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR03MB6140
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Mun Yew Tham <mun.yew.tham@xxxxxxxxxx>
Convert the bindings for socfpga-dwmac to yaml.
Signed-off-by: Mun Yew Tham <mun.yew.tham@xxxxxxxxxx>
Signed-off-by: Matthew Gerlach <matthew.gerlach@xxxxxxxxxx>
---
v2:
- Add compatible to required.
- Add descriptions for clocks.
- Add clock-names.
- Clean up items: in altr,sysmgr-syscon.
- Change "additionalProperties: true" to "unevaluatedProperties: false".
- Add properties needed for "unevaluatedProperties: false".
- Fix indentation in examples.
- Drop gmac0: label in examples.
- Exclude support for Arria10 that is not validating.
---
.../bindings/net/socfpga,dwmac.yaml | 148 ++++++++++++++++++
.../devicetree/bindings/net/socfpga-dwmac.txt | 57 -------
2 files changed, 148 insertions(+), 57 deletions(-)
create mode 100644 Documentation/devicetree/bindings/net/socfpga,dwmac.yaml
delete mode 100644 Documentation/devicetree/bindings/net/socfpga-dwmac.txt
diff --git a/Documentation/devicetree/bindings/net/socfpga,dwmac.yaml b/Documentation/devicetree/bindings/net/socfpga,dwmac.yaml
new file mode 100644
index 000000000000..a02175838fba
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/socfpga,dwmac.yaml
@@ -0,0 +1,148 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/net/socfpga,dwmac.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Altera SOCFPGA SoC DWMAC controller
+
+maintainers:
+ - Matthew Gerlach <matthew.gerlach@xxxxxxxxxx>
+
+description:
+ This binding describes the Altera SOCFPGA SoC implementation of the
+ Synopsys DWMAC for the Cyclone5, Arria5, Stratix10, and Agilex7 families
+ of chips.
+ # TODO: Determine how to handle the Arria10 reset-name, stmmaceth-ocp, that
+ # does not validate against net/snps,dwmac.yaml.
+
+select:
+ properties:
+ compatible:
+ oneOf:
+ - items:
+ - const: altr,socfpga-stmmac
+ - const: snps,dwmac-3.70a
+ - const: snps,dwmac
+ - items:
+ - const: altr,socfpga-stmmac-a10-s10
+ - const: snps,dwmac-3.74a
+ - const: snps,dwmac
+
+ required:
+ - compatible
+ - altr,sysmgr-syscon
+
+properties:
+ clocks:
+ minItems: 1
+ items:
+ - description: GMAC main clock
+ - description:
+ PTP reference clock. This clock is used for programming the
+ Timestamp Addend Register. If not passed then the system
+ clock will be used and this is fine on some platforms.
+
+ clock-names:
+ minItems: 1
+ maxItems: 2
+ contains:
+ enum:
+ - stmmaceth
+ - ptp_ref
+
+ iommus:
+ maxItems: 1
+
+ phy-mode:
+ enum:
+ - rgmii
+ - sgmii
+ - gmii
+
+ rxc-skew-ps:
+ description: Skew control of RXC pad
+
+ rxd0-skew-ps:
+ description: Skew control of RX data 0 pad
+
+ rxd1-skew-ps:
+ description: Skew control of RX data 1 pad
+
+ rxd2-skew-ps:
+ description: Skew control of RX data 2 pad
+
+ rxd3-skew-ps:
+ description: Skew control of RX data 3 pad
+
+ rxdv-skew-ps:
+ description: Skew control of RX CTL pad
+
+ txc-skew-ps:
+ description: Skew control of TXC pad
+
+ txen-skew-ps:
+ description: Skew control of TXC pad
+
+ altr,emac-splitter:
+ $ref: /schemas/types.yaml#/definitions/phandle
+ description:
+ Should be the phandle to the emac splitter soft IP node if DWMAC
+ controller is connected an emac splitter.
+
+ altr,f2h_ptp_ref_clk:
+ $ref: /schemas/types.yaml#/definitions/phandle
+ description:
+ Phandle to Precision Time Protocol reference clock. This clock is
+ common to gmac instances and defaults to osc1.
+
+ altr,gmii-to-sgmii-converter:
+ $ref: /schemas/types.yaml#/definitions/phandle
+ description:
+ Should be the phandle to the gmii to sgmii converter soft IP.
+
+ altr,sysmgr-syscon:
+ $ref: /schemas/types.yaml#/definitions/phandle-array
+ description:
+ Should be the phandle to the system manager node that encompass
+ the glue register, the register offset, and the register shift.
+ On Cyclone5/Arria5, the register shift represents the PHY mode
+ bits, while on the Arria10/Stratix10/Agilex platforms, the
+ register shift represents bit for each emac to enable/disable
+ signals from the FPGA fabric to the EMAC modules.
+ items:
+ - items:
+ - description: phandle to the system manager node
+ - description: offset of the control register
+ - description: shift within the control register
+
+patternProperties:
+ "^mdio[0-9]$":
+ type: object
+
+allOf:
+ - $ref: snps,dwmac.yaml#
+
+unevaluatedProperties: false
+
+examples:
+
+ - |
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/interrupt-controller/irq.h>
+ soc {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ethernet@ff700000 {
+ compatible = "altr,socfpga-stmmac", "snps,dwmac-3.70a",
+ "snps,dwmac";
+ altr,sysmgr-syscon = <&sysmgr 0x60 0>;
+ reg = <0xff700000 0x2000>;
+ interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "macirq";
+ mac-address = [00 00 00 00 00 00]; /* Filled in by U-Boot */
+ clocks = <&emac_0_clk>;
+ clock-names = "stmmaceth";
+ phy-mode = "sgmii";
+ };
+ };
diff --git a/Documentation/devicetree/bindings/net/socfpga-dwmac.txt b/Documentation/devicetree/bindings/net/socfpga-dwmac.txt
deleted file mode 100644
index 612a8e8abc88..000000000000
--- a/Documentation/devicetree/bindings/net/socfpga-dwmac.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-Altera SOCFPGA SoC DWMAC controller
-
-This is a variant of the dwmac/stmmac driver an inherits all descriptions
-present in Documentation/devicetree/bindings/net/stmmac.txt.
-
-The device node has additional properties:
-
-Required properties:
- - compatible : For Cyclone5/Arria5 SoCs it should contain
- "altr,socfpga-stmmac". For Arria10/Agilex/Stratix10 SoCs
- "altr,socfpga-stmmac-a10-s10".
- Along with "snps,dwmac" and any applicable more detailed
- designware version numbers documented in stmmac.txt
- - altr,sysmgr-syscon : Should be the phandle to the system manager node that
- encompasses the glue register, the register offset, and the register shift.
- On Cyclone5/Arria5, the register shift represents the PHY mode bits, while
- on the Arria10/Stratix10/Agilex platforms, the register shift represents
- bit for each emac to enable/disable signals from the FPGA fabric to the
- EMAC modules.
- - altr,f2h_ptp_ref_clk use f2h_ptp_ref_clk instead of default eosc1 clock
- for ptp ref clk. This affects all emacs as the clock is common.
-
-Optional properties:
-altr,emac-splitter: Should be the phandle to the emac splitter soft IP node if
- DWMAC controller is connected emac splitter.
-phy-mode: The phy mode the ethernet operates in
-altr,sgmii-to-sgmii-converter: phandle to the TSE SGMII converter
-
-This device node has additional phandle dependency, the sgmii converter:
-
-Required properties:
- - compatible : Should be altr,gmii-to-sgmii-2.0
- - reg-names : Should be "eth_tse_control_port"
-
-Example:
-
-gmii_to_sgmii_converter: phy@100000240 {
- compatible = "altr,gmii-to-sgmii-2.0";
- reg = <0x00000001 0x00000240 0x00000008>,
- <0x00000001 0x00000200 0x00000040>;
- reg-names = "eth_tse_control_port";
- clocks = <&sgmii_1_clk_0 &emac1 1 &sgmii_clk_125 &sgmii_clk_125>;
- clock-names = "tse_pcs_ref_clk_clock_connection", "tse_rx_cdr_refclk";
-};
-
-gmac0: ethernet@ff700000 {
- compatible = "altr,socfpga-stmmac", "snps,dwmac-3.70a", "snps,dwmac";
- altr,sysmgr-syscon = <&sysmgr 0x60 0>;
- reg = <0xff700000 0x2000>;
- interrupts = <0 115 4>;
- interrupt-names = "macirq";
- mac-address = [00 00 00 00 00 00];/* Filled in by U-Boot */
- clocks = <&emac_0_clk>;
- clock-names = "stmmaceth";
- phy-mode = "sgmii";
- altr,gmii-to-sgmii-converter = <&gmii_to_sgmii_converter>;
-};
--
2.35.3
Return-Path: <linux-kernel+bounces-665661-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 81C9441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:49:12 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 70B784E5DA8
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:48:22 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id EDB4928C00D;
Wed, 28 May 2025 14:47:17 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ddxrQcIy"
Received: from mail-qk1-f181.google.com (mail-qk1-f181.google.com [209.85.222.181])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5B9E828BA86;
Wed, 28 May 2025 14:47:15 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.181
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443637; cv=none; b=E/xax24XxvyMK7rwi4JSz2UmwIu+66VCdnzi5pS84xYjk7nridcXCDGwyqmG2zWyHlbI2o+MvIbZx8gFTW0scxBLMauR0Hy+6xO8q/21qL4ga+11aR4EH8mdU5K8O0IhE6a1Y620yNtn/ontM78iSKfGcYI5W7orNsI5E15VU5I=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443637; c=relaxed/simple;
bh=m+MaMGjgOQIJ9Pg5U4JmFhaKVJyB3n1SsDypWk9VzOg=;
h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=mLlfHlX0xR7EtMiLftnqQmAmaWniQ0+jU8FXW7b3eFBNW4uhpkZXvgYsUkKQi1mJxYMhfJPaakWLN3YmlOJOjZePOL1tANBiR+IbSzv/rJR2BjBZ/Z9h1qdgDklrA9P9h1dl7yhtVSLi+jRg9jlDCczCdwga/qoD+qlPEua1GQ4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ddxrQcIy; arc=none smtp.client-ip=209.85.222.181
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-qk1-f181.google.com with SMTP id af79cd13be357-7c560c55bc1so441422085a.1;
Wed, 28 May 2025 07:47:15 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748443634; x=1749048434; darn=vger.kernel.org;
h=in-reply-to:content-disposition:mime-version:references:subject:cc
:to:from:date:feedback-id:message-id:from:to:cc:subject:date
:message-id:reply-to;
bh=GeCEdtOf7WNBgSJClbP1+l5L+CozBjsJNA4pYrE2hbM=;
b=ddxrQcIyDuExMoiWqpltwpZPdM7/clMKHxLKYsgysQzLbYKo0qQLEPwcnqvgwNKXIW
F9o3DsRUcZrvp5/yzr2gEi+FmBKrL7yotmbCYnHpln+8JL4Xqpq3jYpseQ7S1Ht924yz
Dnq3stZvM6M7qqz2spR8Bjf1SX6tTuOIxZx3HDUzEkqRil+5XCxJ9RtRzihvyNE7K/7b
K/S29HRwMyd0SiNLujFfqiehI/T+/PBEtLJm5wR9zdxYCrVWRPwVcNDWoQUdFbltPzTA
t/QlclCO6QDL0cCEMaM4SH+tuYCj/sXYd8irpJj8YgQuQJGj9C2JrPd/BwjuLC2sjUEO
76kA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748443634; x=1749048434;
h=in-reply-to:content-disposition:mime-version:references:subject:cc
:to:from:date:feedback-id:message-id:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=GeCEdtOf7WNBgSJClbP1+l5L+CozBjsJNA4pYrE2hbM=;
b=jyf8B4GPw1rwoDITHSie1UKdxAuVomir7WkVSXnb5iXwKfFyYvx+BDjiJvB/kYkrSj
VYUevRHQTFwQNmqZOYx9AhB5A0l97+GVOu52VbMcAYZnsYlUjuGunuNyHy4wv5ZVSXJw
1wp1JD6MoCVIMoE78foyHOch81hbnxYQ39/zXLxpkgLbvMLWfv3Hm6fdKq8l/P/kwF1P
sjZ6Ou1FcXr0kP5mNOdo+/jbVlYUHrfycaS3WJsLqN1OF0QXufromq4cWr6iK78O2zTe
SulaXV35OwplX8kguLRrMPs+PuqcNz3ZfM+UJYgcQOKvuMlwLTWNf5oeF0ZC0sIKo2TJ
G4DQ==
X-Forwarded-Encrypted: i=1; AJvYcCU9R4mG0ROgZENIDKFFc2NcVqr9WOVv18UzbSX0AbuZ6+OCct5KcR1GcoV5ZpfpXcgI/6GfFrT++oKgqpvDMnM=@vger.kernel.org, AJvYcCUSZRRdrHqt7Jzn7R5k1FFF9s9TMVrzyc3aAITjMQpFCiMQKP0QJZc2H8bM7lgyB4OvshVz9U+UYlmdz1c=@vger.kernel.org
X-Gm-Message-State: AOJu0YxF4JUOEBMIhAHtn0weF4nyXQ6ooCwVMgwiAv1tHda4LUk211u4
cTDuK8Nx4X+Yif0LJR5HhDWLoyW7yqDkplnPv9CHkJnZaEjQDFzwnvuM
X-Gm-Gg: ASbGncuZXxaQKzwlNUkUFbZgXjdpy2g7+OXB9oSwWMNMX8i4UYc1TH6awvbK+CscGW/
wYwFrV0lNhVudYw6AoeoACuuaOILZGgwTALVDEQGI34XW+NkgOAmLpoeqAgbjm1JhJxhVHicCPF
dBByvFehYLzLg5JkPJW8WznIf94yvKlyKHSff2S0j+s1tIbyfBEVKLwL6K+xQ5vWxZFU5BInlZY
uCaH9S4Uw+5MX4yJGm5f/d7KgbATRRFPzeobAJ9ZEoIX+O7R1z3ZKeJEKJSEiUCdRt34pb3DyMW
SVvyhJnYuU6SiljsWazPnOJfWq4ZZyB+mxEyojDy3+benqKgJzn6dKeqvYsYuLr78BQCnE08L4t
Wz5l9HN+U97Lv+9ghI2twO35suzgZNs1TP34rk5ZYyg==
X-Google-Smtp-Source: AGHT+IFPXQGaw1O1c9U5xXJZVucDUV3AN03vR3z9CahJul5Aavx1etvqSZyGVwO9KoEQIhM2j8MZdg==
X-Received: by 2002:a05:620a:4046:b0:7c5:3cf6:7838 with SMTP id af79cd13be357-7cfcac2a902mr377293585a.49.1748443634006;
Wed, 28 May 2025 07:47:14 -0700 (PDT)
Received: from fauth-a2-smtp.messagingengine.com (fauth-a2-smtp.messagingengine.com. [103.168.172.201])
by smtp.gmail.com with ESMTPSA id af79cd13be357-7cfc5d3a3c6sm78141685a.71.2025.05.28.07.47.12
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 07:47:13 -0700 (PDT)
Message-ID: <683721f1.050a0220.80421.29ff@xxxxxxxxxxxxx>
X-Google-Original-Message-ID: <aDch7ZOD6jjGXJdE@winterfell.>
Received: from phl-compute-03.internal (phl-compute-03.phl.internal [10.202.2.43])
by mailfauth.phl.internal (Postfix) with ESMTP id ABE6B1200043;
Wed, 28 May 2025 10:47:12 -0400 (EDT)
Received: from phl-mailfrontend-02 ([10.202.2.163])
by phl-compute-03.internal (MEProxy); Wed, 28 May 2025 10:47:12 -0400
X-ME-Sender: <xms:8CE3aP0TA48N3AZsWa2ACT3TYM888jb-hDQVijyVQYV0L3eH47Frmw>
<xme:8CE3aOHsdsOZUgpjv_U6t9wcWRyrqEHYNIhEIx5ij_XKSP0f_vf0cEnph7-6ifyN5
xT8EMgQ4Izu1PBO3A>
X-ME-Received: <xmr:8CE3aP5ZQYe14_NIekJBEMAzDe6qai93IpzDAd5w9qWIxwPnZ0RucDFBI-Gij_Fglrpq0-teK2A->
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtddtgddvfeehfeculddtuddrgeefvddrtd
dtmdcutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpggft
fghnshhusghstghrihgsvgdpuffrtefokffrpgfnqfghnecuuegrihhlohhuthemuceftd
dtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpeffhffvvefukfhf
gggtuggjsehttdertddttddvnecuhfhrohhmpeeuohhquhhnucfhvghnghcuoegsohhquh
hnrdhfvghnghesghhmrghilhdrtghomheqnecuggftrfgrthhtvghrnhephedugfduffff
teeutddvheeuveelvdfhleelieevtdeguefhgeeuveeiudffiedvnecuvehluhhsthgvrh
fuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepsghoqhhunhdomhgvshhmthhp
rghuthhhphgvrhhsohhnrghlihhthidqieelvdeghedtieegqddujeejkeehheehvddqsg
hoqhhunhdrfhgvnhhgpeepghhmrghilhdrtghomhesfhhigihmvgdrnhgrmhgvpdhnsggp
rhgtphhtthhopeeffedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepphgvthgvrh
iisehinhhfrhgruggvrggurdhorhhgpdhrtghpthhtoheplhihuhguvgesrhgvughhrght
rdgtohhmpdhrtghpthhtoheprhhushhtqdhfohhrqdhlihhnuhigsehvghgvrhdrkhgvrh
hnvghlrdhorhhgpdhrtghpthhtohepthhglhigsehlihhnuhhtrhhonhhigidruggvpdhr
tghpthhtoheplhhinhhugidqkhgvrhhnvghlsehvghgvrhdrkhgvrhhnvghlrdhorhhgpd
hrtghpthhtohepuggrnhhivghlrdgrlhhmvghiuggrsegtohhllhgrsghorhgrrdgtohhm
pdhrtghpthhtohepmhhinhhgohesrhgvughhrghtrdgtohhmpdhrtghpthhtohepjhhurh
hirdhlvghllhhisehrvgguhhgrthdrtghomhdprhgtphhtthhopehvihhntggvnhhtrdhg
uhhithhtohhtsehlihhnrghrohdrohhrgh
X-ME-Proxy: <xmx:8CE3aE3xuMxJzwINYgvwwxtX5FFkJxZUUqr1wdz-dljBa-9RybqZ-A>
<xmx:8CE3aCGwycgRSDP5pzGYQX0bheqFQqfkkhv_KXSSDw9xnD5s20V_kw>
<xmx:8CE3aF9AcC9kTcYyNrG1BtoeXW-QfRlqPO0aKRo6gbFFCvhcoz-sAA>
<xmx:8CE3aPlT0jjET3CjFdiHGaYTZTsZrSSULvAWTX64aLxViYKuI1fTXQ>
<xmx:8CE3aOFDPIloTPLi5MWNuMI6ghUzAEhdAJRR-jrjx_lUcz5H5g_lO26e>
Feedback-ID: iad51458e:Fastmail
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Wed,
28 May 2025 10:47:11 -0400 (EDT)
Date: Wed, 28 May 2025 07:47:09 -0700
From: Boqun Feng <boqun.feng@xxxxxxxxx>
To: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: Lyude Paul <lyude@xxxxxxxxxx>, rust-for-linux@xxxxxxxxxxxxxxx,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx,
Daniel Almeida <daniel.almeida@xxxxxxxxxxxxx>,
Ingo Molnar <mingo@xxxxxxxxxx>, Juri Lelli <juri.lelli@xxxxxxxxxx>,
Vincent Guittot <vincent.guittot@xxxxxxxxxx>,
Dietmar Eggemann <dietmar.eggemann@xxxxxxx>,
Steven Rostedt <rostedt@xxxxxxxxxxx>, Ben Segall <bsegall@xxxxxxxxxx>,
Mel Gorman <mgorman@xxxxxxx>, Valentin Schneider <vschneid@xxxxxxxxxx>,
Will Deacon <will@xxxxxxxxxx>, Waiman Long <longman@xxxxxxxxxx>,
Miguel Ojeda <ojeda@xxxxxxxxxx>, Alex Gaynor <alex.gaynor@xxxxxxxxx>,
Gary Guo <gary@xxxxxxxxxxx>,
=?iso-8859-1?Q?Bj=F6rn?= Roy Baron <bjorn3_gh@xxxxxxxxxxxxxx>,
Benno Lossin <lossin@xxxxxxxxxx>,
Andreas Hindborg <a.hindborg@xxxxxxxxxx>,
Alice Ryhl <aliceryhl@xxxxxxxxxx>, Trevor Gross <tmgross@xxxxxxxxx>,
Danilo Krummrich <dakr@xxxxxxxxxx>, David Woodhouse <dwmw@xxxxxxxxxxxx>,
Jens Axboe <axboe@xxxxxxxxx>,
Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>,
NeilBrown <neilb@xxxxxxx>, Caleb Sander Mateos <csander@xxxxxxxxxxxxxxx>,
Ryo Takakura <ryotkkr98@xxxxxxxxx>,
K Prateek Nayak <kprateek.nayak@xxxxxxx>
Subject: Re: [RFC RESEND v10 03/14] irq & spin_lock: Add counted interrupt
disabling/enabling
References: <20250527222254.565881-1-lyude@xxxxxxxxxx>
<20250527222254.565881-4-lyude@xxxxxxxxxx>
<20250528091023.GY39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528091023.GY39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 11:10:23AM +0200, Peter Zijlstra wrote:
> On Tue, May 27, 2025 at 06:21:44PM -0400, Lyude Paul wrote:
> > From: Boqun Feng <boqun.feng@xxxxxxxxx>
> >
> > Currently the nested interrupt disabling and enabling is present by
> > _irqsave() and _irqrestore() APIs, which are relatively unsafe, for
> > example:
> >
> > <interrupts are enabled as beginning>
> > spin_lock_irqsave(l1, flag1);
> > spin_lock_irqsave(l2, flag2);
> > spin_unlock_irqrestore(l1, flags1);
> > <l2 is still held but interrupts are enabled>
> > // accesses to interrupt-disable protect data will cause races.
> >
> > This is even easier to triggered with guard facilities:
> >
> > unsigned long flag2;
> >
> > scoped_guard(spin_lock_irqsave, l1) {
> > spin_lock_irqsave(l2, flag2);
> > }
> > // l2 locked but interrupts are enabled.
> > spin_unlock_irqrestore(l2, flag2);
> >
> > (Hand-to-hand locking critical sections are not uncommon for a
> > fine-grained lock design)
> >
> > And because this unsafety, Rust cannot easily wrap the
> > interrupt-disabling locks in a safe API, which complicates the design.
> >
> > To resolve this, introduce a new set of interrupt disabling APIs:
> >
> > * local_interrupt_disable();
> > * local_interrupt_enable();
> >
> > They work like local_irq_save() and local_irq_restore() except that 1)
> > the outermost local_interrupt_disable() call save the interrupt state
> > into a percpu variable, so that the outermost local_interrupt_enable()
> > can restore the state, and 2) a percpu counter is added to record the
> > nest level of these calls, so that interrupts are not accidentally
> > enabled inside the outermost critical section.
> >
> > Also add the corresponding spin_lock primitives: spin_lock_irq_disable()
> > and spin_unlock_irq_enable(), as a result, code as follow:
> >
> > spin_lock_irq_disable(l1);
> > spin_lock_irq_disable(l2);
> > spin_unlock_irq_enable(l1);
> > // Interrupts are still disabled.
> > spin_unlock_irq_enable(l2);
> >
> > doesn't have the issue that interrupts are accidentally enabled.
> >
> > This also makes the wrapper of interrupt-disabling locks on Rust easier
> > to design.
> >
> > Signed-off-by: Boqun Feng <boqun.feng@xxxxxxxxx>
> >
> > ---
> > V10:
> > * Add missing __raw_spin_lock_irq_disable() definition in spinlock.c
> >
> > Signed-off-by: Lyude Paul <lyude@xxxxxxxxxx>
>
> Your SOB is placed wrong, should be below Boqun's. This way it gets
> lost.
>
> Also, is there effort planned to fully remove the save/restore variant?
> As before, my main objection is adding variants with overlapping
> functionality while not cleaning up the pre-existing code.
>
My plan is to map local_irq_disable() to local_interrupt_disable() and
keep local_irq_save() as it is. That is, local_irq_disable() is the
auto-pilot version and local_irq_save/restore() is the manual version.
The reason is that I can see more "creative" (i.e. unpaired) usage of
local_irq_save/restore(), and maybe someone would like to keep them.
Thoughts?
Regards,
Boqun
>
Return-Path: <linux-kernel+bounces-665664-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id EDAE941E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:49:16 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 533C97B2098
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:47:58 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id BA956288C18;
Wed, 28 May 2025 14:49:07 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="O8TFURGt"
Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.13])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2294D283683;
Wed, 28 May 2025 14:49:04 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.13
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443747; cv=none; b=UB+XrAuQUulau2zoD0mfaoFBB9JUjNUzJco2pfRQcfgwzmvRMbeaBv/JUnKc68kUUvto1p5I4qZSnQXV2zLpXDqCkc3ANgdv1kp0th8qWfAhBI5+wjWm6Cicb7tbgGDbQu87zcLksnKutOHZ8kBOIVQk+7pvcFHeM34n2D8TLpM=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443747; c=relaxed/simple;
bh=qgnpP9ARO5vVkvXbwXBu8ojEN41fQJiPFTS4KbCc4r4=;
h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=b2PAPJtr9Tqd1zsrhiy5v+O/w9XdoVBgFDeoU1WbS4b6YRwjTMwBRiXtiP/rqH0I5HC03zfVw9Ya0VDfECx9Ewf0AXwvDXqpVnYVeSIeN73eHSLdBIXtLHZJccvtV8ac19awtqMxfZxPXPgcOVC+dxXhxGWhbzfnhjI+Ff4YKC4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=O8TFURGt; arc=none smtp.client-ip=192.198.163.13
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748443745; x=1779979745;
h=from:to:cc:subject:date:message-id:mime-version:
content-transfer-encoding;
bh=qgnpP9ARO5vVkvXbwXBu8ojEN41fQJiPFTS4KbCc4r4=;
b=O8TFURGtyYoTVcKBp4JyEJkon3ANgyOLSPohLhT9NXKRbz5S7IyPNBxj
KksH3eNM+3H+JA/ihN4zRdSLHlPXqFW3Y3wFq/aB/pjOOTTjRe4TXLJGK
gb5tVfbx9/QCqu54+6EuCW5mtHpOEcSxNObsOzvlXzO6Pu5CDW94O+WmT
s9yvb5pkcbazgJmYSwv8piz/eytzMFiYcuJJpTG5/ZWhChw8E6JihEAl5
0LEb4HCSYpH8R/clitTSgJ6+boRwt7y6ojmUOZmi0d0cdpLkIRamGp1bF
L+pxs3QALjHIn+4DhlGhOb9W0NYWQ3QE5uowB90oMmaQFwhteL+SmlOOz
w==;
X-CSE-ConnectionGUID: zfDymr1KQCeXcf0p2daQBA==
X-CSE-MsgGUID: 6cChL8bORVWYhVcgtrQVkw==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="53096993"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="53096993"
Received: from orviesa001.jf.intel.com ([10.64.159.141])
by fmvoesa107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:49:04 -0700
X-CSE-ConnectionGUID: UTg9ayNJTaK/EJuhyyPE+g==
X-CSE-MsgGUID: TwpyN5IbTV69TFJzmn3hPQ==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="180491922"
Received: from kanliang-dev.jf.intel.com ([10.165.154.102])
by orviesa001.jf.intel.com with ESMTP; 28 May 2025 07:49:04 -0700
From: kan.liang@xxxxxxxxxxxxxxx
To: peterz@xxxxxxxxxxxxx,
mingo@xxxxxxxxxx,
namhyung@xxxxxxxxxx,
irogers@xxxxxxxxxx,
mark.rutland@xxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
linux-perf-users@xxxxxxxxxxxxxxx
Cc: eranian@xxxxxxxxxx,
ctshao@xxxxxxxxxx,
tmricht@xxxxxxxxxxxxx,
leo.yan@xxxxxxx,
Kan Liang <kan.liang@xxxxxxxxxxxxxxx>,
Aishwarya TCV <aishwarya.tcv@xxxxxxx>
Subject: [PATCH] perf: Fix the throttle error of some clock events
Date: Wed, 28 May 2025 07:48:23 -0700
Message-Id: <20250528144823.2996185-1-kan.liang@xxxxxxxxxxxxxxx>
X-Mailer: git-send-email 2.38.1
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-6.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>
The Arm CI reports RCU stall, which can be reproduced by the below perf
command.
perf record -a -e cpu-clock -- sleep 2
The cpu-clock and task_clock are two special SW events, which rely on
the hrtimer. Instead of invoking the stop(), the HRTIMER_NORESTART is
returned to stop the timer. Because the hrtimer interrupt handler cannot
cancel itself, which causes infinite loop.
There may be two ways to fix it.
- Add a check of MAX_INTERRUPTS in the event_stop. Return immediately if
the stop is invoked by the throttle.
- Introduce a PMU flag to track the case. Avoid the event_stop in
perf_event_throttle() if the flag is detected.
The latter looks more generic. It may be used if there are more other
cases that want to avoid the stop later. The latter is implemented.
Reported-by: Leo Yan <leo.yan@xxxxxxx>
Reported-by: Aishwarya TCV <aishwarya.tcv@xxxxxxx>
Closes: https://lore.kernel.org/lkml/20250527161656.GJ2566836@xxxxxxxxxxxxxxx/
Signed-off-by: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>
---
include/linux/perf_event.h | 1 +
kernel/events/core.c | 23 ++++++++++++++++++++---
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 947ad12dfdbe..66f02f46595c 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -303,6 +303,7 @@ struct perf_event_pmu_context;
#define PERF_PMU_CAP_AUX_OUTPUT 0x0080
#define PERF_PMU_CAP_EXTENDED_HW_TYPE 0x0100
#define PERF_PMU_CAP_AUX_PAUSE 0x0200
+#define PERF_PMU_CAP_NO_THROTTLE_STOP 0x0400
/**
* pmu::scope
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 8327ab0ee641..4df274705038 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -2655,7 +2655,22 @@ static void perf_event_unthrottle(struct perf_event *event, bool start)
static void perf_event_throttle(struct perf_event *event)
{
- event->pmu->stop(event, 0);
+ /*
+ * Some PMUs, e.g., cpu-clock and task_clock, may rely on
+ * a special mechanism (hrtimer) to manipulate counters.
+ * The regular stop doesn't work, since the hrtimer interrupt
+ * handler cannot cancel itself.
+ *
+ * The stop should be avoided for such cases. Let the
+ * driver-specific code handle it.
+ *
+ * The counters will eventually be disabled in the driver-specific
+ * code. In unthrottle, they still need to be re-enabled.
+ * There is no handling for PERF_PMU_CAP_NO_THROTTLE_STOP in
+ * the perf_event_unthrottle().
+ */
+ if (!(event->pmu->capabilities & PERF_PMU_CAP_NO_THROTTLE_STOP))
+ event->pmu->stop(event, 0);
event->hw.interrupts = MAX_INTERRUPTS;
perf_log_throttle(event, 0);
}
@@ -11846,7 +11861,8 @@ static int cpu_clock_event_init(struct perf_event *event)
static struct pmu perf_cpu_clock = {
.task_ctx_nr = perf_sw_context,
- .capabilities = PERF_PMU_CAP_NO_NMI,
+ .capabilities = PERF_PMU_CAP_NO_NMI |
+ PERF_PMU_CAP_NO_THROTTLE_STOP,
.dev = PMU_NULL_DEV,
.event_init = cpu_clock_event_init,
@@ -11928,7 +11944,8 @@ static int task_clock_event_init(struct perf_event *event)
static struct pmu perf_task_clock = {
.task_ctx_nr = perf_sw_context,
- .capabilities = PERF_PMU_CAP_NO_NMI,
+ .capabilities = PERF_PMU_CAP_NO_NMI |
+ PERF_PMU_CAP_NO_THROTTLE_STOP,
.dev = PMU_NULL_DEV,
.event_init = task_clock_event_init,
--
2.38.1
Return-Path: <linux-kernel+bounces-665662-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 67B2341E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:49:30 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 9A6E616CB47
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:48:38 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 3AA4F28C2BF;
Wed, 28 May 2025 14:47:31 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TRWJecfb"
Received: from mail-pg1-f175.google.com (mail-pg1-f175.google.com [209.85.215.175])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id C2B5A28BA86;
Wed, 28 May 2025 14:47:28 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.175
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443650; cv=none; b=Mp2GSfG/RFkczWSdeFw+Rt7r9KF1iWF6sSsTtSBbt+TWBfOhymQmbDthLCDzsVDnDtbcfXrAMjx67Z0pnnrNDGudYmzYhBbeCwN6q/ZYSyCN4SDU84zQOsCj5zBAKTxIh3JX0UP2UhGIH3q6NO9G5seXjbuSxV1m1Gf65sHKdY8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443650; c=relaxed/simple;
bh=QVusH8ytRFHR18qIeA5nN1QKmrPz1Ltl6HMFW3sfcwU=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=RkxUX43hOXzY245A9UyuIqWCS76acINSYdhn1b99jCsak14Ht8Dp+90CfrTwsuAOkY29a6/jrToFpSh7jNlRp4pR2jgInoAVDhYGE5+k4QNdMUQekpEKCSeKnzvGvWnRhjvtYGfdqoD6M5sH04C5jSfQG49o157MkQ8uSWxJd7k=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=TRWJecfb; arc=none smtp.client-ip=209.85.215.175
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-pg1-f175.google.com with SMTP id 41be03b00d2f7-b2c4331c50eso1551947a12.3;
Wed, 28 May 2025 07:47:28 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748443648; x=1749048448; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=jeSugzNf1/4gi32f7Z56MbpoGgBCaskHwFTFR4uqoEA=;
b=TRWJecfbYd0AHt/YA12UK44Aapl8RgHFBBb3rV1YDdWZk6Om1bXoHg40Rlkez6SExf
0Gtk3GbnR2GVCch3rfqu4WA00CQa04nA78LUHJyGo/g7qkh5mCifXKsVJHNNAECXzRnp
DEtXZz63KfopmcVT6aFKDa/KL3jAESS6Ghla215BPBr3FPOX9Oek4fzT0OdyhNbazRhz
QYboeLpbT07qAbZNfYpXq5EP5obHXw3GWE76MqL/xL3QyrQCFqqU3N3rWMOECrPBkXV2
IHpJ9hJbVf5RkkpTxua0lMxi0m78/4pBQXlpxFWb+Nowll9peyDwr5r1YDJzahG3mLxz
9QMA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748443648; x=1749048448;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=jeSugzNf1/4gi32f7Z56MbpoGgBCaskHwFTFR4uqoEA=;
b=uctRh/ge9l807Onh0VAg56i5TFSjoElW+4j4aFgOsYi/1Ws7jfomscmdzJDYXMWxPk
P/DwkUk7MEDIqw4sMdOgRfRJkAiKIe6NT7zF3+sbHKWnSfDNFUkX8m5kvpbTIhjU+gXR
36olv6xH1+zRYA9DttTeqdSiAYQYZFlz3kfQxdNbgyowQQlYMlbz7AFQkqklyxrYGOyv
85RszpK2Ryh0S3pJA9lFDiuGgR6I9ZS4ljMjB4wEJt9hoNTGoBlv7bBlxoYFjRA3YOmB
t7bE89zefwWb3mhpBZlKdJfjiVnHPiJdYOl6V73rUGn4rA5hn3GJ58i+fwjsQNEV6XQe
ryzQ==
X-Forwarded-Encrypted: i=1; AJvYcCU+1oQbXSXOQ+GPq+hdFcX/lq9n5i8F+2TMjELSVNJEPUhw/oUplTDZLLHSseORhx1lp47ek8GT553H@xxxxxxxxxxxxxxx, AJvYcCUZwIfpW0lpO77dDZySzVnsqhJshRIPInPscQrfQ3QuFFCfEoPAAgZfGc4BxbWSTnUy769JzMM77V9ugVA=@vger.kernel.org, AJvYcCXB+BV9CCLsQl7MBGoxsaCG5ZGvWA4JKJzAEy0rzh+VtLRtTWGjxIGNMrZ8fj63K7lVPow69tZ4Ojs9Wh9H@xxxxxxxxxxxxxxx
X-Gm-Message-State: AOJu0Yw8zyp2Txt+B2XNIy2/jR/hjR0vK7+8bl/unPx1cvEWibavKCVh
EsvWWDIRdNGAZaq/bOvDpFlaY7lWxAICjlwCQEzeS4a6bBNxQBDIbf7Orn6cUyUmJm+/1I2cdeX
HQPFTZLmMhX1W0Lq+YpXpoO/BwiHZFtkCu9IgoH8=
X-Gm-Gg: ASbGncuNiMzZZv0jRxZFZtuDbaG677HDMx2FHfWa9BEcFWkSZ+xKDLdkOH0wZUG/BBP
tK8UiRFLSqAhOVdX1Thgd+S/0Scjmjf5Ix2+22yptt9yjHyZoqfprGMWTgSHIFh2hkhGfP2e9L4
T8m4bfrqzb+eTbMQ4JMeFB/09Usle6OYVY
X-Google-Smtp-Source: AGHT+IHQJXU3p+rSsWqzxaLHSULaSjkoRZugP1vvKeH7LmxHkr7nUsvjweRVqC9eZYhDskDFMsLev7oBi7HQV+tKXmM=
X-Received: by 2002:a17:90b:4b8b:b0:311:d670:a0e9 with SMTP id
98e67ed59e1d1-311d670ad95mr4555012a91.21.1748443647809; Wed, 28 May 2025
07:47:27 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250502150513.4169098-1-m.felsch@xxxxxxxxxxxxxx>
<20250502150513.4169098-8-m.felsch@xxxxxxxxxxxxxx> <CAHCN7x+Lu9momgX3Vwp+Yu+Tet5Q=k2vCL83SMLuad24SDchEg@xxxxxxxxxxxxxx>
<20250502165535.aeb2osq2vnxsudmq@xxxxxxxxxxxxxx> <CAHCN7xLecU12XtXFuwfNP+eee+9RLCSB9iErNmk7VFV+WrozJA@xxxxxxxxxxxxxx>
<7cf3e219758a67d08137ebea5e52a1abad835e65.camel@xxxxxxxxxxxxx>
In-Reply-To: <7cf3e219758a67d08137ebea5e52a1abad835e65.camel@xxxxxxxxxxxxx>
From: Adam Ford <aford173@xxxxxxxxx>
Date: Wed, 28 May 2025 09:47:14 -0500
X-Gm-Features: AX0GCFs7evzjkWRmfqngQQTZHj2yQaZWL0ja3DzZVNAah62H09qmX0qG_o41Jko
Message-ID: <CAHCN7xJJz2cOHBbyT0mr3QTndiB4Z6_Gtgy4k2giJt5qg4fH6A@xxxxxxxxxxxxxx>
Subject: Re: [RFC PATCH 07/11] arm64: dts: imx8mp: fix VPU_BUS clock setting
To: Nicolas Dufresne <nicolas.dufresne@xxxxxxxxxxxxx>
Cc: Marco Felsch <m.felsch@xxxxxxxxxxxxxx>, benjamin.gaignard@xxxxxxxxxxxxx,
p.zabel@xxxxxxxxxxxxxx, mchehab@xxxxxxxxxx, shawnguo@xxxxxxxxxx,
Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>, kernel@xxxxxxxxxxxxxx, festevam@xxxxxxxxx,
robh@xxxxxxxxxx, krzk+dt@xxxxxxxxxx, conor+dt@xxxxxxxxxx, paulk@xxxxxxxxxxx,
hverkuil@xxxxxxxxx, laurent.pinchart@xxxxxxxxxxxxxxxx,
sebastian.fricke@xxxxxxxxxxxxx, ming.qian@xxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-media@xxxxxxxxxxxxxxx,
linux-rockchip@xxxxxxxxxxxxxxxxxxx, imx@xxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 9:14=E2=80=AFAM Nicolas Dufresne
<nicolas.dufresne@xxxxxxxxxxxxx> wrote:
>
> Hi,
>
> Le mardi 27 mai 2025 =C3=A0 22:05 -0500, Adam Ford a =C3=A9crit :
> > On Fri, May 2, 2025 at 11:55=E2=80=AFAM Marco Felsch <m.felsch@pengutro=
nix.de> wrote:
> > >
> > > On 25-05-02, Adam Ford wrote:
> > > > On Fri, May 2, 2025 at 10:10=E2=80=AFAM Marco Felsch <m.felsch@peng=
utronix.de> wrote:
> > > > >
> > > > > The VPU_PLL clock must be set before the VPU_BUS clock which is d=
erived
> > > > > from the VPU_PLL clock else the VPU_BUS clock is 300MHz and not 6=
00MHz.
> >
> > I did verify the current clock rate ends up at 300MHz instead of the
> > desired 600 or 800MHz, so we should do something.
> >
>
> This reminded me of:
>
> https://patchwork.linuxtv.org/project/linux-media/patch/20250217-b4-hantr=
o-av1-clock-rate-v2-1-e179fad52641@xxxxxxxxxxxxx/
>
> Which also made me discover that this patch wasn't picked despite being m=
ark accepted. We
> will favour DT clock settings from here, since its not really managable o=
therwise, old board
> will stay like this, otherwise we face backward compatibility issues.
>
> Note that G2 and VC8K can be run at higher rate, but to be stable, you ne=
ed
> to also control voltage and proper cooling, not something we want "by def=
ault".
>From what I can tell, imx8m_vpu_hw.c doesn't actually set the clock
rates. It looks like it just enables and disables them. I think the
clocks are all set via the device tree. The 8MP datasheets list the
clock rates based on what they call 'nominal' and 'overdrive' which
determined by some SoC voltages. 600MHz seems reasonable for what NXP
states as Nominal. I didn't see any NXP downstream voltage or cooling
options.
adam
>
> Nicolas
>
> >
> > > > >
> > > > > Signed-off-by: Marco Felsch <m.felsch@xxxxxxxxxxxxxx>
> > > > > ---
> > > > > arch/arm64/boot/dts/freescale/imx8mp.dtsi | 4 ++--
> > > > > 1 file changed, 2 insertions(+), 2 deletions(-)
> > > > >
> > > > > diff --git a/arch/arm64/boot/dts/freescale/imx8mp.dtsi b/arch/arm=
64/boot/dts/freescale/imx8mp.dtsi
> > > > > index 97b09b647ec7..7f4bdefb3480 100644
> > > > > --- a/arch/arm64/boot/dts/freescale/imx8mp.dtsi
> > > > > +++ b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
> > > > > @@ -2289,8 +2289,8 @@ vpumix_blk_ctrl: blk-ctrl@38330000 {
> > > > > <&clk IMX8MP_CLK_VPU_G2_ROOT>,
> > > > > <&clk IMX8MP_CLK_VPU_VC8KE_ROOT>=
;
> > > > > clock-names =3D "g1", "g2", "vc8000e";
> > > > > - assigned-clocks =3D <&clk IMX8MP_CLK_VPU_=
BUS>, <&clk IMX8MP_VPU_PLL>;
> > > > > - assigned-clock-parents =3D <&clk IMX8MP_V=
PU_PLL_OUT>;
> > > > > + assigned-clocks =3D <&clk IMX8MP_VPU_PLL>=
, <&clk IMX8MP_CLK_VPU_BUS>;
> > > > > + assigned-clock-parents =3D <0>, <&clk IMX=
8MP_VPU_PLL_OUT>;
> > > > > assigned-clock-rates =3D <600000000>, <60=
0000000>;
> > > >
> > > > I think there was a move to make the default be overdrive [1] and =
[2]
> > > > and use a 'nominal' device tree for those who are not in overdrive
> > > > mode. According to the TRM, the VPU_BUS_CLK_ROOT, the nominal is
> > > > 600MHz and the overdrive is 800MHz. Based on that, I wonder if the
> > > > values here should be 800MHz and if we should add the nominal value=
s
> > > > of 600MHz to the imx8m-nominal.dtsi file.
> > >
> > > You're right, Ahamd and Lucas did change this. I will adapt it later =
on.
> >
> > I updated my device tree to run in overdrive mode and ran fluster at
> > the higher rates:
> > VPU_G1 - 800MHz,
> > VPU-G2 - 700MHz
> > VPU-Bus - 800MHz
> >
> > ./fluster.py run -d GStreamer-VP8-V4L2SL-Gst1.0
> > Ran 57/61 tests successfully in 5.922 secs
> > (vs 7.059 secs at nominal speed)
> >
> > ./fluster.py run -dGStreamer-H.264-V4L2SL-Gst1.0
> > Ran 129/135 tests successfully in 40.107 secs
> > (vs 45.741 secs at nominal speed)
> >
> > If you want, I can submit the clock updates I have for overdrive or
> > send them to you to save you some time.
> >
> > adam
> >
> > >
> > > Regards,
> > > Marco
Return-Path: <linux-kernel+bounces-665663-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D566441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:49:47 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id B56E217D659
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:48:55 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 4BFC728B4F9;
Wed, 28 May 2025 14:48:45 +0000 (UTC)
Received: from mail-qv1-f77.google.com (mail-qv1-f77.google.com [209.85.219.77])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id A35D0286D72
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:48:42 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.77
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443724; cv=none; b=TdvJEHWbTF1y2n1N89r0ISuGH9lxsmG5uP9MlXhC+V+ILEh3nCJ34QZ4KVbbJ5cWMNWbYI7Adl43C/SJcAIVhW987uDJJigqy/teUmtSGGuv5hUmoKQGgXddcOPFcJrNoJmjW2a/26FxXLEVi1PdlB7mPPRSwb+TX0WwWxrwVTQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443724; c=relaxed/simple;
bh=aSQkgtbaIw4kmPNazY/4wGXVxEjN0zpCY0z42x76mdQ=;
h=MIME-Version:Date:In-Reply-To:Message-ID:Subject:From:To:
Content-Type; b=JrWhHcX3EY2c06GxrR5XdjAgDtwrY7mVd1Zr5FMtAllAMl+1JsxcczcjXhmFjV0bO/mGeTy4OM6BK2OOc6KYhgO/OrrYfHrQWmGFYNndfmT5bVeqvjy0b8w7HQA1Avs3BhmSS0EEamce22YMtHIMrv910V92zPGbTPpcTvHv1yo=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=syzkaller.appspotmail.com; spf=pass smtp.mailfrom=M3KW2WVRGUFZ5GODRSRYTGD7.apphosting.bounces.google.com; arc=none smtp.client-ip=209.85.219.77
Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=syzkaller.appspotmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=M3KW2WVRGUFZ5GODRSRYTGD7.apphosting.bounces.google.com
Received: by mail-qv1-f77.google.com with SMTP id 6a1803df08f44-6faaf3f1552so40622956d6.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 07:48:42 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748443721; x=1749048521;
h=to:from:subject:message-id:in-reply-to:date:mime-version
:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
bh=4cx32Sj3K02lxj9Rd2CNjxbRCZi+yI5OJOD2QwS+p60=;
b=JuOH6wa8fYTder7p+utauw5+FnxCWwo7ToRDhxlRO/0vNOd/dYHJasGtLwV9EZ+Yas
KA7dlQaC0M74EqT1Ufo8BZ+hBqiiH0inZaVvlrm53FSc8BQtX0lSfDTJAtxTUeauw6Y7
EJVqSgkzUep+62fmleOQbzko9gwsTzL8M/4ZgPTFY9Vm2FAnDYp8EbCrNJKxlvBcJlMX
yui3YVomYrJj46sWygXqgucglipJUfFYHjZd2CBbCzW+ysaeRx/ek5RzSL6dsiFk3MsS
KHfVT1Ji3vo/5ed7Auw7k7eJNBKSUA6KeYj1cV+66uLUkGMQDo961oa4QKgUS/6gVtJE
Ta9Q==
X-Forwarded-Encrypted: i=1; AJvYcCX7U9YfHcXeAJlW6yq+8ZKTQafccWejYFGfx/DBHdKHoweUcDubxrwQgEVrGJuiLUQe/me4E7jjg760S+4=@vger.kernel.org
X-Gm-Message-State: AOJu0YyqEFawvGO0ueIlYNWAz5GQcFemzEkDc8ArSRoWWWXQfzeT7EEC
JuhXLccEB6/F5+FNuc/ZEJ9nWrdTP0Iecl5TZTTk246Z1uM03UhyEuceKDv3PI28SQwHa/1BMaS
IjjdSyaaMys2C1LfaKjVtXHWcfyMFMvglnYYozlO8mghjum0aiZTOzRgaSmE=
X-Google-Smtp-Source: AGHT+IHyNdUnFlDInVGodrS7ppM23zNXxx5vyd1O1xHzhAZF56lKu3J3ZIGJXBCUr2NKQDLaFOTt0pjj+esfFRASa9ROXT3BAyXl
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-Received: by 2002:a05:6602:b94:b0:86a:93c:5548 with SMTP id
ca18e2360f4ac-86cbb7be930mr2044389139f.3.1748443711224; Wed, 28 May 2025
07:48:31 -0700 (PDT)
Date: Wed, 28 May 2025 07:48:31 -0700
In-Reply-To: <67ae02b1.050a0220.110943.005e.GAE@xxxxxxxxxx>
X-Google-Appengine-App-Id: s~syzkaller
X-Google-Appengine-App-Id-Alias: syzkaller
Message-ID: <6837223f.a70a0220.253bc2.00d1.GAE@xxxxxxxxxx>
Subject: Re: [syzbot] [ocfs2?] possible deadlock in ocfs2_read_folio
From: syzbot <syzbot+bd316bb736c7dc2f318e@xxxxxxxxxxxxxxxxxxxxxxxxx>
To: jlbec@xxxxxxxxxxxx, joseph.qi@xxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, mark@xxxxxxxxxx, ocfs2-devel@xxxxxxxxxxxxxxx,
syzkaller-bugs@xxxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
X-Spam-Status: No, score=-3.0 required=5.0 tests=FROM_LOCAL_HEX,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
syzbot has found a reproducer for the following issue on:
HEAD commit: c89756bcf406 Merge tag 'pm-6.16-rc1' of git://git.kernel.o..
git tree: upstream
console output: https://syzkaller.appspot.com/x/log.txt?x=1201f170580000
kernel config: https://syzkaller.appspot.com/x/.config?x=ded97a85afe9a6c8
dashboard link: https://syzkaller.appspot.com/bug?extid=bd316bb736c7dc2f318e
compiler: Debian clang version 20.1.6 (++20250514063057+1e4d39e07757-1~exp1~20250514183223.118), Debian LLD 20.1.6
syz repro: https://syzkaller.appspot.com/x/repro.syz?x=113ae6d4580000
C reproducer: https://syzkaller.appspot.com/x/repro.c?x=12b01df4580000
Downloadable assets:
disk image (non-bootable): https://storage.googleapis.com/syzbot-assets/d900f083ada3/non_bootable_disk-c89756bc.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/b21d74e73303/vmlinux-c89756bc.xz
kernel image: https://storage.googleapis.com/syzbot-assets/b778ededeb75/bzImage-c89756bc.xz
mounted in repro: https://storage.googleapis.com/syzbot-assets/6ca75df782b2/mount_0.gz
fsck result: OK (log: https://syzkaller.appspot.com/x/fsck.log?x=14b01df4580000)
IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+bd316bb736c7dc2f318e@xxxxxxxxxxxxxxxxxxxxxxxxx
======================================================
WARNING: possible circular locking dependency detected
6.15.0-syzkaller-03478-gc89756bcf406 #0 Not tainted
------------------------------------------------------
syz-executor341/5408 is trying to acquire lock:
ffff888046e7a2e0 (&ocfs2_file_ip_alloc_sem_key){++++}-{4:4}, at: ocfs2_read_folio+0x353/0x970 fs/ocfs2/aops.c:287
but task is already holding lock:
ffff888046e7a7e0 (mapping.invalidate_lock#3){.+.+}-{4:4}, at: filemap_invalidate_lock_shared include/linux/fs.h:932 [inline]
ffff888046e7a7e0 (mapping.invalidate_lock#3){.+.+}-{4:4}, at: filemap_fault+0x546/0x1200 mm/filemap.c:3391
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #2 (mapping.invalidate_lock#3){.+.+}-{4:4}:
lock_acquire+0x120/0x360 kernel/locking/lockdep.c:5871
down_read+0x46/0x2e0 kernel/locking/rwsem.c:1524
filemap_invalidate_lock_shared include/linux/fs.h:932 [inline]
filemap_fault+0x546/0x1200 mm/filemap.c:3391
ocfs2_fault+0xa4/0x3f0 fs/ocfs2/mmap.c:38
__do_fault+0x138/0x390 mm/memory.c:5098
do_read_fault mm/memory.c:5518 [inline]
do_fault mm/memory.c:5652 [inline]
do_pte_missing mm/memory.c:4160 [inline]
handle_pte_fault mm/memory.c:5997 [inline]
__handle_mm_fault+0x37c5/0x55e0 mm/memory.c:6140
handle_mm_fault+0x3f6/0x8c0 mm/memory.c:6309
faultin_page mm/gup.c:1193 [inline]
__get_user_pages+0x1a78/0x30c0 mm/gup.c:1491
populate_vma_page_range+0x26b/0x340 mm/gup.c:1929
__mm_populate+0x24c/0x380 mm/gup.c:2032
mm_populate include/linux/mm.h:3487 [inline]
vm_mmap_pgoff+0x3f0/0x4c0 mm/util.c:584
ksys_mmap_pgoff+0x51f/0x760 mm/mmap.c:607
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0xfa/0x3b0 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
-> #1 (&mm->mmap_lock){++++}-{4:4}:
lock_acquire+0x120/0x360 kernel/locking/lockdep.c:5871
__might_fault+0xcc/0x130 mm/memory.c:7151
_inline_copy_to_user include/linux/uaccess.h:192 [inline]
_copy_to_user+0x2c/0xb0 lib/usercopy.c:26
copy_to_user include/linux/uaccess.h:225 [inline]
fiemap_fill_next_extent+0x1c0/0x390 fs/ioctl.c:145
ocfs2_fiemap+0x888/0xc90 fs/ocfs2/extent_map.c:806
ioctl_fiemap fs/ioctl.c:220 [inline]
do_vfs_ioctl+0x16d3/0x1990 fs/ioctl.c:841
__do_sys_ioctl fs/ioctl.c:905 [inline]
__se_sys_ioctl+0x82/0x170 fs/ioctl.c:893
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0xfa/0x3b0 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
-> #0 (&ocfs2_file_ip_alloc_sem_key){++++}-{4:4}:
check_prev_add kernel/locking/lockdep.c:3168 [inline]
check_prevs_add kernel/locking/lockdep.c:3287 [inline]
validate_chain+0xb9b/0x2140 kernel/locking/lockdep.c:3911
__lock_acquire+0xab9/0xd20 kernel/locking/lockdep.c:5240
lock_acquire+0x120/0x360 kernel/locking/lockdep.c:5871
down_read+0x46/0x2e0 kernel/locking/rwsem.c:1524
ocfs2_read_folio+0x353/0x970 fs/ocfs2/aops.c:287
filemap_read_folio+0x117/0x380 mm/filemap.c:2401
filemap_fault+0xb16/0x1200 mm/filemap.c:3495
ocfs2_fault+0xa4/0x3f0 fs/ocfs2/mmap.c:38
__do_fault+0x138/0x390 mm/memory.c:5098
do_read_fault mm/memory.c:5518 [inline]
do_fault mm/memory.c:5652 [inline]
do_pte_missing mm/memory.c:4160 [inline]
handle_pte_fault mm/memory.c:5997 [inline]
__handle_mm_fault+0x37c5/0x55e0 mm/memory.c:6140
handle_mm_fault+0x3f6/0x8c0 mm/memory.c:6309
faultin_page mm/gup.c:1193 [inline]
__get_user_pages+0x1a78/0x30c0 mm/gup.c:1491
populate_vma_page_range+0x26b/0x340 mm/gup.c:1929
__mm_populate+0x24c/0x380 mm/gup.c:2032
mm_populate include/linux/mm.h:3487 [inline]
vm_mmap_pgoff+0x3f0/0x4c0 mm/util.c:584
ksys_mmap_pgoff+0x51f/0x760 mm/mmap.c:607
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0xfa/0x3b0 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
other info that might help us debug this:
Chain exists of:
&ocfs2_file_ip_alloc_sem_key --> &mm->mmap_lock --> mapping.invalidate_lock#3
Possible unsafe locking scenario:
CPU0 CPU1
---- ----
rlock(mapping.invalidate_lock#3);
lock(&mm->mmap_lock);
lock(mapping.invalidate_lock#3);
rlock(&ocfs2_file_ip_alloc_sem_key);
*** DEADLOCK ***
1 lock held by syz-executor341/5408:
#0: ffff888046e7a7e0 (mapping.invalidate_lock#3){.+.+}-{4:4}, at: filemap_invalidate_lock_shared include/linux/fs.h:932 [inline]
#0: ffff888046e7a7e0 (mapping.invalidate_lock#3){.+.+}-{4:4}, at: filemap_fault+0x546/0x1200 mm/filemap.c:3391
stack backtrace:
CPU: 0 UID: 0 PID: 5408 Comm: syz-executor341 Not tainted 6.15.0-syzkaller-03478-gc89756bcf406 #0 PREEMPT(full)
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
Call Trace:
<TASK>
dump_stack_lvl+0x189/0x250 lib/dump_stack.c:120
print_circular_bug+0x2ee/0x310 kernel/locking/lockdep.c:2046
check_noncircular+0x134/0x160 kernel/locking/lockdep.c:2178
check_prev_add kernel/locking/lockdep.c:3168 [inline]
check_prevs_add kernel/locking/lockdep.c:3287 [inline]
validate_chain+0xb9b/0x2140 kernel/locking/lockdep.c:3911
__lock_acquire+0xab9/0xd20 kernel/locking/lockdep.c:5240
lock_acquire+0x120/0x360 kernel/locking/lockdep.c:5871
down_read+0x46/0x2e0 kernel/locking/rwsem.c:1524
ocfs2_read_folio+0x353/0x970 fs/ocfs2/aops.c:287
filemap_read_folio+0x117/0x380 mm/filemap.c:2401
filemap_fault+0xb16/0x1200 mm/filemap.c:3495
ocfs2_fault+0xa4/0x3f0 fs/ocfs2/mmap.c:38
__do_fault+0x138/0x390 mm/memory.c:5098
do_read_fault mm/memory.c:5518 [inline]
do_fault mm/memory.c:5652 [inline]
do_pte_missing mm/memory.c:4160 [inline]
handle_pte_fault mm/memory.c:5997 [inline]
__handle_mm_fault+0x37c5/0x55e0 mm/memory.c:6140
handle_mm_fault+0x3f6/0x8c0 mm/memory.c:6309
faultin_page mm/gup.c:1193 [inline]
__get_user_pages+0x1a78/0x30c0 mm/gup.c:1491
populate_vma_page_range+0x26b/0x340 mm/gup.c:1929
__mm_populate+0x24c/0x380 mm/gup.c:2032
mm_populate include/linux/mm.h:3487 [inline]
vm_mmap_pgoff+0x3f0/0x4c0 mm/util.c:584
ksys_mmap_pgoff+0x51f/0x760 mm/mmap.c:607
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0xfa/0x3b0 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f1267d03dd9
Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 b1 18 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007f1267c97208 EFLAGS: 00000246 ORIG_RAX: 0000000000000009
RAX: ffffffffffffffda RBX: 00007f1267d90718 RCX: 00007f1267d03dd9
RDX: 0000000001000003 RSI: 0000000000b36000 RDI: 0000200000000000
RBP: 00007f1267d90710 R08: 0000000000000006 R09: 0000000000000000
R10: 0000000000028011 R11: 0000000000000246 R12: 00007f1267d5d624
R13: 5bf000f24f5ebbca R14: 0000200000000280 R15: 0000200000000000
</TASK>
---
If you want syzbot to run the reproducer, reply with:
#syz test: git://repo/address.git branch-or-commit-hash
If you attach or paste a git patch, syzbot will apply it before testing.
Return-Path: <linux-kernel+bounces-665665-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 409F141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:50:47 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 606063A125E
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:50:26 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id DAE7128B4FA;
Wed, 28 May 2025 14:50:38 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jHYbuvSt"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 16609286D72;
Wed, 28 May 2025 14:50:38 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443838; cv=none; b=KdhltMuaHmR3RNHQAAQzPyl0BfpDE2sFH0exQnIb4qQFGjtOeBeJ4EzwvQbjbGcbUjpLoCw+Km9ajC1SqrvWk9mZ7HFZuPvs9qs+DbTQ+GNZcZ1U5yl0rToO4r2i9YAlavQEavVwk1xqzmermxOksyq8oROBwE6+YHbEZ6wtrVs=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443838; c=relaxed/simple;
bh=ccOcOcTAk/DHCjdt9j3xtztJfkcF/KpTBh2jMVIYcAU=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=fdthyPA5q6yJVBm1RCLR3TQW/8Kd/E4vNHFq9Nka9IPym+v/PYgLzCmgN3tmIbl4mGdKJ9rJDNkocnH/Yzibxdh/yzdcle7KEifziPSHILT8dU+teVIYa2pQwlqlq1WY9GHdqAnXei5lUTfyr44DVbSgh89rj2ppsVlhET2e7Hw=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jHYbuvSt; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 74A98C4CEE3;
Wed, 28 May 2025 14:50:34 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748443837;
bh=ccOcOcTAk/DHCjdt9j3xtztJfkcF/KpTBh2jMVIYcAU=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=jHYbuvStpLdCpvHrb1K1Y0yhch/to5cnea+PsRziKlHdOAH8rKMXGyTgRWxmOX0Fb
try2HmWzKMxlMJkrkkVtKq4RkDYmLqSXxvqPlI/C2UmAvEvWT0ZcjcXl8xgIRCk/tQ
YT+pqUIFVZqYSmfg6XElBpP8dlIOhXCh6zO8JjYe7xlwrhMsaoltD2DDusbZWiu0yu
f3ZY7o4B7evTqGV/XB5AYQHXiupMyQoyFoXg/RqUPT/0jViDed4Sp+Xkvm/FpBlr1x
qpX+0VtskL2QumvQ6j89U4XwKNyXyu75N0hnzEd455o0T7KSLV8l5IDa1b9m0PQ+IR
OS4Oh27MgOiHQ==
Date: Wed, 28 May 2025 15:50:31 +0100
From: Simon Horman <horms@xxxxxxxxxx>
To: Hariprasad Kelam <hkelam@xxxxxxxxxxx>
Cc: netdev@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
Sunil Goutham <sgoutham@xxxxxxxxxxx>,
Linu Cherian <lcherian@xxxxxxxxxxx>,
Geetha sowjanya <gakula@xxxxxxxxxxx>,
Jerin Jacob <jerinj@xxxxxxxxxxx>,
Subbaraya Sundeep <sbhatta@xxxxxxxxxxx>,
Andrew Lunn <andrew+netdev@xxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>,
Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Ratheesh Kannoth <rkannoth@xxxxxxxxxxx>
Subject: Re: [net] Octeontx2-af: Skip overlap check for SPI field
Message-ID: <20250528145031.GD365796@xxxxxxxxxxxxxxxx>
References: <20250525095854.1612196-1-hkelam@xxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250525095854.1612196-1-hkelam@xxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Sun, May 25, 2025 at 03:28:54PM +0530, Hariprasad Kelam wrote:
> Currently, the AF driver scans the mkex profile to identify all
> supported features. This process also involves checking for any
> fields that might overlap with each other.
>
> For example, NPC_TCP_SPORT field offset within the key should
> not overlap with NPC_DMAC/NPC_SIP_IPV4 or any other field.
>
> However, there are situations where some overlap is unavoidable.
> For instance, when extracting the SPI field, the same key offset might
> be used by both the AH and ESP layers. This patch addresses this
> specific scenario by skipping the overlap check and instead, adds
> a warning message to the user.
>
> Fixes: 12aa0a3b93f3 ("octeontx2-af: Harden rule validation.")
> Signed-off-by: Hariprasad Kelam <hkelam@xxxxxxxxxxx>
Reviewed-by: Simon Horman <horms@xxxxxxxxxx>
Return-Path: <linux-kernel+bounces-665666-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 57E8241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:51:22 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 953D23ACF5D
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:51:01 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 2ED2B28B4FB;
Wed, 28 May 2025 14:51:16 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="BOHPwUen"
Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.20])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id D18D9193077;
Wed, 28 May 2025 14:51:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.20
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443875; cv=none; b=RKG3nf10h4pfJL8qNB4LRx2XI4uYkxc7ZKodSwBlqIcMMDErzVP+EF8ornQpNLGmOdqZVv3iq+gEpdZrZl+BdfiJ904HfQWPZjlP4PNdDuYWFtTdrs3GE3kcybqmauOT8r2M1E7YUpO5m6DxqDHrL9DLms2e0AaKM+tMu+/sjyY=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443875; c=relaxed/simple;
bh=9T3VdjKsbwgRUKbVfMomhv/3y3RaeBPwP61+a85Jvu0=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=I4l9WAYf9YkFs5I3LU6Bk+QQOzojlyG87hAWz2L9H8ZxZI3sgevEn9ve6PJrxNiE2qUeZXW2GaxB4i6Pm7q2sQuCgUJVimr6lns5wp8ub7zZHVMWw52CV6qotcphM/igZc/treLOzzgR9cwYLRdyA0Q7t/F0CTY7QPqmMjkYwmk=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=BOHPwUen; arc=none smtp.client-ip=198.175.65.20
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748443873; x=1779979873;
h=message-id:date:mime-version:subject:to:cc:references:
from:in-reply-to:content-transfer-encoding;
bh=9T3VdjKsbwgRUKbVfMomhv/3y3RaeBPwP61+a85Jvu0=;
b=BOHPwUenJjAtttr2XY4G9HiHniEW/2ueyq8nv/l2h85zeZyUj71UxJbX
zF3pu6Xc0nOxmvz7n6eG0p8NczuzNySBZ/XKly5EjaJKhtXdDm8oq1rq7
bYWGrD+3zeCywquTHn9PXMsHWcjXvT9GkYTEMfIESaVKc/PLna08uSLE9
US3y7kYAHS3TWLO1nG2MMmXwFCwZ8uDZ/ydXR1zexplI6vfRIl5w+nqDl
mOUGH85nk74djV4GefrqDZtATqFD/66EHY7kwsv3GIe+AFm8CY+6lk8yR
p3mtez1JI6yTwn/LZ+j6A5ZYXynhR2XvBUYP8BwY6/fcyVxL8rWq7apdS
A==;
X-CSE-ConnectionGUID: NejjY1QiRfWmUpjuXuGReQ==
X-CSE-MsgGUID: hfgS80IFT7ixfmVxbvp+RA==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="50173643"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="50173643"
Received: from orviesa008.jf.intel.com ([10.64.159.148])
by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:51:13 -0700
X-CSE-ConnectionGUID: OcoufsNVTBaBWLFswdGitQ==
X-CSE-MsgGUID: bIti5BAFR4+073oJMosWhA==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="144235207"
Received: from linux.intel.com ([10.54.29.200])
by orviesa008.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 07:51:13 -0700
Received: from [10.246.136.52] (kliang2-mobl1.ccr.corp.intel.com [10.246.136.52])
(using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(No client certificate requested)
by linux.intel.com (Postfix) with ESMTPS id E839620B5736;
Wed, 28 May 2025 07:51:11 -0700 (PDT)
Message-ID: <ef09af0b-f6d4-4d41-b658-93c9b72485ce@xxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 10:51:10 -0400
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH V4 01/16] perf: Fix the throttle logic for a group
To: Leo Yan <leo.yan@xxxxxxx>
Cc: peterz@xxxxxxxxxxxxx, mingo@xxxxxxxxxx, namhyung@xxxxxxxxxx,
irogers@xxxxxxxxxx, mark.rutland@xxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-perf-users@xxxxxxxxxxxxxxx, eranian@xxxxxxxxxx, ctshao@xxxxxxxxxx,
tmricht@xxxxxxxxxxxxx, Aishwarya.TCV@xxxxxxx
References: <20250520181644.2673067-1-kan.liang@xxxxxxxxxxxxxxx>
<20250520181644.2673067-2-kan.liang@xxxxxxxxxxxxxxx>
<20250527161656.GJ2566836@xxxxxxxxxxxxxxx>
<44e1c864-a6e1-41a8-9f11-0ea25999131c@xxxxxxxxxxxxxxx>
<20250528102801.GK2566836@xxxxxxxxxxxxxxx>
Content-Language: en-US
From: "Liang, Kan" <kan.liang@xxxxxxxxxxxxxxx>
In-Reply-To: <20250528102801.GK2566836@xxxxxxxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-6.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 2025-05-28 6:28 a.m., Leo Yan wrote:
> On Tue, May 27, 2025 at 03:30:06PM -0400, Liang, Kan wrote:
>
> [...]
>
>> There may be two ways to fix it.
>> - Add a check of MAX_INTERRUPTS in the event_stop. Return immediately if
>> the stop is invoked by the throttle.
>> - Introduce a PMU flag to track the case. Avoid the event_stop in
>> perf_event_throttle() if the flag is detected.
>>
>> The latter looks more generic. It may be used if there are other cases
>> that want to avoid the stop. So the latter is implemented as below.
>
> Yes. I agreed the fix below is more general and confirmed it can fix
> the observed issue.
>
>> diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
>> index 947ad12dfdbe..66f02f46595c 100644
>> --- a/include/linux/perf_event.h
>> +++ b/include/linux/perf_event.h
>> @@ -303,6 +303,7 @@ struct perf_event_pmu_context;
>> #define PERF_PMU_CAP_AUX_OUTPUT 0x0080
>> #define PERF_PMU_CAP_EXTENDED_HW_TYPE 0x0100
>> #define PERF_PMU_CAP_AUX_PAUSE 0x0200
>> +#define PERF_PMU_CAP_NO_THROTTLE_STOP 0x0400
>>
>> /**
>> * pmu::scope
>> diff --git a/kernel/events/core.c b/kernel/events/core.c
>> index 8327ab0ee641..596597886d96 100644
>> --- a/kernel/events/core.c
>> +++ b/kernel/events/core.c
>> @@ -2655,7 +2655,8 @@ static void perf_event_unthrottle(struct
>> perf_event *event, bool start)
>>
>> static void perf_event_throttle(struct perf_event *event)
>> {
>> - event->pmu->stop(event, 0);
>> + if (!(event->pmu->capabilities & PERF_PMU_CAP_NO_THROTTLE_STOP))
>> + event->pmu->stop(event, 0);
>
> A background info is that even a PMU event is not stopped when
> throttling, we still need to re-enable it. This is why we don't do
> particualy handling for PERF_PMU_CAP_NO_THROTTLE_STOP in
> perf_event_unthrottle().
>
> Maybe it is deserved add a comment for easier understanding.
Sure. A formal patch has been sent. Please take a look.
https://lore.kernel.org/lkml/20250528144823.2996185-1-kan.liang@xxxxxxxxxxxxxxx/
Thanks,
Kan>
> Thanks,
> Leo
>
>> event->hw.interrupts = MAX_INTERRUPTS;
>> perf_log_throttle(event, 0);
>> }
>> @@ -11846,7 +11847,8 @@ static int cpu_clock_event_init(struct
>> perf_event *event)
>> static struct pmu perf_cpu_clock = {
>> .task_ctx_nr = perf_sw_context,
>>
>> - .capabilities = PERF_PMU_CAP_NO_NMI,
>> + .capabilities = PERF_PMU_CAP_NO_NMI |
>> + PERF_PMU_CAP_NO_THROTTLE_STOP,
>> .dev = PMU_NULL_DEV,
>>
>> .event_init = cpu_clock_event_init,
>> @@ -11928,7 +11930,8 @@ static int task_clock_event_init(struct
>> perf_event *event)
>> static struct pmu perf_task_clock = {
>> .task_ctx_nr = perf_sw_context,
>>
>> - .capabilities = PERF_PMU_CAP_NO_NMI,
>> + .capabilities = PERF_PMU_CAP_NO_NMI |
>> + PERF_PMU_CAP_NO_THROTTLE_STOP,
>> .dev = PMU_NULL_DEV,
>>
>> .event_init = task_clock_event_init,
>>
>>
>> Thanks,
>> Kan
>>
>>
>
Return-Path: <linux-kernel+bounces-665667-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 453FE41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:51:48 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id F3D201BC4CCF
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:51:54 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 8CC7328B7C1;
Wed, 28 May 2025 14:51:27 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="kJ5eHxn7"
Received: from mail-qk1-f170.google.com (mail-qk1-f170.google.com [209.85.222.170])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4611E193077;
Wed, 28 May 2025 14:51:24 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.170
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443886; cv=none; b=LsG43MGZA32eJ7/bvDAueQES8+gpj5vLsMweDhu5VmNBSqtBBSMnb1vYwq+qrumi78WAzmRB0DEozfoAFlhOyAPi1szy2il6r6KRE5E4e4vUUglLqkCXLAPRta0KHwWtc5bYE25qDhDZwPAiQQFUzdGKwjMqbAUxZTRfSNhr/SE=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443886; c=relaxed/simple;
bh=CaNlGgqQCzHq8F3U49dwDdVi1yyeghj6F8AwiQKBM94=;
h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=U77Unxwy8PihXRfERVjD/JNyaF+95Xi+2iZl9q6c1nAaQ0PCMJDRr2bpJYfae9dd9EEfDqPoNLAfk4TjXh8wdw47FQa0zLwucA4nB1RC/9uqs5CD31wWaDPiT5MCphpAUkG6A6JLbd89H+80IXaZyxcA1H600mxz34y2W4MDTGs=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=kJ5eHxn7; arc=none smtp.client-ip=209.85.222.170
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-qk1-f170.google.com with SMTP id af79cd13be357-7c54a9d3fcaso418773785a.2;
Wed, 28 May 2025 07:51:24 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748443884; x=1749048684; darn=vger.kernel.org;
h=in-reply-to:content-transfer-encoding:content-disposition
:mime-version:references:subject:cc:to:from:date:feedback-id
:message-id:from:to:cc:subject:date:message-id:reply-to;
bh=m4HPI+uUoKdBGuZtoY9CPzya8qdmq+5VMevK83oBeE8=;
b=kJ5eHxn7ZqojhY0EYtsJP38TYQ6YXNrGJSFsZl8c8elXeRFHElYWDrKVPDwIgDXPyf
ub/R+iElEkVVkrYsGLowqes07rfTZGmGrBBd+yewScjusA355GsXtdCJOYdzBhYFrG9w
Ni15rl26i0aZ1ejq73Vy/BMd3lMXcA61VNr+5FxXz/UZzYWHqetg1xZOBN3UTo02hrXe
Icr22qjCLhj+jiyuWTsGXblmJsTnPLhn2/w6BgHXgPOcmT1bA6T/w6q7g3q8A54zyHaC
BTUpcAAcAXiy66I6GdESKC+ZWbpXjAt3AYKe12cR8vEHOiqCYF9u9uMT+vlrmg/6AW6f
ULkg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748443884; x=1749048684;
h=in-reply-to:content-transfer-encoding:content-disposition
:mime-version:references:subject:cc:to:from:date:feedback-id
:message-id:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=m4HPI+uUoKdBGuZtoY9CPzya8qdmq+5VMevK83oBeE8=;
b=h+y9Dwm8S+wtSUHWgp1tnOigsEoHJt1yyaJKXaEBRE/Giw0mkLkWz1na9huD19hXEt
l+/1kM54fputPH6f+P/exm3l0hlkvztX+QIEu5IVZrRPhl3q3vNSyky5/XpGcc4hGTkl
I1eCKMiR4bnJWfXOctszvdhqQn7dH97NIi3mrOyWfJXMTGxX3tX2Dpgj07Woow4uTmsR
Il1t2xfs74BOH+KLyXR15kS/tu8q8U8xZLIXSg2eEvZwZBkSD+Sy0KqyAD9XsrWRbWi4
pA5PoOmcUFrU7ZfM72ZEsy6jtAw0wKPsPPBPbpkauuYOyTovMdmXhLwHWGY6r85T+8Xo
Jr+Q==
X-Forwarded-Encrypted: i=1; AJvYcCUJH7S//i4/4dnk/G/8jkboBf5tqHVUw55jSNCTFhyaBHHyrA1waDDJ1D04tyRfoPSoVWbsjpJxJ9QreymC@xxxxxxxxxxxxxxx, AJvYcCUUBV6E9apM5iLfm2lrh7Dn/sssDWbaWG+84xYV+LUEoREVll+kgLMz4Elv1oEdxIMZ21I=@vger.kernel.org, AJvYcCVkzj+G5UNnP26zUGbJZ7TdA3yBeQbZXsM9k+lTFBF4qPPvHKcqrpwQqPx/Q/38HgIuj/7p/Qd8VQRf04l+uug=@vger.kernel.org
X-Gm-Message-State: AOJu0YzZrAw4MB1aCqBzkrYjqoO/9v26MKCZNQ7mgNdKiaLv7YOduSLd
Bkwxo5UMBeduEPZe0u9Lq7m0PY2GvH9IZyNbX6E6i9IcoGFzd72zFKVx
X-Gm-Gg: ASbGncuKnkqdxtgt2KaIpT/G3NafiKTz2ScHcbeYEUNEU5mF6Ct/m7IdPCk0K3zK20U
6QcCKLfaNLNGMGaFq22Vbai0WtNSyFogOQenebXyIAfZmMQgC74So/APG+BUcAiuRUKmC+nYyta
kgKgruoTabcAHa9UeFAJhwqinHHpSIKi6zcx57GTo3nA1SEaQSe+uq7HQ1XGKCqAksLjWv9b+3F
awPVTsxdhUDmL4sWM1Y5A8D66Ayn//9Uy8IacBRLB3saakOL7g5ifn1U1QamM80fDHzuWzJE7+o
QrA2tWaKHsZ1o3eQS4vXwlPuZhtQR/k1r4Sb8z67b8INMkoSJB0VFrP81qAM12owyMz89QKOwCg
Vq1On23YloRcnCLRCHwy+yx4DeBY7+YabNe+/7jNHTzodj8gXxEjq
X-Google-Smtp-Source: AGHT+IFiFNSqe6X/cs8W0Ae+kpNzm5s01ff7TiY9jBksJfOfSzABXvHKKUK9dRrwKFB8WycQwR+gKA==
X-Received: by 2002:a05:620a:a901:b0:7cf:15a:7fb1 with SMTP id af79cd13be357-7cf015a8019mr815186385a.10.1748443883994;
Wed, 28 May 2025 07:51:23 -0700 (PDT)
Received: from fauth-a2-smtp.messagingengine.com (fauth-a2-smtp.messagingengine.com. [103.168.172.201])
by smtp.gmail.com with ESMTPSA id af79cd13be357-7cfb82002c8sm79166185a.5.2025.05.28.07.51.23
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 07:51:23 -0700 (PDT)
Message-ID: <683722eb.050a0220.3d9475.2b4a@xxxxxxxxxxxxx>
X-Google-Original-Message-ID: <aDci6Dz7u6gEUnwr@winterfell.>
Received: from phl-compute-10.internal (phl-compute-10.phl.internal [10.202.2.50])
by mailfauth.phl.internal (Postfix) with ESMTP id 049FB1200043;
Wed, 28 May 2025 10:51:23 -0400 (EDT)
Received: from phl-mailfrontend-01 ([10.202.2.162])
by phl-compute-10.internal (MEProxy); Wed, 28 May 2025 10:51:23 -0400
X-ME-Sender: <xms:6iI3aCvUg_433TA6Z04ZQJ5CUJlEID6pYkGhaiZFjC0QpN5B1yx_Ng>
<xme:6iI3aHcUWvjkUQ1Lkxo14ldf_hl1UClxv-D4cuWjZahIkEQ8WjXtDT2SL7HoMVGsm
fdx2hl3SUTcY2d5NQ>
X-ME-Received: <xmr:6iI3aNz40bMwHYPOXQQ-cY0ChGjuyYw3-BQk1dee1EvJd7wISfsJ_kMfAMJ5Ug>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtddtgddvfeehheculddtuddrgeefvddrtd
dtmdcutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpggft
fghnshhusghstghrihgsvgdpuffrtefokffrpgfnqfghnecuuegrihhlohhuthemuceftd
dtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpeffhffvvefukfhf
gggtugfgjgesthekredttddtjeenucfhrhhomhepuehoqhhunhcuhfgvnhhguceosghoqh
hunhdrfhgvnhhgsehgmhgrihhlrdgtohhmqeenucggtffrrghtthgvrhhnpeejhfeikeek
ffejgeegueevffdtgeefudetleegjeelvdffteeihfelfeehvdegkeenucffohhmrghinh
epkhgvrhhnvghlrdhorhhgnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehm
rghilhhfrhhomhepsghoqhhunhdomhgvshhmthhprghuthhhphgvrhhsohhnrghlihhthi
dqieelvdeghedtieegqddujeejkeehheehvddqsghoqhhunhdrfhgvnhhgpeepghhmrghi
lhdrtghomhesfhhigihmvgdrnhgrmhgvpdhnsggprhgtphhtthhopeekpdhmohguvgepsh
hmthhpohhuthdprhgtphhtthhopehmihhguhgvlhdrohhjvggurgdrshgrnhguohhnihhs
sehgmhgrihhlrdgtohhmpdhrtghpthhtohepphgsohhniihinhhisehrvgguhhgrthdrtg
homhdprhgtphhtthhopehlihhnuhigqdhkvghrnhgvlhesvhhgvghrrdhkvghrnhgvlhdr
ohhrghdprhgtphhtthhopehkvhhmsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpth
htoheprhhushhtqdhfohhrqdhlihhnuhigsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhr
tghpthhtohepohhjvggurgeskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepshhfrhestg
grnhgsrdgruhhughdrohhrghdrrghupdhrtghpthhtohepsghoqhhunhesfhhigihmvgdr
nhgrmhgv
X-ME-Proxy: <xmx:6iI3aNMJsK1ql7yT3mKpSUP7SZOLDBeDnenZ4yWk60LWDJaa7_fwwg>
<xmx:6iI3aC-Fj2Fq2ptvcevwPq6UtT0nI53Kr5JR-hY4-3nVoY36s5SfPA>
<xmx:6iI3aFWL_oXdb9C6pAs-4YUR3OrOpkiFqKhfDVQE_hZDd2Rs8KIjOA>
<xmx:6iI3aLdCiVmesyv198D8wTu7kzypEbLsnMeWqV_d8LP6NMdEI5caDw>
<xmx:6iI3aMeexqz7gsyEaSa2P4lke1avl9wWdzzB33eO-RIV_OSt2l9DW3HC>
Feedback-ID: iad51458e:Fastmail
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Wed,
28 May 2025 10:51:22 -0400 (EDT)
Date: Wed, 28 May 2025 07:51:20 -0700
From: Boqun Feng <boqun.feng@xxxxxxxxx>
To: Miguel Ojeda <miguel.ojeda.sandonis@xxxxxxxxx>
Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx,
kvm@xxxxxxxxxxxxxxx, rust-for-linux@xxxxxxxxxxxxxxx,
ojeda@xxxxxxxxxx, Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx>
Subject: Re: [PATCH] rust: add helper for mutex_trylock
References: <20250528083431.1875345-1-pbonzini@xxxxxxxxxx>
<CANiq72nwM79eGSAt8FjKgoYCJd-bLeTojaQAtg3SECE28uByQQ@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <CANiq72nwM79eGSAt8FjKgoYCJd-bLeTojaQAtg3SECE28uByQQ@xxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 11:39:12AM +0200, Miguel Ojeda wrote:
> On Wed, May 28, 2025 at 10:34â?¯AM Paolo Bonzini <pbonzini@xxxxxxxxxx> wrote:
> >
> > Ok to apply to the KVM tree?
>
> Yeah, looks good to me, thanks!
>
> Acked-by: Miguel Ojeda <ojeda@xxxxxxxxxx>
>
> Cc'ing Boqun just in case and so that he is aware. Boqun: this fixes a
> Rust build error on the kvm branch which failed on merging into -next:
>
> https://lore.kernel.org/linux-next/20250528152832.3ce43330@xxxxxxxxxxxxxxxx/
>
Thank you both!
Reviewed-by: Boqun Feng <boqun.feng@xxxxxxxxx>
Regards,
Boqun
> Cheers,
> Miguel
Return-Path: <linux-kernel+bounces-665668-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id AB07F41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:52:07 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 0D0AF16BC5A
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:52:05 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 61B1928B407;
Wed, 28 May 2025 14:51:58 +0000 (UTC)
Received: from foss.arm.com (foss.arm.com [217.140.110.172])
by smtp.subspace.kernel.org (Postfix) with ESMTP id CEDD82882C9
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:51:55 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443918; cv=none; b=Z+dUr+JHqxzHeQTsrpqPLrm61WRalCCg3jfW8UuMPVT26AKP4m4q4TNqWayB1GFO7O1MOywLP+9EBGQtIUmTuaW5YEcguV6hwJnLYCvtnjnQlGYXdjSO6y6Diroi00XKb78DBvVUWr/O95yCgeef1j+TVl5auPXu+oF17BM1RzY=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443918; c=relaxed/simple;
bh=2U9xGHLfs43eXnefr/kglRjJiDhQ2/XDV4dJJI/1diU=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=kjCO2W9KT5FptilK58QJuzo9i4kPn8hV29f+0mQ7uaPDQNOzmlXQyCoTVMTlQm0DjtP5mDN+LCFMYmgThWanmh6zGfODjcKeRYgRpo58ReS3TU+xAc+Gpx1sfQw99RJrngq4bS0QwlhXwm1JlYyCyx0OaHPznQaxqG8ulJ2ibl4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 477DE1A2D;
Wed, 28 May 2025 07:51:38 -0700 (PDT)
Received: from [10.57.94.142] (unknown [10.57.94.142])
by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id DB6363F5A1;
Wed, 28 May 2025 07:51:52 -0700 (PDT)
Message-ID: <70f0abde-24a1-4016-9a69-cc341e9ef6af@xxxxxxx>
Date: Wed, 28 May 2025 15:51:51 +0100
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH v5 0/9] Merge arm64/riscv hugetlbfs contpte support
Content-Language: en-GB
To: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>,
Alexandre Ghiti <alex@xxxxxxxx>
Cc: Alexandre Ghiti <alexghiti@xxxxxxxxxxxx>, Will Deacon <will@xxxxxxxxxx>,
Catalin Marinas <catalin.marinas@xxxxxxx>,
Mark Rutland <mark.rutland@xxxxxxx>, Matthew Wilcox <willy@xxxxxxxxxxxxx>,
Paul Walmsley <paul.walmsley@xxxxxxxxxx>, Palmer Dabbelt
<palmer@xxxxxxxxxxx>, Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-riscv@xxxxxxxxxxxxxxxxxxx, linux-mm@xxxxxxxxx
References: <20250321130635.227011-1-alexghiti@xxxxxxxxxxxx>
<4dd5d187-f977-4f27-9937-8608991797b5@xxxxxxxx>
<64409a13-1c07-42cd-b1ec-572042738f1b@xxxxxxx>
<84cb893a-46e3-408a-ba0e-2eff0b44d2a1@xxxxxxxx>
<20250508123046.GA3706@willie-the-truck>
<CAHVXubjZB-riBLv+RGis6ErS8NvU4ijVTgvUO06fTxPhbEjXfA@xxxxxxxxxxxxxx>
<2ad910f4-6930-4da2-aa2b-f3875f71e001@xxxxxxx>
<e1ff054e-bfaf-48d1-9d6f-46ea73d09ac9@lucifer.local>
<c5df4570-84a6-430a-ba49-81cf75930c16@xxxxxxxx>
<a42e05b9-7568-4ebd-8797-c635c07d1884@lucifer.local>
From: Ryan Roberts <ryan.roberts@xxxxxxx>
In-Reply-To: <a42e05b9-7568-4ebd-8797-c635c07d1884@lucifer.local>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 27/05/2025 10:37, Lorenzo Stoakes wrote:
[...]
>>>
>>> And who would you sensibly propose for M's and R's?
>>
>>
>> Ryan is definitely a M, I would be happy to help as M too but if needed, a R
>> is enough for me.
>
> Ryan understands this area better than I do, so I would say it's up to him as to
> whether he thinks this makes sense.
I'd certainly like to be an R. I'd prefer not to sign up for M right now though,
unless there is nobody else willing to take it on.
Return-Path: <linux-kernel+bounces-665669-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id DA34F41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:52:52 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 5AAD9188FCA4
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:52:35 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id F2CB928B7C9;
Wed, 28 May 2025 14:52:08 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="c6pkJnAz"
Received: from mail-ed1-f66.google.com (mail-ed1-f66.google.com [209.85.208.66])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 79A0527470;
Wed, 28 May 2025 14:52:06 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.66
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443928; cv=none; b=pZpWwOL3kw9rQA04jP4cd9lFGrawpb006DFvQBFKSen1tVNNej6Dnja4yz6KKSmYf/RUGtmGKGLkMDyfHyGrcNR7cACGrSsLzguo6V1UAKTv+APIahgF6vrh87rapfXE2kNTQNq8h62TgCtlYAgem1zCN4kD9DTiC6AWCMTreqw=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443928; c=relaxed/simple;
bh=FYFAtjZgoReCRh1+A0oOMulxdV/0cEOl0qPoTpv12QI=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=RVzRzEMj6fudwVqiPglJtk70xJPHAPnawrc2BgfxUtDa/wGHsEkOKErSIkY/iiJYvdIGzg6ROpzTRMDc74ELQEpLs/za58s56GqsKHT9Jm92Zf56ULq5ilP4E8bp95d1y1jtE5QKVigVuP8Y2ivSukb//3FRccedFtHlz2U9Kx4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=c6pkJnAz; arc=none smtp.client-ip=209.85.208.66
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-ed1-f66.google.com with SMTP id 4fb4d7f45d1cf-604e745b6fbso4816689a12.2;
Wed, 28 May 2025 07:52:06 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748443925; x=1749048725; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=FYFAtjZgoReCRh1+A0oOMulxdV/0cEOl0qPoTpv12QI=;
b=c6pkJnAzIv7vJX2qYkjaVDwtMy7BYJLZmlgQxinl9kJAU4eJidXZqUZrNi1/BGtTUy
xnm6jXIvs7xzHWzvy6a0EBYSAxawxx5XzZD2etBuarvS94v/u7Bsvh0UZ0wFYT3X2Qv4
4i4enQEPhizRHjD5BUl0iD3SIb91m/Y5f3S5ZxxijmukNbizwK98yaCJAuZ1sm337hx/
+gQ485dEsDSaL+STtyGwRoDK0Tc0KWG8Z9OCvTc0/0A2nmUWnwCSYMKe96wJlBeaO+gt
uIM27fJPzjNlL+1ApFKt9B9dDhLhbsNZKeGpvSRE04IyZSmbZ/CzBodYxF6ZWZ2txeGn
AxpA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748443925; x=1749048725;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=FYFAtjZgoReCRh1+A0oOMulxdV/0cEOl0qPoTpv12QI=;
b=RBGs1s4aiSJ6FLNW8AbLIiqNEqIqg1N2wsGXrWsfxQuyY+yR4qMcV4BhNfwpgCe6U6
vY2AYzE8LHisRQBpQ77bJKCFwTcgPaQjj/47Prq0F/bACW+xgZye8cD32A2Uml6lewuL
NaSeJxkh3JribTU7z+8fYrqaQz0IJiYu3BtzGZ3ghy8BJrW2pYuiiXROOqEUkolOHeH0
oU8ZpnIKHdecF1y8FD8rLfLlibfwuCBFQapLsR0XLnurPMTuyg7UwpyjaiyL9znE2DWH
DfpsHro3b0N+ibj6W/xzd4CiIkrmrcmn9SSe2fvdgPnPqdaQYLtVLSOiqCvjTn5XThh8
W/2w==
X-Forwarded-Encrypted: i=1; AJvYcCV/Si9m+I1SZtzKKLJt24VVe6U1PFTFh9CasA2RF9BfVBdaxikxJymk7gJoBXceqrR6Rehyxh9R@xxxxxxxxxxxxxxx, AJvYcCVb9Hhqxs7qCwUfdcBdPLDV9aqX7SZnJyAnshKiYb0Jo/lcAT4kK9zBKNWJq345yKEbJXpff5ra72Cg0UM=@vger.kernel.org, AJvYcCXOFKurlRLWYw/wUHeGT92QAtTK3/ZlpmRvK/saOluBcZeQCiJ9L/1LDcuRyfTZHkNGlTHFRRjLZENlWGBEjPle@xxxxxxxxxxxxxxx
X-Gm-Message-State: AOJu0Ywu5kElts048e7+MtXTMQXfyl/g0GpOnxitNOPZtqYEz7n1IhQm
J/JGRpHPg+saloVvpW66haqclKliwqACHS98Ij1A5e64eqkrGw+viJANixtwQ++PZXW9t7Ps5X5
m+KCbLJ/x+wH+B91Pa7bIKb3+fcPEFIA=
X-Gm-Gg: ASbGncvI18PC3/MaCy4xHQ5v1Wt5Ef74IYOY9d3fM1nXzmL6X2gbFTUwdIRN631hyO2
pjVwzklXl1WvFuxYPEzY8eHuS7XtDhMAsr/o7f8hMOQX22XHbx8bAmUoeABgWuuD9Aui0WVwAvI
zxd2c/mQUan/YUqpDxH7E4M/mY1b9+kxoAv69kyL77rdM4
X-Google-Smtp-Source: AGHT+IHCHj5i/JHxprIIVBaMZEIsSAEK5ItwSVFw3hjD1m2MYmYw0U1Nqq6jpvx1vYLohy4LiF7mFibPrSyZXcfQm6o=
X-Received: by 2002:a17:906:4fd5:b0:ad5:7234:e4a9 with SMTP id
a640c23a62f3a-ad8a1f30fc2mr222132266b.28.1748443924494; Wed, 28 May 2025
07:52:04 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <CAN2Y7hxscai7JuC0fPE8DZ3QOPzO_KsE_AMCuyeTYRQQW_mA2w@xxxxxxxxxxxxxx>
<aDcLIh2lPkAWOVCI@xxxxxxxxx> <CAN2Y7hzKd+VxWy56q9ad8xwCcHPy5qoEaswZapnF87YkyYMcsA@xxxxxxxxxxxxxx>
<CANn89iLG4mgzHteS7ARwafw-5KscNv7vBD3zM9J6yZwDq+RbcQ@xxxxxxxxxxxxxx>
<5611b12b-d560-cbb8-1d74-d935f60244dd@xxxxxxxxxxxxxxxxx> <CAN2Y7hxZdWLfd34LPzhUPZJ-oMksajLMVt5K8B6Gy70e9TXMpw@xxxxxxxxxxxxxx>
<c9255252-3b6a-886a-5959-d59d0bb4640e@xxxxxxxxxxxxxxxxx>
In-Reply-To: <c9255252-3b6a-886a-5959-d59d0bb4640e@xxxxxxxxxxxxxxxxx>
From: ying chen <yc1082463@xxxxxxxxx>
Date: Wed, 28 May 2025 22:51:52 +0800
X-Gm-Features: AX0GCFvOG3jraqdCxOfoKuHE86_L1n-yGH8mYqszeOJ3-K1ynaukKbLupId3EKg
Message-ID: <CAN2Y7hy=DRkm9zpNbHfkqjHeGm6UAWeUweXzPH2+Nzf=O9i7-Q@xxxxxxxxxxxxxx>
Subject: Re: [bug report, linux 6.15-rc4] A large number of connections in the
SYN_SENT state caused the nf_conntrack table to be full.
To: Jozsef Kadlecsik <kadlec@xxxxxxxxxxxxxxxxx>
Cc: Eric Dumazet <edumazet@xxxxxxxxxx>, Florian Westphal <fw@xxxxxxxxx>, pablo@xxxxxxxxxxxxx,
kadlec@xxxxxxxxxxxxx, davem@xxxxxxxxxxxxx, kuba@xxxxxxxxxx, pabeni@xxxxxxxxxx,
netfilter-devel@xxxxxxxxxxxxxxx, coreteam@xxxxxxxxxxxxx,
netdev@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 10:18=E2=80=AFPM Jozsef Kadlecsik
<kadlec@xxxxxxxxxxxxxxxxx> wrote:
>
> On Wed, 28 May 2025, ying chen wrote:
>
> > On Wed, May 28, 2025 at 9:45=E2=80=AFPM Jozsef Kadlecsik
> > <kadlec@xxxxxxxxxxxxxxxxx> wrote:
> >>
> >> On Wed, 28 May 2025, Eric Dumazet wrote:
> >>
> >>> On Wed, May 28, 2025 at 6:26=E2=80=AFAM ying chen <yc1082463@xxxxxxxx=
m> wrote:
> >>>>
> >>>> On Wed, May 28, 2025 at 9:10=E2=80=AFPM Florian Westphal <fw@strlen.=
de> wrote:
> >>>>>
> >>>>> ying chen <yc1082463@xxxxxxxxx> wrote:
> >>>>>> Hello all,
> >>>>>>
> >>>>>> I encountered an "nf_conntrack: table full" warning on Linux 6.15-=
rc4.
> >>>>>> Running cat /proc/net/nf_conntrack showed a large number of
> >>>>>> connections in the SYN_SENT state.
> >>>>>> As is well known, if we attempt to connect to a non-existent port,=
the
> >>>>>> system will respond with an RST and then delete the conntrack entr=
y.
> >>>>>> However, when we frequently connect to non-existent ports, the
> >>>>>> conntrack entries are not deleted, eventually causing the nf_connt=
rack
> >>>>>> table to fill up.
> >>>>>
> >>>>> Yes, what do you expect to happen?
> >>>> I understand that the conntrack entry should be deleted immediately
> >>>> after receiving the RST reply.
> >>>
> >>> Then it probably hints that you do not receive RST for all your SYN
> >>> packets.
> >>
> >> And Eric has got right: because the states are in SYN_SENT then either=
the
> >> RST packets were not received or out of the window or invalid from oth=
er
> >> reasons.
> > I also suspect it's due to being "out of the window", but I'm not sure =
why.
>
> tcpdump of the traffic from the targeted machine with both the SYN and RS=
T
> packets could help (raw pcap or at least the output with absolute seqs).
>
> Best regards,
> Jozsef
Using bpftrace, I found that the RST is under the lower bound and
printed the values of the following variables:
receiver->td_maxwin =3D 1
sender->td_end =3D 0
receiver->td_maxwin =3D1
Return-Path: <linux-kernel+bounces-665670-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 2580041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:53:12 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 79F5D18901A4
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:53:08 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 7222D28B4FD;
Wed, 28 May 2025 14:52:47 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=mareichelt.com header.i=@mareichelt.com header.b="rt8Tt4Vh"
Received: from antaris-organics.com (mail.antaris-organics.com [91.227.220.155])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id DAB4D286D72;
Wed, 28 May 2025 14:52:44 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.227.220.155
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443966; cv=none; b=PCgIOKn46r3U17VG4wpps8gY4UVr6CsgVpjeZ8IwTGExNCmn8v3g7wUVY1MtxJkM6A4bgv4MAB/omNEBw3b7HC4iyUKdCeUqIjUUC6B/AadzKsfFM/nHbgnIcChZ4rr9OqJiZAKt7Tn++s01vgIs8FZomX6u7uBOdnrR5+/ysNQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443966; c=relaxed/simple;
bh=nqPK46BepQdOlhO7fZO9M00tPuMAWJbU5yRyRms7cFo=;
h=Date:From:To:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=kicfmkZmlekRRx0PlCAtMcodAmHpZdR/pdSuJ57nenImqHmY8dGpMZx55AyFvM9623Q+S36GmeUzbV/UsAHWueacfwxbV43pw4829YTJfdxmeT+89ElaN6yAZOwwJI81GERazqaQz/U9jcyjs/P0MCdZOAIJikbNkg+QmQp8a5Q=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=mareichelt.com; spf=pass smtp.mailfrom=mareichelt.com; dkim=pass (2048-bit key) header.d=mareichelt.com header.i=@mareichelt.com header.b=rt8Tt4Vh; arc=none smtp.client-ip=91.227.220.155
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=mareichelt.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mareichelt.com
Date: Wed, 28 May 2025 16:52:36 +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=mareichelt.com;
s=202107; t=1748443957;
bh=nqPK46BepQdOlhO7fZO9M00tPuMAWJbU5yRyRms7cFo=;
h=Date:From:To:Subject:Message-ID:References:MIME-Version:
Content-Type:In-Reply-To:Cc:Cc:content-type:content-type:date:date:
From:from:in-reply-to:in-reply-to:message-id:mime-version:
mime-version:references:reply-to:Sender:Subject:Subject:To:To;
b=rt8Tt4VhiAfTC+u3WNjVoykIPhX/1L9R5QU6ALUT2jh9rrXIeAo8Zn8+Flr2Rv7sc
SAfyASZdtuEFTzqp54w0RRE/hsGDH75OA7Bo002Wdexh9a4NyaUxMtwz1YPV5S24uI
2pTkZd98VIM3AJYSF2xaG0cUJJxHAInZQaGr3PXYFlTDNOZtxrLGxvStmFAXzYSQJx
cNLX5bKkev/H4QRWKx2erMLIJXjti1wOfZ6E/Lf7OIqTN+KSsoAE5TXBkkcLFG9UQP
ht3H0FYUdH9nxgGmelpxehMHfCglumigKE1hLl4icX4Uh7uv+qAAof8kHIPE/h9btY
IbbUzM9A/IS+w==
From: Markus Reichelt <lkt+2023@xxxxxxxxxxxxxx>
To: stable@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH 6.14 000/783] 6.14.9-rc1 review
Message-ID: <20250528145236.GA24108@xxxxxxxxxxxxxxxxxxx>
Mail-Followup-To: stable@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
References: <20250527162513.035720581@xxxxxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250527162513.035720581@xxxxxxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
* Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> wrote:
> This is the start of the stable review cycle for the 6.14.9 release.
> There are 783 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Thu, 29 May 2025 16:22:51 +0000.
> Anything received after that time might be too late.
Hi Greg
6.14.9-rc1 compiles, boots and runs here on x86_64 (AMD Ryzen 5 7520U,
Slackware64-current), no regressions observed.
Tested-by: Markus Reichelt <lkt+2023@xxxxxxxxxxxxxx>
Return-Path: <linux-kernel+bounces-665671-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 4F92241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:53:28 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 426F23A93CE
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:53:07 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id A568F265CC5;
Wed, 28 May 2025 14:53:19 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="Cm+PPFKu"
Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11013011.outbound.protection.outlook.com [52.101.72.11])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id EDA5F1A5B91;
Wed, 28 May 2025 14:53:15 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.11
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748443998; cv=fail; b=kOFqmqC0HX+9xZqNSUg8UPOJTpaMY1Q/52VUR/MTp2lpsrj6j3qw/3aZYZpkvV8RMj/nCB8ryFt+D+SyRZ3mWwDbEitYZXevZqbUk7LAwvmJ2TQtOsZO7Y7msqbJGn9ERphUGE+8Xc1+DhfrdyhcRXudpZ9dY03KAsZ0R3nt0ZU=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748443998; c=relaxed/simple;
bh=hLDMip9V6PbsIHoAIUo7Gt/Pxz03Lr+N/DhvY5iJuis=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=U3gdQvbSyA+65jCn0v6u42X4+donESEGGtBDloj9qNuJp9Xx8pf+fGub6ydrjwVcHogdKZdF7AVPzQZZvJ4Zoj2IxQjkLYthlhxelAqGlq8n22bS30GZcfUlHkm0SY8zDmmrPTBHJniHrWS//EcOH40SsL9m6rB6/5/z7gcWFbo=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=Cm+PPFKu; arc=fail smtp.client-ip=52.101.72.11
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=xP6HBerSHDozpOEDjxVsQPFr0x+cAVqv8XyTKXex02OfHNXNzw5zG0/eCihJ1nvHEM2JKBrRlXNJS605t6bcYNkAXElC9I40Klw+qnfRoegn0z8qfSbY3pJQt16GjcyjIbAi11XhUg0jQPn/l8jzS8UnuX3aoDW0URIthZQMAbUdx9usR9VQFj2k1QtpIEYhbNBx/nYq5AEkOFvIAEriO3NlGBF18K1BIh92kW/RXE6/DFe8e6LuTxDazQdjXSyTXSv/EI0/XxcA6jUbG6O1K3SttGt4ACXBVvFbwe7E9cyjaKfAdtLpxhRp5oQ1vNnkx1zuPQMtrSUeWXsdZpD2yQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=MupEJWREZvbcHKp7jpQ8OBtDeqAIcIZP+PK/a2E6OqU=;
b=PWgdpOQV3/dovWYo7mJ/IT15nVTmZJ4j2jhvl5XusAZSMGEYfAwLFpQxYJd3U4rAn68tuvQrn4KlK9Losg52HHfYL+eYi18BK4BrxgLS5ZQ2RLyKzMELIxFjFiSItTNohRVAJk1yymSEOrKOyONjflr7sVdqWgAiCoOeMuvfob2+UpkTEqrqNBw8ZxILk5LIbW8hgt/tKodqQQS36xQHc15mFnzHt+slBq9n5M3hzJeK2VlTIiEGDDXQwUzhD3aQDd36clU3021jkS+IOFJAXAHL3rkC3AdyD8jpufSQRnoXTb5nyPa7Syhtc1tQ3Cxx6I1ncCs8wp/pGPLFz8ELug==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=MupEJWREZvbcHKp7jpQ8OBtDeqAIcIZP+PK/a2E6OqU=;
b=Cm+PPFKuLChrz1sRyCH6HokoHDMVcOCoqFy89aljaw5lfqwVSMCTIC8KJo4rY/zEZKevdwByTW+Y8Pz9fnCRYM6qmWI1axrk4/jUEQi89n7oW7/QP93Y2uIXmd7SWOxtTMFD3XxrfbiaxggohT6I72LK7xfsxRobp6R2TXebV88V3l+kN91hX9/qUfjlatKO07fwJJONRKtUcIJt5TYu2w72OSIEz1N8++ww3gcF80M+VKPSkbvsr+A87iVCqzR98zOMl8WHcteXAVcArBhYKBnSlf8vD2zeevSUObNlJ3rkaWuhuW4UVecVn/YtQHznSql/Tv1uGa2HnUKCPwGSQg==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by DB9PR04MB9282.eurprd04.prod.outlook.com (2603:10a6:10:36e::20) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.27; Wed, 28 May
2025 14:53:12 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
14:53:11 +0000
Date: Wed, 28 May 2025 10:52:59 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: John Ernberg <john.ernberg@xxxxxxxx>
Cc: Horia =?utf-8?Q?Geant=C4=83?= <horia.geanta@xxxxxxx>,
Pankaj Gupta <pankaj.gupta@xxxxxxx>,
Gaurav Jain <gaurav.jain@xxxxxxx>,
Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>,
"David S . Miller" <davem@xxxxxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>, Shawn Guo <shawnguo@xxxxxxxxxx>,
Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>,
Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>,
Fabio Estevam <festevam@xxxxxxxxx>,
Thomas Richard <thomas.richard@xxxxxxxxxxx>,
"linux-crypto@xxxxxxxxxxxxxxx" <linux-crypto@xxxxxxxxxxxxxxx>,
"devicetree@xxxxxxxxxxxxxxx" <devicetree@xxxxxxxxxxxxxxx>,
"linux-kernel@xxxxxxxxxxxxxxx" <linux-kernel@xxxxxxxxxxxxxxx>,
"imx@xxxxxxxxxxxxxxx" <imx@xxxxxxxxxxxxxxx>,
"linux-arm-kernel@xxxxxxxxxxxxxxxxxxx" <linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>,
"stable@xxxxxxxxxx" <stable@xxxxxxxxxx>
Subject: Re: [PATCH v3 1/4] crypto: caam - Prevent crash on suspend with
iMX8QM / iMX8ULP
Message-ID: <aDcjS+3ing1W81QY@lizhi-Precision-Tower-5810>
References: <20250528144259.2603914-1-john.ernberg@xxxxxxxx>
<20250528144259.2603914-2-john.ernberg@xxxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528144259.2603914-2-john.ernberg@xxxxxxxx>
X-ClientProxiedBy: SJ0PR13CA0003.namprd13.prod.outlook.com
(2603:10b6:a03:2c0::8) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|DB9PR04MB9282:EE_
X-MS-Office365-Filtering-Correlation-Id: 8b993a7a-d818-4c1f-5ca9-08dd9df75dd9
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|52116014|376014|7416014|1800799024|366016|38350700014;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?EiAgRc3wy3psKXSaTNSVqo4bWMdk//qq9hISV9OwKVmcz8MQQVyBPAwgMIik?=
=?us-ascii?Q?UeQs0aMuxvrS/1575VcEIaLRpVhMNRf7QJhORybkyL55EMnC8QJ3BujdsRtg?=
=?us-ascii?Q?lxby8KP4jHKpC2Icwg2GkQXqcEd/PHv8YZPk/p8fWNSEoc77AGeVtEleZC6m?=
=?us-ascii?Q?IHexlHhHpC8AyXZ0NqyqIbKtHLqx20fVzdeDaaPLndf94AQ/nxn11RZPdiLY?=
=?us-ascii?Q?5nOt+lKc4YzvzuLZghMK/53/Wzat66PPifUp1DBalRmsk6extXaNCvC663UZ?=
=?us-ascii?Q?Hcc7r3VQH+YzsjxLCwQJJVU7FIbPValvdZRhq3YTTJNv/X9RemksGWZb0NVB?=
=?us-ascii?Q?YQ3FArOZrYq12Fgrr1wlAG528ss2XEMy9PHzfs1bIkITpIytdetisrTovt3g?=
=?us-ascii?Q?XquhD1mjaSOdOkyk4Pr7w4b+PhBlJu9BeNJRw81v+bQ2Xx0If6Oo6u7lPJ2O?=
=?us-ascii?Q?5dnlvUBmUVkqcca6QYNomX5gkFLhnfBb1+nMTREZkM8IcSrQJpI7i3GjaBrx?=
=?us-ascii?Q?4ZEZnONMWh70VyvgcHBqthgeydegMHXjeBLZKWAF02GJSh5c48BARcakLHGb?=
=?us-ascii?Q?+cvE8Pn122YbbG9EnNNNvrmhr4w11oCV3vCnKjTBacqbevtqcJRYHBEQV/up?=
=?us-ascii?Q?W/IwrOWBwwwSjRTDoLbsR71EwM1s54bfgQYNnnmMPoFWdlng4j8p0v+TP1np?=
=?us-ascii?Q?NaBgRuFP234SgeJypBBpPqwOWBa32iuCMwBdhN0QrHr2CCmhQoNg0a8WeJk/?=
=?us-ascii?Q?njWrFdq7GfFXdqjdrivraJj/Xyu/enBqd/8iP82RsAuh83HcPKjEldBZZExB?=
=?us-ascii?Q?6xCov1Hgbw8PNsXvV+Lt8Q5EJsvE6pMHqMzvoDVCxlt8T9IvvhNIlDGLsigD?=
=?us-ascii?Q?7BMstqqJbda+ILmSFSzLfzh3te6Yt4xXg0yVklq0v3qT3JaC3Uv9LV6iYYYt?=
=?us-ascii?Q?tzpRBjMh0q8ZiPHZLzHtSjzwCXCHZdnSLVoXKbmql6nNkUziCxlwKN8dZbgu?=
=?us-ascii?Q?9XHaJNAnDV138SMvZtvLzjTB8q8SPZ0ojdhqZLXHflU3Lnv7wu1BmFVSKmbU?=
=?us-ascii?Q?iH/GYyELlkLGGigOGDkgc6f6U/0hYnbcs3HhKfOc/ud1nYtTQAmtTWn8MShg?=
=?us-ascii?Q?IXqENZG6LsEc8pNeiSnkO5GSplv2RWjNEiOihw+9IaumMRgSMOMSh7kPrvUu?=
=?us-ascii?Q?Y7P7d3Mx4B8iYtpqxubDqlVKpa4TgpCQLdqI0mIxtVND/7G1ObiKHepIPpk6?=
=?us-ascii?Q?4anFxU89l6c3V0k2QO9a+qzvzUf2XzOvMQcFavh4OkhtB1HlxKYXowHkZ9/8?=
=?us-ascii?Q?Oyqha6HBNCeD/afS5VhaPeze9j1H4HnN0KQT6oeoPr20jf9T163ymILoUd4J?=
=?us-ascii?Q?fxkxc0rh7d2qBQxZctYYRhNQPJcKeDPM9s6JKJmYnsxD6evMkFTuEhwiOZw9?=
=?us-ascii?Q?v6pTPKgUjSGdJ4FJrw52dmtiwsoUW1GT3vbDHh4wYf0O5T0bFZhlicjEJEJ9?=
=?us-ascii?Q?5riA4w4Oq1e7jlM=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(52116014)(376014)(7416014)(1800799024)(366016)(38350700014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?puOXVFwSvwUc5IjvaAKlxzki+sL7lVU8N8gI3zBJReDl0ldRvx/NtBLWgJd+?=
=?us-ascii?Q?yWEqkqXeXe2M8fSJPAZ+WixHU5wKCd/YTXI1DaEU/9/+YYBWH2MdQ1kP7pzi?=
=?us-ascii?Q?IvkDh23pKKvq0n3amO+6FqS4nnmOfcdU5Jvi86BKsYtE4TG/yW8VXKU4vbqo?=
=?us-ascii?Q?A8Z3SK9aut37PiUbcFn9kr11aUYeh+akqI49GuZOSmdpCvOagZbiE8LPJFfS?=
=?us-ascii?Q?ZGATD4yJFW2KI5QBfIKePagqDj17kTeeBPKjZHx9nCg0gG1QDHo7LV3xzLO6?=
=?us-ascii?Q?Dgs/kXS5Dn1kZHZxA6SRqe0L4z04qo8Lp008CqcbLR1mzsENqRkQNKO3Vfb2?=
=?us-ascii?Q?MViSuHpUUoCOe4r6LhSOfj/gDjovNFITEW2C7AYXYu61/gsw0wJhm+COXMOz?=
=?us-ascii?Q?u4otZB0ZlGSqs47yN4XXyxWcFkkE1ZYj2HRWoCZSDYvJ75k8xwYmEhnoaMot?=
=?us-ascii?Q?KiLYTalgysknScOZtxs13mfczUKal/fN4dGIZtnuqudHcOwmnKkWoZ+0VbB7?=
=?us-ascii?Q?e7jJtNpxCHicmFzVGKo8bZwlVN6R0cwBdkbPSuJ52yQ3K5QOwCn3rynjnwlq?=
=?us-ascii?Q?qIQb1l46pSAKzVGt1vrGWbBsAxcoU3ch5QVjQ+l1IdsCMsvMG51a0asOYoji?=
=?us-ascii?Q?e7RuNsCc4Iiygf3qXPrlrSrzxlv5i1NN/evvVZeqQDGxUU7W5/jRD4r5v46p?=
=?us-ascii?Q?Xerb6jLxBkjEAEAjQskeV9/eU40R7h8+BKYc+dP5lOW8KoRxf2uLQMI/yFss?=
=?us-ascii?Q?IwFHRKZZeTypz4ferZQsUd0FHYZC0JBjoeXkQmXCyikUYmfPm4lUazPCHrlD?=
=?us-ascii?Q?PHDHeFq6Rl9/3lnKQ4vQbpKTera+nVCNTXfp9o7+cGSfr3bfsPm4M/GgmnbF?=
=?us-ascii?Q?BnLtEYjqHqVt6IBlaBJqHvIMTvzQdIAERqVa8+gccfjTKLG2ivTB4PpBGWSx?=
=?us-ascii?Q?mHozmNq0TWHEJ8N1A68B1RtHzmrJGs9yMIoYJ9eBqQWxGAwUWiu38kI88cG7?=
=?us-ascii?Q?HvtGq9pqSm6Rt0MC2wspoT8JGmatjOwfAf5U6wf5JyLFo6KIiRUrLcf5O2aF?=
=?us-ascii?Q?ZAk0zGftdyVYr3dQzHo7NhIgflqv1UaSrNPzhHH/1VeKjHYPX4RRtadw2KKe?=
=?us-ascii?Q?F090yKuQl7RDZgkr0T3WvX3U2fgnqFDCuhRAxDhPCui1SGv/1moMIk10+ZZ2?=
=?us-ascii?Q?sHHv2RTkvVKFBTDGRi5EKnaWImXc01PmI/lBtXHK307r2rAyZaUaWNHRZ3mE?=
=?us-ascii?Q?bCXoVhZpGaCGvOowD8yqENNhiJ2TDa/DpuuKt2xk/fhx3ULp0OBbXwVQvFxH?=
=?us-ascii?Q?wgPgOYTrk2k7Od/iNiU8+PUmnJsfr3cd0ZSZz+mgedVpzd6wzmt+ZSNTxHLW?=
=?us-ascii?Q?VYjK0zTE+G9+2WPMPofp8cEXKT5pilIUDBT6SWOSH8hMiUXzpJDBE0A0edW6?=
=?us-ascii?Q?8UMleJsEVb9+jhWg5VJsKKCwqyYSEvwdUYzFIsV1PfVOG+2mUZpIyAvVHFr8?=
=?us-ascii?Q?KK9qqN5cck6jmCwmPR81dU7kIR1FnrHLLjJYYre53Gn1Zn17tWzw7pyL9ggf?=
=?us-ascii?Q?Ak5Q/cwl3LDgPy7zmEHiurk5pY+Kq9fJ143P7Pms?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 8b993a7a-d818-4c1f-5ca9-08dd9df75dd9
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 14:53:11.9045
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 2iXKeO6+fSLsJ1YGzi7buNoujaGlNN+04VGNwR4DrZx/8DBRGTwlzYRm/emrvzQrgRCQSOsPnBQFAnzLnxLOtA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB9282
X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 02:43:07PM +0000, John Ernberg wrote:
> Since the CAAM on these SoCs is managed by another ARM core, called the
> SECO (Security Controller) on iMX8QM and Secure Enclave on iMX8ULP, which
> also reserves access to register page 0 suspend operations cannot touch
> this page.
>
> This is similar to when running OPTEE, where OPTEE will reserve page 0.
>
> Track this situation using a new state variable no_page0, reflecting if
> page 0 is reserved elsewhere, either by other management cores in SoC or
> by OPTEE.
>
> Replace the optee_en check in suspend/resume with the new check.
>
> optee_en cannot go away as it's needed elsewhere to gate OPTEE specific
> situations.
>
> Fixes the following splat at suspend:
>
> Internal error: synchronous external abort: 0000000096000010 [#1] SMP
> Hardware name: Freescale i.MX8QXP ACU6C (DT)
> pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> pc : readl+0x0/0x18
> lr : rd_reg32+0x18/0x3c
> sp : ffffffc08192ba20
> x29: ffffffc08192ba20 x28: ffffff8025190000 x27: 0000000000000000
> x26: ffffffc0808ae808 x25: ffffffc080922338 x24: ffffff8020e89090
> x23: 0000000000000000 x22: ffffffc080922000 x21: ffffff8020e89010
> x20: ffffffc080387ef8 x19: ffffff8020e89010 x18: 000000005d8000d5
> x17: 0000000030f35963 x16: 000000008f785f3f x15: 000000003b8ef57c
> x14: 00000000c418aef8 x13: 00000000f5fea526 x12: 0000000000000001
> x11: 0000000000000002 x10: 0000000000000001 x9 : 0000000000000000
> x8 : ffffff8025190870 x7 : ffffff8021726880 x6 : 0000000000000002
> x5 : ffffff80217268f0 x4 : ffffff8021726880 x3 : ffffffc081200000
> x2 : 0000000000000001 x1 : ffffff8020e89010 x0 : ffffffc081200004
> Call trace:
> readl+0x0/0x18
> caam_ctrl_suspend+0x30/0xdc
> dpm_run_callback.constprop.0+0x24/0x5c
> device_suspend+0x170/0x2e8
> dpm_suspend+0xa0/0x104
> dpm_suspend_start+0x48/0x50
> suspend_devices_and_enter+0x7c/0x45c
> pm_suspend+0x148/0x160
> state_store+0xb4/0xf8
> kobj_attr_store+0x14/0x24
> sysfs_kf_write+0x38/0x48
> kernfs_fop_write_iter+0xb4/0x178
> vfs_write+0x118/0x178
> ksys_write+0x6c/0xd0
> __arm64_sys_write+0x14/0x1c
> invoke_syscall.constprop.0+0x64/0xb0
> do_el0_svc+0x90/0xb0
> el0_svc+0x18/0x44
> el0t_64_sync_handler+0x88/0x124
> el0t_64_sync+0x150/0x154
> Code: 88dffc21 88dffc21 5ac00800 d65f03c0 (b9400000)
>
> Fixes: d2835701d93c ("crypto: caam - i.MX8ULP donot have CAAM page0 access")
> Fixes: 61bb8db6f682 ("crypto: caam - Add support for i.MX8QM")
Why need two fixes tags? It should be enough to keep oldest one.
Frank
> Cc: stable@xxxxxxxxxx # v6.10+
> Signed-off-by: John Ernberg <john.ernberg@xxxxxxxx>
>
> ---
>
> I noticed this when enabling the iMX8QXP support (next patch), hence the
> iMX8QXP backtrace, but the iMX8QM CAAM integration works exactly the same
> and according to the NXP tree [1] the iMX8ULP suffers the same issue.
>
> [1]: https://github.com/nxp-imx/linux-imx/commit/653712ffe52dd59f407af1b781ce318f3d9e17bb
>
> ---
>
> v3:
> - no changes
>
> v2:
> - Adjust commit message to make it clearer what is happening around no_page0 (Frank Li)
> ---
> drivers/crypto/caam/ctrl.c | 5 +++--
> drivers/crypto/caam/intern.h | 1 +
> 2 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/crypto/caam/ctrl.c b/drivers/crypto/caam/ctrl.c
> index 38ff931059b4..766c447c9cfb 100644
> --- a/drivers/crypto/caam/ctrl.c
> +++ b/drivers/crypto/caam/ctrl.c
> @@ -831,7 +831,7 @@ static int caam_ctrl_suspend(struct device *dev)
> {
> const struct caam_drv_private *ctrlpriv = dev_get_drvdata(dev);
>
> - if (ctrlpriv->caam_off_during_pm && !ctrlpriv->optee_en)
> + if (ctrlpriv->caam_off_during_pm && !ctrlpriv->no_page0)
> caam_state_save(dev);
>
> return 0;
> @@ -842,7 +842,7 @@ static int caam_ctrl_resume(struct device *dev)
> struct caam_drv_private *ctrlpriv = dev_get_drvdata(dev);
> int ret = 0;
>
> - if (ctrlpriv->caam_off_during_pm && !ctrlpriv->optee_en) {
> + if (ctrlpriv->caam_off_during_pm && !ctrlpriv->no_page0) {
> caam_state_restore(dev);
>
> /* HW and rng will be reset so deinstantiation can be removed */
> @@ -908,6 +908,7 @@ static int caam_probe(struct platform_device *pdev)
>
> imx_soc_data = imx_soc_match->data;
> reg_access = reg_access && imx_soc_data->page0_access;
> + ctrlpriv->no_page0 = !reg_access;
> /*
> * CAAM clocks cannot be controlled from kernel.
> */
> diff --git a/drivers/crypto/caam/intern.h b/drivers/crypto/caam/intern.h
> index e51320150872..51c90d17a40d 100644
> --- a/drivers/crypto/caam/intern.h
> +++ b/drivers/crypto/caam/intern.h
> @@ -115,6 +115,7 @@ struct caam_drv_private {
> u8 blob_present; /* Nonzero if BLOB support present in device */
> u8 mc_en; /* Nonzero if MC f/w is active */
> u8 optee_en; /* Nonzero if OP-TEE f/w is active */
> + u8 no_page0; /* Nonzero if register page 0 is not controlled by Linux */
> bool pr_support; /* RNG prediction resistance available */
> int secvio_irq; /* Security violation interrupt number */
> int virt_en; /* Virtualization enabled in CAAM */
> --
> 2.49.0
Return-Path: <linux-kernel+bounces-665672-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 6073541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:54:02 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 983283A6FB4
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:53:41 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id E318328B507;
Wed, 28 May 2025 14:53:53 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="qadhF+PL"
Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7F9D8288C8C;
Wed, 28 May 2025 14:53:51 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444033; cv=none; b=thSZXvUVjvvF++hUugczw6uNxH1vSDRUiwOv7aRZLgnW8WgnxJKaMpmrXhRRlHdJIiqvkT9qQ4dPBQyPxNY/bz6+S8pbjuslavMmpnacWxuqsQUZla8PGz3HJt38/ZwdOYxW9YRt9c3D/ydzE9jz6LtP3BCQygLF25eU3pUxq3k=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444033; c=relaxed/simple;
bh=lFDV1HaeUob008ZddkZRHixO8/o/65lcZVfKDJi4TjM=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=b4+1snETZ7rpLf8WoWwjEs98CjjgWbC1Axsi1t55GPP/zcX92fZfKe2DejxYyQ5b0AZYmAJewUgOqM2sX7Z1ivMzSsSRxz4cm7CrdolqjSAV+eCoC1z4vfcEuxMKb54+MOBeD9A5ASkPZ1IJ152DWg2Ph8XLpWTSGawTskf4xVI=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=qadhF+PL; arc=none smtp.client-ip=148.163.156.1
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com
Received: from pps.filterd (m0356517.ppops.net [127.0.0.1])
by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SE9XOR032017;
Wed, 28 May 2025 14:53:29 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc
:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to; s=pp1; bh=C+Ax56K/8glZJmSH+KSxWGDGC6oik9
dHEUVf8/VFNLg=; b=qadhF+PLwysgEZYOoIUKp8ZxmQfyZULiZB8WGRrq18v9a0
pzQi8ZD9ORDbTJJRJzoGRUGpSSiUNC9jquapZxvmH8B0rqGX50M1+LqOYaAA+FNU
26d6ODgWX55VmQWLFqMOOCc6oPsCHmpnzo1v2XcUPuyqNdgVPkqX2S7BU998yerX
M4JJSKDWZPB27WrJzxhiBf1y+GGf2/61jdj2rcP0uGagZ5MDPjr8vW8JuWVaUTIV
ImUTootbcsqdfo8IiASP53G/szXa+VmUi7iMCXe/Jp6vJGV9z8EPOGwc1I7+TCmP
R4Cjpe9hF4oBHEUatWe/GCV9iMbVjHCM72lplFIw==
Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221])
by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 46x40jr8k7-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 14:53:29 +0000 (GMT)
Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1])
by ppma13.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 54SAecxA021326;
Wed, 28 May 2025 14:53:28 GMT
Received: from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225])
by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 46utnmqreh-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 14:53:28 +0000
Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101])
by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 54SErQfB52232568
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Wed, 28 May 2025 14:53:26 GMT
Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1])
by IMSVA (Postfix) with ESMTP id 8373120040;
Wed, 28 May 2025 14:53:26 +0000 (GMT)
Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1])
by IMSVA (Postfix) with ESMTP id 56D912004B;
Wed, 28 May 2025 14:53:22 +0000 (GMT)
Received: from li-dc0c254c-257c-11b2-a85c-98b6c1322444.ibm.com (unknown [9.39.18.84])
by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTPS;
Wed, 28 May 2025 14:53:22 +0000 (GMT)
Date: Wed, 28 May 2025 20:23:15 +0530
From: Ojaswin Mujoo <ojaswin@xxxxxxxxxxxxx>
To: libaokun@xxxxxxxxxxxxxxx
Cc: linux-ext4@xxxxxxxxxxxxxxx, tytso@xxxxxxx, adilger.kernel@xxxxxxxxx,
jack@xxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, yi.zhang@xxxxxxxxxx,
yangerkun@xxxxxxxxxx, libaokun1@xxxxxxxxxx
Subject: Re: [PATCH 0/4] ext4: better scalability for ext4 block allocation
Message-ID: <aDchmYDc_OOAu2yC@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <20250523085821.1329392-1-libaokun@xxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250523085821.1329392-1-libaokun@xxxxxxxxxxxxxxx>
X-TM-AS-GCONF: 00
X-Authority-Analysis: v=2.4 cv=SdL3duRu c=1 sm=1 tr=0 ts=68372369 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=kj9zAlcOel0A:10 a=dt9VzEwgFbYA:10 a=AiHppB-aAAAA:8 a=i0EeH86SAAAA:8 a=rC1FfmAkVqhJs6Hui7oA:9 a=CjuIK1q_8ugA:10
X-Proofpoint-GUID: qxy6T5DMMWDnVa8xMLTdHn_p_De3-cJ1
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEyNyBTYWx0ZWRfX8V4UXs5k8tO6 OtIu1brpWBcDIXyReUW9V8cKeKqERrjcXIOkkNF1tsYryGnynWrNl5S6P4ot7mWJ3rM+SQ92KFK hPPy4Ar9VjfDbHp7GVDd4EuAtEi+GcfDddnT4edOmxAKpGAuI0X5zG4TKK3lOcGv1ORwC9N0zYD
HDAvLXCMX1W7ZTgjG0sknTk7L1lgRs6IrwL3eWb6/0w8TloXmyhpSDxP++cazECD9W3Eq+nupOq /ebeZc0nYQ13Oi6VWaXyEWNtaWjD+Z+xQwlamQIqNw2zsxiXOvsRioZRHFWIALcvXogwTp47Yey yhvLgLpI6ohxFx/NmmsCDEN2EK+OdTWsNMXphdKwlboqXqY1WjJkC5NOqAJ+iCtSwgEqcOekUdb
3YCl1mYhxdl5uX4GPPNy8+aHjTlx6J9XOlMRbmujA9A+BIdT5gi71WmVa8A1umb1V1tRGzvq
X-Proofpoint-ORIG-GUID: qxy6T5DMMWDnVa8xMLTdHn_p_De3-cJ1
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_07,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0
lowpriorityscore=0 mlxscore=0 adultscore=0 priorityscore=1501
impostorscore=0 malwarescore=0 mlxlogscore=732 suspectscore=0 bulkscore=0
spamscore=0 clxscore=1011 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280127
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Fri, May 23, 2025 at 04:58:17PM +0800, libaokun@xxxxxxxxxxxxxxx wrote:
> From: Baokun Li <libaokun1@xxxxxxxxxx>
>
> Since servers have more and more CPUs, and we're running more containers
> on them, we've been using will-it-scale to test how well ext4 scales. The
> fallocate2 test (append 8KB to 1MB, truncate to 0, repeat) run concurrently
> on 64 containers revealed significant contention in block allocation/free,
> leading to much lower aggregate fallocate OPS compared to a single
> container (see below).
>
> 1 | 2 | 4 | 8 | 16 | 32 | 64
> -------|--------|--------|--------|--------|--------|-------
> 295287 | 70665 | 33865 | 19387 | 10104 | 5588 | 3588
>
> The main bottleneck was the ext4_lock_group(), which both block allocation
> and free fought over. While the block group for block free is fixed and
> unoptimizable, the block group for allocation is selectable. Consequently,
> the ext4_try_lock_group() helper function was added to avoid contention on
> busy groups, and you can see more in Patch 1.
>
> After we fixed the ext4_lock_group bottleneck, another one showed up:
> s_md_lock. This lock protects different data when allocating and freeing
> blocks. We got rid of the s_md_lock call in block allocation by making
> stream allocation work per inode instead of globally. You can find more
> details in Patch 2.
>
> Patches 3 and 4 are just some minor cleanups.
>
> Performance test data follows:
>
> CPU: HUAWEI Kunpeng 920
> Memory: 480GB
> Disk: 480GB SSD SATA 3.2
> Test: Running will-it-scale/fallocate2 on 64 CPU-bound containers.
> Observation: Average fallocate operations per container per second.
>
> |--------|--------|--------|--------|--------|--------|--------|--------|
> | - | 1 | 2 | 4 | 8 | 16 | 32 | 64 |
> |--------|--------|--------|--------|--------|--------|--------|--------|
> | base | 295287 | 70665 | 33865 | 19387 | 10104 | 5588 | 3588 |
> |--------|--------|--------|--------|--------|--------|--------|--------|
> | linear | 286328 | 123102 | 119542 | 90653 | 60344 | 35302 | 23280 |
> | | -3.0% | 74.20% | 252.9% | 367.5% | 497.2% | 531.6% | 548.7% |
> |--------|--------|--------|--------|--------|--------|--------|--------|
> |mb_optim| 292498 | 133305 | 103069 | 61727 | 29702 | 16845 | 10430 |
> |ize_scan| -0.9% | 88.64% | 204.3% | 218.3% | 193.9% | 201.4% | 190.6% |
> |--------|--------|--------|--------|--------|--------|--------|--------|
Hey Baokun, nice improvements! The proposed changes make sense to me,
however I suspect the performance improvements may come at a cost of
slight increase in fragmentation, which might affect rotational disks
especially. Maybe comparing e2freefrag numbers with and without the
patches might give a better insight into this.
Regardless the performance benefits are significant and I feel it is
good to have these patches.
I'll give my reviews individually as I'm still going through patch 2
However, I wanted to check on a couple things:
1. I believe you ran these in docker. Would you have any script etc open
sourced that I can use to run some benchmarks on my end (and also
understand your test setup).
2. I notice we are getting way less throughput in mb_optimize_scan? I
wonder why that is the case. Do you have some data on that? Are your
tests starting on an empty FS, maybe in that case linear scan works a
bit better since almost all groups are empty. If so, what are the
numbers like when we start with a fragmented FS?
- Or maybe it is that the lazyinit thread has not yet initialized all
the buddies yet which means we have lesser BGs in the freefrag list
or the order list used by faster CRs. Hence, if they are locked we
are falling more to CR_GOAL_LEN_SLOW. To check if this is the case,
one hack is to cat /proc/fs/ext4/<disk>/mb_groups (or something along
the lines) before the benchmark, which forces init of all the group
buddies thus populating all the lists used by mb_opt_scan. Maybe we
can check if this gives better results.
3. Also, how much IO are we doing here, are we filling the whole FS?
Regards,
ojaswin
Return-Path: <linux-kernel+bounces-665673-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 3160D41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:54:34 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 6FADD16EDE5
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:54:35 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id E0E2F28B501;
Wed, 28 May 2025 14:54:26 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=soleen-com.20230601.gappssmtp.com header.i=@soleen-com.20230601.gappssmtp.com header.b="nuCVo/Tm"
Received: from mail-qt1-f179.google.com (mail-qt1-f179.google.com [209.85.160.179])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7EAE928B419
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:54:24 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.179
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444066; cv=none; b=MQFpIu2wxby1kNedTDttYHKHz3FaDLFd/yh7GmKu+kw+vYIyGsuHQVYGYPjCNG1hJmwDrxByQfjalsURA/cyPKVkj4zSTlgJMR5j8oZZTLzLxHhTX/JYrq4ZbzopObzEc3z4tbf4GnXdgtnhzfzK6rfNzi12zPE0Ghwcl3bEjrQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444066; c=relaxed/simple;
bh=OLQTEynOWLTW2J82I3GAFi2XTNtVPRqouMqsxTdKyrA=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=dgotu/cK7uDi1SfUFSc5sXr3mwLj6fHj5BQimE2DgUoKxnrQT9DovQSh2o/FNbALfJDCnTXnM1YyFQ2bhf2/BWxLFZgo/ctgCVPJ5mGJBDeZgR5BFwN19E4t2KLlS7bdnPX7hUF8GRggZv8ITMmsvzQ42Jc0gjbQbe85nUqWNuc=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=soleen.com; spf=pass smtp.mailfrom=soleen.com; dkim=pass (2048-bit key) header.d=soleen-com.20230601.gappssmtp.com header.i=@soleen-com.20230601.gappssmtp.com header.b=nuCVo/Tm; arc=none smtp.client-ip=209.85.160.179
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=soleen.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=soleen.com
Received: by mail-qt1-f179.google.com with SMTP id d75a77b69052e-476f4e9cf92so30573931cf.3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 07:54:24 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=soleen-com.20230601.gappssmtp.com; s=20230601; t=1748444063; x=1749048863; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=OLQTEynOWLTW2J82I3GAFi2XTNtVPRqouMqsxTdKyrA=;
b=nuCVo/TmE7nmJDKY/+7G/Fy8f30qRvkosEx1abFb/W+krsSKu4Uii8CPEO6gqCkGjJ
Y+OQPGzKlr8NKb+TNJi8YoqCA0bl+aEbrcSyvjelx75jGIKU5X2a7a1M7V9f3Z82iiuD
SP8EAIHnogoXUEHxLC7UgSavDyttjkMTjNu0dl41oZsPuuE/EIvWL0OgFY+8hTQxPT3h
WhLFvPNQceyXyEgvcrt/bsf0C0kJcwgURKNlFzsbttHpO6fuj8DJwTM7+umuvZ/ic8EI
bZYUWprE7LmF1WS+Ly/Ny9aEHhj6vF3fMNEOkvRW2uONPd5EzQudBY/J9iR7LwjKcU1o
B3Ug==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748444063; x=1749048863;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=OLQTEynOWLTW2J82I3GAFi2XTNtVPRqouMqsxTdKyrA=;
b=RVTfUd/7NOzim3B/8cA+MP0jgJJEsfHl6Kz7i8uij3h124ofTkePVOvZwSwFkZZfhr
IwjCAvkIRVrp+7Vs/C00qd/+s18u648JffVAJs5F61+Qkz6C9gMMP3HLF6A/CaAEtrWS
i2fhWuzbrw+7OhyCIRQdM6DvjqCfS52mUMVENZmUzUfZR6LzgqtihckAd79Qx2nbu0nm
3Ojv0goyteKnWyYnwjJaAk6WlPkSmLyZn8JDxNBZhZyR/9xYCSNZPCcw3ExFBQn4k7wt
TNmjnHS1tJapV2KCHo95xWfgEbqBJFgS1p8H/8uv5GE6Z+FXipj095UNzj3YcV9aF20I
tkHQ==
X-Forwarded-Encrypted: i=1; AJvYcCX0ebd/I0hOPW89HCfykjaIbKfnVCY4kmPRv7aAisok1Qm43smkilculswzHxLmqf/TVB2oRTp4t3X8cqg=@vger.kernel.org
X-Gm-Message-State: AOJu0YzLbgJ7fTrEs4QePDt2p5butuFTp4+hOyFgFjyd78ebbSagifMr
OykMNc4qx614rCH7lFAaFct+6AxTB/mwiICG7ZNAQ3ucQGegaAmMcVufy7DhBq0p5nELuaiBKPl
uvbzvsE7qVBH0vl8qxbCQsSURenQKTeIV/DVRdcjlqQ==
X-Gm-Gg: ASbGncun3a2nu6Xkh//D1iV5GxiVr9S7mCjWga6hgDXqWzTx698QON7uLRxCOgw8jPS
kEh9CDA9C7ctvPbZBUDRDLa1IVo+EXHti9E9+OFjDrLEqtLimlbu6MYV9fZjeO7zn1+gSj62qgw
kJsyCeYSGH1XDLoMxWOY4oGOsToNwvrxWwxhROCn3a
X-Google-Smtp-Source: AGHT+IEipULtuHP8NgolkdOGZlrY+wJ98orFgKSxJBZZ4sZQQx6BiL/ks+Oa5sABai8uN1rdHCGApBJm6ZxwNh0g7ck=
X-Received: by 2002:a05:622a:1b10:b0:472:28d:62b0 with SMTP id
d75a77b69052e-49f47a0ddb2mr278495661cf.41.1748444063296; Wed, 28 May 2025
07:54:23 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250417142525.78088-1-mclapinski@xxxxxxxxxx> <6805a8382627f_18b6012946a@iweiny-mobl.notmuch>
<CA+CK2bD8t+s7gFGDCdqA8ZaoS3exM-_9N01mYY3OB4ryBGSCEQ@xxxxxxxxxxxxxx> <aDW9YRpTmI66gK_G@xxxxxxxxxx>
In-Reply-To: <aDW9YRpTmI66gK_G@xxxxxxxxxx>
From: Pasha Tatashin <pasha.tatashin@xxxxxxxxxx>
Date: Wed, 28 May 2025 10:53:45 -0400
X-Gm-Features: AX0GCFs1Qbwk6LJZXavFVBcYckw_C3R55DAtQO0SII537wDbPP_9ie9BDYZJ2Uo
Message-ID: <CA+CK2bAUfXQ_CSKs4MaaNNcgPx6MRjE6Jk85tKGYUOQBG8PFNg@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v2 1/1] libnvdimm/e820: Add a new parameter to configure
many regions per e820 entry
To: Mike Rapoport <rppt@xxxxxxxxxx>
Cc: Ira Weiny <ira.weiny@xxxxxxxxx>, Michal Clapinski <mclapinski@xxxxxxxxxx>,
Dan Williams <dan.j.williams@xxxxxxxxx>, Vishal Verma <vishal.l.verma@xxxxxxxxx>,
Dave Jiang <dave.jiang@xxxxxxxxx>, Jonathan Corbet <corbet@xxxxxxx>, nvdimm@xxxxxxxxxxxxxxx,
linux-doc@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 9:26=E2=80=AFAM Mike Rapoport <rppt@xxxxxxxxxx> wro=
te:
>
> On Mon, Apr 21, 2025 at 10:55:25AM -0400, Pasha Tatashin wrote:
> > On Sun, Apr 20, 2025 at 10:06=E2=80=AFPM Ira Weiny <ira.weiny@xxxxxxxxx=
> wrote:
> > >
> > > Michal Clapinski wrote:
> > > > Currently, the user has to specify each memory region to be used wi=
th
> > > > nvdimm via the memmap parameter. Due to the character limit of the
> > > > command line, this makes it impossible to have a lot of pmem device=
s.
> > > > This new parameter solves this issue by allowing users to divide
> > > > one e820 entry into many nvdimm regions.
> > > >
> > > > This change is needed for the hypervisor live update. VMs' memory w=
ill
> > > > be backed by those emulated pmem devices. To support various VM sha=
pes
> > > > I want to create devdax devices at 1GB granularity similar to huget=
lb.
> > >
> > > Why is it not sufficient to create a region out of a single memmap ra=
nge
> > > and create multiple 1G dax devices within that single range?
> >
> > This method implies using the ndctl tool to create regions and convert
> > them to dax devices from userspace. This does not work for our use
> > case. We must have these 1 GB regions available during boot because we
> > do not want to lose memory for a devdax label. I.e., if fsdax is
> > created during boot (i.e. default pmem format), it does not have a
> > label. However, if it is created from userspace, we create a label
> > with partition properties, UUID, etc. Here, we need to use kernel
>
> Doesn't ndctl refuse to alter namespaces on "legacy" (i.e. memmap=3D)
> regions?
Hi Mike
ndctl works with legacy namespaces just fine. We can convert them to
devdax/fsdax/raw pmem, create remove label, etc.
Pasha
>
> > parameters to specify the properties of the pmem devices during boot
> > so they can persist across reboots without losing any memory to
> > labels.
> >
> > Pasha
>
> --
> Sincerely yours,
> Mike.
Return-Path: <linux-kernel+bounces-665674-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 9EF7041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:57:21 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 2819E18851FC
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:57:34 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 3631428B504;
Wed, 28 May 2025 14:57:12 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="KvHtFyxd"
Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1D84C262A6;
Wed, 28 May 2025 14:57:09 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444231; cv=none; b=QAS7sSJg21PggXUmQrOkdqvll9b3I9LysskwqkBfJQymqcePXMJEEUc6JlWVRVdndqg3mCe3dAW1E/IxxaTPJ+VjP/8KFpjtBlmGdiTem9vWX6rVsiD2bxQwVmHdyVls2nuLjwn24eHZmMpBn2ys2uLtVRhtd/n71RFUErGM2ao=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444231; c=relaxed/simple;
bh=fYSEXzep9qNAW+tZfevXnbGSZNZl4/IJ+/Y03cYu2SU=;
h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=rxtgpqLEbQOlRUK/BSs6vGaGW8YMJ18cG395O/oQ+vJlXdnGkkW3d2TMzTlFoEfnw2GeNDEOGFnFT1H1/RktIqO750KdK1hFbC6dB7V+lypk192oRky15lKaSMymuZcbAveyCLTNFEMmz5k+jFxJ3F3uojPSt2XY8M6RuQjENcY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=KvHtFyxd; arc=none smtp.client-ip=209.85.214.176
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-23461842024so31678175ad.0;
Wed, 28 May 2025 07:57:09 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748444229; x=1749049029; darn=vger.kernel.org;
h=content-transfer-encoding:mime-version:message-id:date:subject:cc
:to:from:from:to:cc:subject:date:message-id:reply-to;
bh=I8US3sTh0+kBSZnby04bYDjuKnH/xXT+GECPioOoFDE=;
b=KvHtFyxdVAMFUXBY816/sLQ6We4l9blERlGgP84jkjKKjaYVC/dqb7qbL1/rl7ets3
WyBlqi6vkbv4tyOMspyVYCaw8sC0PtUNFvMfMlQLYjD1eOFmT6vU8yEf8Rq/r22da+rc
eA8b5WgXUmcFR/7/4x9n37A1O4SaC09sVHfBOdtY2op5f7S16p9C/8FE03PuEc1QgrSU
lETZtgQthVeVe0QA1gxERxl3sj577OWVB5EVqeY5sdg5rTIMxeLr6DS0EQtjne9gE6vu
qYDl73L5pM8lX/mrxfb87BJzm4y3TP6jL1gAvQnQQqVynxCeYVGkzQNCHdRkt+vGqBbb
3oKA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748444229; x=1749049029;
h=content-transfer-encoding:mime-version:message-id:date:subject:cc
:to:from:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=I8US3sTh0+kBSZnby04bYDjuKnH/xXT+GECPioOoFDE=;
b=T5c2bDAYNYn9+bQPRPuwglCjDNR4J7Xw+mNfx6m0+2MxS1dT3zyK8tUbnT0u/dlocu
0aIWvV42JYPCGvY6HpV1ITruU7+17fvfX8DAbBK038V+6GpWHUh7XfHJE2wdOmT7dhFn
xcLt0XlkjQu+gXat8PXdsfp/O7W8NRC7BsmLvUlIIRxHYu60TtXVtR/NArpO2hjVr1+t
haW0enKlibw+TOnTwk8a5NvQ2cKwBz/HnXqIQkpehf+/broXLF14acLuC7SLcVUOhg+z
U6uG3N78dQWwCW29jJRmCVngX2dwV5L9GXCRbEe8mhSTLaq753Z5rB6i3iL5jhIJAzKy
B2aQ==
X-Forwarded-Encrypted: i=1; AJvYcCUh+BxNotGeDEfO3/J6g9DzMK+2ns0HWXe3GNq7o6IRsLoVrcrx4FCNDLADW9VCltNfFkFwwq/lydRqFhg3@xxxxxxxxxxxxxxx, AJvYcCXxwTnWe0mmUhekWyL7DwN3+pB6kELq7MNnS6i3wbY2hHKeT1HKmbV+Wc/k/S2HIc3wNNEbxz7LUGM=@vger.kernel.org
X-Gm-Message-State: AOJu0Yzvh6cou/jYf/3RdrS13eXlynYF6OlkFBF+XZyfqOQClK4MylCJ
2hMmst9AEYdGnDaszxSW83glRus4UYw5chonsN5OONQvJItpAxOdAel5
X-Gm-Gg: ASbGncsBzg0iLt9bVNFT+6GA5l0AlaO0XkT6WpH8VYLhxBT01Qmt8i9s50A8NAIe5BO
xTYr6E/Au6LtZx6yMOWQ9cailTFXhkDMiMivXkrYRk8A8c9XumdUkMnZpsII/kbPvwL3KNQrj6T
XeXXAXvVeuiXZHo9qphh1YiEJf+qo5XMBhMEXn5Qsb5YYpHvOYmuY6h1yRqzYleCCIXLsi4ymFC
EpultbGxsNwooOYey9D52mmKz/ikL6ywddxt1JdRQFzjXbJz7kb3PzDHBUOW2LEGwcieUej39VX
x5DZaqC9NgAMiM+AeL6WMLHeaz+xl7jhnVoXnXshsLidiAA/7tQMmj2xRA==
X-Google-Smtp-Source: AGHT+IFYgfkU+V2x1lSb+ly5g+ffmCEfXIjRYQUFPHfcfl9PrjKsWhd8y5VfgFaSMK3nsopPkfVglw==
X-Received: by 2002:a17:902:e548:b0:234:8e78:ce8a with SMTP id d9443c01a7336-2348e78cec8mr142986915ad.48.1748444229213;
Wed, 28 May 2025 07:57:09 -0700 (PDT)
Received: from gye-ThinkPad-T590.. ([39.120.225.141])
by smtp.gmail.com with ESMTPSA id d9443c01a7336-234d2fe1ec1sm12971185ad.61.2025.05.28.07.57.07
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 07:57:08 -0700 (PDT)
From: Gyeyoung Baek <gye976@xxxxxxxxx>
To: Jonathan Cameron <jic23@xxxxxxxxxx>
Cc: David Lechner <dlechner@xxxxxxxxxxxx>,
=?UTF-8?q?Nuno=20S=C3=A1?= <nuno.sa@xxxxxxxxxx>,
Andy Shevchenko <andy@xxxxxxxxxx>,
linux-iio@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Gyeyoung Baek <gye976@xxxxxxxxx>
Subject: [PATCH v3] iio: trigger: Avoid data race
Date: Wed, 28 May 2025 23:56:48 +0900
Message-ID: <20250528080119.9380-1-gye976@xxxxxxxxx>
X-Mailer: git-send-email 2.43.0
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
A data race could occur between `atomic_read()` and `atomic_set()`.
Use `atomic_cmpxchg_relaxed()` to group them atomically.
Previously the main logic was executed when `use_count` was 0.
Now it returns early when `use_count` was not 0.
Fixes: a1a8e1dc111d ("iio:trigger: Fix use_count race condition")
Reviewed-by: Andy Shevchenko <andy@xxxxxxxxxx>
Signed-off-by: Gyeyoung Baek <gye976@xxxxxxxxx>
---
Changelog:
v3:
- Add Fixes tag.
v2:
- Edit commit message.
- Separate variable declaration from logic.
---
drivers/iio/industrialio-trigger.c | 32 +++++++++++++++---------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/drivers/iio/industrialio-trigger.c b/drivers/iio/industrialio-trigger.c
index 54416a384232..fc799910c74d 100644
--- a/drivers/iio/industrialio-trigger.c
+++ b/drivers/iio/industrialio-trigger.c
@@ -196,15 +196,15 @@ void iio_trigger_poll(struct iio_trigger *trig)
{
int i;
- if (!atomic_read(&trig->use_count)) {
- atomic_set(&trig->use_count, CONFIG_IIO_CONSUMERS_PER_TRIGGER);
+ if (atomic_cmpxchg_relaxed(&trig->use_count, 0,
+ CONFIG_IIO_CONSUMERS_PER_TRIGGER))
+ return;
- for (i = 0; i < CONFIG_IIO_CONSUMERS_PER_TRIGGER; i++) {
- if (trig->subirqs[i].enabled)
- generic_handle_irq(trig->subirq_base + i);
- else
- iio_trigger_notify_done_atomic(trig);
- }
+ for (i = 0; i < CONFIG_IIO_CONSUMERS_PER_TRIGGER; i++) {
+ if (trig->subirqs[i].enabled)
+ generic_handle_irq(trig->subirq_base + i);
+ else
+ iio_trigger_notify_done_atomic(trig);
}
}
EXPORT_SYMBOL(iio_trigger_poll);
@@ -227,15 +227,15 @@ void iio_trigger_poll_nested(struct iio_trigger *trig)
{
int i;
- if (!atomic_read(&trig->use_count)) {
- atomic_set(&trig->use_count, CONFIG_IIO_CONSUMERS_PER_TRIGGER);
+ if (atomic_cmpxchg_relaxed(&trig->use_count, 0,
+ CONFIG_IIO_CONSUMERS_PER_TRIGGER))
+ return;
- for (i = 0; i < CONFIG_IIO_CONSUMERS_PER_TRIGGER; i++) {
- if (trig->subirqs[i].enabled)
- handle_nested_irq(trig->subirq_base + i);
- else
- iio_trigger_notify_done(trig);
- }
+ for (i = 0; i < CONFIG_IIO_CONSUMERS_PER_TRIGGER; i++) {
+ if (trig->subirqs[i].enabled)
+ handle_nested_irq(trig->subirq_base + i);
+ else
+ iio_trigger_notify_done(trig);
}
}
EXPORT_SYMBOL(iio_trigger_poll_nested);
--
2.43.0
Return-Path: <linux-kernel+bounces-665675-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E6C2D41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 10:58:10 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 0D67BA20689
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 14:57:50 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 3668228B7C1;
Wed, 28 May 2025 14:58:03 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="PKSJPzEx"
Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11011047.outbound.protection.outlook.com [40.107.130.47])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id DD83328B4F0;
Wed, 28 May 2025 14:57:59 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.130.47
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444282; cv=fail; b=j7iZc3RB9qmxSpQNjiPJWRlouPMO6FAzUngkjMaErQXkQdR7QYK0ucao+Ya6Ag6dWgnx3ISSpb55YlqTF4pfWx1P4Iewm78YNDu5ykmASZ/C9O7qqLeiuiMI4FN8dyvM5LQsFJLJc0wf5r8OfgFKLyN1VKFbQa/iGvkt24iUl8k=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444282; c=relaxed/simple;
bh=0mrejKVv4DnMr/SDuPHnfXa976/hGkJLveEsibPJrAY=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=Dx+ODwvUtLik1L2bJuK0Uu4n6WOywU5lEtIha9aEhar8INso4iXh1OFnqhtM9nGVoF2Q2OVyAUF6W+QlwvAXLZ7epp6Sl82Fv7M/OzrrMZwXih0Mrh6tQ+G/BJ6nOokLPwrjL8+//ns5UXXUi/3njTKMlxaD/8KNSKKKv+b3LmQ=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=PKSJPzEx; arc=fail smtp.client-ip=40.107.130.47
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=V4JNvaeSzjoVLmHhs7nmY9HLtgnwmvZdqmCbKnlOmMQlQxDUK7ECNawuELQ81bMieH+afy5UwrVvAikdFirBTgfxvxSN80N+3celdg1yw3qKb5mHk580ISCxyrUdJf0Ir4p1P4WmHNRU7h/MS0/iBy+54tIznT9q/lvbDbETkMi96UCW3OKGExENsk6Byt+TtxrCpFhvN3aEr7nhsm+cK24knXUpusLzM0RHS/xfp+gaN2PmTj3ETHjUxIaRnwwtKmwjpvG8CFIuMwFQKnInEeUiJsYAbA6w7J64ZtZqNyCQrkaUCuZ+6aYcinFOenFrXommjVSZbk+di1WKLnTgSg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=MdOS/zcoR8b4JTivCfSv2+EXLDpiH1RnQ+9LMBNffPA=;
b=i8Oh84enCyqMizVSPpdwkQdf6kSSQHMcePWBciBsX+QbpXFxX+HZApKbqMeW6834x6KRBXo8fW1Ty4MAa0Z5bfkoF6Iwft+AutrgGFDA0g1pCLykuD9mPDXkz2PEzZZZBcjBAbV9ZyX1WV7OtaW/rBxCaxpGSJO9fRj45/EtNq0k+52d5UBLq8EYGuSjTkjH4aW7bjOlxub0KEbX8wxVp72w5f4S7fbVKrZ43gsHyafTVqD4XYpO+JSKYCLqoS60ThfGiKvQK5qh9+UjH8qLLTQyoBpV9f0k33l3xv5hvocc1LA0YW7CVxzC9D8rbweeTQMamA5Jb1ygETXF30LjtA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=MdOS/zcoR8b4JTivCfSv2+EXLDpiH1RnQ+9LMBNffPA=;
b=PKSJPzEx4+zAy6APKbW6MnGDk2zQ2dto1flrz2Yarkdk62MmSCugzTQArCbi0rMPX+Y0U7Y68Emzh7GbdpKmw5CIAC7JVwbP7cAEBz7BNW093JVnnSifqk+/LO5ZzIeLkuXgtkBQdsVB/oKjdNzGsEn0DXFM/6kmlf3N7SBK01i5dKtJFvQc5ZJ4M/lRHzZmmixjcHZtz+9k/a8q6Ot9L/iX2d68c8xu50FUJ0DC1PkCy9NUsalEAKQdoWe6JOFFstgPcyqD1htC+Ehqw5a5V8ULLTBzr/tJf3PEdq1wVD5UpSv2zPv3UYz5R1ZygsWYJeeGzFdE2weJ1HFpvGtPww==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by VI0PR04MB10103.eurprd04.prod.outlook.com (2603:10a6:800:24c::10) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.27; Wed, 28 May
2025 14:57:57 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
14:57:57 +0000
Date: Wed, 28 May 2025 10:57:46 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: John Ernberg <john.ernberg@xxxxxxxx>
Cc: Horia =?utf-8?Q?Geant=C4=83?= <horia.geanta@xxxxxxx>,
Pankaj Gupta <pankaj.gupta@xxxxxxx>,
Gaurav Jain <gaurav.jain@xxxxxxx>,
Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>,
"David S . Miller" <davem@xxxxxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>, Shawn Guo <shawnguo@xxxxxxxxxx>,
Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>,
Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>,
Fabio Estevam <festevam@xxxxxxxxx>,
Thomas Richard <thomas.richard@xxxxxxxxxxx>,
"linux-crypto@xxxxxxxxxxxxxxx" <linux-crypto@xxxxxxxxxxxxxxx>,
"devicetree@xxxxxxxxxxxxxxx" <devicetree@xxxxxxxxxxxxxxx>,
"linux-kernel@xxxxxxxxxxxxxxx" <linux-kernel@xxxxxxxxxxxxxxx>,
"imx@xxxxxxxxxxxxxxx" <imx@xxxxxxxxxxxxxxx>,
"linux-arm-kernel@xxxxxxxxxxxxxxxxxxx" <linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>
Subject: Re: [PATCH v3 3/4] dt-bindings: crypto: fsl,sec-v4.0: Add power
domains for iMX8QM and iMX8QXP
Message-ID: <aDckaszTLMcUdIiY@lizhi-Precision-Tower-5810>
References: <20250528144259.2603914-1-john.ernberg@xxxxxxxx>
<20250528144259.2603914-4-john.ernberg@xxxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528144259.2603914-4-john.ernberg@xxxxxxxx>
X-ClientProxiedBy: SJ0PR13CA0240.namprd13.prod.outlook.com
(2603:10b6:a03:2c1::35) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|VI0PR04MB10103:EE_
X-MS-Office365-Filtering-Correlation-Id: 36f7253a-2655-4c35-adf5-08dd9df80800
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|376014|52116014|7416014|366016|1800799024|7053199007|38350700014;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?Merm0J/RlBkneMNEnGKzXrUBp87qTFgFrWHD5zfFo3IQxaMoea59SJhG7eBs?=
=?us-ascii?Q?BL1VtOjYeMz0azUPpDAJN9ZCQW7hmTZqBlAWA9NVe2QEzcnaoCeERQE4OOAU?=
=?us-ascii?Q?5lJ1ftvPG0KJP/v8HeKWVELbxpn/ZueVZx2hTQ3TZ7OK2D99oravFo7W0MP2?=
=?us-ascii?Q?jvmLsinwdKtB9353qHrHPf6nF1rygblIgoQvS7G2ebJUc6XuQCfbWxTWxZAS?=
=?us-ascii?Q?1fra+qZHKQc7tQxO73jqdDSktdjAJKY0FymtDNIDTXgnM5YINZpeIGjaWkpY?=
=?us-ascii?Q?jAh95vpGdW3VCMonPrt1n/Sz9CRw8xSwIxmhZhCVX2/XWhLusujH9Jxkm0hw?=
=?us-ascii?Q?z2sadO0t63gJSsyy+w1xX36tetxCDyya8scIqJWuYkZ3JfKEpNm1bQZ3QyJv?=
=?us-ascii?Q?8ml5lxgVDvLAm7r0hz/6942yGP+4LQM7t9jAsiqj6nqzMS5cpGNl8z/3SsGG?=
=?us-ascii?Q?ky4eO/1E7fjD9WBDanmRZ/ohorC+mJXex5CZvvFIrTHv4r79NgbwMevCLnVV?=
=?us-ascii?Q?CzDXkh9mSLKgkqg1T55YMZMeAfx7AYHQpngPg433HjXz0/LP5BhB9tCHQCos?=
=?us-ascii?Q?YQWVYtUAkP7uTkEq6QmYyCCAUBhDjMqkif7A/e3X9Zk8gpjwF5+fQAbAty+E?=
=?us-ascii?Q?hViRieRUMshftoRabNDmkuXJqA+eYE7M3gt1fZB92Q2N1iTRjJ2uSd8v3Byx?=
=?us-ascii?Q?rmG0G2dTPtYgHtPLEGvAuVf9lxT+Zc4sFzNDmv52DR8OUBJq7rtLtTT8P+WQ?=
=?us-ascii?Q?iPT0nEfqRD8ZTYaLwQy80TQWhTrD3gI/WZlg9njmtUxdXbNZk0d36zX5VucP?=
=?us-ascii?Q?HBJPAONLOcUJYQl4cnWVzuSTTpBxnLgDWZJSRs3II1o2zI81qVHPFoeTlZ1q?=
=?us-ascii?Q?/8L9hYl6N6l5J+8SPYv36GRfs3nvNIZhSCzq1wWFkxxBQM8GA2q5UxVE2Pbw?=
=?us-ascii?Q?hQ4EAwnIhdw8SW0C8pDfO9SkmI6kZ9ox9ydlHe8hMvFBj8k15efSbCkuHRqB?=
=?us-ascii?Q?xYxWMKm3r5nmSRle40dVgVPeWndiQ0JzY/yOsLxkV//NNrAR3ugVXCBhiDYk?=
=?us-ascii?Q?25huY1JNL2Cv68bjLsay5Sc+iGLIWgM3h/4gd029ZL99wxNJ4kTeMlj5LNiv?=
=?us-ascii?Q?cVhnV9ZRQsrXQdAZVAfWh6Sj8bB6EfPNz7FFxobhbZwD0yQT9VqKGRVTT0m9?=
=?us-ascii?Q?NdAQB3vdwVUr9g84uQThhqThpobM9vod+mrpMZQUsmFeoW5xkow/lyH8qbtJ?=
=?us-ascii?Q?pkpedpEetstbTwkKW4ROf/Fwbljsu/v91opxV565r9M0UefN/2uD+I0B7cm3?=
=?us-ascii?Q?g4rdjnxZwiXR1WEPG6y53MJ2aJjB2n5+UGTzjUsGoSey9Jyt0b362m4LPUTg?=
=?us-ascii?Q?Z08pI8z9NgdHSlJgX7QgTkC5WEH0NnyzRKOwUIvAMFZQCflWNoaXTM7GHQbF?=
=?us-ascii?Q?Mu0V8DbwEWTr3ZeIRnhvxwBxom5ATAqJcz+KuCAzyoOZGCGKDdcEmXsIHrW3?=
=?us-ascii?Q?lNF/0AXCdv/Xjj0=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(7416014)(366016)(1800799024)(7053199007)(38350700014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?fDx/oCWBEqTfZDqvtRG3thDLAb6iG7ghER77wLHqeyjzIdr+OHO8eJzk3lB0?=
=?us-ascii?Q?fLEkVCfCjFSZSj3t7bM6Bf/rEQWyymu6tR2MOhr9b2JY7D5w1A3KcgzVljC7?=
=?us-ascii?Q?PQnLirJ0lqX+3brxVQijrNPrlSqhtjrwKwd/T6dLNwKhFI2ayFQOTKRrXqoW?=
=?us-ascii?Q?8FHilhjhZOKsAtIYOeFCw2UXB/HD3x1fVcyPR6pgSDuWJZxQspdmnr1iuaXa?=
=?us-ascii?Q?C30fzjo0dOCluUDs/sZdRN8r3St0Fqa4tH0NmcMMPIjA10CMWn49WCY3+api?=
=?us-ascii?Q?y8Nq6eo70je4yARYl9VkT0cQFT3G61do/hGsF7USOR35iwtSbUIYAV3N9MLD?=
=?us-ascii?Q?BPa8juAv9sDD+7o7YDHMERFuO25YWT3tOXf6RS3yAZPQZLouFQ1qJKYPtTVq?=
=?us-ascii?Q?3el5gRro2OEUZx8NSVKJu2midhXoY4wqfqTBNOSop9BE8+BpphXNu5vDm0P8?=
=?us-ascii?Q?L+vnhHszUdyFq+4jlzDbBmS8yArSVRykk4uGj0kFUruTsqq4WcBpwOlE52ao?=
=?us-ascii?Q?YHvNO4H7dJPh0w3dEhrChqhlMRCI2jdGIfTe7GS0uC2OMnVNlRnN/ChRO2TZ?=
=?us-ascii?Q?wh0WooGWxIv/2xyZT4EqPjGxOoB96vx6B9A5LFkkb3h16CPTtpFHklUNk+oG?=
=?us-ascii?Q?mMIi0eY/f5WUBHYb/rMeKIIppQVa9VFuBcGBs9bF25smiR6LbxsyIsB9XTDM?=
=?us-ascii?Q?UK87qMNI3IGV5UI7gKZbJTgkwEIxuxQfs1eajgdOMaC/Xj4VRISw+rCC1+2h?=
=?us-ascii?Q?+Gj9th/YMVnhWP+3ePoJqDwlKupt1Bvpes6DYGDbZLCjAndzzMkG29hWhUXT?=
=?us-ascii?Q?Qte6fvzDpe/u2eOs+PFjCwVj/QSjCgtNWdNq4zTirDOKnvPCCXPtVf0AVMJ9?=
=?us-ascii?Q?zf/BeHS6TVFZavrL+o1Lrr93IVtrO0XH+Cc37uUc2/wEivEk5i4pk9DWqq72?=
=?us-ascii?Q?60XKQN/Sd+kj4maiVbIRBcKyELsuPJX4zqiQ7FsFSE5DGQRJ+JnT0eY/fPHw?=
=?us-ascii?Q?B4mzZk//yZoxLCxJzwOIl92Df1pltzhkXKcjX3h46gK/QKJXYYMZ6fdfykdE?=
=?us-ascii?Q?29xF2GvjHpFqzWpTj1Ljd8YJDITp1n+U2UsipOjdp9Regnxuwb9qKqcO3FUb?=
=?us-ascii?Q?OlvvbkzHyuPv0FwoB7o/7LT1WIdCt0HK2/XzOP/RDeMoM0pD0QytQbXIWOJM?=
=?us-ascii?Q?hgg2PeEi4tv6VlZqDYUvSeJqKE8KQonKNDxpah6Uwey2VOzbri26uYHoRqrM?=
=?us-ascii?Q?kETrJA29cCktWoSq6ZLTx4zrjXc28yYTw6uc553w0siD8weRLQZXR0bS65Yb?=
=?us-ascii?Q?/4OqLjXPi730rAMwUBqobQKMLZGR6GoThi4Nt8TeieTWj0Y/17ug+PG1Xs9I?=
=?us-ascii?Q?Qo/kqo97O9F5PHy720QYGnGXsd7/Mihoef9K3/64AHdslvae1++64UBSmdBg?=
=?us-ascii?Q?huujAwnPapfyGvcP/kQC2v8NdCN7ORdTrITkPr7annbCFu5ufz4Sj60jl0Rb?=
=?us-ascii?Q?SXePmMhw7oHgCzKxnlLTRHcTOq4iRW2etcksrNEBBrZc6ue9JOY+7fvSf0S4?=
=?us-ascii?Q?yy2X9ZOl1dEDnUEabDc=3D?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 36f7253a-2655-4c35-adf5-08dd9df80800
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 14:57:56.9805
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 339gfDKU6L/BSd3TUNSeRUhbzFWb8IbGd4N9oJGCokXgvRSvhvwRz7wMfEXiMu9bQ/G1TRf4ZHR4Ci+xRWjvyw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR04MB10103
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 02:43:07PM +0000, John Ernberg wrote:
> NXP SoCs like the iMX8QM, iMX8QXP or iMX8DXP use power domains for
> resource management.
>
> Allow specifying them for such SoCs.
suggest comment:
Add compatible string fsl,imx8qm-caam, and allow power-domains for it. Keep
the same restriction for others.
>
> Signed-off-by: John Ernberg <john.ernberg@xxxxxxxx>
>
> ---
>
> v3:
> - Fix warnings discovered by Rob Herring's bot
> - Declare the compatibles correctly (Krzysztof Kozlowski)
>
> v2:
> - Adjust commit message (Frank Li)
> - Only allow power-domains when compatible with imx8qm (Frank Li)
> ---
> .../bindings/crypto/fsl,sec-v4.0.yaml | 45 ++++++++++++++++++-
> 1 file changed, 44 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/devicetree/bindings/crypto/fsl,sec-v4.0.yaml b/Documentation/devicetree/bindings/crypto/fsl,sec-v4.0.yaml
> index 75afa441e019..a4ada0e2d97c 100644
> --- a/Documentation/devicetree/bindings/crypto/fsl,sec-v4.0.yaml
> +++ b/Documentation/devicetree/bindings/crypto/fsl,sec-v4.0.yaml
> @@ -46,6 +46,7 @@ properties:
> - items:
> - enum:
> - fsl,imx6ul-caam
> + - fsl,imx8qm-caam
suggest add fsl,imx8qxp-caam, fsl,imx8dxl-caam also
Frank
> - fsl,sec-v5.0
> - const: fsl,sec-v4.0
> - const: fsl,sec-v4.0
> @@ -77,6 +78,9 @@ properties:
> interrupts:
> maxItems: 1
>
> + power-domains:
> + maxItems: 1
> +
> fsl,sec-era:
> description: Defines the 'ERA' of the SEC device.
> $ref: /schemas/types.yaml#/definitions/uint32
> @@ -106,7 +110,9 @@ patternProperties:
> - const: fsl,sec-v5.0-job-ring
> - const: fsl,sec-v4.0-job-ring
> - items:
> - - const: fsl,sec-v5.0-job-ring
> + - enum:
> + - fsl,imx8qm-job-ring
> + - fsl,sec-v5.0-job-ring
> - const: fsl,sec-v4.0-job-ring
> - const: fsl,sec-v4.0-job-ring
>
> @@ -116,6 +122,9 @@ patternProperties:
> interrupts:
> maxItems: 1
>
> + power-domains:
> + maxItems: 1
> +
> fsl,liodn:
> description:
> Specifies the LIODN to be used in conjunction with the ppid-to-liodn
> @@ -212,6 +221,40 @@ required:
> - reg
> - ranges
>
> +allOf:
> + - if:
> + properties:
> + compatible:
> + contains:
> + const: fsl,imx8qm-caam
> + then:
> + required:
> + - power-domains
> + else:
> + properties:
> + power-domains: false
> +
> + - if:
> + patternProperties:
> + '^jr@[0-9a-f]+$':
> + type: object
> + properties:
> + compatible:
> + contains:
> + const: fsl,imx8qm-job-ring
> + then:
> + patternProperties:
> + '^jr@[0-9a-f]+$':
> + type: object
> + required:
> + - power-domains
> + else:
> + patternProperties:
> + '^jr@[0-9a-f]+$':
> + type: object
> + properties:
> + power-domains: false
> +
> additionalProperties: false
>
> examples:
> --
> 2.49.0
Return-Path: <linux-kernel+bounces-665676-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id B98CD41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:00:30 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 8C8DF3B5C44
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:00:09 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C722C28B51E;
Wed, 28 May 2025 15:00:22 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=marvell.com header.i=@marvell.com header.b="cNAOQMg5"
Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1243D27454;
Wed, 28 May 2025 15:00:19 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=67.231.156.173
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444421; cv=none; b=WJ3UhSukNQKqaKlbr0xPzAsTejXjM5iZcIMxGr+00+Df/qSSllrWd08gdn5jilEmFjX4GXqvVY2cxIKSFxTgrTTelECoUj+O3dMhdJkLms5Rep5am+Ke5pPgxpSyaPbm1PThAcLJ0UnUYCXZJpBxZWss6CjYd7m6u4IwuiLNXLw=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444421; c=relaxed/simple;
bh=PEE6FuDKo4h6V90wsU4VKCmHyqBb8yiBwrX2i1gXiIU=;
h=From:To:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=CiekyTDYhkJD07gKg8+YYPy43uJt5+ELnSl/VmVgY9cPFkE2S3Ahermt2r7I2QvuCuhkeO0WRzZuL5ukaXtZB4/Q3uKO5sfW7EqlbNTs0MX1GPl/xdeqhwqsfss4+whVhZlvkNIt30LxxsHcbS6/wfFnWd1j8lyO79trLOaYoew=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=marvell.com; spf=pass smtp.mailfrom=marvell.com; dkim=pass (2048-bit key) header.d=marvell.com header.i=@marvell.com header.b=cNAOQMg5; arc=none smtp.client-ip=67.231.156.173
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=marvell.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=marvell.com
Received: from pps.filterd (m0431383.ppops.net [127.0.0.1])
by mx0b-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SDqTKi009900;
Wed, 28 May 2025 07:59:57 -0700
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=
content-transfer-encoding:content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to; s=pfpt0220; bh=p
ALYiRI/siKruRzfP5l7WiygRqJIDrWuK4jFkmWmTSg=; b=cNAOQMg5++V+KQbGH
HgthiZjmpjujQ6HWN0yPme5yMlu9TqH69ajBF9Jjq4OTUWfmGbHFx+L1u1cGbtOi
/vXj3VIOz3Eq5/FB+PDR8xrCEbuuBo9msTM0Imp28TXzGizQjEQWoohhYK6qAW4O
UM6ZLZ4V18nuzK+LQ7l6XEzPx3m+eXpO7gceVtXUTCfAj8BmyRUQtVu5G2Z/jVgx
3fvpBpnkU2wfC9ME1svvb9VGWO9fkdwDrjbzmYs3Wado0liEyqbiazgiFanlykou
+/z2139O14pUQpKUm7D+kjEBlm+zySG8ZzFbpSN0ip6x2e47eZFqwP/kFxhRoCIL
qSkBg==
Received: from dc6wp-exch02.marvell.com ([4.21.29.225])
by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 46x1e30bc8-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 07:59:57 -0700 (PDT)
Received: from DC6WP-EXCH02.marvell.com (10.76.176.209) by
DC6WP-EXCH02.marvell.com (10.76.176.209) with Microsoft SMTP Server
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
15.2.1544.4; Wed, 28 May 2025 07:59:56 -0700
Received: from maili.marvell.com (10.69.176.80) by DC6WP-EXCH02.marvell.com
(10.76.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend
Transport; Wed, 28 May 2025 07:59:56 -0700
Received: from localhost.localdomain (unknown [10.28.36.167])
by maili.marvell.com (Postfix) with ESMTP id 752263F704F;
Wed, 28 May 2025 07:59:52 -0700 (PDT)
From: Amit Singh Tomar <amitsinght@xxxxxxxxxxx>
To: Srujana Challa <schalla@xxxxxxxxxxx>,
Bharat Bhushan
<bbhushan2@xxxxxxxxxxx>,
Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>,
"David S.
Miller" <davem@xxxxxxxxxxxxx>,
Amit Singh Tomar <amitsinght@xxxxxxxxxxx>,
Kuan-Wei Chiu <visitorckw@xxxxxxxxx>,
Peter Zijlstra <peterz@xxxxxxxxxxxxx>,
Bjorn Helgaas <bhelgaas@xxxxxxxxxx>,
Philipp Stanner <pstanner@xxxxxxxxxx>,
Shashank Gupta <shashankg@xxxxxxxxxxx>, <linux-crypto@xxxxxxxxxxxxxxx>,
<linux-kernel@xxxxxxxxxxxxxxx>, Tanmay Jagdale <tanmay@xxxxxxxxxxx>
Subject: [PATCH 1/2] crypto: octeontx2: Rework how engine group number is obtained
Date: Wed, 28 May 2025 20:29:40 +0530
Message-ID: <20250528145941.2659706-2-amitsinght@xxxxxxxxxxx>
X-Mailer: git-send-email 2.48.1
In-Reply-To: <20250528145941.2659706-1-amitsinght@xxxxxxxxxxx>
References: <20250528145941.2659706-1-amitsinght@xxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-Proofpoint-ORIG-GUID: QvGPBgVmeOEd8ii4BNgzwZvcBuAQwnNC
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEzMCBTYWx0ZWRfX2OQKxb9wcdNI kmHpCXzTGXTX2320W/f/dmg4lwiuOuD8OmBaPCX9snre3nvGh0Pyg/185U6e5KUCG5bSj4O8+pC PCzQum6U0febxQUq01DrAojQikeT34cfWWPO+DCf6FR7kdJTcF4ia2vlZZ6AnJZbuuEmdjKd2qb
1Qum210FNiv4FoKDWDVwNXakYVm7kAZE64RBNaGE9JQdMMueba1hoIKeiYK0JRlDaRnBNmupxYS 5giR4nb3+aOEQxnDl0ePWtImHlbvQ++qPeTatFDUbUfAwSwWS/DA25wubOxQf7C+Eg5qFk7QITe uhiOMYyQFUZ0w6NjJnHIoweBVDFWoKCXWAB6LJbOZ2ozqDcgYbnTdjAKL4PVL1V4qU69ljLA32Z
oOVTFv1ZO/sTqnuAhp2FcuaK4WutBC0SBAfhj2hiICCia50vFGRI0ykXlskcUtH5qR+oPY1X
X-Proofpoint-GUID: QvGPBgVmeOEd8ii4BNgzwZvcBuAQwnNC
X-Authority-Analysis: v=2.4 cv=baVrUPPB c=1 sm=1 tr=0 ts=683724ed cx=c_pps a=gIfcoYsirJbf48DBMSPrZA==:117 a=gIfcoYsirJbf48DBMSPrZA==:17 a=dt9VzEwgFbYA:10 a=M5GUcnROAAAA:8 a=8f77AyW8qadUDfJvTo0A:9 a=OBjm3rFKGHvpk9ecZwUJ:22
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_07,2025-05-27_01,2025-03-28_01
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
By default, otx2_cpt_get_kcrypto_eng_grp_num() returns the engine group
number of SE engine type. Add an engine type parameter to support
retrieving the engine group number for different engine types.
Since otx2_cpt_get_kcrypto_eng_grp_num() always returns the kernel crypto
engine group number, rename it to otx2_cpt_get_eng_grp_num().
Signed-off-by: Amit Singh Tomar <amitsinght@xxxxxxxxxxx>
---
drivers/crypto/marvell/octeontx2/otx2_cpt_reqmgr.h | 3 ++-
drivers/crypto/marvell/octeontx2/otx2_cptlf.h | 2 +-
drivers/crypto/marvell/octeontx2/otx2_cptvf_algs.c | 6 ++++--
drivers/crypto/marvell/octeontx2/otx2_cptvf_main.c | 13 +++++++------
drivers/crypto/marvell/octeontx2/otx2_cptvf_mbox.c | 5 ++++-
.../crypto/marvell/octeontx2/otx2_cptvf_reqmgr.c | 12 ++++++++++--
6 files changed, 28 insertions(+), 13 deletions(-)
diff --git a/drivers/crypto/marvell/octeontx2/otx2_cpt_reqmgr.h b/drivers/crypto/marvell/octeontx2/otx2_cpt_reqmgr.h
index e27e849b01df..72473f0070f3 100644
--- a/drivers/crypto/marvell/octeontx2/otx2_cpt_reqmgr.h
+++ b/drivers/crypto/marvell/octeontx2/otx2_cpt_reqmgr.h
@@ -490,6 +490,7 @@ struct otx2_cptlf_wqe;
int otx2_cpt_do_request(struct pci_dev *pdev, struct otx2_cpt_req_info *req,
int cpu_num);
void otx2_cpt_post_process(struct otx2_cptlf_wqe *wqe);
-int otx2_cpt_get_kcrypto_eng_grp_num(struct pci_dev *pdev);
+int otx2_cpt_get_eng_grp_num(struct pci_dev *pdev,
+ enum otx2_cpt_eng_type);
#endif /* __OTX2_CPT_REQMGR_H */
diff --git a/drivers/crypto/marvell/octeontx2/otx2_cptlf.h b/drivers/crypto/marvell/octeontx2/otx2_cptlf.h
index 6e004a5568d8..49ec2b92e86d 100644
--- a/drivers/crypto/marvell/octeontx2/otx2_cptlf.h
+++ b/drivers/crypto/marvell/octeontx2/otx2_cptlf.h
@@ -124,7 +124,7 @@ struct otx2_cptlfs_info {
struct cpt_hw_ops *ops;
u8 are_lfs_attached; /* Whether CPT LFs are attached */
u8 lfs_num; /* Number of CPT LFs */
- u8 kcrypto_eng_grp_num; /* Kernel crypto engine group number */
+ u8 kcrypto_se_eng_grp_num; /* Crypto symmetric engine group number */
u8 kvf_limits; /* Kernel crypto limits */
atomic_t state; /* LF's state. started/reset */
int blkaddr; /* CPT blkaddr: BLKADDR_CPT0/BLKADDR_CPT1 */
diff --git a/drivers/crypto/marvell/octeontx2/otx2_cptvf_algs.c b/drivers/crypto/marvell/octeontx2/otx2_cptvf_algs.c
index 7eb0bc13994d..8d9f394d6b50 100644
--- a/drivers/crypto/marvell/octeontx2/otx2_cptvf_algs.c
+++ b/drivers/crypto/marvell/octeontx2/otx2_cptvf_algs.c
@@ -384,7 +384,8 @@ static inline int cpt_enc_dec(struct skcipher_request *req, u32 enc)
req_info->req_type = OTX2_CPT_ENC_DEC_REQ;
req_info->is_enc = enc;
req_info->is_trunc_hmac = false;
- req_info->ctrl.s.grp = otx2_cpt_get_kcrypto_eng_grp_num(pdev);
+ req_info->ctrl.s.grp = otx2_cpt_get_eng_grp_num(pdev,
+ OTX2_CPT_SE_TYPES);
req_info->req.cptr = ctx->er_ctx.hw_ctx;
req_info->req.cptr_dma = ctx->er_ctx.cptr_dma;
@@ -1288,7 +1289,8 @@ static int cpt_aead_enc_dec(struct aead_request *req, u8 reg_type, u8 enc)
if (status)
return status;
- req_info->ctrl.s.grp = otx2_cpt_get_kcrypto_eng_grp_num(pdev);
+ req_info->ctrl.s.grp = otx2_cpt_get_eng_grp_num(pdev,
+ OTX2_CPT_SE_TYPES);
/*
* We perform an asynchronous send and once
diff --git a/drivers/crypto/marvell/octeontx2/otx2_cptvf_main.c b/drivers/crypto/marvell/octeontx2/otx2_cptvf_main.c
index 56904bdfd6e8..79adc224066e 100644
--- a/drivers/crypto/marvell/octeontx2/otx2_cptvf_main.c
+++ b/drivers/crypto/marvell/octeontx2/otx2_cptvf_main.c
@@ -265,17 +265,18 @@ static int cptvf_lf_init(struct otx2_cptvf_dev *cptvf)
u8 eng_grp_msk;
/* Get engine group number for symmetric crypto */
- cptvf->lfs.kcrypto_eng_grp_num = OTX2_CPT_INVALID_CRYPTO_ENG_GRP;
+ cptvf->lfs.kcrypto_se_eng_grp_num = OTX2_CPT_INVALID_CRYPTO_ENG_GRP;
ret = otx2_cptvf_send_eng_grp_num_msg(cptvf, OTX2_CPT_SE_TYPES);
if (ret)
return ret;
- if (cptvf->lfs.kcrypto_eng_grp_num == OTX2_CPT_INVALID_CRYPTO_ENG_GRP) {
- dev_err(dev, "Engine group for kernel crypto not available\n");
- ret = -ENOENT;
- return ret;
+ if (cptvf->lfs.kcrypto_se_eng_grp_num ==
+ OTX2_CPT_INVALID_CRYPTO_ENG_GRP) {
+ dev_err(dev,
+ "Symmetric Engine group for crypto not available\n");
+ return -ENOENT;
}
- eng_grp_msk = 1 << cptvf->lfs.kcrypto_eng_grp_num;
+ eng_grp_msk = 1 << cptvf->lfs.kcrypto_se_eng_grp_num;
ret = otx2_cptvf_send_kvf_limits_msg(cptvf);
if (ret)
diff --git a/drivers/crypto/marvell/octeontx2/otx2_cptvf_mbox.c b/drivers/crypto/marvell/octeontx2/otx2_cptvf_mbox.c
index 931b72580fd9..f36d75f40014 100644
--- a/drivers/crypto/marvell/octeontx2/otx2_cptvf_mbox.c
+++ b/drivers/crypto/marvell/octeontx2/otx2_cptvf_mbox.c
@@ -75,6 +75,7 @@ static void process_pfvf_mbox_mbox_msg(struct otx2_cptvf_dev *cptvf,
struct otx2_cpt_caps_rsp *eng_caps;
struct cpt_rd_wr_reg_msg *rsp_reg;
struct msix_offset_rsp *rsp_msix;
+ u8 grp_num;
int i;
if (msg->id >= MBOX_MSG_MAX) {
@@ -122,7 +123,9 @@ static void process_pfvf_mbox_mbox_msg(struct otx2_cptvf_dev *cptvf,
break;
case MBOX_MSG_GET_ENG_GRP_NUM:
rsp_grp = (struct otx2_cpt_egrp_num_rsp *) msg;
- cptvf->lfs.kcrypto_eng_grp_num = rsp_grp->eng_grp_num;
+ grp_num = rsp_grp->eng_grp_num;
+ if (rsp_grp->eng_type == OTX2_CPT_SE_TYPES)
+ cptvf->lfs.kcrypto_se_eng_grp_num = grp_num;
break;
case MBOX_MSG_GET_KVF_LIMITS:
rsp_limits = (struct otx2_cpt_kvf_limits_rsp *) msg;
diff --git a/drivers/crypto/marvell/octeontx2/otx2_cptvf_reqmgr.c b/drivers/crypto/marvell/octeontx2/otx2_cptvf_reqmgr.c
index 426244107037..8b4ac269330a 100644
--- a/drivers/crypto/marvell/octeontx2/otx2_cptvf_reqmgr.c
+++ b/drivers/crypto/marvell/octeontx2/otx2_cptvf_reqmgr.c
@@ -391,9 +391,17 @@ void otx2_cpt_post_process(struct otx2_cptlf_wqe *wqe)
&wqe->lfs->lf[wqe->lf_num].pqueue);
}
-int otx2_cpt_get_kcrypto_eng_grp_num(struct pci_dev *pdev)
+int otx2_cpt_get_eng_grp_num(struct pci_dev *pdev,
+ enum otx2_cpt_eng_type eng_type)
{
struct otx2_cptvf_dev *cptvf = pci_get_drvdata(pdev);
- return cptvf->lfs.kcrypto_eng_grp_num;
+ switch (eng_type) {
+ case OTX2_CPT_SE_TYPES:
+ return cptvf->lfs.kcrypto_se_eng_grp_num;
+ default:
+ dev_err(&cptvf->pdev->dev, "Unsupported engine type");
+ break;
+ }
+ return -ENXIO;
}
--
2.48.1
Return-Path: <linux-kernel+bounces-665677-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E39EF41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:01:18 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 927701BC74E1
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:01:31 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 8C8AE28B7EC;
Wed, 28 May 2025 15:01:08 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=marvell.com header.i=@marvell.com header.b="F7O/Losn"
Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5A54A289E2E;
Wed, 28 May 2025 15:01:06 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=67.231.156.173
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444467; cv=none; b=DPFnsO7V1Kqww8UHcim7fXuuSjzdki3QwBTFqmnUeDWs2wKZU00XXN7A/nXTq4lWgi1xT8gzZinkaUMl3NCLY0AOBB+dTCLSH9lL1fye2W+h4+Wcv9JCZO2ZoQCSU4iroZ5iCWYhyGOKktQa6/j73EzmnOLHAUThB/lNgP/QDVA=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444467; c=relaxed/simple;
bh=2uJ+tGZqyrBrCh0Qw9nMaeH5x+2ObMmNmZLu+fhKw7g=;
h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type; b=odAF05gWmTE4bpTZlaEfJt6NbLsh0WZVlAvlwsimw0hYmU61pdtOD0FwFIwoq7hptMK9kYDfu9epqmlwxisLeVOsqHV654+xp/KhcZDXHEGje9szp67LPEdf/V+3Yikgv09p0Owy4hqfd4TK8FC23b5GxNFFB2SV/VzppnjSeiQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=marvell.com; spf=pass smtp.mailfrom=marvell.com; dkim=pass (2048-bit key) header.d=marvell.com header.i=@marvell.com header.b=F7O/Losn; arc=none smtp.client-ip=67.231.156.173
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=marvell.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=marvell.com
Received: from pps.filterd (m0045851.ppops.net [127.0.0.1])
by mx0b-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SDqasc021258;
Wed, 28 May 2025 07:59:53 -0700
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=
content-transfer-encoding:content-type:date:from:message-id
:mime-version:subject:to; s=pfpt0220; bh=mMHJ+m5f3/50TEokEsHWSSl
ZWDK+XJmegSFBuiUr1e4=; b=F7O/LosninwyHKOF7YEfNYRemNmqK0ZrHbAnQAW
lCJHBy+PEm7FeiuiuIdpOOBvalzidoe7xAMUviH/b//hHcvYvV41XO7r+Cjy5Zki
hoa5sPlw6Ul7i7QnaKGxLA1KfTAeTlwt9iSM7c/bh0Fcs5Fht+/9IomzIjhiMRmI
hbi0FXV0boSioirCDyy9bg+g5aEqkIeGmISEzojlcZmbnidSQ2/pD6v05pFBvB09
/K+eD1xzLC2qMuKWkglw9IJ/aAVsB36B/3gXlP2a76vxPtlqeYeS2HQd+WfGOst2
XRRzlLxTVr4n/cj7pXK+AtDozWP0zCEwvKgz0GBKzcj2w5A==
Received: from dc6wp-exch02.marvell.com ([4.21.29.225])
by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 46wu5ah1rc-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 07:59:52 -0700 (PDT)
Received: from DC6WP-EXCH02.marvell.com (10.76.176.209) by
DC6WP-EXCH02.marvell.com (10.76.176.209) with Microsoft SMTP Server
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
15.2.1544.4; Wed, 28 May 2025 07:59:52 -0700
Received: from maili.marvell.com (10.69.176.80) by DC6WP-EXCH02.marvell.com
(10.76.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend
Transport; Wed, 28 May 2025 07:59:52 -0700
Received: from localhost.localdomain (unknown [10.28.36.167])
by maili.marvell.com (Postfix) with ESMTP id B389E3F704F;
Wed, 28 May 2025 07:59:47 -0700 (PDT)
From: Amit Singh Tomar <amitsinght@xxxxxxxxxxx>
To: Srujana Challa <schalla@xxxxxxxxxxx>,
Bharat Bhushan
<bbhushan2@xxxxxxxxxxx>,
Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>,
"David S.
Miller" <davem@xxxxxxxxxxxxx>,
Amit Singh Tomar <amitsinght@xxxxxxxxxxx>,
Kuan-Wei Chiu <visitorckw@xxxxxxxxx>,
Peter Zijlstra <peterz@xxxxxxxxxxxxx>,
Bjorn Helgaas <bhelgaas@xxxxxxxxxx>,
Philipp Stanner <pstanner@xxxxxxxxxx>,
Shashank Gupta <shashankg@xxxxxxxxxxx>, <linux-crypto@xxxxxxxxxxxxxxx>,
<linux-kernel@xxxxxxxxxxxxxxx>, Tanmay Jagdale <tanmay@xxxxxxxxxxx>
Subject: [PATCH 0/2] extend engine group handling for Additional types
Date: Wed, 28 May 2025 20:29:39 +0530
Message-ID: <20250528145941.2659706-1-amitsinght@xxxxxxxxxxx>
X-Mailer: git-send-email 2.48.1
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEzMCBTYWx0ZWRfXxGqDrFNrVK63 qbPMlMk2BT/0K330mYfu8mnnp8hAyk9f5MTHwQBNDdhXzkhuwQW+QmkugUlKpAgZcLf9nckacbM xkSdIQnyUZf8kltTkYVJULskkWWFK/5Rg5Wi9uXkCkuXD4tuLtCme8DLayYMmcSKD0ZS7/JQyNJ
1IKBwNLFuvWehIaOWlFz3XRM4xD3hg84Hpd2U0f0ylIrrtIv4paiIRHTRCJb6kBiQIGNFdCw03E kWZNddKiTHNitCm8b2did79EF7m01Yff8D5Unbghn97h5SKDMhsfCFm6/NOCv6smbn2PIQMoI56 N0olU8+Fd53pXhdOdTBbnCJz34ZQRSPDl0GdLObKMlfviwGjssPeMuwFFRxRbKl64oKVqd50yiI
+Zh0QZ5JcIQ7lXQt0JlwI5BD3MshVZ65uBb1hCJS8eANeyNOQaJqTeA8juunT3zHmYtMe1Ap
X-Proofpoint-GUID: eM80qeMSim00De_t1G_1G2PE3sTkOUDS
X-Proofpoint-ORIG-GUID: eM80qeMSim00De_t1G_1G2PE3sTkOUDS
X-Authority-Analysis: v=2.4 cv=UahRSLSN c=1 sm=1 tr=0 ts=683724e8 cx=c_pps a=gIfcoYsirJbf48DBMSPrZA==:117 a=gIfcoYsirJbf48DBMSPrZA==:17 a=dt9VzEwgFbYA:10 a=CBuo3nfPA_17JlLSTRIA:9
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_07,2025-05-27_01,2025-03-28_01
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
The Cryptographic Accelerator Unit (CPT) on MARVELL platform supports
different engine groups to execute both symmetric and asymmetric
algorithms. This small patch set introduces minor enhancements to the
engine group handling logic to ensure the correct group numbers are
obtained for AE and SE.
patch(1/1)
* extend the otx2_cpt_get_kcrypto_eng_grp_num() API to support
retrieving engine group numbers for additional engine types.
patch(2/2)
* Add support for retrieving the engine group number for the asymmetric
engine type.
Amit Singh Tomar (2):
crypto: octeontx2: Rework how engine group number is obtained
crypto: octeontx2: get engine group number for asymmetric engine
.../marvell/octeontx2/otx2_cpt_reqmgr.h | 3 ++-
drivers/crypto/marvell/octeontx2/otx2_cptlf.h | 3 ++-
.../marvell/octeontx2/otx2_cptvf_algs.c | 6 +++--
.../marvell/octeontx2/otx2_cptvf_main.c | 26 +++++++++++++++----
.../marvell/octeontx2/otx2_cptvf_mbox.c | 7 ++++-
.../marvell/octeontx2/otx2_cptvf_reqmgr.c | 14 ++++++++--
6 files changed, 47 insertions(+), 12 deletions(-)
--
2.48.1
Return-Path: <linux-kernel+bounces-665678-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id A92D141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:01:34 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 91E901BC779E
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:01:45 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id DBB0328B7C3;
Wed, 28 May 2025 15:01:15 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=marvell.com header.i=@marvell.com header.b="HtQkGB6U"
Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5E557278162;
Wed, 28 May 2025 15:01:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=67.231.156.173
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444475; cv=none; b=CTnL0p82ID+OMBlBUMnv7xaujr/3omzKgkpHBxbY/7aHNJ7/GQlkAck4QtNdy4JFLVwoMeQOR71w9NAS89MXns6diLXcChSJ9XbrpfKSXL2RFZlXcbdWoroWG4vIypu80cBghl49h8xOmW2yQrfFTt6nFLfzo4mTP/akr3jNias=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444475; c=relaxed/simple;
bh=tVOvSZ8WGTNMT3w3paP3QmhD8M1rHT/WEr04d2e45+I=;
h=From:To:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=iXfTr4PJg9JwXWtg58UmbQcxnqBtdJqqOF9gO8AMEee86gUJiiIbhIu9FYg9qT9GDaAZsE2Y60BaQECttVXi4eTzI3PXURMN3kYG92YBFFqlDJ9TdKOZD9DUE5YKNio26jd0t0E5vFSHl0mOTbOYvfc8PFR8OVGAH7Ln4pZtQJg=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=marvell.com; spf=pass smtp.mailfrom=marvell.com; dkim=pass (2048-bit key) header.d=marvell.com header.i=@marvell.com header.b=HtQkGB6U; arc=none smtp.client-ip=67.231.156.173
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=marvell.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=marvell.com
Received: from pps.filterd (m0431383.ppops.net [127.0.0.1])
by mx0b-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SDr8x5010777;
Wed, 28 May 2025 08:00:03 -0700
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=
content-transfer-encoding:content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to; s=pfpt0220; bh=b
7wA58ZuF2OXeCi/aBSKESuuC9O3XlcY7z/3D2Eq/FY=; b=HtQkGB6Uz40VvLUrK
HsJy1cXhy5eQYUx+OUtzoHir/TLmCGs47lEqb5o01tPgOA5ZwjBiSDsL8yg2fm+m
eTFgMOB/+Anoh1hwzOmQZ/sTHAh86qLs5erWZYqopVBH/uAXTCGNDvshJRibaa6R
ocYYkrq5Jhz6w83Kz6+E0EnRqoaQm0/1II9xGykBBgDTIGksenJdlpVDvPHKk3OM
XvRL2g2TaZra4ESAtCsajuCdjLv9wN2Iga7V/1STmULD0IgI9IwjsDw3XtiyO3Me
jAFMcc0qiHOM5N3UPNbUhpXbjH8PQ9BdIGDy14Z0wjJ667sukhcGQG8ZJY1OII9C
0VCOw==
Received: from dc5-exch05.marvell.com ([199.233.59.128])
by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 46x1e30bce-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 08:00:03 -0700 (PDT)
Received: from DC5-EXCH05.marvell.com (10.69.176.209) by
DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
15.2.1544.4; Wed, 28 May 2025 08:00:01 -0700
Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH05.marvell.com
(10.69.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend
Transport; Wed, 28 May 2025 08:00:01 -0700
Received: from localhost.localdomain (unknown [10.28.36.167])
by maili.marvell.com (Postfix) with ESMTP id 3DB1F3F704F;
Wed, 28 May 2025 07:59:56 -0700 (PDT)
From: Amit Singh Tomar <amitsinght@xxxxxxxxxxx>
To: Srujana Challa <schalla@xxxxxxxxxxx>,
Bharat Bhushan
<bbhushan2@xxxxxxxxxxx>,
Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>,
"David S.
Miller" <davem@xxxxxxxxxxxxx>,
Amit Singh Tomar <amitsinght@xxxxxxxxxxx>,
Kuan-Wei Chiu <visitorckw@xxxxxxxxx>,
Peter Zijlstra <peterz@xxxxxxxxxxxxx>,
Bjorn Helgaas <bhelgaas@xxxxxxxxxx>,
Philipp Stanner <pstanner@xxxxxxxxxx>,
Shashank Gupta <shashankg@xxxxxxxxxxx>, <linux-crypto@xxxxxxxxxxxxxxx>,
<linux-kernel@xxxxxxxxxxxxxxx>, Tanmay Jagdale <tanmay@xxxxxxxxxxx>
Subject: [PATCH 2/2] crypto: octeontx2: get engine group number for asymmetric engine
Date: Wed, 28 May 2025 20:29:41 +0530
Message-ID: <20250528145941.2659706-3-amitsinght@xxxxxxxxxxx>
X-Mailer: git-send-email 2.48.1
In-Reply-To: <20250528145941.2659706-1-amitsinght@xxxxxxxxxxx>
References: <20250528145941.2659706-1-amitsinght@xxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-Proofpoint-ORIG-GUID: e4x9pK3bpR8ZeCjYTmRVQB9mlElvoYSh
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEzMCBTYWx0ZWRfXyCKjnCWrnV9r Xyywjxo2MIFrbHKH+a2/wW2SF2Jio4giVJwrAtNJvfxqtMuDbIyam1YWP1Ox3sT9qODtVcRIGou JXrJgph60mQGI3AasKaxL36bZYKuZiYLW8t09dXmnTJ4+xTLcuYNvw8ZEpPu4c9PjrJNMyduHUN
qxaZJf8t6Tu7xNenjTpwfnEJ4lw6wFOnd4auvwj8SsGQeHdOXGg2DSXeI4Rjrm7+e/vpfb4A0wJ Yh6Z1ddbTC+Q6QrX/YBTfjUn+ow6I0zrjvABx5f3AP1Cq2z/WXMww2Gs4GmzqOsK4D30dlNYPXp gFb3/gA16HzxfBuUXRpXxOYBp4KGfQwHTkOOmteQvQzziU9fbHlC9s1KkH68sYJXvtH7TVxObDT
XV7PgvRafgwjcmOuCIaZGBaDRnc5d7xpLEm3mcR4xdaOr13yWEFFmzif8dPw2Gteo0+sYc6p
X-Proofpoint-GUID: e4x9pK3bpR8ZeCjYTmRVQB9mlElvoYSh
X-Authority-Analysis: v=2.4 cv=baVrUPPB c=1 sm=1 tr=0 ts=683724f3 cx=c_pps a=rEv8fa4AjpPjGxpoe8rlIQ==:117 a=rEv8fa4AjpPjGxpoe8rlIQ==:17 a=dt9VzEwgFbYA:10 a=M5GUcnROAAAA:8 a=HShFi8kSKcbLiSuR9dgA:9 a=OBjm3rFKGHvpk9ecZwUJ:22
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_07,2025-05-27_01,2025-03-28_01
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Cryptographic Accelerator Unit (CPT) support different engine groups, one
for asymmetric algorithms (only AE engines in this group), one for the
most common symmetric algorithms (all SE and all IE engines in this group),
and one for other symmetric algorithms (only SE engines in this group).
For symmetric engine (SE), we obtain the group number using
"MBOX_MSG_GET_ENG_GRP_NUM" mailbox. Let's follow a similar approach to
determine the group number for asymmetric engine (AE).
Signed-off-by: Amit Singh Tomar <amitsinght@xxxxxxxxxxx>
---
drivers/crypto/marvell/octeontx2/otx2_cptlf.h | 1 +
.../crypto/marvell/octeontx2/otx2_cptvf_main.c | 17 ++++++++++++++++-
.../crypto/marvell/octeontx2/otx2_cptvf_mbox.c | 2 ++
.../marvell/octeontx2/otx2_cptvf_reqmgr.c | 2 ++
4 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/drivers/crypto/marvell/octeontx2/otx2_cptlf.h b/drivers/crypto/marvell/octeontx2/otx2_cptlf.h
index 49ec2b92e86d..1b9f75214d18 100644
--- a/drivers/crypto/marvell/octeontx2/otx2_cptlf.h
+++ b/drivers/crypto/marvell/octeontx2/otx2_cptlf.h
@@ -125,6 +125,7 @@ struct otx2_cptlfs_info {
u8 are_lfs_attached; /* Whether CPT LFs are attached */
u8 lfs_num; /* Number of CPT LFs */
u8 kcrypto_se_eng_grp_num; /* Crypto symmetric engine group number */
+ u8 kcrypto_ae_eng_grp_num; /* Crypto asymmetric engine group number */
u8 kvf_limits; /* Kernel crypto limits */
atomic_t state; /* LF's state. started/reset */
int blkaddr; /* CPT blkaddr: BLKADDR_CPT0/BLKADDR_CPT1 */
diff --git a/drivers/crypto/marvell/octeontx2/otx2_cptvf_main.c b/drivers/crypto/marvell/octeontx2/otx2_cptvf_main.c
index 79adc224066e..c1c44a7b89fa 100644
--- a/drivers/crypto/marvell/octeontx2/otx2_cptvf_main.c
+++ b/drivers/crypto/marvell/octeontx2/otx2_cptvf_main.c
@@ -276,7 +276,22 @@ static int cptvf_lf_init(struct otx2_cptvf_dev *cptvf)
"Symmetric Engine group for crypto not available\n");
return -ENOENT;
}
- eng_grp_msk = 1 << cptvf->lfs.kcrypto_se_eng_grp_num;
+
+ /* Get engine group number for asymmetric crypto */
+ cptvf->lfs.kcrypto_ae_eng_grp_num = OTX2_CPT_INVALID_CRYPTO_ENG_GRP;
+ ret = otx2_cptvf_send_eng_grp_num_msg(cptvf, OTX2_CPT_AE_TYPES);
+ if (ret)
+ return ret;
+
+ if (cptvf->lfs.kcrypto_ae_eng_grp_num ==
+ OTX2_CPT_INVALID_CRYPTO_ENG_GRP) {
+ dev_err(dev,
+ "Asymmetric Engine group for crypto not available\n");
+ return -ENOENT;
+ }
+
+ eng_grp_msk = BIT(cptvf->lfs.kcrypto_se_eng_grp_num) |
+ BIT(cptvf->lfs.kcrypto_ae_eng_grp_num);
ret = otx2_cptvf_send_kvf_limits_msg(cptvf);
if (ret)
diff --git a/drivers/crypto/marvell/octeontx2/otx2_cptvf_mbox.c b/drivers/crypto/marvell/octeontx2/otx2_cptvf_mbox.c
index f36d75f40014..3078e2375d3b 100644
--- a/drivers/crypto/marvell/octeontx2/otx2_cptvf_mbox.c
+++ b/drivers/crypto/marvell/octeontx2/otx2_cptvf_mbox.c
@@ -126,6 +126,8 @@ static void process_pfvf_mbox_mbox_msg(struct otx2_cptvf_dev *cptvf,
grp_num = rsp_grp->eng_grp_num;
if (rsp_grp->eng_type == OTX2_CPT_SE_TYPES)
cptvf->lfs.kcrypto_se_eng_grp_num = grp_num;
+ else if (rsp_grp->eng_type == OTX2_CPT_AE_TYPES)
+ cptvf->lfs.kcrypto_ae_eng_grp_num = grp_num;
break;
case MBOX_MSG_GET_KVF_LIMITS:
rsp_limits = (struct otx2_cpt_kvf_limits_rsp *) msg;
diff --git a/drivers/crypto/marvell/octeontx2/otx2_cptvf_reqmgr.c b/drivers/crypto/marvell/octeontx2/otx2_cptvf_reqmgr.c
index 8b4ac269330a..e71494486c64 100644
--- a/drivers/crypto/marvell/octeontx2/otx2_cptvf_reqmgr.c
+++ b/drivers/crypto/marvell/octeontx2/otx2_cptvf_reqmgr.c
@@ -399,6 +399,8 @@ int otx2_cpt_get_eng_grp_num(struct pci_dev *pdev,
switch (eng_type) {
case OTX2_CPT_SE_TYPES:
return cptvf->lfs.kcrypto_se_eng_grp_num;
+ case OTX2_CPT_AE_TYPES:
+ return cptvf->lfs.kcrypto_ae_eng_grp_num;
default:
dev_err(&cptvf->pdev->dev, "Unsupported engine type");
break;
--
2.48.1
Return-Path: <linux-kernel+bounces-665679-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E344A41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:02:08 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id E1BE318985C9
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:02:14 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 8239F28853F;
Wed, 28 May 2025 15:01:50 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="PgF+hwDd"
Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010051.outbound.protection.outlook.com [52.101.69.51])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2053D1DF98D;
Wed, 28 May 2025 15:01:46 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.51
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444509; cv=fail; b=GfwrJv8HG5AUmyL4mPjH6hgFIglx+YPL6GH7z62LAT0aqMt9XNrto1mTN9+jta9kIvsd5tqT4JK7pSEGxsCaC8YXZNO8WXdaLtqH4toGMyEVsZuCgpr8iS4dNNF97Yh3jVl6rsVr6okK8p0P5wMh3+PC33kF3TKw1vTts1muBoA=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444509; c=relaxed/simple;
bh=lymmOo+0loRXqQTgjbWa8JL31ZwvMWIL2B5PPoik74k=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=jT7pg8kMh/j5Tx6aWqeLZVLTZgA6TFZL+uMcmPgBeEaV284cMdvREjNwzIgaiHB+iGJU7E5Gq4xNT3lZnoWCvYa9mTNACAg6UPiXnzQxapVK33KOxR21EJsWLowhD2rwNEFvlHrPcJLmCmScT52DDbUvZzFSCAku0xGQsxHfwQc=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=PgF+hwDd; arc=fail smtp.client-ip=52.101.69.51
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=S5gZmQnbjRjzh11nlN6KRuHtqcLxEPGKtyPaDBaBZmDYFFU10mwtzon+GvWcYoLgHVhMSYyOfvySKH5PifLKxb7/grPI84osOn8IXiUWUhOnTp2tWl69qCZ1q7e73AnR629yEIupIicg2XhzfhHvir3YWAZnKuII18bpFVf2WXXV0uHJLRi5ssKznPROGTdArziyhaq7ALBQinE7+H/r66sQepdeTAz9WOuo88cHuUqOzFbKCCSymU1EV93OAnQKFNPBu+7nqZYw2v9bhMbeUfe1HqfsSACfVbp75sWrYIyIVtj8NvjcCcX32zGOetRgCloexe8i/eYRn6zHa2EGQg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=0sjfUW+ZcXX4x+xhmDE5Om1Vg9AojvW+UmIvpD4LNmw=;
b=jXmllfW1Crg7wyMJTqFmOv59RX+DI69WzIfkAhtPiFofjX+Wej4YU0ig79J2mcLUO3gC9ZXcym0oqo/l1pXYK9CRRxSFI4aVBuo3T8olZXmpZax428umcrjlekSne55PSEW9rvQUX4VJur8zloxsK4631y4yyUvIHXVF84b5zXnBzprKedXRPWt0RkwH7UGbnnvAuL3a8/09AnLb/ROtPKjXC2Hiw8Xhjrjma2uD0qabxhTue7BtnKDM6jdorcMbO2dWPeFETQI+RwRvgmiOB8T8MeQ/EyAl7awrTYZNHutueMqc62amxy4l8LBa/lEyQxniMrAfx4JsZl5Z1lKsIg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=0sjfUW+ZcXX4x+xhmDE5Om1Vg9AojvW+UmIvpD4LNmw=;
b=PgF+hwDdQ+kbtFezvqInq2V5e1FsPhjOe9NeWxrzqebr+LFRhhQnHILsFkIsiMwHqTEMLt4goLRauuBq8hzB+0EpRSgzsH6pecbFtz0siEUImdA8JDDjUxy4MfjAZ2Ue/dfe2NIUSw3mwTTTj258fswXUw7P5/0/GkctYXD45fYlaS1qJH6jwwfEALRKjCaUBdgUPSaeZ3gU7e3NyJemdL/cFbuwkIXZdXX3ch7US7UdG9QKhTI9UZkm3pT3wqc4Xr5pKrHT3ZDbSR1lL7El4oRZc/bE7LK1V7UtlKjx3xSmX2Jhder+Ihs5igiLj0063FO2IiHlZijy9QMzJrR2Mw==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by PAXPR04MB8960.eurprd04.prod.outlook.com (2603:10a6:102:20f::20) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.29; Wed, 28 May
2025 15:01:44 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
15:01:44 +0000
Date: Wed, 28 May 2025 11:01:33 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: John Ernberg <john.ernberg@xxxxxxxx>
Cc: Horia =?utf-8?Q?Geant=C4=83?= <horia.geanta@xxxxxxx>,
Pankaj Gupta <pankaj.gupta@xxxxxxx>,
Gaurav Jain <gaurav.jain@xxxxxxx>,
Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>,
"David S . Miller" <davem@xxxxxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>, Shawn Guo <shawnguo@xxxxxxxxxx>,
Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>,
Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>,
Fabio Estevam <festevam@xxxxxxxxx>,
Thomas Richard <thomas.richard@xxxxxxxxxxx>,
"linux-crypto@xxxxxxxxxxxxxxx" <linux-crypto@xxxxxxxxxxxxxxx>,
"devicetree@xxxxxxxxxxxxxxx" <devicetree@xxxxxxxxxxxxxxx>,
"linux-kernel@xxxxxxxxxxxxxxx" <linux-kernel@xxxxxxxxxxxxxxx>,
"imx@xxxxxxxxxxxxxxx" <imx@xxxxxxxxxxxxxxx>,
"linux-arm-kernel@xxxxxxxxxxxxxxxxxxx" <linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>
Subject: Re: [PATCH v3 4/4] arm64: dts: freescale: imx8qxp/imx8qm: Add CAAM
support
Message-ID: <aDclTQ8Z5WcHMxgT@lizhi-Precision-Tower-5810>
References: <20250528144259.2603914-1-john.ernberg@xxxxxxxx>
<20250528144259.2603914-5-john.ernberg@xxxxxxxx>
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20250528144259.2603914-5-john.ernberg@xxxxxxxx>
X-ClientProxiedBy: SJ0PR03CA0237.namprd03.prod.outlook.com
(2603:10b6:a03:39f::32) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|PAXPR04MB8960:EE_
X-MS-Office365-Filtering-Correlation-Id: 5eea6d63-1b11-42c3-5de7-08dd9df88f46
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|376014|52116014|7416014|1800799024|366016|38350700014|7053199007;
X-Microsoft-Antispam-Message-Info:
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
=?utf-8?Q?9DZ0e7tH3X/XOxoGkaWWwlGyXC8M7k=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(7416014)(1800799024)(366016)(38350700014)(7053199007);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
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
=?utf-8?Q?Y8prAaZuEU6iqyXrv5lxVZpgZ?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 5eea6d63-1b11-42c3-5de7-08dd9df88f46
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:01:44.2852
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: lbqM0TWExjEGsB5wdkoJ/4865mhSG2PXQkcboypvDX975Z2Q73oiWq6ao5NLv6rAvTWzQDPBqe/eaOSnlyW6NA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8960
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 02:43:08PM +0000, John Ernberg wrote:
> From: Horia GeantÄ? <horia.geanta@xxxxxxx>
>
> The iMX8QXP and iMX8QM have a CAAM (Cryptographic Acceleration and
> Assurance Module) like many other iMXs.
>
> Add the definitions for it.
>
> Job Rings 0 and 1 are bound to the SECO (Security Controller) ARM core
> and are not exposed outside it. There's no point to define them in the
> bindings as they cannot be used outside the SECO.
>
> Signed-off-by: Horia GeantÄ? <horia.geanta@xxxxxxx>
> [jernberg: Commit message, fixed dtbs_check warnings, trimmed memory ranges]
what's this for? remove it if not related with this patch.
Frank
> Signed-off-by: John Ernberg <john.ernberg@xxxxxxxx>
>
> ---
>
> Imported from NXP tree, trimmed down and fixed the dtbs_check warnings.
> Constrained the ranges to the needed ones.
> Changed the commit message.
> Original here: https://github.com/nxp-imx/linux-imx/commit/699e54b386cb9b53def401798d0a4e646105583d
>
> ---
>
> v3:
> - no changes
>
> v2:
> - Use new compatibles introduced in 3/4 (Frank Li)
> ---
> .../boot/dts/freescale/imx8-ss-security.dtsi | 38 +++++++++++++++++++
> arch/arm64/boot/dts/freescale/imx8qm.dtsi | 1 +
> arch/arm64/boot/dts/freescale/imx8qxp.dtsi | 1 +
> 3 files changed, 40 insertions(+)
> create mode 100644 arch/arm64/boot/dts/freescale/imx8-ss-security.dtsi
>
> diff --git a/arch/arm64/boot/dts/freescale/imx8-ss-security.dtsi b/arch/arm64/boot/dts/freescale/imx8-ss-security.dtsi
> new file mode 100644
> index 000000000000..9ecabb2d03e9
> --- /dev/null
> +++ b/arch/arm64/boot/dts/freescale/imx8-ss-security.dtsi
> @@ -0,0 +1,38 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright 2019 NXP
> + */
> +
> +#include <dt-bindings/firmware/imx/rsrc.h>
> +
> +security_subsys: bus@31400000 {
> + compatible = "simple-bus";
> + #address-cells = <1>;
> + #size-cells = <1>;
> + ranges = <0x31400000 0x0 0x31400000 0x90000>;
> +
> + crypto: crypto@31400000 {
> + compatible = "fsl,imx8qm-caam", "fsl,sec-v4.0";
> + reg = <0x31400000 0x90000>;
> + interrupts = <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>;
> + #address-cells = <1>;
> + #size-cells = <1>;
> + ranges = <0 0x31400000 0x90000>;
> + fsl,sec-era = <9>;
> + power-domains = <&pd IMX_SC_R_CAAM_JR2>;
> +
> + sec_jr2: jr@30000 {
> + compatible = "fsl,imx8qm-job-ring", "fsl,sec-v4.0-job-ring";
> + reg = <0x30000 0x10000>;
> + interrupts = <GIC_SPI 453 IRQ_TYPE_LEVEL_HIGH>;
> + power-domains = <&pd IMX_SC_R_CAAM_JR2>;
> + };
> +
> + sec_jr3: jr@40000 {
> + compatible = "fsl,imx8qm-job-ring", "fsl,sec-v4.0-job-ring";
> + reg = <0x40000 0x10000>;
> + interrupts = <GIC_SPI 454 IRQ_TYPE_LEVEL_HIGH>;
> + power-domains = <&pd IMX_SC_R_CAAM_JR3>;
> + };
> + };
> +};
> diff --git a/arch/arm64/boot/dts/freescale/imx8qm.dtsi b/arch/arm64/boot/dts/freescale/imx8qm.dtsi
> index 6fa31bc9ece8..6df018643f20 100644
> --- a/arch/arm64/boot/dts/freescale/imx8qm.dtsi
> +++ b/arch/arm64/boot/dts/freescale/imx8qm.dtsi
> @@ -612,6 +612,7 @@ vpu_dsp: dsp@556e8000 {
> };
>
> /* sorted in register address */
> + #include "imx8-ss-security.dtsi"
> #include "imx8-ss-cm41.dtsi"
> #include "imx8-ss-audio.dtsi"
> #include "imx8-ss-vpu.dtsi"
> diff --git a/arch/arm64/boot/dts/freescale/imx8qxp.dtsi b/arch/arm64/boot/dts/freescale/imx8qxp.dtsi
> index 05138326f0a5..e140155d65c6 100644
> --- a/arch/arm64/boot/dts/freescale/imx8qxp.dtsi
> +++ b/arch/arm64/boot/dts/freescale/imx8qxp.dtsi
> @@ -321,6 +321,7 @@ map0 {
> /* sorted in register address */
> #include "imx8-ss-img.dtsi"
> #include "imx8-ss-vpu.dtsi"
> + #include "imx8-ss-security.dtsi"
> #include "imx8-ss-cm40.dtsi"
> #include "imx8-ss-gpu0.dtsi"
> #include "imx8-ss-adma.dtsi"
> --
> 2.49.0
Return-Path: <linux-kernel+bounces-665680-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E6FDD41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:03:55 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 5201D1899AE5
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:04:07 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 90CC428B7E5;
Wed, 28 May 2025 15:03:46 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="I2xKvA4+"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B5DF51A9B3D;
Wed, 28 May 2025 15:03:45 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444625; cv=none; b=E1fyt2GK2fSSxcKXzrtOHW08AD5qVlvl/NDraP1kVaa/fUqrLKQT7VHMhGEI+MUEVs7xd/e7GurtVlhAwOfYkbJiLmmvmnt8l6pG8clU30A4mDsUJJTAsS7A0Lpb2/tk4TQim5VoZA1tiuUWmEtkS5wqeWHsX8HwnBoQAJWAfSI=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444625; c=relaxed/simple;
bh=JKfKTF15DiZJaG9JqtsMV97jZAYF8+DiAH7XxkjNRBo=;
h=Date:From:To:Cc:Subject:Message-Id:In-Reply-To:References:
Mime-Version:Content-Type; b=B5GD5jLcrIeMj92JsfYhL5c9A4/ECgSNcuGIM+ve20Sj31fcq4FbHLMZgyTSUkmGVP8cUVIP8fOiArFvzjVV/qODSj2j38/hlosPE1WXs78p7iGHSfT+X9y4VO39P2q3E/cxsJb5mEA7nQhUXaxmewe0c+QPzNpf9TTAcDtE8O8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=I2xKvA4+; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 61B27C4CEE3;
Wed, 28 May 2025 15:03:44 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748444625;
bh=JKfKTF15DiZJaG9JqtsMV97jZAYF8+DiAH7XxkjNRBo=;
h=Date:From:To:Cc:Subject:In-Reply-To:References:From;
b=I2xKvA4+ZXDYTNOLD2BakxlQShpTHOEEjD3hxU+fum4FTWqFjae7+GB4O9jsL0qNF
Mn6vbrEwTjy0VCtl8xOdyXRPKCdsrR7yzCFzT7nCZI68ojWVaRb/sYt40l+ntxBYHY
zNk98BANAZFBJXiLv+FR11ZfK49Yb6VEy7ClWmeyMljs8M4YjAB7PjOzUPm1NFovtU
vWzFyT+snOE19xPqQRdI+YXKeLguFs8khSpB16arfJxJkRB9FCtVKyCAqbhSeGA+jr
97D6eIy8BlsgwsOJQIcUQXFq8l780Okf3mAQwHOyU+gxJqOU2fjfY85P/lL0T/1uEn
36Kpnq0N2gYeA==
Date: Thu, 29 May 2025 00:03:42 +0900
From: Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>
To: Steven Rostedt <rostedt@xxxxxxxxxxx>
Cc: LKML <linux-kernel@xxxxxxxxxxxxxxx>, Linux Trace Kernel
<linux-trace-kernel@xxxxxxxxxxxxxxx>, Mathieu Desnoyers
<mathieu.desnoyers@xxxxxxxxxxxx>, Vincent Donnefort <vdonnefort@xxxxxxxxxx>
Subject: Re: [PATCH] ring-buffer: Do not trigger WARN_ON() due to a
commit_overrun
Message-Id: <20250529000342.5218ac7b90c99f3636edd5ab@xxxxxxxxxx>
In-Reply-To: <20250527221735.04c62a3c@xxxxxxxxxxxxxxxxx>
References: <20250527121140.0e7f0565@xxxxxxxxxxxxxxxxxx>
<20250528104203.d6f509c5d9c30dec1e024587@xxxxxxxxxx>
<20250527221735.04c62a3c@xxxxxxxxxxxxxxxxx>
X-Mailer: Sylpheed 3.8.0beta1 (GTK+ 2.24.33; x86_64-pc-linux-gnu)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
Mime-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-9.0 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,NICE_REPLY_A,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, 27 May 2025 22:17:35 -0400
Steven Rostedt <rostedt@xxxxxxxxxxx> wrote:
> On Wed, 28 May 2025 10:42:03 +0900
> Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx> wrote:
>
> > > The way to differentiate this case from the normal case of there
> > > only being one page written to where the swap of the reader page
> > > received that one page (which is the commit page), check if the
> > > tail page is on the reader page. The difference between the commit
> > > page and the tail page is that the tail page is where new writes go
> > > to, and the commit page holds the first write that hasn't been
> > > committed yet. In the case of an interrupt preempting the write of
> > > an event and filling the buffer, it would move the tail page but
> > > not the commit page.
> >
> > (BTW, what happen if the interrupted process commits the event? That
> > event will be lost, or commit and just move commit_page?)
>
> No, the first event to be created is the "commit" event. If it gets
> interrupted and the interrupt adds a bunch of events that wraps the
> ring buffer, it can't touch the commit event, it will just start
> dropping events. Then when the commit event finishes, it can either be
> read by the reader, or overwritten by the next events coming in.
Hmm, rb_end_commit() seems to try commit all nested events (committing > 1)
if committing == 1, and the rb_set_commit_to_write() pushes commit pointer
to the latest write pointer. So when it "start dropping events"? (is that
write side?)
> >
> > Thus the reader_page == commit_page && reader_page == tail_page,
> > missed_events should be 0?
> >
> > Possible cases if missed_events != 0:
> >
> > - reader_page != commit_page
> > (writer's commit overtook the reader)
>
> The reader is never in the write buffer. Just the head page will move.
> When a new reader page is taken it will swap out the old reader page
> with the head page. If the head page is the commit page, then the
> commit page becomes the reader page too.
Hmm, so this is the case that the writer is too fast and it moves
head page to the next page. Thus some events on old head page are
lost.
>
> >
> > - reader_page == commit_page but reader_page != tail_page
> > (writer overtook the reader, but commit is not completed yet.)
>
> No, "writer overtook the reader" doesn't make sense as the reader is
> not on the write buffer, so the writer can not catch up to it. What the
> write buffer has is the "head" page which is where the next reader will
> come to.
>
> The only way reader_page == commit_page and reader_page != tail_page is
> if the commit was interrupted and the interrupt added events and moved
> forward off the commit_page. The only way there would be missed events
> in that case is if the interrupt added so many events it wrapped the
> buffer and then started dropping events.
OK, so "wrapped the buffer" means "tail (write) page caught up the commit"?
>
> >
> > if
> > - reader_page == commit_page == tail_page
> > in this case, missed_events should be 0.
> >
> > Since the reader_page is out of the ring buffer, writer should not
> > use reader_page while reading the same reader_page, is that right?
>
> Correct. But the writer could end up on the reader page after the swap,
> if the head page happened to be the commit page.
OK.
>
> >
>
>
> > > cpu_buffer->tail_page,
> > > + "Reader on commit with %ld
> > > missed events",
> > > + missed_events)) {
> > > + /*
> > > + * If the tail page is not on the
> > > reader page but
> > > + * the commit_page is, that would
> > > mean that there's
> > > + * a commit_overrun (an interrupt
> > > preempted an
> > > + * addition of an event and then
> > > filled the buffer
> > > + * with new events). In this case
> > > it's not an
> > > + * error, but it should still be
> > > reported.
> > > + */
> > > + pr_info("Ring buffer commit
> > > overrun lost %ld events at timestamp:%lld\n",
> > > + missed_events,
> > > cpu_buffer->reader_page->page->time_stamp);
> >
> > Do we need this pr_info() for each commit overrun?
>
> Yes. When doing this stress test, it printed at most 4 times. It
> happens once per time the interrupt fills the buffer while interrupting
> the buffer.
Ah, I meant we should report it in printk buffer, since the event
lost will happen in some case and reader can notice that.
>
> I seldom ever get commit overruns. It's one of the fields in the status
> file located in: /sys/kernel/tracing/per_cpu/cpu*/stats
>
> >
> > > + }
> > > + }
> > > }
> >
> > Just for cleanup the code idea, with above change, this code is
> > something like;
> >
> > ----------------
> >
> > missed_events = cpu_buffer->lost_events;
> >
> > if (cpu_buffer->reader_page != cpu_buffer->commit_page) {
> > if (missed_event) {
> >
> > }
> > } else {
> > if (missed_event) {
> > if (!WARN_ONCE(cpu_buffer->reader_page ==
> > cpu_buffer->tail_page,"...")) { pr_info("...")
> > }
> > }
> > }
> >
> > ----------------
> >
> > Can we make it as below?
> >
> > ----------------
> > missed_events = cpu_buffer->lost_events;
> >
> > if (missed_event) {
> > if (cpu_buffer->reader_page != cpu_buffer->commit_page) {
> >
> > } else if (!WARN_ONCE(cpu_buffer->reader_page ==
> > cpu_buffer->tail_page, "...") { /**/
> > pr_info("...");
> > }
> > }
>
> Hmm, OK, I'll look at that.
Thanks! Anyway, the logic looks good to me.
>
> Thanks,
>
> -- Steve
--
Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>
Return-Path: <linux-kernel+bounces-665681-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 377E041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:04:12 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 65D0B4E49DB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:04:13 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 5B9CB288C39;
Wed, 28 May 2025 15:04:05 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="WG67XJgn"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8001324418F
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:04:01 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444644; cv=none; b=HaJA2OHTA+rm4BNv5oFPhwR1Y0WXN7F0g5Hc108QS2n5e6aB47zjZoD7sKj+FAoXCdmdeboXd0utylNmjK5qYKMbHf86pysmUeVaCTL1ffm25AQh/i15zjO5u3eSxQ5nLprdC1c+6E0TR/L0eQbeaiKeTB0e3YpPfEDbQKwOsp4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444644; c=relaxed/simple;
bh=OkmiKIsgi5XBDLuEUxaDQ06HcaY5iOHPXJI+iHHY6fU=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=fJzScIhk9CxRw+AAAqXhTFxkreiUUNjN+pfz9jR/2ZxnUkrf+1P0l1VQSkyubcc4kKgUrqB9DNz1vzH1bUqPEEtrhLo4+0Lpw2iSmtI7vzbrJ+Bv6Jw7itApKqcN2CSx/PLlJooPWL6kUZvlauiH+iVGa95ehj68AiEGXvCQVOg=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=WG67XJgn; arc=none smtp.client-ip=170.10.129.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748444640;
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:
in-reply-to:in-reply-to:references:references;
bh=Fcg1D7pi8/e049vKSQfksEQEilD5PKbpIfwXzkGgo8Q=;
b=WG67XJgnbKyuT/aVVcc8awq33yCiWu0vMkCBCqNOjZIhu570SgxKw0bCQI2uPID2A0+Ul0
Y+uCuvm1WrrTTYghKHhdzL/rF9HyRPPUCh1nASh46eCd5vw32LcEwRz2Zr2ASmSmw+Z9fa
IFBQpK878z0krmRweRh1YuP4nnv6gcI=
Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com
[209.85.160.198]) by relay.mimecast.com with ESMTP with STARTTLS
(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
us-mta-61-cK5NGrZqNTWhi4w52UKEFg-1; Wed, 28 May 2025 11:03:59 -0400
X-MC-Unique: cK5NGrZqNTWhi4w52UKEFg-1
X-Mimecast-MFC-AGG-ID: cK5NGrZqNTWhi4w52UKEFg_1748444638
Received: by mail-qt1-f198.google.com with SMTP id d75a77b69052e-4769273691dso78937071cf.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:03:59 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748444638; x=1749049438;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=Fcg1D7pi8/e049vKSQfksEQEilD5PKbpIfwXzkGgo8Q=;
b=kHQys13T7Jlo60+2c09Ij7NckleeG8XpH5qSoQdO8qBcIp8/jNkSunouxW5nID0Zod
KB7kibhJT0atKdKq7N8/tLRbqSHEWW9aVwtuPoUczLgxwWJxW7rW0MREPd62FNtli09q
Jt5BglTMC13VOTQ168coq1goFGAxqnnHvLQlYasuuJdBlCZofZYAKMOx6UqaO1mthRnb
fILeG+upv9XRxWopBt5arI5UPL7he8nSsnQl/IK1HpUzUZKnMzPQmgrwJmwqPNEZiqLp
XxxYVhoKZBn25bXlCO+qIbEmQz9F4axtf6pgZXOeIdsF67htd2pnmn/wUW8wL8zVc0b+
WqPg==
X-Forwarded-Encrypted: i=1; AJvYcCVUpY+XEotoyme5ISqTJ+gVrS5s3QdSwXRfKY/6hSlTKeloXCMNapART/y0VwomLr5v8Q13BjOIxTergNU=@vger.kernel.org
X-Gm-Message-State: AOJu0YxM2P477FlufL+em/b3ACyUx22BiSzOeYS9uL78hWIH7TgPxTQZ
+JbeyT0HJgWR+f2jy8ZJI7mVZfi+q5+sBAMyOeN0Pc7QCSyob53aPTWHkdS8/cE0ZVQGRRyeiPH
A22WRu4LKUtDoHZCgWF4oyUQMBlJJpGyEvN5i0RFvDThJazu2i7F5YMUf3123RyuLHA==
X-Gm-Gg: ASbGncuTPNzcjvhY2wT0o0GjOOKIZ5VQsXXhgu+ErYpwSA/ekMMPwwxjsNM7JbQ8fxM
NLGnKgnNw9iWg0Udg5pjxS/gAVxIASAymDNPDPZwNqwI+r9JVUIVz49Kq9e7d264Z2CqG4VQSNi
M2atTGj3SuvoMLrehlTCu6LXMkeJppPW293zCte93bnV1XViAdqRW+gIn+tK6YkRSH6guGim2Eq
2rKyQUHHK76LID1xyBB1A0YRUHIh/JF6o6sa3UMEXMewh8LISjQTHRltyhOwzLC+3IyU1cclSxt
F6Y=
X-Received: by 2002:a05:622a:6107:b0:494:b316:3c7e with SMTP id d75a77b69052e-49f46d2a5efmr286510891cf.28.1748444638287;
Wed, 28 May 2025 08:03:58 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IFnUJayuS+UkHO22TovQrelasWBZh3qt4Z2cFlt3nrXlxBdJnptXMVTRnxlIh9YaGB7i53KdA==
X-Received: by 2002:a05:622a:6107:b0:494:b316:3c7e with SMTP id d75a77b69052e-49f46d2a5efmr286510291cf.28.1748444637865;
Wed, 28 May 2025 08:03:57 -0700 (PDT)
Received: from x1.local ([85.131.185.92])
by smtp.gmail.com with ESMTPSA id d75a77b69052e-4a3c80f2b8asm6940071cf.73.2025.05.28.08.03.56
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 08:03:57 -0700 (PDT)
Date: Wed, 28 May 2025 11:03:53 -0400
From: Peter Xu <peterx@xxxxxxxxxx>
To: Oscar Salvador <osalvador@xxxxxxx>
Cc: Gavin Guo <gavinguo@xxxxxxxxxx>, linux-mm@xxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, muchun.song@xxxxxxxxx,
akpm@xxxxxxxxxxxxxxxxxxxx, mike.kravetz@xxxxxxxxxx,
kernel-dev@xxxxxxxxxx, stable@xxxxxxxxxxxxxxx,
Hugh Dickins <hughd@xxxxxxxxxx>, Florent Revest <revest@xxxxxxxxxx>,
Gavin Shan <gshan@xxxxxxxxxx>, David Hildenbrand <david@xxxxxxxxxx>
Subject: Re: [PATCH v3] mm/hugetlb: fix a deadlock with pagecache_folio and
hugetlb_fault_mutex_table
Message-ID: <aDcl2YM5wX-MwzbM@x1.local>
References: <20250528023326.3499204-1-gavinguo@xxxxxxxxxx>
<aDbXEnqnpDnAx4Mw@localhost.localdomain>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
In-Reply-To: <aDbXEnqnpDnAx4Mw@localhost.localdomain>
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 11:27:46AM +0200, Oscar Salvador wrote:
> On Wed, May 28, 2025 at 10:33:26AM +0800, Gavin Guo wrote:
> > There is ABBA dead locking scenario happening between hugetlb_fault()
> > and hugetlb_wp() on the pagecache folio's lock and hugetlb global mutex,
> > which is reproducible with syzkaller [1]. As below stack traces reveal,
> > process-1 tries to take the hugetlb global mutex (A3), but with the
> > pagecache folio's lock hold. Process-2 took the hugetlb global mutex but
> > tries to take the pagecache folio's lock.
> >
> > Process-1 Process-2
> > ========= =========
> > hugetlb_fault
> > mutex_lock (A1)
> > filemap_lock_hugetlb_folio (B1)
> > hugetlb_wp
> > alloc_hugetlb_folio #error
> > mutex_unlock (A2)
> > hugetlb_fault
> > mutex_lock (A4)
> > filemap_lock_hugetlb_folio (B4)
> > unmap_ref_private
> > mutex_lock (A3)
> >
> > Fix it by releasing the pagecache folio's lock at (A2) of process-1 so
> > that pagecache folio's lock is available to process-2 at (B4), to avoid
> > the deadlock. In process-1, a new variable is added to track if the
> > pagecache folio's lock has been released by its child function
> > hugetlb_wp() to avoid double releases on the lock in hugetlb_fault().
> > The similar changes are applied to hugetlb_no_page().
> >
> > Link: https://drive.google.com/file/d/1DVRnIW-vSayU5J1re9Ct_br3jJQU6Vpb/view?usp=drive_link [1]
> > Fixes: 40549ba8f8e0 ("hugetlb: use new vma_lock for pmd sharing synchronization")
> > Cc: <stable@xxxxxxxxxxxxxxx>
> > Cc: Hugh Dickins <hughd@xxxxxxxxxx>
> > Cc: Florent Revest <revest@xxxxxxxxxx>
> > Reviewed-by: Gavin Shan <gshan@xxxxxxxxxx>
> > Signed-off-by: Gavin Guo <gavinguo@xxxxxxxxxx>
> ...
> > diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> > index 6a3cf7935c14..560b9b35262a 100644
> > --- a/mm/hugetlb.c
> > +++ b/mm/hugetlb.c
> > @@ -6137,7 +6137,8 @@ static void unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma,
> > * Keep the pte_same checks anyway to make transition from the mutex easier.
> > */
> > static vm_fault_t hugetlb_wp(struct folio *pagecache_folio,
> > - struct vm_fault *vmf)
> > + struct vm_fault *vmf,
> > + bool *pagecache_folio_locked)
> > {
> > struct vm_area_struct *vma = vmf->vma;
> > struct mm_struct *mm = vma->vm_mm;
> > @@ -6234,6 +6235,18 @@ static vm_fault_t hugetlb_wp(struct folio *pagecache_folio,
> > u32 hash;
> >
> > folio_put(old_folio);
> > + /*
> > + * The pagecache_folio has to be unlocked to avoid
> > + * deadlock and we won't re-lock it in hugetlb_wp(). The
> > + * pagecache_folio could be truncated after being
> > + * unlocked. So its state should not be reliable
> > + * subsequently.
> > + */
> > + if (pagecache_folio) {
> > + folio_unlock(pagecache_folio);
> > + if (pagecache_folio_locked)
> > + *pagecache_folio_locked = false;
> > + }
>
> I am having a problem with this patch as I think it keeps carrying on an
> assumption that it is not true.
>
> I was discussing this matter yesterday with Peter Xu (CCed now), who has also some
> experience in this field.
>
> Exactly against what pagecache_folio's lock protects us when
> pagecache_folio != old_folio?
>
> There are two cases here:
>
> 1) pagecache_folio = old_folio (original page in the pagecache)
> 2) pagecache_folio != old_folio (original page has already been mapped
> privately and CoWed, old_folio contains
> the new folio)
>
> For case 1), we need to hold the lock because we are copying old_folio
> to the new one in hugetlb_wp(). That is clear.
So I'm not 100% sure we need the folio lock even for copy; IIUC a refcount
would be enough?
>
> But for case 2), unless I am missing something, we do not really need the
> pagecache_folio's lock at all, do we? (only old_folio's one)
> The only reason pagecache_folio gets looked up in the pagecache is to check
> whether the current task has mapped and faulted in the file privately, which
> means that a reservation has been consumed (a new folio was allocated).
> That is what the whole dance about "old_folio != pagecache_folio &&
> HPAGE_RESV_OWNER" in hugetlb_wp() is about.
>
> And the original mapping cannot really go away either from under us, as
> remove_inode_hugepages() needs to take the mutex in order to evict it,
> which would be the only reason counters like resv_huge_pages (adjusted in
> remove_inode_hugepages()->hugetlb_unreserve_pages()) would
> interfere with alloc_hugetlb_folio() from hugetlb_wp().
>
> So, again, unless I am missing something there is no need for the
> pagecache_folio lock when pagecache_folio != old_folio, let alone the
> need to hold it throughout hugetlb_wp().
> I think we could just look up the cache, and unlock it right away.
>
> So, the current situation (previous to this patch) is already misleading
> for case 2).
>
> And comments like:
>
> /*
> * The pagecache_folio has to be unlocked to avoid
> * deadlock and we won't re-lock it in hugetlb_wp(). The
> * pagecache_folio could be truncated after being
> * unlocked. So its state should not be reliable
> * subsequently.
> */
>
> Keep carrying on the assumption that we need the lock.
>
> Now, if the above is true, I would much rather see this reworked (I have
> some ideas I discussed with Peter yesterday), than keep it as is.
Yes just to reply in public I also am not aware of why the folio lock is
needed considering hugetlb has the fault mutex. I'm not sure if we should
rely more on the fault mutex, but that doesn't sound like an immediate
concern.
It may depend on whether my above understand was correct.. and only if so,
maybe we could avoid locking the folio completely.
Thanks,
>
> Let me also CC David who tends to have a good overview in this.
>
> --
> Oscar Salvador
> SUSE Labs
>
--
Peter Xu
Return-Path: <linux-kernel+bounces-665682-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D54CB41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:04:42 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id D7B0E3A6447
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:04:21 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C164328B7E0;
Wed, 28 May 2025 15:04:34 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="EaXFJ7k9"
Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013011.outbound.protection.outlook.com [40.107.162.11])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id E37EA278162;
Wed, 28 May 2025 15:04:31 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.11
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444673; cv=fail; b=Y1pYXltEG8F5BMRB6AeWmaX/DiodLrVFs4UcEezxJF/3IxQIXSt61UCsrJUsovJuE/HhKAeD04dXjSgC6j1H2DicQH/m+e3jcoL64ydpD+Z2fJPvygtFjbuqA53USivRQbTFyS4faF6HTdPKSFlzl/s05Q5Aca1UnIjMVmaW0yA=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444673; c=relaxed/simple;
bh=SrmT3xo8XJraYZoGk7Lu87XBeaoknP5KodZ4mQuz1mg=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=U1zdFdm8lzoSXqs176uzUF9WDrwNTbAzD/vBiD2KC2E1g43QaSPfPn4iIKH0PuazqRs+ThKSDoxTkwFbV33i9Ox1qt6IINl7OjAhTKvqspkSUpZrlG5ByAYmCxqtu7bpl7OO/gcIGfJD7RMsNTjfWcQ8/nZ64LNW1rM7MQPtYwM=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=EaXFJ7k9; arc=fail smtp.client-ip=40.107.162.11
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=TKOOjEBXqd3oMDbUMfBUYlJbZglj+B6jJj2VKu1SycWUF0RQk1J9BWl7rJaJ7w4dO81Py0EO2KkyhvxFQlNsoTcG6YNaIfiAV0SjKZGxB62Ki5p5LJQ9401eaK9EOpMEGzspvDHqWEUbH9Qc//d1Oljh7wD0BuH8vNsrYMoIM5mn/+qAUk65f3kR9kwdv5CjgpfxcPfBtSCOpCUiL0EVTZi8ra7id2+1K1rYzlDHlB0yiKq5diLFsBUj8nwG4+ewVYvsRLljzjTcUkgil+I2vXXm8Z0s1Ii0FAp+nRChV1bI05JDFAy+GFyAU8UDpQBF7TXtaEkLPBwYIJbFZ3EyCA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=0Y8NUzB7kJYVXD5jvhFR9T1slhyf8Qq4YgsVsHLkmBM=;
b=IDOZTbLdAQvam13Uwx+n3Y2Vo4W5ZT2HJepLdO554JFhslRs5mwLjJOWeTQEYNyFnCeWo4EjizBqOUcZ9MlLk1+Dsdhfz2RTO8XHDRT+V55udyLzTZEvCJTlSn727nss3wB/VjVn3+VqcdhBlwFLAp1SdV7KjPmEqnROsFFyDotQun/irT+stdmm45PwImo0v+pxnYouQRuZnsnDtr5Xt1LlOeQ7tiOpd/s/8cEcnFZDoRNhlzmNRhZKVI4tEj0/aCkw0keufAj1TIN+IHL1WVshWPMjh5GjBSnt6AmaxvRKE9yJsgX4E+bPDrB6H84mM+XIBcZXTotEATdXJZSmpg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=0Y8NUzB7kJYVXD5jvhFR9T1slhyf8Qq4YgsVsHLkmBM=;
b=EaXFJ7k9uLKqL9iW8nvlJVnS5iR0IuRFC+FGg8l2HGx0SHPdTCGUoqxa8P6gR6+rcHo84EtyTPc7/W7vPreO1E34ClHsOn8JC0LOxnc8A8knyG2Z9Ln3wXtObJ6u1x69ewqNzXdOHfant/rJ5hH3POImcY9duclfDiRKlbXrsFWN4MRno02Ifakt3khuipSLMffKzj+fHy4q2JiaOlKyvpLG9D+6oU61Izmp2mcUFCchG2J2EhwcXfj9mzXU7XhIr7XM+PuFduvgqERFn/X4QTjak5WqZZsTQqZz48K+08vu+xsZNPwKmBbsEfGorsqRNzZjVjcvl2lE0KEN3bQO7w==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by AS4PR04MB9574.eurprd04.prod.outlook.com (2603:10a6:20b:4fc::12) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.22; Wed, 28 May
2025 15:04:28 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
15:04:28 +0000
Date: Wed, 28 May 2025 11:04:23 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: Dario Binacchi <dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx, michael@xxxxxxxxxxxxxxxxxxxx,
linux-amarula@xxxxxxxxxxxxxxxxxxxx,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Fabio Estevam <festevam@xxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>,
Shawn Guo <shawnguo@xxxxxxxxxx>, devicetree@xxxxxxxxxxxxxxx,
imx@xxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
Subject: Re: [PATCH v2 2/4] ARM: dts: imx28: add pwm7 muxing options
Message-ID: <aDcl90Bz9BJnddL5@lizhi-Precision-Tower-5810>
References: <20250528121306.1464830-1-dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
<20250528121306.1464830-3-dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528121306.1464830-3-dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
X-ClientProxiedBy: AS4P191CA0028.EURP191.PROD.OUTLOOK.COM
(2603:10a6:20b:5d9::20) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|AS4PR04MB9574:EE_
X-MS-Office365-Filtering-Correlation-Id: d091b7f2-f6c4-4c6b-d3d8-08dd9df8f176
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|366016|1800799024|52116014|7416014|376014|7053199007|38350700014;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?gJW0vE2XdyINr1oUaPecCqXHJc9XTOnl2mOsmGTT0R23l4rR3mC7HesqrMNR?=
=?us-ascii?Q?JDy/AReDM8mvpJy2zuHa7gzPikazSshyHmvHxCmhOX3m/UGS0NpKeIf+Yb1R?=
=?us-ascii?Q?iqKQoGe76oiv3811GO9QyGu4l1csYoj+/SeHv0DbaJE0aPFyJ/+FaprCtMOI?=
=?us-ascii?Q?SSpeGp7AQAsZmsGfH8PGXbZgmgu4Suf2tXDjWptGBF9ftd8+6qHwf4zfhl9C?=
=?us-ascii?Q?35VA1cyJ/xbe6gRXu+++VKilMq3sy2RzSszmD9PdwmCljfZwrzII9lvpQerN?=
=?us-ascii?Q?QCNjzjYdWq9PofciJCBvVj+EqlL0AV674Yeki5s7Am57+FUBnMM6X4WJidUT?=
=?us-ascii?Q?vFs/ByE3XK5svJeip1y9uavcQ6CGadwGjRw08xGQsUVS+oR+zQCd5gso0k62?=
=?us-ascii?Q?op5tp0FFi2zawgdbqMmkrW141H1l9C4lKSXcXF47RNbt3NzATegSBJco+vjY?=
=?us-ascii?Q?Z2CfaXt2rH9b1Fg3o6yNCCjSyI5wPC8dU/IyIceJXf9NKxUKkP0OQw1rpmF+?=
=?us-ascii?Q?KsqtQJC+Q2/a/vP4ExQeMDdWZpIfBiE+/VZkpiO4RbZ1i1vmLM7jVt7jiPkP?=
=?us-ascii?Q?5sxsbyIV9kqBOu26vTeqTpPiaMkkAvYbK6gtoEbT/A+ZFh2f7t6KSuXlYz8x?=
=?us-ascii?Q?gSCRUP7UK7jtm9gCrEEOLHRMjRFOuQtJYnG9pDRIgsQrUx0iJ1kE8vqy9kIt?=
=?us-ascii?Q?Zesuq1aPHdDmJKE0Sm3iBP0VKi+hUYcINJXzLWGxR3TpRHL2dKABJYhVrZ8B?=
=?us-ascii?Q?P6aBOBUO1Yw8clFBRqjdBSKJWij9LxIxhk+0eJzWu2nVK0KfZfM8Zxpar3sB?=
=?us-ascii?Q?LcArecvao8RmfMLFhkt4ZT+FXA/ofAWrCa51iv/P0Yd02gJNRW1Cpt7czgHx?=
=?us-ascii?Q?iqtsyNA2eWFQ+uR5sO9C54urgeylRhYTzWEg6FPNC1AOa8oIIPLr0TnP9Jjv?=
=?us-ascii?Q?PFB91huwB+az8DA7dG9VdNaEaTprsji/4EHx1UltIu6ICistGCfiGuuTLPzz?=
=?us-ascii?Q?jtTFr7flYAYyNTI+nv+IapiwX0FpG7NsaPq0tD9Ab9I6xyN/7tEsOsC+z2co?=
=?us-ascii?Q?Jd/2L8jOxKlHbSpGeg3sz9Zd6j49MWJjZj8vvRncHxw92ds0agXZw+859000?=
=?us-ascii?Q?2XyBS+qfAT7JyNyxwmyxmAU7od+cd2UUGzgWTCdZ7p37t+cXwrA/hhZEn/UZ?=
=?us-ascii?Q?t5VHSKk6MEyhm77ZOI/YBm9i97MSPcbLvHqER0XxJzm8o03GZ3He2y7OsG5r?=
=?us-ascii?Q?nqJtb+RIKR67RYjuNlg9O6ZKL/DNCLFZU30CWVWcrKc8kKISqrL3fKGQRVzc?=
=?us-ascii?Q?NmyxFEpMhPc6l13HdCIg33jUYbC5fLTLfT6zLk0bcS5QAgOmsXKvFMh3s0iq?=
=?us-ascii?Q?HWOdz3N+IISQHDnPOG2wUTU2Eyt02ud4kH/hPf/Bs18zKVfAjMSfXXxuuxNJ?=
=?us-ascii?Q?z0uKMGEgLe/SdXnaVeUpr8cxUvv0fvvv5ndgzpOuFTZtXUOygfXAWw=3D=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(52116014)(7416014)(376014)(7053199007)(38350700014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?Tu2paHZ1Ye0Gqh5oTBEEbK6jwF29SWTm+EDeDMP1UAghXL+fmbw1xGF76Y6T?=
=?us-ascii?Q?avwqTjvelvhW+3yUC3K0Jyo1kh9FXiTYFaxMOafm/bwoTzcHR/FmjvKlAPqk?=
=?us-ascii?Q?hGVMYKgroI9PjQh1KuL7SwNSETEbzICK/W+ZydoBoaLZJooMqrcGowOL7azr?=
=?us-ascii?Q?XMZamvjyQ1vTUUato2ckg5etq6Awo2micgEgCyySYhVYMeQfMIA1ug2RTTdq?=
=?us-ascii?Q?leT7ABLJ+93HN9efQZwhphjc1BS+hiD0dAAXhFR/fncwDzu9kGpdGzcVmR7u?=
=?us-ascii?Q?NGwTJD3gkllUwdoO0OTEwtKlmEK+xuENYD/NvPFNOUx6PY+xogf3cg3ZnsoA?=
=?us-ascii?Q?N5ar8iytUiTeGof3ZUY5sWppQkS2u+KOiWmo91IDB5tDj9SlNCFos7zeboQz?=
=?us-ascii?Q?bON0utjPPacJeqoCzQyl6Q8zlrtpK9ewTe4BFRCYUA/kuevrj3+yi9b/J7Bq?=
=?us-ascii?Q?5CQ4svFhGpkMalgAij6/9/wu4CeNLrBmE0SS78FzPQaUk+1E1hB15vryX/2x?=
=?us-ascii?Q?lNuj+rEfbzfrDewmF3yo3yAyzxQl1bedpc4fyPIT1T5Sl9z8X9qfuQIZSNSP?=
=?us-ascii?Q?KTdONjEq3owf9VRXEaY04WUpY1HqV/PgaIbAP25tcclAMKwD1jspzxKyVY+/?=
=?us-ascii?Q?x5ca8nvrEUBV6MJiWizzXZ9h92v6sfTXISupTF+C/LvFxqUV6P4qAUjlICN/?=
=?us-ascii?Q?eHl37BOo1NLINF8JxvfDQG6H5rLCJ/Mk1tzOFrSGl4KVQjCOa4vEeUWRUCId?=
=?us-ascii?Q?2UhX2kV20W86oIacvvQgzO19KA5C7gjCOgo5dCeeXbSlkK1sIen5LrmQV3rC?=
=?us-ascii?Q?QnJlK1H1MPLQY5RQIUfkVD2EKQtPW+auEZ+4CKFPeWeXzvNE1u87LnQXxKKU?=
=?us-ascii?Q?Dc6J8OM6y0yz/weuqjsTECDnvPawNrddjjbMaoT98w/PJGz7U3yCBNE5t0Qj?=
=?us-ascii?Q?swKjF6Q/9HOYiuQhEjWcLNYqhz/VTFo/xNcrcgbOXj5j1Y1VJY2kC3IG5SQ6?=
=?us-ascii?Q?L5n9Cf3EM5tKGAFxUUWU2XgSN1RYwXA84u4h/+LMHtfxdfv1YjiSCr9viQNK?=
=?us-ascii?Q?SGRt5tqNlQKBMnosF/pUW7kYwKTAeQWWc4aUINgfo0ykzw+bmRnJMTkfHUZ7?=
=?us-ascii?Q?SYgmmgUaBJPUBdsrSWXpyTKqU5WUQNe4jWbIh8vrL1Z7yTAiVE2IzQ2Vt8yQ?=
=?us-ascii?Q?9Dh6K7XkZDHiQk+ZN35T/339KYN2x4NbfLN48nDQr+rKkO+XMgYiPQD5v1E8?=
=?us-ascii?Q?TGU1SdpsItuEqvu5pHStkOV2n6WaERvTqdCUcUWDYFQWtrw9abiKNFgHbaqN?=
=?us-ascii?Q?PqSWv8ERKwe8z3epKOPtG8hGNbgpJrz8VBBEqNATT6zMFtfWvc5Dv+CX61KD?=
=?us-ascii?Q?Msx1z2KrE8szPCEg3U+cx0zFyj9oUKhCBFr2/CffndD2qEeilK7YT5nxnNc0?=
=?us-ascii?Q?4PZeMRoHbF3cImd3f8Izx2lrrltAnOsVWX6tUw0SF7Xrq+W26B5UmEZH7XUh?=
=?us-ascii?Q?/RHDKBvLmPmoKwlM9FpjZjFSFmSIftFqrsg/MKQ0MLEwDFR07ceJjYZpmuij?=
=?us-ascii?Q?Mg+hzpaGXLy4nvZrmFeVJCrruZuPsy9U42gRBpf9?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: d091b7f2-f6c4-4c6b-d3d8-08dd9df8f176
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:04:28.7044
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: EPN2HdfkaDukWlsbkFoaMgpBA/biQ/sCcy6aaPcByNfb9YFHT0XFAFYV+/IUb6CK/drb2jb93d+8g2Xu7hKumg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR04MB9574
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 02:11:39PM +0200, Dario Binacchi wrote:
Need commit message here, you can copy subject to here.
Frank
> Signed-off-by: Dario Binacchi <dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
> ---
>
> (no changes since v1)
>
> arch/arm/boot/dts/nxp/mxs/imx28.dtsi | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/arch/arm/boot/dts/nxp/mxs/imx28.dtsi b/arch/arm/boot/dts/nxp/mxs/imx28.dtsi
> index bbea8b77386f..ece46d0e7c7f 100644
> --- a/arch/arm/boot/dts/nxp/mxs/imx28.dtsi
> +++ b/arch/arm/boot/dts/nxp/mxs/imx28.dtsi
> @@ -755,6 +755,16 @@ MX28_PAD_PWM4__PWM_4
> fsl,pull-up = <MXS_PULL_DISABLE>;
> };
>
> + pwm7_pins_a: pwm7@0 {
> + reg = <0>;
> + fsl,pinmux-ids = <
> + MX28_PAD_SAIF1_SDATA0__PWM_7
> + >;
> + fsl,drive-strength = <MXS_DRIVE_4mA>;
> + fsl,voltage = <MXS_VOLTAGE_HIGH>;
> + fsl,pull-up = <MXS_PULL_DISABLE>;
> + };
> +
> lcdif_24bit_pins_a: lcdif-24bit@0 {
> reg = <0>;
> fsl,pinmux-ids = <
> --
> 2.43.0
>
Return-Path: <linux-kernel+bounces-665683-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id BB89B41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:06:25 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id E53A04E49FD
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:06:26 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 56D4728B7EF;
Wed, 28 May 2025 15:06:17 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="cg34fN8w"
Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013065.outbound.protection.outlook.com [40.107.159.65])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9992E28853F;
Wed, 28 May 2025 15:06:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.65
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444776; cv=fail; b=K2+00cSXE00oQPxuA6hv+P0DE37d6iljCEMdWE76ghNwJlwcNy6N5nONq60zjWXJz5MBDy0EA0G6FiQH2UoZ3ZTR6gpwmgAASA30X33g5BoNGOeC8MfejnyN3M7328ANqFTev8kH6J0vaVMSAFf+/PWZ0Ubqrsg7KDfgemxJhms=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444776; c=relaxed/simple;
bh=jEOk6/2ijgzKtUB5qZ5umH2MnIaVg+nE/NGijXmR8Q0=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=FmyypLtfdHX+Y9ezLNbEP9xf68OEOGvEcdpPKVilxoZBuV3/npmYACYxjaEqxNoJYx3P6bY2PmHOci0QC5vSwrB7kAT5w9+tbD8SNuC/8sKmmJ10CIQ3rnLyL4Gdyvjfpe5v8Hxelff6Knqv/9sORnJnv8HZwloSlSI0vlWJB9A=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=cg34fN8w; arc=fail smtp.client-ip=40.107.159.65
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=V/f3+xfDZMn3PftOtCIjY1NQ8C0PiWyfM68LN5+qa7IvC1u7XR42I727Ef9dfCUqQT4mXNRYHvHjmVa4/iErLoZ3XtB8Gi4rUqGutsCLloOQzi33eeHcukd/GnPVtXtAsx2R+/XI4zCj1XQLRsZqeJ8ebUFmu1LW/HOgOZtyB3LVF5C3bk5g/VVjYIgFTipeBoZ32oAcRDpRuAV/SOvU3LSZJOiK90T5Npcat5tOPYdNzhClGOFBhRWDww4mg6PmYbD9F329+pYN/u42xcGgrJZrd//8zJ1eqsE9wGE/3Gu6MhFIRQISgM6ZFfIkA1YL3DrEhHC9kNpAXPCUBteR3g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=MEpENQkMBiFa5w7hpF6Y7z/IWATZHxbWcsL1+Nw+Pp8=;
b=J0usnPiP+7mDcNIcpUa+KtQxkpyki7/r75WRTYYvm+Sp6feAZohVbhnavAzVEj9q/wXd0ZfxUPFLKo2V6nVbU9yY8s8Wq7hyfJDMXHAVWCRfYxW3L55YbZnvqURLOQBK43WGHQrxi1f2qUHz4Ven1x/epz+P7wVbL7uwLApaT4PVtAWIxo/BZ9fgP+AXCYCYmobEgi6VsRsnYFKssGyj/jUeje5X2ke9pAIfd8P8e/mRDrB6qcNPbX/uYyMEJUbryQJry57EOM5OW467uFyjgc+ZE462C8izkG8mK5E9IXudSi2SUhKnXwGg+KJxVetFV4setioEYcOA/UGzaRGusQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=MEpENQkMBiFa5w7hpF6Y7z/IWATZHxbWcsL1+Nw+Pp8=;
b=cg34fN8wZbUm9eHh6C9DKY7zqT1WhKV0UqQjZo7OrErxKFllasw+eIV9w4k3qpVIjlSBr11l9LtQP9ZZKo23dx8CESOdRZQcbTCQcjN1ZW/iBhv8G+fMTywGKc50n3jGvAl2M3F5SsorbxRu3GP+FpTbpxG7ttGQEnn5bLkkPnacRbIdlk8oxnDDfViBrinDZ6JmuvxCAOFvWC8LhmmczOxv4rq92Wn+ljtD2zjpEmR9PNr1xvG+bfRYcfl9bmEqMDBbL3fEUF9Cg1wdlyvcaHgCH+XtK7Slsi0z0dlQ6vvYyb2wZE8MR2H5NneHAb8Jx/X0Bjpn7GAL+6ztkZVXXA==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by AS4PR04MB9574.eurprd04.prod.outlook.com (2603:10a6:20b:4fc::12) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.22; Wed, 28 May
2025 15:06:10 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
15:06:10 +0000
Date: Wed, 28 May 2025 11:06:01 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: Dario Binacchi <dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx, michael@xxxxxxxxxxxxxxxxxxxx,
linux-amarula@xxxxxxxxxxxxxxxxxxxx,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Fabio Estevam <festevam@xxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>,
Shawn Guo <shawnguo@xxxxxxxxxx>, devicetree@xxxxxxxxxxxxxxx,
imx@xxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
Subject: Re: [PATCH v2 4/4] ARM: dts: mxs: support i.MX28 Amarula rmm board
Message-ID: <aDcmWddO3+q+4qI1@lizhi-Precision-Tower-5810>
References: <20250528121306.1464830-1-dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
<20250528121306.1464830-5-dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528121306.1464830-5-dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
X-ClientProxiedBy: SJ0PR05CA0101.namprd05.prod.outlook.com
(2603:10b6:a03:334::16) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|AS4PR04MB9574:EE_
X-MS-Office365-Filtering-Correlation-Id: 1c33239b-2260-4622-48ab-08dd9df92df7
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|366016|1800799024|52116014|7416014|376014|7053199007|38350700014;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?tV4YMiOXCoEXgNasUlOfa/AMP13Td/U4Und9E/0TiTKm1j+ehnVX8P7skRRB?=
=?us-ascii?Q?kLTYWZMWALnOtoA5f+Ec/uJtUcpjJyxCGkDYLrDEva38dXsYfjAhJdkeVNZb?=
=?us-ascii?Q?J9x2M7iEF+pmKzEsM3d0uRhRFm1tF+0doCHJf2vwxFwAp4HFqbjcvEjfy1eR?=
=?us-ascii?Q?4lks2rXZaws4GCdzjXKwady8sz9Cymh3JpIYr593lFyDQ8Z0MRHKZW9HRSRT?=
=?us-ascii?Q?HWiW1HK0Do70+pujLv5tNoHJE/Ldc7AGaPKRJi/zv6eHeGlVhwFRTiOrTMKr?=
=?us-ascii?Q?caM/ibLOVWSRjTwkbU/Mn3eaIpL1Acp54f95fBJ6hOi0TZCTuO5G4/GSOQix?=
=?us-ascii?Q?Lt40lXWH++vDALP2jvZTLNuyuv12xLrenvRkvq+Ydbo8BP/wPD67czf/9k52?=
=?us-ascii?Q?NBBCHRtWwSkoDoxRzOtQjoXLbIKRz0LjZCNb7QNNm5jWbvySgrHubhTAimpr?=
=?us-ascii?Q?M7Jd4ss+Ffpk+i220biX8Y2wtGzdXtrN9AkryZ7w66U1mfQb5OO0tOtDOpkr?=
=?us-ascii?Q?pDxi5x9TyIapa8k89OxUrvGhF2Hy/ep3QYlbYzzGpiaufLzAWKnVrg0TeDdI?=
=?us-ascii?Q?lMHoTd5sekTBWK+30tPyT3wIv1M7ptIzzWFuKMkg1pDPn50vADOThGpuQnPK?=
=?us-ascii?Q?vUbRwzdY+eiRibHXWqAQ1krt6/iIpk2zW0fT18/k08bxrC5I06ZqQ19PTp4Z?=
=?us-ascii?Q?NGr+FI4yap0TqymKDiId3mRNDHPaIftxhdqzqQniCBOHsgzgjfzvFZsauFBh?=
=?us-ascii?Q?++QjQFXJAe3UCtJhz7vijmzMrkLxwcpigGDsQyb6rcpGEtVuoYTzgOHiCHsC?=
=?us-ascii?Q?qeLR5IbpwJiFVF3qx3wzYUGANThpXuIGL1yHtZo7hhsIgK54Q8bYmUFBX2Rc?=
=?us-ascii?Q?oWUz5yaJw2YcPQ86yLRy6xOjx4boz3hxZiRhMyO1wOvHJcN63xlHrP/7EgCb?=
=?us-ascii?Q?rf/RKZY46tWakmQEuqopeuGBHiXTnRtogjyBTGOw/1zaeSY+uh5dXXYTWskR?=
=?us-ascii?Q?5nK8a/Nw25AQUEFNrI1fHN2QNsEa2Z26jinE9gT2Gnd2136r7TA6ny9rO8iZ?=
=?us-ascii?Q?mCY0oJk6LCc5lt6dUqOq4fj1SB1vBu6MddPxQXsp2CkVNn9CaLMG7cNtqW1B?=
=?us-ascii?Q?VzxtAwDRjNSXrkuIKfrHOrgcCpJFTetL0pdHMdgsKv6f3GCabVFmb0o0T+rR?=
=?us-ascii?Q?h8Fi0UF+J02Jjg+K2HYw6JXp8Y6r5i37ZQtbKRquI0XJ/pLaBLTYMpyPRvwc?=
=?us-ascii?Q?6aID1efmTeAauRTGt+76xkvYn3OojunUSMXaJoqLdMmfUBHqP5zseK93Y7eQ?=
=?us-ascii?Q?HSpULprRT8Ls/WTCjivgDKun2xNDwrbUKFigvQ+ViRrOhIfRSybEInF+IaPE?=
=?us-ascii?Q?IfyTXZhOKEOg1+wk99eamYflvLOjddkgSgjShN2iGNGMI04Uny2W1E4+8tIh?=
=?us-ascii?Q?Dpzr3MTyz0kvq94pwOhhEJHDGL9ZkpA7XikEhbadVoVdbN1oO3Y1g5NLRtj7?=
=?us-ascii?Q?KGUBSfgEd62bvHY=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(52116014)(7416014)(376014)(7053199007)(38350700014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?SKYUWg8rozTYCN7sqW4cFw0cz25CRXyY++B8iayODnD9MvliMNZVHjzQH6bF?=
=?us-ascii?Q?gppvxjCo5H1UklL8WSM7vYtqu3lOmd7+gtDmc3eHHyWfsfmVkC3iDPiC2YFQ?=
=?us-ascii?Q?rPjUNrvTZHe8vJ0gnxqbs5HcDQqbvuwcRJWhE9Px3chMgLNDub4A5OwmBW/u?=
=?us-ascii?Q?zuUBvP3qszJl4Bsb06GqRyYrYSNbvtfSzBAQkBY4d+vDkuaLB9ZuZn+mfIF+?=
=?us-ascii?Q?HTNKEY5QlAIzwoioFY029i/bzXZwEe4bi6zqOu2bBA4RDuRVjSIx+dMbDmIh?=
=?us-ascii?Q?dNeZAHVkDLJYtBdScoxGooEsSFAJgND4tEoUHVf8lQy5cwAwo/Rn/QhTgBe/?=
=?us-ascii?Q?Bw11FM0WQg1hhCJto8uX6cwbI39hnYJjncGubzyZcEgPJ+VKMSQJCzPR8cfx?=
=?us-ascii?Q?u08D62h8OQKCVNMxz0hoECHJMf89KZYzVzLY7Ph+pdVnwwzn7LXxacbkRIwZ?=
=?us-ascii?Q?sH1y7v8saYPsNUmTCCV7Ngv8B59agj6DqnuBequTTyx0SVEsSJ4zoY1qpO2Y?=
=?us-ascii?Q?iF606Kcik9FMfQOxwn7zXpKkqobJg9RKZlYAA5BALxNl/uhuZ7xlRzDgo2Sr?=
=?us-ascii?Q?zMxW4mlFOrqdmDik2AXtPTXXaGe0FsVT+q57VnpVDu+rpAG5yCOzDcO2WBeJ?=
=?us-ascii?Q?eJSDvrw6bSvk+cEy43X5WYkwjlPN7bxrxC1tLJR06zcsLavy2irB5bZAa31s?=
=?us-ascii?Q?FYvp+4khnMlEovMqfixkehD/322TOqL1sLpd1wD1ItP7TuSpgz/BqpeIb62q?=
=?us-ascii?Q?tUsbsWCW4B/bET025BCdLn6ue/a0WjbXA7MPhcx1+QO/n6kYQKkbvIjM39tl?=
=?us-ascii?Q?wF8qWW2II0afXYX5djbV6DOquRVmePqPbIFWxg+mui6Utz3vWhfWq7nh8fwa?=
=?us-ascii?Q?IrJ3H4jkMPqEutkY9c3BPmAkgIUYPNTCihyE+05yDLCxCRwX3J1AhajFap/v?=
=?us-ascii?Q?ZKsDYMoCwurmpthOK5u/aHZ4iZzP7QNm9JaaMEqIHfMyNBke6GO8QC80AVzm?=
=?us-ascii?Q?38ZgRKAHbKdFFK9tAmWTIHFZejOT5tLGjLp+pTF2nyX/bKNXbh1L5r4R9Z3N?=
=?us-ascii?Q?B2B14ZV7AJPuCyG2tzvzzLbJPWNCdvWAZ2i+wiEXbRUlp2p/rmDW2jUKOT15?=
=?us-ascii?Q?p+8+7wnPFq6fM99lAR5hw1nRr9QkCD08V7NodSd5bRKoXBn5ORsJqNDxVS1M?=
=?us-ascii?Q?B6Mjg28JM2eGPUEy+14a9+fs2I4lTPDdAGGeOdrMzGOW4/I+qhGeRCkId7EA?=
=?us-ascii?Q?EsPsXwa7PsfC+B4XzRX2CWfy9fFgH0Nj3/AfaW0viBhHdsuM7EnaGoXxCvq2?=
=?us-ascii?Q?avnUlV+jurl+8queHrCvzco6ATHgDEyiqJhj1RmsSXoiWixsxJWXIJRwyQe7?=
=?us-ascii?Q?M/+spZ83G1AuVEuLepOf2Lfo9L3lf6sUUBWQE13WqQi9M9QKHiZauMI3eu2V?=
=?us-ascii?Q?iRikldqUoxNZ86YrLE9EOkZkyKmJfLywlk4Sjc6kLPaE+RhrjCWFE/y2wBsX?=
=?us-ascii?Q?gbOGnRS2RiJSfgTaOAtBFfAPTBNFo9tWJ7oyAl278A09hC73/28nMV75ZQH4?=
=?us-ascii?Q?s6hXtD3wDMVeWcdDZm6IDw1kqBF156FkpCFNVp39?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 1c33239b-2260-4622-48ab-08dd9df92df7
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:06:10.2940
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: nekdkpOFoBvkQSfZ5I2op8T1HGsG2HBqR3s9NO27L0s4iSRL4M2cp4CTzRpC6KgO8vVXiPBF7vXKiT/7higKVg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR04MB9574
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 02:11:41PM +0200, Dario Binacchi wrote:
> The board includes the following resources:
> - 256 Mbytes NAND Flash
> - 128 Mbytes DRAM DDR2
> - CAN
> - USB 2.0 high-speed/full-speed
> - Ethernet MAC
>
> Signed-off-by: Dario Binacchi <dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
>
> ---
>
> Changes in v2:
> - In imx28-amarula-rmm.dts:
> - Replace '-' with '@' for the pinctrl sub-nodes.
> - Replace edt,edt-ft5x06 with edt,edt-ft5306.
> - Drop LCD reset hog pin.
> - Add correct #address-cells and #size-cells to gpmi node.
> - Replace edt-ft5x06@38 with touchscreen@38.
> - Drop from commit messages all references to LCD display.
> - Add patch [1/4] "dt-bindings: mfd: convert mxs-lradc bindings to
> json-schema".
>
> arch/arm/boot/dts/nxp/mxs/Makefile | 1 +
> .../boot/dts/nxp/mxs/imx28-amarula-rmm.dts | 303 ++++++++++++++++++
please run https://github.com/lznuaa/dt-format to keep nice node/property
order for new dts file.
Frank
> 2 files changed, 304 insertions(+)
> create mode 100644 arch/arm/boot/dts/nxp/mxs/imx28-amarula-rmm.dts
>
> diff --git a/arch/arm/boot/dts/nxp/mxs/Makefile b/arch/arm/boot/dts/nxp/mxs/Makefile
> index 96dd31ea19ba..d72ba702b6fa 100644
> --- a/arch/arm/boot/dts/nxp/mxs/Makefile
> +++ b/arch/arm/boot/dts/nxp/mxs/Makefile
> @@ -5,6 +5,7 @@ dtb-$(CONFIG_ARCH_MXS) += \
> imx23-sansa.dtb \
> imx23-stmp378x_devb.dtb \
> imx23-xfi3.dtb \
> + imx28-amarula-rmm.dtb \
> imx28-apf28.dtb \
> imx28-apf28dev.dtb \
> imx28-apx4devkit.dtb \
> diff --git a/arch/arm/boot/dts/nxp/mxs/imx28-amarula-rmm.dts b/arch/arm/boot/dts/nxp/mxs/imx28-amarula-rmm.dts
> new file mode 100644
> index 000000000000..5daa9e22715d
> --- /dev/null
> +++ b/arch/arm/boot/dts/nxp/mxs/imx28-amarula-rmm.dts
> @@ -0,0 +1,303 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright (C) 2025 Amarula Solutions, Dario Binacchi <dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
> + */
> +
> +/dts-v1/;
> +#include "imx28.dtsi"
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/interrupt-controller/irq.h>
> +
> +/ {
> + model = "Amarula i.MX28 rmm";
> + compatible = "amarula,imx28-rmm", "fsl,imx28";
> +
> + memory@40000000 {
> + device_type = "memory";
> + reg = <0x40000000 0x08000000>;
> + };
> +
> + reg_5v: regulator-5v {
> + compatible = "regulator-fixed";
> + regulator-name = "5v";
> + regulator-min-microvolt = <5000000>;
> + regulator-max-microvolt = <5000000>;
> + regulator-always-on;
> + };
> +
> + reg_3v3: regulator-3v3 {
> + compatible = "regulator-fixed";
> + regulator-name = "3v3";
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3300000>;
> + regulator-always-on;
> + };
> +
> + reg_1v8: regulator-1v8 {
> + compatible = "regulator-fixed";
> + regulator-name = "1v8";
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> + };
> +
> + reg_fec_3v3: regulator-fec-3v3 {
> + compatible = "regulator-fixed";
> + pinctrl-names = "default";
> + pinctrl-0 = <&fec_3v3_enable_pin>;
> + regulator-name = "fec-3v3";
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3300000>;
> + gpios = <&gpio3 27 GPIO_ACTIVE_HIGH>;
> + enable-active-high;
> + startup-delay-us = <300000>;
> + vin-supply = <®_5v>;
> + };
> +
> + reg_usb0_vbus: regulator-usb0-vbus {
> + compatible = "regulator-fixed";
> + pinctrl-names = "default";
> + pinctrl-0 = <&usb0_vbus_enable_pin>;
> + regulator-name = "usb0_vbus";
> + regulator-min-microvolt = <5000000>;
> + regulator-max-microvolt = <5000000>;
> + gpio = <&gpio2 5 GPIO_ACTIVE_HIGH>;
> + enable-active-high;
> + regulator-always-on;
> + };
> +
> + reg_usb1_vbus: regulator-usb1-vbus {
> + compatible = "regulator-fixed";
> + pinctrl-names = "default";
> + pinctrl-0 = <&usb1_vbus_enable_pin>;
> + regulator-name = "usb1_vbus";
> + regulator-min-microvolt = <5000000>;
> + regulator-max-microvolt = <5000000>;
> + gpio = <&gpio2 6 GPIO_ACTIVE_HIGH>;
> + enable-active-high;
> + regulator-always-on;
> + };
> +
> + backlight {
> + compatible = "pwm-backlight";
> + pwms = <&pwm 4 5000000 0>;
> + brightness-levels = <0 255>;
> + num-interpolated-steps = <255>;
> + default-brightness-level = <255>;
> + power-supply = <®_5v>;
> + };
> +
> + beeper {
> + compatible = "pwm-beeper";
> + pwms = <&pwm 7 100000 0>;
> + };
> +
> + leds {
> + compatible = "gpio-leds";
> + pinctrl-names = "default";
> + pinctrl-0 = <&leds_pins>;
> +
> + led-0 {
> + label = "status";
> + gpios = <&gpio2 7 GPIO_ACTIVE_HIGH>;
> + default-state = "off";
> + };
> +
> + led-1 {
> + label = "x22_5";
> + gpios = <&gpio3 16 GPIO_ACTIVE_HIGH>;
> + default-state = "off";
> + };
> +
> + led-2 {
> + label = "x22_4";
> + gpios = <&gpio3 17 GPIO_ACTIVE_HIGH>;
> + default-state = "off";
> + };
> + };
> +};
> +
> +&auart0 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&auart0_2pins_a>;
> + status = "okay";
> +};
> +
> +&auart1 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&auart1_pins_a>;
> + status = "okay";
> +};
> +
> +&can0 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&can0_pins_a>;
> + xceiver-supply = <®_3v3>;
> + status = "okay";
> +};
> +
> +&duart {
> + pinctrl-names = "default";
> + pinctrl-0 = <&duart_pins_b>;
> + status = "okay";
> +};
> +
> +&duart_pins_b {
> + fsl,voltage = <MXS_VOLTAGE_LOW>;
> +};
> +
> +&gpmi {
> + #address-cells = <1>;
> + #size-cells = <0>;
> + pinctrl-names = "default";
> + pinctrl-0 = <&gpmi_pins_a &gpmi_status_cfg>;
> + status = "okay";
> +};
> +
> +&i2c0 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&i2c0_pins_a>;
> + status = "okay";
> +
> + touchscreen: touchscreen@38 {
> + compatible = "edt,edt-ft5306";
> + reg = <0x38>;
> + pinctrl-names = "default";
> + pinctrl-0 = <&edt_ft5x06_pins &edt_ft5x06_wake_pin>;
> + interrupt-parent = <&gpio0>;
> + interrupts = <19 IRQ_TYPE_EDGE_RISING>;
> + reset-gpios = <&gpio0 21 GPIO_ACTIVE_LOW>;
> + wake-gpios = <&gpio0 18 GPIO_ACTIVE_HIGH>;
> + };
> +};
> +
> +&lradc {
> + status = "okay";
> +};
> +
> +&mac0 {
> + phy-mode = "rmii";
> + pinctrl-names = "default";
> + pinctrl-0 = <&mac0_pins_a>;
> + phy-supply = <®_fec_3v3>;
> + phy-handle = <ðphy>;
> + status = "okay";
> +
> + mdio {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + ethphy: ethernet-phy@0 {
> + compatible = "ethernet-phy-ieee802.3-c22";
> + reg = <0>;
> + max-speed = <100>;
> + reset-gpios = <&gpio3 28 GPIO_ACTIVE_LOW>;
> + reset-assert-us = <4000>;
> + reset-deassert-us = <4000>;
> + };
> + };
> +};
> +
> +&pinctrl {
> + pinctrl-names = "default";
> + pinctrl-0 = <&hog_pins_a>;
> +
> + hog_pins_a: hog@0 {
> + reg = <0>;
> + fsl,pinmux-ids = <
> + MX28_PAD_SSP2_SS1__GPIO_2_20 /* External power */
> + >;
> + fsl,drive-strength = <MXS_DRIVE_4mA>;
> + fsl,voltage = <MXS_VOLTAGE_HIGH>;
> + fsl,pull-up = <MXS_PULL_DISABLE>;
> + };
> +
> + edt_ft5x06_pins: edt-ft5x06@0 {
> + reg = <0>;
> + fsl,pinmux-ids = <
> + MX28_PAD_GPMI_RDY1__GPIO_0_21 /* Reset */
> + MX28_PAD_GPMI_CE3N__GPIO_0_19 /* Interrupt */
> + >;
> + fsl,drive-strength = <MXS_DRIVE_4mA>;
> + fsl,voltage = <MXS_VOLTAGE_HIGH>;
> + fsl,pull-up = <MXS_PULL_ENABLE>;
> + };
> +
> + edt_ft5x06_wake_pin: edt-ft5x06-wake@0 {
> + reg = <0>;
> + fsl,pinmux-ids = <MX28_PAD_GPMI_CE2N__GPIO_0_18>;
> + fsl,drive-strength = <MXS_DRIVE_16mA>;
> + fsl,voltage = <MXS_VOLTAGE_HIGH>;
> + fsl,pull-up = <MXS_PULL_DISABLE>;
> + };
> +
> + fec_3v3_enable_pin: fec-3v3-enable@0 {
> + reg = <0>;
> + fsl,pinmux-ids = <MX28_PAD_SPDIF__GPIO_3_27>;
> + fsl,drive-strength = <MXS_DRIVE_4mA>;
> + fsl,voltage = <MXS_VOLTAGE_HIGH>;
> + fsl,pull-up = <MXS_PULL_DISABLE>;
> + };
> +
> + leds_pins: leds@0 {
> + reg = <0>;
> + fsl,pinmux-ids = <
> + MX28_PAD_SSP0_DATA7__GPIO_2_7
> + MX28_PAD_PWM0__GPIO_3_16
> + MX28_PAD_PWM1__GPIO_3_17
> + >;
> + fsl,drive-strength = <MXS_DRIVE_4mA>;
> + fsl,voltage = <MXS_VOLTAGE_HIGH>;
> + fsl,pull-up = <MXS_PULL_DISABLE>;
> + };
> +
> + usb0_vbus_enable_pin: usb0-vbus-enable@0 {
> + reg = <0>;
> + fsl,pinmux-ids = <MX28_PAD_SSP0_DATA5__GPIO_2_5>;
> + fsl,drive-strength = <MXS_DRIVE_4mA>;
> + fsl,voltage = <MXS_VOLTAGE_HIGH>;
> + fsl,pull-up = <MXS_PULL_DISABLE>;
> + };
> +
> + usb1_vbus_enable_pin: usb1-vbus-enable@0 {
> + reg = <0>;
> + fsl,pinmux-ids = <MX28_PAD_SSP0_DATA6__GPIO_2_6>;
> + fsl,drive-strength = <MXS_DRIVE_4mA>;
> + fsl,voltage = <MXS_VOLTAGE_HIGH>;
> + fsl,pull-up = <MXS_PULL_DISABLE>;
> + };
> +};
> +
> +&pwm {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pwm4_pins_a &pwm7_pins_a>;
> + status = "okay";
> +};
> +
> +&ssp0 {
> + compatible = "fsl,imx28-mmc";
> + pinctrl-names = "default";
> + pinctrl-0 = <&mmc0_4bit_pins_a &mmc0_sck_cfg>;
> + status = "okay";
> + bus-width = <4>;
> + broken-cd;
> +};
> +
> +&usb0 {
> + status = "okay";
> + vbus-supply = <®_usb0_vbus>;
> + dr_mode = "host";
> +};
> +
> +&usb1 {
> + status = "okay";
> + vbus-supply = <®_usb1_vbus>;
> + dr_mode = "host";
> +};
> +
> +&usbphy0 {
> + status = "okay";
> +};
> +
> +&usbphy1 {
> + status = "okay";
> +};
> --
> 2.43.0
>
Return-Path: <linux-kernel+bounces-665684-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 75D2641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:06:44 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 945A03A803A
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:06:19 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 32A8F28B7F8;
Wed, 28 May 2025 15:06:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="pf8E2xyy"
Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7602928853F;
Wed, 28 May 2025 15:06:29 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444791; cv=none; b=QFp9ZjfD9Sa5Pbz81X6Lb5ckQpvrRxzuCdJlBSQPz9HWamMOGpNMGgcOjyWd/DNmkR6+7J5PvaNRhkTEQpnJDusFVoz/OXSj4wk+EJ8Vke9q/Km+FJwFf3WvCgEUKBhYNUMv6yP4Kbf9wD9905WLRHVrrh1gTqR+H2R6yJNIaVI=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444791; c=relaxed/simple;
bh=ODpsIO7RVzW6JdyJy6lN6uKemRVcL4gaELLz0FE4nJg=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=T2SjzynFi2mw72YRCBdnSyfBF56K2l8b8EYtcR+g/dq8ov7zESaT3ZA5IGqZUltKdoW6DmoLSfWw36O3QDC6y+EyJiLrM53QI2SRln2MEq3A8/1C+2nB225nxZd85LnfT/MATHVaJMqMsiWy9cSb3CUupBgpvP61Z/p7Wvb7lM8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=pf8E2xyy; arc=none smtp.client-ip=148.163.158.5
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com
Received: from pps.filterd (m0353725.ppops.net [127.0.0.1])
by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SE9Pwb017540;
Wed, 28 May 2025 15:06:03 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc
:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to; s=pp1; bh=TYJDbql5sldxAJx2938C31EJDleJ/2
lSl1d6fN/5hkw=; b=pf8E2xyyWPtFBnim+PaCPxlybuAjSL5c1vdZ7FWWw7mLf1
7OrVdclUcQtjPSYDrko9vqOE/Qzyk3fuW4IFtqZTaUHepsrI/57k3X/EZPbl/Z2Y
H+mcAdPCguWsvxxPuWCLAus4ZbV4f/b6K0ACT9JWBfkRAFDjT3VqitfM7NCoC5vX
vo0Up0udYyPI/qGhUEQJVghhx2B+3SsAPwUxWr6B9WkP2YDjP7O6QxKEvPXA4nv8
YltWrk4BHMz8X7EsTszsDjkrvxC63C2mqPq5RLA2mJgGg6ouGVcrsFe2atKq5fEI
5XN/9APCpuwUqXCzlriuEgph5bxQbmWDbCTWGSGA==
Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92])
by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 46x40ggbpa-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 15:06:03 +0000 (GMT)
Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1])
by ppma22.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 54SF2wwd016178;
Wed, 28 May 2025 15:06:02 GMT
Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228])
by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 46uru0r508-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 15:06:02 +0000
Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101])
by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 54SF60LX19988938
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Wed, 28 May 2025 15:06:00 GMT
Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1])
by IMSVA (Postfix) with ESMTP id 4C2E42004F;
Wed, 28 May 2025 15:06:00 +0000 (GMT)
Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1])
by IMSVA (Postfix) with ESMTP id 3ACFB20040;
Wed, 28 May 2025 15:05:50 +0000 (GMT)
Received: from li-dc0c254c-257c-11b2-a85c-98b6c1322444.ibm.com (unknown [9.39.18.84])
by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTPS;
Wed, 28 May 2025 15:05:47 +0000 (GMT)
Date: Wed, 28 May 2025 20:35:41 +0530
From: Ojaswin Mujoo <ojaswin@xxxxxxxxxxxxx>
To: libaokun@xxxxxxxxxxxxxxx
Cc: linux-ext4@xxxxxxxxxxxxxxx, tytso@xxxxxxx, adilger.kernel@xxxxxxxxx,
jack@xxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, yi.zhang@xxxxxxxxxx,
yangerkun@xxxxxxxxxx, libaokun1@xxxxxxxxxx
Subject: Re: [PATCH 1/4] ext4: add ext4_try_lock_group() to skip busy groups
Message-ID: <aDcmRdOrWatcBJWc@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <20250523085821.1329392-1-libaokun@xxxxxxxxxxxxxxx>
<20250523085821.1329392-2-libaokun@xxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250523085821.1329392-2-libaokun@xxxxxxxxxxxxxxx>
X-TM-AS-GCONF: 00
X-Authority-Analysis: v=2.4 cv=avmyCTZV c=1 sm=1 tr=0 ts=6837265b cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=kj9zAlcOel0A:10 a=dt9VzEwgFbYA:10 a=AiHppB-aAAAA:8 a=i0EeH86SAAAA:8 a=ujIZDTJbDLGYv8oHIywA:9 a=CjuIK1q_8ugA:10
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEzMCBTYWx0ZWRfX3cHOzmOZL3Kr t8Jkok2JVH95F2nXHT6azSs/+qIWbgZ6LYzSC1ippmCfSv4XuAhK6Gp4q4evGL5D9arGS+xkD+S fONR7AnNwQ4+AMl+teaKpoY8WrWXr06OTWdS3VGaD3IX03OA+yyCH7Hlk+1kiRZKWIe1iJoSs1K
NifSnZ6GvIc7O3ydW2CLRVUCLeC28+n1VU9D5WC5Uyq8rpam/SanzijCkom7JS5cFRhP/5kd2l6 tmoGJbOaKInbPP6QgwQqjaTP/RlAdwegos+a+wcw7mC7ORNDRDsO9Dr2tyfRHh0O6hD2dmwMX53 o3NNBlY2ab9xDvhr+FRy5/fI1wqpQlGyTSZTWh30+lIpcbVdydnIvIndy7xSaG9hKJYzcqiaG7h
yuzJBU3+4pmoDHIManzBFfOshoBB9uriO1x/HkGSSxilN29FS+l9or75/Qq+vWcy/SkqIwfx
X-Proofpoint-GUID: QEXMatXWVlw4NIvsaetoyfMYcivQrApA
X-Proofpoint-ORIG-GUID: QEXMatXWVlw4NIvsaetoyfMYcivQrApA
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_07,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501
bulkscore=0 suspectscore=0 spamscore=0 clxscore=1015 impostorscore=0
phishscore=0 adultscore=0 lowpriorityscore=0 mlxlogscore=999 mlxscore=0
malwarescore=0 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280130
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Fri, May 23, 2025 at 04:58:18PM +0800, libaokun@xxxxxxxxxxxxxxx wrote:
> From: Baokun Li <libaokun1@xxxxxxxxxx>
>
> When ext4 allocates blocks, we used to just go through the block groups
> one by one to find a good one. But when there are tons of block groups
> (like hundreds of thousands or even millions) and not many have free space
> (meaning they're mostly full), it takes a really long time to check them
> all, and performance gets bad. So, we added the "mb_optimize_scan" mount
> option (which is on by default now). It keeps track of some group lists,
> so when we need a free block, we can just grab a likely group from the
> right list. This saves time and makes block allocation much faster.
>
> But when multiple processes or containers are doing similar things, like
> constantly allocating 8k blocks, they all try to use the same block group
> in the same list. Even just two processes doing this can cut the IOPS in
> half. For example, one container might do 300,000 IOPS, but if you run two
> at the same time, the total is only 150,000.
>
> Since we can already look at block groups in a non-linear way, the first
> and last groups in the same list are basically the same for finding a block
> right now. Therefore, add an ext4_try_lock_group() helper function to skip
> the current group when it is locked by another process, thereby avoiding
> contention with other processes. This helps ext4 make better use of having
> multiple block groups.
>
> Also, to make sure we don't skip all the groups that have free space
> when allocating blocks, we won't try to skip busy groups anymore when
> ac_criteria is CR_ANY_FREE.
>
> Performance test data follows:
>
> CPU: HUAWEI Kunpeng 920
> Memory: 480GB
> Disk: 480GB SSD SATA 3.2
> Test: Running will-it-scale/fallocate2 on 64 CPU-bound containers.
> Observation: Average fallocate operations per container per second.
>
> base patched
> mb_optimize_scan=0 3588 6755 (+88.2%)
> mb_optimize_scan=1 3588 4302 (+19.8%)
The patch looks mostly good. Same observations about mb_optimize_scan=1
improving less. We can continue this discussion in my reply to the cover
letter. That being said, I have some minor suggestions:
>
> Signed-off-by: Baokun Li <libaokun1@xxxxxxxxxx>
> ---
> fs/ext4/ext4.h | 23 ++++++++++++++---------
> fs/ext4/mballoc.c | 14 +++++++++++---
> 2 files changed, 25 insertions(+), 12 deletions(-)
>
> diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
> index 5a20e9cd7184..9c665a620a46 100644
> --- a/fs/ext4/ext4.h
> +++ b/fs/ext4/ext4.h
> @@ -3494,23 +3494,28 @@ static inline int ext4_fs_is_busy(struct ext4_sb_info *sbi)
> return (atomic_read(&sbi->s_lock_busy) > EXT4_CONTENTION_THRESHOLD);
> }
>
> +static inline bool ext4_try_lock_group(struct super_block *sb, ext4_group_t group)
> +{
> + if (!spin_trylock(ext4_group_lock_ptr(sb, group)))
> + return false;
> + /*
> + * We're able to grab the lock right away, so drop the lock
> + * contention counter.
> + */
> + atomic_add_unless(&EXT4_SB(sb)->s_lock_busy, -1, 0);
> + return true;
> +}
> +
> static inline void ext4_lock_group(struct super_block *sb, ext4_group_t group)
> {
> - spinlock_t *lock = ext4_group_lock_ptr(sb, group);
> - if (spin_trylock(lock))
> - /*
> - * We're able to grab the lock right away, so drop the
> - * lock contention counter.
> - */
> - atomic_add_unless(&EXT4_SB(sb)->s_lock_busy, -1, 0);
> - else {
> + if (!ext4_try_lock_group(sb, group)) {
> /*
> * The lock is busy, so bump the contention counter,
> * and then wait on the spin lock.
> */
> atomic_add_unless(&EXT4_SB(sb)->s_lock_busy, 1,
> EXT4_MAX_CONTENTION);
> - spin_lock(lock);
> + spin_lock(ext4_group_lock_ptr(sb, group));
> }
> }
>
> diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
> index 1e98c5be4e0a..5c13d9f8a1cc 100644
> --- a/fs/ext4/mballoc.c
> +++ b/fs/ext4/mballoc.c
> @@ -896,7 +896,8 @@ static void ext4_mb_choose_next_group_p2_aligned(struct ext4_allocation_context
> bb_largest_free_order_node) {
> if (sbi->s_mb_stats)
> atomic64_inc(&sbi->s_bal_cX_groups_considered[CR_POWER2_ALIGNED]);
> - if (likely(ext4_mb_good_group(ac, iter->bb_group, CR_POWER2_ALIGNED))) {
> + if (likely(ext4_mb_good_group(ac, iter->bb_group, CR_POWER2_ALIGNED)) &&
> + !spin_is_locked(ext4_group_lock_ptr(ac->ac_sb, iter->bb_group))) {
Maybe reversing the && order to be (!spin_is_locked() && ext4_mb_good_group()) would be better?
> *group = iter->bb_group;
> ac->ac_flags |= EXT4_MB_CR_POWER2_ALIGNED_OPTIMIZED;
> read_unlock(&sbi->s_mb_largest_free_orders_locks[i]);
> @@ -932,7 +933,8 @@ ext4_mb_find_good_group_avg_frag_lists(struct ext4_allocation_context *ac, int o
> list_for_each_entry(iter, frag_list, bb_avg_fragment_size_node) {
> if (sbi->s_mb_stats)
> atomic64_inc(&sbi->s_bal_cX_groups_considered[cr]);
> - if (likely(ext4_mb_good_group(ac, iter->bb_group, cr))) {
> + if (likely(ext4_mb_good_group(ac, iter->bb_group, cr)) &&
> + !spin_is_locked(ext4_group_lock_ptr(ac->ac_sb, iter->bb_group))) {
same as above
> grp = iter;
> break;
> }
> @@ -2911,7 +2913,13 @@ ext4_mb_regular_allocator(struct ext4_allocation_context *ac)
> if (err)
> goto out;
>
> - ext4_lock_group(sb, group);
> + /* skip busy group */
> + if (cr >= CR_ANY_FREE) {
> + ext4_lock_group(sb, group);
> + } else if (!ext4_try_lock_group(sb, group)) {
> + ext4_mb_unload_buddy(&e4b);
> + continue;
> + }
This in itself looks good. I am just thinking that now that we are
deciding to skip locked groups, in the code above this one, shall we do
something like:
if (spin_is_locked(group_lock))
continue;
err = ext4_mb_load_buddy(sb, group, &e4b);
if (err)
goto out;
/* skip busy group */
if (cr >= CR_ANY_FREE) {
ext4_lock_group(sb, group);
} else if (!ext4_try_lock_group(sb, group)) {
ext4_mb_unload_buddy(&e4b);
continue;
}
With this we can even avoid loading the folio as well.
Regards,
ojaswin
>
> /*
> * We need to check again after locking the
> --
> 2.46.1
>
Return-Path: <linux-kernel+bounces-665685-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 48FC841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:07:16 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id D19874E4C13
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:07:16 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id AAED828B7EE;
Wed, 28 May 2025 15:07:05 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="nERBPYYP"
Received: from relay1-d.mail.gandi.net (relay1-d.mail.gandi.net [217.70.183.193])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 99BAC48CFC;
Wed, 28 May 2025 15:07:01 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.193
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444824; cv=none; b=C06ZX9bZ2VTAcVUafKNhu2iWxP3RpIwZNJSZ6MYgJZfkS1CxdmsQCIhluokJ0kbm+wY96HuwK46K54/XIVbGiXIOETEeIGmM6/nh5nbvP02ZqntAFERO3DfYG8LqWQqTQB3vYYKolcY8f9zR9537RzmfbUcTqZUrhNPnqlVYrkc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444824; c=relaxed/simple;
bh=k1im566Qpef5VpTDVUdvexe6dorgAc3SJ9JHyLgkwNk=;
h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=LIC8lzHDji/mnNjQNsZMeZEUZnAPM/duIbDRrO3dcU96sBxdgwVxaz3GGpS9gxF9NoIrnupiIH/wWIAr8mukI/HOAKyNm687YwMoUdb3FwJk+779cZ4bhbCDhtShVBf71JGoLrqQanrL01xrEHFSJo9nyz7jQQ3wj9D+NWcxZPw=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=nERBPYYP; arc=none smtp.client-ip=217.70.183.193
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com
Received: by mail.gandi.net (Postfix) with ESMTPSA id 9D96643A4B;
Wed, 28 May 2025 15:06:52 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1;
t=1748444813;
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:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=WcxtT7KNbRU3NvVN+yFjoYSOMBXLQMS77hXQg71Uzng=;
b=nERBPYYP31J3HoRYRjXos7yvQoSa4/kx+6DMb8xFvhRzgcqEXuK+AjThQhtRwOO5kPsxOJ
hhmEGkS2f1ngQARYeTEgTEzHe34rKOu3Q+Q7F5LxAPnt/VqGQUbmFQk+gJH6MQqbsE7mpq
wL45HJaJoeTPLSOF9BcEsnD3Ane7LYL8aCjmBoOQqs/g4TEurYJaQfyjsr83X0jdtIulve
ELH8c0uIbt+4xehZzkuhh7C6qHkg03OiJSK3CpMCPgtGui3Tq10cB0U21g9PncXPssoq3a
cPlrsSN0/ipf0NBKK4A6FVfAVIi1bBteIX7Jbl2af1EFZAvqopaaV0q+jxqnJw==
Date: Wed, 28 May 2025 17:06:50 +0200
From: Maxime Chevallier <maxime.chevallier@xxxxxxxxxxx>
To: Matthew Gerlach <matthew.gerlach@xxxxxxxxxx>
Cc: andrew+netdev@xxxxxxx, davem@xxxxxxxxxxxxx, edumazet@xxxxxxxxxx,
kuba@xxxxxxxxxx, pabeni@xxxxxxxxxx, robh@xxxxxxxxxx, krzk+dt@xxxxxxxxxx,
conor+dt@xxxxxxxxxx, richardcochran@xxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, Mun Yew Tham
<mun.yew.tham@xxxxxxxxxx>
Subject: Re: [PATCH v2] dt-bindings: net: Convert socfpga-dwmac bindings to
yaml
Message-ID: <20250528170650.2357ea07@xxxxxxxxxxx>
In-Reply-To: <20250528144650.48343-1-matthew.gerlach@xxxxxxxxxx>
References: <20250528144650.48343-1-matthew.gerlach@xxxxxxxxxx>
Organization: Bootlin
X-Mailer: Claws Mail 4.3.1 (GTK 3.24.43; x86_64-redhat-linux-gnu)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
X-GND-State: clean
X-GND-Score: -100
X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtddtgddvfeehkeculddtuddrgeefvddrtddtmdcutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfitefpfffkpdcuggftfghnshhusghstghrihgsvgenuceurghilhhouhhtmecufedtudenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhepfffhvfevuffkjghfohfogggtgfesthejredtredtvdenucfhrhhomhepofgrgihimhgvucevhhgvvhgrlhhlihgvrhcuoehmrgigihhmvgdrtghhvghvrghllhhivghrsegsohhothhlihhnrdgtohhmqeenucggtffrrghtthgvrhhnpedtkeelgeeigeehheetudehtefgiefhleevveekfeelgfekfeefudfgfeeilefhueenucffohhmrghinhepuggvvhhitggvthhrvggvrdhorhhgpdihrghmlhdrshgvlhgvtghtnecukfhppedvrgdtudemtggsudelmeekugegheemgeeltddtmeeiheeikeemvdelsgdumeelvghfheemvgektgejnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepvdgrtddumegtsgduleemkegugeehmeegledttdemieehieekmedvlegsudemlegvfhehmegvkegtjedphhgvlhhopehfvgguohhrrgdrhhhomhgvpdhmrghilhhfrhhomhepmhgrgihimhgvrdgthhgvvhgrlhhlihgvrhessghoohhtlhhinhdrtghomhdpnhgspghrtghpthhtohepudegpdhrtghpthhtohepmhgrthhthhgvfidrghgvrhhlrggthhesrghlthgvrhgrrdgtohhmpdhrt
ghpthhtoheprghnughrvgifodhnvghtuggvvheslhhunhhnrdgthhdprhgtphhtthhopegurghvvghmsegurghvvghmlhhofhhtrdhnvghtpdhrtghpthhtohepvgguuhhmrgiivghtsehgohhoghhlvgdrtghomhdprhgtphhtthhopehkuhgsrgeskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepphgrsggvnhhisehrvgguhhgrthdrtghomhdprhgtphhtthhopehrohgshheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepkhhriihkodgutheskhgvrhhnvghlrdhorhhg
X-GND-Sasl: maxime.chevallier@xxxxxxxxxxx
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hello Matthew,
On Wed, 28 May 2025 07:46:50 -0700
Matthew Gerlach <matthew.gerlach@xxxxxxxxxx> wrote:
> From: Mun Yew Tham <mun.yew.tham@xxxxxxxxxx>
>
> Convert the bindings for socfpga-dwmac to yaml.
Oh nice ! Thanks for doing that ! I had some very distant plans to do
that at some point, but it was way down my priority list :( I'll try to
help the best I can !
> Signed-off-by: Mun Yew Tham <mun.yew.tham@xxxxxxxxxx>
> Signed-off-by: Matthew Gerlach <matthew.gerlach@xxxxxxxxxx>
> ---
> v2:
> - Add compatible to required.
> - Add descriptions for clocks.
> - Add clock-names.
> - Clean up items: in altr,sysmgr-syscon.
> - Change "additionalProperties: true" to "unevaluatedProperties: false".
> - Add properties needed for "unevaluatedProperties: false".
> - Fix indentation in examples.
> - Drop gmac0: label in examples.
> - Exclude support for Arria10 that is not validating.
> ---
> .../bindings/net/socfpga,dwmac.yaml | 148 ++++++++++++++++++
> .../devicetree/bindings/net/socfpga-dwmac.txt | 57 -------
> 2 files changed, 148 insertions(+), 57 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/net/socfpga,dwmac.yaml
> delete mode 100644 Documentation/devicetree/bindings/net/socfpga-dwmac.txt
>
> diff --git a/Documentation/devicetree/bindings/net/socfpga,dwmac.yaml b/Documentation/devicetree/bindings/net/socfpga,dwmac.yaml
> new file mode 100644
> index 000000000000..a02175838fba
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/net/socfpga,dwmac.yaml
> @@ -0,0 +1,148 @@
> +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/net/socfpga,dwmac.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Altera SOCFPGA SoC DWMAC controller
> +
> +maintainers:
> + - Matthew Gerlach <matthew.gerlach@xxxxxxxxxx>
> +
> +description:
> + This binding describes the Altera SOCFPGA SoC implementation of the
> + Synopsys DWMAC for the Cyclone5, Arria5, Stratix10, and Agilex7 families
> + of chips.
> + # TODO: Determine how to handle the Arria10 reset-name, stmmaceth-ocp, that
> + # does not validate against net/snps,dwmac.yaml.
> +
> +select:
> + properties:
> + compatible:
> + oneOf:
> + - items:
> + - const: altr,socfpga-stmmac
> + - const: snps,dwmac-3.70a
> + - const: snps,dwmac
> + - items:
> + - const: altr,socfpga-stmmac-a10-s10
> + - const: snps,dwmac-3.74a
> + - const: snps,dwmac
> +
> + required:
> + - compatible
> + - altr,sysmgr-syscon
> +
> +properties:
> + clocks:
> + minItems: 1
> + items:
> + - description: GMAC main clock
> + - description:
> + PTP reference clock. This clock is used for programming the
> + Timestamp Addend Register. If not passed then the system
> + clock will be used and this is fine on some platforms.
> +
> + clock-names:
> + minItems: 1
> + maxItems: 2
> + contains:
> + enum:
> + - stmmaceth
> + - ptp_ref
> +
> + iommus:
> + maxItems: 1
> +
> + phy-mode:
> + enum:
> + - rgmii
You're missing rgmii-id, rgmii-rxid and rgmii-txid
> + - sgmii
SGMII is only supported when we have the optional
altr,gmii-to-sgmii-converter phandle, but I am pretty bad at writing
binding, I don't really know how to express this kind of constraint :/
1000base-x is also supported if the gmii-to-sgmii adapter supports it
as well, by having a TSE PCS (Lynx) included.
> + - gmii
rmii and mii are also supported, it would make sense to add it
here.
Maxime
Return-Path: <linux-kernel+bounces-665686-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 9B7A341E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:08:02 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id A93663A8A8E
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:07:41 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 4559128B50E;
Wed, 28 May 2025 15:07:55 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="EdoO4htN"
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2373E28B4FC
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:07:52 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444874; cv=none; b=pW+xvUjIEGWDHnseTSqQEXpcV7w45PDMPBW7BXn9HWxrr01dtH9R9pzIq4RzygnYsYyYqzQCmNS4QOxP83hcH6WwARiSMaO4I6SVrPe4IG091a4PYimdgMW/ZGCM180iwMc4J49EkxLxOZREwQfgjD8ML4p6wdTknlQJ73tMigo=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444874; c=relaxed/simple;
bh=rwxIBSU4wpJK4Rss2lAtcFVb6oUwF93lFV0DEUIIzEo=;
h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=jPlHtPd63i1wcn96gDRBxvIv6kEycS6Qf978d5pI3Vt00l1ljNfA7dxrMaM1Fj4lOH4lTBg26hhy98updDnZD0BJqqaEDVOmcSvymU6pq1btsrOKdB11je6sWLlgcD9B7wbvc2yc+o+sxrR9vXaxG6TEGD//5MXeZy+bur7DPgE=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=EdoO4htN; arc=none smtp.client-ip=205.220.168.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com
Received: from pps.filterd (m0279862.ppops.net [127.0.0.1])
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SBU1fK024736
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:07:52 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=
cc:content-transfer-encoding:date:from:message-id:mime-version
:subject:to; s=qcppdkim1; bh=TqvCyLn/KtAm6zKua0D07MhryvAsfRaF1xH
groEq9u4=; b=EdoO4htNLpdp60f+0yDBQajbK9FnSRPeZxZpRBG+GZXCzu3ThcN
3IFgCE6S1UZl4PNfIh2o/tGnEKlNBhmJt2s/nMWhXLCi5xXLPpuvnicrTpda5wRD
f2DXh/IFA0YFhuJyOC/mqzBeuMGv3yEAahEFXi8Bwfw9MOW49bmMywQo3BZMG0/V
3iE+s/9UD6Pqk5SaetiBoIbItDyE4rPqLL33ob+uSMHseEN1TJ2Lt5W4Q3i9Wh7U
6gmpP/DO3Kv0+VVceA2iqV+SK2g7MeD5CuA+7P7qCdK3EZ/L5/Yxs8724P+TBk+U
udLKEmrLTEK6jUhhLsdzrQe/CkFMxx5/hpQ==
Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.197])
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46u6vjtp49-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT)
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:07:52 +0000 (GMT)
Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-7377139d8b1so3776511b3a.0
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:07:51 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748444871; x=1749049671;
h=content-transfer-encoding:mime-version:message-id:date:subject:cc
:to:from:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=TqvCyLn/KtAm6zKua0D07MhryvAsfRaF1xHgroEq9u4=;
b=gzOSqxjjHWxDtLqm38j7Fm43Ocs9KuVZIA9EXS/cK8Pk/VqJ7X/5McJVvzWpDlytGK
0XWNN6Wa+guZk2ehKg67g8gqWGHxTIUbQ+X9M+9Sk5WVZKiTw+xpMuJa0j0z4EXJYbTQ
FlFycnCsOI3zAGBvBnQSDOKPOtudSCPLC28WTkZxesD5y7Y/6xGpU/YBwZwP9YFNGtm2
NZm52F9yajwc+JAVg1DY/bUVjRbaMpnwlNnQVOsRJQry29XGYP+fXp5naFrA9U8s76Py
84iI72xl+mOTPIp29oru2dfY1F7xMTi7O/2WGw/p+APv8XIXKt31jDnksQkQPj5xCzeb
ZKEw==
X-Forwarded-Encrypted: i=1; AJvYcCWbV3rdJEgKEjYnUxVn1snhbCp6AeD5NFwiQsOU84x7GCLbrgpPdpaD5HMCrdIp2Z1sIqddZrXxo+KjuA8=@vger.kernel.org
X-Gm-Message-State: AOJu0YxbvsHzkqpxCdnTw2E07AT5IOcMqx+kWsEwt/aFjzj6U6voZ52G
6D9N985qpvlaTlhFpcPCCVncnEJu+1wWfo2B2AfytVxW6w4yPlJ90UPV2JV6gzWR7F4J19vAY9C
Nctf+elUOc2cG41sc1jUtMSE1c6ubkfUF2q6kb7PNJEsxcOnOCJARbLYzq+CN/Hrc00s=
X-Gm-Gg: ASbGncvYkSL7xZY4GpgbKIUYGXuLp4xoH0RjFvSZJTcN4hw24O4Q+fslZYMM5rZeVKn
KZqy2xI/RUztn62T24ICiTjot7bqwFc2OdmeBf7MAZKw4pnhucmqFIytfgaswAXAraa90GQNW3g
z+xVoAMznBBkJPS3zQHhF6V+lojkgIawQJ8EyfOuBPiwgRNwdgYJbgFZHVWHGNnzBxFPttnqxCj
MJu0EK+HwZVmgF/qPx4gHI9c/lJfoyxFZx+TNbVX+tCvO2fNl8NK5PUrrE6vqG5kRdOh4npUcBt
srFIBJffo4oa3TnakiraFUQ+eoljq6YQ9eY/wjHgRc6JgazG
X-Received: by 2002:a05:6a00:3d15:b0:742:b3a6:db10 with SMTP id d2e1a72fcca58-745fe083538mr29011112b3a.18.1748444871083;
Wed, 28 May 2025 08:07:51 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IFd3GjaWRf2ZUrRS+emGlm7BSCdg5uZ2Cw2RIKxyTINEtl0qgcmEHjC5BF9Immjzf3MZcpg4w==
X-Received: by 2002:a05:6a00:3d15:b0:742:b3a6:db10 with SMTP id d2e1a72fcca58-745fe083538mr29011057b3a.18.1748444870643;
Wed, 28 May 2025 08:07:50 -0700 (PDT)
Received: from hu-mohs-hyd.qualcomm.com ([202.46.23.25])
by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-746e340fbb8sm1373211b3a.106.2025.05.28.08.07.47
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 08:07:50 -0700 (PDT)
From: Mohammad Rafi Shaik <mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
To: Srinivas Kandagatla <srini@xxxxxxxxxx>,
Liam Girdwood <lgirdwood@xxxxxxxxx>, Mark Brown <broonie@xxxxxxxxxx>,
Jaroslav Kysela <perex@xxxxxxxx>, Takashi Iwai <tiwai@xxxxxxxx>
Cc: linux-sound@xxxxxxxxxxxxxxx, linux-arm-msm@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, kernel@xxxxxxxxxxxxxxxx
Subject: [PATCH v1 0/1] ASoC: qcom: sc8280xp: Assign backend ops for multi codec dai links
Date: Wed, 28 May 2025 20:37:15 +0530
Message-Id: <20250528150716.2011707-1-mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
X-Mailer: git-send-email 2.34.1
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Authority-Analysis: v=2.4 cv=UOXdHDfy c=1 sm=1 tr=0 ts=683726c8 cx=c_pps
a=rEQLjTOiSrHUhVqRoksmgQ==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17
a=dt9VzEwgFbYA:10 a=TweMsTatiWGVkviqWuEA:9 a=2VI0MkxyNR6bbpdq8BZq:22
X-Proofpoint-ORIG-GUID: pRnFtVSHQ0zpW74or2JOL4FZp4ng0iWe
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEzMCBTYWx0ZWRfX4BQ/IyuKNNjN
OEOPcQNXgND+LFBVsC41qe0mYA1VA14FkvWNuRRHgL/O7aEQtZ62K4N6S1rZkBhDArtqy/lIJWL
9vpnhHnRTZ8RmeeNzHh/der5lqlRNPpg5/1O5JsBFd2zciSODlu1XKvncIBsg3odOUSVdpai3Xt
kxQouaQSoRZiN0diLsIidWPzrINvY+KZPGxeCrwThF16m2KKGNtM+Cxi9cdtiSZej2vwjlhbeas
Ww1cXqlBFQGR3chPs3ETotNHssEc0495Zg9TU2QaqA4ZGtv3P+D4pU+GbXf0HtYG7VSzYrNp27K
OTnG3h7v9aymg3/FBKRML8+09xJNL+Zi5d4g7CLyXmn10aOE5A/SMAAoh40qUadXGkcOMukd9VM
EN5LkBIslH16e1NmaeEhe3Doqek/HUmbMU58GrLbd9YLfQBcMqBytmyMyR09C7aN1NRshqU2
X-Proofpoint-GUID: pRnFtVSHQ0zpW74or2JOL4FZp4ng0iWe
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_07,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
clxscore=1015 phishscore=0 mlxscore=0 adultscore=0 priorityscore=1501
mlxlogscore=735 bulkscore=0 malwarescore=0 impostorscore=0 spamscore=0
suspectscore=0 lowpriorityscore=0 classifier=spam authscore=0 authtc=n/a
authcc= route=outbound adjust=0 reason=mlx scancount=1
engine=8.19.0-2505160000 definitions=main-2505280130
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
In the existing implementation, the link->ops assignment is
conditioned on link->no_pcm being set, which generally happens
when a platform entry is present. However, in scenarios where
there is no platform but multiple codecs in the DAI link,
backend operations (link->ops) must still be assigned to ensure
correct codec settings.
Mohammad Rafi Shaik (1):
ASoC: qcom: sc8280xp: Assign backend ops for multi codec dai links
sound/soc/qcom/sc8280xp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
base-commit: 176e917e010cb7dcc605f11d2bc33f304292482b
--
2.34.1
Return-Path: <linux-kernel+bounces-665687-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id A671141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:08:18 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id D04063A4A36
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:07:55 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 0E03128C02E;
Wed, 28 May 2025 15:07:59 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="N7heSTcY"
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id D61BB28BA8E
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:07:55 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444878; cv=none; b=NO8ON6iXGeaEIlEgfrB8uG4kWoHHaniPVGTpnRr0kvKTj78qRReK3vUXQIa3QZahOelnszhje2RaacWeq1bNdBmknvfqib1vcr+549TrvbQCEA6+XYI4OW0s5NT0mviZETigp28V3Sh7GPOUVGCOWUPYFgjSdWPfkYJEfOVIQXA=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444878; c=relaxed/simple;
bh=eP5T/3qpa46WCtYicGSqpDmblYqTBRA3wTFS43IZLJ8=;
h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:
MIME-Version; b=EY5Ud0e8i0DQephsY8kCjFbh81sAp9HjsdmHtAEObUHbNQBcNn6/RdXiziMvDvKOm5xxGeRFjISCZDgBFhxxZmUhkvjGwi0IxvlfIbhEuWKLjKmg7bDFbPi4ah64n3ZuhClEk9mrPPbnOGU8CafJp15RPx8Kh+26bPh2aLnfgRM=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=N7heSTcY; arc=none smtp.client-ip=205.220.168.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com
Received: from pps.filterd (m0279866.ppops.net [127.0.0.1])
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S6CJ4K002357
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:07:55 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=
cc:content-transfer-encoding:date:from:in-reply-to:message-id
:mime-version:references:subject:to; s=qcppdkim1; bh=Gb3xYR0twSf
q1c//vnklZfUitvGdMHO5hjz2yEsPShM=; b=N7heSTcYMgQVcfh1o2dxo8/pNnv
hivx2q0ojUQrcqKDhtFmqBZh9Os63/Aayc2nv6TVv25dquQN9E3WXOqz/3als0Kh
uHCrdisqNeI8UOLiXRqpa+Lrs/DZIaImgjNn/0Z6l43oZ/5Lw/wnzTJefTgRtWRZ
hLnrt/GPBfvPPIHvCA1FXVrjyAomXy7prBlyfCikxbZwwKoU274Q93C/o8Kfzqx4
PXyFk9TIJvcYil3B+H0CLHqZ01jK+mX6U3Rj106OEmenEu8oKWHwwAsO4+b2I0l9
MHuo1rEspv7/WtUqflvbGdjWf1dwikkSZe6ahIQVSharCdwofgh+CUz2tHQ==
Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199])
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46wavkvdrx-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT)
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:07:54 +0000 (GMT)
Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-73bfc657aefso3172551b3a.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:07:54 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748444874; x=1749049674;
h=content-transfer-encoding:mime-version:references:in-reply-to
:message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=Gb3xYR0twSfq1c//vnklZfUitvGdMHO5hjz2yEsPShM=;
b=KxRbdvgLL3VdpNI9YUXK5CUZT7BvNjqX5OuPfjTQqCIszSy2sH1ll47f9uTmiv8djW
YncFVtl5eLd/xAKL4k3sdcykoEwBAF1qgx2p787UfX0b9kcQNDMicIAwMoGbboUwu4pf
VFhydYr4U94M4c+wNkcmDn5pCQs1x8bX/oYUddOIvh+I1py8OL2hci65w3sgxvG9+Zii
ZWtAuA1UCcsXLOH6w+JAimIFNx4SuDCXjnnHWadxWtLixHPTXXFZJpbHpM48RH+utoEj
MM8JCbPM+dE8OCgKYPFXVtNoIeOuc75rJ1RgvPMJJcSLsqhnwE7umDvGiwNdr2pGQJGo
KHiQ==
X-Forwarded-Encrypted: i=1; AJvYcCX8yfyRo3Ung3K55sm0BZFSQqMowUhPxw+M0ISqd9UwUK7AnI6avSMdDfpKuWzHT18SYy0KOeVsGLyoTGA=@vger.kernel.org
X-Gm-Message-State: AOJu0YxG7K+Y1ylfdtAQ93LTQrVticorl8ELrvwpQvkeqoxaGfZrEKr9
kLsY3GARYcqvqiuGrrjz8B2cCsCE7kpBFfHzZAenzWva4jKC6AZAB4jKMAq5/PQpfGYIUN/uiJQ
dzAXpAK49pZBTHHH58Fk7JLCkxvbthyOFgiGuBdQ2uXmK1Ob9rzARQ3OzjOlq7sJmoWE=
X-Gm-Gg: ASbGnctoa9d8DOyzOWdHJbWXbyCSffGo2q83eoDKCnqwJYYakBoMTuonQC+vrpbRwv0
r641zqJQL/e6CHWwn0UlrlRBA5z9wZxIzSq/mg/TbuXsSbXW7hFQnqsK5W+PPS4Mov6uL3hcGew
eQPIC39Bd2CZiZM1knFjuhcCrNGXnZPSsFbUUG0CWWzDwAPJ4gWOFsCARFwS2mp4ZucjktK5f0b
y9677f8N0hy/snk3bRxCOXt3qo3EwoTz0yWBt9HiNSE2XryGzy7Y8q+ctuzC2ehJOUbJOMGH/5T
vhenx/IppURWnlg9ArviXGO2IIiYW8afBRGUYV6kRggqmE+p
X-Received: by 2002:a05:6a00:2287:b0:73f:f623:55f8 with SMTP id d2e1a72fcca58-745fde779e7mr23275015b3a.5.1748444874045;
Wed, 28 May 2025 08:07:54 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IF2DPZNzIWOgIK1UTiCkv93RY2irWaXKYNcC4GZJqV7teGlU+c/3gBg+IH85a/2jZay3rIAgA==
X-Received: by 2002:a05:6a00:2287:b0:73f:f623:55f8 with SMTP id d2e1a72fcca58-745fde779e7mr23274987b3a.5.1748444873687;
Wed, 28 May 2025 08:07:53 -0700 (PDT)
Received: from hu-mohs-hyd.qualcomm.com ([202.46.23.25])
by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-746e340fbb8sm1373211b3a.106.2025.05.28.08.07.51
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 08:07:53 -0700 (PDT)
From: Mohammad Rafi Shaik <mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
To: Srinivas Kandagatla <srini@xxxxxxxxxx>,
Liam Girdwood <lgirdwood@xxxxxxxxx>, Mark Brown <broonie@xxxxxxxxxx>,
Jaroslav Kysela <perex@xxxxxxxx>, Takashi Iwai <tiwai@xxxxxxxx>
Cc: linux-sound@xxxxxxxxxxxxxxx, linux-arm-msm@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, kernel@xxxxxxxxxxxxxxxx
Subject: [PATCH v1 1/1] ASoC: qcom: sc8280xp: Assign backend ops for multi codec dai links
Date: Wed, 28 May 2025 20:37:16 +0530
Message-Id: <20250528150716.2011707-2-mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20250528150716.2011707-1-mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
References: <20250528150716.2011707-1-mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Proofpoint-GUID: DaQOLsWLycfThAMxlxMPONTwgeAE-AZx
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEzMCBTYWx0ZWRfXxePpurJWFn1S
vdng9YLd9dyizOy3qoe8x17Gzqbd9E+5kXgrvjRoKvR1xWj8YMBEci45+tc/ktHMj6gLI/4vwMf
WQOy/IrSPs0dKUirPiY15qNjkD8iUuK5GThZez7oVBvGrZwtqPG9TciNPkJDCmLUzDch7z8Sh6W
oMPrB+jIaj1b2A5H9g9FF25LBMmETHD8rIKExqxPTD4fimkSmv+QoI61OqmIToCSvxhEwMZi87W
UIRsEc7GBEotjDDjySDpk+/KJX9gFhx4/TN3YOjQOCb7eapkERaKwoYiR35V+JNpJgZgL/WjvJ/
NQMpalwYE1hJKXaH57JuCoK4e0Zs4p5LpnfOf3AZxAyopb95YS4PHV68wNAsFu+8Rtrgwj6/W5d
IxGJ8bu5uVnrhsac/c0kBNtepgTdVcr/zLCGLFjjzRtf1ajAXa7fWxAHVx0KlvRBc9QTiUwQ
X-Authority-Analysis: v=2.4 cv=fMk53Yae c=1 sm=1 tr=0 ts=683726ca cx=c_pps
a=WW5sKcV1LcKqjgzy2JUPuA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17
a=dt9VzEwgFbYA:10 a=EUspDBNiAAAA:8 a=Tf-tFfCcsC9FfDuVxHQA:9
a=OpyuDcXvxspvyRM73sMx:22
X-Proofpoint-ORIG-GUID: DaQOLsWLycfThAMxlxMPONTwgeAE-AZx
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_07,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
malwarescore=0 adultscore=0 impostorscore=0 phishscore=0 suspectscore=0
spamscore=0 priorityscore=1501 lowpriorityscore=0 clxscore=1015 mlxscore=0
mlxlogscore=999 bulkscore=0 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280130
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
In the existing implementation, the link->ops assignment is
conditioned on link->no_pcm being set, which generally happens
when a platform entry is present. However, in scenarios where
there is no platform but multiple codecs in the DAI link,
backend operations (link->ops) must still be assigned to ensure
correct codec settings.
Signed-off-by: Mohammad Rafi Shaik <mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
---
sound/soc/qcom/sc8280xp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/qcom/sc8280xp.c b/sound/soc/qcom/sc8280xp.c
index 99fd34728e38..b1b31d197b42 100644
--- a/sound/soc/qcom/sc8280xp.c
+++ b/sound/soc/qcom/sc8280xp.c
@@ -147,7 +147,7 @@ static void sc8280xp_add_be_ops(struct snd_soc_card *card)
int i;
for_each_card_prelinks(card, i, link) {
- if (link->no_pcm == 1) {
+ if (link->no_pcm == 1 || link->num_codecs > 1) {
link->init = sc8280xp_snd_init;
link->be_hw_params_fixup = sc8280xp_be_hw_params_fixup;
link->ops = &sc8280xp_be_ops;
--
2.34.1
Return-Path: <linux-kernel+bounces-665688-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 30F3541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:08:35 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 6247F1BC323B
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:08:43 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 3F24A28BA8E;
Wed, 28 May 2025 15:08:03 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="a/3FN3Va"
Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11011068.outbound.protection.outlook.com [40.107.130.68])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id A2DFA28C03D;
Wed, 28 May 2025 15:07:59 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.130.68
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444882; cv=fail; b=NuC/x3u/p/9TubTA+74d8XPTdfSzOtoC3HBHoRHAFPNG6iuOpYYHEiTmzu1AzWMVgmVNw4YI8zqUM2q1Y0QYnnhpakqups3q8KNlNpOrK2Y5/lv7CWgDvXhzWG+CnSNmn5b98xw6s9/CxIbUOvNTufN8dXaXglqVe5G3+mervOo=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444882; c=relaxed/simple;
bh=1VJNhRxjzLoiLG0jCin8+9p0T3UXuFMLQyQet3KyjkA=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=eX2SqraV//wJPLx5bZSChVZPjw26xYhrX9sEfdfcaqgijo2owy9+XR1j3QjWg8mCfVNES0X4FRcpJJKF1+6s/0f4Knomgy+yA/UHSyoRb6DLbXXHtFiPgWlmuRBm4Ef1e+VFKMn5kTRDUL1fWj8bC3gx1n30H9MN3VOmS6uSkz4=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=a/3FN3Va; arc=fail smtp.client-ip=40.107.130.68
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=KcNa5mvh4HjJKlNuXnXphNqr3tkvulJkU0ui0qhRflSPIIz7kg5RuamrlbcCZ2L1niGlVvaDcT/vfpejDeiLJQpxIPV6SNrszXXSe6ocXRO2BZ4HWE7lmMzJWvqjlr6E+a5stCtmNt5uBmeVbkxfP8I+6uCrYezExuK0dweXOyi918VpNLBJvINGpiSENKySQV0lsQzlcxg/4bD8fJedNh2eydt92wOGeAXeqGMow1zxnC9k0tFm/1e8644e53/Yr9Ij2k19GYMc5/BwkjNwYPIq1Kd85KKUt+0HjwVeQRck1AszKD3xcX+X/VqQuluRnK5wQErzHj+Npc8dJioyiA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=zVnHX9bjxUNxWpN74D8xyacIIk2WPD3cmokCGrrq/+8=;
b=NBbg6mC8Lyyz9avF4aWYB8HcwUJttAfRyqzxbNzg2ab5NEG8LwjjY/8ZA1tYXlfVWmyuvDtAX2I6pjWWgZF6A9tb319VweBzYuKudSngCEwNdix8+eaYoJwzfEpfH0xTueYtn/m9JKacwovUL9PnXqSXta4bHeEQyCTQcwIZTkpyScZstObPbt7w+dkVOQbgsXkr3jurbO2/v5ndrzYxnAG3VIcx3VXqPhuGm8jg8Fu5+fYh7jqErogw+5wAmJyLDrTKj+6/4BXbMGdVpaTid3cK9Owb8Cbgcq1blt5KEd5VRE1fsraexaHnu+Z/8WTJ6x/r72PUrBmXCPvyP1j+uA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=zVnHX9bjxUNxWpN74D8xyacIIk2WPD3cmokCGrrq/+8=;
b=a/3FN3VaVwQSZ1row+D8eOj5vjPnHK+9ad3X60kurzwE/p1sh5tm/E0wFigbEuHtwLNkUZw6/8tlhG2UHnYRzRLS9Tt5m168Hpc9mFsN+J3GZq7hwUSfUoG0I1/0wyyDiy3HdLRPZzwv8cYnZs4l/qd82DnS/YcMOv4EuqSKK17vM+NN939KV2e6ygOedIeEWfsI5iqxcVIIp3CGYJ8QC3uTF5w47x6pGgWYpBo/1CBoHmat+nCv7c1k9zqQsM8ikKgPhzmr3cB3qh1MRr1eVovY7DGU70o0Rc7pcGGGCRLxYcrnYcsxANU6AxUpSf+wDF62mxqj0r6Gice4ruQfsQ==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by PA3PR04MB11250.eurprd04.prod.outlook.com (2603:10a6:102:4aa::21) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.22; Wed, 28 May
2025 15:07:44 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
15:07:44 +0000
Date: Wed, 28 May 2025 11:07:39 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: Wei Fang <wei.fang@xxxxxxx>
Cc: robh@xxxxxxxxxx, krzk+dt@xxxxxxxxxx, conor+dt@xxxxxxxxxx,
shawnguo@xxxxxxxxxx, s.hauer@xxxxxxxxxxxxxx, kernel@xxxxxxxxxxxxxx,
festevam@xxxxxxxxx, devicetree@xxxxxxxxxxxxxxx, imx@xxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH 1/3] arm64: dts: imx95-19x19-evk: fix the overshoot issue
of NETC
Message-ID: <aDcmuyWySD3QNUaz@lizhi-Precision-Tower-5810>
References: <20250528083433.3861625-1-wei.fang@xxxxxxx>
<20250528083433.3861625-2-wei.fang@xxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528083433.3861625-2-wei.fang@xxxxxxx>
X-ClientProxiedBy: AS9PR06CA0046.eurprd06.prod.outlook.com
(2603:10a6:20b:463::29) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|PA3PR04MB11250:EE_
X-MS-Office365-Filtering-Correlation-Id: 5cd14fa7-712a-4f6e-c14d-08dd9df96633
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|366016|376014|1800799024|7416014|52116014|38350700014;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?yzX6M0oAX55MztK1QhxbINwSzNDAuY/otuRzrsbYj1PwMh+KuODRLXc8Lx/A?=
=?us-ascii?Q?zXn5O+jMOauZlb2XItxtWfXzcKSYuJVS1N48EqHuk4JLMUU2jfHHZdTP3AW4?=
=?us-ascii?Q?2iIJBL3a7jSTmczJ/ejtdca42eeZHgFJTob/062sOuYXu4PM6mAGWQ5SNcE9?=
=?us-ascii?Q?qFztUTC0D7lcdZ/9ZLqaCRMomVGuLAzCoVgmZZP3depu/zETX+25gyhU9uT1?=
=?us-ascii?Q?kVVBfezOvdItxSVT5LQgsQgPk3nO7NrNWm5sMGJpsfmJCAeHKRXh6CXPH3Fz?=
=?us-ascii?Q?XtN09+SJdhJUWJ1K9WMhm7eSq4KX2ohEmrrRfj7zX6FwT0PeKmxTVoVr83un?=
=?us-ascii?Q?M6OZJNxHGIAKOSlhbZs5UlrTaTqTyjali51PzQIdt/DzIZxvBiN4DMxHsi53?=
=?us-ascii?Q?gaQ2iowigpfwaatwypRNG/FBbXR/0Pzbfv7SlpWD9Yu6nJ963mlg8mKAWO7o?=
=?us-ascii?Q?bwthaUcfdOa3BUpwuS8qCfaCd3tqCw3MnUhTMzZ6XhyHnj+e8PYKkAgcCqTB?=
=?us-ascii?Q?xbuY0rJ6ZejFmFLMY6ktqxS85DkDRlaJ5tau5GyFxwk+mi3iTkiRAdbs4y/C?=
=?us-ascii?Q?yxp8r6FYT5VgwDDooPwOJkwKho+HKOakGagE9+2wR2oSlFeVPT6XGEStqfSh?=
=?us-ascii?Q?BItyqeAjRK9PbymJ8XXuejzZ8dmQYsNXraqIzBcrnnT420XzD3xsrYFTYsvW?=
=?us-ascii?Q?Ti0vIo3DEUp8xRbwCl+4Wyeq0Yrr9kLPNdSGPMyDvCDuNrYWPbK0/Rg9lRbl?=
=?us-ascii?Q?GyUObogNYqIGNWQqZz0YVu0rcl75CNROoYAy3B9MKWBXsNDelRdSdJe/TXFY?=
=?us-ascii?Q?P00+z7201Orkaa0IcFLwSp0LVCxdX2C9JIA5QyoQtdPMCL3ysqauFLbXoqYJ?=
=?us-ascii?Q?3dqNnqZoNH7LEq5jBBM+Ced8UV7YsFnbO3CMJA8aY1H39WmXaImTi2TWDfsR?=
=?us-ascii?Q?AZ8C4JOJzgDkdkAz67H0jg1hn9bytdwxKOi86dWcuawskiBe7tn3Rk58QTKY?=
=?us-ascii?Q?fRMJovFGEjlL1qOUGJO1eWcfUL0pmHPrcLZHK3k3sqn9k/i5BrrpiRo5SNSi?=
=?us-ascii?Q?RQ0DCeW7oaVQGEhkM7vRKgKhUtPcMfkD6Nb2EQwR68Xi4KfY+Kcbk7U5GQDQ?=
=?us-ascii?Q?E00GBHlwHSiXO2xMLC+G/rANjxE4/HvELo/1k1wqSaKkvqwa8v6g1rmXjX1v?=
=?us-ascii?Q?WtxlhVtrS5SsZu3QevfquM4gdOkf9AtCPyLC4Nzw8kKyGPNo+cejF9krnhGZ?=
=?us-ascii?Q?6xdeCmU/5OxuICLJzWp15bcyxrIOnfJ6rNe0TRCGlwPxsXjmhO31B360Jsty?=
=?us-ascii?Q?G9OtSFE998vRKJitONasQZaqB5C/J5FIMZJrOjDsliTvbS3YiaDcF27V45eK?=
=?us-ascii?Q?+dDo986xAxhaVGNC7uG/F/fnOhk8vlvEbrxiIkehWlgOXJ6YeWZ9y3Yuzede?=
=?us-ascii?Q?BYhmbodzblUZ+q2ikv3ZC+MLUXDlh5HX0LPZcg5jWmulz7MsL9ZQvhiKm/Lw?=
=?us-ascii?Q?KefiujgwzZp6XkE=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(7416014)(52116014)(38350700014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?NMIqYneL2IRAqyR8BETX8gmyLev3l54GifLL2TjdxvbsN9CK2f0CsP0UPkN5?=
=?us-ascii?Q?qcz8WZreVz/58cKSBmKBL9uPnAT3sm7d1OPHLYcGXCkVs9Z4UvqsrCtrwjvj?=
=?us-ascii?Q?yP8DJZzzpv8pEf3kolavv6gc1vl6pcrPKSUB828aqXT5cCVYa0gh7eJlO47T?=
=?us-ascii?Q?bRHyOb4TSkxy27+6i2FOZOe5Qz3KZEuf7i4cVZCMh5xWPrNF1roLBRYsiMDv?=
=?us-ascii?Q?YQ3Sf8yfdU7pjZE6J/1ryP/SVHflJYSy98flLcnQCQpP8zI7IUn3rnYbafnf?=
=?us-ascii?Q?ZvfABhfhkDu05tOm2agttLmvaQq9+FxV4zWjMZsSQJz1ZNO46DuoOJ5uRTjV?=
=?us-ascii?Q?qjEX2OLkz4Eeaokt8tcLTFKv0LpvusliHb3KMDHNtOX37Ra0a8LZnsPvxZYp?=
=?us-ascii?Q?zxaOvUiiYWJx1A2yMooGtgsX3E1ABsYfFDJ4k3KsTPLVsD7qlHWrww+W3fJY?=
=?us-ascii?Q?yXojb5D71fkvbdd+Ji5SfT1TCQqmDR8Ce5tuX9fG8gu7z33RW+5M7k8cZABo?=
=?us-ascii?Q?PEOkdL0nfVqUZqvEK/kf964nzZjJH8GewuQA/7e9yIym894UGxi9G4btGxBQ?=
=?us-ascii?Q?r+EdUhVngVC81N4xbZdnzYBkEzDVV3qW8kyonoh4pBnZ1NGcyXcKTTX7mfKV?=
=?us-ascii?Q?s22ouIgxuGfD0gurNZzSOPkPII9W2yrLmEW24wXC2cqUUjfmA+YOF64TdiLs?=
=?us-ascii?Q?nWCABJnvR908fzbl0JVLTy8TMKX+nBpn8WLJfF2h418a8z4/O0qRipnCYRJv?=
=?us-ascii?Q?twnAB1LuHm5Ax/dsGl3pYdFjxdwoqY44qKKNWQqqrFQcinFZmSCMVwdFBjwr?=
=?us-ascii?Q?2mT63pmz78FhonmM3RmVVjENYQR55+yNHeIEHbnaQPsSn/4hPvPuF198yyLW?=
=?us-ascii?Q?vxrFgvXLUyTjwqYw5uzqP8WCTlzIpXgQ8VhVdu9VzfYEiLf/RSb7+nyWInY1?=
=?us-ascii?Q?0M6IvM2t3lXVM9Lsq4uB+sR5JtbTF/BLRPBlLVV0tVk/CrxKjgycDFpD7rZ4?=
=?us-ascii?Q?oWYhXU+hVZgTaUCHQg7D4otZHgu7ILSx3fM7n/B6XA1trxbrx053Z6e4R0jE?=
=?us-ascii?Q?F8tP/qrGl6SMca8t5RTHLytPuwMi9OYPOT1HP67DRl1hscOtR8C25wBUXOnn?=
=?us-ascii?Q?uqVaYjMdN8u9c0ZKNY16TpNXbXcJmAR9Mtuz8m7brOqtvaPKb3cAMz+NCAbV?=
=?us-ascii?Q?yaca8Ta+FTu93o7Bj1qSKkZ8YneAyrMPw+EGhDDLs0df9Pv5/Uw5Rhx42HiU?=
=?us-ascii?Q?UF7bgZ8ueOH1L8O4QNCZyev4ppnDNIFPqWHKlx6Rw7ReMTTBU2Md1V1zW/jG?=
=?us-ascii?Q?6XHnoq31xbKqIbR/j1UW6hongbb8IhhEGYWIUOzMZZKKtLAsGc5tiDbsWBfS?=
=?us-ascii?Q?KW900kwoEyGql8s8lbcmwOpe1yOlB9Av1WB7mNfDukP7U7QyP0WNhCHXOkDs?=
=?us-ascii?Q?BNhhJWhppE8WBhxlsiMe6oyJXgfa9lxBcC5OxzR5TPApH4OhZptnW2XngXaC?=
=?us-ascii?Q?rLrs2AFXSUuPRNsEuKgC427bHtspWMWFtbPEkGISKY39NRB8UQRb4tcdM2eY?=
=?us-ascii?Q?P5gJG17A0jVDActbnLo=3D?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 5cd14fa7-712a-4f6e-c14d-08dd9df96633
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:07:44.6392
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 9ZCWUI8VkdlVI18Uw5OjciJ1GFYW9GChaovQeQxrXYT6S3nPE65GC55fTjeaIJQOnrtuNOXaFFT+cliYUDraGg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA3PR04MB11250
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 04:34:31PM +0800, Wei Fang wrote:
> The overshoot of MDIO, MDC and ENET1_TDx is too high, so reduce the drive
> strength these pins.
>
> Fixes: 025cf78938c2 ("arm64: dts: imx95-19x19-evk: add ENETC 0 support")
> Signed-off-by: Wei Fang <wei.fang@xxxxxxx>
Reviewed-by: Frank Li <Frank.Li@xxxxxxx>
> ---
> arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts b/arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts
> index 6886ea766655..d7d845231312 100644
> --- a/arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts
> +++ b/arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts
> @@ -566,17 +566,17 @@ &wdog3 {
> &scmi_iomuxc {
> pinctrl_emdio: emdiogrp{
> fsl,pins = <
> - IMX95_PAD_ENET1_MDC__NETCMIX_TOP_NETC_MDC 0x57e
> - IMX95_PAD_ENET1_MDIO__NETCMIX_TOP_NETC_MDIO 0x97e
> + IMX95_PAD_ENET1_MDC__NETCMIX_TOP_NETC_MDC 0x50e
> + IMX95_PAD_ENET1_MDIO__NETCMIX_TOP_NETC_MDIO 0x90e
> >;
> };
>
> pinctrl_enetc0: enetc0grp {
> fsl,pins = <
> - IMX95_PAD_ENET1_TD3__NETCMIX_TOP_ETH0_RGMII_TD3 0x57e
> - IMX95_PAD_ENET1_TD2__NETCMIX_TOP_ETH0_RGMII_TD2 0x57e
> - IMX95_PAD_ENET1_TD1__NETCMIX_TOP_ETH0_RGMII_TD1 0x57e
> - IMX95_PAD_ENET1_TD0__NETCMIX_TOP_ETH0_RGMII_TD0 0x57e
> + IMX95_PAD_ENET1_TD3__NETCMIX_TOP_ETH0_RGMII_TD3 0x50e
> + IMX95_PAD_ENET1_TD2__NETCMIX_TOP_ETH0_RGMII_TD2 0x50e
> + IMX95_PAD_ENET1_TD1__NETCMIX_TOP_ETH0_RGMII_TD1 0x50e
> + IMX95_PAD_ENET1_TD0__NETCMIX_TOP_ETH0_RGMII_TD0 0x50e
> IMX95_PAD_ENET1_TX_CTL__NETCMIX_TOP_ETH0_RGMII_TX_CTL 0x57e
> IMX95_PAD_ENET1_TXC__NETCMIX_TOP_ETH0_RGMII_TX_CLK 0x58e
> IMX95_PAD_ENET1_RX_CTL__NETCMIX_TOP_ETH0_RGMII_RX_CTL 0x57e
> --
> 2.34.1
>
Return-Path: <linux-kernel+bounces-665689-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 212DA41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:08:50 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 246291BC796D
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:08:56 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 603C728C009;
Wed, 28 May 2025 15:08:24 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="PM9KS47K"
Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013022.outbound.protection.outlook.com [40.107.159.22])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id EE38028BA9B;
Wed, 28 May 2025 15:08:19 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.22
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444903; cv=fail; b=CgIp37yoSKa1f5gv07+C3MbhqjrAv2CcE9YEIdkVoV930FkEC1UoNNfXIeGu6HWn9uHVOsPsJR6bei3+zlRRuExwwJZ3hEPTPLtlhnOqrVTNSN3AaO99d5AvMJwY0EdrEGZVnZ/MXr0lIE9kU3g9V2MTKeU0O0Xfu/2+PrEAYqM=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444903; c=relaxed/simple;
bh=CJJQfk/Js4H6LNs1uA0HWMv1CqbWrw5X2cjPymg4e94=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=GxMUpQvx9K7b56xpcpHQi3Es1AwnI7SC5+ofUAt8Z3YfoTZC5aCl2wlHQdd2equ7dIrZMrbtUlP72HiR9mcPXjoLKtiVjbve5IsqEkyDwwOjywA6tLAyS0aqSK/OwOaPTgg4JkNePNCujnFT5jxzjHN/xODmIjAU/hQNF/xBx/w=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=PM9KS47K; arc=fail smtp.client-ip=40.107.159.22
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=CtSzGti6MnbaJUEl2ZxT+I4IP2np0tl/vum5zR2YQUeY/OR/e+gJKAOp4JaXL4p/DIJhANguh8KqPSYnsqHG7hcTu+N5wK3T7ZXs/j3wNMAdK6D+LuHHQj/WG5oJMXUQOax3/gSg/JmwA16/Vux+UmsUN1i/YMB3FeshwrJgBgX8/AdT1BBD1V8gH9SEq+9etJYEXSq/yVKlDqxGTy0H6KhxaZryN3vtJLeV1DmCmZefu2t3YjTqRhmRCIeuT1nxG/0mTEw38UY1Q1f9eorlg+bA6Lao4HL5uNyur9AheIo37GGAKV+WOljKi8rMU1XHRpWPuNwNM9NEINOVHMixhA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=pgRyuc1tlcuAEiLoRvj9YDojwwp0s1sKT6QsYbZrxKA=;
b=Ud3ueSe7CNghfPbo56MdpKlgDr/NcFQU7yJruwK49cOK5hg4dVHczUlfn0St6k4A2XKRZ1InfRXC5e7ND3uzp6gBMeYJdpv5Q2ENJAl2JH77fetODJ6C2HMWPEHG4NZA6CA6ceulv3rnEYVj2wrI5Y/7gmi5u5Sm1C3o1HmmwF93/m67rdwnv7dhRB/JRCwlPrvvo72T1wM0kcqcAM+UjwGoE+qXSgkhKEAzkiT4GTsikTJaQabd4qOZUJ2SDQOGachF4HjIt/blIsbxKT4mawkQ7h9+2kF0cO+9H6CMTYTnuDaQUaS0wQZ8p04g2RQKKgvCV9FrtYkmwcj2F+dVtA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=pgRyuc1tlcuAEiLoRvj9YDojwwp0s1sKT6QsYbZrxKA=;
b=PM9KS47K96LyTPs4NH2QKxJQFJLogg74rl6rijGM67MA+EyhJe+ygr5Jq9BlR9uNOstjKXJp+J78XlZEeSdY7tVmY+sJQ2pdUheiMQYoqpVLezD8L5Oqbo5cJw4PzhfIX8QIzM/z4bVCtMd/ajtdiFqTzCNkZB3ba4TlKPL6AS+tnPLDjt7dEpqvL7xnBa2wmm5l0MysRC4aJJclV8/nGlbFilBYOz9v+nhnzw75tWi5Op7dvaLHSiFfwixrYFrwCQJRq8slJTflyC2ETXe2+1JepRnhj3m4MqmZU05bOVkmLxboj1dvo6pcmBE2kn2zSgmfi9Z5uhifUlAUhjXHvg==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by PA3PR04MB11250.eurprd04.prod.outlook.com (2603:10a6:102:4aa::21) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.22; Wed, 28 May
2025 15:08:06 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
15:08:06 +0000
Date: Wed, 28 May 2025 11:08:01 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: Wei Fang <wei.fang@xxxxxxx>
Cc: robh@xxxxxxxxxx, krzk+dt@xxxxxxxxxx, conor+dt@xxxxxxxxxx,
shawnguo@xxxxxxxxxx, s.hauer@xxxxxxxxxxxxxx, kernel@xxxxxxxxxxxxxx,
festevam@xxxxxxxxx, devicetree@xxxxxxxxxxxxxxx, imx@xxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH 2/3] arm64: dts: imx95-15x15-evk: fix the overshoot issue
of NETC
Message-ID: <aDcm0QC4PMEEZzX1@lizhi-Precision-Tower-5810>
References: <20250528083433.3861625-1-wei.fang@xxxxxxx>
<20250528083433.3861625-3-wei.fang@xxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528083433.3861625-3-wei.fang@xxxxxxx>
X-ClientProxiedBy: AM6P195CA0097.EURP195.PROD.OUTLOOK.COM
(2603:10a6:209:86::38) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|PA3PR04MB11250:EE_
X-MS-Office365-Filtering-Correlation-Id: 489ce511-6573-4475-687b-08dd9df9732d
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|366016|376014|1800799024|7416014|52116014|38350700014;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?G+d9R9jD4VvulV8eTFHIwaHGxyNE4CB8uhzUj1ndS9gwpEw0nmm4Y0nJt09Q?=
=?us-ascii?Q?3CPiUiIwr0TVkOJlXgE00FPsceUvpqq/iXCD7U1E0dVn3K4d+YtbkmsfJ1Tz?=
=?us-ascii?Q?cc5/zHf2o4oc6AKpOzOq06drn+08/PiYKmD5WKSG3NCiRzZrj56bxDw9jVB8?=
=?us-ascii?Q?y887+DwJEtwL96N+JMGNXLFbZlzuEeYoquJVFELooPMhcwux71/mzg48AgAf?=
=?us-ascii?Q?PdJPM4xMKQ7tyqYS5VNcfOYjBhFOGWUh0K7Jw1MS1jVdFKEBrjNzBv8AATTE?=
=?us-ascii?Q?MqSoNGQ+2u/5buvYNC/PjDHsqOahUShE75Q1vOZAOMbxx0edYOf4m96aqKKO?=
=?us-ascii?Q?JKQI1C+s38HOet7GF0WCRxjpfB1QJTx+qfJfAzDH7NKtTP5Co8PFlr9zfW6P?=
=?us-ascii?Q?cctqU61DVM6RDnGVBkOXBSA9L6VQtjbX7IyJNsOJdzq35jzOwDYilnMSlzPB?=
=?us-ascii?Q?iwIWa2uQ+eL0G+wHcb9BsSv7MdZbysCnSH5G00da3Xmuxd1R2upk6slDeWYl?=
=?us-ascii?Q?LbmBCRvO1H6AvuBlnthrO1pZkl+G4BgwYT/rJvLG6RJqz1tmK3SgRaxF2U6r?=
=?us-ascii?Q?SntFDtO9lIP3Tm5BQkq1AcihpvX7ItrDxy54B0vv8VweTbWZVetajcBtTYrb?=
=?us-ascii?Q?ktLGPg5MLEzIJPTIDkrEd68lUYi0mCz7IDckXzbf69OcYHQjCgiB3izqY6sI?=
=?us-ascii?Q?PFpLUpyNP9QpVbPVWgKprepozrVCNSTT34RP+SOMSGQYMfTsHNoZkt6qdkL7?=
=?us-ascii?Q?6qoGfkmcrhnkvJHXqY3WVnmKs6eCtSAUtYo2oQHTsu8+S5+sXJVVvdC2PjPu?=
=?us-ascii?Q?62otDNhkSnuiLp4SlYBK/K7wAeuSsVbXMzX9/9je6UYXxrcNdl4j8TJap85I?=
=?us-ascii?Q?9bsy0NX7IG0Z53327IRBPU0s8H6v/BOfyFD4f/GkJ7Q6qb03k+OGSqCdfdAI?=
=?us-ascii?Q?1ga7vBE1o41RFWN2rpQxHKGvAQ+ZUlKvJBiwc3t0TLCoc9gq00+tSPg7E0dZ?=
=?us-ascii?Q?5cQUs3EBEvVTAq0LxXGIvs8woiulN3CKEjHRJ0raFJ0ytotQf5lI2E5bO+Un?=
=?us-ascii?Q?2Ty3LS8ADqLEalWDZHtPB2U38VqOdpUAAInZJcXa6ndMVF5Qi9gqSfikNySl?=
=?us-ascii?Q?mAJvyzbrPnWF2G8EO8DV3uyo4QyRWvhgkLyXLrq1IVUCFs2K8CMV5LSyj1Ov?=
=?us-ascii?Q?WOvtkH/bDlJM1WOHOlwYQ42gr8f7y6To3VBV6Ub3CV0ZL1LHtAJZ5wNme/0x?=
=?us-ascii?Q?D9Z9SQvUW6fAbJJ3097U9UzAuDDf5BZB7yaCfrVz+Oi1mYrH8TDa3tMU8wEb?=
=?us-ascii?Q?8teaJDbQX8poXLrbcJiDU2+A1lTJK5yYrEThswjIAZBCjzC99/RYYcZEJAUQ?=
=?us-ascii?Q?wniDfllyI59llFaKe1hEkBUBsTcrZINMZW3aQ0fJX6juXTKcZeDBl/lVPIO6?=
=?us-ascii?Q?14LQo/sPowLVyPvjV9ptetWeU7tmD/ZSjMSgt+UDGyEF+G2phKEVc7b0EcqQ?=
=?us-ascii?Q?kFKRsqCGuIQD/38=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(7416014)(52116014)(38350700014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?9iLjBGwyJTbARbh9+u8IaaL5eTYwcRlY1ALQ7RgVfFu6uXUGtGEx0kGYB83C?=
=?us-ascii?Q?LpoAphaedLbcSnXxeE56d9MdPfENFcN4GgS4IDgMiSTESJ7Pf7Ii1VxWNYh7?=
=?us-ascii?Q?ZqlHawb0I936vmnUG5ENNxpSYrZYufPg+QvlOFa4A4BGdQql/B2xMjsp+UOF?=
=?us-ascii?Q?ilG6M6jQ+ZFMZF8ea7A/2K4QWDMZsJvbPXnSCeulVYuiMx6zUaPRAIMrl709?=
=?us-ascii?Q?cpOXEjPGIoIwQSQ/I3o6QUfD0VjK7j/K4Qm3cB8fwWO89+56Nhx4hmOvrAQX?=
=?us-ascii?Q?O2QxJXGqExVD6HFvCjTPWklx3RULk1iWvRALBJnGercRj/ymjWgq32mdThfC?=
=?us-ascii?Q?zeZ826yVb7FvP2km/F5smaJig98uNj9E8+HBTsaL182Vr7CbkSymZOQ6/91N?=
=?us-ascii?Q?PWn0JlRQYoL/66K7FSRuJG/YhreCDfk04cdpvolSLvvGiBUn0RQQlW5mlc/D?=
=?us-ascii?Q?7JwpoonMAcaCxG3gk1A3bUDxUHpbJFWdOywW3b7Xw3Cf73Z0o/QBpRY0/4bM?=
=?us-ascii?Q?OyMoh6w9vY5UjHpUh2z3a9M6dO5hW1hpkTHKHlC1z123lwn4acxmIFg5FyQN?=
=?us-ascii?Q?6+73a2uTflFr7wwLtZ0KwrbOtWgFW8osPJ1HPB9MHx48voGUO+3s3GR67KKM?=
=?us-ascii?Q?2reKkbyLlxa6xj2GQWqnFog1zJcuOLf4uG5G7UCrDb+2WEW0m0T6LJbjcpE7?=
=?us-ascii?Q?Sx3Q2zorHCC4R4iPJrpbcFX1rC+/SaRtIkjdPTQHm+4MMvJNJhjMofV4kfCs?=
=?us-ascii?Q?GTOBtkS21R9TMKh2weWI4oNbpK0r/m3CVVA6cVKhWgjpfiMWb9pcUUb29bI1?=
=?us-ascii?Q?ujNXG9eMumxUVKSwQyFCMFoxDvavjvoK7S8KbUwqVasz0ruROdGdsnh8Gjh4?=
=?us-ascii?Q?m2+p0VUhUHS0tacKYmshWEHFC2a7QWCYvohqNmyrbaWIXOMUx4JfrYQ5lyk8?=
=?us-ascii?Q?4ipc5y3UkA2lqrSHJCG9PkpGsg1TeUkYPTXt9PWpyxbx6gSTsrRXsbrvY52p?=
=?us-ascii?Q?nWJg5SngmPjNyDGGvlfuMp/hVSnd8bFXiYiM97WsMkvR/M8L44/J2pAPASls?=
=?us-ascii?Q?2U8fL34p+wCg0bheHvDkEkeyyRI7L5k/2rRmt+H5tkF2dXj76FMcVkj8hCbl?=
=?us-ascii?Q?jybBivv7MszC5T4yPKMahp/YRxoZIq6Ob8DSNJDtDul+rx69zYv8qHv01jXS?=
=?us-ascii?Q?BWUnSauij0tqf+9/lRqVb71HEeeHLRBZHvpsDImJoZVy7+M4p3b3Gd6pOwk7?=
=?us-ascii?Q?urdGYYO7YoucjGgqogpVtUS3ckDssrb78Mv9rglTLOvLNDaf3Zy4YSXQGdea?=
=?us-ascii?Q?0P97Z+N/iIgesWbWExWphchYnyTOMPXMmNl5Y4/wvzraNydZElnWL1X3Hx2s?=
=?us-ascii?Q?KwVAqy9/gksP2Xx6jmzzgakIY9qcqwwjlEI9hE3Mg5kmuWq2LB1rrvz2kMQB?=
=?us-ascii?Q?mdW3ISX7p62UW9iDqLVF8xY241rru9y22qzuitX65weNroDoN0RclHm9HRwP?=
=?us-ascii?Q?pQAtyPxrwgdcBVgfvrRco2LxO9AUVUppM82euPci2Dl0IrCssxsfJljeu1p7?=
=?us-ascii?Q?NCXTuAtV03Zp79YQFFDhX7Zh2IxNdI5tkBXhofIE?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 489ce511-6573-4475-687b-08dd9df9732d
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:08:06.3935
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: yHi76PljxKgYSxYwgqIt6lsiXj64LpVYQieLauvG2VXx37Rc91S9I46hzWhMvnn387F02loSRhxnYeSumWacXw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA3PR04MB11250
X-Spam-Status: No, score=-2.6 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS,UPPERCASE_50_75
autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 04:34:32PM +0800, Wei Fang wrote:
> The overshoot of MDIO, MDC, ENET1_TDx and ENET2_TDx is too high, so
> reduce the drive strength of these pins.
>
> Fixes: e3e8b199aff8 ("arm64: dts: imx95: Add imx95-15x15-evk support")
> Signed-off-by: Wei Fang <wei.fang@xxxxxxx>
Reviewed-by: Frank Li <Frank.Li@xxxxxxx>
> ---
> .../boot/dts/freescale/imx95-15x15-evk.dts | 20 +++++++++----------
> 1 file changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/arch/arm64/boot/dts/freescale/imx95-15x15-evk.dts b/arch/arm64/boot/dts/freescale/imx95-15x15-evk.dts
> index 6c47f4b47356..9f4d0899a94d 100644
> --- a/arch/arm64/boot/dts/freescale/imx95-15x15-evk.dts
> +++ b/arch/arm64/boot/dts/freescale/imx95-15x15-evk.dts
> @@ -574,17 +574,17 @@ &sai3 {
> &scmi_iomuxc {
> pinctrl_emdio: emdiogrp {
> fsl,pins = <
> - IMX95_PAD_ENET2_MDC__NETCMIX_TOP_NETC_MDC 0x57e
> - IMX95_PAD_ENET2_MDIO__NETCMIX_TOP_NETC_MDIO 0x97e
> + IMX95_PAD_ENET2_MDC__NETCMIX_TOP_NETC_MDC 0x50e
> + IMX95_PAD_ENET2_MDIO__NETCMIX_TOP_NETC_MDIO 0x90e
> >;
> };
>
> pinctrl_enetc0: enetc0grp {
> fsl,pins = <
> - IMX95_PAD_ENET1_TD3__NETCMIX_TOP_ETH0_RGMII_TD3 0x57e
> - IMX95_PAD_ENET1_TD2__NETCMIX_TOP_ETH0_RGMII_TD2 0x57e
> - IMX95_PAD_ENET1_TD1__NETCMIX_TOP_ETH0_RGMII_TD1 0x57e
> - IMX95_PAD_ENET1_TD0__NETCMIX_TOP_ETH0_RGMII_TD0 0x57e
> + IMX95_PAD_ENET1_TD3__NETCMIX_TOP_ETH0_RGMII_TD3 0x50e
> + IMX95_PAD_ENET1_TD2__NETCMIX_TOP_ETH0_RGMII_TD2 0x50e
> + IMX95_PAD_ENET1_TD1__NETCMIX_TOP_ETH0_RGMII_TD1 0x50e
> + IMX95_PAD_ENET1_TD0__NETCMIX_TOP_ETH0_RGMII_TD0 0x50e
> IMX95_PAD_ENET1_TX_CTL__NETCMIX_TOP_ETH0_RGMII_TX_CTL 0x57e
> IMX95_PAD_ENET1_TXC__NETCMIX_TOP_ETH0_RGMII_TX_CLK 0x58e
> IMX95_PAD_ENET1_RX_CTL__NETCMIX_TOP_ETH0_RGMII_RX_CTL 0x57e
> @@ -598,10 +598,10 @@ IMX95_PAD_ENET1_RD3__NETCMIX_TOP_ETH0_RGMII_RD3 0x57e
>
> pinctrl_enetc1: enetc1grp {
> fsl,pins = <
> - IMX95_PAD_ENET2_TD3__NETCMIX_TOP_ETH1_RGMII_TD3 0x57e
> - IMX95_PAD_ENET2_TD2__NETCMIX_TOP_ETH1_RGMII_TD2 0x57e
> - IMX95_PAD_ENET2_TD1__NETCMIX_TOP_ETH1_RGMII_TD1 0x57e
> - IMX95_PAD_ENET2_TD0__NETCMIX_TOP_ETH1_RGMII_TD0 0x57e
> + IMX95_PAD_ENET2_TD3__NETCMIX_TOP_ETH1_RGMII_TD3 0x50e
> + IMX95_PAD_ENET2_TD2__NETCMIX_TOP_ETH1_RGMII_TD2 0x50e
> + IMX95_PAD_ENET2_TD1__NETCMIX_TOP_ETH1_RGMII_TD1 0x50e
> + IMX95_PAD_ENET2_TD0__NETCMIX_TOP_ETH1_RGMII_TD0 0x50e
> IMX95_PAD_ENET2_TX_CTL__NETCMIX_TOP_ETH1_RGMII_TX_CTL 0x57e
> IMX95_PAD_ENET2_TXC__NETCMIX_TOP_ETH1_RGMII_TX_CLK 0x58e
> IMX95_PAD_ENET2_RX_CTL__NETCMIX_TOP_ETH1_RGMII_RX_CTL 0x57e
> --
> 2.34.1
>
Return-Path: <linux-kernel+bounces-665690-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 8AFE041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:09:06 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 065551BC788C
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:09:18 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C85B628BABC;
Wed, 28 May 2025 15:08:53 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qRjgWdwq"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id EDABE28B4FC;
Wed, 28 May 2025 15:08:52 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444933; cv=none; b=lEWMqj7JwvRrhgSHf5zR8kn18nxDt5dh1t+fpebJIjqnzj/TYjulOg4RQezGoHmaeGYo2mcyRNr+mSGV/zgizUJpAzm2fRDNA7LnD0yYKX4+fNQtSTPnX3G9pO0yRU0Rpn/3jDBIwagFigBWboxaGnBD/0idJAN0mnG8/GYXRNQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444933; c=relaxed/simple;
bh=40UkgulLHp10KrkQG30f0FbnrUk5jZkaCVdd/+FO+ik=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=msdHwIDiDAGkUkjEtWoNxGSw1ic4QasHEtDQOF+zf2nTMsJwaW9OSbllS+9klv1hHXp4C4USw5F+1Srz7DtwVCQMP+e13CEb1Y2esIiljj4/gkTV4gPR2GvDMckmWCff0epZe3itwV7ILZMl7nh0MpcV28sUeXMEqKfo99pvEA4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qRjgWdwq; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id DE668C4CEE3;
Wed, 28 May 2025 15:08:47 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748444932;
bh=40UkgulLHp10KrkQG30f0FbnrUk5jZkaCVdd/+FO+ik=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=qRjgWdwqYvPjV98TTccLqsGfJyo55EH+l97/A0dyCPqZZw+fbX+pf9HcpNEC8Jtem
TPGSeay92lbEB58m4uBijF4vCTWImjZ5pzd4QP7z3qpS5R9QCJKmZvp1qUwt+XQ+RA
oUEeY+rw42FhD0vyBQmOJ62JlIHnt0pemRznLH8jKpbu+WDIWExx6w9QhtBRgnB79M
uJcr7sg3IwQg5zKmmR6ro53e8Je1Urihu9NSosZD/3NXYE1WUQeVoWYp6RITZV4tyD
L2nGNJo+N2RZ9OVp4mk3N6KgtdjH5bwRgnkk5uud71J6n4bp03m9IdxiD8lgpjOEKX
ctxnsJFFgTNww==
Date: Wed, 28 May 2025 16:08:45 +0100
From: Simon Horman <horms@xxxxxxxxxx>
To: Konrad Dybcio <konradybcio@xxxxxxxxxx>
Cc: Rob Herring <robh@xxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Bjorn Andersson <andersson@xxxxxxxxxx>,
Andrew Lunn <andrew+netdev@xxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>,
Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Alex Elder <elder@xxxxxxxxxx>,
Marijn Suijten <marijn.suijten@xxxxxxxxxxxxxx>,
linux-arm-msm@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
Konrad Dybcio <konrad.dybcio@xxxxxxxxxxxxxxxx>,
Alex Elder <elder@xxxxxxxxxxxx>,
Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
Subject: Re: [PATCH net-next v2 3/3] net: ipa: Grab IMEM slice base/size from
DTS
Message-ID: <20250528150845.GC1484967@xxxxxxxxxxxxxxxx>
References: <20250527-topic-ipa_imem-v2-0-6d1aad91b841@xxxxxxxxxxxxxxxx>
<20250527-topic-ipa_imem-v2-3-6d1aad91b841@xxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250527-topic-ipa_imem-v2-3-6d1aad91b841@xxxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 01:26:43PM +0200, Konrad Dybcio wrote:
> From: Konrad Dybcio <konrad.dybcio@xxxxxxxxxxxxxxxx>
>
> This is a detail that differ per chip, and not per IPA version (and
> there are cases of the same IPA versions being implemented across very
> very very different SoCs).
>
> This region isn't actually used by the driver, but we most definitely
> want to iommu-map it, so that IPA can poke at the data within.
>
> Reviewed-by: Alex Elder <elder@xxxxxxxxxxxx>
> Acked-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
> Signed-off-by: Konrad Dybcio <konrad.dybcio@xxxxxxxxxxxxxxxx>
...
> diff --git a/drivers/net/ipa/ipa_mem.c b/drivers/net/ipa/ipa_mem.c
...
> @@ -656,7 +659,23 @@ int ipa_mem_init(struct ipa *ipa, struct platform_device *pdev,
> ipa->mem_addr = res->start;
> ipa->mem_size = resource_size(res);
>
> - ret = ipa_imem_init(ipa, mem_data->imem_addr, mem_data->imem_size);
> + ipa_slice_np = of_parse_phandle(dev->of_node, "sram", 0);
> + if (ipa_slice_np) {
> + ret = of_address_to_resource(ipa_slice_np, 0, res);
> + of_node_put(ipa_slice_np);
> + if (ret)
> + return ret;
> +
> + imem_base = res->start;
> + imem_size = resource_size(res);
> + } else {
> + /* Backwards compatibility for DTs lacking
> + * an explicit reference */
> + imem_base = mem_data->imem_addr;
> + imem_size = mem_data->imem_size;
> + }
> +
> + ret = ipa_imem_init(ipa, imem_base, imem_size);
Thanks for the update to use imem_base and imem_size on the line above.
Reviewed-by: Simon Horman <horms@xxxxxxxxxx>
Return-Path: <linux-kernel+bounces-665691-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 8260B41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:09:28 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 61A0517045E
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:09:28 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id B50C128B3F6;
Wed, 28 May 2025 15:09:18 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=ventanamicro.com header.i=@ventanamicro.com header.b="lxYV7tok"
Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 196B528751C
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:09:15 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444957; cv=none; b=TyfQRDFjNBilVp1vklzgE40qE5bB9GOot8xm8ri/QFcbq49PkW+//DhFhDDdV/6hWY6RCAAhEstaBKoeM00G2oimDbMlcB06dB7h3y9N9mBK+dOj4pLogMf9UYfrz9BRbt0evKBykP/CVKsHmQIN8Qpgdno09QgyOGjRkoitzdM=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444957; c=relaxed/simple;
bh=KGtEaaBwlHIhkgpfmQwqDMuTdlbyYN5h7Qm5RxxSXeQ=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=k3duEAVsvSDs9FdIWe8eGYj0olM4wki6tMWTST5UoYd3pVO6om88t1INzhC0+ztWzHtjH37KbrrTXCQMD/cb4/1DVxaLrHO1w9f93s2SHbRuErjVG6dk3PodSUpx2m1ItTWqzCIm10XdQoK7N5rHbLXrTi0zWd9SpEiZGan/W5k=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ventanamicro.com; spf=pass smtp.mailfrom=ventanamicro.com; dkim=pass (2048-bit key) header.d=ventanamicro.com header.i=@ventanamicro.com header.b=lxYV7tok; arc=none smtp.client-ip=209.85.128.42
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ventanamicro.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ventanamicro.com
Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-442ea341570so33749535e9.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:09:15 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=ventanamicro.com; s=google; t=1748444954; x=1749049754; darn=vger.kernel.org;
h=in-reply-to:content-transfer-encoding:content-disposition
:mime-version:references:message-id:subject:cc:to:from:date:from:to
:cc:subject:date:message-id:reply-to;
bh=+R8yVTWV7faHDggV+H50he2EYWDm1F+x1P6wR58APkU=;
b=lxYV7tokltM6rw8W6hvxqoaqJKHMyJzsoeyxKJBr4d+1VeR3yJzRM1RrnCBiGfEKnm
JjjSfefUUdHKdIJZe3bg970fh5cTUhj5cPANC9jBJtxFDgNQbtqZwH7/Jb7U2YBZacDp
QZMzrsqDZDZHDvs3CplKKfZXP5Pt8AjwH/m2Z8XvBRNaqfZJamzvg+IXcxxFoZK3MPuw
qKF4o2n6p9ydtmwV1VfwqeBMXyFCfPi3i4JQ4WEdzjE3DxmrqrtLv4mMmdLyNobM/Nqc
/cSyaSQXaye8n7PmMTFeWMXaXuH4JIddabLzgXZcWvdc9BpKSkY6+IyWzZRXbG1Dt9Tv
gMPA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748444954; x=1749049754;
h=in-reply-to:content-transfer-encoding:content-disposition
:mime-version:references:message-id:subject:cc:to:from:date
:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
bh=+R8yVTWV7faHDggV+H50he2EYWDm1F+x1P6wR58APkU=;
b=SCZJEpvz5pBv0ZGrJ4tjZUo3YPREOGMnsl8rwmbljMGTf/TWGm6RFv1lUcR2/q5jyN
HUZ6LCI6DeeFPN/4kcCBPhmnPh5t1MaaD0Sw0dtNwmCDI+B8FoubkutevvSucKr2Q5/Y
7OhQ9ZYVbOlZKIR79PIw/dMwHSBswLlcxKFbvXpbQ46ay1MBvSw1Ayop10tH97890CIO
ElOoGk0bZp+y4yRHYsZTSw1amrINnKjc6Ew6unKLGHUDUqGCnE+EUr7+kdEbQdasPs66
eRu2ZAefDh4fUB6irgfIoMP4axEedjgQqDNxxP1M1Au+1tr0IdCNU20LsOJez04zjcNu
fgbQ==
X-Forwarded-Encrypted: i=1; AJvYcCVghmY1athrnPvddcgheB31/eCvstq3WEAjRDX4xlsO3pr/IoJWGkdPPW573NUsso4IQZUsLt8SphfqEqs=@vger.kernel.org
X-Gm-Message-State: AOJu0YyuhJnUCHGche7k6wYXUNoodyKElBJCIHWRrpavTXDsSyGI1EA7
Jy1sMKPW2+6MlacXiad/Cv6Zky9/QYRXmp8dYaSpJIhTlq/3baBQv9IVmauvLHRsn48=
X-Gm-Gg: ASbGnctCUVIamThfBbdyBiqYrr79h0WtH/I0ST108HMHhLEDwO4uD4mgINEY+ohRFUX
DwnFDquS0b/hvp+R+3//j+szGSzSXFy1oggWw13j2zY01rjeOmolTc+/mqWEEDCIw6AXDD7a1gt
4Hfr2ueu1vYKhgva6s39z2NYM4c01USLV6qlcMkqRzFt1qnAzA87wU354vgUKezvxT+3dCudIfP
8ofZt0TtSxP9CNv/CdhGZQVsZr9b39K6SUk7EWENY3Jd7bdfWybZDl4/6RmYqx6c83rf7k+6T0Y
9Xc7Rv3HetwGZC8N3Xt1bT7mdxqoLAmdRdDbqmI=
X-Google-Smtp-Source: AGHT+IGlaccgtVXoxgdtRY0DaxB5E5oM1xLtWSVzQKwZmQedIB076PoZ1cGVyfI0Vth+zZs2F/ULAA==
X-Received: by 2002:a05:600c:8487:b0:442:d9fb:d9f1 with SMTP id 5b1f17b1804b1-44c933ed9bbmr168819085e9.4.1748444954154;
Wed, 28 May 2025 08:09:14 -0700 (PDT)
Received: from localhost ([2a02:8308:a00c:e200::ce80])
by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-450064ae525sm24810625e9.21.2025.05.28.08.09.13
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 08:09:13 -0700 (PDT)
Date: Wed, 28 May 2025 17:09:12 +0200
From: Andrew Jones <ajones@xxxxxxxxxxxxxxxx>
To: Atish Patra <atish.patra@xxxxxxxxx>
Cc: Radim =?utf-8?B?S3LEjW3DocWZ?= <rkrcmar@xxxxxxxxxxxxxxxx>,
Anup Patel <anup@xxxxxxxxxxxxxx>, Will Deacon <will@xxxxxxxxxx>,
Mark Rutland <mark.rutland@xxxxxxx>, Paul Walmsley <paul.walmsley@xxxxxxxxxx>,
Palmer Dabbelt <palmer@xxxxxxxxxxx>, Mayuresh Chitale <mchitale@xxxxxxxxxxxxxxxx>,
linux-riscv@xxxxxxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, Palmer Dabbelt <palmer@xxxxxxxxxxxx>, kvm@xxxxxxxxxxxxxxx,
kvm-riscv@xxxxxxxxxxxxxxxxxxx, linux-riscv <linux-riscv-bounces@xxxxxxxxxxxxxxxxxxx>
Subject: Re: [PATCH v3 9/9] RISC-V: KVM: Upgrade the supported SBI version to
3.0
Message-ID: <20250528-ff9f6120de39c3e4eefc5365@orel>
References: <20250522-pmu_event_info-v3-0-f7bba7fd9cfe@xxxxxxxxxxxx>
<20250522-pmu_event_info-v3-9-f7bba7fd9cfe@xxxxxxxxxxxx>
<DA3KSSN3MJW5.2CM40VEWBWDHQ@xxxxxxxxxxxxxxxx>
<61627296-6f94-45ea-9410-ed0ea2251870@xxxxxxxxx>
<DA5YWWPPVCQW.22VHONAQHOCHE@xxxxxxxxxxxxxxxx>
<20250526-224478e15ee50987124a47ac@orel>
<ace8be22-3dba-41b0-81f0-bf6d661b4343@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <ace8be22-3dba-41b0-81f0-bf6d661b4343@xxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 07:16:11AM -0700, Atish Patra wrote:
> On 5/26/25 4:13 AM, Andrew Jones wrote:
> > On Mon, May 26, 2025 at 11:00:30AM +0200, Radim KrÄ?máÅ? wrote:
> > > 2025-05-23T10:16:11-07:00, Atish Patra <atish.patra@xxxxxxxxx>:
> > > > On 5/23/25 6:31 AM, Radim KrÄ?máÅ? wrote:
> > > > > 2025-05-22T12:03:43-07:00, Atish Patra <atishp@xxxxxxxxxxxx>:
> > > > > > Upgrade the SBI version to v3.0 so that corresponding features
> > > > > > can be enabled in the guest.
> > > > > >
> > > > > > Signed-off-by: Atish Patra <atishp@xxxxxxxxxxxx>
> > > > > > ---
> > > > > > diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h
> > > > > > -#define KVM_SBI_VERSION_MAJOR 2
> > > > > > +#define KVM_SBI_VERSION_MAJOR 3
> > > > > I think it's time to add versioning to KVM SBI implementation.
> > > > > Userspace should be able to select the desired SBI version and KVM would
> > > > > tell the guest that newer features are not supported.
> >
> > We need new code for this, but it's a good idea.
> >
> > > >
> > > > We can achieve that through onereg interface by disabling individual SBI
> > > > extensions.
> > > > We can extend the existing onereg interface to disable a specific SBI
> > > > version directly
> > > > instead of individual ones to save those IOCTL as well.
> > >
> > > Yes, I am all in favor of letting userspace provide all values in the
> > > BASE extension.
> >
>
> We already support vendorid/archid/impid through one reg. I think we just
> need to add the SBI version support to that so that user space can set it.
>
> > This is covered by your recent patch that provides userspace_sbi.
>
> Why do we need to invent new IOCTL for this ? Once the user space sets the
> SBI version, KVM can enforce it.
If an SBI spec version provides an extension that can be emulated by
userspace, then userspace could choose to advertise that spec version,
implement a BASE probe function that advertises the extension, and
implement the extension, even if the KVM version running is older
and unaware of it. But, in order to do that, we need KVM to exit to
userspace for all unknown SBI calls and to allow BASE to be overridden
by userspace. The new KVM CAP ioctl allows opting into that new behavior.
The old KVM with new VMM configuration isn't totally far-fetched. While
host kernels tend to get updated regularly to include security fixes,
enterprise kernels tend to stop adding features at some point in order
to maximize stability. While enterprise VMMs would also eventually stop
adding features, enterprise consumers are always free to use their own
VMMs (at their own risk). So, there's a real chance we could have
deployments with older, stable KVM where users want to enable later SBI
extensions, and, in some cases, that should be possible by just updating
the VMM -- but only if KVM is only acting as an SBI implementation
accelerator and not as a userspace SBI implementation gatekeeper.
Thanks,
drew
>
> > With that, userspace can disable all extensions that aren't
> > supported by a given spec version, disable BASE and then provide
> > a BASE that advertises the version it wants. The new code is needed
> > for extensions that userspace still wants KVM to accelerate, but then
> > KVM needs to be informed it should deny all functions not included in
> > the selected spec version.
> >
> > Thanks,
> > drew
> >
> > _______________________________________________
> > linux-riscv mailing list
> > linux-riscv@xxxxxxxxxxxxxxxxxxx
> > http://lists.infradead.org/mailman/listinfo/linux-riscv
>
Return-Path: <linux-kernel+bounces-665692-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 42F0141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:09:43 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 9FD74170D47
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:09:42 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 5155928751C;
Wed, 28 May 2025 15:09:35 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="bPcgilMn"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5A48627815C
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:09:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444974; cv=none; b=hJsBcD6w0YyL3kD7wJvizn/Y5xJqEkuwfXB+tQS/f+tHdvDhf5I59t1jshW8lGYU8HLz7Ry8uylEvrPB77IF6HX5IBvHEqjPlF3hPJPr8K0OzC5tltfo3kvucOKEq30g49cY1t/R9kt9NJ1LT1RYDsAW/AF6YC7ZB84fB5mi2O8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444974; c=relaxed/simple;
bh=TGXEr7l1J7mfsMG6BxAhgUCbUt3uGdg19nubkOmfw+M=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=sRx7Dg4lYloT8Z9zqzaXedZ5wEpJC7/3zCpwSY/bYwedoHVdlAR1KNl0GBT3H9P4j5xtawGWEZHpO7LGTo7u9U//5je/4mBI2H05bc/zw7GLSzdYC8a6NEKjNDEAsHFAbhJ0HFEKrVeUMSHCTvUyXWZuMezB4RSPKImbDnK8Ibs=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=bPcgilMn; arc=none smtp.client-ip=170.10.129.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748444971;
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:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references:autocrypt:autocrypt;
bh=ZtG4pUsrLMzZSuXA5vOxqh/0qXdhBG7xRWPrPlWmp+s=;
b=bPcgilMnS0OpndW2/TabNrnnzqI3EnZ7tnwo8IYmDqrc+noy4cdqqCyZXIqUrIvoEeJKIL
eWCb/7xyLXQpJVvnA6Y84Hot7QalDodoM0zHXxs2QZTTwy+LIVxX49vze5oZvkj4Wh5CEg
Td5IWYGusX/C896SJQHzqhYuqDRCt/E=
Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com
[209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS
(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
us-mta-669-Si9wymjXPkih3SKSQLZVSw-1; Wed, 28 May 2025 11:09:29 -0400
X-MC-Unique: Si9wymjXPkih3SKSQLZVSw-1
X-Mimecast-MFC-AGG-ID: Si9wymjXPkih3SKSQLZVSw_1748444969
Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-43eed325461so29663135e9.3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:09:29 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748444969; x=1749049769;
h=content-transfer-encoding:in-reply-to:organization:autocrypt
:content-language:from:references:cc:to:subject:user-agent
:mime-version:date:message-id:x-gm-message-state:from:to:cc:subject
:date:message-id:reply-to;
bh=ZtG4pUsrLMzZSuXA5vOxqh/0qXdhBG7xRWPrPlWmp+s=;
b=J5ZsApJJcaiSPdHgiq49TGwP6Lz1/qdHZeE9tPlm0ufqCif0Lz0cysrJuZ6H9HuDEo
d8u45uBFHwmjuq/68NrLhEtuM6Nk+M8pA6VQEXyILiFPrUWqtXTZNA7Wdsj7MyJIkFAV
5FGKqST8zYDKZXwXAwoy1VRJtYYAa7L96MMleHFkOeKVwPQ+56Hg/vvJHfTC5ux1GSq5
yndYjW/6dqLcmV2qpi0AMwC/jkxZfFTuimz/eBbHxJNjlUwZr5nAWuVtSCQcoON/IlZF
NGHqROviaOt2Jw6RLFjtKRCN2d64YCre+/O/FK9MiPBbYC4NIaUvf+yFmVWHumHm7h5t
RzyQ==
X-Forwarded-Encrypted: i=1; AJvYcCXvdsSM7mBLUqrqUp8ipvFmS6UdJjQQ1y9VUxM8Jl1P0Ls5zfmY3nDw6oUFZJba3IANn48s5OnLWLcqplA=@vger.kernel.org
X-Gm-Message-State: AOJu0YzKZSRV/8F4CYgYK4MrwwtOQM9b63ZXfipTF3O1E/6YOafBcRLe
DEFGGABjXkkqeLYfw2MyWOb9qncb+K0V8eT7qhFbJDAlRzR9SIvk27vzLlKfSi3n26+QPxmHBy3
TKdZy3ugDVRQGMMIGWzMhP7q24tWB8dGHniEtZwr/0wJAkDmShdgRkZjulZht3Z0Svw==
X-Gm-Gg: ASbGncsQh2SXTwp7xklMmyN4MVnjVUHdYJyP/3RmT8YDLyQjVeYGVEUZcegfmRsp0U5
wLp1qB6XXgw4/AfrbibZ3swQMbMyo2IQrCwX/EPRF7Ba3WGNIO0Hf62/q+QDXBeFWhzWTWtz8Gz
kwSrlg8hLmsE6xdK8wtqHDpEoMOW3oPd7kQMgzMIAc+R22CFT7ZgA4Rz/f5N5sthsIdSPUA1VSK
7Nl6+M9RhVXvl3P+AfTwVO+BIOvFBn/7789SeYkzwKVYTeqbvThoTpM5RaPraMOF/aW2NibtfOw
nPZgI0BVrsdlKnKEwHDQgbv008gLMQCDk8Gg8I0KzFEIL/SaS761W+36OQUEti12b4xtWaeApUV
zoLXF15HDXE0pCQ3JdqZm9jMPerSqpjNKu3tnyP0=
X-Received: by 2002:a05:600c:6215:b0:43d:563:6fef with SMTP id 5b1f17b1804b1-44c9493e615mr149339715e9.21.1748444968654;
Wed, 28 May 2025 08:09:28 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IEk5kAdrFJFRNmWPkWjusixhiFB3w3jWwCIaQbToe4XMiw4O+ZQo3iB46t4RqFj+pR/iFF74w==
X-Received: by 2002:a05:600c:6215:b0:43d:563:6fef with SMTP id 5b1f17b1804b1-44c9493e615mr149339245e9.21.1748444968184;
Wed, 28 May 2025 08:09:28 -0700 (PDT)
Received: from ?IPV6:2003:d8:2f30:ec00:8f7e:58a4:ebf0:6a36? (p200300d82f30ec008f7e58a4ebf06a36.dip0.t-ipconnect.de. [2003:d8:2f30:ec00:8f7e:58a4:ebf0:6a36])
by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-450064ae786sm24445705e9.23.2025.05.28.08.09.27
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 08:09:27 -0700 (PDT)
Message-ID: <629bb87e-c493-4069-866c-20e02c14ddcc@xxxxxxxxxx>
Date: Wed, 28 May 2025 17:09:26 +0200
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH v3] mm/hugetlb: fix a deadlock with pagecache_folio and
hugetlb_fault_mutex_table
To: Peter Xu <peterx@xxxxxxxxxx>, Oscar Salvador <osalvador@xxxxxxx>
Cc: Gavin Guo <gavinguo@xxxxxxxxxx>, linux-mm@xxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, muchun.song@xxxxxxxxx,
akpm@xxxxxxxxxxxxxxxxxxxx, mike.kravetz@xxxxxxxxxx, kernel-dev@xxxxxxxxxx,
stable@xxxxxxxxxxxxxxx, Hugh Dickins <hughd@xxxxxxxxxx>,
Florent Revest <revest@xxxxxxxxxx>, Gavin Shan <gshan@xxxxxxxxxx>
References: <20250528023326.3499204-1-gavinguo@xxxxxxxxxx>
<aDbXEnqnpDnAx4Mw@localhost.localdomain> <aDcl2YM5wX-MwzbM@x1.local>
From: David Hildenbrand <david@xxxxxxxxxx>
Content-Language: en-US
Autocrypt: addr=david@xxxxxxxxxx; keydata=
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
WNyWQQ==
Organization: Red Hat
In-Reply-To: <aDcl2YM5wX-MwzbM@x1.local>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 28.05.25 17:03, Peter Xu wrote:
> On Wed, May 28, 2025 at 11:27:46AM +0200, Oscar Salvador wrote:
>> On Wed, May 28, 2025 at 10:33:26AM +0800, Gavin Guo wrote:
>>> There is ABBA dead locking scenario happening between hugetlb_fault()
>>> and hugetlb_wp() on the pagecache folio's lock and hugetlb global mutex,
>>> which is reproducible with syzkaller [1]. As below stack traces reveal,
>>> process-1 tries to take the hugetlb global mutex (A3), but with the
>>> pagecache folio's lock hold. Process-2 took the hugetlb global mutex but
>>> tries to take the pagecache folio's lock.
>>>
>>> Process-1 Process-2
>>> ========= =========
>>> hugetlb_fault
>>> mutex_lock (A1)
>>> filemap_lock_hugetlb_folio (B1)
>>> hugetlb_wp
>>> alloc_hugetlb_folio #error
>>> mutex_unlock (A2)
>>> hugetlb_fault
>>> mutex_lock (A4)
>>> filemap_lock_hugetlb_folio (B4)
>>> unmap_ref_private
>>> mutex_lock (A3)
>>>
>>> Fix it by releasing the pagecache folio's lock at (A2) of process-1 so
>>> that pagecache folio's lock is available to process-2 at (B4), to avoid
>>> the deadlock. In process-1, a new variable is added to track if the
>>> pagecache folio's lock has been released by its child function
>>> hugetlb_wp() to avoid double releases on the lock in hugetlb_fault().
>>> The similar changes are applied to hugetlb_no_page().
>>>
>>> Link: https://drive.google.com/file/d/1DVRnIW-vSayU5J1re9Ct_br3jJQU6Vpb/view?usp=drive_link [1]
>>> Fixes: 40549ba8f8e0 ("hugetlb: use new vma_lock for pmd sharing synchronization")
>>> Cc: <stable@xxxxxxxxxxxxxxx>
>>> Cc: Hugh Dickins <hughd@xxxxxxxxxx>
>>> Cc: Florent Revest <revest@xxxxxxxxxx>
>>> Reviewed-by: Gavin Shan <gshan@xxxxxxxxxx>
>>> Signed-off-by: Gavin Guo <gavinguo@xxxxxxxxxx>
>> ...
>>> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
>>> index 6a3cf7935c14..560b9b35262a 100644
>>> --- a/mm/hugetlb.c
>>> +++ b/mm/hugetlb.c
>>> @@ -6137,7 +6137,8 @@ static void unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma,
>>> * Keep the pte_same checks anyway to make transition from the mutex easier.
>>> */
>>> static vm_fault_t hugetlb_wp(struct folio *pagecache_folio,
>>> - struct vm_fault *vmf)
>>> + struct vm_fault *vmf,
>>> + bool *pagecache_folio_locked)
>>> {
>>> struct vm_area_struct *vma = vmf->vma;
>>> struct mm_struct *mm = vma->vm_mm;
>>> @@ -6234,6 +6235,18 @@ static vm_fault_t hugetlb_wp(struct folio *pagecache_folio,
>>> u32 hash;
>>>
>>> folio_put(old_folio);
>>> + /*
>>> + * The pagecache_folio has to be unlocked to avoid
>>> + * deadlock and we won't re-lock it in hugetlb_wp(). The
>>> + * pagecache_folio could be truncated after being
>>> + * unlocked. So its state should not be reliable
>>> + * subsequently.
>>> + */
>>> + if (pagecache_folio) {
>>> + folio_unlock(pagecache_folio);
>>> + if (pagecache_folio_locked)
>>> + *pagecache_folio_locked = false;
>>> + }
>>
>> I am having a problem with this patch as I think it keeps carrying on an
>> assumption that it is not true.
>>
>> I was discussing this matter yesterday with Peter Xu (CCed now), who has also some
>> experience in this field.
>>
>> Exactly against what pagecache_folio's lock protects us when
>> pagecache_folio != old_folio?
>>
>> There are two cases here:
>>
>> 1) pagecache_folio = old_folio (original page in the pagecache)
>> 2) pagecache_folio != old_folio (original page has already been mapped
>> privately and CoWed, old_folio contains
>> the new folio)
>>
>> For case 1), we need to hold the lock because we are copying old_folio
>> to the new one in hugetlb_wp(). That is clear.
>
> So I'm not 100% sure we need the folio lock even for copy; IIUC a refcount
> would be enough?
The introducing patches seem to talk about blocking concurrent migration
/ rmap walks.
Maybe also concurrent fallocate(PUNCH_HOLE) is a problem regarding
reservations? Not sure ...
For 2) I am also not sure if we need need the pagecache folio locked; I
doubt it ... but this code is not the easiest to follow.
--
Cheers,
David / dhildenb
Return-Path: <linux-kernel+bounces-665693-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id DCA8D41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:09:58 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 382007A77E4
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:08:40 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 9916128BA8E;
Wed, 28 May 2025 15:09:41 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="tOJA9MQp"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id CAE05283683;
Wed, 28 May 2025 15:09:40 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748444980; cv=none; b=td9QaBsmnghCuZPTvHoNm4Y82GiNzpRuxE/RZFKpRN7SSlHNWHpI3vMVi9SB9e8Vz8X1RUgyLJtse+VQRoaseb3Ooif/TRTV/pmIZSx1KHJufWT9Td3X6l5/j2qDxVmTJxrVcpVGxXgAQVmVKQG978FZZ5lKD/zbPAEZxC3zXRI=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748444980; c=relaxed/simple;
bh=OHgErOC2T87wT7U4nv7ZvSNfiXesXTEy0off6Qrka8U=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=fJOT98GNaH7jlNMWDlf/vwYmDBfLgr1zWlOsNrAY3qKQA2BBE8iPr1O82Lm8D9pSfrvmCczxXtJpTt94ODTochO1IqO2BveZlkjuBoKvEvbap4CshMuJ+Ewvh9GUFVg/EJoh/er287zqHsO8/LzqbcJ6qfRq83kPPWBhdm6xXlo=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=tOJA9MQp; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6690AC4CEEE;
Wed, 28 May 2025 15:09:38 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748444980;
bh=OHgErOC2T87wT7U4nv7ZvSNfiXesXTEy0off6Qrka8U=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=tOJA9MQpq7xBq2cXfdjW9VQRwG92p6y13vY2KLQNsznfEGa9ElM8ioQbH8r0FNx08
x/h42gsneLyDLLzbfPdAeE+w+Dppj5J0aRgQlR86I5mP8n7iaFDH0a/xfIKFg4HlPR
AH6Udv/j5AFQG+VwBplGNanSYMLBGZWxc/8gW7IkuBUWlQs27tFue+1hJyMb5PkMpl
s5SNg43N8LCulam2deS+2pm6vIlErfIbbbsTSD9TIdHyCKp+gRzagVQvwGyu5EdrDX
jX0+7FBxetsOZnZkaOW/F9Goj47IEZO9WPBJR8YnXViN4NEmw7WkubeSDt6GuuPuy3
q9mmjQTpCT6QQ==
Date: Wed, 28 May 2025 16:09:35 +0100
From: Mark Brown <broonie@xxxxxxxxxx>
To: Mohammad Rafi Shaik <mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
Cc: Srinivas Kandagatla <srini@xxxxxxxxxx>,
Liam Girdwood <lgirdwood@xxxxxxxxx>,
Jaroslav Kysela <perex@xxxxxxxx>, Takashi Iwai <tiwai@xxxxxxxx>,
linux-sound@xxxxxxxxxxxxxxx, linux-arm-msm@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, kernel@xxxxxxxxxxxxxxxx
Subject: Re: [PATCH v1 0/1] ASoC: qcom: sc8280xp: Assign backend ops for
multi codec dai links
Message-ID: <a1b7cea8-403f-4289-a42a-541426576de7@xxxxxxxxxxxxx>
References: <20250528150716.2011707-1-mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha512;
protocol="application/pgp-signature"; boundary="e09OCX0shRhgRHcI"
Content-Disposition: inline
In-Reply-To: <20250528150716.2011707-1-mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
X-Cookie: Keep away from edge.
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
--e09OCX0shRhgRHcI
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On Wed, May 28, 2025 at 08:37:15PM +0530, Mohammad Rafi Shaik wrote:
> In the existing implementation, the link->ops assignment is
> conditioned on link->no_pcm being set, which generally happens
> when a platform entry is present. However, in scenarios where
> there is no platform but multiple codecs in the DAI link,
> backend operations (link->ops) must still be assigned to ensure
> correct codec settings.
Please don't send cover letters for single patches, if there is anything
that needs saying put it in the changelog of the patch or after the ---
if it's administrative stuff. This reduces mail volume and ensures that=20
any important information is recorded in the changelog rather than being
lost.=20
--e09OCX0shRhgRHcI
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iQEzBAABCgAdFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAmg3Jy4ACgkQJNaLcl1U
h9D9Mgf/TclVauXqxhIwsuHxnQMdM1OlfjFsQmbGlAwi3j4TX/26ttBQhGtBb0dr
n0VjN403LtF9imyqJ9wiXw17XD6uJiPjSRSS9CPlNgyXAww+xBxguV8D3zvtF6Fb
s0+0bnpjMEQqoGW0kW6YSoKz9IG4CfGbTDn99hXgbLSDnikgMkNxcNzA5AD9W5UP
dCtaXgBezIfmwkLAJWnla07FZ7oWzjTyGkieak2OIZI98WHzM8bKPkzjAf2JEv62
2QObWaZenZ+dYF3sjVq3B8h2D2SzQ+AfvrWPC2iTE0hA8XxSVn3nr3SCVBA5aArL
6KJ5N75Ou7keQ2i9pUqqMVowcHKQZQ==
=FFEa
-----END PGP SIGNATURE-----
--e09OCX0shRhgRHcI--
Return-Path: <linux-kernel+bounces-665694-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 139B241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:10:12 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 2B16E7AB62C
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:08:52 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 094B127815C;
Wed, 28 May 2025 15:10:04 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="OaGk8XuH"
Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11013029.outbound.protection.outlook.com [52.101.72.29])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2988B28B7ED;
Wed, 28 May 2025 15:09:59 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.29
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445002; cv=fail; b=CEK8E7P3qcntijS6TNhAvu9dA2A3JfolkiLcaXb/YWcpVmFx8EBDmD4MnaoPpAwBN8E/asvLSX8ryD8M4t67knVfeHjVyg5tbNuA66un8LaBW3M4+TCDvMcyUgTXqZSFSNqHdotPiV4cbkm+61fUd2HM28Sxcb5CrAYNXITLX5s=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445002; c=relaxed/simple;
bh=wPvomujM8Ge0h8Vm42cl679UI5Rhl8TGtkSCTqOcqKg=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=AourF6i5aGMfNGjg3o8GyL1JgWv/w3q+mJaQHgtwzRUpLWWg4w6mOBmn7D1xUOMcXFvX4HqoSOqJAIUNm0AOe7/xqJg1LT+KwJjNkp3xyBCSrbGL95EXw6a2P6YXzLtLhtA+I4qdL2XU2j4gHC5QHqKVG/2VXmOLsNB7iJvkI2s=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=OaGk8XuH; arc=fail smtp.client-ip=52.101.72.29
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=NjBYfJQeqUHWFCEFV1OxSn5+RG7xuTPJ5YHWWSMu1UAmWui3FycuXBMzly0GiegPwQ7NFp6p8mt+tvGdd5zuoC5cgJC8L4Abp69RH6DkwzIH2QdM9OwKH88b/qDqLB8DiNTPT9U6zax9y0VDcLnWqoIEdQKQBAasuuPZ9+uqTaH2jSYWX2WqANHo5YIn21Ge8XWlvMhyPiwI2geBjlOZV0wMxcZwq2zye4O8rsx1RkAA/4ha1xKAJe682wWXWKHyrBWcBLRoqLGXxurBhnkE8hqg9AsewEYBLatEzwsOe6cDTgzeQG6U2u01npY6WpVoamsqWG4iKfRXsuwljtrurg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=ps8PukVP0TSbT4CWFwXwDiyx++IXKP5NdORyr0t4W2w=;
b=MxAyuusGVkk2LFEGsHmYqaNXc/GKV4bdEjH3yqnNzUandgc+kvSl3Q+wbPsOB2yzkjFumBEHuQDsF7Djz6+gBriK1XqV1aAJZ2b6+9EgE7lPu1r+TWNLdVWXb+8QzvHPbPdG7VGIlKo+fJBR+TBIwrYvhanxkwXhlg5l9mQ+RDg/3jlVEGWmyHjqPfS7hOE6ValAeTh9aBm4YwoOf7xt5Sd23RXdtvgaEey6wiXoDBnDnjGnF3dIX+Cb3u/ZFZwyQp8wWuC5GAc43wdX4dMTHiV1mEN+HOIGqlZU/uRBVZnEPvj5Uub8excK65LTPvirAlIoMu3z0RE5SEnfX1R9fg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=ps8PukVP0TSbT4CWFwXwDiyx++IXKP5NdORyr0t4W2w=;
b=OaGk8XuHeOPJnnocjqM9IUVw9UKY9AwLI8V5uwWnIbJ3vIHbAzA6Nxb5h7dQOoEsYr119tPGdtcSaJxEO6hvQkXNZBAQ0KiBw3BsWSDZfhScrBvbabsFZqVNnbUfjuoXzQcqsdULdcDXLsFRxOqL9wjk3xfKKS7rYgRtJpjKkayDRWB5Fo1314s/pEIx2VszBsgvz2le20ShFT3Ey01d+SgXv8OGaq3BCpscAeGKciQf8BVAJoaEOr3JOmx5bZ9XvGvautoolNqIEb0odM5vd/V3ywVRod0BZNmh8Eb5L4z5VGQc/ZOOeBtTTiKkiwbQiGH4CxgINTA9JyD8+dIjYA==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by PA3PR04MB11250.eurprd04.prod.outlook.com (2603:10a6:102:4aa::21) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.22; Wed, 28 May
2025 15:09:48 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
15:09:47 +0000
Date: Wed, 28 May 2025 11:09:38 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: Wei Fang <wei.fang@xxxxxxx>
Cc: robh@xxxxxxxxxx, krzk+dt@xxxxxxxxxx, conor+dt@xxxxxxxxxx,
shawnguo@xxxxxxxxxx, s.hauer@xxxxxxxxxxxxxx, kernel@xxxxxxxxxxxxxx,
festevam@xxxxxxxxx, devicetree@xxxxxxxxxxxxxxx, imx@xxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH 3/3] arm64: dts: imx95: add SMMU support for NETC
Message-ID: <aDcnMnAJO+YVQ6rJ@lizhi-Precision-Tower-5810>
References: <20250528083433.3861625-1-wei.fang@xxxxxxx>
<20250528083433.3861625-4-wei.fang@xxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528083433.3861625-4-wei.fang@xxxxxxx>
X-ClientProxiedBy: SJ0PR13CA0233.namprd13.prod.outlook.com
(2603:10b6:a03:2c1::28) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|PA3PR04MB11250:EE_
X-MS-Office365-Filtering-Correlation-Id: 55ad0a3c-2b2d-4601-ed56-08dd9df9af43
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|366016|376014|1800799024|7416014|52116014|38350700014;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?TTZ96uP0o59kCv4XpnWJRxxEhSPjwHmYYqg3geVXXK6d+6RhwePmtmME1K/A?=
=?us-ascii?Q?e+XIC3zb/9m8P/vI8EKUqU9iXicPwto7BUh3AwOL+Mfrt0bUe9YYOjVbRmRq?=
=?us-ascii?Q?Rg4jvBJ6Gi19Gwuo6651s7umNCRfpHm6SthzkijNcVHd0sXNP8Ff8tueMHoK?=
=?us-ascii?Q?rjtZQn0MaiRp2ci//GcIgjrsI4/iamMF+Dod5K/HEMFi53I/C3s0WfE9976p?=
=?us-ascii?Q?dO7d6sg6DFZ+rAVm94g8K966X4Y74Qtf8i1rSra4njpGJllueGWRQKpKp7cv?=
=?us-ascii?Q?DH2qIKf2CgUsDVGc71n5t5AnJldwQfGoj+2aVC3ul0hLU5eb0fPhDYLGHBfN?=
=?us-ascii?Q?McvXOyfnIXEzotLmCHIlw8CHjZjGC9aC7NRFn2qKJYs8lT6RsjamzUexhbAf?=
=?us-ascii?Q?DRIMSNm67AEENUe4MiRqpEvbHhwfm1zrnwyFOwfzF5VnJ5wFH0SSuxRf8K9T?=
=?us-ascii?Q?D/cZv2LreD259+RWQsqcRxAQRbyOtFJMhTlDycilPlGdWmnAIbLYMDL6/ht+?=
=?us-ascii?Q?kOfCve0+vP7emuFL2+/KWPlDMlMx/rgomqEscvZUcqHFycwy06upzybjxDUz?=
=?us-ascii?Q?Mf+5kT480T7Hc0gYSGQbTcxFpjCeDnyp1tko/gB52LH7gUW1avU+MaAIhAJg?=
=?us-ascii?Q?DKb8ba/HfXNUT6av6AIdI+p/zPWkma28oa8P5jBeeQAqRgeebkqu0+ut3UqW?=
=?us-ascii?Q?fBlSpnVuQEmivpdT7/SN5DorWgBvSLp588O+1uiuyB+zCNmJE52hmRbXA2Xx?=
=?us-ascii?Q?DYt8zgFRaYavNv1VcKC38pd+h5z1CW9pa8tvFbnC9o0BHNvsr0dVnU+hpHlV?=
=?us-ascii?Q?QqIppW3ae5aDTzjS7HRe00s9OLPqpbW9x88qdzDPDGge87EICTODcwHL3b6O?=
=?us-ascii?Q?Gj+FmqdFRuJOr9eEjJxTy2T+YwHUrcNYG3gbO0JFQt1o2kps3zI5l/zexrzl?=
=?us-ascii?Q?IKIBGdPAr8Gkgi/c/ntq16fncdlP6D0oS2Jb9kQydIzTfuCky1Ab6VEVQyCU?=
=?us-ascii?Q?oHAxEVUr5LJ+cY7uAeGehAsIC9UP4hV+ixlETcEuPVoaxCqFQMvbLjv9urri?=
=?us-ascii?Q?JyLWjwLTfmgR5C9hvLtbSTrNH6LVRCKEOtKiU+tc2qmhOR9WA/xHwoLTPUTO?=
=?us-ascii?Q?rFu/MlYNCAajzdx9QFrPyJ5v1IhtVrVkptQpgjNmEnwgEp7h8LfARlfrFvaY?=
=?us-ascii?Q?8GlqznVCEk/16cZWlm/1uEPG5Y5VhhChRev2hWVEAQ2YS/Mxh/lpccBa2UKm?=
=?us-ascii?Q?1h9xq0o0fzMSKr6exnc2lz1WloQ6oZlUW7tsVkAGAoSumNJy7Cp4BMMgNz4X?=
=?us-ascii?Q?zApd1vz2VskV3F2DRAcbAgND46ldAMI7rNEG4XEIHYsRzBvzmXzNORJjlPRd?=
=?us-ascii?Q?3tCvp1vxi0wY3gU7f0Kc09WQTH7+LGiT8mDIBntJ2kJvaoDpS/5uKNvJFGCX?=
=?us-ascii?Q?QgUfDn+/fkRAgTWDDrydLwCIA9kHkUJILBTu/ctlf1VTAe0o8zmng6Hz1KpX?=
=?us-ascii?Q?3Z6jRm5fyIqw0nU=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(7416014)(52116014)(38350700014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?LY7z6ZPMIx8mLmYKm63f0WhYYRqO4duwjdP2yEgnFVRBhrTYs7mp2CikB1Q4?=
=?us-ascii?Q?B3obRXpaSVLoFJ8240srGWZdRLtL5RHPUsB5WehbtKeWWovzqKEKuhNYdY7M?=
=?us-ascii?Q?jjtkvYnwbGSkvLJfdgLKyfO7VK4PpxaOAXpGvweAPVEcgUv6XrzVABG2DoXW?=
=?us-ascii?Q?yf76dBdwd1iyZUVnoqr/oVfrlF/G2Sprsyja3G7Yab0SyqyxTnR3lf8/02EH?=
=?us-ascii?Q?TdZEAugQNPNwW4nL3qsw7H2Whj9oz7Jprd0fdkVbAWcorEtvvybsxb/PgtH2?=
=?us-ascii?Q?LUZQcgiMLQx37v/4bu8w0hq2yE9viS4r1qc6gJ/iOuiXt1XG0oAE+LEh3khh?=
=?us-ascii?Q?mZNUrcUH0hablqCm91yj9ywoajOY7IyGEO+kt9NS6u8wq0fzPeS69zbUR1IW?=
=?us-ascii?Q?swdrL60EoxJAga/ZRhl7z0Q4iRBew6DDnc4HE2kO7tFMNNQm8cJ0YtKXXu7T?=
=?us-ascii?Q?W+ppsgjYrFhiXcEg1gpBRJN3bD1e9Uy+BAEPUM4WozbnT3L1oQQOlEo8cfoT?=
=?us-ascii?Q?sK3FA8cGQBCh4hcNOOviek110ejFva1aP67aIdd30cjQ2eNyOwbTjxPzrDEg?=
=?us-ascii?Q?uA55Wmhh0MjnKgRuK+6JNXTatMNFldaCYXuQmyQf4yg3eDGz2Je+WwviNger?=
=?us-ascii?Q?iTDWnyZZeAa9lf38qRsnB6ZZJeefnHdSZv+e/BKQDPrjJ1rDEH4YJqK3ywgR?=
=?us-ascii?Q?KvYH9CHWPN3zeSEjrgKAEOUwiOHFEyQCYiBI00BWIRo+KdEbjXxabLJLUaKh?=
=?us-ascii?Q?ir+guqbZcv3AAI220MFghdy2LqbqhmA5BSqydyJCwnoHQLKHnFnPvTNWfGJb?=
=?us-ascii?Q?zloA6yzRHjwTrt7w+g+RuSsWREeQwb8WE71tUea4CM+bPbT7jiwadTIufPrL?=
=?us-ascii?Q?BhbXy2gXHQXqZfJtj0/xySTqg8ljAxfZwFd2SDIGRPNMUkiwiAqZ0Xf/FX5m?=
=?us-ascii?Q?jlFWaufTH2mk2/sUvSM8yt933LgVIi/g5HswPbaCqYqMrhQHyA0LeboclsUx?=
=?us-ascii?Q?70ggLU/UqqCZJKpCebc4WhxcrEhaNgHwSVBhVrqkoFble/BUgwo/8c3184qT?=
=?us-ascii?Q?Hg8h2mADGE/Bpa/H1MCn3QosH2G+w3Da6ADvvVRQNOzX9NapOYZ9lsoP7NwW?=
=?us-ascii?Q?MdA0vQQRHXNmbs32O4j2mQZCZDPd7jGOD4gSxCuMWRXQZofJVqr8CPPOglBn?=
=?us-ascii?Q?hNRtYeone/qCh2q66GC6EHRbk+ZKRrqoX+FNH1DG4nQ3PE+Xyd22rzv0iz5T?=
=?us-ascii?Q?g0i6QdpaCUfXqeSNqR0W5AYtVxplty6C+1H64DJzPVdhqpIZdaRRtb3WYS1y?=
=?us-ascii?Q?ytlD2IBPLCJMhlBWWfI/lXcUWZPCJVki543HytjQp1ElOTFLzflgyORU0VVQ?=
=?us-ascii?Q?4mHU06oZBWk/EDJ5LO1Bx87mMCBLJo/ZH7Z9bLjY2K5Zxo6Ghq16J4MVXBY1?=
=?us-ascii?Q?lr3Ill3fshustMqVrkFUaOeyRDCHBOhG57Qs3Cu9yFQKlwT3d5XMexFmQt66?=
=?us-ascii?Q?eRS+sMfHgxf/Lkxya7aw2Jh4kRPxLJprhNCxSYYAXwO68frwPamnzxj3FcDy?=
=?us-ascii?Q?N8EmIWXhR40SEO+CRQ0hz4RyPikFfgTRvppN0QJh?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 55ad0a3c-2b2d-4601-ed56-08dd9df9af43
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:09:47.3273
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 3zJwndR+c8BNlVl4oL+22gmBYEbAeJnHP/bi5eZx7tzj9FpjLXeOiKrHxrhpDaKVH17dN7s4xiesltmMBbHDJA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA3PR04MB11250
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 04:34:33PM +0800, Wei Fang wrote:
> The i.MX95 NETC supports SMMU, so add SMMU support.
>
> Signed-off-by: Wei Fang <wei.fang@xxxxxxx>
> ---
> arch/arm64/boot/dts/freescale/imx95-15x15-evk.dts | 8 ++++++++
> arch/arm64/boot/dts/freescale/imx95.dtsi | 8 ++++++++
> 2 files changed, 16 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/freescale/imx95-15x15-evk.dts b/arch/arm64/boot/dts/freescale/imx95-15x15-evk.dts
> index 9f4d0899a94d..e9a5fb36f5d0 100644
> --- a/arch/arm64/boot/dts/freescale/imx95-15x15-evk.dts
> +++ b/arch/arm64/boot/dts/freescale/imx95-15x15-evk.dts
> @@ -494,6 +494,14 @@ &netc_bus0 {
> <0x60 &its 0x66 0x1>, //ENETC1 VF1
> <0x80 &its 0x64 0x1>, //ENETC2 PF
> <0xc0 &its 0x67 0x1>;
> + iommu-map = <0x0 &smmu 0x20 0x1>,
> + <0x10 &smmu 0x21 0x1>,
> + <0x20 &smmu 0x22 0x1>,
> + <0x40 &smmu 0x23 0x1>,
> + <0x50 &smmu 0x25 0x1>,
> + <0x60 &smmu 0x26 0x1>,
> + <0x80 &smmu 0x24 0x1>,
> + <0xc0 &smmu 0x27 0x1>;
Do you need iommu-map-mask to mask bus id in case difference probe order
with pcie node?
Frank Li
> };
>
> &netc_emdio {
> diff --git a/arch/arm64/boot/dts/freescale/imx95.dtsi b/arch/arm64/boot/dts/freescale/imx95.dtsi
> index 632631a29112..32a91d7b51e5 100644
> --- a/arch/arm64/boot/dts/freescale/imx95.dtsi
> +++ b/arch/arm64/boot/dts/freescale/imx95.dtsi
> @@ -1861,6 +1861,14 @@ netc_bus0: pcie@4ca00000 {
> <0x90 &its 0x65 0x1>, //ENETC2 VF0
> <0xa0 &its 0x66 0x1>, //ENETC2 VF1
> <0xc0 &its 0x67 0x1>; //NETC Timer
> + iommu-map = <0x0 &smmu 0x20 0x1>,
> + <0x10 &smmu 0x21 0x1>,
> + <0x20 &smmu 0x22 0x1>,
> + <0x40 &smmu 0x23 0x1>,
> + <0x80 &smmu 0x24 0x1>,
> + <0x90 &smmu 0x25 0x1>,
> + <0xa0 &smmu 0x26 0x1>,
> + <0xc0 &smmu 0x27 0x1>;
> /* ENETC0~2 and Timer BAR0 - non-prefetchable memory */
> ranges = <0x82000000 0x0 0x4cc00000 0x0 0x4cc00000 0x0 0xe0000
> /* Timer BAR2 - prefetchable memory */
> --
> 2.34.1
>
Return-Path: <linux-kernel+bounces-665695-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id C91F741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:10:36 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 9DE281BC802F
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:10:49 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 7650328C010;
Wed, 28 May 2025 15:10:24 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="UUzVmy7F"
Received: from mail-qt1-f170.google.com (mail-qt1-f170.google.com [209.85.160.170])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7E75328B7F9
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:10:21 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.170
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445023; cv=none; b=rkZ7QPJstBofR47tn0Sl6J1/JPgC2cng8GH1/UdMNL7p6YgW1VaEmAUAiNhei39dvmju7Jp4bVQkW0Uf/CQhrEVVlOSQtGfiDK3/xJndukb1MDRW+XPYAp4v/zz7qBkPqcPlS702QLwk6/NgNjh8gVInO49SgHxsh4z6RkOFlXw=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445023; c=relaxed/simple;
bh=daJUFB82BXFmTD9y4m1Fz807QYg9ksryLBhg8OMWiJA=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=lXD+32Kh0kXv9grzfLLUuA2A1dCbAMnrBO0SM5/l0SBkqj5i2g5IiJe7sI402mLEarGuqHD6dFzNHLXZLRkkIiK1N9iPboCkJdvq+DpVg3Acy7dZ+XtUZ52YpK803gMxlBl7OGs6VtHzwXqvNcjdO55x4IufE49KvnwXNUwC594=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=UUzVmy7F; arc=none smtp.client-ip=209.85.160.170
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com
Received: by mail-qt1-f170.google.com with SMTP id d75a77b69052e-47686580529so38804741cf.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:10:21 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=google.com; s=20230601; t=1748445020; x=1749049820; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=Xi/xcDxaQ9K4mUzGpiKOG5t5QTXiOvRNG848IheBH08=;
b=UUzVmy7FEmRfiNTq5Rb2W3bttkvGM/6X64HONcEn71dqWkxWKHv37DtwNxfFy4u0u/
513PwjUUvF4o3zrZN34yuoPtr9RRqwGBIDyoz3K/PJkiy2qNeHpmDjULKQzymL9a2jHh
s6q3hymUI9FHPzFfFz76nIUidSuGMbOwGXLNAulHvscy1+Ez6grNtWGaCwpiwg+xzKl1
HkjSVwDs83QvWog3ag/AfWFNqb2E8HW6/3LOMtmd9FbqOGBSAJepjh2FIc+I3cRMIlNw
zKYHhFGqt1hTUFBufX4sPLXwIG9ID00BxCoXQbzn7MGFuVDUeyFJemjv3aRRq47IeQPV
axcw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748445020; x=1749049820;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=Xi/xcDxaQ9K4mUzGpiKOG5t5QTXiOvRNG848IheBH08=;
b=Z3YMSZidqkYfDPljRVpqZg6D7nKbP21RP2vFgjKt3NZY9WJw/FAKc5EgHZhJsb0MNw
ZCN+o8lmDMuujsN/ugimcYJJitCothRThBShohU57EgrIL3UF4BRrwtucdYQwQ8j+vrK
NYseDjBhC0in9YrflErorfCgXqhlmz99hkC20N2IVKazQudduwKYByzoaTapgxeLId51
FM4cChh9tfsKRhJssGJptCiXCN5UxtQPdhhoibq+ePRno5OIeUXMLFNgcpFb9/4soZAx
n9Uy88eQiKyl+EIXukWslyHxZMzuirfKnoMoVkzmiY5oLb+4POxCKSSQ6mX/l5m70mBG
suZQ==
X-Forwarded-Encrypted: i=1; AJvYcCWJ9ew4iDtswiTaxy9Y0cKcKJH1zH5D1uxTHgiP2G7hw25p/97DfkXaNC4IhQ5+OukH3UktKH5tG6qx7v8=@vger.kernel.org
X-Gm-Message-State: AOJu0YyKIT8DBv3+gpWqgrLV3ylVdgxwEkZIZb/1IRzqzam6yf6XqM24
Rmk1M+SkoSkNvwgUv5KaRqxe3NTKabPnPthBkXQmKCHi3TrP+i8MEt/klfH1m5iTws3L5TL0cQu
a7ykJbeKAk0mn/8B2Ds3nQzxgEUaOVHcniPVw8p7C
X-Gm-Gg: ASbGnctaqwznd7z5iEoi1/fCBEjLe6ZlujpQilW1Lht4x3minGqoeA7LnOL/yiPYTxG
F/v3pqh/2kqmlzW5gijrWCxXA0LdORnOmDsMh6ETUjrj5ZRVEg5E2H8u+NtKvIHw05UpQaj/z76
yTmrsI5fqrlX7gosH2C/bjCo4g9DJK3qQB492pnOXE0rI=
X-Google-Smtp-Source: AGHT+IH5EBOb08sW8N1Ba8E/7tAm5rYg/KOK50Obzu7bpAMNg7mESqtUYP22/aoC17d7nhA0CYjtqlB2r08g4ApQqwo=
X-Received: by 2002:ac8:7097:0:b0:4a4:2fad:7cdd with SMTP id
d75a77b69052e-4a42fad94fcmr11370611cf.24.1748445019966; Wed, 28 May 2025
08:10:19 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <CAA3_Gnogt7GR0gZVZwQ4vXXav6TpXMK6t=QTLsqKOaX3Bo_tNA@xxxxxxxxxxxxxx>
<CANn89iLVq=3d7Ra7gKmTpLcMzuWv+KamYs=KjUHH2z3cPpDBDA@xxxxxxxxxxxxxx> <CAA3_GnrVyeXtLjhZ_d9=0x58YmK+a9yADfp+LRCBHQo_TEDyvw@xxxxxxxxxxxxxx>
In-Reply-To: <CAA3_GnrVyeXtLjhZ_d9=0x58YmK+a9yADfp+LRCBHQo_TEDyvw@xxxxxxxxxxxxxx>
From: Eric Dumazet <edumazet@xxxxxxxxxx>
Date: Wed, 28 May 2025 08:10:08 -0700
X-Gm-Features: AX0GCFtNSEvgJH7-KYab03XUXlyKd6cY4cl931-PX3TVLDnGRItEqAr_PdyoWIM
Message-ID: <CANn89iJN-fcx-szsR3Azp8wQ0zhXp0XiYJofQU1zqqtdj7SWTA@xxxxxxxxxxxxxx>
Subject: Re: [PATCH net] bonding: Fix header_ops type confusion
To: =?UTF-8?B?5oi455Sw5pmD5aSq?= <kota.toda@xxxxxxxxxxxxxxxxxxxxx>
Cc: netdev@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, pabeni@xxxxxxxxxx,
=?UTF-8?B?5bCP5rGg5oKg55Sf?= <yuki.koike@xxxxxxxxxxxxxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-11.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 7:36=E2=80=AFAM =E6=88=B8=E7=94=B0=E6=99=83=E5=A4=
=AA <kota.toda@xxxxxxxxxxxxxxxxxxxxx> wrote:
>
> Thank you for your review.
>
> 2025=E5=B9=B45=E6=9C=8826=E6=97=A5(=E6=9C=88) 17:23 Eric Dumazet <edumaze=
t@xxxxxxxxxx>:
> >
> > On Sun, May 25, 2025 at 10:08=E2=80=AFPM =E6=88=B8=E7=94=B0=E6=99=83=E5=
=A4=AA <kota.toda@xxxxxxxxxxxxxxxxxxxxx> wrote:
> > >
> > > In bond_setup_by_slave(), the slave=E2=80=99s header_ops are uncondit=
ionally
> > > copied into the bonding device. As a result, the bonding device may i=
nvoke
> > > the slave-specific header operations on itself, causing
> > > netdev_priv(bond_dev) (a struct bonding) to be incorrectly interprete=
d
> > > as the slave's private-data type.
> > >
> > > This type-confusion bug can lead to out-of-bounds writes into the skb=
,
> > > resulting in memory corruption.
> > >
> > > This patch adds two members to struct bonding, bond_header_ops and
> > > header_slave_dev, to avoid type-confusion while keeping track of the
> > > slave's header_ops.
> > >
> > > Fixes: 1284cd3a2b740 (bonding: two small fixes for IPoIB support)
> > > Signed-off-by: Kota Toda <kota.toda@xxxxxxxxxxxxxxxxxxxxx>
> > > Signed-off-by: Yuki Koike <yuki.koike@xxxxxxxxxxxxxxxxxxxxx>
> > > Co-Developed-by: Yuki Koike <yuki.koike@xxxxxxxxxxxxxxxxxxxxx>
> > > Reviewed-by: Paolo Abeni <pabeni@xxxxxxxxxx>
> > > Reported-by: Kota Toda <kota.toda@xxxxxxxxxxxxxxxxxxxxx>
> > > ---
> > > drivers/net/bonding/bond_main.c | 61
> > > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
> > > include/net/bonding.h | 5 +++++
> > > 2 files changed, 65 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bo=
nd_main.c
> > > index 8ea183da8d53..690f3e0971d0 100644
> > > --- a/drivers/net/bonding/bond_main.c
> > > +++ b/drivers/net/bonding/bond_main.c
> > > @@ -1619,14 +1619,65 @@ static void bond_compute_features(struct bond=
ing *bond)
> > > netdev_change_features(bond_dev);
> > > }
> > >
> > > +static int bond_hard_header(struct sk_buff *skb, struct net_device *=
dev,
> > > + unsigned short type, const void *daddr,
> > > + const void *saddr, unsigned int len)
> > > +{
> > > + struct bonding *bond =3D netdev_priv(dev);
> > > + struct net_device *slave_dev;
> > > +
> > > + slave_dev =3D bond->header_slave_dev;
> > > +
> > > + return dev_hard_header(skb, slave_dev, type, daddr, saddr, len);
> > > +}
> > > +
> > > +static void bond_header_cache_update(struct hh_cache *hh, const
> > > struct net_device *dev,
> > > + const unsigned char *haddr)
> > > +{
> > > + const struct bonding *bond =3D netdev_priv(dev);
> > > + struct net_device *slave_dev;
> > > +
> > > + slave_dev =3D bond->header_slave_dev;
> >
> > I do not see any barrier ?
> >
> > > +
> > > + if (!slave_dev->header_ops || !slave_dev->header_ops->cache_upda=
te)
> > > + return;
> > > +
> > > + slave_dev->header_ops->cache_update(hh, slave_dev, haddr);
> > > +}
> > > +
> > > static void bond_setup_by_slave(struct net_device *bond_dev,
> > > struct net_device *slave_dev)
> > > {
> > > + struct bonding *bond =3D netdev_priv(bond_dev);
> > > bool was_up =3D !!(bond_dev->flags & IFF_UP);
> > >
> > > dev_close(bond_dev);
> > >
> > > - bond_dev->header_ops =3D slave_dev->header_ops;
> > > + /* Some functions are given dev as an argument
> > > + * while others not. When dev is not given, we cannot
> > > + * find out what is the slave device through struct bonding
> > > + * (the private data of bond_dev). Therefore, we need a raw
> > > + * header_ops variable instead of its pointer to const header_op=
s
> > > + * and assign slave's functions directly.
> > > + * For the other case, we set the wrapper functions that pass
> > > + * slave_dev to the wrapped functions.
> > > + */
> > > + bond->bond_header_ops.create =3D bond_hard_header;
> > > + bond->bond_header_ops.cache_update =3D bond_header_cache_update;
> > > + if (slave_dev->header_ops) {
> > > + bond->bond_header_ops.parse =3D slave_dev->header_ops->parse=
;
> > > + bond->bond_header_ops.cache =3D slave_dev->header_ops->cache=
;
> > > + bond->bond_header_ops.validate =3D slave_dev->header_ops->va=
lidate;
> > > + bond->bond_header_ops.parse_protocol =3D
> > > slave_dev->header_ops->parse_protocol;
> >
> > All these updates probably need WRITE_ONCE(), and corresponding
> > READ_ONCE() on reader sides, at a very minimum ...
> >
> > RCU would even be better later.
> >
> I believe that locking is not necessary in this patch. The update of
> `header_ops` only happens when a slave is newly enslaved to a bond.
> Under such circumstances, members of `header_ops` are not called in
> parallel with updating. Therefore, there is no possibility of race
> conditions occurring.
bond_dev can certainly be live, and packets can flow.
I have seen enough syzbot reports hinting at this precise issue.
Return-Path: <linux-kernel+bounces-665696-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 9578C41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:10:52 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id A483E173961
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:10:53 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C264A28C03D;
Wed, 28 May 2025 15:10:37 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="XSHUHdzh"
Received: from mail-yb1-f173.google.com (mail-yb1-f173.google.com [209.85.219.173])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 48D6D28BAA3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:10:35 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.173
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445037; cv=none; b=MiOKo5mcmadiZG8WBs4z41ra504mjrc+8QgO+vvEH4Dwj47qfifUzuEtKURJ+pOAHa8C0wbjmLJdFAQ1xQQVPpk/8nNsdIgQYJU1bG+88iUNWigp4yfKhpuXc6o1vyW4YFX5v1SbBeZOIg0zblEI6Z1v69EEeZu90n5wWRXE3yM=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445037; c=relaxed/simple;
bh=oRij2I0TpTX32X/NhxasXgfEJxa8A5RThaAlheT8LBA=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=CjrIB7IluL/+1gyu++iD9p9xRrUscffoZrVx4x3OJJP+C8uVoRBlvqXxu8zpJ3o5XCQ/xyDrPBglCiJYgatmOvTz7i4euq66+6ByqRuiXAYfZvGQC2tIhfYbn8H1EylVPwmr2jEGPA1iq/wC+bo0AYryr5vJgZ/6FsKosfbRtQo=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=XSHUHdzh; arc=none smtp.client-ip=209.85.219.173
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com
Received: by mail-yb1-f173.google.com with SMTP id 3f1490d57ef6-e7dcd60c092so1440562276.3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:10:35 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=google.com; s=20230601; t=1748445034; x=1749049834; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=mkOH/F0mBjSGdYPCUEiDsSIcD6SIWcpvbL1Z7KSMawk=;
b=XSHUHdzh4M3Tz1CxqHeZu5QTLHzRV3Z8TIcZdNftoj7tZJUy1qxF7vAtEIvnAlUmTE
JdJ/7C3uWpNaHD7A0OgWrMpPOQSSOCNiRkVqlgam5TmRHWM4uNeLXI4FgN4H6pg9dvOc
/YNI8k4NDPiydQqZD4S9zOl+A5gQDsBNgNtowZwexAva5z9XQKZLChtezIFfZ061EFpY
aTQxb3ee98rHEGg85oBwRrIFAsYtUYTDRDOXQOgCJGmEmWCg3qr8Ez/LcFK8QZoqDMEJ
rvqjRx5+n+1UF3ppt/Do5fixTZf9bDsTo9IdGYvIVYoXkmMrod0ABMGWssVFg2SXP5JO
1yKw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748445034; x=1749049834;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=mkOH/F0mBjSGdYPCUEiDsSIcD6SIWcpvbL1Z7KSMawk=;
b=TNjXcDHfZn0MTDCP1DFF2wmy8j8jaWTyLyRKZK2CD9hFHbYXkbQJN/X0bX4Vhw7Zgp
80LaNa3q1O9Rb5lIzLjneMplIqIdCdcWBEPSNTcEQDly1kheJsGvm2na0R6rmk1FIWDi
OZ3YmTb+s6B2tpxyMktRpbde54n7Fnl2/VdAWrLNuwSU2QZzWKuVwjK7edDCg/6rbmGk
P5W8HbQocoZBh+SRH66p0QPafPku7oROFMPieBhKZtzF/4gyz6tyfkR0Ko7zAQ8BlC3N
eAurqsKk2Xi86F36TQCXUFsi0mJKwqOzqZ2AA/POBeJOy1DAMSHFBsS7H4ul5aG/ad9T
8dLA==
X-Forwarded-Encrypted: i=1; AJvYcCUfPWb/afBqM7UggpqJ4huyYx61vkwHQGHnbecQ6M4tSwQWZQ51yVRXtd46MMS6w6lqepqHaJT/+QLfqQo=@vger.kernel.org
X-Gm-Message-State: AOJu0Yyu5D6asFVHBGqV21Ufg1zhCJzczdwgUm+dBwZY35pQEGjD/lVk
PI/IF/FfkFIRVcfV3Z0LCFCNcvRSloHeDoKUIVp+D6ZJqG1ifSBfIAKclUeGLT9jw++b6t26sVB
Z9KEnNUm0HbcK5yvhq5zAzksc4EDCfhNwCScxnSBH
X-Gm-Gg: ASbGncvb+yTG1NCgKjFGO/Qp6ZWWusU/3tJ+dFWBaIWnOXxcLPnCYUn72kDs3NRAcfc
Wc76VZODs+tA8adN3FBtljnP6v6Y8s51g0AP+ivfnRX0xu8PAZUXyQXxPaHqWyd6sPwqzdrQXAB
tqV5E3kCiWtvQ+O4fcbdWZg0xB47luDij1l1LPmNVyQq+cnraA92FNgn5/88Te1eJRP5VkkhJ/4
5qVzuVFkzBksTv8
X-Google-Smtp-Source: AGHT+IGR99lWrX4uBQGr2kH0bGfT4JkEfaCzPmaHW/nbBCSd4QahIO99ZAocGBZAuHyfUiwPf1Ucb1uKFWWP5NDU59M=
X-Received: by 2002:a05:6902:2841:b0:e7d:6fe3:fc81 with SMTP id
3f1490d57ef6-e7d91b459aamr21754237276.30.1748445033884; Wed, 28 May 2025
08:10:33 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250109204929.1106563-1-jthoughton@xxxxxxxxxx>
<20250109204929.1106563-7-jthoughton@xxxxxxxxxx> <aBqkINKO9PUAzZeS@xxxxxxxxxx>
In-Reply-To: <aBqkINKO9PUAzZeS@xxxxxxxxxx>
From: James Houghton <jthoughton@xxxxxxxxxx>
Date: Wed, 28 May 2025 11:09:58 -0400
X-Gm-Features: AX0GCFt9PLVfklSGC-mOnCNW0mGP_16cIQYPD6tP1ev5K3PmI8fYxDutOCJrYcQ
Message-ID: <CADrL8HXDDRC6Ey5HYWvtzQzjcM2RNX7c7ngGyjUsD3WiBF3VYA@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v2 06/13] KVM: arm64: Add support for KVM_MEM_USERFAULT
To: Sean Christopherson <seanjc@xxxxxxxxxx>
Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx>, Jonathan Corbet <corbet@xxxxxxx>, Marc Zyngier <maz@xxxxxxxxxx>,
Oliver Upton <oliver.upton@xxxxxxxxx>, Yan Zhao <yan.y.zhao@xxxxxxxxx>,
Nikita Kalyazin <kalyazin@xxxxxxxxxx>, Anish Moorthy <amoorthy@xxxxxxxxxx>,
Peter Gonda <pgonda@xxxxxxxxxx>, Peter Xu <peterx@xxxxxxxxxx>,
David Matlack <dmatlack@xxxxxxxxxx>, wei.w.wang@xxxxxxxxx, kvm@xxxxxxxxxxxxxxx,
linux-doc@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, kvmarm@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-11.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 6, 2025 at 8:06=E2=80=AFPM Sean Christopherson <seanjc@google.c=
om> wrote:
>
> On Thu, Jan 09, 2025, James Houghton wrote:
> > @@ -2073,6 +2080,23 @@ void kvm_arch_commit_memory_region(struct kvm *k=
vm,
> > enum kvm_mr_change change)
> > {
> > bool log_dirty_pages =3D new && new->flags & KVM_MEM_LOG_DIRTY_PA=
GES;
> > + u32 new_flags =3D new ? new->flags : 0;
> > + u32 changed_flags =3D (new_flags) ^ (old ? old->flags : 0);
>
> This is a bit hard to read, and there's only one use of log_dirty_pages. =
With
> zapping handled in common KVM, just do:
Thanks, Sean. Yeah what you have below looks a lot better, thanks for
applying it for me. I'll post a new version soon. One note below.
>
> @@ -2127,14 +2131,19 @@ void kvm_arch_commit_memory_region(struct kvm *kv=
m,
> const struct kvm_memory_slot *new,
> enum kvm_mr_change change)
> {
> - bool log_dirty_pages =3D new && new->flags & KVM_MEM_LOG_DIRTY_PA=
GES;
> + u32 old_flags =3D old ? old->flags : 0;
> + u32 new_flags =3D new ? new->flags : 0;
> +
> + /* Nothing to do if not toggling dirty logging. */
> + if (!((old_flags ^ new_flags) & KVM_MEM_LOG_DIRTY_PAGES))
> + return;
This is my bug, not yours, but I think this condition must also check
that `change =3D=3D KVM_MR_FLAGS_ONLY` for it to be correct. This, for
example, will break the case where we are deleting a memslot that
still has KVM_MEM_LOG_DIRTY_PAGES enabled. Will fix in the next
version.
>
> /*
> * At this point memslot has been committed and there is an
> * allocated dirty_bitmap[], dirty pages will be tracked while th=
e
> * memory slot is write protected.
> */
> - if (log_dirty_pages) {
> + if (new_flags & KVM_MEM_LOG_DIRTY_PAGES) {
>
> if (change =3D=3D KVM_MR_DELETE)
> return;
Return-Path: <linux-kernel+bounces-665697-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 77F4D41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:11:28 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id EAFF17AFB91
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:09:52 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id A082728C03F;
Wed, 28 May 2025 15:10:49 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="aDaL1CWn"
Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0676A28C01C;
Wed, 28 May 2025 15:10:46 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445048; cv=none; b=Snsm5vdqvvK7zAYNbde+eyhxMQzl4EynnxP44aFGCie1gGCUIMma9PB03eq/At07H5oahjaWQtTMuVs5XVkY2RlP8GMvphb7bdxrH6YOQmAnoZ9pR9qbludAkwQccIfxylfjqUryEB+ohuIyCZZk00OGcTRZNN2IipJeU1unixw=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445048; c=relaxed/simple;
bh=VoneiAYFe68XxjFSpgm16dS0jALbbMgSV8pvbxVlj3A=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=kQzBUwa3CJpBs2YWKq7m9VGdQv+oBtEHReiqclkZd1Dr1ukjDGa7pbE6JVmuek08Cj3IidAIX3tlZqtQlrr04VztHe0eh68tC3lseuJfBlMtwciEazs0zocMJNFGvqoElrlVu0vNnQhgE/HVKNpHUPMFGgW0DtZxbu1UhfA6lM8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=aDaL1CWn; arc=none smtp.client-ip=148.163.158.5
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com
Received: from pps.filterd (m0360072.ppops.net [127.0.0.1])
by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SE9mEf022816;
Wed, 28 May 2025 15:10:30 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc
:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to; s=pp1; bh=V3i3Tsthb6Ljxbs39P+VC5rZ1AQFt7
AlQ+UDegLoUvk=; b=aDaL1CWnZqv4JE4qnpbuhdn8Coo7lOhVH4jY2YCfrEhItt
xi1nptzXndG6Uefw+CZ+TQmYOV4gBMVWV5FriPOk2gjEZfXl0XlnCdbWdsnAeJUK
9/2dr1UpKNtICFweLWLTuOE5rQOQnMJe0fSI7c6IDlNrAjDAGA5WfFtoz9GaJPFj
5XjO2WLaUwkaQP40e8HKMTckUYguxrapJWa3+Pp2BJx1oNgIom2Sy4WdTvMxs5m2
SQZ3KtJeHMyNeMTlw/MNDLu8FdeQno74Z+GnhN8kTnPPNhKpWm6C+zCXcIZWOUcv
l8Ho6mH3DrtjdAm4tDtw/RcRz1vMZMIVWQrJWlQw==
Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221])
by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 46x40h0ceu-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 15:10:29 +0000 (GMT)
Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1])
by ppma13.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 54SEpgrn021333;
Wed, 28 May 2025 15:10:29 GMT
Received: from smtprelay02.fra02v.mail.ibm.com ([9.218.2.226])
by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 46utnmqu4q-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 15:10:28 +0000
Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101])
by smtprelay02.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 54SFAR5227132332
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Wed, 28 May 2025 15:10:27 GMT
Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1])
by IMSVA (Postfix) with ESMTP id 4F3C820040;
Wed, 28 May 2025 15:10:27 +0000 (GMT)
Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1])
by IMSVA (Postfix) with ESMTP id 4800D20043;
Wed, 28 May 2025 15:10:23 +0000 (GMT)
Received: from li-dc0c254c-257c-11b2-a85c-98b6c1322444.ibm.com (unknown [9.39.18.84])
by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTPS;
Wed, 28 May 2025 15:10:21 +0000 (GMT)
Date: Wed, 28 May 2025 20:40:15 +0530
From: Ojaswin Mujoo <ojaswin@xxxxxxxxxxxxx>
To: libaokun@xxxxxxxxxxxxxxx
Cc: linux-ext4@xxxxxxxxxxxxxxx, tytso@xxxxxxx, adilger.kernel@xxxxxxxxx,
jack@xxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, yi.zhang@xxxxxxxxxx,
yangerkun@xxxxxxxxxx, libaokun1@xxxxxxxxxx
Subject: Re: [PATCH 3/4] ext4: get rid of some obsolete EXT4_MB_HINT flags
Message-ID: <aDcnV0LHAXGBJOEv@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <20250523085821.1329392-1-libaokun@xxxxxxxxxxxxxxx>
<20250523085821.1329392-4-libaokun@xxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250523085821.1329392-4-libaokun@xxxxxxxxxxxxxxx>
X-TM-AS-GCONF: 00
X-Proofpoint-GUID: 8u1fMgIIcPi9DJU2JDz_2YtrciT_Y0Kg
X-Proofpoint-ORIG-GUID: 8u1fMgIIcPi9DJU2JDz_2YtrciT_Y0Kg
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEzMCBTYWx0ZWRfX4CIPuIELoWl7 kuYtLboGBzaGde7dFKP04KOsKFSf0eV8TDKk/IabS5J1wZRkgxhUWzlQbBagTnGS0Oj4Y3vPs1V 9qwSS1P0lAAtlTFr0GAvs+1aiWO1f8AVxbVIv0EKQSw/yPoxv29fjbzV1lpz/oKNkeN4wT1aDlT
1o77i7Q1ConnhPqAM7zEWV4AVBzRbsY0wL9u+Q3qZ6O2inXJB1mf+RbuB++4sFypjj23xS6VnXU 8VksRzxQQ3Vihv+d8Tx2xR+mBl09fHi+9ul0RoqRO2eu73ngB7EmSJFsa5oLBBLG+6xXSom8/BM CZ6IF5YwQ0ZY8SHzWFGrRwp3cnHciNL4a9n3huDrcAVKct7YKuLaumO+sk1u1J5/AxkH/zQEFrB
auytSD6j2AQN7WtA2UOEnl2SDmd4tL93GPh5Ymu5Zfr6ix9rP/K+Hfa6yxU9thW3dXGOdAUa
X-Authority-Analysis: v=2.4 cv=L8MdQ/T8 c=1 sm=1 tr=0 ts=68372765 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=kj9zAlcOel0A:10 a=dt9VzEwgFbYA:10 a=AiHppB-aAAAA:8 a=i0EeH86SAAAA:8 a=VnNF1IyMAAAA:8 a=twkGVns3odX8MIeO9usA:9
a=CjuIK1q_8ugA:10
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_07,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 impostorscore=0
adultscore=0 spamscore=0 phishscore=0 bulkscore=0 clxscore=1015
priorityscore=1501 lowpriorityscore=0 mlxlogscore=319 suspectscore=0
malwarescore=0 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280130
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Fri, May 23, 2025 at 04:58:20PM +0800, libaokun@xxxxxxxxxxxxxxx wrote:
> From: Baokun Li <libaokun1@xxxxxxxxxx>
>
> Since nobody has used these EXT4_MB_HINT flags for ages,
> let's remove them.
>
> Signed-off-by: Baokun Li <libaokun1@xxxxxxxxxx>
Looks good:
Reviewed-by: Ojaswin Mujoo <ojaswin@xxxxxxxxxxxxx>
Regards,
ojaswin
Return-Path: <linux-kernel+bounces-665698-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 3F28D41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:11:32 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 60453A23AA8
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:11:02 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id AEA6B28C2BD;
Wed, 28 May 2025 15:11:04 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="ocTIM4H1"
Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id C08FE28BAAD;
Wed, 28 May 2025 15:11:01 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445063; cv=none; b=vE4w0adIS3EFP6zy63Vi5+NF5oyg42xGnYfN3EHVU4DYCYk7z/n/+2Nge6MkyMm0LUI76tpByjIlLS7UXlLGoXzhNUVmkWie/RFpI/xIZJW8q9CondeKAFweiLQwcSGs+4K/EGAnNR4dqk4AB2enoPpG6F/5ebSMotI8bC2qrDE=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445063; c=relaxed/simple;
bh=2insgHiZQR7p5wDJ020t1ub628/CBQGfKrAAC0h7XjM=;
h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References:
Content-Type:MIME-Version; b=SfkO8KUAIr44/Gc9Q/Ey9AzCwWvfHFWlUqDwhH9ejfcICbmKFi4xvjD/CCz4BrbpfBqOJaTrc7j4vyVJVORr5a3OYdujGVzbB71B8xkBAjgEfiiyQiH4n5luWqiuAzlWVl8ilbk9wVgDmYUBYhvUAUvy65Y049joVvpENE5Uduo=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=ocTIM4H1; arc=none smtp.client-ip=148.251.105.195
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com;
s=mail; t=1748445059;
bh=2insgHiZQR7p5wDJ020t1ub628/CBQGfKrAAC0h7XjM=;
h=Subject:From:To:Cc:Date:In-Reply-To:References:From;
b=ocTIM4H1xvxfaSzI137wEbK2D5Nwa7Cpjz4v9oBNtA9O+rufRY7TJbOGrbgcOOjWA
XYJjQoZrJ9jOX5aYU5RwxYcPrBH2xlWJcqPe5e0YMBDY7uqStF6a9uYP7DzmgBeZwh
MPX6QnjVOy+2gMk+zVK9SnPqxQU+APeKYKTFiTBBNVyh88q6lJbjGIL78B+GpuB9vG
rLIj1kklzMKLvzJUDJlfAJMRyZvTETb3yiCUVF4JpAWPkYuO1Q08eD/DOuw2tTvCq+
VYFYn1RRyM15IZZSn/MD+dbLeaXsKM08JM3KwM7G/5cg5tXOxR9qgsS/MHYjK1HuVD
VWGQd+o1twxzg==
Received: from [IPv6:2606:6d00:17:b2fc::5ac] (unknown [IPv6:2606:6d00:17:b2fc::5ac])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(No client certificate requested)
(Authenticated sender: nicolas)
by bali.collaboradmins.com (Postfix) with ESMTPSA id 4C49F17E153E;
Wed, 28 May 2025 17:10:58 +0200 (CEST)
Message-ID: <0476c8d6ef2482688d07077592393074398c9ce0.camel@xxxxxxxxxxxxx>
Subject: Re: [PATCH] media: rkvdec: Switch to using structs instead of writel
From: Nicolas Dufresne <nicolas.dufresne@xxxxxxxxxxxxx>
To: Jonas Karlman <jonas@xxxxxxxxx>, Detlev Casanova
<detlev.casanova@xxxxxxxxxxxxx>
Cc: Ezequiel Garcia <ezequiel@xxxxxxxxxxxxxxxxxxxx>, Mauro Carvalho Chehab
<mchehab@xxxxxxxxxx>, Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>,
"linux-media@xxxxxxxxxxxxxxx" <linux-media@xxxxxxxxxxxxxxx>,
"linux-rockchip@xxxxxxxxxxxxxxxxxxx" <linux-rockchip@xxxxxxxxxxxxxxxxxxx>,
"linux-staging@xxxxxxxxxxxxxxx" <linux-staging@xxxxxxxxxxxxxxx>,
"kernel@xxxxxxxxxxxxx" <kernel@xxxxxxxxxxxxx>,
"linux-kernel@xxxxxxxxxxxxxxx" <linux-kernel@xxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 11:10:57 -0400
In-Reply-To: <a787e6e0-d4ce-45e3-8263-2489585d3ec0@xxxxxxxxx>
References: <20250527150043.174415-1-detlev.casanova@xxxxxxxxxxxxx>
<a787e6e0-d4ce-45e3-8263-2489585d3ec0@xxxxxxxxx>
Organization: Collabora Canada
Content-Type: text/plain; charset="UTF-8"
User-Agent: Evolution 3.56.2 (3.56.2-1.fc42)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Jonas,
Le mardi 27 mai 2025 à 19:51 +0200, Jonas Karlman a écrit :
> Hi Detlev,
>
> On 2025-05-27 17:00, Detlev Casanova wrote:
> > In an effort to merge the rkvdec2 driver [1] with this one, switch from
> > writel() calls to using structs to represent the register mappings.
>
> Please wait with this until HEVC support has landed, now that H264
> 4:2:2/Hi10 finally have been merged I was hoping to be able to send a v2
Detlev communicated to me that this was meant to have the RFC tag. The intent
being to check with others if the usage of bitfield in structure for registers is
acceptable. I personally like it, and don't see any issue with it considering
the performance is not affected at all. The idea is not new, you can find
similar proposal from 2019.
https://lore.kernel.org/all/20190131031333.11905-2-ayaka@xxxxxxxxxxx/
> of the old HEVC series [3]. I was waiting on v6.16-rc1 before sending
> the series but can send it sooner if needed, [4] has current state of v2.
Please don't wait for that, just send as soon as your are happy with it.
Just based it on current media-committers/next branch, I will deal with the
rest.
>
> H264 4:2:2/Hi10 and HEVC have been in the works for a few years now,
> would be nice to have it fully land before refactoring starts ;-)
My roadmap was that HEVC was not truly an unstaging dependency. I was a lot
more worried about concurrent decode, but I have a patch in queue now. So
unstaging is what I will prioritize once a patch is made. Meanwhile, better send
you patches soon.
>
> [3] https://lore.kernel.org/linux-media/20231105233630.3927502-1-jonas@xxxxxxxxx
> [4] https://github.com/Kwiboo/linux-rockchip/commits/linuxtv-rkvdec-hevc-v2b/
>
> > This is done in order to have all supported decoders use the same format
> > in the future and ease reading of the code.
>
> Do you have any work-in-progress patches for this?
>
> > Using structs also improves stability as the hardware is tested and
> > validated downstream using a similar method.
> > It was noticed, on decoders, that:
> > Â - Some registers require to be writen in increasing order [2]
> > Â - Some registers, even if unrelated, need to be written to their reset
> > Â Â values (it was the case here for axi_ddr_[rw]data).
> >
> > Using structs can also help improving performance later when, e.g.
> > multicore support is added on RK3588.
>
> Are your referring to the linked-list feature (also present in e.g.
> RK3328) or just for multi-core purpose?
RK3588 multi-core design, but this is also needed if you want to use HW queues.
Multi-core is more pressing at the moment, the benefit of using HW queues will
have to be proven. It does not make a big difference for a single media.
Nicolas
>
> Regards,
> Jonas
>
> > Performance seems to be slightly improved, but at least, not made worse.
> > Running fluster's JVT-AVC_V1 test suite with GStreamer on the Radxa ROCK
> > PI 4 SE gives the following times:
> >
> > Before this patch:
> >
> > - --jobs 1: Ran 129/135 tests successfully              in 77.167 secs
> > - --jobs 6: Ran 129/135 tests successfully              in 23.046 secs
> >
> > With this patch:
> > - --jobs 1: Ran 129/135 tests successfully              in 70.698 secs
> > - --jobs 6: Ran 129/135 tests successfully              in 22.917 secs
> >
> > This also shows that the fluster score hasn't changed.
> >
> > [1]: https://lore.kernel.org/all/20250325213303.826925-1-detlev.casanova@xxxxxxxxxxxxx/
> > [2]: https://lore.kernel.org/all/20200127143009.15677-5-andrzej.p@xxxxxxxxxxxxx/
> >
> > Signed-off-by: Detlev Casanova <detlev.casanova@xxxxxxxxxxxxx>
> > ---
> > Â drivers/staging/media/rkvdec/rkvdec-h264.c | 168 +++---
> > Â drivers/staging/media/rkvdec/rkvdec-regs.h | 567 ++++++++++++++-------
> >  drivers/staging/media/rkvdec/rkvdec-vp9.c | 239 ++++-----
> >  drivers/staging/media/rkvdec/rkvdec.c     |  1 -
> > Â 4 files changed, 559 insertions(+), 416 deletions(-)
>
> [snip]
Return-Path: <linux-kernel+bounces-665699-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 8981F41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:12:06 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 44A917B3048
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:10:22 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id A90D328BA8E;
Wed, 28 May 2025 15:11:33 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="MAv9VvYZ"
Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2057.outbound.protection.outlook.com [40.107.21.57])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8D46028B3F6;
Wed, 28 May 2025 15:11:30 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.21.57
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445092; cv=fail; b=bieVEyGyf1BqjKgTTnAvgxY2WM8TYMQ8X+KPuLNmMkhKlRW4zMz7ewsejHruKdJtXMu7Op05tZY0l8Mpv6ba4BXH7SZ9moAwxTE2wqHqk0uCpMrxkzOoqX1+PdKi/N8GcM3NvZMgZg3S4IOELLAm5m6Z/RnIhTTdnb7R8R8IAVs=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445092; c=relaxed/simple;
bh=R/cw0kN+w6gGpu1CjMV7f/l7BJJfJ0gYBMXuOr9mdO0=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=jl2pB3sTLThkJLac44Ubw1y2Cm9nZTqrHaVdu3+dnf8UOeua4fcVW6VbCGbsKtJRCijF3PlfChG8MFwFC4rUQHmFePmm1cAPh/8QhVNm+q7YtEwbQgaseTf8/rBFWWHEufIHuQvOizVDpAXqKb/HNvdFdv4PcS3KJW/v/K8eKQM=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=MAv9VvYZ; arc=fail smtp.client-ip=40.107.21.57
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=l9zOruDjTE1RaBsWbFK8MOuI5ZZM9Y+BgTGwFayYVwZQk51Ay8cCr5pACey35GI8N16kY7jUR/o3xOIUWnt2/VO0ZJ8gN2DayhvM2mlVtfYV1Q3d95agKEa52CmjqaA5xBBr5i0tjiqmMz/4umnpCKSAUaWZJy4XCWTpqPJLJg06HOLRJrAyFAmM4ulLpSfs7mujRbSC6iaHZemYlhriIWfJ/gghuzWYuYpzQgBEgvyp35Gw0FpXBpyymi/neVJWjZO2kMbAxAU1DDwHeULnlkcQHzhtbNUBe85Rxw09ipiZxO3kl1Z9rGt0KUoMq25nxGa9uV8TuB/VuCC/pexa0A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=EWWiQnU/tt+DrepxgPi3mMduquofqqswkZ36BcCdWsY=;
b=Qv0CwrrHg9aiPE/vj9Qnnr53SBOGHWH4e1exd17khSVHTl4WGQoGJ5FM4ouNSbyGXfEFRgvAT8zSD4XcY7jb28SuprNV/dUohYAJRas6EBFc7ek4bCsaqgTB4mgNQMfa9jUx45ZyDKlV73xAGBg3xIU7Ch8eHORF+tlfUnrS1mLFxAEK5yqCJ4bFxhWKd07uIK4avZSvLmZhREh1Q+lQd7HfKJf+kLke0fnokM4lJNh58WdiMqj7VR5C4R5XOtCOuCbrwP9YWm4VVbSkIuGBPcg9VlSDFRn9Guhu+KzORBkRFkrVIdcXSe3PjQ/MuJm1zarj6rFYeKxVyN/w3DbIxQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=EWWiQnU/tt+DrepxgPi3mMduquofqqswkZ36BcCdWsY=;
b=MAv9VvYZ/YOjKOzxLhnAr+ME1wnRIGP4v2y8+cMbo4Y8JNPC4x68KXMNj9Lv3AxDg4tZIbak4ZORKaKa6lI3v3hZF3ZiFbquTisDFeC8XH0W6hvs/0dGKo/vd1ULXu8tNR9Pyw8a2CA3X0LqPF885qEftVCQDCpJAdhhSbAeroBuSzF0K0IjYBmH/isWumgMXm1dDYoq/K8/Mex52EdfrucmUHbiH5y3/NX++VK9mxWosk1tvxGMrTHdUycjXGWgw7YymsRfJJR0CGcd0eXHF8GPuPjNsq6WZTgjtCsyQElenu5Mhpb1t+objHs6Ym8ASgbqbaRWSrjExjX7V1NGQA==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by PAXPR04MB8558.eurprd04.prod.outlook.com (2603:10a6:102:215::23) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.29; Wed, 28 May
2025 15:11:27 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
15:11:27 +0000
Date: Wed, 28 May 2025 11:11:22 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: Shengjiu Wang <shengjiu.wang@xxxxxxx>
Cc: robh@xxxxxxxxxx, krzk+dt@xxxxxxxxxx, conor+dt@xxxxxxxxxx,
shawnguo@xxxxxxxxxx, s.hauer@xxxxxxxxxxxxxx, kernel@xxxxxxxxxxxxxx,
festevam@xxxxxxxxx, devicetree@xxxxxxxxxxxxxxx, imx@xxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
shengjiu.wang@xxxxxxxxx, carlos.song@xxxxxxx
Subject: Re: [PATCH v2 1/6] arm64: dts: imx94: Add micfil and mqs device nodes
Message-ID: <aDcnmmUiDD8fmlkH@lizhi-Precision-Tower-5810>
References: <20250528015837.488376-1-shengjiu.wang@xxxxxxx>
<20250528015837.488376-2-shengjiu.wang@xxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528015837.488376-2-shengjiu.wang@xxxxxxx>
X-ClientProxiedBy: LO4P302CA0007.GBRP302.PROD.OUTLOOK.COM
(2603:10a6:600:2c2::14) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|PAXPR04MB8558:EE_
X-MS-Office365-Filtering-Correlation-Id: e7c6aa47-f84b-43c1-3fe1-08dd9df9eb24
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|376014|52116014|7416014|1800799024|366016|38350700014;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?9rVHKGZgGB9LDGFm4BXJGaq4JFfYpZPOPMqd2LRg4ABg6jhGl0Bm4X5UKThy?=
=?us-ascii?Q?tKwcH89dqnwb5uoL3jZY1+LKpj+CLX0FpKUW2Pm5GEkO/ST4+Rvl4Eigf1UF?=
=?us-ascii?Q?L8dc/UKxwNF3LmQRoIIDJVSPS8DrrhYu5DZ37qpxF9nazlbHp6L3ZYm+QhSY?=
=?us-ascii?Q?SRpqX76HGaIm53cC0yt+NiLN2G7gbRXEEjiudH3mv9YA4TYvKA4MOpE+Ad3+?=
=?us-ascii?Q?G7nqJbBjmiGKOc4odlwFXDAipc8wm588X1VdmUBvZnf/OKTG4YEBvstBWx1d?=
=?us-ascii?Q?gY0k0KKHufYZqlX6G6ELzSsRAMNZwwV7joPgKZyQwwPRnZJau8175whjCNb3?=
=?us-ascii?Q?cxouBNnmx65Dv5W3XsiqQxfCGsYVddeDEtTA9wcTnXtPCljkkFsm07KbYBH2?=
=?us-ascii?Q?aNv+9f12tS1b+bDlK56kdlC2Bs9Luxe/FzzdfBthyA2aoCQU5lwqCQEbSAcR?=
=?us-ascii?Q?xeDPTBsCASGqWoNu7Ip1SuJTTV+YV4Rpyl/3wtrnqvz1euj5/xAP2Z3JFDhg?=
=?us-ascii?Q?l56omSZWB+PW0IcbIl51owPmRl+xfvmVtQFOW7ffl+wktg55a8K5YQas+cM9?=
=?us-ascii?Q?+qndbPKPmPcw5/YuCYVHVyYj1f9dFdxwqzqOjI2c0h2oBEwifvYmNHYeRJms?=
=?us-ascii?Q?Yc2BCPCNYX1zHthMp524NEoBkmVeB+BIMGVFrBw/sQ5oXd9aMX/VYImDLtLx?=
=?us-ascii?Q?ZbyGKN+LPa0Bi2JBa133lNkIooTkKWSFcTS38bETj6G0ifEfR79NjpHxm7B/?=
=?us-ascii?Q?fyavaylQMCRXsY66wMAJISONd9PbktJkhqVpW5E7K5+J/PEfANw4ePdtI4zK?=
=?us-ascii?Q?T2jrjLBrq9pLdAns0OdGeFRmoj0gZAkZJjP270mUJg0wfDFaSUGsjABIjZY8?=
=?us-ascii?Q?0TCjbzVPCrU9Z2aVsJ9Xf28fP1T3VL8cDLStB3wsLNNIX5rcy5guxMvRJASF?=
=?us-ascii?Q?TmcS4hSjwwT2+qENveTVk8qoXfMi6TitP6sJSWJTbU6EG1ux5LePY+jQ33XC?=
=?us-ascii?Q?oMhZFJkY1obuOaR+6vn/Y3Vhkw9XwXn33IjRw8kGw8oENMLJjkPxrnbC8Aai?=
=?us-ascii?Q?YwHpvVqY1r+enjivgZyIQJvNkMqPdZADoTFuxI7v5GvFjR9Ls4cjQ13ekFCo?=
=?us-ascii?Q?MEyzTElyx4EbetdGiMc6CLE1BZ8zL84Om/26N1RooMtLv0deWYJEHG5X2nWN?=
=?us-ascii?Q?w1wRg7YrnU4JKm1SjeNNEJM8eYuqqButtjmGYMzaVvCeh+F5QtD4CY4n3/2n?=
=?us-ascii?Q?1wJkcC3VEzcB6Zk537lIzjHMxybbrSWomRvfFQAr5Jj7fw3XsyF7F3He1oZR?=
=?us-ascii?Q?xTkp86obhIqCu3VDs2tjNHL4kpNqNJEuecgTqqLGmg4svgvY6S/ps5/goJPE?=
=?us-ascii?Q?oAxUNE1sMjz6cWuoTgPKzvVQpJUYczxr2rQbcuaMmK32z7r/RJ74pTnivCbk?=
=?us-ascii?Q?tyFJ0X5qXwGs8OaYFnV57pB8FGyE7/3Tu0CIM87QqNI5Oc+cR19i2DVvtRGO?=
=?us-ascii?Q?hm0VRjctTJGEZIw=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(7416014)(1800799024)(366016)(38350700014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?K5+oMry0jXlGcyfe25wIMOyGwNJPNbRjcLAyu0ni16R52ePpbTyrKr3nGK+7?=
=?us-ascii?Q?EsD642sEqWRxvHl4pt+w8ReR3EjwLhaBjkDslySL0f/Gjt5EyQ2e20jkeW0Z?=
=?us-ascii?Q?j6td8rp1is5WBPwCyvXdT9TsnnMtgCtDRYyYHsI2R7Igj+AKXHuTv8FAjc0W?=
=?us-ascii?Q?DQGYhQoKVcc4J/aUH9T4JBMI/PX8xsI0c0tjBeOwec44dE7BW9yVMH3bJcDo?=
=?us-ascii?Q?56yIz1komLeIcHzjhGXBJRQqz/s3QDf7xk8zPrjffP16KiMDtRZXYnFYj+zI?=
=?us-ascii?Q?2DBSBQAc0/D4XvHT/qBdEymcA0y1UwYzm8qQD5IuugDJAz/BQtORVlLZQKVY?=
=?us-ascii?Q?NOBzoWeI1dvm/zLWUs8EOZjx7rGv+zF3BUv+G9bk03F+7O+/7jp66MYANvyM?=
=?us-ascii?Q?GKlISx3Gb2SLFVIL3V+KbPRv/93PrQMA1024yiRbW4vRQxAj1qp4VgDcajOV?=
=?us-ascii?Q?/I56HP2QBKh1zgYm6KnkLS8otpjj1tQtgzep9s8ZFp8s0nE49OXOqPIM1c47?=
=?us-ascii?Q?j7DFbQmWh+8n/A4jEw0Vrj8xy4upBOiUj3SRiKltDMBnHD8JLFbSEQJiJz5M?=
=?us-ascii?Q?xEMZckt59VtzMhrNqCWiCD9alPaqP0j1RKF//Ng4mV40h+nxdE+TQWMVmK/D?=
=?us-ascii?Q?kX7u7nWRD7VRED0yXxRdWdIjklUjEx3mU2E9uYh7vaD5DOFqq2rS2/Y5ho1p?=
=?us-ascii?Q?rTqBPTxi0jXrhuazNrxpQIqtO5T6jLWJrn16gxw2tFY3k8P0q5m0dNb4DKYe?=
=?us-ascii?Q?sBga37PAs4oWnw4l0CahmN2o4SQxCniwMKeOdnDyXTXIYobhday7UcnOnwoT?=
=?us-ascii?Q?CpLpLCeCJvRUoaLWX3vIo6BBjLr/Bf16I+bCsiN0/E0JK+qFyHy3PWayQfgc?=
=?us-ascii?Q?5Lpbl3vclX1IhrFXnYsQwefKq5FHFEiXQEhCGlRhd9mkewGjd93+ri5xkVcr?=
=?us-ascii?Q?cuqrFijiwPelwUJHKyc1br3vIZX44WPTk4gWxmE+1chS7/ocLb3ejvsJRPJ3?=
=?us-ascii?Q?EzspMzLRyUT4kdn1MDIcmlhZWRjfXQOcYxnW0cCzcfE21nRu4k56JR+LHYtI?=
=?us-ascii?Q?yu36NOcRt2GRPvnZZzLUPugRStG8R1eLso35d8m5F02YU6vC3KSgdKu2UU0E?=
=?us-ascii?Q?rykUv5OqpRTZZOXpKKUL5rE4h65MSTF46fS83ji6181JdEkb2Pi10wwJ0tes?=
=?us-ascii?Q?OyQn+a/YMvTYshExOrfAZd/2GMsXZ3aq2PmBelS1FYbCATccRqqlPx4HXfvv?=
=?us-ascii?Q?PBtqKvxm6aRqFSrlxDb2mvGOYroWUHLcGlYEQS/8RMzY5FPZHknezoFBkhOA?=
=?us-ascii?Q?J4EZumoyRB9OOGMw9T6tYe0X6YUwFacb5TkI1ACWf2Isr1mNYUUPLgd4kDqd?=
=?us-ascii?Q?lFuJpdeB2Soxe+jvniwjqRpeNd357bbH8uRRWlDRwPxW2Z9+FsIRUaMeOHq5?=
=?us-ascii?Q?dqAfqi6vitZPjWJ0M3MfwykyThBOLp9TOH22kCceEAOWQT9H1yoBM9ztJ5fc?=
=?us-ascii?Q?22wj9OLSyEcJ+h2NibEoP+nkdhjIpW+iO+nbcHtbVNoBouQmo6Al+iMF386O?=
=?us-ascii?Q?Q9pNhlPS/IUnK7z36O4=3D?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: e7c6aa47-f84b-43c1-3fe1-08dd9df9eb24
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:11:27.6465
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Ks9fGlgjYRSZT3Bk4FxnJiWf+7uDaMxwIM8pmVEIM9mPnDTd9OEn29KUVfy5DMHkU7/SqoFSb8JBiw3x96kNpw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8558
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 09:58:32AM +0800, Shengjiu Wang wrote:
> Add micfil and mqs device nodes
>
> Signed-off-by: Shengjiu Wang <shengjiu.wang@xxxxxxx>
Reviewed-by: Frank Li <Frank.Li@xxxxxxx>
> ---
> arch/arm64/boot/dts/freescale/imx94.dtsi | 30 ++++++++++++++++++++++++
> 1 file changed, 30 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/freescale/imx94.dtsi b/arch/arm64/boot/dts/freescale/imx94.dtsi
> index 3661ea48d7d2..66ce94705ba9 100644
> --- a/arch/arm64/boot/dts/freescale/imx94.dtsi
> +++ b/arch/arm64/boot/dts/freescale/imx94.dtsi
> @@ -108,6 +108,16 @@ scmi_misc: protocol@84 {
> };
> };
>
> + mqs1: mqs1 {
> + compatible = "fsl,imx943-aonmix-mqs";
> + status = "disabled";
> + };
> +
> + mqs2: mqs2 {
> + compatible = "fsl,imx943-wakeupmix-mqs";
> + status = "disabled";
> + };
> +
> pmu {
> compatible = "arm,cortex-a55-pmu";
> interrupts = <GIC_PPI 7 (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_HIGH)>;
> @@ -1045,6 +1055,26 @@ sai1: sai@443b0000 {
> status = "disabled";
> };
>
> + micfil: micfil@44520000 {
> + compatible = "fsl,imx943-micfil";
> + reg = <0x44520000 0x10000>;
> + interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>,
> + <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>,
> + <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>,
> + <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
> + clocks = <&scmi_clk IMX94_CLK_BUSAON>,
> + <&scmi_clk IMX94_CLK_PDM>,
> + <&scmi_clk IMX94_CLK_AUDIOPLL1>,
> + <&scmi_clk IMX94_CLK_AUDIOPLL2>,
> + <&dummy>;
> + clock-names = "ipg_clk", "ipg_clk_app",
> + "pll8k", "pll11k", "clkext3";
> + dmas = <&edma1 6 0 (FSL_EDMA_MULTI_FIFO | FSL_EDMA_RX)>;
> + dma-names = "rx";
> + #sound-dai-cells = <0>;
> + status = "disabled";
> + };
> +
> adc1: adc@44530000 {
> compatible = "nxp,imx94-adc", "nxp,imx93-adc";
> reg = <0x44530000 0x10000>;
> --
> 2.34.1
>
Return-Path: <linux-kernel+bounces-665700-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 4127541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:12:23 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id DF9B03B4230
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:11:59 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 77ED928BAAC;
Wed, 28 May 2025 15:12:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="Cql3d4fk"
Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3DF1A35947;
Wed, 28 May 2025 15:12:09 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445132; cv=none; b=Y0ItTctlBEKHK0Zbbtc7OF87Ep0teVffnRyrOIhgnSxVO+Ujy+g6c1trJCYtCEG4vj42MNYGnHq/eQiDd+wQvb3BOFdwlxS8BjgjJngWd9rv/H8aoYMIAg2Ii68Vo5EsNzNQbHeuVmqf8GSGlrH/Zzn6zNNW0eDKV1Q2+jAVpJ4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445132; c=relaxed/simple;
bh=pSirawLR1A06Qeq9Jm2lXOIypMgiMPuaZFeVHj8RhJA=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=duS9xpMvVrpXzKXyHye/CEFAV0z8UCZZdrqBgT5aRyLaxDAbzPrQ1KErQZsq2yeOk5rFsBdD+BQI2rMGmzsyumAA2tcAWWZFINFAqvea4Je9EA79r5Zd3wpggRgrsBrdu0Q6x8iggfMRY+CnWqj7/AahVYjTkbQ/+e/UikAfS88=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=Cql3d4fk; arc=none smtp.client-ip=148.163.158.5
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com
Received: from pps.filterd (m0353725.ppops.net [127.0.0.1])
by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SE9Ocj017439;
Wed, 28 May 2025 15:11:58 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc
:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to; s=pp1; bh=ecDDZtBS5TdTGtXXfID2wJ9mZNnXL8
If1ZewND7y78I=; b=Cql3d4fk7DeSVotkPE0BxTT5dBlSilwD5fYZAYyq3/xd8U
PiX1hmEuXIVTQLRPDAwL8q4rg9mLhOnOb66TRnZnmvuT7md6MyJRNSi2e2uDi7c1
irtkHbloD3iHlXN7G5uph465o0Wi8jR7BAu8Mknu1Yfep1m+ij3vVaDaq/Qhw3E5
p0Wei9Rd+qwe+K0AhnsJvvUVD5lrKkTlNDCVUkkg9PUJ/gCF3sJfkqgG0wdAfvHg
MyEGx9gUr2zXko96kR/4OZuRFrbBrZj7Q/1XgzQ9P+4PyVwvPTlzApDPj4iSrSEm
Wcls3JvuNv5OFlEGta/CmA3eRi2cOjdsk8ihsoIw==
Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219])
by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 46x40ggcxv-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 15:11:58 +0000 (GMT)
Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1])
by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 54SEvvJe015830;
Wed, 28 May 2025 15:11:57 GMT
Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227])
by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 46uu537qqa-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Wed, 28 May 2025 15:11:57 +0000
Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101])
by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 54SFBtP458130740
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Wed, 28 May 2025 15:11:55 GMT
Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1])
by IMSVA (Postfix) with ESMTP id 859F02004B;
Wed, 28 May 2025 15:11:55 +0000 (GMT)
Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1])
by IMSVA (Postfix) with ESMTP id D8B7D20043;
Wed, 28 May 2025 15:11:47 +0000 (GMT)
Received: from li-dc0c254c-257c-11b2-a85c-98b6c1322444.ibm.com (unknown [9.39.18.84])
by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTPS;
Wed, 28 May 2025 15:11:47 +0000 (GMT)
Date: Wed, 28 May 2025 20:41:43 +0530
From: Ojaswin Mujoo <ojaswin@xxxxxxxxxxxxx>
To: libaokun@xxxxxxxxxxxxxxx
Cc: linux-ext4@xxxxxxxxxxxxxxx, tytso@xxxxxxx, adilger.kernel@xxxxxxxxx,
jack@xxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, yi.zhang@xxxxxxxxxx,
yangerkun@xxxxxxxxxx, libaokun1@xxxxxxxxxx
Subject: Re: [PATCH 4/4] ext4: fix typo in CR_GOAL_LEN_SLOW comment
Message-ID: <aDcnr5AyZT70WN3C@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <20250523085821.1329392-1-libaokun@xxxxxxxxxxxxxxx>
<20250523085821.1329392-5-libaokun@xxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250523085821.1329392-5-libaokun@xxxxxxxxxxxxxxx>
X-TM-AS-GCONF: 00
X-Authority-Analysis: v=2.4 cv=avmyCTZV c=1 sm=1 tr=0 ts=683727be cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=kj9zAlcOel0A:10 a=dt9VzEwgFbYA:10 a=AiHppB-aAAAA:8 a=i0EeH86SAAAA:8 a=VnNF1IyMAAAA:8 a=02WT2I8dFG3kbT2Kk5cA:9
a=CjuIK1q_8ugA:10
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEzMCBTYWx0ZWRfX94GvHdkj1CPC SfL98BrDdNKCuB9L1gT65KsDSX3Ft+kPh7EY5QCokxqM8rDicUbVlq+/Qctld/vxBrSD4v3ppUs OJKc1dwNtfexJsKaTXEsfkjWgZTbERUzH5AkGhJf3uZlngxcI9nYD2nu0EZh5mwnRdWxUIkfZFh
VcwcECtHqNWU8HtsD1j/TpmMQCsC1HbHv8fXqUmTmQhpMXCEZjMcniXryp4/hLkMinJ1OpXensT By17aMR7sXIIphK0fuJg3leecZ/rBLYYhJqmxX2QpkPyBTlWI2Pewv/8NUFojlcIJc0qgfmvFTc 8LKHI/kuMvtOd/30vRmZFaiTU730NTBrQ6nN4tNbHDTDiQq3vvYqGh/Dq4+9VZgsQJUWPOnxY7d
s8xYH6OkA0tcQBbGoL+nba7qgtr3nRjB5+VP/trwskBBwzMnhoBZlZ1hV5s4DTjhanr/c+P8
X-Proofpoint-GUID: 09-clRghPc5abKIhN52lkYHxzrYrm_1L
X-Proofpoint-ORIG-GUID: 09-clRghPc5abKIhN52lkYHxzrYrm_1L
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_07,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501
bulkscore=0 suspectscore=0 spamscore=0 clxscore=1015 impostorscore=0
phishscore=0 adultscore=0 lowpriorityscore=0 mlxlogscore=739 mlxscore=0
malwarescore=0 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280130
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Fri, May 23, 2025 at 04:58:21PM +0800, libaokun@xxxxxxxxxxxxxxx wrote:
> From: Baokun Li <libaokun1@xxxxxxxxxx>
>
> Remove the superfluous "find_".
>
> Signed-off-by: Baokun Li <libaokun1@xxxxxxxxxx>
Looks good:
Reviewed-by: Ojaswin Mujoo <ojaswin@xxxxxxxxxxxxx>
Regards,
ojaswin
> ---
> fs/ext4/ext4.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
> index f6d01702423d..1182700901cc 100644
> --- a/fs/ext4/ext4.h
> +++ b/fs/ext4/ext4.h
> @@ -157,7 +157,7 @@ enum criteria {
>
> /*
> * Reads each block group sequentially, performing disk IO if
> - * necessary, to find find_suitable block group. Tries to
> + * necessary, to find suitable block group. Tries to
> * allocate goal length but might trim the request if nothing
> * is found after enough tries.
> */
> --
> 2.46.1
>
Return-Path: <linux-kernel+bounces-665701-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 9C44F41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:12:55 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 1D9389E30D5
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:12:19 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id DB91D28C038;
Wed, 28 May 2025 15:12:27 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="KBogPVoB"
Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2047.outbound.protection.outlook.com [40.107.244.47])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 47F4F35947;
Wed, 28 May 2025 15:12:24 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.244.47
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445146; cv=fail; b=bb96L90IPXRHfzppKezhmt5iJVvmOxNbH9sEBn3HvlPvp+/pdyRzDIoqmSYy+2Lm6oOAOKWGiZ/naBs2sIxdP9AledFjxWNZAwl4EJIpJO8vEzapHR/xo07eE2MZyrzJCBkPQ8+JH8X+Z8MWt2+9L6T/0ZSq12OhiLMqrVFgvAk=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445146; c=relaxed/simple;
bh=sKg79tkY3enBCx8pKLJbYXSmONv4FNShBeWVw3Ny2YY=;
h=Message-ID:Date:Subject:To:Cc:References:From:In-Reply-To:
Content-Type:MIME-Version; b=O3zXLNc6oWNaQUxS5ojDPVE7APNmRVtESmr3dAzQ4fSNJ455ytQQhp1Zp3tCQfoy7BwZu9jsPhR6I6c71PvXNRLxNRxxmLnLA6zO/FwOLGmeMRvg6BktmiqT2HBL4YL33aZDDSI3t47iwKSFoRNRKy9jnK0QyJX3we62g5GxbV4=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=KBogPVoB; arc=fail smtp.client-ip=40.107.244.47
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com
Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=At82N5ueRt2dfmytoj02Zy/RkMr1jQ1oWAPctEIWMqH0wa9tLAcnbnnrJPQNGvc7AflVpuwuw/pR4pk038a/hbzWToVIaTQeJocG72NJ5uzVp52kDkx/DdEGU5mLagQ4c1oJSgjp/hULcWEDwWl0fcPgwpCdi/N/X4x1yViBgjFEp4DvHRBDOkTkVTulpHVanPk+DcYOfFIqgTQd1giCjLJmIwQwJ63V6plH/yeXWSU5knrDsrJtrIps0VZ0h0r0hkp/1jnO+edHyblwaFxcJ+CANNc5j3bp/ukBWzbTisH5wzE4/FSmy66UkLtj26XNxxXISNPgTIMj0esoYxI4ow==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=/pjJJxcYYhHlNyYaMoegLwjkdw9pqRTf/hgk7PNR3vw=;
b=hzWEtDP512HOz6ckCxSALSgaxyAH4j1t4R1aMeX0Igb1/hxK3jppgsHKn+DsObvSBEAGxiMC7MgMOaL3qFXcaaeIxNAMUixV+jskqbjs0eTe337rC/47/Wc8KsdTcsYQVEZmA3cKNBfExwvFsLKFaKb3tS22+5ddZrXXph8HyYtW/E+N/5l9RbE8Uwg9LYYByOuVgh38Ae3JQJ5aVjB0pHsNA0nNw1KuWGuNMd348/eAfOA6qE3Regj0xiq8KgaMQOp4z1Q9i17xF7VX3HZIq92VX9X46TuBgK1hvTiuY6lmMDkZSaf4dadmDifR6z1f5q1s96YhCi1CwcNCjClV5g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass
header.d=amd.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=/pjJJxcYYhHlNyYaMoegLwjkdw9pqRTf/hgk7PNR3vw=;
b=KBogPVoB6Nrmxq89QqyhGYqtXXGwCfspZ2MTOP6/3mT3PcEsNKrkJV0CQHX6LBfNfzaULMZH3XyltwD15JobRnw6w872LjNlhVfNaTSfLDIYmqwrslfXzhMJt8vnRtNkSCnaSnEXIXtdCBCr5+mNt1iFaicuvlGKLuCLGNW8Ikc=
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=amd.com;
Received: from IA1PR12MB9064.namprd12.prod.outlook.com (2603:10b6:208:3a8::19)
by CH3PR12MB9731.namprd12.prod.outlook.com (2603:10b6:610:253::5) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.29; Wed, 28 May
2025 15:12:23 +0000
Received: from IA1PR12MB9064.namprd12.prod.outlook.com
([fe80::1f25:d062:c8f3:ade3]) by IA1PR12MB9064.namprd12.prod.outlook.com
([fe80::1f25:d062:c8f3:ade3%6]) with mapi id 15.20.8769.025; Wed, 28 May 2025
15:12:23 +0000
Message-ID: <7bdca720-d39d-6104-c5db-fe3f375aea2f@xxxxxxx>
Date: Wed, 28 May 2025 20:42:13 +0530
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
Thunderbird/102.2.0
Subject: Re: [PATCH v2 00/14] Introduce AMD Pensando RDMA driver
Content-Language: en-US
To: Jason Gunthorpe <jgg@xxxxxxxxxx>
Cc: shannon.nelson@xxxxxxx, brett.creeley@xxxxxxx, davem@xxxxxxxxxxxxx,
edumazet@xxxxxxxxxx, kuba@xxxxxxxxxx, pabeni@xxxxxxxxxx, corbet@xxxxxxx,
leon@xxxxxxxxxx, andrew+netdev@xxxxxxx, allen.hubbe@xxxxxxx,
nikhil.agarwal@xxxxxxx, linux-rdma@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
linux-doc@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
References: <20250508045957.2823318-1-abhijit.gangurde@xxxxxxx>
<aCuywoNni6M+i07r@xxxxxxxxxx> <6bc6fb63-2a31-808d-91f3-eb07a681e631@xxxxxxx>
<20250526131938.GB9786@xxxxxxxxxx> <20250526154133.GF9786@xxxxxxxxxx>
From: Abhijit Gangurde <abhijit.gangurde@xxxxxxx>
In-Reply-To: <20250526154133.GF9786@xxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PN3PR01CA0054.INDPRD01.PROD.OUTLOOK.COM
(2603:1096:c01:98::20) To IA1PR12MB9064.namprd12.prod.outlook.com
(2603:10b6:208:3a8::19)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: IA1PR12MB9064:EE_|CH3PR12MB9731:EE_
X-MS-Office365-Filtering-Correlation-Id: eef7f9ea-6786-41e6-6e3a-08dd9dfa0bf4
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|376014|1800799024;
X-Microsoft-Antispam-Message-Info:
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
=?utf-8?Q?WYwmaGLiBLM=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:IA1PR12MB9064.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(7416014)(376014)(1800799024);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
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
=?utf-8?Q?UVWarxMUT3T5oI7zuNCESK3Ze?=
X-OriginatorOrg: amd.com
X-MS-Exchange-CrossTenant-Network-Message-Id: eef7f9ea-6786-41e6-6e3a-08dd9dfa0bf4
X-MS-Exchange-CrossTenant-AuthSource: IA1PR12MB9064.namprd12.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:12:22.9084
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: yvK3OTbDCv0ePjNr9lCUZFUEaEjeUKvKVQ0wxCZca0TyqH7dTU0pVcB7cLrRFivCBk4dNLDdyvxwzLJhi3sIjA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB9731
X-Spam-Status: No, score=-8.9 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,NICE_REPLY_A,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 5/26/25 21:11, Jason Gunthorpe wrote:
> On Mon, May 26, 2025 at 10:19:38AM -0300, Jason Gunthorpe wrote:
>>>> @@ -1454,11 +1466,15 @@ static int ionic_destroy_cq(struct ib_cq *ibcq, struct ib_udata *udata)
>>>> static bool pd_local_privileged(struct ib_pd *pd)
>>>> {
>>>> + /* That isn't how it works, only the lkey get_dma_mr() returns is
>>>> + special and must be used on any WRs that require it. WRs refering to any
>>>> + other lkeys must behave normally. */
>>>> return !pd->uobject;
>>>> }
> I was thinking about this some more, probably the call to get_dma_mr()
> should set a flag in the pd struct (you need a pds_pd struct) which
> indicates that the IONIC_DMA_LKEY is enabled on that PD. Then all
> QPs/etc created against the PD should allow using it.
>
> Checking a uobject here is just a little weird.
>
> Jason
Sure. Will use a flag inside pd to indicate use of local key.
Thanks,
Abhijit
Return-Path: <linux-kernel+bounces-665702-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id AABD841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:16:46 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 688E31BC2EA3
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:16:59 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id CBD5928C009;
Wed, 28 May 2025 15:16:37 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=mareichelt.com header.i=@mareichelt.com header.b="Jkkyigci"
Received: from antaris-organics.com (mail.antaris-organics.com [91.227.220.155])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 704E11C683;
Wed, 28 May 2025 15:16:35 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.227.220.155
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445397; cv=none; b=IVteamdhrkVlXMeGt+AZ/fhC9/HBoaEKTFnmH3IWHZBaKTVuzzWB+MBRL/q3rX0xxlCUC7v8iTsoNajqmi3FZYI8ijXjDKTLL4kyAanerYkChZOk9PuwQBVk51Xlx9nnChAJmrt5RU+5PgVkADRFL7cY5pErqBhYIKwKROfQbYY=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445397; c=relaxed/simple;
bh=1mY5bie4lL53OVDgv/QLhzcmOYpW6GrMqMwi0NRuBB0=;
h=Date:From:To:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=MXdnQc2wV++N6bVe874IAtGZ6vFwCY9tXScrzqMdCa6kScVqn2IWPiTvkLRaxILxn3FzF2qO9YSOO4nz7vsZkTXB3pbaZmelTDGVj6Zzz6dvTi0pNHiSIy3mrOiHLlSmEQDuQo8M39iRhxTbJvKUyIqvnvN51Ch+rohBRq/iR4U=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=mareichelt.com; spf=pass smtp.mailfrom=mareichelt.com; dkim=pass (2048-bit key) header.d=mareichelt.com header.i=@mareichelt.com header.b=Jkkyigci; arc=none smtp.client-ip=91.227.220.155
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=mareichelt.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mareichelt.com
Date: Wed, 28 May 2025 17:16:32 +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=mareichelt.com;
s=202107; t=1748445393;
bh=1mY5bie4lL53OVDgv/QLhzcmOYpW6GrMqMwi0NRuBB0=;
h=Date:From:To:Subject:Message-ID:References:MIME-Version:
Content-Type:In-Reply-To:Cc:Cc:content-type:content-type:date:date:
From:from:in-reply-to:in-reply-to:message-id:mime-version:
mime-version:references:reply-to:Sender:Subject:Subject:To:To;
b=JkkyigcidDNAJayF/KIqoKPYlvdnwyPTq38fZi6mMmPfEfTITDboDWTKJtmsQjuTG
4rcTCgfHHptP0MXk4+nzZgAqEKo0XEdIcdCrV9DPtp5Yq6fW0fMSzB+9b0xtjOX6Q/
b1hugMM5dVIemHh36wnvdp3kXxcTJkY3VRvKFd4ix+HjfVRk4L+O55mhQav6UuCWmc
qOcc5JasTu9SFcFC+aK8mP7yrJysgmMJ3d73+OrcU7NLnCv93D5N8g+WO+BcRpByqJ
WTWWbOPRBgS090tkHDkLk5uerFEgtlrHa7Ia8C1bLazndFGLAHv7VprrhjZZMKbfYg
6dCfRD/BPl4Pg==
From: Markus Reichelt <lkt+2023@xxxxxxxxxxxxxx>
To: stable@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH 6.12 000/626] 6.12.31-rc1 review
Message-ID: <20250528151632.GB24108@xxxxxxxxxxxxxxxxxxx>
Mail-Followup-To: stable@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
References: <20250527162445.028718347@xxxxxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250527162445.028718347@xxxxxxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
* Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> wrote:
> This is the start of the stable review cycle for the 6.12.31 release.
> There are 626 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Thu, 29 May 2025 16:22:51 +0000.
> Anything received after that time might be too late.
Hi Greg
6.12.31-rc1 compiles on x86_64 (Xeon E5-1620 v2, Slackware64-15.0),
and boots & runs on x86_64 (AMD Ryzen 5 7520U, Slackware64-current),
no regressions observed.
Tested-by: Markus Reichelt <lkt+2023@xxxxxxxxxxxxxx>
Return-Path: <linux-kernel+bounces-665703-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 076F041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:16:57 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 39D561672E1
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:16:58 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 1A0C728C2C6;
Wed, 28 May 2025 15:16:40 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="U5qcrL7i"
Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD16D28B7DE
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:16:36 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445399; cv=none; b=fW8hICH5BSUg9ViFlV0thZ1hS7rsCiy2vwMn5CvSYrDJHM1llJ8N0zziWvdvV9Q+huZNZXeBJqYNbPYUHLAyBhMzSShbp4wN85R0I1E62OXFfD+iOH988jU5bRC6bFLXLSPnzRIjkXdsHwm1khn+9E6klCTSrlBdCp7QX9XHdYc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445399; c=relaxed/simple;
bh=HKtMs1Z1xsEaiROa1YazGcStiDxVpMzzYhroj5kvTy8=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=m+rcuCiVj8Fu2SPVL8SvfaHRzm3wNuwdiifG1CzxLVgGW9ZQ24b9K2q53Tvzh8DF1PRnu7lmsJNlLJDiASK4ArI9Z9OIP9a1rk17Nq7PL6Rb6TrRfHP7K/BveKJw2kJ6Qk5pTAljEmiTFzilwDWULpSew3hleR+tOVPlR1We/qc=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=U5qcrL7i; arc=none smtp.client-ip=209.85.216.53
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com
Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com
Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-3087a70557bso739669a91.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:16:36 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=purestorage.com; s=google2022; t=1748445396; x=1749050196; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=9RzDNT2OTFzwrTpW2QhZAxDyX5hWvQosjJ6d0+XM2Bo=;
b=U5qcrL7ilLdxcqy7X0mEhyQavrsLee2GkQB7ndvERj4ynKgbc/vtpi3N9DkL0+FGax
r9Ikp/ya2iN4l2y4xDxU+iAkBwA3iVt61qV1oN0IfdDprMDFyiHP/Jew4aNVrSQDXsn7
3nvnN8r7I9RvJ2NoD1fbw0B8BUXmgkl/Ym7efdkO14J8ifc8Mv+xSs0xN0AZmnie26+k
HkoD5VkQSL/HQN1xhWpSRyTaRJQTROXw9sFhUhyxWgB4MWsLmfRnQf3+G6DRFtyiV+3a
UhLChLF9+vLplq35i4tdmPUTb/FS7SIXwwl/OCm+WBq7TBpDnIFLU5h8k4hC4+/obsra
n54w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748445396; x=1749050196;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=9RzDNT2OTFzwrTpW2QhZAxDyX5hWvQosjJ6d0+XM2Bo=;
b=ga84kU3J85WAQbZwCjF8oWahfcCB86FIxmTGQGQAkyn6GKva1Bx7D5qt7nCiC2M+UX
TkT95h/kYGZ+KATGTa/xl58fhW52CQkuisItytxNB/cDEHdNEO8r2d//biO6TWJCQSJy
2foeioYHTj5bq+Y4Aol3JyK0rXrMc88RRCjJri2kvFlolDJ/S9spvw1+ZOQk0Eqom0US
qP4KeOkujUecWp1DJTjeWxLR6CZcnl6eo7obfCPgcVBYZOxhcF2iMIlf7trsdgarQywO
vsGJ81BpvFZGkrx8u/N5KWcKT4Bw5s4Wft0JipZXXroAgU/r2r6Wqhe7A3C3ZByVvYuJ
EvrQ==
X-Forwarded-Encrypted: i=1; AJvYcCX5yy6xQM3/xUlesXVJnbAg/V7gYcmBEg4rAXI7AElZsI4hgAhqCQhCbfZyU/+7g5SIVKpHkEAPhh3km7A=@vger.kernel.org
X-Gm-Message-State: AOJu0YzQv1/hDZeQWAyK4vPI36D9uc0G6jEJrEOYLUze3rvkR2E3DGKl
+SDWI4po5yN3nIs/gtI0uZiMyF5JI9e+ZHUHq0/q4/Ve04E14H1Q8v7a916aDxrjnAv8anWe8VT
hNZemuBkZG0yEFe3/Q2cv3RndYcGe4YdjbRSHuF8LNA==
X-Gm-Gg: ASbGncuRM4tWrLDLRbvfw5QIosl0vOuv45OzOdbgVwQT/d4x9jB+fWlv9xUrGwyNb4d
yZB1jw3okqrNtDCPNkyf21mBI/a4gu4sP3fv1JnbgZLh0u25rz4WQGGr0TdFzwX2nbvqSp5GUGI
b4QlHjcT3hFLHPyUJ0AcFjBm8CrjU25iEr
X-Google-Smtp-Source: AGHT+IHk/hFwszn+lGW4RY3KI45JUHzvCbI/GU7IlZ6KImluQy2hWku6LQLjd67CNr1rcUJjul/qPMYZDMndG3LG9Mc=
X-Received: by 2002:a17:90a:e7cd:b0:311:c5d9:2c8b with SMTP id
98e67ed59e1d1-311c5d93147mr3267754a91.5.1748445395685; Wed, 28 May 2025
08:16:35 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250411161746.1043239-1-csander@xxxxxxxxxxxxxxx> <3ucksa6coiwco3wpmcjtfwezqjigzm2zwvdvkt2ryvefzojtqy@4lda47c236uz>
In-Reply-To: <3ucksa6coiwco3wpmcjtfwezqjigzm2zwvdvkt2ryvefzojtqy@4lda47c236uz>
From: Caleb Sander Mateos <csander@xxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 08:16:24 -0700
X-Gm-Features: AX0GCFuDb9gBXu2ZIGF6ICRVSiBRQ0nrfOWmiTmw7s1LAbIKsh9w7lElDPYOc0M
Message-ID: <CADUfDZpPGQEY9u3p3MCU2S3qmDyKmE1JnSQ6G2jO4_J40rQeeQ@xxxxxxxxxxxxxx>
Subject: Re: [PATCH] mm: remove unused mmap tracepoints
To: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>, "Liam R . Howlett" <Liam.Howlett@xxxxxxxxxx>,
Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>
Cc: Steven Rostedt <rostedt@xxxxxxxxxxx>, Masami Hiramatsu <mhiramat@xxxxxxxxxx>,
Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx>, Eric Mueller <emueller@xxxxxxxxxxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx, linux-trace-kernel@xxxxxxxxxxxxxxx,
linux-mm@xxxxxxxxx, Vlastimil Babka <vbabka@xxxxxxx>, Jann Horn <jannh@xxxxxxxxxx>,
Pedro Falcato <pfalcato@xxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi MM folks,
Would you mind picking up this patch to remove some old tracepoints?
Liam has already given it a review.
Thanks,
Caleb
On Fri, Apr 11, 2025 at 10:23=E2=80=AFAM Liam R. Howlett
<Liam.Howlett@xxxxxxxxxx> wrote:
>
> * Caleb Sander Mateos <csander@xxxxxxxxxxxxxxx> [250411 12:18]:
> > The vma_mas_szero and vma_store tracepoints are unused since commit
> > fbcc3104b843 ("mmap: convert __vma_adjust() to use vma iterator").
> > Remove them so they are no longer listed as available tracepoints.
> >
>
> Thanks for doing this.
>
> Reviewed-by: Liam R. Howlett <Liam.Howlett@xxxxxxxxxx>
>
> > Reported-by: Eric Mueller <emueller@xxxxxxxxxxxxxxx>
> > Signed-off-by: Caleb Sander Mateos <csander@xxxxxxxxxxxxxxx>
> > ---
> > include/trace/events/mmap.h | 52 -------------------------------------
> > 1 file changed, 52 deletions(-)
> >
> > diff --git a/include/trace/events/mmap.h b/include/trace/events/mmap.h
> > index f8d61485de16..ee2843a5daef 100644
> > --- a/include/trace/events/mmap.h
> > +++ b/include/trace/events/mmap.h
> > @@ -41,62 +41,10 @@ TRACE_EVENT(vm_unmapped_area,
> > __entry->total_vm, __entry->flags, __entry->length,
> > __entry->low_limit, __entry->high_limit, __entry->align_m=
ask,
> > __entry->align_offset)
> > );
> >
> > -TRACE_EVENT(vma_mas_szero,
> > - TP_PROTO(struct maple_tree *mt, unsigned long start,
> > - unsigned long end),
> > -
> > - TP_ARGS(mt, start, end),
> > -
> > - TP_STRUCT__entry(
> > - __field(struct maple_tree *, mt)
> > - __field(unsigned long, start)
> > - __field(unsigned long, end)
> > - ),
> > -
> > - TP_fast_assign(
> > - __entry->mt =3D mt;
> > - __entry->start =3D start;
> > - __entry->end =3D end;
> > - ),
> > -
> > - TP_printk("mt_mod %p, (NULL), SNULL, %lu, %lu,",
> > - __entry->mt,
> > - (unsigned long) __entry->start,
> > - (unsigned long) __entry->end
> > - )
> > -);
> > -
> > -TRACE_EVENT(vma_store,
> > - TP_PROTO(struct maple_tree *mt, struct vm_area_struct *vma),
> > -
> > - TP_ARGS(mt, vma),
> > -
> > - TP_STRUCT__entry(
> > - __field(struct maple_tree *, mt)
> > - __field(struct vm_area_struct *, vma)
> > - __field(unsigned long, vm_start)
> > - __field(unsigned long, vm_end)
> > - ),
> > -
> > - TP_fast_assign(
> > - __entry->mt =3D mt;
> > - __entry->vma =3D vma;
> > - __entry->vm_start =3D vma->vm_start;
> > - __entry->vm_end =3D vma->vm_end - 1;
> > - ),
> > -
> > - TP_printk("mt_mod %p, (%p), STORE, %lu, %lu,",
> > - __entry->mt, __entry->vma,
> > - (unsigned long) __entry->vm_start,
> > - (unsigned long) __entry->vm_end
> > - )
> > -);
> > -
> > -
> > TRACE_EVENT(exit_mmap,
> > TP_PROTO(struct mm_struct *mm),
> >
> > TP_ARGS(mm),
> >
> > --
> > 2.45.2
> >
Return-Path: <linux-kernel+bounces-665704-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id A43D641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:18:52 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 005727A1E61
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:17:32 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 69F4D28C01B;
Wed, 28 May 2025 15:18:39 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Nu+Pb8gI"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id AB1671C683;
Wed, 28 May 2025 15:18:38 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445518; cv=none; b=jNEC+4+9vxjQjHpna/bjj/zL+Qf5suRWn+02U9SxnJOXAZGAd+3wacoTLph/ZInO9X11dbX0ShEbVTbJtSCXg/6KXBgbrlXzR4Ct/ssSNgfz5NypoSLVtWHq9W2wa5L1P411ynqxQRicdAPm3x2LT7dDX89rRA1wkOcHtwkEyqg=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445518; c=relaxed/simple;
bh=+zDJ8MaeFZpDuL2f5yRXJ9pjdL74Yqj2SSN6QD34VgI=;
h=Mime-Version:Content-Type:Date:Message-Id:Cc:Subject:From:To:
References:In-Reply-To; b=u1MTTjuenGXpwG+IpzwKQwTiEP6m4S12UFt/PAGqS5Sb8Oj/JsAvkVA7+uDCfN/PGgtC5vroGHhsd+Y9TMhNCZwuKO3mKRKUES1ze3SurorQ9tuQssqNmodTLqB877JmcCMj88R7VysXnsLak9i1Q2BZiEYc5iB2kgajmOF15DI=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Nu+Pb8gI; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id BC23EC4CEED;
Wed, 28 May 2025 15:18:34 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748445518;
bh=+zDJ8MaeFZpDuL2f5yRXJ9pjdL74Yqj2SSN6QD34VgI=;
h=Date:Cc:Subject:From:To:References:In-Reply-To:From;
b=Nu+Pb8gIrtgHgB8mrs3o9QSmjutdd2/6IMQK9d2hPiK40xRnhXMPFs1lWMMNLKk3w
c2/2+Di7rKMH+2GM1eMlqbNlniagubrsvoRxesI4Rf7GOQW/6sl2yB5jVp95vQkvQq
wmw2EmFHJTwCy6J+ZteoJVY/38oo2+Pz/4C4sU4zkM0H/GgcETdy8DxKUvJeravkuR
Tw5s9ISOuOMLxKCIsr5pjz1cgabfJeCoUcRgX8xST+uYzoRoUxxdct5Kgxkv/rFgaG
J1VlxWxfXEW/n6cQnohF9iRnaDZoYk5bfUaHH5pbV1C92wss+pJ/L6PXwgsLthlLZA
/ZepwO3iA/BFA==
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
Mime-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=UTF-8
Date: Wed, 28 May 2025 17:18:32 +0200
Message-Id: <DA7W7FU3XF0C.3N7KB44MCSPTG@xxxxxxxxxx>
Cc: "Miguel Ojeda" <ojeda@xxxxxxxxxx>, "Alex Gaynor"
<alex.gaynor@xxxxxxxxx>, "Boqun Feng" <boqun.feng@xxxxxxxxx>, "Gary Guo"
<gary@xxxxxxxxxxx>, =?utf-8?q?Bj=C3=B6rn_Roy_Baron?=
<bjorn3_gh@xxxxxxxxxxxxxx>, "Andreas Hindborg" <a.hindborg@xxxxxxxxxx>,
"Alice Ryhl" <aliceryhl@xxxxxxxxxx>, "Trevor Gross" <tmgross@xxxxxxxxx>,
"Danilo Krummrich" <dakr@xxxxxxxxxx>, "Fiona Behrens" <me@xxxxxxxxxx>,
"Christian Schrefl" <chrisi.schrefl@xxxxxxxxx>, "Alban Kurti"
<kurti@xxxxxxxxxx>, "Michael Vetter" <jubalh@xxxxxxxxxx>, "Lyude Paul"
<lyude@xxxxxxxxxx>, <rust-for-linux@xxxxxxxxxxxxxxx>,
<linux-kernel@xxxxxxxxxxxxxxx>
Subject: Re: [PATCH v2 01/13] rust: pin-init: rename `zeroed` to
`init_zeroed`
From: "Benno Lossin" <lossin@xxxxxxxxxx>
To: =?utf-8?q?Beno=C3=AEt_du_Garreau?= <benoit@xxxxxxxxxxxx>
X-Mailer: aerc 0.20.1
References: <20250523145125.523275-2-lossin@xxxxxxxxxx>
<20250527215424.26374-1-benoit@xxxxxxxxxxxx>
In-Reply-To: <20250527215424.26374-1-benoit@xxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue May 27, 2025 at 11:54 PM CEST, Beno=C3=AEt du Garreau wrote:
> On Fri, 23 May 2025 16:50:57 +0200 Benno Lossin <lossin@xxxxxxxxxx> wrote=
:
>> @@ -1469,7 +1469,7 @@ pub unsafe trait PinnedDrop: __internal::HasPinDat=
a {
>> /// this is not UB:
>> ///
>> /// ```rust,ignore
>> -/// let val: Self =3D unsafe { core::mem::zeroed() };
>> +/// let val: Self =3D unsafe { core::mem::init_zeroed() };
>
> This looks like a find/replace that was a bit too eager :)
Oh yeah! Thanks for spotting this!
---
Cheers,
Benno
Return-Path: <linux-kernel+bounces-665705-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 9F73641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:19:08 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id AF0F07A51B9
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:17:43 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id A2F061EF0A6;
Wed, 28 May 2025 15:18:43 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b="Z+mtgut+"
Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11020072.outbound.protection.outlook.com [52.101.51.72])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id CECC01E102D
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:18:38 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.51.72
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445521; cv=fail; b=qRj0IDHaCM6kkbkut1onxp04k/A6cTfCf0wIOrwjvPZqshTb8O2YOBgj3qagU8dVlYTP3lLtWeg19yYHjy9ttQnYq+/t538AwyE4pN7XPyC1bJywx6IJ95AgQIZFH2H4fR0L87VWOMLZSlbBO0EC6BxR5w0R8UdLIzM9Oxi8iiU=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445521; c=relaxed/simple;
bh=KUiiR5sAT6Q+vt3LPUCUt+NsWChnbDPGj6T8zREW2qA=;
h=Message-ID:Date:Subject:To:Cc:References:From:In-Reply-To:
Content-Type:MIME-Version; b=EUlGV1hYSCYnihQs/p7DgNoe/wNU7H2XMGr6+RmQkPluyp40OXdaStGhah1JoT3B1RRHAmEEH1tdLrlgeF7Z3JgFrUdUdFkbMJSn0KtV00QmyOqWOk/QZW+gVV/FFrx8NuorYPl+plKYet3ZDLLCKOI8IiKINWhC6mfXaZJLMLU=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com; spf=pass smtp.mailfrom=os.amperecomputing.com; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b=Z+mtgut+; arc=fail smtp.client-ip=52.101.51.72
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=os.amperecomputing.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=UmuwhqGNuNnzrApwXAI1Ul8URwNRkYAyZJth/nkVB4XKbMCUriiUK3uyobVreKY13+tLVGbPH39WXgJLZ0+BLJcgF35B/o+fPwjgffGiW24dau5VMb3v9CyuP4kf6ctWYe92wwWqvJDqQ+jPDiOAUDINKB24gpoQBBQyr3W5flIbgOtl7WqQaU0gHoyr8pfXAlQ8nKylihIQvVkGj61J2yrYbrtWlPUNWb08PFzg0DrVzvjQPTeo6xxN/mhT9lG+RtlkPE9u6EFFx6CQHUUC/hUqlvJ7cS3CJsjWY8WLHGkUVmjj74+jaiFcUWWiZX4VSg8TD3yeKkNFMQsvZwA8/Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=R+PqIrpP2tN3jBRlpujatrG99RDuDvo/HA47gvOv6jg=;
b=nXgQ67WujtDNXWDFEyYENdyI47AXWsL6bCKuFsWf50A8boEQvZkBCR52Sb97gO0hS0Y2MVInh0MoUbKzYHLkNdbOBy4OiKB4MbO9vE08QOo40D1KaNVnbyNxqZ0PV5wtmOXAQ2tEpQBAl9BzSpSbr9GNYLpU5qtF2F9B24/xEKVm+rMCu45YM+ItBt2xfQH/DW7Mwdn4UiB4Q8c4PLPzsNACrePkcrARs8A3kJmMqTWr2Jfwm49EeNaw4fohAM6VxgPv5lMPLodAwP1oFEw/mjXnZO2W51F/svwzBIL7zd5QuS2erW1hsCoPSGWvStUyjtpzgSwMvJo3XMPbutKwVQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none
header.from=os.amperecomputing.com; dkim=pass
header.d=os.amperecomputing.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=os.amperecomputing.com; s=selector2;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=R+PqIrpP2tN3jBRlpujatrG99RDuDvo/HA47gvOv6jg=;
b=Z+mtgut+GIKYcGhvTrVQZ7QihEK5/Sa1RcOYsVnf9B2fgmm8etco9Ow3yfFM4vLWnIfnHgeWkEOApUnVKZsncLGDgqxhPkfkX2CsYxXNVtBOdRGzAZQo2L5Q7irxmta38IZ/tujCCHFadkTbhIIlBPRGSlciu0Vkrd6S9nX5MCg=
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=os.amperecomputing.com;
Received: from CH0PR01MB6873.prod.exchangelabs.com (2603:10b6:610:112::22) by
MN0PR01MB7634.prod.exchangelabs.com (2603:10b6:208:376::11) with Microsoft
SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
15.20.8769.26; Wed, 28 May 2025 15:18:31 +0000
Received: from CH0PR01MB6873.prod.exchangelabs.com
([fe80::3850:9112:f3bf:6460]) by CH0PR01MB6873.prod.exchangelabs.com
([fe80::3850:9112:f3bf:6460%6]) with mapi id 15.20.8769.029; Wed, 28 May 2025
15:18:31 +0000
Message-ID: <0769dbcb-bd9e-4c36-b2c1-a624abaeb5ce@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 08:18:28 -0700
User-Agent: Mozilla Thunderbird
Subject: Re: [v3 PATCH 0/6] arm64: support FEAT_BBM level 2 and large block
mapping when rodata=full
To: Ryan Roberts <ryan.roberts@xxxxxxx>, will@xxxxxxxxxx,
catalin.marinas@xxxxxxx, Miko.Lenczewski@xxxxxxx,
scott@xxxxxxxxxxxxxxxxxxxxxx, cl@xxxxxxxxxx
Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
Dev Jain <dev.jain@xxxxxxx>
References: <20250304222018.615808-1-yang@xxxxxxxxxxxxxxxxxxxxxx>
<3750d3f8-17c6-4bb8-8107-215d442e4ec3@xxxxxxxxxxxxxxxxxxxxxx>
<2fb974bb-1470-4a5f-90d5-97456140c98f@xxxxxxx>
<22b53cff-00db-48f1-b1e8-b11a54ebb147@xxxxxxxxxxxxxxxxxxxxxx>
<4794885d-2e17-4bd8-bdf3-8ac37047e8ee@xxxxxxxxxxxxxxxxxxxxxx>
<5c6d9706-7684-4288-b630-c60b3766b13f@xxxxxxx>
<4d02978c-03c0-48fe-84eb-0f3fa0c54fea@xxxxxxxxxxxxxxxxxxxxxx>
<912c3126-8ba7-4c3a-b168-438f92e89217@xxxxxxx>
<2ab5f65c-b9dc-471c-9b61-70d765af285e@xxxxxxxxxxxxxxxxxxxxxx>
<239d4e93-7ab6-4fc9-b907-7ca9d71f81fd@xxxxxxx>
<1141d96c-f785-48ee-a0f6-9ec658cc11c2@xxxxxxxxxxxxxxxxxxxxxx>
<9cdb027c-27db-4195-825d-1d63bec1b69b@xxxxxxxxxxxxxxxxxxxxxx>
<e3e6a3e0-3012-4d95-9236-4b4d57c7974c@xxxxxxx>
Content-Language: en-US
From: Yang Shi <yang@xxxxxxxxxxxxxxxxxxxxxx>
In-Reply-To: <e3e6a3e0-3012-4d95-9236-4b4d57c7974c@xxxxxxx>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-ClientProxiedBy: BYAPR07CA0032.namprd07.prod.outlook.com
(2603:10b6:a02:bc::45) To CH0PR01MB6873.prod.exchangelabs.com
(2603:10b6:610:112::22)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: CH0PR01MB6873:EE_|MN0PR01MB7634:EE_
X-MS-Office365-Filtering-Correlation-Id: 0d6077bc-22b4-4ef3-83ee-08dd9dfae773
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014;
X-Microsoft-Antispam-Message-Info:
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
=?utf-8?Q?O6SD3+jrnbQ=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH0PR01MB6873.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014);DIR:OUT;SFP:1102;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
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
=?utf-8?B?L1E9PQ==?=
X-OriginatorOrg: os.amperecomputing.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 0d6077bc-22b4-4ef3-83ee-08dd9dfae773
X-MS-Exchange-CrossTenant-AuthSource: CH0PR01MB6873.prod.exchangelabs.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:18:30.9125
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Hw2k8NdD2YUXQ+s8o9sf++se1tW1+3dpqiGzWLXSrCOYLt9cggkBLv06ZKsIwv+MOBOU1hPBsb2PEUq6h3mDHzY4yPtwyZXO5LIjCtTWd4M=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR01MB7634
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 5/28/25 6:13 AM, Ryan Roberts wrote:
> On 28/05/2025 01:00, Yang Shi wrote:
>> Hi Ryan,
>>
>> I got a new spin ready in my local tree on top of v6.15-rc4. I noticed there
>> were some more comments on Miko's BBML2 patch, it looks like a new spin is
>> needed. But AFAICT there should be no significant change to how I advertise
>> AmpereOne BBML2 in my patches. We will keep using MIDR list to check whether
>> BBML2 is advertised or not and the erratum seems still be needed to fix up
>> AA64MMFR2 BBML2 bits for AmpereOne IIUC.
> Yes, I agree this should not impact you too much.
>
>> You also mentioned Dev was working on patches to have __change_memory_common()
>> apply permission change on a contiguous range instead of on page basis (the
>> status quo). But I have not seen the patches on mailing list yet. However I
>> don't think this will result in any significant change to my patches either,
>> particularly the split primitive and linear map repainting.
> I think you would need Dev's series to be able to apply the permissions change
> without needing to split the whole range to pte mappings? So I guess your change
> must either be implementing something similar to what Dev is working on or you
> are splitting the entire range to ptes? If the latter, then I'm not keen on that
> approach.
I don't think Dev's series is mandatory prerequisite for my patches.
IIUC how the split primitive keeps block mapping if it is fully
contained is independent from how to apply the permissions change on it.
The new spin implemented keeping block mapping if it is fully contained
as we discussed earlier. I'm supposed Dev's series just need to check
whether the mapping is block or not when applying permission change.
The flow just looks like as below conceptually:
split_mapping(start, end)
apply_permission_change(start, end)
The split_mapping() guarantees keep block mapping if it is fully
contained in the range between start and end, this is my series's
responsibility. I know the current code calls apply_to_page_range() to
apply permission change and it just does it on PTE basis. So IIUC Dev's
series will modify it or provide a new API, then
__change_memory_common() will call it to change permission. There should
be some overlap between mine and Dev's, but I don't see strong dependency.
>
> Regarding the linear map repainting, I had a chat with Catalin, and he reminded
> me of a potential problem; if you are doing the repainting with the machine
> stopped, you can't allocate memory at that point; it's possible a CPU was inside
> the allocator when it stopped. And I think you need to allocate intermediate
> pgtables, right? Do you have a solution to that problem? I guess one approach
> would be to figure out how much memory you will need and pre-allocate prior to
> stoping the machine?
OK, I don't remember we discussed this problem before. I think we can do
something like what kpti does. When creating the linear map we know how
many PUD and PMD mappings are created, we can record the number, it will
tell how many pages we need for repainting the linear map.
>
>> So I plan to post v4 patches to the mailing list. We can focus on reviewing the
>> split primitive and linear map repainting. Does it sound good to you?
> That works assuming you have a solution for the above.
I think the only missing part is preallocating page tables for
repainting. I will add this, then post the new spin to the mailing list.
Thanks,
Yang
>
> Thanks,
> Ryan
>
>> Thanks,
>> Yang
>>
>>
>> On 5/7/25 2:16 PM, Yang Shi wrote:
>>>
>>> On 5/7/25 12:58 AM, Ryan Roberts wrote:
>>>> On 05/05/2025 22:39, Yang Shi wrote:
>>>>> On 5/2/25 4:51 AM, Ryan Roberts wrote:
>>>>>> On 14/04/2025 22:24, Yang Shi wrote:
>>>>>>> On 4/14/25 6:03 AM, Ryan Roberts wrote:
>>>>>>>> On 10/04/2025 23:00, Yang Shi wrote:
>>>>>>>>> Hi Ryan,
>>>>>>>>>
>>>>>>>>> I know you may have a lot of things to follow up after LSF/MM. Just gently
>>>>>>>>> ping,
>>>>>>>>> hopefully we can resume the review soon.
>>>>>>>> Hi, I'm out on holiday at the moment, returning on the 22nd April. But
>>>>>>>> I'm very
>>>>>>>> keen to move this series forward so will come back to you next week.
>>>>>>>> (although
>>>>>>>> TBH, I thought I was waiting for you to respond to me... :-| )
>>>>>>>>
>>>>>>>> FWIW, having thought about it a bit more, I think some of the suggestions I
>>>>>>>> previously made may not have been quite right, but I'll elaborate next week.
>>>>>>>> I'm
>>>>>>>> keen to build a pgtable splitting primitive here that we can reuse with
>>>>>>>> vmalloc
>>>>>>>> as well to enable huge mappings by default with vmalloc too.
>>>>>>> Sounds good. I think the patches can support splitting vmalloc page table
>>>>>>> too.
>>>>>>> Anyway we can discuss more after you are back. Enjoy your holiday.
>>>>>> Hi Yang,
>>>>>>
>>>>>> Sorry I've taken so long to get back to you. Here's what I'm currently
>>>>>> thinking:
>>>>>> I'd eventually like to get to the point where the linear map and most vmalloc
>>>>>> memory is mapped using the largest possible mapping granularity (i.e. block
>>>>>> mappings at PUD/PMD, and contiguous mappings at PMD/PTE level).
>>>>>>
>>>>>> vmalloc has history with trying to do huge mappings by default; it ended up
>>>>>> having to be turned into an opt-in feature (instead of the original opt-out
>>>>>> approach) because there were problems with some parts of the kernel expecting
>>>>>> page mappings. I think we might be able to overcome those issues on arm64 with
>>>>>> BBML2.
>>>>>>
>>>>>> arm64 can already support vmalloc PUD and PMD block mappings, and I have a
>>>>>> series (that should make v6.16) that enables contiguous PTE mappings in
>>>>>> vmalloc
>>>>>> too. But these are currently limited to when VM_ALLOW_HUGE is specified. To be
>>>>>> able to use that by default, we need to be able to change permissions on
>>>>>> sub-regions of an allocation, which is where BBML2 and your series come in.
>>>>>> (there may be other things we need to solve as well; TBD).
>>>>>>
>>>>>> I think the key thing we need is a function that can take a page-aligned
>>>>>> kernel
>>>>>> VA, will walk to the leaf entry for that VA and if the VA is in the middle of
>>>>>> the leaf entry, it will split it so that the VA is now on a boundary. This
>>>>>> will
>>>>>> work for PUD/PMD block entries and contiguous-PMD/contiguous-PTE entries. The
>>>>>> function can assume BBML2 is present. And it will return 0 on success, -EINVAL
>>>>>> if the VA is not mapped or -ENOMEM if it couldn't allocate a pgtable to
>>>>>> perform
>>>>>> the split.
>>>>> OK, the v3 patches already handled page table allocation failure with returning
>>>>> -ENOMEM and BUG_ON if it is not mapped because kernel assumes linear mapping
>>>>> should be always present. It is easy to return -EINVAL instead of BUG_ON.
>>>>> However I'm wondering what usecases you are thinking about? Splitting vmalloc
>>>>> area may run into unmapped VA?
>>>> I don't think BUG_ON is the right behaviour; crashing the kernel should be
>>>> discouraged. I think even for vmalloc under correct conditions we shouldn't see
>>>> any unmapped VA. But vmalloc does handle it gracefully today; see (e.g.)
>>>> vunmap_pmd_range() which skips the pmd if its none.
>>>>
>>>>>> Then we can use that primitive on the start and end address of any range for
>>>>>> which we need exact mapping boundaries (e.g. when changing permissions on part
>>>>>> of linear map or vmalloc allocation, when freeing part of a vmalloc
>>>>>> allocation,
>>>>>> etc). This way we only split enough to ensure the boundaries are precise, and
>>>>>> keep larger mappings inside the range.
>>>>> Yeah, makes sense to me.
>>>>>
>>>>>> Next we need to reimplement __change_memory_common() to not use
>>>>>> apply_to_page_range(), because that assumes page mappings only. Dev Jain has
>>>>>> been working on a series that converts this to use walk_page_range_novma() so
>>>>>> that we can change permissions on the block/contig entries too. That's not
>>>>>> posted publicly yet, but it's not huge so I'll ask if he is comfortable with
>>>>>> posting an RFC early next week.
>>>>> OK, so the new __change_memory_common() will change the permission of page
>>>>> table, right?
>>>> It will change permissions of all the leaf entries in the range of VAs it is
>>>> passed. Currently it assumes that all the leaf entries are PTEs. But we will
>>>> generalize to support all the other types of leaf entries too.,
>>>>
>>>>> If I remember correctly, you suggested change permissions in
>>>>> __create_pgd_mapping_locked() for v3. So I can disregard it?
>>>> Yes I did. I think this made sense (in my head at least) because in the context
>>>> of the linear map, all the PFNs are contiguous so it kind-of makes sense to
>>>> reuse that infrastructure. But it doesn't generalize to vmalloc because vmalloc
>>>> PFNs are not contiguous. So for that reason, I think it's preferable to have an
>>>> independent capability.
>>> OK, sounds good to me.
>>>
>>>>> The current code assumes the address range passed in by change_memory_common()
>>>>> is *NOT* physically contiguous so __change_memory_common() handles page table
>>>>> permission on page basis. I'm supposed Dev's patches will handle this then my
>>>>> patch can safely assume the linear mapping address range for splitting is
>>>>> physically contiguous too otherwise I can't keep large mappings inside the
>>>>> range. Splitting vmalloc area doesn't need to worry about this.
>>>> I'm not sure I fully understand the point you're making here...
>>>>
>>>> Dev's series aims to use walk_page_range_novma() similar to riscv's
>>>> implementation so that it can walk a VA range and update the permissions on each
>>>> leaf entry it visits, regadless of which level the leaf entry is at. This
>>>> doesn't make any assumption of the physical contiguity of neighbouring leaf
>>>> entries in the page table.
>>>>
>>>> So if we are changing permissions on the linear map, we have a range of VAs to
>>>> walk and convert all the leaf entries, regardless of their size. The same goes
>>>> for vmalloc... But for vmalloc, we will also want to change the underlying
>>>> permissions in the linear map, so we will have to figure out the contiguous
>>>> pieces of the linear map and call __change_memory_common() for each; there is
>>>> definitely some detail to work out there!
>>> Yes, this is my point. When changing underlying linear map permission for
>>> vmalloc, the linear map address may be not contiguous. This is why
>>> change_memory_common() calls __change_memory_common() on page basis.
>>>
>>> But how Dev's patch work should have no impact on how I implement the split
>>> primitive by thinking it further. It should be the caller's responsibility to
>>> make sure __create_pgd_mapping_locked() is called for contiguous linear map
>>> address range.
>>>
>>>>>> You'll still need to repaint the whole linear map with page mappings for the
>>>>>> case !BBML2 case, but I'm hoping __create_pgd_mapping_locked() (potentially
>>>>>> with
>>>>>> minor modifications?) can do that repainting on the live mappings; similar to
>>>>>> how you are doing it in v3.
>>>>> Yes, when repainting I need to split the page table all the way down to PTE
>>>>> level. A simple flag should be good enough to tell
>>>>> __create_pgd_mapping_locked()
>>>>> do the right thing off the top of my head.
>>>> Perhaps it may be sufficient to reuse the NO_BLOCK_MAPPINGS and NO_CONT_MAPPINGS
>>>> flags? For example, if you are find a leaf mapping and NO_BLOCK_MAPPINGS is set,
>>>> then you need to split it?
>>> Yeah, sounds feasible. Anyway I will figure it out.
>>>
>>>>>> Miko's BBML2 series should hopefully get imminently queued for v6.16.
>>>>> Great! Anyway my series is based on his advertising BBML2 patch.
>>>>>
>>>>>> So in summary, what I'm asking for your large block mapping the linear map
>>>>>> series is:
>>>>>> Â Â Â - Paint linear map using blocks/contig if boot CPU supports BBML2
>>>>>> Â Â Â - Repaint linear map using page mappings if secondary CPUs don't
>>>>>> support BBML2
>>>>> OK, I just need to add some simple tweak to split down to PTE level to v3.
>>>>>
>>>>>> Â Â Â - Integrate Dev's __change_memory_common() series
>>>>> OK, I think I have to do my patches on top of it. Because Dev's patch need
>>>>> guarantee the linear mapping address range is physically contiguous.
>>>>>
>>>>>> Â Â Â - Create primitive to ensure mapping entry boundary at a given page-
>>>>>> aligned VA
>>>>>> Â Â Â - Use primitive when changing permissions on linear map region
>>>>> Sure.
>>>>>
>>>>>> This will be mergable on its own, but will also provide a great starting base
>>>>>> for adding huge-vmalloc-by-default.
>>>>>>
>>>>>> What do you think?
>>>>> Definitely makes sense to me.
>>>>>
>>>>> If I remember correctly, we still have some unsolved comments/questions for v3
>>>>> in my replies on March 17, particularly:
>>>>> https://lore.kernel.org/linux-arm-kernel/2b715836-b566-4a9e-
>>>>> b344-9401fa4c0feb@xxxxxxxxxxxxxxxxxxxxxx/
>>>> Ahh sorry about that. I'll take a look now...
>>> No problem.
>>>
>>> Thanks,
>>> Yang
>>>
>>>> Thanks,
>>>> Ryan
>>>>
>>>>> Thanks,
>>>>> Yang
>>>>>
>>>>>> Thanks,
>>>>>> Ryan
>>>>>>
>>>>>>
>>>>>>> Thanks,
>>>>>>> Yang
>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Ryan
>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> Yang
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On 3/13/25 10:40 AM, Yang Shi wrote:
>>>>>>>>>> On 3/13/25 10:36 AM, Ryan Roberts wrote:
>>>>>>>>>>> On 13/03/2025 17:28, Yang Shi wrote:
>>>>>>>>>>>> Hi Ryan,
>>>>>>>>>>>>
>>>>>>>>>>>> I saw Miko posted a new spin of his patches. There are some slight
>>>>>>>>>>>> changes
>>>>>>>>>>>> that
>>>>>>>>>>>> have impact to my patches (basically check the new boot parameter).
>>>>>>>>>>>> Do you
>>>>>>>>>>>> prefer I rebase my patches on top of his new spin right now then restart
>>>>>>>>>>>> review
>>>>>>>>>>>> from the new spin or review the current patches then solve the new
>>>>>>>>>>>> review
>>>>>>>>>>>> comments and rebase to Miko's new spin together?
>>>>>>>>>>> Hi Yang,
>>>>>>>>>>>
>>>>>>>>>>> Sorry I haven't got to reviewing this version yet, it's in my queue!
>>>>>>>>>>>
>>>>>>>>>>> I'm happy to review against v3 as it is. I'm familiar with Miko's series
>>>>>>>>>>> and am
>>>>>>>>>>> not too bothered about the integration with that; I think it's pretty
>>>>>>>>>>> straight
>>>>>>>>>>> forward. I'm more interested in how you are handling the splitting,
>>>>>>>>>>> which I
>>>>>>>>>>> think is the bulk of the effort.
>>>>>>>>>> Yeah, sure, thank you.
>>>>>>>>>>
>>>>>>>>>>> I'm hoping to get to this next week before heading out to LSF/MM the
>>>>>>>>>>> following
>>>>>>>>>>> week (might I see you there?)
>>>>>>>>>> Unfortunately I can't make it this year. Have a fun!
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>> Yang
>>>>>>>>>>
>>>>>>>>>>> Thanks,
>>>>>>>>>>> Ryan
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>> Yang
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On 3/4/25 2:19 PM, Yang Shi wrote:
>>>>>>>>>>>>> Changelog
>>>>>>>>>>>>> =========
>>>>>>>>>>>>> v3:
>>>>>>>>>>>>> Â Â Â Â Â Â * Rebased to v6.14-rc4.
>>>>>>>>>>>>> Â Â Â Â Â Â * Based on Miko's BBML2 cpufeature patch (https://
>>>>>>>>>>>>> lore.kernel.org/
>>>>>>>>>>>>> linux-
>>>>>>>>>>>>> arm-kernel/20250228182403.6269-3-miko.lenczewski@xxxxxxx/).
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â Also included in this series in order to have the complete
>>>>>>>>>>>>> patchset.
>>>>>>>>>>>>> Â Â Â Â Â Â * Enhanced __create_pgd_mapping() to handle split as well per
>>>>>>>>>>>>> Ryan.
>>>>>>>>>>>>> Â Â Â Â Â Â * Supported CONT mappings per Ryan.
>>>>>>>>>>>>> Â Â Â Â Â Â * Supported asymmetric system by splitting kernel linear
>>>>>>>>>>>>> mapping if
>>>>>>>>>>>>> such
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â system is detected per Ryan. I don't have such system to test,
>>>>>>>>>>>>> so the
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â testing is done by hacking kernel to call linear mapping
>>>>>>>>>>>>> repainting
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â unconditionally. The linear mapping doesn't have any block and
>>>>>>>>>>>>> cont
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â mappings after booting.
>>>>>>>>>>>>>
>>>>>>>>>>>>> RFC v2:
>>>>>>>>>>>>> Â Â Â Â Â Â * Used allowlist to advertise BBM lv2 on the CPUs which can
>>>>>>>>>>>>> handle TLB
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â conflict gracefully per Will Deacon
>>>>>>>>>>>>> Â Â Â Â Â Â * Rebased onto v6.13-rc5
>>>>>>>>>>>>> Â Â Â Â Â Â * https://lore.kernel.org/linux-arm-
>>>>>>>>>>>>> kernel/20250103011822.1257189-1-
>>>>>>>>>>>>> yang@xxxxxxxxxxxxxxxxxxxxxx/
>>>>>>>>>>>>>
>>>>>>>>>>>>> RFC v1: https://lore.kernel.org/lkml/20241118181711.962576-1-
>>>>>>>>>>>>> yang@xxxxxxxxxxxxxxxxxxxxxx/
>>>>>>>>>>>>>
>>>>>>>>>>>>> Description
>>>>>>>>>>>>> ===========
>>>>>>>>>>>>> When rodata=full kernel linear mapping is mapped by PTE due to arm's
>>>>>>>>>>>>> break-before-make rule.
>>>>>>>>>>>>>
>>>>>>>>>>>>> A number of performance issues arise when the kernel linear map is
>>>>>>>>>>>>> using
>>>>>>>>>>>>> PTE entries due to arm's break-before-make rule:
>>>>>>>>>>>>> Â Â Â Â Â Â - performance degradation
>>>>>>>>>>>>> Â Â Â Â Â Â - more TLB pressure
>>>>>>>>>>>>> Â Â Â Â Â Â - memory waste for kernel page table
>>>>>>>>>>>>>
>>>>>>>>>>>>> These issues can be avoided by specifying rodata=on the kernel command
>>>>>>>>>>>>> line but this disables the alias checks on page table permissions and
>>>>>>>>>>>>> therefore compromises security somewhat.
>>>>>>>>>>>>>
>>>>>>>>>>>>> With FEAT_BBM level 2 support it is no longer necessary to
>>>>>>>>>>>>> invalidate the
>>>>>>>>>>>>> page table entry when changing page sizes. This allows the kernel to
>>>>>>>>>>>>> split large mappings after boot is complete.
>>>>>>>>>>>>>
>>>>>>>>>>>>> This patch adds support for splitting large mappings when FEAT_BBM
>>>>>>>>>>>>> level 2
>>>>>>>>>>>>> is available and rodata=full is used. This functionality will be used
>>>>>>>>>>>>> when modifying page permissions for individual page frames.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Without FEAT_BBM level 2 we will keep the kernel linear map using PTEs
>>>>>>>>>>>>> only.
>>>>>>>>>>>>>
>>>>>>>>>>>>> If the system is asymmetric, the kernel linear mapping may be repainted
>>>>>>>>>>>>> once
>>>>>>>>>>>>> the BBML2 capability is finalized on all CPUs. See patch #6 for more
>>>>>>>>>>>>> details.
>>>>>>>>>>>>>
>>>>>>>>>>>>> We saw significant performance increases in some benchmarks with
>>>>>>>>>>>>> rodata=full without compromising the security features of the kernel.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Testing
>>>>>>>>>>>>> =======
>>>>>>>>>>>>> The test was done on AmpereOne machine (192 cores, 1P) with 256GB
>>>>>>>>>>>>> memory and
>>>>>>>>>>>>> 4K page size + 48 bit VA.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Function test (4K/16K/64K page size)
>>>>>>>>>>>>>       - Kernel boot. Kernel needs change kernel linear mapping
>>>>>>>>>>>>> permission at
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â boot stage, if the patch didn't work, kernel typically didn't
>>>>>>>>>>>>> boot.
>>>>>>>>>>>>> Â Â Â Â Â Â - Module stress from stress-ng. Kernel module load change
>>>>>>>>>>>>> permission
>>>>>>>>>>>>> for
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â linear mapping.
>>>>>>>>>>>>> Â Â Â Â Â Â - A test kernel module which allocates 80% of total memory via
>>>>>>>>>>>>> vmalloc(),
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â then change the vmalloc area permission to RO, this also
>>>>>>>>>>>>> change
>>>>>>>>>>>>> linear
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â mapping permission to RO, then change it back before
>>>>>>>>>>>>> vfree(). Then
>>>>>>>>>>>>> launch
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â a VM which consumes almost all physical memory.
>>>>>>>>>>>>> Â Â Â Â Â Â - VM with the patchset applied in guest kernel too.
>>>>>>>>>>>>> Â Â Â Â Â Â - Kernel build in VM with guest kernel which has this series
>>>>>>>>>>>>> applied.
>>>>>>>>>>>>> Â Â Â Â Â Â - rodata=on. Make sure other rodata mode is not broken.
>>>>>>>>>>>>> Â Â Â Â Â Â - Boot on the machine which doesn't support BBML2.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Performance
>>>>>>>>>>>>> ===========
>>>>>>>>>>>>> Memory consumption
>>>>>>>>>>>>> Before:
>>>>>>>>>>>>> MemTotal:Â Â Â Â Â Â 258988984 kB
>>>>>>>>>>>>> MemFree:Â Â Â Â Â Â Â 254821700 kB
>>>>>>>>>>>>>
>>>>>>>>>>>>> After:
>>>>>>>>>>>>> MemTotal:Â Â Â Â Â Â 259505132 kB
>>>>>>>>>>>>> MemFree:Â Â Â Â Â Â Â 255410264 kB
>>>>>>>>>>>>>
>>>>>>>>>>>>> Around 500MB more memory are free to use. The larger the machine, the
>>>>>>>>>>>>> more memory saved.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Performance benchmarking
>>>>>>>>>>>>> * Memcached
>>>>>>>>>>>>> We saw performance degradation when running Memcached benchmark with
>>>>>>>>>>>>> rodata=full vs rodata=on. Our profiling pointed to kernel TLB
>>>>>>>>>>>>> pressure.
>>>>>>>>>>>>> With this patchset we saw ops/sec is increased by around 3.5%, P99
>>>>>>>>>>>>> latency is reduced by around 9.6%.
>>>>>>>>>>>>> The gain mainly came from reduced kernel TLB misses. The kernel TLB
>>>>>>>>>>>>> MPKI is reduced by 28.5%.
>>>>>>>>>>>>>
>>>>>>>>>>>>> The benchmark data is now on par with rodata=on too.
>>>>>>>>>>>>>
>>>>>>>>>>>>> * Disk encryption (dm-crypt) benchmark
>>>>>>>>>>>>> Ran fio benchmark with the below command on a 128G ramdisk (ext4) with
>>>>>>>>>>>>> disk
>>>>>>>>>>>>> encryption (by dm-crypt).
>>>>>>>>>>>>> fio --directory=/data --random_generator=lfsr --norandommap --
>>>>>>>>>>>>> randrepeat 1 \
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â --status-interval=999 --rw=write --bs=4k --loops=1 --
>>>>>>>>>>>>> ioengine=sync \
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â --iodepth=1 --numjobs=1 --fsync_on_close=1 --
>>>>>>>>>>>>> group_reporting --
>>>>>>>>>>>>> thread \
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â --name=iops-test-job --eta-newline=1 --size 100G
>>>>>>>>>>>>>
>>>>>>>>>>>>> The IOPS is increased by 90% - 150% (the variance is high, but the
>>>>>>>>>>>>> worst
>>>>>>>>>>>>> number of good case is around 90% more than the best number of bad
>>>>>>>>>>>>> case).
>>>>>>>>>>>>> The bandwidth is increased and the avg clat is reduced proportionally.
>>>>>>>>>>>>>
>>>>>>>>>>>>> * Sequential file read
>>>>>>>>>>>>> Read 100G file sequentially on XFS (xfs_io read with page cache
>>>>>>>>>>>>> populated).
>>>>>>>>>>>>> The bandwidth is increased by 150%.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> MikoÅ?aj Lenczewski (1):
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â Â Â arm64: Add BBM Level 2 cpu feature
>>>>>>>>>>>>>
>>>>>>>>>>>>> Yang Shi (5):
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â Â Â arm64: cpufeature: add AmpereOne to BBML2 allow list
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â Â Â arm64: mm: make __create_pgd_mapping() and helpers non-void
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â Â Â arm64: mm: support large block mapping when rodata=full
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â Â Â arm64: mm: support split CONT mappings
>>>>>>>>>>>>> Â Â Â Â Â Â Â Â Â Â arm64: mm: split linear mapping if BBML2 is not supported on
>>>>>>>>>>>>> secondary
>>>>>>>>>>>>> CPUs
>>>>>>>>>>>>>
>>>>>>>>>>>>>      arch/arm64/Kconfig                 | 11 +++++
>>>>>>>>>>>>>      arch/arm64/include/asm/cpucaps.h   | 2 +
>>>>>>>>>>>>> Â Â Â Â Â arch/arm64/include/asm/cpufeature.h | 15 ++++++
>>>>>>>>>>>>>      arch/arm64/include/asm/mmu.h       | 4 ++
>>>>>>>>>>>>>      arch/arm64/include/asm/pgtable.h   | 12 ++++-
>>>>>>>>>>>>>      arch/arm64/kernel/cpufeature.c     | 95 ++++++++++++++++++++++++
>>>>>>>>>>>>> ++++++
>>>>>>>>>>>>> +++++++
>>>>>>>>>>>>>      arch/arm64/mm/mmu.c                | 397 ++++++++++++++++++++
>>>>>>>>>>>>> ++++
>>>>>>>>>>>>> ++++++
>>>>>>>>>>>>> ++++
>>>>>>>>>>>>> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>>>>>>>>>>>> +++++
>>>>>>>>>>>>> +++++
>>>>>>>>>>>>> ++++++++++++++++++++++-------------------
>>>>>>>>>>>>>      arch/arm64/mm/pageattr.c           | 37 ++++++++++++---
>>>>>>>>>>>>>      arch/arm64/tools/cpucaps           | 1 +
>>>>>>>>>>>>> Â Â Â Â Â 9 files changed, 518 insertions(+), 56 deletions(-)
>>>>>>>>>>>>>
>>>>>>>>>>>>>
Return-Path: <linux-kernel+bounces-665706-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id F0FC141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:20:50 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id D98FE1C005F6
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:21:03 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 2520228BAAB;
Wed, 28 May 2025 15:20:43 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="HVZ1X7ne"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 61A601C683;
Wed, 28 May 2025 15:20:42 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445642; cv=none; b=UvhKj5s1YXTKohf+HeAVlLLjcRiLvtvvWpll4cOq/oyTLoVaS7qj6MFwtOVcE4t2oz6bIgs0DCN1bxlyC7Cnj2yYwy1sdn8ZB/4qSt+XJgAQ6gT9sXFZHnTo0/O72kr8AoENrAbJke4l6B7jUWMI7wocnJ1xdnMt214yEZSu9mY=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445642; c=relaxed/simple;
bh=IKr9+MA+9okWN9C27pDp8r5LvWkD4PL2yqXr+lVANRA=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=s5UjZa2QoUrqMJ6MT0TOAcLluJhOxXz/AvtqDHl2ofcJNLNDdjkRhyK7x374b1kyp7dcodzdUO9BMwkuqY4hehqq2KtvDleoVlNX2n0+WOChykhvSY5RHbHLqfQZhZOPzQjAsG2fTgy4nhCkQ6gBj1DFPb6B4P561sFS3OXjdpM=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HVZ1X7ne; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 37A02C4CEEE;
Wed, 28 May 2025 15:20:42 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748445642;
bh=IKr9+MA+9okWN9C27pDp8r5LvWkD4PL2yqXr+lVANRA=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=HVZ1X7nezOONOzxwXJ4Jdfc2Yk0JQun9rCt2edmcL3rVjPxz0hnrI9pG+xnIcvYO8
ss8dHII66vsCm/5VO8XIs726R2SJaoL5Ooz8dju4OPMiJLSMAK8628jH5x60B1EMyb
30uVeteOTPKJYkS8s35y2yXFr9fi/oHe8MvFm0R/LyZffSZzrXcDruJagkh1ipnkaZ
C8KGf1wcG/dgeUPUDV4dunSNmj8Ks+Bdpp2YbPDnWX5BNeqdcOvcrBo6TltutzdSOS
azYusE9XfQo6S4DMfRXPwbGD6jvjgq2vODUC06z6noP3Recru20KnxlLYnYgCfljIk
Ux1UzdRi8o8Mg==
Received: from johan by xi.lan with local (Exim 4.97.1)
(envelope-from <johan@xxxxxxxxxx>)
id 1uKIaD-000000002xI-1Lic;
Wed, 28 May 2025 17:20:46 +0200
Date: Wed, 28 May 2025 17:20:45 +0200
From: Johan Hovold <johan@xxxxxxxxxx>
To: Remi Pommarel <repk@xxxxxxxxxxxx>
Cc: Johan Hovold <johan+linaro@xxxxxxxxxx>,
Jeff Johnson <jjohnson@xxxxxxxxxx>,
Miaoqing Pan <quic_miaoqing@xxxxxxxxxxx>,
Steev Klimaszewski <steev@xxxxxxxx>,
Clayton Craft <clayton@xxxxxxxxxxxxx>,
Jens Glathe <jens.glathe@xxxxxxxxxxxxxxxxxxxxxx>,
Nicolas Escande <nico.escande@xxxxxxxxx>,
ath12k@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
stable@xxxxxxxxxxxxxxx
Subject: Re: [PATCH] wifi: ath12k: fix ring-buffer corruption
Message-ID: <aDcpzTI-Bjry144Z@xxxxxxxxxxxxxxxxxxxx>
References: <20250321095219.19369-1-johan+linaro@xxxxxxxxxx>
<aC8-mUinxA6y688X@pilgrim>
<aDRR5oYBU0Z-DaWr@xxxxxxxxxxxxxxxxxxxx>
<aDRli6uIbnuQK3nN@pilgrim>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <aDRli6uIbnuQK3nN@pilgrim>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Mon, May 26, 2025 at 02:58:51PM +0200, Remi Pommarel wrote:
> On Mon, May 26, 2025 at 01:35:02PM +0200, Johan Hovold wrote:
> > On Thu, May 22, 2025 at 05:11:21PM +0200, Remi Pommarel wrote:
> > > Why not move the dma_rmb() in ath12k_hal_srng_access_begin() as below,
> > > that would look to me as a good place to do it.
> > We only need the read barrier for dest rings so the barrier would go in
> > the else branch, but I prefer keeping it in the caller so that it is
> > more obvious when it is needed and so that we can skip the barrier when
> > the ring is empty (e.g. as done above).
>
> Thanks for taking time to clarify this.
>
> Yes I messed up doing the patch by hand sorry, internally I test with
> the dma_rmb() in the else part. I tend to prefer having it in
> ath12k_hal_srng_access_begin() as caller does not have to take care of
> the barrier itself. Which for me seems a little bit risky if further
> refactoring (or adding other ring processing) is done in the future;
> the barrier could easily be forgotten don't you think ?
Yeah, that would be the argument for putting in the helper. Big hammer
vs adding it where needed after reviewing the code.
There actually is a new ring being added for 6.16-rc1 I noticed after I
posted the latest series. That would require a follow-up fix with the
barrier-in-caller approach.
> > > dma_rmb() acting also as a compiler barrier why the need for both
> > > READ_ONCE() ?
> >
> > Yeah, I was being overly cautious here and it should be fine with plain
> > accesses when reading the descriptor after the barrier, but the memory
> > model seems to require READ_ONCE() when fetching the head pointer.
> > Currently, hp_addr is marked as volatile so READ_ONCE() could be
> > dropped for that reason, but I'd rather keep it here explicitly (e.g. in
> > case someone decides to drop the volatile).
>
> Yes actually after more thinking, the READ_ONCE for fetching hp does make
> sense and is also in the patch I am currently testing.
>
> Also for source rings don't we need a dma_wmb()/WRITE_ONCE before
> modifying the tail pointer (see ath12k_hal_srng_access_end()) for quite
> the same reason (updates of the descriptor have to be visible before
> write to tail pointer) ?
Yep, the source rings need explicit barriers for the LMAC case, but
there are further issues here too.
And that may also suggest adding the barriers in the start/end helpers
for consistency (i.e. use the big hammer).
I'll try to find some more time to fix the remaining bits next week.
Johan
Return-Path: <linux-kernel+bounces-665707-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id AE48641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:22:09 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 802E01BA77C0
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:22:22 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 82B2A28BA8E;
Wed, 28 May 2025 15:22:01 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Q7y8oo1+"
Received: from mail-yb1-f176.google.com (mail-yb1-f176.google.com [209.85.219.176])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id C805D28B4E1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:21:58 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.176
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445720; cv=none; b=Mcn3VzqWaa6Oc+9PSXgnceiVOW7jc/nZRoqtZSY5q0thiVfDT3Q6IJC/mqol4dgP3+Ygry/MVSzdm7b8dibfvnH2MXocIsk4Xjl1+nqVIZZFHiAmZbvYk6vPSji3LSmiMA5i0jRGP2fuoY+6XOfLmxALWzTL3DRZXr5lyzyMp2U=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445720; c=relaxed/simple;
bh=0L9FqIrWV1HH0CKjcDoLD6PMX4MXaZyCx+Isv4wqI6I=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=TiXU4tE1qS1/jT8fTISZr6QzPU3E13HorOQmXP7lqR88mB/LqrS8njU9lrnQTonuIvpQkE6VRd0Z3hoCEMKgmAsn2+8dhTiGMoofykiX5Mv2AvXlM7pERBGPmAStQtZyny0PmMlRdMZrGGBGmr0qAnsKTjNRJvzfCf9P0EFlRpE=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Q7y8oo1+; arc=none smtp.client-ip=209.85.219.176
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com
Received: by mail-yb1-f176.google.com with SMTP id 3f1490d57ef6-e7b3410e122so3676637276.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:21:58 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=google.com; s=20230601; t=1748445718; x=1749050518; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=32qgoYfovQ3gS/SAum8cU1W1nbKSlw2h8oFp1ZvYf5Q=;
b=Q7y8oo1+2gzsQIi+PeqDcDAEwLJqN+KmeSdhlEh3Oi3GxiDgf1I5sJWOXGjVsF0iI3
WvpuGJEz4EZwmJw7SAASjvpWF6xX9GVTVmSwI9JV+vJP0K9hxQ0RQZI941LbvGj9MVj9
bJRxr3We937W2p75QhjIWt9fa1Hp9fqxL3XM5E5y7qLDKTa0jzbIq4itUfFTgLtNIedm
j5L9ZtOAvfdeecYg2YWAvMxTNR4pDzqKtSNpAPWMiZ1IPBBkAtmw8bbXpWrGLvtrBCwA
pjsZGKulykcsqmcS+pAF85LYpXUB86JQQ1JasA17T1omW96W4pdyjy/raBYdRZBZFRwv
l/ug==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748445718; x=1749050518;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=32qgoYfovQ3gS/SAum8cU1W1nbKSlw2h8oFp1ZvYf5Q=;
b=ngJqK+WrcdrkV3ksK7H56jGGmWGAeIehyuV+Cy+SzKhxpvO3Hu5jWlT3j+euelIULt
h1BUJ+Klmd0Z61vrSJvLoZvEHoG2t6+nOXbJ4idXlej033KSQjVmk/uDuMYiF3cCcDC8
p1CwbQtg2kO85seKZdbzrGXZbEYyZnVOGGTQHQ/n0guAW3cehDm+u/+mpGJp0TtvLHQr
gXBW5Xu4Sb6uyQh0S3nP/c+I8S0++KKdJaPlIRdrgOuSzExaCFslUhxpCk/IHJQZ5ags
IlS1zZflp0i/Te4tPcDzLiGqe/eGq+F4BBHUqi+j8tyVBOnoyzNlGdghf74NEgcqFTs/
+a4w==
X-Forwarded-Encrypted: i=1; AJvYcCVogqyOdxYcJgZV3khcK1pWQ3M8NJ+L3kRD8oJ4+cY0LbAxi6pMtnyPHeD0O7f4EJaNWJpwFlXOnwtIhx0=@vger.kernel.org
X-Gm-Message-State: AOJu0Ywmb1Y1g+l+WIqbVyND/Q0o61lBf/qaQmlyYvOSMpWL8bBNiHu0
lO1BxL+qldcS+pGyd9PKxbPouFZUj4Q5nr0kyfjIx6Lo//EdMRYnLvNBj4Dd07ZXHKJIu/v/nXx
cjw3HTFBTCUq1bVGeDjGYTvlPr6yUQE/pzxLVNwOE
X-Gm-Gg: ASbGncv0/tuCt5JptoO/gvMywKQEO/VCtUl26gfV3BR9AcRr2QS/dzonSQMtCrVmxXv
nwyhCWYb2BxVqKBRE87B1F8rAR/MhrmUrHx5+abl2GpTXL0OXpE+6rqQEO4KRFQr3nvxq7m3cDv
57B/sOnVLUa0FAvbeVk4y9RgDmB3ab2gvwtp2NXHvciPRdhb0gK0IojL1rDPujxdh2YiYap6l7F
d4MFw==
X-Google-Smtp-Source: AGHT+IFSzzwtG0QBLjREdP8rJp3MI7Sye8YaM/FgQl/WLbT3PKgJS/6Q9/qQMcY7F2ocTfZADqMYbCZWjE0ffy1ogQw=
X-Received: by 2002:a05:6902:2b0c:b0:e78:f7a0:fd02 with SMTP id
3f1490d57ef6-e7f61839725mr2840203276.37.1748445717406; Wed, 28 May 2025
08:21:57 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250109204929.1106563-1-jthoughton@xxxxxxxxxx>
<20250109204929.1106563-2-jthoughton@xxxxxxxxxx> <aBqi7fDtnvxzxV1V@xxxxxxxxxx>
In-Reply-To: <aBqi7fDtnvxzxV1V@xxxxxxxxxx>
From: James Houghton <jthoughton@xxxxxxxxxx>
Date: Wed, 28 May 2025 11:21:21 -0400
X-Gm-Features: AX0GCFti85Bmslv3UKy35YTx4AbsV0M4oMVo9TuLb01TfEKfWoCE-rNdRG1Yeks
Message-ID: <CADrL8HUMm0PUqx-xNdPvSMP6z4gzs2OTUJG1sdyy88D-XWxT3g@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v2 01/13] KVM: Add KVM_MEM_USERFAULT memslot flag and bitmap
To: Sean Christopherson <seanjc@xxxxxxxxxx>
Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx>, Jonathan Corbet <corbet@xxxxxxx>, Marc Zyngier <maz@xxxxxxxxxx>,
Oliver Upton <oliver.upton@xxxxxxxxx>, Yan Zhao <yan.y.zhao@xxxxxxxxx>,
Nikita Kalyazin <kalyazin@xxxxxxxxxx>, Anish Moorthy <amoorthy@xxxxxxxxxx>,
Peter Gonda <pgonda@xxxxxxxxxx>, Peter Xu <peterx@xxxxxxxxxx>,
David Matlack <dmatlack@xxxxxxxxxx>, wei.w.wang@xxxxxxxxx, kvm@xxxxxxxxxxxxxxx,
linux-doc@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, kvmarm@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-11.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 6, 2025 at 8:01=E2=80=AFPM Sean Christopherson <seanjc@google.c=
om> wrote:
>
> On Thu, Jan 09, 2025, James Houghton wrote:
> > Use one of the 14 reserved u64s in struct kvm_userspace_memory_region2
> > for the user to provide `userfault_bitmap`.
> >
> > The memslot flag indicates if KVM should be reading from the
> > `userfault_bitmap` field from the memslot. The user is permitted to
> > provide a bogus pointer. If the pointer cannot be read from, we will
> > return -EFAULT (with no other information) back to the user.
>
> For the uAPI+infrastructure changelog, please elaborate on the design goa=
ls and
> choices. The "what" is pretty obvious from the patch; describe why this =
is being
> added.
>
> > Signed-off-by: James Houghton <jthoughton@xxxxxxxxxx>
> > ---
> > include/linux/kvm_host.h | 14 ++++++++++++++
> > include/uapi/linux/kvm.h | 4 +++-
> > virt/kvm/Kconfig | 3 +++
> > virt/kvm/kvm_main.c | 35 +++++++++++++++++++++++++++++++++++
> > 4 files changed, 55 insertions(+), 1 deletion(-)
> >
> > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
> > index 401439bb21e3..f7a3dfd5e224 100644
> > --- a/include/linux/kvm_host.h
> > +++ b/include/linux/kvm_host.h
> > @@ -590,6 +590,7 @@ struct kvm_memory_slot {
> > unsigned long *dirty_bitmap;
> > struct kvm_arch_memory_slot arch;
> > unsigned long userspace_addr;
> > + unsigned long __user *userfault_bitmap;
> > u32 flags;
> > short id;
> > u16 as_id;
> > @@ -724,6 +725,11 @@ static inline bool kvm_arch_has_readonly_mem(struc=
t kvm *kvm)
> > }
> > #endif
> >
> > +static inline bool kvm_has_userfault(struct kvm *kvm)
> > +{
> > + return IS_ENABLED(CONFIG_HAVE_KVM_USERFAULT);
> > +}
>
> Eh, don't think we need this wrapper. Just check the CONFIG_xxx manually=
in the
> one or two places where code isn't guarded by an #ifdef.
>
> > struct kvm_memslots {
> > u64 generation;
> > atomic_long_t last_used_slot;
> > @@ -2553,4 +2559,12 @@ long kvm_arch_vcpu_pre_fault_memory(struct kvm_v=
cpu *vcpu,
> > struct kvm_pre_fault_memory *range);
> > #endif
> >
> > +int kvm_gfn_userfault(struct kvm *kvm, struct kvm_memory_slot *memslot=
,
> > + gfn_t gfn);
> > +
> > +static inline bool kvm_memslot_userfault(struct kvm_memory_slot *memsl=
ot)
>
> I strongly prefer kvm_is_userfault_memslot(). KVM's weird kvm_memslot_<f=
lag>()
> nomenclature comes from ancient code, i.e. isn't something I would follow=
.
>
> > +{
> > + return memslot->flags & KVM_MEM_USERFAULT;
>
> I think it's worth checking for a non-NULL memslot, even if all current c=
allers
> pre-check for a slot.
>
> > @@ -2042,6 +2051,9 @@ int __kvm_set_memory_region(struct kvm *kvm,
> > if (r)
> > goto out;
> > }
> > + if (mem->flags & KVM_MEM_USERFAULT)
> > + new->userfault_bitmap =3D
> > + (unsigned long __user *)(unsigned long)mem->userfault_b=
itmap;
>
> if (mem->flags & KVM_MEM_USERFAULT)
> new->userfault_bitmap =3D u64_to_user_ptr(mem->userfault_=
bitmap);
Applied this change to the other cast (where we do access_ok()) as well, th=
anks!
>
> > r =3D kvm_set_memslot(kvm, old, new, change);
> > if (r)
> > @@ -6426,3 +6438,26 @@ void kvm_exit(void)
> > kvm_irqfd_exit();
> > }
> > EXPORT_SYMBOL_GPL(kvm_exit);
> > +
> > +int kvm_gfn_userfault(struct kvm *kvm, struct kvm_memory_slot *memslot=
,
> > + gfn_t gfn)
>
> I think this series is the perfect opportunity (read: victim) to introduc=
e a
> common "struct kvm_page_fault". With a common structure to provide the g=
fn, slot,
> write, exec, and is_private fields, this helper can handle the checks and=
the call
> to kvm_prepare_memory_fault_exit().
>
> And with that in place, I would vote to name this something like kvm_do_u=
serfault(),
> return a boolean, and let the caller return -EFAULT.
Returning 'true' from kvm_do_userfault() without a
kvm_prepare_memory_fault_exit() looked a bit strange at first, but I
don't have strong feelings. I'll add a small comment there.
>
> For making "struct kvm_page_fault" common, one thought would be to have a=
rch code
> define the entire struct, and simply assert on the few fields that common=
KVM needs
> being defined by arch code. And wrap all references in CONFIG_KVM_GENERI=
C_PAGE_FAULT.
>
> I don't expect there will be a huge number of fields that common KVM need=
s, i.e. I
> don't think the maintenance burden of punting to arch code will be high. =
And letting
> arch code own the entire struct means we don't need to have e.g. fault->a=
rch.present
> vs. fault->write in KVM x86, which to me is a big net negative for readab=
ility.
>
> I'll respond to the cover letter with an attachment of seven patches to s=
ketch out
> the idea.
Looks great! Thanks very much!
>
> > +{
> > + unsigned long bitmap_chunk =3D 0;
> > + off_t offset;
> > +
> > + if (!kvm_memslot_userfault(memslot))
> > + return 0;
> > +
> > + if (WARN_ON_ONCE(!memslot->userfault_bitmap))
> > + return 0;
>
> '0' is technically a valid userspace address. I'd just drop this. If we=
have a
> KVM bug that results in failure to generate usefaults, we'll notice quite=
quickly.
>
> > +
> > + offset =3D gfn - memslot->base_gfn;
> > +
> > + if (copy_from_user(&bitmap_chunk,
> > + memslot->userfault_bitmap + offset / BITS_PER_=
LONG,
> > + sizeof(bitmap_chunk)))
>
> Since the address is checked during memslot creation, I'm pretty sure thi=
s can
> use __get_user(). At the very least, it should be get_user().
Thanks! I agree, __get_user() should be fine.
>
> > + return -EFAULT;
> > +
> > + /* Set in the bitmap means that the gfn is userfault */
> > + return !!(bitmap_chunk & (1ul << (offset % BITS_PER_LONG)));
>
> test_bit()?
Thanks for all the feedback and applying it for me in those patches
you sent back. :)
Return-Path: <linux-kernel+bounces-665708-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 656C041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:23:36 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 66F6A3B094F
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:23:15 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 2A48228C030;
Wed, 28 May 2025 15:23:28 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="XcYhzudc"
Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.11])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1ADDB35947;
Wed, 28 May 2025 15:23:24 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=192.198.163.11
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445807; cv=fail; b=AAjWZuAS37UbrbgSvoItclshBirDlBjNIgMnwZGC5jvbVutAeafKw1x4ozwCRQ8yf2+48YtYR6BTGzzyASh9VxM3rW0zm6cRTlrLZ5BwrgK/Kr+idwku/gZtDiU3QWG3dfvf7128ZNhVRjMpccry7kijAOkukdmHG1VTM3lViYE=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445807; c=relaxed/simple;
bh=2tuzlxWDkpT5Hn275OOOUT1zMVbkMBB9qzMPMpZo/XI=;
h=Date:From:To:CC:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=JpJbrOsIC+no6rLaZ6Id9OI+rWD0xV/qZcLS5r1cIHN+3BC2+dR9YO9n/7e9aGa5t6huNHbz+6BiUlkUJbyfGkuLG4jZII0OqiXopeedimB0OHT1bnm12d5nv1kjVxyJ0e5/0YnRMAtWk1ADb7oy0v9DF6RANlTxAwBoTfw80kA=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=XcYhzudc; arc=fail smtp.client-ip=192.198.163.11
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748445805; x=1779981805;
h=date:from:to:cc:subject:message-id:references:
in-reply-to:mime-version;
bh=2tuzlxWDkpT5Hn275OOOUT1zMVbkMBB9qzMPMpZo/XI=;
b=XcYhzudcADingZoYz8KCGhF6t8L83FncNBQAA9QaJnTqE7G/uYYhbwzb
IHjif9Y610rMi4H8Ws5xivs1yDpW00OV1t0gd0gwvf9NonvDZXTzWS+0u
yfc2HykdL1gQBKfTsDrhzhE2mkz+yRIVO/CNDQ4zZ4DzEx+yrwcDTdLY/
awTS34MBqJZZxm+3g4PhuiqmnlIRaool57kpKj9VN6ETK+ndJr9L2zH23
Ojyrxs1UqnEuJNV/A6h+jdz+iri7UcsAtn8NYxJNa4osC/9UQeTCP1WRE
vzeStyIP8FRTRrfvLOJVhrc0QCeMLL+S6gXV0ROqe0W715jqwGZJis28O
g==;
X-CSE-ConnectionGUID: 9emOmpViRkiiQL8awrdHwQ==
X-CSE-MsgGUID: 9gqyUo7GSaG08FGJauLVyQ==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="61109577"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="61109577"
Received: from orviesa010.jf.intel.com ([10.64.159.150])
by fmvoesa105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 08:23:14 -0700
X-CSE-ConnectionGUID: BPzc3aVrT++j76el2kSL2A==
X-CSE-MsgGUID: jtA08U6yRwivnX2/xA4vZg==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="143251952"
Received: from orsmsx903.amr.corp.intel.com ([10.22.229.25])
by orviesa010.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 08:23:14 -0700
Received: from ORSMSX901.amr.corp.intel.com (10.22.229.23) by
ORSMSX903.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
15.2.1544.25; Wed, 28 May 2025 08:23:13 -0700
Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by
ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
15.2.1544.25 via Frontend Transport; Wed, 28 May 2025 08:23:13 -0700
Received: from NAM12-DM6-obe.outbound.protection.outlook.com (40.107.243.71)
by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
15.1.2507.55; Wed, 28 May 2025 08:23:12 -0700
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=tWGgv+YMxsToFSgCT+RTani0EO3LR0zIvTogvjK6YLT3/VZ/U4hj5gUBHubYvUyfckigNNdI1QqQUL4o4ERfAc/LnyJoXvwQHk3KY7zrCm9THF0ToHvXJZ1+sThvX8xr3DjZAFrtKe9oTHiZ+3tk2+aRL2visDwkcFMUuvhGJGvdfMkYD0g8o+8bqdZekdWHEtRPkeep+jJC4p/sm+64a3ALYlK8fW9LeefkHzxvtiOrY3YLSVmiJ5SdYS0BhlJGcoK8Hnh9yDEQnbdGsGI0rg88yQrUwuC6fV1CiJ5BphJHv567D4+hvLwEwu/KYuF4L6ChYFE1GwXgUn93P1a+Vg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=zGSUis9mK5T671C7ZEdAtFaAm1fh3G1pDD1R4U7kb5c=;
b=F1LkDx+ieF6DLY4Jw164LY2Q3z5XZpBWsLkEgdRq+ZQ5qIl2uTvP2kIPAK/KWsK8VLEaEAgzwJVPMPvV8WiFRoB/zi2DWXvFRSjaGURyAAZ5KLZa1CnQsb/W6FSERNMyeOellMFkuHi6lxqDzeLrxOtvay0qFxDwG5XUlI/1pnecIkA3fB8HbgEl3hLZ4AVqmbwSwyUf8LYoTQ39gtWY7WYN2FLv1np+dHQNfd1qwtczrzL5AMYg4NTdwRbvEeMllW4qN3EbgwBn8OTqFK9iBKivZsBRcPP0A9yltuXZg7t4AH5rwSxU6qPy+tLd70kMc+7eesw4F/tgGoR65t35lg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com;
dkim=pass header.d=intel.com; arc=none
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=intel.com;
Received: from SA1PR11MB8794.namprd11.prod.outlook.com (2603:10b6:806:46a::5)
by MW5PR11MB5809.namprd11.prod.outlook.com (2603:10b6:303:197::6) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8722.32; Wed, 28 May
2025 15:22:39 +0000
Received: from SA1PR11MB8794.namprd11.prod.outlook.com
([fe80::a3d4:9d67:2f5d:6720]) by SA1PR11MB8794.namprd11.prod.outlook.com
([fe80::a3d4:9d67:2f5d:6720%5]) with mapi id 15.20.8769.025; Wed, 28 May 2025
15:22:39 +0000
Date: Wed, 28 May 2025 08:22:35 -0700
From: Alison Schofield <alison.schofield@xxxxxxxxx>
To: Shiju Jose <shiju.jose@xxxxxxxxxx>, Dan Carpenter
<dan.carpenter@xxxxxxxxxx>
CC: Davidlohr Bueso <dave@xxxxxxxxxxxx>, Jonathan Cameron
<jonathan.cameron@xxxxxxxxxx>, Dave Jiang <dave.jiang@xxxxxxxxx>, "Vishal
Verma" <vishal.l.verma@xxxxxxxxx>, Ira Weiny <ira.weiny@xxxxxxxxx>, "Dan
Williams" <dan.j.williams@xxxxxxxxx>, Li Ming <ming.li@xxxxxxxxxxxx>, Fan Ni
<fan.ni@xxxxxxxxxxx>, <linux-cxl@xxxxxxxxxxxxxxx>,
<linux-kernel@xxxxxxxxxxxxxxx>, <kernel-janitors@xxxxxxxxxxxxxxx>
Subject: Re: [PATCH next] cxl: fix return value in
cxlctl_validate_set_features()
Message-ID: <aDcqO5hlGrRXzIPT@xxxxxxxxxxxxxxxxxx>
References: <aDbFPSCujpJLY1if@stanley.mountain>
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <aDbFPSCujpJLY1if@stanley.mountain>
X-ClientProxiedBy: SJ0PR05CA0102.namprd05.prod.outlook.com
(2603:10b6:a03:334::17) To SA1PR11MB8794.namprd11.prod.outlook.com
(2603:10b6:806:46a::5)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: SA1PR11MB8794:EE_|MW5PR11MB5809:EE_
X-MS-Office365-Filtering-Correlation-Id: e3064544-a4d6-48f7-f0b5-08dd9dfb7b9e
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016;
X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?T7u/vHUZBb2YjRTxhS6X+98MmtwBvCxcJWL+JJPPNG2+SXrZr26OyhgvcHO0?=
=?us-ascii?Q?U75+2SPw+tlORNnf9jQ3j4dhI7ZPwRdw2qBexFxjVkf3Z8FLhbXhsDPCfyf3?=
=?us-ascii?Q?KkZdX13lP2x+fH+FsJl4bYDkxD+wJFpKqXVEphKoWniValQAIqqE2NVrZNGx?=
=?us-ascii?Q?OJNxkLeIdDce4LEdAq5xBbzBnUSToYLT/tRzf0610fzgG1F7pahfXZZIonhs?=
=?us-ascii?Q?Va4q1w+po89zyC2Lnt0cb7alVneNHsHvXenahzaSRCYfis5M811HMNfpdI29?=
=?us-ascii?Q?wLc6La6K04GBO28cl6fq99kjboicnboyGzcSVJALzHMmDIdoqBIGozcI5Wx0?=
=?us-ascii?Q?GqTqYtSAT5wh67eOEcKorduxsTjGkWwfYWm1gSWaZ7MtWVGWsgeG482NsTev?=
=?us-ascii?Q?5VcUU94XxRy9WV2DUmm4swR8LbXMns8m8Dk9gf+ghPf2msaItdrxmNBDof0b?=
=?us-ascii?Q?+a/+elspKzWcbrykkw1lLapUpmOSy4ou1iuB/1o964lskSKt5UlqcDxNVFLb?=
=?us-ascii?Q?KQmojF6meKa9fN5qsTxy3FR7BAmB8keq+tVsL3xL8IeL9EFe3Xx5JFmoie0X?=
=?us-ascii?Q?vT052O8N2oouEfddVf41fbHyb1xGR5OHR+balxTkEiMvp1FpnFVelywUIwVl?=
=?us-ascii?Q?Q/gI2oi9hcM8lcQbphJ6l/bcErPqWsrxLN0TdUKe1E/WA6O+kC+0Qw0QOCn9?=
=?us-ascii?Q?zAqRowrkL3yEMWL8i6DEZzYI19c61RuhWsvgDxZ93p30vnHVfQPXRQbPgOK0?=
=?us-ascii?Q?JrwPIFucYFYRp1JDaKHKfDUANymq1v7BNfsgaJLP8mDJAT9RBi9ip3SY2YAh?=
=?us-ascii?Q?0zhunx8uGnWDj1Xw84p/nM5kq5NzxCR+O/1FH5APvsEupkNTPZdmh5BtkEnd?=
=?us-ascii?Q?+qD62j7XeLjhIZXvUwI4zuaI9dQyeHfr5fKMyw4InoVWMktp88h7DakkdYmX?=
=?us-ascii?Q?mtV3N0w17PRHvi3UUixE7lbF95OjzRJVMVC5m1LnUoJllX1DD0W+z/wqtqdU?=
=?us-ascii?Q?LlQK1C9I5WMiEoLPF8yQ3o6uQSpklettPxbauZKWD1xz+kuofjpv+b3ObMlP?=
=?us-ascii?Q?viMCEjhEFiyq27WTPsxzf/KpBZNOxo2rMC1ksjvqn/D2zMlvmeKlHbYSoKVi?=
=?us-ascii?Q?ZWMLnu8f75rPFraVjflXbTHJFbItH895q6Zz8dXYi8muiGusvJq8mmLZr/Is?=
=?us-ascii?Q?xYChRRFaWxO508zS74ZLVtZhQJ009TeauZiXgJ1vTLm3upYx0lwo5QJcDeHn?=
=?us-ascii?Q?3/E7J8Hy/CGvZ0ycLRJpoyhJ1vlzlhPrp7qBMLAlpDBki23vpqn8p33pgzka?=
=?us-ascii?Q?9PULOqtVWt3c7esZEe/qt4BOT5ISrpnvLvFqPUvPOOAmEekHGC+fGXFdFSdH?=
=?us-ascii?Q?GB+2/xghHq22Vp5/gzwKKQ8OwGQOxY3OhEFOOuyAGUHQPOFnScOHY7jiwH0S?=
=?us-ascii?Q?/5U9Z35JTiY=3D?=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA1PR11MB8794.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?3kKMYDAk9dpilV4+HJU3iI8rnwyAlPAGYYrtJGysglCh4HkU+/NjryiL9P6z?=
=?us-ascii?Q?zY6yzSbY+ZR/SaIs7xPpYcUlY8gdA93L5Xwf1Qo0gxaMGfAUsRpkwNXpN9xo?=
=?us-ascii?Q?fhqawzXB45FqeYp9JWo32ycNHi1qhLD3ayza3nG5VV/7zOkZ40McRxt0C7hr?=
=?us-ascii?Q?0pltYy0avJ1v9DHr++DstVA+8/2aXWESHYDwJRGKdt++0R0+SqUw+WGNFxiS?=
=?us-ascii?Q?LLLxZ/E8oJZtMfCt3nW005SWEDTVVfwmaz94Xzorm634kk6lpZT+zdKGtDDr?=
=?us-ascii?Q?uUC121Ru7QU+NX7T3MNt7KeYTRjPFzgpdn4jIFgyeNALIDS3mcNg9U0/625S?=
=?us-ascii?Q?UHMB3WfmuJfgjxqGK40fIb9WOdzhZzLyTiRl4KRHYzFyPX8g4Fqp/nNHjND2?=
=?us-ascii?Q?tSp4tiu7mpuJqbiKSddKdHypNZ4mYxlaZ2eliRM2TdAJ0Kk6muqBlq76eW3Y?=
=?us-ascii?Q?Yrv5+eYcsBCAMtzeOzaSsDZfUcZNtH3c1djsUNY3z5vpiouhKWXZs1z7JozH?=
=?us-ascii?Q?kn19j4SFoP3RAys5AQmeIy0H9cCdhiTmwm/xF3hvUtZPgnV+jvVR4xytqmIN?=
=?us-ascii?Q?0lT4/LUE0O/MV8J4bPL741KffrneKGyX6jImVo7Tij49w3TJDfny6Gr3NCwX?=
=?us-ascii?Q?ta177j7oloveKebC9HV76B0nD3naCRkLEGrjCBMzYP8BoBQJeaiHjI4D3uVv?=
=?us-ascii?Q?5xaPM4Y/PQ8NSKw9S7dVnoLPs/640+oxerW7BznnDxqc70AkO3m2My2rBJ2A?=
=?us-ascii?Q?cd/BKLTPYG25UcYUqWOOgE8SMi7aPgaGT7qtg01nlGrSxG+lEEXi73F1mrR3?=
=?us-ascii?Q?2AwvSjYcupuceyiVIsiYFHbZ1CCSEVDWzP5FS0HOjOUYBQBpYrzEpspubA7h?=
=?us-ascii?Q?SpQd6zGs53hZBObJcU9CkLp29IwLdZKxq6fdI7j2U08ug63RZkYCb87HHIsI?=
=?us-ascii?Q?TTz/wTBVs+i3ta+WVGQnPmkeWaLEdwFY7FhPz/5pyuddUovAIZYbbj6MeVdG?=
=?us-ascii?Q?ZrNQE6B5EKt04Bb3UVR6hUtA1iyQHqZ+Jj3GJFNU7IBEKN1CAOsK+WEfDFZG?=
=?us-ascii?Q?Na4Po5ABMr9aa08NUFTaZwhbmOw76eHJr2XzL6j9pG29tSwAG/4diN89vrSS?=
=?us-ascii?Q?3/+4rraQ44H6uYEVezVA2kfImX4fdPZpeUtKVzjC/KNwOHPaI3syIAdN19qz?=
=?us-ascii?Q?TmqwuG5eqh+EMeQtpOTJc/e5XhfIyeCTSBUgP4XyVvwtQVJHFjCnaQTo8+HB?=
=?us-ascii?Q?7Y5wQOCRfxg552bhTdQWWvsmxRsa8F2twcq0+P882wCFCQg3o1zgv0BfdGpY?=
=?us-ascii?Q?JAdn1AIIbFEVYVcAK3Ga2/Hf88aGERfH9QgJwBCzU1045USG3Pq3iZ1MTWAb?=
=?us-ascii?Q?91ei1MQaNuiAzhZqmhWGVAZLoU51756hd18w/6czXrG+PeYnUcoGPU/U6gRi?=
=?us-ascii?Q?ham6Q7zlUQDNW3TvoZLVZYi2uueJyacx1Quw5uqhD7wMAujg+m7nBJh2x8rw?=
=?us-ascii?Q?OLw2c6dQZjI6MsJMXKwOu7I9S2ATDFxpMFCQPhJLP7MQ3SvDuaIx69Jzm/S0?=
=?us-ascii?Q?sHp/JwEMAQrM0zUmynssB3dTDLLNGof/UgIjPG6st2dF7uiY5He/Yr8SEnes?=
=?us-ascii?Q?Wg=3D=3D?=
X-MS-Exchange-CrossTenant-Network-Message-Id: e3064544-a4d6-48f7-f0b5-08dd9dfb7b9e
X-MS-Exchange-CrossTenant-AuthSource: SA1PR11MB8794.namprd11.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:22:39.5781
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: PK3btjwY4D5KHM+D3SckimT/Lolue7y3busQbDGMw+enZ75v/QkhseR8pQAiIi8dwO/x/idpYVPbl+18dWA7l/VfnA33jHL5H5+3T18EsEI=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR11MB5809
X-OriginatorOrg: intel.com
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 11:11:41AM +0300, Dan Carpenter wrote:
> The cxlctl_validate_set_features() function is type bool. It's supposed
> to return true for valid requests and false for invalid. However, this
> error path returns ERR_PTR(-EINVAL) which is true when it was intended to
> return false.
Shiju - Can you trace this one through and add the impact statement?
Wondering if this is going to fail gracefully, or badly, further
down this path?
>
> Fixes: f76e0bbc8bc3 ("cxl: Update prototype of function get_support_feature_info()")
> Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
> ---
> drivers/cxl/core/features.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/cxl/core/features.c b/drivers/cxl/core/features.c
> index 6f2eae1eb126..7c750599ea69 100644
> --- a/drivers/cxl/core/features.c
> +++ b/drivers/cxl/core/features.c
> @@ -544,7 +544,7 @@ static bool cxlctl_validate_set_features(struct cxl_features_state *cxlfs,
> u32 flags;
>
> if (rpc_in->op_size < sizeof(uuid_t))
> - return ERR_PTR(-EINVAL);
> + return false;
>
> feat = cxl_feature_info(cxlfs, &rpc_in->set_feat_in.uuid);
> if (IS_ERR(feat))
> --
> 2.47.2
>
Return-Path: <linux-kernel+bounces-665709-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id AA54841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:24:00 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id CFB1C4E1CC2
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:24:01 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id ADD9D2836AF;
Wed, 28 May 2025 15:23:55 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="euStvtdY";
dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="LvbH77Mg"
Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6436028C01B;
Wed, 28 May 2025 15:23:52 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445834; cv=fail; b=reHsK6jBhA8EM5386Ar1x340Kcliz4yLKaxrDRzgGHpUa/b44Tnl78yqCQoBLL4m4AOIycbUv1/NT0yfeeCgOijtr6V7pDEldAgXANHdBrKdVJU0G8UlxY11/1T836EwZA9uNqm0YSHhWOKOFS/SXaX1effqGUl8oKOT4+HTPrs=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445834; c=relaxed/simple;
bh=Zesn/y+os5rKx3bWRFM+NB1J5bBgK2O2eq4fDecuU5s=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=FfqygO17oTCifcINQn2rttNLZSZ4CUyiuIhfhH27dRhtm7bhua9+UaPkDIN2FsIyQ59cUj0c76YgTistOIJKKCeHpGSZOnlGUPrtcv/MrXPfm0NMSBpGKJ8W9PTezqlTwc4gElFaMgmrWQfajRBfEiyU/viKSoLOqTCw6KRnBV0=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=euStvtdY; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=LvbH77Mg; arc=fail smtp.client-ip=205.220.165.32
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com
Received: from pps.filterd (m0246629.ppops.net [127.0.0.1])
by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SCqJ4c002603;
Wed, 28 May 2025 15:23:32 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc
:content-transfer-encoding:content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to; s=
corp-2025-04-25; bh=3OK9feUGTuE1UidIpgbVW102/B/pFfVnnocmKyyHBf8=; b=
euStvtdYM1JyGyWvQMvAJCkdzvSVhOtdhVJWlsXfg0/cI2CVB3WTwu0VjaTt6LZw
bMCeIPMEWCr3wE005qnu8khnmRfXONsdvwXNIIEvRabUng3i4M+e9A95p1AA6uwa
pQ3L7NHa4EignPov++ov67F7F8Crejo/FyLMJxlbJBHq++XhIkMyPhx8fWSPvyck
s7RbcKnlkFsajM7zOo8rqOr+HIYPldKHIhGVGNd6ERUpsi7+QOfImorWYdaWLLHQ
13aY5BBu0JKTQyrH25ir7rbyFUf35CcYrsn66I4gdq8JH3C/1/6gvzPXN6X/b2OW
z1DGm6/bjYBdODV4+PRTDg==
Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2])
by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 46v3pd60un-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Wed, 28 May 2025 15:23:32 +0000 (GMT)
Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1])
by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 54SEtel4027847;
Wed, 28 May 2025 15:23:31 GMT
Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11on2047.outbound.protection.outlook.com [40.107.220.47])
by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 46u4jajwac-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Wed, 28 May 2025 15:23:31 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=GqvQzeWi0BDB9YfM2+hTiYBw8LwvZUimdOpuFj4ezWQ+wYROC3bjdinGfGyKS1iwha+yDhmWFfYaEqcZhd7t89vTkwbiRODEdftqcs7y34QiFUnNa0LXLTe9UKi1DNtwZHFwFhp3Y7SlRMNB5/sQQoJHtk+838GNwP2UrhtBjEQzkgWEhsiUKp6VVV29FTMKxnOLIC/ylqEHEhvCEestTp8kVM4LlD1GrSbbT4ZCbJG19qvHIzlDCVyYfblTezDDjUVybmof5dTdZlRbmoNYyXcy8OfpRq+zjiF90J46YHwiYze82s9Ys/tx7GxSyKswkWp8b78Jfwu8BzF3K4KxDQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=3OK9feUGTuE1UidIpgbVW102/B/pFfVnnocmKyyHBf8=;
b=xL2c5YoKaoTAnXgOwenEkV9pcdYhpPVfe/1h/KcxvYl1QbZ2GGa6beTFviVDvdgsLaYWZyZwPwkZN99l9vah5g2cfF+mwTai0FsVykFoWsGCYpnAM78Ogqe1nQxmiXTceoZA1W1rls7DAsonG1kgLBKUro3hV7dxpV1qO5OYWThwLu8fOp0d8/bizIAlIAGNVU1deDXulZaOR2k8D8MqwHJ9k7Q7PpPIoLEKlQJgVyrT78Rx5H+f9e+/5OweTLjSS29IeqQ2m+AY+fXYHOWmBgLW7dUEoyDnzuyZ6aXDDQQDnCXU3l2ZIEjWmw1j0oSGfcUfa7ORQxKCiyVYNpG1NA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com;
dkim=pass header.d=oracle.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=3OK9feUGTuE1UidIpgbVW102/B/pFfVnnocmKyyHBf8=;
b=LvbH77Mg3jZzta+ccaqpFq+0Cx2JgAko4PAHNNjIbgmBUtFRi7w228QOdxpFbiFjspyrFbhHIOGDEH/WVtuojgocnO5axx4z0acpftt/0R3T44v+OhhxwD8ksVmFd68Kluw4e7I7tkHNvbkYUOoKxW2SK+/cx57mHy8Od//c2No=
Received: from DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16)
by IA4PR10MB8400.namprd10.prod.outlook.com (2603:10b6:208:567::7) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8746.30; Wed, 28 May
2025 15:23:27 +0000
Received: from DM4PR10MB8218.namprd10.prod.outlook.com
([fe80::2650:55cf:2816:5f2]) by DM4PR10MB8218.namprd10.prod.outlook.com
([fe80::2650:55cf:2816:5f2%5]) with mapi id 15.20.8746.030; Wed, 28 May 2025
15:23:27 +0000
Date: Wed, 28 May 2025 16:23:24 +0100
From: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>
To: Caleb Sander Mateos <csander@xxxxxxxxxxxxxxx>
Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,
"Liam R . Howlett" <Liam.Howlett@xxxxxxxxxx>,
Steven Rostedt <rostedt@xxxxxxxxxxx>,
Masami Hiramatsu <mhiramat@xxxxxxxxxx>,
Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx>,
Eric Mueller <emueller@xxxxxxxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx,
linux-trace-kernel@xxxxxxxxxxxxxxx, linux-mm@xxxxxxxxx,
Vlastimil Babka <vbabka@xxxxxxx>, Jann Horn <jannh@xxxxxxxxxx>,
Pedro Falcato <pfalcato@xxxxxxx>
Subject: Re: [PATCH] mm: remove unused mmap tracepoints
Message-ID: <92d947de-110e-4c17-a822-f626bac9b540@lucifer.local>
References: <20250411161746.1043239-1-csander@xxxxxxxxxxxxxxx>
<3ucksa6coiwco3wpmcjtfwezqjigzm2zwvdvkt2ryvefzojtqy@4lda47c236uz>
<CADUfDZpPGQEY9u3p3MCU2S3qmDyKmE1JnSQ6G2jO4_J40rQeeQ@xxxxxxxxxxxxxx>
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <CADUfDZpPGQEY9u3p3MCU2S3qmDyKmE1JnSQ6G2jO4_J40rQeeQ@xxxxxxxxxxxxxx>
X-ClientProxiedBy: LO4P123CA0642.GBRP123.PROD.OUTLOOK.COM
(2603:10a6:600:296::11) To DM4PR10MB8218.namprd10.prod.outlook.com
(2603:10b6:8:1cc::16)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: DM4PR10MB8218:EE_|IA4PR10MB8400:EE_
X-MS-Office365-Filtering-Correlation-Id: cccbded0-8d19-432c-4be8-08dd9dfb980b
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|376014|7416014|1800799024|366016|7053199007;
X-Microsoft-Antispam-Message-Info:
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
=?utf-8?Q?4lyyaKa9ltM=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB8218.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016)(7053199007);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
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
=?utf-8?B?dUE9PQ==?=
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0:
EGv7an0C2claw7OxOwYgw30NZW7x2I4R1j/mBFC0bjWMy7dLUEyJQjRFFqYxpGjj4uxl2l3h5OGnoYqGj8Mrw7EHegtQDnhWPTv957qhxqQyNroOZ7XAO9RLqkXur3E4y2cp3/jl6+ms4v7fCOnKxJlag1RJmqvSvqv1R2lsy+boovywUMWo+06RycewNL+43dbwZuHtDKIxI29jDcrFnfYqCcpLP9kJOSr/XH9AEODd31Nz1y1XLm7YX69DY1Y/y2PCgL3/zkPH3g96nVvZoK5z/hlUlVW5OKRmM81mILX0EklzFA+ZYI+pwrJd+MU8eRfoSMMvWpA3STQgJ/ve38LZUSm2Qt27SbK2bGPnimIlLoQVG1F+qydubIH286t11E1adDtSkUGj3yfX8hd0uRc3c3NHBMKDxNQqIcA7xeG5NVT2a8N6YAAmfI3d6KbHxDMpYSkLhFrQlwLLoUaqfBWNKK/HP8VQYQLaowECRzbn+jGmTWOka95JC2z3lBfSlcBvXyRr73J1/LX5NfxWFv2B4Y3ydbjoV/BRZkcfbqaEsVkGORTp3OPyh2nyI75l9Ncwp+ISps6GKJzRR1f9kWznCrFkF2vJtT336YeWvog=
X-OriginatorOrg: oracle.com
X-MS-Exchange-CrossTenant-Network-Message-Id: cccbded0-8d19-432c-4be8-08dd9dfb980b
X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB8218.namprd10.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:23:27.0708
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 82f88A31JJymionVETVorrNETxE8OqVegQNcwEEqNJQr/XrM7Mff69peb50hUYwTVZSB6bAIGbtbpUTjQzY1Cklc+FPMCXErzbAq2BzhdgU=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA4PR10MB8400
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_07,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 phishscore=0 suspectscore=0
adultscore=0 malwarescore=0 bulkscore=0 mlxscore=0 mlxlogscore=999
classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000
definitions=main-2505280132
X-Proofpoint-ORIG-GUID: R5niJsA3MfZU4ANhnghQgFF8OnLvedHy
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEzMyBTYWx0ZWRfX8BQlxLEU/Z3e F4tAtLQ2hfQ2uxXWYCks/53xqisvFC2XfKTRE00E/WC3I0SlMAs2lZNfaeBszQBPRzrG0P9NuDp 6o8P39d5alBxC+8vwl6uMjC5u95QTv/qit2nL+13kfZjG8YsFF30RGVIJak4hN2Q7uHRXsqxEdS
SSqBcP+FwccRdpE28f6J1cSxM//xWmQR81uP3/1tGMPGH7WYj7q/abIYBANjvYg0fNm/fTZzXNk OYXd6UqJ2KFBje0Tq1VsnJKjzldF+3/ciQfrTurVWr9AwWmXO39oQ13HrtK9//NAL41UbRr6lod h+2O14bSl2Ular1d0+ZG/hufzv6NGUhAKRLBQsXXYR3KTzZzyDpjBvBnQHjNb/2y/gdFrWtHHU2
lKK9sN/y7gcvOX6wNRr9kyTXS+g2LZ3EwK73shgWA4xqCXZGS5+PjtcO25jRyKJ+zeKsxhxr
X-Authority-Analysis: v=2.4 cv=UZNRSLSN c=1 sm=1 tr=0 ts=68372a74 cx=c_pps a=XiAAW1AwiKB2Y8Wsi+sD2Q==:117 a=XiAAW1AwiKB2Y8Wsi+sD2Q==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19
a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=dt9VzEwgFbYA:10 a=GoEa3M9JfhUA:10 a=yPCof4ZbAAAA:8 a=WTJdmG3rAAAA:8 a=3ExrvcxlBbyKRAA43QcA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=q3NGepEMMmKWaCv8Sx90:22
X-Proofpoint-GUID: R5niJsA3MfZU4ANhnghQgFF8OnLvedHy
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Sorry this wasn't picked up.
Andrew - one to pick up after merge window? :)
Caleb - I'd ping again after the merge window is over if it's not picked up
this week. This isn't a great time as people tend to be busy sending stuff
over to Linus.
On Wed, May 28, 2025 at 08:16:24AM -0700, Caleb Sander Mateos wrote:
> Hi MM folks,
> Would you mind picking up this patch to remove some old tracepoints?
> Liam has already given it a review.
I am actually curious about reintroducing these at some point, but no harm
removing them for now as they are as you say, unused. If I do work on
reintroducing them I can obviously... reintroduce them :)
>
> Thanks,
> Caleb
>
> On Fri, Apr 11, 2025 at 10:23â?¯AM Liam R. Howlett
> <Liam.Howlett@xxxxxxxxxx> wrote:
> >
> > * Caleb Sander Mateos <csander@xxxxxxxxxxxxxxx> [250411 12:18]:
> > > The vma_mas_szero and vma_store tracepoints are unused since commit
> > > fbcc3104b843 ("mmap: convert __vma_adjust() to use vma iterator").
> > > Remove them so they are no longer listed as available tracepoints.
> > >
> >
> > Thanks for doing this.
> >
> > Reviewed-by: Liam R. Howlett <Liam.Howlett@xxxxxxxxxx>
LGTM so:
Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>
> >
> > > Reported-by: Eric Mueller <emueller@xxxxxxxxxxxxxxx>
> > > Signed-off-by: Caleb Sander Mateos <csander@xxxxxxxxxxxxxxx>
> > > ---
> > > include/trace/events/mmap.h | 52 -------------------------------------
> > > 1 file changed, 52 deletions(-)
> > >
> > > diff --git a/include/trace/events/mmap.h b/include/trace/events/mmap.h
> > > index f8d61485de16..ee2843a5daef 100644
> > > --- a/include/trace/events/mmap.h
> > > +++ b/include/trace/events/mmap.h
> > > @@ -41,62 +41,10 @@ TRACE_EVENT(vm_unmapped_area,
> > > __entry->total_vm, __entry->flags, __entry->length,
> > > __entry->low_limit, __entry->high_limit, __entry->align_mask,
> > > __entry->align_offset)
> > > );
> > >
> > > -TRACE_EVENT(vma_mas_szero,
> > > - TP_PROTO(struct maple_tree *mt, unsigned long start,
> > > - unsigned long end),
> > > -
> > > - TP_ARGS(mt, start, end),
> > > -
> > > - TP_STRUCT__entry(
> > > - __field(struct maple_tree *, mt)
> > > - __field(unsigned long, start)
> > > - __field(unsigned long, end)
> > > - ),
> > > -
> > > - TP_fast_assign(
> > > - __entry->mt = mt;
> > > - __entry->start = start;
> > > - __entry->end = end;
> > > - ),
> > > -
> > > - TP_printk("mt_mod %p, (NULL), SNULL, %lu, %lu,",
> > > - __entry->mt,
> > > - (unsigned long) __entry->start,
> > > - (unsigned long) __entry->end
> > > - )
> > > -);
> > > -
> > > -TRACE_EVENT(vma_store,
> > > - TP_PROTO(struct maple_tree *mt, struct vm_area_struct *vma),
> > > -
> > > - TP_ARGS(mt, vma),
> > > -
> > > - TP_STRUCT__entry(
> > > - __field(struct maple_tree *, mt)
> > > - __field(struct vm_area_struct *, vma)
> > > - __field(unsigned long, vm_start)
> > > - __field(unsigned long, vm_end)
> > > - ),
> > > -
> > > - TP_fast_assign(
> > > - __entry->mt = mt;
> > > - __entry->vma = vma;
> > > - __entry->vm_start = vma->vm_start;
> > > - __entry->vm_end = vma->vm_end - 1;
> > > - ),
> > > -
> > > - TP_printk("mt_mod %p, (%p), STORE, %lu, %lu,",
> > > - __entry->mt, __entry->vma,
> > > - (unsigned long) __entry->vm_start,
> > > - (unsigned long) __entry->vm_end
> > > - )
> > > -);
> > > -
> > > -
> > > TRACE_EVENT(exit_mmap,
> > > TP_PROTO(struct mm_struct *mm),
> > >
> > > TP_ARGS(mm),
> > >
> > > --
> > > 2.45.2
> > >
Return-Path: <linux-kernel+bounces-665710-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 86E7141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:24:08 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id A13794E1DDB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:24:09 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 8988528C2C8;
Wed, 28 May 2025 15:23:58 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Rn7UjnIa"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 10E0928C030
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:23:55 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445837; cv=none; b=o5y+M8byGy6z+XiFxX0B7/bhjGL/bOPd4v1nf3ApJMphqMiHAQc4CMA3fRRmdvaSnoSXtTH7235q2FDcQpwjn6JSqkdFKqGNSM7K+HKa3YExAc0HIfrnQkkgBr3JBzz1qHYY6a3VvcuT0DW9z8ub7tIGhvU4lGAiy7nyRDzQtvk=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445837; c=relaxed/simple;
bh=OlIGNsrljXEWvdinSyO4J4xZYqnP3RN9MssjhHD6S0U=;
h=From:Message-ID:Date:MIME-Version:Subject:To:References:
In-Reply-To:Content-Type; b=TH4fw0m9z19YsUYxcl6M9J6vKL3QizBY2t1vr6ezknnaBB8aQ6GM/C401GErfPC/Vj3H0lyBdGqxfWSIiSbA15/lFQOsVm+fqpTUft5p1+eaI8M1pjYj0VABsCqGN1Q6bn6awVb9QSGhjmkc/9sbElMWTCbjMPHtXWjuVOuSwkw=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Rn7UjnIa; arc=none smtp.client-ip=170.10.129.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748445834;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:mime-version:mime-version:content-type:content-type:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=VptaC6vHWAhUvWn27KJmHAqHCa7LDR5CmGrJB91xBRs=;
b=Rn7UjnIahdMPfZQS+TRSMa79rkqeUMClD7l9VcBlGMT7M89uF4M6uoAhdge33hq+neU18g
g34+ArW6pwzJnthSi+3r9DD1NJrAATQfMhmQvix1zW/kVMmIYa7EX7XZ2rbpS9ppWl/E1o
M6OH+LO5AaTHbmVsMk5cQ55TYEOU+IE=
Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com
[209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS
(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
us-mta-495-tbqpbgWsNPKYUmwIFr3ACA-1; Wed, 28 May 2025 11:23:53 -0400
X-MC-Unique: tbqpbgWsNPKYUmwIFr3ACA-1
X-Mimecast-MFC-AGG-ID: tbqpbgWsNPKYUmwIFr3ACA_1748445833
Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-7c5d608e703so745348585a.3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:23:53 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748445833; x=1749050633;
h=content-transfer-encoding:in-reply-to:content-language:references
:to:subject:user-agent:mime-version:date:message-id:from
:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
bh=VptaC6vHWAhUvWn27KJmHAqHCa7LDR5CmGrJB91xBRs=;
b=U4HxtaJXwjwwo9ly7Q6yBLc1AnAlhO34AZxIoVPhZbz/TsljDw6WNmmYqkKVrq+unN
xa9tXcIc0Zuq7Z5mLKw/dPIVol7zSFBkiwSAHFr9Bhne3eFiPcGprYnuHhLcwoPEQqRz
KJ86TZ6BNhkLx3+dY7RJks7nEt21z9TDKr4dvuuhp0XfXv02rCuwZVFAHautlhWJOV2/
OojiUT/NOeIJn9HCZDLYgP+e2P7ULDmUf3O9Xoverd1ZurbNFJqRfqHotbi05igoZNHj
3g91tQwIEc29GuUKoV2kD4OLOuSt7Dv+7jCgSP8JssZPARugRxqO0Vnmgu/8p5SJy5f6
ouhg==
X-Forwarded-Encrypted: i=1; AJvYcCUZRZN+KE1gIHOK9CWsAz2NoEQFdB/67/8Rmq69FzLtpy8YQGQ5I8wztBz+KcBpmSrZytqWjUVf3ENAMc4=@vger.kernel.org
X-Gm-Message-State: AOJu0Yxkk6yUuiNbOWml0DAUHWtjtZrAs/Z/tW/KbqGM8aXNPf0PyTyB
AOPBXBToQ7+yE4LnLf0iNr9gDT5gqtDVrXq7mh1HRFUvZFnqJW0EPgs/kHGjkAZMwYS9x9tqQYB
bZyCNDT2MMETvFC2GKebfjmNeIDdZetQelSXssJAHITyNkBHTWUlWR+QTCDVdEq8c2Q==
X-Gm-Gg: ASbGncuh06d6X33VvSBONivQ1pN8OhsGNYjK40cJ0i+XaYcVMSHog1jRYBTK1RiFtKq
IVy2rekH7X0SXIwH6GjRMrE0OB//vm62MNNp1kC90lXz475cEdPvVst5wBUl5m10XLr78fz1e4x
AuyX8vEKPiS/dPl120Ny56rgKAz733xl3I8Ch3dINxqsmUgrrABmZO8NxMRtWBitcPwnvXwbgrN
/tafwbNW1wRLKdXFMrXJGsVvBXZvyKsqZPdb23ihnkwUY3CauD9RqJ110qJKxSAVAd8QhuD5bi5
6s6J2egXDFMG
X-Received: by 2002:a05:620a:424a:b0:7c5:55f9:4bc1 with SMTP id af79cd13be357-7ceecc27054mr2090624185a.42.1748445832840;
Wed, 28 May 2025 08:23:52 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IGnQ/I5pD0hhQow2ppXrZml7+WUDRAt7CMy+wi3zoafLJfGV00yEjXt2imSZol2wlQaaiVzAw==
X-Received: by 2002:a05:620a:424a:b0:7c5:55f9:4bc1 with SMTP id af79cd13be357-7ceecc27054mr2090621085a.42.1748445832382;
Wed, 28 May 2025 08:23:52 -0700 (PDT)
Received: from [172.20.4.10] ([50.234.147.137])
by smtp.gmail.com with ESMTPSA id af79cd13be357-7cfc5d486c8sm81211485a.101.2025.05.28.08.23.50
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 08:23:51 -0700 (PDT)
From: Waiman Long <llong@xxxxxxxxxx>
X-Google-Original-From: Waiman Long <longman@xxxxxxxxxx>
Message-ID: <99be9c8e-a5c4-4378-b03b-2af01608de9f@xxxxxxxxxx>
Date: Wed, 28 May 2025 11:23:50 -0400
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH] Documentation: cgroup: clarify controller enabling
semantics
To: Vishal Chourasia <vishalc@xxxxxxxxxxxxx>, Tejun Heo <tj@xxxxxxxxxx>,
Johannes Weiner <hannes@xxxxxxxxxxx>, =?UTF-8?Q?Michal_Koutn=C3=BD?=
<mkoutny@xxxxxxxx>, Jonathan Corbet <corbet@xxxxxxx>,
cgroups@xxxxxxxxxxxxxxx, linux-doc@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
References: <20250527085335.256045-2-vishalc@xxxxxxxxxxxxx>
Content-Language: en-US
In-Reply-To: <20250527085335.256045-2-vishalc@xxxxxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 5/27/25 4:53 AM, Vishal Chourasia wrote:
> The documentation for cgroup controller management has been updated to
> be more consistent regarding following concepts:
>
> What does it mean to have controllers
> 1) available in a cgroup, vs.
> 2) enabled in a cgroup
>
> Which has been clearly defined below in the documentation.
>
> "Enabling a controller in a cgroup indicates that the distribution of
> the target resource across its immediate children will be controlled.
> Consider the following sub-hierarchy"
>
> As an example, consider
>
> /sys/fs/cgroup # cat cgroup.controllers
> cpuset cpu io memory hugetlb pids misc
> /sys/fs/cgroup # cat cgroup.subtree_control # No controllers by default
> /sys/fs/cgroup # echo +cpu +memory > cgroup.subtree_control
> /sys/fs/cgroup # cat cgroup.subtree_control
> cpu memory # cpu and memory enabled in /sys/fs/cgroup
> /sys/fs/cgroup # mkdir foo_cgrp
> /sys/fs/cgroup # cd foo_cgrp/
> /sys/fs/cgroup/foo_cgrp # cat cgroup.controllers
> cpu memory # cpu and memory available in 'foo_cgrp'
> /sys/fs/cgroup/foo_cgrp # cat cgroup.subtree_control # empty by default
> /sys/fs/cgroup/foo_cgrp # ls
> cgroup.controllers cpu.max.burst memory.numa_stat
> cgroup.events cpu.pressure memory.oom.group
> cgroup.freeze cpu.stat memory.peak
> cgroup.kill cpu.stat.local memory.pressure
> cgroup.max.depth cpu.weight memory.reclaim
> cgroup.max.descendants cpu.weight.nice memory.stat
> cgroup.pressure io.pressure memory.swap.current
> cgroup.procs memory.current memory.swap.events
> cgroup.stat memory.events memory.swap.high
> cgroup.subtree_control memory.events.local memory.swap.max
> cgroup.threads memory.high memory.swap.peak
> cgroup.type memory.low memory.zswap.current
> cpu.idle memory.max memory.zswap.max
> cpu.max memory.min memory.zswap.writeback
>
> Once a controller is available in a cgroup it can be used to resource
> control processes of the cgroup.
>
> Signed-off-by: Vishal Chourasia <vishalc@xxxxxxxxxxxxx>
> ---
> Documentation/admin-guide/cgroup-v2.rst | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/admin-guide/cgroup-v2.rst b/Documentation/admin-guide/cgroup-v2.rst
> index 1a16ce68a4d7..0e1686511c45 100644
> --- a/Documentation/admin-guide/cgroup-v2.rst
> +++ b/Documentation/admin-guide/cgroup-v2.rst
> @@ -438,8 +438,8 @@ Controlling Controllers
> Enabling and Disabling
> ~~~~~~~~~~~~~~~~~~~~~
>
> -Each cgroup has a "cgroup.controllers" file which lists all
> -controllers available for the cgroup to enable::
> +Each cgroup has a cgroup.controllers file, which lists all the controllers
> +available for that cgroup and which can be enabled for its children.
I believe breaking the sentence into two separate components is actually
making it less correct. There are implicit controllers that are always
enabled and do not show up in cgroup.controllers. Prime examples are
perf_event and freezer. IOW, only controllers that are available and
need to be explicitly enabled will show up.
Cheers,
Longman
Return-Path: <linux-kernel+bounces-665711-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D10C541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:24:25 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 0F1AD17486B
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:24:27 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 5A79B28C03D;
Wed, 28 May 2025 15:24:20 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="H9w0yxk8"
Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id A1F5427815C
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:24:17 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445859; cv=none; b=AyOahkUJBWMJs8CaDGrpLaqMrZAwm4Jt6Hx7IypOSPWS1sHMg6c70HBfXHAUXnb0M8+dHvVKX6nEK97REwOjtx5D/VbTS358oE26Bs1t6qQmcwT4Pj4IEVnu02P4LtNybHKjj0NmWwlfWOOofgEZDOPocHr0GFhOv3jRTDmgaO4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445859; c=relaxed/simple;
bh=wG0FNq+jW0uKrq/TkvyGn3RC8V3YAAUFr33TFVTJx30=;
h=Message-ID:Date:MIME-Version:Subject:To:References:From:
In-Reply-To:Content-Type; b=um4sA0fAr5969VBAuNfTFf2b1hTxX0ZQ/qrbLZ448kK2VQQOU+JaLlEZc7X0fNbGbhTNpO5NIElZCbtcim8DaXHFsf2IWYY0RyUf++13WA8J1ZMShDnwSowTFzRxrYSmhKJS7NztoRuqBq47cnwOz98RBPXAPYDD97X/wGqOVwg=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=H9w0yxk8; arc=none smtp.client-ip=192.198.163.14
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748445858; x=1779981858;
h=message-id:date:mime-version:subject:to:references:from:
in-reply-to:content-transfer-encoding;
bh=wG0FNq+jW0uKrq/TkvyGn3RC8V3YAAUFr33TFVTJx30=;
b=H9w0yxk8gVNXPAm2o0N/jRDB5aBv08eA+ynt8uNfr0uJHPqRLeYAfG6N
DVXbtJkRn3unAgTVTRx8/OD1WLkB3sI3TpADmfVmFftFr+hVPnKvIUH/5
JtJsoF6BxqBtKvNzXCY4FG3Ards6gWpkJdq/9WAChefqLmDreVj8Y1nYM
adrbdUIKVZ/dsdx/BAjNT3H8iHH1HuWZAYOR2r1dqNfnaPDxUMKW3/3Km
2fAbA8zSXUNjeLb1RvK7lEmU+yrrs0gNIA/z2et8EiagB7mZyt6tGhcH4
L/jXkbiPL5jftbcmUQjnF4ElFAUM04ZNAMs2lv8LDbNREKMWgzKTieIBP
A==;
X-CSE-ConnectionGUID: +WPQ3i6qSNG+puzvZPNA+Q==
X-CSE-MsgGUID: YFEe6fI+Qi2GgUbxBv7eng==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="50583032"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="50583032"
Received: from orviesa002.jf.intel.com ([10.64.159.142])
by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 08:24:17 -0700
X-CSE-ConnectionGUID: KzDSNHTZSj2/KJIvqehVeQ==
X-CSE-MsgGUID: ylJGr8CLS4GzcLk9tP8n7g==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="174270773"
Received: from linux.intel.com ([10.54.29.200])
by orviesa002.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 08:24:17 -0700
Received: from [10.246.136.52] (kliang2-mobl1.ccr.corp.intel.com [10.246.136.52])
(using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(No client certificate requested)
by linux.intel.com (Postfix) with ESMTPS id ED18820B5736;
Wed, 28 May 2025 08:25:53 -0700 (PDT)
Message-ID: <f3315aee-f783-4be0-aec7-c8c18eb6e4d2@xxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 11:24:14 -0400
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [RESEND PATCH V2 0/4] perf: Support Panther Lake uncore
To: peterz@xxxxxxxxxxxxx, mingo@xxxxxxxxxx, acme@xxxxxxxxxx,
namhyung@xxxxxxxxxx, irogers@xxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
References: <20250507143427.1319818-1-kan.liang@xxxxxxxxxxxxxxx>
Content-Language: en-US
From: "Liang, Kan" <kan.liang@xxxxxxxxxxxxxxx>
In-Reply-To: <20250507143427.1319818-1-kan.liang@xxxxxxxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-6.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Peter and Ingo,
Could you please take a look at the patch set? Please let me know if
there are any concerns.
Thanks,
Kan
On 2025-05-07 10:34 a.m., kan.liang@xxxxxxxxxxxxxxx wrote:
> From: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>
>
> Starting from the Panther Lake, the uncore discovery table mechanism is
> also introduced into the client platforms. The difference is that the
> portal of the global discovery table is retrieved from an MSR, rather
> than MMIO space.
>
> The first two patches provide a generic support for the extension of the
> uncore discovery table mechanism.
> The rest patches enable the uncore PMU on Panther Lake.
>
> Kan Liang (4):
> perf/x86/intel/uncore: Support MSR portal for discovery tables
> perf/x86/intel/uncore: Support customized MMIO map size
> perf/x86/intel/uncore: Add Panther Lake support
> perf/x86/intel/uncore: Add iMC freerunning for Panther Lake
>
> arch/x86/events/intel/uncore.c | 7 ++
> arch/x86/events/intel/uncore.h | 2 +
> arch/x86/events/intel/uncore_discovery.c | 89 ++++++++++++++++++------
> arch/x86/events/intel/uncore_discovery.h | 7 ++
> arch/x86/events/intel/uncore_snb.c | 79 +++++++++++++++++++++
> arch/x86/events/intel/uncore_snbep.c | 4 +-
> 6 files changed, 166 insertions(+), 22 deletions(-)
>
Return-Path: <linux-kernel+bounces-665712-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 9EBA641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:26:13 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 4AE197A74C1
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:24:54 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 47C8928C2C3;
Wed, 28 May 2025 15:25:59 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="hCLCoJuf"
Received: from mail-yw1-f169.google.com (mail-yw1-f169.google.com [209.85.128.169])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id A377D21A440
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:25:55 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.169
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445958; cv=none; b=M5OVEoh2RQoP0I5msV6GiD8q8h2GAWf78rBEVyR0PWELeNKcuOg77zOsYnLQKb6034SN1io9OaeGGiAgspD5BakfXJiqE4zuDgVsAg5y+Q4aPLFu190rLJsTZRYBhlRPca70joVrF44iskyigzen+2WbAZ+cQS93uE/KXwcKyZA=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445958; c=relaxed/simple;
bh=JB4V1mXB50dIS2i0RJuuug4gKKlxLvXfYIwuNLk4WtQ=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=hJPfEHGS+X6vFCPqs55dVl3Fuko5vqvZO12xNGTmm+2Jbm5ohmqrqMzkzkWya3wjZbvv3wAQEm+eqCeSI/V7BXbWsCueKaW73+c5ORfxj67uEjUgfA4vIO4frqFm0rgraK4Ifp3ec9V2O3F+vJCzrxb2amJq1Aa5XEzCGFHhYeI=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=hCLCoJuf; arc=none smtp.client-ip=209.85.128.169
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com
Received: by mail-yw1-f169.google.com with SMTP id 00721157ae682-70e78e04e48so16202877b3.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:25:55 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=google.com; s=20230601; t=1748445954; x=1749050754; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=ZZ+8fLpUTUE00SwjTXDSYLrDkmSnBdYHcuMZzbgG8cE=;
b=hCLCoJufd+CxSup/iMXxYzr9QUpe+XxDa3pPVHo9PrSg7djIXlvjxUjlwkTFQP55qh
978yKz96uNyJMBdeBuX9g8rUWPHd5VO3nHb0eADFxttvgcBEE+14opb6enmH6zC16ioa
EjAKhdfc4V2y3W/4S2HiN2McG/THvOpiD6w0tv7xGEIuRoNN1Xp5Oi0a7+B+uGiPYwL/
2r+EkJn9tQhTnC1oXKahnAopHF/Gz7Wu03Z2URzCer7D5s5GD6Y28+bQ6hFv7rqx+E9q
Oy1WXmADNc2bSRTKftASUm/jp7gR3gHRJR3CWxmOOZ+7HKjaBNFrJAJ9ulPUfkoPQdjF
xekw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748445954; x=1749050754;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=ZZ+8fLpUTUE00SwjTXDSYLrDkmSnBdYHcuMZzbgG8cE=;
b=KdS50QmWNcm/xSjosOFKYSmzaAOJwVZilKVRSjaS3wdR9swe+NVXv9saHx6KhNghqI
4MlMsK5W7OOytUUP/r5HBEzAIY+07LSau5MJG5GK9zsUrB+hO/AZl8ZS7BNeMdvIV4+m
m/beJnzjTA9T9wGmR1VoQ9jAwUrwJ9Gx17+mIuOgCTvbc5RU9+HO51tKgRlnFMd04iXC
5CTAZVxkem7IhpEKMIbxucr8Ais8+pT/A8cDVkntiLCjL0KSTT/Gr3dUiYFXzU2rZ5fO
lrgmrQf6mwmcs0DHI5yWJUJBmjR9BjX4m8moUrkol8fITkFr3eXNTSNIrTDVFW/w4QLV
Rbfg==
X-Forwarded-Encrypted: i=1; AJvYcCVL3Mz44OZREz+2FZGU88wQexB4ZMKoCE6Q2lHFJp4xe8k83FfDFy1AxhL8f62Sbcj4CFC/VBJh040tnzw=@vger.kernel.org
X-Gm-Message-State: AOJu0Yx3OdNvZ1i7f+wlmN9ZJbi+2aUnCsJogcMSnjMjv7YFtgfkR6xD
HXeEDaIojUtmDfGYlFsTKf6o279tRSYT3AFXeN9RPt4os/I0Z3xEqoyW/ePymMJYWy9xO/ylbrT
OK1y0sGdnEM38JQSuWDGTU1oyFwO0j5+HbscvRGOE
X-Gm-Gg: ASbGncvwT4h65rXA7bdzAr6C+8plvd3/PNXb7Ebxs6ZxScK9aXg0dh48I+86woGMtKX
dBLEo5iTowFs8PK9wWEDtpODZRAiwjTqL+V4TySSS9sHuijvtdCYGj16uG7JbxVdo3Ur5i07631
30pYFaUcVLPxz3K5Odw4WWFoTGfjJoud1lzBQppMeNUEJN5JSXMyDL9+J1GvEUOBaeMFI6+9bK0
Lx12g==
X-Google-Smtp-Source: AGHT+IHHTjFjHU0PvV1+djItsz78YttpGm4E3LPln4uNDhF+ecRDSLHAHEgplJviovwSCSuAsvDL2RN+PvRS8fF8nxk=
X-Received: by 2002:a05:690c:6382:b0:6fb:a696:b23b with SMTP id
00721157ae682-70e2daa40e4mr229796257b3.33.1748445954277; Wed, 28 May 2025
08:25:54 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250109204929.1106563-1-jthoughton@xxxxxxxxxx>
<20250109204929.1106563-7-jthoughton@xxxxxxxxxx> <aBqkINKO9PUAzZeS@xxxxxxxxxx>
<CADrL8HXDDRC6Ey5HYWvtzQzjcM2RNX7c7ngGyjUsD3WiBF3VYA@xxxxxxxxxxxxxx>
In-Reply-To: <CADrL8HXDDRC6Ey5HYWvtzQzjcM2RNX7c7ngGyjUsD3WiBF3VYA@xxxxxxxxxxxxxx>
From: James Houghton <jthoughton@xxxxxxxxxx>
Date: Wed, 28 May 2025 11:25:18 -0400
X-Gm-Features: AX0GCFsuA5ETDJCRPXwcAF_CgwvMWNwjHd-w8eEw30VBFRDQPn6RHYkUrDT3M_g
Message-ID: <CADrL8HXS7zvJZjOxTxPKH0dAGoMXnFrrxCW7J7CXRtaeV6izjQ@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v2 06/13] KVM: arm64: Add support for KVM_MEM_USERFAULT
To: Sean Christopherson <seanjc@xxxxxxxxxx>
Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx>, Jonathan Corbet <corbet@xxxxxxx>, Marc Zyngier <maz@xxxxxxxxxx>,
Oliver Upton <oliver.upton@xxxxxxxxx>, Yan Zhao <yan.y.zhao@xxxxxxxxx>,
Nikita Kalyazin <kalyazin@xxxxxxxxxx>, Anish Moorthy <amoorthy@xxxxxxxxxx>,
Peter Gonda <pgonda@xxxxxxxxxx>, Peter Xu <peterx@xxxxxxxxxx>,
David Matlack <dmatlack@xxxxxxxxxx>, wei.w.wang@xxxxxxxxx, kvm@xxxxxxxxxxxxxxx,
linux-doc@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, kvmarm@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-11.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 11:09=E2=80=AFAM James Houghton <jthoughton@google.=
com> wrote:
>
> On Tue, May 6, 2025 at 8:06=E2=80=AFPM Sean Christopherson <seanjc@google=
.com> wrote:
> >
> > On Thu, Jan 09, 2025, James Houghton wrote:
> > > @@ -2073,6 +2080,23 @@ void kvm_arch_commit_memory_region(struct kvm =
*kvm,
> > > enum kvm_mr_change change)
> > > {
> > > bool log_dirty_pages =3D new && new->flags & KVM_MEM_LOG_DIRTY_=
PAGES;
> > > + u32 new_flags =3D new ? new->flags : 0;
> > > + u32 changed_flags =3D (new_flags) ^ (old ? old->flags : 0);
> >
> > This is a bit hard to read, and there's only one use of log_dirty_pages=
. With
> > zapping handled in common KVM, just do:
>
> Thanks, Sean. Yeah what you have below looks a lot better, thanks for
> applying it for me. I'll post a new version soon. One note below.
>
> >
> > @@ -2127,14 +2131,19 @@ void kvm_arch_commit_memory_region(struct kvm *=
kvm,
> > const struct kvm_memory_slot *new,
> > enum kvm_mr_change change)
> > {
> > - bool log_dirty_pages =3D new && new->flags & KVM_MEM_LOG_DIRTY_=
PAGES;
> > + u32 old_flags =3D old ? old->flags : 0;
> > + u32 new_flags =3D new ? new->flags : 0;
> > +
> > + /* Nothing to do if not toggling dirty logging. */
> > + if (!((old_flags ^ new_flags) & KVM_MEM_LOG_DIRTY_PAGES))
> > + return;
>
> This is my bug, not yours, but I think this condition must also check
> that `change =3D=3D KVM_MR_FLAGS_ONLY` for it to be correct. This, for
> example, will break the case where we are deleting a memslot that
> still has KVM_MEM_LOG_DIRTY_PAGES enabled. Will fix in the next
> version.
Ah it wouldn't break that example, as `new` would be NULL. But I think
it would break the case where we are moving a memslot that keeps
`KVM_MEM_LOG_DIRTY_PAGES`.
>
> >
> > /*
> > * At this point memslot has been committed and there is an
> > * allocated dirty_bitmap[], dirty pages will be tracked while =
the
> > * memory slot is write protected.
> > */
> > - if (log_dirty_pages) {
> > + if (new_flags & KVM_MEM_LOG_DIRTY_PAGES) {
> >
> > if (change =3D=3D KVM_MR_DELETE)
> > return;
Return-Path: <linux-kernel+bounces-665713-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 86CA641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:26:23 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 438427A82F7
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:25:05 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 934A628C5CE;
Wed, 28 May 2025 15:26:01 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="EdZRhU2R"
Received: from mail-pg1-f171.google.com (mail-pg1-f171.google.com [209.85.215.171])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5A85428C2C5
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:25:59 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.171
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748445960; cv=none; b=JzaVyI8v0h9i6KJ9epDkhSjI3CmsXjBg/XN5bbPUcOtNvb+EkLgZYqiJQtysmgjsfgDuZTpDwV5ucRr/ZClQCpnWC/9+7BB8/5mSJLFxKpizLqI8as6zk3nAo4MlP2v1JioTPPjXZQii4jEIVlOmFnpwxcJDfYWlZ+ofKBCkEQ8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748445960; c=relaxed/simple;
bh=PU9chQywfCMBgYD5NaCcwYrj6++fQTNDBXxxWSs6M44=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=UaSlwUZG8usH/dQhUQlVMXMkeGgnsGketCDznWiHFnqd0N9DwkQBRT9Dfc+lVinHtvx+wEcrp1UIZuzyhoWbHr3cnbm7L9stORiIIBxFGeVorDr8grvza2kumkCsicKJAHphTlbYe9uk/FoOMkN1jBN4IZtW0WPuY3QMYr4K9ts=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=EdZRhU2R; arc=none smtp.client-ip=209.85.215.171
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com
Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com
Received: by mail-pg1-f171.google.com with SMTP id 41be03b00d2f7-b26fabda6d9so647266a12.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:25:59 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=purestorage.com; s=google2022; t=1748445958; x=1749050758; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=PU9chQywfCMBgYD5NaCcwYrj6++fQTNDBXxxWSs6M44=;
b=EdZRhU2RN+aEZvLx1snhnNI9BryOF+t3fe9Kd5RNLlIgt/tc2tJnbUss2NgZqONhIM
aPF4bxXmFSdOvkaNVAOYeb5O5M4XobCyqPRpcm9waZhAqebVIXlwyYGy7CmwVO7+M13C
9EaY8CWY+peUzzmIFaEJI4k4Siq0LPHa9+2gcEKx/0nx95RKtCA7yBvEXM4PAMAdmLA7
swtOhw/p/bFrIat+Idkv6iyayLrQtGMRt2IUoGaLGkF6dg0yFBAFPxYfOfBwz7veQEm+
zlrh51qDpQrYFYNCFrSXR5FpFKkY6N+AgSpAhVLhSNCUK17dl3YbKLYkf4i7esXMwfuK
L9iw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748445958; x=1749050758;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=PU9chQywfCMBgYD5NaCcwYrj6++fQTNDBXxxWSs6M44=;
b=DYn7mTgs50EfU3hCvw3gRWdiizk1UlL7cjyVDWz21+Ilvb7jADRRfveg52j8RgXXIv
UoOxD5FWvi/fz+HjOnmvXgJICOOm1t+LrD1PRFQZma+hLUHzmb0xPvtH15YZlJFNFNqy
GmDijrfZK79ucCfQTXTzQK6bck3E5hifzIA7mdg8WcDGc3ul31ZwLLL9tvm4E5CKZyHH
8/ewp/xFM1wg8tTW1Kt1YEa2MfLnd28Ek4lAmk8cvisQdYGpx2hN6JXyzCPXjTEhaC58
r70wZoVP4LLZF5AA8uu0D14PzMrd/lI6HJMUqtmbxhlVK1gYLJiBQmESiblJz2xuJ8la
yy2g==
X-Forwarded-Encrypted: i=1; AJvYcCVAmem2/CyrWOtkCWKCQUcxuTctvv4u5i/hBxiblCygoywbYmfGff9VMtDvMcg3/1QUI5IUynBt9KGLxsc=@vger.kernel.org
X-Gm-Message-State: AOJu0Yx00WjJmyulqdclRs2qiCIp3V9oyjbEYktNUmZkWzoK0l4p7J8z
Nz7mqzJWOJcBrTkHGWJ26coiCXx2zZoBQqJNe7zPJpafJHEQ+wRTyE4GbcVFjGExBrQaSwZb+2j
kFg9GUZEwboA2vQ/T1PVIgCXJ1VcdD7WcPWpafl50lg==
X-Gm-Gg: ASbGnctunKjKrWlbbFP8sByoo+G6VWhiuOOvNFP+a6GiYKXSM84BCO7HVwmE0dKOnEe
E9FLzcORDlR40HDbq5ts3t5UAtKXIiow8I95BoODmIvAuT+pG8gROflLsEYolmU6gJ3DYUUZXWt
3zqCKuPesvKJczfFCcKuEE8DYmysNliAC5
X-Google-Smtp-Source: AGHT+IFFLhz0tMuJ5OoJ7sq+5B4EgghyiZS3sT2o+wvwGnin2/XNjmW1voB64CyNLiLlOl9Lzv45F8CFBTLXOmtDGfQ=
X-Received: by 2002:a17:90b:4d8f:b0:30a:80bc:ad4 with SMTP id
98e67ed59e1d1-311e03a7f6amr1843239a91.0.1748445958464; Wed, 28 May 2025
08:25:58 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250411161746.1043239-1-csander@xxxxxxxxxxxxxxx>
<3ucksa6coiwco3wpmcjtfwezqjigzm2zwvdvkt2ryvefzojtqy@4lda47c236uz>
<CADUfDZpPGQEY9u3p3MCU2S3qmDyKmE1JnSQ6G2jO4_J40rQeeQ@xxxxxxxxxxxxxx> <92d947de-110e-4c17-a822-f626bac9b540@lucifer.local>
In-Reply-To: <92d947de-110e-4c17-a822-f626bac9b540@lucifer.local>
From: Caleb Sander Mateos <csander@xxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 08:25:47 -0700
X-Gm-Features: AX0GCFv3sm9dKmwHw3WUhFClDZ3EiFDcrlchd9OQvH_FSdqpgWJC60zCCV5o0e8
Message-ID: <CADUfDZqQDes94v17mWCk2FdXbyasybmPeLOeCCrikB7trOfDUg@xxxxxxxxxxxxxx>
Subject: Re: [PATCH] mm: remove unused mmap tracepoints
To: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>
Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>, "Liam R . Howlett" <Liam.Howlett@xxxxxxxxxx>,
Steven Rostedt <rostedt@xxxxxxxxxxx>, Masami Hiramatsu <mhiramat@xxxxxxxxxx>,
Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx>, Eric Mueller <emueller@xxxxxxxxxxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx, linux-trace-kernel@xxxxxxxxxxxxxxx,
linux-mm@xxxxxxxxx, Vlastimil Babka <vbabka@xxxxxxx>, Jann Horn <jannh@xxxxxxxxxx>,
Pedro Falcato <pfalcato@xxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 8:23=E2=80=AFAM Lorenzo Stoakes
<lorenzo.stoakes@xxxxxxxxxx> wrote:
>
> Sorry this wasn't picked up.
No worries, I think I didn't send it to the relevant people and
mailing list originally since it wasn't in the MAINTAINERS file (which
Liam has since fixed).
>
> Andrew - one to pick up after merge window? :)
>
> Caleb - I'd ping again after the merge window is over if it's not picked =
up
> this week. This isn't a great time as people tend to be busy sending stuf=
f
> over to Linus.
Sure, no rush on this. Just spring cleaning my inbox :)
>
> On Wed, May 28, 2025 at 08:16:24AM -0700, Caleb Sander Mateos wrote:
> > Hi MM folks,
> > Would you mind picking up this patch to remove some old tracepoints?
> > Liam has already given it a review.
>
> I am actually curious about reintroducing these at some point, but no har=
m
> removing them for now as they are as you say, unused. If I do work on
> reintroducing them I can obviously... reintroduce them :)
>
> >
> > Thanks,
> > Caleb
> >
> > On Fri, Apr 11, 2025 at 10:23=E2=80=AFAM Liam R. Howlett
> > <Liam.Howlett@xxxxxxxxxx> wrote:
> > >
> > > * Caleb Sander Mateos <csander@xxxxxxxxxxxxxxx> [250411 12:18]:
> > > > The vma_mas_szero and vma_store tracepoints are unused since commit
> > > > fbcc3104b843 ("mmap: convert __vma_adjust() to use vma iterator").
> > > > Remove them so they are no longer listed as available tracepoints.
> > > >
> > >
> > > Thanks for doing this.
> > >
> > > Reviewed-by: Liam R. Howlett <Liam.Howlett@xxxxxxxxxx>
>
> LGTM so:
>
> Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>
Thanks,
Caleb
Return-Path: <linux-kernel+bounces-665714-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 7EC8641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:28:11 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 4D1A0177C21
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:28:12 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 3394F28C2AF;
Wed, 28 May 2025 15:28:04 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="nBfiaGUv"
Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010003.outbound.protection.outlook.com [52.101.69.3])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id CFFCB244670;
Wed, 28 May 2025 15:27:59 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.3
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446083; cv=fail; b=Wx8Ev4ayE5NUrEpPwnxBovqmY43o748bWekzHt2GJzhiMcd5Em1JVB1hUs8N6Y7dBoGyBOhY5Lv+Of2+08tdudiz1sAFYAfvra83m6YygQY1n3/8jsPIe9uqWMDPOQ7RHssY70eiLaa4KeSjbiJ1wbXecn+8xD+Lx5/8e0YBvRE=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446083; c=relaxed/simple;
bh=IZfbzp8o0VNvRPnvgazQBCF0BmyViD7esAa3exNJp2M=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=pLsR3wIQOy5R/WlDtE2Xr2A5hoX4WMVCpw1sOMNoHqYgjK6BZSY7iRaebA+MMYekS7YREJXKGsMI7svlnJ58+XGuNmrlcQHAJLITjiObpgRBjZvshAuIbtepPckXf4VZmsollE4iMO5mzZlpHXLypBb9p5Jjx2/NUtmKnZapF6c=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=nBfiaGUv; arc=fail smtp.client-ip=52.101.69.3
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=piKNaAVWA1SYblKQBLxIz97FF7O+lLXaSQXXMmcJglz/VnuQjitxHqNCRiXvZt7VMHamTp51rx7C/TxB/7y0G+mAWGrGGVVnD/OP/Hby+QvGP6DdRaG5pABj0DNGAjDX9Hq0f3HvRV9uenADNX+07MLbTiPqf4qEOlSS51Efl2beGN3n5C1nxqnG9My0t4fISwHI/9rufsEQiKv2ULhjL7Es4DpFLuUccL28qQ8sioCxqY7zbgZKi3J+CGozS17jxuupIT3bYkcrmAHIYXZubP5oiVDoKsa+BAbxrCf03EqS2ap/hS3KudptF9G7oEDMWa/OcU6xnd7amTWM8JTMMA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=Uoj0Eoc/onIkSqwcJQjQf28hxx/VRihgktbhWLq/RgI=;
b=xUFnVgDf9PYTv6vQuJCW+DlH9cPzecUGkdJhfITwm03Q1Ef/V1bhmTRDRcW1uWudvl9Z6RjUrCGZlqzy35bsKQ3Vpc8Wfz+NPupE96WAD+LzLojKvYO34UOCP1Eyg5kWdgYSSWia0ZuAGLow/97b2GJbobX4HEV+AL+rcZ5QaN/63YYPRYYR6JgZ9fHJaiYUXKLxO9qvomIts+gmDW12vO/pG1cY5k3SRhcur9dYNxerrRambQhphxwvV1kyDqqjJDO9bW7BVs9wdct+M0x4jvV3DjC1UDvVKwHeo05W8qk+V05aBTn+iYY4F5f9737VEQULpXIiEUvMebZPlW8uBQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=Uoj0Eoc/onIkSqwcJQjQf28hxx/VRihgktbhWLq/RgI=;
b=nBfiaGUvWxAlcc1k5pfHJzaZ1xyyGvFwjzsFaDWG/DxcAYnFImvuLvNlpUd0CxyjrXkrcZQsa1/ZKJcjLSUAzsBk8i3lCfF1p20SwEasApOA4HTmzDKfs4f7G5udQd6VM1wVkGGigOXYwPB/F4PVuttzPcpTHtd7jzxbLX0yRug55KhLFjJL6Fps5QA10/sIT5Y60VjbqznDYzs8bx4yN2ruDYM/xwC9rUXOV+ldB12wRHeqKZMZD3EIYZvrZWMHTvaVUGkq+1XOo9JbNa+6gMhqRbk8hMykXKL/xFX3miJEKwgiYDLxdH69WrElfPocowKm91NAJ2X2sGfNZdk5pg==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by DU4PR04MB10959.eurprd04.prod.outlook.com (2603:10a6:10:586::8) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.27; Wed, 28 May
2025 15:27:54 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
15:27:53 +0000
Date: Wed, 28 May 2025 11:27:44 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: Rob Herring <robh@xxxxxxxxxx>
Cc: Linus Walleij <linus.walleij@xxxxxxxxxx>,
Bartosz Golaszewski <brgl@xxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>, Shawn Guo <shawnguo@xxxxxxxxxx>,
Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>,
Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>,
Fabio Estevam <festevam@xxxxxxxxx>,
Dong Aisheng <aisheng.dong@xxxxxxx>, Jacky Bai <ping.bai@xxxxxxx>,
NXP S32 Linux Team <s32@xxxxxxx>,
"open list:GPIO SUBSYSTEM" <linux-gpio@xxxxxxxxxxxxxxx>,
"open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" <devicetree@xxxxxxxxxxxxxxx>,
"open list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" <imx@xxxxxxxxxxxxxxx>,
"moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" <linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>,
open list <linux-kernel@xxxxxxxxxxxxxxx>
Subject: Re: [PATCH 1/1] dt-bindings: gpio: Move fsl,mxs-pinctrl.txt into
gpio-mxs.yaml
Message-ID: <aDcrcIB1zBVtxnne@lizhi-Precision-Tower-5810>
References: <20250523203159.570982-1-Frank.Li@xxxxxxx>
<20250527181803.GA877374-robh@xxxxxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250527181803.GA877374-robh@xxxxxxxxxx>
X-ClientProxiedBy: SJ0PR13CA0160.namprd13.prod.outlook.com
(2603:10b6:a03:2c7::15) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|DU4PR04MB10959:EE_
X-MS-Office365-Filtering-Correlation-Id: 9f6c5a78-50c9-417b-b75c-08dd9dfc3691
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|1800799024|366016|376014|7416014|52116014|38350700014;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?15k0xqApvRyTdkhA3CLUZPKqjfeqcD/F1F4nhPmd5pH9xsMPrYox0ljj1qFL?=
=?us-ascii?Q?CJ67IstMtUVIH1kNlo/TFZX6Tmfkto8OqpDBYtIvzD3Z7m1wfsr0I0ZhNSPS?=
=?us-ascii?Q?AOPlAMXceNwwBBreh3Y2eNRHNulSuLeSE7baZXqRxGJL0JTeQgXQHgcyutYc?=
=?us-ascii?Q?8LK1UF58ZLcaypSpdi9PIDXjZoI8u9v22oUYhjMm9XkcPd420lkDtanJZuMd?=
=?us-ascii?Q?v73c35kcoM1Lg9iRXssV2FVf9lfcNdQSw44JlV/LJF2WF/BbUvMvlNKBnpDM?=
=?us-ascii?Q?bo0gvbFAT1n725uOuFxew2ZuMWMFP0Y8ZWq1+SUKczkO1Ovv3sDTtRtQDbiK?=
=?us-ascii?Q?2Tc99GpZNtCKK0qhzfZLl8YLTe8wfMWAJGoABgSzmUayzCk1wuHmFjHCVqxX?=
=?us-ascii?Q?wWrDeekmRZhNmqsfQAzcCr2QqDVKUn6nMkQhVgB4Fj4aoGDY77ftiXGD1Zgf?=
=?us-ascii?Q?KnnUwphqbcqwsJMOmyMzK0fDy6xSv1iCiq3EYViayd8tFrW8qN4MoTcLGeuB?=
=?us-ascii?Q?eevnHzveC/IJbCvW8eAL1vi7Hofkw5iczfYzzAib+g/CqfObRyX4lSHueRZ+?=
=?us-ascii?Q?BwjobkhK6tFQWBrTtb4MIjH3qgGDrqf7A9MeMsYkbUhAlcaMMjaOmogFknm2?=
=?us-ascii?Q?abDn+Vz4CQANWi5jSA+yM5bTn80MxMmpChmzFxKh69bwUbY1tRGsDsNTWtLz?=
=?us-ascii?Q?CgoDuTFVKNAhM4aeEEMZ4mMn67oEU8NV9ArVt8ZNOujeAfDQv+wAmrnrl9dJ?=
=?us-ascii?Q?SJYIwBUCAMJz4GrdLZ2x1VHrTzhFQugkP+GtXDvh8Ur0MPpWr7DF/zd/00Xc?=
=?us-ascii?Q?2XzIGWBUDC68YaZyo6ncd5cKf7LnSZUJUMCiQQWONHYGtFRpir+lhWyRsj/e?=
=?us-ascii?Q?90bP9a7hnirhktH7PtMR57Cf4TBQgXIc6IHHKN1q2UlnUDjast5eDbrFVMGk?=
=?us-ascii?Q?KhhDydcNkwJU6fZnomMX5zuaHD2SH4lBMIcSrWtmsGhF/R/51r9+FBPA7rqw?=
=?us-ascii?Q?PZDGLIQaIBjH95AA9gmE+TkxFKgWRUrWPB1ykhpTXdwQAmRzEq8icDFuZd4c?=
=?us-ascii?Q?ScM9TRNXCRzTCGHpT7LCUqpYMgVDN/O3FRabgm+16R8CysWudfHtRUYtrfK2?=
=?us-ascii?Q?PGOk+Z4GS6wuk7WYGei1vYpBcUkedlX7jRgHZxfG0vFlndd3HOiTQ16K/1gr?=
=?us-ascii?Q?9YwvaI8lA28SleMN9rG99X+xKfmGTIQfA34gd16tIAetmaQRG7xuiZwvbTTF?=
=?us-ascii?Q?HNWl6aOKtm4c1QVpMd83WtYp/5Ca+vwUWnil4KVhialdN7NLnb49Z/Ee/Z03?=
=?us-ascii?Q?4A0DkroA4y7NHQNzuWZNfztXivRyK8UHm0JMufqdPzXWShC6OmFwe1WcUoSP?=
=?us-ascii?Q?X2e5Gi+KzPPARmG8hxFHbRpMoABYZdON3cKX8zjvuYo9EqIK6BA8S8xWDohD?=
=?us-ascii?Q?OHDLI6VTb5svdHDWvYiGdK+k2pY2xLVriMqqeNTm2t4i/2EduBkzDA=3D=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014)(52116014)(38350700014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?7dbsY+SZ0jAxBEZKrA6Wqe/r9bGV0OhBpK1zPISt0H2Bbdx/jOKXCGTf5KUg?=
=?us-ascii?Q?ZvPhWclTOd7bNexsPzc3mrVG8BidSJ0LRwJqgitNZ3JgY/RQtqACQs4Gk5Gt?=
=?us-ascii?Q?bPBXUPLd/+9wNixbLOFfX2qHjXa4ubuq/RSeZh3rTfxugBLpDqveeaCXW7o2?=
=?us-ascii?Q?9SjJND2gN/YEmzh7D+ZSPZ8/xKpvgiheHqAIQjp2uHsdGAffk+wlZZatRVz8?=
=?us-ascii?Q?+/34ZxdoPmwpbJC9i81Iv2c5qd79rrzmpzAGjMkkvVT3uPh0EwfESTxMYYnd?=
=?us-ascii?Q?PbK+T5VTog34J9Os9tdMcfWAxxfi8WXN6VIL6isXQZTIHyplIAiNu5BEivWa?=
=?us-ascii?Q?HJY4Lg7Z+D8Rlhf97sggCrSwUlGvDRVz1IAskdQ91gWdNiHTXFkoIrMBKqqf?=
=?us-ascii?Q?t7T9Ae189F0avmXQYQ7JE55lbhdKklGAkMc0UtjnMsAVo1V7qljr1mUbWgZB?=
=?us-ascii?Q?xsIk2HvizYTELVFs32qgMznctues3bRxRFMeYbw66+IyYRizV34rE+X9qYlN?=
=?us-ascii?Q?g2Oj8zjcQBCrb1LPNB/9fr7prod7ZhwdQVQsM86bVRMfPRcg6iB0hXmLcWVT?=
=?us-ascii?Q?lSyJQYG+eVHg/9oK70+YN/L/HvYrrTHq5yDFadp6VqWNBHg+zeDdeu+lJz82?=
=?us-ascii?Q?csFwYqVX6oqhHij1ni9cA371R/qgT+2DSk6krZzhk0PGyFeZkaOk2/dv4q6p?=
=?us-ascii?Q?l4f6cqxmE+Fv+FD5M7cfVdJnnHq+lPTzadX4qW2bDdcJIUdt+lNte51yWqOO?=
=?us-ascii?Q?hFVICTbdMF7YWu0z8/0B6/A2dcLMuWCb5b9hkYdEZrRcJJ4eyUtvvaBxBBk7?=
=?us-ascii?Q?zHYkzS46nyIgPQcPnmi/OFIqpY9z4E9Fq+f4OCl4heOQMCkQsaA7yh7gPxtc?=
=?us-ascii?Q?C8eYt4d3ydRt4HlohxtD2q0OHM3nGZOM9ht36030GY/OharbNSn3TeV1btyF?=
=?us-ascii?Q?USb1C/2jIMsYtjVGVKH9rFYEOdEzBeLBbFlb8/hmed75tm4esMQCm93dCZNf?=
=?us-ascii?Q?G0e//e4CAN7/2VYMALqZsTONfSiFe+H+Ucd2MF73OixkuNoTIU5GXrIKmeqY?=
=?us-ascii?Q?mluGvSCUXC9Qp7MYYJmx29IZZqmGAE79UAIjNiepDl12ta1BOjahq5VZHjUa?=
=?us-ascii?Q?Ti+0w6niJNu+1tucDIsORiI6wvGG6TTO5MfJIpM2ViqY3AmnG6+yMBoV0n9M?=
=?us-ascii?Q?mJESdwYaDzNSGZbcDN8Z+LvBKv29ul2vOiTrFzLrVEuT/zP74Xg/7oWfHIIi?=
=?us-ascii?Q?uVEcQSEayrDG4bM6Gm13zpylPPYmKndUCC6f/UU8ZP6F2POesFrmoe2zGPGr?=
=?us-ascii?Q?WD4rDz6xBUZ2Shq7SNl0eV6m9VcKRygIVWX1OBODVEn2GQIJE9fnuJ+dL671?=
=?us-ascii?Q?UTr3nGfSl0MzoMAxAoEeh7eI+/2O8lM7HXVimOxTQQ2Zse4CZGWKfoG8SOEp?=
=?us-ascii?Q?PQ1sYqW2LDH/hkKth2x1FSjKi6QyH1Br6M7ug0uPTnDc17dQw1g+olIcggE1?=
=?us-ascii?Q?gtoQsmiSM+bp2eVBJMfWyj8lbaWUvH2m4VGxqYJXwTqrE9rSIOa4PtkWS6RE?=
=?us-ascii?Q?aUPEnIf1jwlAsI1Jo8w=3D?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 9f6c5a78-50c9-417b-b75c-08dd9dfc3691
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:27:53.0904
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: VfL6hp5tUTrQpbfyfQwFKY+w6KIWpGGPdcBLLgFjOurcB2ac1OMwT82ypF/1P6WdWzCyxC+oLXK3SHBCcM1IZQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR04MB10959
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 01:18:03PM -0500, Rob Herring wrote:
> On Fri, May 23, 2025 at 04:31:57PM -0400, Frank Li wrote:
> > Move mxs-pinctrl part into gpio-mxs.yaml and add pinctrl examples to fix
> > below CHECK_DTB warning:
> >
> > arch/arm/boot/dts/nxp/mxs/imx28-xea.dtb: pinctrl@80018000 (fsl,imx28-pinctrl):
> > 'auart0-2pins@0', 'auart0@0', ... 'usb1@1' do not match any of the regexes: 'gpio@[0-9]+$', 'pinctrl-[0-9]+'
> >
> > Signed-off-by: Frank Li <Frank.Li@xxxxxxx>
> > ---
> > .../devicetree/bindings/gpio/gpio-mxs.yaml | 73 +++++++++-
> > .../bindings/pinctrl/fsl,mxs-pinctrl.txt | 127 ------------------
> > 2 files changed, 69 insertions(+), 131 deletions(-)
> > delete mode 100644 Documentation/devicetree/bindings/pinctrl/fsl,mxs-pinctrl.txt
> >
> > diff --git a/Documentation/devicetree/bindings/gpio/gpio-mxs.yaml b/Documentation/devicetree/bindings/gpio/gpio-mxs.yaml
> > index b58e08c8ecd8a..b3cf4682be3fd 100644
> > --- a/Documentation/devicetree/bindings/gpio/gpio-mxs.yaml
> > +++ b/Documentation/devicetree/bindings/gpio/gpio-mxs.yaml
> > @@ -18,9 +18,11 @@ description: |
> >
> > properties:
> > compatible:
> > - enum:
> > - - fsl,imx23-pinctrl
> > - - fsl,imx28-pinctrl
> > + items:
> > + - enum:
> > + - fsl,imx23-pinctrl
> > + - fsl,imx28-pinctrl
> > + - const: simple-bus
>
> I don't think the use of simple-bus is correct here. The addresses are
> not MMIO (there's no size), and I would guess the child nodes are
> dependent on the parent.
This is legency device, which more than 10 years. It use simple-bus
to probe children gpio devices. pinctrl have not use it.
>
> >
> > '#address-cells':
> > const: 1
> > @@ -31,6 +33,61 @@ properties:
> > maxItems: 1
> >
> > patternProperties:
> > + "^(?!gpio).*@[0-9]+$":
>
> Unit-address should be hex? If not, then another reason this is not a
> simple-bus.
Yes, it is wrong to use simple-bus in old driver and dts
drivers/gpio/gpio-mxs.c
It is not worth to fix driver and dts for such old lagency devices. Although
chip is still shipping, we have not board to test it.
>
> > + type: object
> > + properties:
> > + fsl,pinmux-ids:
> > + $ref: /schemas/types.yaml#/definitions/uint32-array
> > + description: |
> > + An integer array. Each integer in the array specify a pin
> > + with given mux function, with bank, pin and mux packed as below.
> > +
> > + [15..12] : bank number
> > + [11..4] : pin number
> > + [3..0] : mux selection
> > +
> > + This integer with mux selection packed is used as an entity by both group
> > + and config nodes to identify a pin. The mux selection in the integer takes
> > + effects only on group node, and will get ignored by driver with config node,
> > + since config node is only meant to set up pin configurations.
> > +
> > + Valid values for these integers are listed below.
> > +
> > + reg:
> > + maxItems: 1
>
> Would be good to say what 'reg' represents here.
It is just a index, which are not use by drivers. But need it to dts build
issue.
Frank
>
> > +
> > + fsl,drive-strength:
> > + $ref: /schemas/types.yaml#/definitions/uint32
> > + enum: [0, 1, 2, 3]
> > + description: |
> > + 0: MXS_DRIVE_4mA
> > + 1: MXS_DRIVE_8mA
> > + 2: MXS_DRIVE_12mA
> > + 3: MXS_DRIVE_16mA
> > +
> > + fsl,voltage:
> > + $ref: /schemas/types.yaml#/definitions/uint32
> > + enum: [0, 1]
> > + description: |
> > + 0: MXS_VOLTAGE_LOW - 1.8 V
> > + 1: MXS_VOLTAGE_HIGH - 3.3 V
> > +
> > + fsl,pull-up:
> > + $ref: /schemas/types.yaml#/definitions/uint32
> > + enum: [0, 1]
> > + description: |
> > + 0: MXS_PULL_DISABLE - Disable the internal pull-up
> > + 1: MXS_PULL_ENABLE - Enable the internal pull-up
> > +
> > + Note that when enabling the pull-up, the internal pad keeper gets disabled.
> > + Also, some pins doesn't have a pull up, in that case, setting the fsl,pull-up
> > + will only disable the internal pad keeper.
> > +
> > + required:
> > + - fsl,pinmux-ids
> > +
> > + additionalProperties: false
> > +
> > "gpio@[0-9]+$":
> > type: object
> > properties:
> > @@ -80,7 +137,7 @@ examples:
> > pinctrl@80018000 {
> > #address-cells = <1>;
> > #size-cells = <0>;
> > - compatible = "fsl,imx28-pinctrl";
> > + compatible = "fsl,imx28-pinctrl", "simple-bus";
> > reg = <0x80018000 0x2000>;
> >
> > gpio@0 {
> > @@ -132,4 +189,12 @@ examples:
> > interrupt-controller;
> > #interrupt-cells = <2>;
> > };
> > +
> > + lcdif-apx4@5 {
> > + reg = <5>;
> > + fsl,pinmux-ids = <0x1181 0x1191>;
> > + fsl,drive-strength = <0>;
> > + fsl,voltage = <0>;
> > + fsl,pull-up = <0>;
> > + };
> > };
Return-Path: <linux-kernel+bounces-665715-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 00A0241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:29:42 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 259FA1779BD
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:29:44 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id A9FD728C2BD;
Wed, 28 May 2025 15:29:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="kuwh3OKl"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id E38442882BE;
Wed, 28 May 2025 15:29:31 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446172; cv=none; b=cr8mgjxSJnfXMwimkPrpEpxOtTh6D8/fsV6+5SL5dlnjCIuzvv/4EpHvue5umDn1YRZGEV49eNVhOPqP3MuWlymcNdrEVifMNM+aWOJ2cVrT0VwrDdcu1Vl4tAqFAuteO1P1Vg+nVq2Ide8WFatJ1Lidq7bfB9Idd08+1svEje8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446172; c=relaxed/simple;
bh=VKnzuxZGbyr5nWMvWhI8JQXl3fxnPGXhp3oyzAehjpk=;
h=Mime-Version:Content-Type:Date:Message-Id:Subject:From:To:Cc:
References:In-Reply-To; b=t9DwHnmVkZbAib2xCCXwXCw2Y3FNdx8BleTHtVeRneNfiUV4mhLPV0dL9i8YdnH8Sv6baCR0syzJO5XLCm3+39FRUDYsnWpmqB1E41giCP+mEBADoL5Pr6W0jDGCUncknRtYUNfh+Mj2hYLLm2bxZaX1VoGc4y3rHfQExJp5/KY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kuwh3OKl; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3BF82C4CEE3;
Wed, 28 May 2025 15:29:28 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748446171;
bh=VKnzuxZGbyr5nWMvWhI8JQXl3fxnPGXhp3oyzAehjpk=;
h=Date:Subject:From:To:Cc:References:In-Reply-To:From;
b=kuwh3OKlGofxP5IsZbgkRlvyv8McwOCKSMORSXgDIhOPKeX718PbZC1/hVRb4NcmB
f/1dm9Bc1XFqL4k/G3m3kmXDq34rePmxzJ5TiEZIN8vgX7M+3Qal+XtozXVA4n/IO1
4Y7C1apTmM7Px5CZXTEwlT8vTmqH0UrWvAoY7J+6r2qP+6bCKco3tTReAjB5N54Zbo
ph5xMd6rSoTtu//s8F05qUhGLLxdOelGMTwZutjvb7c3HDJDgDqQyXeH4z996ToBEB
rHxUcxNbg4WDC0BqNQGMuR4HDlcXbTm6FAUhlSy5PIUK0c0sG4ZJAORslHpD7/Mr3l
Wkb9MzSJn1ZHw==
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
Mime-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=UTF-8
Date: Wed, 28 May 2025 17:29:26 +0200
Message-Id: <DA7WFS13MU9F.349OE3IGIDMBY@xxxxxxxxxx>
Subject: Re: [PATCH 1/2] rust: file: mark `LocalFile` as `repr(transparent)`
From: "Benno Lossin" <lossin@xxxxxxxxxx>
To: "Pekka Ristola" <pekkarr@xxxxxxxxxxxxxx>, "Alexander Viro"
<viro@xxxxxxxxxxxxxxxxxx>, "Christian Brauner" <brauner@xxxxxxxxxx>,
"Miguel Ojeda" <ojeda@xxxxxxxxxx>, "Alex Gaynor" <alex.gaynor@xxxxxxxxx>
Cc: "Jan Kara" <jack@xxxxxxx>, "Boqun Feng" <boqun.feng@xxxxxxxxx>, "Gary
Guo" <gary@xxxxxxxxxxx>, =?utf-8?q?Bj=C3=B6rn_Roy_Baron?=
<bjorn3_gh@xxxxxxxxxxxxxx>, "Andreas Hindborg" <a.hindborg@xxxxxxxxxx>,
"Alice Ryhl" <aliceryhl@xxxxxxxxxx>, "Trevor Gross" <tmgross@xxxxxxxxx>,
"Danilo Krummrich" <dakr@xxxxxxxxxx>, <linux-fsdevel@xxxxxxxxxxxxxxx>,
<rust-for-linux@xxxxxxxxxxxxxxx>, <linux-kernel@xxxxxxxxxxxxxxx>
X-Mailer: aerc 0.20.1
References: <20250527204636.12573-1-pekkarr@xxxxxxxxxxxxxx>
In-Reply-To: <20250527204636.12573-1-pekkarr@xxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue May 27, 2025 at 10:48 PM CEST, Pekka Ristola wrote:
> Unsafe code in `LocalFile`'s methods assumes that the type has the same
> layout as the inner `bindings::file`. This is not guaranteed by the defau=
lt
> struct representation in Rust, but requires specifying the `transparent`
> representation.
>
> The `File` struct (which also wraps `bindings::file`) is already marked a=
s
> `repr(transparent)`, so this change makes their layouts equivalent.
>
> Fixes: 851849824bb5 ("rust: file: add Rust abstraction for `struct file`"=
)
> Closes: https://github.com/Rust-for-Linux/linux/issues/1165
> Signed-off-by: Pekka Ristola <pekkarr@xxxxxxxxxxxxxx>
Reviewed-by: Benno Lossin <lossin@xxxxxxxxxx>
---
Cheers,
Benno
Return-Path: <linux-kernel+bounces-665716-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 4725C41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:30:29 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id DC7DB7A6FEE
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:29:08 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id BD53528C2C2;
Wed, 28 May 2025 15:30:14 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="nTFJ0OJx"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 04CB6C2D1;
Wed, 28 May 2025 15:30:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446214; cv=none; b=fW2X/hb1lY8v0f6t5NTjW2J0oAsJ8DbjKBMzaV8t/Z+BuzReEusbMpY4npsvjIWmQG4ithoIeU03Q/Q+tdqD8yUBLr/4Js5wMJcH5ti4NxAhHIGIkjKNjZldmwvR6RmFA6C1bFwTZ9WXTBjudYvGXqDhZpxnBIU6NLp7Uvd9+98=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446214; c=relaxed/simple;
bh=RCQ8xW6PYSFY6YML5KXLcLAH/Vax2zlFYfHD+delJug=;
h=Mime-Version:Content-Type:Date:Message-Id:Cc:Subject:From:To:
References:In-Reply-To; b=pZnFbsQ4n/zJGxeuaK9E6ICASsOnaNgLQsOiA7+y09ZQoWgrb6N0Tim0T92Gn9D1cIp3IyxPASN9Q8KDY3bru9zhLX5KHNW03xkvSqpr2yGgvhCX4Lgj77Tg8QqTtq+fEA+h/D1sXvLVbzl05OZFsJPqzVNJGdY8kxME3e/j4AY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nTFJ0OJx; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 51587C4CEE3;
Wed, 28 May 2025 15:30:10 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748446213;
bh=RCQ8xW6PYSFY6YML5KXLcLAH/Vax2zlFYfHD+delJug=;
h=Date:Cc:Subject:From:To:References:In-Reply-To:From;
b=nTFJ0OJxwfsI5WBVIuHQg/Z2p5aO+BY9hB3KNviu2GoYqv8lz4ipExjKQKFn5LUR8
sN9UBtcAxAS2rElj0V9UimfySL9oaGeyaGVlZLJC+LN0oVPyygIHtUMNFDwL170iO5
8LQaduULGzww27EX0n4kYNlpnmK9tvI7axyaSI1YurmC0JFBAeyWkowuhetHm7q+BY
5P8AX/X3GsAH5LstDzfns6j9li8M4znHITEnf8yF+FtcbpUuh1W64Wut+fN2b63Csz
IveDKAMmyZi7rtRww05/8cDt0Sz9A9HOLAHjjvd+8qJKNSxfqIwuNR0s896RdnSXne
rd4HTvb440R3g==
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
Mime-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=UTF-8
Date: Wed, 28 May 2025 17:30:08 +0200
Message-Id: <DA7WGBL3SIYQ.KSQX9KU9JH79@xxxxxxxxxx>
Cc: "Jan Kara" <jack@xxxxxxx>, "Boqun Feng" <boqun.feng@xxxxxxxxx>, "Gary
Guo" <gary@xxxxxxxxxxx>, =?utf-8?q?Bj=C3=B6rn_Roy_Baron?=
<bjorn3_gh@xxxxxxxxxxxxxx>, "Andreas Hindborg" <a.hindborg@xxxxxxxxxx>,
"Alice Ryhl" <aliceryhl@xxxxxxxxxx>, "Trevor Gross" <tmgross@xxxxxxxxx>,
"Danilo Krummrich" <dakr@xxxxxxxxxx>, <linux-fsdevel@xxxxxxxxxxxxxxx>,
<rust-for-linux@xxxxxxxxxxxxxxx>, <linux-kernel@xxxxxxxxxxxxxxx>
Subject: Re: [PATCH 2/2] rust: file: improve safety comments
From: "Benno Lossin" <lossin@xxxxxxxxxx>
To: "Pekka Ristola" <pekkarr@xxxxxxxxxxxxxx>, "Alexander Viro"
<viro@xxxxxxxxxxxxxxxxxx>, "Christian Brauner" <brauner@xxxxxxxxxx>,
"Miguel Ojeda" <ojeda@xxxxxxxxxx>, "Alex Gaynor" <alex.gaynor@xxxxxxxxx>
X-Mailer: aerc 0.20.1
References: <20250527204636.12573-1-pekkarr@xxxxxxxxxxxxxx>
<20250527204636.12573-2-pekkarr@xxxxxxxxxxxxxx>
In-Reply-To: <20250527204636.12573-2-pekkarr@xxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue May 27, 2025 at 10:48 PM CEST, Pekka Ristola wrote:
> Some of the safety comments in `LocalFile`'s methods incorrectly refer to
> the `File` type instead of `LocalFile`, so fix them to use the correct
> type.
>
> Also add missing Markdown code spans around lifetimes in the safety
> comments, i.e. change 'a to `'a`.
>
> Link: https://github.com/Rust-for-Linux/linux/issues/1165
> Signed-off-by: Pekka Ristola <pekkarr@xxxxxxxxxxxxxx>
Reviewed-by: Benno Lossin <lossin@xxxxxxxxxx>
---
Cheers,
Benno
> ---
> rust/kernel/fs/file.rs | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
Return-Path: <linux-kernel+bounces-665717-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D4A0D41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:32:23 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 70F211BC4D56
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:32:36 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 06E0A28850B;
Wed, 28 May 2025 15:32:16 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="ZsGn4nAN"
Received: from mail-oo1-f54.google.com (mail-oo1-f54.google.com [209.85.161.54])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 99C60B67F
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:32:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.54
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446335; cv=none; b=j3wPHMTXEq+asVLL+9VirLkUfXOOHDToiBvpNhVPA3WfCjI5ixSX1vOrnAV9tU5clLnaOCzm0njunaYmcoUyZV1axrqObHkGf2/XJE7IfDnCMqAZDQei0MwFt7ljC8yfyHhh4Obcd9Pp+NVOX3PoEFGp+qm11XtDAjcXTZJ5lF4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446335; c=relaxed/simple;
bh=bVZWbWbdtxNARBlRvaf7tW5wgarLs2PVbXesCu5ZPMg=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=c9GpBSv5DjFFC+fdMOVQnXHODmemYpurzxADJMHHFj971saHQhteO6Q2pK2GRZ9+l4zFev+d4MUdN01yJ3z4+PhhO/ueCW1qwzo7cxHZp4zKu1kzCmvNmN4C8umLrLfxqtQL9HCl5buV0obItdTTfvLzdxQaCfQEvQH9SuD/meU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=ZsGn4nAN; arc=none smtp.client-ip=209.85.161.54
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org
Received: by mail-oo1-f54.google.com with SMTP id 006d021491bc7-6021e3daeabso1970909eaf.3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:32:13 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=linaro.org; s=google; t=1748446332; x=1749051132; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=Cb+ihaPPmQVbulXLOR62KX//ccgvrqS85TAFiwCoIuQ=;
b=ZsGn4nANVICjarlN71LNuk5Dzp7nBLEEJWbNeh06mQIJrWPZSUpw0/9ncMrx4kuVoI
TKiEv2sUafOtS/B7l/OJUrN9989c/j00s3xVC2g52fwFm4i8e94KrQVWjIxXZpAOBsr7
MnEN37C54L/CmBGWEkzDXci0xibeogcCmmavyEq5zlsFJyaTP8pCCamiz+YptX0/1vrs
KC2MHRGokiW5ABiy9rcGmDnB6+jRfuuzUeWR9PYXagOkvp6vJD7zYFOYFL+emfx3KBMg
h8jbCKf6haQgXJgu12fT3oj4p7RdRTQlM7X4ZOygH6v40kpn2bxnkk8GFFR9SyJXB+h6
emfg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748446332; x=1749051132;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=Cb+ihaPPmQVbulXLOR62KX//ccgvrqS85TAFiwCoIuQ=;
b=Dl81Z1b4jznpb51soD2MjxbhcWjeS6G8/iBmory5N7qrh64/DjCQJUZv3nD9UQWfrE
2dl6Ux6VbyM6uEddLy1zHuYIZbnr7BY9NAO3yaHLUv9MwnsTLDYE9WA6k8hgGQmJh7o3
/cs/bY1PRoePlsYlGntm/Ofq7dW5lnDXIPY0E/Skfptc2TRZNeKVBk7o2hZhgKQQBS5q
Q3teJSv0EclDRKWV+UqOn9B0spLodVyaMwhSMi+GuJfjfldy0ChaEF05E7mSWC+eSd8K
ManypL8dZ2VU05KEWiHjF+9VpxT8+H2es1S/L3gMlTKQwiiBsR0dhGnJ/rOpiGUyaY9T
BISw==
X-Forwarded-Encrypted: i=1; AJvYcCWYLU2jCm8R3foh5UUGkMcgG1hhP6QMcMIz19dnxR9OoItN7CpOoe1Ja+AfhfcG51DF4q5jC7EngE1Gm9A=@vger.kernel.org
X-Gm-Message-State: AOJu0Yxfd0OgpHU/9dgT3GQQSractPO33edWksSpcJRQpRlRoGCIi+3v
tdPJ500FAG7NG7qXqNbAUPY7PEhoc97ZYXhrsVBpUhiIvcsYckRI69fwlUEh/FE5ym74WoHViwZ
5xXflllWXDKGosNvXh41odeYTO0F0tKa/uc7DNDeSJA==
X-Gm-Gg: ASbGncvKuxtOugh+10MWdzi+irb9LnKqaDrWZmr1PxExeHruoAfCMg3/FUTQmLJ7z+f
dWlZtPnaUfvCkCrMbydODK/4oBhAKV6wN9kalfW0KWAq6GU8kHJhxu6lncYJ9IT2O6F8RtAr2Dq
BQBIauzajyoZuh7E6ORFk4o+dXin9mpuEPo0ffs+Lfq/a1
X-Google-Smtp-Source: AGHT+IHos1eUXPNGq8QWNr3OlSfg08FeZc8yyAKgwIPQGRrtKDPbJcRtS5J+HBCvWMuhSahRXfI9s7LR2jgTHuEkGDU=
X-Received: by 2002:a4a:e90d:0:b0:60b:ca08:a73c with SMTP id
006d021491bc7-60bca08a9f6mr4885192eaf.6.1748446331714; Wed, 28 May 2025
08:32:11 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250528-ffa_notif_fix-v1-0-5ed7bc7f8437@xxxxxxx> <20250528-ffa_notif_fix-v1-1-5ed7bc7f8437@xxxxxxx>
In-Reply-To: <20250528-ffa_notif_fix-v1-1-5ed7bc7f8437@xxxxxxx>
From: Jens Wiklander <jens.wiklander@xxxxxxxxxx>
Date: Wed, 28 May 2025 17:31:59 +0200
X-Gm-Features: AX0GCFthIY9ATOhYlJJJYtmB5ln8kzCZVSAbqSOsSj3WleMn715mhuNyhb1d304
Message-ID: <CAHUa44HPpS0QVwtSGhOJDK-t+0v26V6kdXwERcNM1fbkBxK--w@xxxxxxxxxxxxxx>
Subject: Re: [PATCH 1/3] firmware: arm_ffa: Fix memory leak by freeing
notifier callback node
To: Sudeep Holla <sudeep.holla@xxxxxxx>
Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
=?UTF-8?B?SsOpcsO0bWUgRm9yaXNzaWVy?= <jerome.forissier@xxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 10:50=E2=80=AFAM Sudeep Holla <sudeep.holla@xxxxxxx=
> wrote:
>
> Commit e0573444edbf ("firmware: arm_ffa: Add interfaces to request
> notification callbacks") adds support for notifier callbacks by allocatin=
g
> and inserting a callback node into a hashtable during registration of
> notifiers. However, during unregistration, the code only removes the
> node from the hashtable without freeing the associated memory, resulting
> in a memory leak.
>
> Resolve the memory leak issue by ensuring the allocated notifier callback
> node is properly freed after it is removed from the hashtable entry.
>
> Fixes: e0573444edbf ("firmware: arm_ffa: Add interfaces to request notifi=
cation callbacks")
> Signed-off-by: Sudeep Holla <sudeep.holla@xxxxxxx>
> ---
> drivers/firmware/arm_ffa/driver.c | 1 +
> 1 file changed, 1 insertion(+)
Reviewed-by: Jens Wiklander <jens.wiklander@xxxxxxxxxx>
Cheers,
Jens
>
> diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa=
/driver.c
> index fe55613a8ea993378474671d3c5756309da34fbc..6f75cdf29720993b1cd95eb7d=
3a36d01b0fdd1de 100644
> --- a/drivers/firmware/arm_ffa/driver.c
> +++ b/drivers/firmware/arm_ffa/driver.c
> @@ -1284,6 +1284,7 @@ update_notifier_cb(struct ffa_device *dev, int noti=
fy_id, void *cb,
> hash_add(drv_info->notifier_hash, &cb_info->hnode, notify=
_id);
> } else {
> hash_del(&cb_info->hnode);
> + kfree(cb_info);
> }
>
> return 0;
>
> --
> 2.34.1
>
Return-Path: <linux-kernel+bounces-665718-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id A082B41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:32:30 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 20E2C3B08FB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:32:09 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 0403628C2C5;
Wed, 28 May 2025 15:32:17 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="UBIWoeq5"
Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013009.outbound.protection.outlook.com [40.107.162.9])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3885C20E011;
Wed, 28 May 2025 15:32:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.9
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446336; cv=fail; b=hzbeGbPex6VF1Lxdhufbw0lcMU00Pgykt4Is7C2xHUB7POXXbrmgXAJ+AWT5Jte68O6BjsowGL4GALuZutif5e5vUMg0Vdu9bP73Dcja2U3hxKGJFq9McXZIUccklxocGzH68u0Y5ti/545wqoOaghC7AuSklmohcDtyKt+lwtg=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446336; c=relaxed/simple;
bh=mgOaB/pDdyaVj1Gqsfk1pc0YlWkrptUP3P8Ea9u8zs8=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=eN6mGHLxj/tCRjO4VXSfBswLm2jyfkk3iaanv0WampHeGd4JQFbokJdtdzZIy7aAG5PrzmDDJsHg6WnTmX899LBr0nDnrtPN75fIaGrhLF45yPnCOWyP30GN7iWY/IBNPimP75m99J6245ICIiGxf1omDbWju0bvIPxXRkQUMac=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=UBIWoeq5; arc=fail smtp.client-ip=40.107.162.9
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=uqRR8lJNzJ4HP6g1eFNXE1AfbtQYgSZ/HBoFdjlTPKXhZ9Y9i6qxqeL/ubczOe8Qjbh9X1I4UiRak6C46Zd4T47J5JmUnIeJ1Z6H2K5nIQxjFDgwpsv0Wd7FyywzSnmoxKnMLFhXSSx0J+pywfBRHTQX8pqNp6vuo0QjtEB1R2r/FWX1qb0DgbQOzj5j1/4X51aVoXUikA2O9ZlhjGgPN3o/eVLUEx3c9iUp96i0twxjngSKq1/pRf+wkmrNfpvpgT/dXxOmL1wiZ08O5srnJEou/6GtAXxquXNlpYnLrsvlPC30x4VJP1sR7F6qyYx3yDwhOD+t40611/dbOn3H0Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=7CUYOjT4NaTAqq3UlC9Q4VuBl9A+rqQAbhEWvFEYPxM=;
b=yp/1vSUJu0E0CeQ1MnC0uaYSynr7umG7I0tTDbl2l79g5NwQn72TK6n7AffV+XPAN3hxtxI29Rn/aOZ1AEZlg5PWtXZoxWeNwnEz9CLVAxKg523IwdeRY/KbGy7LpFsOQjvtbPqt3N1faFmd1TYdRVxqxh8x0WN8gT1KHZ0oxgb9DUkaW9UARO38ydEeXryEjrfpT5ZxgQ8cRu9asjjAd75m5L6rppCrQ/X0R5TzsLJaUFcOhihCmj+e8vHOb8axSpgkxGJkOpVoC6HUC9m3Ft8WD+AYi+NK6C46EfZHb1UTutJ3MpJIZukBH3jEPoWlvUkTmBhzaWLz24g3tsT72g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=7CUYOjT4NaTAqq3UlC9Q4VuBl9A+rqQAbhEWvFEYPxM=;
b=UBIWoeq5HLwE6oBaTn/nf0Aae3jMD/sIJ8cGMOn7CExUBkasA5gUbMpgOL00w3YBgj3DFk4JY0IafGYAcl6YqpxGbEkZE/IPtQ1XNJrOOFhPXMXvn+fzzT09Q7KejODNhDgL9669zDzV71bjvQ7w4AZRcSshlpzMIi3lGPdI1oSDR7DSHdYZyUexi+y14kH0G+cyow77N9Z/02jwePQNZVt4dFtwZi15Va13Ni2a9xZ6Q0UFxoHmvyvnhVRe5qqQGFOSGBAovkUIa2Q4ZAe+XuN3q4bJI8BgpnOwkWc+9ZynYxvwD5UUJTwc3dtLM8eGSRb17pykdYjk6ho6J6JaMQ==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by DU4PR04MB10959.eurprd04.prod.outlook.com (2603:10a6:10:586::8) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.27; Wed, 28 May
2025 15:32:11 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
15:32:11 +0000
Date: Wed, 28 May 2025 11:32:02 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: Pratyush Yadav <pratyush@xxxxxxxxxx>
Cc: Tudor Ambarus <tudor.ambarus@xxxxxxxxxx>,
Michael Walle <mwalle@xxxxxxxxxx>,
Miquel Raynal <miquel.raynal@xxxxxxxxxxx>,
Richard Weinberger <richard@xxxxxx>,
Vignesh Raghavendra <vigneshr@xxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
"open list:SPI NOR SUBSYSTEM" <linux-mtd@xxxxxxxxxxxxxxxxxxx>,
"open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" <devicetree@xxxxxxxxxxxxxxx>,
open list <linux-kernel@xxxxxxxxxxxxxxx>, imx@xxxxxxxxxxxxxxx
Subject: Re: [PATCH 1/1] dt-bindings: mtd: jedec,spi-nor: Add atmel,at26*
compatible string
Message-ID: <aDcscr4pF5vC4kNq@lizhi-Precision-Tower-5810>
References: <20250523155258.546003-1-Frank.Li@xxxxxxx>
<mafs0r00arpzx.fsf@xxxxxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <mafs0r00arpzx.fsf@xxxxxxxxxx>
X-ClientProxiedBy: SJ0PR03CA0284.namprd03.prod.outlook.com
(2603:10b6:a03:39e::19) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|DU4PR04MB10959:EE_
X-MS-Office365-Filtering-Correlation-Id: fa52c1d9-0552-41eb-2617-08dd9dfcd09b
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|1800799024|366016|376014|7416014|52116014|38350700014;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?VQKrSQdSzGg73RxPVC6DIysI7ah6m7R3d1X3+LLBFruRPDnp1mCQARfiNh3z?=
=?us-ascii?Q?QGYr9K5wAx9goF/yHL7T712fj+JnYxgc9xwi1JuO+JCIqcuhXsHXaz7sCuFU?=
=?us-ascii?Q?yr2bDwudU06vIM0mTu9HOyl87SzN4mY1ThdXAGfZZUsK1YCTcliN8MzlGwO4?=
=?us-ascii?Q?D5e5B8pGfTWD0oYdfrqIea7wMLKC7LDua1qwUq+Obrdv5mZkR7z6+ymnC4B7?=
=?us-ascii?Q?WuBGvyWAdmo+QoihASthcsASaiuddnQpKjS9HGFtwkS/ZYEnIaEsUutqfDxN?=
=?us-ascii?Q?10Q4/aeqOYIbEB/U0Eg893tZRkCOMj+8qYcjahAvFpaJOzQ42zGd8r8lJEAf?=
=?us-ascii?Q?cBQSGCc0qNe6QKbQUENSVDhnmw4JTFyGZIQZPHeSO9NmPX1JmXdOtNCH/d+P?=
=?us-ascii?Q?zpT9C4ScduWKTzyiLHbvBX47LShbkT3anICvd5VLF13XtHOAs/6bfqtfWrSN?=
=?us-ascii?Q?wFdtNFmbieo8dv9zaYFSxKAh5PL/dMnIJ0qxfiAG8O2MI1uyvPBIcwGSmuHr?=
=?us-ascii?Q?4I/PgD17XpcapzOdNMBxLt09Vu72NOfJHd/A3lVraPg3UlOZtlwQcUXfe3KW?=
=?us-ascii?Q?dgAYlYbKYnXTUs2QECTNsFmrdxCEJERCIzKs0PzzDNuBOAv40pCGc378klXd?=
=?us-ascii?Q?oMaIOxYpCRIbVMal4yFFglbuG4JAkqfaMa7rYskvWBZqyhnSntygdsEZ9/uC?=
=?us-ascii?Q?KnQtq/Bhd3cWLvgDiAFSpqtJbDpqpBgTTv6aRyZyobzAZ7Vebrg11Q5Akf5O?=
=?us-ascii?Q?+vPlgm6mYjo2dhXu4Y5pGCq8di02sAM/oC1K/O+yo2gNGUGtdAPIjj5cn/yU?=
=?us-ascii?Q?//iajp7ij7hRyIP2JHlvLWv7vvmE1VmVCuWqMtMQPegAxEawqOXxAB0B1AWN?=
=?us-ascii?Q?EDMfyntaXCLsAz1fMskKsiewrRV+S6ZXqn6cb1otc2/3geP+sW8HQRINiPrK?=
=?us-ascii?Q?86EWWrSXnT4HhRbnLyltSzMOuTtoPqSmB8+YbG7gjOhOsdwj5oXKjiTCxh/N?=
=?us-ascii?Q?rH/euLJVwKTaeSBNA3qR0OsIle1fyuP/j2S0bOples9JUesFBV3fr1LfWa0E?=
=?us-ascii?Q?pT1LYZPRk5I7n6uEPQN3tReVUfqX/Yl5gjK2H6xztKZQWdrTvB8nOEf3vnzX?=
=?us-ascii?Q?TrI33RNvQ+uNS1yOPRC328SV28V50DA6vy4FhKPmItgNDS0J0X+in2TxnOtn?=
=?us-ascii?Q?wp9uPeD4c66awZqcnXGTHgvuBWDSXTLCAk1otxBJkEDlkQ5XIcIZYzuZuBzo?=
=?us-ascii?Q?Y6Y/c0C0NwGy9kHlHCjspdzAq21NZaxJkh+PoetKo0uUVreQJ4UbQJM3EzH0?=
=?us-ascii?Q?oykQCidAfRQlQdunEvrVyMQIKKdoNpS5qu1Lfeakc7BhJv2Wys0gtsI9iCzt?=
=?us-ascii?Q?bdIAjgZWdJ1/j4F2tSgREuTkCUu9gD2n0a0SD8ICtO3CH0Aj+FvAZFb0IMfd?=
=?us-ascii?Q?OaU25ywrxAJdEvKBKSN7ZNfbd+z8SuH/KmG3DXqFkmqTdpUCNsdd/A=3D=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014)(52116014)(38350700014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?GzxVGIG9KxmdfncBH0CLSMTiKxSdi3sXDMGqD8kXD+w97vOeTx0P+ZDVsW/Q?=
=?us-ascii?Q?AjvFkwBcfGDwMj2Q3xYyPOvq0K+eMrqDDmh48dVS0S7zjGvuV1BIinKV9OHv?=
=?us-ascii?Q?IRqYOE6bv0uv6dHZ2YF2D8aQiNEzfy1iINl3lgxxG7R/ERjPkjBzcDrmEDe3?=
=?us-ascii?Q?05lG883fnM0Tb667WWkK1/EaJpO8YdMQAcEnD0MFk+keJ6u/tzzlsSsWGSku?=
=?us-ascii?Q?bXgUw5ycrdUxYPUXb9JLvRMQangETXHkOV7iER3KvpOZJnkI2Kxoi4yLlTNk?=
=?us-ascii?Q?51UaSH1sE02s+YefVPpRHi1cVtm+CxyExjJC+GQwp6TdNzfBUzg+leKR5TvD?=
=?us-ascii?Q?sV2hNSntz8U636jS4A+J3oyGewhAUCPhXru5cEd4jaNAoN1SNboDYskKvFkg?=
=?us-ascii?Q?Z3wNNMOmb625IVkZizMI0O6beM9JHhP+qrvMCSYXj5ZDwKbdCREo5MUPib50?=
=?us-ascii?Q?uTw5nzQR4okopxLXwy84c/0Oh4pDQZ1xYXX8ZDXUlQ7Ku3BAjZvJrKdxgZPJ?=
=?us-ascii?Q?HfxwmwjqXTTa/gAfqbUNRUYzqeVwqW3Qi1p3rQwTi1rdPXCxoqoxTYgNn8HR?=
=?us-ascii?Q?xk7ceMB79PI/iHTrBQ0UqxtZ9XV2oBvTLJLI2ctoibxA4s5j99so8BnUlE4i?=
=?us-ascii?Q?MQxePqibKE5hBCteph89VAoTi4d7UShR9tDYY5VXewaducQiLEGjv7PbF2hm?=
=?us-ascii?Q?v/aPrOaruVJL+AsIRhANedTFOAVuvwCv/eKsUmtTrrHLOQp8XJDFPmhR+bvU?=
=?us-ascii?Q?ncOxAEyL8os0ryvoyrtDAZrDAjJGRBCnx6TVABO2+UebUqtvlUw9EPQbxw2Z?=
=?us-ascii?Q?ehRwsk0N+mTVw0rpUSz+qsrf3LVgQy22pxvnmI1AIEVhbEVVmh20jPpvxuFa?=
=?us-ascii?Q?OkgB3enVtxOR5hlBg6dtefC6b/oHfDXVDxkN2en8N8/064UMRtcskoevQSwV?=
=?us-ascii?Q?0RcymwfqFcKalhAmfm+bkR7CzmMlT4SgrPhXSo/GUbVWKLR0fO173VAnlBfu?=
=?us-ascii?Q?2pxOEdkvloZFzE9eJ/xqRGWr63j7kyvc7IcbUjBzVOUt4RwxZWxDmmnVRuQ6?=
=?us-ascii?Q?QawiJZt96MOee3MslvjmdReY0+a2LgzHs1I/umMRze+ex1fESegY6ZsDQBPE?=
=?us-ascii?Q?PXxzecBeOMpksVFMr2tx1719MS/7zCE/JVTj5hR1lzc3/+4ePnqr2rA9K/8M?=
=?us-ascii?Q?0RPOM+F7tNwye6AYT3f9rPcijtcMuoKNPYBYPIIvYENcoaNus39OUUv6TDwp?=
=?us-ascii?Q?UfGwjJSKbPTb1Yb3tLJ09RB5Ze1i7XanSMQHbp9fm7KCOMbJGJU9o06tMDWG?=
=?us-ascii?Q?ybzxrmbapzK1s/V//0yEc69agX8cHYpBGRmUhSLESn49t/+K/jq97kH6Wrik?=
=?us-ascii?Q?JEeiiLzUr3970CVZpTu8U+VVFXl5GfoA0WyS7bDP8P92G6oIqe937SqiCbeJ?=
=?us-ascii?Q?/yzL+1w6a+G7vpLrCLyNv7GgPv84L2CVC+gM3xrAIauUipARLiTdenfrIIwG?=
=?us-ascii?Q?kGvuAxbamCBWu8TSrI/xjkbnm97QLjUFqMDNldE8BDXZivmdW2B+g2ccN6j0?=
=?us-ascii?Q?gZ0jKxk8el4c4RIuwjBbNOFQUHArE8q8tKGc+pSX?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: fa52c1d9-0552-41eb-2617-08dd9dfcd09b
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:32:11.5278
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: yxjMex/Pxi5VndL1RkGgWiZFhbenXAIa2Ow2c8/6CRTaXitaHFEYUgJzvp+qd+dEy5pGd7RfdYTCIzW9e9Lvpg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR04MB10959
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 06:13:22PM +0200, Pratyush Yadav wrote:
> On Fri, May 23 2025, Frank Li wrote:
>
> > Add atmel,at26* compatible string to fix below CHECK_DTB warning:
> >
> > arch/arm/boot/dts/nxp/vf/vf610-twr.dtb: /soc/bus@40000000/spi@4002c000/at26df081a@0:
> > failed to match any schema with compatible: ['atmel,at26df081a']
>
> Is there any problem with setting the compatible to "jedec,spi-nor" in
> the DTS instead? If not, it would better to do that instead.
I suppose it should work. But it is quite old legancy boards. I have not
board to test it. And dt also prefer add chip specific compatible string
before common failback compatible string in case need workaround some chip
issues.
Frank
>
> [...]
>
> --
> Regards,
> Pratyush Yadav
Return-Path: <linux-kernel+bounces-665719-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1791441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:34:08 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 909281BC5005
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:34:20 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 6318328BAAB;
Wed, 28 May 2025 15:33:59 +0000 (UTC)
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id E90062750E8;
Wed, 28 May 2025 15:33:58 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446439; cv=none; b=FPNkY1M7dBhMDx2sZ+JKU4WZwKfVOpGvRsH0y9VxsZEPS++D+0IrwJFMR1UseeByMWfiRnTqa9IlmTwa4WLnkRg+fjskjgnddsd5Erya6l81Sd00k7lCqTqEVuP9lU1tZJ3zg47fcENer2xMu82ieVQ3MsbSt2QbItCnWDzwjJs=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446439; c=relaxed/simple;
bh=wWRlt5ac/IDUzhdtP1HOGjZn9n1erecPDNu8yCIMvzI=;
h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=QgLYwCguXfaPfICpawkrroxCUO4aqCmmawHwi1Rc73XgXMZEWsS1r8UBhpy0gzzd+7Am8Mf5HBYW53dRNq0RWcxlSQvpXt7U0q+Mp6k96NbWM6QLWIkPveTyb8jK/GCH7Oun61l6AbgOPinUfgEDoHR4sLkDGL9QhP3LKG1rlo0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2E176C4CEEE;
Wed, 28 May 2025 15:33:58 +0000 (UTC)
Date: Wed, 28 May 2025 11:34:39 -0400
From: Steven Rostedt <rostedt@xxxxxxxxxxx>
To: "Masami Hiramatsu (Google)" <mhiramat@xxxxxxxxxx>
Cc: LKML <linux-kernel@xxxxxxxxxxxxxxx>, Linux Trace Kernel
<linux-trace-kernel@xxxxxxxxxxxxxxx>, Mathieu Desnoyers
<mathieu.desnoyers@xxxxxxxxxxxx>, Vincent Donnefort <vdonnefort@xxxxxxxxxx>
Subject: Re: [PATCH] ring-buffer: Do not trigger WARN_ON() due to a
commit_overrun
Message-ID: <20250528113439.3fa4f245@xxxxxxxxxxxxxxxxxx>
In-Reply-To: <20250529000342.5218ac7b90c99f3636edd5ab@xxxxxxxxxx>
References: <20250527121140.0e7f0565@xxxxxxxxxxxxxxxxxx>
<20250528104203.d6f509c5d9c30dec1e024587@xxxxxxxxxx>
<20250527221735.04c62a3c@xxxxxxxxxxxxxxxxx>
<20250529000342.5218ac7b90c99f3636edd5ab@xxxxxxxxxx>
X-Mailer: Claws Mail 3.20.0git84 (GTK+ 2.24.33; x86_64-pc-linux-gnu)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Thu, 29 May 2025 00:03:42 +0900
Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx> wrote:
> > > (BTW, what happen if the interrupted process commits the event? That
> > > event will be lost, or commit and just move commit_page?)
> >
> > No, the first event to be created is the "commit" event. If it gets
> > interrupted and the interrupt adds a bunch of events that wraps the
> > ring buffer, it can't touch the commit event, it will just start
> > dropping events. Then when the commit event finishes, it can either be
> > read by the reader, or overwritten by the next events coming in.
>
> Hmm, rb_end_commit() seems to try commit all nested events (committing > 1)
> if committing == 1, and the rb_set_commit_to_write() pushes commit pointer
> to the latest write pointer. So when it "start dropping events"? (is that
> write side?)
The "start dropping events" is when committing > 1. The commit overrun
events dropping happens in rb_move_tail(), where a write falls off the end
of the sub buffer and moves the tail to the next sub-buffer. If the next
sub-buffer is the commit page, then it fails and just drops the event. This
will never happen when committing == 1.
>
> > >
> > > Thus the reader_page == commit_page && reader_page == tail_page,
> > > missed_events should be 0?
> > >
> > > Possible cases if missed_events != 0:
> > >
> > > - reader_page != commit_page
> > > (writer's commit overtook the reader)
> >
> > The reader is never in the write buffer. Just the head page will move.
> > When a new reader page is taken it will swap out the old reader page
> > with the head page. If the head page is the commit page, then the
> > commit page becomes the reader page too.
>
> Hmm, so this is the case that the writer is too fast and it moves
> head page to the next page. Thus some events on old head page are
> lost.
This has nothing to do with the speed of the reader. When a event is being
written, and it gets interrupted and the interrupt starts writing events,
the interrupted event stays put. The reader could be very fast, but it will
stop when it gets to the commit page. Thus, the reader could be all caught
up, but is now waiting for new events to be committed.
If an event is interrupted, no event is fully committed until that event is
no longer interrupted and then can continue.
rb_reserve_next_event() {
rb_start_commit() <<-- here the reader can never go past the commit page
[ interrupt start ]
for (i = 0; i < 10000000000; i++)
rb_reserve_next_event(); <<-- This will eventually fill up the
buffer, but will stop when it
hits the commit page and that
will be when the commit overrun
events start dropping.
[ On another CPU:
ring_buffer_map_get_reader() <<-- This now gets the commit page as the
reader page, and there will be missed
events.
]
[ interrupt end ]
rb_end_commit() <<-- This will move the commit page forward.
}
This is a very unlikely scenario, but I can trigger it with the
perf/trace-cmd test that enables all events and function tracing with KASAN
and lockdep enabled running hackbench, as that pretty much creates the:
for (i = 0; i < 10000000000; i++)
rb_reserve_next_event();
scenario.
And even in that case, it triggers at most a couple of times a second:
> OK, so "wrapped the buffer" means "tail (write) page caught up the commit"?
Yes.
> > > Do we need this pr_info() for each commit overrun?
> >
> > Yes. When doing this stress test, it printed at most 4 times. It
> > happens once per time the interrupt fills the buffer while interrupting
> > the buffer.
>
> Ah, I meant we should report it in printk buffer, since the event
> lost will happen in some case and reader can notice that.
I think we agree here?
Thanks for the review, I'll have a new patch shortly.
-- Steve
Return-Path: <linux-kernel+bounces-665720-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 469B641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:34:19 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 2198E1BC53E9
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:34:32 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id E223B28C5A7;
Wed, 28 May 2025 15:34:04 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="StQ1NndZ"
Received: from mail-oi1-f182.google.com (mail-oi1-f182.google.com [209.85.167.182])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3EB871386DA
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:34:01 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.182
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446444; cv=none; b=lUq8YoNAoc6MNdfuRpPG6adLFR1LHguCCXioLYBIG0iZsj0sF9atl8wkHQPP3JyifxJUMeHgDYPbMtdudspE1h+WDcIAr1ISbRZ8tIF3D4ZgGrfM40TKoIVByiJoDKH39Ibezqs/a3BjJrwdwovaYmUE3bUmWrBMtHBmCC83xkI=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446444; c=relaxed/simple;
bh=laYJuFM4eLBzK/hSo8mP/zT12GWa0px3gKlSTXf+dow=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=myeLEVDZRrHbVGlf2reACZZmLihWU5t3l3UPNvsXci4fNJHzDzDJD1QuTdqMg4pm3oR8IsaY1kMTYcnkudZE8egpHIu4p3s2FuARPUe9UEqOimqGAgZCS493exSgfmGFRmXiFNpQzs3lxF/aVSV6liLyo/DD530y8rWRqdegDLE=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=StQ1NndZ; arc=none smtp.client-ip=209.85.167.182
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org
Received: by mail-oi1-f182.google.com with SMTP id 5614622812f47-3f6dccdcadaso3172597b6e.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:34:01 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=linaro.org; s=google; t=1748446441; x=1749051241; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=V50E07Bshe0n5/d4A/sEnbHvwqtDL9kM998TesZAgNI=;
b=StQ1NndZY3DQpafewG3+4jwjzZsleAsPEa6jmBr4l5q/C/r6xZzdswILAQNBSk+lAJ
pZrEHpbaehScY9NMmqdossqHe4lXUbJdcbNyDHZ8KA9cSkwp656tzo9DhgtPikVbfHI3
wcQbV7aQt+yElXjc3KFIDbpD3FiIQM0oVFDPX+Mm0rWa5VCGWg0L+D82qCirRrybkY+h
uKbXVxhDa3qES3F7tdlQzDj325ZB4L/zjYjA1ZLgbyKfGveIF19pKtjYGmuGpG+fg5LI
HDIbsF0i4R/tnAUS+U8OBwgdvueDrYwkRJ+AIFGioV9QtrE8XgP2Dcijg6MOOjDLm88s
wkrA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748446441; x=1749051241;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=V50E07Bshe0n5/d4A/sEnbHvwqtDL9kM998TesZAgNI=;
b=C4IjUgnxMAjG/rf57hJxf+9GB0N07mJf6Gwh4C0m5tfHR3lGYFGx+74k0mrfekQWCn
L5aliICbcdUw3MGtHAZWPYqvoWCrC+8c+hQD0W02Rsr1asBolUtVZ9xNdaF39Hb/a3tM
sFtKrwe5ADG78sdneFtBIkdndeMpjfJs8AAO56jeQ3mBtcwY4SY7h10NGGMwqPjLB27C
WfDHuOOhAr0lADnUU3LUCLcx6d68+KeikHItKHZ+s9mjAoIri8+o1ro3M5GllnIE3p6+
YVcqoauGIcmvSEwsUcvjMiAkbP4iu6wguz6hdlIZdr1L87D4jHmCrpfGYo/5fXABGQb+
jfSw==
X-Forwarded-Encrypted: i=1; AJvYcCWdmYDVxBCFl0v4qWkhUEpRdzzyAhnbqCEXRx9TG3A4Kpb77g6LdvQghSJkhmQcVkaAwO0LP26How8Sb1E=@vger.kernel.org
X-Gm-Message-State: AOJu0YxsvYG+ATrORovpASxBx6q2YTlZJdyiByWRVbVHELK844W10QKI
t+5MSMx/qFOR2CIZXmSsBf4M3EZqBseRqhscVXM1UQgPjewBtEj61wdje+Hh8dnhuh2T/Rh51/f
L4TnJeqLu1hh2QrU3ZDnQokPVh9Yvr0y2I3iE8xbdlrZn9Y0hcg9Cie4=
X-Gm-Gg: ASbGncviyf+jG3iiP0qvao/Yg9Q48LZ+RvY1qPug6Y2ylCkBBNfOEkVnYXNY2GWv+rG
ZqhvqTPDX3bM9Q5y8JtT4Af/95SNptekDK48V96ukTuJtTPjS5YT/RhF7+Po5KtrY4j5CB39SL3
qnDNr3tgImJ/nwwt6HFwXyYRICnNACkWc5vg==
X-Google-Smtp-Source: AGHT+IEniMZHQbxc4dt4F2x1tHo1KsHwEHrIoQNpmjaRPLITmNPATnnXVb6jvput6py+MvQ1YaI5hzeuvZZSY3OtXoY=
X-Received: by 2002:a05:6820:2004:b0:60b:a8e7:b23e with SMTP id
006d021491bc7-60ba8e7d8damr8600114eaf.8.1748446430509; Wed, 28 May 2025
08:33:50 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250528-ffa_notif_fix-v1-0-5ed7bc7f8437@xxxxxxx> <20250528-ffa_notif_fix-v1-2-5ed7bc7f8437@xxxxxxx>
In-Reply-To: <20250528-ffa_notif_fix-v1-2-5ed7bc7f8437@xxxxxxx>
From: Jens Wiklander <jens.wiklander@xxxxxxxxxx>
Date: Wed, 28 May 2025 17:33:38 +0200
X-Gm-Features: AX0GCFunGnw6PrwW4snoTeu3Q1n7NKY-YLzkZ5yxhwalJKSoyFy2rAwPEsfJlg4
Message-ID: <CAHUa44EG+SPt8QgMfLmEgLgGyu-EUhd8NL-9R+nbqk9Zf_bFvQ@xxxxxxxxxxxxxx>
Subject: Re: [PATCH 2/3] firmware: arm_ffa: Move memory allocation outside the
mutex locking
To: Sudeep Holla <sudeep.holla@xxxxxxx>
Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
=?UTF-8?B?SsOpcsO0bWUgRm9yaXNzaWVy?= <jerome.forissier@xxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 10:50=E2=80=AFAM Sudeep Holla <sudeep.holla@xxxxxxx=
> wrote:
>
> The notifier callback node allocation is currently done while holding
> the notify_lock mutex. While this is safe even if memory allocation may
> sleep, we need to move the allocation outside the locked region in
> preparation to move from using muxtes to rwlocks.
>
> Move the memory allocation to avoid potential sleeping in atomic context
> once the locks are moved from mutex to rwlocks.
>
> Fixes: e0573444edbf ("firmware: arm_ffa: Add interfaces to request notifi=
cation callbacks")
> Signed-off-by: Sudeep Holla <sudeep.holla@xxxxxxx>
> ---
> drivers/firmware/arm_ffa/driver.c | 48 +++++++++++++++++++--------------=
------
> 1 file changed, 24 insertions(+), 24 deletions(-)
Reviewed-by: Jens Wiklander <jens.wiklander@xxxxxxxxxx>
Cheers,
Jens
>
> diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa=
/driver.c
> index 6f75cdf29720993b1cd95eb7d3a36d01b0fdd1de..44eecb786e67b205161e2d486=
02e1f1b53533360 100644
> --- a/drivers/firmware/arm_ffa/driver.c
> +++ b/drivers/firmware/arm_ffa/driver.c
> @@ -1250,13 +1250,12 @@ notifier_hnode_get_by_type(u16 notify_id, enum no=
tify_type type)
> return NULL;
> }
>
> -static int
> -update_notifier_cb(struct ffa_device *dev, int notify_id, void *cb,
> - void *cb_data, bool is_registration, bool is_framework=
)
> +static int update_notifier_cb(struct ffa_device *dev, int notify_id,
> + struct notifier_cb_info *cb, bool is_framew=
ork)
> {
> struct notifier_cb_info *cb_info =3D NULL;
> enum notify_type type =3D ffa_notify_type_get(dev->vm_id);
> - bool cb_found;
> + bool cb_found, is_registration =3D !!cb;
>
> if (is_framework)
> cb_info =3D notifier_hnode_get_by_vmid_uuid(notify_id, de=
v->vm_id,
> @@ -1270,18 +1269,7 @@ update_notifier_cb(struct ffa_device *dev, int not=
ify_id, void *cb,
> return -EINVAL;
>
> if (is_registration) {
> - cb_info =3D kzalloc(sizeof(*cb_info), GFP_KERNEL);
> - if (!cb_info)
> - return -ENOMEM;
> -
> - cb_info->dev =3D dev;
> - cb_info->cb_data =3D cb_data;
> - if (is_framework)
> - cb_info->fwk_cb =3D cb;
> - else
> - cb_info->cb =3D cb;
> -
> - hash_add(drv_info->notifier_hash, &cb_info->hnode, notify=
_id);
> + hash_add(drv_info->notifier_hash, &cb->hnode, notify_id);
> } else {
> hash_del(&cb_info->hnode);
> kfree(cb_info);
> @@ -1303,8 +1291,7 @@ static int __ffa_notify_relinquish(struct ffa_devic=
e *dev, int notify_id,
>
> mutex_lock(&drv_info->notify_lock);
>
> - rc =3D update_notifier_cb(dev, notify_id, NULL, NULL, false,
> - is_framework);
> + rc =3D update_notifier_cb(dev, notify_id, NULL, is_framework);
> if (rc) {
> pr_err("Could not unregister notification callback\n");
> mutex_unlock(&drv_info->notify_lock);
> @@ -1335,6 +1322,7 @@ static int __ffa_notify_request(struct ffa_device *=
dev, bool is_per_vcpu,
> {
> int rc;
> u32 flags =3D 0;
> + struct notifier_cb_info *cb_info =3D NULL;
>
> if (ffa_notifications_disabled())
> return -EOPNOTSUPP;
> @@ -1342,6 +1330,17 @@ static int __ffa_notify_request(struct ffa_device =
*dev, bool is_per_vcpu,
> if (notify_id >=3D FFA_MAX_NOTIFICATIONS)
> return -EINVAL;
>
> + cb_info =3D kzalloc(sizeof(*cb_info), GFP_KERNEL);
> + if (!cb_info)
> + return -ENOMEM;
> +
> + cb_info->dev =3D dev;
> + cb_info->cb_data =3D cb_data;
> + if (is_framework)
> + cb_info->fwk_cb =3D cb;
> + else
> + cb_info->cb =3D cb;
> +
> mutex_lock(&drv_info->notify_lock);
>
> if (!is_framework) {
> @@ -1349,21 +1348,22 @@ static int __ffa_notify_request(struct ffa_device=
*dev, bool is_per_vcpu,
> flags =3D PER_VCPU_NOTIFICATION_FLAG;
>
> rc =3D ffa_notification_bind(dev->vm_id, BIT(notify_id), =
flags);
> - if (rc) {
> - mutex_unlock(&drv_info->notify_lock);
> - return rc;
> - }
> + if (rc)
> + goto out_unlock_free;
> }
>
> - rc =3D update_notifier_cb(dev, notify_id, cb, cb_data, true,
> - is_framework);
> + rc =3D update_notifier_cb(dev, notify_id, cb_info, is_framework);
> if (rc) {
> pr_err("Failed to register callback for %d - %d\n",
> notify_id, rc);
> if (!is_framework)
> ffa_notification_unbind(dev->vm_id, BIT(notify_id=
));
> }
> +
> +out_unlock_free:
> mutex_unlock(&drv_info->notify_lock);
> + if (rc)
> + kfree(cb_info);
>
> return rc;
> }
>
> --
> 2.34.1
>
Return-Path: <linux-kernel+bounces-665721-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E383C41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:34:44 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id B6E0B7A66D9
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:33:20 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 4668D28C2DE;
Wed, 28 May 2025 15:34:18 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="QiudYa4T"
Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.14])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6BCBC28C02E;
Wed, 28 May 2025 15:34:15 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.14
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446457; cv=fail; b=Sta495cBmF70wAer7mWZdY6d1VdHvtRNQUIZeUUgpMRgvAFNXCmStJN2DhQ9/EK8vSz27yfgnD0+02rCMGvSmWwb82X3xAwZ+c10Lpr/vVtZf9RKwiKsGqqh8KuCxwO8lxjMQ2cZf80Rr/eawYXhmFSidaq5Vaxs7+42NPxPZgk=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446457; c=relaxed/simple;
bh=1hPqwcU9eRqR43f/3ZUS+hkPY9GwdehhsVqFVma0gvk=;
h=Message-ID:Date:Subject:To:CC:References:From:In-Reply-To:
Content-Type:MIME-Version; b=uruf7XUvGb6HTPWKslETz7L9xISQ85hUI6/fCvt8yxPSKR8m/LAb+N3blyT4TMULPlRx1KWHp3fySKopbC23X/sWUsJ2FzIu93d11g8hU6UcQsi9oU3Xhn25VDtyar312H79s2LGbP7XJtqURurCi+UvPU7cpagZi6CSQmtL2u4=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=QiudYa4T; arc=fail smtp.client-ip=198.175.65.14
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748446455; x=1779982455;
h=message-id:date:subject:to:cc:references:from:
in-reply-to:content-transfer-encoding:mime-version;
bh=1hPqwcU9eRqR43f/3ZUS+hkPY9GwdehhsVqFVma0gvk=;
b=QiudYa4TDTiSRqegAXczbcaAu9gCs5HUO0R+jez8sguhrOOb79DhotVF
wyjeeSTxykqd+EiJW/WrKEsXrLVGVQTPboJ/u1gs7Vk/lHGSCDwPsG0Ql
/nP3tNAMZ0tyWJTGRyAGX3xvOZZ8R8f3Zb4iXewKuEraeMlkQWlJqx737
ql+nWAGVtJejj2vi8eSKqPFvCa6gl3+BQ7QwpN9LwWhOUB+arN4l1FjR3
3SpYFeChDORJuY6s0PCy60ecuAY9GE4tEctIyxBbWwA9ikCc3lEQvhGl7
nOolAF/luQR9rLaogI2OGSFLIXvXXLZ98+QiaW/PrewPH9YinvPGT0WJq
w==;
X-CSE-ConnectionGUID: Y+tTCwIJQkOCAuqereXmiw==
X-CSE-MsgGUID: LRPy+DAMREm853OxcfuqZQ==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="54285197"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="54285197"
Received: from fmviesa010.fm.intel.com ([10.60.135.150])
by orvoesa106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 08:34:12 -0700
X-CSE-ConnectionGUID: 8HpoZSjmR9CBKRK1HMMNXQ==
X-CSE-MsgGUID: YR3O5u4+QAqvq8lr8KXeVQ==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="143719628"
Received: from orsmsx902.amr.corp.intel.com ([10.22.229.24])
by fmviesa010.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 08:33:43 -0700
Received: from ORSMSX901.amr.corp.intel.com (10.22.229.23) by
ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
15.2.1544.25; Wed, 28 May 2025 08:33:42 -0700
Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by
ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
15.2.1544.25 via Frontend Transport; Wed, 28 May 2025 08:33:42 -0700
Received: from NAM10-DM6-obe.outbound.protection.outlook.com (40.107.93.84) by
edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
15.1.2507.55; Wed, 28 May 2025 08:33:42 -0700
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=R8/hCVXrcsS6dRQjW+TdGYqL5VEY7XM2ofoOFVtxK3jOeuEmSuD2jqTlR81/uu9beSiKydJ4wFx8NPAnSPmA7lh0ochG6mVS6CG9tnmLz2V+51lILgJSMPvf5bOugJLocoJempy/1nZBdAeBilx+6ImNygzgjGRFcXDhBmRohwO/gPLAaFEMt7JX45S0jq30EWgKihWiDnG8/LvmdJ1ff6qS/waE72yTkgqDk+QO5Csx2fapd2zA2lpvzZpEaNnSv/aCHlOXiLorrz5MOjWaiR1r9CR9tZNEBrcw2QdGqO92melcpyFOmAvWdwBrtzv42I8uNFKUWJ/NsjDh8gtX4w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=LWDLcJkpsmn6Ai17siGGMVuZcoE4DI9Mqo1+Ij3HSWs=;
b=ygiLYLH4HJ7Oipnyo52mFaw5r+Ha+VpwDR3r/Y3hPqrtFYNc1B/Rpiuwz3PgHMIIp42uX8fHk5/RU0zS0s5wvxyYnxFX111FHsTXc9T0Z5IWP2oJlvIiLeHyOctlu0dCV1m+g3o3Bt+0YBAz+rDnC1askIDO+5Ypkc/OFoNUgWaymcKxlM30lgZOK2zBVPhK2s/8MuejYWlvsQdfimW54/yZb/tWT54OrEdAWFplqoFiZZfY7yNJTj1IFMhykxwkpiJl/IrIPPzOWtZ3Skxbsh95D5LjZoHtyXwLYPL2fL1aupJ9GZnnwIEfRcYFAlFQ5ck9iF3YOkIV3L/9iQDyZw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com;
dkim=pass header.d=intel.com; arc=none
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=intel.com;
Received: from BL3PR11MB6435.namprd11.prod.outlook.com (2603:10b6:208:3bb::9)
by PH7PR11MB5941.namprd11.prod.outlook.com (2603:10b6:510:13d::20) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8746.30; Wed, 28 May
2025 15:33:39 +0000
Received: from BL3PR11MB6435.namprd11.prod.outlook.com
([fe80::23a7:1661:19d4:c1ab]) by BL3PR11MB6435.namprd11.prod.outlook.com
([fe80::23a7:1661:19d4:c1ab%3]) with mapi id 15.20.8769.025; Wed, 28 May 2025
15:33:39 +0000
Message-ID: <cc70d2d6-df72-4032-8d9b-fb96f4ef3ed0@xxxxxxxxx>
Date: Wed, 28 May 2025 08:33:36 -0700
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH] e1000e: fix heap overflow in e1000_set_eeprom()
To: Mikael Wessel <post@mikaelkw.online>, <netdev@xxxxxxxxxxxxxxx>
CC: <intel-wired-lan@xxxxxxxxxxxxxxxx>, <torvalds@xxxxxxxxxxxxxxxxxxx>,
<przemyslaw.kitszel@xxxxxxxxx>, <andrew@xxxxxxx>, <kuba@xxxxxxxxxx>,
<pabeni@xxxxxxxxxx>, <security@xxxxxxxxxx>, <stable@xxxxxxxxxxxxxxx>,
<davem@xxxxxxxxxxxxx>, <edumazet@xxxxxxxxxx>, <linux-kernel@xxxxxxxxxxxxxxx>
References: <20250527211332.50455-1-post@mikaelkw.online>
Content-Language: en-US
From: Tony Nguyen <anthony.l.nguyen@xxxxxxxxx>
In-Reply-To: <20250527211332.50455-1-post@mikaelkw.online>
Content-Type: text/plain; charset="UTF-8"; format=flowed
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: MW4PR03CA0091.namprd03.prod.outlook.com
(2603:10b6:303:b7::6) To BL3PR11MB6435.namprd11.prod.outlook.com
(2603:10b6:208:3bb::9)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: BL3PR11MB6435:EE_|PH7PR11MB5941:EE_
X-MS-Office365-Filtering-Correlation-Id: 9b0cc765-06d5-41f8-0d32-08dd9dfd051e
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014|7053199007;
X-Microsoft-Antispam-Message-Info: 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
=?utf-8?Q?yaLd/fX/5cs=3D?=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL3PR11MB6435.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014)(7053199007);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
=?utf-8?B?dXc9PQ==?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 9b0cc765-06d5-41f8-0d32-08dd9dfd051e
X-MS-Exchange-CrossTenant-AuthSource: BL3PR11MB6435.namprd11.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:33:39.7474
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: JKln6LPcyRfRiOF19hVHROyoL/xVOOou1fa/WCl8a2E8bmUOqA5fJpY8lQ48uGW45QI4D1oTHnFooldvfO2psMc5haJ1/S+o26FFft+Aw9M=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR11MB5941
X-OriginatorOrg: intel.com
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 5/27/2025 2:13 PM, Mikael Wessel wrote:
> The ETHTOOL_SETEEPROM ioctl copies user data into a kmalloc'ed buffer
> without validating eeprom->len and eeprom->offset. A CAP_NET_ADMIN
> user can overflow the heap and crash the kernel or gain code execution.
>
> Validate length and offset before kmalloc() to avoid leaking eeprom_buff.
>
> Fixes: bc7f75fa9788 ("[E1000E]: New pci-express e1000 driver (currently for ICH9 devices only)")
> Reported-by: Mikael Wessel <post@mikaelkw.online>
> Signed-off-by: Mikael Wessel <post@mikaelkw.online>
> Cc: stable@xxxxxxxxxxxxxxx
> ---
> drivers/net/ethernet/intel/e1000e/ethtool.c | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/e1000e/ethtool.c b/drivers/net/ethernet/intel/e1000e/ethtool.c
> index 98e541e39730..d04e59528619 100644
> --- a/drivers/net/ethernet/intel/e1000e/ethtool.c
> +++ b/drivers/net/ethernet/intel/e1000e/ethtool.c
> @@ -561,7 +561,7 @@ static int e1000_set_eeprom(struct net_device *netdev,
> return -EOPNOTSUPP;
>
> if (eeprom->magic !=
> - (adapter->pdev->vendor | (adapter->pdev->device << 16)))
> + (adapter->pdev->vendor | (adapter->pdev->device << 16)))
As Andrew already pointed out, please omit.
> return -EFAULT;
>
> if (adapter->flags & FLAG_READ_ONLY_NVM)
> @@ -569,6 +569,10 @@ static int e1000_set_eeprom(struct net_device *netdev,
>
> max_len = hw->nvm.word_size * 2;
>
> + /* bounds check: offset + len must not exceed EEPROM size */
> + if (eeprom->offset + eeprom->len > max_len)
> + return -EINVAL;
> +
> first_word = eeprom->offset >> 1;
> last_word = (eeprom->offset + eeprom->len - 1) >> 1;
> eeprom_buff = kmalloc(max_len, GFP_KERNEL);
> @@ -596,9 +600,6 @@ static int e1000_set_eeprom(struct net_device *netdev,
> for (i = 0; i < last_word - first_word + 1; i++)
> le16_to_cpus(&eeprom_buff[i]);
>
> - if (eeprom->len > max_len ||
> - eeprom->offset > max_len - eeprom->len)
> - return -EINVAL;
Seems like this patch is based on top of your previous version?
https://lore.kernel.org/all/20250527085612.11354-2-post@mikaelkw.online/
Please a provide a patch that can apply without need for previous versions.
Thanks,
Tony
Return-Path: <linux-kernel+bounces-665722-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 7416F41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:35:03 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 60DEE3B2786
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:34:42 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 3E09328B7E4;
Wed, 28 May 2025 15:34:56 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="nwl+nMdJ"
Received: from mail-oo1-f50.google.com (mail-oo1-f50.google.com [209.85.161.50])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 907D12750E8
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:34:53 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.50
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446495; cv=none; b=hbzdXpq1y/Ew+r6UIz8AyhP5Qi4lAdYElnP/o5+BwTdVXm4wAzFHLRkPT336AtpCzRHD1snyD4Goj8CDyx6XrLfzqqSGGPGRR5/CgS8GyPxsQsFHA4XIJjuQ8CQOhfB88o3/NhQ2a0ohwmTZywBjZf98nL+WOuDMhCQQdscLAD8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446495; c=relaxed/simple;
bh=mikzw4toSN1swSWNdXFzo0SE3gTGHLICqxogeMp6Kyk=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=P5N62xdiBi1YwHjA06Vhz7KCwZBmtxEGlUu91qkMm8GYGJqWiu1KHJu4pcO4HRLOZsPiPnWMa2wjCpiW/Lx/zpxWv7kaj7NTISBEYl2dtpsRywLX9DoB2eIQhbQSwaezu3VIXus8+KTgTZaNzY1S2JCt5QNL/XUmHHrUIgqKVls=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=nwl+nMdJ; arc=none smtp.client-ip=209.85.161.50
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org
Received: by mail-oo1-f50.google.com with SMTP id 006d021491bc7-60658e1fedfso1869521eaf.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:34:53 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=linaro.org; s=google; t=1748446492; x=1749051292; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=Q37W/QCIajIBqdwlX8JxBJ+RS4ZcUOJmjX4FthbBh28=;
b=nwl+nMdJXYoYtwlqqtaEfDTrcTwg5/4P/QTn4fWq8DAHMaZJHomLYtYLQNrjwGoalY
wURizpiIulyKOs+sL/D1/HW9hfu93cIafAK5NjmmcUK6Srv9LRkpqS6JLmj/gD4NSRjm
sf6OQCc0HmHgR6kFLyvcE9mtr9OKlFNv4A1wudd3HhFN1r17lmHQJyTxpY1U8k/pitB7
UzgXoVkMSWU3F+um4ODddCjAcCLUsKZhJLFvLQaElj+FSQZBkZWnVmC332pX1HNYinfD
5LLvi4+2AdGihGvuK8KA0zEHq7qu56muFtkS7vObPGm2q8V2htpi5VlhZ6dMMxLCobfK
25zg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748446492; x=1749051292;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=Q37W/QCIajIBqdwlX8JxBJ+RS4ZcUOJmjX4FthbBh28=;
b=jGhSBdgmEngx3mixHfbV6bPZj6W1NeMdItOqjzg10NSKuWC4UZovOug3RiLHJw9DLG
Y/XNp2FgGlRFnMC4zKBUKY9T/lIySUnTG6cHVt6vMTqqKazaXVWISTCRihi+Awj66uoi
erViL/tLOTzKq0LlzCAAcarE/mtCd+xiVLTmVM7UjBR5U5sYf0XJaQS/QJIEBClJt64x
9PEwcufBrzxFJl+9CIwUL2W+sfXfG5yefB6cwNGnIYqxc/NIdlsCkZGdbiJEzHIUxMVy
Z6diTGMgVJrRZeV7Nii6g3jEKdBHUGjaHh47Gnbe+mpz1WZ1HJq9nGjAnzqjNpR5n+Qs
ecjg==
X-Forwarded-Encrypted: i=1; AJvYcCX+EcsDq4wcrwXrEQeWCQee7EnQdPmvkvLW7LgCqz/LHUdpFCcAGr7cBadic2qVzY4I7eTi4oh9u6lLWAs=@vger.kernel.org
X-Gm-Message-State: AOJu0Yxg20D/sKmrG46VAsivbSUIPetQqVER8jXqLg4OZ9ES4HIuM2Fq
nx1JrumfsAlhJToFFeSj3NVQOiZ59WauoKbpwjvNE6kYhoI0Y3Vlzy6MyppB8DIsZhdNU74eGS1
P+5m2/sS4Wi9c3UAMqvrlbx0vo5SYaKgMTu2yZtWNyQ==
X-Gm-Gg: ASbGncsOmJjPb/JzS1Z9XSN5vnleAqD15m2v/TXeN/2hkLEq2e6DKeWkgIpLrNPQaVZ
ldyDNEAkGgiqtilqhNIjRSPD9tFfcILn+vY/GnnxMtCYcQjfnOgKGtIGED1c9fNFGVYsiHNXqLK
mg8EK4VaNVzzu5GMXRK4oLbt2fyCAWLY6GdA==
X-Google-Smtp-Source: AGHT+IFUSKRJvzUK9Z26xs3uZ3t0I6t2CrJeTGXb8XUjdm5/FKiOx1YWjR4XQGbv++oHvpCQjLQB6sfRAHvl2IeOCSU=
X-Received: by 2002:a05:6820:4c8a:b0:60b:cd81:9079 with SMTP id
006d021491bc7-60bd9b5db35mr1257707eaf.5.1748446492453; Wed, 28 May 2025
08:34:52 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250528-ffa_notif_fix-v1-0-5ed7bc7f8437@xxxxxxx> <20250528-ffa_notif_fix-v1-3-5ed7bc7f8437@xxxxxxx>
In-Reply-To: <20250528-ffa_notif_fix-v1-3-5ed7bc7f8437@xxxxxxx>
From: Jens Wiklander <jens.wiklander@xxxxxxxxxx>
Date: Wed, 28 May 2025 17:34:40 +0200
X-Gm-Features: AX0GCFs-yLHQEJ9iEAsL75ibAAqIeyrWnzKLxzwLIDc74kts0liswYeErWZvhTY
Message-ID: <CAHUa44HRsYUV8U-jBYvhsPoLNizXamxYK+Th+O4ZJ2VpRQ9A7A@xxxxxxxxxxxxxx>
Subject: Re: [PATCH 3/3] firmware: arm_ffa: Replace mutex with rwlock to avoid
sleep in atomic context
To: Sudeep Holla <sudeep.holla@xxxxxxx>
Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
=?UTF-8?B?SsOpcsO0bWUgRm9yaXNzaWVy?= <jerome.forissier@xxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 10:50=E2=80=AFAM Sudeep Holla <sudeep.holla@xxxxxxx=
> wrote:
>
> The current use of a mutex to protect the notifier hashtable accesses
> can lead to issues in the atomic context. It results in the below
> kernel warnings:
>
> | BUG: sleeping function called from invalid context at kernel/locking=
/mutex.c:258
> | in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 9, name: kwor=
ker/0:0
> | preempt_count: 1, expected: 0
> | RCU nest depth: 0, expected: 0
> | CPU: 0 UID: 0 PID: 9 Comm: kworker/0:0 Not tainted 6.14.0 #4
> | Workqueue: ffa_pcpu_irq_notification notif_pcpu_irq_work_fn
> | Call trace:
> | show_stack+0x18/0x24 (C)
> | dump_stack_lvl+0x78/0x90
> | dump_stack+0x18/0x24
> | __might_resched+0x114/0x170
> | __might_sleep+0x48/0x98
> | mutex_lock+0x24/0x80
> | handle_notif_callbacks+0x54/0xe0
> | notif_get_and_handle+0x40/0x88
> | generic_exec_single+0x80/0xc0
> | smp_call_function_single+0xfc/0x1a0
> | notif_pcpu_irq_work_fn+0x2c/0x38
> | process_one_work+0x14c/0x2b4
> | worker_thread+0x2e4/0x3e0
> | kthread+0x13c/0x210
> | ret_from_fork+0x10/0x20
>
> To address this, replace the mutex with an rwlock to protect the notifier
> hashtable accesses. This ensures that read-side locking does not sleep an=
d
> multiple readers can acquire the lock concurrently, avoiding unnecessary
> contention and potential deadlocks. Writer access remains exclusive,
> preserving correctness.
>
> This change resolves warnings from lockdep about potential sleep in
> atomic context.
>
> Cc: Jens Wiklander <jens.wiklander@xxxxxxxxxx>
> Reported-by: J=C3=A9r=C3=B4me Forissier <jerome.forissier@xxxxxxxxxx>
> Closes: https://github.com/OP-TEE/optee_os/issues/7394
> Fixes: e0573444edbf ("firmware: arm_ffa: Add interfaces to request notifi=
cation callbacks")
> Signed-off-by: Sudeep Holla <sudeep.holla@xxxxxxx>
> ---
> drivers/firmware/arm_ffa/driver.c | 22 +++++++++++-----------
> 1 file changed, 11 insertions(+), 11 deletions(-)
Reviewed-by: Jens Wiklander <jens.wiklander@xxxxxxxxxx>
Tested-by: Jens Wiklander <jens.wiklander@xxxxxxxxxx>
Cheers,
Jens
>
> diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa=
/driver.c
> index 44eecb786e67b205161e2d48602e1f1b53533360..37eb2e6c2f9f4d30831b7bf6c=
e5142a39a19f50c 100644
> --- a/drivers/firmware/arm_ffa/driver.c
> +++ b/drivers/firmware/arm_ffa/driver.c
> @@ -110,7 +110,7 @@ struct ffa_drv_info {
> struct work_struct sched_recv_irq_work;
> struct xarray partition_info;
> DECLARE_HASHTABLE(notifier_hash, ilog2(FFA_MAX_NOTIFICATIONS));
> - struct mutex notify_lock; /* lock to protect notifier hashtable =
*/
> + rwlock_t notify_lock; /* lock to protect notifier hashtable */
> };
>
> static struct ffa_drv_info *drv_info;
> @@ -1289,19 +1289,19 @@ static int __ffa_notify_relinquish(struct ffa_dev=
ice *dev, int notify_id,
> if (notify_id >=3D FFA_MAX_NOTIFICATIONS)
> return -EINVAL;
>
> - mutex_lock(&drv_info->notify_lock);
> + write_lock(&drv_info->notify_lock);
>
> rc =3D update_notifier_cb(dev, notify_id, NULL, is_framework);
> if (rc) {
> pr_err("Could not unregister notification callback\n");
> - mutex_unlock(&drv_info->notify_lock);
> + write_unlock(&drv_info->notify_lock);
> return rc;
> }
>
> if (!is_framework)
> rc =3D ffa_notification_unbind(dev->vm_id, BIT(notify_id)=
);
>
> - mutex_unlock(&drv_info->notify_lock);
> + write_unlock(&drv_info->notify_lock);
>
> return rc;
> }
> @@ -1341,7 +1341,7 @@ static int __ffa_notify_request(struct ffa_device *=
dev, bool is_per_vcpu,
> else
> cb_info->cb =3D cb;
>
> - mutex_lock(&drv_info->notify_lock);
> + write_lock(&drv_info->notify_lock);
>
> if (!is_framework) {
> if (is_per_vcpu)
> @@ -1361,7 +1361,7 @@ static int __ffa_notify_request(struct ffa_device *=
dev, bool is_per_vcpu,
> }
>
> out_unlock_free:
> - mutex_unlock(&drv_info->notify_lock);
> + write_unlock(&drv_info->notify_lock);
> if (rc)
> kfree(cb_info);
>
> @@ -1407,9 +1407,9 @@ static void handle_notif_callbacks(u64 bitmap, enum=
notify_type type)
> if (!(bitmap & 1))
> continue;
>
> - mutex_lock(&drv_info->notify_lock);
> + read_lock(&drv_info->notify_lock);
> cb_info =3D notifier_hnode_get_by_type(notify_id, type);
> - mutex_unlock(&drv_info->notify_lock);
> + read_unlock(&drv_info->notify_lock);
>
> if (cb_info && cb_info->cb)
> cb_info->cb(notify_id, cb_info->cb_data);
> @@ -1447,9 +1447,9 @@ static void handle_fwk_notif_callbacks(u32 bitmap)
>
> ffa_rx_release();
>
> - mutex_lock(&drv_info->notify_lock);
> + read_lock(&drv_info->notify_lock);
> cb_info =3D notifier_hnode_get_by_vmid_uuid(notify_id, target, &u=
uid);
> - mutex_unlock(&drv_info->notify_lock);
> + read_unlock(&drv_info->notify_lock);
>
> if (cb_info && cb_info->fwk_cb)
> cb_info->fwk_cb(notify_id, cb_info->cb_data, buf);
> @@ -1974,7 +1974,7 @@ static void ffa_notifications_setup(void)
> goto cleanup;
>
> hash_init(drv_info->notifier_hash);
> - mutex_init(&drv_info->notify_lock);
> + rwlock_init(&drv_info->notify_lock);
>
> drv_info->notif_enabled =3D true;
> return;
>
> --
> 2.34.1
>
Return-Path: <linux-kernel+bounces-665723-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 5DF7941E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:35:26 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 72DDF4E3B64
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:35:27 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 0F07328C5DE;
Wed, 28 May 2025 15:35:07 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="kVPnqshC"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 251212750E8;
Wed, 28 May 2025 15:35:06 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446506; cv=none; b=HGyuyk4sxvMcSIledlf903uwqXotRZ3eLj7cNyIT1nWHPAlcjcQhgx0Rjus7VEic/Nl2PruKBE08X6u1uamcEIX7kDX/i4W6WuCr1MqTpI/BRRtmaf4OOih5tMhw0yeosR8omN9WwvOlT0GfcP/DFbF3HpzOWu+mIlVypCfJ20A=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446506; c=relaxed/simple;
bh=zB7eSGVJ68Jl0gMC9+d7mPya9pfNddYzQqEMb7NDisM=;
h=Mime-Version:Content-Type:Date:Message-Id:Subject:From:To:Cc:
References:In-Reply-To; b=bfP+XXmzZwosfYyV1htHeT21FYHH7Gu4L91xrysMa0SMI71/hWzz5AGNs03PY+24WJ+ffjMfEdFUILt5FsY6lqTkBxhy2pGs3tF7sBC4zS6q2YjkEw6/qlBFQGH9V6JuobNfGRoXbnvw8AmBJE7SB1fr0saBHYeim9Rh1NfJc9g=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kVPnqshC; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8B031C4CEE3;
Wed, 28 May 2025 15:34:55 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748446506;
bh=zB7eSGVJ68Jl0gMC9+d7mPya9pfNddYzQqEMb7NDisM=;
h=Date:Subject:From:To:Cc:References:In-Reply-To:From;
b=kVPnqshCxEe5Da+hatugp5jpRO+YqdxnSK8hHV9/MuHaeYogJc8HUNfD+v7Y7oNnd
ajTOOvKZaF0AWykZCZmwO7rAa8WJYeT6DIdhhnZOGCLAyadkSOftnheVVRR4FwmZLb
wINaZlL/et1WxglyVXp6Bdc2km89Q4hZ8nTMOxo7LZNYnc6ZSms6wti8wzmuvtyWSz
Ytq92scLm0QqesXBybdXA+fa1nRyGQudkluYwUXFNmEW9Vvt+RNGG7P+2+BjFDmGjt
0jtso4IYLC52ByJ/P3KhBshux6a8WckGKiCjTxpDWhMHWsCdgKZeCnAhtK1FWUAVGf
4ZiszX0mmUL+w==
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
Mime-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=UTF-8
Date: Wed, 28 May 2025 17:34:53 +0200
Message-Id: <DA7WJYNAN5AI.2HE6B953GR16A@xxxxxxxxxx>
Subject: Re: [PATCH v10 4/5] rust: replace `kernel::c_str!` with C-Strings
From: "Benno Lossin" <lossin@xxxxxxxxxx>
To: "Alice Ryhl" <aliceryhl@xxxxxxxxxx>, "Tamir Duberstein"
<tamird@xxxxxxxxx>
Cc: "Michal Rostecki" <vadorovsky@xxxxxxxxxxxxxx>, "Miguel Ojeda"
<ojeda@xxxxxxxxxx>, "Alex Gaynor" <alex.gaynor@xxxxxxxxx>, "Boqun Feng"
<boqun.feng@xxxxxxxxx>, "Gary Guo" <gary@xxxxxxxxxxx>,
=?utf-8?q?Bj=C3=B6rn_Roy_Baron?= <bjorn3_gh@xxxxxxxxxxxxxx>, "Andreas
Hindborg" <a.hindborg@xxxxxxxxxx>, "Trevor Gross" <tmgross@xxxxxxxxx>,
"Brendan Higgins" <brendan.higgins@xxxxxxxxx>, "David Gow"
<davidgow@xxxxxxxxxx>, "Rae Moar" <rmoar@xxxxxxxxxx>, "Danilo Krummrich"
<dakr@xxxxxxxxxx>, "Maarten Lankhorst" <maarten.lankhorst@xxxxxxxxxxxxxxx>,
"Maxime Ripard" <mripard@xxxxxxxxxx>, "Thomas Zimmermann"
<tzimmermann@xxxxxxx>, "David Airlie" <airlied@xxxxxxxxx>, "Simona Vetter"
<simona@xxxxxxxx>, "Greg Kroah-Hartman" <gregkh@xxxxxxxxxxxxxxxxxxx>,
"Rafael J. Wysocki" <rafael@xxxxxxxxxx>, "Luis Chamberlain"
<mcgrof@xxxxxxxxxx>, "Russ Weight" <russ.weight@xxxxxxxxx>, "FUJITA
Tomonori" <fujita.tomonori@xxxxxxxxx>, "Rob Herring" <robh@xxxxxxxxxx>,
"Saravana Kannan" <saravanak@xxxxxxxxxx>, "Peter Zijlstra"
<peterz@xxxxxxxxxxxxx>, "Ingo Molnar" <mingo@xxxxxxxxxx>, "Will Deacon"
<will@xxxxxxxxxx>, "Waiman Long" <longman@xxxxxxxxxx>, "Nathan Chancellor"
<nathan@xxxxxxxxxx>, "Nick Desaulniers" <nick.desaulniers+lkml@xxxxxxxxx>,
"Bill Wendling" <morbo@xxxxxxxxxx>, "Justin Stitt"
<justinstitt@xxxxxxxxxx>, "Andrew Lunn" <andrew@xxxxxxx>, "Heiner Kallweit"
<hkallweit1@xxxxxxxxx>, "Russell King" <linux@xxxxxxxxxxxxxxx>, "David S.
Miller" <davem@xxxxxxxxxxxxx>, "Eric Dumazet" <edumazet@xxxxxxxxxx>, "Jakub
Kicinski" <kuba@xxxxxxxxxx>, "Paolo Abeni" <pabeni@xxxxxxxxxx>, "Bjorn
Helgaas" <bhelgaas@xxxxxxxxxx>, "Arnd Bergmann" <arnd@xxxxxxxx>, "Jens
Axboe" <axboe@xxxxxxxxx>, =?utf-8?q?Krzysztof_Wilczy=C5=84ski?=
<kwilczynski@xxxxxxxxxx>, <rust-for-linux@xxxxxxxxxxxxxxx>,
<linux-kernel@xxxxxxxxxxxxxxx>, <linux-kselftest@xxxxxxxxxxxxxxx>,
<kunit-dev@xxxxxxxxxxxxxxxx>, <dri-devel@xxxxxxxxxxxxxxxxxxxxx>,
<netdev@xxxxxxxxxxxxxxx>, <devicetree@xxxxxxxxxxxxxxx>,
<llvm@xxxxxxxxxxxxxxx>, <linux-pci@xxxxxxxxxxxxxxx>,
<nouveau@xxxxxxxxxxxxxxxxxxxxx>, <linux-block@xxxxxxxxxxxxxxx>
X-Mailer: aerc 0.20.1
References: <20250524-cstr-core-v10-0-6412a94d9d75@xxxxxxxxx>
<20250524-cstr-core-v10-4-6412a94d9d75@xxxxxxxxx>
<DA66NJXU86M4.1HU12P6E79JLO@xxxxxxxxxx>
<CAJ-ks9nd6_iGK+ie-f+F0x4kwpyEGJ-kQiQGt-ffdbVN5S6kOg@xxxxxxxxxxxxxx>
<aDbnLzPIGiAZISOq@xxxxxxxxxx>
In-Reply-To: <aDbnLzPIGiAZISOq@xxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed May 28, 2025 at 12:36 PM CEST, Alice Ryhl wrote:
> On Mon, May 26, 2025 at 06:29:46PM -0400, Tamir Duberstein wrote:
>> On Mon, May 26, 2025 at 11:04=E2=80=AFAM Benno Lossin <lossin@xxxxxxxxxx=
> wrote:
>> >
>> > On Sat May 24, 2025 at 10:33 PM CEST, Tamir Duberstein wrote:
>> > > +macro_rules! c_str_avoid_literals {
>> >
>> > I don't like this name, how about `concat_to_c_str` or
>> > `concat_with_nul`?
>> >
>> > This macro also is useful from macros that have a normal string litera=
l,
>> > but can't turn it into a `c""` one.
>>=20
>> Uh, can you give an example? I'm not attached to the name.
>
> I also think it should be renamed. Right now it sounds like it creates a
> c string while avoiding literals in the input ... whatever that means.
Yeah that's a good way to put why the name is weird.
> I like Benno's suggestions, but str_to_cstr! could also work?
Hmm, I think then people won't know that it can also concat? I don't
think it matters too much, the macro probably won't be used that often
and if someone needs to use it, they probably wouldn't fine it by name
alone.
---
Cheers,
Benno
Return-Path: <linux-kernel+bounces-665724-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E49D241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:35:46 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 2DE264E4578
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:35:48 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 0973828C2C5;
Wed, 28 May 2025 15:35:17 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=tomeuvizoso-net.20230601.gappssmtp.com header.i=@tomeuvizoso-net.20230601.gappssmtp.com header.b="Dn7TaLR0"
Received: from mail-yb1-f170.google.com (mail-yb1-f170.google.com [209.85.219.170])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 94E3628C865
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:35:10 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.170
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446516; cv=none; b=GGZVOrJ4tlRNs+kpWn58HZoHMLw6Bb9s/iGdsHR4tru+0HYN77/wkVRl0P0PXwJftBtTK1Uo99uz9is5DHJM2+vE9hxz2VVKnLzbmLECH6yQNR0P4G/SB2UEvZzjo9NgoCDH5u+A2xF4ssglt/iv32YR6ZWxOLxeNTSresbTEFU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446516; c=relaxed/simple;
bh=J57SZfY4LXui76ePtrfBMHyfF57llELgFBmoKZ+iFtc=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=jM1MHZTAq9G09SJJByaPfqU4JH0Sy8qZ5yOSZXXogXQ7Emzc2vXmqy26iB1OzAX0GM0ECEtgUCMzHyygtkrWWJUVQZ4k4b8NYz3CUrMSuoG2uqMQuDvQI01GOju/LFzDbrvzzsAmOAkkp2X3UGJlxbK3m7YUL7oNnSPZpi1mlQg=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=tomeuvizoso.net; spf=pass smtp.mailfrom=tomeuvizoso.net; dkim=pass (2048-bit key) header.d=tomeuvizoso-net.20230601.gappssmtp.com header.i=@tomeuvizoso-net.20230601.gappssmtp.com header.b=Dn7TaLR0; arc=none smtp.client-ip=209.85.219.170
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=tomeuvizoso.net
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=tomeuvizoso.net
Received: by mail-yb1-f170.google.com with SMTP id 3f1490d57ef6-e740a09eb00so3597725276.0
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:35:10 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=tomeuvizoso-net.20230601.gappssmtp.com; s=20230601; t=1748446509; x=1749051309; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=/xxvQd++y7EnTgMMEVQbGeZAD8fz0r4wC/tmiy3K++8=;
b=Dn7TaLR0l8qw9XKJqK8BBgm9OqoxrSOMlR6HN24NNUEQ6z3p4mVgcjWVJCoY3fYqiE
SjqOqvpBbL5fMkYgbDAlB6NsyjRkdBeE9XTXiFQyhylv4QnrC0ZVUHWPCmlMlAL/QKsL
P1Ne1E6hDYCwFwkedGiegv66HEQZzS6f0vi9BUfYRUsNl21aFajysOqMYO5Q98cy4lU4
umOirpHeySjhmzvXRbm64j7BRoqmrAqNOWDoOfBn1DT78+5tK8SxWO2aROpoY7y8yMzq
A5Jk9pDmLhjlRPkZNxPSqfFAo3mn4zi6PPeQzl7lpz4DiQA6HXWCubmYToM8lWr+TYT3
CzKA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748446509; x=1749051309;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=/xxvQd++y7EnTgMMEVQbGeZAD8fz0r4wC/tmiy3K++8=;
b=SkP0Q1pQ+W1hlDOhFz2WsetL6EzOKeZ/oyyzDzCMxz6hp8U9kQNBhWS2WyQqfy2ZMk
x77K9lvfbY++U0m6WOokrez5YpWNyzDXCd1iZZ1jeOZvKI6po9tuOQZbrjPt9SPzOGYF
q71Au8YfuhtZ8pgv2gEnXPQy3qjQrcfG1NCMSpCjjcM4WlGIKis6Kie4/bZD+TBLTC13
wtoM0rd3uBUm6TZ1cChRghkYGEpF9vd4dQ7gu1xcoP62qgnPOgaQq4mih8SV0QsBqX6G
XCk9yAQQAeXbQWz666ixRzhTUgnA9Gsiimk4W+DHrh4TJ2Y6umdKQ63LY8d0GllWY5/L
vtiQ==
X-Forwarded-Encrypted: i=1; AJvYcCUmStZ4Wrt9+awDCVBkHffvfKofk1nXSnWfe77bbXkWtfr1W2nVpq/BpbUTeVwzkZZvC+/8AB5BqRmmqMY=@vger.kernel.org
X-Gm-Message-State: AOJu0YxQUFBxAs4JrFLquUaK0huoxhUCDQeWRiaqPoEM/12/s0hhKscB
JB9od22dJHlY2KgZ9zS3FDdXiAZiEAR3NMe9FzUETDweYaojstTIsA0SqyFPdOwd03E=
X-Gm-Gg: ASbGncv8RN6E97mS/jFy5n3pBbtVpX6GArE2ZYe7wPYvRS4Uj0PREX4oFzpqW6mXt4b
FqIKiDSTtT9Gn76XXKN5uHv5YXzAaIz7okMOi+9E0nzJsie2g7z6lYEU4U0P47WbWioYFNQYlkw
gjZf2cQ1M/J9R4Vhd2KXmKb6aKhg54TEQ/CnUhD1RbBquaa9me3jmRADGofMYYHl03lWdS6PSz0
iUyiSEbqJoaCxZRI35YQQaVMFPIS41TII9s0HUVpT9khIzgCFgBdnNTWY4JI7KZQubYHn099Rn2
cxI2ykg3skrkleTuAz0DXtUXrtDp4UkfTVGHX/UhY5ZnjxlK1izXHNja1tKltcvpw6KmQeZjxer
KewR8sWKC0a13mJwV3Cs=
X-Google-Smtp-Source: AGHT+IFNri4VZP668TZRiLiVPchub4mhmoXvwTtePdpwff5wJ8RFOvLtGPEDClrpn0GJacLg8abqsA==
X-Received: by 2002:a05:6902:284a:b0:e7d:d181:3261 with SMTP id 3f1490d57ef6-e7dd18132cdmr6259259276.12.1748446509526;
Wed, 28 May 2025 08:35:09 -0700 (PDT)
Received: from mail-yb1-f170.google.com (mail-yb1-f170.google.com. [209.85.219.170])
by smtp.gmail.com with ESMTPSA id 3f1490d57ef6-e7f61886a4esm310749276.51.2025.05.28.08.35.09
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 08:35:09 -0700 (PDT)
Received: by mail-yb1-f170.google.com with SMTP id 3f1490d57ef6-e731a56e111so3785596276.1;
Wed, 28 May 2025 08:35:09 -0700 (PDT)
X-Forwarded-Encrypted: i=1; AJvYcCVtWG0GRt0ueE9Bnw+z5uDi3NBhwM6UlHEkBgYKgTabLXCDvRMYps9cwT6EhqaFP231qz7VupN+TgbO/u83@xxxxxxxxxxxxxxx, AJvYcCVv36bTNyd5YP21/E6+JlVkVtn+zrJNhfv4F8gR/T/1fQeS0yTtj2Ko0ilZ4LSjGCk24JmbDo4tHtUhbEc=@vger.kernel.org, AJvYcCWGDV84Ogd40UFv9hvP8jhFE5RaqDpg6uEP8PT0b/e9Fjh4VZ4iwph92joOzqp6VbWz9CTGjKEbbb/i@xxxxxxxxxxxxxxx, AJvYcCWgQSwxv1usGpPzWqRPEGXgb0a3v0n1DBzHoZx6Ztl1ItBke5heeIbv5CAolA/EkD4EaouecC9lGjEd@xxxxxxxxxxxxxxx
X-Received: by 2002:a05:6902:1021:b0:e7d:ca07:a144 with SMTP id
3f1490d57ef6-e7dca07a23dmr8541656276.5.1748446509068; Wed, 28 May 2025
08:35:09 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250520-6-10-rocket-v5-0-18c9ca0fcb3c@xxxxxxxxxxxxxxx>
<20250520-6-10-rocket-v5-1-18c9ca0fcb3c@xxxxxxxxxxxxxxx> <CAL_Jsq+2mvUDWWvtPSryAiCNJP_=1vNRxARxWTS=-O-LTQO3Dg@xxxxxxxxxxxxxx>
In-Reply-To: <CAL_Jsq+2mvUDWWvtPSryAiCNJP_=1vNRxARxWTS=-O-LTQO3Dg@xxxxxxxxxxxxxx>
From: Tomeu Vizoso <tomeu@xxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 17:34:57 +0200
X-Gmail-Original-Message-ID: <CAAObsKDE33kZ27XbgeWBqQzrZXDHwHzp2Q6A7y_osC50UG-n7g@xxxxxxxxxxxxxx>
X-Gm-Features: AX0GCFtwrQfY2JjemntUXNTLyymu_4uxtqwB53YlQ42a11mlnVkp6EMD0QhiJuw
Message-ID: <CAAObsKDE33kZ27XbgeWBqQzrZXDHwHzp2Q6A7y_osC50UG-n7g@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v5 01/10] dt-bindings: npu: rockchip,rknn: Add bindings
To: Rob Herring <robh@xxxxxxxxxx>
Cc: Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>, Conor Dooley <conor+dt@xxxxxxxxxx>,
Heiko Stuebner <heiko@xxxxxxxxx>, Oded Gabbay <ogabbay@xxxxxxxxxx>, Jonathan Corbet <corbet@xxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>, Maxime Ripard <mripard@xxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>, David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
Sumit Semwal <sumit.semwal@xxxxxxxxxx>, =?UTF-8?Q?Christian_K=C3=B6nig?= <christian.koenig@xxxxxxx>,
Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx>,
Nicolas Frattaroli <nicolas.frattaroli@xxxxxxxxxxxxx>, Jeff Hugo <jeff.hugo@xxxxxxxxxxxxxxxx>,
devicetree@xxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx,
linux-rockchip@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, linux-doc@xxxxxxxxxxxxxxx,
linux-media@xxxxxxxxxxxxxxx, linaro-mm-sig@xxxxxxxxxxxxxxxx,
Kever Yang <kever.yang@xxxxxxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 3:41=E2=80=AFPM Rob Herring <robh@xxxxxxxxxx> wrote=
:
>
> On Tue, May 20, 2025 at 5:27=E2=80=AFAM Tomeu Vizoso <tomeu@tomeuvizoso.n=
et> wrote:
> >
> > Add the bindings for the Neural Processing Unit IP from Rockchip.
> >
> > v2:
> > - Adapt to new node structure (one node per core, each with its own
> > IOMMU)
> > - Several misc. fixes from Sebastian Reichel
> >
> > v3:
> > - Split register block in its constituent subblocks, and only require
> > the ones that the kernel would ever use (Nicolas Frattaroli)
> > - Group supplies (Rob Herring)
> > - Explain the way in which the top core is special (Rob Herring)
> >
> > v4:
> > - Change required node name to npu@ (Rob Herring and Krzysztof Kozlowsk=
i)
> > - Remove unneeded items: (Krzysztof Kozlowski)
> > - Fix use of minItems/maxItems (Krzysztof Kozlowski)
> > - Add reg-names to list of required properties (Krzysztof Kozlowski)
> > - Fix example (Krzysztof Kozlowski)
> >
> > v5:
> > - Rename file to rockchip,rk3588-rknn-core.yaml (Krzysztof Kozlowski)
> > - Streamline compatible property (Krzysztof Kozlowski)
> >
> > Signed-off-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx>
> > Signed-off-by: Tomeu Vizoso <tomeu@xxxxxxxxxxxxxxx>
> > ---
> > .../bindings/npu/rockchip,rk3588-rknn-core.yaml | 147 +++++++++++++=
++++++++
> > 1 file changed, 147 insertions(+)
> >
> > diff --git a/Documentation/devicetree/bindings/npu/rockchip,rk3588-rknn=
-core.yaml b/Documentation/devicetree/bindings/npu/rockchip,rk3588-rknn-cor=
e.yaml
> > new file mode 100644
> > index 0000000000000000000000000000000000000000..9eb426367afcbc03c387d43=
c4b8250cdd1b9ee86
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/npu/rockchip,rk3588-rknn-core.y=
aml
> > @@ -0,0 +1,147 @@
> > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/npu/rockchip,rk3588-rknn-core.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: Neural Processing Unit IP from Rockchip
> > +
> > +maintainers:
> > + - Tomeu Vizoso <tomeu@xxxxxxxxxxxxxxx>
> > +
> > +description:
> > + Rockchip IP for accelerating inference of neural networks, based on =
NVIDIA's
> > + open source NVDLA IP.
> > +
> > + There is to be a node per each core in the NPU. In Rockchip's design=
there
> > + will be one core that is special and needs to be powered on before a=
ny of the
> > + other cores can be used. This special core is called the top core an=
d should
> > + have the compatible string that corresponds to top cores.
>
> Is this really a distinction in the h/w? If you change which core is
> the top one in the DT, does it still work?
No, I really need to power on that one before the others can work (the
first core is also marked as special in a diagram in the TRM).
> > +
> > +properties:
> > + $nodename:
> > + pattern: '^npu@[a-f0-9]+$'
> > +
> > + compatible:
> > + enum:
> > + - rockchip,rk3588-rknn-core-top
> > + - rockchip,rk3588-rknn-core
> > +
> > + reg:
> > + maxItems: 3
> > +
> > + reg-names:
> > + items:
> > + - const: pc
> > + - const: cna
> > + - const: core
> > +
> > + clocks:
> > + minItems: 2
> > + maxItems: 4
> > +
> > + clock-names:
> > + items:
> > + - const: aclk
> > + - const: hclk
> > + - const: npu
> > + - const: pclk
> > + minItems: 2
>
> It is odd that the non-top cores only have bus clocks and no module
> clock. But based on the clock names, I'm guessing the aclk/hclk are
> not shared, but the npu and pclk are shared. Since you make the top
> core probe first, then it will enable the shared clocks and the
> non-top cores don't have to worry about them. If so, that is wrong as
> it is letting the software design define the bindings.
Yes, I think it's probably as you say, but I don't know how I could
check. Maybe Kever, Heiko or Sebastian would have any ideas?
Thanks,
Tomeu
Return-Path: <linux-kernel+bounces-665725-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 3B27741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:36:16 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 25FDC1BC5111
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:36:29 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id D39AA288534;
Wed, 28 May 2025 15:36:07 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="RdmWONcg"
Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010023.outbound.protection.outlook.com [52.101.84.23])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id A87832750E8;
Wed, 28 May 2025 15:36:03 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.23
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446566; cv=fail; b=RFPbp5NeMe9hWDhIHwQfDDomwtEFjMca8CP1DDFfzoiRNkW8XbldE2/4OU4GC7V+XTNkXq9ECZru6OizfK0ygrBxXio1ObqmKk81WwTvCmsd0qq8I8r8tK8yiuA5RVo3w7NYVufiUX1Rx6c6vuYoKHwdEsjK824vCODfzgMs0j0=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446566; c=relaxed/simple;
bh=Sla6yuvYLV5oSCe5qkFiI6IRJ5XgFi7+LOA27nLN0fw=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=s7FNh5hQ0xtqPgGvdB+PwKOIHUGd6Onmsb4t3Ldm9HmCqzT2mPeo36hmPuavlpucAIBLAdESNd50SWduuI95DnAy8JGy+IFkIvj4ssDif7GUxeTt6PsRgab9eIT1W7L+ARCUOdSWhdVvpPsZTCWB4EQcJT/Z6Yax+1RR1kbpVYM=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=RdmWONcg; arc=fail smtp.client-ip=52.101.84.23
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=VGxrX2MduLtoGvTJ5FfLcGroKkxZ9shUkQ2ExPaK4LqW8qhLgbt/Dx5s+IBMJ41LweevJjJKY9/wwmGqg5eWZKdr05lLXq1Abp8OPAfaaHqUdUUiJ8XlB3PbT+TIHT4F5pVMjKbnTeCsaaCAvA7lYV3ghziUZq0CIyYjAMhMdy2Jqfvs7mWst9LWH1/v7XgURmV5+EOQBQ0u/3LJfwMBRG0T5ts2lp0Ap6nAaPjzez4RhD4gn4syw38WjaqkgTPrXavSFTbVk+UZa6ikFaachir0QZT0IwjjbfiiVq3X1Pdbzw8uwRDd+gJHcEfzLaI+MxMkJbwPVubhu32bSdzZYw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=w+7zQ2o+FwKDg46WFIBroyECXa70RRbkpBUp8D3oHhs=;
b=OXXpHUEDjTpDzHpjuswit7s0h8kC/ob7l2QSGw7Vklr/RgArnOFXB1dKE6eqdUqHAzvIu18++8UX/0LnzMNzMB7NHhd/EcgA475VeIajSht6IWUZMXmv3pDBNx3jVrFdCSWDKdiAi7sbTnwmPR0uzgj5Du+MW2N+fa/YsamXOaiEv4z+aW6AHbFonwb2LFmMRMhO7XfqOUj+TKM9neI00dVWmZraaacw7Zd0ld5blfoMKhWWfYGk04i6z6i+KIW/GYcMfP608RB8ZTwf7ALaWsMSBi0HONmBC5uw7grPExRqo9yoyuP+lhVxfNIi5VXEDbSBnUGPwLvrgD5N++OkxQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=w+7zQ2o+FwKDg46WFIBroyECXa70RRbkpBUp8D3oHhs=;
b=RdmWONcgTDkqq5kmqRl5wY6EPMRJo6UMVQes4ikGj14Swl7QuTOu29aGbqywvXI5ZW+nyxcZWEB9OuqMRSIqqONeXDUEgHiNhVj81DJkw5HbDR5lWTsXOHOwx4uRFf1PCg8bZF5AfdSe+oDuWzCVVTBC9p28CGy4STQqL1sH/EPx8WvDRm/YX/r4CwCGneX8m3NgK5+i62NLJfM4B4oGtLVR78NXOFFLQhgx/E1+TVfGQjMZCfa9tHcakuhh8gjpaRPu4tk8u7EhrMIlh3u/6AAZKj+KA2FyHhqSqyCyh7dfG7H7qfwpU6/YC+cwutkEKnhP6QdG/B0DlfSkrIhDHg==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by GV2PR04MB11424.eurprd04.prod.outlook.com (2603:10a6:150:2a2::20) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.29; Wed, 28 May
2025 15:36:00 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
15:36:00 +0000
Date: Wed, 28 May 2025 11:35:52 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: Alexander Stein <alexander.stein@xxxxxxxxxxxxxxx>
Cc: Rob Herring <robh@xxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>, Shawn Guo <shawnguo@xxxxxxxxxx>,
Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>,
Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>,
Fabio Estevam <festevam@xxxxxxxxx>,
Gregor Herburger <gregor.herburger@xxxxxxxxxxxx>,
devicetree@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
imx@xxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx,
linux@xxxxxxxxxxxxxxx
Subject: Re: [PATCH 2/2] arm64: dts: ls1028a: Add mbls1028a and mbls1028a-ind
devicetrees
Message-ID: <aDctWKIvBKwF29lP@lizhi-Precision-Tower-5810>
References: <20250527060400.1005757-1-alexander.stein@xxxxxxxxxxxxxxx>
<20250527060400.1005757-2-alexander.stein@xxxxxxxxxxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250527060400.1005757-2-alexander.stein@xxxxxxxxxxxxxxx>
X-ClientProxiedBy: PH7PR17CA0022.namprd17.prod.outlook.com
(2603:10b6:510:324::7) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|GV2PR04MB11424:EE_
X-MS-Office365-Filtering-Correlation-Id: 7472d3df-c696-4f65-85ee-08dd9dfd58bf
X-LD-Processed: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635,ExtAddr
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|366016|1800799024|52116014|7416014|376014|38350700014|7053199007;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?HNRUEw8PVyWz++Ur0utJ4vymjFkZSD3GG4mjrocZB+ashLHp2apLRkLm1ASN?=
=?us-ascii?Q?jvW8TVErPJ3q0lX12PhvNYbQ1PvvkzaDGszomonb7dBKLRk4S9E27rUgqeZ3?=
=?us-ascii?Q?hb8Tz2k6EcvGqa+CjyKMGrQKi+7Lg9SU9sidjMIMb4s4l3Xm0eK1WwneRR+u?=
=?us-ascii?Q?nW1oPVDsbCe2QREM14e6GLjkYaDZfAt08/idruC/FXQLz2BmGV/ojrfTPFsq?=
=?us-ascii?Q?eA+bUlAjHAumMAL/Rr3cvinuWNwP5jHio4PApch6qfaGmGgL1mUQe+rPZCCL?=
=?us-ascii?Q?61Ui7RfCwnChGvs8vto7Cz+3jZFKtsjy8c0ABPftsj6V3S0DZ4ATmdk4RqVn?=
=?us-ascii?Q?sdwQ+PmJqEA76HzUuc0dRpywCQedBOqZM8CnshIkKZfAxl/sWmeeOj15rjEy?=
=?us-ascii?Q?N/eDYkMyW44tt/2sz55SUQ/c/u92AWgHRCxjjanbEi39jBOSHCm9wIevVu6J?=
=?us-ascii?Q?K86uPG+sQDIy1V9dP5lAS42aIg0YajEWI2Rl5bSQrf/aVoPaujhoVVTeFRx4?=
=?us-ascii?Q?Y6lz8O2oxtacSpIjlp5zABemXtGcM4yt5i6Gv4Dlb8GgpaLEYXDP2LDKsmIL?=
=?us-ascii?Q?lFmijRlxunVpGa/iupJQNNOmVUZvZ+wqJo0FOv+FkMDPOPcK0ae9MEL97bzi?=
=?us-ascii?Q?/IEM4qPdQ/PTUnaeDhdISHyTE7C+NeP5GyZF3Y75Nw9/YyrkI+2YFsGjw2hh?=
=?us-ascii?Q?P9I4hTeXkG848fWWwRXCMe58gx8HwchNN2Qx445LIDczn5c269stkShsMXwh?=
=?us-ascii?Q?BEoXCf1G2gZFEuUZB1A6fzRFHT5fvLeEL4caWVgRd2jsnoJ/9iVP2+bXx3Qs?=
=?us-ascii?Q?eRUuJLhhbmuCO1q+OzgucPaT1/lL3tzaRoNfhn2kgmlVFz4WccFlGFs9p14L?=
=?us-ascii?Q?D3rFWyHlJqithQFyXsLKdgrSDOeCVKyqY3aDzWeiTHf8A4DCju4tHiFS8yVh?=
=?us-ascii?Q?MJxQTF9AP/8q+/d3RAjkOvyBlXW292Eal6On6cSdqa1lTuSdgy+i0uRBgatz?=
=?us-ascii?Q?+NnxW/AVQiIWIC8rtw3LRbcea3C1Gc99Y+7nWC8yHzeo271QB2H/t/wx+r7X?=
=?us-ascii?Q?Ha6bma46w6jTmKvinC2rnrleaR8z02WIekG51sYSwVg2rfvs+g0KgDbau5EZ?=
=?us-ascii?Q?zmbuKIA4xjUZ0LnqLepi5cYON2M4ry2Kyjw0SFcJV2qA/eRNLHOt8LoR51MZ?=
=?us-ascii?Q?bOorF6qa1R2Dz7Co3lCELCguqBEiTuVCJGrFtp3racV+y9lzjjretWj5Usng?=
=?us-ascii?Q?WVbUnmp9E7vpR+OCnrTz3NhFnx8yDMLIubfJYzASsPbQBBxYECOABX4qEvje?=
=?us-ascii?Q?8m4ECN5gGBcpLq1qugWrDag0gouO4mNARwlhxfr3s88a0He09l2Rlu7jOn3d?=
=?us-ascii?Q?irhh1TF/59qJsadeu41kQCGhsRLT48Htm0LwhxpxsbJXlUFrXWw88n2IGJrp?=
=?us-ascii?Q?7xt/WDZhzZ6Fo5ElQahxNFQKVADy1CNDcySrb0wFLhzr62wf6tFV9TEK0PiV?=
=?us-ascii?Q?H4pOcr51MNRq/B8=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(52116014)(7416014)(376014)(38350700014)(7053199007);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?62O9qscNTttcni2Al9gLTsidlx0DYXYiIfxr01f7uVexCYDDUXC+P39MPNFu?=
=?us-ascii?Q?AvFpYsnKidfxgtZ0st9nT+KFqxO4PwJmQS5kdFWMX8B75sahP9ZTJSHGN2Kj?=
=?us-ascii?Q?Z/DVLlLVcLMhUujAoNmVfPhjZsmeruf2lK2x9DGLsVXNFph+Qv7VlUOjcVFm?=
=?us-ascii?Q?dkorspzNRAig4+4Igj6bnfE0ivRqS5THMyAVuleXIUfHw6IwLgIaYgQYKGOz?=
=?us-ascii?Q?IWeMg3BnXaho1ti9t2UGTmsQVhoxusH02AMVh1nGFS5IDueX/ddOl9YgJ7oY?=
=?us-ascii?Q?BbS8uMWymv6WtkGF0mwwvQIghv2E13+zpX4zwld2DSue6C24uchXu4ReiJ5Q?=
=?us-ascii?Q?nx7MFebL0WU7rMcAtEhT71sMGt0lD+v0bFb09HDa8mJZOvGnZYcvV9WU8BNr?=
=?us-ascii?Q?Q/7s2j4LZYP4Uz2NSfDJQEKolxkQYyeRfrasJnHCvMklqLQMesq4xpHiYDt/?=
=?us-ascii?Q?0mqzRzAKDOdDY6EckaV0hZzC2XGRMTTtbglAiSuLUZCvx7d1gLDbKIz8L5af?=
=?us-ascii?Q?dDWWY1wDEy1ibOVN00bWcCuGzzj9Q6x+wNmCh8l6pQbEJy47WzOSBeOf9eq0?=
=?us-ascii?Q?0IVGTCHSRItegCL1lm6S6mW/2XoCL/wpOJsmCHqbfIqtpBYFmF2gxpQE+rR+?=
=?us-ascii?Q?sTiWNeYYblHVYg95r88WNEASBQbjyarDVQcTre0vsnyMbzPh3CLOylywvzwi?=
=?us-ascii?Q?rpz3HBWh5c4xx+R9fzM5UlYwH9/RnWSgfjI60YlB+/ObaHGFKbSE0WSYPZwd?=
=?us-ascii?Q?xhJs3eqmGfxrzrMoJyJDeVAUdO1ishkDDBBI09eyfQt+ytFrYX9wPDgmFGvW?=
=?us-ascii?Q?zehqSuKbfFqPr4tg4Gt2PVZO6OHQ2/PYxkyYrAHx94w7czjZCqwhhLiY2nww?=
=?us-ascii?Q?6fQxyXwb6TdLCyWfNqFjIeYL2MkMiuG8B2oRV3B36V/0CzY23AfHNU36lDs0?=
=?us-ascii?Q?QotM0lR7qVwPHQShwS2/aImtgwRNwXOpdEimFTK1EKUznwSsKG+MCkO8JIhy?=
=?us-ascii?Q?7cKiIhnNN+y2ROFs6wjzAx+qvAYzeZKnUlu+tMjf0UTKQu3gf4ugFQr6wnsK?=
=?us-ascii?Q?pYpig6TN4Pj7007cuPx5+Pm9dCPj1EyZaGswEpQNGVbRC4d9yh68/TflSalz?=
=?us-ascii?Q?rxUa3xiBlo4Di5m/j7ujeaA9I3sd9hTDnC+H7Y+UJWAH0gXf+0ByqfB3ZJMD?=
=?us-ascii?Q?8KOkc7jGR5cXGF8c7yGCOaNJ2H6S9K+OIpT07ZYgpvdi/EGLAiDd7PTRi2Gy?=
=?us-ascii?Q?rJybGmB1HjQekswT0xnskmipJp9M8fzeZhhicTk2h3Ctj4LgrZ1TAzdgHnSU?=
=?us-ascii?Q?VHpHOd5EmiZSVqBodCSJilxSCXtS1AjNJExJRNFL128zHYGXsRFoN6ZtLUjE?=
=?us-ascii?Q?aLvxYde6Q2wUayDSydTnOIO3U9Or17nevyTfVVSNGlL1ETuj9ksbimvc/lRS?=
=?us-ascii?Q?v+rB5qK4eUiaOtRFgIGPF+wV/4MStsssm6pHs1xigETZAxauL9DxuowwEg/S?=
=?us-ascii?Q?v/NPJi5xQfINoEwF+Nq9nLllQ6k9F/jHeYoJQeiZfgHJceE0uNwcWg+jv4Es?=
=?us-ascii?Q?NgDt9ywJLVQh38v9pkk=3D?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 7472d3df-c696-4f65-85ee-08dd9dfd58bf
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:36:00.2154
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 3LZHV4wsrpHpNoeCkaGm17StpB2jojS+nLUivBLjXbgJ3TC8dRRdczrYT2V7O0gcXI3CoARk+7rIMpZT1r3HfA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB11424
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 08:03:55AM +0200, Alexander Stein wrote:
> From: Gregor Herburger <gregor.herburger@xxxxxxxxxxxx>
>
> Add device trees for the MBLS1028A and the MBLS1028A-IND and the SoM
> TQMLS1028A.
>
> Signed-off-by: Gregor Herburger <gregor.herburger@xxxxxxxxxxxx>
> Signed-off-by: Alexander Stein <alexander.stein@xxxxxxxxxxxxxxx>
> ---
> arch/arm64/boot/dts/freescale/Makefile | 2 +
> .../fsl-ls1028a-tqmls1028a-mbls1028a-ind.dts | 68 ++++
> .../fsl-ls1028a-tqmls1028a-mbls1028a.dts | 118 +++++++
> .../fsl-ls1028a-tqmls1028a-mbls1028a.dtsi | 291 ++++++++++++++++++
> .../dts/freescale/fsl-ls1028a-tqmls1028a.dtsi | 117 +++++++
New dts file, suggest run https://github.com/lznuaa/dt-format to nice order
Frank
> 5 files changed, 596 insertions(+)
> create mode 100644 arch/arm64/boot/dts/freescale/fsl-ls1028a-tqmls1028a-mbls1028a-ind.dts
> create mode 100644 arch/arm64/boot/dts/freescale/fsl-ls1028a-tqmls1028a-mbls1028a.dts
> create mode 100644 arch/arm64/boot/dts/freescale/fsl-ls1028a-tqmls1028a-mbls1028a.dtsi
> create mode 100644 arch/arm64/boot/dts/freescale/fsl-ls1028a-tqmls1028a.dtsi
>
> diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
> index 75ea65d718c1f..38674e4eeb4c3 100644
> --- a/arch/arm64/boot/dts/freescale/Makefile
> +++ b/arch/arm64/boot/dts/freescale/Makefile
> @@ -16,6 +16,8 @@ dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-ls1028a-kontron-sl28-var3-ads2.dtb
> dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-ls1028a-kontron-sl28-var4.dtb
> dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-ls1028a-qds.dtb
> dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-ls1028a-rdb.dtb
> +dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-ls1028a-tqmls1028a-mbls1028a.dtb
> +dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-ls1028a-tqmls1028a-mbls1028a-ind.dtb
> dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-ls1043a-qds.dtb
> dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-ls1043a-rdb.dtb
> dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-ls1043a-tqmls1043a-mbls10xxa.dtb
> diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1028a-tqmls1028a-mbls1028a-ind.dts b/arch/arm64/boot/dts/freescale/fsl-ls1028a-tqmls1028a-mbls1028a-ind.dts
> new file mode 100644
> index 0000000000000..fb735c5d475ad
> --- /dev/null
> +++ b/arch/arm64/boot/dts/freescale/fsl-ls1028a-tqmls1028a-mbls1028a-ind.dts
> @@ -0,0 +1,68 @@
> +// SPDX-License-Identifier: (GPL-2.0-or-later OR MIT)
> +/*
> + * Copyright 2019-2025 TQ-Systems GmbH <linux@xxxxxxxxxxxxxxx>,
> + * D-82229 Seefeld, Germany.
> + * Author: Michael Krummsdorf
> + * Author: Matthias Schiffer
> + * Author: Alexander Stein
> + */
> +
> +/dts-v1/;
> +
> +#include "fsl-ls1028a-tqmls1028a-mbls1028a.dtsi"
> +
> +/ {
> + model = "MBLS1028A-IND starterkit";
> + compatible = "tq,ls1028a-tqmls1028a-mbls1028a-ind", "tq,ls1028a-tqmls1028a", "fsl,ls1028a";
> +};
> +
> +&i2c5 {
> + gpio_exp_3v3: gpio@71 {
> + compatible = "nxp,pca9538";
> + reg = <0x71>;
> + gpio-controller;
> + #gpio-cells = <2>;
> +
> + clk-intn-hog {
> + gpio-hog;
> + gpios = <0 GPIO_ACTIVE_HIGH>;
> + input;
> + line-name = "CLK_INT#";
> + };
> +
> + mpcie-waken-hog {
> + gpio-hog;
> + gpios = <2 GPIO_ACTIVE_HIGH>;
> + input;
> + line-name = "MPCIE_WAKE#";
> + };
> +
> + mpcie-disn-hog {
> + gpio-hog;
> + gpios = <3 GPIO_ACTIVE_HIGH>;
> + output-high;
> + line-name = "MPCIE_DIS#";
> + };
> +
> + mpcie-rstn-hog {
> + gpio-hog;
> + gpios = <4 GPIO_ACTIVE_HIGH>;
> + output-high;
> + line-name = "MPCIE_RST#";
> + };
> +
> + sata-perstn-hog {
> + gpio-hog;
> + gpios = <6 GPIO_ACTIVE_HIGH>;
> + output-high;
> + line-name = "SATA_PERST#";
> + };
> +
> + dcdc-reset-hog {
> + gpio-hog;
> + gpios = <7 GPIO_ACTIVE_HIGH>;
> + output-low;
> + line-name = "DCDC_RESET";
> + };
> + };
> +};
> diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1028a-tqmls1028a-mbls1028a.dts b/arch/arm64/boot/dts/freescale/fsl-ls1028a-tqmls1028a-mbls1028a.dts
> new file mode 100644
> index 0000000000000..c5590c6d23995
> --- /dev/null
> +++ b/arch/arm64/boot/dts/freescale/fsl-ls1028a-tqmls1028a-mbls1028a.dts
> @@ -0,0 +1,118 @@
> +// SPDX-License-Identifier: (GPL-2.0-or-later OR MIT)
> +/*
> + * Copyright 2019-2025 TQ-Systems GmbH <linux@xxxxxxxxxxxxxxx>,
> + * D-82229 Seefeld, Germany.
> + * Author: Michael Krummsdorf
> + * Author: Matthias Schiffer
> + * Author: Alexander Stein
> + */
> +
> +/dts-v1/;
> +
> +#include <dt-bindings/input/input.h>
> +#include <dt-bindings/leds/common.h>
> +#include "fsl-ls1028a-tqmls1028a-mbls1028a.dtsi"
> +
> +/ {
> + model = "MBLS1028A starterkit";
> + compatible = "tq,ls1028a-tqmls1028a-mbls1028a", "tq,ls1028a-tqmls1028a", "fsl,ls1028a";
> +
> + gpio-keys {
> + compatible = "gpio-keys";
> + autorepeat;
> +
> + button-0 {
> + label = "S4";
> + linux,code = <BTN_0>;
> + gpios = <&gpio_exp_3v3 11 GPIO_ACTIVE_LOW>;
> + };
> +
> + button-1 {
> + label = "S5";
> + linux,code = <BTN_1>;
> + gpios = <&gpio_exp_3v3 12 GPIO_ACTIVE_LOW>;
> + };
> + };
> +
> + gpio-beeper {
> + compatible = "gpio-beeper";
> + gpios = <&gpio_exp_3v3 15 GPIO_ACTIVE_HIGH>;
> + };
> +
> + gpio-leds {
> + compatible = "gpio-leds";
> +
> + led-1 {
> + color = <LED_COLOR_ID_GREEN>;
> + function = LED_FUNCTION_STATUS;
> + function-enumerator = <1>;
> + gpios = <&gpio_exp_3v3 14 GPIO_ACTIVE_HIGH>;
> + linux,default-trigger = "default-on";
> + };
> +
> + led-2 {
> + color = <LED_COLOR_ID_GREEN>;
> + function = LED_FUNCTION_HEARTBEAT;
> + gpios = <&gpio_exp_3v3 13 GPIO_ACTIVE_HIGH>;
> + linux,default-trigger = "heartbeat";
> + };
> + };
> +};
> +
> +&i2c5 {
> + gpio_exp_3v3: gpio@25 {
> + compatible = "nxp,pca9555";
> + reg = <0x25>;
> + gpio-controller;
> + #gpio-cells = <2>;
> + interrupt-controller;
> + #interrupt-cells = <2>;
> + interrupt-parent = <&gpio1>;
> + interrupts = <30 IRQ_TYPE_LEVEL_LOW>;
> + vcc-supply = <®_3p3v>;
> +
> + clk-intn-hog {
> + gpio-hog;
> + gpios = <0 GPIO_ACTIVE_HIGH>;
> + input;
> + line-name = "CLK_INT#";
> + };
> +
> + mpcie-waken-hog {
> + gpio-hog;
> + gpios = <2 GPIO_ACTIVE_HIGH>;
> + input;
> + line-name = "MPCIE_WAKE#";
> + };
> +
> + mpcie-disn-hog {
> + gpio-hog;
> + gpios = <3 GPIO_ACTIVE_HIGH>;
> + output-high;
> + line-name = "MPCIE_DIS#";
> + };
> +
> + mpcie-rstn-hog {
> + gpio-hog;
> + gpios = <4 GPIO_ACTIVE_HIGH>;
> + output-high;
> + line-name = "MPCIE_RST#";
> + };
> +
> + sata-perstn-hog {
> + gpio-hog;
> + gpios = <6 GPIO_ACTIVE_HIGH>;
> + output-high;
> + line-name = "SATA_PERST#";
> + };
> + };
> +};
> +
> +&gpio_exp_1v8 {
> + dcdc-reset-hog {
> + gpio-hog;
> + gpios = <6 GPIO_ACTIVE_HIGH>;
> + output-low;
> + line-name = "DCDC_RESET";
> + };
> +};
> diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1028a-tqmls1028a-mbls1028a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1028a-tqmls1028a-mbls1028a.dtsi
> new file mode 100644
> index 0000000000000..6261100f3413a
> --- /dev/null
> +++ b/arch/arm64/boot/dts/freescale/fsl-ls1028a-tqmls1028a-mbls1028a.dtsi
> @@ -0,0 +1,291 @@
> +// SPDX-License-Identifier: (GPL-2.0-or-later OR MIT)
> +/*
> + * Copyright 2019-2025 TQ-Systems GmbH <linux@xxxxxxxxxxxxxxx>,
> + * D-82229 Seefeld, Germany.
> + * Author: Michael Krummsdorf
> + * Author: Matthias Schiffer
> + * Author: Alexander Stein
> + */
> +
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/net/ti-dp83867.h>
> +#include "fsl-ls1028a-tqmls1028a.dtsi"
> +
> +/ {
> + aliases {
> + gpio0 = &gpio1;
> + gpio1 = &gpio2;
> + gpio2 = &gpio3;
> +
> + crypto = &crypto;
> +
> + mmc0 = &esdhc; /* SD-Card */
> + mmc1 = &esdhc1; /* eMMC */
> +
> + serial0 = &duart0;
> + serial1 = &duart1;
> + };
> +
> + chosen {
> + stdout-path = &duart0;
> + };
> +
> + reg_1p8v: regulator-1p8v {
> + compatible = "regulator-fixed";
> + regulator-name = "V_1V8";
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> + regulator-always-on;
> + };
> +
> + reg_3p3v: regulator-3p3v {
> + compatible = "regulator-fixed";
> + regulator-name = "V_3V3";
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3300000>;
> + regulator-always-on;
> + };
> +
> + reserved-memory {
> + #address-cells = <2>;
> + #size-cells = <2>;
> + ranges;
> +
> + /* global autoconfigured region for contiguous allocations */
> + linux,cma {
> + compatible = "shared-dma-pool";
> + reusable;
> + /* 256 MiB */
> + size = <0 0x10000000>;
> + linux,cma-default;
> + };
> + };
> +};
> +
> +&can0 {
> + status = "okay";
> +};
> +
> +&can1 {
> + status = "okay";
> +};
> +
> +&dspi2 {
> + bus-num = <2>;
> + status = "okay";
> +};
> +
> +&duart0 {
> + status = "okay";
> +};
> +
> +&duart1 {
> + status = "okay";
> +};
> +
> +&esdhc {
> + cd-gpios = <&gpio1 31 GPIO_ACTIVE_LOW>;
> + disable-wp;
> + no-mmc;
> + no-sdio;
> + no-1-8-v;
> + bus-width = <4>;
> + status = "okay";
> +};
> +
> +/* When switched to baseboard-internal i2c bus,
> + * IIC5 has access to the following devices.
> + */
> +&i2c4 {
> + status = "okay";
> +
> + /* SI5338 - set up in U-Boot */
> + /* clockgen@70 */
> +};
> +
> +&i2c5 {
> + status = "okay";
> +
> + gpio_exp_1v8: gpio@70 {
> + compatible = "nxp,pca9538";
> + reg = <0x70>;
> + gpio-controller;
> + #gpio-cells = <2>;
> + interrupt-controller;
> + #interrupt-cells = <2>;
> + interrupt-parent = <&gpio1>;
> + interrupts = <30 IRQ_TYPE_LEVEL_LOW>;
> + vcc-supply = <®_1p8v>;
> +
> + ec1-intn-hog {
> + gpio-hog;
> + gpios = <0 0>;
> + input;
> + line-name = "EC1_INT#";
> + };
> +
> + sgmii-intn-hog {
> + gpio-hog;
> + gpios = <2 0>;
> + input;
> + line-name = "SGMII_INT#";
> + };
> +
> + qsgmii-intn-hog {
> + gpio-hog;
> + gpios = <4 0>;
> + input;
> + line-name = "QSGMII_INT#";
> + };
> +
> + qsgmii-rstn-hog {
> + gpio-hog;
> + gpios = <5 0>;
> + output-high;
> + line-name = "QSGMII_RESET#";
> + };
> + };
> +};
> +
> +&enetc_mdio_pf3 {
> + mdio0_rgmii_phy00: ethernet-phy@0 {
> + compatible = "ethernet-phy-ieee802.3-c22";
> + reg = <0x00>;
> + reset-gpios = <&gpio_exp_1v8 1 GPIO_ACTIVE_LOW>;
> + reset-assert-us = <1>;
> + reset-deassert-us = <200>;
> + interrupt-parent = <&gpio_exp_1v8>;
> + interrupts = <0 IRQ_TYPE_EDGE_FALLING>;
> + ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_50_NS>;
> + ti,tx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
> + ti,led-function = <0x05b0>;
> + ti,led-ctrl = <0x1001>;
> + ti,clk-output-sel = <DP83867_CLK_O_SEL_OFF>;
> + ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
> + };
> +
> + mdio0_sgmii_phy03: ethernet-phy@3 {
> + compatible = "ethernet-phy-ieee802.3-c22";
> + reg = <0x03>;
> + reset-gpios = <&gpio_exp_1v8 3 GPIO_ACTIVE_LOW>;
> + /*
> + * Long reset to work around PHY incorrect strap pin sampling
> + * due to external capacitors for SGMII
> + */
> + reset-assert-us = <2500>;
> + reset-deassert-us = <200>;
> + interrupt-parent = <&gpio_exp_1v8>;
> + interrupts = <2 IRQ_TYPE_EDGE_FALLING>;
> + ti,led-function = <0x05b0>;
> + ti,led-ctrl = <0x1001>;
> + ti,clk-output-sel = <DP83867_CLK_O_SEL_OFF>;
> + ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
> + };
> +
> + qsgmii_phy1: ethernet-phy@1c {
> + reg = <0x1c>;
> + };
> +
> + qsgmii_phy2: ethernet-phy@1d {
> + reg = <0x1d>;
> + };
> +
> + qsgmii_phy3: ethernet-phy@1e {
> + reg = <0x1e>;
> + };
> +
> + qsgmii_phy4: ethernet-phy@1f {
> + reg = <0x1f>;
> + };
> +};
> +
> +&enetc_port0 {
> + phy-handle = <&mdio0_sgmii_phy03>;
> + phy-mode = "sgmii";
> + managed = "in-band-status";
> + status = "okay";
> +};
> +
> +&enetc_port1 {
> + phy-handle = <&mdio0_rgmii_phy00>;
> + phy-mode = "rgmii-id";
> + status = "okay";
> +};
> +
> +&enetc_port2 {
> + status = "okay";
> +};
> +
> +&mscc_felix {
> + status = "okay";
> +};
> +
> +/* l2switch ports */
> +&mscc_felix_port0 {
> + phy-handle = <&qsgmii_phy1>;
> + phy-mode = "qsgmii";
> + status = "okay";
> +};
> +
> +&mscc_felix_port1 {
> + phy-handle = <&qsgmii_phy2>;
> + phy-mode = "qsgmii";
> + status = "okay";
> +};
> +
> +&mscc_felix_port2 {
> + phy-handle = <&qsgmii_phy3>;
> + phy-mode = "qsgmii";
> + status = "okay";
> +};
> +
> +&mscc_felix_port3 {
> + phy-handle = <&qsgmii_phy4>;
> + phy-mode = "qsgmii";
> + status = "okay";
> +};
> +
> +&mscc_felix_port4 {
> + ethernet = <&enetc_port2>;
> + status = "okay";
> +};
> +
> +&pcie2 {
> + status = "okay";
> +};
> +
> +&sata {
> + status = "okay";
> +};
> +
> +&usb0 {
> + /* dual role is implemented, but not a full featured OTG */
> + hnp-disable;
> + srp-disable;
> + adp-disable;
> + dr_mode = "otg";
> + status = "okay";
> +};
> +
> +&usb1 {
> + dr_mode = "host";
> + #address-cells = <1>;
> + #size-cells = <0>;
> + status = "okay";
> +
> + hub_2_0: hub@1 {
> + compatible = "usb451,8142";
> + reg = <1>;
> + peer-hub = <&hub_3_0>;
> + reset-gpios = <&gpio_exp_3v3 1 GPIO_ACTIVE_LOW>;
> + vdd-supply = <®_3p3v>;
> + };
> +
> + hub_3_0: hub@2 {
> + compatible = "usb451,8140";
> + reg = <2>;
> + peer-hub = <&hub_2_0>;
> + reset-gpios = <&gpio_exp_3v3 1 GPIO_ACTIVE_LOW>;
> + vdd-supply = <®_3p3v>;
> + };
> +};
> diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1028a-tqmls1028a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1028a-tqmls1028a.dtsi
> new file mode 100644
> index 0000000000000..69aa36a3a0523
> --- /dev/null
> +++ b/arch/arm64/boot/dts/freescale/fsl-ls1028a-tqmls1028a.dtsi
> @@ -0,0 +1,117 @@
> +// SPDX-License-Identifier: (GPL-2.0-or-later OR MIT)
> +/*
> + * Copyright 2019-2025 TQ-Systems GmbH <linux@xxxxxxxxxxxxxxx>,
> + * D-82229 Seefeld, Germany.
> + * Author: Michael Krummsdorf
> + * Author: Matthias Schiffer
> + * Author: Alexander Stein
> + */
> +
> +#include "fsl-ls1028a.dtsi"
> +
> +/ {
> + compatible = "tq,ls1028a-tqmls1028a", "fsl,ls1028a";
> +
> + reg_1p8v_som: regulator-1p8v-som {
> + compatible = "regulator-fixed";
> + regulator-name = "1P8V_SOM";
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> + regulator-always-on;
> + };
> +
> + reg_3p3v_som: regulator-3p3v-som {
> + compatible = "regulator-fixed";
> + regulator-name = "3P3V_SOM";
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3300000>;
> + regulator-always-on;
> + };
> +
> + thermal-zones {
> + /delete-node/ ddr-controller;
> +
> + cluster-thermal {
> + thermal-sensors = <&sa56004_4c 1>;
> + };
> + };
> +};
> +
> +&esdhc1 {
> + no-sdio;
> + no-sd;
> + non-removable;
> + mmc-hs200-1_8v;
> + mmc-hs400-1_8v;
> + mmc-ddr-1_8v;
> + bus-width = <8>;
> + status = "okay";
> +};
> +
> +&fspi {
> + status = "okay";
> +
> + flash@0 {
> + compatible = "jedec,spi-nor";
> + reg = <0>;
> + spi-max-frequency = <100000000>;
> + spi-tx-bus-width = <4>;
> + spi-rx-bus-width = <4>;
> + vcc-supply = <®_1p8v_som>;
> +
> + partitions {
> + compatible = "fixed-partitions";
> + #address-cells = <1>;
> + #size-cells = <1>;
> + };
> + };
> +};
> +
> +&i2c0 {
> + status = "okay";
> +
> + js42_18: temperature-sensor@18 {
> + compatible = "nxp,se97b", "jedec,jc-42.4-temp";
> + reg = <0x18>;
> + };
> +
> + sa56004_4c: temperature-sensor@4c {
> + compatible = "nxp,sa56004";
> + reg = <0x4c>;
> + #thermal-sensor-cells = <1>;
> + vcc-supply = <®_3p3v_som>;
> + };
> +
> + se97_50: eeprom@50 {
> + compatible = "nxp,se97b", "atmel,24c02";
> + read-only;
> + reg = <0x50>;
> + pagesize = <16>;
> + vcc-supply = <®_3p3v_som>;
> + };
> +
> + rtc1: rtc@51 {
> + compatible = "nxp,pcf85063a";
> + reg = <0x51>;
> + quartz-load-femtofarads = <12500>;
> + };
> +
> + m24c256_57: eeprom@57 {
> + compatible = "atmel,24c256";
> + reg = <0x57>;
> + pagesize = <32>;
> + vcc-supply = <®_3p3v_som>;
> + };
> +};
> +
> +/*
> + * We use a separate sensor IC to measure core temperature. Disable the TMU
> + * as its driver can cause log spam outside of its measurement range (0-125C).
> + *
> + * Will have to be reevaluated if this DTS is ported to a mainline kernel,
> + * as both sensors of the TMU are referenced by the default LS1028A
> + * thermal-zones definitions there.
> + */
> +&tmu {
> + status = "disabled";
> +};
> --
> 2.43.0
>
Return-Path: <linux-kernel+bounces-665726-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 4FF9541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:36:34 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 6AA807B022B
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:35:15 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id AFDD828C2D0;
Wed, 28 May 2025 15:36:26 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="libzENgz"
Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.10])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id D594B28BAAB;
Wed, 28 May 2025 15:36:22 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.10
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446586; cv=none; b=d+T3j8SaxL6nLJ83jdzYMnwy9wGZvx2tH1aG5E6moG2ZPyUJ862WK9O9syUl2wFnGQPE6G3Ffj+aNqba3PUCDfT9XzmmpJmwLuO0BGvli5oRHrB0rmdn5FoSgGOBfUyWVEhfIrzBcjoPAp3w8GSk03pRoDN4jZrwoqPo4x2s1EE=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446586; c=relaxed/simple;
bh=NyxJjdO0uqLgRbXeG3fMSXDtDw3lT9wwstsorauv94E=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=c+4BNW+zegbckhqs5feQ8BnwbH8eYGSiYz6X9Qy/jw2uND318TkPbrBltVqZbaVnrP7hyu5y6L+eiudz3TghtY87KCT+3Kshy3n+vCn8SHDesJ1riFkX8llsm4H+2rGjFqLMU7aVQwucHpuwHV5ywrIFzOKu7PkU9RG1pLesqI8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=libzENgz; arc=none smtp.client-ip=198.175.65.10
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748446583; x=1779982583;
h=date:from:to:cc:subject:message-id:references:
mime-version:content-transfer-encoding:in-reply-to;
bh=NyxJjdO0uqLgRbXeG3fMSXDtDw3lT9wwstsorauv94E=;
b=libzENgzVfyjEj0jizhiCOsdiGQZqTZLhyIwQt1pV97WXDEnanIRKSK/
XgTOuaySKZ4HuU0xR/iY75ezSfANsGTB01GSE3eotrho12Bp9vpEybkAo
OVb4OHmwiM5Zid4BtQ/Abs+HbFTKTvJZQtPL1dpL838EDy8AZ98Vtcsz6
4si2W4BJuTKQ9KXZ295vRjCVpgWNCTG3Fj0fhW+o7aW6X7MXxMEmkoWci
tUvy3ufRbF7V2C8yiHmixHSBOYmjwRS5wQ4BBXc/QK+dnmr7el1F56JdI
8eBPy/v9Yf1RsKfqUPhnKAcuerUTg3b4X/OMFqK8IhWfj3KqBnMdmr5mU
Q==;
X-CSE-ConnectionGUID: Rv0CnB5MQfOvPyeaqlZ4sQ==
X-CSE-MsgGUID: OZYz5iRgTMi5hnXE1RXtHg==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="67894315"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="67894315"
Received: from fmviesa003.fm.intel.com ([10.60.135.143])
by orvoesa102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 08:36:22 -0700
X-CSE-ConnectionGUID: ZOSc//TGTDiNqLFdZkNVow==
X-CSE-MsgGUID: 4kneYjTAQt+FRNP8RxgZhw==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="147154189"
Received: from lkp-server01.sh.intel.com (HELO 1992f890471c) ([10.239.97.150])
by fmviesa003.fm.intel.com with ESMTP; 28 May 2025 08:36:19 -0700
Received: from kbuild by 1992f890471c with local (Exim 4.96)
(envelope-from <lkp@xxxxxxxxx>)
id 1uKIpE-000VnY-2r;
Wed, 28 May 2025 15:36:16 +0000
Date: Wed, 28 May 2025 23:36:16 +0800
From: kernel test robot <lkp@xxxxxxxxx>
To: =?iso-8859-1?Q?Cl=E9ment?= Le Goffic <clement.legoffic@xxxxxxxxxxx>,
Linus Walleij <linus.walleij@xxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Maxime Coquelin <mcoquelin.stm32@xxxxxxxxx>,
Alexandre Torgue <alexandre.torgue@xxxxxxxxxxx>,
Bartosz Golaszewski <brgl@xxxxxxxx>
Cc: oe-kbuild-all@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-gpio@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx,
=?iso-8859-1?Q?Cl=E9ment?= Le Goffic <clement.legoffic@xxxxxxxxxxx>
Subject: Re: [PATCH v4 4/9] =?iso-8859-1?Q?MAINTAIN?=
=?iso-8859-1?Q?ERS=3A_add_Cl=E9ment?= Le Goffic as STM32 HDP maintainer
Message-ID: <202505282333.T9mzfGT8-lkp@xxxxxxxxx>
References: <20250528-hdp-upstream-v4-4-7e9b3ad2036d@xxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20250528-hdp-upstream-v4-4-7e9b3ad2036d@xxxxxxxxxxx>
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Clément,
kernel test robot noticed the following build warnings:
[auto build test WARNING on a08b2b34239e63bd839078de98911d3653cdab83]
url: https://github.com/intel-lab-lkp/linux/commits/Cl-ment-Le-Goffic/gpio-mmio-add-BGPIOF_NO_INPUT-flag-for-GPO-gpiochip/20250528-213620
base: a08b2b34239e63bd839078de98911d3653cdab83
patch link: https://lore.kernel.org/r/20250528-hdp-upstream-v4-4-7e9b3ad2036d%40foss.st.com
patch subject: [PATCH v4 4/9] MAINTAINERS: add Clément Le Goffic as STM32 HDP maintainer
reproduce: (https://download.01.org/0day-ci/archive/20250528/202505282333.T9mzfGT8-lkp@xxxxxxxxx/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202505282333.T9mzfGT8-lkp@xxxxxxxxx/
All warnings (new ones prefixed by >>):
Warning: Documentation/translations/ja_JP/process/submit-checklist.rst references a file that doesn't exist: Documentation/translations/ja_JP/SubmitChecklist
Warning: Documentation/translations/zh_CN/admin-guide/README.rst references a file that doesn't exist: Documentation/dev-tools/kgdb.rst
Warning: Documentation/translations/zh_CN/dev-tools/gdb-kernel-debugging.rst references a file that doesn't exist: Documentation/dev-tools/gdb-kernel-debugging.rst
Warning: Documentation/translations/zh_TW/admin-guide/README.rst references a file that doesn't exist: Documentation/dev-tools/kgdb.rst
Warning: Documentation/translations/zh_TW/dev-tools/gdb-kernel-debugging.rst references a file that doesn't exist: Documentation/dev-tools/gdb-kernel-debugging.rst
>> Warning: MAINTAINERS references a file that doesn't exist: Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl-hdp.yaml
Warning: MAINTAINERS references a file that doesn't exist: Documentation/devicetree/bindings/leds/backlight/ti,lp8864.yaml
Can't build as 1 mandatory dependency is missing at ./scripts/sphinx-pre-install line 984.
make[2]: *** [Documentation/Makefile:121: htmldocs] Error 255
make[1]: *** [Makefile:1799: htmldocs] Error 2
make: *** [Makefile:248: __sub-make] Error 2
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Return-Path: <linux-kernel+bounces-665727-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 183CF41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:38:22 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 442484A7161
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:38:23 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 60B8828C2C6;
Wed, 28 May 2025 15:38:14 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="BUC/kyK4"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9D902E567;
Wed, 28 May 2025 15:38:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446693; cv=none; b=YLFoXZo95Vy07Zu9jeIiDAQvyNpeKWoOwHLLzdprvX2xVRUYpBO1CjgEe2zESF9mXr5LXwyQXrB622dHZaa//+WmzDgKd2AxDfhIXTL4poZ60OHDG1zOMsh6olgs1jPImaT2cn3yZepT/ALE+RtTrwHSYrl/h8nO/WAwmoXs51o=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446693; c=relaxed/simple;
bh=DxUiu34y960Pp2icfPC+3P8sA4wh8Nmjsq4tuxZsZ+U=;
h=Mime-Version:Content-Type:Date:Message-Id:Cc:Subject:From:To:
References:In-Reply-To; b=ry2+jd1VBacDsvdRNKJ/Hvi7IVy3Y4CXtasdCm7xiW669SzuM9Rgteh2fVmbmmosyWDC2EL/RA1PCe51PKO9KTZx5L4eRPgpnx+t6FftDtGE8Ieie8VM0eHkIO88JMMVCaS3v140IjfMwiGrW8m6+NOzUloXvtO928kq39BlB9g=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=BUC/kyK4; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id F27C0C4CEE3;
Wed, 28 May 2025 15:38:09 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748446693;
bh=DxUiu34y960Pp2icfPC+3P8sA4wh8Nmjsq4tuxZsZ+U=;
h=Date:Cc:Subject:From:To:References:In-Reply-To:From;
b=BUC/kyK4OV4UlweEG7n3yg1xl1oLI1ZYzP/0AwTVpWwKf10Vwv6ctk9j/37uM/A3x
pVNC8ACUtbBk2m5un42TYR0S8pLdsYG9GiOHa0ij0PELn//MF4J/ChIkn32VArL/yW
NhETXln+j2IBnca70fev+DKWahbeWj/ebRJWRHTHTb9ppwPspgh727T3BvEWXf8Gt8
P1+T54H/M6giYh31s3iXcgvnJZFSb4RBF634eMftJ2jXnflK8TUStY0TZPRZdvxaf9
5oSHDVFxhBwGR1MDek6Q4MtSoDJ1hDDHlAWYPlm3hIC4F7tQqEhZyNt2PTT5toxFYG
AiBP4CZ6VEB8A==
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
Mime-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=UTF-8
Date: Wed, 28 May 2025 17:38:08 +0200
Message-Id: <DA7WMFWY8I6Z.2EADXSPL111PP@xxxxxxxxxx>
Cc: "Alice Ryhl" <aliceryhl@xxxxxxxxxx>, "Miguel Ojeda" <ojeda@xxxxxxxxxx>,
"Greg Kroah-Hartman" <gregkh@xxxxxxxxxxxxxxxxxxx>, "Arnd Bergmann"
<arnd@xxxxxxxx>, "Andrew Morton" <akpm@xxxxxxxxxxxxxxxxxxxx>, "Gary Guo"
<gary@xxxxxxxxxxx>, =?utf-8?q?Bj=C3=B6rn_Roy_Baron?=
<bjorn3_gh@xxxxxxxxxxxxxx>, "Benno Lossin" <benno.lossin@xxxxxxxxx>,
"Andreas Hindborg" <a.hindborg@xxxxxxxxxx>, "Trevor Gross"
<tmgross@xxxxxxxxx>, "Danilo Krummrich" <dakr@xxxxxxxxxx>,
<rust-for-linux@xxxxxxxxxxxxxxx>, <linux-kernel@xxxxxxxxxxxxxxx>
Subject: Re: [PATCH v2] uaccess: rust: use newtype for user pointers
From: "Benno Lossin" <lossin@xxxxxxxxxx>
To: "Boqun Feng" <boqun.feng@xxxxxxxxx>, "Al Viro" <viro@xxxxxxxxxxxxxxxxxx>
X-Mailer: aerc 0.20.1
References: <20250527-userptr-newtype-v2-1-a789d266f6b0@xxxxxxxxxx>
<20250527221211.GB2023217@ZenIV>
<68364701.050a0220.48858.0017@xxxxxxxxxxxxx>
In-Reply-To: <68364701.050a0220.48858.0017@xxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed May 28, 2025 at 1:13 AM CEST, Boqun Feng wrote:
> On Tue, May 27, 2025 at 11:12:11PM +0100, Al Viro wrote:
>> On Tue, May 27, 2025 at 01:53:12PM +0000, Alice Ryhl wrote:
>> > In C code we use sparse with the __user annotation to detect cases whe=
re
>> > a user pointer is mixed up with other things. To replicate that, we
>> > introduce a new struct UserPtr that serves the same purpose using the
>> > newtype pattern.
>> >=20
>> > The UserPtr type is not marked with #[derive(Debug)], which means that
>> > it's not possible to print values of this type. This avoids ASLR
>> > leakage.
>> >=20
>> > The type is added to the prelude as it is a fairly fundamental type
>> > similar to c_int. The wrapping_add() method is renamed to
>> > wrapping_byte_add() for consistency with the method name found on raw
>> > pointers.
>>=20
>> That's considerably weaker than __user, though - with
>> struct foo {struct bar x; struct baz y[2]; };
>
> Translate to Rust this is:
>
> struct Foo {
> x: Bar,
> y: Baz[2],
> }
>
>> struct foo __user *p;
>
> UserPtr should probably be generic over pointee, so:
>
> pub struct UserPtr<T>(*mut c_void, PhantomData<*mut T>);
>
> and
>
> let p: UserPtr<Foo> =3D ...;
>
>> void f(struct bar __user *);
>
> and this is:
>
> pub fn f(bar: UserPtr<Bar>)
>
> and the checking should work, a (maybe unrelated) tricky part though..
>
>> sparse does figure out that f(&p->y[1]) is a type error - &p->y[1] is
>
> In Rust, you will need to play a little unsafe game to get &p->y[1]:
>
> let foo_ptr: *mut Foo =3D p.as_mut_ptr();
> let y_ptr: *mut Baz =3D unsafe { addr_of_mut!((*foo_ptr).y[1]) };
> let y: UserPtr<Baz> =3D unsafe { UserPtr::from_ptr(y_ptr) };
Shouldn't this use `wrapping_add` since the pointer shouldn't be
dereferenced?
If we don't use `wrapping_add`, then the field projection operation for
this type must be `unsafe`.
---
Cheers,
Benno
Return-Path: <linux-kernel+bounces-665728-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id B85D141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:38:58 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 0FD684A7531
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:39:00 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 503F428C2C8;
Wed, 28 May 2025 15:38:51 +0000 (UTC)
Received: from mxct.zte.com.cn (mxct.zte.com.cn [183.62.165.209])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id AA6C92882DE;
Wed, 28 May 2025 15:38:46 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=183.62.165.209
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446730; cv=none; b=XliDntFfVVFcLEc4Yyxk2Czmgndc8V3Yh23ieQ5jwcm7w22j39heKd7d2oZwMP/Rx/J1TN/mQV/Hje5CaiIE0BJwINl2qnKyZTgAgUrnrIo414o2hOcrkaMvaW0IX3EG/D1qCRqpbe6RHZUZsyLkeFJjnx9CxVvmOHLqtrj6Ncc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446730; c=relaxed/simple;
bh=E0udk8x6hmQLluBrqj/L2WShsMerQkW5sI1ubHcdhyc=;
h=Date:Message-ID:In-Reply-To:References:Mime-Version:From:To:Cc:
Subject:Content-Type; b=cj3lYSUT+7Ptw9331QILH/Qa+tifFRvp6nwDKTy4DxIEpfehPuOKV+7ZlnP2FQH82+m7X0pPKxRD1e/42aJOayGqRkqP2ctWD2ZZJWI5MQV1efIfw9mUA5ZMxFj+Us1dqNHo+hkji1v9dHDOKnfmaMX0M0dCZy5/ZjiCsfLby20=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zte.com.cn; spf=pass smtp.mailfrom=zte.com.cn; arc=none smtp.client-ip=183.62.165.209
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zte.com.cn
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=zte.com.cn
Received: from mse-fl2.zte.com.cn (unknown [10.5.228.133])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by mxct.zte.com.cn (FangMail) with ESMTPS id 4b6tvF3M8Lz4x6Cq;
Wed, 28 May 2025 23:38:33 +0800 (CST)
Received: from xaxapp02.zte.com.cn ([10.88.97.241])
by mse-fl2.zte.com.cn with SMTP id 54SFcS4N089038;
Wed, 28 May 2025 23:38:28 +0800 (+08)
(envelope-from xu.xin16@xxxxxxxxxx)
Received: from mapi (xaxapp05[null])
by mapi (Zmail) with MAPI id mid32;
Wed, 28 May 2025 23:38:32 +0800 (CST)
Date: Wed, 28 May 2025 23:38:32 +0800 (CST)
X-Zmail-TransId: 2afc68372df8ffffffffcb3-045c5
X-Mailer: Zmail v1.0
Message-ID: <20250528233832445zSfRddcejioi-qwhWuUBJ@xxxxxxxxxx>
In-Reply-To: <6057647abfceb672fa932ad7fb1b5b69bdab0fc7.1747844463.git.lorenzo.stoakes@xxxxxxxxxx>
References: cover.1747844463.git.lorenzo.stoakes@xxxxxxxxxx,6057647abfceb672fa932ad7fb1b5b69bdab0fc7.1747844463.git.lorenzo.stoakes@xxxxxxxxxx
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
Mime-Version: 1.0
From: <xu.xin16@xxxxxxxxxx>
To: <lorenzo.stoakes@xxxxxxxxxx>
Cc: <akpm@xxxxxxxxxxxxxxxxxxxx>, <viro@xxxxxxxxxxxxxxxxxx>,
<brauner@xxxxxxxxxx>, <jack@xxxxxxx>, <Liam.Howlett@xxxxxxxxxx>,
<vbabka@xxxxxxx>, <jannh@xxxxxxxxxx>, <pfalcato@xxxxxxx>,
<david@xxxxxxxxxx>, <chengming.zhou@xxxxxxxxx>, <linux-mm@xxxxxxxxx>,
<linux-kernel@xxxxxxxxxxxxxxx>, <linux-fsdevel@xxxxxxxxxxxxxxx>,
<shr@xxxxxxxxxxxx>, <wang.yaxin@xxxxxxxxxx>, <yang.yang29@xxxxxxxxxx>
Subject: =?UTF-8?B?UmU6IFtQQVRDSCB2MiAzLzRdIG1tOiBwcmV2ZW50IEtTTSBmcm9tIGNvbXBsZXRlbHkgYnJlYWtpbmcgVk1BIG1lcmdpbmc=?=
Content-Type: text/plain;
charset="UTF-8"
X-MAIL:mse-fl2.zte.com.cn 54SFcS4N089038
X-Fangmail-Anti-Spam-Filtered: true
X-Fangmail-MID-QID: 68372DF9.001/4b6tvF3M8Lz4x6Cq
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
> +static void update_ksm_flags(struct mmap_state *map)
> +{
> + map->flags = ksm_vma_flags(map->mm, map->file, map->flags);
> +}
> +
> +/*
> + * Are we guaranteed no driver can change state such as to preclude KSM merging?
> + * If so, let's set the KSM mergeable flag early so we don't break VMA merging.
> + *
> + * This is applicable when PR_SET_MEMORY_MERGE has been set on the mm_struct via
> + * prctl() causing newly mapped VMAs to have the KSM mergeable VMA flag set.
> + *
> + * If this is not the case, then we set the flag after considering mergeability,
> + * which will prevent mergeability as, when PR_SET_MEMORY_MERGE is set, a new
> + * VMA will not have the KSM mergeability VMA flag set, but all other VMAs will,
> + * preventing any merge.
> + */
> +static bool can_set_ksm_flags_early(struct mmap_state *map)
> +{
> + struct file *file = map->file;
> +
> + /* Anonymous mappings have no driver which can change them. */
> + if (!file)
> + return true;
> +
> + /* shmem is safe. */
Excuse me, why it's safe here? Does KSM support shmem?
> + if (shmem_file(file))
> + return true;
> +
> + /*
> + * If .mmap_prepare() is specified, then the driver will have already
> + * manipulated state prior to updating KSM flags.
> + */
Recommend expanding the comments here with slightly more verbose explanations to improve
code comprehension. Consider adding the following note (even though your commit log is
already sufficiently clear. :)
/*
* If .mmap_prepare() is specified, then the driver will have already
* manipulated state prior to updating KSM flags. So no need to worry
* about mmap callbacks modifying vm_flags after the KSM flag has been
* updated here, which could otherwise affect KSM eligibility.
*/
> + if (file->f_op->mmap_prepare)
> + return true;
> +
> + return false;
> +}
> +
Return-Path: <linux-kernel+bounces-665729-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id B9A1841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:39:57 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id B82313A56F2
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:39:36 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 0B14F28C2C6;
Wed, 28 May 2025 15:39:52 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="a9sdb4Pj"
Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11013039.outbound.protection.outlook.com [52.101.72.39])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 14E592882DE;
Wed, 28 May 2025 15:39:48 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.39
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446791; cv=fail; b=Q38A5spPQF99XYu2gY9RQPaig3Lg+wxrkNiQ6HJUd2X9dpMc1yaqelrDPQ/tjU36DO1b/t2LDqoEkrPYlmNZCmL9PWzzjCigpdRsFsoudDJf9NYAPW639oHLSpMPIu2DLW5Vw4Mi860VJ1xUf30be5O/DH+k3xTfASVdIkhGZRI=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446791; c=relaxed/simple;
bh=g2ONdwvJn3BIOG5QdUhhgNeL10Bz0NlRj4Ql3CrCYnE=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=RUUCAPDAQQ1TZckWduaWC2IOaZq+ye5indax7VEsXRDKbRumN0pM86qIOh6CChiKJ89O38fSyBEybA8VOxY6l7hLgVq8sVM4An1Z7DM1AIIu2Nv8BgEG6XrWUhPl1V3/k1wnlnd2TIRBFjb0LPfyX3B4+QPxCvrocA06jHRqlOA=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=a9sdb4Pj; arc=fail smtp.client-ip=52.101.72.39
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=CySBSCbT8cc0ISz00S0y8tJeV7AZgAhgpcrfof58IxYYVZUaJXu/K771kR8DGZQHi1NS2v8v4p+d5lhy3dOBV/DdUtAg/bplA9G1Y1Wy7prLQTYRed0JCC9deyo8e96j4x3En18yWRy0yFK1zACglH+nW+nFFG7p/hOm8b5OUYATfCSlNlzPDni12hzN0ELPvSiTDQna/KhS1QrXhwZ2YZX+vizbJqU90rXE+Y+RH1wYdjC8QRSWoqX9fUR6v2q7VD26Ss+f6EzjECAvUW/ogRRKvrMabwCClp3YDQVbedaR3Ff+TD2XMtPOwJShRCx9lq7g65pJQZRhn9C9asFEWQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=B5fEc0wUd9alxSvk2K5jd+XmvexASerDAPKGcAnZczE=;
b=cp2sOXGqoWooMBDXan7gcQ1kTx945FuNTQLRq5nsr5a5rBPbI55/lcBJ0og9sev24+5w9chEjHKUOHwXJL1Ga/l20GbKJ6sqA4w/rKXFSpazAj4CczbeiRq0cNwC3WjM1fV9p64ohrI/a/vmxcmkn+zFeLmMIz3G01IELwbmIPmRQrV/LGKiSsXO0qhkshNdVYE2ZSaqUDGvwUcPQgaE2GIQ9HWcQmStIbi5TLEy99Tjy3E5VLKv4y0tYASzOHrpNNwIFIDy7YzfM99A/Fx/8CJhCdH8DnYvhpbfQw5ejIi0kSxguNS2YJzuNqFtAEXcj/qNA425MQsmSvQV6Rql+g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=B5fEc0wUd9alxSvk2K5jd+XmvexASerDAPKGcAnZczE=;
b=a9sdb4Pjl51N4lNZ8/0kSuEED305OzFynvt1wt73KJxVmhunIh//1WXka5ix+pit+GHNQXY+ea11p/IodkyIog3IphB131yrsMNjdfCLnR87hIfPzW+8Hz7sadFN96fMaEcBD1NbJw24N6rUyV3MTkxRojZx/igfn8+iZFIKmRUs5i8/GClJ7cAvUajhWPgGR9EAWYw/a9ei2wNZMX9Vw9Xk+2Cn9TjndIGcR6UGMQ8QXZ4GwIhVZGl7KE1MdeVsOytjG4jejRgtmsHrPdqrJsGPeokeucWXQlI1tNmeJ0roSi6vwI+EcEQ84chheECsP0iHgbNPXIPBcaEDTU5BcQ==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by AS5PR04MB9923.eurprd04.prod.outlook.com (2603:10a6:20b:67f::21) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.24; Wed, 28 May
2025 15:39:45 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
15:39:44 +0000
Date: Wed, 28 May 2025 11:39:36 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: Peng Fan <peng.fan@xxxxxxx>
Cc: Shawn Guo <shawnguo@xxxxxxxxxx>, Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>,
Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>,
Stefan Agner <stefan@xxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
"moderated list:ARM/FREESCALE VYBRID ARM ARCHITECTURE" <linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>,
"open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" <devicetree@xxxxxxxxxxxxxxx>,
open list <linux-kernel@xxxxxxxxxxxxxxx>,
"imx@xxxxxxxxxxxxxxx" <imx@xxxxxxxxxxxxxxx>
Subject: Re: [PATCH 4/6] ARM: dts: vf: rename io-expander@20 to pinctrl@20
Message-ID: <aDcuOFhYxWs9VXl6@lizhi-Precision-Tower-5810>
References: <20250523161726.548682-1-Frank.Li@xxxxxxx>
<20250523161726.548682-4-Frank.Li@xxxxxxx>
<PAXPR04MB8459B664F892D4A8726C70B88864A@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <PAXPR04MB8459B664F892D4A8726C70B88864A@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
X-ClientProxiedBy: SJ0PR03CA0251.namprd03.prod.outlook.com
(2603:10b6:a03:3a0::16) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|AS5PR04MB9923:EE_
X-MS-Office365-Filtering-Correlation-Id: ccc8c9d7-f449-407d-9f20-08dd9dfdded6
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|1800799024|366016|7416014|376014|52116014|38350700014;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?R8BtAMZjlxilaSC5KYS8JIVEUU+233GbkuIvsURh6eYvypcCf4yCtvPtp2yG?=
=?us-ascii?Q?kBLl9cpPdeGxRqaUusvel/3F4gtEyD++H21ozzpjntaDCYyXkHYPFLEN5euo?=
=?us-ascii?Q?e74er5OP58R58pqEp59ZiTYQY+COl+TfuEJAYikwIdVsyNUyCv46CBYLbuxB?=
=?us-ascii?Q?XBAkmTOZEkAFsivcEXNqpeAotHt2auTlQu3PnmhVa1Wdmy3FOAtTybxYbf4F?=
=?us-ascii?Q?O+owsj8e7B/z7bA5akkVxWRPdwxrBhdl3N43tGc/vyVLogkGez4hAzh/hLbD?=
=?us-ascii?Q?W7S8UqBNE0okFGqmRlfzrYQ4DLvxZ055cg3beL9Hh+GCjbFvlcgAet2B3Am9?=
=?us-ascii?Q?OvdvRvIjDv3WrWnZJ8dhlnsBQ2thW+QKzrBF0OYNFmO0jzKqSKe/RNRM5IdA?=
=?us-ascii?Q?cTtHSzIWzT2WstFGOwILAlLmFgwTEPwIVS1Py1e/rjMJRMMYDPOg9BxvAUnd?=
=?us-ascii?Q?CrpJhbkuZ0i2x33ZVgy+qce3XnhRwhjtsYHdC5L5OsqnXvOrQc0G1QBjTIBa?=
=?us-ascii?Q?SbquGienzSmuJnO5urOHjxPFHxkVPFs3jdGIJ0SeZkVQlOz/3p35xItNYeHX?=
=?us-ascii?Q?Ok3luOTeVDd/NFcLE41c699oAWhZyxXllEcnqzK932D3+Sog4UYyMM3G25j6?=
=?us-ascii?Q?9VDb+yOqPG7xThbbVfZpRpn3mB2N11eTwVweaCKdzNlNAikrTh4AWy4LjnJH?=
=?us-ascii?Q?XPOOGAuleHlCzLCGtFSDCifImUaSRMgzzWX11aaagHfIlLpCjG47WNR/lY9Y?=
=?us-ascii?Q?NFP4YOe7WLIxP4Rw9zJMQ75+vQPao7vWp9mJGbq0V8w9sKVmJSrxPks2zXki?=
=?us-ascii?Q?5NzEmJxx20kJjqBl+YO8CNnr27IfLf3KTKlNyO2wXb9Jq0Wjh2OXZH5X8Mv2?=
=?us-ascii?Q?XYgO9M82ECq8PvCTqDSApspLmVX0/3ORbrHNGFst7AN0GbFmdU/8orMNCKvE?=
=?us-ascii?Q?3WrJJKzZmvCGl2NumPYRQGy/HYFlxQs5kPBa1VWdE6+tIuCXyxzk94zgFcEc?=
=?us-ascii?Q?nuYUFMXPmi2qsW0L2TeQ31Ew4v9GI9csvSk/csLuoBXaBwpp5O5psVM8CCVc?=
=?us-ascii?Q?rE0uzHyzLxN55FuIxI3cAeH3Kd/HgQhDC7WgWdJJZAH42thnFdV1CMKcbu7y?=
=?us-ascii?Q?TUXDFVd81IkyeIGaXcj8G9utFoeAhfad/CDK+vQpL6Qm7mTeR7aJGPklrRVT?=
=?us-ascii?Q?UOKTmhlz/YcEPP6doJCJvBvYZ2gTABBJMutBsGUb/x4ehuzVJvLjKT6D8A1q?=
=?us-ascii?Q?AqqShpjTCzkNhqq3HJ0AbgLB3fUISchT8dea9mU9VtDDbRwhQgec10FyjXfM?=
=?us-ascii?Q?cittvRqawYAX+YmhIUoJ7NG5C7LUCUAE/FnHBTEloBi92GoDUHdm9kOChGvO?=
=?us-ascii?Q?G5qs8KWQDa99o2p5OjYJ86hFBw41rPUj9mtNVQY476jR03em38mAEZXEb4jk?=
=?us-ascii?Q?BenGD2Q6EF3iy1GKt6/aUfJPNKdPY+O8ft+B4TU6yY54WI55FLTHHQ=3D=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(7416014)(376014)(52116014)(38350700014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?0MarVGvrK6JQPbFgdy8tA2xiwZINjoaVyFHSt39fyDlstcdQiH9DPxjEsNUV?=
=?us-ascii?Q?VUdBiJCtIq+4U/pGEKtT0B+uuRLw3iQDmSOTfB7gzjcoB1gIy0aTpdGWT8qm?=
=?us-ascii?Q?tgHThqoPwzYaNZQQ4JOHsq80NtpifUKNEjCsmqHMY5lEMMYaPWykihdw9G1J?=
=?us-ascii?Q?lF98iE4L+3ILODFOujsI59TTPS6uZHjC2wz6xYl0EmWjYjARDyZqgFdDO5tm?=
=?us-ascii?Q?46qmOKJtm2dGpO61bGVYVzWqgttq+tLQ0vMTJeNf56fJaYypp5Glm8lQ67Gp?=
=?us-ascii?Q?GRcSa6UNcxzGQ20dW1akx89b2DasaX8M7SM3AUYLbvwFOFiIOTNm0Y6ydDJe?=
=?us-ascii?Q?5nV40Wem9oE7VZndWMR22rahoNjshWP7Bc56j5AjGPu/t6F5Nfq4WCOuxUDd?=
=?us-ascii?Q?SD0sY20g7oGyCuSKLzMcLWBgA17DBKB/uJLdE3lIZeDSdecvk1AKn3Fs4ojp?=
=?us-ascii?Q?kf1KT6SexDwnk+kT5pmoUl/fhaq+HMbZGU0HcXumLTuZhQkHnynm1OVBK0iI?=
=?us-ascii?Q?aPTLHetl5W6S/n/LOanM+gG8k2tT0XSLjPugXrPzwyhmwWNW8rgENIcDFSYX?=
=?us-ascii?Q?gaA2ui14vJxgLqg3M3K7bEAoYKBWwstWAcwjppbKZ3dcUtBGQ/Ndt0sfl4CX?=
=?us-ascii?Q?6W/7f3EwDvnZFXpluHxW11TosX2Ohm+YYtMBLoniv6KBQ65X5zMX2KKTU1rl?=
=?us-ascii?Q?j+7d2UQngAQLimMDDLn9X0qZgmTmcyoKTlergQK+c0+koCkk06O6U9Gt8FJt?=
=?us-ascii?Q?Jqbg+xlmeQoJWsSD/0CPMSYAxrKa+ACrNxBZ7tWH8VT8I4oaLEam/MSJ6xA5?=
=?us-ascii?Q?CU0QrIdzaRqGpDfh/fWnzo+voqEGfMpDaQVPWwUrQD/4Yaneb9YgfMS7ju34?=
=?us-ascii?Q?PaztYlVszPfdKm40KF37hw6vm21mM19j9i/fyX++um+B9M9gEduys9RJgmnF?=
=?us-ascii?Q?+jc2wEUcJmpv9f6QbnDNP8VM2ICQ9GWBYInJ9aG1TWnM3hpDzjdeqLz66Kd6?=
=?us-ascii?Q?7MLq8sxRz4C2AreioTCjT/8g7IC76OQ6MSPnjPZ5/aKvGDfCSVBep3ZCnxj7?=
=?us-ascii?Q?wfVL2/0Abmq7+KkNbOCIuVF/q4bGG/2weLme0mSenUSnQdM2naiUvUJGAhsv?=
=?us-ascii?Q?EjApv2IULGFWXGwHDUq1heBv+bIGoSGG62gL4CmlOlYWMsXqwM2z0idrJigU?=
=?us-ascii?Q?YMyE7Z8mPt5Dvdr0gxilHW4syLUVRSjmcxxgUuGsWAKxqXIPYrV35V/L1XdR?=
=?us-ascii?Q?GzKdlYjmJOSUep/CVo0D5ENeJLPi1R6w19AfzgBM8kddc45ksS2Kr1NNUZHO?=
=?us-ascii?Q?g/JGsz3GxAx6+f9sYF5veRR6CeKr1zYVLO+0sxlCEpfCnMgJwLxl6gYHRvf6?=
=?us-ascii?Q?YhVE35JMVgGAEvftqlHiTmKa/sDqlYFMURLxxayIIRZZTEWyQEBbZO4py1VZ?=
=?us-ascii?Q?2x2Z59NhWNzZlF8ghJNaPDICrbi86WhtHYLXXSfsJ+6uKy6r5Y/PEZo5UglW?=
=?us-ascii?Q?qDHI78au1Jgx7L/drgh9WMNe9zy3O9LGYYEDTUTJzOEYWhO3X1GiISiU/vRc?=
=?us-ascii?Q?JLybCFJmM04VMb86LDs=3D?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: ccc8c9d7-f449-407d-9f20-08dd9dfdded6
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:39:44.9212
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: VhQppMdbX2I7xXSwGina1rCSqP1uJRCc8cnKUVhXOnXCnGRBIRbEBY7aqBkA36ffWTh6B1OfaDTbtcbf94tysw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS5PR04MB9923
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 05:24:23AM +0000, Peng Fan wrote:
> > Subject: [PATCH 4/6] ARM: dts: vf: rename io-expander@20 to
> > pinctrl@20
> >
> > Rename io-expander@20 to pinctrl@20 to fix below CHECK_DTB
> > warning:
> >
> > arch/arm/boot/dts/nxp/vf/vf610-zii-dev-rev-c.dtb: sx1503@20
> > (semtech,sx1503q):
> > $nodename:0: 'sx1503@20' does not match '^(pinctrl|pinmux)(@[0-
> > 9a-f]+)?$
> >
> > Signed-off-by: Frank Li <Frank.Li@xxxxxxx>
> > ---
> > arch/arm/boot/dts/nxp/vf/vf610-zii-dev-rev-c.dts | 2 +-
> > arch/arm/boot/dts/nxp/vf/vf610-zii-scu4-aib.dts | 2 +-
> > 2 files changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/arch/arm/boot/dts/nxp/vf/vf610-zii-dev-rev-c.dts
> > b/arch/arm/boot/dts/nxp/vf/vf610-zii-dev-rev-c.dts
> > index 7a209c9c57a4d..79ea7cf57a4dc 100644
> > --- a/arch/arm/boot/dts/nxp/vf/vf610-zii-dev-rev-c.dts
> > +++ b/arch/arm/boot/dts/nxp/vf/vf610-zii-dev-rev-c.dts
> > @@ -311,7 +311,7 @@ gpio5: io-expander@18 {
> > * I/O14 - OPT1_TX_DIS
> > * I/O15 - OPT2_TX_DIS
> > */
> > - gpio6: sx1503@20 {
> > + gpio6: pinctrl@20 {
>
> Use gpio-controller?
binding doc require pinctrl
Documentation/devicetree/bindings/pinctrl/semtech,sx1501q.yaml
Frank
>
> > compatible = "semtech,sx1503q";
> >
> > pinctrl-names = "default";
> > diff --git a/arch/arm/boot/dts/nxp/vf/vf610-zii-scu4-aib.dts
> > b/arch/arm/boot/dts/nxp/vf/vf610-zii-scu4-aib.dts
> > index b3d338312df4f..8020a644dd9d1 100644
> > --- a/arch/arm/boot/dts/nxp/vf/vf610-zii-scu4-aib.dts
> > +++ b/arch/arm/boot/dts/nxp/vf/vf610-zii-scu4-aib.dts
> > @@ -583,7 +583,7 @@ &i2c2 {
> > pinctrl-0 = <&pinctrl_i2c2>;
> > status = "okay";
> >
> > - gpio9: io-expander@20 {
> > + gpio9: pinctrl@20 {
>
> Ditto.
>
> Regards
> Peng.
>
> > compatible = "semtech,sx1503q";
> > pinctrl-names = "default";
> > pinctrl-0 = <&pinctrl_sx1503_20>;
> > --
> > 2.34.1
> >
>
Return-Path: <linux-kernel+bounces-665730-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id A952D41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:40:48 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id BA942A21B27
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:40:27 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 9659B28C2C2;
Wed, 28 May 2025 15:40:42 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Q6d+xQi8"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id D4B362882DE;
Wed, 28 May 2025 15:40:41 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446841; cv=none; b=kNjNHHkd2jFC/VdClXwkZ2M/jR3gG/53jR0kKVcwA0uhcvHT6oQD7A5IS4TwAmbOeyIO95/CZAcv27IYqosxBxi3wZ17rAtc6wVfey0z2wdNKRCcbpa9dxOTxKiMugPLVcJyVtXQ11RgnyQARzwnJtbTZegdPh/zQ0AN1bZT2Zs=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446841; c=relaxed/simple;
bh=vlBt1KD9NwWETsMzSvz1zvfNTgKES4Z0JT9UcZtH9Q8=;
h=Subject:From:In-Reply-To:References:Message-Id:Date:To:Cc; b=MN9EMDWyXdEwnBdNN7QLda8Wzxl9KBT+4kL3M/aotS0N7N2qnUOuMEDCBOyudKI7tkGVNvSShJsJC2lrGLqe2BlwYXBN95otrxbaoL+NeiPcJIIj1Amf41WW52tD01ccwHLhf3pN1uyj6tiK1SfwTL0DYF6+mf/zPYAPvm2uJlA=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Q6d+xQi8; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5256DC4CEE3;
Wed, 28 May 2025 15:40:41 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748446841;
bh=vlBt1KD9NwWETsMzSvz1zvfNTgKES4Z0JT9UcZtH9Q8=;
h=Subject:From:In-Reply-To:References:Date:To:Cc:From;
b=Q6d+xQi82nfmTENTD0pQwccw2RuemXrZI05j66sowEjhVyjxuFH+sGVREMsNRHg6x
OljfDQyFIlOgtVrB5Bcg3egvr+rt2vE50IqiC0bRWFvzsvEZo7fPaI9W5At0OgXfFX
Bc0Ps0naF8904aUin+AsvT9K/2/Iqp+yRsVBLifhsV2mUuH+THXnxVc2bhKJfc0YIY
K2DIoy+adhCPCkfbNcb/uruHQyrr3lBm/a7FAvsJNYTT8AhG7D60XD9pHee2R+0W7Y
OAV6uVyiZViTypMvzVtplbLT8EOdk2OrG6e/5UHgaysNQdRfutXAoXKTzqvpSkryIP
+F1qVVAlFAqEQ==
Received: from [10.30.226.235] (localhost [IPv6:::1])
by aws-us-west-2-korg-oddjob-rhel9-1.codeaurora.org (Postfix) with ESMTP id 749013822D1A;
Wed, 28 May 2025 15:41:16 +0000 (UTC)
Subject: Re: [GIT PULL] Smack patches for 6.16
From: pr-tracker-bot@xxxxxxxxxx
In-Reply-To: <c342db55-57ec-484c-b030-ef3dab89bd3a@xxxxxxxxxxxxxxxx>
References: <c342db55-57ec-484c-b030-ef3dab89bd3a.ref@xxxxxxxxxxxxxxxx> <c342db55-57ec-484c-b030-ef3dab89bd3a@xxxxxxxxxxxxxxxx>
X-PR-Tracked-List-Id: <linux-security-module.vger.kernel.org>
X-PR-Tracked-Message-Id: <c342db55-57ec-484c-b030-ef3dab89bd3a@xxxxxxxxxxxxxxxx>
X-PR-Tracked-Remote: https://github.com/cschaufler/smack-next tags/Smack-for-6.16
X-PR-Tracked-Commit-Id: 4b59f4fd0a36c31876344d7e0cfdcb0202d09cf2
X-PR-Merge-Tree: torvalds/linux.git
X-PR-Merge-Refname: refs/heads/master
X-PR-Merge-Commit-Id: cbaed2f58c55c13f96250359478bd8fff3ac4c6e
Message-Id: <174844687548.2439471.18068467317063772808.pr-tracker-bot@xxxxxxxxxx>
Date: Wed, 28 May 2025 15:41:15 +0000
To: Casey Schaufler <casey@xxxxxxxxxxxxxxxx>
Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>, LSM List <linux-security-module@xxxxxxxxxxxxxxx>, Linux kernel mailing list <linux-kernel@xxxxxxxxxxxxxxx>, Casey Schaufler <casey@xxxxxxxxxxxxxxxx>, Randy Dunlap <rdunlap@xxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
The pull request you sent on Tue, 27 May 2025 14:11:38 -0700:
> https://github.com/cschaufler/smack-next tags/Smack-for-6.16
has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/cbaed2f58c55c13f96250359478bd8fff3ac4c6e
Thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/prtracker.html
Return-Path: <linux-kernel+bounces-665731-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 253DD41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:40:58 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 11C871BC0E16
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:41:11 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id B6CB528C5C7;
Wed, 28 May 2025 15:40:43 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Mx/0Hbe3"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 00EAD28C2CE;
Wed, 28 May 2025 15:40:42 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446843; cv=none; b=LLlsCkCKrdX1+p6+wStv7sB9Ka2KGBY1WrIiy33kUT7XYN4klWbQtQgBLv4mF+N8ssHADytDe9x27kRPQpO6SNfK2yDOM4igWNW2ezU8wHX1zDhBWewqp1FWAwXzDt++LtTzx+b01cMO/C/49gnSv2AHRr9d005B5yrrAbPNC80=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446843; c=relaxed/simple;
bh=id7cLHXlKvI6Bxx1Ngc+Mlov47TqTRZUpUGFtZtWGps=;
h=Subject:From:In-Reply-To:References:Message-Id:Date:To:Cc; b=eoeHmZIPhy432wwOigwybteAoQyUv6BbY0HsVeBfLXxzYkg8fpqi48IqBjkj88glv+CVN38OoWtBeDaOaWiScPyXaddRtvH6MRsKaSXyY64d8jNJzBONb+7VYkJEDOBM6Pos8NBae2lH5u3YcY8bVzrGtGSQP02PVkukvTYnbl0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Mx/0Hbe3; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 79788C4CEE3;
Wed, 28 May 2025 15:40:42 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748446842;
bh=id7cLHXlKvI6Bxx1Ngc+Mlov47TqTRZUpUGFtZtWGps=;
h=Subject:From:In-Reply-To:References:Date:To:Cc:From;
b=Mx/0Hbe3WqpAx49YL7GbWdE5vMwbCryqjC4TJa0Dlw6aJQD62s9gO2QycvvAVzH0C
IFSEwkYzFill2AZzF//88IIwZpVstTRieln6ATt+QBxIV0IXERCF7BfDWhSFtbVJ47
muvoZ1JX1xED2VPPxB6Q1WozSnVUkrminaFT/oHrx4tQaLmNFplupEi5pS/Whrqblq
KzJjTHW2nhdLGpBumfXMFlRwQivzJe3fXbO+Ph+MjfUubo7EPGKpoKGtIEfyQ9WHPi
oX35dA08WSwIAjUvJxNgCePo0NV8fAWympViqMV6PdaUdl0aiT5wUf64kiSSZXH/es
XmEqM1L7UoN9g==
Received: from [10.30.226.235] (localhost [IPv6:::1])
by aws-us-west-2-korg-oddjob-rhel9-1.codeaurora.org (Postfix) with ESMTP id AE19B3822D1A;
Wed, 28 May 2025 15:41:17 +0000 (UTC)
Subject: Re: [GIT PULL] lsm/lsm-pr-20250527
From: pr-tracker-bot@xxxxxxxxxx
In-Reply-To: <c033219926c0701369d6477cedda170b@xxxxxxxxxxxxxx>
References: <c033219926c0701369d6477cedda170b@xxxxxxxxxxxxxx>
X-PR-Tracked-List-Id: <linux-security-module.vger.kernel.org>
X-PR-Tracked-Message-Id: <c033219926c0701369d6477cedda170b@xxxxxxxxxxxxxx>
X-PR-Tracked-Remote: https://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/lsm.git tags/lsm-pr-20250527
X-PR-Tracked-Commit-Id: 74e5b13a1b0f10c5a5c6168f6915620a1d369fae
X-PR-Merge-Tree: torvalds/linux.git
X-PR-Merge-Refname: refs/heads/master
X-PR-Merge-Commit-Id: 1bc8c83af962a7f0e52c1ee254acbcb1d9204a5e
Message-Id: <174844687686.2439471.285203290127435818.pr-tracker-bot@xxxxxxxxxx>
Date: Wed, 28 May 2025 15:41:16 +0000
To: Paul Moore <paul@xxxxxxxxxxxxxx>
Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>, linux-security-module@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
The pull request you sent on Tue, 27 May 2025 18:57:36 -0400:
> https://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/lsm.git tags/lsm-pr-20250527
has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/1bc8c83af962a7f0e52c1ee254acbcb1d9204a5e
Thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/prtracker.html
Return-Path: <linux-kernel+bounces-665732-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D508B41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:41:13 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 0E4B2A21DAB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:40:49 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 5551728C867;
Wed, 28 May 2025 15:40:45 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="uabs9i8P"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8FDA328C848;
Wed, 28 May 2025 15:40:44 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446844; cv=none; b=mGtO86nCbFpZLZa3S4BlxVqFsQF6OasilAhWyb+P0DYUAhVdZM6Foj3Ix/dresn8+JB63WU4o3tZZ/mvfp7TxtH3VXXEBYLWqkVo44zN4BiIvtbrAChNzucd5RyOm78egmDk8g8nsFs4y6mzOpP2hbPHsG6tbd5quOJptUh6j90=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446844; c=relaxed/simple;
bh=xjbGGtsovR47x5VeJpAiXdFmv9RG3ZrB72S+d5ljXTo=;
h=Subject:From:In-Reply-To:References:Message-Id:Date:To:Cc; b=l7zlqsjiNm60NF5sQ4IYFmqGf0ygU2C/36DmYfo/D3/4ZDaKgC7CvL+7flO7tvLyWFGB10U3Vc0niOj9zHzgykTU/b88AKEVyqn/a5d1M8Sh1s5gBiNmVQZolGIpPz6w+Q4IKONgZ0kqXNCHoc5yROPKV55d1LWQ8Nx1UUZJZ00=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=uabs9i8P; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 02B47C4CEF0;
Wed, 28 May 2025 15:40:44 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748446844;
bh=xjbGGtsovR47x5VeJpAiXdFmv9RG3ZrB72S+d5ljXTo=;
h=Subject:From:In-Reply-To:References:Date:To:Cc:From;
b=uabs9i8PmvuySKKHY8qP01nt19X6aTJgoILLaKtYzOfIXThOYoB7PyFrWgh4+2VkX
aYV7E9J5H80QjBXqOtE7tZQUFBSa/EaeY6UOvQqpX5ayYC+F4SnI9r2/ekZKuacJLG
uyQbDyzQO07Nok88cM5su5wHT/5x84FKDxgI0K1uOGsRr7wxDWYz6JzI/GDAEZvWE8
QczaHc79ZEqQaQ1tNTYo/oXpNP4BlADaEBi6H/cucZQc9oNVWhGTC4bX94vljXj8Fk
AmSV1xQJupZU0Kb41Augt0wdjp2sdnxf7tlocZLHNyUb7qE6yn3FwcKY30+MwvCArk
T8UHWfwRpDB3g==
Received: from [10.30.226.235] (localhost [IPv6:::1])
by aws-us-west-2-korg-oddjob-rhel9-1.codeaurora.org (Postfix) with ESMTP id 33EB93822D1A;
Wed, 28 May 2025 15:41:19 +0000 (UTC)
Subject: Re: [GIT PULL] selinux/selinux-pr-20250527
From: pr-tracker-bot@xxxxxxxxxx
In-Reply-To: <c19db64a8086ec30050d9f5012204a6b@xxxxxxxxxxxxxx>
References: <c19db64a8086ec30050d9f5012204a6b@xxxxxxxxxxxxxx>
X-PR-Tracked-List-Id: <linux-security-module.vger.kernel.org>
X-PR-Tracked-Message-Id: <c19db64a8086ec30050d9f5012204a6b@xxxxxxxxxxxxxx>
X-PR-Tracked-Remote: https://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/selinux.git tags/selinux-pr-20250527
X-PR-Tracked-Commit-Id: 05f1a939225ec895a97a6b2f1cf64e329b6474f5
X-PR-Merge-Tree: torvalds/linux.git
X-PR-Merge-Refname: refs/heads/master
X-PR-Merge-Commit-Id: b5628b81bd19fa52d6a35e49336c58d7188eaf1b
Message-Id: <174844687809.2439471.16122471024617642094.pr-tracker-bot@xxxxxxxxxx>
Date: Wed, 28 May 2025 15:41:18 +0000
To: Paul Moore <paul@xxxxxxxxxxxxxx>
Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>, selinux@xxxxxxxxxxxxxxx, linux-security-module@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
The pull request you sent on Tue, 27 May 2025 18:57:40 -0400:
> https://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/selinux.git tags/selinux-pr-20250527
has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/b5628b81bd19fa52d6a35e49336c58d7188eaf1b
Thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/prtracker.html
Return-Path: <linux-kernel+bounces-665735-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 0654541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:41:44 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 93DAE1BC49E2
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:41:56 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 6B15128C853;
Wed, 28 May 2025 15:41:28 +0000 (UTC)
Received: from mxct.zte.com.cn (mxct.zte.com.cn [183.62.165.209])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 463F228C5D0;
Wed, 28 May 2025 15:41:24 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=183.62.165.209
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446887; cv=none; b=cOOJscMhYiPvARzA/SkTMOen5PRxGzrurXlxb6k8Zpirex1lIWZn3AtXZlGl/7A6bDmgVl5wtIC09/+SKbkfmTmsTatfI6lqSyHHFWfpdOq3ZzTs0iLbXFmnV2AnpFEmqt1Bk/N/DYYElzKdMX8GNSgokclCJb+k6iu9SALYM/g=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446887; c=relaxed/simple;
bh=ZoivlCVqrph/MUahm4m/Oxnhfyt3cfki4kCEuld9nAY=;
h=Date:Message-ID:In-Reply-To:References:Mime-Version:From:To:Cc:
Subject:Content-Type; b=hui+KT0DTpVtHv1GNIgkEIPihnvJ45h2Bdc56OACqFakXnNIA+8Uws78B3f+tuFj0JGckp3/BzjnCAi7hP84itED7HUW7tCnAsxKPAMoRoIsbmz7LVty4UaQMS/uw86DnkY8vdiUamqkqUXnL3Sm3iFW3+z6xRVh1D9eUyLSl10=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zte.com.cn; spf=pass smtp.mailfrom=zte.com.cn; arc=none smtp.client-ip=183.62.165.209
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zte.com.cn
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=zte.com.cn
Received: from mse-fl1.zte.com.cn (unknown [10.5.228.132])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by mxct.zte.com.cn (FangMail) with ESMTPS id 4b6tyP6VtLz4x6CZ;
Wed, 28 May 2025 23:41:17 +0800 (CST)
Received: from xaxapp04.zte.com.cn ([10.99.98.157])
by mse-fl1.zte.com.cn with SMTP id 54SFfD8v025796;
Wed, 28 May 2025 23:41:14 +0800 (+08)
(envelope-from xu.xin16@xxxxxxxxxx)
Received: from mapi (xaxapp02[null])
by mapi (Zmail) with MAPI id mid32;
Wed, 28 May 2025 23:41:16 +0800 (CST)
Date: Wed, 28 May 2025 23:41:16 +0800 (CST)
X-Zmail-TransId: 2afa68372e9cffffffffcdf-075ee
X-Mailer: Zmail v1.0
Message-ID: <202505282341166875usqhF9LuBlmx70Sd33jP@xxxxxxxxxx>
In-Reply-To: <b7f41a3d8a8538d73610ace3e85f92bb20f8eb42.1747844463.git.lorenzo.stoakes@xxxxxxxxxx>
References: cover.1747844463.git.lorenzo.stoakes@xxxxxxxxxx,b7f41a3d8a8538d73610ace3e85f92bb20f8eb42.1747844463.git.lorenzo.stoakes@xxxxxxxxxx
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
Mime-Version: 1.0
From: <xu.xin16@xxxxxxxxxx>
To: <lorenzo.stoakes@xxxxxxxxxx>
Cc: <akpm@xxxxxxxxxxxxxxxxxxxx>, <viro@xxxxxxxxxxxxxxxxxx>,
<brauner@xxxxxxxxxx>, <jack@xxxxxxx>, <Liam.Howlett@xxxxxxxxxx>,
<vbabka@xxxxxxx>, <jannh@xxxxxxxxxx>, <pfalcato@xxxxxxx>,
<david@xxxxxxxxxx>, <chengming.zhou@xxxxxxxxx>, <linux-mm@xxxxxxxxx>,
<linux-kernel@xxxxxxxxxxxxxxx>, <linux-fsdevel@xxxxxxxxxxxxxxx>,
<shr@xxxxxxxxxxxx>, <wang.yaxin@xxxxxxxxxx>, <yang.yang29@xxxxxxxxxx>
Subject: =?UTF-8?B?UmU6IFtQQVRDSCB2MiAxLzRdIG1tOiBrc206IGhhdmUgS1NNIFZNQSBjaGVja3Mgbm90IHJlcXVpcmUgYSBWTUEgcG9pbnRlcg==?=
Content-Type: text/plain;
charset="UTF-8"
X-MAIL:mse-fl1.zte.com.cn 54SFfD8v025796
X-Fangmail-Anti-Spam-Filtered: true
X-Fangmail-MID-QID: 68372E9D.000/4b6tyP6VtLz4x6CZ
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
> In subsequent commits we are going to determine KSM eligibility prior to a
> VMA being constructed, at which point we will of course not yet have access
> to a VMA pointer.
>
> It is trivial to boil down the check logic to be parameterised on
> mm_struct, file and VMA flags, so do so.
>
> As a part of this change, additionally expose and use file_is_dax() to
> determine whether a file is being mapped under a DAX inode.
>
> Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>
> Acked-by: David Hildenbrand <david@xxxxxxxxxx>
> Reviewed-by: Chengming Zhou <chengming.zhou@xxxxxxxxx>
> ---
> include/linux/fs.h | 7 ++++++-
> mm/ksm.c | 32 ++++++++++++++++++++------------
> 2 files changed, 26 insertions(+), 13 deletions(-)
All looks good to me.
Reviewed-by: Xu Xin <xu.xin16@xxxxxxxxxx>
Return-Path: <linux-kernel+bounces-665734-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 128F741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:41:45 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 9FAE54A834E
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:41:44 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 76C5828C5C1;
Wed, 28 May 2025 15:41:28 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="W9UmxWi3"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9DAED28C2CE
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:41:27 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446887; cv=none; b=KqVrYsUZvj7PDLyWBBDmfgPS/7zKTXs9JltSglRIqv7yZx6NGpodAZv6vTNs5yvoTXATcSk+Wy+kFn/a5wLmDrWVyPt7tj1EnwlFc5+T8R7jiw9fkK47b4bqEpoMhMfE5sruT18N9wAN0JDr5bEvNGttTqUfvM3doDUiqbbw5ao=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446887; c=relaxed/simple;
bh=UBAeWcVKwYuOyOZF+0KXZos+mVGByw8QFXn39HteDoQ=;
h=Subject:From:In-Reply-To:References:Message-Id:Date:To:Cc; b=qCskvKO+pWOJfW3ydCCuKgtzR9kF4qOz7NNh15fZW9/4pN8T8EsyiYMpWoe0v9LvxJYWQUfRdhqpTZ0gIkqiu0smU7+IeKRnoNMqwwYoNW6kZx6HFo4K9UU9q1wr5EauOmiuQOQ/9By36xWuzYyl3t7Ruko2o1w04QEyqCMV2+U=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=W9UmxWi3; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7C8B7C4CEE3;
Wed, 28 May 2025 15:41:27 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748446887;
bh=UBAeWcVKwYuOyOZF+0KXZos+mVGByw8QFXn39HteDoQ=;
h=Subject:From:In-Reply-To:References:Date:To:Cc:From;
b=W9UmxWi3inR7YvTl//AnpCDF2zACzY1UF3z46xF/cwgMDODpqFwi+7JD0yWVBQr+d
uACWnc86CPO2x7RvwPm3uk9tCkcfzFWbJej1tt/nCZUZ1LREoChMInBDWKkvZZUfoq
sXUN2W8ESYT09OwmAvKa/fZJL7CQxA3ZCxuhfVdL6qJ0acXx05LUe+Wd8IbxlLt05n
+vw8t9fKZbjV1zpk+F45ZCnazdAcWuuH4R0vxmqve1YZASbnYXvNG7M9c5eyh1Ar3v
hnYnRtJW3mLEzawlY+Fu2oz/l3YJyRKXrTTyeCyNSne79K4IhYOEp/kfmCDKWzv9xj
Cecl5S+BzDOIg==
Received: from [10.30.226.235] (localhost [IPv6:::1])
by aws-us-west-2-korg-oddjob-rhel9-1.codeaurora.org (Postfix) with ESMTP id ADF943822D1A;
Wed, 28 May 2025 15:42:02 +0000 (UTC)
Subject: Re: [GIT PULL] seccomp updates for v6.16-rc1
From: pr-tracker-bot@xxxxxxxxxx
In-Reply-To: <202505261937.AFE76B5@keescook>
References: <202505261937.AFE76B5@keescook>
X-PR-Tracked-List-Id: <linux-kernel.vger.kernel.org>
X-PR-Tracked-Message-Id: <202505261937.AFE76B5@keescook>
X-PR-Tracked-Remote: https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git tags/seccomp-v6.16-rc1
X-PR-Tracked-Commit-Id: a9b33aae79cea2e55fd9204069a29b2e59f012a5
X-PR-Merge-Tree: torvalds/linux.git
X-PR-Merge-Refname: refs/heads/master
X-PR-Merge-Commit-Id: 96d40793abc65341c4274169a4444fcfe5f0e6da
Message-Id: <174844692127.2441113.7935479799320535085.pr-tracker-bot@xxxxxxxxxx>
Date: Wed, 28 May 2025 15:42:01 +0000
To: Kees Cook <kees@xxxxxxxxxx>
Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx, Kees Cook <kees@xxxxxxxxxx>, Neill Kapron <nkapron@xxxxxxxxxx>, Sumanth Gavini <sumanth.gavini@xxxxxxxxx>, Terry Tritton <terry.tritton@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
The pull request you sent on Mon, 26 May 2025 19:37:27 -0700:
> https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git tags/seccomp-v6.16-rc1
has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/96d40793abc65341c4274169a4444fcfe5f0e6da
Thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/prtracker.html
Return-Path: <linux-kernel+bounces-665733-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 0EA7341E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:41:48 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id B24C63A17A9
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:41:12 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 77C7A28C2DE;
Wed, 28 May 2025 15:41:27 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="PrdyLP51"
Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013047.outbound.protection.outlook.com [40.107.162.47])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 53E352882DE
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:41:23 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.47
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446886; cv=fail; b=WOH6jLHg6ohj9t4YvyK7+9ePU1hTGGmtrlgh+4Ix0oi3/j0ag788fYbzovzhV1lao4tptjyqTGetTG73zg3ILazxWz+m3koSRLlpFFEEwNEpQAm34cybolIssjSfcLtorrPkDIj79VKp7mkga6yk0DA/RwFP6ylBc9OQQ136l74=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446886; c=relaxed/simple;
bh=MBj4Pf4+Q9lowubj5SXmbezTPKOCLCWvYgnvJgZYyCE=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=PZ5M8Y/8ivMNsJmn1JPZnhIsxPjOcNr3loeXtsknfVldUQXkJjVMgbaF0G2YPgKn2OglbRUTZ4Nv98lgtVzmsMVT7uKSELwFybqSW6BZh6HJhHC5Qw4lPA+RVYM4UQPGqfSsISDTLnNuXi/YIWOdd85ipoNzk9APzfLWB+fsiHg=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=PrdyLP51; arc=fail smtp.client-ip=40.107.162.47
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=oioT3+Cwtar26zFZo5DOcEGImqHEOt9We92R2GhKdDXcTqPrjBherw07eOAG2yXP3xKF1492S2j4kaQ9110W6OW67Zt7vuNH2aFqjxE7SfXc+7Bx2Pq38ic6axpYlR0wphNBvdBMmASe8i8EanD902Osf/Y/jOiWBZJm1d8ciTU9zW14g1+4t5oOV4BRsa9CrS832gp5/WFsV6Czm4tFUNcGXq/a4+mRpJOV62YLVCWvrA0IUQJPe3lB6PwShI7az+ADDAMA7HoNNpljcQwWKed15KGYiKstiGt1Dwvt1onxdSFlkjiyKMu4lDR1J74eis0feVFFq1Of1HjiIl/62w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=ouTfvaQ0tUDL8ERzY5Cz16eJeqTm+7O2B/OHQpVohWM=;
b=ER1iVgdQLevf7kPpJhG2nGgngMvXT0yNZUm/81+03+/FnscNfiZmouzIT9qazniywLJ/JRWmpFbkc/y7XmuW9qLVRm81ztxCgIz+gS+L+ctl5nFI0Qq7dF83u43zmzr7W/anJRYGTQRFSV+z+OMHewR6nXZGSefL6/uXNFGrYDXfxNfWIbWl1fTJhwUW7TFiMVe8UrK4NRahNUC/wAIlXp0Ula5bTyXUovVIpT5QOZ3L270KXVz+AjIl3lVwc+BoiJTwdxMufDt4r/7T0feaYR+LaWfiFfjW5AbmlpmqaLlrFRtL7NZo9Hg1hbMf6bCtWXwct1IocnShW/S2Zf1Iig==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=ouTfvaQ0tUDL8ERzY5Cz16eJeqTm+7O2B/OHQpVohWM=;
b=PrdyLP51iiTVt8/LTC9ydyR5SDIF9LnTnEkoDW0orw8jlGy+jDr07x2xSIkRJ6Pj80+MNIHZF1jzCXlZaPOGDMedDyec6DFHmiiVcDlLQdTa8/2g4Aj7C3VL+6aeb4iH5ZZJArgJzgU/7sx0BzgIuyNdQ+ATS0EjQfI4EYxBNWXB832w0gtoI+in0xlqKzSayhiPf8fZQzfCZsIeR9ks3wTlohE32OH8ImgKrDCXgs+BkB7F+sEX6bWmiGiFZggZLJPgMxW6XLbz6TJFVp71Q8L65Km5AOmSBmxrioDc31eIB/pGHoyfiEJT26NzdneuwcyrGNxAg0gShN2DHw/uTw==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by AM9PR04MB7604.eurprd04.prod.outlook.com (2603:10a6:20b:287::5) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.24; Wed, 28 May
2025 15:41:21 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
15:41:21 +0000
Date: Wed, 28 May 2025 11:41:14 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: Ciprian Costea <ciprianmarian.costea@xxxxxxxxxxx>
Cc: Shawn Guo <shawnguo@xxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx,
Christophe Lizzi <clizzi@xxxxxxxxxx>,
Alberto Ruiz <aruizrui@xxxxxxxxxx>,
Enric Balletbo <eballetb@xxxxxxxxxx>,
Eric Chanudet <echanude@xxxxxxxxxx>, imx@xxxxxxxxxxxxxxx
Subject: Re: [PATCH] arm64: dts: s32g: add RTC node
Message-ID: <aDcumpWLhNh98WVR@lizhi-Precision-Tower-5810>
References: <20250526162954.2467894-1-ciprianmarian.costea@xxxxxxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250526162954.2467894-1-ciprianmarian.costea@xxxxxxxxxxx>
X-ClientProxiedBy: SJ0PR05CA0115.namprd05.prod.outlook.com
(2603:10b6:a03:334::30) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|AM9PR04MB7604:EE_
X-MS-Office365-Filtering-Correlation-Id: e4554ac1-f04f-410b-7af1-08dd9dfe185f
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|1800799024|376014|52116014|366016|38350700014;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?z+9oOMZubATMpUVtmMhV4eptCG7zzx7J0b78Puu1jdtqiJy9RISNKoFy15HE?=
=?us-ascii?Q?doLREU/TCDMjTVmOzfZpg0XrvKn6SrQt2RWe46xh+cZV6u9iyWLh2zDHA4iH?=
=?us-ascii?Q?C+xiMZm4BnAJqqUCPBi2w//3gu7NhsbdxUZggzk3WA4Ohll0RHc1bptmOFAY?=
=?us-ascii?Q?00XdFZAkfqTEVhnL45+HyMOCD9jXWZlr2JVTYv3EG2z3J8Yz2djQ8Ap8b30Q?=
=?us-ascii?Q?kJqcOypQDQzvY0CSU6ZkvNEwVC+6PpRHQ3Itco+isKQ55l6e4IbzGY9kFZax?=
=?us-ascii?Q?K35SYFbZJXnYmhmy21tjzcxzo8fA/5yvVLBN1TdGuFqwardsDTLyFHNNaqLu?=
=?us-ascii?Q?Zuy3wyU8sicmdKgnFFquO6n5WT3UL5hF1yryT3370Lu1fpz+uIQjsgNUk9Kx?=
=?us-ascii?Q?OQC0ANSX/Xh5rC1MCEAeD4hQcaJ2hR0p8mYXOTbtvmRF8FyqWfoVxXajgN+B?=
=?us-ascii?Q?PgWPcctPnTrBPyohZX70J/w4K8G5+6phLExim6EUYBWmucenv1h11Thb6OGv?=
=?us-ascii?Q?e6h7xrB4ck7SEMt24aHrak2iev3pdA3JYYpT7IOzzZxKMe56jz0ie7Dw+zyN?=
=?us-ascii?Q?LOtVvPWYgV2kDoVZIRe7ao6u7ca/iAiN597GmFvE23gTt2ll1vjimvXL3/ha?=
=?us-ascii?Q?Ydz2bkXRu06BejLEEme1fUyZML5N+aN/57NMJ8YVMbEJi55HR1j82tKPbPvz?=
=?us-ascii?Q?JDGc1CuPVqcedLi0CfE3wN+bkBPyYjCoRzhgvOMYeXRkpNQXqOsmD3Tb3WOE?=
=?us-ascii?Q?Vh1gz53sGIMqqxjAw9S2aupNVq31dMhIMiuaeTg7h6MifqsSxr99qdlvjyDZ?=
=?us-ascii?Q?AQYtuujjoLOuB58Q22haPIODjMEeCoEOKbY05g5aJdTaCMzIlc1hZm4vjGlZ?=
=?us-ascii?Q?pIObrCSXrcVeVfADvc230hUAzDuIfp2AkJmqXU+wsUno/qc8ZufUEubbXYHH?=
=?us-ascii?Q?9khdeCKLNbqYd+YvLDFmCG334ui6VEVrqJOVGPvXriLeEQTxHmVhQDafZ3jQ?=
=?us-ascii?Q?tK7I0Jc4Jjz4uyfVcclfVHmnmRS7VGo5CVSZX11oqgRyrjG8PKgP1ykX7ae/?=
=?us-ascii?Q?rtkubGlyGH6NHQ5ByFZ04gUIeIn8ZtHwnPhH9xS5MOQgzYJSYF7zWRf6GugZ?=
=?us-ascii?Q?5ERxm6P1L3j9RXhABxx8+Z/hcOdoqmJHvs5jaCeM3Xk814g/xMMKI0lCTWO/?=
=?us-ascii?Q?iMAUUit4tEt3Bk2Kmj5XK96m7tLBkR2tu3LAW60iB2FH23RbxxCL1t7OVfNE?=
=?us-ascii?Q?o1V5siODImZf3X2oBmir0ZlLTE7g0coDxzDq+QF6GdgShauX6DYKcfzvFRRw?=
=?us-ascii?Q?dGqQuUlVONAhzUJp2m0Uo5SOn0R2JWHKM/X2PEc2X2xnneboo4sGOZbpikz0?=
=?us-ascii?Q?T3xMkZ8xXrTHZ42JVVsjgmNOSct5dDKL1ZI1LUTojPHQU/1KqW5krjY6GY96?=
=?us-ascii?Q?7GyFpvCsG5wRpKklX8Grx6HSX1BPt5rdQR6sdxpp+gKAP2ZjbqjFnQ=3D=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(52116014)(366016)(38350700014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?8+IImz2InF1+svTyMCLGYQS60UcXS88Ad4gdGPIpazW2d0nVL7CW48m5hf6/?=
=?us-ascii?Q?0kDEff5/9EJ6ADex/WW87L5FDCPSZPp9v7+pakD3S3CPfiDiD+/oYlhpiYsC?=
=?us-ascii?Q?1LIoaTbUp7JI1vEwf5HERkErlaD5cMSy7QU0vLfl/2rriO6XalUKnGVArvfO?=
=?us-ascii?Q?/jszeMCiMTDnlK0Ju7Ya6tN/2futqoQ4Uvi6k7B/gabRw+BjQ1TYwACX91di?=
=?us-ascii?Q?PAw+/UCnY+WcS5LPGY0pRKV1VXSTjywiovZAOsvC7ZiXuoo9e+yWZXuCC702?=
=?us-ascii?Q?vuSIaIoG+gYYkcXaq720fSvAsegRS/rFbZPB5Wtb0sXiTAKSIqWYc0nj1WAx?=
=?us-ascii?Q?Ba4bGfoWmDwWgElwtfzYNY8PPHx/spbHjrveZ4PslNWZXiKK5EMI6IsZ3+IN?=
=?us-ascii?Q?Mml9kr29HB4Va7LpFnyvIK+/HjOBSus1m+aR97Fe0xeL+NFSJj30aDTg6jTd?=
=?us-ascii?Q?ETcbyTdymNoqOnqQDwabyynxnGqGxGpatm1fn0e4OLKzoTqpEXkB1U2yu3m/?=
=?us-ascii?Q?JSNrUNp7sGvZ+9P77Vl3QCWeT/1ow+zsioUD4h0NrfoLAoScSFxeDI77KA1g?=
=?us-ascii?Q?zucwIAKAetAlSZ5dBvhYV6SUi4m/pPVsE3uZ5l6LD3bcdXgR/JSTeJaJ305n?=
=?us-ascii?Q?wF5FQ1YbPFjg9dSoPx4AyR12ig5qzAfIoewyrMAZknlR7Z8UzP9U/EHwC5lw?=
=?us-ascii?Q?gIWMm0m0amzDCys3o6rKBie4liZ0gEEI/+CUKWJ6RWF+GqUVY7BnbP4Iy03C?=
=?us-ascii?Q?ZOHig0P5osZSui6hr8C/mra/qigOwRNaJRcykcKeMlcMUHAcUuX9R0eS2UlH?=
=?us-ascii?Q?xLUOJsoV0P7OY9xuwlzl769hp3HnF65k/zRcipIbjek4dcTzqZaBbA+c8ymT?=
=?us-ascii?Q?yHbICPZ8LS3Ubu1rQQSyh4Y4wRRHM50M7wlVNu3+17L5i78fYmQzDG3KYtz2?=
=?us-ascii?Q?+EtZXmlUBFjrqcrY4juHYht5ftGx/tO8s4t2LFhvNamk8P7h0+IZ1zEjaBA4?=
=?us-ascii?Q?Is8zWvIsLqcSpA5t57HdNLptfTAyAkYDhRpjAVwBBYd8N62ypEZVZhQeAUlN?=
=?us-ascii?Q?Jj5p0OLzf89g1d5APrKl4riHjcXFAhERcN9i8Y6SkS+Zq8p37c0aORligYe4?=
=?us-ascii?Q?T8pRpMre26twHKLVT1D8XgQF8GjHMuvijKuiq0qNQC27xJRJspFWW9EcqIfn?=
=?us-ascii?Q?GdKfOi2UOZPOnSKtKxwAM0AzZIHbQVH6eNIDiuDQw9wv4Dt4+0AdV5qZPLKR?=
=?us-ascii?Q?ZmdubbQ4yOM0rod8RhsOCJw5AFL2pGWbSKPgy4xy5PPxbXdOF7wtkfICj9C1?=
=?us-ascii?Q?Z5hrrZ8y62UvsBFsk0TFq/E2vjSBvbAvl05vC07JXSWko5fv5F+WrKcVUduP?=
=?us-ascii?Q?HqByLUW/vd0uG10tusY2LZdfIvRjYu4u/BAXiFhACNWRXvQOcW6Og88z83TR?=
=?us-ascii?Q?w/rCMV8/4I3NenqGM8ae2S9+IXohFuqSBiGMMys1+yJbNdHXyAl2dXVwInMQ?=
=?us-ascii?Q?mmyFfnPozvlV8xYWC7VUa4F8OHGDg3gE+lc+BPAtR02AxC+XRFI/41CzArID?=
=?us-ascii?Q?/2LqQXbjbTXjI1xWMCg=3D?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: e4554ac1-f04f-410b-7af1-08dd9dfe185f
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:41:21.4933
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: AYk3CKmW87rQHH5y7jpxT/0uhCxCiuJmAsLyuunJ7GurqFbalunDK0fKPpELxo6z5OPE9CUs5WAEz+xecEW7xw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB7604
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Mon, May 26, 2025 at 07:29:53PM +0300, Ciprian Costea wrote:
> From: Ciprian Marian Costea <ciprianmarian.costea@xxxxxxxxxxx>
>
> The RTC module on S32G2/S32G3 based SoCs is used as a wakeup source from
> system suspend.
>
> Signed-off-by: Ciprian Marian Costea <ciprianmarian.costea@xxxxxxxxxxx>
Reviewed-by: Frank Li <Frank.Li@xxxxxxx>
> ---
> arch/arm64/boot/dts/freescale/s32g2.dtsi | 8 ++++++++
> arch/arm64/boot/dts/freescale/s32g3.dtsi | 9 +++++++++
> 2 files changed, 17 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/freescale/s32g2.dtsi b/arch/arm64/boot/dts/freescale/s32g2.dtsi
> index fa054bfe7d5c..39d12422e3f3 100644
> --- a/arch/arm64/boot/dts/freescale/s32g2.dtsi
> +++ b/arch/arm64/boot/dts/freescale/s32g2.dtsi
> @@ -114,6 +114,14 @@ soc@0 {
> #size-cells = <1>;
> ranges = <0 0 0 0x80000000>;
>
> + rtc0: rtc@40060000 {
> + compatible = "nxp,s32g2-rtc";
> + reg = <0x40060000 0x1000>;
> + interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
> + clocks = <&clks 54>, <&clks 55>;
> + clock-names = "ipg", "source0";
> + };
> +
> pinctrl: pinctrl@4009c240 {
> compatible = "nxp,s32g2-siul2-pinctrl";
> /* MSCR0-MSCR101 registers on siul2_0 */
> diff --git a/arch/arm64/boot/dts/freescale/s32g3.dtsi b/arch/arm64/boot/dts/freescale/s32g3.dtsi
> index b4226a9143c8..e71b80e048dc 100644
> --- a/arch/arm64/boot/dts/freescale/s32g3.dtsi
> +++ b/arch/arm64/boot/dts/freescale/s32g3.dtsi
> @@ -171,6 +171,15 @@ soc@0 {
> #size-cells = <1>;
> ranges = <0 0 0 0x80000000>;
>
> + rtc0: rtc@40060000 {
> + compatible = "nxp,s32g3-rtc",
> + "nxp,s32g2-rtc";
> + reg = <0x40060000 0x1000>;
> + interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
> + clocks = <&clks 54>, <&clks 55>;
> + clock-names = "ipg", "source0";
> + };
> +
> pinctrl: pinctrl@4009c240 {
> compatible = "nxp,s32g2-siul2-pinctrl";
> /* MSCR0-MSCR101 registers on siul2_0 */
> --
> 2.45.2
>
Return-Path: <linux-kernel+bounces-665736-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D2AEB41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:42:05 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id F33727B070E
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:40:46 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 1CCB428CF5D;
Wed, 28 May 2025 15:41:30 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jqByh58m"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5C75628C87B
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:41:29 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446889; cv=none; b=JUNW7M5MiYTmhXSDpVBUYk0bjYRIcUBi3Mi4AJvyzOXZqcvT2B/ggMpNZSP1HDnuzZOgle26ie0sDybOiiNUliiHztEyxm4Zuo58s6lRNGy2Y7S2Xc9cGe4Z8vbJQgweQ9TSiBPT/5fhCO88Vy0eAaQYMTUrW+cWog9lW/NrUqM=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446889; c=relaxed/simple;
bh=7EQ2E7kk7MhXqr82SAjRqE3m120h7nBfPj59qvIaMTY=;
h=Subject:From:In-Reply-To:References:Message-Id:Date:To:Cc; b=IOKxBFrXvRNAEYrO5C8OlBNihGCwkOE5vK8A4Xz6Zo5Si4K3bhIVRWZ/JudK4vNYFsBUOu7Br9Ufu87sPtflfsR8zJ//KN+QMoi1IADfTWSfQWCkjxdbb2JA6QItZprBeEUhHEsI4t6h/l1F8u05Es345KJffDtRycCPsL1GrMU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jqByh58m; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2FA52C4CEE3;
Wed, 28 May 2025 15:41:29 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748446889;
bh=7EQ2E7kk7MhXqr82SAjRqE3m120h7nBfPj59qvIaMTY=;
h=Subject:From:In-Reply-To:References:Date:To:Cc:From;
b=jqByh58mEWwUA03HLzWTqbCjJ1zU6++NOxpE2pxCwTWOo0y2BxHd3lKh8ouVjqoYo
6KW2GIfdNlZXPyaL7l3ZJFzmkDxVUS3bCV1smoihs+xP3nf0mkjiZz1FKOhCL21Sj+
57GHZEMUSE4uPDkMdZLBNbqMj5HmCXlPnRHlyEX7f5zMcdjPASjeqHVAhxjtDYugBZ
tKMo0jgO16xLkYnz9zHBS9cygSoldhQ2nscsdy0WoN7KJ+FwiH4u/7A+qSfIIv8vlq
/2qfsLd4/QRJug/LTbe8FSWWEHlU9BwE/FRmYGHN6ONGHg9WlcGCK+aieyFgBlAXJh
rnCJD+/ZMY3mg==
Received: from [10.30.226.235] (localhost [IPv6:::1])
by aws-us-west-2-korg-oddjob-rhel9-1.codeaurora.org (Postfix) with ESMTP id 70F353822D1A;
Wed, 28 May 2025 15:42:04 +0000 (UTC)
Subject: Re: [GIT PULL] hardening updates for v6.16-rc1
From: pr-tracker-bot@xxxxxxxxxx
In-Reply-To: <202505262001.561C185@keescook>
References: <202505262001.561C185@keescook>
X-PR-Tracked-List-Id: <linux-kernel.vger.kernel.org>
X-PR-Tracked-Message-Id: <202505262001.561C185@keescook>
X-PR-Tracked-Remote: https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git tags/hardening-v6.16-rc1
X-PR-Tracked-Commit-Id: f0cd6012c40da99b45f8f63052b97ec89d5f307b
X-PR-Merge-Tree: torvalds/linux.git
X-PR-Merge-Refname: refs/heads/master
X-PR-Merge-Commit-Id: 48cfc5791d83b630fd90a1b64a15a6d09c186f99
Message-Id: <174844692307.2441113.1173997929588626055.pr-tracker-bot@xxxxxxxxxx>
Date: Wed, 28 May 2025 15:42:03 +0000
To: Kees Cook <kees@xxxxxxxxxx>
Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx, Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>, Ard Biesheuvel <ardb@xxxxxxxxxx>, Arnd Bergmann <arnd@xxxxxxxx>, Christoph Hellwig <hch@xxxxxx>, Coly Li <colyli@xxxxxxxxxx>, David Gow <davidgow@xxxxxxxxxx>, "Dr. David Alan Gilbert" <linux@xxxxxxxxxxx>, Guenter Roeck <linux@xxxxxxxxxxxx>, "Gustavo A. R. Silva" <gustavoars@xxxxxxxxxx>, Harry Yoo <harry.yoo@xxxxxxxxxx>, Jan Hendrik Farr <kernel@xxxxxxxx>, Justin Stitt <justinstitt@xxxxxxxxxx>, Kees Cook <kees@xxxxxxxxxx>, Mark Brown <broonie@xxxxxxxxxx>, Miguel Ojeda <ojeda@xxxxxxxxxx>, Nathan Chancellor <nathan@xxxxxxxxxx>, Nicolas Schier <n.schier@xxxxxx>, Thomas =?iso-8859-1?Q?Wei=DFschuh?= <thomas.weissschuh@xxxxxxxxxxxxx>, Venkat Rao Bagalkote <venkat88@xxxxxxxxxxxxx>, WangYuli <wangyuli@xxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
The pull request you sent on Mon, 26 May 2025 20:25:28 -0700:
> https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git tags/hardening-v6.16-rc1
has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/48cfc5791d83b630fd90a1b64a15a6d09c186f99
Thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/prtracker.html
Return-Path: <linux-kernel+bounces-665738-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 4C4F541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:42:32 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 109C27B0F8B
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:41:14 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 7432828D85D;
Wed, 28 May 2025 15:41:35 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mnpR+1bW"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id BB6F628D843;
Wed, 28 May 2025 15:41:34 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446894; cv=none; b=lvc4c78yVZQFGV7i+0cbUIexP8UQC6LYBQIBrpOL9yCb9SWvNR7T7gFtXwGVzw4XqrpCC6ZrukrfiUqf+YrSsPmBRcwzsJ9qm01FF6X1jzkaN423LwTbncwE55Ee64AE31hE8Zkgfhbf9VE/Fg6Z1iT8AEpihA6iJuJtKIKnfM4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446894; c=relaxed/simple;
bh=Zf4Vz1X0gHcV9fxu1GsSCqVdmgjVwphYtInC9iPo02c=;
h=Subject:From:In-Reply-To:References:Message-Id:Date:To:Cc; b=oWM17bBPPybGXfpABWTII4IKBhQW4y24xmW/72hAlBVK2GUO1/evGs4GIOutA3qpdIGRL7ICWGwktHeMX6hIfhJzpv4Eu6OGzAK3mY+qPaiLOO8/AjMCTIzOU6Mdse0sgQQVJk1BQJYFY1SlrtqD7fiOyXwuAuvp1fMZxfoGPps=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mnpR+1bW; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 31D4CC4CEF0;
Wed, 28 May 2025 15:41:34 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748446894;
bh=Zf4Vz1X0gHcV9fxu1GsSCqVdmgjVwphYtInC9iPo02c=;
h=Subject:From:In-Reply-To:References:Date:To:Cc:From;
b=mnpR+1bWcq530JySFnJNFdnDXkVAeATHkuCUyMWhLzje/AxGIdAxJLIXqX+odQaHY
J1+1GURofeFA6unJFV08cZHMBY7RtZRodpn3eSx9lTnDT8jUB6sEy9SbyE2if/c98O
g0C8TdPRkPegiVKtm5tS2YxUXz4niGJIYmFnA5uCtQWufsNOJk6o1kzwPgMVRA47Uv
d0wyoVGq66B48hz9Xom2MFlCaoR267f7nb0XpJwUN0w8Uf8/lD29D/iRjpbYP2MAKK
jKrNwWZ2fgU+TZDBPWgpdNz02Z+bp3Vh6eGUq6YnN/8vpABpOj87nrQnUICvxP2kca
bEJs6FAHxoHYg==
Received: from [10.30.226.235] (localhost [IPv6:::1])
by aws-us-west-2-korg-oddjob-rhel9-1.codeaurora.org (Postfix) with ESMTP id 70F333822D1A;
Wed, 28 May 2025 15:42:09 +0000 (UTC)
Subject: Re: [GIT PULL] audit/audit-pr-20250527
From: pr-tracker-bot@xxxxxxxxxx
In-Reply-To: <2d7b064b34bcff7a6a8926cc29cae659@xxxxxxxxxxxxxx>
References: <2d7b064b34bcff7a6a8926cc29cae659@xxxxxxxxxxxxxx>
X-PR-Tracked-List-Id: <linux-kernel.vger.kernel.org>
X-PR-Tracked-Message-Id: <2d7b064b34bcff7a6a8926cc29cae659@xxxxxxxxxxxxxx>
X-PR-Tracked-Remote: https://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit.git tags/audit-pr-20250527
X-PR-Tracked-Commit-Id: 654d61b8e0e2f8b9bdea28a9a51279ecdacafe3c
X-PR-Merge-Tree: torvalds/linux.git
X-PR-Merge-Refname: refs/heads/master
X-PR-Merge-Commit-Id: 3d413f0cfd7ef0fe478e98fafcc084209520abd0
Message-Id: <174844692807.2441113.15130489872839846062.pr-tracker-bot@xxxxxxxxxx>
Date: Wed, 28 May 2025 15:42:08 +0000
To: Paul Moore <paul@xxxxxxxxxxxxxx>
Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>, audit@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
The pull request you sent on Tue, 27 May 2025 18:57:45 -0400:
> https://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit.git tags/audit-pr-20250527
has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/3d413f0cfd7ef0fe478e98fafcc084209520abd0
Thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/prtracker.html
Return-Path: <linux-kernel+bounces-665737-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id BC06441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:42:34 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 589611891916
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:42:34 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 5578728D830;
Wed, 28 May 2025 15:41:33 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dB/jUuvp"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8BB5B28C87B;
Wed, 28 May 2025 15:41:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446892; cv=none; b=LpY0Js1+iP/TTfc2UVqhfOFe0WkrAggCziJ+i8ndP2Cn0qrmUfInoktthd1+P45/FqUCacBnnD1nzBbdNwiFMTOCP3lR0XJpubrHBo1lO5zu+/QxtO+r33IaNj42r/CASN23FKH8ne2u4n/9e8pNzoXplbmksd0KT6PikMGI1hM=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446892; c=relaxed/simple;
bh=7K/y6JyC8q/ZeJma3Gm8frJuyZtLuLkkgxIM5zKBwG0=;
h=Subject:From:In-Reply-To:References:Message-Id:Date:To:Cc; b=J5oCkh5ZfmtUM69FmmkOzctZDgGPEpaPtlUs2pdYNBnahpf5FsTBBVEflQmH2F58+r3xmC2ytKfyEoc5Lc9riCOrBjDtzqH9kCG5u5BwX9ps0OJ2k1jRrmVLOlszyOyJnGWYE2WSc4Ogy1Y000HiVn0YiAupB8eObgD+3rYl0V8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dB/jUuvp; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6DB26C4CEE3;
Wed, 28 May 2025 15:41:32 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748446892;
bh=7K/y6JyC8q/ZeJma3Gm8frJuyZtLuLkkgxIM5zKBwG0=;
h=Subject:From:In-Reply-To:References:Date:To:Cc:From;
b=dB/jUuvp1FQzN/QXMPUEu6ZOrbAWctAP89SvkIm3Qi+kJFogwE8I03SZvXJzeWqWq
ItKzPVnXViwL4g+UnUyZ287Rl5f8khl64giDWhVC7jd32XnBSfi3XzTzmBvLPg0NhW
JFb7TodKko546uLA636ib2GnIVdp6bSDu9TRikte7EtLZrKiWFN3g4P8tWMyOZ6WcL
PI4vhuLW31YIIrXsJK829IXLfM/4kJkngW/OtSZX22Wpwek6tkvIIT4fObu0HUFS8n
AEywcaM2U7n0EGEJyFYLvQCaGexkB7cqpHD1ZfCh/1KxYKQgaEIRbPslQYz5xwe/kS
p4pXfM7hjAUFw==
Received: from [10.30.226.235] (localhost [IPv6:::1])
by aws-us-west-2-korg-oddjob-rhel9-1.codeaurora.org (Postfix) with ESMTP id ADC8A3822D1A;
Wed, 28 May 2025 15:42:07 +0000 (UTC)
Subject: Re: [GIT PULL] integrity: subsystem fixes for v6.16
From: pr-tracker-bot@xxxxxxxxxx
In-Reply-To: <283be073924bd046f180880b5912338744550884.camel@xxxxxxxxxxxxx>
References: <283be073924bd046f180880b5912338744550884.camel@xxxxxxxxxxxxx>
X-PR-Tracked-List-Id: <linux-kernel.vger.kernel.org>
X-PR-Tracked-Message-Id: <283be073924bd046f180880b5912338744550884.camel@xxxxxxxxxxxxx>
X-PR-Tracked-Remote: https://git.kernel.org/pub/scm/linux/kernel/git/zohar/linux-integrity.git/ tags/integrity-v6.16
X-PR-Tracked-Commit-Id: fe3aebf27dc1875b2a0d13431e2e8cf3cf350cca
X-PR-Merge-Tree: torvalds/linux.git
X-PR-Merge-Refname: refs/heads/master
X-PR-Merge-Commit-Id: 7af6e3febb919e8520a5946649993f7edb0495c7
Message-Id: <174844692631.2441113.3410356071953487182.pr-tracker-bot@xxxxxxxxxx>
Date: Wed, 28 May 2025 15:42:06 +0000
To: Mimi Zohar <zohar@xxxxxxxxxxxxx>
Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>, linux-integrity <linux-integrity@xxxxxxxxxxxxxxx>, linux-kernel <linux-kernel@xxxxxxxxxxxxxxx>, Roberto Sassu <roberto.sassu@xxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
The pull request you sent on Tue, 27 May 2025 18:08:35 -0400:
> https://git.kernel.org/pub/scm/linux/kernel/git/zohar/linux-integrity.git/ tags/integrity-v6.16
has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/7af6e3febb919e8520a5946649993f7edb0495c7
Thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/prtracker.html
Return-Path: <linux-kernel+bounces-665740-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D44A341E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:43:15 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 4CA3C189BA55
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:43:13 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id B80A828C5D0;
Wed, 28 May 2025 15:42:21 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Sf1/vDLj"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id DB7A228C2C6
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:42:18 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446940; cv=none; b=q5uSP/RwEhq+PhpdavTxRptX/NKeSPog8IXa+cNAZ2pAV/jT9PvcEziMr/KHPAsUPp1haAGWEmDcuH4qmFcA7OcGP2aYAbMmH2u0hFeaMRowdufF6IpG5BDeoTG5bi9TKKM/pxPgSzLciEwH4VUZGwBBRkwMboUEkX6dhsywN3g=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446940; c=relaxed/simple;
bh=HkS4d+IzeZMS7tBXehHuEfl4moAn3ga2VIQfnbEmVBk=;
h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=nkmnNFnvFGsYi7oosjiYpTvE/SBRxzwohx4T2dcEJNH1+JiCvm1jd7Sx2C5K74kiV2K8zuEMHTEqawHm/kvXjAyu8rqDMc1uRUYXKl98I67CGpIhxpkQy803xp/7AxQ/XaEiwBJDL1NhT+eT9NGFmubxlIUcXOOp3I58cCtc4Fo=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Sf1/vDLj; arc=none smtp.client-ip=170.10.129.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748446937;
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:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=JkVFHjCN69rMIYnSueLHuwO87ncH71LzvKdYlcB5jDE=;
b=Sf1/vDLjLg4Sase7XL4gN093yGfnrycbrpKCnFICRavytGBtk3eXXzad/x3trZNuPslhaO
FS/Rdo4zX1qRUs3z/Fj0kSJpa0x4Gd0+ObxJmfucE8QCXr3Bb6fj/5n0xXU1nwvGc+lzd9
sJ/lYSiZk8H6+OMy65ErEVnkOMi9ogE=
Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com
[209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS
(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
us-mta-593-m1RrOjqYOeimbbmdOYKPrA-1; Wed, 28 May 2025 11:42:16 -0400
X-MC-Unique: m1RrOjqYOeimbbmdOYKPrA-1
X-Mimecast-MFC-AGG-ID: m1RrOjqYOeimbbmdOYKPrA_1748446935
Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-442f4a3851fso34866395e9.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:42:15 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748446935; x=1749051735;
h=content-transfer-encoding:mime-version:references:in-reply-to
:message-id:subject:cc:to:from:date:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=JkVFHjCN69rMIYnSueLHuwO87ncH71LzvKdYlcB5jDE=;
b=Xzm64D/pe0dS6PodwF1JJLE9clxW78FTHXkY+oocc+M8O5zqHScHa8RVCiS8ZOi5nq
dvaTwCkUQQAkCzyY9kwSso1sjBaRkeDyX4Y2AjWECBq5ZCE6HKM7XJg4eUVHfuTbvEnH
Mt74pAX+TIh2nIv247qDXOQElAA0ZsQoXxDfptyA5bP5zNCIWVLxdN8s8j/xhfvgjCkZ
ApxKKKV3RCCivBNFHnU/hw/xDnNf7gNYGZdos4qLsjf7IWdHW30ROpXVjE7+8d4LfEc4
UweRJ5MXOvbV2GzUzrMABJdbfS3Vc2jWWdsPYEVhQFdy581AU3B5vmgge6KGBk6ObLx9
eO0A==
X-Forwarded-Encrypted: i=1; AJvYcCW77lYDK5EI4KE/R3L2TWPcz1vZRkbZMFbbU5jyEH1JyP9F+VsjPTQrGF0Rlc38m+ir3Iqq4WRq7u+D0Sk=@vger.kernel.org
X-Gm-Message-State: AOJu0YwVimTz3Sr+YAvNaumsGJHdU58LHCWV5zUFnnPLa56lvfDIGq+r
qtV8iJxPpAmiO42fPar0UjT8aMkujQPNQeBgUNmWv8Gjm1uVG1m5L92h0oyiMD99gf5YOFavtye
AsS8wP4tz60wVmNZ6+BSFS0UDqjvkXL18yQ2RHKu0kRduLio0s5p86zQIJGV8Y26g7w==
X-Gm-Gg: ASbGncumjQzonJjREb4eQ7d9NMaXzQIADvccWeM7rK4sOobRikIu6vAygSINJPzj+w0
O5ef1yK+Ujt2FJSrkM746JDD6zaSZ/FMIhRMC4ZXxmXAK1aLyfP1ZtDHcZx0eE1LzIZaYq9Z+ot
TCI2h8aLT+cbADzN+F6ywKTEaAyzb9DjRrbYKi3c8SqRf7iI4FibCOTmM7Zq2stv1v+i7z4P57t
oPTFYuMe3Oa+392ZCZneZXyMXQDbXCFyoMwpTCpT9h7YMUG1ymfvak0AnzqnOMIhVUZGdy3X35w
J16QzkN7P+/p0SVdUtEHedquNX1uSDuw
X-Received: by 2002:a05:600c:4ecc:b0:43c:ec28:d31b with SMTP id 5b1f17b1804b1-44c941880cbmr198078795e9.10.1748446934784;
Wed, 28 May 2025 08:42:14 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IEhMhP3AFA8siIQZeA7ho8Lq7zKFRO7eRXp30XQAFRSeMpQ9zxWigwT0rvakMhJPQqK4OZRhg==
X-Received: by 2002:a05:600c:4ecc:b0:43c:ec28:d31b with SMTP id 5b1f17b1804b1-44c941880cbmr198078455e9.10.1748446934380;
Wed, 28 May 2025 08:42:14 -0700 (PDT)
Received: from imammedo.users.ipa.redhat.com ([85.93.96.130])
by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4500e1dd785sm25901345e9.39.2025.05.28.08.42.13
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 08:42:13 -0700 (PDT)
Date: Wed, 28 May 2025 17:42:12 +0200
From: Igor Mammedov <imammedo@xxxxxxxxxx>
To: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx>
Cc: "Michael S . Tsirkin" <mst@xxxxxxxxxx>, Jonathan Cameron
<Jonathan.Cameron@xxxxxxxxxx>, Shiju Jose <shiju.jose@xxxxxxxxxx>,
qemu-arm@xxxxxxxxxx, qemu-devel@xxxxxxxxxx, Philippe =?UTF-8?B?TWF0aGll?=
=?UTF-8?B?dS1EYXVkw6k=?= <philmd@xxxxxxxxxx>, Ani Sinha
<anisinha@xxxxxxxxxx>, Eduardo Habkost <eduardo@xxxxxxxxxxx>, Marcel
Apfelbaum <marcel.apfelbaum@xxxxxxxxx>, Peter Maydell
<peter.maydell@xxxxxxxxxx>, Shannon Zhao <shannon.zhaosl@xxxxxxxxx>, Yanan
Wang <wangyanan55@xxxxxxxxxx>, Zhao Liu <zhao1.liu@xxxxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH v9 12/20] acpi/generic_event_device: add logic to detect
if HEST addr is available
Message-ID: <20250528174212.2823d3de@xxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
In-Reply-To: <aa74b756f633dbee5442cf4baa2c1d81a669d2f9.1747722973.git.mchehab+huawei@xxxxxxxxxx>
References: <cover.1747722973.git.mchehab+huawei@xxxxxxxxxx>
<aa74b756f633dbee5442cf4baa2c1d81a669d2f9.1747722973.git.mchehab+huawei@xxxxxxxxxx>
X-Mailer: Claws Mail 4.3.1 (GTK 3.24.49; x86_64-redhat-linux-gnu)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, 20 May 2025 08:41:31 +0200
Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx> wrote:
> Create a new property (x-has-hest-addr) and use it to detect if
> the GHES table offsets can be calculated from the HEST address
> (qemu 10.0 and upper) or via the legacy way via an offset obtained
> from the hardware_errors firmware file.
it doesn't apply to current master anymore
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx>
> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
> Reviewed-by: Igor Mammedov <imammedo@xxxxxxxxxx>
> ---
> hw/acpi/generic_event_device.c | 2 ++
> hw/arm/virt-acpi-build.c | 18 ++++++++++++++++--
> hw/core/machine.c | 5 ++++-
> 3 files changed, 22 insertions(+), 3 deletions(-)
>
> diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c
> index d292f61b4e41..3cf9dab0d01a 100644
> --- a/hw/acpi/generic_event_device.c
> +++ b/hw/acpi/generic_event_device.c
> @@ -318,6 +318,8 @@ static void acpi_ged_send_event(AcpiDeviceIf *adev, AcpiEventStatusBits ev)
>
> static const Property acpi_ged_properties[] = {
> DEFINE_PROP_UINT32("ged-event", AcpiGedState, ged_event_bitmap, 0),
> + DEFINE_PROP_BOOL("x-has-hest-addr", AcpiGedState,
> + ghes_state.use_hest_addr, false),
> };
>
> static const VMStateDescription vmstate_memhp_state = {
> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> index da3ebf403ef9..3126234e657d 100644
> --- a/hw/arm/virt-acpi-build.c
> +++ b/hw/arm/virt-acpi-build.c
> @@ -893,6 +893,10 @@ static const AcpiNotificationSourceId hest_ghes_notify[] = {
> { ACPI_HEST_SRC_ID_SYNC, ACPI_GHES_NOTIFY_SEA },
> };
>
> +static const AcpiNotificationSourceId hest_ghes_notify_10_0[] = {
> + { ACPI_HEST_SRC_ID_SYNC, ACPI_GHES_NOTIFY_SEA },
> +};
> +
> static
> void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables)
> {
> @@ -947,15 +951,25 @@ void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables)
>
> if (vms->ras) {
> AcpiGedState *acpi_ged_state;
> + static const AcpiNotificationSourceId *notify;
> + unsigned int notify_sz;
> AcpiGhesState *ags;
>
> acpi_ged_state = ACPI_GED(vms->acpi_dev);
> ags = &acpi_ged_state->ghes_state;
> if (ags) {
> acpi_add_table(table_offsets, tables_blob);
> +
> + if (!ags->use_hest_addr) {
> + notify = hest_ghes_notify_10_0;
> + notify_sz = ARRAY_SIZE(hest_ghes_notify_10_0);
> + } else {
> + notify = hest_ghes_notify;
> + notify_sz = ARRAY_SIZE(hest_ghes_notify);
> + }
> +
> acpi_build_hest(ags, tables_blob, tables->hardware_errors,
> - tables->linker, hest_ghes_notify,
> - ARRAY_SIZE(hest_ghes_notify),
> + tables->linker, notify, notify_sz,
> vms->oem_id, vms->oem_table_id);
> }
> }
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index b8ae155dfa11..dfd36cf063c7 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -35,9 +35,12 @@
> #include "hw/virtio/virtio-pci.h"
> #include "hw/virtio/virtio-net.h"
> #include "hw/virtio/virtio-iommu.h"
> +#include "hw/acpi/generic_event_device.h"
> #include "audio/audio.h"
>
> -GlobalProperty hw_compat_10_0[] = {};
> +GlobalProperty hw_compat_10_0[] = {
> + { TYPE_ACPI_GED, "x-has-hest-addr", "false" },
> +};
> const size_t hw_compat_10_0_len = G_N_ELEMENTS(hw_compat_10_0);
>
> GlobalProperty hw_compat_9_2[] = {
Return-Path: <linux-kernel+bounces-665739-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id A66D241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:43:29 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 7B611A249A9
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:42:23 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 6516328C5C1;
Wed, 28 May 2025 15:42:05 +0000 (UTC)
Received: from mail-io1-f70.google.com (mail-io1-f70.google.com [209.85.166.70])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 39CCD28C5A6
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:42:02 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.166.70
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748446925; cv=none; b=esvVWtNh2WzFwUDjWIqeAWuq9inn0dhCtle1hv3jkkNkZoDT0sjuKqs0LqY5jndLejxJgcy/BPCwLnxF9Ru01GvAB1uxtDWEplpWgFAsv5c1o+uK6xLTswR81ubPOAz7cO77syEqrshdp88kf1VlbCdTXdBu5xWan4C+j9XpPYU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748446925; c=relaxed/simple;
bh=zBYGvX52BxLQ4GUMUxG0DeMTjGwYb+sctll/J9DgxZ0=;
h=MIME-Version:Date:In-Reply-To:Message-ID:Subject:From:To:
Content-Type; b=HVtL334liLgYaV5GXh+4OhdBOdfGCfEJZTxCULmihEgL2Q60ukFu7LgI4jYaKTo5DYgqcnEEWLwnnNYs6bp/5sj/c3UKgTT3zz1IqoQ1zSpRRmk5lBLRzt4JfxJKcK6K+YqGconJZ3+18GT70Nxlv6hhQ/bipSI88T517X0CvWg=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=syzkaller.appspotmail.com; spf=pass smtp.mailfrom=M3KW2WVRGUFZ5GODRSRYTGD7.apphosting.bounces.google.com; arc=none smtp.client-ip=209.85.166.70
Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=syzkaller.appspotmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=M3KW2WVRGUFZ5GODRSRYTGD7.apphosting.bounces.google.com
Received: by mail-io1-f70.google.com with SMTP id ca18e2360f4ac-85dcaf42b61so841604839f.3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:42:02 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748446922; x=1749051722;
h=to:from:subject:message-id:in-reply-to:date:mime-version
:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
bh=zBYGvX52BxLQ4GUMUxG0DeMTjGwYb+sctll/J9DgxZ0=;
b=acYX5HEXl8bMbuoIdZRioy+sFi2qssphoqVDJnhpAhTMsQopO5nlwmWodX1NIlVlma
dD+giJSAPXmYVhIaqXdKFMQn84A8hQ4AWzhnEANAhhsQ1Eo0hR5O6gs2VGaPNLDlmGgS
vnO29kFeGQwVZ2d8lfMAYY2BUQl9zE6NWywM0oIi4gAJhgXiD6zI9JsZPNQS4rzkGcrD
IKG/MS4NoeSe8iIO8QWrqFL5E9oR4RiTbJfbhYbI/iMhzYtD6O2OZNcrmu4Y9+J4kxBW
H3u26tnSbt2o48cBMQ3wDdsgqPos0twgAEtl3lZqBwple4Cw+rx5o/AZ/+zVEzNDkOj1
hPjQ==
X-Gm-Message-State: AOJu0Yyxp3QGh3JHIfaluoGXhlHmmGy+6Zfo4i3Mrp3Lm/A+8hjFLdpL
5ue7ebpW911QWgzPWX+N6dddw/alqvv/HyR2d9Pf/SCtCUDS0xMpGhIGSr57ROb4jNxEEsokt7f
4jpyNyZSnh9efd2lAuYo4DFjhGYCLiG/sap+enKVMLeQfEbAd81Tg+7Ik0PY=
X-Google-Smtp-Source: AGHT+IHZ3OjVKfm3zB8XBYo5hkX/jjwZzQvmrCfyO1UW1w2wwgTYfhH90D4MoF5/+pbgR77GGWO5JAo8Z/cfE6YOaTbosD0pYw2/
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-Received: by 2002:a05:6602:750b:b0:85b:35b1:53b4 with SMTP id
ca18e2360f4ac-86cbb8bc455mr2222326039f.12.1748446922386; Wed, 28 May 2025
08:42:02 -0700 (PDT)
Date: Wed, 28 May 2025 08:42:02 -0700
In-Reply-To: <681865d0.a70a0220.254cdc.0048.GAE@xxxxxxxxxx>
X-Google-Appengine-App-Id: s~syzkaller
X-Google-Appengine-App-Id-Alias: syzkaller
Message-ID: <68372eca.a70a0220.1765ec.016c.GAE@xxxxxxxxxx>
Subject: Re: [syzbot] #syz test
From: syzbot <syzbot+0a36c1fec090c67a9885@xxxxxxxxxxxxxxxxxxxxxxxxx>
To: linux-kernel@xxxxxxxxxxxxxxx, syzkaller-bugs@xxxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
X-Spam-Status: No, score=-3.0 required=5.0 tests=FROM_LOCAL_HEX,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
For archival purposes, forwarding an incoming command email to
linux-kernel@xxxxxxxxxxxxxxx, syzkaller-bugs@xxxxxxxxxxxxxxxx.
***
Subject: #syz test
Author: abhinav.ogl@xxxxxxxxx
Return-Path: <linux-kernel+bounces-665741-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 7F82841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:43:40 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id DFBAA7A48CA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:42:21 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 213E328C5CE;
Wed, 28 May 2025 15:43:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=openpixelsystems-org.20230601.gappssmtp.com header.i=@openpixelsystems-org.20230601.gappssmtp.com header.b="aScVngs8"
Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 06DC774420
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:43:26 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447011; cv=none; b=GX3f9CuUNNmh0vXQk1f3gDw4IqPqX/GCjDqHaPqUI6rr6F91bWNBb06c5ZfU0+NVH633i71iJdXn0m0yNvT5Fhz2xIrepKNgm41j64N79XXkRinPuPk5j76O/e77LnQW8wMl4/pJ7woIaZe+KuSSsfOpMnBD7dukVa/DUhwdIr4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447011; c=relaxed/simple;
bh=BMRUJzr0/HLa3ogV5/HusC1YamEdyusN8YfIZyUZixE=;
h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=ZIz88asDfX1NDhZK9DiQbyVnIlm7GnXSB7k1NbcjoI0VXFXGypNmhfMynLmCnUQMDNY3BBTecA/FOo3kjsvsUUMHsINFnVKQdrM1AskILqM0Re2MqUKdfN4vQEuf/0EODUvzkmn7T2qcqILfMnw9c8DtopBZeA3iuAEIe5cpw+M=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=openpixelsystems.org; spf=fail smtp.mailfrom=openpixelsystems.org; dkim=pass (2048-bit key) header.d=openpixelsystems-org.20230601.gappssmtp.com header.i=@openpixelsystems-org.20230601.gappssmtp.com header.b=aScVngs8; arc=none smtp.client-ip=209.85.128.44
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=openpixelsystems.org
Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=openpixelsystems.org
Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-450cb2ddd46so42995e9.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:43:26 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=openpixelsystems-org.20230601.gappssmtp.com; s=20230601; t=1748447005; x=1749051805; darn=vger.kernel.org;
h=cc:to:message-id:content-transfer-encoding:mime-version:subject
:date:from:from:to:cc:subject:date:message-id:reply-to;
bh=6yl6vUzUKKmJBwsdJArAjkBP/TBHxNgwshqS0VE0gt4=;
b=aScVngs882WoC93xQwNq7Q2oSc1CtKNQesfcsZVLy3fELFT+14D06Qi1wSJ2UjU96a
B2yiYtMfj0dlZi8t9CXm5TgaX1kK87HSYTMO6p8xCGHkgcQwzUhvERa+w9ztbpPsPp2P
NuqUbBlvwKXJwSObGdaw7lqoyAcLvqRNRIYek/hlB0SKQV4L1qpQwKQc86EYdfrEJSui
2AwN5AyEMkeAoWQAJg9nQb8G+YpCZps2L+PO1N2GmvEEeC12zRaDI/Mavu5QKZgo/pGM
SqKq1TBq6pRJZu5VlC3rY9GS+oEjc50bVbeOnNigDgXGzjadKsPuEjrPUpFPEwNWew/0
XpAg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748447005; x=1749051805;
h=cc:to:message-id:content-transfer-encoding:mime-version:subject
:date:from:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=6yl6vUzUKKmJBwsdJArAjkBP/TBHxNgwshqS0VE0gt4=;
b=I/sY/kMf8ojH/g158quHu1LQtwgmB+qvLAT7eTG2p3elqc4+Iu3ot6oU10vTsdEdiq
E8+9w9PiwNaD76+Qfh6P0ZvNsSgwaF/Om/GC7PFDtvrcFjAUaOAuojJQ5qqf2n2VhjsU
hhziOuioxog+mCAb8HZfrtf4NaILroScBkKbmpYDPDgMbNJOF+98qLqUmDFzAjK1LsQb
5kbG8XRcuAvW1u+x1hM4v3e+l1KV/2YCeCkkWcGlYBWg+2UaOc74bd5XpsCNtLzy/ngr
85TqmfZRcLhmOChRINL8InNGSAWOYxyXRJaLQRxAVfgw27DhjJbbY6KDXF3miybYo5Z9
koJg==
X-Forwarded-Encrypted: i=1; AJvYcCXjvYYLu4GNX13erqH8tCFexV1TZJIx5kcG0p9KPuwMECi09LB9QIx25W5kysqCnmi3w7jCiWbMApiFzCU=@vger.kernel.org
X-Gm-Message-State: AOJu0YyiEdSAMOUq5wbMD9qocvHluK+CkSllsh4lTnOQhbeV6fQJCSC1
N3W1eSHJhOyij+n7B8BFRVOna+/x19/5019+P467MyYW3K3sz4NWawUsKwcwZFKcRH0=
X-Gm-Gg: ASbGncvkldAQ4WxfaCf7uwPnVI6stnhC0ZZt/et24d0T/ZLgZRvWUBLY7/ngVIoJEpI
PyYQrasUZlmPYs5cXw67Dp0VlR7wn5lGpwRIPTdnPyCTsD6QSNCgCE8mCX2nq6tgsZG5qzwRRhr
nURoLV8U28iF8sHLTc6+1Jl7N5F9+qc4Pt+2wdU9L7uY2k76Sgae2ZtJDH01Y8oitvLjsmiCSlp
8U4URgllx3o6FDaLfhO7wHTQC4inzW1ptTbUVA6lELDcxKRi54ce9LH/MIZCeW+DLoJNqW95sCE
vbz8mrjGzchpcI4rjfZETz8yPDwUT7SX5zt1c7qIu7S5wKgFAOk0xqZ7Lml0sibL5hN97ysSTnD
9uxron4juTfAQaA5uObbTrX1JAFT2g2xNT08+glIphhQ=
X-Google-Smtp-Source: AGHT+IFbbv0BZAtT3+HnJDyyTNgCMRJZb9KZLNLH4dIHpFGSJZsnxop7uFuUlZaFtez53aVT2kI+Hg==
X-Received: by 2002:a05:600c:6214:b0:43c:e467:d6ce with SMTP id 5b1f17b1804b1-44cc05358b3mr170613645e9.4.1748447004994;
Wed, 28 May 2025 08:43:24 -0700 (PDT)
Received: from [10.0.12.41] (253.124-78-194.adsl-static.isp.belgacom.be. [194.78.124.253])
by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a4eacd6f1bsm1769856f8f.80.2025.05.28.08.43.24
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 08:43:24 -0700 (PDT)
From: Bram Vlerick <bram.vlerick@xxxxxxxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 17:42:30 +0200
Subject: [PATCH] staging: fbtft: add invert display parameter
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Message-Id: <20250528-ili9341-invert-dtb-v1-1-080202809332@xxxxxxxxxxxxxxxxxxxx>
X-B4-Tracking: v=1; b=H4sIAOUuN2gC/x3MTQqAIBBA4avErBswS/u5SrSoHGsgLFQiCO+et
PwW770QyDMFGIoXPN0c+HQZVVnAus9uI2STDVJIJZTskA/u66ZCdjf5iCYuKNpZaaVJG2sgh5c
ny88/HaeUPolD9bRkAAAA
X-Change-ID: 20250528-ili9341-invert-dtb-07a5656e6dfd
To: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx, linux-fbdev@xxxxxxxxxxxxxxx,
linux-staging@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
Bram Vlerick <bram.vlerick@xxxxxxxxxxxxxxxxxxxx>
X-Mailer: b4 0.14.2
X-Developer-Signature: v=1; a=openpgp-sha256; l=2995;
i=bram.vlerick@xxxxxxxxxxxxxxxxxxxx; h=from:subject:message-id;
bh=BMRUJzr0/HLa3ogV5/HusC1YamEdyusN8YfIZyUZixE=;
b=owEBbQKS/ZANAwAIAblauka9BQbwAcsmYgBoNy8chB2y8w5nbK9+RztKsMs3unwb1aVwo2U36
FwTbirKHOeJAjMEAAEIAB0WIQQO7PtG7b77XLxuay25WrpGvQUG8AUCaDcvHAAKCRC5WrpGvQUG
8GvpD/9SsZFzhvQs0gQHp72J5bWBgaHGOAaSW43Xne+PZMAjdUCH4O23F2Syc387TEDUe/FTeWZ
kp5HtOO3HdadO8z0wT6nXXINzJfFLkXufNXmxFbHQ8x2VuSGTlIKYhuzla4BlFV+dJJ60/83RRX
DKADQ1s4itlnkqEVyeD3cJad734FHh6ZjaqG7sZobZxqcZcGRO7LBBO2SSveqlUZO502Tp9b0MM
LHZwjVFPUcDWZpBoJZUTg0Bw5calTX2Mh/Ibwzr1yERYLUO01KqWi2/01IGvu01G3ucNGq0RR2A
n7LHuRVOZkJFaBjUx2XPi7bPBYD47fgBMRT5/uIeCM5gh/W/DXFUU+t6j5A6vOE7SF61jWbGrsY
wBC3xLx+WDXCvrFhj9xAmV5L+TRjvCEWIsuOy7q88ge/SI7t4d913AWKAEvdvhnhllg+mOSH7Dc
BZOo5wTDep2WxoScD9VgeqMv4v8QwkOGCv9H1fDhWZY1fxNCwvpQU9bH111ZD8aSHZPAEHgTdQN
eKx6hZNtBFIjq40TAQ5zQnGnAa2NfisLBqVqKAFgaqFahnwB3bRj6EXC4ME4wuCKH1g2O8+xQKY
LLKmSqiMsu+UM56ihNwxQ4hVpy5WeDercM0s+Fc2UdFzPNnzrSr1G4BS1YhpzNousCBK7vnlKwX
dOZ+YVluePM0Drg==
X-Developer-Key: i=bram.vlerick@xxxxxxxxxxxxxxxxxxxx; a=openpgp;
fpr=0EECFB46EDBEFB5CBC6E6B2DB95ABA46BD0506F0
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Add devicetree parameter to enable or disable the invert feature of the
ili9341 display
Signed-off-by: Bram Vlerick <bram.vlerick@xxxxxxxxxxxxxxxxxxxx>
---
drivers/staging/fbtft/fb_ili9341.c | 3 +++
drivers/staging/fbtft/fbtft-core.c | 2 ++
drivers/staging/fbtft/fbtft.h | 3 +++
3 files changed, 8 insertions(+)
diff --git a/drivers/staging/fbtft/fb_ili9341.c b/drivers/staging/fbtft/fb_ili9341.c
index 47e72b87d76d996111aaadcf5e56dfdfc1c331ab..a184f57df12b5ad6612a2e83b664a8911c7c79be 100644
--- a/drivers/staging/fbtft/fb_ili9341.c
+++ b/drivers/staging/fbtft/fb_ili9341.c
@@ -103,6 +103,9 @@ static int set_var(struct fbtft_par *par)
break;
}
+ if (par->invert)
+ write_reg(par, 0x21);
+
return 0;
}
diff --git a/drivers/staging/fbtft/fbtft-core.c b/drivers/staging/fbtft/fbtft-core.c
index da9c64152a606dc4a176f5a37fa59f6a7d3a2af3..4e827e9899e32313f2e4a9bf12ff49283a63fed3 100644
--- a/drivers/staging/fbtft/fbtft-core.c
+++ b/drivers/staging/fbtft/fbtft-core.c
@@ -641,6 +641,7 @@ struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
par->buf = buf;
spin_lock_init(&par->dirty_lock);
par->bgr = pdata->bgr;
+ par->invert = pdata->invert;
par->startbyte = pdata->startbyte;
par->init_sequence = init_sequence;
par->gamma.curves = gamma_curves;
@@ -1107,6 +1108,7 @@ static struct fbtft_platform_data *fbtft_properties_read(struct device *dev)
pdata->display.bpp = fbtft_property_value(dev, "bpp");
pdata->display.debug = fbtft_property_value(dev, "debug");
pdata->rotate = fbtft_property_value(dev, "rotate");
+ pdata->invert = device_property_read_bool(dev, "invert");
pdata->bgr = device_property_read_bool(dev, "bgr");
pdata->fps = fbtft_property_value(dev, "fps");
pdata->txbuflen = fbtft_property_value(dev, "txbuflen");
diff --git a/drivers/staging/fbtft/fbtft.h b/drivers/staging/fbtft/fbtft.h
index 317be17b95c1672404fc6aecda24d0a1f563685d..71c9c35e7548de314088ac3aeb160d6c6aaf75c9 100644
--- a/drivers/staging/fbtft/fbtft.h
+++ b/drivers/staging/fbtft/fbtft.h
@@ -125,6 +125,7 @@ struct fbtft_display {
* @display: Display properties
* @gpios: Pointer to an array of pinname to gpio mappings
* @rotate: Display rotation angle
+ * @invert: Invert display colors
* @bgr: LCD Controller BGR bit
* @fps: Frames per second (this will go away, use @fps in @fbtft_display)
* @txbuflen: Size of transmit buffer
@@ -135,6 +136,7 @@ struct fbtft_display {
struct fbtft_platform_data {
struct fbtft_display display;
unsigned int rotate;
+ bool invert;
bool bgr;
unsigned int fps;
int txbuflen;
@@ -229,6 +231,7 @@ struct fbtft_par {
bool first_update_done;
ktime_t update_time;
bool bgr;
+ bool invert;
void *extra;
bool polarity;
};
---
base-commit: 914873bc7df913db988284876c16257e6ab772c6
change-id: 20250528-ili9341-invert-dtb-07a5656e6dfd
Best regards,
--
Bram Vlerick <bram.vlerick@xxxxxxxxxxxxxxxxxxxx>
Return-Path: <linux-kernel+bounces-665743-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 6196241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:44:21 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 3B939188E124
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:44:34 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id ADEB628C2C8;
Wed, 28 May 2025 15:44:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="oKozQ/u0"
Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011022.outbound.protection.outlook.com [52.101.70.22])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id A89C628C026;
Wed, 28 May 2025 15:44:10 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.22
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447052; cv=fail; b=mat8clBfOuBUt8bWYaYzUL1M1nTeaSzIkOKhfwODyqNS5NNgs/mMhLOiNPJkejBna7c9m5PfIlQku5mGVx+APT9VIrVj8Ff4bs/0xWlrMSKWqMquZyR2ZcjZnZFx3Tqen/+eO94vcqEsim4W1bRlGxaExkSPVt94Qdw6QGnLEMA=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447052; c=relaxed/simple;
bh=D7Z7B3Jmecc8lezKeqxsb3LqQhe78Vd3LFEeblrRVD0=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=Geau2vyQoqY15hdhErA41+krZgz1mkZL/GmIckwe+gkbulfhOLptNovvrvwbrh7j9YFhPOSEMGHcMuNjWqwHGg3UdvvqvkEKmRuFsIxaRjnK9eVih0OR2ApzpNNGHWwFmU49jrZeUDCbollPTis/3OCgCHJ8Cyq571gOeKW7Vww=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=oKozQ/u0; arc=fail smtp.client-ip=52.101.70.22
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=ILNg9QZV7Q5U2sYfDT6pKep4HnOolhdNc4tKapvXerRrY9NgU3W+OJwc+2C7z93Ur4GkfFeW4NoR0p8fDsI5eHarIrr3//M9UcPg2mt3n2ZK0mN+z4Ueyt6tGSsfRHfUi3p3Z4lNvo8x3AGwsb52gVi+1Dq81ySZDiRwELZ85enaWcUZO6YZMuaVgWEXNVb4hOD30j2lR9RmIiO6c6+EqFYHRKqFn3uocj1t7fGiPcxf+lHLOTsmCw3WGyVwZAoGnE2VPR4D412ytRJ4Q59pB4O9zpRQ2UNIzuy0UkNna6+ju9cfBtYxD6cgf+vCumqLVTfw+LfOh3u7Q5y+F/N3Dw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=H73NLVsQK6iY5FfKXzkbpkwXttcXf+XkGO7Xf9KyoY4=;
b=WEoyET55Ej/l01W6vSDLugY17OBB+xYjohtuCUm17fVp5B3x0bqZAGISQOEyscJFTFRv3DhIAhEdavVnX4ffSYCv5fs+sOmcktv2X9gMvo6iqFjy8SxXzDJWx/avvfezTCDrytpVwLBNOrfU0IJ/ZfrgvE4Y5Tgk+miseeBYPTJLsZGY/pia3TG+G3QiViwTiqxqIZpPSncJqheMrVnxYovdGhZxS4qBRQCcRTQcrIbTkhtY57qkAVR8jUSrOVeqCiCQ6Bsuv00sKvRFQALtUihBl8HIm4yHTFhYjrZqpFJ2lFj62M+/h460GcfHd98ziU5VyIJmhN0gJ9s4S3+v4g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=H73NLVsQK6iY5FfKXzkbpkwXttcXf+XkGO7Xf9KyoY4=;
b=oKozQ/u0h6JBLvh/R1TEuh704E0TiauZPbXkAJTmWpGpLjDrdh31ojR7O59dUxCda697RKBWsFXguzC1kYHeeMWNfFExRabeVffb8o2dvOWDLIlsN/Ekp+YEtkhRb93u4x2w5ogeYXHkrArf23Y1ok+zELvDiKz7wgrQS4+QQryftWeNTSCl2ysE1u59n0pI/f2hLynUHC+9WbTAZL6/PsZ8NecTUZzYFIziym+USFfMwRotZLYFloCsQaa30IxqzdlJwcYU3fEx/XNXY48KZWNVGvsunRfPEict+5IoTlwatuu+e+cosVZYyXaQQN1K7dNkOLYxSmht6Dkrh75Xtg==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by AM9PR04MB7604.eurprd04.prod.outlook.com (2603:10a6:20b:287::5) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.24; Wed, 28 May
2025 15:44:07 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
15:44:07 +0000
Date: Wed, 28 May 2025 11:43:59 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: Conor Dooley <conor@xxxxxxxxxx>
Cc: Christophe Leroy <christophe.leroy@xxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
"open list:FREESCALE SOC DRIVERS" <linuxppc-dev@xxxxxxxxxxxxxxxx>,
"moderated list:FREESCALE SOC DRIVERS" <linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>,
"open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" <devicetree@xxxxxxxxxxxxxxx>,
open list <linux-kernel@xxxxxxxxxxxxxxx>, imx@xxxxxxxxxxxxxxx
Subject: Re: [PATCH 1/1] dt-bindings: soc: add vf610 reset controller
Message-ID: <aDcvP975apg/dhQz@lizhi-Precision-Tower-5810>
References: <20250522213951.506019-1-Frank.Li@xxxxxxx>
<20250526-unpaid-mushy-d47196d04ad1@spud>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250526-unpaid-mushy-d47196d04ad1@spud>
X-ClientProxiedBy: SJ0PR05CA0193.namprd05.prod.outlook.com
(2603:10b6:a03:330::18) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|AM9PR04MB7604:EE_
X-MS-Office365-Filtering-Correlation-Id: 358d4737-8319-49a1-4e3d-08dd9dfe7b49
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|7416014|1800799024|376014|52116014|366016|38350700014;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?Aor2oZ1HvZ4L6vMmQw1MDBP8/k5A4WA9zsHAhP/RdxDyMM14uktr3Dk4mdit?=
=?us-ascii?Q?evY5OFDtk68kVpL7jce+kAqLkWUdRdBdB2T5nGlZikR0L4Z8RlhffA4gzZsH?=
=?us-ascii?Q?U+NJOidgks0XZmVUWfU26e7E8KJoZ4r2gA8aXCxsjFvnDvdoFJzZ1CaUN+0/?=
=?us-ascii?Q?ldSvJPQslx0vQLql0Haii6nW7nd6PCpqABgJF2XZhvYEolrwYZoqHPeFL8b2?=
=?us-ascii?Q?kTydM90W4Jr8sgTK+AvOtihmHfFq8aLHtQgxd9ooOaHHEQY++79dVI4SRPii?=
=?us-ascii?Q?RpKOTmIhp6lcEzHWGCUwq4Qcia9SOebYxJeWPViw2RjP5K+lo4310lK3wTJN?=
=?us-ascii?Q?N6oEzGOkKIme6xC9h2r9Of4y6T6N97rYePy8P1TlnH7MFXU9+eE3YYsb6EAu?=
=?us-ascii?Q?za30RRDqLkvhgZVbelrux/NPaKDDnhxGc6M1YH6rhsprLZoOTMHAUt6UhGxj?=
=?us-ascii?Q?u5eF8v1mOBTVhwnLfO8/HCmxp6BsY1bPr98MHSpioCHYqrfHT72SVjRev+Fk?=
=?us-ascii?Q?+i0F6nnxR1X8TCEjXkNr3s/PckqawOdLbhykk0pEog8RTlWfECm++CdmWb0U?=
=?us-ascii?Q?/baWcjBaCaqOTRRzyw+qOFb0YYBjR4Rs+28TeINykvBaeeCWTkVGynqCmFf6?=
=?us-ascii?Q?7bTdA+s0cTK/B17lc/Ee5IwdOFULmy6S1PZt9VcocBIb7o+pXjf8zv+mfOCk?=
=?us-ascii?Q?7KRHQXdiIIlx2AnlyuuCb0BTw6E9VA/SCzkfaITvvbtmnLOZV8KCrA0WVpmq?=
=?us-ascii?Q?dN2gEeyIR9FhWS+iI8o2Vy0dpopfZqYEYALqiQxnAzwesD2ZjJr0eic6HJXT?=
=?us-ascii?Q?KHJ9MGht8G4S2bDY3XQkWc/chNBC/z6kly4UzvNSAWzez6g6F9AEiaRkLYs5?=
=?us-ascii?Q?J/8WHDBtaQuBYGMGlDEK+r55O7b7nXNn828DEnoCjQpWcYflRdwtMHM716w8?=
=?us-ascii?Q?ZxEDIgV39IbG1ek11d1mOjxZkZEZHH63XJbwiftY/3a0DY0E+kKUgAkIOshH?=
=?us-ascii?Q?VClVdtPNI5Cxz4qd8CgC5iInhmIT/X9ZIASTCCK/Fg/FLbL9GETltH3lIlpD?=
=?us-ascii?Q?QGwkUNTt2QRxjUEbqkpz6oCwNFwVoyR6YQ6/gXgUnF5ATyeyM+PERGh914Wu?=
=?us-ascii?Q?k5Wt0GBxh4YLdbZh2bMOFumpRfNqK4zTN5vRMfrdASRXcVKsKDUFio2xV+sO?=
=?us-ascii?Q?S85X+phCyYGlifKRN8IIUZ+Z0b3hzAbihplg4rhue2sBh3Yibl5wUY6jPDJ4?=
=?us-ascii?Q?J+nOh5l05XwlR68NoZx9QUDqAS4n9y8Wzc92tQy0ZcuCAiH8ecHBL71jVfZm?=
=?us-ascii?Q?nHeUZyqxyMf5Nb+vdto1XRUCQykOQkEAUQ1nhjuz8CvnV0QghjJ2qfCWRoyc?=
=?us-ascii?Q?eR33cRdLVTnZR9RjRBgj9WHWKWrpHnnc3216Qc3nUpLSDzDXR78g6kuDMB8q?=
=?us-ascii?Q?52s7nMBUO7E=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(1800799024)(376014)(52116014)(366016)(38350700014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?z9608CtB2WT8UiawNjXMgzTOMdHmCU/B0DV3gWhk2VFdh+PcDw49jOjUscls?=
=?us-ascii?Q?6GlhTCVoyWJzsrFQuZM7/3+UC4XLjyTmuD2FYe0sGgemYnw0ulzgc5/7DS0n?=
=?us-ascii?Q?9gPRv8EEb3H0cWp4AmCwbBdYUhGEiCUtf8Uvd8oo8gMchmJyQc0zKNXhJqdw?=
=?us-ascii?Q?+sx4x5I2ufsR3EXCjQYMVqL6dGSDDdfQyR3kWvi8fkstB4GTSMx3S0Aicgsg?=
=?us-ascii?Q?fVzb2cz1vnJoZ7RiC7kfhCLFYwzb0v0eFd2ao6B+yUDMmkxmX6GRar5dRfkr?=
=?us-ascii?Q?gYeVTdR+fR/F/HmUznQeqHnpLxFDtjGqxmEebm6NI1oqMZ/3MgKTWwiIGTGg?=
=?us-ascii?Q?YQOdQRvhsrS+Wr2o6XGroixU0RFOdUM3lfWhJLk39gHd41GVqTjNcjJd89Gu?=
=?us-ascii?Q?inwG0ZAtWjFf4uSTaVZcVfkkQwW2DHp7Y73FS5qbLj0tV6e0ZzqYe2o7q4x+?=
=?us-ascii?Q?Hy3dUx1n3dgM8ZF1Ioqom2589GsJf9ATDrweG0bwvzDphQO4D+lsXZtEo8dS?=
=?us-ascii?Q?9WJqtIcujIDzYr/wVySRTNs7gVvj+AFhctdmX4ob/sCCcZAubFrpqCj8BOII?=
=?us-ascii?Q?XUYwFIc7s6xJzGO3E8aK29Dinj/d3nmEBM3m7iUHYjwmFkL/CS3I8b7ICKua?=
=?us-ascii?Q?BjWR+jHrAyX6qerK/7NebtsqJuFa2anyT05hegdjgUsZNUrRvmj4SLQZqEeX?=
=?us-ascii?Q?WR9I1BPquru+4P/jiBVX/Fd1HZYutT5cs9/rrfWRjTS+QARQHwGCZ6WBjQ1I?=
=?us-ascii?Q?QD62eJE6HPJ6anlLUodYSpRbKDbX4klW07hL699qyPBSqlDfesdsq0Og1KTu?=
=?us-ascii?Q?aUg2ZsY4Y10KnUOlwfQwuQHzzDK90qi3p3CIUha/GT41mOEGDF7GBqx1SIY2?=
=?us-ascii?Q?JibJWqwcTtFEuz6x/6afIjudGZHFNyG2mT/bWs+XiwuVuR2yqPqlCUmQuSiM?=
=?us-ascii?Q?zPfUB3nx3nMHyXjoOMc4rVSD+hUbq24v4uzWnI0ACIFQSdYDxZvzXmR/ZBlp?=
=?us-ascii?Q?W0Vy/H+MsgTqOhHueYfriDXy11NNhryZvsiEEPfOey+pO85qrDU3I8+9I5CW?=
=?us-ascii?Q?NsmmbeoSX3dQ5GUWkWaXeDC/nFXPztNiVTc2cKncgqmc4Y9db8CPAHFGMe94?=
=?us-ascii?Q?VPEDd0Y2H4fESbQijFZj5lXhxpf++6SWgJzxRWqTnu6v2Y/wepdYhRAdehk7?=
=?us-ascii?Q?Cd1zDsCvGnf8CVbF0HvhZ0gT9m1Ncornu9q4ys0hnrw5tpLQJo9KD6ehRDaL?=
=?us-ascii?Q?u4dxsB28cjbm2auGNRCn75ltXhJhFCje7cdPl9qRQ2Hh6uXePmf1DxUsY2M2?=
=?us-ascii?Q?OZbLxuriwBj9vC5aQ4C5qi04ZowZauzgRLKcO86ZK+8sfCGJnLvPNxNE06/7?=
=?us-ascii?Q?GYzHUfgNLfPeINvzi4PfofKHPHIbKLv7Pocj1RX1TmBxw8FSryf47q2pi4Lz?=
=?us-ascii?Q?K834J2qZieyZ/6OhTHVT8W0AUtt0qydMWfMFhrMY1ZOcHuxym0kPXQppDzq6?=
=?us-ascii?Q?YWZNTEr/fsio2tHbBYsCS7og1YnfTKVweNEUqa7kno5jUvMx3OU0iLMyOWeB?=
=?us-ascii?Q?4RdizFMXH8mUZnIdtHg=3D?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 358d4737-8319-49a1-4e3d-08dd9dfe7b49
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:44:07.3938
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: /EYOJXlFmfsw//w4qP8F9CgNUogdUcYoxnNAAyze6woDK19hp9mzJxQCEpeLUSx0XluNvI0oZymvqiXEYCJZlQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB7604
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Mon, May 26, 2025 at 04:54:30PM +0100, Conor Dooley wrote:
> On Thu, May 22, 2025 at 05:39:50PM -0400, Frank Li wrote:
> > Add vf610 reset controller, which used to reboot system to fix below
> > CHECK_DTB warnings:
> >
> > arch/arm/boot/dts/nxp/vf/vf610-bk4.dtb: /soc/bus@40000000/src@4006e000:
> > failed to match any schema with compatible: ['fsl,vf610-src', 'syscon']
> >
> > Signed-off-by: Frank Li <Frank.Li@xxxxxxx>
> > ---
> > .../bindings/soc/fsl/fsl,vf610-src.yaml | 46 +++++++++++++++++++
> > 1 file changed, 46 insertions(+)
> > create mode 100644 Documentation/devicetree/bindings/soc/fsl/fsl,vf610-src.yaml
> >
> > diff --git a/Documentation/devicetree/bindings/soc/fsl/fsl,vf610-src.yaml b/Documentation/devicetree/bindings/soc/fsl/fsl,vf610-src.yaml
> > new file mode 100644
> > index 0000000000000..4c92a5e4892bf
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/soc/fsl/fsl,vf610-src.yaml
> > @@ -0,0 +1,46 @@
> > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas//soc/fsl/fsl,vf610-src.yaml#
>
> It's a reset controller then, shouldn't it be in /reset, not //soc?
It is not reset controller since there are not #reset-cells property to
reset other models. It just provides syscon to reboot the whole system.
Frank
>
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: Freescale vf610 System Reset Controller
> > +
> > +maintainers:
> > + - Frank Li <Frank.Li@xxxxxxx>
> > +
> > +description:
> > + The System Reset Controller (SRC) generates the resets for the device. The
> > + functional reset sources are programmable as either reset or interrupt. The
> > + block also generates interrupts for various device events.
> > +
> > +properties:
> > + compatible:
> > + items:
> > + - enum:
> > + - fsl,vf610-src
> > + - const: syscon
> > +
> > + reg:
> > + maxItems: 1
> > +
> > + interrupts:
> > + maxItems: 1
> > +
> > +required:
> > + - compatible
> > + - reg
> > + - interrupts
> > +
> > +additionalProperties: false
> > +
> > +examples:
> > + - |
> > + #include <dt-bindings/interrupt-controller/irq.h>
> > +
> > + reset@4006e000 {
>
> The generic node name here is reset-controller
>
> > + compatible = "fsl,vf610-src", "syscon";
> > + reg = <0x4006e000 0x1000>;
> > + interrupts = <96 IRQ_TYPE_LEVEL_HIGH>;
> > + };
> > +
> > --
> > 2.34.1
> >
Return-Path: <linux-kernel+bounces-665742-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id ECBC641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:44:43 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id EF70D9E127D
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:43:34 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id AF99F28C5A9;
Wed, 28 May 2025 15:43:48 +0000 (UTC)
Received: from mxct.zte.com.cn (mxct.zte.com.cn [183.62.165.209])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4BE0028C026;
Wed, 28 May 2025 15:43:46 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=183.62.165.209
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447028; cv=none; b=ZLSKPu8VyWg4aFgoTYdldMpgdo8aIDfvM1Z4lg6eqzj+4ClgyStcA4LX83vPwVo6FOqRhn1e4YFaIVXfXfLzDQsjk6knUh9j4ZP6cPHaDCsgmuBKZ6iaSPPhqhmO8MjvTk9NlgV2FsfflNHI5WAfAFafCMrrVUqlgZOGxOuppM8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447028; c=relaxed/simple;
bh=RezGIthMdImr0Wy2tB0Hw84VXGIiLhEAwSmh1rOyRYg=;
h=Date:Message-ID:In-Reply-To:References:Mime-Version:From:To:Cc:
Subject:Content-Type; b=ptDw/Az1Z+LOyl6RdZKsKRND5kU1uaax3ykr2lQmWmCEoYDQSH+0NNhpgBJ0te4C+KD9ZsCkCqNlrr1SlhsRiumbzeCfC6s129t6A1RjgOras7+J81o48f9/7EYjF26JCnIGOhBu47GyOU9A8Bj/79kvAK9ulUN0fbclYUr45DI=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zte.com.cn; spf=pass smtp.mailfrom=zte.com.cn; arc=none smtp.client-ip=183.62.165.209
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zte.com.cn
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=zte.com.cn
Received: from mse-fl1.zte.com.cn (unknown [10.5.228.132])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by mxct.zte.com.cn (FangMail) with ESMTPS id 4b6v175H6zz4x6CY;
Wed, 28 May 2025 23:43:39 +0800 (CST)
Received: from xaxapp05.zte.com.cn ([10.99.98.109])
by mse-fl1.zte.com.cn with SMTP id 54SFhXWW026942;
Wed, 28 May 2025 23:43:33 +0800 (+08)
(envelope-from xu.xin16@xxxxxxxxxx)
Received: from mapi (xaxapp02[null])
by mapi (Zmail) with MAPI id mid32;
Wed, 28 May 2025 23:43:38 +0800 (CST)
Date: Wed, 28 May 2025 23:43:38 +0800 (CST)
X-Zmail-TransId: 2afa68372f2affffffffb80-0948d
X-Mailer: Zmail v1.0
Message-ID: <20250528234338153V_kDYTzOwx6LkHnp-gsXa@xxxxxxxxxx>
In-Reply-To: <e22d9582b0b334a1161ffa150708da370bffb537.1747844463.git.lorenzo.stoakes@xxxxxxxxxx>
References: cover.1747844463.git.lorenzo.stoakes@xxxxxxxxxx,e22d9582b0b334a1161ffa150708da370bffb537.1747844463.git.lorenzo.stoakes@xxxxxxxxxx
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
Mime-Version: 1.0
From: <xu.xin16@xxxxxxxxxx>
To: <lorenzo.stoakes@xxxxxxxxxx>
Cc: <akpm@xxxxxxxxxxxxxxxxxxxx>, <viro@xxxxxxxxxxxxxxxxxx>,
<brauner@xxxxxxxxxx>, <jack@xxxxxxx>, <Liam.Howlett@xxxxxxxxxx>,
<vbabka@xxxxxxx>, <jannh@xxxxxxxxxx>, <pfalcato@xxxxxxx>,
<david@xxxxxxxxxx>, <chengming.zhou@xxxxxxxxx>, <linux-mm@xxxxxxxxx>,
<linux-kernel@xxxxxxxxxxxxxxx>, <linux-fsdevel@xxxxxxxxxxxxxxx>,
<shr@xxxxxxxxxxxx>, <wang.yaxin@xxxxxxxxxx>, <yang.yang29@xxxxxxxxxx>
Subject: =?UTF-8?B?UmU6IFtQQVRDSCB2MiAyLzRdIG1tOiBrc206IHJlZmVyIHRvIHNwZWNpYWwgVk1BcyB2aWEgVk1fU1BFQ0lBTCBpbiBrc21fY29tcGF0aWJsZSgp?=
Content-Type: text/plain;
charset="UTF-8"
X-MAIL:mse-fl1.zte.com.cn 54SFhXWW026942
X-Fangmail-Anti-Spam-Filtered: true
X-Fangmail-MID-QID: 68372F2B.000/4b6v175H6zz4x6CY
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
> There's no need to spell out all the special cases, also doing it this way
> makes it absolutely clear that we preclude unmergeable VMAs in general, and
> puts the other excluded flags in stark and clear contrast.
>
> Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>
> Acked-by: David Hildenbrand <david@xxxxxxxxxx>
> Reviewed-by: Chengming Zhou <chengming.zhou@xxxxxxxxx>
> ---
> mm/ksm.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/mm/ksm.c b/mm/ksm.c
> index 08d486f188ff..d0c763abd499 100644
> --- a/mm/ksm.c
> +++ b/mm/ksm.c
> @@ -679,9 +679,8 @@ static int break_ksm(struct vm_area_struct *vma, unsigned long addr, bool lock_v
>
> static bool ksm_compatible(const struct file *file, vm_flags_t vm_flags)
> {
> - if (vm_flags & (VM_SHARED | VM_MAYSHARE | VM_PFNMAP |
> - VM_IO | VM_DONTEXPAND | VM_HUGETLB |
> - VM_MIXEDMAP | VM_DROPPABLE))
> + if (vm_flags & (VM_SHARED | VM_MAYSHARE | VM_SPECIAL |
> + VM_HUGETLB | VM_DROPPABLE))
> return false; /* just ignore the advice */
>
> if (file_is_dax(file))
> --
> 2.49.0
Reviewed-by: Xu Xin <xu.xin16@xxxxxxxxxx>
Return-Path: <linux-kernel+bounces-665744-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E603E41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:44:58 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id E8F7F188B8D4
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:45:11 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id D529B28C2CE;
Wed, 28 May 2025 15:44:51 +0000 (UTC)
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6C85F2868BA;
Wed, 28 May 2025 15:44:51 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447091; cv=none; b=k5mzMtJanCSOi7g5osc0zjr/Xa0vc2jKzKDdCNgoEFhtJFOJL58U3XzezOlxeQ/mxyz68U+QGrWchVmJU3v/VHYl/0oJZMyzmykzAxXmhhpZT4Ri04cbI8PP1OF2lyGJvFUKPXS3HAUi0Jijk3iqWwO5La+ol5aJSotZ2Q++vw8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447091; c=relaxed/simple;
bh=/gVhh98q0CsWUj0Ko0dbsJEa0IhhuGCKf3Bzxp35yD8=;
h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=XROxVJgDDxAa+Wbj8ntKosPHAYoi9HDu5nzttbO7JiJaqaMI2p5+YCpcXKbgQxSBsmswGfnxoWNmezkzEJxcBlskgGqWayYQhOxZR/Yb4sFjcbEUpm+qv4gqK3tdLtZ1zfqkrwwW1oQ891mBcJ8lH7tQ0nWNVPm3U/s0+PRuWrg=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7993CC4CEE3;
Wed, 28 May 2025 15:44:49 +0000 (UTC)
Date: Wed, 28 May 2025 11:45:49 -0400
From: Steven Rostedt <rostedt@xxxxxxxxxxx>
To: Caleb Sander Mateos <csander@xxxxxxxxxxxxxxx>
Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>, "Liam R . Howlett"
<Liam.Howlett@xxxxxxxxxx>, Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>,
Masami Hiramatsu <mhiramat@xxxxxxxxxx>, Mathieu Desnoyers
<mathieu.desnoyers@xxxxxxxxxxxx>, Eric Mueller <emueller@xxxxxxxxxxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx, linux-trace-kernel@xxxxxxxxxxxxxxx,
linux-mm@xxxxxxxxx, Vlastimil Babka <vbabka@xxxxxxx>, Jann Horn
<jannh@xxxxxxxxxx>, Pedro Falcato <pfalcato@xxxxxxx>
Subject: Re: [PATCH] mm: remove unused mmap tracepoints
Message-ID: <20250528114549.4d8a5e03@xxxxxxxxxxxxxxxxxx>
In-Reply-To: <CADUfDZpPGQEY9u3p3MCU2S3qmDyKmE1JnSQ6G2jO4_J40rQeeQ@xxxxxxxxxxxxxx>
References: <20250411161746.1043239-1-csander@xxxxxxxxxxxxxxx>
<3ucksa6coiwco3wpmcjtfwezqjigzm2zwvdvkt2ryvefzojtqy@4lda47c236uz>
<CADUfDZpPGQEY9u3p3MCU2S3qmDyKmE1JnSQ6G2jO4_J40rQeeQ@xxxxxxxxxxxxxx>
X-Mailer: Claws Mail 3.20.0git84 (GTK+ 2.24.33; x86_64-pc-linux-gnu)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 08:16:24 -0700
Caleb Sander Mateos <csander@xxxxxxxxxxxxxxx> wrote:
> Would you mind picking up this patch to remove some old tracepoints?
> Liam has already given it a review.
Someday I need to add code that lists the events that are never called. I
can imagine that there's several tracepoints that are created and never
used, and they still do waste memory :-(
-- Steve
Return-Path: <linux-kernel+bounces-665745-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 971B641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:45:20 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 5A73A189B036
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:45:33 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C0C8828C862;
Wed, 28 May 2025 15:45:07 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fEAN2DQY"
Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6A8D128C2C8;
Wed, 28 May 2025 15:45:05 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.174
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447106; cv=none; b=mfp7aD1Qtg9p8lPIsUm3+1BGlz0DgEJxqwQKFmc4O5W5G/d7WQOB8vy/foWyHiwLMKUf/2NA3Ek2CBFD8TfshkJu5L7bv2MpA0bOuJko9UxDh5ppa06uzVioLm5ZKxAVa2MJ+0BVE+FjVFuH+BW9U5Ye/eugEog7Y4kwkFkNmOk=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447106; c=relaxed/simple;
bh=gyWQ50bxUGAr7H5zPZLBDhEZf8F8PQAbcSfeFFmzTzo=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=Cbv7xs7sVl3yn172rDGz70XvBs7ab5sNLaMAN0Fm8DhC3XcM7gegCfibCgZXFPUv76z8A0pDe7Bh9xsbOT5UEcBa7goEJNqWesLx55la+56PBUITpwpTYQwIKYp3cREkD4+XHCP3mbMzD7xLoptVrcu60XWXVtCavfvHVTY+vRs=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=fEAN2DQY; arc=none smtp.client-ip=209.85.210.174
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-747abb3cd0bso188638b3a.1;
Wed, 28 May 2025 08:45:05 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748447104; x=1749051904; darn=vger.kernel.org;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to;
bh=bvyh2sL5jukcsE+iHbmofbSz17i0re3e8SaGtWtBoVc=;
b=fEAN2DQYYDjcnrIQgrkEo9X+Wqv6YzFepfHeXKqVhiN683FX8e+nIVrwjB2TaXOjfl
0SAJ5RzyQlAPKxHjItYS8ncWsssbJ6w3SVi1bBZp696bwMjMy/0eaWPcbbVK+KGctlUg
ddMICNoQaAns3GpbP9YAY0v6zGFyW9e4MinkCYkHjFYYIyVvyGcqsGDy5H4KscnYy9c3
DKOCWYAPNfwblyhLWdBFmaJ8HkjTXf7QnYvu8BfhPTTJVjeRXbQzC9HuTYUnT95YCdnU
hrrqubPxPYcl6x1JOlVab/8j/NffbBc58+Ji4YbNmhA/BDns5te8A4S9+lQ3UAMuo+/N
gvMw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748447104; x=1749051904;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=bvyh2sL5jukcsE+iHbmofbSz17i0re3e8SaGtWtBoVc=;
b=UWfBDxroPdzpvGWajtqqXU7I7FdQGOZG6VuL+IPX7K3qoEIO8vcqX4AGqpDRShJLZr
9Eb8CA0153Rf6Ps/C/+Qi+GlY/JjzNsjAvmtiSO+zGvxw70kdGbClNlv6TvxV/VuaXk/
XXBuf0ynEVZxc9MVBjB4Y7yEZ7JlqCdTWlz3PmkuAVr1zkrUOzooeO//w5fPPC7PLBhv
YdnB+2A8nc+2Yni1RXk07VY01Hwrvdiw092r3z4GWgKNlv+HQwQm4ubU2rJ24GI2JyM6
28TkY5CsrPO3O97OvE4BeRzNCXrjzLKngr6fs0h/8M+ln8D5wv7eOakBef39J4Kj7RXc
1Wog==
X-Forwarded-Encrypted: i=1; AJvYcCUWA3M1OwbvV5OVaLr1axqHecO0w2Zbcd+76yj+XYYuF7PR5qom50WwaHw/MKemFypcsIjCWWvZ@xxxxxxxxxxxxxxx, AJvYcCVGAgOXR5lRZe1C70bpCtilnVGHOYNNm/YMl6Xjpy1vSZG6UageRCCkDdNr+bghRmGJ0k7yCwdE5jwyzR01@xxxxxxxxxxxxxxx, AJvYcCXSFQCjlalcz64jWwOGBTdSUfL74WJMKRTQG+ERdzyHvpmy48E/X4EYPr6U275HWWzo+/o=@vger.kernel.org, AJvYcCXleH3dJIs+hXFjQKSuj2i9XmQ9iXo0rkzYKelxvC6VckMtAD293SVZG349FlGvtDO0FjKZTqKSr8SXaA==@vger.kernel.org
X-Gm-Message-State: AOJu0YximIZVDh2UW4fnCs3HWwbHy5jw+rRnVKS1EtKi/SWT6iH6eRVm
aXrkDlIyPyURtgs34MBkcOZdlH/Lw1MPEX20wQk7C7qYUgYfK9hZxuU=
X-Gm-Gg: ASbGncvh8JrLlHOQ2BM/NtPcPJ3rnn6nZ+lEv0SG8Gdz9MBkwF8LehAW+Su4DL7lPQ/
msM2XCxAFt1jE5yQOoQUHoFyba9aDZpLw4IJOH4mzwTx6WGfmkqgVnMvw3cvgx5j/ZitSUdsrFt
9uLF96eHrwjq0SwghqCjPAwRbKO4SJSJA0UQkS4/QgPSL6cRb6IuUH9bav/4UxuMmXkcblM3eCe
T6L0dE8XYMxzBSI6dmbQpyY/ujhBmiVHOjEWbqfBRCvI9GwJqDyfelsFDv1+wkNkTKq8BGRbbMY
nQ00kCP3M944knHtNkhk3XSBCgyGr+nVIBnlSwH1omtMh3UNcGJpAHJc9rinGttoB6cyr5W2Vuy
jvnT+8+ca+Vxh
X-Google-Smtp-Source: AGHT+IGSIsno6X7q+kUR6kRJB9l4MrL/N1la21dLaIi3MVJ9y47uMvcECGTsZZ59dCO2/u8b0YoX3Q==
X-Received: by 2002:a05:6a21:33a4:b0:218:2264:1178 with SMTP id adf61e73a8af0-21ac5b89dc1mr94275637.7.1748447104474;
Wed, 28 May 2025 08:45:04 -0700 (PDT)
Received: from localhost (c-73-158-218-242.hsd1.ca.comcast.net. [73.158.218.242])
by smtp.gmail.com with UTF8SMTPSA id 41be03b00d2f7-b2d99ec4b05sm1300558a12.49.2025.05.28.08.45.03
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 08:45:03 -0700 (PDT)
Date: Wed, 28 May 2025 08:45:02 -0700
From: Stanislav Fomichev <stfomichev@xxxxxxxxx>
To: Dragos Tatulea <dtatulea@xxxxxxxxxx>
Cc: Tariq Toukan <tariqt@xxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Eric Dumazet <edumazet@xxxxxxxxxx>,
Andrew Lunn <andrew+netdev@xxxxxxx>,
Saeed Mahameed <saeedm@xxxxxxxxxx>,
Leon Romanovsky <leon@xxxxxxxxxx>,
Richard Cochran <richardcochran@xxxxxxxxx>,
Alexei Starovoitov <ast@xxxxxxxxxx>,
Daniel Borkmann <daniel@xxxxxxxxxxxxx>,
Jesper Dangaard Brouer <hawk@xxxxxxxxxx>,
John Fastabend <john.fastabend@xxxxxxxxx>, netdev@xxxxxxxxxxxxxxx,
linux-rdma@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
bpf@xxxxxxxxxxxxxxx, Moshe Shemesh <moshe@xxxxxxxxxx>,
Mark Bloch <mbloch@xxxxxxxxxx>, Gal Pressman <gal@xxxxxxxxxx>,
Cosmin Ratiu <cratiu@xxxxxxxxxx>
Subject: Re: [PATCH net-next V2 00/11] net/mlx5e: Add support for devmem and
io_uring TCP zero-copy
Message-ID: <aDcvfvLMN2y5xkbo@mini-arch>
References: <1747950086-1246773-1-git-send-email-tariqt@xxxxxxxxxx>
<aDXi3VpAOPHQ576e@mini-arch>
<izjshibliwhxfqiidy24xmxsq6q6te4ydmcffucwrhikaokqgg@l5tn6arxiwgo>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
In-Reply-To: <izjshibliwhxfqiidy24xmxsq6q6te4ydmcffucwrhikaokqgg@l5tn6arxiwgo>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 05/28, Dragos Tatulea wrote:
> On Tue, May 27, 2025 at 09:05:49AM -0700, Stanislav Fomichev wrote:
> > On 05/23, Tariq Toukan wrote:
> > > This series from the team adds support for zerocopy rx TCP with devmem
> > > and io_uring for ConnectX7 NICs and above. For performance reasons and
> > > simplicity HW-GRO will also be turned on when header-data split mode is
> > > on.
> > >
> > > Find more details below.
> > >
> > > Regards,
> > > Tariq
> > >
> > > Performance
> > > ===========
> > >
> > > Test setup:
> > >
> > > * CPU: Intel(R) Xeon(R) Platinum 8380 CPU @ 2.30GHz (single NUMA)
> > > * NIC: ConnectX7
> > > * Benchmarking tool: kperf [1]
> > > * Single TCP flow
> > > * Test duration: 60s
> > >
> > > With application thread and interrupts pinned to the *same* core:
> > >
> > > |------+-----------+----------|
> > > | MTU | epoll | io_uring |
> > > |------+-----------+----------|
> > > | 1500 | 61.6 Gbps | 114 Gbps |
> > > | 4096 | 69.3 Gbps | 151 Gbps |
> > > | 9000 | 67.8 Gbps | 187 Gbps |
> > > |------+-----------+----------|
> > >
> > > The CPU usage for io_uring is 95%.
> > >
> > > Reproduction steps for io_uring:
> > >
> > > server --no-daemon -a 2001:db8::1 --no-memcmp --iou --iou_sendzc \
> > > --iou_zcrx --iou_dev_name eth2 --iou_zcrx_queue_id 2
> > >
> > > server --no-daemon -a 2001:db8::2 --no-memcmp --iou --iou_sendzc
> > >
> > > client --src 2001:db8::2 --dst 2001:db8::1 \
> > > --msg-zerocopy -t 60 --cpu-min=2 --cpu-max=2
> > >
> > > Patch overview:
> > > ================
> > >
> > > First, a netmem API for skb_can_coalesce is added to the core to be able
> > > to do skb fragment coalescing on netmems.
> > >
> > > The next patches introduce some cleanups in the internal SHAMPO code and
> > > improvements to hw gro capability checks in FW.
> > >
> > > A separate page_pool is introduced for headers. Ethtool stats are added
> > > as well.
> > >
> > > Then the driver is converted to use the netmem API and to allow support
> > > for unreadable netmem page pool.
> > >
> > > The queue management ops are implemented.
> > >
> > > Finally, the tcp-data-split ring parameter is exposed.
> > >
> > > Changelog
> > > =========
> > >
> > > Changes from v1 [0]:
> > > - Added support for skb_can_coalesce_netmem().
> > > - Avoid netmem_to_page() casts in the driver.
> > > - Fixed code to abide 80 char limit with some exceptions to avoid
> > > code churn.
> >
> > Since there is gonna be 2-3 weeks of closed net-next, can you
> > also add a patch for the tx side? It should be trivial (skip dma unmap
> > for niovs in tx completions plus netdev->netmem_tx=1).
> >
> Seems indeed trivial. We will add it.
>
> > And, btw, what about the issue that Cosmin raised in [0]? Is it addressed
> > in this series?
> >
> > 0: https://lore.kernel.org/netdev/9322c3c4826ed1072ddc9a2103cc641060665864.camel@xxxxxxxxxx/
> We wanted to fix this afterwards as it needs to change a more subtle
> part in the code that replenishes pages. This needs more thinking and
> testing.
Thanks! For my understanding: does the issue occur only during initial
queue refill? Or the same problem will happen any time there is a burst
of traffic that might exhaust all rx descriptors?
Return-Path: <linux-kernel+bounces-665746-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 285D241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:45:45 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 23C607A931C
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:44:27 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C1F3528B51E;
Wed, 28 May 2025 15:45:37 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="gIlkdiOn"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 32EA628B50C
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:45:34 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447136; cv=none; b=OwVq2TXp4vxP8X34cko0dotcp9Vbty2MqXoQTW1ufOfJ1/ileJQk78/mFn0n1QQGR46WeUwQ1l6yLxHs2tdDnhByPB3dD9dmqUvz+U2fXg0yB2MESKPGCT1f/PTdEhao7A4GybDiBW66/Ekxm83DjtdEqOm6LeJPuXYtrCh+ewM=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447136; c=relaxed/simple;
bh=/CbNirfnMFT6iFLSja2Zj2oVfKKWn3klp7446jTgwUs=;
h=From:Message-ID:Date:MIME-Version:Subject:To:References:
In-Reply-To:Content-Type; b=mIP4l22aHH2xgge69X3mk+IioBLj3ZmagxhBxQ0r61//ZhNLvFJWndtFZDRH0cRtJN1n0lcCd8c1JWVvUgi5GbXG3qS3FYowlykh2bYALq+9kZbE/aOWkaQjoJAk6BuyNXhNCysFvQ3lMR4F/3XuiPn25Ktd/ipVOMq/z/SEl/8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=gIlkdiOn; arc=none smtp.client-ip=170.10.129.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748447134;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:mime-version:mime-version:content-type:content-type:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=pyLOwGypbK7cil/VDfYgN1Gr/yfNRiyW37n+n15jPLw=;
b=gIlkdiOnCtea0VdQoZOFxJQVTXWAAe8GTkTAcDCvapEC01qXZ6Uudkpe2KEVTX4LhIxckT
PpJ9TpCJf8B/XaQAGpnvRGOAzqQS++IVETWNWBSN3sGSw7h+ew788rMed9hiWxfkmUYqSc
sNi0QKL5CHYpUn8Uec/KWFcDC2fr7G8=
Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com
[209.85.222.197]) by relay.mimecast.com with ESMTP with STARTTLS
(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
us-mta-101-rF7MVA4SNf--q4MOFuQWwA-1; Wed, 28 May 2025 11:45:32 -0400
X-MC-Unique: rF7MVA4SNf--q4MOFuQWwA-1
X-Mimecast-MFC-AGG-ID: rF7MVA4SNf--q4MOFuQWwA_1748447132
Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-7c5f3b94827so716256185a.0
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:45:32 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748447132; x=1749051932;
h=content-transfer-encoding:in-reply-to:content-language:references
:to:subject:user-agent:mime-version:date:message-id:from
:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
bh=pyLOwGypbK7cil/VDfYgN1Gr/yfNRiyW37n+n15jPLw=;
b=faX6GQ+x92Zav9bz9T8yjPTkraKePwyAJjSguJImblzieieWHQXyUk0ujHuxK+fU39
vTwLSFL22042lkGw0Z4VX2gDiiDYGCM/u2wKSQ+OLFUXYbDfhbhyPNdEMwI9joYn19Ku
YKl1AFK14IF0qsH+8OqpvDH1hFVYz9DKkCS1KgpX1sSA8GcFxINxJF9IMC9eFdy423Bt
xIHqgkYOc211A1+dxKng1MqTrDsYALDlK80jgiA1fyGMiZuHo3MHorB1Tm3YfkyddRpp
xxa0CyXo5vtJTdO0zthJRMzYQIexgoZPBBFqySDDwhyTvzdlO+y4wJzxLTkQJ0Jd7dey
wLYQ==
X-Forwarded-Encrypted: i=1; AJvYcCVdUAfHLdopVhDGEXxN3Y8zXVPLtemICcMP+wpJny+tvRj6nuMCIyCXOk5B6eHzmYR4ChqTKyINMCX3gvI=@vger.kernel.org
X-Gm-Message-State: AOJu0Yy3ENcW18h5DtQ3Pjrsh0rYdHl9Jp0RjWOiwQgT7ZwXyuXj1OFu
ew1DxbKqb+8E/GsWqE7hR/2wq38+9gSEa9xrdGXMKc5qFVy49qI7P87PIZ6000UEbp2Zy9qjQ64
xMdxb+s9U1jAq34EA8jvIikR2edXCPem4b/MrYEaT5PgtKbDndUIswnfWBYO9lJnGMQ==
X-Gm-Gg: ASbGncspN+2fux4Saq6VudaxaBrdxNv8m9B9CjxiOyc4LNLEGBSE2wxko7QtqojcvDa
8k3gFyGmPOxrQA+T77CM+3h4IfyBvCCg8UBF98WH00+V2FGzbY1bKwoMiFAy0PneQITB3MS2UIh
Qh2Twa6qfizaq8MCyo8VgzpsP8Gi2hqkXbEYTbb7Zl0AtFV3Ex4U5kzhDYPij4OxaX7TYfNiyk6
lfvnYNXw9YiByDIEHqMJNdwf2a3F6KBqamYA95+SuNC6NChgI3pIXNWbmkOCy8oDR6btfnN8rui
w0FKYWQ4enko
X-Received: by 2002:a05:620a:2952:b0:7ce:e010:88bb with SMTP id af79cd13be357-7cfc5d3bea0mr319656185a.22.1748447132200;
Wed, 28 May 2025 08:45:32 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IGUqlAX9B3FIW5eZMrtvbf91YzWhqy3WejI0SBLhs/OnmLka0kFn2dRtq7rU7LdniOGPnZkrQ==
X-Received: by 2002:a05:620a:2952:b0:7ce:e010:88bb with SMTP id af79cd13be357-7cfc5d3bea0mr319652185a.22.1748447131835;
Wed, 28 May 2025 08:45:31 -0700 (PDT)
Received: from [172.20.4.10] ([50.234.147.137])
by smtp.gmail.com with ESMTPSA id af79cd13be357-7cfb82002bdsm84495085a.17.2025.05.28.08.45.30
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 08:45:31 -0700 (PDT)
From: Waiman Long <llong@xxxxxxxxxx>
X-Google-Original-From: Waiman Long <longman@xxxxxxxxxx>
Message-ID: <a9d0e503-ec70-41a7-adb2-989082e4d9f2@xxxxxxxxxx>
Date: Wed, 28 May 2025 11:45:29 -0400
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH] Documentation: cgroup: clarify controller enabling
semantics
To: Vishal Chourasia <vishalc@xxxxxxxxxxxxx>, Tejun Heo <tj@xxxxxxxxxx>,
Johannes Weiner <hannes@xxxxxxxxxxx>, =?UTF-8?Q?Michal_Koutn=C3=BD?=
<mkoutny@xxxxxxxx>, Jonathan Corbet <corbet@xxxxxxx>,
cgroups@xxxxxxxxxxxxxxx, linux-doc@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
References: <20250527085335.256045-2-vishalc@xxxxxxxxxxxxx>
<99be9c8e-a5c4-4378-b03b-2af01608de9f@xxxxxxxxxx>
Content-Language: en-US
In-Reply-To: <99be9c8e-a5c4-4378-b03b-2af01608de9f@xxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 5/28/25 11:23 AM, Waiman Long wrote:
> On 5/27/25 4:53 AM, Vishal Chourasia wrote:
>> The documentation for cgroup controller management has been updated to
>> be more consistent regarding following concepts:
>>
>> What does it mean to have controllers
>> 1) available in a cgroup, vs.
>> 2) enabled in a cgroup
>>
>> Which has been clearly defined below in the documentation.
>>
>> "Enabling a controller in a cgroup indicates that the distribution of
>> the target resource across its immediate children will be controlled.
>> Consider the following sub-hierarchy"
>>
>> As an example, consider
>>
>> /sys/fs/cgroup # cat cgroup.controllers
>> cpuset cpu io memory hugetlb pids misc
>> /sys/fs/cgroup # cat cgroup.subtree_control # No controllers by default
>> /sys/fs/cgroup # echo +cpu +memory > cgroup.subtree_control
>> /sys/fs/cgroup # cat cgroup.subtree_control
>> cpu memory                  # cpu and memory enabled in /sys/fs/cgroup
>> /sys/fs/cgroup # mkdir foo_cgrp
>> /sys/fs/cgroup # cd foo_cgrp/
>> /sys/fs/cgroup/foo_cgrp # cat cgroup.controllers
>> cpu memory                  # cpu and memory available in 'foo_cgrp'
>> /sys/fs/cgroup/foo_cgrp # cat cgroup.subtree_control # empty by default
>> /sys/fs/cgroup/foo_cgrp # ls
>> cgroup.controllers     cpu.max.burst          memory.numa_stat
>> cgroup.events          cpu.pressure           memory.oom.group
>> cgroup.freeze          cpu.stat               memory.peak
>> cgroup.kill            cpu.stat.local         memory.pressure
>> cgroup.max.depth       cpu.weight             memory.reclaim
>> cgroup.max.descendants cpu.weight.nice        memory.stat
>> cgroup.pressure        io.pressure memory.swap.current
>> cgroup.procs           memory.current memory.swap.events
>> cgroup.stat            memory.events          memory.swap.high
>> cgroup.subtree_control memory.events.local    memory.swap.max
>> cgroup.threads         memory.high            memory.swap.peak
>> cgroup.type            memory.low memory.zswap.current
>> cpu.idle               memory.max             memory.zswap.max
>> cpu.max                memory.min memory.zswap.writeback
>>
>> Once a controller is available in a cgroup it can be used to resource
>> control processes of the cgroup.
>>
>> Signed-off-by: Vishal Chourasia <vishalc@xxxxxxxxxxxxx>
>> ---
>> Â Documentation/admin-guide/cgroup-v2.rst | 4 ++--
>> Â 1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/Documentation/admin-guide/cgroup-v2.rst
>> b/Documentation/admin-guide/cgroup-v2.rst
>> index 1a16ce68a4d7..0e1686511c45 100644
>> --- a/Documentation/admin-guide/cgroup-v2.rst
>> +++ b/Documentation/admin-guide/cgroup-v2.rst
>> @@ -438,8 +438,8 @@ Controlling Controllers
>> Â Enabling and Disabling
>> Â ~~~~~~~~~~~~~~~~~~~~~
>> Â -Each cgroup has a "cgroup.controllers" file which lists all
>> -controllers available for the cgroup to enable::
>> +Each cgroup has a cgroup.controllers file, which lists all the
>> controllers
>> +available for that cgroup and which can be enabled for its children.
>
> I believe breaking the sentence into two separate components is
> actually making it less correct. There are implicit controllers that
> are always enabled and do not show up in cgroup.controllers. Prime
> examples are perf_event and freezer. IOW, only controllers that are
> available and need to be explicitly enabled will show up.
A correction: The cgroup.controllers file shows the controllers that are
available in the current cgroup and which have to be explicitly enabled
in cgroup.subtree_control to make them available in the child cgroups.
Cheers,
Longman
Return-Path: <linux-kernel+bounces-665747-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 712EA41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:46:22 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 7EAAD3BB11C
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:45:44 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 5728C28C2C8;
Wed, 28 May 2025 15:45:58 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="cde8scR/";
dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="refnbGjY";
dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="bySGC134";
dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="4zAFPZZL"
Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 01681286D6B
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:45:55 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447157; cv=none; b=ZMxKFD7yGTHTA7shUGZ03Ewy1MzmwB5UbxSa+vNey/NmGTcRs6S3hKU1F1Cgwg9AdMBctfu7A1l7zbmK7Ch6hHIPxN4kf+ritnnQETl/eut8nmkoCtBd1bjbarR0izIQuk/QQrL5XlXaoAAMU3LgXOxWS3xgIfW6VT5SFMQVvXw=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447157; c=relaxed/simple;
bh=j19nRteXPJvYzv7WC5pci+ARTaE0cmwkYfp8eCoLENQ=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=oV9jhVUwSN3GsXh8lnzf1skQOqERCnoeiZb6j4xaXVE4cAYbDmGsYVj2MFHQzmFZrYuXinJg0+vq4jc9fwYjaBeC5VugeCbKb/tbuWlykTulJP08/DqFBR/MaTSsePJLneJ+1zzUIJCsp5jPt+nzNTOMc0DQpRSFdhE4Q/udGAQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de; spf=pass smtp.mailfrom=suse.de; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=cde8scR/; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=refnbGjY; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=bySGC134; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=4zAFPZZL; arc=none smtp.client-ip=195.135.223.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de
Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(No client certificate requested)
by smtp-out2.suse.de (Postfix) with ESMTPS id D4F821F79C;
Wed, 28 May 2025 15:45:53 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa;
t=1748447154; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
mime-version:mime-version:content-type:content-type:
in-reply-to:in-reply-to:references:references;
bh=90//cSFAovb3np1TlyFoHzplikprSinbUOdqaHViB8o=;
b=cde8scR/o0imOH1tMYP+EspNV1riDEv+jEb2YncHIjrFwzvbbxUxS3geTgrz30xiWKjnCm
03OkyE/MpmrC9bIrj9Cz0rZmsizfDCICVcACw5hGRT9QaDQF3QIoOhE/e9Mw85YriyTB85
BnHygwkDaf07MxXESwcgpHniu7wXCps=
DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;
s=susede2_ed25519; t=1748447154;
h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
mime-version:mime-version:content-type:content-type:
in-reply-to:in-reply-to:references:references;
bh=90//cSFAovb3np1TlyFoHzplikprSinbUOdqaHViB8o=;
b=refnbGjYp6nygWQaU2kMghJpFXkEjfCKcPn4auWX9beB95omPCsB69NHXVPHfBl7DnYvGD
ECszSfzxoK7J1qCQ==
Authentication-Results: smtp-out2.suse.de;
dkim=pass header.d=suse.de header.s=susede2_rsa header.b=bySGC134;
dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=4zAFPZZL
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa;
t=1748447153; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
mime-version:mime-version:content-type:content-type:
in-reply-to:in-reply-to:references:references;
bh=90//cSFAovb3np1TlyFoHzplikprSinbUOdqaHViB8o=;
b=bySGC1341VeoGLtrqpW1sa/fZV3bSUnihA+NwO4B+NY03PQ/D90Z38/MVoJgUvS/LGnAQt
9HTgOGGmczarDomWlaf7qOgoXn4dvKfZGgU7i4CrFrVkS2sag3uujOtX8R8qb8931SUqrr
WgAXMcHcBrQFxoEfXUWWfHsVlBvxFo8=
DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;
s=susede2_ed25519; t=1748447153;
h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
mime-version:mime-version:content-type:content-type:
in-reply-to:in-reply-to:references:references;
bh=90//cSFAovb3np1TlyFoHzplikprSinbUOdqaHViB8o=;
b=4zAFPZZLIye49Ym7SvHCAr5z85yuCq+lzqo4WQ26ob313OeHfpBRys5whzANewy4kPsW04
qd7rmKAuFz00fZCg==
Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(No client certificate requested)
by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 11224136E3;
Wed, 28 May 2025 15:45:53 +0000 (UTC)
Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167])
by imap1.dmz-prg2.suse.org with ESMTPSA
id znZRAbEvN2h8ZQAAD6G6ig
(envelope-from <osalvador@xxxxxxx>); Wed, 28 May 2025 15:45:53 +0000
Date: Wed, 28 May 2025 17:45:42 +0200
From: Oscar Salvador <osalvador@xxxxxxx>
To: David Hildenbrand <david@xxxxxxxxxx>
Cc: Peter Xu <peterx@xxxxxxxxxx>, Gavin Guo <gavinguo@xxxxxxxxxx>,
linux-mm@xxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
muchun.song@xxxxxxxxx, akpm@xxxxxxxxxxxxxxxxxxxx,
mike.kravetz@xxxxxxxxxx, kernel-dev@xxxxxxxxxx,
stable@xxxxxxxxxxxxxxx, Hugh Dickins <hughd@xxxxxxxxxx>,
Florent Revest <revest@xxxxxxxxxx>, Gavin Shan <gshan@xxxxxxxxxx>
Subject: Re: [PATCH v3] mm/hugetlb: fix a deadlock with pagecache_folio and
hugetlb_fault_mutex_table
Message-ID: <aDcvplLNH0nGsLD1@localhost.localdomain>
References: <20250528023326.3499204-1-gavinguo@xxxxxxxxxx>
<aDbXEnqnpDnAx4Mw@localhost.localdomain>
<aDcl2YM5wX-MwzbM@x1.local>
<629bb87e-c493-4069-866c-20e02c14ddcc@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <629bb87e-c493-4069-866c-20e02c14ddcc@xxxxxxxxxx>
X-Spamd-Result: default: False [-4.51 / 50.00];
BAYES_HAM(-3.00)[99.99%];
NEURAL_HAM_LONG(-1.00)[-1.000];
R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519];
NEURAL_HAM_SHORT(-0.20)[-1.000];
MIME_GOOD(-0.10)[text/plain];
MX_GOOD(-0.01)[];
DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519];
FUZZY_BLOCKED(0.00)[rspamd.com];
RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:104:10:150:64:97:from];
MIME_TRACE(0.00)[0:+];
ARC_NA(0.00)[];
RCPT_COUNT_TWELVE(0.00)[13];
TO_MATCH_ENVRCPT_ALL(0.00)[];
FROM_HAS_DN(0.00)[];
RCVD_TLS_ALL(0.00)[];
SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from];
FROM_EQ_ENVFROM(0.00)[];
TO_DN_SOME(0.00)[];
RCVD_COUNT_TWO(0.00)[2];
MISSING_XM_UA(0.00)[];
RCVD_VIA_SMTP_AUTH(0.00)[];
DKIM_TRACE(0.00)[suse.de:+];
DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:dkim]
X-Spam-Level:
X-Rspamd-Queue-Id: D4F821F79C
X-Rspamd-Action: no action
X-Rspamd-Server: rspamd1.dmz-prg2.suse.org
X-Spam-Score: -4.51
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 05:09:26PM +0200, David Hildenbrand wrote:
> On 28.05.25 17:03, Peter Xu wrote:
> > So I'm not 100% sure we need the folio lock even for copy; IIUC a refcount
> > would be enough?
>
> The introducing patches seem to talk about blocking concurrent migration /
> rmap walks.
I thought the main reason was because PageLock protects us against writes,
so when copying (in case of copying the underlying file), we want the
file to be stable throughout the copy?
> Maybe also concurrent fallocate(PUNCH_HOLE) is a problem regarding
> reservations? Not sure ...
fallocate()->hugetlb_vmdelete_list() tries to grab the vma in write-mode,
and hugetlb_wp() grabs the lock in read-mode, so we should be covered?
Also, hugetlbfs_punch_hole()->remove_inode_hugepages() will try to grab the mutex.
The only fishy thing I see is hugetlbfs_zero_partial_page().
But that is for old_page, and as I said, I thought main reason was to
protect us against writes during the copy.
> For 2) I am also not sure if we need need the pagecache folio locked; I
> doubt it ... but this code is not the easiest to follow.
I have been staring at that code and thinking about potential scenarios
for a few days now, and I cannot convice myself that we need
pagecache_folio's lock when pagecache_folio != old_folio because as a
matter of fact I cannot think of anything it protects us against.
I plan to rework this in a more sane way, or at least less offusctaed, and then
Galvin can fire his syzkaller to check whether we are good.
--
Oscar Salvador
SUSE Labs
Return-Path: <linux-kernel+bounces-665748-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 8E25341E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:47:49 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 4440A1770DF
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:47:50 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 7154D28B7C1;
Wed, 28 May 2025 15:47:44 +0000 (UTC)
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 06E6E1C860C;
Wed, 28 May 2025 15:47:43 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447264; cv=none; b=pOhclGbcu6kNssxm4c/lyO8bk1Ta68DKJxzGd/TwLu1M6dfFzhuZVmV8BmCZJQJZ1D1yCXc0JAa5Zmgn0/nDK5duiH+Sq8G+nKcl/GIoXbCC1GXd1AP/4l8xwWNWPY79wpEisdMWt5ltF65XgvxIOckErM/UHX5Zh9zQV1XhwGQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447264; c=relaxed/simple;
bh=wk31ZC40KMxXRWB3u+i5vzCJ1XRX25kSYlq/FWxj5C8=;
h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=nxnAzHfGRn/nbx/Tmrm/RWxMau180zEgqXSOx9oda1oAAsEfNK9o3pFw1hnnOd0YoxMGu/VT5F1FY3E5ueRpQf/VScuBbSWTM/f0RI0S1rXmqUb9ZnzfZTMQe798NZDixh6mwpIxzr7NEeOiFC0PGZDZEm95+Dsr+oKt3Om4YAk=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id D7C28C4CEE3;
Wed, 28 May 2025 15:47:42 +0000 (UTC)
Date: Wed, 28 May 2025 11:48:42 -0400
From: Steven Rostedt <rostedt@xxxxxxxxxxx>
To: "Masami Hiramatsu (Google)" <mhiramat@xxxxxxxxxx>
Cc: LKML <linux-kernel@xxxxxxxxxxxxxxx>, Linux Trace Kernel
<linux-trace-kernel@xxxxxxxxxxxxxxx>, Mathieu Desnoyers
<mathieu.desnoyers@xxxxxxxxxxxx>, Vincent Donnefort <vdonnefort@xxxxxxxxxx>
Subject: Re: [PATCH] ring-buffer: Do not trigger WARN_ON() due to a
commit_overrun
Message-ID: <20250528114842.7b9e696a@xxxxxxxxxxxxxxxxxx>
In-Reply-To: <20250528113439.3fa4f245@xxxxxxxxxxxxxxxxxx>
References: <20250527121140.0e7f0565@xxxxxxxxxxxxxxxxxx>
<20250528104203.d6f509c5d9c30dec1e024587@xxxxxxxxxx>
<20250527221735.04c62a3c@xxxxxxxxxxxxxxxxx>
<20250529000342.5218ac7b90c99f3636edd5ab@xxxxxxxxxx>
<20250528113439.3fa4f245@xxxxxxxxxxxxxxxxxx>
X-Mailer: Claws Mail 3.20.0git84 (GTK+ 2.24.33; x86_64-pc-linux-gnu)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 11:34:39 -0400
Steven Rostedt <rostedt@xxxxxxxxxxx> wrote:
> And even in that case, it triggers at most a couple of times a second:
Forgot to cut and paste:
[ 367.010564] Ring buffer [1] commit overrun lost 1070 events at timestamp:367737571566
[ 371.328151] Ring buffer [3] commit overrun lost 21442 events at timestamp:372051356588
This run had only two prints. I've had at most up to 8 prints for a test
that runs over a minute.
I updated the code to print the per CPU buffer it happened on as well as
the timestamp.
-- Steve
Return-Path: <linux-kernel+bounces-665749-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 070AE41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:48:47 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 3660F177CF4
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:48:48 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 00F9728B7EA;
Wed, 28 May 2025 15:48:42 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="WrEOE201";
dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="WtyYr0gw"
Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3EEA61A9B3D;
Wed, 28 May 2025 15:48:38 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447320; cv=fail; b=lW5QiW9M9qwwxjrKPurGXSBiT+oNABLthXdY7ULEhOUICJomEjUnlnQ2bCmbr8q7rN38ZdIFlv8ZOmSs03whWPv7gKKS19VIfo0jr3wDdx6XQB8MsXoUeTgzQBI2ozjzFhpxRQmeSgyWuhcaznARNO7Iozi7AsT9QiyQj3IVZ9Y=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447320; c=relaxed/simple;
bh=gQu/MrtEsL/EzDtmHnwUA3GzDauoEvln4Yb7Bs8eWng=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=bDMLesbEr60dTBNwLSrlNx/eulJBp3dxQiinGfwSe96Ib0W/4J8qbX9oXYr4xTEDg4kdIC71LRKwAk4zTMZ2aiTgmzenDpUB/KihbUh/aP0qdBSFBSLLdg0CRFFctF9GCT89vKP/jh6WfjMVwYV1EJaaft6Q646wGbWzS4XFmxQ=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=WrEOE201; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=WtyYr0gw; arc=fail smtp.client-ip=205.220.165.32
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com
Received: from pps.filterd (m0333521.ppops.net [127.0.0.1])
by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SCqZ5W024175;
Wed, 28 May 2025 15:48:21 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc
:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to; s=corp-2025-04-25; bh=gQu/MrtEsL/EzDtmHn
wUA3GzDauoEvln4Yb7Bs8eWng=; b=WrEOE201Kwwe9rgdqCiHb3x+t10vIvINYv
dBmmqCvUh+bewpxp8vZciOq4dmLUConnJmhWw2BTAIA2E9xedgXEWPJcYnNZNNGk
jpzR3kYMZn2p95gJGbAeEE06utMjTDVECwnN79HiUYkdivhXM6l0/zmyzzYJoRAR
8mIEkntT+ev/RKvtrJ21+vzRCOco2mt45c1Q1niRii77wk1ozP35Js7RSaGNEFgI
Wt74OCPvvYrjofQ1CuwfkwHBHHOy3S2Uy1sDFDyx3TosTypfI3H2ppZPR2IZWWXF
gCOtaaoiFyifnkb71Pk221BHF3faEFjNKnRjSptgQKQX7Yizruig==
Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2])
by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 46v33mx9nb-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Wed, 28 May 2025 15:48:21 +0000 (GMT)
Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1])
by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 54SFG6tT027834;
Wed, 28 May 2025 15:48:20 GMT
Received: from ch5pr02cu005.outbound.protection.outlook.com (mail-northcentralusazon11012003.outbound.protection.outlook.com [40.107.200.3])
by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 46u4jakt4y-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Wed, 28 May 2025 15:48:20 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=xh9F50tm4vLkUep+tC95clAJCZNoguNc8TzrUAbCVQbg55AHSCUSj9e3ksLaypUeTU/++t1VTvQZbDmPh/FsQj0u4ChclFVgrRnqLtsBEOl7cSCgnO5Yz1nDjQDuxMKdWalXDVqaWfsuZJ3u0tDZ+hivahj03XgLg8iWH+w506r89FebonDlARV8/xv/FmV88zqHPYXWNeFDtGnyHC0iH7oU6CcT5xMRs0HZqKsXPhUsjD4R49CI4e7+QrvpikBSPgnx5jbJpAhGwvNQuVBnDjquAVakeC0NN2mdcliL3FutYaP1Fs8HWDUr01/7kVPeBI7Ycmyl0kCaSRJpd9QPqA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=gQu/MrtEsL/EzDtmHnwUA3GzDauoEvln4Yb7Bs8eWng=;
b=f5XGhbjacMpocr7TB2C3R3JCsGt/jsInoDgLAPxgRImn3u5jUBW/u/z9QS1B0Q6ia9FOt9ES7ZU5BrM0YWvyXEdFS6NKWo4qxZuQHMZwXESLOtq3WkPjfqZUPZ15vh+P4/rUrQxmYrbYFW3yw1tefUa9VuuurMPENhD1LpaBDLA8f4Cck8foCBLeFITFdPnNQ916gj56lUYllU9Fe4ERDYo50E7kSnWx/0o/zt273VYQ8ejlh/M23xlFba9jmi90ojuziJLMIRJ1FlcT34F+bskxWIAdXA1Yv/+0k/3S1J0xQiGpaVotKK+Rs2yjqi3jBCCgxa2gze72F3m5aOKTrg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com;
dkim=pass header.d=oracle.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=gQu/MrtEsL/EzDtmHnwUA3GzDauoEvln4Yb7Bs8eWng=;
b=WtyYr0gwaLU+lo4wePukctRkHQfFYCSpOpWmpVbY5WEjXshhV6/YjoTUj02G1XsEkjvBFGJNSs+p4dlnLQHFoq4FQ/vILdMIXiSItv9VQwCtnGrBiRq3bPdy0HGhI4QjmmI+LExyQGKX0jzdcsQiln3zVS8Yo7xfBKpubpS4PZw=
Received: from DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16)
by BY5PR10MB4322.namprd10.prod.outlook.com (2603:10b6:a03:208::13) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8746.40; Wed, 28 May
2025 15:48:12 +0000
Received: from DM4PR10MB8218.namprd10.prod.outlook.com
([fe80::2650:55cf:2816:5f2]) by DM4PR10MB8218.namprd10.prod.outlook.com
([fe80::2650:55cf:2816:5f2%5]) with mapi id 15.20.8746.030; Wed, 28 May 2025
15:48:12 +0000
Date: Wed, 28 May 2025 16:48:10 +0100
From: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>
To: Steven Rostedt <rostedt@xxxxxxxxxxx>
Cc: Caleb Sander Mateos <csander@xxxxxxxxxxxxxxx>,
Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,
"Liam R . Howlett" <Liam.Howlett@xxxxxxxxxx>,
Masami Hiramatsu <mhiramat@xxxxxxxxxx>,
Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx>,
Eric Mueller <emueller@xxxxxxxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx,
linux-trace-kernel@xxxxxxxxxxxxxxx, linux-mm@xxxxxxxxx,
Vlastimil Babka <vbabka@xxxxxxx>, Jann Horn <jannh@xxxxxxxxxx>,
Pedro Falcato <pfalcato@xxxxxxx>
Subject: Re: [PATCH] mm: remove unused mmap tracepoints
Message-ID: <b694c72b-0873-4123-869c-134709341e19@lucifer.local>
References: <20250411161746.1043239-1-csander@xxxxxxxxxxxxxxx>
<3ucksa6coiwco3wpmcjtfwezqjigzm2zwvdvkt2ryvefzojtqy@4lda47c236uz>
<CADUfDZpPGQEY9u3p3MCU2S3qmDyKmE1JnSQ6G2jO4_J40rQeeQ@xxxxxxxxxxxxxx>
<20250528114549.4d8a5e03@xxxxxxxxxxxxxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528114549.4d8a5e03@xxxxxxxxxxxxxxxxxx>
X-ClientProxiedBy: LO4P265CA0030.GBRP265.PROD.OUTLOOK.COM
(2603:10a6:600:2ae::15) To DM4PR10MB8218.namprd10.prod.outlook.com
(2603:10b6:8:1cc::16)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: DM4PR10MB8218:EE_|BY5PR10MB4322:EE_
X-MS-Office365-Filtering-Correlation-Id: ef072726-a1db-4e58-ba73-08dd9dff0d98
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?opJfK85v7BVMlGk6jJACGLkbtPj2ZZO8fj+Ew+ID6ZHHTFajyT2IhIx5aiQJ?=
=?us-ascii?Q?wjlKbGdU1FWQJOstoXsQfEI32PJHqrJWB93dMNQrqVAt1+Czs+Y1l5t6lbZf?=
=?us-ascii?Q?OQFvzwXACchHomMm2hr7OUvMNQ6IsgJ2Z8bI+SVJO6LdvU6OyQgkPgdImoEX?=
=?us-ascii?Q?6UlTT9vQh7g0+8PJNOrPrd+PMYLwsWxL3puauWLF6TBGasgsWvc0Idebp3HV?=
=?us-ascii?Q?rTDWCvAfZahrPifrxu/IuJuJnQ9jWMqDO4CJoEqBZaJwcjD19a0ZTA9B6k/o?=
=?us-ascii?Q?PsSUuk7tY0v9W5nZz2IXCiEbzh5k9cuBdkWrUcmlM+acSQN+8LXuvAiQx+c3?=
=?us-ascii?Q?Pk+abu0ATkDphMa+41cIAJWY8udRPg/aJavwb9h4vyKj0pMUCR9GFDmuTexQ?=
=?us-ascii?Q?TUXAN2QhjoXQIEtRvZPe1LztfD22I+1nYLeSw8aAirR92eIqs+i6zEcIuTla?=
=?us-ascii?Q?ZbYy/FoiviQtSbaLoE9wj8rYi0pjvfKDzS6yDosaEPjlknnZtgfn5RH218et?=
=?us-ascii?Q?79l3ssbCyJcDXlKPhrDCLtEB/lAxoCKC2rHaefYvyaxGFBvLD/XHui8qh9h2?=
=?us-ascii?Q?fhCHUHCYcZDs2BwtGOWoFZnDehMpyeQ3cCTUHefdn1JWFDwD1CslPU85OFcP?=
=?us-ascii?Q?73y8pId3+SEr20dGLQLloryxAAkA3pajE4pug/HP3EDV2vC52eXkRGqOccfA?=
=?us-ascii?Q?lMMQCyluucQQQal8p6r1/LfH0Hmpeleg7lxzaSTOqFXZqu1QW4bFm/JIntw6?=
=?us-ascii?Q?ZkHDErzZ+s7p/HN730MJZxkSamGOlNNPp0/asjYB/Kdq/MaV0o1qqhwqG18A?=
=?us-ascii?Q?7PZhEe5HHVLdLcI78JXM0oBwwncgrPJocVnemO8xGdGd/EdahP3qjpWV3J+2?=
=?us-ascii?Q?n2TYjt+/e0kbKZW3uETWbxbH5xjcDrYes90NwJZjbhVtE61ccYbjpSI8vegv?=
=?us-ascii?Q?lduaBFOMVtXMo4viQh8TIpRFTCcX15qMhBs2rJxBZZaBPzZG9pvobyGwLQUq?=
=?us-ascii?Q?09/8ZboTfR8z3Kwj/5yT2Pi7Uowdsfg/z0nRY2qaNKW+rdnbCdl23j05soQf?=
=?us-ascii?Q?vwWaAkiY6ITSWKhFrUL2CSbUxcEgqzmg4IfCgO8pLY6dk+nyxIED3ZEABQMd?=
=?us-ascii?Q?UQoFASLXIM+MfsuQKkPXqCxmrHPG67VyW2xAywgsqiq+3tjdNP7GrgWepARP?=
=?us-ascii?Q?rVbEMI/vhOqDNLY2mUyK8vzqzAFRGoiS+m/OEUG+E6hyu2NgrsF2bmIpJJb9?=
=?us-ascii?Q?qYPWN4obig8gv+5l3jJXODMG9EM1sn9w5XgV5jJ0M/gx6EiCGc+ChovN9DVV?=
=?us-ascii?Q?g2Wzgg1Hub7O7yy3R4giNTxoHL9g8QnoqN8gy4X8Bq8o5OAiwd2t33eIsRxW?=
=?us-ascii?Q?8URVfRiJu3Yw5ayDUnXJamBce4Tww2gh4HyAl1YDQbtXk53K6PbYeUHoUlQr?=
=?us-ascii?Q?PcIPBatLFV0=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB8218.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?SZhwgoW9WABH8581vziz3s9ezGljsYw4xAQTKruA5JIlTkNIWyqP1Ims+tX3?=
=?us-ascii?Q?VmOk9n8iLNEWH81kfQuvkzI4t4KZsuy7uyfdE6RDYCJSzmjQJV4m2qsTxHan?=
=?us-ascii?Q?qCDfzFpvXjwJ+N2CKXqJ6ChAKIKVwoe9oar/e1/s7jMT9lSV5g40D4Shu923?=
=?us-ascii?Q?3pSNrX6SliDoi2eRB/7TDyaZEQrxHzmVohy8/1ONACtNNFrNUaSJjMuLgp9t?=
=?us-ascii?Q?wzy+9GUNOTNUvszJ/yTSxEGImTubxHI6BPhBjp/7CZVw5vR5wZMx9AgER2tm?=
=?us-ascii?Q?4mL5PaKjsN5J44uOI+wT/dt1tj8bnvJ8s888KRoh163l8Sc3BJlfSOOILcc/?=
=?us-ascii?Q?PBtTwKzticBpDzUEkDZMW7189aoIEh2aZbt8Ewi9a6V4+HwlV7mwkZrRn/nh?=
=?us-ascii?Q?bSmTXGdUCylzz8fhgl+5JOhyVgMAqiV0+GOBnmOyp6qZmfX6N0A5GoyV0YdH?=
=?us-ascii?Q?3N0r2xW3/RhR/aTaF56lPTV9odtnWEaKQw/vwabh19BY//HVTABzXQeZfp5Z?=
=?us-ascii?Q?VDLGXlWrUv6iEzEQiGoiNxy3SRTjgO8j10J7H7bds8mEGus0oRa31a9f/yZX?=
=?us-ascii?Q?i/JHRqkC8htiA/Q/s7rf/Dmrhks6F5xI+3cguK0Lpe1M8148pKnw+Pp1/DSy?=
=?us-ascii?Q?sJFyU3y3pbHycH/bIPJj8QiszlC1nPEG2S/GLbE9tb/MKhlVOYlv7QZu94J6?=
=?us-ascii?Q?pZXpHtHsFsCU/WDLkQaoudx0lnkDIvu/p99LAF9j+Fd7IAx3MTfWA3csXmsV?=
=?us-ascii?Q?BHMSfEYFZAyC5pu291YaYqfgJY6lC5V2MF2Xd2VVZkH7dJvsW3TEKq+aGrR+?=
=?us-ascii?Q?Ml87S0dSxVpOHlhJmMkAYJabYQ+oY+n1EkTP39UU+A8w9xo4yxN5dlMKbJNS?=
=?us-ascii?Q?y/wA/Nkjbcr2C1G9WLiefPw/dEQIQSZYDLWA3SLA7bErvAqyQ6bWj0E/Cd7u?=
=?us-ascii?Q?bF7raXfP1ruKAwPDdCV1V6FgICgu5b5tebSd47II6OChpD0HgSkfL7tptKwp?=
=?us-ascii?Q?gaew8mVoRLOAIs1cpOENBfTsf1ilLbBBubB67lu2GuV8XTUTfFljEU/JPNGu?=
=?us-ascii?Q?MAtf1DgmN3ReZzh6Cm3kDQ2X1LguOaDVrUL5C2JfUkqCRQM9oywiho5P4yUO?=
=?us-ascii?Q?f0Cms8nd4vcS3L3OeBhQTqYtgUlzYSKU9+OZpq//nl9plkd7sYhOXxPuixuo?=
=?us-ascii?Q?xMj3ftW17EhUG7fqvTa2tNTXvguNNHfyFyo0cxdN3IOe0HjNNtuOF/9aBQ/Q?=
=?us-ascii?Q?z9I9CfNtya16MuhGk74PgKk5kI/YCZZqgT+f+rx7ypMsob0TikwIiVbbUqw0?=
=?us-ascii?Q?DTy9DJjvDS8/pygM67G3u0tJWR1IRQLoqIuCMwlLct7pZ+p0IoxgY9VGJ0XE?=
=?us-ascii?Q?4nVZkR4Co7PofCIblDeJshq3FK5nlMaWHXN7Dw0n/tCV49a3zvQbIEtb3ZSn?=
=?us-ascii?Q?JgtFN4i1by3Da5iB4gvGFSr7MsHWJS789w8OKMZdp5OMPDTVrYmr0//K4kfm?=
=?us-ascii?Q?JaCLajZwHPJZhOTjXBm9AZnL6C4nnh9NMqZR69iwmhPkvXclpu1xtG9DHMQo?=
=?us-ascii?Q?ws7v9yFPJleU1mCUCn3Ty930+3Hsdn31HamPLvkbNh8tf1CQuv4PsBdH227X?=
=?us-ascii?Q?HA=3D=3D?=
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0:
hZ7UbIOVKzuROiJ6dkNlevP+ZlThgtYPY9266yX+iBiB7qweW292nf6X7oqTkBEXz8KbPKQAfgIryNjnhfGrdu9Qk0E8nadl6zu/QJw8FrhzzqFdhJPiYea0RgTx+Uwy0y6vrO4BJBKgw7D/zL58fFCgJa6Eb2vs3aNp2OM7HFceFTU5ERS/foe6KV39TKcdLL+o+GPppFAT9yHLz1MTrDO7jy8ElqO0HAf0i/L/lLUmCTMP9KBcDrLPGX506U+n9ZXGuAuWL++vWBKzdw76jA4H9rD0Vz0Deo8GWh7L9V62y3MZvyC88UrQWEVc2UgOTobvCB9M0c0pQIpXqGi66St2mGZ3/UpvfPDPdFIg3S97c8wHIuj24USIJaz3wvm4u5bfZIeMs2RuQJ4hHyoNVe9DfXzHQKfiQoEFYQBbFEJma2vIfHNoqTaTylgzLgJ9DTJudsZK2AGuSalBqjv6OPH/7f6MPorSiuY/TT3/oX5FPyN8iTnTQXM24CZwJ5ZZDme7Y0UVqEwCEpb7X21TZXYy3ReU6ofOUhQNvwIH64Q4s+Rzu4mrMjbhmHBJPCEch6Z3xAQkIEZVckdMaC+qK+2qOgc98JqLnZWqPILRn4E=
X-OriginatorOrg: oracle.com
X-MS-Exchange-CrossTenant-Network-Message-Id: ef072726-a1db-4e58-ba73-08dd9dff0d98
X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB8218.namprd10.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:48:12.7636
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: CLPCE2D0x0JOM+UBmMsORvRXUf06QDFVizdSwcukL0P707dNzgWHZAmUuDYJ7Um6iDRFb5gr6ljvSbM2ZrV2BYsf6n69dTxYwKz/tWqmRjM=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB4322
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_07,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 phishscore=0 suspectscore=0
adultscore=0 malwarescore=0 bulkscore=0 mlxscore=0 mlxlogscore=572
classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000
definitions=main-2505280136
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEzNiBTYWx0ZWRfX27eHZVHP7I85 6foQdsviCHOLnMUpXk31J22d7IDZCdP3u0/cf0zYM5MDF4tT/GBkKt2czuwQKz+s0eWnhIXNAW9 ZMEm1TWUEGUgT0mrziOmHtJPf7k1h3uFZwcj9DJtam16oCDRVGmSmr2uq7YYg+U66GzLGiNv1ye
LkcVs6/ci6VOBhhK9EsE4VGNN5GaOoNpDrKdqrgy1S/oFz+QW2CO19M/lV7x6ybp0FMif1s6LGu 8NoyJauO+1TW69Vjfhv/cMVaK4eYcNI5Vf+7iRENrV9JmL5QQDZSvVbY4hUwBQhtfhJdYmd3OEE KU3eACRAZpsS3RoSAGhi4ZyXNPQgVGz40MQ0+8er/FrjEuVnua0vkYBqWhEDnfka8l2AZ/wjo5G
0fYlAPOB0+Yx5rqSGk6uKItoh69245HMQHXFhDJBfvcLJsAf+Ck9YvINUo+dyYkKcZEgzIeR
X-Proofpoint-GUID: 0NJnkOIfGW2vjYYOSzknw-JTssuD-mbm
X-Authority-Analysis: v=2.4 cv=aO/wqa9m c=1 sm=1 tr=0 ts=68373045 cx=c_pps a=XiAAW1AwiKB2Y8Wsi+sD2Q==:117 a=XiAAW1AwiKB2Y8Wsi+sD2Q==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19
a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10 a=dt9VzEwgFbYA:10 a=GoEa3M9JfhUA:10 a=WTJdmG3rAAAA:8 a=hGFkS9ix08AOe-KzrfcA:9 a=CjuIK1q_8ugA:10 a=q3NGepEMMmKWaCv8Sx90:22
X-Proofpoint-ORIG-GUID: 0NJnkOIfGW2vjYYOSzknw-JTssuD-mbm
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 11:45:49AM -0400, Steven Rostedt wrote:
> On Wed, 28 May 2025 08:16:24 -0700
> Caleb Sander Mateos <csander@xxxxxxxxxxxxxxx> wrote:
>
> > Would you mind picking up this patch to remove some old tracepoints?
> > Liam has already given it a review.
>
> Someday I need to add code that lists the events that are never called. I
> can imagine that there's several tracepoints that are created and never
> used, and they still do waste memory :-(
>
> -- Steve
Who traces the tracepoints? A question as old as time...
Maybe reasonably straightforward with a clangd/ctags/etc. backend or
something to track usage?
In fact could do a quick-an'-dirty script to grep invocations and have a
person run down the results to double-check or sth?
Return-Path: <linux-kernel+bounces-665750-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id F357A41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:48:59 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 8E684A233C0
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:48:38 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 8436028C845;
Wed, 28 May 2025 15:48:49 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="hXy6SQQu"
Received: from mail-yw1-f171.google.com (mail-yw1-f171.google.com [209.85.128.171])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id D439928C5DE
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:48:46 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.171
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447328; cv=none; b=sckbknedZKhyfaKvwldXAdNQ/YqtDgNRCtoMLmzyHCtNVTaUWpAlWlLx1nY5UrW7GEv7RtKj1ECQCdGxOZK0w+PvsZ1WX0Goc5WZHZs0E1JxaI8NvY8EIe2yOVBy9zELAXhz6MyX1XsjzMAGo18c4BiXjXCHSXiYNAEXsiPfQY4=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447328; c=relaxed/simple;
bh=WIlV51wEuAd2rtYOVeO8B1eFmuqdgn/T2swun7fdn7M=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=D3WazzE2vUSH3mmYJEet8AbM1bbYdv9Zc2qPNThHg/P8gSOQGYack2YteKjOZ0Mt/MAs7po+SER4lfiWHTjeMQkQq/T9iy4neHxXwbwBo5ukXaasmrHKcfMQ34xuAs6YuFW6z3mrvae8u8mmlixgMCsoLsh0gWWauURIBqgfuhk=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=hXy6SQQu; arc=none smtp.client-ip=209.85.128.171
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com
Received: by mail-yw1-f171.google.com with SMTP id 00721157ae682-70e3ac940ecso72027b3.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 08:48:46 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=google.com; s=20230601; t=1748447326; x=1749052126; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=qJhBrTcV/2KTHPEGx8A5eIEZm9bF8mIMQSTTxnrKh3w=;
b=hXy6SQQumd1hR4Cxd/fcVSFX4ZnarGLP7uHEpYqyvSPteonbXsnrjc1+pLD20UYR3b
sw/lDk8cdH9JOfHmPMLmLPnXi31u+TJK1cKirGWbG96no6Aj5EgHVpDXju1ep5UM3rkW
ESX6oZBgV4Ai1C4apsx0LG7qiHUqG0MfFMWKusoYVjza7tpgkYTv2jNuoDE0QUP28TsX
PEqg/ym3/+fbH0RH+ljlim3nenW6LOpGtwekBKBuvZguluUojAdzEJ0vKtBIAMdZwobV
lpvv13JqRCd78j3rz9R4BbsFraLladzbT8QMqMIezqFs3OT9NWpfwTZRfKrmsDkLjBlS
53kA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748447326; x=1749052126;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=qJhBrTcV/2KTHPEGx8A5eIEZm9bF8mIMQSTTxnrKh3w=;
b=bwTIq+19dvZLzSri+/ThQTl2qCim/72PtfAC4TkZ8arXOmlyxC0fs9Fux6eh+O+br8
9w9533SYpWobH6QT+RrIW24AofWgikDeIx1tmOKXOIBKOAi2W+scqdTFhbCE43mzLBy4
Qfxa3jkLBK9OqCObl5XNPa7uA3mSVuykhLesOGwIleVIUFAtG0F3VZ3t9vXjnQgowhEb
TqwaC5PhfyGgvz0cjB3tbpRNJ0Ft6vg+jKsHv73Fu7LmAYdpsCRK78i7eoC5SrBzYI2W
7huJfR/c59fr66FwpdA+q0DjwkpeuE6giQ84wE2bbkjPzrSVmjOk5pngk0XSWyU+YHmy
Ya9Q==
X-Forwarded-Encrypted: i=1; AJvYcCX4buNunx5UjSCtJVokW435Km4rHuh2fBCRll0/GtYefJ2EndBsABodk6up0/1mk0k2LeFQj+jUQWvhjyU=@vger.kernel.org
X-Gm-Message-State: AOJu0Yx5UIa4zWTC3TsA+FSp9g8UD/hGlyjjNcEY9HBI6BYmyE20SBm7
uFxdYIAejVxtR6SqnhwBSOcCWxaZSLjnm9msX3PQdPDYKk9w/wC71rH8EBd+bZCD4hzteTNNUnU
R1LjRWQi39TrNbzzetwKItcxq+/lPz9isGpSojTFs
X-Gm-Gg: ASbGncs8QPq7DFhcnrBZJLvSkonEdxnUpstOnP8IOvLnKohPS+H9lFHIsfvngsqiHJ0
ii8kqiS3siBxs/vEjX4bdP/fu9td0xDgbMLWaU081umiWRiJGZ4V7G+CdLDhjxBXjNuoORVJZMt
QtCaJHLImyvoxeu6RhskV+G5wtLL7En2M6eS6VSaPCvFHUIcFAXQRye8OBJWogYzPKNkCrqew8E
nW/dg==
X-Google-Smtp-Source: AGHT+IELfFCth5Pbkc2q+fs3hGfuRfgdVh0Gdule7jkxxm4LWUKEs85HrAmHhTzH2guxXlvKX1XFjzs03oe3LxVeaz0=
X-Received: by 2002:a05:690c:c02:b0:6fb:9280:5bf4 with SMTP id
00721157ae682-70e2da69ba1mr219329397b3.30.1748447325426; Wed, 28 May 2025
08:48:45 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250109204929.1106563-1-jthoughton@xxxxxxxxxx> <aBqlkz1bqhu-9toV@xxxxxxxxxx>
In-Reply-To: <aBqlkz1bqhu-9toV@xxxxxxxxxx>
From: James Houghton <jthoughton@xxxxxxxxxx>
Date: Wed, 28 May 2025 11:48:09 -0400
X-Gm-Features: AX0GCFuLPsZ5TxH5z7efpKpwgvPpjgQZqJBp0wjKrKAAM8LNrge9ZlG7omP9Ut0
Message-ID: <CADrL8HXjLjVyFiFee9Q58TQ9zBfXiO+VG=25Rw4UD+fbDmxQFg@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v2 00/13] KVM: Introduce KVM Userfault
To: Sean Christopherson <seanjc@xxxxxxxxxx>
Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx>, Jonathan Corbet <corbet@xxxxxxx>, Marc Zyngier <maz@xxxxxxxxxx>,
Oliver Upton <oliver.upton@xxxxxxxxx>, Yan Zhao <yan.y.zhao@xxxxxxxxx>,
Nikita Kalyazin <kalyazin@xxxxxxxxxx>, Anish Moorthy <amoorthy@xxxxxxxxxx>,
Peter Gonda <pgonda@xxxxxxxxxx>, Peter Xu <peterx@xxxxxxxxxx>,
David Matlack <dmatlack@xxxxxxxxxx>, wei.w.wang@xxxxxxxxx, kvm@xxxxxxxxxxxxxxx,
linux-doc@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, kvmarm@xxxxxxxxxxxxxxx,
Jiaqi Yan <jiaqiyan@xxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-11.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 6, 2025 at 8:13=E2=80=AFPM Sean Christopherson <seanjc@google.c=
om> wrote:
>
> On Thu, Jan 09, 2025, James Houghton wrote:
> > KVM: Add KVM_MEM_USERFAULT memslot flag and bitmap
> > KVM: Add KVM_MEMORY_EXIT_FLAG_USERFAULT
> > KVM: Allow late setting of KVM_MEM_USERFAULT on guest_memfd memslot
> > KVM: Advertise KVM_CAP_USERFAULT in KVM_CHECK_EXTENSION
> > KVM: x86/mmu: Add support for KVM_MEM_USERFAULT
> > KVM: arm64: Add support for KVM_MEM_USERFAULT
> > KVM: selftests: Fix vm_mem_region_set_flags docstring
> > KVM: selftests: Fix prefault_mem logic
> > KVM: selftests: Add va_start/end into uffd_desc
> > KVM: selftests: Add KVM Userfault mode to demand_paging_test
> > KVM: selftests: Inform set_memory_region_test of KVM_MEM_USERFAULT
> > KVM: selftests: Add KVM_MEM_USERFAULT + guest_memfd toggle tests
> > KVM: Documentation: Add KVM_CAP_USERFAULT and KVM_MEM_USERFAULT
> > details
> >
> > Documentation/virt/kvm/api.rst | 33 +++-
> > arch/arm64/kvm/Kconfig | 1 +
> > arch/arm64/kvm/mmu.c | 26 +++-
> > arch/x86/kvm/Kconfig | 1 +
> > arch/x86/kvm/mmu/mmu.c | 27 +++-
> > arch/x86/kvm/mmu/mmu_internal.h | 20 ++-
> > arch/x86/kvm/x86.c | 36 +++--
> > include/linux/kvm_host.h | 19 ++-
> > include/uapi/linux/kvm.h | 6 +-
> > .../selftests/kvm/demand_paging_test.c | 145 ++++++++++++++++--
> > .../testing/selftests/kvm/include/kvm_util.h | 5 +
> > .../selftests/kvm/include/userfaultfd_util.h | 2 +
> > tools/testing/selftests/kvm/lib/kvm_util.c | 42 ++++-
> > .../selftests/kvm/lib/userfaultfd_util.c | 2 +
> > .../selftests/kvm/set_memory_region_test.c | 33 ++++
> > virt/kvm/Kconfig | 3 +
> > virt/kvm/kvm_main.c | 54 ++++++-
> > 17 files changed, 419 insertions(+), 36 deletions(-)
>
> I didn't look at the selftests changes, but nothing in this series scares=
me. We
> bikeshedded most of this death this in the "exit on missing" series, so f=
or me at
> least, the only real question is whether or not we want to add the uAPI. =
AFAIK,
> this is best proposal for post-copy guest_memfd support (and not just bec=
ause it's
> the only proposal :-D).
The only thing that I want to call out again is that this UAPI works
great for when we are going from userfault --> !userfault. That is, it
works well for postcopy (both for guest_memfd and for standard
memslots where userfaultfd scalability is a concern).
But there is another use case worth bringing up: unmapping pages that
the VMM is emulating as poisoned.
Normally this can be handled by mm (e.g. with UFFDIO_POISON), but for
4K poison within a HugeTLB-backed memslot (if the HugeTLB page remains
mapped in userspace), KVM Userfault is the only option (if we don't
want to punch holes in memslots). This leaves us with three problems:
1. If using KVM Userfault to emulate poison, we are stuck with small
pages in stage 2 for the entire memslot.
2. We must unmap everything when toggling on KVM Userfault just to
unmap a single page.
3. If KVM Userfault is already enabled, we have no choice but to
toggle KVM Userfault off and on again to unmap the newly poisoned
pages (i.e., there is no ioctl to scan the bitmap and unmap
newly-userfault pages).
All of these are non-issues if we emulate poison by removing memslots,
and I think that's possible. But if that proves too slow, we'd need to
be a little bit more clever with hugepage recovery and with unmapping
newly-userfault pages, both of which I think can be solved by adding
some kind of bitmap re-scan ioctl. We can do that later if the need
arises.
> So... yes?
Thanks Sean!
> Attached are a variation on the series using the common "struct kvm_page_=
fault"
> idea. The documentation change could be squashed with the final enableme=
nt patch.
>
> Compile tested only. I would not be the least bit surprised if I complet=
ely
> butchered something.
Looks good! The new selftests work just fine.
Return-Path: <linux-kernel+bounces-665751-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1A79B41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:49:20 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 032651C00701
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:49:33 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 8D21E28C5DC;
Wed, 28 May 2025 15:49:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="UkB/QMIv"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id C1FF028A415;
Wed, 28 May 2025 15:49:12 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447352; cv=none; b=FSntAryQeb9Hj/gAg/eHE1QanQlY6ojhw7TEU0qINta+8i8fPELv9s2GpSpimeeKOrm8ZbB3+SJ0VgrO7G6Z91k0/FuZgN8wJ7NCucZjshmV5D/EFhxMGnrUMX6z5AB+9XmdwObppRqo1x9X0VUkbBOeydIgrwOnm4UinFsMYPY=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447352; c=relaxed/simple;
bh=aJ2WMLCSX44iSStAIMvDDspDN9X8UmDN8ucWqh9qNTY=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=nw5GNmploN/yvOOitb13B9bGv3aq36S+LOqrkiy2wDswkqU3ulvDZkb/4cTJn6vsAb3Dn5GwXJucmiGK3Lb8ObPbbemkE2xNf+mcJo8U3OrvG8vjIJ5UUxpFur2l0d/o05BBaYYs6FvY1YAFQfjHJm7JbZBrijmDdtp77Vzwb6k=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=UkB/QMIv; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 76E65C4CEE3;
Wed, 28 May 2025 15:49:09 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748447352;
bh=aJ2WMLCSX44iSStAIMvDDspDN9X8UmDN8ucWqh9qNTY=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=UkB/QMIvCRG8lhyTHK4ZClCcPcCOR6kEHf5wFQNBU6hJOGSgUvDPGLtf+EGP8KbII
3o3rUT7WyQaPv6DfnJYq4U8sVPFaM6ghiMyttbOd9gLmK0TofcmDhTQNV+XSHD5vdx
GiXyH4uXXTaZdJD/44uHqlHVeGaUU8UTl5iOdS3HstyLslqDx2UV2gm0rxG5fD3y3D
R2MVm9e01uI+s82RF6OG+sloU2pENCEAD7zhXKvo/jHy6VJEC8hAU5kkvSJqe2hZps
ZOp/00ejMeb3KK/FECAtiu1Bl+CPvO3Vbduvow6HWIGovD3zx/yC7cEl9PskvQYhx/
2n4QUWBCx6m1A==
Date: Wed, 28 May 2025 16:49:06 +0100
From: Simon Horman <horms@xxxxxxxxxx>
To: Yuyang Huang <yuyanghuang@xxxxxxxxxx>
Cc: "David S. Miller" <davem@xxxxxxxxxxxxx>,
Eric Dumazet <edumazet@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Shuah Khan <shuah@xxxxxxxxxx>, netdev@xxxxxxxxxxxxxxx,
linux-kselftest@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
Maciej =?utf-8?Q?=C5=BBenczykowski?= <maze@xxxxxxxxxx>,
Lorenzo Colitti <lorenzo@xxxxxxxxxx>
Subject: Re: [PATCH net-next] selftest: Add selftest for multicast address
notifications
Message-ID: <20250528154906.GD1484967@xxxxxxxxxxxxxxxx>
References: <20250527091855.340837-1-yuyanghuang@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20250527091855.340837-1-yuyanghuang@xxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 06:18:55PM +0900, Yuyang Huang wrote:
> This commit adds a new kernel selftest to verify RTNLGRP_IPV4_MCADDR
> and RTNLGRP_IPV6_MCADDR notifications. The test works by adding and
> removing a dummy interface and then confirming that the system
> correctly receives join and removal notifications for the 224.0.0.1
> and ff02::1 multicast addresses.
>
> The test relies on the iproute2 version to be 6.13+.
>
> Tested by the following command:
> $ vng -v --user root --cpus 16 -- \
> make -C tools/testing/selftests TARGETS=net TEST_PROGS=rtnetlink.sh \
> TEST_GEN_PROGS="" run_tests
>
> Cc: Maciej Żenczykowski <maze@xxxxxxxxxx>
> Cc: Lorenzo Colitti <lorenzo@xxxxxxxxxx>
> Signed-off-by: Yuyang Huang <yuyanghuang@xxxxxxxxxx>
...
> +kci_test_mcast_addr_notification()
> +{
> + local tmpfile
> + local monitor_pid
> + local match_result
> +
> + tmpfile=$(mktemp)
> +
> + ip monitor maddr > $tmpfile &
> + monitor_pid=$!
Hi Yuyang Huang,
Other tests in this file seem to warn if the ip command is too old
to support the test. Perhaps we can achieve that here something like this
(completely untested!):
if [ ! -e "/proc/$monitor_pid" ]; then
end_test "SKIP: mcast addr notification: iproute2 too old"
rm $tmpfile
return $ksft_skip
fi
> + sleep 1
> +
> + run_cmd ip link add name test-dummy1 type dummy
> + run_cmd ip link set test-dummy1 up
> + run_cmd ip link del dev test-dummy1
> + sleep 1
> +
> + match_result=$(grep -cE "test-dummy1.*(224.0.0.1|ff02::1)" $tmpfile)
> +
> + kill $monitor_pid
> + rm $tmpfile
> + # There should be 4 line matches as follows.
> + # 13: test-dummy1Â Â inet6 mcast ff02::1 scope globalÂ
> + # 13: test-dummy1Â Â inet mcast 224.0.0.1 scope globalÂ
> + # Deleted 13: test-dummy1Â Â inet mcast 224.0.0.1 scope globalÂ
> + # Deleted 13: test-dummy1Â Â inet6 mcast ff02::1 scope globalÂ
> + if [ $match_result -ne 4 ];then
> + end_test "FAIL: mcast addr notification"
> + return 1
> + fi
> + end_test "PASS: mcast addr notification"
> +}
> +
...
## Form letter - net-next-closed
The merge window for v6.16 has begun and therefore net-next is closed
for new drivers, features, code refactoring and optimizations. We are
currently accepting bug fixes only.
Please repost when net-next reopens after June 8th.
RFC patches sent for review only are obviously welcome at any time.
pw-bot: deffer
Return-Path: <linux-kernel+bounces-665752-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1B9E641E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:51:03 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 407E0A2355C
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:50:42 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id A656428C2C9;
Wed, 28 May 2025 15:50:56 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="InY11afn"
Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11013022.outbound.protection.outlook.com [52.101.72.22])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id D0A6A1E8323;
Wed, 28 May 2025 15:50:53 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.22
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447455; cv=fail; b=sLwbRLgR71RaSQFQZDLSwro1ds3gXVEDGNjZSSqVfWbHQ1YAd41+ik1se6vh/uVfXejDyRyBC8qAnn/+jNohZtkAU01/RJ9PAYWrIMwfL1jOi4DBPTrNZ6SGVzI3cnlhL4To2sPN97J2u6sXmcVXsmQ/mFn69REfmj4LYnnJkOA=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447455; c=relaxed/simple;
bh=7ml1oZdkVgSFyGugHPI5otBEPXxRwkAbRqPa7awbPSA=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=MJmpyKh7WnYli94xdYZOiVSmBFg60S/0qxb6lNlPWGOooM5oM/nYLfvtEOSOG0EztFVVr3pjx1VNNvBPFlmMBMVYcvxBkYQVpxUeyl3u70UhUIFpsw2uu3loi/U5xXIUOaJ2tVeBM85ffBsNNw7+QR4sUKd0Po7tkuvWhMYlFLw=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=InY11afn; arc=fail smtp.client-ip=52.101.72.22
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=NbZwOfaHqsLz3yOyrk+KryIAtyul/YsVkpxX2Q5bNqb11Kbq0wEZOQEdTcVmOOApZxEQcyOFl4Pw3zQgP3YE5Iml5i8TIBHl4yJPfVmTfyt7hQ+xOADB3A+MQITKAnCctSpNSZju+wVWp6wFSEdCsvlGMg9jobepvKkCsRZMiNb1PyC9hbEGn+Ev32rN2eaGEGc3O9wWy+9e+B84C8n9jCtIWXa2TS7l7/YuI1kKNLgnDViSjmjDdAr0Lcw5sunROZTcTtJc17jesW4voYSdtCPfxmn/I6Snty0+xfymQkaza8zxglaVPNCSnShbfPzd2MkyKzFBwBvnQWMvUL8L4Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=kYQtwrCw+MX/gECF32P1RLrNEcJi3TazTt9akbUxPQM=;
b=VVczaZStVsrUmg3lOL9HvR5wbqDYSAOtA4pCbOX1Hf3BM4KXysxW+zyXQVWH32McGdi5XSciks4wyraEiEvpXCkXtGazzRHg/RfvQ47/qxmri1ZfjoooFA8SJ/zSVEQfdyoc8ukgW0rdh8rbz0+ZsWQ9ACu4oLnbPcI2JyKA+eqI1zp5YnN5+6+TLGL/EdNBBS2ybTgEZcHwP6X8uq8/RwXvNl0tguTi3n0GDxYbBPWvlXGMhFR7uujYHCIcCpQHAzt24+kIHSnDv6+k/xd0jFWYUaKGwjbRKq08KFuMTRJhMT907wY9sQKpvnTKadbV9gC1q7tgT0he30BTkjLcaA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=kYQtwrCw+MX/gECF32P1RLrNEcJi3TazTt9akbUxPQM=;
b=InY11afnM2XTp+AaY6cPHy8cwUI0HPMDIeeWOAxTxnfS1geHuWUxKRs6O69MKecBGMsJpIm2fRroqpx82xb7STo92K+eWOIqc1r66RIRjsuARa80FPXbqDuY+nx2ZsX5ahSGAkPNQHh5stTflIZ+vg8MqLa/7NP0++NNJClfW9Gn7e3uoJGzewzMPKbSo4rr1SlO5VgWfe3NDbta5h7IDMEooGCpEtUVQI2q4x+ljipUBLIyAQWoyPUC/VLNLMZ80J3ZQSNlBer9Yug41gSL5+Oj7gdEEkBus+Fd667AgiPFyqS1/OfgE5slAkpS9GnROaLXk4qKuW+/ygY0llOd4A==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by PAXPR04MB8491.eurprd04.prod.outlook.com (2603:10a6:102:1df::8) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8722.31; Wed, 28 May
2025 15:50:51 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
15:50:51 +0000
Date: Wed, 28 May 2025 11:50:42 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: Conor Dooley <conor@xxxxxxxxxx>
Cc: Vinod Koul <vkoul@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>, Shawn Guo <shawnguo@xxxxxxxxxx>,
Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>,
Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>,
Fabio Estevam <festevam@xxxxxxxxx>, Marek Vasut <marex@xxxxxxx>,
"open list:DMA GENERIC OFFLOAD ENGINE SUBSYSTEM" <dmaengine@xxxxxxxxxxxxxxx>,
"open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" <devicetree@xxxxxxxxxxxxxxx>,
"open list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" <imx@xxxxxxxxxxxxxxx>,
"moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" <linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>,
open list <linux-kernel@xxxxxxxxxxxxxxx>
Subject: Re: [PATCH 1/1] dt-bindings: dma: fsl-mxs-dma: allow interrupt-names
for fsl,imx23-dma-apbx
Message-ID: <aDcw0sgN1ZX0kCCZ@lizhi-Precision-Tower-5810>
References: <20250523213252.582366-1-Frank.Li@xxxxxxx>
<20250526-plural-nifty-b43938d9f180@spud>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250526-plural-nifty-b43938d9f180@spud>
X-ClientProxiedBy: SJ0PR03CA0195.namprd03.prod.outlook.com
(2603:10b6:a03:2ef::20) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|PAXPR04MB8491:EE_
X-MS-Office365-Filtering-Correlation-Id: b1518a72-93dd-44e2-0920-08dd9dff6c01
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|376014|7416014|52116014|1800799024|366016|38350700014;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?hLqDDbKZMnP1R6GoZSHSgYB0zjvHP67t2UuQHxk9rydfb3os/CtdeBztBNj+?=
=?us-ascii?Q?AHuaJ/AuSnm1srZC2ANHlaWF1fK9vAtz6s1XFCkWMe4CKi15+x3q31XIxrji?=
=?us-ascii?Q?MIw1jBMCMCbop9CSNaHPCX3+dlXDDilEhGsUfHquc85ct1pZWg7kkT3il6lL?=
=?us-ascii?Q?wwk6OmxHtzEe0TfWvCIoZyZLuVWH9/VxZ5oA72GREtHG1KmemwHbOlZ2Dp9y?=
=?us-ascii?Q?2dpYKC9ym0XviuXDHxrRX1P3rx0s3XAGUaFnwosLoi7GTi+5631pfbiRtbti?=
=?us-ascii?Q?kiLGbtugoK78v9wXuh83SV0u8/rMJD1DP7VQKZPUQj8xBf7rE0rrr87QX70A?=
=?us-ascii?Q?JT+CAHbpv7t+E1BumG1M5nVEqBC2NpdYqX9oyNQWtW+1jV/tGJhiTGw+45Ls?=
=?us-ascii?Q?rvtVswU2iR0dp6feZf0wXsxU9MQDzuOBCXA2+hnE1O18slxvB0F6GUy8O+wI?=
=?us-ascii?Q?VH+ulOSO7OirsU5OKdikzXjHsHDogZYdxZGnMo5xUamP2GpVUQwQTfE+jYaw?=
=?us-ascii?Q?7DyyPzurU7H7L52H9m5RrrINhvQk8P/L5NCQYHmZWGNz7WSOcdUzziY9sQfn?=
=?us-ascii?Q?pTFEIpW9Op6nfWHVALrFwcQc13MLJ1/6ElRinquvWSh5BSQUWkQwk7GdG3+n?=
=?us-ascii?Q?an17Qr8P7kBYroBnG0AR+JA5fXx0bDbzt9ZnYnnu0LFa8h9ch5Zq5J/BeT1O?=
=?us-ascii?Q?9xsRbHtaUbYAAyWjKmVXeddRGPkAdevkQesUhdMPk+/72X/tZr5It8ITKA1X?=
=?us-ascii?Q?bzb9NKrZ4tDpn0DBrh47KrydKtxpSjSB36WCEWRaIrUcMFP+u4RCAegEmILr?=
=?us-ascii?Q?5zuFQIPQTeWaEOBrLbaalJdr48mUH2I+t0d8A9/AclxZBMZ7wx6JQ80lbtNT?=
=?us-ascii?Q?Oz0G/MM/R+K6eGAFCahMq+UT6Eiit/OzX4dAeZciFHMB4UugAF+mirAs3tvR?=
=?us-ascii?Q?acm7pHZAsLogSrtP+tO98PwiYrxPap7U6Pk+y27QyX41LbdWFYswJxdUhox8?=
=?us-ascii?Q?JxLNrnSTNhfhEW1YqQR6Y0l7IfLblG5SCiabvV/6nZUfbQLx6hwyyUpTNdu7?=
=?us-ascii?Q?w0ooOJEkaohPsK3nJA4OqGwUa06X76IUfqlajm3aRiIacNRsZrAMmbBApmlv?=
=?us-ascii?Q?855dpPaSJT+xIjg9e0Oe91W/QV9KPNEHxd9/0G3m6Cij7T1sLdDCFt2oOR65?=
=?us-ascii?Q?P5f3RpQ0G6ZmALrqbVEQb5IhyKjopVcCvmzUmXCtRrggYjkYhAYLX/PzJbcg?=
=?us-ascii?Q?na0FqH3LKRY7F9Q7hj7Due1AS16WEvRg9P7S+VYCvqETZiPS6P9392O5ENH1?=
=?us-ascii?Q?B4WW+57lJaHm9RYlS6bqASf1H82vANFzWZKUakrNmowpBDdqVqWl/s1csKvm?=
=?us-ascii?Q?Y+srn6A9S5+B9EyGreC6+KmJpYAAi1G9gYLa5HZ8aCwl3OqLgVeFqxUQUucH?=
=?us-ascii?Q?Q/7O1UhbjdNpW8V2EqI5iPsbcoL4YGQo0yWtVPoxsKcBvViWDohyjg=3D=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(52116014)(1800799024)(366016)(38350700014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?yR4UJvP/YdoXr9nsYn8EYnODIpK1jF+HqA270Zo1apV/mGxZS7wHSMYNonSX?=
=?us-ascii?Q?4M5ohTOdPONPiq2bQ4kfKrfwTbU07HMJ9vUpOGOBvQAoTkezxsA+mbmvP1ev?=
=?us-ascii?Q?R6hcNwzJZovsAHWZPFPOxXEcb2hZVIYi+uLATNFSwxAVXtA6rrn2s0Ituznu?=
=?us-ascii?Q?KjadOE7DmiDPeZmJ1K1777WLucRZOLRcpBStA8rq/klzyXHicdV2lJ5U8eSq?=
=?us-ascii?Q?ub5RtjEJwzJJGbZjUkjMXuqOxT8phunh8DM4le2BPqof4TAZV6/4GIH8sTEo?=
=?us-ascii?Q?S3GZOhF1E0wMFZCHXxIHvDHvIBL45AHHuFOV2fdqjtFuLTQ4TWmhrSfocc+q?=
=?us-ascii?Q?hgnykdVU/rRN9vahiiiik4a+orALdn//3cVdEAAi7l6Ty6v+jWZqfgRoaHuD?=
=?us-ascii?Q?6TobaU+8xDcXiiNr6l4XQJtpkjD8DF6nT5mKFzt6xKqXPY1OYxuRNYSJCITU?=
=?us-ascii?Q?oRdYkF3wgPQGKuwP9nZ45Sy/ox+Z5ufnZDRaWFjSKHHfzWxmnSes8yoISS4s?=
=?us-ascii?Q?ixPfR25AJXcTvwE37doYYaJ/7qB06NCTT3u559ImFKMq1QtELeUA3cVeehJz?=
=?us-ascii?Q?YaECAMrfxx1RfvIx4/9iNSKSjc8TAMTbsmEScPcXg8FXog0UIUl2rwBlCHDN?=
=?us-ascii?Q?h1p6CwlA2bWzM60KET0s+9arCyhxJ+eXnl6k2Fij82cc0Rdpj1yHOVwrIwlt?=
=?us-ascii?Q?fwShoGibYgB4t1nAVk21rIgrU/AXUYySE954veq8ocUKB0yj/FXwDhLVg+oi?=
=?us-ascii?Q?/dtEcWllG+3pK/jFPIGsfbwgUkBQJ0uj6+zP3Lkeb6U+fJG6Huvj7evHe0Cr?=
=?us-ascii?Q?KqVcAKW4NjtljcrKOG3soGdCLOnyBqcaaEAnRnZOQz5VPUAqUi2JZDamqojK?=
=?us-ascii?Q?ycNSevXHuZcIPGaoHbazMyRBeINyCvVgeAagUA8XA+g8BHC+wBzG/Koz2oQx?=
=?us-ascii?Q?YA83NVjh8dorWNwmsP4AD+Y992AO8wAzceGs69G97BkH2LXIQVtuOq2iiqsm?=
=?us-ascii?Q?KcbBRLgcH3h4dA2ri2EfBO5/SsRMp4yKqhLplNwwlToy4F8mSbavjxc3VHww?=
=?us-ascii?Q?fCc5BhBtozIJys9NleVVwO53IUV2kLdjXGYwsbMwc9YrIxlRLlY5YoiM9Uvk?=
=?us-ascii?Q?fhH4l2xeqqVLWnsxxRrH2cnyLp6YlhPvWHPlFIftDKzlDJyRMsc1Ko28uWee?=
=?us-ascii?Q?Xn3QXPXykRScvHlmOS3u7hONa9v514iIXxITsuvUb84+pRm9zM2a6fsFsDi8?=
=?us-ascii?Q?fnpqPDjRLr/aiQerAv/FlkxodxMimm9ZJe7fsR280/h2n0EsRatdpzH4GcM2?=
=?us-ascii?Q?h8EQSpDX80m5O7CqaHbWbvwhEBMyDLNCBibOEsPA6FA758+SItOHT4gC8UTG?=
=?us-ascii?Q?337SPGXjxcXVlLnBHu1c2LkCxdhUywnV/FSpKO60n8569OA683NkZjvg3fsM?=
=?us-ascii?Q?BT1qZW6DN15a+V8sPs6mrN0SmXgapQ4TyLVi8x08Q/bIcPDJXlSpuL6T66UO?=
=?us-ascii?Q?ipRkamccEOfN4JJXFvLypdFBv2QoN3ViBcGQkRuy9j1OGCMapAZsHXDW/fuw?=
=?us-ascii?Q?ZEyitFL4SEnCP96oG/U=3D?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: b1518a72-93dd-44e2-0920-08dd9dff6c01
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:50:51.2980
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: y/Co4ZJdfTb6Vkzr9S0V5pGs2jJ9lfT1PUZvM8KP/FEMoupHvbQRwYaZL1m35HKHWOLhFa0SXkLWfrcSdoi/iA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8491
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Mon, May 26, 2025 at 04:28:07PM +0100, Conor Dooley wrote:
> On Fri, May 23, 2025 at 05:32:52PM -0400, Frank Li wrote:
> > Allow interrupt-names for fsl,imx23-dma-apbx and keep the same restriction
> > for others.
>
> The content of the patch seems okay, but why are you doing this? What is
> the value on this particular platform but not the others?
Actually it is not used in dma driver, i.MX23 is quite old chips (over 10year).
Just to match existed dts to reduce warnings.
Frank
>
> >
> > Signed-off-by: Frank Li <Frank.Li@xxxxxxx>
> > ---
> > .../devicetree/bindings/dma/fsl,mxs-dma.yaml | 33 +++++++++++++++++++
> > 1 file changed, 33 insertions(+)
> >
> > diff --git a/Documentation/devicetree/bindings/dma/fsl,mxs-dma.yaml b/Documentation/devicetree/bindings/dma/fsl,mxs-dma.yaml
> > index 75a7d9556699c..9102b615dbd61 100644
> > --- a/Documentation/devicetree/bindings/dma/fsl,mxs-dma.yaml
> > +++ b/Documentation/devicetree/bindings/dma/fsl,mxs-dma.yaml
> > @@ -23,6 +23,35 @@ allOf:
> > properties:
> > power-domains: false
> >
> > + - if:
> > + properties:
> > + compatible:
> > + contains:
> > + const: fsl,imx23-dma-apbx
> > + then:
> > + properties:
> > + interrupt-names:
> > + items:
> > + - const: audio-adc
> > + - const: audio-dac
> > + - const: spdif-tx
> > + - const: i2c
> > + - const: saif0
> > + - const: empty0
> > + - const: auart0-rx
> > + - const: auart0-tx
> > + - const: auart1-rx
> > + - const: auart1-tx
> > + - const: saif1
> > + - const: empty1
> > + - const: empty2
> > + - const: empty3
> > + - const: empty4
> > + - const: empty5
> > + else:
> > + properties:
> > + interrupt-names: false
> > +
> > properties:
> > compatible:
> > oneOf:
> > @@ -54,6 +83,10 @@ properties:
> > minItems: 4
> > maxItems: 16
> >
> > + interrupt-names:
> > + minItems: 4
> > + maxItems: 16
> > +
> > "#dma-cells":
> > const: 1
> >
> > --
> > 2.34.1
> >
Return-Path: <linux-kernel+bounces-665753-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E624341E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:51:33 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 5DCEA3A273E
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:51:11 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C212F28C5CE;
Wed, 28 May 2025 15:51:24 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="rpp1gKMI";
dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="RmbeoExa"
Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id E27B21CF96;
Wed, 28 May 2025 15:51:20 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447483; cv=fail; b=axqNkqHSBKndOhrYdgq98E9SS+TNDvpam03ogA6idR68JzA1sMhilLJBI/WeZTYkJXpWv9iw0eivc2Y9YwEqXwfIsqYqOEqfR87gTCoYsjKyrl/3xVi0B0tPuztWJTXfE+Fc52tbArJydjcW6z93stbby5OoaooBD0Fj/LB6EKM=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447483; c=relaxed/simple;
bh=xabMDPjG8Y08S6Ph/P3TC/CWKv7pjsjv+/sQylIeZSo=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=Pb8Azd464rArAOUHbQL0asfNirrsa4CKsRmtTn4TwUD9Usuqmrxr2Az2H4uIfzWn1AsrIritnW1CxXZJvb01gDrAcAeydDkjiF1DBwRiWWydjOIw11LSWL61HjbE+ZpPBkkD/vNGX1mxFI+VycjFXo/qS17EK0cfyc0OBJDbLzM=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=rpp1gKMI; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=RmbeoExa; arc=fail smtp.client-ip=205.220.165.32
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com
Received: from pps.filterd (m0246627.ppops.net [127.0.0.1])
by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SFoC56024014;
Wed, 28 May 2025 15:51:01 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc
:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to; s=corp-2025-04-25; bh=l97piMWMNHok4IXASz
7nrzhbnl2ad5mUccfm+cEd330=; b=rpp1gKMI2Wl54WySLWYQaWqn61d4HXKN3q
lmGBg5KaJyOReGAJuKPijcn/wtY46A5NfwDTnzPoHIlHG2bnBzUZQ2lpZLTGy7QP
QvQvSk+Sg4JJqAAWTU5vMNKV50+fbnEYC4bWg8Nzk6G/k+yBILOZkw+hemsxFTkm
t91e4LAE1EQqc/dHkRZN6ANQzCd/uOwVSPRVHFsWI0fyd1mmUqvM/icGQmdnuW28
gCyyZPVR5xbrP99H/llm3JlRYaX+zgRSmIoZZIEBBY3kQS1pqe0UFIe04bfqIbM8
6KMUGKKCWf2H7zegUxDhrxveVggfzKfRPaRG9z4kxZnOtilxWZjQ==
Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27])
by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 46v0ykxd3t-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Wed, 28 May 2025 15:51:01 +0000 (GMT)
Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1])
by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 54SFZ9H5021137;
Wed, 28 May 2025 15:50:58 GMT
Received: from cy3pr05cu001.outbound.protection.outlook.com (mail-westcentralusazon11013007.outbound.protection.outlook.com [40.93.201.7])
by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 46u4jh323c-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Wed, 28 May 2025 15:50:58 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=ueuCO4WjhY0/39iGolFnPdSOEgEZqSHaVWM4KTd2LFr4m0Hce1D6cTg7T1k/G5Pfp6Xwm/jI1JCxxeeauGwtYAbtIgkSOA4H5drRjs/l7pWoQ6FqHshS1kPGVBrxRfqT6FQmYtONcDvy0VLl5+BKeM1o6S4OFw5/Z7kZO95v5Yu+TQkTPZDzsqfHJ0cWgYMRyKjtmVhp83cmI1zCPbtBdQkyuCgjc2z8f2MtjcfgEDnxgeukqMyOAuSlV1rfSluhGvEtMsGGJGEcFkvsRJxkNcz4Za7/DL1B/zAvO3axsGJD5wkgAtT9HoFLqxyYIEtQy4xCP6f1lZYUWKM+OIF8Jw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=l97piMWMNHok4IXASz7nrzhbnl2ad5mUccfm+cEd330=;
b=xQdpPCPk3nyU7A/Koao/4i19vXKn974CP1SGP+f62mF1AUvHImlX0A2zD9SHbb6z178t/LemxCvQB5SxZNf6+iyXzAWYRO2BVrKisymPL5aN4ZgiQGpM7FnF3KJZzRD0wHB9oRjsLugV/rmgaj4/H34nlD/q2v21bXD9RIGXBVCYYbMc3Vja3cDZSBfSDnu75a9elz6DARfOATKoEWMH1oRAhWCax5KJEnRaromg3l3Ywa/VEsb+H92Nit8Z4Ur/WY48uSMK1/KxwyASDQFpXoKL/THFNCdkMv452j+7ksvi8sJt2DMv3UQ2EgCMtgsbN5xaPEddTscY1OnzmcgdeA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com;
dkim=pass header.d=oracle.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=l97piMWMNHok4IXASz7nrzhbnl2ad5mUccfm+cEd330=;
b=RmbeoExah0lIIWKdvEC1mi3p8wIzcrJ1NVVyXNhqKc7YvB4tm8TxLUsYnM+a3R7WCEfmeqsi2kiY1+HM6peebam0OEK4H/5TzyF/hW54SBjANA012808m5w45KlsMnabqduGrq9E7FmlZNhvzJo0nTt1IOi8hj8yThGwgafBmws=
Received: from DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16)
by SJ0PR10MB4719.namprd10.prod.outlook.com (2603:10b6:a03:2d1::22) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8746.35; Wed, 28 May
2025 15:50:21 +0000
Received: from DM4PR10MB8218.namprd10.prod.outlook.com
([fe80::2650:55cf:2816:5f2]) by DM4PR10MB8218.namprd10.prod.outlook.com
([fe80::2650:55cf:2816:5f2%5]) with mapi id 15.20.8746.030; Wed, 28 May 2025
15:50:21 +0000
Date: Wed, 28 May 2025 16:50:18 +0100
From: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>
To: xu.xin16@xxxxxxxxxx
Cc: akpm@xxxxxxxxxxxxxxxxxxxx, viro@xxxxxxxxxxxxxxxxxx, brauner@xxxxxxxxxx,
jack@xxxxxxx, Liam.Howlett@xxxxxxxxxx, vbabka@xxxxxxx,
jannh@xxxxxxxxxx, pfalcato@xxxxxxx, david@xxxxxxxxxx,
chengming.zhou@xxxxxxxxx, linux-mm@xxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-fsdevel@xxxxxxxxxxxxxxx,
shr@xxxxxxxxxxxx, wang.yaxin@xxxxxxxxxx, yang.yang29@xxxxxxxxxx
Subject: Re: [PATCH v2 3/4] mm: prevent KSM from completely breaking VMA
merging
Message-ID: <2ed7c9c0-30fa-4ec8-bce4-d7ef9d63b4d5@lucifer.local>
References: <6057647abfceb672fa932ad7fb1b5b69bdab0fc7.1747844463.git.lorenzo.stoakes@xxxxxxxxxx>
<20250528233832445zSfRddcejioi-qwhWuUBJ@xxxxxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528233832445zSfRddcejioi-qwhWuUBJ@xxxxxxxxxx>
X-ClientProxiedBy: GV3PEPF00007A91.SWEP280.PROD.OUTLOOK.COM
(2603:10a6:158:401::60e) To DM4PR10MB8218.namprd10.prod.outlook.com
(2603:10b6:8:1cc::16)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: DM4PR10MB8218:EE_|SJ0PR10MB4719:EE_
X-MS-Office365-Filtering-Correlation-Id: c680755b-4fe9-41ae-754f-08dd9dff5a2f
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|1800799024|366016|7416014|376014|7053199007;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?RXid0uXUlE9gpSi1CJVpfFghEf6HS+KKMlsg8p/ZuM52tatJvVacES1tnfh9?=
=?us-ascii?Q?IBChMj4W0y5E9bmT3R3UcrFTqZLXDm/+vD38FQGZQtz43mjp2j2vGbj/l7Cd?=
=?us-ascii?Q?VhOKan86AkKAfTAtw/W/tIlLco8Rbe5cpFkB7Bt5j2S5TxEojcousXp3RbpN?=
=?us-ascii?Q?UJNbJuRwkc3TrvCDlLFX81292mYHghffNRilwIYdqWCUf1pItm9pjCKctG+H?=
=?us-ascii?Q?xU+agLQFj8bWCs+UJq0iYCvKO6FomqGzMqgJqNUve5BC7dIiM3tfQFtNF4B8?=
=?us-ascii?Q?71sqpkOaYku7QC3DX93MoVArbk5y8BxUcfRlxh+uElbsQQ8aIHlJyUPP7r9x?=
=?us-ascii?Q?lAbdqKkRs9yJ5YlAbLFYYsbReG3/lHrAWUB05yacxT4v2MUEuzhBvGw6/y7q?=
=?us-ascii?Q?wVbFIxhPtMzwKAhwNUxuwqI/xy0ISILbQjwgId6CDONfoqF78rdQBtOgXTzt?=
=?us-ascii?Q?PyOWTNA1Ng16Muke3v+nGBdLk/DR2+ZgW4hn7v2gNc8KsxR15daBs9SNR7LJ?=
=?us-ascii?Q?Rc8XlrsJpZVLUnEDujd/S7zWOzqhQTsKUmh4pRjGs3viULdICMr/veLX3mfM?=
=?us-ascii?Q?8u59ASOQZN4NFUWWo6A99zP88DKkDiylqPTtBtSiJIpjpZetN6YNqwf88KBo?=
=?us-ascii?Q?9qHywh+v9uvdK/szbaASkPILnBuuajNAXpO/8mGqrWOPKUS7MOVA+d2ecZBl?=
=?us-ascii?Q?PmYDmRqW/QDGn3xhufMb+UAtTw0Q64TUExZT1pljijKZ13nmHQbCjFZ9mpEi?=
=?us-ascii?Q?AVNnJ07JFE6b2DzoS7a5cF0gqSzKwy66LF81erWvTwiZwF4Dgve4ofbRqIe+?=
=?us-ascii?Q?rtPmF7vpH0FlInMEYNmRGygkIJ09lSHf13n5cBjB8kj8RZqdTPLcFzb46lqY?=
=?us-ascii?Q?kkixKjBDfQWMr6B38GLKpY4ttNgcTwyIX0/GfBLHVbOxwuCbJNBCGsgbt7d1?=
=?us-ascii?Q?Np3mkXEB5yA73JkPp0itQZqNLUrgVHJK7KJ9U0TapiN5LTTHpvTbPS37sn36?=
=?us-ascii?Q?m7pH+ivj7AwSz51cMBn++dKo9FvI+e3xBbMgjTaWOYituXUy3SxBBHWxP8CQ?=
=?us-ascii?Q?/8uQo2kcNYh0KywMh8eb81VjeL09ZE/tvxSVC9Dm6Dm/op+enhooyuDXI61N?=
=?us-ascii?Q?lfOG2kS+Z4/vAMeG/AnMcR0UVjbZF/9uH+z4FDFEYSB/lM+wYICvZsEddZno?=
=?us-ascii?Q?U24UDvY31qKJced4P37DbxyKV7u9oX4fQ0qEg/jYsIMp4uEQH1vmgrvjXRqV?=
=?us-ascii?Q?JOiKSYH3Wf1G1zvUS90PTNfl2BNpHzX56dwlPQf+FBCRla3NanSqomEPq395?=
=?us-ascii?Q?Dy8RzOgONHMMgWMuI/ZobyMOzXwTTF7fhjqx6loAhROm2UQunbnryYBFKi1c?=
=?us-ascii?Q?09cKjJJYW0fLDk3opLu6bFX1amhby5EaNuffj3tf6ZGgjICmTSWfxXW9TwJ6?=
=?us-ascii?Q?K9cSjnanyys=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB8218.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(7416014)(376014)(7053199007);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?A2Mo0jgFoMo5DnFVSOFllUZp9/LgvKvMtS18wtCneNLBHHSHUS9u6sZmCbCc?=
=?us-ascii?Q?ConzfxTvoLcpfiwvOO6Qd23zwAZP3/G0oM1d9qR6afAlScJLj3zFviOM7ZGv?=
=?us-ascii?Q?QKbjwLWtbgIoUbUoji5oBu/v29lGeDQEYpJOe59qWlsIh9zxUSsi7ftpqeHJ?=
=?us-ascii?Q?/5JbijcJr3BZ7NsUtVbtL70XelvRAqBvxqo+BhUXPKIhY2kqVIhVUMxxbC9u?=
=?us-ascii?Q?a6cU4oQU5y/vSzySOnicWqs6z8JlR1Jv2FXLUUnmFgEcygzr7LXlIsGgcbKk?=
=?us-ascii?Q?IWlYV2rqCGJUkB9HvBND/Ou5257jYunuRh2qgVye5nfnB6nDpW9666lIOiI4?=
=?us-ascii?Q?hL+x+4CnERILdNTsWj98RC1VNXK4MXlpCiJhUMXWVvH+JN9Jr3JdVnaX/GZ6?=
=?us-ascii?Q?ABxcmcJPdWwCFzsnlsq40rc89A1DnrjpbBzyTk4MAsSOFNWVL+SiBphhIyWQ?=
=?us-ascii?Q?pEwpc5p3sAs/iXF95oAKKrV7tAwDjx6CUyzOWZ4KOXU3+bAdNFJJAy2fqTrF?=
=?us-ascii?Q?jPHbefVtUae4sz8s/HsQF9bb7vFW7qCQKDV38GBwYEcANF+iqh9M3Vh8xkw8?=
=?us-ascii?Q?puIhePSkNWwqOpiCiKum5heDBjEQ2n2Q041RfSv01oTVP+bR3Ihu3xUuAiwA?=
=?us-ascii?Q?BeokeLRruc5dgAoUTp+NcX4T8OWzBvSTKIgSs7B0HhfLO0vejgXZsbGBpRAa?=
=?us-ascii?Q?uSzAwkMvgvYJS6FZQUX0MpEq8cdMvFf4c1Hj+WsCTYsv+yU9daB3mb8IpNS3?=
=?us-ascii?Q?wHEfKiXujytNCDhFShsR0vNXCW9bPeLS8DwzXV1WTsf/YdEcNXhurRf21rNh?=
=?us-ascii?Q?dlkcJGI6qbadLn5wLg8fg8wexdr8f0uD5VFrLHXREg4PqpbXlBz79tdLmOTp?=
=?us-ascii?Q?ZxWI0+jp73B33+fgFE9s++1y0kIuD2XMa00GHX5EZoIFizNqShZ1+5DMrh7h?=
=?us-ascii?Q?0oefp5aKborMtS3GRG3C+2JtiBwFQKHOkxaN/pCwjWqMaHuBlhIXHdKEdtrK?=
=?us-ascii?Q?9eGPk1Kb+q4OC2XRmqBKcTlbUl63aC3h1NDjtCZt5lVQQvjUW5YAWJfFLfKM?=
=?us-ascii?Q?7S+afHYGPgBO1lFQ/TtVZ5Ocq9xeSZQOuW3nZkcC7vD0SnX/mTMVvwhTiOOM?=
=?us-ascii?Q?n+M165rxqHh0FVrMS0bdIC5QIGO1J3l7aNEXabJ4VFnZT/vPSDtuaGSEJHcX?=
=?us-ascii?Q?UoZG8tdEieIu0odEi0u/pwQWbdjt1G5iTymi1iTtaga82HBxtdmZdpMEbYOe?=
=?us-ascii?Q?6WXnqIvQyx5it/xkESOtzBTySqrUuDOXQknHKiuYRgdxx46x8yJB5n4KcR1i?=
=?us-ascii?Q?O0XMnDwKzJE4Y8Mw0OqpE8xiKNGUOwGPPB1IMCLviOq++rTjXGpRnjKh9kDa?=
=?us-ascii?Q?n0tbXubuSozaZq/bwEuxZde620JUu0ybEQQiF7IIjRcxTDi+Wcfhq/hjlEPw?=
=?us-ascii?Q?bPg9zaz7nnLB2nCUE013tJUxTQv+Ydt1nZk1IYMyNFR1AP95MUQOW+tR3oB2?=
=?us-ascii?Q?fa/zIdlwBjrZR9x96H6vobYali5XY4sL8Cyboi978i3tKHWhLUS6vXVMlmGM?=
=?us-ascii?Q?Nqt1ojVOdhmS1lztKAHC5jAVW1NHd133VDideXRfB0GeqzOX3Wq+/yYNDkXR?=
=?us-ascii?Q?fg=3D=3D?=
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0:
wvgukTehwtME0ZwUFhv5DvfLTFz5kdwI9ZmgXHhsATuS8svijerlJGcWqE9+tVRiJVLOBaPDtJ3bsDc+96CNWf7YHG6UKvpkRYAFRN8ERTG3+RdeBGfTtj8RbBKjLUL6O4LDZSr3T28q2e7P8zg1t1gfLmI8L5qSxx9/0LMn2IBArX/+CKGdRbIH/AfbbbVS4t2s0+oQYZKG33G2C2lNwaerjFmJrDeBmfhFVHnS1sjAR+MJ75p6Y0/skOI6wBCSHG6VgH5KOqkXDEhv6sElOMgwtmzI5FegMrU1eej9/GRnIczKYA327j21WRXJx3aVNqNYlY3yH029i+Ql+O/kU3zw0m9bM1+aG6D928j/DEBzOyCTGoMksYFojgXELoTmM80bZCW3CXokwaFfEds1Cxm8n9VsvQ4ortmm2PpvIRLNFVKqcb7t0Rjzu75VamfHfZVeWtkLww75Qg7v32hlcGfShZPFZ39T0F7bYWjL1lVVLQsZ2ZbZj7YFAUw03rH1n9ijuo/4omukc0zQLNfaNLw4us6b0zxglEC9y2MsYSF7QpzM88rg5dBUgSuhMPEjoxkMkRvsngDVpNUH2Re9JH1+8Yefm3tOVZceUdTUTaY=
X-OriginatorOrg: oracle.com
X-MS-Exchange-CrossTenant-Network-Message-Id: c680755b-4fe9-41ae-754f-08dd9dff5a2f
X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB8218.namprd10.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:50:21.2593
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 0a4zCADU/pWjVLny5QtbCLLCJEL+Nt9mHVB4i7+6kssfUbvLuVCKqGFRRyqnQKJWDL3ZKkrUzEnd89hycbWa8ltWPAdJmYcYTNFZZ1T8oeQ=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR10MB4719
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_08,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxscore=0 phishscore=0
adultscore=0 suspectscore=0 malwarescore=0 mlxlogscore=840 bulkscore=0
classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000
definitions=main-2505280137
X-Proofpoint-GUID: ialykXiGXSTyYTuf-alKgqes_p0AIh0V
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEzNyBTYWx0ZWRfX8UCJ3d/jqEtF bTWGuE/MD2JZAJUISyT3YRtu3OgGAPyQU9UPyDHu8fMlsCX9GlzHsUsJWQhxxH1E5XVwJsut0S3 sSd77ldFk1sWFrJ097Ebug8BaGniL/JZi6l1TaAAd9SNo+NpvZ7BogLKrdI66LT3gyLbe/4UNIV
FHibqGS4u9Wsidyr44KFTaKNFQHgstMN7a4Si1Kaf9ncRdQW3i4S0ykoD2abRPkk66jWqVvomOe c1/Lxp/kKJzBHga8ZhruK3P2V/BA718Li/MngHnilcltncPCoqTdAtUNIQZ5BIjbH9ZUDNIFoNh EL6D/+3dhHNjFr8iQrxv9BDf/EBzO65Uyb1F78oBt2KhGSfK5stl7nnNJbKIUHy4cnziJu4HA1G
2B9KWy0mmDF4as6LBhpgUSa9c2+p5p1gTNUCXpo4PGqf3z9dWFs3tzRSKMeF/jB86w0x7WAf
X-Proofpoint-ORIG-GUID: ialykXiGXSTyYTuf-alKgqes_p0AIh0V
X-Authority-Analysis: v=2.4 cv=N7MpF39B c=1 sm=1 tr=0 ts=683730e5 b=1 cx=c_pps a=qoll8+KPOyaMroiJ2sR5sw==:117 a=qoll8+KPOyaMroiJ2sR5sw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19
a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10 a=dt9VzEwgFbYA:10 a=GoEa3M9JfhUA:10 a=1RTuLK3dAAAA:8 a=Qss1jijty3bCHTHB3n4A:9 a=CjuIK1q_8ugA:10 a=kRpfLKi8w9umh8uBmg1i:22 cc=ntf awl=host:13207
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 11:38:32PM +0800, xu.xin16@xxxxxxxxxx wrote:
> > +static void update_ksm_flags(struct mmap_state *map)
> > +{
> > + map->flags = ksm_vma_flags(map->mm, map->file, map->flags);
> > +}
> > +
> > +/*
> > + * Are we guaranteed no driver can change state such as to preclude KSM merging?
> > + * If so, let's set the KSM mergeable flag early so we don't break VMA merging.
> > + *
> > + * This is applicable when PR_SET_MEMORY_MERGE has been set on the mm_struct via
> > + * prctl() causing newly mapped VMAs to have the KSM mergeable VMA flag set.
> > + *
> > + * If this is not the case, then we set the flag after considering mergeability,
> > + * which will prevent mergeability as, when PR_SET_MEMORY_MERGE is set, a new
> > + * VMA will not have the KSM mergeability VMA flag set, but all other VMAs will,
> > + * preventing any merge.
> > + */
> > +static bool can_set_ksm_flags_early(struct mmap_state *map)
> > +{
> > + struct file *file = map->file;
> > +
> > + /* Anonymous mappings have no driver which can change them. */
> > + if (!file)
> > + return true;
> > +
> > + /* shmem is safe. */
>
> Excuse me, why it's safe here? Does KSM support shmem?
Because shmem_mmap() doesn't do anything which would invalidate the KSM.
Yeah I think I misinterpreted actually - looks like shmem isn't supported
(otherwise VM_SHARED would be set rendering the VMA incompatible), _but_
as with all file-backed mappings, MAP_PRIVATE mappings _are_.
So this is still relevant :)
>
> > + if (shmem_file(file))
> > + return true;
> > +
> > + /*
> > + * If .mmap_prepare() is specified, then the driver will have already
> > + * manipulated state prior to updating KSM flags.
> > + */
>
> Recommend expanding the comments here with slightly more verbose explanations to improve
> code comprehension. Consider adding the following note (even though your commit log is
> already sufficiently clear. :)
> /*
> * If .mmap_prepare() is specified, then the driver will have already
> * manipulated state prior to updating KSM flags. So no need to worry
> * about mmap callbacks modifying vm_flags after the KSM flag has been
> * updated here, which could otherwise affect KSM eligibility.
> */
While this comment is really nice actually, I think we're probably ok with the
shorter version given the commit log goes into substantial detail.
>
>
> > + if (file->f_op->mmap_prepare)
> > + return true;
> > +
> > + return false;
> > +}
> > +
Return-Path: <linux-kernel+bounces-665754-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 8A60541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:53:12 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 3E5417B0AA2
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:51:49 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 1CFBC28C5CE;
Wed, 28 May 2025 15:53:02 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jeB7Tb2K"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4B05A286D6B;
Wed, 28 May 2025 15:52:59 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447580; cv=none; b=F0Q00WfpA4Y+qlpq86bELVnTA9ZiGp8z6SAkWldI9u51vpNDBga/X66HLzpJss/g8nCW7x+PHYCmcd3H13RoAb9cTFqn/jiBxAYMHuMvahPN3h1Ap/mnFcSoeBmTLQOpO5CvLOSrDM8ntsd01iWeI7yS1rwr5lISX6iiGO2CCjQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447580; c=relaxed/simple;
bh=1WLKBRalGfzJfxaCyqcFXALyy6cN8+DK6NxLhvzWGBY=;
h=Date:From:To:Cc:Subject:Message-ID:MIME-Version:Content-Type:
Content-Disposition; b=poV1s57foGRWOYLWtTfwQQD8G9gGUKRRxI2khLMo2x60gQl4Gn2ne3UQKk5xNQHJLo/DsuAxJiFhZgA6wsfwWDPYRx3wjuTfy3dCZXo7XD9mLBfoaeKnQSZw54bmvJWHVmroSc1aiWHsYovxkh+QOjN91UED2o7RgsoaVDKQYPY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jeB7Tb2K; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 73740C4CEE3;
Wed, 28 May 2025 15:52:59 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748447579;
bh=1WLKBRalGfzJfxaCyqcFXALyy6cN8+DK6NxLhvzWGBY=;
h=Date:From:To:Cc:Subject:From;
b=jeB7Tb2KLM+gBEQxR2Es2GiYUnwA5PM1MvTfcFBFxRqmJBSmkbhABhqfPKac5BlAu
B1eD+0fxlh3nSDHnE0xtw53iG2pY4w4GENaA23btdy+1sdauyaEpcFga6tjCmS08dH
PJiRUGP2z938yiWAOaBsQiCE55Rd566rCOWma0EIEqRie4GoXIR+N6jJ0nRyyZOY0v
aJPOoAbOy73B8tDDXV/q8uzZW4timd0EkxKo2o5Q3xBKyStyU05Dq3UDwgry3/Cvqh
6TU75TRnq6jDo+kp7wageHTOpmwUazDxhgYVexvUYyMLmmvSvBNMmtOaQPQ0P5PawP
g7Li7UczLKgmg==
Date: Wed, 28 May 2025 10:52:57 -0500
From: Rob Herring <robh@xxxxxxxxxx>
To: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
Cc: Saravana Kannan <saravanak@xxxxxxxxxx>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx,
devicetree@xxxxxxxxxxxxxxx
Subject: [GIT PULL] Devicetree updates for v6.16
Message-ID: <20250528155257.GA4154719-robh@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Linus,
Please pull DT updates for v6.16. There's a MAINTAINERS conflict in the
VT8500 entry with several trees, and a conflict with the tty tree (take
the tty tree change).
Rob
The following changes since commit 0af2f6be1b4281385b618cb86ad946eded089ac8:
Linux 6.15-rc1 (2025-04-06 13:11:33 -0700)
are available in the Git repository at:
ssh://git@xxxxxxxxxxxxxxxxxxx/pub/scm/linux/kernel/git/robh/linux.git tags/devicetree-for-6.16
for you to fetch changes up to 89ab97de44fec8eecedd1d327d418c5781303c05:
dt-bindings: timer: Add fsl,vf610-pit.yaml (2025-05-28 09:20:59 -0500)
----------------------------------------------------------------
Devicetree updates for v6.16:
DT Bindings:
- Convert all remaining interrupt-controller bindings to DT schema
- Convert Rockchip CDN-DP and Freescale TCON, M4IF, TigerP, LDB, PPC
PMC, imx-drm, and ftm-quaddec to DT schema
- Add bindings for fsl,vf610-pit, fsl,ls1021a-wdt, sgx,vz89te,
maxim,max30208, ti,lp8864, and fairphone,fp5-sndcard
- Add top-level constraints for renesas,vsp1 and renesas,fcp
- Add missing constraint in amlogic,pinctrl-a4 'group' nodes
- Adjust the allowed properties for dwc3-xilinx, sony,imx219,
pci-iommu, and renesas,dsi
- Add EcoNet vendor prefix
- Fix the reserved-memory.yaml in fsl,qman-fqd
- Drop obsolete numa.txt and cpu-topology.txt which are schemas in
dtschema now
- Drop Renesas RZ/N1S bindings
- Ensure Arm cpu nodes don't allow undocumented properties. Add all
the properties which are in use and undocumented. Drop the Mediatek
cpufreq binding which is not a binding, but just what DT properties
the driver uses.
- Add compatibles for Renesas RZ/G3E and RZ/V2N Mali Bifrost GPU
- Update documentation on defining child nodes with separate schemas
- Add bindings to PSCI MAINTAINERS entry
DT core:
- Add new functions to simplify driver handling of 'memory-region'
properties. Users to be added next cycle.
- Simplify of_dma_set_restricted_buffer() to use of_for_each_phandle()
- Add missing unlock on error in unittest_data_add()
----------------------------------------------------------------
Alexander Stein (1):
media: dt-bindings: sony,imx219: Allow props from video-interface-devices
Alexander Sverdlin (1):
dt-bindings: backlight: add TI LP8864/LP8866 LED-backlight drivers
Alexey Charkov (1):
dt-bindings: interrupt-controller: via,vt8500-intc: Convert to YAML
Caleb James DeLisle (1):
dt-bindings: vendor-prefixes: Add EcoNet
Chaoyi Chen (1):
dt-bindings: display: rockchip: Convert cdn-dp-rockchip.txt to yaml
Dan Carpenter (1):
of: unittest: Unlock on error in unittest_data_add()
Frank Li (8):
dt-bindings: counter: Convert ftm-quaddec.txt to yaml format
dt-bindings: interrupt-controller: Add missed fsl tzic controller
dt-bindings: display: imx: convert fsl-imx-drm.txt to yaml format
dt-bindings: display: imx: convert ldb.txt to yaml format
dt-bindings: fsl: convert m4if.txt and tigerp.txt to yaml format
dt-bindings: display: imx: convert fsl,tcon.txt to yaml format
dt-bindings: watchdog: fsl-imx-wdt: add compatible string fsl,ls1021a-wdt
dt-bindings: timer: Add fsl,vf610-pit.yaml
Geert Uytterhoeven (1):
docs: dt: Update overlay file extension
Hugo Villeneuve (1):
dt-bindings: display: bridge: renesas,dsi: allow properties from dsi-controller
J. Neuschäfer (1):
dt-bindings: powerpc: Convert fsl/pmc.txt to YAML
Krzysztof Kozlowski (6):
dt-bindings: writing-schema: Explain sub-nodes with additionalProperties:true
dt-bindings: arm: psci: change labels to lower-case in example
psci: MAINTAINERS: Include DT binding in the entry
media: dt-bindings: renesas,fcp: add top-level constraints
media: dt-bindings: renesas,vsp1: add top-level constraints
dt-bindings: soundwire: qcom: Document v2.1.0 version of IP block
Lad Prabhakar (1):
dt-bindings: gpu: mali-bifrost: Add compatible for RZ/V2N SoC
Luca Weiss (1):
ASoC: dt-bindings: qcom,sm8250: Add Fairphone 5 sound card
Neil Armstrong (1):
dt-bindings: arm/cpus: allow up to 3 interconnects entries
Radhey Shyam Pandey (1):
dt-bindings: usb: dwc3-xilinx: allow dma-coherent
Rob Herring (Arm) (56):
dt-bindings: arm/cpus: Add schemas for "enable-method" dependencies
dt-bindings: arm/cpus: Re-wrap 'description' entries
dt-bindings: Reference opp-v1 schema in CPU schemas
dt-bindings: arm/cpus: Add missing properties
dt-bindings: arm/cpus: Add power-domains constraints
dt-bindings: cpufreq: Drop redundant Mediatek binding
dt-bindings: Remove obsolete cpu-topology.txt
dt-bindings: Remove obsolete numa.txt
dt-bindings: virtio: pci-iommu: Add ref to pci-device.yaml
of: reserved_mem: Add functions to parse "memory-region"
of: Simplify of_dma_set_restricted_buffer() to use of_for_each_phandle()
devres: Export devm_ioremap_resource_wc()
dt-bindings: Move altr,msi-controller to interrupt-controller directory
dt-bindings: interrupt-controller: Convert cnxt,cx92755-ic to DT schema
dt-bindings: interrupt-controller: Convert brcm,bcm2835-armctrl-ic to DT schema
dt-bindings: interrupt-controller: Convert marvell,orion-bridge-intc to DT schema
dt-bindings: interrupt-controller: Convert arm,versatile-fpga-irq to DT schema
dt-bindings: interrupt-controller: Convert faraday,ftintc010 to DT schema
dt-bindings: interrupt-controller: Convert aspeed,ast2400-i2c-ic to DT schema
dt-bindings: interrupt-controller: Convert aspeed,ast2xxx-scu-ic to DT schema
dt-bindings: interrupt-controller: Convert ti,cp-intc to DT schema
dt-bindings: interrupt-controller: Convert cdns,xtensa-{mx,pic} to DT schema
dt-bindings: interrupt-controller: Convert chrp,open-pic to DT schema
dt-bindings: interrupt-controller: Convert microchip,pic32mzda-evic to DT schema
dt-bindings: interrupt-controller: Convert abilis,tb10x-ictl to DT schema
dt-bindings: interrupt-controller: Convert al,alpine-msix to DT schema
dt-bindings: interrupt-controller: Convert amazon,al-fic to DT schema
dt-bindings: interrupt-controller: Convert arm,nvic to DT schema
dt-bindings: interrupt-controller: Convert brcm,bcm6345-l1-intc to DT schema
dt-bindings: interrupt-controller: Convert cirrus,ep7209-intc to DT schema
dt-bindings: interrupt-controller: Convert csky,apb-intc to DT schema
dt-bindings: interrupt-controller: Convert csky,mpintc to DT schema
dt-bindings: interrupt-controller: Convert ezchip,nps400-ic to DT schema
dt-bindings: interrupt-controller: Convert google,goldfish-pic to DT schema
dt-bindings: interrupt-controller: Convert img,pdc-intc to DT schema
dt-bindings: interrupt-controller: Convert jcore,aic to DT schema
dt-bindings: interrupt-controller: Convert lsi,zevio-intc to DT schema
dt-bindings: interrupt-controller: Convert marvell,armada-8k-pic to DT schema
dt-bindings: interrupt-controller: Convert marvell,ap806-gicp to DT schema
dt-bindings: interrupt-controller: Convert marvell,ap806-sei to DT schema
dt-bindings: interrupt-controller: Convert marvell,cp110-icu to DT schema
dt-bindings: interrupt-controller: Convert marvell,odmi-controller to DT schema
dt-bindings: interrupt-controller: Convert qca,ar7100-cpu-intc to DT schema
dt-bindings: interrupt-controller: Convert qca,ar7100-misc-intc to DT schema
dt-bindings: interrupt-controller: Convert snps,arc700-intc to DT schema
dt-bindings: interrupt-controller: Convert snps,archs-idu-intc to DT schema
dt-bindings: interrupt-controller: Convert snps,archs-intc to DT schema
dt-bindings: interrupt-controller: Convert snps,dw-apb-ictl to DT schema
dt-bindings: interrupt-controller: Convert st,spear3xx-shirq to DT schema
dt-bindings: interrupt-controller: Convert technologic,ts4800-irqc to DT schema
dt-bindings: interrupt-controller: Convert ti,keystone-irq to DT schema
dt-bindings: interrupt-controller: Convert ti,omap4-wugen-mpu to DT schema
dt-bindings: interrupt-controller: Convert ti,omap-intc-irq to DT schema
dt-bindings: soc: fsl,qman-fqd: Fix reserved-memory.yaml reference
dt-bindings: pinctrl: amlogic,pinctrl-a4: Add missing constraint on allowed 'group' node properties
dt-bindings: arm/cpus: Allow 2 power-domains entries
Rodrigo Gobbi (2):
dt-bindings: trivial-devices: Add Maxim max30208
dt-bindings: trivial-devices: Add VZ89TE to trivial
Tommaso Merciai (1):
dt-bindings: gpu: mali-bifrost: Add compatible for RZ/G3E SoC
Wolfram Sang (1):
dt-bindings: remove RZ/N1S bindings
Documentation/devicetree/bindings/arm/cpus.yaml | 234 +++++----
.../bindings/arm/freescale/fsl,imx51-m4if.yaml | 41 ++
.../devicetree/bindings/arm/freescale/m4if.txt | 12 -
.../devicetree/bindings/arm/freescale/tigerp.txt | 12 -
Documentation/devicetree/bindings/arm/psci.yaml | 30 +-
.../bindings/counter/fsl,ftm-quaddec.yaml | 36 ++
.../devicetree/bindings/counter/ftm-quaddec.txt | 18 -
.../devicetree/bindings/cpu/cpu-topology.txt | 553 ---------------------
.../bindings/cpufreq/cpufreq-mediatek.txt | 250 ----------
.../bindings/display/bridge/renesas,dsi.yaml | 67 ++-
.../devicetree/bindings/display/fsl,tcon.txt | 17 -
.../bindings/display/fsl,vf610-tcon.yaml | 43 ++
.../display/imx/fsl,imx-display-subsystem.yaml | 36 ++
.../display/imx/fsl,imx-parallel-display.yaml | 74 +++
.../bindings/display/imx/fsl,imx6q-ipu.yaml | 97 ++++
.../bindings/display/imx/fsl,imx6q-ldb.yaml | 193 +++++++
.../bindings/display/imx/fsl,imx6qp-pre.yaml | 55 ++
.../bindings/display/imx/fsl,imx6qp-prg.yaml | 54 ++
.../bindings/display/imx/fsl-imx-drm.txt | 160 ------
.../devicetree/bindings/display/imx/ldb.txt | 146 ------
.../bindings/display/rockchip/cdn-dp-rockchip.txt | 74 ---
.../display/rockchip/rockchip,rk3399-cdn-dp.yaml | 170 +++++++
.../devicetree/bindings/example-schema.yaml | 15 +-
.../devicetree/bindings/gpu/arm,mali-bifrost.yaml | 4 +
.../interrupt-controller/abilis,tb10x-ictl.txt | 37 --
.../interrupt-controller/abilis,tb10x-ictl.yaml | 54 ++
.../interrupt-controller/al,alpine-msix.txt | 25 -
.../interrupt-controller/al,alpine-msix.yaml | 49 ++
.../altr,msi-controller.yaml | 2 +-
.../interrupt-controller/amazon,al-fic.txt | 27 -
.../interrupt-controller/amazon,al-fic.yaml | 46 ++
.../bindings/interrupt-controller/arm,nvic.txt | 36 --
.../bindings/interrupt-controller/arm,nvic.yaml | 61 +++
.../arm,versatile-fpga-irq.txt | 38 --
.../arm,versatile-fpga-irq.yaml | 61 +++
.../interrupt-controller/aspeed,ast2400-i2c-ic.txt | 25 -
.../aspeed,ast2400-i2c-ic.yaml | 46 ++
.../aspeed,ast2500-scu-ic.yaml | 48 ++
.../interrupt-controller/aspeed,ast2xxx-scu-ic.txt | 23 -
.../brcm,bcm2835-armctrl-ic.txt | 131 -----
.../brcm,bcm2835-armctrl-ic.yaml | 162 ++++++
.../interrupt-controller/brcm,bcm6345-l1-intc.txt | 55 --
.../interrupt-controller/brcm,bcm6345-l1-intc.yaml | 81 +++
.../interrupt-controller/cdns,xtensa-mx.txt | 18 -
.../interrupt-controller/cdns,xtensa-pic.txt | 25 -
.../interrupt-controller/cdns,xtensa-pic.yaml | 50 ++
.../interrupt-controller/chrp,open-pic.yaml | 63 +++
.../interrupt-controller/cirrus,clps711x-intc.txt | 41 --
.../interrupt-controller/cirrus,ep7209-intc.yaml | 71 +++
.../interrupt-controller/cnxt,cx92755-ic.yaml | 47 ++
.../interrupt-controller/csky,apb-intc.txt | 62 ---
.../interrupt-controller/csky,apb-intc.yaml | 54 ++
.../bindings/interrupt-controller/csky,mpintc.txt | 52 --
.../bindings/interrupt-controller/csky,mpintc.yaml | 43 ++
.../bindings/interrupt-controller/digicolor-ic.txt | 21 -
.../interrupt-controller/ezchip,nps400-ic.txt | 17 -
.../interrupt-controller/ezchip,nps400-ic.yaml | 34 ++
.../interrupt-controller/faraday,ftintc010.txt | 25 -
.../interrupt-controller/faraday,ftintc010.yaml | 51 ++
.../bindings/interrupt-controller/fsl,tzic.yaml | 48 ++
.../interrupt-controller/google,goldfish-pic.txt | 30 --
.../interrupt-controller/google,goldfish-pic.yaml | 47 ++
.../bindings/interrupt-controller/img,pdc-intc.txt | 105 ----
.../interrupt-controller/img,pdc-intc.yaml | 79 +++
.../bindings/interrupt-controller/jcore,aic.txt | 26 -
.../bindings/interrupt-controller/jcore,aic.yaml | 43 ++
.../interrupt-controller/lsi,zevio-intc.txt | 18 -
.../interrupt-controller/lsi,zevio-intc.yaml | 43 ++
.../interrupt-controller/marvell,ap806-gicp.yaml | 50 ++
.../interrupt-controller/marvell,ap806-sei.yaml | 58 +++
.../interrupt-controller/marvell,armada-8k-pic.txt | 25 -
.../marvell,armada-8k-pic.yaml | 52 ++
.../interrupt-controller/marvell,cp110-icu.yaml | 98 ++++
.../bindings/interrupt-controller/marvell,gicp.txt | 27 -
.../bindings/interrupt-controller/marvell,icu.txt | 112 -----
.../marvell,odmi-controller.txt | 42 --
.../marvell,odmi-controller.yaml | 54 ++
.../marvell,orion-bridge-intc.yaml | 52 ++
.../interrupt-controller/marvell,orion-intc.txt | 48 --
.../bindings/interrupt-controller/marvell,sei.txt | 36 --
.../interrupt-controller/microchip,pic32-evic.txt | 67 ---
.../microchip,pic32mzda-evic.yaml | 60 +++
.../bindings/interrupt-controller/open-pic.txt | 97 ----
.../interrupt-controller/qca,ar7100-cpu-intc.yaml | 61 +++
.../interrupt-controller/qca,ar7100-misc-intc.yaml | 52 ++
.../interrupt-controller/qca,ath79-cpu-intc.txt | 44 --
.../interrupt-controller/qca,ath79-misc-intc.txt | 45 --
.../interrupt-controller/snps,arc700-intc.txt | 24 -
.../interrupt-controller/snps,arc700-intc.yaml | 42 ++
.../interrupt-controller/snps,archs-idu-intc.txt | 46 --
.../interrupt-controller/snps,archs-idu-intc.yaml | 48 ++
.../interrupt-controller/snps,archs-intc.txt | 22 -
.../interrupt-controller/snps,archs-intc.yaml | 48 ++
.../interrupt-controller/snps,dw-apb-ictl.txt | 43 --
.../interrupt-controller/snps,dw-apb-ictl.yaml | 64 +++
.../interrupt-controller/st,spear300-shirq.yaml | 67 +++
.../interrupt-controller/st,spear3xx-shirq.txt | 44 --
.../technologic,ts4800-irqc.yaml | 49 ++
.../interrupt-controller/technologic,ts4800.txt | 14 -
.../bindings/interrupt-controller/ti,cp-intc.txt | 27 -
.../bindings/interrupt-controller/ti,cp-intc.yaml | 50 ++
.../interrupt-controller/ti,keystone-irq.txt | 36 --
.../interrupt-controller/ti,keystone-irq.yaml | 63 +++
.../interrupt-controller/ti,omap-intc-irq.txt | 28 --
.../interrupt-controller/ti,omap-intc-irq.yaml | 52 ++
.../interrupt-controller/ti,omap2-intc.txt | 27 -
.../interrupt-controller/ti,omap4-wugen-mpu.txt | 31 --
.../interrupt-controller/ti,omap4-wugen-mpu.yaml | 55 ++
.../interrupt-controller/via,vt8500-intc.txt | 16 -
.../interrupt-controller/via,vt8500-intc.yaml | 76 +++
.../bindings/leds/backlight/ti,lp8864.yaml | 80 +++
.../devicetree/bindings/media/i2c/imx219.yaml | 5 +-
.../devicetree/bindings/media/renesas,fcp.yaml | 25 +-
.../devicetree/bindings/media/renesas,vsp1.yaml | 24 +-
.../bindings/mfd/aspeed,ast2x00-scu.yaml | 9 +-
Documentation/devicetree/bindings/mips/cpus.yaml | 3 +-
.../devicetree/bindings/net/can/nxp,sja1000.yaml | 4 +-
Documentation/devicetree/bindings/numa.txt | 319 ------------
Documentation/devicetree/bindings/opp/opp-v1.yaml | 18 +-
.../bindings/pinctrl/amlogic,pinctrl-a4.yaml | 1 +
.../bindings/pinctrl/renesas,rzn1-pinctrl.yaml | 4 +-
.../devicetree/bindings/powerpc/fsl/pmc.txt | 63 ---
.../devicetree/bindings/powerpc/fsl/pmc.yaml | 152 ++++++
.../bindings/serial/snps-dw-apb-uart.yaml | 12 +-
.../devicetree/bindings/soc/fsl/fsl,qman-fqd.yaml | 4 +-
.../devicetree/bindings/soc/qcom/qcom,saw2.yaml | 3 +-
.../devicetree/bindings/sound/qcom,sm8250.yaml | 1 +
.../bindings/soundwire/qcom,soundwire.yaml | 19 +-
.../devicetree/bindings/spi/snps,dw-apb-ssi.yaml | 4 +-
.../devicetree/bindings/timer/fsl,vf610-pit.yaml | 54 ++
.../devicetree/bindings/trivial-devices.yaml | 4 +
.../devicetree/bindings/usb/dwc3-xilinx.yaml | 2 +
.../devicetree/bindings/vendor-prefixes.yaml | 2 +
.../devicetree/bindings/virtio/pci-iommu.yaml | 10 +-
.../devicetree/bindings/watchdog/fsl-imx-wdt.yaml | 2 +
.../devicetree/bindings/writing-schema.rst | 11 +-
Documentation/devicetree/overlay-notes.rst | 12 +-
.../zh_CN/devicetree/overlay-notes.rst | 12 +-
MAINTAINERS | 18 +-
drivers/of/device.c | 31 +-
drivers/of/of_reserved_mem.c | 80 +++
drivers/of/unittest.c | 10 +-
include/linux/of_reserved_mem.h | 26 +
lib/devres.c | 1 +
144 files changed, 4012 insertions(+), 3576 deletions(-)
create mode 100644 Documentation/devicetree/bindings/arm/freescale/fsl,imx51-m4if.yaml
delete mode 100644 Documentation/devicetree/bindings/arm/freescale/m4if.txt
delete mode 100644 Documentation/devicetree/bindings/arm/freescale/tigerp.txt
create mode 100644 Documentation/devicetree/bindings/counter/fsl,ftm-quaddec.yaml
delete mode 100644 Documentation/devicetree/bindings/counter/ftm-quaddec.txt
delete mode 100644 Documentation/devicetree/bindings/cpu/cpu-topology.txt
delete mode 100644 Documentation/devicetree/bindings/cpufreq/cpufreq-mediatek.txt
delete mode 100644 Documentation/devicetree/bindings/display/fsl,tcon.txt
create mode 100644 Documentation/devicetree/bindings/display/fsl,vf610-tcon.yaml
create mode 100644 Documentation/devicetree/bindings/display/imx/fsl,imx-display-subsystem.yaml
create mode 100644 Documentation/devicetree/bindings/display/imx/fsl,imx-parallel-display.yaml
create mode 100644 Documentation/devicetree/bindings/display/imx/fsl,imx6q-ipu.yaml
create mode 100644 Documentation/devicetree/bindings/display/imx/fsl,imx6q-ldb.yaml
create mode 100644 Documentation/devicetree/bindings/display/imx/fsl,imx6qp-pre.yaml
create mode 100644 Documentation/devicetree/bindings/display/imx/fsl,imx6qp-prg.yaml
delete mode 100644 Documentation/devicetree/bindings/display/imx/fsl-imx-drm.txt
delete mode 100644 Documentation/devicetree/bindings/display/imx/ldb.txt
delete mode 100644 Documentation/devicetree/bindings/display/rockchip/cdn-dp-rockchip.txt
create mode 100644 Documentation/devicetree/bindings/display/rockchip/rockchip,rk3399-cdn-dp.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/abilis,tb10x-ictl.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/abilis,tb10x-ictl.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/al,alpine-msix.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/al,alpine-msix.yaml
rename Documentation/devicetree/bindings/{pci => interrupt-controller}/altr,msi-controller.yaml (94%)
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/amazon,al-fic.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/amazon,al-fic.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/arm,nvic.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/arm,nvic.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/arm,versatile-fpga-irq.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/arm,versatile-fpga-irq.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/aspeed,ast2400-i2c-ic.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/aspeed,ast2400-i2c-ic.yaml
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/aspeed,ast2500-scu-ic.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/aspeed,ast2xxx-scu-ic.txt
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/brcm,bcm2835-armctrl-ic.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/brcm,bcm2835-armctrl-ic.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/brcm,bcm6345-l1-intc.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/brcm,bcm6345-l1-intc.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/cdns,xtensa-mx.txt
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/cdns,xtensa-pic.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/cdns,xtensa-pic.yaml
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/chrp,open-pic.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/cirrus,clps711x-intc.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/cirrus,ep7209-intc.yaml
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/cnxt,cx92755-ic.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/csky,apb-intc.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/csky,apb-intc.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/csky,mpintc.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/csky,mpintc.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/digicolor-ic.txt
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/ezchip,nps400-ic.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/ezchip,nps400-ic.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/faraday,ftintc010.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/faraday,ftintc010.yaml
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/fsl,tzic.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/google,goldfish-pic.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/google,goldfish-pic.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/img,pdc-intc.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/img,pdc-intc.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/jcore,aic.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/jcore,aic.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/lsi,zevio-intc.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/lsi,zevio-intc.yaml
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/marvell,ap806-gicp.yaml
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/marvell,ap806-sei.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/marvell,armada-8k-pic.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/marvell,armada-8k-pic.yaml
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/marvell,cp110-icu.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/marvell,gicp.txt
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/marvell,icu.txt
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/marvell,odmi-controller.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/marvell,odmi-controller.yaml
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/marvell,orion-bridge-intc.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/marvell,orion-intc.txt
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/marvell,sei.txt
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/microchip,pic32-evic.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/microchip,pic32mzda-evic.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/open-pic.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/qca,ar7100-cpu-intc.yaml
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/qca,ar7100-misc-intc.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/qca,ath79-cpu-intc.txt
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/qca,ath79-misc-intc.txt
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/snps,arc700-intc.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/snps,arc700-intc.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/snps,archs-idu-intc.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/snps,archs-idu-intc.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/snps,archs-intc.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/snps,archs-intc.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/snps,dw-apb-ictl.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/snps,dw-apb-ictl.yaml
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/st,spear300-shirq.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/st,spear3xx-shirq.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/technologic,ts4800-irqc.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/technologic,ts4800.txt
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/ti,cp-intc.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/ti,cp-intc.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/ti,keystone-irq.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/ti,keystone-irq.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/ti,omap-intc-irq.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/ti,omap-intc-irq.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/ti,omap2-intc.txt
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/ti,omap4-wugen-mpu.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/ti,omap4-wugen-mpu.yaml
delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/via,vt8500-intc.txt
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/via,vt8500-intc.yaml
create mode 100644 Documentation/devicetree/bindings/leds/backlight/ti,lp8864.yaml
delete mode 100644 Documentation/devicetree/bindings/numa.txt
delete mode 100644 Documentation/devicetree/bindings/powerpc/fsl/pmc.txt
create mode 100644 Documentation/devicetree/bindings/powerpc/fsl/pmc.yaml
create mode 100644 Documentation/devicetree/bindings/timer/fsl,vf610-pit.yaml
Return-Path: <linux-kernel+bounces-665755-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1EB9241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:54:53 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id F33531BC247B
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:55:05 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id B2D3728C5C7;
Wed, 28 May 2025 15:54:44 +0000 (UTC)
Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9B71B74420;
Wed, 28 May 2025 15:54:40 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.176.79.56
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447684; cv=none; b=ed9YB+ya4CZEApNJ8fpFyURuSOaBfCROJ9fovHOxg30UizWPvEx4ictFiqIZeMAtAgFWa4tbOGIILOMMPAfrWl6yHYKCeCvl3lQqMY0uveAKwdE4+ypwO98QfPQSN9Nu0M0enGnn3ovR7+4FC+zc8H0kw/5YfQj/pCG55cz7++8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447684; c=relaxed/simple;
bh=Dw/g/lE1rQzkBlq4qZ/qURcgH6xjlgUmtkzi7h8i4P8=;
h=Date:From:To:CC:Subject:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=CpR48DMOaLLuiglhPaXw8C5Ko0bwH3NZDIoDisjaKsUDg255VyHxQ0tg7GgIawlfzG8GLIXAsmeFFMasw/SmGfJ9TwQOfX6bzl8gN38pV4dICGEM2OmXuJoVb89XjZwGBuveolR9OJhl4O1O7GsmQfIQ1320gUIZr85euZKISv0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=185.176.79.56
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com
Received: from mail.maildlp.com (unknown [172.18.186.216])
by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4b6v9Z09hfz6H6py;
Wed, 28 May 2025 23:50:58 +0800 (CST)
Received: from frapeml500008.china.huawei.com (unknown [7.182.85.71])
by mail.maildlp.com (Postfix) with ESMTPS id E14461400CA;
Wed, 28 May 2025 23:54:31 +0800 (CST)
Received: from localhost (10.203.177.66) by frapeml500008.china.huawei.com
(7.182.85.71) with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Wed, 28 May
2025 17:54:31 +0200
Date: Wed, 28 May 2025 16:54:29 +0100
From: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
To: Alireza Sanaee <alireza.sanaee@xxxxxxxxxx>
CC: <devicetree@xxxxxxxxxxxxxxx>, <robh@xxxxxxxxxx>,
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>, <linux-kernel@xxxxxxxxxxxxxxx>,
<linuxarm@xxxxxxxxxx>, <mark.rutland@xxxxxxx>,
<shameerali.kolothum.thodi@xxxxxxxxxx>, <krzk@xxxxxxxxxx>,
<dianders@xxxxxxxxxxxx>, <catalin.marinas@xxxxxxx>, <suzuki.poulose@xxxxxxx>,
<mike.leach@xxxxxxxxxx>, <james.clark@xxxxxxxxxx>,
<linux-perf-users@xxxxxxxxxxxxxxx>, <coresight@xxxxxxxxxxxxxxxx>,
<gshan@xxxxxxxxxx>, <ruanjinjie@xxxxxxxxxx>, <saravanak@xxxxxxxxxx>
Subject: Re: [PATCH v3 1/7] of: add infra for finding CPU id from phandle
Message-ID: <20250528165429.00000d4d@xxxxxxxxxx>
In-Reply-To: <20250512080715.82-2-alireza.sanaee@xxxxxxxxxx>
References: <20250512080715.82-1-alireza.sanaee@xxxxxxxxxx>
<20250512080715.82-2-alireza.sanaee@xxxxxxxxxx>
X-Mailer: Claws Mail 4.3.0 (GTK 3.24.42; x86_64-w64-mingw32)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: lhrpeml500012.china.huawei.com (7.191.174.4) To
frapeml500008.china.huawei.com (7.182.85.71)
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Mon, 12 May 2025 09:07:09 +0100
Alireza Sanaee <alireza.sanaee@xxxxxxxxxx> wrote:
> Get CPU id from phandle. Many drivers get do this by getting hold of CPU
> node first through a phandle and then find the CPU ID using the relevant
> function. This commit encapsulates cpu node finding and improves
> readability.
>
> The API interface requires two parameters, 1) node, 2) pointer to CPU
> node. API sets the pointer to the CPU node and allows the driver to play
> with the CPU itself, for logging purposes for instance.
>
> Signed-off-by: Alireza Sanaee <alireza.sanaee@xxxxxxxxxx>
> ---
> drivers/of/cpu.c | 29 +++++++++++++++++++++++++++++
> include/linux/of.h | 9 +++++++++
> 2 files changed, 38 insertions(+)
>
> diff --git a/drivers/of/cpu.c b/drivers/of/cpu.c
> index 5214dc3d05ae..fba17994fc20 100644
> --- a/drivers/of/cpu.c
> +++ b/drivers/of/cpu.c
> @@ -173,6 +173,35 @@ int of_cpu_node_to_id(struct device_node *cpu_node)
> }
> EXPORT_SYMBOL(of_cpu_node_to_id);
>
> +/**
> + * of_cpu_phandle_to_id: Get the logical CPU number for a given device_node
> + *
> + * @node: Pointer to the device_node containing CPU phandle.
> + * @cpu_np: Pointer to the device_node for CPU.
> + * @cpu_idx: The index of the CPU in the list of CPUs.
> + *
> + * Return: The logical CPU number of the given CPU device_node or -ENODEV if
> + * the CPU is not found, or if the node is NULL, it returns -1. On success,
> + * cpu_np will always point to the retrieved CPU device_node with refcount
> + * incremented, use of_node_put() on it when done.
> + */
> +int of_cpu_phandle_to_id(const struct device_node *node,
> + struct device_node **cpu_np,
> + uint8_t cpu_idx)
> +{
> + if (!node)
> + return -1;
> +
> + *cpu_np = of_parse_phandle(node, "cpu", 0);
> + if (!*cpu_np)
> + *cpu_np = of_parse_phandle(node, "cpus", cpu_idx);
> + if (!*cpu_np)
> + return -ENODEV;
Indent has gone a bit crazy here.
> +
> + return of_cpu_node_to_id(*cpu_np);
> +}
> +EXPORT_SYMBOL(of_cpu_phandle_to_id);
> +
> /**
> * of_get_cpu_state_node - Get CPU's idle state node at the given index
> *
> diff --git a/include/linux/of.h b/include/linux/of.h
> index eaf0e2a2b75c..194f1cb0f6c6 100644
> --- a/include/linux/of.h
> +++ b/include/linux/of.h
> @@ -360,6 +360,8 @@ extern const void *of_get_property(const struct device_node *node,
> extern struct device_node *of_get_cpu_node(int cpu, unsigned int *thread);
> extern struct device_node *of_cpu_device_node_get(int cpu);
> extern int of_cpu_node_to_id(struct device_node *np);
> +extern int of_cpu_phandle_to_id(const struct device_node *np,
> + struct device_node **cpu_np, uint8_t cpu_idx);
> extern struct device_node *of_get_next_cpu_node(struct device_node *prev);
> extern struct device_node *of_get_cpu_state_node(const struct device_node *cpu_node,
> int index);
> @@ -662,6 +664,13 @@ static inline int of_cpu_node_to_id(struct device_node *np)
> return -ENODEV;
> }
>
> +static inline int of_cpu_phandle_to_id(const struct device_node *np,
> + struct device_node **cpu_np,
> + uint8_t cpu_idx)
> +{
> + return -ENODEV;
> +}
> +
> static inline struct device_node *of_get_next_cpu_node(struct device_node *prev)
> {
> return NULL;
Return-Path: <linux-kernel+bounces-665756-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 73A3941E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:55:48 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 3856C1C0045B
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:56:01 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 8C71D28C86F;
Wed, 28 May 2025 15:55:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="FArEaPVp"
Received: from mail-pg1-f177.google.com (mail-pg1-f177.google.com [209.85.215.177])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6A17D28C855;
Wed, 28 May 2025 15:55:29 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.177
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447731; cv=none; b=ELVIbzxIXAI+XVDC/fH2PuxWynvqxEtx+zy/nGESLjxi7UWaiOVyeqUXK/QCBER1LhcpHtukGZw2zx2AUwahaInqIPX/VRP9p5BelxX7opVt5KTuXqA88mD8GRbdAOvQs/uDv5J56TUXoty/l83k4eViVy5jwpsAixI87fVi+VQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447731; c=relaxed/simple;
bh=8JXxfcJjoGbvpn9MgUUsyU3cv+zoDwRCtAsunztYnAk=;
h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=qoBNs8utzySIpd7fhRhNleRpZvyLVyu4BUdPbtbcyu5LPjz9QG5YDhgkd2pTzAOJpyQPMi8Gj43L5AEv/Z7eynWGl1vBiYwCd1znrgpC83UaUMJQ33/qULi1r0UZnzbeNIGBcVvlCclk8dKVJ98/jVNX8VwZiGqdTIWabQJtRlE=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=FArEaPVp; arc=none smtp.client-ip=209.85.215.177
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-pg1-f177.google.com with SMTP id 41be03b00d2f7-af548cb1f83so13773a12.3;
Wed, 28 May 2025 08:55:29 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748447729; x=1749052529; darn=vger.kernel.org;
h=content-transfer-encoding:mime-version:message-id:date:subject:cc
:to:from:from:to:cc:subject:date:message-id:reply-to;
bh=TdWUtiBXIpdQ6dngRJ0xyGfp5ROuWsfYLJvZy2BONrs=;
b=FArEaPVptH9fjYu43o54yy0BxrH5zu3xRFqk9plxS5KFV+moMvGr6kl4X7YfTWIA69
e84dsIlvflrmqIkuYJl1ybU1rWRwfGfQzKdkHrx3EQcfzD3p3yHFKNC4d+7hxQPv/0Ig
A4uH6i02tiAOQBklHYMEgK3BC5/NXWoNUSxqE01/hFkOvN0VoUszfTUH6d3WuES4xW18
1oMMezAUskW4lrVhUUkFpPhS0tslNoCTdQHIaqk5Q+prAcTdHzZIFjgBo0k96DatHy9u
BdQ0D7jO1Et6526C8k90KiaOCcoqiS4Kf47fbKm/9/GNyQlO0fB+6ItWsfFmE3ksCtJ1
9JXg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748447729; x=1749052529;
h=content-transfer-encoding:mime-version:message-id:date:subject:cc
:to:from:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=TdWUtiBXIpdQ6dngRJ0xyGfp5ROuWsfYLJvZy2BONrs=;
b=be5v3Thh+HY4JPK9ivBziPJOn0fOBIyZ4o/wpHJLlKyQgnJUJj0jSvLTd7mDdt7cmk
usFd6r4devq/uLWYecNFUnwTTqYhY4cWXJnFPdR6UotoRkmfe85bUFxsTRd5Vx1XUsD3
4Tp8yp7MFulLI4Vb9DvNtaOlIXOJFq3QfgU41lr8oYJbBOlQlAdAY8kDyJbJaN6PgQU8
GPT12ErEVpHdzixDtGkoqpsKGSsyabBlKpXTLvrzU0+NTRaAiQQtLANNG72h8lMEDzlz
I5UmnLtQ7wEn5USZ3CNZLGwLYGUrMx8QYHrxn/PRwpf3aA8fEZAcKYmXrrwJMtiRajeq
Z3FA==
X-Forwarded-Encrypted: i=1; AJvYcCU8QzYNYGinwanP0Wr2GaK5vSfYNbsh6qNPPhqXxY1LjficNBylPbnotUsSymQ5SFP/eQYqjWCyvHoLUts=@vger.kernel.org, AJvYcCUCRQ0LtoeOiZOg2R0utvQXn8+b8IT/5AN6m/kJKPE6An7Ls7Zn9pUQ+X1UEnMoJD1yQjneuPz+QvsjdVsq/sc=@vger.kernel.org
X-Gm-Message-State: AOJu0YygSWLO++tpLV+2/A2Bu7wSh2IsPLJTtUDgrvyJFPahVz7CoRxT
/XaQISMlkDFk2dSlc0rtMmK4byLe4fncGSjoaId6CKJVRwFibSpCDp02
X-Gm-Gg: ASbGncuxjmoktB7f+34C6sSAj/cUXES/a1C9DQuhAf0zSgP1KdX9PiBuwdAGo8WCtZF
7+Ma6hTndIsraA62Q4lD2aLMsjgZNDarJytMiDgBwj5S5EE2th4Yr1G2I7EZDqbxLdQHvFkW8sq
iyWcsqQbxXRpd5tea7QZJFQK4EVb2f3ZIC571y3lE3f6+mJ5IjyOJVcS6jirJQUeVT2EAcnOB+3
HFAaldehPOyJiWHeNe5XlzmGKhhAEt96TOPrmVc+4eFra8G8rt6sPg5jtKtn3mSn4keH7XXDaIV
C0hqH44oKdYEOpRdLPoAhobpPuJxGETRD9pHEJhFE1zUaq6trX9NrQKnHtzko3x6cD3vfpPz
X-Google-Smtp-Source: AGHT+IFANBqiDmGcHFrSu/ihjwM81fRnfat123aATS9Fi9jALatSGZQFvIRcNwOkXvOpaOAjW8Lmpw==
X-Received: by 2002:a05:6a20:d04d:b0:1f5:9d5d:bcdd with SMTP id adf61e73a8af0-2188c1e811dmr28470637637.1.1748447729374;
Wed, 28 May 2025 08:55:29 -0700 (PDT)
Received: from localhost.localdomain ([112.149.32.52])
by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b2d9872c835sm1311815a12.14.2025.05.28.08.55.24
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 08:55:28 -0700 (PDT)
From: Jesung Yang <y.j3ms.n@xxxxxxxxx>
To: Brendan Higgins <brendan.higgins@xxxxxxxxx>,
David Gow <davidgow@xxxxxxxxxx>,
Rae Moar <rmoar@xxxxxxxxxx>,
Miguel Ojeda <ojeda@xxxxxxxxxx>,
Alex Gaynor <alex.gaynor@xxxxxxxxx>,
Boqun Feng <boqun.feng@xxxxxxxxx>,
Gary Guo <gary@xxxxxxxxxxx>,
=?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= <bjorn3_gh@xxxxxxxxxxxxxx>,
Andreas Hindborg <a.hindborg@xxxxxxxxxx>,
Alice Ryhl <aliceryhl@xxxxxxxxxx>,
Trevor Gross <tmgross@xxxxxxxxx>,
Danilo Krummrich <dakr@xxxxxxxxxx>
Cc: linux-kselftest@xxxxxxxxxxxxxxx,
kunit-dev@xxxxxxxxxxxxxxxx,
rust-for-linux@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Jesung Yang <y.j3ms.n@xxxxxxxxx>
Subject: [PATCH v2] rust: kunit: use crate-level mapping for `c_void`
Date: Wed, 28 May 2025 15:51:47 +0000
Message-Id: <20250528155147.2793921-1-y.j3ms.n@xxxxxxxxx>
X-Mailer: git-send-email 2.39.5
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Use `kernel::ffi::c_void` instead of `core::ffi::c_void` for consistency
and to centralize abstraction.
Since `kernel::ffi::c_void` is a straightforward re-export of
`core::ffi::c_void`, both are functionally equivalent. However, using
`kernel::ffi::c_void` improves consistency across the kernel's Rust code
and provides a unified reference point in case the definition ever needs
to change, even if such a change is unlikely.
Signed-off-by: Jesung Yang <y.j3ms.n@xxxxxxxxx>
Link: https://rust-for-linux.zulipchat.com/#narrow/channel/288089/topic/x/near/520452733
---
So in sum, I believe it's reasonable to keep the diff unchanged... but
I'm happy to adjust if you'd prefer a different approach.
---
Changes in v2:
- Add "Link" tag to the related discussion on Zulip
- Reword the commit message to clarify `kernel::ffi::c_void` is a re-export
- Link to v1: https://lore.kernel.org/rust-for-linux/20250526162429.1114862-1-y.j3ms.n@xxxxxxxxx/
---
rust/kernel/kunit.rs | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/rust/kernel/kunit.rs b/rust/kernel/kunit.rs
index 81833a687b75..bd6fc712dd79 100644
--- a/rust/kernel/kunit.rs
+++ b/rust/kernel/kunit.rs
@@ -6,7 +6,8 @@
//!
//! Reference: <https://docs.kernel.org/dev-tools/kunit/index.html>
-use core::{ffi::c_void, fmt};
+use core::fmt;
+use kernel::ffi::c_void;
/// Prints a KUnit error-level message.
///
base-commit: f4daa80d6be7d3c55ca72a8e560afc4e21f886aa
--
2.39.5
Return-Path: <linux-kernel+bounces-665757-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id AFE6F41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:57:18 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id E291517060C
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:57:19 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 50CD528C5C2;
Wed, 28 May 2025 15:57:12 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Nr6kWEEw"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7EEE3286436;
Wed, 28 May 2025 15:57:11 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447831; cv=none; b=na6V1yS9zGNrvZVcnOMCHyPaBr3AhDMHn13JB2u8v6fodMqAy9b9QKBlsk8QQ9nO8HygzUMnM+FgrsOSOtsi9usTdss0v0rZqnukYOotoXzJ5umz3WCkGcVlGO7uCAbk6bDvn1bVkFGnYz5X9Ql96nFoZkPRkS2O9I5RjAseEGs=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447831; c=relaxed/simple;
bh=cunEx1GQ+Vp/hksXrb/eoFZg/bDuO6fnKXClUzKr/m0=;
h=Date:From:To:Cc:Subject:Message-ID:MIME-Version:Content-Type:
Content-Disposition; b=BxCB3PxWLwY1fZhHAS/r9UznnqDWAwSRnINoqCtzccj6/vZuLEZMlUlhK1BJuleZ8L4IKA55wSqSTtMoqbWaTrGwdqeQacmXuIoBsgYdN/QHTRbnCNPFZJMMZLBvojRrhFhHi4JCcnNmRY/VeYcFAbQ6DVcuOX4KwSc13GOxXo8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Nr6kWEEw; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 81A8AC4CEE3;
Wed, 28 May 2025 15:57:10 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748447831;
bh=cunEx1GQ+Vp/hksXrb/eoFZg/bDuO6fnKXClUzKr/m0=;
h=Date:From:To:Cc:Subject:From;
b=Nr6kWEEw6soS8hsA4ePXvWPyPI+PUVJvlTNOxbL8fLYXLSXmRIVvIUjCb/ZRjHMjg
Nf+P234/HSWhq1aIc5c5y539DTTOTyd3QRxFXZzpJMHRqh4VlNHPaAQooz4mQuKbKu
7zYjPS8X0zhxPYplXmkfin0n/17u5ZBDxToUU18B9hP83Blil+h9USSOOT4BDnR1Lx
nqHd1LkgoXLNkAFdBXocOO+CyKnxgbvINSbf7t1irM4mrJgemqkvoqmEBm/wY9ai1m
XharRn5flp7HFNBlzROLzpXJoKFIJnFZIjeiX/71vdM/3N/O3R0DpuyMEpr0Y4d2it
MK+ggwblqeDuA==
Date: Wed, 28 May 2025 12:57:08 -0300
From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
To: Ian Rogers <irogers@xxxxxxxxxx>
Cc: Namhyung Kim <namhyung@xxxxxxxxxx>,
Adrian Hunter <adrian.hunter@xxxxxxxxx>,
Alexander Shishkin <alexander.shishkin@xxxxxxxxxxxxxxx>,
Athira Rajeev <atrajeev@xxxxxxxxxxxxxxxxxx>,
Bill Wendling <morbo@xxxxxxxxxx>,
Chaitanya S Prakash <chaitanyas.prakash@xxxxxxx>,
Fei Lang <langfei@xxxxxxxxxx>, Howard Chu <howardchu95@xxxxxxxxx>,
Ingo Molnar <mingo@xxxxxxxxxx>,
James Clark <james.clark@xxxxxxxxxx>, Jiri Olsa <jolsa@xxxxxxxxxx>,
Justin Stitt <justinstitt@xxxxxxxxxx>,
Kan Liang <kan.liang@xxxxxxxxxxxxxxx>,
Mark Rutland <mark.rutland@xxxxxxx>,
Nathan Chancellor <nathan@xxxxxxxxxx>,
Nick Desaulniers <nick.desaulniers+lkml@xxxxxxxxx>,
Peter Zijlstra <peterz@xxxxxxxxxxxxx>,
Stephen Brennan <stephen.s.brennan@xxxxxxxxxx>,
Linux Kernel Mailing List <linux-kernel@xxxxxxxxxxxxxxx>,
linux-perf-users@xxxxxxxxxxxxxxx
Subject: [PATCH 1/1] Revert "perf thread: Ensure comm_lock held for comm_list"
Message-ID: <aDcyVLVpZRui1ole@x1>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
This reverts commit 8f454c95817d15ee529d58389612ea4b34f5ffb3.
'perf top' is freezing on exit sometimes, bisected to this one, revert.
Cc: Adrian Hunter <adrian.hunter@xxxxxxxxx>
Cc: Alexander Shishkin <alexander.shishkin@xxxxxxxxxxxxxxx>
Cc: Athira Rajeev <atrajeev@xxxxxxxxxxxxxxxxxx>
Cc: Bill Wendling <morbo@xxxxxxxxxx>
Cc: Chaitanya S Prakash <chaitanyas.prakash@xxxxxxx>
Cc: Fei Lang <langfei@xxxxxxxxxx>
Cc: Howard Chu <howardchu95@xxxxxxxxx>
Cc: Ian Rogers <irogers@xxxxxxxxxx>
Cc: Ingo Molnar <mingo@xxxxxxxxxx>
Cc: James Clark <james.clark@xxxxxxxxxx>
Cc: Jiri Olsa <jolsa@xxxxxxxxxx>
Cc: Justin Stitt <justinstitt@xxxxxxxxxx>
Cc: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>
Cc: Mark Rutland <mark.rutland@xxxxxxx>
Cc: Namhyung Kim <namhyung@xxxxxxxxxx>
Cc: Nathan Chancellor <nathan@xxxxxxxxxx>
Cc: Nick Desaulniers <nick.desaulniers+lkml@xxxxxxxxx>
Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: Stephen Brennan <stephen.s.brennan@xxxxxxxxxx>
Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
---
tools/perf/util/comm.c | 2 --
tools/perf/util/thread.c | 17 ++++-------------
tools/perf/util/thread.h | 9 ++++-----
3 files changed, 8 insertions(+), 20 deletions(-)
diff --git a/tools/perf/util/comm.c b/tools/perf/util/comm.c
index 9880247a2c3364cb..8aa456d7c2cd2d74 100644
--- a/tools/perf/util/comm.c
+++ b/tools/perf/util/comm.c
@@ -24,7 +24,6 @@ static struct comm_strs {
static void comm_strs__remove_if_last(struct comm_str *cs);
static void comm_strs__init(void)
- NO_THREAD_SAFETY_ANALYSIS /* Inherently single threaded due to pthread_once. */
{
init_rwsem(&_comm_strs.lock);
_comm_strs.capacity = 16;
@@ -120,7 +119,6 @@ static void comm_strs__remove_if_last(struct comm_str *cs)
}
static struct comm_str *__comm_strs__find(struct comm_strs *comm_strs, const char *str)
- SHARED_LOCKS_REQUIRED(comm_strs->lock)
{
struct comm_str **result;
diff --git a/tools/perf/util/thread.c b/tools/perf/util/thread.c
index c202b98b36c29215..415c0e5d1e751a47 100644
--- a/tools/perf/util/thread.c
+++ b/tools/perf/util/thread.c
@@ -41,7 +41,6 @@ int thread__init_maps(struct thread *thread, struct machine *machine)
}
struct thread *thread__new(pid_t pid, pid_t tid)
- NO_THREAD_SAFETY_ANALYSIS /* Allocation/creation is inherently single threaded. */
{
RC_STRUCT(thread) *_thread = zalloc(sizeof(*_thread));
struct thread *thread;
@@ -203,29 +202,22 @@ int thread__set_namespaces(struct thread *thread, u64 timestamp,
struct comm *thread__comm(struct thread *thread)
{
- struct comm *res = NULL;
+ if (list_empty(thread__comm_list(thread)))
+ return NULL;
- down_read(thread__comm_lock(thread));
- if (!list_empty(thread__comm_list(thread)))
- res = list_first_entry(thread__comm_list(thread), struct comm, list);
- up_read(thread__comm_lock(thread));
- return res;
+ return list_first_entry(thread__comm_list(thread), struct comm, list);
}
struct comm *thread__exec_comm(struct thread *thread)
{
struct comm *comm, *last = NULL, *second_last = NULL;
- down_read(thread__comm_lock(thread));
list_for_each_entry(comm, thread__comm_list(thread), list) {
- if (comm->exec) {
- up_read(thread__comm_lock(thread));
+ if (comm->exec)
return comm;
- }
second_last = last;
last = comm;
}
- up_read(thread__comm_lock(thread));
/*
* 'last' with no start time might be the parent's comm of a synthesized
@@ -241,7 +233,6 @@ struct comm *thread__exec_comm(struct thread *thread)
static int ____thread__set_comm(struct thread *thread, const char *str,
u64 timestamp, bool exec)
- EXCLUSIVE_LOCKS_REQUIRED(thread__comm_lock(thread))
{
struct comm *new, *curr = thread__comm(thread);
diff --git a/tools/perf/util/thread.h b/tools/perf/util/thread.h
index 56e08c8ae005e82b..cd574a896418ac94 100644
--- a/tools/perf/util/thread.h
+++ b/tools/perf/util/thread.h
@@ -236,15 +236,14 @@ static inline struct rw_semaphore *thread__namespaces_lock(struct thread *thread
return &RC_CHK_ACCESS(thread)->namespaces_lock;
}
-static inline struct rw_semaphore *thread__comm_lock(struct thread *thread)
+static inline struct list_head *thread__comm_list(struct thread *thread)
{
- return &RC_CHK_ACCESS(thread)->comm_lock;
+ return &RC_CHK_ACCESS(thread)->comm_list;
}
-static inline struct list_head *thread__comm_list(struct thread *thread)
- SHARED_LOCKS_REQUIRED(thread__comm_lock(thread))
+static inline struct rw_semaphore *thread__comm_lock(struct thread *thread)
{
- return &RC_CHK_ACCESS(thread)->comm_list;
+ return &RC_CHK_ACCESS(thread)->comm_lock;
}
static inline u64 thread__db_id(const struct thread *thread)
--
2.49.0
Return-Path: <linux-kernel+bounces-665758-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 0D25E41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:58:36 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 5393D4E3987
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:58:37 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 328A028C84D;
Wed, 28 May 2025 15:58:29 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="mD9I6qF3"
Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.10])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0F0BC286436;
Wed, 28 May 2025 15:58:26 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.10
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447908; cv=none; b=bOUJeHb6X8PSEPAMO0ziwWfBZwvXJIfA0bupBTDP9nE48qygCEbelQ3SZqUZwfWkmxWTKK8HrMNcsK+6/xYYSRM92syCd+ZDwKa56XozuwcdD19FGHP+d68B6BIvSkmbIwDjDBOOGJUrLe118Mz6UJeVOtk23RT5+C1lVjrRVyo=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447908; c=relaxed/simple;
bh=NIZUO6nfWzxOmDFR7kuS4TIBoOtvv4jh2sd4GzavqT4=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=D+uHYdfNyzZtR9pEl0o+3RxHD2x+ykFc6FQwuK0MxAHEFFTS2D/LOVD2KrLYuzDFa0GtRAl3emJQFdQCh+4/cDNnkSzk5YOCAcgOWi9hJ/A1UdpSDEpcEiYkF6YtIDJQi0ZhDTDfV9xqVaCKaejqx6v4i/rrJ5Xahj00c2cVNnk=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=mD9I6qF3; arc=none smtp.client-ip=198.175.65.10
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748447908; x=1779983908;
h=date:from:to:cc:subject:message-id:references:
mime-version:in-reply-to;
bh=NIZUO6nfWzxOmDFR7kuS4TIBoOtvv4jh2sd4GzavqT4=;
b=mD9I6qF3nKN2HG0XnXD+sxfcnJnZkj2zevJTpFMGkU6HHoPGnotFIOjj
ybEyWs3i34MNrLaqGreSY4G2EO45vSmfyrj/7XuBh/t2GgDaSlAL3zfl+
feYExZ/GvPWQO/9jHeabNgldzNLaXW+meQiGchaQP27Phm3G3WKkRqU6U
++j5unesiiLgDNpLhzEGN83llExWKvinQ462sCh4RqUTzfqEroktNTXH+
6mWkPFplitKdDZh1mbd3P+M10Oztpz2CprPd9SMZq7aQt5Ufuz7YmobaU
SzpGUgttWjQRngHL7XsKF1sRgZQLIaYe9OYDwI+qe0X/Pb1+AuCbvGTyF
A==;
X-CSE-ConnectionGUID: D/7DjDcEQNijX9zStQLZUA==
X-CSE-MsgGUID: 9wbXrTghRliEQhdjaqFTiQ==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="67897079"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="67897079"
Received: from fmviesa009.fm.intel.com ([10.60.135.149])
by orvoesa102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 08:58:27 -0700
X-CSE-ConnectionGUID: 8KS9rMUsR8uWNQsowgjXnQ==
X-CSE-MsgGUID: bU31e17nRDSY4Nv7jkm57w==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="144248096"
Received: from lkp-server01.sh.intel.com (HELO 1992f890471c) ([10.239.97.150])
by fmviesa009.fm.intel.com with ESMTP; 28 May 2025 08:58:22 -0700
Received: from kbuild by 1992f890471c with local (Exim 4.96)
(envelope-from <lkp@xxxxxxxxx>)
id 1uKJAZ-000Vou-2c;
Wed, 28 May 2025 15:58:19 +0000
Date: Wed, 28 May 2025 23:57:43 +0800
From: kernel test robot <lkp@xxxxxxxxx>
To: Tamir Duberstein <tamird@xxxxxxxxx>, Miguel Ojeda <ojeda@xxxxxxxxxx>,
Alex Gaynor <alex.gaynor@xxxxxxxxx>,
Boqun Feng <boqun.feng@xxxxxxxxx>, Gary Guo <gary@xxxxxxxxxxx>,
=?iso-8859-1?Q?Bj=F6rn?= Roy Baron <bjorn3_gh@xxxxxxxxxxxxxx>,
Benno Lossin <lossin@xxxxxxxxxx>,
Andreas Hindborg <a.hindborg@xxxxxxxxxx>,
Alice Ryhl <aliceryhl@xxxxxxxxxx>, Trevor Gross <tmgross@xxxxxxxxx>,
Danilo Krummrich <dakr@xxxxxxxxxx>,
Brendan Higgins <brendan.higgins@xxxxxxxxx>,
David Gow <davidgow@xxxxxxxxxx>, Rae Moar <rmoar@xxxxxxxxxx>
Cc: oe-kbuild-all@xxxxxxxxxxxxxxx, linux-kselftest@xxxxxxxxxxxxxxx,
kunit-dev@xxxxxxxxxxxxxxxx, rust-for-linux@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, Tamir Duberstein <tamird@xxxxxxxxx>
Subject: Re: [PATCH] rust: replace length checks with match
Message-ID: <202505282330.oOHtt60s-lkp@xxxxxxxxx>
References: <20250527-idiomatic-match-slice-v1-1-34b0b1d1d58c@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250527-idiomatic-match-slice-v1-1-34b0b1d1d58c@xxxxxxxxx>
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Tamir,
kernel test robot noticed the following build errors:
[auto build test ERROR on bfc3cd87559bc593bb32bb1482f9cae3308b6398]
url: https://github.com/intel-lab-lkp/linux/commits/Tamir-Duberstein/rust-replace-length-checks-with-match/20250528-001121
base: bfc3cd87559bc593bb32bb1482f9cae3308b6398
patch link: https://lore.kernel.org/r/20250527-idiomatic-match-slice-v1-1-34b0b1d1d58c%40gmail.com
patch subject: [PATCH] rust: replace length checks with match
config: x86_64-rhel-9.4-rust (https://download.01.org/0day-ci/archive/20250528/202505282330.oOHtt60s-lkp@xxxxxxxxx/config)
compiler: clang version 18.1.8 (https://github.com/llvm/llvm-project 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff)
rustc: rustc 1.78.0 (9b00956e5 2024-04-29)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250528/202505282330.oOHtt60s-lkp@xxxxxxxxx/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202505282330.oOHtt60s-lkp@xxxxxxxxx/
All errors (new ones prefixed by >>):
PATH=/opt/cross/clang-18/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
INFO PATH=/opt/cross/rustc-1.78.0-bindgen-0.65.1/cargo/bin:/opt/cross/clang-18/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
/usr/bin/timeout -k 100 12h /usr/bin/make KCFLAGS= -Wno-error=return-type -Wreturn-type -funsigned-char -Wundef W=1 --keep-going LLVM=1 -j24 -C source O=/kbuild/obj/consumer/x86_64-rhel-9.4-rust ARCH=x86_64 SHELL=/bin/bash rustfmtcheck
make: Entering directory '/kbuild/src/consumer'
make[1]: Entering directory '/kbuild/obj/consumer/x86_64-rhel-9.4-rust'
>> Diff in scripts/rustdoc_test_gen.rs at line 90:
"No path candidates found for `{file}`. This is likely a bug in the build system, or \
some files went away while compiling."
),
- [valid_path] => {
- valid_path.to_str().unwrap()
- }
+ [valid_path] => valid_path.to_str().unwrap(),
valid_paths => {
eprintln!("Several path candidates found:");
for path in valid_paths {
make[2]: *** [Makefile:1826: rustfmt] Error 123
make[2]: Target 'rustfmtcheck' not remade because of errors.
make[1]: Leaving directory '/kbuild/obj/consumer/x86_64-rhel-9.4-rust'
make[1]: *** [Makefile:248: __sub-make] Error 2
make[1]: Target 'rustfmtcheck' not remade because of errors.
make: *** [Makefile:248: __sub-make] Error 2
make: Target 'rustfmtcheck' not remade because of errors.
make: Leaving directory '/kbuild/src/consumer'
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Return-Path: <linux-kernel+bounces-665759-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 09D2741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:58:57 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 7786A9E5960
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:58:30 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 3251A28CF62;
Wed, 28 May 2025 15:58:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="EW3dVrLt"
Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.11])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id E8E5928C864;
Wed, 28 May 2025 15:58:29 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.11
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447911; cv=none; b=Yh+7uPSDYxElEsjSWjl659pjSWbQz1C9xjvyC9fAGO/g2CskW4smmfi7Mv4xm6NE6zsRjDfNH3Y+wtaBjtKt0y+LUB5XokcQpRn877AoPwOBAqfuWvSzSt3EqU78JAAZHadhO2b5LJ1/rLNP7sVz3UrsjnKN56lP/SZ/9SKv6pA=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447911; c=relaxed/simple;
bh=jQ1GOT+yh1Z61cRE9ycQmcM+5PDeTXfT6DSI9iMG7MA=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=H7WTWVTS8Y5CI6NPMM1yJ293604tPtaXuqA8Q38vOv+b34EnG86Nxk8mFpEZxOJAGyPI71+wRaSidV8TZ4H/N7pRjkGhnVzPzbMvJ1kJ2gKpjanCfaDgqxs9nh8tITYHERqTy0hgh5vUb2u9jb9fpwsLpFCBdTRUT1U0VQKxgnY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=EW3dVrLt; arc=none smtp.client-ip=198.175.65.11
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748447910; x=1779983910;
h=date:from:to:cc:subject:message-id:references:
mime-version:in-reply-to;
bh=jQ1GOT+yh1Z61cRE9ycQmcM+5PDeTXfT6DSI9iMG7MA=;
b=EW3dVrLtbpUPzSO7v+1XHiRsjEIiMuOAztH+3s07Y+nnrIdE/QDAtNEi
yVutIGP7eXbWheH2dOlTFcMsKEsEojriyrHZYIxXO7a4Qh3AkagxlHEM9
Bb+uZcL4M0exKq2bHp7DKxr1Cu0ADi5M6eRX2FJCKfC5uGjVU8cMO1jEo
htSLDkJ+59MQJm2Jdhh37PmHpRYWsIAFS4Q/H2KmqpVGbQdMu8yWUonbq
y+z/kA20UHF+VuLTwIziP+Czo5HcUUy2UZgws7AsBMe6c5uyhfHuINMvQ
9GrdEPlDrnEEfF51leDkVj2SeGH4z1Gu9H+iczukRBx3uW+6mfrDJKDiw
w==;
X-CSE-ConnectionGUID: E6DM9eaWQaG1g0v4kDV0QA==
X-CSE-MsgGUID: ex8vJjGCS3iTnI23eUpEiQ==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="60740128"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="60740128"
Received: from fmviesa005.fm.intel.com ([10.60.135.145])
by orvoesa103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 08:58:29 -0700
X-CSE-ConnectionGUID: 7vNOD3ErRAaVAEJcQ5OGBA==
X-CSE-MsgGUID: DTfw/s/YRguYfCNhsp5rkQ==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="148140975"
Received: from lkp-server01.sh.intel.com (HELO 1992f890471c) ([10.239.97.150])
by fmviesa005.fm.intel.com with ESMTP; 28 May 2025 08:58:22 -0700
Received: from kbuild by 1992f890471c with local (Exim 4.96)
(envelope-from <lkp@xxxxxxxxx>)
id 1uKJAZ-000Vow-2h;
Wed, 28 May 2025 15:58:19 +0000
Date: Wed, 28 May 2025 23:57:45 +0800
From: kernel test robot <lkp@xxxxxxxxx>
To: Byungchul Park <byungchul@xxxxxx>, willy@xxxxxxxxxxxxx,
netdev@xxxxxxxxxxxxxxx
Cc: llvm@xxxxxxxxxxxxxxx, oe-kbuild-all@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-mm@xxxxxxxxx,
kernel_team@xxxxxxxxxxx, kuba@xxxxxxxxxx, almasrymina@xxxxxxxxxx,
ilias.apalodimas@xxxxxxxxxx, harry.yoo@xxxxxxxxxx, hawk@xxxxxxxxxx,
akpm@xxxxxxxxxxxxxxxxxxxx, davem@xxxxxxxxxxxxx,
john.fastabend@xxxxxxxxx, andrew+netdev@xxxxxxx,
asml.silence@xxxxxxxxx, toke@xxxxxxxxxx, tariqt@xxxxxxxxxx,
edumazet@xxxxxxxxxx, pabeni@xxxxxxxxxx, saeedm@xxxxxxxxxx,
leon@xxxxxxxxxx, ast@xxxxxxxxxx, daniel@xxxxxxxxxxxxx,
david@xxxxxxxxxx, lorenzo.stoakes@xxxxxxxxxx,
Liam.Howlett@xxxxxxxxxx, vbabka@xxxxxxx, rppt@xxxxxxxxxx,
surenb@xxxxxxxxxx, mhocko@xxxxxxxx
Subject: Re: [PATCH v2 16/16] mt76: use netmem descriptor and APIs for page
pool
Message-ID: <202505282311.lZqpYSc9-lkp@xxxxxxxxx>
References: <20250528022911.73453-17-byungchul@xxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528022911.73453-17-byungchul@xxxxxx>
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Byungchul,
kernel test robot noticed the following build errors:
[auto build test ERROR on d09a8a4ab57849d0401d7c0bc6583e367984d9f7]
url: https://github.com/intel-lab-lkp/linux/commits/Byungchul-Park/netmem-introduce-struct-netmem_desc-struct_group_tagged-ed-on-struct-net_iov/20250528-103136
base: d09a8a4ab57849d0401d7c0bc6583e367984d9f7
patch link: https://lore.kernel.org/r/20250528022911.73453-17-byungchul%40sk.com
patch subject: [PATCH v2 16/16] mt76: use netmem descriptor and APIs for page pool
config: i386-buildonly-randconfig-004-20250528 (https://download.01.org/0day-ci/archive/20250528/202505282311.lZqpYSc9-lkp@xxxxxxxxx/config)
compiler: clang version 20.1.2 (https://github.com/llvm/llvm-project 58df0ef89dd64126512e4ee27b4ac3fd8ddf6247)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250528/202505282311.lZqpYSc9-lkp@xxxxxxxxx/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202505282311.lZqpYSc9-lkp@xxxxxxxxx/
All errors (new ones prefixed by >>):
>> drivers/net/wireless/mediatek/mt76/sdio_txrx.c:74:3: error: must use 'struct' tag to refer to type 'page'
74 | page = netmem_compound_head(virt_to_netmem(data));
| ^
| struct
>> drivers/net/wireless/mediatek/mt76/sdio_txrx.c:74:8: error: expected identifier or '('
74 | page = netmem_compound_head(virt_to_netmem(data));
| ^
2 errors generated.
vim +74 drivers/net/wireless/mediatek/mt76/sdio_txrx.c
58
59 static struct sk_buff *
60 mt76s_build_rx_skb(void *data, int data_len, int buf_len)
61 {
62 int len = min_t(int, data_len, MT_SKB_HEAD_LEN);
63 struct sk_buff *skb;
64
65 skb = alloc_skb(len, GFP_KERNEL);
66 if (!skb)
67 return NULL;
68
69 skb_put_data(skb, data, len);
70 if (data_len > len) {
71 netmem_ref netmem;
72
73 data += len;
> 74 page = netmem_compound_head(virt_to_netmem(data));
75 skb_add_rx_frag_netmem(skb, skb_shinfo(skb)->nr_frags,
76 netmem, data - netmem_address(netmem),
77 data_len - len, buf_len);
78 get_netmem(netmem);
79 }
80
81 return skb;
82 }
83
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Return-Path: <linux-kernel+bounces-665760-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 083EB41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:59:04 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id A56684E5968
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:58:59 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 2ED1028C879;
Wed, 28 May 2025 15:58:33 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="tW0PZ6E8"
Received: from casper.infradead.org (casper.infradead.org [90.155.50.34])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id D0C8828C860;
Wed, 28 May 2025 15:58:29 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447911; cv=none; b=VKvbJ0HEJigY8Sg92M5Ay9LKLAEP4LxD4FY7sKVoxG8tfrR2vLm3IZ4f4MHhuFW1oeYP1l+n51u1uU6GfFT3Yeh8kmaRxYb/SmBXmYcyKfTe3yoD75PiLEA04XAGZtaFhZo+MRhw3N/SqSr6EamihNfJdawADqOzevBZG0IR8eA=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447911; c=relaxed/simple;
bh=OtBi/ZITK7WUZHutB/hNpw5QOeKdiYbhIrHeY6xrCpw=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=vFkvaX0bZnf+a0hkg9YirD+f1QLsg7tEVuPLrXZexpF6oFlMV6+cHdXA7YdGZgUa2c0Jl8FshP9pPAgYmwn3Nk1C7Sy0RJFLdp2oNeIrJ1OUxpWZDjf3hu7EclEDGMDqya1jwMPeoPRPzRt2LnTD9OBz9fzx9sWfhPCjF9LB3F8=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=tW0PZ6E8; arc=none smtp.client-ip=90.155.50.34
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org
Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Transfer-Encoding:
Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:
Sender:Reply-To:Content-ID:Content-Description;
bh=RoswSQk/PEBsr2RK6KX9ltQEgshvqW8g4fwZIoz7jqs=; b=tW0PZ6E8yx4NYov5nHPcC49wvh
Kz2J1xJfwGwlcQwNL78Xbi5R5nWGz8VYiTMxidyGDiJyiVFP9OKpP49ZNSkJDc0kfx6aSq4i3yiQL
Hm4F1fh6NI2uq/jkzPr4rErFYjwWpz/rBxfbtMmR2vmKujf+0o94RtCwJ1FkuSgZjX3QM8BWWik3v
jA2ifdYUPIIhHWUqNWmEyYMxuiU4aWjf7zdUw0yj4UeNcjq4W55vinm1yuAEIcLIyyfXDZywe/UfD
ha8KxMNEyROgtrL9c17E/9iLITIHATCtn4m4i+6lf/J5rX772GvhosJcfUA/kH31d9LWLu6JAHC6Z
fe6gVjzg==;
Received: from 77-249-17-252.cable.dynamic.v4.ziggo.nl ([77.249.17.252] helo=noisy.programming.kicks-ass.net)
by casper.infradead.org with esmtpsa (Exim 4.98.2 #2 (Red Hat Linux))
id 1uKJAc-0000000DomJ-3tZM;
Wed, 28 May 2025 15:58:23 +0000
Received: by noisy.programming.kicks-ass.net (Postfix, from userid 1000)
id A7F4A3005AF; Wed, 28 May 2025 17:58:21 +0200 (CEST)
Date: Wed, 28 May 2025 17:58:21 +0200
From: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
To: =?iso-8859-1?Q?J=FCrgen_Gro=DF?= <jgross@xxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx, x86@xxxxxxxxxx, xin@xxxxxxxxx,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>,
Ingo Molnar <mingo@xxxxxxxxxx>, Borislav Petkov <bp@xxxxxxxxx>,
Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
"H. Peter Anvin" <hpa@xxxxxxxxx>, stable@xxxxxxxxxxxxxxx,
rppt@xxxxxxxxxx
Subject: Re: [PATCH 3/3] x86/alternative: make kernel ITS thunks read-only
Message-ID: <20250528155821.GD39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <20250528123557.12847-1-jgross@xxxxxxxx>
<20250528123557.12847-4-jgross@xxxxxxxx>
<20250528131052.GZ39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<044f0048-95bb-4822-978e-a23528f3891f@xxxxxxxx>
<20250528132231.GB39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<7c8bf4f5-29a0-4147-b31a-5e420b11468e@xxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
In-Reply-To: <7c8bf4f5-29a0-4147-b31a-5e420b11468e@xxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 03:30:33PM +0200, J=FCrgen Gro=DF wrote:
> Have a look at its_fini_mod().
Oh, that's what you mean. But this still isn't very nice, you now have
restore_rox() without make_temp_rw(), which was the intended usage
pattern.
Bah, I hate how execmem works different for !PSE, Mike, you see a sane
way to fix this?
Anyway, if we have to do something like this, then I would prefer it
shaped something like so:
---
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
index ecfe7b497cad..33d4d139cb50 100644
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
@@ -111,9 +111,8 @@ static bool cfi_paranoid __ro_after_init;
=20
#ifdef CONFIG_MITIGATION_ITS
=20
-#ifdef CONFIG_MODULES
static struct module *its_mod;
-#endif
+static struct its_array its_pages;
static void *its_page;
static unsigned int its_offset;
=20
@@ -151,68 +150,78 @@ static void *its_init_thunk(void *thunk, int reg)
return thunk + offset;
}
=20
-#ifdef CONFIG_MODULES
void its_init_mod(struct module *mod)
{
if (!cpu_feature_enabled(X86_FEATURE_INDIRECT_THUNK_ITS))
return;
=20
- mutex_lock(&text_mutex);
- its_mod =3D mod;
- its_page =3D NULL;
+ if (mod) {
+ mutex_lock(&text_mutex);
+ its_mod =3D mod;
+ its_page =3D NULL;
+ }
}
=20
void its_fini_mod(struct module *mod)
{
+ struct its_array *pages =3D &its_pages;
+
if (!cpu_feature_enabled(X86_FEATURE_INDIRECT_THUNK_ITS))
return;
=20
WARN_ON_ONCE(its_mod !=3D mod);
=20
- its_mod =3D NULL;
- its_page =3D NULL;
- mutex_unlock(&text_mutex);
+ if (mod) {
+ pages =3D &mod->arch.its_pages;
+ its_mod =3D NULL;
+ its_page =3D NULL;
+ mutex_unlock(&text_mutex);
+ }
=20
- for (int i =3D 0; i < mod->its_num_pages; i++) {
- void *page =3D mod->its_page_array[i];
+ for (int i =3D 0; i < pages->num; i++) {
+ void *page =3D pages->pages[i];
execmem_restore_rox(page, PAGE_SIZE);
}
+
+ if (!mod)
+ kfree(pages->pages);
}
=20
void its_free_mod(struct module *mod)
{
+ struct its_array *pages =3D &its_pages;
+
if (!cpu_feature_enabled(X86_FEATURE_INDIRECT_THUNK_ITS))
return;
=20
- for (int i =3D 0; i < mod->its_num_pages; i++) {
- void *page =3D mod->its_page_array[i];
+ if (mod)
+ pages =3D &mod->arch.its_pages;
+
+ for (int i =3D 0; i < pages->num; i++) {
+ void *page =3D pages->pages[i];
execmem_free(page);
}
- kfree(mod->its_page_array);
+ kfree(pages->pages);
}
-#endif /* CONFIG_MODULES */
=20
static void *its_alloc(void)
{
- void *page __free(execmem) =3D execmem_alloc(EXECMEM_MODULE_TEXT, PAGE_SI=
ZE);
+ struct its_array *pages =3D &its_pages;
+ void *tmp;
=20
+ void *page __free(execmem) =3D execmem_alloc(EXECMEM_MODULE_TEXT, PAGE_SI=
ZE);
if (!page)
return NULL;
=20
-#ifdef CONFIG_MODULES
- if (its_mod) {
- void *tmp =3D krealloc(its_mod->its_page_array,
- (its_mod->its_num_pages+1) * sizeof(void *),
- GFP_KERNEL);
- if (!tmp)
- return NULL;
+ tmp =3D krealloc(pages->pages, (pages->num + 1) * sizeof(void *), GFP_KER=
NEL);
+ if (!tmp)
+ return NULL;
=20
- its_mod->its_page_array =3D tmp;
- its_mod->its_page_array[its_mod->its_num_pages++] =3D page;
+ pages->pages =3D tmp;
+ pages->pages[pages->num++] =3D page;
=20
+ if (its_mod)
execmem_make_temp_rw(page, PAGE_SIZE);
- }
-#endif /* CONFIG_MODULES */
=20
return no_free_ptr(page);
}
@@ -2338,6 +2347,8 @@ void __init alternative_instructions(void)
apply_retpolines(__retpoline_sites, __retpoline_sites_end);
apply_returns(__return_sites, __return_sites_end);
=20
+ its_fini_mod(NULL);
+
/*
* Adjust all CALL instructions to point to func()-10, including
* those in .altinstr_replacement.
Return-Path: <linux-kernel+bounces-665761-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 6893A41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:59:29 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 0F799A23E50
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:58:54 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 4827E28C847;
Wed, 28 May 2025 15:58:41 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="kpXRD4sX"
Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011008.outbound.protection.outlook.com [52.101.70.8])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id DC87328C845;
Wed, 28 May 2025 15:58:36 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.8
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447919; cv=fail; b=eHhTbz5RfWKSnw5LLvOcN+0qlA1hvmNucqjgienWt5iUfYIRfqdXE24nXacCm/cwOCoIxu3nDhx77LTW6YiswSxnrTw4tKgr1dCb+wWV4bM8eH/dWrx16L8QT0po6MUnK09WN9lDAH7z4TPXXd/bs3/cyHk8TKlizYEMMibdGtc=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447919; c=relaxed/simple;
bh=VZuaJjf27CMtbJssWQuDFYPEQ+ZbKGKphqvUS3AKlrs=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=iOXbDeDn/NXjheu7xvUlsqMzkFsSx6xCwVWTsMMrKaeWC2IlqXhQD1/GEwn5qHiMpJnHHDKO9xGAuaOAHQ44jopk69KMr0xqdiP3oM1mlsgrqTXH3q8tC+Jo1pbtrHSaMyeuDBDmwWGaMi9BVwTYVKm/tfdV0bRDnHBVuPoXUug=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=kpXRD4sX; arc=fail smtp.client-ip=52.101.70.8
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=V5RAg1yv2tduKzsgqonJX68WVKHc3e6doX8U5U5Xll3H+549bnWGzFlQBA/MT9ozIGQtkl9rmuM5xtz9rMrcqY49GV/88Df70P9by47ZUsredr24TgaXK1rIpSp4Q6k50EIk+s5fP9lnJWyoL22krF+aowC35/kA2bz/tNF/F6tP35GTk+ZENOXZZyjwie17Ih/EQnLT49FUSOlp1nXGppbCPK+F1jlLdfQ7IS635/vpx0Ag1RxxbmT1gXMKNJM0vqB4UBo4ZzobvUMBrSCBZSV8GTUJkXaJ3pW94qllZmNPRklMAXOh7hgE0OVkE9zxo1yzLATx93WvlmEFJU2AgA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=K1xyJTu+zqQLiwsFSX+/mEbRASyxqDn4AWgtcDbWmZ0=;
b=V2+x2+80RbqsH6JYtUrbn3x4YGyu9Nbg1CVupVKEshn7NA3SKLuN5+ouxK9EbW1kG8/XVmY0/TUGcwgFn4v/Gt0uJe8S7fqW4THHO7EhKjIOpbDlmHCQ2dqa/ssVArPIhdBOcuP0h20YwK2tIM8hbwEZuHa4BFEWawsYCfjulSGW9wxsfHiO7bIdo3GYVGiOBBtpWmHcakmDO9acvUYsGnuiL2pmiAr35/RQYx//Ww+0xkxtqyA5Wog4L6wevv8b8bRIPnKdQ0TDe9m8oNyCTOnOvYNWmVufxoplEpLkaQULKSqwDk1I2WB1V2IBzyrGwP7L7zJw9TFkH6N/jXVKOQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=K1xyJTu+zqQLiwsFSX+/mEbRASyxqDn4AWgtcDbWmZ0=;
b=kpXRD4sXpTvgEkjUzmGxWkogQnaj6Kyj3armdsMyNcNbTy+3l4gQhNk3iiWqLWhEl2RjdxNuPY17DdIzLe3eCcB5GjCpJ3lKtSIXbfkqTkHqCzaswbHRpwc7HTRiOTBzc65PxUnnY1Tr6uT3hTBPZ6aajmw5K2xqV0/QunS4ROe0XQ7GIEPmDXoEInfQAGHpq+kvkK0ci91dw195Vap30nCussBlKZVrUgUEsAwNwUdZY6bPSYVNQ7qSvt/d/3eIRgKzYThx+l6duuPWYV/HFjoNjTlb30dCeQq2MWg8eXV1hX2Mk2Ahxl0gwWyQNvukKbMF8PoXgC1CmxSGTaenfg==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by PA1PR04MB11034.eurprd04.prod.outlook.com (2603:10a6:102:483::7) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.24; Wed, 28 May
2025 15:58:34 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
15:58:34 +0000
Date: Wed, 28 May 2025 11:58:29 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: Fabian Pflug <f.pflug@xxxxxxxxxxxxxx>
Cc: Rob Herring <robh@xxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>, Shawn Guo <shawnguo@xxxxxxxxxx>,
Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>,
Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>,
Fabio Estevam <festevam@xxxxxxxxx>, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, imx@xxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
Subject: Re: [PATCH v2 2/2] arm64: dts: freescale: add support for NXP i.MX93
FRDM
Message-ID: <aDcypSNblUa1c0tb@lizhi-Precision-Tower-5810>
References: <20250526-fpg-nxp-imx93-frdm-v2-0-e5ad0efaec33@xxxxxxxxxxxxxx>
<20250526-fpg-nxp-imx93-frdm-v2-2-e5ad0efaec33@xxxxxxxxxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250526-fpg-nxp-imx93-frdm-v2-2-e5ad0efaec33@xxxxxxxxxxxxxx>
X-ClientProxiedBy: AM0PR03CA0013.eurprd03.prod.outlook.com
(2603:10a6:208:14::26) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|PA1PR04MB11034:EE_
X-MS-Office365-Filtering-Correlation-Id: aa49640b-03b0-453e-5d7c-08dd9e007fd6
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|366016|1800799024|376014|7416014|52116014|38350700014|7053199007;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?redDGAQsMGkAWbMiYAK/gFEirpP34Zgp+L8qfCVbEZtDb7fk91LBeRXseMCh?=
=?us-ascii?Q?vu5rvVow1qDdihhsjClrOCvpKZBKCGqbrrTUBhD0B58IC+48e9r5mFM2LHRQ?=
=?us-ascii?Q?vvdQnsL7wZgBncBCAo9XzEN90UGTZn9GsLqWO1E/xUNYrmVKNqk97RF3JaRL?=
=?us-ascii?Q?5ERPRfKMOKG33Nzx54FERXP3ILyoramVJif/k7wgAckDY70B19sS5fKZ1AOe?=
=?us-ascii?Q?74UFjEeSumuzj93Vk5kg76+xP/ixta12YJpHLmhz0gyrTHggA2Yphfh3Z96x?=
=?us-ascii?Q?O/1t+hbcWfo9Nt0qNbY1c8VasGIkYVTG/ABvodBQPXyC2zkhW6r3+pAQ0N2F?=
=?us-ascii?Q?OT8gctSjgmO0sKUdzqNwivz0Ax0LKcY/5Ul7TRjRtZ2vSVhsvb/ma4PLm7c4?=
=?us-ascii?Q?5d7J98Q+3RCP/1tuF2UwuHChwkR+//oSdhsOreCJ8njTcIJc7l5vYhYhCU1W?=
=?us-ascii?Q?Hse37WK1OI+cNEZyc1glsDKHGIJ0J740XmdbRXmcIvjHZOZX6JQtZs2kxdqh?=
=?us-ascii?Q?B4Unvq5iXE5Y5fnUf1nEwpFIsA1qNC1So4EeLSjC7a8VVVKnQw6aQNAPJsAu?=
=?us-ascii?Q?a/hXAiuz8/uGoviN2ti9TmmIy5tBYqHzQ8/hNC2GCiasTzNV359QR/P4/hs0?=
=?us-ascii?Q?+DJ3E3wj8ODWfoeOoxcCOn2B9hLPgolnfvk/ibitJ8XGdNuMjr4QRc3SfOQk?=
=?us-ascii?Q?bODETaE85nz+32fGOtOUsqYtZZ3AGGL/3Riw6Fe/hDq3/Hx2Nr9RSY2XFeFw?=
=?us-ascii?Q?c3UI77UNWx09q5xaT+p2h2K1KcIYRP3i8UkJDDf6gCOV99pHEu8c0uB7yN9j?=
=?us-ascii?Q?nAoDiN6zhlf2njEruwMzJlza/QiHsRyr6lh+FYhnEzDFVqC6bRqsxa9OYtDH?=
=?us-ascii?Q?9bMK2CM8X4u5cBW7JGB7FgXTy8pP26G0i0kZzD4ZGDVps7+Q0G0QY3Jwq9vG?=
=?us-ascii?Q?eb+9wzQ15q9/fs2yuelaDyg1Zke/F/ZdMw1koms/rxMyMqI0j54b4DrbL9oK?=
=?us-ascii?Q?r8zHTg7H/KsYA6F9kcD0H85gd80YnDmx9pzkcvVGOVU8U9DZ8tVr5W/d5XLj?=
=?us-ascii?Q?cWPmgDRuZTNH61TTMd1ULzHM9X9ZzHntWNflaY8AdZxE7W2O6j7VrL6kbhZ1?=
=?us-ascii?Q?oVCAuZ4dmBsue8sPQiKU4EV5gkuTlr7GNkSB/XNSTMImylKOSwaEXB+r7Kc1?=
=?us-ascii?Q?t6DhNY46fCpcbZICaLtYXgiTaaqDNkOEhhhGaoqxae2J2d0WWO8LkEDCez7Q?=
=?us-ascii?Q?PoK3Y1I1zne3RnimLDgGiFKKxMUxPjQFAsnFXwXAZYFN7dpPcyS4PxKURkSa?=
=?us-ascii?Q?CMdoVxjkGnHFXWrE/Zsls8VYP8xGBzKl6+qtB3R8CniqXiYLx1vExBPaIgYb?=
=?us-ascii?Q?WEHdeoKeKKkQ3XjRx2drW1Oa1RBp4KH0jR3jWTukDh9ikrL7LmHcQk6H1V2Z?=
=?us-ascii?Q?SxgEQmBzz8sl3/0teM4sNCP39+cNAch2yU3T5YBGzLDTsU3Y8bHhzw=3D=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(52116014)(38350700014)(7053199007);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?7b1r4723Sxxzu7qTb6AsD8qBulSiPnIzhJI0mg7MJrfhxdrbA95ua0ukN6WU?=
=?us-ascii?Q?JqAprKv3d3w3/cu+d97iStYahsdgFfDJ8K67Uk7hXtt2oczh+OFeAfvEe59z?=
=?us-ascii?Q?TMSAjKU9/z43geHEOeQQkVoZeh8YQH6TW5+53qZI8ZkYvJMwC7wzoa8LumFi?=
=?us-ascii?Q?uT7Uj0SSGV5UVlRpk27yUSvq3ZHsNFB3FyYs3Rg3LNWWPM/gZBQFhVPH0dSi?=
=?us-ascii?Q?mwQ4wJVAibhqK6w4PvZt8o3hlsH4kqPVPEyWtIZpT7yTmowzhOXSTMofv8qq?=
=?us-ascii?Q?bXeGLp5M4Mb9d5Yx8kEBGnNhj4YS0A/CLiEHdVLMbP9zXyT4Y9aVQwa9cJlW?=
=?us-ascii?Q?u9292MFDo86CMt7qm8xBQ0/I1+HrbgGSchSoaAftVKcgNVTK/5SoCoF8ewtJ?=
=?us-ascii?Q?tG8TAsXWkJqiDwbbHP43cJAYIlWhiO8hPp+HXdsfGsQL0WZaTq//71wJy+FX?=
=?us-ascii?Q?ZweKJDCBYBYdsKnCHQVu3Y5lXQnIkdo1BRMY6KeSjZO7MuNkEL29sVh5aUFF?=
=?us-ascii?Q?UxFbUacpqEsT/UcXufngLTsQzywuzelGQuUB9vdmYma9olZY7Sy+hz7bCpGf?=
=?us-ascii?Q?KwBksT9BGQf4+udubXnG3/8MM8WOIjbZFnwFhVPdTCZ6v88vGZbc9wAscf27?=
=?us-ascii?Q?Wi10x7RNYrX2X7uFf/ovpbkuEWfoiI09iWvRGQO2g42eJxJZhpihW/dWXe3v?=
=?us-ascii?Q?BHyDiIb+zo3e6adLy36C9iR7MUZiX2CIC7PDUyw3rscnbzmrnr/nYmBu/b8I?=
=?us-ascii?Q?14uyDUvHJRi0LsV4O+fzcQ1jgy+2scow29tGfUOeh+t7Ulb0eI+ymg48Yt0i?=
=?us-ascii?Q?6h6DYHGHk4USG++kipPGcjkVzUe2u0MUkvsgkIHL5CEisN5+PHWvBLnxrqI7?=
=?us-ascii?Q?zRsKD7J5AaliEh9SEApQdThaFvybG801BnLQerjWuEUJQMroTQLb0q5iSo0H?=
=?us-ascii?Q?jYbEbHgCSwS6B71NtMTqXUp2bFh3aQmu20D1OjeqJw+q9pc+3rzMfjAYDKax?=
=?us-ascii?Q?GAAX6UWsOcceV07+pvIKvhzoncvnNHFj0isneGjqhJq1HvfEiGoNCBGe1Dqr?=
=?us-ascii?Q?g8ww/MNkyXBU84WDUjHqGixNGbIoBlC52WpnUG+UZVl7vlpeIjViSEpuLBwy?=
=?us-ascii?Q?suc/JC9T70FjFAvqcXlWc6dGg6Q0h3goNnBRmQuQ8ldzKlgR2Q6GBed5i4k+?=
=?us-ascii?Q?ImhgRzeMagoJFWq5VRzGyyO+z9tP8+ZvUjelFPt21HcK7VuRr2nTgGWvGERF?=
=?us-ascii?Q?mh/qrSd/wMF6LpdBuQQw0Cn7L+01sAOuY6UacSsvWpCyRDWO+aAaphvSrjnH?=
=?us-ascii?Q?7ZsF/rxpDRq4076su1Eff50anWzvOLP60eISNVTtLbiqc8KjA9RBdkyLcNQ+?=
=?us-ascii?Q?o/RNm2RwwfYVxf8lMZO+P7AXTTDvsotdAItJRCoIRhte/wZczSzeoHDn2IwZ?=
=?us-ascii?Q?0cNOo1sV/QH7qsD0wC3FYkPCOQAyBHDgRjy2nHZpfZAOdl0MsirnIAnSUa28?=
=?us-ascii?Q?3zOUkpZy8TZXzZUhyHbD4aJFqC5vUmy0tr2CJEFTEnW6tnuvekh0M8a6ztII?=
=?us-ascii?Q?RbVcwjjsWF1oPfvctrwi1x1I+AA7cDmIgL3o7NMg?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: aa49640b-03b0-453e-5d7c-08dd9e007fd6
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 15:58:34.0214
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: OjVM3xYW/7nr1AgIczyKJ3T0PKmqaYYmESjTONgo9m4FwFkzsfP8W/IaeB1sS4qY5DfV4WjI8yr3xc44RzMIpw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1PR04MB11034
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Mon, May 26, 2025 at 01:02:36PM +0200, Fabian Pflug wrote:
> The FRDM i.MX 93 development board is a low-cost and compact development
> board featuring the i.MX93 applications processor.
>
> It features:
> - Dual Cortex-A55
> - 2 GB LPDDR4X / LPDDR4
> - 32 GB eMMC5.1
> - MicroSD slot
> - GbE RJ45 x 2
> - USB2.0 1x Type C, 1x Type A
>
> This file is based upon the one provided by nxp in their own kernel and
> yocto meta layer for the device, but adapted for mainline.
>
> Signed-off-by: Fabian Pflug <f.pflug@xxxxxxxxxxxxxx>
> ---
> arch/arm64/boot/dts/freescale/Makefile | 1 +
> arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts | 613 +++++++++++++++++++++
> 2 files changed, 614 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
> index b6d3fe26d621234ab84353165d20af9d2536f839..c703fce2ebfd8074bd0c6ee76f3c6f9bbd9cf179 100644
> --- a/arch/arm64/boot/dts/freescale/Makefile
> +++ b/arch/arm64/boot/dts/freescale/Makefile
> @@ -295,6 +295,7 @@ imx93-9x9-qsb-i3c-dtbs += imx93-9x9-qsb.dtb imx93-9x9-qsb-i3c.dtbo
> dtb-$(CONFIG_ARCH_MXC) += imx93-9x9-qsb-i3c.dtb
>
> dtb-$(CONFIG_ARCH_MXC) += imx93-11x11-evk.dtb
> +dtb-$(CONFIG_ARCH_MXC) += imx93-11x11-frdm.dtb
> dtb-$(CONFIG_ARCH_MXC) += imx93-14x14-evk.dtb
> dtb-$(CONFIG_ARCH_MXC) += imx93-kontron-bl-osm-s.dtb
> dtb-$(CONFIG_ARCH_MXC) += imx93-phyboard-segin.dtb
> diff --git a/arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts b/arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts
> new file mode 100644
> index 0000000000000000000000000000000000000000..dc6348858024d833a450a6b5d2e54e4fefe9e9cd
> --- /dev/null
> +++ b/arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts
> @@ -0,0 +1,613 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/dts-v1/;
> +
> +#include <dt-bindings/usb/pd.h>
> +#include "imx93.dtsi"
> +
> +/ {
> + compatible = "fsl,imx93-11x11-frdm", "fsl,imx93";
> + model = "NXP i.MX93 11X11 FRDM board";
> +
...
> +
> + eeprom: eeprom@50 {
> + compatible = "atmel,24c256";
> + reg = <0x50>;
> + pagesize = <64>;
> + };
> +};
> +
> +&lpi2c3 {
> + #address-cells = <1>;
> + #size-cells = <0>;
Needn't it, common dts already set it.
Frank
> + clock-frequency = <400000>;
> + pinctrl-0 = <&pinctrl_lpi2c3>;
> + pinctrl-names = "default";
> + status = "okay";
> +
> + ptn5110: tcpc@50 {
> + compatible = "nxp,ptn5110", "tcpci";
> + reg = <0x50>;
> + interrupt-parent = <&gpio3>;
> + interrupts = <27 IRQ_TYPE_LEVEL_LOW>;
> +
> + typec1_con: connector {
> + compatible = "usb-c-connector";
> + data-role = "dual";
> + label = "USB-C";
> + op-sink-microwatt = <15000000>;
> + power-role = "dual";
> + self-powered;
> + sink-pdos = <PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)
> + PDO_VAR(5000, 20000, 3000)>;
> + source-pdos = <PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)>;
> + try-power-role = "sink";
> +
> + ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + port@0 {
> + reg = <0>;
> +
> + typec1_dr_sw: endpoint {
> + remote-endpoint = <&usb1_drd_sw>;
> + };
> + };
> + };
> + };
> + };
> +
> + pcf2131: rtc@53 {
> + compatible = "nxp,pcf2131";
> + reg = <0x53>;
> + interrupt-parent = <&pcal6524>;
> + interrupts = <1 IRQ_TYPE_EDGE_FALLING>;
> + };
> +};
> +
> +&lpuart1 { /* console */
> + pinctrl-0 = <&pinctrl_uart1>;
> + pinctrl-names = "default";
> + status = "okay";
> +};
> +
> +&usbotg1 {
> + adp-disable;
> + disable-over-current;
> + dr_mode = "otg";
> + hnp-disable;
> + srp-disable;
> + usb-role-switch;
> + samsung,picophy-dc-vol-level-adjust = <7>;
> + samsung,picophy-pre-emp-curr-control = <3>;
> + status = "okay";
> +
> + port {
> +
> + usb1_drd_sw: endpoint {
> + remote-endpoint = <&typec1_dr_sw>;
> + };
> + };
> +};
> +
> +&usbotg2 {
> + disable-over-current;
> + dr_mode = "host";
> + samsung,picophy-dc-vol-level-adjust = <7>;
> + samsung,picophy-pre-emp-curr-control = <3>;
> + status = "okay";
> +};
> +
> +&usdhc1 {
> + bus-width = <8>;
> + non-removable;
> + pinctrl-0 = <&pinctrl_usdhc1>;
> + pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
> + pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
> + pinctrl-names = "default", "state_100mhz", "state_200mhz";
> + status = "okay";
> +};
> +
> +&usdhc2 {
> + bus-width = <4>;
> + cd-gpios = <&gpio3 00 GPIO_ACTIVE_LOW>;
> + no-mmc;
> + no-sdio;
> + pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
> + pinctrl-1 = <&pinctrl_usdhc2_100mhz>, <&pinctrl_usdhc2_gpio>;
> + pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>;
> + pinctrl-3 = <&pinctrl_usdhc2_sleep>, <&pinctrl_usdhc2_gpio_sleep>;
> + pinctrl-names = "default", "state_100mhz", "state_200mhz", "sleep";
> + vmmc-supply = <®_usdhc2_vmmc>;
> + status = "okay";
> +};
> +
> +&wdog3 {
> + status = "okay";
> +};
> +
> +&iomuxc {
> +
> + pinctrl_eqos: eqosgrp {
> + fsl,pins = <
> + MX93_PAD_ENET1_MDC__ENET_QOS_MDC 0x57e
> + MX93_PAD_ENET1_MDIO__ENET_QOS_MDIO 0x57e
> + MX93_PAD_ENET1_RD0__ENET_QOS_RGMII_RD0 0x57e
> + MX93_PAD_ENET1_RD1__ENET_QOS_RGMII_RD1 0x57e
> + MX93_PAD_ENET1_RD2__ENET_QOS_RGMII_RD2 0x57e
> + MX93_PAD_ENET1_RD3__ENET_QOS_RGMII_RD3 0x57e
> + MX93_PAD_ENET1_RXC__CCM_ENET_QOS_CLOCK_GENERATE_RX_CLK 0x58e
> + MX93_PAD_ENET1_RX_CTL__ENET_QOS_RGMII_RX_CTL 0x57e
> + MX93_PAD_ENET1_TD0__ENET_QOS_RGMII_TD0 0x57e
> + MX93_PAD_ENET1_TD1__ENET_QOS_RGMII_TD1 0x57e
> + MX93_PAD_ENET1_TD2__ENET_QOS_RGMII_TD2 0x57e
> + MX93_PAD_ENET1_TD3__ENET_QOS_RGMII_TD3 0x57e
> + MX93_PAD_ENET1_TXC__CCM_ENET_QOS_CLOCK_GENERATE_TX_CLK 0x58e
> + MX93_PAD_ENET1_TX_CTL__ENET_QOS_RGMII_TX_CTL 0x57e
> + >;
> + };
> +
> + pinctrl_eqos_sleep: eqossleepgrp {
> + fsl,pins = <
> + MX93_PAD_ENET1_MDC__GPIO4_IO00 0x31e
> + MX93_PAD_ENET1_MDIO__GPIO4_IO01 0x31e
> + MX93_PAD_ENET1_RD0__GPIO4_IO10 0x31e
> + MX93_PAD_ENET1_RD1__GPIO4_IO11 0x31e
> + MX93_PAD_ENET1_RD2__GPIO4_IO12 0x31e
> + MX93_PAD_ENET1_RD3__GPIO4_IO13 0x31e
> + MX93_PAD_ENET1_RXC__GPIO4_IO09 0x31e
> + MX93_PAD_ENET1_RX_CTL__GPIO4_IO08 0x31e
> + MX93_PAD_ENET1_TD0__GPIO4_IO05 0x31e
> + MX93_PAD_ENET1_TD1__GPIO4_IO04 0x31e
> + MX93_PAD_ENET1_TD2__GPIO4_IO03 0x31e
> + MX93_PAD_ENET1_TD3__GPIO4_IO02 0x31e
> + MX93_PAD_ENET1_TXC__GPIO4_IO07 0x31e
> + MX93_PAD_ENET1_TX_CTL__GPIO4_IO06 0x31e
> + >;
> + };
> +
> + pinctrl_fec: fecgrp {
> + fsl,pins = <
> + MX93_PAD_ENET2_MDC__ENET1_MDC 0x57e
> + MX93_PAD_ENET2_MDIO__ENET1_MDIO 0x57e
> + MX93_PAD_ENET2_RD0__ENET1_RGMII_RD0 0x57e
> + MX93_PAD_ENET2_RD1__ENET1_RGMII_RD1 0x57e
> + MX93_PAD_ENET2_RD2__ENET1_RGMII_RD2 0x57e
> + MX93_PAD_ENET2_RD3__ENET1_RGMII_RD3 0x57e
> + MX93_PAD_ENET2_RXC__ENET1_RGMII_RXC 0x58e
> + MX93_PAD_ENET2_RX_CTL__ENET1_RGMII_RX_CTL 0x57e
> + MX93_PAD_ENET2_TD0__ENET1_RGMII_TD0 0x57e
> + MX93_PAD_ENET2_TD1__ENET1_RGMII_TD1 0x57e
> + MX93_PAD_ENET2_TD2__ENET1_RGMII_TD2 0x57e
> + MX93_PAD_ENET2_TD3__ENET1_RGMII_TD3 0x57e
> + MX93_PAD_ENET2_TXC__ENET1_RGMII_TXC 0x58e
> + MX93_PAD_ENET2_TX_CTL__ENET1_RGMII_TX_CTL 0x57e
> + >;
> + };
> +
> + pinctrl_fec_sleep: fecsleepgrp {
> + fsl,pins = <
> + MX93_PAD_ENET2_MDC__GPIO4_IO14 0x51e
> + MX93_PAD_ENET2_MDIO__GPIO4_IO15 0x51e
> + MX93_PAD_ENET2_RD0__GPIO4_IO24 0x51e
> + MX93_PAD_ENET2_RD1__GPIO4_IO25 0x51e
> + MX93_PAD_ENET2_RD2__GPIO4_IO26 0x51e
> + MX93_PAD_ENET2_RD3__GPIO4_IO27 0x51e
> + MX93_PAD_ENET2_RXC__GPIO4_IO23 0x51e
> + MX93_PAD_ENET2_RX_CTL__GPIO4_IO22 0x51e
> + MX93_PAD_ENET2_TD0__GPIO4_IO19 0x51e
> + MX93_PAD_ENET2_TD1__GPIO4_IO18 0x51e
> + MX93_PAD_ENET2_TD2__GPIO4_IO17 0x51e
> + MX93_PAD_ENET2_TD3__GPIO4_IO16 0x51e
> + MX93_PAD_ENET2_TXC__GPIO4_IO21 0x51e
> + MX93_PAD_ENET2_TX_CTL__GPIO4_IO20 0x51e
> + >;
> + };
> +
> + pinctrl_flexcan2: flexcan2grp {
> + fsl,pins = <
> + MX93_PAD_GPIO_IO25__CAN2_TX 0x139e
> + MX93_PAD_GPIO_IO27__CAN2_RX 0x139e
> + >;
> + };
> +
> + pinctrl_lpi2c2: lpi2c2grp {
> + fsl,pins = <
> + MX93_PAD_I2C2_SCL__LPI2C2_SCL 0x40000b9e
> + MX93_PAD_I2C2_SDA__LPI2C2_SDA 0x40000b9e
> + >;
> + };
> +
> + pinctrl_lpi2c3: lpi2c3grp {
> + fsl,pins = <
> + MX93_PAD_GPIO_IO28__LPI2C3_SDA 0x40000b9e
> + MX93_PAD_GPIO_IO29__LPI2C3_SCL 0x40000b9e
> + >;
> + };
> +
> + pinctrl_pcal6524: pcal6524grp {
> + fsl,pins = <
> + MX93_PAD_CCM_CLKO2__GPIO3_IO27 0x31e
> + >;
> + };
> +
> + pinctrl_reg_usdhc2_vmmc: regusdhc2vmmcgrp {
> + fsl,pins = <
> + MX93_PAD_SD2_RESET_B__GPIO3_IO07 0x31e
> + >;
> + };
> +
> + pinctrl_uart1: uart1grp {
> + fsl,pins = <
> + MX93_PAD_UART1_RXD__LPUART1_RX 0x31e
> + MX93_PAD_UART1_TXD__LPUART1_TX 0x31e
> + >;
> + };
> +
> + /* need to config the SION for data and cmd pad, refer to ERR052021 */
> + pinctrl_usdhc1: usdhc1grp {
> + fsl,pins = <
> + MX93_PAD_SD1_CLK__USDHC1_CLK 0x1582
> + MX93_PAD_SD1_CMD__USDHC1_CMD 0x40001382
> + MX93_PAD_SD1_DATA0__USDHC1_DATA0 0x40001382
> + MX93_PAD_SD1_DATA1__USDHC1_DATA1 0x40001382
> + MX93_PAD_SD1_DATA2__USDHC1_DATA2 0x40001382
> + MX93_PAD_SD1_DATA3__USDHC1_DATA3 0x40001382
> + MX93_PAD_SD1_DATA4__USDHC1_DATA4 0x40001382
> + MX93_PAD_SD1_DATA5__USDHC1_DATA5 0x40001382
> + MX93_PAD_SD1_DATA6__USDHC1_DATA6 0x40001382
> + MX93_PAD_SD1_DATA7__USDHC1_DATA7 0x40001382
> + MX93_PAD_SD1_STROBE__USDHC1_STROBE 0x1582
> + >;
> + };
> +
> + /* need to config the SION for data and cmd pad, refer to ERR052021 */
> + pinctrl_usdhc1_100mhz: usdhc1-100mhzgrp {
> + fsl,pins = <
> + MX93_PAD_SD1_CLK__USDHC1_CLK 0x158e
> + MX93_PAD_SD1_CMD__USDHC1_CMD 0x4000138e
> + MX93_PAD_SD1_DATA0__USDHC1_DATA0 0x4000138e
> + MX93_PAD_SD1_DATA1__USDHC1_DATA1 0x4000138e
> + MX93_PAD_SD1_DATA2__USDHC1_DATA2 0x4000138e
> + MX93_PAD_SD1_DATA3__USDHC1_DATA3 0x4000138e
> + MX93_PAD_SD1_DATA4__USDHC1_DATA4 0x4000138e
> + MX93_PAD_SD1_DATA5__USDHC1_DATA5 0x4000138e
> + MX93_PAD_SD1_DATA6__USDHC1_DATA6 0x4000138e
> + MX93_PAD_SD1_DATA7__USDHC1_DATA7 0x4000138e
> + MX93_PAD_SD1_STROBE__USDHC1_STROBE 0x158e
> + >;
> + };
> +
> + /* need to config the SION for data and cmd pad, refer to ERR052021 */
> + pinctrl_usdhc1_200mhz: usdhc1-200mhzgrp {
> + fsl,pins = <
> + MX93_PAD_SD1_CLK__USDHC1_CLK 0x15fe
> + MX93_PAD_SD1_CMD__USDHC1_CMD 0x400013fe
> + MX93_PAD_SD1_DATA0__USDHC1_DATA0 0x400013fe
> + MX93_PAD_SD1_DATA1__USDHC1_DATA1 0x400013fe
> + MX93_PAD_SD1_DATA2__USDHC1_DATA2 0x400013fe
> + MX93_PAD_SD1_DATA3__USDHC1_DATA3 0x400013fe
> + MX93_PAD_SD1_DATA4__USDHC1_DATA4 0x400013fe
> + MX93_PAD_SD1_DATA5__USDHC1_DATA5 0x400013fe
> + MX93_PAD_SD1_DATA6__USDHC1_DATA6 0x400013fe
> + MX93_PAD_SD1_DATA7__USDHC1_DATA7 0x400013fe
> + MX93_PAD_SD1_STROBE__USDHC1_STROBE 0x15fe
> + >;
> + };
> +
> + pinctrl_usdhc2_gpio: usdhc2gpiogrp {
> + fsl,pins = <
> + MX93_PAD_SD2_CD_B__GPIO3_IO00 0x31e
> + >;
> + };
> +
> + pinctrl_usdhc2_gpio_sleep: usdhc2gpiosleepgrp {
> + fsl,pins = <
> + MX93_PAD_SD2_CD_B__GPIO3_IO00 0x51e
> + >;
> + };
> +
> + /* need to config the SION for data and cmd pad, refer to ERR052021 */
> + pinctrl_usdhc2: usdhc2grp {
> + fsl,pins = <
> + MX93_PAD_SD2_CLK__USDHC2_CLK 0x1582
> + MX93_PAD_SD2_CMD__USDHC2_CMD 0x40001382
> + MX93_PAD_SD2_DATA0__USDHC2_DATA0 0x40001382
> + MX93_PAD_SD2_DATA1__USDHC2_DATA1 0x40001382
> + MX93_PAD_SD2_DATA2__USDHC2_DATA2 0x40001382
> + MX93_PAD_SD2_DATA3__USDHC2_DATA3 0x40001382
> + MX93_PAD_SD2_VSELECT__USDHC2_VSELECT 0x51e
> + >;
> + };
> +
> + /* need to config the SION for data and cmd pad, refer to ERR052021 */
> + pinctrl_usdhc2_100mhz: usdhc2-100mhzgrp {
> + fsl,pins = <
> + MX93_PAD_SD2_CLK__USDHC2_CLK 0x158e
> + MX93_PAD_SD2_CMD__USDHC2_CMD 0x4000138e
> + MX93_PAD_SD2_DATA0__USDHC2_DATA0 0x4000138e
> + MX93_PAD_SD2_DATA1__USDHC2_DATA1 0x4000138e
> + MX93_PAD_SD2_DATA2__USDHC2_DATA2 0x4000138e
> + MX93_PAD_SD2_DATA3__USDHC2_DATA3 0x4000138e
> + MX93_PAD_SD2_VSELECT__USDHC2_VSELECT 0x51e
> + >;
> + };
> +
> + /* need to config the SION for data and cmd pad, refer to ERR052021 */
> + pinctrl_usdhc2_200mhz: usdhc2-200mhzgrp {
> + fsl,pins = <
> + MX93_PAD_SD2_CLK__USDHC2_CLK 0x15fe
> + MX93_PAD_SD2_CMD__USDHC2_CMD 0x400013fe
> + MX93_PAD_SD2_DATA0__USDHC2_DATA0 0x400013fe
> + MX93_PAD_SD2_DATA1__USDHC2_DATA1 0x400013fe
> + MX93_PAD_SD2_DATA2__USDHC2_DATA2 0x400013fe
> + MX93_PAD_SD2_DATA3__USDHC2_DATA3 0x400013fe
> + MX93_PAD_SD2_VSELECT__USDHC2_VSELECT 0x51e
> + >;
> + };
> +
> + pinctrl_usdhc2_sleep: usdhc2-sleepgrp {
> + fsl,pins = <
> + MX93_PAD_SD2_CLK__GPIO3_IO01 0x51e
> + MX93_PAD_SD2_CMD__GPIO3_IO02 0x51e
> + MX93_PAD_SD2_DATA0__GPIO3_IO03 0x51e
> + MX93_PAD_SD2_DATA1__GPIO3_IO04 0x51e
> + MX93_PAD_SD2_DATA2__GPIO3_IO05 0x51e
> + MX93_PAD_SD2_DATA3__GPIO3_IO06 0x51e
> + MX93_PAD_SD2_VSELECT__GPIO3_IO19 0x51e
> + >;
> + };
> +};
>
> --
> 2.39.5
>
Return-Path: <linux-kernel+bounces-665762-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 790D941E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:59:41 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id B1D7FA250C6
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:59:05 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 7AA8828D85D;
Wed, 28 May 2025 15:58:48 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="kpa9c+Ya"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id A7699286436
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:58:47 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447927; cv=none; b=mHKfFrn0hw0ecuvh0ZzyxRFtLzW/9YYeMZ8dqdxiSo1K65dIVXuFJMHhltgAVM50Cc1KhWBnh0qAf2smekX0NUtAnCkDOMUjrhF6f2zXUxjQ/dcqxlehJzRpg07L7UUIBJ38OlnuD80s7NfrSQRkWhMmf7yoEG6VmN39FFrCSHU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447927; c=relaxed/simple;
bh=SU+mU5oQxy8bSSEFYsj0BOipry6meOH69Ie9WgYQZVU=;
h=Date:From:To:Cc:Subject:Message-ID:MIME-Version:Content-Type:
Content-Disposition; b=cNpvCe7x3KGW5BfU9tbWlNWqkE7z/3pZArTlIo9nX9rCL6DaOQLmyIEN/iuQIMOeTHED3gBR1iEUOw92+lSg/9IzS4htLkUTjSJyLX3Oyq7hCSBL+VEyMdOiE9RkkCvb0c+8+gVJpywsWGlZ42dD9FEFDXovpUnGBNIrkRm9IeM=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=kpa9c+Ya; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id A24AFC4CEED;
Wed, 28 May 2025 15:58:46 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org;
s=korg; t=1748447927;
bh=SU+mU5oQxy8bSSEFYsj0BOipry6meOH69Ie9WgYQZVU=;
h=Date:From:To:Cc:Subject:From;
b=kpa9c+YaPO8qrDqbTzmKusm3H9dr60VxNUMdOINNKpeSKlRNhQ+DN1tBiNa8tvfu+
Wbxuran5oLhEF2F/X0T3FaSbM4dHxR77qfcQ1j2mAlq+AWau28sA+X1UPs96FsrrnE
yh42uABVH0lME13MVsRlu5Fyct8Kf6NY1RA/orLQ=
Date: Wed, 28 May 2025 17:56:52 +0200
From: Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx>
To: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>,
Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
Cc: "Rafael J. Wysocki" <rafael@xxxxxxxxxx>,
Danilo Krummrich <dakr@xxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx,
Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx>
Subject: [GIT PULL] Driver core changes for 6.16-rc1
Message-ID: <aDcyRMojWUbAllVX@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
The following changes since commit 82f2b0b97b36ee3fcddf0f0780a9a0825d52fec3:
Linux 6.15-rc6 (2025-05-11 14:54:11 -0700)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/driver-core/driver-core.git tags/driver-core-6.16-rc1
for you to fetch changes up to 071d8e4c2a3b0999a9b822e2eb8854784a350f8a:
kernfs: Relax constraint in draining guard (2025-05-21 14:23:13 +0200)
----------------------------------------------------------------
Driver core changes for 6.16-rc1
Here are the driver core / kernfs changes for 6.16-rc1.
Not a huge number of changes this development cycle, here's the summary
of what is included in here:
- kernfs locking tweaks, pushing some global locks down into a per-fs
image lock
- rust driver core and pci device bindings added for new features.
- sysfs const work for bin_attributes. This churn should now be
completed for those types of attributes
- auxbus device creation helpers added
- fauxbus fix for creating sysfs files after the probe completed
properly
- other tiny updates for driver core things.
All of these have been in linux-next for over a week with no reported
issues.
Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
----------------------------------------------------------------
Andy Shevchenko (2):
devres: Move devm_*_action*() APIs to devres.h
devres: Add devm_is_action_added() helper
Dan Carpenter (1):
driver core: auxiliary bus: Fix IS_ERR() vs NULL mixup in __devm_auxiliary_device_create()
Danilo Krummrich (10):
rust: device: implement impl_device_context_deref!
rust: device: implement impl_device_context_into_aref!
rust: device: implement device context for Device
rust: platform: preserve device context in AsRef
rust: pci: preserve device context in AsRef
rust: device: implement Bound device context
rust: pci: move iomap_region() to impl Device<Bound>
rust: devres: require a bound device
rust: dma: require a bound device
Merge tag 'topic/device-context-2025-04-17' into driver-core-next
Eric Biggers (1):
firmware_loader: use SHA-256 library API instead of crypto_shash API
Greg Kroah-Hartman (4):
Merge 6.15-rc4 into driver-core-next
Merge tag 'gpiod-devm-is-action-added-for-v6.16-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/brgl/linux into driver-core-next
Merge 6.15-rc6 into driver-core-next
drivers: hv: fix up const issue with vmbus_chan_bin_attrs
Jerome Brunet (1):
driver core: auxiliary bus: add device creation helpers
Jinliang Zheng (2):
kernfs: switch global kernfs_idr_lock to per-fs lock
kernfs: switch global kernfs_rename_lock to per-fs lock
Johan Hovold (1):
component: do not try to unbind unbound components
Kurt Borja (1):
driver core: faux: Add sysfs groups after probing
Michael Ellerman (1):
Documentation: embargoed-hardware-issues.rst: Remove myself
Michal Koutný (1):
kernfs: Relax constraint in draining guard
Raag Jadav (1):
devres: simplify devm_kstrdup() using devm_kmemdup()
Thomas Weißschuh (2):
sysfs: constify bin_attribute argument of bin_attribute::read/write()
sysfs: constify attribute_group::bin_attrs
Timur Tabi (1):
docs: debugfs: do not recommend debugfs_remove_recursive
Woody Zhang (1):
platform: replace magic number with macro PLATFORM_DEVID_NONE
Zijun Hu (2):
software node: Correct a OOB check in software_node_get_reference_args()
PM: wakeup: Do not expose 4 device wakeup source APIs
Documentation/filesystems/debugfs.rst | 19 ++--
.../driver_development_debugging_guide.rst | 2 +-
.../process/embargoed-hardware-issues.rst | 1 -
drivers/base/auxiliary.c | 108 +++++++++++++++++++++
drivers/base/component.c | 3 +-
drivers/base/devres.c | 20 ++--
drivers/base/faux.c | 22 ++++-
drivers/base/firmware_loader/Kconfig | 4 +-
drivers/base/firmware_loader/main.c | 34 +------
drivers/base/platform.c | 2 +-
drivers/base/power/wakeup.c | 12 +--
drivers/base/swnode.c | 2 +-
drivers/hv/vmbus_drv.c | 2 +-
fs/kernfs/dir.c | 33 ++++---
fs/kernfs/file.c | 3 +-
fs/kernfs/kernfs-internal.h | 16 ++-
fs/sysfs/group.c | 6 +-
include/linux/auxiliary_bus.h | 17 ++++
include/linux/device.h | 38 --------
include/linux/device/devres.h | 41 ++++++++
include/linux/pm_wakeup.h | 15 ---
include/linux/sysfs.h | 27 +-----
rust/kernel/device.rs | 90 ++++++++++++++++-
rust/kernel/devres.rs | 17 ++--
rust/kernel/dma.rs | 14 +--
rust/kernel/pci.rs | 33 +++----
rust/kernel/platform.rs | 32 ++----
27 files changed, 378 insertions(+), 235 deletions(-)
Return-Path: <linux-kernel+bounces-665763-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 811E941E003FB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 11:59:42 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id A2C997A714B
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 15:58:23 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 7C71628CF6F;
Wed, 28 May 2025 15:58:58 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="RrtVL2cb"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id A3CF828C5D0;
Wed, 28 May 2025 15:58:57 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748447937; cv=none; b=VV7vVxnhOGyaAooUShcADnuT5rSzMwBP1jkFAZmhtob84p/wvnNhCIWqOEZf7FIvhAtBT45ROfAHXIm9mhHJh9EatB3JX9Jz2isRQYm+ltworv/Teh6li9Y+rjWQOOoL26TXttD94mC1O4f0SAX3McF7oEpresIoFdCXiKqRMkU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748447937; c=relaxed/simple;
bh=xKowylPyTdzZfPOURaXcphgFk7iTFVGDPZA0kg7cWTs=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=nKYFSiSzFk6CQJ/juPkWbGXsEz0OJZoJ5Rcetn882M4jhPIeyVDTSQXied1rfUhb5yogwzs3Jz69e6kfUL49vqyBxTRH80u/ZNGB/dhHH3EMdT3WtLJD+Hdl1/EEGr6sRtvKgQZ/jFR4lh8MxUkb7LNmkJpMf1l887hZZ16Yu+I=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RrtVL2cb; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 99952C4CEE3;
Wed, 28 May 2025 15:58:56 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748447937;
bh=xKowylPyTdzZfPOURaXcphgFk7iTFVGDPZA0kg7cWTs=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=RrtVL2cbP+6dJkhkxrxYdcnXryUcMIlBpp2b7KxMbNPx55IFR5QvEseVCG45enlzM
GMbM1ZD5Yx7uzeCtuWPi+Wxr0kges79m1AfjE/NUJoxKwUG46JbmY5vwqThWQHKyQr
3wMVyhS4QzkOdSD8jGts5sQemxrdCChiyxYw/foL5WwM23a3ZajhGo083EHbfduqqT
Fio8UQy1xlQd171NSbWUPGYwtMEjRDvMA4dWCQa0SPdDufZ9IoE3a/Uucc69oPHwDk
J6nRIbfG+r//UIl8rmYgJHqHzZ5U0oesNpuTUJXZGxfw7f+BEqgHk84IhIKEPEeaiq
lS38LXDYI62+g==
Date: Wed, 28 May 2025 12:58:54 -0300
From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
To: Ian Rogers <irogers@xxxxxxxxxx>
Cc: Namhyung Kim <namhyung@xxxxxxxxxx>,
Adrian Hunter <adrian.hunter@xxxxxxxxx>,
Alexander Shishkin <alexander.shishkin@xxxxxxxxxxxxxxx>,
Athira Rajeev <atrajeev@xxxxxxxxxxxxxxxxxx>,
Bill Wendling <morbo@xxxxxxxxxx>,
Chaitanya S Prakash <chaitanyas.prakash@xxxxxxx>,
Fei Lang <langfei@xxxxxxxxxx>, Howard Chu <howardchu95@xxxxxxxxx>,
Ingo Molnar <mingo@xxxxxxxxxx>,
James Clark <james.clark@xxxxxxxxxx>, Jiri Olsa <jolsa@xxxxxxxxxx>,
Justin Stitt <justinstitt@xxxxxxxxxx>,
Kan Liang <kan.liang@xxxxxxxxxxxxxxx>,
Mark Rutland <mark.rutland@xxxxxxx>,
Nathan Chancellor <nathan@xxxxxxxxxx>,
Nick Desaulniers <nick.desaulniers+lkml@xxxxxxxxx>,
Peter Zijlstra <peterz@xxxxxxxxxxxxx>,
Stephen Brennan <stephen.s.brennan@xxxxxxxxxx>,
Linux Kernel Mailing List <linux-kernel@xxxxxxxxxxxxxxx>,
linux-perf-users@xxxxxxxxxxxxxxx
Subject: Re: [PATCH 1/1] Revert "perf thread: Ensure comm_lock held for
comm_list"
Message-ID: <aDcyvvOKZkRYbjul@x1>
References: <aDcyVLVpZRui1ole@x1>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <aDcyVLVpZRui1ole@x1>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Ian,
This one had hit perf-tools-next, so I'm reverting it till we
figure out, since I'm trying to finish processing patches real soon now
for this window, to give it some time to soak in linux-next.
I noticed that sometimes when trying to exit 'perf top' it just
sat there, so doing a bisect I ended up on this one, had no time to
properly investigate it.
- Arnaldo
On Wed, May 28, 2025 at 12:57:11PM -0300, Arnaldo Carvalho de Melo wrote:
> This reverts commit 8f454c95817d15ee529d58389612ea4b34f5ffb3.
>
> 'perf top' is freezing on exit sometimes, bisected to this one, revert.
>
> Cc: Adrian Hunter <adrian.hunter@xxxxxxxxx>
> Cc: Alexander Shishkin <alexander.shishkin@xxxxxxxxxxxxxxx>
> Cc: Athira Rajeev <atrajeev@xxxxxxxxxxxxxxxxxx>
> Cc: Bill Wendling <morbo@xxxxxxxxxx>
> Cc: Chaitanya S Prakash <chaitanyas.prakash@xxxxxxx>
> Cc: Fei Lang <langfei@xxxxxxxxxx>
> Cc: Howard Chu <howardchu95@xxxxxxxxx>
> Cc: Ian Rogers <irogers@xxxxxxxxxx>
> Cc: Ingo Molnar <mingo@xxxxxxxxxx>
> Cc: James Clark <james.clark@xxxxxxxxxx>
> Cc: Jiri Olsa <jolsa@xxxxxxxxxx>
> Cc: Justin Stitt <justinstitt@xxxxxxxxxx>
> Cc: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>
> Cc: Mark Rutland <mark.rutland@xxxxxxx>
> Cc: Namhyung Kim <namhyung@xxxxxxxxxx>
> Cc: Nathan Chancellor <nathan@xxxxxxxxxx>
> Cc: Nick Desaulniers <nick.desaulniers+lkml@xxxxxxxxx>
> Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
> Cc: Stephen Brennan <stephen.s.brennan@xxxxxxxxxx>
> Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
> ---
> tools/perf/util/comm.c | 2 --
> tools/perf/util/thread.c | 17 ++++-------------
> tools/perf/util/thread.h | 9 ++++-----
> 3 files changed, 8 insertions(+), 20 deletions(-)
>
> diff --git a/tools/perf/util/comm.c b/tools/perf/util/comm.c
> index 9880247a2c3364cb..8aa456d7c2cd2d74 100644
> --- a/tools/perf/util/comm.c
> +++ b/tools/perf/util/comm.c
> @@ -24,7 +24,6 @@ static struct comm_strs {
> static void comm_strs__remove_if_last(struct comm_str *cs);
>
> static void comm_strs__init(void)
> - NO_THREAD_SAFETY_ANALYSIS /* Inherently single threaded due to pthread_once. */
> {
> init_rwsem(&_comm_strs.lock);
> _comm_strs.capacity = 16;
> @@ -120,7 +119,6 @@ static void comm_strs__remove_if_last(struct comm_str *cs)
> }
>
> static struct comm_str *__comm_strs__find(struct comm_strs *comm_strs, const char *str)
> - SHARED_LOCKS_REQUIRED(comm_strs->lock)
> {
> struct comm_str **result;
>
> diff --git a/tools/perf/util/thread.c b/tools/perf/util/thread.c
> index c202b98b36c29215..415c0e5d1e751a47 100644
> --- a/tools/perf/util/thread.c
> +++ b/tools/perf/util/thread.c
> @@ -41,7 +41,6 @@ int thread__init_maps(struct thread *thread, struct machine *machine)
> }
>
> struct thread *thread__new(pid_t pid, pid_t tid)
> - NO_THREAD_SAFETY_ANALYSIS /* Allocation/creation is inherently single threaded. */
> {
> RC_STRUCT(thread) *_thread = zalloc(sizeof(*_thread));
> struct thread *thread;
> @@ -203,29 +202,22 @@ int thread__set_namespaces(struct thread *thread, u64 timestamp,
>
> struct comm *thread__comm(struct thread *thread)
> {
> - struct comm *res = NULL;
> + if (list_empty(thread__comm_list(thread)))
> + return NULL;
>
> - down_read(thread__comm_lock(thread));
> - if (!list_empty(thread__comm_list(thread)))
> - res = list_first_entry(thread__comm_list(thread), struct comm, list);
> - up_read(thread__comm_lock(thread));
> - return res;
> + return list_first_entry(thread__comm_list(thread), struct comm, list);
> }
>
> struct comm *thread__exec_comm(struct thread *thread)
> {
> struct comm *comm, *last = NULL, *second_last = NULL;
>
> - down_read(thread__comm_lock(thread));
> list_for_each_entry(comm, thread__comm_list(thread), list) {
> - if (comm->exec) {
> - up_read(thread__comm_lock(thread));
> + if (comm->exec)
> return comm;
> - }
> second_last = last;
> last = comm;
> }
> - up_read(thread__comm_lock(thread));
>
> /*
> * 'last' with no start time might be the parent's comm of a synthesized
> @@ -241,7 +233,6 @@ struct comm *thread__exec_comm(struct thread *thread)
>
> static int ____thread__set_comm(struct thread *thread, const char *str,
> u64 timestamp, bool exec)
> - EXCLUSIVE_LOCKS_REQUIRED(thread__comm_lock(thread))
> {
> struct comm *new, *curr = thread__comm(thread);
>
> diff --git a/tools/perf/util/thread.h b/tools/perf/util/thread.h
> index 56e08c8ae005e82b..cd574a896418ac94 100644
> --- a/tools/perf/util/thread.h
> +++ b/tools/perf/util/thread.h
> @@ -236,15 +236,14 @@ static inline struct rw_semaphore *thread__namespaces_lock(struct thread *thread
> return &RC_CHK_ACCESS(thread)->namespaces_lock;
> }
>
> -static inline struct rw_semaphore *thread__comm_lock(struct thread *thread)
> +static inline struct list_head *thread__comm_list(struct thread *thread)
> {
> - return &RC_CHK_ACCESS(thread)->comm_lock;
> + return &RC_CHK_ACCESS(thread)->comm_list;
> }
>
> -static inline struct list_head *thread__comm_list(struct thread *thread)
> - SHARED_LOCKS_REQUIRED(thread__comm_lock(thread))
> +static inline struct rw_semaphore *thread__comm_lock(struct thread *thread)
> {
> - return &RC_CHK_ACCESS(thread)->comm_list;
> + return &RC_CHK_ACCESS(thread)->comm_lock;
> }
>
> static inline u64 thread__db_id(const struct thread *thread)
> --
> 2.49.0
>
Return-Path: <linux-kernel+bounces-665764-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id AEC3141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:00:31 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 820C61BC7D63
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:00:44 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 631EA279903;
Wed, 28 May 2025 16:00:25 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="JwnAgZHN"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id AAF1C3234
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:00:24 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448024; cv=none; b=Q7+pPEKThBuzEqkVzM/7N0MC+Qt2xmoqJ+sDCG081ZrZwUVSEMgzY30PwmIcMkruaOVjVbZ/6wEJmf/HEm/Ihl6yUMu6DEKlIWEzBpu5j1IIYECheTQFTx4Wz85VRtor59XNcP1+Q7o83zsH+1mHAF0a740N8w3NY6N/O1r8Klk=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448024; c=relaxed/simple;
bh=KcwudleOKREFiTnzrvnQ2gW5IQ/mRaXJ1eFhUaLPNiY=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=pjDWIgL2zLgiCTZ7PjKlmqdzLBiLUn/ReD7Bp8qaId4Ondo+I3xUaZZC0qo4Enocm+ycIvfXNtsSdNyLwWnuiohOTN6aogfslNSv3ELTNWqL5yDSAR8AdoVl2/Io8KQJ4rR8Cffr6Jc5/da+WEiNiW8xls4RcaR3+XKX3ZuGicY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JwnAgZHN; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id CBA42C4CEE3;
Wed, 28 May 2025 16:00:23 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748448024;
bh=KcwudleOKREFiTnzrvnQ2gW5IQ/mRaXJ1eFhUaLPNiY=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=JwnAgZHNMom76PzcOL3VWdBEGAku5nLRro0GIgJlXJ/FNpRhqsVNHjWhFqv4Koxfj
Fcp6kECQ1k2FqaEH8xXl07P1Ku2dalyl3w1Y3/ivjZQ60wHLD87Gk4+XqPQUmd9xUC
1GbZ4Gi2PNIeQkT+bG5S1mvF3xSi7zuzX8Ft2B7D1wmGj0/iAPWsfxjkBgrxHsiXZX
1kwSYp6Oh6bJbJ6/kYpM+7SbhtYaaOPQZkbo+ROJM8jvd0rcecWaL9VGcelIQHgB7x
SlqXt7Myp379Z4xM5xoYIVM3tUTgUlcaGdKuhkhxkGDI2238hks+qnguvoigdADAj+
NIbivoYtWDycg==
Date: Wed, 28 May 2025 16:00:22 +0000
From: Jaegeuk Kim <jaegeuk@xxxxxxxxxx>
To: Chao Yu <chao@xxxxxxxxxx>
Cc: linux-f2fs-devel@xxxxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
syzbot+1fa48dc6faf1ff972d7d@xxxxxxxxxxxxxxxxxxxxxxxxx,
"yohan.joung" <yohan.joung@xxxxxx>
Subject: Re: [PATCH] f2fs: fix to do sanity check on section
ckpt_valid_blocks correctly
Message-ID: <aDczFqQAMoLxcatZ@xxxxxxxxxx>
References: <20250528072045.416898-1-chao@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528072045.416898-1-chao@xxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Thanks, I added the patches back with this fix applied to the original patch. :)
On 05/28, Chao Yu wrote:
> syzbot report a f2fs bug as below:
>
> CPU: 0 UID: 0 PID: 5840 Comm: syz-executor138 Not tainted 6.15.0-rc7-next-20250523-syzkaller #0 PREEMPT(full)
> Call Trace:
> <TASK>
> dump_stack_lvl+0x189/0x250 lib/dump_stack.c:120
> print_address_description mm/kasan/report.c:408 [inline]
> print_report+0xd2/0x2b0 mm/kasan/report.c:521
> kasan_report+0x118/0x150 mm/kasan/report.c:634
> sanity_check_valid_blocks fs/f2fs/segment.h:385 [inline]
> build_sit_entries+0x1b0c/0x1f80 fs/f2fs/segment.c:5060
> f2fs_build_segment_manager+0x3112/0x49f0 fs/f2fs/segment.c:5707
> f2fs_fill_super+0x45bc/0x6c80 fs/f2fs/super.c:4754
> mount_bdev+0x211/0x2c0 fs/super.c:1736
> legacy_get_tree+0xfd/0x1a0 fs/fs_context.c:666
> vfs_get_tree+0x92/0x2b0 fs/super.c:1802
> do_new_mount+0x24a/0xa40 fs/namespace.c:3869
> do_mount fs/namespace.c:4206 [inline]
> __do_sys_mount fs/namespace.c:4417 [inline]
> __se_sys_mount+0x317/0x410 fs/namespace.c:4394
> do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
> do_syscall_64+0xfa/0x3b0 arch/x86/entry/syscall_64.c:94
> entry_SYSCALL_64_after_hwframe+0x77/0x7f
>
> sanity_check_valid_blocks() should be called after set_ckpt_valid_blocks()
> in the loop, otherwise, @segno passed to sanity_check_valid_blocks() will
> become invalid, fix it.
>
> Fixes: 313d10d79a82 ("f2fs: add ckpt_valid_blocks to the section entry")
> Reported-by: syzbot+1fa48dc6faf1ff972d7d@xxxxxxxxxxxxxxxxxxxxxxxxx
> Closes: https://lore.kernel.org/linux-f2fs-devel/68345c8d.a70a0220.253bc2.0097.GAE@xxxxxxxxxx
> Cc: yohan.joung <yohan.joung@xxxxxx>
> Signed-off-by: Chao Yu <chao@xxxxxxxxxx>
> ---
> Change v1:
> - merge this into original patch is fine to me as well.
> fs/f2fs/segment.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
> index 5ff0111ed974..b77b5de71a48 100644
> --- a/fs/f2fs/segment.c
> +++ b/fs/f2fs/segment.c
> @@ -5054,10 +5054,10 @@ static int build_sit_entries(struct f2fs_sb_info *sbi)
> if (__is_large_section(sbi)) {
> unsigned int segno;
>
> - for (segno = 0; segno < MAIN_SEGS(sbi); segno += SEGS_PER_SEC(sbi))
> + for (segno = 0; segno < MAIN_SEGS(sbi); segno += SEGS_PER_SEC(sbi)) {
> set_ckpt_valid_blocks(sbi, segno);
> -
> - sanity_check_valid_blocks(sbi, segno);
> + sanity_check_valid_blocks(sbi, segno);
> + }
> }
>
> if (err)
> --
> 2.49.0
Return-Path: <linux-kernel+bounces-665765-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 64FF541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:01:06 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 340904E3DDC
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:01:07 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id E526628C854;
Wed, 28 May 2025 16:00:56 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="SaHUBoZ1"
Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010040.outbound.protection.outlook.com [52.101.69.40])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 428F91C7017;
Wed, 28 May 2025 16:00:52 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.40
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448055; cv=fail; b=gPoELqW7facHnaH9Rra2FgrOlUhlD8+Wo8uMVvaPPI+cNSTxFBAaMyxJi716lImZ4e2m56oGoImBAZXo8i07JBMF5854iBmbPJuP6UYzUOq/R0gFbuxu7Sa2NRuxnHGYNZbsyjmF9Wm8dLNB2v6hP/T4NUfqqgl+SzGwI925cxk=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448055; c=relaxed/simple;
bh=FyCQClSquZ+8afQ5m//REJmQvDZ0QJqSKVfkqQIkMUU=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=vDj0ZjCw1fJV8WM5qfykTqd6Nj0W6/OhqiLKaXuLalVshTYnMrzFL52gry4k3xJbbNKrWKw1gkZH/rkfat1brHQ07Z422ON0iGrW6age1bLi+FabqbPtwHDcwxz+2WDaB5zlChHbQjl+3H5xvFsAukX5SxOjKG6//XnUtiQ5k88=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=SaHUBoZ1; arc=fail smtp.client-ip=52.101.69.40
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=Tyony/jd75CatrPgaRHPPSt18CyThN3/5l/zS6bGKSd0Kg9S/ToqDDa01nFfx4MrE10o+CNbzicFKWeG87cd7AFVx7AmnWlug8wIohFPgGmTckr8dPMFXnjt9HhvS2l7xOVssp0RSpBzBczL2rmQbllQh8e/Kdnuqb9bqM8/viA0Z8yOCRFdtovnPjjFT/nD4+oqRBP2UKKQLH8OO8D6yctKAVaPClTdCEijRleJQx/a6obGkipUho/bWSjNeDFGhwlVQxnE0DDSKOmHwFFLFHXwLPiL6ZnNPy6yPZwoB85R0+cJLizIn1bbk1suKS6N6D8w/5WYhZG+MDijTUyXzQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=cQP8e1hOsjMVduH4mUkZVLt+/S7HcZ82dt1IhcMZTQ8=;
b=JY+QQuNaP2Yw0kRqlybVN1DOdnE0P6K5V6eeIm++zHiLmkEfcVO4SpMpLzcI5aA1NDdzpoNJl/5yLJTeYypA5UVcul0Biplq7MAB7XojdBZnNMsGD6ESBkmd3/n1ZM7ByndZxIBpe9hiyxWWPG/b4oaGrE1S8tS5lNfl2ehMiKkTQNVLk68NuuuT6sidaourM2SJ5Rml96sFdcxxQcwWJrgBbF9rcCvG1IFlsbTt2762HT5NRanaea1Baoy379wGgE1wHjMPsHxUllT19TbhDGPhOuR3R2WbP9jmr2627j44mXKMMywYyCFNP4/Z9Yf7y4/wBhDR9rufzMYlbQ4xlg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=cQP8e1hOsjMVduH4mUkZVLt+/S7HcZ82dt1IhcMZTQ8=;
b=SaHUBoZ1Spm3bjsHhsV18/ArsLdqQCCmKv4Og4GrEiRWmioXVRPyZpUPwj6neIN/rGkE+A5vfTQePVwc/VcSKKat/OmVn9ahGVJnRnk//IfVJT0AS7Gpcu216UTo5oDG5mteZWGMEtNcSVAL06FflJ+MuLxicQxrjQUwQEwAcz4zXMYwUvNXch2hvdq2g+zMONwtNj03Bd9MFqzv7VkE2AVeVK8/3oYU2VLwBUjHxTwgzykrkatlXvBODG4ixfpg34nFghDFADgV80dLrPd1AUOuqNYGfO27n5N/rQRdOom8W4b84OMbCYP0F/uOal9eUfPQCuC++M82BAx2o+uBbg==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by AS8PR04MB9128.eurprd04.prod.outlook.com (2603:10a6:20b:44b::20) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.25; Wed, 28 May
2025 16:00:50 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
16:00:50 +0000
Date: Wed, 28 May 2025 12:00:40 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: Christophe JAILLET <christophe.jaillet@xxxxxxxxxx>
Cc: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>,
"Rafael J. Wysocki" <rafael@xxxxxxxxxx>,
Daniel Lezcano <daniel.lezcano@xxxxxxxxxx>,
Zhang Rui <rui.zhang@xxxxxxxxx>, Lukasz Luba <lukasz.luba@xxxxxxx>,
Support Opensource <support.opensource@xxxxxxxxxxx>,
Shawn Guo <shawnguo@xxxxxxxxxx>,
Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>,
Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>,
Fabio Estevam <festevam@xxxxxxxxx>,
Niklas =?iso-8859-1?Q?S=F6derlund?= <niklas.soderlund@xxxxxxxxxxxx>,
Geert Uytterhoeven <geert+renesas@xxxxxxxxx>,
Magnus Damm <magnus.damm@xxxxxxxxx>,
Matthias Brugger <matthias.bgg@xxxxxxxxx>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx, kernel-janitors@xxxxxxxxxxxxxxx,
linux-pm@xxxxxxxxxxxxxxx, imx@xxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx,
linux-renesas-soc@xxxxxxxxxxxxxxx,
linux-mediatek@xxxxxxxxxxxxxxxxxxx
Subject: Re: [PATCH] thermal: Constify struct thermal_zone_device_ops
Message-ID: <aDczKA71dqJscfUK@lizhi-Precision-Tower-5810>
References: <5bba3bf0139e2418b306a0f9a2f1f81ef49e88a6.1748165978.git.christophe.jaillet@xxxxxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <5bba3bf0139e2418b306a0f9a2f1f81ef49e88a6.1748165978.git.christophe.jaillet@xxxxxxxxxx>
X-ClientProxiedBy: BY5PR04CA0006.namprd04.prod.outlook.com
(2603:10b6:a03:1d0::16) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|AS8PR04MB9128:EE_
X-MS-Office365-Filtering-Correlation-Id: 62ea17f3-fe0e-4965-e8dd-08dd9e00d12c
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|7416014|376014|52116014|1800799024|366016|7053199007|38350700014;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?mbjPqbBDmqgR+EMcagDD4bxA1N6wYw42bUvlHpZREdqObMCvReRNNSC3LYUQ?=
=?us-ascii?Q?khbymmhlhV3hW0+g0Yd4l0Nu2JV58trFTEzWcNop58v7xvfWjIom+yA63hDL?=
=?us-ascii?Q?ORW24vQVpoRdFmEo61gdQoKHnR4DlE6lD0dBlxqpMeMKH1WmHrxAnVLjO3ES?=
=?us-ascii?Q?hKZyB/Uxq5nqX8zaFBtxnzN3K6HFsHggjxq6ovodIckh4OPaRepD6At5aYFm?=
=?us-ascii?Q?UXqFFFs5F5L4pvfgGQunBmKRJ6WHNBrzgM0Jv0mQIvvOO/tMVmz8B9UXiizs?=
=?us-ascii?Q?6AgQYxXD9Ve5Br2QnwzIguABCXqyU4TH1i5yCQN6xp7eWaYOHbXSA2ZyOZx8?=
=?us-ascii?Q?UaompkifKOCQaf/CoJYjIC/JGJw0OBnAguJddAtM2JTOq2wEakBRGdrP1A0o?=
=?us-ascii?Q?ajrIjp8iS+tp3TY6HsiEnWI5zgZP1TenTjA33Ne9UghkbOjcRbdPyN0Nu90p?=
=?us-ascii?Q?HkbhdJ9BTFqL0bCKayxeqEXhLmIY0QJUaibQ06ZeVky6SKouwJhiHq1oSRqY?=
=?us-ascii?Q?+W0Gs6G65zZuhbZLP5/em8fw/tzeyZ+ojSu1xnrnGu+zCAcG1U3EYZyWY3vU?=
=?us-ascii?Q?29XiMwZw+WvDVoFhvmPMPxlOa7PgCjbNqFo9v6UPXgt+tPJNhxZKd2sE882w?=
=?us-ascii?Q?zgZwjeptrKUrLgzVuOZZdKlymzCRWHThjeLvTokfMqlVuEFMspt55KE++Eon?=
=?us-ascii?Q?7CNXMpWzhoHi5kfFuuqFGAnOzDsuEPWPEdb8A7bwhHmCWnWuZVDFPoPHjGAX?=
=?us-ascii?Q?/X5xWqqe8wD4/6gyDlOJ9otJbUL5Vy3twGJk1VBmfutGN2aYF6OoNWvjrXsR?=
=?us-ascii?Q?qwfiBkidwjKRLoSHQDOhMvrvrDr+WEuP0F2Ja30ACD4JdIC9zBADZC6ee1l/?=
=?us-ascii?Q?diHnix0jI83z4v93zbUNm3EvEsg+PZAyxIxmOfFmiZ+2tMWh7jISeqL+pkgP?=
=?us-ascii?Q?UB8cz3hL0ymD3eSgJkpAGSmSdyDUBPTQ+lz3osDvmQ+YIHpb/RD6y1s0cADj?=
=?us-ascii?Q?Fu/r8DYX8FCzmprW4S6gC2B1F7MxjgMe1dNB3Sl3WgHRuFrTDq3EnV01GBQ3?=
=?us-ascii?Q?rs/3TnlwyKOuGWATKspLKXqc30S2rKI81pQFCGnMtXiipHf9q8e0Czs4KwXX?=
=?us-ascii?Q?WslLRnfOXnwOpgQvrDPdWJchdMfLJIr6hwdshOs/teX30AS8lv8vo/67Nl26?=
=?us-ascii?Q?W63WsI3BqkY1pNWBdVlvR/rwbmoeI7EJ4ht4etnZE1rCxA5fj5L2Oczl4fr0?=
=?us-ascii?Q?x8RmxgYOqOvVN+6yCXj35+oEGY3Vmucjuyj1sRAJZ3lqlW7hw9Eq6WlcPnpU?=
=?us-ascii?Q?eA2cPoe5b7RwXUhAhyBxYiE2CI15PQJOMDOZG0GszOf2zo2XE3QIHfiUOs6i?=
=?us-ascii?Q?47UTgWPYO62jtwU3pySrj+9vQmyupVe3rGQJSdw68JHjn9TH0XhGEnEw0L6C?=
=?us-ascii?Q?9/fEAiZ5/cemanyPIGCh9IBPYZC1O5u1QZCu18gN0eC+WznYyxBtnA=3D=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(52116014)(1800799024)(366016)(7053199007)(38350700014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?Z37KK/4imPu96DvXJCMMgPBgKiWtScUC8gY8K6eYWOmIPEozj1ejt089M1Nx?=
=?us-ascii?Q?wOMqGXn5stOjVBEzkuSnEaNiVFfaFKyr/XwvRIkJnGmvIZpHfVUMAlAZ+iGt?=
=?us-ascii?Q?pNTCSEisZu0mPQOtlxEkGL37KrK5ax3dqzx9YEm7yY4EgfzgwPE+dUveuPt8?=
=?us-ascii?Q?FnXT8fkYiSdBOEN47CTJCwbXncpSNKDPjMaN2FRpL0m1qY3NmqTKo4GjJmU8?=
=?us-ascii?Q?paFYKA5c7bwFCQR0y0kPpll4zAMZUUNSLtRnKRM2IuPdxD3Lo0aCjVqSbDbl?=
=?us-ascii?Q?gKwf0/9PbIwinQhRp9cy7MeUEnGqciKGKBBbwSYV9Vc5BcKvj6TSlnLzVydS?=
=?us-ascii?Q?sRpSwixI9ntCcslEUijrT3VooWvLYlCdElBBT4RteNRrsArUcJViW6/jijkh?=
=?us-ascii?Q?IyGPmTY17YqE+1yCtPmIqjtC4UAD0/Ml6APWEHAZSjlEU21ZWuGP/bO+zNME?=
=?us-ascii?Q?dndx0tmopVH44tQ4e1lGfCwCBSCuURuQcd1mgv1iDY3b45PeT0UOX6ec0rQK?=
=?us-ascii?Q?mHD1mX1N3HrxO3Rrcnemzsktg3wgXnBs+XCuX8RBbI57YNZm7hhg14Z0QQow?=
=?us-ascii?Q?pQBRfp7nFS2UGw3tgD9VD2cb7AgCyjVbuUr3Xam5O62zgY9ZOoZ3Gf0WMQqo?=
=?us-ascii?Q?Tknhhl4oXQohZcL/ufUOMHd2StWtPZaNZGLhUHk8MDajRgMaOKWoJcFurCnS?=
=?us-ascii?Q?cfbqMh+oXh7ncthE1Qz3W5MdqV12auxGdqJy0MuIiXJFHfmby9EjHPjWQEM0?=
=?us-ascii?Q?l78nUwE5MEp5XUmyDToEmiOUIlszxiEhcvcm/y8M9VC8yEWljAwYahSaZEW9?=
=?us-ascii?Q?Uoun3DlWZhqZGqJrWJxJCclRpJ/s0J7MHPavJzGzgYQgM/pANoIuGqoZV9eS?=
=?us-ascii?Q?wMSOnepkFT64InaGRTdfMlcncESfpiAEXWmzI84sPkBK4prmK0bVdiAEafqX?=
=?us-ascii?Q?IMV2pwLDN7p/3F1ZRZ4Lx5suViYqtijXKZ8dPRPj9eAduainlcwskJ+R3q9V?=
=?us-ascii?Q?sSudGEJmowvGmlZhUobhVfQZeu92ea3eXt+4VF3poPvNhcwDmoXjkgqoALLZ?=
=?us-ascii?Q?8o8cmHmiK32L4rafzJijbp/BwqN2SZYdfAiX9P/L82KSjznYSy9T/p6ZNb0/?=
=?us-ascii?Q?2n1CDqzyUDzsg1lOiVAySTX+RU3oaIvoKfov1eOgEdEpcOmBC7JFPj4vcfzR?=
=?us-ascii?Q?0Gf9T9TpAWxD9xNI4qCxPOyfmOFBPsmHaqufOIpD+2CFl81kMNNyTy6SfIXw?=
=?us-ascii?Q?xt5yV5M0ORF6BbYsF5mbAOacnG4MF9XGn2adjovg0H5tqFvXjeJqhNqiDjnW?=
=?us-ascii?Q?JQEMrzoJ/yR+bJ46gDBfg7gm3hG9r5kQ1DE1C2Ln4GxPV/Rj5vhXqL1h1rZQ?=
=?us-ascii?Q?hp6EO4hNtG1p2ASAcVc3KtSEtbWZOd79iOOQuTXVKCq225dYg3gBzrCg8WIg?=
=?us-ascii?Q?nBhcL6tfklB9lmMy56ak/IVcMl0MOVAFyf8yY89GB/Zt0OxGVDYjgC1E1LWx?=
=?us-ascii?Q?uDC/S6dfueQS8cxkf/ZcchWJHWSlTtL3DZ3sCM1ySO9ILsY2bed+LFwdtKjw?=
=?us-ascii?Q?U+iIwBjnJgleK+1cDd81JramJvLjFhukkjYKGwjv?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 62ea17f3-fe0e-4965-e8dd-08dd9e00d12c
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 16:00:50.5095
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: lqMChZdpZB+dQrB+ZfIfYWKLj6iUgk9Ai0TsFcYDCPReEB9Jlepp8//cnp97XmzTaGHH7g3RyCIv5nCaOj690w==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB9128
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Sun, May 25, 2025 at 11:40:04AM +0200, Christophe JAILLET wrote:
> 'struct thermal_zone_device_ops' are not modified in these drivers.
>
> Constifying these structures moves some data to a read-only section, so
> increases overall security, especially when the structure holds some
> function pointers.
>
> On a x86_64, with allmodconfig, as an example:
> Before:
> ======
> text data bss dec hex filename
> 28116 5168 128 33412 8284 drivers/thermal/armada_thermal.o
>
> After:
> =====
> text data bss dec hex filename
> 28244 5040 128 33412 8284 drivers/thermal/armada_thermal.o
>
> Signed-off-by: Christophe JAILLET <christophe.jaillet@xxxxxxxxxx>
> ---
> Compile tested only
> ---
> drivers/thermal/armada_thermal.c | 2 +-
> drivers/thermal/da9062-thermal.c | 2 +-
> drivers/thermal/dove_thermal.c | 2 +-
> drivers/thermal/imx_thermal.c | 2 +-
for imx thermal part
Reviewed-by: Frank Li <Frank.Li@xxxxxxx>
> drivers/thermal/intel/int340x_thermal/int3400_thermal.c | 2 +-
> drivers/thermal/kirkwood_thermal.c | 2 +-
> drivers/thermal/mediatek/lvts_thermal.c | 2 +-
> drivers/thermal/renesas/rcar_thermal.c | 2 +-
> drivers/thermal/spear_thermal.c | 2 +-
> drivers/thermal/st/st_thermal.c | 2 +-
> drivers/thermal/testing/zone.c | 2 +-
> 11 files changed, 11 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/thermal/armada_thermal.c b/drivers/thermal/armada_thermal.c
> index 9bff21068721..c2fbdb534f61 100644
> --- a/drivers/thermal/armada_thermal.c
> +++ b/drivers/thermal/armada_thermal.c
> @@ -408,7 +408,7 @@ static int armada_get_temp_legacy(struct thermal_zone_device *thermal,
> return ret;
> }
>
> -static struct thermal_zone_device_ops legacy_ops = {
> +static const struct thermal_zone_device_ops legacy_ops = {
> .get_temp = armada_get_temp_legacy,
> };
>
> diff --git a/drivers/thermal/da9062-thermal.c b/drivers/thermal/da9062-thermal.c
> index 2077e85ef5ca..a8d4b766ba21 100644
> --- a/drivers/thermal/da9062-thermal.c
> +++ b/drivers/thermal/da9062-thermal.c
> @@ -137,7 +137,7 @@ static int da9062_thermal_get_temp(struct thermal_zone_device *z,
> return 0;
> }
>
> -static struct thermal_zone_device_ops da9062_thermal_ops = {
> +static const struct thermal_zone_device_ops da9062_thermal_ops = {
> .get_temp = da9062_thermal_get_temp,
> };
>
> diff --git a/drivers/thermal/dove_thermal.c b/drivers/thermal/dove_thermal.c
> index f9157a47156b..723bc72f0626 100644
> --- a/drivers/thermal/dove_thermal.c
> +++ b/drivers/thermal/dove_thermal.c
> @@ -106,7 +106,7 @@ static int dove_get_temp(struct thermal_zone_device *thermal,
> return 0;
> }
>
> -static struct thermal_zone_device_ops ops = {
> +static const struct thermal_zone_device_ops ops = {
> .get_temp = dove_get_temp,
> };
>
> diff --git a/drivers/thermal/imx_thermal.c b/drivers/thermal/imx_thermal.c
> index bab52e6b3b15..38c993d1bcb3 100644
> --- a/drivers/thermal/imx_thermal.c
> +++ b/drivers/thermal/imx_thermal.c
> @@ -361,7 +361,7 @@ static bool imx_should_bind(struct thermal_zone_device *tz,
> return trip->type == THERMAL_TRIP_PASSIVE;
> }
>
> -static struct thermal_zone_device_ops imx_tz_ops = {
> +static const struct thermal_zone_device_ops imx_tz_ops = {
> .should_bind = imx_should_bind,
> .get_temp = imx_get_temp,
> .change_mode = imx_change_mode,
> diff --git a/drivers/thermal/intel/int340x_thermal/int3400_thermal.c b/drivers/thermal/intel/int340x_thermal/int3400_thermal.c
> index 0e07693ecf59..5736638c586b 100644
> --- a/drivers/thermal/intel/int340x_thermal/int3400_thermal.c
> +++ b/drivers/thermal/intel/int340x_thermal/int3400_thermal.c
> @@ -515,7 +515,7 @@ static int int3400_thermal_change_mode(struct thermal_zone_device *thermal,
> return result;
> }
>
> -static struct thermal_zone_device_ops int3400_thermal_ops = {
> +static const struct thermal_zone_device_ops int3400_thermal_ops = {
> .get_temp = int3400_thermal_get_temp,
> .change_mode = int3400_thermal_change_mode,
> };
> diff --git a/drivers/thermal/kirkwood_thermal.c b/drivers/thermal/kirkwood_thermal.c
> index 7c2265231668..4619e090f756 100644
> --- a/drivers/thermal/kirkwood_thermal.c
> +++ b/drivers/thermal/kirkwood_thermal.c
> @@ -48,7 +48,7 @@ static int kirkwood_get_temp(struct thermal_zone_device *thermal,
> return 0;
> }
>
> -static struct thermal_zone_device_ops ops = {
> +static const struct thermal_zone_device_ops ops = {
> .get_temp = kirkwood_get_temp,
> };
>
> diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/mediatek/lvts_thermal.c
> index 985925147ac0..acce8fde2cba 100644
> --- a/drivers/thermal/mediatek/lvts_thermal.c
> +++ b/drivers/thermal/mediatek/lvts_thermal.c
> @@ -571,7 +571,7 @@ static irqreturn_t lvts_irq_handler(int irq, void *data)
> return iret;
> }
>
> -static struct thermal_zone_device_ops lvts_ops = {
> +static const struct thermal_zone_device_ops lvts_ops = {
> .get_temp = lvts_get_temp,
> .set_trips = lvts_set_trips,
> };
> diff --git a/drivers/thermal/renesas/rcar_thermal.c b/drivers/thermal/renesas/rcar_thermal.c
> index 00a66ee0a5b0..fdd7afdc4ff6 100644
> --- a/drivers/thermal/renesas/rcar_thermal.c
> +++ b/drivers/thermal/renesas/rcar_thermal.c
> @@ -277,7 +277,7 @@ static int rcar_thermal_get_temp(struct thermal_zone_device *zone, int *temp)
> return rcar_thermal_get_current_temp(priv, temp);
> }
>
> -static struct thermal_zone_device_ops rcar_thermal_zone_ops = {
> +static const struct thermal_zone_device_ops rcar_thermal_zone_ops = {
> .get_temp = rcar_thermal_get_temp,
> };
>
> diff --git a/drivers/thermal/spear_thermal.c b/drivers/thermal/spear_thermal.c
> index bb96be947521..603dadcd3df5 100644
> --- a/drivers/thermal/spear_thermal.c
> +++ b/drivers/thermal/spear_thermal.c
> @@ -41,7 +41,7 @@ static inline int thermal_get_temp(struct thermal_zone_device *thermal,
> return 0;
> }
>
> -static struct thermal_zone_device_ops ops = {
> +static const struct thermal_zone_device_ops ops = {
> .get_temp = thermal_get_temp,
> };
>
> diff --git a/drivers/thermal/st/st_thermal.c b/drivers/thermal/st/st_thermal.c
> index a14a37d54698..1470ca519def 100644
> --- a/drivers/thermal/st/st_thermal.c
> +++ b/drivers/thermal/st/st_thermal.c
> @@ -132,7 +132,7 @@ static int st_thermal_get_temp(struct thermal_zone_device *th, int *temperature)
> return 0;
> }
>
> -static struct thermal_zone_device_ops st_tz_ops = {
> +static const struct thermal_zone_device_ops st_tz_ops = {
> .get_temp = st_thermal_get_temp,
> };
>
> diff --git a/drivers/thermal/testing/zone.c b/drivers/thermal/testing/zone.c
> index 1f4e450100e2..4257d813d572 100644
> --- a/drivers/thermal/testing/zone.c
> +++ b/drivers/thermal/testing/zone.c
> @@ -381,7 +381,7 @@ static int tt_zone_get_temp(struct thermal_zone_device *tz, int *temp)
> return 0;
> }
>
> -static struct thermal_zone_device_ops tt_zone_ops = {
> +static const struct thermal_zone_device_ops tt_zone_ops = {
> .get_temp = tt_zone_get_temp,
> };
>
> --
> 2.49.0
>
Return-Path: <linux-kernel+bounces-665766-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id C192741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:02:43 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 1FC0C3B2D39
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:02:20 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 03B6C28C840;
Wed, 28 May 2025 16:02:36 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QxDSKSsS"
Received: from mail-qv1-f48.google.com (mail-qv1-f48.google.com [209.85.219.48])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 94AF13234;
Wed, 28 May 2025 16:02:33 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.48
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448155; cv=none; b=tptD1J/ZgUGP9hhQt+r3JF9cF/bP37Yy8snr4k3WUFanaOjQbgJn1WqBUbSbk5hYbNFYWuSZl7AzsgOSKOr/sVnl4v93e3wO8ZaanQKW0kn7CHA8W0/Ef0F5X2OMv2AA+80NNK26J9rrOM672+yXQHXGp7QZ5MM98xuIpB8x6AY=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448155; c=relaxed/simple;
bh=BfaLnGVVAMXeRLwpyWCe0o/QrbP67rbScb+PH9wdpLE=;
h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=lYHknyX27TZl7kjod5bIMSUSc3qPq/33bnWISA9lZ0SyG43d0Pb6t6gin0wU/tDZXGYWaOkqt2k+P96RxrgWSrAc9a/KvdWmNt4Wqb4WGTFMoIQ6TK9oT4D1pCTZHYAgCd5pLBy8H8HU6ICoIkVzE/eszNw7w+MBDMyulWREXZs=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=QxDSKSsS; arc=none smtp.client-ip=209.85.219.48
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-qv1-f48.google.com with SMTP id 6a1803df08f44-6ecf99dd567so379346d6.0;
Wed, 28 May 2025 09:02:33 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748448152; x=1749052952; darn=vger.kernel.org;
h=in-reply-to:content-disposition:mime-version:references:subject:cc
:to:from:date:feedback-id:message-id:from:to:cc:subject:date
:message-id:reply-to;
bh=6pJnqnr02148Y6KCRblrRe9rVOkiYKPXEDLgkGFViuE=;
b=QxDSKSsSI2ZaSPUhk+2+cDqY7nF4M1bzpHiQXEKXY1OlF0MUzcTSFkR+NLV4bsZy+9
LOU5+joQItQle93+a2s7Ig/aBo8FmV+6nE0Zajk8Y8LxPTyf+53MPCK3WH1PhMaRms//
n9op56ruxtVu7+zxlJYelcfAG9kpIzfzYkMQKPMkRV4abuhaa4PpVcGtvZVHfDhqB+Si
Vmk3Iyff9Vl2gJKSr+Myd+1//R45twpwwNEeVzgc+Jy+yEaGl0+uXlBEAUe14771fepH
N3WK/WI9qGOwV+jC9iiIV6o/0tRf4xKjDq5xH7WGefpPZ52ZxObtWsem1ib02nw5VrrX
ecJQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748448152; x=1749052952;
h=in-reply-to:content-disposition:mime-version:references:subject:cc
:to:from:date:feedback-id:message-id:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=6pJnqnr02148Y6KCRblrRe9rVOkiYKPXEDLgkGFViuE=;
b=Uuhmsx/HixIiKHsTADk80FIvzD8/Fu24gGGzvWB3gNX9dzxm4QQa/GdWXSjRr6QMtW
mpBhL7zBD0zjr9X8joMiIGxxDfbUCIIiJl9eLCytYehuV/NTC4bZsj+wLyVPx6726dpJ
TcqfKBu2C9RBn2kWQ4/s+Guy43rFMCiumaIkP1b1vWxEEoKmItmK8NUVd3PLscXaD4Vr
nGiBCrXqjDUkBV4O8qcfi3gLtW6LWfC/bjIEacj6snN22Y6YZQzuDK7i47JL4i5Ybg5M
xGV/VZLGbKvt7/qxQNDFdSZB4OoHshVgTfGlswahhHK0ONaGvLfya2fc8vNluwXN7XKr
pMaQ==
X-Forwarded-Encrypted: i=1; AJvYcCVb0BucaQI78gUNsOAqBtbtbE61m4AHbVCNW3vkHJYO0MNXY+IwIjTayvulkWZDLUmhm3kaX0yaYqMkWRU=@vger.kernel.org, AJvYcCXVi6Cw3kkf5cHU2FP/QvJ9rGaRwBly0+6WQkJALlLURjRhSKNJdRG4jnayA+v5wGt8IDnoiPc1Rp7lIgF4YaI=@vger.kernel.org
X-Gm-Message-State: AOJu0YwSBWvgv63Tmr9V3+I7nPEbmqmma5f+XLdRvPbRrmWMRdcsFMjc
fvHlngzM0661lQB1VmvTxoEUMh4tDGB9Ebw41pn29OYu+NggIrBYZdLb
X-Gm-Gg: ASbGncv0AEjWz7XCLODkZ3xNLwRmpGS6pN/f3uzxHNSNC8oANruZkDAg/oAwZW6bRpY
IeX7GMoZIZSrvbI5JItvMF45pe0l8wfhzqIzPK/4a066gjMFhzp4UNiDrF4adqOvlTGja2ZMDy+
cucgFPwo6ND8jAcJkopL2NAg+HDCjCQHc31aEs8FV0vvqt7OU2LRG9+GNTCYZd51zX7+qf72HrS
D6cV4etU2gbzm0HYsP3oiHrbjyFjbMT0AS8GuV3ZQGa2vhvtb5pZ2Cuj5lWkFEvwbqdzaMm+uKl
KgQmzRo6CCyuPmAvwB2j5Spt+8iUaqB4Bn7pYXh+VjVZk/BC0LpdxPP8/Tb4P++slWO6Eiz8eWd
YtcxJxrm/hUFJNrDL4R5KLJ1+ldZq/JFcq9vRtFQlvw==
X-Google-Smtp-Source: AGHT+IEj1aBYgtsIbxF3nbJLZWnraAF3NKveBguXb55vmTnnLPGMU1HlcAD8nkRwVJsLjQOT2OfHmA==
X-Received: by 2002:a05:6214:5095:b0:6f8:af2b:8ba7 with SMTP id 6a1803df08f44-6fa9d169f5dmr258168286d6.24.1748448152162;
Wed, 28 May 2025 09:02:32 -0700 (PDT)
Received: from fauth-a1-smtp.messagingengine.com (fauth-a1-smtp.messagingengine.com. [103.168.172.200])
by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6fac0b3b66bsm7957036d6.57.2025.05.28.09.02.31
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 09:02:31 -0700 (PDT)
Message-ID: <68373397.0c0a0220.2ee6b.2fb9@xxxxxxxxxxxxx>
X-Google-Original-Message-ID: <aDczlTQQzbfPXzey@winterfell.>
Received: from phl-compute-03.internal (phl-compute-03.phl.internal [10.202.2.43])
by mailfauth.phl.internal (Postfix) with ESMTP id EC75B1200068;
Wed, 28 May 2025 12:02:30 -0400 (EDT)
Received: from phl-mailfrontend-02 ([10.202.2.163])
by phl-compute-03.internal (MEProxy); Wed, 28 May 2025 12:02:30 -0400
X-ME-Sender: <xms:ljM3aINkF85vo4dlFZfGWc3slJUF1ZPH1mexJ_yx5V-o4mzFZtcHnA>
<xme:ljM3aO-Z_U4agQ-XRRQRrihNmzwsqxPPII8GAdY_s3Oax_Eky25dzlaEuvYINiAET
CEcW5YJJvgK3AB55g>
X-ME-Received: <xmr:ljM3aPSc-5uJdWR5ynE2IBqLhkOlutv0DDFDdvaO-UC_1_2uzT2F9eVmGDSihZGRnVQvgdQvwwym>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtddtgddvfeeikeculddtuddrgeefvddrtd
dtmdcutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpggft
fghnshhusghstghrihgsvgdpuffrtefokffrpgfnqfghnecuuegrihhlohhuthemuceftd
dtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpeffhffvvefukfhf
gggtuggjsehttdortddttddvnecuhfhrohhmpeeuohhquhhnucfhvghnghcuoegsohhquh
hnrdhfvghnghesghhmrghilhdrtghomheqnecuggftrfgrthhtvghrnhepiedtfeevhfet
keelgfethfegleekfeffledvvefhheeukedtvefhtedtvdetvedvnecuvehluhhsthgvrh
fuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepsghoqhhunhdomhgvshhmthhp
rghuthhhphgvrhhsohhnrghlihhthidqieelvdeghedtieegqddujeejkeehheehvddqsg
hoqhhunhdrfhgvnhhgpeepghhmrghilhdrtghomhesfhhigihmvgdrnhgrmhgvpdhnsggp
rhgtphhtthhopeduiedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtoheplhhoshhsih
hnsehkvghrnhgvlhdrohhrghdprhgtphhtthhopehvihhrohesiigvnhhivhdrlhhinhhu
gidrohhrghdruhhkpdhrtghpthhtoheprghlihgtvghrhihhlhesghhoohhglhgvrdgtoh
hmpdhrtghpthhtohepohhjvggurgeskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepghhr
vghgkhhhsehlihhnuhigfhhouhhnuggrthhiohhnrdhorhhgpdhrtghpthhtoheprghrnh
gusegrrhhnuggsrdguvgdprhgtphhtthhopegrkhhpmheslhhinhhugidqfhhouhhnuggr
thhiohhnrdhorhhgpdhrtghpthhtohepghgrrhihsehgrghrhihguhhordhnvghtpdhrtg
hpthhtohepsghjohhrnhefpghghhesphhrohhtohhnmhgrihhlrdgtohhm
X-ME-Proxy: <xmx:ljM3aAt4-Ab_1Obb2rBA5a_v2j1UlHJKAsw7tPaNeADDAuuzIUIjaA>
<xmx:ljM3aAfDDKRukUelNx5wwfVlBq7ws9WwH9IMIPOA6FokY8nsMPCDoA>
<xmx:ljM3aE3wAa4zkaVawqnZMUuw0jGC1d9CXpi7hS2LUwbs-ko0pZrh9Q>
<xmx:ljM3aE8QUpSA4nIyL3YcrjtKvWw61rzp93FJYTuHoBEu-SYGiH3Q0g>
<xmx:ljM3aH-4HHUZwYlbRDZ1Iy3V-EZaVd--TD2Mr0M1jv0up0mQy4gwxdmW>
Feedback-ID: iad51458e:Fastmail
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Wed,
28 May 2025 12:02:30 -0400 (EDT)
Date: Wed, 28 May 2025 09:02:29 -0700
From: Boqun Feng <boqun.feng@xxxxxxxxx>
To: Benno Lossin <lossin@xxxxxxxxxx>
Cc: Al Viro <viro@xxxxxxxxxxxxxxxxxx>, Alice Ryhl <aliceryhl@xxxxxxxxxx>,
Miguel Ojeda <ojeda@xxxxxxxxxx>,
Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>,
Arnd Bergmann <arnd@xxxxxxxx>,
Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,
Gary Guo <gary@xxxxxxxxxxx>,
=?iso-8859-1?Q?Bj=F6rn?= Roy Baron <bjorn3_gh@xxxxxxxxxxxxxx>,
Benno Lossin <benno.lossin@xxxxxxxxx>,
Andreas Hindborg <a.hindborg@xxxxxxxxxx>,
Trevor Gross <tmgross@xxxxxxxxx>,
Danilo Krummrich <dakr@xxxxxxxxxx>, rust-for-linux@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH v2] uaccess: rust: use newtype for user pointers
References: <20250527-userptr-newtype-v2-1-a789d266f6b0@xxxxxxxxxx>
<20250527221211.GB2023217@ZenIV>
<68364701.050a0220.48858.0017@xxxxxxxxxxxxx>
<DA7WMFWY8I6Z.2EADXSPL111PP@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <DA7WMFWY8I6Z.2EADXSPL111PP@xxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 05:38:08PM +0200, Benno Lossin wrote:
> On Wed May 28, 2025 at 1:13 AM CEST, Boqun Feng wrote:
> > On Tue, May 27, 2025 at 11:12:11PM +0100, Al Viro wrote:
> >> On Tue, May 27, 2025 at 01:53:12PM +0000, Alice Ryhl wrote:
> >> > In C code we use sparse with the __user annotation to detect cases where
> >> > a user pointer is mixed up with other things. To replicate that, we
> >> > introduce a new struct UserPtr that serves the same purpose using the
> >> > newtype pattern.
> >> >
> >> > The UserPtr type is not marked with #[derive(Debug)], which means that
> >> > it's not possible to print values of this type. This avoids ASLR
> >> > leakage.
> >> >
> >> > The type is added to the prelude as it is a fairly fundamental type
> >> > similar to c_int. The wrapping_add() method is renamed to
> >> > wrapping_byte_add() for consistency with the method name found on raw
> >> > pointers.
> >>
> >> That's considerably weaker than __user, though - with
> >> struct foo {struct bar x; struct baz y[2]; };
> >
> > Translate to Rust this is:
> >
> > struct Foo {
> > x: Bar,
> > y: Baz[2],
> > }
> >
> >> struct foo __user *p;
> >
> > UserPtr should probably be generic over pointee, so:
> >
> > pub struct UserPtr<T>(*mut c_void, PhantomData<*mut T>);
> >
> > and
> >
> > let p: UserPtr<Foo> = ...;
> >
> >> void f(struct bar __user *);
> >
> > and this is:
> >
> > pub fn f(bar: UserPtr<Bar>)
> >
> > and the checking should work, a (maybe unrelated) tricky part though..
> >
> >> sparse does figure out that f(&p->y[1]) is a type error - &p->y[1] is
> >
> > In Rust, you will need to play a little unsafe game to get &p->y[1]:
> >
> > let foo_ptr: *mut Foo = p.as_mut_ptr();
> > let y_ptr: *mut Baz = unsafe { addr_of_mut!((*foo_ptr).y[1]) };
> > let y: UserPtr<Baz> = unsafe { UserPtr::from_ptr(y_ptr) };
>
> Shouldn't this use `wrapping_add` since the pointer shouldn't be
> dereferenced?
>
Good point, so:
let foo_ptr: *mut Foo = p.as_mut_ptr();
let y_ptr: *mut Baz = foo_ptr.wrapping_byte_add(offset_of!(Foo, y[1]));
let y: UserPtr<Baz> = unsafe { UserPtr::from_ptr(y_ptr) };
(using wrapping_byte_add() + offset_of!())
Regards,
Boqun
> If we don't use `wrapping_add`, then the field projection operation for
> this type must be `unsafe`.
>
> ---
> Cheers,
> Benno
Return-Path: <linux-kernel+bounces-665767-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id EF97141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:03:03 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 71F6E16ED30
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:02:55 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id B184728C5BE;
Wed, 28 May 2025 16:02:48 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="a8fdIjl7"
Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3196D288C9B
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:02:45 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448168; cv=none; b=QpiZuQGwxL08J+ZGZ2tfY/OlR9JUfh24dw5ReRpexPpl2d+d4QOPtQFp69l3jzdxj+GgogMiwo9ydnnSycSCWq82u28bl4BLkANuU1ScbgNDw8j4z5d0CRZbCqkgl655l+PxDz3L5gTpyWtqCCYoVd3oxwPL8zUkkCJ8pgXFIKE=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448168; c=relaxed/simple;
bh=t08GAhcYElYwLHiAuz12CFNqRq2dkhmxDggvF3lXGGM=;
h=Mime-Version:Content-Type:Date:Message-Id:Cc:Subject:From:To:
References:In-Reply-To; b=GW2ysaSKQ3YohuywCC/eTbvYjzHp4A9WT8yj4UtKYWXuPBPUhWyiksEYaGeD7JV3CxeCOb+0mSIAkCBw5uWyBfKoQXYN4/uSTJD5ZoURcFRD1pjgf6U+CQjAvsMO/5AJv3M39fuFYX/lWbivsB+KhvoWe/uX0BPI8FL9w4bW6+w=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=a8fdIjl7; arc=none smtp.client-ip=209.85.128.45
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org
Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-43cf257158fso247935e9.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:02:45 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=linaro.org; s=google; t=1748448164; x=1749052964; darn=vger.kernel.org;
h=in-reply-to:references:to:from:subject:cc:message-id:date
:content-transfer-encoding:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=2kCK1t1rT2W4oANCi5yB4HtmJu4u8r4qJTejI8zo+Oo=;
b=a8fdIjl7/wGtJAgXGu6Hlia3MDaLXGqC3UFiOuuSb8ZKrMmtlHikoz40qWQW5UgQrL
MmvVh/uEzOii7/FCg0Iz7sdsNzJRSIkxttIaXP7bTYhtSIxOq2E+GIcSADbZXMLz63e/
DvyNQ0EgIPEjr1z65xKhRCvikKL6ZbPfD7lChiAye/3c5bIMDBW97tcgY3OYvc5o2tWx
R0GbQoI6c806zmCLQQATpJKpE9Dg4VPV+LyzctIjs85bKDPfUF5q2q4neJW2jW317Rdc
pAfUkG1HaswVDJHNCuGhQGzKW6JSi6JKsR/iY8d6FlD7AjpfA7P2wWBia2zs8UBatlf8
AvtQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748448164; x=1749052964;
h=in-reply-to:references:to:from:subject:cc:message-id:date
:content-transfer-encoding:mime-version:x-gm-message-state:from:to
:cc:subject:date:message-id:reply-to;
bh=2kCK1t1rT2W4oANCi5yB4HtmJu4u8r4qJTejI8zo+Oo=;
b=nepYf/hmmxk74ii/6W62StjoBUbxmjpiwVRxZsE+yktmmDZuIb84AsOCxqM/GQ9V6u
VK1Qq1KHBl3d7fxOEBe0DJIsBKGiE8ufRLX9Ato6L/3VsO92UbmJhi85zoDwJzTW2xvS
NNE6UFCqi6DqgxqX3TT1IWKIatFITYpMIBL0BC9uE5U/ihY6c+sMrEVFlcreVIstpoK6
WncHkKN/MDDihC3dqAHLgcXWoJ4Qi8sJ1oJkehLV5U2JW/n0TvJU6Ev6V9hKpokl9Fe5
qlfgJ3z4ZKF0D6P2PMQiKteDoyGU/wLsMYQwTU2ta/Q1KZp90Ioyh94nyq8rzvSw2cHp
l+Zw==
X-Forwarded-Encrypted: i=1; AJvYcCWeqzVrb9aMo0U0H9yq/fC/9+P5J+ERbLYdiWEUjyuCqN6l05qLtEvqkvp3bZU5ED1PxRGqnAVR1kNJvno=@vger.kernel.org
X-Gm-Message-State: AOJu0Yy47iyP8K8/rY4QChxEdhDzV9xhrlKTlBgj+mzj23+SWwtEaIOx
TAxk1kziPxh/2AJ/cvVTV34q8DRCnAqn9Animn8zNmPqozm0WlWaeTq+OzInLevlK7c=
X-Gm-Gg: ASbGncuaF1yXUeXxL8ZqCwHIoU2gDKaRJbU/L76Kzz0m3BUkNa+vLjmn59imLnUhml7
C0NLfIAMrWR1HP8RZ3GyfLwfDCBE3QJ4eADBMCbZCVDDoz6La5lemN4jzFnbLNknKkGlvX424aI
xm1qZPl9jZk9HK141VKlWxFoK4D7GFop9ICeqv5+ZUPKv9h+hd1jlWZmbQDmnTAl5WKbXbk653O
NNxAHHgANGyjpGcS4WYJg3AbPSPzBYqLcPK2bDFmQ7bRO6VPoPKLohjgJ+xHDHzyKYiZGhmy7wd
1T7UO9BAUhIt6q9v4O/e5UShZZqNBv0ucGui/krQOwAFiDmVv/4AvAS7
X-Google-Smtp-Source: AGHT+IGXdGfI0NZMb251EaclZsUurgUstIW2s6fQn24XtH1qsjwVUeWaMZ/3aPe3N0RLnQB8jJ+wTA==
X-Received: by 2002:a05:600c:1c99:b0:441:b3eb:570a with SMTP id 5b1f17b1804b1-44c930165dcmr181795775e9.2.1748448164213;
Wed, 28 May 2025 09:02:44 -0700 (PDT)
Received: from localhost ([2a00:2381:fd67:101:6c39:59e6:b76d:825])
by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4507254b9e4sm23132285e9.10.2025.05.28.09.02.43
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 09:02:43 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
Mime-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=UTF-8
Date: Wed, 28 May 2025 17:02:42 +0100
Message-Id: <DA7X59CE8REY.4E410IER5BJF@xxxxxxxxxx>
Cc: "Liam Girdwood" <lgirdwood@xxxxxxxxx>, "Mark Brown"
<broonie@xxxxxxxxxx>, "Jaroslav Kysela" <perex@xxxxxxxx>, "Takashi Iwai"
<tiwai@xxxxxxxx>, <linux-sound@xxxxxxxxxxxxxxx>,
<linux-arm-msm@xxxxxxxxxxxxxxx>, <linux-kernel@xxxxxxxxxxxxxxx>,
<kernel@xxxxxxxxxxxxxxxx>
Subject: Re: [PATCH v1 1/1] ASoC: qcom: sc8280xp: Assign backend ops for
multi codec dai links
From: "Alexey Klimov" <alexey.klimov@xxxxxxxxxx>
To: "Mohammad Rafi Shaik" <mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>, "Srinivas
Kandagatla" <srini@xxxxxxxxxx>
X-Mailer: aerc 0.20.0
References: <20250528150716.2011707-1-mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
<20250528150716.2011707-2-mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
In-Reply-To: <20250528150716.2011707-2-mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed May 28, 2025 at 4:07 PM BST, Mohammad Rafi Shaik wrote:
> In the existing implementation, the link->ops assignment is
> conditioned on link->no_pcm being set, which generally happens
> when a platform entry is present. However, in scenarios where
> there is no platform but multiple codecs in the DAI link,
> backend operations (link->ops) must still be assigned to ensure
> correct codec settings.
>
> Signed-off-by: Mohammad Rafi Shaik <mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
> ---
> sound/soc/qcom/sc8280xp.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/sound/soc/qcom/sc8280xp.c b/sound/soc/qcom/sc8280xp.c
> index 99fd34728e38..b1b31d197b42 100644
> --- a/sound/soc/qcom/sc8280xp.c
> +++ b/sound/soc/qcom/sc8280xp.c
> @@ -147,7 +147,7 @@ static void sc8280xp_add_be_ops(struct snd_soc_card *=
card)
> int i;
> =20
> for_each_card_prelinks(card, i, link) {
> - if (link->no_pcm =3D=3D 1) {
> + if (link->no_pcm =3D=3D 1 || link->num_codecs > 1) {
Out of curiosity or maybe I am missing something, why this is needed
for a multi-codec link only? Or in other words why not link->num_codecs > 0=
?
Or due to some reasons platformless single-codec backend is a no-go scenari=
o?
Thanks,
Alexey
Return-Path: <linux-kernel+bounces-665768-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id CA90941E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:03:37 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id D0BD1A24D42
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:03:10 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 8BD1128C854;
Wed, 28 May 2025 16:03:26 +0000 (UTC)
Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id EE40128640A;
Wed, 28 May 2025 16:03:22 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.176.79.56
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448205; cv=none; b=bZHtV+30fVHhcgboIGaa+1bRgC0/1hk3doSxJBMSTq8E4ZYzpYizMcJAXiB8AuQcYCXl5C2AbHb4ZTRe3wl3bTDVVCg8Y1TUvopltMn/ZhqFYWxecdYrp0McWfGtIqCuM1p3MJ3tCVMsaftiPDohkLaEy3ngmlvmEeCEL+C64h8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448205; c=relaxed/simple;
bh=etETBF72Sca5jBohBK+HLi2Xtbn5oQIC8boqssWVUZg=;
h=Date:From:To:CC:Subject:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=mpCJvDHXAOZdXf65aRQEw7kdoUo+r+5CR+L7VYF6XeWCpcG3a7LL9wDoJHt/bO9mXalTiU6s5oS2TZP8K/i1PLgHXC0mQFVVNP10xCq63BSoZfw+6TGKu0O/XxwDIMyVerZG3U0pEOzSSyJzC/zjNuxxD5aoJ5hgeXnRb8GT/rQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=185.176.79.56
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com
Received: from mail.maildlp.com (unknown [172.18.186.231])
by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4b6vQQ74Vgz6K9MM;
Thu, 29 May 2025 00:02:06 +0800 (CST)
Received: from frapeml500008.china.huawei.com (unknown [7.182.85.71])
by mail.maildlp.com (Postfix) with ESMTPS id 1361C140277;
Thu, 29 May 2025 00:03:20 +0800 (CST)
Received: from localhost (10.203.177.66) by frapeml500008.china.huawei.com
(7.182.85.71) with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Wed, 28 May
2025 18:03:19 +0200
Date: Wed, 28 May 2025 17:03:18 +0100
From: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
To: Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx>
CC: Marc Zyngier <maz@xxxxxxxxxx>, Thomas Gleixner <tglx@xxxxxxxxxxxxx>, "Rob
Herring" <robh@xxxxxxxxxx>, Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>, "Conor
Dooley" <conor+dt@xxxxxxxxxx>, Catalin Marinas <catalin.marinas@xxxxxxx>,
Will Deacon <will@xxxxxxxxxx>, Arnd Bergmann <arnd@xxxxxxxx>, "Sascha
Bischoff" <sascha.bischoff@xxxxxxx>, Timothy Hayes <timothy.hayes@xxxxxxx>,
"Liam R. Howlett" <Liam.Howlett@xxxxxxxxxx>, Mark Rutland
<mark.rutland@xxxxxxx>, Jiri Slaby <jirislaby@xxxxxxxxxx>,
<linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>, <linux-kernel@xxxxxxxxxxxxxxx>,
<devicetree@xxxxxxxxxxxxxxx>, <alireza.sanaee@xxxxxxxxxx>
Subject: Re: [PATCH v4 21/26] irqchip/gic-v5: Add GICv5 IRS/SPI support
Message-ID: <20250528170318.00001dd8@xxxxxxxxxx>
In-Reply-To: <20250513-gicv5-host-v4-21-b36e9b15a6c3@xxxxxxxxxx>
References: <20250513-gicv5-host-v4-0-b36e9b15a6c3@xxxxxxxxxx>
<20250513-gicv5-host-v4-21-b36e9b15a6c3@xxxxxxxxxx>
X-Mailer: Claws Mail 4.3.0 (GTK 3.24.42; x86_64-w64-mingw32)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: lhrpeml500012.china.huawei.com (7.191.174.4) To
frapeml500008.china.huawei.com (7.182.85.71)
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, 13 May 2025 19:48:14 +0200
Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx> wrote:
> The GICv5 Interrupt Routing Service (IRS) component implements
> interrupt management and routing in the GICv5 architecture.
>
> A GICv5 system comprises one or more IRSes, that together
> handle the interrupt routing and state for the system.
>
> An IRS supports Shared Peripheral Interrupts (SPIs), that are
> interrupt sources directly connected to the IRS; they do not
> rely on memory for storage. The number of supported SPIs is
> fixed for a given implementation and can be probed through IRS
> IDR registers.
>
> SPI interrupt state and routing are managed through GICv5
> instructions.
>
> Each core (PE in GICv5 terms) in a GICv5 system is identified with
> an Interrupt AFFinity ID (IAFFID).
>
> An IRS manages a set of cores that are connected to it.
>
> Firmware provides a topology description that the driver uses
> to detect to which IRS a CPU (ie an IAFFID) is associated with.
>
> Use probeable information and firmware description to initialize
> the IRSes and implement GICv5 IRS SPIs support through an
> SPI-specific IRQ domain.
>
> The GICv5 IRS driver:
>
> - Probes IRSes in the system to detect SPI ranges
> - Associates an IRS with a set of cores connected to it
> - Adds an IRQchip structure for SPI handling
>
> SPIs priority is set to a value corresponding to the lowest
> permissible priority in the system (taking into account the
> implemented priority bits of the IRS and CPU interface).
>
> Since all IRQs are set to the same priority value, the value
> itself does not matter as long as it is a valid one.
>
> Co-developed-by: Sascha Bischoff <sascha.bischoff@xxxxxxx>
> Signed-off-by: Sascha Bischoff <sascha.bischoff@xxxxxxx>
> Co-developed-by: Timothy Hayes <timothy.hayes@xxxxxxx>
> Signed-off-by: Timothy Hayes <timothy.hayes@xxxxxxx>
> Signed-off-by: Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx>
> Cc: Will Deacon <will@xxxxxxxxxx>
> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Cc: Catalin Marinas <catalin.marinas@xxxxxxx>
> Cc: Marc Zyngier <maz@xxxxxxxxxx>
A few comments inline. Mostly around of cpu phandle parsing.
+CC Ali as there is a comment on his SMT DT patch set inline.
> ---
> arch/arm64/include/asm/sysreg.h | 36 +++
> drivers/irqchip/Makefile | 2 +-
> drivers/irqchip/irq-gic-v5-irs.c | 433 +++++++++++++++++++++++++++++++++++++
> drivers/irqchip/irq-gic-v5.c | 341 +++++++++++++++++++++++++++--
> include/linux/irqchip/arm-gic-v5.h | 130 +++++++++++
> 5 files changed, 920 insertions(+), 22 deletions(-)
>
> diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysreg.h
> index 9d28d408f9c6df24526dd8ecbf3c7d920246b22d..fbac3b6f056ae6fafd64457600d45808e4904ae3 100644
> --- a/arch/arm64/include/asm/sysreg.h
> +++ b/arch/arm64/include/asm/sysreg.h
> @@ -1082,14 +1082,50 @@
> /*
> * Definitions for GICv5 instructions
> */
>
> +/* Shift and mask definitions for GIC CDAFF */
Similar comment. Mask definitions seems more accurate to me.
> +/* Shift and mask definitions for GIC CDDIS */
> +#define GICV5_GIC_CDDIS_TYPE_MASK GENMASK_ULL(31, 29)
> +#define GICV5_GIC_CDDIS_TYPE(r) FIELD_GET(GICV5_GIC_CDDIS_TYPE_MASK, r)
> +#define GICV5_GIC_CDDIS_ID_MASK GENMASK_ULL(23, 0)
> +#define GICV5_GIC_CDDIS_ID(r) FIELD_GET(GICV5_GIC_CDDIS_ID_MASK, r)
Similar to earlier comment. I'm not sure the shortened forms are worth the bother.
> diff --git a/drivers/irqchip/irq-gic-v5-irs.c b/drivers/irqchip/irq-gic-v5-irs.c
> new file mode 100644
> index 0000000000000000000000000000000000000000..8c448487b909c7d3b4e1f95a5bc02b741ecc40b3
> --- /dev/null
> +++ b/drivers/irqchip/irq-gic-v5-irs.c
> @@ -0,0 +1,433 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Copyright (C) 2024-2025 ARM Limited, All Rights Reserved.
> + */
> +
> +#define pr_fmt(fmt) "GICv5 IRS: " fmt
> +
> +#include <linux/of.h>
> +#include <linux/of_address.h>
> +
> +#include <linux/irqchip.h>
> +#include <linux/irqchip/arm-gic-v5.h>
> +int gicv5_spi_irq_set_type(struct irq_data *d, unsigned int type)
> +{
> + struct gicv5_irs_chip_data *irs_data = d->chip_data;
> + u32 selr, cfgr;
> + bool level;
> + int ret;
> +
> + switch (type) {
> + case IRQ_TYPE_EDGE_RISING:
> + case IRQ_TYPE_EDGE_FALLING:
> + level = false;
> + break;
> + case IRQ_TYPE_LEVEL_HIGH:
> + case IRQ_TYPE_LEVEL_LOW:
> + level = true;
> + break;
> + default:
> + return -EINVAL;
> + }
> +
> + guard(raw_spinlock)(&irs_data->spi_config_lock);
> +
> + selr = FIELD_PREP(GICV5_IRS_SPI_SELR_ID, d->hwirq);
> + irs_writel_relaxed(irs_data, selr, GICV5_IRS_SPI_SELR);
> + ret = gicv5_irs_wait_for_spi_op(irs_data);
> + if (ret)
> + return ret;
> +
> + cfgr = FIELD_PREP(GICV5_IRS_SPI_CFGR_TM, level);
> +
> + irs_writel_relaxed(irs_data, cfgr, GICV5_IRS_SPI_CFGR);
> + ret = gicv5_irs_wait_for_spi_op(irs_data);
> + if (ret)
> + return ret;
> +
> + return 0;
return gicv5_irq_wait_for_spi_op()
unless more code turns up here in a later patch.
> +}
> +
> +static void __init gicv5_irs_init_bases(struct gicv5_irs_chip_data *irs_data,
> + void __iomem *irs_base,
> + struct fwnode_handle *handle)
> +{
> + struct device_node *np = to_of_node(handle);
> + u32 cr0, cr1;
> +
> + irs_data->fwnode = handle;
> + irs_data->irs_base = irs_base;
> +
> + if (of_property_read_bool(np, "dma-noncoherent")) {
> + /*
> + * A non-coherent IRS implies that some cache levels cannot be
> + * used coherently by the cores and GIC. Our only option is to mark
> + * memory attributes for the GIC as non-cacheable; by default,
> + * non-cacheable memory attributes imply outer-shareable
> + * shareability, the value written into IRS_CR1_SH is ignored.
> + */
> + cr1 = FIELD_PREP(GICV5_IRS_CR1_VPED_WA, GICV5_NO_WRITE_ALLOC) |
As per earlier comments is this less clear as:
cr1 = FIELD_PREP(GICV5_IRS_CR1_VPED_WA, 0) |
To me, seems fine but up to you.
> + FIELD_PREP(GICV5_IRS_CR1_VPED_RA, GICV5_NO_READ_ALLOC) |
> + FIELD_PREP(GICV5_IRS_CR1_VMD_WA, GICV5_NO_WRITE_ALLOC) |
> + FIELD_PREP(GICV5_IRS_CR1_VMD_RA, GICV5_NO_READ_ALLOC) |
> + FIELD_PREP(GICV5_IRS_CR1_VPET_RA, GICV5_NO_READ_ALLOC) |
> + FIELD_PREP(GICV5_IRS_CR1_VMT_RA, GICV5_NO_READ_ALLOC) |
> + FIELD_PREP(GICV5_IRS_CR1_IST_WA, GICV5_NO_WRITE_ALLOC) |
> + FIELD_PREP(GICV5_IRS_CR1_IST_RA, GICV5_NO_READ_ALLOC) |
> + FIELD_PREP(GICV5_IRS_CR1_IC, GICV5_NON_CACHE) |
> + FIELD_PREP(GICV5_IRS_CR1_OC, GICV5_NON_CACHE);
> + irs_data->flags |= IRS_FLAGS_NON_COHERENT;
> + } else {
> + cr1 = FIELD_PREP(GICV5_IRS_CR1_VPED_WA, GICV5_WRITE_ALLOC) |
> + FIELD_PREP(GICV5_IRS_CR1_VPED_RA, GICV5_READ_ALLOC) |
> + FIELD_PREP(GICV5_IRS_CR1_VMD_WA, GICV5_WRITE_ALLOC) |
> + FIELD_PREP(GICV5_IRS_CR1_VMD_RA, GICV5_READ_ALLOC) |
> + FIELD_PREP(GICV5_IRS_CR1_VPET_RA, GICV5_READ_ALLOC) |
> + FIELD_PREP(GICV5_IRS_CR1_VMT_RA, GICV5_READ_ALLOC) |
> + FIELD_PREP(GICV5_IRS_CR1_IST_WA, GICV5_WRITE_ALLOC) |
> + FIELD_PREP(GICV5_IRS_CR1_IST_RA, GICV5_READ_ALLOC) |
> + FIELD_PREP(GICV5_IRS_CR1_IC, GICV5_WB_CACHE) |
> + FIELD_PREP(GICV5_IRS_CR1_OC, GICV5_WB_CACHE) |
> + FIELD_PREP(GICV5_IRS_CR1_SH, GICV5_INNER_SHARE);
> + }
> +
> + irs_writel_relaxed(irs_data, cr1, GICV5_IRS_CR1);
> +
> + cr0 = FIELD_PREP(GICV5_IRS_CR0_IRSEN, 0x1);
> + irs_writel_relaxed(irs_data, cr0, GICV5_IRS_CR0);
> + gicv5_irs_wait_for_idle(irs_data);
> +}
> +
> +static int __init gicv5_irs_of_init_affinity(struct device_node *node,
> + struct gicv5_irs_chip_data *irs_data,
> + u8 iaffid_bits)
> +{
> + /*
> + * Detect IAFFID<->CPU mappings from the device tree and
> + * record IRS<->CPU topology information.
> + */
> + u16 iaffid_mask = GENMASK(iaffid_bits - 1, 0);
> + u16 *iaffids __free(kfree) = NULL;
See comments in cleanup.h. Linus has been fairly clear he doesn't like
separating the constructor and destructor like this - just declare
iaffids where you construct it.
> + int ret, i, ncpus, niaffids;
> +
> + ncpus = of_property_count_elems_of_size(node, "cpus", sizeof(u32));
cpus is a phandle? I think this is going to run into current discussion
on what phandles to CPUs on an SMT system look like (Rob Herring and Mark
Rutland have different views)
https://lore.kernel.org/linux-arm-kernel/20250512080715.82-1-alireza.sanaee@xxxxxxxxxx/
Anyhow this doesn't look right to me.
I think it should be of_count_phandle_with_args() Potentially with cpu-cells
as the argument depending on how that thread goes.
> + if (ncpus < 0)
> + return -EINVAL;
> +
> + niaffids = of_property_count_elems_of_size(node, "arm,iaffids",
> + sizeof(u16));
> + if (niaffids != ncpus)
> + return -EINVAL;
> +
u16 *iaffids __free(kfree) = kcalloc(niaffids, sizeof(*iaffids),
GFP_KERNEL);
> + iaffids = kcalloc(niaffids, sizeof(*iaffids), GFP_KERNEL);
> + if (!iaffids)
> + return -ENOMEM;
> +
> + ret = of_property_read_u16_array(node, "arm,iaffids", iaffids, niaffids);
> + if (ret)
> + return ret;
> +
> + for (i = 0; i < ncpus; i++) {
> + struct device_node *cpu_node;
> + u32 cpu_phandle;
> + int cpu;
> +
> + if (of_property_read_u32_index(node, "cpus", i, &cpu_phandle))
> + continue;
> +
> + cpu_node = of_find_node_by_phandle(cpu_phandle);
cpu_node = of_parse_phandle(node, "cpus", i);
not work here?
> + if (WARN_ON(!cpu_node))
> + continue;
> +
> + cpu = of_cpu_node_to_id(cpu_node);
If this is all you want then Ali's series gives you a helper
cpu = of_cpu_phandle_to_id(node, &cpu_node, i);
Though even better to have a helper that allows
cpu = of_cpu_phandle_to_id(node, NULL, i); and handles
the node put as internally.
Ali, any reason we can't do that? Seems to be a fairly common
pattern.
> + of_node_put(cpu_node);
> + if (WARN_ON(cpu < 0))
> + continue;
> +
> + if (iaffids[i] & ~iaffid_mask) {
> + pr_warn("CPU %d iaffid 0x%x exceeds IRS iaffid bits\n",
> + cpu, iaffids[i]);
> + continue;
> + }
> +
> + per_cpu(cpu_iaffid, cpu).iaffid = iaffids[i];
> + per_cpu(cpu_iaffid, cpu).valid = true;
> +
> + /* We also know that the CPU is connected to this IRS */
> + per_cpu(per_cpu_irs_data, cpu) = irs_data;
> + }
> +
> + return ret;
> +}
> diff --git a/drivers/irqchip/irq-gic-v5.c b/drivers/irqchip/irq-gic-v5.c
> index a50982e5d98816d88e4fca37cc0ac31684fb6c76..e58ff345dbfaf840b17ad63c4fdb6c227137cf4b 100644
> --- a/drivers/irqchip/irq-gic-v5.c
> +++ b/drivers/irqchip/irq-gic-v5.c
>
> +
> +static int gicv5_spi_irq_set_irqchip_state(struct irq_data *d,
> + enum irqchip_irq_state which,
> + bool val)
> +{
Similar to previous, I'd call the state parameter state rather than val.
> diff --git a/include/linux/irqchip/arm-gic-v5.h b/include/linux/irqchip/arm-gic-v5.h
> index 4ff0ba64d9840c3844671f7850bb3d81ba2eb1b6..187af307de9170d9569898cb1e50de376a38bd0a 100644
> --- a/include/linux/irqchip/arm-gic-v5.h
> +++ b/include/linux/irqchip/arm-gic-v5.h
> @@ -5,6 +5,8 @@
> #ifndef __LINUX_IRQCHIP_ARM_GIC_V5_H
> #define __LINUX_IRQCHIP_ARM_GIC_V5_H
>
> +#define GICV5_NO_READ_ALLOC 0b0
> +#define GICV5_READ_ALLOC 0b1
> +#define GICV5_NO_WRITE_ALLOC 0b0
> +#define GICV5_WRITE_ALLOC 0b1
Given these are being written to fields called _RA and _WA
so the defines provide value over 0 and 1 in appropriate places?
Maybe just about. Anyhow, your code so on this up to you.
> +
> +#define GICV5_NON_CACHE 0b00
> +#define GICV5_WB_CACHE 0b01
> +#define GICV5_WT_CACHE 0b10
> +
> +#define GICV5_NON_SHARE 0b00
> +#define GICV5_OUTER_SHARE 0b10
> +#define GICV5_INNER_SHARE 0b11
> +
> +#define GICV5_IRS_IDR1 0x0004
> +#define GICV5_IRS_IDR2 0x0008
> +#define GICV5_IRS_IDR5 0x0014
> +#define GICV5_IRS_IDR6 0x0018
> +#define GICV5_IRS_IDR7 0x001c
> +#define GICV5_IRS_CR0 0x0080
> +#define GICV5_IRS_CR1 0x0084
> +#define GICV5_IRS_SPI_SELR 0x0108
> +#define GICV5_IRS_SPI_CFGR 0x0114
> +#define GICV5_IRS_SPI_STATUSR 0x0118
> +#define GICV5_IRS_PE_SELR 0x0140
> +#define GICV5_IRS_PE_STATUSR 0x0144
> +#define GICV5_IRS_PE_CR0 0x0148
Blank line here as this is end of register offsets.
> +#define GICV5_IRS_IDR1_PRIORITY_BITS GENMASK(22, 20)
> +#define GICV5_IRS_IDR1_IAFFID_BITS GENMASK(19, 16)
Return-Path: <linux-kernel+bounces-665769-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D807741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:05:31 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 1426316725B
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:05:33 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id A9805279903;
Wed, 28 May 2025 16:05:25 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="qSshGpZ6"
Received: from mail-yb1-f170.google.com (mail-yb1-f170.google.com [209.85.219.170])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5D9B7244670
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:05:23 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.170
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448324; cv=none; b=Xary9JY+FXAG0GHeEBY8cnfvgQEK3GkG1BtBlquoBE4OQ0Ic2hMEkjJTNnvpL9r270vMvYgZI6uXwOT1LrsgiQU+Y08ClOcY2ENK6wRsk5Q9n96eoElrzF9z0wfzrc2D4OwegjphBC5tKOtlyokn8/wJRNkDly6FYvU0+xuqqns=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448324; c=relaxed/simple;
bh=DcRREdQ0ZIb5xF00hDHe1rvvAjFzi38y8N1Y5D0c45k=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=XWQQPDkq6jnyJZlgiXg1Di0naezR+a89cG1IojxKH0QwnVTxJNYuHiIz8pwQGGS8kwZE0HR36rQaW+UHjoDn/R8tuC5102C4ZuyR8vKNS/Tnx/stqQD4lkz8oCJuXEEqLsLIHGe0NbW1g7TkY6MYKs5m+crVpgnjgM1Kl8DeoUQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=qSshGpZ6; arc=none smtp.client-ip=209.85.219.170
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org
Received: by mail-yb1-f170.google.com with SMTP id 3f1490d57ef6-e7d925ff60bso3377355276.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:05:23 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=linaro.org; s=google; t=1748448322; x=1749053122; darn=vger.kernel.org;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:from:to:cc:subject:date:message-id:reply-to;
bh=w6tC/IsairDziVWtXhkaDimMYA0/jNvKbB4X1Lbk06g=;
b=qSshGpZ6ItWc+JjyMXR2REHAQc/3Pziq99/UpT7Ijf1RBHG0RPIc1TRpPb+A22tglG
zUD8QdytkIx5O8U+/Vw+wZNYZ63f2fFKmo+3h7AhAhUwkd8fEiSJ0Pm9BICC73TnlwUo
Bn+xHyXgrUd6egnSBpgo8wyrbR6Xzy6ph0MunleESFgCWgtcquwhJSYu1WK4SaccwP/H
Fq7xz4hVk7MnYE0ixGsZk+l90k9R8+L/U3n5mlHdRtYRNYahWSXunL1qQaZn0n5RZaiR
+gnuJx+lq4/mDapjVAGRW3pyzWSCjqitGKdJBzpowDlzoCYBn+ln4rdNiJbabBrmSlXw
J+gw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748448322; x=1749053122;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=w6tC/IsairDziVWtXhkaDimMYA0/jNvKbB4X1Lbk06g=;
b=Zf5ZZaDZry4OV16fk6iiit9VSiKtOKJJRR5MVQ8H4IzaJlVdPkSgrU3/q8QXn7UyM8
DjQUWbWUw1kLZvnUrpvejKBvHCaBmGnNvtOmrWdXKwDRb9Vzj/iJGP4lk7xXXAXOGD0c
2WuCyCWk8b34u6khDjEdsyJDN4eSF5vtf01rYWXo7XaTGN2lDqc/4EbW8X3usiLLV9pQ
N32olUcTcEArqu6TXB6GBAwwWaVUBOl3GlcKaLduDto6NKKS8g4LRye1PyW37GAN5tWA
Ra+Lb1Kaz2SdV9ewxf7iaOWwWHKwc1Ts7hmuEgevsf8/mRUBOwZ5ikTfrrK5ZvxgXdh7
1iaw==
X-Forwarded-Encrypted: i=1; AJvYcCXXSbVnW7hQHQtdMz48CUzg2mY0/+V3Q9cdn6DbKfFMOAVmGFLGx6zcIXV2ei1MlFDke3IOl0MT1dROgiQ=@vger.kernel.org
X-Gm-Message-State: AOJu0YwM+v3xGCOl3UWFPZDEPK8yzWpNhfXcfB1Nd7shr/eWw/r1ZKJw
/KzYvperym9x/4WnMj7km/u0KHSiVJ7A2NAb3hpurbpYiG90vWcHq5LZh1D/5KKsskiOdrUUwHv
AcSNUUSWN3PcLLGdEQxEkMKq1yz/7WaphlLxBhjMo3w==
X-Gm-Gg: ASbGncvD00InDeeh1Uao74TvIW3Xbz2TA+LxPZP1vcNqS1FMIBbbyncUxI+CYBqz1n+
y9oqEvmZsiaCtGmwimbx7cSUg9i9BTkUbtcHGMpEnpsxOPPExfasEcGgl4hMCS2CowMpLBiQowT
pPvqfu8WyLPIeRJOjlDVhcCLvfFEZxd5vgsA==
X-Google-Smtp-Source: AGHT+IFnwa31CIcmyHHl56Vao4/q5XtrthfioWrNJoyx+lhgVVPWYbbs9O9qtYqlGYN36k/DfrFLU8QJs8LWaKoEyMQ=
X-Received: by 2002:a05:6902:2203:b0:e7d:b107:d829 with SMTP id
3f1490d57ef6-e7db107e038mr15334137276.34.1748448322260; Wed, 28 May 2025
09:05:22 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250526122054.65532-1-claudiu.beznea.uj@xxxxxxxxxxxxxx>
<20250526122054.65532-2-claudiu.beznea.uj@xxxxxxxxxxxxxx> <hojdkntm3q5a5ywya7n5i4zy24auko4u6zdqm25infhd44nyfx@x2evb6sc2d45>
<111d2d6c-8ac0-40b9-94c3-02f2f64ef9fe@xxxxxxxxx>
In-Reply-To: <111d2d6c-8ac0-40b9-94c3-02f2f64ef9fe@xxxxxxxxx>
From: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
Date: Wed, 28 May 2025 18:04:45 +0200
X-Gm-Features: AX0GCFuID4VhGiX2apyC0Knv4lDmWLbvgXL8Xh33MSHxiRPOzOEH1v_hZ2IXp8w
Message-ID: <CAPDyKFoQYTNBhtBXY-Ds7E0TohtA6558W1Jf3cLsnXDQC74DSg@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v2 1/2] PM: domains: Add devres variant for dev_pm_domain_attach()
To: Claudiu Beznea <claudiu.beznea@xxxxxxxxx>
Cc: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx>, gregkh@xxxxxxxxxxxxxxxxxxx,
rafael@xxxxxxxxxx, dakr@xxxxxxxxxx, len.brown@xxxxxxxxx, pavel@xxxxxxxxxx,
jic23@xxxxxxxxxx, daniel.lezcano@xxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-pm@xxxxxxxxxxxxxxx, linux-iio@xxxxxxxxxxxxxxx,
linux-renesas-soc@xxxxxxxxxxxxxxx, bhelgaas@xxxxxxxxxx, geert@xxxxxxxxxxxxxx,
Claudiu Beznea <claudiu.beznea.uj@xxxxxxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
[...]
> >> +/**
> >> + * devm_pm_domain_attach - devres-enabled version of dev_pm_domain_attach()
> >> + * @dev: Device to attach.
> >> + * @attach_power_on: Use to indicate whether we should power on the device
> >> + * when attaching (true indicates the device is powered on
> >> + * when attaching).
> >> + * @detach_power_off: Used to indicate whether we should power off the device
> >> + * when detaching (true indicates the device is powered off
> >> + * when detaching).
> >> + *
> >> + * NOTE: this will also handle calling dev_pm_domain_detach() for
> >> + * you during remove phase.
> >> + *
> >> + * Returns 0 on successfully attached PM domain, or a negative error code in
> >> + * case of a failure.
> >> + */
> >> +int devm_pm_domain_attach(struct device *dev, bool attach_power_on,
> >> + bool detach_power_off)
> >
> > Do we have examples where we power on a device and leave it powered on
> > (or do not power on device on attach but power off it on detach)? I
>
> I haven't found one yet.
>
> > believe devm release should strictly mirror the acquisition, so separate
> > flag is not needed.
>
> I was in the middle whether I should do it with 2 flags or only to revert
> the acquisition.
>
> >
> >
> >> +{
> >> + int ret;
> >> +
> >> + ret = dev_pm_domain_attach(dev, attach_power_on);
> >> + if (ret)
> >> + return ret;
> >> +
> >> + if (detach_power_off)
> >> + return devm_add_action_or_reset(dev, devm_pm_domain_detach_off,
> >> + dev);
> >> +
> >> + return devm_add_action_or_reset(dev, devm_pm_domain_detach_on, dev);
> >
> > Instead of 2 separate cleanup methods maybe define dedicated devres:
> >
> > struct dev_pm_domain_devres {
> > struct device *dev;
> > bool power_off;
> > }
> >
> > ?
>
> That was the other option I've thought about but I found the one with 2
> cleanup methods to be simpler. What would you prefer here?
>
> Ulf: could you please let me know what would you prefer here?
As it looks like we agreed to use one cleanup method, the struct
dev_pm_domain_devres seems superfluous to me.
[...]
Kind regards
Uffe
Return-Path: <linux-kernel+bounces-665770-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 818A141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:05:46 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 632F03B9FB9
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:05:23 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 06FF928CF5E;
Wed, 28 May 2025 16:05:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="QRhyVEya"
Received: from casper.infradead.org (casper.infradead.org [90.155.50.34])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id E1234244670;
Wed, 28 May 2025 16:05:29 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448331; cv=none; b=qjMG5YNxS4sD4R99YagF1DS401evkXmYD1Yu/4oujVGm69Z6X7CS7wTdkE0ZBWivqa0brEU8yyGMBwvWDTpeitcgv6LmeYznKc//uwwU8gnCuC2Sr23LsfboyQq4hXQiyL+Am7iEbNJa8+kXNn4Roriz9fU2PIeURW2zT8HIu24=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448331; c=relaxed/simple;
bh=iN66LX31eETjv33P4suFvIHOxzRjRyd7W6pMLndTMzo=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=mzszWUcnNFN5aJqOTEGryOUDh2I/C50rtJep9xiZ/GQqf7AEUbRz/G+CTXpD48bbq94eGA4/1Gs/d/1OCItvP8kXOAK1JBVarpGrB785307d+E4IY69RKr1/19sD8NmXk3hVu7ZOw/jdzieniNFE+XLHj9XVtrZMaCmJ/WARRHg=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=QRhyVEya; arc=none smtp.client-ip=90.155.50.34
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org
Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version:
References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To:
Content-Transfer-Encoding:Content-ID:Content-Description;
bh=+DHCZse1DSsGRv64acL++yjtliJ9RC7E53xqlL/i0E4=; b=QRhyVEya/Kyx7XVjlP806y5ZZ6
O5wfe0vQ5BwtOl46ZG9IMAg+JoCkBi7vrrYnN2gFmg9QxxiAPhM4WBXjKfpZiABWdqtN+oV+LYS3g
nR98+V21vDdA5W1LSKCA89Tdsv+LomvjrKX13b6TCBZi+X/79jvAIJB8sijgoPNHY/41rBf+JD6t+
jXWo4wM15RUdIDcue/YohT1RZvTJZrBf2fG/Fb77TM7Mt2O12E2cN1sU1Dvm0JXw5JORqtaDIPqxp
XnQ2r9a0R473o3LAz0QuDeWkPEFRB14RP76PQFoCMHdWEdufpAJRt11h9Yh549vEaG957oWjn6+oj
H6UPZVdw==;
Received: from 77-249-17-252.cable.dynamic.v4.ziggo.nl ([77.249.17.252] helo=noisy.programming.kicks-ass.net)
by casper.infradead.org with esmtpsa (Exim 4.98.2 #2 (Red Hat Linux))
id 1uKJHQ-0000000DpAN-1XZ6;
Wed, 28 May 2025 16:05:24 +0000
Received: by noisy.programming.kicks-ass.net (Postfix, from userid 1000)
id E7D5F3005AF; Wed, 28 May 2025 18:05:23 +0200 (CEST)
Date: Wed, 28 May 2025 18:05:23 +0200
From: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
To: "Rafael J. Wysocki" <rafael@xxxxxxxxxx>
Cc: "Rafael J. Wysocki" <rjw@xxxxxxxxxxxxx>,
x86 Maintainers <x86@xxxxxxxxxx>,
LKML <linux-kernel@xxxxxxxxxxxxxxx>,
Linux PM <linux-pm@xxxxxxxxxxxxxxx>, Len Brown <lenb@xxxxxxxxxx>,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>, Borislav Petkov <bp@xxxxxxx>,
Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
Artem Bityutskiy <artem.bityutskiy@xxxxxxxxxxxxxxx>,
"Gautham R. Shenoy" <gautham.shenoy@xxxxxxx>,
Ingo Molnar <mingo@xxxxxxxxxx>,
Todd Brandt <todd.e.brandt@xxxxxxxxxxxxxxx>
Subject: Re: [PATCH v1 0/2] x86/smp: Fix power regression introduced by
commit 96040f7273e2
Message-ID: <20250528160523.GE39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <2006806.PYKUYFuaPT@xxxxxxxxxxxxx>
<20250528131759.GA39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<CAJZ5v0i=TWMjPKxGa8eT-prV=dtQo=pwys5amcj3QL9qo=EYyQ@xxxxxxxxxxxxxx>
<20250528133807.GC39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<CAJZ5v0g2+OVdFM-bUCOynNivUc4doxH=ukt9e9Z_nKpoZh6gPA@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <CAJZ5v0g2+OVdFM-bUCOynNivUc4doxH=ukt9e9Z_nKpoZh6gPA@xxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 04:25:19PM +0200, Rafael J. Wysocki wrote:
> If cpuidle is available and works, it will do the same thing.
Why can't we make it available sooner? But no, cpuidle does not do the
same thing -- it was argued it does the right thing because it has them
tables with C states on and doesn't try and divinate from CPUID.
> > The whole point was that mwait_play_dead did not DTRT because hints are
> > stupid and it could not select the deepest C state in an unambiguous
> > fashion.
>
> Yes, on some systems.
The 'on some systems' thing is irrelevant. Either it always works, or it
doesn't and we shouldnt be having it.
> > And now you're restoring that -- code you all argued was fundamentally
> > buggered.
> >
> > Yes is 'fixes' things on old platforms, but it is equally broken on the
> > new platforms where you all argued it was broken on. So either way
> > around you're going to need to fix those, and this isn't it.
> The commit reverted by the first patch removed
> mwait_play_dead_cpuid_hint() altogether, so it never runs and the only
> fallback is hlt_play_dead(), but this doesn't work for disabling SMT
> siblings.
It should either be fixed to always work or stay dead.
> > Now, SMT siblings are all AP, by definition. So can't we simply send
> > them INIT instead of doing CLI;HLT, that way they drop into
> > Wait-for-SIPI and the ucode can sort it out?
>
> No, I don't think so. I don't think that Wait-for-SIPI is an idle state.
>
> But we are discussing patch [2/2] here while really the problem is
> that the commit in question is broken, so it needs to be reverted in
> the first place.
No, you all very much argued that mwait_play_dead couldn't be fixed, as
such it must die and stay dead. Sometimes working is worse than never
working.
So no, I very much object to the revert.
Return-Path: <linux-kernel+bounces-665771-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 2436041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:06:17 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 4E73A3BE842
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:05:56 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 2AA4628C5D3;
Wed, 28 May 2025 16:06:10 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="k7sahqms"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5C34A1D6193;
Wed, 28 May 2025 16:06:08 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448369; cv=none; b=oNJXJuY3PvcKH8nhr0w8H12kTkLADWQ7syEsvinKXhCPjCGv1pXRj+BdgyOWySnqSGnkWOCu8wVqfhXBvA9jy8oYsL4pZXik4JhFVj82xwYzz7N4Tj1A2xqyIn/qNObZOD4ClwqupNAHen8j4R76p9ZbzFzphkQ6MODY2jcaKYY=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448369; c=relaxed/simple;
bh=E39xeMDQKZ3ZvVa5E2QtOO0iwP3p31vysrL4F+yxZJM=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=VNmMNuiufMVspr/rA84t7FsU5cDTbRUnOvSf/cRFpuhnfgZmAewrY42TLgXl2xTiZsMRrYR4BsKIa1uJ4wsXvaAX8OLRBaS4fZnhgJGgGUqTJY9I3ALByezS5AdMj/R9y0jXQAjoelIhcFWtPVBpkVQDRctkX8f0/BPTliZPKdo=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=k7sahqms; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 79CEDC4CEE3;
Wed, 28 May 2025 16:06:06 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748448368;
bh=E39xeMDQKZ3ZvVa5E2QtOO0iwP3p31vysrL4F+yxZJM=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=k7sahqmsm2qzmR0d9kv2eHlH0yQoF3o8f6VJ8OWutWTiGrLuM4c79VZMXrpZ4OLbU
1VNQhGhrk1dSZLC03Z9xy0hFB3ojejIo57HEmZWKtQDJzXQ/1ONdWKgU10UuvdWDJ0
voUiyOM4abGfD9FeM504FY83+skEMLnJF0ZMiV9iMIBhIudKTJvaZksd5zwYH4SB/F
RnE8t29JTO4LyQ50PbrGBDAjdP3qsDp3DontP84JAET9CF7VPBK4PnYo5mLdX5Ccmg
bWTe7joBqst8QJa0npB/NkCWsGaGESGVMciUSEwFb8keLm6dAUgk4oF4taWFLfV47N
B/9Ir/0J1XKlw==
Date: Wed, 28 May 2025 09:06:03 -0700
From: Nathan Chancellor <nathan@xxxxxxxxxx>
To: Thomas Gleixner <tglx@xxxxxxxxxxxxx>, Jiri Slaby <jirislaby@xxxxxxxxxx>
Cc: Lee Jones <lee@xxxxxxxxxx>, Aaro Koskinen <aaro.koskinen@xxxxxx>,
Andreas Kemnade <andreas@xxxxxxxxxxxx>,
Kevin Hilman <khilman@xxxxxxxxxxxx>,
Roger Quadros <rogerq@xxxxxxxxxx>, Tony Lindgren <tony@xxxxxxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx, linux-omap@xxxxxxxxxxxxxxx
Subject: Re: [PATCH] mfd: Remove node variables that are unused with
CONFIG_OF=n
Message-ID: <20250528160603.GA1172935@ax162>
References: <20250508-mfd-fix-unused-node-variables-v1-1-df84d80cca55@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250508-mfd-fix-unused-node-variables-v1-1-df84d80cca55@xxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Thomas,
On Thu, May 08, 2025 at 04:57:24PM +0100, Nathan Chancellor wrote:
> A recent cleanup introduced a few instances of -Wunused-variable in
> configurations without CONFIG_OF because of_fwnode_handle() does not
> reference its argument in that case:
>
> drivers/mfd/twl4030-irq.c: In function 'twl4030_init_irq':
> drivers/mfd/twl4030-irq.c:679:46: warning: unused variable 'node' [-Wunused-variable]
> 679 | struct device_node *node = dev->of_node;
> | ^~~~
> drivers/mfd/max8925-core.c: In function 'max8925_irq_init':
> drivers/mfd/max8925-core.c:659:29: warning: unused variable 'node' [-Wunused-variable]
> 659 | struct device_node *node = chip->dev->of_node;
> | ^~~~
> drivers/mfd/88pm860x-core.c: In function 'device_irq_init':
> drivers/mfd/88pm860x-core.c:576:29: warning: unused variable 'node' [-Wunused-variable]
> 576 | struct device_node *node = i2c->dev.of_node;
> | ^~~~
These warnings are now present in mainline after the merge of the
irq/cleanups branch...
> Use the value of these variables as the argument to of_fwnode_handle()
> directly, clearing up the warnings.
>
> Fixes: e3d44f11da04 ("mfd: Switch to irq_domain_create_*()")
but this hash has changed, so this should be
Fixes: a36aa0f7226a ("mfd: Switch to irq_domain_create_*()")
but the rest of the change is still applicable. Would you like a new
change or can you adjust that when applying?
> Signed-off-by: Nathan Chancellor <nathan@xxxxxxxxxx>
> ---
> drivers/mfd/88pm860x-core.c | 5 ++---
> drivers/mfd/max8925-core.c | 5 ++---
> drivers/mfd/twl4030-irq.c | 5 ++---
> 3 files changed, 6 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/mfd/88pm860x-core.c b/drivers/mfd/88pm860x-core.c
> index 488e346047c1..25300b53a8ef 100644
> --- a/drivers/mfd/88pm860x-core.c
> +++ b/drivers/mfd/88pm860x-core.c
> @@ -573,7 +573,6 @@ static int device_irq_init(struct pm860x_chip *chip,
> unsigned long flags = IRQF_TRIGGER_FALLING | IRQF_ONESHOT;
> int data, mask, ret = -EINVAL;
> int nr_irqs, irq_base = -1;
> - struct device_node *node = i2c->dev.of_node;
>
> mask = PM8607_B0_MISC1_INV_INT | PM8607_B0_MISC1_INT_CLEAR
> | PM8607_B0_MISC1_INT_MASK;
> @@ -624,8 +623,8 @@ static int device_irq_init(struct pm860x_chip *chip,
> ret = -EBUSY;
> goto out;
> }
> - irq_domain_create_legacy(of_fwnode_handle(node), nr_irqs, chip->irq_base, 0,
> - &pm860x_irq_domain_ops, chip);
> + irq_domain_create_legacy(of_fwnode_handle(i2c->dev.of_node), nr_irqs,
> + chip->irq_base, 0, &pm860x_irq_domain_ops, chip);
> chip->core_irq = i2c->irq;
> if (!chip->core_irq)
> goto out;
> diff --git a/drivers/mfd/max8925-core.c b/drivers/mfd/max8925-core.c
> index 78b16c67a5fc..91388477ad2b 100644
> --- a/drivers/mfd/max8925-core.c
> +++ b/drivers/mfd/max8925-core.c
> @@ -656,7 +656,6 @@ static int max8925_irq_init(struct max8925_chip *chip, int irq,
> {
> unsigned long flags = IRQF_TRIGGER_FALLING | IRQF_ONESHOT;
> int ret;
> - struct device_node *node = chip->dev->of_node;
>
> /* clear all interrupts */
> max8925_reg_read(chip->i2c, MAX8925_CHG_IRQ1);
> @@ -682,8 +681,8 @@ static int max8925_irq_init(struct max8925_chip *chip, int irq,
> return -EBUSY;
> }
>
> - irq_domain_create_legacy(of_fwnode_handle(node), MAX8925_NR_IRQS, chip->irq_base, 0,
> - &max8925_irq_domain_ops, chip);
> + irq_domain_create_legacy(of_fwnode_handle(chip->dev->of_node), MAX8925_NR_IRQS,
> + chip->irq_base, 0, &max8925_irq_domain_ops, chip);
>
> /* request irq handler for pmic main irq*/
> chip->core_irq = irq;
> diff --git a/drivers/mfd/twl4030-irq.c b/drivers/mfd/twl4030-irq.c
> index 232c2bfe8c18..c7191d2992a1 100644
> --- a/drivers/mfd/twl4030-irq.c
> +++ b/drivers/mfd/twl4030-irq.c
> @@ -676,7 +676,6 @@ int twl4030_init_irq(struct device *dev, int irq_num)
> static struct irq_chip twl4030_irq_chip;
> int status, i;
> int irq_base, irq_end, nr_irqs;
> - struct device_node *node = dev->of_node;
>
> /*
> * TWL core and pwr interrupts must be contiguous because
> @@ -691,8 +690,8 @@ int twl4030_init_irq(struct device *dev, int irq_num)
> return irq_base;
> }
>
> - irq_domain_create_legacy(of_fwnode_handle(node), nr_irqs, irq_base, 0,
> - &irq_domain_simple_ops, NULL);
> + irq_domain_create_legacy(of_fwnode_handle(dev->of_node), nr_irqs,
> + irq_base, 0, &irq_domain_simple_ops, NULL);
>
> irq_end = irq_base + TWL4030_CORE_NR_IRQS;
>
>
> ---
> base-commit: c63e393a16c9c4cf8c9b70fedf9f27b442874ef2
> change-id: 20250508-mfd-fix-unused-node-variables-14fe4f2cfd6c
>
> Best regards,
> --
> Nathan Chancellor <nathan@xxxxxxxxxx>
>
Return-Path: <linux-kernel+bounces-665772-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 93F0D41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:08:42 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 76A129E5943
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:08:19 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 0764328C86A;
Wed, 28 May 2025 16:08:31 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="DTP6sStv"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 964C1214A69
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:08:28 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448510; cv=none; b=YD0w7FO960JQN4avh7zsdSyP+UA97bbuEBPN4bXkLZKt5kCJt2gexivGTgOYZfjJEDLal31Bh8r8ytig9GTS4mSNut6CrMxo+eIg9RNbEb7fSdThzsTZU4Sgx0LSEU2gZ2oat4jhtYiXMfKGxBaQYKev6/Fs3CPtVDRUPElX3qQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448510; c=relaxed/simple;
bh=LibnRIxltzpbANK+z/ZCNtTGSZsFrtMBHyUPR93lW28=;
h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References:
Content-Type:MIME-Version; b=ZaAfV1OTAu1hQmyQI2BhwFRoHF21fYoT4f//JCx33En1Up744HVVqnPAmdvHSfJb8i4fGTKPbS3LgzguMgmvvDrXswPIo8YR9ZZacuOYAiGYnkAJ92QvXWxc2TcmCBuWfTVixoie0YWPjCzPgSkfphOZ11GZ/qnCRRlPLdJ4Oz0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=DTP6sStv; arc=none smtp.client-ip=170.10.133.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748448507;
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:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=ELCjKD+gxUuR3aRJg9A9JbOeDRYY9q3dgElqJB30ab4=;
b=DTP6sStvhnHjYESwgyTmF0GG2suoJ3+RMxOQTNERnl+bzK/BONvH4ML3HpR7zqu4b//hBx
zTmYt095F80Ywm+X7wjc7dnjJpssjlgmzjxCIKPSLNY/a9dHs2SQUDBxW2w2MuihwzATSD
rlVx9I046oTc+bGKVqmpa0OHWW0Z5eg=
Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com
[209.85.222.199]) by relay.mimecast.com with ESMTP with STARTTLS
(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
us-mta-332-gHVqQf4uMKmuXeGvCOi_ZQ-1; Wed, 28 May 2025 12:08:26 -0400
X-MC-Unique: gHVqQf4uMKmuXeGvCOi_ZQ-1
X-Mimecast-MFC-AGG-ID: gHVqQf4uMKmuXeGvCOi_ZQ_1748448505
Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-7ceb5b5140eso851423185a.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:08:26 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748448505; x=1749053305;
h=mime-version:user-agent:content-transfer-encoding:references
:in-reply-to:date:cc:to:from:subject:message-id:x-gm-message-state
:from:to:cc:subject:date:message-id:reply-to;
bh=ELCjKD+gxUuR3aRJg9A9JbOeDRYY9q3dgElqJB30ab4=;
b=cEggGdTnHfT9/kn6XeuLbhKamRn9DB19sElFqYtjB+Uh2X2qHL765LOrH8OlzY7zBY
Ci4CpcnZi3DiqRVM8TsogsFHUHY6LSfKIhF3TDeU8S+bNq759R6TEBxo8fzao2SP6J3E
fapoKzWIqHTXIvztSmFgTzRuVI36MU0/Iw71uvvk7cOTPyfbUpQhVypk50lWSFSOLkd+
/oTuWE8XcEviPdxIms810fcUPsKvugqpJUhHg87SWmEYGcOtGLd01wgs6hZS8MNewHOs
wGP7WD16Vgj0YmAhVV8jWgMO2/J9BaMU0XQ7SgmqXdS7iVPOqTg93NjiwVt7mp1DPJKX
2wug==
X-Forwarded-Encrypted: i=1; AJvYcCXDxUbTPnwWFUG/ivamIbYRkKdYuEEHF89NaGJhiMllJ5GxUGkR0fi1JYnqyL78iTgtjxXfoVDMDqYurXc=@vger.kernel.org
X-Gm-Message-State: AOJu0YwppMfMTZAXunfGIbWhbGjgmTaZH3wl7W3MmiYqRHPrkGbs2R0O
u17fC1dJX8GJil/whvqrOkRqxK0WSF/D+9cdwrKWKiAiby4RG24FnvoTYU9DPxyY6g07cbxcXvh
Tc5uh+5Tpo8YEd/J/Ka45nUt/+/lTB8o4T83vFjxqBWB5p26RfhW+fK2/tgCGSR9C9w==
X-Gm-Gg: ASbGncudBTWhiuu29GyTqNtKX8Gnc4iHFaJpQS3pEElLbM3TxRE37XX1JlxIu4wJj+I
mNmVLpb8lW8ogiobX2O1Jx21sAR0Ne6noLCDtkXL37syNw614fuAfOCWV+e7XhwvorL6D7jRohu
bH4F5mYJej3Ibn58r+7/AVd6G9ma356RxB/PMPIqco2XTVXdftrSgKD0ZBxejiLvqNWWMq+opVV
QjGjDmNLkD4ettVBqLYl6q/XIKnE5VCfk/KmFgrDxfGjaMvR0vwqYZJcVYMDgh10HrhSYswaPwN
XITKHs6hfQz9mPKM31H2oDvJ7YNNyNao65cf8yhAfERLxyvZAalYo8d814s=
X-Received: by 2002:a05:620a:424d:b0:7c5:962b:e87c with SMTP id af79cd13be357-7ceecc296f9mr2823528785a.44.1748448505351;
Wed, 28 May 2025 09:08:25 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IGwBg64uo0z4Bgibxmg+9R08YonGSy0ylNwRuFxVQIAkQT9OnjwXxcnU1GDcfo/I0jNy+NrwQ==
X-Received: by 2002:a05:620a:424d:b0:7c5:962b:e87c with SMTP id af79cd13be357-7ceecc296f9mr2823520385a.44.1748448504590;
Wed, 28 May 2025 09:08:24 -0700 (PDT)
Received: from ?IPv6:2607:fea8:fc01:8d8d:5c3d:ce6:f389:cd38? ([2607:fea8:fc01:8d8d:5c3d:ce6:f389:cd38])
by smtp.gmail.com with ESMTPSA id af79cd13be357-7cfb8210270sm87017585a.31.2025.05.28.09.08.23
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 09:08:24 -0700 (PDT)
Message-ID: <fadc8e044c3b18984b0ca4a88ef214feb779034d.camel@xxxxxxxxxx>
Subject: Re: [PATCH] rust: add helper for mutex_trylock
From: mlevitsk@xxxxxxxxxx
To: Paolo Bonzini <pbonzini@xxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx,
kvm@xxxxxxxxxxxxxxx
Cc: rust-for-linux@xxxxxxxxxxxxxxx, ojeda@xxxxxxxxxx, Stephen Rothwell
<sfr@xxxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 12:08:23 -0400
In-Reply-To: <20250528083431.1875345-1-pbonzini@xxxxxxxxxx>
References: <20250528083431.1875345-1-pbonzini@xxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
User-Agent: Evolution 3.52.4 (3.52.4-1.fc40)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 2025-05-28 at 10:34 +0200, Paolo Bonzini wrote:
> After commit c5b6ababd21a ("locking/mutex: implement mutex_trylock_nested=
",
> currently in the KVM tree) mutex_trylock() will be a macro when lockdep i=
s
> enabled.=C2=A0 Rust therefore needs the corresponding helper.=C2=A0 Just =
add it and
> the rust/bindings/bindings_helpers_generated.rs Makefile rules will do
> their thing.
>=20
> Reported-by: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx>
> Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>
Hi,
Sorry for that.=C2=A0
Next time I'll check rust bindings as well, I never had to deal with them b=
efore.
Reviewed-by: Maxim Levitsky <mlevitsk@xxxxxxxxxx>
Best regards,
Maxim Levitsky
> ---
> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ok to apply to the KVM tree?
>=20
> =C2=A0rust/helpers/mutex.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 =
5 +++++
> =C2=A01 files changed, 5 insertions(+)
>=20
> diff a/rust/helpers/mutex.c b/rust/helpers/mutex.c
> index 06575553eda5,06575553eda5..9ab29104bee1
> --- a/rust/helpers/mutex.c
> +++ b/rust/helpers/mutex.c
> @@ -7,6 +7,11 @@ void rust_helper_mutex_lock(struct mute
> =C2=A0 mutex_lock(lock);
> =C2=A0}
> =C2=A0
> +int rust_helper_mutex_trylock(struct mutex *lock)
> +{
> + return mutex_trylock(lock);
> +}
> +
> =C2=A0void rust_helper___mutex_init(struct mutex *mutex, const char *name=
,
> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 struct lock_class_key *key)
> =C2=A0{
>=20
>=20
Return-Path: <linux-kernel+bounces-665773-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 766E741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:09:29 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 85D0C9E3BF1
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:09:08 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id D4AA828C867;
Wed, 28 May 2025 16:09:20 +0000 (UTC)
Received: from foss.arm.com (foss.arm.com [217.140.110.172])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 5FFF627817D;
Wed, 28 May 2025 16:09:18 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448560; cv=none; b=tchcmLfnlgpmHPWJy0aK6qhO4hh4S89euPjpN59rhUi4NYtyL/ZWxIE1Mh3TAlxUac+V25SQfeNQh1TGcjwH8lySbaJvJ3cBtK/3pThHfKi8uNdSCZyZ+3g/+NlCi5ZUzPZOU+AL03miVFbrR3dKpBpFNrqFO9ZNc1dGsEbj4yU=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448560; c=relaxed/simple;
bh=O2qtelB4US+cJIhzPme3LIw1Jt2jPMgLescTbOZA/UE=;
h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
In-Reply-To:Content-Type; b=jT+NIGTPkbdbfNCpJMihc7xENwkERpzYdQDPBX3PF/o9RTFa7cV0YCs/nidGtl4Cf7T8fhmHUl1Nsi3Ue5Bsk87TTuW8TJ/O5DsfKAc4pVe1vto6Iil6kq2bVXGUYIEKNe5f/p+SSm2fVZ+YCGCqb2UnuhxPsAD1X8jd/LmZiSc=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1FEFF1A2D;
Wed, 28 May 2025 09:09:01 -0700 (PDT)
Received: from [10.57.48.160] (unknown [10.57.48.160])
by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 7C4D93F673;
Wed, 28 May 2025 09:09:14 -0700 (PDT)
Message-ID: <4f5c956e-19e7-4df0-b1f2-d8750c0af4d7@xxxxxxx>
Date: Wed, 28 May 2025 17:09:12 +0100
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH v21 3/4] KVM: arm64: nvhe: Disable branch generation in
nVHE guests
Content-Language: en-GB
To: "Rob Herring (Arm)" <robh@xxxxxxxxxx>, Will Deacon <will@xxxxxxxxxx>,
Mark Rutland <mark.rutland@xxxxxxx>,
Catalin Marinas <catalin.marinas@xxxxxxx>, Jonathan Corbet <corbet@xxxxxxx>,
Marc Zyngier <maz@xxxxxxxxxx>, Oliver Upton <oliver.upton@xxxxxxxxx>,
Joey Gouly <joey.gouly@xxxxxxx>, Zenghui Yu <yuzenghui@xxxxxxxxxx>,
James Clark <james.clark@xxxxxxxxxx>,
Anshuman Khandual <anshuman.khandual@xxxxxxx>, Leo Yan <leo.yan@xxxxxxx>
Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-perf-users@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-doc@xxxxxxxxxxxxxxx,
kvmarm@xxxxxxxxxxxxxxx
References: <20250407-arm-brbe-v19-v21-0-ff187ff6c928@xxxxxxxxxx>
<20250407-arm-brbe-v19-v21-3-ff187ff6c928@xxxxxxxxxx>
From: Suzuki K Poulose <suzuki.poulose@xxxxxxx>
In-Reply-To: <20250407-arm-brbe-v19-v21-3-ff187ff6c928@xxxxxxxxxx>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On 07/04/2025 18:41, Rob Herring (Arm) wrote:
> From: Anshuman Khandual <anshuman.khandual@xxxxxxx>
>
> While BRBE can record branches within guests, the host recording
> branches in guests is not supported by perf (though events are).
> Support for BRBE in guests will supported by providing direct access
> to BRBE within the guests. That is how x86 LBR works for guests.
> Therefore, BRBE needs to be disabled on guest entry and restored on
> exit.
>
> For nVHE, this requires explicit handling for guests. Before
> entering a guest, save the BRBE state and disable the it. When
> returning to the host, restore the state.
>
> For VHE, it is not necessary. We initialize
> BRBCR_EL1.{E1BRE,E0BRE}=={0,0} at boot time, and HCR_EL2.TGE==1 while
> running in the host. We configure BRBCR_EL2.{E2BRE,E0HBRE} to enable
> branch recording in the host. When entering the guest, we set
> HCR_EL2.TGE==0 which means BRBCR_EL1 is used instead of BRBCR_EL2.
> Consequently for VHE, BRBE recording is disabled at EL1 and EL0 when
> running a guest.
>
> Should recording in guests (by the host) ever be desired, the perf ABI
> will need to be extended to distinguish guest addresses (struct
> perf_branch_entry.priv) for starters. BRBE records would also need to be
> invalidated on guest entry/exit as guest/host EL1 and EL0 records can't
> be distinguished.
>
> Signed-off-by: Anshuman Khandual <anshuman.khandual@xxxxxxx>
> Signed-off-by: Mark Rutland <mark.rutland@xxxxxxx>
> Co-developed-by: Rob Herring (Arm) <robh@xxxxxxxxxx>
> Tested-by: James Clark <james.clark@xxxxxxxxxx>
> Signed-off-by: Rob Herring (Arm) <robh@xxxxxxxxxx>
Reviewed-by: Suzuki K Poulose <suzuki.poulose@xxxxxxx>
Return-Path: <linux-kernel+bounces-665774-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E8D7741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:09:44 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 173487A6A40
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:08:26 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 12E7428CF5F;
Wed, 28 May 2025 16:09:22 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="jATkvto2"
Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1FCA728C011
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:09:18 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448561; cv=none; b=SKmu/hquBbH+xKFQK1RtkGUBDFZGerMzXdoetN9YNwv8r2vi2syqIUOSdokn4TiMfU+OCZaxcdRLYK0anBk+zNO6ibcnSemu6DJxKfhViw7r0boEiad5kZdggR4W1T2UUQtwzbG0g+zSdB48GEJ70UOY0ALCE6h6RF790US+lwA=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448561; c=relaxed/simple;
bh=np8r8DuK6ohXYj94bzpiLLJFXyF2GOtaPunqIgAdjGE=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=tdovY5HV8ZM6G1q6txgaSr3urknZ0pHTxVsqhpvPThj/Y2WET5El1cEPvWcUD1SjlUyZg/Z57NH/e/U+pLxPDve+dfXutWFYjCcwA2N+mEPZX2NOwJT36hN1nZrePCiIM8FFlrljv+JAY+XpbO9y4zLKLi9I+T60A+4j7oHZkjQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=jATkvto2; arc=none smtp.client-ip=205.220.180.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com
Received: from pps.filterd (m0279871.ppops.net [127.0.0.1])
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S6qBiS021217
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:09:17 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=
cc:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to; s=qcppdkim1; bh=0ebk4FuXKBEehQnwIzWbtceY
5Eq5Hvk7/WPMviultPQ=; b=jATkvto2sObAkLZQpbEMzNj94YJNvCCQ5aSCVBDh
XTcWBQ2FjoLXpexqv68kpBzYdad4VozIQcq3xnzDnh6oCeqRE8Cx37JVopqaGCqO
2e7+CzGS4hS53+T6kLKboYju65mFsKpiovPevzTkySJTgNlZNKvX8jHhUERZMyDU
wlvDVWhnuJ5fzjf03HI1Q4z3j9BX8326ajLkaGaemlnbNYlpSHbXua0nIeutZnFq
9/aamuWTykZFzcQRz+i0Cs067IbHC+doHuMPO34fglInHZ9aFUBEm5H7MQH+x7tB
DOe0PnSFAaOqW9g/u3KXCnXVfQ0qYOolg1U13yusYooq+A==
Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69])
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46vmgcy8k2-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT)
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:09:17 +0000 (GMT)
Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-311e7d05931so881886a91.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:09:17 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748448556; x=1749053356;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=0ebk4FuXKBEehQnwIzWbtceY5Eq5Hvk7/WPMviultPQ=;
b=Lm9Rq6o3M6H8gcG4MUZ69ovKz1teVi8H2WcT7ZPZDmh7SQNS7+O2N/VnRKn5kKUqtS
ogV0MEp3IESWfMe1/Zs6CgOjPjwGwMzp4EAy0KINgaE0mogfO/ioA3bpqGDq+WIo2iJh
o7ITJKETkZclGHu/Gr36bm0BULdJ7iY+R1Ysod+oM1D1sg1PiAz7t+sgP9ULEMyM5lr+
DxdevPHSgS8vUs3Pm73EIY2ZuisXlMcRnBdQ/HjhO6rVvW9pgFGyKhmPbwP7xXZzYip2
/CHEPhkHS8+kIZkurYoc6kUL+MalsZJdFOa8LVEK9m3e+8OzbXGvhOxtyhSWvZRPUljW
U1RA==
X-Forwarded-Encrypted: i=1; AJvYcCXero8QKQWSuPgRH+4NMPY0I6f4CL7RJTI3PcmzotpNpcFTXWS6ou0DJovM8KDcfHQm29ngCqSsSt24pLY=@vger.kernel.org
X-Gm-Message-State: AOJu0YyCsl2jtrFYaabDvsqhxbenQJj0em3RBV62fSzxgoZJA7gBeizP
9yOiEgmiFLcUwMNR6fJwq0zfvjElAu1rDf2tONDyNMSt6sfBQlfq5m+xwqnKxQDKA0irGwUhhEh
EosvRLCWzyVt8TidhZBS2jzJJaUgRG51MTOFsUpuEuJGcSu0gMYgUd/eLK8D3vgY18OYY/5fCC5
8t9Wcqy3CIF+uPcclEew5chU6vjky+qoXij3LGZAmB1A==
X-Gm-Gg: ASbGnct21pIUj7C2k2QfpAcs9pKsqJTfHXOYtyfXiBwJ1hr2HqO9qtSpIfpJtmjLN9s
pODLEAwL/ySh1gDq94344H3/VxeLxaCB3k/BXcHDn5NjRMZFbvDEQhwrvbxibylnExhz0bPF6oB
6lYfBU8AUfVO6q26wwb30zUZ0=
X-Received: by 2002:a17:90b:1fc8:b0:311:e8cc:4264 with SMTP id 98e67ed59e1d1-311e8cc4409mr5694233a91.12.1748448556270;
Wed, 28 May 2025 09:09:16 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IEEyU9Na6w19P6vBrFWsatyjVSIe0mXXTuG1XS0eEc1904ZaykvV6ov/DP09T7xW5vDmnuTXfgVmAxcYzfANhw=
X-Received: by 2002:a17:90b:1fc8:b0:311:e8cc:4264 with SMTP id
98e67ed59e1d1-311e8cc4409mr5694169a91.12.1748448555821; Wed, 28 May 2025
09:09:15 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250527081447.304-1-kernel@xxxxxxxxxx> <e2dnvpbze4xuubggduqr3p5nnhg7huk3dnpdcb6tldxbrn2qtn@bfsewz5trfv3>
<bc321a71-1934-4889-bd8e-3bb593c8feba@xxxxxxxxxxxxxx>
In-Reply-To: <bc321a71-1934-4889-bd8e-3bb593c8feba@xxxxxxxxxxxxxx>
From: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 19:09:04 +0300
X-Gm-Features: AX0GCFsUqNN07CMI1cNHp3U4iz8XhLlLFw-nWKQWlciyho8w9zoePiczSCHemug
Message-ID: <CAO9ioeXLSQyBFuedtt4=_OjEWZW6T9HaaYr8_NiNy2eh4yw-qg@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v3] drm/rockchip: cdn-dp: Convert to drm bridge
To: Chaoyi Chen <chaoyi.chen@xxxxxxxxxxxxxx>
Cc: Chaoyi Chen <kernel@xxxxxxxxxx>, Sandy Huang <hjc@xxxxxxxxxxxxxx>,
Heiko Stuebner <heiko@xxxxxxxxx>, Andy Yan <andy.yan@xxxxxxxxxxxxxx>,
Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>,
Maxime Ripard <mripard@xxxxxxxxxx>,
Thomas Zimmermann <tzimmermann@xxxxxxx>,
David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx,
linux-rockchip@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
X-Proofpoint-ORIG-GUID: 58mJwtDytTaUbJZ_gQkG0UH_n-9L1uiu
X-Proofpoint-GUID: 58mJwtDytTaUbJZ_gQkG0UH_n-9L1uiu
X-Authority-Analysis: v=2.4 cv=Ws4rMcfv c=1 sm=1 tr=0 ts=6837352d cx=c_pps
a=vVfyC5vLCtgYJKYeQD43oA==:117 a=IkcTkHD0fZMA:10 a=dt9VzEwgFbYA:10
a=VwQbUJbxAAAA:8 a=ePr-TV-LAAAA:8 a=s8YR1HE3AAAA:8 a=RRhK3aCThXU4g2SLoiEA:9
a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 a=uGDpjx9DKq9E8W49yboe:22
a=jGH_LyMDp9YhSvY-UuyI:22
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDE0MSBTYWx0ZWRfX7lkxnAUo4n1V
PuMlGKh5k9tMVoC7eU/TXnEuSaEXA/1xfp8VpC/NCpOxKrJFKlU/zZAToL8LfXgCzcHjEM1uxTs
bbhTVfZ4O1cbkE/F9RGXTl5BZGtr6x/rE3EIQCP9azxH3y29cvrMEA97Htgvj6Nn9zA234s2ns/
l/XEPNOiJceRKvfXGt9TBmBegDkvOiRmVcIaDCRf+pQxSrIYOMIZKaZtXYOWfYwbSykmPcu5zQ0
1/v/5FocDKrtIist/ZylRmRemicYoiwVbBuBCFveeSReBr9tzG7wtKdrM0DjicrVQdZjTT9upLE
GLCr5jQ/Elqo7Vm4ewOnMF7VocdQ/TMqxA6YpbfA06ADfSEkkHBMPVRi8RNv/pYaLWDrl7fe6oH
VpLzg93oPmg12BSjszg/2pfbOEHSUkCs7bmFf0+zaCsptQttxIptr3Peb8ML4B/Fd9aCpc/V
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_08,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
suspectscore=0 clxscore=1015 impostorscore=0 spamscore=0 adultscore=0
phishscore=0 mlxlogscore=966 priorityscore=1501 malwarescore=0
lowpriorityscore=0 bulkscore=0 mlxscore=0 classifier=spam authscore=0
authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1
engine=8.19.0-2505160000 definitions=main-2505280141
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 at 04:57, Chaoyi Chen <chaoyi.chen@xxxxxxxxxxxxxx> wrote:
>
> Hi Dmitry,
>
> On 2025/5/28 4:25, Dmitry Baryshkov wrote:
> > On Tue, May 27, 2025 at 04:14:47PM +0800, Chaoyi Chen wrote:
> >> From: Chaoyi Chen <chaoyi.chen@xxxxxxxxxxxxxx>
> >>
> >> Convert it to drm bridge driver, it will be convenient for us to
> >> migrate the connector part to the display driver later.
> >> Considering that some code depend on the connector, the following
> >> changes have been made:
> >> - Only process edid in &drm_bridge_funcs.edid_read(), so no need to
> >> store additional edid info.
> >> - Now cdn_dp_get_sink_capability() only focused on reading DPCD_REV.
> >> - Update bpc info in cdn_dp_bridge_atomic_enable() instead of
> >> cdn_dp_encoder_mode_set(). Actually, the bpc data will be used in
> >> cdn_dp_bridge_atomic_enable().
> >> - Switch to use DRM_BRIDGE_OP_DP_AUDIO helpers.
> >>
> >> This patch also convert to use devm_drm_bridge_alloc() API.
> >>
> >> Tested with RK3399 EVB IND board.
> >>
> >> Signed-off-by: Chaoyi Chen <chaoyi.chen@xxxxxxxxxxxxxx>
> >> ---
> >>
> >> Changes in v3:
> >> - Link to V2: https://lore.kernel.org/all/20250523011310.120-1-kernel@xxxxxxxxxx/
> >> - Switch to use DRM_BRIDGE_OP_DP_AUDIO helpers
> >> - Remove the dependency for connector
> >> - Remove the extra stored edid
> >> - Code cleanup
> >>
> >> Changes in v2:
> >> - Link to V1: https://lore.kernel.org/all/20250507035148.415-1-kernel@xxxxxxxxxx/
> >> - Use drm_atomic_get_new_connector_for_encoder() to get connector
> >> - Convert to use devm_drm_bridge_alloc() API
> >> - Fix typo: cdn_dp_connector_edid_read -> cdn_dp_bridge_edid_read
> >>
> >> drivers/gpu/drm/rockchip/cdn-dp-core.c | 279 ++++++++++---------------
> >> drivers/gpu/drm/rockchip/cdn-dp-core.h | 9 +-
> >> 2 files changed, 110 insertions(+), 178 deletions(-)
> >>
> >
> >> @@ -595,16 +546,41 @@ static bool cdn_dp_check_link_status(struct cdn_dp_device *dp)
> >> static void cdn_dp_audio_handle_plugged_change(struct cdn_dp_device *dp,
> >> bool plugged)
> >> {
> >> - if (dp->codec_dev)
> >> - dp->plugged_cb(dp->codec_dev, plugged);
> >> + if (dp->sink_has_audio)
> >> + drm_connector_hdmi_audio_plugged_notify(dp->connector, plugged);
> > I'd say, notify always and let userspace figure it out via the ELD. Then
> > you shouldn't need sink_has_audio. This would match the behaviour of
> > HDMI drivers.
>
> Oh, I find that there are similar usages in qcom msm driver. Is there
> any more progress?
For msm driver it is required as DSP requires HDMI to be plugged for
the audio path to work.
>
>
> >
> >> }
> >>
> > [...]
> >
> >> @@ -705,8 +681,6 @@ static int cdn_dp_encoder_atomic_check(struct drm_encoder *encoder,
> >>
> >> static const struct drm_encoder_helper_funcs cdn_dp_encoder_helper_funcs = {
> >> .mode_set = cdn_dp_encoder_mode_set,
> >> - .enable = cdn_dp_encoder_enable,
> >> - .disable = cdn_dp_encoder_disable,
> >> .atomic_check = cdn_dp_encoder_atomic_check,
> > Nit: for the future cleanup, it should probably be possible to get rid
> > of these encoder ops too by moving them to the bridge ops.
>
> Interesting, have these patches been submitted upstream yet?
Everything is already there, see drm_bridge_funcs::mode_set() and
drm_bridge_funcs::atomic_check().
--
With best wishes
Dmitry
Return-Path: <linux-kernel+bounces-665775-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 96D7E41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:10:07 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id EAF247A9468
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:08:48 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 5519728CF47;
Wed, 28 May 2025 16:09:58 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Ob8KMb7s"
Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 001F828C854;
Wed, 28 May 2025 16:09:55 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.180
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448597; cv=none; b=CHusmOkR7EGBZDrS2jfewd61Y9A7KU0FN95Ffv/xGZrqBIkGZZtJilcFNVtS2G/Xlh91B7uSArQth5LFJc5izhNn9k/xCAvIQhrlaMVdIo+vFznj7qQSOvTyQVu1c2Zv+TBrHY/5GnVyR6LlgVr8+pZ3SPwPFN7lZyPzNHaEQwQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448597; c=relaxed/simple;
bh=4pIzHoj8Wd1R86ms192nvXS2WXmNPmnprRiEWCCPGQM=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=FDprm9STEEBjtWEACuut1bAQ1IBYDbasLQUtZKyS2szeG1t8To7XKT0O0IYG2AcTjniBjriGgx8+//Z6fu6yScc4mHDywQrg9BMeeVBF42qBRZGX92EifxHTznNnh2TqvkulpIO1l/Z77VxPq4rNn/J/hX60eHmCgUDJFUMIV7c=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Ob8KMb7s; arc=none smtp.client-ip=209.85.214.180
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-2349282084bso303095ad.1;
Wed, 28 May 2025 09:09:55 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748448595; x=1749053395; darn=vger.kernel.org;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to;
bh=0ndd+6L/B1sq36+O8/FHu3Tozs8dSSyaGb710UgM7Sw=;
b=Ob8KMb7sXw9qOww1CJ+j2EA3BohfJgH+6+eIzgJygYs8Us/xuZVykTg3l1qoiOk94Z
kK69CrKS0dPGY4xLxuXuLNdHfWQ0b854d4qCo+bI6I7hSuvi3GfDwTVUIhq/YtDkvmm5
ygGCsMuU4eTR9zOwScX7SbRNEyY0GnRIIcU9kcx3SbBXkCE95cLAaBJKdutNOaRn/v7b
POxaohp2SJNd+ipVNGgq12RtBIbfZ0SQNtFuUdprB7a0Wx54o2TdnYfjXnquTlAQdydi
m4r3AFGACrS5GPVR+blIvfPKHZyAmjUPI8uJcYOj6MrF1CuAbemtXbmskKrGPMjrZhmh
DiDg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748448595; x=1749053395;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=0ndd+6L/B1sq36+O8/FHu3Tozs8dSSyaGb710UgM7Sw=;
b=mCZTFt+KRgzPendUq2S+9dmQlPs8s+LB+Fau71547arXwu8zp0+ZO05yh/1jjoJy7a
EQWkpEjhQL8/To/6V5zDRNysJUiJc1mcOCe5wqOVObuEkScWPtCrQfzg4jC87OHa0rws
H8cEk3KFi6wX8bMpoRdtenoV2ObTrUNRHKd0sdvT8O7bYAXPUeMQIVWejbjjygKBkPVp
49kyJ06LkIHBSRS9pNAf0/6FAJ/ZRb8p/pmx/unw+29yLdF8Lvsl3BcVsqY/QiiiA3Jj
dvnx7UpqGKkYiU+R6jraxDDADTfwT9szhJwXKS9q5lfaDYzH6zy2OaKvefLyTs+tanDT
TheQ==
X-Forwarded-Encrypted: i=1; AJvYcCW5YC3IgSQNFTFJa89ACBYMYvD1WBJkYwxTDbQ+is/q1NdrRM5flVaj2t8CZFZeZLY57i+a1rx3VEHDyadm+46lnbo=@vger.kernel.org, AJvYcCWPdzGd5Dkb+5YEx600LeUQra2Ze/Fr6S/8qDrrjfP93b8FurWeE9ow40CxGEvCbTM4Ocfs4vriwOQ=@vger.kernel.org, AJvYcCWfphGpcIlN7PPSZFGEZGMGab9uFGF+OfvbkPEWfkzMK+AOTOpwTt6tmoK7ZK6lJf5CmA4ro54tGbjJjLtp@xxxxxxxxxxxxxxx, AJvYcCX/kmw5uCT9wJnRNbk77b/ljR+B/Dlt2mbys26QoD+pWkZgC/+lDXHorSgYACj6vPI0tYYHF2X59xA=@vger.kernel.org
X-Gm-Message-State: AOJu0YzLxIbHYRuvqJZedLzUXuWYkZrv2YKhUiqcLsymzh0TS6BUcso2
p2LKCWgz7RhQAq5VysvFHlPi8Cs8v/wtMlrccjutWYRVbaHJTeC9sfJ4
X-Gm-Gg: ASbGncslFdsCJMFGXd6GbrebIqOjKBYs1I8Y2Ou9pN9Tpd+dDHBfzSlTtHf/31NIDDd
LdYBAUlD06rR4sGkWiooXQQOjdbYhND1i8rhIG5NFMXurba2TAJCzezIc9VpxsENQb2mugpqz0m
dqLjlaU6GqSJ1unW0fRkHQKqaGXghglUyrxtWAXvDKdE0vcK8dsAjz72TJa9ZH0r1eDTnIEKbII
3P+jRQ7LGC1JHOcTA1jkpHVtAEd+F2eSNSUUjSg7dfVZRiMdpb4qJLX3SXX+BxBCc0Fk6kWcjqL
XgXfmXPjnJys+J7g3DXe4yzTrW+R5QwQVJi10DpwuJ24Z67fa8ef
X-Google-Smtp-Source: AGHT+IEct1Mu/j97rbbxjLzBpmVysIk9gdkVmOYKtsSlG+RsTHJF3YcX0aRp3FdZFqor4oEVwjdt3g==
X-Received: by 2002:a17:903:4b0d:b0:234:a139:1208 with SMTP id d9443c01a7336-234a139160dmr96789515ad.16.1748448594950;
Wed, 28 May 2025 09:09:54 -0700 (PDT)
Received: from google.com ([2620:15c:9d:2:a04a:d85e:c794:147c])
by smtp.gmail.com with ESMTPSA id d9443c01a7336-234d35acbdasm13535885ad.197.2025.05.28.09.09.53
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 09:09:54 -0700 (PDT)
Date: Wed, 28 May 2025 09:09:51 -0700
From: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx>
To: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
Cc: Claudiu Beznea <claudiu.beznea@xxxxxxxxx>, gregkh@xxxxxxxxxxxxxxxxxxx,
rafael@xxxxxxxxxx, dakr@xxxxxxxxxx, len.brown@xxxxxxxxx, pavel@xxxxxxxxxx,
jic23@xxxxxxxxxx, daniel.lezcano@xxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-pm@xxxxxxxxxxxxxxx, linux-iio@xxxxxxxxxxxxxxx, linux-renesas-soc@xxxxxxxxxxxxxxx,
bhelgaas@xxxxxxxxxx, geert@xxxxxxxxxxxxxx,
Claudiu Beznea <claudiu.beznea.uj@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v2 1/2] PM: domains: Add devres variant for
dev_pm_domain_attach()
Message-ID: <rmc7me6rvumr6pcekgp5lsrxtuge5houitn474lkljew2hzdcw@z7wh2vtntvs5>
References: <20250526122054.65532-1-claudiu.beznea.uj@xxxxxxxxxxxxxx>
<20250526122054.65532-2-claudiu.beznea.uj@xxxxxxxxxxxxxx>
<hojdkntm3q5a5ywya7n5i4zy24auko4u6zdqm25infhd44nyfx@x2evb6sc2d45>
<111d2d6c-8ac0-40b9-94c3-02f2f64ef9fe@xxxxxxxxx>
<CAPDyKFoQYTNBhtBXY-Ds7E0TohtA6558W1Jf3cLsnXDQC74DSg@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <CAPDyKFoQYTNBhtBXY-Ds7E0TohtA6558W1Jf3cLsnXDQC74DSg@xxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 06:04:45PM +0200, Ulf Hansson wrote:
> [...]
>
> > >> +/**
> > >> + * devm_pm_domain_attach - devres-enabled version of dev_pm_domain_attach()
> > >> + * @dev: Device to attach.
> > >> + * @attach_power_on: Use to indicate whether we should power on the device
> > >> + * when attaching (true indicates the device is powered on
> > >> + * when attaching).
> > >> + * @detach_power_off: Used to indicate whether we should power off the device
> > >> + * when detaching (true indicates the device is powered off
> > >> + * when detaching).
> > >> + *
> > >> + * NOTE: this will also handle calling dev_pm_domain_detach() for
> > >> + * you during remove phase.
> > >> + *
> > >> + * Returns 0 on successfully attached PM domain, or a negative error code in
> > >> + * case of a failure.
> > >> + */
> > >> +int devm_pm_domain_attach(struct device *dev, bool attach_power_on,
> > >> + bool detach_power_off)
> > >
> > > Do we have examples where we power on a device and leave it powered on
> > > (or do not power on device on attach but power off it on detach)? I
> >
> > I haven't found one yet.
> >
> > > believe devm release should strictly mirror the acquisition, so separate
> > > flag is not needed.
> >
> > I was in the middle whether I should do it with 2 flags or only to revert
> > the acquisition.
> >
> > >
> > >
> > >> +{
> > >> + int ret;
> > >> +
> > >> + ret = dev_pm_domain_attach(dev, attach_power_on);
> > >> + if (ret)
> > >> + return ret;
> > >> +
> > >> + if (detach_power_off)
> > >> + return devm_add_action_or_reset(dev, devm_pm_domain_detach_off,
> > >> + dev);
> > >> +
> > >> + return devm_add_action_or_reset(dev, devm_pm_domain_detach_on, dev);
> > >
> > > Instead of 2 separate cleanup methods maybe define dedicated devres:
> > >
> > > struct dev_pm_domain_devres {
> > > struct device *dev;
> > > bool power_off;
> > > }
> > >
> > > ?
> >
> > That was the other option I've thought about but I found the one with 2
> > cleanup methods to be simpler. What would you prefer here?
> >
> > Ulf: could you please let me know what would you prefer here?
>
> As it looks like we agreed to use one cleanup method, the struct
> dev_pm_domain_devres seems superfluous to me.
I think we agreed that cleanup should mirror the acquisition, that is
true. But since attaching to the domain has an option to either turn the
device on or not we still need 2 cleanup branches. They can either be
implemented with 2 cleanup callbacks or with 1 callback and dedicated
devres structure.
Thanks.
--
Dmitry
Return-Path: <linux-kernel+bounces-665776-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 752EA41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:10:44 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id AC1C19E5775
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:10:23 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 54CFC28C879;
Wed, 28 May 2025 16:10:33 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=public-files.de header.i=frank-w@xxxxxxxxxxxxxxx header.b="ITtL7Z5x"
Received: from mout.gmx.net (mout.gmx.net [212.227.17.22])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 52B45211A3F;
Wed, 28 May 2025 16:10:28 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.22
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448632; cv=none; b=UQWbWtmgozO4esuASfFEdu8mfvdXzbl22C5SgrvfM18iaf99+b8e/u9bDJxi0k2sm47MsSuA+YgIRjbRa6WjiFMaTelQLju5EYf1yJLR4aaNvprPSXF9pGV8l9LVMWU+mSGdaoPEXyeDBMzLUuqZtJStOHoVxqVJgqGc+g3dCUw=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448632; c=relaxed/simple;
bh=FD2i9l+MPylvuvX0WN6c4NjsF/P34SDmErFp3nHvjPo=;
h=MIME-Version:Message-ID:From:To:Cc:Subject:Content-Type:Date:
In-Reply-To:References; b=i12jT5XwtdOxnyBi1r/J4mDdvqyUW0pgqZXXVVFUQBUJeq/SfPoeDIlQ1qDHlfLTxgpCpJalj072jVzthO5XuJCd2OTg9mEDoljUO33Y4XcoxA2Qx2+Qm3c39urmc2gT6QZboaFL2bAp2xHLqLid+WrxBf1tgaYTC261gAebcqw=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=public-files.de; spf=pass smtp.mailfrom=public-files.de; dkim=pass (2048-bit key) header.d=public-files.de header.i=frank-w@xxxxxxxxxxxxxxx header.b=ITtL7Z5x; arc=none smtp.client-ip=212.227.17.22
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=public-files.de
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=public-files.de
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=public-files.de;
s=s31663417; t=1748448615; x=1749053415; i=frank-w@xxxxxxxxxxxxxxx;
bh=6Q191W+TkvMQuAiLSaT3kKCUFTz5z3Epx8qGTpsPXm4=;
h=X-UI-Sender-Class:MIME-Version:Message-ID:From:To:Cc:Subject:
Content-Type:Date:In-Reply-To:References:
Content-Transfer-Encoding:cc:content-transfer-encoding:
content-type:date:from:message-id:mime-version:reply-to:subject:
to;
b=ITtL7Z5xydq46gv8vCiSn4S29en9ojbs7J7C31/m6Pq8+AdWcyzV+EoTZt0qu9yr
PRFa0716x/P72KlqgVxM+pxAmvDZgIxNPOAVunGc6lxkkw9kFg8bKr68mfgGyvUTz
O+slikYz6nm/7j5zVF52+o1lGVv7y1YHpgzlDoe2axISvTF2cFS2vu1TDHc+IP650
oe/NY4guxKCErmxZXVNVa/PFWqEqmDVFFnM8h9XhTZYHPylHBhDBN3IEPX/hZRdvf
Tol6wXzCJmuk0IvJ9P4PrWMXlF1ZA6Tzvvo0O9bMifkwpfDO4Ph+rYwFcezsLH8By
j7Zy+oG4I78AJVMg8w==
X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a
Received: from [100.70.157.0] ([100.70.157.0]) by
trinity-msg-rest-gmx-gmx-live-6995845bd-wzmz6 (via HTTP); Wed, 28 May 2025
16:10:14 +0000
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Message-ID: <trinity-319df51e-2ff3-42cd-8efd-139fda159824-1748448614514@trinity-msg-rest-gmx-gmx-live-6995845bd-wzmz6>
From: Frank Wunderlich <frank-w@xxxxxxxxxxxxxxx>
To: mason-cw.chang@xxxxxxxxxxxx, rafael@xxxxxxxxxx,
daniel.lezcano@xxxxxxxxxx, rui.zhang@xxxxxxxxx, lukasz.luba@xxxxxxx,
angelogioacchino.delregno@xxxxxxxxxxxxx, nfraprado@xxxxxxxxxxxxx,
jpanis@xxxxxxxxxxxx, npitre@xxxxxxxxxxxx, colin.i.king@xxxxxxxxx,
u.kleine-koenig@xxxxxxxxxxxx, wenst@xxxxxxxxxxxx, linux-pm@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx,
linux-mediatek@xxxxxxxxxxxxxxxxxxx, daniel@xxxxxxxxxxxxxx,
steven.liu@xxxxxxxxxxxx, sam.shih@xxxxxxxxxxxx
Cc: mason-cw.chang@xxxxxxxxxxxx
Subject: Aw: [PATCH 2/3] thermal/drivers/mediatek/lvts_thermal: add lvts
commands and their sizes to driver data
Content-Type: text/plain; charset=UTF-8
Date: Wed, 28 May 2025 16:10:14 +0000
In-Reply-To: <20250526102659.30225-3-mason-cw.chang@xxxxxxxxxxxx>
References: <20250526102659.30225-1-mason-cw.chang@xxxxxxxxxxxx>
<20250526102659.30225-3-mason-cw.chang@xxxxxxxxxxxx>
X-UI-CLIENT-META-MAIL-DROP: W10=
X-Provags-ID: V03:K1:r4s7fAPYduxRwOpa1obpS+TgDXzNX3KP73Q0ler72PRS0ni+NH8hAI3xufYHMVPlsxUvL
4/QNggD2jAtAddbPtMXu6xYzUbazWda5LZddiVrFTxZlJBRPMYueP2CICZTDUcSmVL9ctVvIltGS
x4VkO2giZdusJX+j7oAY5zhyCqxCd799MHUvrJu1Jl8HgMGuwBoCoXDobZTdeS7fqyBNcIo2ejvp
1Qhes25AiOWn1VlbAFSO774IDGdODmeeC7CXNlqKPPqS+TMOsBArKvG0C3D+35g61+E6WUt+kkT5
1csAcgNsx/O2iAIrrF9XCsm3rDcOSlCKPGWCT+9ZGzsp/6+dl7TtYwcumgyEO1frRI=
UI-OutboundReport: notjunk:1;M01:P0:ncTckxJkCSE=;eQmxolSWvMg9GWECUxcyVvgHRbY
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
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Mason,
thank you for working on this.
I have not yet tested the series, but did not have the issue (which should=
be solved by it) reported [1].
So just my thoughts when looking through changes
> Gesendet: Montag, 26. Mai 2025 um 12:26
> Von: "Mason Chang" <mason-cw.chang@xxxxxxxxxxxx>
> Betreff: [PATCH 2/3] thermal/drivers/mediatek/lvts_thermal: add lvts com=
mands and their sizes to driver data
>
> Add LVTS commands and their sizes to driver data in preparation for
> adding different commands.
>=20
> Signed-off-by: Mason Chang <mason-cw.chang@xxxxxxxxxxxx>
> ---
> drivers/thermal/mediatek/lvts_thermal.c | 65 ++++++++++++++++++++-----
> 1 file changed, 52 insertions(+), 13 deletions(-)
>=20
> diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/m=
ediatek/lvts_thermal.c
> index 7e4f56831..5b7bf29a7 100644
> --- a/drivers/thermal/mediatek/lvts_thermal.c
> +++ b/drivers/thermal/mediatek/lvts_thermal.c
> @@ -96,17 +96,6 @@
> =20
> #define LVTS_MINIMUM_THRESHOLD 20000
> =20
> -static const u32 default_conn_cmds[] =3D { 0xC103FFFF, 0xC502FF55 };
> -/*
> - * Write device mask: 0xC1030000
> - */
> -static const u32 default_init_cmds[] =3D {
> - 0xC1030E01, 0xC1030CFC, 0xC1030A8C, 0xC103098D, 0xC10308F1,
> - 0xC10307A6, 0xC10306B8, 0xC1030500, 0xC1030420, 0xC1030300,
> - 0xC1030030, 0xC10300F6, 0xC1030050, 0xC1030060, 0xC10300AC,
> - 0xC10300FC, 0xC103009D, 0xC10300F1, 0xC10300E1
> -};
could you please move this block in part 1 to the position used here in v2=
to avoid deletion/adding again here?
Maybe magic numbers can be described a bit?
> static int golden_temp =3D LVTS_GOLDEN_TEMP_DEFAULT;
> static int golden_temp_offset;
> =20
...
> @@ -1446,6 +1442,17 @@ static int lvts_resume(struct device *dev)
> return 0;
> }
> =20
> +static const u32 default_conn_cmds[] =3D { 0xC103FFFF, 0xC502FF55 };
> +/*
> + * Write device mask: 0xC1030000
> + */
> +static const u32 default_init_cmds[] =3D {
> + 0xC1030E01, 0xC1030CFC, 0xC1030A8C, 0xC103098D, 0xC10308F1,
> + 0xC10307A6, 0xC10306B8, 0xC1030500, 0xC1030420, 0xC1030300,
> + 0xC1030030, 0xC10300F6, 0xC1030050, 0xC1030060, 0xC10300AC,
> + 0xC10300FC, 0xC103009D, 0xC10300F1, 0xC10300E1
> +};
> +
> /*
> * The MT8186 calibration data is stored as packed 3-byte little-endian
> * values using a weird layout that makes sense only when viewed as a 3=
2-bit
> @@ -1740,7 +1747,11 @@ static const struct lvts_ctrl_data mt8195_lvts_ap=
_data_ctrl[] =3D {
regards Frank
[1] https://github.com/openwrt/openwrt/pull/18750#issuecomment-2877554514
Return-Path: <linux-kernel+bounces-665777-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id F3ADB41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:10:45 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id D2F251BA6B7A
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:10:58 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 521BE28C871;
Wed, 28 May 2025 16:10:33 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="dYupGxUE"
Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 30BAA1632C8
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:10:30 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.92.199
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448632; cv=none; b=Uv/3qOkceeMoQoWb04mJL/YhKjT5QmjwcSvsP+ctKBwtmzslfQVBSFQCbx7ZdvSSS+JIqzeUjy+ik/dyozjOai4WnU2O1EsI+rVg0+HOGIGZur83WEI+4IY5x0+ScWguNbVY1zBQJgfG/hr6yXaV0FbQzH03Ti6Nc1ByWn/02Vk=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448632; c=relaxed/simple;
bh=H7znW9/UZKH3WDMti+Go2o8l0Paatw1ZPa07jLxTYgk=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=Iw7LF4IZgyD4Bt9+hIXHlsgafkBdRDUwxvB3Ehe8ahgTsVo4LsRih6n4N5V5fj9EXca5xUXaVNwr+EfLqoV94VFGPKKQjlMQC9nchhna3rv9PJgO/VwIQ7iz97vzLSR5WMY72TnUnU5eLFZtawRWnnNkpsohKlxHgyXLa1F3lKA=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=dYupGxUE; arc=none smtp.client-ip=90.155.92.199
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org
Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
d=infradead.org; s=desiato.20200630; h=In-Reply-To:Content-Type:MIME-Version:
References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To:
Content-Transfer-Encoding:Content-ID:Content-Description;
bh=WpRAs9+OtUV4uljG/ilQ1tHw0nuTmHkby899eBfbPm4=; b=dYupGxUE5GBeoqxatcaiXuVJWm
ZYZD+wvE3ApzHNbI3F0MulHf894ME+APCAAvbylwjHW9WZCR0/ptR21BNW8EidF+l39XfILCCmmu1
FUCsH1bX6y45YIlMOUODuXGExNSw2B4v+Z2sdPtWFlff6p7aMKDutG5Yt95zKyr1gWMLZZdc58EZY
KO2jzjvrN5OUTvXLbDl/BdPyXSyAqX2+9VRCpGdjJ7oFEQ0RfAwA6cNVvlz6s3cU62OHQX8iUpNlI
tTLckibExc79VYqWgAkMB7gNBGFGDwQqgCeU9qc1brTqKRX8w5rYfJqgSClhQxE7I5R+l0EzR+Nyk
4z70HvxQ==;
Received: from 77-249-17-252.cable.dynamic.v4.ziggo.nl ([77.249.17.252] helo=noisy.programming.kicks-ass.net)
by desiato.infradead.org with esmtpsa (Exim 4.98.2 #2 (Red Hat Linux))
id 1uKJMD-0000000023o-3oxn;
Wed, 28 May 2025 16:10:22 +0000
Received: by noisy.programming.kicks-ass.net (Postfix, from userid 1000)
id 13E673005AF; Wed, 28 May 2025 18:10:21 +0200 (CEST)
Date: Wed, 28 May 2025 18:10:20 +0200
From: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
To: Steven Rostedt <rostedt@xxxxxxxxxxx>
Cc: Ingo Molnar <mingo@xxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx,
Dietmar Eggemann <dietmar.eggemann@xxxxxxx>,
Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>,
Shrikanth Hegde <sshegde@xxxxxxxxxxxxx>,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>,
Valentin Schneider <vschneid@xxxxxxxxxx>,
Mel Gorman <mgorman@xxxxxxx>,
Vincent Guittot <vincent.guittot@xxxxxxxxxx>,
Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
Subject: Re: [PATCH 00/43] sched: Use the SMP scheduler on UP too
Message-ID: <20250528161020.GF39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <20250528080924.2273858-1-mingo@xxxxxxxxxx>
<20250528085813.GX39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<20250528100000.0ab0a8b1@xxxxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528100000.0ab0a8b1@xxxxxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 10:00:00AM -0400, Steven Rostedt wrote:
> On Wed, 28 May 2025 10:58:13 +0200
> Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
>
> > You know about unifdef, right :-)
>
> I didn't know about that!
>
> >
> > $ unifdef -m -DCONFIG_SMP=y kernel/sched/*.[ch] include/linux/sched.h include/linux/sched/*.h
>
> Cool!
>
> Although I wish there was better documentation about it.
It has a manpage :-)
Return-Path: <linux-kernel+bounces-665778-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 5ED7341E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:11:13 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id F3ED64E36C7
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:11:12 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 42B5228CF43;
Wed, 28 May 2025 16:10:55 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="lVcZ4yaW"
Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011026.outbound.protection.outlook.com [52.101.70.26])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2299C28C859;
Wed, 28 May 2025 16:10:51 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.26
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448654; cv=fail; b=YBePZWeGdth5QAUamHzKXKQjACjCHYSh32/xPxMbud01GXuYTuIRmZUJsmG2Ivh8Y+8QtnSHC7wDndiIJS5AMdsevs9x9+3RaSiCaWdTZ7khp9iw2P9ywya9wI+pls6bgVokNVTTGEM/nLZYERSsmpYdC+LFOHlWlNEIhujjEB4=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448654; c=relaxed/simple;
bh=sztoKlPoxB77CqozbsApDLuVLdxOwnVcWIa+s739TfE=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=lgNF/pto0f8v0lXVbc9D0RGRc6Xf58Vw3xQPxCock9R8sw4WDrOl1Eg1OqxP+c2PKA+GOZ2Bq7C/9Hf4kjAJTmuXu/tqG2bats2rjLatRWR2mqcuQWooFsPWO0Fn7vdBL5HH6hsdgYKJDLGN2Y7t9rQKUUlbHv/27rJJg1Uc7YE=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=lVcZ4yaW; arc=fail smtp.client-ip=52.101.70.26
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=oiKgCwTEQblzx8PbkRCsXxwN0R9Hfj9Af9NI4WmESD8HOVX7jijtNLPeiKIIkzvxP3lHL6d5zZ03fQ7xIPKc+WUrgefbKJ29iX8Z+B5ALKVM+fPOi4SYfVz1PBBJxtg3r8vk5AKddSTKb0Oq1kUaLkT4VUqGtM/UQtlCk57O1zwLpGUI5CvEIFsgDm37sB2hiqwek/6NSTHTG0WIolWiZh1VJA1xfS5IaJnjc4hNluWOzByXD5+bcDELSN7U38CCM5FSwTcqGZR2ZNYH7qAYijFnKJUrspAUwpMGAb79IcpMuEfHS3JKAyBQFRbd/ewJfPKnpH7HahOaMU7EpBLFug==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=D5ZlZjBFrApavmKsxv0r6ijKoyb2QbsXN+4IsQHpUIU=;
b=XL5/JpFpE0Qg0zbYx2Fw3twlNxHvvrH6WYF1LE3xeymC3PlZdbOmdrYuAQv7aqZfliW6kAlcOaaFilQAKYkf3BfE3W2H2lmnXbQ8NcUfz8AD9Fw7krL1zNhKQs0iNvmjRsVgSZNNbdMipw/1bM+eTtWLhcHhao4fZoavQcaxyO+dJs+fmHJgKuioX41z5zmxTRifBUD67J3T1rxs1WXTluMNIoiFs7JYE1+FhxoBDqhiATve9+E+c99KBNhzQkO/niuY/APDsMEjcFxcUQtzyTTP/VtgsKWx2ccYti4Bp5Mp/OKGPVqWogR3B3Ji8WdO1XaqAqAGT3A3TTwLCBY9aw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=D5ZlZjBFrApavmKsxv0r6ijKoyb2QbsXN+4IsQHpUIU=;
b=lVcZ4yaW91ZrIesnNsLcqQAELSeNeMo2M3HpvyZEDi0y0EkWRZePkhC4Hboii3XvfuO/4dhy06ZsPEvD+Kl/zfsO6OUIb4Ozzz//3GdTK0PzQly6uLCodo2sOXO32xWKp2NrP7xcyszKv7kitcRhlKkAsi3hUDcqX8PvayqBAncrrajbv69wpxilXpePSBgXOqYZT+P3/KmNm4hCK8HSPvvV+8yJRcf9CDXKVodnnGR2uoLv7ZLAbe8soV/af9cc8mkbNIohg0uJoZRQsFWDGLqmMjJD4NEGNvsOyaVJ6mkTlZI2lwAyo1FDA98n0sh6FYwzFM7chO/NrmGp4ktT5A==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by AM8PR04MB7347.eurprd04.prod.outlook.com (2603:10a6:20b:1d0::13) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.27; Wed, 28 May
2025 16:10:49 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
16:10:49 +0000
Date: Wed, 28 May 2025 12:10:42 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: Meng Li <Meng.Li@xxxxxxxxxxxxx>
Cc: shawnguo@xxxxxxxxxx, robh@xxxxxxxxxx, conor+dt@xxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH] arch: arm64: dts: add big-endian property back into
watchdog node
Message-ID: <aDc1gobqagsYohO0@lizhi-Precision-Tower-5810>
References: <20250528111751.3505224-1-Meng.Li@xxxxxxxxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528111751.3505224-1-Meng.Li@xxxxxxxxxxxxx>
X-ClientProxiedBy: SJ0PR13CA0222.namprd13.prod.outlook.com
(2603:10b6:a03:2c1::17) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|AM8PR04MB7347:EE_
X-MS-Office365-Filtering-Correlation-Id: 25a889ee-f005-4996-9e7c-08dd9e02362b
X-LD-Processed: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635,ExtAddr
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|366016|52116014|376014|1800799024|38350700014|7053199007;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?TF4w5QhRWFGZ/CrLukG7V4aQeisZy9Q/ZbMcj4rs3aWD60fanLIBc+w/AHy6?=
=?us-ascii?Q?7BYT0sxlA+dXDBSvnyVYxAFwE6rBtlBAItep53Vvtgh0DP3f0xv66lA10zNP?=
=?us-ascii?Q?TouxyTjAjwtShmix0Zf+2SO+0Il+a4gyT4SJNR/zhT7TWQtDk4LHPfq3HreM?=
=?us-ascii?Q?vVm7s0DcIM08BcWVeOCMZObuMYjZ5i91PhmXFjrRIz7pc/p7nQV3DCu+3XW6?=
=?us-ascii?Q?NeLUESUKU2NOgBzEBWy0Q1S5eV+/jm3fVqJPuzWjsS1ayxkI4l+3zhvpQb3r?=
=?us-ascii?Q?Qtdz/3SYXBT9wE72Ef/pc+uL2RUCYxp/jG5R1hUh66RQEyJOaR87vhSY3Lwq?=
=?us-ascii?Q?C6fmS8AAQWyBcEGA4m+POuSYg/GrYszAcrynLvw/A+UO3rmDoB4VU/3Zdh+9?=
=?us-ascii?Q?dxVJE3f+tZCdJsgj6bPcWi7yozN7TxFA21os0/gRq8SgRwU0Xip9JNXABxd7?=
=?us-ascii?Q?SERAQuDIGGCig6BrEHzdZcNn85zJTcU+RRdj7WKjulbVTLnDCStgMDIVotJe?=
=?us-ascii?Q?TVx31UQBok6dlNXfPAO+HCseP+l+FLe6uv29Q8sCbfWBdFTjhZdzSfp/B+dT?=
=?us-ascii?Q?2Sc7Jecn3utmZKWeufgOYYNEdQM6JjUphB1MOftw06dvKdQu3Sl4hb5Udxrj?=
=?us-ascii?Q?9YaYspiIGijHWr9JV1ciWwmsrvK9fAiOMeFwAybP0k9OlFjfCL7eP4rkzUqd?=
=?us-ascii?Q?j6ILjChjRj6VY31UPQ09m1DVzN1UO0MaYPBRqNrcF4Wh1vB+MEBq01Ni4JpL?=
=?us-ascii?Q?JcPep7KkSFIeM0Lp2is4GVyi6N8JRn8WuPEwP4565wFx8Ic/v50SWh3g1/WL?=
=?us-ascii?Q?sz5wKKu3G36hPOC6VOy49RvhBGlN3171fp6ZclwKPFN877/2Hjm0E/ITN1U1?=
=?us-ascii?Q?EJF0tG9FzxOX62cffmoFgl91alFPoijYaVLYVJ0WhePOhU+8sVpXSdhtW5eZ?=
=?us-ascii?Q?L4KTUIokeNUQLSN8/w+InMoVRFsyKL54HSGHGuR24RcBXDOaH9PliBANdDgr?=
=?us-ascii?Q?9fzA7p8B+lKIX3xPOTIRVTbN4i+dCXOAR5mclwhC+hv0+m6LYun+44hc+Pp3?=
=?us-ascii?Q?s+NI+RY63f4RMdyhHD7spmyvUd2FjR/fiyY85ytVzdmYvAvT5Cj+jATNhXxY?=
=?us-ascii?Q?2PYDzspKHkKbSTOyIsDQ9oIrhfMiBYUTPcEE/mkmmGVHsCIZ/6matN8sVK6i?=
=?us-ascii?Q?9gcj9TseKg0kdiPJqpR549u0UrHezJvZyA+8dDfkOC5sV7SIyLdLbIvQaRjw?=
=?us-ascii?Q?8++0qhp+3u3AYFiNj0yYPt8wayBszrUwJ5zqwFmLGE1jQjh0NjkMJ9yYSyOs?=
=?us-ascii?Q?47veIATRWPSmCMzRY/37eCfwVO1bf2kfkD3M1HDC+rRLBm0QssH2BBGJYabt?=
=?us-ascii?Q?zMAtRPscS1m6gP9F56dWjLv5kt50oQAlmwKhPDG6SpDhFrWYvWC0L+6mSIUQ?=
=?us-ascii?Q?GW3X5CSVcnIFS6C5qxh/E6D1GDnS5lObapIIFBhNI4CefRmHarPkYA=3D=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(376014)(1800799024)(38350700014)(7053199007);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?J51qToUTrpRzKNA1LE3PMctfjkmLPvn9oi29FSab31+Pk78vqU6MCTl73eiD?=
=?us-ascii?Q?9U6mHwH2agRu4rjt1eHi1A3kXs0ICGnvKddTGscrKGN79ehC9jvfr+O6eL/R?=
=?us-ascii?Q?gHLq0r+HPWXZfxGAuxQq6UVcB0tZDo7fzFmuR2ReXCpH+b+vNy3OFRXqhC6M?=
=?us-ascii?Q?wA1nYhpK70A5UU3uNufF4/OIk4jXkQZdc4yvHJ+yzWgLeqjFnkN/ngFzgO7W?=
=?us-ascii?Q?4GitUpM91CjuB5Wi1X21kkwumssQNbO28UkCt6CN/AQQxjnXALOJ/zW92DG2?=
=?us-ascii?Q?gi7pYu7ArsDt4WOP5+s+gRG6esnYE81z5kzS5m2fDrX5LeWkUwD+xMZ64gQH?=
=?us-ascii?Q?eORxWVEyRxB1awW1lIjEXc3r4NR1jeAxrIibBG/5TpXsmtujwHHXMtjqgvra?=
=?us-ascii?Q?OUSap1uV7Y2aUH8ySJHl3n91CVrV4B/JLmkOp69upYVZyV5+u2Sc8Xcqf/q8?=
=?us-ascii?Q?2XcG6hPcmAIJTNdJNS2z3qJ3vXjtpqg5TVaTV+ZO/cQDnRLDYDwFhSuB+top?=
=?us-ascii?Q?Mr0FRxM7/z8CX9wl3cufa+5KRX2Y8VbdfrGQcsApawvmGXT/4KwmpX2n0W5+?=
=?us-ascii?Q?jdhWkw4kpRxq3c8mkW0VgjEWq5ViSLih4SaTU+k0iCiRFVWTT7USzO+cct2D?=
=?us-ascii?Q?HPsWrDIBLUZ/kX/SWX7/B9HOgME0Koj7e6Lvekk1n813vLF36apiuV6tM04E?=
=?us-ascii?Q?kIaxNhhwwRr80SzNXCB4qdrlP/feGJ9rMtiUhvD0KmToCJk8Vzi41e/i7fYp?=
=?us-ascii?Q?V+PqoOtDDyZ6j3BWRi1O0Vr2pV4vEAJ2f3m9IEcBQitS9HRRWVW9/ctYlYZq?=
=?us-ascii?Q?+f4UMO+nDICXUhly925JDWvXrG674Of/wF44w0okaitg+Y2J2FD3F2P9G0bN?=
=?us-ascii?Q?MW1Scg5GpRONL456pG74oYrCwAQXCox7cULAPkWmYzaHFoUlKfzCdGSk1Th9?=
=?us-ascii?Q?2LTfhAG7dcyc2dELbBhHyT1o7z8HFPrng8VVmrJQbaJbj5QQWYz7cHKqGqON?=
=?us-ascii?Q?VoLqPB3bSoZ8LUSEQ1ngsJYPOCo7IGdnzDx00w/Hg4iFqZrfOUijQVM7Yngf?=
=?us-ascii?Q?HNvLQQoyMx0CJi/lMnrOvgE/upwfT/MxhB6iVy1k383w/4aEXr0IE3vL0k9l?=
=?us-ascii?Q?yMnrtQ0uqbhFrBbo7WFe5C8j60q0LidBg2Kvk2sAOQpnxa/qZW9mLUhF47Kl?=
=?us-ascii?Q?cpGewgUOus/6Wpuqy7zAIO4ilVzCUtTdAEYcEk7SGbrJbgnpZFzU5rjeWquC?=
=?us-ascii?Q?hVRO8cgo5u/tpll00NvEPNNSZ8wbGf8qS1WVQjQHh1ifewVP5z+35pooW9co?=
=?us-ascii?Q?nZisRJqHykDPg0NUbTCT6smdwnTz5dbhmkGRaRjnoEfLCUBlUKzkoSpIaOvO?=
=?us-ascii?Q?cT3rNS9Nr9x9bfQh+EzmxKR8P1PTXYQS591fxG7RAdfZhvmiLIQ/0NiQfgBi?=
=?us-ascii?Q?H1gGbLyrntqmfxB7UQLl/1zjOadgatHL30vbp5XrrKukGdF5v/+ATqRUtu5m?=
=?us-ascii?Q?NvYKBBQKDdkKE+4halo23MGtjEKV98eym2JXclEaYrZExLJjIMI4XePvj9x8?=
=?us-ascii?Q?OR9kjtHV7PPaC73wkN5+ToSWI4Pj4FvsnaGQye9J?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 25a889ee-f005-4996-9e7c-08dd9e02362b
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 16:10:49.3757
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 979voik9SjaASRd5osn7pqe602072bkaQTnwoWNv2LoXLXmcPuKvwEQSNrZA4aNnEQFe+l81ppF6eTn79tnBaA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR04MB7347
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 07:17:51PM +0800, Meng Li wrote:
> When verifying watchdog feature on NXP ls1046ardb board,
> it doesn't work. Because the big-endian is deleted by accident,
> add it back.
>
> Fixes: 7c8ffc5555cb ("arm64: dts: layerscape: remove big-endian for mmc nodes")
fix tags should be wrong.
I remember I tested without big-endian. If it is wrong, please revert original
patch and provide enough reason.
Frank
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Meng Li <Meng.Li@xxxxxxxxxxxxx>
> ---
> arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi
> index 4d75bff0d548..e15ec2e1cb04 100644
> --- a/arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi
> +++ b/arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi
> @@ -753,6 +753,7 @@ wdog0: watchdog@2ad0000 {
> interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
> clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL
> QORIQ_CLK_PLL_DIV(2)>;
> + big-endian;
> };
>
> edma0: dma-controller@2c00000 {
> --
> 2.34.1
>
Return-Path: <linux-kernel+bounces-665779-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 2C88F41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:12:49 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id AC2EE7B2521
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:11:30 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 5519D28C859;
Wed, 28 May 2025 16:12:39 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="cV6HiJGS"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 902A928315B
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:12:38 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448758; cv=none; b=Xj1XizL5rFeS/W1QQxWczwHELJAwpjJ6j8JhFPt2+sSiBWyM98ApG3z7fN+29CwsCdknAUdBbRITqQcRzpKNHS8y93cjfuKGTUC8k4uv+7WltYogCiyqpIHfuRr5fPRhA5IX36KEyf6CPmUKvLeMeJvUtSJm2o+/ZHm36FGJfec=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448758; c=relaxed/simple;
bh=dwuxk90UKREmy9WgLcJOSq1Ev+FSaeKaXWlk1jnBAls=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=mnTH92CINS41aI/XcKfxrNcwByuAwNskuq5N2JQlD4DuY3GqM+g0bksno3SA20n3+ZDWjdUJSGCVtMKUOGF1QYNrMz8MKycT/1+wq5fk7wqiy3t1OyCwCDRAaH5eX2yHzkkO9TL70+chnaSDi5QtEFoCA9o0SXLT5RWEoj7M2s4=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cV6HiJGS; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id C9622C4CEE3;
Wed, 28 May 2025 16:12:37 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748448758;
bh=dwuxk90UKREmy9WgLcJOSq1Ev+FSaeKaXWlk1jnBAls=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=cV6HiJGSgJWKc6X8/f6OPyR3AQArSISL2a1aSf4TDDk6Cjv0TprJSnqX45NeISZps
FkbZJsX1iS0bFzgmTrsP0beywFgRt5gjjQMGTkaTyzrJSXHDS9BtCp21BCP2Ut2M38
cdDQMCrkL108fntO3JlyqLHjbMu+9XNhZs0Wsaprn6EdBNXsb1tfsVhu6ULNESDvuT
SSU/45V3SwslFvtxyC4Y0Aruttcgn2K9EjcRd2Yetg5VxBexiSfjujQgrjwt6feAwv
7qI6d41xWspDDMZoXQGQTusupOrUKwX1qozswqtPaMV9OUyGQL6rnOcIR9ju1LO2hO
0APbF0D/9Xo1g==
Date: Wed, 28 May 2025 16:12:36 +0000
From: Jaegeuk Kim <jaegeuk@xxxxxxxxxx>
To: Chao Yu <chao@xxxxxxxxxx>
Cc: linux-f2fs-devel@xxxxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
stable@xxxxxxxxxx
Subject: Re: [PATCH] f2fs: fix to zero post-eof page
Message-ID: <aDc19Lwwm3JkCi3Z@xxxxxxxxxx>
References: <20250521062403.742048-1-chao@xxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20250521062403.742048-1-chao@xxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Chao,
Can we add the similar path that other filesystems have?
On 05/21, Chao Yu wrote:
> fstest reports a f2fs bug:
>
> generic/363 42s ... [failed, exit status 1]- output mismatch (see /share/git/fstests/results//generic/363.out.bad)
> --- tests/generic/363.out 2025-01-12 21:57:40.271440542 +0800
> +++ /share/git/fstests/results//generic/363.out.bad 2025-05-19 19:55:58.000000000 +0800
> @@ -1,2 +1,78 @@
> QA output created by 363
> fsx -q -S 0 -e 1 -N 100000
> +READ BAD DATA: offset = 0xd6fb, size = 0xf044, fname = /mnt/f2fs/junk
> +OFFSET GOOD BAD RANGE
> +0x1540d 0x0000 0x2a25 0x0
> +operation# (mod 256) for the bad data may be 37
> +0x1540e 0x0000 0x2527 0x1
> ...
> (Run 'diff -u /share/git/fstests/tests/generic/363.out /share/git/fstests/results//generic/363.out.bad' to see the entire diff)
> Ran: generic/363
> Failures: generic/363
> Failed 1 of 1 tests
>
> The root cause is user can update post-eof page via mmap, however, f2fs missed
> to zero post-eof page in below operations, so, once it expands i_size, then it
> will include dummy data locates previous post-eof page, so during below
> operations, we need to zero post-eof page.
>
> Operations which can include dummy data after previous i_size after expanding
> i_size:
> - write
> - mapwrite
> - truncate
> - fallocate
> * preallocate
> * zero_range
> * insert_range
> * collapse_range
> - clone_range (doesnâ??t support in f2fs)
> - copy_range (doesnâ??t support in f2fs)
>
> Cc: stable@xxxxxxxxxx
> Signed-off-by: Chao Yu <chao@xxxxxxxxxx>
> ---
> fs/f2fs/file.c | 28 ++++++++++++++++++++++++++++
> 1 file changed, 28 insertions(+)
>
> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> index 6bd3de64f2a8..c7c66e591ebc 100644
> --- a/fs/f2fs/file.c
> +++ b/fs/f2fs/file.c
> @@ -35,6 +35,17 @@
> #include <trace/events/f2fs.h>
> #include <uapi/linux/f2fs.h>
>
> +static void f2fs_zero_post_eof_page(struct inode *inode, loff_t new_size)
> +{
> + loff_t old_size = i_size_read(inode);
> +
> + if (old_size > new_size)
> + return;
> +
> + /* zero or drop pages only in range of [old_size, new_size] */
> + truncate_pagecache(inode, old_size);
> +}
> +
> static vm_fault_t f2fs_filemap_fault(struct vm_fault *vmf)
> {
> struct inode *inode = file_inode(vmf->vma->vm_file);
> @@ -105,6 +116,9 @@ static vm_fault_t f2fs_vm_page_mkwrite(struct vm_fault *vmf)
>
> file_update_time(vmf->vma->vm_file);
> filemap_invalidate_lock_shared(inode->i_mapping);
> +
> + f2fs_zero_post_eof_page(inode, (folio->index + 1) << PAGE_SHIFT);
> +
> folio_lock(folio);
> if (unlikely(folio->mapping != inode->i_mapping ||
> folio_pos(folio) > i_size_read(inode) ||
> @@ -1109,6 +1123,8 @@ int f2fs_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
> f2fs_down_write(&fi->i_gc_rwsem[WRITE]);
> filemap_invalidate_lock(inode->i_mapping);
>
> + if (attr->ia_size > old_size)
> + f2fs_zero_post_eof_page(inode, old_size);
> truncate_setsize(inode, attr->ia_size);
>
> if (attr->ia_size <= old_size)
> @@ -1227,6 +1243,8 @@ static int f2fs_punch_hole(struct inode *inode, loff_t offset, loff_t len)
> if (ret)
> return ret;
>
> + f2fs_zero_post_eof_page(inode, offset + len);
> +
> pg_start = ((unsigned long long) offset) >> PAGE_SHIFT;
> pg_end = ((unsigned long long) offset + len) >> PAGE_SHIFT;
>
> @@ -1542,6 +1560,8 @@ static int f2fs_collapse_range(struct inode *inode, loff_t offset, loff_t len)
> if (ret)
> return ret;
>
> + f2fs_zero_post_eof_page(inode, offset + len);
> +
> ret = f2fs_do_collapse(inode, offset, len);
> if (ret)
> return ret;
> @@ -1631,6 +1651,8 @@ static int f2fs_zero_range(struct inode *inode, loff_t offset, loff_t len,
> if (ret)
> return ret;
>
> + f2fs_zero_post_eof_page(inode, offset + len);
> +
> pg_start = ((unsigned long long) offset) >> PAGE_SHIFT;
> pg_end = ((unsigned long long) offset + len) >> PAGE_SHIFT;
>
> @@ -1754,6 +1776,8 @@ static int f2fs_insert_range(struct inode *inode, loff_t offset, loff_t len)
> if (ret)
> return ret;
>
> + f2fs_zero_post_eof_page(inode, offset + len);
> +
> pg_start = offset >> PAGE_SHIFT;
> pg_end = (offset + len) >> PAGE_SHIFT;
> delta = pg_end - pg_start;
> @@ -1819,6 +1843,8 @@ static int f2fs_expand_inode_data(struct inode *inode, loff_t offset,
> if (err)
> return err;
>
> + f2fs_zero_post_eof_page(inode, offset + len);
> +
> f2fs_balance_fs(sbi, true);
>
> pg_start = ((unsigned long long)offset) >> PAGE_SHIFT;
> @@ -4860,6 +4886,8 @@ static ssize_t f2fs_write_checks(struct kiocb *iocb, struct iov_iter *from)
> err = file_modified(file);
> if (err)
> return err;
> +
> + f2fs_zero_post_eof_page(inode, iocb->ki_pos + iov_iter_count(from));
> return count;
> }
>
> --
> 2.49.0
Return-Path: <linux-kernel+bounces-665780-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 049D441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:13:05 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 089E19E5F64
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:12:44 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id ED52728CF47;
Wed, 28 May 2025 16:12:57 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="rHml+0Ha"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 23418288C03;
Wed, 28 May 2025 16:12:56 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448777; cv=none; b=hhLCtuNd5sy6YVr6xRl77yJWwMELpCOMprads1O8qZ83rBtTKfUciKgU25cL3tgKPm3SJyF1KZ0O+SlkEwqMLoNNcvqq2MSGsnLrbQkIZ6FX689+GtAZlD1LqbI2EMl6SkF8rVgChesPFqw7Od5dT2PW4m/iNGtMZf89i/2rRi0=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448777; c=relaxed/simple;
bh=fpi71ToKhzI4Ih0RsP1jwKepkejd8JqAFlfm4lSaG00=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=co4kDXyYan99l1tRN7a4B/UnhNZtDfYoqNYT/051+TEs1Xh0PTAq/rZR9Sut3ha/JPdnWpmKDGTY2CTmmswzBLWlgwUvjahI86dphRFnsYx1dHoOg4NvoAkGYVo7QWVyFdDjn186B2N+HYy1bbTYMLkZfRul6ITLmbHF2vnkNe0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=rHml+0Ha; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3C52AC4CEE3;
Wed, 28 May 2025 16:12:53 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748448776;
bh=fpi71ToKhzI4Ih0RsP1jwKepkejd8JqAFlfm4lSaG00=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=rHml+0HaqUcY9UrUHjk+viHrLfRKcPDgWPT5GKYfY3635zzgS4jydPVsZ3YIk4vsu
OxwZDw9XNvoW5fIhEPZ7OpVLSKaxF0AkY70oHc/tdtbcmW/SVAd/agOb+tGeVaauVU
oZfW1h1OAyBHt/ScLR4+SOj2bv8TyKYsaAEbR97TXQu3Ak/htIc3iMcOol4h3upiuj
sq8zzSGeyujGxUqFI8Irqn7+RzWLrEuZW22criHBa3uiE+hfg8zHBdCYkjPxfhDN0H
9u+rB+GdOLELUr7J3ovntiXCYTlNDcZm9eBK7FKO9oRw196ml3AuUhZG5YSliJ+39M
gaTpVE4liakIA==
Date: Wed, 28 May 2025 17:12:50 +0100
From: Simon Horman <horms@xxxxxxxxxx>
To: Meghana Malladi <m-malladi@xxxxxx>
Cc: saikrishnag@xxxxxxxxxxx, pabeni@xxxxxxxxxx, kuba@xxxxxxxxxx,
edumazet@xxxxxxxxxx, davem@xxxxxxxxxxxxx, andrew+netdev@xxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, srk@xxxxxx,
Vignesh Raghavendra <vigneshr@xxxxxx>,
Roger Quadros <rogerq@xxxxxxxxxx>, danishanwar@xxxxxx
Subject: Re: [PATCH net] net: ti: icssg-prueth: Fix swapped TX stats for MII
interfaces.
Message-ID: <20250528161250.GE1484967@xxxxxxxxxxxxxxxx>
References: <20250527121325.479334-1-m-malladi@xxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250527121325.479334-1-m-malladi@xxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 05:43:25PM +0530, Meghana Malladi wrote:
> In MII mode, Tx lines are swapped for port0 and port1, which means
> Tx port0 receives data from PRU1 and the Tx port1 receives data from
> PRU0. This is an expected hardware behavior and reading the Tx stats
> needs to be handled accordingly in the driver. Update the driver to
> read Tx stats from the PRU1 for port0 and PRU0 for port1.
>
> Fixes: c1e10d5dc7a1 ("net: ti: icssg-prueth: Add ICSSG Stats")
> Signed-off-by: Meghana Malladi <m-malladi@xxxxxx>
> ---
> drivers/net/ethernet/ti/icssg/icssg_stats.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/drivers/net/ethernet/ti/icssg/icssg_stats.c b/drivers/net/ethernet/ti/icssg/icssg_stats.c
> index 6f0edae38ea2..0b77930b2f08 100644
> --- a/drivers/net/ethernet/ti/icssg/icssg_stats.c
> +++ b/drivers/net/ethernet/ti/icssg/icssg_stats.c
> @@ -29,6 +29,10 @@ void emac_update_hardware_stats(struct prueth_emac *emac)
> spin_lock(&prueth->stats_lock);
>
> for (i = 0; i < ARRAY_SIZE(icssg_all_miig_stats); i++) {
Hi Meghana,
Perhaps it would be nice to include a comment here.
> + if (emac->phy_if == PHY_INTERFACE_MODE_MII &&
> + icssg_all_miig_stats[i].offset >= ICSSG_TX_PACKET_OFFSET &&
> + icssg_all_miig_stats[i].offset <= ICSSG_TX_BYTE_OFFSET)
> + base = stats_base[slice ^ 1];
> regmap_read(prueth->miig_rt,
> base + icssg_all_miig_stats[i].offset,
> &val);
>
> base-commit: 32374234ab0101881e7d0c6a8ef7ebce566c46c9
> --
> 2.43.0
>
>
Return-Path: <linux-kernel+bounces-665781-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E785141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:13:32 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 010131C007BC
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:13:46 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 3850228CF41;
Wed, 28 May 2025 16:13:23 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="UwxdCW0X"
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 961A728A415
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:13:19 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448802; cv=none; b=WVlF4zXUR5+FcpddWzXKqqbVn4LpLzMpTfllce0W0nM4rMDGmTIxU41HhogWqkaVgjUQqsQo9GdFW2OhZe7VAgJFP+F4P31HCnziICWrOJvSj6Hh8oPvzHWjE/fCmwJR+9x7++5KpDyPPr4elNMeyr5j5qBQi+idIssh7BxwIog=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448802; c=relaxed/simple;
bh=gwVBGi4hIbsXrhbuodfR4lQNHnOhvVdJ0YA7YukPmJo=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=VtovtH9GZ4Sa2SERe7vlCJRg3SRZh7H9+4VOei0+0Y7vUg+EPJlLekltGhJaRfIcz3Nmqchho32Wbrh1UEkQRW+VXEXauxGRd7cj8ZlRWa8B1BFUL/69X3N4E/OE/WAA5dtUXD9bY8yB+nIHFVt/PXvGHCoEKAs2ljd7RRrvvX0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=UwxdCW0X; arc=none smtp.client-ip=205.220.168.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com
Received: from pps.filterd (m0279866.ppops.net [127.0.0.1])
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SGAQbU001765
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:13:18 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=
cc:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to; s=qcppdkim1; bh=9+Mg2L1QBDl92rjfoNAlCPsR
ORQMv0jh6Aoaq4vKOlQ=; b=UwxdCW0XgvFtVccaGS3wRZ6akRXte2qSsXmoqoS3
CltOgng+fdZ+KZBEyB+3rwrxvI1kx9hWfzVucFNG0jG+1P/3/YfAgBNOnsCuwPAn
NoircCYqIk/Ho9mJ4V0Bnjb1lJO8uKPUjGEc/a5LA6G34uJOEzzPbjIYN0bS05EH
acwSqBHb9nbin9wykrzk8bQWysYBmn77CnJlsHDrhZsFPKs2i1GSu+CWt1EzV67X
gzSBuCrpzSgH2GSGfNirvmfCSqVWv3b7n6XhfRM9IfU4Nb7zkXTAnKyswsnjTLSB
1hwh1gzQeW1oWJaL9oVceakOvOdG/hZCIfNDITan6IAs6w==
Received: from mail-oi1-f200.google.com (mail-oi1-f200.google.com [209.85.167.200])
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46wavkvm70-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT)
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:13:18 +0000 (GMT)
Received: by mail-oi1-f200.google.com with SMTP id 5614622812f47-4066a79eaddso293324b6e.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:13:18 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748448797; x=1749053597;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=9+Mg2L1QBDl92rjfoNAlCPsRORQMv0jh6Aoaq4vKOlQ=;
b=Nzppii1SZOJZrirVLyN5hGFMK2EBGujpOPGIs2UqM16ggtuRDslCfgY4RqRa7dwlBV
Ejzuxwf9Rkha1Q4ju69395L9FVZQKM5s5O6Y+9Tleige7DiG+igQM4gHz8Otfrky6yG3
3zqIXAvzlpvDtXMl0hn2vAYcOPek24VuaspkTvCVnrN65yMlazpxq5lN3I/ixTeU1H1e
KTIQbqjpQAI9qvKLpOKacxsTP4VQ2PxOQ6OI8UfQmvzrVgEnYHDgl+xPBkA48JSF4vVh
j7ZrMXL72h3Ixae7BsbVLvDkrqW3Hd+buop0LMcNNnTuV5s/Xo0dpkn0U9i1aHjDB218
ArqA==
X-Forwarded-Encrypted: i=1; AJvYcCUZTaMMnqlxU8Lhf1JhLVUyewa21C4iHwQEo8vgJODbnWuJfCbsga7cxrG4KvQe+jJefZRenGIYniijds8=@vger.kernel.org
X-Gm-Message-State: AOJu0Yxf5ca7tmCBAhqLeVRZmdwcol1jg/006aHHxXDKFmMEsxhF+meo
gfoEF6acUQ8IbjcXmTVWCITQ0yTWjbT0c1C6iw6uQ+0Qc4osVHyys74mHWUN4Y96X+QboOOahv6
9r8Ok+Zp4zfuWuKayeN4Y82GFbLwWGZsQ2JNgVUHXgPcSkdOgr856b0ArCCWhDmcFQ8Y=
X-Gm-Gg: ASbGncsZ5EykIzxubaUiJ0Tn0nRroUFvQRcxg9ZgSsNYmKsznslhFUw3YNkW0sLv/BF
Sx7sMMzfhdMpsJV0kpp9zw8bkIsal4RP5Wp/0jcEETuVAOQe92gmZaPxwHjZhuAlI/J10DkIfBc
uzdxbXs+B/TK7VvkLYRWi5rxcFthc2NuZmHEvFocME8CziDrmHJBY3wN6TyC7YG16ZbS9X0sJTK
IZfos5BbhtVTUAOBt2iJ+mvacOeV4UPh1bbePIw27R8yECyuu3L1vo1gOQ4pes8nbCTAdiZhJk7
yd97v5azL0+ouEaTkbZW/wvbZGgwi+YgjJWIfMqCJ320vResTSnQ2Y64LLrxurnPUUz1JhFvcf8
=
X-Received: by 2002:a05:6808:11d1:b0:406:67b7:8b62 with SMTP id 5614622812f47-40667b79907mr1137212b6e.38.1748448797372;
Wed, 28 May 2025 09:13:17 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IH7kOaXTktpHw46oOtWRKpilwDLDgGTq8IbcVMN13DgegxQWs9io4EyuZpQO8J6P6zyCxUueg==
X-Received: by 2002:a05:6808:11d1:b0:406:67b7:8b62 with SMTP id 5614622812f47-40667b79907mr1137186b6e.38.1748448796931;
Wed, 28 May 2025 09:13:16 -0700 (PDT)
Received: from eriador.lumag.spb.ru (2001-14ba-a0c3-3a00--7a1.rev.dnainternet.fi. [2001:14ba:a0c3:3a00::7a1])
by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-32a79e9a765sm3031921fa.10.2025.05.28.09.13.15
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 09:13:16 -0700 (PDT)
Date: Wed, 28 May 2025 19:13:14 +0300
From: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
To: Yongxing Mou <quic_yongmou@xxxxxxxxxxx>
Cc: Abhinav Kumar <quic_abhinavk@xxxxxxxxxxx>, Rob Clark <robdclark@xxxxxxxxx>,
Sean Paul <sean@xxxxxxxxxx>,
Marijn Suijten <marijn.suijten@xxxxxxxxxxxxxx>,
David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
Stephen Boyd <swboyd@xxxxxxxxxxxx>,
Chandan Uddaraju <chandanu@xxxxxxxxxxxxxx>,
Guenter Roeck <groeck@xxxxxxxxxxxx>,
Kuogee Hsieh <quic_khsieh@xxxxxxxxxxx>,
Bjorn Andersson <andersson@xxxxxxxxxx>,
Konrad Dybcio <konradybcio@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Vara Reddy <quic_varar@xxxxxxxxxxx>,
Rob Clark <robdclark@xxxxxxxxxxxx>,
Tanmay Shah <tanmay@xxxxxxxxxxxxxx>, linux-arm-msm@xxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, freedreno@xxxxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
Jessica Zhang <quic_jesszhan@xxxxxxxxxxx>,
Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
Subject: Re: [PATCH 05/45] drm/msm/dp: add a helper to read mst caps for
dp_panel
Message-ID: <abxm6ppegxbesl6wztyxg46elhanh2mo5kxn43olbucw37cyon@aeqikyr4ord5>
References: <20241205-dp_mst-v1-0-f8618d42a99a@xxxxxxxxxxx>
<20241205-dp_mst-v1-5-f8618d42a99a@xxxxxxxxxxx>
<aksnudxy2oyojjzwm73i4mulftcxccdsnddcdamypmscn6skpq@ijtp7x76m3pt>
<df3807e5-c381-4440-be64-9bd49a2ecd9d@xxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <df3807e5-c381-4440-be64-9bd49a2ecd9d@xxxxxxxxxxx>
X-Proofpoint-GUID: H3lCpJVaAFJeMhfEAYbK_S_hO6Zab75Z
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDE0MSBTYWx0ZWRfX5drC7p2YDjJw
foHbqseoSp9klEf/tmD1HoWXNTBXPYRgAqmvJD/BsthWR3co6y+P19oOL+ipcUJKm/OX4nWgfiQ
xE6uAguWK0rr5rP47DKsZzaDT57ztWcPYjZnVoYwLlqHsLQforQMoH4Ury1uMhpXDA5ZPGNfhCi
tGveoqPPyCV/DysdyF746koEN77+1tGi3BN39qThgfZknEuVAKcFaCQkTSxTJ7/2sKDK0yPdFZ+
5bFgyKML5JzLkOb3D4sKTMGJUjd+kFZOe4oTnMqmnencFxX0R+tNm2r6iCYM3Lmc1W7RCwtZPMJ
ibotMf49gIvbv1y9sDPKCJ2gZZdsetW+xR/0yQ7SXyaubHCOtS7hLyf4SuUZpbdypBhWRUy9lWA
DfpXqNTEcVNLkfiQ1GgTtXE/R32EUdm3tswWoFdKnCNiTvhPI8hnuCuymYYgBI5YL/WR24ce
X-Authority-Analysis: v=2.4 cv=fMk53Yae c=1 sm=1 tr=0 ts=6837361e cx=c_pps
a=AKZTfHrQPB8q3CcvmcIuDA==:117 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10
a=dt9VzEwgFbYA:10 a=COk6AnOGAAAA:8 a=_S4K8tOYiQSLrvZx2BEA:9 a=CjuIK1q_8ugA:10
a=pF_qn-MSjDawc0seGVz6:22 a=TjNXssC_j7lpFel5tvFf:22
X-Proofpoint-ORIG-GUID: H3lCpJVaAFJeMhfEAYbK_S_hO6Zab75Z
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_08,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
malwarescore=0 adultscore=0 impostorscore=0 phishscore=0 suspectscore=0
spamscore=0 priorityscore=1501 lowpriorityscore=0 clxscore=1015 mlxscore=0
mlxlogscore=999 bulkscore=0 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280141
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Mon, May 26, 2025 at 08:26:47PM +0800, Yongxing Mou wrote:
>
>
> On 2024/12/6 16:52, Dmitry Baryshkov wrote:
> > On Thu, Dec 05, 2024 at 08:31:36PM -0800, Abhinav Kumar wrote:
> > > Add a helper to check whether a dp_panel is mst capable.
> > >
> > > Signed-off-by: Abhinav Kumar <quic_abhinavk@xxxxxxxxxxx>
> > > ---
> > > drivers/gpu/drm/msm/dp/dp_aux.h | 1 +
> > > drivers/gpu/drm/msm/dp/dp_panel.c | 14 ++++++++++++++
> > > drivers/gpu/drm/msm/dp/dp_panel.h | 1 +
> > > 3 files changed, 16 insertions(+)
> > >
> > > diff --git a/drivers/gpu/drm/msm/dp/dp_aux.h b/drivers/gpu/drm/msm/dp/dp_aux.h
> > > index 39c5b4c8596ab28d822493a6b4d479f5f786cdee..cb97a73cdd6ea74b612053bec578247a42214f23 100644
> > > --- a/drivers/gpu/drm/msm/dp/dp_aux.h
> > > +++ b/drivers/gpu/drm/msm/dp/dp_aux.h
> > > @@ -8,6 +8,7 @@
> > > #include "dp_catalog.h"
> > > #include <drm/display/drm_dp_helper.h>
> > > +#include <drm/display/drm_dp_mst_helper.h>
> > > int msm_dp_aux_register(struct drm_dp_aux *msm_dp_aux);
> > > void msm_dp_aux_unregister(struct drm_dp_aux *msm_dp_aux);
> > > diff --git a/drivers/gpu/drm/msm/dp/dp_panel.c b/drivers/gpu/drm/msm/dp/dp_panel.c
> > > index d277e9b2cbc03688976b6aa481ee724b186bab51..172de804dec445cb08ad8e3f058407f483cd6684 100644
> > > --- a/drivers/gpu/drm/msm/dp/dp_panel.c
> > > +++ b/drivers/gpu/drm/msm/dp/dp_panel.c
> > > @@ -108,6 +108,20 @@ static u32 msm_dp_panel_get_supported_bpp(struct msm_dp_panel *msm_dp_panel,
> > > return min_supported_bpp;
> > > }
> > > +bool msm_dp_panel_read_mst_cap(struct msm_dp_panel *msm_dp_panel)
> > > +{
> > > + struct msm_dp_panel_private *panel;
> > > +
> > > + if (!msm_dp_panel) {
> > > + DRM_ERROR("invalid input\n");
> > > + return 0;
> > > + }
> > > +
> > > + panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
> > > +
> > > + return drm_dp_read_mst_cap(panel->aux, msm_dp_panel->dpcd);
> >
> > So, it's a one-line wrapper. Do we actually need it?
> It beacuse the point of aux is in msm_dp_panel_private, so if we want to
> call drm_dp_read_mst_cap in other file, we need this wrapper.
It is being used from dp_display, which also ->aux pointer.
> >
> > > +}
> > > +
> > > int msm_dp_panel_read_link_caps(struct msm_dp_panel *msm_dp_panel,
> > > struct drm_connector *connector)
> > > {
> > > diff --git a/drivers/gpu/drm/msm/dp/dp_panel.h b/drivers/gpu/drm/msm/dp/dp_panel.h
> > > index 7a38655c443af597c84fb78c6702b2a3ef9822ed..363b416e4cbe290f9c0e6171d6c0c5170f9fea62 100644
> > > --- a/drivers/gpu/drm/msm/dp/dp_panel.h
> > > +++ b/drivers/gpu/drm/msm/dp/dp_panel.h
> > > @@ -67,6 +67,7 @@ int msm_dp_panel_get_modes(struct msm_dp_panel *msm_dp_panel,
> > > struct drm_connector *connector);
> > > void msm_dp_panel_handle_sink_request(struct msm_dp_panel *msm_dp_panel);
> > > void msm_dp_panel_tpg_config(struct msm_dp_panel *msm_dp_panel, bool enable);
> > > +bool msm_dp_panel_read_mst_cap(struct msm_dp_panel *dp_panel);
> > > /**
> > > * is_link_rate_valid() - validates the link rate
> > >
> > > --
> > > 2.34.1
> > >
> >
>
--
With best wishes
Dmitry
Return-Path: <linux-kernel+bounces-665782-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 6B66241E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:14:36 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id A8807169D99
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:14:37 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id E96F628CF43;
Wed, 28 May 2025 16:14:28 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="TmCwf+/Y"
Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B2A5E28A415
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:14:26 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448868; cv=none; b=mrB+vnRZr8inUyZjQuRjPA31z4psbAZzedxQO1025eaKX6h3j6vC0NKIEN+TZ9ryY+nBymUCCF1AiI6jG6kiHq1ZdXHAzZZQGwZQclkp4JOKoI2LAhgV43jBT3WFr8lV5S2BEktYplXTOzRMOP9Ls9rQEruoIzSFX81++uYAjv8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448868; c=relaxed/simple;
bh=QJdyxYVj5zDlcJECQEtZD08vxWZcLAjaOvhtB+EnjXY=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=HhaHw83adSZ9F/mOp8/Yp58fh7espg2PrAmkrdVHQMjKpS1hqoSYVQlLQJD9lltsY+9yGOa5eRam9Obm59B6QSB6XBjMsABEmw+daov7dM0DopWVd6LL3w9lo2CEuBeMjr38FyIOdhsqUTLYpN0+lhg9n1Cx7cSsWT7oDhdtK3c=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=TmCwf+/Y; arc=none smtp.client-ip=205.220.180.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com
Received: from pps.filterd (m0279872.ppops.net [127.0.0.1])
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S8w9QE027572
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:14:25 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=
cc:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to; s=qcppdkim1; bh=LB6CBliD4k5uqB9EniBQVYzk
+cEcLB4aVJE1tbd9jHk=; b=TmCwf+/Y8y/kX9iYSyiIi2OD2S9H3JG4G47xZjuH
ERb/bUjy5JF2WBz6EctGhG8VUpcCBpPFcbSCOvtDeLEFlm90TrdeJbpE0UNnRtBP
3GmBIZsgU0/KnELrcWWWR1yU3Y8GqOnrvBAiNe76iohXDKVKhoWGgt4arjKEMQFD
nWLc1xWOOe7ZlBCcVoKXRvOVg3cKV9RfUQPZpO2sb76eA9AQXGpJjgpA1rebdpZW
z7NiidGLcnd/9zeKsUYg8KqJD1PI7QoZQauFY02doAbepxSbOhwumau+dCvBJmeA
I7G1RR8lAqJLb1ACsZ2NW3YsKw2x2obsy+kW92xJA9eMXw==
Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199])
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46u6g92tnp-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT)
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:14:25 +0000 (GMT)
Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-7c7c30d8986so1416369785a.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:14:25 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748448864; x=1749053664;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=LB6CBliD4k5uqB9EniBQVYzk+cEcLB4aVJE1tbd9jHk=;
b=uxGS5JER6biU4lqG2XHq/GF3RUtAY0vYDCkvLDFKUnmc96ISQ3BFHABjEitJqmW+qW
wHgMZYPR1Zat8O8y02cNesCGEDQm3QrSxg+vu1M/D31vm/oKSkUoSZ3/vwoZZBT18aKg
ZplX73wazRL0x7EI4F+doAJBLh3CXoc2M2pr0LLDMOuurYuQWoDkWeaNUDKcaz2OKT8e
i3j83OXS+6bN0cZHBP9bQBSjuNCZ8n6jGiQLoaDoW7wLhZvSstf0uczcVbnfBwGdZWy7
kFCgRFNN/MoW/EDvH5LIFEESSJUJ0gy7Xoh5Xq4qXzJJs74JlgUrU3nFtUsU+QGm/VYS
bxiw==
X-Forwarded-Encrypted: i=1; AJvYcCVW6YLNho1LVNk1jF6GoqW2Xltb6pk1lCIYHfrNdLRJKpZ6IMzg+rE8FdML6ed9nlZhANY3XvKjbAH7bYU=@vger.kernel.org
X-Gm-Message-State: AOJu0YwBta5NNUWE0tuLPkwREO7/vHHrQHgCZJXVqeTFap+uHvV9qHVe
vOEXrZG/tVdGrPOtEJ4l0RkHFUniJuidy8PtLYFI1Wtrg+QvITGiNZXZx1q7P/YcblCpowwFLN8
CZIKS8uwHPMo7T9BE/AhpthFtuSAZfMvZ1PIfNgNAFWG88Q4aNNk8d3NjOSxpSg8/xtdG82oezL
U=
X-Gm-Gg: ASbGnctugSnk5FyeksCI3HQTnsj7EbJAtVYdu+solRs4CZ69ZkIXGeikVBjASlR8fln
F0jdWv0z/42ZK8HkONF65MWnHx9AMUte9gpd2BNc1NJpQudXf02Bp/KmOh4sFRQ5SMTJ51Z6ZjD
72pmfwxxYqAf6eo/dMsQ0mvjIRNtwGuNHTz6RlXJECT5p31fYLn2If3fYyKZkwCBXEqURV/uFYQ
Pv+3tmXXhsVOSMVoMN6KdURDEBJHJUbkcvGgFCwGY013rEG+maRmxap3YBg/m3hJd/+3BIjU0hH
fhka1wgRefGgoQkI7ysO1dy2LXvdJ3TK4btWP7GqOwP7RZDRxZAHalC8FoimTrYfpC07UKfSHGQ
=
X-Received: by 2002:a05:620a:27ca:b0:7cd:27f9:6ebc with SMTP id af79cd13be357-7ceecbacffemr2728803785a.9.1748448864252;
Wed, 28 May 2025 09:14:24 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IGdCyIX+70l5Hzm07IkuljfZ0EHSRrY4+nEO5CwtACrM9CunKN6HGzblCxhM/txRHf4Vv+kpQ==
X-Received: by 2002:a05:620a:27ca:b0:7cd:27f9:6ebc with SMTP id af79cd13be357-7ceecbacffemr2728800985a.9.1748448863915;
Wed, 28 May 2025 09:14:23 -0700 (PDT)
Received: from eriador.lumag.spb.ru (2001-14ba-a0c3-3a00--7a1.rev.dnainternet.fi. [2001:14ba:a0c3:3a00::7a1])
by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5532f6a89b8sm339772e87.210.2025.05.28.09.14.22
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 09:14:23 -0700 (PDT)
Date: Wed, 28 May 2025 19:14:21 +0300
From: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
To: Mohammad Rafi Shaik <mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
Cc: Srinivas Kandagatla <srini@xxxxxxxxxx>,
Liam Girdwood <lgirdwood@xxxxxxxxx>, Mark Brown <broonie@xxxxxxxxxx>,
Jaroslav Kysela <perex@xxxxxxxx>, Takashi Iwai <tiwai@xxxxxxxx>,
linux-sound@xxxxxxxxxxxxxxx, linux-arm-msm@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, kernel@xxxxxxxxxxxxxxxx
Subject: Re: [PATCH v1 1/1] ASoC: qcom: sc8280xp: Assign backend ops for
multi codec dai links
Message-ID: <5yfyabb7h2xode53xdqowuwfzuml4ytjjzi6tlvzj7htconwtf@456qh5trwijk>
References: <20250528150716.2011707-1-mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
<20250528150716.2011707-2-mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528150716.2011707-2-mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
X-Authority-Analysis: v=2.4 cv=d4b1yQjE c=1 sm=1 tr=0 ts=68373661 cx=c_pps
a=HLyN3IcIa5EE8TELMZ618Q==:117 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10
a=dt9VzEwgFbYA:10 a=EUspDBNiAAAA:8 a=MkCF4ZN9ME8HeUR9PkwA:9 a=CjuIK1q_8ugA:10
a=bTQJ7kPSJx9SKPbeHEYW:22
X-Proofpoint-ORIG-GUID: GPT7a3-CWDgXL0yNQemoTdqOv784lBmu
X-Proofpoint-GUID: GPT7a3-CWDgXL0yNQemoTdqOv784lBmu
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDE0MSBTYWx0ZWRfX7nMV09FPt5Pw
TP2n7BarbMKtKqNitB4N+t7n42VqeXBfRFttmxnoK7q3Qie4ql5N8kW8HQXA41+uG7oYX239IRF
+pJnyMufpocgMdJKBO/aQhc4qXQwdM8uMWH/1Bw8eUNisUKMHPXNC7NyVF6BTfUU6SPGZpXSvrM
hvNetqkAoarKOyMmnJiNH7tnuqLQ6QrD34ekevWEk/ZB8+jmytCmrNMOa+zRt//xfmv51e3jcFe
kmHaR+pBOPLKNXDiigJTDOgwmSKaYb+ZXAmEaWBgSTJHPHcqlL8NdRYJItCOzzzbxz58CpB8LIo
3OLAnSQI88ge5CZoA/n6AKmnPFLg/8vizP/ZVhi/pE36xJDgGgVB70Yv+4IzIE0IVFbEHEH6nbw
kJKfgkvTyqiwNKyJ1gji99zWAv5UEpqpFVK3rYAKGPEFaFB3SEwxiibeUUsQtTIBT7kIDVNf
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_08,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
adultscore=0 suspectscore=0 malwarescore=0 phishscore=0 mlxlogscore=680
lowpriorityscore=0 priorityscore=1501 bulkscore=0 spamscore=0 clxscore=1015
impostorscore=0 mlxscore=0 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280141
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 08:37:16PM +0530, Mohammad Rafi Shaik wrote:
> In the existing implementation, the link->ops assignment is
> conditioned on link->no_pcm being set, which generally happens
> when a platform entry is present. However, in scenarios where
> there is no platform but multiple codecs in the DAI link,
> backend operations (link->ops) must still be assigned to ensure
> correct codec settings.
Could you please provide an example of such scenarios?
>
> Signed-off-by: Mohammad Rafi Shaik <mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
> ---
> sound/soc/qcom/sc8280xp.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
--
With best wishes
Dmitry
Return-Path: <linux-kernel+bounces-665783-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id CB0A041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:15:04 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id ADE111C002AB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:15:17 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 49E7228C879;
Wed, 28 May 2025 16:14:57 +0000 (UTC)
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B7F3D28C00D;
Wed, 28 May 2025 16:14:56 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448896; cv=none; b=butEojGpSkRpZimjF6FJHhI0ItpAYBSV15K0WrrV7XpQHsPS4cOa9gM9Cf57o4MHmFBJydma1kJP0C/99ZrGDVAzHtuPuBsXI8YwN7N1JVMJNkG5fD97m73fyR22KeF5aACY5zxNxk7a3OShp0SRbVv2pFQxeH6825RyCSgkwQA=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448896; c=relaxed/simple;
bh=gJtjQc4SaK2pmuKjZCqhs8OgW/uNNZKmIHygp1VM68Y=;
h=Date:From:To:Cc:Subject:Message-ID:MIME-Version:Content-Type; b=YbjigC9yAg+duk6aQsFB9EGJJKTqQWg4wksLOtHb3aTVTVnM/QruAiwSv5PVbXkW1ZguvOh+fTPoFfsIxmEp48MPzJh5QIIv4aiBqJZALs66dE+dejJp/3ChD04ZMRiJcm1UmoLM67wUjdoB3B5I5OUnAhZ8WQRkl7VsCJVsrOU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8476CC4CEE3;
Wed, 28 May 2025 16:14:55 +0000 (UTC)
Date: Wed, 28 May 2025 12:15:55 -0400
From: Steven Rostedt <rostedt@xxxxxxxxxxx>
To: LKML <linux-kernel@xxxxxxxxxxxxxxx>, Linux Trace Kernel
<linux-trace-kernel@xxxxxxxxxxxxxxx>
Cc: Masami Hiramatsu <mhiramat@xxxxxxxxxx>, Mathieu Desnoyers
<mathieu.desnoyers@xxxxxxxxxxxx>, Vincent Donnefort <vdonnefort@xxxxxxxxxx>
Subject: [PATCH v2] ring-buffer: Do not trigger WARN_ON() due to a
commit_overrun
Message-ID: <20250528121555.2066527e@xxxxxxxxxxxxxxxxxx>
X-Mailer: Claws Mail 3.20.0git84 (GTK+ 2.24.33; x86_64-pc-linux-gnu)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
From: Steven Rostedt <rostedt@xxxxxxxxxxx>
When reading a memory mapped buffer the reader page is just swapped out
with the last page written in the write buffer. If the reader page is the
same as the commit buffer (the buffer that is currently being written to)
it was assumed that it should never have missed events. If it does, it
triggers a WARN_ON_ONCE().
But there just happens to be one scenario where this can legitimately
happen. That is on a commit_overrun. A commit overrun is when an interrupt
preempts an event being written to the buffer and then the interrupt adds
so many new events that it fills and wraps the buffer back to the commit.
Any new events would then be dropped and be reported as "missed_events".
In this case, the next page to read is the commit buffer and after the
swap of the reader page, the reader page will be the commit buffer, but
this time there will be missed events and this triggers the following
warning:
------------[ cut here ]------------
WARNING: CPU: 2 PID: 1127 at kernel/trace/ring_buffer.c:7357 ring_buffer_map_get_reader+0x49a/0x780
Modules linked in: kvm_intel kvm irqbypass
CPU: 2 UID: 0 PID: 1127 Comm: trace-cmd Not tainted 6.15.0-rc7-test-00004-g478bc2824b45-dirty #564 PREEMPT
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
RIP: 0010:ring_buffer_map_get_reader+0x49a/0x780
Code: 00 00 00 48 89 fe 48 c1 ee 03 80 3c 2e 00 0f 85 ec 01 00 00 4d 3b a6 a8 00 00 00 0f 85 8a fd ff ff 48 85 c0 0f 84 55 fe ff ff <0f> 0b e9 4e fe ff ff be 08 00 00 00 4c 89 54 24 58 48 89 54 24 50
RSP: 0018:ffff888121787dc0 EFLAGS: 00010002
RAX: 00000000000006a2 RBX: ffff888100062800 RCX: ffffffff8190cb49
RDX: ffff888126934c00 RSI: 1ffff11020200a15 RDI: ffff8881010050a8
RBP: dffffc0000000000 R08: 0000000000000000 R09: ffffed1024d26982
R10: ffff888126934c17 R11: ffff8881010050a8 R12: ffff888126934c00
R13: ffff8881010050b8 R14: ffff888101005000 R15: ffff888126930008
FS: 00007f95c8cd7540(0000) GS:ffff8882b576e000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007f95c8de4dc0 CR3: 0000000128452002 CR4: 0000000000172ef0
Call Trace:
<TASK>
? __pfx_ring_buffer_map_get_reader+0x10/0x10
tracing_buffers_ioctl+0x283/0x370
__x64_sys_ioctl+0x134/0x190
do_syscall_64+0x79/0x1c0
entry_SYSCALL_64_after_hwframe+0x76/0x7e
RIP: 0033:0x7f95c8de48db
Code: 00 48 89 44 24 18 31 c0 48 8d 44 24 60 c7 04 24 10 00 00 00 48 89 44 24 08 48 8d 44 24 20 48 89 44 24 10 b8 10 00 00 00 0f 05 <89> c2 3d 00 f0 ff ff 77 1c 48 8b 44 24 18 64 48 2b 04 25 28 00 00
RSP: 002b:00007ffe037ba110 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
RAX: ffffffffffffffda RBX: 00007ffe037bb2b0 RCX: 00007f95c8de48db
RDX: 0000000000000000 RSI: 0000000000005220 RDI: 0000000000000006
RBP: 00007ffe037ba180 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 00007ffe037bb6f8 R14: 00007f95c9065000 R15: 00005575c7492c90
</TASK>
irq event stamp: 5080
hardirqs last enabled at (5079): [<ffffffff83e0adb0>] _raw_spin_unlock_irqrestore+0x50/0x70
hardirqs last disabled at (5080): [<ffffffff83e0aa83>] _raw_spin_lock_irqsave+0x63/0x70
softirqs last enabled at (4182): [<ffffffff81516122>] handle_softirqs+0x552/0x710
softirqs last disabled at (4159): [<ffffffff815163f7>] __irq_exit_rcu+0x107/0x210
---[ end trace 0000000000000000 ]---
The above was triggered by running on a kernel with both lockdep and KASAN
as well as kmemleak enabled and executing the following command:
# perf record -o perf-test.dat -a -- trace-cmd record --nosplice -e all -p function hackbench 50
With perf interjecting a lot of interrupts and trace-cmd enabling all
events as well as function tracing, with lockdep, KASAN and kmemleak
enabled, it could cause an interrupt preempting an event being written to
add enough events to wrap the buffer. trace-cmd was modified to have
--nosplice use mmap instead of reading the buffer.
The way to differentiate this case from the normal case of there only
being one page written to where the swap of the reader page received that
one page (which is the commit page), check if the tail page is on the
reader page. The difference between the commit page and the tail page is
that the tail page is where new writes go to, and the commit page holds
the first write that hasn't been committed yet. In the case of an
interrupt preempting the write of an event and filling the buffer, it
would move the tail page but not the commit page.
Have the warning only trigger if the tail page is also on the reader page,
and also print out the number of events dropped by a commit overrun as
that can not yet be safely added to the page so that the reader can see
there were events dropped.
Cc: stable@xxxxxxxxxxxxxxx
Fixes: fe832be05a8ee ("ring-buffer: Have mmapped ring buffer keep track of missed events")
Signed-off-by: Steven Rostedt (Google) <rostedt@xxxxxxxxxxx>
---
Changes since v1: https://lore.kernel.org/20250527121140.0e7f0565@xxxxxxxxxxxxxxxxxx
- Added to the pr_info() the CPU that overflowed and the timestamp of the
page that overflowed, to make it easier for user space to know where it
happened.
- Restructured to have if (missed_events) be the main condition, as the sub
conditions only did something when missed_events was non-zero.
(Masami Hiramatsu)
kernel/trace/ring_buffer.c | 26 ++++++++++++++++++--------
1 file changed, 18 insertions(+), 8 deletions(-)
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index ca1a8e706004..683aa57870fe 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -7285,8 +7285,8 @@ int ring_buffer_map_get_reader(struct trace_buffer *buffer, int cpu)
/* Check if any events were dropped */
missed_events = cpu_buffer->lost_events;
- if (cpu_buffer->reader_page != cpu_buffer->commit_page) {
- if (missed_events) {
+ if (missed_events) {
+ if (cpu_buffer->reader_page != cpu_buffer->commit_page) {
struct buffer_data_page *bpage = reader->page;
unsigned int commit;
/*
@@ -7307,13 +7307,23 @@ int ring_buffer_map_get_reader(struct trace_buffer *buffer, int cpu)
local_add(RB_MISSED_STORED, &bpage->commit);
}
local_add(RB_MISSED_EVENTS, &bpage->commit);
+ } else if (!WARN_ONCE(cpu_buffer->reader_page == cpu_buffer->tail_page,
+ "Reader on commit with %ld missed events",
+ missed_events)) {
+ /*
+ * There shouldn't be any missed events if the tail_page
+ * is on the reader page. But if the tail page is not on the
+ * reader page and the commit_page is, that would mean that
+ * there's a commit_overrun (an interrupt preempted an
+ * addition of an event and then filled the buffer
+ * with new events). In this case it's not an
+ * error, but it should still be reported.
+ *
+ * TODO: Add missed events to the page for user space to know.
+ */
+ pr_info("Ring buffer [%d] commit overrun lost %ld events at timestamp:%lld\n",
+ cpu, missed_events, cpu_buffer->reader_page->page->time_stamp);
}
- } else {
- /*
- * There really shouldn't be any missed events if the commit
- * is on the reader page.
- */
- WARN_ON_ONCE(missed_events);
}
cpu_buffer->lost_events = 0;
--
2.47.2
Return-Path: <linux-kernel+bounces-665784-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id D2FA441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:15:18 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 345E11C00958
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:15:31 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C6A2D28D821;
Wed, 28 May 2025 16:15:07 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="SaW5KfKM"
Received: from mail-yb1-f182.google.com (mail-yb1-f182.google.com [209.85.219.182])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7217C28CF76
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:15:05 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.182
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448907; cv=none; b=SSi/oS1hIDHAjcquvhoEipnuLja3mSZzk1ug47SZKLIrubMcmCth80CZ2JWk9qjc7eBiecl96yHrBe9f87peUMPO8KdEVinhEpPJkA2bRj6CtqHn1Da2kPFiVk01SWKUXarE3gdQppHqCkUlQ/AkOF/cOVZylluNz0pqc309isM=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448907; c=relaxed/simple;
bh=oftCGjGpACLgWjDfLsAyXAfYxlJ+xGu9uinKdgFYgsQ=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=Vf8r9dhYTrCeu4F8jtHsohq+7C1wPYjAxkMKJi//7Cnb61TF+0583fiPEgBotePwCdpm0/mXdhW6zqOUFOFt6MeTTJ1faJNGgLz6HUH0QTienRtptms1X2nc9N7hB+fGzO6nbO+KQir3CxHuoOXmSWhlRHlc3O74+rkeHyczYqM=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=SaW5KfKM; arc=none smtp.client-ip=209.85.219.182
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com
Received: by mail-yb1-f182.google.com with SMTP id 3f1490d57ef6-e75668006b9so4011639276.3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:15:05 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=google.com; s=20230601; t=1748448904; x=1749053704; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=oftCGjGpACLgWjDfLsAyXAfYxlJ+xGu9uinKdgFYgsQ=;
b=SaW5KfKMU5iqNDyf1Ck5tVJ6aA4C2qc8B6kDtVSqWhRfO0yrI30RlNaU7XxBH6ImVH
ocqLYMS3DEHv0Uv8ewSNkaN8X5zCRtxe8yxHIrtwPNIlrRHWJsvHutujKcjXdYTHur6b
HeZhdwqF71RlsixpiKycpzY/7vaQpZ2rwW0Fp4KPSLAT96sJ8Au/IaQoTALo3SFbbDmh
tWvyCKXVCPBfWU6r+SPVpYdf7udeglG5hK4y8bhMTp5/ecyFDmJ+JtSDM8S6dplBuYSZ
B//JB5TJLZxRIIY7a6BjTfoj2xc0/BW/KpRoYyLfsQBiZsYhY/wemUY14wdhrGGTd/cj
R+Ug==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748448904; x=1749053704;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=oftCGjGpACLgWjDfLsAyXAfYxlJ+xGu9uinKdgFYgsQ=;
b=lw+b1FXtFw+tM3rYcqSzxRUcM+mHVL5z6dPkdhQkfcY1U7RO8FahW1lnPKGQ5rgOwm
zGItms3Xr29Jtg3lRwsrqcFL4u725rb8zRcl+Uv0S0g6JJM/6UovsdYdz7qLj/qtpMqJ
aSB4/s+8FpFy/3eDYuyBkcewKGPiBmqMRe6O9g6eyzube2I07i+uZy4Kum+avhFu9g4g
k8IhKItRzwuFf0m3jyE9TQpXTW1wCY/UvE8ScQ3kwoTdsVRlYv7X3GtOaGQz3ZnGZU6k
m+2tQFZ9eOc4NYdYHAHEgjiVWJIwCxPfsTxVz0n1G2LHTovfggMhUfF19JnZinfGSdN+
jyEQ==
X-Forwarded-Encrypted: i=1; AJvYcCUPFCI0uzEsVYql83HQXAS3+S9CqBDqFFTD/jh435jfxpqEvrncoXsGN7BeSzLIx78a5E5rbH+2KebHq5Y=@vger.kernel.org
X-Gm-Message-State: AOJu0YzywzfPs0AbU/FAGSzpULxCdGcD1nwvdzj5Tuz1QkMfdQuG8fHS
fbzh9vMKnB2GL0PEzKiD7ec/R2GN735GCmW8awohKm2OK+e58FllBGse6KuS2/Pv3AWUnyI8yUQ
XfiTCFiIyLLYmMM25fNSLnURQ3F1pe+ROGLWvV1Sm
X-Gm-Gg: ASbGncu87sfshJq0AvD7uPyavrAMYPX+1cz1ndjG9i/CroMKbx0gbWN+IgsQfDrC9+G
7oi7TR95v0PSqaNEET9set850wxhQZXDs5HQzEM2D5m3aD/9WnqcSusb1EqfclF7lbEqKNPLc/i
945ab5ow9J0evfU1rmFV1N1hLK5glVZII7iEW4dJ8sTwyxB98bhr5JCFcmiaHbyov5naEgZPKUT
Mz2hw==
X-Google-Smtp-Source: AGHT+IFwW0/MrySaPT+ucgIg1dChgPDCXdJtXWgrMY95UPokdViJg0CdZ9UXjyC8CVjk5twtVkLrVgdpew1P2vJKaig=
X-Received: by 2002:a05:6902:1b8a:b0:e7d:c87a:6249 with SMTP id
3f1490d57ef6-e7dc87a6957mr7030815276.36.1748448903884; Wed, 28 May 2025
09:15:03 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250528023326.3499204-1-gavinguo@xxxxxxxxxx> <aDbXEnqnpDnAx4Mw@localhost.localdomain>
<aDcl2YM5wX-MwzbM@x1.local> <629bb87e-c493-4069-866c-20e02c14ddcc@xxxxxxxxxx> <aDcvplLNH0nGsLD1@localhost.localdomain>
In-Reply-To: <aDcvplLNH0nGsLD1@localhost.localdomain>
From: James Houghton <jthoughton@xxxxxxxxxx>
Date: Wed, 28 May 2025 12:14:28 -0400
X-Gm-Features: AX0GCFtQ3Y_TJAz9gxU-mydw8Rp4n4FQFwD-d7vMDgv4nmmNrG0P_Nb3Fcuv7Sk
Message-ID: <CADrL8HXD0hX+5WvtZWKXAr0NvfvOJZhqL9PVBawYQuAyzhGgYg@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v3] mm/hugetlb: fix a deadlock with pagecache_folio and hugetlb_fault_mutex_table
To: Oscar Salvador <osalvador@xxxxxxx>
Cc: David Hildenbrand <david@xxxxxxxxxx>, Peter Xu <peterx@xxxxxxxxxx>, Gavin Guo <gavinguo@xxxxxxxxxx>,
linux-mm@xxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, muchun.song@xxxxxxxxx,
akpm@xxxxxxxxxxxxxxxxxxxx, mike.kravetz@xxxxxxxxxx, kernel-dev@xxxxxxxxxx,
stable@xxxxxxxxxxxxxxx, Hugh Dickins <hughd@xxxxxxxxxx>,
Florent Revest <revest@xxxxxxxxxx>, Gavin Shan <gshan@xxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-11.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 11:45=E2=80=AFAM Oscar Salvador <osalvador@xxxxxxx>=
wrote:
>
> On Wed, May 28, 2025 at 05:09:26PM +0200, David Hildenbrand wrote:
> > On 28.05.25 17:03, Peter Xu wrote:
> > > So I'm not 100% sure we need the folio lock even for copy; IIUC a ref=
count
> > > would be enough?
> >
> > The introducing patches seem to talk about blocking concurrent migratio=
n /
> > rmap walks.
>
> I thought the main reason was because PageLock protects us against writes=
,
> so when copying (in case of copying the underlying file), we want the
> file to be stable throughout the copy?
>
> > Maybe also concurrent fallocate(PUNCH_HOLE) is a problem regarding
> > reservations? Not sure ...
>
> fallocate()->hugetlb_vmdelete_list() tries to grab the vma in write-mode,
> and hugetlb_wp() grabs the lock in read-mode, so we should be covered?
>
> Also, hugetlbfs_punch_hole()->remove_inode_hugepages() will try to grab t=
he mutex.
>
> The only fishy thing I see is hugetlbfs_zero_partial_page().
>
> But that is for old_page, and as I said, I thought main reason was to
> protect us against writes during the copy.
>
> > For 2) I am also not sure if we need need the pagecache folio locked; I
> > doubt it ... but this code is not the easiest to follow.
>
> I have been staring at that code and thinking about potential scenarios
> for a few days now, and I cannot convice myself that we need
> pagecache_folio's lock when pagecache_folio !=3D old_folio because as a
> matter of fact I cannot think of anything it protects us against.
Hi Oscar,
Have you thought about the UFFDIO_CONTINUE case (hugetlb_mfill_atomic_pte()=
)?
I'm slightly concerned that, if you aren't holding pagecache_folio's
lock, there might be issues where hugetlb_mfill_atomic_pte() proceeds
to map a hugetlb page that it is not supposed to. (For example, if the
fault handler does not generally hold pagecache_folio's lock,
hugetlb_mfill_atomic_pte() will see a page in the pagecache and map
it, even though it may not have been zeroed yet.)
I haven't had enough time to fully think through this case, but just
want to make sure it has been considered.
Thanks!
> I plan to rework this in a more sane way, or at least less offusctaed, an=
d then
> Galvin can fire his syzkaller to check whether we are good.
>
> --
> Oscar Salvador
> SUSE Labs
>
Return-Path: <linux-kernel+bounces-665785-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1346541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:15:55 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 52EE916E1FD
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:15:56 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C0DB028CF50;
Wed, 28 May 2025 16:15:45 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="gL3Skzeh"
Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 386451B6D06
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:15:42 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448945; cv=none; b=RoslpByZxi0M25itpCAS7/qYFRea+duRgQZeTIy6F+bMYy/ApGZYfWNVdQKXEcPAQqaEe55XPt63+3OGLJgaHUg30EBEDnXPkslg8tWK5rcdHDmp1MMZrUrfdsQ9C8yQPMSkBuO5lcAFfzgsc021WO8kasYPQi5ZfnojpNj05LI=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448945; c=relaxed/simple;
bh=7szsciP4s4R9wknqXBXBTZqN3lbaKfXPhicwDQ8Hmdw=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=gx+eQ+Rpr16FWfHePBZD6v/We6w9KcfWrxXrhTEu8rJMKPlcDnHWTp6eUUCL8cSCZHSfaqxebZ7CI9GC4Cgvns7ERejL4HINPqyhBQ2BsebXuJ2vsiS5vbtUlztr20U8Gu8BNlcRYdr6VAS0mI4TJ5d6jB7KchWwIvQ6F0s7s/M=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=gL3Skzeh; arc=none smtp.client-ip=209.85.128.53
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org
Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-43cfe63c592so432465e9.2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:15:42 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=linaro.org; s=google; t=1748448941; x=1749053741; darn=vger.kernel.org;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to;
bh=+C1RzNTr6MbSo58wcEFxOVAmKna9VJA+FNUjpMEd4H8=;
b=gL3SkzehCRPTbEareMaVrIuuL6aN9um90oEuhc5yudHJfX8iUpFwRjTv6VAtRpVUEu
ecAF5HVrSVpLSDuTcwdCGvtq+A3LrsFZWosbDZi4JZQaHdkErRKv9mq2KROHE5T7r47x
K+JFF1SZaGOziosFC3+L0UHqqfItztS6aMDZeNddyNnIyuQBrF+nR/75OSlXJZwtTEzY
dD5nuonu3a0OvG1FFjc1Hp654WRktMqyWlWOILhcM+AJBXOP9HoQuitiDqLX0LdIMtYV
AXH3N04AZ5E+nRN1c8ZtvKmDrBTMlLTOa0cR2rxDHdbGDSUMGTR50BNX/gOuVuqJR2Ox
mQMQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748448941; x=1749053741;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=+C1RzNTr6MbSo58wcEFxOVAmKna9VJA+FNUjpMEd4H8=;
b=V88Rn+6y39M0m5wiTN8LO5oOV/lN9GHkKIJy4lj8TIp799CC1TTVipeXahqokaaOD4
IHseIa01yrYxA75pEWqkqGElxWZ3uf9rzC/hAHa9pG3BgXUY3vRnynqXuioNyITX+rLj
qjIi41b4BFVNFM8cUMwHcKcDk7RCMA/2rHdAUilrq8WMmVpksfqjz1jvgxJEBD5KAMp5
pBPFruoNC+yxUYh0j53ZBGr5sYunDHRvhK6xKFRvpTYxmcibHrDb3WjGHoWTC2HlbN/k
yzHmpLux6fQovZT4IHSpqbJVK2PF3bgXaszgsGQEOuQPZdzadC7Ouv8JJwPNUGlBlYdg
nfIg==
X-Forwarded-Encrypted: i=1; AJvYcCUDb3zpPCBQa898vlNL4I8WYxy/Nb1QzLXl1hKLDHYYftCGxs5NXV/xNfILgKMK97V3Yh3IUkUps/wq4EA=@vger.kernel.org
X-Gm-Message-State: AOJu0YxQRBV+MkKuZFzpy4Lbn1xUV17/ot8on5VH2p7462za0naOARhI
UN3YiKE5IpqMNOWXvNcpTVtyihz/+Ory3t1GWvepOL5kL0lfhH3GDK4xOceMqjPG0Uw=
X-Gm-Gg: ASbGnctI9+MIb78qM0NEfmdaRp83ogGhW+04hzHazg7r5yh4Weltq5lY/1n/87RWovF
oRTl7033zECstFPrvG9cv7mLZ1aceATZL/v1IqwlXicCjxK+ZcZiPYPzkuopmGT4HLvMYgKptZ0
LdBpGMSphs6pTMRTFp9bevPPeHNxjv0F91JfT2YSAfMOU1YZe3+HKKSa6e2kUDWXjHsC5YYZ5kN
IM4STteYC5drstwzMp7dxj+yvFxBcu0wb+mkMLwGO4H0tqTmTdolMxNyBzqNM1+ge5Vhzrdmkxt
kvz0bAgQJ/0bvqaL8BTwTqNYjY0H5a4+EBrhNWYogNw6SejpNkXg3V8=
X-Google-Smtp-Source: AGHT+IGY3B2n3dEpBIQTEIc4UcD13zJbfNxCVilIBzIvGrsLXjUktw06sdl/F0Rxa0Z5ypRV303Ptw==
X-Received: by 2002:a05:6000:2389:b0:3a4:d238:682c with SMTP id ffacd0b85a97d-3a4d2386cfbmr12567851f8f.53.1748448941430;
Wed, 28 May 2025 09:15:41 -0700 (PDT)
Received: from localhost ([41.210.143.146])
by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3a4eac8a74esm1859615f8f.45.2025.05.28.09.15.40
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 09:15:41 -0700 (PDT)
Date: Wed, 28 May 2025 19:15:36 +0300
From: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
To: Alison Schofield <alison.schofield@xxxxxxxxx>
Cc: Shiju Jose <shiju.jose@xxxxxxxxxx>, Davidlohr Bueso <dave@xxxxxxxxxxxx>,
Jonathan Cameron <jonathan.cameron@xxxxxxxxxx>,
Dave Jiang <dave.jiang@xxxxxxxxx>,
Vishal Verma <vishal.l.verma@xxxxxxxxx>,
Ira Weiny <ira.weiny@xxxxxxxxx>,
Dan Williams <dan.j.williams@xxxxxxxxx>,
Li Ming <ming.li@xxxxxxxxxxxx>, Fan Ni <fan.ni@xxxxxxxxxxx>,
linux-cxl@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
kernel-janitors@xxxxxxxxxxxxxxx
Subject: Re: [PATCH next] cxl: fix return value in
cxlctl_validate_set_features()
Message-ID: <aDc2qGgYVzXMSUpz@stanley.mountain>
References: <aDbFPSCujpJLY1if@stanley.mountain>
<aDcqO5hlGrRXzIPT@xxxxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <aDcqO5hlGrRXzIPT@xxxxxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 08:22:35AM -0700, Alison Schofield wrote:
> On Wed, May 28, 2025 at 11:11:41AM +0300, Dan Carpenter wrote:
> > The cxlctl_validate_set_features() function is type bool. It's supposed
> > to return true for valid requests and false for invalid. However, this
> > error path returns ERR_PTR(-EINVAL) which is true when it was intended to
> > return false.
>
> Shiju - Can you trace this one through and add the impact statement?
> Wondering if this is going to fail gracefully, or badly, further
> down this path?
>
Sorry, I would normally analyse this a bit more myself, but it's only in
linux-next so I assumed no one was using it yet. It ends up being fine.
cxlctl_set_feature() has a check for:
if (rpc_in->op_size <= sizeof(feat_in->hdr))
at the start and sizeof(feat_in->hdr) is larger than sizeof(uuid_t).
regards,
dan carpenter
Return-Path: <linux-kernel+bounces-665786-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1B36F41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:16:09 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 5901516FCDB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:16:10 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 3328028CF4E;
Wed, 28 May 2025 16:16:00 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="pNa+2p9Z"
Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id B97E82857F8
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:15:56 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448959; cv=none; b=UonqecYBZPFwMhy1J0cS4DkKRuHI3G2ch2A6E6BCOPmA0lWo/4Xi9VeNiG5MlsLnjNe8DC20pHmDI1dXRGt8t1y5Es5MtQev3UOLPsCkl2YI0jFN5hA0lVpmSwK4R/sDmcc1f15tZsZyIX4QEMYfEfmbMD8AljlPjYyZ0mhVodE=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448959; c=relaxed/simple;
bh=Yzfyc3hJ2cranAfg+FXNl85uQMxVx0K6I1IIZeVv/6w=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=ASFUyNVtrPTGJg2JVbjDUlei61u2KD0011I5PLN0w7sFRsP/waNQWrUDmMIIYuMOYxStxsupvPEyizpLASTdxUHopluumfLNy8UlASW3YJ4BIR/2arbdUqvhvCzq3st8cobvvUK9gME7JdYhGLCxtIGYoGI6blhgMvEw2NZCe6E=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=pNa+2p9Z; arc=none smtp.client-ip=205.220.180.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com
Received: from pps.filterd (m0279873.ppops.net [127.0.0.1])
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S800PW003699
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:15:55 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=
cc:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to; s=qcppdkim1; bh=0gI5oH5wVtb0UAnjoDixYRCS
/R30DexWdEZ/g8LW7xM=; b=pNa+2p9Z46vGb9NaB3B0Cq3D13AWihW5QSQ4waHd
pYlbClDLFsnAF8q2gOWs1eWiEusVfyTskLIHeK1eQdiXKeruOjZD30+u2u1yR5m/
Mc7w6uyWiNlOvh0bimWjnsYzMZjLLb7trCpARjZ3t/2scDa1g9ToI7rz3J2vl8SI
vdQqS+SOmtWPLAEvZfz74HfUgpOYoshhyQ25KeUEa7jREA+ClOJe6h1T6SoNmNq1
/07aku6zd6IJVCRF/W+zYCNbu/pX5emDiTlYlNVdXZEALGRvwhlFTuGzKT0NDVC9
dvRYWL8bOGkjiuLm901YgW/bbfeTB2LXi4EbHtPqv5koaw==
Received: from mail-ot1-f69.google.com (mail-ot1-f69.google.com [209.85.210.69])
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46u3fqb0un-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT)
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:15:55 +0000 (GMT)
Received: by mail-ot1-f69.google.com with SMTP id 46e09a7af769-72e2f2b9ea1so4849712a34.3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:15:55 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748448954; x=1749053754;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=0gI5oH5wVtb0UAnjoDixYRCS/R30DexWdEZ/g8LW7xM=;
b=gw56yEwfbtZk4oUm5mOs2iDo5ORkoMYmAgFAasBIAryOb7i8LdA8B5bZgtfrOwNBbT
LM8O5Bxyj+ihESHtZ1djgkyFPSdSZvkjdI0yUpF4GoAyC6A26sNTEdEzPNMdvnYmtqlo
CnxRSa60gDy65F8I7TNBV6p0wNLynzrzDKdx/l89m+p9bovz/1cNtEk+6/NIquWyb5JS
PMz8VIY4dDTA9vqAlxjZHgQu6zxrrIT8cFBPxQGs9/cuNrpp7hQzdPBZvl5mZEAk/cNM
w5pAtlQbx9c2us2hZzPg3xiishFmuPZa4eTtSmD7g6foNvIXDsEv35XG+BCrYhq4ARbU
dwhg==
X-Forwarded-Encrypted: i=1; AJvYcCVGRtQJfUh2osiD7A23iBPoK8WjBKmx2S+9W7543ay9ltj4aB+YLcwc/6+I0doKH3kmNIBD7lHls9MB/70=@vger.kernel.org
X-Gm-Message-State: AOJu0YzHPz1Hvk3Uqc+Atay5HoaWkMk5OZBmrN7UBBT3I7iPh74Dc/vG
mG/nDxp4vOlvyHDk2ImwvGAy5v5BQBIFcv8mNmWbPelzoUcCCagm63/+ibPb3los6PEtkvIx1ix
MrOsc6W+Ede48kO6UsJSZWL6NEZtr84SLKtUr8zIMqoIy9+Cd/VGGpr2j5/ivr2EexL8=
X-Gm-Gg: ASbGncuPXk7QBVGxHteQkJXUmL5rnPUDSGQ39ntsXLwCEASQ84vNgdMg+9WETVFCPMT
sO4sj6jK7fgI8Ry2NpIGbUsc35qaFyNzFRoVtoK6OFHBhAjTocdbmWuWLKMpPro5Pp5VsmeS97U
/amExuXWMdGqVhWg9RiFWEvp5CQTErlSTXMHsZKHNlYKGG4g69LevnLc4JOT58i5oMLWAGGxtx3
rzWXQ7rfkbaT9HTMZ76IBPStYcO7Ol98bWKb6nJTpuPAx/e4pLlEpXrPNwko64ysm6YcPwG9qNA
pcaS5hquQk4rwbqDn+lpMwa/7KjzAfelLMvq87glBUbkcktv94/DZ4sBgbutsmOnrOc3fM+Uaz4
=
X-Received: by 2002:a05:6830:f95:b0:72b:9e3b:82be with SMTP id 46e09a7af769-7355cf4e473mr10325989a34.7.1748448954499;
Wed, 28 May 2025 09:15:54 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IEKYwrXg6faG2a+Jm8PE28X/HbDkL+0E2l18X5AHSQXLcRbVwR7vfI1Mutzhzw+1inWKHRoFw==
X-Received: by 2002:a05:6830:f95:b0:72b:9e3b:82be with SMTP id 46e09a7af769-7355cf4e473mr10325944a34.7.1748448954067;
Wed, 28 May 2025 09:15:54 -0700 (PDT)
Received: from eriador.lumag.spb.ru (2001-14ba-a0c3-3a00--7a1.rev.dnainternet.fi. [2001:14ba:a0c3:3a00::7a1])
by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5532f62a93asm339330e87.95.2025.05.28.09.15.51
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 09:15:51 -0700 (PDT)
Date: Wed, 28 May 2025 19:15:50 +0300
From: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
To: Yongxing Mou <quic_yongmou@xxxxxxxxxxx>
Cc: Abhinav Kumar <quic_abhinavk@xxxxxxxxxxx>, Rob Clark <robdclark@xxxxxxxxx>,
Sean Paul <sean@xxxxxxxxxx>,
Marijn Suijten <marijn.suijten@xxxxxxxxxxxxxx>,
David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
Stephen Boyd <swboyd@xxxxxxxxxxxx>,
Chandan Uddaraju <chandanu@xxxxxxxxxxxxxx>,
Guenter Roeck <groeck@xxxxxxxxxxxx>,
Kuogee Hsieh <quic_khsieh@xxxxxxxxxxx>,
Bjorn Andersson <andersson@xxxxxxxxxx>,
Konrad Dybcio <konradybcio@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Vara Reddy <quic_varar@xxxxxxxxxxx>,
Rob Clark <robdclark@xxxxxxxxxxxx>,
Tanmay Shah <tanmay@xxxxxxxxxxxxxx>, linux-arm-msm@xxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, freedreno@xxxxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
Jessica Zhang <quic_jesszhan@xxxxxxxxxxx>,
Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
Subject: Re: [PATCH 11/45] drm/msm/dp: split dp_ctrl_off() into stream and
link parts
Message-ID: <6hwh4bstjunf5kp2ruepsj5clztvjjtxfvxamttwpvhsdpg7ep@24w2uq4qurzd>
References: <20241205-dp_mst-v1-0-f8618d42a99a@xxxxxxxxxxx>
<20241205-dp_mst-v1-11-f8618d42a99a@xxxxxxxxxxx>
<iplgkmgma3li3jirsxlwr6mrbaepcfhqg2kuz44utvm56vwgpb@4ayjjqehmgw2>
<3992e14b-7a5c-4787-9bd9-71a2190c1e64@xxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <3992e14b-7a5c-4787-9bd9-71a2190c1e64@xxxxxxxxxxx>
X-Proofpoint-GUID: BoT2UBrlqBSxDR6v6T1eNKZ2khQN79fX
X-Proofpoint-ORIG-GUID: BoT2UBrlqBSxDR6v6T1eNKZ2khQN79fX
X-Authority-Analysis: v=2.4 cv=X8FSKHTe c=1 sm=1 tr=0 ts=683736bb cx=c_pps
a=z9lCQkyTxNhZyzAvolXo/A==:117 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10
a=dt9VzEwgFbYA:10 a=COk6AnOGAAAA:8 a=hmVhL5nSZav6zxmTOrAA:9 a=CjuIK1q_8ugA:10
a=EyFUmsFV_t8cxB2kMr4A:22 a=TjNXssC_j7lpFel5tvFf:22
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDE0MSBTYWx0ZWRfX/20OnnsVV80F
Waa59HKMYyLsIL4l9Npm26jJHdLVuSyinJ7CMhQMOLsOq1F52rFy+2HJuFVN7ND7HpYKit5gtzz
62i4lzVe/vfTSKuUGC2F7/2+77y5VgfFRwInrOMkHIKFhCwlegQgWCQj8dw+XhUMzzzJWKvBLyx
mrc6tD80Z45CfFJ77kMuius0Eb0ouhbsB4t27IjwDnJ6+hIhkyO4oBbqDUAHslliIVvKE6qSUAE
9G7QnC2p7QLNMrVi2KjZDwFG1SsoW01akqNBZQO+Ilid4p6dehnegZj/vyPLMUC4iwzP4t7RsMb
1kry8yoRFrhXuVj7ohG9fGbJlzW1jMEPpeg5AB9AjUseOtNI8HpeyzrlyzN28aJklwqSlTFAboX
ik6la0WpOYpOrBB0TS/35gRyg6asUbZoGJhwnXcoWlDZzvww1Ioji6/xKr5Z7sldQyr8aXnG
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_08,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
impostorscore=0 suspectscore=0 phishscore=0 bulkscore=0 mlxlogscore=999
mlxscore=0 clxscore=1015 priorityscore=1501 spamscore=0 adultscore=0
malwarescore=0 lowpriorityscore=0 classifier=spam authscore=0 authtc=n/a
authcc= route=outbound adjust=0 reason=mlx scancount=1
engine=8.19.0-2505160000 definitions=main-2505280141
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Mon, May 26, 2025 at 08:47:22PM +0800, Yongxing Mou wrote:
>
>
> On 2024/12/6 17:14, Dmitry Baryshkov wrote:
> > On Thu, Dec 05, 2024 at 08:31:42PM -0800, Abhinav Kumar wrote:
> > > Split dp_ctrl_off() into stream and link parts so that for MST
> > > cases we can control the link and pixel parts separately.
> >
> > Please start by describing the problem.
> Got it.
> >
> > >
> > > Signed-off-by: Abhinav Kumar <quic_abhinavk@xxxxxxxxxxx>
> > > ---
> > > drivers/gpu/drm/msm/dp/dp_ctrl.c | 29 +++--------------------------
> > > drivers/gpu/drm/msm/dp/dp_ctrl.h | 2 +-
> > > drivers/gpu/drm/msm/dp/dp_display.c | 4 +++-
> > > 3 files changed, 7 insertions(+), 28 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/msm/dp/dp_ctrl.c b/drivers/gpu/drm/msm/dp/dp_ctrl.c
> > > index 118f5ed83e464f9f27f813eb39624f9c3189f5ac..485339eb998cc6c8c1e8ab0a88b5c5d6ef300a1f 100644
> > > --- a/drivers/gpu/drm/msm/dp/dp_ctrl.c
> > > +++ b/drivers/gpu/drm/msm/dp/dp_ctrl.c
> > > @@ -1739,7 +1739,8 @@ static int msm_dp_ctrl_process_phy_test_request(struct msm_dp_ctrl_private *ctrl
> > > * running. Add the global reset just before disabling the
> > > * link clocks and core clocks.
> > > */
> > > - msm_dp_ctrl_off(&ctrl->msm_dp_ctrl);
> > > + msm_dp_ctrl_stream_clk_off(&ctrl->msm_dp_ctrl);
> > > + msm_dp_ctrl_off_link(&ctrl->msm_dp_ctrl);
> >
> > Huh? What happened with the rest of the msm_dp_ctrl_off() code sequence?
> > It got dropped, but the commit message tells nothing about it.
> >
> The function msm_dp_ctrl_off has been split into two parts, stream_clk_off
> and off_link, so it got dropped. This part is a bit confusing, will make it
> clearer.
Then msm_dp_ctrl_off_link() should be a part of this patch.
> > > ret = msm_dp_ctrl_on_link(&ctrl->msm_dp_ctrl);
> > > if (ret) {
> > > @@ -2042,7 +2043,7 @@ int msm_dp_ctrl_on_stream(struct msm_dp_ctrl *msm_dp_ctrl, struct msm_dp_panel *
> > > return ret;
> > > }
> > > -static void msm_dp_ctrl_stream_clk_off(struct msm_dp_ctrl *msm_dp_ctrl)
> > > +void msm_dp_ctrl_stream_clk_off(struct msm_dp_ctrl *msm_dp_ctrl)
> > > {
> > > struct msm_dp_ctrl_private *ctrl;
> > > @@ -2110,30 +2111,6 @@ void msm_dp_ctrl_off_link(struct msm_dp_ctrl *msm_dp_ctrl)
> > > phy, phy->init_count, phy->power_count);
> > > }
> > > -void msm_dp_ctrl_off(struct msm_dp_ctrl *msm_dp_ctrl)
> > > -{
> > > - struct msm_dp_ctrl_private *ctrl;
> > > - struct phy *phy;
> > > -
> > > - ctrl = container_of(msm_dp_ctrl, struct msm_dp_ctrl_private, msm_dp_ctrl);
> > > - phy = ctrl->phy;
> > > -
> > > - msm_dp_catalog_panel_disable_vsc_sdp(ctrl->catalog);
> > > -
> > > - msm_dp_catalog_ctrl_mainlink_ctrl(ctrl->catalog, false);
> > > -
> > > - msm_dp_catalog_ctrl_reset(ctrl->catalog);
> > > -
> > > - msm_dp_ctrl_stream_clk_off(msm_dp_ctrl);
> > > -
> > > - dev_pm_opp_set_rate(ctrl->dev, 0);
> > > - msm_dp_ctrl_link_clk_disable(&ctrl->msm_dp_ctrl);
> > > -
> > > - phy_power_off(phy);
> > > - drm_dbg_dp(ctrl->drm_dev, "phy=%p init=%d power_on=%d\n",
> > > - phy, phy->init_count, phy->power_count);
> > > -}
> > > -
> > > irqreturn_t msm_dp_ctrl_isr(struct msm_dp_ctrl *msm_dp_ctrl)
> > > {
> > > struct msm_dp_ctrl_private *ctrl;
> > > diff --git a/drivers/gpu/drm/msm/dp/dp_ctrl.h b/drivers/gpu/drm/msm/dp/dp_ctrl.h
> > > index 547155ffa50fbe2f3a1f2c2e1ee17420daf0f3da..887cf5a866f07cb9038887a0634d3e1a0375879c 100644
> > > --- a/drivers/gpu/drm/msm/dp/dp_ctrl.h
> > > +++ b/drivers/gpu/drm/msm/dp/dp_ctrl.h
> > > @@ -22,7 +22,7 @@ int msm_dp_ctrl_on_stream(struct msm_dp_ctrl *msm_dp_ctrl, struct msm_dp_panel *
> > > int msm_dp_ctrl_prepare_stream_on(struct msm_dp_ctrl *dp_ctrl, bool force_link_train);
> > > void msm_dp_ctrl_off_link_stream(struct msm_dp_ctrl *msm_dp_ctrl);
> > > void msm_dp_ctrl_off_link(struct msm_dp_ctrl *msm_dp_ctrl);
> > > -void msm_dp_ctrl_off(struct msm_dp_ctrl *msm_dp_ctrl);
> > > +void msm_dp_ctrl_stream_clk_off(struct msm_dp_ctrl *msm_dp_ctrl);
> > > void msm_dp_ctrl_push_idle(struct msm_dp_ctrl *msm_dp_ctrl);
> > > irqreturn_t msm_dp_ctrl_isr(struct msm_dp_ctrl *msm_dp_ctrl);
> > > void msm_dp_ctrl_handle_sink_request(struct msm_dp_ctrl *msm_dp_ctrl);
> > > diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
> > > index c059f749c1f204deac9dfb0c56f537f5545d9acb..b0458bbc89e934ca33ed5af3f2a8ebca30b50824 100644
> > > --- a/drivers/gpu/drm/msm/dp/dp_display.c
> > > +++ b/drivers/gpu/drm/msm/dp/dp_display.c
> > > @@ -911,7 +911,9 @@ static int msm_dp_display_disable(struct msm_dp_display_private *dp)
> > > if (dp->link->sink_count == 0)
> > > msm_dp_ctrl_psm_config(dp->ctrl);
> > > - msm_dp_ctrl_off(dp->ctrl);
> > > + msm_dp_ctrl_stream_clk_off(dp->ctrl);
> > > +
> > > + msm_dp_ctrl_off_link(dp->ctrl);
> > > /* re-init the PHY so that we can listen to Dongle disconnect */
> > > if (dp->link->sink_count == 0)
> > >
> > > --
> > > 2.34.1
> > >
> >
>
--
With best wishes
Dmitry
Return-Path: <linux-kernel+bounces-665787-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 794F541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:16:40 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 7F73A1C009C5
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:16:53 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 35CDA28C86D;
Wed, 28 May 2025 16:16:33 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=t-8ch.de header.i=@t-8ch.de header.b="HsULcoZA"
Received: from todd.t-8ch.de (todd.t-8ch.de [159.69.126.157])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3D8BA2AD22
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:16:29 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=159.69.126.157
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448992; cv=none; b=cNerWTB7J6qWZojl1ca7T9eKwEkA+ovJiwSx114bbl0eIuLaXG6UerwMnszi85isdQl+IhFrhxBHkQXw0I9hCe+4LwNzbTArrLaA/chgLx+XOVPGkPJoG0c7U5VVVsYKZLakuLC42L+3OXOFw//I2hcrDfB2KdldcizOl3ZcfW8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448992; c=relaxed/simple;
bh=CsGfA4wkOwc0c4xkoTehp9aLRXYbsmL82sZWemT3BpY=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=Kultk04tZxi+AmTrNBtayyINgvqyMWSVi0d531qrozZ9mJ8xlHKw7SBehGhXRtcrQBMW/vStoKMeRiibCAbYXmGXjtgWg1EBPLQRVHlIIrj196eHXhsQS8WYIDU8XEVldYu+fms0qOa2bGOJvJkIekDfQqJtcEIyssVUkHHofAU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=t-8ch.de; spf=pass smtp.mailfrom=t-8ch.de; dkim=pass (1024-bit key) header.d=t-8ch.de header.i=@t-8ch.de header.b=HsULcoZA; arc=none smtp.client-ip=159.69.126.157
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=t-8ch.de
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=t-8ch.de
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=t-8ch.de; s=mail;
t=1748448981; bh=CsGfA4wkOwc0c4xkoTehp9aLRXYbsmL82sZWemT3BpY=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=HsULcoZAIFQsgKD2wj/ubVAKDL7YejxUoTfKiRX+euF317szG3hp7I0PLdyoBcsVt
jnyw6Y0n/IxbKioaceb7/KJntgyxDxuUAEETvKAgFD9USMjyvR13wXY4QKPJuOXANg
NceE96icKuNGiue84QWHihKfE7tVszaEyV2UWhTA=
Date: Wed, 28 May 2025 18:16:21 +0200
From: Thomas =?utf-8?Q?Wei=C3=9Fschuh?= <thomas@xxxxxxxx>
To: Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx>
Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>,
Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>, "Rafael J. Wysocki" <rafael@xxxxxxxxxx>,
Danilo Krummrich <dakr@xxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx,
Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx>
Subject: Re: [GIT PULL] Driver core changes for 6.16-rc1
Message-ID: <35e4b33f-d9e4-41d6-8a47-644fda5b1b7f@xxxxxxxx>
References: <aDcyRMojWUbAllVX@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <aDcyRMojWUbAllVX@xxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Greg,
On 2025-05-28 17:56:52+0200, Greg KH wrote:
> The following changes since commit 82f2b0b97b36ee3fcddf0f0780a9a0825d52fec3:
>
> Linux 6.15-rc6 (2025-05-11 14:54:11 -0700)
>
> are available in the Git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/driver-core/driver-core.git tags/driver-core-6.16-rc1
>
> for you to fetch changes up to 071d8e4c2a3b0999a9b822e2eb8854784a350f8a:
>
> kernfs: Relax constraint in draining guard (2025-05-21 14:23:13 +0200)
>
> ----------------------------------------------------------------
> Driver core changes for 6.16-rc1
>
> Here are the driver core / kernfs changes for 6.16-rc1.
>
> Not a huge number of changes this development cycle, here's the summary
> of what is included in here:
> - kernfs locking tweaks, pushing some global locks down into a per-fs
> image lock
> - rust driver core and pci device bindings added for new features.
> - sysfs const work for bin_attributes. This churn should now be
> completed for those types of attributes
This is missing the switch away and removal of the transitional
struct members, "read_new", "write_new" and "bin_attrs_new".
These are the actually churny changes.
I have a branch with those, based on current linux-next/master, at
https://git.kernel.org/pub/scm/linux/kernel/git/thomas.weissschuh/linux.git b4/sysfs-const-bin_attr-final
(Has not yet passed 0day, but earlier versions this week did)
Do you want me to resubmit it to you? Now or shortly before the end of
the merge window?
> - auxbus device creation helpers added
> - fauxbus fix for creating sysfs files after the probe completed
> properly
> - other tiny updates for driver core things.
>
> All of these have been in linux-next for over a week with no reported
> issues.
<snip>
> Thomas WeiÃ?schuh (2):
> sysfs: constify bin_attribute argument of bin_attribute::read/write()
> sysfs: constify attribute_group::bin_attrs
<snip>
Thomas
Return-Path: <linux-kernel+bounces-665789-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 70AAA41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:17:06 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 2CF654A072F
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:17:07 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id B3C1A28D843;
Wed, 28 May 2025 16:16:40 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="LYUs5Bhd"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5F57F28D84D
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:16:38 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449000; cv=none; b=hmlC8tTzYEenILsVfjXjELGUl0r6H+FE+WKJ09C2wS7VWEOINvjYrnVIpuaqSr3b/eiXq6f4NF5D6vn5k1HIzQcUvSRrksphyDwYbuFSyBId0aiO8e8emUwFBdLFg9I4uIT9gn+gTZYZrrZWRTN/qznMojLSIa7h+igL/ZDWgZg=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449000; c=relaxed/simple;
bh=Z/yuNRvutEMonw93F9Xzr0/LAs06gPGkEly7k12Zexs=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=LN4OwLhakSwDFVigVw/uwKH+O9rZQXEhQMpAZ9nwBRr+6Lt9Xzes4yu6hso8Gus/stJSjku10996G92t/qJ++1rmcXwTmGFSX37Ie63yCpx3GcZZ5OYQSMtkxPlFQbX0W+rAXw0MiaPdKrP8j0TUHneIBvgyrCY9hjee3Nqq9ag=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=LYUs5Bhd; arc=none smtp.client-ip=170.10.129.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748448997;
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:
in-reply-to:in-reply-to:references:references;
bh=2k2PY9MAHKt+UL2NC1MP+obMfgPvXhyJk5Kn5YL16Pc=;
b=LYUs5Bhd5uttkVpJLARuTyBTBhWl81escZMchCXLn4+BKxMTzq1ofQU+frNPVRTPKA+Cxi
XcDO95gGfJuW5c8mrQSgt8WgUv4hNPEQ5yxXkue7RyPMWqL0uuCzxrdwBLhBEQ734AGjym
eppktTyMfrEivxuSY+dI8rA/OrdGRH8=
Received: from mail-qv1-f72.google.com (mail-qv1-f72.google.com
[209.85.219.72]) by relay.mimecast.com with ESMTP with STARTTLS
(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
us-mta-605-rtshjivsPK2tCMnoRD7_aw-1; Wed, 28 May 2025 12:16:36 -0400
X-MC-Unique: rtshjivsPK2tCMnoRD7_aw-1
X-Mimecast-MFC-AGG-ID: rtshjivsPK2tCMnoRD7_aw_1748448995
Received: by mail-qv1-f72.google.com with SMTP id 6a1803df08f44-6fa9d9b3e28so601526d6.3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:16:35 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748448995; x=1749053795;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=2k2PY9MAHKt+UL2NC1MP+obMfgPvXhyJk5Kn5YL16Pc=;
b=L2YhsRh4davdukgFsmL3fKG+ngl8NC65JqmXTKwq+5llu/U+yG9ozrnWPGPNmQ4PAf
738g2QXGs7gPeL9yTr74SrySqxQx1t6or+v/CllOC361WmEuSnBTtcayzht4bKnNDC92
pvO21BA2LFdA4YJIIc5XAI4aNOQuW9nDvbc5JR1OJji/b74B2OJSamyIobbJvy4/YCnK
xAOu29JcyNvk0gzuLOLxeYXGRJ70aM+UC0e1gULKxGlh7zdr6ZrAPbMYHDxmkA8lzKO9
i96+7+NnrWR2fe763rJfR52KX9f6cteFxdpPwpbg0EyOLe/cZBAAFQPowXPKx50oB+pp
+UtQ==
X-Forwarded-Encrypted: i=1; AJvYcCXG+RsspP3NZ4/94TUbxZMSobD9hBB67maSCqoCUcgC3883i2oOThnphtZ3d90WZRoIlncR2FCjmgIPBxM=@vger.kernel.org
X-Gm-Message-State: AOJu0Yz7wghKo+Qk/51SIRafSORo0KTLFOWCe4B5pDJolcLsRRc6JyGm
XkJSvyceXhM3GhvK9qgAZrYpvOJqW1VTeHTIvxi5rj9DRIWZlS+ouocNi6shp1Q10nR8YZNH//0
GAMHIBrfUR9isVI0vj0Af8mmVA3fTa2rKz24EaVqcfG0y/KQGpbFGgBDOaxW961wNaA==
X-Gm-Gg: ASbGncsaSIG2TzFRaBmMh4EdzXGqYU9HUWVBFK7vhHRf2BbNaNikewv/OZIuSHgYV70
HhO7x9WpW5/OjzBfFwnF7zBwsYugBeNmKraqHS17SAViuPdfuiUyR2jOYUUjMskCmN238GxlYFc
i9M7qroy2JBkwjTeUiXaMnURZMnzCdqNzJEJdar6KU9OMlE3cduOJMbwwYhS3Aw6EZBM46hxneS
PdoViYIzgxhfYC3GU8uSzRFGp7EzO7FOgxrmeycpAqGAQ0j7o50eKI5VIcNEtdeOe17pOS1Anq9
VhA=
X-Received: by 2002:a05:6214:224a:b0:6fa:bb44:fde5 with SMTP id 6a1803df08f44-6fabb4512fcmr72527206d6.17.1748448995304;
Wed, 28 May 2025 09:16:35 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IENfqhaMY+uKyU1t2Uqx80D80R06TLTQ2+Ckhg9TBWJtJ9d2fj3zGpcfKCZJVlZCQeNfczAMw==
X-Received: by 2002:a05:6214:224a:b0:6fa:bb44:fde5 with SMTP id 6a1803df08f44-6fabb4512fcmr72526776d6.17.1748448994766;
Wed, 28 May 2025 09:16:34 -0700 (PDT)
Received: from x1.local ([85.131.185.92])
by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6fac0bca20asm7994226d6.110.2025.05.28.09.16.33
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 09:16:34 -0700 (PDT)
Date: Wed, 28 May 2025 12:16:31 -0400
From: Peter Xu <peterx@xxxxxxxxxx>
To: Oscar Salvador <osalvador@xxxxxxx>
Cc: David Hildenbrand <david@xxxxxxxxxx>, Gavin Guo <gavinguo@xxxxxxxxxx>,
linux-mm@xxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
muchun.song@xxxxxxxxx, akpm@xxxxxxxxxxxxxxxxxxxx,
mike.kravetz@xxxxxxxxxx, kernel-dev@xxxxxxxxxx,
stable@xxxxxxxxxxxxxxx, Hugh Dickins <hughd@xxxxxxxxxx>,
Florent Revest <revest@xxxxxxxxxx>, Gavin Shan <gshan@xxxxxxxxxx>
Subject: Re: [PATCH v3] mm/hugetlb: fix a deadlock with pagecache_folio and
hugetlb_fault_mutex_table
Message-ID: <aDc23-d2fsQbdIKe@x1.local>
References: <20250528023326.3499204-1-gavinguo@xxxxxxxxxx>
<aDbXEnqnpDnAx4Mw@localhost.localdomain>
<aDcl2YM5wX-MwzbM@x1.local>
<629bb87e-c493-4069-866c-20e02c14ddcc@xxxxxxxxxx>
<aDcvplLNH0nGsLD1@localhost.localdomain>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
In-Reply-To: <aDcvplLNH0nGsLD1@localhost.localdomain>
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 05:45:42PM +0200, Oscar Salvador wrote:
> I thought the main reason was because PageLock protects us against writes,
> so when copying (in case of copying the underlying file), we want the
> file to be stable throughout the copy?
The folio can already been mapped writable in other VM_SHARED vmas.. which
means the userspace is free to write whatever while kernel copying, right?
IIUC there's no way to make sure the folio content is stable as long as it
can be mapped, CoW should just happen and the result of the copied page is
unpredictable if there're concurrent writes.
IMHO it's the userspace's job if it wants to make sure the folio (when
triggering CoW) copies a stable piece of content.
That's also why I was thinking maybe we don't need the folio lock at all.
We still will need a refcount though for the pagecache to make sure it
wont' get freed concurrently.
Thanks,
--
Peter Xu
Return-Path: <linux-kernel+bounces-665788-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id E666D41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:17:09 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 8B1B81887DD4
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:17:06 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 7581C28C5A6;
Wed, 28 May 2025 16:16:35 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="lQ1JVe07"
Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11011050.outbound.protection.outlook.com [40.107.130.50])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 863CB28C033;
Wed, 28 May 2025 16:16:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.130.50
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748448994; cv=fail; b=cFFI2hTwNJOINiNbV9a+T0x8A1xffNCcZl2MiMvDYdMmxrMRnlrjNnlehPJynSO0BEDQyXnrE1q9RIK75bl8vSzhslDibGEQQl3iBXP35p6QAkf63hWKVUNp8jP4nJB7gDpWP9gluab1vR/cPdQDKIKFA/6JO5Sq9dbbUkgHuWk=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748448994; c=relaxed/simple;
bh=U6Xh4eYrFMgWH2XEO9S1R4te/aG2uE6ODg1/J7rXWjA=;
h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type:
Content-Disposition:In-Reply-To:MIME-Version; b=bStb2ySmA1EMs+YkNAF+JEq13Ym41qISZAGdJbqsUpQhzg36tE4x3hRBajFqwRniThZoycUnrXMESQOKCW/Gr1Tn6SbZoDl82DLL02NJj4rvIUbfsiANeMLu0BkKrtum1ik87IjaNdUTvsyX+zIzlkrLeXcj7DpxkpRLVw1TPJg=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=lQ1JVe07; arc=fail smtp.client-ip=40.107.130.50
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=JA/4oAPZ65W3t9QUFuapqJJ7nOB9kqmq4dL5TAHgcdhWL6+P4nj/XQTbYPTnkJyG0PwJTHM4XaWV3IRB8v6JDezOabBtEXSrACv1dVrSBIcmXFeHACq/q/h61OV0RuQJvmXpQAy3+hqKZbsLLzyaAyTvHmyz9TvVdUeQ3RooCS/43or9hU6eUb/8lCMRUWnfpKtCfrhoPFeuLFio2SO79yWa1w7woM5vVv7akBcSND2ZYOiNWCKMyMwoMGJWoOdpKzpQNJwWd/7M4g1dOe5El8cxlRt+Sq233bCBK9O1XbTwQK9vTx16bS4FZaU4CkPq9kfnIebUk5fVb463iLY3gA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=EBA9YbNo0T4FeiIK+rqoC5jdvYeMw34OT2cuNUg9+Z0=;
b=QQ1f/xMHhR4o6cesMQWQpTe1v/Pe9yWwFmJPHdSMrO6ziqS/+4d7GYCG4avsTHC5ldCE8pKx/3fQNZCgT3L3Cx54QW+1S8pJP1DrgiKLINKxO9nvj4CNeUaZBUJGJQPQDeWWPjnR4+9qBmsjQlyv4H27yDpGRtcMdlRL5bxAvOyHK7ib5wba1lgHsNEcHYR3Z6WR8+2tuHIf+QM0D/A32Kzz2rBLBFAh8iryEEMQljNaotxHmvRsL6+zMEVQGgVynCN5QQifUkuXN0YM4GzDKXf/LpYwWeEPBY1GzWoMKefD+qNVLbsaVdDnSWvmYTdxYFvNefo7FoFld/PbPq8FSg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=EBA9YbNo0T4FeiIK+rqoC5jdvYeMw34OT2cuNUg9+Z0=;
b=lQ1JVe07SfwaSDg6u+WTDx0t3vPdY7vVq9sM7rXSULDDTUO/oF4d738YYuL8iBJDQODed8PkhqdinDbgyw8TCH56XDfU6fh1l3J0AZrxm0ejGRw15mIZxRSK6PDGGEy60Q1rR7suO+K/9rZp2ahlxZIWf8FC5ECQRDS/u/xao1MgMjlI/mUaOVNjowJdqcmcJha+BVSj+4NIPEC9jtBwO8jb4HgggQzTV3Lmp+kLlRSXGnDI9yvFAfZM4EczFtjWD6EZThfOSjQemxMfW29ZxrkCPttbFRhJsr2VatjS7kp8Vr+h38+d1SaIZprou4hDKuBxpluIj9jQ8gLux6UPHQ==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by AM8PR04MB7347.eurprd04.prod.outlook.com (2603:10a6:20b:1d0::13) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.27; Wed, 28 May
2025 16:16:29 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
16:16:29 +0000
Date: Wed, 28 May 2025 12:16:22 -0400
From: Frank Li <Frank.li@xxxxxxx>
To: Meng Li <Meng.Li@xxxxxxxxxxxxx>
Cc: shawnguo@xxxxxxxxxx, robh@xxxxxxxxxx, conor+dt@xxxxxxxxxx,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH] arch: arm64: dts: add big-endian property back into
watchdog node
Message-ID: <aDc21jn9RfhOV2vS@lizhi-Precision-Tower-5810>
References: <20250528111751.3505224-1-Meng.Li@xxxxxxxxxxxxx>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528111751.3505224-1-Meng.Li@xxxxxxxxxxxxx>
X-ClientProxiedBy: PH8PR15CA0016.namprd15.prod.outlook.com
(2603:10b6:510:2d2::26) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|AM8PR04MB7347:EE_
X-MS-Office365-Filtering-Correlation-Id: c8bf8b8a-c529-4aee-00de-08dd9e0300b7
X-LD-Processed: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635,ExtAddr
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|366016|52116014|376014|1800799024|38350700014|7053199007;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?GRI1HM2m2mECCjNP3ayBq+EciSk/RIo3hRRhoqdmvf1H28VAq8xFfwTFE8xU?=
=?us-ascii?Q?IAQUCWiVvEv0bKDLwnl649Hbo1e4ub4LQDyRD++DBUZCmXSiYmFxHphjA0mb?=
=?us-ascii?Q?D8XPpinhq67cHOy8XGLcws26mvhg7Ts/8SDSJQepY7vfiHrE5G4IRYfslnkL?=
=?us-ascii?Q?THvEDa0LvlQrwsJVsXNpiG39oaCodEq0EODzzktJsYTCPcm+nba5zfsA23VV?=
=?us-ascii?Q?PN5tYGKt2t2HukxZWD+w5qMkGU9AYLey74OGdKgZ9TUFliCG/iGdTf2pJdcE?=
=?us-ascii?Q?r7YpWQ/NJEbOoLk8wdjlENciBixAX2ChCA5Hvyy1SG3ndynnhLoZJrXZw3xW?=
=?us-ascii?Q?bpyccwaPo8aHtzj7Pm5xJP0sQMhI87XRV4uW/kKbCfQKOi+uZ1fqV+u/oCpW?=
=?us-ascii?Q?tZ5RiAwg1k+w6iBr+cmzV2LY4fO/d5q0tUTvqZJfEFoD2xnKLNJfc2Rt4e9V?=
=?us-ascii?Q?mZzvb7MlqjRPlbuOIJEix75ef960dsDCtcBaTxeEIlOM/ndoUwMFjPwJku12?=
=?us-ascii?Q?7OcuG3boLinAgfsugDU9vwLoJ/qNFlQv6/CD7rKXiloSzuGDX41+TlZfKT/1?=
=?us-ascii?Q?GXmBy9710uyiw4cLOTNWlLH2nAcGXxnECeI0kovM2jDdlKgfe2t2RLDfZReP?=
=?us-ascii?Q?IkvosjsuGkzckDPnDLeUluUerTxVHXYW5QoKwfxjVHnjF7iOsvhMzzDiTSDX?=
=?us-ascii?Q?3DAQvbXXrTNIhIcq7FnpImWLG6TLVpt2sanp1zPAJE41ZKjmVAlA+XyJkIn2?=
=?us-ascii?Q?Yq72+a+++F7BYx4BT9X1fzb/5FtTNSXU1lIB1AekJMDxgou35SgpdfwdBSas?=
=?us-ascii?Q?1NAIYyeJ3WRkI6KLT0ZhkwBynKRfgfAt90TxqhX3RXUFR35X2BeCbtVpM9Ys?=
=?us-ascii?Q?276C4gM6ahLYtu9io8ezo0V8pxRoPoIZJA0YnuY18WcWO3QQc20ZmDeA44hj?=
=?us-ascii?Q?hhMws2lLKCPBlUDYi+eSfZF6ygMhKNOHzLadubMj00K5jrtSnXOGYwAQuqTp?=
=?us-ascii?Q?37ahio5SxA1A1zuAW7m6BpionGxPh5G7L36YQoAt0/0ZUVKdl5I47xeaLSao?=
=?us-ascii?Q?Bacv74cp7geeedzwDR1If+1Dmt7R/vxhTB+B5LRZP2caUoVmMIF4lE279F9K?=
=?us-ascii?Q?btSrq8KClWTe4sVoj35VLxeBpx44OM+oK50WneqJe1QBB4id0qb0R6/+Gc7+?=
=?us-ascii?Q?SyLIXhc8/X6oWGDxVTs76VDNKNGvHy/edD2JNafRA/ODKKN77P0sAUCrEDqN?=
=?us-ascii?Q?9tOhvDoJlk143bRwkGNPKIzhlILacffiPfm69eas2DvuYjaldQBn2CjKUizf?=
=?us-ascii?Q?SCNE0t9u8yYV51mH99PYaaytLFY0l0bFZHKeJn5/pX8wtZ9UgONlqw9prYk0?=
=?us-ascii?Q?4Mj6j9+SGbeg0aFP0DBCeBRxyqLz152OQjeG9lq7onB48i8vDS/CxuH8QMCi?=
=?us-ascii?Q?yKHWsaq7nshrMKyTYWrcAe4V2gdUG3pgJE+9v5OIGxpmju/x1iztXg=3D=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(376014)(1800799024)(38350700014)(7053199007);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?rX/QzUEv23QJSs95U2y/q8uwJql4IFu9yzx/3KLu22/izxo03lyerpA4FSvM?=
=?us-ascii?Q?U+ZX3GHlr1e+URb2C5VbU72DWEZ3KfLwAojRQbiRKx7q5OoDWoa+dtOVbloN?=
=?us-ascii?Q?O58El3lWa3iQx09vqBuy/csmppdtUGajZTgRYp0jFhjbim1hPuVYB20ekNPY?=
=?us-ascii?Q?z0lp4KyQeue1sWQKo8GTJIL0N4UnEO/mLvgivG1Q5+DTrYMn4LpgQi8bmZqt?=
=?us-ascii?Q?n5wWbSiXiDy7ww/epXGl9SPYsNSQT8ZKUudB3ouiYLbWpc6RU47bwQS9YgVd?=
=?us-ascii?Q?c/GrPymRM8jbsUbnz9iJpBz489Kcee7zhOe/+XPxsDugGU6oabO6Tc9zhiIH?=
=?us-ascii?Q?BEcLQh5qY/92AeN8sAw3y6xrifeCbhjCQwWUKYB64BZL2uj1gInL/d+lAhOX?=
=?us-ascii?Q?Jf0GMf2UY6p0VzNflReKq15AbV2JoFe9aYtgJnB0Wcnz0/ficZGSkhJG4HkJ?=
=?us-ascii?Q?RdhvfFV7lZRk1KIo+LP0fQzleg52uxF9wkKIjtdL6VWYBUBorKV0ngPSOTY9?=
=?us-ascii?Q?HKjUdZBTHe2UBhRh5KhU7WxjqUHDaAbjAARO0WYUpEJfRN2jcaOfgUUauh/J?=
=?us-ascii?Q?JBe4N/oUPKFpQsMACr36JqNFu/tj3YqbGKtg1fIEBkcXfEncS5liV6qetH0K?=
=?us-ascii?Q?QT+FOn7u1H2gWmqpvH7C2AMNYozOMfY32hSoJ/TaQzAuvmzNnpCODDKrIPRQ?=
=?us-ascii?Q?VISOg2RW0JfropdkQrmg4FFKoyhteSH4sQisDBCGVRpECuPSUOljJMh+7xZS?=
=?us-ascii?Q?eHpYtZ0UnrHCmbKI+7ahA9vtN7Xs3fsN9aHYpdS4wxEP4t5/6XV5d17wS6Pv?=
=?us-ascii?Q?RpBaDfGkRqDQtvDuBlG+VliGorpxniidq/QYLtSFjdnkJqGgxuLHoNr0kLyB?=
=?us-ascii?Q?T9zRNhNE7bE8tpEaCoL8jUQVJLKpeZ/kCQF8tzqqRLzKPeFoHcZgnUnJChSp?=
=?us-ascii?Q?/OuwVFTyMcPaXOxRS26JD8HtDBjFCPWFyqqTMfxlEhP2WHah1zOooBJ8iOyL?=
=?us-ascii?Q?DVfrXpNebfNRbjBNhmSTkar+HNKKRpluhOaA0dFE/3I5gKhLbqmAR9+1VwCd?=
=?us-ascii?Q?V0oYsrNUmwT5KjOfnh4We2QXqle1y1bDyiw2n/ibzpWYw3rC1nLQAj8xLq7h?=
=?us-ascii?Q?OyuYVXA+OhIk0LLTyHFpgNlYW80QLP05rgXWP4F6f7B9LGWVF14aOKLL/ao/?=
=?us-ascii?Q?cjL0NpcJvIP44RLl889xTbE2dbcmA0yB2f1bGWuW4eHut/uqj33UYV/yKs2p?=
=?us-ascii?Q?w8JEr9kXHO12M4zSO0ZSUYMZWJlHGOOvIIvbAjMj+2Lkd7WmkAXjtnZm0jyP?=
=?us-ascii?Q?n7aLd0R4MnQ4HouPU2C5dCdRm7XPyWF5tegiweKS54juNv5AsMUHtIqqE3Wn?=
=?us-ascii?Q?XDiCzTNAOi/L/nJqA1DN+xzxF9XZPSry0JvocP7NoYo5mEnAmmyy97qeg6Wo?=
=?us-ascii?Q?siQA86vy1Yo15ipwtclY2FPA1VZ/wmwr3vBR+ymR8tsyORafbd4if4be9nLi?=
=?us-ascii?Q?upMhXThJ8xIUAdaBdnNUjPbgi759ZLmkdEJAZY064R6ph4yuu3z6g46d01o6?=
=?us-ascii?Q?2wKZPwDmO8d/5OBpQ/k=3D?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: c8bf8b8a-c529-4aee-00de-08dd9e0300b7
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 16:16:29.2673
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 6VOt0Jhg+wxLWs09Oc+QhPr2HuyG/VklgfyHjOgYGD5WuRFL9fMeaYItWdKw7IRuK5TS+E8n1Bw/wzm+t6EmLg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR04MB7347
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 07:17:51PM +0800, Meng Li wrote:
> When verifying watchdog feature on NXP ls1046ardb board,
> it doesn't work. Because the big-endian is deleted by accident,
> add it back.
>
> Fixes: 7c8ffc5555cb ("arm64: dts: layerscape: remove big-endian for mmc nodes")
Sorry, forget previous comments. You are right. It is accident remove big-endian
at watchdog@2ad0000.
7c8ffc5555cb should only remove big-endina for mmc nodes.
Reviewed-by: Frank Li <Frank.Li@xxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Meng Li <Meng.Li@xxxxxxxxxxxxx>
> ---
> arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi
> index 4d75bff0d548..e15ec2e1cb04 100644
> --- a/arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi
> +++ b/arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi
> @@ -753,6 +753,7 @@ wdog0: watchdog@2ad0000 {
> interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
> clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL
> QORIQ_CLK_PLL_DIV(2)>;
> + big-endian;
> };
>
> edma0: dma-controller@2c00000 {
> --
> 2.34.1
>
Return-Path: <linux-kernel+bounces-665791-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id AA40D41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:18:34 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 3A9B87B2BA8
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:17:16 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 2150328D8C8;
Wed, 28 May 2025 16:17:23 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="HQG8jL2K"
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id CB3DB28CF68
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:17:20 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449042; cv=none; b=HnUXakNOaQEVOiwVQ+Exa0v2RKlvQfDMnAot06L/RmAMRhj3G3PJkpH2qFBdPDq+uA1uDZrKfTqL+jko2ePYZicqCz2XVkmKmoZQD79H/CuWYC+nkNz307mJ+BXuvkE65UDwUPCahpyeN+9VqmpUWpQl0fW3DC792GIz9Sg4cOo=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449042; c=relaxed/simple;
bh=8y2x+LUkxHKZ9G/Vq2dyw6iBXf3X7n+haN5ROVzStoo=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=qWA+lm05+oGf4cHciIVgAHn7lK1riWlxFeCmPIMlrh0mgq6bci8nJpRdpytMRM6MJgiNTtTd0pyTiuet8OHfPEVlAxL9bL8szmfcZHq5XNRwbdwpu331r6GlVhkkWeMgUns00y3y4fWkCLT4cuP1MxHJMtZcfHtnCCWmT4YYTNQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=HQG8jL2K; arc=none smtp.client-ip=205.220.168.131
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com
Received: from pps.filterd (m0279863.ppops.net [127.0.0.1])
by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SFnaeq028874
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:17:20 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=
cc:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to; s=qcppdkim1; bh=VxpVLFBQGSAU+ebxYoQdGVlC
qZnUme8PP63pkL+w6mw=; b=HQG8jL2KEaz3iRI7+/X70BOGq0pySi6cBM+txh6p
wwfS2VZ87Whfg9qHLepHGDouRDd+QwZHiq2TCtS3T5HrXpxyPZ4/QUEwG1Qq0fTy
qcwoRgB2BVUHGd1rP6AjofhexVwRmoH7LbceKGqCzOdnpXm4PGvlkanS/+sB/21l
axt1rK1+T7z6M6WJy+zTGfImJxTbM9Zpgoh/siYhtXDu0qbQdbOslqAp7G76ml6j
rDYYX8YwkfBsRCS90CxTlvEEhsz+yeiw4L+z0UiAOa12GFDZdpmpBLl2LvL3snPu
yQUgCx/hRIHs2NMtJdRMO9qC3SM5ZBbcgDo7iq6hVtIgHg==
Received: from mail-ot1-f72.google.com (mail-ot1-f72.google.com [209.85.210.72])
by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46whuf37k2-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT)
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:17:19 +0000 (GMT)
Received: by mail-ot1-f72.google.com with SMTP id 46e09a7af769-72ecb7f4b42so2988a34.0
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:17:19 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748449039; x=1749053839;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=VxpVLFBQGSAU+ebxYoQdGVlCqZnUme8PP63pkL+w6mw=;
b=C60I/q7LlWEEGNmLU/T0zNp/e2va175uaCvOiajpdVFZBvnIXtj8GrLm9FcnwdvW2H
4XCxxVpCUtW3KY3nQ9F/XY9z+o+B2X89emkd6BgZ1vG9D8Ff1xlFjBp+kmBdBSK1a0Z6
nzmQaRvOJ/qYkzXfkxlEfq6rW6FPPSec4mGlCB51hVp0vuBig7GWwqY/BIEqckZgarD0
IC4j+sdB5drDztBw9udIFbKUMIlAXwrAuoZjMzUBIPJFH8GRFtkSlum2ZMjYcYPdIpLN
PKbxV6XT7aKrjiiWbCrxVm7D2A1G22Vu1oDtm//+4RjcWDbsIijwyoSGfeOX505UbA9r
kqVg==
X-Forwarded-Encrypted: i=1; AJvYcCVqDlvNAx9I6ewnZ+4jtk1ZdVn5OhmPG3h/ZvKzQ/Od3q3yMILnYfATxXctbRgmnxYMemXSz+o+5As1OOQ=@vger.kernel.org
X-Gm-Message-State: AOJu0YzOJgMkmQhfSEDkGgvRlgTddYHKbeGroaJnL2KIyBVhyIYWZFdr
eVsJzXj2m9S4w52NdqTjKyExTtiQE9DDinTwscm1UhlyU/0FIaGJ4hM/qF20xd2eveOs6dVUaCY
ZZlzd5F0MpU6c5REpB3paruKIGi4Ku2wq06tiF3vE6MvOf/oYNNXxTZ4wGAa9TInEQcw=
X-Gm-Gg: ASbGncvpkYLYsxSG/0z40b+4qMlUJSfp81hLaq8dJxMV3Fb6jvgHdQLJMii2D9z/ms3
TuHdHpr7gfR40ouPJ2xjHcZ+8rT7HQXsWwN1j+wonc7dwk9+W0YyqXqOer3kHGW5qZKpom5GLhC
JRJVcXp5qAVfiX7L47q2yj3oxy0bEImhoiaMAC74N22d6UOJLoc1kDCokN0VBRwiE9iBKGoXIlj
YOTfoprHr+ySmCvJvT+cUBd2WxieIPF2Jqyir2NCE1FUI9m3QqGri3xmqysn8iamiNwQBjGlnJ9
39j7CJ2JSskXRA7yOn2mAwomP3XebWgYnTM4T5Qr/SVkeNObJ6iW6gVgO91JsH/Ua5GxfdN+A9w
=
X-Received: by 2002:a05:6830:7010:b0:72b:8326:f0c7 with SMTP id 46e09a7af769-7355d1ca50emr11492058a34.28.1748449038817;
Wed, 28 May 2025 09:17:18 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IHymD5QPdG3sq4BRZVWcnUYrodeFvRGV9A9NykcrdI34F0kJ6xyyBvUoKiYlRqJdH2mRLZZDA==
X-Received: by 2002:a05:6830:7010:b0:72b:8326:f0c7 with SMTP id 46e09a7af769-7355d1ca50emr11492023a34.28.1748449038359;
Wed, 28 May 2025 09:17:18 -0700 (PDT)
Received: from eriador.lumag.spb.ru (2001-14ba-a0c3-3a00--7a1.rev.dnainternet.fi. [2001:14ba:a0c3:3a00::7a1])
by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5532f6b39dcsm340216e87.215.2025.05.28.09.17.17
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 09:17:17 -0700 (PDT)
Date: Wed, 28 May 2025 19:17:15 +0300
From: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
To: Yongxing Mou <quic_yongmou@xxxxxxxxxxx>
Cc: Abhinav Kumar <quic_abhinavk@xxxxxxxxxxx>, Rob Clark <robdclark@xxxxxxxxx>,
Sean Paul <sean@xxxxxxxxxx>,
Marijn Suijten <marijn.suijten@xxxxxxxxxxxxxx>,
David Airlie <airlied@xxxxxxxxx>, Simona Vetter <simona@xxxxxxxx>,
Stephen Boyd <swboyd@xxxxxxxxxxxx>,
Chandan Uddaraju <chandanu@xxxxxxxxxxxxxx>,
Guenter Roeck <groeck@xxxxxxxxxxxx>,
Kuogee Hsieh <quic_khsieh@xxxxxxxxxxx>,
Bjorn Andersson <andersson@xxxxxxxxxx>,
Konrad Dybcio <konradybcio@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Vara Reddy <quic_varar@xxxxxxxxxxx>,
Rob Clark <robdclark@xxxxxxxxxxxx>,
Tanmay Shah <tanmay@xxxxxxxxxxxxxx>, linux-arm-msm@xxxxxxxxxxxxxxx,
dri-devel@xxxxxxxxxxxxxxxxxxxxx, freedreno@xxxxxxxxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
Jessica Zhang <quic_jesszhan@xxxxxxxxxxx>,
Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
Subject: Re: [PATCH 17/45] drm/msm/dp: use stream_id to change offsets in
dp_catalog
Message-ID: <ujrlphqfh6j6n2qz7wslapidmwacnj32cgdhwahmqpjpylmmk4@daraslg4fdk3>
References: <20241205-dp_mst-v1-0-f8618d42a99a@xxxxxxxxxxx>
<20241205-dp_mst-v1-17-f8618d42a99a@xxxxxxxxxxx>
<45awcx2az5m5v4etpuaycqx2dolzjkrcjg6ehmooivwuqb6ac3@euo7rsoccqup>
<187d55f0-f4ec-4d5e-a449-708ebed1ab45@xxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <187d55f0-f4ec-4d5e-a449-708ebed1ab45@xxxxxxxxxxx>
X-Authority-Analysis: v=2.4 cv=OslPyz/t c=1 sm=1 tr=0 ts=6837370f cx=c_pps
a=+3WqYijBVYhDct2f5Fivkw==:117 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10
a=dt9VzEwgFbYA:10 a=COk6AnOGAAAA:8 a=aWFAwB44HXOIBnsjnyQA:9 a=CjuIK1q_8ugA:10
a=eYe2g0i6gJ5uXG_o6N4q:22 a=TjNXssC_j7lpFel5tvFf:22
X-Proofpoint-ORIG-GUID: -wM7JMRqsIYBis-XIVeGLDNHdk-HWQcZ
X-Proofpoint-GUID: -wM7JMRqsIYBis-XIVeGLDNHdk-HWQcZ
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDE0MSBTYWx0ZWRfX/e/F4LLQr53d
cJHdawOXEajSVtiHxTHEuMVM3s0Fq8AvXcgbjKfDP7OBXpypE48zw/nl03I3zmGhzBRUMvWKB04
T58FNXcsAO/NvCo9zwddRZ0Wjl4tcww/IhnSXILeccxIC29yqg+ZDXcH52wgws6WdMk37R2Jwl7
IhTyo1W1urnOg1Ub6Ex4jgqHcx7sHVbVmooHZiXXF2Um4vPXogyl9TDMwz3SP9F5rFNoTgrdCaC
KRu3QdooeZTtN523+oHM2kZc42oKaK23W3v/S9GB75UwGay9i6W3OFmaWnZzJquxrmfUxQVQNr0
Joxz9dLYdKKHCsySJqrsrTJN19PzgAoamJEU0RgRxMqbp2ruIJtWsKaQrqeRh1RmH4kQGYgZSWb
Z6tXxixsH2fRXSGTxNzk2jUJqCMOc5F7/7ZiMP19DU8i1FpOorPuiHq5DlHvSLVlTTVVVZJE
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_08,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
impostorscore=0 phishscore=0 mlxlogscore=999 adultscore=0 malwarescore=0
bulkscore=0 priorityscore=1501 clxscore=1015 mlxscore=0 lowpriorityscore=0
spamscore=0 suspectscore=0 classifier=spam authscore=0 authtc=n/a authcc=
route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
definitions=main-2505280141
X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Mon, May 26, 2025 at 08:57:35PM +0800, Yongxing Mou wrote:
>
>
> On 2024/12/8 13:42, Dmitry Baryshkov wrote:
> > On Thu, Dec 05, 2024 at 08:31:48PM -0800, Abhinav Kumar wrote:
> > > Use the dp_panel's stream_id to adjust the offsets for stream 1
> > > which will be used for MST in the dp_catalog. Also add additional
> > > register defines for stream 1.
> > >
> > > Signed-off-by: Abhinav Kumar <quic_abhinavk@xxxxxxxxxxx>
> > > ---
> > > drivers/gpu/drm/msm/dp/dp_catalog.c | 99 ++++++++++++++++++++++++++++---------
> > > drivers/gpu/drm/msm/dp/dp_catalog.h | 9 ++--
> > > drivers/gpu/drm/msm/dp/dp_ctrl.c | 3 ++
> > > drivers/gpu/drm/msm/dp/dp_panel.c | 2 +
> > > drivers/gpu/drm/msm/dp/dp_reg.h | 13 ++++-
> > > 5 files changed, 99 insertions(+), 27 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/msm/dp/dp_panel.c b/drivers/gpu/drm/msm/dp/dp_panel.c
> > > index 172de804dec445cb08ad8e3f058407f483cd6684..662bf02b8b1a5165f927835bef3c11ac091ddce6 100644
> > > --- a/drivers/gpu/drm/msm/dp/dp_panel.c
> > > +++ b/drivers/gpu/drm/msm/dp/dp_panel.c
> > > @@ -309,7 +309,9 @@ static int msm_dp_panel_setup_vsc_sdp_yuv_420(struct msm_dp_panel *msm_dp_panel)
> > > panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
> > > catalog = panel->catalog;
> > > +
> > > msm_dp_mode = &msm_dp_panel->msm_dp_mode;
> > > + catalog->stream_id = msm_dp_panel->stream_id;
> >
> > Why is it a proper place to set catalog->stream_id? It doesn't looks
> > like it to me.
> Ok, maybe msm_dp_display_set_stream_id is more proper place. Or can we drop
> stream_id in catalog totally, and f the stream_id is needed in the catalog
> function, pass it as a parameter to the catalog function. just like that:
> int msm_dp_ctrl_***(struct msm_dp_ctrl *ctrl, enum msm_dp_stream_id
> stream_id,***);
LGTM.
--
With best wishes
Dmitry
Return-Path: <linux-kernel+bounces-665793-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1624A41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:19:02 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 86CDC3B004E
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:18:38 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 7DB2828DF1C;
Wed, 28 May 2025 16:17:30 +0000 (UTC)
Received: from foss.arm.com (foss.arm.com [217.140.110.172])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 851E928D8DB;
Wed, 28 May 2025 16:17:28 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449050; cv=none; b=oVfZGBA8oNxIeN0Uay20T5SvhkVniFdt7qH24MJx2SBuTB5sCVGK6omkaOi08VvCB1x29dm8ud8NpbyTn1LOvcMaRk3Jnneu+SIwcdlAgSysaojCa7AQl/OQ9WW972r8XqcwGMDWOtgMWYLxEytLD5jUXr/Ny+YsINxijVMjeME=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449050; c=relaxed/simple;
bh=UhXhHXqGnsFxg+kHq1kEOUu4fzlnoiBRxONX9YRLNjs=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=PP2/WPIDvGmrDHa/Tymmd0KC8uyS4uMYfDueEApYwBXvc+ugIpBK/Nw0VDD5SbIhofoJa/UrC4zcxgI+WW8UFBUXj/PpIDKWVB3cWDBQvp0Uuh5uc0VdzzMa2fIrADeNzNts9mObmU19Ly2cT2Bp41V2qoGPl+fp7TVIO2JtCCI=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 2732D1A2D;
Wed, 28 May 2025 09:17:11 -0700 (PDT)
Received: from localhost (e132581.arm.com [10.1.196.87])
by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 3C3353F673;
Wed, 28 May 2025 09:17:27 -0700 (PDT)
Date: Wed, 28 May 2025 17:17:22 +0100
From: Leo Yan <leo.yan@xxxxxxx>
To: kan.liang@xxxxxxxxxxxxxxx
Cc: peterz@xxxxxxxxxxxxx, mingo@xxxxxxxxxx, namhyung@xxxxxxxxxx,
irogers@xxxxxxxxxx, mark.rutland@xxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-perf-users@xxxxxxxxxxxxxxx,
eranian@xxxxxxxxxx, ctshao@xxxxxxxxxx, tmricht@xxxxxxxxxxxxx,
Aishwarya TCV <aishwarya.tcv@xxxxxxx>
Subject: Re: [PATCH] perf: Fix the throttle error of some clock events
Message-ID: <20250528161722.GL2566836@xxxxxxxxxxxxxxx>
References: <20250528144823.2996185-1-kan.liang@xxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528144823.2996185-1-kan.liang@xxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 07:48:23AM -0700, kan.liang@xxxxxxxxxxxxxxx wrote:
> From: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>
>
> The Arm CI reports RCU stall, which can be reproduced by the below perf
> command.
> perf record -a -e cpu-clock -- sleep 2
>
> The cpu-clock and task_clock are two special SW events, which rely on
> the hrtimer. Instead of invoking the stop(), the HRTIMER_NORESTART is
> returned to stop the timer. Because the hrtimer interrupt handler cannot
> cancel itself, which causes infinite loop.
>
> There may be two ways to fix it.
> - Add a check of MAX_INTERRUPTS in the event_stop. Return immediately if
> the stop is invoked by the throttle.
> - Introduce a PMU flag to track the case. Avoid the event_stop in
> perf_event_throttle() if the flag is detected.
>
> The latter looks more generic. It may be used if there are more other
> cases that want to avoid the stop later. The latter is implemented.
>
> Reported-by: Leo Yan <leo.yan@xxxxxxx>
> Reported-by: Aishwarya TCV <aishwarya.tcv@xxxxxxx>
Thanks for adding me and my colleague's name!
> Closes: https://lore.kernel.org/lkml/20250527161656.GJ2566836@xxxxxxxxxxxxxxx/
> Signed-off-by: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>
> ---
> include/linux/perf_event.h | 1 +
> kernel/events/core.c | 23 ++++++++++++++++++++---
> 2 files changed, 21 insertions(+), 3 deletions(-)
>
> diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
> index 947ad12dfdbe..66f02f46595c 100644
> --- a/include/linux/perf_event.h
> +++ b/include/linux/perf_event.h
> @@ -303,6 +303,7 @@ struct perf_event_pmu_context;
> #define PERF_PMU_CAP_AUX_OUTPUT 0x0080
> #define PERF_PMU_CAP_EXTENDED_HW_TYPE 0x0100
> #define PERF_PMU_CAP_AUX_PAUSE 0x0200
> +#define PERF_PMU_CAP_NO_THROTTLE_STOP 0x0400
When applying the patch on the top of tip/sched/core, I found it is
conflict with a new added PERF_PMU_CAP_AUX_PREFER_LARGE. So need to
change the PERF_PMU_CAP_NO_THROTTLE_STOP to 0x0800.
With the change, I tested on Arm64 board with two commands:
perf record -a -e cpu-clock -- sleep 2
perf test "perftool-testsuite_report"
Tested-by: Leo Yan <leo.yan@xxxxxxx>
Thanks for quick fixing.
> /**
> * pmu::scope
> diff --git a/kernel/events/core.c b/kernel/events/core.c
> index 8327ab0ee641..4df274705038 100644
> --- a/kernel/events/core.c
> +++ b/kernel/events/core.c
> @@ -2655,7 +2655,22 @@ static void perf_event_unthrottle(struct perf_event *event, bool start)
>
> static void perf_event_throttle(struct perf_event *event)
> {
> - event->pmu->stop(event, 0);
> + /*
> + * Some PMUs, e.g., cpu-clock and task_clock, may rely on
> + * a special mechanism (hrtimer) to manipulate counters.
> + * The regular stop doesn't work, since the hrtimer interrupt
> + * handler cannot cancel itself.
> + *
> + * The stop should be avoided for such cases. Let the
> + * driver-specific code handle it.
> + *
> + * The counters will eventually be disabled in the driver-specific
> + * code. In unthrottle, they still need to be re-enabled.
> + * There is no handling for PERF_PMU_CAP_NO_THROTTLE_STOP in
> + * the perf_event_unthrottle().
> + */
> + if (!(event->pmu->capabilities & PERF_PMU_CAP_NO_THROTTLE_STOP))
> + event->pmu->stop(event, 0);
> event->hw.interrupts = MAX_INTERRUPTS;
> perf_log_throttle(event, 0);
> }
> @@ -11846,7 +11861,8 @@ static int cpu_clock_event_init(struct perf_event *event)
> static struct pmu perf_cpu_clock = {
> .task_ctx_nr = perf_sw_context,
>
> - .capabilities = PERF_PMU_CAP_NO_NMI,
> + .capabilities = PERF_PMU_CAP_NO_NMI |
> + PERF_PMU_CAP_NO_THROTTLE_STOP,
> .dev = PMU_NULL_DEV,
>
> .event_init = cpu_clock_event_init,
> @@ -11928,7 +11944,8 @@ static int task_clock_event_init(struct perf_event *event)
> static struct pmu perf_task_clock = {
> .task_ctx_nr = perf_sw_context,
>
> - .capabilities = PERF_PMU_CAP_NO_NMI,
> + .capabilities = PERF_PMU_CAP_NO_NMI |
> + PERF_PMU_CAP_NO_THROTTLE_STOP,
> .dev = PMU_NULL_DEV,
>
> .event_init = task_clock_event_init,
> --
> 2.38.1
>
Return-Path: <linux-kernel+bounces-665790-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 3BF1741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:19:03 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id A640B4E5AEC
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:18:19 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 09F4028D85E;
Wed, 28 May 2025 16:17:21 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="V4UGRwzH"
Received: from casper.infradead.org (casper.infradead.org [90.155.50.34])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8A9ED28C86C;
Wed, 28 May 2025 16:17:17 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449040; cv=none; b=U2UZ/q0mNFxfbe08HCEzp1bgCNGUCTMIVSsNOwlndrpJNlgsF/CLLViARZCesEKqc8N/H3gAFOxoek96slh/c/pb9FOifl9CwJ8r28akHiTKmI1uRpxry5eHMLU+D/a2XnGvfSOM3djwhdYDRgK+2mhZp8AwwWJs3L+Vq7Ntizc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449040; c=relaxed/simple;
bh=yopJ+ym4D4c9GzOgtMMZbZiSB/BS+gRQB3VNJDJpKno=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=YDWrPPzI1lDS4pTlaojI1SCE/8sq7sXlTLwBua/5W9mXG/VrDA24Nl+jVF99qp7DRGW1ycJEHkwsiR6+Hgk5+WrOwDfy6PzAxuueEk+hmZpP1+Itwd/7FxvYp46/uPeXlLuRLE6sEkebrSFwqvDd7TPMjT5Zh0VpTOk0R8/D0XA=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=V4UGRwzH; arc=none smtp.client-ip=90.155.50.34
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org
Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Transfer-Encoding:
Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:
Sender:Reply-To:Content-ID:Content-Description;
bh=q860hmjFs3SsTHThmi8S1+4vy1FQNl3Npyj99yAH26Q=; b=V4UGRwzH7m7HaKgEiedURF+qIz
RHmseAiWu0Oh0YUeZOj4Xb6RfATorkFQSfzqwwNgNM/x3LONbWDsRqHZDH8xYz1mLVOj6l0wH3llt
3IOIS7r9bqEMLgXOMAYw1C7+vsGT35vsQ7lcQosxB9cey4VaU6g3TqyT/JE7vpcWuKbnYNxKJJd6m
EnNlJlcnEQpiVBNgIjdAAGuteyue3HXq9437Iy1NyxmTRDPv5ME2MzvOwW1SGR6KxsnGhJrGb9mqZ
usmGv9wsiUmW3gAqyWZ5N9c+NHfM+lYuqbmwF0ObnbtGRHGItMiy4meng6thvsxtdXFgLj1yOrNI9
O62f+jIA==;
Received: from 77-249-17-252.cable.dynamic.v4.ziggo.nl ([77.249.17.252] helo=noisy.programming.kicks-ass.net)
by casper.infradead.org with esmtpsa (Exim 4.98.2 #2 (Red Hat Linux))
id 1uKJSq-0000000Dpsx-32zs;
Wed, 28 May 2025 16:17:12 +0000
Received: by noisy.programming.kicks-ass.net (Postfix, from userid 1000)
id 376633005AF; Wed, 28 May 2025 18:17:12 +0200 (CEST)
Date: Wed, 28 May 2025 18:17:12 +0200
From: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
To: =?iso-8859-1?Q?J=FCrgen_Gro=DF?= <jgross@xxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx, x86@xxxxxxxxxx, xin@xxxxxxxxx,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>,
Ingo Molnar <mingo@xxxxxxxxxx>, Borislav Petkov <bp@xxxxxxxxx>,
Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
"H. Peter Anvin" <hpa@xxxxxxxxx>, stable@xxxxxxxxxxxxxxx,
rppt@xxxxxxxxxx
Subject: Re: [PATCH 3/3] x86/alternative: make kernel ITS thunks read-only
Message-ID: <20250528161712.GG31726@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <20250528123557.12847-1-jgross@xxxxxxxx>
<20250528123557.12847-4-jgross@xxxxxxxx>
<20250528131052.GZ39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<044f0048-95bb-4822-978e-a23528f3891f@xxxxxxxx>
<20250528132231.GB39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<7c8bf4f5-29a0-4147-b31a-5e420b11468e@xxxxxxxx>
<20250528155821.GD39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20250528155821.GD39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 05:58:21PM +0200, Peter Zijlstra wrote:
> On Wed, May 28, 2025 at 03:30:33PM +0200, Jürgen Groß wrote:
>
> > Have a look at its_fini_mod().
>
> Oh, that's what you mean. But this still isn't very nice, you now have
> restore_rox() without make_temp_rw(), which was the intended usage
> pattern.
>
> Bah, I hate how execmem works different for !PSE, Mike, you see a sane
> way to fix this?
>
> Anyway, if we have to do something like this, then I would prefer it
> shaped something like so:
>
Missing file:
diff --git a/arch/x86/include/asm/module.h b/arch/x86/include/asm/module.h
index e988bac0a4a1..3c2de4ce3b10 100644
--- a/arch/x86/include/asm/module.h
+++ b/arch/x86/include/asm/module.h
@@ -5,12 +5,20 @@
#include <asm-generic/module.h>
#include <asm/orc_types.h>
+struct its_array {
+#ifdef CONFIG_MITIGATION_ITS
+ void **pages;
+ int num;
+#endif
+};
+
struct mod_arch_specific {
#ifdef CONFIG_UNWINDER_ORC
unsigned int num_orcs;
int *orc_unwind_ip;
struct orc_entry *orc_unwind;
#endif
+ struct its_array its_pages;
};
#endif /* _ASM_X86_MODULE_H */
> ---
> diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
> index ecfe7b497cad..33d4d139cb50 100644
> --- a/arch/x86/kernel/alternative.c
> +++ b/arch/x86/kernel/alternative.c
> @@ -111,9 +111,8 @@ static bool cfi_paranoid __ro_after_init;
>
> #ifdef CONFIG_MITIGATION_ITS
>
> -#ifdef CONFIG_MODULES
> static struct module *its_mod;
> -#endif
> +static struct its_array its_pages;
> static void *its_page;
> static unsigned int its_offset;
>
> @@ -151,68 +150,78 @@ static void *its_init_thunk(void *thunk, int reg)
> return thunk + offset;
> }
>
> -#ifdef CONFIG_MODULES
> void its_init_mod(struct module *mod)
> {
> if (!cpu_feature_enabled(X86_FEATURE_INDIRECT_THUNK_ITS))
> return;
>
> - mutex_lock(&text_mutex);
> - its_mod = mod;
> - its_page = NULL;
> + if (mod) {
> + mutex_lock(&text_mutex);
> + its_mod = mod;
> + its_page = NULL;
> + }
> }
>
> void its_fini_mod(struct module *mod)
> {
> + struct its_array *pages = &its_pages;
> +
> if (!cpu_feature_enabled(X86_FEATURE_INDIRECT_THUNK_ITS))
> return;
>
> WARN_ON_ONCE(its_mod != mod);
>
> - its_mod = NULL;
> - its_page = NULL;
> - mutex_unlock(&text_mutex);
> + if (mod) {
> + pages = &mod->arch.its_pages;
> + its_mod = NULL;
> + its_page = NULL;
> + mutex_unlock(&text_mutex);
> + }
>
> - for (int i = 0; i < mod->its_num_pages; i++) {
> - void *page = mod->its_page_array[i];
> + for (int i = 0; i < pages->num; i++) {
> + void *page = pages->pages[i];
> execmem_restore_rox(page, PAGE_SIZE);
> }
> +
> + if (!mod)
> + kfree(pages->pages);
> }
>
> void its_free_mod(struct module *mod)
> {
> + struct its_array *pages = &its_pages;
> +
> if (!cpu_feature_enabled(X86_FEATURE_INDIRECT_THUNK_ITS))
> return;
>
> - for (int i = 0; i < mod->its_num_pages; i++) {
> - void *page = mod->its_page_array[i];
> + if (mod)
> + pages = &mod->arch.its_pages;
> +
> + for (int i = 0; i < pages->num; i++) {
> + void *page = pages->pages[i];
> execmem_free(page);
> }
> - kfree(mod->its_page_array);
> + kfree(pages->pages);
> }
> -#endif /* CONFIG_MODULES */
>
> static void *its_alloc(void)
> {
> - void *page __free(execmem) = execmem_alloc(EXECMEM_MODULE_TEXT, PAGE_SIZE);
> + struct its_array *pages = &its_pages;
> + void *tmp;
>
> + void *page __free(execmem) = execmem_alloc(EXECMEM_MODULE_TEXT, PAGE_SIZE);
> if (!page)
> return NULL;
>
> -#ifdef CONFIG_MODULES
> - if (its_mod) {
> - void *tmp = krealloc(its_mod->its_page_array,
> - (its_mod->its_num_pages+1) * sizeof(void *),
> - GFP_KERNEL);
> - if (!tmp)
> - return NULL;
> + tmp = krealloc(pages->pages, (pages->num + 1) * sizeof(void *), GFP_KERNEL);
> + if (!tmp)
> + return NULL;
>
> - its_mod->its_page_array = tmp;
> - its_mod->its_page_array[its_mod->its_num_pages++] = page;
> + pages->pages = tmp;
> + pages->pages[pages->num++] = page;
>
> + if (its_mod)
> execmem_make_temp_rw(page, PAGE_SIZE);
> - }
> -#endif /* CONFIG_MODULES */
>
> return no_free_ptr(page);
> }
> @@ -2338,6 +2347,8 @@ void __init alternative_instructions(void)
> apply_retpolines(__retpoline_sites, __retpoline_sites_end);
> apply_returns(__return_sites, __return_sites_end);
>
> + its_fini_mod(NULL);
> +
> /*
> * Adjust all CALL instructions to point to func()-10, including
> * those in .altinstr_replacement.
Return-Path: <linux-kernel+bounces-665792-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 8BE0541E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:19:30 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id B17A51799B5
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:18:51 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 27EDE28DF05;
Wed, 28 May 2025 16:17:29 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="Ddr3eeqn"
Received: from out-188.mta1.migadu.com (out-188.mta1.migadu.com [95.215.58.188])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 27D5128D84D
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:17:25 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.188
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449048; cv=none; b=Kym8TzQUlOwaFQO2ye8L5VS9R4g6DPfWl2sGY7BVkGsSTBxIGkp396pi53zNpcwax5kFKdolPabMfqUme/x/bmPLeLv1sI+Ux2vOooZPwFYeMrHBAppJGA3XaHxlhHQdRBqjg2STfAInb//wdkOj1u0qqX3YgYEo+A4dF5p39bc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449048; c=relaxed/simple;
bh=ASJATDXHJ1cff1RjM4ZAA2vRF3PIUif1svRlmTRlIN8=;
h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=J8E2Qvhmwwr7BSt+KqeZFc184l1HQbw5my0l6eur4XGOhVMRnGuaCqcac5wA/rdEN4PFW86p50FqM22yh+yqkPA3HdISZraFZi0avUmQ+nC4LmNmIn4YUlHX9obkrap0TQW7r0Ddv+e5QTyYmaW3nE1T+qzuoFGRM/LLmcrQwTY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=Ddr3eeqn; arc=none smtp.client-ip=95.215.58.188
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev
X-Report-Abuse: Please report any abuse attempt to abuse@xxxxxxxxxx and include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1;
t=1748449034;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:cc:mime-version:mime-version:
content-transfer-encoding:content-transfer-encoding;
bh=BB0IE1lnbJy5zpZRdhFIn+OnRh+wjVB9ZlPmF9vEgZQ=;
b=Ddr3eeqnknPlT2TUs4jc/5e5ZIqxAEn6zrlKujUIy2pi9ZkQ3bnuR8Gpaa8rQ243NNR1a1
1J7dp/zUfXVVtosYzuXzUX2x1pS58ZTq5GXJ253UtPOQ1VrBLATa3aKI6fbVop73jET6oq
Ix/dhQxh4i+ivAiumbzGVc8pF7KE978=
From: Jiayuan Chen <jiayuan.chen@xxxxxxxxx>
To: bpf@xxxxxxxxxxxxxxx
Cc: Jiayuan Chen <jiayuan.chen@xxxxxxxxx>,
syzbot+9767c7ed68b95cfa69e6@xxxxxxxxxxxxxxxxxxxxxxxxx,
Alexei Starovoitov <ast@xxxxxxxxxx>,
Daniel Borkmann <daniel@xxxxxxxxxxxxx>,
Andrii Nakryiko <andrii@xxxxxxxxxx>,
Martin KaFai Lau <martin.lau@xxxxxxxxx>,
Eduard Zingerman <eddyz87@xxxxxxxxx>,
Song Liu <song@xxxxxxxxxx>,
Yonghong Song <yonghong.song@xxxxxxxxx>,
John Fastabend <john.fastabend@xxxxxxxxx>,
KP Singh <kpsingh@xxxxxxxxxx>,
Stanislav Fomichev <sdf@xxxxxxxxxxx>,
Hao Luo <haoluo@xxxxxxxxxx>,
Jiri Olsa <jolsa@xxxxxxxxxx>,
Mykola Lysenko <mykolal@xxxxxx>,
Shuah Khan <shuah@xxxxxxxxxx>,
Feng Yang <yangfeng@xxxxxxxxxx>,
Tejun Heo <tj@xxxxxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx,
linux-kselftest@xxxxxxxxxxxxxxx
Subject: [PATCH bpf-next v1 1/2] bpf: Restrict usage scope of bpf_get_cgroup_classid
Date: Thu, 29 May 2025 00:16:25 +0800
Message-ID: <20250528161653.55162-1-jiayuan.chen@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Migadu-Flow: FLOW_OUT
X-Spam-Status: No, score=-2.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,HK_RANDOM_FROM,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
A previous commit expanded the usage scope of bpf_get_cgroup_classid() to
all contexts (see Fixes tag), but this was inappropriate.
First, syzkaller reported a bug [1].
Second, it uses skb as an argument, but its implementation varies across
different bpf prog types. For example, in sock_filter and sock_addr, it
retrieves the classid from the current context
(bpf_get_cgroup_classid_curr_proto) instead of from skb. In tc egress and
lwt, it fetches the classid from skb->sk, but in tc ingress, it returns 0.
In summary, the definition of bpf_get_cgroup_classid() is ambiguous and
its usage scenarios are limited. It should not be treated as a
general-purpose helper. This patch reverts part of the previous commit.
[1] https://syzkaller.appspot.com/bug?extid=9767c7ed68b95cfa69e6
Fixes: ee971630f20f ("bpf: Allow some trace helpers for all prog types")
Reported-by: syzbot+9767c7ed68b95cfa69e6@xxxxxxxxxxxxxxxxxxxxxxxxx
Signed-off-by: Jiayuan Chen <jiayuan.chen@xxxxxxxxx>
---
include/linux/bpf-cgroup.h | 8 ++++++++
kernel/bpf/cgroup.c | 25 +++++++++++++++++++++++++
kernel/bpf/helpers.c | 4 ----
3 files changed, 33 insertions(+), 4 deletions(-)
diff --git a/include/linux/bpf-cgroup.h b/include/linux/bpf-cgroup.h
index 4847dcade917..9de7adb68294 100644
--- a/include/linux/bpf-cgroup.h
+++ b/include/linux/bpf-cgroup.h
@@ -427,6 +427,8 @@ int cgroup_bpf_prog_query(const union bpf_attr *attr,
const struct bpf_func_proto *
cgroup_common_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog);
+const struct bpf_func_proto *
+cgroup_current_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog);
#else
static inline int cgroup_bpf_inherit(struct cgroup *cgrp) { return 0; }
@@ -463,6 +465,12 @@ cgroup_common_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
return NULL;
}
+static inline const struct bpf_func_proto *
+cgroup_current_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
+{
+ return NULL;
+}
+
static inline int bpf_cgroup_storage_assign(struct bpf_prog_aux *aux,
struct bpf_map *map) { return 0; }
static inline struct bpf_cgroup_storage *bpf_cgroup_storage_alloc(
diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c
index 62a1d8deb3dc..a99b72e6f1c9 100644
--- a/kernel/bpf/cgroup.c
+++ b/kernel/bpf/cgroup.c
@@ -1653,6 +1653,10 @@ cgroup_dev_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
if (func_proto)
return func_proto;
+ func_proto = cgroup_current_func_proto(func_id, prog);
+ if (func_proto)
+ return func_proto;
+
switch (func_id) {
case BPF_FUNC_perf_event_output:
return &bpf_event_output_data_proto;
@@ -2200,6 +2204,10 @@ sysctl_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
if (func_proto)
return func_proto;
+ func_proto = cgroup_current_func_proto(func_id, prog);
+ if (func_proto)
+ return func_proto;
+
switch (func_id) {
case BPF_FUNC_sysctl_get_name:
return &bpf_sysctl_get_name_proto;
@@ -2343,6 +2351,10 @@ cg_sockopt_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
if (func_proto)
return func_proto;
+ func_proto = cgroup_current_func_proto(func_id, prog);
+ if (func_proto)
+ return func_proto;
+
switch (func_id) {
#ifdef CONFIG_NET
case BPF_FUNC_get_netns_cookie:
@@ -2589,3 +2601,16 @@ cgroup_common_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
return NULL;
}
}
+
+const struct bpf_func_proto *
+cgroup_current_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
+{
+ switch (func_id) {
+#ifdef CONFIG_CGROUP_NET_CLASSID
+ case BPF_FUNC_get_cgroup_classid:
+ return &bpf_get_cgroup_classid_curr_proto;
+#endif
+ default:
+ return NULL;
+ }
+}
diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c
index b71e428ad936..9d0d54f4f0de 100644
--- a/kernel/bpf/helpers.c
+++ b/kernel/bpf/helpers.c
@@ -2024,10 +2024,6 @@ bpf_base_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
return &bpf_get_current_ancestor_cgroup_id_proto;
case BPF_FUNC_current_task_under_cgroup:
return &bpf_current_task_under_cgroup_proto;
-#endif
-#ifdef CONFIG_CGROUP_NET_CLASSID
- case BPF_FUNC_get_cgroup_classid:
- return &bpf_get_cgroup_classid_curr_proto;
#endif
case BPF_FUNC_task_storage_get:
if (bpf_prog_check_recur(prog))
--
2.47.1
Return-Path: <linux-kernel+bounces-665794-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id B0E4741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:19:33 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id C88177AE76F
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:18:03 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 5A13428DF39;
Wed, 28 May 2025 16:17:38 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="pK06utRe"
Received: from out-186.mta1.migadu.com (out-186.mta1.migadu.com [95.215.58.186])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7466928D8DB
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:17:35 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.186
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449057; cv=none; b=gb1pOfrPPbilk1qmWSxAJCyBumEl55wlx7h8To2F4FUikh25jMENWXdXQlFVFmA2xmfdPB2ep38fkhVQW+sNtOfp4jyDozdCLKe20b/GyWlsI0qDM6Jq5S1ioyd70PvbMW3t1Hj66VlqQknQ7Zhe3t+GAhiaN3P3mY8PVC1j7O8=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449057; c=relaxed/simple;
bh=eoA47rogCFpNR9Tkp0qdf/QF8lVs8dsGQjdd9xff9mo=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version; b=fL4LfcxYUlPUO6mFIiQW+cnydrTb/+0AmIS1clpeKRvV47Fs2ij5SyxRrvt5G56aP4n5WB3jajZBNC20KdmMR18xJjD/WA1kJ+8L/eKCdowVNTQXYvAjx2xHfEOzZFo9x52BGt1/WLyFEy1WYhHF1TuvB27fCtV00YVc1oW6ZiA=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=pK06utRe; arc=none smtp.client-ip=95.215.58.186
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev
X-Report-Abuse: Please report any abuse attempt to abuse@xxxxxxxxxx and include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1;
t=1748449050;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:cc:mime-version:mime-version:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references;
bh=Pn98AFuFJVRfrXheY2sIBg6u+lxsCC5KB/mfc1OY4Tc=;
b=pK06utRe4sZNQgZl6s+J01SB4EAoD/2YJCoowUhDM3w+6jdLWZ9bptn16zfUHGblnkealE
9nzOtsd5RsEyrRkKIAykY9VdTqypr/jZGD8cESst1SN+bjfYqNG0RBrpBhbMhbvz+MK3Im
5PVmtOw6N5ncYeu0tQSRmxycn0WxTP8=
From: Jiayuan Chen <jiayuan.chen@xxxxxxxxx>
To: bpf@xxxxxxxxxxxxxxx
Cc: Jiayuan Chen <jiayuan.chen@xxxxxxxxx>,
Alexei Starovoitov <ast@xxxxxxxxxx>,
Daniel Borkmann <daniel@xxxxxxxxxxxxx>,
Andrii Nakryiko <andrii@xxxxxxxxxx>,
Martin KaFai Lau <martin.lau@xxxxxxxxx>,
Eduard Zingerman <eddyz87@xxxxxxxxx>,
Song Liu <song@xxxxxxxxxx>,
Yonghong Song <yonghong.song@xxxxxxxxx>,
John Fastabend <john.fastabend@xxxxxxxxx>,
KP Singh <kpsingh@xxxxxxxxxx>,
Stanislav Fomichev <sdf@xxxxxxxxxxx>,
Hao Luo <haoluo@xxxxxxxxxx>,
Jiri Olsa <jolsa@xxxxxxxxxx>,
Mykola Lysenko <mykolal@xxxxxx>,
Shuah Khan <shuah@xxxxxxxxxx>,
Feng Yang <yangfeng@xxxxxxxxxx>,
Tejun Heo <tj@xxxxxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx,
linux-kselftest@xxxxxxxxxxxxxxx
Subject: [PATCH bpf-next v1 2/2] bpf/selftests: Add test cases for retrieving classid
Date: Thu, 29 May 2025 00:16:26 +0800
Message-ID: <20250528161653.55162-2-jiayuan.chen@xxxxxxxxx>
In-Reply-To: <20250528161653.55162-1-jiayuan.chen@xxxxxxxxx>
References: <20250528161653.55162-1-jiayuan.chen@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Migadu-Flow: FLOW_OUT
X-Spam-Status: No, score=-2.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,HK_RANDOM_FROM,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Covers all scenarios where classid can be retrieved with bpf.
./test_progs -a cgroup_get_classid
53/1 cgroup_get_classid/get classid from tc:OK
53/2 cgroup_get_classid/get classid from sysctl:OK
53/3 cgroup_get_classid/get classid from cgroup dev:OK
53/4 cgroup_get_classid/get classid from cgroup sockopt:OK
53 cgroup_get_classid:OK
Summary: 1/4 PASSED, 0 SKIPPED, 0 FAILED
Signed-off-by: Jiayuan Chen <jiayuan.chen@xxxxxxxxx>
---
.../selftests/bpf/prog_tests/cgroup_classid.c | 212 ++++++++++++++++++
.../selftests/bpf/progs/test_cgroup_classid.c | 51 +++++
2 files changed, 263 insertions(+)
create mode 100644 tools/testing/selftests/bpf/prog_tests/cgroup_classid.c
create mode 100644 tools/testing/selftests/bpf/progs/test_cgroup_classid.c
diff --git a/tools/testing/selftests/bpf/prog_tests/cgroup_classid.c b/tools/testing/selftests/bpf/prog_tests/cgroup_classid.c
new file mode 100644
index 000000000000..f00da952e52c
--- /dev/null
+++ b/tools/testing/selftests/bpf/prog_tests/cgroup_classid.c
@@ -0,0 +1,212 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <sys/types.h>
+#include <unistd.h>
+#include <test_progs.h>
+#include "cgroup_helpers.h"
+#include "network_helpers.h"
+#include "test_cgroup_classid.skel.h"
+
+#define TEST_CGROUP "/cgroup_classid"
+
+static int test_cgroup_get_classid_from_tc(int cgroup_fd, int srv_fd, int srv_port, bool egress)
+{
+ struct test_cgroup_classid *skel;
+ int cli_fd = -1, ret = -1, expected;
+
+ LIBBPF_OPTS(bpf_tcx_opts, optl);
+
+ skel = test_cgroup_classid__open_and_load();
+ if (!ASSERT_OK_PTR(skel, "skel_open"))
+ return ret;
+
+ skel->bss->classid = -1;
+ if (egress) {
+ expected = getpid();
+ skel->links.tc_egress =
+ bpf_program__attach_tcx(skel->progs.tc_egress, 1, &optl);
+ } else {
+ expected = 0;
+ skel->links.tc_ingress =
+ bpf_program__attach_tcx(skel->progs.tc_ingress, 1, &optl);
+ }
+
+ cli_fd = connect_to_fd_opts(srv_fd, NULL);
+ if (!ASSERT_GE(cli_fd, 0, "connect_to_fd_opts"))
+ goto out;
+
+ ASSERT_EQ(skel->bss->classid, expected, "classid mismatch");
+ ret = 0;
+out:
+ if (cli_fd > 0)
+ close(cli_fd);
+
+ test_cgroup_classid__destroy(skel);
+ return ret;
+}
+
+static void test_cgroup_get_classid_tc(void)
+{
+ int srv_fd = -1, srv_port = -1;
+ int cgroup_fd = -1;
+
+ setup_classid_environment();
+ set_classid();
+ join_classid();
+
+ cgroup_fd = open_classid();
+ if (!ASSERT_GE(cgroup_fd, 0, "open_classid"))
+ goto out;
+
+ srv_fd = start_server(AF_INET, SOCK_STREAM, NULL, 0, 0);
+ if (!ASSERT_GE(srv_fd, 0, "srv_fd"))
+ goto out;
+
+ srv_port = get_socket_local_port(srv_fd);
+ if (!ASSERT_GE(srv_port, 0, "get_socket_local_port"))
+ goto out;
+
+ ASSERT_OK(test_cgroup_get_classid_from_tc(cgroup_fd, srv_fd, srv_port, 1), "egress");
+ ASSERT_OK(test_cgroup_get_classid_from_tc(cgroup_fd, srv_fd, srv_port, 0), "ingress");
+out:
+ if (srv_fd > 0)
+ close(srv_fd);
+ if (cgroup_fd > 0)
+ close(cgroup_fd);
+ cleanup_classid_environment();
+}
+
+static void test_cgroup_get_classid_cgroup_dev(void)
+{
+ struct test_cgroup_classid *skel = NULL;
+ int cgroup_fd = -1;
+
+ cgroup_fd = test__join_cgroup(TEST_CGROUP);
+ if (!ASSERT_GE(cgroup_fd, 0, "join cgroup"))
+ goto out;
+
+ if (!ASSERT_OK(setup_classid_environment(), "setup env"))
+ goto out;
+
+ if (!ASSERT_OK(set_classid(), "set_classid"))
+ goto out;
+
+ skel = test_cgroup_classid__open_and_load();
+ if (!ASSERT_OK_PTR(skel, "load program"))
+ goto out;
+
+ skel->links.cg_dev =
+ bpf_program__attach_cgroup(skel->progs.cg_dev, cgroup_fd);
+
+ if (!ASSERT_OK_PTR(skel->links.cg_dev, "attach_program"))
+ goto out;
+
+ skel->bss->classid = -1;
+ if (!ASSERT_OK(join_classid(), "join_classid"))
+ goto out;
+
+ open("/dev/null", O_RDWR);
+ ASSERT_EQ(skel->bss->classid, getpid(), "classid mismatch");
+out:
+ if (cgroup_fd > 0)
+ close(cgroup_fd);
+ test_cgroup_classid__destroy(skel);
+ cleanup_classid_environment();
+}
+
+static void test_cgroup_get_classid_sysctl(void)
+{
+ struct test_cgroup_classid *skel = NULL;
+ int cgroup_fd = -1;
+
+ cgroup_fd = test__join_cgroup(TEST_CGROUP);
+ if (!ASSERT_GE(cgroup_fd, 0, "join cgroup"))
+ goto out;
+
+ if (!ASSERT_OK(setup_classid_environment(), "setup env"))
+ goto out;
+
+ if (!ASSERT_OK(set_classid(), "set_classid"))
+ goto out;
+
+ skel = test_cgroup_classid__open_and_load();
+ if (!ASSERT_OK_PTR(skel, "load program"))
+ goto out;
+
+ skel->links.sysctl_tcp_mem =
+ bpf_program__attach_cgroup(skel->progs.sysctl_tcp_mem, cgroup_fd);
+ if (!ASSERT_OK_PTR(skel->links.sysctl_tcp_mem, "attach_program"))
+ goto out;
+
+ skel->bss->classid = -1;
+ if (!ASSERT_OK(join_classid(), "join_classid"))
+ goto out;
+
+ SYS_NOFAIL("cat /proc/sys/net/ipv4/tcp_mem");
+ ASSERT_EQ(skel->bss->classid, getpid(), "classid mismatch");
+out:
+ if (cgroup_fd > 0)
+ close(cgroup_fd);
+ test_cgroup_classid__destroy(skel);
+ cleanup_classid_environment();
+}
+
+static void test_cgroup_get_classid_sockopt(void)
+{
+ struct test_cgroup_classid *skel = NULL;
+ int cgroup_fd = -1, fd = -1, val, err;
+ socklen_t val_len;
+
+ cgroup_fd = test__join_cgroup(TEST_CGROUP);
+ if (!ASSERT_GE(cgroup_fd, 0, "join cgroup"))
+ goto out;
+
+ if (!ASSERT_OK(setup_classid_environment(), "setup env"))
+ goto out;
+
+ if (!ASSERT_OK(set_classid(), "set_classid"))
+ goto out;
+
+ skel = test_cgroup_classid__open_and_load();
+ if (!ASSERT_OK_PTR(skel, "load program"))
+ goto out;
+
+ skel->links.cg_getsockopt =
+ bpf_program__attach_cgroup(skel->progs.cg_getsockopt, cgroup_fd);
+ if (!ASSERT_OK_PTR(skel->links.cg_getsockopt, "attach_program"))
+ goto out;
+
+ skel->bss->classid = -1;
+ if (!ASSERT_OK(join_classid(), "join_classid"))
+ goto out;
+
+ fd = socket(AF_INET, SOCK_STREAM, 0);
+ if (!ASSERT_OK_FD(fd, "socket"))
+ goto out;
+
+ val_len = sizeof(val);
+ err = getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &val, &val_len);
+ if (!ASSERT_OK(err, "getsockopt"))
+ goto out;
+
+ ASSERT_EQ(skel->bss->classid, getpid(), "classid mismatch");
+out:
+ if (fd > 0)
+ close(fd);
+ if (cgroup_fd > 0)
+ close(cgroup_fd);
+ test_cgroup_classid__destroy(skel);
+ cleanup_classid_environment();
+}
+
+void test_cgroup_get_classid(void)
+{
+ if (test__start_subtest("get classid from tc"))
+ test_cgroup_get_classid_tc();
+ if (test__start_subtest("get classid from sysctl"))
+ test_cgroup_get_classid_sysctl();
+ if (test__start_subtest("get classid from cgroup dev"))
+ test_cgroup_get_classid_cgroup_dev();
+ if (test__start_subtest("get classid from cgroup sockopt"))
+ test_cgroup_get_classid_sockopt();
+}
diff --git a/tools/testing/selftests/bpf/progs/test_cgroup_classid.c b/tools/testing/selftests/bpf/progs/test_cgroup_classid.c
new file mode 100644
index 000000000000..7a555ba6bb17
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/test_cgroup_classid.c
@@ -0,0 +1,51 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <linux/bpf.h>
+#include <sys/socket.h>
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_endian.h>
+
+int classid;
+
+SEC("tc/egress")
+int tc_egress(struct __sk_buff *skb)
+{
+ /* expecte real classid */
+ classid = bpf_get_cgroup_classid(skb);
+ return TCX_PASS;
+}
+
+SEC("tc/ingress")
+int tc_ingress(struct __sk_buff *skb)
+{
+ /* expecte 0 */
+ classid = bpf_get_cgroup_classid(skb);
+ return TCX_PASS;
+}
+
+SEC("cgroup/dev")
+int cg_dev(struct bpf_cgroup_dev_ctx *ctx)
+{
+ /* expecte real classid */
+ classid = bpf_get_cgroup_classid((struct __sk_buff *)ctx);
+ /* Allow all */
+ return 1;
+}
+
+SEC("cgroup/sysctl")
+int sysctl_tcp_mem(struct bpf_sysctl *ctx)
+{
+ /* expecte real classid */
+ classid = bpf_get_cgroup_classid((struct __sk_buff *)ctx);
+ return 1;
+}
+
+SEC("cgroup/getsockopt")
+int cg_getsockopt(struct bpf_sockopt *ctx)
+{
+ /* expecte real classid */
+ classid = bpf_get_cgroup_classid((struct __sk_buff *)ctx);
+ return 1;
+}
+
+char _license[] SEC("license") = "GPL";
--
2.47.1
Return-Path: <linux-kernel+bounces-665797-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 483FF41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:19:59 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 56ED63B967E
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:19:38 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id EFD041DE4F1;
Wed, 28 May 2025 16:19:54 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZablnEiH"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1696B2E401
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:19:53 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449194; cv=none; b=i9O8s43jqbsaIDkxpHb57m7T7LKZRPMqnh86dR1sEvvBJ6D0RJ6dWnpRmJ2+N0WUVNd+SQwPfd8LqUDxynYf1uh0cLYmVsNQU9ybvTjKUA8qqi72Xi2SOJSFbpVhwtPypW64GfC7N4eLFd94IUC7ADaR+iP2jtXVTv7OCnmGs4g=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449194; c=relaxed/simple;
bh=6w+sSIEa2a6VRdcgdL1M84ZRtr3imad0eRZ9oLz8HW4=;
h=Content-Type:MIME-Version:Subject:From:Message-Id:Date:References:
In-Reply-To:To:Cc; b=MKP330Pv93ipex0ahSE3l1bs6Wv0S076cDB3IwZimgBAl44If9OhjET/8hfOBGtqgFXqjRMq/yHzAd4KpEAqGpuzyWdhCzv9pspcadYOUcdUVk+6nrxFQHP80A4MIIp29Z5bbZTbSo5S324smikT2lZIwfIVr+mPSg3rZMBmsd0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZablnEiH; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 83433C4CEE3;
Wed, 28 May 2025 16:19:53 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748449193;
bh=6w+sSIEa2a6VRdcgdL1M84ZRtr3imad0eRZ9oLz8HW4=;
h=Subject:From:Date:References:In-Reply-To:To:Cc:From;
b=ZablnEiHJ2JJM401tyemi8r/4oK/yt++24MeyhqBRDvq7lrXWv15+reo1LkpFWpQM
UsyupwxwkNK47A/VtSaTF4f261Y2D0xXXJNNdts91qd5esovrgdOfh3woEA/smyw7w
fyPAvjd+xMGh/ZaqmjcHt+mnxr+c+zualif2vluqJ007Wg4Vb3suQ0s/X5ggGpH//h
m19G+ThMzkQVxuFV03202eYTc9qekq31hP4NwFigqM2iItOzDuuyPBp0IzIgbQ3Mhm
JW6I6TghXQ+DRPUW8oipVopLqkYnrsN4BBjrLdwJ+JEDzKMAGmmN3C5eq5MZ7tRxTX
OVVaw+2Qavpqg==
Received: from [10.30.226.235] (localhost [IPv6:::1])
by aws-us-west-2-korg-oddjob-rhel9-1.codeaurora.org (Postfix) with ESMTP id ADDA33822D1A;
Wed, 28 May 2025 16:20:28 +0000 (UTC)
Content-Type: text/plain; charset="utf-8"
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Subject: Re: [f2fs-dev] [PATCH 1/2] f2fs: introduce is_{meta,node}_folio
From: patchwork-bot+f2fs@xxxxxxxxxx
Message-Id:
<174844922750.2455931.7003358490084665923.git-patchwork-notify@xxxxxxxxxx>
Date: Wed, 28 May 2025 16:20:27 +0000
References: <20250523073304.1454247-1-chao@xxxxxxxxxx>
In-Reply-To: <20250523073304.1454247-1-chao@xxxxxxxxxx>
To: Chao Yu <chao@xxxxxxxxxx>
Cc: jaegeuk@xxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-f2fs-devel@xxxxxxxxxxxxxxxxxxxxx
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hello:
This series was applied to jaegeuk/f2fs.git (dev)
by Jaegeuk Kim <jaegeuk@xxxxxxxxxx>:
On Fri, 23 May 2025 15:33:03 +0800 you wrote:
> Just cleanup, no changes.
>
> Signed-off-by: Chao Yu <chao@xxxxxxxxxx>
> ---
> fs/f2fs/checkpoint.c | 4 ++--
> fs/f2fs/data.c | 2 +-
> fs/f2fs/f2fs.h | 13 +++++++++++--
> fs/f2fs/gc.c | 2 +-
> fs/f2fs/node.c | 18 +++++++++---------
> 5 files changed, 24 insertions(+), 15 deletions(-)
Here is the summary with links:
- [f2fs-dev,1/2] f2fs: introduce is_{meta,node}_folio
https://git.kernel.org/jaegeuk/f2fs/c/019a8912425e
- [f2fs-dev,2/2] f2fs: clean up to check bi_status w/ BLK_STS_OK
https://git.kernel.org/jaegeuk/f2fs/c/68e7f31eecf1
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
Return-Path: <linux-kernel+bounces-665796-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 4EF0141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:20:04 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 49B6E7B2DB9
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:18:30 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 565471632C8;
Wed, 28 May 2025 16:19:02 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="NIk7UKl2"
Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on2077.outbound.protection.outlook.com [40.107.96.77])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7A7CA2AD22;
Wed, 28 May 2025 16:18:59 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.96.77
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449141; cv=fail; b=ljsokGr7cLxeEcF8REZXADU+6azGidffI2pvXyOfXiNuXACj9PHte1JfDcTxQoscMzmvJLV0tSXivQnO4IYA888kCPdLqlZtagVpbe5/5lfn2EBHhK+J4qj9OilPC+i21CSVXEB3q++2CCwLRQIksZEHkwhxuN+w/URG06Rcd30=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449141; c=relaxed/simple;
bh=GHT+sRAPwjXhHmWvK/ecZqkmby2mPJ6z5hxrtICKC+0=;
h=Message-ID:Date:Subject:To:Cc:References:From:In-Reply-To:
Content-Type:MIME-Version; b=gHv+yj93e6Cvh7SjCH5CxkAsoKl5rNBjHO1xVagCLeNO7S8rqZO6oZ3Sn1XiRSy8mBUftKzAGHscKYaT1UnrquMJLhLfuKQx51/hfl1ZchBA8qBWe1a1jvborZPrXLI/oHOWXQMezNRr53/2y1vrdvvO3myY9xPY0hyf1n+4Nw4=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=NIk7UKl2; arc=fail smtp.client-ip=40.107.96.77
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com
Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=fslESAUDUkEsEFMUC6J5gdXaQy/d9P9ZB/irql6oTuBUSVQsfbUs7MYPbpNc2b7aion46AP+Tc2PhCNkg2budLj3Nk1blNF5L6zqq5G7LiFsUkahBQw92ZUQl9DldCbBJmHFhBE7Opob2aOu+hy8JQ7nYrBJTD76zIv0BcwglGtTmBExF/SlrIoMwftNZG0q3TunCQRvDT+KACcuNiOtdItDFjr1nZiE/osrkIhbw63UJzLQNt++M3oL2ObJBA3qv6il2fhkqPpemaOQrmwnLvQNU5twMni1yjDO67Bf+snv9z3YAsSTmIS/OSNyIrxwwl7P6tCB/pYA13GiaKnmkQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=5i1/OL5n1Ojj0NXKSnt4E+fujUcshKJbsicK3Mg47zE=;
b=BoJDXOp6o/w7MUc7gT0bP/JwUJXz5JFBHyUPIj2bivQXGtg1nrMh/Tb3lvuN1FKeL1GE989DTnKpX2DV2IeEe8VcxFfE/SHix5xMHrpKWykPq6aYKyNS+jSPeQVGG3trcn/D46oxTGVBPwlHlc50mpWSB19Igc51EQUiN9//N//Oso3m7TXN4SuWlXDBX3wv/lir4oiG8+gB4aCilfOKLfVoVQ/0tVccWbbobC0DgIzesUwRUB9SBloH2tK/82bFaNaidRA2negB/wsT0zQUPN1JOHciluvHi3AvD4q2Rr2mjsdmGfbovRXyRoIICPZ1QKXx0q2FB49hGaI8OYcxUQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass
header.d=amd.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=5i1/OL5n1Ojj0NXKSnt4E+fujUcshKJbsicK3Mg47zE=;
b=NIk7UKl2FM1htrzA2Yv+/HRHbI4ZfZLOXpVrGuyD8V60Zh4onBWF/VnMfviq06CEi2yLo3fRwzY4bdqKfTFMcNrgkqyIO9APbH7BW3/ZnZQlW08nxXNjJOUMVSxqHRrinlJkZRl8qMsPGP6h16Fsddxfd2d9sMcMZC5lSql1ZIA=
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=amd.com;
Received: from MW3PR12MB4553.namprd12.prod.outlook.com (2603:10b6:303:2c::19)
by DS0PR12MB9058.namprd12.prod.outlook.com (2603:10b6:8:c6::10) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.26; Wed, 28 May
2025 16:18:55 +0000
Received: from MW3PR12MB4553.namprd12.prod.outlook.com
([fe80::b0ef:2936:fec1:3a87]) by MW3PR12MB4553.namprd12.prod.outlook.com
([fe80::b0ef:2936:fec1:3a87%5]) with mapi id 15.20.8722.031; Wed, 28 May 2025
16:18:55 +0000
Message-ID: <bbb6b6fb-7b9d-45ab-87eb-82747c370cb1@xxxxxxx>
Date: Wed, 28 May 2025 11:18:51 -0500
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH v13 01/27] x86/cpufeatures: Add support for Assignable
Bandwidth Monitoring Counters (ABMC)
To: Reinette Chatre <reinette.chatre@xxxxxxxxx>, babu.moger@xxxxxxx,
corbet@xxxxxxx, tony.luck@xxxxxxxxx, tglx@xxxxxxxxxxxxx, mingo@xxxxxxxxxx,
bp@xxxxxxxxx, dave.hansen@xxxxxxxxxxxxxxx
Cc: james.morse@xxxxxxx, dave.martin@xxxxxxx, fenghuay@xxxxxxxxxx,
x86@xxxxxxxxxx, hpa@xxxxxxxxx, paulmck@xxxxxxxxxx,
akpm@xxxxxxxxxxxxxxxxxxxx, thuth@xxxxxxxxxx, rostedt@xxxxxxxxxxx,
ardb@xxxxxxxxxx, gregkh@xxxxxxxxxxxxxxxxxxx, daniel.sneddon@xxxxxxxxxxxxxxx,
jpoimboe@xxxxxxxxxx, alexandre.chartre@xxxxxxxxxx,
pawan.kumar.gupta@xxxxxxxxxxxxxxx, thomas.lendacky@xxxxxxx,
perry.yuan@xxxxxxx, seanjc@xxxxxxxxxx, kai.huang@xxxxxxxxx,
xiaoyao.li@xxxxxxxxx, kan.liang@xxxxxxxxxxxxxxx, xin3.li@xxxxxxxxx,
ebiggers@xxxxxxxxxx, xin@xxxxxxxxx, sohil.mehta@xxxxxxxxx,
andrew.cooper3@xxxxxxxxxx, mario.limonciello@xxxxxxx,
linux-doc@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
peternewman@xxxxxxxxxx, maciej.wieczor-retman@xxxxxxxxx, eranian@xxxxxxxxxx,
Xiaojian.Du@xxxxxxx, gautham.shenoy@xxxxxxx
References: <cover.1747349530.git.babu.moger@xxxxxxx>
<aef9947e5ed68feb0d33a2c882c140e2e472276f.1747349530.git.babu.moger@xxxxxxx>
<505f530c-810a-41a4-b3cf-7eb326bb6990@xxxxxxxxx>
<6cd9873c-1add-4d19-8d08-a7c3a514bfea@xxxxxxx>
<5f8b21c6-5166-46a6-be14-0c7c9bfb7cde@xxxxxxxxx>
<3c22ea8f-7467-4a25-b1b7-4f7f47177211@xxxxxxx>
<8e22044c-f36e-41d0-bf1b-311ac8758da3@xxxxxxxxx>
Content-Language: en-US
From: "Moger, Babu" <bmoger@xxxxxxx>
In-Reply-To: <8e22044c-f36e-41d0-bf1b-311ac8758da3@xxxxxxxxx>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: SA9PR13CA0060.namprd13.prod.outlook.com
(2603:10b6:806:22::35) To MW3PR12MB4553.namprd12.prod.outlook.com
(2603:10b6:303:2c::19)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: MW3PR12MB4553:EE_|DS0PR12MB9058:EE_
X-MS-Office365-Filtering-Correlation-Id: b7c755d1-4407-49a2-7e8f-08dd9e035792
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014;
X-Microsoft-Antispam-Message-Info:
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
=?utf-8?Q?guztNxEZp9U=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW3PR12MB4553.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
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
=?utf-8?Q?zjDg=3D?=
X-OriginatorOrg: amd.com
X-MS-Exchange-CrossTenant-Network-Message-Id: b7c755d1-4407-49a2-7e8f-08dd9e035792
X-MS-Exchange-CrossTenant-AuthSource: MW3PR12MB4553.namprd12.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 16:18:55.0131
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 4QznIW5PImUmCIy9HA/SCxtHwcWFrYkBo5ce0GZokPJ0gdqqN6l4plkBFiKIjebK
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB9058
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Reinette,
On 5/27/2025 6:42 PM, Reinette Chatre wrote:
> Hi Babu,
>
> On 5/27/25 11:40 AM, Moger, Babu wrote:
>> On 5/27/25 12:54, Reinette Chatre wrote:
>>> On 5/27/25 10:23 AM, Moger, Babu wrote:
>>>> On 5/22/25 15:51, Reinette Chatre wrote:
>>>>> On 5/15/25 3:51 PM, Babu Moger wrote:
>>>
>>>>>> diff --git a/arch/x86/kernel/cpu/cpuid-deps.c b/arch/x86/kernel/cpu/cpuid-deps.c
>>>>>> index a2fbea0be535..2f54831e04e5 100644
>>>>>> --- a/arch/x86/kernel/cpu/cpuid-deps.c
>>>>>> +++ b/arch/x86/kernel/cpu/cpuid-deps.c
>>>>>> @@ -71,6 +71,8 @@ static const struct cpuid_dep cpuid_deps[] = {
>>>>>> { X86_FEATURE_CQM_MBM_LOCAL, X86_FEATURE_CQM_LLC },
>>>>>> { X86_FEATURE_BMEC, X86_FEATURE_CQM_MBM_TOTAL },
>>>>>> { X86_FEATURE_BMEC, X86_FEATURE_CQM_MBM_LOCAL },
>>>>>> + { X86_FEATURE_ABMC, X86_FEATURE_CQM_MBM_TOTAL },
>>>>>> + { X86_FEATURE_ABMC, X86_FEATURE_CQM_MBM_LOCAL },
>>>>>
>>>>> Is this dependency still accurate now that the implementation switched to the
>>>>> "extended event ID" variant of ABMC that no longer uses the event IDs associated
>>>>> with X86_FEATURE_CQM_MBM_TOTAL and X86_FEATURE_CQM_MBM_LOCAL?
>>>>
>>>> That's a good question. Unfortunately, we may need to retain this
>>>> dependency for now, as a significant portion of the code relies on
>>>> functions like resctrl_is_mbm_event(), resctrl_is_mbm_enabled(),
>>>> resctrl_arch_is_mbm_total_enabled(), and others.
>>>>
>>>
>>> Avoiding needing to change code is not a valid reason.
>>>
>>> I think that without this dependency the code will
>>> still rely on "functions like resctrl_is_mbm_event(),
>>> resctrl_is_mbm_enabled(), resctrl_arch_is_mbm_total_enabled(),
>>> and others." though.
>>>
>>> The core shift is to stop thinking about QOS_L3_MBM_TOTAL_EVENT_ID
>>> to mean the same as X86_FEATURE_CQM_MBM_TOTAL, similarly to stop
>>> thinking about QOS_L3_MBM_LOCAL_EVENT_ID to mean the same as
>>> X86_FEATURE_CQM_MBM_LOCAL.
>>
>> oh. ok.
>>
>>>
>>> I expected that for backwards compatibility ABMC will start by
>>> enabling QOS_L3_MBM_TOTAL_EVENT_ID and QOS_L3_MBM_LOCAL_EVENT_ID
>>> as part of its initialization, configuring them with the current
>>> defaults for which memory transactions are expected to be monitored
>>> by each. With these events enabled the existing flows using, for
>>> example, resctrl_is_mbm_event(), will continue to work as expected, no?
>>
>> Yes. It will work as it uses event id.
>>>
>>> This would require more familiarity with L3 monitoring enumeration
>>> on AMD since it will still be required to determine the number of
>>> RMIDs etc. but if ABMC does not actually depend on these CQM features
>>> then the current enumeration would need to be re-worked anyway.
>>
>> Are you suggesting to remove the dependency and rework ABMC enumeration in
>> get_rdt_mon_resources()?
>>
>
> If you have an alternative proposal that would accurately reflect the ABMC
> and existing L3 MON features then we can surely consider it.
I don't see any other option at this point. Will change it next revision.
Thanks
Babu
Return-Path: <linux-kernel+bounces-665795-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id DAB3E41E003FB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:20:04 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 3C609188577F
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:19:47 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id BD60528C5A6;
Wed, 28 May 2025 16:17:49 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UwJzwrgl"
Received: from mail-io1-f47.google.com (mail-io1-f47.google.com [209.85.166.47])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6E1F91632C8
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:17:47 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.166.47
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449069; cv=none; b=LIr6I3riVfhc8ZFAlG/8Hx38fHU2wjCT5RpT5zJsNxnaHuYZVL4WjUJ5KClRuWKnDEUcxS+Kk8YbG1ZlIs4fII2U9vxQ5Sj52vVG76Xki/SIeRNppKbqygQ1CqbcXLz79/U5i0TZfAwSAVpVukxyOAUimg2T0zmMYaLl2b19Mao=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449069; c=relaxed/simple;
bh=XQvIWAytjBtx5roMruaxdFWO06D+VdCxLVFPTEz9p4U=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=hU//y/smN7VQY8w/BPywa0vOpTCQRwDs07ck7fDuUUwg+e3y8j18UMsOZQiVLDdsEmjkdUxhF1aVwIdoBlZ4zwy+SE+EIc4MCFWKqeyEF+pKt66Wgh+/C4LZ809ek8uQLsvyQOg5P5ZoQv0aaU6uOpxtNXDsnOJDQwfD351YaXk=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UwJzwrgl; arc=none smtp.client-ip=209.85.166.47
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-io1-f47.google.com with SMTP id ca18e2360f4ac-8644aa73dfcso100671039f.0
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:17:47 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748449066; x=1749053866; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=uTzSLuw5Tgn9PujxmjAjgP7UtvlX2ja/Zjw4kSQsqdg=;
b=UwJzwrgl3vvA4AQrmVbSI0timBluu6X22E/XaKWb0vkS6jDpY8Wc2ojq3E7uB4gT42
bc62vmHVS7HFq4OOAxWPm0Rh1ORJ+MTVhdLWwnCBYWoICEZPC7mNbZIulw5GLBRh2+lK
cC0HsyHe+Cec5fceuJxcoob9SpWkLqTg+U1rRvtK7wizwLDEkWKxpK5htDeudwzkE2kN
GY+OA8DONSXXWDmJjzFWniOhjvpZPWqoxdy0eOuFBHKY8t1tsLkYRAbXYUjqnJPjnowG
4SRpJt7dRHyPiFq43HYfEYDUb/yw2FwBPnuHAq/J0jjGXVujSWLTfZxcX4xe2wpzDPq6
WkCw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748449066; x=1749053866;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=uTzSLuw5Tgn9PujxmjAjgP7UtvlX2ja/Zjw4kSQsqdg=;
b=Z4ydEMUMkibhtTA7PIjG8Apq7T49cyqOx05dVQCjufUCzgzOJJLJGBsFJ19TFxsRV/
41jSEA+/h/VXkN99LT3+seOGneb67/rvUVixOAjbYSzo4LctrC+jVcP4JE8FCSzy1Zny
aksTjtTQFob0yGpO48xSCeR5wvoqrcpZdEJF1ygfSSQnSMaFHbTwra1ZcXpR+Xpe3O3P
dz+qCHS+uGnZe4DjUNat2KcwZpTtVS9jUbZVQSJC/1xy3KhtViVcchv78LSXiQJqZl3O
8+b3gm3vNZlh+HsLdebJnEpbkilYh4qRNzXw/dvrsTvrAtmYQRWqCIMTb5mbs2TVqk4f
+NAw==
X-Forwarded-Encrypted: i=1; AJvYcCV+m/wnnxPCCWm+cH1fUPVARz6RRJP3x/idHZIA72/SIb/lnjffK9sdY+SfkSJcGiM48VXKVNKFeONwoi4=@vger.kernel.org
X-Gm-Message-State: AOJu0Yzdl059PEK9Z8dRQDTu4mHn0UT0sdY6HIjwKb3MBxLLldd2cWaK
LwR2BgYxjy4XEDrsJzi3q26xEpdpwXM8G0/s+apMCSVIGFpuZTQTsaEvSwZnLJ2ESFZO0UTauVn
/lbjsh7BJIro6A3xk2zet9drtY6xyBdTkoQ==
X-Gm-Gg: ASbGncu++klrs3XY/tnvg/xLGLpYcstOaObsiMbN9/aldmc3D7rbvVj7lxYIauwLRgl
OWc9lQ3fiOnWViYdUV3OI03rTD9hezKXiPw6/BNRXKtlK1h0Y41n7uyXLWuJPSoonbhrZl4JYdm
uIZhPDRV3BfYvbOWi5duQpSklCOn9M3lA=
X-Google-Smtp-Source: AGHT+IFF/umILiMgGZDGCLbJ5sT/qzWVOHlqk/6oUs0GExo2HD46i9Ov/em8Cdr+A78lOfG7WV8hw5tz0sQQvQ//DcA=
X-Received: by 2002:a17:90b:3ec6:b0:2fe:b774:3ec8 with SMTP id
98e67ed59e1d1-3110f332a9cmr20114781a91.23.1748449055876; Wed, 28 May 2025
09:17:35 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250522160954.429333-1-cyrilbur@xxxxxxxxxxxxxxx> <2c07d65e-0641-42a0-9eb4-9e42d9325ff2@xxxxxxxx>
In-Reply-To: <2c07d65e-0641-42a0-9eb4-9e42d9325ff2@xxxxxxxx>
From: Andy Chiu <andybnac@xxxxxxxxx>
Date: Thu, 29 May 2025 00:17:24 +0800
X-Gm-Features: AX0GCFt9_AqO8_XbUCelsbyxCoWk63hdmjOhaTlGWY4wVu0fiMlfSByuwGx24k0
Message-ID: <CAFTtA3PATS2CT-jax7eTNS=ZqU55CwGr=TeGiNX16ztfp5v9_w@xxxxxxxxxxxxxx>
Subject: Re: [PATCH] riscv: uaccess: Only restore the CSR_STATUS SUM bit
To: Alexandre Ghiti <alex@xxxxxxxx>
Cc: Cyril Bur <cyrilbur@xxxxxxxxxxxxxxx>, samuel.holland@xxxxxxxxxx,
ben.dooks@xxxxxxxxxxxxxxx, palmer@xxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
jszhang@xxxxxxxxxx, paul.walmsley@xxxxxxxxxx, charlie@xxxxxxxxxxxx,
jrtc27@xxxxxxxxxx, aou@xxxxxxxxxxxxxxxxx, linux-riscv@xxxxxxxxxxxxxxxxxxx,
Deepak Gupta <debug@xxxxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 4:39=E2=80=AFAM Alexandre Ghiti <alex@xxxxxxxx> wro=
te:
>
> +cc linux-riscv, Andy, Deepak
>
> On 5/22/25 18:09, Cyril Bur wrote:
> > During switch to csrs will OR the value of the register into the
> > corresponding csr. In this case we're only interested in restoring the
> > SUM bit not the entire register.
> >
> > Fixes: 788aa64c0 ("riscv: save the SR_SUM status over switches")
> > Signed-off-by: Cyril Bur <cyrilbur@xxxxxxxxxxxxxxx>
> > ---
> > I've put the Fixes tag in but I assume this will get squashed into the
> > patch. Either way I hope this works to fix the immediate issue.
> >
> > arch/riscv/kernel/entry.S | 12 ++++++++----
> > 1 file changed, 8 insertions(+), 4 deletions(-)
> >
> > diff --git a/arch/riscv/kernel/entry.S b/arch/riscv/kernel/entry.S
> > index 00bd0de9faa2..6ed3bd80903d 100644
> > --- a/arch/riscv/kernel/entry.S
> > +++ b/arch/riscv/kernel/entry.S
> > @@ -399,14 +399,18 @@ SYM_FUNC_START(__switch_to)
> > REG_S s11, TASK_THREAD_S11_RA(a3)
> >
> > /* save the user space access flag */
> > - li s0, SR_SUM
> > - csrr s1, CSR_STATUS
> > - REG_S s1, TASK_THREAD_STATUS_RA(a3)
> > + csrr s0, CSR_STATUS
> > + REG_S s0, TASK_THREAD_STATUS_RA(a3)
> >
> > /* Save the kernel shadow call stack pointer */
> > scs_save_current
> > - /* Restore context from next->thread */
> > + /*
> > + * Restore context from next->thread. csrs will OR the bits from =
s0 and
> > + * only want to restore the SR_SUM bit
> > + */
> > REG_L s0, TASK_THREAD_STATUS_RA(a4)
> > + li s1, SR_SUM
> > + and s0, s0, s1
> > csrs CSR_STATUS, s0
> > REG_L ra, TASK_THREAD_RA_RA(a4)
> > REG_L sp, TASK_THREAD_SP_RA(a4)
>
> To conclude the discussion we had here
> https://lore.kernel.org/linux-riscv/aDCtATl2N21fBsyT@xxxxxxxxxxxxxxxxxxxx=
m/#t,
> in addition to Cyril's patch above, to me we only have to rename the
> status field into sum and we're good to go. @Andy, @Deepak @Samuel Do
> you agree?
LGTM, thanks!
Andy
>
> As this is an important fix (along with 2 other fixes, one for thead
> vector and vdso static values), I'd like to send another PR soon for
> inclusion in 6.16-rc1, I did not want to delay the second PR any longer.
>
> Thanks for your feedbacks,
>
> Alex
>
>
Return-Path: <linux-kernel+bounces-665798-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 5357041E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:20:31 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 526AF188DE16
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:20:21 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 2338B28CF6C;
Wed, 28 May 2025 16:19:56 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="BmVUbI0e"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5E22A2798EB
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:19:54 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449195; cv=none; b=okikObF8jK0y5sQ1hKjeq6y3UFlM4hduawcpQE6ZbZjJatH97SYN6Z3aE0PtTpefPYCbwP/3sT6BKhuuYGiZ2ovC8NI2LIvJlA4rO72TSKuilwJjkpzvzOmzd8yfnHX3foqqsk8Re1OwyOCRrynCztNQzmyZglJCZq5BAmIYsOQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449195; c=relaxed/simple;
bh=GZp11ENuxv/DI5WxX8XBwc+eyfzg6i5/j+qBKoGlfA4=;
h=Content-Type:MIME-Version:Subject:From:Message-Id:Date:References:
In-Reply-To:To:Cc; b=X1MYHueq63Y7Ki4fWjFOPEaFotOVN7WWWVRFvIZ+Riu1iAVDyPp1MApbmdadZVrtGPGJBubKTXkEUxGhovOOIVmPM8J1z4V28fVp6jCWwj2ZHBPyq0izV/wpnQMrleH/7e/Ydzmx4LO+2u+6vF/d5g/QsnqB0eMnC3IpDS3esls=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=BmVUbI0e; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id BA02BC4CEE3;
Wed, 28 May 2025 16:19:54 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748449194;
bh=GZp11ENuxv/DI5WxX8XBwc+eyfzg6i5/j+qBKoGlfA4=;
h=Subject:From:Date:References:In-Reply-To:To:Cc:From;
b=BmVUbI0e98gn3BVLuJcu+H1BilpfvEaUGqHKrF8vpEQ5/ir5YWdZRi4q+91aLQby2
W8Nu7Byq5j8Dw58y31WYun9IoTXohJwoYwREDHnnn++QFlGMr22FZcet2R2KLute9L
Vn3QKq0X17CkciGvkcI4brYu59YVZlp5EjhmuNSIuP18eLt+Dy/9Tuz2NQCdMvu8We
8iEzJTt+rzGuZiqm+LDK65/fPqFMkpniN/EZSL3DilB5larSMMibj8LsCKwrS4IQAz
TNFs0WbJR8qxTq2JTqb5vuLwlnTv1y3kgUSxNsY0Dq1XqeO2OLXH6iOJ6zpFhE/Utt
Ulcp9bRMM9aRg==
Received: from [10.30.226.235] (localhost [IPv6:::1])
by aws-us-west-2-korg-oddjob-rhel9-1.codeaurora.org (Postfix) with ESMTP id EAE233822D1A;
Wed, 28 May 2025 16:20:29 +0000 (UTC)
Content-Type: text/plain; charset="utf-8"
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Subject: Re: [f2fs-dev] [PATCH 1/2] f2fs: use d_inode(dentry) cleanup
dentry->d_inode
From: patchwork-bot+f2fs@xxxxxxxxxx
Message-Id:
<174844922874.2455931.3646209198266412275.git-patchwork-notify@xxxxxxxxxx>
Date: Wed, 28 May 2025 16:20:28 +0000
References: <1747212349-18425-1-git-send-email-zhiguo.niu@xxxxxxxxxx>
In-Reply-To: <1747212349-18425-1-git-send-email-zhiguo.niu@xxxxxxxxxx>
To: Zhiguo Niu <zhiguo.niu@xxxxxxxxxx>
Cc: jaegeuk@xxxxxxxxxx, chao@xxxxxxxxxx, ke.wang@xxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-f2fs-devel@xxxxxxxxxxxxxxxxxxxxx,
Hao_hao.Wang@xxxxxxxxxx
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hello:
This series was applied to jaegeuk/f2fs.git (dev)
by Jaegeuk Kim <jaegeuk@xxxxxxxxxx>:
On Wed, 14 May 2025 16:45:48 +0800 you wrote:
> no logic changes.
>
> Signed-off-by: Zhiguo Niu <zhiguo.niu@xxxxxxxxxx>
> ---
> fs/f2fs/namei.c | 8 ++++----
> fs/f2fs/super.c | 4 ++--
> 2 files changed, 6 insertions(+), 6 deletions(-)
Here is the summary with links:
- [f2fs-dev,1/2] f2fs: use d_inode(dentry) cleanup dentry->d_inode
https://git.kernel.org/jaegeuk/f2fs/c/a6c397a31f58
- [f2fs-dev,2/2] f2fs: fix to correct check conditions in f2fs_cross_rename
https://git.kernel.org/jaegeuk/f2fs/c/9883494c45a1
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
Return-Path: <linux-kernel+bounces-665800-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 69A4B41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:20:34 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id A68AE3A9C80
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:20:13 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id DC6C428D8FB;
Wed, 28 May 2025 16:19:57 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="raZEqM78"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 29D9228D8D3
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:19:56 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449197; cv=none; b=FrKfFaB8EwnpBbK5MXq5geVRt30QaUrub42wrS+5YF9AoYA9T8qYOr3THsj6tf8w8jACw2gtsKZqzZ9zA/1S8AbDsl8+XIHY/3biLu3UzhTXegTZ0fozMqdWmuUcA/F04//DRFBX9+53F1FDI/bwPz4ONGGgmABIyoO4/G3WmCQ=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449197; c=relaxed/simple;
bh=was6HKWg8q3bCy8wjBqt1mSU3XXZMmZRo8cHl90Nx4s=;
h=Content-Type:MIME-Version:Subject:From:Message-Id:Date:References:
In-Reply-To:To:Cc; b=HYM0j0jesetCynFiWc92a0wzVJCUjKtjzXjx29cZKocj5gxvEHweYQGc2ItkxS45fxZh6h/4euJ2CwShThTns2szdKitsxp7orIx9d+0WLLF/b+oewzIgjA8QRnn6qLzucAL9MxfMWHzvH3hkFVLRlyUdY+sfD3N/Uz0Ak8Fvy0=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=raZEqM78; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8BB3BC4AF0B;
Wed, 28 May 2025 16:19:56 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748449196;
bh=was6HKWg8q3bCy8wjBqt1mSU3XXZMmZRo8cHl90Nx4s=;
h=Subject:From:Date:References:In-Reply-To:To:Cc:From;
b=raZEqM78y6G5f+VeQ+ip3ezKW5gxf9742s7boQMiPJygBDc58q9/g9ySexHD9l8U0
o5Kfu/WJMW3sclf8+J31S+AsBe6m9o5kxAss49PiD1E8LZXU31JX0jVxJVHKD72iVU
DgaaiPbH8Asg/Pe7X6cuiRU7d6eJMg2LxnG9iPD4GrYYTNYhmCJUN1BCTjU99iKvil
YueBvvhXBfH52zN03PPES/B69HaHwNWcAR0fHnV8WB68pP/IPnoOCmYdE2T7knZ+BS
NUS/zkelFKqnMMlxY/ng99Pt3LSlHR6hbuLd4i8oAv90KDv5MmgdvHqV9cRMNfKBQ5
AbyUuAN5J4fgA==
Received: from [10.30.226.235] (localhost [IPv6:::1])
by aws-us-west-2-korg-oddjob-rhel9-1.codeaurora.org (Postfix) with ESMTP id ADB0A3822D1A;
Wed, 28 May 2025 16:20:31 +0000 (UTC)
Content-Type: text/plain; charset="utf-8"
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Subject: Re: [f2fs-dev] [PATCH v3] f2fs: fix to skip f2fs_balance_fs() if
checkpoint is disabled
From: patchwork-bot+f2fs@xxxxxxxxxx
Message-Id:
<174844923023.2455931.17793935058942024770.git-patchwork-notify@xxxxxxxxxx>
Date: Wed, 28 May 2025 16:20:30 +0000
References: <20250523032545.1392641-1-chao@xxxxxxxxxx>
In-Reply-To: <20250523032545.1392641-1-chao@xxxxxxxxxx>
To: Chao Yu <chao@xxxxxxxxxx>
Cc: jaegeuk@xxxxxxxxxx, syzbot+aa5bb5f6860e08a60450@xxxxxxxxxxxxxxxxxxxxxxxxx,
hanqi@xxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-f2fs-devel@xxxxxxxxxxxxxxxxxxxxx
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hello:
This patch was applied to jaegeuk/f2fs.git (dev)
by Jaegeuk Kim <jaegeuk@xxxxxxxxxx>:
On Fri, 23 May 2025 11:25:45 +0800 you wrote:
> Syzbot reports a f2fs bug as below:
>
> INFO: task syz-executor328:5856 blocked for more than 144 seconds.
> Not tainted 6.15.0-rc6-syzkaller-00208-g3c21441eeffc #0
> "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
> task:syz-executor328 state:D stack:24392 pid:5856 tgid:5832 ppid:5826 task_flags:0x400040 flags:0x00004006
> Call Trace:
> <TASK>
> context_switch kernel/sched/core.c:5382 [inline]
> __schedule+0x168f/0x4c70 kernel/sched/core.c:6767
> __schedule_loop kernel/sched/core.c:6845 [inline]
> schedule+0x165/0x360 kernel/sched/core.c:6860
> io_schedule+0x81/0xe0 kernel/sched/core.c:7742
> f2fs_balance_fs+0x4b4/0x780 fs/f2fs/segment.c:444
> f2fs_map_blocks+0x3af1/0x43b0 fs/f2fs/data.c:1791
> f2fs_expand_inode_data+0x653/0xaf0 fs/f2fs/file.c:1872
> f2fs_fallocate+0x4f5/0x990 fs/f2fs/file.c:1975
> vfs_fallocate+0x6a0/0x830 fs/open.c:338
> ioctl_preallocate fs/ioctl.c:290 [inline]
> file_ioctl fs/ioctl.c:-1 [inline]
> do_vfs_ioctl+0x1b8f/0x1eb0 fs/ioctl.c:885
> __do_sys_ioctl fs/ioctl.c:904 [inline]
> __se_sys_ioctl+0x82/0x170 fs/ioctl.c:892
> do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
> do_syscall_64+0xf6/0x210 arch/x86/entry/syscall_64.c:94
> entry_SYSCALL_64_after_hwframe+0x77/0x7f
>
> [...]
Here is the summary with links:
- [f2fs-dev,v3] f2fs: fix to skip f2fs_balance_fs() if checkpoint is disabled
https://git.kernel.org/jaegeuk/f2fs/c/c836d3b8d94e
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
Return-Path: <linux-kernel+bounces-665799-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 6554941E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:20:43 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id A29921C0104A
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:20:35 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 0199D28D8C8;
Wed, 28 May 2025 16:19:57 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=lunn.ch header.i=@lunn.ch header.b="Hc85KsCc"
Received: from vps0.lunn.ch (vps0.lunn.ch [156.67.10.101])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 81816283C8E;
Wed, 28 May 2025 16:19:54 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=156.67.10.101
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449196; cv=none; b=Bq0F3i8jfIEJwbdZw4URTBsx7u4ffKdo4cUL1vA2LaiU9EqNqCO/8VDA0VJMjFp6/dH1ZPFk++4JvGirvNf7/RV/ieGzQ1k4VrjLa/pzCrazY1ZaX6ot7GsALGVDRRr7OEWL59q87cQhFU3ElnG+SF/Y05V+cIfPJikgfxAzgCY=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449196; c=relaxed/simple;
bh=qXJ+IqF7/m//76C8fW+mrTCbhGzi0qHG48chXP0zz94=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=I90EvDYROxhb+1NMTk4qjIQyaZfT0/8Z4kCFYc7cEZCY5GgFzWJ5QQ71B7EZE5/KAnIjU5/Fbez8/CbB021WKdWHHAp+//m+ZIVVAspiOPkxh2gzQwbxORHz7nltoYB24gNIJKy+O8dQeOWk28+inkdSVe6j66KkR1TsC7OxRZQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=lunn.ch; spf=pass smtp.mailfrom=lunn.ch; dkim=pass (1024-bit key) header.d=lunn.ch header.i=@lunn.ch header.b=Hc85KsCc; arc=none smtp.client-ip=156.67.10.101
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=lunn.ch
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=lunn.ch
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lunn.ch;
s=20171124; h=In-Reply-To:Content-Disposition:Content-Type:MIME-Version:
References:Message-ID:Subject:Cc:To:From:Date:From:Sender:Reply-To:Subject:
Date:Message-ID:To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:
Content-ID:Content-Description:Content-Disposition:In-Reply-To:References;
bh=HBGgu+PfumtYHtFWP6ldbnKLzKxWqLSqPhfinDYGxe0=; b=Hc85KsCcSxtr3DnRBNcInCYQgN
kYsvXqr6Nbn3E83MCxyzvZvoeaMyy7CeREfC2jEeEka4CKYj2v4vdvmVrVpc/hDGwG1GR5+39tjLR
+kHLu7mBmDBE+BXlq2gzNhC5I7Ebf+VyNt8kRBrEa0/Fa4YhRtOm6ahiUHsglAv9HFO4=;
Received: from andrew by vps0.lunn.ch with local (Exim 4.94.2)
(envelope-from <andrew@xxxxxxx>)
id 1uKJVE-00EC2y-Ga; Wed, 28 May 2025 18:19:40 +0200
Date: Wed, 28 May 2025 18:19:40 +0200
From: Andrew Lunn <andrew@xxxxxxx>
To: Maxime Chevallier <maxime.chevallier@xxxxxxxxxxx>
Cc: Matthew Gerlach <matthew.gerlach@xxxxxxxxxx>, andrew+netdev@xxxxxxx,
davem@xxxxxxxxxxxxx, edumazet@xxxxxxxxxx, kuba@xxxxxxxxxx,
pabeni@xxxxxxxxxx, robh@xxxxxxxxxx, krzk+dt@xxxxxxxxxx,
conor+dt@xxxxxxxxxx, richardcochran@xxxxxxxxx,
netdev@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx,
Mun Yew Tham <mun.yew.tham@xxxxxxxxxx>
Subject: Re: [PATCH v2] dt-bindings: net: Convert socfpga-dwmac bindings to
yaml
Message-ID: <c8ba074c-c689-44f0-9513-59661b12e232@xxxxxxx>
References: <20250528144650.48343-1-matthew.gerlach@xxxxxxxxxx>
<20250528170650.2357ea07@xxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528170650.2357ea07@xxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
> > + phy-mode:
> > + enum:
> > + - rgmii
>
> You're missing rgmii-id, rgmii-rxid and rgmii-txid
And it is unlikely anybody actually needs rgmii. rgmii-id should be
the most used rgmii variant.
Andrew
Return-Path: <linux-kernel+bounces-665801-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 227D641E003FB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:21:11 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id E4EEE189138C
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:21:09 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 7F2CB28CF5F;
Wed, 28 May 2025 16:20:33 +0000 (UTC)
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0402928C86C
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:20:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449233; cv=none; b=esOCScD1g5jwMFrixWOZTexkDT0cjNuV01jMlNLNDzY2TMeoTQst7UblqRZvKwun2cqUyiNo2FZcLOZSstwdEvoBkgTOH1cDsmfytRlmTgiHvX9kBlIosH+axH4C/STPXxXkr0jTiuIHzyEhW9ZFnbFuu0Y4PCwS0q4OzAq+X7g=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449233; c=relaxed/simple;
bh=rtknfNWoEK+Ik+dCQAnloEVSjqtEhNouvIqjdscPbL4=;
h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=HB1kMZkRc7zZ2xiPT7dg91/EcjGtaQT2ENKsod8J7rrJCd+58sWXUN0YQiju9yZ5+laUD4D/BuFg90k995hUglo8Pn9GHXrm6LssFTguAFS5BlvVkJZf/I+QYfujEZ++qhz1tkcmxZv99QTanh4xZJLBpKRb5+U0DHJTJeGEw3E=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4C4FBC4CEE3;
Wed, 28 May 2025 16:20:31 +0000 (UTC)
Date: Wed, 28 May 2025 12:21:31 -0400
From: Steven Rostedt <rostedt@xxxxxxxxxxx>
To: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: Ingo Molnar <mingo@xxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx, Dietmar
Eggemann <dietmar.eggemann@xxxxxxx>, Linus Torvalds
<torvalds@xxxxxxxxxxxxxxxxxxxx>, Shrikanth Hegde <sshegde@xxxxxxxxxxxxx>,
Thomas Gleixner <tglx@xxxxxxxxxxxxx>, Valentin Schneider
<vschneid@xxxxxxxxxx>, Mel Gorman <mgorman@xxxxxxx>, Vincent Guittot
<vincent.guittot@xxxxxxxxxx>, Sebastian Andrzej Siewior
<bigeasy@xxxxxxxxxxxxx>
Subject: Re: [PATCH 00/43] sched: Use the SMP scheduler on UP too
Message-ID: <20250528122131.70adfac9@xxxxxxxxxxxxxxxxxx>
In-Reply-To: <20250528161020.GF39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <20250528080924.2273858-1-mingo@xxxxxxxxxx>
<20250528085813.GX39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<20250528100000.0ab0a8b1@xxxxxxxxxxxxxxxxxx>
<20250528161020.GF39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
X-Mailer: Claws Mail 3.20.0git84 (GTK+ 2.24.33; x86_64-pc-linux-gnu)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 18:10:20 +0200
Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
> > Although I wish there was better documentation about it.
>
> It has a manpage :-)
Ah, google has it. I was looking at the scripts/unifdef.c
I now see that it also has a debian package (that I don't have installed),
so no man page on my system.
-- Steve
Return-Path: <linux-kernel+bounces-665802-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1DC1341E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:21:11 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 455CAA238CC
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:20:50 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id BA81528D854;
Wed, 28 May 2025 16:20:53 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LEf2JTUg"
Received: from mail-lj1-f177.google.com (mail-lj1-f177.google.com [209.85.208.177])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1DBB82798EB;
Wed, 28 May 2025 16:20:50 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.177
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449252; cv=none; b=Vvv33eRHx8FRBv9vxs0N8SPQz3z5am4SjG+1XJT/w2Z0w7od6L8Npsi2r5fJgnUO0St8dtzJ6mnLZjrjY5Zz86TjiuuLk4ivl8oHCXQ7VYGtVyeg/kx1LDVGJavtSDXXBFql/mCzmHWOu49HlaUk4GJKZ03zbbA1kWwXbOkJG6w=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449252; c=relaxed/simple;
bh=pVfN9eS0l7ihongB0LOBdjBA6cxaKVHJrt34QSlJ1sI=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=h7nkNzyh2zfNMNZsx0UlNMAIsDGsXdTHKx4p90ceTv8eUtSqp85JrA/ujix7kq6r4p0Mkr4qwie44CRwkrrAx3cckVT3F1dxHqbKicX+EIJadEsYk4wK559EQd2YB0VTKib5KbiF6/pb0FVs+UQrgqcBQJX/vrWtS6uYyWk1GjU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=LEf2JTUg; arc=none smtp.client-ip=209.85.208.177
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-lj1-f177.google.com with SMTP id 38308e7fff4ca-32a6083ef65so28461551fa.2;
Wed, 28 May 2025 09:20:50 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748449249; x=1749054049; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=yX1eTIuJOFJ1d8HmF81QUkvA4Oc+VUDTFQ5Tkm2VlKI=;
b=LEf2JTUg47tDz/5Nq7NOGOb4KMtNOvx07nVAjiktSk+5JnCPovnVhpO8TX3h1EThIO
ofaTvc+ylFwiZpfFviudq4g1V7itEzsA1B5Bt3K5FzUxoC7c7YY/SDWlpigOFkLFxpoD
QuIdktaKP9pPtBMF1LrZwzl08wr2JcHimmbUPA2G6+k3Okg4FYJ9NkbFpDm+i1vT1YNC
5mgtTlTAcB45iGm/Q7OLASkrdEGrycRcGqbfBCHW8M5d20HhGv6GqyrmocsYMxRIoJdJ
xf5fY48Fx8ZGXqIgTGSlr9T9HIAA0V7Z64UnwWOFgp/Bj0EH9qFZu72V8cl2pUIIthgr
6oKw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748449249; x=1749054049;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=yX1eTIuJOFJ1d8HmF81QUkvA4Oc+VUDTFQ5Tkm2VlKI=;
b=w7wTF9fFbCC1NbXp8Q/cMARpG0K/KjA5yRwFkkfzsdhkljnl4ub7HnYCzVPeS/pECZ
Nz+8miNi4zV7+4n7B5XLInTmShCIsyBbGl7wl5NMbt68wleaBpRAxuM4Pa3qrJ0GuvLi
7nlKcHEphYXvfFD6ax1yKWKwJEdu4H4NcNzg44x8I0aniVDIDsxjeh0527sUhUPoD4RW
x0Lp9ypJXHSI7paOoaunmFsZXV4JQ85Nbd4QcWE9IIGmKBZtXLU67blsqXCCZTutYo6J
4bNQX5movTYe94yAezM1oDBQLvOLX+Sk24uRXBof+WirYi54Ty8YxW94bTXZnFXPY2N+
iEKw==
X-Forwarded-Encrypted: i=1; AJvYcCUcgXQE5XdUiDLiOKDK27I2/Q8yq2VNNx1ncLxA5JlK1FXzxO5Os6ffDha1wvhqn+78APsTjmuY+MtqwpB/Xk8=@vger.kernel.org, AJvYcCVLfn8Qs6JbIpW6QjvGrALzIxaBdsGXfz7Vb99KOQ7UgdPHgI0mfArGK7jwnLetVIYzVZJrq7DLslM/8FM=@vger.kernel.org, AJvYcCWexzghDyiomsrJHUkafl40ClvqcXtXsxqdbiFEftUZhnOhyd7hpi0oqP9fsVroEdLCsfZoJGZ+ObCuuS4SJNtu@xxxxxxxxxxxxxxx
X-Gm-Message-State: AOJu0YxqF9+5AddQp3FqHuxbtHMMK4tanYtQu8ycfnlcu78tr0PcvB7b
YtD7jHF/sGxhMX7IbOeaNipGhv+Is0hwPcxBGr4cNnEuEgRPXuhySioOORD7I9vvPAY+y/b9p7N
D8EOMzkSQVia/pz9TVG8eaIffJ+funx4=
X-Gm-Gg: ASbGncvPx8OX4VqkhlieocMMid459Y8rYJ8RWq2VXAAdjFqJ58CDi+4jf5soBnNfcwA
+ar31x2QYseCYSz6ekUd3w+Pqn+6mGhxzywNo0GMckf03m3mEg+nJYCKwfONCIkr8f1/5owhJeu
oB3inA0rOobLPzBzSEpRXFju78OTVKY6pv4tfMCbnfKmdpwO2Y
X-Google-Smtp-Source: AGHT+IERNF6nJP16os1FaKc3/sdXmm8EwNv8eCauOgOToi64bP3nXEDmXCRmFZmrwxC0g1SSj5SgySzC5xDlCsB7Oow=
X-Received: by 2002:a05:651c:214e:b0:32a:5e74:5726 with SMTP id
38308e7fff4ca-32a5e745900mr27333001fa.38.1748449248922; Wed, 28 May 2025
09:20:48 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250527-idiomatic-match-slice-v1-1-34b0b1d1d58c@xxxxxxxxx> <202505282330.oOHtt60s-lkp@xxxxxxxxx>
In-Reply-To: <202505282330.oOHtt60s-lkp@xxxxxxxxx>
From: Tamir Duberstein <tamird@xxxxxxxxx>
Date: Wed, 28 May 2025 12:20:12 -0400
X-Gm-Features: AX0GCFtwpZSAhj_4TToLyRo1WFyFxvpTkmyybwSPHteM3wp-9wZFIJXZ0dupnGM
Message-ID: <CAJ-ks9m30hV+OiN3yO5nU47EoVfuBr=OhjS8QHpgBSWcoB4vWw@xxxxxxxxxxxxxx>
Subject: Re: [PATCH] rust: replace length checks with match
To: kernel test robot <lkp@xxxxxxxxx>
Cc: Miguel Ojeda <ojeda@xxxxxxxxxx>, Alex Gaynor <alex.gaynor@xxxxxxxxx>,
Boqun Feng <boqun.feng@xxxxxxxxx>, Gary Guo <gary@xxxxxxxxxxx>,
=?UTF-8?Q?Bj=C3=B6rn_Roy_Baron?= <bjorn3_gh@xxxxxxxxxxxxxx>,
Benno Lossin <lossin@xxxxxxxxxx>, Andreas Hindborg <a.hindborg@xxxxxxxxxx>,
Alice Ryhl <aliceryhl@xxxxxxxxxx>, Trevor Gross <tmgross@xxxxxxxxx>,
Danilo Krummrich <dakr@xxxxxxxxxx>, Brendan Higgins <brendan.higgins@xxxxxxxxx>,
David Gow <davidgow@xxxxxxxxxx>, Rae Moar <rmoar@xxxxxxxxxx>, oe-kbuild-all@xxxxxxxxxxxxxxx,
linux-kselftest@xxxxxxxxxxxxxxx, kunit-dev@xxxxxxxxxxxxxxxx,
rust-for-linux@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 11:58=E2=80=AFAM kernel test robot <lkp@xxxxxxxxx> =
wrote:
>
> Hi Tamir,
>
> kernel test robot noticed the following build errors:
>
> [auto build test ERROR on bfc3cd87559bc593bb32bb1482f9cae3308b6398]
>
> url: https://github.com/intel-lab-lkp/linux/commits/Tamir-Duberstein/r=
ust-replace-length-checks-with-match/20250528-001121
> base: bfc3cd87559bc593bb32bb1482f9cae3308b6398
> patch link: https://lore.kernel.org/r/20250527-idiomatic-match-slice-v=
1-1-34b0b1d1d58c%40gmail.com
> patch subject: [PATCH] rust: replace length checks with match
> config: x86_64-rhel-9.4-rust (https://download.01.org/0day-ci/archive/202=
50528/202505282330.oOHtt60s-lkp@xxxxxxxxx/config)
> compiler: clang version 18.1.8 (https://github.com/llvm/llvm-project 3b5b=
5c1ec4a3095ab096dd780e84d7ab81f3d7ff)
> rustc: rustc 1.78.0 (9b00956e5 2024-04-29)
> reproduce (this is a W=3D1 build): (https://download.01.org/0day-ci/archi=
ve/20250528/202505282330.oOHtt60s-lkp@xxxxxxxxx/reproduce)
>
> If you fix the issue in a separate patch/commit (i.e. not just a new vers=
ion of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@xxxxxxxxx>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202505282330.oOHtt60s-lkp=
@intel.com/
>
> All errors (new ones prefixed by >>):
>
> PATH=3D/opt/cross/clang-18/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin=
:/bin
> INFO PATH=3D/opt/cross/rustc-1.78.0-bindgen-0.65.1/cargo/bin:/opt/cros=
s/clang-18/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
> /usr/bin/timeout -k 100 12h /usr/bin/make KCFLAGS=3D -Wno-error=3Dretu=
rn-type -Wreturn-type -funsigned-char -Wundef W=3D1 --keep-going LLVM=3D1 -=
j24 -C source O=3D/kbuild/obj/consumer/x86_64-rhel-9.4-rust ARCH=3Dx86_64 S=
HELL=3D/bin/bash rustfmtcheck
> make: Entering directory '/kbuild/src/consumer'
> make[1]: Entering directory '/kbuild/obj/consumer/x86_64-rhel-9.4-rust=
'
> >> Diff in scripts/rustdoc_test_gen.rs at line 90:
> "No path candidates found for `{file}`. This is likely a =
bug in the build system, or \
> some files went away while compiling."
> ),
> - [valid_path] =3D> {
> - valid_path.to_str().unwrap()
> - }
> + [valid_path] =3D> valid_path.to_str().unwrap(),
> valid_paths =3D> {
> eprintln!("Several path candidates found:");
> for path in valid_paths {
> make[2]: *** [Makefile:1826: rustfmt] Error 123
> make[2]: Target 'rustfmtcheck' not remade because of errors.
> make[1]: Leaving directory '/kbuild/obj/consumer/x86_64-rhel-9.4-rust'
> make[1]: *** [Makefile:248: __sub-make] Error 2
> make[1]: Target 'rustfmtcheck' not remade because of errors.
> make: *** [Makefile:248: __sub-make] Error 2
> make: Target 'rustfmtcheck' not remade because of errors.
> make: Leaving directory '/kbuild/src/consumer'
Yep, I already noticed this. Will send v2 with proper formatting.
Return-Path: <linux-kernel+bounces-665803-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 959DA41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:21:42 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 6D653168AE8
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:21:29 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 33DCC28CF68;
Wed, 28 May 2025 16:21:18 +0000 (UTC)
Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id E15CB1632C8;
Wed, 28 May 2025 16:21:14 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.176.79.56
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449277; cv=none; b=I3gIKy2wI18rwh6akO9kc5h6sKXYBWSsyL5zW9F26fsjh1mg1eHZgmegxiv5U5tZPwZ/ix0TiWyTrrAY/dCHShykQ2P00ucczXLRChaN02wp/4+AsQFwbif8LoZXhei/BIAylBk9BROfC8Y3AzJVlcarPbK6puiAPDYJNlu8lZY=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449277; c=relaxed/simple;
bh=qS1gHsWMRI6Lyh/zqh0ANB9xHCaIG1o65jbSeKh8QG4=;
h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To:
Content-Type:MIME-Version; b=drudts38yKJx7TEd90WA9uRNoPb4e6LcjaXy2NVwob6ZcUw2CMGtNCdKLhZOuvkOpfOzd/RlgIWEdolapnbHhSlqjGB7j6Rm9R0qMh0IvR3WIaE+scJLk0KLTfoc6EAz8PhQ/XwEqVX8W2cqrJsvF5mmmEHgET7LKNkhP5u9O98=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=185.176.79.56
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com
Received: from mail.maildlp.com (unknown [172.18.186.216])
by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4b6vrN6Ykrz6M4GB;
Thu, 29 May 2025 00:21:08 +0800 (CST)
Received: from frapeml500005.china.huawei.com (unknown [7.182.85.13])
by mail.maildlp.com (Postfix) with ESMTPS id AE7F81402F6;
Thu, 29 May 2025 00:21:11 +0800 (CST)
Received: from frapeml500007.china.huawei.com (7.182.85.172) by
frapeml500005.china.huawei.com (7.182.85.13) with Microsoft SMTP Server
(version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
15.1.2507.39; Wed, 28 May 2025 18:21:11 +0200
Received: from frapeml500007.china.huawei.com ([7.182.85.172]) by
frapeml500007.china.huawei.com ([7.182.85.172]) with mapi id 15.01.2507.039;
Wed, 28 May 2025 18:21:11 +0200
From: Shiju Jose <shiju.jose@xxxxxxxxxx>
To: Alison Schofield <alison.schofield@xxxxxxxxx>, Dan Carpenter
<dan.carpenter@xxxxxxxxxx>
CC: Davidlohr Bueso <dave@xxxxxxxxxxxx>, Jonathan Cameron
<jonathan.cameron@xxxxxxxxxx>, Dave Jiang <dave.jiang@xxxxxxxxx>, "Vishal
Verma" <vishal.l.verma@xxxxxxxxx>, Ira Weiny <ira.weiny@xxxxxxxxx>, "Dan
Williams" <dan.j.williams@xxxxxxxxx>, Li Ming <ming.li@xxxxxxxxxxxx>, Fan Ni
<fan.ni@xxxxxxxxxxx>, "linux-cxl@xxxxxxxxxxxxxxx"
<linux-cxl@xxxxxxxxxxxxxxx>, "linux-kernel@xxxxxxxxxxxxxxx"
<linux-kernel@xxxxxxxxxxxxxxx>, "kernel-janitors@xxxxxxxxxxxxxxx"
<kernel-janitors@xxxxxxxxxxxxxxx>
Subject: RE: [PATCH next] cxl: fix return value in
cxlctl_validate_set_features()
Thread-Topic: [PATCH next] cxl: fix return value in
cxlctl_validate_set_features()
Thread-Index: AQHbz6gs+BvlS7zgN0afPd/wpn1fvrPoB9WAgAAuyyA=
Date: Wed, 28 May 2025 16:21:11 +0000
Message-ID: <3cf2e87f32934c6d84ede6415206a352@xxxxxxxxxx>
References: <aDbFPSCujpJLY1if@stanley.mountain>
<aDcqO5hlGrRXzIPT@xxxxxxxxxxxxxxxxxx>
In-Reply-To: <aDcqO5hlGrRXzIPT@xxxxxxxxxxxxxxxxxx>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
>-----Original Message-----
>From: Alison Schofield <alison.schofield@xxxxxxxxx>
>Sent: 28 May 2025 16:23
>To: Shiju Jose <shiju.jose@xxxxxxxxxx>; Dan Carpenter
><dan.carpenter@xxxxxxxxxx>
>Cc: Davidlohr Bueso <dave@xxxxxxxxxxxx>; Jonathan Cameron
><jonathan.cameron@xxxxxxxxxx>; Dave Jiang <dave.jiang@xxxxxxxxx>; Vishal
>Verma <vishal.l.verma@xxxxxxxxx>; Ira Weiny <ira.weiny@xxxxxxxxx>; Dan
>Williams <dan.j.williams@xxxxxxxxx>; Li Ming <ming.li@xxxxxxxxxxxx>; Fan N=
i
><fan.ni@xxxxxxxxxxx>; linux-cxl@xxxxxxxxxxxxxxx; linux-
>kernel@xxxxxxxxxxxxxxx; kernel-janitors@xxxxxxxxxxxxxxx
>Subject: Re: [PATCH next] cxl: fix return value in cxlctl_validate_set_fea=
tures()
>
>On Wed, May 28, 2025 at 11:11:41AM +0300, Dan Carpenter wrote:
>> The cxlctl_validate_set_features() function is type bool. It's
>> supposed to return true for valid requests and false for invalid.
>> However, this error path returns ERR_PTR(-EINVAL) which is true when
>> it was intended to return false.
>
>Shiju - Can you trace this one through and add the impact statement?
>Wondering if this is going to fail gracefully, or badly, further down this=
path?
Hi Alison,
This is introduced when following fwctl specific code
move out of common function (use both in fwctl and edac path)
get_support_feature_info() to fwctl specific function
cxlctl_validae_set_feature().
"if (rpc_in->op_size < sizeof(uuid_t))
return ERR_PTR(-EINVAL);"
This may have an impact on fwctl side if the above check pass.
Thanks,
Shiju
>
>>
>> Fixes: f76e0bbc8bc3 ("cxl: Update prototype of function
>> get_support_feature_info()")
>> Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
>> ---
>> drivers/cxl/core/features.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/cxl/core/features.c b/drivers/cxl/core/features.c
>> index 6f2eae1eb126..7c750599ea69 100644
>> --- a/drivers/cxl/core/features.c
>> +++ b/drivers/cxl/core/features.c
>> @@ -544,7 +544,7 @@ static bool cxlctl_validate_set_features(struct
>cxl_features_state *cxlfs,
>> u32 flags;
>>
>> if (rpc_in->op_size < sizeof(uuid_t))
>> - return ERR_PTR(-EINVAL);
>> + return false;
>>
>> feat =3D cxl_feature_info(cxlfs, &rpc_in->set_feat_in.uuid);
>> if (IS_ERR(feat))
>> --
>> 2.47.2
>>
Return-Path: <linux-kernel+bounces-665804-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 8625C41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:23:21 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 9D2B31BA5047
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:23:34 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 33CAE28C86C;
Wed, 28 May 2025 16:23:14 +0000 (UTC)
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id BE2EC7FBA2;
Wed, 28 May 2025 16:23:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449393; cv=none; b=c/Cqf4d+t9/GvMVYp0MRFHn+XwOMQHpvRBuKHyzyE0xeornDQVHFwX5Idgytqp+U7FIcBNV0xTVrqrBhKpo3UGHaQ2u4rape5GJuhMUapmFpueoYA7xNFnaFfbAB2UMAZlg79g2REMIRtJZ4L1e80IWlab7qVm6ZtTArU0GZELA=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449393; c=relaxed/simple;
bh=Ek5rSG5BO1yvKO7gJ/jMRzcJwVl+VmLvPQj0+E6hlJc=;
h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=RgZC2y4MCVus/G/Rouxc+dcruLziTKjuXb6C0A00gHj4aJEqSFOwUrEA93cJRvziGWdFRCGDf7qSXRY/MnA3K30+Z9D3AkxAclZkZrsn6a4PV43bMQBYtjBOno4AGYx8LGFezpCRNh/GbAmbR367aL4IyQkIj89QI1US4V0eo3U=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id C9547C4CEE3;
Wed, 28 May 2025 16:23:11 +0000 (UTC)
Date: Wed, 28 May 2025 12:24:11 -0400
From: Steven Rostedt <rostedt@xxxxxxxxxxx>
To: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>
Cc: Caleb Sander Mateos <csander@xxxxxxxxxxxxxxx>, Andrew Morton
<akpm@xxxxxxxxxxxxxxxxxxxx>, "Liam R . Howlett" <Liam.Howlett@xxxxxxxxxx>,
Masami Hiramatsu <mhiramat@xxxxxxxxxx>, Mathieu Desnoyers
<mathieu.desnoyers@xxxxxxxxxxxx>, Eric Mueller <emueller@xxxxxxxxxxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx, linux-trace-kernel@xxxxxxxxxxxxxxx,
linux-mm@xxxxxxxxx, Vlastimil Babka <vbabka@xxxxxxx>, Jann Horn
<jannh@xxxxxxxxxx>, Pedro Falcato <pfalcato@xxxxxxx>
Subject: Re: [PATCH] mm: remove unused mmap tracepoints
Message-ID: <20250528122411.16a551b1@xxxxxxxxxxxxxxxxxx>
In-Reply-To: <b694c72b-0873-4123-869c-134709341e19@lucifer.local>
References: <20250411161746.1043239-1-csander@xxxxxxxxxxxxxxx>
<3ucksa6coiwco3wpmcjtfwezqjigzm2zwvdvkt2ryvefzojtqy@4lda47c236uz>
<CADUfDZpPGQEY9u3p3MCU2S3qmDyKmE1JnSQ6G2jO4_J40rQeeQ@xxxxxxxxxxxxxx>
<20250528114549.4d8a5e03@xxxxxxxxxxxxxxxxxx>
<b694c72b-0873-4123-869c-134709341e19@lucifer.local>
X-Mailer: Claws Mail 3.20.0git84 (GTK+ 2.24.33; x86_64-pc-linux-gnu)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 16:48:10 +0100
Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx> wrote:
> Maybe reasonably straightforward with a clangd/ctags/etc. backend or
> something to track usage?
>
> In fact could do a quick-an'-dirty script to grep invocations and have a
> person run down the results to double-check or sth?
Yeah, I have a patch that shows how many static key instances exist and I
test that. But I probably could also add an option to the macro that
creates the trace function to also add something to a section when used,
and report when it isn't. Shouldn't be too hard.
-- Steve
Return-Path: <linux-kernel+bounces-665806-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 12AB341E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:23:48 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 2590F3A5535
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:23:27 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id D7A3F28CF7C;
Wed, 28 May 2025 16:23:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="KT0aTuo3"
Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.7])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 62D91244670;
Wed, 28 May 2025 16:23:30 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.7
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449412; cv=none; b=bpqkj4q8vJOmRjPSveqZKOVtuqohKt29PeZWMJminnS4TdevCPIEMSvw+B6Wuj5s6Ac4nWU25tTuZ0G4Eivu3B+kNg27NOFjHTbNajF9r13LRjV+V4dTQmZ09zCDnKQHSKRzjyVtnQNXgxQmpgmNKF6CmaBZvSj/9NWd1gkMEbE=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449412; c=relaxed/simple;
bh=cuyrb+k5/OZVTifVBSYnbWi26a1IZ56MqnHdcIIT5/g=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=ZD/Znva7mI/D0nWu+ZuO1OTLPC3PS3L5n710y7YNHRR0ufMowMLo9lwWfFc4P9oqCc+1BHnL3HF/kba0v1x9aimAWa9XwZi+pGbXy9Twco0uhAXJnFOmEZEYhipPLa3SIcKysnuzvB6EP0uXyqqc2e9jxLt6A3xCf27Dqtg1ElU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=KT0aTuo3; arc=none smtp.client-ip=192.198.163.7
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
t=1748449411; x=1779985411;
h=date:from:to:cc:subject:message-id:references:
mime-version:in-reply-to;
bh=cuyrb+k5/OZVTifVBSYnbWi26a1IZ56MqnHdcIIT5/g=;
b=KT0aTuo3RDkDd2zmcztFTSfZr/txcrc74vYIRdnWYl/QlapiXOZy3vM/
W0xZtHHH1vj0K1TeYBrH9i6y3DhXGkLgJCSjYleZtPS//3kgVSEM2/FlO
D8JpLZqlVfQSuHR33AT4cmVOnK1n6AQD+A2Cr28XCWWng8/5cpndMVdU9
wpIIBbyM+UFqYdffhLYTMjlMuORIJ47M+LMAelQRzAXwPqyGo8k6ABnVV
8t02Dbpi7No55Kr/hdr0c5hb2vNGp8gxANZx4O9sti75GVj6QGiNnvdZW
O1urVSqUVv7KF/yaKYN5NLbo+6HPDQO9TVgnBEzDDRNILn4WYbQdWdy9/
Q==;
X-CSE-ConnectionGUID: XNeIfQpTT7Kk5Kw3StOvkg==
X-CSE-MsgGUID: V9S/1UrNRJW+DSbHzVl8DA==
X-IronPort-AV: E=McAfee;i="6700,10204,11447"; a="75873562"
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="75873562"
Received: from fmviesa007.fm.intel.com ([10.60.135.147])
by fmvoesa101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2025 09:23:30 -0700
X-CSE-ConnectionGUID: rNRhxPlZTPqf4Kgi9QflkA==
X-CSE-MsgGUID: oIw3JplNSjaYtPOevmeJtA==
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="6.15,321,1739865600";
d="scan'208";a="143285594"
Received: from lkp-server01.sh.intel.com (HELO 1992f890471c) ([10.239.97.150])
by fmviesa007.fm.intel.com with ESMTP; 28 May 2025 09:23:25 -0700
Received: from kbuild by 1992f890471c with local (Exim 4.96)
(envelope-from <lkp@xxxxxxxxx>)
id 1uKJYo-000VrE-3D;
Wed, 28 May 2025 16:23:23 +0000
Date: Thu, 29 May 2025 00:22:37 +0800
From: kernel test robot <lkp@xxxxxxxxx>
To: Samuel Kayode via B4 Relay <devnull+samuel.kayode.savoirfairelinux.com@xxxxxxxxxx>,
Lee Jones <lee@xxxxxxxxxx>, Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
Liam Girdwood <lgirdwood@xxxxxxxxx>,
Mark Brown <broonie@xxxxxxxxxx>,
Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx>,
Sebastian Reichel <sre@xxxxxxxxxx>
Cc: oe-kbuild-all@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-input@xxxxxxxxxxxxxxx,
linux-pm@xxxxxxxxxxxxxxx,
Samuel Kayode <samuel.kayode@xxxxxxxxxxxxxxxxxxxx>,
eballetbo@xxxxxxxxx, abelvesa@xxxxxxxxx, b38343@xxxxxxxxxxxxx,
yibin.gong@xxxxxxx, Abel Vesa <abelvesa@xxxxxxxxxx>
Subject: Re: [PATCH v3 4/6] input: pf1550: add onkey support
Message-ID: <202505290028.2lbquDkW-lkp@xxxxxxxxx>
References: <20250527-pf1550-v3-4-45f69453cd51@xxxxxxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250527-pf1550-v3-4-45f69453cd51@xxxxxxxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Samuel,
kernel test robot noticed the following build warnings:
[auto build test WARNING on 0a4b866d08c6adaea2f4592d31edac6deeb4dcbd]
url: https://github.com/intel-lab-lkp/linux/commits/Samuel-Kayode-via-B4-Relay/dt-bindings-mfd-add-pf1550/20250528-062840
base: 0a4b866d08c6adaea2f4592d31edac6deeb4dcbd
patch link: https://lore.kernel.org/r/20250527-pf1550-v3-4-45f69453cd51%40savoirfairelinux.com
patch subject: [PATCH v3 4/6] input: pf1550: add onkey support
config: alpha-allyesconfig (https://download.01.org/0day-ci/archive/20250529/202505290028.2lbquDkW-lkp@xxxxxxxxx/config)
compiler: alpha-linux-gcc (GCC) 14.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250529/202505290028.2lbquDkW-lkp@xxxxxxxxx/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202505290028.2lbquDkW-lkp@xxxxxxxxx/
All warnings (new ones prefixed by >>):
>> drivers/input/misc/pf1550-onkey.c:153:12: warning: 'pf1550_onkey_resume' defined but not used [-Wunused-function]
153 | static int pf1550_onkey_resume(struct device *dev)
| ^~~~~~~~~~~~~~~~~~~
>> drivers/input/misc/pf1550-onkey.c:126:12: warning: 'pf1550_onkey_suspend' defined but not used [-Wunused-function]
126 | static int pf1550_onkey_suspend(struct device *dev)
| ^~~~~~~~~~~~~~~~~~~~
vim +/pf1550_onkey_resume +153 drivers/input/misc/pf1550-onkey.c
125
> 126 static int pf1550_onkey_suspend(struct device *dev)
127 {
128 struct platform_device *pdev = to_platform_device(dev);
129 struct onkey_drv_data *onkey = platform_get_drvdata(pdev);
130 struct irq_domain *domain;
131 unsigned int virq;
132 int i;
133
134 domain = regmap_irq_get_domain(onkey->pf1550->irq_data_onkey);
135
136 if (!device_may_wakeup(&pdev->dev)) {
137 regmap_write(onkey->pf1550->regmap,
138 PF1550_PMIC_REG_ONKEY_INT_MASK0,
139 ONKEY_IRQ_PUSHI | ONKEY_IRQ_1SI | ONKEY_IRQ_2SI |
140 ONKEY_IRQ_3SI | ONKEY_IRQ_4SI | ONKEY_IRQ_8SI);
141 } else {
142 for (i = 0; i < PF1550_ONKEY_IRQ_NR; i++) {
143 virq = irq_find_mapping(domain, i);
144
145 if (virq)
146 enable_irq_wake(virq);
147 }
148 }
149
150 return 0;
151 }
152
> 153 static int pf1550_onkey_resume(struct device *dev)
154 {
155 struct platform_device *pdev = to_platform_device(dev);
156 struct onkey_drv_data *onkey = platform_get_drvdata(pdev);
157 struct irq_domain *domain;
158 unsigned int virq;
159 int i;
160
161 domain = regmap_irq_get_domain(onkey->pf1550->irq_data_onkey);
162
163 if (!device_may_wakeup(&pdev->dev)) {
164 regmap_write(onkey->pf1550->regmap,
165 PF1550_PMIC_REG_ONKEY_INT_MASK0,
166 ~((u8)(ONKEY_IRQ_PUSHI | ONKEY_IRQ_1SI |
167 ONKEY_IRQ_2SI | ONKEY_IRQ_3SI | ONKEY_IRQ_4SI |
168 ONKEY_IRQ_8SI)));
169 } else {
170 for (i = 0; i < PF1550_ONKEY_IRQ_NR; i++) {
171 virq = irq_find_mapping(domain, i);
172
173 if (virq)
174 disable_irq_wake(virq);
175 }
176 }
177
178 return 0;
179 }
180
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Return-Path: <linux-kernel+bounces-665805-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id EC1B841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:24:03 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id 93CE01BA4D9C
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:24:15 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id A97C7244670;
Wed, 28 May 2025 16:23:37 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="J7IorarJ"
Received: from mail-lj1-f172.google.com (mail-lj1-f172.google.com [209.85.208.172])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 36768277813
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:23:23 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.172
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449410; cv=none; b=itfe1UPP3UZZC+aTeb/Y94Q+jLB8upIYqjR+nC/PQVz3QzeCwzhhfqhbVyyFJHcZdwYwJwNVMiyLjNswtfgeQfDD7NR8TPvnvH0bPXzc8wpbVlzAsO/jAcm1zsNJBKRNo3KMIHoY/uYCB+RE7Rgc2QQhuXHRZNaJXr8+Vi1XNvc=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449410; c=relaxed/simple;
bh=J4ao/fYUQyNONul74nbdcsLu0ghpKgT8rFIsaydP+4E=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=JoN6v+s6it4Lf5FySdjiaO6EJt/rLnZK74Syt8OQaJyhlzQbFSRkp/rb5/uLIS7EGGVeig8Z6YpTqFyoIaR4cuVK4STyhTP8Rni05ZGj7LUm249YjpF0mnUqjWx4WYsqzuOhu6nbpbEnliuR4aMf7u0bvdvPFaVu5iou/VvTqnM=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=J7IorarJ; arc=none smtp.client-ip=209.85.208.172
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org
Received: by mail-lj1-f172.google.com with SMTP id 38308e7fff4ca-32a72cb7e4dso19596931fa.0
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:23:23 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=chromium.org; s=google; t=1748449402; x=1749054202; darn=vger.kernel.org;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:from:to:cc:subject:date:message-id:reply-to;
bh=XKagSfHoD/cafTG/TWdOR+rDo93Q5VA9uQmUgVGn0tg=;
b=J7IorarJbjAFMwflDY5f59cpRY1HOXwv7C5jEJ54ToCqL3PUUrLKjjGc2uMM0gX64J
uEKY/68EMh3sLnAEf0bfnI3YYPT1QH/tKCyvbQRKT8kIc4XkpEloTMCuNC4m/UUlpA24
/fV59UqYZeQEwfkbvVBgl90CkfnkFCl2CS+tI=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748449402; x=1749054202;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=XKagSfHoD/cafTG/TWdOR+rDo93Q5VA9uQmUgVGn0tg=;
b=fIcwUIYGApVG88cWOP0GOgxSoQq5Fn5d8NZeXu1iEcJ9kNHtHBFevyZGRZE6Tq3X4f
YzTmeTN+NnpySU8PUYwW8Cj5RAL9JTu7lWoLzSmhLCbFcR1mi6p+ooxZsC7jCuhAXr9/
KoZSEsmU6owwh2AKO4oD9cR1y3SWtInTgPOxS/LaBLPjEa+AcwIrBaSYsOSSpa+SZlbX
UclBQ6SwdqbqCteoMMlzzacGyjr9yVoeyUM/CviOw7hzeUobb/BWQO/e9yhJORUKk3Rd
p5spgk1kDeWLxh8hPQBfXPr2tI2CaC2rj64wGA1p3A/9oHMmKmMoFxx/61a9H0mjiOzr
DB5Q==
X-Forwarded-Encrypted: i=1; AJvYcCWV1u805RKRjhf1dwGyjNlELHpLE4oGW0V8nZT7Go2b0rJySpKnxGeMF1zQudTHlz4gCy0Noa2qQU6CgRo=@vger.kernel.org
X-Gm-Message-State: AOJu0YyINCs+P61821WA5G6FYF4ou9WMW//fET/0m0QOjBPi15IWZnNZ
YYnrmn0O/o+ehEYOxu9QfLkA1uNbeJwgdgyMR5B7Lq9tx3EkBfCTS0+Lz4tqcSSGo7HanffviIk
Z24g=
X-Gm-Gg: ASbGncs47Vxv54vF9uye3ZRqqHyTRqEbagLM7t5a+LG2W+VuVXrn2VgXXnZpJstKjdq
2iLX2uDE5FLxxPMlrjsS7/S2DovpFpX8m30wbcY3u+ih+aPMvPVc52KiPau9B+JkZPvE6Ue6owG
YwF3d/YwKG1B8YROmDU+pSGkz0nxhsI9FAaWvc7So+oAqC1YdF3H19EegSKu0Zh1JLFn6KgbdrE
PbHn1z8JxDy47UtzNsG9a/QGZkwY1gSzTpxlv0AMkJWYB9zmq8CLEmC6f4eLzqn8MF2j4FHPTVe
6nSYsfridCYCbIv/cHbDYFciYqmrflDNpAcJ1cnCkiJPkg5N8AEHrqw8J/tP96pbGhyMjE99f4R
N3e5OVUw9YTiW2g==
X-Google-Smtp-Source: AGHT+IHII9zDxCVOKYyfHqOowHOsiHooWSPK4shTkWVPXUeqHI4pJ7LTJZnP7YLLVFDERJytf28I4g==
X-Received: by 2002:a05:651c:997:b0:32a:8035:3f6e with SMTP id 38308e7fff4ca-32a80354101mr6214411fa.9.1748449400823;
Wed, 28 May 2025 09:23:20 -0700 (PDT)
Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com. [209.85.167.50])
by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-32a79ee17bdsm3105591fa.61.2025.05.28.09.23.18
for <linux-kernel@xxxxxxxxxxxxxxx>
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
Wed, 28 May 2025 09:23:20 -0700 (PDT)
Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-551fc6d4a76so5319002e87.0
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:23:18 -0700 (PDT)
X-Forwarded-Encrypted: i=1; AJvYcCVre/a0RMfKngPKsmnAzALhiKrbFuZjwSLMR9pcfwOdFxF1F03DMuF08h8mZ6PfPP6eLofEj74UkSIGxxw=@vger.kernel.org
X-Received: by 2002:a05:6512:3091:b0:553:2518:bd26 with SMTP id
2adb3069b0e04-5532518bda2mr3321893e87.36.1748449396697; Wed, 28 May 2025
09:23:16 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250412-virtio-media-v3-1-97dc94c18398@xxxxxxxxx>
In-Reply-To: <20250412-virtio-media-v3-1-97dc94c18398@xxxxxxxxx>
From: Ricardo Ribalda <ribalda@xxxxxxxxxxxx>
Date: Wed, 28 May 2025 18:23:02 +0200
X-Gmail-Original-Message-ID: <CANiDSCsmbiveo4GHX54_q7-1CeKiDAVaGnb8+jsCybM+pyA7Fw@xxxxxxxxxxxxxx>
X-Gm-Features: AX0GCFv-EKps4Krvl4RGIg4xPaXRBVYD3AAk7emLsalnSjrYNd_smmu2b0X2Amg
Message-ID: <CANiDSCsmbiveo4GHX54_q7-1CeKiDAVaGnb8+jsCybM+pyA7Fw@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v3] media: add virtio-media driver
To: Alexandre Courbot <gnurou@xxxxxxxxx>
Cc: Mauro Carvalho Chehab <mchehab@xxxxxxxxxx>, Hans Verkuil <hverkuil@xxxxxxxxx>,
Albert Esteve <aesteve@xxxxxxxxxx>, "Michael S. Tsirkin" <mst@xxxxxxxxxx>, Jason Wang <jasowang@xxxxxxxxxx>,
Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx>, =?UTF-8?Q?Eugenio_P=C3=A9rez?= <eperezma@xxxxxxxxxx>,
gurchetansingh@xxxxxxxxxx, daniel.almeida@xxxxxxxxxxxxx, adelva@xxxxxxxxxx,
changyeon@xxxxxxxxxx, nicolas.dufresne@xxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, linux-media@xxxxxxxxxxxxxxx,
virtualization@xxxxxxxxxxxxxxx, Alexandre Courbot <acourbot@xxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Alexandre
On Sat, 12 Apr 2025 at 06:08, Alexandre Courbot <gnurou@xxxxxxxxx> wrote:
>
> Add the first version of the virtio-media driver.
>
> This driver acts roughly as a V4L2 relay between user-space and the
> virtio virtual device on the host, so it is relatively simple, yet
> unconventional. It doesn't use VB2 or other frameworks typically used in
> a V4L2 driver, and most of its complexity resides in correctly and
> efficiently building the virtio descriptor chain to pass to the host,
> avoiding copies whenever possible. This is done by
> scatterlist_builder.[ch].
>
> virtio_media_ioctls.c proxies each supported ioctl to the host, using
> code generated through macros for ioctls that can be forwarded directly,
> which is most of them.
>
> virtio_media_driver.c provides the expected driver hooks, and support
> for mmapping and polling.
>
> This version supports MMAP buffers, while USERPTR buffers can also be
> enabled through a driver option. DMABUF support is still pending.
>
> Signed-off-by: Alexandre Courbot <acourbot@xxxxxxxxxx>
> Signed-off-by: Alexandre Courbot <gnurou@xxxxxxxxx>
> ---
> This patch adds the virtio-media kernel driver. Virtio-media [1]
> encapsulates the V4L2 structures and protocol to enable the
> virtualization of host media devices into a guest. It's specification is
> in the final stages [2] of being merged and the virtualization of
> cameras and video accelerator devices has already been demonstrated
> using crosvm [3] and QEmu. v4l2-compliance also passes on all tested
> devices, which includes the "simple" virtual test device, proxied host
> UVC and vivid devices, and the FFmpeg virtual decoder devices (refer to
> [3] in order to test these if desired).
>
> Virtio-media is merged in AOSP [4] and ChromeOS. Upstreaming of the
> driver is overdue, but I hope we can start the review process and
> converge into something that can be merged.
>
> Limitations:
>
> - The driver is currently only available to little-endian, 64-bit
> kernels. This is because some of the V4L2 structures used for
> communication between guest and host have a layout dependent on the
> architecture, and the virtio-media protocol is standardized on the
> little-endian 64-bit versions. This can be fixed with a conversion
> layer similar to the one used to convert 32-bit ioctls to their 64-bit
> counterpart.
> - DMABUF support is currently missing. It should be implemented using
> virtio objects, with possible support for memfds using the
> SHARED_PAGES memory type.
> - No support for the media API and requests. While the use-case for
> these is less important on virtual devices where we want to present an
> abstraction as high as possible to limit VM exits, they do exist and
> it would be nice to add behind a virtio feature bit.
> - Locking in the driver is still very basic. This is something I want to
> improve before merging, but I didn't want to delay upstream review any
> further.
>
> [1] https://github.com/chromeos/virtio-media
> [2] https://lore.kernel.org/virtio-comment/20250304130134.1856056-1-aesteve@xxxxxxxxxx/
> [3] https://github.com/chromeos/virtio-media/blob/main/TRY_IT_OUT.md
> [4] https://android.googlesource.com/platform/external/virtio-media/
> ---
> Changes in v3:
> - Rebased on top of v6.15-rc1 and removes obsolete control callbacks.
> - Link to v2: https://lore.kernel.org/r/20250201-virtio-media-v2-1-ac840681452d@xxxxxxxxx
>
> Changes in v2:
> - Fixed kernel test robot and media CI warnings (ignored a few false
> positives).
> - Changed in-driver email address to personal one since my Google one
> will soon become invalid.
> - Link to v1: https://lore.kernel.org/r/20250123-virtio-media-v1-1-81e2549b86b9@xxxxxxxxx
> ---
> MAINTAINERS | 6 +
> drivers/media/Kconfig | 13 +
> drivers/media/Makefile | 2 +
> drivers/media/virtio/Makefile | 9 +
> drivers/media/virtio/protocol.h | 288 ++++++
> drivers/media/virtio/scatterlist_builder.c | 563 ++++++++++++
> drivers/media/virtio/scatterlist_builder.h | 111 +++
> drivers/media/virtio/session.h | 109 +++
> drivers/media/virtio/virtio_media.h | 93 ++
> drivers/media/virtio/virtio_media_driver.c | 959 ++++++++++++++++++++
> drivers/media/virtio/virtio_media_ioctls.c | 1297 ++++++++++++++++++++++++++++
> include/uapi/linux/virtio_ids.h | 1 +
> 12 files changed, 3451 insertions(+)
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 96b82704950184bd71623ff41fc4df31e4c7fe87..f60e17011124fe8c0be0343d4f87e1458f311dcc 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -25641,6 +25641,12 @@ S: Maintained
> F: drivers/iommu/virtio-iommu.c
> F: include/uapi/linux/virtio_iommu.h
>
> +VIRTIO MEDIA DRIVER
> +M: Alexandre Courbot <gnurou@xxxxxxxxx>
> +L: linux-media@xxxxxxxxxxxxxxx
> +S: Maintained
> +F: drivers/media/virtio/
> +
> VIRTIO MEM DRIVER
> M: David Hildenbrand <david@xxxxxxxxxx>
> L: virtualization@xxxxxxxxxxxxxxx
> diff --git a/drivers/media/Kconfig b/drivers/media/Kconfig
> index 6abc9302cd84d8563b7877d3d3da4b7e05a6b5d2..12bbb169c0b04565271092c7ac608b0fb11c0244 100644
> --- a/drivers/media/Kconfig
> +++ b/drivers/media/Kconfig
> @@ -230,6 +230,19 @@ source "drivers/media/platform/Kconfig"
> source "drivers/media/mmc/Kconfig"
> endif
>
> +config MEDIA_VIRTIO
> + tristate "Virtio-media Driver"
> + depends on VIRTIO && VIDEO_DEV && 64BIT && (X86 || (ARM && CPU_LITTLE_ENDIAN))
> + select VIDEOBUF2_CORE
> + select VIDEOBUF2_MEMOPS
> + help
> + Enables the virtio-media driver.
> +
> + This driver is used to virtualize media devices such as cameras or
> + decoders from a host into a guest using the V4L2 protocol.
> +
> + If unsure, say N.
> +
> if MEDIA_TEST_SUPPORT
> source "drivers/media/test-drivers/Kconfig"
> endif
> diff --git a/drivers/media/Makefile b/drivers/media/Makefile
> index 20fac24e4f0f13134c12cd859141c8b0387030fa..7a1377661919701f27f4fa2b5ee2dcb1045deb3c 100644
> --- a/drivers/media/Makefile
> +++ b/drivers/media/Makefile
> @@ -25,6 +25,8 @@ obj-y += rc/
>
> obj-$(CONFIG_CEC_CORE) += cec/
>
> +obj-$(CONFIG_MEDIA_VIRTIO) += virtio/
> +
> #
> # Finally, merge the drivers that require the core
> #
> diff --git a/drivers/media/virtio/Makefile b/drivers/media/virtio/Makefile
> new file mode 100644
> index 0000000000000000000000000000000000000000..16f91304420d70e1212cc46f3b12f314a510c051
> --- /dev/null
> +++ b/drivers/media/virtio/Makefile
> @@ -0,0 +1,9 @@
> +# SPDX-License-Identifier: GPL-2.0
> +#
> +# Makefile for the virtio-media device driver.
> +
> +virtio-media-objs := scatterlist_builder.o virtio_media_ioctls.o \
> + virtio_media_driver.o
> +
> +obj-$(CONFIG_MEDIA_VIRTIO) += virtio-media.o
> +
> diff --git a/drivers/media/virtio/protocol.h b/drivers/media/virtio/protocol.h
> new file mode 100644
> index 0000000000000000000000000000000000000000..a22758cda5aabe75c5c94ce8d1b40583c8652710
> --- /dev/null
> +++ b/drivers/media/virtio/protocol.h
> @@ -0,0 +1,288 @@
> +/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0+ */
> +
> +/*
> + * Definitions of virtio-media protocol structures.
> + *
> + * Copyright (c) 2024-2025 Google LLC.
> + */
> +
> +#ifndef __VIRTIO_MEDIA_PROTOCOL_H
> +#define __VIRTIO_MEDIA_PROTOCOL_H
> +
> +#include <linux/videodev2.h>
> +
> +/*
> + * Virtio protocol definition.
> + */
> +
> +/**
> + * struct virtio_media_cmd_header - Header for all virtio-media commands.
> + * @cmd: one of VIRTIO_MEDIA_CMD_*.
> + * @__reserved: must be set to zero by the driver.
> + *
> + * This header starts all commands from the driver to the device on the
> + * commandq.
> + */
> +struct virtio_media_cmd_header {
> + u32 cmd;
> + u32 __reserved;
> +};
> +
> +/**
> + * struct virtio_media_resp_header - Header for all virtio-media responses.
> + * @status: 0 if the command was successful, or one of the standard Linux error
> + * codes.
> + * @__reserved: must be set to zero by the device.
> + *
> + * This header starts all responses from the device to the driver on the
> + * commandq.
> + */
> +struct virtio_media_resp_header {
> + u32 status;
> + u32 __reserved;
> +};
> +
> +/**
> + * VIRTIO_MEDIA_CMD_OPEN - Command for creating a new session.
> + *
> + * This is the equivalent of calling `open` on a V4L2 device node. Upon
> + * success, a session id is returned which can be used to perform other
> + * commands on the session, notably ioctls.
> + */
> +#define VIRTIO_MEDIA_CMD_OPEN 1
> +
> +/**
> + * struct virtio_media_cmd_open - Driver command for VIRTIO_MEDIA_CMD_OPEN.
> + * @hdr: header with cmd member set to VIRTIO_MEDIA_CMD_OPEN.
> + */
> +struct virtio_media_cmd_open {
> + struct virtio_media_cmd_header hdr;
> +};
> +
> +/**
> + * struct virtio_media_resp_open - Device response for VIRTIO_MEDIA_CMD_OPEN.
> + * @hdr: header containing the status of the command.
> + * @session_id: if hdr.status == 0, contains the id of the newly created session.
> + * @__reserved: must be set to zero by the device.
> + */
> +struct virtio_media_resp_open {
> + struct virtio_media_resp_header hdr;
> + u32 session_id;
> + u32 __reserved;
> +};
> +
> +/**
> + * VIRTIO_MEDIA_CMD_CLOSE - Command for closing an active session.
> + *
> + * This is the equivalent of calling `close` on a previously opened V4L2
> + * session. All resources associated with this session will be freed and the
> + * session ID shall not be used again after queueing this command.
> + *
> + * This command does not require a response from the device.
> + */
> +#define VIRTIO_MEDIA_CMD_CLOSE 2
> +
> +/**
> + * struct virtio_media_cmd_close - Driver command for VIRTIO_MEDIA_CMD_CLOSE.
> + * @hdr: header with cmd member set to VIRTIO_MEDIA_CMD_CLOSE.
> + * @session_id: id of the session to close.
> + * @__reserved: must be set to zero by the driver.
> + */
> +struct virtio_media_cmd_close {
> + struct virtio_media_cmd_header hdr;
> + u32 session_id;
> + u32 __reserved;
> +};
> +
> +/**
> + * VIRTIO_MEDIA_CMD_IOCTL - Driver command for executing an ioctl.
> + *
> + * This command asks the device to run one of the `VIDIOC_*` ioctls on the
> + * active session.
> + *
> + * The code of the ioctl is extracted from the VIDIOC_* definitions in
> + * `videodev2.h`, and consists of the second argument of the `_IO*` macro.
> + *
> + * Each ioctl has a payload, which is defined by the third argument of the
> + * `_IO*` macro defining it. It can be writable by the driver (`_IOW`), the
> + * device (`_IOR`), or both (`_IOWR`).
> + *
> + * If an ioctl is writable by the driver, it must be followed by a
> + * driver-writable descriptor containing the payload.
> + *
> + * If an ioctl is writable by the device, it must be followed by a
> + * device-writable descriptor of the size of the payload that the device will
> + * write into.
> + *
> + */
> +#define VIRTIO_MEDIA_CMD_IOCTL 3
> +
> +/**
> + * struct virtio_media_cmd_ioctl - Driver command for VIRTIO_MEDIA_CMD_IOCTL.
> + * @hdr: header with cmd member set to VIRTIO_MEDIA_CMD_IOCTL.
> + * @session_id: id of the session to run the ioctl on.
> + * @code: code of the ioctl to run.
> + */
> +struct virtio_media_cmd_ioctl {
> + struct virtio_media_cmd_header hdr;
> + u32 session_id;
> + u32 code;
> +};
> +
> +/**
> + * struct virtio_media_resp_ioctl - Device response for VIRTIO_MEDIA_CMD_IOCTL.
> + * @hdr: header containing the status of the ioctl.
> + */
> +struct virtio_media_resp_ioctl {
> + struct virtio_media_resp_header hdr;
> +};
> +
> +/**
> + * struct virtio_media_sg_entry - Description of part of a scattered guest memory.
> + * @start: start guest address of the memory segment.
> + * @len: length of this memory segment.
> + * @__reserved: must be set to zero by the driver.
> + */
> +struct virtio_media_sg_entry {
> + u64 start;
> + u32 len;
> + u32 __reserved;
> +};
> +
> +/**
> + * enum virtio_media_memory - Memory types supported by virtio-media.
> + * @VIRTIO_MEDIA_MMAP: memory allocated and managed by device. Can be mapped
> + * into the guest using VIRTIO_MEDIA_CMD_MMAP.
> + * @VIRTIO_MEDIA_SHARED_PAGES: memory allocated by the driver. Passed to the
> + * device using virtio_media_sg_entry.
> + * @VIRTIO_MEDIA_OBJECT: memory backed by a virtio object.
> + */
> +enum virtio_media_memory {
> + VIRTIO_MEDIA_MMAP = V4L2_MEMORY_MMAP,
> + VIRTIO_MEDIA_SHARED_PAGES = V4L2_MEMORY_USERPTR,
> + VIRTIO_MEDIA_OBJECT = V4L2_MEMORY_DMABUF,
> +};
> +
> +#define VIRTIO_MEDIA_MMAP_FLAG_RW (1 << 0)
> +
> +/**
> + * VIRTIO_MEDIA_CMD_MMAP - Command for mapping a MMAP buffer into the driver's
> + * address space.
> + *
> + */
> +#define VIRTIO_MEDIA_CMD_MMAP 4
> +
> +/**
> + * struct virtio_media_cmd_mmap - Driver command for VIRTIO_MEDIA_CMD_MMAP.
> + * @hdr: header with cmd member set to VIRTIO_MEDIA_CMD_MMAP.
> + * @session_id: ID of the session we are mapping for.
> + * @flags: combination of VIRTIO_MEDIA_MMAP_FLAG_*.
> + * @offset: mem_offset field of the plane to map, as returned by VIDIOC_QUERYBUF.
> + */
> +struct virtio_media_cmd_mmap {
> + struct virtio_media_cmd_header hdr;
> + u32 session_id;
> + u32 flags;
> + u32 offset;
> +};
> +
> +/**
> + * struct virtio_media_resp_mmap - Device response for VIRTIO_MEDIA_CMD_MMAP.
> + * @hdr: header containing the status of the command.
> + * @driver_addr: offset into SHM region 0 of the start of the mapping.
> + * @len: length of the mapping.
> + */
> +struct virtio_media_resp_mmap {
> + struct virtio_media_resp_header hdr;
> + u64 driver_addr;
> + u64 len;
> +};
> +
> +/**
> + * VIRTIO_MEDIA_CMD_MUNMAP - Unmap a MMAP buffer previously mapped using
> + * VIRTIO_MEDIA_CMD_MMAP.
> + */
> +#define VIRTIO_MEDIA_CMD_MUNMAP 5
> +
> +/**
> + * struct virtio_media_cmd_munmap - Driver command for VIRTIO_MEDIA_CMD_MUNMAP.
> + * @hdr: header with cmd member set to VIRTIO_MEDIA_CMD_MUNMAP.
> + * @driver_addr: offset into SHM region 0 at which the buffer has been previously
> + * mapped.
> + */
> +struct virtio_media_cmd_munmap {
> + struct virtio_media_cmd_header hdr;
> + u64 driver_addr;
> +};
> +
> +/**
> + * struct virtio_media_resp_munmap - Device response for VIRTIO_MEDIA_CMD_MUNMAP.
> + * @hdr: header containing the status of the command.
> + */
> +struct virtio_media_resp_munmap {
> + struct virtio_media_resp_header hdr;
> +};
> +
> +#define VIRTIO_MEDIA_EVT_ERROR 0
> +#define VIRTIO_MEDIA_EVT_DQBUF 1
> +#define VIRTIO_MEDIA_EVT_EVENT 2
> +
> +/**
> + * struct virtio_media_event_header - Header for events on the eventq.
> + * @event: one of VIRTIO_MEDIA_EVT_*
> + * @session_id: ID of the session the event applies to.
> + */
> +struct virtio_media_event_header {
> + u32 event;
> + u32 session_id;
> +};
> +
> +/**
> + * struct virtio_media_event_error - Unrecoverable device-side error.
> + * @hdr: header for the event.
> + * @errno: error code describing the kind of error that occurred.
> + * @__reserved: must to set to zero by the device.
> + *
> + * Upon receiving this event, the session mentioned in the header is considered
> + * corrupted and closed.
> + *
> + */
> +struct virtio_media_event_error {
> + struct virtio_media_event_header hdr;
> + u32 errno;
> + u32 __reserved;
> +};
> +
> +#define VIRTIO_MEDIA_MAX_PLANES VIDEO_MAX_PLANES
> +
> +/**
> + * struct virtio_media_event_dqbuf - Dequeued buffer event.
> + * @hdr: header for the event.
> + * @buffer: struct v4l2_buffer describing the buffer that has been dequeued.
> + * @planes: plane information for the dequeued buffer.
> + *
> + * This event is used to signal that a buffer is not being used anymore by the
> + * device and is returned to the driver.
> + */
> +struct virtio_media_event_dqbuf {
> + struct virtio_media_event_header hdr;
> + struct v4l2_buffer buffer;
> + struct v4l2_plane planes[VIRTIO_MEDIA_MAX_PLANES];
> +};
> +
> +/**
> + * struct virtio_media_event_event - V4L2 event.
> + * @hdr: header for the event.
> + * @event: description of the event that occurred.
> + *
> + * This event signals that a V4L2 event has been emitted for a session.
> + */
> +struct virtio_media_event_event {
> + struct virtio_media_event_header hdr;
> + struct v4l2_event event;
> +};
> +
> +/* Maximum size of an event. We will queue descriptors of this size on the eventq. */
> +#define VIRTIO_MEDIA_EVENT_MAX_SIZE sizeof(struct virtio_media_event_dqbuf)
> +
> +#endif // __VIRTIO_MEDIA_PROTOCOL_H
> diff --git a/drivers/media/virtio/scatterlist_builder.c b/drivers/media/virtio/scatterlist_builder.c
> new file mode 100644
> index 0000000000000000000000000000000000000000..2837689f385e81c0c0a99ffd67ac583b426bf186
> --- /dev/null
> +++ b/drivers/media/virtio/scatterlist_builder.c
> @@ -0,0 +1,563 @@
> +// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0+
> +
> +/*
> + * Scatterlist builder helpers for virtio-media.
> + *
> + * Copyright (c) 2024-2025 Google LLC.
> + */
> +
> +#include <linux/moduleparam.h>
> +#include <linux/scatterlist.h>
> +#include <linux/videodev2.h>
> +#include <media/videobuf2-memops.h>
> +
> +#include "protocol.h"
> +#include "scatterlist_builder.h"
> +#include "session.h"
> +
> +/*
> + * If set to ``true``, then the driver will always copy the data passed to the
> + * host into the shadow buffer (instead of trying to map the source memory into
> + * the SG table directly when possible).
> + */
> +static bool always_use_shadow_buffer;
> +module_param(always_use_shadow_buffer, bool, 0660);
> +
> +/* Convert a V4L2 IOCTL into the IOCTL code we can give to the host */
> +#define VIRTIO_MEDIA_IOCTL_CODE(IOCTL) ((IOCTL >> _IOC_NRSHIFT) & _IOC_NRMASK)
> +
> +/**
> + * scatterlist_builder_add_descriptor() - Add a descriptor to the chain.
> + * @builder: builder to use.
> + * @desc_index: index of the descriptor to add.
> + *
> + * Returns ``-ENOSPC`` if ``sgs`` is already full.
> + */
> +int scatterlist_builder_add_descriptor(struct scatterlist_builder *builder,
> + size_t desc_index)
> +{
> + if (builder->cur_sg >= builder->num_sgs)
> + return -ENOSPC;
> + builder->sgs[builder->cur_sg++] = &builder->descs[desc_index];
> +
> + return 0;
> +}
> +
> +/**
> + * scatterlist_builder_add_data() - Append arbitrary data to the descriptor chain.
> + * @builder: builder to use.
> + * @data: pointer to the data to add to the descriptor chain.
> + * @len: length of the data to add.
> + *
> + * @data will either be directly referenced, or copied into the shadow buffer
> + * to be referenced from there.
> + */
> +int scatterlist_builder_add_data(struct scatterlist_builder *builder,
> + void *data, size_t len)
> +{
> + const size_t cur_desc = builder->cur_desc;
> +
> + if (len == 0)
> + return 0;
> +
> + if (builder->cur_desc >= builder->num_descs)
> + return -ENOSPC;
> +
> + if (!always_use_shadow_buffer && virt_addr_valid(data + len)) {
> + /*
> + * If "data" is in the 1:1 physical memory mapping then we can
> + * use a single SG entry and avoid copying.
> + */
> + struct page *page = virt_to_page(data);
> + size_t offset = (((size_t)data) & ~PAGE_MASK);
> + struct scatterlist *next_desc =
> + &builder->descs[builder->cur_desc];
> +
> + memset(next_desc, 0, sizeof(*next_desc));
> + sg_set_page(next_desc, page, len, offset);
> + builder->cur_desc++;
> + } else if (!always_use_shadow_buffer && is_vmalloc_addr(data)) {
> + int prev_pfn = -2;
> +
> + /*
> + * If "data" has been vmalloc'ed, we need at most one entry per
> + * memory page but can avoid copying.
> + */
> + while (len > 0) {
> + struct page *page = vmalloc_to_page(data);
> + int cur_pfn = page_to_pfn(page);
> + /* All pages but the first will start at offset 0. */
> + unsigned long offset =
> + (((unsigned long)data) & ~PAGE_MASK);
> + size_t len_in_page = min(PAGE_SIZE - offset, len);
> + struct scatterlist *next_desc =
> + &builder->descs[builder->cur_desc];
> +
> + if (builder->cur_desc >= builder->num_descs)
> + return -ENOSPC;
> +
> + /* Optimize contiguous pages */
> + if (cur_pfn == prev_pfn + 1) {
> + (next_desc - 1)->length += len_in_page;
> + } else {
> + memset(next_desc, 0, sizeof(*next_desc));
> + sg_set_page(next_desc, page, len_in_page,
> + offset);
> + builder->cur_desc++;
> + }
> + data += len_in_page;
> + len -= len_in_page;
> + prev_pfn = cur_pfn;
> + }
> + } else {
> + /*
> + * As a last resort, copy into the shadow buffer and reference
> + * it with a single SG entry. Calling
> + * `scatterlist_builder_retrieve_data` will be necessary to copy
> + * the data written by the device back into @data.
> + */
> + void *shadow_buffer =
> + builder->shadow_buffer + builder->shadow_buffer_pos;
> + struct page *page = virt_to_page(shadow_buffer);
> + unsigned long offset =
> + (((unsigned long)shadow_buffer) & ~PAGE_MASK);
> + struct scatterlist *next_desc =
> + &builder->descs[builder->cur_desc];
> +
> + if (len >
> + builder->shadow_buffer_size - builder->shadow_buffer_pos)
> + return -ENOSPC;
> +
> + memcpy(shadow_buffer, data, len);
> + memset(next_desc, 0, sizeof(*next_desc));
> + sg_set_page(next_desc, page, len, offset);
> + builder->cur_desc++;
> + builder->shadow_buffer_pos += len;
> + }
> +
> + sg_mark_end(&builder->descs[builder->cur_desc - 1]);
> + return scatterlist_builder_add_descriptor(builder, cur_desc);
> +}
> +
> +/**
> + * scatterlist_builder_retrieve_data() - Retrieve a response written by the
> + * device on the shadow buffer.
> + * @builder: builder to use.
> + * @sg_index: index of the descriptor to read from.
> + * @data: destination for the shadowed data.
> + *
> + * If the shadow buffer is pointed to by the descriptor at index @sg_index of
> + * the chain, then ``sg->length`` bytes are copied back from it into @data.
> + * Otherwise nothing is done since the device has written into @data directly.
> + *
> + * @data must have originally been added by ``scatterlist_builder_add_data`` as
> + * the same size as passed to ``scatterlist_builder_add_data`` will be copied
> + * back.
> + */
> +int scatterlist_builder_retrieve_data(struct scatterlist_builder *builder,
> + size_t sg_index, void *data)
> +{
> + void *shadow_buf = builder->shadow_buffer;
> + struct scatterlist *sg;
> + void *kaddr;
> +
> + /* We can only retrieve from the range of sgs currently set. */
> + if (sg_index >= builder->cur_sg)
> + return -ERANGE;
> +
> + sg = builder->sgs[sg_index];
> + kaddr = pfn_to_kaddr(page_to_pfn(sg_page(sg))) + sg->offset;
> +
> + if (kaddr >= shadow_buf &&
> + kaddr < shadow_buf + VIRTIO_SHADOW_BUF_SIZE) {
> + if (kaddr + sg->length >= shadow_buf + VIRTIO_SHADOW_BUF_SIZE)
> + return -EINVAL;
> +
> + memcpy(data, kaddr, sg->length);
> + }
> +
> + return 0;
> +}
> +
> +/**
> + * scatterlist_builder_add_ioctl_cmd() - Add an ioctl command to the descriptor
> + * chain.
> + * @builder: builder to use.
> + * @session: session on behalf of which the ioctl command is added.
> + * @ioctl_code: code of the ioctl to add (i.e. ``VIDIOC_*``).
> + */
> +int scatterlist_builder_add_ioctl_cmd(struct scatterlist_builder *builder,
> + struct virtio_media_session *session,
> + u32 ioctl_code)
> +{
> + struct virtio_media_cmd_ioctl *cmd_ioctl = &session->cmd.ioctl;
> +
> + cmd_ioctl->hdr.cmd = VIRTIO_MEDIA_CMD_IOCTL;
> + cmd_ioctl->session_id = session->id;
> + cmd_ioctl->code = VIRTIO_MEDIA_IOCTL_CODE(ioctl_code);
> +
> + return scatterlist_builder_add_data(builder, cmd_ioctl,
> + sizeof(*cmd_ioctl));
> +}
> +
> +/**
> + * scatterlist_builder_add_ioctl_resp() - Add storage to receive an ioctl
> + * response to the descriptor chain.
> + * @builder: builder to use.
> + * @session: session on behalf of which the ioctl response is added.
> + */
> +int scatterlist_builder_add_ioctl_resp(struct scatterlist_builder *builder,
> + struct virtio_media_session *session)
> +{
> + struct virtio_media_resp_ioctl *resp_ioctl = &session->resp.ioctl;
> +
> + return scatterlist_builder_add_data(builder, resp_ioctl,
> + sizeof(*resp_ioctl));
> +}
> +
> +/**
> + * __scatterlist_builder_add_userptr() - Add user pages to @builder.
> + * @builder: builder to use.
> + * @userptr: pointer to userspace memory that we want to add.
> + * @length: length of the data to add.
> + * @sg_list: output parameter. Upon success, points to the area of the shadow
> + * buffer containing the array of SG entries to be added to the descriptor
> + * chain.
> + * @nents: output parameter. Upon success, contains the number of entries
> + * pointed to by @sg_list.
> + *
> + * Data referenced by userspace pointers can be potentially large and very
> + * scattered, which could overwhelm the descriptor chain if added as-is. For
> + * these, we instead build an array of ``struct virtio_media_sg_entry`` in the
> + * shadow buffer and reference it using a single descriptor.
> + *
> + * This function is a helper to perform that. Callers should then add the
> + * descriptor to the chain properly.
> + *
> + * Returns -EFAULT if @userptr is not a valid user address, which is a case the
> + * driver should consider as "normal" operation. All other failures signal a
> + * problem with the driver.
> + */
> +static int
> +__scatterlist_builder_add_userptr(struct scatterlist_builder *builder,
> + unsigned long userptr, unsigned long length,
> + struct virtio_media_sg_entry **sg_list,
> + int *nents)
> +{
> + struct sg_table sg_table = {};
> + struct frame_vector *framevec;
> + struct scatterlist *sg_iter;
> + struct page **pages;
> + const unsigned int offset = userptr & ~PAGE_MASK;
> + unsigned int pages_count;
> + size_t entries_size;
> + int i;
> + int ret;
> +
> + framevec = vb2_create_framevec(userptr, length, true);
> + if (IS_ERR(framevec)) {
> + if (PTR_ERR(framevec) != -EFAULT) {
> + pr_warn("error %ld creating frame vector for userptr 0x%lx, length 0x%lx\n",
> + PTR_ERR(framevec), userptr, length);
> + } else {
> + /* -EINVAL is expected in case of invalid userptr. */
> + framevec = ERR_PTR(-EINVAL);
> + }
> + return PTR_ERR(framevec);
> + }
> +
> + pages = frame_vector_pages(framevec);
> + if (IS_ERR(pages)) {
> + pr_warn("error getting vector pages\n");
> + ret = PTR_ERR(pages);
> + goto done;
> + }
> + pages_count = frame_vector_count(framevec);
> + ret = sg_alloc_table_from_pages(&sg_table, pages, pages_count, offset,
> + length, 0);
> + if (ret) {
> + pr_warn("error creating sg table\n");
> + goto done;
> + }
> +
> + /* Allocate our actual SG in the shadow buffer. */
> + *nents = sg_nents(sg_table.sgl);
> + entries_size = sizeof(**sg_list) * *nents;
> + if (builder->shadow_buffer_pos + entries_size >
> + builder->shadow_buffer_size) {
> + ret = -ENOMEM;
> + goto free_sg;
> + }
> +
> + *sg_list = builder->shadow_buffer + builder->shadow_buffer_pos;
> + builder->shadow_buffer_pos += entries_size;
> +
> + for_each_sgtable_sg(&sg_table, sg_iter, i) {
> + struct virtio_media_sg_entry *sg_entry = &(*sg_list)[i];
> +
> + sg_entry->start = sg_phys(sg_iter);
> + sg_entry->len = sg_iter->length;
> + }
> +
> +free_sg:
> + sg_free_table(&sg_table);
> +
> +done:
> + vb2_destroy_framevec(framevec);
> + return ret;
> +}
> +
> +/**
> + * scatterlist_builder_add_userptr() - Add a user-memory buffer using an array
> + * of ``struct virtio_media_sg_entry``.
> + * @builder: builder to use.
> + * @userptr: pointer to userspace memory that we want to add.
> + * @length: length of the data to add.
> + *
> + * Upon success, an array of ``struct virtio_media_sg_entry`` referencing
> + * @userptr has been built into the shadow buffer, and that array added to the
> + * descriptor chain.
> + */
> +static int scatterlist_builder_add_userptr(struct scatterlist_builder *builder,
> + unsigned long userptr,
> + unsigned long length)
> +{
> + int ret;
> + int nents;
Could you initialize nents and sg_list?
old versions of gcc are a bit picky
https://gitlab.freedesktop.org/linux-media/users/ribalda/-/jobs/77042562#L4381
> + struct virtio_media_sg_entry *sg_list;
> +
> + ret = __scatterlist_builder_add_userptr(builder, userptr, length,
> + &sg_list, &nents);
> + if (ret)
> + return ret;
> +
> + ret = scatterlist_builder_add_data(builder, sg_list,
> + sizeof(*sg_list) * nents);
> + if (ret)
> + return ret;
> +
> + return 0;
> +}
> +
> +/**
> + * scatterlist_builder_add_buffer() - Add a ``v4l2_buffer`` and its planes to
> + * the descriptor chain.
> + * @builder: builder to use.
> + * @b: ``v4l2_buffer`` to add.
> + */
> +int scatterlist_builder_add_buffer(struct scatterlist_builder *builder,
> + struct v4l2_buffer *b)
> +{
> + int i;
> + int ret;
> +
> + /* Fixup: plane length must be zero if userptr is NULL */
> + if (!V4L2_TYPE_IS_MULTIPLANAR(b->type) &&
> + b->memory == V4L2_MEMORY_USERPTR && b->m.userptr == 0)
> + b->length = 0;
> +
> + /* v4l2_buffer */
> + ret = scatterlist_builder_add_data(builder, b, sizeof(*b));
> + if (ret)
> + return ret;
> +
> + if (V4L2_TYPE_IS_MULTIPLANAR(b->type) && b->length > 0) {
> + /* Fixup: plane length must be zero if userptr is NULL */
> + if (b->memory == V4L2_MEMORY_USERPTR) {
> + for (i = 0; i < b->length; i++) {
> + struct v4l2_plane *plane = &b->m.planes[i];
> +
> + if (plane->m.userptr == 0)
> + plane->length = 0;
> + }
> + }
> +
> + /* Array of v4l2_planes */
> + ret = scatterlist_builder_add_data(builder, b->m.planes,
> + sizeof(struct v4l2_plane) *
> + b->length);
> + if (ret)
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +/**
> + * scatterlist_builder_add_buffer_userptr() - Add the payload of a ``USERTPR``
> + * v4l2_buffer to the descriptor chain.
> + * @builder: builder to use.
> + * @b: ``v4l2_buffer`` which ``USERPTR`` payload we want to add.
> + *
> + * Add an array of ``virtio_media_sg_entry`` pointing to a ``USERPTR`` buffer's
> + * contents. Does nothing if the buffer is not of type ``USERPTR``. This is
> + * split out of :ref:`scatterlist_builder_add_buffer` because we only want to
> + * add these to the device-readable part of the descriptor chain.
> + */
> +int scatterlist_builder_add_buffer_userptr(struct scatterlist_builder *builder,
> + struct v4l2_buffer *b)
> +{
> + int i;
> + int ret;
> +
> + if (b->memory != V4L2_MEMORY_USERPTR)
> + return 0;
> +
> + if (V4L2_TYPE_IS_MULTIPLANAR(b->type)) {
> + for (i = 0; i < b->length; i++) {
> + struct v4l2_plane *plane = &b->m.planes[i];
> +
> + if (b->memory == V4L2_MEMORY_USERPTR &&
> + plane->length > 0) {
> + ret = scatterlist_builder_add_userptr(
> + builder, plane->m.userptr,
> + plane->length);
> + if (ret)
> + return ret;
> + }
> + }
> + } else if (b->length > 0) {
> + ret = scatterlist_builder_add_userptr(builder, b->m.userptr,
> + b->length);
> + if (ret)
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +/**
> + * scatterlist_builder_retrieve_buffer() - Retrieve a v4l2_buffer written by
> + * the device on the shadow buffer, if needed.
> + * @builder: builder to use.
> + * @sg_index: index of the first SG entry of the buffer in the builder's
> + * descriptor chain.
> + * @b: v4l2_buffer to copy shadow buffer data into.
> + * @orig_planes: the original ``planes`` pointer, to be restored if the buffer
> + * is multi-planar.
> + *
> + * If the v4l2_buffer pointed by @buffer_sgs was copied into the shadow buffer,
> + * then its updated content is copied back into @b. Otherwise nothing is done
> + * as the device has written into @b directly.
> + *
> + * @orig_planes is used to restore the original ``planes`` pointer in case it
> + * gets modified by the host. The specification stipulates that the host should
> + * not modify it, but we enforce this for additional safety.
> + */
> +int scatterlist_builder_retrieve_buffer(struct scatterlist_builder *builder,
> + size_t sg_index, struct v4l2_buffer *b,
> + struct v4l2_plane *orig_planes)
> +{
> + int ret;
> +
> + ret = scatterlist_builder_retrieve_data(builder, sg_index++, b);
> + if (ret)
> + return ret;
> +
> + if (V4L2_TYPE_IS_MULTIPLANAR(b->type)) {
> + b->m.planes = orig_planes;
> +
> + if (orig_planes != NULL) {
> + ret = scatterlist_builder_retrieve_data(
> + builder, sg_index++, b->m.planes);
> + if (ret)
> + return ret;
> + }
> + }
> +
> + return 0;
> +}
> +
> +/**
> + * scatterlist_builder_add_ext_ctrls() - Add a v4l2_ext_controls and its
> + * controls to @builder.
> + * @builder: builder to use.
> + * @ctrls: ``struct v4l2_ext_controls`` to add.
> + *
> + * Add @ctrls and its array of `struct v4l2_ext_control` to the descriptor chain.
> + */
> +int scatterlist_builder_add_ext_ctrls(struct scatterlist_builder *builder,
> + struct v4l2_ext_controls *ctrls)
> +{
> + int ret;
> +
> + /* v4l2_ext_controls */
> + ret = scatterlist_builder_add_data(builder, ctrls, sizeof(*ctrls));
> + if (ret)
> + return ret;
> +
> + if (ctrls->count > 0) {
> + /* array of v4l2_controls */
> + ret = scatterlist_builder_add_data(builder, ctrls->controls,
> + sizeof(ctrls->controls[0]) *
> + ctrls->count);
> + if (ret)
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +/**
> + * scatterlist_builder_add_ext_ctrls_userptrs() - Add the userspace payloads of
> + * a ``struct v4l2_ext_controls`` to the descriptor chain.
> + * @builder: builder to use.
> + * @ctrls: ``struct v4l2_ext_controls`` from which we want to add the userspace payload of.
> + *
> + * Add the userspace payloads of @ctrls to the descriptor chain. This is split
> + * out of :ref:`scatterlist_builder_add_ext_ctrls` because we only want to add
> + * these to the device-readable part of the descriptor chain.
> + */
> +int scatterlist_builder_add_ext_ctrls_userptrs(
> + struct scatterlist_builder *builder, struct v4l2_ext_controls *ctrls)
> +{
> + int i;
> + int ret;
> +
> + /* Pointers to user memory in individual controls */
> + for (i = 0; i < ctrls->count; i++) {
> + struct v4l2_ext_control *ctrl = &ctrls->controls[i];
> +
> + if (ctrl->size > 0) {
> + ret = scatterlist_builder_add_userptr(
> + builder, (unsigned long)ctrl->ptr, ctrl->size);
> + if (ret)
> + return ret;
> + }
> + }
> +
> + return 0;
> +}
> +
> +/**
> + * scatterlist_builder_retrieve_ext_ctrls() - Retrieve controls written by the
> + * device on the shadow buffer, if needed.
> + * @builder: builder to use.
> + * @sg_index: index of the first SG entry of the controls in the builder's
> + * descriptor chain.
> + * @ctrls: ``struct v4l2_ext_controls`` to copy shadow buffer data into.
> + *
> + * If the shadow buffer is pointed to by @sg, copy its content back into @ctrls.
> + */
> +int scatterlist_builder_retrieve_ext_ctrls(struct scatterlist_builder *builder,
> + size_t sg_index,
> + struct v4l2_ext_controls *ctrls)
> +{
> + struct v4l2_ext_control *controls_backup = ctrls->controls;
> + int ret;
> +
> + ret = scatterlist_builder_retrieve_data(builder, sg_index++, ctrls);
> + if (ret)
> + return ret;
> +
> + ctrls->controls = controls_backup;
> +
> + if (ctrls->count > 0 && ctrls->controls) {
> + ret = scatterlist_builder_retrieve_data(builder, sg_index++,
> + ctrls->controls);
> + if (ret)
> + return ret;
> + }
> +
> + return 0;
> +}
> diff --git a/drivers/media/virtio/scatterlist_builder.h b/drivers/media/virtio/scatterlist_builder.h
> new file mode 100644
> index 0000000000000000000000000000000000000000..c8323c31ac21953580a0b4a4cb366841e510666f
> --- /dev/null
> +++ b/drivers/media/virtio/scatterlist_builder.h
> @@ -0,0 +1,111 @@
> +/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0+ */
> +
> +/*
> + * Scatterlist builder helpers for virtio-media.
> + *
> + * Copyright (c) 2024-2025 Google LLC.
> + */
> +
> +#ifndef __VIRTIO_MEDIA_SCATTERLIST_BUILDER_H
> +#define __VIRTIO_MEDIA_SCATTERLIST_BUILDER_H
> +
> +#include <linux/scatterlist.h>
> +
> +#include "session.h"
> +
> +/**
> + * struct scatterlist_builder - helper to build a scatterlist from data.
> + * @descs: pool of descriptors to use.
> + * @num_descs: number of entries in descs.
> + * @cur_desc: next descriptor to be used in @descs.
> + * @shadow_buffer: pointer to a shadow buffer where elements that cannot be
> + * mapped directly into the scatterlist get copied.
> + * @shadow_buffer_size: size of @shadow_buffer.
> + * @shadow_buffer_pos: current position in @shadow_buffer.
> + * @sgs: descriptor chain to eventually pass to virtio functions.
> + * @num_sgs: total number of entries in @sgs.
> + * @cur_sg: next entry in @sgs to be used.
> + *
> + * Virtio passes data from the driver to the device (through e.g.
> + * ``virtqueue_add_sgs``) via a scatterlist that the device interprets as a
> + * linear view over scattered driver memory.
> + *
> + * In virtio-media, the payload of ioctls from user-space can for the most part
> + * be passed as-is, or after slight modification, which makes it tempting to
> + * just forward the ioctl payload received from user-space as-is instead of
> + * doing another copy into a dedicated buffer. This structure helps with this.
> + *
> + * virtio-media descriptor chains are typically made of the following parts:
> + *
> + * Device-readable:
> + * - A command structure, i.e. ``virtio_media_cmd_*``,
> + * - An ioctl payload (one of the regular ioctl parameters),
> + * - (optionally) arrays of ``virtio_media_sg_entry`` describing the content of
> + * buffers in guest memory.
> + *
> + * Device-writable:
> + * - A response structure, i.e. ``virtio_media_resp_*``,
> + * - An ioctl payload, that the device will write to.
> + *
> + * This structure helps laying out the descriptor chain into its @sgs member in
> + * an optimal way, by building a scatterlist adapted to the originating memory
> + * of the data we want to pass to the device while avoiding copies when
> + * possible.
> + *
> + * It is made of a pool of ``struct scatterlist`` (@descs) that is used to
> + * build the final descriptor chain @sgs, and a @shadow_buffer where data that
> + * cannot (or should not) be mapped directly by the host can be temporarily
> + * copied.
> + */
> +struct scatterlist_builder {
> + struct scatterlist *descs;
> + size_t num_descs;
> + size_t cur_desc;
> +
> + void *shadow_buffer;
> + size_t shadow_buffer_size;
> + size_t shadow_buffer_pos;
> +
> + struct scatterlist **sgs;
> + size_t num_sgs;
> + size_t cur_sg;
> +};
> +
> +int scatterlist_builder_add_descriptor(struct scatterlist_builder *builder,
> + size_t desc_index);
> +
> +int scatterlist_builder_add_data(struct scatterlist_builder *builder,
> + void *data, size_t len);
> +
> +int scatterlist_builder_retrieve_data(struct scatterlist_builder *builder,
> + size_t sg_index, void *data);
> +
> +int scatterlist_builder_add_ioctl_cmd(struct scatterlist_builder *builder,
> + struct virtio_media_session *session,
> + u32 ioctl_code);
> +
> +int scatterlist_builder_add_ioctl_resp(struct scatterlist_builder *builder,
> + struct virtio_media_session *session);
> +
> +int scatterlist_builder_add_buffer(struct scatterlist_builder *builder,
> + struct v4l2_buffer *buffer);
> +
> +int scatterlist_builder_add_buffer_userptr(struct scatterlist_builder *builder,
> + struct v4l2_buffer *b);
> +
> +int scatterlist_builder_retrieve_buffer(struct scatterlist_builder *builder,
> + size_t sg_index,
> + struct v4l2_buffer *buffer,
> + struct v4l2_plane *orig_planes);
> +
> +int scatterlist_builder_add_ext_ctrls(struct scatterlist_builder *builder,
> + struct v4l2_ext_controls *ctrls);
> +
> +int scatterlist_builder_add_ext_ctrls_userptrs(
> + struct scatterlist_builder *builder, struct v4l2_ext_controls *ctrls);
> +
> +int scatterlist_builder_retrieve_ext_ctrls(struct scatterlist_builder *builder,
> + size_t sg_index,
> + struct v4l2_ext_controls *ctrls);
> +
> +#endif // __VIRTIO_MEDIA_SCATTERLIST_BUILDER_H
> diff --git a/drivers/media/virtio/session.h b/drivers/media/virtio/session.h
> new file mode 100644
> index 0000000000000000000000000000000000000000..b643d0d950477d56d4bb5db481818a3912af5c1f
> --- /dev/null
> +++ b/drivers/media/virtio/session.h
> @@ -0,0 +1,109 @@
> +/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0+ */
> +
> +/*
> + * Definitions of virtio-media session related structures.
> + *
> + * Copyright (c) 2024-2025 Google LLC.
> + */
> +
> +#ifndef __VIRTIO_MEDIA_SESSION_H
> +#define __VIRTIO_MEDIA_SESSION_H
> +
> +#include <linux/scatterlist.h>
> +#include <media/v4l2-fh.h>
> +
> +#include "protocol.h"
> +
> +#define VIRTIO_MEDIA_LAST_QUEUE (V4L2_BUF_TYPE_META_OUTPUT)
> +
> +/*
> + * Size of the per-session virtio shadow and event buffers. 16K should be
> + * enough to contain everything we need.
> + */
> +#define VIRTIO_SHADOW_BUF_SIZE 0x4000
> +
> +/**
> + * struct virtio_media_buffer - Current state of a buffer.
> + * @buffer: ``struct v4l2_buffer`` with current information about the buffer.
> + * @planes: backing planes array for @buffer.
> + * @list: link into the list of buffers pending dequeue.
> + */
> +struct virtio_media_buffer {
> + struct v4l2_buffer buffer;
> + struct v4l2_plane planes[VIDEO_MAX_PLANES];
> + struct list_head list;
> +};
> +
> +/**
> + * struct virtio_media_queue_state - Represents the state of a V4L2 queue.
> + * @streaming: Whether the queue is currently streaming.
> + * @allocated_bufs: How many buffers are currently allocated.
> + * @is_capture_last: set to true when the last buffer has been received on a
> + * capture queue, so we can return -EPIPE on subsequent DQBUF requests.
> + * @buffers: Buffer state array of size @allocated_bufs.
> + * @queued_bufs: How many buffers are currently queued on the device.
> + * @pending_dqbufs: Buffers that are available for being dequeued.
> + */
> +struct virtio_media_queue_state {
> + bool streaming;
> + size_t allocated_bufs;
> + bool is_capture_last;
> +
> + struct virtio_media_buffer *buffers;
> + size_t queued_bufs;
> + struct list_head pending_dqbufs;
> +};
> +
> +/**
> + * struct virtio_media_session - A session on a virtio_media device.
> + * @fh: file handler for the session.
> + * @id: session ID used to communicate with the device.
> + * @nonblocking_dequeue: whether dequeue should block or not (nonblocking if
> + * file opened with O_NONBLOCK).
> + * @uses_mplane: whether the queues for this session use the MPLANE API or not.
> + * @cmd: union of session-related commands. A session can have one command currently running.
> + * @resp: union of session-related responses. A session can wait on one command only.
> + * @shadow_buf: shadow buffer where data to be added to the descriptor chain can
> + * be staged before being sent to the device.
> + * @command_sgs: SG table gathering descriptors for a given command and its response.
> + * @queues: state of all the queues for this session.
> + * @queues_lock: protects all members fo the queues for this session.
> + * virtio_media_queue_state`.
> + * @dqbuf_wait: waitqueue for dequeued buffers, if ``VIDIOC_DQBUF`` needs to
> + * block or when polling.
> + * @list: link into the list of sessions for the device.
> + */
> +struct virtio_media_session {
> + struct v4l2_fh fh;
> + u32 id;
> + bool nonblocking_dequeue;
> + bool uses_mplane;
> +
> + union {
> + struct virtio_media_cmd_close close;
> + struct virtio_media_cmd_ioctl ioctl;
> + struct virtio_media_cmd_mmap mmap;
> + } cmd;
> +
> + union {
> + struct virtio_media_resp_ioctl ioctl;
> + struct virtio_media_resp_mmap mmap;
> + } resp;
> +
> + void *shadow_buf;
> +
> + struct sg_table command_sgs;
> +
> + struct virtio_media_queue_state queues[VIRTIO_MEDIA_LAST_QUEUE + 1];
> + struct mutex queues_lock;
> + wait_queue_head_t dqbuf_wait;
> +
> + struct list_head list;
> +};
> +
> +static inline struct virtio_media_session *fh_to_session(struct v4l2_fh *fh)
> +{
> + return container_of(fh, struct virtio_media_session, fh);
> +}
> +
> +#endif // __VIRTIO_MEDIA_SESSION_H
> diff --git a/drivers/media/virtio/virtio_media.h b/drivers/media/virtio/virtio_media.h
> new file mode 100644
> index 0000000000000000000000000000000000000000..0aa503defdd6a08e12335276f7ccbabc3d53df09
> --- /dev/null
> +++ b/drivers/media/virtio/virtio_media.h
> @@ -0,0 +1,93 @@
> +/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0+ */
> +
> +/*
> + * Virtio-media structures & functions declarations.
> + *
> + * Copyright (c) 2024-2025 Google LLC.
> + */
> +
> +#ifndef __VIRTIO_MEDIA_H
> +#define __VIRTIO_MEDIA_H
> +
> +#include <linux/virtio_config.h>
> +#include <media/v4l2-device.h>
> +
> +#include "protocol.h"
> +
> +#define DESC_CHAIN_MAX_LEN SG_MAX_SINGLE_ALLOC
> +
> +#define VIRTIO_MEDIA_DEFAULT_DRIVER_NAME "virtio-media"
> +
> +extern char *virtio_media_driver_name;
> +extern bool virtio_media_allow_userptr;
> +
> +/**
> + * struct virtio_media - Virtio-media device.
> + * @v4l2_dev: v4l2_device for the media device.
> + * @video_dev: video_device for the media device.
> + * @virtio_dev: virtio device for the media device.
> + * @commandq: virtio command queue.
> + * @eventq: virtio event queue.
> + * @eventq_work: work to run when events are received on @eventq.
> + * @mmap_region: region into which MMAP buffers are mapped by the host.
> + * @event_buffer: buffer for event descriptors.
> + * @sessions: list of active sessions on the device.
> + * @sessions_lock: protects @sessions and ``virtio_media_session::list``.
> + * @events_lock: prevents concurrent processing of events.
> + * @cmd: union of device-related commands.
> + * @resp: union of device-related responses.
> + * @vlock: serializes access to the command queue.
> + * @wq: waitqueue for host responses on the command queue.
> + */
> +struct virtio_media {
> + struct v4l2_device v4l2_dev;
> + struct video_device video_dev;
> +
> + struct virtio_device *virtio_dev;
> + struct virtqueue *commandq;
> + struct virtqueue *eventq;
> + struct work_struct eventq_work;
> +
> + struct virtio_shm_region mmap_region;
> +
> + void *event_buffer;
> +
> + struct list_head sessions;
> + struct mutex sessions_lock;
> +
> + struct mutex events_lock;
> +
> + union {
> + struct virtio_media_cmd_open open;
> + struct virtio_media_cmd_munmap munmap;
> + } cmd;
> +
> + union {
> + struct virtio_media_resp_open open;
> + struct virtio_media_resp_munmap munmap;
> + } resp;
> +
> + struct mutex vlock;
> + wait_queue_head_t wq;
> +};
> +
> +static inline struct virtio_media *
> +to_virtio_media(struct video_device *video_dev)
> +{
> + return container_of(video_dev, struct virtio_media, video_dev);
> +}
> +
> +/* virtio_media_driver.c */
> +
> +int virtio_media_send_command(struct virtio_media *vv, struct scatterlist **sgs,
> + const size_t out_sgs, const size_t in_sgs,
> + size_t minimum_resp_len, size_t *resp_len);
> +void virtio_media_process_events(struct virtio_media *vv);
> +
> +/* virtio_media_ioctls.c */
> +
> +long virtio_media_device_ioctl(struct file *file, unsigned int cmd,
> + unsigned long arg);
> +extern const struct v4l2_ioctl_ops virtio_media_ioctl_ops;
> +
> +#endif // __VIRTIO_MEDIA_H
> diff --git a/drivers/media/virtio/virtio_media_driver.c b/drivers/media/virtio/virtio_media_driver.c
> new file mode 100644
> index 0000000000000000000000000000000000000000..e8d6dc453f2240c7809152c2a04813120bd3aca2
> --- /dev/null
> +++ b/drivers/media/virtio/virtio_media_driver.c
> @@ -0,0 +1,959 @@
> +// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0+
> +
> +/*
> + * Virtio-media driver.
> + *
> + * Copyright (c) 2024-2025 Google LLC.
> + */
> +
> +#include <linux/delay.h>
> +#include <linux/device.h>
> +#include <linux/dev_printk.h>
> +#include <linux/mm.h>
> +#include <linux/mutex.h>
> +#include <linux/scatterlist.h>
> +#include <linux/types.h>
> +#include <linux/videodev2.h>
> +#include <linux/vmalloc.h>
> +#include <linux/wait.h>
> +#include <linux/workqueue.h>
> +#include <linux/module.h>
> +#include <linux/moduleparam.h>
> +#include <linux/virtio.h>
> +#include <linux/virtio_config.h>
> +#include <linux/virtio_ids.h>
> +
> +#include <media/frame_vector.h>
> +#include <media/v4l2-dev.h>
> +#include <media/v4l2-event.h>
> +#include <media/videobuf2-memops.h>
> +#include <media/v4l2-device.h>
> +#include <media/v4l2-ioctl.h>
> +
> +#include "protocol.h"
> +#include "session.h"
> +#include "virtio_media.h"
> +
> +#define VIRTIO_MEDIA_NUM_EVENT_BUFS 16
> +
> +/* ID of the SHM region into which MMAP buffer will be mapped. */
> +#define VIRTIO_MEDIA_SHM_MMAP 0
> +
> +/*
> + * Name of the driver to expose to user-space.
> + *
> + * This is configurable because v4l2-compliance has workarounds specific to
> + * some drivers. When proxying these directly from the host, this allows it to
> + * apply them as needed.
> + */
> +char *virtio_media_driver_name;
> +module_param_named(driver_name, virtio_media_driver_name, charp, 0660);
> +
> +/*
> + * Whether USERPTR buffers are allowed.
> + *
> + * This is disabled by default as USERPTR buffers are dangerous, but the option
> + * is left to enable them if desired.
> + */
> +bool virtio_media_allow_userptr;
> +module_param_named(allow_userptr, virtio_media_allow_userptr, bool, 0660);
> +
> +/**
> + * virtio_media_session_alloc - Allocate a new session.
> + * @vv: virtio-media device the session belongs to.
> + * @id: ID of the session.
> + * @nonblocking_dequeue: whether dequeuing of buffers should be blocking or
> + * not.
> + *
> + * The ``id`` and ``list`` fields must still be set by the caller.
> + */
> +static struct virtio_media_session *
> +virtio_media_session_alloc(struct virtio_media *vv, u32 id,
> + bool nonblocking_dequeue)
> +{
> + struct virtio_media_session *session;
> + int i;
> + int ret;
> +
> + session = kzalloc(sizeof(*session), GFP_KERNEL);
> + if (!session)
> + goto err_session;
> +
> + session->shadow_buf = kzalloc(VIRTIO_SHADOW_BUF_SIZE, GFP_KERNEL);
> + if (!session->shadow_buf)
> + goto err_shadow_buf;
> +
> + ret = sg_alloc_table(&session->command_sgs, DESC_CHAIN_MAX_LEN,
> + GFP_KERNEL);
> + if (ret)
> + goto err_payload_sgs;
> +
> + session->id = id;
> + session->nonblocking_dequeue = nonblocking_dequeue;
> +
> + INIT_LIST_HEAD(&session->list);
> + v4l2_fh_init(&session->fh, &vv->video_dev);
> + v4l2_fh_add(&session->fh);
> +
> + for (i = 0; i <= VIRTIO_MEDIA_LAST_QUEUE; i++)
> + INIT_LIST_HEAD(&session->queues[i].pending_dqbufs);
> + mutex_init(&session->queues_lock);
> +
> + init_waitqueue_head(&session->dqbuf_wait);
> +
> + mutex_lock(&vv->sessions_lock);
> + list_add_tail(&session->list, &vv->sessions);
> + mutex_unlock(&vv->sessions_lock);
> +
> + return session;
> +
> +err_payload_sgs:
> + kfree(session->shadow_buf);
> +err_shadow_buf:
> + kfree(session);
> +err_session:
> + return ERR_PTR(-ENOMEM);
> +}
> +
> +/**
> + * virtio_media_session_free - Free all resources of a session.
> + * @vv: virtio-media device the session belongs to.
> + * @session: session to destroy.
> + *
> + * All the resources of @sesssion, as well as the backing memory of @session
> + * itself, are freed.
> + */
> +static void virtio_media_session_free(struct virtio_media *vv,
> + struct virtio_media_session *session)
> +{
> + int i;
> +
> + mutex_lock(&vv->sessions_lock);
> + list_del(&session->list);
> + mutex_unlock(&vv->sessions_lock);
> +
> + v4l2_fh_del(&session->fh);
> + v4l2_fh_exit(&session->fh);
> +
> + sg_free_table(&session->command_sgs);
> +
> + for (i = 0; i <= VIRTIO_MEDIA_LAST_QUEUE; i++)
> + vfree(session->queues[i].buffers);
> +
> + kfree(session->shadow_buf);
> + kfree(session);
> +}
> +
> +/**
> + * virtio_media_session_close - Close and free a session.
> + * @vv: virtio-media device the session belongs to.
> + * @session: session to close and destroy.
> + *
> + * This send the ``VIRTIO_MEDIA_CMD_CLOSE`` command to the device, and frees
> + * all resources used by @session.
> + */
> +static int virtio_media_session_close(struct virtio_media *vv,
> + struct virtio_media_session *session)
> +{
> + struct virtio_media_cmd_close *cmd_close = &session->cmd.close;
> + struct scatterlist cmd_sg = {};
> + struct scatterlist *sgs[1] = { &cmd_sg };
> + int ret;
> +
> + mutex_lock(&vv->vlock);
> +
> + cmd_close->hdr.cmd = VIRTIO_MEDIA_CMD_CLOSE;
> + cmd_close->session_id = session->id;
> +
> + sg_set_buf(&cmd_sg, cmd_close, sizeof(*cmd_close));
> + sg_mark_end(&cmd_sg);
> +
> + ret = virtio_media_send_command(vv, sgs, 1, 0, 0, NULL);
> + mutex_unlock(&vv->vlock);
> + if (ret < 0)
> + return ret;
> +
> + virtio_media_session_free(vv, session);
> +
> + return 0;
> +}
> +
> +/**
> + * virtio_media_find_session - Lookup for the session with a given ID.
> + * @vv: virtio-media device to lookup the session from.
> + * @id: ID of the session to lookup.
> + */
> +static struct virtio_media_session *
> +virtio_media_find_session(struct virtio_media *vv, u32 id)
> +{
> + struct list_head *p;
> + struct virtio_media_session *session = NULL;
> +
> + mutex_lock(&vv->sessions_lock);
> + list_for_each(p, &vv->sessions) {
> + struct virtio_media_session *s =
> + list_entry(p, struct virtio_media_session, list);
> + if (s->id == id) {
> + session = s;
> + break;
> + }
> + }
> + mutex_unlock(&vv->sessions_lock);
> +
> + return session;
> +}
> +
> +/**
> + * struct virtio_media_cmd_callback_param - Callback parameters to the virtio command queue.
> + * @vv: virtio-media device in use.
> + * @done: flag to be switched once the command is completed.
> + * @resp_len: length of the received response from the command. Only valid
> + * after @done_flag has switched to ``true``.
> + */
> +struct virtio_media_cmd_callback_param {
> + struct virtio_media *vv;
> + bool done;
> + size_t resp_len;
> +};
> +
> +/**
> + * commandq_callback: Callback for the command queue.
> + * @queue: command virtqueue.
> + *
> + * This just wakes up the thread that was waiting on the command to complete.
> + */
> +static void commandq_callback(struct virtqueue *queue)
> +{
> + unsigned int len;
> + struct virtio_media_cmd_callback_param *param;
> +
> +process_bufs:
> + while ((param = virtqueue_get_buf(queue, &len))) {
> + param->done = true;
> + param->resp_len = len;
> + wake_up(¶m->vv->wq);
> + }
> +
> + if (!virtqueue_enable_cb(queue)) {
> + virtqueue_disable_cb(queue);
> + goto process_bufs;
> + }
> +}
> +
> +/**
> + * virtio_media_kick_command - send a command to the commandq.
> + * @vv: virtio-media device in use.
> + * @sgs: descriptor chain to send.
> + * @out_sgs: number of device-readable descriptors in @sgs.
> + * @in_sgs: number of device-writable descriptors in @sgs.
> + * @resp_len: output parameter. Upon success, contains the size of the response
> + * in bytes.
> + *
> + */
> +static int virtio_media_kick_command(struct virtio_media *vv,
> + struct scatterlist **sgs,
> + const size_t out_sgs, const size_t in_sgs,
> + size_t *resp_len)
> +{
> + struct virtio_media_cmd_callback_param cb_param = {
> + .vv = vv,
> + .done = false,
> + .resp_len = 0,
> + };
> + struct virtio_media_resp_header *resp_header;
> + int ret;
> +
> + ret = virtqueue_add_sgs(vv->commandq, sgs, out_sgs, in_sgs, &cb_param,
> + GFP_ATOMIC);
> + if (ret) {
> + v4l2_err(&vv->v4l2_dev,
> + "failed to add sgs to command virtqueue\n");
> + return ret;
> + }
> +
> + if (!virtqueue_kick(vv->commandq)) {
> + v4l2_err(&vv->v4l2_dev, "failed to kick command virtqueue\n");
> + return -EINVAL;
> + }
> +
> + /* Wait for the response. */
> + ret = wait_event_timeout(vv->wq, cb_param.done, 5 * HZ);
> + if (ret == 0) {
> + v4l2_err(&vv->v4l2_dev,
> + "timed out waiting for response to command\n");
> + return -ETIMEDOUT;
> + }
> +
> + if (resp_len)
> + *resp_len = cb_param.resp_len;
> +
> + if (in_sgs > 0) {
> + /*
> + * If we expect a response, make sure we have at least a
> + * response header - anything shorter is invalid.
> + */
> + if (cb_param.resp_len < sizeof(*resp_header)) {
> + v4l2_err(&vv->v4l2_dev,
> + "received response header is too short\n");
> + return -EINVAL;
> + }
> +
> + resp_header = sg_virt(sgs[out_sgs]);
> + if (resp_header->status)
> + /* Host returns a positive error code. */
> + return -resp_header->status;
> + }
> +
> + return 0;
> +}
> +
> +/**
> + * virtio_media_send_command - Send a command to the device and wait for its
> + * response.
> + * @vv: virtio-media device in use.
> + * @sgs: descriptor chain to send.
> + * @out_sgs: number of device-readable descriptors in @sgs.
> + * @in_sgs: number of device-writable descriptors in @sgs.
> + * @minimum_resp_len: minimum length of the response expected by the caller
> + * when the command is successful. Anything shorter than that will result in
> + * ``-EINVAL`` being returned.
> + * @resp_len: output parameter. Upon success, contains the size of the response
> + * in bytes.
> + */
> +int virtio_media_send_command(struct virtio_media *vv, struct scatterlist **sgs,
> + const size_t out_sgs, const size_t in_sgs,
> + size_t minimum_resp_len, size_t *resp_len)
> +{
> + size_t local_resp_len = resp_len ? *resp_len : 0;
> + int ret = virtio_media_kick_command(vv, sgs, out_sgs, in_sgs,
> + &local_resp_len);
> + if (resp_len)
> + *resp_len = local_resp_len;
> +
> + /* If the host could not process the command, there is no valid response */
> + if (ret < 0)
> + return ret;
> +
> + /* Make sure the host wrote a complete reply. */
> + if (local_resp_len < minimum_resp_len) {
> + v4l2_err(
> + &vv->v4l2_dev,
> + "received response is too short: received %zu, expected at least %zu\n",
> + local_resp_len, minimum_resp_len);
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
> +
> +/**
> + * virtio_media_send_event_buffer() - Sends an event buffer to the host so it
> + * can return it with an event.
> + * @vv: virtio-media device in use.
> + * @event_buffer: pointer to the event buffer to send to the device.
> + */
> +static int virtio_media_send_event_buffer(struct virtio_media *vv,
> + void *event_buffer)
> +{
> + struct scatterlist *sgs[1], vresp;
> + int ret;
> +
> + sg_init_one(&vresp, event_buffer, VIRTIO_MEDIA_EVENT_MAX_SIZE);
> + sgs[0] = &vresp;
> +
> + ret = virtqueue_add_sgs(vv->eventq, sgs, 0, 1, event_buffer,
> + GFP_ATOMIC);
> + if (ret) {
> + v4l2_err(&vv->v4l2_dev,
> + "failed to add sgs to event virtqueue\n");
> + return ret;
> + }
> +
> + if (!virtqueue_kick(vv->eventq)) {
> + v4l2_err(&vv->v4l2_dev, "failed to kick event virtqueue\n");
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
> +
> +/**
> + * eventq_callback() - Callback for the event queue.
> + * @queue: event virtqueue.
> + *
> + * This just schedules for event work to be run.
> + */
> +static void eventq_callback(struct virtqueue *queue)
> +{
> + struct virtio_media *vv = queue->vdev->priv;
> +
> + schedule_work(&vv->eventq_work);
> +}
> +
> +/**
> + * virtio_media_process_dqbuf_event() - Process a dequeued event for a session.
> + * @vv: virtio-media device in use.
> + * @session: session the event is addressed to.
> + * @dqbuf_evt: the dequeued event to process.
> + *
> + * Invalid events are ignored with an error log.
> + */
> +static void
> +virtio_media_process_dqbuf_event(struct virtio_media *vv,
> + struct virtio_media_session *session,
> + struct virtio_media_event_dqbuf *dqbuf_evt)
> +{
> + struct virtio_media_buffer *dqbuf;
> + const enum v4l2_buf_type queue_type = dqbuf_evt->buffer.type;
> + struct virtio_media_queue_state *queue;
> + typeof(dqbuf->buffer.m) buffer_m;
> + typeof(dqbuf->buffer.m.planes[0].m) plane_m;
> + int i;
> +
> + if (queue_type >= ARRAY_SIZE(session->queues)) {
> + v4l2_err(&vv->v4l2_dev,
> + "unmanaged queue %d passed to dqbuf event",
> + dqbuf_evt->buffer.type);
> + return;
> + }
> + queue = &session->queues[queue_type];
> +
> + if (dqbuf_evt->buffer.index >= queue->allocated_bufs) {
> + v4l2_err(&vv->v4l2_dev,
> + "invalid buffer ID %d for queue %d in dqbuf event",
> + dqbuf_evt->buffer.index, dqbuf_evt->buffer.type);
> + return;
> + }
> +
> + dqbuf = &queue->buffers[dqbuf_evt->buffer.index];
> +
> + /*
> + * Preserve the 'm' union that was passed to us during QBUF so userspace
> + * gets back the information it submitted.
> + */
> + buffer_m = dqbuf->buffer.m;
> + memcpy(&dqbuf->buffer, &dqbuf_evt->buffer, sizeof(dqbuf->buffer));
> + dqbuf->buffer.m = buffer_m;
> + if (V4L2_TYPE_IS_MULTIPLANAR(dqbuf->buffer.type)) {
> + if (dqbuf->buffer.length > VIDEO_MAX_PLANES) {
> + v4l2_err(
> + &vv->v4l2_dev,
> + "invalid number of planes received from host for a multiplanar buffer\n");
> + return;
> + }
> + for (i = 0; i < dqbuf->buffer.length; i++) {
> + plane_m = dqbuf->planes[i].m;
> + memcpy(&dqbuf->planes[i], &dqbuf_evt->planes[i],
> + sizeof(struct v4l2_plane));
> + dqbuf->planes[i].m = plane_m;
> + }
> + }
> +
> + /* Set the DONE flag as the buffer is waiting for being dequeued. */
> + dqbuf->buffer.flags |= V4L2_BUF_FLAG_DONE;
> +
> + mutex_lock(&session->queues_lock);
> + list_add_tail(&dqbuf->list, &queue->pending_dqbufs);
> + queue->queued_bufs -= 1;
> + mutex_unlock(&session->queues_lock);
> +
> + wake_up(&session->dqbuf_wait);
> +}
> +
> +/**
> + * virtio_media_process_events() - Process all pending events on a device.
> + * @vv: device which pending events we want to process.
> + *
> + * Retrieves all pending events on @vv's event queue and dispatch them to their
> + * corresponding session.
> + *
> + * Invalid events are ignored with an error log.
> + */
> +void virtio_media_process_events(struct virtio_media *vv)
> +{
> + struct virtio_media_event_error *error_evt;
> + struct virtio_media_event_dqbuf *dqbuf_evt;
> + struct virtio_media_event_event *event_evt;
> + struct virtio_media_session *session;
> + struct virtio_media_event_header *evt;
> + unsigned int len;
> +
> + mutex_lock(&vv->events_lock);
> +
> +process_bufs:
> + while ((evt = virtqueue_get_buf(vv->eventq, &len))) {
> + /* Make sure we received enough data */
> + if (len < sizeof(*evt)) {
> + v4l2_err(
> + &vv->v4l2_dev,
> + "event is too short: got %u, expected at least %zu\n",
> + len, sizeof(*evt));
> + goto end_of_event;
> + }
> +
> + session = virtio_media_find_session(vv, evt->session_id);
> + if (!session) {
> + v4l2_err(&vv->v4l2_dev, "cannot find session %d\n",
> + evt->session_id);
> + goto end_of_event;
> + }
> +
> + switch (evt->event) {
> + case VIRTIO_MEDIA_EVT_ERROR:
> + if (len < sizeof(*error_evt)) {
> + v4l2_err(
> + &vv->v4l2_dev,
> + "error event is too short: got %u, expected %zu\n",
> + len, sizeof(*error_evt));
> + break;
> + }
> + error_evt = (struct virtio_media_event_error *)evt;
> + v4l2_err(&vv->v4l2_dev,
> + "received error %d for session %d",
> + error_evt->errno, error_evt->hdr.session_id);
> + virtio_media_session_close(vv, session);
> + break;
> +
> + /*
> + * Dequeued buffer: put it into the right queue so user-space can dequeue
> + * it.
> + */
> + case VIRTIO_MEDIA_EVT_DQBUF:
> + if (len < sizeof(*dqbuf_evt)) {
> + v4l2_err(
> + &vv->v4l2_dev,
> + "dqbuf event is too short: got %u, expected %zu\n",
> + len, sizeof(*dqbuf_evt));
> + break;
> + }
> + dqbuf_evt = (struct virtio_media_event_dqbuf *)evt;
> + virtio_media_process_dqbuf_event(vv, session,
> + dqbuf_evt);
> + break;
> +
> + case VIRTIO_MEDIA_EVT_EVENT:
> + if (len < sizeof(*event_evt)) {
> + v4l2_err(
> + &vv->v4l2_dev,
> + "session event is too short: got %u expected %zu\n",
> + len, sizeof(*event_evt));
> + break;
> + }
> +
> + event_evt = (struct virtio_media_event_event *)evt;
> + v4l2_event_queue_fh(&session->fh, &event_evt->event);
> + break;
> +
> + default:
> + v4l2_err(&vv->v4l2_dev, "unknown event type %d\n",
> + evt->event);
> + break;
> + }
> +
> +end_of_event:
> + virtio_media_send_event_buffer(vv, evt);
> + }
> +
> + if (!virtqueue_enable_cb(vv->eventq)) {
> + virtqueue_disable_cb(vv->eventq);
> + goto process_bufs;
> + }
> +
> + mutex_unlock(&vv->events_lock);
> +}
> +
> +static void virtio_media_event_work(struct work_struct *work)
> +{
> + struct virtio_media *vv =
> + container_of(work, struct virtio_media, eventq_work);
> +
> + virtio_media_process_events(vv);
> +}
> +
> +/**
> + * virtio_media_device_open() - Create a new session from an opened file.
> + * @file: opened file for the session.
> + */
> +static int virtio_media_device_open(struct file *file)
> +{
> + struct video_device *video_dev = video_devdata(file);
> + struct virtio_media *vv = to_virtio_media(video_dev);
> + struct virtio_media_cmd_open *cmd_open = &vv->cmd.open;
> + struct virtio_media_resp_open *resp_open = &vv->resp.open;
> + struct scatterlist cmd_sg = {}, resp_sg = {};
> + struct scatterlist *sgs[2] = { &cmd_sg, &resp_sg };
> + struct virtio_media_session *session;
> + u32 session_id;
> + int ret;
> +
> + mutex_lock(&vv->vlock);
> +
> + sg_set_buf(&cmd_sg, cmd_open, sizeof(*cmd_open));
> + sg_mark_end(&cmd_sg);
> +
> + sg_set_buf(&resp_sg, resp_open, sizeof(*resp_open));
> + sg_mark_end(&resp_sg);
> +
> + cmd_open->hdr.cmd = VIRTIO_MEDIA_CMD_OPEN;
> + ret = virtio_media_send_command(vv, sgs, 1, 1, sizeof(*resp_open),
> + NULL);
> + session_id = resp_open->session_id;
> + mutex_unlock(&vv->vlock);
> + if (ret < 0)
> + return ret;
> +
> + session = virtio_media_session_alloc(vv, session_id,
> + (file->f_flags & O_NONBLOCK));
> + if (IS_ERR(session))
> + return PTR_ERR(session);
> +
> + file->private_data = &session->fh;
> +
> + return 0;
> +}
> +
> +/**
> + * virtio_media_device_close() - Close a previously opened session.
> + * @file: file of the session to close.
> + *
> + * This sends to ``VIRTIO_MEDIA_CMD_CLOSE`` command to the device, and close
> + * the session on the driver side.
> + */
> +static int virtio_media_device_close(struct file *file)
> +{
> + struct video_device *video_dev = video_devdata(file);
> + struct virtio_media *vv = to_virtio_media(video_dev);
> + struct virtio_media_session *session =
> + fh_to_session(file->private_data);
> +
> + return virtio_media_session_close(vv, session);
> +}
> +
> +/**
> + * virtio_media_device_poll() - Poll logic for a virtio-media device.
> + * @file: file of the session to poll.
> + * @wait: poll table to wait on.
> + */
> +static __poll_t virtio_media_device_poll(struct file *file, poll_table *wait)
> +{
> + struct virtio_media_session *session =
> + fh_to_session(file->private_data);
> + enum v4l2_buf_type capture_type =
> + session->uses_mplane ? V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE :
> + V4L2_BUF_TYPE_VIDEO_CAPTURE;
> + enum v4l2_buf_type output_type =
> + session->uses_mplane ? V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE :
> + V4L2_BUF_TYPE_VIDEO_OUTPUT;
> + struct virtio_media_queue_state *capture_queue =
> + &session->queues[capture_type];
> + struct virtio_media_queue_state *output_queue =
> + &session->queues[output_type];
> + __poll_t req_events = poll_requested_events(wait);
> + __poll_t rc = 0;
> +
> + poll_wait(file, &session->dqbuf_wait, wait);
> + poll_wait(file, &session->fh.wait, wait);
> +
> + mutex_lock(&session->queues_lock);
> + if (req_events & (EPOLLIN | EPOLLRDNORM)) {
> + if (!capture_queue->streaming ||
> + (capture_queue->queued_bufs == 0 &&
> + list_empty(&capture_queue->pending_dqbufs)))
> + rc |= EPOLLERR;
> + else if (!list_empty(&capture_queue->pending_dqbufs))
> + rc |= EPOLLIN | EPOLLRDNORM;
> + }
> + if (req_events & (EPOLLOUT | EPOLLWRNORM)) {
> + if (!output_queue->streaming)
> + rc |= EPOLLERR;
> + else if (output_queue->queued_bufs <
> + output_queue->allocated_bufs)
> + rc |= EPOLLOUT | EPOLLWRNORM;
> + }
> + mutex_unlock(&session->queues_lock);
> +
> + if (v4l2_event_pending(&session->fh))
> + rc |= EPOLLPRI;
> +
> + return rc;
> +}
> +
> +static void virtio_media_vma_close_locked(struct vm_area_struct *vma)
> +{
> + struct virtio_media *vv = vma->vm_private_data;
> + struct virtio_media_cmd_munmap *cmd_munmap = &vv->cmd.munmap;
> + struct virtio_media_resp_munmap *resp_munmap = &vv->resp.munmap;
> + struct scatterlist cmd_sg = {}, resp_sg = {};
> + struct scatterlist *sgs[2] = { &cmd_sg, &resp_sg };
> + int ret;
> +
> + sg_set_buf(&cmd_sg, cmd_munmap, sizeof(*cmd_munmap));
> + sg_mark_end(&cmd_sg);
> +
> + sg_set_buf(&resp_sg, resp_munmap, sizeof(*resp_munmap));
> + sg_mark_end(&resp_sg);
> +
> + cmd_munmap->hdr.cmd = VIRTIO_MEDIA_CMD_MUNMAP;
> + cmd_munmap->driver_addr =
> + (vma->vm_pgoff << PAGE_SHIFT) - vv->mmap_region.addr;
> + ret = virtio_media_send_command(vv, sgs, 1, 1, sizeof(*resp_munmap),
> + NULL);
> + if (ret < 0) {
> + v4l2_err(&vv->v4l2_dev, "host failed to unmap buffer: %d\n",
> + ret);
> + }
> +}
> +
> +/**
> + * virtio_media_vma_close() - Close a MMAP buffer mapping.
> + * @vma: VMA of the mapping to close.
> + *
> + * Inform the host that a previously created MMAP mapping is no longer needed
> + * and can be removed.
> + */
> +static void virtio_media_vma_close(struct vm_area_struct *vma)
> +{
> + struct virtio_media *vv = vma->vm_private_data;
> +
> + mutex_lock(&vv->vlock);
> + virtio_media_vma_close_locked(vma);
> + mutex_unlock(&vv->vlock);
> +}
> +
> +static const struct vm_operations_struct virtio_media_vm_ops = {
> + .close = virtio_media_vma_close,
> +};
> +
> +/**
> + * virtio_media_device_mmap - Perform a mmap request from userspace.
> + * @file: opened file of the session to map for.
> + * @vma: VM area struct describing the desired mapping.
> + *
> + * This requests the host to map a MMAP buffer for us, so we can then make that
> + * mapping visible into user-space address space.
> + */
> +static int virtio_media_device_mmap(struct file *file,
> + struct vm_area_struct *vma)
> +{
> + struct video_device *video_dev = video_devdata(file);
> + struct virtio_media *vv = to_virtio_media(video_dev);
> + struct virtio_media_session *session =
> + fh_to_session(file->private_data);
> + struct virtio_media_cmd_mmap *cmd_mmap = &session->cmd.mmap;
> + struct virtio_media_resp_mmap *resp_mmap = &session->resp.mmap;
> + struct scatterlist cmd_sg = {}, resp_sg = {};
> + struct scatterlist *sgs[2] = { &cmd_sg, &resp_sg };
> + int ret;
> +
> + if (!(vma->vm_flags & VM_SHARED))
> + return -EINVAL;
> + if (!(vma->vm_flags & (VM_READ | VM_WRITE)))
> + return -EINVAL;
> +
> + mutex_lock(&vv->vlock);
> +
> + cmd_mmap->hdr.cmd = VIRTIO_MEDIA_CMD_MMAP;
> + cmd_mmap->session_id = session->id;
> + cmd_mmap->flags =
> + (vma->vm_flags & VM_WRITE) ? VIRTIO_MEDIA_MMAP_FLAG_RW : 0;
> + cmd_mmap->offset = vma->vm_pgoff << PAGE_SHIFT;
> +
> + sg_set_buf(&cmd_sg, cmd_mmap, sizeof(*cmd_mmap));
> + sg_mark_end(&cmd_sg);
> +
> + sg_set_buf(&resp_sg, resp_mmap, sizeof(*resp_mmap));
> + sg_mark_end(&resp_sg);
> +
> + /*
> + * The host performs reference counting and is smart enough to return the
> + * same guest physical address if this is called several times on the same
> + * buffer.
> + */
> + ret = virtio_media_send_command(vv, sgs, 1, 1, sizeof(*resp_mmap),
> + NULL);
> + if (ret < 0)
> + goto end;
> +
> + vma->vm_private_data = vv;
> + /*
> + * Keep the guest address at which the buffer is mapped since we will
> + * use that to unmap.
> + */
> + vma->vm_pgoff = (resp_mmap->driver_addr + vv->mmap_region.addr) >>
> + PAGE_SHIFT;
> +
> + /*
> + * We cannot let the mapping be larger than the buffer.
> + */
> + if (vma->vm_end - vma->vm_start > PAGE_ALIGN(resp_mmap->len)) {
> + dev_dbg(&video_dev->dev,
> + "invalid MMAP, as it would overflow buffer length\n");
> + virtio_media_vma_close_locked(vma);
> + ret = -EINVAL;
> + goto end;
> + }
> +
> + ret = io_remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
> + vma->vm_end - vma->vm_start,
> + vma->vm_page_prot);
> + if (ret)
> + goto end;
> +
> + vma->vm_ops = &virtio_media_vm_ops;
> +
> +end:
> + mutex_unlock(&vv->vlock);
> + return ret;
> +}
> +
> +static const struct v4l2_file_operations virtio_media_fops = {
> + .owner = THIS_MODULE,
> + .open = virtio_media_device_open,
> + .release = virtio_media_device_close,
> + .poll = virtio_media_device_poll,
> + .unlocked_ioctl = virtio_media_device_ioctl,
> + .mmap = virtio_media_device_mmap,
> +};
> +
> +static int virtio_media_probe(struct virtio_device *virtio_dev)
> +{
> + struct device *dev = &virtio_dev->dev;
> + struct virtqueue *vqs[2];
> + static struct virtqueue_info vq_info[2] = {
> + {
> + .name = "command",
> + .callback = commandq_callback,
> + },
> + {
> + .name = "event",
> + .callback = eventq_callback,
> + },
> + };
> + struct virtio_media *vv;
> + struct video_device *vd;
> + int i;
> + int ret;
> +
> + vv = devm_kzalloc(dev, sizeof(*vv), GFP_KERNEL);
> + if (!vv)
> + return -ENOMEM;
> +
> + vv->event_buffer = devm_kzalloc(
> + dev, VIRTIO_MEDIA_EVENT_MAX_SIZE * VIRTIO_MEDIA_NUM_EVENT_BUFS,
> + GFP_KERNEL);
> + if (!vv->event_buffer)
> + return -ENOMEM;
> +
> + INIT_LIST_HEAD(&vv->sessions);
> + mutex_init(&vv->sessions_lock);
> + mutex_init(&vv->events_lock);
> + mutex_init(&vv->vlock);
> +
> + vv->virtio_dev = virtio_dev;
> + virtio_dev->priv = vv;
> +
> + init_waitqueue_head(&vv->wq);
> +
> + ret = v4l2_device_register(dev, &vv->v4l2_dev);
> + if (ret)
> + return ret;
> +
> + ret = virtio_find_vqs(virtio_dev, 2, vqs, vq_info, NULL);
> + if (ret)
> + goto err_find_vqs;
> +
> + vv->commandq = vqs[0];
> + vv->eventq = vqs[1];
> + INIT_WORK(&vv->eventq_work, virtio_media_event_work);
> +
> + /* Get MMAP buffer mapping SHM region */
> + virtio_get_shm_region(virtio_dev, &vv->mmap_region,
> + VIRTIO_MEDIA_SHM_MMAP);
> +
> + vd = &vv->video_dev;
> +
> + vd->v4l2_dev = &vv->v4l2_dev;
> + vd->vfl_type = VFL_TYPE_VIDEO;
> + vd->ioctl_ops = &virtio_media_ioctl_ops;
> + vd->fops = &virtio_media_fops;
> + vd->device_caps = virtio_cread32(virtio_dev, 0);
> + if (vd->device_caps & (V4L2_CAP_VIDEO_M2M | V4L2_CAP_VIDEO_M2M_MPLANE))
> + vd->vfl_dir = VFL_DIR_M2M;
> + else if (vd->device_caps &
> + (V4L2_CAP_VIDEO_OUTPUT | V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE))
> + vd->vfl_dir = VFL_DIR_TX;
> + else
> + vd->vfl_dir = VFL_DIR_RX;
> + vd->release = video_device_release_empty;
> + strscpy(vd->name, "virtio-media", sizeof(vd->name));
> +
> + video_set_drvdata(vd, vv);
> +
> + ret = video_register_device(vd, virtio_cread32(virtio_dev, 4), 0);
> + if (ret)
> + goto err_register_device;
> +
> + for (i = 0; i < VIRTIO_MEDIA_NUM_EVENT_BUFS; i++) {
> + ret = virtio_media_send_event_buffer(
> + vv, vv->event_buffer + VIRTIO_MEDIA_EVENT_MAX_SIZE * i);
> + if (ret)
> + goto err_send_event_buffer;
> + }
> +
> + virtio_device_ready(virtio_dev);
> +
> + return 0;
> +
> +err_send_event_buffer:
> + video_unregister_device(&vv->video_dev);
> +err_register_device:
> + virtio_dev->config->del_vqs(virtio_dev);
> +err_find_vqs:
> + v4l2_device_unregister(&vv->v4l2_dev);
> +
> + return ret;
> +}
> +
> +static void virtio_media_remove(struct virtio_device *virtio_dev)
> +{
> + struct virtio_media *vv = virtio_dev->priv;
> + struct list_head *p, *n;
> +
> + cancel_work_sync(&vv->eventq_work);
> + virtio_reset_device(virtio_dev);
> +
> + v4l2_device_unregister(&vv->v4l2_dev);
> + virtio_dev->config->del_vqs(virtio_dev);
> + video_unregister_device(&vv->video_dev);
> +
> + list_for_each_safe(p, n, &vv->sessions) {
> + struct virtio_media_session *s =
> + list_entry(p, struct virtio_media_session, list);
> +
> + virtio_media_session_free(vv, s);
> + }
> +}
> +
> +static struct virtio_device_id id_table[] = {
> + { VIRTIO_ID_MEDIA, VIRTIO_DEV_ANY_ID },
> + { 0 },
> +};
> +
> +static unsigned int features[] = {};
> +
> +static struct virtio_driver virtio_media_driver = {
> + .feature_table = features,
> + .feature_table_size = ARRAY_SIZE(features),
> + .driver.name = VIRTIO_MEDIA_DEFAULT_DRIVER_NAME,
> + .driver.owner = THIS_MODULE,
> + .id_table = id_table,
> + .probe = virtio_media_probe,
> + .remove = virtio_media_remove,
> +};
> +
> +module_virtio_driver(virtio_media_driver);
> +
> +MODULE_DEVICE_TABLE(virtio, id_table);
> +MODULE_DESCRIPTION("virtio media driver");
> +MODULE_AUTHOR("Alexandre Courbot <gnurou@xxxxxxxxx>");
> +MODULE_LICENSE("Dual BSD/GPL");
> diff --git a/drivers/media/virtio/virtio_media_ioctls.c b/drivers/media/virtio/virtio_media_ioctls.c
> new file mode 100644
> index 0000000000000000000000000000000000000000..863cdfbaaadc7241110c82ce6880bc5675c23894
> --- /dev/null
> +++ b/drivers/media/virtio/virtio_media_ioctls.c
> @@ -0,0 +1,1297 @@
> +// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0+
> +
> +/*
> + * Ioctls implementations for the virtio-media driver.
> + *
> + * Copyright (c) 2024-2025 Google LLC.
> + */
> +
> +#include <linux/mutex.h>
> +#include <linux/videodev2.h>
> +#include <linux/virtio_config.h>
> +#include <linux/vmalloc.h>
> +#include <media/v4l2-event.h>
> +#include <media/v4l2-ioctl.h>
> +
> +#include "scatterlist_builder.h"
> +#include "virtio_media.h"
> +
> +/**
> + * virtio_media_send_r_ioctl() - Send a read-only ioctl to the device.
> + * @fh: file handler of the session doing the ioctl.
> + * @ioctl: ``VIDIOC_*`` ioctl code.
> + * @ioctl_data: pointer to the ioctl payload.
> + * @ioctl_data_len: length in bytes of the ioctl payload.
> + *
> + * Send an ioctl that has no driver payload, but expects a response from the
> + * host (i.e. an ioctl specified with ``_IOR``).
> + */
> +static int virtio_media_send_r_ioctl(struct v4l2_fh *fh, u32 ioctl,
> + void *ioctl_data, size_t ioctl_data_len)
> +{
> + struct video_device *video_dev = fh->vdev;
> + struct virtio_media *vv = to_virtio_media(video_dev);
> + struct virtio_media_session *session = fh_to_session(fh);
> + struct scatterlist *sgs[3];
> + struct scatterlist_builder builder = {
> + .descs = session->command_sgs.sgl,
> + .num_descs = DESC_CHAIN_MAX_LEN,
> + .cur_desc = 0,
> + .shadow_buffer = session->shadow_buf,
> + .shadow_buffer_size = VIRTIO_SHADOW_BUF_SIZE,
> + .shadow_buffer_pos = 0,
> + .sgs = sgs,
> + .num_sgs = ARRAY_SIZE(sgs),
> + .cur_sg = 0,
> + };
> + int ret;
> +
> + /* Command descriptor */
> + ret = scatterlist_builder_add_ioctl_cmd(&builder, session, ioctl);
> + if (ret)
> + return ret;
> +
> + /* Response descriptor */
> + ret = scatterlist_builder_add_ioctl_resp(&builder, session);
> + if (ret)
> + return ret;
> +
> + /* Response payload */
> + ret = scatterlist_builder_add_data(&builder, ioctl_data,
> + ioctl_data_len);
> + if (ret) {
> + v4l2_err(&vv->v4l2_dev,
> + "failed to prepare command descriptor chain\n");
> + return ret;
> + }
> +
> + ret = virtio_media_send_command(
> + vv, sgs, 1, 2,
> + sizeof(struct virtio_media_resp_ioctl) + ioctl_data_len, NULL);
> + if (ret < 0)
> + return ret;
> +
> + ret = scatterlist_builder_retrieve_data(&builder, 2, ioctl_data);
> + if (ret) {
> + v4l2_err(&vv->v4l2_dev,
> + "failed to retrieve response descriptor chain\n");
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +/**
> + * virtio_media_send_w_ioctl() - Send a write-only ioctl to the device.
> + * @fh: file handler of the session doing the ioctl.
> + * @ioctl: ``VIDIOC_*`` ioctl code.
> + * @ioctl_data: pointer to the ioctl payload.
> + * @ioctl_data_len: length in bytes of the ioctl payload.
> + *
> + * Send an ioctl that does not expect a reply beyond an error status (i.e. an
> + * ioctl specified with ``_IOW``) to the host.
> + */
> +static int virtio_media_send_w_ioctl(struct v4l2_fh *fh, u32 ioctl,
> + const void *ioctl_data,
> + size_t ioctl_data_len)
> +{
> + struct video_device *video_dev = fh->vdev;
> + struct virtio_media *vv = to_virtio_media(video_dev);
> + struct virtio_media_session *session = fh_to_session(fh);
> + struct scatterlist *sgs[3];
> + struct scatterlist_builder builder = {
> + .descs = session->command_sgs.sgl,
> + .num_descs = DESC_CHAIN_MAX_LEN,
> + .cur_desc = 0,
> + .shadow_buffer = session->shadow_buf,
> + .shadow_buffer_size = VIRTIO_SHADOW_BUF_SIZE,
> + .shadow_buffer_pos = 0,
> + .sgs = sgs,
> + .num_sgs = ARRAY_SIZE(sgs),
> + .cur_sg = 0,
> + };
> + int ret;
> +
> + /* Command descriptor */
> + ret = scatterlist_builder_add_ioctl_cmd(&builder, session, ioctl);
> + if (ret)
> + return ret;
> +
> + /* Command payload */
> + ret = scatterlist_builder_add_data(&builder, (void *)ioctl_data,
> + ioctl_data_len);
> + if (ret) {
> + v4l2_err(&vv->v4l2_dev,
> + "failed to prepare command descriptor chain\n");
> + return ret;
> + }
> +
> + /* Response descriptor */
> + ret = scatterlist_builder_add_ioctl_resp(&builder, session);
> + if (ret)
> + return ret;
> +
> + ret = virtio_media_send_command(
> + vv, sgs, 2, 1, sizeof(struct virtio_media_resp_ioctl), NULL);
> + if (ret < 0)
> + return ret;
> +
> + return 0;
> +}
> +
> +/**
> + * virtio_media_send_wr_ioctl() - Send a read-write ioctl to the device.
> + * @fh: file handler of the session doing the ioctl.
> + * @ioctl: ``VIDIOC_*`` ioctl code.
> + * @ioctl_data: pointer to the ioctl payload.
> + * @ioctl_data_len: length in bytes of the ioctl payload.
> + * @minimum_resp_payload: minimum expected length of the response's payload.
> + *
> + * Sends an ioctl that expects a response of exactly the same size as the
> + * input (i.e. an ioctl specified with ``_IOWR``) to the host.
> + *
> + * This corresponds to what most V4L2 ioctls do. For instance
> + * ``VIDIOC_ENUM_FMT`` takes a partially-initialized ``struct v4l2_fmtdesc``
> + * and returns its filled version.
> + */
> +static int virtio_media_send_wr_ioctl(struct v4l2_fh *fh, u32 ioctl,
> + void *ioctl_data, size_t ioctl_data_len,
> + size_t minimum_resp_payload)
> +{
> + struct video_device *video_dev = fh->vdev;
> + struct virtio_media *vv = to_virtio_media(video_dev);
> + struct virtio_media_session *session = fh_to_session(fh);
> + struct scatterlist *sgs[4];
> + struct scatterlist_builder builder = {
> + .descs = session->command_sgs.sgl,
> + .num_descs = DESC_CHAIN_MAX_LEN,
> + .cur_desc = 0,
> + .shadow_buffer = session->shadow_buf,
> + .shadow_buffer_size = VIRTIO_SHADOW_BUF_SIZE,
> + .shadow_buffer_pos = 0,
> + .sgs = sgs,
> + .num_sgs = ARRAY_SIZE(sgs),
> + .cur_sg = 0,
> + };
> + int ret;
> +
> + /* Command descriptor */
> + ret = scatterlist_builder_add_ioctl_cmd(&builder, session, ioctl);
> + if (ret)
> + return ret;
> +
> + /* Command payload */
> + ret = scatterlist_builder_add_data(&builder, ioctl_data,
> + ioctl_data_len);
> + if (ret) {
> + v4l2_err(&vv->v4l2_dev,
> + "failed to prepare command descriptor chain\n");
> + return ret;
> + }
> +
> + /* Response descriptor */
> + ret = scatterlist_builder_add_ioctl_resp(&builder, session);
> + if (ret)
> + return ret;
> +
> + /* Response payload, same as command */
> + ret = scatterlist_builder_add_descriptor(&builder, 1);
> + if (ret)
> + return ret;
> +
> + ret = virtio_media_send_command(vv, sgs, 2, 2,
> + sizeof(struct virtio_media_resp_ioctl) +
> + minimum_resp_payload,
> + NULL);
> + if (ret < 0)
> + return ret;
> +
> + ret = scatterlist_builder_retrieve_data(&builder, 3, ioctl_data);
> + if (ret) {
> + v4l2_err(&vv->v4l2_dev,
> + "failed to retrieve response descriptor chain\n");
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +/**
> + * virtio_media_send_buffer_ioctl() - Send an ioctl taking a buffer as
> + * parameter to the device.
> + * @fh: file handler of the session doing the ioctl.
> + * @ioctl: ``VIDIOC_*`` ioctl code.
> + * @b: ``v4l2_buffer`` to be sent as the ioctl payload.
> + *
> + * Buffers can require an additional descriptor to send their planes array, and
> + * can have pointers to userspace memory hence this dedicated function.
> + */
> +static int virtio_media_send_buffer_ioctl(struct v4l2_fh *fh, u32 ioctl,
> + struct v4l2_buffer *b)
> +{
> + struct video_device *video_dev = fh->vdev;
> + struct virtio_media *vv = to_virtio_media(video_dev);
> + struct virtio_media_session *session = fh_to_session(fh);
> + struct v4l2_plane *orig_planes = NULL;
> + struct scatterlist *sgs[64];
> + /* End of the device-readable buffer SGs, to reuse in device-writable section. */
> + size_t num_cmd_sgs;
> + size_t end_buf_sg;
> + struct scatterlist_builder builder = {
> + .descs = session->command_sgs.sgl,
> + .num_descs = DESC_CHAIN_MAX_LEN,
> + .cur_desc = 0,
> + .shadow_buffer = session->shadow_buf,
> + .shadow_buffer_size = VIRTIO_SHADOW_BUF_SIZE,
> + .shadow_buffer_pos = 0,
> + .sgs = sgs,
> + .num_sgs = ARRAY_SIZE(sgs),
> + .cur_sg = 0,
> + };
> + size_t resp_len;
> + int ret;
> + int i;
> +
> + if (b->type > VIRTIO_MEDIA_LAST_QUEUE)
> + return -EINVAL;
> +
> + if (V4L2_TYPE_IS_MULTIPLANAR(b->type))
> + orig_planes = b->m.planes;
> +
> + /* Command descriptor */
> + ret = scatterlist_builder_add_ioctl_cmd(&builder, session, ioctl);
> + if (ret)
> + return ret;
> +
> + /* Command payload (struct v4l2_buffer) */
> + ret = scatterlist_builder_add_buffer(&builder, b);
> + if (ret < 0)
> + return ret;
> +
> + end_buf_sg = builder.cur_sg;
> +
> + /* Payload of SHARED_PAGES buffers, if relevant */
> + ret = scatterlist_builder_add_buffer_userptr(&builder, b);
> + if (ret < 0)
> + return ret;
> +
> + num_cmd_sgs = builder.cur_sg;
> +
> + /* Response descriptor */
> + ret = scatterlist_builder_add_ioctl_resp(&builder, session);
> + if (ret)
> + return ret;
> +
> + /* Response payload (same as input, but no userptr mapping) */
> + for (i = 1; i < end_buf_sg; i++) {
> + ret = scatterlist_builder_add_descriptor(&builder, i);
> + if (ret < 0)
> + return ret;
> + }
> +
> + ret = virtio_media_send_command(
> + vv, builder.sgs, num_cmd_sgs, builder.cur_sg - num_cmd_sgs,
> + sizeof(struct virtio_media_resp_ioctl) + sizeof(*b), &resp_len);
> + if (ret < 0)
> + return ret;
> +
> + resp_len -= sizeof(struct virtio_media_resp_ioctl);
> +
> + /* Make sure that the reply length covers our v4l2_buffer */
> + if (resp_len < sizeof(*b))
> + return -EINVAL;
> +
> + ret = scatterlist_builder_retrieve_buffer(&builder, num_cmd_sgs + 1, b,
> + orig_planes);
> + if (ret) {
> + v4l2_err(&vv->v4l2_dev,
> + "failed to retrieve response descriptor chain\n");
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +/**
> + * virtio_media_send_ext_controls_ioctl() - Send an ioctl taking extended
> + * controls as parameters to the device.
> + * @fh: file handler of the session doing the ioctl.
> + * @ioctl: ``VIDIOC_*`` ioctl code.
> + * @ctrls: ``v4l2_ext_controls`` to be sent as the ioctl payload.
> + *
> + * Queues an ioctl that sends a ``v4l2_ext_controls`` to the host and receives
> + * an updated version.
> + *
> + * ``v4l2_ext_controls`` has a pointer to an array of ``v4l2_ext_control``, and
> + * also potentially pointers to user-space memory that we need to map properly,
> + * hence the dedicated function.
> + */
> +static int virtio_media_send_ext_controls_ioctl(struct v4l2_fh *fh, u32 ioctl,
> + struct v4l2_ext_controls *ctrls)
> +{
> + struct video_device *video_dev = fh->vdev;
> + struct virtio_media *vv = to_virtio_media(video_dev);
> + struct virtio_media_session *session = fh_to_session(fh);
> + size_t num_cmd_sgs;
> + size_t end_ctrls_sg;
> + struct v4l2_ext_control *controls_backup = ctrls->controls;
> + const u32 num_ctrls = ctrls->count;
> + struct scatterlist *sgs[64];
> + struct scatterlist_builder builder = {
> + .descs = session->command_sgs.sgl,
> + .num_descs = DESC_CHAIN_MAX_LEN,
> + .cur_desc = 0,
> + .shadow_buffer = session->shadow_buf,
> + .shadow_buffer_size = VIRTIO_SHADOW_BUF_SIZE,
> + .shadow_buffer_pos = 0,
> + .sgs = sgs,
> + .num_sgs = ARRAY_SIZE(sgs),
> + .cur_sg = 0,
> + };
> + size_t resp_len = 0;
> + int ret;
> + int i;
> +
> + /* Command descriptor */
> + ret = scatterlist_builder_add_ioctl_cmd(&builder, session, ioctl);
> + if (ret)
> + return ret;
> +
> + /* v4l2_controls */
> + ret = scatterlist_builder_add_ext_ctrls(&builder, ctrls);
> + if (ret)
> + return ret;
> +
> + end_ctrls_sg = builder.cur_sg;
> +
> + ret = scatterlist_builder_add_ext_ctrls_userptrs(&builder, ctrls);
> + if (ret)
> + return ret;
> +
> + num_cmd_sgs = builder.cur_sg;
> +
> + /* Response descriptor */
> + ret = scatterlist_builder_add_ioctl_resp(&builder, session);
> + if (ret)
> + return ret;
> +
> + /* Response payload (same as input but without userptrs) */
> + for (i = 1; i < end_ctrls_sg; i++) {
> + ret = scatterlist_builder_add_descriptor(&builder, i);
> + if (ret < 0)
> + return ret;
> + }
> +
> + ret = virtio_media_send_command(
> + vv, builder.sgs, num_cmd_sgs, builder.cur_sg - num_cmd_sgs,
> + sizeof(struct virtio_media_resp_ioctl) + sizeof(*ctrls),
> + &resp_len);
> +
> + /* Just in case the host touched these. */
> + ctrls->controls = controls_backup;
> + if (ctrls->count != num_ctrls) {
> + v4l2_err(
> + &vv->v4l2_dev,
> + "device returned a number of controls different than the one submitted\n");
> + }
> + if (ctrls->count > num_ctrls)
> + return -ENOSPC;
> +
> + /* Event if we have received an error, we may need to read our payload back */
> + if (ret < 0 && resp_len >= sizeof(struct virtio_media_resp_ioctl) +
> + sizeof(*ctrls)) {
> + /* Deliberately ignore the error here as we want to return the previous one */
> + scatterlist_builder_retrieve_ext_ctrls(&builder,
> + num_cmd_sgs + 1, ctrls);
> + return ret;
> + }
> +
> + resp_len -= sizeof(struct virtio_media_resp_ioctl);
> +
> + /* Make sure that the reply's length covers our v4l2_ext_controls */
> + if (resp_len < sizeof(*ctrls))
> + return -EINVAL;
> +
> + ret = scatterlist_builder_retrieve_ext_ctrls(&builder, num_cmd_sgs + 1,
> + ctrls);
> + if (ret)
> + return ret;
> +
> + return 0;
> +}
> +
> +/**
> + * virtio_media_clear_queue() - clear all pending buffers on a streamed-off queue.
> + * @session: session which the queue to clear belongs to.
> + * @queue: state of the queue to clear.
> + *
> + * Helper function to clear the list of buffers waiting to be dequeued on a
> + * queue that has just been streamed off.
> + */
> +static void virtio_media_clear_queue(struct virtio_media_session *session,
> + struct virtio_media_queue_state *queue)
> +{
> + struct list_head *p, *n;
> + int i;
> +
> + mutex_lock(&session->queues_lock);
> +
> + list_for_each_safe(p, n, &queue->pending_dqbufs) {
> + struct virtio_media_buffer *dqbuf =
> + list_entry(p, struct virtio_media_buffer, list);
> +
> + list_del(&dqbuf->list);
> + }
> +
> + /* All buffers are now dequeued. */
> + for (i = 0; i < queue->allocated_bufs; i++)
> + queue->buffers[i].buffer.flags = 0;
> +
> + queue->queued_bufs = 0;
> + queue->streaming = false;
> + queue->is_capture_last = false;
> +
> + mutex_unlock(&session->queues_lock);
> +}
> +
> +/*
> + * Macros suitable for defining ioctls with a constant size payload.
> + */
> +
> +#define SIMPLE_WR_IOCTL(name, ioctl, payload_t) \
> + static int virtio_media_##name(struct file *file, void *fh, \
> + payload_t *payload) \
> + { \
> + return virtio_media_send_wr_ioctl(fh, ioctl, payload, \
> + sizeof(*payload), \
> + sizeof(*payload)); \
> + }
> +#define SIMPLE_R_IOCTL(name, ioctl, payload_t) \
> + static int virtio_media_##name(struct file *file, void *fh, \
> + payload_t *payload) \
> + { \
> + return virtio_media_send_r_ioctl(fh, ioctl, payload, \
> + sizeof(*payload)); \
> + }
> +#define SIMPLE_W_IOCTL(name, ioctl, payload_t) \
> + static int virtio_media_##name(struct file *file, void *fh, \
> + payload_t *payload) \
> + { \
> + return virtio_media_send_w_ioctl(fh, ioctl, payload, \
> + sizeof(*payload)); \
> + }
> +
> +/*
> + * V4L2 ioctl handlers.
> + *
> + * Most of these functions just forward the ioctl to the host, for these we can
> + * use one of the SIMPLE_*_IOCTL macros. Exceptions that have their own
> + * standalone function follow.
> + */
> +
> +SIMPLE_WR_IOCTL(enum_fmt, VIDIOC_ENUM_FMT, struct v4l2_fmtdesc)
> +SIMPLE_WR_IOCTL(g_fmt, VIDIOC_G_FMT, struct v4l2_format)
> +SIMPLE_WR_IOCTL(s_fmt, VIDIOC_S_FMT, struct v4l2_format)
> +SIMPLE_WR_IOCTL(try_fmt, VIDIOC_TRY_FMT, struct v4l2_format)
> +SIMPLE_WR_IOCTL(enum_framesizes, VIDIOC_ENUM_FRAMESIZES,
> + struct v4l2_frmsizeenum)
> +SIMPLE_WR_IOCTL(enum_frameintervals, VIDIOC_ENUM_FRAMEINTERVALS,
> + struct v4l2_frmivalenum)
> +SIMPLE_WR_IOCTL(query_ext_ctrl, VIDIOC_QUERY_EXT_CTRL,
> + struct v4l2_query_ext_ctrl)
> +SIMPLE_WR_IOCTL(s_dv_timings, VIDIOC_S_DV_TIMINGS, struct v4l2_dv_timings)
> +SIMPLE_WR_IOCTL(g_dv_timings, VIDIOC_G_DV_TIMINGS, struct v4l2_dv_timings)
> +SIMPLE_R_IOCTL(query_dv_timings, VIDIOC_QUERY_DV_TIMINGS,
> + struct v4l2_dv_timings)
> +SIMPLE_WR_IOCTL(enum_dv_timings, VIDIOC_ENUM_DV_TIMINGS,
> + struct v4l2_enum_dv_timings)
> +SIMPLE_WR_IOCTL(dv_timings_cap, VIDIOC_DV_TIMINGS_CAP,
> + struct v4l2_dv_timings_cap)
> +SIMPLE_WR_IOCTL(enuminput, VIDIOC_ENUMINPUT, struct v4l2_input)
> +SIMPLE_WR_IOCTL(querymenu, VIDIOC_QUERYMENU, struct v4l2_querymenu)
> +SIMPLE_WR_IOCTL(enumoutput, VIDIOC_ENUMOUTPUT, struct v4l2_output)
> +SIMPLE_WR_IOCTL(enumaudio, VIDIOC_ENUMAUDIO, struct v4l2_audio)
> +SIMPLE_R_IOCTL(g_audio, VIDIOC_G_AUDIO, struct v4l2_audio)
> +SIMPLE_W_IOCTL(s_audio, VIDIOC_S_AUDIO, const struct v4l2_audio)
> +SIMPLE_WR_IOCTL(enumaudout, VIDIOC_ENUMAUDOUT, struct v4l2_audioout)
> +SIMPLE_R_IOCTL(g_audout, VIDIOC_G_AUDOUT, struct v4l2_audioout)
> +SIMPLE_W_IOCTL(s_audout, VIDIOC_S_AUDOUT, const struct v4l2_audioout)
> +SIMPLE_WR_IOCTL(g_modulator, VIDIOC_G_MODULATOR, struct v4l2_modulator)
> +SIMPLE_W_IOCTL(s_modulator, VIDIOC_S_MODULATOR, const struct v4l2_modulator)
> +SIMPLE_WR_IOCTL(g_selection, VIDIOC_G_SELECTION, struct v4l2_selection)
> +SIMPLE_WR_IOCTL(s_selection, VIDIOC_S_SELECTION, struct v4l2_selection)
> +SIMPLE_R_IOCTL(g_enc_index, VIDIOC_G_ENC_INDEX, struct v4l2_enc_idx)
> +SIMPLE_WR_IOCTL(encoder_cmd, VIDIOC_ENCODER_CMD, struct v4l2_encoder_cmd)
> +SIMPLE_WR_IOCTL(try_encoder_cmd, VIDIOC_TRY_ENCODER_CMD,
> + struct v4l2_encoder_cmd)
> +SIMPLE_WR_IOCTL(try_decoder_cmd, VIDIOC_TRY_DECODER_CMD,
> + struct v4l2_decoder_cmd)
> +SIMPLE_WR_IOCTL(g_parm, VIDIOC_G_PARM, struct v4l2_streamparm)
> +SIMPLE_WR_IOCTL(s_parm, VIDIOC_S_PARM, struct v4l2_streamparm)
> +SIMPLE_R_IOCTL(g_std, VIDIOC_G_STD, v4l2_std_id)
> +SIMPLE_R_IOCTL(querystd, VIDIOC_QUERYSTD, v4l2_std_id)
> +SIMPLE_WR_IOCTL(enumstd, VIDIOC_ENUMSTD, struct v4l2_standard)
> +SIMPLE_WR_IOCTL(g_tuner, VIDIOC_G_TUNER, struct v4l2_tuner)
> +SIMPLE_W_IOCTL(s_tuner, VIDIOC_S_TUNER, const struct v4l2_tuner)
> +SIMPLE_WR_IOCTL(g_frequency, VIDIOC_G_FREQUENCY, struct v4l2_frequency)
> +SIMPLE_W_IOCTL(s_frequency, VIDIOC_S_FREQUENCY, const struct v4l2_frequency)
> +SIMPLE_WR_IOCTL(enum_freq_bands, VIDIOC_ENUM_FREQ_BANDS,
> + struct v4l2_frequency_band)
> +SIMPLE_WR_IOCTL(g_sliced_vbi_cap, VIDIOC_G_SLICED_VBI_CAP,
> + struct v4l2_sliced_vbi_cap)
> +SIMPLE_W_IOCTL(s_hw_freq_seek, VIDIOC_S_HW_FREQ_SEEK,
> + const struct v4l2_hw_freq_seek)
> +
> +/*
> + * QUERYCAP is handled by reading the configuration area.
> + *
> + */
> +
> +static int virtio_media_querycap(struct file *file, void *fh,
> + struct v4l2_capability *cap)
> +{
> + struct video_device *video_dev = video_devdata(file);
> + struct virtio_media *vv = to_virtio_media(video_dev);
> +
> + strscpy(cap->bus_info, "platform:virtio-media");
> +
> + if (!virtio_media_driver_name)
> + strscpy(cap->driver, VIRTIO_MEDIA_DEFAULT_DRIVER_NAME);
> + else
> + strscpy(cap->driver, virtio_media_driver_name);
> +
> + virtio_cread_bytes(vv->virtio_dev, 8, cap->card, sizeof(cap->card));
> +
> + cap->capabilities = video_dev->device_caps | V4L2_CAP_DEVICE_CAPS;
> + cap->device_caps = video_dev->device_caps;
> +
> + return 0;
> +}
> +
> +/*
> + * Extended control ioctls are handled mostly identically.
> + */
> +
> +static int virtio_media_g_ext_ctrls(struct file *file, void *fh,
> + struct v4l2_ext_controls *ctrls)
> +{
> + return virtio_media_send_ext_controls_ioctl(fh, VIDIOC_G_EXT_CTRLS,
> + ctrls);
> +}
> +
> +static int virtio_media_s_ext_ctrls(struct file *file, void *fh,
> + struct v4l2_ext_controls *ctrls)
> +{
> + return virtio_media_send_ext_controls_ioctl(fh, VIDIOC_S_EXT_CTRLS,
> + ctrls);
> +}
> +
> +static int virtio_media_try_ext_ctrls(struct file *file, void *fh,
> + struct v4l2_ext_controls *ctrls)
> +{
> + return virtio_media_send_ext_controls_ioctl(fh, VIDIOC_TRY_EXT_CTRLS,
> + ctrls);
> +}
> +
> +/*
> + * Subscribe/unsubscribe from an event.
> + */
> +
> +static int
> +virtio_media_subscribe_event(struct v4l2_fh *fh,
> + const struct v4l2_event_subscription *sub)
> +{
> + struct video_device *video_dev = fh->vdev;
> + struct virtio_media *vv = to_virtio_media(video_dev);
> + int ret;
> +
> + /* First subscribe to the event in the guest. */
> + switch (sub->type) {
> + case V4L2_EVENT_SOURCE_CHANGE:
> + ret = v4l2_src_change_event_subscribe(fh, sub);
> + break;
> + default:
> + ret = v4l2_event_subscribe(fh, sub, 1, NULL);
> + break;
> + }
> + if (ret)
> + return ret;
> +
> + /* Then ask the host to signal us these events. */
> + ret = virtio_media_send_w_ioctl(fh, VIDIOC_SUBSCRIBE_EVENT, sub,
> + sizeof(*sub));
> + if (ret < 0) {
> + v4l2_event_unsubscribe(fh, sub);
> + return ret;
> + }
> +
> + /*
> + * Subscribing to an event may result in that event being signaled
> + * immediately. Process all pending events to make sure we don't miss it.
> + */
> + if (sub->flags & V4L2_EVENT_SUB_FL_SEND_INITIAL)
> + virtio_media_process_events(vv);
> +
> + return 0;
> +}
> +
> +static int
> +virtio_media_unsubscribe_event(struct v4l2_fh *fh,
> + const struct v4l2_event_subscription *sub)
> +{
> + int ret;
> +
> + ret = virtio_media_send_w_ioctl(fh, VIDIOC_UNSUBSCRIBE_EVENT, sub,
> + sizeof(*sub));
> + if (ret < 0)
> + return ret;
> +
> + ret = v4l2_event_unsubscribe(fh, sub);
> + if (ret)
> + return ret;
> +
> + return 0;
> +}
> +
> +/*
> + * Streamon/off affect the local queue state.
> + */
> +
> +static int virtio_media_streamon(struct file *file, void *fh,
> + enum v4l2_buf_type i)
> +{
> + struct virtio_media_session *session = fh_to_session(fh);
> + int ret;
> +
> + if (i > VIRTIO_MEDIA_LAST_QUEUE)
> + return -EINVAL;
> +
> + ret = virtio_media_send_w_ioctl(fh, VIDIOC_STREAMON, &i, sizeof(i));
> + if (ret < 0)
> + return ret;
> +
> + session->queues[i].streaming = true;
> +
> + return 0;
> +}
> +
> +static int virtio_media_streamoff(struct file *file, void *fh,
> + enum v4l2_buf_type i)
> +{
> + struct virtio_media_session *session = fh_to_session(fh);
> + int ret;
> +
> + if (i > VIRTIO_MEDIA_LAST_QUEUE)
> + return -EINVAL;
> +
> + ret = virtio_media_send_w_ioctl(fh, VIDIOC_STREAMOFF, &i, sizeof(i));
> + if (ret < 0)
> + return ret;
> +
> + virtio_media_clear_queue(session, &session->queues[i]);
> +
> + return 0;
> +}
> +
> +/*
> + * Buffer creation/queuing functions deal with the local driver state.
> + */
> +
> +static int virtio_media_reqbufs(struct file *file, void *fh,
> + struct v4l2_requestbuffers *b)
> +{
> + struct virtio_media_session *session = fh_to_session(fh);
> + struct virtio_media_queue_state *queue;
> + int ret;
> +
> + if (b->type > VIRTIO_MEDIA_LAST_QUEUE)
> + return -EINVAL;
> +
> + if (b->memory == V4L2_MEMORY_USERPTR && !virtio_media_allow_userptr)
> + return -EINVAL;
> +
> + ret = virtio_media_send_wr_ioctl(fh, VIDIOC_REQBUFS, b, sizeof(*b),
> + sizeof(*b));
> + if (ret)
> + return ret;
> +
> + queue = &session->queues[b->type];
> +
> + /* REQBUFS(0) is an implicit STREAMOFF. */
> + if (b->count == 0)
> + virtio_media_clear_queue(session, queue);
> +
> + vfree(queue->buffers);
> + queue->buffers = NULL;
> +
> + if (b->count > 0) {
> + queue->buffers =
> + vzalloc(sizeof(struct virtio_media_buffer) * b->count);
> + if (!queue->buffers)
> + return -ENOMEM;
> + }
> +
> + queue->allocated_bufs = b->count;
> +
> + /*
> + * If a multiplanar queue is successfully used here, this means
> + * we are using the multiplanar interface.
> + */
> + if (V4L2_TYPE_IS_MULTIPLANAR(b->type))
> + session->uses_mplane = true;
> +
> + if (!virtio_media_allow_userptr)
> + b->capabilities &= ~V4L2_BUF_CAP_SUPPORTS_USERPTR;
> +
> + /* We do not support DMABUF yet. */
> + b->capabilities &= ~V4L2_BUF_CAP_SUPPORTS_DMABUF;
> +
> + return 0;
> +}
> +
> +static int virtio_media_querybuf(struct file *file, void *fh,
> + struct v4l2_buffer *b)
> +{
> + struct virtio_media_session *session = fh_to_session(fh);
> + struct virtio_media_queue_state *queue;
> + struct virtio_media_buffer *buffer;
> + int ret;
> +
> + ret = virtio_media_send_buffer_ioctl(fh, VIDIOC_QUERYBUF, b);
> + if (ret)
> + return ret;
> +
> + if (b->type > VIRTIO_MEDIA_LAST_QUEUE)
> + return -EINVAL;
> +
> + queue = &session->queues[b->type];
> + if (b->index >= queue->allocated_bufs)
> + return -EINVAL;
> +
> + buffer = &queue->buffers[b->index];
> + /* Set the DONE flag if the buffer is waiting in our own dequeue queue. */
> + b->flags |= (buffer->buffer.flags & V4L2_BUF_FLAG_DONE);
> +
> + return 0;
> +}
> +
> +static int virtio_media_create_bufs(struct file *file, void *fh,
> + struct v4l2_create_buffers *b)
> +{
> + struct virtio_media_session *session = fh_to_session(fh);
> + struct virtio_media_queue_state *queue;
> + struct virtio_media_buffer *buffers;
> + u32 type = b->format.type;
> + int ret;
> +
> + if (type > VIRTIO_MEDIA_LAST_QUEUE)
> + return -EINVAL;
> +
> + queue = &session->queues[type];
> +
> + ret = virtio_media_send_wr_ioctl(fh, VIDIOC_CREATE_BUFS, b, sizeof(*b),
> + sizeof(*b));
> + if (ret)
> + return ret;
> +
> + /* If count is zero, we were just checking for format. */
> + if (b->count == 0)
> + return 0;
> +
> + buffers = queue->buffers;
> +
> + queue->buffers =
> + vzalloc(sizeof(*queue->buffers) * (b->index + b->count));
> + if (!queue->buffers) {
> + queue->buffers = buffers;
> + return -ENOMEM;
> + }
> +
> + memcpy(queue->buffers, buffers,
> + sizeof(*buffers) * queue->allocated_bufs);
> + vfree(buffers);
> +
> + queue->allocated_bufs = b->index + b->count;
> +
> + return 0;
> +}
> +
> +static int virtio_media_prepare_buf(struct file *file, void *fh,
> + struct v4l2_buffer *b)
> +{
> + struct virtio_media_session *session = fh_to_session(fh);
> + struct virtio_media_queue_state *queue;
> + struct virtio_media_buffer *buffer;
> + int i, ret;
> +
> + if (b->type > VIRTIO_MEDIA_LAST_QUEUE)
> + return -EINVAL;
> + queue = &session->queues[b->type];
> + if (b->index >= queue->allocated_bufs)
> + return -EINVAL;
> + buffer = &queue->buffers[b->index];
> +
> + buffer->buffer.m = b->m;
> + if (V4L2_TYPE_IS_MULTIPLANAR(b->type)) {
> + if (b->length > VIDEO_MAX_PLANES)
> + return -EINVAL;
> + for (i = 0; i < b->length; i++)
> + buffer->planes[i].m = b->m.planes[i].m;
> + }
> +
> + ret = virtio_media_send_buffer_ioctl(fh, VIDIOC_PREPARE_BUF, b);
> + if (ret)
> + return ret;
> +
> + buffer->buffer.flags = V4L2_BUF_FLAG_PREPARED;
> +
> + return 0;
> +}
> +
> +static int virtio_media_qbuf(struct file *file, void *fh, struct v4l2_buffer *b)
> +{
> + struct virtio_media_session *session = fh_to_session(fh);
> + struct virtio_media_queue_state *queue;
> + struct virtio_media_buffer *buffer;
> + bool prepared;
> + u32 old_flags;
> + int i, ret;
> +
> + if (b->type > VIRTIO_MEDIA_LAST_QUEUE)
> + return -EINVAL;
> + queue = &session->queues[b->type];
> + if (b->index >= queue->allocated_bufs)
> + return -EINVAL;
> + buffer = &queue->buffers[b->index];
> + prepared = buffer->buffer.flags & V4L2_BUF_FLAG_PREPARED;
> +
> + /*
> + * Store the buffer and plane `m` information so we can retrieve it again
> + * when DQBUF occurs.
> + */
> + if (!prepared) {
> + buffer->buffer.m = b->m;
> + if (V4L2_TYPE_IS_MULTIPLANAR(b->type)) {
> + if (b->length > VIDEO_MAX_PLANES)
> + return -EINVAL;
> + for (i = 0; i < b->length; i++)
> + buffer->planes[i].m = b->m.planes[i].m;
> + }
> + }
> + old_flags = buffer->buffer.flags;
> + buffer->buffer.flags = V4L2_BUF_FLAG_QUEUED;
> +
> + ret = virtio_media_send_buffer_ioctl(fh, VIDIOC_QBUF, b);
> + if (ret) {
> + /* Rollback the previous flags as the buffer is not queued. */
> + buffer->buffer.flags = old_flags;
> + return ret;
> + }
> +
> + queue->queued_bufs += 1;
> +
> + return 0;
> +}
> +
> +static int virtio_media_dqbuf(struct file *file, void *fh,
> + struct v4l2_buffer *b)
> +{
> + struct video_device *video_dev = video_devdata(file);
> + struct virtio_media *vv = to_virtio_media(video_dev);
> + struct virtio_media_session *session =
> + fh_to_session(file->private_data);
> + struct virtio_media_buffer *dqbuf;
> + struct virtio_media_queue_state *queue;
> + struct list_head *buffer_queue;
> + struct v4l2_plane *planes_backup = NULL;
> + const bool is_multiplanar = V4L2_TYPE_IS_MULTIPLANAR(b->type);
> + int ret;
> +
> + if (b->type > VIRTIO_MEDIA_LAST_QUEUE)
> + return -EINVAL;
> +
> + queue = &session->queues[b->type];
> +
> + /*
> + * If a buffer with the LAST flag has been returned, subsequent calls to DQBUF
> + * must return -EPIPE until the queue is cleared.
> + */
> + if (queue->is_capture_last)
> + return -EPIPE;
> +
> + buffer_queue = &queue->pending_dqbufs;
> +
> + if (session->nonblocking_dequeue) {
> + if (list_empty(buffer_queue))
> + return -EAGAIN;
> + } else if (queue->allocated_bufs == 0) {
> + return -EINVAL;
> + } else if (!queue->streaming) {
> + return -EINVAL;
> + }
> +
> + /*
> + * vv->lock has been acquired by virtio_media_device_ioctl. Release it
> + * while we want to other ioctls for this session can be processed and
> + * potentially trigger dqbuf_wait.
> + */
> + mutex_unlock(&vv->vlock);
> + ret = wait_event_interruptible(session->dqbuf_wait,
> + !list_empty(buffer_queue));
> + mutex_lock(&vv->vlock);
> + if (ret)
> + return -EINTR;
> +
> + mutex_lock(&session->queues_lock);
> + dqbuf = list_first_entry(buffer_queue, struct virtio_media_buffer,
> + list);
> + list_del(&dqbuf->list);
> + mutex_unlock(&session->queues_lock);
> +
> + /* Clear the DONE flag as the buffer is now being dequeued. */
> + dqbuf->buffer.flags &= ~V4L2_BUF_FLAG_DONE;
> +
> + if (is_multiplanar) {
> + size_t nb_planes = min_t(u32, b->length, VIDEO_MAX_PLANES);
> +
> + memcpy(b->m.planes, dqbuf->planes,
> + nb_planes * sizeof(struct v4l2_plane));
> + planes_backup = b->m.planes;
> + }
> +
> + memcpy(b, &dqbuf->buffer, sizeof(*b));
> +
> + if (is_multiplanar)
> + b->m.planes = planes_backup;
> +
> + if (V4L2_TYPE_IS_CAPTURE(b->type) && b->flags & V4L2_BUF_FLAG_LAST)
> + queue->is_capture_last = true;
> +
> + return 0;
> +}
> +
> +/*
> + * s/g_input/output work with an unsigned int - recast this to a u32 so the
> + * size is unambiguous.
> + */
> +
> +static int virtio_media_g_input(struct file *file, void *fh, unsigned int *i)
> +{
> + u32 input;
> + int ret;
> +
> + ret = virtio_media_send_wr_ioctl(fh, VIDIOC_G_INPUT, &input,
> + sizeof(input), sizeof(input));
> + if (ret)
> + return ret;
> +
> + *i = input;
> +
> + return 0;
> +}
> +
> +static int virtio_media_s_input(struct file *file, void *fh, unsigned int i)
> +{
> + u32 input = i;
> +
> + return virtio_media_send_wr_ioctl(fh, VIDIOC_S_INPUT, &input,
> + sizeof(input), sizeof(input));
> +}
> +
> +static int virtio_media_g_output(struct file *file, void *fh, unsigned int *o)
> +{
> + u32 output;
> + int ret;
> +
> + ret = virtio_media_send_wr_ioctl(fh, VIDIOC_G_OUTPUT, &output,
> + sizeof(output), sizeof(output));
> + if (ret)
> + return ret;
> +
> + *o = output;
> +
> + return 0;
> +}
> +
> +static int virtio_media_s_output(struct file *file, void *fh, unsigned int o)
> +{
> + u32 output = o;
> +
> + return virtio_media_send_wr_ioctl(fh, VIDIOC_S_OUTPUT, &output,
> + sizeof(output), sizeof(output));
> +}
> +
> +/*
> + * decoder_cmd can affect the state of the CAPTURE queue.
> + */
> +
> +static int virtio_media_decoder_cmd(struct file *file, void *fh,
> + struct v4l2_decoder_cmd *cmd)
> +{
> + struct virtio_media_session *session = fh_to_session(fh);
> + int ret;
> +
> + ret = virtio_media_send_wr_ioctl(fh, VIDIOC_DECODER_CMD, cmd,
> + sizeof(*cmd), sizeof(*cmd));
> + if (ret)
> + return ret;
> +
> + /* A START command makes the CAPTURE queue able to dequeue again. */
> + if (cmd->cmd == V4L2_DEC_CMD_START) {
> + session->queues[V4L2_BUF_TYPE_VIDEO_CAPTURE].is_capture_last =
> + false;
> + session->queues[V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE]
> + .is_capture_last = false;
> + }
> +
> + return 0;
> +}
> +
> +/*
> + * s_std doesn't work with a pointer, so we cannot use SIMPLE_W_IOCTL.
> + */
> +
> +static int virtio_media_s_std(struct file *file, void *fh, v4l2_std_id s)
> +{
> + int ret;
> +
> + ret = virtio_media_send_w_ioctl(fh, VIDIOC_S_STD, &s, sizeof(s));
> + if (ret)
> + return ret;
> +
> + return 0;
> +}
> +
> +const struct v4l2_ioctl_ops virtio_media_ioctl_ops = {
> + /* VIDIOC_QUERYCAP handler */
> + .vidioc_querycap = virtio_media_querycap,
> +
> + /* VIDIOC_ENUM_FMT handlers */
> + .vidioc_enum_fmt_vid_cap = virtio_media_enum_fmt,
> + .vidioc_enum_fmt_vid_overlay = virtio_media_enum_fmt,
> + .vidioc_enum_fmt_vid_out = virtio_media_enum_fmt,
> + .vidioc_enum_fmt_sdr_cap = virtio_media_enum_fmt,
> + .vidioc_enum_fmt_sdr_out = virtio_media_enum_fmt,
> + .vidioc_enum_fmt_meta_cap = virtio_media_enum_fmt,
> + .vidioc_enum_fmt_meta_out = virtio_media_enum_fmt,
> +
> + /* VIDIOC_G_FMT handlers */
> + .vidioc_g_fmt_vid_cap = virtio_media_g_fmt,
> + .vidioc_g_fmt_vid_overlay = virtio_media_g_fmt,
> + .vidioc_g_fmt_vid_out = virtio_media_g_fmt,
> + .vidioc_g_fmt_vid_out_overlay = virtio_media_g_fmt,
> + .vidioc_g_fmt_vbi_cap = virtio_media_g_fmt,
> + .vidioc_g_fmt_vbi_out = virtio_media_g_fmt,
> + .vidioc_g_fmt_sliced_vbi_cap = virtio_media_g_fmt,
> + .vidioc_g_fmt_sliced_vbi_out = virtio_media_g_fmt,
> + .vidioc_g_fmt_vid_cap_mplane = virtio_media_g_fmt,
> + .vidioc_g_fmt_vid_out_mplane = virtio_media_g_fmt,
> + .vidioc_g_fmt_sdr_cap = virtio_media_g_fmt,
> + .vidioc_g_fmt_sdr_out = virtio_media_g_fmt,
> + .vidioc_g_fmt_meta_cap = virtio_media_g_fmt,
> + .vidioc_g_fmt_meta_out = virtio_media_g_fmt,
> +
> + /* VIDIOC_S_FMT handlers */
> + .vidioc_s_fmt_vid_cap = virtio_media_s_fmt,
> + .vidioc_s_fmt_vid_overlay = virtio_media_s_fmt,
> + .vidioc_s_fmt_vid_out = virtio_media_s_fmt,
> + .vidioc_s_fmt_vid_out_overlay = virtio_media_s_fmt,
> + .vidioc_s_fmt_vbi_cap = virtio_media_s_fmt,
> + .vidioc_s_fmt_vbi_out = virtio_media_s_fmt,
> + .vidioc_s_fmt_sliced_vbi_cap = virtio_media_s_fmt,
> + .vidioc_s_fmt_sliced_vbi_out = virtio_media_s_fmt,
> + .vidioc_s_fmt_vid_cap_mplane = virtio_media_s_fmt,
> + .vidioc_s_fmt_vid_out_mplane = virtio_media_s_fmt,
> + .vidioc_s_fmt_sdr_cap = virtio_media_s_fmt,
> + .vidioc_s_fmt_sdr_out = virtio_media_s_fmt,
> + .vidioc_s_fmt_meta_cap = virtio_media_s_fmt,
> + .vidioc_s_fmt_meta_out = virtio_media_s_fmt,
> +
> + /* VIDIOC_TRY_FMT handlers */
> + .vidioc_try_fmt_vid_cap = virtio_media_try_fmt,
> + .vidioc_try_fmt_vid_overlay = virtio_media_try_fmt,
> + .vidioc_try_fmt_vid_out = virtio_media_try_fmt,
> + .vidioc_try_fmt_vid_out_overlay = virtio_media_try_fmt,
> + .vidioc_try_fmt_vbi_cap = virtio_media_try_fmt,
> + .vidioc_try_fmt_vbi_out = virtio_media_try_fmt,
> + .vidioc_try_fmt_sliced_vbi_cap = virtio_media_try_fmt,
> + .vidioc_try_fmt_sliced_vbi_out = virtio_media_try_fmt,
> + .vidioc_try_fmt_vid_cap_mplane = virtio_media_try_fmt,
> + .vidioc_try_fmt_vid_out_mplane = virtio_media_try_fmt,
> + .vidioc_try_fmt_sdr_cap = virtio_media_try_fmt,
> + .vidioc_try_fmt_sdr_out = virtio_media_try_fmt,
> + .vidioc_try_fmt_meta_cap = virtio_media_try_fmt,
> + .vidioc_try_fmt_meta_out = virtio_media_try_fmt,
> +
> + /* Buffer handlers */
> + .vidioc_reqbufs = virtio_media_reqbufs,
> + .vidioc_querybuf = virtio_media_querybuf,
> + .vidioc_qbuf = virtio_media_qbuf,
> + .vidioc_expbuf = NULL,
> + .vidioc_dqbuf = virtio_media_dqbuf,
> + .vidioc_create_bufs = virtio_media_create_bufs,
> + .vidioc_prepare_buf = virtio_media_prepare_buf,
> + /* Overlay interface not supported yet */
> + .vidioc_overlay = NULL,
> + /* Overlay interface not supported yet */
> + .vidioc_g_fbuf = NULL,
> + /* Overlay interface not supported yet */
> + .vidioc_s_fbuf = NULL,
> +
> + /* Stream on/off */
> + .vidioc_streamon = virtio_media_streamon,
> + .vidioc_streamoff = virtio_media_streamoff,
> +
> + /* Standard handling */
> + .vidioc_g_std = virtio_media_g_std,
> + .vidioc_s_std = virtio_media_s_std,
> + .vidioc_querystd = virtio_media_querystd,
> +
> + /* Input handling */
> + .vidioc_enum_input = virtio_media_enuminput,
> + .vidioc_g_input = virtio_media_g_input,
> + .vidioc_s_input = virtio_media_s_input,
> +
> + /* Output handling */
> + .vidioc_enum_output = virtio_media_enumoutput,
> + .vidioc_g_output = virtio_media_g_output,
> + .vidioc_s_output = virtio_media_s_output,
> +
> + /* Control handling */
> + .vidioc_query_ext_ctrl = virtio_media_query_ext_ctrl,
> + .vidioc_g_ext_ctrls = virtio_media_g_ext_ctrls,
> + .vidioc_s_ext_ctrls = virtio_media_s_ext_ctrls,
> + .vidioc_try_ext_ctrls = virtio_media_try_ext_ctrls,
> + .vidioc_querymenu = virtio_media_querymenu,
> +
> + /* Audio ioctls */
> + .vidioc_enumaudio = virtio_media_enumaudio,
> + .vidioc_g_audio = virtio_media_g_audio,
> + .vidioc_s_audio = virtio_media_s_audio,
> +
> + /* Audio out ioctls */
> + .vidioc_enumaudout = virtio_media_enumaudout,
> + .vidioc_g_audout = virtio_media_g_audout,
> + .vidioc_s_audout = virtio_media_s_audout,
> + .vidioc_g_modulator = virtio_media_g_modulator,
> + .vidioc_s_modulator = virtio_media_s_modulator,
> +
> + /* Crop ioctls */
> + /* Not directly an ioctl (part of VIDIOC_CROPCAP), so no need to implement */
> + .vidioc_g_pixelaspect = NULL,
> + .vidioc_g_selection = virtio_media_g_selection,
> + .vidioc_s_selection = virtio_media_s_selection,
> +
> + /* Compression ioctls */
> + /* Deprecated in V4L2. */
> + .vidioc_g_jpegcomp = NULL,
> + /* Deprecated in V4L2. */
> + .vidioc_s_jpegcomp = NULL,
> + .vidioc_g_enc_index = virtio_media_g_enc_index,
> + .vidioc_encoder_cmd = virtio_media_encoder_cmd,
> + .vidioc_try_encoder_cmd = virtio_media_try_encoder_cmd,
> + .vidioc_decoder_cmd = virtio_media_decoder_cmd,
> + .vidioc_try_decoder_cmd = virtio_media_try_decoder_cmd,
> +
> + /* Stream type-dependent parameter ioctls */
> + .vidioc_g_parm = virtio_media_g_parm,
> + .vidioc_s_parm = virtio_media_s_parm,
> +
> + /* Tuner ioctls */
> + .vidioc_g_tuner = virtio_media_g_tuner,
> + .vidioc_s_tuner = virtio_media_s_tuner,
> + .vidioc_g_frequency = virtio_media_g_frequency,
> + .vidioc_s_frequency = virtio_media_s_frequency,
> + .vidioc_enum_freq_bands = virtio_media_enum_freq_bands,
> +
> + /* Sliced VBI cap */
> + .vidioc_g_sliced_vbi_cap = virtio_media_g_sliced_vbi_cap,
> +
> + /* Log status ioctl */
> + /* Guest-only operation */
> + .vidioc_log_status = NULL,
> +
> + .vidioc_s_hw_freq_seek = virtio_media_s_hw_freq_seek,
> +
> + .vidioc_enum_framesizes = virtio_media_enum_framesizes,
> + .vidioc_enum_frameintervals = virtio_media_enum_frameintervals,
> +
> + /* DV Timings IOCTLs */
> + .vidioc_s_dv_timings = virtio_media_s_dv_timings,
> + .vidioc_g_dv_timings = virtio_media_g_dv_timings,
> + .vidioc_query_dv_timings = virtio_media_query_dv_timings,
> + .vidioc_enum_dv_timings = virtio_media_enum_dv_timings,
> + .vidioc_dv_timings_cap = virtio_media_dv_timings_cap,
> + .vidioc_g_edid = NULL,
> + .vidioc_s_edid = NULL,
> +
> + .vidioc_subscribe_event = virtio_media_subscribe_event,
> + .vidioc_unsubscribe_event = virtio_media_unsubscribe_event,
> +
> + /* For other private ioctls */
> + .vidioc_default = NULL,
> +};
> +
> +long virtio_media_device_ioctl(struct file *file, unsigned int cmd,
> + unsigned long arg)
> +{
> + struct video_device *video_dev = video_devdata(file);
> + struct virtio_media *vv = to_virtio_media(video_dev);
> + struct v4l2_fh *vfh = NULL;
> + struct v4l2_standard standard;
> + v4l2_std_id std_id = 0;
> + int ret;
> +
> + if (test_bit(V4L2_FL_USES_V4L2_FH, &video_dev->flags))
> + vfh = file->private_data;
> +
> + mutex_lock(&vv->vlock);
> +
> + /*
> + * We need to handle a few ioctls manually because their result rely on
> + * vfd->tvnorms, which is normally updated by the driver as S_INPUT is
> + * called. Since we want to just pass these ioctls through, we have to hijack
> + * them from here.
> + */
> + switch (cmd) {
> + case VIDIOC_S_STD:
> + ret = copy_from_user(&std_id, (void __user *)arg,
> + sizeof(std_id));
> + if (ret) {
> + ret = -EINVAL;
> + break;
> + }
> + ret = virtio_media_s_std(file, vfh, std_id);
> + break;
> + case VIDIOC_ENUMSTD:
> + ret = copy_from_user(&standard, (void __user *)arg,
> + sizeof(standard));
> + if (ret) {
> + ret = -EINVAL;
> + break;
> + }
> + ret = virtio_media_enumstd(file, vfh, &standard);
> + if (ret)
> + break;
> + ret = copy_to_user((void __user *)arg, &standard,
> + sizeof(standard));
> + if (ret)
> + ret = -EINVAL;
> + break;
> + case VIDIOC_QUERYSTD:
> + ret = virtio_media_querystd(file, vfh, &std_id);
> + if (ret)
> + break;
> + ret = copy_to_user((void __user *)arg, &std_id, sizeof(std_id));
> + if (ret)
> + ret = -EINVAL;
> + break;
> + default:
> + ret = video_ioctl2(file, cmd, arg);
> + break;
> + }
> +
> + mutex_unlock(&vv->vlock);
> +
> + return ret;
> +}
> diff --git a/include/uapi/linux/virtio_ids.h b/include/uapi/linux/virtio_ids.h
> index 7aa2eb76620508fdc915533f74973d76308d3ef5..b4bb0ace0b26e37224c975f89bbf669c51921816 100644
> --- a/include/uapi/linux/virtio_ids.h
> +++ b/include/uapi/linux/virtio_ids.h
> @@ -68,6 +68,7 @@
> #define VIRTIO_ID_AUDIO_POLICY 39 /* virtio audio policy */
> #define VIRTIO_ID_BT 40 /* virtio bluetooth */
> #define VIRTIO_ID_GPIO 41 /* virtio gpio */
> +#define VIRTIO_ID_MEDIA 48 /* virtio media */
>
> /*
> * Virtio Transitional IDs
>
> ---
> base-commit: 0af2f6be1b4281385b618cb86ad946eded089ac8
> change-id: 20241229-virtio-media-25067bb27526
>
> Best regards,
> --
> Alexandre Courbot <gnurou@xxxxxxxxx>
>
>
--
Ricardo Ribalda
Return-Path: <linux-kernel+bounces-665807-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [147.75.48.161])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 3F9AE41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:24:45 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sy.mirrors.kernel.org (Postfix) with ESMTPS id 329FB7ABA6D
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:23:26 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 5674328CF41;
Wed, 28 May 2025 16:24:34 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="FV/+li4T"
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id D95811632C8
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:24:31 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449473; cv=none; b=SyxCKLet2wRVCVwKCIAvPNXDG3jPTbh6RV6hM2lcazxXet4wN/2p197DlOvUHirRKB+wnSjo3KjCX62KyTbps5N0E+YcTPVXF4UzTkQJF90JrncIgcDcKOMf2vHAM6xzF1eLSOBDpZTCthq1dSwfrz1rXmC905CRxQ+CP3lL+Bk=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449473; c=relaxed/simple;
bh=282JlZCXGeqP/PzRjpZh9RPcBxfOxdu51od+r+SojZM=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=JoqxGuUiMiAs8LO6zUkhtgSoXi3+Lfgk6rjxkdOnaJkAc7LaORh+eZ8enE66S7fj5wgYbXXcacLa0P5k+qrGsBeUmDxzfXi11VbU9yii47V4T4lDtLtXccqoNz/nPQ7nOk0cPeHXwzO5p9xrfcqfNDivlj4otm4GLIKP1l4AQIg=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=FV/+li4T; arc=none smtp.client-ip=170.10.129.124
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
s=mimecast20190719; t=1748449470;
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:
in-reply-to:in-reply-to:references:references;
bh=H3WfoxKRVcW4Y+DnHDOZBJuxMROGpvocSlXq1ZkIg5E=;
b=FV/+li4TWgmTQ7xQVtbvh+PJAVGtxQuVooFV8o5yDejKOHFsaWEBTQQsoZ7/Owpw6TkIyl
tvLisBDEOTK0v1WqCWUcB2rryIeyVn8rqsVWySuFwyiRwAVJxIfll2P49/Fzb1c0fCZF+K
lwvaaml8QlT7zdbPGYeWk4tsvQW16h8=
Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com
[209.85.222.199]) by relay.mimecast.com with ESMTP with STARTTLS
(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
us-mta-101-wWI5UzQMNeSNExAZc6aWwg-1; Wed, 28 May 2025 12:24:29 -0400
X-MC-Unique: wWI5UzQMNeSNExAZc6aWwg-1
X-Mimecast-MFC-AGG-ID: wWI5UzQMNeSNExAZc6aWwg_1748449469
Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-7c9255d5e8cso799934885a.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:24:29 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748449469; x=1749054269;
h=in-reply-to:content-disposition:mime-version:references:message-id
:subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=H3WfoxKRVcW4Y+DnHDOZBJuxMROGpvocSlXq1ZkIg5E=;
b=uJU/8dw4SH+VUmlNH0J/q1A6eqoAorN7ORZLaJfU/d7nzN+Y0LmZBZh++v1oP6rbMr
qricDVLM9XjZy2wR4TxXIJd13SGs0cmms7r0QkhngE+DRegMH7Lyazq8f/L+xFrumhE3
bIxDaWFC9qCFZfyyhQBXVZkR5AX210WrGWlcIGCEBuPpN5OpIrwoK92KkJixh96/LB+7
GNyd37U7j+C1Abb4bWb1Y57883i16bWOsNMc6QVva8Ug7Appifvp7l1RF0/nXmyO06Yg
h2sJ28aJw2i//9ezFQJKOJzyzrn76KhB7sYHtclYyncAjhblDIKVRzcXnoK+FwXw3tLJ
z9sw==
X-Forwarded-Encrypted: i=1; AJvYcCUUf3ZkqcsvolGk94HRUYVy0T2Go9bgM4sbYaUb/djuQQZmt8oMu8oj8GnTXnt/vFfqltmayN6kfsFp0ag=@vger.kernel.org
X-Gm-Message-State: AOJu0YxQqY60Lpnaa32T4+vzdRAyuIWt6tEyHjHjxhrk/mo+hEbYC3KG
6nwMxEyutkkuDl5B4zYvI4cA3agWtKpQiq/l+ZTS11fuGR9sNpHcMXN3EcDTYwmwZOEUP9ErT1/
yxefHbc1aYvUHQeC81wtREwxIBaMz7A95g36jqSgMWa6SAA3wyjrdJ+XNFtOT4pxpOQ==
X-Gm-Gg: ASbGnctwbV3HdSA5d522mpjaJgjUEXuhukl9MFcnqDewP3MwE9r2s7j5LEtgcPDIpnF
dkMYxF0D31pu4A9brRmog7NINJAIWIcrFMAMzjWF0LRSYxMzIxIs1y1uVYgb13/OudMiA15RHbi
TKHrfl4rB0zPUTZFdG5Fb7jJ14pdUlrnxfxB/rSLLe0rLZ/PZyGatO6Pym2q8vq9b9m6kk+rP+h
jTXnL94H+0+xOBSlAUI8KwJasvcQ3GrOoWNQOLs+kL1UWoM9LnY2tVvdjv6BbFTi7Nq+igT4Ogt
7VM=
X-Received: by 2002:a05:620a:8804:b0:7ca:f447:c676 with SMTP id af79cd13be357-7ceecc7b357mr2983878385a.43.1748449468981;
Wed, 28 May 2025 09:24:28 -0700 (PDT)
X-Google-Smtp-Source: AGHT+IHAnXf43b6H4MlK1EjDvv8V/BsoyuWSWPUUzmroPDps16PFlFqzdhDpePuXhUVM/nmAt1nS0Q==
X-Received: by 2002:a05:620a:8804:b0:7ca:f447:c676 with SMTP id af79cd13be357-7ceecc7b357mr2983875185a.43.1748449468640;
Wed, 28 May 2025 09:24:28 -0700 (PDT)
Received: from x1.local ([85.131.185.92])
by smtp.gmail.com with ESMTPSA id af79cd13be357-7cfc5d3a361sm87712085a.87.2025.05.28.09.24.27
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Wed, 28 May 2025 09:24:28 -0700 (PDT)
Date: Wed, 28 May 2025 12:24:24 -0400
From: Peter Xu <peterx@xxxxxxxxxx>
To: James Houghton <jthoughton@xxxxxxxxxx>
Cc: Oscar Salvador <osalvador@xxxxxxx>,
David Hildenbrand <david@xxxxxxxxxx>,
Gavin Guo <gavinguo@xxxxxxxxxx>, linux-mm@xxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, muchun.song@xxxxxxxxx,
akpm@xxxxxxxxxxxxxxxxxxxx, mike.kravetz@xxxxxxxxxx,
kernel-dev@xxxxxxxxxx, stable@xxxxxxxxxxxxxxx,
Hugh Dickins <hughd@xxxxxxxxxx>, Florent Revest <revest@xxxxxxxxxx>,
Gavin Shan <gshan@xxxxxxxxxx>
Subject: Re: [PATCH v3] mm/hugetlb: fix a deadlock with pagecache_folio and
hugetlb_fault_mutex_table
Message-ID: <aDc4uO_Vq-q7ks5h@x1.local>
References: <20250528023326.3499204-1-gavinguo@xxxxxxxxxx>
<aDbXEnqnpDnAx4Mw@localhost.localdomain>
<aDcl2YM5wX-MwzbM@x1.local>
<629bb87e-c493-4069-866c-20e02c14ddcc@xxxxxxxxxx>
<aDcvplLNH0nGsLD1@localhost.localdomain>
<CADrL8HXD0hX+5WvtZWKXAr0NvfvOJZhqL9PVBawYQuAyzhGgYg@xxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
In-Reply-To: <CADrL8HXD0hX+5WvtZWKXAr0NvfvOJZhqL9PVBawYQuAyzhGgYg@xxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 12:14:28PM -0400, James Houghton wrote:
[...]
> > > For 2) I am also not sure if we need need the pagecache folio locked; I
> > > doubt it ... but this code is not the easiest to follow.
> >
> > I have been staring at that code and thinking about potential scenarios
> > for a few days now, and I cannot convice myself that we need
> > pagecache_folio's lock when pagecache_folio != old_folio because as a
> > matter of fact I cannot think of anything it protects us against.
>
> Hi Oscar,
Hey, James,
>
> Have you thought about the UFFDIO_CONTINUE case (hugetlb_mfill_atomic_pte())?
>
> I'm slightly concerned that, if you aren't holding pagecache_folio's
> lock, there might be issues where hugetlb_mfill_atomic_pte() proceeds
> to map a hugetlb page that it is not supposed to. (For example, if the
> fault handler does not generally hold pagecache_folio's lock,
> hugetlb_mfill_atomic_pte() will see a page in the pagecache and map
> it, even though it may not have been zeroed yet.)
>
> I haven't had enough time to fully think through this case, but just
> want to make sure it has been considered.
AFAIU we're talking about two separate code paths. IIUC you're talking
about a fresh new hugetlb folio being allocated, but then that's what
hugetlb_no_page() does. Folio lock required there.
Here IIUC Oscar's context is only in hugetlb_wp() where there's a niche use
case to compare whether a VM_PRIVATE has already CoWed once from a
pagecache, and whether we need the folio lock for the pagecache lookup.
Aka, this one:
if ((flags & (FAULT_FLAG_WRITE|FAULT_FLAG_UNSHARE)) &&
!(vma->vm_flags & VM_MAYSHARE) && !huge_pte_write(vmf.orig_pte)) {
if (vma_needs_reservation(h, vma, vmf.address) < 0) {
ret = VM_FAULT_OOM;
goto out_mutex;
}
/* Just decrements count, does not deallocate */
vma_end_reservation(h, vma, vmf.address);
pagecache_folio = filemap_lock_hugetlb_folio(h, mapping, <---
vmf.pgoff);
if (IS_ERR(pagecache_folio))
pagecache_folio = NULL;
}
Thanks,
--
Peter Xu
Return-Path: <linux-kernel+bounces-665808-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 76CAA41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:25:41 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id B608F4A560D
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:25:42 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 3825D28C852;
Wed, 28 May 2025 16:25:36 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=aol.com header.i=@aol.com header.b="jHwONf8/"
Received: from sonic306-20.consmr.mail.gq1.yahoo.com (sonic306-20.consmr.mail.gq1.yahoo.com [98.137.68.83])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id BF8CE1632C8
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:25:33 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=98.137.68.83
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449535; cv=none; b=DxT0pWt/JuJJFMHVqVx023GQY0u8a6aRx4lT0wPyx41Aveuj8C4jO3ZuLeWD+vpd9T3X8WBymHZ4m8+Q3SLf5krb79C3KlxzuAl5GJ4Ubq5o83Cn8FvzU9phaEFgvpi2hIyL5c5s0NsQaLCs2fmOGDPGy7Msx4hEhClFmJ0sU60=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449535; c=relaxed/simple;
bh=HFxhx5zxugMXnHGPXaZv+GmHaXrwjFwTYGq+wsNop9M=;
h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References:
Content-Type:MIME-Version; b=sGQhMQJR59RQsHe6mduBYNXmRwTjkEIKTTEuBPn2aK4JK4dkMFX56x3JrI2jp3HUP5LrJap59reOmZx9GT32CROJDfFnB2dj8EruOhFvuxspwWiPtbfuDLELb09vghxA51jOqRzsNCPzanWulXWJyxMyG0I50JsBnsSIIk/g9Zw=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=aol.com; spf=pass smtp.mailfrom=aol.com; dkim=pass (2048-bit key) header.d=aol.com header.i=@aol.com header.b=jHwONf8/; arc=none smtp.client-ip=98.137.68.83
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=aol.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=aol.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1748449533; bh=5CSqmFfYZqp9BavGTmNLGt9In65KcvThz/y2RFlvWlI=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From:Subject:Reply-To; b=jHwONf8/0khBRFBHgn3ecyRmITo5nhQgvF3qW+Xx9IH027BQhZS6mUjZeewRq3Qp9OflmQOxhSqpo1pLxDaUqtOIa5YMrPHTgVyBQVgMhe82Gp7AvfvfgUgPuII8l55b1Eu8zCXa5q88ZC4fISxIp5ByJdXuA8b7li9ZpVG8dKnb8veJhr9+DDbsa1Iat/4i9iLiUSo0Xq5Y6/AnN3d1mJl8ZlUsAPY2TBFZNwCxLV5q60Ca/9UQrY9s4KAUzvxNZTev5M1vJrQIL0b1/8dGH8ozrczmiSzRMjRflZeckZ6vbtvCRlFAzsJdC2dIxxw7Dnxb8zqpbrlTTYo/08ZuvQ==
X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1748449533; bh=/6BCCiNfCDsDPoPDAdS56kCitxE1oPgt3d80I70Ympi=; h=X-Sonic-MF:Subject:From:To:Date:From:Subject; b=mW8QyhYrc3hziZF4+/Zs690s5/h9u7/cUUZAcSmU4Ofqev9k3EXxa9lUT5XqwLSeR5cpaC/PIVr14fv3fn39eyIs0z0dq9rl/tl5ITgVwIizpyyX83JoPseWB2OGk+haNpUAD1/aj3iG8yyO5HZD9gl9jERuQ9fkrvd1n2SUPPDYJHmJ4WqfqfDioWuaBw49caCHcRiyFMjSP/b23LSXU+/SW8wW9nJjuyDMecsJj5DgDk8yL4FP7JEdTUM1Orc+gXXvEAhV6ioECI4YQWDSUMzUXXvSOdcB4DxhmYkd3bdFSyjvPYAfjDX4ySDNxI6ZUK3F2Dry2kHTVyzUdgpmHQ==
X-YMail-OSG: 2g2I1XYVM1lTAAlNSRPOyQoW2upoamcBBoSek7nmqsAcsCn_V1tRH6bvPDCCJnN
GdY.ttaLPbNrd8.19pbLDlXCBwNE.UXQGm.gbDsfgig6p3eJCNIAgcr.AeiCqf7oFo75cnlb_H0U
cvyqcRbfwvcSqjrgA8nmkgdA0PnXIcf.GhErMMSF.k9ZPgO4R3pCKeYPXFxV1n8x.SEcn3j_KaPY
RZreD_ezL.boJkTfTJ_0KjVQG_XxYzM4kzQatTRLJhwChVnh8tiysg4PnRMlQUESUhcB6iq5SNlQ
nUnjjJAVk46vlwVGG7Tews1iwwORehV2e8ntDlo2CZH6Jg2CmxBL_aAcV.pbg_lBTdkNN6hSVab_
w0ua3CLFK.uPsQvnA8BTzzmnblHX49yTxkFy7ehiZYvegQMPqq0JVONbVBVXI.PRRZ_IJu7TfAHG
1TLnonaZMvNYeG52KriZW9xc6uUYSG5goY7MIbBFzJ8BOzkrqcq1K4hxp9UYsldnX7yDUAJ63A1Z
6aGbz8b_IfO0xFR.H.BYaEomH22YNX4WpK8QTU7xnVxJ44T4SOP6HMKizi5WnkqtjtxuIuF1zz.8
3kiU5nTk9LMAOIvLPX9laGY.71KSvcHa2KPjKmKpqrLKBOEvMhqtGuXss2BgeO6P.zKH_rSjXCz5
CutbViCewc4z0s8BPUZJrjPUCgjj.khQ3P0bIuJ0SmHKJlumO9ZrMiYi9rUQCnsQj7lMNioxlZso
XtfdR.l8De.GehcRnrvenFojnjOs6Y_ZCvXxwNNSk2weG.E0epzIr0FIjQ7GiDIszDDwh1eRj_H3
_r_J7N7sLgR0KTH.pfs0oJrhrYfYJbuKSkBWmuKB2dk2yKf6u1qAhXJpHK26OD1nbWk2ZbXJ6fTG
3LFBiPkge9TjAmRymyLm4Z.jaNDDouAsgve03NxEifuUm0ae6Kh8q69qB941nqGxz947cdGI9zgV
DbCyV2Kf7NwaLEtFBWTcmiz5OpAZN0sJnH.QmuyYfxKwB8ixolHfUDuEE5ETbu3xTo5u_h81EwSn
T8ylxXw7L5OAoJ5Fo288BlE4UYr2UwTHMHE3GHh0KojwzIDyUw7jEwoytp6GL4M8ayTXY_6edVdM
0d2cVbIvY5CersxG0L4xR4xaAizsikwF0.rjJUUdnDSVW2iqkbccBdo5rXhZhmZM19v_W2sFYDGV
9P.7OA_HDZBMmZ4GhX0bFR0VpS2obizVxHWSTl6lXFCqGMl4CCXYmEP0_wCQlOtqxj.HgtxxXIpf
hYzbeilXPRBIVt2DWJyBdJAGsxYjtUmk0jH7z.TaE3LhTAivw5x73bpPQhNLtOZA7j6pkkMqs_JH
TyI4.WsB0jtVbWW03PW44_ayeoKmc_9v5zre01F4ZOwauACDECZWKAD09e6SDhDZiXvLgSbMkGis
Zbi.QO_i4qYzS45fpC0saNU_G8uf.X69LoWnCn49dwBwwOIjvqdSXNoMdbscUGC8Bd5wuCiMfZjy
s_kAa5OCrGgvsFft_jh8RD1qic7x9356.3o9PibcBGD1D229OZxpKaacylNRuV_TgV.tURgUbXql
qpkdD1PhGrUs2paT.7idw09kpbqSOzMGz6MO_1qgV.eypovBM1nqZUKksVgyTNkCNYwFYZpEa6rU
pxtjRzxcfxSqSW_EZoJkC8tkEq4nBsgEUEZ8UeSy1l7jVlrvh0Qcxsd3plJez_Sl1yoo7iGSg4wM
EzmijwFwu4qsVi1vTIeOyosvfj2x51VJHWV5628wtsnw0JRi3dt_dc6vOnD5MhuaFUEaogm7bP1z
G541COMrA1EJij2Lmy.m6C_3p3jdZ6W80drV8MoAYNEPwKb97byS4obENx1IWc_1FrG4a2d_fW0r
URQGNrRWzrZ0x6TvUvKp8tRFXdGBm4xHif5ROfpCn42kdVkYsPoOxWKg0zhuvfhW8v__eOO2W5Yt
ypp4wqnyVIvJ3vYSMosPpwrf_8k_j66HdO7V1tFuZGh9QFlGMLuDZEFkT1k2hIYmUTnuMcpYM16T
9mp69vuTjy8A8O4m2BJV9xOL_2xCfaAoqiK.atkFBaO_GzFX6z9yCZW.4spCyZBNKNop3sdyPQB.
oQWEtLVFQnbryxOR99woUH2zkRuvgbKpnUMhPuaNYhgoVZVcJfAJL6VSG51cqhZWLO4kL5zyN7rf
Jb6b1lxlOu_m_rbb27ldbgMghBEfuY3nCNr8WuPwdmMNcjrUKnB7A4HNOotcmypg_mlUAdxQ0r1S
LCzcXI0FKVynxrlaVu29dicyLx2lvFhT.q42EQDyTV8IonVBW_j6EA6A-
X-Sonic-MF: <rubenru09@xxxxxxx>
X-Sonic-ID: 17b931d1-4a0e-4dbf-bbf2-a809d17f94c0
Received: from sonic.gate.mail.ne1.yahoo.com by sonic306.consmr.mail.gq1.yahoo.com with HTTP; Wed, 28 May 2025 16:25:33 +0000
Received: by hermes--production-ir2-858bd4ff7b-th9dj (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID eb482e408247eaa799aba001c4517a6b;
Wed, 28 May 2025 15:34:54 +0000 (UTC)
Message-ID: <7a83ac38b5f2c9d7ec08c04a63299d2eeaa832fe.camel@xxxxxxx>
Subject: Re: [PATCH RESEND] x86/cpu/intel: replace deprecated strcpy with
strscpy
From: Ruben Wauters <rubenru09@xxxxxxx>
To: Thomas Gleixner <tglx@xxxxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>,
Borislav Petkov
<bp@xxxxxxxxx>, Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>, x86@xxxxxxxxxx
Cc: "H. Peter Anvin" <hpa@xxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx
Date: Wed, 28 May 2025 16:34:51 +0100
In-Reply-To: <20250520133549.9964-1-rubenru09@xxxxxxx>
References: <20250520133549.9964-1-rubenru09.ref@xxxxxxx>
<20250520133549.9964-1-rubenru09@xxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
User-Agent: Evolution 3.56.0-1
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-Mailer: WebService/1.1.23884 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.aol
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, 2025-05-20 at 14:26 +0100, Ruben Wauters wrote:
> strcpy is deprecated due to lack of bounds checking.
> This patch replaces strcpy with strscpy, the recommended alternative
> for
> null terminated strings, to follow best practices.
>=20
> Signed-off-by: Ruben Wauters <rubenru09@xxxxxxx>
> ---
> This patch was reviewed by H. Peter Anvin and (by my understanding)
> was deemed ok to apply. However this patch has not been applied after
> 2
> weeks, so I am resending it. I have not added a Reviewed-by tag as H.
> Peter Anvin did not do so.
>=20
> I also wanted to note that while immediately this may not have any
> effect, any addition or changes to the strings above may possibly
> overflow the fixed buffer of 64, and the use of strscpy instead of
> strcpy will help prevent any buffer overflows by copying a max amount
> of
> bytes. I do also recognise however that the strings above are
> unlikely
> to be added to, as (by my understanding) they'd require intel to
> release
> a CPU where the x86_model_id would not be detectable.
>=20
> I still believe that while the above scenerio may not come to pass,
> the
> replacement of a deprecated API with the preferred alternative is
> good
> practice and should be done.
> ---
> =C2=A0arch/x86/kernel/cpu/intel.c | 2 +-
> =C2=A01 file changed, 1 insertion(+), 1 deletion(-)
>=20
> diff --git a/arch/x86/kernel/cpu/intel.c
> b/arch/x86/kernel/cpu/intel.c
> index 584dd55bf739..b49bba30434d 100644
> --- a/arch/x86/kernel/cpu/intel.c
> +++ b/arch/x86/kernel/cpu/intel.c
> @@ -607,7 +607,7 @@ static void init_intel(struct cpuinfo_x86 *c)
> =C2=A0 }
> =C2=A0
> =C2=A0 if (p)
> - strcpy(c->x86_model_id, p);
> + strscpy(c->x86_model_id, p);
> =C2=A0 }
> =C2=A0#endif
> =C2=A0
Hello
I was wondering if there was any chance this patch could be applied? is
there something I need to do to change it so it's fine? is there
someone else I need to send it to so they can review it?
I don't want to keep sending and asking about an unwanted patch so if
this isn't wanted please let me know and I'll move on.
Thank you
Ruben Wauters
Return-Path: <linux-kernel+bounces-665809-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id C60A341E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:26:23 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 8A3734A5E28
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:26:23 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C3B7B28CF60;
Wed, 28 May 2025 16:26:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="PvRMGV7Z"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0EA6027815C;
Wed, 28 May 2025 16:26:12 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449573; cv=none; b=L4kqVJjUN9yFU1LLLzxI3P1aVKJxgszVdzZZCbQ2AcLltE4lWpC9HxMh5bXKehX73y1Dv2kvPrTDgBlzhZBtYLFUcde+vGoxTXfMk5aj+dMIt8zn21Q2jCRRf88F5DaCOMwi2CAYZkszZq54lJhZfvWa03pD3fPqEfB4ctXRH00=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449573; c=relaxed/simple;
bh=ppeisGF7inZtJ/rAiiNTGDEtu5mM/udLxSQimZXVfp0=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=BKm/vptTKGG0Zeh6CaEFGdE0unzEuovMiajq2coTP14tbmK9Ila9SO+0PeAw+7nLepsa3bhaUu9w27gmzO/T3pZpkpPrXjdGsImyb9j9Wam3sU4dIS9j4IKgZcD+Rn93Y5ohOdEdK4M8TYxjmoyvKBypt3dV3dTIaG0XLLcoBRM=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PvRMGV7Z; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id E0AF2C4CEE3;
Wed, 28 May 2025 16:26:09 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748449572;
bh=ppeisGF7inZtJ/rAiiNTGDEtu5mM/udLxSQimZXVfp0=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=PvRMGV7ZnYTXa67+AwtnpVH62x5TC6saSJNaY/b0BB1+F5dr40G/wezaCwgxi9xcI
7qQJ6Q1HlBzBom5qn994TNcfgeJ0RUqCIZ6FyfbX4S3NCHZTfQTRYkB1KW1x0feIig
lEEnh9l6i6ujWulpk5aUx3AvaexqGpUUJj282NtTW69wOJ/QwkJDMlo87k5Hy/xCnL
hYqrj55DGbs+NTSJRs9ENVFj2s5tEpOemiNVgnK8bu7EzdaE35onpUan2ryoaUFnxs
kp7289MMSrS3Fk21dHDE9tsezHF4Kt/it+41/f5I+Mtbez/HWfzcinKwWFG8ByPiBO
5t+70sZQCI7bg==
Date: Wed, 28 May 2025 17:26:07 +0100
From: Simon Horman <horms@xxxxxxxxxx>
To: David Howells <dhowells@xxxxxxxxxx>
Cc: netdev@xxxxxxxxxxxxxxx, Dan Carpenter <dan.carpenter@xxxxxxxxxx>,
Marc Dionne <marc.dionne@xxxxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>,
"David S. Miller" <davem@xxxxxxxxxxxxx>,
Eric Dumazet <edumazet@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
linux-afs@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH net-next] rxrpc: Fix return from none_validate_challenge()
Message-ID: <20250528162607.GF1484967@xxxxxxxxxxxxxxxx>
References: <10720.1748358103@xxxxxxxxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <10720.1748358103@xxxxxxxxxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Tue, May 27, 2025 at 04:01:43PM +0100, David Howells wrote:
> Fix the return value of none_validate_challenge() to be explicitly true
> (which indicates the source packet should simply be discarded) rather than
> implicitly true (because rxrpc_abort_conn() always returns -EPROTO which
> gets converted to true).
>
> Note that this change doesn't change the behaviour of the code (which is
> correct by accident) and, in any case, we *shouldn't* get a CHALLENGE
> packet to an rxnull connection (ie. no security).
>
> Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
> Closes: https://lists.infradead.org/pipermail/linux-afs/2025-April/009738.html
> Signed-off-by: David Howells <dhowells@xxxxxxxxxx>
...
Reviewed-by: Simon Horman <horms@xxxxxxxxxx>
Return-Path: <linux-kernel+bounces-665810-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 0FE2841E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:29:30 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 4B2074E01C4
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:29:31 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 632E128CF60;
Wed, 28 May 2025 16:29:25 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="rfpCEm2Z"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3807F2C1A2
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:29:23 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449764; cv=none; b=FJGLgrPbiS3L6FQCBqptqJ6rOCIc2NdN/RSZ1wZ7Dwz7wRfPLdc7Yw5BP9Y0wQ1uGun10Ed+83aXZVGS8Uon8SjUITZjbygN9FZjDr0zlzXo02jIHvMJOQgulXvl/zpQY6K8wlL7HkWlOExPZU5s9cm4TRsCvjsbSDN4tHaRdvg=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449764; c=relaxed/simple;
bh=5d80Uts15uFivd8jgpeZQZ5P5BsUBpfqQO8jiCUoymA=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=K3jMhtcq5Ntf6RjsWzoFdVpl78xRMika3Iko+pxJHsvw+3qilvYEWj7zztQb9DFdHQJqpINSgOAPmYp5FFdaXRns/z85mG4KySY7Xpsq8lz938Xm5HPLA9dy+Pqv/X/AXj6vmtKVED5cynlcO3yE9eqrqDLHxO8rTbqWSgBScVk=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=rfpCEm2Z; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2160FC4CEED;
Wed, 28 May 2025 16:29:22 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org;
s=korg; t=1748449763;
bh=5d80Uts15uFivd8jgpeZQZ5P5BsUBpfqQO8jiCUoymA=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=rfpCEm2Ziy+wUasElaNpu380P7O6LV4PmCZITEmCIlONqjt9niHMWsL/7gR7nXsvA
GnclRDEqqwxR/dxjM+DN+fVFRnR4PKPEYG6dHpxKqeEZY++SeVJKHqcXygKibRodOt
XyrlgSBBXvshI2mWFEe28aWKvKj7HUoEafrxEtzM=
Date: Wed, 28 May 2025 18:29:20 +0200
From: Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx>
To: Thomas =?iso-8859-1?Q?Wei=DFschuh?= <thomas@xxxxxxxx>
Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>,
Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,
"Rafael J. Wysocki" <rafael@xxxxxxxxxx>,
Danilo Krummrich <dakr@xxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx,
Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx>
Subject: Re: [GIT PULL] Driver core changes for 6.16-rc1
Message-ID: <2025052822-cavity-mortality-07d2@gregkh>
References: <aDcyRMojWUbAllVX@xxxxxxxxx>
<35e4b33f-d9e4-41d6-8a47-644fda5b1b7f@xxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <35e4b33f-d9e4-41d6-8a47-644fda5b1b7f@xxxxxxxx>
X-Spam-Status: No, score=-6.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 06:16:21PM +0200, Thomas Weißschuh wrote:
> Hi Greg,
>
> On 2025-05-28 17:56:52+0200, Greg KH wrote:
> > The following changes since commit 82f2b0b97b36ee3fcddf0f0780a9a0825d52fec3:
> >
> > Linux 6.15-rc6 (2025-05-11 14:54:11 -0700)
> >
> > are available in the Git repository at:
> >
> > git://git.kernel.org/pub/scm/linux/kernel/git/driver-core/driver-core.git tags/driver-core-6.16-rc1
> >
> > for you to fetch changes up to 071d8e4c2a3b0999a9b822e2eb8854784a350f8a:
> >
> > kernfs: Relax constraint in draining guard (2025-05-21 14:23:13 +0200)
> >
> > ----------------------------------------------------------------
> > Driver core changes for 6.16-rc1
> >
> > Here are the driver core / kernfs changes for 6.16-rc1.
> >
> > Not a huge number of changes this development cycle, here's the summary
> > of what is included in here:
> > - kernfs locking tweaks, pushing some global locks down into a per-fs
> > image lock
> > - rust driver core and pci device bindings added for new features.
>
> > - sysfs const work for bin_attributes. This churn should now be
> > completed for those types of attributes
>
> This is missing the switch away and removal of the transitional
> struct members, "read_new", "write_new" and "bin_attrs_new".
> These are the actually churny changes.
>
> I have a branch with those, based on current linux-next/master, at
> https://git.kernel.org/pub/scm/linux/kernel/git/thomas.weissschuh/linux.git b4/sysfs-const-bin_attr-final
>
> (Has not yet passed 0day, but earlier versions this week did)
>
> Do you want me to resubmit it to you? Now or shortly before the end of
> the merge window?
Ah, yes, those are still in my "to apply after -rc1 is out" queue, sorry
about that. And yes, I'll be glad to take updated versions as things
have changed.
thanks,
greg k-h
Return-Path: <linux-kernel+bounces-665811-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id A582B41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:29:53 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id B77FA9E7B40
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:29:32 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 6B91F28CF76;
Wed, 28 May 2025 16:29:48 +0000 (UTC)
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id DAB8E28641B;
Wed, 28 May 2025 16:29:47 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449787; cv=none; b=EyY4JJZu5cJNd2Kk2cZeZ7EokZn2xqp+QaXpXhnN5bV346ZPigUEJ4ID3HI18hcrllhOOJh4wJ44TH/Ug6NmkN9PD0CJAQkYcO82FlD3iYvsK2VR83jWC76M4TYXOLSksDk8QTzWuoPlNvcBumm2oT1FAO9PhH1U6rTTc5imv54=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449787; c=relaxed/simple;
bh=pujbF8oV8nkU83fk8rqq/LxjCEyaQOIc104Y3Esq8I0=;
h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References:
MIME-Version:Content-Type; b=OaFzAoAWqRNSH25q92f7clDK52G6QCQyD2bYcfTHhIcpFFm4NaDiaJyYBb2rsZdQfgFbRzWJm5A5Ph1KYBb6CyL4Etnml6HF9no5FENQXMmebPorIqpzi8TXDMd7/v5P3DPhGXocWrN3lKf9cdvwgF7KcYj22AEoJk6Ql2aZWaU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id C91E8C4CEE3;
Wed, 28 May 2025 16:29:46 +0000 (UTC)
Date: Wed, 28 May 2025 12:30:46 -0400
From: Steven Rostedt <rostedt@xxxxxxxxxxx>
To: "Masami Hiramatsu (Google)" <mhiramat@xxxxxxxxxx>
Cc: LKML <linux-kernel@xxxxxxxxxxxxxxx>, Linux Trace Kernel
<linux-trace-kernel@xxxxxxxxxxxxxxx>, Mathieu Desnoyers
<mathieu.desnoyers@xxxxxxxxxxxx>
Subject: Re: [PATCH] ring-buffer: Removed unnecessary if() goto out where
out is the next line
Message-ID: <20250528123046.5577977f@xxxxxxxxxxxxxxxxxx>
In-Reply-To: <20250528093455.e710b3783bbdc93f8be66625@xxxxxxxxxx>
References: <20250527155116.227f35be@xxxxxxxxxxxxxxxxxx>
<20250528093455.e710b3783bbdc93f8be66625@xxxxxxxxxx>
X-Mailer: Claws Mail 3.20.0git84 (GTK+ 2.24.33; x86_64-pc-linux-gnu)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
X-Spam-Status: No, score=-3.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 09:34:55 +0900
Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx> wrote:
> OK, so this is a kind of cleanup.
Correct, which is why I only added a "Fixes" tag but not a "stable" tag.
If someone wants to backport this, let them ;-)
>
> Reviewed-by: Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>
Thanks,
-- Steve
>
> Thanks,
>
> > Fixes: a389d86f7fd0 ("ring-buffer: Have nested events still record running time stamp")
> > Signed-off-by: Steven Rostedt (Google) <rostedt@xxxxxxxxxxx>
Return-Path: <linux-kernel+bounces-665812-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 7A6DD41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:30:18 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id C6FE64E0283
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:30:19 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C8A7828CF7F;
Wed, 28 May 2025 16:30:12 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Q5BpTKer"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id C963628C87B;
Wed, 28 May 2025 16:30:11 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449811; cv=none; b=rsTVEku6fpNAG9vJA9/oQlMTsIT32xMBa81Q5H1BcvvAnnBBmR52mbXXfReP17FXzxc06/BRG/6VKFqyqz/R61eBd16+F8xoJ8D8Um+O5hOHe44T5BPF9JGgm1FC48XzS2j0pC7Ftoov+Hxpi2JYGpb2PwHlGg6IqOOt7xf4suM=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449811; c=relaxed/simple;
bh=HHKUmYQYx+MVj6W9eglzPGornr6ttUWJyuK8q87x0h4=;
h=Date:Content-Type:MIME-Version:From:Cc:To:In-Reply-To:References:
Message-Id:Subject; b=uonzh1QfDI7EVZgRFMUllVO6eyP8QPeURnHzBFIN2VTl0xq7KBvOmW1AYJzxd0ftC3HnSu/RlNQsGggPLn7oxFVQQb5EbRjJm+nM7izyxWcdLpbknn6OTOuXfBCWHvZmkCF9dZV6ynVXEDLSLeLeuh2jUFsTPsaxEgHmKZYyWpk=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Q5BpTKer; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 03A22C4CEE3;
Wed, 28 May 2025 16:30:10 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748449811;
bh=HHKUmYQYx+MVj6W9eglzPGornr6ttUWJyuK8q87x0h4=;
h=Date:From:Cc:To:In-Reply-To:References:Subject:From;
b=Q5BpTKerQXKj/oCa+Z2coUymzeTVRHNlRuCXTGKbTkE1UCGTjPUPEkSsiCJQjO7X1
j0eD5Cu+JeVNhAMdhxpoK4BjKR73YE+7Ocohv5EcY7GgZcY9wsIZtBdq937UkCnQa3
zqrGjY2D6XV7W+ulRlTIKtR52wC6Ng/2PWKn/oRKEhxqKseXvxQP+B28pyTHhcwHC4
v/SVjLVS3+6xAJDIWcZ1PFfluUVEk9ed8HnpQkAcbvLGcJx+gk44awPymP38gqCAfe
6YauEPhQgUOwfw6mpTevElSL+Up083ZM++lpUUygg+iekjWQPQMmWrkW0azjayUyDP
LM6RoNXr3DXiA==
Date: Wed, 28 May 2025 11:30:09 -0500
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: 8bit
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
From: "Rob Herring (Arm)" <robh@xxxxxxxxxx>
Cc: Gaurav Jain <gaurav.jain@xxxxxxx>,
=?utf-8?q?Horia_Geant=C4=83?= <horia.geanta@xxxxxxx>,
Thomas Richard <thomas.richard@xxxxxxxxxxx>, devicetree@xxxxxxxxxxxxxxx,
imx@xxxxxxxxxxxxxxx, Frank Li <Frank.li@xxxxxxx>,
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>, linux-crypto@xxxxxxxxxxxxxxx,
"David S . Miller" <davem@xxxxxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx,
Pankaj Gupta <pankaj.gupta@xxxxxxx>, Shawn Guo <shawnguo@xxxxxxxxxx>,
Fabio Estevam <festevam@xxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>,
Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>
To: John Ernberg <john.ernberg@xxxxxxxx>
In-Reply-To: <20250528144259.2603914-4-john.ernberg@xxxxxxxx>
References: <20250528144259.2603914-1-john.ernberg@xxxxxxxx>
<20250528144259.2603914-4-john.ernberg@xxxxxxxx>
Message-Id: <174844980849.122008.12781867693102871804.robh@xxxxxxxxxx>
Subject: Re: [PATCH v3 3/4] dt-bindings: crypto: fsl,sec-v4.0: Add power
domains for iMX8QM and iMX8QXP
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 14:43:07 +0000, John Ernberg wrote:
> NXP SoCs like the iMX8QM, iMX8QXP or iMX8DXP use power domains for
> resource management.
>
> Allow specifying them for such SoCs.
>
> Signed-off-by: John Ernberg <john.ernberg@xxxxxxxx>
>
> ---
>
> v3:
> - Fix warnings discovered by Rob Herring's bot
> - Declare the compatibles correctly (Krzysztof Kozlowski)
>
> v2:
> - Adjust commit message (Frank Li)
> - Only allow power-domains when compatible with imx8qm (Frank Li)
> ---
> .../bindings/crypto/fsl,sec-v4.0.yaml | 45 ++++++++++++++++++-
> 1 file changed, 44 insertions(+), 1 deletion(-)
>
My bot found errors running 'make dt_binding_check' on your patch:
yamllint warnings/errors:
./Documentation/devicetree/bindings/crypto/fsl,sec-v4.0.yaml:114:17: [warning] wrong indentation: expected 18 but found 16 (indentation)
dtschema/dtc warnings/errors:
doc reference errors (make refcheckdocs):
See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20250528144259.2603914-4-john.ernberg@xxxxxxxx
The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.
If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:
pip3 install dtschema --upgrade
Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.
Return-Path: <linux-kernel+bounces-665813-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 741AA41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:30:37 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 42F359E7B9A
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:30:12 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id BBA3528C2D0;
Wed, 28 May 2025 16:30:14 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qM2hQoUQ"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id DE86B28D84D;
Wed, 28 May 2025 16:30:13 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449814; cv=none; b=TUDbZEfRBCrhA/ZL3BqfUKQ+B86PD2n/0T2sg4COXSMeeu9shroJmFX3SJDlpp5lR9Sl1Pm+9RMTsj09yXHOOBaNHV1OrnGMtONVOtmSfZJbSxXJtfnLwYEctUgsfS7Z2iS7XvurfzEFh8eH1SN9xxeEU7nsUrPgABwWbgvgIgo=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449814; c=relaxed/simple;
bh=7Ddco8Bs8XoPP7Sgox9+6gs/ynZ2ONDg+RF4XTZ26x8=;
h=Date:Content-Type:MIME-Version:From:Cc:To:In-Reply-To:References:
Message-Id:Subject; b=EDSZ1TC0qx4X4gUb5CYV61y4l2buIUet7B2xUkkmQmp2W1si3JhyiFJIkyzXWUSJYrLS2BjrhZvTFtMBOVVphpVYl3uR5Z49VJn7tHvv30rM3oD1ys7uuN2jkwAeCNRpbB6Md92Yf1zp9CIIgJs5JiwJmGWjVNtfVOshRkFGfjw=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qM2hQoUQ; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 124ACC4CEED;
Wed, 28 May 2025 16:30:12 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748449813;
bh=7Ddco8Bs8XoPP7Sgox9+6gs/ynZ2ONDg+RF4XTZ26x8=;
h=Date:From:Cc:To:In-Reply-To:References:Subject:From;
b=qM2hQoUQRoa+sjl+Pd34UZ8gWk9fmaucPWGcXjz2hhNVtu0jQ7cosdxFBtew2i8mg
eijOPXuC37GVroVoy8qFYJdRZ3aDCMTDZklItaIlYhJ8t5NEmf1qVm2ilGq6R7toz/
C6PA5DLY5uu04KrGsgJ0TlP+fw+XBsxB+4MNt1njgkdHntLx2xQKKoQkTmnB3XbZ/x
zxQovxJHQ43ngRcCqoHp9z/4bxJJANwnF06U/+W7dnH6ZEuG0HU09oE6Fk9VecnkMG
XsKkKFXd9WxKXjMLxbuU/yVPLZUPXBDfDkckVDfPv81s9KyUBh7whN0nhQaq4IBR0H
f2dGfD0xkFkjg==
Date: Wed, 28 May 2025 11:30:11 -0500
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
From: "Rob Herring (Arm)" <robh@xxxxxxxxxx>
Cc: Michael Turquette <mturquette@xxxxxxxxxxxx>,
Russell King <linux@xxxxxxxxxxxxxxx>, netdev@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx,
"David S. Miller" <davem@xxxxxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>,
Jakub Kicinski <kuba@xxxxxxxxxx>, Andrew Lunn <andrew@xxxxxxx>,
Bjorn Andersson <andersson@xxxxxxxxxx>,
Konrad Dybcio <konradybcio@xxxxxxxxxx>, linux-clk@xxxxxxxxxxxxxxx,
linux-arm-msm@xxxxxxxxxxxxxxx, Florian Fainelli <f.fainelli@xxxxxxxxx>,
Stephen Boyd <sboyd@xxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>,
Heiner Kallweit <hkallweit1@xxxxxxxxx>, Conor Dooley <conor+dt@xxxxxxxxxx>,
Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>
To: George Moussalem <george.moussalem@xxxxxxxxxxx>
In-Reply-To: <20250528-ipq5018-ge-phy-v2-2-dd063674c71c@xxxxxxxxxxx>
References: <20250528-ipq5018-ge-phy-v2-0-dd063674c71c@xxxxxxxxxxx>
<20250528-ipq5018-ge-phy-v2-2-dd063674c71c@xxxxxxxxxxx>
Message-Id: <174844980913.122039.6315970844779589359.robh@xxxxxxxxxx>
Subject: Re: [PATCH v2 2/5] dt-bindings: net: qca,ar803x: Add IPQ5018
Internal GE PHY support
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, 28 May 2025 18:45:48 +0400, George Moussalem wrote:
> Document the IPQ5018 Internal Gigabit Ethernet PHY found in the IPQ5018
> SoC. Its output pins provide an MDI interface to either an external
> switch in a PHY to PHY link scenario or is directly attached to an RJ45
> connector.
>
> The PHY supports 10/100/1000 mbps link modes, CDT, auto-negotiation and
> 802.3az EEE.
>
> For operation, the LDO controller found in the IPQ5018 SoC for which
> there is provision in the mdio-4019 driver. In addition, the PHY needs
> to take itself out of reset and enable the RX and TX clocks.
>
> Two common archictures across IPQ5018 boards are:
> 1. IPQ5018 PHY --> MDI --> RJ45 connector
> 2. IPQ5018 PHY --> MDI --> External PHY
> In a phy to phy architecture, DAC values need to be set to accommodate
> for the short cable length. As such, add an optional boolean property so
> the driver sets the correct register values for the DAC accordingly.
>
> Signed-off-by: George Moussalem <george.moussalem@xxxxxxxxxxx>
> ---
> .../devicetree/bindings/net/qca,ar803x.yaml | 52 +++++++++++++++++++++-
> 1 file changed, 51 insertions(+), 1 deletion(-)
>
My bot found errors running 'make dt_binding_check' on your patch:
yamllint warnings/errors:
dtschema/dtc warnings/errors:
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/net/qca,ar803x.example.dtb: ethernet-phy@7 (ethernet-phy-id004d.d0c0): clocks: [[4294967295, 36], [4294967295, 37]] is too long
from schema $id: http://devicetree.org/schemas/net/ethernet-phy.yaml#
doc reference errors (make refcheckdocs):
See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20250528-ipq5018-ge-phy-v2-2-dd063674c71c@xxxxxxxxxxx
The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.
If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:
pip3 install dtschema --upgrade
Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.
Return-Path: <linux-kernel+bounces-665815-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [147.75.80.249])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id F1CE641E003FB
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:30:56 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by am.mirrors.kernel.org (Postfix) with ESMTPS id C699B1BA813B
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:31:09 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 19EAD2882A7;
Wed, 28 May 2025 16:30:45 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="nZGM34tr"
Received: from casper.infradead.org (casper.infradead.org [90.155.50.34])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id D8C51286D60;
Wed, 28 May 2025 16:30:42 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449844; cv=none; b=LsgQdJekijiCr90AFvEbr9NDQ1StNBJNrDi0eFmOpBH9kivFqlJh0EA8L1BNJ6MqeLsFytjzRZ1E2obfnZSAcOaM/0ALdGsoh8mHxzD4PGgr6386ZbuNXsl629QZNOPFPyPxrQZbZABVokrrWnRdR2CHoS2tm54EuOg9EAdzj1Y=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449844; c=relaxed/simple;
bh=1tbP8NGTysAyLnBcbOao/6nlF/KpXN5Kj8jDrC4wW3A=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=qWM5IpEsSHhMidOiyoADE3hHr5qsPRpQybk3SZ2BiLYRqDId5D+k3XZAE4MskP5UiMmGNGr+dSDaoRmLrwM0XNV86b7+Y6FM/2tfzPguZ/AOrzRiQN927gOn3prYxBoy/+M0DWcBo61jeRiXCVVTXtVDZH+Dyrjsr9kFmzl5t6c=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=nZGM34tr; arc=none smtp.client-ip=90.155.50.34
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org
Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version:
References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To:
Content-Transfer-Encoding:Content-ID:Content-Description;
bh=XzNgzVM/OEVZ+RLegAjSkzoDiYYza0R+KlXhx6KrfY0=; b=nZGM34trj98iolZ9YbYPglJvKZ
4nZ9cTwYUfobD6NOHivUypANtFU9MxRBrSLM0LdG5uwyZ85mwrRiRlnH4OxhV0FJJiht7zaIbXnCa
in9W607mjqkAk624BNTDeyhksLwRhWDhb67uy2HGeGnuPQyVvu2Ari/Sky/qMjj9hByF+wcUBSrM+
BPhZek0J/ZHcxePqihuOjLLUCchVF/faSJLTDK/TPxFUHkKOoGPtT5SAYFwdGsUo48Qq0d0VhJe48
nqe3GjEriP/s6WMJd2mDWse0zL10MXPmLLQpFJgWKRfqi71SmTRQ58xih4NE1IGeX0jtdcQ9Bcw9Q
nQ9LTFqA==;
Received: from 77-249-17-252.cable.dynamic.v4.ziggo.nl ([77.249.17.252] helo=noisy.programming.kicks-ass.net)
by casper.infradead.org with esmtpsa (Exim 4.98.2 #2 (Red Hat Linux))
id 1uKJfo-0000000Dqjg-1t2e;
Wed, 28 May 2025 16:30:36 +0000
Received: by noisy.programming.kicks-ass.net (Postfix, from userid 1000)
id F160A3005AF; Wed, 28 May 2025 18:30:35 +0200 (CEST)
Date: Wed, 28 May 2025 18:30:35 +0200
From: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
To: Josh Poimboeuf <jpoimboe@xxxxxxxxxx>
Cc: Sean Christopherson <seanjc@xxxxxxxxxx>,
"H. Peter Anvin" <hpa@xxxxxxxxx>, x86@xxxxxxxxxx, kys@xxxxxxxxxxxxx,
haiyangz@xxxxxxxxxxxxx, wei.liu@xxxxxxxxxx, decui@xxxxxxxxxxxxx,
tglx@xxxxxxxxxxxxx, mingo@xxxxxxxxxx, bp@xxxxxxxxx,
dave.hansen@xxxxxxxxxxxxxxx, pbonzini@xxxxxxxxxx, ardb@xxxxxxxxxx,
kees@xxxxxxxxxx, Arnd Bergmann <arnd@xxxxxxxx>,
gregkh@xxxxxxxxxxxxxxxxxxx, linux-hyperv@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, kvm@xxxxxxxxxxxxxxx,
linux-efi@xxxxxxxxxxxxxxx, samitolvanen@xxxxxxxxxx,
ojeda@xxxxxxxxxx, xin@xxxxxxxxx
Subject: Re: [PATCH v2 00/13] objtool: Detect and warn about indirect calls
in __nocfi functions
Message-ID: <20250528163035.GH31726@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <20250501153844.GD4356@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<aBO9uoLnxCSD0UwT@xxxxxxxxxx>
<20250502084007.GS4198@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<aBUiwLV4ZY2HdRbz@xxxxxxxxxx>
<20250503095023.GE4198@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<p6mkebfvhxvtqyz6mtohm2ko3nqe2zdawkgbfi6h2rfv2gxbuz@ktixvjaj44en>
<20250506073100.GG4198@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<20250506133234.GH4356@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<vukrlmb4kbpcol6rtest3tsw4y6obopbrwi5hcb5iwzogsopgt@sokysuzxvehi>
<20250528074452.GU39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528074452.GU39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 09:44:52AM +0200, Peter Zijlstra wrote:
> On Tue, May 06, 2025 at 12:18:49PM -0700, Josh Poimboeuf wrote:
>
> > Weird, I'm not seeing that.
>
> I Ate'nt Crazeh...
>
> https://lore.kernel.org/all/202505280410.2qfTQCRt-lkp@xxxxxxxxx/T/#u
>
> I'll go poke at it, see if today is the day I can figure out WTF
> happens.
It manages to trip the CFI_UNDEFINED case in op->dest.reg == cfa->base
in update_cfi_state().
I figured it ought to tickle the regular 'mov %rbp, %rsp' case above
there, but it doesn't, for some reason it has cfa.base == SP at this
point.
This happens... /me looks in scrollback ... at POP_REGS 'pop
%rbp'. ARGH!!
So the sequence of fail is:
push %rbp
mov %rsp, %rbp # cfa.base = BP
SAVE
...
push %rbp
...
pop %rbp # cfa.base = SP
...
mov %rbp, %rsp # UNDEF
nop # FAIL
RESTORE
Note that the MOV+NOP is the 4 bytes ERETS needs.
Return-Path: <linux-kernel+bounces-665814-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 3DD0141E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:30:56 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 151AD9E84A5
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:30:27 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id EE32E28C5D0;
Wed, 28 May 2025 16:30:43 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=joelfernandes.org header.i=@joelfernandes.org header.b="isdAhZc5"
Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2A8ED288C88
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:30:39 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449842; cv=none; b=ilKvrGCAH3ewPSSWYpJO1waklNbCqf/tZtq78t1UPiwHMPuh74mOiLy0RNvJEOWm8KAI32jcVQmp83UtC8A/OGql1p2wsyjdqLmn/7IbVfdQaXtwSReHBDu0GAMw4xgVunTm0r+N5MvxIxeUVRwTt50EvoK92kw6ySRWFrawafo=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449842; c=relaxed/simple;
bh=8FHL94ClRtPIaQE751phgF4ar1w520m9/C+qdkgh8i8=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=DSIhe6aWorIRBU/GV5msFDHxyhA9Cz65/JiPZdo25GF6Sl0hRk70U08s4UmZK4+skpc8PUYzKEp8HUviU+rwfut+vexIwcgWIfWCZNvmoAgmxEjuz3S79WlXuRGUG+rqEDHSEbVQD+TcwdHGO09a8RauITdwAiyBWATsnu3StTY=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=joelfernandes.org; spf=pass smtp.mailfrom=joelfernandes.org; dkim=pass (1024-bit key) header.d=joelfernandes.org header.i=@joelfernandes.org header.b=isdAhZc5; arc=none smtp.client-ip=209.85.221.42
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=joelfernandes.org
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=joelfernandes.org
Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-3a4dba2c767so792364f8f.1
for <linux-kernel@xxxxxxxxxxxxxxx>; Wed, 28 May 2025 09:30:39 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=joelfernandes.org; s=google; t=1748449838; x=1749054638; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=3SatawkFvYs06YCvmwutpQaa2p5rHY1YDZwgVIqkUM0=;
b=isdAhZc5PlQ18Qh4DVneYK5TDUIfHheyZjedsz/R5dL+VCEfZb2ggfMX6aMTtzAysi
+0Zba/qt+hyDsWqIXAiOG4DhLShDoI2DAKzW4WZ/Dy3yHMDlqCWsCwUqC7p7riyIry13
2yJ5RDQkUOlEmBkzErzrkfbgYCyQkAjPaT+WA=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748449838; x=1749054638;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=3SatawkFvYs06YCvmwutpQaa2p5rHY1YDZwgVIqkUM0=;
b=CDCddmRDiwdhI364aA6a3Re/HacMj7iqdL9S7saqO5G0DOvU1liasuS/0NqEStAAJU
DN35XcU9fwjMRuyB2SVI57vJtOxlitjBHPL8q4mUXumt7qBUiJRmmYTpJ+plnRP+Q4fK
JaZ2PYbbQ3kCl6XgzQvmm3B0uqvOHUNj/S/qhCfHWBPHX7PqzCjzbzIIL4HAcbc+bAnO
mYZ/AGRq7H5SA2kEW4oqopLCoHj9Ee8IhiSeMjRAZ31/JCPR0FcP+s89A+aMFxf7NTY7
UI2ZlcBsLG43Du+kdpk+lhrzz3ambKnWf3xHir6+u/7OqDUPmKVvCvi7lH1VwegE+twb
YllQ==
X-Forwarded-Encrypted: i=1; AJvYcCUi47rVz2tuRn6Y/cl2So5GmB2DCHhEStoALJdoJi3REMG22llrOiF/3fQwTAVWNKyOIsLaHbxiHtkR0tE=@vger.kernel.org
X-Gm-Message-State: AOJu0YztAMhphkety4fowEEnoWmaxKUTlsPV1KvMu+C0oRLKsjVIX+0n
l8PHvwlvw31eNG2MkWHVTZhEW2HAHQlEZqEMC9y9dneZN3OohCiTPkIOvVu1QkMizZ8w54rNuCo
dSTfFnLmXlXDy3n2FOZ1aUfsuZj0BlCWD3ZzNp3DyOA==
X-Gm-Gg: ASbGncuEnoaX2bQE1StzXrKm4IcaKLE/XUBjRsRftdG3bgIQ3KIOMe6WEjZuHAsxCTP
KjO9aPZy3j7SclTXeinMpjBoR7P76Iq3Ph+0yv8Fk+lvfU991dde5xOAZSIGeWvcikkGjzP8KVl
Jlh3FCU9/ZjVu33Ws+jZ1yuFUt1AeyrFQuWvFBCGi7I6o=
X-Google-Smtp-Source: AGHT+IGA+GTudmFIfD1/3l021OHOUwZwsDPRlb6iaD7BtA5Pq2ZcKC/lvjUra528PaqhX/c/YBBrY4HjiEwnGDJgL8E=
X-Received: by 2002:a05:6000:1245:b0:3a4:d045:6462 with SMTP id
ffacd0b85a97d-3a4eed99d40mr192814f8f.14.1748449837950; Wed, 28 May 2025
09:30:37 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <9acd5f9f-6732-7701-6880-4b51190aa070@xxxxxxxxxx>
In-Reply-To: <9acd5f9f-6732-7701-6880-4b51190aa070@xxxxxxxxxx>
From: Joel Fernandes <joel@xxxxxxxxxxxxxxxxx>
Date: Wed, 28 May 2025 12:30:26 -0400
X-Gm-Features: AX0GCFt_drujpLkNbItO4uTG8EKtVwYT-Q4VYDMh-YceDRSXFmHtkIS5rKE75cI
Message-ID: <CAEXW_YRC=f6i3KOd_uhuH=xAOCG7mW7-LwtA4+_fc8FMjfRHeg@xxxxxxxxxxxxxx>
Subject: Re: [QUESTION] problems report: rcu_read_unlock_special() called in
irq_exit() causes dead loop
To: Xiongfeng Wang <wangxiongfeng2@xxxxxxxxxx>
Cc: ankur.a.arora@xxxxxxxxxx, Frederic Weisbecker <frederic@xxxxxxxxxx>,
"Paul E . McKenney" <paulmck@xxxxxxxxxx>, Boqun Feng <boqun.feng@xxxxxxxxx>, neeraj.upadhyay@xxxxxxxxxx,
urezki@xxxxxxxxx, rcu@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
xiqi2@xxxxxxxxxx, "Wangshaobo (bobo)" <bobo.shaobowang@xxxxxxxxxx>,
Joel Fernandes <joelagnelf@xxxxxxxxxx>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 21, 2025 at 5:43=E2=80=AFAM Xiongfeng Wang
<wangxiongfeng2@xxxxxxxxxx> wrote:
>
> Hi RCU experts,
>
> When I ran syskaller in Linux 6.6 with CONFIG_PREEMPT_RCU enabled, I got
> the following soft lockup. The Calltrace is too long. I put it in the end=
.
> The issue can also be reproduced in the latest kernel.
>
> The issue is as follows. CPU3 is waiting for a spin_lock, which is got by=
CPU1.
> But CPU1 stuck in the following dead loop.
>
> irq_exit()
> __irq_exit_rcu()
> /* in_hardirq() returns false after this */
> preempt_count_sub(HARDIRQ_OFFSET)
> tick_irq_exit()
> tick_nohz_irq_exit()
> tick_nohz_stop_sched_tick()
> trace_tick_stop() /* a bpf prog is hooked on this trace po=
int */
> __bpf_trace_tick_stop()
> bpf_trace_run2()
> rcu_read_unlock_special()
> /* will send a IPI to itself */
> irq_work_queue_on(&rdp->defer_qs_iw, rdp->c=
pu);
>
> /* after interrupt is enabled again, the irq_work is called */
> asm_sysvec_irq_work()
> sysvec_irq_work()
> irq_exit() /* after handled the irq_work, we again enter into irq_exit() =
*/
> __irq_exit_rcu()
> ...skip...
> /* we queue a irq_work again, and enter a dead loop */
> irq_work_queue_on(&rdp->defer_qs_iw, rdp->cpu);
This seems legitimate, Boqun and I were just talking about it. He may
share more thoughts but here are a few:
Maybe we can delay subsequent clearing of the flag in
rcu_preempt_deferred_qs_handler() using a timer and an exponential
back-off? That way we are not sending too many self-IPIs.
And reset the process at the end of a grace period.
Or just don't send subsequent self-IPIs if we just sent one for the
rdp. Chances are, if we did not get the scheduler's attention during
the first one, we may not in subsequent ones I think. Plus we do send
other IPIs already if the grace period was over extended (from the FQS
loop), maybe we can tweak that?
thanks,
- Joel
>
> I am not familiar with RCU code and don't know how to solve this problem.
> Any guidance would be appreciated.
>
> Thanks,
> Xiongfeng
>
>
> [ 1901.634222][ C3] watchdog: BUG: soft lockup - CPU#3 stuck for 913s!
> [syz.8.781:8076]
> [ 1901.634947][ C3] Modules linked in:
> [ 1901.635261][ C3] CPU: 3 PID: 8076 Comm: syz.8.781 Tainted: G =
L
> 6.6.0+ #1873
> [ 1901.635981][ C3] Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX=
,
> 1996), BIOS 0.0.0 02/06/2015
> [ 1901.636735][ C3] RIP: 0010:queued_spin_lock_slowpath+0x109/0x9c0
> [ 1901.637281][ C3] Code: 00 48 8b 44 24 60 65 48 2b 04 25 28 00 00 00=
0f 85
> ca 07 00 00 48 83 c4 68 5b 5d 41 5c 41 5d 41 5e 41 5f c3 cc cc cc cc f3 9=
0 <eb>
> 85 81 fe 00 01 00 00 0f 84 dc 00 00 00 81 fe ff 00 00 00 0f 87
> [ 1901.638858][ C3] RSP: 0000:ff1100002900f8b0 EFLAGS: 00000202
> [ 1901.639364][ C3] RAX: 0000000000000000 RBX: 0000000000000001 RCX:
> ffffffff961f5ecd
> [ 1901.640001][ C3] RDX: fffa7c000005f936 RSI: 0000000000000004 RDI:
> ffd40000002fc9a8
> [ 1901.640624][ C3] RBP: 0000000000000003 R08: 0000000000000000 R09:
> fffa7c000005f935
> [ 1901.641255][ C3] R10: ffd40000002fc9ab R11: 0000000000000000 R12:
> fffa7c000005f935
> [ 1901.641905][ C3] R13: 0000000000000001 R14: 1fe2200005201f17 R15:
> ffd40000002fc9a8
> [ 1901.642527][ C3] FS: 000000002316c500(0000) GS:ff11000107980000(00=
00)
> knlGS:0000000000000000
> [ 1901.643272][ C3] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [ 1901.643818][ C3] CR2: 0000000020000000 CR3: 0000000036592004 CR4:
> 0000000000771ee0
> [ 1901.644469][ C3] DR0: 0000000000000000 DR1: 0000000000000000 DR2:
> 0000000000000000
> [ 1901.645105][ C3] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7:
> 0000000000000400
> [ 1901.645724][ C3] PKRU: 80000000
> [ 1901.646010][ C3] Call Trace:
> [ 1901.646287][ C3] <TASK>
> [ 1901.646526][ C3] ? __pfx_queued_spin_lock_slowpath+0x10/0x10
> [ 1901.647053][ C3] _raw_spin_lock+0xd0/0xe0
> [ 1901.647450][ C3] ? __pfx__raw_spin_lock+0x10/0x10
> [ 1901.647883][ C3] __pte_offset_map_lock+0x129/0x270
> [ 1901.648335][ C3] ? __pfx___pte_offset_map_lock+0x10/0x10
> [ 1901.648820][ C3] migration_entry_wait+0x85/0x270
> [ 1901.649247][ C3] ? __pfx_migration_entry_wait+0x10/0x10
> [ 1901.649705][ C3] ? __pfx___schedule+0x10/0x10
> [ 1901.650122][ C3] ? __hrtimer_start_range_ns+0x355/0xd00
> [ 1901.650623][ C3] do_swap_page+0x36d2/0x4670
> [ 1901.651016][ C3] ? plist_del+0x24c/0x450
> [ 1901.651453][ C3] ? __pte_offset_map+0x2b9/0x3d0
> [ 1901.651981][ C3] ? __pfx_do_swap_page+0x10/0x10
> [ 1901.652432][ C3] ? __pfx_default_wake_function+0x10/0x10
> [ 1901.652947][ C3] handle_pte_fault+0x5ae/0x7b0
> [ 1901.653387][ C3] __handle_mm_fault+0xf9e/0x17f0
> [ 1901.653839][ C3] ? __pfx___handle_mm_fault+0x10/0x10
> [ 1901.654335][ C3] ? lock_vma_under_rcu+0x377/0x4d0
> [ 1901.654797][ C3] ? __pfx_lock_vma_under_rcu+0x10/0x10
> [ 1901.655294][ C3] handle_mm_fault+0x4bf/0xa20
> [ 1901.655725][ C3] exc_page_fault+0x20b/0x7f0
> [ 1901.656150][ C3] asm_exc_page_fault+0x26/0x30
> [ 1901.656582][ C3] RIP: 0033:0x51d788
> [ 1901.656927][ C3] Code: 66 89 74 17 02 88 0f c3 c5 fa 6f 06 c5 fa 6f=
4c 16
> f0 c5 fa 7f 07 c5 fa 7f 4c 17 f0 c3 0f 1f 44 00 00 48 8b 4c 16 f8 48 8b 3=
6 <48>
> 89 37 48 89 4c 17 f8 c3 62 e1 fe 28 6f 54 16 ff 62 e1 fe 28 6f
> [ 1901.658618][ C3] RSP: 002b:00007fff991f9118 EFLAGS: 00010202
> [ 1901.659157][ C3] RAX: 0000000020000000 RBX: 0000000000000004 RCX:
> 002367732f766564
> [ 1901.659856][ C3] RDX: 0000000000000009 RSI: 2367732f7665642f RDI:
> 0000000020000000
> [ 1901.660553][ C3] RBP: 0000000000797ba0 R08: 00007f10a7800000 R09:
> 0000000000000001
> [ 1901.661240][ C3] R10: 0000000000000001 R11: 0000000000000009 R12:
> 0000000000000032
> [ 1901.661906][ C3] R13: 00000000000e2c77 R14: 0000000000795fa0 R15:
> 0000000000795fac
> [ 1901.662589][ C3] </TASK>
> [ 1901.662864][ C3] Sending NMI from CPU 3 to CPUs 0-2:
> [ 1901.663358][ C1] NMI backtrace for cpu 1
> [ 1901.663365][ C1] AAA2 1901441189248 1901441163169 0 0 0 19014411621=
97
> [ 1901.663374][ C1] AAA2 1901441197984 993372484411 993372484804 99337=
2484875
> 928887973527 928887973577 928887974425 // handle_softirqs
> [ 1901.663383][ C1] softirq_handle_start:
> [ 1901.663385][ C1] 0
> [ 1901.663387][ C1] 928330006990
> [ 1901.663390][ C1] 924221567459
> [ 1901.663392][ C1] 928817263100
> [ 1901.663395][ C1] 928328744939
> [ 1901.663397][ C1] 0
> [ 1901.663399][ C1] 921062008817
> [ 1901.663401][ C1] 928879010614
> [ 1901.663403][ C1] 0
> [ 1901.663405][ C1] 928887973635
> [ 1901.663407][ C1]
> [ 1901.663409][ C1] softirq_handle_end_time:
> [ 1901.663410][ C1] 0
> [ 1901.663412][ C1] 928330009295
> [ 1901.663415][ C1] 924221568491
> [ 1901.663417][ C1] 928817511439
> [ 1901.663419][ C1] 928328806233
> [ 1901.663421][ C1] 0
> [ 1901.663423][ C1] 921062009968
> [ 1901.663425][ C1] 928879011708
> [ 1901.663427][ C1] 0
> [ 1901.663429][ C1] 928887974243
> [ 1901.663432][ C1]
> [ 1901.663434][ C1] CPU: 1 PID: 8079 Comm: syz.8.781 Tainted: G =
L
> 6.6.0+ #1873
> [ 1901.663444][ C1] Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX=
,
> 1996), BIOS 0.0.0 02/06/2015
> [ 1901.663448][ C1] RIP: 0010:irq_work_claim+0x5c/0xa0
> [ 1901.663464][ C1] Code: 14 02 48 89 e8 83 e0 07 83 c0 03 38 d0 7c 04=
84 d2
> 75 44 8b 5b 08 e8 c3 74 e7 ff 89 da 41 89 dc 89 d8 83 ca 23 f0 0f b1 55 0=
0 <41>
> 0f 94 c5 31 ff 89 c3 44 89 ee e8 74 6a e7 ff 45 84 ed 74 d7 e8
> [ 1901.663473][ C1] RSP: 0018:ff11000107889c68 EFLAGS: 00000046
> [ 1901.663480][ C1] RAX: 0000000000000000 RBX: 0000000000000000 RCX:
> ffffffff8dc11a4d
> [ 1901.663486][ C1] RDX: 0000000000000023 RSI: 0000000000000004 RDI:
> ff110001078c6838
> [ 1901.663491][ C1] RBP: ff110001078c6838 R08: 0000000000000001 R09:
> ffe21c0020f18d07
> [ 1901.663496][ C1] R10: ff110001078c683b R11: 0000000000000000 R12:
> 0000000000000000
> [ 1901.663502][ C1] R13: ff110001078c6bf0 R14: 0000000000000000 R15:
> ffffffff99f43000
> [ 1901.663507][ C1] FS: 00007f10a79556c0(0000) GS:ff11000107880000(00=
00)
> knlGS:0000000000000000
> [ 1901.663517][ C1] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [ 1901.663523][ C1] CR2: 0000000000638300 CR3: 0000000036592002 CR4:
> 0000000000771ee0
> [ 1901.663529][ C1] DR0: 0000000000000000 DR1: 0000000000000000 DR2:
> 0000000000000000
> [ 1901.663534][ C1] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7:
> 0000000000000400
> [ 1901.663539][ C1] PKRU: 00000000
> [ 1901.663542][ C1] Call Trace:
> [ 1901.663546][ C1] <IRQ>
> [ 1901.663551][ C1] irq_work_queue_on+0x59/0x130
> [ 1901.663563][ C1] rcu_read_unlock_special+0x46a/0x530
> [ 1901.663577][ C1] bpf_trace_run2+0xf7/0x220
> [ 1901.663588][ C1] ? __pfx_bpf_trace_run2+0x10/0x10
> [ 1901.663599][ C1] ? __pfx_ep_poll_callback+0x10/0x10
> [ 1901.663613][ C1] __bpf_trace_tick_stop+0xb4/0xf0
> [ 1901.663623][ C1] ? __pfx___bpf_trace_tick_stop+0x10/0x10
> [ 1901.663633][ C1] ? __pfx_sched_clock_cpu+0x10/0x10
> [ 1901.663643][ C1] ? __wake_up+0x44/0x60
> [ 1901.663657][ C1] check_tick_dependency+0x362/0x670
> [ 1901.663673][ C1] __tick_nohz_full_update_tick+0xd1/0x220
> [ 1901.663683][ C1] tick_nohz_irq_exit+0x22c/0x2a0
> [ 1901.663694][ C1] sysvec_irq_work+0x36/0x80
> [ 1901.663705][ C1] asm_sysvec_irq_work+0x1a/0x20
> [ 1901.663720][ C1] RIP: 0010:handle_softirqs+0x230/0x8d0
> [ 1901.663734][ C1] Code: 24 f5 80 5d 84 98 e8 1f 9b 27 00 4c 89 e2 48=
c1 ea
> 03 42 80 3c 3a 00 0f 85 d5 05 00 00 49 89 04 24 fb 65 44 8b 35 0c 2c 93 7=
2 <4d>
> 63 f6 49 c7 c4 20 0c 03 00 4a 8d 3c f5 80 5d 84 98 48 89 f8 48
> [ 1901.663742][ C1] RSP: 0018:ff11000107889f68 EFLAGS: 00000246
> [ 1901.663748][ C1] RAX: 000000e7499d350b RBX: 0000000000000000 RCX:
> 0000000000000018
> [ 1901.663754][ C1] RDX: 1fe2200020f16185 RSI: 00000000001e2170 RDI:
> 0000000000000004
> [ 1901.663759][ C1] RBP: ff1100003ae422c0 R08: 0000000000000001 R09:
> ffe21c0020f16239
> [ 1901.663765][ C1] R10: 00000000001e2170 R11: 3030303030302052 R12:
> ff110001078b0c28
> [ 1901.663770][ C1] R13: 0000000000400140 R14: 0000000000000001 R15:
> dffffc0000000000
> [ 1901.663779][ C1] ? handle_softirqs+0x211/0x8d0
> [ 1901.663792][ C1] ? update_sibling_normalize_runtime+0x1a/0x410
> [ 1901.663807][ C1] irq_exit_rcu+0x134/0x190
> [ 1901.663820][ C1] sysvec_irq_work+0x6a/0x80
> [ 1901.663830][ C1] </IRQ>
> [ 1901.663833][ C1] <TASK>
> [ 1901.663835][ C1] asm_sysvec_irq_work+0x1a/0x20
> [ 1901.663849][ C1] RIP: 0010:rcu_read_unlock_special+0x186/0x530
> [ 1901.663861][ C1] Code: 0f 85 01 01 00 00 4d 85 f6 0f 84 6a 01 00 00=
40 84
> ed 0f 84 61 01 00 00 bf 09 00 00 00 e8 c2 45 df ff fb 65 8b 2d 26 65 72 7=
2 <48>
> 63 ed 48 c7 c3 40 1a 03 00 48 b8 00 00 00 00 00 fc ff df 48 8d
> [ 1901.663869][ C1] RSP: 0018:ff110000380b6fe8 EFLAGS: 00000283
> [ 1901.663875][ C1] RAX: 0000000000000001 RBX: ff110001078c6800 RCX:
> ffffffff8d7c6a90
> [ 1901.663881][ C1] RDX: 0000000000000001 RSI: 0000000000000046 RDI:
> ff11000100e33084
> [ 1901.663886][ C1] RBP: 0000000000000001 R08: 0000000000000000 R09:
> fffffbfff3716ab4
> [ 1901.663891][ C1] R10: 0000000000000000 R11: 0000000000000001 R12:
> 0000000000000000
> [ 1901.663896][ C1] R13: dffffc0000000000 R14: 0000000000000200 R15:
> ffffffff99f43000
> [ 1901.663903][ C1] ? ttwu_do_activate+0x520/0x6f0
> [ 1901.663918][ C1] ? rcu_read_unlock_special+0x17e/0x530
> [ 1901.663930][ C1] page_vma_mapped_walk+0x1e00/0x2b50
> [ 1901.663948][ C1] ? __netlink_deliver_tap_skb+0x352/0x4d0
> [ 1901.663959][ C1] ? __pfx_page_vma_mapped_walk+0x10/0x10
> [ 1901.663974][ C1] ? netlink_ack+0x614/0xba0
> [ 1901.663986][ C1] try_to_migrate_one+0x3f0/0x2cb0
> [ 1901.663999][ C1] ? __sys_sendmsg+0xee/0x1b0
> [ 1901.664015][ C1] ? __pfx_try_to_migrate_one+0x10/0x10
> [ 1901.664028][ C1] ? __orc_find+0x109/0x140
> [ 1901.664041][ C1] ? arch_stack_walk+0x92/0x160
> [ 1901.664058][ C1] ? __anon_vma_interval_tree_subtree_search+0x171/0=
x1f0
> [ 1901.664080][ C1] ? __pfx_try_to_migrate_one+0x10/0x10
> [ 1901.664094][ C1] rmap_walk_anon+0x2b0/0x980
> [ 1901.664108][ C1] try_to_migrate+0x19f/0x350
> [ 1901.664122][ C1] ? __pfx_try_to_migrate+0x10/0x10
> [ 1901.664135][ C1] ? __pfx_try_to_migrate_one+0x10/0x10
> [ 1901.664148][ C1] ? __pfx_folio_not_mapped+0x10/0x10
> [ 1901.664159][ C1] ? __pfx_folio_lock_anon_vma_read+0x10/0x10
> [ 1901.664173][ C1] ? __pfx_invalid_migration_vma+0x10/0x10
> [ 1901.664184][ C1] ? folio_total_mapcount+0xb4/0x210
> [ 1901.664197][ C1] split_huge_page_to_list_to_order+0xc84/0x17f0
> [ 1901.664213][ C1] ? __pfx_split_huge_page_to_list_to_order+0x10/0x1=
0
> [ 1901.664226][ C1] ? __orc_find+0x109/0x140
> [ 1901.664240][ C1] ? __orc_find+0x109/0x140
> [ 1901.664253][ C1] ? entry_SYSCALL_64_after_hwframe+0x77/0xe2
> [ 1901.664269][ C1] madvise_cold_or_pageout_pte_range+0x1966/0x2450
> [ 1901.664284][ C1] ? arch_stack_walk+0x92/0x160
> [ 1901.664298][ C1] ? __read_once_word_nocheck+0x9/0x20
> [ 1901.664311][ C1] ? deref_stack_reg+0x1a4/0x2b0
> [ 1901.664326][ C1] ? entry_SYSCALL_64_after_hwframe+0x77/0xe2
> [ 1901.664340][ C1] ? __pfx_madvise_cold_or_pageout_pte_range+0x10/0x=
10
> [ 1901.664354][ C1] ? __read_once_word_nocheck+0x9/0x20
> [ 1901.664368][ C1] ? __orc_find+0x109/0x140
> [ 1901.664381][ C1] ? __pfx_madvise_cold_or_pageout_pte_range+0x10/0x=
10
> [ 1901.664395][ C1] walk_pmd_range.isra.0+0x240/0x720
> [ 1901.664405][ C1] ? __read_once_word_nocheck+0x9/0x20
> [ 1901.664419][ C1] walk_pud_range.isra.0+0x3d3/0x6c0
> [ 1901.664431][ C1] walk_p4d_range+0x2ef/0x4f0
> [ 1901.664441][ C1] walk_pgd_range+0x27e/0x530
> [ 1901.664452][ C1] __walk_page_range+0x4ab/0x5a0
> [ 1901.664461][ C1] ? find_vma+0x81/0xb0
> [ 1901.664469][ C1] ? __pfx_find_vma+0x10/0x10
> [ 1901.664477][ C1] ? folios_put_refs+0x510/0x740
> [ 1901.664487][ C1] ? walk_page_test+0xa0/0x190
> [ 1901.664503][ C1] walk_page_range+0x2a0/0x530
> [ 1901.664513][ C1] ? __pfx_walk_page_range+0x10/0x10
> [ 1901.664522][ C1] ? vtime_task_switch_generic+0x278/0x5a0
> [ 1901.664535][ C1] ? folio_batch_move_lru+0x2b8/0x3d0
> [ 1901.664544][ C1] ? __pfx_lru_add_fn+0x10/0x10
> [ 1901.664554][ C1] madvise_pageout_page_range+0x1cc/0x6d0
> [ 1901.664567][ C1] ? __pfx_madvise_pageout_page_range+0x10/0x10
> [ 1901.664582][ C1] madvise_pageout+0x1f4/0x400
> [ 1901.664595][ C1] ? __pfx_madvise_pageout+0x10/0x10
> [ 1901.664608][ C1] ? futex_wait+0x552/0x680
> [ 1901.664624][ C1] ? __sanitizer_cov_trace_switch+0x54/0x90
> [ 1901.664635][ C1] ? __sanitizer_cov_trace_switch+0x54/0x90
> [ 1901.664645][ C1] ? mas_prev_setup.constprop.0+0xb4/0x530
> [ 1901.664661][ C1] madvise_vma_behavior+0x8fa/0xe30
> [ 1901.664675][ C1] ? __pfx_madvise_vma_behavior+0x10/0x10
> [ 1901.664688][ C1] ? find_vma_prev+0xf5/0x170
> [ 1901.664698][ C1] ? __pfx_find_vma_prev+0x10/0x10
> [ 1901.664711][ C1] ? do_futex+0x135/0x360
> [ 1901.664724][ C1] do_madvise+0x3af/0x650
> [ 1901.664737][ C1] ? __pfx_do_madvise+0x10/0x10
> [ 1901.664749][ C1] ? __se_sys_futex+0xf7/0x390
> [ 1901.664762][ C1] ? kvm_steal_clock+0xca/0x100
> [ 1901.664778][ C1] ? get_vtime_delta+0xd7/0x250
> [ 1901.664793][ C1] __x64_sys_madvise+0xaf/0x120
> [ 1901.664805][ C1] ? __ct_user_exit+0x70/0xe0
> [ 1901.664819][ C1] do_syscall_64+0x59/0x110
> [ 1901.664834][ C1] entry_SYSCALL_64_after_hwframe+0x78/0xe2
> [ 1901.664849][ C1] RIP: 0033:0x54d2cd
> [ 1901.664856][ C1] Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f=
1e fa
> 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 0=
5 <48>
> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48
> [ 1901.664864][ C1] RSP: 002b:00007f10a7955048 EFLAGS: 00000246 ORIG_R=
AX:
> 000000000000001c
> [ 1901.664873][ C1] RAX: ffffffffffffffda RBX: 0000000000795fa0 RCX:
> 000000000054d2cd
> [ 1901.664878][ C1] RDX: 0000000000000015 RSI: 0000000000003000 RDI:
> 0000000020001000
> [ 1901.664884][ C1] RBP: 0000000000000000 R08: 0000000000000000 R09:
> 0000000000000000
> [ 1901.664889][ C1] R10: 0000000000000000 R11: 0000000000000246 R12:
> 0000000000795fac
> [ 1901.664894][ C1] R13: 0000000000000000 R14: 0000000000795fa0 R15:
> 00007f10a7935000
>
Return-Path: <linux-kernel+bounces-665816-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id C8E5C41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:31:41 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 42CA23A544F
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:31:15 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 921B328CF7F;
Wed, 28 May 2025 16:31:27 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gfGKxS8j"
Received: from mail-pj1-f44.google.com (mail-pj1-f44.google.com [209.85.216.44])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 848DE286403;
Wed, 28 May 2025 16:31:25 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.44
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748449886; cv=none; b=ASb4ea6/QO7oSO7MyH/k0XkSufhBWJSf52pGzdmtRDYIZyxxU6XjaNUWPdAnPYcYrjvavRPn29/xnracHx/A/vCh3BJSpDtWOUVCZofcIKEd1Nw39aVE1M1m7zrKsXqavHnYZ2OtBZvGi+Dqqce82AyDogCLxe2ZEHvFhIFLUQY=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748449886; c=relaxed/simple;
bh=P3y/C6BOs8zMzpQ9uc5/+S+36UJcguhm1Xu50gAFsj0=;
h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:
To:Cc:Content-Type; b=fh3v77/vAvdg1MesgFIxvw2EtBaB/z5iXJDRhRCkEmzNOZ0fx8rA7zv6yEOAFdUCUOyh2Sd/D+nw1cmr3H1JfcgIsqzZig+xqU2jDJjMF2UzNTGcUT2iG3zxnlUhNromeP4MKuDbXGcyHKdciocDyHb3b+TXShaSEK5nRcnKVyA=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gfGKxS8j; arc=none smtp.client-ip=209.85.216.44
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com
Received: by mail-pj1-f44.google.com with SMTP id 98e67ed59e1d1-3120dd42103so34199a91.0;
Wed, 28 May 2025 09:31:25 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1748449885; x=1749054685; darn=vger.kernel.org;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:from:to:cc:subject:date
:message-id:reply-to;
bh=P3y/C6BOs8zMzpQ9uc5/+S+36UJcguhm1Xu50gAFsj0=;
b=gfGKxS8js+IcipE13qCnNsD4WTTmaNABuGQj5p3a+uYcIBNQtdDZfa6nkXV1vO9lGr
YfokDCAgg9McGXkoPNnxs/uZlNWFGD1buw6/nuaKIK9dCPk+SCU1Sh+f6+HeKvWOFyBT
POM4/iNImwXLDxyzYP8dF5PunkEFNc9dhXSxJOkmA+87qeDRk8zYHIWNKDd/msHGIXin
01byOLZ/d+J8yb8FWaRNoBMtnpRkoOEYa+X/zCiJzZfWSwCd3ZdwzpKBRMhQYi1a+wTc
//Ci6B0dhOgJ62IrUfAxC6lh/a/63UyrqetXsKeLdhHiRpTegIkFAT/ImKQ9Eo7mdLLo
CM8A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1748449885; x=1749054685;
h=content-transfer-encoding:cc:to:subject:message-id:date:from
:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
:subject:date:message-id:reply-to;
bh=P3y/C6BOs8zMzpQ9uc5/+S+36UJcguhm1Xu50gAFsj0=;
b=YXcFCuwhHBd9a6R5/MQVSdJzumLPMuETTxdBwbjkQKn8ff0ufDlROodo6ceEzgaD9C
kieVwLRrcSCS+fh+Dus6Irad3HSptsJpAqlJ8ggzSELdNx5Ospb7Tu9Wr8rGsdfCwYnf
1nSxfbLdEYME7YWTbQ76fhbOZ/BfJytTFiNgmrg1MNa0hkpqkj5kD4viWk5GmRJq6c3V
NyN5SbRsrwXlZyajjrZc6/0rZGRypUa7vepZmGJhIYTcq/Td7vxL3fg32dzX5SuVYcJe
TcQ4gm6A/5tKFkElHghCe+D96kNHf/dpg8EL596uWfXZ4L6KA4/1iB5GcOphK86nfGLR
KYxQ==
X-Forwarded-Encrypted: i=1; AJvYcCWn1NM9BUE+eaPgbpXOrq0mQC2qa1rRWbmxCamsR0SYnnS5bxluJxy7FVBU3SZ3jZRVK1xl0AEwCWU+ghU=@vger.kernel.org, AJvYcCXCcVi52v5joIRWVeW461hzyCaxbU0Kw0TQFhd7GDHmB2t0DF0LDgAPeY9ktbUoGdDK4g50tyW5qHaXIGCErgo=@vger.kernel.org, AJvYcCXHEyxWXvnz56CKVhkA9xOlunAD7Mm4vpo9UAOEDkPFlXq6H500y402k77Pjktk3EX0U2d4ObHAxQ+LmcnApmy8@xxxxxxxxxxxxxxx
X-Gm-Message-State: AOJu0Yz+82TXlw8vF9KtChKKfxEfMhQiJDWVOd/to2cK7gRW2avUclsJ
idOXtviU3SaryFGpPl8eHyNNGbD5HUm61XM0m2siw/KHiG0XI4LVot7qhJ78zbzkNZyQBmM5iBN
29JoAVOh+t0vgkimyZ1Id1ocB76oxrRk=
X-Gm-Gg: ASbGncsa9+GgL+Vm+FJrphlhw9FjsbQCagn1EzUGFi5AyxuQBo3MNGozIKvyGyq73T4
+S1ybRxg7CgKIUTpWuT/l1d5/dKc4ZCWn98e1P4osF5a3xJRs+O9280EFYI+dYq95+ej/7n7TCl
dMCwgy4PDCQp/6ny8fq5sNHBPNgQEUxc4x
X-Google-Smtp-Source: AGHT+IHOJrnI/nuLXZHb8+rmB/wiEXoSp/bEqDC6ZUxb34OhLHK0jaWZqJSsxdkkbjCTI3wCGcSjWuYxHiTdVkoMHcs=
X-Received: by 2002:a17:90b:1d8b:b0:311:e9a6:332e with SMTP id
98e67ed59e1d1-311e9a63395mr1754483a91.0.1748449884630; Wed, 28 May 2025
09:31:24 -0700 (PDT)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
References: <20250528155147.2793921-1-y.j3ms.n@xxxxxxxxx>
In-Reply-To: <20250528155147.2793921-1-y.j3ms.n@xxxxxxxxx>
From: Miguel Ojeda <miguel.ojeda.sandonis@xxxxxxxxx>
Date: Wed, 28 May 2025 18:31:11 +0200
X-Gm-Features: AX0GCFtHMn_KuvjvBkIeX53fBiemP9VoNR9r1Lds-yXsvikvU80_bPY6l7Er12s
Message-ID: <CANiq72==P-Sp=d6N7B=f-_aHak3Gr596Bs-3MmMBs+tw9J_K9Q@xxxxxxxxxxxxxx>
Subject: Re: [PATCH v2] rust: kunit: use crate-level mapping for `c_void`
To: Jesung Yang <y.j3ms.n@xxxxxxxxx>
Cc: Brendan Higgins <brendan.higgins@xxxxxxxxx>, David Gow <davidgow@xxxxxxxxxx>,
Rae Moar <rmoar@xxxxxxxxxx>, Miguel Ojeda <ojeda@xxxxxxxxxx>, Alex Gaynor <alex.gaynor@xxxxxxxxx>,
Boqun Feng <boqun.feng@xxxxxxxxx>, Gary Guo <gary@xxxxxxxxxxx>,
=?UTF-8?Q?Bj=C3=B6rn_Roy_Baron?= <bjorn3_gh@xxxxxxxxxxxxxx>,
Andreas Hindborg <a.hindborg@xxxxxxxxxx>, Alice Ryhl <aliceryhl@xxxxxxxxxx>,
Trevor Gross <tmgross@xxxxxxxxx>, Danilo Krummrich <dakr@xxxxxxxxxx>, linux-kselftest@xxxxxxxxxxxxxxx,
kunit-dev@xxxxxxxxxxxxxxxx, rust-for-linux@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,
HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,
SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 5:55=E2=80=AFPM Jesung Yang <y.j3ms.n@xxxxxxxxx> wr=
ote:
>
> So in sum, I believe it's reasonable to keep the diff unchanged... but
> I'm happy to adjust if you'd prefer a different approach.
I see this is based on rust-next -- if you rebase the patch on top of
the latest one, you will see the prelude there :)
Thanks!
Cheers,
Miguel
Return-Path: <linux-kernel+bounces-665817-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 7028441E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:36:17 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 1A9403A6B1F
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:35:56 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id DE87128CF77;
Wed, 28 May 2025 16:36:08 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="CI3whra/"
Received: from casper.infradead.org (casper.infradead.org [90.155.50.34])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 671EB79FE;
Wed, 28 May 2025 16:36:06 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748450168; cv=none; b=k42Fw8lyOAPeneoy+uUnfXgUvCJZ1zwE5ER88629KVGwx7nCA3dypsHYpSv+km+Ow6xYm1quKiIylhVrE9zmddkqvQJ5Y7WYF09+1pQUTMDrICQVjEsn76XBMj2s2RLc0fF5w/aXEDHEqqavdjjHlfFPV3FuHdnZKpbJH5nB70s=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748450168; c=relaxed/simple;
bh=8tkCt7P4+2Itg5B4iyjr2bnz0MD5gJmHFsKamVWzmY0=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=LKGtkAy+7jrPN5LT+oRVwjTsPanUVKfUP8WhOfcfcV1+ro1OCiTumsAxRUQNt1t1UuyzihovvLVHSWxudab3vYYj3TAdzS0WietNsQeWT7aG2RagfdBk7gefmEjsFlmjVIroYHG/vFpMCLL+ZzhbtyCbHKkEeRuMzmpC9zpI2gU=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=CI3whra/; arc=none smtp.client-ip=90.155.50.34
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org
Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version:
References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To:
Content-Transfer-Encoding:Content-ID:Content-Description;
bh=568UXfg09DhGtkTDBYV5iMDI+b3lSxDAU/RR+HqOCYA=; b=CI3whra/FNKgPC6/MrrW3/7oAv
gJ5A/lFJJfDNjjvOWVxWPYcIaNKO5GhQHKgKeQBfWXQ5KsbRarMDrQ+JT3DIIXQ2qkBV1LtduiLLO
WHtwhFJlmkqQ1lexDv8Sw2MAzPE9g4AlHH3iaSQEuIRMd2BLFruRjyBtdpwUjQlQEPbisK3s2IO4S
ktBd+DGQuegeItaFJsTX+0XvLscXM7mt1HEashHGAGbUHkx4nIVJPzYzcSj5bVnJpMYfDqlE2ZSAb
426Hsd8fujIAwPu2cXH1c210B8lEDyUDFp4VIzVaxWbIgO/xhBKefAc/BYjqYzcMZZRYb+b8b52DV
6rqvJ3tg==;
Received: from 77-249-17-252.cable.dynamic.v4.ziggo.nl ([77.249.17.252] helo=noisy.programming.kicks-ass.net)
by casper.infradead.org with esmtpsa (Exim 4.98.2 #2 (Red Hat Linux))
id 1uKJl0-0000000Dr3Y-1soE;
Wed, 28 May 2025 16:35:58 +0000
Received: by noisy.programming.kicks-ass.net (Postfix, from userid 1000)
id 05D793005AF; Wed, 28 May 2025 18:35:58 +0200 (CEST)
Date: Wed, 28 May 2025 18:35:57 +0200
From: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
To: Josh Poimboeuf <jpoimboe@xxxxxxxxxx>
Cc: Sean Christopherson <seanjc@xxxxxxxxxx>,
"H. Peter Anvin" <hpa@xxxxxxxxx>, x86@xxxxxxxxxx, kys@xxxxxxxxxxxxx,
haiyangz@xxxxxxxxxxxxx, wei.liu@xxxxxxxxxx, decui@xxxxxxxxxxxxx,
tglx@xxxxxxxxxxxxx, mingo@xxxxxxxxxx, bp@xxxxxxxxx,
dave.hansen@xxxxxxxxxxxxxxx, pbonzini@xxxxxxxxxx, ardb@xxxxxxxxxx,
kees@xxxxxxxxxx, Arnd Bergmann <arnd@xxxxxxxx>,
gregkh@xxxxxxxxxxxxxxxxxxx, linux-hyperv@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx, kvm@xxxxxxxxxxxxxxx,
linux-efi@xxxxxxxxxxxxxxx, samitolvanen@xxxxxxxxxx,
ojeda@xxxxxxxxxx, xin@xxxxxxxxx
Subject: Re: [PATCH v2 00/13] objtool: Detect and warn about indirect calls
in __nocfi functions
Message-ID: <20250528163557.GI31726@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <aBO9uoLnxCSD0UwT@xxxxxxxxxx>
<20250502084007.GS4198@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<aBUiwLV4ZY2HdRbz@xxxxxxxxxx>
<20250503095023.GE4198@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<p6mkebfvhxvtqyz6mtohm2ko3nqe2zdawkgbfi6h2rfv2gxbuz@ktixvjaj44en>
<20250506073100.GG4198@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<20250506133234.GH4356@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<vukrlmb4kbpcol6rtest3tsw4y6obopbrwi5hcb5iwzogsopgt@sokysuzxvehi>
<20250528074452.GU39944@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
<20250528163035.GH31726@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528163035.GH31726@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 06:30:35PM +0200, Peter Zijlstra wrote:
> On Wed, May 28, 2025 at 09:44:52AM +0200, Peter Zijlstra wrote:
> > On Tue, May 06, 2025 at 12:18:49PM -0700, Josh Poimboeuf wrote:
> >
> > > Weird, I'm not seeing that.
> >
> > I Ate'nt Crazeh...
> >
> > https://lore.kernel.org/all/202505280410.2qfTQCRt-lkp@xxxxxxxxx/T/#u
> >
> > I'll go poke at it, see if today is the day I can figure out WTF
> > happens.
>
> It manages to trip the CFI_UNDEFINED case in op->dest.reg == cfa->base
> in update_cfi_state().
>
> I figured it ought to tickle the regular 'mov %rbp, %rsp' case above
> there, but it doesn't, for some reason it has cfa.base == SP at this
> point.
>
> This happens... /me looks in scrollback ... at POP_REGS 'pop
> %rbp'. ARGH!!
>
>
> So the sequence of fail is:
>
> push %rbp
> mov %rsp, %rbp # cfa.base = BP
>
> SAVE
> ...
> push %rbp
> ...
> pop %rbp # cfa.base = SP
This is the POP !drap and dest==base case.
> ...
> mov %rbp, %rsp # UNDEF
> nop # FAIL
> RESTORE
>
> Note that the MOV+NOP is the 4 bytes ERETS needs.
Return-Path: <linux-kernel+bounces-665818-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 7204741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:36:38 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id ABD9E4A791A
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:36:39 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C5768288C19;
Wed, 28 May 2025 16:36:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="u10GsACJ"
Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id F089F288C88;
Wed, 28 May 2025 16:36:31 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748450192; cv=none; b=fDYeK/9jlQKK76pL2S668QHjEmHcyLZYCAKi14WS3TcmGz95PThECFC7r8bHYGfCh2s1q4NOmuXvuuOGKfFt5dIeU7avuq1umZrofcVwzSB+lvOrbXp/Q1pWS7MaHpKlNNyTuGKb4ycK4RSM5GxZQleQ/PMmQjIgPMRRbMy3+OM=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748450192; c=relaxed/simple;
bh=jcz4uzarVJUq0poBXYFuAda1Apggpcq+mKsch6qZexw=;
h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:
Content-Type:Content-Disposition:In-Reply-To; b=H0mBTh+xpgFhPfisSHOXpYD8ApuHdVELQxOrIKwOdC6hSCoIAXMgMOUUlUwLDxE17L9wHp2wqlJWJX1jF2SeHCuN+/m2F0YshDdljTQJXW7gq4zAvVJ2+5eRjTy+6M0LXOJsQr8CWU8czrjKj/+3SmrLpVvKBXawb+obTbnFh+Y=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=u10GsACJ; arc=none smtp.client-ip=10.30.226.201
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5D2D2C4CEE3;
Wed, 28 May 2025 16:36:31 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
s=k20201202; t=1748450191;
bh=jcz4uzarVJUq0poBXYFuAda1Apggpcq+mKsch6qZexw=;
h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
b=u10GsACJL3x7wVHM/mmy2chKOGx5oFq0lomwr0vWLPlAzxjBT77ZRyqNBUsxtOXHY
Cm92oigX1U5evCrFqoRH5YXROAuTu6jdtpdoR+vG666AxWxb2cBCggk812Z0o+HhyS
ghlqnIKOMBePw6KPuwx/Eg4iAicfsqq4Q8GFBKSaEL07SRuukPmGMtXmksI6rx9nqo
Ay6ar66dCnzR1e1hYURRClow3sri7Wria9j+cjM7XKFpepyhC0HYVM3zA/lrUpbtQd
jDqWfXiVKILlXLsPz4K7X/qbKBxmF6ziVAmcq93vvZjQjZdANbZfAqNGOHU6u96w7P
eAaGmhGHfo/gQ==
Date: Wed, 28 May 2025 09:36:28 -0700
From: Kees Cook <kees@xxxxxxxxxx>
To: Sameeksha Sankpal <sameekshasankpal@xxxxxxxxx>
Cc: skhan@xxxxxxxxxxxxxxxxxxx, luto@xxxxxxxxxxxxxx, wad@xxxxxxxxxxxx,
shuah@xxxxxxxxxx, linux-kselftest@xxxxxxxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH v2] selftests/seccomp: Improve error logging in
get_proc_stat()
Message-ID: <202505280933.33EEDC4DC8@keescook>
References: <202505190816.2A78B3153@keescook>
<20250528010839.11594-1-sameekshasankpal@xxxxxxxxx>
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20250528010839.11594-1-sameekshasankpal@xxxxxxxxx>
X-Spam-Status: No, score=-6.4 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
On Wed, May 28, 2025 at 06:38:39AM +0530, Sameeksha Sankpal wrote:
> Use TH_LOG to report failure when reading /proc/<pid>/stat in
> get_proc_stat(), following kernel test framework conventions.
>
> Previously, printf() was used which is discouraged.
printf wasn't used previous, that was in your v1. :)
>
> Suggested-by: Kees Cook <kees@xxxxxxxxxx>
>
No blank line here -- other tags should all be together with the S-o-b
line.
> Signed-off-by: Sameeksha Sankpal <sameekshasankpal@xxxxxxxxx>
> ---
> v1 -> v2:
> - Used TH_LOG instead of printf for error logging
> - Moved variable declaration to the top of the function
> - Applied review suggestion by Kees Cook
>
> tools/testing/selftests/seccomp/seccomp_bpf.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/tools/testing/selftests/seccomp/seccomp_bpf.c b/tools/testing/selftests/seccomp/seccomp_bpf.c
> index d6a85d7b26da..0f12052ef1c7 100644
> --- a/tools/testing/selftests/seccomp/seccomp_bpf.c
> +++ b/tools/testing/selftests/seccomp/seccomp_bpf.c
> @@ -4505,14 +4505,14 @@ static char get_proc_stat(struct __test_metadata *_metadata, pid_t pid)
> char proc_path[100] = {0};
> char status;
> char *line;
> + int rc;
>
> snprintf(proc_path, sizeof(proc_path), "/proc/%d/stat", pid);
> ASSERT_EQ(get_nth(_metadata, proc_path, 3, &line), 1);
> - int rc = get_nth(_metadata, proc_path, 3, &line);
> - if (rc != 1) {
> - printf("[ERROR] user_notification_fifo: failed to read stat for PID %d (rc=%d)\n", pid, rc);
> - }
> - ASSERT_EQ(rc, 1);
This patch is against your v1 patch -- it doesn't apply to the seccomp
tree as-is. Please rebase your v2 off of the upstream tree rather than
your v1.
> + rc = get_nth(_metadata, proc_path, 3, &line);
> + ASSERT_EQ(rc, 1) {
Indenting looks wrong here, double-check you're using tabs. (And please
use scripts/checkpatch.pl to check your patch for common errors.)
> + TH_LOG("user_notification_fifo: failed to read stat for PID %d (rc=%d)", pid, rc);
> + }
> status = *line;
> free(line);
Code-wise, it looks good. Please respin for a v3 and this change should
be good to land.
-Kees
--
Kees Cook
Return-Path: <linux-kernel+bounces-665819-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 1E34E41E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:37:34 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by sv.mirrors.kernel.org (Postfix) with ESMTPS id 84E2D9E7DBA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:37:12 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 27A4128D8C6;
Wed, 28 May 2025 16:37:28 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="Q83LbETL";
dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="CM/yn245"
Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4CBAD28D84E;
Wed, 28 May 2025 16:37:24 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748450246; cv=fail; b=d0W26qzN0SKX5NZ1JAU3X7l9RAC18yB5Y0pRte268NP3XcXcen6jUehP413JvgEhtTX6TkUAu4kgBi+s4pR+zOPIvBbHMgU1K2+yTCuDkKHyRNijRrIC4+1yg0a97VQHFnoRz6SOPHwsdPbAxWx8xnZXycRg02gSJkyLuaOO7mE=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748450246; c=relaxed/simple;
bh=vCopkKifyqdcDAY/IhSHS3HEaeHOIqL94+WZaQcR3Jo=;
h=From:To:Cc:Subject:In-Reply-To:References:Date:Message-ID:
Content-Type:MIME-Version; b=Xv6RYF52v49EMq6k4oSdDR9FDbGriwzUWtRQ0GDzNB1rTH3kI6n7kL9HtQmMvR0PHFD7Ke214YQSikWTWErwiZdtSixd2MOITuW6e2i5JKDAdqxspO82LdOpTgNTyWPMod5RnKUEsY+H3bbM02FkyNrUL3r91t7IpOP7kE5io6E=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=Q83LbETL; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=CM/yn245; arc=fail smtp.client-ip=205.220.165.32
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com
Received: from pps.filterd (m0246617.ppops.net [127.0.0.1])
by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54SCqJlk024345;
Wed, 28 May 2025 16:36:55 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc
:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to; s=corp-2025-04-25; bh=Lfai0c9Ax9+GalVE4J
8QJ5DnMG4BNVQFoXAqR6saybo=; b=Q83LbETLC4mBMFTw8HNRxbb/Tm2zenGDfW
PL5lA+SglgU3Y3POFESeVyZbEbYwpa1jZjXQiGk29yU9vuBgCHxw2sGa2Bdu59C3
P+BbomcNu4uG5Y0cUNwQ8vZs6YQcGfvVNkCoJp8WB6MLKR2rBG3p/p2ZJ/N7TTvB
LiHLS3DwvYkz3PEgVxBVU5AwpZXO3fvyO0GiT/soR9LfnIvN/BQto3JmH+OwAlwM
wdUK86gT8tggR4w5Yn33R3GeOnnnkgHJUrjZQgIKRJi1AlObJSPRFCnB3xQa3V1k
0htmhU561qVWHMoTM9ShwKXhmnCJSXKHyyN3IIMGr8Mo9GdqX8fg==
Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232])
by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 46v46txdwj-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Wed, 28 May 2025 16:36:55 +0000 (GMT)
Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1])
by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 54SFJNI6035618;
Wed, 28 May 2025 16:36:54 GMT
Received: from nam04-bn8-obe.outbound.protection.outlook.com (mail-bn8nam04on2056.outbound.protection.outlook.com [40.107.100.56])
by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 46u4jbmsh2-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Wed, 28 May 2025 16:36:54 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=xGD1qwGZ7JutYenHGw9SSjD5RZp+IXaAwFA/gbaqlf0VEaAL/eNfadC6uYlIJYWQu28v5XGTRMdc4jP1JzGpOiSfkdLtZI8QClh0LlDLnzP51zR3U8DEgt702fDfraVd/0FebhPewSwjrPq1U9AIfpVd0OiLM1/VPUbhVnWfNblvmMGH+MMG1LcFrWh1dV41eftiL9usL9nSXiB+2BLQajQb2OeTIklAv0+g82RJuGmT8NBOvfgS9qP9UnjxFvxhhMprRJuZS/BHW21H4ExBaZRqc60hpV+3OmKMtrCm9qWl50twR1V1FEIxVWZ03JDaAeRXnrkYHkMB7n2djlaMMg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=Lfai0c9Ax9+GalVE4J8QJ5DnMG4BNVQFoXAqR6saybo=;
b=Tqi57XuN6xAVAawQ1YJJRtzBo/y2WNZZTaXaT3Z2LO9nKotvStX2jSx2wpDPcLC76Oj++zfSgx79KiYav+n5NCXKkRFY40+nZIccX4V7stgAomfT8NTpOZFh+TpIueWXzVbGVuTJfmYMUWLfQrQAFJdXEzfZ4ukC2wXBCsyFDzYjDFqPIDVWEcsRrBv4BSikLFQ2k1CKrnIRvhNGK9MOpBqN8vvtVyd+okuJVTrt5h6fCln4IFUwyj5sibtHkdWZ7nJHEib+nmLKjUP/Bon6QVarAOFxHX7c1HWs1oWsoXTllNf+N6EQ38V4tdGuDVWqYQWIYrFxayQi1mrVybKvEg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com;
dkim=pass header.d=oracle.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=Lfai0c9Ax9+GalVE4J8QJ5DnMG4BNVQFoXAqR6saybo=;
b=CM/yn245sVulzSJ2Mrhqq/ECFlNuUkiEvmPBiA5rQkI9Pk8DiL+QAiKFRgAcVpwgVaF2AAlr4kipBbuk8DBKIC3Ezmn2Tsv8iGUud32XdDbQtOKC4EVmeT7auH8eFIO2fp3Z1V0zXeC+69cliMbqd83fBU8+OIw/2Yi6rTPgeRQ=
Received: from PH8PR10MB6597.namprd10.prod.outlook.com (2603:10b6:510:226::20)
by IA1PR10MB6097.namprd10.prod.outlook.com (2603:10b6:208:3ae::9) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8746.30; Wed, 28 May
2025 16:36:51 +0000
Received: from PH8PR10MB6597.namprd10.prod.outlook.com
([fe80::6874:4af6:bf0a:6ca]) by PH8PR10MB6597.namprd10.prod.outlook.com
([fe80::6874:4af6:bf0a:6ca%4]) with mapi id 15.20.8746.035; Wed, 28 May 2025
16:36:50 +0000
From: Stephen Brennan <stephen.s.brennan@xxxxxxxxxx>
To: Ye Liu <ye.liu@xxxxxxxxx>, akpm@xxxxxxxxxxxxxxxxxxxx
Cc: linux-debuggers@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx,
linux-mm@xxxxxxxxx, linux-toolchains@xxxxxxxxxxxxxxx,
osandov@xxxxxxxxxxx, paulmck@xxxxxxxxxx, sweettea-kernel@xxxxxxxxxx,
liuye@xxxxxxxxxx, ye.liu@xxxxxxxxx, fweimer@xxxxxxxxxx, sj@xxxxxxxxxx
Subject: Re: [PATCH v4] tools/mm: Add script to display page state for a
given PID and VADDR
In-Reply-To: <20250528091543.355386-1-ye.liu@xxxxxxxxx>
References: <20250528091543.355386-1-ye.liu@xxxxxxxxx>
Date: Wed, 28 May 2025 09:36:49 -0700
Message-ID: <87iklkadzy.fsf@xxxxxxxxxx>
Content-Type: text/plain
X-ClientProxiedBy: BY3PR05CA0008.namprd05.prod.outlook.com
(2603:10b6:a03:254::13) To PH8PR10MB6597.namprd10.prod.outlook.com
(2603:10b6:510:226::20)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PH8PR10MB6597:EE_|IA1PR10MB6097:EE_
X-MS-Office365-Filtering-Correlation-Id: 25248369-6bf9-4360-32e4-08dd9e05d8b2
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|1800799024|376014|7416014|366016|7053199007;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?3YX4x+5tyW4sZrgFcRLQV3wC+nxICfTj+cV55oSUHEfkvVkEDHG4Bri2ryXw?=
=?us-ascii?Q?t6cVwwbT80sgzbJp7EJiXtO4SqaOms67+yDbxW0fcO+XTnVZVPq+0BFG1XWa?=
=?us-ascii?Q?7VO1bhYj575I1IZO60rJMS6WdmKJxjB+ACC36duA4shjs4tNTeNg7ILrYUdu?=
=?us-ascii?Q?fQ+hl7iB/AqLrQXb4gWBs77QBnu6A73NSVozQixE4aFNnzeUngrxXdaEcPln?=
=?us-ascii?Q?xcGniS312mCSxrNd2FQiOjkKhHfCJHusWF+BadrvYLeD4FneHsPXVripqdv1?=
=?us-ascii?Q?1vmpOO8TpmuJT65UZneVlX6qb5CEEiY9eSebdMywjsXWI/OL09pwNDTE2xjt?=
=?us-ascii?Q?JyumLs2lQ7sF4E9SqKEz5UgB4Nq4tGxS/U8/nlqsrGY9GEGhKEdUSNC4x4UC?=
=?us-ascii?Q?AOa/vdempMFrV1my1yziso0aL9skDhMu+Po2fLFWjdhx5x8680Z/pGxUijc7?=
=?us-ascii?Q?x0o6si2fRzSSkfZmi5gkrdn0siKOMN5G/drQ6YDMv5bCvs0KyJxzRpppFQF+?=
=?us-ascii?Q?noj/jeEeUg8A15bMasGUslqcML8dh5gk+hCzVFQB107jqZqKk4YA9Qv3UVPw?=
=?us-ascii?Q?fTVNiK2TeaKB6ySsr5B1iNZxfc0omz4fyf0UUUoaztpVbeyazkHdSi4EyRis?=
=?us-ascii?Q?eDAS5j5vdzUZTfqB8GFJanzmbPXSYtDFJ8N4E9SwFWpoCF4qQfR5fVxDv3XM?=
=?us-ascii?Q?nNb0liF1chBIPb0i9Pn/uHoBjxLyWbuekquOWvAMblkvJ9c3ksx24O5Z2gF6?=
=?us-ascii?Q?LrK4F73VK0bXn+EPDjaUkfnVJ9t36iFaTOY+c1yT71sgmvI/5HfZcewuSuf3?=
=?us-ascii?Q?Lj7Fz2HWd1Oc/DJotiv5JRYJkqPoBjQhhufCBEJDHbpr+F9RZG3Q3XOAjhyR?=
=?us-ascii?Q?8x/N4RlzCia05eMr3KGjtRX3QXVg/Lw48RMLRGrAGpLTX6+Jv/PTC3+Mhfsv?=
=?us-ascii?Q?bwm9E5kVTWbNvV/zloSx2pF3P3FbOqMzMjl2yqDMdeaV2w+UYszGqsXyxVh8?=
=?us-ascii?Q?eg2uxzsUIdQ533Qd1hfUUvGX+PtMJBXZ5nxatauilxBSt6TPOLDYErvEdQgL?=
=?us-ascii?Q?cKQA7OSdQZUi+pab0QaEemA2OK9GXmf3+Nnt8e6lFesK6kAoUnzcUaP5diTq?=
=?us-ascii?Q?zWTr0fbLZdw13Lm6ItPZ78mghReTep0a3KZbg8Zqm78V6SwkoLtVwMEoMWmJ?=
=?us-ascii?Q?4QIAxzWB3oGsP1OZZ0/yoOETtuMv1hIF1v0npPpOkKrUwaGTpDpR0AqEpTpM?=
=?us-ascii?Q?OXMgHYBU+n7646WiXtz0EDUOfYUh49I0HJEYcrl4XjJBQxvZzIA+fMS2/rr2?=
=?us-ascii?Q?+WDoDuVn8Yqe9I5SP5ItQ6mEms36s0vBxm8FlbG4OOhZpzUwQa30ILf3Kc0F?=
=?us-ascii?Q?LqKlRk0g72x22u9W9a0KPx2QvYprXTSFQP8Z/9v1rhIeWhixYwY9Dqyt9sQV?=
=?us-ascii?Q?TVVXVqJo5usIUxDdOgbIbZVq+E7ZehnG?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH8PR10MB6597.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016)(7053199007);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?afyiSr4kZE8Ite63+XjisAObNjJDD0kuyjiNOi9Zw+KC/Jndvbih2Cy2l67C?=
=?us-ascii?Q?zC6kQoeOgkgWgvaVFb2u5ukdnSs007jvyx18h7JScEc2JZ0AIz1MLr2D+efu?=
=?us-ascii?Q?XX1K8nYDbnemwGj8c/ZvJ3WqrlDOjfy0N1tck//fQezM0K8T3A2D572B+Mmj?=
=?us-ascii?Q?HYALQYkGaRP4+T+y+uBTFJKB4ER5YeNkjm8XSzRmY9xbKESVHtLyPDjBizUK?=
=?us-ascii?Q?t/+VewxfvAhLnpjincnZEGDbJ4pNcmKHAYrQ3+rhB1GxDDWH4MJlPYb6AY0g?=
=?us-ascii?Q?vkGkQKOSpFLHqRsKuEiffeyYlMqAFE3i5juESH+7gRc4lj+GcVsMt1NLsLA1?=
=?us-ascii?Q?TPGeIdYY1biXOeKjtbZ43SSqSRnLcak0oDMB6q36VLkftEzlpXVH6zhWHiAq?=
=?us-ascii?Q?CqAWa9HpiDaDUTEQlJgYEzYrF35anlAblJkkcmRcTKvwqs+sS4R1to3E9Yja?=
=?us-ascii?Q?IYoZh1xsxCGhcT/9jFc4X3pqEhnkMpOQquPSRyf9PKs3YEFrddi9yTTexSR/?=
=?us-ascii?Q?qTFHqXmYoPH3Pp5NEEVpQ4Ng8UdBYq9VGnlgNcV8uvHto90JQOc95ydhgHf9?=
=?us-ascii?Q?72zVLyLfDu/BIfOnXh539r2fUy/CPXgGkjxTHVhefZEHyZhirGpEfxPOLCWm?=
=?us-ascii?Q?3kf5Dc7SpgmQAtox/FOx2I7fMji39jUYcIe4GPyzzBwH/Un/mANT5nMyUYfg?=
=?us-ascii?Q?dVK0DHH+FcpmilPiAf6DYe9RwpFbjyd3ivx7ROkjpQIXIG8ItzHT/1eMTwaA?=
=?us-ascii?Q?52mGAYJQNlA4p8rA8YsAsiXG/hEfK1buDbBPIqWf76GiTMFWg7r8YOnpEC+j?=
=?us-ascii?Q?f7m5kX1iZFAQUZdeXAqnLylCtFQZDzWJ/PAflzawFGq3cO8GeocVuw2k/gC7?=
=?us-ascii?Q?NrwDTC1ukOBlLpoweT6rlpxzANix1UEAVCUzRWYvqv/1NJkFQ8iEeaK3MBEt?=
=?us-ascii?Q?oHgQRPnWOdvT/kR3YBvmmaT2yTH7pG+MhLk1rDHSc5yd3eHNavKAe8dhqoEZ?=
=?us-ascii?Q?3aCpszM92e7ma4WZJahI37FwdrMubvGXp3yDg8OLh7ulWThk3f67TMPCGzF8?=
=?us-ascii?Q?qlJSlbtSadcwZ1n8gLy+kvS9hpnCTRtsEwuyZBMfJO7AgJMIirxfeqS04IXY?=
=?us-ascii?Q?ABwU3qBlTC7rSKebfGaSqXNiP4cHgBiuRh4ll1jPU5HjMPm9j1518hQd+GeW?=
=?us-ascii?Q?Zkag7ofVHTJ/GHf+55lVVjE+5JMi3g9UbCNJNEM6j98pi4LwPwh8Gh7Q5y/A?=
=?us-ascii?Q?Lxm/QvB+sZwHVUXEhC0CwtdKkuvPER4V8Vfv3yH+bsOxsRBZhaWfyGArrrbw?=
=?us-ascii?Q?8juS5O/odRAUBPHUizG6jZsOkh8gLiFXBV2y+b+r0MguvTWs8gjiMpvEWKE9?=
=?us-ascii?Q?NKNe6vji17j51EqI/EC3d6n0bjD/zR8RwV7ZNulPanc0uxcpG86Xw0iv/srw?=
=?us-ascii?Q?wLTiozRelkIEXI6/m2Eg7knYRFCeLWjZBe15KHI03j+nosxdaSl18cMlIO38?=
=?us-ascii?Q?xL5kQmkncdZZLMcXwSAwpzEt3ZJM7qH230MPBatTqsgZyd7kz03hGppVsFmU?=
=?us-ascii?Q?HdLXReZ6I0FIPM4+2DJbWGlIhQzYjXr2b7iyVL8Srdbpe96gSUGe68RZopgT?=
=?us-ascii?Q?NA=3D=3D?=
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0:
W3+Mw4XMcX/uYsMFAfQkqysmaZNnunSlrCFEu9kjBO8lbnyriOR46odZM8UOeNYYL3INmso81hUg5t9Ev3PtWu1cTH63Z68pqDqJGq/Gksxv4mcfCzWebvTmM40eTT4oRoC78L6yHaVeX6ZLqnweSYmM4nIwdgPgn4okMYYh6rL9D/Qd2O/CVa9iWmqQ9OxsdQpcDJP/zdqDrqUOfTW6t/Vh3L6ZyUDGi73vfgV3YaxISXRcOUnypGT8/TMSGO7oiWCQlYVSQ2jfaryLjmeyEhEYqp9mNuPuxWX+7eNHIOkXEtDe8OwGRTciPMB2JMd/29mMliOu/KbZFnMTg+V8Mu10ED8sm921lf2anFcSx3THdpXxK5v6LAVWWzIIcO9PBd/VvVWy6zA/uFnSXOSJsO+4py/OUHQ3GIKejn/zfLGAWfrOxhHw4rVmBJRz/xz6unL8RPqojL5Jd5AqoSO2XgmuLu4aGe/sjLGlrzTA47/vYNMTJl4aMwbd/W3V/e5WQ6Ye3yLxKiybCXiFz7QbJVM4aPJ7lSEt0s2ggwsfOc4++bHxDTtj67ouFBATKubp70DWlz5or2ApnizRtJF9PCmPS9Up+wAn1pXjl5wKv4g=
X-OriginatorOrg: oracle.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 25248369-6bf9-4360-32e4-08dd9e05d8b2
X-MS-Exchange-CrossTenant-AuthSource: PH8PR10MB6597.namprd10.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 16:36:50.5971
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: a+WoRCXLUfMtvnKoKHkmzkri72eDmKFxVQ9O/8Ay8tN3CLpi59p7GREdTKLDs1pvxvrBmKSdC0ddVzGaQRVWNOfzBMhLNzll63RqME3c1Rk=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR10MB6097
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
definitions=2025-05-28_08,2025-05-27_01,2025-03-28_01
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxlogscore=999
phishscore=0 malwarescore=0 bulkscore=0 adultscore=0 spamscore=0
mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1
engine=8.12.0-2505160000 definitions=main-2505280145
X-Proofpoint-GUID: ti8LUW6ftGKDvxn1HFctZDaeYLbt9PKG
X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDE0NSBTYWx0ZWRfX23tbxkBnk3WU 5fKmhLc3Yk9/yOSGoE6SO5UBlppo+bcmdOttTLB+sd/97UAEj+BTk7QHi6xBMUOgihIEHovUgTI ClHqDLrPZ4Wh+VIelHQQ8eLot1fq4qC0hvcaokvWEb39l5vt1sApTCpres6A5TRwSuqSofvR7YQ
P/6MoPl7RvblXV7Hi/g2oYMhk82cpyhK9W0OkoOB/pPpuM7tCzd8XjEPZJd0LEGGabxU4zZtRZz XtcLpRiv2nmb52wLoQYTFW8Qv5OLZpO0xJddY3lCTkLj6wgAK06zaaKdSqXqch7D7r1q7qLEOvj jU5gKp2vFgU7sDMRq/FtlwwoyHk4tVSJYIe4ftg+D80WKmw0nE+s+zGQKHZr+ZXi44kaTl+DqYN
7s3ZmLlnRjWhQJh3VUWYQIhaLO6yTm+Cjef9U98A4HuYuyxDxspFEPMI2ZWFyGD77wqjHUKj
X-Authority-Analysis: v=2.4 cv=VskjA/2n c=1 sm=1 tr=0 ts=68373ba7 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19
a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=dt9VzEwgFbYA:10 a=GoEa3M9JfhUA:10 a=VwQbUJbxAAAA:8 a=NEAV23lmAAAA:8 a=pGLkceISAAAA:8 a=q21qj0CsJDf3oBTIheAA:9 a=dUo62Pl7dQeOs3m6:21
X-Proofpoint-ORIG-GUID: ti8LUW6ftGKDvxn1HFctZDaeYLbt9PKG
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
Hi Ye,
I just wanted to leave a code review related to the drgn/Python elements
of this patch. I'm no mm expert, and most of the things I'm flagging
here are small changes that I don't think are critical.
Ye Liu <ye.liu@xxxxxxxxx> writes:
> From: Ye Liu <liuye@xxxxxxxxxx>
>
> Introduces a new drgn script, `show_page_info.py`, which allows users
> to analyze the state of a page given a process ID (PID) and a virtual
> address (VADDR). This can help kernel developers or debuggers easily
> inspect page-related information in a live kernel or vmcore.
>
> The script extracts information such as the page flags, mapping, and
> other metadata relevant to diagnosing memory issues.
>
> Output example:
> sudo ./show_page_info.py 1 0x7fb3eb1b2000
> PID: 1 Comm: systemd mm: 0xffff8d27279f9cc0
> Raw: 0017ffffc000416c fffff31105a61b08 fffff31105a63608 ffff8d27121326a8
> Raw: 0000000000000000 ffff8d271b9dcc40 0000002500000007 ffff8d2711f12700
> User Virtual Address: 0x7fb3eb1b2000
> Page Address: 0xfffff31106356a00
> Page Flags: PG_referenced|PG_uptodate|PG_lru|PG_head|PG_active|
> PG_private|PG_reported|PG_has_hwpoisoned
> Page Size: 4096
> Page PFN: 0x18d5a8
> Page Physical: 0x18d5a8000
> Page Virtual: 0xffff8d274d5a8000
> Page Refcount: 37
> Page Mapcount: 7
> Page Index: 0x0
> Page Memcg Data: 0xffff8d2711f12700
> Memcg Name: init.scope
> Memcg Path: /sys/fs/cgroup/memory/init.scope
> Page Mapping: 0xffff8d27121326a8
> Page Anon/File: File
> Page VMA: 0xffff8d26cac47600
> VMA Start: 0x7fb3eb1b2000
> VMA End: 0x7fb3eb1b6000
> This page is part of a compound page.
> This page is the head page of a compound page.
> Head Page: 0xfffff31106356a00
> Compound Order: 2
> Number of Pages: 4
>
> Signed-off-by: Ye Liu <liuye@xxxxxxxxxx>
>
> Changes in v4:
> - Add error and exception handling.
> - Adjust the way to obtain PAGE_SIZE.
> - Fix the acquisition of memcg.
> - Link to v3:https://lore.kernel.org/all/20250423014850.344501-1-ye.liu@xxxxxxxxx/
>
> Changes in v3:
> - Adjust display style.
> - Link to v2:https://lore.kernel.org/all/20250421080748.114750-1-ye.liu@xxxxxxxxx/
>
> Changes in v2:
> - Move the show_page_info.py file to tools/mm.
> - Link to v1: https://lore.kernel.org/all/20250415075024.248232-1-ye.liu@xxxxxxxxx/
> ---
> MAINTAINERS | 5 ++
> tools/mm/show_page_info.py | 152 +++++++++++++++++++++++++++++++++++++
> 2 files changed, 157 insertions(+)
> create mode 100755 tools/mm/show_page_info.py
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 0cb9e55021cb..3cbd46bf1eab 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -18726,6 +18726,11 @@ F: Documentation/mm/page_table_check.rst
> F: include/linux/page_table_check.h
> F: mm/page_table_check.c
>
> +PAGE STATE DEBUG SCRIPT
> +M: Ye Liu <liuye@xxxxxxxxxx>
> +S: Maintained
> +F: tools/mm/show_page_info.py
> +
> PANASONIC LAPTOP ACPI EXTRAS DRIVER
> M: Kenneth Chan <kenneth.t.chan@xxxxxxxxx>
> L: platform-driver-x86@xxxxxxxxxxxxxxx
> diff --git a/tools/mm/show_page_info.py b/tools/mm/show_page_info.py
> new file mode 100755
> index 000000000000..5c46501e24f4
> --- /dev/null
> +++ b/tools/mm/show_page_info.py
> @@ -0,0 +1,152 @@
> +#!/usr/bin/env drgn
> +# SPDX-License-Identifier: GPL-2.0-only
> +# Copyright (C) 2025 Ye Liu <liuye@xxxxxxxxxx>
> +
> +import argparse
> +from drgn import Object, FaultError
> +from drgn.helpers.linux import find_task, follow_page, page_size
> +from drgn.helpers.linux.mm import (
> + decode_page_flags, page_to_pfn, page_to_phys, page_to_virt, vma_find,
> + PageSlab, PageCompound, PageHead, PageTail, compound_head, compound_order, compound_nr
> +)
> +from drgn.helpers.linux.cgroup import cgroup_name, cgroup_path
Anything in "drgn.helpers.linux.*" can be imported from
"drgn.helpers.linux" instead, which would help if any helper moved
around from one module to another. I've recently started preferring
that, but I don't know if it's a huge improvement. EG:
from drgn.helpers.linux import (
PageCompound, PageHead, PageSlab, PageTail, cgroup_name,
cgroup_path, compound_head, compound_nr, compound_order,
decode_page_flags, find_task, follow_page, page_size, page_to_pfn,
page_to_phys, page_to_virt, vma_find,
)
Again, not sure it improves anything :)
> +DESC = """
> +This is a drgn script to show the page state.
> +For more info on drgn, visit https://github.com/osandov/drgn.
> +"""
> +
> +MEMCG_DATA_OBJEXTS = 1 << 0
> +MEMCG_DATA_KMEM = 1 << 1
> +__NR_MEMCG_DATA_FLAGS = 1 << 2
These are available as enums since commit 87944e2992bd2 ("mm: Introduce
page memcg flags"). So you can access them without redeclaring their
values like this:
prog.constant("MEMCG_DATA_OBJEXTS")
You can still save them as globals for efficiency.
> +def format_page_data(data):
> + """Format raw page data into a readable hex dump."""
> + try:
> + chunks = [data[i:i+8] for i in range(0, len(data), 8)]
> + hex_chunks = ["".join(f"{b:02x}" for b in chunk[::-1]) for chunk in chunks]
> + lines = [" ".join(hex_chunks[i:i+4]) for i in range(0, len(hex_chunks), 4)]
> + return "\n".join(f"Raw: {line}" for line in lines)
> + except Exception as e:
> + return f"Error formatting page data: {e}"
I'm thinking this would show big-endian addresses backwards, and on
32-bit architectures it would group the data into 8-byte words, when I
think it would probably be more valuable to show them in the native word
size.
You could resolve the endianness issue by using Program.read_word() to
read each individual word of memory in the correct byte order, and use
Program.platform.flags to distinguish a 32-bit architecture so that you
can compute each address. In fact, check print_annotated_memory() in
drgn which has very similar logic:
https://github.com/osandov/drgn/blob/main/drgn/helpers/common/memory.py
> +def get_memcg_info(page):
> + """Retrieve memory cgroup information for a page."""
> + try:
> + memcg_data = page.memcg_data.value_()
> + if memcg_data & MEMCG_DATA_OBJEXTS:
> + slabobj_ext = Object(prog, "struct slabobj_ext *", address=memcg_data & ~(__NR_MEMCG_DATA_FLAGS - 1))
A slightly shorter and more idiomatic way to do it would be using the
cast() function:
slabobj_ext = cast("struct slabobj_ext *", memcg_data & ~(__NR_MEMCG_DATA_FLAGS - 1))
> + memcg_value = slabobj_ext.objcg.memcg.value_()
> + elif memcg_data & MEMCG_DATA_KMEM:
> + objcg = Object(prog, "struct obj_cgroup *", address=memcg_data & ~(__NR_MEMCG_DATA_FLAGS - 1))
> + memcg_value = objcg.memcg.value_()
> + else:
> + memcg_value = memcg_data & ~(__NR_MEMCG_DATA_FLAGS - 1)
> +
> + if memcg_value == 0:
> + return "none", "/sys/fs/cgroup/memory/"
> +
> + memcg = Object(prog, "struct mem_cgroup *", address=memcg_value)
> + cgrp = memcg.css.cgroup
> + return cgroup_name(cgrp).decode(), f"/sys/fs/cgroup/memory{cgroup_path(cgrp).decode()}"
> + except FaultError as e:
> + return "unknown", f"Error retrieving memcg info: {e}"
> + except Exception as e:
> + return "unknown", f"Unexpected error: {e}"
> +
> +def show_page_state(page, addr, mm, pid, task):
> + """Display detailed information about a page."""
> + try:
> + print(f'PID: {pid} Comm: {task.comm.string_().decode()} mm: {hex(mm)}')
> + try:
> + print(format_page_data(prog.read(page.value_(), 64)))
Rather than hard-code the size of struct page, you can use sizeof(page).
And in fact, all drgn Objects have a .bytes_() that will just give you
the bytes of the object directly, which would even avoid the sizeof().
Though in this case, I'd argue for just passing the page into
format_page_data() and letting it use Program.read_word() to read each
word in the correct endianness, like I said above.
> + except FaultError as e:
> + print(f"Error reading page data: {e}")
> +
> + fields = {
> + "User Virtual Address": hex(addr),
> + "Page Address": hex(page.value_()),
> + "Page Flags": decode_page_flags(page),
> + "Page Size": prog["PAGE_SIZE"].value_(),
> + "Page PFN": hex(page_to_pfn(page).value_()),
> + "Page Physical": hex(page_to_phys(page).value_()),
> + "Page Virtual": hex(page_to_virt(page).value_()),
> + "Page Refcount": page._refcount.counter.value_(),
> + "Page Mapcount": page._mapcount.counter.value_(),
> + "Page Index": hex(page.__folio_index.value_()),
> + "Page Memcg Data": hex(page.memcg_data.value_()),
> + }
> +
> + memcg_name, memcg_path = get_memcg_info(page)
> + fields["Memcg Name"] = memcg_name
> + fields["Memcg Path"] = memcg_path
> + fields["Page Mapping"] = hex(page.mapping.value_())
> + fields["Page Anon/File"] = "Anon" if page.mapping.value_() & 0x1 else "File"
> +
> + try:
> + vma = vma_find(mm, addr)
> + fields["Page VMA"] = hex(vma.value_())
> + fields["VMA Start"] = hex(vma.vm_start.value_())
> + fields["VMA End"] = hex(vma.vm_end.value_())
> + except FaultError as e:
> + fields["Page VMA"] = "Unavailable"
> + fields["VMA Start"] = "Unavailable"
> + fields["VMA End"] = "Unavailable"
> + print(f"Error retrieving VMA information: {e}")
> +
> + # Calculate the maximum field name length for alignment
> + max_field_len = max(len(field) for field in fields)
> +
> + # Print aligned fields
> + for field, value in fields.items():
> + print(f"{field}:".ljust(max_field_len + 2) + f"{value}")
> +
> + # Additional information about the page
> + if PageSlab(page):
> + print("This page belongs to the slab allocator.")
> +
> + if PageCompound(page):
> + print("This page is part of a compound page.")
> + if PageHead(page):
> + print("This page is the head page of a compound page.")
> + if PageTail(page):
> + print("This page is the tail page of a compound page.")
> + print(f"{'Head Page:'.ljust(max_field_len + 2)}{hex(compound_head(page).value_())}")
> + print(f"{'Compound Order:'.ljust(max_field_len + 2)}{compound_order(page).value_()}")
> + print(f"{'Number of Pages:'.ljust(max_field_len + 2)}{compound_nr(page).value_()}")
> + else:
> + print("This page is not part of a compound page.")
> + except FaultError as e:
> + print(f"Error accessing page state: {e}")
> + except Exception as e:
> + print(f"Unexpected error: {e}")
> +
> +def main():
> + """Main function to parse arguments and display page state."""
> + parser = argparse.ArgumentParser(description=DESC, formatter_class=argparse.RawTextHelpFormatter)
> + parser.add_argument('pid', metavar='PID', type=int, help='Target process ID (PID)')
> + parser.add_argument('vaddr', metavar='VADDR', type=str, help='Target virtual address in hexadecimal format (e.g., 0x7fff1234abcd)')
> + args = parser.parse_args()
> +
> + try:
> + vaddr = int(args.vaddr, 16)
> + except ValueError:
> + print(f"Error: Invalid virtual address format: {args.vaddr}")
> + return
I find it quite useful to replace things like this with:
sys.exit(f"Error: Invalid virtual address format: {args.vaddr}")
Which will result in the script exiting with a non-zero exit code, and
it will print the message to stderr, rather than stdout. All while being
one line shorter, for the code golfers :)
The actual logic looks excellent, and most of my suggestions are just
that: suggestions. Sorry for putting this review on v4, I should have
sat down and done this sooner.
Regards,
Stephen
> + try:
> + task = find_task(args.pid)
> + mm = task.mm
> + page = follow_page(mm, vaddr)
> +
> + if page:
> + show_page_state(page, vaddr, mm, args.pid, task)
> + else:
> + print(f"Address {hex(vaddr)} is not mapped.")
> + except FaultError as e:
> + print(f"Error accessing task or memory: {e}")
> + except Exception as e:
> + print(f"Unexpected error: {e}")
> +
> +if __name__ == "__main__":
> + main()
> --
> 2.25.1
Return-Path: <linux-kernel+bounces-665820-lkml=lkml.rescloud.iu.edu@xxxxxxxxxxxxxxx>
X-Original-To: lkml@xxxxxxxxxxxxxxxxxxxx
Delivered-To: lkml@xxxxxxxxxxxxxxxxxxxx
Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [147.75.199.223])
by lkml.rescloud.iu.edu (Postfix) with ESMTPS id 2945741E003FA
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 12:37:46 -0400 (EDT)
Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140])
(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ny.mirrors.kernel.org (Postfix) with ESMTPS id 3B87A1648A1
for <lkml@xxxxxxxxxxxxxxxxxxxx>; Wed, 28 May 2025 16:37:42 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id C169428D854;
Wed, 28 May 2025 16:37:30 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="jSjm+JzW"
Received: from AS8PR03CU001.outbound.protection.outlook.com (mail-westeuropeazon11012058.outbound.protection.outlook.com [52.101.71.58])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1B58C28D8D8;
Wed, 28 May 2025 16:37:26 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.71.58
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1748450249; cv=fail; b=NvZzx4KTOuOVMafWALziuXbf/a4/ZEoHPeVhQUGnpDYzM7rQmc06aqP+gMQ7J55TyUMTM9mDlDOy3AmI/R8BiTAnFYFSuRVIjuvxEM9nOUsSvOU0CwoUmFnV7956yHhFFC0QBFNBqjyWrq+xW2U+H2IQRem+LcXivssUzIRIEsU=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1748450249; c=relaxed/simple;
bh=YiaebUEexpDrNXq6fSitD4TwUujuscFqzfsakTGzlfY=;
h=From:To:Cc:Subject:Date:Message-Id:Content-Type:MIME-Version; b=UtVPWPvxE+DqO1dVFsYozcxMFjIfXR22MAcElW2dCR3DeMBkOfQ8gMELejVpPROBkU7ukns6jPF4cRqzMbItHZMZTPxWZflxEUhoq8ZUFp9VK7l8oYDv2aJF7XSfA+4MLr9UxhO7995omT4cMYELZnH5ISW6yuhVH2btcM/9sW0=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=jSjm+JzW; arc=fail smtp.client-ip=52.101.71.58
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=oRGf4Iotvuj6vrIGhpeElp4sNoS921u7f2Us14uv/KdBJ78P31EBqIhiugxsszuH0ccQ67Pz+2L1VUJcAaWKHO+w/otOOf4r9LlFOlG2RFP2RDeWocYEO3w32ND5wQZSQ/Ayz0DE/HNhwmoFZMpdBm1IAX6xSCEip5Nwaab9622OGol4qil7bEFGfrSKRs+lcjPLBRUkANpBjVxRuskwQXp77Kjn09CfOMo88Tvy7wEhKnXL9z8xiCYwFzy/2a5tdj+pQm1ms8FE1+k38LKnQi4GjJ/QS+WONz8nwfTDwqWeV7+UOSkQ58vqO7Igh7LS16omRNjF0+HzGzpt5h8t7g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=KTWrLr0E9zwKawOazY7TrSPI0Vgh5mt6AUy+UAmEbJk=;
b=E8zYbqoyQffbpd5Zqkf7z6lbL15uGj1hg9fshBJF2170p2GgvG4eTbaoaiXBYEQkF8kyrWit1MJ5tLYSbVup6CLY9HhYYJche86zYNdWsoB2G0gMNrRkuZQqLDZquGBRV0nqJvXtI+LXRa5H7uDJQrp0vlSeCe7X+9bNYUpuNRxW1vueY4eUScIkk9/7JUXwlZFOYJv3Hjac9r8tQI5MYwNKzXuteAuP8v75FUCBC3JK0vI0NuwaP+eoMYiEZxwe2AcQ/Evb+ZyRkcrgQbwclWJDP0Cdbl3tHQnL/VqMVALZ8/CgTvrbEWIZvthGEXzajMaEm0Q7MIofN9GA983Beg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=KTWrLr0E9zwKawOazY7TrSPI0Vgh5mt6AUy+UAmEbJk=;
b=jSjm+JzWHJ0zKgePZVlLtepBu1a3ZAn+v4VUapYmK9DFRX/3BRD3yoxS4dvnugQXzNX2NoS7DuqIhtBHwrhwbdUBnfpkwl4+xJZNgIqyjRD1KJRBPTQcUwpOVlSeWjS+dbAv4WB2SR/YRV9LKpLplgW6Id5ZEHqcCk6LY8w267dR7yF/biFEZTKVnkk0Li3HrTKOHBmr3YQAZnGDipCHUuvFJgEOAhAqFhWdYeQpEC4SV8J2C+CRJOBpdM49dyr77E3u081UB07QC4/M2r6PqV58EAU792SI1jWAVii0So9TjwHV8sT3c/uT/8rqXEyWcJf5GtFWEVFjG/i0UCNpXA==
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14)
by GVXPR04MB10304.eurprd04.prod.outlook.com (2603:10a6:150:1e9::19) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.25; Wed, 28 May
2025 16:37:24 +0000
Received: from PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com
([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8746.030; Wed, 28 May 2025
16:37:24 +0000
From: Frank Li <Frank.Li@xxxxxxx>
To: Thomas Gleixner <tglx@xxxxxxxxxxxxx>,
Rob Herring <robh@xxxxxxxxxx>,
Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>,
Conor Dooley <conor+dt@xxxxxxxxxx>,
linux-kernel@xxxxxxxxxxxxxxx (open list:IRQCHIP DRIVERS),
devicetree@xxxxxxxxxxxxxxx (open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS)
Cc: imx@xxxxxxxxxxxxxxx
Subject: [PATCH v2 1/1] dt-bindings: interrupt-controller: Add arm,armv7m-nvic and fix #interrupt-cells
Date: Wed, 28 May 2025 12:37:04 -0400
Message-Id: <20250528163704.690840-1-Frank.Li@xxxxxxx>
X-Mailer: git-send-email 2.34.1
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-ClientProxiedBy: BYAPR06CA0008.namprd06.prod.outlook.com
(2603:10b6:a03:d4::21) To PAXPR04MB9642.eurprd04.prod.outlook.com
(2603:10a6:102:240::14)
Precedence: bulk
X-Mailing-List: linux-kernel@xxxxxxxxxxxxxxx
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@xxxxxxxxxxxxxxx>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@xxxxxxxxxxxxxxx>
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|GVXPR04MB10304:EE_
X-MS-Office365-Filtering-Correlation-Id: ef7d4a8a-ced3-4122-e878-08dd9e05ec96
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam:
BCL:0;ARA:13230040|1800799024|366016|376014|52116014|38350700014;
X-Microsoft-Antispam-Message-Info:
=?us-ascii?Q?3vg2YCiEIQmo3BUk9JXMAOmy3lnamJctH0IXhYadqyrgzUoLZOzSNwKM8q7F?=
=?us-ascii?Q?S16O8bc22omnEs4VcPLomSq3ZOi9hlu0PCBxp7MMMinQu1v68Jnirt7Idkxz?=
=?us-ascii?Q?IKyjOHfzjjwdrr76uA7r530D9liP6AByBvagHhqHKcqU/G8qdcfeW2JmYda2?=
=?us-ascii?Q?BqIPa+klREgqmattyP5JkWXO7Yhgn6aRxjG8qxCMSo6XS8PdeVjhIqFavWLI?=
=?us-ascii?Q?YukPOQwtB13IDU6dOWs34Upqh0MxhCcX9HNbr6xWtvKFZdCagDmkPFiEZJTP?=
=?us-ascii?Q?pOBO4iPXZVqEs0ZzKv8SzhjH4mXkGcpwzCgiZXx5t5pEo2uH6tHDW69Q+Tdw?=
=?us-ascii?Q?IwKHnXunR0BgkoHtt/c5d3KSaCwISX3eFlm8LAHgHnqR1GQvg6qYagHJqiqq?=
=?us-ascii?Q?kTAvTvP6IomXaygg7NjVX81R3Xmlm83w+GyxpkyV/ylqdJFZMBJ6e8i5+tD/?=
=?us-ascii?Q?S9V28j5LUcTxXLCKIYNBioVUjYPgEWdHtLh9Bi2mHPjONiFOwlRnvPBeucbN?=
=?us-ascii?Q?4FBm5K8DI0b2W/bDtf0ujgqkpHGl3yk/xpkjkkpU13Ng6/A0GQGSA99v/LDK?=
=?us-ascii?Q?a2gfmGoh3OV3TQzoMQMLJmex/97IwIK5eo4ZbWFAOvs/r2tDasK0EAcIAHqw?=
=?us-ascii?Q?A3SUQksaF0Nj2YYs16/k+2I5CZeReQetjkK92LAlc/zuloCeZPLog87//SdY?=
=?us-ascii?Q?fSn8r7JhiGCVwFX+vcAoJHiOwaK9aQ4Z4zC+URuRFT1sGFJJUU4YMwT1Sk3l?=
=?us-ascii?Q?BcTXQJei008DGARfTe8DriyX8zIYc29b3KJjb1UAvGJntf8XSpAsh4yXE8Hu?=
=?us-ascii?Q?qqCs3kvP6yaahj56+NHgXAgH0KuG9NnSLiAHJ0I46GoTXVcO8EgNZUcq1jkV?=
=?us-ascii?Q?TDiLgaImm9OVKgYt1V0Bgt1ZzKvLGhvXQEjF71EjfpkrnlHDfb08zczU2T8s?=
=?us-ascii?Q?hMiBpQYHHFqDetr9RDB9rBH6SnwLthXfBcCaCfrcmEFiWhWKhWwTg5NjVTTZ?=
=?us-ascii?Q?VVgceW0uoBElfhr5yUB9AUQmQnMAL5vaGZDeG5IehtIj1L1rY/coRv5ADiUG?=
=?us-ascii?Q?ZfLwi2l3KVwlQmmoMj4b1R0s+B6o3NsHpJOm1T0NX5s/w1jtwNOiXmiIP8AW?=
=?us-ascii?Q?4lUfhApxzmQbBvbUEUTqewrp8mnXiSpN+b7GL6mFX/udwCR/iqHmWj7kVArX?=
=?us-ascii?Q?kdoPM6/z3lwo3iat+TagAeqK9y4nfDjPb+hSay12neOeATKbYUFCvVOojwAb?=
=?us-ascii?Q?Q12OvvDsMJHnV6VL5zQ2rfmDyFZyeWx9CFbE5ybSzIXi/tFAMTBQlXIivlAC?=
=?us-ascii?Q?x0E8/b4n2/QomVpRlsRBarB/nZcVpPkShR60nuWhzDozBAFYzNrWPK91j8eJ?=
=?us-ascii?Q?YNsVcM+TpOyLgIKwwrwpvCUwRH0uqu5TlAWPoRaHGOSMhTlsmLan6r7YhVRH?=
=?us-ascii?Q?OtT6i84UWvnsNqcNq5NyCOYqxXPMFDuwrVFMNvkcqCA3Hj8bQQbWOg=3D=3D?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(52116014)(38350700014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?us-ascii?Q?ZFKs1oRyjpLbYKeDERb6XLoHd7oYBq3LNiy81r08oAX8ga3H63l3VGtZhvIS?=
=?us-ascii?Q?WLAX9zEIB3kgrQL7WbLRI0/ZIqHMWf1gztt9pmQp+O0PSsr/QGgGSP2G+kiv?=
=?us-ascii?Q?NpjPtuz9yOc+rHscTO1c9LLXJz/1LKs2WSOtddU0hLA01tWwWZQFftHU3an1?=
=?us-ascii?Q?8VdRQ/3/at0axpApzlR/x4uPkagktgPoK66GkYkUK04lAMRP+jxsonPZ9umt?=
=?us-ascii?Q?IBepL7Go9Mq1cQtm1S85dOzVzwXR2ujD0ajqppZHSIBSYcAp5gWfhNjwWSnp?=
=?us-ascii?Q?yMA7US12THcs42HZ+lpvOVpbFiTR6jeLrCWLRcgaUN5oUKgtOC6VziizrHG4?=
=?us-ascii?Q?Xf770cf3YVw3kfRAZ9Z7u6GNkK796zhyCDJGHW5I+PwM86ZlWpcyuOf9EGyP?=
=?us-ascii?Q?OVRmBOkWHxOe5Q/7kyk196HzE92t9KrfXeOgNG6jXJp3aR2FeZOPqEVTWE8e?=
=?us-ascii?Q?BPbXMoXVWgZkzAkcutWGMUoVi5nAyOjjaGQ1wMwtrZikb0EnI4F55zgj/tyD?=
=?us-ascii?Q?8ryXTiSIVpxKwSqPftgUDVdeOGHSpTdSbY5O28IcC1BKo0ApumWSkt+cysXT?=
=?us-ascii?Q?Fh0OT/nhPUxtF/lRXQh32NRTWW/44kExbCgLNU5GLW9acW2Tpj/NkcGfnd9z?=
=?us-ascii?Q?PQLoNF/nmGb+CTiYohY5+nhW+k81f6dI6knGMlaS8tr/1Rkvf7BPGniQiqY2?=
=?us-ascii?Q?l0MRz47gM6ewsz90XVKFcfIwRMKQawkXDEiHJjoHTyTvhQLm7oMnUk4AEarZ?=
=?us-ascii?Q?VetEoBiT7DuUY0Zn+6il+o0RY49DQUd6IZn4wF+bAWkszFfQEsQdS0a8bw5e?=
=?us-ascii?Q?MfJaqSTCCA9OjaTdEc8VwytKZPqnOAIp3syclQ54tkpq+Tym+RTi4Dh1Bscx?=
=?us-ascii?Q?KvaxVfdLZhVj/u0JccojPeZRLvtjZagfIX62ROOyANdaArI2u/C/xvuGu1ka?=
=?us-ascii?Q?FLuveHyj6ClDE5Z8CFHpYTY/Khb2Bxr35ZRYzVgaZ9/aNY4yj/6GCoMJBejh?=
=?us-ascii?Q?gp4abWSHmzgrVvqo1fdLxyDLUo5/x4Ca3ISqOvylV9hSNvxCNX4IUfrKBxI6?=
=?us-ascii?Q?57470XBNxH2ll1J+7QcJlN6Hbr72gtHxIbGgje9iv9Mp9BCMIT+EBTTYvLjo?=
=?us-ascii?Q?5AIRKtdo81HCB+nnFJhytNn5TtNtAXULdFfdIatxEgq6KWWDV06tGwrKe0UI?=
=?us-ascii?Q?CL1EMVsI0EX3ZCEpZpl8GSEWMZLYvO/wHjEBJAD7Lc3MvUe5z/rUZe2viIjE?=
=?us-ascii?Q?67DDrNLOhTDI8mJq2je9r3dhUvmTOW4kbG6aRNz8lWQDwm8nxRcd23e6vhXU?=
=?us-ascii?Q?KVQMkgQZLpyZjDhT1cW8iEbeWFDREaOlk5kORgrQ9ZafGTpvd1KOlUXqp6Qt?=
=?us-ascii?Q?03xKG7ctbSg4jjHslFHHGj/ysOofzHiE1ruZaElSl9VTod7Jt1pwa0xcbB5c?=
=?us-ascii?Q?lJcCu3Q73TzOxQ4+Ps0by9hBF4Xcz8ia/N/UE8h4+bliVdK9n6lQtLgbC8Fi?=
=?us-ascii?Q?h7hjr8sETJ6rvpmt1znQwnmvs3S+OJhlYDP/bNQ7lRZaaNPl3IyQXRQymUxs?=
=?us-ascii?Q?J5InT7s4WSiqNbcM7Vc=3D?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: ef7d4a8a-ced3-4122-e878-08dd9e05ec96
X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2025 16:37:23.9805
(UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: bOOsa6S+39jHthSURnktK290OOH9q+28sx9GXuuXFb4vIUbDKIfZoe+zyukNDOQfjADkg9ZLjqOhOvaGwVbfZA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR04MB10304
X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,
RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,
RCVD_IN_VALIDITY_RPBL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham
autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lkml.rescloud.iu.edu
According to existed dts arch/arm/boot/dts/armv7-m.dtsi and driver
drivers/irqchip/irq-nvic.c, compatible string should be arm,armv7m-nvic,
Remove unused compatible string arm,v6m-nvic, arm,v7m-nvic and arm,v8m-nvic.
Fix below CHECK_DTB warning:
arch/arm/boot/dts/nxp/vf/vf610m4-cosmic.dtb: /interrupt-controller@e000e100:
failed to match any schema with compatible: ['arm,armv7m-nvic']
Signed-off-by: Frank Li <Frank.Li@xxxxxxx>
---
change in v2:
- fix example interrupt-cells
- commit message add driver information
- remove unused compatible string
---
.../bindings/interrupt-controller/arm,nvic.yaml | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/Documentation/devicetree/bindings/interrupt-controller/arm,nvic.yaml b/Documentation/devicetree/bindings/interrupt-controller/arm,nvic.yaml
index d89eca956c5fa..c0be00b450291 100644
--- a/Documentation/devicetree/bindings/interrupt-controller/arm,nvic.yaml
+++ b/Documentation/devicetree/bindings/interrupt-controller/arm,nvic.yaml
@@ -17,9 +17,7 @@ description:
properties:
compatible:
enum:
- - arm,v6m-nvic
- - arm,v7m-nvic
- - arm,v8m-nvic
+ - arm,armv7m-nvic
reg:
maxItems: 1
@@ -30,10 +28,10 @@ properties:
interrupt-controller: true
'#interrupt-cells':
- const: 2
+ const: 1
description: |
Number of cells to encode an interrupt source:
- first = interrupt number, second = priority.
+ first = interrupt number.
arm,num-irq-priority-bits:
description: Number of priority bits implemented by the SoC
@@ -45,15 +43,14 @@ required:
- reg
- interrupt-controller
- '#interrupt-cells'
- - arm,num-irq-priority-bits
additionalProperties: false
examples:
- |
interrupt-controller@e000e100 {
- compatible = "arm,v7m-nvic";
- #interrupt-cells = <2>;
+ compatible = "arm,armv7m-nvic";
+ #interrupt-cells = <1>;
#address-cells = <0>;
interrupt-controller;
reg = <0xe000e100 0xc00>;
--
2.34.1