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=-13.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,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 2685CC43460 for ; Thu, 20 May 2021 17:47:48 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 7A9D9613CB for ; Thu, 20 May 2021 17:47:47 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7A9D9613CB Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 087366F4C3; Thu, 20 May 2021 17:47:46 +0000 (UTC) Received: from mail-oi1-x230.google.com (mail-oi1-x230.google.com [IPv6:2607:f8b0:4864:20::230]) by gabe.freedesktop.org (Postfix) with ESMTPS id CA7B46E426 for ; Thu, 20 May 2021 17:47:44 +0000 (UTC) Received: by mail-oi1-x230.google.com with SMTP id v22so17193661oic.2 for ; Thu, 20 May 2021 10:47:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=ZK4C1ZMjA5KMUn9fV16l158Em1297An8k5K5kzPQ0+8=; b=bmdDOvXrNsV/G8wepvFct/wt2MCTFHJ6w+egGRgK7qvlvVD2mseMBW+YvPoyaVG6gW Z3LrG88NA7+R03gWpSyMRX6UR6tDAyE+ZNeSrmN3GHX95c4P/idFVKEYIPhXaxil48i8 kRgbA8FaqetC1S6Yx+GqLW7JRwqs6C2W4P7u4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=ZK4C1ZMjA5KMUn9fV16l158Em1297An8k5K5kzPQ0+8=; b=gw+0cDoK+CIVMBzSnThwn7/BUV9/j7ERwqB73mCYsv4nS8yYH9gwKzarlNzBU9i/8Z +oucX7Ldl+vcqM0b9NfkXDlLtivB2lPEEwxcnub68h1d8L75d2K0uukoB7iCjjNQjdeH +o1KK30A3uSSXzaJ9lO8BjboaVdW79hVlD3Xs9UL1KLrao8/WBQSZimPC+CExj/UPVLk DIru4H3xrCRdkEnuc9RYtb8h5o0Wljc8peao88aPkwTcW86yTk0NwG4O3T+zEA3iQETu 2iSxjmLEhKFARSvGk9CeRDgDaKgUEmD7xV+xHu0TtLjez3z+5v5tH1Q4+CnW9d6lJYUx juYA== X-Gm-Message-State: AOAM530zBoCaH6XbQ3amRApHV/mVHiqjk8Kq5RjP8N07LW+hzAxNznft tf7Eznel1VVylHOWKB42ub+/Zpwi8cw4t91jGcre1w== X-Google-Smtp-Source: ABdhPJyqct35jkUxZkKBcvnaFDKBSNvfsCP7nDv6Jf9Sojv55TTu5SDFJdEbiy6Mb1IccOnTSasaGqN9xldb8/RvZ+A= X-Received: by 2002:aca:f4c5:: with SMTP id s188mr1869236oih.128.1621532864171; Thu, 20 May 2021 10:47:44 -0700 (PDT) MIME-Version: 1.0 References: <20210520151254.959958-1-tvrtko.ursulin@linux.intel.com> <20210520151254.959958-8-tvrtko.ursulin@linux.intel.com> <38a6d339-bca5-13f0-1cc8-db96f1b587bb@amd.com> In-Reply-To: <38a6d339-bca5-13f0-1cc8-db96f1b587bb@amd.com> From: Daniel Vetter Date: Thu, 20 May 2021 19:47:32 +0200 Message-ID: Subject: Re: [RFC 7/7] drm/i915: Expose client engine utilisation via fdinfo To: =?UTF-8?Q?Christian_K=C3=B6nig?= Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tvrtko Ursulin , "Intel-gfx@lists.freedesktop.org" , Tvrtko Ursulin , "dri-devel@lists.freedesktop.org" , "Nieto, David M" Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On Thu, May 20, 2021 at 6:31 PM Christian K=C3=B6nig wrote: > > Yeah, having the timestamp is a good idea as well. > > drm-driver: i915 > > I think we should rather add something like printing file_operations->own= er->name to the common fdinfo code. > > This way we would have something common for all drivers in the system. I'= m just not sure if that also works if they are compiled into the kernel. Yeah common code could print driver name, busid and all that stuff. I think the common code should also provide some helpers for the key: value pair formatting (and maybe check for all lower-case and stuff like that) because if we don't then this is going to be a complete mess that's not parseable. And value should be real semantic stuff, not "here's a string". So accumulated time as a struct ktime as the example. -Daniel > Regards, > Christian. > > Am 20.05.21 um 18:26 schrieb Nieto, David M: > > [AMD Official Use Only] > > > i would like to add a unit marker for the stats that we monitor in the fd= , as we discussed currently we are displaying the usage percentage, because= we wanted to to provide single query percentages, but this may evolve with= time. > > May I suggest to add two new fields > > drm-stat-interval: <64 bit> ns > drm-stat-timestamp: <64 bit> ns > > If interval is set, engine utilization is calculated by doing =3D 100*/ > if interval is not set, two reads are needed : =3D 100* / > > > Regards, > > David > > > ________________________________ > From: Tvrtko Ursulin > Sent: Thursday, May 20, 2021 8:12 AM > To: Intel-gfx@lists.freedesktop.org > Cc: dri-devel@lists.freedesktop.org ; Tv= rtko Ursulin ; Nieto, David M ; Koenig, Christian ; Daniel Vetter > Subject: [RFC 7/7] drm/i915: Expose client engine utilisation via fdinfo > > From: Tvrtko Ursulin > > Similar to AMD commit > 874442541133 ("drm/amdgpu: Add show_fdinfo() interface"), using the > infrastructure added in previous patches, we add basic client info > and GPU engine utilisation for i915. > > Example of the output: > > pos: 0 > flags: 0100002 > mnt_id: 21 > drm-driver: i915 > drm-pdev: 0000:00:02.0 > drm-client-id: 7 > drm-engine-render: 9288864723 ns > drm-engine-copy: 2035071108 ns > drm-engine-video: 0 ns > drm-engine-video-enhance: 0 ns > > DRM related fields are appropriately prefixed for easy parsing and > separation from generic fdinfo fields. > > Idea is for some fields to become either fully or partially standardised > in order to enable writting of generic top-like tools. > > Initial proposal for fully standardised common fields: > > drm-driver: > drm-pdev: > > Optional fully standardised: > > drm-client-id: > > Optional partially standardised: > > engine-: ns > memory-: KiB > > Once agreed the format would need to go to some README or kerneldoc in > DRM core. > > Signed-off-by: Tvrtko Ursulin > Cc: David M Nieto > Cc: Christian K=C3=B6nig > Cc: Daniel Vetter > --- > drivers/gpu/drm/i915/i915_drm_client.c | 68 ++++++++++++++++++++++++++ > drivers/gpu/drm/i915/i915_drm_client.h | 4 ++ > drivers/gpu/drm/i915/i915_drv.c | 3 ++ > 3 files changed, 75 insertions(+) > > diff --git a/drivers/gpu/drm/i915/i915_drm_client.c b/drivers/gpu/drm/i91= 5/i915_drm_client.c > index 1e5db7753276..5e9cfba1116b 100644 > --- a/drivers/gpu/drm/i915/i915_drm_client.c > +++ b/drivers/gpu/drm/i915/i915_drm_client.c > @@ -9,6 +9,11 @@ > > #include > > +#include > + > +#include "gem/i915_gem_context.h" > +#include "gt/intel_engine_user.h" > + > #include "i915_drm_client.h" > #include "i915_drv.h" > #include "i915_gem.h" > @@ -168,3 +173,66 @@ void i915_drm_clients_fini(struct i915_drm_clients *= clients) > > xa_destroy(&clients->xarray); > } > + > +#ifdef CONFIG_PROC_FS > +static const char * const uabi_class_names[] =3D { > + [I915_ENGINE_CLASS_RENDER] =3D "render", > + [I915_ENGINE_CLASS_COPY] =3D "copy", > + [I915_ENGINE_CLASS_VIDEO] =3D "video", > + [I915_ENGINE_CLASS_VIDEO_ENHANCE] =3D "video-enhance", > +}; > + > +static u64 busy_add(struct i915_gem_context *ctx, unsigned int class) > +{ > + struct i915_gem_engines_iter it; > + struct intel_context *ce; > + u64 total =3D 0; > + > + for_each_gem_engine(ce, rcu_dereference(ctx->engines), it) { > + if (ce->engine->uabi_class !=3D class) > + continue; > + > + total +=3D intel_context_get_total_runtime_ns(ce); > + } > + > + return total; > +} > + > +static void > +show_client_class(struct seq_file *m, > + struct i915_drm_client *client, > + unsigned int class) > +{ > + const struct list_head *list =3D &client->ctx_list; > + u64 total =3D atomic64_read(&client->past_runtime[class]); > + struct i915_gem_context *ctx; > + > + rcu_read_lock(); > + list_for_each_entry_rcu(ctx, list, client_link) > + total +=3D busy_add(ctx, class); > + rcu_read_unlock(); > + > + return seq_printf(m, "drm-engine-%s:\t%llu ns\n", > + uabi_class_names[class], total); > +} > + > +void i915_drm_client_fdinfo(struct seq_file *m, struct file *f) > +{ > + struct drm_file *file =3D f->private_data; > + struct drm_i915_file_private *file_priv =3D file->driver_priv; > + struct drm_i915_private *i915 =3D file_priv->dev_priv; > + struct i915_drm_client *client =3D file_priv->client; > + struct pci_dev *pdev =3D to_pci_dev(i915->drm.dev); > + unsigned int i; > + > + seq_printf(m, "drm-driver:\ti915\n"); > + seq_printf(m, "drm-pdev:\t%04x:%02x:%02x.%d\n", > + pci_domain_nr(pdev->bus), pdev->bus->number, > + PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn)); > + > + seq_printf(m, "drm-client-id:\t%u\n", client->id); > + > + for (i =3D 0; i < ARRAY_SIZE(uabi_class_names); i++) > + show_client_class(m, client, i); > +} > +#endif > diff --git a/drivers/gpu/drm/i915/i915_drm_client.h b/drivers/gpu/drm/i91= 5/i915_drm_client.h > index b2b69d6985e4..9885002433a0 100644 > --- a/drivers/gpu/drm/i915/i915_drm_client.h > +++ b/drivers/gpu/drm/i915/i915_drm_client.h > @@ -98,6 +98,10 @@ i915_drm_client_pid(const struct i915_drm_client *clie= nt) > return __i915_drm_client_name(client)->pid; > } > > +#ifdef CONFIG_PROC_FS > +void i915_drm_client_fdinfo(struct seq_file *m, struct file *f); > +#endif > + > void i915_drm_clients_fini(struct i915_drm_clients *clients); > > #endif /* !__I915_DRM_CLIENT_H__ */ > diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_= drv.c > index 33eb7b52b58b..6b63fe4b3c26 100644 > --- a/drivers/gpu/drm/i915/i915_drv.c > +++ b/drivers/gpu/drm/i915/i915_drv.c > @@ -1694,6 +1694,9 @@ static const struct file_operations i915_driver_fop= s =3D { > .read =3D drm_read, > .compat_ioctl =3D i915_ioc32_compat_ioctl, > .llseek =3D noop_llseek, > +#ifdef CONFIG_PROC_FS > + .show_fdinfo =3D i915_drm_client_fdinfo, > +#endif > }; > > static int > -- > 2.30.2 > > --=20 Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch 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=-13.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,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 1411AC433B4 for ; Thu, 20 May 2021 17:47:47 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 F3A82613C8 for ; Thu, 20 May 2021 17:47:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F3A82613C8 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5E9BC89ADC; Thu, 20 May 2021 17:47:45 +0000 (UTC) Received: from mail-oi1-x22b.google.com (mail-oi1-x22b.google.com [IPv6:2607:f8b0:4864:20::22b]) by gabe.freedesktop.org (Postfix) with ESMTPS id C8AA389ADC for ; Thu, 20 May 2021 17:47:44 +0000 (UTC) Received: by mail-oi1-x22b.google.com with SMTP id s19so17154080oic.7 for ; Thu, 20 May 2021 10:47:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=ZK4C1ZMjA5KMUn9fV16l158Em1297An8k5K5kzPQ0+8=; b=bmdDOvXrNsV/G8wepvFct/wt2MCTFHJ6w+egGRgK7qvlvVD2mseMBW+YvPoyaVG6gW Z3LrG88NA7+R03gWpSyMRX6UR6tDAyE+ZNeSrmN3GHX95c4P/idFVKEYIPhXaxil48i8 kRgbA8FaqetC1S6Yx+GqLW7JRwqs6C2W4P7u4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=ZK4C1ZMjA5KMUn9fV16l158Em1297An8k5K5kzPQ0+8=; b=HgdMV7WTrai/nRo6n/wKaJX/4DhQADTUKI2Qpk7oxlXlYmLAHEjjZS78JGgTcE1PfY 4OMiLThaKdHK2WUcRVN8O+sxEss6Tn86fvZAHlwLjEYypMoPvn5OtBnqmsagNOwFuidh djLIr8EtY+DnUHePRgWpBrhkgHSvx/hsquB4ic3PRdL66LdRCu2ezEi/ppVUorRV/NFQ ctKgmYaEX6OfBH6CRAtKDCZ3I9HqLrSLzhxtlG8FaMTITq1nIQwi2ZAif/bZLl62UKs0 6TSpX8Ad4gOFhLBlCYKvfxsHFNJpWqHJ0zoMPesV44+hlYZ2a5sg2oFd1IPujij/0Eqy 1SKQ== X-Gm-Message-State: AOAM533Mn0MmmTl+PYDphF2Fyeamb5OLJLgWQwskKYMmJHPmHcjyyf50 1iaF+c7XTy1fd/ElOpinpgKfe6TwlTtiLPp2sUYyxg== X-Google-Smtp-Source: ABdhPJyqct35jkUxZkKBcvnaFDKBSNvfsCP7nDv6Jf9Sojv55TTu5SDFJdEbiy6Mb1IccOnTSasaGqN9xldb8/RvZ+A= X-Received: by 2002:aca:f4c5:: with SMTP id s188mr1869236oih.128.1621532864171; Thu, 20 May 2021 10:47:44 -0700 (PDT) MIME-Version: 1.0 References: <20210520151254.959958-1-tvrtko.ursulin@linux.intel.com> <20210520151254.959958-8-tvrtko.ursulin@linux.intel.com> <38a6d339-bca5-13f0-1cc8-db96f1b587bb@amd.com> In-Reply-To: <38a6d339-bca5-13f0-1cc8-db96f1b587bb@amd.com> From: Daniel Vetter Date: Thu, 20 May 2021 19:47:32 +0200 Message-ID: To: =?UTF-8?Q?Christian_K=C3=B6nig?= Subject: Re: [Intel-gfx] [RFC 7/7] drm/i915: Expose client engine utilisation via fdinfo X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Intel-gfx@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" , "Nieto, David M" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gVGh1LCBNYXkgMjAsIDIwMjEgYXQgNjozMSBQTSBDaHJpc3RpYW4gS8O2bmlnCjxjaHJpc3Rp YW4ua29lbmlnQGFtZC5jb20+IHdyb3RlOgo+Cj4gWWVhaCwgaGF2aW5nIHRoZSB0aW1lc3RhbXAg aXMgYSBnb29kIGlkZWEgYXMgd2VsbC4KPgo+ICAgZHJtLWRyaXZlcjogaTkxNQo+Cj4gSSB0aGlu ayB3ZSBzaG91bGQgcmF0aGVyIGFkZCBzb21ldGhpbmcgbGlrZSBwcmludGluZyBmaWxlX29wZXJh dGlvbnMtPm93bmVyLT5uYW1lIHRvIHRoZSBjb21tb24gZmRpbmZvIGNvZGUuCj4KPiBUaGlzIHdh eSB3ZSB3b3VsZCBoYXZlIHNvbWV0aGluZyBjb21tb24gZm9yIGFsbCBkcml2ZXJzIGluIHRoZSBz eXN0ZW0uIEknbSBqdXN0IG5vdCBzdXJlIGlmIHRoYXQgYWxzbyB3b3JrcyBpZiB0aGV5IGFyZSBj b21waWxlZCBpbnRvIHRoZSBrZXJuZWwuCgpZZWFoIGNvbW1vbiBjb2RlIGNvdWxkIHByaW50IGRy aXZlciBuYW1lLCBidXNpZCBhbmQgYWxsIHRoYXQgc3R1ZmYuIEkKdGhpbmsgdGhlIGNvbW1vbiBj b2RlIHNob3VsZCBhbHNvIHByb3ZpZGUgc29tZSBoZWxwZXJzIGZvciB0aGUga2V5Ogp2YWx1ZSBw YWlyIGZvcm1hdHRpbmcgKGFuZCBtYXliZSBjaGVjayBmb3IgYWxsIGxvd2VyLWNhc2UgYW5kIHN0 dWZmCmxpa2UgdGhhdCkgYmVjYXVzZSBpZiB3ZSBkb24ndCB0aGVuIHRoaXMgaXMgZ29pbmcgdG8g YmUgYSBjb21wbGV0ZQptZXNzIHRoYXQncyBub3QgcGFyc2VhYmxlLgoKQW5kIHZhbHVlIHNob3Vs ZCBiZSByZWFsIHNlbWFudGljIHN0dWZmLCBub3QgImhlcmUncyBhIHN0cmluZyIuIFNvCmFjY3Vt dWxhdGVkIHRpbWUgYXMgYSBzdHJ1Y3Qga3RpbWUgYXMgdGhlIGV4YW1wbGUuCi1EYW5pZWwKCj4g UmVnYXJkcywKPiBDaHJpc3RpYW4uCj4KPiBBbSAyMC4wNS4yMSB1bSAxODoyNiBzY2hyaWViIE5p ZXRvLCBEYXZpZCBNOgo+Cj4gW0FNRCBPZmZpY2lhbCBVc2UgT25seV0KPgo+Cj4gaSB3b3VsZCBs aWtlIHRvIGFkZCBhIHVuaXQgbWFya2VyIGZvciB0aGUgc3RhdHMgdGhhdCB3ZSBtb25pdG9yIGlu IHRoZSBmZCwgYXMgd2UgZGlzY3Vzc2VkIGN1cnJlbnRseSB3ZSBhcmUgZGlzcGxheWluZyB0aGUg dXNhZ2UgcGVyY2VudGFnZSwgYmVjYXVzZSB3ZSB3YW50ZWQgdG8gdG8gcHJvdmlkZSBzaW5nbGUg cXVlcnkgcGVyY2VudGFnZXMsIGJ1dCB0aGlzIG1heSBldm9sdmUgd2l0aCB0aW1lLgo+Cj4gTWF5 IEkgc3VnZ2VzdCB0byBhZGQgdHdvIG5ldyBmaWVsZHMKPgo+IGRybS1zdGF0LWludGVydmFsOiA8 NjQgYml0PiBucwo+IGRybS1zdGF0LXRpbWVzdGFtcDogPDY0IGJpdD4gbnMKPgo+IElmIGludGVy dmFsIGlzIHNldCwgZW5naW5lIHV0aWxpemF0aW9uIGlzIGNhbGN1bGF0ZWQgYnkgZG9pbmcgPHBl cmMgcmVuZGVyPiA9IDEwMCo8ZHJtX2VuZ2luZV9yZW5kZXI+Lzxkcm1fc3RhdF9pbnRlcnZhbD4K PiBpZiBpbnRlcnZhbCBpcyBub3Qgc2V0LCB0d28gcmVhZHMgYXJlIG5lZWRlZCA6IDxwZXJjIHJl bmRlcj4gPSAxMDAqPGRybV9lbmdpbmVfcmVuZGVyMSAtIGRybV9lbmdpbmVfcmVuZGVyMD4gLyA8 ZHJtLXN0YXQtdGltZXN0YW1wMSAtIGRybS1zdGF0LXRpbWVzdGFtcDA+Cj4KPgo+IFJlZ2FyZHMs Cj4KPiBEYXZpZAo+Cj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEZyb206 IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBsaW51eC5pbnRlbC5jb20+Cj4gU2VudDog VGh1cnNkYXksIE1heSAyMCwgMjAyMSA4OjEyIEFNCj4gVG86IEludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcgPEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmc+Cj4gQ2M6IGRyaS1k ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcgPGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmc+OyBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPjsgTmlldG8sIERh dmlkIE0gPERhdmlkLk5pZXRvQGFtZC5jb20+OyBLb2VuaWcsIENocmlzdGlhbiA8Q2hyaXN0aWFu LktvZW5pZ0BhbWQuY29tPjsgRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPgo+IFN1Ympl Y3Q6IFtSRkMgNy83XSBkcm0vaTkxNTogRXhwb3NlIGNsaWVudCBlbmdpbmUgdXRpbGlzYXRpb24g dmlhIGZkaW5mbwo+Cj4gRnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVs LmNvbT4KPgo+IFNpbWlsYXIgdG8gQU1EIGNvbW1pdAo+IDg3NDQ0MjU0MTEzMyAoImRybS9hbWRn cHU6IEFkZCBzaG93X2ZkaW5mbygpIGludGVyZmFjZSIpLCB1c2luZyB0aGUKPiBpbmZyYXN0cnVj dHVyZSBhZGRlZCBpbiBwcmV2aW91cyBwYXRjaGVzLCB3ZSBhZGQgYmFzaWMgY2xpZW50IGluZm8K PiBhbmQgR1BVIGVuZ2luZSB1dGlsaXNhdGlvbiBmb3IgaTkxNS4KPgo+IEV4YW1wbGUgb2YgdGhl IG91dHB1dDoKPgo+ICAgcG9zOiAgICAwCj4gICBmbGFnczogIDAxMDAwMDIKPiAgIG1udF9pZDog MjEKPiAgIGRybS1kcml2ZXI6IGk5MTUKPiAgIGRybS1wZGV2OiAgIDAwMDA6MDA6MDIuMAo+ICAg ZHJtLWNsaWVudC1pZDogICAgICA3Cj4gICBkcm0tZW5naW5lLXJlbmRlcjogIDkyODg4NjQ3MjMg bnMKPiAgIGRybS1lbmdpbmUtY29weTogICAgMjAzNTA3MTEwOCBucwo+ICAgZHJtLWVuZ2luZS12 aWRlbzogICAwIG5zCj4gICBkcm0tZW5naW5lLXZpZGVvLWVuaGFuY2U6ICAgMCBucwo+Cj4gRFJN IHJlbGF0ZWQgZmllbGRzIGFyZSBhcHByb3ByaWF0ZWx5IHByZWZpeGVkIGZvciBlYXN5IHBhcnNp bmcgYW5kCj4gc2VwYXJhdGlvbiBmcm9tIGdlbmVyaWMgZmRpbmZvIGZpZWxkcy4KPgo+IElkZWEg aXMgZm9yIHNvbWUgZmllbGRzIHRvIGJlY29tZSBlaXRoZXIgZnVsbHkgb3IgcGFydGlhbGx5IHN0 YW5kYXJkaXNlZAo+IGluIG9yZGVyIHRvIGVuYWJsZSB3cml0dGluZyBvZiBnZW5lcmljIHRvcC1s aWtlIHRvb2xzLgo+Cj4gSW5pdGlhbCBwcm9wb3NhbCBmb3IgZnVsbHkgc3RhbmRhcmRpc2VkIGNv bW1vbiBmaWVsZHM6Cj4KPiAgZHJtLWRyaXZlcjogPHN0cj4KPiAgZHJtLXBkZXY6IDxhYWFhOmJi LmNjLmQ+Cj4KPiBPcHRpb25hbCBmdWxseSBzdGFuZGFyZGlzZWQ6Cj4KPiAgZHJtLWNsaWVudC1p ZDogPHVpbnQ+Cj4KPiBPcHRpb25hbCBwYXJ0aWFsbHkgc3RhbmRhcmRpc2VkOgo+Cj4gIGVuZ2lu ZS08c3RyPjogPHU2ND4gbnMKPiAgbWVtb3J5LTxzdHI+OiA8dTY0PiBLaUIKPgo+IE9uY2UgYWdy ZWVkIHRoZSBmb3JtYXQgd291bGQgbmVlZCB0byBnbyB0byBzb21lIFJFQURNRSBvciBrZXJuZWxk b2MgaW4KPiBEUk0gY29yZS4KPgo+IFNpZ25lZC1vZmYtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0 a28udXJzdWxpbkBpbnRlbC5jb20+Cj4gQ2M6IERhdmlkIE0gTmlldG8gPERhdmlkLk5pZXRvQGFt ZC5jb20+Cj4gQ2M6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4K PiBDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPgo+IC0tLQo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2RybV9jbGllbnQuYyB8IDY4ICsrKysrKysrKysrKysrKysrKysrKysr KysrCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJtX2NsaWVudC5oIHwgIDQgKysKPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgICAgfCAgMyArKwo+ICAzIGZpbGVz IGNoYW5nZWQsIDc1IGluc2VydGlvbnMoKykKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2RybV9jbGllbnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJt X2NsaWVudC5jCj4gaW5kZXggMWU1ZGI3NzUzMjc2Li41ZTljZmJhMTExNmIgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcm1fY2xpZW50LmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2RybV9jbGllbnQuYwo+IEBAIC05LDYgKzksMTEgQEAKPgo+ICAj aW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgo+Cj4gKyNpbmNsdWRlIDx1YXBpL2RybS9pOTE1X2Ry bS5oPgo+ICsKPiArI2luY2x1ZGUgImdlbS9pOTE1X2dlbV9jb250ZXh0LmgiCj4gKyNpbmNsdWRl ICJndC9pbnRlbF9lbmdpbmVfdXNlci5oIgo+ICsKPiAgI2luY2x1ZGUgImk5MTVfZHJtX2NsaWVu dC5oIgo+ICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiAgI2luY2x1ZGUgImk5MTVfZ2VtLmgiCj4g QEAgLTE2OCwzICsxNzMsNjYgQEAgdm9pZCBpOTE1X2RybV9jbGllbnRzX2Zpbmkoc3RydWN0IGk5 MTVfZHJtX2NsaWVudHMgKmNsaWVudHMpCj4KPiAgICAgICAgICB4YV9kZXN0cm95KCZjbGllbnRz LT54YXJyYXkpOwo+ICB9Cj4gKwo+ICsjaWZkZWYgQ09ORklHX1BST0NfRlMKPiArc3RhdGljIGNv bnN0IGNoYXIgKiBjb25zdCB1YWJpX2NsYXNzX25hbWVzW10gPSB7Cj4gKyAgICAgICBbSTkxNV9F TkdJTkVfQ0xBU1NfUkVOREVSXSA9ICJyZW5kZXIiLAo+ICsgICAgICAgW0k5MTVfRU5HSU5FX0NM QVNTX0NPUFldID0gImNvcHkiLAo+ICsgICAgICAgW0k5MTVfRU5HSU5FX0NMQVNTX1ZJREVPXSA9 ICJ2aWRlbyIsCj4gKyAgICAgICBbSTkxNV9FTkdJTkVfQ0xBU1NfVklERU9fRU5IQU5DRV0gPSAi dmlkZW8tZW5oYW5jZSIsCj4gK307Cj4gKwo+ICtzdGF0aWMgdTY0IGJ1c3lfYWRkKHN0cnVjdCBp OTE1X2dlbV9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGludCBjbGFzcykKPiArewo+ICsgICAgICAg c3RydWN0IGk5MTVfZ2VtX2VuZ2luZXNfaXRlciBpdDsKPiArICAgICAgIHN0cnVjdCBpbnRlbF9j b250ZXh0ICpjZTsKPiArICAgICAgIHU2NCB0b3RhbCA9IDA7Cj4gKwo+ICsgICAgICAgZm9yX2Vh Y2hfZ2VtX2VuZ2luZShjZSwgcmN1X2RlcmVmZXJlbmNlKGN0eC0+ZW5naW5lcyksIGl0KSB7Cj4g KyAgICAgICAgICAgICAgIGlmIChjZS0+ZW5naW5lLT51YWJpX2NsYXNzICE9IGNsYXNzKQo+ICsg ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICAgICAgICAgdG90 YWwgKz0gaW50ZWxfY29udGV4dF9nZXRfdG90YWxfcnVudGltZV9ucyhjZSk7Cj4gKyAgICAgICB9 Cj4gKwo+ICsgICAgICAgcmV0dXJuIHRvdGFsOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtz aG93X2NsaWVudF9jbGFzcyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCj4gKyAgICAgICAgICAgICAgICAg c3RydWN0IGk5MTVfZHJtX2NsaWVudCAqY2xpZW50LAo+ICsgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBjbGFzcykKPiArewo+ICsgICAgICAgY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqbGlz dCA9ICZjbGllbnQtPmN0eF9saXN0Owo+ICsgICAgICAgdTY0IHRvdGFsID0gYXRvbWljNjRfcmVh ZCgmY2xpZW50LT5wYXN0X3J1bnRpbWVbY2xhc3NdKTsKPiArICAgICAgIHN0cnVjdCBpOTE1X2dl bV9jb250ZXh0ICpjdHg7Cj4gKwo+ICsgICAgICAgcmN1X3JlYWRfbG9jaygpOwo+ICsgICAgICAg bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3R4LCBsaXN0LCBjbGllbnRfbGluaykKPiArICAgICAg ICAgICAgICAgdG90YWwgKz0gYnVzeV9hZGQoY3R4LCBjbGFzcyk7Cj4gKyAgICAgICByY3VfcmVh ZF91bmxvY2soKTsKPiArCj4gKyAgICAgICByZXR1cm4gc2VxX3ByaW50ZihtLCAiZHJtLWVuZ2lu ZS0lczpcdCVsbHUgbnNcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICB1YWJpX2NsYXNz X25hbWVzW2NsYXNzXSwgdG90YWwpOwo+ICt9Cj4gKwo+ICt2b2lkIGk5MTVfZHJtX2NsaWVudF9m ZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZikKPiArewo+ICsgICAgICAg c3RydWN0IGRybV9maWxlICpmaWxlID0gZi0+cHJpdmF0ZV9kYXRhOwo+ICsgICAgICAgc3RydWN0 IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7Cj4g KyAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGZpbGVfcHJpdi0+ZGV2X3By aXY7Cj4gKyAgICAgICBzdHJ1Y3QgaTkxNV9kcm1fY2xpZW50ICpjbGllbnQgPSBmaWxlX3ByaXYt PmNsaWVudDsKPiArICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihpOTE1 LT5kcm0uZGV2KTsKPiArICAgICAgIHVuc2lnbmVkIGludCBpOwo+ICsKPiArICAgICAgIHNlcV9w cmludGYobSwgImRybS1kcml2ZXI6XHRpOTE1XG4iKTsKPiArICAgICAgIHNlcV9wcmludGYobSwg ImRybS1wZGV2Olx0JTA0eDolMDJ4OiUwMnguJWRcbiIsCj4gKyAgICAgICAgICAgICAgICAgIHBj aV9kb21haW5fbnIocGRldi0+YnVzKSwgcGRldi0+YnVzLT5udW1iZXIsCj4gKyAgICAgICAgICAg ICAgICAgIFBDSV9TTE9UKHBkZXYtPmRldmZuKSwgUENJX0ZVTkMocGRldi0+ZGV2Zm4pKTsKPiAr Cj4gKyAgICAgICBzZXFfcHJpbnRmKG0sICJkcm0tY2xpZW50LWlkOlx0JXVcbiIsIGNsaWVudC0+ aWQpOwo+ICsKPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHVhYmlfY2xhc3Nf bmFtZXMpOyBpKyspCj4gKyAgICAgICAgICAgICAgIHNob3dfY2xpZW50X2NsYXNzKG0sIGNsaWVu dCwgaSk7Cj4gK30KPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJtX2NsaWVudC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcm1fY2xpZW50 LmgKPiBpbmRleCBiMmI2OWQ2OTg1ZTQuLjk4ODUwMDI0MzNhMCAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RybV9jbGllbnQuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJtX2NsaWVudC5oCj4gQEAgLTk4LDYgKzk4LDEwIEBAIGk5MTVfZHJtX2Ns aWVudF9waWQoY29uc3Qgc3RydWN0IGk5MTVfZHJtX2NsaWVudCAqY2xpZW50KQo+ICAgICAgICAg IHJldHVybiBfX2k5MTVfZHJtX2NsaWVudF9uYW1lKGNsaWVudCktPnBpZDsKPiAgfQo+Cj4gKyNp ZmRlZiBDT05GSUdfUFJPQ19GUwo+ICt2b2lkIGk5MTVfZHJtX2NsaWVudF9mZGluZm8oc3RydWN0 IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZik7Cj4gKyNlbmRpZgo+ICsKPiAgdm9pZCBpOTE1 X2RybV9jbGllbnRzX2Zpbmkoc3RydWN0IGk5MTVfZHJtX2NsaWVudHMgKmNsaWVudHMpOwo+Cj4g ICNlbmRpZiAvKiAhX19JOTE1X0RSTV9DTElFTlRfSF9fICovCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5jCj4gaW5kZXggMzNlYjdiNTJiNThiLi42YjYzZmU0YjNjMjYgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmMKPiBAQCAtMTY5NCw2ICsxNjk0LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBm aWxlX29wZXJhdGlvbnMgaTkxNV9kcml2ZXJfZm9wcyA9IHsKPiAgICAgICAgICAucmVhZCA9IGRy bV9yZWFkLAo+ICAgICAgICAgIC5jb21wYXRfaW9jdGwgPSBpOTE1X2lvYzMyX2NvbXBhdF9pb2N0 bCwKPiAgICAgICAgICAubGxzZWVrID0gbm9vcF9sbHNlZWssCj4gKyNpZmRlZiBDT05GSUdfUFJP Q19GUwo+ICsgICAgICAgLnNob3dfZmRpbmZvID0gaTkxNV9kcm1fY2xpZW50X2ZkaW5mbywKPiAr I2VuZGlmCj4gIH07Cj4KPiAgc3RhdGljIGludAo+IC0tCj4gMi4zMC4yCj4KPgoKCi0tIApEYW5p ZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxv Zy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK