Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pWwbr-0005N4-KI for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Feb 2023 09:49:23 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pWwbq-0000ZC-2R for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Feb 2023 09:49:22 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pWwbp-0000Z2-Gx for pgsql-hackers@lists.postgresql.org; Tue, 28 Feb 2023 09:49:21 +0000 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pWwbm-0007Iq-9K for pgsql-hackers@postgresql.org; Tue, 28 Feb 2023 09:49:20 +0000 Received: by mail-wm1-x32d.google.com with SMTP id k37so5999930wms.0 for ; Tue, 28 Feb 2023 01:49:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; 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=p8QBkoaTy2yBZ9F3XpdgAmdARuDp/Hvh8OXRR8UjNVE=; b=U7Fdy/2aFkzgXKjwGPSMTnrhXVuWevwuFRRexmEKcMvU40mnPMF2xrDFb3/wN9Hfk0 gSSxKvGG9F5ph/ZPldCxT2wmc3XC0fv6MKQnYbHGNkid/B4UgsleQv710bQOoflzNqJ/ gHS2jJy8UfPHxa4oGdcwOOgU91Nviu4JiQ45GljUPm44vm3JB4K5d7vlyoOCm94znPwj AjqB7zF3NkPv2VaaHfWllUJCyjxb10WaCXa3VcG8h4v9LJKJg0OCSkRRyzdxHcn9HXg1 lD11lQ0IFLxCPTqG987sNtljTQj8ed5MsBbWWH0LAgfe8vlegg3mOPJkBPC3skbM+j4p yi3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=p8QBkoaTy2yBZ9F3XpdgAmdARuDp/Hvh8OXRR8UjNVE=; b=Z6yV41trLU3BHa+TcnTKyiSTwkJxyNyU+i3qGbIIpTAAISEURnvyDgNZcxFakRWGdD 6m3rfbUV/WIjAY6MuYcDYtzBDgzckcnznk+TAN6KBhHjoVE1VgoCaitS8HP3zp5G7H9x Kx6KAlFIczWko3gC9zSCYvu9t/YULhYb+oxyuWMeYK3s+D7fBHUlEUUaHo1F80hNWiU0 i85OZkQRl4lbyBVMbV6izDLuMkqnaZUVKl6Ag00GhsH+803z+EDNQVq3Dt89lXeKYbE/ Z8O3AWMxytKRkPElM9wELCqtrNCS4gJ77J0Tf245bTIvjjVP6ndtFPwM63aVK7uaJ8zd 4LKg== X-Gm-Message-State: AO0yUKXrhcw90+yGtIUmrlTg6NqnpFPu7E7gQYf8TnnFMZFn+6H0HkVF jgxrT51FI4U0hKA6s371uFA= X-Google-Smtp-Source: AK7set+4ej+Re46Uetag7M9+8VlMIRzyemaxyXZ6G8BVCC7SWTIrFlTxvMUfKL4NBqbzzpVUpjADyg== X-Received: by 2002:a05:600c:3586:b0:3df:9858:c039 with SMTP id p6-20020a05600c358600b003df9858c039mr8602113wmq.14.1677577756782; Tue, 28 Feb 2023 01:49:16 -0800 (PST) Received: from [192.168.25.174] ([54.239.6.189]) by smtp.gmail.com with ESMTPSA id bi13-20020a05600c3d8d00b003e204fdb160sm15339758wmb.3.2023.02.28.01.49.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 28 Feb 2023 01:49:15 -0800 (PST) Content-Type: multipart/mixed; boundary="------------TNpp1bJvSM92PM9NHGS3Th1Q" Message-ID: Date: Tue, 28 Feb 2023 10:49:13 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: Re: Track IO times in pg_stat_io To: Melanie Plageman , Pg Hackers Cc: Maciek Sakrejda , Justin Pryzby , smilingsamay@gmail.com, Kyotaro Horiguchi , Lukas Fittl , Magnus Hagander , Andres Freund , Alvaro Herrera References: Content-Language: en-US From: "Drouvot, Bertrand" In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------TNpp1bJvSM92PM9NHGS3Th1Q Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, On 2/26/23 5:03 PM, Melanie Plageman wrote: > Hi, > > As suggested in [1], the attached patch adds IO times to pg_stat_io; Thanks for the patch! I started to have a look at it and figured out that a tiny rebase was needed (due to 728560db7d and b9f0e54bc9), so please find the rebase (aka V2) attached. > The timings will only be non-zero when track_io_timing is on That could lead to incorrect interpretation if one wants to divide the timing per operations, say: - track_io_timing is set to on while there is already operations - or set to off while it was on (and the number of operations keeps growing) Might be worth to warn/highlight in the "track_io_timing" doc? + if (track_io_timing) + { + INSTR_TIME_SET_CURRENT(io_time); + INSTR_TIME_SUBTRACT(io_time, io_start); + pgstat_count_io_time(io_object, io_context, IOOP_EXTEND, io_time); + } + + pgstat_count_io_op(io_object, io_context, IOOP_EXTEND); vs @@ -1042,6 +1059,7 @@ ReadBuffer_common(SMgrRelation smgr, char relpersistence, ForkNumber forkNum, INSTR_TIME_SUBTRACT(io_time, io_start); pgstat_count_buffer_read_time(INSTR_TIME_GET_MICROSEC(io_time)); INSTR_TIME_ADD(pgBufferUsage.blk_read_time, io_time); + pgstat_count_io_time(io_object, io_context, IOOP_READ, io_time); } That leads to pgstat_count_io_time() to be called before pgstat_count_io_op() (for the IOOP_EXTEND case) and after pgstat_count_io_op() (for the IOOP_READ case). What about calling them in the same order and so that pgstat_count_io_time() is called before pgstat_count_io_op()? If so, the ordering would also need to be changed in: - FlushRelationBuffers() - register_dirty_segment() > > There is one minor question (in the code as a TODO) which is whether or > not it is worth cross-checking that IO counts and times are either both > zero or neither zero in the validation function > pgstat_bktype_io_stats_valid(). > As pgstat_bktype_io_stats_valid() is called only in Assert(), I think that would be a good idea to also check that if counts are not Zero then times are not Zero. Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --------------TNpp1bJvSM92PM9NHGS3Th1Q Content-Type: text/plain; charset=UTF-8; name="v2-0001-Track-IO-times-in-pg_stat_io.patch" Content-Disposition: attachment; filename="v2-0001-Track-IO-times-in-pg_stat_io.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvbW9uaXRvcmluZy5zZ21sCmluZGV4IDYyNDliYjUwZDAuLjJjNjJiMGE0MzcgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L21vbml0b3Jpbmcuc2dtbApAQCAtMzgxNCw2ICszODE0LDE4IEBAIFNFTEVDVCBwaWQsIHdh aXRfZXZlbnRfdHlwZSwgd2FpdF9ldmVudCBGUk9NIHBnX3N0YXRfYWN0aXZpdHkgV0hFUkUg d2FpdF9ldmVudCBpCiAgICAgICA8L2VudHJ5PgogICAgICA8L3Jvdz4KIAorICAgICA8cm93 PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPgorICAgICAgIDxw YXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICAgPHN0cnVjdGZpZWxkPnJl YWRfdGltZTwvc3RydWN0ZmllbGQ+IDx0eXBlPmRvdWJsZSBwcmVjaXNpb248L3R5cGU+Cisg ICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaW1lIHNwZW50IGluIHJl YWQgb3BlcmF0aW9ucyBpbiBtaWxsaXNlY29uZHMgKGlmIDx4cmVmCisgICAgICAgIGxpbmtl bmQ9Imd1Yy10cmFjay1pby10aW1pbmciLz4gaXMgZW5hYmxlZCwgb3RoZXJ3aXNlIHplcm8p CisgICAgICAgPC9wYXJhPgorICAgICAgPC9lbnRyeT4KKyAgICAgPC9yb3c+CisKICAgICAg PHJvdz4KICAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij4KICAgICAg ICA8cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CkBAIC0zODI2LDYgKzM4MzgsMTgg QEAgU0VMRUNUIHBpZCwgd2FpdF9ldmVudF90eXBlLCB3YWl0X2V2ZW50IEZST00gcGdfc3Rh dF9hY3Rpdml0eSBXSEVSRSB3YWl0X2V2ZW50IGkKICAgICAgIDwvZW50cnk+CiAgICAgIDwv cm93PgogCisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9l bnRyeSI+CisgICAgICAgPHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAg ICA8c3RydWN0ZmllbGQ+d3JpdGVfdGltZTwvc3RydWN0ZmllbGQ+IDx0eXBlPmRvdWJsZSBw cmVjaXNpb248L3R5cGU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAg ICBUaW1lIHNwZW50IGluIHdyaXRlIG9wZXJhdGlvbnMgaW4gbWlsbGlzZWNvbmRzIChpZiA8 eHJlZgorICAgICAgICBsaW5rZW5kPSJndWMtdHJhY2staW8tdGltaW5nIi8+IGlzIGVuYWJs ZWQsIG90aGVyd2lzZSB6ZXJvKQorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvZW50cnk+Cisg ICAgIDwvcm93PgorCiAgICAgIDxyb3c+CiAgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190 YWJsZV9lbnRyeSI+CiAgICAgICAgPHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgpA QCAtMzgzOCw2ICszODYyLDE4IEBAIFNFTEVDVCBwaWQsIHdhaXRfZXZlbnRfdHlwZSwgd2Fp dF9ldmVudCBGUk9NIHBnX3N0YXRfYWN0aXZpdHkgV0hFUkUgd2FpdF9ldmVudCBpCiAgICAg ICA8L2VudHJ5PgogICAgICA8L3Jvdz4KIAorICAgICA8cm93PgorICAgICAgPGVudHJ5IHJv bGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPgorICAgICAgIDxwYXJhIHJvbGU9ImNvbHVtbl9k ZWZpbml0aW9uIj4KKyAgICAgICAgPHN0cnVjdGZpZWxkPmV4dGVuZF90aW1lPC9zdHJ1Y3Rm aWVsZD4gPHR5cGU+ZG91YmxlIHByZWNpc2lvbjwvdHlwZT4KKyAgICAgICA8L3BhcmE+Cisg ICAgICAgPHBhcmE+CisgICAgICAgIFRpbWUgc3BlbnQgaW4gZXh0ZW5kIG9wZXJhdGlvbnMg aW4gbWlsbGlzZWNvbmRzIChpZiA8eHJlZgorICAgICAgICBsaW5rZW5kPSJndWMtdHJhY2st aW8tdGltaW5nIi8+IGlzIGVuYWJsZWQsIG90aGVyd2lzZSB6ZXJvKQorICAgICAgIDwvcGFy YT4KKyAgICAgIDwvZW50cnk+CisgICAgIDwvcm93PgorCiAgICAgIDxyb3c+CiAgICAgICA8 ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+CiAgICAgICAgPHBhcmEgcm9sZT0i Y29sdW1uX2RlZmluaXRpb24iPgpAQCAtMzkwMiw2ICszOTM4LDE4IEBAIFNFTEVDVCBwaWQs IHdhaXRfZXZlbnRfdHlwZSwgd2FpdF9ldmVudCBGUk9NIHBnX3N0YXRfYWN0aXZpdHkgV0hF UkUgd2FpdF9ldmVudCBpCiAgICAgICA8L2VudHJ5PgogICAgICA8L3Jvdz4KIAorICAgICA8 cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPgorICAgICAg IDxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICAgPHN0cnVjdGZpZWxk PmZzeW5jX3RpbWU8L3N0cnVjdGZpZWxkPiA8dHlwZT5kb3VibGUgcHJlY2lzaW9uPC90eXBl PgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGltZSBzcGVudCBp biBmc3luYyBvcGVyYXRpb25zIGluIG1pbGxpc2Vjb25kcyAoaWYgPHhyZWYKKyAgICAgICAg bGlua2VuZD0iZ3VjLXRyYWNrLWlvLXRpbWluZyIvPiBpcyBlbmFibGVkLCBvdGhlcndpc2Ug emVybykKKyAgICAgICA8L3BhcmE+CisgICAgICA8L2VudHJ5PgorICAgICA8L3Jvdz4KKwog ICAgICA8cm93PgogICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPgog ICAgICAgIDxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvc3lzdGVtX3ZpZXdzLnNxbAppbmRleCAzNGNhMGU3MzlmLi4zOTM5MWJjMmZjIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKKysrIGIvc3Jj L2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCkBAIC0xMTIzLDEyICsxMTIzLDE2 IEBAIFNFTEVDVAogICAgICAgIGIuaW9fb2JqZWN0LAogICAgICAgIGIuaW9fY29udGV4dCwK ICAgICAgICBiLnJlYWRzLAorICAgICAgIGIucmVhZF90aW1lLAogICAgICAgIGIud3JpdGVz LAorICAgICAgIGIud3JpdGVfdGltZSwKICAgICAgICBiLmV4dGVuZHMsCisgICAgICAgYi5l eHRlbmRfdGltZSwKICAgICAgICBiLm9wX2J5dGVzLAogICAgICAgIGIuZXZpY3Rpb25zLAog ICAgICAgIGIucmV1c2VzLAogICAgICAgIGIuZnN5bmNzLAorICAgICAgIGIuZnN5bmNfdGlt ZSwKICAgICAgICBiLnN0YXRzX3Jlc2V0CiBGUk9NIHBnX3N0YXRfZ2V0X2lvKCkgYjsKIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCAwYTA1NTc3YjY4Li5iYmQy YWY5ZmFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3Iu YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtMTAwMCwx MSArMTAwMCwyNiBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hh ciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCiAJaWYgKGlzRXh0ZW5k KQogCXsKKwkJaW5zdHJfdGltZSAgaW9fc3RhcnQsCisJCQkJCWlvX3RpbWU7CiAJCS8qIG5l dyBidWZmZXJzIGFyZSB6ZXJvLWZpbGxlZCAqLwogCQlNZW1TZXQoKGNoYXIgKikgYnVmQmxv Y2ssIDAsIEJMQ0tTWik7CisKKwkJaWYgKHRyYWNrX2lvX3RpbWluZykKKwkJCUlOU1RSX1RJ TUVfU0VUX0NVUlJFTlQoaW9fc3RhcnQpOworCQllbHNlCisJCQlJTlNUUl9USU1FX1NFVF9a RVJPKGlvX3N0YXJ0KTsKKwogCQkvKiBkb24ndCBzZXQgY2hlY2tzdW0gZm9yIGFsbC16ZXJv IHBhZ2UgKi8KIAkJc21ncmV4dGVuZChzbWdyLCBmb3JrTnVtLCBibG9ja051bSwgYnVmQmxv Y2ssIGZhbHNlKTsKIAorCQlpZiAodHJhY2tfaW9fdGltaW5nKQorCQl7CisJCQlJTlNUUl9U SU1FX1NFVF9DVVJSRU5UKGlvX3RpbWUpOworCQkJSU5TVFJfVElNRV9TVUJUUkFDVChpb190 aW1lLCBpb19zdGFydCk7CisJCQlwZ3N0YXRfY291bnRfaW9fdGltZShpb19vYmplY3QsIGlv X2NvbnRleHQsIElPT1BfRVhURU5ELCBpb190aW1lKTsKKwkJfQorCiAJCXBnc3RhdF9jb3Vu dF9pb19vcChpb19vYmplY3QsIGlvX2NvbnRleHQsIElPT1BfRVhURU5EKTsKIAogCQkvKgpA QCAtMTA0Miw2ICsxMDU3LDcgQEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNt Z3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJCQlJTlNU Ul9USU1FX1NVQlRSQUNUKGlvX3RpbWUsIGlvX3N0YXJ0KTsKIAkJCQlwZ3N0YXRfY291bnRf YnVmZmVyX3JlYWRfdGltZShJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhpb190aW1lKSk7CiAJ CQkJSU5TVFJfVElNRV9BREQocGdCdWZmZXJVc2FnZS5ibGtfcmVhZF90aW1lLCBpb190aW1l KTsKKwkJCQlwZ3N0YXRfY291bnRfaW9fdGltZShpb19vYmplY3QsIGlvX2NvbnRleHQsIElP T1BfUkVBRCwgaW9fdGltZSk7CiAJCQl9CiAKIAkJCS8qIGNoZWNrIGZvciBnYXJiYWdlIGRh dGEgKi8KQEAgLTI5ODksNiArMzAwNSw3IEBAIEZsdXNoQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1 ZiwgU01nclJlbGF0aW9uIHJlbG4sIElPT2JqZWN0IGlvX29iamVjdCwKIAkJSU5TVFJfVElN RV9TVUJUUkFDVChpb190aW1lLCBpb19zdGFydCk7CiAJCXBnc3RhdF9jb3VudF9idWZmZXJf d3JpdGVfdGltZShJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhpb190aW1lKSk7CiAJCUlOU1RS X1RJTUVfQUREKHBnQnVmZmVyVXNhZ2UuYmxrX3dyaXRlX3RpbWUsIGlvX3RpbWUpOworCQlw Z3N0YXRfY291bnRfaW9fdGltZShJT09CSkVDVF9SRUxBVElPTiwgaW9fY29udGV4dCwgSU9P UF9XUklURSwgaW9fdGltZSk7CiAJfQogCiAJcGdCdWZmZXJVc2FnZS5zaGFyZWRfYmxrc193 cml0dGVuKys7CkBAIC0zNTk0LDYgKzM2MTEsOSBAQCBGbHVzaFJlbGF0aW9uQnVmZmVycyhS ZWxhdGlvbiByZWwpCiAKIAlpZiAoUmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJzKHJlbCkpCiAJ eworCQlpbnN0cl90aW1lCWlvX3N0YXJ0LAorCQkJCQlpb190aW1lOworCiAJCWZvciAoaSA9 IDA7IGkgPCBOTG9jQnVmZmVyOyBpKyspCiAJCXsKIAkJCXVpbnQzMgkJYnVmX3N0YXRlOwpA QCAtMzYxNiw2ICszNjM2LDExIEBAIEZsdXNoUmVsYXRpb25CdWZmZXJzKFJlbGF0aW9uIHJl bCkKIAogCQkJCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UobG9jYWxwYWdlLCBidWZIZHItPnRh Zy5ibG9ja051bSk7CiAKKwkJCQlpZiAodHJhY2tfaW9fdGltaW5nKQorCQkJCQlJTlNUUl9U SU1FX1NFVF9DVVJSRU5UKGlvX3N0YXJ0KTsKKwkJCQllbHNlCisJCQkJCUlOU1RSX1RJTUVf U0VUX1pFUk8oaW9fc3RhcnQpOworCiAJCQkJc21ncndyaXRlKFJlbGF0aW9uR2V0U21ncihy ZWwpLAogCQkJCQkJICBCdWZUYWdHZXRGb3JrTnVtKCZidWZIZHItPnRhZyksCiAJCQkJCQkg IGJ1Zkhkci0+dGFnLmJsb2NrTnVtLApAQCAtMzYyNyw2ICszNjUyLDEzIEBAIEZsdXNoUmVs YXRpb25CdWZmZXJzKFJlbGF0aW9uIHJlbCkKIAogCQkJCXBnc3RhdF9jb3VudF9pb19vcChJ T09CSkVDVF9URU1QX1JFTEFUSU9OLCBJT0NPTlRFWFRfTk9STUFMLCBJT09QX1dSSVRFKTsK IAorCQkJCWlmICh0cmFja19pb190aW1pbmcpCisJCQkJeworCQkJCQlJTlNUUl9USU1FX1NF VF9DVVJSRU5UKGlvX3RpbWUpOworCQkJCQlJTlNUUl9USU1FX1NVQlRSQUNUKGlvX3RpbWUs IGlvX3N0YXJ0KTsKKwkJCQkJcGdzdGF0X2NvdW50X2lvX3RpbWUoSU9PQkpFQ1RfVEVNUF9S RUxBVElPTiwgSU9DT05URVhUX05PUk1BTCwgSU9PUF9XUklURSwgaW9fdGltZSk7CisJCQkJ fQorCiAJCQkJLyogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCiAJCQkJZXJyb3Jf Y29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwogCQkJfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvbG9jYWxidWYuYyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvYnVmZmVyL2xvY2FsYnVmLmMKaW5kZXggNTMyNWRkYjY2My4uYjEyNzI4NDBi ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvbG9jYWxidWYuYwor KysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9sb2NhbGJ1Zi5jCkBAIC0yMjAsNiAr MjIwLDggQEAgTG9jYWxCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgRm9ya051bWJl ciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSwKIAkgKi8KIAlpZiAoYnVmX3N0YXRl ICYgQk1fRElSVFkpCiAJeworCQlpbnN0cl90aW1lCWlvX3N0YXJ0LAorCQkJCQlpb190aW1l OwogCQlTTWdyUmVsYXRpb24gb3JlbG47CiAJCVBhZ2UJCWxvY2FscGFnZSA9IChjaGFyICop IExvY2FsQnVmSGRyR2V0QmxvY2soYnVmSGRyKTsKIApAQCAtMjI4LDYgKzIzMCwxMSBAQCBM b2NhbEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBGb3JrTnVtYmVyIGZvcmtOdW0s IEJsb2NrTnVtYmVyIGJsb2NrTnVtLAogCiAJCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UobG9j YWxwYWdlLCBidWZIZHItPnRhZy5ibG9ja051bSk7CiAKKwkJaWYgKHRyYWNrX2lvX3RpbWlu ZykKKwkJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoaW9fc3RhcnQpOworCQllbHNlCisJCQlJ TlNUUl9USU1FX1NFVF9aRVJPKGlvX3N0YXJ0KTsKKwogCQkvKiBBbmQgd3JpdGUuLi4gKi8K IAkJc21ncndyaXRlKG9yZWxuLAogCQkJCSAgQnVmVGFnR2V0Rm9ya051bSgmYnVmSGRyLT50 YWcpLApAQCAtMjM5LDYgKzI0NiwxMyBAQCBMb2NhbEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlv biBzbWdyLCBGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtLAogCQli dWZfc3RhdGUgJj0gfkJNX0RJUlRZOwogCQlwZ19hdG9taWNfdW5sb2NrZWRfd3JpdGVfdTMy KCZidWZIZHItPnN0YXRlLCBidWZfc3RhdGUpOwogCisJCWlmICh0cmFja19pb190aW1pbmcp CisJCXsKKwkJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoaW9fdGltZSk7CisJCQlJTlNUUl9U SU1FX1NVQlRSQUNUKGlvX3RpbWUsIGlvX3N0YXJ0KTsKKwkJCXBnc3RhdF9jb3VudF9pb190 aW1lKElPT0JKRUNUX1RFTVBfUkVMQVRJT04sIElPQ09OVEVYVF9OT1JNQUwsIElPT1BfV1JJ VEUsIGlvX3RpbWUpOworCQl9CisKIAkJcGdzdGF0X2NvdW50X2lvX29wKElPT0JKRUNUX1RF TVBfUkVMQVRJT04sIElPQ09OVEVYVF9OT1JNQUwsIElPT1BfV1JJVEUpOwogCQlwZ0J1ZmZl clVzYWdlLmxvY2FsX2Jsa3Nfd3JpdHRlbisrOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2Uvc21nci9tZC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL21kLmMK aW5kZXggMzUyOTU4ZTFmZS4uMWUyZjRiYzlhOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9zbWdyL21kLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL21kLmMK QEAgLTEwMzAsNiArMTAzMCwxNCBAQCByZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIE1kZmRWZWMgKnNlZykKIAogCWlmICgh UmVnaXN0ZXJTeW5jUmVxdWVzdCgmdGFnLCBTWU5DX1JFUVVFU1QsIGZhbHNlIC8qIHJldHJ5 T25FcnJvciAqLyApKQogCXsKKwkJaW5zdHJfdGltZQlpb19zdGFydCwKKwkJCQkJaW9fdGlt ZTsKKworCQlpZiAodHJhY2tfaW9fdGltaW5nKQorCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVO VChpb19zdGFydCk7CisJCWVsc2UKKwkJCUlOU1RSX1RJTUVfU0VUX1pFUk8oaW9fc3RhcnQp OworCiAJCS8qCiAJCSAqIFdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgaWYgdGhlIGN1cnJl bnQgSU9Db250ZXh0IGlzCiAJCSAqIElPQ09OVEVYVF9OT1JNQUwgb3IgSU9DT05URVhUX1tC VUxLUkVBRCwgQlVMS1dSSVRFLCBWQUNVVU1dIGF0IHRoaXMKQEAgLTEwNTEsNiArMTA1OSwx NCBAQCByZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sIE1kZmRWZWMgKnNlZykKIAkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNj ZXNzKCksCiAJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBmc3luYyBmaWxlIFwiJXNcIjogJW0i LAogCQkJCQkJCUZpbGVQYXRoTmFtZShzZWctPm1kZmRfdmZkKSkpKTsKKworCQlpZiAodHJh Y2tfaW9fdGltaW5nKQorCQl7CisJCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKGlvX3RpbWUp OworCQkJSU5TVFJfVElNRV9TVUJUUkFDVChpb190aW1lLCBpb19zdGFydCk7CisJCQlwZ3N0 YXRfY291bnRfaW9fdGltZShJT09CSkVDVF9SRUxBVElPTiwgSU9DT05URVhUX05PUk1BTCwg SU9PUF9GU1lOQywgaW9fdGltZSk7CisJCX0KKwogCX0KIH0KIApAQCAtMTM5OSw2ICsxNDE1 LDggQEAgaW50CiBtZHN5bmNmaWxldGFnKGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIgKnBh dGgpCiB7CiAJU01nclJlbGF0aW9uIHJlbG4gPSBzbWdyb3BlbihmdGFnLT5ybG9jYXRvciwg SW52YWxpZEJhY2tlbmRJZCk7CisJaW5zdHJfdGltZQlpb19zdGFydCwKKwkJCQlpb190aW1l OwogCUZpbGUJCWZpbGU7CiAJYm9vbAkJbmVlZF90b19jbG9zZTsKIAlpbnQJCQlyZXN1bHQs CkBAIC0xNDI1LDEwICsxNDQzLDIyIEBAIG1kc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAq ZnRhZywgY2hhciAqcGF0aCkKIAkJbmVlZF90b19jbG9zZSA9IHRydWU7CiAJfQogCisJaWYg KHRyYWNrX2lvX3RpbWluZykKKwkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChpb19zdGFydCk7 CisJZWxzZQorCQlJTlNUUl9USU1FX1NFVF9aRVJPKGlvX3N0YXJ0KTsKKwogCS8qIFN5bmMg dGhlIGZpbGUuICovCiAJcmVzdWx0ID0gRmlsZVN5bmMoZmlsZSwgV0FJVF9FVkVOVF9EQVRB X0ZJTEVfU1lOQyk7CiAJc2F2ZV9lcnJubyA9IGVycm5vOwogCisJaWYgKHRyYWNrX2lvX3Rp bWluZykKKwl7CisJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoaW9fdGltZSk7CisJCUlOU1RS X1RJTUVfU1VCVFJBQ1QoaW9fdGltZSwgaW9fc3RhcnQpOworCQlwZ3N0YXRfY291bnRfaW9f dGltZShJT09CSkVDVF9SRUxBVElPTiwgSU9DT05URVhUX05PUk1BTCwgSU9PUF9GU1lOQywg aW9fdGltZSk7CisJfQorCiAJaWYgKG5lZWRfdG9fY2xvc2UpCiAJCUZpbGVDbG9zZShmaWxl KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X2lv LmMgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfaW8uYwppbmRleCBjNDE5 OWQxOGM4Li43NWUzNGJlOTgyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rp dml0eS9wZ3N0YXRfaW8uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0 YXRfaW8uYwpAQCAtMjUsMTcgKzI1LDIwIEBAIGJvb2wJCWhhdmVfaW9zdGF0cyA9IGZhbHNl OwogCiAvKgogICogQ2hlY2sgdGhhdCBzdGF0cyBoYXZlIG5vdCBiZWVuIGNvdW50ZWQgZm9y IGFueSBjb21iaW5hdGlvbiBvZiBJT09iamVjdCwKLSAqIElPQ29udGV4dCwgYW5kIElPT3Ag d2hpY2ggYXJlIG5vdCB0cmFja2VkIGZvciB0aGUgcGFzc2VkLWluIEJhY2tlbmRUeXBlLiBU aGUKLSAqIHBhc3NlZC1pbiBQZ1N0YXRfQmt0eXBlSU8gbXVzdCBjb250YWluIHN0YXRzIGZy b20gdGhlIEJhY2tlbmRUeXBlIHNwZWNpZmllZAotICogYnkgdGhlIHNlY29uZCBwYXJhbWV0 ZXIuIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbG9ja2luZyB0aGUgcGFzc2VkLWluCi0g KiBQZ1N0YXRfQmt0eXBlSU8sIGlmIG5lZWRlZC4KKyAqIElPQ29udGV4dCwgYW5kIElPT3Ag d2hpY2ggYXJlIG5vdCB0cmFja2VkIGZvciB0aGUgcGFzc2VkLWluIEJhY2tlbmRUeXBlLiBJ ZgorICogdGhlIElPT3AgaXMgbm90IGNvdW50ZWQgZm9yIHRoaXMgY29tYmluYXRpb24gYnV0 IElPIHRpbWUgaXMgb3RoZXJ3aXNlCisgKiB0cmFja2VkIGZvciB0aGlzIElPT3AsIGNoZWNr IHRoYXQgSU8gdGltZSBoYXMgbm90IGJlZW4gY291bnRlZCBmb3IgdGhpcworICogY29tYmlu YXRpb24uCisgKiBUT0RPOiBzaG91bGQgd2UgY2hlY2sgdGhhdCBJTyBjb3VudHMgYXJlIG5v dCAwIGlmIElPIHRpbWUgaXMgbm90IHplcm8/CisgKgorICogVGhlIHBhc3NlZC1pbiBQZ1N0 YXRfQmt0eXBlSU8gbXVzdCBjb250YWluIHN0YXRzIGZyb20gdGhlIEJhY2tlbmRUeXBlCisg KiBzcGVjaWZpZWQgYnkgdGhlIHNlY29uZCBwYXJhbWV0ZXIuIENhbGxlciBpcyByZXNwb25z aWJsZSBmb3IgbG9ja2luZyB0aGUKKyAqIHBhc3NlZC1pbiBQZ1N0YXRfQmt0eXBlSU8sIGlm IG5lZWRlZC4KICAqLwogYm9vbAogcGdzdGF0X2JrdHlwZV9pb19zdGF0c192YWxpZChQZ1N0 YXRfQmt0eXBlSU8gKmJhY2tlbmRfaW8sCiAJCQkJCQkJIEJhY2tlbmRUeXBlIGJrdHlwZSkK IHsKLQlib29sCQlia3R5cGVfdHJhY2tlZCA9IHBnc3RhdF90cmFja3NfaW9fYmt0eXBlKGJr dHlwZSk7Ci0KIAlmb3IgKGludCBpb19vYmplY3QgPSAwOyBpb19vYmplY3QgPCBJT09CSkVD VF9OVU1fVFlQRVM7IGlvX29iamVjdCsrKQogCXsKIAkJZm9yIChpbnQgaW9fY29udGV4dCA9 IDA7IGlvX2NvbnRleHQgPCBJT0NPTlRFWFRfTlVNX1RZUEVTOyBpb19jb250ZXh0KyspCkBA IC00NywxNCArNTAsMjEgQEAgcGdzdGF0X2JrdHlwZV9pb19zdGF0c192YWxpZChQZ1N0YXRf Qmt0eXBlSU8gKmJhY2tlbmRfaW8sCiAJCQkgKi8KIAkJCWZvciAoaW50IGlvX29wID0gMDsg aW9fb3AgPCBJT09QX05VTV9UWVBFUzsgaW9fb3ArKykKIAkJCXsKLQkJCQkvKiBObyBzdGF0 cywgc28gbm90aGluZyB0byB2YWxpZGF0ZSAqLwotCQkJCWlmIChiYWNrZW5kX2lvLT5kYXRh W2lvX29iamVjdF1baW9fY29udGV4dF1baW9fb3BdID09IDApCisJCQkJLyogd2UgZG8gdHJh Y2sgaXQgKi8KKwkJCQlpZiAocGdzdGF0X3RyYWNrc19pb19vcChia3R5cGUsIGlvX29iamVj dCwgaW9fY29udGV4dCwgaW9fb3ApKQogCQkJCQljb250aW51ZTsKIAotCQkJCS8qIFRoZXJl IGFyZSBzdGF0cyBhbmQgdGhlcmUgc2hvdWxkbid0IGJlICovCi0JCQkJaWYgKCFia3R5cGVf dHJhY2tlZCB8fAotCQkJCQkhcGdzdGF0X3RyYWNrc19pb19vcChia3R5cGUsIGlvX29iamVj dCwgaW9fY29udGV4dCwgaW9fb3ApKQorCQkJCS8qIHdlIGRvbid0IHRyYWNrIGl0LCBhbmQg aXQgaXMgbm90IDAgKi8KKwkJCQlpZiAoYmFja2VuZF9pby0+Y291bnRzW2lvX29iamVjdF1b aW9fY29udGV4dF1baW9fb3BdICE9IDApCiAJCQkJCXJldHVybiBmYWxzZTsKKworCQkJCS8q IHdlIGRvbid0IHRyYWNrIHRoaXMgSU9PcCwgc28gbWFrZSBzdXJlIGl0cyBJTyB0aW1lIGlz IHplcm8gKi8KKwkJCQlpZiAocGdzdGF0X3RyYWNrc19pb190aW1lKGlvX29wKSA+IC0xKQor CQkJCXsKKwkJCQkJaWYgKCFJTlNUUl9USU1FX0lTX1pFUk8oYmFja2VuZF9pby0+dGltZXNb aW9fb2JqZWN0XVtpb19jb250ZXh0XVtpb19vcF0pKQorCQkJCQkJcmV0dXJuIGZhbHNlOwor CQkJCX0KKwogCQkJfQogCQl9CiAJfQpAQCAtNzAsNyArODAsMjEgQEAgcGdzdGF0X2NvdW50 X2lvX29wKElPT2JqZWN0IGlvX29iamVjdCwgSU9Db250ZXh0IGlvX2NvbnRleHQsIElPT3Ag aW9fb3ApCiAJQXNzZXJ0KGlvX29wIDwgSU9PUF9OVU1fVFlQRVMpOwogCUFzc2VydChwZ3N0 YXRfdHJhY2tzX2lvX29wKE15QmFja2VuZFR5cGUsIGlvX29iamVjdCwgaW9fY29udGV4dCwg aW9fb3ApKTsKIAotCVBlbmRpbmdJT1N0YXRzLmRhdGFbaW9fb2JqZWN0XVtpb19jb250ZXh0 XVtpb19vcF0rKzsKKwlQZW5kaW5nSU9TdGF0cy5jb3VudHNbaW9fb2JqZWN0XVtpb19jb250 ZXh0XVtpb19vcF0rKzsKKworCWhhdmVfaW9zdGF0cyA9IHRydWU7Cit9CisKK3ZvaWQKK3Bn c3RhdF9jb3VudF9pb190aW1lKElPT2JqZWN0IGlvX29iamVjdCwgSU9Db250ZXh0IGlvX2Nv bnRleHQsIElPT3AgaW9fb3AsIGluc3RyX3RpbWUgdGltZSkKK3sKKwlBc3NlcnQoaW9fb2Jq ZWN0IDwgSU9PQkpFQ1RfTlVNX1RZUEVTKTsKKwlBc3NlcnQoaW9fY29udGV4dCA8IElPQ09O VEVYVF9OVU1fVFlQRVMpOworCUFzc2VydChpb19vcCA8IElPT1BfTlVNX1RZUEVTKTsKKwlB c3NlcnQocGdzdGF0X3RyYWNrc19pb19vcChNeUJhY2tlbmRUeXBlLCBpb19vYmplY3QsIGlv X2NvbnRleHQsIGlvX29wKSk7CisJQXNzZXJ0KHBnc3RhdF90cmFja3NfaW9fdGltZShpb19v cCkgIT0gLTEpOworCisJSU5TVFJfVElNRV9BREQoUGVuZGluZ0lPU3RhdHMudGltZXNbaW9f b2JqZWN0XVtpb19jb250ZXh0XVtpb19vcF0sIHRpbWUpOwogCiAJaGF2ZV9pb3N0YXRzID0g dHJ1ZTsKIH0KQEAgLTExNCw4ICsxMzgsMTMgQEAgcGdzdGF0X2ZsdXNoX2lvKGJvb2wgbm93 YWl0KQogCQlmb3IgKGludCBpb19jb250ZXh0ID0gMDsgaW9fY29udGV4dCA8IElPQ09OVEVY VF9OVU1fVFlQRVM7IGlvX2NvbnRleHQrKykKIAkJewogCQkJZm9yIChpbnQgaW9fb3AgPSAw OyBpb19vcCA8IElPT1BfTlVNX1RZUEVTOyBpb19vcCsrKQotCQkJCWJrdHlwZV9zaHN0YXRz LT5kYXRhW2lvX29iamVjdF1baW9fY29udGV4dF1baW9fb3BdICs9Ci0JCQkJCVBlbmRpbmdJ T1N0YXRzLmRhdGFbaW9fb2JqZWN0XVtpb19jb250ZXh0XVtpb19vcF07CisJCQl7CisJCQkJ Ymt0eXBlX3Noc3RhdHMtPmNvdW50c1tpb19vYmplY3RdW2lvX2NvbnRleHRdW2lvX29wXSAr PQorCQkJCQlQZW5kaW5nSU9TdGF0cy5jb3VudHNbaW9fb2JqZWN0XVtpb19jb250ZXh0XVtp b19vcF07CisKKwkJCQlJTlNUUl9USU1FX0FERChia3R5cGVfc2hzdGF0cy0+dGltZXNbaW9f b2JqZWN0XVtpb19jb250ZXh0XVtpb19vcF0sCisJCQkJCQkJICAgUGVuZGluZ0lPU3RhdHMu dGltZXNbaW9fb2JqZWN0XVtpb19jb250ZXh0XVtpb19vcF0pOworCQkJfQogCQl9CiAJfQog CkBAIC0zODQsMyArNDEzLDMwIEBAIHBnc3RhdF90cmFja3NfaW9fb3AoQmFja2VuZFR5cGUg Ymt0eXBlLCBJT09iamVjdCBpb19vYmplY3QsCiAKIAlyZXR1cm4gdHJ1ZTsKIH0KKworLyoK KyAqIFBnU3RhdF9Ca3R5cGVJTy0+dGltZXMgY29udGFpbnMgSU8gdGltZXMgZm9yIElPT3Bz LiBGb3Igc2ltcGxpY2l0eSB0aGlzCisgKiBhcnJheSBoYXMgYSBzcG90IGZvciBldmVyeSBJ T09wLiBwZ3N0YXRfdHJhY2tzX2lvX3RpbWUoKSBpcyB0aGUgc291cmNlIG9mCisgKiB0cnV0 aCBmb3Igd2hpY2ggSU9PcHMgaGF2ZSBjb3JyZXNwb25kaW5nIElPIHRpbWVzLgorICovCitJ T09wCitwZ3N0YXRfdHJhY2tzX2lvX3RpbWUoSU9PcCBpb19vcCkKK3sKKwlzd2l0Y2ggKGlv X29wKQorCXsKKwkJY2FzZSBJT09QX1JFQUQ6CisJCQlyZXR1cm4gSU9PUF9SRUFEOworCQlj YXNlIElPT1BfV1JJVEU6CisJCQlyZXR1cm4gSU9PUF9XUklURTsKKwkJY2FzZSBJT09QX0VY VEVORDoKKwkJCXJldHVybiBJT09QX0VYVEVORDsKKwkJY2FzZSBJT09QX0ZTWU5DOgorCQkJ cmV0dXJuIElPT1BfRlNZTkM7CisJCWNhc2UgSU9PUF9FVklDVDoKKwkJY2FzZSBJT09QX1JF VVNFOgorCQkJcmV0dXJuIC0xOworCX0KKworCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQg SU9PcCB2YWx1ZTogJWQiLCBpb19vcCk7CisJcGdfdW5yZWFjaGFibGUoKTsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMKaW5kZXggYjYxYTEyMzgyYi4uNTczMTAxMGFk ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMKQEAgLTEyNTUsMTIgKzEy NTUsMTYgQEAgdHlwZWRlZiBlbnVtIGlvX3N0YXRfY29sCiAJSU9fQ09MX0lPX09CSkVDVCwK IAlJT19DT0xfSU9fQ09OVEVYVCwKIAlJT19DT0xfUkVBRFMsCisJSU9fQ09MX1JFQURfVElN RSwKIAlJT19DT0xfV1JJVEVTLAorCUlPX0NPTF9XUklURV9USU1FLAogCUlPX0NPTF9FWFRF TkRTLAorCUlPX0NPTF9FWFRFTkRfVElNRSwKIAlJT19DT0xfQ09OVkVSU0lPTiwKIAlJT19D T0xfRVZJQ1RJT05TLAogCUlPX0NPTF9SRVVTRVMsCiAJSU9fQ09MX0ZTWU5DUywKKwlJT19D T0xfRlNZTkNfVElNRSwKIAlJT19DT0xfUkVTRVRfVElNRSwKIAlJT19OVU1fQ09MVU1OUywK IH0gaW9fc3RhdF9jb2w7CkBAIC0xMjkyLDYgKzEyOTYsMjEgQEAgcGdzdGF0X2dldF9pb19v cF9pbmRleChJT09wIGlvX29wKQogCXBnX3VucmVhY2hhYmxlKCk7CiB9CiAKKy8qCisgKiBH ZXQgdGhlIG51bWJlciBvZiB0aGUgY29sdW1uIGNvbnRhaW5pbmcgSU8gdGltZXMgZm9yIHRo ZSBzcGVjaWZpZWQgSU9PcC4gSWYKKyAqIHRoZSBzcGVjaWZpZWQgSU9PcCBpcyBvbmUgZm9y IHdoaWNoIElPIHRpbWUgaXMgbm90IHRyYWNrZWQsIHJldHVybiAtMS4gTm90ZQorICogdGhh dCB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBJTyB0aW1lIGZvciBhbiBJT09wIGlzIGRp c3BsYXllZCBpbiB0aGUgdmlldworICogaW4gdGhlIGNvbHVtbiBkaXJlY3RseSBhZnRlciB0 aGUgSU9PcCBjb3VudHMuCisgKi8KK3N0YXRpYyBpb19zdGF0X2NvbAorcGdzdGF0X2dldF9p b190aW1lX2luZGV4KElPT3AgaW9fb3ApCit7CisJaWYgKHBnc3RhdF90cmFja3NfaW9fdGlt ZShpb19vcCkgPT0gLTEpCisJCXJldHVybiAtMTsKKworCXJldHVybiBwZ3N0YXRfZ2V0X2lv X29wX2luZGV4KGlvX29wKSArIDE7Cit9CisKIERhdHVtCiBwZ19zdGF0X2dldF9pbyhQR19G VU5DVElPTl9BUkdTKQogewpAQCAtMTM1OSwyMCArMTM3OCwzMSBAQCBwZ19zdGF0X2dldF9p byhQR19GVU5DVElPTl9BUkdTKQogCiAJCQkJZm9yIChpbnQgaW9fb3AgPSAwOyBpb19vcCA8 IElPT1BfTlVNX1RZUEVTOyBpb19vcCsrKQogCQkJCXsKLQkJCQkJaW50CQkJY29sX2lkeCA9 IHBnc3RhdF9nZXRfaW9fb3BfaW5kZXgoaW9fb3ApOworCQkJCQlpbnQgICAgICAgICBpID0g cGdzdGF0X2dldF9pb19vcF9pbmRleChpb19vcCk7CiAKIAkJCQkJLyoKIAkJCQkJICogU29t ZSBjb21iaW5hdGlvbnMgb2YgQmFja2VuZFR5cGUgYW5kIElPT3AsIG9mIElPQ29udGV4dAog CQkJCQkgKiBhbmQgSU9PcCwgYW5kIG9mIElPT2JqZWN0IGFuZCBJT09wIGFyZSBub3QgdHJh Y2tlZC4gU2V0CiAJCQkJCSAqIHRoZXNlIGNlbGxzIGluIHRoZSB2aWV3IE5VTEwuCiAJCQkJ CSAqLwotCQkJCQludWxsc1tjb2xfaWR4XSA9ICFwZ3N0YXRfdHJhY2tzX2lvX29wKGJrdHlw ZSwgaW9fb2JqLCBpb19jb250ZXh0LCBpb19vcCk7CisJCQkJCWlmIChwZ3N0YXRfdHJhY2tz X2lvX29wKGJrdHlwZSwgaW9fb2JqLCBpb19jb250ZXh0LCBpb19vcCkpCisJCQkJCQl2YWx1 ZXNbaV0gPSBJbnQ2NEdldERhdHVtKGJrdHlwZV9zdGF0cy0+Y291bnRzW2lvX29ial1baW9f Y29udGV4dF1baW9fb3BdKTsKKwkJCQkJZWxzZQorCQkJCQkJbnVsbHNbaV0gPSB0cnVlOwor CQkJCX0KKworCQkJCWZvciAoaW50IGlvX29wID0gMDsgaW9fb3AgPCBJT09QX05VTV9UWVBF UzsgaW9fb3ArKykKKwkJCQl7CisJCQkJCWludCAgICAgICAgIGkgPSBwZ3N0YXRfZ2V0X2lv X3RpbWVfaW5kZXgoaW9fb3ApOwogCi0JCQkJCWlmIChudWxsc1tjb2xfaWR4XSkKKwkJCQkJ aWYgKGkgPT0gLTEpCiAJCQkJCQljb250aW51ZTsKIAotCQkJCQl2YWx1ZXNbY29sX2lkeF0g PQotCQkJCQkJSW50NjRHZXREYXR1bShia3R5cGVfc3RhdHMtPmRhdGFbaW9fb2JqXVtpb19j b250ZXh0XVtpb19vcF0pOworCQkJCQlpZiAoIW51bGxzW3Bnc3RhdF9nZXRfaW9fb3BfaW5k ZXgoaW9fb3ApXSkKKwkJCQkJCXZhbHVlc1tpXSA9CisJCQkJCQkJRmxvYXQ4R2V0RGF0dW0o SU5TVFJfVElNRV9HRVRfTUlMTElTRUMoYmt0eXBlX3N0YXRzLT50aW1lc1tpb19vYmpdW2lv X2NvbnRleHRdW2lvX29wXSkpOworCQkJCQllbHNlCisJCQkJCQludWxsc1tpXSA9IHRydWU7 CiAJCQkJfQogCiAJCQkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQs IHJzaW5mby0+c2V0RGVzYywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDUwNTU5 NTYyMGUuLjgwYzA2MjcyMDkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtNTcy MSw5ICs1NzIxLDkgQEAKICAgcHJvbmFtZSA9PiAncGdfc3RhdF9nZXRfaW8nLCBwcm92b2xh dGlsZSA9PiAndicsCiAgIHByb3Jvd3MgPT4gJzMwJywgcHJvcmV0c2V0ID0+ICd0JywKICAg cHJvcGFyYWxsZWwgPT4gJ3InLCBwcm9yZXR0eXBlID0+ICdyZWNvcmQnLCBwcm9hcmd0eXBl cyA9PiAnJywKLSAgcHJvYWxsYXJndHlwZXMgPT4gJ3t0ZXh0LHRleHQsdGV4dCxpbnQ4LGlu dDgsaW50OCxpbnQ4LGludDgsaW50OCxpbnQ4LHRpbWVzdGFtcHR6fScsCi0gIHByb2FyZ21v ZGVzID0+ICd7byxvLG8sbyxvLG8sbyxvLG8sbyxvfScsCi0gIHByb2FyZ25hbWVzID0+ICd7 YmFja2VuZF90eXBlLGlvX29iamVjdCxpb19jb250ZXh0LHJlYWRzLHdyaXRlcyxleHRlbmRz LG9wX2J5dGVzLGV2aWN0aW9ucyxyZXVzZXMsZnN5bmNzLHN0YXRzX3Jlc2V0fScsCisgIHBy b2FsbGFyZ3R5cGVzID0+ICd7dGV4dCx0ZXh0LHRleHQsaW50OCxmbG9hdDgsaW50OCxmbG9h dDgsaW50OCxmbG9hdDgsaW50OCxpbnQ4LGludDgsaW50OCxmbG9hdDgsdGltZXN0YW1wdHp9 JywKKyAgcHJvYXJnbW9kZXMgPT4gJ3tvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sb30n LAorICBwcm9hcmduYW1lcyA9PiAne2JhY2tlbmRfdHlwZSxpb19vYmplY3QsaW9fY29udGV4 dCxyZWFkcyxyZWFkX3RpbWUsd3JpdGVzLHdyaXRlX3RpbWUsZXh0ZW5kcyxleHRlbmRfdGlt ZSxvcF9ieXRlcyxldmljdGlvbnMscmV1c2VzLGZzeW5jcyxmc3luY190aW1lLHN0YXRzX3Jl c2V0fScsCiAgIHByb3NyYyA9PiAncGdfc3RhdF9nZXRfaW8nIH0sCiAKIHsgb2lkID0+ICcx MTM2JywgZGVzY3IgPT4gJ3N0YXRpc3RpY3M6IGluZm9ybWF0aW9uIGFib3V0IFdBTCBhY3Rp dml0eScsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wZ3N0YXQuaCBiL3NyYy9pbmNsdWRl L3Bnc3RhdC5oCmluZGV4IGY0M2ZhYzA5ZWQuLjY4N2FmZjQ4NTkgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3Bnc3RhdC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCkBAIC0zMTMs NyArMzEzLDggQEAgdHlwZWRlZiBlbnVtIElPT3AKIAogdHlwZWRlZiBzdHJ1Y3QgUGdTdGF0 X0JrdHlwZUlPCiB7Ci0JUGdTdGF0X0NvdW50ZXIgZGF0YVtJT09CSkVDVF9OVU1fVFlQRVNd W0lPQ09OVEVYVF9OVU1fVFlQRVNdW0lPT1BfTlVNX1RZUEVTXTsKKwlQZ1N0YXRfQ291bnRl ciBjb3VudHNbSU9PQkpFQ1RfTlVNX1RZUEVTXVtJT0NPTlRFWFRfTlVNX1RZUEVTXVtJT09Q X05VTV9UWVBFU107CisJaW5zdHJfdGltZQl0aW1lc1tJT09CSkVDVF9OVU1fVFlQRVNdW0lP Q09OVEVYVF9OVU1fVFlQRVNdW0lPT1BfTlVNX1RZUEVTXTsKIH0gUGdTdGF0X0JrdHlwZUlP OwogCiB0eXBlZGVmIHN0cnVjdCBQZ1N0YXRfSU8KQEAgLTUwNyw2ICs1MDgsNyBAQCBleHRl cm4gUGdTdGF0X0NoZWNrcG9pbnRlclN0YXRzICpwZ3N0YXRfZmV0Y2hfc3RhdF9jaGVja3Bv aW50ZXIodm9pZCk7CiBleHRlcm4gYm9vbCBwZ3N0YXRfYmt0eXBlX2lvX3N0YXRzX3ZhbGlk KFBnU3RhdF9Ca3R5cGVJTyAqY29udGV4dF9vcHMsCiAJCQkJCQkJCQkJIEJhY2tlbmRUeXBl IGJrdHlwZSk7CiBleHRlcm4gdm9pZCBwZ3N0YXRfY291bnRfaW9fb3AoSU9PYmplY3QgaW9f b2JqZWN0LCBJT0NvbnRleHQgaW9fY29udGV4dCwgSU9PcCBpb19vcCk7CitleHRlcm4gdm9p ZCBwZ3N0YXRfY291bnRfaW9fdGltZShJT09iamVjdCBpb19vYmplY3QsIElPQ29udGV4dCBp b19jb250ZXh0LCBJT09wIGlvX29wLCBpbnN0cl90aW1lIHRpbWUpOwogZXh0ZXJuIFBnU3Rh dF9JTyAqcGdzdGF0X2ZldGNoX3N0YXRfaW8odm9pZCk7CiBleHRlcm4gY29uc3QgY2hhciAq cGdzdGF0X2dldF9pb19jb250ZXh0X25hbWUoSU9Db250ZXh0IGlvX2NvbnRleHQpOwogZXh0 ZXJuIGNvbnN0IGNoYXIgKnBnc3RhdF9nZXRfaW9fb2JqZWN0X25hbWUoSU9PYmplY3QgaW9f b2JqZWN0KTsKQEAgLTUxNiw2ICs1MTgsNyBAQCBleHRlcm4gYm9vbCBwZ3N0YXRfdHJhY2tz X2lvX29iamVjdChCYWNrZW5kVHlwZSBia3R5cGUsCiAJCQkJCQkJCQlJT09iamVjdCBpb19v YmplY3QsIElPQ29udGV4dCBpb19jb250ZXh0KTsKIGV4dGVybiBib29sIHBnc3RhdF90cmFj a3NfaW9fb3AoQmFja2VuZFR5cGUgYmt0eXBlLCBJT09iamVjdCBpb19vYmplY3QsCiAJCQkJ CQkJCUlPQ29udGV4dCBpb19jb250ZXh0LCBJT09wIGlvX29wKTsKK2V4dGVybiBJT09wIHBn c3RhdF90cmFja3NfaW9fdGltZShJT09wIGlvX29wKTsKIAogCiAvKgpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3J1bGVzLm91dAppbmRleCBlOTUzZDFmNTE1Li41NDM0ODUxMzE0IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dApAQCAtMTg4MCwxNCArMTg4MCwxOCBA QCBwZ19zdGF0X2lvfCBTRUxFQ1QgYmFja2VuZF90eXBlLAogICAgIGlvX29iamVjdCwKICAg ICBpb19jb250ZXh0LAogICAgIHJlYWRzLAorICAgIHJlYWRfdGltZSwKICAgICB3cml0ZXMs CisgICAgd3JpdGVfdGltZSwKICAgICBleHRlbmRzLAorICAgIGV4dGVuZF90aW1lLAogICAg IG9wX2J5dGVzLAogICAgIGV2aWN0aW9ucywKICAgICByZXVzZXMsCiAgICAgZnN5bmNzLAor ICAgIGZzeW5jX3RpbWUsCiAgICAgc3RhdHNfcmVzZXQKLSAgIEZST00gcGdfc3RhdF9nZXRf aW8oKSBiKGJhY2tlbmRfdHlwZSwgaW9fb2JqZWN0LCBpb19jb250ZXh0LCByZWFkcywgd3Jp dGVzLCBleHRlbmRzLCBvcF9ieXRlcywgZXZpY3Rpb25zLCByZXVzZXMsIGZzeW5jcywgc3Rh dHNfcmVzZXQpOworICAgRlJPTSBwZ19zdGF0X2dldF9pbygpIGIoYmFja2VuZF90eXBlLCBp b19vYmplY3QsIGlvX2NvbnRleHQsIHJlYWRzLCByZWFkX3RpbWUsIHdyaXRlcywgd3JpdGVf dGltZSwgZXh0ZW5kcywgZXh0ZW5kX3RpbWUsIG9wX2J5dGVzLCBldmljdGlvbnMsIHJldXNl cywgZnN5bmNzLCBmc3luY190aW1lLCBzdGF0c19yZXNldCk7CiBwZ19zdGF0X3Byb2dyZXNz X2FuYWx5emV8IFNFTEVDVCBzLnBpZCwKICAgICBzLmRhdGlkLAogICAgIGQuZGF0bmFtZSwK --------------TNpp1bJvSM92PM9NHGS3Th1Q--