From owner-freebsd-hackers@freebsd.org Tue Oct 27 02:37:58 2015 Return-Path: Delivered-To: freebsd-hackers@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 021FAA1D055; Tue, 27 Oct 2015 02:37:58 +0000 (UTC) (envelope-from rpokala@panasas.com) Received: from na01-by2-obe.outbound.protection.outlook.com (mail-by2on0078.outbound.protection.outlook.com [207.46.100.78]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (Client CN "mail.protection.outlook.com", Issuer "MSIT Machine Auth CA 2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 2A42F1324; Tue, 27 Oct 2015 02:37:56 +0000 (UTC) (envelope-from rpokala@panasas.com) Received: from CY1PR08MB1803.namprd08.prod.outlook.com (10.162.218.25) by CY1PR08MB1801.namprd08.prod.outlook.com (10.162.218.23) with Microsoft SMTP Server (TLS) id 15.1.306.13; Tue, 27 Oct 2015 02:22:34 +0000 Received: from CY1PR08MB1803.namprd08.prod.outlook.com ([10.162.218.25]) by CY1PR08MB1803.namprd08.prod.outlook.com ([10.162.218.25]) with mapi id 15.01.0306.003; Tue, 27 Oct 2015 02:22:33 +0000 From: "Pokala, Ravi" To: "freebsd-geom@freebsd.org" , "freebsd-scsi@freebsd.org" , "freebsd-hackers@freebsd.org" CC: "scottl@freebsd.org" , "ken@freebsd.org" , "imp@freebsd.org" Subject: Low-level trace-buffers in CAM Thread-Topic: Low-level trace-buffers in CAM Thread-Index: AQHREF5W2DCPOIdjUUGMRg6fRJs3ww== Date: Tue, 27 Oct 2015 02:22:33 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Microsoft-MacOutlook/0.0.0.151008 authentication-results: spf=none (sender IP is ) smtp.mailfrom=rpokala@panasas.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [64.80.217.3] x-microsoft-exchange-diagnostics: 1; CY1PR08MB1801; 5:bosRlMo+g5nFNnVCd6VhdoW/KG7GwEI4ZwVLrSTlJyHnJ3YC6qs41zWI4lE8cdAeOibcn0ZaPsO7nwIWzyfuS/43d9PWVKB5CqZ8ci6TZ5+K9Zp0AMyptFIA0XVgDdYBijhaBdVBFLPLVpEL9wsA2g==; 24:LUH48ETZdrNqLm82CtRWwkez6aCQ9C3kNBIFOnZAc7Lxdcp6aaujf94y4Zs1uFGrZiEZ7i7Bkmift25i3RMig7wVrFV8CAwAQs4ZZ6N1b8s=; 20:kkNZ5fBwStuD6qepFW788DbYHqGCO3OhxX2Hm2mZRcpFXZfv4Nw9g92mDGvIREXd7Ek4XXNWKhHUSreX11I6Lw== x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR08MB1801; x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(520078)(8121501046)(3002001)(102215026); SRVR:CY1PR08MB1801; BCL:0; PCL:0; RULEID:; SRVR:CY1PR08MB1801; x-forefront-prvs: 0742443479 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(6009001)(199003)(164054003)(189002)(189998001)(66066001)(5004730100002)(33656002)(5007970100001)(2900100001)(5008740100001)(551934003)(5001960100002)(229853001)(10400500002)(77096005)(2501003)(102836002)(92566002)(5002640100001)(81156007)(5001770100001)(97736004)(83506001)(82746002)(450100001)(106116001)(87936001)(40100003)(122556002)(105586002)(575784001)(86362001)(36756003)(99286002)(106356001)(50986999)(101416001)(2201001)(54356999)(83716003)(4001350100001)(427584002)(21314002)(104396002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR08MB1801; H:CY1PR08MB1803.namprd08.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; received-spf: None (protection.outlook.com: panasas.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:23 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: panasas.com X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Oct 2015 02:22:33.6380 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: acf01c9d-c699-42af-bdbb-44bf582e60b0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR08MB1801 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Oct 2015 02:37:58 -0000 SGkgZm9sa3MsDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NClRoaXMgaXMgYW4gdXBkYXRlZCByZS1zZW5kIG9mIGEgbWVz c2FnZSBJIG9yaWdpbmFsbHkgc2VudCBhYm91dCBhIHllYXIgYWdvLCBkdXJpbmcgTWVldEJTRCAy MDE0LiBBIGZldyBwZW9wbGUgZXhwcmVzc2VkIGludGVyZXN0IGluIHBlcnNvbiwgYnV0IG5vIG9u ZSBldmVyIGZvbGxvd2VkIHVwIG9uIHRoZSBsaXN0cy4gSSdtIGJyaW5naW5nIHRoaXMgdXAgYWdh aW4sIGluIHRoZSBob3BlcyB0aGF0IEkgY2FuIGdldCBzb21lIGZlZWRiYWNrIGJlZm9yZSAvIGR1 cmluZyBuZXh0IHdlZWsncyBEZXYvVmVuZG9yIFN1bW1pdC4gSSdtIENDaW5nIHNvbWUgZm9sa3Mg d2hvIGV4cHJlc3NlZCBpbnRlcmVzdCBhdCB0aGF0IHRpbWUsIGFuZCBzb21lIGZvbGtzIHRoYXQg SSB3YXMgdG9sZCB3b3VsZCBiZSBpbnRlcmVzdGVkLg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpBdCBQYW5hc2FzLCB3 ZSBmb3VuZCBpdCB1c2VmdWwgdG8gaGF2ZSBhIHRyYWNlIGJ1ZmZlciBmb3IgZWFjaCBBVEEgZHJp dmUgaW4gdGhlIHN5c3RlbSwgZm9yIGdhdGhlcmluZyBpbmZvcm1hdGlvbiBhYm91dCBjb21tYW5k IHNlcXVlbmNlcyBhbmQgbGF0ZW5jeS4gSSBpbXBsZW1lbnRlZCB0aGF0IGZ1bmN0aW9uYWxpdHkg Zm9yIG91ciBvbGQgNy1pc2ggQVRBIGRyaXZlciwgYW5kIGl0IHdvcmtzIHF1aXRlIHdlbGwsIHdp dGggZmFpcmx5IGxvdyBvdmVyaGVhZC4gKEkgcmFuIG91ciB1c3VhbCBzdWl0ZSBvZiBwZXJmb3Jt YW5jZSB0ZXN0cywgYW5kIGFueSBkaWZmZXJlbmNlcyB3ZXJlIGxvc3QgaW4gdGhlIG5vaXNlLikg VGhlc2UgdHJhY2VzIGFsbG93ZWQgdXMgdG8gY2FwdHVyZSBhbmQgcmVwbGF5IGFjY2VzcyBwYXR0 ZXJucyAodGhvdWdoIG9idmlvdXNseSBub3Qgd2l0aCB0aGUgc2FtZSBkYXRhKSwgYW5hbHl6ZSBh bmQgY29tcGFyZSBsYXRlbmN5LCBldGMuDQoNCkFzIFBhbmFzYXMgbW92ZXMgdG93YXJkIGEgbW9y ZSBtb2Rlcm4gYmFzZSwgd2Ugd2FudCB0byByZS1pbXBsZW1lbnQgdGhpcyBmdW5jdGlvbmFsaXR5 IGZvciBBVEEsIFNDU0ksIE5WTWUsIGV0Yy4gQW5kIHB1c2ggaXQgdXBzdHJlYW0sIG9mIGNvdXJz ZSEgOi0pDQoNCkZpcnN0LCBzb21lIGV4YW1wbGUgb3V0cHV0OyBJIHdyb3RlIGNvZGUgZm9yIHRo cmVlIGRpZmZlcmVudCBmb3JtYXRzOg0KICAtIFRoZSBiaW5hcnkgdHJhY2UgYnVmZmVyIGR1bXAN CiAgICBVc2VmdWwgZm9yIG1hbmlwdWxhdGluZyBpbiBDOyB0aGUgb3RoZXIgdHdvIGZvcm1hdHMg YXJlIHBvc3QtcHJvY2Vzc2VkIG91dCBvZiB0aGlzLCBhbmQgSSBhbHNvIHdyb3RlIGEgcmVwbGF5 IHV0aWxpdHkgYW5kIGEgYmFzaWMgc3RhdHMgYW5hbHl6ZXIgd2hpY2ggb3BlcmF0ZWQgb24gdGhl IGJpbmFyeSBkdW1wLg0KICAtIFRhYnVsYXIgaGV4DQogICAgVXNlZnVsIGZvciBwYXJzaW5nIHdp dGggc2NyaXB0czsgSSBuZXZlciBhY3R1YWxseSB1c2VkIHRoaXMgZm9ybWF0LCBidXQgaXQgd2Fz IHRyaXZpYWwgc28gSSBqdXN0IHdlbnQgYWhlYWQgYW5kIHdyb3RlIGl0Lg0KICAtIEh1bWFuLXJl YWRhYmxlDQogICAgVXNlZnVsIGZvciBleWViYWxsaW5nOyBvbiBtb3JlIHRoYW4gb25lIG9jY2Fz aW9uLCBJIHdhcyBhYmxlIHRvIHNlZSB0aGF0IEkgaGFkIG1pcy1hc3NlbWJsZWQgYSBjb21tYW5k IGluIHVzZXJzcGFjZSwgZXRjLg0KDQpUaGVzZSBleGFtcGxlcyBhcmUgYWN0dWFsbHkgcmVhbGx5 IGxvbmcgbGluZXM7IEkndmUgYnJva2VuIHRoZW0gdXAgYW5kIGluZGVudGVkIGZvciB0aGUgc2Fr ZSBvZiBlbWFpbDoNCg0KICAgICMgVGFidWxhciBoZXggZm9ybWF0LCBmb3IgdXNlIHcvIHNjcmlw dHMNCiAgICAjIFJlcXVlc3QgdGltZSAgICAgICBBVEEgcmVxdWVzdCBpbmZvcm1hdGlvbiAgIFJl c3BvbnNlIHRpbWUgICAgICAgIA0KICAgICAgICBBVEEgcmVzcG9uc2UgaW5mb3JtYXRpb24gIHN0 cy9lcnIgIGZsYWdzDQogICAgMTQ0NTgzOTc5MzAwMzczNyAgICAgYzggMDAwMCAwMDA0IDAwMDAw MDAwMmZhOCAxNDQ1ODM5NzkzMDAzODA2ICAgICANCiAgICAgICAgYzggMDAwMCAwMDA0IDAwMDAw MDAwMmZhOCA1MCAwMCAwMDAwMDA3ZA0KICAgIDE0NDU4Mzk3OTMwMDM4NzQgICAgIGM4IDAwMDAg MDAyMCAwMDAwMDAxMTNhYzggMTQ0NTgzOTc5MzAxMTU0MSAgICAgDQogICAgICAgIGM4IDAwMDAg MDAyMCAwMDAwMDAxMTNhYzggNTAgMDAgMDAwMDAwN2QNCiAgICAxNDQ1ODM5NzkzMDExNzk1ICAg ICBjOCAwMDAwIDAwMDggMDAwMDAwMTE4Y2E4IDE0NDU4Mzk3OTMwMTc3MDIgICAgIA0KICAgICAg ICBjOCAwMDAwIDAwMDggMDAwMDAwMTE4Y2E4IDUwIDAwIDAwMDAwMDdkDQogICAgMTQ0NTgzOTc5 MzAxNzgwOCAgICAgYzggMDAwMCAwMDgwIDAwMDAwMDExNzYyOCAxNDQ1ODM5NzkzMDE4OTc1ICAg ICANCiAgICAgICAgYzggMDAwMCAwMDgwIDAwMDAwMDExNzYyOCA1MCAwMCAwMDAwMDA3ZA0KICAg IDE0NDU4Mzk3OTMwMTkwNzkgICAgIGM4IDAwMDAgMDAyMCAwMDAwMDAxMTc3YTggMTQ0NTgzOTc5 MzAxOTY4NiAgICAgDQogICAgICAgIGM4IDAwMDAgMDAyMCAwMDAwMDAxMTc3YTggNTAgMDAgMDAw MDAwN2QNCg0KICAgICMgSHVtYW4tcmVhZGFibGUNCiAgICBGTEFHUyAgICAgICBSRVFVRVNUIFRJ TUUgICAgICAgICBSRVNQT05TRSBUSU1FICAgICAgICBFTEFQU0VEIFRJTUUgICAgICAgICANCiAg ICAgICAgUkVRVUVTVCBDT01NQU5EICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFUVVMgICBF UlJPUiAgICANCiAgICAgICAgUkVTUE9OU0UgQ09NTUFORCAgICAgICAgICAgICAgICAgICAgICAg IA0KICAgIC0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0t LS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tIA0KICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIA0KICAgICAgICAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgX19fX0MuLi4uX1YgMTQ0NTgzOTc5 MzAwMzczNyAgICAgMTQ0NTgzOTc5MzAwMzgwNiAgICAgNjkgICAgICAgICAgICAgICAgICAgDQog ICAgICAgIFJFQUQgRE1BIChMQkEgMTIyMDAgKyA0IHNlY3RvcnMpICAgICAgICAgX1JfU19fX18g X19fX19fX18gDQogICAgICAgIC0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICANCiAgICBfX19fQy4uLi5fViAxNDQ1ODM5NzkzMDAzODc0ICAgICAxNDQ1ODM5NzkzMDExNTQx ICAgICA3NjY3ICAgICAgICAgICAgICAgICANCiAgICAgICAgUkVBRCBETUEgKExCQSAxMTI5MTYw ICsgMzIgc2VjdG9ycykgICAgICBfUl9TX19fXyBfX19fX19fXyANCiAgICAgICAgLS0tLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIF9fX19DLi4uLl9WIDE0NDU4Mzk3 OTMwMTE3OTUgICAgIDE0NDU4Mzk3OTMwMTc3MDIgICAgIDU5MDcgICAgICAgICAgICAgICAgIA0K ICAgICAgICBSRUFEIERNQSAoTEJBIDExNTAxMjAgKyA4IHNlY3RvcnMpICAgICAgIF9SX1NfX19f IF9fX19fX19fIA0KICAgICAgICAtLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgDQogICAgX19fX0MuLi4uX1YgMTQ0NTgzOTc5MzAxNzgwOCAgICAgMTQ0NTgzOTc5MzAxODk3 NSAgICAgMTE2NyAgICAgICAgICAgICAgICAgDQogICAgICAgIFJFQUQgRE1BIChMQkEgMTE0NDM2 MCArIDEyOCBzZWN0b3JzKSAgICAgX1JfU19fX18gX19fX19fX18gDQogICAgICAgIC0tLS0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICBfX19fQy4uLi5fViAxNDQ1ODM5 NzkzMDE5MDc5ICAgICAxNDQ1ODM5NzkzMDE5Njg2ICAgICA2MDcgICAgICAgICAgICAgICAgICAN CiAgICAgICAgUkVBRCBETUEgKExCQSAxMTQ0NzQ0ICsgMzIgc2VjdG9ycykgICAgICBfUl9TX19f XyBfX19fX19fXyANCiAgICAgICAgLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIA0KDQpUaGUgb2J2aW91cyBwbGFjZSB0byBwdXQgdGhpcyBzb3J0IG9mIHRyYWNpbmcgd291 bGQgYmUgaW4gR0VPTSwgYnV0IHRoYXQgYWN0dWFsbHkgaXNuJ3Qgd2hhdCBJIHdhbnQsIGZvciBh IGZldyByZWFzb25zLiBGaXJzdCBvZiBhbGwsIEknbSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiB0 aGUgZXhhY3QgcmVnaXN0ZXIgLyB0YXNrZmlsZSAvIENEQiB2YWx1ZXMgc2VudCB0byB0aGUgZHJp dmUgLSBvcGNvZGUsIGZlYXR1cmUgY29kZXMsIExCQXMsIGV0Yy4gU2Vjb25kLCBJJ20gaW50ZXJl c3RlZCBpbiBoYXJkd2FyZS1sZXZlbCBsYXRlbmN5IC0gaG93IGxvbmcgZG9lcyBhIHJlcXVlc3Qg c3RheSBpbiB0aGUgY29udHJvbGxlciBhbmQgZGV2aWNlLiBCb3RoIG9mIHRob3NlIHByZXR0eSBt dWNoIHJlcXVpcmUgd29ya2luZyBiZWxvdyBHRU9NLg0KDQpUaGVyZWZvcmUsIEkgdGhpbmsgSSB3 YW50IHRvIGRvIGl0IGluIHRoZSBDQU0gc3RhY2s7IGlkZWFsbHksIEknZCBwdXQgdGhlIGhvb2tz IGluIHRoZSBTSU0gZHJpdmVycywgdG8gZ2V0IGFzIGNsb3NlIHRvIHRoZSBtZXRhbCBhcyBwb3Nz aWJsZSwgdG8gZ2V0IHRoZSBtb3N0IGFjY3VyYXRlIGxhdGVuY3kuIEhvd2V2ZXIsIGV2ZW4gYSBs aWdodCB0b3VjaCB0byBldmVyeSBTSU0gZHJpdmVyIGlzIGdvaW5nIHRvIGJlIHBhaW5mdWwsIGFu ZCBzaW5jZSBJIGRvbid0IGhhdmUgYWNjZXNzIHRvIGV2ZXJ5IGNvbnRyb2xsZXIgaW4gdGhlIHdv cmxkLCB0ZXN0aW5nIHdvdWxkIGJlIGRpZmZpY3VsdC4gQWRkaW5nIHRoZSBob29rcyB0byBkYSg0 KSBhbmQgYWRhKDQpIHdvdWxkIHN0aWxsIGJlIHByZXR0eSBjbG9zZSB0byB0aGUgbWV0YWwsIGFu ZCB3b3VsZCByZXF1aXJlIG11Y2ggc21hbGxlciBjaGFuZ2VzLiBPciBtYXliZSB0aGV5IGJlbG9u ZyBpbiB0aGUgWFBUIGxheWVyPyAoSSBkb24ndCBrbm93IG5lYXJseSBhcyBtdWNoIGFib3V0IENB TSBhcyBJIHNob3VsZC4gOi0vKQ0KDQotLS0tLS0tLQ0KTk9URTogV2hlbiBJIG1lbnRpb25lZCB0 aGlzIGlkZWEgYXQgYSAoU2FuIEZyYW5jaXNjbykgQmF5IEFyZWEgRnJlZUJTRCBVc2VyIEdyb3Vw IChCQUZVRykgbWVldGluZywgdGhlcmUgd2VyZSBzdWdnZXN0aW9ucyBhYm91dCBpbnRlZ3JhdGlu ZyB0aGlzIHdpdGggRFRyYWNlIG9yIEtUcmFjZSBpbnN0ZWFkLiBJJ20gaGFwcHkgdG8gY29uc2lk ZXIgZWl0aGVyIG9mIHRob3NlLCBidXQgSSBrbm93IGV2ZW4gbGVzcyBhYm91dCB0aG9zZSB0aGFu IEkgZG8gYWJvdXQgQ0FNLiBJZiB0aGF0J3MgcmVhbGx5IHRoZSBiZXN0IHdheSB0byBkbyB0aGlz IHNvcnQgb2YgdGhpbmcsIEknbSBoYXBweSB0byBsZWFybiwgaWYgc29tZW9uZSBpcyB3aWxsaW5n IHRvIHRlYWNoLg0KLS0tLS0tLS0NCg0KSSB0b29rIHRoZSBQYW5hc2FzIC8gNy54IGltcGxlbWVu dGF0aW9uLCBhbmQgcHNldWRvLWNvZGVkIHdoYXQgaXQgbWlnaHQgbG9vayBsaWtlIGluIENBTS4g KEkgY291bGQgcHJvYmFibHkgbWFrZSBkaWZmcyBhZ2FpbnN0IHRoZSBvbGQgQVRBIHN0YWNrIGF2 YWlsYWJsZSBmb3IgY29tcGFyaXNvbiwgYnV0IEkgZmlndXJlZCBubyBvbmUgd291bGQgY2FyZSBh bnltb3JlLikgQSBodWdlIGNhdmVhdCBpcyB0aGF0IEkndmUgbmV2ZXIgcmVhbGx5IHBva2VkIGlu IENBTSBiZWZvcmUsIHNvIEkgZnVsbHkgZXhwZWN0IEknbSBkb2luZyBzZXZlcmFsIHRoaW5ncyB3 cm9uZy4gUGxlYXNlIGVkdWNhdGUgbWUuIDotKQ0KDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KDQpDcmVhdGUgYSBjaXJjdWxhciBidWZmZXIgb2YgdHJhY2UgcmVjb3JkcyBmb3Ig ZWFjaCBDQU0gUEVSSVBILiBFYWNoIHJlY29yZCB3aWxsIGNvbnRhaW4gdGhlIGZ1bGwgQ0RCIGZv ciB0aGUgcmVxdWVzdCBhcyBzZW50IHRvIHRoZSBkZXZpY2UsIHRoZSB0aW1lc3RhbXAgKGluIHVz ZWMpIG9mIHRoZSByZXF1ZXN0LCB0aGUgQ0RCIGFzIHJldHVybmVkIGJ5IHRoZSBkZXZpY2UsIHRo ZSB0aW1lc3RhbXAgb2YgdGhlIHJlc3BvbnNlLCBhbmQgdGhlIHN0YXR1cyBhbmQgZXJyb3IgY29k ZS4gQWRkaXRpb25hbGx5LCBmbGFncyBhcmUgcHJvdmlkZWQgdG8gdHJhY2sgdGhlIHN0YXRlIG9m IHRoZSB0cmFjZSByZWNvcmQsIGFuZCB0byBpbmRpY2F0ZSB3aGljaCB0eXBlIG9mIHBlcmlwaCB0 aGUgcmVjb3JkIGlzIGFzc29jaWF0ZWQgd2l0aC4NCg0KLS0tLS0tLS0NCg0KdHlwZWRlZiBzdHJ1 Y3Qgew0KCXVfaW50MzJfdAlmbGFnczsNCiNkZWZpbmUgQ0FNX1RSQUNFX0ZfVkFMSUQJMHgwMDAw MDAwMQkvKiB2YWxpZCByZWNvcmQgKi8NCiNkZWZpbmUgQ0FNX1RSQUNFX0ZfSU5QUk9HUkVTUwkw eDAwMDAwMDAyCS8qIHJlcXVlc3QgaW4gcHJvZ3Jlc3MgKi8NCiNkZWZpbmUgQ0FNX1RSQUNFX0Zf UkVRX1ZBTElECTB4MDAwMDAwMDQJLyogcmVxdWVzdCBkYXRhIHZhbGlkICovDQojZGVmaW5lIENB TV9UUkFDRV9GX1JFU1BfVkFMSUQJMHgwMDAwMDAwOAkvKiByZXNwb25zZSBkYXRhIHZhbGlkICov DQojZGVmaW5lIENBTV9UUkFDRV9GX0NPTVBMRVRFCTB4MDAwMDAwMTAJLyogcmVzcG9uc2UgZ2F0 aGVyZWQgKi8NCiNkZWZpbmUgQ0FNX1RSQUNFX0ZfVElNRURPVVQJMHgwMDAwMDAyMAkvKiByZXF1 ZXN0IHRpbWVkIG91dCAqLw0KI2RlZmluZSBDQU1fVFJBQ0VfRl9BQkFORE9ORUQJMHgwMDAwMDA0 MAkvKiBjYW5jZWxsZWQsIGV0Yy4gKi8NCiNkZWZpbmUgQ0FNX1RSQUNFX0ZfUkVUUklFRAkweDAw MDAwMDgwCS8qIHJldHJ5IGluIGxhdGVyIHJlY29yZCAqLw0KI2RlZmluZSBDQU1fVFJBQ0VfRl9J U19SRVRSWQkweDAwMDAwMTAwCS8qIHJldHJ5IG9mIGVhcmxpZXIgcmVxLiAqLw0KI2RlZmluZSBD QU1fVFJBQ0VfRl9QRVJJUEhfTUFTSwkweGYwMDAwMDAwCS8qIHVwIHRvIDE2IFBFUklQSCB0eXBl cyAqLw0KI2RlZmluZSBDQU1fVFJBQ0VfRl9QRVJJUEhfREEJMHgwDQojZGVmaW5lIENBTV9UUkFD RV9GX1BFUklQSF9BREEJMHgxDQojZGVmaW5lIENBTV9UUkFDRV9GX1BFUklQSF9OVkQJMHgyDQoJ dV9pbnQ2NF90CXJlcV91c2VjOw0KCWNkYl90CQlyZXFfY2RiOw0KCXVfaW50NjRfdAlyZXNwX3Vz ZWM7DQoJY2RiX3QJCXJlc3BfY2RiOw0KCXVfaW50OF90CXJlc3Bfc3RhdHVzOw0KCXVfaW50OF90 CXJlc3BfZXJyb3I7DQoJdV9pbnQ4X3QJcmVzcF9hc2M7CS8qIE5lZWRlZCBmb3IgU0NTST8gKi8N Cgl1X2ludDhfdAlyZXNwX2FzcTsJLyogTmVlZGVkIGZvciBTQ1NJPyAqLw0KCXVfaW50OF90CXBh ZGRpbmdbOF07CS8qIFBhZCB0byA2NCBieXRlcyAqLw0KLyogVGhlcmUncyBnb2luZyB0byBiZSBh IGxhcmdlLWlzaCBhcnJheSBvZiB0aGVzZSBpbiB0aGUga2VybmVsOyBtYWtlIHN1cmUNCiAqIHRo ZXkncmUgcGFja2VkIHRvIG1pbmltaXplIHNwYWNlIHVzYWdlLCBhbmQga2VlcCB0aGluZ3MgYWxp Z25lZC4gSXQgbWF5DQogKiBtYWtlIHNlbnNlIHRvIHJlLW9yZGVyIHRoZSBmaWVsZHMgZm9yIGFs aWdubWVudCBhcyB3ZWxsLg0KICovDQp9IGNhbV90cmFjZV9yZWNvcmRfdCBfX2F0dHJpYnV0ZV9f KChwYWNrZWQsIGFsaWduZWQoOCkpKTsNCg0KdHlwZWRlZiBzdHJ1Y3Qgew0KCXVfaW50MzJfdAkJ dHJhY2VfYnVmX3JlY29yZF9jb3VudDsNCgljYW1fdHJhY2VfcmVjb3JkX3QJKnRyYWNlX2J1ZjsN Cn0gY2FtX3RyYWNlX2J1ZmZlcl90Ow0KDQovKiBUaGlzIGlzIHNldHRhYmxlIHZpYSBhIHR1bmFi bGU7IGZvciBQYW5hc2FzJyBwdXJwb3NlcywgMTAwSyBlbnRyaWVzIHdhcw0KICogZW5vdWdoIHRv IHByb3ZpZGUgYSBnb29kIGFtb3VudCBvZiBoaXN0b3J5IGV2ZW4gb24gYSBidXN5IHN5c3RlbSwg d2hpbGUNCiAqIG5vdCB0YWtpbmcgdXAgbXVjaCBzcGFjZSAoPCA1TUIvZHJpdmUpLg0KICovDQoj ZGVmaW5lIENBTV9UUkFDRV9CVUZGRVJfREVGQVVMVF9DT1VOVCAxMDAwMDANCg0KLS0tLS0tLS0t LS0tLS0tLQ0KDQppb2N0bCBpbnRlcmZhY2VzIGFyZSB1c2VkIHRvIGdldCB0aGUgdHJhY2UgYnVm ZmVyIHNpemUsIHRvIHJldHJpZXZlIHRoZSBidWZmZXIgY29udGVudHMsIG9yIHRvIGNsZWFyIHRo ZSBidWZmZXIuIFRoZSBidWZmZXIgY2FuIHRoZW4gYmUgYW5hbHl6ZWQgZnJvbSB1c2Vyc3BhY2Us IG9yIHdyaXR0ZW4gdG8gYSBmaWxlIGZvciBwb3N0LXByb2Nlc3NpbmcuDQoNCi0tLS0tLS0tDQoN CiNkZWZpbmUgQ0FNX0dFVF9UUkFDRV9SRUNPUkRfQ09VTlQJX0lPUig/Pz8sID8/PywgdV9pbnQz Ml90KQ0KI2RlZmluZSBDQU1fR0VUX1RSQUNFX0JVRkZFUgkJX0lPV1IoPz8/LCA/Pz8sIGNhbV90 cmFjZV9idWZmZXJfdCkNCiNkZWZpbmUgQ0FNX0NMRUFSX1RSQUNFX0JVRkZFUgkJX0lPVyg/Pz8s ID8/PywgdV9pbnQzMl90KQ0KDQotLS0tLS0tLS0tLS0tLS0tDQoNClRvIGdldCB0aGUgYnVmZmVy Og0KDQotLS0tLS0tLQ0KDQoJY2FtX3RyYWNlX2J1ZmZlcl90IHRyYWNlID0gTlVMTDsNCglmZCA9 IG9wZW4ocGVyaXBoX25hbWUsIE9fUkRPTkxZKTsNCgllcnJvciA9IGlvY3RsKGZkLCBDQU1fR0VU X1RSQUNFX1JFQ09SRF9DT1VOVCwNCgkgICAgJnRyYWNlLnRyYWNlX2J1Zl9yZWNvcmRfY291bnQp Ow0KCXRyYWNlLnRyYWNlX2J1ZiA9IG1hbGxvYyh0cmFjZS50cmFjZV9idWZfcmVjb3JkX2NvdW50 ICoNCgkgICAgc2l6ZW9mKGNhbV90cmFjZV9yZWNvcmRfdCkpOw0KCWVycm9yID0gaW9jdGwoZmQs IENBTV9HRVRfVFJBQ0VfQlVGRkVSLCAmdHJhY2UpOw0KDQotLS0tLS0tLS0tLS0tLS0tDQoNCkJ5 IGluY2x1ZGluZyB0aGUgZnVsbCBDREIsIHRoZSBlbnRpcmUgY29tbWFuZCBjYW4gYmUgZGVjb2Rl ZCBieSBhbmFseXNpcyB0b29scy4gVG9vbHMgY2FuIGJlIHdyaXR0ZW4gdG8gcGFyc2UgdGhlIGJ1 ZmZlciBhbmQgdHJhbnNsYXRlIGNvbW1hbmQgZGF0YSBpbnRvIGh1bWFuLXJlYWRhYmxlIGRlc2Ny aXB0aW9ucywgY2FsY3VsYXRlIGVsYXBzZWQgdGltZXMgZm9yIHJlcXVlc3RzLCBwZXJmb3JtIHN0 YXRpc3RpY2FsIGFuYWx5c2lzIGJhc2VkIG9uIG9wY29kZSwgY29tbWFuZCB0eXBlLCB0cmFuc2Zl ciBzaXplLCBldGMuIENvbW1hbmQgZGVjb2RlcnMgd291bGQgbmVlZCB0byBiZSB3cml0dGVuIGZv ciBlYWNoIFBFUklQSCB0eXBlIChpLmUuIG9uZSBmb3IgQVRBLCBvbmUgZm9yIFNDU0ksIG9uZSBm b3IgTlZNZSwgZXRjLikuDQoNCi0tLS0tLS0tLS0tLS0tLS0NCg0KRWFjaCBQRVJJUEgncyBzb2Z0 YyBuZWVkcyB0byBpbmNsdWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlci1kZXZpY2UN CmJ1ZmZlci4NCg0KLS0tLS0tLS0NCg0KCXVfaW50MzJfdAkJdHJhY2VfYnVmX3JlY29yZF9jb3Vu dDsNCgl1X2ludDY0X3QJCXRyYWNlX2J1Zl9yZXF1ZXN0X2NvdW50Ow0KCWNhbV90cmFjZV9yZWNv cmRfdAkqdHJhY2VfYnVmOw0KDQotLS0tLS0tLS0tLS0tLS0tDQoNCkluIGVhY2ggU0lNLCB0aGVy ZSBzaG91bGQgYWxyZWFkeSBiZSBzb21lIHNvcnQgb2YgcmVxdWVzdCBzdHJ1Y3R1cmUsIHdoaWNo IGFzc29jaWF0ZXMgdGhlIHNvZnRjIGFuZCB0aGUgQ0RCIG9mIHRoZSByZXF1ZXN0LiBUbyB0aGF0 IHN0cnVjdHVyZSwgYWRkIGEgcG9pbnRlciB0byB0aGUgdHJhY2UgcmVjb3JkIGFzc29jaWF0ZWQg d2l0aCB0aGUgcmVxdWVzdC4NCg0KLS0tLS0tLS0NCg0KcmVxdWVzdCBzdHJ1Y3R1cmU6DQoJY2Ft X3RyYWNlX3JlY29yZF90CSp0cmFjZV9yZWM7DQoNCi0tLS0tLS0tLS0tLS0tLS0NCg0KV2hlbiBp bml0aWFsaXppbmcgdGhlIHBlci1kZXZpY2Ugc29mdGMsIGFsbG9jYXRlIGEgdHJhY2UgYnVmZmVy LiBUaGUgbnVtYmVyIG9mIHJlY29yZHMgY2FuIGJlIGhhcmQtY29kZWQsIG9yIHNldHRhYmxlIHZp YSBhIHR1bmFibGUuDQoNClRoZSBleGFtcGxlIGJlbG93IGhhcyBhIGdsb2JhbCBzaXplIGZvciBl dmVyeXRoaW5nLCBidXQgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGRvIGl0IG9uIGEgcGVyLWRl dmljZSBvciBwZXItUEVSSVBIIGJhc2lzLg0KDQotLS0tLS0tLQ0KDQoJLyoqIEluaXRpYWxpemUg cGVyLWRyaXZlIGNvbW1hbmQgdHJhY2luZyBidWZmZXIuICoqLw0KCS8qIEdldCB0aGUgYnVmZmVy IHNpemUgZnJvbSB0aGUgdHVuYWJsZS4gU2FuaXR5IGNoZWNrIGl0LiAqLw0KCXNjLT50cmFjZV9i dWZfcmVjb3JkX2NvdW50ID0gQ0FNX1RSQUNFX0JVRkZFUl9ERUZBVUxUX0NPVU5UOw0KCVRVTkFC TEVfVUxPTkdfRkVUQ0goImNhbS50cmFjZV9idWZfcmVjb3JkX2NvdW50IiwNCgkgICAgJnRyYWNl X2J1Zl9yZWNvcmRfY291bnRfdHVuYWJsZSk7DQoJaWYgKHRyYWNlX2J1Zl9yZWNvcmRfY291bnRf dHVuYWJsZSkgew0KCQkvKiBMZXNzIHRoYW4gMUsgcmVjb3JkcyBpcyB1bnVzYWJseSBmZXc7IG1v cmUgdGhhbiAxTQ0KCQkgKiByZWNvcmRzIGlzIHVudXNhYmx5IG1hbnkuDQoJCSAqLw0KCQlpZiAo KHRyYWNlX2J1Zl9yZWNvcmRfY291bnRfdHVuYWJsZSA8ICgxIDw8IDEwKSkgfHwNCgkJICAgICh0 cmFjZV9idWZfcmVjb3JkX2NvdW50X3R1bmFibGUgPiAoMSA8PCAyMCkpKSB7DQoJCQlkZXZpY2Vf cHJpbnRmKGRldiwgImNhbS50cmFjZV9idWZfcmVjb3JkX2NvdW50PSVsdSINCgkJCSAgICAiIG91 dCBvZiByYW5nZTsgc2hvdWxkIGJlIGJldHdlZW4gJXUgYW5kICV1XG4iLA0KCQkJICAgIHRyYWNl X2J1Zl9yZWNvcmRfY291bnRfdHVuYWJsZSwgKDEgPDwgMTApLA0KCQkJICAgICgxIDw8IDIwKSk7 DQoJCX0gZWxzZSB7DQoJCQlzYy0+dHJhY2VfYnVmX3JlY29yZF9jb3VudCA9ICh1X2ludDMyX3Qp DQoJCQkgICAgdHJhY2VfYnVmX3JlY29yZF9jb3VudF90dW5hYmxlOw0KCQl9DQoJfQ0KCS8qIEFs bG9jYXRlIHRoZSBidWZmZXIuICovDQoJdHJhY2VfYnVmX2J5dGVzID0gc2MtPnRyYWNlX2J1Zl9y ZWNvcmRfY291bnQgKg0KCSAgICBzaXplb2YoY2FtX3RyYWNlX3JlY29yZF90KTsNCglzYy0+dHJh Y2VfYnVmID0gbWFsbG9jKHRyYWNlX2J1Zl9ieXRlcywgTV9BRCwgTV9OT1dBSVQgfCBNX1pFUk8p Ow0KCWlmIChzYy0+dHJhY2VfYnVmID09IE5VTEwpIHsNCgkJZGV2aWNlX3ByaW50ZihkZXYsICJ1 bmFibGUgdG8gYWxsb2NhdGUgJXpkIGZvciB0cmFjZV9idWZcbiIsDQoJCSAgICB0cmFjZV9idWZf Ynl0ZXMpOw0KCQlzYy0+dHJhY2VfYnVmX3JlY29yZF9jb3VudCA9IDA7DQoJfSBlbHNlIHsNCgkJ ZGV2aWNlX3ByaW50ZihkZXYsICJhbGxvY2F0ZWQgJXpkIEAgJXAgZm9yIHRyYWNlX2J1ZlxuIiwN CgkJICAgIHRyYWNlX2J1Zl9ieXRlcywgc2MtPnRyYWNlX2J1Zik7DQoJfQ0KCS8qIFJlcXVlc3Qg Y291bnRlciwgdXNlZCBmb3IgaW5kZXhpbmcgKi8NCglzYy0+dHJhY2VfYnVmX3JlcXVlc3RfY291 bnQgPSAwOw0KDQoNCi0tLS0tLS0tLS0tLS0tLS0NCg0KLyogSW5pdGlhbCBzZXR1cCBvZiB0aGUg dHJhY2UgcmVjb3JkIGZvciBhIG5ldyByZXF1ZXN0Lg0KICoNCiAqICBMb2NhdGUgdGhlIGNpcmN1 bGFyIHBlci1kZXZpY2UgdHJhY2UgYnVmZmVyIGluIHRoZSBkcml2ZSdzIHNvZnRjLg0KICogIFBv cHVsYXRlIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IHJlY29yZCBpbiB0aGUgdHJhY2UgYnVmZmVy OyB0aGlzIGlzDQogKiAgZG9uZSBhdG9taWNhbGx5IHRvIHByZXZlbnQgY29uY3VycmVudCByZXF1 ZXN0cyBmcm9tIGdldHRpbmcgdGhlIHNhbWUNCiAqICBpbmRleC4gVGhhdCBjb3VsZCBnZXQgYSBi aXQgd2VpcmQgaWYvd2hlbiAndHJhY2VfYnVmX3JlcXVlc3RfY291bnQnDQogKiAgcm9sbHMgb3Zl ciwgaWYgdGhlIG1heGltdW0gY291bnRlciB2YWx1ZSBpcyBub3QgYSBtdWx0aXBsZSBvZg0KICog ICd0cmFjZV9idWZfcmVjb3JkX2NvdW50JyAoaS5lLiB0aGUgcmVxdWVzdCBjb3VudGVyIHJlY3lj bGVzIGluIHRoZQ0KICogIG1pZGRsZSBvZiB0aGUgYnVmZmVyKS4gQnkgdXNpbmcgYSA2NC1iaXQg cmVxdWVzdCBjb3VudGVyLCB3ZSdyZSBwcmV0dHkNCiAqICBzYWZlIC0gZXZlbiBhdCBvbmUgdHJh bnNhY3Rpb24gcGVyIG5hbm9zZWNvbmQsIHRoYXQgd2lsbCBzdGlsbCBsYXN0DQogKiAgYWJvdXQg NTg1IHllYXJzLg0KICoNCiAqICBJbml0aWFsaXplIHRoZSByZWNvcmQgYnkgemVyb2luZyBpdCBh bmQgdGhlbiBzZXR0aW5nIHRoZSBWQUxJRCBmbGFnLg0KICoNCiAqICBUaGlzIGNvdWxkIGJlIGRv bmUgYXQgYW55IHBvaW50IGJlZm9yZSBzZW5kaW5nIHRoZSByZXF1ZXN0IHRvIHRoZQ0KICogIGhh cmR3YXJlOyBuZWl0aGVyIHRoZSBDREIgZGF0YSBub3IgdGhlIHRpbWVzdGFtcHMgYXJlIGludm9s dmVkIHlldC4NCiAqLw0Kdm9pZA0KdHJhY2VfcmVjX2luaXQoY2FtX3JlcXVlc3RfdCByZXEpIHsN CglhZGFfc29mdGMgKnNjID0gKHJlcXVlc3QtPi4uLi0+c29mdGMpDQoJdV9pbnQ2NF90IHRtcCA9 IDA7DQoJaWYgKHNjICYmIHNjLT50cmFjZV9idWYpIHsNCgkJdG1wID0gYXRvbWljX2ZldGNoYWRk X2xvZygmc2MtPnRyYWNlX2J1Zl9yZXF1ZXN0X2NvdW50LCAxKTsNCgkJcmVxLT50cmFjZV9yZWMg PSAmc2MtPnRyYWNlX2J1Zlt0bXAgJQ0KCQkgICAgc2MtPnRyYWNlX2J1Zl9yZWNvcmRfY291bnRd Ow0KCQliemVybyhyZXEtPnRyYWNlX3JlYywgc2l6ZW9mKCpyZXEtPnRyYWNlX3JlYykpOw0KCQly ZXEtPnRyYWNlX3JlYy0+ZmxhZ3MgPSAoQ0FNX1RSQUNFX0ZfUEVSSVBIX1hYWCA8PCAyOCk7DQoJ CXJlcS0+dHJhY2VfcmVjLT5mbGFncyB8PSBDQU1fVFJBQ0VfRl9WQUxJRDsNCgl9IGVsc2Ugew0K CQlyZXEtPnRyYWNlX3JlYyA9IE5VTEw7DQoJfQ0KfQ0KDQotLS0tLS0tLS0tLS0tLS0tDQoNCi8q IFN0dWZmIHRoZSByZXF1ZXN0IGRhdGEgaW50byB0aGUgdHJhY2UgcmVjb3JkLg0KICoNCiAqICBJ ZiB0aGUgdHJhY2UgcmVjb3JkIGlzIHByZXNlbnQgYW5kIHZhbGlkLCBjb3B5IHRoZSBDREIgaW50 byB0aGUNCiAqICByZWNvcmQuIFNldCBDQU1fVFJBQ0VfRl9SRVFfVkFMSUQgdG8gaW5kaWNhdGUg dGhhdCB0aGUgcmVxdWVzdCBkYXRhIGlzDQogKiAgdmFsaWQsIGFuZCBJTlBST0dSRVNTIHRvIHNo b3cgdGhhdCB0aGUgcmVxdWVzdCBpcyBpbi1wcm9ncmVzcy4NCiAqDQogKiAgVGhpcyBzaG91bGQg YmUgZG9uZSBqdXN0IGJlZm9yZSBzZW5kaW5nIHRoZSByZXF1ZXN0IHRvIHRoZSBoYXJkd2FyZS4N CiAqICBUaGlzIHNob3VsZCAqbm90KiBiZSBmdXNlZCBpbnRvIHRyYWNlX3JlY19pbml0KCksIGJl Y2F1c2UNCiAqICB0cmFjZV9yZWNfaW5pdCgpIGlzIGFsc28gdXNlZCBpbiB0aGUgcmV0cnkgY2Fz ZSwgd2hlcmUgaXQgaXMgbm90DQogKiBjb3JyZWN0IHRvIGltbWVkaWF0ZWx5IHN0YXJ0IHRoZSB0 aW1lci4NCiAqLw0Kdm9pZA0KdHJhY2VfcmVjX3JlcShjYW1fcmVxdWVzdF90IHJlcSkgew0KCXN0 cnVjdCB0aW1ldmFsIHR2Ow0KCWlmIChyZXEtPnRyYWNlX3JlYyAmJiAocmVxLT50cmFjZV9yZWMt PmZsYWdzICYgQ0FNX1RSQUNFX0ZfVkFMSUQpKSB7DQoJCWJjb3B5KHJlcS0+Y2RiLCByZXEtPnRy YWNlX3JlYy0+cmVxX2NkYiwgc2l6ZW9mKHJlcS0+Y2RiKSk7DQoJCW1pY3JvdXB0aW1lKCZ0dik7 DQoJCXJlcS0+dHJhY2VfcmVjLT5yZXFfdXNlYyA9ICgodWludDY0X3QpIHR2LT50dl9zZWMgKiAx MDAwMDAwKQ0KCQkgICAgKyB0di0+dHZfdXNlYzsNCgkJcmVxLT50cmFjZV9yZWMtPmZsYWdzIHw9 DQoJCSAgICAoQ0FNX1RSQUNFX0ZfUkVRX1ZBTElEIHwgQ0FNX1RSQUNFX0ZfSU5QUk9HUkVTUyk7 DQoJfQ0KfQ0KDQotLS0tLS0tLS0tLS0tLS0tDQoNCi8qIFN0dWZmIHRoZSByZXNwb25zZSBkYXRh IGludG8gdGhlIHRyYWNlIHJlY29yZC4NCiAqDQogKiAgSWYgdGhlIHRyYWNlIHJlY29yZCBpcyBw cmVzZW50IGFuZCB2YWxpZCwgY29weSB0aGUgQ0RCICoqYXMgcmV0dXJuZWQgYnkNCiAqICB0aGUg ZHJpdmUqKiBpbnRvIHRoZSByZWNvcmQuIEF0IHRoaXMgcG9pbnQsIHdlIGFsc28gaGF2ZSB0aGUg cmVzdWx0IGZyb20NCiAqICB0aGUgY29tbWFuZCAoc3RhdHVzLCBlcnJvciwgKGFzYz8gYXNjcT8p KSwgc28gc2F2ZSB0aGVtIHRvby4gU2V0DQogKiAgQ0FNX1RSQUNFX0ZfUkVTUF9WQUxJRCB0byBp bmRpY2F0ZSB0aGF0IHRoZSByZXNwb25zZSBkYXRhIGlzIHZhbGlkLg0KICogIENsZWFyIElOUFJP R1JFU1MgYW5kIHNldCBDT01QTEVURSBpbnN0ZWFkLg0KICoNCiAqICBUaGlzIHNob3VsZCBiZSBk b25lIGp1c3QgYWZ0ZXIgZ2V0dGluZyB0aGUgcmVzcG9uc2UgaW5mb3JtYXRpb24gZnJvbSB0aGUN CiAqICBoYXJkd2FyZS4NCiAqLw0Kdm9pZA0KdHJhY2VfcmVjX3Jlc3AoY2FtX3JlcXVlc3RfdCBy ZXEpIHsNCglzdHJ1Y3QgdGltZXZhbCB0djsNCglpZiAocmVxLT50cmFjZV9yZWMgJiYgKHJlcS0+ dHJhY2VfcmVjLT5mbGFncyAmIENBTV9UUkFDRV9GX1ZBTElEKSkgew0KCQltaWNyb3VwdGltZSgm dHYpOw0KCQliY29weShyZXEtPmNkYiwgcmVxLT50cmFjZV9yZWMtPnJlc3BfY2RiLCBzaXplb2Yo cmVxLT5jZGIpKTsNCgkJcmVxLT50cmFjZV9yZWMtPnJlc3BfdXNlYyA9ICgodWludDY0X3QpIHR2 LT50dl9zZWMgKg0KCQkgICAgMTAwMDAwMCkgKyB0di0+dHZfdXNlYzsNCgkJcmVxLT50cmFjZV9y ZWMtPmZsYWdzIHw9DQoJCSAgICAoQ0FNX1RSQUNFX0ZfUkVTUF9WQUxJRCB8IENBTV9UUkFDRV9G X0NPTVBMRVRFKTsNCgkJcmVxLT50cmFjZV9yZWMtPmZsYWdzICY9IH5DQU1fVFJBQ0VfRl9JTlBS T0dSRVNTOw0KCX0NCn0NCg0KLS0tLS0tLS0tLS0tLS0tLQ0KDQovKiBVcGRhdGUgdGhlIHRyYWNl IHJlY29yZCBpZiB0aGVyZSB3YXMgYSB0aW1lb3V0Lg0KICoNCiAqICBJZiB0aGUgdHJhY2UgcmVj b3JkIGlzIHByZXNlbnQgYW5kIHZhbGlkLCBzZXQgVElNRURPVVQgdG8gaW5kaWNhdGUNCiAqICB0 aGF0IHRoZSByZXF1ZXN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVjb3JkIGV4Y2VlZGVkIGl0cyB0 aW1lb3V0Lg0KICogIFNpbmNlIHRoaXMgYXR0ZW1wdCBpcyBjb21wbGV0ZSwgY2xlYXIgSU5QUk9H UkVTUyBhbmQgc2V0IENPTVBMRVRFLg0KICoNCiAqICBUaGlzIHNob3VsZCBiZSBkb25lIGFsb25n IHdpdGggb3RoZXIgdGltZW91dCBoYW5kbGluZy4NCiAqLw0Kdm9pZA0KdHJhY2VfcmVjX3RpbWVv dXQoY2FtX3JlcXVlc3RfdCByZXEpIHsNCglpZiAocmVxLT50cmFjZV9yZWMgJiYgKHJlcS0+dHJh Y2VfcmVjLT5mbGFncyAmIENBTV9UUkFDRV9GX1ZBTElEKSkgew0KCQlyZXEtPnRyYWNlX3JlYy0+ ZmxhZ3MgfD0NCgkJICAgIChDQU1fVFJBQ0VfRl9USU1FRE9VVCB8IENBTV9UUkFDRV9GX0NPTVBM RVRFKTsNCgkJcmVxLT50cmFjZV9yZWMtPmZsYWdzICY9IH5DQU1fVFJBQ0VfRl9JTlBST0dSRVNT Ow0KCX0NCn0NCg0KLS0tLS0tLS0tLS0tLS0tLQ0KDQovKiBVcGRhdGUgdGhlIHRyYWNlIHJlY29y ZCBpZiB0aGUgcmVxdWVzdCBpcyBiZWluZyByZXRyaWVkLg0KICogIA0KICogIElmIHRoZSB0cmFj ZSByZWNvcmQgaXMgcHJlc2VudCBhbmQgdmFsaWQsIHNldCBSRVRSSUVEIHRvIGluZGljYXRlDQog KiAgdGhhdCB0aGUgcmVxdWVzdCBhc3NvY2lhdGVkIHdpdGggdGhlIHJlY29yZCBpcyBnb2luZyB0 byBiZSByZXRyaWVkLg0KICogIFNpbmNlIHRoaXMgYXR0ZW1wdCBpcyBjb21wbGV0ZSwgY2xlYXIg SU5QUk9HUkVTUyBhbmQgc2V0IENPTVBMRVRFLg0KICogIFRoZW4gZ2V0IGEgbmV3IHRyYWNlIHJl Y29yZCBmb3IgdGhlIG5ldyBhdHRlbXB0LCBjb3B5IHRoZSByZXF1ZXN0DQogKiAgY29tbWFuZCBk YXRhIHRvIHRoZSBuZXcgcmVjb3JkLCBhbmQgc2V0IElTX1JFVFJZIHRvIHNob3cgdGhhdCB0aGlz DQogKiAgaXMgYSByZXRyeSBvZiBhbiBlYXJsaWVyIHJlcXVlc3QuDQogKg0KICogIFRoaXMgc2hv dWxkIGJlIGRvbmUgYXQgdGhlIHRpbWUgdGhlIHJldHJ5IGlzIHF1ZXVlZC4NCiAqLw0Kdm9pZA0K dHJhY2VfcmVjX3JldHJ5KGNhbV9yZXF1ZXN0X3QgcmVxKSB7DQoJaWYgKHJlcS0+dHJhY2VfcmVj ICYmIChyZXEtPnRyYWNlX3JlYy0+ZmxhZ3MgJiBDQU1fVFJBQ0VfRl9WQUxJRCkpIHsNCgkJLyog Rmlyc3QsIG1hcmsgdGhlIG9yaWdpbmFsIHJlcXVlc3QgYXMgYmVpbmcgcmVxdWV1ZWQuICovDQoJ CXJlcS0+dHJhY2VfcmVjLT5mbGFncyB8PQ0KCQkgICAgKENBTV9UUkFDRV9GX1JFVFJJRUQgfCBD QU1fVFJBQ0VfRl9DT01QTEVURSk7DQoJCXJlcS0+dHJhY2VfcmVjLT5mbGFncyAmPSB+Q0FNX1RS QUNFX0ZfSU5QUk9HUkVTUzsNCgkJLyogR2V0IGEgbmV3IHJlY29yZCBmb3IgdGhlIHJldHJ5LiAq Lw0KCQl0cmFjZV9yZWNfaW5pdChyZXEpOw0KCQkvKiBNYXJrIHRoZSBuZXcgcmVjb3JkIGFzIGJl aW5nIGEgcmV0cnkuICovDQoJCXJlcS0+dHJhY2VfcmVjLT5mbGFncyB8PSBDQU1fVFJBQ0VfRl9J U19SRVRSWTsNCgl9DQp9DQoNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCkkn ZCBhcHByZWNpYXRlIGZlZWRiYWNrLCBib3RoIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxz IGFuZCBvbiB0aGUgaWRlYSBhcyBhIHdob2xlLiBTb21lIG9wZW4gcXVlc3Rpb25zIGFyZToNCg0K LSBNeSBhc3N1bXB0aW9uIGlzIHRoYXQgZWFjaCBTSU0gaGFzIGEgc3RydWN0dXJlIHRoYXQgYXNz b2NpYXRlcyBhIFBFUklQSCdzIHNvZnRjIHdpdGggdGhlIENEQiB0aGF0J3MgYmVpbmcgcHJvY2Vz c2VkLiBJdCBtaWdodCByZXF1aXJlIGRlcmVmZXJlbmNpbmcgYSBjaGFpbiBvZiBwb2ludGVycywg YnV0IGl0IHNob3VsZCBiZSB0aGVyZSBpbiBzb21lIGZhc2hpb24uDQoNCi0gVGhlIGN1cnJlbnQg aW1wbGVtZW50YXRpb24gYWRkcyBhIGZldyBpb2N0bHMgdG8gdGhlIG9sZCBhZCg0KSBkaXNrLWRl dmljZSBkcml2ZXIuIEkgd291bGQgZXhwZWN0IHRvIGFkZCB0aGUgbmV3IGlvY3RscyB0byBkYSg0 KSBhbmQgYWRhKDQpOyBpcyB0aGF0IHRoZSByaWdodCB0aGluZyB0byBkbz8NCg0KQWdhaW4sIGFu eSBmZWVkYmFjayB3b3VsZCBiZSBncmVhdGx5IGFwcHJlY2lhdGVkLiBJJ2xsIGJlIGF0IHRoZSBE ZXYvVmVuZG9yIFN1bW1pdCBuZXh0IHdlZWssIGlmIGFueW9uZSB3YW50cyB0byBkaXNjdXNzIHRo aXMgd2l0aCBtZSBpbiBwZXJzb24uDQoNClRoYW5rcywNCg0KUmF2aQ0K