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=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,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 89142C43460 for ; Mon, 12 Apr 2021 13:41:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4D01C6128B for ; Mon, 12 Apr 2021 13:41:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240809AbhDLNmN (ORCPT ); Mon, 12 Apr 2021 09:42:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44546 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237043AbhDLNmM (ORCPT ); Mon, 12 Apr 2021 09:42:12 -0400 Received: from mail-io1-xd36.google.com (mail-io1-xd36.google.com [IPv6:2607:f8b0:4864:20::d36]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BE1E2C061574; Mon, 12 Apr 2021 06:41:54 -0700 (PDT) Received: by mail-io1-xd36.google.com with SMTP id v26so13459489iox.11; Mon, 12 Apr 2021 06:41:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=Pv38UteoXPGc9YXROMqdyiZjnIKpHuvd+rCQ+sbZeWw=; b=IgnsvOg1yc+DKw8WBbPTuGFqtyCK45AVOGjp7CUdDarvXkIV1poSdV+eQLDgcHxDX8 Kvz4nv3sE9Z8txCaFm6Ndroo5pPbrpSZsoCqj2eEK9gSs7icFybeHwkXzqyI5Kw9fV+x RK4S1ye3TnixqXv22X/w+CYQrVM4THdn1vMNtmM7f+kM57up82nKNlzola6F5LqheT0S S1G8hqz0525+dQX7t/7F5/MXkGv97BZHCe0PRHQ64R9yIBNWdxVVS0k+W6yafbdYiDQO SHpxtq+Lj3tVf8KW0UK2n/wGNiEj3SltZUBkx5v9nuQCIhU5HNQQa4aIbbH6vu3xEM3z OYKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=Pv38UteoXPGc9YXROMqdyiZjnIKpHuvd+rCQ+sbZeWw=; b=S9SLGTrR8Q13sUCWYLuccDT35NhmRgX16nD4IGAp96O63Uz/Pt6t6icjKGkkpRu1sF An9c+F/dtoQ2DnEdVvVHfBeR8moJalNFItm4FcwyNPQZMdAYoHYbWaI08GcbbhxBR/l3 F9ssb9bAfFMfUfKllaBHMjkrm5oMG/NSNWyYxK35IyDGsl9xgn/dDUa4DkfzT1hs/YOH OMsGWQrf+IJ2KzaK4y92vNVmi/1B3gr+u65Y4p75i5qEoPo4UeNennsge+Y9WyM1YWvJ F+Dlw0iwG3KKHecxrkyBwuNXJOClHHt2zarTWBMp0uK4+EqZq5DdaE97Ia+dZwsYU+lH idMw== X-Gm-Message-State: AOAM530jqvrnioVjx/1EdemXeBxA8JIVfERGp3U6xhtCVhVRldS/MxlE COqWvz2r0dDTkA3nPNayN8F409bqJVoHN4EAMyM= X-Google-Smtp-Source: ABdhPJyIRqHuaDnOp8+loeCg8vnJNjHw72xLypbdBBrx8vI6+21/qEwTHah2Nclx/TaTP2h1BcpOzUH+VGmoo5YxRzQ= X-Received: by 2002:a02:818b:: with SMTP id n11mr4899093jag.62.1618234913716; Mon, 12 Apr 2021 06:41:53 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a5d:8a0e:0:0:0:0:0 with HTTP; Mon, 12 Apr 2021 06:41:53 -0700 (PDT) In-Reply-To: References: <1618202061-8243-1-git-send-email-dillon.minfei@gmail.com> From: dillon min Date: Mon, 12 Apr 2021 21:41:53 +0800 Message-ID: Subject: Re: [Linux-stm32] [PATCH] serial: stm32: optimize spin lock usage To: Erwan LE RAY Cc: Greg KH , linux-serial@vger.kernel.org, Alexandre TORGUE , Linux Kernel Mailing List , Maxime Coquelin , jirislaby@kernel.org, linux-stm32@st-md-mailman.stormreply.com, Linux ARM , Fabrice Gasnier , Valentin Caron Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 4/12/21, Erwan LE RAY wrote: > Hi Dillon, > > Thanks for your patch. > > Could you please elaborate the use case in your commit message ? Sorry, local_irq_save() plus spin_lock() same to spin_lock_irqsave() There is no deadlock . Please ignore this patch. Thanks Dillon > > Best Regards, Erwan. > > On 4/12/21 10:54 AM, dillon min wrote: >> Hi Greg, >> >> On Mon, Apr 12, 2021 at 4:25 PM Greg KH >> wrote: >>> >>> On Mon, Apr 12, 2021 at 02:50:20PM +0800, dillon min wrote: >>>> Hi Greg=EF=BC=8C >>>> >>>> Thanks for the quick response, please ignore the last private mail. >>>> >>>> On Mon, Apr 12, 2021 at 1:52 PM Greg KH >>>> wrote: >>>>> >>>>> On Mon, Apr 12, 2021 at 12:34:21PM +0800, dillon.minfei@gmail.com >>>>> wrote: >>>>>> From: dillon min >>>>>> >>>>>> To avoid potential deadlock in spin_lock usage, change to use >>>>>> spin_lock_irqsave(), spin_unlock_irqrestore() in process(thread_fn) >>>>>> context. >>>>>> spin_lock(), spin_unlock() under handler context. >>>>>> >>>>>> remove unused local_irq_save/restore call. >>>>>> >>>>>> Signed-off-by: dillon min >>>>>> --- >>>>>> Was verified on stm32f469-disco board. need more test on stm32mp >>>>>> platform. >>>>>> >>>>>> drivers/tty/serial/stm32-usart.c | 27 +++++++++++++++++---------- >>>>>> 1 file changed, 17 insertions(+), 10 deletions(-) >>>>>> >>>>>> diff --git a/drivers/tty/serial/stm32-usart.c >>>>>> b/drivers/tty/serial/stm32-usart.c >>>>>> index b3675cf25a69..c4c859b34367 100644 >>>>>> --- a/drivers/tty/serial/stm32-usart.c >>>>>> +++ b/drivers/tty/serial/stm32-usart.c >>>>>> @@ -214,7 +214,7 @@ static void stm32_usart_receive_chars(struct >>>>>> uart_port *port, bool threaded) >>>>>> struct tty_port *tport =3D &port->state->port; >>>>>> struct stm32_port *stm32_port =3D to_stm32_port(port); >>>>>> const struct stm32_usart_offsets *ofs =3D >>>>>> &stm32_port->info->ofs; >>>>>> - unsigned long c; >>>>>> + unsigned long c, flags; >>>>>> u32 sr; >>>>>> char flag; >>>>>> >>>>>> @@ -276,9 +276,17 @@ static void stm32_usart_receive_chars(struct >>>>>> uart_port *port, bool threaded) >>>>>> uart_insert_char(port, sr, USART_SR_ORE, c, flag); >>>>>> } >>>>>> >>>>>> - spin_unlock(&port->lock); >>>>>> + if (threaded) >>>>>> + spin_unlock_irqrestore(&port->lock, flags); >>>>>> + else >>>>>> + spin_unlock(&port->lock); >>>>> >>>>> You shouldn't have to check for this, see the other patches on the >>>>> list >>>>> recently that fixed this up to not be an issue for irq handlers. >>>> Can you help to give more hints, or the commit id of the patch which >>>> fixed this. thanks. >>>> >>>> I'm still confused with this. >>>> >>>> The stm32_usart_threaded_interrupt() is a kthread context, once >>>> port->lock holds by this function, another serial interrupts raised, >>>> such as USART_SR_TXE,stm32_usart_interrupt() can't get the lock, >>>> there will be a deadlock. isn't it? >>>> >>>> So, shouldn't I use spin_lock{_irqsave} according to the caller's >>>> context ? >>> >>> Please see 81e2073c175b ("genirq: Disable interrupts for force threaded >>> handlers") for when threaded irq handlers have irqs disabled, isn't tha= t >>> the case you are trying to "protect" from here? >>> >>> Why is the "threaded" flag used at all? The driver should not care. >>> >>> Also see 9baedb7baeda ("serial: imx: drop workaround for forced irq >>> threading") in linux-next for an example of how this was fixed up in a >>> serial driver. >>> >>> does that help? >>> >> Yes, it's really helpful. and 81e2073c175b should be highlighted in a >> doc. >> In my past knowledge, we should care about hard irq & thread_fn lock >> conflict. >> This patch has totally avoided patching code in the separate driver side= . >> thanks. >> >> I will just keep the changes in stm32_usart_console_write(), remove >> these code in >> thread_fn. update version 2 for you. >> >> thanks. >> >> Dillon, >>> thanks, >>> >>> greg k-h >> _______________________________________________ >> Linux-stm32 mailing list >> Linux-stm32@st-md-mailman.stormreply.com >> https://st-md-mailman.stormreply.com/mailman/listinfo/linux-stm32 >> > 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.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,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 83A13C43460 for ; Mon, 12 Apr 2021 13:43:21 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 08CE8610CB for ; Mon, 12 Apr 2021 13:43:20 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 08CE8610CB Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.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=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From:References: In-Reply-To:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=fr2jq2lGvVBtNMKgDh8HqpdVGbO08guZbHs8RhAZPMw=; b=NDB9b/TT8J4f7mEg6O1mfaANS YdNkLv2msp9qwNuDKVC6uGdgD5OM9B/NYi/CfQDGPj8iwD3QjF6paNvwL3TCAMNTdxLOa5pEdDJIG CsLZma4UssUwgaJRfNSRZovU9Y+zLAwyAqqxbQf5mHXI7WfAXQCriCjHYKaxR6VQdudbfsDZ5GLrz 1KMeAsWLg28cCbe2cqK+KkNREc4KL+w+WODAkFAO8K2C5K+K5LHdmbZzuqbgoMgJet7JU83sTaLVc c/U0JVavBsvThgmcR+m0/hBvtqX2ptO6Z0R2qN6vQ4sSiT1qXg++/zChua0uIGoBx/Um53dUyQ2tP ZvdV7VcRA==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lVwpF-006sLt-70; Mon, 12 Apr 2021 13:42:01 +0000 Received: from bombadil.infradead.org ([2607:7c80:54:e::133]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lVwpC-006sLZ-9w for linux-arm-kernel@desiato.infradead.org; Mon, 12 Apr 2021 13:41:58 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: Content-Type:Cc:To:Subject:Message-ID:Date:From:References:In-Reply-To: MIME-Version:Sender:Reply-To:Content-ID:Content-Description; bh=Pv38UteoXPGc9YXROMqdyiZjnIKpHuvd+rCQ+sbZeWw=; b=pfYTBcPJpaLATXZYjnbdxqbH6p /UrpMZqpStxavd9yP9EUPrdtxpyhrz3Qc4o16DDd/n1SBsshU2kOR6i8sncK/LhudTeOApLstuuTN E1cZh3HDU+kzCBdrkKG4QxU3oDn3dVQZfTgpwfXNSiYdwbRASpKlgx3lfkV1vM5V4Oe0yNzTvmxGM eEIxLVzdA7zg+96nmAJd/r9+pz0IBk3mq2vZfKVdf+32DyL1Qtrd+TjRMdp2eF/nWtjAHpFzJDmZX XkBKcZp/wYWFgLWBEHta9ocLEUe1tgcoatCSHOFbJZM6tQIOGWsCISUVrWTKSrqUcR5sCSDJ0ksAX mRcGbttw==; Received: from mail-io1-xd33.google.com ([2607:f8b0:4864:20::d33]) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lVwp9-006H8F-EW for linux-arm-kernel@lists.infradead.org; Mon, 12 Apr 2021 13:41:57 +0000 Received: by mail-io1-xd33.google.com with SMTP id b10so13466504iot.4 for ; Mon, 12 Apr 2021 06:41:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=Pv38UteoXPGc9YXROMqdyiZjnIKpHuvd+rCQ+sbZeWw=; b=IgnsvOg1yc+DKw8WBbPTuGFqtyCK45AVOGjp7CUdDarvXkIV1poSdV+eQLDgcHxDX8 Kvz4nv3sE9Z8txCaFm6Ndroo5pPbrpSZsoCqj2eEK9gSs7icFybeHwkXzqyI5Kw9fV+x RK4S1ye3TnixqXv22X/w+CYQrVM4THdn1vMNtmM7f+kM57up82nKNlzola6F5LqheT0S S1G8hqz0525+dQX7t/7F5/MXkGv97BZHCe0PRHQ64R9yIBNWdxVVS0k+W6yafbdYiDQO SHpxtq+Lj3tVf8KW0UK2n/wGNiEj3SltZUBkx5v9nuQCIhU5HNQQa4aIbbH6vu3xEM3z OYKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=Pv38UteoXPGc9YXROMqdyiZjnIKpHuvd+rCQ+sbZeWw=; b=AuWxIQL3pcGpawojl95CmuvzboejK/j2Cq9fq2hOIrA6v4JkzfZd0UIsGwkVJAlOHn Eoe4V51EWomtLfgX8RH5srxRHY7h+iK6TOe5xGuHKbmUvwC4xRUJFbsRn7F776j7oCWj WvysMTZrbyIdLZjKpbh43R2rUuSo5V+pOhjUh2xlMPEXWGR4xBQxBxndDwzV/98eircp qwzlBhDA0NAiuYzmAuhXYqLzAKAKA9RYhad59YoHcTX1bLLUyHRUgmwjgxlme9UyXY/8 r85PlLryx+h2uh6fYuAFwgeIRU/bDi3WCzwsZWNiHXRWh+CL+rQbjH5lGPH+kDHLR+vw zf3A== X-Gm-Message-State: AOAM530KwJ8/9J/r+pwqROFg5CMfjWR+qcYyitcdPba2WaBP54+30WpS A5Th2UH04UlTOwgFybu4Rf0D8w1KWPRXH0PY6Y0= X-Google-Smtp-Source: ABdhPJyIRqHuaDnOp8+loeCg8vnJNjHw72xLypbdBBrx8vI6+21/qEwTHah2Nclx/TaTP2h1BcpOzUH+VGmoo5YxRzQ= X-Received: by 2002:a02:818b:: with SMTP id n11mr4899093jag.62.1618234913716; Mon, 12 Apr 2021 06:41:53 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a5d:8a0e:0:0:0:0:0 with HTTP; Mon, 12 Apr 2021 06:41:53 -0700 (PDT) In-Reply-To: References: <1618202061-8243-1-git-send-email-dillon.minfei@gmail.com> From: dillon min Date: Mon, 12 Apr 2021 21:41:53 +0800 Message-ID: Subject: Re: [Linux-stm32] [PATCH] serial: stm32: optimize spin lock usage To: Erwan LE RAY Cc: Greg KH , linux-serial@vger.kernel.org, Alexandre TORGUE , Linux Kernel Mailing List , Maxime Coquelin , jirislaby@kernel.org, linux-stm32@st-md-mailman.stormreply.com, Linux ARM , Fabrice Gasnier , Valentin Caron X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210412_064155_514744_8BB1DDB7 X-CRM114-Status: GOOD ( 26.81 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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 T24gNC8xMi8yMSwgRXJ3YW4gTEUgUkFZIDxlcndhbi5sZXJheUBmb3NzLnN0LmNvbT4gd3JvdGU6 Cj4gSGkgRGlsbG9uLAo+Cj4gVGhhbmtzIGZvciB5b3VyIHBhdGNoLgo+Cj4gQ291bGQgeW91IHBs ZWFzZSBlbGFib3JhdGUgdGhlIHVzZSBjYXNlIGluIHlvdXIgY29tbWl0IG1lc3NhZ2UgPwoKU29y cnksIGxvY2FsX2lycV9zYXZlKCkgcGx1cyBzcGluX2xvY2soKSBzYW1lIHRvIHNwaW5fbG9ja19p cnFzYXZlKCkKVGhlcmUgaXMgbm8gZGVhZGxvY2sgLiBQbGVhc2UgaWdub3JlIHRoaXMgcGF0Y2gu CgpUaGFua3MKCkRpbGxvbgo+Cj4gQmVzdCBSZWdhcmRzLCBFcndhbi4KPgo+IE9uIDQvMTIvMjEg MTA6NTQgQU0sIGRpbGxvbiBtaW4gd3JvdGU6Cj4+IEhpIEdyZWcsCj4+Cj4+IE9uIE1vbiwgQXBy IDEyLCAyMDIxIGF0IDQ6MjUgUE0gR3JlZyBLSCA8Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+ Cj4+IHdyb3RlOgo+Pj4KPj4+IE9uIE1vbiwgQXByIDEyLCAyMDIxIGF0IDAyOjUwOjIwUE0gKzA4 MDAsIGRpbGxvbiBtaW4gd3JvdGU6Cj4+Pj4gSGkgR3JlZ++8jAo+Pj4+Cj4+Pj4gVGhhbmtzIGZv ciB0aGUgcXVpY2sgcmVzcG9uc2UsIHBsZWFzZSBpZ25vcmUgdGhlIGxhc3QgcHJpdmF0ZSBtYWls Lgo+Pj4+Cj4+Pj4gT24gTW9uLCBBcHIgMTIsIDIwMjEgYXQgMTo1MiBQTSBHcmVnIEtIIDxncmVn a2hAbGludXhmb3VuZGF0aW9uLm9yZz4KPj4+PiB3cm90ZToKPj4+Pj4KPj4+Pj4gT24gTW9uLCBB cHIgMTIsIDIwMjEgYXQgMTI6MzQ6MjFQTSArMDgwMCwgZGlsbG9uLm1pbmZlaUBnbWFpbC5jb20K Pj4+Pj4gd3JvdGU6Cj4+Pj4+PiBGcm9tOiBkaWxsb24gbWluIDxkaWxsb24ubWluZmVpQGdtYWls LmNvbT4KPj4+Pj4+Cj4+Pj4+PiBUbyBhdm9pZCBwb3RlbnRpYWwgZGVhZGxvY2sgaW4gc3Bpbl9s b2NrIHVzYWdlLCBjaGFuZ2UgdG8gdXNlCj4+Pj4+PiBzcGluX2xvY2tfaXJxc2F2ZSgpLCBzcGlu X3VubG9ja19pcnFyZXN0b3JlKCkgaW4gcHJvY2Vzcyh0aHJlYWRfZm4pCj4+Pj4+PiBjb250ZXh0 Lgo+Pj4+Pj4gc3Bpbl9sb2NrKCksIHNwaW5fdW5sb2NrKCkgdW5kZXIgaGFuZGxlciBjb250ZXh0 Lgo+Pj4+Pj4KPj4+Pj4+IHJlbW92ZSB1bnVzZWQgbG9jYWxfaXJxX3NhdmUvcmVzdG9yZSBjYWxs Lgo+Pj4+Pj4KPj4+Pj4+IFNpZ25lZC1vZmYtYnk6IGRpbGxvbiBtaW4gPGRpbGxvbi5taW5mZWlA Z21haWwuY29tPgo+Pj4+Pj4gLS0tCj4+Pj4+PiBXYXMgdmVyaWZpZWQgb24gc3RtMzJmNDY5LWRp c2NvIGJvYXJkLiBuZWVkIG1vcmUgdGVzdCBvbiBzdG0zMm1wCj4+Pj4+PiBwbGF0Zm9ybS4KPj4+ Pj4+Cj4+Pj4+PiAgIGRyaXZlcnMvdHR5L3NlcmlhbC9zdG0zMi11c2FydC5jIHwgMjcgKysrKysr KysrKysrKysrKystLS0tLS0tLS0tCj4+Pj4+PiAgIDEgZmlsZSBjaGFuZ2VkLCAxNyBpbnNlcnRp b25zKCspLCAxMCBkZWxldGlvbnMoLSkKPj4+Pj4+Cj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy90dHkvc2VyaWFsL3N0bTMyLXVzYXJ0LmMKPj4+Pj4+IGIvZHJpdmVycy90dHkvc2VyaWFsL3N0 bTMyLXVzYXJ0LmMKPj4+Pj4+IGluZGV4IGIzNjc1Y2YyNWE2OS4uYzRjODU5YjM0MzY3IDEwMDY0 NAo+Pj4+Pj4gLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL3N0bTMyLXVzYXJ0LmMKPj4+Pj4+ICsr KyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zdG0zMi11c2FydC5jCj4+Pj4+PiBAQCAtMjE0LDcgKzIx NCw3IEBAIHN0YXRpYyB2b2lkIHN0bTMyX3VzYXJ0X3JlY2VpdmVfY2hhcnMoc3RydWN0Cj4+Pj4+ PiB1YXJ0X3BvcnQgKnBvcnQsIGJvb2wgdGhyZWFkZWQpCj4+Pj4+PiAgICAgICAgc3RydWN0IHR0 eV9wb3J0ICp0cG9ydCA9ICZwb3J0LT5zdGF0ZS0+cG9ydDsKPj4+Pj4+ICAgICAgICBzdHJ1Y3Qg c3RtMzJfcG9ydCAqc3RtMzJfcG9ydCA9IHRvX3N0bTMyX3BvcnQocG9ydCk7Cj4+Pj4+PiAgICAg ICAgY29uc3Qgc3RydWN0IHN0bTMyX3VzYXJ0X29mZnNldHMgKm9mcyA9Cj4+Pj4+PiAmc3RtMzJf cG9ydC0+aW5mby0+b2ZzOwo+Pj4+Pj4gLSAgICAgdW5zaWduZWQgbG9uZyBjOwo+Pj4+Pj4gKyAg ICAgdW5zaWduZWQgbG9uZyBjLCBmbGFnczsKPj4+Pj4+ICAgICAgICB1MzIgc3I7Cj4+Pj4+PiAg ICAgICAgY2hhciBmbGFnOwo+Pj4+Pj4KPj4+Pj4+IEBAIC0yNzYsOSArMjc2LDE3IEBAIHN0YXRp YyB2b2lkIHN0bTMyX3VzYXJ0X3JlY2VpdmVfY2hhcnMoc3RydWN0Cj4+Pj4+PiB1YXJ0X3BvcnQg KnBvcnQsIGJvb2wgdGhyZWFkZWQpCj4+Pj4+PiAgICAgICAgICAgICAgICB1YXJ0X2luc2VydF9j aGFyKHBvcnQsIHNyLCBVU0FSVF9TUl9PUkUsIGMsIGZsYWcpOwo+Pj4+Pj4gICAgICAgIH0KPj4+ Pj4+Cj4+Pj4+PiAtICAgICBzcGluX3VubG9jaygmcG9ydC0+bG9jayk7Cj4+Pj4+PiArICAgICBp ZiAodGhyZWFkZWQpCj4+Pj4+PiArICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JnBvcnQtPmxvY2ssIGZsYWdzKTsKPj4+Pj4+ICsgICAgIGVsc2UKPj4+Pj4+ICsgICAgICAgICAg ICAgc3Bpbl91bmxvY2soJnBvcnQtPmxvY2spOwo+Pj4+Pgo+Pj4+PiBZb3Ugc2hvdWxkbid0IGhh dmUgdG8gY2hlY2sgZm9yIHRoaXMsIHNlZSB0aGUgb3RoZXIgcGF0Y2hlcyBvbiB0aGUKPj4+Pj4g bGlzdAo+Pj4+PiByZWNlbnRseSB0aGF0IGZpeGVkIHRoaXMgdXAgdG8gbm90IGJlIGFuIGlzc3Vl IGZvciBpcnEgaGFuZGxlcnMuCj4+Pj4gQ2FuIHlvdSBoZWxwIHRvIGdpdmUgbW9yZSBoaW50cywg b3IgdGhlIGNvbW1pdCBpZCBvZiB0aGUgcGF0Y2ggd2hpY2gKPj4+PiBmaXhlZCB0aGlzLiB0aGFu a3MuCj4+Pj4KPj4+PiBJJ20gc3RpbGwgY29uZnVzZWQgd2l0aCB0aGlzLgo+Pj4+Cj4+Pj4gVGhl IHN0bTMyX3VzYXJ0X3RocmVhZGVkX2ludGVycnVwdCgpIGlzIGEga3RocmVhZCBjb250ZXh0LCBv bmNlCj4+Pj4gcG9ydC0+bG9jayBob2xkcyBieSB0aGlzIGZ1bmN0aW9uLCBhbm90aGVyIHNlcmlh bCBpbnRlcnJ1cHRzIHJhaXNlZCwKPj4+PiBzdWNoIGFzIFVTQVJUX1NSX1RYRSxzdG0zMl91c2Fy dF9pbnRlcnJ1cHQoKSBjYW4ndCBnZXQgdGhlIGxvY2ssCj4+Pj4gdGhlcmUgd2lsbCBiZSBhIGRl YWRsb2NrLiBpc24ndCBpdD8KPj4+Pgo+Pj4+ICAgU28sIHNob3VsZG4ndCBJIHVzZSBzcGluX2xv Y2t7X2lycXNhdmV9IGFjY29yZGluZyB0byB0aGUgY2FsbGVyJ3MKPj4+PiBjb250ZXh0ID8KPj4+ Cj4+PiBQbGVhc2Ugc2VlIDgxZTIwNzNjMTc1YiAoImdlbmlycTogRGlzYWJsZSBpbnRlcnJ1cHRz IGZvciBmb3JjZSB0aHJlYWRlZAo+Pj4gaGFuZGxlcnMiKSBmb3Igd2hlbiB0aHJlYWRlZCBpcnEg aGFuZGxlcnMgaGF2ZSBpcnFzIGRpc2FibGVkLCBpc24ndCB0aGF0Cj4+PiB0aGUgY2FzZSB5b3Ug YXJlIHRyeWluZyB0byAicHJvdGVjdCIgZnJvbSBoZXJlPwo+Pj4KPj4+IFdoeSBpcyB0aGUgInRo cmVhZGVkIiBmbGFnIHVzZWQgYXQgYWxsPyAgVGhlIGRyaXZlciBzaG91bGQgbm90IGNhcmUuCj4+ Pgo+Pj4gQWxzbyBzZWUgOWJhZWRiN2JhZWRhICgic2VyaWFsOiBpbXg6IGRyb3Agd29ya2Fyb3Vu ZCBmb3IgZm9yY2VkIGlycQo+Pj4gdGhyZWFkaW5nIikgaW4gbGludXgtbmV4dCBmb3IgYW4gZXhh bXBsZSBvZiBob3cgdGhpcyB3YXMgZml4ZWQgdXAgaW4gYQo+Pj4gc2VyaWFsIGRyaXZlci4KPj4+ Cj4+PiBkb2VzIHRoYXQgaGVscD8KPj4+Cj4+IFllcywgaXQncyByZWFsbHkgaGVscGZ1bC4gYW5k IDgxZTIwNzNjMTc1YiBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQgaW4gYQo+PiBkb2MuCj4+IEluIG15 IHBhc3Qga25vd2xlZGdlLCB3ZSBzaG91bGQgY2FyZSBhYm91dCBoYXJkIGlycSAmIHRocmVhZF9m biBsb2NrCj4+IGNvbmZsaWN0Lgo+PiBUaGlzIHBhdGNoIGhhcyB0b3RhbGx5IGF2b2lkZWQgcGF0 Y2hpbmcgY29kZSBpbiB0aGUgc2VwYXJhdGUgZHJpdmVyIHNpZGUuCj4+IHRoYW5rcy4KPj4KPj4g SSB3aWxsIGp1c3Qga2VlcCB0aGUgY2hhbmdlcyBpbiBzdG0zMl91c2FydF9jb25zb2xlX3dyaXRl KCksIHJlbW92ZQo+PiB0aGVzZSBjb2RlIGluCj4+IHRocmVhZF9mbi4gdXBkYXRlIHZlcnNpb24g MiBmb3IgeW91Lgo+Pgo+PiB0aGFua3MuCj4+Cj4+IERpbGxvbiwKPj4+IHRoYW5rcywKPj4+Cj4+ PiBncmVnIGstaAo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwo+PiBMaW51eC1zdG0zMiBtYWlsaW5nIGxpc3QKPj4gTGludXgtc3RtMzJAc3QtbWQtbWFp bG1hbi5zdG9ybXJlcGx5LmNvbQo+PiBodHRwczovL3N0LW1kLW1haWxtYW4uc3Rvcm1yZXBseS5j b20vbWFpbG1hbi9saXN0aW5mby9saW51eC1zdG0zMgo+Pgo+CgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlz dApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==