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 X-Spam-Level: X-Spam-Status: No, score=-7.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNWANTED_LANGUAGE_BODY,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 54A99C433DF for ; Mon, 22 Jun 2020 19:08:49 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id DBA3420732 for ; Mon, 22 Jun 2020 19:08:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DBA3420732 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=chris-wilson.co.uk Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5FFF16E8C1; Mon, 22 Jun 2020 19:08:48 +0000 (UTC) Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 462736E83F; Mon, 22 Jun 2020 19:08:46 +0000 (UTC) X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from haswell.alporthouse.com (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 21581025-1500050 for multiple; Mon, 22 Jun 2020 20:08:26 +0100 From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Mon, 22 Jun 2020 20:08:20 +0100 Message-Id: <20200622190820.849154-1-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH i-g-t] i915/gem_exec_schedule: Try to spot unfairness X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: igt-dev@lists.freedesktop.org, Chris Wilson Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" QW4gaW1wb3J0YW50IHByb3BlcnR5IGZvciBtdWx0aS1jbGllbnQgc3lzdGVtcyBpcyB0aGF0IGVh Y2ggY2xpZW50IGdldHMKYSAnZmFpcicgYWxsb3RtZW50IG9mIHN5c3RlbSB0aW1lLiAoV2hlcmUg ZmFpcm5lc3MgaXMgYXQgdGhlIHdoaW0gb2YgdGhlCmNvbnRleHQgcHJvcGVydGllcywgc3VjaCBh cyBwcmlvcml0aWVzLikgVGhpcyB0ZXN0IGZvcmtzIE4gaW5kZXBlbmRlbnQKY2xpZW50cyAoYWxi ZWl0IHRoZXkgaGFwcGVuIHRvIHNoYXJlIGEgc2luZ2xlIHZtKSwgYW5kIGRvZXMgYW4gZXF1YWwK YW1vdW50IG9mIHdvcmsgaW4gY2xpZW50IGFuZCBhc3NlcnRzIHRoYXQgdGhleSB0YWtlIGFuIGVx dWFsIGFtb3VudCBvZgp0aW1lLgoKVGhvdWdoIHdlIGhhdmUgbmV2ZXIgY2xhaW1lZCB0byBoYXZl IGEgY29tcGxldGVseSBmYWlyIHNjaGVkdWxlciwgdGhhdAppcyB3aGF0IGlzIGV4cGVjdGVkLgoK U2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNj OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpDYzogUmFtYWxpbmdh bSBDIDxyYW1hbGluZ2FtLmNAaW50ZWwuY29tPgotLS0KIHRlc3RzL2k5MTUvZ2VtX2V4ZWNfc2No ZWR1bGUuYyB8IDc4MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBj aGFuZ2VkLCA3ODIgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTUvZ2VtX2V4 ZWNfc2NoZWR1bGUuYyBiL3Rlc3RzL2k5MTUvZ2VtX2V4ZWNfc2NoZWR1bGUuYwppbmRleCA5MzFi MTI0NWYuLmZhZTA0NTM2YyAxMDA2NDQKLS0tIGEvdGVzdHMvaTkxNS9nZW1fZXhlY19zY2hlZHVs ZS5jCisrKyBiL3Rlc3RzL2k5MTUvZ2VtX2V4ZWNfc2NoZWR1bGUuYwpAQCAtMjksNiArMjksNyBA QAogI2luY2x1ZGUgPHN5cy9wb2xsLmg+CiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVk ZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KICNpbmNsdWRlIDxzeXMv c3lzY2FsbC5oPgogI2luY2x1ZGUgPHNjaGVkLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CkBAIC0y NTAxLDYgKzI1MDIsNzY2IEBAIHN0YXRpYyB2b2lkIG1lYXN1cmVfc2VtYXBob3JlX3Bvd2VyKGlu dCBpOTE1KQogCXJhcGxfY2xvc2UoJnBrZyk7CiB9CiAKK3N0YXRpYyBpbnQgcmVhZF90aW1lc3Rh bXBfZnJlcXVlbmN5KGludCBpOTE1KQoreworCWludCB2YWx1ZSA9IDA7CisJZHJtX2k5MTVfZ2V0 cGFyYW1fdCBncCA9IHsKKwkJLnZhbHVlID0gJnZhbHVlLAorCQkucGFyYW0gPSBJOTE1X1BBUkFN X0NTX1RJTUVTVEFNUF9GUkVRVUVOQ1ksCisJfTsKKwlpb2N0bChpOTE1LCBEUk1fSU9DVExfSTkx NV9HRVRQQVJBTSwgJmdwKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBk aXY2NF91NjRfcm91bmRfdXAodWludDY0X3QgeCwgdWludDY0X3QgeSkKK3sKKwlyZXR1cm4gKHgg KyB5IC0gMSkgLyB5OworfQorCitzdGF0aWMgdWludDY0X3QgbnNfdG9fdGlja3MoaW50IGk5MTUs IHVpbnQ2NF90IG5zKQoreworCXJldHVybiBkaXY2NF91NjRfcm91bmRfdXAobnMgKiByZWFkX3Rp bWVzdGFtcF9mcmVxdWVuY3koaTkxNSksCisJCQkJICBOU0VDX1BFUl9TRUMpOworfQorCitzdGF0 aWMgdWludDY0X3QgdGlja3NfdG9fbnMoaW50IGk5MTUsIHVpbnQ2NF90IHRpY2tzKQoreworCXJl dHVybiBkaXY2NF91NjRfcm91bmRfdXAodGlja3MgKiBOU0VDX1BFUl9TRUMsCisJCQkJICByZWFk X3RpbWVzdGFtcF9mcmVxdWVuY3koaTkxNSkpOworfQorCisjZGVmaW5lIE1JX0lOU1RSKG9wY29k ZSwgZmxhZ3MpICgoKG9wY29kZSkgPDwgMjMpIHwgKGZsYWdzKSkKKworI2RlZmluZSBNSV9NQVRI KHgpICAgICAgICAgICAgICAgICAgICAgIE1JX0lOU1RSKDB4MWEsICh4KSAtIDEpCisjZGVmaW5l IE1JX01BVEhfSU5TVFIob3Bjb2RlLCBvcDEsIG9wMikgKChvcGNvZGUpIDw8IDIwIHwgKG9wMSkg PDwgMTAgfCAob3AyKSkKKy8qIE9wY29kZXMgZm9yIE1JX01BVEhfSU5TVFIgKi8KKyNkZWZpbmUg ICBNSV9NQVRIX05PT1AgICAgICAgICAgICAgICAgICBNSV9NQVRIX0lOU1RSKDB4MDAwLCAweDAs IDB4MCkKKyNkZWZpbmUgICBNSV9NQVRIX0xPQUQob3AxLCBvcDIpICAgICAgICBNSV9NQVRIX0lO U1RSKDB4MDgwLCBvcDEsIG9wMikKKyNkZWZpbmUgICBNSV9NQVRIX0xPQURJTlYob3AxLCBvcDIp ICAgICBNSV9NQVRIX0lOU1RSKDB4NDgwLCBvcDEsIG9wMikKKyNkZWZpbmUgICBNSV9NQVRIX0xP QUQwKG9wMSkgICAgICAgICAgICBNSV9NQVRIX0lOU1RSKDB4MDgxLCBvcDEpCisjZGVmaW5lICAg TUlfTUFUSF9MT0FEMShvcDEpICAgICAgICAgICAgTUlfTUFUSF9JTlNUUigweDQ4MSwgb3AxKQor I2RlZmluZSAgIE1JX01BVEhfQUREICAgICAgICAgICAgICAgICAgIE1JX01BVEhfSU5TVFIoMHgx MDAsIDB4MCwgMHgwKQorI2RlZmluZSAgIE1JX01BVEhfU1VCICAgICAgICAgICAgICAgICAgIE1J X01BVEhfSU5TVFIoMHgxMDEsIDB4MCwgMHgwKQorI2RlZmluZSAgIE1JX01BVEhfQU5EICAgICAg ICAgICAgICAgICAgIE1JX01BVEhfSU5TVFIoMHgxMDIsIDB4MCwgMHgwKQorI2RlZmluZSAgIE1J X01BVEhfT1IgICAgICAgICAgICAgICAgICAgIE1JX01BVEhfSU5TVFIoMHgxMDMsIDB4MCwgMHgw KQorI2RlZmluZSAgIE1JX01BVEhfWE9SICAgICAgICAgICAgICAgICAgIE1JX01BVEhfSU5TVFIo MHgxMDQsIDB4MCwgMHgwKQorI2RlZmluZSAgIE1JX01BVEhfU1RPUkUob3AxLCBvcDIpICAgICAg IE1JX01BVEhfSU5TVFIoMHgxODAsIG9wMSwgb3AyKQorI2RlZmluZSAgIE1JX01BVEhfU1RPUkVJ TlYob3AxLCBvcDIpICAgIE1JX01BVEhfSU5TVFIoMHg1ODAsIG9wMSwgb3AyKQorLyogUmVnaXN0 ZXJzIHVzZWQgYXMgb3BlcmFuZHMgaW4gTUlfTUFUSF9JTlNUUiAqLworI2RlZmluZSAgIE1JX01B VEhfUkVHKHgpICAgICAgICAgICAgICAgICh4KQorI2RlZmluZSAgIE1JX01BVEhfUkVHX1NSQ0Eg ICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgICBNSV9NQVRIX1JFR19TUkNCICAgICAgICAgICAg ICAweDIxCisjZGVmaW5lICAgTUlfTUFUSF9SRUdfQUNDVSAgICAgICAgICAgICAgMHgzMQorI2Rl ZmluZSAgIE1JX01BVEhfUkVHX1pGICAgICAgICAgICAgICAgIDB4MzIKKyNkZWZpbmUgICBNSV9N QVRIX1JFR19DRiAgICAgICAgICAgICAgICAweDMzCisKKyNkZWZpbmUgTUlfTE9BRF9SRUdJU1RF Ul9SRUcgICAgTUlfSU5TVFIoMHgyQSwgMSkKKworc3RhdGljIHZvaWQgZGVsYXkoaW50IGk5MTUs CisJCSAgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAorCQkgIHVpbnQz Ml90IGhhbmRsZSwKKwkJICB1aW50NjRfdCBhZGRyLAorCQkgIHVpbnQ2NF90IG5zKQoreworCWNv bnN0IGludCB1c2VfNjRiID0gaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoaTkxNSkpID49 IDg7CisJY29uc3QgdWludDMyX3QgYmFzZSA9IGdlbV9lbmdpbmVfbW1pb19iYXNlKGk5MTUsIGUt Pm5hbWUpOworI2RlZmluZSBDU19HUFIoeCkgKGJhc2UgKyAweDYwMCArIDggKiAoeCkpCisjZGVm aW5lIFJVTlRJTUUgKGJhc2UgKyAweDNhOCkKKwllbnVtIHsgU1RBUlRfVFMsIE5PV19UUyB9Owor CXVpbnQzMl90ICptYXAsICpjcywgKmptcDsKKworCWlndF9yZXF1aXJlKGJhc2UpOworCisJLyog TG9vcCB1bnRpbCBDVFhfVElNRVNUQU1QIC0gaW5pdGlhbCA+IEBucyAqLworCisJY3MgPSBtYXAg PSBnZW1fbW1hcF9fZGV2aWNlX2NvaGVyZW50KGk5MTUsIGhhbmRsZSwgMCwgNDA5NiwgUFJPVF9X UklURSk7CisKKwkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NOworCSpjcysrID0gQ1NfR1BS KFNUQVJUX1RTKSArIDQ7CisJKmNzKysgPSAwOworCSpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9S RUc7CisJKmNzKysgPSBSVU5USU1FOworCSpjcysrID0gQ1NfR1BSKFNUQVJUX1RTKTsKKworCXdo aWxlIChvZmZzZXRfaW5fcGFnZShjcykgJiA2MykKKwkJKmNzKysgPSAwOworCWptcCA9IGNzOwor CisJKmNzKysgPSAweDUgPDwgMjM7IC8qIE1JX0FSQl9DSEVDSyAqLworCisJKmNzKysgPSBNSV9M T0FEX1JFR0lTVEVSX0lNTTsKKwkqY3MrKyA9IENTX0dQUihOT1dfVFMpICsgNDsKKwkqY3MrKyA9 IDA7CisJKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX1JFRzsKKwkqY3MrKyA9IFJVTlRJTUU7CisJ KmNzKysgPSBDU19HUFIoTk9XX1RTKTsKKworCS8qIGRlbHRhID0gbm93IC0gc3RhcnQ7IGludmVy dGVkIHRvIG1hdGNoIENPTkRfQkJFICovCisJKmNzKysgPSBNSV9NQVRIKDQpOworCSpjcysrID0g TUlfTUFUSF9MT0FEKE1JX01BVEhfUkVHX1NSQ0EsIE1JX01BVEhfUkVHKE5PV19UUykpOworCSpj cysrID0gTUlfTUFUSF9MT0FEKE1JX01BVEhfUkVHX1NSQ0IsIE1JX01BVEhfUkVHKFNUQVJUX1RT KSk7CisJKmNzKysgPSBNSV9NQVRIX1NVQjsKKwkqY3MrKyA9IE1JX01BVEhfU1RPUkVJTlYoTUlf TUFUSF9SRUcoTk9XX1RTKSwgTUlfTUFUSF9SRUdfQUNDVSk7CisKKwkvKiBTYXZlIGRlbHRhIGZv ciByZWFkaW5nIGJ5IENPTkRfQkJFICovCisJKmNzKysgPSAweDI0IDw8IDIzIHwgKDEgKyB1c2Vf NjRiKTsgLyogU1JNICovCisJKmNzKysgPSBDU19HUFIoTk9XX1RTKTsKKwkqY3MrKyA9IGFkZHIg KyA0MDAwOworCSpjcysrID0gYWRkciA+PiAzMjsKKworCS8qIERlbGF5IGJldHdlZW4gU1JNIGFu ZCBDT05EX0JCRSB0byBwb3N0IHRoZSB3cml0ZXMgKi8KKwlmb3IgKGludCBuID0gMDsgbiA8IDg7 IG4rKykgeworCQkqY3MrKyA9IE1JX1NUT1JFX0RXT1JEX0lNTTsKKwkJaWYgKHVzZV82NGIpIHsK KwkJCSpjcysrID0gYWRkciArIDQwNjQ7CisJCQkqY3MrKyA9IGFkZHIgPj4gMzI7CisJCX0gZWxz ZSB7CisJCQkqY3MrKyA9IDA7CisJCQkqY3MrKyA9IGFkZHIgKyA0MDY0OworCQl9CisJCSpjcysr ID0gMDsKKwl9CisKKwkvKiBCcmVhayBpZiBkZWx0YSA+IG5zICovCisJKmNzKysgPSBNSV9DT05E X0JBVENIX0JVRkZFUl9FTkQgfCBNSV9ET19DT01QQVJFIHwgKDEgKyB1c2VfNjRiKTsKKwkqY3Mr KyA9IH5uc190b190aWNrcyhpOTE1LCBucyk7CisJKmNzKysgPSBhZGRyICsgNDAwMDsKKwkqY3Mr KyA9IGFkZHIgPj4gMzI7CisKKwkvKiBPdGhlcndpc2UgYmFjayB0byByZWNhbGN1bGF0aW5nIGRl bHRhICovCisJKmNzKysgPSBNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCAxIDw8IDggfCB1c2VfNjRi OworCSpjcysrID0gYWRkciArIG9mZnNldF9pbl9wYWdlKGptcCk7CisJKmNzKysgPSBhZGRyID4+ IDMyOworCisJbXVubWFwKG1hcCwgNDA5Nik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNfb2JqZWN0MgorZGVsYXlfY3JlYXRlKGludCBpOTE1LCB1aW50MzJfdCBjdHgsCisJ ICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCisJICAgICB1aW50 NjRfdCB0YXJnZXRfbnMpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2Jq ID0geworCQkuaGFuZGxlID0gYmF0Y2hfY3JlYXRlKGk5MTUpLAorCQkuZmxhZ3MgPSBFWEVDX09C SkVDVF9TVVBQT1JUU180OEJfQUREUkVTUywKKwl9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y2J1ZmZlcjIgZXhlY2J1ZiA9IHsKKwkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZv YmopLAorCQkuYnVmZmVyX2NvdW50ID0gMSwKKwkJLnJzdmQxID0gY3R4LAorCQkuZmxhZ3MgPSBl LT5mbGFncywKKwl9OworCisJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOworCWdlbV9zeW5j KGk5MTUsIG9iai5oYW5kbGUpOworCisJZGVsYXkoaTkxNSwgZSwgb2JqLmhhbmRsZSwgb2JqLm9m ZnNldCwgdGFyZ2V0X25zKTsKKworCW9iai5mbGFncyB8PSBFWEVDX09CSkVDVF9QSU5ORUQ7CisJ cmV0dXJuIG9iajsKK30KKworc3RhdGljIHZvaWQgdHNsb2coaW50IGk5MTUsCisJCSAgY29uc3Qg c3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAorCQkgIHVpbnQzMl90IGhhbmRsZSwK KwkJICB1aW50NjRfdCBhZGRyKQoreworCWNvbnN0IGludCB1c2VfNjRiID0gaW50ZWxfZ2VuKGlu dGVsX2dldF9kcm1fZGV2aWQoaTkxNSkpID49IDg7CisJY29uc3QgdWludDMyX3QgYmFzZSA9IGdl bV9lbmdpbmVfbW1pb19iYXNlKGk5MTUsIGUtPm5hbWUpOworI2RlZmluZSBDU19HUFIoeCkgKGJh c2UgKyAweDYwMCArIDggKiAoeCkpCisjZGVmaW5lIENTX1RJTUVTVEFNUCAoYmFzZSArIDB4MzU4 KQorCWVudW0geyBJTkMsIE1BU0ssIEFERFIgfTsKKwl1aW50MzJfdCAqdGltZXN0YW1wX2xvLCAq YWRkcl9sbzsKKwl1aW50MzJfdCAqbWFwLCAqY3M7CisKKwlpZ3RfcmVxdWlyZShiYXNlKTsKKwor CW1hcCA9IGdlbV9tbWFwX19kZXZpY2VfY29oZXJlbnQoaTkxNSwgaGFuZGxlLCAwLCA0MDk2LCBQ Uk9UX1dSSVRFKTsKKwljcyA9IG1hcCArIDUxMjsKKworCS8qIFJlY29yZCB0aGUgY3VycmVudCBD U19USU1FU1RBTVAgaW50byBhIGpvdXJuYWwgW2EgNTEyIHNsb3QgcmluZ10uICovCisJKmNzKysg PSAweDI0IDw8IDIzIHwgKDEgKyB1c2VfNjRiKTsgLyogU1JNICovCisJKmNzKysgPSBDU19USU1F U1RBTVA7CisJdGltZXN0YW1wX2xvID0gY3M7CisJKmNzKysgPSBhZGRyOworCSpjcysrID0gYWRk ciA+PiAzMjsKKworCS8qIExvYWQgdGhlIGFkZHJlc3MgKyBpbmMgJiBtYXNrIHZhcmlhYmxlcyAq LworCSpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU07CisJKmNzKysgPSBDU19HUFIoQUREUik7 CisJYWRkcl9sbyA9IGNzOworCSpjcysrID0gYWRkcjsKKwkqY3MrKyA9IE1JX0xPQURfUkVHSVNU RVJfSU1NOworCSpjcysrID0gQ1NfR1BSKEFERFIpICsgNDsKKwkqY3MrKyA9IGFkZHIgPj4gMzI7 CisKKwkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NOworCSpjcysrID0gQ1NfR1BSKElOQyk7 CisJKmNzKysgPSA0OworCSpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU07CisJKmNzKysgPSBD U19HUFIoSU5DKSArIDQ7CisJKmNzKysgPSAwOworCisJKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVS X0lNTTsKKwkqY3MrKyA9IENTX0dQUihNQVNLKTsKKwkqY3MrKyA9IDB4ZmZmZmY3ZmY7CisJKmNz KysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTTsKKwkqY3MrKyA9IENTX0dQUihNQVNLKSArIDQ7CisJ KmNzKysgPSAweGZmZmZmZmZmOworCisJLyogSW5jcmVtZW50IHRoZSBbcmluZ10gYWRkcmVzcyBm b3Igc2F2aW5nIENTX1RJTUVTVEFNUCAqLworCSpjcysrID0gTUlfTUFUSCg4KTsKKwkqY3MrKyA9 IE1JX01BVEhfTE9BRChNSV9NQVRIX1JFR19TUkNBLCBNSV9NQVRIX1JFRyhJTkMpKTsKKwkqY3Mr KyA9IE1JX01BVEhfTE9BRChNSV9NQVRIX1JFR19TUkNCLCBNSV9NQVRIX1JFRyhBRERSKSk7CisJ KmNzKysgPSBNSV9NQVRIX0FERDsKKwkqY3MrKyA9IE1JX01BVEhfU1RPUkUoTUlfTUFUSF9SRUco QUREUiksIE1JX01BVEhfUkVHX0FDQ1UpOworCSpjcysrID0gTUlfTUFUSF9MT0FEKE1JX01BVEhf UkVHX1NSQ0EsIE1JX01BVEhfUkVHKEFERFIpKTsKKwkqY3MrKyA9IE1JX01BVEhfTE9BRChNSV9N QVRIX1JFR19TUkNCLCBNSV9NQVRIX1JFRyhNQVNLKSk7CisJKmNzKysgPSBNSV9NQVRIX0FORDsK KwkqY3MrKyA9IE1JX01BVEhfU1RPUkUoTUlfTUFUSF9SRUcoQUREUiksIE1JX01BVEhfUkVHX0FD Q1UpOworCisJLyogUmV3cml0ZSB0aGUgYmF0Y2ggYnVmZmVyIGZvciB0aGUgbmV4dCBleGVjdXRp b24gKi8KKwkqY3MrKyA9IDB4MjQgPDwgMjMgfCAoMSArIHVzZV82NGIpOyAvKiBTUk0gKi8KKwkq Y3MrKyA9IENTX0dQUihBRERSKTsKKwkqY3MrKyA9IGFkZHIgKyBvZmZzZXRfaW5fcGFnZSh0aW1l c3RhbXBfbG8pOworCSpjcysrID0gYWRkciA+PiAzMjsKKwkqY3MrKyA9IDB4MjQgPDwgMjMgfCAo MSArIHVzZV82NGIpOyAvKiBTUk0gKi8KKwkqY3MrKyA9IENTX0dQUihBRERSKTsKKwkqY3MrKyA9 IGFkZHIgKyBvZmZzZXRfaW5fcGFnZShhZGRyX2xvKTsKKwkqY3MrKyA9IGFkZHIgPj4gMzI7CisK KwkqY3MrKyA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7CisKKwltdW5tYXAobWFwLCA0MDk2KTsKK30K Kworc3RhdGljIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyCit0c2xvZ19jcmVhdGUo aW50IGk5MTUsIHVpbnQzMl90IGN0eCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdp bmUyICplKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iaiA9IHsKKwkJ LmhhbmRsZSA9IGJhdGNoX2NyZWF0ZShpOTE1KSwKKwkJLmZsYWdzID0gRVhFQ19PQkpFQ1RfU1VQ UE9SVFNfNDhCX0FERFJFU1MsCisJfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIy IGV4ZWNidWYgPSB7CisJCS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmb2JqKSwKKwkJ LmJ1ZmZlcl9jb3VudCA9IDEsCisJCS5yc3ZkMSA9IGN0eCwKKwkJLmZsYWdzID0gZS0+ZmxhZ3Ms CisJfTsKKworCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKKwlnZW1fc3luYyhpOTE1LCBv YmouaGFuZGxlKTsKKworCXRzbG9nKGk5MTUsIGUsIG9iai5oYW5kbGUsIG9iai5vZmZzZXQpOwor CisJb2JqLmZsYWdzIHw9IEVYRUNfT0JKRUNUX1BJTk5FRDsKKwlyZXR1cm4gb2JqOworfQorCitz dGF0aWMgaW50IGNtcF91MzIoY29uc3Qgdm9pZCAqQSwgY29uc3Qgdm9pZCAqQikKK3sKKwljb25z dCB1aW50MzJfdCAqYSA9IEEsICpiID0gQjsKKworCWlmICgqYSA8ICpiKQorCQlyZXR1cm4gLTE7 CisJZWxzZSBpZiAoKmEgPiAqYikKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30K Kworc3RhdGljIHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMgorcGlja19yYW5kb21fZW5n aW5lKGludCBpOTE1LCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKm5vdCkK K3sKKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmU7CisJdW5zaWduZWQg aW50IGNvdW50ID0gMDsKKworCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGk5MTUsIGUpIHsK KwkJaWYgKGUtPmZsYWdzID09IG5vdC0+ZmxhZ3MpCisJCQljb250aW51ZTsKKwkJaWYgKCFnZW1f Y2xhc3NfaGFzX211dGFibGVfc3VibWlzc2lvbihpOTE1LCBlLT5jbGFzcykpCisJCQljb250aW51 ZTsKKwkJY291bnQrKzsKKwl9CisJaWYgKCFjb3VudCkKKwkJcmV0dXJuICpub3Q7CisKKwljb3Vu dCA9IHJhbmQoKSAlIGNvdW50OworCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGk5MTUsIGUp IHsKKwkJaWYgKGUtPmZsYWdzID09IG5vdC0+ZmxhZ3MpCisJCQljb250aW51ZTsKKwkJaWYgKCFn ZW1fY2xhc3NfaGFzX211dGFibGVfc3VibWlzc2lvbihpOTE1LCBlLT5jbGFzcykpCisJCQljb250 aW51ZTsKKwkJaWYgKCFjb3VudC0tKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuICplOworfQor CitzdGF0aWMgdm9pZCBmYWlyX2NoaWxkKGludCBpOTE1LCB1aW50MzJfdCBjdHgsCisJCSAgICAg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCisJCSAgICAgICB1aW50 NjRfdCBmcmFtZV9ucywKKwkJICAgICAgIGludCB0aW1lbGluZSwKKwkJICAgICAgIHVpbnQzMl90 IGNvbW1vbiwKKwkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncywKKwkJICAgICAgIHVuc2lnbmVk IGxvbmcgKmN0bCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dCkKKyNkZWZpbmUgRl9TWU5D CQkoMSA8PCAwKQorI2RlZmluZSBGX1BBQ0UJCSgxIDw8IDEpCisjZGVmaW5lIEZfRkxPVwkJKDEg PDwgMikKKyNkZWZpbmUgRl9IQUxGCQkoMSA8PCAzKQorI2RlZmluZSBGX1NPTE8JCSgxIDw8IDQp CisjZGVmaW5lIEZfU1BBUkUJCSgxIDw8IDUpCisjZGVmaW5lIEZfTkVYVAkJKDEgPDwgNikKKyNk ZWZpbmUgRl9WSVAJCSgxIDw8IDcpCisjZGVmaW5lIEZfUlJVTAkJKDEgPDwgOCkKKyNkZWZpbmUg Rl9TSEFSRQkJKDEgPDwgOSkKKyNkZWZpbmUgRl9QSU5HCQkoMSA8PCAxMCkKKyNkZWZpbmUgRl9U SFJPVFRMRQkoMSA8PCAxMSkKK3sKKwljb25zdCBpbnQgYmF0Y2hlc19wZXJfZnJhbWUgPSBmbGFn cyAmIEZfU09MTyA/IDEgOiAzOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9i als0XSA9IHsKKwkJe30sCisJCXsKKwkJCS5oYW5kbGUgPSBjb21tb24gPzogZ2VtX2NyZWF0ZShp OTE1LCA0MDk2KSwKKwkJfSwKKwkJZGVsYXlfY3JlYXRlKGk5MTUsIGN0eCwgZSwgZnJhbWVfbnMg LyBiYXRjaGVzX3Blcl9mcmFtZSksCisJCWRlbGF5X2NyZWF0ZShpOTE1LCBjdHgsIGUsIGZyYW1l X25zIC8gYmF0Y2hlc19wZXJfZnJhbWUpLAorCX07CisJc3RydWN0IGludGVsX2V4ZWN1dGlvbl9l bmdpbmUyIHBpbmcgPSAqZTsKKwlpbnQgcF9mZW5jZSA9IC0xLCBuX2ZlbmNlID0gLTE7CisJdW5z aWduZWQgbG9uZyBjb3VudCA9IDA7CisJaW50IG47CisKKwlzcmFuZG9tKGdldHBpZCgpKTsKKwlp ZiAoZmxhZ3MgJiBGX1BJTkcpCisJCXBpbmcgPSBwaWNrX3JhbmRvbV9lbmdpbmUoaTkxNSwgZSk7 CisJb2JqWzBdID0gdHNsb2dfY3JlYXRlKGk5MTUsIGN0eCwgJnBpbmcpOworCisJd2hpbGUgKCFS RUFEX09OQ0UoKmN0bCkpIHsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVj YnVmID0geworCQkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKG9iaiksCisJCQkuYnVm ZmVyX2NvdW50ID0gNCwKKwkJCS5yc3ZkMSA9IGN0eCwKKwkJCS5yc3ZkMiA9IC0xLAorCQkJLmZs YWdzID0gZS0+ZmxhZ3MsCisJCX07CisKKwkJaWYgKGZsYWdzICYgRl9GTE9XKSB7CisJCQl1bnNp Z25lZCBpbnQgc2VxOworCisJCQlzZXEgPSBjb3VudDsKKwkJCWlmIChmbGFncyAmIEZfTkVYVCkK KwkJCQlzZXErKzsKKworCQkJZXhlY2J1Zi5yc3ZkMiA9CisJCQkJc3dfc3luY190aW1lbGluZV9j cmVhdGVfZmVuY2UodGltZWxpbmUsIHNlcSk7CisJCQlleGVjYnVmLmZsYWdzIHw9IEk5MTVfRVhF Q19GRU5DRV9JTjsKKwkJfQorCisJCWV4ZWNidWYuZmxhZ3MgfD0gSTkxNV9FWEVDX0ZFTkNFX09V VDsKKwkJZ2VtX2V4ZWNidWZfd3IoaTkxNSwgJmV4ZWNidWYpOworCQluX2ZlbmNlID0gZXhlY2J1 Zi5yc3ZkMiA+PiAzMjsKKwkJZXhlY2J1Zi5mbGFncyAmPSB+KEk5MTVfRVhFQ19GRU5DRV9PVVQg fCBJOTE1X0VYRUNfRkVOQ0VfSU4pOworCQlmb3IgKG4gPSAxOyBuIDwgYmF0Y2hlc19wZXJfZnJh bWU7IG4rKykKKwkJCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKKwkJY2xvc2UoZXhlY2J1 Zi5yc3ZkMik7CisKKwkJZXhlY2J1Zi5idWZmZXJfY291bnQgPSAxOworCQlleGVjYnVmLmJhdGNo X3N0YXJ0X29mZnNldCA9IDIwNDg7CisJCWV4ZWNidWYuZmxhZ3MgPSBwaW5nLmZsYWdzIHwgSTkx NV9FWEVDX0ZFTkNFX0lOOworCQlleGVjYnVmLnJzdmQyID0gbl9mZW5jZTsKKwkJZ2VtX2V4ZWNi dWYoaTkxNSwgJmV4ZWNidWYpOworCisJCWlmIChmbGFncyAmIEZfUEFDRSAmJiBwX2ZlbmNlICE9 IC0xKSB7CisJCQlzdHJ1Y3QgcG9sbGZkIHBmZCA9IHsKKwkJCQkuZmQgPSBwX2ZlbmNlLAorCQkJ CS5ldmVudHMgPSBQT0xMSU4sCisJCQl9OworCQkJcG9sbCgmcGZkLCAxLCAtMSk7CisJCX0KKwkJ Y2xvc2UocF9mZW5jZSk7CisKKwkJaWYgKGZsYWdzICYgRl9TWU5DKSB7CisJCQlzdHJ1Y3QgcG9s bGZkIHBmZCA9IHsKKwkJCQkuZmQgPSBuX2ZlbmNlLAorCQkJCS5ldmVudHMgPSBQT0xMSU4sCisJ CQl9OworCQkJcG9sbCgmcGZkLCAxLCAtMSk7CisJCX0KKworCQlpZiAoZmxhZ3MgJiBGX1RIUk9U VExFKQorCQkJaWd0X2lvY3RsKGk5MTUsIERSTV9JT0NUTF9JOTE1X0dFTV9USFJPVFRMRSwgMCk7 CisKKwkJaWd0X3N3YXAob2JqWzJdLCBvYmpbM10pOworCQlpZ3Rfc3dhcChwX2ZlbmNlLCBuX2Zl bmNlKTsKKwkJY291bnQrKzsKKwl9CisJY2xvc2UocF9mZW5jZSk7CisKKwlnZW1fY2xvc2UoaTkx NSwgb2JqWzNdLmhhbmRsZSk7CisJZ2VtX2Nsb3NlKGk5MTUsIG9ialsyXS5oYW5kbGUpOworCWlm IChvYmpbMV0uaGFuZGxlICE9IGNvbW1vbikKKwkJZ2VtX2Nsb3NlKGk5MTUsIG9ialsxXS5oYW5k bGUpOworCisJZ2VtX3N5bmMoaTkxNSwgb2JqWzBdLmhhbmRsZSk7CisJaWYgKG91dCkgeworCQl1 aW50MzJfdCAqbWFwOworCisJCW1hcCA9IGdlbV9tbWFwX19kZXZpY2VfY29oZXJlbnQoaTkxNSwg b2JqWzBdLmhhbmRsZSwKKwkJCQkJCTAsIDQwOTYsIFBST1RfV1JJVEUpOworCQlmb3IgKG4gPSAx OyBuIDwgbWluKGNvdW50LCA1MTIpOyBuKyspIHsKKwkJCWlndF9hc3NlcnQobWFwW25dKTsKKwkJ CW1hcFtuIC0gMV0gPSBtYXBbbl0gLSBtYXBbbiAtIDFdOworCQl9CisJCXFzb3J0KG1hcCwgLS1u LCBzaXplb2YoKm1hcCksIGNtcF91MzIpOworCQkqb3V0ID0gdGlja3NfdG9fbnMoaTkxNSwgbWFw W24gLyAyXSk7CisJCW11bm1hcChtYXAsIDQwOTYpOworCX0KKwlnZW1fY2xvc2UoaTkxNSwgb2Jq WzBdLmhhbmRsZSk7Cit9CisKK3N0YXRpYyBpbnQgY21wX3VsKGNvbnN0IHZvaWQgKkEsIGNvbnN0 IHZvaWQgKkIpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqYSA9IEEsICpiID0gQjsKKworCWlm ICgqYSA8ICpiKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAoKmEgPiAqYikKKwkJcmV0dXJuIDE7 CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHVpbnQ2NF90IGRfY3B1X3RpbWUoY29u c3Qgc3RydWN0IHJ1c2FnZSAqYSwgY29uc3Qgc3RydWN0IHJ1c2FnZSAqYikKK3sKKwl1aW50NjRf dCBjcHVfdGltZSA9IDA7CisKKwljcHVfdGltZSArPSAoYS0+cnVfdXRpbWUudHZfc2VjIC0gYi0+ cnVfdXRpbWUudHZfc2VjKSAqIE5TRUNfUEVSX1NFQzsKKwljcHVfdGltZSArPSAoYS0+cnVfdXRp bWUudHZfdXNlYyAtIGItPnJ1X3V0aW1lLnR2X3VzZWMpICogMTAwMDsKKworCWNwdV90aW1lICs9 IChhLT5ydV9zdGltZS50dl9zZWMgLSBiLT5ydV9zdGltZS50dl9zZWMpICogTlNFQ19QRVJfU0VD OworCWNwdV90aW1lICs9IChhLT5ydV9zdGltZS50dl91c2VjIC0gYi0+cnVfc3RpbWUudHZfdXNl YykgKiAxMDAwOworCisJcmV0dXJuIGNwdV90aW1lOworfQorCitzdGF0aWMgdm9pZCB0aW1lbGlu ZV9hZHZhbmNlKGludCB0aW1lbGluZSwgaW50IGRlbGF5X25zKQoreworCXN0cnVjdCB0aW1lc3Bl YyB0diA9IHsgLnR2X25zZWMgPSBkZWxheV9ucyB9OworCW5hbm9zbGVlcCgmdHYsIE5VTEwpOwor CXN3X3N5bmNfdGltZWxpbmVfaW5jKHRpbWVsaW5lLCAxKTsKK30KKworc3RhdGljIHZvaWQgZmFp cm5lc3MoaW50IGk5MTUsCisJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdp bmUyICplLAorCQkgICAgIGludCB0aW1lb3V0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJY29u c3QgaW50IGZyYW1lX25zID0gMTY2NjYgKiAxMDAwOworCWNvbnN0IGludCBmZW5jZV9ucyA9IGZs YWdzICYgRl9IQUxGID8gMiAqIGZyYW1lX25zIDogZnJhbWVfbnM7CisJdW5zaWduZWQgbG9uZyAq cmVzdWx0OworCXVpbnQzMl90IGNvbW1vbiA9IDA7CisKKwlpZ3RfcmVxdWlyZShnZW1fY2xhc3Nf aGFzX211dGFibGVfc3VibWlzc2lvbihpOTE1LCBlLT5jbGFzcykpOworCisJaWYgKGZsYWdzICYg Rl9TSEFSRSkKKwkJY29tbW9uID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk1KTsKKworCXJlc3VsdCA9 IG1tYXAoTlVMTCwgNDA5NiwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCB8IE1BUF9BTk9OLCAtMSwg MCk7CisKKwlmb3IgKGludCBuID0gMjsgbiA8PSA2NDsgbiA8PD0gMSkgeyAvKiAzMiA9PSA1MDB1 cyBwZXIgY2xpZW50ICovCisJCWludCB0aW1lbGluZSA9IHN3X3N5bmNfdGltZWxpbmVfY3JlYXRl KCk7CisJCWludCBuZmVuY2VzID0gdGltZW91dCAqIE5TRUNfUEVSX1NFQyAvIGZlbmNlX25zICsg MTsKKwkJY29uc3QgaW50IG5jaGlsZCA9IG4gLSAxOyAvKiBvZGQgZm9yIGVhc3kgbWVkaWFucyAq LworCQljb25zdCBpbnQgY2hpbGRfbnMgPSBmcmFtZV9ucyAvIChuY2hpbGQgKyAhIShmbGFncyAm IEZfU1BBUkUpKTsKKwkJY29uc3QgaW50IGxvID0gbmNoaWxkIC8gNDsKKwkJY29uc3QgaW50IGhp ID0gKDMgKiBuY2hpbGQgKyAzKSAvIDQgLSAxOworCQlzdHJ1Y3QgcnVzYWdlIG9sZF91c2FnZSwg dXNhZ2U7CisJCXVpbnQ2NF90IGNwdV90aW1lLCBkX3RpbWU7CisJCXVuc2lnbmVkIGxvbmcgdmlw ID0gLTE7CisJCXN0cnVjdCB0aW1lc3BlYyB0djsKKwkJc3RydWN0IGlndF9tZWFuIG07CisKKwkJ aWYgKGZsYWdzICYgRl9QSU5HKSB7CisJCQlzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIg KnBpbmc7CisKKwkJCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGk5MTUsIHBpbmcpIHsKKwkJ CQlpZiAocGluZy0+ZmxhZ3MgPT0gZS0+ZmxhZ3MpCisJCQkJCWNvbnRpbnVlOworCisJCQkJaWd0 X2ZvcmsoY2hpbGQsIDEpIHsKKwkJCQkJdWludDMyX3QgY3R4ID0gZ2VtX2NvbnRleHRfY2xvbmVf d2l0aF9lbmdpbmVzKGk5MTUsIDApOworCisJCQkJCWZhaXJfY2hpbGQoaTkxNSwgY3R4LCBwaW5n LAorCQkJCQkJICAgY2hpbGRfbnMgLyA4LAorCQkJCQkJICAgLTEsIGNvbW1vbiwKKwkJCQkJCSAg IEZfU09MTyB8IEZfUEFDRSB8IEZfU0hBUkUsCisJCQkJCQkgICAmcmVzdWx0W25jaGlsZF0sCisJ CQkJCQkgICBOVUxMKTsKKworCQkJCQlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7CisJ CQkJfQorCQkJfQorCQl9CisKKwkJbWVtc2V0KHJlc3VsdCwgMCwgKG5jaGlsZCArIDEpICogc2l6 ZW9mKHJlc3VsdFswXSkpOworCQlnZXRydXNhZ2UoUlVTQUdFX0NISUxEUkVOLCAmb2xkX3VzYWdl KTsKKwkJaWd0X25zZWNfZWxhcHNlZChtZW1zZXQoJnR2LCAwLCBzaXplb2YodHYpKSk7CisJCWln dF9mb3JrKGNoaWxkLCBuY2hpbGQpIHsKKwkJCXVpbnQzMl90IGN0eCA9IGdlbV9jb250ZXh0X2Ns b25lX3dpdGhfZW5naW5lcyhpOTE1LCAwKTsKKworCQkJaWYgKGZsYWdzICYgRl9WSVAgJiYgY2hp bGQgPT0gMCkgeworCQkJCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShpOTE1LCBjdHgsIE1BWF9Q UklPKTsKKwkJCQlmbGFncyB8PSBGX0ZMT1c7CisJCQl9CisJCQlpZiAoZmxhZ3MgJiBGX1JSVUwg JiYgY2hpbGQgPT0gMCkKKwkJCQlmbGFncyB8PSBGX1NPTE8gfCBGX0ZMT1cgfCBGX1NZTkM7CisK KwkJCWZhaXJfY2hpbGQoaTkxNSwgY3R4LCBlLCBjaGlsZF9ucywKKwkJCQkgICB0aW1lbGluZSwg Y29tbW9uLCBmbGFncywKKwkJCQkgICAmcmVzdWx0W25jaGlsZF0sCisJCQkJICAgJnJlc3VsdFtj aGlsZF0pOworCisJCQlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7CisJCX0KKworCQl3 aGlsZSAobmZlbmNlcy0tKQorCQkJdGltZWxpbmVfYWR2YW5jZSh0aW1lbGluZSwgZmVuY2VfbnMp OworCisJCXJlc3VsdFtuY2hpbGRdID0gMTsKKwkJZm9yIChpbnQgY2hpbGQgPSAwOyBjaGlsZCA8 IG5jaGlsZDsgY2hpbGQrKykgeworCQkJd2hpbGUgKCFSRUFEX09OQ0UocmVzdWx0W2NoaWxkXSkp CisJCQkJdGltZWxpbmVfYWR2YW5jZSh0aW1lbGluZSwgZmVuY2VfbnMpOworCQl9CisKKwkJaWd0 X3dhaXRjaGlsZHJlbigpOworCQljbG9zZSh0aW1lbGluZSk7CisKKwkJLyogQXJlIHdlIHJ1bm5p bmcgb3V0IG9mIENQVSB0aW1lLCBhbmQgZmFpbCB0byBzdWJtaXQgZnJhbWVzPyAqLworCQlkX3Rp bWUgPSBpZ3RfbnNlY19lbGFwc2VkKCZ0dik7CisJCWdldHJ1c2FnZShSVVNBR0VfQ0hJTERSRU4s ICZ1c2FnZSk7CisJCWNwdV90aW1lID0gZF9jcHVfdGltZSgmdXNhZ2UsICZvbGRfdXNhZ2UpOwor CQlpZiAoMTAgKiBjcHVfdGltZSA+IDkgKiBkX3RpbWUpIHsKKwkJCWlmIChuY2hpbGQgPiA3KQor CQkJCWJyZWFrOworCisJCQlpZ3Rfc2tpcF9vbl9mKDEwICogY3B1X3RpbWUgPiA5ICogZF90aW1l LAorCQkJCSAgICAgICIlLjBmJSUgQ1BVIHVzYWdlLCBwcmVzdW1pbmcgY2FwYWNpdHkgZXhjZWVk ZWRcbiIsCisJCQkJICAgICAgMTAwLiAqIGNwdV90aW1lIC8gZF90aW1lKTsKKwkJfQorCisJCWln dF9tZWFuX2luaXQoJm0pOworCQlmb3IgKGludCBjaGlsZCA9IDA7IGNoaWxkIDwgbmNoaWxkOyBj aGlsZCsrKQorCQkJaWd0X21lYW5fYWRkKCZtLCByZXN1bHRbY2hpbGRdKTsKKworCQlpZiAoZmxh Z3MgJiAoRl9WSVAgfCBGX1JSVUwpKQorCQkJdmlwID0gcmVzdWx0WzBdOworCisJCXFzb3J0KHJl c3VsdCwgbmNoaWxkLCBzaXplb2YoKnJlc3VsdCksIGNtcF91bCk7CisJCWlndF9pbmZvKCIlMmQg Y2xpZW50cywgcmFuZ2U6IFslLjFmLCAlLjFmXSwgaXFyOiBbJS4xZiwgJS4xZl0sIG1lZGlhbjog JS4xZiwgbWVhbjogJS4xZiDCsSAlLjJmIG1zXG4iLAorCQkJIG5jaGlsZCwKKwkJCSAxZS02ICog cmVzdWx0WzBdLCAgMWUtNiAqIHJlc3VsdFtuY2hpbGQgLSAxXSwKKwkJCSAxZS02ICogcmVzdWx0 W2xvXSwgMWUtNiAqIHJlc3VsdFtoaV0sCisJCQkgMWUtNiAqIHJlc3VsdFtuY2hpbGQgLyAyXSwK KwkJCSAxZS02ICogaWd0X21lYW5fZ2V0KCZtKSwKKwkJCSAxZS02ICogc3FydChpZ3RfbWVhbl9n ZXRfdmFyaWFuY2UoJm0pKSk7CisKKwkJaWYgKHZpcCAhPSAtMSkgeworCQkJaWd0X2luZm8oIlZJ UCBpbnRlcnZhbCAlLjJmIG1zXG4iLCAxZS02ICogdmlwKTsKKwkJCWlndF9hc3NlcnQoNCAqIHZp cCA+IDMgKiBmZW5jZV9ucyAmJgorCQkJCSAgIDMgKiB2aXAgPCA0ICogZmVuY2VfbnMpOworCQl9 CisKKwkJLyogTWF5IGJlIHNsb3dlZCBkdWUgdG8gc2hlZXIgdm9sdW1lIG9mIGNvbnRleHQgc3dp dGNoZXMgKi8KKwkJaWd0X2Fzc2VydCg0ICogaWd0X21lYW5fZ2V0KCZtKSA+IDMgKiBmZW5jZV9u cyAmJgorCQkJICAgICAgIGlndF9tZWFuX2dldCgmbSkgPCAzICogZmVuY2VfbnMpOworCisJCWln dF9hc3NlcnQoNCAqIGlndF9tZWFuX2dldCgmbSkgPiAzICogcmVzdWx0W25jaGlsZCAvIDJdICYm CisJCQkgICAzICogaWd0X21lYW5fZ2V0KCZtKSA8IDQgKiByZXN1bHRbbmNoaWxkIC8gMl0pOwor CisJCWlndF9hc3NlcnQoMiAqIChyZXN1bHRbaGldIC0gcmVzdWx0W2xvXSkgPCByZXN1bHRbbmNo aWxkIC8gMl0pOworCX0KKworCW11bm1hcChyZXN1bHQsIDQwOTYpOworCWlmIChjb21tb24pCisJ CWdlbV9jbG9zZShpOTE1LCBjb21tb24pOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2ZhaXJuZXNz KGludCBpOTE1LCBpbnQgdGltZW91dCkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwkJY29u c3QgY2hhciAqbmFtZTsKKwkJdW5zaWduZWQgaW50IGZsYWdzOworCX0gZmFpcltdID0geworCQkv KgorCQkgKiBub25lIC0gbWF4aW1hbCBncmVlZCBpbiBlYWNoIGNsaWVudAorCQkgKgorCQkgKiBQ dXNoIGFzIG1hbnkgZnJhbWVzIGZyb20gZWFjaCBjbGllbnQgYXMgZmFzdCBhcyBwb3NzaWJsZQor CQkgKi8KKwkJeyAibm9uZSIsICAgICAgIDAgfSwKKwkJeyAibm9uZS12aXAiLCAgIEZfVklQIH0s IC8qIG9uZSB2aXAgY2xpZW50IG11c3QgbWVldCBkZWFkbGluZXMgKi8KKwkJeyAibm9uZS1zb2xv IiwgIEZfU09MTyB9LCAvKiAxIGJhdGNoIHBlciBmcmFtZSBwZXIgY2xpZW50ICovCisJCXsgIm5v bmUtc2hhcmUiLCBGX1NIQVJFIH0sIC8qIHJlYWQgZnJvbSBhIGNvbW1vbiBidWZmZXIgKi8KKwkJ eyAibm9uZS1ycnVsIiwgIEZfUlJVTCB9LCAvKiAicmVhbHRpbWUtcmVzcG9uc2UgdW5kZXIgbG9h ZCIgKi8KKwkJeyAibm9uZS1waW5nIiwgIEZfUElORyB9LCAvKiBtZWFzdXJlIGludGVyLWVuZ2lu ZSBmYWlybmVzcyAqLworCisJCS8qCisJCSAqIHRocm90dGxlIC0gb3JpZ2luYWwgcGVyIGNsaWVu dCB0aHJvdHRsaW5nCisJCSAqCisJCSAqIFVzZWQgZm9yIGZyb250IGJ1ZmZlcmluZyByZW5kZXJp bmcgd2hlcmUgdGhlcmUgaXMgbm8KKwkJICogZXh0ZW5hbCBmcmFtZSBtYXJrZXIuIEVhY2ggY2xp ZW50IHRyaWVzIHRvIG9ubHkga2VlcAorCQkgKiAyMG1zIG9mIHdvcmsgc3VibWl0dGVkLCB0aG91 Z2ggdGhhdCBtZWFzdXJlbWVudCBpcworCQkgKiBmbGF3ZWQuLi4KKwkJICoKKwkJICogVGhpcyBp cyB1c2VkIGJ5IFhvcnkgdG8gdHJ5IGFuZCBtYWludGFpbiBzb21lIHJlc2VtYmFsYW5jZQorCQkg KiBvZiBpbnB1dC9vdXRwdXQgY29uc2lzdGVuY3kgd2hlbiBiZWluZyBmZWVkIGEgY29udGludW91 cworCQkgKiBzdHJlYW0gb2YgWDExIGRyYXcgcmVxdWVzdHMgc3RyYWlnaHQgaW50byBzY2Fub3V0 LCB3aGVyZQorCQkgKiB0aGUgY2xpZW50cyBtYXkgc3VibWl0IHRoZSB3b3JrIGZhc3RlciB0aGFu IGNhbiBiZSBkcmF3bi4KKwkJICovCisJCXsgInRocm90dGxlIiwgICAgICAgRl9USFJPVFRMRSB9 LAorCQl7ICJ0aHJvdHRsZS12aXAiLCAgIEZfVEhST1RUTEUgfCBGX1ZJUCB9LAorCQl7ICJ0aHJv dHRsZS1zb2xvIiwgIEZfVEhST1RUTEUgfCBGX1NPTE8gfSwKKwkJeyAidGhyb3R0bGUtc2hhcmUi LCBGX1RIUk9UVExFIHwgRl9TSEFSRSB9LAorCQl7ICJ0aHJvdHRsZS1ycnVsIiwgIEZfVEhST1RU TEUgfCBGX1JSVUwgfSwKKworCQkvKgorCQkgKiBwYWNlIC0gbWVzYSAic3VibWl0IGRvdWJsZSBi dWZmZXJpbmciCisJCSAqCisJCSAqIFN1Ym1pdCBhIGZyYW1lLCB3YWl0IGZvciBwcmV2aW91cyBm cmFtZSB0byBzdGFydC4gVGhpcworCQkgKiBwcmV2ZW50cyBlYWNoIGNsaWVudCBmcm9tIGdldHRp bmcgdG9vIGZhciBhaGVhZCBvZiBpdHMKKwkJICogcmVuZGVyaW5nLCBtYWludGFpbmluZyBhIGNv bnNpc3RlbnQgaW5wdXQvb3V0cHV0IGxhdGVuY3kuCisJCSAqLworCQl7ICJwYWNlIiwgICAgICAg Rl9QQUNFIH0sCisJCXsgInBhY2Utc29sbyIsICBGX1BBQ0UgfCBGX1NPTE99LAorCQl7ICJwYWNl LXNoYXJlIiwgRl9QQUNFIHwgRl9TSEFSRX0sCisJCXsgInBhY2UtcGluZyIsICBGX1BBQ0UgfCBG X1NIQVJFIHwgRl9QSU5HfSwKKworCQkvKiBzeW5jIC0gb25seSBzdWJtaXQgYSBmcmFtZSBhdCBh IHRpbWUgKi8KKwkJeyAic3luYyIsICAgICAgRl9TWU5DIH0sCisJCXsgInN5bmMtdmlwIiwgIEZf U1lOQyB8IEZfVklQIH0sCisJCXsgInN5bmMtc29sbyIsIEZfU1lOQyB8IEZfU09MTyB9LAorCisJ CS8qIGZsb3cgLSBzeW5jaHJvbmlzZSBleGVjdXRpb24gYWdhaW5zdCB0aGUgY2xvY2sgKHZibGFu aykgKi8KKwkJeyAiZmxvdyIsICAgICAgIEZfUEFDRSB8IEZfRkxPVyB9LAorCQl7ICJmbG93LXNo YXJlIiwgRl9QQUNFIHwgRl9GTE9XIHwgRl9TSEFSRSB9LAorCQl7ICJmbG93LXBpbmciLCAgRl9Q QUNFIHwgRl9GTE9XIHwgRl9TSEFSRSB8IEZfUElORyB9LAorCisJCS8qIG5leHQgLSBzdWJtaXQg YWhlYWQgb2YgdGhlIGNsb2NrICh2YmxhbmsgZG91YmxlIGJ1ZmZlcmluZykgKi8KKwkJeyAibmV4 dCIsICAgICAgIEZfUEFDRSB8IEZfRkxPVyB8IEZfTkVYVCB9LAorCQl7ICJuZXh0LXNoYXJlIiwg Rl9QQUNFIHwgRl9GTE9XIHwgRl9ORVhUIHwgRl9TSEFSRSB9LAorCQl7ICJuZXh0LXBpbmciLCAg Rl9QQUNFIHwgRl9GTE9XIHwgRl9ORVhUIHwgRl9TSEFSRSB8IEZfUElORyB9LAorCisJCS8qIHNw YXJlIC0gdW5kZXJ1dGlsaXNlIGJ5IGEgc2luZ2xlIGNsaWVudCB0aW1lc2xpY2UgKi8KKwkJeyAi c3BhcmUiLCBGX1BBQ0UgfCBGX0ZMT1cgfCBGX1NQQVJFIH0sCisKKwkJLyogaGFsZiAtIHJ1biBh dCBoYWxmIHBhY2UgKHN1Ym1pdCAxNm1zIG9mIHdvcmsgZXZlcnkgMzJtcykgKi8KKwkJeyAiaGFs ZiIsICBGX1BBQ0UgfCBGX0ZMT1cgfCBGX0hBTEYgfSwKKworCQl7fQorCX07CisKKwlmb3IgKHR5 cGVvZigqZmFpcikgKmYgPSBmYWlyOyBmLT5uYW1lOyBmKyspIHsKKwkJaWd0X3N1YnRlc3Rfd2l0 aF9keW5hbWljX2YoImZhaXItJXMiLCBmLT5uYW1lKSAgeworCQkJY29uc3Qgc3RydWN0IGludGVs X2V4ZWN1dGlvbl9lbmdpbmUyICplOworCisJCQlpZ3RfcmVxdWlyZShpbnRlbF9nZW4oaW50ZWxf Z2V0X2RybV9kZXZpZChpOTE1KSkgPj0gOCk7CisKKwkJCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5n aW5lKGk5MTUsIGUpIHsKKwkJCQlpZiAoIWdlbV9jbGFzc19jYW5fc3RvcmVfZHdvcmQoaTkxNSwg ZS0+Y2xhc3MpKQorCQkJCQljb250aW51ZTsKKworCQkJCWlndF9keW5hbWljX2YoIiVzIiwgZS0+ bmFtZSkKKwkJCQkJZmFpcm5lc3MoaTkxNSwgZSwgdGltZW91dCwgZi0+ZmxhZ3MpOworCQkJfQor CQl9CisJfQorfQorCitzdGF0aWMgdWludDMyX3QgcmVhZF9jdHhfdGltZXN0YW1wKGludCBpOTE1 LAorCQkJCSAgIHVpbnQzMl90IGN0eCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0 aW9uX2VuZ2luZTIgKmUpCit7CisJY29uc3QgaW50IHVzZV82NGIgPSBpbnRlbF9nZW4oaW50ZWxf Z2V0X2RybV9kZXZpZChpOTE1KSkgPj0gODsKKwljb25zdCB1aW50MzJfdCBiYXNlID0gZ2VtX2Vu Z2luZV9tbWlvX2Jhc2UoaTkxNSwgZS0+bmFtZSk7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxv Y2F0aW9uX2VudHJ5IHJlbG9jOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9i aiA9IHsKKwkJLmhhbmRsZSA9IGdlbV9jcmVhdGUoaTkxNSwgNDA5NiksCisJCS5vZmZzZXQgPSAz MiA8PCAyMCwKKwkJLnJlbG9jc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJnJlbG9jKSwKKwkJLnJl bG9jYXRpb25fY291bnQgPSAxLAorCX07CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVy MiBleGVjYnVmID0geworCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJm9iaiksCisJ CS5idWZmZXJfY291bnQgPSAxLAorCQkuZmxhZ3MgPSBlLT5mbGFncywKKwkJLnJzdmQxID0gY3R4 LAorCX07CisjZGVmaW5lIFJVTlRJTUUgKGJhc2UgKyAweDNhOCkKKwl1aW50MzJfdCAqbWFwLCAq Y3M7CisJdWludDMyX3QgdHM7CisKKwlpZ3RfcmVxdWlyZShiYXNlKTsKKworCWNzID0gbWFwID0g Z2VtX21tYXBfX2RldmljZV9jb2hlcmVudChpOTE1LCBvYmouaGFuZGxlLAorCQkJCQkgICAgIDAs IDQwOTYsIFBST1RfV1JJVEUpOworCisJKmNzKysgPSAweDI0IDw8IDIzIHwgKDEgKyB1c2VfNjRi KTsgLyogU1JNICovCisJKmNzKysgPSBSVU5USU1FOworCW1lbXNldCgmcmVsb2MsIDAsIHNpemVv ZihyZWxvYykpOworCXJlbG9jLnRhcmdldF9oYW5kbGUgPSBvYmouaGFuZGxlOworCXJlbG9jLnBy ZXN1bWVkX29mZnNldCA9IG9iai5vZmZzZXQ7CisJcmVsb2Mub2Zmc2V0ID0gb2Zmc2V0X2luX3Bh Z2UoY3MpOworCXJlbG9jLmRlbHRhID0gNDAwMDsKKwkqY3MrKyA9IG9iai5vZmZzZXQgKyA0MDAw OworCSpjcysrID0gb2JqLm9mZnNldCA+PiAzMjsKKworCSpjcysrID0gTUlfQkFUQ0hfQlVGRkVS X0VORDsKKworCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKKwlnZW1fc3luYyhpOTE1LCBv YmouaGFuZGxlKTsKKwlnZW1fY2xvc2UoaTkxNSwgb2JqLmhhbmRsZSk7CisKKwl0cyA9IG1hcFsx MDAwXTsKKwltdW5tYXAobWFwLCA0MDk2KTsKKworCXJldHVybiB0czsKK30KKworc3RhdGljIHZv aWQgZmFpcnNsaWNlKGludCBpOTE1LCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2lu ZTIgKmUpCit7CisJaWd0X3NwaW5fdCAqc3BpblszXTsKKwl1aW50MzJfdCBjdHhbM107CisJdWlu dDMyX3QgdHNbM107CisKKwlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4KTsgaSsr KSB7CisJCWN0eFtpXSA9IGdlbV9jb250ZXh0X2Nsb25lX3dpdGhfZW5naW5lcyhpOTE1LCAwKTsK KwkJc3BpbltpXSA9IGlndF9zcGluX25ldyhpOTE1LCAuY3R4ID0gY3R4W2ldLCAuZW5naW5lID0g ZS0+ZmxhZ3MpOworCX0KKworCXNsZWVwKDIpOyAvKiBvdmVyIHRoZSBjb3Vyc2Ugb2YgbWFueSB0 aW1lc2xpY2VzICovCisKKwlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4KTsgaSsr KSB7CisJCWlndF9hc3NlcnQoZ2VtX2JvX2J1c3koaTkxNSwgc3BpbltpXS0+aGFuZGxlKSk7CisJ CWlndF9zcGluX2VuZChzcGluW2ldKTsKKworCQl0c1tpXSA9IHJlYWRfY3R4X3RpbWVzdGFtcChp OTE1LCBjdHhbaV0sIGUpOworCX0KKworCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShj dHgpOyBpKyspIHsKKwkJaWd0X3NwaW5fZnJlZShpOTE1LCBzcGluW2ldKTsKKwkJZ2VtX2NvbnRl eHRfZGVzdHJveShpOTE1LCBjdHhbaV0pOworCX0KKworCXFzb3J0KHRzLCAzLCBzaXplb2YoKnRz KSwgY21wX3UzMik7CisJaWd0X2luZm8oIiVzOiBbJS4xZiwgJS4xZl0gbXNcbiIsIGUtPm5hbWUs CisJCSAxZS02ICogdGlja3NfdG9fbnMoaTkxNSwgdHNbMF0pLAorCQkgMWUtNiAqIHRpY2tzX3Rv X25zKGk5MTUsIHRzWzJdKSk7CisKKwlpZ3RfYXNzZXJ0KHRzWzBdICYmIHRzWzJdID4gdHNbMF0p OworCWlndF9hc3NlcnQoNCAqIHRzWzBdID4gMyAqIHRzWzJdKTsKK30KKwogI2RlZmluZSB0ZXN0 X2VhY2hfZW5naW5lKFQsIGk5MTUsIGUpIFwKIAlpZ3Rfc3VidGVzdF93aXRoX2R5bmFtaWMoVCkg X19mb3JfZWFjaF9waHlzaWNhbF9lbmdpbmUoaTkxNSwgZSkgXAogCQlpZ3RfZHluYW1pY19mKCIl cyIsIGUtPm5hbWUpCkBAIC0yNTY3LDYgKzMzMjgsMjUgQEAgaWd0X21haW4KIAkJdGVzdF9lYWNo X2VuZ2luZSgibGF0ZXNsaWNlIiwgZmQsIGUpCiAJCQlsYXRlc2xpY2UoZmQsIGUtPmZsYWdzKTsK IAorCQlpZ3Rfc3VidGVzdF9ncm91cCB7CisJCQlpZ3RfZml4dHVyZSB7CisJCQkJaWd0X3JlcXVp cmUoZ2VtX3NjaGVkdWxlcl9oYXNfc2VtYXBob3JlcyhmZCkpOworCQkJCWlndF9yZXF1aXJlKGdl bV9zY2hlZHVsZXJfaGFzX3ByZWVtcHRpb24oZmQpKTsKKwkJCQlpZ3RfcmVxdWlyZShpbnRlbF9n ZW4oaW50ZWxfZ2V0X2RybV9kZXZpZChmZCkpID49IDgpOworCQkJfQorCisJCQl0ZXN0X2VhY2hf ZW5naW5lKCJmYWlyc2xpY2UiLCBmZCwgZSkKKwkJCQlmYWlyc2xpY2UoZmQsIGUpOworCisJCQlp Z3Rfc3VidGVzdCgiZmFpcnNsaWNlLWFsbCIpICB7CisJCQkJX19mb3JfZWFjaF9waHlzaWNhbF9l bmdpbmUoZmQsIGUpIHsKKwkJCQkJaWd0X2ZvcmsoY2hpbGQsIDEpCisJCQkJCQlmYWlyc2xpY2Uo ZmQsIGUpOworCQkJCX0KKwkJCQlpZ3Rfd2FpdGNoaWxkcmVuKCk7CisJCQl9CisJCX0KKwogCQl0 ZXN0X2VhY2hfZW5naW5lKCJzdWJtaXQtZWFybHktc2xpY2UiLCBmZCwgZSkKIAkJCXN1Ym1pdF9z bGljZShmZCwgZSwgRUFSTFlfU1VCTUlUKTsKIAkJdGVzdF9lYWNoX2VuZ2luZSgic3VibWl0LWdv bGRlbi1zbGljZSIsIGZkLCBlKQpAQCAtMjU5NSw2ICszMzc1LDggQEAgaWd0X21haW4KIAkJdGVz dF9lYWNoX2VuZ2luZV9zdG9yZSgicHJvbW90aW9uIiwgZmQsIGUpCiAJCQlwcm9tb3Rpb24oZmQs IGUtPmZsYWdzKTsKIAorCQl0ZXN0X2ZhaXJuZXNzKGZkLCAyKTsKKwogCQlpZ3Rfc3VidGVzdF9n cm91cCB7CiAJCQlpZ3RfZml4dHVyZSB7CiAJCQkJaWd0X3JlcXVpcmUoZ2VtX3NjaGVkdWxlcl9o YXNfcHJlZW1wdGlvbihmZCkpOwotLSAKMi4yNy4wCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Chris Wilson Date: Mon, 22 Jun 2020 20:08:20 +0100 Message-Id: <20200622190820.849154-1-chris@chris-wilson.co.uk> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t] i915/gem_exec_schedule: Try to spot unfairness List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: intel-gfx@lists.freedesktop.org Cc: igt-dev@lists.freedesktop.org, Tvrtko Ursulin , Chris Wilson List-ID: QW4gaW1wb3J0YW50IHByb3BlcnR5IGZvciBtdWx0aS1jbGllbnQgc3lzdGVtcyBpcyB0aGF0IGVh Y2ggY2xpZW50IGdldHMKYSAnZmFpcicgYWxsb3RtZW50IG9mIHN5c3RlbSB0aW1lLiAoV2hlcmUg ZmFpcm5lc3MgaXMgYXQgdGhlIHdoaW0gb2YgdGhlCmNvbnRleHQgcHJvcGVydGllcywgc3VjaCBh cyBwcmlvcml0aWVzLikgVGhpcyB0ZXN0IGZvcmtzIE4gaW5kZXBlbmRlbnQKY2xpZW50cyAoYWxi ZWl0IHRoZXkgaGFwcGVuIHRvIHNoYXJlIGEgc2luZ2xlIHZtKSwgYW5kIGRvZXMgYW4gZXF1YWwK YW1vdW50IG9mIHdvcmsgaW4gY2xpZW50IGFuZCBhc3NlcnRzIHRoYXQgdGhleSB0YWtlIGFuIGVx dWFsIGFtb3VudCBvZgp0aW1lLgoKVGhvdWdoIHdlIGhhdmUgbmV2ZXIgY2xhaW1lZCB0byBoYXZl IGEgY29tcGxldGVseSBmYWlyIHNjaGVkdWxlciwgdGhhdAppcyB3aGF0IGlzIGV4cGVjdGVkLgoK U2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNj OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpDYzogUmFtYWxpbmdh bSBDIDxyYW1hbGluZ2FtLmNAaW50ZWwuY29tPgotLS0KIHRlc3RzL2k5MTUvZ2VtX2V4ZWNfc2No ZWR1bGUuYyB8IDc4MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBj aGFuZ2VkLCA3ODIgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTUvZ2VtX2V4 ZWNfc2NoZWR1bGUuYyBiL3Rlc3RzL2k5MTUvZ2VtX2V4ZWNfc2NoZWR1bGUuYwppbmRleCA5MzFi MTI0NWYuLmZhZTA0NTM2YyAxMDA2NDQKLS0tIGEvdGVzdHMvaTkxNS9nZW1fZXhlY19zY2hlZHVs ZS5jCisrKyBiL3Rlc3RzL2k5MTUvZ2VtX2V4ZWNfc2NoZWR1bGUuYwpAQCAtMjksNiArMjksNyBA QAogI2luY2x1ZGUgPHN5cy9wb2xsLmg+CiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVk ZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KICNpbmNsdWRlIDxzeXMv c3lzY2FsbC5oPgogI2luY2x1ZGUgPHNjaGVkLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CkBAIC0y NTAxLDYgKzI1MDIsNzY2IEBAIHN0YXRpYyB2b2lkIG1lYXN1cmVfc2VtYXBob3JlX3Bvd2VyKGlu dCBpOTE1KQogCXJhcGxfY2xvc2UoJnBrZyk7CiB9CiAKK3N0YXRpYyBpbnQgcmVhZF90aW1lc3Rh bXBfZnJlcXVlbmN5KGludCBpOTE1KQoreworCWludCB2YWx1ZSA9IDA7CisJZHJtX2k5MTVfZ2V0 cGFyYW1fdCBncCA9IHsKKwkJLnZhbHVlID0gJnZhbHVlLAorCQkucGFyYW0gPSBJOTE1X1BBUkFN X0NTX1RJTUVTVEFNUF9GUkVRVUVOQ1ksCisJfTsKKwlpb2N0bChpOTE1LCBEUk1fSU9DVExfSTkx NV9HRVRQQVJBTSwgJmdwKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBk aXY2NF91NjRfcm91bmRfdXAodWludDY0X3QgeCwgdWludDY0X3QgeSkKK3sKKwlyZXR1cm4gKHgg KyB5IC0gMSkgLyB5OworfQorCitzdGF0aWMgdWludDY0X3QgbnNfdG9fdGlja3MoaW50IGk5MTUs IHVpbnQ2NF90IG5zKQoreworCXJldHVybiBkaXY2NF91NjRfcm91bmRfdXAobnMgKiByZWFkX3Rp bWVzdGFtcF9mcmVxdWVuY3koaTkxNSksCisJCQkJICBOU0VDX1BFUl9TRUMpOworfQorCitzdGF0 aWMgdWludDY0X3QgdGlja3NfdG9fbnMoaW50IGk5MTUsIHVpbnQ2NF90IHRpY2tzKQoreworCXJl dHVybiBkaXY2NF91NjRfcm91bmRfdXAodGlja3MgKiBOU0VDX1BFUl9TRUMsCisJCQkJICByZWFk X3RpbWVzdGFtcF9mcmVxdWVuY3koaTkxNSkpOworfQorCisjZGVmaW5lIE1JX0lOU1RSKG9wY29k ZSwgZmxhZ3MpICgoKG9wY29kZSkgPDwgMjMpIHwgKGZsYWdzKSkKKworI2RlZmluZSBNSV9NQVRI KHgpICAgICAgICAgICAgICAgICAgICAgIE1JX0lOU1RSKDB4MWEsICh4KSAtIDEpCisjZGVmaW5l IE1JX01BVEhfSU5TVFIob3Bjb2RlLCBvcDEsIG9wMikgKChvcGNvZGUpIDw8IDIwIHwgKG9wMSkg PDwgMTAgfCAob3AyKSkKKy8qIE9wY29kZXMgZm9yIE1JX01BVEhfSU5TVFIgKi8KKyNkZWZpbmUg ICBNSV9NQVRIX05PT1AgICAgICAgICAgICAgICAgICBNSV9NQVRIX0lOU1RSKDB4MDAwLCAweDAs IDB4MCkKKyNkZWZpbmUgICBNSV9NQVRIX0xPQUQob3AxLCBvcDIpICAgICAgICBNSV9NQVRIX0lO U1RSKDB4MDgwLCBvcDEsIG9wMikKKyNkZWZpbmUgICBNSV9NQVRIX0xPQURJTlYob3AxLCBvcDIp ICAgICBNSV9NQVRIX0lOU1RSKDB4NDgwLCBvcDEsIG9wMikKKyNkZWZpbmUgICBNSV9NQVRIX0xP QUQwKG9wMSkgICAgICAgICAgICBNSV9NQVRIX0lOU1RSKDB4MDgxLCBvcDEpCisjZGVmaW5lICAg TUlfTUFUSF9MT0FEMShvcDEpICAgICAgICAgICAgTUlfTUFUSF9JTlNUUigweDQ4MSwgb3AxKQor I2RlZmluZSAgIE1JX01BVEhfQUREICAgICAgICAgICAgICAgICAgIE1JX01BVEhfSU5TVFIoMHgx MDAsIDB4MCwgMHgwKQorI2RlZmluZSAgIE1JX01BVEhfU1VCICAgICAgICAgICAgICAgICAgIE1J X01BVEhfSU5TVFIoMHgxMDEsIDB4MCwgMHgwKQorI2RlZmluZSAgIE1JX01BVEhfQU5EICAgICAg ICAgICAgICAgICAgIE1JX01BVEhfSU5TVFIoMHgxMDIsIDB4MCwgMHgwKQorI2RlZmluZSAgIE1J X01BVEhfT1IgICAgICAgICAgICAgICAgICAgIE1JX01BVEhfSU5TVFIoMHgxMDMsIDB4MCwgMHgw KQorI2RlZmluZSAgIE1JX01BVEhfWE9SICAgICAgICAgICAgICAgICAgIE1JX01BVEhfSU5TVFIo MHgxMDQsIDB4MCwgMHgwKQorI2RlZmluZSAgIE1JX01BVEhfU1RPUkUob3AxLCBvcDIpICAgICAg IE1JX01BVEhfSU5TVFIoMHgxODAsIG9wMSwgb3AyKQorI2RlZmluZSAgIE1JX01BVEhfU1RPUkVJ TlYob3AxLCBvcDIpICAgIE1JX01BVEhfSU5TVFIoMHg1ODAsIG9wMSwgb3AyKQorLyogUmVnaXN0 ZXJzIHVzZWQgYXMgb3BlcmFuZHMgaW4gTUlfTUFUSF9JTlNUUiAqLworI2RlZmluZSAgIE1JX01B VEhfUkVHKHgpICAgICAgICAgICAgICAgICh4KQorI2RlZmluZSAgIE1JX01BVEhfUkVHX1NSQ0Eg ICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgICBNSV9NQVRIX1JFR19TUkNCICAgICAgICAgICAg ICAweDIxCisjZGVmaW5lICAgTUlfTUFUSF9SRUdfQUNDVSAgICAgICAgICAgICAgMHgzMQorI2Rl ZmluZSAgIE1JX01BVEhfUkVHX1pGICAgICAgICAgICAgICAgIDB4MzIKKyNkZWZpbmUgICBNSV9N QVRIX1JFR19DRiAgICAgICAgICAgICAgICAweDMzCisKKyNkZWZpbmUgTUlfTE9BRF9SRUdJU1RF Ul9SRUcgICAgTUlfSU5TVFIoMHgyQSwgMSkKKworc3RhdGljIHZvaWQgZGVsYXkoaW50IGk5MTUs CisJCSAgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAorCQkgIHVpbnQz Ml90IGhhbmRsZSwKKwkJICB1aW50NjRfdCBhZGRyLAorCQkgIHVpbnQ2NF90IG5zKQoreworCWNv bnN0IGludCB1c2VfNjRiID0gaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoaTkxNSkpID49 IDg7CisJY29uc3QgdWludDMyX3QgYmFzZSA9IGdlbV9lbmdpbmVfbW1pb19iYXNlKGk5MTUsIGUt Pm5hbWUpOworI2RlZmluZSBDU19HUFIoeCkgKGJhc2UgKyAweDYwMCArIDggKiAoeCkpCisjZGVm aW5lIFJVTlRJTUUgKGJhc2UgKyAweDNhOCkKKwllbnVtIHsgU1RBUlRfVFMsIE5PV19UUyB9Owor CXVpbnQzMl90ICptYXAsICpjcywgKmptcDsKKworCWlndF9yZXF1aXJlKGJhc2UpOworCisJLyog TG9vcCB1bnRpbCBDVFhfVElNRVNUQU1QIC0gaW5pdGlhbCA+IEBucyAqLworCisJY3MgPSBtYXAg PSBnZW1fbW1hcF9fZGV2aWNlX2NvaGVyZW50KGk5MTUsIGhhbmRsZSwgMCwgNDA5NiwgUFJPVF9X UklURSk7CisKKwkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NOworCSpjcysrID0gQ1NfR1BS KFNUQVJUX1RTKSArIDQ7CisJKmNzKysgPSAwOworCSpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9S RUc7CisJKmNzKysgPSBSVU5USU1FOworCSpjcysrID0gQ1NfR1BSKFNUQVJUX1RTKTsKKworCXdo aWxlIChvZmZzZXRfaW5fcGFnZShjcykgJiA2MykKKwkJKmNzKysgPSAwOworCWptcCA9IGNzOwor CisJKmNzKysgPSAweDUgPDwgMjM7IC8qIE1JX0FSQl9DSEVDSyAqLworCisJKmNzKysgPSBNSV9M T0FEX1JFR0lTVEVSX0lNTTsKKwkqY3MrKyA9IENTX0dQUihOT1dfVFMpICsgNDsKKwkqY3MrKyA9 IDA7CisJKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX1JFRzsKKwkqY3MrKyA9IFJVTlRJTUU7CisJ KmNzKysgPSBDU19HUFIoTk9XX1RTKTsKKworCS8qIGRlbHRhID0gbm93IC0gc3RhcnQ7IGludmVy dGVkIHRvIG1hdGNoIENPTkRfQkJFICovCisJKmNzKysgPSBNSV9NQVRIKDQpOworCSpjcysrID0g TUlfTUFUSF9MT0FEKE1JX01BVEhfUkVHX1NSQ0EsIE1JX01BVEhfUkVHKE5PV19UUykpOworCSpj cysrID0gTUlfTUFUSF9MT0FEKE1JX01BVEhfUkVHX1NSQ0IsIE1JX01BVEhfUkVHKFNUQVJUX1RT KSk7CisJKmNzKysgPSBNSV9NQVRIX1NVQjsKKwkqY3MrKyA9IE1JX01BVEhfU1RPUkVJTlYoTUlf TUFUSF9SRUcoTk9XX1RTKSwgTUlfTUFUSF9SRUdfQUNDVSk7CisKKwkvKiBTYXZlIGRlbHRhIGZv ciByZWFkaW5nIGJ5IENPTkRfQkJFICovCisJKmNzKysgPSAweDI0IDw8IDIzIHwgKDEgKyB1c2Vf NjRiKTsgLyogU1JNICovCisJKmNzKysgPSBDU19HUFIoTk9XX1RTKTsKKwkqY3MrKyA9IGFkZHIg KyA0MDAwOworCSpjcysrID0gYWRkciA+PiAzMjsKKworCS8qIERlbGF5IGJldHdlZW4gU1JNIGFu ZCBDT05EX0JCRSB0byBwb3N0IHRoZSB3cml0ZXMgKi8KKwlmb3IgKGludCBuID0gMDsgbiA8IDg7 IG4rKykgeworCQkqY3MrKyA9IE1JX1NUT1JFX0RXT1JEX0lNTTsKKwkJaWYgKHVzZV82NGIpIHsK KwkJCSpjcysrID0gYWRkciArIDQwNjQ7CisJCQkqY3MrKyA9IGFkZHIgPj4gMzI7CisJCX0gZWxz ZSB7CisJCQkqY3MrKyA9IDA7CisJCQkqY3MrKyA9IGFkZHIgKyA0MDY0OworCQl9CisJCSpjcysr ID0gMDsKKwl9CisKKwkvKiBCcmVhayBpZiBkZWx0YSA+IG5zICovCisJKmNzKysgPSBNSV9DT05E X0JBVENIX0JVRkZFUl9FTkQgfCBNSV9ET19DT01QQVJFIHwgKDEgKyB1c2VfNjRiKTsKKwkqY3Mr KyA9IH5uc190b190aWNrcyhpOTE1LCBucyk7CisJKmNzKysgPSBhZGRyICsgNDAwMDsKKwkqY3Mr KyA9IGFkZHIgPj4gMzI7CisKKwkvKiBPdGhlcndpc2UgYmFjayB0byByZWNhbGN1bGF0aW5nIGRl bHRhICovCisJKmNzKysgPSBNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCAxIDw8IDggfCB1c2VfNjRi OworCSpjcysrID0gYWRkciArIG9mZnNldF9pbl9wYWdlKGptcCk7CisJKmNzKysgPSBhZGRyID4+ IDMyOworCisJbXVubWFwKG1hcCwgNDA5Nik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNfb2JqZWN0MgorZGVsYXlfY3JlYXRlKGludCBpOTE1LCB1aW50MzJfdCBjdHgsCisJ ICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCisJICAgICB1aW50 NjRfdCB0YXJnZXRfbnMpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2Jq ID0geworCQkuaGFuZGxlID0gYmF0Y2hfY3JlYXRlKGk5MTUpLAorCQkuZmxhZ3MgPSBFWEVDX09C SkVDVF9TVVBQT1JUU180OEJfQUREUkVTUywKKwl9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y2J1ZmZlcjIgZXhlY2J1ZiA9IHsKKwkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZv YmopLAorCQkuYnVmZmVyX2NvdW50ID0gMSwKKwkJLnJzdmQxID0gY3R4LAorCQkuZmxhZ3MgPSBl LT5mbGFncywKKwl9OworCisJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOworCWdlbV9zeW5j KGk5MTUsIG9iai5oYW5kbGUpOworCisJZGVsYXkoaTkxNSwgZSwgb2JqLmhhbmRsZSwgb2JqLm9m ZnNldCwgdGFyZ2V0X25zKTsKKworCW9iai5mbGFncyB8PSBFWEVDX09CSkVDVF9QSU5ORUQ7CisJ cmV0dXJuIG9iajsKK30KKworc3RhdGljIHZvaWQgdHNsb2coaW50IGk5MTUsCisJCSAgY29uc3Qg c3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAorCQkgIHVpbnQzMl90IGhhbmRsZSwK KwkJICB1aW50NjRfdCBhZGRyKQoreworCWNvbnN0IGludCB1c2VfNjRiID0gaW50ZWxfZ2VuKGlu dGVsX2dldF9kcm1fZGV2aWQoaTkxNSkpID49IDg7CisJY29uc3QgdWludDMyX3QgYmFzZSA9IGdl bV9lbmdpbmVfbW1pb19iYXNlKGk5MTUsIGUtPm5hbWUpOworI2RlZmluZSBDU19HUFIoeCkgKGJh c2UgKyAweDYwMCArIDggKiAoeCkpCisjZGVmaW5lIENTX1RJTUVTVEFNUCAoYmFzZSArIDB4MzU4 KQorCWVudW0geyBJTkMsIE1BU0ssIEFERFIgfTsKKwl1aW50MzJfdCAqdGltZXN0YW1wX2xvLCAq YWRkcl9sbzsKKwl1aW50MzJfdCAqbWFwLCAqY3M7CisKKwlpZ3RfcmVxdWlyZShiYXNlKTsKKwor CW1hcCA9IGdlbV9tbWFwX19kZXZpY2VfY29oZXJlbnQoaTkxNSwgaGFuZGxlLCAwLCA0MDk2LCBQ Uk9UX1dSSVRFKTsKKwljcyA9IG1hcCArIDUxMjsKKworCS8qIFJlY29yZCB0aGUgY3VycmVudCBD U19USU1FU1RBTVAgaW50byBhIGpvdXJuYWwgW2EgNTEyIHNsb3QgcmluZ10uICovCisJKmNzKysg PSAweDI0IDw8IDIzIHwgKDEgKyB1c2VfNjRiKTsgLyogU1JNICovCisJKmNzKysgPSBDU19USU1F U1RBTVA7CisJdGltZXN0YW1wX2xvID0gY3M7CisJKmNzKysgPSBhZGRyOworCSpjcysrID0gYWRk ciA+PiAzMjsKKworCS8qIExvYWQgdGhlIGFkZHJlc3MgKyBpbmMgJiBtYXNrIHZhcmlhYmxlcyAq LworCSpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU07CisJKmNzKysgPSBDU19HUFIoQUREUik7 CisJYWRkcl9sbyA9IGNzOworCSpjcysrID0gYWRkcjsKKwkqY3MrKyA9IE1JX0xPQURfUkVHSVNU RVJfSU1NOworCSpjcysrID0gQ1NfR1BSKEFERFIpICsgNDsKKwkqY3MrKyA9IGFkZHIgPj4gMzI7 CisKKwkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NOworCSpjcysrID0gQ1NfR1BSKElOQyk7 CisJKmNzKysgPSA0OworCSpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU07CisJKmNzKysgPSBD U19HUFIoSU5DKSArIDQ7CisJKmNzKysgPSAwOworCisJKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVS X0lNTTsKKwkqY3MrKyA9IENTX0dQUihNQVNLKTsKKwkqY3MrKyA9IDB4ZmZmZmY3ZmY7CisJKmNz KysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTTsKKwkqY3MrKyA9IENTX0dQUihNQVNLKSArIDQ7CisJ KmNzKysgPSAweGZmZmZmZmZmOworCisJLyogSW5jcmVtZW50IHRoZSBbcmluZ10gYWRkcmVzcyBm b3Igc2F2aW5nIENTX1RJTUVTVEFNUCAqLworCSpjcysrID0gTUlfTUFUSCg4KTsKKwkqY3MrKyA9 IE1JX01BVEhfTE9BRChNSV9NQVRIX1JFR19TUkNBLCBNSV9NQVRIX1JFRyhJTkMpKTsKKwkqY3Mr KyA9IE1JX01BVEhfTE9BRChNSV9NQVRIX1JFR19TUkNCLCBNSV9NQVRIX1JFRyhBRERSKSk7CisJ KmNzKysgPSBNSV9NQVRIX0FERDsKKwkqY3MrKyA9IE1JX01BVEhfU1RPUkUoTUlfTUFUSF9SRUco QUREUiksIE1JX01BVEhfUkVHX0FDQ1UpOworCSpjcysrID0gTUlfTUFUSF9MT0FEKE1JX01BVEhf UkVHX1NSQ0EsIE1JX01BVEhfUkVHKEFERFIpKTsKKwkqY3MrKyA9IE1JX01BVEhfTE9BRChNSV9N QVRIX1JFR19TUkNCLCBNSV9NQVRIX1JFRyhNQVNLKSk7CisJKmNzKysgPSBNSV9NQVRIX0FORDsK KwkqY3MrKyA9IE1JX01BVEhfU1RPUkUoTUlfTUFUSF9SRUcoQUREUiksIE1JX01BVEhfUkVHX0FD Q1UpOworCisJLyogUmV3cml0ZSB0aGUgYmF0Y2ggYnVmZmVyIGZvciB0aGUgbmV4dCBleGVjdXRp b24gKi8KKwkqY3MrKyA9IDB4MjQgPDwgMjMgfCAoMSArIHVzZV82NGIpOyAvKiBTUk0gKi8KKwkq Y3MrKyA9IENTX0dQUihBRERSKTsKKwkqY3MrKyA9IGFkZHIgKyBvZmZzZXRfaW5fcGFnZSh0aW1l c3RhbXBfbG8pOworCSpjcysrID0gYWRkciA+PiAzMjsKKwkqY3MrKyA9IDB4MjQgPDwgMjMgfCAo MSArIHVzZV82NGIpOyAvKiBTUk0gKi8KKwkqY3MrKyA9IENTX0dQUihBRERSKTsKKwkqY3MrKyA9 IGFkZHIgKyBvZmZzZXRfaW5fcGFnZShhZGRyX2xvKTsKKwkqY3MrKyA9IGFkZHIgPj4gMzI7CisK KwkqY3MrKyA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7CisKKwltdW5tYXAobWFwLCA0MDk2KTsKK30K Kworc3RhdGljIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyCit0c2xvZ19jcmVhdGUo aW50IGk5MTUsIHVpbnQzMl90IGN0eCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdp bmUyICplKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iaiA9IHsKKwkJ LmhhbmRsZSA9IGJhdGNoX2NyZWF0ZShpOTE1KSwKKwkJLmZsYWdzID0gRVhFQ19PQkpFQ1RfU1VQ UE9SVFNfNDhCX0FERFJFU1MsCisJfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIy IGV4ZWNidWYgPSB7CisJCS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmb2JqKSwKKwkJ LmJ1ZmZlcl9jb3VudCA9IDEsCisJCS5yc3ZkMSA9IGN0eCwKKwkJLmZsYWdzID0gZS0+ZmxhZ3Ms CisJfTsKKworCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKKwlnZW1fc3luYyhpOTE1LCBv YmouaGFuZGxlKTsKKworCXRzbG9nKGk5MTUsIGUsIG9iai5oYW5kbGUsIG9iai5vZmZzZXQpOwor CisJb2JqLmZsYWdzIHw9IEVYRUNfT0JKRUNUX1BJTk5FRDsKKwlyZXR1cm4gb2JqOworfQorCitz dGF0aWMgaW50IGNtcF91MzIoY29uc3Qgdm9pZCAqQSwgY29uc3Qgdm9pZCAqQikKK3sKKwljb25z dCB1aW50MzJfdCAqYSA9IEEsICpiID0gQjsKKworCWlmICgqYSA8ICpiKQorCQlyZXR1cm4gLTE7 CisJZWxzZSBpZiAoKmEgPiAqYikKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30K Kworc3RhdGljIHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMgorcGlja19yYW5kb21fZW5n aW5lKGludCBpOTE1LCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKm5vdCkK K3sKKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmU7CisJdW5zaWduZWQg aW50IGNvdW50ID0gMDsKKworCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGk5MTUsIGUpIHsK KwkJaWYgKGUtPmZsYWdzID09IG5vdC0+ZmxhZ3MpCisJCQljb250aW51ZTsKKwkJaWYgKCFnZW1f Y2xhc3NfaGFzX211dGFibGVfc3VibWlzc2lvbihpOTE1LCBlLT5jbGFzcykpCisJCQljb250aW51 ZTsKKwkJY291bnQrKzsKKwl9CisJaWYgKCFjb3VudCkKKwkJcmV0dXJuICpub3Q7CisKKwljb3Vu dCA9IHJhbmQoKSAlIGNvdW50OworCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGk5MTUsIGUp IHsKKwkJaWYgKGUtPmZsYWdzID09IG5vdC0+ZmxhZ3MpCisJCQljb250aW51ZTsKKwkJaWYgKCFn ZW1fY2xhc3NfaGFzX211dGFibGVfc3VibWlzc2lvbihpOTE1LCBlLT5jbGFzcykpCisJCQljb250 aW51ZTsKKwkJaWYgKCFjb3VudC0tKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuICplOworfQor CitzdGF0aWMgdm9pZCBmYWlyX2NoaWxkKGludCBpOTE1LCB1aW50MzJfdCBjdHgsCisJCSAgICAg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCisJCSAgICAgICB1aW50 NjRfdCBmcmFtZV9ucywKKwkJICAgICAgIGludCB0aW1lbGluZSwKKwkJICAgICAgIHVpbnQzMl90 IGNvbW1vbiwKKwkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncywKKwkJICAgICAgIHVuc2lnbmVk IGxvbmcgKmN0bCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dCkKKyNkZWZpbmUgRl9TWU5D CQkoMSA8PCAwKQorI2RlZmluZSBGX1BBQ0UJCSgxIDw8IDEpCisjZGVmaW5lIEZfRkxPVwkJKDEg PDwgMikKKyNkZWZpbmUgRl9IQUxGCQkoMSA8PCAzKQorI2RlZmluZSBGX1NPTE8JCSgxIDw8IDQp CisjZGVmaW5lIEZfU1BBUkUJCSgxIDw8IDUpCisjZGVmaW5lIEZfTkVYVAkJKDEgPDwgNikKKyNk ZWZpbmUgRl9WSVAJCSgxIDw8IDcpCisjZGVmaW5lIEZfUlJVTAkJKDEgPDwgOCkKKyNkZWZpbmUg Rl9TSEFSRQkJKDEgPDwgOSkKKyNkZWZpbmUgRl9QSU5HCQkoMSA8PCAxMCkKKyNkZWZpbmUgRl9U SFJPVFRMRQkoMSA8PCAxMSkKK3sKKwljb25zdCBpbnQgYmF0Y2hlc19wZXJfZnJhbWUgPSBmbGFn cyAmIEZfU09MTyA/IDEgOiAzOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9i als0XSA9IHsKKwkJe30sCisJCXsKKwkJCS5oYW5kbGUgPSBjb21tb24gPzogZ2VtX2NyZWF0ZShp OTE1LCA0MDk2KSwKKwkJfSwKKwkJZGVsYXlfY3JlYXRlKGk5MTUsIGN0eCwgZSwgZnJhbWVfbnMg LyBiYXRjaGVzX3Blcl9mcmFtZSksCisJCWRlbGF5X2NyZWF0ZShpOTE1LCBjdHgsIGUsIGZyYW1l X25zIC8gYmF0Y2hlc19wZXJfZnJhbWUpLAorCX07CisJc3RydWN0IGludGVsX2V4ZWN1dGlvbl9l bmdpbmUyIHBpbmcgPSAqZTsKKwlpbnQgcF9mZW5jZSA9IC0xLCBuX2ZlbmNlID0gLTE7CisJdW5z aWduZWQgbG9uZyBjb3VudCA9IDA7CisJaW50IG47CisKKwlzcmFuZG9tKGdldHBpZCgpKTsKKwlp ZiAoZmxhZ3MgJiBGX1BJTkcpCisJCXBpbmcgPSBwaWNrX3JhbmRvbV9lbmdpbmUoaTkxNSwgZSk7 CisJb2JqWzBdID0gdHNsb2dfY3JlYXRlKGk5MTUsIGN0eCwgJnBpbmcpOworCisJd2hpbGUgKCFS RUFEX09OQ0UoKmN0bCkpIHsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVj YnVmID0geworCQkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKG9iaiksCisJCQkuYnVm ZmVyX2NvdW50ID0gNCwKKwkJCS5yc3ZkMSA9IGN0eCwKKwkJCS5yc3ZkMiA9IC0xLAorCQkJLmZs YWdzID0gZS0+ZmxhZ3MsCisJCX07CisKKwkJaWYgKGZsYWdzICYgRl9GTE9XKSB7CisJCQl1bnNp Z25lZCBpbnQgc2VxOworCisJCQlzZXEgPSBjb3VudDsKKwkJCWlmIChmbGFncyAmIEZfTkVYVCkK KwkJCQlzZXErKzsKKworCQkJZXhlY2J1Zi5yc3ZkMiA9CisJCQkJc3dfc3luY190aW1lbGluZV9j cmVhdGVfZmVuY2UodGltZWxpbmUsIHNlcSk7CisJCQlleGVjYnVmLmZsYWdzIHw9IEk5MTVfRVhF Q19GRU5DRV9JTjsKKwkJfQorCisJCWV4ZWNidWYuZmxhZ3MgfD0gSTkxNV9FWEVDX0ZFTkNFX09V VDsKKwkJZ2VtX2V4ZWNidWZfd3IoaTkxNSwgJmV4ZWNidWYpOworCQluX2ZlbmNlID0gZXhlY2J1 Zi5yc3ZkMiA+PiAzMjsKKwkJZXhlY2J1Zi5mbGFncyAmPSB+KEk5MTVfRVhFQ19GRU5DRV9PVVQg fCBJOTE1X0VYRUNfRkVOQ0VfSU4pOworCQlmb3IgKG4gPSAxOyBuIDwgYmF0Y2hlc19wZXJfZnJh bWU7IG4rKykKKwkJCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKKwkJY2xvc2UoZXhlY2J1 Zi5yc3ZkMik7CisKKwkJZXhlY2J1Zi5idWZmZXJfY291bnQgPSAxOworCQlleGVjYnVmLmJhdGNo X3N0YXJ0X29mZnNldCA9IDIwNDg7CisJCWV4ZWNidWYuZmxhZ3MgPSBwaW5nLmZsYWdzIHwgSTkx NV9FWEVDX0ZFTkNFX0lOOworCQlleGVjYnVmLnJzdmQyID0gbl9mZW5jZTsKKwkJZ2VtX2V4ZWNi dWYoaTkxNSwgJmV4ZWNidWYpOworCisJCWlmIChmbGFncyAmIEZfUEFDRSAmJiBwX2ZlbmNlICE9 IC0xKSB7CisJCQlzdHJ1Y3QgcG9sbGZkIHBmZCA9IHsKKwkJCQkuZmQgPSBwX2ZlbmNlLAorCQkJ CS5ldmVudHMgPSBQT0xMSU4sCisJCQl9OworCQkJcG9sbCgmcGZkLCAxLCAtMSk7CisJCX0KKwkJ Y2xvc2UocF9mZW5jZSk7CisKKwkJaWYgKGZsYWdzICYgRl9TWU5DKSB7CisJCQlzdHJ1Y3QgcG9s bGZkIHBmZCA9IHsKKwkJCQkuZmQgPSBuX2ZlbmNlLAorCQkJCS5ldmVudHMgPSBQT0xMSU4sCisJ CQl9OworCQkJcG9sbCgmcGZkLCAxLCAtMSk7CisJCX0KKworCQlpZiAoZmxhZ3MgJiBGX1RIUk9U VExFKQorCQkJaWd0X2lvY3RsKGk5MTUsIERSTV9JT0NUTF9JOTE1X0dFTV9USFJPVFRMRSwgMCk7 CisKKwkJaWd0X3N3YXAob2JqWzJdLCBvYmpbM10pOworCQlpZ3Rfc3dhcChwX2ZlbmNlLCBuX2Zl bmNlKTsKKwkJY291bnQrKzsKKwl9CisJY2xvc2UocF9mZW5jZSk7CisKKwlnZW1fY2xvc2UoaTkx NSwgb2JqWzNdLmhhbmRsZSk7CisJZ2VtX2Nsb3NlKGk5MTUsIG9ialsyXS5oYW5kbGUpOworCWlm IChvYmpbMV0uaGFuZGxlICE9IGNvbW1vbikKKwkJZ2VtX2Nsb3NlKGk5MTUsIG9ialsxXS5oYW5k bGUpOworCisJZ2VtX3N5bmMoaTkxNSwgb2JqWzBdLmhhbmRsZSk7CisJaWYgKG91dCkgeworCQl1 aW50MzJfdCAqbWFwOworCisJCW1hcCA9IGdlbV9tbWFwX19kZXZpY2VfY29oZXJlbnQoaTkxNSwg b2JqWzBdLmhhbmRsZSwKKwkJCQkJCTAsIDQwOTYsIFBST1RfV1JJVEUpOworCQlmb3IgKG4gPSAx OyBuIDwgbWluKGNvdW50LCA1MTIpOyBuKyspIHsKKwkJCWlndF9hc3NlcnQobWFwW25dKTsKKwkJ CW1hcFtuIC0gMV0gPSBtYXBbbl0gLSBtYXBbbiAtIDFdOworCQl9CisJCXFzb3J0KG1hcCwgLS1u LCBzaXplb2YoKm1hcCksIGNtcF91MzIpOworCQkqb3V0ID0gdGlja3NfdG9fbnMoaTkxNSwgbWFw W24gLyAyXSk7CisJCW11bm1hcChtYXAsIDQwOTYpOworCX0KKwlnZW1fY2xvc2UoaTkxNSwgb2Jq WzBdLmhhbmRsZSk7Cit9CisKK3N0YXRpYyBpbnQgY21wX3VsKGNvbnN0IHZvaWQgKkEsIGNvbnN0 IHZvaWQgKkIpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqYSA9IEEsICpiID0gQjsKKworCWlm ICgqYSA8ICpiKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAoKmEgPiAqYikKKwkJcmV0dXJuIDE7 CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHVpbnQ2NF90IGRfY3B1X3RpbWUoY29u c3Qgc3RydWN0IHJ1c2FnZSAqYSwgY29uc3Qgc3RydWN0IHJ1c2FnZSAqYikKK3sKKwl1aW50NjRf dCBjcHVfdGltZSA9IDA7CisKKwljcHVfdGltZSArPSAoYS0+cnVfdXRpbWUudHZfc2VjIC0gYi0+ cnVfdXRpbWUudHZfc2VjKSAqIE5TRUNfUEVSX1NFQzsKKwljcHVfdGltZSArPSAoYS0+cnVfdXRp bWUudHZfdXNlYyAtIGItPnJ1X3V0aW1lLnR2X3VzZWMpICogMTAwMDsKKworCWNwdV90aW1lICs9 IChhLT5ydV9zdGltZS50dl9zZWMgLSBiLT5ydV9zdGltZS50dl9zZWMpICogTlNFQ19QRVJfU0VD OworCWNwdV90aW1lICs9IChhLT5ydV9zdGltZS50dl91c2VjIC0gYi0+cnVfc3RpbWUudHZfdXNl YykgKiAxMDAwOworCisJcmV0dXJuIGNwdV90aW1lOworfQorCitzdGF0aWMgdm9pZCB0aW1lbGlu ZV9hZHZhbmNlKGludCB0aW1lbGluZSwgaW50IGRlbGF5X25zKQoreworCXN0cnVjdCB0aW1lc3Bl YyB0diA9IHsgLnR2X25zZWMgPSBkZWxheV9ucyB9OworCW5hbm9zbGVlcCgmdHYsIE5VTEwpOwor CXN3X3N5bmNfdGltZWxpbmVfaW5jKHRpbWVsaW5lLCAxKTsKK30KKworc3RhdGljIHZvaWQgZmFp cm5lc3MoaW50IGk5MTUsCisJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdp bmUyICplLAorCQkgICAgIGludCB0aW1lb3V0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJY29u c3QgaW50IGZyYW1lX25zID0gMTY2NjYgKiAxMDAwOworCWNvbnN0IGludCBmZW5jZV9ucyA9IGZs YWdzICYgRl9IQUxGID8gMiAqIGZyYW1lX25zIDogZnJhbWVfbnM7CisJdW5zaWduZWQgbG9uZyAq cmVzdWx0OworCXVpbnQzMl90IGNvbW1vbiA9IDA7CisKKwlpZ3RfcmVxdWlyZShnZW1fY2xhc3Nf aGFzX211dGFibGVfc3VibWlzc2lvbihpOTE1LCBlLT5jbGFzcykpOworCisJaWYgKGZsYWdzICYg Rl9TSEFSRSkKKwkJY29tbW9uID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk1KTsKKworCXJlc3VsdCA9 IG1tYXAoTlVMTCwgNDA5NiwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCB8IE1BUF9BTk9OLCAtMSwg MCk7CisKKwlmb3IgKGludCBuID0gMjsgbiA8PSA2NDsgbiA8PD0gMSkgeyAvKiAzMiA9PSA1MDB1 cyBwZXIgY2xpZW50ICovCisJCWludCB0aW1lbGluZSA9IHN3X3N5bmNfdGltZWxpbmVfY3JlYXRl KCk7CisJCWludCBuZmVuY2VzID0gdGltZW91dCAqIE5TRUNfUEVSX1NFQyAvIGZlbmNlX25zICsg MTsKKwkJY29uc3QgaW50IG5jaGlsZCA9IG4gLSAxOyAvKiBvZGQgZm9yIGVhc3kgbWVkaWFucyAq LworCQljb25zdCBpbnQgY2hpbGRfbnMgPSBmcmFtZV9ucyAvIChuY2hpbGQgKyAhIShmbGFncyAm IEZfU1BBUkUpKTsKKwkJY29uc3QgaW50IGxvID0gbmNoaWxkIC8gNDsKKwkJY29uc3QgaW50IGhp ID0gKDMgKiBuY2hpbGQgKyAzKSAvIDQgLSAxOworCQlzdHJ1Y3QgcnVzYWdlIG9sZF91c2FnZSwg dXNhZ2U7CisJCXVpbnQ2NF90IGNwdV90aW1lLCBkX3RpbWU7CisJCXVuc2lnbmVkIGxvbmcgdmlw ID0gLTE7CisJCXN0cnVjdCB0aW1lc3BlYyB0djsKKwkJc3RydWN0IGlndF9tZWFuIG07CisKKwkJ aWYgKGZsYWdzICYgRl9QSU5HKSB7CisJCQlzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIg KnBpbmc7CisKKwkJCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGk5MTUsIHBpbmcpIHsKKwkJ CQlpZiAocGluZy0+ZmxhZ3MgPT0gZS0+ZmxhZ3MpCisJCQkJCWNvbnRpbnVlOworCisJCQkJaWd0 X2ZvcmsoY2hpbGQsIDEpIHsKKwkJCQkJdWludDMyX3QgY3R4ID0gZ2VtX2NvbnRleHRfY2xvbmVf d2l0aF9lbmdpbmVzKGk5MTUsIDApOworCisJCQkJCWZhaXJfY2hpbGQoaTkxNSwgY3R4LCBwaW5n LAorCQkJCQkJICAgY2hpbGRfbnMgLyA4LAorCQkJCQkJICAgLTEsIGNvbW1vbiwKKwkJCQkJCSAg IEZfU09MTyB8IEZfUEFDRSB8IEZfU0hBUkUsCisJCQkJCQkgICAmcmVzdWx0W25jaGlsZF0sCisJ CQkJCQkgICBOVUxMKTsKKworCQkJCQlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7CisJ CQkJfQorCQkJfQorCQl9CisKKwkJbWVtc2V0KHJlc3VsdCwgMCwgKG5jaGlsZCArIDEpICogc2l6 ZW9mKHJlc3VsdFswXSkpOworCQlnZXRydXNhZ2UoUlVTQUdFX0NISUxEUkVOLCAmb2xkX3VzYWdl KTsKKwkJaWd0X25zZWNfZWxhcHNlZChtZW1zZXQoJnR2LCAwLCBzaXplb2YodHYpKSk7CisJCWln dF9mb3JrKGNoaWxkLCBuY2hpbGQpIHsKKwkJCXVpbnQzMl90IGN0eCA9IGdlbV9jb250ZXh0X2Ns b25lX3dpdGhfZW5naW5lcyhpOTE1LCAwKTsKKworCQkJaWYgKGZsYWdzICYgRl9WSVAgJiYgY2hp bGQgPT0gMCkgeworCQkJCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShpOTE1LCBjdHgsIE1BWF9Q UklPKTsKKwkJCQlmbGFncyB8PSBGX0ZMT1c7CisJCQl9CisJCQlpZiAoZmxhZ3MgJiBGX1JSVUwg JiYgY2hpbGQgPT0gMCkKKwkJCQlmbGFncyB8PSBGX1NPTE8gfCBGX0ZMT1cgfCBGX1NZTkM7CisK KwkJCWZhaXJfY2hpbGQoaTkxNSwgY3R4LCBlLCBjaGlsZF9ucywKKwkJCQkgICB0aW1lbGluZSwg Y29tbW9uLCBmbGFncywKKwkJCQkgICAmcmVzdWx0W25jaGlsZF0sCisJCQkJICAgJnJlc3VsdFtj aGlsZF0pOworCisJCQlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7CisJCX0KKworCQl3 aGlsZSAobmZlbmNlcy0tKQorCQkJdGltZWxpbmVfYWR2YW5jZSh0aW1lbGluZSwgZmVuY2VfbnMp OworCisJCXJlc3VsdFtuY2hpbGRdID0gMTsKKwkJZm9yIChpbnQgY2hpbGQgPSAwOyBjaGlsZCA8 IG5jaGlsZDsgY2hpbGQrKykgeworCQkJd2hpbGUgKCFSRUFEX09OQ0UocmVzdWx0W2NoaWxkXSkp CisJCQkJdGltZWxpbmVfYWR2YW5jZSh0aW1lbGluZSwgZmVuY2VfbnMpOworCQl9CisKKwkJaWd0 X3dhaXRjaGlsZHJlbigpOworCQljbG9zZSh0aW1lbGluZSk7CisKKwkJLyogQXJlIHdlIHJ1bm5p bmcgb3V0IG9mIENQVSB0aW1lLCBhbmQgZmFpbCB0byBzdWJtaXQgZnJhbWVzPyAqLworCQlkX3Rp bWUgPSBpZ3RfbnNlY19lbGFwc2VkKCZ0dik7CisJCWdldHJ1c2FnZShSVVNBR0VfQ0hJTERSRU4s ICZ1c2FnZSk7CisJCWNwdV90aW1lID0gZF9jcHVfdGltZSgmdXNhZ2UsICZvbGRfdXNhZ2UpOwor CQlpZiAoMTAgKiBjcHVfdGltZSA+IDkgKiBkX3RpbWUpIHsKKwkJCWlmIChuY2hpbGQgPiA3KQor CQkJCWJyZWFrOworCisJCQlpZ3Rfc2tpcF9vbl9mKDEwICogY3B1X3RpbWUgPiA5ICogZF90aW1l LAorCQkJCSAgICAgICIlLjBmJSUgQ1BVIHVzYWdlLCBwcmVzdW1pbmcgY2FwYWNpdHkgZXhjZWVk ZWRcbiIsCisJCQkJICAgICAgMTAwLiAqIGNwdV90aW1lIC8gZF90aW1lKTsKKwkJfQorCisJCWln dF9tZWFuX2luaXQoJm0pOworCQlmb3IgKGludCBjaGlsZCA9IDA7IGNoaWxkIDwgbmNoaWxkOyBj aGlsZCsrKQorCQkJaWd0X21lYW5fYWRkKCZtLCByZXN1bHRbY2hpbGRdKTsKKworCQlpZiAoZmxh Z3MgJiAoRl9WSVAgfCBGX1JSVUwpKQorCQkJdmlwID0gcmVzdWx0WzBdOworCisJCXFzb3J0KHJl c3VsdCwgbmNoaWxkLCBzaXplb2YoKnJlc3VsdCksIGNtcF91bCk7CisJCWlndF9pbmZvKCIlMmQg Y2xpZW50cywgcmFuZ2U6IFslLjFmLCAlLjFmXSwgaXFyOiBbJS4xZiwgJS4xZl0sIG1lZGlhbjog JS4xZiwgbWVhbjogJS4xZiDCsSAlLjJmIG1zXG4iLAorCQkJIG5jaGlsZCwKKwkJCSAxZS02ICog cmVzdWx0WzBdLCAgMWUtNiAqIHJlc3VsdFtuY2hpbGQgLSAxXSwKKwkJCSAxZS02ICogcmVzdWx0 W2xvXSwgMWUtNiAqIHJlc3VsdFtoaV0sCisJCQkgMWUtNiAqIHJlc3VsdFtuY2hpbGQgLyAyXSwK KwkJCSAxZS02ICogaWd0X21lYW5fZ2V0KCZtKSwKKwkJCSAxZS02ICogc3FydChpZ3RfbWVhbl9n ZXRfdmFyaWFuY2UoJm0pKSk7CisKKwkJaWYgKHZpcCAhPSAtMSkgeworCQkJaWd0X2luZm8oIlZJ UCBpbnRlcnZhbCAlLjJmIG1zXG4iLCAxZS02ICogdmlwKTsKKwkJCWlndF9hc3NlcnQoNCAqIHZp cCA+IDMgKiBmZW5jZV9ucyAmJgorCQkJCSAgIDMgKiB2aXAgPCA0ICogZmVuY2VfbnMpOworCQl9 CisKKwkJLyogTWF5IGJlIHNsb3dlZCBkdWUgdG8gc2hlZXIgdm9sdW1lIG9mIGNvbnRleHQgc3dp dGNoZXMgKi8KKwkJaWd0X2Fzc2VydCg0ICogaWd0X21lYW5fZ2V0KCZtKSA+IDMgKiBmZW5jZV9u cyAmJgorCQkJICAgICAgIGlndF9tZWFuX2dldCgmbSkgPCAzICogZmVuY2VfbnMpOworCisJCWln dF9hc3NlcnQoNCAqIGlndF9tZWFuX2dldCgmbSkgPiAzICogcmVzdWx0W25jaGlsZCAvIDJdICYm CisJCQkgICAzICogaWd0X21lYW5fZ2V0KCZtKSA8IDQgKiByZXN1bHRbbmNoaWxkIC8gMl0pOwor CisJCWlndF9hc3NlcnQoMiAqIChyZXN1bHRbaGldIC0gcmVzdWx0W2xvXSkgPCByZXN1bHRbbmNo aWxkIC8gMl0pOworCX0KKworCW11bm1hcChyZXN1bHQsIDQwOTYpOworCWlmIChjb21tb24pCisJ CWdlbV9jbG9zZShpOTE1LCBjb21tb24pOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2ZhaXJuZXNz KGludCBpOTE1LCBpbnQgdGltZW91dCkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwkJY29u c3QgY2hhciAqbmFtZTsKKwkJdW5zaWduZWQgaW50IGZsYWdzOworCX0gZmFpcltdID0geworCQkv KgorCQkgKiBub25lIC0gbWF4aW1hbCBncmVlZCBpbiBlYWNoIGNsaWVudAorCQkgKgorCQkgKiBQ dXNoIGFzIG1hbnkgZnJhbWVzIGZyb20gZWFjaCBjbGllbnQgYXMgZmFzdCBhcyBwb3NzaWJsZQor CQkgKi8KKwkJeyAibm9uZSIsICAgICAgIDAgfSwKKwkJeyAibm9uZS12aXAiLCAgIEZfVklQIH0s IC8qIG9uZSB2aXAgY2xpZW50IG11c3QgbWVldCBkZWFkbGluZXMgKi8KKwkJeyAibm9uZS1zb2xv IiwgIEZfU09MTyB9LCAvKiAxIGJhdGNoIHBlciBmcmFtZSBwZXIgY2xpZW50ICovCisJCXsgIm5v bmUtc2hhcmUiLCBGX1NIQVJFIH0sIC8qIHJlYWQgZnJvbSBhIGNvbW1vbiBidWZmZXIgKi8KKwkJ eyAibm9uZS1ycnVsIiwgIEZfUlJVTCB9LCAvKiAicmVhbHRpbWUtcmVzcG9uc2UgdW5kZXIgbG9h ZCIgKi8KKwkJeyAibm9uZS1waW5nIiwgIEZfUElORyB9LCAvKiBtZWFzdXJlIGludGVyLWVuZ2lu ZSBmYWlybmVzcyAqLworCisJCS8qCisJCSAqIHRocm90dGxlIC0gb3JpZ2luYWwgcGVyIGNsaWVu dCB0aHJvdHRsaW5nCisJCSAqCisJCSAqIFVzZWQgZm9yIGZyb250IGJ1ZmZlcmluZyByZW5kZXJp bmcgd2hlcmUgdGhlcmUgaXMgbm8KKwkJICogZXh0ZW5hbCBmcmFtZSBtYXJrZXIuIEVhY2ggY2xp ZW50IHRyaWVzIHRvIG9ubHkga2VlcAorCQkgKiAyMG1zIG9mIHdvcmsgc3VibWl0dGVkLCB0aG91 Z2ggdGhhdCBtZWFzdXJlbWVudCBpcworCQkgKiBmbGF3ZWQuLi4KKwkJICoKKwkJICogVGhpcyBp cyB1c2VkIGJ5IFhvcnkgdG8gdHJ5IGFuZCBtYWludGFpbiBzb21lIHJlc2VtYmFsYW5jZQorCQkg KiBvZiBpbnB1dC9vdXRwdXQgY29uc2lzdGVuY3kgd2hlbiBiZWluZyBmZWVkIGEgY29udGludW91 cworCQkgKiBzdHJlYW0gb2YgWDExIGRyYXcgcmVxdWVzdHMgc3RyYWlnaHQgaW50byBzY2Fub3V0 LCB3aGVyZQorCQkgKiB0aGUgY2xpZW50cyBtYXkgc3VibWl0IHRoZSB3b3JrIGZhc3RlciB0aGFu IGNhbiBiZSBkcmF3bi4KKwkJICovCisJCXsgInRocm90dGxlIiwgICAgICAgRl9USFJPVFRMRSB9 LAorCQl7ICJ0aHJvdHRsZS12aXAiLCAgIEZfVEhST1RUTEUgfCBGX1ZJUCB9LAorCQl7ICJ0aHJv dHRsZS1zb2xvIiwgIEZfVEhST1RUTEUgfCBGX1NPTE8gfSwKKwkJeyAidGhyb3R0bGUtc2hhcmUi LCBGX1RIUk9UVExFIHwgRl9TSEFSRSB9LAorCQl7ICJ0aHJvdHRsZS1ycnVsIiwgIEZfVEhST1RU TEUgfCBGX1JSVUwgfSwKKworCQkvKgorCQkgKiBwYWNlIC0gbWVzYSAic3VibWl0IGRvdWJsZSBi dWZmZXJpbmciCisJCSAqCisJCSAqIFN1Ym1pdCBhIGZyYW1lLCB3YWl0IGZvciBwcmV2aW91cyBm cmFtZSB0byBzdGFydC4gVGhpcworCQkgKiBwcmV2ZW50cyBlYWNoIGNsaWVudCBmcm9tIGdldHRp bmcgdG9vIGZhciBhaGVhZCBvZiBpdHMKKwkJICogcmVuZGVyaW5nLCBtYWludGFpbmluZyBhIGNv bnNpc3RlbnQgaW5wdXQvb3V0cHV0IGxhdGVuY3kuCisJCSAqLworCQl7ICJwYWNlIiwgICAgICAg Rl9QQUNFIH0sCisJCXsgInBhY2Utc29sbyIsICBGX1BBQ0UgfCBGX1NPTE99LAorCQl7ICJwYWNl LXNoYXJlIiwgRl9QQUNFIHwgRl9TSEFSRX0sCisJCXsgInBhY2UtcGluZyIsICBGX1BBQ0UgfCBG X1NIQVJFIHwgRl9QSU5HfSwKKworCQkvKiBzeW5jIC0gb25seSBzdWJtaXQgYSBmcmFtZSBhdCBh IHRpbWUgKi8KKwkJeyAic3luYyIsICAgICAgRl9TWU5DIH0sCisJCXsgInN5bmMtdmlwIiwgIEZf U1lOQyB8IEZfVklQIH0sCisJCXsgInN5bmMtc29sbyIsIEZfU1lOQyB8IEZfU09MTyB9LAorCisJ CS8qIGZsb3cgLSBzeW5jaHJvbmlzZSBleGVjdXRpb24gYWdhaW5zdCB0aGUgY2xvY2sgKHZibGFu aykgKi8KKwkJeyAiZmxvdyIsICAgICAgIEZfUEFDRSB8IEZfRkxPVyB9LAorCQl7ICJmbG93LXNo YXJlIiwgRl9QQUNFIHwgRl9GTE9XIHwgRl9TSEFSRSB9LAorCQl7ICJmbG93LXBpbmciLCAgRl9Q QUNFIHwgRl9GTE9XIHwgRl9TSEFSRSB8IEZfUElORyB9LAorCisJCS8qIG5leHQgLSBzdWJtaXQg YWhlYWQgb2YgdGhlIGNsb2NrICh2YmxhbmsgZG91YmxlIGJ1ZmZlcmluZykgKi8KKwkJeyAibmV4 dCIsICAgICAgIEZfUEFDRSB8IEZfRkxPVyB8IEZfTkVYVCB9LAorCQl7ICJuZXh0LXNoYXJlIiwg Rl9QQUNFIHwgRl9GTE9XIHwgRl9ORVhUIHwgRl9TSEFSRSB9LAorCQl7ICJuZXh0LXBpbmciLCAg Rl9QQUNFIHwgRl9GTE9XIHwgRl9ORVhUIHwgRl9TSEFSRSB8IEZfUElORyB9LAorCisJCS8qIHNw YXJlIC0gdW5kZXJ1dGlsaXNlIGJ5IGEgc2luZ2xlIGNsaWVudCB0aW1lc2xpY2UgKi8KKwkJeyAi c3BhcmUiLCBGX1BBQ0UgfCBGX0ZMT1cgfCBGX1NQQVJFIH0sCisKKwkJLyogaGFsZiAtIHJ1biBh dCBoYWxmIHBhY2UgKHN1Ym1pdCAxNm1zIG9mIHdvcmsgZXZlcnkgMzJtcykgKi8KKwkJeyAiaGFs ZiIsICBGX1BBQ0UgfCBGX0ZMT1cgfCBGX0hBTEYgfSwKKworCQl7fQorCX07CisKKwlmb3IgKHR5 cGVvZigqZmFpcikgKmYgPSBmYWlyOyBmLT5uYW1lOyBmKyspIHsKKwkJaWd0X3N1YnRlc3Rfd2l0 aF9keW5hbWljX2YoImZhaXItJXMiLCBmLT5uYW1lKSAgeworCQkJY29uc3Qgc3RydWN0IGludGVs X2V4ZWN1dGlvbl9lbmdpbmUyICplOworCisJCQlpZ3RfcmVxdWlyZShpbnRlbF9nZW4oaW50ZWxf Z2V0X2RybV9kZXZpZChpOTE1KSkgPj0gOCk7CisKKwkJCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5n aW5lKGk5MTUsIGUpIHsKKwkJCQlpZiAoIWdlbV9jbGFzc19jYW5fc3RvcmVfZHdvcmQoaTkxNSwg ZS0+Y2xhc3MpKQorCQkJCQljb250aW51ZTsKKworCQkJCWlndF9keW5hbWljX2YoIiVzIiwgZS0+ bmFtZSkKKwkJCQkJZmFpcm5lc3MoaTkxNSwgZSwgdGltZW91dCwgZi0+ZmxhZ3MpOworCQkJfQor CQl9CisJfQorfQorCitzdGF0aWMgdWludDMyX3QgcmVhZF9jdHhfdGltZXN0YW1wKGludCBpOTE1 LAorCQkJCSAgIHVpbnQzMl90IGN0eCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0 aW9uX2VuZ2luZTIgKmUpCit7CisJY29uc3QgaW50IHVzZV82NGIgPSBpbnRlbF9nZW4oaW50ZWxf Z2V0X2RybV9kZXZpZChpOTE1KSkgPj0gODsKKwljb25zdCB1aW50MzJfdCBiYXNlID0gZ2VtX2Vu Z2luZV9tbWlvX2Jhc2UoaTkxNSwgZS0+bmFtZSk7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxv Y2F0aW9uX2VudHJ5IHJlbG9jOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9i aiA9IHsKKwkJLmhhbmRsZSA9IGdlbV9jcmVhdGUoaTkxNSwgNDA5NiksCisJCS5vZmZzZXQgPSAz MiA8PCAyMCwKKwkJLnJlbG9jc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJnJlbG9jKSwKKwkJLnJl bG9jYXRpb25fY291bnQgPSAxLAorCX07CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVy MiBleGVjYnVmID0geworCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJm9iaiksCisJ CS5idWZmZXJfY291bnQgPSAxLAorCQkuZmxhZ3MgPSBlLT5mbGFncywKKwkJLnJzdmQxID0gY3R4 LAorCX07CisjZGVmaW5lIFJVTlRJTUUgKGJhc2UgKyAweDNhOCkKKwl1aW50MzJfdCAqbWFwLCAq Y3M7CisJdWludDMyX3QgdHM7CisKKwlpZ3RfcmVxdWlyZShiYXNlKTsKKworCWNzID0gbWFwID0g Z2VtX21tYXBfX2RldmljZV9jb2hlcmVudChpOTE1LCBvYmouaGFuZGxlLAorCQkJCQkgICAgIDAs IDQwOTYsIFBST1RfV1JJVEUpOworCisJKmNzKysgPSAweDI0IDw8IDIzIHwgKDEgKyB1c2VfNjRi KTsgLyogU1JNICovCisJKmNzKysgPSBSVU5USU1FOworCW1lbXNldCgmcmVsb2MsIDAsIHNpemVv ZihyZWxvYykpOworCXJlbG9jLnRhcmdldF9oYW5kbGUgPSBvYmouaGFuZGxlOworCXJlbG9jLnBy ZXN1bWVkX29mZnNldCA9IG9iai5vZmZzZXQ7CisJcmVsb2Mub2Zmc2V0ID0gb2Zmc2V0X2luX3Bh Z2UoY3MpOworCXJlbG9jLmRlbHRhID0gNDAwMDsKKwkqY3MrKyA9IG9iai5vZmZzZXQgKyA0MDAw OworCSpjcysrID0gb2JqLm9mZnNldCA+PiAzMjsKKworCSpjcysrID0gTUlfQkFUQ0hfQlVGRkVS X0VORDsKKworCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKKwlnZW1fc3luYyhpOTE1LCBv YmouaGFuZGxlKTsKKwlnZW1fY2xvc2UoaTkxNSwgb2JqLmhhbmRsZSk7CisKKwl0cyA9IG1hcFsx MDAwXTsKKwltdW5tYXAobWFwLCA0MDk2KTsKKworCXJldHVybiB0czsKK30KKworc3RhdGljIHZv aWQgZmFpcnNsaWNlKGludCBpOTE1LCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2lu ZTIgKmUpCit7CisJaWd0X3NwaW5fdCAqc3BpblszXTsKKwl1aW50MzJfdCBjdHhbM107CisJdWlu dDMyX3QgdHNbM107CisKKwlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4KTsgaSsr KSB7CisJCWN0eFtpXSA9IGdlbV9jb250ZXh0X2Nsb25lX3dpdGhfZW5naW5lcyhpOTE1LCAwKTsK KwkJc3BpbltpXSA9IGlndF9zcGluX25ldyhpOTE1LCAuY3R4ID0gY3R4W2ldLCAuZW5naW5lID0g ZS0+ZmxhZ3MpOworCX0KKworCXNsZWVwKDIpOyAvKiBvdmVyIHRoZSBjb3Vyc2Ugb2YgbWFueSB0 aW1lc2xpY2VzICovCisKKwlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4KTsgaSsr KSB7CisJCWlndF9hc3NlcnQoZ2VtX2JvX2J1c3koaTkxNSwgc3BpbltpXS0+aGFuZGxlKSk7CisJ CWlndF9zcGluX2VuZChzcGluW2ldKTsKKworCQl0c1tpXSA9IHJlYWRfY3R4X3RpbWVzdGFtcChp OTE1LCBjdHhbaV0sIGUpOworCX0KKworCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShj dHgpOyBpKyspIHsKKwkJaWd0X3NwaW5fZnJlZShpOTE1LCBzcGluW2ldKTsKKwkJZ2VtX2NvbnRl eHRfZGVzdHJveShpOTE1LCBjdHhbaV0pOworCX0KKworCXFzb3J0KHRzLCAzLCBzaXplb2YoKnRz KSwgY21wX3UzMik7CisJaWd0X2luZm8oIiVzOiBbJS4xZiwgJS4xZl0gbXNcbiIsIGUtPm5hbWUs CisJCSAxZS02ICogdGlja3NfdG9fbnMoaTkxNSwgdHNbMF0pLAorCQkgMWUtNiAqIHRpY2tzX3Rv X25zKGk5MTUsIHRzWzJdKSk7CisKKwlpZ3RfYXNzZXJ0KHRzWzBdICYmIHRzWzJdID4gdHNbMF0p OworCWlndF9hc3NlcnQoNCAqIHRzWzBdID4gMyAqIHRzWzJdKTsKK30KKwogI2RlZmluZSB0ZXN0 X2VhY2hfZW5naW5lKFQsIGk5MTUsIGUpIFwKIAlpZ3Rfc3VidGVzdF93aXRoX2R5bmFtaWMoVCkg X19mb3JfZWFjaF9waHlzaWNhbF9lbmdpbmUoaTkxNSwgZSkgXAogCQlpZ3RfZHluYW1pY19mKCIl cyIsIGUtPm5hbWUpCkBAIC0yNTY3LDYgKzMzMjgsMjUgQEAgaWd0X21haW4KIAkJdGVzdF9lYWNo X2VuZ2luZSgibGF0ZXNsaWNlIiwgZmQsIGUpCiAJCQlsYXRlc2xpY2UoZmQsIGUtPmZsYWdzKTsK IAorCQlpZ3Rfc3VidGVzdF9ncm91cCB7CisJCQlpZ3RfZml4dHVyZSB7CisJCQkJaWd0X3JlcXVp cmUoZ2VtX3NjaGVkdWxlcl9oYXNfc2VtYXBob3JlcyhmZCkpOworCQkJCWlndF9yZXF1aXJlKGdl bV9zY2hlZHVsZXJfaGFzX3ByZWVtcHRpb24oZmQpKTsKKwkJCQlpZ3RfcmVxdWlyZShpbnRlbF9n ZW4oaW50ZWxfZ2V0X2RybV9kZXZpZChmZCkpID49IDgpOworCQkJfQorCisJCQl0ZXN0X2VhY2hf ZW5naW5lKCJmYWlyc2xpY2UiLCBmZCwgZSkKKwkJCQlmYWlyc2xpY2UoZmQsIGUpOworCisJCQlp Z3Rfc3VidGVzdCgiZmFpcnNsaWNlLWFsbCIpICB7CisJCQkJX19mb3JfZWFjaF9waHlzaWNhbF9l bmdpbmUoZmQsIGUpIHsKKwkJCQkJaWd0X2ZvcmsoY2hpbGQsIDEpCisJCQkJCQlmYWlyc2xpY2Uo ZmQsIGUpOworCQkJCX0KKwkJCQlpZ3Rfd2FpdGNoaWxkcmVuKCk7CisJCQl9CisJCX0KKwogCQl0 ZXN0X2VhY2hfZW5naW5lKCJzdWJtaXQtZWFybHktc2xpY2UiLCBmZCwgZSkKIAkJCXN1Ym1pdF9z bGljZShmZCwgZSwgRUFSTFlfU1VCTUlUKTsKIAkJdGVzdF9lYWNoX2VuZ2luZSgic3VibWl0LWdv bGRlbi1zbGljZSIsIGZkLCBlKQpAQCAtMjU5NSw2ICszMzc1LDggQEAgaWd0X21haW4KIAkJdGVz dF9lYWNoX2VuZ2luZV9zdG9yZSgicHJvbW90aW9uIiwgZmQsIGUpCiAJCQlwcm9tb3Rpb24oZmQs IGUtPmZsYWdzKTsKIAorCQl0ZXN0X2ZhaXJuZXNzKGZkLCAyKTsKKwogCQlpZ3Rfc3VidGVzdF9n cm91cCB7CiAJCQlpZ3RfZml4dHVyZSB7CiAJCQkJaWd0X3JlcXVpcmUoZ2VtX3NjaGVkdWxlcl9o YXNfcHJlZW1wdGlvbihmZCkpOwotLSAKMi4yNy4wCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2lndC1kZXYK