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=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 9FDC7C0018C for ; Wed, 16 Dec 2020 15:25:13 +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 44EEF233CF for ; Wed, 16 Dec 2020 15:25:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 44EEF233CF 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 A2B8189354; Wed, 16 Dec 2020 15:25:10 +0000 (UTC) Received: from fireflyinternet.com (unknown [77.68.26.236]) by gabe.freedesktop.org (Postfix) with ESMTPS id DA8F489354; Wed, 16 Dec 2020 15:25:08 +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 23345551-1500050 for multiple; Wed, 16 Dec 2020 15:24:55 +0000 From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Wed, 16 Dec 2020 15:24:56 +0000 Message-Id: <20201216152456.1304749-1-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.29.2 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 djI6IGlndF9hc3NlcnRfZiBhbmQgbW9yZSBjb21tZW50YXJ5OyBleGNsdWRlIHZpcCBmcm9tIGNs aWVudCBzdGF0cywKaW5jbHVkZSByYW5nZSBvZiBmcmFtZSBpbnRlcnZhbHMgZnJvbSBlYWNoIGlu ZGl2aWR1YWwgY2xpZW50CnYzOiBXcml0ZSBkb3duIHdoYXQgdGhlIHRlc3QgYWN0dWFsbHkgZG9l cyEKClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVr PgpDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KQ2M6IFJhbWFs aW5nYW0gQyA8cmFtYWxpbmdhbS5jQGludGVsLmNvbT4KLS0tCiB0ZXN0cy9pOTE1L2dlbV9leGVj X3NjaGVkdWxlLmMgfCA3OTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZp bGUgY2hhbmdlZCwgNzk3IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS90ZXN0cy9pOTE1L2dl bV9leGVjX3NjaGVkdWxlLmMgYi90ZXN0cy9pOTE1L2dlbV9leGVjX3NjaGVkdWxlLmMKaW5kZXgg ZGQxNWIyYWM3Li44YmU1NTM5YWEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2k5MTUvZ2VtX2V4ZWNfc2No ZWR1bGUuYworKysgYi90ZXN0cy9pOTE1L2dlbV9leGVjX3NjaGVkdWxlLmMKQEAgLTI5LDYgKzI5 LDcgQEAKICNpbmNsdWRlIDxzeXMvcG9sbC5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogI2lu Y2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CiAjaW5jbHVkZSA8 c3lzL3N5c2NhbGwuaD4KICNpbmNsdWRlIDxzY2hlZC5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgpA QCAtMjUzMiwxMiArMjUzMywyNTAgQEAgc3RhdGljIHVpbnQ2NF90IGRpdjY0X3U2NF9yb3VuZF91 cCh1aW50NjRfdCB4LCB1aW50NjRfdCB5KQogCXJldHVybiAoeCArIHkgLSAxKSAvIHk7CiB9CiAK K3N0YXRpYyB1aW50NjRfdCBuc190b19jdHhfdGlja3MoaW50IGk5MTUsIHVpbnQ2NF90IG5zKQor eworCWludCBmID0gcmVhZF90aW1lc3RhbXBfZnJlcXVlbmN5KGk5MTUpOworCWlmIChpbnRlbF9n ZW4oaW50ZWxfZ2V0X2RybV9kZXZpZChpOTE1KSkgPT0gMTEpCisJCWYgPSAxMjUwMDAwMDsgLyog aWNsISEhIGFyZSB5b3UgZmVlbGluZyBhbHJpZ2h0PyBDVFggdnMgQ1MgKi8KKwlyZXR1cm4gZGl2 NjRfdTY0X3JvdW5kX3VwKG5zICogZiwgTlNFQ19QRVJfU0VDKTsKK30KKwogc3RhdGljIHVpbnQ2 NF90IHRpY2tzX3RvX25zKGludCBpOTE1LCB1aW50NjRfdCB0aWNrcykKIHsKIAlyZXR1cm4gZGl2 NjRfdTY0X3JvdW5kX3VwKHRpY2tzICogTlNFQ19QRVJfU0VDLAogCQkJCSAgcmVhZF90aW1lc3Rh bXBfZnJlcXVlbmN5KGk5MTUpKTsKIH0KIAorI2RlZmluZSBNSV9JTlNUUihvcGNvZGUsIGZsYWdz KSAoKChvcGNvZGUpIDw8IDIzKSB8IChmbGFncykpCisKKyNkZWZpbmUgTUlfTUFUSCh4KSAgICAg ICAgICAgICAgICAgICAgICBNSV9JTlNUUigweDFhLCAoeCkgLSAxKQorI2RlZmluZSBNSV9NQVRI X0lOU1RSKG9wY29kZSwgb3AxLCBvcDIpICgob3Bjb2RlKSA8PCAyMCB8IChvcDEpIDw8IDEwIHwg KG9wMikpCisvKiBPcGNvZGVzIGZvciBNSV9NQVRIX0lOU1RSICovCisjZGVmaW5lICAgTUlfTUFU SF9OT09QICAgICAgICAgICAgICAgICAgTUlfTUFUSF9JTlNUUigweDAwMCwgMHgwLCAweDApCisj ZGVmaW5lICAgTUlfTUFUSF9MT0FEKG9wMSwgb3AyKSAgICAgICAgTUlfTUFUSF9JTlNUUigweDA4 MCwgb3AxLCBvcDIpCisjZGVmaW5lICAgTUlfTUFUSF9MT0FESU5WKG9wMSwgb3AyKSAgICAgTUlf TUFUSF9JTlNUUigweDQ4MCwgb3AxLCBvcDIpCisjZGVmaW5lICAgTUlfTUFUSF9MT0FEMChvcDEp ICAgICAgICAgICAgTUlfTUFUSF9JTlNUUigweDA4MSwgb3AxKQorI2RlZmluZSAgIE1JX01BVEhf TE9BRDEob3AxKSAgICAgICAgICAgIE1JX01BVEhfSU5TVFIoMHg0ODEsIG9wMSkKKyNkZWZpbmUg ICBNSV9NQVRIX0FERCAgICAgICAgICAgICAgICAgICBNSV9NQVRIX0lOU1RSKDB4MTAwLCAweDAs IDB4MCkKKyNkZWZpbmUgICBNSV9NQVRIX1NVQiAgICAgICAgICAgICAgICAgICBNSV9NQVRIX0lO U1RSKDB4MTAxLCAweDAsIDB4MCkKKyNkZWZpbmUgICBNSV9NQVRIX0FORCAgICAgICAgICAgICAg ICAgICBNSV9NQVRIX0lOU1RSKDB4MTAyLCAweDAsIDB4MCkKKyNkZWZpbmUgICBNSV9NQVRIX09S ICAgICAgICAgICAgICAgICAgICBNSV9NQVRIX0lOU1RSKDB4MTAzLCAweDAsIDB4MCkKKyNkZWZp bmUgICBNSV9NQVRIX1hPUiAgICAgICAgICAgICAgICAgICBNSV9NQVRIX0lOU1RSKDB4MTA0LCAw eDAsIDB4MCkKKyNkZWZpbmUgICBNSV9NQVRIX1NUT1JFKG9wMSwgb3AyKSAgICAgICBNSV9NQVRI X0lOU1RSKDB4MTgwLCBvcDEsIG9wMikKKyNkZWZpbmUgICBNSV9NQVRIX1NUT1JFSU5WKG9wMSwg b3AyKSAgICBNSV9NQVRIX0lOU1RSKDB4NTgwLCBvcDEsIG9wMikKKy8qIFJlZ2lzdGVycyB1c2Vk IGFzIG9wZXJhbmRzIGluIE1JX01BVEhfSU5TVFIgKi8KKyNkZWZpbmUgICBNSV9NQVRIX1JFRyh4 KSAgICAgICAgICAgICAgICAoeCkKKyNkZWZpbmUgICBNSV9NQVRIX1JFR19TUkNBICAgICAgICAg ICAgICAweDIwCisjZGVmaW5lICAgTUlfTUFUSF9SRUdfU1JDQiAgICAgICAgICAgICAgMHgyMQor I2RlZmluZSAgIE1JX01BVEhfUkVHX0FDQ1UgICAgICAgICAgICAgIDB4MzEKKyNkZWZpbmUgICBN SV9NQVRIX1JFR19aRiAgICAgICAgICAgICAgICAweDMyCisjZGVmaW5lICAgTUlfTUFUSF9SRUdf Q0YgICAgICAgICAgICAgICAgMHgzMworCisjZGVmaW5lIE1JX0xPQURfUkVHSVNURVJfUkVHICAg IE1JX0lOU1RSKDB4MkEsIDEpCisKK3N0YXRpYyB2b2lkIGRlbGF5KGludCBpOTE1LAorCQkgIGNv bnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwKKwkJICB1aW50MzJfdCBoYW5k bGUsCisJCSAgdWludDY0X3QgYWRkciwKKwkJICB1aW50NjRfdCBucykKK3sKKwljb25zdCBpbnQg dXNlXzY0YiA9IGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGk5MTUpKSA+PSA4OworCWNv bnN0IHVpbnQzMl90IGJhc2UgPSBnZW1fZW5naW5lX21taW9fYmFzZShpOTE1LCBlLT5uYW1lKTsK KyNkZWZpbmUgQ1NfR1BSKHgpIChiYXNlICsgMHg2MDAgKyA4ICogKHgpKQorI2RlZmluZSBSVU5U SU1FIChiYXNlICsgMHgzYTgpCisJZW51bSB7IFNUQVJUX1RTLCBOT1dfVFMgfTsKKwl1aW50MzJf dCAqbWFwLCAqY3MsICpqbXA7CisKKwlpZ3RfcmVxdWlyZShiYXNlKTsKKworCS8qIExvb3AgdW50 aWwgQ1RYX1RJTUVTVEFNUCAtIGluaXRpYWwgPiBAbnMgKi8KKworCWNzID0gbWFwID0gZ2VtX21t YXBfX2RldmljZV9jb2hlcmVudChpOTE1LCBoYW5kbGUsIDAsIDQwOTYsIFBST1RfV1JJVEUpOwor CisJKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTTsKKwkqY3MrKyA9IENTX0dQUihTVEFSVF9U UykgKyA0OworCSpjcysrID0gMDsKKwkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfUkVHOworCSpj cysrID0gUlVOVElNRTsKKwkqY3MrKyA9IENTX0dQUihTVEFSVF9UUyk7CisKKwl3aGlsZSAob2Zm c2V0X2luX3BhZ2UoY3MpICYgNjMpCisJCSpjcysrID0gMDsKKwlqbXAgPSBjczsKKworCSpjcysr ID0gMHg1IDw8IDIzOyAvKiBNSV9BUkJfQ0hFQ0sgKi8KKworCSpjcysrID0gTUlfTE9BRF9SRUdJ U1RFUl9JTU07CisJKmNzKysgPSBDU19HUFIoTk9XX1RTKSArIDQ7CisJKmNzKysgPSAwOworCSpj cysrID0gTUlfTE9BRF9SRUdJU1RFUl9SRUc7CisJKmNzKysgPSBSVU5USU1FOworCSpjcysrID0g Q1NfR1BSKE5PV19UUyk7CisKKwkvKiBkZWx0YSA9IG5vdyAtIHN0YXJ0OyBpbnZlcnRlZCB0byBt YXRjaCBDT05EX0JCRSAqLworCSpjcysrID0gTUlfTUFUSCg0KTsKKwkqY3MrKyA9IE1JX01BVEhf TE9BRChNSV9NQVRIX1JFR19TUkNBLCBNSV9NQVRIX1JFRyhOT1dfVFMpKTsKKwkqY3MrKyA9IE1J X01BVEhfTE9BRChNSV9NQVRIX1JFR19TUkNCLCBNSV9NQVRIX1JFRyhTVEFSVF9UUykpOworCSpj cysrID0gTUlfTUFUSF9TVUI7CisJKmNzKysgPSBNSV9NQVRIX1NUT1JFSU5WKE1JX01BVEhfUkVH KE5PV19UUyksIE1JX01BVEhfUkVHX0FDQ1UpOworCisJLyogU2F2ZSBkZWx0YSBmb3IgcmVhZGlu ZyBieSBDT05EX0JCRSAqLworCSpjcysrID0gMHgyNCA8PCAyMyB8ICgxICsgdXNlXzY0Yik7IC8q IFNSTSAqLworCSpjcysrID0gQ1NfR1BSKE5PV19UUyk7CisJKmNzKysgPSBhZGRyICsgNDAwMDsK KwkqY3MrKyA9IGFkZHIgPj4gMzI7CisKKwkvKiBEZWxheSBiZXR3ZWVuIFNSTSBhbmQgQ09ORF9C QkUgdG8gcG9zdCB0aGUgd3JpdGVzICovCisJZm9yIChpbnQgbiA9IDA7IG4gPCA4OyBuKyspIHsK KwkJKmNzKysgPSBNSV9TVE9SRV9EV09SRF9JTU07CisJCWlmICh1c2VfNjRiKSB7CisJCQkqY3Mr KyA9IGFkZHIgKyA0MDY0OworCQkJKmNzKysgPSBhZGRyID4+IDMyOworCQl9IGVsc2UgeworCQkJ KmNzKysgPSAwOworCQkJKmNzKysgPSBhZGRyICsgNDA2NDsKKwkJfQorCQkqY3MrKyA9IDA7CisJ fQorCisJLyogQnJlYWsgaWYgZGVsdGEgW3RpbWUgZWxhcHNlZF0gPiBucyAqLworCSpjcysrID0g TUlfQ09ORF9CQVRDSF9CVUZGRVJfRU5EIHwgTUlfRE9fQ09NUEFSRSB8ICgxICsgdXNlXzY0Yik7 CisJKmNzKysgPSB+bnNfdG9fY3R4X3RpY2tzKGk5MTUsIG5zKTsKKwkqY3MrKyA9IGFkZHIgKyA0 MDAwOworCSpjcysrID0gYWRkciA+PiAzMjsKKworCS8qIE90aGVyd2lzZSBiYWNrIHRvIHJlY2Fs Y3VsYXRpbmcgZGVsdGEgKi8KKwkqY3MrKyA9IE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8IDEgPDwg OCB8IHVzZV82NGI7CisJKmNzKysgPSBhZGRyICsgb2Zmc2V0X2luX3BhZ2Uoam1wKTsKKwkqY3Mr KyA9IGFkZHIgPj4gMzI7CisKKwltdW5tYXAobWFwLCA0MDk2KTsKK30KKworc3RhdGljIHN0cnVj dCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyCitkZWxheV9jcmVhdGUoaW50IGk5MTUsIHVpbnQz Ml90IGN0eCwKKwkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwK KwkgICAgIHVpbnQ2NF90IHRhcmdldF9ucykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNf b2JqZWN0MiBvYmogPSB7CisJCS5oYW5kbGUgPSBiYXRjaF9jcmVhdGUoaTkxNSksCisJCS5mbGFn cyA9IEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4Ql9BRERSRVNTLAorCX07CisJc3RydWN0IGRybV9p OTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmID0geworCQkuYnVmZmVyc19wdHIgPSB0b191c2Vy X3BvaW50ZXIoJm9iaiksCisJCS5idWZmZXJfY291bnQgPSAxLAorCQkucnN2ZDEgPSBjdHgsCisJ CS5mbGFncyA9IGUtPmZsYWdzLAorCX07CisKKwlvYmoub2Zmc2V0ID0gb2JqLmhhbmRsZSA8PCAx MjsKKwlnZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7CisJZ2VtX3N5bmMoaTkxNSwgb2JqLmhh bmRsZSk7CisKKwlkZWxheShpOTE1LCBlLCBvYmouaGFuZGxlLCBvYmoub2Zmc2V0LCB0YXJnZXRf bnMpOworCisJb2JqLmZsYWdzIHw9IEVYRUNfT0JKRUNUX1BJTk5FRDsKKwlyZXR1cm4gb2JqOwor fQorCitzdGF0aWMgdm9pZCB0c2xvZyhpbnQgaTkxNSwKKwkJICBjb25zdCBzdHJ1Y3QgaW50ZWxf ZXhlY3V0aW9uX2VuZ2luZTIgKmUsCisJCSAgdWludDMyX3QgaGFuZGxlLAorCQkgIHVpbnQ2NF90 IGFkZHIpCit7CisJY29uc3QgaW50IHVzZV82NGIgPSBpbnRlbF9nZW4oaW50ZWxfZ2V0X2RybV9k ZXZpZChpOTE1KSkgPj0gODsKKwljb25zdCB1aW50MzJfdCBiYXNlID0gZ2VtX2VuZ2luZV9tbWlv X2Jhc2UoaTkxNSwgZS0+bmFtZSk7CisjZGVmaW5lIENTX0dQUih4KSAoYmFzZSArIDB4NjAwICsg OCAqICh4KSkKKyNkZWZpbmUgQ1NfVElNRVNUQU1QIChiYXNlICsgMHgzNTgpCisJZW51bSB7IElO QywgTUFTSywgQUREUiB9OworCXVpbnQzMl90ICp0aW1lc3RhbXBfbG8sICphZGRyX2xvOworCXVp bnQzMl90ICptYXAsICpjczsKKworCWlndF9yZXF1aXJlKGJhc2UpOworCisJbWFwID0gZ2VtX21t YXBfX2RldmljZV9jb2hlcmVudChpOTE1LCBoYW5kbGUsIDAsIDQwOTYsIFBST1RfV1JJVEUpOwor CWNzID0gbWFwICsgNTEyOworCisJLyogUmVjb3JkIHRoZSBjdXJyZW50IENTX1RJTUVTVEFNUCBp bnRvIGEgam91cm5hbCBbYSA1MTIgc2xvdCByaW5nXS4gKi8KKwkqY3MrKyA9IDB4MjQgPDwgMjMg fCAoMSArIHVzZV82NGIpOyAvKiBTUk0gKi8KKwkqY3MrKyA9IENTX1RJTUVTVEFNUDsKKwl0aW1l c3RhbXBfbG8gPSBjczsKKwkqY3MrKyA9IGFkZHI7CisJKmNzKysgPSBhZGRyID4+IDMyOworCisJ LyogTG9hZCB0aGUgYWRkcmVzcyArIGluYyAmIG1hc2sgdmFyaWFibGVzICovCisJKmNzKysgPSBN SV9MT0FEX1JFR0lTVEVSX0lNTTsKKwkqY3MrKyA9IENTX0dQUihBRERSKTsKKwlhZGRyX2xvID0g Y3M7CisJKmNzKysgPSBhZGRyOworCSpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU07CisJKmNz KysgPSBDU19HUFIoQUREUikgKyA0OworCSpjcysrID0gYWRkciA+PiAzMjsKKworCSpjcysrID0g TUlfTE9BRF9SRUdJU1RFUl9JTU07CisJKmNzKysgPSBDU19HUFIoSU5DKTsKKwkqY3MrKyA9IDQ7 CisJKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTTsKKwkqY3MrKyA9IENTX0dQUihJTkMpICsg NDsKKwkqY3MrKyA9IDA7CisKKwkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NOworCSpjcysr ID0gQ1NfR1BSKE1BU0spOworCSpjcysrID0gMHhmZmZmZjdmZjsKKwkqY3MrKyA9IE1JX0xPQURf UkVHSVNURVJfSU1NOworCSpjcysrID0gQ1NfR1BSKE1BU0spICsgNDsKKwkqY3MrKyA9IDB4ZmZm ZmZmZmY7CisKKwkvKiBJbmNyZW1lbnQgdGhlIFtyaW5nXSBhZGRyZXNzIGZvciBzYXZpbmcgQ1Nf VElNRVNUQU1QICovCisJKmNzKysgPSBNSV9NQVRIKDgpOworCSpjcysrID0gTUlfTUFUSF9MT0FE KE1JX01BVEhfUkVHX1NSQ0EsIE1JX01BVEhfUkVHKElOQykpOworCSpjcysrID0gTUlfTUFUSF9M T0FEKE1JX01BVEhfUkVHX1NSQ0IsIE1JX01BVEhfUkVHKEFERFIpKTsKKwkqY3MrKyA9IE1JX01B VEhfQUREOworCSpjcysrID0gTUlfTUFUSF9TVE9SRShNSV9NQVRIX1JFRyhBRERSKSwgTUlfTUFU SF9SRUdfQUNDVSk7CisJKmNzKysgPSBNSV9NQVRIX0xPQUQoTUlfTUFUSF9SRUdfU1JDQSwgTUlf TUFUSF9SRUcoQUREUikpOworCSpjcysrID0gTUlfTUFUSF9MT0FEKE1JX01BVEhfUkVHX1NSQ0Is IE1JX01BVEhfUkVHKE1BU0spKTsKKwkqY3MrKyA9IE1JX01BVEhfQU5EOworCSpjcysrID0gTUlf TUFUSF9TVE9SRShNSV9NQVRIX1JFRyhBRERSKSwgTUlfTUFUSF9SRUdfQUNDVSk7CisKKwkvKiBS ZXdyaXRlIHRoZSBiYXRjaCBidWZmZXIgZm9yIHRoZSBuZXh0IGV4ZWN1dGlvbiAqLworCSpjcysr ID0gMHgyNCA8PCAyMyB8ICgxICsgdXNlXzY0Yik7IC8qIFNSTSAqLworCSpjcysrID0gQ1NfR1BS KEFERFIpOworCSpjcysrID0gYWRkciArIG9mZnNldF9pbl9wYWdlKHRpbWVzdGFtcF9sbyk7CisJ KmNzKysgPSBhZGRyID4+IDMyOworCSpjcysrID0gMHgyNCA8PCAyMyB8ICgxICsgdXNlXzY0Yik7 IC8qIFNSTSAqLworCSpjcysrID0gQ1NfR1BSKEFERFIpOworCSpjcysrID0gYWRkciArIG9mZnNl dF9pbl9wYWdlKGFkZHJfbG8pOworCSpjcysrID0gYWRkciA+PiAzMjsKKworCSpjcysrID0gTUlf QkFUQ0hfQlVGRkVSX0VORDsKKworCW11bm1hcChtYXAsIDQwOTYpOworfQorCitzdGF0aWMgc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIKK3RzbG9nX2NyZWF0ZShpbnQgaTkxNSwgdWlu dDMyX3QgY3R4LCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCit7CisJ c3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0geworCQkuaGFuZGxlID0gYmF0 Y2hfY3JlYXRlKGk5MTUpLAorCQkuZmxhZ3MgPSBFWEVDX09CSkVDVF9TVVBQT1JUU180OEJfQURE UkVTUywKKwl9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsK KwkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZvYmopLAorCQkuYnVmZmVyX2NvdW50 ID0gMSwKKwkJLnJzdmQxID0gY3R4LAorCQkuZmxhZ3MgPSBlLT5mbGFncywKKwl9OworCisJb2Jq Lm9mZnNldCA9IG9iai5oYW5kbGUgPDwgMTI7CisJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYp OworCWdlbV9zeW5jKGk5MTUsIG9iai5oYW5kbGUpOworCisJdHNsb2coaTkxNSwgZSwgb2JqLmhh bmRsZSwgb2JqLm9mZnNldCk7CisKKwlvYmouZmxhZ3MgfD0gRVhFQ19PQkpFQ1RfUElOTkVEOwor CXJldHVybiBvYmo7Cit9CisKIHN0YXRpYyBpbnQgY21wX3UzMihjb25zdCB2b2lkICpBLCBjb25z dCB2b2lkICpCKQogewogCWNvbnN0IHVpbnQzMl90ICphID0gQSwgKmIgPSBCOwpAQCAtMjU1MCw2 ICsyNzg5LDU2MCBAQCBzdGF0aWMgaW50IGNtcF91MzIoY29uc3Qgdm9pZCAqQSwgY29uc3Qgdm9p ZCAqQikKIAkJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBib29sIGhhc19jdHhfdGltZXN0YW1wKGlu dCBpOTE1LCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCit7CisJY29u c3QgaW50IGdlbiA9IGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGk5MTUpKTsKKworCWlm IChnZW4gPT0gOCAmJiBlLT5jbGFzcyA9PSBJOTE1X0VOR0lORV9DTEFTU19WSURFTykKKwkJcmV0 dXJuIGZhbHNlOyAvKiBsb29rcyBmdWJhciAqLworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp YyBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIKK3BpY2tfcmFuZG9tX2VuZ2luZShpbnQg aTkxNSwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICpub3QpCit7CisJY29u c3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplOworCXVuc2lnbmVkIGludCBjb3Vu dCA9IDA7CisKKwlfX2Zvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShpOTE1LCBlKSB7CisJCWlmIChl LT5mbGFncyA9PSBub3QtPmZsYWdzKQorCQkJY29udGludWU7CisJCWlmICghZ2VtX2NsYXNzX2hh c19tdXRhYmxlX3N1Ym1pc3Npb24oaTkxNSwgZS0+Y2xhc3MpKQorCQkJY29udGludWU7CisJCWNv dW50Kys7CisJfQorCWlmICghY291bnQpCisJCXJldHVybiAqbm90OworCisJY291bnQgPSByYW5k KCkgJSBjb3VudDsKKwlfX2Zvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShpOTE1LCBlKSB7CisJCWlm IChlLT5mbGFncyA9PSBub3QtPmZsYWdzKQorCQkJY29udGludWU7CisJCWlmICghZ2VtX2NsYXNz X2hhc19tdXRhYmxlX3N1Ym1pc3Npb24oaTkxNSwgZS0+Y2xhc3MpKQorCQkJY29udGludWU7CisJ CWlmICghY291bnQtLSkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiAqZTsKK30KKworc3RhdGlj IHZvaWQgZmFpcl9jaGlsZChpbnQgaTkxNSwgdWludDMyX3QgY3R4LAorCQkgICAgICAgY29uc3Qg c3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAorCQkgICAgICAgdWludDY0X3QgZnJh bWVfbnMsCisJCSAgICAgICBpbnQgdGltZWxpbmUsCisJCSAgICAgICB1aW50MzJfdCBjb21tb24s CisJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCSAgICAgICB1bnNpZ25lZCBsb25nICpj dGwsCisJCSAgICAgICB1bnNpZ25lZCBsb25nICptZWRpYW4sCisJCSAgICAgICB1bnNpZ25lZCBs b25nICppcXIpCisjZGVmaW5lIEZfU1lOQwkJKDEgPDwgMCkKKyNkZWZpbmUgRl9QQUNFCQkoMSA8 PCAxKQorI2RlZmluZSBGX0ZMT1cJCSgxIDw8IDIpCisjZGVmaW5lIEZfSEFMRgkJKDEgPDwgMykK KyNkZWZpbmUgRl9TT0xPCQkoMSA8PCA0KQorI2RlZmluZSBGX1NQQVJFCQkoMSA8PCA1KQorI2Rl ZmluZSBGX05FWFQJCSgxIDw8IDYpCisjZGVmaW5lIEZfVklQCQkoMSA8PCA3KQorI2RlZmluZSBG X1JSVUwJCSgxIDw8IDgpCisjZGVmaW5lIEZfU0hBUkUJCSgxIDw8IDkpCisjZGVmaW5lIEZfUElO RwkJKDEgPDwgMTApCisjZGVmaW5lIEZfVEhST1RUTEUJKDEgPDwgMTEpCisjZGVmaW5lIEZfSVNP TEFURQkoMSA8PCAxMikKK3sKKwljb25zdCBpbnQgYmF0Y2hlc19wZXJfZnJhbWUgPSBmbGFncyAm IEZfU09MTyA/IDEgOiAzOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9ials0 XSA9IHsKKwkJe30sCisJCXsKKwkJCS5oYW5kbGUgPSBjb21tb24gPzogZ2VtX2NyZWF0ZShpOTE1 LCA0MDk2KSwKKwkJfSwKKwkJZGVsYXlfY3JlYXRlKGk5MTUsIGN0eCwgZSwgZnJhbWVfbnMgLyBi YXRjaGVzX3Blcl9mcmFtZSksCisJCWRlbGF5X2NyZWF0ZShpOTE1LCBjdHgsIGUsIGZyYW1lX25z IC8gYmF0Y2hlc19wZXJfZnJhbWUpLAorCX07CisJc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdp bmUyIHBpbmcgPSAqZTsKKwlpbnQgcF9mZW5jZSA9IC0xLCBuX2ZlbmNlID0gLTE7CisJdW5zaWdu ZWQgbG9uZyBjb3VudCA9IDA7CisJaW50IG47CisKKwlzcmFuZG9tKGdldHBpZCgpKTsKKwlpZiAo ZmxhZ3MgJiBGX1BJTkcpCisJCXBpbmcgPSBwaWNrX3JhbmRvbV9lbmdpbmUoaTkxNSwgZSk7CisJ b2JqWzBdID0gdHNsb2dfY3JlYXRlKGk5MTUsIGN0eCwgJnBpbmcpOworCisJd2hpbGUgKCFSRUFE X09OQ0UoKmN0bCkpIHsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVm ID0geworCQkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKG9iaiksCisJCQkuYnVmZmVy X2NvdW50ID0gMywKKwkJCS5yc3ZkMSA9IGN0eCwKKwkJCS5yc3ZkMiA9IC0xLAorCQkJLmZsYWdz ID0gZS0+ZmxhZ3MsCisJCX07CisKKwkJaWYgKGZsYWdzICYgRl9GTE9XKSB7CisJCQl1bnNpZ25l ZCBpbnQgc2VxOworCisJCQlzZXEgPSBjb3VudDsKKwkJCWlmIChmbGFncyAmIEZfTkVYVCkKKwkJ CQlzZXErKzsKKworCQkJZXhlY2J1Zi5yc3ZkMiA9CisJCQkJc3dfc3luY190aW1lbGluZV9jcmVh dGVfZmVuY2UodGltZWxpbmUsIHNlcSk7CisJCQlleGVjYnVmLmZsYWdzIHw9IEk5MTVfRVhFQ19G RU5DRV9JTjsKKwkJfQorCisJCWV4ZWNidWYuZmxhZ3MgfD0gSTkxNV9FWEVDX0ZFTkNFX09VVDsK KwkJZ2VtX2V4ZWNidWZfd3IoaTkxNSwgJmV4ZWNidWYpOworCQluX2ZlbmNlID0gZXhlY2J1Zi5y c3ZkMiA+PiAzMjsKKwkJZXhlY2J1Zi5mbGFncyAmPSB+KEk5MTVfRVhFQ19GRU5DRV9PVVQgfCBJ OTE1X0VYRUNfRkVOQ0VfSU4pOworCQlmb3IgKG4gPSAxOyBuIDwgYmF0Y2hlc19wZXJfZnJhbWU7 IG4rKykKKwkJCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKKwkJY2xvc2UoZXhlY2J1Zi5y c3ZkMik7CisKKwkJZXhlY2J1Zi5idWZmZXJfY291bnQgPSAxOworCQlleGVjYnVmLmJhdGNoX3N0 YXJ0X29mZnNldCA9IDIwNDg7CisJCWV4ZWNidWYuZmxhZ3MgPSBwaW5nLmZsYWdzIHwgSTkxNV9F WEVDX0ZFTkNFX0lOOworCQlleGVjYnVmLnJzdmQyID0gbl9mZW5jZTsKKwkJZ2VtX2V4ZWNidWYo aTkxNSwgJmV4ZWNidWYpOworCisJCWlmIChmbGFncyAmIEZfUEFDRSAmJiBwX2ZlbmNlICE9IC0x KSB7CisJCQlzdHJ1Y3QgcG9sbGZkIHBmZCA9IHsKKwkJCQkuZmQgPSBwX2ZlbmNlLAorCQkJCS5l dmVudHMgPSBQT0xMSU4sCisJCQl9OworCQkJcG9sbCgmcGZkLCAxLCAtMSk7CisJCX0KKwkJY2xv c2UocF9mZW5jZSk7CisKKwkJaWYgKGZsYWdzICYgRl9TWU5DKSB7CisJCQlzdHJ1Y3QgcG9sbGZk IHBmZCA9IHsKKwkJCQkuZmQgPSBuX2ZlbmNlLAorCQkJCS5ldmVudHMgPSBQT0xMSU4sCisJCQl9 OworCQkJcG9sbCgmcGZkLCAxLCAtMSk7CisJCX0KKworCQlpZiAoZmxhZ3MgJiBGX1RIUk9UVExF KQorCQkJaWd0X2lvY3RsKGk5MTUsIERSTV9JT0NUTF9JOTE1X0dFTV9USFJPVFRMRSwgMCk7CisK KwkJaWd0X3N3YXAob2JqWzJdLCBvYmpbM10pOworCQlpZ3Rfc3dhcChwX2ZlbmNlLCBuX2ZlbmNl KTsKKwkJY291bnQrKzsKKwl9CisJY2xvc2UocF9mZW5jZSk7CisKKwlnZW1fY2xvc2UoaTkxNSwg b2JqWzNdLmhhbmRsZSk7CisJZ2VtX2Nsb3NlKGk5MTUsIG9ialsyXS5oYW5kbGUpOworCWlmIChv YmpbMV0uaGFuZGxlICE9IGNvbW1vbikKKwkJZ2VtX2Nsb3NlKGk5MTUsIG9ialsxXS5oYW5kbGUp OworCisJZ2VtX3N5bmMoaTkxNSwgb2JqWzBdLmhhbmRsZSk7CisJaWYgKG1lZGlhbikgeworCQl1 aW50MzJfdCAqbWFwOworCisJCS8qCisJCSAqIFdlIHJlY29yZGVkIHRoZSBDU19USU1FU1RBTVAg b2YgZWFjaCBmcmFtZSwgYW5kIGlmCisJCSAqIHRoZSBHUFUgaXMgYmVpbmcgc2hhcmVkIGNvbXBs ZXRlbHkgZmFpcmx5LCB3ZSBleHBlY3QKKwkJICogZWFjaCBmcmFtZSB0byBiZSBhdCB0aGUgc2Ft ZSBpbnRlcnZhbCBmcm9tIHRoZSBsYXN0LgorCQkgKgorCQkgKiBDb21wdXRlIHRoZSBpbnRlcnZh bCBiZXR3ZWVuIGZyYW1lcyBhbmQgcmVwb3J0IGJhY2sKKwkJICogYm90aCB0aGUgbWVkaWFuIGlu dGVydmFsIGFuZCB0aGUgcmFuZ2UgZm9yIHRoaXMgY2xpZW50LgorCQkgKi8KKworCQltYXAgPSBn ZW1fbW1hcF9fZGV2aWNlX2NvaGVyZW50KGk5MTUsIG9ialswXS5oYW5kbGUsCisJCQkJCQkwLCA0 MDk2LCBQUk9UX1dSSVRFKTsKKwkJZm9yIChuID0gMTsgbiA8IG1pbihjb3VudCwgNTEyKTsgbisr KSB7CisJCQlpZ3RfYXNzZXJ0KG1hcFtuXSk7CisJCQltYXBbbiAtIDFdID0gbWFwW25dIC0gbWFw W24gLSAxXTsKKwkJfQorCQlxc29ydChtYXAsIC0tbiwgc2l6ZW9mKCptYXApLCBjbXBfdTMyKTsK KwkJKmlxciA9IHRpY2tzX3RvX25zKGk5MTUsIG1hcFsoMyAqIG4gKyAzKSAvIDRdIC0gbWFwW24g LyA0XSk7CisJCSptZWRpYW4gPSB0aWNrc190b19ucyhpOTE1LCBtYXBbbiAvIDJdKTsKKwkJbXVu bWFwKG1hcCwgNDA5Nik7CisJfQorCWdlbV9jbG9zZShpOTE1LCBvYmpbMF0uaGFuZGxlKTsKK30K Kworc3RhdGljIGludCBjbXBfdWwoY29uc3Qgdm9pZCAqQSwgY29uc3Qgdm9pZCAqQikKK3sKKwlj b25zdCB1bnNpZ25lZCBsb25nICphID0gQSwgKmIgPSBCOworCisJaWYgKCphIDwgKmIpCisJCXJl dHVybiAtMTsKKwllbHNlIGlmICgqYSA+ICpiKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVy biAwOworfQorCitzdGF0aWMgdWludDY0X3QgZF9jcHVfdGltZShjb25zdCBzdHJ1Y3QgcnVzYWdl ICphLCBjb25zdCBzdHJ1Y3QgcnVzYWdlICpiKQoreworCXVpbnQ2NF90IGNwdV90aW1lID0gMDsK KworCWNwdV90aW1lICs9IChhLT5ydV91dGltZS50dl9zZWMgLSBiLT5ydV91dGltZS50dl9zZWMp ICogTlNFQ19QRVJfU0VDOworCWNwdV90aW1lICs9IChhLT5ydV91dGltZS50dl91c2VjIC0gYi0+ cnVfdXRpbWUudHZfdXNlYykgKiAxMDAwOworCisJY3B1X3RpbWUgKz0gKGEtPnJ1X3N0aW1lLnR2 X3NlYyAtIGItPnJ1X3N0aW1lLnR2X3NlYykgKiBOU0VDX1BFUl9TRUM7CisJY3B1X3RpbWUgKz0g KGEtPnJ1X3N0aW1lLnR2X3VzZWMgLSBiLT5ydV9zdGltZS50dl91c2VjKSAqIDEwMDA7CisKKwly ZXR1cm4gY3B1X3RpbWU7Cit9CisKK3N0YXRpYyB2b2lkIHRpbWVsaW5lX2FkdmFuY2UoaW50IHRp bWVsaW5lLCBpbnQgZGVsYXlfbnMpCit7CisJc3RydWN0IHRpbWVzcGVjIHR2ID0geyAudHZfbnNl YyA9IGRlbGF5X25zIH07CisJbmFub3NsZWVwKCZ0diwgTlVMTCk7CisJc3dfc3luY190aW1lbGlu ZV9pbmModGltZWxpbmUsIDEpOworfQorCitzdGF0aWMgdm9pZCBmYWlybmVzcyhpbnQgaTkxNSwK KwkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCisJCSAgICAg aW50IHRpbWVvdXQsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwljb25zdCBpbnQgZnJhbWVfbnMg PSAxNjY2NiAqIDEwMDA7CisJY29uc3QgaW50IGZlbmNlX25zID0gZmxhZ3MgJiBGX0hBTEYgPyAy ICogZnJhbWVfbnMgOiBmcmFtZV9uczsKKwl1bnNpZ25lZCBsb25nICpyZXN1bHQsICppcXI7CisJ dWludDMyX3QgY29tbW9uID0gMDsKKworCWlndF9yZXF1aXJlKGhhc19jdHhfdGltZXN0YW1wKGk5 MTUsIGUpKTsKKwlpZ3RfcmVxdWlyZShnZW1fY2xhc3NfaGFzX211dGFibGVfc3VibWlzc2lvbihp OTE1LCBlLT5jbGFzcykpOworCisJaWYgKGZsYWdzICYgRl9TSEFSRSkKKwkJY29tbW9uID0gZ2Vt X2NyZWF0ZShpOTE1LCA0MDk1KTsKKworCXJlc3VsdCA9IG1tYXAoTlVMTCwgNDA5NiwgUFJPVF9X UklURSwgTUFQX1NIQVJFRCB8IE1BUF9BTk9OLCAtMSwgMCk7CisJaWd0X2Fzc2VydChyZXN1bHQg IT0gTUFQX0ZBSUxFRCk7CisJaXFyID0gbW1hcChOVUxMLCA0MDk2LCBQUk9UX1dSSVRFLCBNQVBf U0hBUkVEIHwgTUFQX0FOT04sIC0xLCAwKTsKKwlpZ3RfYXNzZXJ0KGlxciAhPSBNQVBfRkFJTEVE KTsKKworCS8qCisJICogVGhlIGNvbWJpbmVkIHdvcmtsb2FkIGFsd2F5cyBydW5zIGF0IGEgNjBm cHMgdGFyZ2V0ICh1bmxlc3MgRl9IQUxGISkuCisJICogVGhpcyBnaXZlcyBhIGZyYW1lIG9mIGlu dGVydmFsIG9mIDE2bXMgdGhhdCBpcyBldmVubHkgc3BsaXQgYWNyb3NzCisJICogYWxsIHRoZSBj bGllbnRzLCBzbyBzaW11bGF0aW5nIGEgc3lzdGVtIHdpdGggYSBidW5jaCBvZiBjbGllbnRzIHRo YXQKKwkgKiBhcmUgcGVyZmVjdGx5IGJhbGFuY2VkIGFuZCBjYW4gc3VzdGFpbiA2MGZwcy4gT3Vy IGpvYiBpcyB0byBlbnN1cmUKKwkgKiB0aGF0IGVhY2ggY2xpZW50IGRvZXMgcnVuIGF0IGEgc21v b3RoIDYwZnBzLgorCSAqCisJICogRWFjaCBjbGllbnQgcnVucyBhIGZpeGVkIGxlbmd0aCBkZWxh eSBsb29wIChhcyBhIHNpbmdsZSByZXF1ZXN0LAorCSAqIG9yIHNwbGl0IGludG8gMykgYW5kIHRo ZW4gcmVjb3JkcyB0aGUgQ1NfVElNRVNUQU1QIGFmdGVyIGNvbXBsZXRpbmcKKwkgKiBpdHMgZGVs YXkuIEdpdmVuIGEgZmFpciBhbGxvdG1lbnQgb2YgR1BVIHRpbWUgdG8gZWFjaCBjbGllbnQsCisJ ICogdGhhdCB0aW1lc3RhbXAgd2lsbCBbaWRlYWxseV0gYmUgYXQgYSBwcmVjaXNlIDE2bXMgaW50 ZXJ2YWxzLgorCSAqIEluIHByYWN0aWNlLCB0aW1lIGlzIHdhc3RlZCBvbiBjb250ZXh0IHN3aXRj aGVzLCBzbyBhcyB0aGUgbnVtYmVyCisJICogb2YgY2xpZW50cyBpbmNyZWFzZXMsIHRoZSBwcm9w cm90aW9uIG9mIHRpbWUgc3BlbnQgb24gY29udGV4dAorCSAqIHN3aXRjaGVzIGdyb3dzLiBBcyB3 ZSBnZXQgdG8gNjQgcmVuZGVyIGNsaWVudHMsIHdlIHdpbGwgYmUgc3BlbmRpbmcKKwkgKiBhcyBt dWNoIHRpbWUgaW4gY29udGV4dCBzd2l0Y2hlcyBhcyBleGVjdXRpbmcgdGhlIGNsaWVudCB3b3Jr bG9hZHMuCisJICoKKwkgKiBFYWNoIGNsaWVudCBmcmFtZSBtYXkgYmUgcGFjZWQgYnkgc29tZSB0 aHJvdHRsaW5nIHRlY2huaXF1ZSBmb3VuZAorCSAqIGluIHRoZSB3aWxkLiBpLmUuIGVhY2ggY2xp ZW50IG1heSB3YWl0IHVudGlsIGEgc2ltdWxhdGVkIHZibGFuaworCSAqIHRvIGluZGljYXRlIHRo ZSBzdGFydCBvZiBhIG5ldyBmcmFtZSwgb3IgaXQgbWF5IHdhaXQgdW50aWwgdGhlCisJICogY29t cGxldGlvbiBvZiBhIHByZXZpb3VzIGZyYW1lLiBUaGlzIGNhdXNlcyBzdWJtaXNzaW9uIGZyb20g ZWFjaAorCSAqIGNsaWVudCBhbmQgYWNyb3NzIHRoZSBzeXN0ZW0gdG8gYmUgY2h1bmt5IGFuZCB1 bmV2ZW4uCisJICoKKwkgKiBXZSBsb29rIGF0IHRoZSB2YXJpYXRpb24gb2YgZnJhbWUgaW50ZXJ2 YWxzIHdpdGhpbiBlYWNoIGNsaWVudCwgYW5kCisJICogdGhlIHZhcmlhdGlvbiBvZiB0aGUgbWVk aWFucyBhY3Jvc3MgdGhlIGNsaWVudHMgdG8gc2VlIGlmIHRoZQorCSAqIGRpc3RyaWJ1dGlvbiAo YnVkZ2V0KSBvZiBHUFUgdGltZSB3YXMgZmFpciBlbm91Z2guCisJICoKKwkgKiBBbHRlcm5hdGl2 ZSAoYW5kIGltcG9ydGFudCkgbWV0cmljcyB3aWxsIGJlIG1vcmUgbGF0ZW5jeSBjZW50cmljOwor CSAqIGxvb2tpbmcgYXQgaG93IHdlbGwgd2UgY2FuIHN1c3RhaW4gbWVldGluZyBkZWFkbGluZSBn aXZlbiBjb21wZXRpdGlvbgorCSAqIGJ5IGNsaWVudHMgZm9yIHRoZSBHUFUuCisJICovCisKKwlm b3IgKGludCBuID0gMjsgbiA8PSAyNTY7IG4gPDw9IDEpIHsgLyogMzIgPT0gNTAwdXMgcGVyIGNs aWVudCAqLworCQlpbnQgdGltZWxpbmUgPSBzd19zeW5jX3RpbWVsaW5lX2NyZWF0ZSgpOworCQlp bnQgbmZlbmNlcyA9IHRpbWVvdXQgKiBOU0VDX1BFUl9TRUMgLyBmZW5jZV9ucyArIDE7CisJCWlu dCBuY2hpbGQgPSBuIC0gMTsgLyogb2RkIGZvciBlYXN5IG1lZGlhbnMgKi8KKwkJY29uc3QgaW50 IGNoaWxkX25zID0gZnJhbWVfbnMgLyAobmNoaWxkICsgISEoZmxhZ3MgJiBGX1NQQVJFKSk7CisJ CWNvbnN0IGludCBsbyA9IG5jaGlsZCAvIDQ7CisJCWNvbnN0IGludCBoaSA9ICgzICogbmNoaWxk ICsgMykgLyA0IC0gMTsKKwkJc3RydWN0IHJ1c2FnZSBvbGRfdXNhZ2UsIHVzYWdlOworCQl1aW50 NjRfdCBjcHVfdGltZSwgZF90aW1lOworCQlzdHJ1Y3QgdGltZXNwZWMgdHY7CisJCXN0cnVjdCBp Z3RfbWVhbiBtOworCisJCW1lbXNldChyZXN1bHQsIDAsIChuY2hpbGQgKyAxKSAqIHNpemVvZihy ZXN1bHRbMF0pKTsKKworCQlpZiAoZmxhZ3MgJiBGX1BJTkcpIHsgLyogZmlsbCB0aGUgb3RoZXJz IHdpdGggbGlnaHQgYmcgbG9hZCAqLworCQkJc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUy ICpwaW5nOworCisJCQlfX2Zvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShpOTE1LCBwaW5nKSB7CisJ CQkJaWYgKHBpbmctPmZsYWdzID09IGUtPmZsYWdzKQorCQkJCQljb250aW51ZTsKKworCQkJCWln dF9mb3JrKGNoaWxkLCAxKSB7CisJCQkJCXVpbnQzMl90IGN0eCA9IGdlbV9jb250ZXh0X2Nsb25l X3dpdGhfZW5naW5lcyhpOTE1LCAwKTsKKworCQkJCQlmYWlyX2NoaWxkKGk5MTUsIGN0eCwgcGlu ZywKKwkJCQkJCSAgIGNoaWxkX25zIC8gOCwKKwkJCQkJCSAgIC0xLCBjb21tb24sCisJCQkJCQkg ICBGX1NPTE8gfCBGX1BBQ0UgfCBGX1NIQVJFLAorCQkJCQkJICAgJnJlc3VsdFtuY2hpbGRdLAor CQkJCQkJICAgTlVMTCwgTlVMTCk7CisKKwkJCQkJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBj dHgpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWdldHJ1c2FnZShSVVNBR0VfQ0hJTERSRU4sICZv bGRfdXNhZ2UpOworCQlpZ3RfbnNlY19lbGFwc2VkKG1lbXNldCgmdHYsIDAsIHNpemVvZih0dikp KTsKKwkJaWd0X2ZvcmsoY2hpbGQsIG5jaGlsZCkgeworCQkJdWludDMyX3QgY3R4OworCisJCQlp ZiAoZmxhZ3MgJiBGX0lTT0xBVEUpIHsKKwkJCQlpbnQgY2xvbmUsIGRtYWJ1ZiA9IC0xOworCisJ CQkJaWYgKGNvbW1vbikKKwkJCQkJZG1hYnVmID0gcHJpbWVfaGFuZGxlX3RvX2ZkKGk5MTUsIGNv bW1vbik7CisKKwkJCQljbG9uZSA9IGdlbV9yZW9wZW5fZHJpdmVyKGk5MTUpOworCQkJCWdlbV9j b250ZXh0X2NvcHlfZW5naW5lcyhpOTE1LCAwLCBjbG9uZSwgMCk7CisJCQkJaTkxNSA9IGNsb25l OworCisJCQkJaWYgKGRtYWJ1ZiAhPSAtMSkKKwkJCQkJY29tbW9uID0gcHJpbWVfZmRfdG9faGFu ZGxlKGk5MTUsIGRtYWJ1Zik7CisJCQl9CisKKwkJCWN0eCA9IGdlbV9jb250ZXh0X2Nsb25lX3dp dGhfZW5naW5lcyhpOTE1LCAwKTsKKworCQkJaWYgKGZsYWdzICYgRl9WSVAgJiYgY2hpbGQgPT0g MCkgeworCQkJCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShpOTE1LCBjdHgsIE1BWF9QUklPKTsK KwkJCQlmbGFncyB8PSBGX0ZMT1c7CisJCQl9CisJCQlpZiAoZmxhZ3MgJiBGX1JSVUwgJiYgY2hp bGQgPT0gMCkKKwkJCQlmbGFncyB8PSBGX1NPTE8gfCBGX0ZMT1cgfCBGX1NZTkM7CisKKwkJCWZh aXJfY2hpbGQoaTkxNSwgY3R4LCBlLCBjaGlsZF9ucywKKwkJCQkgICB0aW1lbGluZSwgY29tbW9u LCBmbGFncywKKwkJCQkgICAmcmVzdWx0W25jaGlsZF0sCisJCQkJICAgJnJlc3VsdFtjaGlsZF0s ICZpcXJbY2hpbGRdKTsKKworCQkJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBjdHgpOworCQl9 CisKKwkJd2hpbGUgKG5mZW5jZXMtLSkKKwkJCXRpbWVsaW5lX2FkdmFuY2UodGltZWxpbmUsIGZl bmNlX25zKTsKKworCQlyZXN1bHRbbmNoaWxkXSA9IDE7CisJCWZvciAoaW50IGNoaWxkID0gMDsg Y2hpbGQgPCBuY2hpbGQ7IGNoaWxkKyspIHsKKwkJCXdoaWxlICghUkVBRF9PTkNFKHJlc3VsdFtj aGlsZF0pKQorCQkJCXRpbWVsaW5lX2FkdmFuY2UodGltZWxpbmUsIGZlbmNlX25zKTsKKwkJfQor CisJCWlndF93YWl0Y2hpbGRyZW4oKTsKKwkJY2xvc2UodGltZWxpbmUpOworCisJCS8qCisJCSAq IEFyZSB3ZSBydW5uaW5nIG91dCBvZiBDUFUgdGltZSwgYW5kIGZhaWwgdG8gc3VibWl0IGZyYW1l cz8KKwkJICoKKwkJICogV2UgdHJ5IHRvIHJ1bGUgb3V0IGFueSB1bmR1ZSBpbXBhY3Qgb24gdGhl IEdQVSBzY2hlZHVsaW5nCisJCSAqIGZyb20gdGhlIENQVSBzY2hlZHVsZXIgYnkgbG9va2luZyBm b3IgY29yZSBzYXR1cmF0aW9uLiBJZgorCQkgKiB3ZSBtYXkgYmUgaW4gYSBzaXR1YXRpb24gd2hl cmUgdGhlIGNsaWVudHMgKyBrZXJuZWwgYXJlCisJCSAqIHRha2luZyBhIHdob2xlIGNvcmUgKHRo aW5rIGxvY2tkZXApLCB0aGVuIGl0IGlzIGluY3JlYXNpbmdseQorCQkgKiBsaWtlbHkgdGhhdCBv dXIgbWVhc3VyZW1lbnRzIGluY2x1ZGUgZGVsYXlzIGZyb20gdGhlIENQVQorCQkgKiBzY2hlZHVs ZXIuIEVyciBvbiB0aGUgc2lkZSBvZiBjYXV0aW9uLgorCQkgKi8KKwkJZF90aW1lID0gaWd0X25z ZWNfZWxhcHNlZCgmdHYpOworCQlnZXRydXNhZ2UoUlVTQUdFX0NISUxEUkVOLCAmdXNhZ2UpOwor CQljcHVfdGltZSA9IGRfY3B1X3RpbWUoJnVzYWdlLCAmb2xkX3VzYWdlKTsKKwkJaWd0X2RlYnVn KCJDUFUgdXNhZ2U6ICUuMGYlJVxuIiwgMTAwLiAqIGNwdV90aW1lIC8gZF90aW1lKTsKKwkJaWYg KDQgKiBjcHVfdGltZSA+IDMgKiBkX3RpbWUpIHsKKwkJCWlmIChuY2hpbGQgPiA3KSAvKiBnb29k IGVub3VnaCB0byBqdWRnZSBwYXNzL2ZhaWwgKi8KKwkJCQlicmVhazsKKworCQkJaWd0X3NraXBf b25fZig0ICogY3B1X3RpbWUgPiAzICogZF90aW1lLAorCQkJCSAgICAgICIlLjBmJSUgQ1BVIHVz YWdlLCBwcmVzdW1pbmcgY2FwYWNpdHkgZXhjZWVkZWRcbiIsCisJCQkJICAgICAgMTAwLiAqIGNw dV90aW1lIC8gZF90aW1lKTsKKwkJfQorCisJCS8qIFdpdGggbm8gY29udGVudGlvbiwgd2Ugc2hv dWxkIG1hdGNoIG91ciB0YXJnZXQgZnJhbWV0aW1lICovCisJCWlmIChuY2hpbGQgPT0gMSkgewor CQkJaWd0X2Fzc2VydCg0ICogcmVzdWx0WzBdID4gMyAqIGZlbmNlX25zICYmCisJCQkJICAgMyAq IHJlc3VsdFswXSA8IDQgKiBmZW5jZV9ucyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJ CSAqIFRoZSBWSVAgc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGhpdCB0aGUgdGFyZ2V0IGZyYW1l IHJhdGU7CisJCSAqIHJlZ2FyZGxlc3Mgb2YgYnVkZ2V0IGNvbnRlbnRpb24gZnJvbSBsZXNzb3Ig Y2xpZW50cy4KKwkJICovCisJCWlmIChmbGFncyAmIChGX1ZJUCB8IEZfUlJVTCkpIHsKKwkJCWln dF9pbmZvKCJWSVAgaW50ZXJ2YWwgJS4yZm1zLCByYW5nZSAlLjJmbXNcbiIsCisJCQkJIDFlLTYg KiByZXN1bHRbMF0sIDFlLTYgKiBpcXJbMF0pOworCQkJaWd0X2Fzc2VydF9mKDQgKiByZXN1bHRb MF0gPiAzICogZmVuY2VfbnMgJiYKKwkJCQkgICAgIDMgKiByZXN1bHRbMF0gPCA0ICogZmVuY2Vf bnMsCisJCQkJICAgICAiVklQIGV4cGVjdHMgdG8gcnVuIGV4YWN0bHkgd2hlbiBpdCB3YW50cywg ZXhwZWN0cyBhbiBpbnRlcnZhbCBvZiAlLjJmbXMsIHdhcyAlLjJmbXNcbiIsCisJCQkJICAgICAx ZS02ICogZmVuY2VfbnMsIDFlLTYgKiByZXN1bHRbMF0pOworCQkJaWd0X2Fzc2VydF9mKDIgKiBp cXJbMF0gPCByZXN1bHRbMF0sCisJCQkJICAgICAiVklQIGZyYW1lIElRUiAlLjJmbXMgZXhjZWVk ZWQgbWVkaWFuIHRocmVzaG9sZCAlLjJmbXNcbiIsCisJCQkJICAgICAxZS02ICogaXFyWzBdLAor CQkJCSAgICAgMWUtNiAqIHJlc3VsdFswXSAvIDIpOworCQkJaWYgKCEtLW5jaGlsZCkKKwkJCQlj b250aW51ZTsKKworCQkJLyogRXhjbHVkZSB0aGUgVklQIHJlc3VsdCBmcm9tIHRoZSBwbGViaWFu IHN0YXRpc3RpY3MgKi8KKwkJCW1lbW1vdmUocmVzdWx0LCByZXN1bHQgKyAxLCBuY2hpbGQgKiBz aXplb2YoKnJlc3VsdCkpOworCQkJbWVtbW92ZShpcXIsIGlxciArIDEsIG5jaGlsZCAqIHNpemVv ZigqaXFyKSk7CisJCX0KKworCQlpZ3RfbWVhbl9pbml0KCZtKTsKKwkJZm9yIChpbnQgY2hpbGQg PSAwOyBjaGlsZCA8IG5jaGlsZDsgY2hpbGQrKykKKwkJCWlndF9tZWFuX2FkZCgmbSwgcmVzdWx0 W2NoaWxkXSk7CisKKwkJcXNvcnQocmVzdWx0LCBuY2hpbGQsIHNpemVvZigqcmVzdWx0KSwgY21w X3VsKTsKKwkJcXNvcnQoaXFyLCBuY2hpbGQsIHNpemVvZigqaXFyKSwgY21wX3VsKTsKKworCQkv KgorCQkgKiBUaGUgdGFyZ2V0IGludGVydmFsIGZvciBtZWRpYW4vbWVhbiBpcyAxNm1zIChmZW5j ZV9ucykuCisJCSAqIEhvd2V2ZXIsIHRoaXMgd29yayBpcyBldmVubHkgc3BsaXQgYWNyb3NzIHRo ZSBjbGllbnRzIHNvCisJCSAqIHRoZSByYW5nZSAoYW5kIG1lZGlhbikgb2YgY2xpZW50IG1lZGlh bnMgbWF5IGJlIG11Y2ggbGVzcworCQkgKiB0aGFuIDE2bXMgWzE2LzNOXS4gV2UgcHJlc2VudCBt ZWRpYW4gb2YgbWVkaWFucyB0byB0cnkKKwkJICogYW5kIGF2b2lkIGFueSBpbnN0YWJpbGl0eSB3 aGlsZSBydW5uaW5nIGluIENJOyBhdCB0aGUgY29zdAorCQkgKiBvZiBpbnNlbnNpdGl2aXR5IQor CQkgKi8KKwkJaWd0X2luZm8oIiUzZCBjbGllbnRzLCByYW5nZTogWyUuMWYsICUuMWZdLCBpcXI6 IFslLjFmLCAlLjFmXSwgbWVkaWFuOiAlLjFmIFslLjFmLCAlLjFmXSwgbWVhbjogJS4xZiDCsSAl LjJmIG1zLCBjcHU6ICUuMGYlJVxuIiwKKwkJCSBuY2hpbGQsCisJCQkgMWUtNiAqIHJlc3VsdFsw XSwgIDFlLTYgKiByZXN1bHRbbmNoaWxkIC0gMV0sCisJCQkgMWUtNiAqIHJlc3VsdFtsb10sIDFl LTYgKiByZXN1bHRbaGldLAorCQkJIDFlLTYgKiByZXN1bHRbbmNoaWxkIC8gMl0sCisJCQkgMWUt NiAqIGlxcltsb10sIDFlLTYgKiBpcXJbaGldLAorCQkJIDFlLTYgKiBpZ3RfbWVhbl9nZXQoJm0p LAorCQkJIDFlLTYgKiBzcXJ0KGlndF9tZWFuX2dldF92YXJpYW5jZSgmbSkpLAorCQkJIDEwMC4g KiBjcHVfdGltZSAvIGRfdGltZSk7CisKKwkJaWd0X2Fzc2VydF9mKGlxcltuY2hpbGQgLyAyXSA8 IDIgKiByZXN1bHRbbmNoaWxkIC8gMl0sCisJCQkgICAgICJDaGlsZCBmcmFtZSBJUVIgJS4yZm1z IGV4Y2VlZGVkIG1lZGlhbiB0aHJlc2hvbGQgJS4yZm1zXG4iLAorCQkJICAgICAxZS02ICogaXFy W25jaGlsZCAvIDJdLAorCQkJICAgICAxZS02ICogcmVzdWx0W25jaGlsZCAvIDJdICogMik7CisK KwkJaWd0X2Fzc2VydF9mKDQgKiBpZ3RfbWVhbl9nZXQoJm0pID4gMyAqIHJlc3VsdFtuY2hpbGQg LyAyXSAmJgorCQkJICAgICAzICogaWd0X21lYW5fZ2V0KCZtKSA8IDQgKiByZXN1bHRbbmNoaWxk IC8gMl0sCisJCQkgICAgICJNZWFuIG9mIGNsaWVudCBpbnRlcnZhbCAlLjJmbXMgZGlmZmVycyBm cm9tIG1lZGlhbiAlLjJmbXMsIGRpc3RyaWJ1dGlvbiBpcyBza2V3ZWRcbiIsCisKKwkJCSAgICAg MWUtNiAqIGlndF9tZWFuX2dldCgmbSksIDFlLTYgKiByZXN1bHRbbmNoaWxkIC8gMl0pOworCisJ CWlndF9hc3NlcnRfZihyZXN1bHRbbmNoaWxkIC8gMl0gPiBmcmFtZV9ucyAvIDIsCisJCQkgICAg ICJNZWRpYW4gY2xpZW50IGludGVydmFsICUuMmZtcyBkaWQgbm90IG1hdGNoIHRhcmdldCBpbnRl cnZhbCAlLjJmbXNcbiIsCisJCQkgICAgIDFlLTYgKiByZXN1bHRbbmNoaWxkIC8gMl0sIDFlLTYg KiBmcmFtZV9ucyk7CisKKworCQlpZ3RfYXNzZXJ0X2YocmVzdWx0W2hpXSAtIHJlc3VsdFtsb10g PCByZXN1bHRbbmNoaWxkIC8gMl0sCisJCQkgICAgICJJbnRlcnF1YXJ0aWxlIHJhbmdlIG9mIGNs aWVudCBpbnRlcnZhbHMgJS4yZm1zIGlzIGFzIGxhcmdlIGFzIHRoZSBtZWRpYW4gdGhyZXNob2xk ICUuMmZtcywgY2xpZW50cyBhcmUgbm90IGV2ZW5seSBkaXN0cmlidXRlZCFcbiIsCisJCQkgICAg IDFlLTYgKiAocmVzdWx0W2hpXSAtIHJlc3VsdFtsb10pLAorCQkJICAgICAxZS02ICogcmVzdWx0 W25jaGlsZCAvIDJdKTsKKworCQkvKiBNYXkgYmUgc2xvd2VkIGR1ZSB0byBzaGVlciB2b2x1bWUg b2YgY29udGV4dCBzd2l0Y2hlcyAqLworCQlpZiAocmVzdWx0WzBdID4gMiAqIGZlbmNlX25zKQor CQkJYnJlYWs7CisJfQorCisJbXVubWFwKGlxciwgNDA5Nik7CisJbXVubWFwKHJlc3VsdCwgNDA5 Nik7CisJaWYgKGNvbW1vbikKKwkJZ2VtX2Nsb3NlKGk5MTUsIGNvbW1vbik7Cit9CisKK3N0YXRp YyB2b2lkIHRlc3RfZmFpcm5lc3MoaW50IGk5MTUsIGludCB0aW1lb3V0KQoreworCXN0YXRpYyBj b25zdCBzdHJ1Y3QgeworCQljb25zdCBjaGFyICpuYW1lOworCQl1bnNpZ25lZCBpbnQgZmxhZ3M7 CisJfSBmYWlyW10gPSB7CisJCS8qCisJCSAqIG5vbmUgLSBtYXhpbWFsIGdyZWVkIGluIGVhY2gg Y2xpZW50CisJCSAqCisJCSAqIFB1c2ggYXMgbWFueSBmcmFtZXMgZnJvbSBlYWNoIGNsaWVudCBh cyBmYXN0IGFzIHBvc3NpYmxlCisJCSAqLworCQl7ICJub25lIiwgICAgICAgMCB9LAorCQl7ICJu b25lLXZpcCIsICAgRl9WSVAgfSwgLyogb25lIHZpcCBjbGllbnQgbXVzdCBtZWV0IGRlYWRsaW5l cyAqLworCQl7ICJub25lLXNvbG8iLCAgRl9TT0xPIH0sIC8qIDEgYmF0Y2ggcGVyIGZyYW1lIHBl ciBjbGllbnQgKi8KKwkJeyAibm9uZS1zaGFyZSIsIEZfU0hBUkUgfSwgLyogcmVhZCBmcm9tIGEg Y29tbW9uIGJ1ZmZlciAqLworCQl7ICJub25lLXJydWwiLCAgRl9SUlVMIH0sIC8qICJyZWFsdGlt ZS1yZXNwb25zZSB1bmRlciBsb2FkIiAqLworCQl7ICJub25lLXBpbmciLCAgRl9QSU5HIH0sIC8q IG1lYXN1cmUgaW50ZXItZW5naW5lIGZhaXJuZXNzICovCisKKwkJLyoKKwkJICogdGhyb3R0bGUg LSBvcmlnaW5hbCBwZXIgY2xpZW50IHRocm90dGxpbmcKKwkJICoKKwkJICogVXNlZCBmb3IgZnJv bnQgYnVmZmVyaW5nIHJlbmRlcmluZyB3aGVyZSB0aGVyZSBpcyBubworCQkgKiBleHRlbmFsIGZy YW1lIG1hcmtlci4gRWFjaCBjbGllbnQgdHJpZXMgdG8gb25seSBrZWVwCisJCSAqIDIwbXMgb2Yg d29yayBzdWJtaXR0ZWQsIHRob3VnaCB0aGF0IG1lYXN1cmVtZW50IGlzCisJCSAqIGZsYXdlZC4u LgorCQkgKgorCQkgKiBUaGlzIGlzIHVzZWQgYnkgWG9yZyB0byB0cnkgYW5kIG1haW50YWluIHNv bWUgcmVzZW1iYWxhbmNlCisJCSAqIG9mIGlucHV0L291dHB1dCBjb25zaXN0ZW5jeSB3aGVuIGJl aW5nIGZlZWQgYSBjb250aW51b3VzCisJCSAqIHN0cmVhbSBvZiBYMTEgZHJhdyByZXF1ZXN0cyBz dHJhaWdodCBpbnRvIHNjYW5vdXQsIHdoZXJlCisJCSAqIHRoZSBjbGllbnRzIG1heSBzdWJtaXQg dGhlIHdvcmsgZmFzdGVyIHRoYW4gY2FuIGJlIGRyYXduLgorCQkgKgorCQkgKiBUaHJvdHRsaW5n IHRyYWNrcyByZXF1ZXN0cyBwZXItZmlsZSAoYW5kIGFzc3VtZXMgdGhhdAorCQkgKiBhbGwgcmVx dWVzdHMgYXJlIGluIHN1Ym1pc3Npb24gb3JkZXIgYWNyb3NzIHRoZSB3aG9sZSBmaWxlKSwKKwkJ ICogc28gd2Ugc3BsaXQgZWFjaCBjaGlsZCB0byBpdHMgb3duIGZkLgorCQkgKi8KKwkJeyAidGhy b3R0bGUiLCAgICAgICBGX1RIUk9UVExFIHwgRl9JU09MQVRFIH0sCisJCXsgInRocm90dGxlLXZp cCIsICAgRl9USFJPVFRMRSB8IEZfSVNPTEFURSB8IEZfVklQIH0sCisJCXsgInRocm90dGxlLXNv bG8iLCAgRl9USFJPVFRMRSB8IEZfSVNPTEFURSB8IEZfU09MTyB9LAorCQl7ICJ0aHJvdHRsZS1z aGFyZSIsIEZfVEhST1RUTEUgfCBGX0lTT0xBVEUgfCBGX1NIQVJFIH0sCisJCXsgInRocm90dGxl LXJydWwiLCAgRl9USFJPVFRMRSB8IEZfSVNPTEFURSB8IEZfUlJVTCB9LAorCisJCS8qCisJCSAq IHBhY2UgLSBtZXNhICJzdWJtaXQgZG91YmxlIGJ1ZmZlcmluZyIKKwkJICoKKwkJICogU3VibWl0 IGEgZnJhbWUsIHdhaXQgZm9yIHByZXZpb3VzIGZyYW1lIHRvIHN0YXJ0LiBUaGlzCisJCSAqIHBy ZXZlbnRzIGVhY2ggY2xpZW50IGZyb20gZ2V0dGluZyB0b28gZmFyIGFoZWFkIG9mIGl0cworCQkg KiByZW5kZXJpbmcsIG1haW50YWluaW5nIGEgY29uc2lzdGVudCBpbnB1dC9vdXRwdXQgbGF0ZW5j eS4KKwkJICovCisJCXsgInBhY2UiLCAgICAgICBGX1BBQ0UgfSwKKwkJeyAicGFjZS1zb2xvIiwg IEZfUEFDRSB8IEZfU09MTyB9LAorCQl7ICJwYWNlLXNoYXJlIiwgRl9QQUNFIHwgRl9TT0xPIHwg Rl9TSEFSRSB9LAorCQl7ICJwYWNlLXBpbmciLCAgRl9QQUNFIHwgRl9TT0xPIHwgRl9TSEFSRSB8 IEZfUElOR30sCisKKwkJLyogc3luYyAtIG9ubHkgc3VibWl0IGEgZnJhbWUgYXQgYSB0aW1lICov CisJCXsgInN5bmMiLCAgICAgIEZfU1lOQyB9LAorCQl7ICJzeW5jLXZpcCIsICBGX1NZTkMgfCBG X1ZJUCB9LAorCQl7ICJzeW5jLXNvbG8iLCBGX1NZTkMgfCBGX1NPTE8gfSwKKworCQkvKiBmbG93 IC0gc3luY2hyb25pc2UgZXhlY3V0aW9uIGFnYWluc3QgdGhlIGNsb2NrICh2YmxhbmspICovCisJ CXsgImZsb3ciLCAgICAgICBGX1BBQ0UgfCBGX0ZMT1cgfSwKKwkJeyAiZmxvdy1zb2xvIiwgIEZf UEFDRSB8IEZfRkxPVyB8IEZfU09MTyB9LAorCQl7ICJmbG93LXNoYXJlIiwgRl9QQUNFIHwgRl9G TE9XIHwgRl9TSEFSRSB9LAorCQl7ICJmbG93LXBpbmciLCAgRl9QQUNFIHwgRl9GTE9XIHwgRl9T SEFSRSB8IEZfUElORyB9LAorCisJCS8qIG5leHQgLSBzdWJtaXQgYWhlYWQgb2YgdGhlIGNsb2Nr ICh2YmxhbmsgZG91YmxlIGJ1ZmZlcmluZykgKi8KKwkJeyAibmV4dCIsICAgICAgIEZfUEFDRSB8 IEZfRkxPVyB8IEZfTkVYVCB9LAorCQl7ICJuZXh0LXNvbG8iLCAgRl9QQUNFIHwgRl9GTE9XIHwg Rl9ORVhUIHwgRl9TT0xPIH0sCisJCXsgIm5leHQtc2hhcmUiLCBGX1BBQ0UgfCBGX0ZMT1cgfCBG X05FWFQgfCBGX1NIQVJFIH0sCisJCXsgIm5leHQtcGluZyIsICBGX1BBQ0UgfCBGX0ZMT1cgfCBG X05FWFQgfCBGX1NIQVJFIHwgRl9QSU5HIH0sCisKKwkJLyogc3BhcmUgLSB1bmRlcnV0aWxpc2Ug YnkgYSBzaW5nbGUgY2xpZW50IHRpbWVzbGljZSAqLworCQl7ICJzcGFyZSIsICAgICAgRl9QQUNF IHwgRl9GTE9XIHwgRl9TUEFSRSB9LAorCQl7ICJzcGFyZS1zb2xvIiwgRl9QQUNFIHwgRl9GTE9X IHwgRl9TUEFSRSB8IEZfU09MTyB9LAorCisJCS8qIGhhbGYgLSBydW4gYXQgaGFsZiBwYWNlIChz dWJtaXQgMTZtcyBvZiB3b3JrIGV2ZXJ5IDMybXMpICovCisJCXsgImhhbGYiLCAgICAgICBGX1BB Q0UgfCBGX0ZMT1cgfCBGX0hBTEYgfSwKKwkJeyAiaGFsZi1zb2xvIiwgIEZfUEFDRSB8IEZfRkxP VyB8IEZfSEFMRiB8IEZfU09MTyB9LAorCisJCXt9CisJfTsKKworCWlndF9maXh0dXJlIHsKKwkJ aWd0X2luZm8oIkNTIHRpbWVzdGFtcCBmcmVxdWVuY3k6ICVkXG4iLAorCQkJIHJlYWRfdGltZXN0 YW1wX2ZyZXF1ZW5jeShpOTE1KSk7CisKKwkJaWd0X3JlcXVpcmUoaW50ZWxfZ2VuKGludGVsX2dl dF9kcm1fZGV2aWQoaTkxNSkpID49IDgpOworCX0KKworCWZvciAodHlwZW9mKCpmYWlyKSAqZiA9 IGZhaXI7IGYtPm5hbWU7IGYrKykgeworCQlpZ3Rfc3VidGVzdF93aXRoX2R5bmFtaWNfZigiZmFp ci0lcyIsIGYtPm5hbWUpICB7CisJCQljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2lu ZTIgKmU7CisKKwkJCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGk5MTUsIGUpIHsKKwkJCQlp ZiAoIWdlbV9jbGFzc19jYW5fc3RvcmVfZHdvcmQoaTkxNSwgZS0+Y2xhc3MpKQorCQkJCQljb250 aW51ZTsKKworCQkJCWlndF9keW5hbWljX2YoIiVzIiwgZS0+bmFtZSkKKwkJCQkJZmFpcm5lc3Mo aTkxNSwgZSwgdGltZW91dCwgZi0+ZmxhZ3MpOworCQkJfQorCQl9CisJfQorfQorCiBzdGF0aWMg dWludDMyX3QgcmVhZF9jdHhfdGltZXN0YW1wKGludCBpOTE1LAogCQkJCSAgIHVpbnQzMl90IGN0 eCwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCkBAIC0y Nzg5LDYgKzM1ODIsMTAgQEAgaWd0X21haW4KIAkJdGVzdF9lYWNoX2VuZ2luZV9zdG9yZSgicHJv bW90aW9uIiwgZmQsIGUpCiAJCQlwcm9tb3Rpb24oZmQsIGUtPmZsYWdzKTsKIAorCQlpZ3Rfc3Vi dGVzdF9ncm91cCB7CisJCQl0ZXN0X2ZhaXJuZXNzKGZkLCAyKTsKKwkJfQorCiAJCWlndF9zdWJ0 ZXN0X2dyb3VwIHsKIAkJCWlndF9maXh0dXJlIHsKIAkJCQlpZ3RfcmVxdWlyZShnZW1fc2NoZWR1 bGVyX2hhc19wcmVlbXB0aW9uKGZkKSk7Ci0tIAoyLjI5LjIKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Chris Wilson Date: Wed, 16 Dec 2020 15:24:56 +0000 Message-Id: <20201216152456.1304749-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 djI6IGlndF9hc3NlcnRfZiBhbmQgbW9yZSBjb21tZW50YXJ5OyBleGNsdWRlIHZpcCBmcm9tIGNs aWVudCBzdGF0cywKaW5jbHVkZSByYW5nZSBvZiBmcmFtZSBpbnRlcnZhbHMgZnJvbSBlYWNoIGlu ZGl2aWR1YWwgY2xpZW50CnYzOiBXcml0ZSBkb3duIHdoYXQgdGhlIHRlc3QgYWN0dWFsbHkgZG9l cyEKClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVr PgpDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KQ2M6IFJhbWFs aW5nYW0gQyA8cmFtYWxpbmdhbS5jQGludGVsLmNvbT4KLS0tCiB0ZXN0cy9pOTE1L2dlbV9leGVj X3NjaGVkdWxlLmMgfCA3OTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZp bGUgY2hhbmdlZCwgNzk3IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS90ZXN0cy9pOTE1L2dl bV9leGVjX3NjaGVkdWxlLmMgYi90ZXN0cy9pOTE1L2dlbV9leGVjX3NjaGVkdWxlLmMKaW5kZXgg ZGQxNWIyYWM3Li44YmU1NTM5YWEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2k5MTUvZ2VtX2V4ZWNfc2No ZWR1bGUuYworKysgYi90ZXN0cy9pOTE1L2dlbV9leGVjX3NjaGVkdWxlLmMKQEAgLTI5LDYgKzI5 LDcgQEAKICNpbmNsdWRlIDxzeXMvcG9sbC5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogI2lu Y2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CiAjaW5jbHVkZSA8 c3lzL3N5c2NhbGwuaD4KICNpbmNsdWRlIDxzY2hlZC5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgpA QCAtMjUzMiwxMiArMjUzMywyNTAgQEAgc3RhdGljIHVpbnQ2NF90IGRpdjY0X3U2NF9yb3VuZF91 cCh1aW50NjRfdCB4LCB1aW50NjRfdCB5KQogCXJldHVybiAoeCArIHkgLSAxKSAvIHk7CiB9CiAK K3N0YXRpYyB1aW50NjRfdCBuc190b19jdHhfdGlja3MoaW50IGk5MTUsIHVpbnQ2NF90IG5zKQor eworCWludCBmID0gcmVhZF90aW1lc3RhbXBfZnJlcXVlbmN5KGk5MTUpOworCWlmIChpbnRlbF9n ZW4oaW50ZWxfZ2V0X2RybV9kZXZpZChpOTE1KSkgPT0gMTEpCisJCWYgPSAxMjUwMDAwMDsgLyog aWNsISEhIGFyZSB5b3UgZmVlbGluZyBhbHJpZ2h0PyBDVFggdnMgQ1MgKi8KKwlyZXR1cm4gZGl2 NjRfdTY0X3JvdW5kX3VwKG5zICogZiwgTlNFQ19QRVJfU0VDKTsKK30KKwogc3RhdGljIHVpbnQ2 NF90IHRpY2tzX3RvX25zKGludCBpOTE1LCB1aW50NjRfdCB0aWNrcykKIHsKIAlyZXR1cm4gZGl2 NjRfdTY0X3JvdW5kX3VwKHRpY2tzICogTlNFQ19QRVJfU0VDLAogCQkJCSAgcmVhZF90aW1lc3Rh bXBfZnJlcXVlbmN5KGk5MTUpKTsKIH0KIAorI2RlZmluZSBNSV9JTlNUUihvcGNvZGUsIGZsYWdz KSAoKChvcGNvZGUpIDw8IDIzKSB8IChmbGFncykpCisKKyNkZWZpbmUgTUlfTUFUSCh4KSAgICAg ICAgICAgICAgICAgICAgICBNSV9JTlNUUigweDFhLCAoeCkgLSAxKQorI2RlZmluZSBNSV9NQVRI X0lOU1RSKG9wY29kZSwgb3AxLCBvcDIpICgob3Bjb2RlKSA8PCAyMCB8IChvcDEpIDw8IDEwIHwg KG9wMikpCisvKiBPcGNvZGVzIGZvciBNSV9NQVRIX0lOU1RSICovCisjZGVmaW5lICAgTUlfTUFU SF9OT09QICAgICAgICAgICAgICAgICAgTUlfTUFUSF9JTlNUUigweDAwMCwgMHgwLCAweDApCisj ZGVmaW5lICAgTUlfTUFUSF9MT0FEKG9wMSwgb3AyKSAgICAgICAgTUlfTUFUSF9JTlNUUigweDA4 MCwgb3AxLCBvcDIpCisjZGVmaW5lICAgTUlfTUFUSF9MT0FESU5WKG9wMSwgb3AyKSAgICAgTUlf TUFUSF9JTlNUUigweDQ4MCwgb3AxLCBvcDIpCisjZGVmaW5lICAgTUlfTUFUSF9MT0FEMChvcDEp ICAgICAgICAgICAgTUlfTUFUSF9JTlNUUigweDA4MSwgb3AxKQorI2RlZmluZSAgIE1JX01BVEhf TE9BRDEob3AxKSAgICAgICAgICAgIE1JX01BVEhfSU5TVFIoMHg0ODEsIG9wMSkKKyNkZWZpbmUg ICBNSV9NQVRIX0FERCAgICAgICAgICAgICAgICAgICBNSV9NQVRIX0lOU1RSKDB4MTAwLCAweDAs IDB4MCkKKyNkZWZpbmUgICBNSV9NQVRIX1NVQiAgICAgICAgICAgICAgICAgICBNSV9NQVRIX0lO U1RSKDB4MTAxLCAweDAsIDB4MCkKKyNkZWZpbmUgICBNSV9NQVRIX0FORCAgICAgICAgICAgICAg ICAgICBNSV9NQVRIX0lOU1RSKDB4MTAyLCAweDAsIDB4MCkKKyNkZWZpbmUgICBNSV9NQVRIX09S ICAgICAgICAgICAgICAgICAgICBNSV9NQVRIX0lOU1RSKDB4MTAzLCAweDAsIDB4MCkKKyNkZWZp bmUgICBNSV9NQVRIX1hPUiAgICAgICAgICAgICAgICAgICBNSV9NQVRIX0lOU1RSKDB4MTA0LCAw eDAsIDB4MCkKKyNkZWZpbmUgICBNSV9NQVRIX1NUT1JFKG9wMSwgb3AyKSAgICAgICBNSV9NQVRI X0lOU1RSKDB4MTgwLCBvcDEsIG9wMikKKyNkZWZpbmUgICBNSV9NQVRIX1NUT1JFSU5WKG9wMSwg b3AyKSAgICBNSV9NQVRIX0lOU1RSKDB4NTgwLCBvcDEsIG9wMikKKy8qIFJlZ2lzdGVycyB1c2Vk IGFzIG9wZXJhbmRzIGluIE1JX01BVEhfSU5TVFIgKi8KKyNkZWZpbmUgICBNSV9NQVRIX1JFRyh4 KSAgICAgICAgICAgICAgICAoeCkKKyNkZWZpbmUgICBNSV9NQVRIX1JFR19TUkNBICAgICAgICAg ICAgICAweDIwCisjZGVmaW5lICAgTUlfTUFUSF9SRUdfU1JDQiAgICAgICAgICAgICAgMHgyMQor I2RlZmluZSAgIE1JX01BVEhfUkVHX0FDQ1UgICAgICAgICAgICAgIDB4MzEKKyNkZWZpbmUgICBN SV9NQVRIX1JFR19aRiAgICAgICAgICAgICAgICAweDMyCisjZGVmaW5lICAgTUlfTUFUSF9SRUdf Q0YgICAgICAgICAgICAgICAgMHgzMworCisjZGVmaW5lIE1JX0xPQURfUkVHSVNURVJfUkVHICAg IE1JX0lOU1RSKDB4MkEsIDEpCisKK3N0YXRpYyB2b2lkIGRlbGF5KGludCBpOTE1LAorCQkgIGNv bnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwKKwkJICB1aW50MzJfdCBoYW5k bGUsCisJCSAgdWludDY0X3QgYWRkciwKKwkJICB1aW50NjRfdCBucykKK3sKKwljb25zdCBpbnQg dXNlXzY0YiA9IGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGk5MTUpKSA+PSA4OworCWNv bnN0IHVpbnQzMl90IGJhc2UgPSBnZW1fZW5naW5lX21taW9fYmFzZShpOTE1LCBlLT5uYW1lKTsK KyNkZWZpbmUgQ1NfR1BSKHgpIChiYXNlICsgMHg2MDAgKyA4ICogKHgpKQorI2RlZmluZSBSVU5U SU1FIChiYXNlICsgMHgzYTgpCisJZW51bSB7IFNUQVJUX1RTLCBOT1dfVFMgfTsKKwl1aW50MzJf dCAqbWFwLCAqY3MsICpqbXA7CisKKwlpZ3RfcmVxdWlyZShiYXNlKTsKKworCS8qIExvb3AgdW50 aWwgQ1RYX1RJTUVTVEFNUCAtIGluaXRpYWwgPiBAbnMgKi8KKworCWNzID0gbWFwID0gZ2VtX21t YXBfX2RldmljZV9jb2hlcmVudChpOTE1LCBoYW5kbGUsIDAsIDQwOTYsIFBST1RfV1JJVEUpOwor CisJKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTTsKKwkqY3MrKyA9IENTX0dQUihTVEFSVF9U UykgKyA0OworCSpjcysrID0gMDsKKwkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfUkVHOworCSpj cysrID0gUlVOVElNRTsKKwkqY3MrKyA9IENTX0dQUihTVEFSVF9UUyk7CisKKwl3aGlsZSAob2Zm c2V0X2luX3BhZ2UoY3MpICYgNjMpCisJCSpjcysrID0gMDsKKwlqbXAgPSBjczsKKworCSpjcysr ID0gMHg1IDw8IDIzOyAvKiBNSV9BUkJfQ0hFQ0sgKi8KKworCSpjcysrID0gTUlfTE9BRF9SRUdJ U1RFUl9JTU07CisJKmNzKysgPSBDU19HUFIoTk9XX1RTKSArIDQ7CisJKmNzKysgPSAwOworCSpj cysrID0gTUlfTE9BRF9SRUdJU1RFUl9SRUc7CisJKmNzKysgPSBSVU5USU1FOworCSpjcysrID0g Q1NfR1BSKE5PV19UUyk7CisKKwkvKiBkZWx0YSA9IG5vdyAtIHN0YXJ0OyBpbnZlcnRlZCB0byBt YXRjaCBDT05EX0JCRSAqLworCSpjcysrID0gTUlfTUFUSCg0KTsKKwkqY3MrKyA9IE1JX01BVEhf TE9BRChNSV9NQVRIX1JFR19TUkNBLCBNSV9NQVRIX1JFRyhOT1dfVFMpKTsKKwkqY3MrKyA9IE1J X01BVEhfTE9BRChNSV9NQVRIX1JFR19TUkNCLCBNSV9NQVRIX1JFRyhTVEFSVF9UUykpOworCSpj cysrID0gTUlfTUFUSF9TVUI7CisJKmNzKysgPSBNSV9NQVRIX1NUT1JFSU5WKE1JX01BVEhfUkVH KE5PV19UUyksIE1JX01BVEhfUkVHX0FDQ1UpOworCisJLyogU2F2ZSBkZWx0YSBmb3IgcmVhZGlu ZyBieSBDT05EX0JCRSAqLworCSpjcysrID0gMHgyNCA8PCAyMyB8ICgxICsgdXNlXzY0Yik7IC8q IFNSTSAqLworCSpjcysrID0gQ1NfR1BSKE5PV19UUyk7CisJKmNzKysgPSBhZGRyICsgNDAwMDsK KwkqY3MrKyA9IGFkZHIgPj4gMzI7CisKKwkvKiBEZWxheSBiZXR3ZWVuIFNSTSBhbmQgQ09ORF9C QkUgdG8gcG9zdCB0aGUgd3JpdGVzICovCisJZm9yIChpbnQgbiA9IDA7IG4gPCA4OyBuKyspIHsK KwkJKmNzKysgPSBNSV9TVE9SRV9EV09SRF9JTU07CisJCWlmICh1c2VfNjRiKSB7CisJCQkqY3Mr KyA9IGFkZHIgKyA0MDY0OworCQkJKmNzKysgPSBhZGRyID4+IDMyOworCQl9IGVsc2UgeworCQkJ KmNzKysgPSAwOworCQkJKmNzKysgPSBhZGRyICsgNDA2NDsKKwkJfQorCQkqY3MrKyA9IDA7CisJ fQorCisJLyogQnJlYWsgaWYgZGVsdGEgW3RpbWUgZWxhcHNlZF0gPiBucyAqLworCSpjcysrID0g TUlfQ09ORF9CQVRDSF9CVUZGRVJfRU5EIHwgTUlfRE9fQ09NUEFSRSB8ICgxICsgdXNlXzY0Yik7 CisJKmNzKysgPSB+bnNfdG9fY3R4X3RpY2tzKGk5MTUsIG5zKTsKKwkqY3MrKyA9IGFkZHIgKyA0 MDAwOworCSpjcysrID0gYWRkciA+PiAzMjsKKworCS8qIE90aGVyd2lzZSBiYWNrIHRvIHJlY2Fs Y3VsYXRpbmcgZGVsdGEgKi8KKwkqY3MrKyA9IE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8IDEgPDwg OCB8IHVzZV82NGI7CisJKmNzKysgPSBhZGRyICsgb2Zmc2V0X2luX3BhZ2Uoam1wKTsKKwkqY3Mr KyA9IGFkZHIgPj4gMzI7CisKKwltdW5tYXAobWFwLCA0MDk2KTsKK30KKworc3RhdGljIHN0cnVj dCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyCitkZWxheV9jcmVhdGUoaW50IGk5MTUsIHVpbnQz Ml90IGN0eCwKKwkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwK KwkgICAgIHVpbnQ2NF90IHRhcmdldF9ucykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNf b2JqZWN0MiBvYmogPSB7CisJCS5oYW5kbGUgPSBiYXRjaF9jcmVhdGUoaTkxNSksCisJCS5mbGFn cyA9IEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4Ql9BRERSRVNTLAorCX07CisJc3RydWN0IGRybV9p OTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmID0geworCQkuYnVmZmVyc19wdHIgPSB0b191c2Vy X3BvaW50ZXIoJm9iaiksCisJCS5idWZmZXJfY291bnQgPSAxLAorCQkucnN2ZDEgPSBjdHgsCisJ CS5mbGFncyA9IGUtPmZsYWdzLAorCX07CisKKwlvYmoub2Zmc2V0ID0gb2JqLmhhbmRsZSA8PCAx MjsKKwlnZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7CisJZ2VtX3N5bmMoaTkxNSwgb2JqLmhh bmRsZSk7CisKKwlkZWxheShpOTE1LCBlLCBvYmouaGFuZGxlLCBvYmoub2Zmc2V0LCB0YXJnZXRf bnMpOworCisJb2JqLmZsYWdzIHw9IEVYRUNfT0JKRUNUX1BJTk5FRDsKKwlyZXR1cm4gb2JqOwor fQorCitzdGF0aWMgdm9pZCB0c2xvZyhpbnQgaTkxNSwKKwkJICBjb25zdCBzdHJ1Y3QgaW50ZWxf ZXhlY3V0aW9uX2VuZ2luZTIgKmUsCisJCSAgdWludDMyX3QgaGFuZGxlLAorCQkgIHVpbnQ2NF90 IGFkZHIpCit7CisJY29uc3QgaW50IHVzZV82NGIgPSBpbnRlbF9nZW4oaW50ZWxfZ2V0X2RybV9k ZXZpZChpOTE1KSkgPj0gODsKKwljb25zdCB1aW50MzJfdCBiYXNlID0gZ2VtX2VuZ2luZV9tbWlv X2Jhc2UoaTkxNSwgZS0+bmFtZSk7CisjZGVmaW5lIENTX0dQUih4KSAoYmFzZSArIDB4NjAwICsg OCAqICh4KSkKKyNkZWZpbmUgQ1NfVElNRVNUQU1QIChiYXNlICsgMHgzNTgpCisJZW51bSB7IElO QywgTUFTSywgQUREUiB9OworCXVpbnQzMl90ICp0aW1lc3RhbXBfbG8sICphZGRyX2xvOworCXVp bnQzMl90ICptYXAsICpjczsKKworCWlndF9yZXF1aXJlKGJhc2UpOworCisJbWFwID0gZ2VtX21t YXBfX2RldmljZV9jb2hlcmVudChpOTE1LCBoYW5kbGUsIDAsIDQwOTYsIFBST1RfV1JJVEUpOwor CWNzID0gbWFwICsgNTEyOworCisJLyogUmVjb3JkIHRoZSBjdXJyZW50IENTX1RJTUVTVEFNUCBp bnRvIGEgam91cm5hbCBbYSA1MTIgc2xvdCByaW5nXS4gKi8KKwkqY3MrKyA9IDB4MjQgPDwgMjMg fCAoMSArIHVzZV82NGIpOyAvKiBTUk0gKi8KKwkqY3MrKyA9IENTX1RJTUVTVEFNUDsKKwl0aW1l c3RhbXBfbG8gPSBjczsKKwkqY3MrKyA9IGFkZHI7CisJKmNzKysgPSBhZGRyID4+IDMyOworCisJ LyogTG9hZCB0aGUgYWRkcmVzcyArIGluYyAmIG1hc2sgdmFyaWFibGVzICovCisJKmNzKysgPSBN SV9MT0FEX1JFR0lTVEVSX0lNTTsKKwkqY3MrKyA9IENTX0dQUihBRERSKTsKKwlhZGRyX2xvID0g Y3M7CisJKmNzKysgPSBhZGRyOworCSpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU07CisJKmNz KysgPSBDU19HUFIoQUREUikgKyA0OworCSpjcysrID0gYWRkciA+PiAzMjsKKworCSpjcysrID0g TUlfTE9BRF9SRUdJU1RFUl9JTU07CisJKmNzKysgPSBDU19HUFIoSU5DKTsKKwkqY3MrKyA9IDQ7 CisJKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTTsKKwkqY3MrKyA9IENTX0dQUihJTkMpICsg NDsKKwkqY3MrKyA9IDA7CisKKwkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NOworCSpjcysr ID0gQ1NfR1BSKE1BU0spOworCSpjcysrID0gMHhmZmZmZjdmZjsKKwkqY3MrKyA9IE1JX0xPQURf UkVHSVNURVJfSU1NOworCSpjcysrID0gQ1NfR1BSKE1BU0spICsgNDsKKwkqY3MrKyA9IDB4ZmZm ZmZmZmY7CisKKwkvKiBJbmNyZW1lbnQgdGhlIFtyaW5nXSBhZGRyZXNzIGZvciBzYXZpbmcgQ1Nf VElNRVNUQU1QICovCisJKmNzKysgPSBNSV9NQVRIKDgpOworCSpjcysrID0gTUlfTUFUSF9MT0FE KE1JX01BVEhfUkVHX1NSQ0EsIE1JX01BVEhfUkVHKElOQykpOworCSpjcysrID0gTUlfTUFUSF9M T0FEKE1JX01BVEhfUkVHX1NSQ0IsIE1JX01BVEhfUkVHKEFERFIpKTsKKwkqY3MrKyA9IE1JX01B VEhfQUREOworCSpjcysrID0gTUlfTUFUSF9TVE9SRShNSV9NQVRIX1JFRyhBRERSKSwgTUlfTUFU SF9SRUdfQUNDVSk7CisJKmNzKysgPSBNSV9NQVRIX0xPQUQoTUlfTUFUSF9SRUdfU1JDQSwgTUlf TUFUSF9SRUcoQUREUikpOworCSpjcysrID0gTUlfTUFUSF9MT0FEKE1JX01BVEhfUkVHX1NSQ0Is IE1JX01BVEhfUkVHKE1BU0spKTsKKwkqY3MrKyA9IE1JX01BVEhfQU5EOworCSpjcysrID0gTUlf TUFUSF9TVE9SRShNSV9NQVRIX1JFRyhBRERSKSwgTUlfTUFUSF9SRUdfQUNDVSk7CisKKwkvKiBS ZXdyaXRlIHRoZSBiYXRjaCBidWZmZXIgZm9yIHRoZSBuZXh0IGV4ZWN1dGlvbiAqLworCSpjcysr ID0gMHgyNCA8PCAyMyB8ICgxICsgdXNlXzY0Yik7IC8qIFNSTSAqLworCSpjcysrID0gQ1NfR1BS KEFERFIpOworCSpjcysrID0gYWRkciArIG9mZnNldF9pbl9wYWdlKHRpbWVzdGFtcF9sbyk7CisJ KmNzKysgPSBhZGRyID4+IDMyOworCSpjcysrID0gMHgyNCA8PCAyMyB8ICgxICsgdXNlXzY0Yik7 IC8qIFNSTSAqLworCSpjcysrID0gQ1NfR1BSKEFERFIpOworCSpjcysrID0gYWRkciArIG9mZnNl dF9pbl9wYWdlKGFkZHJfbG8pOworCSpjcysrID0gYWRkciA+PiAzMjsKKworCSpjcysrID0gTUlf QkFUQ0hfQlVGRkVSX0VORDsKKworCW11bm1hcChtYXAsIDQwOTYpOworfQorCitzdGF0aWMgc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIKK3RzbG9nX2NyZWF0ZShpbnQgaTkxNSwgdWlu dDMyX3QgY3R4LCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCit7CisJ c3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0geworCQkuaGFuZGxlID0gYmF0 Y2hfY3JlYXRlKGk5MTUpLAorCQkuZmxhZ3MgPSBFWEVDX09CSkVDVF9TVVBQT1JUU180OEJfQURE UkVTUywKKwl9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsK KwkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZvYmopLAorCQkuYnVmZmVyX2NvdW50 ID0gMSwKKwkJLnJzdmQxID0gY3R4LAorCQkuZmxhZ3MgPSBlLT5mbGFncywKKwl9OworCisJb2Jq Lm9mZnNldCA9IG9iai5oYW5kbGUgPDwgMTI7CisJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYp OworCWdlbV9zeW5jKGk5MTUsIG9iai5oYW5kbGUpOworCisJdHNsb2coaTkxNSwgZSwgb2JqLmhh bmRsZSwgb2JqLm9mZnNldCk7CisKKwlvYmouZmxhZ3MgfD0gRVhFQ19PQkpFQ1RfUElOTkVEOwor CXJldHVybiBvYmo7Cit9CisKIHN0YXRpYyBpbnQgY21wX3UzMihjb25zdCB2b2lkICpBLCBjb25z dCB2b2lkICpCKQogewogCWNvbnN0IHVpbnQzMl90ICphID0gQSwgKmIgPSBCOwpAQCAtMjU1MCw2 ICsyNzg5LDU2MCBAQCBzdGF0aWMgaW50IGNtcF91MzIoY29uc3Qgdm9pZCAqQSwgY29uc3Qgdm9p ZCAqQikKIAkJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBib29sIGhhc19jdHhfdGltZXN0YW1wKGlu dCBpOTE1LCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCit7CisJY29u c3QgaW50IGdlbiA9IGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGk5MTUpKTsKKworCWlm IChnZW4gPT0gOCAmJiBlLT5jbGFzcyA9PSBJOTE1X0VOR0lORV9DTEFTU19WSURFTykKKwkJcmV0 dXJuIGZhbHNlOyAvKiBsb29rcyBmdWJhciAqLworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp YyBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIKK3BpY2tfcmFuZG9tX2VuZ2luZShpbnQg aTkxNSwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICpub3QpCit7CisJY29u c3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplOworCXVuc2lnbmVkIGludCBjb3Vu dCA9IDA7CisKKwlfX2Zvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShpOTE1LCBlKSB7CisJCWlmIChl LT5mbGFncyA9PSBub3QtPmZsYWdzKQorCQkJY29udGludWU7CisJCWlmICghZ2VtX2NsYXNzX2hh c19tdXRhYmxlX3N1Ym1pc3Npb24oaTkxNSwgZS0+Y2xhc3MpKQorCQkJY29udGludWU7CisJCWNv dW50Kys7CisJfQorCWlmICghY291bnQpCisJCXJldHVybiAqbm90OworCisJY291bnQgPSByYW5k KCkgJSBjb3VudDsKKwlfX2Zvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShpOTE1LCBlKSB7CisJCWlm IChlLT5mbGFncyA9PSBub3QtPmZsYWdzKQorCQkJY29udGludWU7CisJCWlmICghZ2VtX2NsYXNz X2hhc19tdXRhYmxlX3N1Ym1pc3Npb24oaTkxNSwgZS0+Y2xhc3MpKQorCQkJY29udGludWU7CisJ CWlmICghY291bnQtLSkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiAqZTsKK30KKworc3RhdGlj IHZvaWQgZmFpcl9jaGlsZChpbnQgaTkxNSwgdWludDMyX3QgY3R4LAorCQkgICAgICAgY29uc3Qg c3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAorCQkgICAgICAgdWludDY0X3QgZnJh bWVfbnMsCisJCSAgICAgICBpbnQgdGltZWxpbmUsCisJCSAgICAgICB1aW50MzJfdCBjb21tb24s CisJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCSAgICAgICB1bnNpZ25lZCBsb25nICpj dGwsCisJCSAgICAgICB1bnNpZ25lZCBsb25nICptZWRpYW4sCisJCSAgICAgICB1bnNpZ25lZCBs b25nICppcXIpCisjZGVmaW5lIEZfU1lOQwkJKDEgPDwgMCkKKyNkZWZpbmUgRl9QQUNFCQkoMSA8 PCAxKQorI2RlZmluZSBGX0ZMT1cJCSgxIDw8IDIpCisjZGVmaW5lIEZfSEFMRgkJKDEgPDwgMykK KyNkZWZpbmUgRl9TT0xPCQkoMSA8PCA0KQorI2RlZmluZSBGX1NQQVJFCQkoMSA8PCA1KQorI2Rl ZmluZSBGX05FWFQJCSgxIDw8IDYpCisjZGVmaW5lIEZfVklQCQkoMSA8PCA3KQorI2RlZmluZSBG X1JSVUwJCSgxIDw8IDgpCisjZGVmaW5lIEZfU0hBUkUJCSgxIDw8IDkpCisjZGVmaW5lIEZfUElO RwkJKDEgPDwgMTApCisjZGVmaW5lIEZfVEhST1RUTEUJKDEgPDwgMTEpCisjZGVmaW5lIEZfSVNP TEFURQkoMSA8PCAxMikKK3sKKwljb25zdCBpbnQgYmF0Y2hlc19wZXJfZnJhbWUgPSBmbGFncyAm IEZfU09MTyA/IDEgOiAzOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9ials0 XSA9IHsKKwkJe30sCisJCXsKKwkJCS5oYW5kbGUgPSBjb21tb24gPzogZ2VtX2NyZWF0ZShpOTE1 LCA0MDk2KSwKKwkJfSwKKwkJZGVsYXlfY3JlYXRlKGk5MTUsIGN0eCwgZSwgZnJhbWVfbnMgLyBi YXRjaGVzX3Blcl9mcmFtZSksCisJCWRlbGF5X2NyZWF0ZShpOTE1LCBjdHgsIGUsIGZyYW1lX25z IC8gYmF0Y2hlc19wZXJfZnJhbWUpLAorCX07CisJc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdp bmUyIHBpbmcgPSAqZTsKKwlpbnQgcF9mZW5jZSA9IC0xLCBuX2ZlbmNlID0gLTE7CisJdW5zaWdu ZWQgbG9uZyBjb3VudCA9IDA7CisJaW50IG47CisKKwlzcmFuZG9tKGdldHBpZCgpKTsKKwlpZiAo ZmxhZ3MgJiBGX1BJTkcpCisJCXBpbmcgPSBwaWNrX3JhbmRvbV9lbmdpbmUoaTkxNSwgZSk7CisJ b2JqWzBdID0gdHNsb2dfY3JlYXRlKGk5MTUsIGN0eCwgJnBpbmcpOworCisJd2hpbGUgKCFSRUFE X09OQ0UoKmN0bCkpIHsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVm ID0geworCQkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKG9iaiksCisJCQkuYnVmZmVy X2NvdW50ID0gMywKKwkJCS5yc3ZkMSA9IGN0eCwKKwkJCS5yc3ZkMiA9IC0xLAorCQkJLmZsYWdz ID0gZS0+ZmxhZ3MsCisJCX07CisKKwkJaWYgKGZsYWdzICYgRl9GTE9XKSB7CisJCQl1bnNpZ25l ZCBpbnQgc2VxOworCisJCQlzZXEgPSBjb3VudDsKKwkJCWlmIChmbGFncyAmIEZfTkVYVCkKKwkJ CQlzZXErKzsKKworCQkJZXhlY2J1Zi5yc3ZkMiA9CisJCQkJc3dfc3luY190aW1lbGluZV9jcmVh dGVfZmVuY2UodGltZWxpbmUsIHNlcSk7CisJCQlleGVjYnVmLmZsYWdzIHw9IEk5MTVfRVhFQ19G RU5DRV9JTjsKKwkJfQorCisJCWV4ZWNidWYuZmxhZ3MgfD0gSTkxNV9FWEVDX0ZFTkNFX09VVDsK KwkJZ2VtX2V4ZWNidWZfd3IoaTkxNSwgJmV4ZWNidWYpOworCQluX2ZlbmNlID0gZXhlY2J1Zi5y c3ZkMiA+PiAzMjsKKwkJZXhlY2J1Zi5mbGFncyAmPSB+KEk5MTVfRVhFQ19GRU5DRV9PVVQgfCBJ OTE1X0VYRUNfRkVOQ0VfSU4pOworCQlmb3IgKG4gPSAxOyBuIDwgYmF0Y2hlc19wZXJfZnJhbWU7 IG4rKykKKwkJCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKKwkJY2xvc2UoZXhlY2J1Zi5y c3ZkMik7CisKKwkJZXhlY2J1Zi5idWZmZXJfY291bnQgPSAxOworCQlleGVjYnVmLmJhdGNoX3N0 YXJ0X29mZnNldCA9IDIwNDg7CisJCWV4ZWNidWYuZmxhZ3MgPSBwaW5nLmZsYWdzIHwgSTkxNV9F WEVDX0ZFTkNFX0lOOworCQlleGVjYnVmLnJzdmQyID0gbl9mZW5jZTsKKwkJZ2VtX2V4ZWNidWYo aTkxNSwgJmV4ZWNidWYpOworCisJCWlmIChmbGFncyAmIEZfUEFDRSAmJiBwX2ZlbmNlICE9IC0x KSB7CisJCQlzdHJ1Y3QgcG9sbGZkIHBmZCA9IHsKKwkJCQkuZmQgPSBwX2ZlbmNlLAorCQkJCS5l dmVudHMgPSBQT0xMSU4sCisJCQl9OworCQkJcG9sbCgmcGZkLCAxLCAtMSk7CisJCX0KKwkJY2xv c2UocF9mZW5jZSk7CisKKwkJaWYgKGZsYWdzICYgRl9TWU5DKSB7CisJCQlzdHJ1Y3QgcG9sbGZk IHBmZCA9IHsKKwkJCQkuZmQgPSBuX2ZlbmNlLAorCQkJCS5ldmVudHMgPSBQT0xMSU4sCisJCQl9 OworCQkJcG9sbCgmcGZkLCAxLCAtMSk7CisJCX0KKworCQlpZiAoZmxhZ3MgJiBGX1RIUk9UVExF KQorCQkJaWd0X2lvY3RsKGk5MTUsIERSTV9JT0NUTF9JOTE1X0dFTV9USFJPVFRMRSwgMCk7CisK KwkJaWd0X3N3YXAob2JqWzJdLCBvYmpbM10pOworCQlpZ3Rfc3dhcChwX2ZlbmNlLCBuX2ZlbmNl KTsKKwkJY291bnQrKzsKKwl9CisJY2xvc2UocF9mZW5jZSk7CisKKwlnZW1fY2xvc2UoaTkxNSwg b2JqWzNdLmhhbmRsZSk7CisJZ2VtX2Nsb3NlKGk5MTUsIG9ialsyXS5oYW5kbGUpOworCWlmIChv YmpbMV0uaGFuZGxlICE9IGNvbW1vbikKKwkJZ2VtX2Nsb3NlKGk5MTUsIG9ialsxXS5oYW5kbGUp OworCisJZ2VtX3N5bmMoaTkxNSwgb2JqWzBdLmhhbmRsZSk7CisJaWYgKG1lZGlhbikgeworCQl1 aW50MzJfdCAqbWFwOworCisJCS8qCisJCSAqIFdlIHJlY29yZGVkIHRoZSBDU19USU1FU1RBTVAg b2YgZWFjaCBmcmFtZSwgYW5kIGlmCisJCSAqIHRoZSBHUFUgaXMgYmVpbmcgc2hhcmVkIGNvbXBs ZXRlbHkgZmFpcmx5LCB3ZSBleHBlY3QKKwkJICogZWFjaCBmcmFtZSB0byBiZSBhdCB0aGUgc2Ft ZSBpbnRlcnZhbCBmcm9tIHRoZSBsYXN0LgorCQkgKgorCQkgKiBDb21wdXRlIHRoZSBpbnRlcnZh bCBiZXR3ZWVuIGZyYW1lcyBhbmQgcmVwb3J0IGJhY2sKKwkJICogYm90aCB0aGUgbWVkaWFuIGlu dGVydmFsIGFuZCB0aGUgcmFuZ2UgZm9yIHRoaXMgY2xpZW50LgorCQkgKi8KKworCQltYXAgPSBn ZW1fbW1hcF9fZGV2aWNlX2NvaGVyZW50KGk5MTUsIG9ialswXS5oYW5kbGUsCisJCQkJCQkwLCA0 MDk2LCBQUk9UX1dSSVRFKTsKKwkJZm9yIChuID0gMTsgbiA8IG1pbihjb3VudCwgNTEyKTsgbisr KSB7CisJCQlpZ3RfYXNzZXJ0KG1hcFtuXSk7CisJCQltYXBbbiAtIDFdID0gbWFwW25dIC0gbWFw W24gLSAxXTsKKwkJfQorCQlxc29ydChtYXAsIC0tbiwgc2l6ZW9mKCptYXApLCBjbXBfdTMyKTsK KwkJKmlxciA9IHRpY2tzX3RvX25zKGk5MTUsIG1hcFsoMyAqIG4gKyAzKSAvIDRdIC0gbWFwW24g LyA0XSk7CisJCSptZWRpYW4gPSB0aWNrc190b19ucyhpOTE1LCBtYXBbbiAvIDJdKTsKKwkJbXVu bWFwKG1hcCwgNDA5Nik7CisJfQorCWdlbV9jbG9zZShpOTE1LCBvYmpbMF0uaGFuZGxlKTsKK30K Kworc3RhdGljIGludCBjbXBfdWwoY29uc3Qgdm9pZCAqQSwgY29uc3Qgdm9pZCAqQikKK3sKKwlj b25zdCB1bnNpZ25lZCBsb25nICphID0gQSwgKmIgPSBCOworCisJaWYgKCphIDwgKmIpCisJCXJl dHVybiAtMTsKKwllbHNlIGlmICgqYSA+ICpiKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVy biAwOworfQorCitzdGF0aWMgdWludDY0X3QgZF9jcHVfdGltZShjb25zdCBzdHJ1Y3QgcnVzYWdl ICphLCBjb25zdCBzdHJ1Y3QgcnVzYWdlICpiKQoreworCXVpbnQ2NF90IGNwdV90aW1lID0gMDsK KworCWNwdV90aW1lICs9IChhLT5ydV91dGltZS50dl9zZWMgLSBiLT5ydV91dGltZS50dl9zZWMp ICogTlNFQ19QRVJfU0VDOworCWNwdV90aW1lICs9IChhLT5ydV91dGltZS50dl91c2VjIC0gYi0+ cnVfdXRpbWUudHZfdXNlYykgKiAxMDAwOworCisJY3B1X3RpbWUgKz0gKGEtPnJ1X3N0aW1lLnR2 X3NlYyAtIGItPnJ1X3N0aW1lLnR2X3NlYykgKiBOU0VDX1BFUl9TRUM7CisJY3B1X3RpbWUgKz0g KGEtPnJ1X3N0aW1lLnR2X3VzZWMgLSBiLT5ydV9zdGltZS50dl91c2VjKSAqIDEwMDA7CisKKwly ZXR1cm4gY3B1X3RpbWU7Cit9CisKK3N0YXRpYyB2b2lkIHRpbWVsaW5lX2FkdmFuY2UoaW50IHRp bWVsaW5lLCBpbnQgZGVsYXlfbnMpCit7CisJc3RydWN0IHRpbWVzcGVjIHR2ID0geyAudHZfbnNl YyA9IGRlbGF5X25zIH07CisJbmFub3NsZWVwKCZ0diwgTlVMTCk7CisJc3dfc3luY190aW1lbGlu ZV9pbmModGltZWxpbmUsIDEpOworfQorCitzdGF0aWMgdm9pZCBmYWlybmVzcyhpbnQgaTkxNSwK KwkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCisJCSAgICAg aW50IHRpbWVvdXQsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwljb25zdCBpbnQgZnJhbWVfbnMg PSAxNjY2NiAqIDEwMDA7CisJY29uc3QgaW50IGZlbmNlX25zID0gZmxhZ3MgJiBGX0hBTEYgPyAy ICogZnJhbWVfbnMgOiBmcmFtZV9uczsKKwl1bnNpZ25lZCBsb25nICpyZXN1bHQsICppcXI7CisJ dWludDMyX3QgY29tbW9uID0gMDsKKworCWlndF9yZXF1aXJlKGhhc19jdHhfdGltZXN0YW1wKGk5 MTUsIGUpKTsKKwlpZ3RfcmVxdWlyZShnZW1fY2xhc3NfaGFzX211dGFibGVfc3VibWlzc2lvbihp OTE1LCBlLT5jbGFzcykpOworCisJaWYgKGZsYWdzICYgRl9TSEFSRSkKKwkJY29tbW9uID0gZ2Vt X2NyZWF0ZShpOTE1LCA0MDk1KTsKKworCXJlc3VsdCA9IG1tYXAoTlVMTCwgNDA5NiwgUFJPVF9X UklURSwgTUFQX1NIQVJFRCB8IE1BUF9BTk9OLCAtMSwgMCk7CisJaWd0X2Fzc2VydChyZXN1bHQg IT0gTUFQX0ZBSUxFRCk7CisJaXFyID0gbW1hcChOVUxMLCA0MDk2LCBQUk9UX1dSSVRFLCBNQVBf U0hBUkVEIHwgTUFQX0FOT04sIC0xLCAwKTsKKwlpZ3RfYXNzZXJ0KGlxciAhPSBNQVBfRkFJTEVE KTsKKworCS8qCisJICogVGhlIGNvbWJpbmVkIHdvcmtsb2FkIGFsd2F5cyBydW5zIGF0IGEgNjBm cHMgdGFyZ2V0ICh1bmxlc3MgRl9IQUxGISkuCisJICogVGhpcyBnaXZlcyBhIGZyYW1lIG9mIGlu dGVydmFsIG9mIDE2bXMgdGhhdCBpcyBldmVubHkgc3BsaXQgYWNyb3NzCisJICogYWxsIHRoZSBj bGllbnRzLCBzbyBzaW11bGF0aW5nIGEgc3lzdGVtIHdpdGggYSBidW5jaCBvZiBjbGllbnRzIHRo YXQKKwkgKiBhcmUgcGVyZmVjdGx5IGJhbGFuY2VkIGFuZCBjYW4gc3VzdGFpbiA2MGZwcy4gT3Vy IGpvYiBpcyB0byBlbnN1cmUKKwkgKiB0aGF0IGVhY2ggY2xpZW50IGRvZXMgcnVuIGF0IGEgc21v b3RoIDYwZnBzLgorCSAqCisJICogRWFjaCBjbGllbnQgcnVucyBhIGZpeGVkIGxlbmd0aCBkZWxh eSBsb29wIChhcyBhIHNpbmdsZSByZXF1ZXN0LAorCSAqIG9yIHNwbGl0IGludG8gMykgYW5kIHRo ZW4gcmVjb3JkcyB0aGUgQ1NfVElNRVNUQU1QIGFmdGVyIGNvbXBsZXRpbmcKKwkgKiBpdHMgZGVs YXkuIEdpdmVuIGEgZmFpciBhbGxvdG1lbnQgb2YgR1BVIHRpbWUgdG8gZWFjaCBjbGllbnQsCisJ ICogdGhhdCB0aW1lc3RhbXAgd2lsbCBbaWRlYWxseV0gYmUgYXQgYSBwcmVjaXNlIDE2bXMgaW50 ZXJ2YWxzLgorCSAqIEluIHByYWN0aWNlLCB0aW1lIGlzIHdhc3RlZCBvbiBjb250ZXh0IHN3aXRj aGVzLCBzbyBhcyB0aGUgbnVtYmVyCisJICogb2YgY2xpZW50cyBpbmNyZWFzZXMsIHRoZSBwcm9w cm90aW9uIG9mIHRpbWUgc3BlbnQgb24gY29udGV4dAorCSAqIHN3aXRjaGVzIGdyb3dzLiBBcyB3 ZSBnZXQgdG8gNjQgcmVuZGVyIGNsaWVudHMsIHdlIHdpbGwgYmUgc3BlbmRpbmcKKwkgKiBhcyBt dWNoIHRpbWUgaW4gY29udGV4dCBzd2l0Y2hlcyBhcyBleGVjdXRpbmcgdGhlIGNsaWVudCB3b3Jr bG9hZHMuCisJICoKKwkgKiBFYWNoIGNsaWVudCBmcmFtZSBtYXkgYmUgcGFjZWQgYnkgc29tZSB0 aHJvdHRsaW5nIHRlY2huaXF1ZSBmb3VuZAorCSAqIGluIHRoZSB3aWxkLiBpLmUuIGVhY2ggY2xp ZW50IG1heSB3YWl0IHVudGlsIGEgc2ltdWxhdGVkIHZibGFuaworCSAqIHRvIGluZGljYXRlIHRo ZSBzdGFydCBvZiBhIG5ldyBmcmFtZSwgb3IgaXQgbWF5IHdhaXQgdW50aWwgdGhlCisJICogY29t cGxldGlvbiBvZiBhIHByZXZpb3VzIGZyYW1lLiBUaGlzIGNhdXNlcyBzdWJtaXNzaW9uIGZyb20g ZWFjaAorCSAqIGNsaWVudCBhbmQgYWNyb3NzIHRoZSBzeXN0ZW0gdG8gYmUgY2h1bmt5IGFuZCB1 bmV2ZW4uCisJICoKKwkgKiBXZSBsb29rIGF0IHRoZSB2YXJpYXRpb24gb2YgZnJhbWUgaW50ZXJ2 YWxzIHdpdGhpbiBlYWNoIGNsaWVudCwgYW5kCisJICogdGhlIHZhcmlhdGlvbiBvZiB0aGUgbWVk aWFucyBhY3Jvc3MgdGhlIGNsaWVudHMgdG8gc2VlIGlmIHRoZQorCSAqIGRpc3RyaWJ1dGlvbiAo YnVkZ2V0KSBvZiBHUFUgdGltZSB3YXMgZmFpciBlbm91Z2guCisJICoKKwkgKiBBbHRlcm5hdGl2 ZSAoYW5kIGltcG9ydGFudCkgbWV0cmljcyB3aWxsIGJlIG1vcmUgbGF0ZW5jeSBjZW50cmljOwor CSAqIGxvb2tpbmcgYXQgaG93IHdlbGwgd2UgY2FuIHN1c3RhaW4gbWVldGluZyBkZWFkbGluZSBn aXZlbiBjb21wZXRpdGlvbgorCSAqIGJ5IGNsaWVudHMgZm9yIHRoZSBHUFUuCisJICovCisKKwlm b3IgKGludCBuID0gMjsgbiA8PSAyNTY7IG4gPDw9IDEpIHsgLyogMzIgPT0gNTAwdXMgcGVyIGNs aWVudCAqLworCQlpbnQgdGltZWxpbmUgPSBzd19zeW5jX3RpbWVsaW5lX2NyZWF0ZSgpOworCQlp bnQgbmZlbmNlcyA9IHRpbWVvdXQgKiBOU0VDX1BFUl9TRUMgLyBmZW5jZV9ucyArIDE7CisJCWlu dCBuY2hpbGQgPSBuIC0gMTsgLyogb2RkIGZvciBlYXN5IG1lZGlhbnMgKi8KKwkJY29uc3QgaW50 IGNoaWxkX25zID0gZnJhbWVfbnMgLyAobmNoaWxkICsgISEoZmxhZ3MgJiBGX1NQQVJFKSk7CisJ CWNvbnN0IGludCBsbyA9IG5jaGlsZCAvIDQ7CisJCWNvbnN0IGludCBoaSA9ICgzICogbmNoaWxk ICsgMykgLyA0IC0gMTsKKwkJc3RydWN0IHJ1c2FnZSBvbGRfdXNhZ2UsIHVzYWdlOworCQl1aW50 NjRfdCBjcHVfdGltZSwgZF90aW1lOworCQlzdHJ1Y3QgdGltZXNwZWMgdHY7CisJCXN0cnVjdCBp Z3RfbWVhbiBtOworCisJCW1lbXNldChyZXN1bHQsIDAsIChuY2hpbGQgKyAxKSAqIHNpemVvZihy ZXN1bHRbMF0pKTsKKworCQlpZiAoZmxhZ3MgJiBGX1BJTkcpIHsgLyogZmlsbCB0aGUgb3RoZXJz IHdpdGggbGlnaHQgYmcgbG9hZCAqLworCQkJc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUy ICpwaW5nOworCisJCQlfX2Zvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShpOTE1LCBwaW5nKSB7CisJ CQkJaWYgKHBpbmctPmZsYWdzID09IGUtPmZsYWdzKQorCQkJCQljb250aW51ZTsKKworCQkJCWln dF9mb3JrKGNoaWxkLCAxKSB7CisJCQkJCXVpbnQzMl90IGN0eCA9IGdlbV9jb250ZXh0X2Nsb25l X3dpdGhfZW5naW5lcyhpOTE1LCAwKTsKKworCQkJCQlmYWlyX2NoaWxkKGk5MTUsIGN0eCwgcGlu ZywKKwkJCQkJCSAgIGNoaWxkX25zIC8gOCwKKwkJCQkJCSAgIC0xLCBjb21tb24sCisJCQkJCQkg ICBGX1NPTE8gfCBGX1BBQ0UgfCBGX1NIQVJFLAorCQkJCQkJICAgJnJlc3VsdFtuY2hpbGRdLAor CQkJCQkJICAgTlVMTCwgTlVMTCk7CisKKwkJCQkJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBj dHgpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWdldHJ1c2FnZShSVVNBR0VfQ0hJTERSRU4sICZv bGRfdXNhZ2UpOworCQlpZ3RfbnNlY19lbGFwc2VkKG1lbXNldCgmdHYsIDAsIHNpemVvZih0dikp KTsKKwkJaWd0X2ZvcmsoY2hpbGQsIG5jaGlsZCkgeworCQkJdWludDMyX3QgY3R4OworCisJCQlp ZiAoZmxhZ3MgJiBGX0lTT0xBVEUpIHsKKwkJCQlpbnQgY2xvbmUsIGRtYWJ1ZiA9IC0xOworCisJ CQkJaWYgKGNvbW1vbikKKwkJCQkJZG1hYnVmID0gcHJpbWVfaGFuZGxlX3RvX2ZkKGk5MTUsIGNv bW1vbik7CisKKwkJCQljbG9uZSA9IGdlbV9yZW9wZW5fZHJpdmVyKGk5MTUpOworCQkJCWdlbV9j b250ZXh0X2NvcHlfZW5naW5lcyhpOTE1LCAwLCBjbG9uZSwgMCk7CisJCQkJaTkxNSA9IGNsb25l OworCisJCQkJaWYgKGRtYWJ1ZiAhPSAtMSkKKwkJCQkJY29tbW9uID0gcHJpbWVfZmRfdG9faGFu ZGxlKGk5MTUsIGRtYWJ1Zik7CisJCQl9CisKKwkJCWN0eCA9IGdlbV9jb250ZXh0X2Nsb25lX3dp dGhfZW5naW5lcyhpOTE1LCAwKTsKKworCQkJaWYgKGZsYWdzICYgRl9WSVAgJiYgY2hpbGQgPT0g MCkgeworCQkJCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShpOTE1LCBjdHgsIE1BWF9QUklPKTsK KwkJCQlmbGFncyB8PSBGX0ZMT1c7CisJCQl9CisJCQlpZiAoZmxhZ3MgJiBGX1JSVUwgJiYgY2hp bGQgPT0gMCkKKwkJCQlmbGFncyB8PSBGX1NPTE8gfCBGX0ZMT1cgfCBGX1NZTkM7CisKKwkJCWZh aXJfY2hpbGQoaTkxNSwgY3R4LCBlLCBjaGlsZF9ucywKKwkJCQkgICB0aW1lbGluZSwgY29tbW9u LCBmbGFncywKKwkJCQkgICAmcmVzdWx0W25jaGlsZF0sCisJCQkJICAgJnJlc3VsdFtjaGlsZF0s ICZpcXJbY2hpbGRdKTsKKworCQkJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBjdHgpOworCQl9 CisKKwkJd2hpbGUgKG5mZW5jZXMtLSkKKwkJCXRpbWVsaW5lX2FkdmFuY2UodGltZWxpbmUsIGZl bmNlX25zKTsKKworCQlyZXN1bHRbbmNoaWxkXSA9IDE7CisJCWZvciAoaW50IGNoaWxkID0gMDsg Y2hpbGQgPCBuY2hpbGQ7IGNoaWxkKyspIHsKKwkJCXdoaWxlICghUkVBRF9PTkNFKHJlc3VsdFtj aGlsZF0pKQorCQkJCXRpbWVsaW5lX2FkdmFuY2UodGltZWxpbmUsIGZlbmNlX25zKTsKKwkJfQor CisJCWlndF93YWl0Y2hpbGRyZW4oKTsKKwkJY2xvc2UodGltZWxpbmUpOworCisJCS8qCisJCSAq IEFyZSB3ZSBydW5uaW5nIG91dCBvZiBDUFUgdGltZSwgYW5kIGZhaWwgdG8gc3VibWl0IGZyYW1l cz8KKwkJICoKKwkJICogV2UgdHJ5IHRvIHJ1bGUgb3V0IGFueSB1bmR1ZSBpbXBhY3Qgb24gdGhl IEdQVSBzY2hlZHVsaW5nCisJCSAqIGZyb20gdGhlIENQVSBzY2hlZHVsZXIgYnkgbG9va2luZyBm b3IgY29yZSBzYXR1cmF0aW9uLiBJZgorCQkgKiB3ZSBtYXkgYmUgaW4gYSBzaXR1YXRpb24gd2hl cmUgdGhlIGNsaWVudHMgKyBrZXJuZWwgYXJlCisJCSAqIHRha2luZyBhIHdob2xlIGNvcmUgKHRo aW5rIGxvY2tkZXApLCB0aGVuIGl0IGlzIGluY3JlYXNpbmdseQorCQkgKiBsaWtlbHkgdGhhdCBv dXIgbWVhc3VyZW1lbnRzIGluY2x1ZGUgZGVsYXlzIGZyb20gdGhlIENQVQorCQkgKiBzY2hlZHVs ZXIuIEVyciBvbiB0aGUgc2lkZSBvZiBjYXV0aW9uLgorCQkgKi8KKwkJZF90aW1lID0gaWd0X25z ZWNfZWxhcHNlZCgmdHYpOworCQlnZXRydXNhZ2UoUlVTQUdFX0NISUxEUkVOLCAmdXNhZ2UpOwor CQljcHVfdGltZSA9IGRfY3B1X3RpbWUoJnVzYWdlLCAmb2xkX3VzYWdlKTsKKwkJaWd0X2RlYnVn KCJDUFUgdXNhZ2U6ICUuMGYlJVxuIiwgMTAwLiAqIGNwdV90aW1lIC8gZF90aW1lKTsKKwkJaWYg KDQgKiBjcHVfdGltZSA+IDMgKiBkX3RpbWUpIHsKKwkJCWlmIChuY2hpbGQgPiA3KSAvKiBnb29k IGVub3VnaCB0byBqdWRnZSBwYXNzL2ZhaWwgKi8KKwkJCQlicmVhazsKKworCQkJaWd0X3NraXBf b25fZig0ICogY3B1X3RpbWUgPiAzICogZF90aW1lLAorCQkJCSAgICAgICIlLjBmJSUgQ1BVIHVz YWdlLCBwcmVzdW1pbmcgY2FwYWNpdHkgZXhjZWVkZWRcbiIsCisJCQkJICAgICAgMTAwLiAqIGNw dV90aW1lIC8gZF90aW1lKTsKKwkJfQorCisJCS8qIFdpdGggbm8gY29udGVudGlvbiwgd2Ugc2hv dWxkIG1hdGNoIG91ciB0YXJnZXQgZnJhbWV0aW1lICovCisJCWlmIChuY2hpbGQgPT0gMSkgewor CQkJaWd0X2Fzc2VydCg0ICogcmVzdWx0WzBdID4gMyAqIGZlbmNlX25zICYmCisJCQkJICAgMyAq IHJlc3VsdFswXSA8IDQgKiBmZW5jZV9ucyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJ CSAqIFRoZSBWSVAgc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGhpdCB0aGUgdGFyZ2V0IGZyYW1l IHJhdGU7CisJCSAqIHJlZ2FyZGxlc3Mgb2YgYnVkZ2V0IGNvbnRlbnRpb24gZnJvbSBsZXNzb3Ig Y2xpZW50cy4KKwkJICovCisJCWlmIChmbGFncyAmIChGX1ZJUCB8IEZfUlJVTCkpIHsKKwkJCWln dF9pbmZvKCJWSVAgaW50ZXJ2YWwgJS4yZm1zLCByYW5nZSAlLjJmbXNcbiIsCisJCQkJIDFlLTYg KiByZXN1bHRbMF0sIDFlLTYgKiBpcXJbMF0pOworCQkJaWd0X2Fzc2VydF9mKDQgKiByZXN1bHRb MF0gPiAzICogZmVuY2VfbnMgJiYKKwkJCQkgICAgIDMgKiByZXN1bHRbMF0gPCA0ICogZmVuY2Vf bnMsCisJCQkJICAgICAiVklQIGV4cGVjdHMgdG8gcnVuIGV4YWN0bHkgd2hlbiBpdCB3YW50cywg ZXhwZWN0cyBhbiBpbnRlcnZhbCBvZiAlLjJmbXMsIHdhcyAlLjJmbXNcbiIsCisJCQkJICAgICAx ZS02ICogZmVuY2VfbnMsIDFlLTYgKiByZXN1bHRbMF0pOworCQkJaWd0X2Fzc2VydF9mKDIgKiBp cXJbMF0gPCByZXN1bHRbMF0sCisJCQkJICAgICAiVklQIGZyYW1lIElRUiAlLjJmbXMgZXhjZWVk ZWQgbWVkaWFuIHRocmVzaG9sZCAlLjJmbXNcbiIsCisJCQkJICAgICAxZS02ICogaXFyWzBdLAor CQkJCSAgICAgMWUtNiAqIHJlc3VsdFswXSAvIDIpOworCQkJaWYgKCEtLW5jaGlsZCkKKwkJCQlj b250aW51ZTsKKworCQkJLyogRXhjbHVkZSB0aGUgVklQIHJlc3VsdCBmcm9tIHRoZSBwbGViaWFu IHN0YXRpc3RpY3MgKi8KKwkJCW1lbW1vdmUocmVzdWx0LCByZXN1bHQgKyAxLCBuY2hpbGQgKiBz aXplb2YoKnJlc3VsdCkpOworCQkJbWVtbW92ZShpcXIsIGlxciArIDEsIG5jaGlsZCAqIHNpemVv ZigqaXFyKSk7CisJCX0KKworCQlpZ3RfbWVhbl9pbml0KCZtKTsKKwkJZm9yIChpbnQgY2hpbGQg PSAwOyBjaGlsZCA8IG5jaGlsZDsgY2hpbGQrKykKKwkJCWlndF9tZWFuX2FkZCgmbSwgcmVzdWx0 W2NoaWxkXSk7CisKKwkJcXNvcnQocmVzdWx0LCBuY2hpbGQsIHNpemVvZigqcmVzdWx0KSwgY21w X3VsKTsKKwkJcXNvcnQoaXFyLCBuY2hpbGQsIHNpemVvZigqaXFyKSwgY21wX3VsKTsKKworCQkv KgorCQkgKiBUaGUgdGFyZ2V0IGludGVydmFsIGZvciBtZWRpYW4vbWVhbiBpcyAxNm1zIChmZW5j ZV9ucykuCisJCSAqIEhvd2V2ZXIsIHRoaXMgd29yayBpcyBldmVubHkgc3BsaXQgYWNyb3NzIHRo ZSBjbGllbnRzIHNvCisJCSAqIHRoZSByYW5nZSAoYW5kIG1lZGlhbikgb2YgY2xpZW50IG1lZGlh bnMgbWF5IGJlIG11Y2ggbGVzcworCQkgKiB0aGFuIDE2bXMgWzE2LzNOXS4gV2UgcHJlc2VudCBt ZWRpYW4gb2YgbWVkaWFucyB0byB0cnkKKwkJICogYW5kIGF2b2lkIGFueSBpbnN0YWJpbGl0eSB3 aGlsZSBydW5uaW5nIGluIENJOyBhdCB0aGUgY29zdAorCQkgKiBvZiBpbnNlbnNpdGl2aXR5IQor CQkgKi8KKwkJaWd0X2luZm8oIiUzZCBjbGllbnRzLCByYW5nZTogWyUuMWYsICUuMWZdLCBpcXI6 IFslLjFmLCAlLjFmXSwgbWVkaWFuOiAlLjFmIFslLjFmLCAlLjFmXSwgbWVhbjogJS4xZiDCsSAl LjJmIG1zLCBjcHU6ICUuMGYlJVxuIiwKKwkJCSBuY2hpbGQsCisJCQkgMWUtNiAqIHJlc3VsdFsw XSwgIDFlLTYgKiByZXN1bHRbbmNoaWxkIC0gMV0sCisJCQkgMWUtNiAqIHJlc3VsdFtsb10sIDFl LTYgKiByZXN1bHRbaGldLAorCQkJIDFlLTYgKiByZXN1bHRbbmNoaWxkIC8gMl0sCisJCQkgMWUt NiAqIGlxcltsb10sIDFlLTYgKiBpcXJbaGldLAorCQkJIDFlLTYgKiBpZ3RfbWVhbl9nZXQoJm0p LAorCQkJIDFlLTYgKiBzcXJ0KGlndF9tZWFuX2dldF92YXJpYW5jZSgmbSkpLAorCQkJIDEwMC4g KiBjcHVfdGltZSAvIGRfdGltZSk7CisKKwkJaWd0X2Fzc2VydF9mKGlxcltuY2hpbGQgLyAyXSA8 IDIgKiByZXN1bHRbbmNoaWxkIC8gMl0sCisJCQkgICAgICJDaGlsZCBmcmFtZSBJUVIgJS4yZm1z IGV4Y2VlZGVkIG1lZGlhbiB0aHJlc2hvbGQgJS4yZm1zXG4iLAorCQkJICAgICAxZS02ICogaXFy W25jaGlsZCAvIDJdLAorCQkJICAgICAxZS02ICogcmVzdWx0W25jaGlsZCAvIDJdICogMik7CisK KwkJaWd0X2Fzc2VydF9mKDQgKiBpZ3RfbWVhbl9nZXQoJm0pID4gMyAqIHJlc3VsdFtuY2hpbGQg LyAyXSAmJgorCQkJICAgICAzICogaWd0X21lYW5fZ2V0KCZtKSA8IDQgKiByZXN1bHRbbmNoaWxk IC8gMl0sCisJCQkgICAgICJNZWFuIG9mIGNsaWVudCBpbnRlcnZhbCAlLjJmbXMgZGlmZmVycyBm cm9tIG1lZGlhbiAlLjJmbXMsIGRpc3RyaWJ1dGlvbiBpcyBza2V3ZWRcbiIsCisKKwkJCSAgICAg MWUtNiAqIGlndF9tZWFuX2dldCgmbSksIDFlLTYgKiByZXN1bHRbbmNoaWxkIC8gMl0pOworCisJ CWlndF9hc3NlcnRfZihyZXN1bHRbbmNoaWxkIC8gMl0gPiBmcmFtZV9ucyAvIDIsCisJCQkgICAg ICJNZWRpYW4gY2xpZW50IGludGVydmFsICUuMmZtcyBkaWQgbm90IG1hdGNoIHRhcmdldCBpbnRl cnZhbCAlLjJmbXNcbiIsCisJCQkgICAgIDFlLTYgKiByZXN1bHRbbmNoaWxkIC8gMl0sIDFlLTYg KiBmcmFtZV9ucyk7CisKKworCQlpZ3RfYXNzZXJ0X2YocmVzdWx0W2hpXSAtIHJlc3VsdFtsb10g PCByZXN1bHRbbmNoaWxkIC8gMl0sCisJCQkgICAgICJJbnRlcnF1YXJ0aWxlIHJhbmdlIG9mIGNs aWVudCBpbnRlcnZhbHMgJS4yZm1zIGlzIGFzIGxhcmdlIGFzIHRoZSBtZWRpYW4gdGhyZXNob2xk ICUuMmZtcywgY2xpZW50cyBhcmUgbm90IGV2ZW5seSBkaXN0cmlidXRlZCFcbiIsCisJCQkgICAg IDFlLTYgKiAocmVzdWx0W2hpXSAtIHJlc3VsdFtsb10pLAorCQkJICAgICAxZS02ICogcmVzdWx0 W25jaGlsZCAvIDJdKTsKKworCQkvKiBNYXkgYmUgc2xvd2VkIGR1ZSB0byBzaGVlciB2b2x1bWUg b2YgY29udGV4dCBzd2l0Y2hlcyAqLworCQlpZiAocmVzdWx0WzBdID4gMiAqIGZlbmNlX25zKQor CQkJYnJlYWs7CisJfQorCisJbXVubWFwKGlxciwgNDA5Nik7CisJbXVubWFwKHJlc3VsdCwgNDA5 Nik7CisJaWYgKGNvbW1vbikKKwkJZ2VtX2Nsb3NlKGk5MTUsIGNvbW1vbik7Cit9CisKK3N0YXRp YyB2b2lkIHRlc3RfZmFpcm5lc3MoaW50IGk5MTUsIGludCB0aW1lb3V0KQoreworCXN0YXRpYyBj b25zdCBzdHJ1Y3QgeworCQljb25zdCBjaGFyICpuYW1lOworCQl1bnNpZ25lZCBpbnQgZmxhZ3M7 CisJfSBmYWlyW10gPSB7CisJCS8qCisJCSAqIG5vbmUgLSBtYXhpbWFsIGdyZWVkIGluIGVhY2gg Y2xpZW50CisJCSAqCisJCSAqIFB1c2ggYXMgbWFueSBmcmFtZXMgZnJvbSBlYWNoIGNsaWVudCBh cyBmYXN0IGFzIHBvc3NpYmxlCisJCSAqLworCQl7ICJub25lIiwgICAgICAgMCB9LAorCQl7ICJu b25lLXZpcCIsICAgRl9WSVAgfSwgLyogb25lIHZpcCBjbGllbnQgbXVzdCBtZWV0IGRlYWRsaW5l cyAqLworCQl7ICJub25lLXNvbG8iLCAgRl9TT0xPIH0sIC8qIDEgYmF0Y2ggcGVyIGZyYW1lIHBl ciBjbGllbnQgKi8KKwkJeyAibm9uZS1zaGFyZSIsIEZfU0hBUkUgfSwgLyogcmVhZCBmcm9tIGEg Y29tbW9uIGJ1ZmZlciAqLworCQl7ICJub25lLXJydWwiLCAgRl9SUlVMIH0sIC8qICJyZWFsdGlt ZS1yZXNwb25zZSB1bmRlciBsb2FkIiAqLworCQl7ICJub25lLXBpbmciLCAgRl9QSU5HIH0sIC8q IG1lYXN1cmUgaW50ZXItZW5naW5lIGZhaXJuZXNzICovCisKKwkJLyoKKwkJICogdGhyb3R0bGUg LSBvcmlnaW5hbCBwZXIgY2xpZW50IHRocm90dGxpbmcKKwkJICoKKwkJICogVXNlZCBmb3IgZnJv bnQgYnVmZmVyaW5nIHJlbmRlcmluZyB3aGVyZSB0aGVyZSBpcyBubworCQkgKiBleHRlbmFsIGZy YW1lIG1hcmtlci4gRWFjaCBjbGllbnQgdHJpZXMgdG8gb25seSBrZWVwCisJCSAqIDIwbXMgb2Yg d29yayBzdWJtaXR0ZWQsIHRob3VnaCB0aGF0IG1lYXN1cmVtZW50IGlzCisJCSAqIGZsYXdlZC4u LgorCQkgKgorCQkgKiBUaGlzIGlzIHVzZWQgYnkgWG9yZyB0byB0cnkgYW5kIG1haW50YWluIHNv bWUgcmVzZW1iYWxhbmNlCisJCSAqIG9mIGlucHV0L291dHB1dCBjb25zaXN0ZW5jeSB3aGVuIGJl aW5nIGZlZWQgYSBjb250aW51b3VzCisJCSAqIHN0cmVhbSBvZiBYMTEgZHJhdyByZXF1ZXN0cyBz dHJhaWdodCBpbnRvIHNjYW5vdXQsIHdoZXJlCisJCSAqIHRoZSBjbGllbnRzIG1heSBzdWJtaXQg dGhlIHdvcmsgZmFzdGVyIHRoYW4gY2FuIGJlIGRyYXduLgorCQkgKgorCQkgKiBUaHJvdHRsaW5n IHRyYWNrcyByZXF1ZXN0cyBwZXItZmlsZSAoYW5kIGFzc3VtZXMgdGhhdAorCQkgKiBhbGwgcmVx dWVzdHMgYXJlIGluIHN1Ym1pc3Npb24gb3JkZXIgYWNyb3NzIHRoZSB3aG9sZSBmaWxlKSwKKwkJ ICogc28gd2Ugc3BsaXQgZWFjaCBjaGlsZCB0byBpdHMgb3duIGZkLgorCQkgKi8KKwkJeyAidGhy b3R0bGUiLCAgICAgICBGX1RIUk9UVExFIHwgRl9JU09MQVRFIH0sCisJCXsgInRocm90dGxlLXZp cCIsICAgRl9USFJPVFRMRSB8IEZfSVNPTEFURSB8IEZfVklQIH0sCisJCXsgInRocm90dGxlLXNv bG8iLCAgRl9USFJPVFRMRSB8IEZfSVNPTEFURSB8IEZfU09MTyB9LAorCQl7ICJ0aHJvdHRsZS1z aGFyZSIsIEZfVEhST1RUTEUgfCBGX0lTT0xBVEUgfCBGX1NIQVJFIH0sCisJCXsgInRocm90dGxl LXJydWwiLCAgRl9USFJPVFRMRSB8IEZfSVNPTEFURSB8IEZfUlJVTCB9LAorCisJCS8qCisJCSAq IHBhY2UgLSBtZXNhICJzdWJtaXQgZG91YmxlIGJ1ZmZlcmluZyIKKwkJICoKKwkJICogU3VibWl0 IGEgZnJhbWUsIHdhaXQgZm9yIHByZXZpb3VzIGZyYW1lIHRvIHN0YXJ0LiBUaGlzCisJCSAqIHBy ZXZlbnRzIGVhY2ggY2xpZW50IGZyb20gZ2V0dGluZyB0b28gZmFyIGFoZWFkIG9mIGl0cworCQkg KiByZW5kZXJpbmcsIG1haW50YWluaW5nIGEgY29uc2lzdGVudCBpbnB1dC9vdXRwdXQgbGF0ZW5j eS4KKwkJICovCisJCXsgInBhY2UiLCAgICAgICBGX1BBQ0UgfSwKKwkJeyAicGFjZS1zb2xvIiwg IEZfUEFDRSB8IEZfU09MTyB9LAorCQl7ICJwYWNlLXNoYXJlIiwgRl9QQUNFIHwgRl9TT0xPIHwg Rl9TSEFSRSB9LAorCQl7ICJwYWNlLXBpbmciLCAgRl9QQUNFIHwgRl9TT0xPIHwgRl9TSEFSRSB8 IEZfUElOR30sCisKKwkJLyogc3luYyAtIG9ubHkgc3VibWl0IGEgZnJhbWUgYXQgYSB0aW1lICov CisJCXsgInN5bmMiLCAgICAgIEZfU1lOQyB9LAorCQl7ICJzeW5jLXZpcCIsICBGX1NZTkMgfCBG X1ZJUCB9LAorCQl7ICJzeW5jLXNvbG8iLCBGX1NZTkMgfCBGX1NPTE8gfSwKKworCQkvKiBmbG93 IC0gc3luY2hyb25pc2UgZXhlY3V0aW9uIGFnYWluc3QgdGhlIGNsb2NrICh2YmxhbmspICovCisJ CXsgImZsb3ciLCAgICAgICBGX1BBQ0UgfCBGX0ZMT1cgfSwKKwkJeyAiZmxvdy1zb2xvIiwgIEZf UEFDRSB8IEZfRkxPVyB8IEZfU09MTyB9LAorCQl7ICJmbG93LXNoYXJlIiwgRl9QQUNFIHwgRl9G TE9XIHwgRl9TSEFSRSB9LAorCQl7ICJmbG93LXBpbmciLCAgRl9QQUNFIHwgRl9GTE9XIHwgRl9T SEFSRSB8IEZfUElORyB9LAorCisJCS8qIG5leHQgLSBzdWJtaXQgYWhlYWQgb2YgdGhlIGNsb2Nr ICh2YmxhbmsgZG91YmxlIGJ1ZmZlcmluZykgKi8KKwkJeyAibmV4dCIsICAgICAgIEZfUEFDRSB8 IEZfRkxPVyB8IEZfTkVYVCB9LAorCQl7ICJuZXh0LXNvbG8iLCAgRl9QQUNFIHwgRl9GTE9XIHwg Rl9ORVhUIHwgRl9TT0xPIH0sCisJCXsgIm5leHQtc2hhcmUiLCBGX1BBQ0UgfCBGX0ZMT1cgfCBG X05FWFQgfCBGX1NIQVJFIH0sCisJCXsgIm5leHQtcGluZyIsICBGX1BBQ0UgfCBGX0ZMT1cgfCBG X05FWFQgfCBGX1NIQVJFIHwgRl9QSU5HIH0sCisKKwkJLyogc3BhcmUgLSB1bmRlcnV0aWxpc2Ug YnkgYSBzaW5nbGUgY2xpZW50IHRpbWVzbGljZSAqLworCQl7ICJzcGFyZSIsICAgICAgRl9QQUNF IHwgRl9GTE9XIHwgRl9TUEFSRSB9LAorCQl7ICJzcGFyZS1zb2xvIiwgRl9QQUNFIHwgRl9GTE9X IHwgRl9TUEFSRSB8IEZfU09MTyB9LAorCisJCS8qIGhhbGYgLSBydW4gYXQgaGFsZiBwYWNlIChz dWJtaXQgMTZtcyBvZiB3b3JrIGV2ZXJ5IDMybXMpICovCisJCXsgImhhbGYiLCAgICAgICBGX1BB Q0UgfCBGX0ZMT1cgfCBGX0hBTEYgfSwKKwkJeyAiaGFsZi1zb2xvIiwgIEZfUEFDRSB8IEZfRkxP VyB8IEZfSEFMRiB8IEZfU09MTyB9LAorCisJCXt9CisJfTsKKworCWlndF9maXh0dXJlIHsKKwkJ aWd0X2luZm8oIkNTIHRpbWVzdGFtcCBmcmVxdWVuY3k6ICVkXG4iLAorCQkJIHJlYWRfdGltZXN0 YW1wX2ZyZXF1ZW5jeShpOTE1KSk7CisKKwkJaWd0X3JlcXVpcmUoaW50ZWxfZ2VuKGludGVsX2dl dF9kcm1fZGV2aWQoaTkxNSkpID49IDgpOworCX0KKworCWZvciAodHlwZW9mKCpmYWlyKSAqZiA9 IGZhaXI7IGYtPm5hbWU7IGYrKykgeworCQlpZ3Rfc3VidGVzdF93aXRoX2R5bmFtaWNfZigiZmFp ci0lcyIsIGYtPm5hbWUpICB7CisJCQljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2lu ZTIgKmU7CisKKwkJCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGk5MTUsIGUpIHsKKwkJCQlp ZiAoIWdlbV9jbGFzc19jYW5fc3RvcmVfZHdvcmQoaTkxNSwgZS0+Y2xhc3MpKQorCQkJCQljb250 aW51ZTsKKworCQkJCWlndF9keW5hbWljX2YoIiVzIiwgZS0+bmFtZSkKKwkJCQkJZmFpcm5lc3Mo aTkxNSwgZSwgdGltZW91dCwgZi0+ZmxhZ3MpOworCQkJfQorCQl9CisJfQorfQorCiBzdGF0aWMg dWludDMyX3QgcmVhZF9jdHhfdGltZXN0YW1wKGludCBpOTE1LAogCQkJCSAgIHVpbnQzMl90IGN0 eCwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCkBAIC0y Nzg5LDYgKzM1ODIsMTAgQEAgaWd0X21haW4KIAkJdGVzdF9lYWNoX2VuZ2luZV9zdG9yZSgicHJv bW90aW9uIiwgZmQsIGUpCiAJCQlwcm9tb3Rpb24oZmQsIGUtPmZsYWdzKTsKIAorCQlpZ3Rfc3Vi dGVzdF9ncm91cCB7CisJCQl0ZXN0X2ZhaXJuZXNzKGZkLCAyKTsKKwkJfQorCiAJCWlndF9zdWJ0 ZXN0X2dyb3VwIHsKIAkJCWlndF9maXh0dXJlIHsKIAkJCQlpZ3RfcmVxdWlyZShnZW1fc2NoZWR1 bGVyX2hhc19wcmVlbXB0aW9uKGZkKSk7Ci0tIAoyLjI5LjIKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaWd0LWRldgo=