From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 966A6C636D7 for ; Thu, 23 Feb 2023 10:25:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232906AbjBWKZW (ORCPT ); Thu, 23 Feb 2023 05:25:22 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58426 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233863AbjBWKZO (ORCPT ); Thu, 23 Feb 2023 05:25:14 -0500 Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [IPv6:2a00:1450:4864:20::42d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 19A7A2A147 for ; Thu, 23 Feb 2023 02:25:12 -0800 (PST) Received: by mail-wr1-x42d.google.com with SMTP id l1so9984874wry.10 for ; Thu, 23 Feb 2023 02:25:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=ILsJiQmAcGMco7NUgLTOCX0TG7re8hDAG5iO8fvr7a4=; b=TK8kcnTC+nImoJL65VRAhunMg8vM1exizc22cs8DXr1R/r+n/iyvPS49NLhUmQ8+VC +B7R2hVboQeqG5v6DjQxyIAVXIrILn0Uil5bHPLmuI5KjpMkRQB9IaFfUS/vmW21j4CS qYP3gxyi6uj4GIrnI5LbW/Xq/u0g9u42o8fHrG396hg6YwlkWvE3ELRThjZ48V+gjv3R kcUSVpid1pNlrQq0e1kFj9gRb3zPXCl7k7P0TIXvKvbhO85UFnR+Y9FibEAYNn1WVIWQ SbmMfGOp1B/9XGq8zgnROx3QR2oX98MpiKl8358NoJ0m+dXsoe840h6k3I3oupYQTnhv 6v/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ILsJiQmAcGMco7NUgLTOCX0TG7re8hDAG5iO8fvr7a4=; b=fF19Ms5cPuWsJgqoaqT+7HlI2jeSKL16HdKWuilpijmMgWYHgYlLSYPHp+sTGyaN9l ibl6sWVG7JuzP063pqboSnhkiXETDcq5151ZWjNOOl6AS28/sEwcyIWmEjgSx/a7Znpp DFyhZN4kQnmPdhlPxR0Z5VBCFnllU29wbvrfwVObkcfKSExgmq5UePGUhYjZun32zNpc lI1riJ0wzAzvO2XGtp/4QzjX+gdBJH5kGgLpEFhlj+GdMdrdnN1JqJ3EC/8B1+mcyv01 VfNWeJ/ekYO5OXK8E+c7q+qKX4GuL3to+OMNp+9mDKIcwZ+rV0AK8iWPzduI2jspnMoR FtOg== X-Gm-Message-State: AO0yUKX2G+qbE2nwa4mXCHlcjIaAfdnpGA914FuJpgRkwdMA97Mw8Ze5 LRbvWL9hLzcz0e/94tNXbeK2KA== X-Google-Smtp-Source: AK7set8DT7LYGd+BggBMdTTvDzh5kJcrtERcWSp8PmQ4OJsHb5Ia4iNw4ehu6zGRRm2nkiAsnY+I9Q== X-Received: by 2002:a5d:6789:0:b0:2c5:5ed8:77d4 with SMTP id v9-20020a5d6789000000b002c55ed877d4mr8570791wru.57.1677147910458; Thu, 23 Feb 2023 02:25:10 -0800 (PST) Received: from [192.168.1.195] ([5.133.47.210]) by smtp.googlemail.com with ESMTPSA id m4-20020a05600c40c400b003e223fe0a3asm10943246wmh.27.2023.02.23.02.25.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 23 Feb 2023 02:25:09 -0800 (PST) Message-ID: <7e3170e4-c530-0b5b-903f-e5ea6d8268dc@linaro.org> Date: Thu, 23 Feb 2023 10:25:06 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Subject: Re: [PATCH v10 07/26] mailbox: Add Gunyah message queue mailbox Content-Language: en-US To: Elliot Berman , Alex Elder , Prakruthi Deepak Heragu , Jonathan Corbet , Jassi Brar Cc: Murali Nalajala , Trilok Soni , Srivatsa Vaddagiri , Carl van Schaik , Dmitry Baryshkov , Bjorn Andersson , Konrad Dybcio , Arnd Bergmann , Greg Kroah-Hartman , Rob Herring , Krzysztof Kozlowski , Bagas Sanjaya , Catalin Marinas , linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-arm-kernel@lists.infradead.org References: <20230214211229.3239350-1-quic_eberman@quicinc.com> <20230214212316.3309053-1-quic_eberman@quicinc.com> <576aed85-a566-3645-559e-06b2135cf57f@quicinc.com> From: Srinivas Kandagatla In-Reply-To: <576aed85-a566-3645-559e-06b2135cf57f@quicinc.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org On 23/02/2023 00:15, Elliot Berman wrote: > > > On 2/20/2023 5:59 AM, Srinivas Kandagatla wrote: >> >> >> On 14/02/2023 21:23, Elliot Berman wrote: >>> Gunyah message queues are a unidirectional inter-VM pipe for messages up >>> to 1024 bytes. This driver supports pairing a receiver message queue and >>> a transmitter message queue to expose a single mailbox channel. >>> >>> Signed-off-by: Elliot Berman >>> --- >>>   Documentation/virt/gunyah/message-queue.rst |   8 + >>>   drivers/mailbox/Makefile                   |   2 + >>>   drivers/mailbox/gunyah-msgq.c               | 214 ++++++++++++++++++++ >>>   include/linux/gunyah.h                      |  56 +++++ >>>   4 files changed, 280 insertions(+) >>>   create mode 100644 drivers/mailbox/gunyah-msgq.c >>> >>> diff --git a/Documentation/virt/gunyah/message-queue.rst >>> b/Documentation/virt/gunyah/message-queue.rst >>> index 0667b3eb1ff9..082085e981e0 100644 >>> --- a/Documentation/virt/gunyah/message-queue.rst >>> +++ b/Documentation/virt/gunyah/message-queue.rst >>> @@ -59,3 +59,11 @@ vIRQ: two TX message queues will have two vIRQs >>> (and two capability IDs). >>>         |               |         |                 | |               | >>>         |               |         |                 | |               | >>>         +---------------+         +-----------------+ +---------------+ >>> + >>> +Gunyah message queues are exposed as mailboxes. To create the >>> mailbox, create >>> +a mbox_client and call `gh_msgq_init`. On receipt of the RX_READY >>> interrupt, >>> +all messages in the RX message queue are read and pushed via the >>> `rx_callback` >>> +of the registered mbox_client. >>> + >>> +.. kernel-doc:: drivers/mailbox/gunyah-msgq.c >>> +   :identifiers: gh_msgq_init >>> diff --git a/drivers/mailbox/Makefile b/drivers/mailbox/Makefile >>> index fc9376117111..5f929bb55e9a 100644 >>> --- a/drivers/mailbox/Makefile >>> +++ b/drivers/mailbox/Makefile >>> @@ -55,6 +55,8 @@ obj-$(CONFIG_MTK_CMDQ_MBOX)    += mtk-cmdq-mailbox.o >>>   obj-$(CONFIG_ZYNQMP_IPI_MBOX)    += zynqmp-ipi-mailbox.o >>> +obj-$(CONFIG_GUNYAH)        += gunyah-msgq.o >> >> Why are we reusing CONFIG_GUNYAH Kconfig symbol for mailbox, why not >> CONFIG_GUNYAH_MBOX? >> > > There was some previous discussion about this: > > https://lore.kernel.org/all/2a7bb5f2-1286-b661-659a-a5037150eae8@quicinc.com/ > >>> + >>>   obj-$(CONFIG_SUN6I_MSGBOX)    += sun6i-msgbox.o >>>   obj-$(CONFIG_SPRD_MBOX)       += sprd-mailbox.o >>> diff --git a/drivers/mailbox/gunyah-msgq.c >>> b/drivers/mailbox/gunyah-msgq.c >>> new file mode 100644 >>> index 000000000000..03ffaa30ce9b >>> --- /dev/null >>> +++ b/drivers/mailbox/gunyah-msgq.c >>> @@ -0,0 +1,214 @@ >>> +// SPDX-License-Identifier: GPL-2.0-only >>> +/* >>> + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All >>> rights reserved. >>> + */ >>> + >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >> >> ... >> >>> +/* Fired when message queue transitions from "full" to "space >>> available" to send messages */ >>> +static irqreturn_t gh_msgq_tx_irq_handler(int irq, void *data) >>> +{ >>> +    struct gh_msgq *msgq = data; >>> + >>> +    mbox_chan_txdone(gh_msgq_chan(msgq), 0); >>> + >>> +    return IRQ_HANDLED; >>> +} >>> + >>> +/* Fired after sending message and hypercall told us there was more >>> space available. */ >>> +static void gh_msgq_txdone_tasklet(struct tasklet_struct *tasklet) >> >> Tasklets have been long deprecated, consider using workqueues in this >> particular case. >> > > Workqueues have higher latency and tasklets came as recommendation from > Jassi. drivers/mailbox/imx-mailbox.c uses tasklets in the same way. > > I did some quick unscientific measurements of ~1000x samples. The median > latency for resource manager went from 25.5 us (tasklet) to 26 us > (workqueue) (2% slower). The mean went from 28.7 us to 32.5 us (13% > slower). Obviously, the outliers for workqueues were much more extreme. TBH, this is expected because we are only testing resource manager, Note the advantage that you will see shifting from tasket to workqueues is on overall system latencies and some drivers performance that need to react to events. please take some time to read this nice article about this https://lwn.net/Articles/830964/ --srini > >> >>> +{ >>> +    struct gh_msgq *msgq = container_of(tasklet, struct gh_msgq, >>> txdone_tasklet); >>> + >>> +    mbox_chan_txdone(gh_msgq_chan(msgq), msgq->last_ret); >>> +} >>> + >>> +static int gh_msgq_send_data(struct mbox_chan *chan, void *data) >>> +{ >> .. >> >>> +    tasklet_schedule(&msgq->txdone_tasklet); >>> + >>> +    return 0; >>> +} >>> + >>> +static struct mbox_chan_ops gh_msgq_ops = { >>> +    .send_data = gh_msgq_send_data, >>> +}; >>> + >>> +/** >>> + * gh_msgq_init() - Initialize a Gunyah message queue with an >>> mbox_client >>> + * @parent: optional, device parent used for the mailbox controller >>> + * @msgq: Pointer to the gh_msgq to initialize >>> + * @cl: A mailbox client to bind to the mailbox channel that the >>> message queue creates >>> + * @tx_ghrsc: optional, the transmission side of the message queue >>> + * @rx_ghrsc: optional, the receiving side of the message queue >>> + * >>> + * At least one of tx_ghrsc and rx_ghrsc should be not NULL. Most >>> message queue use cases come with >>> + * a pair of message queues to facilitate bidirectional >>> communication. When tx_ghrsc is set, >>> + * the client can send messages with >>> mbox_send_message(gh_msgq_chan(msgq), msg). When rx_ghrsc >>> + * is set, the mbox_client should register an .rx_callback() and the >>> message queue driver will >>> + * push all available messages upon receiving the RX ready >>> interrupt. The messages should be >>> + * consumed or copied by the client right away as the >>> gh_msgq_rx_data will be replaced/destroyed >>> + * after the callback. >>> + * >>> + * Returns - 0 on success, negative otherwise >>> + */ >>> +int gh_msgq_init(struct device *parent, struct gh_msgq *msgq, struct >>> mbox_client *cl, >>> +             struct gunyah_resource *tx_ghrsc, struct >>> gunyah_resource *rx_ghrsc) >>> +{ >>> +    int ret; >>> + >>> +    /* Must have at least a tx_ghrsc or rx_ghrsc and that they are >>> the right device types */ >>> +    if ((!tx_ghrsc && !rx_ghrsc) || >>> +        (tx_ghrsc && tx_ghrsc->type != GUNYAH_RESOURCE_TYPE_MSGQ_TX) || >>> +        (rx_ghrsc && rx_ghrsc->type != GUNYAH_RESOURCE_TYPE_MSGQ_RX)) >>> +        return -EINVAL; >>> + >>> +    if (gh_api_version() != GUNYAH_API_V1) { >>> +        pr_err("Unrecognized gunyah version: %u. Currently >>> supported: %d\n", >> dev_err(parent >> >> would make this more useful >> > > Done. > > - Elliot From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5ACE2C636D6 for ; Thu, 23 Feb 2023 10:26:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=KZfoG5SIFl4ZYFoBN2L2Bhfve9pBHSCRu8gSL19P2to=; b=ih9HIwlujVIqhG rH7xhW96gffmD6rDxoiQYMXb5w67IJ7g9xCM1c0YIqU9e+nJj7qB16408eSmU3hTN+CgCgZJzfKf4 O/gOckJlW4f8qGt3jYmb4h5ljGVMtJXnp41nIwxXGyo42tseeIUPzulNPWOdF72G1GIfxw0mIxb2K OO9RJOyWjmqI58vBiFts6ZG21gEd7gZLQx0Hh6IVcVVprgttBkc9KKW4C9qOBENpZXTakc/bpzRCB POjd3uN7Lpuj+B49Qhf7YPaAMykaG+7zBdQCacaunODL0tI63XCI5AQymfs0MkxB0H/t4fWGTp8wn nn0dcghfuCS47ZJsmwQQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pV8mq-00FvtC-HP; Thu, 23 Feb 2023 10:25:16 +0000 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pV8mm-00Fvr7-HU for linux-arm-kernel@lists.infradead.org; Thu, 23 Feb 2023 10:25:14 +0000 Received: by mail-wr1-x436.google.com with SMTP id r7so10100679wrz.6 for ; Thu, 23 Feb 2023 02:25:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=ILsJiQmAcGMco7NUgLTOCX0TG7re8hDAG5iO8fvr7a4=; b=TK8kcnTC+nImoJL65VRAhunMg8vM1exizc22cs8DXr1R/r+n/iyvPS49NLhUmQ8+VC +B7R2hVboQeqG5v6DjQxyIAVXIrILn0Uil5bHPLmuI5KjpMkRQB9IaFfUS/vmW21j4CS qYP3gxyi6uj4GIrnI5LbW/Xq/u0g9u42o8fHrG396hg6YwlkWvE3ELRThjZ48V+gjv3R kcUSVpid1pNlrQq0e1kFj9gRb3zPXCl7k7P0TIXvKvbhO85UFnR+Y9FibEAYNn1WVIWQ SbmMfGOp1B/9XGq8zgnROx3QR2oX98MpiKl8358NoJ0m+dXsoe840h6k3I3oupYQTnhv 6v/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ILsJiQmAcGMco7NUgLTOCX0TG7re8hDAG5iO8fvr7a4=; b=LVAjME8tKV0RG3pwTtqCqJlKolN57wNgej1oZ/m2RBOrdwjAO0s3iU/LF2O4FscPaI bfIg+4O+K2lIm8whm9BP5acEQAFc6U5nXY1Cha3ri+fmSMYrx4s96CxfSJ4Y3kjKAI15 2gWOU6WNWWuoRqJipv8Do7xAMl/rzDnGAdqhAMZuFbWBozBhib+qbTvfDa05iNYNKy/j 6B+W7Q7arTFbEx65L600y2ddZUytEgKCRaWYiBcYKZyj2vu8+BDdZA3dKg4O9yB3ZsY3 fyWp8OHAe/UxhbAoytWeP/qDw6k12MAPn6QD7QO2qL1AFlPDXQxWDrfuYIgpXKfEWLiv 7Zow== X-Gm-Message-State: AO0yUKX5hI/Yjuy+znToELwztFmMTNf1lpy5NICQsJIwTvo6nndUS0oM 5zBCgvLHT6HstG64QsVdOuC6Vw== X-Google-Smtp-Source: AK7set8DT7LYGd+BggBMdTTvDzh5kJcrtERcWSp8PmQ4OJsHb5Ia4iNw4ehu6zGRRm2nkiAsnY+I9Q== X-Received: by 2002:a5d:6789:0:b0:2c5:5ed8:77d4 with SMTP id v9-20020a5d6789000000b002c55ed877d4mr8570791wru.57.1677147910458; Thu, 23 Feb 2023 02:25:10 -0800 (PST) Received: from [192.168.1.195] ([5.133.47.210]) by smtp.googlemail.com with ESMTPSA id m4-20020a05600c40c400b003e223fe0a3asm10943246wmh.27.2023.02.23.02.25.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 23 Feb 2023 02:25:09 -0800 (PST) Message-ID: <7e3170e4-c530-0b5b-903f-e5ea6d8268dc@linaro.org> Date: Thu, 23 Feb 2023 10:25:06 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Subject: Re: [PATCH v10 07/26] mailbox: Add Gunyah message queue mailbox Content-Language: en-US To: Elliot Berman , Alex Elder , Prakruthi Deepak Heragu , Jonathan Corbet , Jassi Brar Cc: Murali Nalajala , Trilok Soni , Srivatsa Vaddagiri , Carl van Schaik , Dmitry Baryshkov , Bjorn Andersson , Konrad Dybcio , Arnd Bergmann , Greg Kroah-Hartman , Rob Herring , Krzysztof Kozlowski , Bagas Sanjaya , Catalin Marinas , linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-arm-kernel@lists.infradead.org References: <20230214211229.3239350-1-quic_eberman@quicinc.com> <20230214212316.3309053-1-quic_eberman@quicinc.com> <576aed85-a566-3645-559e-06b2135cf57f@quicinc.com> From: Srinivas Kandagatla In-Reply-To: <576aed85-a566-3645-559e-06b2135cf57f@quicinc.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230223_022512_619540_DDAFDB65 X-CRM114-Status: GOOD ( 30.39 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiAyMy8wMi8yMDIzIDAwOjE1LCBFbGxpb3QgQmVybWFuIHdyb3RlOgo+IAo+IAo+IE9uIDIv MjAvMjAyMyA1OjU5IEFNLCBTcmluaXZhcyBLYW5kYWdhdGxhIHdyb3RlOgo+Pgo+Pgo+PiBPbiAx NC8wMi8yMDIzIDIxOjIzLCBFbGxpb3QgQmVybWFuIHdyb3RlOgo+Pj4gR3VueWFoIG1lc3NhZ2Ug cXVldWVzIGFyZSBhIHVuaWRpcmVjdGlvbmFsIGludGVyLVZNIHBpcGUgZm9yIG1lc3NhZ2VzIHVw Cj4+PiB0byAxMDI0IGJ5dGVzLiBUaGlzIGRyaXZlciBzdXBwb3J0cyBwYWlyaW5nIGEgcmVjZWl2 ZXIgbWVzc2FnZSBxdWV1ZSBhbmQKPj4+IGEgdHJhbnNtaXR0ZXIgbWVzc2FnZSBxdWV1ZSB0byBl eHBvc2UgYSBzaW5nbGUgbWFpbGJveCBjaGFubmVsLgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IEVs bGlvdCBCZXJtYW4gPHF1aWNfZWJlcm1hbkBxdWljaW5jLmNvbT4KPj4+IC0tLQo+Pj4gwqAgRG9j dW1lbnRhdGlvbi92aXJ0L2d1bnlhaC9tZXNzYWdlLXF1ZXVlLnJzdCB8wqDCoCA4ICsKPj4+IMKg IGRyaXZlcnMvbWFpbGJveC9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgfMKgwqAgMiArCj4+PiDCoCBkcml2ZXJzL21haWxib3gvZ3VueWFoLW1zZ3EuY8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCAyMTQgKysrKysrKysrKysrKysrKysrKysKPj4+IMKg IGluY2x1ZGUvbGludXgvZ3VueWFoLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfMKgIDU2ICsrKysrCj4+PiDCoCA0IGZpbGVzIGNoYW5nZWQsIDI4MCBpbnNlcnRp b25zKCspCj4+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tYWlsYm94L2d1bnlhaC1t c2dxLmMKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2d1bnlhaC9tZXNz YWdlLXF1ZXVlLnJzdCAKPj4+IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2d1bnlhaC9tZXNzYWdlLXF1 ZXVlLnJzdAo+Pj4gaW5kZXggMDY2N2IzZWIxZmY5Li4wODIwODVlOTgxZTAgMTAwNjQ0Cj4+PiAt LS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQvZ3VueWFoL21lc3NhZ2UtcXVldWUucnN0Cj4+PiArKysg Yi9Eb2N1bWVudGF0aW9uL3ZpcnQvZ3VueWFoL21lc3NhZ2UtcXVldWUucnN0Cj4+PiBAQCAtNTks MyArNTksMTEgQEAgdklSUTogdHdvIFRYIG1lc3NhZ2UgcXVldWVzIHdpbGwgaGF2ZSB0d28gdklS UXMgCj4+PiAoYW5kIHR3byBjYXBhYmlsaXR5IElEcykuCj4+PiDCoMKgwqDCoMKgwqDCoCB8wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoMKgwqDCoMKgwqDCoCB8wqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgfCB8wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8Cj4+ PiDCoMKgwqDCoMKgwqDCoCB8wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoMKgwqDC oMKgwqDCoCB8wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCB8wqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB8Cj4+PiDCoMKgwqDCoMKgwqDCoCArLS0tLS0tLS0tLS0tLS0tK8Kg wqDCoMKgwqDCoMKgwqAgKy0tLS0tLS0tLS0tLS0tLS0tKyArLS0tLS0tLS0tLS0tLS0tKwo+Pj4g Kwo+Pj4gK0d1bnlhaCBtZXNzYWdlIHF1ZXVlcyBhcmUgZXhwb3NlZCBhcyBtYWlsYm94ZXMuIFRv IGNyZWF0ZSB0aGUgCj4+PiBtYWlsYm94LCBjcmVhdGUKPj4+ICthIG1ib3hfY2xpZW50IGFuZCBj YWxsIGBnaF9tc2dxX2luaXRgLiBPbiByZWNlaXB0IG9mIHRoZSBSWF9SRUFEWSAKPj4+IGludGVy cnVwdCwKPj4+ICthbGwgbWVzc2FnZXMgaW4gdGhlIFJYIG1lc3NhZ2UgcXVldWUgYXJlIHJlYWQg YW5kIHB1c2hlZCB2aWEgdGhlIAo+Pj4gYHJ4X2NhbGxiYWNrYAo+Pj4gK29mIHRoZSByZWdpc3Rl cmVkIG1ib3hfY2xpZW50Lgo+Pj4gKwo+Pj4gKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL21haWxi b3gvZ3VueWFoLW1zZ3EuYwo+Pj4gK8KgwqAgOmlkZW50aWZpZXJzOiBnaF9tc2dxX2luaXQKPj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL21haWxib3gvTWFrZWZpbGUgYi9kcml2ZXJzL21haWxib3gv TWFrZWZpbGUKPj4+IGluZGV4IGZjOTM3NjExNzExMS4uNWY5MjliYjU1ZTlhIDEwMDY0NAo+Pj4g LS0tIGEvZHJpdmVycy9tYWlsYm94L01ha2VmaWxlCj4+PiArKysgYi9kcml2ZXJzL21haWxib3gv TWFrZWZpbGUKPj4+IEBAIC01NSw2ICs1NSw4IEBAIG9iai0kKENPTkZJR19NVEtfQ01EUV9NQk9Y KcKgwqDCoCArPSBtdGstY21kcS1tYWlsYm94Lm8KPj4+IMKgIG9iai0kKENPTkZJR19aWU5RTVBf SVBJX01CT1gpwqDCoMKgICs9IHp5bnFtcC1pcGktbWFpbGJveC5vCj4+PiArb2JqLSQoQ09ORklH X0dVTllBSCnCoMKgwqDCoMKgwqDCoCArPSBndW55YWgtbXNncS5vCj4+Cj4+IFdoeSBhcmUgd2Ug cmV1c2luZyBDT05GSUdfR1VOWUFIIEtjb25maWcgc3ltYm9sIGZvciBtYWlsYm94LCB3aHkgbm90 IAo+PiBDT05GSUdfR1VOWUFIX01CT1g/Cj4+Cj4gCj4gVGhlcmUgd2FzIHNvbWUgcHJldmlvdXMg ZGlzY3Vzc2lvbiBhYm91dCB0aGlzOgo+IAo+IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2FsbC8y YTdiYjVmMi0xMjg2LWI2NjEtNjU5YS1hNTAzNzE1MGVhZThAcXVpY2luYy5jb20vCj4gCj4+PiAr Cj4+PiDCoCBvYmotJChDT05GSUdfU1VONklfTVNHQk9YKcKgwqDCoCArPSBzdW42aS1tc2dib3gu bwo+Pj4gwqAgb2JqLSQoQ09ORklHX1NQUkRfTUJPWCnCoMKgwqDCoMKgwqDCoCs9IHNwcmQtbWFp bGJveC5vCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWlsYm94L2d1bnlhaC1tc2dxLmMgCj4+ PiBiL2RyaXZlcnMvbWFpbGJveC9ndW55YWgtbXNncS5jCj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wM2ZmYWEzMGNlOWIKPj4+IC0tLSAvZGV2L251bGwK Pj4+ICsrKyBiL2RyaXZlcnMvbWFpbGJveC9ndW55YWgtbXNncS5jCj4+PiBAQCAtMCwwICsxLDIx NCBAQAo+Pj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPj4+ICsv Kgo+Pj4gKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDIzIFF1YWxjb21tIElubm92YXRpb24gQ2Vu dGVyLCBJbmMuIEFsbCAKPj4+IHJpZ2h0cyByZXNlcnZlZC4KPj4+ICsgKi8KPj4+ICsKPj4+ICsj aW5jbHVkZSA8bGludXgvbWFpbGJveF9jb250cm9sbGVyLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4 L21vZHVsZS5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPj4+ICsjaW5jbHVk ZSA8bGludXgvZ3VueWFoLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L3ByaW50ay5oPgo+Pj4gKyNp bmNsdWRlIDxsaW51eC9pbml0Lmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPj4+ICsj aW5jbHVkZSA8bGludXgvd2FpdC5oPgo+Pgo+PiAuLi4KPj4KPj4+ICsvKiBGaXJlZCB3aGVuIG1l c3NhZ2UgcXVldWUgdHJhbnNpdGlvbnMgZnJvbSAiZnVsbCIgdG8gInNwYWNlIAo+Pj4gYXZhaWxh YmxlIiB0byBzZW5kIG1lc3NhZ2VzICovCj4+PiArc3RhdGljIGlycXJldHVybl90IGdoX21zZ3Ff dHhfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKPj4+ICt7Cj4+PiArwqDCoMKgIHN0 cnVjdCBnaF9tc2dxICptc2dxID0gZGF0YTsKPj4+ICsKPj4+ICvCoMKgwqAgbWJveF9jaGFuX3R4 ZG9uZShnaF9tc2dxX2NoYW4obXNncSksIDApOwo+Pj4gKwo+Pj4gK8KgwqDCoCByZXR1cm4gSVJR X0hBTkRMRUQ7Cj4+PiArfQo+Pj4gKwo+Pj4gKy8qIEZpcmVkIGFmdGVyIHNlbmRpbmcgbWVzc2Fn ZSBhbmQgaHlwZXJjYWxsIHRvbGQgdXMgdGhlcmUgd2FzIG1vcmUgCj4+PiBzcGFjZSBhdmFpbGFi bGUuICovCj4+PiArc3RhdGljIHZvaWQgZ2hfbXNncV90eGRvbmVfdGFza2xldChzdHJ1Y3QgdGFz a2xldF9zdHJ1Y3QgKnRhc2tsZXQpCj4+Cj4+IFRhc2tsZXRzIGhhdmUgYmVlbiBsb25nIGRlcHJl Y2F0ZWQsIGNvbnNpZGVyIHVzaW5nIHdvcmtxdWV1ZXMgaW4gdGhpcyAKPj4gcGFydGljdWxhciBj YXNlLgo+Pgo+IAo+IFdvcmtxdWV1ZXMgaGF2ZSBoaWdoZXIgbGF0ZW5jeSBhbmQgdGFza2xldHMg Y2FtZSBhcyByZWNvbW1lbmRhdGlvbiBmcm9tIAo+IEphc3NpLiBkcml2ZXJzL21haWxib3gvaW14 LW1haWxib3guYyB1c2VzIHRhc2tsZXRzIGluIHRoZSBzYW1lIHdheS4KPiAKPiBJIGRpZCBzb21l IHF1aWNrIHVuc2NpZW50aWZpYyBtZWFzdXJlbWVudHMgb2YgfjEwMDB4IHNhbXBsZXMuIFRoZSBt ZWRpYW4gCj4gbGF0ZW5jeSBmb3IgcmVzb3VyY2UgbWFuYWdlciB3ZW50IGZyb20gMjUuNSB1cyAo dGFza2xldCkgdG8gMjYgdXMgCj4gKHdvcmtxdWV1ZSkgKDIlIHNsb3dlcikuIFRoZSBtZWFuIHdl bnQgZnJvbSAyOC43IHVzIHRvIDMyLjUgdXMgKDEzJSAKPiBzbG93ZXIpLiBPYnZpb3VzbHksIHRo ZSBvdXRsaWVycyBmb3Igd29ya3F1ZXVlcyB3ZXJlIG11Y2ggbW9yZSBleHRyZW1lLgoKVEJILCB0 aGlzIGlzIGV4cGVjdGVkIGJlY2F1c2Ugd2UgYXJlIG9ubHkgdGVzdGluZyByZXNvdXJjZSBtYW5h Z2VyLCBOb3RlIAogIHRoZSBhZHZhbnRhZ2UgdGhhdCB5b3Ugd2lsbCBzZWUgc2hpZnRpbmcgZnJv bSB0YXNrZXQgdG8gd29ya3F1ZXVlcyBpcyAKb24gb3ZlcmFsbCBzeXN0ZW0gbGF0ZW5jaWVzIGFu ZCBzb21lIGRyaXZlcnMgcGVyZm9ybWFuY2UgdGhhdCBuZWVkIHRvIApyZWFjdCB0byBldmVudHMu CgpwbGVhc2UgdGFrZSBzb21lIHRpbWUgdG8gcmVhZCB0aGlzIG5pY2UgYXJ0aWNsZSBhYm91dCB0 aGlzIApodHRwczovL2x3bi5uZXQvQXJ0aWNsZXMvODMwOTY0LwoKCi0tc3JpbmkKPiAKPj4KPj4+ ICt7Cj4+PiArwqDCoMKgIHN0cnVjdCBnaF9tc2dxICptc2dxID0gY29udGFpbmVyX29mKHRhc2ts ZXQsIHN0cnVjdCBnaF9tc2dxLCAKPj4+IHR4ZG9uZV90YXNrbGV0KTsKPj4+ICsKPj4+ICvCoMKg wqAgbWJveF9jaGFuX3R4ZG9uZShnaF9tc2dxX2NoYW4obXNncSksIG1zZ3EtPmxhc3RfcmV0KTsK Pj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBnaF9tc2dxX3NlbmRfZGF0YShzdHJ1Y3QgbWJv eF9jaGFuICpjaGFuLCB2b2lkICpkYXRhKQo+Pj4gK3sKPj4gLi4KPj4KPj4+ICvCoMKgwqAgdGFz a2xldF9zY2hlZHVsZSgmbXNncS0+dHhkb25lX3Rhc2tsZXQpOwo+Pj4gKwo+Pj4gK8KgwqDCoCBy ZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHN0cnVjdCBtYm94X2NoYW5fb3BzIGdo X21zZ3Ffb3BzID0gewo+Pj4gK8KgwqDCoCAuc2VuZF9kYXRhID0gZ2hfbXNncV9zZW5kX2RhdGEs Cj4+PiArfTsKPj4+ICsKPj4+ICsvKioKPj4+ICsgKiBnaF9tc2dxX2luaXQoKSAtIEluaXRpYWxp emUgYSBHdW55YWggbWVzc2FnZSBxdWV1ZSB3aXRoIGFuIAo+Pj4gbWJveF9jbGllbnQKPj4+ICsg KiBAcGFyZW50OiBvcHRpb25hbCwgZGV2aWNlIHBhcmVudCB1c2VkIGZvciB0aGUgbWFpbGJveCBj b250cm9sbGVyCj4+PiArICogQG1zZ3E6IFBvaW50ZXIgdG8gdGhlIGdoX21zZ3EgdG8gaW5pdGlh bGl6ZQo+Pj4gKyAqIEBjbDogQSBtYWlsYm94IGNsaWVudCB0byBiaW5kIHRvIHRoZSBtYWlsYm94 IGNoYW5uZWwgdGhhdCB0aGUgCj4+PiBtZXNzYWdlIHF1ZXVlIGNyZWF0ZXMKPj4+ICsgKiBAdHhf Z2hyc2M6IG9wdGlvbmFsLCB0aGUgdHJhbnNtaXNzaW9uIHNpZGUgb2YgdGhlIG1lc3NhZ2UgcXVl dWUKPj4+ICsgKiBAcnhfZ2hyc2M6IG9wdGlvbmFsLCB0aGUgcmVjZWl2aW5nIHNpZGUgb2YgdGhl IG1lc3NhZ2UgcXVldWUKPj4+ICsgKgo+Pj4gKyAqIEF0IGxlYXN0IG9uZSBvZiB0eF9naHJzYyBh bmQgcnhfZ2hyc2Mgc2hvdWxkIGJlIG5vdCBOVUxMLiBNb3N0IAo+Pj4gbWVzc2FnZSBxdWV1ZSB1 c2UgY2FzZXMgY29tZSB3aXRoCj4+PiArICogYSBwYWlyIG9mIG1lc3NhZ2UgcXVldWVzIHRvIGZh Y2lsaXRhdGUgYmlkaXJlY3Rpb25hbCAKPj4+IGNvbW11bmljYXRpb24uIFdoZW4gdHhfZ2hyc2Mg aXMgc2V0LAo+Pj4gKyAqIHRoZSBjbGllbnQgY2FuIHNlbmQgbWVzc2FnZXMgd2l0aCAKPj4+IG1i b3hfc2VuZF9tZXNzYWdlKGdoX21zZ3FfY2hhbihtc2dxKSwgbXNnKS4gV2hlbiByeF9naHJzYwo+ Pj4gKyAqIGlzIHNldCwgdGhlIG1ib3hfY2xpZW50IHNob3VsZCByZWdpc3RlciBhbiAucnhfY2Fs bGJhY2soKSBhbmQgdGhlIAo+Pj4gbWVzc2FnZSBxdWV1ZSBkcml2ZXIgd2lsbAo+Pj4gKyAqIHB1 c2ggYWxsIGF2YWlsYWJsZSBtZXNzYWdlcyB1cG9uIHJlY2VpdmluZyB0aGUgUlggcmVhZHkgCj4+ PiBpbnRlcnJ1cHQuIFRoZSBtZXNzYWdlcyBzaG91bGQgYmUKPj4+ICsgKiBjb25zdW1lZCBvciBj b3BpZWQgYnkgdGhlIGNsaWVudCByaWdodCBhd2F5IGFzIHRoZSAKPj4+IGdoX21zZ3FfcnhfZGF0 YSB3aWxsIGJlIHJlcGxhY2VkL2Rlc3Ryb3llZAo+Pj4gKyAqIGFmdGVyIHRoZSBjYWxsYmFjay4K Pj4+ICsgKgo+Pj4gKyAqIFJldHVybnMgLSAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG90aGVyd2lz ZQo+Pj4gKyAqLwo+Pj4gK2ludCBnaF9tc2dxX2luaXQoc3RydWN0IGRldmljZSAqcGFyZW50LCBz dHJ1Y3QgZ2hfbXNncSAqbXNncSwgc3RydWN0IAo+Pj4gbWJveF9jbGllbnQgKmNsLAo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZ3VueWFoX3Jlc291cmNlICp0eF9naHJzYywg c3RydWN0IAo+Pj4gZ3VueWFoX3Jlc291cmNlICpyeF9naHJzYykKPj4+ICt7Cj4+PiArwqDCoMKg IGludCByZXQ7Cj4+PiArCj4+PiArwqDCoMKgIC8qIE11c3QgaGF2ZSBhdCBsZWFzdCBhIHR4X2do cnNjIG9yIHJ4X2docnNjIGFuZCB0aGF0IHRoZXkgYXJlIAo+Pj4gdGhlIHJpZ2h0IGRldmljZSB0 eXBlcyAqLwo+Pj4gK8KgwqDCoCBpZiAoKCF0eF9naHJzYyAmJiAhcnhfZ2hyc2MpIHx8Cj4+PiAr wqDCoMKgwqDCoMKgwqAgKHR4X2docnNjICYmIHR4X2docnNjLT50eXBlICE9IEdVTllBSF9SRVNP VVJDRV9UWVBFX01TR1FfVFgpIHx8Cj4+PiArwqDCoMKgwqDCoMKgwqAgKHJ4X2docnNjICYmIHJ4 X2docnNjLT50eXBlICE9IEdVTllBSF9SRVNPVVJDRV9UWVBFX01TR1FfUlgpKQo+Pj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+Pj4gKwo+Pj4gK8KgwqDCoCBpZiAoZ2hfYXBpX3Zl cnNpb24oKSAhPSBHVU5ZQUhfQVBJX1YxKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCJV bnJlY29nbml6ZWQgZ3VueWFoIHZlcnNpb246ICV1LiBDdXJyZW50bHkgCj4+PiBzdXBwb3J0ZWQ6 ICVkXG4iLAo+PiBkZXZfZXJyKHBhcmVudAo+Pgo+PiB3b3VsZCBtYWtlIHRoaXMgbW9yZSB1c2Vm dWwKPj4KPiAKPiBEb25lLgo+IAo+IC0gRWxsaW90CgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51 eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5v cmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==