From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x62f.google.com (mail-ej1-x62f.google.com [IPv6:2a00:1450:4864:20::62f]) by sourceware.org (Postfix) with ESMTPS id B97113858D1E for ; Mon, 29 Jan 2024 17:07:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B97113858D1E 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 B97113858D1E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::62f ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706548050; cv=none; b=KF0YFlWT5yC51b6za8yPm6WRFo66AU4aP2JmEmUlRcmyPr+AFXnkjKVhwlKb2j8hFS/0A6Z3CBlY0ZffljW/gqnjrSjtbJmZwTcuwJARVudQGivEbQBSRyVwxRvKH5dWLo4Die/YCKbgEjLs+eN8NbMU6S5npYStf5632OPMI40= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706548050; c=relaxed/simple; bh=SMowR1f9wSl0ED/Hx3O/YjaKfCLVr4lkFQHL8uBIZpY=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=lm6CWk7pq/SK2xbvHIkEoQMLzio3Z8Ghi1a5yVVngh4PhB9sWakr5qfFLByCM3bxHLjTXSULyLWnIOTcZGAMyzAbqmH4kXg/q2abV996p8TuaBBSwRGjnM2eDPnVbAiOqR/7FPXf98jb7UyIMWuM2noLCG/LeXdGLzFUyUKBqbo= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-ej1-x62f.google.com with SMTP id a640c23a62f3a-a30e445602cso837592566b.0 for ; Mon, 29 Jan 2024 09:07:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1706548044; x=1707152844; 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=7zLFveKNG+Yperjc8R/ZKyh7o/fkHOSPwf1ynDaIUpE=; b=2DxPEmwuiUZ6/u4FS7aFGJsMZ/UGaxUytJhiVldiyqoxCgMtPzKtqHoGFeuYvsX3s0 A0atvGiQBpvP3hf6F9eQPmf3OD6y9tzxaKxlJU+pq18loWfsaQ1utP6vW+VVAQFX0DBL GPYcJHmxDRZI5TPk252dENhz3NVnKC5ZXDTlRrRi2IHlfAL2mfjBi2FdeijeA6FpSwen 3gXFyl1nDwa0Z4/nJ+r1rFOzvWFkNg77DAyXi2Zhoop9GdnKX35Wy4/L0VdXUsG0CwS0 83AGlOjz043VfJm046qJnYf7b8F9+E38qi4Cbu6ZTK95sDrF0jdkaYm9cGIly/B2vofS Kdrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706548044; x=1707152844; 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=7zLFveKNG+Yperjc8R/ZKyh7o/fkHOSPwf1ynDaIUpE=; b=sHvDkHlmTjuTPDYdVj042TzYYnwwFXWJleWpTou0k9olme5RWE0i93/NNJEjlDohBS aF77tiIspYUdEnRccStySC07Bfit4m6BNRjT9akjeM1BWxq/J34mv3iPZcuPMgdl86HY L09IDsUNJzQcQyISPjWcLZevmT+Fh01yznhC5yAKwgBDi5lwbT4rr2mS5gfLWvSbNfi1 BqNtExIPDNTm//VrlLE6HQFYvn82h65H9nW3NbwYTJS2DWdbIMIp48NCPDDDEu2l2V0/ Cx7KiuTme5ECceEKkSrF2dAGKHmr7gouR3f4KGdupBuqKi0qUezI7GLwVdGb8BQnDDA+ 8nyQ== X-Gm-Message-State: AOJu0Yz5bE3lfvjM4u1oziqGVIr3YQps3WsbLnNcH6YK2rml0xT9Fv8H HuhoA1XpfnltcjJTNpRWx3Idkbxd5uxdaoALPLWQCr0hN71XcRjDHIS7/dnMou7D0a1yJBBRWoh g X-Google-Smtp-Source: AGHT+IEHBtnavihbccBjANci3C6Le7XtdA9aFyieqiq4skyTU+fhzmzAYs90e2ZlrUoJDo6LIyEB4g== X-Received: by 2002:a17:906:36d7:b0:a35:a7ba:c647 with SMTP id b23-20020a17090636d700b00a35a7bac647mr3299171ejc.3.1706548044199; Mon, 29 Jan 2024 09:07:24 -0800 (PST) Received: from ?IPV6:2001:16b8:2a2e:4200:be03:58ff:fe31:f74? (200116b82a2e4200be0358fffe310f74.dip.versatel-1u1.de. [2001:16b8:2a2e:4200:be03:58ff:fe31:f74]) by smtp.gmail.com with ESMTPSA id f19-20020a17090624d300b00a2f15b8cb76sm4086352ejb.184.2024.01.29.09.07.23 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 29 Jan 2024 09:07:23 -0800 (PST) Content-Type: multipart/mixed; boundary="------------NQRrc8P5W4Q6Mwaq090m8Apq" Message-ID: Date: Mon, 29 Jan 2024 18:07:22 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [v2][patch] plugin/plugin-nvptx.c: Fix fini_device call when already shutdown [PR113513] To: Thomas Schwinge Cc: gcc-patches@gcc.gnu.org, Jakub Jelinek , Tom de Vries References: <30b08783-4f6d-4ae1-9459-9391fc8e6262@baylibre.com> <53a3c4e3-452c-4445-8d4a-be66dccc9e45@baylibre.com> <875xzcf85h.fsf@euler.schwinge.ddns.net> Content-Language: en-US From: Tobias Burnus In-Reply-To: <875xzcf85h.fsf@euler.schwinge.ddns.net> X-Spam-Status: No, score=-10.5 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE 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. --------------NQRrc8P5W4Q6Mwaq090m8Apq Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi Thomas, Thomas Schwinge wrote: > On 2024-01-23T10:55:16+0100, Tobias Burnus wrote: >> plugin/plugin-nvptx.c: Fix fini_device call when already shutdown [PR113513] >> >> The following issue was found when running libgomp.c/target-52.c with >> nvptx offloading when the dg-set-target-env-var was honored. > Curious, I've never seen this failure mode in my several different > configurations. :-| I think we recently fixed a surprisingly high number of issues that we didn't see before but were clearly preexisting for quite a while. (Mostly for AMDGPU but still.) But I concur that this one is a more tricky one. >> For some unknown reasons, while this does not have an effect on the >> order of the called plugin functions for initialization, it changes the >> order of function calls for shutting down. Namely, when the two environment >> variables are set, GOMP_offload_unregister_ver is called now before >> gomp_target_fini. > Re "unknown reasons", isn't that indeed explained by the different > 'atexit' function/'__attribute__((destructor))' sequencing, due to > different order of 'atexit'/'__attribute__((constructor))' calls? Maybe or not. First, it does not seem to occur elsewhere but maybe that's because remote setting of environment variables does not work with DejaGNU and most code was run such a way. And secondly, I have no idea how 'atexit' and destructors are implemented internally. >> And it seems as if CUDA regards a call to cuModuleUnload >> (or unloading the last module?) as indication that the device context should >> be destroyed - or, at least, afterwards calling cuCtxGetDevice will return >> CUDA_ERROR_DEINITIALIZED. > However, this I don't understand -- but would like to. Are you saying > that for: > > --- libgomp/plugin/plugin-nvptx.c > +++ libgomp/plugin/plugin-nvptx.c > @@ -1556,8 +1556,16 @@ GOMP_OFFLOAD_unload_image (int ord, unsigned version, const void *target_data) > if (image->target_data == target_data) > { > *prev_p = image->next; > - if (CUDA_CALL_NOCHECK (cuModuleUnload, image->module) != CUDA_SUCCESS) > + CUresult r; > + r = CUDA_CALL_NOCHECK (cuModuleUnload, image->module); > + GOMP_PLUGIN_debug (0, "%s: cuModuleUnload: %s\n", __FUNCTION__, cuda_error (r)); > + if (r != CUDA_SUCCESS) > ret = false; > + CUdevice dev_; > + r = CUDA_CALL_NOCHECK (cuCtxGetDevice, &dev_); > + GOMP_PLUGIN_debug (0, "%s: cuCtxGetDevice: %s\n", __FUNCTION__, cuda_error (r)); > + GOMP_PLUGIN_debug (0, "%s: dev_=%d, dev->dev=%d\n", __FUNCTION__, dev_, dev->dev); > + assert (dev_ == dev->dev); > free (image->fns); > free (image); > break; > > ..., you're seeing an error for 'libgomp.c/target-52.c' with > 'env OMP_TARGET_OFFLOAD=mandatory OMP_DISPLAY_ENV=true'? I get: > > GOMP_OFFLOAD_unload_image: cuModuleUnload: no error > GOMP_OFFLOAD_unload_image: cuCtxGetDevice: no error > GOMP_OFFLOAD_unload_image: dev_=0, dev->dev=0 > > Or, is something else happening in between the 'cuModuleUnload' and your > reportedly failing 'cuCtxGetDevice'? I cluttered the plugin with "printf" debugging; hence, no other code is calling *into* the run-time library as far as I can see. But now I will try it with a vanilla code and your patch applied. Result for the target-52.c with the env vars set: DEBUG: GOMP_offload_unregister_ver dev=0; state=1 DEBUG: gomp_unload_image_from_device DEBUG GOMP_OFFLOAD_unload_image, 0, 196609 GOMP_OFFLOAD_unload_image: cuModuleUnload: no error GOMP_OFFLOAD_unload_image: cuCtxGetDevice: no error GOMP_OFFLOAD_unload_image: dev_=0, dev->dev=0 DEBUG: gomp_target_fini; dev=0, state=1 DEBUG 0 DEBUG: nvptx_attach_host_thread_to_device - 0 DEBUG: ERROR nvptx_attach_host_thread_to_device - 0 libgomp: cuCtxGetDevice error: unknown cuda error Hence: The immediately calling cuCtxGetDevice after the device unloading does not fail. But calling it soon late via gomp_target_fini → GOMP_OFFLOAD_fini_device → nvptx_attach_host_thread_to_device does fail. I have attached my printf patch for reference. * * * > Re your PR113513 details, I don't see how your failure mode could be > related to (a) the PTX code ('--with-arch=sm_80'), or the GPU hardware > ("NVIDIA RTX A1000 6GB") (..., unless the Nvidia Driver is doing "funny" > things, of course...), so could this possibly be due to a recent change > in the CUDA Driver/Nvidia Driver? You say "CUDA Version: 12.3", but > which which Nvidia Driver version? The latest I've now tested are: > > Driver Version: 525.147.05 CUDA Version: 12.0 > Driver Version: 535.154.05 CUDA Version: 12.2 My laptop has: NVIDIA-SMI 545.29.06              Driver Version: 545.29.06    CUDA Version: 12.3 > I'd like to please defer that one until we understand the actual origin > of the misbehavior. (I think that patch makes still sense, but first finding out what goes wrong is fine nonetheless.) >> When reading the code, the following was observed in addition: >> When gomp_fini_device is called, it invokes goacc_fini_asyncqueues >> to ensure that the queue is emptied. It seems to make sense to do >> likewise for GOMP_offload_unregister_ver, which this commit does in >> addition. > I don't understand why offload image unregistration (a) should trigger > 'goacc_fini_asyncqueues', and (b) how that relates to PR113513? While there no direct relation and none to the testcase, this is affected by the ordering of GOMP_offload_unregister_ver vs.before gomp_target_fini, which is what the main issue is above. Assume that by some reason GOMP_offload_unregister_ver gets called before gomp_target_fini. In that case, the asynchronous queues can be still running when the variables are removed and only when later gomp_target_fini is called, it will invoke goacc_fini_asyncqueues. Of course, when gomp_target_fini is called first, it will run goacc_fini_asyncqueues first – and a later GOMP_offload_unregister_ver is a no op as the device is already finalized. Thus, this part of the patch adds a safeguard for something to be a known issue for a related issue. If we guarantee that gomp_target_fini is always called first, I suggest to remove GOMP_offload_unregister_ver for good as that will then be always unreachable ... (Well, that function itself not but it will not do any actual work.) If we don't think so and there might be an ordering issue, I very much would like to see this safeguard in, which is very inexpensive if no work remains to be completed. Tobias --------------NQRrc8P5W4Q6Mwaq090m8Apq Content-Type: text/x-patch; charset=UTF-8; name="debug_nvptx_fini.diff" Content-Disposition: attachment; filename="debug_nvptx_fini.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpYmdvbXAvcGx1Z2luL3BsdWdpbi1udnB0eC5jIGIvbGliZ29tcC9w bHVnaW4vcGx1Z2luLW52cHR4LmMKaW5kZXggYzA0YzNhY2Q2NzkuLjdmYzdmNGE1YmJmIDEw MDY0NAotLS0gYS9saWJnb21wL3BsdWdpbi9wbHVnaW4tbnZwdHguYworKysgYi9saWJnb21w L3BsdWdpbi9wbHVnaW4tbnZwdHguYwpAQCAtMzkxLDcgKzM5MSw3IEBAIG52cHR4X2F0dGFj aF9ob3N0X3RocmVhZF90b19kZXZpY2UgKGludCBuKQogICBDVXJlc3VsdCByOwogICBzdHJ1 Y3QgcHR4X2RldmljZSAqcHR4X2RldjsKICAgQ1Vjb250ZXh0IHRoZF9jdHg7Ci0KK19fYnVp bHRpbl9mcHJpbnRmIChzdGRlcnIsICJERUJVRzogbnZwdHhfYXR0YWNoX2hvc3RfdGhyZWFk X3RvX2RldmljZSAtICVkXG4iLCBuKTsKICAgciA9IENVREFfQ0FMTF9OT0NIRUNLIChjdUN0 eEdldERldmljZSwgJmRldik7CiAgIGlmIChyID09IENVREFfRVJST1JfTk9UX1BFUk1JVFRF RCkKICAgICB7CkBAIC00MDAsNiArNDAwLDcgQEAgbnZwdHhfYXR0YWNoX2hvc3RfdGhyZWFk X3RvX2RldmljZSAoaW50IG4pCiAgICAgfQogICBpZiAociAhPSBDVURBX1NVQ0NFU1MgJiYg ciAhPSBDVURBX0VSUk9SX0lOVkFMSURfQ09OVEVYVCkKICAgICB7CitfX2J1aWx0aW5fZnBy aW50ZiAoc3RkZXJyLCAiREVCVUc6IEVSUk9SIG52cHR4X2F0dGFjaF9ob3N0X3RocmVhZF90 b19kZXZpY2UgLSAlZFxuIiwgbik7CiAgICAgICBHT01QX1BMVUdJTl9lcnJvciAoImN1Q3R4 R2V0RGV2aWNlIGVycm9yOiAlcyIsIGN1ZGFfZXJyb3IgKHIpKTsKICAgICAgIHJldHVybiBm YWxzZTsKICAgICB9CkBAIC00NDUsOSArNDQ2LDExIEBAIG52cHR4X29wZW5fZGV2aWNlIChp bnQgbikKICAgcHR4X2Rldi0+ZGV2ID0gZGV2OwogICBwdHhfZGV2LT5jdHhfc2hhcmVkID0g ZmFsc2U7CiAKK19fYnVpbHRpbl9mcHJpbnRmIChzdGRlcnIsICJERUJVRzogbnZwdHhfb3Bl bl9kZXZpY2UgLSAlZFxuIiwgbik7CiAgIHIgPSBDVURBX0NBTExfTk9DSEVDSyAoY3VDdHhH ZXREZXZpY2UsICZjdHhfZGV2KTsKICAgaWYgKHIgIT0gQ1VEQV9TVUNDRVNTICYmIHIgIT0g Q1VEQV9FUlJPUl9JTlZBTElEX0NPTlRFWFQpCiAgICAgeworX19idWlsdGluX2ZwcmludGYg KHN0ZGVyciwgIkRFQlVHOiBFUlJPUiBudnB0eF9vcGVuX2RldmljZSAtICVkXG4iLCBuKTsK ICAgICAgIEdPTVBfUExVR0lOX2Vycm9yICgiY3VDdHhHZXREZXZpY2UgZXJyb3I6ICVzIiwg Y3VkYV9lcnJvciAocikpOwogICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTE3NCwy NCArMTE3NywyOCBAQCBudnB0eF9nZXRfY3VycmVudF9jdWRhX2NvbnRleHQgKHZvaWQpCiBj b25zdCBjaGFyICoKIEdPTVBfT0ZGTE9BRF9nZXRfbmFtZSAodm9pZCkKIHsKK19fYnVpbHRp bl9mcHJpbnRmIChzdGRlcnIsICJERUJVRyBHT01QX09GRkxPQURfZ2V0X25hbWVcbiIpOwog ICByZXR1cm4gIm52cHR4IjsKIH0KIAogdW5zaWduZWQgaW50CiBHT01QX09GRkxPQURfZ2V0 X2NhcHMgKHZvaWQpCiB7CitfX2J1aWx0aW5fZnByaW50ZiAoc3RkZXJyLCAiREVCVUcgR09N UF9PRkZMT0FEX2dldF9jYXBzXG4iKTsKICAgcmV0dXJuIEdPTVBfT0ZGTE9BRF9DQVBfT1BF TkFDQ18yMDAgfCBHT01QX09GRkxPQURfQ0FQX09QRU5NUF80MDA7CiB9CiAKIGludAogR09N UF9PRkZMT0FEX2dldF90eXBlICh2b2lkKQogeworX19idWlsdGluX2ZwcmludGYgKHN0ZGVy ciwgIkRFQlVHIEdPTVBfT0ZGTE9BRF9nZXRfdHlwZVxuIik7CiAgIHJldHVybiBPRkZMT0FE X1RBUkdFVF9UWVBFX05WSURJQV9QVFg7CiB9CiAKIGludAogR09NUF9PRkZMT0FEX2dldF9u dW1fZGV2aWNlcyAodW5zaWduZWQgaW50IG9tcF9yZXF1aXJlc19tYXNrKQogeworX19idWls dGluX2ZwcmludGYgKHN0ZGVyciwgIkRFQlVHIEdPTVBfT0ZGTE9BRF9nZXRfbnVtX2Rldmlj ZXMgJXVcbiIsIG9tcF9yZXF1aXJlc19tYXNrKTsKICAgaW50IG51bV9kZXZpY2VzID0gbnZw dHhfZ2V0X251bV9kZXZpY2VzICgpOwogICAvKiBSZXR1cm4gLTEgaWYgbm8gb21wX3JlcXVp cmVzX21hc2sgY2Fubm90IGJlIGZ1bGZpbGxlZCBidXQKICAgICAgZGV2aWNlcyB3ZXJlIHBy ZXNlbnQuICBVbmlmaWVkLXNoYXJlZCBhZGRyZXNzOiBzZWUgY29tbWVudCBpbgpAQCAtMTIw Nyw2ICsxMjE0LDcgQEAgR09NUF9PRkZMT0FEX2dldF9udW1fZGV2aWNlcyAodW5zaWduZWQg aW50IG9tcF9yZXF1aXJlc19tYXNrKQogYm9vbAogR09NUF9PRkZMT0FEX2luaXRfZGV2aWNl IChpbnQgbikKIHsKK19fYnVpbHRpbl9mcHJpbnRmIChzdGRlcnIsICJERUJVRyBHT01QX09G RkxPQURfaW5pdF9kZXZpY2UgJXVcbiIsIG4pOwogICBzdHJ1Y3QgcHR4X2RldmljZSAqZGV2 OwogCiAgIHB0aHJlYWRfbXV0ZXhfbG9jayAoJnB0eF9kZXZfbG9jayk7CkBAIC0xMjQ4LDYg KzEyNTYsNyBAQCBHT01QX09GRkxPQURfaW5pdF9kZXZpY2UgKGludCBuKQogYm9vbAogR09N UF9PRkZMT0FEX2ZpbmlfZGV2aWNlIChpbnQgbikKIHsKK19fYnVpbHRpbl9mcHJpbnRmIChz dGRlcnIsICJERUJVRyBHT01QX09GRkxPQURfZmluaV9kZXZpY2UgJXVcbiIsIG4pOwogICBw dGhyZWFkX211dGV4X2xvY2sgKCZwdHhfZGV2X2xvY2spOwogCiAgIGlmIChwdHhfZGV2aWNl c1tuXSAhPSBOVUxMKQpAQCAtMTI3OCw2ICsxMjg3LDcgQEAgR09NUF9PRkZMT0FEX2Zpbmlf ZGV2aWNlIChpbnQgbikKIHVuc2lnbmVkCiBHT01QX09GRkxPQURfdmVyc2lvbiAodm9pZCkK IHsKK19fYnVpbHRpbl9mcHJpbnRmIChzdGRlcnIsICJERUJVRyBHT01QX09GRkxPQURfdmVy c2lvblxuIik7CiAgIHJldHVybiBHT01QX1ZFUlNJT047CiB9CiAKQEAgLTEzMTEsNiArMTMy MSw3IEBAIEdPTVBfT0ZGTE9BRF9sb2FkX2ltYWdlIChpbnQgb3JkLCB1bnNpZ25lZCB2ZXJz aW9uLCBjb25zdCB2b2lkICp0YXJnZXRfZGF0YSwKIAkJCSB1aW50NjRfdCAqKnJldl9mbl90 YWJsZSwKIAkJCSB1aW50NjRfdCAqaG9zdF9pbmRfZm5fdGFibGUpCiB7CitfX2J1aWx0aW5f ZnByaW50ZiAoc3RkZXJyLCAiREVCVUcgR09NUF9PRkZMT0FEX2xvYWRfaW1hZ2UsICVkLCAl dVxuIiwgb3JkLCB2ZXJzaW9uKTsKICAgQ1Vtb2R1bGUgbW9kdWxlOwogICBjb25zdCBjaGFy ICpjb25zdCAqdmFyX25hbWVzOwogICBjb25zdCBzdHJ1Y3QgdGFyZ19mbl9sYXVuY2ggKmZu X2Rlc2NzOwpAQCAtMTUzOCw2ICsxNTQ5LDcgQEAgR09NUF9PRkZMT0FEX2xvYWRfaW1hZ2Ug KGludCBvcmQsIHVuc2lnbmVkIHZlcnNpb24sIGNvbnN0IHZvaWQgKnRhcmdldF9kYXRhLAog Ym9vbAogR09NUF9PRkZMT0FEX3VubG9hZF9pbWFnZSAoaW50IG9yZCwgdW5zaWduZWQgdmVy c2lvbiwgY29uc3Qgdm9pZCAqdGFyZ2V0X2RhdGEpCiB7CitfX2J1aWx0aW5fZnByaW50ZiAo c3RkZXJyLCAiREVCVUcgR09NUF9PRkZMT0FEX3VubG9hZF9pbWFnZSwgJWQsICV1XG4iLCBv cmQsIHZlcnNpb24pOwogICBzdHJ1Y3QgcHR4X2ltYWdlX2RhdGEgKmltYWdlLCAqKnByZXZf cDsKICAgc3RydWN0IHB0eF9kZXZpY2UgKmRldiA9IHB0eF9kZXZpY2VzW29yZF07CiAKQEAg LTE1NjgsNiArMTU4MCw3IEBAIEdPTVBfT0ZGTE9BRF91bmxvYWRfaW1hZ2UgKGludCBvcmQs IHVuc2lnbmVkIHZlcnNpb24sIGNvbnN0IHZvaWQgKnRhcmdldF9kYXRhKQogdm9pZCAqCiBH T01QX09GRkxPQURfYWxsb2MgKGludCBvcmQsIHNpemVfdCBzaXplKQogeworX19idWlsdGlu X2ZwcmludGYgKHN0ZGVyciwgIkRFQlVHIEdPTVBfT0ZGTE9BRF9hbGxvYywgJWQsICVsdVxu Iiwgb3JkLCAobG9uZyB1bnNpZ25lZClzaXplKTsKICAgaWYgKCFudnB0eF9hdHRhY2hfaG9z dF90aHJlYWRfdG9fZGV2aWNlIChvcmQpKQogICAgIHJldHVybiBOVUxMOwogCkBAIC0xNjA0 LDYgKzE2MTcsNyBAQCBHT01QX09GRkxPQURfYWxsb2MgKGludCBvcmQsIHNpemVfdCBzaXpl KQogYm9vbAogR09NUF9PRkZMT0FEX2ZyZWUgKGludCBvcmQsIHZvaWQgKnB0cikKIHsKK19f YnVpbHRpbl9mcHJpbnRmIChzdGRlcnIsICJERUJVRyBHT01QX09GRkxPQURfZnJlZSwgJWRc biIsIG9yZCk7CiAgIHJldHVybiAobnZwdHhfYXR0YWNoX2hvc3RfdGhyZWFkX3RvX2Rldmlj ZSAob3JkKQogCSAgJiYgbnZwdHhfZnJlZSAocHRyLCBwdHhfZGV2aWNlc1tvcmRdKSk7CiB9 CkBAIC0xNjE1LDYgKzE2MjksNyBAQCBHT01QX09GRkxPQURfb3BlbmFjY19leGVjICh2b2lk ICgqZm4pICh2b2lkICopLAogCQkJICAgdm9pZCAqKmRldmFkZHJzLAogCQkJICAgdW5zaWdu ZWQgKmRpbXMsIHZvaWQgKnRhcmdfbWVtX2Rlc2MpCiB7CitfX2J1aWx0aW5fZnByaW50ZiAo c3RkZXJyLCAiREVCVUcgR09NUF9PRkZMT0FEX29wZW5hY2NfZXhlY1xuIik7CiAgIEdPTVBf UExVR0lOX2RlYnVnICgwLCAibnZwdHggJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKICAgQ1Vk ZXZpY2VwdHIgZHAgPSAoQ1VkZXZpY2VwdHIpIGRldmFkZHJzOwpAQCAtMTYzNyw2ICsxNjUy LDcgQEAgR09NUF9PRkZMT0FEX29wZW5hY2NfYXN5bmNfZXhlYyAodm9pZCAoKmZuKSAodm9p ZCAqKSwKIAkJCQkgdW5zaWduZWQgKmRpbXMsIHZvaWQgKnRhcmdfbWVtX2Rlc2MsCiAJCQkJ IHN0cnVjdCBnb2FjY19hc3luY3F1ZXVlICphcSkKIHsKK19fYnVpbHRpbl9mcHJpbnRmIChz dGRlcnIsICJERUJVRyBHT01QX09GRkxPQURfb3BlbmFjY19hc3luY19leGVjXG4iKTsKICAg R09NUF9QTFVHSU5fZGVidWcgKDAsICJudnB0eCAlc1xuIiwgX19GVU5DVElPTl9fKTsKIAog ICBDVWRldmljZXB0ciBkcCA9IChDVWRldmljZXB0cikgZGV2YWRkcnM7CkBAIC0xNjQ2LDYg KzE2NjIsNyBAQCBHT01QX09GRkxPQURfb3BlbmFjY19hc3luY19leGVjICh2b2lkICgqZm4p ICh2b2lkICopLAogdm9pZCAqCiBHT01QX09GRkxPQURfb3BlbmFjY19jcmVhdGVfdGhyZWFk X2RhdGEgKGludCBvcmQpCiB7CitfX2J1aWx0aW5fZnByaW50ZiAoc3RkZXJyLCAiREVCVUcg R09NUF9PRkZMT0FEX29wZW5hY2NfY3JlYXRlX3RocmVhZF9kYXRhXG4iKTsKICAgc3RydWN0 IHB0eF9kZXZpY2UgKnB0eF9kZXY7CiAgIHN0cnVjdCBudnB0eF90aHJlYWQgKm52dGhkCiAg ICAgPSBHT01QX1BMVUdJTl9tYWxsb2MgKHNpemVvZiAoc3RydWN0IG52cHR4X3RocmVhZCkp OwpAQCAtMTY3MCwxOCArMTY4NywyMSBAQCBHT01QX09GRkxPQURfb3BlbmFjY19jcmVhdGVf dGhyZWFkX2RhdGEgKGludCBvcmQpCiB2b2lkCiBHT01QX09GRkxPQURfb3BlbmFjY19kZXN0 cm95X3RocmVhZF9kYXRhICh2b2lkICpkYXRhKQogeworX19idWlsdGluX2ZwcmludGYgKHN0 ZGVyciwgIkRFQlVHIEdPTVBfT0ZGTE9BRF9vcGVuYWNjX2Rlc3Ryb3lfdGhyZWFkX2RhdGFc biIpOwogICBmcmVlIChkYXRhKTsKIH0KIAogdm9pZCAqCiBHT01QX09GRkxPQURfb3BlbmFj Y19jdWRhX2dldF9jdXJyZW50X2RldmljZSAodm9pZCkKIHsKK19fYnVpbHRpbl9mcHJpbnRm IChzdGRlcnIsICJERUJVRyBHT01QX09GRkxPQURfb3BlbmFjY19jdWRhX2dldF9jdXJyZW50 X2RldmljZVxuIik7CiAgIHJldHVybiBudnB0eF9nZXRfY3VycmVudF9jdWRhX2RldmljZSAo KTsKIH0KIAogdm9pZCAqCiBHT01QX09GRkxPQURfb3BlbmFjY19jdWRhX2dldF9jdXJyZW50 X2NvbnRleHQgKHZvaWQpCiB7CitfX2J1aWx0aW5fZnByaW50ZiAoc3RkZXJyLCAiREVCVUcg R09NUF9PRkZMT0FEX29wZW5hY2NfY3VkYV9nZXRfY3VycmVudF9jb250ZXh0XG4iKTsKICAg cmV0dXJuIG52cHR4X2dldF9jdXJyZW50X2N1ZGFfY29udGV4dCAoKTsKIH0KIApAQCAtMTY4 OSw2ICsxNzA5LDcgQEAgR09NUF9PRkZMT0FEX29wZW5hY2NfY3VkYV9nZXRfY3VycmVudF9j b250ZXh0ICh2b2lkKQogdm9pZCAqCiBHT01QX09GRkxPQURfb3BlbmFjY19jdWRhX2dldF9z dHJlYW0gKHN0cnVjdCBnb2FjY19hc3luY3F1ZXVlICphcSkKIHsKK19fYnVpbHRpbl9mcHJp bnRmIChzdGRlcnIsICJERUJVRyBHT01QX09GRkxPQURfb3BlbmFjY19jdWRhX2dldF9zdHJl YW1cbiIpOwogICByZXR1cm4gKHZvaWQgKikgYXEtPmN1ZGFfc3RyZWFtOwogfQogCkBAIC0x Njk2LDYgKzE3MTcsNyBAQCBHT01QX09GRkxPQURfb3BlbmFjY19jdWRhX2dldF9zdHJlYW0g KHN0cnVjdCBnb2FjY19hc3luY3F1ZXVlICphcSkKIGludAogR09NUF9PRkZMT0FEX29wZW5h Y2NfY3VkYV9zZXRfc3RyZWFtIChzdHJ1Y3QgZ29hY2NfYXN5bmNxdWV1ZSAqYXEsIHZvaWQg KnN0cmVhbSkKIHsKK19fYnVpbHRpbl9mcHJpbnRmIChzdGRlcnIsICJERUJVRyBHT01QX09G RkxPQURfb3BlbmFjY19jdWRhX3NldF9zdHJlYW1cbiIpOwogICBpZiAoYXEtPmN1ZGFfc3Ry ZWFtKQogICAgIHsKICAgICAgIENVREFfQ0FMTF9BU1NFUlQgKGN1U3RyZWFtU3luY2hyb25p emUsIGFxLT5jdWRhX3N0cmVhbSk7CkBAIC0xNzIxLDYgKzE3NDMsNyBAQCBudnB0eF9nb2Fj Y19hc3luY3F1ZXVlX2NvbnN0cnVjdCAodW5zaWduZWQgaW50IGZsYWdzKQogc3RydWN0IGdv YWNjX2FzeW5jcXVldWUgKgogR09NUF9PRkZMT0FEX29wZW5hY2NfYXN5bmNfY29uc3RydWN0 IChpbnQgZGV2aWNlIF9fYXR0cmlidXRlX18oKHVudXNlZCkpKQogeworX19idWlsdGluX2Zw cmludGYgKHN0ZGVyciwgIkRFQlVHIEdPTVBfT0ZGTE9BRF9vcGVuYWNjX2FzeW5jX2NvbnN0 cnVjdFxuIik7CiAgIHJldHVybiBudnB0eF9nb2FjY19hc3luY3F1ZXVlX2NvbnN0cnVjdCAo Q1VfU1RSRUFNX0RFRkFVTFQpOwogfQogCkBAIC0xNzM1LDEyICsxNzU4LDE0IEBAIG52cHR4 X2dvYWNjX2FzeW5jcXVldWVfZGVzdHJ1Y3QgKHN0cnVjdCBnb2FjY19hc3luY3F1ZXVlICph cSkKIGJvb2wKIEdPTVBfT0ZGTE9BRF9vcGVuYWNjX2FzeW5jX2Rlc3RydWN0IChzdHJ1Y3Qg Z29hY2NfYXN5bmNxdWV1ZSAqYXEpCiB7CitfX2J1aWx0aW5fZnByaW50ZiAoc3RkZXJyLCAi REVCVUcgR09NUF9PRkZMT0FEX29wZW5hY2NfYXN5bmNfZGVzdHJ1Y3RcbiIpOwogICByZXR1 cm4gbnZwdHhfZ29hY2NfYXN5bmNxdWV1ZV9kZXN0cnVjdCAoYXEpOwogfQogCiBpbnQKIEdP TVBfT0ZGTE9BRF9vcGVuYWNjX2FzeW5jX3Rlc3QgKHN0cnVjdCBnb2FjY19hc3luY3F1ZXVl ICphcSkKIHsKK19fYnVpbHRpbl9mcHJpbnRmIChzdGRlcnIsICJERUJVRyBHT01QX09GRkxP QURfb3BlbmFjY19hc3luY190ZXN0XG4iKTsKICAgQ1VyZXN1bHQgciA9IENVREFfQ0FMTF9O T0NIRUNLIChjdVN0cmVhbVF1ZXJ5LCBhcS0+Y3VkYV9zdHJlYW0pOwogICBpZiAociA9PSBD VURBX1NVQ0NFU1MpCiAgICAgcmV0dXJuIDE7CkBAIC0xNzYxLDYgKzE3ODYsNyBAQCBudnB0 eF9nb2FjY19hc3luY3F1ZXVlX3N5bmNocm9uaXplIChzdHJ1Y3QgZ29hY2NfYXN5bmNxdWV1 ZSAqYXEpCiBib29sCiBHT01QX09GRkxPQURfb3BlbmFjY19hc3luY19zeW5jaHJvbml6ZSAo c3RydWN0IGdvYWNjX2FzeW5jcXVldWUgKmFxKQogeworX19idWlsdGluX2ZwcmludGYgKHN0 ZGVyciwgIkRFQlVHIEdPTVBfT0ZGTE9BRF9vcGVuYWNjX2FzeW5jX3N5bmNocm9uaXplXG4i KTsKICAgcmV0dXJuIG52cHR4X2dvYWNjX2FzeW5jcXVldWVfc3luY2hyb25pemUgKGFxKTsK IH0KIApAQCAtMTc2OCw2ICsxNzk0LDcgQEAgYm9vbAogR09NUF9PRkZMT0FEX29wZW5hY2Nf YXN5bmNfc2VyaWFsaXplIChzdHJ1Y3QgZ29hY2NfYXN5bmNxdWV1ZSAqYXExLAogCQkJCSAg ICAgIHN0cnVjdCBnb2FjY19hc3luY3F1ZXVlICphcTIpCiB7CitfX2J1aWx0aW5fZnByaW50 ZiAoc3RkZXJyLCAiREVCVUcgR09NUF9PRkZMT0FEX29wZW5hY2NfYXN5bmNfc2VyaWFsaXpl XG4iKTsKICAgQ1VldmVudCBlOwogICBDVURBX0NBTExfRVJFVCAoZmFsc2UsIGN1RXZlbnRD cmVhdGUsICZlLCBDVV9FVkVOVF9ESVNBQkxFX1RJTUlORyk7CiAgIENVREFfQ0FMTF9FUkVU IChmYWxzZSwgY3VFdmVudFJlY29yZCwgZSwgYXExLT5jdWRhX3N0cmVhbSk7CkBAIC0xNzkw LDYgKzE4MTcsNyBAQCBHT01QX09GRkxPQURfb3BlbmFjY19hc3luY19xdWV1ZV9jYWxsYmFj ayAoc3RydWN0IGdvYWNjX2FzeW5jcXVldWUgKmFxLAogCQkJCQkgICB2b2lkICgqY2FsbGJh Y2tfZm4pKHZvaWQgKiksCiAJCQkJCSAgIHZvaWQgKnVzZXJwdHIpCiB7CitfX2J1aWx0aW5f ZnByaW50ZiAoc3RkZXJyLCAiREVCVUcgR09NUF9PRkZMT0FEX29wZW5hY2NfYXN5bmNfcXVl dWVfY2FsbGJhY2tcbiIpOwogICBzdHJ1Y3QgbnZwdHhfY2FsbGJhY2sgKmIgPSBHT01QX1BM VUdJTl9tYWxsb2MgKHNpemVvZiAoKmIpKTsKICAgYi0+Zm4gPSBjYWxsYmFja19mbjsKICAg Yi0+cHRyID0gdXNlcnB0cjsKQEAgLTE4MzcsNiArMTg2NSw3IEBAIGN1ZGFfbWVtY3B5X3Nh bml0eV9jaGVjayAoY29uc3Qgdm9pZCAqaCwgY29uc3Qgdm9pZCAqZCwgc2l6ZV90IHMpCiBi b29sCiBHT01QX09GRkxPQURfaG9zdDJkZXYgKGludCBvcmQsIHZvaWQgKmRzdCwgY29uc3Qg dm9pZCAqc3JjLCBzaXplX3QgbikKIHsKK19fYnVpbHRpbl9mcHJpbnRmIChzdGRlcnIsICJE RUJVRyBHT01QX09GRkxPQURfaG9zdDJkZXZcbiIpOwogICBpZiAoIW52cHR4X2F0dGFjaF9o b3N0X3RocmVhZF90b19kZXZpY2UgKG9yZCkKICAgICAgIHx8ICFjdWRhX21lbWNweV9zYW5p dHlfY2hlY2sgKHNyYywgZHN0LCBuKSkKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xODQ3LDYg KzE4NzYsNyBAQCBHT01QX09GRkxPQURfaG9zdDJkZXYgKGludCBvcmQsIHZvaWQgKmRzdCwg Y29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikKIGJvb2wKIEdPTVBfT0ZGTE9BRF9kZXYyaG9z dCAoaW50IG9yZCwgdm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQogewor X19idWlsdGluX2ZwcmludGYgKHN0ZGVyciwgIkRFQlVHIEdPTVBfT0ZGTE9BRF9kZXYyaG9z dFxuIik7CiAgIGlmICghbnZwdHhfYXR0YWNoX2hvc3RfdGhyZWFkX3RvX2RldmljZSAob3Jk KQogICAgICAgfHwgIWN1ZGFfbWVtY3B5X3Nhbml0eV9jaGVjayAoZHN0LCBzcmMsIG4pKQog ICAgIHJldHVybiBmYWxzZTsKQEAgLTE4NTcsNiArMTg4Nyw3IEBAIEdPTVBfT0ZGTE9BRF9k ZXYyaG9zdCAoaW50IG9yZCwgdm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBu KQogYm9vbAogR09NUF9PRkZMT0FEX2RldjJkZXYgKGludCBvcmQsIHZvaWQgKmRzdCwgY29u c3Qgdm9pZCAqc3JjLCBzaXplX3QgbikKIHsKK19fYnVpbHRpbl9mcHJpbnRmIChzdGRlcnIs ICJERUJVRyBHT01QX09GRkxPQURfZGV2MmRldlxuIik7CiAgIENVREFfQ0FMTCAoY3VNZW1j cHlEdG9EQXN5bmMsIChDVWRldmljZXB0cikgZHN0LCAoQ1VkZXZpY2VwdHIpIHNyYywgbiwg TlVMTCk7CiAgIHJldHVybiB0cnVlOwogfQpAQCAtMTg2OCw2ICsxODk5LDcgQEAgR09NUF9P RkZMT0FEX21lbWNweTJkIChpbnQgZHN0X29yZCwgaW50IHNyY19vcmQsIHNpemVfdCBkaW0x X3NpemUsCiAJCSAgICAgICBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzcmNfb2Zmc2V0MV9z aXplLAogCQkgICAgICAgc2l6ZV90IHNyY19vZmZzZXQwX2xlbiwgc2l6ZV90IHNyY19kaW0x X3NpemUpCiB7CitfX2J1aWx0aW5fZnByaW50ZiAoc3RkZXJyLCAiREVCVUcgR09NUF9PRkZM T0FEX21lbWNweTJkXG4iKTsKICAgaWYgKCFudnB0eF9hdHRhY2hfaG9zdF90aHJlYWRfdG9f ZGV2aWNlIChzcmNfb3JkICE9IC0xID8gc3JjX29yZCA6IGRzdF9vcmQpKQogICAgIHJldHVy biBmYWxzZTsKIApAQCAtMTk2MCw2ICsxOTkyLDcgQEAgR09NUF9PRkZMT0FEX21lbWNweTNk IChpbnQgZHN0X29yZCwgaW50IHNyY19vcmQsIHNpemVfdCBkaW0yX3NpemUsCiAJCSAgICAg ICBzaXplX3Qgc3JjX29mZnNldDBfbGVuLCBzaXplX3Qgc3JjX2RpbTJfc2l6ZSwKIAkJICAg ICAgIHNpemVfdCBzcmNfZGltMV9sZW4pCiB7CitfX2J1aWx0aW5fZnByaW50ZiAoc3RkZXJy LCAiREVCVUcgR09NUF9PRkZMT0FEX21lbWNweTNkXG4iKTsKICAgaWYgKCFudnB0eF9hdHRh Y2hfaG9zdF90aHJlYWRfdG9fZGV2aWNlIChzcmNfb3JkICE9IC0xID8gc3JjX29yZCA6IGRz dF9vcmQpKQogICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjA1MCw2ICsyMDgzLDcgQEAgYm9v bAogR09NUF9PRkZMT0FEX29wZW5hY2NfYXN5bmNfaG9zdDJkZXYgKGludCBvcmQsIHZvaWQg KmRzdCwgY29uc3Qgdm9pZCAqc3JjLAogCQkJCSAgICAgc2l6ZV90IG4sIHN0cnVjdCBnb2Fj Y19hc3luY3F1ZXVlICphcSkKIHsKK19fYnVpbHRpbl9mcHJpbnRmIChzdGRlcnIsICJERUJV RyBHT01QX09GRkxPQURfb3BlbmFjY19hc3luY19ob3N0MmRldlxuIik7CiAgIGlmICghbnZw dHhfYXR0YWNoX2hvc3RfdGhyZWFkX3RvX2RldmljZSAob3JkKQogICAgICAgfHwgIWN1ZGFf bWVtY3B5X3Nhbml0eV9jaGVjayAoc3JjLCBkc3QsIG4pKQogICAgIHJldHVybiBmYWxzZTsK QEAgLTIwNjEsNiArMjA5NSw3IEBAIGJvb2wKIEdPTVBfT0ZGTE9BRF9vcGVuYWNjX2FzeW5j X2RldjJob3N0IChpbnQgb3JkLCB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywKIAkJCQkg ICAgIHNpemVfdCBuLCBzdHJ1Y3QgZ29hY2NfYXN5bmNxdWV1ZSAqYXEpCiB7CitfX2J1aWx0 aW5fZnByaW50ZiAoc3RkZXJyLCAiREVCVUcgR09NUF9PRkZMT0FEX29wZW5hY2NfYXN5bmNf ZGV2Mmhvc3RcbiIpOwogICBpZiAoIW52cHR4X2F0dGFjaF9ob3N0X3RocmVhZF90b19kZXZp Y2UgKG9yZCkKICAgICAgIHx8ICFjdWRhX21lbWNweV9zYW5pdHlfY2hlY2sgKGRzdCwgc3Jj LCBuKSkKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMDcxLDYgKzIxMDYsNyBAQCBHT01QX09G RkxPQURfb3BlbmFjY19hc3luY19kZXYyaG9zdCAoaW50IG9yZCwgdm9pZCAqZHN0LCBjb25z dCB2b2lkICpzcmMsCiB1bmlvbiBnb2FjY19wcm9wZXJ0eV92YWx1ZQogR09NUF9PRkZMT0FE X29wZW5hY2NfZ2V0X3Byb3BlcnR5IChpbnQgbiwgZW51bSBnb2FjY19wcm9wZXJ0eSBwcm9w KQogeworX19idWlsdGluX2ZwcmludGYgKHN0ZGVyciwgIkRFQlVHIEdPTVBfT0ZGTE9BRF9v cGVuYWNjX2dldF9wcm9wZXJ0eVxuIik7CiAgIHVuaW9uIGdvYWNjX3Byb3BlcnR5X3ZhbHVl IHByb3B2YWwgPSB7IC52YWwgPSAwIH07CiAKICAgcHRocmVhZF9tdXRleF9sb2NrICgmcHR4 X2Rldl9sb2NrKTsKQEAgLTIyMTEsNiArMjI0Nyw3IEBAIG52cHR4X3N0YWNrc19hY3F1aXJl IChzdHJ1Y3QgcHR4X2RldmljZSAqcHR4X2Rldiwgc2l6ZV90IHNpemUsIGludCBudW0pCiB2 b2lkCiBHT01QX09GRkxPQURfcnVuIChpbnQgb3JkLCB2b2lkICp0Z3RfZm4sIHZvaWQgKnRn dF92YXJzLCB2b2lkICoqYXJncykKIHsKK19fYnVpbHRpbl9mcHJpbnRmIChzdGRlcnIsICJE RUJVRyBHT01QX09GRkxPQURfcnVuXG4iKTsKICAgc3RydWN0IHRhcmdfZm5fZGVzY3JpcHRv ciAqdGd0X2ZuX2Rlc2MKICAgICA9IChzdHJ1Y3QgdGFyZ19mbl9kZXNjcmlwdG9yICopIHRn dF9mbjsKICAgQ1VmdW5jdGlvbiBmdW5jdGlvbiA9IHRndF9mbl9kZXNjLT5mbjsKZGlmZiAt LWdpdCBhL2xpYmdvbXAvdGFyZ2V0LmMgYi9saWJnb21wL3RhcmdldC5jCmluZGV4IDEzNjdl OWNjZTZjLi5mNzU4YjIwYmE0YyAxMDA2NDQKLS0tIGEvbGliZ29tcC90YXJnZXQuYworKysg Yi9saWJnb21wL3RhcmdldC5jCkBAIC0yNTI0LDYgKzI1MjQsOCBAQCBnb21wX3VubG9hZF9p bWFnZV9mcm9tX2RldmljZSAoc3RydWN0IGdvbXBfZGV2aWNlX2Rlc2NyICpkZXZpY2VwLAog ICAgICAgbm9kZSA9IHNwbGF5X3RyZWVfbG9va3VwICgmZGV2aWNlcC0+bWVtX21hcCwgJmsp OwogICAgIH0KIAorX19idWlsdGluX2ZwcmludGYoc3RkZXJyLCAiREVCVUc6IGdvbXBfdW5s b2FkX2ltYWdlX2Zyb21fZGV2aWNlXG4iKTsKKwogICBpZiAoIWRldmljZXAtPnVubG9hZF9p bWFnZV9mdW5jIChkZXZpY2VwLT50YXJnZXRfaWQsIHZlcnNpb24sIHRhcmdldF9kYXRhKSkK ICAgICB7CiAgICAgICBnb21wX211dGV4X3VubG9jayAoJmRldmljZXAtPmxvY2spOwpAQCAt MjY5OCwxMiArMjcwMCwxNCBAQCBHT01QX29mZmxvYWRfdW5yZWdpc3Rlcl92ZXIgKHVuc2ln bmVkIHZlcnNpb24sIGNvbnN0IHZvaWQgKmhvc3RfdGFibGUsCiAgICAgdGFyZ2V0X2RhdGEg PSBkYXRhOwogCiAgIGdvbXBfbXV0ZXhfbG9jayAoJnJlZ2lzdGVyX2xvY2spOworX19idWls dGluX2ZwcmludGYoc3RkZXJyLCAiREVCVUc6IEdPTVBfb2ZmbG9hZF91bnJlZ2lzdGVyX3Zl clxuIik7CiAKICAgLyogVW5sb2FkIGltYWdlIGZyb20gYWxsIGluaXRpYWxpemVkIGRldmlj ZXMuICAqLwogICBmb3IgKGkgPSAwOyBpIDwgbnVtX2RldmljZXM7IGkrKykKICAgICB7CiAg ICAgICBzdHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3IgKmRldmljZXAgPSAmZGV2aWNlc1tpXTsK ICAgICAgIGdvbXBfbXV0ZXhfbG9jayAoJmRldmljZXAtPmxvY2spOworX19idWlsdGluX2Zw cmludGYoc3RkZXJyLCAiREVCVUc6IEdPTVBfb2ZmbG9hZF91bnJlZ2lzdGVyX3ZlciBkZXY9 JWQ7IHN0YXRlPSVkXG4iLCBpLCBkZXZpY2VwLT5zdGF0ZSk7CiAgICAgICBpZiAoZGV2aWNl cC0+dHlwZSA9PSB0YXJnZXRfdHlwZQogCSAgJiYgZGV2aWNlcC0+c3RhdGUgPT0gR09NUF9E RVZJQ0VfSU5JVElBTElaRUQpCiAJZ29tcF91bmxvYWRfaW1hZ2VfZnJvbV9kZXZpY2UgKGRl dmljZXAsIHZlcnNpb24sCkBAIC0yNzc1LDYgKzI3NzksNyBAQCBnb21wX2ZpbmlfZGV2aWNl IChzdHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3IgKmRldmljZXApCiBhdHRyaWJ1dGVfaGlkZGVu IHZvaWQKIGdvbXBfdW5sb2FkX2RldmljZSAoc3RydWN0IGdvbXBfZGV2aWNlX2Rlc2NyICpk ZXZpY2VwKQogeworX19idWlsdGluX2ZwcmludGYoc3RkZXJyLCAiREVCVUc6IGdvbXBfdW5s b2FkX2RldmljZTsgc3RhdGU9JWRcbiIsIGRldmljZXAtPnN0YXRlKTsKICAgaWYgKGRldmlj ZXAtPnN0YXRlID09IEdPTVBfREVWSUNFX0lOSVRJQUxJWkVEKQogICAgIHsKICAgICAgIHVu c2lnbmVkIGk7CkBAIC01MjE3LDYgKzUyMjIsNyBAQCBnb21wX3RhcmdldF9maW5pICh2b2lk KQogICAgICAgYm9vbCByZXQgPSB0cnVlOwogICAgICAgc3RydWN0IGdvbXBfZGV2aWNlX2Rl c2NyICpkZXZpY2VwID0gJmRldmljZXNbaV07CiAgICAgICBnb21wX211dGV4X2xvY2sgKCZk ZXZpY2VwLT5sb2NrKTsKK19fYnVpbHRpbl9mcHJpbnRmKHN0ZGVyciwgIkRFQlVHOiBnb21w X3RhcmdldF9maW5pOyBkZXY9JWQsIHN0YXRlPSVkXG4iLCBpLCBkZXZpY2VwLT5zdGF0ZSk7 CiAgICAgICBpZiAoZGV2aWNlcC0+c3RhdGUgPT0gR09NUF9ERVZJQ0VfSU5JVElBTElaRUQp CiAJcmV0ID0gZ29tcF9maW5pX2RldmljZSAoZGV2aWNlcCk7CiAgICAgICBnb21wX211dGV4 X3VubG9jayAoJmRldmljZXAtPmxvY2spOwo= --------------NQRrc8P5W4Q6Mwaq090m8Apq--