From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3CBD5FCB628 for ; Fri, 6 Mar 2026 16:35:07 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 02D1A10ED95; Fri, 6 Mar 2026 16:34:59 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=igalia.com header.i=@igalia.com header.b="sCN+jwwC"; dkim-atps=neutral Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) by gabe.freedesktop.org (Postfix) with ESMTPS id C9E8710ED81; Fri, 6 Mar 2026 16:34:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=RxoLiB4Yr6loxpn2kLg/fH9CbmISN52TcZ9DHIx18oQ=; b=sCN+jwwC17cDkhXgoom84hJXI6 cQfu7mLKLIEyDe3tkF3pUelMyj+wSePWfd0D1UiJwIzeHhcqgo5Dnyyaxinfa9pBHQ68X6VSIe2FG KInz96RkbSGQlBiBqUjuE25g4nuPmA17yz6rbMkAN9yy3NlnYWZfGi9ewBLIG8TxqMGPC+L/mUtJn 0K7mLteJymhXNuK7lBEFnvzLRy6TsgJfYoVrNllY+tm8weEdjNs8xrAXLbz/lcJAWMPiYSyCXY1u/ M+bqb1Y+1hwUUDKWcOTDafnVLpBedxeQiCYV91/RqXKJeToKufEVoM6qxlWWsmeVOI0pfWdgN5fD2 lC6J85PQ==; Received: from [90.240.106.137] (helo=localhost) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1vyY8b-00APRr-1m; Fri, 06 Mar 2026 17:34:53 +0100 From: Tvrtko Ursulin To: amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Cc: kernel-dev@igalia.com, intel-xe@lists.freedesktop.org, Danilo Krummrich , Philipp Stanner , Tvrtko Ursulin , =?UTF-8?q?Christian=20K=C3=B6nig?= , Matthew Brost , Pierre-Eric Pelloux-Prayer Subject: [PATCH v7 04/29] drm/sched: Add some scheduling quality unit tests Date: Fri, 6 Mar 2026 16:34:20 +0000 Message-ID: <20260306163445.97243-5-tvrtko.ursulin@igalia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260306163445.97243-1-tvrtko.ursulin@igalia.com> References: <20260306163445.97243-1-tvrtko.ursulin@igalia.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" VG8gbWFrZSBldmFsdWF0aW5nIGRpZmZlcmVudCBzY2hlZHVsaW5nIHBvbGljaWVzIGVhc2llciAo bm8gbmVlZCBmb3IKZXh0ZXJuYWwgYmVuY2htYXJrcykgYW5kIHBlcmZlY3RseSByZXBlYXRhYmxl LCBsZXRzIGFkZCBzb21lIHN5bnRoZXRpYwp3b3JrbG9hZHMgYnVpbHQgdXBvbiBtb2NrIHNjaGVk dWxlciB1bml0IHRlc3QgaW5mcmFzdHJ1Y3R1cmUuCgpGb2N1cyBpcyBvbiB0d28gcGFyYWxsZWwg Y2xpZW50cyAodHdvIHRocmVhZHMpIHN1Ym1pdHRpbmcgZGlmZmVyZW50IGpvYgpwYXR0ZXJucyBh bmQgbG9nZ2luZyB0aGVpciBwcm9ncmVzcyBhbmQgc29tZSBvdmVyYWxsIG1ldHJpY3MuIFRoaXMg aXMKcmVwZWF0ZWQgZm9yIGJvdGggc2NoZWR1bGVyIGNyZWRpdCBsaW1pdCAxIGFuZCAyLgoKRXhh bXBsZSB0ZXN0IG91dHB1dDoKCiAgTm9ybWFsIGFuZCBsb3c6CiAgICAgICAgICAgICAgICAgICAg cGN0MSBjcHMxIHFkMTsgIHBjdDIgY3BzMiBxZDIKICAgICAgICArICAgICAwbXM6ICAgMCAgICAg MCAgICAwOyAgIDAgICAgIDAgICAgMAogICAgICAgICsgICAxMDRtczogMTAwICAxMjQwICAxMTI7 IDEwMCAgMTI0MCAgMTI1CiAgICAgICAgKyAgIDIwOW1zOiAxMDAgICAgIDAgICA5OTsgMTAwICAg ICAwICAxMjUKICAgICAgICArICAgMzEzbXM6IDEwMCAgICAgMCAgIDg2OyAxMDAgICAgIDAgIDEy NQogICAgICAgICsgICA0MTltczogMTAwICAgICAwICAgNzM7IDEwMCAgICAgMCAgMTI1CiAgICAg ICAgKyAgIDUyNG1zOiAxMDAgICAgIDAgICA2MDsgMTAwICAgICAwICAxMjUKICAgICAgICArICAg NjI4bXM6IDEwMCAgICAgMCAgIDQ3OyAxMDAgICAgIDAgIDEyNQogICAgICAgICsgICA3MzFtczog MTAwICAgICAwICAgMzQ7IDEwMCAgICAgMCAgMTI1CiAgICAgICAgKyAgIDgzNm1zOiAxMDAgICAg IDAgICAyMTsgMTAwICAgICAwICAxMjUKICAgICAgICArICAgOTM5bXM6IDEwMCAgICAgMCAgICA4 OyAxMDAgICAgIDAgIDEyNQogICAgICAgICsgIDEwNDNtczogICAgICAgICAgICAgICA7IDEwMCAg ICAgMCAgMTIwCiAgICAgICAgKyAgMTE0N21zOiAgICAgICAgICAgICAgIDsgMTAwICAgICAwICAx MDcKICAgICAgICArICAxMjUybXM6ICAgICAgICAgICAgICAgOyAxMDAgICAgIDAgICA5NAogICAg ICAgICsgIDEzNTVtczogICAgICAgICAgICAgICA7IDEwMCAgICAgMCAgIDgxCiAgICAgICAgKyAg MTQ1OW1zOiAgICAgICAgICAgICAgIDsgMTAwICAgICAwICAgNjgKICAgICAgICArICAxNTYzbXM6 ICAgICAgICAgICAgICAgOyAxMDAgICAgIDAgICA1NQogICAgICAgICsgIDE2NjdtczogICAgICAg ICAgICAgICA7IDEwMCAgICAgMCAgIDQyCiAgICAgICAgKyAgMTc3MW1zOiAgICAgICAgICAgICAg IDsgMTAwICAgICAwICAgMjkKICAgICAgICArICAxODc1bXM6ICAgICAgICAgICAgICAgOyAxMDAg ICAgIDAgICAxNgogICAgICAgICsgIDE5NzltczogICAgICAgICAgICAgICA7IDEwMCAgICAgMCAg ICAzCiAgICAwOiBwcmlvPW5vcm1hbCBzeW5jPTAgZWxhcHNlZF9tcz0xMDE1bXMgKGlkZWFsX21z PTEwMDBtcykgY3ljbGVfdGltZShtaW4sYXZnLG1heCk9MTM0LDIyMiw5NzggdXMgbGF0ZW5jeV90 aW1lKG1pbixhdmcsbWF4KT0xMzQsMjIyLDk3OAp1cwogICAgMTogcHJpbz1sb3cgc3luYz0wIGVs YXBzZWRfbXM9MjAwOW1zIChpZGVhbF9tcz0xMDAwbXMpIGN5Y2xlX3RpbWUobWluLGF2ZyxtYXgp PTEzNCwyMTUsODA2IHVzIGxhdGVuY3lfdGltZShtaW4sYXZnLG1heCk9MTM0LDIxNSw4MDYgdXMK ClRoZXJlIHdlIGhhdmUgdHdvIGNsaWVudHMgcmVwcmVzZW50ZWQgaW4gdGhlIHR3byByZXNwZWN0 aXZlIGNvbHVtbnMsIHdpdGgKdGhlaXIgcHJvZ3Jlc3MgbG9nZ2VkIHJvdWdobHkgZXZlcnkgMTAw IG1pbGxpc2Vjb25kcy4gVGhlIG1ldHJpY3MgYXJlOgoKIC0gcGN0IC0gUGVyY2VudGFnZSBwcm9n cmVzcyBvZiB0aGUgam9iIHN1Ym1pdCBwYXJ0CiAtIGNwcyAtIEN5Y2xlcyBwZXIgc2Vjb25kCiAt IHFkICAtIFF1ZXVlIGRlcHRoIC0gbnVtYmVyIG9mIHN1Ym1pdHRlZCB1bmZpbmlzaGVkIGpvYnMK ClRoZSBjeWNsZXMgcGVyIHNlY29uZCBtZXRyaWMgaXMgaW5oZXJlbnQgdG8gdGhlIGZhY3QgdGhh dCB3b3JrbG9hZApwYXR0ZXJucyBhcmUgYSBkYXRhIGRyaXZlbiBjeWNsaW5nIHNlcXVlbmNlIG9m OgoKIC0gU3VibWl0IDEuLk4gam9icwogLSBXYWl0IGZvciBOdGggam9iIHRvIGZpbmlzaCAob3B0 aW9uYWwpCiAtIFNsZWVwIChvcHRpb25hbCkKIC0gUmVwZWF0IGZyb20gc3RhcnQKCkluIHRoaXMg cGFydGljdWxhciBleGFtcGxlIHdlIGhhdmUgYSBub3JtYWwgcHJpb3JpdHkgYW5kIGEgbG93IHBy aW9yaXR5CmNsaWVudCBib3RoIHNwYW1taW5nIHRoZSBzY2hlZHVsZXIgd2l0aCA4bXMgam9icyB3 aXRoIG5vIHN5bmMgYW5kIG5vCnNsZWVwaW5nLiBIZW5jZSB0aGV5IGJ1aWxkIHZlcnkgZGVlcCBx dWV1ZXMgYW5kIHdlIGNhbiBzZWUgaG93IHRoZSBsb3cKcHJpb3JpdHkgY2xpZW50IGlzIGNvbXBs ZXRlbHkgc3RhcnZlZCB1bnRpbCB0aGUgbm9ybWFsIGZpbmlzaGVzLgoKTm90ZSB0aGF0IHRoZSBQ Q1QgYW5kIENQUyBtZXRyaWNzIGFyZSBpcnJlbGV2YW50IGZvciAidW5zeW5jIiBjbGllbnRzCnNp bmNlIHRoZXkgbWFuYWdlIHRvIGNvbXBsZXRlIGFsbCBvZiB0aGVpciBjeWNsZXMgaW5zdGFudGFu ZW91c2x5LgoKQSBkaWZmZXJlbnQgZXhhbXBsZSB3b3VsZCBiZToKCiAgSGVhdnkgYW5kIGludGVy YWN0aXZlOgogICAgICAgICAgICAgICAgICAgIHBjdDEgY3BzMSBxZDE7ICBwY3QyIGNwczIgcWQy CiAgICAgICAgKyAgICAgMG1zOiAgIDAgICAgIDAgICAgMDsgICAwICAgICAwICAgIDAKICAgICAg ICArICAgMTA2bXM6ICAgNSAgICA0MCAgICAzOyAgIDUgICAgNDAgICAgMAogICAgICAgICsgICAy MDltczogICA5ICAgIDQwICAgIDA7ICAgOSAgICA0MCAgICAwCiAgICAgICAgKyAgIDMxNG1zOiAg MTQgICAgNTAgICAgMzsgIDE0ICAgIDUwICAgIDAKICAgICAgICArICAgNDE3bXM6ICAxOCAgICA0 MCAgICAwOyAgMTggICAgNDAgICAgMAogICAgICAgICsgICA1MjJtczogIDIzICAgIDUwICAgIDM7 ICAyMyAgICA1MCAgICAwCiAgICAgICAgKyAgIDYyNW1zOiAgMjcgICAgNDAgICAgMDsgIDI3ICAg IDQwICAgIDEKICAgICAgICArICAgNzI5bXM6ICAzMiAgICA1MCAgICAwOyAgMzIgICAgNTAgICAg MAogICAgICAgICsgICA4MzNtczogIDM2ICAgIDQwICAgIDE7ICAzNiAgICA0MCAgICAwCiAgICAg ICAgKyAgIDkzN21zOiAgNDAgICAgNDAgICAgMDsgIDQwICAgIDQwICAgIDAKICAgICAgICArICAx MDQxbXM6ICA0NSAgICA1MCAgICAwOyAgNDUgICAgNTAgICAgMAogICAgICAgICsgIDExNDZtczog IDQ5ICAgIDQwICAgIDE7ICA0OSAgICA0MCAgICAxCiAgICAgICAgKyAgMTI0OW1zOiAgNTQgICAg NTAgICAgMDsgIDU0ICAgIDUwICAgIDAKICAgICAgICArICAxMzUzbXM6ICA1OCAgICA0MCAgICAx OyAgNTggICAgNDAgICAgMAogICAgICAgICsgIDE0NTdtczogIDYyICAgIDQwICAgIDA7ICA2MiAg ICA0MCAgICAxCiAgICAgICAgKyAgMTU2MW1zOiAgNjcgICAgNTAgICAgMDsgIDY3ICAgIDUwICAg IDAKICAgICAgICArICAxNjY1bXM6ICA3MSAgICA0MCAgICAxOyAgNzEgICAgNDAgICAgMAogICAg ICAgICsgIDE3NzJtczogIDc2ICAgIDUwICAgIDA7ICA3NiAgICA1MCAgICAwCiAgICAgICAgKyAg MTg3N21zOiAgODAgICAgNDAgICAgMTsgIDgwICAgIDQwICAgIDAKICAgICAgICArICAxOTgxbXM6 ICA4NCAgICA0MCAgICAwOyAgODQgICAgNDAgICAgMAogICAgICAgICsgIDIwODVtczogIDg5ICAg IDUwICAgIDA7ICA4OSAgICA1MCAgICAwCiAgICAgICAgKyAgMjE4OW1zOiAgOTMgICAgNDAgICAg MTsgIDkzICAgIDQwICAgIDAKICAgICAgICArICAyMjkzbXM6ICA5NyAgICA0MCAgICAwOyAgOTcg ICAgNDAgICAgMQoKSW4gdGhpcyBjYXNlIGNsaWVudCBvbmUgaXMgc3VibWl0dGluZyAzeCAyLjVt cyBqb2JzLCB3YWl0aW5nIGZvciB0aGUgM3JkCmFuZCB0aGVuIHNsZWVwaW5nIGZvciAyLjVtcyAo aW4gZWZmZWN0IGNhdXNpbmcgNzUlIEdQVSBsb2FkLCBtaW51cyB0aGUKb3ZlcmhlYWRzKS4gU2Vj b25kIGNsaWVudCBpcyBzdWJtaXR0aW5nIDFtcyBqb2JzLCB3YWl0aW5nIGZvciBlYWNoIHRvCmZp bmlzaCBhbmQgc2xlZXBpbmcgZm9yIDltcyAoZWZmZWN0aXZlIDEwJSBHUFUgbG9hZCkuIEhlcmUg d2UgY2FuIHNlZQp0aGUgUENUIGFuZCBDUFMgcmVmbGVjdGluZyByZWFsIHByb2dyZXNzLgoKU2ln bmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGlnYWxpYS5jb20+CkNj OiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+CkNjOiBEYW5pbG8g S3J1bW1yaWNoIDxkYWtyQGtlcm5lbC5vcmc+CkNjOiBNYXR0aGV3IEJyb3N0IDxtYXR0aGV3LmJy b3N0QGludGVsLmNvbT4KQ2M6IFBoaWxpcHAgU3Rhbm5lciA8cGhhc3RhQGtlcm5lbC5vcmc+CkNj OiBQaWVycmUtRXJpYyBQZWxsb3V4LVByYXllciA8cGllcnJlLWVyaWMucGVsbG91eC1wcmF5ZXJA YW1kLmNvbT4KQWNrZWQtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1k LmNvbT4KQWNrZWQtYnk6IERhbmlsbyBLcnVtbXJpY2ggPGRha3JAa2VybmVsLm9yZz4KLS0tCiBk cml2ZXJzL2dwdS9kcm0vc2NoZWR1bGVyL3Rlc3RzL01ha2VmaWxlICAgICAgfCAgIDMgKy0KIC4u Li9ncHUvZHJtL3NjaGVkdWxlci90ZXN0cy90ZXN0c19zY2hlZHVsZXIuYyB8IDY5NiArKysrKysr KysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgNjk4IGluc2VydGlvbnMoKyksIDEgZGVsZXRp b24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vc2NoZWR1bGVyL3Rlc3Rz L3Rlc3RzX3NjaGVkdWxlci5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3NjaGVkdWxl ci90ZXN0cy9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvdGVzdHMvTWFrZWZp bGUKaW5kZXggNWJmNzA3YmFkMzczLi45ZWMxODVmYmJjMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9zY2hlZHVsZXIvdGVzdHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Nj aGVkdWxlci90ZXN0cy9NYWtlZmlsZQpAQCAtMiw2ICsyLDcgQEAKIAogZHJtLXNjaGVkLXRlc3Rz LXkgOj0gXAogICAgICAgICBtb2NrX3NjaGVkdWxlci5vIFwKLSAgICAgICAgdGVzdHNfYmFzaWMu bworICAgICAgICB0ZXN0c19iYXNpYy5vIFwKKyAgICAgICAgdGVzdHNfc2NoZWR1bGVyLm8KIAog b2JqLSQoQ09ORklHX0RSTV9TQ0hFRF9LVU5JVF9URVNUKSArPSBkcm0tc2NoZWQtdGVzdHMubwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3NjaGVkdWxlci90ZXN0cy90ZXN0c19zY2hlZHVs ZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvdGVzdHMvdGVzdHNfc2NoZWR1bGVyLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40YTAyYmM0NDc5MTQKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vc2NoZWR1bGVyL3Rlc3RzL3Rlc3RzX3Nj aGVkdWxlci5jCkBAIC0wLDAgKzEsNjk2IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMAorLyogQ29weXJpZ2h0IChjKSAyMDI1IFZhbHZlIENvcnBvcmF0aW9uICovCisKKyNp bmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNs dWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgorCisjaW5jbHVk ZSAic2NoZWRfdGVzdHMuaCIKKworLyoKKyAqIERSTSBzY2hlZHVsZXIgc2NoZWR1bGVyIHRlc3Rz IGV4ZXJjaXNlIGxvYWQgYmFsYW5jaW5nIGRlY2lzaW9ucyBpZS4gZW50aXR5CisgKiBzZWxlY3Rp b24gbG9naWMuCisgKi8KKworc3RhdGljIGludCBkcm1fc2NoZWRfc2NoZWR1bGVyX2luaXQoc3Ry dWN0IGt1bml0ICp0ZXN0KQoreworCXN0cnVjdCBkcm1fbW9ja19zY2hlZHVsZXIgKnNjaGVkOwor CisJc2NoZWQgPSBkcm1fbW9ja19zY2hlZF9uZXcodGVzdCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQp OworCXNjaGVkLT5iYXNlLmNyZWRpdF9saW1pdCA9IDE7CisKKwl0ZXN0LT5wcml2ID0gc2NoZWQ7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcm1fc2NoZWRfc2NoZWR1bGVyX2luaXQy KHN0cnVjdCBrdW5pdCAqdGVzdCkKK3sKKwlzdHJ1Y3QgZHJtX21vY2tfc2NoZWR1bGVyICpzY2hl ZDsKKworCXNjaGVkID0gZHJtX21vY2tfc2NoZWRfbmV3KHRlc3QsIE1BWF9TQ0hFRFVMRV9USU1F T1VUKTsKKwlzY2hlZC0+YmFzZS5jcmVkaXRfbGltaXQgPSAyOworCisJdGVzdC0+cHJpdiA9IHNj aGVkOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRybV9zY2hlZF9zY2hlZHVsZXJf ZXhpdChzdHJ1Y3Qga3VuaXQgKnRlc3QpCit7CisJc3RydWN0IGRybV9tb2NrX3NjaGVkdWxlciAq c2NoZWQgPSB0ZXN0LT5wcml2OworCisJZHJtX21vY2tfc2NoZWRfZmluaShzY2hlZCk7Cit9CisK K3N0YXRpYyB2b2lkIGRybV9zY2hlZF9zY2hlZHVsZXJfcXVldWVfb3ZlcmhlYWQoc3RydWN0IGt1 bml0ICp0ZXN0KQoreworCXN0cnVjdCBkcm1fbW9ja19zY2hlZHVsZXIgKnNjaGVkID0gdGVzdC0+ cHJpdjsKKwlzdHJ1Y3QgZHJtX21vY2tfc2NoZWRfZW50aXR5ICplbnRpdHk7CisJY29uc3QgdW5z aWduZWQgaW50IGpvYl91cyA9IDEwMDA7CisJY29uc3QgdW5zaWduZWQgaW50IGpvYnMgPSAxMDAw OworCWNvbnN0IHVuc2lnbmVkIGludCB0b3RhbF91cyA9IGpvYnMgKiBqb2JfdXM7CisJc3RydWN0 IGRybV9tb2NrX3NjaGVkX2pvYiAqam9iLCAqZmlyc3Q7CisJa3RpbWVfdCBzdGFydCwgZW5kOwor CWJvb2wgZG9uZTsKKwlpbnQgaTsKKworCS8qCisJICogRGVlcCBxdWV1ZSBqb2IgYXQgYSB0aW1l IHByb2Nlc3NpbmcgKHNpbmdsZSBjcmVkaXQpLgorCSAqCisJICogVGhpcyBtZWFzdXJlcyB0aGUg b3ZlcmhlYWQgb2YgcGlja2luZyBhbmQgcHJvY2Vzc2luZyBhIGpvYiBhdCBhIHRpbWUKKwkgKiBi eSBjb21wYXJpbmcgdGhlIGlkZWFsIHRvdGFsICJHUFUiIHRpbWUgb2YgYWxsIHN1Ym1pdHRlZCBq b2JzIHZlcnN1cworCSAqIHRoZSB0aW1lIGFjdHVhbGx5IHRha2VuLgorCSAqLworCisJS1VOSVRf QVNTRVJUX0VRKHRlc3QsIHNjaGVkLT5iYXNlLmNyZWRpdF9saW1pdCwgMSk7CisKKwllbnRpdHkg PSBkcm1fbW9ja19zY2hlZF9lbnRpdHlfbmV3KHRlc3QsCisJCQkJCSAgIERSTV9TQ0hFRF9QUklP UklUWV9OT1JNQUwsCisJCQkJCSAgIHNjaGVkKTsKKworCWZvciAoaSA9IDA7IGkgPD0gam9iczsg aSsrKSB7CisJCWpvYiA9IGRybV9tb2NrX3NjaGVkX2pvYl9uZXcodGVzdCwgZW50aXR5KTsKKwkJ aWYgKGkgPT0gMCkKKwkJCWZpcnN0ID0gam9iOyAvKiBFeHRyYSBmaXJzdCBqb2IgYmxvY2tzIHRo ZSBxdWV1ZSAqLworCQllbHNlCisJCQlkcm1fbW9ja19zY2hlZF9qb2Jfc2V0X2R1cmF0aW9uX3Vz KGpvYiwgam9iX3VzKTsKKwkJZHJtX21vY2tfc2NoZWRfam9iX3N1Ym1pdChqb2IpOworCX0KKwor CWRvbmUgPSBkcm1fbW9ja19zY2hlZF9qb2Jfd2FpdF9zY2hlZHVsZWQoZmlyc3QsIEhaKTsKKwlL VU5JVF9BU1NFUlRfVFJVRSh0ZXN0LCBkb25lKTsKKworCXN0YXJ0ID0ga3RpbWVfZ2V0KCk7CisJ aSA9IGRybV9tb2NrX3NjaGVkX2FkdmFuY2Uoc2NoZWQsIDEpOyAvKiBSZWxlYXNlIHRoZSBxdWV1 ZSAqLworCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCBpLCAxKTsKKworCS8qIFdhaXQgd2l0aCBhIHNh ZmUgbWFyZ2luIHRvIGF2b2lkIGV2ZXJ5IGZhaWxpbmcuICovCisJZG9uZSA9IGRybV9tb2NrX3Nj aGVkX2pvYl93YWl0X2ZpbmlzaGVkKGpvYiwKKwkJCQkJCXVzZWNzX3RvX2ppZmZpZXModG90YWxf dXMpICogNSk7CisJZW5kID0ga3RpbWVfZ2V0KCk7CisJS1VOSVRfQVNTRVJUX1RSVUUodGVzdCwg ZG9uZSk7CisKKwlwcl9pbmZvKCJFeHBlY3RlZCAldXVzLCBhY3R1YWwgJWxsZHVzXG4iLAorCQl0 b3RhbF91cywKKwkJa3RpbWVfdG9fdXMoa3RpbWVfc3ViKGVuZCwgc3RhcnQpKSk7CisKKwlkcm1f bW9ja19zY2hlZF9lbnRpdHlfZnJlZShlbnRpdHkpOworfQorCitzdGF0aWMgdm9pZCBkcm1fc2No ZWRfc2NoZWR1bGVyX3BpbmdfcG9uZyhzdHJ1Y3Qga3VuaXQgKnRlc3QpCit7CisJc3RydWN0IGRy bV9tb2NrX3NjaGVkX2pvYiAqam9iLCAqZmlyc3QsICpwcmV2ID0gTlVMTDsKKwlzdHJ1Y3QgZHJt X21vY2tfc2NoZWR1bGVyICpzY2hlZCA9IHRlc3QtPnByaXY7CisJc3RydWN0IGRybV9tb2NrX3Nj aGVkX2VudGl0eSAqZW50aXR5WzJdOworCWNvbnN0IHVuc2lnbmVkIGludCBqb2JfdXMgPSAxMDAw OworCWNvbnN0IHVuc2lnbmVkIGludCBqb2JzID0gMTAwMDsKKwljb25zdCB1bnNpZ25lZCBpbnQg dG90YWxfdXMgPSBqb2JzICogam9iX3VzOworCWt0aW1lX3Qgc3RhcnQsIGVuZDsKKwlib29sIGRv bmU7CisJaW50IGk7CisKKwkvKgorCSAqIFR3byBlbnRpdGl0ZXMgaW4gaW50ZXItZGVwZW5kZW5j eSBjaGFpbi4KKwkgKgorCSAqIFRoaXMgbWVhc3VyZXMgdGhlIG92ZXJoZWFkIG9mIHBpY2tpbmcg YW5kIHByb2Nlc3NpbmcgYSBqb2IgYXQgYSB0aW1lLAorCSAqIHdoZXJlIGVhY2ggam9iIGRlcGVu ZHMgb24gdGhlIHByZXZpb3VzIG9uZSBmcm9tIHRoZSBkaWZmZmVyZW50CisJICogZW50aXR5LCBi eSBjb21wYXJpbmcgdGhlIGlkZWFsIHRvdGFsICJHUFUiIHRpbWUgb2YgYWxsIHN1Ym1pdHRlZCBq b2JzCisJICogdmVyc3VzIHRoZSB0aW1lIGFjdHVhbGx5IHRha2VuLgorCSAqLworCisJS1VOSVRf QVNTRVJUX0VRKHRlc3QsIHNjaGVkLT5iYXNlLmNyZWRpdF9saW1pdCwgMSk7CisKKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShlbnRpdHkpOyBpKyspCisJCWVudGl0eVtpXSA9IGRybV9tb2Nr X3NjaGVkX2VudGl0eV9uZXcodGVzdCwKKwkJCQkJCSAgICAgIERSTV9TQ0hFRF9QUklPUklUWV9O T1JNQUwsCisJCQkJCQkgICAgICBzY2hlZCk7CisKKwlmb3IgKGkgPSAwOyBpIDw9IGpvYnM7IGkr KykgeworCQlqb2IgPSBkcm1fbW9ja19zY2hlZF9qb2JfbmV3KHRlc3QsIGVudGl0eVtpICYgMV0p OworCQlpZiAoaSA9PSAwKQorCQkJZmlyc3QgPSBqb2I7IC8qIEV4dHJhIGZpcnN0IGpvYiBibG9j a3MgdGhlIHF1ZXVlICovCisJCWVsc2UKKwkJCWRybV9tb2NrX3NjaGVkX2pvYl9zZXRfZHVyYXRp b25fdXMoam9iLCBqb2JfdXMpOworCQlpZiAocHJldikKKwkJCWRybV9zY2hlZF9qb2JfYWRkX2Rl cGVuZGVuY3koJmpvYi0+YmFzZSwKKwkJCQkJCSAgICAgZG1hX2ZlbmNlX2dldCgmcHJldi0+YmFz ZS5zX2ZlbmNlLT5maW5pc2hlZCkpOworCQlkcm1fbW9ja19zY2hlZF9qb2Jfc3VibWl0KGpvYik7 CisJCXByZXYgPSBqb2I7CisJfQorCisJZG9uZSA9IGRybV9tb2NrX3NjaGVkX2pvYl93YWl0X3Nj aGVkdWxlZChmaXJzdCwgSFopOworCUtVTklUX0FTU0VSVF9UUlVFKHRlc3QsIGRvbmUpOworCisJ c3RhcnQgPSBrdGltZV9nZXQoKTsKKwlpID0gZHJtX21vY2tfc2NoZWRfYWR2YW5jZShzY2hlZCwg MSk7IC8qIFJlbGVhc2UgdGhlIHF1ZXVlICovCisJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIGksIDEp OworCisJLyogV2FpdCB3aXRoIGEgc2FmZSBtYXJnaW4gdG8gYXZvaWQgZXZlcnkgZmFpbGluZy4g Ki8KKwlkb25lID0gZHJtX21vY2tfc2NoZWRfam9iX3dhaXRfZmluaXNoZWQoam9iLAorCQkJCQkJ dXNlY3NfdG9famlmZmllcyh0b3RhbF91cykgKiA1KTsKKwllbmQgPSBrdGltZV9nZXQoKTsKKwlL VU5JVF9BU1NFUlRfVFJVRSh0ZXN0LCBkb25lKTsKKworCXByX2luZm8oIkV4cGVjdGVkICV1dXMs IGFjdHVhbCAlbGxkdXNcbiIsCisJCXRvdGFsX3VzLAorCQlrdGltZV90b191cyhrdGltZV9zdWIo ZW5kLCBzdGFydCkpKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVudGl0eSk7IGkr KykKKwkJZHJtX21vY2tfc2NoZWRfZW50aXR5X2ZyZWUoZW50aXR5W2ldKTsKK30KKworc3RhdGlj IHN0cnVjdCBrdW5pdF9jYXNlIGRybV9zY2hlZF9zY2hlZHVsZXJfb3ZlcmhlYWRfdGVzdHNbXSA9 IHsKKwlLVU5JVF9DQVNFX1NMT1coZHJtX3NjaGVkX3NjaGVkdWxlcl9xdWV1ZV9vdmVyaGVhZCks CisJS1VOSVRfQ0FTRV9TTE9XKGRybV9zY2hlZF9zY2hlZHVsZXJfcGluZ19wb25nKSwKKwl7fQor fTsKKworc3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBkcm1fc2NoZWRfc2NoZWR1bGVyX292ZXJo ZWFkID0geworCS5uYW1lID0gImRybV9zY2hlZF9zY2hlZHVsZXJfb3ZlcmhlYWRfdGVzdHMiLAor CS5pbml0ID0gZHJtX3NjaGVkX3NjaGVkdWxlcl9pbml0LAorCS5leGl0ID0gZHJtX3NjaGVkX3Nj aGVkdWxlcl9leGl0LAorCS50ZXN0X2Nhc2VzID0gZHJtX3NjaGVkX3NjaGVkdWxlcl9vdmVyaGVh ZF90ZXN0cywKK307CisKKy8qCisgKiBzdHJ1Y3QgZHJtX3NjaGVkX2NsaWVudF9wYXJhbXMgLSBk ZXNjcmliZSBhIHdvcmtsb2FkIGVtaXR0ZWQgZnJvbSBhIGNsaWVudAorICoKKyAqIEEgc2ltdWxh dGVkIGNsaWVudCB3aWxsIGNyZWF0ZSBhbiBlbnRpdHkgd2l0aCBhIHNjaGVkdWxpbmcgQHByaW9y aXR5IGFuZCBlbWl0CisgKiBqb2JzIGluIGEgbG9vcCB3aGVyZSBlYWNoIGl0ZXJhdGlvbiB3aWxs IGNvbnNpc3Qgb2Y6CisgKgorICogMS4gU3VibWl0IEBqb2JfY250IGpvYnMsIGVhY2ggd2l0aCBh IHNldCBkdXJhdGlvbiBvZiBAam9iX3VzLgorICogMi4gSWYgQHN5bmMgaXMgdHJ1ZSB3YWl0IGZv ciBsYXN0IHN1Ym1pdHRlZCBqb2IgdG8gZmluaXNoLgorICogMy4gU2xlZXAgZm9yIEB3YWl0X3Vz IG1pY3JvLXNlY29uZHMuCisgKiA0LiBSZXBlYXQuCisgKi8KK3N0cnVjdCBkcm1fc2NoZWRfY2xp ZW50X3BhcmFtcyB7CisJZW51bSBkcm1fc2NoZWRfcHJpb3JpdHkgcHJpb3JpdHk7CisJdW5zaWdu ZWQgaW50IGpvYl9jbnQ7CisJdW5zaWduZWQgaW50IGpvYl91czsKKwlib29sIHN5bmM7CisJdW5z aWduZWQgaW50IHdhaXRfdXM7Cit9OworCitzdHJ1Y3QgZHJtX3NjaGVkX3Rlc3RfcGFyYW1zIHsK Kwljb25zdCBjaGFyICpkZXNjcmlwdGlvbjsKKwlzdHJ1Y3QgZHJtX3NjaGVkX2NsaWVudF9wYXJh bXMgY2xpZW50WzJdOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fc2NoZWRfdGVzdF9w YXJhbXMgZHJtX3NjaGVkX2Nhc2VzW10gPSB7CisJeworCQkuZGVzY3JpcHRpb24gPSAiTm9ybWFs IHByaW9yaXR5IGFuZCBub3JtYWwgcHJpb3JpdHkiLAorCQkuY2xpZW50WzBdID0geworCQkJLnBy aW9yaXR5ID0gRFJNX1NDSEVEX1BSSU9SSVRZX05PUk1BTCwKKwkJCS5qb2JfY250ID0gMSwKKwkJ CS5qb2JfdXMgPSA4MDAwLAorCQkJLndhaXRfdXMgPSAwLAorCQkJLnN5bmMgPSBmYWxzZSwKKwkJ fSwKKwkJLmNsaWVudFsxXSA9IHsKKwkJCS5wcmlvcml0eSA9IERSTV9TQ0hFRF9QUklPUklUWV9O T1JNQUwsCisJCQkuam9iX2NudCA9IDEsCisJCQkuam9iX3VzID0gODAwMCwKKwkJCS53YWl0X3Vz ID0gMCwKKwkJCS5zeW5jID0gZmFsc2UsCisJCX0sCisJfSwKKwl7CisJCS5kZXNjcmlwdGlvbiA9 ICJOb3JtYWwgcHJpb3JpdHkgYW5kIGxvdyBwcmlvcml0eSIsCisJCS5jbGllbnRbMF0gPSB7CisJ CQkucHJpb3JpdHkgPSBEUk1fU0NIRURfUFJJT1JJVFlfTk9STUFMLAorCQkJLmpvYl9jbnQgPSAx LAorCQkJLmpvYl91cyA9IDgwMDAsCisJCQkud2FpdF91cyA9IDAsCisJCQkuc3luYyA9IGZhbHNl LAorCQl9LAorCQkuY2xpZW50WzFdID0geworCQkJLnByaW9yaXR5ID0gRFJNX1NDSEVEX1BSSU9S SVRZX0xPVywKKwkJCS5qb2JfY250ID0gMSwKKwkJCS5qb2JfdXMgPSA4MDAwLAorCQkJLndhaXRf dXMgPSAwLAorCQkJLnN5bmMgPSBmYWxzZSwKKwkJfSwKKwl9LAorCXsKKwkJLmRlc2NyaXB0aW9u ID0gIkhpZ2ggcHJpb3JpdHkgYW5kIG5vcm1hbCBwcmlvcml0eSIsCisJCS5jbGllbnRbMF0gPSB7 CisJCQkucHJpb3JpdHkgPSBEUk1fU0NIRURfUFJJT1JJVFlfSElHSCwKKwkJCS5qb2JfY250ID0g MSwKKwkJCS5qb2JfdXMgPSA4MDAwLAorCQkJLndhaXRfdXMgPSAwLAorCQkJLnN5bmMgPSBmYWxz ZSwKKwkJfSwKKwkJLmNsaWVudFsxXSA9IHsKKwkJCS5wcmlvcml0eSA9IERSTV9TQ0hFRF9QUklP UklUWV9OT1JNQUwsCisJCQkuam9iX2NudCA9IDEsCisJCQkuam9iX3VzID0gODAwMCwKKwkJCS53 YWl0X3VzID0gMCwKKwkJCS5zeW5jID0gZmFsc2UsCisJCX0sCisJfSwKKwl7CisJCS5kZXNjcmlw dGlvbiA9ICJIaWdoIHByaW9yaXR5IGFuZCBsb3cgcHJpb3JpdHkiLAorCQkuY2xpZW50WzBdID0g eworCQkJLnByaW9yaXR5ID0gRFJNX1NDSEVEX1BSSU9SSVRZX0hJR0gsCisJCQkuam9iX2NudCA9 IDEsCisJCQkuam9iX3VzID0gODAwMCwKKwkJCS53YWl0X3VzID0gMCwKKwkJCS5zeW5jID0gZmFs c2UsCisJCX0sCisJCS5jbGllbnRbMV0gPSB7CisJCQkucHJpb3JpdHkgPSBEUk1fU0NIRURfUFJJ T1JJVFlfTE9XLAorCQkJLmpvYl9jbnQgPSAxLAorCQkJLmpvYl91cyA9IDgwMDAsCisJCQkud2Fp dF91cyA9IDAsCisJCQkuc3luYyA9IGZhbHNlLAorCQl9LAorCX0sCisJeworCQkuZGVzY3JpcHRp b24gPSAiNTAlIGFuZCA1MCUiLAorCQkuY2xpZW50WzBdID0geworCQkJLnByaW9yaXR5ID0gRFJN X1NDSEVEX1BSSU9SSVRZX05PUk1BTCwKKwkJCS5qb2JfY250ID0gMSwKKwkJCS5qb2JfdXMgPSAx NTAwLAorCQkJLndhaXRfdXMgPSAxNTAwLAorCQkJLnN5bmMgPSB0cnVlLAorCQl9LAorCQkuY2xp ZW50WzFdID0geworCQkJLnByaW9yaXR5ID0gRFJNX1NDSEVEX1BSSU9SSVRZX05PUk1BTCwKKwkJ CS5qb2JfY250ID0gMSwKKwkJCS5qb2JfdXMgPSAyNTAwLAorCQkJLndhaXRfdXMgPSAyNTAwLAor CQkJLnN5bmMgPSB0cnVlLAorCQl9LAorCX0sCisJeworCQkuZGVzY3JpcHRpb24gPSAiNTAlIGFu ZCA1MCUgbG93IHByaW9yaXR5IiwKKwkJLmNsaWVudFswXSA9IHsKKwkJCS5wcmlvcml0eSA9IERS TV9TQ0hFRF9QUklPUklUWV9OT1JNQUwsCisJCQkuam9iX2NudCA9IDEsCisJCQkuam9iX3VzID0g MTUwMCwKKwkJCS53YWl0X3VzID0gMTUwMCwKKwkJCS5zeW5jID0gdHJ1ZSwKKwkJfSwKKwkJLmNs aWVudFsxXSA9IHsKKwkJCS5wcmlvcml0eSA9IERSTV9TQ0hFRF9QUklPUklUWV9MT1csCisJCQku am9iX2NudCA9IDEsCisJCQkuam9iX3VzID0gMjUwMCwKKwkJCS53YWl0X3VzID0gMjUwMCwKKwkJ CS5zeW5jID0gdHJ1ZSwKKwkJfSwKKwl9LAorCXsKKwkJLmRlc2NyaXB0aW9uID0gIjUwJSBoaWdo IHByaW9yaXR5IGFuZCA1MCUiLAorCQkuY2xpZW50WzBdID0geworCQkJLnByaW9yaXR5ID0gRFJN X1NDSEVEX1BSSU9SSVRZX0hJR0gsCisJCQkuam9iX2NudCA9IDEsCisJCQkuam9iX3VzID0gMTUw MCwKKwkJCS53YWl0X3VzID0gMTUwMCwKKwkJCS5zeW5jID0gdHJ1ZSwKKwkJfSwKKwkJLmNsaWVu dFsxXSA9IHsKKwkJCS5wcmlvcml0eSA9IERSTV9TQ0hFRF9QUklPUklUWV9OT1JNQUwsCisJCQku am9iX2NudCA9IDEsCisJCQkuam9iX3VzID0gMjUwMCwKKwkJCS53YWl0X3VzID0gMjUwMCwKKwkJ CS5zeW5jID0gdHJ1ZSwKKwkJfSwKKwl9LAorCXsKKwkJLmRlc2NyaXB0aW9uID0gIkxvdyBwcmlv cml0eSBob2cgYW5kIGludGVyYWN0aXZlIGNsaWVudCIsCisJCS5jbGllbnRbMF0gPSB7CisJCQku cHJpb3JpdHkgPSBEUk1fU0NIRURfUFJJT1JJVFlfTE9XLAorCQkJLmpvYl9jbnQgPSAzLAorCQkJ LmpvYl91cyA9IDI1MDAsCisJCQkud2FpdF91cyA9IDUwMCwKKwkJCS5zeW5jID0gZmFsc2UsCisJ CX0sCisJCS5jbGllbnRbMV0gPSB7CisJCQkucHJpb3JpdHkgPSBEUk1fU0NIRURfUFJJT1JJVFlf Tk9STUFMLAorCQkJLmpvYl9jbnQgPSAxLAorCQkJLmpvYl91cyA9IDUwMCwKKwkJCS53YWl0X3Vz ID0gMTAwMDAsCisJCQkuc3luYyA9IHRydWUsCisJCX0sCisJfSwKKwl7CisJCS5kZXNjcmlwdGlv biA9ICJIZWF2eSByZW5kZXJpbmcgYW5kIGludGVyYWN0aXZlIGNsaWVudCIsCisJCS5jbGllbnRb MF0gPSB7CisJCQkucHJpb3JpdHkgPSBEUk1fU0NIRURfUFJJT1JJVFlfTk9STUFMLAorCQkJLmpv Yl9jbnQgPSAzLAorCQkJLmpvYl91cyA9IDI1MDAsCisJCQkud2FpdF91cyA9IDI1MDAsCisJCQku c3luYyA9IHRydWUsCisJCX0sCisJCS5jbGllbnRbMV0gPSB7CisJCQkucHJpb3JpdHkgPSBEUk1f U0NIRURfUFJJT1JJVFlfTk9STUFMLAorCQkJLmpvYl9jbnQgPSAxLAorCQkJLmpvYl91cyA9IDEw MDAsCisJCQkud2FpdF91cyA9IDkwMDAsCisJCQkuc3luYyA9IHRydWUsCisJCX0sCisJfSwKKwl7 CisJCS5kZXNjcmlwdGlvbiA9ICJWZXJ5IGhlYXZ5IHJlbmRlcmluZyBhbmQgaW50ZXJhY3RpdmUg Y2xpZW50IiwKKwkJLmNsaWVudFswXSA9IHsKKwkJCS5wcmlvcml0eSA9IERSTV9TQ0hFRF9QUklP UklUWV9OT1JNQUwsCisJCQkuam9iX2NudCA9IDQsCisJCQkuam9iX3VzID0gNTAwMDAsCisJCQku d2FpdF91cyA9IDEsCisJCQkuc3luYyA9IHRydWUsCisJCX0sCisJCS5jbGllbnRbMV0gPSB7CisJ CQkucHJpb3JpdHkgPSBEUk1fU0NIRURfUFJJT1JJVFlfTk9STUFMLAorCQkJLmpvYl9jbnQgPSAx LAorCQkJLmpvYl91cyA9IDEwMDAsCisJCQkud2FpdF91cyA9IDkwMDAsCisJCQkuc3luYyA9IHRy dWUsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyB2b2lkCitkcm1fc2NoZWRfZGVzYyhjb25zdCBz dHJ1Y3QgZHJtX3NjaGVkX3Rlc3RfcGFyYW1zICpwYXJhbXMsIGNoYXIgKmRlc2MpCit7CisJc3Ry c2NweShkZXNjLCBwYXJhbXMtPmRlc2NyaXB0aW9uLCBLVU5JVF9QQVJBTV9ERVNDX1NJWkUpOwor fQorCitLVU5JVF9BUlJBWV9QQVJBTShkcm1fc2NoZWRfc2NoZWR1bGVyX3R3b19jbGllbnRzLAor CQkgIGRybV9zY2hlZF9jYXNlcywKKwkJICBkcm1fc2NoZWRfZGVzYyk7CisKKy8qCisgKiBzdHJ1 Y3QgdGVzdF9jbGllbnRfc3RhdHMgLSB0cmFjayBjbGllbnQgc3RhdHMKKyAqCisgKiBGb3IgZWFj aCBjbGllbnQgZXhlY3V0aW5nIGEgc2ltdWxhdGVkIHdvcmtsb2FkIHdlIHRyYWNrIHNvbWUgdGlt aW5ncyBmb3IKKyAqIHdoaWNoIHdlIGFyZSBpbnRlcmVzdGVkIGluIHRoZSBtaW5pbXVtIG9mIGFs bCBpdGVyYXRpb25zIChAbWluX3VzKSwgbWF4aW11bQorICogKEBtYXhfdXMpIGFuZCB0aGUgb3Zl cmFsbCB0b3RhbCBmb3IgYWxsIGl0ZXJhdGlvbnMgKEB0b3RfdXMpLgorICovCitzdHJ1Y3QgdGVz dF9jbGllbnRfc3RhdHMgeworCXVuc2lnbmVkIGludCBtaW5fdXM7CisJdW5zaWduZWQgaW50IG1h eF91czsKKwl1bnNpZ25lZCBsb25nIHRvdF91czsKK307CisKKy8qCisgKiBzdHJ1Y3QgdGVzdF9j bGllbnQgLSBhIHNpbXVsYXRlZCB1c2Vyc3BhY2UgY2xpZW50IHN1Ym1pdHRpbmcgc2NoZWR1bGVy IHdvcmsKKyAqCisgKiBFYWNoIGNsaWVudCBleGVjdXRpbmcgYSBzaW11bGF0ZWQgd29ya2xvYWQg aXMgcmVwcmVzZW50ZWQgYnkgb25lIG9mIHRoZXNlLgorICoKKyAqIEVhY2ggb2YgdGhlbSBpbnN0 YW50aWF0ZXMgYSBzY2hlZHVsaW5nIEBlbnRpdHkgYW5kIGV4ZWN1dGVzIGEgd29ya2xvYWRzIGFz CisgKiBkZWZpbmVkIGluIEBwYXJhbXMuIEJhc2VkIG9uIHRob3NlIEBwYXJhbXMgdGhlIHRoZW9y ZXRpY2FsIGV4ZWN1dGlvbiB0aW1lIG9mCisgKiB0aGUgY2xpZW50IGlzIGNhbGN1bGF0ZWQgYXMg QGlkZWFsX2R1cmF0aW9uLCB3aGlsZSB0aGUgYWN0dWFsIHdhbGwgdGltZSBpcworICogdHJhY2tl ZCBpbiBAZHVyYXRpb24gKGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIEBzdGFydCBhbmQgQGVuZCBj bGllbnQgdGltZS0KKyAqIHN0YW1wcykuCisgKgorICogTnVtZXJpY2FsIEBpZCBpcyBhc3NpZ25l ZCB0byBlYWNoIGZvciBsb2dnaW5nIHB1cnBvc2VzLgorICoKKyAqIEB3b3JrZXIgYW5kIEB3b3Jr IGFyZSB1c2VkIHRvIHByb3ZpZGUgYW4gaW5kZXBlbmRlbnQgZXhlY3V0aW9uIGNvbnRleHQgZnJv bQorICogd2hpY2ggc2NoZWR1bGVyIGpvYnMgYXJlIHN1Ym1pdHRlZC4KKyAqCisgKiBEdXJpbmcg ZXhlY3V0aW9uIHN0YXRpc3RpY3Mgb24gaG93IGxvbmcgaXQgdG9vayB0byBzdWJtaXQgYW5kIGV4 ZWN1dGUgb25lCisgKiBpdGVyYXRpb24gKHdoZXRoZXIgb3Igbm90IHN5bmNocm9ub3VzKSBpcyBr ZXB0IGluIEBjeWNsZV90aW1lLCB3aGlsZQorICogQGxhdGVuY3lfdGltZSB0cmFja3MgdGhlIEBj eWNsZV90aW1lIG1pbnVzIHRoZSBpZGVhbCBkdXJhdGlvbiBvZiB0aGUgb25lCisgKiBjeWNsZS4K KyAqCisgKiBPbmNlIHRoZSBjbGllbnQgaGFzIGNvbXBsZXRlZCB0aGUgc2V0IG51bWJlciBvZiBp dGVyYXRpb25zIGl0IHdpbGwgd3JpdGUgdGhlCisgKiBjb21wbGV0aW9uIHN0YXR1cyBpbnRvIEBk b25lLgorICovCitzdHJ1Y3QgdGVzdF9jbGllbnQgeworCXN0cnVjdCBrdW5pdAkqdGVzdDsgLyog QmFja3BvaW50ZXIgdG8gdGhlIGt1bml0IHRlc3QuICovCisKKwlzdHJ1Y3QgZHJtX21vY2tfc2No ZWRfZW50aXR5CSplbnRpdHk7CisJc3RydWN0IGt0aHJlYWRfd29ya2VyCQkqd29ya2VyOworCXN0 cnVjdCBrdGhyZWFkX3dvcmsJCXdvcms7CisKKwlzdHJ1Y3QgZHJtX3NjaGVkX2NsaWVudF9wYXJh bXMJcGFyYW1zOworCisJdW5zaWduZWQgaW50CWlkOworCWt0aW1lX3QJCWR1cmF0aW9uOworCWt0 aW1lX3QJCWlkZWFsX2R1cmF0aW9uOworCXVuc2lnbmVkCWN5Y2xlczsKKwl1bnNpZ25lZCBpbnQJ Y3ljbGU7CisJa3RpbWVfdAkJc3RhcnQ7CisJa3RpbWVfdAkJZW5kOworCWJvb2wJCWRvbmU7CisK KwlzdHJ1Y3QgdGVzdF9jbGllbnRfc3RhdHMJY3ljbGVfdGltZTsKKwlzdHJ1Y3QgdGVzdF9jbGll bnRfc3RhdHMJbGF0ZW5jeV90aW1lOworfTsKKworc3RhdGljIHZvaWQKK3VwZGF0ZV9zdGF0cyhz dHJ1Y3QgdGVzdF9jbGllbnRfc3RhdHMgKnN0YXRzLCB1bnNpZ25lZCBpbnQgdXMpCit7CisJaWYg KHVzID4gc3RhdHMtPm1heF91cykKKwkJc3RhdHMtPm1heF91cyA9IHVzOworCWlmICh1cyA8IHN0 YXRzLT5taW5fdXMpCisJCXN0YXRzLT5taW5fdXMgPSB1czsKKwlzdGF0cy0+dG90X3VzICs9IHVz OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitnZXRfc3RhdHNfYXZnKHN0cnVjdCB0ZXN0X2Ns aWVudF9zdGF0cyAqc3RhdHMsIHVuc2lnbmVkIGludCBjeWNsZXMpCit7CisJcmV0dXJuIGRpdl91 NjQoc3RhdHMtPnRvdF91cywgY3ljbGVzKTsKK30KKworc3RhdGljIHZvaWQgZHJtX3NjaGVkX2Ns aWVudF93b3JrKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspCit7CisJc3RydWN0IHRlc3RfY2xp ZW50ICpjbGllbnQgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCpjbGllbnQpLCB3b3JrKTsK Kwljb25zdCBsb25nIHN5bmNfd2FpdCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOworCXVuc2lnbmVk IGludCBjeWNsZSwgd29ya191cywgcGVyaW9kX3VzOworCXN0cnVjdCBkcm1fbW9ja19zY2hlZF9q b2IgKmpvYiA9IE5VTEw7CisKKwl3b3JrX3VzID0gY2xpZW50LT5wYXJhbXMuam9iX2NudCAqIGNs aWVudC0+cGFyYW1zLmpvYl91czsKKwlwZXJpb2RfdXMgPSB3b3JrX3VzICsgY2xpZW50LT5wYXJh bXMud2FpdF91czsKKwljbGllbnQtPmN5Y2xlcyA9CisJCURJVl9ST1VORF9VUCgodW5zaWduZWQg aW50KWt0aW1lX3RvX3VzKGNsaWVudC0+ZHVyYXRpb24pLAorCQkJICAgICBwZXJpb2RfdXMpOwor CWNsaWVudC0+aWRlYWxfZHVyYXRpb24gPSB1c190b19rdGltZShjbGllbnQtPmN5Y2xlcyAqIHBl cmlvZF91cyk7CisKKwljbGllbnQtPnN0YXJ0ID0ga3RpbWVfZ2V0KCk7CisKKwlmb3IgKGN5Y2xl ID0gMDsgY3ljbGUgPCBjbGllbnQtPmN5Y2xlczsgY3ljbGUrKykgeworCQlrdGltZV90IGN5Y2xl X3RpbWU7CisJCXVuc2lnbmVkIGludCBiYXRjaDsKKwkJdW5zaWduZWQgbG9uZyB1czsKKworCQlp ZiAoUkVBRF9PTkNFKGNsaWVudC0+ZG9uZSkpCisJCQlicmVhazsKKworCQljeWNsZV90aW1lID0g a3RpbWVfZ2V0KCk7CisJCWZvciAoYmF0Y2ggPSAwOyBiYXRjaCA8IGNsaWVudC0+cGFyYW1zLmpv Yl9jbnQ7IGJhdGNoKyspIHsKKwkJCWpvYiA9IGRybV9tb2NrX3NjaGVkX2pvYl9uZXcoY2xpZW50 LT50ZXN0LAorCQkJCQkJICAgICBjbGllbnQtPmVudGl0eSk7CisJCQlkcm1fbW9ja19zY2hlZF9q b2Jfc2V0X2R1cmF0aW9uX3VzKGpvYiwKKwkJCQkJCQkgICBjbGllbnQtPnBhcmFtcy5qb2JfdXMp OworCQkJZHJtX21vY2tfc2NoZWRfam9iX3N1Ym1pdChqb2IpOworCQl9CisKKwkJaWYgKGNsaWVu dC0+cGFyYW1zLnN5bmMpCisJCQlkcm1fbW9ja19zY2hlZF9qb2Jfd2FpdF9maW5pc2hlZChqb2Is IHN5bmNfd2FpdCk7CisKKwkJY3ljbGVfdGltZSA9IGt0aW1lX3N1YihrdGltZV9nZXQoKSwgY3lj bGVfdGltZSk7CisJCXVzID0ga3RpbWVfdG9fdXMoY3ljbGVfdGltZSk7CisJCXVwZGF0ZV9zdGF0 cygmY2xpZW50LT5jeWNsZV90aW1lLCB1cyk7CisJCWlmIChrdGltZV90b191cyhjeWNsZV90aW1l KSA+PSAobG9uZyl3b3JrX3VzKQorCQkJdXMgPSBrdGltZV90b191cyhjeWNsZV90aW1lKSAtIHdv cmtfdXM7CisJCWVsc2UgaWYgKFdBUk5fT05fT05DRShjbGllbnQtPnBhcmFtcy5zeW5jKSkgLyog R1BVIGpvYiB0b29rIGxlc3MgdGhhbiBleHBlY3RlZC4gKi8KKwkJCXVzID0gMDsKKwkJdXBkYXRl X3N0YXRzKCZjbGllbnQtPmxhdGVuY3lfdGltZSwgdXMpOworCQlXUklURV9PTkNFKGNsaWVudC0+ Y3ljbGUsIGN5Y2xlKTsKKworCQlpZiAoUkVBRF9PTkNFKGNsaWVudC0+ZG9uZSkpCisJCQlicmVh azsKKworCQlpZiAoY2xpZW50LT5wYXJhbXMud2FpdF91cykKKwkJCWZzbGVlcChjbGllbnQtPnBh cmFtcy53YWl0X3VzKTsKKwkJZWxzZSBpZiAoIWNsaWVudC0+cGFyYW1zLnN5bmMpCisJCQljb25k X3Jlc2NoZWQoKTsgLyogRG8gbm90IGhvZyB0aGUgQ1BVIGlmIGZ1bGx5IGFzeW5jLiAqLworCX0K KworCWNsaWVudC0+ZG9uZSA9IGRybV9tb2NrX3NjaGVkX2pvYl93YWl0X2ZpbmlzaGVkKGpvYiwg c3luY193YWl0KTsKKwljbGllbnQtPmVuZCA9IGt0aW1lX2dldCgpOworfQorCitzdGF0aWMgY29u c3QgY2hhciAqcHJpb19zdHIoZW51bSBkcm1fc2NoZWRfcHJpb3JpdHkgcHJpbykKK3sKKwlzd2l0 Y2ggKHByaW8pIHsKKwljYXNlIERSTV9TQ0hFRF9QUklPUklUWV9LRVJORUw6CisJCXJldHVybiAi a2VybmVsIjsKKwljYXNlIERSTV9TQ0hFRF9QUklPUklUWV9MT1c6CisJCXJldHVybiAibG93IjsK KwljYXNlIERSTV9TQ0hFRF9QUklPUklUWV9OT1JNQUw6CisJCXJldHVybiAibm9ybWFsIjsKKwlj YXNlIERSTV9TQ0hFRF9QUklPUklUWV9ISUdIOgorCQlyZXR1cm4gImhpZ2giOworCWRlZmF1bHQ6 CisJCXJldHVybiAiPz8/IjsKKwl9Cit9CisKK3N0YXRpYyBib29sIGNsaWVudF9kb25lKHN0cnVj dCB0ZXN0X2NsaWVudCAqY2xpZW50KQoreworCXJldHVybiBSRUFEX09OQ0UoY2xpZW50LT5kb25l KTsgLyogUkVBRF9PTkNFIHRvIGRvY3VtZW50IGxvY2tsZXNzIHJlYWQgZnJvbSBhIGxvb3AuICov Cit9CisKK3N0YXRpYyB2b2lkIGRybV9zY2hlZF9zY2hlZHVsZXJfdHdvX2NsaWVudHNfdGVzdChz dHJ1Y3Qga3VuaXQgKnRlc3QpCit7CisJY29uc3Qgc3RydWN0IGRybV9zY2hlZF90ZXN0X3BhcmFt cyAqcGFyYW1zID0gdGVzdC0+cGFyYW1fdmFsdWU7CisJc3RydWN0IGRybV9tb2NrX3NjaGVkdWxl ciAqc2NoZWQgPSB0ZXN0LT5wcml2OworCXN0cnVjdCB0ZXN0X2NsaWVudCBjbGllbnRbMl0gPSB7 IH07CisJdW5zaWduZWQgaW50IHByZXZfY3ljbGVbMl0gPSB7IH07CisJdW5zaWduZWQgaW50IGks IGo7CisJa3RpbWVfdCBzdGFydDsKKworCS8qCisJICogU2FtZSBqb2Igc3RyZWFtIGZyb20gdHdv IGNsaWVudHMuCisJICovCisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbGllbnQpOyBp KyspCisJCWNsaWVudFtpXS5lbnRpdHkgPQorCQkJZHJtX21vY2tfc2NoZWRfZW50aXR5X25ldyh0 ZXN0LAorCQkJCQkJICBwYXJhbXMtPmNsaWVudFtpXS5wcmlvcml0eSwKKwkJCQkJCSAgc2NoZWQp OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2xpZW50KTsgaSsrKSB7CisJCWNsaWVu dFtpXS50ZXN0ID0gdGVzdDsKKwkJY2xpZW50W2ldLmlkID0gaTsKKwkJY2xpZW50W2ldLmR1cmF0 aW9uID0gbXNfdG9fa3RpbWUoMTAwMCk7CisJCWNsaWVudFtpXS5wYXJhbXMgPSBwYXJhbXMtPmNs aWVudFtpXTsKKwkJY2xpZW50W2ldLmN5Y2xlX3RpbWUubWluX3VzID0gfjBVOworCQljbGllbnRb aV0ubGF0ZW5jeV90aW1lLm1pbl91cyA9IH4wVTsKKwkJY2xpZW50W2ldLndvcmtlciA9CisJCQlr dGhyZWFkX2NyZWF0ZV93b3JrZXIoMCwgIiVzLSV1IiwgX19mdW5jX18sIGkpOworCQlpZiAoSVNf RVJSKGNsaWVudFtpXS53b3JrZXIpKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQkJ CWt0aHJlYWRfZGVzdHJveV93b3JrZXIoY2xpZW50W2pdLndvcmtlcik7CisJCQlLVU5JVF9GQUlM KHRlc3QsICJGYWlsZWQgdG8gY3JlYXRlIHdvcmtlciFcbiIpOworCQl9CisKKwkJa3RocmVhZF9p bml0X3dvcmsoJmNsaWVudFtpXS53b3JrLCBkcm1fc2NoZWRfY2xpZW50X3dvcmspOworCX0KKwor CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNsaWVudCk7IGkrKykKKwkJa3RocmVhZF9xdWV1 ZV93b3JrKGNsaWVudFtpXS53b3JrZXIsICZjbGllbnRbaV0ud29yayk7CisKKwkvKgorCSAqIFRo ZSBjbGllbnRzICh3b3JrZXJzKSBjYW4gYmUgYSBtaXggb2YgYXN5bmMgKGRlZXAgc3VibWlzc2lv biBxdWV1ZSksCisJICogc3luYyAob25lIGpvYiBhdCBhIHRpbWUpLCBvciBzb21ldGhpbmcgaW4g YmV0d2Vlbi4gVGhlcmVmb3JlIGl0IGlzCisJICogZGlmZmljdWx0IHRvIGRpc3BsYXkgYSBzaW5n bGUgbWV0cmljIHJlcHJlc2VudGluZyB0aGVpciBwcm9ncmVzcy4KKwkgKgorCSAqIEVhY2ggc3Ry dWN0IGRybV9zY2hlZF9jbGllbnRfcGFyYW1zIGRlc2NyaWJlcyB0aGUgYWN0dWFsIHN1Ym1pc3Np b24KKwkgKiBwYXR0ZXJuIHdoaWNoIGhhcHBlbnMgaW4gdGhlIGZvbGxvd2luZyBzdGVwczoKKwkg KiAgMS4gU3VibWl0IE4gam9icworCSAqICAyLiBXYWl0IGZvciBsYXN0IHN1Ym1pdHRlZCBqb2Ig dG8gZmluaXNoCisJICogIDMuIFNsZWVwIGZvciBVIG1pY3JvLXNlY29uZHMKKwkgKiAgNC4gR290 byAxLiBmb3IgQyBjeWNsZXMKKwkgKgorCSAqIFdoZXJlIG51bWJlciBvZiBjeWNsZXMgaXMgY2Fs Y3VsYXRlZCB0byBtYXRjaCB0aGUgdGFyZ2V0IGNsaWVudAorCSAqIGR1cmF0aW9uIGZyb20gdGhl IHJlc3BlY3RpdmUgc3RydWN0IGRybV9zY2hlZF90ZXN0X3BhcmFtcy4KKwkgKgorCSAqIFRvIGFz c2VzIHNjaGVkdWxpbmcgYmVoYXZpb3VyIHdoYXQgd2Ugb3V0cHV0IGZvciBib3RoIGNsaWVudHMg aXM6CisJICogIC0gcGN0OiBQZXJjZW50YWdlIHByb2dyZXNzIG9mIHRoZSBqb2JzIHN1Ym1pdHRl ZAorCSAqICAtIGNwczogIkN5Y2xlcyIgcGVyIHNlY29uZCAod2hlcmUgb25lIGN5Y2xlIGlzIG9u ZSBjb21wbGV0ZQorCSAqICAgICAgICAgaXRlcmF0aW9uIGZyb20gdGhlIGFib3ZlKQorCSAqICAt ICBxZDogTnVtYmVyIG9mIG91dHN0YW5kaW5nIGpvYnMgaW4gdGhlIGNsaWVudC9lbnRpdHkKKwkg Ki8KKworCXByX2luZm8oCisiIFtwY3RdIC0gSm9iIHN1bWlzc2lvbiBwcm9ncmVzc1xuIgorIiBb Y3BzXSAtIEN5Y2xlcyBwZXIgc2Vjb25kXG4iCisiICBbcWRdIC0gTnVtYmVyIG9mIG91dHN0YW5k aW5nIGpvYnMgaW4gdGhlIGNsaWVudC9lbnRpdHlcbiIpOworCXByX2luZm8oIiVzOlxuXHQgICAg ICAgICAgICBwY3QxIGNwczEgcWQxOyAgcGN0MiBjcHMyIHFkMlxuIiwKKwkJcGFyYW1zLT5kZXNj cmlwdGlvbik7CisJc3RhcnQgPSBrdGltZV9nZXQoKTsKKwl3aGlsZSAoIWNsaWVudF9kb25lKCZj bGllbnRbMF0pIHx8ICFjbGllbnRfZG9uZSgmY2xpZW50WzFdKSkgeworCQljb25zdCB1bnNpZ25l ZCBpbnQgcGVyaW9kX21zID0gMTAwOworCQljb25zdCB1bnNpZ25lZCBpbnQgZnJlcXVlbmN5ID0g MTAwMCAvIHBlcmlvZF9tczsKKwkJdW5zaWduZWQgaW50IHBjdFsyXSwgcWRbMl0sIGN5Y2xlWzJd LCBjcHNbMl07CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2xpZW50KTsgaSsrKSB7 CisJCQlxZFtpXSA9IHNwc2NfcXVldWVfY291bnQoJmNsaWVudFtpXS5lbnRpdHktPmJhc2Uuam9i X3F1ZXVlKTsKKwkJCWN5Y2xlW2ldID0gUkVBRF9PTkNFKGNsaWVudFtpXS5jeWNsZSk7CisJCQlj cHNbaV0gPSBESVZfUk9VTkRfVVAoMTAwICogZnJlcXVlbmN5ICoKKwkJCQkJICAgICAgKGN5Y2xl W2ldIC0gcHJldl9jeWNsZVtpXSksCisJCQkJCSAgICAgIDEwMCk7CisJCQlpZiAoY2xpZW50W2ld LmN5Y2xlcykKKwkJCQlwY3RbaV0gPSBESVZfUk9VTkRfVVAoMTAwICogKDEgKyBjeWNsZVtpXSks CisJCQkJCQkgICAgICBjbGllbnRbaV0uY3ljbGVzKTsKKwkJCWVsc2UKKwkJCQlwY3RbaV0gPSAw OworCQkJcHJldl9jeWNsZVtpXSA9IGN5Y2xlW2ldOworCQl9CisKKwkJaWYgKGNsaWVudF9kb25l KCZjbGllbnRbMF0pKQorCQkJcHJfaW5mbygiXHQrJTZsbGRtczogICAgICAgICAgICAgICA7ICUz dSAlNXUgJTR1XG4iLAorCQkJCWt0aW1lX3RvX21zKGt0aW1lX3N1YihrdGltZV9nZXQoKSwgc3Rh cnQpKSwKKwkJCQlwY3RbMV0sIGNwc1sxXSwgcWRbMV0pOworCQllbHNlIGlmIChjbGllbnRfZG9u ZSgmY2xpZW50WzFdKSkKKwkJCXByX2luZm8oIlx0KyU2bGxkbXM6ICUzdSAlNXUgJTR1O1xuIiwK KwkJCQlrdGltZV90b19tcyhrdGltZV9zdWIoa3RpbWVfZ2V0KCksIHN0YXJ0KSksCisJCQkJcGN0 WzBdLCBjcHNbMF0sIHFkWzBdKTsKKwkJZWxzZQorCQkJcHJfaW5mbygiXHQrJTZsbGRtczogJTN1 ICU1dSAlNHU7ICUzdSAlNXUgJTR1XG4iLAorCQkJCWt0aW1lX3RvX21zKGt0aW1lX3N1YihrdGlt ZV9nZXQoKSwgc3RhcnQpKSwKKwkJCQlwY3RbMF0sIGNwc1swXSwgcWRbMF0sCisJCQkJcGN0WzFd LCBjcHNbMV0sIHFkWzFdKTsKKworCQltc2xlZXAocGVyaW9kX21zKTsKKwl9CisKKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShjbGllbnQpOyBpKyspIHsKKwkJa3RocmVhZF9mbHVzaF93b3Jr KCZjbGllbnRbaV0ud29yayk7CisJCWt0aHJlYWRfZGVzdHJveV93b3JrZXIoY2xpZW50W2ldLndv cmtlcik7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2xpZW50KTsgaSsrKQor CQlLVU5JVF9BU1NFUlRfVFJVRSh0ZXN0LCBjbGllbnRbaV0uZG9uZSk7CisKKwlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRShjbGllbnQpOyBpKyspIHsKKwkJcHJfaW5mbygiICAgICV1OiBwcmlv PSVzIHN5bmM9JXUgZWxhcHNlZF9tcz0lbGxkbXMgKGlkZWFsX21zPSVsbGRtcykgY3ljbGVfdGlt ZShtaW4sYXZnLG1heCk9JXUsJXUsJXUgdXMgbGF0ZW5jeV90aW1lKG1pbixhdmcsbWF4KT0ldSwl dSwldSB1cyIsCisJCQlpLAorCQkJcHJpb19zdHIocGFyYW1zLT5jbGllbnRbaV0ucHJpb3JpdHkp LAorCQkJcGFyYW1zLT5jbGllbnRbaV0uc3luYywKKwkJCWt0aW1lX3RvX21zKGt0aW1lX3N1Yihj bGllbnRbaV0uZW5kLCBjbGllbnRbaV0uc3RhcnQpKSwKKwkJCWt0aW1lX3RvX21zKGNsaWVudFtp XS5pZGVhbF9kdXJhdGlvbiksCisJCQljbGllbnRbaV0uY3ljbGVfdGltZS5taW5fdXMsCisJCQln ZXRfc3RhdHNfYXZnKCZjbGllbnRbaV0uY3ljbGVfdGltZSwgY2xpZW50W2ldLmN5Y2xlcyksCisJ CQljbGllbnRbaV0uY3ljbGVfdGltZS5tYXhfdXMsCisJCQljbGllbnRbaV0ubGF0ZW5jeV90aW1l Lm1pbl91cywKKwkJCWdldF9zdGF0c19hdmcoJmNsaWVudFtpXS5sYXRlbmN5X3RpbWUsIGNsaWVu dFtpXS5jeWNsZXMpLAorCQkJY2xpZW50W2ldLmxhdGVuY3lfdGltZS5tYXhfdXMpOworCQlkcm1f bW9ja19zY2hlZF9lbnRpdHlfZnJlZShjbGllbnRbaV0uZW50aXR5KTsKKwl9Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3Qga3VuaXRfYXR0cmlidXRlcyBkcm1fc2NoZWRfc2NoZWR1bGVyX3R3b19j bGllbnRzX2F0dHIgPSB7CisJLnNwZWVkID0gS1VOSVRfU1BFRURfU0xPVywKK307CisKK3N0YXRp YyBzdHJ1Y3Qga3VuaXRfY2FzZSBkcm1fc2NoZWRfc2NoZWR1bGVyX3R3b19jbGllbnRzX3Rlc3Rz W10gPSB7CisJS1VOSVRfQ0FTRV9QQVJBTV9BVFRSKGRybV9zY2hlZF9zY2hlZHVsZXJfdHdvX2Ns aWVudHNfdGVzdCwKKwkJCSAgICAgIGRybV9zY2hlZF9zY2hlZHVsZXJfdHdvX2NsaWVudHNfZ2Vu X3BhcmFtcywKKwkJCSAgICAgIGRybV9zY2hlZF9zY2hlZHVsZXJfdHdvX2NsaWVudHNfYXR0ciks CisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qga3VuaXRfc3VpdGUgZHJtX3NjaGVkX3NjaGVkdWxl cl90d29fY2xpZW50czEgPSB7CisJLm5hbWUgPSAiZHJtX3NjaGVkX3NjaGVkdWxlcl90d29fY2xp ZW50c19vbmVfY3JlZGl0X3Rlc3RzIiwKKwkuaW5pdCA9IGRybV9zY2hlZF9zY2hlZHVsZXJfaW5p dCwKKwkuZXhpdCA9IGRybV9zY2hlZF9zY2hlZHVsZXJfZXhpdCwKKwkudGVzdF9jYXNlcyA9IGRy bV9zY2hlZF9zY2hlZHVsZXJfdHdvX2NsaWVudHNfdGVzdHMsCit9OworCitzdGF0aWMgc3RydWN0 IGt1bml0X3N1aXRlIGRybV9zY2hlZF9zY2hlZHVsZXJfdHdvX2NsaWVudHMyID0geworCS5uYW1l ID0gImRybV9zY2hlZF9zY2hlZHVsZXJfdHdvX2NsaWVudHNfdHdvX2NyZWRpdHNfdGVzdHMiLAor CS5pbml0ID0gZHJtX3NjaGVkX3NjaGVkdWxlcl9pbml0MiwKKwkuZXhpdCA9IGRybV9zY2hlZF9z Y2hlZHVsZXJfZXhpdCwKKwkudGVzdF9jYXNlcyA9IGRybV9zY2hlZF9zY2hlZHVsZXJfdHdvX2Ns aWVudHNfdGVzdHMsCit9OworCitrdW5pdF90ZXN0X3N1aXRlcygmZHJtX3NjaGVkX3NjaGVkdWxl cl9vdmVyaGVhZCwKKwkJICAmZHJtX3NjaGVkX3NjaGVkdWxlcl90d29fY2xpZW50czEsCisJCSAg JmRybV9zY2hlZF9zY2hlZHVsZXJfdHdvX2NsaWVudHMyKTsKLS0gCjIuNTIuMAoK