From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pl1-x62a.google.com (mail-pl1-x62a.google.com [IPv6:2607:f8b0:4864:20::62a]) by sourceware.org (Postfix) with ESMTPS id 66A0B3858402 for ; Thu, 11 Apr 2024 14:08:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 66A0B3858402 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=baylibre.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 66A0B3858402 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::62a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712844535; cv=none; b=GCa55PzdkUHVSxliNEquNmM0CXTiygXPpV8hJE8eNiI4zIAowjiCnV8XbwvgSjf3+eYiuC9N71xGB6dNQGBlGnyN680dB4xPU5uNq9wc9t+6IJjOeVhFn4VGAyH9Hc1zF7RsJmukvaXj48rwObv6BURx5jzNAswO4qDDKI+p8Uk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712844535; c=relaxed/simple; bh=myyJnstTfthHunNj7Ngd7qLvg0ugK+dZjvK6YzwdoNM=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=eTmp6Y5Y0ZWVQPpxWN7fOhVr/lsv51dY8mTMQ8Y+CPTUuHlcFpE0WbDo+RLQHcnxlfmpchf3H7UL7hoeliMIA7loHme1wUtxwBlBpLLyawsb5ydDM0Tq5E48GOD5DZ9F2HVZvy0f3llYoh6rBVsBhl+tDcicz451zPlEdM0xBXs= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-1e4c4fb6af3so5655735ad.0 for ; Thu, 11 Apr 2024 07:08:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1712844530; x=1713449330; darn=gcc.gnu.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=B5WifenPpFKGVbBhqG7hDm2I8j4Mz/06eJ9Arsx92aU=; b=qzDb9Tnjgb60HCmbgp4pf4ON46wzbTJ87a6YTqwocV546lWfgrARUrzbmtsfRam4vj XGfKJnv7LWtP5p/9KJ+yebrRwFZH0o8nPDsdD7pU+6wlDiL96c1K/dAEbE2tQXCXNb2z x0onl2eJkQ5vxPT//HVmiPehnHSkoNvALQKjI5jI94PcrgcOkionfen96/ePFwjjR9Fo 7M+/XL++wgFpaFiR+ur1ExmZ8zL9ylnGLQ7pjJH0YpQ1fH2Y5NYfjfwbyeyddOj6ZCnI wZoEZiECMa9PCNYQIzZ5W0IH6+0fZtKkE0hYwqnY5YUpFdnK6i5p5igBVM1Q0mVDZ141 +I2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712844530; x=1713449330; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=B5WifenPpFKGVbBhqG7hDm2I8j4Mz/06eJ9Arsx92aU=; b=QDv5vBk7wu+N9lJKHSoW1vBUvS89M8HgvqemQBiMU8CcOJiH/af4cLsXsijtMBCIMZ LsbJa9uhwQlPnwq6IQaEULYcSyOEnoPkhA8JvHxK+Opfev2xQMO7+K4+WPTVYcI49PG5 27Dd+XwqpVPvKMSno++iQQcaKr4obx12zwN6Zm6uRtu9twS2bdXYfnSeyfedIQAdPrmo ft+KlUaCl8x5R9IlASJ3IBnKovTDmAAmKZ3N7+1dgsxfs5n3AQWQwBNj1gCD2q1EPVl9 TO+nz5g4psYLoXOOg0MO1xKZQboOGNRprkXw1Qmv1hoeV+8W3cJYqhtChPQQ8lneClTS XpJg== X-Gm-Message-State: AOJu0Yxz6qNFOoNY97AkDmD3Hbo40KhBLBoLOXzx2VvEB778C1VPnqF3 wZ9HFMs9zCrrdC7v6Rqwk2oNvbmFIPDE2QVnuxDjnFOrQJLWrYsTDCq3Ai0Uxh/tEa2zD4WaBvH e1k0= X-Google-Smtp-Source: AGHT+IEB0fUh1s+fmCFJH+eN1lY5VHp0NRZMiaY4sCslkBeOhlc9Dx5oreTcr/guZLeXaGQ3A3ZnPw== X-Received: by 2002:a17:902:ea04:b0:1e0:9964:76f4 with SMTP id s4-20020a170902ea0400b001e0996476f4mr4395813plg.14.1712844529940; Thu, 11 Apr 2024 07:08:49 -0700 (PDT) Received: from [192.168.50.226] (112-104-16-194.adsl.dynamic.seed.net.tw. [112.104.16.194]) by smtp.gmail.com with ESMTPSA id 12-20020a170902c10c00b001e43cf17fe5sm1213180pli.6.2024.04.11.07.08.48 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 11 Apr 2024 07:08:49 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------bizr9202FbzJHeq70y2TveqH" Message-ID: <71cbd367-249c-420d-87b6-4291764ddddb@baylibre.com> Date: Thu, 11 Apr 2024 22:08:47 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH, OpenACC 2.7, v3] Adjust acc_map_data/acc_unmap_data interaction with reference counters To: Thomas Schwinge Cc: gcc-patches@gcc.gnu.org, Tobias Burnus References: <4b4f957b-03c7-ece2-b1c1-f2aa486b6adc@siemens.com> <87pm0uubs9.fsf@euler.schwinge.homeip.net> <87a5mzeo16.fsf@euler.schwinge.ddns.net> Content-Language: en-US From: Chung-Lin Tang In-Reply-To: <87a5mzeo16.fsf@euler.schwinge.ddns.net> X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------bizr9202FbzJHeq70y2TveqH Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi Thomas, On 2024/3/15 7:24 PM, Thomas Schwinge wrote: > Hi Chung-Lin! > > I realized: please add "PR libgomp/92840" to the Git commit log, as your > changes are directly a continuation of my earlier changes. Okay, I'll remember to do that. ... > - if (n->refcount != REFCOUNT_INFINITY) > + if (n->refcount != REFCOUNT_INFINITY > + && n->refcount != REFCOUNT_ACC_MAP_DATA) > n->refcount--; > n->dynamic_refcount--; > } > > + /* Mappings created by 'acc_map_data' may only be deleted by > + 'acc_unmap_data'. */ > + if (n->refcount == REFCOUNT_ACC_MAP_DATA > + && n->dynamic_refcount == 0) > + n->dynamic_refcount = 1; > + > if (n->refcount == 0) > { > bool copyout = (kind == GOMP_MAP_FROM > > ..., which really should have the same semantics? No strong opinion on > which of the two variants you now chose. My guess is that breaking off the REFCOUNT_ACC_MAP_DATA case separately will be lighter on any branch predictors (faster performing overall), so I will stick with my version here. >>> >>> It's not clear to me why you need this handling -- instead of just >>> handling 'REFCOUNT_ACC_MAP_DATA' like 'REFCOUNT_INFINITY' here, that is, >>> early 'return'? >>> >>> Per my understanding, this code is for OpenACC only exercised for >>> structured data regions, and it seems strange (unnecessary?) to adjust >>> the 'dynamic_refcount' for these for 'acc_map_data'-mapped data? Or am I >>> missing anything? >> >> No, that is not true. It goes through almost everything through gomp_map_vars_existing/_internal. >> This is what happens when you acc_create/acc_copyin on a mapping created by acc_map_data. > > But I don't understand what you foresee breaking with the following (on > top of your v2): > > --- a/libgomp/target.c > +++ b/libgomp/target.c > @@ -476,14 +476,14 @@ gomp_free_device_memory (struct gomp_device_descr *devicep, void *devptr) > static inline void > gomp_increment_refcount (splay_tree_key k, htab_t *refcount_set) > { > - if (k == NULL || k->refcount == REFCOUNT_INFINITY) > + if (k == NULL > + || k->refcount == REFCOUNT_INFINITY > + || k->refcount == REFCOUNT_ACC_MAP_DATA) > return; > > uintptr_t *refcount_ptr = &k->refcount; > > - if (k->refcount == REFCOUNT_ACC_MAP_DATA) > - refcount_ptr = &k->dynamic_refcount; > - else if (REFCOUNT_STRUCTELEM_FIRST_P (k->refcount)) > + if (REFCOUNT_STRUCTELEM_FIRST_P (k->refcount)) > refcount_ptr = &k->structelem_refcount; ... > Can you please show a test case? I have re-tested the patch *without* the gomp_increment/decrement_refcount changes, and have these regressions (just to demonstrate what is affected): +FAIL: libgomp.oacc-c/../libgomp.oacc-c-c++-common/nested-1.c -DACC_DEVICE_TYPE_nvidia=1 -DACC_MEM_SHARED=0 -foffload=nvptx-none -O0 execution test +FAIL: libgomp.oacc-c/../libgomp.oacc-c-c++-common/nested-1.c -DACC_DEVICE_TYPE_nvidia=1 -DACC_MEM_SHARED=0 -foffload=nvptx-none -O2 execution test +FAIL: libgomp.oacc-c/../libgomp.oacc-c-c++-common/pr92854-1.c -DACC_DEVICE_TYPE_nvidia=1 -DACC_MEM_SHARED=0 -foffload=nvptx-none -O0 execution test +FAIL: libgomp.oacc-c/../libgomp.oacc-c-c++-common/pr92854-1.c -DACC_DEVICE_TYPE_nvidia=1 -DACC_MEM_SHARED=0 -foffload=nvptx-none -O2 execution test +FAIL: libgomp.oacc-c++/../libgomp.oacc-c-c++-common/nested-1.c -DACC_DEVICE_TYPE_nvidia=1 -DACC_MEM_SHARED=0 -foffload=nvptx-none -O0 execution test +FAIL: libgomp.oacc-c++/../libgomp.oacc-c-c++-common/nested-1.c -DACC_DEVICE_TYPE_nvidia=1 -DACC_MEM_SHARED=0 -foffload=nvptx-none -O2 execution test +FAIL: libgomp.oacc-c++/../libgomp.oacc-c-c++-common/pr92854-1.c -DACC_DEVICE_TYPE_nvidia=1 -DACC_MEM_SHARED=0 -foffload=nvptx-none -O0 execution test +FAIL: libgomp.oacc-c++/../libgomp.oacc-c-c++-common/pr92854-1.c -DACC_DEVICE_TYPE_nvidia=1 -DACC_MEM_SHARED=0 -foffload=nvptx-none -O2 execution test Now, I have also re-tested your version (aka, just break early and return when k->refcount == REFCOUNT_ACC_MAP_DATA) And for the record, that also works (no regressions). However, I strongly suggest we use my version here where we adjust the dynamic_refcount, simply because: *It is the whole point of this project item in OpenACC 2.7* The 2.7 spec articulated how increment/decrement interacts with acc_map_data/acc_unmap_data and this patch was supposed to make libgomp more conforming to it implementation-wise. (otherwise, no point in working on this at all, as there wasn't really anything behaviorally wrong about our implementation before) > I see we already have: > > if ((kinds[i] & 0xff) == GOMP_MAP_TO_PSET > && tgt->list_count == 0) > { > /* 'declare target'. */ > assert (n->refcount == REFCOUNT_INFINITY); > > I think I wanted to you to add: > > --- a/libgomp/oacc-mem.c > +++ b/libgomp/oacc-mem.c > @@ -1217,7 +1209,8 @@ goacc_enter_data_internal (struct gomp_device_descr *acc_dev, size_t mapnum, > processed = true; > } > else > - assert (n->refcount != REFCOUNT_INFINITY); > + assert (n->refcount != REFCOUNT_INFINITY > + && n->refcount != REFCOUNT_ACC_MAP_DATA); > > for (size_t j = 0; j < tgt->list_count; j++) > if (tgt->list[j].key == n) I have added this fragment to the patch, thanks. > > Please check these items, and then we're good to go. I have attached v3 of this patch, of course re-tested without regressions. If there are no objections I will commit this before end of week (maybe weekend) Thanks, Chung-Lin --------------bizr9202FbzJHeq70y2TveqH Content-Type: text/plain; charset=UTF-8; name="acc_map_data-v3.patch" Content-Disposition: attachment; filename="acc_map_data-v3.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpYmdvbXAvbGliZ29tcC5oIGIvbGliZ29tcC9saWJnb21wLmgKaW5k ZXggZjk4Y2NjZDhiNjYuLjA4OTM5Mzg0NmQxIDEwMDY0NAotLS0gYS9saWJnb21wL2xpYmdv bXAuaAorKysgYi9saWJnb21wL2xpYmdvbXAuaApAQCAtMTE2Myw2ICsxMTYzLDggQEAgc3Ry dWN0IHRhcmdldF9tZW1fZGVzYzsKIC8qIFNwZWNpYWwgdmFsdWUgZm9yIHJlZmNvdW50IC0g dGd0X29mZnNldCBjb250YWlucyB0YXJnZXQgYWRkcmVzcyBvZiB0aGUKICAgIGFydGlmaWNp YWwgcG9pbnRlciB0byAib21wIGRlY2xhcmUgdGFyZ2V0IGxpbmsiIG9iamVjdC4gICovCiAj ZGVmaW5lIFJFRkNPVU5UX0xJTksgICAgIChSRUZDT1VOVF9TUEVDSUFMIHwgMSkKKy8qIFNw ZWNpYWwgdmFsdWUgZm9yIHJlZmNvdW50IC0gY3JlYXRlZCB0aHJvdWdoIGFjY19tYXBfZGF0 YS4gICovCisjZGVmaW5lIFJFRkNPVU5UX0FDQ19NQVBfREFUQSAoUkVGQ09VTlRfU1BFQ0lB TCB8IDIpCiAKIC8qIFNwZWNpYWwgdmFsdWUgZm9yIHJlZmNvdW50IC0gc3RydWN0dXJlIGVs ZW1lbnQgc2libGluZyBsaXN0IGl0ZW1zLgogICAgQWxsIHN1Y2gga2V5IHJlZm91bnRzIGhh dmUgUkVGQ09VTlRfU1RSVUNURUxFTSBiaXRzIHNldCwgd2l0aCBfRkxBR19GSVJTVApkaWZm IC0tZ2l0IGEvbGliZ29tcC9vYWNjLW1lbS5jIGIvbGliZ29tcC9vYWNjLW1lbS5jCmluZGV4 IGJhNDhhMWNjYmI3Li5kNTkwODA2YjVjZCAxMDA2NDQKLS0tIGEvbGliZ29tcC9vYWNjLW1l bS5jCisrKyBiL2xpYmdvbXAvb2FjYy1tZW0uYwpAQCAtNDExLDcgKzQxMSw4IEBAIGFjY19t YXBfZGF0YSAodm9pZCAqaCwgdm9pZCAqZCwgc2l6ZV90IHMpCiAgICAgICBhc3NlcnQgKG4t PnJlZmNvdW50ID09IDEpOwogICAgICAgYXNzZXJ0IChuLT5keW5hbWljX3JlZmNvdW50ID09 IDApOwogICAgICAgLyogU3BlY2lhbCByZWZlcmVuY2UgY291bnRpbmcgYmVoYXZpb3IuICAq LwotICAgICAgbi0+cmVmY291bnQgPSBSRUZDT1VOVF9JTkZJTklUWTsKKyAgICAgIG4tPnJl ZmNvdW50ID0gUkVGQ09VTlRfQUNDX01BUF9EQVRBOworICAgICAgbi0+ZHluYW1pY19yZWZj b3VudCA9IDE7CiAKICAgICAgIGlmIChwcm9maWxpbmdfcCkKIAl7CkBAIC00NTUsMTIgKzQ1 Niw3IEBAIGFjY191bm1hcF9kYXRhICh2b2lkICpoKQogICAgICAgZ29tcF9mYXRhbCAoIlsl cCwlZF0gc3Vycm91bmRzICVwIiwKIAkJICAodm9pZCAqKSBuLT5ob3N0X3N0YXJ0LCAoaW50 KSBob3N0X3NpemUsICh2b2lkICopIGgpOwogICAgIH0KLSAgLyogVE9ETyBUaGlzIGN1cnJl bnRseSBkb2Vzbid0IGNhdGNoICdSRUZDT1VOVF9JTkZJTklUWScgdXNhZ2UgZGlmZmVyZW50 IGZyb20KLSAgICAgJ2FjY19tYXBfZGF0YScuICBNYXliZSAnZHluYW1pY19yZWZjb3VudCcg Y2FuIGJlIHVzZWQgZm9yIGRpc2FtYmlndWF0aW5nCi0gICAgIHRoZSBkaWZmZXJlbnQgJ1JF RkNPVU5UX0lORklOSVRZJyBjYXNlcywgb3Igc2ltcGx5IHNlcGFyYXRlCi0gICAgICdSRUZD T1VOVF9JTkZJTklUWScgdmFsdWVzIHBlciBkaWZmZXJlbnQgdXNhZ2UgKCdSRUZDT1VOVF9B Q0NfTUFQX0RBVEEnCi0gICAgIGV0Yy4pPyAgKi8KLSAgZWxzZSBpZiAobi0+cmVmY291bnQg IT0gUkVGQ09VTlRfSU5GSU5JVFkpCisgIGVsc2UgaWYgKG4tPnJlZmNvdW50ICE9IFJFRkNP VU5UX0FDQ19NQVBfREFUQSkKICAgICB7CiAgICAgICBnb21wX211dGV4X3VubG9jayAoJmFj Y19kZXYtPmxvY2spOwogICAgICAgZ29tcF9mYXRhbCAoInJlZnVzaW5nIHRvIHVubWFwIGJs b2NrIFslcCwrJWRdIHRoYXQgaGFzIG5vdCBiZWVuIG1hcHBlZCIKQEAgLTQ2OCwxMyArNDY0 LDEyIEBAIGFjY191bm1hcF9kYXRhICh2b2lkICpoKQogCQkgICh2b2lkICopIGgsIChpbnQp IGhvc3Rfc2l6ZSk7CiAgICAgfQogCi0gIHN0cnVjdCB0YXJnZXRfbWVtX2Rlc2MgKnRndCA9 IG4tPnRndDsKKyAgLyogVGhpcyBzaG91bGQgaG9sZCBmb3IgYWxsIG1hcHBpbmdzIGNyZWF0 ZWQgYnkgYWNjX21hcF9kYXRhLiBXZSBhcmUgaG93ZXZlcgorICAgICByZW1vdmluZyB0aGlz IG1hcHBpbmcgaW4gYSAiZmluYWxpemUiIG1hbm5lciwgc28gZHluYW1pY19yZWZjb3VudCA+ IDEgZG9lcworICAgICBub3QgbWF0dGVyLiAgKi8KKyAgYXNzZXJ0IChuLT5keW5hbWljX3Jl ZmNvdW50ID49IDEpOwogCi0gIGlmICh0Z3QtPnJlZmNvdW50ID09IFJFRkNPVU5UX0lORklO SVRZKQotICAgIHsKLSAgICAgIGdvbXBfbXV0ZXhfdW5sb2NrICgmYWNjX2Rldi0+bG9jayk7 Ci0gICAgICBnb21wX2ZhdGFsICgiY2Fubm90IHVubWFwIHRhcmdldCBibG9jayIpOwotICAg IH0KKyAgc3RydWN0IHRhcmdldF9tZW1fZGVzYyAqdGd0ID0gbi0+dGd0OwogCiAgIC8qIEFi b3ZlLCB3ZSd2ZSB2ZXJpZmllZCB0aGF0IHRoZSBtYXBwaW5nIG11c3QgaGF2ZSBiZWVuIHNl dCB1cCBieQogICAgICAnYWNjX21hcF9kYXRhJy4gICovCkBAIC01MTksNyArNTE0LDggQEAg Z29hY2NfbWFwX3Zhcl9leGlzdGluZyAoc3RydWN0IGdvbXBfZGV2aWNlX2Rlc2NyICphY2Nf ZGV2LCB2b2lkICpob3N0YWRkciwKICAgICB9CiAKICAgYXNzZXJ0IChuLT5yZWZjb3VudCAh PSBSRUZDT1VOVF9MSU5LKTsKLSAgaWYgKG4tPnJlZmNvdW50ICE9IFJFRkNPVU5UX0lORklO SVRZKQorICBpZiAobi0+cmVmY291bnQgIT0gUkVGQ09VTlRfSU5GSU5JVFkKKyAgICAgICYm IG4tPnJlZmNvdW50ICE9IFJFRkNPVU5UX0FDQ19NQVBfREFUQSkKICAgICBuLT5yZWZjb3Vu dCsrOwogICBuLT5keW5hbWljX3JlZmNvdW50Kys7CiAKQEAgLTY4MywxMyArNjc5LDMwIEBA IGdvYWNjX2V4aXRfZGF0dW1fMSAoc3RydWN0IGdvbXBfZGV2aWNlX2Rlc2NyICphY2NfZGV2 LCB2b2lkICpoLCBzaXplX3QgcywKIAogICBhc3NlcnQgKG4tPnJlZmNvdW50ICE9IFJFRkNP VU5UX0xJTkspOwogICBpZiAobi0+cmVmY291bnQgIT0gUkVGQ09VTlRfSU5GSU5JVFkKKyAg ICAgICYmIG4tPnJlZmNvdW50ICE9IFJFRkNPVU5UX0FDQ19NQVBfREFUQQogICAgICAgJiYg bi0+cmVmY291bnQgPCBuLT5keW5hbWljX3JlZmNvdW50KQogICAgIHsKICAgICAgIGdvbXBf bXV0ZXhfdW5sb2NrICgmYWNjX2Rldi0+bG9jayk7CiAgICAgICBnb21wX2ZhdGFsICgiRHlu YW1pYyByZWZlcmVuY2UgY291bnRpbmcgYXNzZXJ0IGZhaWxcbiIpOwogICAgIH0KIAotICBp ZiAoZmluYWxpemUpCisgIGlmIChuLT5yZWZjb3VudCA9PSBSRUZDT1VOVF9BQ0NfTUFQX0RB VEEpCisgICAgeworICAgICAgaWYgKGZpbmFsaXplKQorCXsKKwkgIC8qIE1hcHBpbmdzIGNy ZWF0ZWQgYnkgYWNjX21hcF9kYXRhIGFyZSByZXR1cm5lZCB0byBpbml0aWFsCisJICAgICBk eW5hbWljX3JlZmNvdW50IG9mIDEuIENhbiBvbmx5IGJlIGRlbGV0ZWQgYnkgYWNjX3VubWFw X2RhdGEuICAqLworCSAgbi0+ZHluYW1pY19yZWZjb3VudCA9IDE7CisJfQorICAgICAgZWxz ZSBpZiAobi0+ZHluYW1pY19yZWZjb3VudCkKKwl7CisJICAvKiBXaGVuIG1hcHBpbmcgaXMg Y3JlYXRlZCBieSBhY2NfbWFwX2RhdGEsIGR5bmFtaWNfcmVmY291bnQgbXVzdCBiZQorCSAg ICAgbWFpbnRhaW5lZCBhdCA+PSAxLiAgKi8KKwkgIGlmIChuLT5keW5hbWljX3JlZmNvdW50 ID4gMSkKKwkgICAgbi0+ZHluYW1pY19yZWZjb3VudC0tOworCX0KKyAgICB9CisgIGVsc2Ug aWYgKGZpbmFsaXplKQogICAgIHsKICAgICAgIGlmIChuLT5yZWZjb3VudCAhPSBSRUZDT1VO VF9JTkZJTklUWSkKIAluLT5yZWZjb3VudCAtPSBuLT5keW5hbWljX3JlZmNvdW50OwpAQCAt MTEzMSw3ICsxMTQ0LDggQEAgZ29hY2NfZW50ZXJfZGF0YV9pbnRlcm5hbCAoc3RydWN0IGdv bXBfZGV2aWNlX2Rlc2NyICphY2NfZGV2LCBzaXplX3QgbWFwbnVtLAogCSAgICB9CiAJICAv KiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGJlY2F1c2Ugd2UgbXVzdCBpbmNyZW1lbnQgdGhl IHJlZmNvdW50IGJ5CiAJICAgICB0aGUgbnVtYmVyIG9mIG1hcHBlZCBzdHJ1Y3QgZWxlbWVu dHMsIHJhdGhlciB0aGFuIGJ5IG9uZS4gICovCi0JICBpZiAobi0+cmVmY291bnQgIT0gUkVG Q09VTlRfSU5GSU5JVFkpCisJICBpZiAobi0+cmVmY291bnQgIT0gUkVGQ09VTlRfSU5GSU5J VFkKKwkgICAgICAmJiBuLT5yZWZjb3VudCAhPSBSRUZDT1VOVF9BQ0NfTUFQX0RBVEEpCiAJ ICAgIG4tPnJlZmNvdW50ICs9IGdyb3VwbnVtIC0gMTsKIAkgIG4tPmR5bmFtaWNfcmVmY291 bnQgKz0gZ3JvdXBudW0gLSAxOwogCX0KQEAgLTEyMDMsNyArMTIxNyw4IEBAIGdvYWNjX2Vu dGVyX2RhdGFfaW50ZXJuYWwgKHN0cnVjdCBnb21wX2RldmljZV9kZXNjciAqYWNjX2Rldiwg c2l6ZV90IG1hcG51bSwKIAkgICAgICBwcm9jZXNzZWQgPSB0cnVlOwogCSAgICB9CiAJICBl bHNlCi0JICAgIGFzc2VydCAobi0+cmVmY291bnQgIT0gUkVGQ09VTlRfSU5GSU5JVFkpOwor CSAgICBhc3NlcnQgKG4tPnJlZmNvdW50ICE9IFJFRkNPVU5UX0lORklOSVRZCisJCSAgICAm JiBuLT5yZWZjb3VudCAhPSBSRUZDT1VOVF9BQ0NfTUFQX0RBVEEpOwogCiAJICBmb3IgKHNp emVfdCBqID0gMDsgaiA8IHRndC0+bGlzdF9jb3VudDsgaisrKQogCSAgICBpZiAodGd0LT5s aXN0W2pdLmtleSA9PSBuKQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90YXJnZXQuYyBiL2xpYmdv bXAvdGFyZ2V0LmMKaW5kZXggYmNjODYwNTE2MDEuLmM5ZGNiODc2MWU1IDEwMDY0NAotLS0g YS9saWJnb21wL3RhcmdldC5jCisrKyBiL2xpYmdvbXAvdGFyZ2V0LmMKQEAgLTQ4MSw3ICs0 ODEsOSBAQCBnb21wX2luY3JlbWVudF9yZWZjb3VudCAoc3BsYXlfdHJlZV9rZXkgaywgaHRh Yl90ICpyZWZjb3VudF9zZXQpCiAKICAgdWludHB0cl90ICpyZWZjb3VudF9wdHIgPSAmay0+ cmVmY291bnQ7CiAKLSAgaWYgKFJFRkNPVU5UX1NUUlVDVEVMRU1fRklSU1RfUCAoay0+cmVm Y291bnQpKQorICBpZiAoay0+cmVmY291bnQgPT0gUkVGQ09VTlRfQUNDX01BUF9EQVRBKQor ICAgIHJlZmNvdW50X3B0ciA9ICZrLT5keW5hbWljX3JlZmNvdW50OworICBlbHNlIGlmIChS RUZDT1VOVF9TVFJVQ1RFTEVNX0ZJUlNUX1AgKGstPnJlZmNvdW50KSkKICAgICByZWZjb3Vu dF9wdHIgPSAmay0+c3RydWN0ZWxlbV9yZWZjb3VudDsKICAgZWxzZSBpZiAoUkVGQ09VTlRf U1RSVUNURUxFTV9QIChrLT5yZWZjb3VudCkpCiAgICAgcmVmY291bnRfcHRyID0gay0+c3Ry dWN0ZWxlbV9yZWZjb3VudF9wdHI7CkBAIC01MjgsNyArNTMwLDkgQEAgZ29tcF9kZWNyZW1l bnRfcmVmY291bnQgKHNwbGF5X3RyZWVfa2V5IGssIGh0YWJfdCAqcmVmY291bnRfc2V0LCBi b29sIGRlbGV0ZV9wLAogCiAgIHVpbnRwdHJfdCAqcmVmY291bnRfcHRyID0gJmstPnJlZmNv dW50OwogCi0gIGlmIChSRUZDT1VOVF9TVFJVQ1RFTEVNX0ZJUlNUX1AgKGstPnJlZmNvdW50 KSkKKyAgaWYgKGstPnJlZmNvdW50ID09IFJFRkNPVU5UX0FDQ19NQVBfREFUQSkKKyAgICBy ZWZjb3VudF9wdHIgPSAmay0+ZHluYW1pY19yZWZjb3VudDsKKyAgZWxzZSBpZiAoUkVGQ09V TlRfU1RSVUNURUxFTV9GSVJTVF9QIChrLT5yZWZjb3VudCkpCiAgICAgcmVmY291bnRfcHRy ID0gJmstPnN0cnVjdGVsZW1fcmVmY291bnQ7CiAgIGVsc2UgaWYgKFJFRkNPVU5UX1NUUlVD VEVMRU1fUCAoay0+cmVmY291bnQpKQogICAgIHJlZmNvdW50X3B0ciA9IGstPnN0cnVjdGVs ZW1fcmVmY291bnRfcHRyOwpAQCAtNTYxLDYgKzU2NSwxMCBAQCBnb21wX2RlY3JlbWVudF9y ZWZjb3VudCAoc3BsYXlfdHJlZV9rZXkgaywgaHRhYl90ICpyZWZjb3VudF9zZXQsIGJvb2wg ZGVsZXRlX3AsCiAgIGVsc2UgaWYgKCpyZWZjb3VudF9wdHIgPiAwKQogICAgICpyZWZjb3Vu dF9wdHIgLT0gMTsKIAorICAvKiBGb3JjZSBiYWNrIHRvIDEgaWYgdGhpcyBpcyBhbiBhY2Nf bWFwX2RhdGEgbWFwcGluZy4gICovCisgIGlmIChrLT5yZWZjb3VudCA9PSBSRUZDT1VOVF9B Q0NfTUFQX0RBVEEgJiYgKnJlZmNvdW50X3B0ciA9PSAwKQorICAgICpyZWZjb3VudF9wdHIg PSAxOworCiAgZW5kOgogICBpZiAoKnJlZmNvdW50X3B0ciA9PSAwKQogICAgIHsKZGlmZiAt LWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAub2FjYy1jLWMrKy1jb21tb24vbGli LTk2LmMgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLm9hY2MtYy1jKystY29tbW9uL2xp Yi05Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43YmM1NWI5 NGYzMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAub2Fj Yy1jLWMrKy1jb21tb24vbGliLTk2LmMKQEAgLTAsMCArMSwzNiBAQAorLyogeyBkZy1kbyBy dW4gfSAqLworLyogeyBkZy1za2lwLWlmICIiIHsgKi0qLSogfSB7ICItREFDQ19NRU1fU0hB UkVEPTEiIH0gfSAqLworCisvKiBUZXN0IGlmIGFjY191bm1hcF9kYXRhIGhhcyBpbXBsaWNp dCBmaW5hbGl6ZSBzZW1hbnRpY3MuICAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j bHVkZSA8b3BlbmFjYy5oPgorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikK K3sKKyAgY29uc3QgaW50IE4gPSAyNTY7CisgIHVuc2lnbmVkIGNoYXIgKmg7CisgIHZvaWQg KmQ7CisKKyAgaCA9ICh1bnNpZ25lZCBjaGFyICopIG1hbGxvYyAoTik7CisKKyAgZCA9IGFj Y19tYWxsb2MgKE4pOworCisgIGFjY19tYXBfZGF0YSAoaCwgZCwgTik7CisKKyAgYWNjX2Nv cHlpbiAoaCwgTik7CisgIGFjY19jb3B5aW4gKGgsIE4pOworICBhY2NfY29weWluIChoLCBO KTsKKworICBhY2NfdW5tYXBfZGF0YSAoaCk7CisKKyAgaWYgKGFjY19pc19wcmVzZW50ICho LCBOKSkKKyAgICBhYm9ydCAoKTsKKworICBhY2NfZnJlZSAoZCk7CisKKyAgZnJlZSAoaCk7 CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJn b21wLm9hY2MtYy1jKystY29tbW9uL3VubWFwLWluZmluaXR5LTEuYyBiL2xpYmdvbXAvdGVz dHN1aXRlL2xpYmdvbXAub2FjYy1jLWMrKy1jb21tb24vdW5tYXAtaW5maW5pdHktMS5jCmlu ZGV4IDg3MmYwYzFkZTVjLi45ZWQ5ZmE3ZTQxMyAxMDA2NDQKLS0tIGEvbGliZ29tcC90ZXN0 c3VpdGUvbGliZ29tcC5vYWNjLWMtYysrLWNvbW1vbi91bm1hcC1pbmZpbml0eS0xLmMKKysr IGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5vYWNjLWMtYysrLWNvbW1vbi91bm1hcC1p bmZpbml0eS0xLmMKQEAgLTEwLDcgKzEwLDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKIHsKICAgYWNjX2luaXQgKGFjY19kZXZpY2VfZGVmYXVsdCk7CiAgIGFjY191bm1h cF9kYXRhICgodm9pZCAqKSBmb28pOwotLyogeyBkZy1vdXRwdXQgImxpYmdvbXA6IGNhbm5v dCB1bm1hcCB0YXJnZXQgYmxvY2siIH0gKi8KKy8qIHsgZGctb3V0cHV0ICJsaWJnb21wOiBy ZWZ1c2luZyB0byB1bm1hcCBibG9jayBcXFxbXFswLTlhLWZBLUZ4WFxdKyxcXFwrNjRcXFxd IHRoYXQgaGFzIG5vdCBiZWVuIG1hcHBlZCBieSAnYWNjX21hcF9kYXRhJyIgfSAqLwogICBy ZXR1cm4gMDsKIH0KIAo= --------------bizr9202FbzJHeq70y2TveqH--