From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dmitry Osipenko Subject: Re: [RFC] Host1x/TegraDRM UAPI (sync points) Date: Thu, 9 Jul 2020 12:28:47 +0300 Message-ID: <7feec6b2-3d00-04ac-92d0-dcc40751f9fa@gmail.com> References: <9b06b7ec-f952-2561-7afb-5653514cd5d3@kapsi.fi> <5b1edaad-ba36-7b0f-5b02-457ae5b6d91e@gmail.com> <62859775-514c-2941-75ed-6905e9282a6f@kapsi.fi> <623c1eaa-31fb-8dff-f6c0-d8cd0be60070@gmail.com> <827c92a6-7fed-a81c-ba8e-6c69416c4ab9@kapsi.fi> <3b058989-a93a-6796-8d94-f60ce39e3fba@kapsi.fi> <2190fe9d-6381-0b5e-39d8-a04daca9a1bf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Return-path: In-Reply-To: Content-Language: en-US Sender: linux-tegra-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Mikko Perttunen , Thierry Reding , Jon Hunter , David Airlie , Daniel Vetter , sumit.semwal-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org, gustavo-THi1TnShQwVAfugRpC6u6w@public.gmane.org Cc: "linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , dri-devel , talho-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org, bhuntsman-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org, Erik Faye-Lund List-Id: linux-tegra@vger.kernel.org 08.07.2020 13:06, Mikko Perttunen пишет: > On 7/7/20 2:06 PM, Dmitry Osipenko wrote: >> 02.07.2020 15:10, Mikko Perttunen пишет: >>> Ok, so we would have two kinds of syncpoints for the job; one >>> for kernel job tracking; and one that userspace can >>> manipulate as it wants to. >>> >>> Could we handle the job tracking syncpoint completely inside the kernel, >>> i.e. allocate it in kernel during job submission, and add an increment >>> for it at the end of the job (with condition OP_DONE)? For MLOCKing, the >>> kernel already needs to insert a SYNCPT_INCR(OP_DONE) + WAIT + >>> MLOCK_RELEASE sequence at the end of each job. >> >> If sync point is allocated within kernel, then we'll need to always >> patch all job's sync point increments with the ID of the allocated sync >> point, regardless of whether firewall enabled or not. > > The idea was that the job tracking increment would also be added to the > pushbuffer in the kernel, so gathers would only have increments for the > "user syncpoints", if any. I think this should work for THI-based > engines (e.g. VIC), you probably have better information about > GR2D/GR3D. On newer Tegras we could use CHANNEL/APPID protection to > prevent the gathers from incrementing these job tracking syncpoints. Could you please clarify what is THI? >> Secondly, I'm now recalling that only one sync point could be assigned >> to a channel at a time on newer Tegras which support sync point >> protection. So it sounds like we don't really have variants other than >> to allocate one sync point per channel for the jobs usage if we want to >> be able to push multiple jobs into channel's pushbuffer, correct? >> > > The other way around; each syncpoint can be assigned to one channel. One > channel may have multiple syncpoints. Okay! So we actually could use a single sync point per-job for user increments + job tracking, correct? >> ... >>>> Hmm, we actually should be able to have a one sync point per-channel >>>> for >>>> the job submission, similarly to what the current driver does! >>>> >>>> I'm keep forgetting about the waitbase existence! >>> >>> Tegra194 doesn't have waitbases, but if we are resubmitting all the jobs >>> anyway, can't we just recalculate wait thresholds at that time? >> >> Yes, thresholds could be recalculated + job should be re-formed at the >> push-time then. >> >> It also means that jobs always should be formed only at the push-time if >> wait-command is utilized by cmdstream since the waits always need to be >> patched because we won't know the thresholds until scheduler actually >> runs the job. > > Could we keep the job tracking syncpoints entirely within the kernel, > and have all wait commands and other stuff that userspace does use the > user syncpoints? Then kernel job tracking and userspace activity would > be separate from each other. I think this should work, but it's not clear to me what benefits this brings to us if we could re-use the same user-allocated sync point for both user increments + kernel job tracking. Is the idea to protect from userspace incrementing sync point too much? I.e. job could be treated as completed before CDMA is actually done with it. > Alternatively, if we know that jobs can only be removed from the middle > of pushbuffers, and not added, we could replace any removed jobs with > syncpoint increments in the pushbuffer and any thresholds would stay > intact. A bit unlikely that jobs could ever be removed from the middle of hardware queue by the DRM scheduler. Anyways, it should be nicer to shoot down everything and restart with a clean slate when necessary, like it's already supposed to happen by the scheduler. 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=-2.0 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no 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 38693C433DF for ; Fri, 10 Jul 2020 07:54:20 +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 0D2662078D for ; Fri, 10 Jul 2020 07:54:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JfK+FQK5" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0D2662078D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com 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 8B79889DA8; Fri, 10 Jul 2020 07:53:14 +0000 (UTC) Received: from mail-lf1-x134.google.com (mail-lf1-x134.google.com [IPv6:2a00:1450:4864:20::134]) by gabe.freedesktop.org (Postfix) with ESMTPS id D1FDD6EA23 for ; Thu, 9 Jul 2020 09:28:50 +0000 (UTC) Received: by mail-lf1-x134.google.com with SMTP id t9so762601lfl.5 for ; Thu, 09 Jul 2020 02:28:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=kvgnhQF49mXlO2b9f/CHzVxzk2HkPNlcy9JXirtzMBk=; b=JfK+FQK5KNXLnavuVpluQImLVyGEas9CrGAp0Np1jeERhtymxB1I8qpbdSEI6/g3LR N9eZiJUDTMRsRQVIZI9TkUh4SGso2nUIE7ZzOQ9iA2Rh3IQUYXjRb01JIMruB6oo6s0g 6jl3eEuMee6sEQ+SYgcq/cgwJGRtcEgr1ntRRKh5I9DqJ751lblMULdaKw3dt++dDCjj 0INUL2kLx1Ip03rjwGdAlBrSTJklOz7vmH1h0GvSm/dGqFWG6YzFdL6WbYS0P4sjoHsM 3pi2Jh9uXPRVL0lK02D98ZeXSnPbEUlnhKZZ1ThQbDzDYiV8KseC9DFpZfgLf1F6FKxD NTaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=kvgnhQF49mXlO2b9f/CHzVxzk2HkPNlcy9JXirtzMBk=; b=DX/lft9QsgUzxWxmhgWsnhpIrgHe2gSFnfij8Srr78UNJmBg2SyT7I3Ezx5qGwspwY CGun3y+5U+2YNeURozI5bVdFbNLW0lSGCwEY0+8fC/O0qUSDX7tiTt6fXOOTy+5ubidp 12tena+zUwIM8/WUxM+2qBOtlIpXBXb+lJ3dhV0XYDdNOxv6yvAuoMyeafr11UsQaTiw zoytlphMhsLtzRQwRfPXeNmsnDs9dZQEFIz+f93iA7FUXcU07inGkrdSpT+ICab70mY1 bwUGVtoldBv3fTKBhS6EBr5guUet+auMvKkwLHxVYb1e5o/Toi0hKtLZJBp4DSBO47Nl FWlg== X-Gm-Message-State: AOAM532gjofNYZqAAT1XHvsOmus2Fhle5H9ANcRrjAkXh2LIRSie90FU XQ3UtY0jKirebJbh4Tg4Ojc= X-Google-Smtp-Source: ABdhPJyQ0vMUncUz8kf6pJzFVa+LJ/TSbO0ixtuJScmjaERCykGUWnx+f7KOpFJSpWctrmduF4MbOA== X-Received: by 2002:ac2:5e29:: with SMTP id o9mr37974535lfg.196.1594286929079; Thu, 09 Jul 2020 02:28:49 -0700 (PDT) Received: from [192.168.2.145] (ppp91-79-162-105.pppoe.mtu-net.ru. [91.79.162.105]) by smtp.googlemail.com with ESMTPSA id o9sm606559ljh.78.2020.07.09.02.28.47 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 09 Jul 2020 02:28:48 -0700 (PDT) Subject: Re: [RFC] Host1x/TegraDRM UAPI (sync points) To: Mikko Perttunen , Thierry Reding , Jon Hunter , David Airlie , Daniel Vetter , sumit.semwal@linaro.org, gustavo@padovan.org References: <9b06b7ec-f952-2561-7afb-5653514cd5d3@kapsi.fi> <5b1edaad-ba36-7b0f-5b02-457ae5b6d91e@gmail.com> <62859775-514c-2941-75ed-6905e9282a6f@kapsi.fi> <623c1eaa-31fb-8dff-f6c0-d8cd0be60070@gmail.com> <827c92a6-7fed-a81c-ba8e-6c69416c4ab9@kapsi.fi> <3b058989-a93a-6796-8d94-f60ce39e3fba@kapsi.fi> <2190fe9d-6381-0b5e-39d8-a04daca9a1bf@gmail.com> From: Dmitry Osipenko Message-ID: <7feec6b2-3d00-04ac-92d0-dcc40751f9fa@gmail.com> Date: Thu, 9 Jul 2020 12:28:47 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-Mailman-Approved-At: Fri, 10 Jul 2020 07:52:58 +0000 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: "linux-tegra@vger.kernel.org" , talho@nvidia.com, bhuntsman@nvidia.com, dri-devel , Erik Faye-Lund Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" MDguMDcuMjAyMCAxMzowNiwgTWlra28gUGVydHR1bmVuINC/0LjRiNC10YI6Cj4gT24gNy83LzIw IDI6MDYgUE0sIERtaXRyeSBPc2lwZW5rbyB3cm90ZToKPj4gMDIuMDcuMjAyMCAxNToxMCwgTWlr a28gUGVydHR1bmVuINC/0LjRiNC10YI6Cj4+PiBPaywgc28gd2Ugd291bGQgaGF2ZSB0d28ga2lu ZHMgb2Ygc3luY3BvaW50cyBmb3IgdGhlIGpvYjsgb25lCj4+PiBmb3Iga2VybmVsIGpvYiB0cmFj a2luZzsgYW5kIG9uZSB0aGF0IHVzZXJzcGFjZSBjYW4KPj4+IG1hbmlwdWxhdGUgYXMgaXQgd2Fu dHMgdG8uCj4+Pgo+Pj4gQ291bGQgd2UgaGFuZGxlIHRoZSBqb2IgdHJhY2tpbmcgc3luY3BvaW50 IGNvbXBsZXRlbHkgaW5zaWRlIHRoZSBrZXJuZWwsCj4+PiBpLmUuIGFsbG9jYXRlIGl0IGluIGtl cm5lbCBkdXJpbmcgam9iIHN1Ym1pc3Npb24sIGFuZCBhZGQgYW4gaW5jcmVtZW50Cj4+PiBmb3Ig aXQgYXQgdGhlIGVuZCBvZiB0aGUgam9iICh3aXRoIGNvbmRpdGlvbiBPUF9ET05FKT8gRm9yIE1M T0NLaW5nLCB0aGUKPj4+IGtlcm5lbCBhbHJlYWR5IG5lZWRzIHRvIGluc2VydCBhIFNZTkNQVF9J TkNSKE9QX0RPTkUpICsgV0FJVCArCj4+PiBNTE9DS19SRUxFQVNFIHNlcXVlbmNlIGF0IHRoZSBl bmQgb2YgZWFjaCBqb2IuCj4+Cj4+IElmIHN5bmMgcG9pbnQgaXMgYWxsb2NhdGVkIHdpdGhpbiBr ZXJuZWwsIHRoZW4gd2UnbGwgbmVlZCB0byBhbHdheXMKPj4gcGF0Y2ggYWxsIGpvYidzIHN5bmMg cG9pbnQgaW5jcmVtZW50cyB3aXRoIHRoZSBJRCBvZiB0aGUgYWxsb2NhdGVkIHN5bmMKPj4gcG9p bnQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBmaXJld2FsbCBlbmFibGVkIG9yIG5vdC4KPiAKPiBU aGUgaWRlYSB3YXMgdGhhdCB0aGUgam9iIHRyYWNraW5nIGluY3JlbWVudCB3b3VsZCBhbHNvIGJl IGFkZGVkIHRvIHRoZQo+IHB1c2hidWZmZXIgaW4gdGhlIGtlcm5lbCwgc28gZ2F0aGVycyB3b3Vs ZCBvbmx5IGhhdmUgaW5jcmVtZW50cyBmb3IgdGhlCj4gInVzZXIgc3luY3BvaW50cyIsIGlmIGFu eS4gSSB0aGluayB0aGlzIHNob3VsZCB3b3JrIGZvciBUSEktYmFzZWQKPiBlbmdpbmVzIChlLmcu IFZJQyksIHlvdSBwcm9iYWJseSBoYXZlIGJldHRlciBpbmZvcm1hdGlvbiBhYm91dAo+IEdSMkQv R1IzRC4gT24gbmV3ZXIgVGVncmFzIHdlIGNvdWxkIHVzZSBDSEFOTkVML0FQUElEIHByb3RlY3Rp b24gdG8KPiBwcmV2ZW50IHRoZSBnYXRoZXJzIGZyb20gaW5jcmVtZW50aW5nIHRoZXNlIGpvYiB0 cmFja2luZyBzeW5jcG9pbnRzLgoKQ291bGQgeW91IHBsZWFzZSBjbGFyaWZ5IHdoYXQgaXMgVEhJ PwoKPj4gU2Vjb25kbHksIEknbSBub3cgcmVjYWxsaW5nIHRoYXQgb25seSBvbmUgc3luYyBwb2lu dCBjb3VsZCBiZSBhc3NpZ25lZAo+PiB0byBhIGNoYW5uZWwgYXQgYSB0aW1lIG9uIG5ld2VyIFRl Z3JhcyB3aGljaCBzdXBwb3J0IHN5bmMgcG9pbnQKPj4gcHJvdGVjdGlvbi4gU28gaXQgc291bmRz IGxpa2Ugd2UgZG9uJ3QgcmVhbGx5IGhhdmUgdmFyaWFudHMgb3RoZXIgdGhhbgo+PiB0byBhbGxv Y2F0ZSBvbmUgc3luYyBwb2ludCBwZXIgY2hhbm5lbCBmb3IgdGhlIGpvYnMgdXNhZ2UgaWYgd2Ug d2FudCB0bwo+PiBiZSBhYmxlIHRvIHB1c2ggbXVsdGlwbGUgam9icyBpbnRvIGNoYW5uZWwncyBw dXNoYnVmZmVyLCBjb3JyZWN0Pwo+Pgo+IAo+IFRoZSBvdGhlciB3YXkgYXJvdW5kOyBlYWNoIHN5 bmNwb2ludCBjYW4gYmUgYXNzaWduZWQgdG8gb25lIGNoYW5uZWwuIE9uZQo+IGNoYW5uZWwgbWF5 IGhhdmUgbXVsdGlwbGUgc3luY3BvaW50cy4KCk9rYXkhIFNvIHdlIGFjdHVhbGx5IGNvdWxkIHVz ZSBhIHNpbmdsZSBzeW5jIHBvaW50IHBlci1qb2IgZm9yIHVzZXIKaW5jcmVtZW50cyArIGpvYiB0 cmFja2luZywgY29ycmVjdD8KCj4+IC4uLgo+Pj4+IEhtbSwgd2UgYWN0dWFsbHkgc2hvdWxkIGJl IGFibGUgdG8gaGF2ZSBhIG9uZSBzeW5jIHBvaW50IHBlci1jaGFubmVsCj4+Pj4gZm9yCj4+Pj4g dGhlIGpvYiBzdWJtaXNzaW9uLCBzaW1pbGFybHkgdG8gd2hhdCB0aGUgY3VycmVudCBkcml2ZXIg ZG9lcyEKPj4+Pgo+Pj4+IEknbSBrZWVwIGZvcmdldHRpbmcgYWJvdXQgdGhlIHdhaXRiYXNlIGV4 aXN0ZW5jZSEKPj4+Cj4+PiBUZWdyYTE5NCBkb2Vzbid0IGhhdmUgd2FpdGJhc2VzLCBidXQgaWYg d2UgYXJlIHJlc3VibWl0dGluZyBhbGwgdGhlIGpvYnMKPj4+IGFueXdheSwgY2FuJ3Qgd2UganVz dCByZWNhbGN1bGF0ZSB3YWl0IHRocmVzaG9sZHMgYXQgdGhhdCB0aW1lPwo+Pgo+PiBZZXMsIHRo cmVzaG9sZHMgY291bGQgYmUgcmVjYWxjdWxhdGVkICsgam9iIHNob3VsZCBiZSByZS1mb3JtZWQg YXQgdGhlCj4+IHB1c2gtdGltZSB0aGVuLgo+Pgo+PiBJdCBhbHNvIG1lYW5zIHRoYXQgam9icyBh bHdheXMgc2hvdWxkIGJlIGZvcm1lZCBvbmx5IGF0IHRoZSBwdXNoLXRpbWUgaWYKPj4gd2FpdC1j b21tYW5kIGlzIHV0aWxpemVkIGJ5IGNtZHN0cmVhbSBzaW5jZSB0aGUgd2FpdHMgYWx3YXlzIG5l ZWQgdG8gYmUKPj4gcGF0Y2hlZCBiZWNhdXNlIHdlIHdvbid0IGtub3cgdGhlIHRocmVzaG9sZHMg dW50aWwgc2NoZWR1bGVyIGFjdHVhbGx5Cj4+IHJ1bnMgdGhlIGpvYi4KPiAKPiBDb3VsZCB3ZSBr ZWVwIHRoZSBqb2IgdHJhY2tpbmcgc3luY3BvaW50cyBlbnRpcmVseSB3aXRoaW4gdGhlIGtlcm5l bCwKPiBhbmQgaGF2ZSBhbGwgd2FpdCBjb21tYW5kcyBhbmQgb3RoZXIgc3R1ZmYgdGhhdCB1c2Vy c3BhY2UgZG9lcyB1c2UgdGhlCj4gdXNlciBzeW5jcG9pbnRzPyBUaGVuIGtlcm5lbCBqb2IgdHJh Y2tpbmcgYW5kIHVzZXJzcGFjZSBhY3Rpdml0eSB3b3VsZAo+IGJlIHNlcGFyYXRlIGZyb20gZWFj aCBvdGhlci4KCkkgdGhpbmsgdGhpcyBzaG91bGQgd29yaywgYnV0IGl0J3Mgbm90IGNsZWFyIHRv IG1lIHdoYXQgYmVuZWZpdHMgdGhpcwpicmluZ3MgdG8gdXMgaWYgd2UgY291bGQgcmUtdXNlIHRo ZSBzYW1lIHVzZXItYWxsb2NhdGVkIHN5bmMgcG9pbnQgZm9yCmJvdGggdXNlciBpbmNyZW1lbnRz ICsga2VybmVsIGpvYiB0cmFja2luZy4KCklzIHRoZSBpZGVhIHRvIHByb3RlY3QgZnJvbSB1c2Vy c3BhY2UgaW5jcmVtZW50aW5nIHN5bmMgcG9pbnQgdG9vIG11Y2g/CkkuZS4gam9iIGNvdWxkIGJl IHRyZWF0ZWQgYXMgY29tcGxldGVkIGJlZm9yZSBDRE1BIGlzIGFjdHVhbGx5IGRvbmUgd2l0aApp dC4KCj4gQWx0ZXJuYXRpdmVseSwgaWYgd2Uga25vdyB0aGF0IGpvYnMgY2FuIG9ubHkgYmUgcmVt b3ZlZCBmcm9tIHRoZSBtaWRkbGUKPiBvZiBwdXNoYnVmZmVycywgYW5kIG5vdCBhZGRlZCwgd2Ug Y291bGQgcmVwbGFjZSBhbnkgcmVtb3ZlZCBqb2JzIHdpdGgKPiBzeW5jcG9pbnQgaW5jcmVtZW50 cyBpbiB0aGUgcHVzaGJ1ZmZlciBhbmQgYW55IHRocmVzaG9sZHMgd291bGQgc3RheQo+IGludGFj dC4KCkEgYml0IHVubGlrZWx5IHRoYXQgam9icyBjb3VsZCBldmVyIGJlIHJlbW92ZWQgZnJvbSB0 aGUgbWlkZGxlIG9mCmhhcmR3YXJlIHF1ZXVlIGJ5IHRoZSBEUk0gc2NoZWR1bGVyLgoKQW55d2F5 cywgaXQgc2hvdWxkIGJlIG5pY2VyIHRvIHNob290IGRvd24gZXZlcnl0aGluZyBhbmQgcmVzdGFy dCB3aXRoIGEKY2xlYW4gc2xhdGUgd2hlbiBuZWNlc3NhcnksIGxpa2UgaXQncyBhbHJlYWR5IHN1 cHBvc2VkIHRvIGhhcHBlbiBieSB0aGUKc2NoZWR1bGVyLgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwK