From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E8C0E1DA53 for ; Sat, 27 Apr 2024 22:09:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714255746; cv=none; b=N6JzpDc1AfI7Gsa8jPWNAb0el2RqAagNHr5H7Llh52enEi9bHXLs4R9j5GtO27P9RHgw9koC9g7vntT4iwTTag5CIIGK3E3pSA922AZWkfu8xo7kldx+n6rGTrknGmHrpd+SxhogQMQhxwAOgRVGpg2gidPDwHGlQYgdEy0lMhQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714255746; c=relaxed/simple; bh=42fsxH7GUR3Bze1RaNrOUs/Q0k9/UGiGaNo83orjt+4=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=W8HQF2bqL6UtRQzoaxbXYwdmJr1MeqsPwFZ8EJgU/qZ0YdaGVAEkoMR2e0S7IgXFpj6Pvm3SgNwd89iBn7pQoCZ3m3Ye66CtAeZaJoyg+cidmS3vz2vlSO2iy/j16aVmxOSmL7iPVy28uAsmp3ucJVWp1/un8vrbqbPK1m0ahUs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=dAmPvS6I; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="dAmPvS6I" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-41b48daaaf4so33635e9.0 for ; Sat, 27 Apr 2024 15:09:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1714255742; x=1714860542; darn=lists.linux.dev; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=IjiDbuXHarP9n+vhk+qWFDAAqkupGkyD4XgrRp0FO9A=; b=dAmPvS6IU5WVCbSMB6IFJ88Epmj9QIpoGJCN7YMM07/kxTAXTKZvb50QjZLXC6CGWw 1QgIFUtUvW9Y81Hpjd5EtKvbIRZzNzqCg/mTSBHwUdn4mYGjaHsYzsPEooqNIUv4fj+k VOQLgLf7C3P/tF/vxOuk9ZKQAOSPF/NNFxANJ2Aey/FaZCSzB+bLK+aDfojWhzAIbWx6 HwekRF+HVFbaCT3rTQa7uWn0I6TPEUlcL652YAip/o0xp7N7PSgUeXa9JMkyIjm+/GSQ oAiZVU1s0LP+Z0DlQk3fSg1lJTp34eW0KfDo3z97d0OkqWjtn0AH4Vj63tN8hkVFsUwB EUMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714255742; x=1714860542; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=IjiDbuXHarP9n+vhk+qWFDAAqkupGkyD4XgrRp0FO9A=; b=GgmgP1L1Wr+GNr/LTrm2b9esaM25mz1tgemxO8O1mqy2S8mFLAoDR8dw9LnR/Sn7kM OUkzaZFk2LWXCX9PX9lF55TmX8b8k8oKBYgU0g5naswmXCkMFE9/szj7DzWeRklvABHY jEgCFMlrmFsgEAVwhYveNyNApBSt4AhjsAqGCf74NyEuUhSWQcIkMC+QudzR+ue8hB9R Cwg5vVpe5sl85YRcOS4mNCq7IGvgXc/n5xkDCGhhsBK8Ogi1B9SHgFsoFRMh2i3x+PiN dMPKSWR+1R+5QGaxT75Zq5ia/9VH6WFQMP8wE7MoMTdLjbJRZ2qm02ud0uus4ZS/v5AY 4hbw== X-Gm-Message-State: AOJu0Yy9YNoC4MXeOiH/d8crvOTGJBupCBP04h85I+SDyvf5Gv+AKZ0s d+PYevF9dOMa57GO79Wm2PtWzocAfIp6r/stBHW8aDpybGY2m69dYgPCKGT1eA== X-Google-Smtp-Source: AGHT+IGdLxrQL/1wmNg8qE5Pi+BZEbw1bE3ruIZ5/MRd6vKqHT1Bi72nrkBHFenVKJBReBB9CLJgYA== X-Received: by 2002:a05:600c:3b22:b0:41b:4c6a:de7a with SMTP id m34-20020a05600c3b2200b0041b4c6ade7amr143020wms.3.1714255742226; Sat, 27 Apr 2024 15:09:02 -0700 (PDT) Received: from google.com (180.232.140.34.bc.googleusercontent.com. [34.140.232.180]) by smtp.gmail.com with ESMTPSA id d24-20020adfa418000000b0034ca8cdc594sm2257873wra.76.2024.04.27.15.09.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 27 Apr 2024 15:09:01 -0700 (PDT) Date: Sat, 27 Apr 2024 22:08:57 +0000 From: Mostafa Saleh To: Jason Gunthorpe Cc: iommu@lists.linux.dev, Joerg Roedel , linux-arm-kernel@lists.infradead.org, Robin Murphy , Will Deacon , Eric Auger , Moritz Fischer , Moritz Fischer , Michael Shavit , Nicolin Chen , patches@lists.linux.dev, Shameerali Kolothum Thodi Subject: Re: [PATCH v7 2/9] iommu/arm-smmu-v3: Make CD programming use arm_smmu_write_entry() Message-ID: References: <0-v7-cb149db3a320+3b5-smmuv3_newapi_p2_jgg@nvidia.com> <2-v7-cb149db3a320+3b5-smmuv3_newapi_p2_jgg@nvidia.com> <20240422132954.GB49823@nvidia.com> Precedence: bulk X-Mailing-List: iommu@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20240422132954.GB49823@nvidia.com> On Mon, Apr 22, 2024 at 10:29:54AM -0300, Jason Gunthorpe wrote: > On Fri, Apr 19, 2024 at 09:07:19PM +0000, Mostafa Saleh wrote: > > > - cdptr = arm_smmu_get_cd_ptr(master, ssid); > > > - if (!cdptr) > > > + cd_table_entry = arm_smmu_get_cd_ptr(master, ssid); > > > + if (!cd_table_entry) > > > return -ENOMEM; > > > > > > + target = *cd_table_entry; > > > > As this changes the logic where all CD manipulation is not on the actual > > CD, I believe a comment would be helpful here. > > This is all deleted in a few patches, doesn't seem worth it to > me. These steps exist only for bisection. > > > > @@ -1299,18 +1357,14 @@ int arm_smmu_write_ctx_desc(struct arm_smmu_master *master, int ssid, > > > if (cd_table->stall_enabled) > > > val |= CTXDESC_CD_0_S; > > > } > > > - > > > + cdptr->data[0] = cpu_to_le64(val); > > > /* > > > - * The SMMU accesses 64-bit values atomically. See IHI0070Ca 3.21.3 > > > - * "Configuration structures and configuration invalidation completion" > > > - * > > > - * The size of single-copy atomic reads made by the SMMU is > > > - * IMPLEMENTATION DEFINED but must be at least 64 bits. Any single > > > - * field within an aligned 64-bit span of a structure can be altered > > > - * without first making the structure invalid. > > > + * Since the above is updating the CD entry based on the current value > > > + * without zeroing unused bits it needs fixing before being passed to > > > + * the programming logic. > > > */ > > > - WRITE_ONCE(cdptr->data[0], cpu_to_le64(val)); > > > - arm_smmu_sync_cd(master, ssid, true); > > > + arm_smmu_clean_cd_entry(&target); > > > > I am not sure I understand the logic here, is that only needed for entry[0] > > As I see the other entries are set and not reused. > > I'm not sure what you are asking? > > The issue is the old logic constructs the new CD by manipulating the > existing CD in various ways "in place" that ends up creating CDs that > don't meet the requirements for the new programmer. For instance EPD0 > will be set and the TTB0 will also be left programmed. > I see, but what I don’t understand is why doesn't the function construct the CD correctly, as from } else if (cd == &quiet_cd) { /* (4) */ if (!(smmu->features & ARM_SMMU_FEAT_STALL_FORCE)) val &= ~(CTXDESC_CD_0_S | CTXDESC_CD_0_R); val |= CTXDESC_CD_0_TCR_EPD0; // populate the rest of the CD correctly here. } As I don’t think the right approach is to populate the CD incorrectly and then clear the parts not needed for EPD0. Also, TTB0 is ignored anyway in that case, no? Thanks, Mostafa > > If so, I think it’d be better to make that clear, also as used_bits > > are always 0xff for all cases, I believe the EPD0 logic should be > > integrated in populating the CD so it is correct by construction, as > > this looks like a hack to me. > > Yes, this is what happens, in a few more steps. We have to go and > build the missing make functions first. > > There is a bit of a circular problem here: the new scheme expects that > the CD is only programmed by the new scheme and follows the rules - eg > no unused bits set. While the old scheme doesn't follow the rules. > > So this patch makes the old scheme follow the rules and be compatible > with the new scheme then we go place by place and convert to the new > scheme. Then we remove the old scheme entirely. Look at the "Move the > CD generation for SVA into a function" patch. > > Yes, this is a minimal hack to let the next few patches work out > correctly without breaking bisection. > > How about a new commit message: > > iommu/arm-smmu-v3: Make CD programming use arm_smmu_write_entry() > > CD table entries and STE's have the same essential programming sequence, > just with different types. Use the new ops indirection to link CD > programming to the common writer. > > In a few more patches all CD writers will call an appropriate make > function and then directly call arm_smmu_write_cd_entry(). > arm_smmu_write_ctx_desc() will be removed. > > Until then lightly tweak arm_smmu_write_ctx_desc() to also use the new > programmer by using the same logic as right now to build the target CD on > the stack, sanitizing it to meet the used rules, and then using the > writer. > > This is necessary because the writer expects that the currently programmed > CD follows the used rules. Next patches add new make functions and new > direct calls to arm_smmu_write_cd_entry() which will require this. > > Jason 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 A8237C4345F for ; Sat, 27 Apr 2024 22:09:20 +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-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc: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=pLfcCDnOCKRZcMsydfR8cfhKLr1hsKpM+9AC8N6D6wQ=; b=gYTrCWlLtp5hOR K3fBpP55GbUkCcekX3gEZzj/VUq4nG1QRexDiID7xs4BJ+OV/sFCebzyhfyRm8ZK5M3ExTuvNfll1 3LLG0V+HFRNGeeULlvhNAFf2TVeo5ZOMoDshJcOPJusiL2Wci5H5dvEtXw3rm4+h3lHraicZ60/JC nMxb8QECztU80/UWXrgVna9zMXuq8t04EukWt47Zih7DfHkN4llcp0onGIPK/DCkI9PB37SJneZKU M3wfAYHTZM6eMKxzMWY1oveyTBsUw/viNsocKGhnXCs5Ti0S1hxlDqwUCf2eJPl8aRx+mOBfvpTLc ERVBbEEcKZbhrKD6iQ/A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1s0qEG-0000000GJxv-1LoQ; Sat, 27 Apr 2024 22:09:08 +0000 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1s0qED-0000000GJxK-1Daa for linux-arm-kernel@lists.infradead.org; Sat, 27 Apr 2024 22:09:06 +0000 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-41bff91ecdcso6375e9.1 for ; Sat, 27 Apr 2024 15:09:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1714255742; x=1714860542; darn=lists.infradead.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=IjiDbuXHarP9n+vhk+qWFDAAqkupGkyD4XgrRp0FO9A=; b=ZVpS4kkvgFOZ7yUa3W9PjwgeIChUStoW208kr0IAfAQ1mY6I4T92GAIQEG3aKcTCsg GBmXOresmplH9miVXbz9wyGCqOV0GGaZKMyW7HwMysAu8bYVEdzUv9p6E8J6oJwbCH33 WoIhGkKQAtSByneZaq+8PMNYhNJ0RxqVKzZUbjaHkbYHdKHaQeDFObfIY4TsTtKKf5D7 N+Nin/+J0HqkgSYMEJ2XJb0a5HqZuVX/qVOCzcvzZgZDwr78x6zugnzvtsII5BMVPQFm BeOcm/Lv0TAvhqtSL9vlOZrEkK6asBaXIungtwvfS/RAe66t+Ui0TqYnUzyWE/PGd2W1 kqDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714255742; x=1714860542; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=IjiDbuXHarP9n+vhk+qWFDAAqkupGkyD4XgrRp0FO9A=; b=us2Al5+yLdkJWEH9s3Ph/QykXnFWQ3k9IS4Nkq/8wRuA7XiLvwelGTwSMIxo51nHeG vpAKUnvrvowV4uq9240HAgZdHBsjaJtSoJhls6ggwCktFd2tFq9EJf0nrr2Fd713gNU7 hqqbCsrBcr6bleCg+r12OAkAvy6lDXiG4J/Yp5PUuwKvqjchz5pL6jYM1bfiYUUCx443 VTCKvFhHMDVmTchDIXJ8U92BFh2aUzyQWJJC00e8ydwhd1IkZgD0S83agGbxzUSU6CTb 2+JMtNiY1DZ9oQH05G7zF7/R2bvNzKX7jp6bkBoL4vuuqQTmlZ87pkzZXtlhitK3yvOh Q0Bw== X-Forwarded-Encrypted: i=1; AJvYcCUksaN0fS/VYOZJwBcvIXnJsYxTU6OEjjzebLGaaA7w6RJ6dBLwyxttLsQiNtURqW7uf66t1D8rW2+IaQtbtgasDQ8m+gJAt5kXipdq1MSIa7KrJBw= X-Gm-Message-State: AOJu0YzBjt+tUYhH1oxVeT88TyOL5lb6cc8WdNBgvRXXLd8bnr8AHD2Z bUOTVGNN/O+R66VoB1v1HaxFgPETpIxcL/r5Dkz5r/g9mrfi3RtjKznmYoTXnQ== X-Google-Smtp-Source: AGHT+IGdLxrQL/1wmNg8qE5Pi+BZEbw1bE3ruIZ5/MRd6vKqHT1Bi72nrkBHFenVKJBReBB9CLJgYA== X-Received: by 2002:a05:600c:3b22:b0:41b:4c6a:de7a with SMTP id m34-20020a05600c3b2200b0041b4c6ade7amr143020wms.3.1714255742226; Sat, 27 Apr 2024 15:09:02 -0700 (PDT) Received: from google.com (180.232.140.34.bc.googleusercontent.com. [34.140.232.180]) by smtp.gmail.com with ESMTPSA id d24-20020adfa418000000b0034ca8cdc594sm2257873wra.76.2024.04.27.15.09.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 27 Apr 2024 15:09:01 -0700 (PDT) Date: Sat, 27 Apr 2024 22:08:57 +0000 From: Mostafa Saleh To: Jason Gunthorpe Cc: iommu@lists.linux.dev, Joerg Roedel , linux-arm-kernel@lists.infradead.org, Robin Murphy , Will Deacon , Eric Auger , Moritz Fischer , Moritz Fischer , Michael Shavit , Nicolin Chen , patches@lists.linux.dev, Shameerali Kolothum Thodi Subject: Re: [PATCH v7 2/9] iommu/arm-smmu-v3: Make CD programming use arm_smmu_write_entry() Message-ID: References: <0-v7-cb149db3a320+3b5-smmuv3_newapi_p2_jgg@nvidia.com> <2-v7-cb149db3a320+3b5-smmuv3_newapi_p2_jgg@nvidia.com> <20240422132954.GB49823@nvidia.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20240422132954.GB49823@nvidia.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240427_150905_367305_5234A7F9 X-CRM114-Status: GOOD ( 41.62 ) 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 T24gTW9uLCBBcHIgMjIsIDIwMjQgYXQgMTA6Mjk6NTRBTSAtMDMwMCwgSmFzb24gR3VudGhvcnBl IHdyb3RlOgo+IE9uIEZyaSwgQXByIDE5LCAyMDI0IGF0IDA5OjA3OjE5UE0gKzAwMDAsIE1vc3Rh ZmEgU2FsZWggd3JvdGU6Cj4gPiA+IC0JY2RwdHIgPSBhcm1fc21tdV9nZXRfY2RfcHRyKG1hc3Rl ciwgc3NpZCk7Cj4gPiA+IC0JaWYgKCFjZHB0cikKPiA+ID4gKwljZF90YWJsZV9lbnRyeSA9IGFy bV9zbW11X2dldF9jZF9wdHIobWFzdGVyLCBzc2lkKTsKPiA+ID4gKwlpZiAoIWNkX3RhYmxlX2Vu dHJ5KQo+ID4gPiAgCQlyZXR1cm4gLUVOT01FTTsKPiA+ID4gIAo+ID4gPiArCXRhcmdldCA9ICpj ZF90YWJsZV9lbnRyeTsKPiA+IAo+ID4gQXMgdGhpcyBjaGFuZ2VzIHRoZSBsb2dpYyB3aGVyZSBh bGwgQ0QgbWFuaXB1bGF0aW9uIGlzIG5vdCBvbiB0aGUgYWN0dWFsCj4gPiBDRCwgSSBiZWxpZXZl IGEgY29tbWVudCB3b3VsZCBiZSBoZWxwZnVsIGhlcmUuCj4gCj4gVGhpcyBpcyBhbGwgZGVsZXRl ZCBpbiBhIGZldyBwYXRjaGVzLCBkb2Vzbid0IHNlZW0gd29ydGggaXQgdG8KPiBtZS4gVGhlc2Ug c3RlcHMgZXhpc3Qgb25seSBmb3IgYmlzZWN0aW9uLgo+IAo+ID4gPiBAQCAtMTI5OSwxOCArMTM1 NywxNCBAQCBpbnQgYXJtX3NtbXVfd3JpdGVfY3R4X2Rlc2Moc3RydWN0IGFybV9zbW11X21hc3Rl ciAqbWFzdGVyLCBpbnQgc3NpZCwKPiA+ID4gIAkJaWYgKGNkX3RhYmxlLT5zdGFsbF9lbmFibGVk KQo+ID4gPiAgCQkJdmFsIHw9IENUWERFU0NfQ0RfMF9TOwo+ID4gPiAgCX0KPiA+ID4gLQo+ID4g PiArCWNkcHRyLT5kYXRhWzBdID0gY3B1X3RvX2xlNjQodmFsKTsKPiA+ID4gIAkvKgo+ID4gPiAt CSAqIFRoZSBTTU1VIGFjY2Vzc2VzIDY0LWJpdCB2YWx1ZXMgYXRvbWljYWxseS4gU2VlIElISTAw NzBDYSAzLjIxLjMKPiA+ID4gLQkgKiAiQ29uZmlndXJhdGlvbiBzdHJ1Y3R1cmVzIGFuZCBjb25m aWd1cmF0aW9uIGludmFsaWRhdGlvbiBjb21wbGV0aW9uIgo+ID4gPiAtCSAqCj4gPiA+IC0JICog ICBUaGUgc2l6ZSBvZiBzaW5nbGUtY29weSBhdG9taWMgcmVhZHMgbWFkZSBieSB0aGUgU01NVSBp cwo+ID4gPiAtCSAqICAgSU1QTEVNRU5UQVRJT04gREVGSU5FRCBidXQgbXVzdCBiZSBhdCBsZWFz dCA2NCBiaXRzLiBBbnkgc2luZ2xlCj4gPiA+IC0JICogICBmaWVsZCB3aXRoaW4gYW4gYWxpZ25l ZCA2NC1iaXQgc3BhbiBvZiBhIHN0cnVjdHVyZSBjYW4gYmUgYWx0ZXJlZAo+ID4gPiAtCSAqICAg d2l0aG91dCBmaXJzdCBtYWtpbmcgdGhlIHN0cnVjdHVyZSBpbnZhbGlkLgo+ID4gPiArCSAqIFNp bmNlIHRoZSBhYm92ZSBpcyB1cGRhdGluZyB0aGUgQ0QgZW50cnkgYmFzZWQgb24gdGhlIGN1cnJl bnQgdmFsdWUKPiA+ID4gKwkgKiB3aXRob3V0IHplcm9pbmcgdW51c2VkIGJpdHMgaXQgbmVlZHMg Zml4aW5nIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8KPiA+ID4gKwkgKiB0aGUgcHJvZ3JhbW1pbmcg bG9naWMuCj4gPiA+ICAJICovCj4gPiA+IC0JV1JJVEVfT05DRShjZHB0ci0+ZGF0YVswXSwgY3B1 X3RvX2xlNjQodmFsKSk7Cj4gPiA+IC0JYXJtX3NtbXVfc3luY19jZChtYXN0ZXIsIHNzaWQsIHRy dWUpOwo+ID4gPiArCWFybV9zbW11X2NsZWFuX2NkX2VudHJ5KCZ0YXJnZXQpOwo+ID4gCj4gPiBJ IGFtIG5vdCBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbG9naWMgaGVyZSwgaXMgdGhhdCBvbmx5IG5l ZWRlZCBmb3IgZW50cnlbMF0KPiA+IEFzIEkgc2VlIHRoZSBvdGhlciBlbnRyaWVzIGFyZSBzZXQg YW5kIG5vdCByZXVzZWQuCj4gCj4gSSdtIG5vdCBzdXJlIHdoYXQgeW91IGFyZSBhc2tpbmc/Cj4g Cj4gVGhlIGlzc3VlIGlzIHRoZSBvbGQgbG9naWMgY29uc3RydWN0cyB0aGUgbmV3IENEIGJ5IG1h bmlwdWxhdGluZyB0aGUKPiBleGlzdGluZyBDRCBpbiB2YXJpb3VzIHdheXMgImluIHBsYWNlIiB0 aGF0IGVuZHMgdXAgY3JlYXRpbmcgQ0RzIHRoYXQKPiBkb24ndCBtZWV0IHRoZSByZXF1aXJlbWVu dHMgZm9yIHRoZSBuZXcgcHJvZ3JhbW1lci4gRm9yIGluc3RhbmNlIEVQRDAKPiB3aWxsIGJlIHNl dCBhbmQgdGhlIFRUQjAgd2lsbCBhbHNvIGJlIGxlZnQgcHJvZ3JhbW1lZC4KPiAKCkkgc2VlLCBi dXQgd2hhdCBJIGRvbuKAmXQgdW5kZXJzdGFuZCBpcyB3aHkgZG9lc24ndCB0aGUgZnVuY3Rpb24g Y29uc3RydWN0CnRoZSBDRCBjb3JyZWN0bHksIGFzIGZyb20KCX0gZWxzZSBpZiAoY2QgPT0gJnF1 aWV0X2NkKSB7IC8qICg0KSAqLwoJCWlmICghKHNtbXUtPmZlYXR1cmVzICYgQVJNX1NNTVVfRkVB VF9TVEFMTF9GT1JDRSkpCgkJCXZhbCAmPSB+KENUWERFU0NfQ0RfMF9TIHwgQ1RYREVTQ19DRF8w X1IpOwoJCXZhbCB8PSBDVFhERVNDX0NEXzBfVENSX0VQRDA7CgkJLy8gcG9wdWxhdGUgdGhlIHJl c3Qgb2YgdGhlIENEIGNvcnJlY3RseSBoZXJlLgoJfQoKQXMgSSAgZG9u4oCZdCB0aGluayB0aGUg cmlnaHQgYXBwcm9hY2ggaXMgdG8gcG9wdWxhdGUgdGhlIENEIGluY29ycmVjdGx5CmFuZCB0aGVu IGNsZWFyIHRoZSBwYXJ0cyBub3QgbmVlZGVkIGZvciBFUEQwLgpBbHNvLCBUVEIwIGlzIGlnbm9y ZWQgYW55d2F5IGluIHRoYXQgY2FzZSwgbm8/CgpUaGFua3MsCk1vc3RhZmEKCj4gPiBJZiBzbywg SSB0aGluayBpdOKAmWQgYmUgYmV0dGVyIHRvIG1ha2UgdGhhdCBjbGVhciwgYWxzbyBhcyB1c2Vk X2JpdHMKPiA+IGFyZSBhbHdheXMgMHhmZiBmb3IgYWxsIGNhc2VzLCBJIGJlbGlldmUgdGhlIEVQ RDAgbG9naWMgc2hvdWxkIGJlCj4gPiBpbnRlZ3JhdGVkIGluIHBvcHVsYXRpbmcgdGhlIENEIHNv IGl0IGlzIGNvcnJlY3QgYnkgY29uc3RydWN0aW9uLCBhcwo+ID4gdGhpcyBsb29rcyBsaWtlIGEg aGFjayB0byBtZS4KPiAKPiBZZXMsIHRoaXMgaXMgd2hhdCBoYXBwZW5zLCBpbiBhIGZldyBtb3Jl IHN0ZXBzLiBXZSBoYXZlIHRvIGdvIGFuZAo+IGJ1aWxkIHRoZSBtaXNzaW5nIG1ha2UgZnVuY3Rp b25zIGZpcnN0Lgo+IAo+IFRoZXJlIGlzIGEgYml0IG9mIGEgY2lyY3VsYXIgcHJvYmxlbSBoZXJl OiB0aGUgbmV3IHNjaGVtZSBleHBlY3RzIHRoYXQKPiB0aGUgQ0QgaXMgb25seSBwcm9ncmFtbWVk IGJ5IHRoZSBuZXcgc2NoZW1lIGFuZCBmb2xsb3dzIHRoZSBydWxlcyAtIGVnCj4gbm8gdW51c2Vk IGJpdHMgc2V0LiBXaGlsZSB0aGUgb2xkIHNjaGVtZSBkb2Vzbid0IGZvbGxvdyB0aGUgcnVsZXMu Cj4gCj4gU28gdGhpcyBwYXRjaCBtYWtlcyB0aGUgb2xkIHNjaGVtZSBmb2xsb3cgdGhlIHJ1bGVz IGFuZCBiZSBjb21wYXRpYmxlCj4gd2l0aCB0aGUgbmV3IHNjaGVtZSB0aGVuIHdlIGdvIHBsYWNl IGJ5IHBsYWNlIGFuZCBjb252ZXJ0IHRvIHRoZSBuZXcKPiBzY2hlbWUuIFRoZW4gd2UgcmVtb3Zl IHRoZSBvbGQgc2NoZW1lIGVudGlyZWx5LiBMb29rIGF0IHRoZSAiTW92ZSB0aGUKPiBDRCBnZW5l cmF0aW9uIGZvciBTVkEgaW50byBhIGZ1bmN0aW9uIiBwYXRjaC4KPiAKPiBZZXMsIHRoaXMgaXMg YSBtaW5pbWFsIGhhY2sgdG8gbGV0IHRoZSBuZXh0IGZldyBwYXRjaGVzIHdvcmsgb3V0Cj4gY29y cmVjdGx5IHdpdGhvdXQgYnJlYWtpbmcgYmlzZWN0aW9uLgo+IAo+IEhvdyBhYm91dCBhIG5ldyBj b21taXQgbWVzc2FnZToKPiAKPiBpb21tdS9hcm0tc21tdS12MzogTWFrZSBDRCBwcm9ncmFtbWlu ZyB1c2UgYXJtX3NtbXVfd3JpdGVfZW50cnkoKQo+IAo+IENEIHRhYmxlIGVudHJpZXMgYW5kIFNU RSdzIGhhdmUgdGhlIHNhbWUgZXNzZW50aWFsIHByb2dyYW1taW5nIHNlcXVlbmNlLAo+IGp1c3Qg d2l0aCBkaWZmZXJlbnQgdHlwZXMuIFVzZSB0aGUgbmV3IG9wcyBpbmRpcmVjdGlvbiB0byBsaW5r IENECj4gcHJvZ3JhbW1pbmcgdG8gdGhlIGNvbW1vbiB3cml0ZXIuCj4gCj4gSW4gYSBmZXcgbW9y ZSBwYXRjaGVzIGFsbCBDRCB3cml0ZXJzIHdpbGwgY2FsbCBhbiBhcHByb3ByaWF0ZSBtYWtlCj4g ZnVuY3Rpb24gYW5kIHRoZW4gZGlyZWN0bHkgY2FsbCBhcm1fc21tdV93cml0ZV9jZF9lbnRyeSgp Lgo+IGFybV9zbW11X3dyaXRlX2N0eF9kZXNjKCkgd2lsbCBiZSByZW1vdmVkLgo+IAo+IFVudGls IHRoZW4gbGlnaHRseSB0d2VhayBhcm1fc21tdV93cml0ZV9jdHhfZGVzYygpIHRvIGFsc28gdXNl IHRoZSBuZXcKPiBwcm9ncmFtbWVyIGJ5IHVzaW5nIHRoZSBzYW1lIGxvZ2ljIGFzIHJpZ2h0IG5v dyB0byBidWlsZCB0aGUgdGFyZ2V0IENEIG9uCj4gdGhlIHN0YWNrLCBzYW5pdGl6aW5nIGl0IHRv IG1lZXQgdGhlIHVzZWQgcnVsZXMsIGFuZCB0aGVuIHVzaW5nIHRoZQo+IHdyaXRlci4KPiAKPiBU aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSB3cml0ZXIgZXhwZWN0cyB0aGF0IHRoZSBjdXJy ZW50bHkgcHJvZ3JhbW1lZAo+IENEIGZvbGxvd3MgdGhlIHVzZWQgcnVsZXMuIE5leHQgcGF0Y2hl cyBhZGQgbmV3IG1ha2UgZnVuY3Rpb25zIGFuZCBuZXcKPiBkaXJlY3QgY2FsbHMgdG8gYXJtX3Nt bXVfd3JpdGVfY2RfZW50cnkoKSB3aGljaCB3aWxsIHJlcXVpcmUgdGhpcy4KPiAKPiBKYXNvbgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJt LWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3Jn Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtl cm5lbAo=