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 X-Spam-Level: X-Spam-Status: No, score=-3.3 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E466FC4363A for ; Fri, 23 Oct 2020 18:23:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 73714208FE for ; Fri, 23 Oct 2020 18:23:27 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="key not found in DNS" (0-bit key) header.d=amperemail.onmicrosoft.com header.i=@amperemail.onmicrosoft.com header.b="Q6FgAKaW" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754647AbgJWSX0 (ORCPT ); Fri, 23 Oct 2020 14:23:26 -0400 Received: from mail-eopbgr750112.outbound.protection.outlook.com ([40.107.75.112]:49540 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754637AbgJWSX0 (ORCPT ); Fri, 23 Oct 2020 14:23:26 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KzHwR+SDRrgLInP6lOo+FLL6Rd7McC/CN6tnXjcA62dkNr4G9DVdi6zZ1n9k+qcEXfEGYBELLMVLwAIt0lrXyPc64Hn8pjJKBqG4UYXkX2H000Wzp2m015U8Okc2RtnritiW1itdiNKpUoMkaJpZyYGF28Jmwy3W43Y5Xojt0yN4IRuF36lLskWIhD7c5/LF3iRVAqQnMGnZR9RckkqFVoouzf+1AF31CBFfnc0hUFc2yg2Rl8KY7AJf+M/lS33ETJZ+A0fwk9up5P9/zSl8/1rz1bVSgVhf6XfDJxkEeGYLmWkDKTgcYaVKGTBTx+2e6yc8bv4gqpSrxuRAXSpN7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NvnnOKE/oKsqvbY02iptZ9C93v/99UAbMlLvR1mrwHY=; b=l6xTMxDidhVscztfwAyuMGoPTaKR/n0nJPGCIqfxgnlgQHtNmq6OfaL/ibGSxFhvDjt+jXDVN5DiaFcE5IUNW9m35w1D4gZApfrNBV69sREEh9woiG/IlRVkk+EZPCKTquRiPQiFF2J1CPJH6XSkBQ44t4akC7hRl6UhhF3gtD6UlUehC0zo4K7MI7kMTxIDTQ0wn7J4jhKSmLySus4l0WYkmk4zxh05xXUG/+0NXUGI50+e1HKzbiovHhrKKFOCU3UhYvMrOnb9duiKpVXdopjxaAXGSx4JLaf0BKibpX9hUraPDYJblS7mSxFrZm52igEOIzYoF/PjckzFXkmdmQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=amperemail.onmicrosoft.com; dkim=pass header.d=amperemail.onmicrosoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amperemail.onmicrosoft.com; s=selector1-amperemail-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NvnnOKE/oKsqvbY02iptZ9C93v/99UAbMlLvR1mrwHY=; b=Q6FgAKaWtI3r1msbwp6VEfG5wCHp5a7FqjXUJKsJOzrMWFczfnkLyeIekCxlBuee9nE6xrAKXeaAGjwgVf+BVTsKfQgLqxe1nY9J0l0emFHAdpLq6Wxlq7o7SDU+lCFwQGmYyGQEWmZKAzA4egZ3Y2xftKJBlEKylo0w9V85Uso= Authentication-Results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=amperemail.onmicrosoft.com; Received: from BYAPR01MB4598.prod.exchangelabs.com (2603:10b6:a03:8a::18) by BYAPR01MB5381.prod.exchangelabs.com (2603:10b6:a03:11b::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.21; Fri, 23 Oct 2020 18:23:18 +0000 Received: from BYAPR01MB4598.prod.exchangelabs.com ([fe80::419e:edaf:d4b1:3b29]) by BYAPR01MB4598.prod.exchangelabs.com ([fe80::419e:edaf:d4b1:3b29%4]) with mapi id 15.20.3477.028; Fri, 23 Oct 2020 18:23:18 +0000 Content-Type: text/plain; charset=utf-8 Subject: Re: [PATCH v4] driver/perf: Add PMU driver for the ARM DMC-620 memory controller From: Tuan Phan In-Reply-To: Date: Fri, 23 Oct 2020 11:23:15 -0700 Cc: Tuan Phan , patches@amperecomputing.com, Mark Rutland , Will Deacon , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Transfer-Encoding: quoted-printable Message-Id: <6BC59870-087B-40AB-ABAB-06BFD013EA22@amperemail.onmicrosoft.com> References: <1603235425-29442-1-git-send-email-tuanphan@os.amperecomputing.com> <5c24da3f-4fa3-79ad-0c0d-9b4828ebf684@arm.com> <1EC85DEF-8E0C-42B9-9B01-DA897147B1F7@amperemail.onmicrosoft.com> To: Robin Murphy X-Mailer: Apple Mail (2.3654.0.3.2.82) X-Originating-IP: [73.151.56.145] X-ClientProxiedBy: CY4PR02CA0020.namprd02.prod.outlook.com (2603:10b6:903:18::30) To BYAPR01MB4598.prod.exchangelabs.com (2603:10b6:a03:8a::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [192.168.0.148] (73.151.56.145) by CY4PR02CA0020.namprd02.prod.outlook.com (2603:10b6:903:18::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3499.18 via Frontend Transport; Fri, 23 Oct 2020 18:23:17 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2d26314b-716f-437f-f040-08d87780b6fa X-MS-TrafficTypeDiagnostic: BYAPR01MB5381: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: eQVfg052ssVK8F/qWgD1KPO7fxSAWkcthAQEtyXyHsJZPzN+Pe2Nt3rksZcWfJM0aAoakVvVZEqiER826HScMMIusdYhBw76eL+5tZD7LAVylsdMbbP2xwGzTDdHeUrSoASIFo5tRfhNtF8YraCmQeFoH74jKkhqW3cLh9IXygzjH6p5pUMmcVR8xNo8QEVzNm4ryYokilWas3+b5rSo68aB4himhFyuDqK5AX67YpFmIvlkiutJhqLOpemU53BkWQ7RmWzBoBO88qR85lSXFJJmHXQCcpQ9t6TpFTqbPo/hzEYKtWy/snXKLoqKeg6AtD4eJgToh8CRgIVyJTm5ZA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR01MB4598.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(39850400004)(376002)(346002)(396003)(136003)(33656002)(186003)(478600001)(53546011)(6916009)(6486002)(956004)(42882007)(16526019)(316002)(26005)(5660300002)(4326008)(8936002)(4001150100001)(2906002)(66556008)(2616005)(54906003)(16576012)(52116002)(83380400001)(66476007)(8676002)(66946007)(83170400001);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData: m9yxbuk6ir1eeTlS58qhaEGV4IZ4f/sy+fOfzPsF7u+5/01oaKYvg28tGVIuqFt68xh+v925K1HM3Y+UEGRAbffN81asX9oCvH5g0ugBsZwH6hZNjGe0alH4uKjpU6SdBI5d2VEdJe7I9RYdvEp+lDqGSX75sFGlsO3S7D9orQVQoMwpo+QGBmPTNLPh74j5fmS/11+qSzfCzLqqAgAztqJAR1frdFHjNwN5icavYQdlGYYNWiM+UcCeHpOvR0dT5TAVgHxTtFmfaNCHn1xJp6s/aub9alidw0idLY490vbnDTf84NLfJu4HEJudWMqPaPNx5lSGUssEh2N4J6EqiArVMzcMornhUAnRFh6fhSaBIP+0jY6sqFuVxVsUr/raaPnO/zByoP9Qpjdb+9/AdGkCqtPgXFNTHscTiLaQWGLXQ16NlxdrSwIgNefBGaTzrzCqxC66T5tcsaarlfTLxHrhZUt3sntV5Lw2/TdGlDRbodhTzdbShCP/0Xid0grLEjk9WbZPE3vTk1+qCHeL5fR+CmJ1Yu2E4YhZdfjbW/pxmB6LZQrfIPGMJZIPlS8CSnYdDSlLai6474y0OkWaYkQAlkfqrFbSQelYqwr7MZRQ6+EIRbGaaQLWKPF7mjJMk3gjhPY/662cHQckBOumvw== X-OriginatorOrg: amperemail.onmicrosoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2d26314b-716f-437f-f040-08d87780b6fa X-MS-Exchange-CrossTenant-AuthSource: BYAPR01MB4598.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Oct 2020 18:23:18.5651 (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: 0waB6xmvz3XbwQ2EJ7aRX4gMo5iU1D5BSTd8rrzO8kvRYDkiyuQREBjRRgW4YZ0zkU99R/XVzLX71vYRW03f3LGCT+p9D5tDFnKZFXfVNvo7h6PfcZEymJkkt749HgJd X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR01MB5381 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > On Oct 23, 2020, at 6:43 AM, Robin Murphy wrote: >=20 > On 2020-10-22 22:46, Tuan Phan wrote: > [...] >>>> +#define _ATTR_CFG_GET_FLD(attr, cfg, lo, hi) \ >>>> + ((((attr)->cfg) >> lo) & GENMASK(hi - lo, 0)) >>>=20 >>> As per the buildbot report, GENMASK_ULL() would be appropriate when the= other side is a u64 (although either way this does look a lot like reinven= ting FIELD_GET()...) >> I will add (COMPILE_TEST && 64BIT) to Kconfig so it should fix the build= bot report. >=20 > Huh? The left-hand side of the "&" expression will always be a u64 here, = which is unsigned long long. Regardless of whether an unsigned long on the = right-hand side happens to be the same size, you have a semantic type misma= tch, which is trivial to put right. I can't comprehend why introducing a fa= ke build dependency to hide this would seem like a better idea than making = a tiny change to make the code 100% correct and robust with zero practical = impact :/ >=20 > Sure, you only copied this from the SPE driver; that doesn't mean it was = ever correct, simply that the mismatch was hidden since that driver *is* ti= ghtly coupled to one particular CPU ISA. Got it. Actually after seeing your CMN driver which has (COMPILE_TEST && 64= BIT), I thought the driver should be only tested under 64BIT platform. Any = reason why CMN need 64BIT with COMPILE_TEST? >=20 > [...] >>>> +static irqreturn_t dmc620_pmu_handle_irq(int irq_num, void *data) >>>> +{ >>>> + struct dmc620_pmu_irq *irq =3D data; >>>> + struct dmc620_pmu *dmc620_pmu; >>>> + irqreturn_t ret =3D IRQ_NONE; >>>> + >>>> + rcu_read_lock(); >>>> + list_for_each_entry_rcu(dmc620_pmu, &irq->pmus_node, pmus_node) { >>>> + unsigned long status; >>>> + struct perf_event *event; >>>> + unsigned int idx; >>>> + >>>> + /* >>>> + * HW doesn't provide a control to atomically disable all counters. >>>> + * To prevent race condition, disable all events before continuing >>>> + */ >>>=20 >>> I'm still doubtful that this doesn't introduce more inaccuracy overall = than whatever it's trying to avoid... :/ >> It think it does. By disabling all counters, you make sure overflow stat= us not change at the same time you are clearing >> it(by writing zero) after reading all counters. >=20 > Urgh, *now* I get what the race is - we don't have a proper write-1-to-cl= ear interrupt status register, so however much care we take in writing back= to the overflow register there's always *some* risk of wiping out a new ev= ent when writing back, unless we ensure that no new overflows can occur *be= fore* reading the status. What a horrible piece of hardware design... :( >=20 > Perhaps it's worth expanding the comment a little more, since apparently = it's not super-obvious. I will expand the common more to explain the race condition. >=20 > [...] >>>> + /* >>>> + * We must NOT create groups containing mixed PMUs, although softwar= e >>>> + * events are acceptable. >>>> + */ >>>> + if (event->group_leader->pmu !=3D event->pmu && >>>> + !is_software_event(event->group_leader)) >>>> + return -EINVAL; >>>> + >>>> + for_each_sibling_event(sibling, event->group_leader) { >>>> + if (sibling->pmu !=3D event->pmu && >>>> + !is_software_event(sibling)) >>>> + return -EINVAL; >>>> + } >>>=20 >>> As before, if you can't start, stop, or read multiple counters atomical= ly, you can't really support groups of events for this PMU either. It's imp= ossible to measure accurate ratios with a variable amount of skew between i= ndividual counters. >> Can you elaborate more? The only issue I know is we can=E2=80=99t stop a= ll counters of same PMU atomically in IRQ handler to prevent race condition= . But it can be fixed by manually disable each counter. Other than that, e= very counters are working independently. >=20 > The point of groups is to be able to count two or more events for the exa= ct same time period, in order to measure ratios between them accurately. ->= add, ->del, ->read, etc. are still called one at a time for each event in t= he group, but those calls are made as part of a transaction, which for most= drivers is achieved by perf core calling ->pmu_disable and ->pmu_enable ar= ound the other calls. Since this driver doesn't have enable/disable functio= nality, the individual events will count for different lengths of time depe= nding on what order those calls are made in (which is not necessarily const= ant), and how long each one takes. Thus you'll end up with an indeterminate= amount of error between what each count represents, and the group is not r= eally any more accurate than if the events were simply scheduled independen= tly, which is not how it's supposed to work. >=20 > Come to think of it, you're also not validating that groups are even sche= dulable - try something like: >=20 > perf stat -e '{arm_dmc620_10008c000/clk_cycle_count/,arm_dmc620_10008c00= 0/clk_request/,arm_dmc620_10008c000/clk_upload_stall/}' sleep 5 >=20 > and observe perf core being very confused and unhappy when ->add starts f= ailing for a group that ->event_init said was OK, since 3 events won't actu= ally fit into the 2 available counters. >=20 > As I said before, I think you probably would be able to make groups work = with some careful hooking up of snapshot functionality to ->start_txn and -= >commit_txn, but to start with it'll be an awful lot simpler to just be hon= est and reject them. Got it. Thanks for educating me. I will allow only one HW event then. >=20 > [...] >>>> + name =3D devm_kasprintf(&pdev->dev, GFP_KERNEL, >>>> + "%s_%llx", DMC620_PMUNAME, >>>> + (res->start) >> DMC620_PA_SHIFT); >>>=20 >>> res->start doesn't need parentheses, however I guess it might need cast= ing to u64 to solve the build warning (I'm not sure there's any nicer way, = unfortunately). >> I will remove those parentheses, we don=E2=80=99t need u64 as build warn= ing only applies when it runs compiling test with 32bit. >=20 > As above, deliberately hacking the build for the sake of not fixing clear= ly dodgy code is crazy. The only correct format specifier for an expression= of type phys_addr_t/resource_size_t is "%pa"; if you want to use a differe= nt format then explicitly converting the argument to a type appropriate for= that format (either via a simple cast or an intermediate variable) is indi= sputably correct, regardless of whether you might happen to get away with a= n implicit conversion sometimes. >=20 > The whole point of maximising COMPILE_TEST coverage is to improve code qu= ality in order to avoid this exact situation, wherein someone copies a patt= ern from an existing driver only to discover that it's not actually as robu= st as it should be. Got it. Will fix it Thanks, Tuan. >=20 > Robin. 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 X-Spam-Level: X-Spam-Status: No, score=-3.5 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F177FC4363A for ; Fri, 23 Oct 2020 18:24:45 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5F85E208FE for ; Fri, 23 Oct 2020 18:24:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="pW4hoIei"; dkim=fail reason="key not found in DNS" (0-bit key) header.d=amperemail.onmicrosoft.com header.i=@amperemail.onmicrosoft.com header.b="Q6FgAKaW" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5F85E208FE Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amperemail.onmicrosoft.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:To:References:Message-Id:Date: In-Reply-To:From:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Vm8+gzo0oQ+QFpe3P50xaehxvL+xrYIJwM7PfXG+49Y=; b=pW4hoIeiAcwnBz6Wt7IwCE2xz DDtcYA2NnLcfvmwvlxcmKw3lSF/cI2WZWqRxu1I9JFW4cSvgau1Y4GIh1kOA3u+QoRcgxiUdDRJ9I +YnEUR47OADrgROi3bEvM9OQiZ/lc8CEiNJALop3xp4UjMMvAEfarAc7Mr1ZqBm8coQGGbfSwzAG+ peEgA0ZpkCuQjowXc2vUjnf9rKi+HQpjU5Du6gMGUy9rV8Ob9xOLjeXCZLTo7TXdjpWuoRgZVaeP8 je7deupgNis8qD4MMSoU24QvWfB5CNsNP8dDqAntFW3iuCOFM/I6K3itcNpowGN5Hvc28P59olGGs H3rk48Kww==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kW1iq-00085m-9o; Fri, 23 Oct 2020 18:23:28 +0000 Received: from mail-dm6nam11on2136.outbound.protection.outlook.com ([40.107.223.136] helo=NAM11-DM6-obe.outbound.protection.outlook.com) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kW1il-00084l-Vd for linux-arm-kernel@lists.infradead.org; Fri, 23 Oct 2020 18:23:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KzHwR+SDRrgLInP6lOo+FLL6Rd7McC/CN6tnXjcA62dkNr4G9DVdi6zZ1n9k+qcEXfEGYBELLMVLwAIt0lrXyPc64Hn8pjJKBqG4UYXkX2H000Wzp2m015U8Okc2RtnritiW1itdiNKpUoMkaJpZyYGF28Jmwy3W43Y5Xojt0yN4IRuF36lLskWIhD7c5/LF3iRVAqQnMGnZR9RckkqFVoouzf+1AF31CBFfnc0hUFc2yg2Rl8KY7AJf+M/lS33ETJZ+A0fwk9up5P9/zSl8/1rz1bVSgVhf6XfDJxkEeGYLmWkDKTgcYaVKGTBTx+2e6yc8bv4gqpSrxuRAXSpN7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NvnnOKE/oKsqvbY02iptZ9C93v/99UAbMlLvR1mrwHY=; b=l6xTMxDidhVscztfwAyuMGoPTaKR/n0nJPGCIqfxgnlgQHtNmq6OfaL/ibGSxFhvDjt+jXDVN5DiaFcE5IUNW9m35w1D4gZApfrNBV69sREEh9woiG/IlRVkk+EZPCKTquRiPQiFF2J1CPJH6XSkBQ44t4akC7hRl6UhhF3gtD6UlUehC0zo4K7MI7kMTxIDTQ0wn7J4jhKSmLySus4l0WYkmk4zxh05xXUG/+0NXUGI50+e1HKzbiovHhrKKFOCU3UhYvMrOnb9duiKpVXdopjxaAXGSx4JLaf0BKibpX9hUraPDYJblS7mSxFrZm52igEOIzYoF/PjckzFXkmdmQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=amperemail.onmicrosoft.com; dkim=pass header.d=amperemail.onmicrosoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amperemail.onmicrosoft.com; s=selector1-amperemail-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NvnnOKE/oKsqvbY02iptZ9C93v/99UAbMlLvR1mrwHY=; b=Q6FgAKaWtI3r1msbwp6VEfG5wCHp5a7FqjXUJKsJOzrMWFczfnkLyeIekCxlBuee9nE6xrAKXeaAGjwgVf+BVTsKfQgLqxe1nY9J0l0emFHAdpLq6Wxlq7o7SDU+lCFwQGmYyGQEWmZKAzA4egZ3Y2xftKJBlEKylo0w9V85Uso= Authentication-Results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=amperemail.onmicrosoft.com; Received: from BYAPR01MB4598.prod.exchangelabs.com (2603:10b6:a03:8a::18) by BYAPR01MB5381.prod.exchangelabs.com (2603:10b6:a03:11b::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.21; Fri, 23 Oct 2020 18:23:18 +0000 Received: from BYAPR01MB4598.prod.exchangelabs.com ([fe80::419e:edaf:d4b1:3b29]) by BYAPR01MB4598.prod.exchangelabs.com ([fe80::419e:edaf:d4b1:3b29%4]) with mapi id 15.20.3477.028; Fri, 23 Oct 2020 18:23:18 +0000 Subject: Re: [PATCH v4] driver/perf: Add PMU driver for the ARM DMC-620 memory controller From: Tuan Phan In-Reply-To: Date: Fri, 23 Oct 2020 11:23:15 -0700 Message-Id: <6BC59870-087B-40AB-ABAB-06BFD013EA22@amperemail.onmicrosoft.com> References: <1603235425-29442-1-git-send-email-tuanphan@os.amperecomputing.com> <5c24da3f-4fa3-79ad-0c0d-9b4828ebf684@arm.com> <1EC85DEF-8E0C-42B9-9B01-DA897147B1F7@amperemail.onmicrosoft.com> To: Robin Murphy X-Mailer: Apple Mail (2.3654.0.3.2.82) X-Originating-IP: [73.151.56.145] X-ClientProxiedBy: CY4PR02CA0020.namprd02.prod.outlook.com (2603:10b6:903:18::30) To BYAPR01MB4598.prod.exchangelabs.com (2603:10b6:a03:8a::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [192.168.0.148] (73.151.56.145) by CY4PR02CA0020.namprd02.prod.outlook.com (2603:10b6:903:18::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3499.18 via Frontend Transport; Fri, 23 Oct 2020 18:23:17 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2d26314b-716f-437f-f040-08d87780b6fa X-MS-TrafficTypeDiagnostic: BYAPR01MB5381: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: eQVfg052ssVK8F/qWgD1KPO7fxSAWkcthAQEtyXyHsJZPzN+Pe2Nt3rksZcWfJM0aAoakVvVZEqiER826HScMMIusdYhBw76eL+5tZD7LAVylsdMbbP2xwGzTDdHeUrSoASIFo5tRfhNtF8YraCmQeFoH74jKkhqW3cLh9IXygzjH6p5pUMmcVR8xNo8QEVzNm4ryYokilWas3+b5rSo68aB4himhFyuDqK5AX67YpFmIvlkiutJhqLOpemU53BkWQ7RmWzBoBO88qR85lSXFJJmHXQCcpQ9t6TpFTqbPo/hzEYKtWy/snXKLoqKeg6AtD4eJgToh8CRgIVyJTm5ZA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR01MB4598.prod.exchangelabs.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39850400004)(376002)(346002)(396003)(136003)(33656002)(186003)(478600001)(53546011)(6916009)(6486002)(956004)(42882007)(16526019)(316002)(26005)(5660300002)(4326008)(8936002)(4001150100001)(2906002)(66556008)(2616005)(54906003)(16576012)(52116002)(83380400001)(66476007)(8676002)(66946007)(83170400001); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: m9yxbuk6ir1eeTlS58qhaEGV4IZ4f/sy+fOfzPsF7u+5/01oaKYvg28tGVIuqFt68xh+v925K1HM3Y+UEGRAbffN81asX9oCvH5g0ugBsZwH6hZNjGe0alH4uKjpU6SdBI5d2VEdJe7I9RYdvEp+lDqGSX75sFGlsO3S7D9orQVQoMwpo+QGBmPTNLPh74j5fmS/11+qSzfCzLqqAgAztqJAR1frdFHjNwN5icavYQdlGYYNWiM+UcCeHpOvR0dT5TAVgHxTtFmfaNCHn1xJp6s/aub9alidw0idLY490vbnDTf84NLfJu4HEJudWMqPaPNx5lSGUssEh2N4J6EqiArVMzcMornhUAnRFh6fhSaBIP+0jY6sqFuVxVsUr/raaPnO/zByoP9Qpjdb+9/AdGkCqtPgXFNTHscTiLaQWGLXQ16NlxdrSwIgNefBGaTzrzCqxC66T5tcsaarlfTLxHrhZUt3sntV5Lw2/TdGlDRbodhTzdbShCP/0Xid0grLEjk9WbZPE3vTk1+qCHeL5fR+CmJ1Yu2E4YhZdfjbW/pxmB6LZQrfIPGMJZIPlS8CSnYdDSlLai6474y0OkWaYkQAlkfqrFbSQelYqwr7MZRQ6+EIRbGaaQLWKPF7mjJMk3gjhPY/662cHQckBOumvw== X-OriginatorOrg: amperemail.onmicrosoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2d26314b-716f-437f-f040-08d87780b6fa X-MS-Exchange-CrossTenant-AuthSource: BYAPR01MB4598.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Oct 2020 18:23:18.5651 (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: 0waB6xmvz3XbwQ2EJ7aRX4gMo5iU1D5BSTd8rrzO8kvRYDkiyuQREBjRRgW4YZ0zkU99R/XVzLX71vYRW03f3LGCT+p9D5tDFnKZFXfVNvo7h6PfcZEymJkkt749HgJd X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR01MB5381 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201023_142324_164688_3CAA834C X-CRM114-Status: GOOD ( 25.90 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , Tuan Phan , linux-kernel@vger.kernel.org, patches@amperecomputing.com, Will Deacon , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Cgo+IE9uIE9jdCAyMywgMjAyMCwgYXQgNjo0MyBBTSwgUm9iaW4gTXVycGh5IDxyb2Jpbi5tdXJw aHlAYXJtLmNvbT4gd3JvdGU6Cj4gCj4gT24gMjAyMC0xMC0yMiAyMjo0NiwgVHVhbiBQaGFuIHdy b3RlOgo+IFsuLi5dCj4+Pj4gKyNkZWZpbmUgX0FUVFJfQ0ZHX0dFVF9GTEQoYXR0ciwgY2ZnLCBs bywgaGkpCQkJXAo+Pj4+ICsJKCgoKGF0dHIpLT5jZmcpID4+IGxvKSAmIEdFTk1BU0soaGkgLSBs bywgMCkpCj4+PiAKPj4+IEFzIHBlciB0aGUgYnVpbGRib3QgcmVwb3J0LCBHRU5NQVNLX1VMTCgp IHdvdWxkIGJlIGFwcHJvcHJpYXRlIHdoZW4gdGhlIG90aGVyIHNpZGUgaXMgYSB1NjQgKGFsdGhv dWdoIGVpdGhlciB3YXkgdGhpcyBkb2VzIGxvb2sgYSBsb3QgbGlrZSByZWludmVudGluZyBGSUVM RF9HRVQoKS4uLikKPj4gSSB3aWxsIGFkZCAoQ09NUElMRV9URVNUICYmIDY0QklUKSB0byBLY29u ZmlnIHNvIGl0IHNob3VsZCBmaXggdGhlIGJ1aWxkYm90IHJlcG9ydC4KPiAKPiBIdWg/IFRoZSBs ZWZ0LWhhbmQgc2lkZSBvZiB0aGUgIiYiIGV4cHJlc3Npb24gd2lsbCBhbHdheXMgYmUgYSB1NjQg aGVyZSwgd2hpY2ggaXMgdW5zaWduZWQgbG9uZyBsb25nLiBSZWdhcmRsZXNzIG9mIHdoZXRoZXIg YW4gdW5zaWduZWQgbG9uZyBvbiB0aGUgcmlnaHQtaGFuZCBzaWRlIGhhcHBlbnMgdG8gYmUgdGhl IHNhbWUgc2l6ZSwgeW91IGhhdmUgYSBzZW1hbnRpYyB0eXBlIG1pc21hdGNoLCB3aGljaCBpcyB0 cml2aWFsIHRvIHB1dCByaWdodC4gSSBjYW4ndCBjb21wcmVoZW5kIHdoeSBpbnRyb2R1Y2luZyBh IGZha2UgYnVpbGQgZGVwZW5kZW5jeSB0byBoaWRlIHRoaXMgd291bGQgc2VlbSBsaWtlIGEgYmV0 dGVyIGlkZWEgdGhhbiBtYWtpbmcgYSB0aW55IGNoYW5nZSB0byBtYWtlIHRoZSBjb2RlIDEwMCUg Y29ycmVjdCBhbmQgcm9idXN0IHdpdGggemVybyBwcmFjdGljYWwgaW1wYWN0IDovCj4gCj4gU3Vy ZSwgeW91IG9ubHkgY29waWVkIHRoaXMgZnJvbSB0aGUgU1BFIGRyaXZlcjsgdGhhdCBkb2Vzbid0 IG1lYW4gaXQgd2FzIGV2ZXIgY29ycmVjdCwgc2ltcGx5IHRoYXQgdGhlIG1pc21hdGNoIHdhcyBo aWRkZW4gc2luY2UgdGhhdCBkcml2ZXIgKmlzKiB0aWdodGx5IGNvdXBsZWQgdG8gb25lIHBhcnRp Y3VsYXIgQ1BVIElTQS4KCkdvdCBpdC4gQWN0dWFsbHkgYWZ0ZXIgc2VlaW5nIHlvdXIgQ01OIGRy aXZlciB3aGljaCBoYXMgKENPTVBJTEVfVEVTVCAmJiA2NEJJVCksIEkgdGhvdWdodCB0aGUgZHJp dmVyIHNob3VsZCBiZSBvbmx5IHRlc3RlZCB1bmRlciA2NEJJVCBwbGF0Zm9ybS4gQW55IHJlYXNv biB3aHkgQ01OIG5lZWQgNjRCSVQgd2l0aCBDT01QSUxFX1RFU1Q/Cgo+IAo+IFsuLi5dCj4+Pj4g K3N0YXRpYyBpcnFyZXR1cm5fdCBkbWM2MjBfcG11X2hhbmRsZV9pcnEoaW50IGlycV9udW0sIHZv aWQgKmRhdGEpCj4+Pj4gK3sKPj4+PiArCXN0cnVjdCBkbWM2MjBfcG11X2lycSAqaXJxID0gZGF0 YTsKPj4+PiArCXN0cnVjdCBkbWM2MjBfcG11ICpkbWM2MjBfcG11Owo+Pj4+ICsJaXJxcmV0dXJu X3QgcmV0ID0gSVJRX05PTkU7Cj4+Pj4gKwo+Pj4+ICsJcmN1X3JlYWRfbG9jaygpOwo+Pj4+ICsJ bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZG1jNjIwX3BtdSwgJmlycS0+cG11c19ub2RlLCBwbXVz X25vZGUpIHsKPj4+PiArCQl1bnNpZ25lZCBsb25nIHN0YXR1czsKPj4+PiArCQlzdHJ1Y3QgcGVy Zl9ldmVudCAqZXZlbnQ7Cj4+Pj4gKwkJdW5zaWduZWQgaW50IGlkeDsKPj4+PiArCj4+Pj4gKwkJ LyoKPj4+PiArCQkgKiBIVyBkb2Vzbid0IHByb3ZpZGUgYSBjb250cm9sIHRvIGF0b21pY2FsbHkg ZGlzYWJsZSBhbGwgY291bnRlcnMuCj4+Pj4gKwkJICogVG8gcHJldmVudCByYWNlIGNvbmRpdGlv biwgZGlzYWJsZSBhbGwgZXZlbnRzIGJlZm9yZSBjb250aW51aW5nCj4+Pj4gKwkJICovCj4+PiAK Pj4+IEknbSBzdGlsbCBkb3VidGZ1bCB0aGF0IHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgbW9yZSBp bmFjY3VyYWN5IG92ZXJhbGwgdGhhbiB3aGF0ZXZlciBpdCdzIHRyeWluZyB0byBhdm9pZC4uLiA6 Lwo+PiBJdCB0aGluayBpdCBkb2VzLiBCeSBkaXNhYmxpbmcgYWxsIGNvdW50ZXJzLCB5b3UgbWFr ZSBzdXJlIG92ZXJmbG93IHN0YXR1cyBub3QgY2hhbmdlIGF0IHRoZSBzYW1lIHRpbWUgeW91IGFy ZSBjbGVhcmluZwo+PiBpdChieSB3cml0aW5nIHplcm8pIGFmdGVyIHJlYWRpbmcgYWxsIGNvdW50 ZXJzLgo+IAo+IFVyZ2gsICpub3cqIEkgZ2V0IHdoYXQgdGhlIHJhY2UgaXMgLSB3ZSBkb24ndCBo YXZlIGEgcHJvcGVyIHdyaXRlLTEtdG8tY2xlYXIgaW50ZXJydXB0IHN0YXR1cyByZWdpc3Rlciwg c28gaG93ZXZlciBtdWNoIGNhcmUgd2UgdGFrZSBpbiB3cml0aW5nIGJhY2sgdG8gdGhlIG92ZXJm bG93IHJlZ2lzdGVyIHRoZXJlJ3MgYWx3YXlzICpzb21lKiByaXNrIG9mIHdpcGluZyBvdXQgYSBu ZXcgZXZlbnQgd2hlbiB3cml0aW5nIGJhY2ssIHVubGVzcyB3ZSBlbnN1cmUgdGhhdCBubyBuZXcg b3ZlcmZsb3dzIGNhbiBvY2N1ciAqYmVmb3JlKiByZWFkaW5nIHRoZSBzdGF0dXMuIFdoYXQgYSBo b3JyaWJsZSBwaWVjZSBvZiBoYXJkd2FyZSBkZXNpZ24uLi4gOigKPiAKPiBQZXJoYXBzIGl0J3Mg d29ydGggZXhwYW5kaW5nIHRoZSBjb21tZW50IGEgbGl0dGxlIG1vcmUsIHNpbmNlIGFwcGFyZW50 bHkgaXQncyBub3Qgc3VwZXItb2J2aW91cy4KCkkgd2lsbCBleHBhbmQgdGhlIGNvbW1vbiBtb3Jl IHRvIGV4cGxhaW4gdGhlIHJhY2UgY29uZGl0aW9uLgo+IAo+IFsuLi5dCj4+Pj4gKwkvKgo+Pj4+ ICsJICogV2UgbXVzdCBOT1QgY3JlYXRlIGdyb3VwcyBjb250YWluaW5nIG1peGVkIFBNVXMsIGFs dGhvdWdoIHNvZnR3YXJlCj4+Pj4gKwkgKiBldmVudHMgYXJlIGFjY2VwdGFibGUuCj4+Pj4gKwkg Ki8KPj4+PiArCWlmIChldmVudC0+Z3JvdXBfbGVhZGVyLT5wbXUgIT0gZXZlbnQtPnBtdSAmJgo+ Pj4+ICsJCQkhaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQtPmdyb3VwX2xlYWRlcikpCj4+Pj4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4+Pj4gKwo+Pj4+ICsJZm9yX2VhY2hfc2libGluZ19ldmVudChzaWJs aW5nLCBldmVudC0+Z3JvdXBfbGVhZGVyKSB7Cj4+Pj4gKwkJaWYgKHNpYmxpbmctPnBtdSAhPSBl dmVudC0+cG11ICYmCj4+Pj4gKwkJCQkhaXNfc29mdHdhcmVfZXZlbnQoc2libGluZykpCj4+Pj4g KwkJCXJldHVybiAtRUlOVkFMOwo+Pj4+ICsJfQo+Pj4gCj4+PiBBcyBiZWZvcmUsIGlmIHlvdSBj YW4ndCBzdGFydCwgc3RvcCwgb3IgcmVhZCBtdWx0aXBsZSBjb3VudGVycyBhdG9taWNhbGx5LCB5 b3UgY2FuJ3QgcmVhbGx5IHN1cHBvcnQgZ3JvdXBzIG9mIGV2ZW50cyBmb3IgdGhpcyBQTVUgZWl0 aGVyLiBJdCdzIGltcG9zc2libGUgdG8gbWVhc3VyZSBhY2N1cmF0ZSByYXRpb3Mgd2l0aCBhIHZh cmlhYmxlIGFtb3VudCBvZiBza2V3IGJldHdlZW4gaW5kaXZpZHVhbCBjb3VudGVycy4KPj4gQ2Fu IHlvdSBlbGFib3JhdGUgbW9yZT8gVGhlIG9ubHkgaXNzdWUgSSBrbm93IGlzIHdlIGNhbuKAmXQg c3RvcCBhbGwgY291bnRlcnMgb2Ygc2FtZSBQTVUgYXRvbWljYWxseSBpbiBJUlEgaGFuZGxlciB0 byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uLiAgQnV0IGl0IGNhbiBiZSBmaXhlZCBieSBtYW51YWxs eSBkaXNhYmxlIGVhY2ggY291bnRlci4gT3RoZXIgdGhhbiB0aGF0LCBldmVyeSBjb3VudGVycyBh cmUgd29ya2luZyBpbmRlcGVuZGVudGx5Lgo+IAo+IFRoZSBwb2ludCBvZiBncm91cHMgaXMgdG8g YmUgYWJsZSB0byBjb3VudCB0d28gb3IgbW9yZSBldmVudHMgZm9yIHRoZSBleGFjdCBzYW1lIHRp bWUgcGVyaW9kLCBpbiBvcmRlciB0byBtZWFzdXJlIHJhdGlvcyBiZXR3ZWVuIHRoZW0gYWNjdXJh dGVseS4gLT5hZGQsIC0+ZGVsLCAtPnJlYWQsIGV0Yy4gYXJlIHN0aWxsIGNhbGxlZCBvbmUgYXQg YSB0aW1lIGZvciBlYWNoIGV2ZW50IGluIHRoZSBncm91cCwgYnV0IHRob3NlIGNhbGxzIGFyZSBt YWRlIGFzIHBhcnQgb2YgYSB0cmFuc2FjdGlvbiwgd2hpY2ggZm9yIG1vc3QgZHJpdmVycyBpcyBh Y2hpZXZlZCBieSBwZXJmIGNvcmUgY2FsbGluZyAtPnBtdV9kaXNhYmxlIGFuZCAtPnBtdV9lbmFi bGUgYXJvdW5kIHRoZSBvdGhlciBjYWxscy4gU2luY2UgdGhpcyBkcml2ZXIgZG9lc24ndCBoYXZl IGVuYWJsZS9kaXNhYmxlIGZ1bmN0aW9uYWxpdHksIHRoZSBpbmRpdmlkdWFsIGV2ZW50cyB3aWxs IGNvdW50IGZvciBkaWZmZXJlbnQgbGVuZ3RocyBvZiB0aW1lIGRlcGVuZGluZyBvbiB3aGF0IG9y ZGVyIHRob3NlIGNhbGxzIGFyZSBtYWRlIGluICh3aGljaCBpcyBub3QgbmVjZXNzYXJpbHkgY29u c3RhbnQpLCBhbmQgaG93IGxvbmcgZWFjaCBvbmUgdGFrZXMuIFRodXMgeW91J2xsIGVuZCB1cCB3 aXRoIGFuIGluZGV0ZXJtaW5hdGUgYW1vdW50IG9mIGVycm9yIGJldHdlZW4gd2hhdCBlYWNoIGNv dW50IHJlcHJlc2VudHMsIGFuZCB0aGUgZ3JvdXAgaXMgbm90IHJlYWxseSBhbnkgbW9yZSBhY2N1 cmF0ZSB0aGFuIGlmIHRoZSBldmVudHMgd2VyZSBzaW1wbHkgc2NoZWR1bGVkIGluZGVwZW5kZW50 bHksIHdoaWNoIGlzIG5vdCBob3cgaXQncyBzdXBwb3NlZCB0byB3b3JrLgo+IAo+IENvbWUgdG8g dGhpbmsgb2YgaXQsIHlvdSdyZSBhbHNvIG5vdCB2YWxpZGF0aW5nIHRoYXQgZ3JvdXBzIGFyZSBl dmVuIHNjaGVkdWxhYmxlIC0gdHJ5IHNvbWV0aGluZyBsaWtlOgo+IAo+ICBwZXJmIHN0YXQgLWUg J3thcm1fZG1jNjIwXzEwMDA4YzAwMC9jbGtfY3ljbGVfY291bnQvLGFybV9kbWM2MjBfMTAwMDhj MDAwL2Nsa19yZXF1ZXN0Lyxhcm1fZG1jNjIwXzEwMDA4YzAwMC9jbGtfdXBsb2FkX3N0YWxsL30n IHNsZWVwIDUKPiAKPiBhbmQgb2JzZXJ2ZSBwZXJmIGNvcmUgYmVpbmcgdmVyeSBjb25mdXNlZCBh bmQgdW5oYXBweSB3aGVuIC0+YWRkIHN0YXJ0cyBmYWlsaW5nIGZvciBhIGdyb3VwIHRoYXQgLT5l dmVudF9pbml0IHNhaWQgd2FzIE9LLCBzaW5jZSAzIGV2ZW50cyB3b24ndCBhY3R1YWxseSBmaXQg aW50byB0aGUgMiBhdmFpbGFibGUgY291bnRlcnMuCj4gCj4gQXMgSSBzYWlkIGJlZm9yZSwgSSB0 aGluayB5b3UgcHJvYmFibHkgd291bGQgYmUgYWJsZSB0byBtYWtlIGdyb3VwcyB3b3JrIHdpdGgg c29tZSBjYXJlZnVsIGhvb2tpbmcgdXAgb2Ygc25hcHNob3QgZnVuY3Rpb25hbGl0eSB0byAtPnN0 YXJ0X3R4biBhbmQgLT5jb21taXRfdHhuLCBidXQgdG8gc3RhcnQgd2l0aCBpdCdsbCBiZSBhbiBh d2Z1bCBsb3Qgc2ltcGxlciB0byBqdXN0IGJlIGhvbmVzdCBhbmQgcmVqZWN0IHRoZW0uCgpHb3Qg aXQuIFRoYW5rcyBmb3IgZWR1Y2F0aW5nIG1lLiBJIHdpbGwgYWxsb3cgb25seSBvbmUgSFcgZXZl bnQgdGhlbi4KPiAKPiBbLi4uXQo+Pj4+ICsJbmFtZSA9IGRldm1fa2FzcHJpbnRmKCZwZGV2LT5k ZXYsIEdGUF9LRVJORUwsCj4+Pj4gKwkJCQkgICIlc18lbGx4IiwgRE1DNjIwX1BNVU5BTUUsCj4+ Pj4gKwkJCQkgIChyZXMtPnN0YXJ0KSA+PiBETUM2MjBfUEFfU0hJRlQpOwo+Pj4gCj4+PiByZXMt PnN0YXJ0IGRvZXNuJ3QgbmVlZCBwYXJlbnRoZXNlcywgaG93ZXZlciBJIGd1ZXNzIGl0IG1pZ2h0 IG5lZWQgY2FzdGluZyB0byB1NjQgdG8gc29sdmUgdGhlIGJ1aWxkIHdhcm5pbmcgKEknbSBub3Qg c3VyZSB0aGVyZSdzIGFueSBuaWNlciB3YXksIHVuZm9ydHVuYXRlbHkpLgo+PiBJIHdpbGwgcmVt b3ZlIHRob3NlIHBhcmVudGhlc2VzLCB3ZSBkb27igJl0IG5lZWQgdTY0IGFzIGJ1aWxkIHdhcm5p bmcgb25seSBhcHBsaWVzIHdoZW4gaXQgcnVucyBjb21waWxpbmcgdGVzdCB3aXRoIDMyYml0Lgo+ IAo+IEFzIGFib3ZlLCBkZWxpYmVyYXRlbHkgaGFja2luZyB0aGUgYnVpbGQgZm9yIHRoZSBzYWtl IG9mIG5vdCBmaXhpbmcgY2xlYXJseSBkb2RneSBjb2RlIGlzIGNyYXp5LiBUaGUgb25seSBjb3Jy ZWN0IGZvcm1hdCBzcGVjaWZpZXIgZm9yIGFuIGV4cHJlc3Npb24gb2YgdHlwZSBwaHlzX2FkZHJf dC9yZXNvdXJjZV9zaXplX3QgaXMgIiVwYSI7IGlmIHlvdSB3YW50IHRvIHVzZSBhIGRpZmZlcmVu dCBmb3JtYXQgdGhlbiBleHBsaWNpdGx5IGNvbnZlcnRpbmcgdGhlIGFyZ3VtZW50IHRvIGEgdHlw ZSBhcHByb3ByaWF0ZSBmb3IgdGhhdCBmb3JtYXQgKGVpdGhlciB2aWEgYSBzaW1wbGUgY2FzdCBv ciBhbiBpbnRlcm1lZGlhdGUgdmFyaWFibGUpIGlzIGluZGlzcHV0YWJseSBjb3JyZWN0LCByZWdh cmRsZXNzIG9mIHdoZXRoZXIgeW91IG1pZ2h0IGhhcHBlbiB0byBnZXQgYXdheSB3aXRoIGFuIGlt cGxpY2l0IGNvbnZlcnNpb24gc29tZXRpbWVzLgo+IAo+IFRoZSB3aG9sZSBwb2ludCBvZiBtYXhp bWlzaW5nIENPTVBJTEVfVEVTVCBjb3ZlcmFnZSBpcyB0byBpbXByb3ZlIGNvZGUgcXVhbGl0eSBp biBvcmRlciB0byBhdm9pZCB0aGlzIGV4YWN0IHNpdHVhdGlvbiwgd2hlcmVpbiBzb21lb25lIGNv cGllcyBhIHBhdHRlcm4gZnJvbSBhbiBleGlzdGluZyBkcml2ZXIgb25seSB0byBkaXNjb3ZlciB0 aGF0IGl0J3Mgbm90IGFjdHVhbGx5IGFzIHJvYnVzdCBhcyBpdCBzaG91bGQgYmUuCgpHb3QgaXQu IFdpbGwgZml4IGl0CgpUaGFua3MsClR1YW4uCgo+IAo+IFJvYmluLgoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGlu ZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK