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=-14.0 required=3.0 tests=BAYES_00,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 72BBAC63777 for ; Sat, 21 Nov 2020 15:17:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1E7C722261 for ; Sat, 21 Nov 2020 15:17:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728177AbgKUPR2 (ORCPT ); Sat, 21 Nov 2020 10:17:28 -0500 Received: from mail-lf1-f68.google.com ([209.85.167.68]:42076 "EHLO mail-lf1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727867AbgKUPR1 (ORCPT ); Sat, 21 Nov 2020 10:17:27 -0500 Received: by mail-lf1-f68.google.com with SMTP id u18so17675319lfd.9; Sat, 21 Nov 2020 07:17:25 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=YhyylT6KFhdowDIfJnJ40q7bI+v1PdaWRmLJxQFG7pA=; b=S3kEvDrwCE/i/Ta1ma7s1G1QFteFQlkJNxwJkApXFJ6VA7PPStDOFZoBqO1JRoRgHX 25PXGPAIr+ahNDmnxd4GpuTWTyd6uUC9w8iaNIXp//Z1Vc7cIw0HS7bqAp8CMDStc0Jo EJXLHKP6e2lOb7U2QaPIBRmwH81dTWvw366X/ZjOaSY6yahmkjGcL3lZvHYFRad787R9 5qCSVUmHpkIAJQs5CPGhetA+NtdE4iMdKY50Iu4yq5AxhM2CJJd/qqocP6ANHhBvwuf4 aqLoGyejN5cOHDBWIfZyXdKx+07w751d80WEY6gT/RgZaKClehmgKs5DusT13E1OFfN1 GpKg== X-Gm-Message-State: AOAM533rmjno7LqSmt3vXu6IwNXk/OLLUBhz97SlO125r6xiCgqdNEzN PQSrPdOtC9JoUqidiTBJqkb4CANE/HJEkw== X-Google-Smtp-Source: ABdhPJxG2SMsWy4gPbQN0ptYATRYhdlYy63rFINniGlIWK6dZehzcROeYtUq0q97YpOgpM4WDwn8yQ== X-Received: by 2002:a05:6512:10c9:: with SMTP id k9mr9807523lfg.40.1605971844938; Sat, 21 Nov 2020 07:17:24 -0800 (PST) Received: from xi.terra (c-beaee455.07-184-6d6c6d4.bbcust.telenor.se. [85.228.174.190]) by smtp.gmail.com with ESMTPSA id e14sm733549lfd.145.2020.11.21.07.17.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 21 Nov 2020 07:17:23 -0800 (PST) Received: from johan by xi.terra with local (Exim 4.93.0.4) (envelope-from ) id 1kgUdm-0007CG-Q7; Sat, 21 Nov 2020 16:17:31 +0100 Date: Sat, 21 Nov 2020 16:17:30 +0100 From: Johan Hovold To: David Laight Cc: 'Johan Hovold' , "tiantao (H)" , Thomas Gleixner , Tian Tao , "gregkh@linuxfoundation.org" , "jirislaby@kernel.org" , "afaerber@suse.de" , "manivannan.sadhasivam@linaro.org" , "linux-serial@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH] tty: serial: replace spin_lock_irqsave by spin_lock in hard IRQ Message-ID: References: <1605776489-16283-1-git-send-email-tiantao6@hisilicon.com> <9ce93d7b-f769-58ed-e6bf-95c34bd0123e@huawei.com> <40a52ea2273146b98b3ae3439a22d1eb@AcuMS.aculab.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <40a52ea2273146b98b3ae3439a22d1eb@AcuMS.aculab.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Nov 20, 2020 at 08:00:05PM +0000, David Laight wrote: > From: Johan Hovold > > Sent: 20 November 2020 12:50 > > > > On Fri, Nov 20, 2020 at 07:25:03PM +0800, tiantao (H) wrote: > > > 在 2020/11/20 16:23, Johan Hovold 写道: > > > > On Thu, Nov 19, 2020 at 05:01:29PM +0800, Tian Tao wrote: > > > >> The code has been in a irq-disabled context since it is hard IRQ. There > > > >> is no necessity to do it again. > > > >> > > > >> Signed-off-by: Tian Tao > > > >> --- > > > >> drivers/tty/serial/owl-uart.c | 5 ++--- > > > >> 1 file changed, 2 insertions(+), 3 deletions(-) > > > >> > > > >> diff --git a/drivers/tty/serial/owl-uart.c b/drivers/tty/serial/owl-uart.c > > > >> index c149f8c3..472fdaf 100644 > > > >> --- a/drivers/tty/serial/owl-uart.c > > > >> +++ b/drivers/tty/serial/owl-uart.c > > > >> @@ -251,10 +251,9 @@ static void owl_uart_receive_chars(struct uart_port *port) > > > >> static irqreturn_t owl_uart_irq(int irq, void *dev_id) > > > >> { > > > >> struct uart_port *port = dev_id; > > > >> - unsigned long flags; > > > >> u32 stat; > > > >> > > > >> - spin_lock_irqsave(&port->lock, flags); > > > >> + spin_lock(&port->lock); > > > > > > > > Same thing here; this will break with forced irq threading (i.e. > > > > "threadirqs") since the console code can still end up being called from > > > > interrupt context. > > > > > As the following code shows, owl_uart_irq does not run in the irq > > > threading context. > > > ret = request_irq(port->irq, owl_uart_irq, IRQF_TRIGGER_HIGH, > > > "owl-uart", port); > > > if (ret) > > > return ret; > > > > It still runs in a thread when interrupts are forced to be threaded > > using the kernel parameter "threadirqs". > > > > We just had a revert of a change like yours after lockdep reported the > > resulting lock inversion with forced interrupt threading. > > > > Whether drivers should have to care about "threadirqs" is a somewhat > > different question. Not sure how that's even supposed to work generally > > unless we mass-convert drivers to spin_lock_irqsave() (or mark their > > interrupts IRQF_NO_THREAD). > > Isn't that backwards? > > You need to use the 'irqsave' variant in code that might run with > interrupts enabled because an interrupt might try to acquire the > same lock having interrupted the code that already holds the lock. > > If interrupts run as separate threads that can never happen. > So in that case all code can use the non-irqsave call. > > So either lockdep is broken or you have a different bug. Not all interrupts run as threads with "threadirqs" so the lock can potentially still be taken in hard IRQ context also with forced threading. For console drivers this can even happen for the same interrupt as the generic interrupt code can call printk(), and so can any other handler that isn't threaded (e.g. hrtimers or explicit IRQF_NO_THREAD). If a driver exposes an interface that can be called in hard IRQ context, it must use spin_lock_irqsave() in its interrupt handler (or use IRQF_NO_THREAD) because of "threadirqs". Johan 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=-14.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=ham 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 C0F3FC388F9 for ; Sun, 22 Nov 2020 00:43:48 +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 519CF207D3 for ; Sun, 22 Nov 2020 00:43:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ysxcgNQz" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 519CF207D3 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:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=gCeFBuwGuEr4uYYSv2YcugTHjO94QR/HtCVHcPxneVs=; b=ysxcgNQzrX/pdeJSI0w7hNSbd rPNx4czh711VE+lHN/78prxm9YxrLpaIp/bocNxFWj2UdrhaIzloUZWsKxFaMdOJqgPIwr8MOTYeN h6c9mq/si7eeFudMdzXJ72DolHIn8cnQA8lQh0D+Y1dnIdoSSpZXRyOthBIPa2DAbRfw/kIiZNKS4 JGiVuGjafnvU8V4imf+WCxFMMpXBtjyYLnKbO7LvZAMXqRWCxvF/dXVwJMd55Vbym6SS1TlMSexp3 mn9K9ECkJZFwiHMqB81g5HRygIJCcbPysRbbKNf+knI9yVzimRzK4Fa8qHzPMwqybxndrtfR32Sgz zYubGAD/w==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kgdTO-0003v6-TY; Sun, 22 Nov 2020 00:43:22 +0000 Received: from mail-ed1-f68.google.com ([209.85.208.68]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kgdTM-0003tw-0S for linux-arm-kernel@lists.infradead.org; Sun, 22 Nov 2020 00:43:20 +0000 Received: by mail-ed1-f68.google.com with SMTP id cq7so13423134edb.4 for ; Sat, 21 Nov 2020 16:43:16 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=YhyylT6KFhdowDIfJnJ40q7bI+v1PdaWRmLJxQFG7pA=; b=BhQkooB5JxxCFHnfcpSOdT6MUxO/vk9SgEIBI6e37phDbw/ZO+3a2le0JQ5jSnL67T QJ7NoQt3iGr2+ZaPUQIRqAm+bzSOQ8IkfNxuTLcjPBcj/w+urQu3ZXTI4D3mdr+WD2Ot D+EHhL3UDN7HMfQRktnN6q5vCo9lgUiZNr13FzljGmA9AFTASJe2CvEtkHPK+juJ49co mKX+3fCV+fFG3kX1fGGK5c9C/JepCnWIwT1snHsDWjh0++BqbgfCA8xFS40QPrrF7mxA DBDQLE/lmDMVaBBM4LSqd9Meg9WzbVNwN5uEUl/4xCGFhYrxXZVDnb5BJz8eSrVRZxiF J5Yg== X-Gm-Message-State: AOAM530ACa5wkdnDbVHaLJYVfMGP3HtDilZ4QjVKnV0vtxqhGe4T0Vp3 ASfZHb2KdaLI8oP/p4sHnm6pEEHjhZxiZg== X-Google-Smtp-Source: ABdhPJxG2SMsWy4gPbQN0ptYATRYhdlYy63rFINniGlIWK6dZehzcROeYtUq0q97YpOgpM4WDwn8yQ== X-Received: by 2002:a05:6512:10c9:: with SMTP id k9mr9807523lfg.40.1605971844938; Sat, 21 Nov 2020 07:17:24 -0800 (PST) Received: from xi.terra (c-beaee455.07-184-6d6c6d4.bbcust.telenor.se. [85.228.174.190]) by smtp.gmail.com with ESMTPSA id e14sm733549lfd.145.2020.11.21.07.17.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 21 Nov 2020 07:17:23 -0800 (PST) Received: from johan by xi.terra with local (Exim 4.93.0.4) (envelope-from ) id 1kgUdm-0007CG-Q7; Sat, 21 Nov 2020 16:17:31 +0100 Date: Sat, 21 Nov 2020 16:17:30 +0100 From: Johan Hovold To: David Laight Subject: Re: [PATCH] tty: serial: replace spin_lock_irqsave by spin_lock in hard IRQ Message-ID: References: <1605776489-16283-1-git-send-email-tiantao6@hisilicon.com> <9ce93d7b-f769-58ed-e6bf-95c34bd0123e@huawei.com> <40a52ea2273146b98b3ae3439a22d1eb@AcuMS.aculab.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <40a52ea2273146b98b3ae3439a22d1eb@AcuMS.aculab.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201121_194320_086609_D799680B X-CRM114-Status: GOOD ( 33.88 ) 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: "gregkh@linuxfoundation.org" , "manivannan.sadhasivam@linaro.org" , 'Johan Hovold' , "linux-kernel@vger.kernel.org" , "linux-serial@vger.kernel.org" , "tiantao \(H\)" , Tian Tao , Thomas Gleixner , "jirislaby@kernel.org" , "afaerber@suse.de" , "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 T24gRnJpLCBOb3YgMjAsIDIwMjAgYXQgMDg6MDA6MDVQTSArMDAwMCwgRGF2aWQgTGFpZ2h0IHdy b3RlOgo+IEZyb206IEpvaGFuIEhvdm9sZAo+ID4gU2VudDogMjAgTm92ZW1iZXIgMjAyMCAxMjo1 MAo+ID4gCj4gPiBPbiBGcmksIE5vdiAyMCwgMjAyMCBhdCAwNzoyNTowM1BNICswODAwLCB0aWFu dGFvIChIKSB3cm90ZToKPiA+ID4g5ZyoIDIwMjAvMTEvMjAgMTY6MjMsIEpvaGFuIEhvdm9sZCDl hpnpgZM6Cj4gPiA+ID4gT24gVGh1LCBOb3YgMTksIDIwMjAgYXQgMDU6MDE6MjlQTSArMDgwMCwg VGlhbiBUYW8gd3JvdGU6Cj4gPiA+ID4+IFRoZSBjb2RlIGhhcyBiZWVuIGluIGEgaXJxLWRpc2Fi bGVkIGNvbnRleHQgc2luY2UgaXQgaXMgaGFyZCBJUlEuIFRoZXJlCj4gPiA+ID4+IGlzIG5vIG5l Y2Vzc2l0eSB0byBkbyBpdCBhZ2Fpbi4KPiA+ID4gPj4KPiA+ID4gPj4gU2lnbmVkLW9mZi1ieTog VGlhbiBUYW8gPHRpYW50YW82QGhpc2lsaWNvbi5jb20+Cj4gPiA+ID4+IC0tLQo+ID4gPiA+PiAg IGRyaXZlcnMvdHR5L3NlcmlhbC9vd2wtdWFydC5jIHwgNSArKy0tLQo+ID4gPiA+PiAgIDEgZmls ZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCj4gPiA+ID4+Cj4gPiA+ ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvb3dsLXVhcnQuYyBiL2RyaXZlcnMv dHR5L3NlcmlhbC9vd2wtdWFydC5jCj4gPiA+ID4+IGluZGV4IGMxNDlmOGMzLi40NzJmZGFmIDEw MDY0NAo+ID4gPiA+PiAtLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvb3dsLXVhcnQuYwo+ID4gPiA+ PiArKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvb3dsLXVhcnQuYwo+ID4gPiA+PiBAQCAtMjUxLDEw ICsyNTEsOSBAQCBzdGF0aWMgdm9pZCBvd2xfdWFydF9yZWNlaXZlX2NoYXJzKHN0cnVjdCB1YXJ0 X3BvcnQgKnBvcnQpCj4gPiA+ID4+ICAgc3RhdGljIGlycXJldHVybl90IG93bF91YXJ0X2lycShp bnQgaXJxLCB2b2lkICpkZXZfaWQpCj4gPiA+ID4+ICAgewo+ID4gPiA+PiAgIAlzdHJ1Y3QgdWFy dF9wb3J0ICpwb3J0ID0gZGV2X2lkOwo+ID4gPiA+PiAtCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4g PiA+ID4+ICAgCXUzMiBzdGF0Owo+ID4gPiA+Pgo+ID4gPiA+PiAtCXNwaW5fbG9ja19pcnFzYXZl KCZwb3J0LT5sb2NrLCBmbGFncyk7Cj4gPiA+ID4+ICsJc3Bpbl9sb2NrKCZwb3J0LT5sb2NrKTsK PiA+ID4gPgo+ID4gPiA+IFNhbWUgdGhpbmcgaGVyZTsgdGhpcyB3aWxsIGJyZWFrIHdpdGggZm9y Y2VkIGlycSB0aHJlYWRpbmcgKGkuZS4KPiA+ID4gPiAidGhyZWFkaXJxcyIpIHNpbmNlIHRoZSBj b25zb2xlIGNvZGUgY2FuIHN0aWxsIGVuZCB1cCBiZWluZyBjYWxsZWQgZnJvbQo+ID4gPiA+IGlu dGVycnVwdCBjb250ZXh0Lgo+ID4gCj4gPiA+IEFzIHRoZSBmb2xsb3dpbmcgY29kZSBzaG93cywg b3dsX3VhcnRfaXJxIGRvZXMgbm90IHJ1biBpbiB0aGUgaXJxCj4gPiA+IHRocmVhZGluZyBjb250 ZXh0Lgo+ID4gPiAgIHJldCA9IHJlcXVlc3RfaXJxKHBvcnQtPmlycSwgb3dsX3VhcnRfaXJxLCBJ UlFGX1RSSUdHRVJfSElHSCwKPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICJvd2wtdWFy dCIsIHBvcnQpOwo+ID4gPiAgICAgICAgICBpZiAocmV0KQo+ID4gPiAgICAgICAgICAgICAgICAg IHJldHVybiByZXQ7Cj4gPiAKPiA+IEl0IHN0aWxsIHJ1bnMgaW4gYSB0aHJlYWQgd2hlbiBpbnRl cnJ1cHRzIGFyZSBmb3JjZWQgdG8gYmUgdGhyZWFkZWQKPiA+IHVzaW5nIHRoZSBrZXJuZWwgcGFy YW1ldGVyICJ0aHJlYWRpcnFzIi4KPiA+IAo+ID4gV2UganVzdCBoYWQgYSByZXZlcnQgb2YgYSBj aGFuZ2UgbGlrZSB5b3VycyBhZnRlciBsb2NrZGVwIHJlcG9ydGVkIHRoZQo+ID4gcmVzdWx0aW5n IGxvY2sgaW52ZXJzaW9uIHdpdGggZm9yY2VkIGludGVycnVwdCB0aHJlYWRpbmcuCj4gPiAKPiA+ IFdoZXRoZXIgZHJpdmVycyBzaG91bGQgaGF2ZSB0byBjYXJlIGFib3V0ICJ0aHJlYWRpcnFzIiBp cyBhIHNvbWV3aGF0Cj4gPiBkaWZmZXJlbnQgcXVlc3Rpb24uIE5vdCBzdXJlIGhvdyB0aGF0J3Mg ZXZlbiBzdXBwb3NlZCB0byB3b3JrIGdlbmVyYWxseQo+ID4gdW5sZXNzIHdlIG1hc3MtY29udmVy dCBkcml2ZXJzIHRvIHNwaW5fbG9ja19pcnFzYXZlKCkgKG9yIG1hcmsgdGhlaXIKPiA+IGludGVy cnVwdHMgSVJRRl9OT19USFJFQUQpLgo+IAo+IElzbid0IHRoYXQgYmFja3dhcmRzPwo+IAo+IFlv dSBuZWVkIHRvIHVzZSB0aGUgJ2lycXNhdmUnIHZhcmlhbnQgaW4gY29kZSB0aGF0IG1pZ2h0IHJ1 biB3aXRoCj4gaW50ZXJydXB0cyBlbmFibGVkIGJlY2F1c2UgYW4gaW50ZXJydXB0IG1pZ2h0IHRy eSB0byBhY3F1aXJlIHRoZQo+IHNhbWUgbG9jayBoYXZpbmcgaW50ZXJydXB0ZWQgdGhlIGNvZGUg dGhhdCBhbHJlYWR5IGhvbGRzIHRoZSBsb2NrLgo+IAo+IElmIGludGVycnVwdHMgcnVuIGFzIHNl cGFyYXRlIHRocmVhZHMgdGhhdCBjYW4gbmV2ZXIgaGFwcGVuLgo+IFNvIGluIHRoYXQgY2FzZSBh bGwgY29kZSBjYW4gdXNlIHRoZSBub24taXJxc2F2ZSBjYWxsLgo+IAo+IFNvIGVpdGhlciBsb2Nr ZGVwIGlzIGJyb2tlbiBvciB5b3UgaGF2ZSBhIGRpZmZlcmVudCBidWcuCgpOb3QgYWxsIGludGVy cnVwdHMgcnVuIGFzIHRocmVhZHMgd2l0aCAidGhyZWFkaXJxcyIgc28gdGhlIGxvY2sgY2FuCnBv dGVudGlhbGx5IHN0aWxsIGJlIHRha2VuIGluIGhhcmQgSVJRIGNvbnRleHQgYWxzbyB3aXRoIGZv cmNlZAp0aHJlYWRpbmcuCgpGb3IgY29uc29sZSBkcml2ZXJzIHRoaXMgY2FuIGV2ZW4gaGFwcGVu IGZvciB0aGUgc2FtZSBpbnRlcnJ1cHQgYXMgdGhlCmdlbmVyaWMgaW50ZXJydXB0IGNvZGUgY2Fu IGNhbGwgcHJpbnRrKCksIGFuZCBzbyBjYW4gYW55IG90aGVyIGhhbmRsZXIKdGhhdCBpc24ndCB0 aHJlYWRlZCAoZS5nLiBocnRpbWVycyBvciBleHBsaWNpdCBJUlFGX05PX1RIUkVBRCkuCgpJZiBh IGRyaXZlciBleHBvc2VzIGFuIGludGVyZmFjZSB0aGF0IGNhbiBiZSBjYWxsZWQgaW4gaGFyZCBJ UlEgY29udGV4dCwKaXQgbXVzdCB1c2Ugc3Bpbl9sb2NrX2lycXNhdmUoKSBpbiBpdHMgaW50ZXJy dXB0IGhhbmRsZXIgKG9yIHVzZQpJUlFGX05PX1RIUkVBRCkgYmVjYXVzZSBvZiAidGhyZWFkaXJx cyIuCgpKb2hhbgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5p bmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtYXJtLWtlcm5lbAo=