From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gustavo Padovan Subject: [PATCH 09/11] dma-buf/sync_timeline: de-stage sync_timeline Date: Tue, 26 Jan 2016 16:30:24 -0200 Message-ID: <1453833026-24637-10-git-send-email-gustavo@padovan.org> References: <1453833026-24637-1-git-send-email-gustavo@padovan.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-yk0-f194.google.com (mail-yk0-f194.google.com [209.85.160.194]) by gabe.freedesktop.org (Postfix) with ESMTPS id A83FE6E633 for ; Tue, 26 Jan 2016 10:31:07 -0800 (PST) Received: by mail-yk0-f194.google.com with SMTP id v14so15311571ykd.1 for ; Tue, 26 Jan 2016 10:31:07 -0800 (PST) In-Reply-To: <1453833026-24637-1-git-send-email-gustavo@padovan.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Greg Kroah-Hartman Cc: devel@driverdev.osuosl.org, Daniel Stone , Daniel Vetter , Riley Andrews , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= , Gustavo Padovan , John Harrison List-Id: dri-devel@lists.freedesktop.org RnJvbTogR3VzdGF2byBQYWRvdmFuIDxndXN0YXZvLnBhZG92YW5AY29sbGFib3JhLmNvLnVrPgoK RGUtc3RhZ2UgdGhlIHJlbWFpbmluZyBiaXQgb2Ygc3luYyBmcmFtZXdvcms6IHN5bmNfdGltZWxp bmUgYW5kIHN3X3N5bmMKcGx1cyBzb21lIGRlYnVnZ2luZyByb3V0aW5lcy4KClNpZ25lZC1vZmYt Ynk6IEd1c3Rhdm8gUGFkb3ZhbiA8Z3VzdGF2by5wYWRvdmFuQGNvbGxhYm9yYS5jby51az4KLS0t CiBkcml2ZXJzL2RtYS1idWYvS2NvbmZpZyAgICAgICAgICAgICAgICB8ICAxMCArCiBkcml2ZXJz L2RtYS1idWYvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMyArLQogZHJpdmVycy9kbWEtYnVm L3N3X3N5bmMuaCAgICAgICAgICAgICAgfCAgMzIgKysrCiBkcml2ZXJzL2RtYS1idWYvc3luY19k ZWJ1Zy5jICAgICAgICAgICB8IDM3NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IGRyaXZlcnMvZG1hLWJ1Zi9zeW5jX2RlYnVnLmggICAgICAgICAgIHwgIDM1ICsrKwogZHJpdmVy cy9kbWEtYnVmL3N5bmNfdGltZWxpbmUuYyAgICAgICAgfCAyMjIgKysrKysrKysrKysrKysrKysr KwogZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZyAgICAgICAgfCAgMjAgLS0KIGRyaXZl cnMvc3RhZ2luZy9hbmRyb2lkL3N5bmMuYyAgICAgICAgIHwgMjIxIC0tLS0tLS0tLS0tLS0tLS0t LS0KIGRyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmMuaCAgICAgICAgIHwgMTMwIC0tLS0tLS0t LS0tLQogZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvc3luY19kZWJ1Zy5jICAgfCAzNzMgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3RyYWNl L3N5bmMuaCAgIHwgIDMyIC0tLQogZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdWFwaS9zd19zeW5j LmggfCAgMzIgLS0tCiBpbmNsdWRlL2xpbnV4L3N5bmNfdGltZWxpbmUuaCAgICAgICAgICB8IDEx NCArKysrKysrKysrCiBpbmNsdWRlL3RyYWNlL2V2ZW50cy9zeW5jX3RpbWVsaW5lLmggICB8ICAz MSArKysKIDE0IGZpbGVzIGNoYW5nZWQsIDgyMCBpbnNlcnRpb25zKCspLCA4MDkgZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL3N3X3N5bmMuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9zeW5jX2RlYnVnLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2RtYS1idWYvc3luY19kZWJ1Zy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9kbWEtYnVmL3N5bmNfdGltZWxpbmUuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv c3RhZ2luZy9hbmRyb2lkL3N5bmMuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2lu Zy9hbmRyb2lkL3N5bmMuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy9hbmRy b2lkL3N5bmNfZGVidWcuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy9hbmRy b2lkL3RyYWNlL3N5bmMuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy9hbmRy b2lkL3VhcGkvc3dfc3luYy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9zeW5j X3RpbWVsaW5lLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3RyYWNlL2V2ZW50cy9zeW5j X3RpbWVsaW5lLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvS2NvbmZpZyBiL2RyaXZl cnMvZG1hLWJ1Zi9LY29uZmlnCmluZGV4IDk4MjRiYzQuLjczZGYwMjQgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZG1hLWJ1Zi9LY29uZmlnCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnCkBAIC04 LDQgKzgsMTQgQEAgY29uZmlnIFNZTkNfRklMRQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9u IGVuYWJsZXMgdGhlIGZlbmNlIGZyYW1ld29yayBzeW5jaHJvbml6YXRpb24gdG8gZXhwb3J0CiAJ ICBzeW5jX2ZpbGVzIHRvIHVzZXJzcGFjZSB0aGF0IGNhbiByZXByZXNlbnQgb25lIG9yIG1vcmUg ZmVuY2VzLgorCitjb25maWcgU1dfU1lOQworCWJvb2wgIlNvZnR3YXJlIHN5bmNocm9uaXphdGlv biBvYmplY3RzIgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gU1lOQ19GSUxFCisJLS0taGVscC0t LQorCSAgQSBzeW5jIG9iamVjdCBkcml2ZXIgdGhhdCB1c2VzIGEgMzJiaXQgY291bnRlciB0byBj b29yZGluYXRlCisJICBzeW5jaHJvbml6YXRpb24uIFVzZWZ1bCB3aGVuIHRoZXJlIGlzIG5vIGhh cmR3YXJlIHByaW1pdGl2ZSBiYWNraW5nCisJICB0aGUgc3luY2hyb25pemF0aW9uLgorCiBlbmRt ZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUgYi9kcml2ZXJzL2RtYS1i dWYvTWFrZWZpbGUKaW5kZXggNGE0MjRlYy4uNzhkOGVjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9k bWEtYnVmL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZQpAQCAtMSwyICsx LDMgQEAKIG9iai15IDo9IGRtYS1idWYubyBmZW5jZS5vIHJlc2VydmF0aW9uLm8gc2Vxbm8tZmVu Y2Uubwotb2JqLSQoQ09ORklHX1NZTkNfRklMRSkJCSs9IHN5bmNfZmlsZS5vCitvYmotJChDT05G SUdfU1lOQ19GSUxFKQkJKz0gc3luY19maWxlLm8gc3luY19kZWJ1Zy5vCitvYmotJChDT05GSUdf U1dfU1lOQykJCSs9IHN5bmNfdGltZWxpbmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVm L3N3X3N5bmMuaCBiL2RyaXZlcnMvZG1hLWJ1Zi9zd19zeW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uOWI1ZDQ4NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1h LWJ1Zi9zd19zeW5jLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx MiBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwg YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5 IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9VQVBJX0xJTlVY X1NXX1NZTkNfSAorI2RlZmluZSBfVUFQSV9MSU5VWF9TV19TWU5DX0gKKworI2luY2x1ZGUgPGxp bnV4L3R5cGVzLmg+CisKK3N0cnVjdCBzd19zeW5jX2NyZWF0ZV9mZW5jZV9kYXRhIHsKKwlfX3Uz Mgl2YWx1ZTsKKwljaGFyCW5hbWVbMzJdOworCV9fczMyCWZlbmNlOyAvKiBmZCBvZiBuZXcgZmVu Y2UgKi8KK307CisKKyNkZWZpbmUgU1dfU1lOQ19JT0NfTUFHSUMJJ1cnCisKKyNkZWZpbmUgU1df U1lOQ19JT0NfQ1JFQVRFX0ZFTkNFCV9JT1dSKFNXX1NZTkNfSU9DX01BR0lDLCAwLFwKKwkJc3Ry dWN0IHN3X3N5bmNfY3JlYXRlX2ZlbmNlX2RhdGEpCisjZGVmaW5lIFNXX1NZTkNfSU9DX0lOQwkJ CV9JT1coU1dfU1lOQ19JT0NfTUFHSUMsIDEsIF9fdTMyKQorCisjZW5kaWYgLyogX1VBUElfTElO VVhfU1dfU1lOQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvc3luY19kZWJ1Zy5j IGIvZHJpdmVycy9kbWEtYnVmL3N5bmNfZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi43ZGE5ZmY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL3N5 bmNfZGVidWcuYwpAQCAtMCwwICsxLDM3NCBAQAorLyoKKyAqIGRyaXZlcnMvYmFzZS9zeW5jLmMK KyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuCisgKgorICogVGhpcyBzb2Z0 d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9k aWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+Cisj aW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRl IDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51 eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91 YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvYW5vbl9pbm9kZXMuaD4KKyNpbmNsdWRlIDxsaW51 eC90aW1lNjQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeW5jX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tjb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9z eW5jX3RpbWVsaW5lLmg+CisKKyNpbmNsdWRlICJzeW5jX2RlYnVnLmgiCisjaW5jbHVkZSAic3df c3luYy5oIgorCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5 ICpkYmdmczsKKworc3RhdGljIExJU1RfSEVBRChzeW5jX3RpbWVsaW5lX2xpc3RfaGVhZCk7Citz dGF0aWMgREVGSU5FX1NQSU5MT0NLKHN5bmNfdGltZWxpbmVfbGlzdF9sb2NrKTsKK3N0YXRpYyBM SVNUX0hFQUQoc3luY19maWxlX2xpc3RfaGVhZCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN5 bmNfZmlsZV9saXN0X2xvY2spOworCit2b2lkIHN5bmNfdGltZWxpbmVfZGVidWdfYWRkKHN0cnVj dCBzeW5jX3RpbWVsaW5lICpvYmopCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5f bG9ja19pcnFzYXZlKCZzeW5jX3RpbWVsaW5lX2xpc3RfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRk X3RhaWwoJm9iai0+c3luY190aW1lbGluZV9saXN0LCAmc3luY190aW1lbGluZV9saXN0X2hlYWQp OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN5bmNfdGltZWxpbmVfbGlzdF9sb2NrLCBmbGFn cyk7Cit9CisKK3ZvaWQgc3luY190aW1lbGluZV9kZWJ1Z19yZW1vdmUoc3RydWN0IHN5bmNfdGlt ZWxpbmUgKm9iaikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNh dmUoJnN5bmNfdGltZWxpbmVfbGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJm9iai0+c3lu Y190aW1lbGluZV9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeW5jX3RpbWVsaW5l X2xpc3RfbG9jaywgZmxhZ3MpOworfQorCit2b2lkIHN5bmNfZmlsZV9kZWJ1Z19hZGQoc3RydWN0 IHN5bmNfZmlsZSAqc3luY19maWxlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGlu X2xvY2tfaXJxc2F2ZSgmc3luY19maWxlX2xpc3RfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3Rh aWwoJnN5bmNfZmlsZS0+c3luY19maWxlX2xpc3QsICZzeW5jX2ZpbGVfbGlzdF9oZWFkKTsKKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZzeW5jX2ZpbGVfbGlzdF9sb2NrLCBmbGFncyk7Cit9CisK K3ZvaWQgc3luY19maWxlX2RlYnVnX3JlbW92ZShzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGUp Cit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzeW5jX2Zp bGVfbGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJnN5bmNfZmlsZS0+c3luY19maWxlX2xp c3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN5bmNfZmlsZV9saXN0X2xvY2ssIGZsYWdz KTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnN5bmNfc3RhdHVzX3N0cihpbnQgc3RhdHVzKQor eworCWlmIChzdGF0dXMgPT0gMCkKKwkJcmV0dXJuICJzaWduYWxlZCI7CisKKwlpZiAoc3RhdHVz ID4gMCkKKwkJcmV0dXJuICJhY3RpdmUiOworCisJcmV0dXJuICJlcnJvciI7Cit9CisKK3N0YXRp YyB2b2lkIHN5bmNfcHJpbnRfZmVuY2Uoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgZmVuY2Ug KmZlbmNlLCBib29sIHNob3cpCit7CisJaW50IHN0YXR1cyA9IDE7CisJc3RydWN0IHN5bmNfdGlt ZWxpbmUgKnBhcmVudCA9IGZlbmNlX3BhcmVudChmZW5jZSk7CisKKwlpZiAoZmVuY2VfaXNfc2ln bmFsZWRfbG9ja2VkKGZlbmNlKSkKKwkJc3RhdHVzID0gZmVuY2UtPnN0YXR1czsKKworCXNlcV9w cmludGYocywgIiAgJXMlc2ZlbmNlICVzIiwKKwkJICAgc2hvdyA/IHBhcmVudC0+bmFtZSA6ICIi LAorCQkgICBzaG93ID8gIl8iIDogIiIsCisJCSAgIHN5bmNfc3RhdHVzX3N0cihzdGF0dXMpKTsK KworCWlmIChzdGF0dXMgPD0gMCkgeworCQlzdHJ1Y3QgdGltZXNwZWM2NCB0czY0ID0KKwkJCWt0 aW1lX3RvX3RpbWVzcGVjNjQoZmVuY2UtPnRpbWVzdGFtcCk7CisKKwkJc2VxX3ByaW50ZihzLCAi QCVsbGQuJTA5bGQiLCAoczY0KXRzNjQudHZfc2VjLCB0czY0LnR2X25zZWMpOworCX0KKworCWlm ICgoIWZlbmNlIHx8IGZlbmNlLT5vcHMtPnRpbWVsaW5lX3ZhbHVlX3N0cikgJiYKKwkJZmVuY2Ut Pm9wcy0+ZmVuY2VfdmFsdWVfc3RyKSB7CisJCWNoYXIgdmFsdWVbNjRdOworCQlib29sIHN1Y2Nl c3M7CisKKwkJZmVuY2UtPm9wcy0+ZmVuY2VfdmFsdWVfc3RyKGZlbmNlLCB2YWx1ZSwgc2l6ZW9m KHZhbHVlKSk7CisJCXN1Y2Nlc3MgPSBzdHJsZW4odmFsdWUpOworCisJCWlmIChzdWNjZXNzKQor CQkJc2VxX3ByaW50ZihzLCAiOiAlcyIsIHZhbHVlKTsKKworCQlpZiAoc3VjY2VzcyAmJiBmZW5j ZSkgeworCQkJZmVuY2UtPm9wcy0+dGltZWxpbmVfdmFsdWVfc3RyKGZlbmNlLCB2YWx1ZSwKKwkJ CQkJCSAgICAgICBzaXplb2YodmFsdWUpKTsKKworCQkJaWYgKHN0cmxlbih2YWx1ZSkpCisJCQkJ c2VxX3ByaW50ZihzLCAiIC8gJXMiLCB2YWx1ZSk7CisJCX0KKwl9CisKKwlzZXFfcHV0cyhzLCAi XG4iKTsKK30KKworc3RhdGljIHZvaWQgc3luY19wcmludF9vYmooc3RydWN0IHNlcV9maWxlICpz LCBzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsK Kwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc2VxX3ByaW50ZihzLCAiJXMgJXM6ICVkXG4iLCBv YmotPm5hbWUsIG9iai0+ZHJ2X25hbWUsIG9iai0+dmFsdWUpOworCisJc3Bpbl9sb2NrX2lycXNh dmUoJm9iai0+Y2hpbGRfbGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaChwb3MsICZv YmotPmNoaWxkX2xpc3RfaGVhZCkgeworCQlzdHJ1Y3QgZmVuY2UgKmZlbmNlID0KKwkJCWNvbnRh aW5lcl9vZihwb3MsIHN0cnVjdCBmZW5jZSwgY2hpbGRfbGlzdCk7CisJCXN5bmNfcHJpbnRfZmVu Y2UocywgZmVuY2UsIGZhbHNlKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2JqLT5j aGlsZF9saXN0X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc3luY19wcmludF9zeW5j X2ZpbGUoc3RydWN0IHNlcV9maWxlICpzLAorCQkJCSAgc3RydWN0IHN5bmNfZmlsZSAqc3luY19m aWxlKQoreworCWludCBpOworCisJc2VxX3ByaW50ZihzLCAiWyVwXSAlczogJXNcbiIsIHN5bmNf ZmlsZSwgc3luY19maWxlLT5uYW1lLAorCQkgICBzeW5jX3N0YXR1c19zdHIoYXRvbWljX3JlYWQo JnN5bmNfZmlsZS0+c3RhdHVzKSkpOworCisJZm9yIChpID0gMDsgaSA8IHN5bmNfZmlsZS0+bnVt X2ZlbmNlczsgKytpKSB7CisJCXN5bmNfcHJpbnRfZmVuY2Uocywgc3luY19maWxlLT5jYnNbaV0u ZmVuY2UsIHRydWUpOworCX0KK30KKworc3RhdGljIGludCBzeW5jX2RlYnVnZnNfc2hvdyhzdHJ1 Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwor CXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKworCXNlcV9wdXRzKHMsICJvYmpzOlxuLS0tLS0tLS0t LS0tLS1cbiIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnN5bmNfdGltZWxpbmVfbGlzdF9sb2Nr LCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaChwb3MsICZzeW5jX3RpbWVsaW5lX2xpc3RfaGVhZCkg eworCQlzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqID0KKwkJCWNvbnRhaW5lcl9vZihwb3MsIHN0 cnVjdCBzeW5jX3RpbWVsaW5lLAorCQkJCSAgICAgc3luY190aW1lbGluZV9saXN0KTsKKworCQlz eW5jX3ByaW50X29iaihzLCBvYmopOworCQlzZXFfcHV0cyhzLCAiXG4iKTsKKwl9CisJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmc3luY190aW1lbGluZV9saXN0X2xvY2ssIGZsYWdzKTsKKworCXNl cV9wdXRzKHMsICJmZW5jZXM6XG4tLS0tLS0tLS0tLS0tLVxuIik7CisKKwlzcGluX2xvY2tfaXJx c2F2ZSgmc3luY19maWxlX2xpc3RfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2gocG9zLCAm c3luY19maWxlX2xpc3RfaGVhZCkgeworCQlzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGUgPQor CQkJY29udGFpbmVyX29mKHBvcywgc3RydWN0IHN5bmNfZmlsZSwgc3luY19maWxlX2xpc3QpOwor CisJCXN5bmNfcHJpbnRfc3luY19maWxlKHMsIHN5bmNfZmlsZSk7CisJCXNlcV9wdXRzKHMsICJc biIpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeW5jX2ZpbGVfbGlzdF9sb2NrLCBm bGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3luY19pbmZvX2RlYnVnZnNfb3Bl bihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2lu Z2xlX29wZW4oZmlsZSwgc3luY19kZWJ1Z2ZzX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeW5jX2luZm9fZGVidWdmc19m b3BzID0geworCS5vcGVuICAgICAgICAgICA9IHN5bmNfaW5mb19kZWJ1Z2ZzX29wZW4sCisJLnJl YWQgICAgICAgICAgID0gc2VxX3JlYWQsCisJLmxsc2VlayAgICAgICAgID0gc2VxX2xzZWVrLAor CS5yZWxlYXNlICAgICAgICA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworI2lmIElTX0VOQUJMRUQo Q09ORklHX1NXX1NZTkMpCisvKgorICogKldBUk5JTkcqCisgKgorICogaW1wcm9wZXIgdXNlIG9m IHRoaXMgY2FuIHJlc3VsdCBpbiBkZWFkbG9ja2luZyBrZXJuZWwgZHJpdmVycyBmcm9tIHVzZXJz cGFjZS4KKyAqLworCisvKiBvcGVuaW5nIHN3X3N5bmMgY3JlYXRlIGEgbmV3IHN5bmMgb2JqICov CitzdGF0aWMgaW50IHN3X3N5bmNfZGVidWdmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0 cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmo7CisJY2hhciB0 YXNrX2NvbW1bVEFTS19DT01NX0xFTl07CisKKwlnZXRfdGFza19jb21tKHRhc2tfY29tbSwgY3Vy cmVudCk7CisKKwlvYmogPSBzeW5jX3RpbWVsaW5lX2NyZWF0ZShzaXplb2YoKm9iaiksICJzd19z eW5jIiwgdGFza19jb21tKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmaWxl LT5wcml2YXRlX2RhdGEgPSBvYmo7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzd19z eW5jX2RlYnVnZnNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmls ZSkKK3sKKwlzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwor CisJc3luY190aW1lbGluZV9kZXN0cm95KG9iaik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBs b25nIHN3X3N5bmNfaW9jdGxfY3JlYXRlX2ZlbmNlKHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmos CisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCBmZCA9IGdldF91bnVzZWRf ZmRfZmxhZ3MoT19DTE9FWEVDKTsKKwlpbnQgZXJyOworCXN0cnVjdCBmZW5jZSAqZmVuY2U7CisJ c3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlOworCXN0cnVjdCBzd19zeW5jX2NyZWF0ZV9mZW5j ZV9kYXRhIGRhdGE7CisKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gZmQ7CisKKwlpZiAoY29weV9m cm9tX3VzZXIoJmRhdGEsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGRhdGEpKSkgeworCQll cnIgPSAtRUZBVUxUOworCQlnb3RvIGVycjsKKwl9CisKKwlmZW5jZSA9IHN5bmNfcHRfY3JlYXRl KG9iaiwgc2l6ZW9mKCpmZW5jZSksIGRhdGEudmFsdWUpOworCWlmICghZmVuY2UpIHsKKwkJZXJy ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJZGF0YS5uYW1lW3NpemVvZihkYXRhLm5h bWUpIC0gMV0gPSAnXDAnOworCXN5bmNfZmlsZSA9IHN5bmNfZmlsZV9jcmVhdGUoZGF0YS5uYW1l LCBmZW5jZSk7CisJaWYgKCFzeW5jX2ZpbGUpIHsKKwkJZmVuY2VfcHV0KGZlbmNlKTsKKwkJZXJy ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJZGF0YS5mZW5jZSA9IGZkOworCWlmIChj b3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKSkgewor CQlzeW5jX2ZpbGVfcHV0KHN5bmNfZmlsZSk7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXJy OworCX0KKworCXN5bmNfZmlsZV9pbnN0YWxsKHN5bmNfZmlsZSwgZmQpOworCisJcmV0dXJuIDA7 CisKK2VycjoKKwlwdXRfdW51c2VkX2ZkKGZkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMg bG9uZyBzd19zeW5jX2lvY3RsX2luYyhzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqLCB1bnNpZ25l ZCBsb25nIGFyZykKK3sKKwl1MzIgdmFsdWU7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnZhbHVl LCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZih2YWx1ZSkpKQorCQlyZXR1cm4gLUVGQVVMVDsK KworCXN5bmNfdGltZWxpbmVfc2lnbmFsKG9iaiwgdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBsb25nIHN3X3N5bmNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGlu dCBjbWQsCisJCQkgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBzeW5jX3RpbWVsaW5l ICpvYmogPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU1df U1lOQ19JT0NfQ1JFQVRFX0ZFTkNFOgorCQlyZXR1cm4gc3dfc3luY19pb2N0bF9jcmVhdGVfZmVu Y2Uob2JqLCBhcmcpOworCisJY2FzZSBTV19TWU5DX0lPQ19JTkM6CisJCXJldHVybiBzd19zeW5j X2lvY3RsX2luYyhvYmosIGFyZyk7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT1RUWTsKKwl9 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN3X3N5bmNfZGVidWdm c19mb3BzID0geworCS5vcGVuICAgICAgICAgICA9IHN3X3N5bmNfZGVidWdmc19vcGVuLAorCS5y ZWxlYXNlICAgICAgICA9IHN3X3N5bmNfZGVidWdmc19yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0 bCA9IHN3X3N5bmNfaW9jdGwsCisJLmNvbXBhdF9pb2N0bCA9IHN3X3N5bmNfaW9jdGwsCit9Owor I2VuZGlmCisKK3N0YXRpYyBfX2luaXQgaW50IHN5bmNfZGVidWdmc19pbml0KHZvaWQpCit7CisJ ZGJnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInN5bmMiLCBOVUxMKTsKKworCWRlYnVnZnNfY3Jl YXRlX2ZpbGUoImluZm8iLCAwNDQ0LCBkYmdmcywgTlVMTCwgJnN5bmNfaW5mb19kZWJ1Z2ZzX2Zv cHMpOworCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1dfU1lOQykKKwlkZWJ1Z2ZzX2NyZWF0ZV9m aWxlKCJzd19zeW5jIiwgMDY0NCwgZGJnZnMsIE5VTEwsCisJCQkgICAgJnN3X3N5bmNfZGVidWdm c19mb3BzKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CitsYXRlX2luaXRjYWxsKHN5bmNfZGVi dWdmc19pbml0KTsKKworc3RhdGljIF9fZXhpdCB2b2lkIHN5bmNfZGVidWdmc19leGl0KHZvaWQp Cit7CisJaWYgKGRiZ2ZzKQorCQlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZGJnZnMpOworfQor bW9kdWxlX2V4aXQoc3luY19kZWJ1Z2ZzX2V4aXQpOworCisjZGVmaW5lIERVTVBfQ0hVTksgMjU2 CitzdGF0aWMgY2hhciBzeW5jX2R1bXBfYnVmWzY0ICogMTAyNF07Cit2b2lkIHN5bmNfZHVtcCh2 b2lkKQoreworCXN0cnVjdCBzZXFfZmlsZSBzID0geworCQkuYnVmID0gc3luY19kdW1wX2J1ZiwK KwkJLnNpemUgPSBzaXplb2Yoc3luY19kdW1wX2J1ZikgLSAxLAorCX07CisJaW50IGk7CisKKwlz eW5jX2RlYnVnZnNfc2hvdygmcywgTlVMTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcy5jb3VudDsg aSArPSBEVU1QX0NIVU5LKSB7CisJCWlmICgocy5jb3VudCAtIGkpID4gRFVNUF9DSFVOSykgewor CQkJY2hhciBjID0gcy5idWZbaSArIERVTVBfQ0hVTktdOworCisJCQlzLmJ1ZltpICsgRFVNUF9D SFVOS10gPSAwOworCQkJcHJfY29udCgiJXMiLCBzLmJ1ZiArIGkpOworCQkJcy5idWZbaSArIERV TVBfQ0hVTktdID0gYzsKKwkJfSBlbHNlIHsKKwkJCXMuYnVmW3MuY291bnRdID0gMDsKKwkJCXBy X2NvbnQoIiVzIiwgcy5idWYgKyBpKTsKKwkJfQorCX0KK30KKworI2VuZGlmCmRpZmYgLS1naXQg YS9kcml2ZXJzL2RtYS1idWYvc3luY19kZWJ1Zy5oIGIvZHJpdmVycy9kbWEtYnVmL3N5bmNfZGVi dWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjcxNjg1Ci0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL3N5bmNfZGVidWcuaApAQCAtMCwwICsxLDM1IEBA CisvKgorICogZHJpdmVycy9kbWEtYnVmL3N5bmNfZGVidWcuaAorICoKKyAqIENvcHlyaWdodCAo QykgMjAxMiBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLwor CisjaWZuZGVmIF9MSU5VWF9TWU5DX0RFQlVHX0gKKyNkZWZpbmUgX0xJTlVYX1NZTkNfREVCVUdf SAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zeW5jX3RpbWVs aW5lLmg+CisjaW5jbHVkZSA8bGludXgvc3luY19maWxlLmg+CisKKyNpZmRlZiBDT05GSUdfREVC VUdfRlMKK3ZvaWQgc3luY190aW1lbGluZV9kZWJ1Z19hZGQoc3RydWN0IHN5bmNfdGltZWxpbmUg Km9iaik7Cit2b2lkIHN5bmNfdGltZWxpbmVfZGVidWdfcmVtb3ZlKHN0cnVjdCBzeW5jX3RpbWVs aW5lICpvYmopOwordm9pZCBzeW5jX2ZpbGVfZGVidWdfYWRkKHN0cnVjdCBzeW5jX2ZpbGUgKnN5 bmNfZmlsZSk7Cit2b2lkIHN5bmNfZmlsZV9kZWJ1Z19yZW1vdmUoc3RydWN0IHN5bmNfZmlsZSAq c3luY19maWxlKTsKK3ZvaWQgc3luY19kdW1wKHZvaWQpOworCisjZWxzZQorI2RlZmluZSBzeW5j X3RpbWVsaW5lX2RlYnVnX2FkZChvYmopCisjZGVmaW5lIHN5bmNfdGltZWxpbmVfZGVidWdfcmVt b3ZlKG9iaikKKyNkZWZpbmUgc3luY19maWxlX2RlYnVnX2FkZChmZW5jZSkKKyNkZWZpbmUgc3lu Y19maWxlX2RlYnVnX3JlbW92ZShmZW5jZSkKKyNkZWZpbmUgc3luY19kdW1wKCkKKyNlbmRpZgor CisjZW5kaWYgLyogX0xJTlVYX1NZTkNfREVCVUdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9k bWEtYnVmL3N5bmNfdGltZWxpbmUuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9zeW5jX3RpbWVsaW5lLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM1NGIwYwotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9zeW5jX3RpbWVsaW5lLmMKQEAgLTAsMCArMSwyMjIgQEAK Ky8qCisgKiBkcml2ZXJzL2Jhc2Uvc3luYy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv b2dsZSwgSW5jLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUg Y29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2Zz Lmg+CisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+ CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgor I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5j bHVkZSA8bGludXgvYW5vbl9pbm9kZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zeW5jX3RpbWVsaW5l Lmg+CisKKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgPHRyYWNlL2V2ZW50 cy9zeW5jX3RpbWVsaW5lLmg+CisKKyNpbmNsdWRlICJzeW5jX2RlYnVnLmgiCisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZmVuY2Vfb3BzIHRpbWVsaW5lX2ZlbmNlX29wczsKKworc3RydWN0IHN5bmNf dGltZWxpbmUgKnN5bmNfdGltZWxpbmVfY3JlYXRlKGludCBzaXplLCBjb25zdCBjaGFyICpkcnZf bmFtZSwKKwkJCQkJICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3luY190aW1lbGlu ZSAqb2JqOworCisJaWYgKHNpemUgPCBzaXplb2Yoc3RydWN0IHN5bmNfdGltZWxpbmUpKQorCQly ZXR1cm4gTlVMTDsKKworCW9iaiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFv YmopCisJCXJldHVybiBOVUxMOworCisJa3JlZl9pbml0KCZvYmotPmtyZWYpOworCW9iai0+Y29u dGV4dCA9IGZlbmNlX2NvbnRleHRfYWxsb2MoMSk7CisJc3RybGNweShvYmotPm5hbWUsIG5hbWUs IHNpemVvZihvYmotPm5hbWUpKTsKKwlzdHJsY3B5KG9iai0+ZHJ2X25hbWUsIGRydl9uYW1lLCBz aXplb2Yob2JqLT5kcnZfbmFtZSkpOworCisJSU5JVF9MSVNUX0hFQUQoJm9iai0+Y2hpbGRfbGlz dF9oZWFkKTsKKwlJTklUX0xJU1RfSEVBRCgmb2JqLT5hY3RpdmVfbGlzdF9oZWFkKTsKKwlzcGlu X2xvY2tfaW5pdCgmb2JqLT5jaGlsZF9saXN0X2xvY2spOworCisJc3luY190aW1lbGluZV9kZWJ1 Z19hZGQob2JqKTsKKworCXJldHVybiBvYmo7Cit9CitFWFBPUlRfU1lNQk9MKHN5bmNfdGltZWxp bmVfY3JlYXRlKTsKKworc3RhdGljIHZvaWQgc3luY190aW1lbGluZV9mcmVlKHN0cnVjdCBrcmVm ICprcmVmKQoreworCXN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmogPQorCQljb250YWluZXJfb2Yo a3JlZiwgc3RydWN0IHN5bmNfdGltZWxpbmUsIGtyZWYpOworCisJc3luY190aW1lbGluZV9kZWJ1 Z19yZW1vdmUob2JqKTsKKworCWtmcmVlKG9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHN5bmNfdGlt ZWxpbmVfZ2V0KHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmopCit7CisJa3JlZl9nZXQoJm9iai0+ a3JlZik7Cit9CisKK3N0YXRpYyB2b2lkIHN5bmNfdGltZWxpbmVfcHV0KHN0cnVjdCBzeW5jX3Rp bWVsaW5lICpvYmopCit7CisJa3JlZl9wdXQoJm9iai0+a3JlZiwgc3luY190aW1lbGluZV9mcmVl KTsKK30KKwordm9pZCBzeW5jX3RpbWVsaW5lX2Rlc3Ryb3koc3RydWN0IHN5bmNfdGltZWxpbmUg Km9iaikKK3sKKwlvYmotPmRlc3Ryb3llZCA9IHRydWU7CisJLyoKKwkgKiBFbnN1cmUgdGltZWxp bmUgaXMgbWFya2VkIGFzIGRlc3Ryb3llZCBiZWZvcmUKKwkgKiBjaGFuZ2luZyB0aW1lbGluZSdz IGZlbmNlcyBzdGF0dXMuCisJICovCisJc21wX3dtYigpOworCisJc3luY190aW1lbGluZV9wdXQo b2JqKTsKK30KK0VYUE9SVF9TWU1CT0woc3luY190aW1lbGluZV9kZXN0cm95KTsKKwordm9pZCBz eW5jX3RpbWVsaW5lX3NpZ25hbChzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqLCB1bnNpZ25lZCBp bnQgaW5jKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGZlbmNlICpmZW5jZSwg Km5leHQ7CisKKwl0cmFjZV9zeW5jX3RpbWVsaW5lKG9iaik7CisKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmb2JqLT5jaGlsZF9saXN0X2xvY2ssIGZsYWdzKTsKKworCW9iai0+dmFsdWUgKz0gaW5jOwor CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZlbmNlLCBuZXh0LCAmb2JqLT5hY3RpdmVfbGlz dF9oZWFkLAorCQkJCSBhY3RpdmVfbGlzdCkgeworCQlpZiAoZmVuY2VfaXNfc2lnbmFsZWRfbG9j a2VkKGZlbmNlKSkKKwkJCWxpc3RfZGVsX2luaXQoJmZlbmNlLT5hY3RpdmVfbGlzdCk7CisJfQor CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2JqLT5jaGlsZF9saXN0X2xvY2ssIGZsYWdzKTsK K30KK0VYUE9SVF9TWU1CT0woc3luY190aW1lbGluZV9zaWduYWwpOworCitzdHJ1Y3QgZmVuY2Ug KnN5bmNfcHRfY3JlYXRlKHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmosIGludCBzaXplLAorCQkJ ICAgICB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1 Y3QgZmVuY2UgKmZlbmNlOworCisJaWYgKHNpemUgPCBzaXplb2YoKmZlbmNlKSkKKwkJcmV0dXJu IE5VTEw7CisKKwlmZW5jZSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmZW5j ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb2JqLT5jaGlsZF9saXN0 X2xvY2ssIGZsYWdzKTsKKwlzeW5jX3RpbWVsaW5lX2dldChvYmopOworCWZlbmNlX2luaXQoZmVu Y2UsICZ0aW1lbGluZV9mZW5jZV9vcHMsICZvYmotPmNoaWxkX2xpc3RfbG9jaywKKwkJICAgb2Jq LT5jb250ZXh0LCB2YWx1ZSk7CisJbGlzdF9hZGRfdGFpbCgmZmVuY2UtPmNoaWxkX2xpc3QsICZv YmotPmNoaWxkX2xpc3RfaGVhZCk7CisJSU5JVF9MSVNUX0hFQUQoJmZlbmNlLT5hY3RpdmVfbGlz dCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2JqLT5jaGlsZF9saXN0X2xvY2ssIGZsYWdz KTsKKwlyZXR1cm4gZmVuY2U7Cit9CitFWFBPUlRfU1lNQk9MKHN5bmNfcHRfY3JlYXRlKTsKKwor c3RhdGljIGNvbnN0IGNoYXIgKnRpbWVsaW5lX2ZlbmNlX2dldF9kcml2ZXJfbmFtZShzdHJ1Y3Qg ZmVuY2UgKmZlbmNlKQoreworCXN0cnVjdCBzeW5jX3RpbWVsaW5lICpwYXJlbnQgPSBmZW5jZV9w YXJlbnQoZmVuY2UpOworCisJcmV0dXJuIHBhcmVudC0+ZHJ2X25hbWU7Cit9CisKK3N0YXRpYyBj b25zdCBjaGFyICp0aW1lbGluZV9mZW5jZV9nZXRfdGltZWxpbmVfbmFtZShzdHJ1Y3QgZmVuY2Ug KmZlbmNlKQoreworCXN0cnVjdCBzeW5jX3RpbWVsaW5lICpwYXJlbnQgPSBmZW5jZV9wYXJlbnQo ZmVuY2UpOworCisJcmV0dXJuIHBhcmVudC0+bmFtZTsKK30KKworc3RhdGljIHZvaWQgdGltZWxp bmVfZmVuY2VfcmVsZWFzZShzdHJ1Y3QgZmVuY2UgKmZlbmNlKQoreworCXN0cnVjdCBzeW5jX3Rp bWVsaW5lICpwYXJlbnQgPSBmZW5jZV9wYXJlbnQoZmVuY2UpOworCXVuc2lnbmVkIGxvbmcgZmxh Z3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShmZW5jZS0+bG9jaywgZmxhZ3MpOworCWxpc3RfZGVs KCZmZW5jZS0+Y2hpbGRfbGlzdCk7CisJaWYgKFdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmZmVu Y2UtPmFjdGl2ZV9saXN0KSkpCisJCWxpc3RfZGVsKCZmZW5jZS0+YWN0aXZlX2xpc3QpOworCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoZmVuY2UtPmxvY2ssIGZsYWdzKTsKKworCXN5bmNfdGltZWxp bmVfcHV0KHBhcmVudCk7CisJZmVuY2VfZnJlZShmZW5jZSk7Cit9CisKK3N0YXRpYyBib29sIHRp bWVsaW5lX2ZlbmNlX3NpZ25hbGVkKHN0cnVjdCBmZW5jZSAqZmVuY2UpCit7CisJc3RydWN0IHN5 bmNfdGltZWxpbmUgKnBhcmVudCA9IGZlbmNlX3BhcmVudChmZW5jZSk7CisKKwlyZXR1cm4gKGZl bmNlLT5zZXFubyA+IHBhcmVudC0+dmFsdWUpID8gZmFsc2UgOiB0cnVlOworfQorCitzdGF0aWMg Ym9vbCB0aW1lbGluZV9mZW5jZV9lbmFibGVfc2lnbmFsaW5nKHN0cnVjdCBmZW5jZSAqZmVuY2Up Cit7CisJc3RydWN0IHN5bmNfdGltZWxpbmUgKnBhcmVudCA9IGZlbmNlX3BhcmVudChmZW5jZSk7 CisKKwlpZiAodGltZWxpbmVfZmVuY2Vfc2lnbmFsZWQoZmVuY2UpKQorCQlyZXR1cm4gZmFsc2U7 CisKKwlsaXN0X2FkZF90YWlsKCZmZW5jZS0+YWN0aXZlX2xpc3QsICZwYXJlbnQtPmFjdGl2ZV9s aXN0X2hlYWQpOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IHRpbWVsaW5lX2ZlbmNl X2ZpbGxfZHJpdmVyX2RhdGEoc3RydWN0IGZlbmNlICpmZW5jZSwKKwkJCQkJICB2b2lkICpkYXRh LCBpbnQgc2l6ZSkKK3sKKwlpZiAoc2l6ZSA8IHNpemVvZihmZW5jZS0+c2Vxbm8pKQorCQlyZXR1 cm4gLUVOT01FTTsKKworCW1lbWNweShkYXRhLCAmZmVuY2UtPnNlcW5vLCBzaXplb2YoZmVuY2Ut PnNlcW5vKSk7CisKKwlyZXR1cm4gc2l6ZW9mKGZlbmNlLT5zZXFubyk7Cit9CisKK3N0YXRpYyB2 b2lkIHRpbWVsaW5lX2ZlbmNlX3ZhbHVlX3N0cihzdHJ1Y3QgZmVuY2UgKmZlbmNlLAorCQkJCSAg ICBjaGFyICpzdHIsIGludCBzaXplKQoreworCXNucHJpbnRmKHN0ciwgc2l6ZSwgIiVkIiwgZmVu Y2UtPnNlcW5vKTsKK30KKworc3RhdGljIHZvaWQgdGltZWxpbmVfZmVuY2VfdGltZWxpbmVfdmFs dWVfc3RyKHN0cnVjdCBmZW5jZSAqZmVuY2UsCisJCQkJCSAgICAgY2hhciAqc3RyLCBpbnQgc2l6 ZSkKK3sKKwlzdHJ1Y3Qgc3luY190aW1lbGluZSAqcGFyZW50ID0gZmVuY2VfcGFyZW50KGZlbmNl KTsKKworCXNucHJpbnRmKHN0ciwgc2l6ZSwgIiVkIiwgcGFyZW50LT52YWx1ZSk7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZmVuY2Vfb3BzIHRpbWVsaW5lX2ZlbmNlX29wcyA9IHsKKwkuZ2V0 X2RyaXZlcl9uYW1lID0gdGltZWxpbmVfZmVuY2VfZ2V0X2RyaXZlcl9uYW1lLAorCS5nZXRfdGlt ZWxpbmVfbmFtZSA9IHRpbWVsaW5lX2ZlbmNlX2dldF90aW1lbGluZV9uYW1lLAorCS5lbmFibGVf c2lnbmFsaW5nID0gdGltZWxpbmVfZmVuY2VfZW5hYmxlX3NpZ25hbGluZywKKwkuc2lnbmFsZWQg PSB0aW1lbGluZV9mZW5jZV9zaWduYWxlZCwKKwkud2FpdCA9IGZlbmNlX2RlZmF1bHRfd2FpdCwK KwkucmVsZWFzZSA9IHRpbWVsaW5lX2ZlbmNlX3JlbGVhc2UsCisJLmZpbGxfZHJpdmVyX2RhdGEg PSB0aW1lbGluZV9mZW5jZV9maWxsX2RyaXZlcl9kYXRhLAorCS5mZW5jZV92YWx1ZV9zdHIgPSB0 aW1lbGluZV9mZW5jZV92YWx1ZV9zdHIsCisJLnRpbWVsaW5lX3ZhbHVlX3N0ciA9IHRpbWVsaW5l X2ZlbmNlX3RpbWVsaW5lX3ZhbHVlX3N0ciwKK307CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3Rh Z2luZy9hbmRyb2lkL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9LY29uZmlnCmlu ZGV4IDI3NTY5ODguLjRiMThmZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lk L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZwpAQCAtMzgsMjYg KzM4LDYgQEAgY29uZmlnIEFORFJPSURfTE9XX01FTU9SWV9LSUxMRVIKIAkgIHNjcmlwdHMgKC9p bml0LnJjKSwgYW5kIGl0IGRlZmluZXMgcHJpb3JpdHkgdmFsdWVzIHdpdGggbWluaW11bSBmcmVl IG1lbW9yeSBzaXplCiAJICBmb3IgZWFjaCBwcmlvcml0eS4KIAotY29uZmlnIFNZTkMKLQlib29s ICJTeW5jaHJvbml6YXRpb24gZnJhbWV3b3JrIgotCWRlZmF1bHQgbgotCXNlbGVjdCBBTk9OX0lO T0RFUwotCXNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0 aW9uIGVuYWJsZXMgdGhlIGZyYW1ld29yayBmb3Igc3luY2hyb25pemF0aW9uIGJldHdlZW4gbXVs dGlwbGUKLQkgIGRyaXZlcnMuICBTeW5jIGltcGxlbWVudGF0aW9ucyBjYW4gdGFrZSBhZHZhbnRh Z2Ugb2YgaGFyZHdhcmUKLQkgIHN5bmNocm9uaXphdGlvbiBidWlsdCBpbnRvIGRldmljZXMgbGlr ZSBHUFVzLgotCi1jb25maWcgU1dfU1lOQwotCWJvb2wgIlNvZnR3YXJlIHN5bmNocm9uaXphdGlv biBvYmplY3RzIgotCWRlZmF1bHQgbgotCWRlcGVuZHMgb24gU1lOQwotCWRlcGVuZHMgb24gU1lO Q19GSUxFCi0JLS0taGVscC0tLQotCSAgQSBzeW5jIG9iamVjdCBkcml2ZXIgdGhhdCB1c2VzIGEg MzJiaXQgY291bnRlciB0byBjb29yZGluYXRlCi0JICBzeW5jaHJvbml6YXRpb24uICBVc2VmdWwg d2hlbiB0aGVyZSBpcyBubyBoYXJkd2FyZSBwcmltaXRpdmUgYmFja2luZwotCSAgdGhlIHN5bmNo cm9uaXphdGlvbi4KLQogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vS2NvbmZp ZyIKIAogZW5kaWYgIyBpZiBBTkRST0lECmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5k cm9pZC9zeW5jLmMgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jLmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGVhODE2ZGQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5n L2FuZHJvaWQvc3luYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLS8qCi0gKiBk cml2ZXJzL2Jhc2Uvc3luYy5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5j LgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCi0gKiBtYXkgYmUgY29waWVkLCBk aXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgotICoKLSAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5j bHVkZSA8bGludXgvZXhwb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVk ZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGlu dXgvYW5vbl9pbm9kZXMuaD4KLQotI2luY2x1ZGUgInN5bmMuaCIKLQotI2RlZmluZSBDUkVBVEVf VFJBQ0VfUE9JTlRTCi0jaW5jbHVkZSAidHJhY2Uvc3luYy5oIgotCi1zdGF0aWMgY29uc3Qgc3Ry dWN0IGZlbmNlX29wcyB0aW1lbGluZV9mZW5jZV9vcHM7Ci0KLXN0cnVjdCBzeW5jX3RpbWVsaW5l ICpzeW5jX3RpbWVsaW5lX2NyZWF0ZShpbnQgc2l6ZSwgY29uc3QgY2hhciAqZHJ2X25hbWUsCi0J CQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IHN5bmNfdGltZWxpbmUgKm9iajsK LQotCWlmIChzaXplIDwgc2l6ZW9mKHN0cnVjdCBzeW5jX3RpbWVsaW5lKSkKLQkJcmV0dXJuIE5V TEw7Ci0KLQlvYmogPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghb2JqKQotCQly ZXR1cm4gTlVMTDsKLQotCWtyZWZfaW5pdCgmb2JqLT5rcmVmKTsKLQlvYmotPmNvbnRleHQgPSBm ZW5jZV9jb250ZXh0X2FsbG9jKDEpOwotCXN0cmxjcHkob2JqLT5uYW1lLCBuYW1lLCBzaXplb2Yo b2JqLT5uYW1lKSk7Ci0Jc3RybGNweShvYmotPmRydl9uYW1lLCBkcnZfbmFtZSwgc2l6ZW9mKG9i ai0+ZHJ2X25hbWUpKTsKLQotCUlOSVRfTElTVF9IRUFEKCZvYmotPmNoaWxkX2xpc3RfaGVhZCk7 Ci0JSU5JVF9MSVNUX0hFQUQoJm9iai0+YWN0aXZlX2xpc3RfaGVhZCk7Ci0Jc3Bpbl9sb2NrX2lu aXQoJm9iai0+Y2hpbGRfbGlzdF9sb2NrKTsKLQotCXN5bmNfdGltZWxpbmVfZGVidWdfYWRkKG9i aik7Ci0KLQlyZXR1cm4gb2JqOwotfQotRVhQT1JUX1NZTUJPTChzeW5jX3RpbWVsaW5lX2NyZWF0 ZSk7Ci0KLXN0YXRpYyB2b2lkIHN5bmNfdGltZWxpbmVfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikK LXsKLQlzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqID0KLQkJY29udGFpbmVyX29mKGtyZWYsIHN0 cnVjdCBzeW5jX3RpbWVsaW5lLCBrcmVmKTsKLQotCXN5bmNfdGltZWxpbmVfZGVidWdfcmVtb3Zl KG9iaik7Ci0KLQlrZnJlZShvYmopOwotfQotCi1zdGF0aWMgdm9pZCBzeW5jX3RpbWVsaW5lX2dl dChzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqKQotewotCWtyZWZfZ2V0KCZvYmotPmtyZWYpOwot fQotCi1zdGF0aWMgdm9pZCBzeW5jX3RpbWVsaW5lX3B1dChzdHJ1Y3Qgc3luY190aW1lbGluZSAq b2JqKQotewotCWtyZWZfcHV0KCZvYmotPmtyZWYsIHN5bmNfdGltZWxpbmVfZnJlZSk7Ci19Ci0K LXZvaWQgc3luY190aW1lbGluZV9kZXN0cm95KHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmopCi17 Ci0Jb2JqLT5kZXN0cm95ZWQgPSB0cnVlOwotCS8qCi0JICogRW5zdXJlIHRpbWVsaW5lIGlzIG1h cmtlZCBhcyBkZXN0cm95ZWQgYmVmb3JlCi0JICogY2hhbmdpbmcgdGltZWxpbmUncyBmZW5jZXMg c3RhdHVzLgotCSAqLwotCXNtcF93bWIoKTsKLQotCXN5bmNfdGltZWxpbmVfcHV0KG9iaik7Ci19 Ci1FWFBPUlRfU1lNQk9MKHN5bmNfdGltZWxpbmVfZGVzdHJveSk7Ci0KLXZvaWQgc3luY190aW1l bGluZV9zaWduYWwoc3RydWN0IHN5bmNfdGltZWxpbmUgKm9iaiwgdW5zaWduZWQgaW50IGluYykK LXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBmZW5jZSAqZmVuY2UsICpuZXh0Owot Ci0JdHJhY2Vfc3luY190aW1lbGluZShvYmopOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm9iai0+ Y2hpbGRfbGlzdF9sb2NrLCBmbGFncyk7Ci0KLQlvYmotPnZhbHVlICs9IGluYzsKLQotCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShmZW5jZSwgbmV4dCwgJm9iai0+YWN0aXZlX2xpc3RfaGVhZCwK LQkJCQkgYWN0aXZlX2xpc3QpIHsKLQkJaWYgKGZlbmNlX2lzX3NpZ25hbGVkX2xvY2tlZChmZW5j ZSkpCi0JCQlsaXN0X2RlbF9pbml0KCZmZW5jZS0+YWN0aXZlX2xpc3QpOwotCX0KLQotCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJm9iai0+Y2hpbGRfbGlzdF9sb2NrLCBmbGFncyk7Ci19Ci1FWFBP UlRfU1lNQk9MKHN5bmNfdGltZWxpbmVfc2lnbmFsKTsKLQotc3RydWN0IGZlbmNlICpzeW5jX3B0 X2NyZWF0ZShzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqLCBpbnQgc2l6ZSwKLQkJCSAgICAgdW5z aWduZWQgaW50IHZhbHVlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGZlbmNl ICpmZW5jZTsKLQotCWlmIChzaXplIDwgc2l6ZW9mKCpmZW5jZSkpCi0JCXJldHVybiBOVUxMOwot Ci0JZmVuY2UgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghZmVuY2UpCi0JCXJl dHVybiBOVUxMOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm9iai0+Y2hpbGRfbGlzdF9sb2NrLCBm bGFncyk7Ci0Jc3luY190aW1lbGluZV9nZXQob2JqKTsKLQlmZW5jZV9pbml0KGZlbmNlLCAmdGlt ZWxpbmVfZmVuY2Vfb3BzLCAmb2JqLT5jaGlsZF9saXN0X2xvY2ssCi0JCSAgIG9iai0+Y29udGV4 dCwgdmFsdWUpOwotCWxpc3RfYWRkX3RhaWwoJmZlbmNlLT5jaGlsZF9saXN0LCAmb2JqLT5jaGls ZF9saXN0X2hlYWQpOwotCUlOSVRfTElTVF9IRUFEKCZmZW5jZS0+YWN0aXZlX2xpc3QpOwotCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJm9iai0+Y2hpbGRfbGlzdF9sb2NrLCBmbGFncyk7Ci0JcmV0 dXJuIGZlbmNlOwotfQotRVhQT1JUX1NZTUJPTChzeW5jX3B0X2NyZWF0ZSk7Ci0KLXN0YXRpYyBj b25zdCBjaGFyICp0aW1lbGluZV9mZW5jZV9nZXRfZHJpdmVyX25hbWUoc3RydWN0IGZlbmNlICpm ZW5jZSkKLXsKLQlzdHJ1Y3Qgc3luY190aW1lbGluZSAqcGFyZW50ID0gZmVuY2VfcGFyZW50KGZl bmNlKTsKLQotCXJldHVybiBwYXJlbnQtPmRydl9uYW1lOwotfQotCi1zdGF0aWMgY29uc3QgY2hh ciAqdGltZWxpbmVfZmVuY2VfZ2V0X3RpbWVsaW5lX25hbWUoc3RydWN0IGZlbmNlICpmZW5jZSkK LXsKLQlzdHJ1Y3Qgc3luY190aW1lbGluZSAqcGFyZW50ID0gZmVuY2VfcGFyZW50KGZlbmNlKTsK LQotCXJldHVybiBwYXJlbnQtPm5hbWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHRpbWVsaW5lX2ZlbmNl X3JlbGVhc2Uoc3RydWN0IGZlbmNlICpmZW5jZSkKLXsKLQlzdHJ1Y3Qgc3luY190aW1lbGluZSAq cGFyZW50ID0gZmVuY2VfcGFyZW50KGZlbmNlKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0J c3Bpbl9sb2NrX2lycXNhdmUoZmVuY2UtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2RlbCgmZmVuY2Ut PmNoaWxkX2xpc3QpOwotCWlmIChXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoJmZlbmNlLT5hY3Rp dmVfbGlzdCkpKQotCQlsaXN0X2RlbCgmZmVuY2UtPmFjdGl2ZV9saXN0KTsKLQlzcGluX3VubG9j a19pcnFyZXN0b3JlKGZlbmNlLT5sb2NrLCBmbGFncyk7Ci0KLQlzeW5jX3RpbWVsaW5lX3B1dChw YXJlbnQpOwotCWZlbmNlX2ZyZWUoZmVuY2UpOwotfQotCi1zdGF0aWMgYm9vbCB0aW1lbGluZV9m ZW5jZV9zaWduYWxlZChzdHJ1Y3QgZmVuY2UgKmZlbmNlKQotewotCXN0cnVjdCBzeW5jX3RpbWVs aW5lICpwYXJlbnQgPSBmZW5jZV9wYXJlbnQoZmVuY2UpOwotCi0JcmV0dXJuIChmZW5jZS0+c2Vx bm8gPiBwYXJlbnQtPnZhbHVlKSA/IGZhbHNlIDogdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgdGlt ZWxpbmVfZmVuY2VfZW5hYmxlX3NpZ25hbGluZyhzdHJ1Y3QgZmVuY2UgKmZlbmNlKQotewotCXN0 cnVjdCBzeW5jX3RpbWVsaW5lICpwYXJlbnQgPSBmZW5jZV9wYXJlbnQoZmVuY2UpOwotCi0JaWYg KHRpbWVsaW5lX2ZlbmNlX3NpZ25hbGVkKGZlbmNlKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JbGlz dF9hZGRfdGFpbCgmZmVuY2UtPmFjdGl2ZV9saXN0LCAmcGFyZW50LT5hY3RpdmVfbGlzdF9oZWFk KTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGludCB0aW1lbGluZV9mZW5jZV9maWxsX2Ry aXZlcl9kYXRhKHN0cnVjdCBmZW5jZSAqZmVuY2UsCi0JCQkJCSAgdm9pZCAqZGF0YSwgaW50IHNp emUpCi17Ci0JaWYgKHNpemUgPCBzaXplb2YoZmVuY2UtPnNlcW5vKSkKLQkJcmV0dXJuIC1FTk9N RU07Ci0KLQltZW1jcHkoZGF0YSwgJmZlbmNlLT5zZXFubywgc2l6ZW9mKGZlbmNlLT5zZXFubykp OwotCi0JcmV0dXJuIHNpemVvZihmZW5jZS0+c2Vxbm8pOwotfQotCi1zdGF0aWMgdm9pZCB0aW1l bGluZV9mZW5jZV92YWx1ZV9zdHIoc3RydWN0IGZlbmNlICpmZW5jZSwKLQkJCQkgICAgY2hhciAq c3RyLCBpbnQgc2l6ZSkKLXsKLQlzbnByaW50ZihzdHIsIHNpemUsICIlZCIsIGZlbmNlLT5zZXFu byk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRpbWVsaW5lX2ZlbmNlX3RpbWVsaW5lX3ZhbHVlX3N0cihz dHJ1Y3QgZmVuY2UgKmZlbmNlLAotCQkJCQkgICAgIGNoYXIgKnN0ciwgaW50IHNpemUpCi17Ci0J c3RydWN0IHN5bmNfdGltZWxpbmUgKnBhcmVudCA9IGZlbmNlX3BhcmVudChmZW5jZSk7Ci0KLQlz bnByaW50ZihzdHIsIHNpemUsICIlZCIsIHBhcmVudC0+dmFsdWUpOwotfQotCi1zdGF0aWMgY29u c3Qgc3RydWN0IGZlbmNlX29wcyB0aW1lbGluZV9mZW5jZV9vcHMgPSB7Ci0JLmdldF9kcml2ZXJf bmFtZSA9IHRpbWVsaW5lX2ZlbmNlX2dldF9kcml2ZXJfbmFtZSwKLQkuZ2V0X3RpbWVsaW5lX25h bWUgPSB0aW1lbGluZV9mZW5jZV9nZXRfdGltZWxpbmVfbmFtZSwKLQkuZW5hYmxlX3NpZ25hbGlu ZyA9IHRpbWVsaW5lX2ZlbmNlX2VuYWJsZV9zaWduYWxpbmcsCi0JLnNpZ25hbGVkID0gdGltZWxp bmVfZmVuY2Vfc2lnbmFsZWQsCi0JLndhaXQgPSBmZW5jZV9kZWZhdWx0X3dhaXQsCi0JLnJlbGVh c2UgPSB0aW1lbGluZV9mZW5jZV9yZWxlYXNlLAotCS5maWxsX2RyaXZlcl9kYXRhID0gdGltZWxp bmVfZmVuY2VfZmlsbF9kcml2ZXJfZGF0YSwKLQkuZmVuY2VfdmFsdWVfc3RyID0gdGltZWxpbmVf ZmVuY2VfdmFsdWVfc3RyLAotCS50aW1lbGluZV92YWx1ZV9zdHIgPSB0aW1lbGluZV9mZW5jZV90 aW1lbGluZV92YWx1ZV9zdHIsCi19OwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5k cm9pZC9zeW5jLmggYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jLmgKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGJlOTRhODAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5n L2FuZHJvaWQvc3luYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qCi0gKiBp bmNsdWRlL2xpbnV4L3N5bmMuaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUsIElu Yy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jaWZuZGVmIF9MSU5VWF9T WU5DX0gKLSNkZWZpbmUgX0xJTlVYX1NZTkNfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4K LSNpbmNsdWRlIDxsaW51eC9rcmVmLmg+Ci0jaW5jbHVkZSA8bGludXgva3RpbWUuaD4KLSNpbmNs dWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRl IDxsaW51eC9mZW5jZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5bmNfZmlsZS5oPgotI2luY2x1ZGUg PHVhcGkvbGludXgvc3luYy5oPgotCi0vKioKLSAqIHN0cnVjdCBzeW5jX3RpbWVsaW5lIC0gc3lu YyBvYmplY3QKLSAqIEBrcmVmOgkJcmVmZXJlbmNlIGNvdW50IG9uIGZlbmNlLgotICogQGRydl9u YW1lOgkJZHJ2X25hbWUgb2YgdGhlIGRyaXZlciB1c2luZyB0aGUgc3luY190aW1lbGluZQotICog QG5hbWU6CQluYW1lIG9mIHRoZSBzeW5jX3RpbWVsaW5lLiBVc2VmdWwgZm9yIGRlYnVnZ2luZwot ICogQGRlc3Ryb3llZDoJCXNldCB3aGVuIHN5bmNfdGltZWxpbmUgaXMgZGVzdHJveWVkCi0gKiBA Y2hpbGRfbGlzdF9oZWFkOglsaXN0IG9mIGNoaWxkcmVuIHN5bmNfcHRzIGZvciB0aGlzIHN5bmNf dGltZWxpbmUKLSAqIEBjaGlsZF9saXN0X2xvY2s6CWxvY2sgcHJvdGVjdGluZyBAY2hpbGRfbGlz dF9oZWFkLCBkZXN0cm95ZWQsIGFuZAotICoJCQlmZW5jZS5zdGF0dXMKLSAqIEBhY3RpdmVfbGlz dF9oZWFkOglsaXN0IG9mIGFjdGl2ZSAodW5zaWduYWxlZC9lcnJvcmVkKSBzeW5jX3B0cwotICog QHN5bmNfdGltZWxpbmVfbGlzdDoJbWVtYmVyc2hpcCBpbiBnbG9iYWwgc3luY190aW1lbGluZV9s aXN0Ci0gKi8KLXN0cnVjdCBzeW5jX3RpbWVsaW5lIHsKLQlzdHJ1Y3Qga3JlZgkJa3JlZjsKLQlj aGFyCQkJZHJ2X25hbWVbMzJdOwotCWNoYXIJCQluYW1lWzMyXTsKLQotCS8qIHByb3RlY3RlZCBi eSBjaGlsZF9saXN0X2xvY2sgKi8KLQlib29sCQkJZGVzdHJveWVkOwotCWludAkJCWNvbnRleHQs IHZhbHVlOwotCi0Jc3RydWN0IGxpc3RfaGVhZAljaGlsZF9saXN0X2hlYWQ7Ci0Jc3BpbmxvY2tf dAkJY2hpbGRfbGlzdF9sb2NrOwotCi0Jc3RydWN0IGxpc3RfaGVhZAlhY3RpdmVfbGlzdF9oZWFk OwotCi0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTCi0Jc3RydWN0IGxpc3RfaGVhZAlzeW5jX3RpbWVs aW5lX2xpc3Q7Ci0jZW5kaWYKLX07Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHN5bmNfdGltZWxp bmUgKmZlbmNlX3BhcmVudChzdHJ1Y3QgZmVuY2UgKmZlbmNlKQotewotCXJldHVybiBjb250YWlu ZXJfb2YoZmVuY2UtPmxvY2ssIHN0cnVjdCBzeW5jX3RpbWVsaW5lLAotCQkJICAgIGNoaWxkX2xp c3RfbG9jayk7Ci19Ci0KLS8qCi0gKiBBUEkgZm9yIHN5bmNfdGltZWxpbmUgaW1wbGVtZW50ZXJz Ci0gKi8KLQotLyoqCi0gKiBzeW5jX3RpbWVsaW5lX2NyZWF0ZSgpIC0gY3JlYXRlcyBhIHN5bmMg b2JqZWN0Ci0gKiBAc2l6ZToJc2l6ZSB0byBhbGxvY2F0ZSBmb3IgdGhpcyBvYmoKLSAqIEBkcnZf bmFtZToJc3luY190aW1lbGluZSBkcml2ZXIgbmFtZQotICogQG5hbWU6CXN5bmNfdGltZWxpbmUg bmFtZQotICoKLSAqIENyZWF0ZXMgYSBuZXcgc3luY190aW1lbGluZS4gQHNpemUgYnl0ZXMgd2ls bCBiZSBhbGxvY2F0ZWQgYWxsb3dpbmcKLSAqIGZvciBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBk YXRhIHRvIGJlIGtlcHQgYWZ0ZXIgdGhlIGdlbmVyaWMKLSAqIHN5bmNfdGltZWxpbmUgc3RydWN0 LiBSZXR1cm5zIHRoZSBzeW5jX3RpbWVsaW5lIG9iamVjdCBvciBOVUxMIGluCi0gKiBjYXNlIG9m IGVycm9yLgotICovCi1zdHJ1Y3Qgc3luY190aW1lbGluZSAqc3luY190aW1lbGluZV9jcmVhdGUo aW50IHNpemUsIGNvbnN0IGNoYXIgKmRydl9uYW1lLAotCQkJCQkgICBjb25zdCBjaGFyICpuYW1l KTsKLQotLyoqCi0gKiBzeW5jX3RpbWVsaW5lX2Rlc3Ryb3koKSAtIGRlc3Ryb3lzIGEgc3luYyBv YmplY3QKLSAqIEBvYmo6CXN5bmNfdGltZWxpbmUgdG8gZGVzdHJveQotICoKLSAqIEEgc3luYyBp bXBsZW1lbnRhdGlvbiBzaG91bGQgY2FsbCB0aGlzIHdoZW4gdGhlIEBvYmogaXMgZ29pbmcgYXdh eQotICogKGkuZS4gbW9kdWxlIHVubG9hZC4pICBAb2JqIHdvbid0IGFjdHVhbGx5IGJlIGZyZWVk IHVudGlsIGFsbCBpdHMgY2hpbGRyZW4KLSAqIGZlbmNlcyBhcmUgZnJlZWQuCi0gKi8KLXZvaWQg c3luY190aW1lbGluZV9kZXN0cm95KHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmopOwotCi0vKioK LSAqIHN5bmNfdGltZWxpbmVfc2lnbmFsKCkgLSBzaWduYWwgYSBzdGF0dXMgY2hhbmdlIG9uIGEg c3luY190aW1lbGluZQotICogQG9iajoJc3luY190aW1lbGluZSB0byBzaWduYWwKLSAqIEBpbmM6 CW51bSB0byBpbmNyZW1lbnQgb24gdGltZWxpbmUtPnZhbHVlCi0gKgotICogQSBzeW5jIGltcGxl bWVudGF0aW9uIHNob3VsZCBjYWxsIHRoaXMgYW55IHRpbWUgb25lIG9mIGl0J3MgZmVuY2VzCi0g KiBoYXMgc2lnbmFsZWQgb3IgaGFzIGFuIGVycm9yIGNvbmRpdGlvbi4KLSAqLwotdm9pZCBzeW5j X3RpbWVsaW5lX3NpZ25hbChzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqLCB1bnNpZ25lZCBpbnQg aW5jKTsKLQotLyoqCi0gKiBzeW5jX3B0X2NyZWF0ZSgpIC0gY3JlYXRlcyBhIHN5bmMgcHQKLSAq IEBwYXJlbnQ6CWZlbmNlJ3MgcGFyZW50IHN5bmNfdGltZWxpbmUKLSAqIEBzaXplOglzaXplIHRv IGFsbG9jYXRlIGZvciB0aGlzIHB0Ci0gKiBAaW5jOgl2YWx1ZSBvZiB0aGUgZmVuY2UKLSAqCi0g KiBDcmVhdGVzIGEgbmV3IGZlbmNlIGFzIGEgY2hpbGQgb2YgQHBhcmVudC4gIEBzaXplIGJ5dGVz IHdpbGwgYmUKLSAqIGFsbG9jYXRlZCBhbGxvd2luZyBmb3IgaW1wbGVtZW50YXRpb24gc3BlY2lm aWMgZGF0YSB0byBiZSBrZXB0IGFmdGVyCi0gKiB0aGUgZ2VuZXJpYyBzeW5jX3RpbWVsaW5lIHN0 cnVjdC4gUmV0dXJucyB0aGUgZmVuY2Ugb2JqZWN0IG9yCi0gKiBOVUxMIGluIGNhc2Ugb2YgZXJy b3IuCi0gKi8KLXN0cnVjdCBmZW5jZSAqc3luY19wdF9jcmVhdGUoc3RydWN0IHN5bmNfdGltZWxp bmUgKnBhcmVudCwgaW50IHNpemUsCi0JCQkgICAgIHVuc2lnbmVkIGludCBpbmMpOwotCi0jaWZk ZWYgQ09ORklHX0RFQlVHX0ZTCi0KLXZvaWQgc3luY190aW1lbGluZV9kZWJ1Z19hZGQoc3RydWN0 IHN5bmNfdGltZWxpbmUgKm9iaik7Ci12b2lkIHN5bmNfdGltZWxpbmVfZGVidWdfcmVtb3ZlKHN0 cnVjdCBzeW5jX3RpbWVsaW5lICpvYmopOwotdm9pZCBzeW5jX2ZpbGVfZGVidWdfYWRkKHN0cnVj dCBzeW5jX2ZpbGUgKmZlbmNlKTsKLXZvaWQgc3luY19maWxlX2RlYnVnX3JlbW92ZShzdHJ1Y3Qg c3luY19maWxlICpmZW5jZSk7Ci12b2lkIHN5bmNfZHVtcCh2b2lkKTsKLQotI2Vsc2UKLSMgZGVm aW5lIHN5bmNfdGltZWxpbmVfZGVidWdfYWRkKG9iaikKLSMgZGVmaW5lIHN5bmNfdGltZWxpbmVf ZGVidWdfcmVtb3ZlKG9iaikKLSMgZGVmaW5lIHN5bmNfZmlsZV9kZWJ1Z19hZGQoZmVuY2UpCi0j IGRlZmluZSBzeW5jX2ZpbGVfZGVidWdfcmVtb3ZlKGZlbmNlKQotIyBkZWZpbmUgc3luY19kdW1w KCkKLSNlbmRpZgotCi0jZW5kaWYgLyogX0xJTlVYX1NZTkNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9zdGFnaW5nL2FuZHJvaWQvc3luY19kZWJ1Zy5jIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJv aWQvc3luY19kZWJ1Zy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzEyZTZmLi4w MDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmNfZGVidWcuYworKysgL2Rl di9udWxsCkBAIC0xLDM3MyArMCwwIEBACi0vKgotICogZHJpdmVycy9iYXNlL3N5bmMuYwotICoK LSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUsIEluYy4KLSAqCi0gKiBUaGlzIHNvZnR3YXJl IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0g KiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIGFuZAotICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmll ZCB1bmRlciB0aG9zZSB0ZXJtcy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0g KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwot Ci0jaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgot I2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLSNpbmNs dWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxp bnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3Nl cV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nl c3MuaD4KLSNpbmNsdWRlIDxsaW51eC9hbm9uX2lub2Rlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3Rp bWU2NC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5bmNfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2NvbmZpZy5oPgotCi0jaW5jbHVkZSAidWFwaS9zd19z eW5jLmgiCi0jaW5jbHVkZSAic3luYy5oIgotCi0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTCi0KLXN0 YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkYmdmczsKLQotc3RhdGljIExJU1RfSEVBRChzeW5jX3RpbWVs aW5lX2xpc3RfaGVhZCk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN5bmNfdGltZWxpbmVfbGlz dF9sb2NrKTsKLXN0YXRpYyBMSVNUX0hFQUQoc3luY19maWxlX2xpc3RfaGVhZCk7Ci1zdGF0aWMg REVGSU5FX1NQSU5MT0NLKHN5bmNfZmlsZV9saXN0X2xvY2spOwotCi12b2lkIHN5bmNfdGltZWxp bmVfZGVidWdfYWRkKHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmopCi17Ci0JdW5zaWduZWQgbG9u ZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzeW5jX3RpbWVsaW5lX2xpc3RfbG9jaywg ZmxhZ3MpOwotCWxpc3RfYWRkX3RhaWwoJm9iai0+c3luY190aW1lbGluZV9saXN0LCAmc3luY190 aW1lbGluZV9saXN0X2hlYWQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN5bmNfdGltZWxp bmVfbGlzdF9sb2NrLCBmbGFncyk7Ci19Ci0KLXZvaWQgc3luY190aW1lbGluZV9kZWJ1Z19yZW1v dmUoc3RydWN0IHN5bmNfdGltZWxpbmUgKm9iaikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwot Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnN5bmNfdGltZWxpbmVfbGlzdF9sb2NrLCBmbGFncyk7Ci0J bGlzdF9kZWwoJm9iai0+c3luY190aW1lbGluZV9saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZzeW5jX3RpbWVsaW5lX2xpc3RfbG9jaywgZmxhZ3MpOwotfQotCi12b2lkIHN5bmNfZmls ZV9kZWJ1Z19hZGQoc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlKQotewotCXVuc2lnbmVkIGxv bmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc3luY19maWxlX2xpc3RfbG9jaywgZmxh Z3MpOwotCWxpc3RfYWRkX3RhaWwoJnN5bmNfZmlsZS0+c3luY19maWxlX2xpc3QsICZzeW5jX2Zp bGVfbGlzdF9oZWFkKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeW5jX2ZpbGVfbGlzdF9s b2NrLCBmbGFncyk7Ci19Ci0KLXZvaWQgc3luY19maWxlX2RlYnVnX3JlbW92ZShzdHJ1Y3Qgc3lu Y19maWxlICpzeW5jX2ZpbGUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9j a19pcnFzYXZlKCZzeW5jX2ZpbGVfbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9kZWwoJnN5bmNf ZmlsZS0+c3luY19maWxlX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN5bmNfZmls ZV9saXN0X2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKnN5bmNfc3RhdHVz X3N0cihpbnQgc3RhdHVzKQotewotCWlmIChzdGF0dXMgPT0gMCkKLQkJcmV0dXJuICJzaWduYWxl ZCI7Ci0KLQlpZiAoc3RhdHVzID4gMCkKLQkJcmV0dXJuICJhY3RpdmUiOwotCi0JcmV0dXJuICJl cnJvciI7Ci19Ci0KLXN0YXRpYyB2b2lkIHN5bmNfcHJpbnRfZmVuY2Uoc3RydWN0IHNlcV9maWxl ICpzLCBzdHJ1Y3QgZmVuY2UgKmZlbmNlLCBib29sIHNob3cpCi17Ci0JaW50IHN0YXR1cyA9IDE7 Ci0Jc3RydWN0IHN5bmNfdGltZWxpbmUgKnBhcmVudCA9IGZlbmNlX3BhcmVudChmZW5jZSk7Ci0K LQlpZiAoZmVuY2VfaXNfc2lnbmFsZWRfbG9ja2VkKGZlbmNlKSkKLQkJc3RhdHVzID0gZmVuY2Ut PnN0YXR1czsKLQotCXNlcV9wcmludGYocywgIiAgJXMlc2ZlbmNlICVzIiwKLQkJICAgc2hvdyA/ IHBhcmVudC0+bmFtZSA6ICIiLAotCQkgICBzaG93ID8gIl8iIDogIiIsCi0JCSAgIHN5bmNfc3Rh dHVzX3N0cihzdGF0dXMpKTsKLQotCWlmIChzdGF0dXMgPD0gMCkgewotCQlzdHJ1Y3QgdGltZXNw ZWM2NCB0czY0ID0KLQkJCWt0aW1lX3RvX3RpbWVzcGVjNjQoZmVuY2UtPnRpbWVzdGFtcCk7Ci0K LQkJc2VxX3ByaW50ZihzLCAiQCVsbGQuJTA5bGQiLCAoczY0KXRzNjQudHZfc2VjLCB0czY0LnR2 X25zZWMpOwotCX0KLQotCWlmICgoIWZlbmNlIHx8IGZlbmNlLT5vcHMtPnRpbWVsaW5lX3ZhbHVl X3N0cikgJiYKLQkJZmVuY2UtPm9wcy0+ZmVuY2VfdmFsdWVfc3RyKSB7Ci0JCWNoYXIgdmFsdWVb NjRdOwotCQlib29sIHN1Y2Nlc3M7Ci0KLQkJZmVuY2UtPm9wcy0+ZmVuY2VfdmFsdWVfc3RyKGZl bmNlLCB2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7Ci0JCXN1Y2Nlc3MgPSBzdHJsZW4odmFsdWUpOwot Ci0JCWlmIChzdWNjZXNzKQotCQkJc2VxX3ByaW50ZihzLCAiOiAlcyIsIHZhbHVlKTsKLQotCQlp ZiAoc3VjY2VzcyAmJiBmZW5jZSkgewotCQkJZmVuY2UtPm9wcy0+dGltZWxpbmVfdmFsdWVfc3Ry KGZlbmNlLCB2YWx1ZSwKLQkJCQkJCSAgICAgICBzaXplb2YodmFsdWUpKTsKLQotCQkJaWYgKHN0 cmxlbih2YWx1ZSkpCi0JCQkJc2VxX3ByaW50ZihzLCAiIC8gJXMiLCB2YWx1ZSk7Ci0JCX0KLQl9 Ci0KLQlzZXFfcHV0cyhzLCAiXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgc3luY19wcmludF9vYmoo c3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqKQotewotCXN0cnVj dCBsaXN0X2hlYWQgKnBvczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc2VxX3ByaW50Zihz LCAiJXMgJXM6ICVkXG4iLCBvYmotPm5hbWUsIG9iai0+ZHJ2X25hbWUsIG9iai0+dmFsdWUpOwot Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJm9iai0+Y2hpbGRfbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlz dF9mb3JfZWFjaChwb3MsICZvYmotPmNoaWxkX2xpc3RfaGVhZCkgewotCQlzdHJ1Y3QgZmVuY2Ug KmZlbmNlID0KLQkJCWNvbnRhaW5lcl9vZihwb3MsIHN0cnVjdCBmZW5jZSwgY2hpbGRfbGlzdCk7 Ci0JCXN5bmNfcHJpbnRfZmVuY2UocywgZmVuY2UsIGZhbHNlKTsKLQl9Ci0Jc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmb2JqLT5jaGlsZF9saXN0X2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZv aWQgc3luY19wcmludF9zeW5jX2ZpbGUoc3RydWN0IHNlcV9maWxlICpzLAotCQkJCSAgc3RydWN0 IHN5bmNfZmlsZSAqc3luY19maWxlKQotewotCWludCBpOwotCi0Jc2VxX3ByaW50ZihzLCAiWyVw XSAlczogJXNcbiIsIHN5bmNfZmlsZSwgc3luY19maWxlLT5uYW1lLAotCQkgICBzeW5jX3N0YXR1 c19zdHIoYXRvbWljX3JlYWQoJnN5bmNfZmlsZS0+c3RhdHVzKSkpOwotCi0JZm9yIChpID0gMDsg aSA8IHN5bmNfZmlsZS0+bnVtX2ZlbmNlczsgKytpKSB7Ci0JCXN5bmNfcHJpbnRfZmVuY2Uocywg c3luY19maWxlLT5jYnNbaV0uZmVuY2UsIHRydWUpOwotCX0KLX0KLQotc3RhdGljIGludCBzeW5j X2RlYnVnZnNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKLXsKLQl1bnNp Z25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKLQotCXNlcV9wdXRzKHMs ICJvYmpzOlxuLS0tLS0tLS0tLS0tLS1cbiIpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnN5bmNf dGltZWxpbmVfbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaChwb3MsICZzeW5jX3Rp bWVsaW5lX2xpc3RfaGVhZCkgewotCQlzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqID0KLQkJCWNv bnRhaW5lcl9vZihwb3MsIHN0cnVjdCBzeW5jX3RpbWVsaW5lLAotCQkJCSAgICAgc3luY190aW1l bGluZV9saXN0KTsKLQotCQlzeW5jX3ByaW50X29iaihzLCBvYmopOwotCQlzZXFfcHV0cyhzLCAi XG4iKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3luY190aW1lbGluZV9saXN0X2xv Y2ssIGZsYWdzKTsKLQotCXNlcV9wdXRzKHMsICJmZW5jZXM6XG4tLS0tLS0tLS0tLS0tLVxuIik7 Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc3luY19maWxlX2xpc3RfbG9jaywgZmxhZ3MpOwotCWxp c3RfZm9yX2VhY2gocG9zLCAmc3luY19maWxlX2xpc3RfaGVhZCkgewotCQlzdHJ1Y3Qgc3luY19m aWxlICpzeW5jX2ZpbGUgPQotCQkJY29udGFpbmVyX29mKHBvcywgc3RydWN0IHN5bmNfZmlsZSwg c3luY19maWxlX2xpc3QpOwotCi0JCXN5bmNfcHJpbnRfc3luY19maWxlKHMsIHN5bmNfZmlsZSk7 Ci0JCXNlcV9wdXRzKHMsICJcbiIpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeW5j X2ZpbGVfbGlzdF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3lu Y19pbmZvX2RlYnVnZnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmls ZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc3luY19kZWJ1Z2ZzX3Nob3csIGlub2Rl LT5pX3ByaXZhdGUpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBz eW5jX2luZm9fZGVidWdmc19mb3BzID0gewotCS5vcGVuICAgICAgICAgICA9IHN5bmNfaW5mb19k ZWJ1Z2ZzX29wZW4sCi0JLnJlYWQgICAgICAgICAgID0gc2VxX3JlYWQsCi0JLmxsc2VlayAgICAg ICAgID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlICAgICAgICA9IHNpbmdsZV9yZWxlYXNlLAotfTsK LQotI2lmIElTX0VOQUJMRUQoQ09ORklHX1NXX1NZTkMpCi0vKgotICogKldBUk5JTkcqCi0gKgot ICogaW1wcm9wZXIgdXNlIG9mIHRoaXMgY2FuIHJlc3VsdCBpbiBkZWFkbG9ja2luZyBrZXJuZWwg ZHJpdmVycyBmcm9tIHVzZXJzcGFjZS4KLSAqLwotCi0vKiBvcGVuaW5nIHN3X3N5bmMgY3JlYXRl IGEgbmV3IHN5bmMgb2JqICovCi1zdGF0aWMgaW50IHN3X3N5bmNfZGVidWdmc19vcGVuKHN0cnVj dCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzeW5jX3RpbWVs aW5lICpvYmo7Ci0JY2hhciB0YXNrX2NvbW1bVEFTS19DT01NX0xFTl07Ci0KLQlnZXRfdGFza19j b21tKHRhc2tfY29tbSwgY3VycmVudCk7Ci0KLQlvYmogPSBzeW5jX3RpbWVsaW5lX2NyZWF0ZShz aXplb2YoKm9iaiksICJzd19zeW5jIiwgdGFza19jb21tKTsKLQlpZiAoIW9iaikKLQkJcmV0dXJu IC1FTk9NRU07Ci0KLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBvYmo7Ci0KLQlyZXR1cm4gMDsKLX0K LQotc3RhdGljIGludCBzd19zeW5jX2RlYnVnZnNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2Rl LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqID0gZmls ZS0+cHJpdmF0ZV9kYXRhOwotCi0Jc3luY190aW1lbGluZV9kZXN0cm95KG9iaik7Ci0JcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyBsb25nIHN3X3N5bmNfaW9jdGxfY3JlYXRlX2ZlbmNlKHN0cnVjdCBz eW5jX3RpbWVsaW5lICpvYmosCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCWlu dCBmZCA9IGdldF91bnVzZWRfZmRfZmxhZ3MoT19DTE9FWEVDKTsKLQlpbnQgZXJyOwotCXN0cnVj dCBmZW5jZSAqZmVuY2U7Ci0Jc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlOwotCXN0cnVjdCBz d19zeW5jX2NyZWF0ZV9mZW5jZV9kYXRhIGRhdGE7Ci0KLQlpZiAoZmQgPCAwKQotCQlyZXR1cm4g ZmQ7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmRhdGEsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6 ZW9mKGRhdGEpKSkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlmZW5j ZSA9IHN5bmNfcHRfY3JlYXRlKG9iaiwgc2l6ZW9mKCpmZW5jZSksIGRhdGEudmFsdWUpOwotCWlm ICghZmVuY2UpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnI7Ci0JfQotCi0JZGF0YS5u YW1lW3NpemVvZihkYXRhLm5hbWUpIC0gMV0gPSAnXDAnOwotCXN5bmNfZmlsZSA9IHN5bmNfZmls ZV9jcmVhdGUoZGF0YS5uYW1lLCBmZW5jZSk7Ci0JaWYgKCFzeW5jX2ZpbGUpIHsKLQkJZmVuY2Vf cHV0KGZlbmNlKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnI7Ci0JfQotCi0JZGF0YS5m ZW5jZSA9IGZkOwotCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmZGF0YSwg c2l6ZW9mKGRhdGEpKSkgewotCQlzeW5jX2ZpbGVfcHV0KHN5bmNfZmlsZSk7Ci0JCWVyciA9IC1F RkFVTFQ7Ci0JCWdvdG8gZXJyOwotCX0KLQotCXN5bmNfZmlsZV9pbnN0YWxsKHN5bmNfZmlsZSwg ZmQpOwotCi0JcmV0dXJuIDA7Ci0KLWVycjoKLQlwdXRfdW51c2VkX2ZkKGZkKTsKLQlyZXR1cm4g ZXJyOwotfQotCi1zdGF0aWMgbG9uZyBzd19zeW5jX2lvY3RsX2luYyhzdHJ1Y3Qgc3luY190aW1l bGluZSAqb2JqLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQl1MzIgdmFsdWU7Ci0KLQlpZiAoY29w eV9mcm9tX3VzZXIoJnZhbHVlLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZih2YWx1ZSkpKQot CQlyZXR1cm4gLUVGQVVMVDsKLQotCXN5bmNfdGltZWxpbmVfc2lnbmFsKG9iaiwgdmFsdWUpOwot Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBsb25nIHN3X3N5bmNfaW9jdGwoc3RydWN0IGZpbGUg KmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkgIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0 cnVjdCBzeW5jX3RpbWVsaW5lICpvYmogPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQlzd2l0Y2gg KGNtZCkgewotCWNhc2UgU1dfU1lOQ19JT0NfQ1JFQVRFX0ZFTkNFOgotCQlyZXR1cm4gc3dfc3lu Y19pb2N0bF9jcmVhdGVfZmVuY2Uob2JqLCBhcmcpOwotCi0JY2FzZSBTV19TWU5DX0lPQ19JTkM6 Ci0JCXJldHVybiBzd19zeW5jX2lvY3RsX2luYyhvYmosIGFyZyk7Ci0KLQlkZWZhdWx0OgotCQly ZXR1cm4gLUVOT1RUWTsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIHN3X3N5bmNfZGVidWdmc19mb3BzID0gewotCS5vcGVuICAgICAgICAgICA9IHN3X3N5bmNf ZGVidWdmc19vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHN3X3N5bmNfZGVidWdmc19yZWxlYXNl LAotCS51bmxvY2tlZF9pb2N0bCA9IHN3X3N5bmNfaW9jdGwsCi0JLmNvbXBhdF9pb2N0bCA9IHN3 X3N5bmNfaW9jdGwsCi19OwotI2VuZGlmCi0KLXN0YXRpYyBfX2luaXQgaW50IHN5bmNfZGVidWdm c19pbml0KHZvaWQpCi17Ci0JZGJnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInN5bmMiLCBOVUxM KTsKLQotCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImluZm8iLCAwNDQ0LCBkYmdmcywgTlVMTCwgJnN5 bmNfaW5mb19kZWJ1Z2ZzX2ZvcHMpOwotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfU1dfU1lOQykK LQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzd19zeW5jIiwgMDY0NCwgZGJnZnMsIE5VTEwsCi0JCQkg ICAgJnN3X3N5bmNfZGVidWdmc19mb3BzKTsKLSNlbmRpZgotCi0JcmV0dXJuIDA7Ci19Ci1sYXRl X2luaXRjYWxsKHN5bmNfZGVidWdmc19pbml0KTsKLQotc3RhdGljIF9fZXhpdCB2b2lkIHN5bmNf ZGVidWdmc19leGl0KHZvaWQpCi17Ci0JaWYgKGRiZ2ZzKQotCQlkZWJ1Z2ZzX3JlbW92ZV9yZWN1 cnNpdmUoZGJnZnMpOwotfQotbW9kdWxlX2V4aXQoc3luY19kZWJ1Z2ZzX2V4aXQpOwotCi0jZGVm aW5lIERVTVBfQ0hVTksgMjU2Ci1zdGF0aWMgY2hhciBzeW5jX2R1bXBfYnVmWzY0ICogMTAyNF07 Ci12b2lkIHN5bmNfZHVtcCh2b2lkKQotewotCXN0cnVjdCBzZXFfZmlsZSBzID0gewotCQkuYnVm ID0gc3luY19kdW1wX2J1ZiwKLQkJLnNpemUgPSBzaXplb2Yoc3luY19kdW1wX2J1ZikgLSAxLAot CX07Ci0JaW50IGk7Ci0KLQlzeW5jX2RlYnVnZnNfc2hvdygmcywgTlVMTCk7Ci0KLQlmb3IgKGkg PSAwOyBpIDwgcy5jb3VudDsgaSArPSBEVU1QX0NIVU5LKSB7Ci0JCWlmICgocy5jb3VudCAtIGkp ID4gRFVNUF9DSFVOSykgewotCQkJY2hhciBjID0gcy5idWZbaSArIERVTVBfQ0hVTktdOwotCi0J CQlzLmJ1ZltpICsgRFVNUF9DSFVOS10gPSAwOwotCQkJcHJfY29udCgiJXMiLCBzLmJ1ZiArIGkp OwotCQkJcy5idWZbaSArIERVTVBfQ0hVTktdID0gYzsKLQkJfSBlbHNlIHsKLQkJCXMuYnVmW3Mu Y291bnRdID0gMDsKLQkJCXByX2NvbnQoIiVzIiwgcy5idWYgKyBpKTsKLQkJfQotCX0KLX0KLQot I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC90cmFjZS9zeW5jLmgg Yi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC90cmFjZS9zeW5jLmgKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IGQ3ZjY0NTdmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRy b2lkL3RyYWNlL3N5bmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSN1bmRlZiBU UkFDRV9TWVNURU0KLSNkZWZpbmUgVFJBQ0VfSU5DTFVERV9QQVRIIC4uLy4uL2RyaXZlcnMvc3Rh Z2luZy9hbmRyb2lkL3RyYWNlCi0jZGVmaW5lIFRSQUNFX1NZU1RFTSBzeW5jCi0KLSNpZiAhZGVm aW5lZChfVFJBQ0VfU1lOQ19IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKQot I2RlZmluZSBfVFJBQ0VfU1lOQ19ICi0KLSNpbmNsdWRlICIuLi9zeW5jLmgiCi0jaW5jbHVkZSA8 bGludXgvdHJhY2Vwb2ludC5oPgotCi1UUkFDRV9FVkVOVChzeW5jX3RpbWVsaW5lLAotCVRQX1BS T1RPKHN0cnVjdCBzeW5jX3RpbWVsaW5lICp0aW1lbGluZSksCi0KLQlUUF9BUkdTKHRpbWVsaW5l KSwKLQotCVRQX1NUUlVDVF9fZW50cnkoCi0JCQlfX3N0cmluZyhuYW1lLCB0aW1lbGluZS0+bmFt ZSkKLQkJCV9fZmllbGQodTMyLCB2YWx1ZSkKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCQlf X2Fzc2lnbl9zdHIobmFtZSwgdGltZWxpbmUtPm5hbWUpOwotCQkJX19lbnRyeS0+dmFsdWUgPSB0 aW1lbGluZS0+dmFsdWU7Ci0JKSwKLQotCVRQX3ByaW50aygibmFtZT0lcyB2YWx1ZT0lZCIsIF9f Z2V0X3N0cihuYW1lKSwgX19lbnRyeS0+dmFsdWUpCi0pOwotCi0jZW5kaWYgLyogaWYgIWRlZmlu ZWQoX1RSQUNFX1NZTkNfSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkgKi8K LQotLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCi0jaW5jbHVkZSA8 dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9p ZC91YXBpL3N3X3N5bmMuaCBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3VhcGkvc3dfc3luYy5o CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjVkNDg2Li4wMDAwMDAwCi0tLSBhL2Ry aXZlcnMvc3RhZ2luZy9hbmRyb2lkL3VhcGkvc3dfc3luYy5oCisrKyAvZGV2L251bGwKQEAgLTEs MzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUsIEluYy4KLSAqCi0g KiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAotICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0 ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KLSAqCi0gKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgotICoKLSAqLwotCi0jaWZuZGVmIF9VQVBJX0xJTlVYX1NXX1NZTkNfSAotI2RlZmluZSBf VUFQSV9MSU5VWF9TV19TWU5DX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLXN0cnVj dCBzd19zeW5jX2NyZWF0ZV9mZW5jZV9kYXRhIHsKLQlfX3UzMgl2YWx1ZTsKLQljaGFyCW5hbWVb MzJdOwotCV9fczMyCWZlbmNlOyAvKiBmZCBvZiBuZXcgZmVuY2UgKi8KLX07Ci0KLSNkZWZpbmUg U1dfU1lOQ19JT0NfTUFHSUMJJ1cnCi0KLSNkZWZpbmUgU1dfU1lOQ19JT0NfQ1JFQVRFX0ZFTkNF CV9JT1dSKFNXX1NZTkNfSU9DX01BR0lDLCAwLFwKLQkJc3RydWN0IHN3X3N5bmNfY3JlYXRlX2Zl bmNlX2RhdGEpCi0jZGVmaW5lIFNXX1NZTkNfSU9DX0lOQwkJCV9JT1coU1dfU1lOQ19JT0NfTUFH SUMsIDEsIF9fdTMyKQotCi0jZW5kaWYgLyogX1VBUElfTElOVVhfU1dfU1lOQ19IICovCmRpZmYg LS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5bmNfdGltZWxpbmUuaCBiL2luY2x1ZGUvbGludXgvc3lu Y190aW1lbGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YTJlZGEK LS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3N5bmNfdGltZWxpbmUuaApAQCAtMCww ICsxLDExNCBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvc3luY190aW1lbGluZS5oCisgKgorICog Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX1NZTkNfVElNRUxJTkVfSAorI2RlZmluZSBfTElO VVhfU1lOQ19USU1FTElORV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUg PGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4 L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Zl bmNlLmg+CisjaW5jbHVkZSA8bGludXgvc3luY19maWxlLmg+CisjaW5jbHVkZSA8dWFwaS9saW51 eC9zeW5jLmg+CisKKy8qKgorICogc3RydWN0IHN5bmNfdGltZWxpbmUgLSBzeW5jIG9iamVjdAor ICogQGtyZWY6CQlyZWZlcmVuY2UgY291bnQgb24gZmVuY2UuCisgKiBAZHJ2X25hbWU6CQlkcnZf bmFtZSBvZiB0aGUgZHJpdmVyIHVzaW5nIHRoZSBzeW5jX3RpbWVsaW5lCisgKiBAbmFtZToJCW5h bWUgb2YgdGhlIHN5bmNfdGltZWxpbmUuIFVzZWZ1bCBmb3IgZGVidWdnaW5nCisgKiBAZGVzdHJv eWVkOgkJc2V0IHdoZW4gc3luY190aW1lbGluZSBpcyBkZXN0cm95ZWQKKyAqIEBjaGlsZF9saXN0 X2hlYWQ6CWxpc3Qgb2YgY2hpbGRyZW4gc3luY19wdHMgZm9yIHRoaXMgc3luY190aW1lbGluZQor ICogQGNoaWxkX2xpc3RfbG9jazoJbG9jayBwcm90ZWN0aW5nIEBjaGlsZF9saXN0X2hlYWQsIGRl c3Ryb3llZCwgYW5kCisgKgkJCWZlbmNlLnN0YXR1cworICogQGFjdGl2ZV9saXN0X2hlYWQ6CWxp c3Qgb2YgYWN0aXZlICh1bnNpZ25hbGVkL2Vycm9yZWQpIHN5bmNfcHRzCisgKiBAc3luY190aW1l bGluZV9saXN0OgltZW1iZXJzaGlwIGluIGdsb2JhbCBzeW5jX3RpbWVsaW5lX2xpc3QKKyAqLwor c3RydWN0IHN5bmNfdGltZWxpbmUgeworCXN0cnVjdCBrcmVmCQlrcmVmOworCWNoYXIJCQlkcnZf bmFtZVszMl07CisJY2hhcgkJCW5hbWVbMzJdOworCisJLyogcHJvdGVjdGVkIGJ5IGNoaWxkX2xp c3RfbG9jayAqLworCWJvb2wJCQlkZXN0cm95ZWQ7CisJaW50CQkJY29udGV4dCwgdmFsdWU7CisK KwlzdHJ1Y3QgbGlzdF9oZWFkCWNoaWxkX2xpc3RfaGVhZDsKKwlzcGlubG9ja190CQljaGlsZF9s aXN0X2xvY2s7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCWFjdGl2ZV9saXN0X2hlYWQ7CisKKyNpZmRl ZiBDT05GSUdfREVCVUdfRlMKKwlzdHJ1Y3QgbGlzdF9oZWFkCXN5bmNfdGltZWxpbmVfbGlzdDsK KyNlbmRpZgorfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3luY190aW1lbGluZSAqZmVuY2Vf cGFyZW50KHN0cnVjdCBmZW5jZSAqZmVuY2UpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihmZW5j ZS0+bG9jaywgc3RydWN0IHN5bmNfdGltZWxpbmUsCisJCQkgICAgY2hpbGRfbGlzdF9sb2NrKTsK K30KKworLyoKKyAqIEFQSSBmb3Igc3luY190aW1lbGluZSBpbXBsZW1lbnRlcnMKKyAqLworCisv KioKKyAqIHN5bmNfdGltZWxpbmVfY3JlYXRlKCkgLSBjcmVhdGVzIGEgc3luYyBvYmplY3QKKyAq IEBzaXplOglzaXplIHRvIGFsbG9jYXRlIGZvciB0aGlzIG9iagorICogQGRydl9uYW1lOglzeW5j X3RpbWVsaW5lIGRyaXZlciBuYW1lCisgKiBAbmFtZToJc3luY190aW1lbGluZSBuYW1lCisgKgor ICogQ3JlYXRlcyBhIG5ldyBzeW5jX3RpbWVsaW5lLiBAc2l6ZSBieXRlcyB3aWxsIGJlIGFsbG9j YXRlZCBhbGxvd2luZworICogZm9yIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGRhdGEgdG8gYmUg a2VwdCBhZnRlciB0aGUgZ2VuZXJpYworICogc3luY190aW1lbGluZSBzdHJ1Y3QuIFJldHVybnMg dGhlIHN5bmNfdGltZWxpbmUgb2JqZWN0IG9yIE5VTEwgaW4KKyAqIGNhc2Ugb2YgZXJyb3IuCisg Ki8KK3N0cnVjdCBzeW5jX3RpbWVsaW5lICpzeW5jX3RpbWVsaW5lX2NyZWF0ZShpbnQgc2l6ZSwg Y29uc3QgY2hhciAqZHJ2X25hbWUsCisJCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUpOworCisvKioK KyAqIHN5bmNfdGltZWxpbmVfZGVzdHJveSgpIC0gZGVzdHJveXMgYSBzeW5jIG9iamVjdAorICog QG9iajoJc3luY190aW1lbGluZSB0byBkZXN0cm95CisgKgorICogQSBzeW5jIGltcGxlbWVudGF0 aW9uIHNob3VsZCBjYWxsIHRoaXMgd2hlbiB0aGUgQG9iaiBpcyBnb2luZyBhd2F5CisgKiAoaS5l LiBtb2R1bGUgdW5sb2FkLikgIEBvYmogd29uJ3QgYWN0dWFsbHkgYmUgZnJlZWQgdW50aWwgYWxs IGl0cyBjaGlsZHJlbgorICogZmVuY2VzIGFyZSBmcmVlZC4KKyAqLwordm9pZCBzeW5jX3RpbWVs aW5lX2Rlc3Ryb3koc3RydWN0IHN5bmNfdGltZWxpbmUgKm9iaik7CisKKy8qKgorICogc3luY190 aW1lbGluZV9zaWduYWwoKSAtIHNpZ25hbCBhIHN0YXR1cyBjaGFuZ2Ugb24gYSBzeW5jX3RpbWVs aW5lCisgKiBAb2JqOglzeW5jX3RpbWVsaW5lIHRvIHNpZ25hbAorICogQGluYzoJbnVtIHRvIGlu Y3JlbWVudCBvbiB0aW1lbGluZS0+dmFsdWUKKyAqCisgKiBBIHN5bmMgaW1wbGVtZW50YXRpb24g c2hvdWxkIGNhbGwgdGhpcyBhbnkgdGltZSBvbmUgb2YgaXQncyBmZW5jZXMKKyAqIGhhcyBzaWdu YWxlZCBvciBoYXMgYW4gZXJyb3IgY29uZGl0aW9uLgorICovCit2b2lkIHN5bmNfdGltZWxpbmVf c2lnbmFsKHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmosIHVuc2lnbmVkIGludCBpbmMpOworCisv KioKKyAqIHN5bmNfcHRfY3JlYXRlKCkgLSBjcmVhdGVzIGEgc3luYyBwdAorICogQHBhcmVudDoJ ZmVuY2UncyBwYXJlbnQgc3luY190aW1lbGluZQorICogQHNpemU6CXNpemUgdG8gYWxsb2NhdGUg Zm9yIHRoaXMgcHQKKyAqIEBpbmM6CXZhbHVlIG9mIHRoZSBmZW5jZQorICoKKyAqIENyZWF0ZXMg YSBuZXcgZmVuY2UgYXMgYSBjaGlsZCBvZiBAcGFyZW50LiAgQHNpemUgYnl0ZXMgd2lsbCBiZQor ICogYWxsb2NhdGVkIGFsbG93aW5nIGZvciBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBkYXRhIHRv IGJlIGtlcHQgYWZ0ZXIKKyAqIHRoZSBnZW5lcmljIHN5bmNfdGltZWxpbmUgc3RydWN0LiBSZXR1 cm5zIHRoZSBmZW5jZSBvYmplY3Qgb3IKKyAqIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4KKyAqLwor c3RydWN0IGZlbmNlICpzeW5jX3B0X2NyZWF0ZShzdHJ1Y3Qgc3luY190aW1lbGluZSAqcGFyZW50 LCBpbnQgc2l6ZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGluYyk7CisKKyNlbmRpZiAvKiBfTElO VVhfU1lOQ19USU1FTElORV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9z eW5jX3RpbWVsaW5lLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zeW5jX3RpbWVsaW5lLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiNzY5YgotLS0gL2Rldi9udWxsCisr KyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3N5bmNfdGltZWxpbmUuaApAQCAtMCwwICsxLDMxIEBA CisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBzeW5jX3RpbWVsaW5l CisKKyNpZiAhZGVmaW5lZChfVFJBQ0VfU1lOQ19USU1FTElORV9IKSB8fCBkZWZpbmVkKFRSQUNF X0hFQURFUl9NVUxUSV9SRUFEKQorI2RlZmluZSBfVFJBQ0VfU1lOQ19USU1FTElORV9ICisKKyNp bmNsdWRlIDxsaW51eC9zeW5jX3RpbWVsaW5lLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2lu dC5oPgorCitUUkFDRV9FVkVOVChzeW5jX3RpbWVsaW5lLAorCVRQX1BST1RPKHN0cnVjdCBzeW5j X3RpbWVsaW5lICp0aW1lbGluZSksCisKKwlUUF9BUkdTKHRpbWVsaW5lKSwKKworCVRQX1NUUlVD VF9fZW50cnkoCisJCQlfX3N0cmluZyhuYW1lLCB0aW1lbGluZS0+bmFtZSkKKwkJCV9fZmllbGQo dTMyLCB2YWx1ZSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCQlfX2Fzc2lnbl9zdHIobmFt ZSwgdGltZWxpbmUtPm5hbWUpOworCQkJX19lbnRyeS0+dmFsdWUgPSB0aW1lbGluZS0+dmFsdWU7 CisJKSwKKworCVRQX3ByaW50aygibmFtZT0lcyB2YWx1ZT0lZCIsIF9fZ2V0X3N0cihuYW1lKSwg X19lbnRyeS0+dmFsdWUpCispOworCisjZW5kaWYgLyogaWYgIWRlZmluZWQoX1RSQUNFX1NZTkNf SCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkgKi8KKworLyogVGhpcyBwYXJ0 IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCisjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3Ry YWNlLmg+Ci0tIAoyLjUuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmkt ZGV2ZWwK