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=-10.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=unavailable 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 A1B76C433E4 for ; Fri, 17 Jul 2020 11:02:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 74D2F20768 for ; Fri, 17 Jul 2020 11:02:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1594983767; bh=bbLMObkNrniR80ZdzHzteBsWJ5zcpRCBrOI2j6GQ4W0=; h=Date:From:To:Cc:Subject:In-Reply-To:References:List-ID:From; b=Pyk79y48BJyb3/csv1+2AzkCfvtyauyxnP3PEnChYrNXs8Nkg1YXLuqKnKt8hO/4/ XWO4puRRgf+acwWath3SrK5lX6Ff4LSIJiAi42rYgoptyYpV/Zj/MeF53PhnZ7DqFf xgOqzoySb+/Q6winbq2WwF+3VnuYJrEhdjjtl2lI= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726200AbgGQLCn (ORCPT ); Fri, 17 Jul 2020 07:02:43 -0400 Received: from mail.kernel.org ([198.145.29.99]:55164 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725932AbgGQLCm (ORCPT ); Fri, 17 Jul 2020 07:02:42 -0400 Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id CF84D20717; Fri, 17 Jul 2020 11:02:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1594983761; bh=bbLMObkNrniR80ZdzHzteBsWJ5zcpRCBrOI2j6GQ4W0=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=dqzm/OI6mZOxyuUKPJ7jFTK+TsDEjToHh/tLOy9xUBQ0ukZBFD8kQt8fFOxEk03fW BwU1AfbENm2NKpfpqLKq+ks8pBss9yT0+cwgjABMePaatnRza0S8ZMUDZPZknMAAlL 3TXECbw7eZtO0cuZCTRvKCVwNpJnABIlFHvSRfbE= Received: from 78.163-31-62.static.virginmediabusiness.co.uk ([62.31.163.78] helo=wait-a-minute.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jwO8V-00CbW3-DI; Fri, 17 Jul 2020 12:02:39 +0100 Date: Fri, 17 Jul 2020 12:02:38 +0100 Message-ID: <87imemxv3l.wl-maz@kernel.org> From: Marc Zyngier To: Suman Anna Cc: Grzegorz Jaszczyk , , , , , , , , , , Subject: Re: [PATCHv3 3/6] irqchip/irq-pruss-intc: Add support for shared and invalid interrupts In-Reply-To: <3a73bb14-9f7b-970d-fbae-f9c7bb7bdf1e@ti.com> References: <1593699479-1445-1-git-send-email-grzegorz.jaszczyk@linaro.org> <1593699479-1445-4-git-send-email-grzegorz.jaszczyk@linaro.org> <2a6b0391f1395eb0aa15ffee6769184e@kernel.org> <3a73bb14-9f7b-970d-fbae-f9c7bb7bdf1e@ti.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.8 EasyPG/1.0.0 Emacs/26.3 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 62.31.163.78 X-SA-Exim-Rcpt-To: s-anna@ti.com, grzegorz.jaszczyk@linaro.org, tglx@linutronix.de, jason@lakedaemon.net, robh+dt@kernel.org, lee.jones@linaro.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, david@lechnology.com, wmills@ti.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org On Fri, 10 Jul 2020 21:59:17 +0100, Suman Anna wrote: Hi Suman, [...] > > Hi Marc, >=20 > On 7/2/20 12:44 PM, Marc Zyngier wrote: > > On 2020-07-02 15:17, Grzegorz Jaszczyk wrote: > >> From: Suman Anna > >>=20 > >> The PRUSS INTC has a fixed number of output interrupt lines that are > >> connected to a number of processors or other PRUSS instances or other > >> devices (like DMA) on the SoC. The output interrupt lines 2 through 9 > >> are usually connected to the main Arm host processor and are referred > >> to as host interrupts 0 through 7 from ARM/MPU perspective. > >>=20 > >> All of these 8 host interrupts are not always exclusively connected > >> to the Arm interrupt controller. Some SoCs have some interrupt lines > >> not connected to the Arm interrupt controller at all, while a few othe= rs > >> have the interrupt lines connected to multiple processors in which they > >> need to be partitioned as per SoC integration needs. For example, AM43= 7x > >> and 66AK2G SoCs have 2 PRUSS instances each and have the host interrup= t 5 > >> connected to the other PRUSS, while AM335x has host interrupt 0 shared > >> between MPU and TSC_ADC and host interrupts 6 & 7 shared between MPU a= nd > >> a DMA controller. > >>=20 > >> Add support to the PRUSS INTC driver to allow both these shared and > >> invalid interrupts by not returning a failure if any of these interrup= ts > >> are skipped from the corresponding INTC DT node. > >=20 > > That's not exactly "adding support", is it? It really is "ignore these > > interrupts because they are useless from the main CPU's perspective", > > right? >=20 > Correct. We can rephrase this to something like > "Add logic to the PRUSS INTC driver to ignore.." >=20 > >=20 > >>=20 > >> Signed-off-by: Suman Anna > >> Signed-off-by: Grzegorz Jaszczyk > >> --- > >> v2->v3: > >> - Extra checks for (intc->irqs[i]) in error/remove path was moved from > >> =C2=A0 "irqchip/irq-pruss-intc: Add a PRUSS irqchip driver for PRUSS > >> =C2=A0 interrupts" to this patch > >> v1->v2: > >> - https://patchwork.kernel.org/patch/11069757/ > >> --- > >> =C2=A0drivers/irqchip/irq-pruss-intc.c | 73 > >> +++++++++++++++++++++++++++++++++++++--- > >> =C2=A01 file changed, 68 insertions(+), 5 deletions(-) > >>=20 > >> diff --git a/drivers/irqchip/irq-pruss-intc.c > >> b/drivers/irqchip/irq-pruss-intc.c > >> index fb3dda3..49c936f 100644 > >> --- a/drivers/irqchip/irq-pruss-intc.c > >> +++ b/drivers/irqchip/irq-pruss-intc.c > >> @@ -65,11 +65,15 @@ > >> =C2=A0 * @irqs: kernel irq numbers corresponding to PRUSS host interru= pts > >> =C2=A0 * @base: base virtual address of INTC register space > >> =C2=A0 * @domain: irq domain for this interrupt controller > >> + * @shared_intr: bit-map denoting if the MPU host interrupt is shared > >=20 > > nit: bitmap >=20 > ok >=20 > >=20 > >> + * @invalid_intr: bit-map denoting if host interrupt is not > >> connected to MPU > >> =C2=A0 */ > >> =C2=A0struct pruss_intc { > >> =C2=A0=C2=A0=C2=A0=C2=A0 unsigned int irqs[MAX_NUM_HOST_IRQS]; > >> =C2=A0=C2=A0=C2=A0=C2=A0 void __iomem *base; > >> =C2=A0=C2=A0=C2=A0=C2=A0 struct irq_domain *domain; > >> +=C2=A0=C2=A0=C2=A0 u16 shared_intr; > >> +=C2=A0=C2=A0=C2=A0 u16 invalid_intr; > >=20 > > Please represent bitmaps as an unsigned long. >=20 > ok. We have atmost 8 interrupts coming in, but agree on the change > since we are using the BIT() macro below. >=20 > >=20 > >> =C2=A0}; > >>=20 > >> =C2=A0static inline u32 pruss_intc_read_reg(struct pruss_intc *intc, > >> unsigned int reg) > >> @@ -222,7 +226,8 @@ static int pruss_intc_probe(struct > >> platform_device *pdev) > >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 "host_intr4", "host_i= ntr5", "host_intr6", "host_intr7", }; > >> =C2=A0=C2=A0=C2=A0=C2=A0 struct device *dev =3D &pdev->dev; > >> =C2=A0=C2=A0=C2=A0=C2=A0 struct pruss_intc *intc; > >> -=C2=A0=C2=A0=C2=A0 int i, irq; > >> +=C2=A0=C2=A0=C2=A0 int i, irq, count; > >> +=C2=A0=C2=A0=C2=A0 u8 temp_intr[MAX_NUM_HOST_IRQS] =3D { 0 }; > >>=20 > >> =C2=A0=C2=A0=C2=A0=C2=A0 intc =3D devm_kzalloc(dev, sizeof(*intc), GFP= _KERNEL); > >> =C2=A0=C2=A0=C2=A0=C2=A0 if (!intc) > >> @@ -235,6 +240,52 @@ static int pruss_intc_probe(struct > >> platform_device *pdev) > >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return PTR_ERR(intc->= base); > >> =C2=A0=C2=A0=C2=A0=C2=A0 } > >>=20 > >> +=C2=A0=C2=A0=C2=A0 count =3D of_property_read_variable_u8_array(dev->= of_node, > >> +=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 "ti,irqs-reserved", > >> +=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 temp_intr, 0, > >> +=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 MAX_NUM_HOST_IRQS); > >> +=C2=A0=C2=A0=C2=A0 /* > >> +=C2=A0=C2=A0=C2=A0=C2=A0 * The irqs-reserved is used only for some So= C's therefore not > >> having > >> +=C2=A0=C2=A0=C2=A0=C2=A0 * this property is still valid > >> +=C2=A0=C2=A0=C2=A0=C2=A0 */ > >> +=C2=A0=C2=A0=C2=A0 if (count =3D=3D -EINVAL) > >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 count =3D 0; > >> +=C2=A0=C2=A0=C2=A0 if (count < 0) > >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return count; > >> + > >> +=C2=A0=C2=A0=C2=A0 for (i =3D 0; i < count; i++) { > >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (temp_intr[i] >=3D MAX_= NUM_HOST_IRQS) { > >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 de= v_warn(dev, "ignoring invalid reserved irq %d\n", > >> +=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 temp_intr[i]); > >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 co= ntinue; > >> +=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 intc->invalid_intr |=3D BI= T(temp_intr[i]); > >> +=C2=A0=C2=A0=C2=A0 } > >> + > >> +=C2=A0=C2=A0=C2=A0 count =3D of_property_read_variable_u8_array(dev->= of_node, > >> +=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 "ti,irqs-shared", > >> +=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 temp_intr, 0, > >> +=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 MAX_NUM_HOST_IRQS); > >> +=C2=A0=C2=A0=C2=A0 /* > >> +=C2=A0=C2=A0=C2=A0=C2=A0 * The irqs-shared is used only for some SoC'= s therefore not having > >> +=C2=A0=C2=A0=C2=A0=C2=A0 * this property is still valid > >> +=C2=A0=C2=A0=C2=A0=C2=A0 */ > >> +=C2=A0=C2=A0=C2=A0 if (count =3D=3D -EINVAL) > >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 count =3D 0; > >> +=C2=A0=C2=A0=C2=A0 if (count < 0) > >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return count; > >> + > >> +=C2=A0=C2=A0=C2=A0 for (i =3D 0; i < count; i++) { > >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (temp_intr[i] >=3D MAX_= NUM_HOST_IRQS) { > >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 de= v_warn(dev, "ignoring invalid shared irq %d\n", > >> +=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 temp_intr[i]); > >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 co= ntinue; > >> +=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 intc->shared_intr |=3D BIT= (temp_intr[i]); > >> +=C2=A0=C2=A0=C2=A0 } > >> + > >=20 > > You probably want to move this in a separate function, since you popula= te a > > common structure. > >=20 > >> =C2=A0=C2=A0=C2=A0=C2=A0 pruss_intc_init(intc); > >>=20 > >> =C2=A0=C2=A0=C2=A0=C2=A0 /* always 64 events */ > >> @@ -244,8 +295,14 @@ static int pruss_intc_probe(struct > >> platform_device *pdev) > >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return -ENOMEM; > >>=20 > >> =C2=A0=C2=A0=C2=A0=C2=A0 for (i =3D 0; i < MAX_NUM_HOST_IRQS; i++) { > >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (intc->invalid_intr & B= IT(i)) > >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 co= ntinue; > >> + > >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 irq =3D platform_get_= irq_byname(pdev, irq_names[i]); > >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (irq <=3D 0) { > >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if= (intc->shared_intr & BIT(i)) > >> +=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 continue; > >=20 > > I don't really understand why you are treating these "shared" interrupts > > differently from the invalid ones. In all cases, they shouldn't be used. >=20 > The behavior is the same in how we handle it, but the difference is > that an "invalid" one is never even connected to the ARM interrupt > controller, while the "shared" one is a choice. So, unless this > interrupt is being used/handled by a different processor/entity, you > would not see this skipped from the dts node. And I'm saying that all that matters is that you are discarding these interrupts. Whether they are flagged invalid or shared, they are not available to Linux. So the difference in handling is pointless and only makes it harder to understand what you are doing. Thanks, M. --=20 Without deviation from the norm, progress is not possible. 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=-10.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS autolearn=unavailable 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 704F7C433E1 for ; Fri, 17 Jul 2020 11:04:08 +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 2F22D20768 for ; Fri, 17 Jul 2020 11:04:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="UGCNaKCA"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="dqzm/OI6" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2F22D20768 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org 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:References:In-Reply-To:Subject:To:From: Message-ID:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=6Izn/B1tVCAOTJzCqibx2YFQvYFDEgHahZ/IpHicAFc=; b=UGCNaKCAXGKQ3FEsIH2zSWIdJ /uOmayGVlXT2cuDuva1+wk4YHzIS41nvbtQmNUDf8MiE62jKjXjHCgxPIMKNF1stXGPnPAcRdDW/5 eDAilj97TiCcVylEfkOLw8FZFgPRZXbWL5GaZCC0LXDbojf3ByzhD2krlgUh+oM9ZCiprZKc8M8WS qaqWNAQlx/K29l7+alatVtJZVv+hLX6AeOYFE8Eq6P7MA4iWQjnVRoEKTDxltXXBtzicr+iJ4l76z +IGt546UJQTBnLsXcGYnK1Fp7Q4axmNjdxC12HQRy43F3uhHENwPSKuFGKkPK0TSzEBIit0jNlUj9 rwbRG3+GA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jwO8a-00063X-LU; Fri, 17 Jul 2020 11:02:44 +0000 Received: from mail.kernel.org ([198.145.29.99]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jwO8X-000636-PS for linux-arm-kernel@lists.infradead.org; Fri, 17 Jul 2020 11:02:42 +0000 Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id CF84D20717; Fri, 17 Jul 2020 11:02:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1594983761; bh=bbLMObkNrniR80ZdzHzteBsWJ5zcpRCBrOI2j6GQ4W0=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=dqzm/OI6mZOxyuUKPJ7jFTK+TsDEjToHh/tLOy9xUBQ0ukZBFD8kQt8fFOxEk03fW BwU1AfbENm2NKpfpqLKq+ks8pBss9yT0+cwgjABMePaatnRza0S8ZMUDZPZknMAAlL 3TXECbw7eZtO0cuZCTRvKCVwNpJnABIlFHvSRfbE= Received: from 78.163-31-62.static.virginmediabusiness.co.uk ([62.31.163.78] helo=wait-a-minute.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jwO8V-00CbW3-DI; Fri, 17 Jul 2020 12:02:39 +0100 Date: Fri, 17 Jul 2020 12:02:38 +0100 Message-ID: <87imemxv3l.wl-maz@kernel.org> From: Marc Zyngier To: Suman Anna Subject: Re: [PATCHv3 3/6] irqchip/irq-pruss-intc: Add support for shared and invalid interrupts In-Reply-To: <3a73bb14-9f7b-970d-fbae-f9c7bb7bdf1e@ti.com> References: <1593699479-1445-1-git-send-email-grzegorz.jaszczyk@linaro.org> <1593699479-1445-4-git-send-email-grzegorz.jaszczyk@linaro.org> <2a6b0391f1395eb0aa15ffee6769184e@kernel.org> <3a73bb14-9f7b-970d-fbae-f9c7bb7bdf1e@ti.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.8 EasyPG/1.0.0 Emacs/26.3 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") X-SA-Exim-Connect-IP: 62.31.163.78 X-SA-Exim-Rcpt-To: s-anna@ti.com, grzegorz.jaszczyk@linaro.org, tglx@linutronix.de, jason@lakedaemon.net, robh+dt@kernel.org, lee.jones@linaro.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, david@lechnology.com, wmills@ti.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200717_070241_965110_36BB4B1F X-CRM114-Status: GOOD ( 40.74 ) 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: devicetree@vger.kernel.org, Grzegorz Jaszczyk , jason@lakedaemon.net, linux-kernel@vger.kernel.org, robh+dt@kernel.org, tglx@linutronix.de, linux-omap@vger.kernel.org, lee.jones@linaro.org, wmills@ti.com, linux-arm-kernel@lists.infradead.org, david@lechnology.com 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 T24gRnJpLCAxMCBKdWwgMjAyMCAyMTo1OToxNyArMDEwMCwKU3VtYW4gQW5uYSA8cy1hbm5hQHRp LmNvbT4gd3JvdGU6CgpIaSBTdW1hbiwKClsuLi5dCgo+Cj4gSGkgTWFyYywKPiAKPiBPbiA3LzIv MjAgMTI6NDQgUE0sIE1hcmMgWnluZ2llciB3cm90ZToKPiA+IE9uIDIwMjAtMDctMDIgMTU6MTcs IEdyemVnb3J6IEphc3pjenlrIHdyb3RlOgo+ID4+IEZyb206IFN1bWFuIEFubmEgPHMtYW5uYUB0 aS5jb20+Cj4gPj4gCj4gPj4gVGhlIFBSVVNTIElOVEMgaGFzIGEgZml4ZWQgbnVtYmVyIG9mIG91 dHB1dCBpbnRlcnJ1cHQgbGluZXMgdGhhdCBhcmUKPiA+PiBjb25uZWN0ZWQgdG8gYSBudW1iZXIg b2YgcHJvY2Vzc29ycyBvciBvdGhlciBQUlVTUyBpbnN0YW5jZXMgb3Igb3RoZXIKPiA+PiBkZXZp Y2VzIChsaWtlIERNQSkgb24gdGhlIFNvQy4gVGhlIG91dHB1dCBpbnRlcnJ1cHQgbGluZXMgMiB0 aHJvdWdoIDkKPiA+PiBhcmUgdXN1YWxseSBjb25uZWN0ZWQgdG8gdGhlIG1haW4gQXJtIGhvc3Qg cHJvY2Vzc29yIGFuZCBhcmUgcmVmZXJyZWQKPiA+PiB0byBhcyBob3N0IGludGVycnVwdHMgMCB0 aHJvdWdoIDcgZnJvbSBBUk0vTVBVIHBlcnNwZWN0aXZlLgo+ID4+IAo+ID4+IEFsbCBvZiB0aGVz ZSA4IGhvc3QgaW50ZXJydXB0cyBhcmUgbm90IGFsd2F5cyBleGNsdXNpdmVseSBjb25uZWN0ZWQK PiA+PiB0byB0aGUgQXJtIGludGVycnVwdCBjb250cm9sbGVyLiBTb21lIFNvQ3MgaGF2ZSBzb21l IGludGVycnVwdCBsaW5lcwo+ID4+IG5vdCBjb25uZWN0ZWQgdG8gdGhlIEFybSBpbnRlcnJ1cHQg Y29udHJvbGxlciBhdCBhbGwsIHdoaWxlIGEgZmV3IG90aGVycwo+ID4+IGhhdmUgdGhlIGludGVy cnVwdCBsaW5lcyBjb25uZWN0ZWQgdG8gbXVsdGlwbGUgcHJvY2Vzc29ycyBpbiB3aGljaCB0aGV5 Cj4gPj4gbmVlZCB0byBiZSBwYXJ0aXRpb25lZCBhcyBwZXIgU29DIGludGVncmF0aW9uIG5lZWRz LiBGb3IgZXhhbXBsZSwgQU00Mzd4Cj4gPj4gYW5kIDY2QUsyRyBTb0NzIGhhdmUgMiBQUlVTUyBp bnN0YW5jZXMgZWFjaCBhbmQgaGF2ZSB0aGUgaG9zdCBpbnRlcnJ1cHQgNQo+ID4+IGNvbm5lY3Rl ZCB0byB0aGUgb3RoZXIgUFJVU1MsIHdoaWxlIEFNMzM1eCBoYXMgaG9zdCBpbnRlcnJ1cHQgMCBz aGFyZWQKPiA+PiBiZXR3ZWVuIE1QVSBhbmQgVFNDX0FEQyBhbmQgaG9zdCBpbnRlcnJ1cHRzIDYg JiA3IHNoYXJlZCBiZXR3ZWVuIE1QVSBhbmQKPiA+PiBhIERNQSBjb250cm9sbGVyLgo+ID4+IAo+ ID4+IEFkZCBzdXBwb3J0IHRvIHRoZSBQUlVTUyBJTlRDIGRyaXZlciB0byBhbGxvdyBib3RoIHRo ZXNlIHNoYXJlZCBhbmQKPiA+PiBpbnZhbGlkIGludGVycnVwdHMgYnkgbm90IHJldHVybmluZyBh IGZhaWx1cmUgaWYgYW55IG9mIHRoZXNlIGludGVycnVwdHMKPiA+PiBhcmUgc2tpcHBlZCBmcm9t IHRoZSBjb3JyZXNwb25kaW5nIElOVEMgRFQgbm9kZS4KPiA+IAo+ID4gVGhhdCdzIG5vdCBleGFj dGx5ICJhZGRpbmcgc3VwcG9ydCIsIGlzIGl0PyBJdCByZWFsbHkgaXMgImlnbm9yZSB0aGVzZQo+ ID4gaW50ZXJydXB0cyBiZWNhdXNlIHRoZXkgYXJlIHVzZWxlc3MgZnJvbSB0aGUgbWFpbiBDUFUn cyBwZXJzcGVjdGl2ZSIsCj4gPiByaWdodD8KPiAKPiBDb3JyZWN0LiBXZSBjYW4gcmVwaHJhc2Ug dGhpcyB0byBzb21ldGhpbmcgbGlrZQo+ICJBZGQgbG9naWMgdG8gdGhlIFBSVVNTIElOVEMgZHJp dmVyIHRvIGlnbm9yZS4uIgo+IAo+ID4gCj4gPj4gCj4gPj4gU2lnbmVkLW9mZi1ieTogU3VtYW4g QW5uYSA8cy1hbm5hQHRpLmNvbT4KPiA+PiBTaWduZWQtb2ZmLWJ5OiBHcnplZ29yeiBKYXN6Y3p5 ayA8Z3J6ZWdvcnouamFzemN6eWtAbGluYXJvLm9yZz4KPiA+PiAtLS0KPiA+PiB2Mi0+djM6Cj4g Pj4gLSBFeHRyYSBjaGVja3MgZm9yIChpbnRjLT5pcnFzW2ldKSBpbiBlcnJvci9yZW1vdmUgcGF0 aCB3YXMgbW92ZWQgZnJvbQo+ID4+IMKgICJpcnFjaGlwL2lycS1wcnVzcy1pbnRjOiBBZGQgYSBQ UlVTUyBpcnFjaGlwIGRyaXZlciBmb3IgUFJVU1MKPiA+PiDCoCBpbnRlcnJ1cHRzIiB0byB0aGlz IHBhdGNoCj4gPj4gdjEtPnYyOgo+ID4+IC0gaHR0cHM6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9w YXRjaC8xMTA2OTc1Ny8KPiA+PiAtLS0KPiA+PiDCoGRyaXZlcnMvaXJxY2hpcC9pcnEtcHJ1c3Mt aW50Yy5jIHwgNzMKPiA+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0t Cj4gPj4gwqAxIGZpbGUgY2hhbmdlZCwgNjggaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkK PiA+PiAKPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1wcnVzcy1pbnRjLmMK PiA+PiBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtcHJ1c3MtaW50Yy5jCj4gPj4gaW5kZXggZmIzZGRh My4uNDljOTM2ZiAxMDA2NDQKPiA+PiAtLS0gYS9kcml2ZXJzL2lycWNoaXAvaXJxLXBydXNzLWlu dGMuYwo+ID4+ICsrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtcHJ1c3MtaW50Yy5jCj4gPj4gQEAg LTY1LDExICs2NSwxNSBAQAo+ID4+IMKgICogQGlycXM6IGtlcm5lbCBpcnEgbnVtYmVycyBjb3Jy ZXNwb25kaW5nIHRvIFBSVVNTIGhvc3QgaW50ZXJydXB0cwo+ID4+IMKgICogQGJhc2U6IGJhc2Ug dmlydHVhbCBhZGRyZXNzIG9mIElOVEMgcmVnaXN0ZXIgc3BhY2UKPiA+PiDCoCAqIEBkb21haW46 IGlycSBkb21haW4gZm9yIHRoaXMgaW50ZXJydXB0IGNvbnRyb2xsZXIKPiA+PiArICogQHNoYXJl ZF9pbnRyOiBiaXQtbWFwIGRlbm90aW5nIGlmIHRoZSBNUFUgaG9zdCBpbnRlcnJ1cHQgaXMgc2hh cmVkCj4gPiAKPiA+IG5pdDogYml0bWFwCj4gCj4gb2sKPiAKPiA+IAo+ID4+ICsgKiBAaW52YWxp ZF9pbnRyOiBiaXQtbWFwIGRlbm90aW5nIGlmIGhvc3QgaW50ZXJydXB0IGlzIG5vdAo+ID4+IGNv bm5lY3RlZCB0byBNUFUKPiA+PiDCoCAqLwo+ID4+IMKgc3RydWN0IHBydXNzX2ludGMgewo+ID4+ IMKgwqDCoMKgIHVuc2lnbmVkIGludCBpcnFzW01BWF9OVU1fSE9TVF9JUlFTXTsKPiA+PiDCoMKg wqDCoCB2b2lkIF9faW9tZW0gKmJhc2U7Cj4gPj4gwqDCoMKgwqAgc3RydWN0IGlycV9kb21haW4g KmRvbWFpbjsKPiA+PiArwqDCoMKgIHUxNiBzaGFyZWRfaW50cjsKPiA+PiArwqDCoMKgIHUxNiBp bnZhbGlkX2ludHI7Cj4gPiAKPiA+IFBsZWFzZSByZXByZXNlbnQgYml0bWFwcyBhcyBhbiB1bnNp Z25lZCBsb25nLgo+IAo+IG9rLiBXZSBoYXZlIGF0bW9zdCA4IGludGVycnVwdHMgY29taW5nIGlu LCBidXQgYWdyZWUgb24gdGhlIGNoYW5nZQo+IHNpbmNlIHdlIGFyZSB1c2luZyB0aGUgQklUKCkg bWFjcm8gYmVsb3cuCj4gCj4gPiAKPiA+PiDCoH07Cj4gPj4gCj4gPj4gwqBzdGF0aWMgaW5saW5l IHUzMiBwcnVzc19pbnRjX3JlYWRfcmVnKHN0cnVjdCBwcnVzc19pbnRjICppbnRjLAo+ID4+IHVu c2lnbmVkIGludCByZWcpCj4gPj4gQEAgLTIyMiw3ICsyMjYsOCBAQCBzdGF0aWMgaW50IHBydXNz X2ludGNfcHJvYmUoc3RydWN0Cj4gPj4gcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4+IMKgwqDC oMKgwqDCoMKgwqAgImhvc3RfaW50cjQiLCAiaG9zdF9pbnRyNSIsICJob3N0X2ludHI2IiwgImhv c3RfaW50cjciLCB9Owo+ID4+IMKgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5k ZXY7Cj4gPj4gwqDCoMKgwqAgc3RydWN0IHBydXNzX2ludGMgKmludGM7Cj4gPj4gLcKgwqDCoCBp bnQgaSwgaXJxOwo+ID4+ICvCoMKgwqAgaW50IGksIGlycSwgY291bnQ7Cj4gPj4gK8KgwqDCoCB1 OCB0ZW1wX2ludHJbTUFYX05VTV9IT1NUX0lSUVNdID0geyAwIH07Cj4gPj4gCj4gPj4gwqDCoMKg wqAgaW50YyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaW50YyksIEdGUF9LRVJORUwpOwo+ ID4+IMKgwqDCoMKgIGlmICghaW50YykKPiA+PiBAQCAtMjM1LDYgKzI0MCw1MiBAQCBzdGF0aWMg aW50IHBydXNzX2ludGNfcHJvYmUoc3RydWN0Cj4gPj4gcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ ID4+IMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIoaW50Yy0+YmFzZSk7Cj4gPj4gwqDC oMKgwqAgfQo+ID4+IAo+ID4+ICvCoMKgwqAgY291bnQgPSBvZl9wcm9wZXJ0eV9yZWFkX3Zhcmlh YmxlX3U4X2FycmF5KGRldi0+b2Zfbm9kZSwKPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAidGksaXJxcy1yZXNlcnZlZCIsCj4gPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGVtcF9p bnRyLCAwLAo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIE1BWF9OVU1fSE9TVF9JUlFTKTsKPiA+PiArwqDCoMKgIC8qCj4gPj4gK8KgwqDC oMKgICogVGhlIGlycXMtcmVzZXJ2ZWQgaXMgdXNlZCBvbmx5IGZvciBzb21lIFNvQydzIHRoZXJl Zm9yZSBub3QKPiA+PiBoYXZpbmcKPiA+PiArwqDCoMKgwqAgKiB0aGlzIHByb3BlcnR5IGlzIHN0 aWxsIHZhbGlkCj4gPj4gK8KgwqDCoMKgICovCj4gPj4gK8KgwqDCoCBpZiAoY291bnQgPT0gLUVJ TlZBTCkKPiA+PiArwqDCoMKgwqDCoMKgwqAgY291bnQgPSAwOwo+ID4+ICvCoMKgwqAgaWYgKGNv dW50IDwgMCkKPiA+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGNvdW50Owo+ID4+ICsKPiA+PiAr wqDCoMKgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cj4gPj4gK8KgwqDCoMKgwqDCoMKg IGlmICh0ZW1wX2ludHJbaV0gPj0gTUFYX05VTV9IT1NUX0lSUVMpIHsKPiA+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBkZXZfd2FybihkZXYsICJpZ25vcmluZyBpbnZhbGlkIHJlc2VydmVkIGly cSAlZFxuIiwKPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGVtcF9pbnRy W2ldKTsKPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPiA+PiArwqDCoMKg wqDCoMKgwqAgfQo+ID4+ICsKPiA+PiArwqDCoMKgwqDCoMKgwqAgaW50Yy0+aW52YWxpZF9pbnRy IHw9IEJJVCh0ZW1wX2ludHJbaV0pOwo+ID4+ICvCoMKgwqAgfQo+ID4+ICsKPiA+PiArwqDCoMKg IGNvdW50ID0gb2ZfcHJvcGVydHlfcmVhZF92YXJpYWJsZV91OF9hcnJheShkZXYtPm9mX25vZGUs Cj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgInRpLGlycXMtc2hhcmVkIiwKPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0ZW1wX2ludHIsIDAsCj4gPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTUFYX05VTV9IT1NUX0lSUVMp Owo+ID4+ICvCoMKgwqAgLyoKPiA+PiArwqDCoMKgwqAgKiBUaGUgaXJxcy1zaGFyZWQgaXMgdXNl ZCBvbmx5IGZvciBzb21lIFNvQydzIHRoZXJlZm9yZSBub3QgaGF2aW5nCj4gPj4gK8KgwqDCoMKg ICogdGhpcyBwcm9wZXJ0eSBpcyBzdGlsbCB2YWxpZAo+ID4+ICvCoMKgwqDCoCAqLwo+ID4+ICvC oMKgwqAgaWYgKGNvdW50ID09IC1FSU5WQUwpCj4gPj4gK8KgwqDCoMKgwqDCoMKgIGNvdW50ID0g MDsKPiA+PiArwqDCoMKgIGlmIChjb3VudCA8IDApCj4gPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biBjb3VudDsKPiA+PiArCj4gPj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykg ewo+ID4+ICvCoMKgwqDCoMKgwqDCoCBpZiAodGVtcF9pbnRyW2ldID49IE1BWF9OVU1fSE9TVF9J UlFTKSB7Cj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X3dhcm4oZGV2LCAiaWdub3Jp bmcgaW52YWxpZCBzaGFyZWQgaXJxICVkXG4iLAo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB0ZW1wX2ludHJbaV0pOwo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNv bnRpbnVlOwo+ID4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gPj4gKwo+ID4+ICvCoMKgwqDCoMKgwqDC oCBpbnRjLT5zaGFyZWRfaW50ciB8PSBCSVQodGVtcF9pbnRyW2ldKTsKPiA+PiArwqDCoMKgIH0K PiA+PiArCj4gPiAKPiA+IFlvdSBwcm9iYWJseSB3YW50IHRvIG1vdmUgdGhpcyBpbiBhIHNlcGFy YXRlIGZ1bmN0aW9uLCBzaW5jZSB5b3UgcG9wdWxhdGUgYQo+ID4gY29tbW9uIHN0cnVjdHVyZS4K PiA+IAo+ID4+IMKgwqDCoMKgIHBydXNzX2ludGNfaW5pdChpbnRjKTsKPiA+PiAKPiA+PiDCoMKg wqDCoCAvKiBhbHdheXMgNjQgZXZlbnRzICovCj4gPj4gQEAgLTI0NCw4ICsyOTUsMTQgQEAgc3Rh dGljIGludCBwcnVzc19pbnRjX3Byb2JlKHN0cnVjdAo+ID4+IHBsYXRmb3JtX2RldmljZSAqcGRl dikKPiA+PiDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+ID4+IAo+ID4+IMKgwqDC oMKgIGZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX0hPU1RfSVJRUzsgaSsrKSB7Cj4gPj4gK8KgwqDC oMKgwqDCoMKgIGlmIChpbnRjLT5pbnZhbGlkX2ludHIgJiBCSVQoaSkpCj4gPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4gPj4gKwo+ID4+IMKgwqDCoMKgwqDCoMKgwqAgaXJx ID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgaXJxX25hbWVzW2ldKTsKPiA+PiDCoMKg wqDCoMKgwqDCoMKgIGlmIChpcnEgPD0gMCkgewo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlmIChpbnRjLT5zaGFyZWRfaW50ciAmIEJJVChpKSkKPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+ID4gCj4gPiBJIGRvbid0IHJlYWxseSB1bmRlcnN0YW5k IHdoeSB5b3UgYXJlIHRyZWF0aW5nIHRoZXNlICJzaGFyZWQiIGludGVycnVwdHMKPiA+IGRpZmZl cmVudGx5IGZyb20gdGhlIGludmFsaWQgb25lcy4gSW4gYWxsIGNhc2VzLCB0aGV5IHNob3VsZG4n dCBiZSB1c2VkLgo+IAo+IFRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZSBpbiBob3cgd2UgaGFuZGxl IGl0LCBidXQgdGhlIGRpZmZlcmVuY2UgaXMKPiB0aGF0IGFuICJpbnZhbGlkIiBvbmUgaXMgbmV2 ZXIgZXZlbiBjb25uZWN0ZWQgdG8gdGhlIEFSTSBpbnRlcnJ1cHQKPiBjb250cm9sbGVyLCB3aGls ZSB0aGUgInNoYXJlZCIgb25lIGlzIGEgY2hvaWNlLiBTbywgdW5sZXNzIHRoaXMKPiBpbnRlcnJ1 cHQgaXMgYmVpbmcgdXNlZC9oYW5kbGVkIGJ5IGEgZGlmZmVyZW50IHByb2Nlc3Nvci9lbnRpdHks IHlvdQo+IHdvdWxkIG5vdCBzZWUgdGhpcyBza2lwcGVkIGZyb20gdGhlIGR0cyBub2RlLgoKQW5k IEknbSBzYXlpbmcgdGhhdCBhbGwgdGhhdCBtYXR0ZXJzIGlzIHRoYXQgeW91IGFyZSBkaXNjYXJk aW5nIHRoZXNlCmludGVycnVwdHMuIFdoZXRoZXIgdGhleSBhcmUgZmxhZ2dlZCBpbnZhbGlkIG9y IHNoYXJlZCwgdGhleSBhcmUgbm90CmF2YWlsYWJsZSB0byBMaW51eC4gU28gdGhlIGRpZmZlcmVu Y2UgaW4gaGFuZGxpbmcgaXMgcG9pbnRsZXNzIGFuZApvbmx5IG1ha2VzIGl0IGhhcmRlciB0byB1 bmRlcnN0YW5kIHdoYXQgeW91IGFyZSBkb2luZy4KClRoYW5rcywKCglNLgoKLS0gCldpdGhvdXQg ZGV2aWF0aW9uIGZyb20gdGhlIG5vcm0sIHByb2dyZXNzIGlzIG5vdCBwb3NzaWJsZS4KCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJu ZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK