From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BBFE54D794B for ; Wed, 16 Sep 2026 15:52:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789573961; cv=none; b=EE4kJeJlxPgJF7iEsaqZ/J3KEKI+tCZ4trMYvHoCpGI+y8X9fUlfdhW2v6tQT7+eyouINp1Ckdhv3K1WuVR2WUeHku0oBtDLxrYNLAoQ5/ZgyxKafmBAEvtfoB2Csc8dSXMbGOJaEVBb/y1ay73PsIGu6TiwUTThNtyMnxat+Yg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789573961; c=relaxed/simple; bh=fOAspE1CTdKey+KPov10VSHTd4hdQHWIHpj/EbyfoNE=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=oKOLKMfGuEb1Zb66GvlyYEU2xnlviwouyTD5iXUjUU1G+JrMFbABuTq+SBSBCUUl5GTDDA3LRs+VwGM7Iuf3FcYXPR2qQ07n4YhKN++rmAr7o6eFqfpe1JdEyEozlpRnjhhyvRYkvyfhlSeNABg/ChLHllX/ulZOv6LUr9gd9Qc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VjWFbOQu; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="VjWFbOQu" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 06ECC1F000FF; Wed, 16 Sep 2026 15:52:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789573959; bh=p6JLHCg3/+VxrjTUSCA53JBCA/2IquWEQoLTEkkv7vA=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=VjWFbOQu4Ujr6dkRXTZP1aqZm0HFYfDQDIeRBiAfesCFxhxJ58QbnMl+uUcGquaFQ CDHKqXa640HNzv6jphuzXDqJU+TrB1PpDIpqQRhxqd0P434uEWRa02WQLRPFvq8IL/ 15xKPzn1s1oq7wLmAJtiasd26OQW1at5MmPSE8vUCJOE6EL/UV8itoIx4aYBFSALsc mbTYLNcLfUf9Pk3x6eU+v7jc1tWmoulM1vnrYWGpEBcf4NmXaBDu8sNFwODBKRuD4p swZjPSOY6Qe16C9wo6pgcm+eOvwz+zKigkU7O8hZD1ckXGogqtEHOZd7sj4K1bMhLJ 6DCTkXwXsS/ZQ== From: sashiko-bot@kernel.org Subject: Re: [PATCH v9 1/3] PCI: Match the hierarchy's MPS to a device's MPSS as necessary Reply-To: sashiko-reviews@lists.linux.dev To: "Hans Zhang" <18255117159@163.com> Cc: neil.armstrong@linaro.org, linux-amlogic@lists.infradead.org, linux-pci@vger.kernel.org In-Reply-To: <20260916153907.60344-2-18255117159@163.com> References: <20260916153907.60344-1-18255117159@163.com> <20260916153907.60344-2-18255117159@163.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Wed, 16 Sep 2026 15:52:38 +0000 Message-Id: <20260916155239.06ECC1F000FF@smtp.kernel.org> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Thank you for your contribution! Sashiko AI review found 3 potential issue(= s) to consider: - [Critical] pci: pci_walk_bus() modifies MPS of active devices causing Mal= formed TLPs - [High] pci: dynamically modified MPS in pcie_set_mps() is lost on system = resume - [High] pci: unlocked RMW of PCI_EXP_DEVCTL in pcie_set_mps() causes data = races -- commit 5af1f52d57f95fe2335fa9124a2d504949bbc917 Author: Hans Zhang <18255117159@163.com> PCI: Match the hierarchy's MPS to a device's MPSS as necessary When a device's MPSS is too small to match the upstream bridge,=20 pci_configure_mps() now walks the hierarchy from the Root Port down and reduces every device that is above the new value to avoid Malformed TLPs on Switch egress ports. > diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c > index 27008e2ea5afc..232bce2819f06 100644 > --- a/drivers/pci/probe.c > +++ b/drivers/pci/probe.c > @@ -2200,9 +2200,28 @@ int pci_setup_device(struct pci_dev *dev) > return 0; > } > =20 > +static int pcie_reduce_mps(struct pci_dev *dev, void *data) > +{ > + int mps =3D *(int *)data; > + int ret; > + > + /* MPS is of type 'RsvdP' for VFs */ > + if (!pci_is_pcie(dev) || dev->is_virtfn) > + return 0; > + > + if (pcie_get_mps(dev) > mps) { > + ret =3D pcie_set_mps(dev, mps); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [Severity: High] Does bypassing the PM software save state here cause the dynamically modifi= ed MPS to be lost on system resume? If the sibling driver previously called pci_save_state() during its probe, dev->state_saved becomes true. During the next suspend, the PM core skips saving the new hardware state. On resume, the old, larger MPS would be restored, potentially desynchronizing the hierarchy. [Severity: High] Also, does modifying the hardware MPS of active third-party endpoints using an unlocked Read-Modify-Write of PCI_EXP_DEVCTL cause data races? pcie_set_mps() performs an unlocked RMW of PCI_EXP_DEVCTL. If the sibling driver or userspace (via VFIO) modifies the same register concurrently (e.g., via pcie_set_readrq()), could it corrupt the configuration state of active endpoints? > + if (ret) > + dev_warn(&dev->dev, "failed to set MPS\n"); > + } > + > + return 0; > +} > + > static void pci_configure_mps(struct pci_dev *dev) > { > struct pci_dev *bridge =3D pci_upstream_bridge(dev); [ ... ] > @@ -2252,10 +2271,21 @@ static void pci_configure_mps(struct pci_dev *dev) > return; > =20 > mpss =3D 128 << dev->pcie_mpss; > - if (mpss < p_mps && pci_pcie_type(bridge) =3D=3D PCI_EXP_TYPE_ROOT_PORT= ) { > - pcie_set_mps(bridge, mpss); > - pci_info(dev, "Upstream bridge's Max Payload Size set to %d (was %d, m= ax %d)\n", > - mpss, p_mps, 128 << bridge->pcie_mpss); > + rp =3D pcie_find_root_port(bridge); > + if (mpss < p_mps && rp) { > + /* > + * dev cannot be programmed to the MPS already in use above > + * it, so reduce the hierarchy to what dev supports. A Switch > + * may not repackage TLPs, so reducing only the upstream > + * bridge is not enough: every port up to the Root Port has to > + * come down as well, and so do the devices already programmed > + * below that Root Port, which would otherwise be left sending > + * TLPs too large for their egress port. > + */ > + pcie_reduce_mps(rp, &mpss); > + pci_walk_bus(rp->subordinate, pcie_reduce_mps, &mpss); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [Severity: Critical] Does unconditionally walking the bus and dynamically reducing the MPS of ac= tive siblings cause Malformed TLPs? PCIe specifications prohibit changing MPS while a device is active. Active devices will continue generating TLPs based on their driver's internal state (or previously negotiated packet sizes). When these larger TLPs hit the dynamically reduced upstream bridge, won't they be dropped as Malformed TLPs, potentially leading to a system crash or bus reset? > + pci_info(dev, "Max Payload Size of %s hierarchy set to %d (was %d)\n", > + pci_name(rp), mpss, p_mps); > p_mps =3D pcie_get_mps(bridge); > } --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260916153907.6034= 4-1-18255117159@163.com?part=3D1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E6D4EC982C9 for ; Wed, 16 Sep 2026 15:52:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Message-Id:Date: References:In-Reply-To:Cc:To:Subject:From:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=iBCWt52niKG2qux5yOO37szBdEocLr4O5i+o7ryg5+Q=; b=cm7MtpTMYSHv0k wTLavN3XcxGa217/hCOoz+Z5oSNUXhuBnqPYk9b75pF0zUoLPHxzARWHVeMXijiVaBihp7/V5Prnu CD86wxe6WSSTOVPZTblI7u43L+trt1B1gzyRvxrCuqXv5wwQaijxvmNqgCmWBy7WCsA1C8/vsmOjo ZluXjA/CX4OSfR2CfGRbTirXIrgb+CjUEVbF45SaVmqcZfvmGA8S7YncstWyO523Z9eEEybZR2ZTT dLvleuhGsVyPhS1CNvhZ/gpN8VFe4c6ItNBPKbiNkgtEMs8H1gvNpza0yh6f/ngxxla/9QAaiZ+ZI XFpNxz5UqELuEvzjt6AA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x6rw8-00000009eB0-0skR; Wed, 16 Sep 2026 15:52:40 +0000 Received: from sea.source.kernel.org ([172.234.252.31]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x6rw7-00000009eAf-3QmG for linux-amlogic@lists.infradead.org; Wed, 16 Sep 2026 15:52:39 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 5AD804372E; Wed, 16 Sep 2026 15:52:39 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 06ECC1F000FF; Wed, 16 Sep 2026 15:52:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789573959; bh=p6JLHCg3/+VxrjTUSCA53JBCA/2IquWEQoLTEkkv7vA=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=VjWFbOQu4Ujr6dkRXTZP1aqZm0HFYfDQDIeRBiAfesCFxhxJ58QbnMl+uUcGquaFQ CDHKqXa640HNzv6jphuzXDqJU+TrB1PpDIpqQRhxqd0P434uEWRa02WQLRPFvq8IL/ 15xKPzn1s1oq7wLmAJtiasd26OQW1at5MmPSE8vUCJOE6EL/UV8itoIx4aYBFSALsc mbTYLNcLfUf9Pk3x6eU+v7jc1tWmoulM1vnrYWGpEBcf4NmXaBDu8sNFwODBKRuD4p swZjPSOY6Qe16C9wo6pgcm+eOvwz+zKigkU7O8hZD1ckXGogqtEHOZd7sj4K1bMhLJ 6DCTkXwXsS/ZQ== From: sashiko-bot@kernel.org Subject: Re: [PATCH v9 1/3] PCI: Match the hierarchy's MPS to a device's MPSS as necessary To: "Hans Zhang" <18255117159@163.com> Cc: neil.armstrong@linaro.org, linux-amlogic@lists.infradead.org, linux-pci@vger.kernel.org In-Reply-To: <20260916153907.60344-2-18255117159@163.com> References: <20260916153907.60344-1-18255117159@163.com> <20260916153907.60344-2-18255117159@163.com> Date: Wed, 16 Sep 2026 15:52:38 +0000 Message-Id: <20260916155239.06ECC1F000FF@smtp.kernel.org> X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MyBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0NyaXRpY2FsXSBwY2k6IHBjaV93 YWxrX2J1cygpIG1vZGlmaWVzIE1QUyBvZiBhY3RpdmUgZGV2aWNlcyBjYXVzaW5nIE1hbGZvcm1l ZCBUTFBzCi0gW0hpZ2hdIHBjaTogZHluYW1pY2FsbHkgbW9kaWZpZWQgTVBTIGluIHBjaWVfc2V0 X21wcygpIGlzIGxvc3Qgb24gc3lzdGVtIHJlc3VtZQotIFtIaWdoXSBwY2k6IHVubG9ja2VkIFJN VyBvZiBQQ0lfRVhQX0RFVkNUTCBpbiBwY2llX3NldF9tcHMoKSBjYXVzZXMgZGF0YSByYWNlcwot LQoKY29tbWl0IDVhZjFmNTJkNTdmOTVmZTIzMzVmYTkxMjRhMmQ1MDQ5NDliYmM5MTcKQXV0aG9y OiBIYW5zIFpoYW5nIDwxODI1NTExNzE1OUAxNjMuY29tPgoKUENJOiBNYXRjaCB0aGUgaGllcmFy Y2h5J3MgTVBTIHRvIGEgZGV2aWNlJ3MgTVBTUyBhcyBuZWNlc3NhcnkKCldoZW4gYSBkZXZpY2Un cyBNUFNTIGlzIHRvbyBzbWFsbCB0byBtYXRjaCB0aGUgdXBzdHJlYW0gYnJpZGdlLCAKcGNpX2Nv bmZpZ3VyZV9tcHMoKSBub3cgd2Fsa3MgdGhlIGhpZXJhcmNoeSBmcm9tIHRoZSBSb290IFBvcnQg ZG93bgphbmQgcmVkdWNlcyBldmVyeSBkZXZpY2UgdGhhdCBpcyBhYm92ZSB0aGUgbmV3IHZhbHVl IHRvIGF2b2lkCk1hbGZvcm1lZCBUTFBzIG9uIFN3aXRjaCBlZ3Jlc3MgcG9ydHMuCgo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL3BjaS9wcm9iZS5jIGIvZHJpdmVycy9wY2kvcHJvYmUuYwo+IGluZGV4 IDI3MDA4ZTJlYTVhZmMuLjIzMmJjZTI4MTlmMDYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9wY2kv cHJvYmUuYwo+ICsrKyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKPiBAQCAtMjIwMCw5ICsyMjAwLDI4 IEBAIGludCBwY2lfc2V0dXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCj4gIAlyZXR1cm4g MDsKPiAgfQo+ICAKPiArc3RhdGljIGludCBwY2llX3JlZHVjZV9tcHMoc3RydWN0IHBjaV9kZXYg KmRldiwgdm9pZCAqZGF0YSkKPiArewo+ICsJaW50IG1wcyA9ICooaW50ICopZGF0YTsKPiArCWlu dCByZXQ7Cj4gKwo+ICsJLyogTVBTIGlzIG9mIHR5cGUgJ1JzdmRQJyBmb3IgVkZzICovCj4gKwlp ZiAoIXBjaV9pc19wY2llKGRldikgfHwgZGV2LT5pc192aXJ0Zm4pCj4gKwkJcmV0dXJuIDA7Cj4g Kwo+ICsJaWYgKHBjaWVfZ2V0X21wcyhkZXYpID4gbXBzKSB7Cj4gKwkJcmV0ID0gcGNpZV9zZXRf bXBzKGRldiwgbXBzKTsKICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5e Xl5eCltTZXZlcml0eTogSGlnaF0KRG9lcyBieXBhc3NpbmcgdGhlIFBNIHNvZnR3YXJlIHNhdmUg c3RhdGUgaGVyZSBjYXVzZSB0aGUgZHluYW1pY2FsbHkgbW9kaWZpZWQKTVBTIHRvIGJlIGxvc3Qg b24gc3lzdGVtIHJlc3VtZT8KCklmIHRoZSBzaWJsaW5nIGRyaXZlciBwcmV2aW91c2x5IGNhbGxl ZCBwY2lfc2F2ZV9zdGF0ZSgpIGR1cmluZyBpdHMgcHJvYmUsCmRldi0+c3RhdGVfc2F2ZWQgYmVj b21lcyB0cnVlLiBEdXJpbmcgdGhlIG5leHQgc3VzcGVuZCwgdGhlIFBNIGNvcmUgc2tpcHMKc2F2 aW5nIHRoZSBuZXcgaGFyZHdhcmUgc3RhdGUuIE9uIHJlc3VtZSwgdGhlIG9sZCwgbGFyZ2VyIE1Q UyB3b3VsZCBiZQpyZXN0b3JlZCwgcG90ZW50aWFsbHkgZGVzeW5jaHJvbml6aW5nIHRoZSBoaWVy YXJjaHkuCgpbU2V2ZXJpdHk6IEhpZ2hdCkFsc28sIGRvZXMgbW9kaWZ5aW5nIHRoZSBoYXJkd2Fy ZSBNUFMgb2YgYWN0aXZlIHRoaXJkLXBhcnR5IGVuZHBvaW50cyB1c2luZwphbiB1bmxvY2tlZCBS ZWFkLU1vZGlmeS1Xcml0ZSBvZiBQQ0lfRVhQX0RFVkNUTCBjYXVzZSBkYXRhIHJhY2VzPwoKcGNp ZV9zZXRfbXBzKCkgcGVyZm9ybXMgYW4gdW5sb2NrZWQgUk1XIG9mIFBDSV9FWFBfREVWQ1RMLiBJ ZiB0aGUgc2libGluZwpkcml2ZXIgb3IgdXNlcnNwYWNlICh2aWEgVkZJTykgbW9kaWZpZXMgdGhl IHNhbWUgcmVnaXN0ZXIgY29uY3VycmVudGx5CihlLmcuLCB2aWEgcGNpZV9zZXRfcmVhZHJxKCkp LCBjb3VsZCBpdCBjb3JydXB0IHRoZSBjb25maWd1cmF0aW9uIHN0YXRlIG9mCmFjdGl2ZSBlbmRw b2ludHM/Cgo+ICsJCWlmIChyZXQpCj4gKwkJCWRldl93YXJuKCZkZXYtPmRldiwgImZhaWxlZCB0 byBzZXQgTVBTXG4iKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAgc3RhdGlj IHZvaWQgcGNpX2NvbmZpZ3VyZV9tcHMoc3RydWN0IHBjaV9kZXYgKmRldikKPiAgewo+ICAJc3Ry dWN0IHBjaV9kZXYgKmJyaWRnZSA9IHBjaV91cHN0cmVhbV9icmlkZ2UoZGV2KTsKClsgLi4uIF0K Cj4gQEAgLTIyNTIsMTAgKzIyNzEsMjEgQEAgc3RhdGljIHZvaWQgcGNpX2NvbmZpZ3VyZV9tcHMo c3RydWN0IHBjaV9kZXYgKmRldikKPiAgCQlyZXR1cm47Cj4gIAo+ICAJbXBzcyA9IDEyOCA8PCBk ZXYtPnBjaWVfbXBzczsKPiAtCWlmIChtcHNzIDwgcF9tcHMgJiYgcGNpX3BjaWVfdHlwZShicmlk Z2UpID09IFBDSV9FWFBfVFlQRV9ST09UX1BPUlQpIHsKPiAtCQlwY2llX3NldF9tcHMoYnJpZGdl LCBtcHNzKTsKPiAtCQlwY2lfaW5mbyhkZXYsICJVcHN0cmVhbSBicmlkZ2UncyBNYXggUGF5bG9h ZCBTaXplIHNldCB0byAlZCAod2FzICVkLCBtYXggJWQpXG4iLAo+IC0JCQkgbXBzcywgcF9tcHMs IDEyOCA8PCBicmlkZ2UtPnBjaWVfbXBzcyk7Cj4gKwlycCA9IHBjaWVfZmluZF9yb290X3BvcnQo YnJpZGdlKTsKPiArCWlmIChtcHNzIDwgcF9tcHMgJiYgcnApIHsKPiArCQkvKgo+ICsJCSAqIGRl diBjYW5ub3QgYmUgcHJvZ3JhbW1lZCB0byB0aGUgTVBTIGFscmVhZHkgaW4gdXNlIGFib3ZlCj4g KwkJICogaXQsIHNvIHJlZHVjZSB0aGUgaGllcmFyY2h5IHRvIHdoYXQgZGV2IHN1cHBvcnRzLiAg QSBTd2l0Y2gKPiArCQkgKiBtYXkgbm90IHJlcGFja2FnZSBUTFBzLCBzbyByZWR1Y2luZyBvbmx5 IHRoZSB1cHN0cmVhbQo+ICsJCSAqIGJyaWRnZSBpcyBub3QgZW5vdWdoOiBldmVyeSBwb3J0IHVw IHRvIHRoZSBSb290IFBvcnQgaGFzIHRvCj4gKwkJICogY29tZSBkb3duIGFzIHdlbGwsIGFuZCBz byBkbyB0aGUgZGV2aWNlcyBhbHJlYWR5IHByb2dyYW1tZWQKPiArCQkgKiBiZWxvdyB0aGF0IFJv b3QgUG9ydCwgd2hpY2ggd291bGQgb3RoZXJ3aXNlIGJlIGxlZnQgc2VuZGluZwo+ICsJCSAqIFRM UHMgdG9vIGxhcmdlIGZvciB0aGVpciBlZ3Jlc3MgcG9ydC4KPiArCQkgKi8KPiArCQlwY2llX3Jl ZHVjZV9tcHMocnAsICZtcHNzKTsKPiArCQlwY2lfd2Fsa19idXMocnAtPnN1Ym9yZGluYXRlLCBw Y2llX3JlZHVjZV9tcHMsICZtcHNzKTsKICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5e Xl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KW1NldmVyaXR5OiBDcml0aWNh bF0KRG9lcyB1bmNvbmRpdGlvbmFsbHkgd2Fsa2luZyB0aGUgYnVzIGFuZCBkeW5hbWljYWxseSBy ZWR1Y2luZyB0aGUgTVBTIG9mIGFjdGl2ZQpzaWJsaW5ncyBjYXVzZSBNYWxmb3JtZWQgVExQcz8K ClBDSWUgc3BlY2lmaWNhdGlvbnMgcHJvaGliaXQgY2hhbmdpbmcgTVBTIHdoaWxlIGEgZGV2aWNl IGlzIGFjdGl2ZS4gQWN0aXZlCmRldmljZXMgd2lsbCBjb250aW51ZSBnZW5lcmF0aW5nIFRMUHMg YmFzZWQgb24gdGhlaXIgZHJpdmVyJ3MgaW50ZXJuYWwgc3RhdGUKKG9yIHByZXZpb3VzbHkgbmVn b3RpYXRlZCBwYWNrZXQgc2l6ZXMpLiBXaGVuIHRoZXNlIGxhcmdlciBUTFBzIGhpdCB0aGUKZHlu YW1pY2FsbHkgcmVkdWNlZCB1cHN0cmVhbSBicmlkZ2UsIHdvbid0IHRoZXkgYmUgZHJvcHBlZCBh cyBNYWxmb3JtZWQKVExQcywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIHN5c3RlbSBjcmFzaCBv ciBidXMgcmVzZXQ/Cgo+ICsJCXBjaV9pbmZvKGRldiwgIk1heCBQYXlsb2FkIFNpemUgb2YgJXMg aGllcmFyY2h5IHNldCB0byAlZCAod2FzICVkKVxuIiwKPiArCQkJIHBjaV9uYW1lKHJwKSwgbXBz cywgcF9tcHMpOwo+ICAJCXBfbXBzID0gcGNpZV9nZXRfbXBzKGJyaWRnZSk7Cj4gIAl9CgotLSAK U2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0LzIwMjYw OTE2MTUzOTA3LjYwMzQ0LTEtMTgyNTUxMTcxNTlAMTYzLmNvbT9wYXJ0PTEKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFtbG9naWMgbWFpbGlu ZyBsaXN0CmxpbnV4LWFtbG9naWNAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5m cmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFtbG9naWMK