From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=52.187.6.220 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792677502; b=oCXOccAHlnxYfeZzESmiT+4YSFGef9QvQE5rhm4uGwWzJq3jduoLV+ZjahmexmHgetqo l+PodVbwpZdzN0MqRKbmjaY/w9mgrYiMQ52TqHTm+Jm9Th/2eQGNweKp31/3heL3FHL0u KE2EaGx0n3UHchFbmpB3KNmGZNcOw110sMx/5by7MTnHkcNuVUTngLCg/v9rohG+Df7LC TZKVTwLZJhXgdncPKWMwuISVEJaNHPSU3Wf3ugrAHV7yt+/hZAgm0yN4UaC0fQtz3qPum qcdlj5dVLFv3yLfZzE8U1h3f5pnGNHtHYwkB/TMKyE1UtnhU8wQO0Ht7/7GewPU8Peg== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792677502; h=DMARC-Filter:Received:X-Originating-IP:Date:X-CM-HeaderCharset:From: To:Cc:Subject:X-Priority:X-Mailer:X-CM-CTRLMSGS:Content-Type: MIME-Version:Message-ID:X-Coremail-Locale:X-CM-TRANSID: X-CM-SenderInfo:X-Coremail-Antispam; bh=upTRap22G9Pv/0YzveYe1jLh+zAOrx7KZHqgbFhrwAM=; b=aobh/XhkW1hRuA6BnYTy01LSznPtDVY9hOwiWvVq8Lz0Kgeq7w+lR3wJopEXH8zV6x/P aLtEOV/4fy1IFE16nYPowt7Bwy23mPqsvYphEDQ3bigkpUgCIGFnFPp+piFd8LMR/Q+4Q OFV5ZMJ5bQ77PveOJCKNzk/SyJgZxNAbxL3bZd8VQ17wUN52e0XbxClpg/Jwy/AWVq8/m uoGVeG39WrkmXg4svz8VZ2wepY3KzlY8KZIkkjXpOak0vVRVM08b+UaxWlgFDlYLyoImx uN4SArfdv0PmTdICA7r5oQMqipIKjJo8cU5c2Mu7R3T4Tzylbrt9qHwhDrbRAQWGn9A== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none header.from=hust.edu.cn; spf=pass smtp.mailfrom=hust.edu.cn; arc=none smtp.remote-ip=52.187.6.220 Received: from azure-sdnproxy.icoremail.net (azure-sdnproxy.icoremail.net [52.187.6.220]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 1DF89606A31A; Thu, 22 Oct 2026 13:58:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 1DF89606A31A Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=hust.edu.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hust.edu.cn Received: from xuhx$hust.edu.cn ( [10.12.190.107] ) by ajax-webmail-app2 (Coremail) ; Thu, 22 Oct 2026 21:58:12 +0800 (GMT+08:00) Date: Thu, 22 Oct 2026 21:58:12 +0800 (GMT+08:00) X-CM-HeaderCharset: UTF-8 From: =?UTF-8?B?5b6Q5pmX57+U?= To: peterz@infradead.org, mingo@redhat.com, acme@kernel.org, namhyung@kernel.org Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: perf/uncore: activeboxes count TOCTOU lets PCI probe/remove run perf_pmu_register() and perf_pmu_unregister() concurrently on the same struct pmu X-Priority: 3 X-Mailer: Coremail Webmail Server Version 2025.3-cmXT6 build 20260810(6c94e3b5) Copyright (c) 2002-2026 www.mailtech.cn hust X-CM-CTRLMSGS: =?B?gNfnYziH6nJ5xwDR7hwMki1N8jM= Content-Type: multipart/mixed; boundary="----=_Part_283798_1387402402.1792677492628" X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Message-ID: <78d9ba61.14c08.1a163e7b794.Coremail.xuhx@hust.edu.cn> X-Coremail-Locale: zh_CN X-CM-TRANSID:IQEQrMCWvXZ0FtpqnnZUAA--.59541W X-CM-SenderInfo: bgsqjkayqyjmo6kx23oohg3hdfq/1tbiAQMIB2rY5eup6wABsy X-Coremail-Antispam: 1Ur529EdanIXcx71UUUUU7IcSsGvfJ3iIAIbVAYjsxI4VWkKw CS07vEb4IE77IF4wCS07vE1I0E4x80FVAKz4kxMIAIbVAFxVCaYxvI4VCIwcAKzIAtYxBI daVFxhVjvjDU= ------=_Part_283798_1387402402.1792677492628 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 VGhlIHVuY29yZSBQQ0kgZHJpdmVyIGRlY2lkZXMgImZpcnN0IGFjdGl2ZSBib3ggcmVnaXN0ZXJz IHRoZSBQTVUiIGFuZAoibGFzdCBhY3RpdmUgYm94IHVucmVnaXN0ZXJzIHRoZSBQTVUiIHdpdGgg bm90aGluZyBidXQgdGhlCnBtdS0+YWN0aXZlYm94ZXMgY291bnRlciAtLSB0aGUgZGVjaXNpb24g YW5kIHRoZSBwZXJmX3BtdV9yZWdpc3RlcigpLwpwZXJmX3BtdV91bnJlZ2lzdGVyKCkgZXhlY3V0 aW9uIGFyZSBub3Qgc2VyaWFsaXplZCAtLSBzbyBvbiBhIG11bHRpLWRpZQpwbGF0Zm9ybSB3aG9z ZSBzYW1lLXR5cGVkIGJveGVzIGxpdmUgb24gZGlmZmVyZW50IGRpZXMsIGNvbmN1cnJlbnRseQpy ZW1vdmluZyB0aGUgbGFzdCBib3ggb2Ygb25lIGRpZSBhbmQgcHJvYmluZyBhIGJveCBvZiBhbm90 aGVyIGRpZSBydW5zCnJlZ2lzdGVyIGFuZCB1bnJlZ2lzdGVyIG9uIHRoZSBTQU1FIHN0cnVjdCBw bXUgYXQgdGhlIHNhbWUgdGltZTsgdGhlCnVucmVnaXN0ZXIgc2lkZSdzIHVubG9ja2VkIHRhaWwg KHR3byBncmFjZSBwZXJpb2RzLCB0aGVuIGlkcl9yZW1vdmUoKQpyZS1yZWFkaW5nIHBtdS0+dHlw ZSBhbmQgcGVyZl9wbXVfZnJlZSgpIHJlYWRpbmcgcG11LT5kZXYgYW5kCnBtdS0+Y3B1X3BtdV9j b250ZXh0KSB0aGVuIGNvbnN1bWVzIHdoYXRldmVyIHRoZSBjb25jdXJyZW50IHJlZ2lzdGVyCmp1 c3QgcHVibGlzaGVkLCBhbmQgdGhlIGtlcm5lbCBvb3BzZXMgb3IgbGVhdmVzIGEgUE1VIGluIHRo ZSBsaXN0CmhvbGRpbmcgZnJlZWQgcGVyLUNQVSBjb250ZXh0cy4gIFRoZSBwZXJmLWNvcmUgaGFs ZiBvZiB0aGlzIGlzCmNvbmZpcm1lZCBkeW5hbWljYWxseSBvbiBtYWlubGluZSA3LjMgKGZpcnN0 IGNvbmN1cnJlbmN5IHJvdW5kOgpwYWdlIGZhdWx0IG9vcHMgaW5zaWRlIHBlcmZfcG11X3VucmVn aXN0ZXIpOyB0aGUgdW5jb3JlLXNpZGUgdHJpZ2dlcgppcyBzb3VyY2UtcHJvdmVuIG9uIDcuMydz IGN1cnJlbnQgKHJlY2VudGx5IHJlZmFjdG9yZWQpIGNvZGUsIHdoaWNoCmFkZGVkIGJveCByZWZj b3VudGluZyBhbmQgYSBQTVVfQlJPS0VOIHN0YXRlIGJ1dCBzdGlsbCBubwpzZXJpYWxpemF0aW9u IG9mIHRoaXMgZGVjaXNpb24gcGF0aC4KCkJvdGggZGVjaXNpb24gc2l0ZXMgYXJlIGNvdW50ZXIt b25seSBvbiA3LjMgKGFyY2gveDg2L2V2ZW50cy9pbnRlbC8KdW5jb3JlLmMpOiB1bmNvcmVfYm94 X3NldHVwKCkgYXQgOjExNTMgc2tpcHMgcmVnaXN0cmF0aW9uIHdoZW4KYXRvbWljX2luY19yZXR1 cm4oJnBtdS0+YWN0aXZlYm94ZXMpID4gMSAoOjExNjYpLCBvdGhlcndpc2UgY2FsbHMKdW5jb3Jl X3BtdV9yZWdpc3RlcigpICg6OTI2KTsgdW5jb3JlX3BjaV9wbXVfdW5yZWdpc3RlcigpIGF0IDox MjgzCmNhbGxzIHVuY29yZV9wbXVfdW5yZWdpc3RlcigpICg6OTYwKSB3aGVuIGF0b21pY19kZWNf cmV0dXJuKC4uLikgPT0gMAooOjEyOTEpLiAgTWVhbndoaWxlIHRoZSBwZXJmIGNvcmUgaXMgYXN5 bW1ldHJpYzogcGVyZl9wbXVfcmVnaXN0ZXIoKQooa2VybmVsL2V2ZW50cy9jb3JlLmM6MTI4MzYp IGhvbGRzIHBtdXNfbG9jayBmb3IgaXRzIHdob2xlIGJvZHkKKGd1YXJkIGF0IDoxMjg0MSksIHdo aWxlIHBlcmZfcG11X3VucmVnaXN0ZXIoKSAoOjEzMDIzKSBob2xkcyBpdCBvbmx5CmZvciB0aGUg aWRyX2NtcHhjaGcvbGlzdF9kZWwgc2VjdGlvbiAoOjEzMDI1LTEzMDI5KSBhbmQgZm9yIHRoZSBm aW5hbAppZHJfcmVtb3ZlICg6MTMwNTYtMTMwNTcpIC0tIGJldHdlZW4gYW5kIGFmdGVyIHRoZW0g dGhlIHR3bwpzeW5jaHJvbml6ZV9zcmN1KCkvc3luY2hyb25pemVfcmN1KCkgZ3JhY2UgcGVyaW9k cyAoOjEzMDQyLTEzMDQzKSwKdGhlIGlkcl9yZW1vdmUoKSB0aGF0IHJlLXJlYWRzIHBtdS0+dHlw ZSwgYW5kIHBlcmZfcG11X2ZyZWUoKQooOjEzMDY4LCByZWFkaW5nIHBtdS0+ZGV2L3BtdS0+Y3B1 X3BtdV9jb250ZXh0IGFuZCBmcmVlaW5nIHRoZW0pIGFsbApydW4gdW5sb2NrZWQgZm9yIHRlbnMg b2YgbWlsbGlzZWNvbmRzLiAgVHJpZ2dlcmluZyBuZWVkcyBhIG11bHRpLWRpZQpob3N0IHdpdGgg aWQtdGFibGUgdW5jb3JlIFBDSSBkcml2ZXJzIChzbmJlcC9za3ggZmFtaWxpZXMpIGFuZApjb25j dXJyZW50IHN5c2ZzIHVuYmluZC9yZXNjYW4gKG9yIGEgaG90cGx1Zy9EUEMgZXZlbnQgcmFjaW5n IGFuCmFkbWluIG9wZXJhdGlvbikgLS0gcm9vdCBhY3Rpb25zLCBidXQgZWFjaCBlbnRpcmVseSBs ZWdpdGltYXRlLgoKVGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uOgoKKiBUZXN0IGVudmlyb25tZW50 IC8gYWZmZWN0ZWQgdmVyc2lvbgoKICBMaW51eCB2ZXJzaW9uIDcuMy4wIChnY2MgMTMuMy4wLCBH TlUgbGQgMi40MikgIzEgU01QIFBSRUVNUFRfRFlOQU1JQwogIC0tIHZhbmlsbGEgbWFpbmxpbmUg Ny4zIHJlbGVhc2UgdGFyYmFsbCAoa2VybmVsLm9yZywgdW5tb2RpZmllZCksCiAgcmVidWlsdCB3 aXRoIENPTkZJR19QRVJGX0VWRU5UUz15LCBDT05GSUdfUEVSRl9FVkVOVFNfSU5URUxfVU5DT1JF PXksCiAgS0FTQU4gZW5hYmxlZCwgUUVNVS9LVk0geDg2XzY0IGd1ZXN0LiAgVGhlIHBlcmYtY29y ZSBmdW5jdGlvbnMKICBjaXRlZCBhcmUgYnl0ZS1pZGVudGljYWwgaW4gNy4xLjUgYW5kIDcuMzsg dGhlIHVuY29yZSBmdW5jdGlvbnMgd2VyZQogIHJlZmFjdG9yZWQgZHVyaW5nIDcuMyAoYm94IHJl ZmNvdW50aW5nLCBQTVVfQlJPS0VOIHN0aWNraW5lc3MsCiAgV0FSTl9PTl9PTkNFIGFnYWluc3Qg ZG91YmxlIHByb2JlIGF0IDoxMjA2KSAtLSB0aGUgcmVmYWN0b3IgZGlkIE5PVAogIGFkZCBhbnkg bG9jayAodGhlIGZpbGUncyBsb2NrIGludmVudG9yeSBpcyB1bmNoYW5nZWQpLCBhbmQgdGhlCiAg Y291bnRlci1vbmx5IGRlY2lzaW9uIHNoYXBlIHN1cnZpdmVzIGl0LiAgTGluZSBudW1iZXJzIGJl bG93IGFyZQogIGZyb20gNy4zLgoKKiBNZWNoYW5pc20KCiAgMS4gQ291bnRlci1vbmx5IGRlY2lz aW9ucywgbm8gbG9jayBiZXR3ZWVuIGRlY2lzaW9uIGFuZCBleGVjdXRpb246CgogICAgICAgICB1 bmNvcmVfYm94X3NldHVwKCkgICAgICAgICAgICAgIC8qIHVuY29yZS5jOjExNTMgKi8KICAgICAg ICAgICAgIC4uLgogICAgICAgICAgICAgaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwbXUtPmFjdGl2 ZWJveGVzKSA+IDEpICAgLyogOjExNjYgKi8KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7 CiAgICAgICAgICAgICByZXQgPSB1bmNvcmVfcG11X3JlZ2lzdGVyKHBtdSk7ICAgICAgICAgICAg ICAgICAvKiBmaXJzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYm94ICovCgogICAgICAgICB1bmNvcmVfcGNpX3BtdV91bnJl Z2lzdGVyKCkgICAgLyogdW5jb3JlLmM6MTI4MyAqLwogICAgICAgICAgICAgcG11LT5ib3hlc1tk aWVdID0gTlVMTDsKICAgICAgICAgICAgIGlmIChhdG9taWNfZGVjX3JldHVybigmcG11LT5hY3Rp dmVib3hlcykgPT0gMCkgIC8qIDoxMjkxICovCiAgICAgICAgICAgICAgICAgICAgIHVuY29yZV9w bXVfdW5yZWdpc3RlcihwbXUpOyAgICAgICAgICAgICAvKiBsYXN0CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3ggKi8KCiAg ICAgVHdvIGRpZmZlcmVudCBQQ0kgZGV2aWNlcycgcHJvYmUgYW5kIHJlbW92ZSBjYWxsYmFja3Mg KHBlci1kZXZpY2UKICAgICBsb2NrcyBvbmx5OyBzeXNmcyBiaW5kL3VuYmluZC9yZXNjYW4gYXJl IG5vdCBtdXR1YWxseSBleGNsdXNpdmUpCiAgICAgY2FuIGhvbGQgYm90aCBkZWNpc2lvbnMgc2lt dWx0YW5lb3VzbHk6IHJlbW92ZSBkcm9wcyBkaWUwJ3MgbGFzdAogICAgIGJveCB0byAwIGFuZCBk ZWNpZGVzICJ1bnJlZ2lzdGVyIiB3aGlsZSBwcm9iZSBicmluZ3MgZGllMSdzIGJveAogICAgIGZy b20gMCB0byAxIGFuZCBkZWNpZGVzICJyZWdpc3RlciIgLS0gc2FtZSBzdHJ1Y3QgaW50ZWxfdW5j b3JlX3BtdQogICAgICh0eXBlLT5wbXVzW10gaXMgc2hhcmVkIGFjcm9zcyBkaWVzIGZvciBpZC10 YWJsZSB0eXBlcykuCgogIDIuIFRoZSByZWdpc3RlciBzaWRlIHJld3JpdGVzIHRoZSBzaGFyZWQg c3RydWN0IHBtdSBmcm9tIHNjcmF0Y2g6CiAgICAgdW5jb3JlX3BtdV9yZWdpc3RlcigpICg6OTI2 KSBhc3NpZ25zIHRoZSB3aG9sZSB0ZW1wbGF0ZQogICAgIChjbGVhcmluZyAtPmRldiwgLT50eXBl LCAtPmNwdV9wbXVfY29udGV4dCkgYmVmb3JlIGNhbGxpbmcKICAgICBwZXJmX3BtdV9yZWdpc3Rl cigpLCB3aGljaCB0aGVuIGNyZWF0ZXMgYSBORVcgZGV2aWNlLCBhbGxvY2F0ZXMgYQogICAgIE5F VyB0eXBlIGlkIGFuZCBhIE5FVyBwZXJjcHUgY29udGV4dCBhcnJheSwgYW5kIHB1Ymxpc2hlcyB0 aGVtLgoKICAzLiBUaGUgdW5yZWdpc3RlciBzaWRlJ3MgdW5sb2NrZWQgdGFpbCByZWFkcyB3aGF0 IHJlZ2lzdGVyIGp1c3QKICAgICBwdWJsaXNoZWQuICBXaXRoIEEgPSByZW1vdmUoZGllMCkgYW5k IEIgPSBwcm9iZShkaWUxKToKCiAgICAgICBBOiBwZXJmX3BtdV91bnJlZ2lzdGVyKCkgbG9ja3Mg cG11c19sb2NrLCBpZHJfY21weGNoZyArIGxpc3RfZGVsCiAgICAgICAgICAoOjEzMDI1LTEzMDI5 KSwgVU5MT0NLUywgZW50ZXJzIHR3byBncmFjZSBwZXJpb2RzCiAgICAgICAgICAoOjEzMDQyLTEz MDQzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSB0ZW5zIG9mIG1zCiAgICAgICBCOiB1 bmNvcmVfcG11X3JlZ2lzdGVyKCkgcmVzZXRzIHRoZSBzdHJ1Y3QsIHBlcmZfcG11X3JlZ2lzdGVy KCkKICAgICAgICAgIChob2xkaW5nIHBtdXNfbG9jayB0aGUgd2hvbGUgdGltZSkgY3JlYXRlcyBk ZXZpY2UgRDIsIHR5cGUKICAgICAgICAgIFQyLCBjb250ZXh0cyBQMjsgSU5JVCBldmVudCBsaXN0 OyBwdWJsaXNoZXM7IHJldHVybnMgMAogICAgICAgQTogcmVzdW1lczogaWRyX3JlbW92ZSgmcG11 X2lkciwgcG11LT50eXBlKSAgLyogOjEzMDU2LTEzMDU3LAogICAgICAgICAgcmUtcmVhZHMgcG11 LT50eXBlID09IFQyIC0+IGRlbGV0ZXMgQidzIGZyZXNoIGVudHJ5ICovCiAgICAgICAgICBwZXJm X3BtdV9mcmVlKHBtdSkgICAgICAgICAgICAgICAgICAgICAgICAvKiA6MTMwNjg6IHJlYWRzCiAg ICAgICAgICBwbXUtPmRldiA9PSBEMiAtPiBkZXZpY2VfZGVsL3B1dDsgcmVhZHMgcG11LT5jcHVf cG11X2NvbnRleHQKICAgICAgICAgID09IFAyIC0+IGtmcmVlcyBCJ3MgZnJlc2ggY29udGV4dHMg KyBmcmVlX3BlcmNwdSAqLwoKICAgICBFbmQgc3RhdGVzOiBhIFBNVSBzdGlsbCBvbiB0aGUgcG11 cyBsaXN0IHdob3NlIElEUiBlbnRyeSBpcyBnb25lCiAgICAgYW5kIHdob3NlIGNvbnRleHRzIGFy ZSBmcmVlZCAobGF0ZXIgcGVyZl9ldmVudF9vcGVuKCkgcmVhY2hpbmcKICAgICBmaW5kX2dldF9w bXVfY29udGV4dCgpIHdhbGtzIGZyZWVkIG1lbW9yeSksIG9yIHRoZSBtaXJyb3IKICAgICBpbnRl cmxlYXZpbmcgd2hlcmUgQSdzIGNtcHhjaGcgY29uc3VtZXMgQidzIHJlZ2lzdHJhdGlvbiB3aG9s ZXNhbGUKICAgICAodGhlIGFjdGl2ZSBQTVUgdmFuaXNoZXM7IGV2ZW50IGNyZWF0aW9uIGZhaWxz IHdpdGggRU5PREVWIHVudGlsCiAgICAgcmViaW5kKS4gIHVuY29yZV9wbXVfdW5yZWdpc3Rlcigp ICg6OTYwLTk2NykgYWxzbyBpZ25vcmVzCiAgICAgcGVyZl9wbXVfdW5yZWdpc3RlcigpJ3MgcmV0 dXJuIHZhbHVlLCBzbyB0aGUgLUVJTlZBTCB2YXJpYW50CiAgICAgbGVhdmVzIGEgaGFsZi10b3Ju IHN0YXRlIG1hY2hpbmUgaW4gcGxhY2UuCgoqIEV2aWRlbmNlICg3LjMpCgogIC0gU291cmNlLWxl dmVsLCB1bmNvcmUgc2lkZTogdGhlIGRlY2lzaW9uIHBhdGhzIGFib3ZlIGNvbnRhaW4gbm8KICAg IHNlcmlhbGl6YXRpb24gb24gY3VycmVudCA3LjMgKHZlcmlmaWVkIGZ1bmN0aW9uLWJ5LWZ1bmN0 aW9uOyB0aGUKICAgIDcuMyByZWZhY3RvciB0b3VjaGVkIGV4YWN0bHkgdGhlc2UgZnVuY3Rpb25z IHdpdGhvdXQgYWRkaW5nIGEKICAgIGxvY2spLiAgUmVhbC1oYXJkd2FyZSB0cmlnZ2VyOiBjb25j dXJyZW50CiAgICAgIGVjaG8gPGJkZjA+ID4gL3N5cy9idXMvcGNpL2RyaXZlcnMvc2t4X3VuY29y ZS91bmJpbmQKICAgICAgZWNobyAxICAgICA+IC9zeXMvYnVzL3BjaS9yZXNjYW4KICAgIG9uIGEg bXVsdGktZGllIGhvc3QuCiAgLSBEeW5hbWljLCBwZXJmLWNvcmUgaGFsZiAocmVwcm9kdWNlciBh dHRhY2hlZCwgcG11X3JhY2UuYyk6IGl0cwogICAgInJhY2UiIGFjdGlvbiBzdGFydHMgdHdvIGt0 aHJlYWRzIGZhaXRoZnVsbHkgbWlycm9yaW5nIGJvdGggc2lkZXMKICAgIC0tIGFuIHVucmVnaXN0 ZXIgbG9vcCBhbmQgYSByZWdpc3RlciBsb29wIHRoYXQgcGVyZm9ybXMgdGhlIHNhbWUKICAgIHdo b2xlLXN0cnVjdCByZXNldCB1bmNvcmVfcG11X3JlZ2lzdGVyKCkgZG9lcyBiZWZvcmUgZWFjaAog ICAgcGVyZl9wbXVfcmVnaXN0ZXIoKSwgb24gdGhlIHNhbWUgc3RydWN0IHBtdS4gIE9uIHRoZSA0 LXZDUFUgS0FTQU4KICAgIFZNIHRoZSBGSVJTVCBjb25jdXJyZW5jeSByb3VuZCAoc2Vjb25kcyBp bnRvIHRoZSBydW4pIGVuZHMgaW46CgogICAgICAgIENQVTogMCAuLi4gQ29tbTogcG11X3JhY2Vf dW5yZWcKICAgICAgICBSSVA6IDAwMTA6cGVyZl9wbXVfdW5yZWdpc3RlcisweDFjYi8weDYyMAog ICAgICAgICNQRjogc3VwZXJ2aXNvciByZWFkIGFjY2VzcyAuLi4gYWRkcmVzcyBmZmZmZmZmZmZm ZmZmZTA4CgogICAgcmVhZGluZyBhIHBvaW50ZXIgZGVyaXZlZCBmcm9tIHRoZSBjb25jdXJyZW50 bHkgcmV3cml0dGVuIHBtdQogICAgZmllbGRzOyB0aGUgdW5yZWdpc3RlciB0aHJlYWQgZGllcyBh bmQgdGhlIHJhY2UgbmV2ZXIgY29udmVyZ2VzLgogICAgKFNhbWUgc2lnbmF0dXJlIG9uIDcuMS41 IGF0ICsweDFkMzsgdGhlIGNvZGUgYmV0d2VlbiBpcwogICAgaWRlbnRpY2FsLikgIFVzYWdlOgoK ICAgICAgaW5zbW9kIHBtdV9yYWNlLmtvCiAgICAgIGVjaG8gInJhY2UgMjAwMCIgPiAvc3lzL21v ZHVsZS9wbXVfcmFjZS9wYXJhbWV0ZXJzL2FjdGlvbgogICAgICBlY2hvIHN0YXR1cyA+IC9zeXMv bW9kdWxlL3BtdV9yYWNlL3BhcmFtZXRlcnMvYWN0aW9uCgogICAgUUVNVSBwcm92aWRlcyBubyB1 bmNvcmUgUENJIGRldmljZXMsIHdoaWNoIGlzIHdoeSB0aGUgdW5jb3JlLXNpZGUKICAgIHRyaWdn ZXIgaXMgcHJlc2VudGVkIHNvdXJjZS1sZXZlbCBhbmQgdGhlIHBlcmYtY29yZSBjb25jdXJyZW5j eQogICAgKHRoZSBoYWxmIGJvdGggc2lkZXMgZnVubmVsIGludG8pIGlzIHdoYXQgdGhlIHJlcHJv ZHVjZXIgZHJpdmVzLgoKClRoYW5rcyBmb3IgdGFraW5nIGEgbG9vay4KCgpSZWdhcmRzLApIYW54 aWFuZyBYdQp4dWh4QGh1c3QuZWR1LmNuCgo= ------=_Part_283798_1387402402.1792677492628 Content-Type: text/plain; name=pmu_race.c Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pmu_race.c" Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLyoKICogcG11X3JhY2UuYyAtIHZl cmlmaWNhdGlvbiBkcml2ZXIgZm9yIHBlcmYvUE1VIHJhY2UtY29uZGl0aW9uIGF1ZGl0IGNhc2Vz CiAqIChSNC9SNi9SOC9SOSkgYWdhaW5zdCB0aGUgS0FTQU4gdmVyaWZpY2F0aW9uIGtlcm5lbC4K ICoKICogRXhwb3NlcyBhbiAiYWN0aW9uIiBtb2R1bGUgcGFyYW1ldGVyIHRoYXQgZHJpdmVzIHBl cmZfcG11X3JlZ2lzdGVyIC8KICogcGVyZl9wbXVfdW5yZWdpc3RlciAvIHBlcmZfcG11X21pZ3Jh dGVfY29udGV4dCAvIGtlcm5lbC1jb3VudGVyIGNyZWF0aW9uCiAqIG9uIGEgZmFrZSBQTVUgbmFt ZWQgInJhY2VwbXUiOgogKgogKiAgIGVjaG8gcmVnaXN0ZXIgICAgICAgID4gYWN0aW9uICAgOiBv bmUgcGVyZl9wbXVfcmVnaXN0ZXIKICogICBlY2hvIHVucmVnaXN0ZXIgICAgICA+IGFjdGlvbiAg IDogb25lIHBlcmZfcG11X3VucmVnaXN0ZXIKICogICBlY2hvIHJlZ2xvb3AgTiAgICAgICA+IGFj dGlvbiAgIDogTiBzZXF1ZW50aWFsIHJlZ2lzdGVyK3VucmVnaXN0ZXIgcm91bmRzCiAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuYXR1cmFsLXdpbmRvdyBoYW1tZXIsIFI0 LUEgLyBiYXNlbGluZSkKICogICBlY2hvIHJhY2UgTiAgICAgICAgICA+IGFjdGlvbiAgIDogMiBr dGhyZWFkczogQT11bnJlZ2lzdGVyIGxvb3AsCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEI9cmVnaXN0ZXIgbG9vcCBvbiB0aGUgc2FtZSBzdHJ1Y3QgcG11CiAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSODogYWN0aXZlYm94ZXMgVE9DVE9VIGNv cmUsIHVuY29yZS1zdHlsZQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 ZW1wbGF0ZSByZXNldCBiZWZvcmUgZWFjaCByZWdpc3RlcikKICogICBlY2hvIGNodXJuIE4gICAg ICAgICA+IGFjdGlvbiAgIDogMyBrdGhyZWFkczogcmVnL3VucmVnIGNodXJuICsgbWlncmF0ZSBs b29wCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgb3Blbi9jbG9zZSBj aHVybiAoUjkgcGVyZi1jb3JlIG92ZXJsYXApCiAqICAgZWNobyBvcGVuIE4gICAgICAgICAgPiBh Y3Rpb24gICA6IE4ga2VybmVsIGNvdW50ZXIgY3JlYXRlL3JlbGVhc2UgYXR0ZW1wdHMKICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvaXNvbmVkLXN0YXRlIGNvbnN1bXB0 aW9uKQogKiAgIGVjaG8gc3RhdHVzICAgICAgICAgID4gYWN0aW9uICAgOiBsb2cgcmVnaXN0ZXJl ZCBzdGF0ZSBhbmQgc3RhdHMKICoKICogVGhlIGtlcm5lbCBzb3VyY2UgaXMgTk9UIG1vZGlmaWVk OiBldmVyeXRoaW5nIGlzIGRyaXZlbiB0aHJvdWdoIGV4cG9ydGVkCiAqIHBlcmYgY29yZSBBUElz IChwZXJmX3BtdV9yZWdpc3Rlci9wZXJmX3BtdV91bnJlZ2lzdGVyIGFyZSBFWFBPUlRfU1lNQk9M X0dQTCwKICogcGVyZl9wbXVfbWlncmF0ZV9jb250ZXh0IGFuZCBwZXJmX2V2ZW50X2NyZWF0ZV9r ZXJuZWxfY291bnRlciBsaWtld2lzZSkuCiAqLwojZGVmaW5lIHByX2ZtdChmbXQpICJQTVVSQUNF OiAiIGZtdAoKI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgojaW5jbHVkZSA8bGludXgvaW5pdC5o PgojaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiNp bmNsdWRlIDxsaW51eC9zY2hlZC5oPgojaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KI2luY2x1ZGUg PGxpbnV4L3dvcmtxdWV1ZS5oPgojaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgojaW5jbHVk ZSA8bGludXgvZXJyLmg+CiNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KCnN0YXRpYyBzdHJ1Y3Qg cG11IHRlc3RfcG11OwpzdGF0aWMgaW50IG15X3JlZ2lzdGVyZWQ7CnN0YXRpYyBpbnQgdGVzdF90 eXBlID0gLTE7CgovKiBzdGF0aXN0aWNzICovCnN0YXRpYyB1bnNpZ25lZCBsb25nIHN0YXRfcmVn X29rLCBzdGF0X3JlZ19mYWlsOwpzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGF0X3VucmVnX29rLCBz dGF0X3VucmVnX2ZhaWw7CnN0YXRpYyB1bnNpZ25lZCBsb25nIHN0YXRfb3Blbl9vaywgc3RhdF9v cGVuX2ZhaWw7CnN0YXRpYyBpbnQgb3Blbl9lcnIwLCBvcGVuX2VycjE7CgpzdGF0aWMgaW50IHJh Y2VfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOwpzdGF0aWMgdm9pZCByYWNl X2V2ZW50X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKc3RhdGljIGludCByYWNlX2V2 ZW50X2FkZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncyk7CnN0YXRpYyB2b2lk IHJhY2VfZXZlbnRfZGVsKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKTsKc3Rh dGljIHZvaWQgcmFjZV9ldmVudF9zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBm bGFncyk7CnN0YXRpYyB2b2lkIHJhY2VfZXZlbnRfc3RvcChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZl bnQsIGludCBmbGFncyk7CnN0YXRpYyBpbnQgb3Blbl90aHJlYWQodm9pZCAqZGF0YSk7CgovKgog KiBUZW1wbGF0ZSByZXNldCBtaXJyb3JzIHVuY29yZV9wbXVfcmVnaXN0ZXIoKSdzCiAqICAgICBw bXUtPnBtdSA9IChzdHJ1Y3QgcG11KXsgLi4uIH07CiAqIHdoaWNoIGNsZWFycyAtPmRldiAvIC0+ Y3B1X3BtdV9jb250ZXh0IC8gLT50eXBlIGV0Yy4gYmVmb3JlIHJlLXJlZ2lzdGVyaW5nLgogKi8K c3RhdGljIHZvaWQgcG11X3Jlc2V0KHZvaWQpCnsKCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcG11IHRt cGwgPSB7CgkJLnRhc2tfY3R4X25yCT0gcGVyZl9pbnZhbGlkX2NvbnRleHQsCgkJLm1vZHVsZQkJ PSBUSElTX01PRFVMRSwKCQkuY2FwYWJpbGl0aWVzCT0gUEVSRl9QTVVfQ0FQX05PX0lOVEVSUlVQ VCB8CgkJCQkgIFBFUkZfUE1VX0NBUF9OT19FWENMVURFLAoJCS5ldmVudF9pbml0CT0gcmFjZV9l dmVudF9pbml0LAoJCS5hZGQJCT0gcmFjZV9ldmVudF9hZGQsCgkJLmRlbAkJPSByYWNlX2V2ZW50 X2RlbCwKCQkuc3RhcnQJCT0gcmFjZV9ldmVudF9zdGFydCwKCQkuc3RvcAkJPSByYWNlX2V2ZW50 X3N0b3AsCgkJLnJlYWQJCT0gcmFjZV9ldmVudF9yZWFkLAoJfTsKCgl0ZXN0X3BtdSA9IHRtcGw7 Cn0KCnN0YXRpYyBpbnQgcmFjZV9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkK ewoJaWYgKGV2ZW50LT5hdHRyLnR5cGUgIT0gdGVzdF90eXBlKQoJCXJldHVybiAtRU5PRU5UOwoJ cmV0dXJuIDA7Cn0Kc3RhdGljIHZvaWQgcmFjZV9ldmVudF9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50 ICpldmVudCkgeyB9CnN0YXRpYyBpbnQgcmFjZV9ldmVudF9hZGQoc3RydWN0IHBlcmZfZXZlbnQg KmV2ZW50LCBpbnQgZmxhZ3MpIHsgcmV0dXJuIDA7IH0Kc3RhdGljIHZvaWQgcmFjZV9ldmVudF9k ZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpIHsgfQpzdGF0aWMgdm9pZCBy YWNlX2V2ZW50X3N0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKSB7IH0K c3RhdGljIHZvaWQgcmFjZV9ldmVudF9zdG9wKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50 IGZsYWdzKSB7IH0KCnN0YXRpYyBpbnQgZG9fcmVnaXN0ZXIodm9pZCkKewoJaW50IHJldDsKCglw bXVfcmVzZXQoKTsKCXJldCA9IHBlcmZfcG11X3JlZ2lzdGVyKCZ0ZXN0X3BtdSwgInJhY2VwbXUi LCAtMSk7CglpZiAocmV0KSB7CgkJc3RhdF9yZWdfZmFpbCsrOwoJCW15X3JlZ2lzdGVyZWQgPSAw OwoJfSBlbHNlIHsKCQlzdGF0X3JlZ19vaysrOwoJCW15X3JlZ2lzdGVyZWQgPSAxOwoJCXRlc3Rf dHlwZSA9IHRlc3RfcG11LnR5cGU7Cgl9CglyZXR1cm4gcmV0Owp9CgpzdGF0aWMgaW50IGRvX3Vu cmVnaXN0ZXIodm9pZCkKewoJaW50IHJldDsKCglpZiAoIW15X3JlZ2lzdGVyZWQpIHsKCQlzdGF0 X3VucmVnX2ZhaWwrKzsKCQlyZXR1cm4gLUVJTlZBTDsKCX0KCXJldCA9IHBlcmZfcG11X3VucmVn aXN0ZXIoJnRlc3RfcG11KTsKCWlmIChyZXQpIHsKCQlzdGF0X3VucmVnX2ZhaWwrKzsKCX0gZWxz ZSB7CgkJc3RhdF91bnJlZ19vaysrOwoJCW15X3JlZ2lzdGVyZWQgPSAwOwoJfQoJcmV0dXJuIHJl dDsKfQoKc3RhdGljIGludCBkb19vcGVuX29uZShpbnQgY3B1KQp7CglzdHJ1Y3QgcGVyZl9ldmVu dF9hdHRyIGF0dHIgPSB7fTsKCXN0cnVjdCBwZXJmX2V2ZW50ICpldjsKCglpZiAoIW15X3JlZ2lz dGVyZWQgfHwgdGVzdF90eXBlIDwgMCkKCQlyZXR1cm4gLUVOT0RFVjsKCglhdHRyLnNpemUgPSBz aXplb2YoYXR0cik7CglhdHRyLnR5cGUgPSB0ZXN0X3R5cGU7CglhdHRyLmNvbmZpZyA9IDA7Cglh dHRyLmRpc2FibGVkID0gMTsKCglldiA9IHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVy KCZhdHRyLCBjcHUgJSBucl9jcHVfaWRzLCBOVUxMLAoJCQkJCSAgICAgIE5VTEwsIE5VTEwpOwoJ aWYgKElTX0VSUihldikpIHsKCQlzdGF0X29wZW5fZmFpbCsrOwoJCWlmIChvcGVuX2VycjAgPT0g MCkgb3Blbl9lcnIwID0gKGludClQVFJfRVJSKGV2KTsKCQllbHNlIGlmIChvcGVuX2VycjEgPT0g MCAmJiAoaW50KVBUUl9FUlIoZXYpICE9IG9wZW5fZXJyMCkgb3Blbl9lcnIxID0gKGludClQVFJf RVJSKGV2KTsKCQlyZXR1cm4gUFRSX0VSUihldik7Cgl9CglzdGF0X29wZW5fb2srKzsKCXBlcmZf ZXZlbnRfcmVsZWFzZV9rZXJuZWwoZXYpOwoJcmV0dXJuIDA7Cn0KCi8qCiAqIFVuZ2F0ZWQgb3Bl biBhdHRlbXB0OiBsaWtlIGEgcmVhbCBpbi1mbGlnaHQgcGVyZl9ldmVudF9vcGVuKCkgdGhhdAog KiBhbHJlYWR5IHBhc3NlZCBwZXJmX2luaXRfZXZlbnQoKSB1bmRlciBTUkNVIHdoaWxlIHRoZSBQ TVUgaXMgYmVpbmcKICogdG9ybiBkb3duLiBObyBteV9yZWdpc3RlcmVkIGdhdGU6IGZhaWx1cmVz IGFyZSBleHBlY3RlZCBhbmQgaWdub3JlZDsKICogdGhlIGdvYWwgaXMgdG8gcmVhY2ggZmluZF9n ZXRfcG11X2NvbnRleHQoKSB3aGlsZS9hZnRlcgogKiBwbXUtPmNwdV9wbXVfY29udGV4dCBpcyBm cmVlZC4KICovCnN0YXRpYyB2b2lkIGRvX29wZW5fcmF3KGludCBjcHUpCnsKCXN0cnVjdCBwZXJm X2V2ZW50X2F0dHIgYXR0ciA9IHt9OwoJc3RydWN0IHBlcmZfZXZlbnQgKmV2OwoKCWlmICh0ZXN0 X3R5cGUgPCAwKQoJCXJldHVybjsKCglhdHRyLnNpemUgPSBzaXplb2YoYXR0cik7CglhdHRyLnR5 cGUgPSB0ZXN0X3R5cGU7CglhdHRyLmNvbmZpZyA9IDA7CglhdHRyLmRpc2FibGVkID0gMTsKCgll diA9IHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyKCZhdHRyLCBjcHUgJSBucl9jcHVf aWRzLCBOVUxMLAoJCQkJCSAgICAgIE5VTEwsIE5VTEwpOwoJaWYgKCFJU19FUlIoZXYpKQoJCXBl cmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwoZXYpOwp9CgpzdHJ1Y3QgbG9vcF9jdHggewoJbG9uZyBu OwoJc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKfTsKCi8qIFI4OiB0aHJlYWQgQSAtIHVucmVnaXN0 ZXIgaGFtbWVyIChtaXJyb3JzIHVuY29yZV9wY2lfcG11X3VucmVnaXN0ZXIpICovCnN0YXRpYyBp bnQgcmFjZV91bnJlZ190aHJlYWQodm9pZCAqZGF0YSkKewoJc3RydWN0IGxvb3BfY3R4ICpjID0g ZGF0YTsKCWxvbmcgaTsKCglmb3IgKGkgPSAwOyBpIDwgYy0+biAmJiAha3RocmVhZF9zaG91bGRf c3RvcCgpOyBpKyspIHsKCQlpZiAobXlfcmVnaXN0ZXJlZCkKCQkJZG9fdW5yZWdpc3RlcigpOwoJ CXVzbGVlcF9yYW5nZSgwLCAzMDApOwoJfQoJY29tcGxldGUoJmMtPmRvbmUpOwoJcmV0dXJuIDA7 Cn0KCi8qIFI4OiB0aHJlYWQgQiAtIHJlZ2lzdGVyIGhhbW1lciB3aXRoIHRlbXBsYXRlIHJlc2V0 IChtaXJyb3JzIHVuY29yZV9wbXVfcmVnaXN0ZXIpICovCnN0YXRpYyBpbnQgcmFjZV9yZWdfdGhy ZWFkKHZvaWQgKmRhdGEpCnsKCXN0cnVjdCBsb29wX2N0eCAqYyA9IGRhdGE7Cglsb25nIGk7CgoJ Zm9yIChpID0gMDsgaSA8IGMtPm4gJiYgIWt0aHJlYWRfc2hvdWxkX3N0b3AoKTsgaSsrKSB7CgkJ ZG9fcmVnaXN0ZXIoKTsKCQl1c2xlZXBfcmFuZ2UoMCwgMzAwKTsKCX0KCWNvbXBsZXRlKCZjLT5k b25lKTsKCXJldHVybiAwOwp9CgovKiBSOSBjb3JlOiBtaWdyYXRlIGhhbW1lciAobWlycm9ycyB1 bmNvcmVfY2hhbmdlX3R5cGVfY3R4KSAqLwpzdGF0aWMgaW50IG1pZ3JhdGVfdGhyZWFkKHZvaWQg KmRhdGEpCnsKCXN0cnVjdCBsb29wX2N0eCAqYyA9IGRhdGE7Cglsb25nIGk7CgoJZm9yIChpID0g MDsgaSA8IGMtPm4gJiYgIWt0aHJlYWRfc2hvdWxkX3N0b3AoKTsgaSsrKSB7CgkJaWYgKG15X3Jl Z2lzdGVyZWQpCgkJCXBlcmZfcG11X21pZ3JhdGVfY29udGV4dCgmdGVzdF9wbXUsIDAsIDEgJSBu cl9jcHVfaWRzKTsKCQl1c2xlZXBfcmFuZ2UoMCwgMjAwKTsKCX0KCWNvbXBsZXRlKCZjLT5kb25l KTsKCXJldHVybiAwOwp9CgovKgogKiBSOS1zcGVjaWZpYzogbWlncmF0ZSBoYW1tZXIga3RocmVh ZCByYWNpbmcgYSBTRVFVRU5USUFMCiAqIHVucmVnaXN0ZXIvcmVnaXN0ZXIgbG9vcCAobm8gY29u Y3VycmVudCByZWdpc3Rlcnx8dW5yZWdpc3Rlciwgc28gdGhlCiAqIFI4IHRlYXIgYXQgcGVyZl9w bXVfdW5yZWdpc3RlcisweDFkMyBjYW5ub3QgZmlyZSBmaXJzdCkuIFRoZSBtaWdyYXRlCiAqIHRo cmVhZCBrZWVwcyBjYWxsaW5nIHBlcmZfcG11X21pZ3JhdGVfY29udGV4dCgpIHdoaWxlIHRoZSBs b29wIGZyZWVzCiAqIGFuZCByZS1jcmVhdGVzIHBtdS0+Y3B1X3BtdV9jb250ZXh0LgogKi8Kc3Rh dGljIGludCBtaWdfaGFtbWVyKHZvaWQgKnVudXNlZCkKewoJd2hpbGUgKCFrdGhyZWFkX3Nob3Vs ZF9zdG9wKCkpIHsKCQlwZXJmX3BtdV9taWdyYXRlX2NvbnRleHQoJnRlc3RfcG11LCAwLCAxICUg bnJfY3B1X2lkcyk7CgkJY29uZF9yZXNjaGVkKCk7Cgl9CglyZXR1cm4gMDsKfQoKc3RhdGljIHZv aWQgcnVuX21pZ3VucmVnKGxvbmcgbikKewoJc3RydWN0IHRhc2tfc3RydWN0ICptaWc7Cglsb25n IGk7CgoJaWYgKCFteV9yZWdpc3RlcmVkKQoJCWRvX3JlZ2lzdGVyKCk7CgoJbWlnID0ga3RocmVh ZF9ydW4obWlnX2hhbW1lciwgTlVMTCwgInBtdV9taWdfaGFtbWVyIik7CglpZiAoSVNfRVJSKG1p ZykpIHsKCQlwcl9lcnIoImt0aHJlYWRfcnVuIGZhaWxlZFxuIik7CgkJcmV0dXJuOwoJfQoKCWZv ciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKCQlpZiAobXlfcmVnaXN0ZXJlZCkKCQkJZG9fdW5yZWdp c3RlcigpOwoJCWRvX3JlZ2lzdGVyKCk7CgkJY29uZF9yZXNjaGVkKCk7Cgl9CgoJa3RocmVhZF9z dG9wKG1pZyk7CgkvKiBjb25zdW1lIGFueSBwb2lzb25lZCBlbmQgc3RhdGUgKi8KCWRvX29wZW5f b25lKDApOwoJZG9fb3Blbl9vbmUoMSAlIG5yX2NwdV9pZHMpOwoJcHJfaW5mbygiTUlHVU5SRUdf RE9ORSBuPSVsZCByZWdfb2s9JWx1IHJlZ19mYWlsPSVsdSB1bnJlZ19vaz0lbHUgdW5yZWdfZmFp bD0lbHUgb3Blbl9vaz0lbHUgb3Blbl9mYWlsPSVsdVxuIiwKCQluLCBzdGF0X3JlZ19vaywgc3Rh dF9yZWdfZmFpbCwgc3RhdF91bnJlZ19vaywgc3RhdF91bnJlZ19mYWlsLAoJCXN0YXRfb3Blbl9v aywgc3RhdF9vcGVuX2ZhaWwpOwp9CgovKgogKiBSOSB3aXRoIGxpdmUgZXZlbnRzOiBhIG1pZ3Jh dGUgaGFtbWVyIGFuZCBhbiBvcGVuL2Nsb3NlIGhhbW1lciBydW4KICogY29udGludW91c2x5IHdo aWxlIHRoZSBtYWluIHRocmVhZCBkb2VzIHNlcXVlbnRpYWwgdW5yZWdpc3Rlci9yZWdpc3Rlcgog KiByb3VuZHMuIE9wZW5lZCBldmVudHMgbGl2ZSBsb25nIGVub3VnaCBmb3IgcGVyZl9wbXVfbWln cmF0ZV9jb250ZXh0KCkKICogdG8gdGFrZSB0aGUgX19wZXJmX3BtdV9pbnN0YWxsX2V2ZW50KCkg cGF0aCwgd2hpY2ggZGVyZWZlcmVuY2VzCiAqIHBtdS0+Y3B1X3BtdV9jb250ZXh0IHRocm91Z2gg ZmluZF9nZXRfcG11X2NvbnRleHQoKS4KICovCnN0YXRpYyB2b2lkIHJ1bl9taWdvcGVuKGxvbmcg bikKewoJc3RydWN0IGxvb3BfY3R4IG8gPSB7IC5uID0gNCAqIG4gKyA2NCB9OwoJc3RydWN0IHRh c2tfc3RydWN0ICptaWcsICpvcDsKCWxvbmcgaTsKCglpbml0X2NvbXBsZXRpb24oJm8uZG9uZSk7 CglpZiAoIW15X3JlZ2lzdGVyZWQpCgkJZG9fcmVnaXN0ZXIoKTsKCgltaWcgPSBrdGhyZWFkX3J1 bihtaWdfaGFtbWVyLCBOVUxMLCAicG11X21pZ19oYW1tZXIiKTsKCW9wID0ga3RocmVhZF9ydW4o b3Blbl90aHJlYWQsICZvLCAicG11X29wZW5faGFtbWVyIik7CglpZiAoSVNfRVJSKG1pZykgfHwg SVNfRVJSKG9wKSkgewoJCXByX2Vycigia3RocmVhZF9ydW4gZmFpbGVkXG4iKTsKCQlyZXR1cm47 Cgl9CgoJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewoJCWlmIChteV9yZWdpc3RlcmVkKQoJCQlk b191bnJlZ2lzdGVyKCk7CgkJZG9fcmVnaXN0ZXIoKTsKCQkvKiBnaXZlIHRoZSBvcGVuL21pZ3Jh dGUgaGFtbWVycyBhIHN0YWJsZSByZWdpc3RlcmVkIHdpbmRvdyAqLwoJCXVzbGVlcF9yYW5nZSg0 MDAwLCA4MDAwKTsKCQljb25kX3Jlc2NoZWQoKTsKCX0KCglrdGhyZWFkX3N0b3AobWlnKTsKCWlm ICghSVNfRVJSKG9wKSkgewoJCS8qIGxldCB0aGUgb3BlbiBoYW1tZXIgZHJhaW4sIHRoZW4gc3Rv cCAqLwoJCXdhaXRfZm9yX2NvbXBsZXRpb24oJm8uZG9uZSk7Cgl9Cglwcl9pbmZvKCJNSUdPUEVO X0RPTkUgbj0lbGQgcmVnX29rPSVsdSByZWdfZmFpbD0lbHUgdW5yZWdfb2s9JWx1IHVucmVnX2Zh aWw9JWx1IG9wZW5fb2s9JWx1IG9wZW5fZmFpbD0lbHUgZXJyMD0lZCBlcnIxPSVkXG4iLAoJCW4s IHN0YXRfcmVnX29rLCBzdGF0X3JlZ19mYWlsLCBzdGF0X3VucmVnX29rLCBzdGF0X3VucmVnX2Zh aWwsCgkJc3RhdF9vcGVuX29rLCBzdGF0X29wZW5fZmFpbCwgb3Blbl9lcnIwLCBvcGVuX2VycjEp Owp9CgovKiBSOSBjb3JlOiBvcGVuL2Nsb3NlIGNodXJuIChleGVyY2lzZXMgZmluZF9nZXRfcG11 X2NvbnRleHQpICovCgpzdGF0aWMgaW50IG9wZW5fdGhyZWFkKHZvaWQgKmRhdGEpCnsKCXN0cnVj dCBsb29wX2N0eCAqYyA9IGRhdGE7Cglsb25nIGk7CgoJZm9yIChpID0gMDsgaSA8IGMtPm4gJiYg IWt0aHJlYWRfc2hvdWxkX3N0b3AoKTsgaSsrKSB7CgkJZG9fb3Blbl9yYXcoKGludCkoaSAlIG5y X2NwdV9pZHMpKTsKCQl1c2xlZXBfcmFuZ2UoMCwgMjAwKTsKCX0KCWNvbXBsZXRlKCZjLT5kb25l KTsKCXJldHVybiAwOwp9CgpzdGF0aWMgdm9pZCBydW5fcmFjZShsb25nIG4pCnsKCXN0cnVjdCBs b29wX2N0eCBhID0geyAubiA9IG4gfSwgYiA9IHsgLm4gPSBuIH07CglzdHJ1Y3QgdGFza19zdHJ1 Y3QgKnRhLCAqdGI7CgoJaW5pdF9jb21wbGV0aW9uKCZhLmRvbmUpOwoJaW5pdF9jb21wbGV0aW9u KCZiLmRvbmUpOwoKCS8qIHN0YXJ0IGZyb20gcmVnaXN0ZXJlZCBzdGF0ZSBsaWtlIHRoZSByZWFs IHNjZW5hcmlvICovCglpZiAoIW15X3JlZ2lzdGVyZWQpCgkJZG9fcmVnaXN0ZXIoKTsKCgl0YSA9 IGt0aHJlYWRfcnVuKHJhY2VfdW5yZWdfdGhyZWFkLCAmYSwgInBtdV9yYWNlX3VucmVnIik7Cgl0 YiA9IGt0aHJlYWRfcnVuKHJhY2VfcmVnX3RocmVhZCwgJmIsICJwbXVfcmFjZV9yZWciKTsKCWlm ICghSVNfRVJSKHRhKSAmJiAhSVNfRVJSKHRiKSkgewoJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmEu ZG9uZSk7CgkJd2FpdF9mb3JfY29tcGxldGlvbigmYi5kb25lKTsKCX0gZWxzZQoJCXByX2Vycigi a3RocmVhZF9ydW4gZmFpbGVkXG4iKTsKCWlmICghSVNfRVJSKHRhKSkKCQlrdGhyZWFkX3N0b3Ao dGEpOwoJaWYgKCFJU19FUlIodGIpKQoJCWt0aHJlYWRfc3RvcCh0Yik7CgoJcHJfaW5mbygiUkFD RV9ET05FIG49JWxkIHJlZ19vaz0lbHUgcmVnX2ZhaWw9JWx1IHVucmVnX29rPSVsdSB1bnJlZ19m YWlsPSVsdVxuIiwKCQluLCBzdGF0X3JlZ19vaywgc3RhdF9yZWdfZmFpbCwgc3RhdF91bnJlZ19v aywgc3RhdF91bnJlZ19mYWlsKTsKfQoKc3RhdGljIHZvaWQgcnVuX2NodXJuKGxvbmcgbikKewoJ c3RydWN0IGxvb3BfY3R4IGEgPSB7IC5uID0gbiB9LCBiID0geyAubiA9IG4gfSwgYyA9IHsgLm4g PSBuIH07CglzdHJ1Y3QgbG9vcF9jdHggZCA9IHsgLm4gPSBuIH07CglzdHJ1Y3QgdGFza19zdHJ1 Y3QgKnRhLCAqdGIsICp0YywgKnRkOwoKCWluaXRfY29tcGxldGlvbigmYS5kb25lKTsKCWluaXRf Y29tcGxldGlvbigmYi5kb25lKTsKCWluaXRfY29tcGxldGlvbigmYy5kb25lKTsKCWluaXRfY29t cGxldGlvbigmZC5kb25lKTsKCglpZiAoIW15X3JlZ2lzdGVyZWQpCgkJZG9fcmVnaXN0ZXIoKTsK Cgl0YSA9IGt0aHJlYWRfcnVuKHJhY2VfdW5yZWdfdGhyZWFkLCAmYSwgInBtdV9jaHVybl91bnJl ZyIpOwoJdGIgPSBrdGhyZWFkX3J1bihyYWNlX3JlZ190aHJlYWQsICZiLCAicG11X2NodXJuX3Jl ZyIpOwoJdGMgPSBrdGhyZWFkX3J1bihtaWdyYXRlX3RocmVhZCwgJmMsICJwbXVfY2h1cm5fbWln Iik7Cgl0ZCA9IGt0aHJlYWRfcnVuKG9wZW5fdGhyZWFkLCAmZCwgInBtdV9jaHVybl9vcGVuIik7 CglpZiAoIUlTX0VSUih0YSkgJiYgIUlTX0VSUih0YikgJiYgIUlTX0VSUih0YykgJiYgIUlTX0VS Uih0ZCkpIHsKCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZhLmRvbmUpOwoJCXdhaXRfZm9yX2NvbXBs ZXRpb24oJmIuZG9uZSk7CgkJd2FpdF9mb3JfY29tcGxldGlvbigmYy5kb25lKTsKCQkvKiBjb25z dW1lIGFueSBwb2lzb25lZCBlbmQgc3RhdGUgKi8KCQlkb19vcGVuX29uZSgwKTsKCQlkb19vcGVu X29uZSgxICUgbnJfY3B1X2lkcyk7Cgl9IGVsc2UKCQlwcl9lcnIoImt0aHJlYWRfcnVuIGZhaWxl ZFxuIik7CgoJcHJfaW5mbygiQ0hVUk5fRE9ORSBuPSVsZCByZWdfb2s9JWx1IHJlZ19mYWlsPSVs dSB1bnJlZ19vaz0lbHUgdW5yZWdfZmFpbD0lbHUgb3Blbl9vaz0lbHUgb3Blbl9mYWlsPSVsdVxu IiwKCQluLCBzdGF0X3JlZ19vaywgc3RhdF9yZWdfZmFpbCwgc3RhdF91bnJlZ19vaywgc3RhdF91 bnJlZ19mYWlsLAoJCXN0YXRfb3Blbl9vaywgc3RhdF9vcGVuX2ZhaWwpOwp9CgpzdGF0aWMgdm9p ZCBydW5fcmVnbG9vcChsb25nIG4pCnsKCWxvbmcgaTsKCglmb3IgKGkgPSAwOyBpIDwgbjsgaSsr KSB7CgkJZG9fcmVnaXN0ZXIoKTsKCQlkb191bnJlZ2lzdGVyKCk7CgkJdXNsZWVwX3JhbmdlKDAs IDUwKTsKCX0KCXByX2luZm8oIlJFR0xPT1BfRE9ORSBuPSVsZCByZWdfb2s9JWx1IHJlZ19mYWls PSVsdSB1bnJlZ19vaz0lbHUgdW5yZWdfZmFpbD0lbHVcbiIsCgkJbiwgc3RhdF9yZWdfb2ssIHN0 YXRfcmVnX2ZhaWwsIHN0YXRfdW5yZWdfb2ssIHN0YXRfdW5yZWdfZmFpbCk7Cn0KCnN0YXRpYyB2 b2lkIHJ1bl9vcGVuKGxvbmcgbikKewoJbG9uZyBpOwoKCWZvciAoaSA9IDA7IGkgPCBuOyBpKysp CgkJZG9fb3Blbl9yYXcoKGludCkoaSAlIG5yX2NwdV9pZHMpKTsKCXByX2luZm8oIk9QRU5fRE9O RSBvcGVuX29rPSVsdSBvcGVuX2ZhaWw9JWx1XG4iLAoJCXN0YXRfb3Blbl9vaywgc3RhdF9vcGVu X2ZhaWwpOwp9CgpzdGF0aWMgY2hhciBhY3Rpb25fY21kWzY0XTsKCnN0YXRpYyB2b2lkIGFjdGlv bl93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3KQp7CgljaGFyIGNtZFs2NF07Cglsb25nIG47 CgljaGFyICpwLCAqY3A7CgoJc3Ryc2NweShjbWQsIHN0cnN0cmlwKGFjdGlvbl9jbWQpLCBzaXpl b2YoY21kKSk7CgljcCA9IGNtZDsKCXAgPSBzdHJzZXAoJmNwLCAiICIpOwoJbiA9IDA7CglpZiAo Y3AgJiYgY3BbMF0pCgkJaWYgKGtzdHJ0b2woY3AsIDAsICZuKSkKCQkJbiA9IDA7CgoJaWYgKCFz dHJjbXAocCwgInJlZ2lzdGVyIikpCgkJcHJfaW5mbygicmVnaXN0ZXIgcmM9JWQgdHlwZT0lZFxu IiwgZG9fcmVnaXN0ZXIoKSwgdGVzdF90eXBlKTsKCWVsc2UgaWYgKCFzdHJjbXAocCwgInVucmVn aXN0ZXIiKSkKCQlwcl9pbmZvKCJ1bnJlZ2lzdGVyIHJjPSVkXG4iLCBkb191bnJlZ2lzdGVyKCkp OwoJZWxzZSBpZiAoIXN0cmNtcChwLCAicmVnbG9vcCIpKQoJCXJ1bl9yZWdsb29wKG4pOwoJZWxz ZSBpZiAoIXN0cmNtcChwLCAicmFjZSIpKQoJCXJ1bl9yYWNlKG4pOwoJZWxzZSBpZiAoIXN0cmNt cChwLCAiY2h1cm4iKSkKCQlydW5fY2h1cm4obik7CgllbHNlIGlmICghc3RyY21wKHAsICJtaWd1 bnJlZyIpKQoJCXJ1bl9taWd1bnJlZyhuKTsKCWVsc2UgaWYgKCFzdHJjbXAocCwgIm1pZ29wZW4i KSkKCQlydW5fbWlnb3BlbihuKTsKCWVsc2UgaWYgKCFzdHJjbXAocCwgIm9wZW4iKSkKCQlydW5f b3BlbihuKTsKCWVsc2UgaWYgKCFzdHJjbXAocCwgInN0YXR1cyIpKQoJCXByX2luZm8oInN0YXR1 cyByZWdpc3RlcmVkPSVkIHR5cGU9JWQgcmVnX29rPSVsdSByZWdfZmFpbD0lbHUgdW5yZWdfb2s9 JWx1IHVucmVnX2ZhaWw9JWx1IG9wZW5fb2s9JWx1IG9wZW5fZmFpbD0lbHVcbiIsCgkJCW15X3Jl Z2lzdGVyZWQsIHRlc3RfdHlwZSwgc3RhdF9yZWdfb2ssIHN0YXRfcmVnX2ZhaWwsCgkJCXN0YXRf dW5yZWdfb2ssIHN0YXRfdW5yZWdfZmFpbCwgc3RhdF9vcGVuX29rLAoJCQlzdGF0X29wZW5fZmFp bCk7CgllbHNlCgkJcHJfaW5mbygidW5rbm93biBhY3Rpb24gJyVzJ1xuIiwgcCk7CgoJcHJfaW5m bygiQUNUSU9OX0NPTVBMRVRFXG4iKTsKfQoKc3RhdGljIERFQ0xBUkVfV09SSyhhY3Rpb25fd29y aywgYWN0aW9uX3dvcmtmbik7CgpzdGF0aWMgY2hhciBhY3Rpb25fY21kWzY0XTsKCnN0YXRpYyBp bnQgYWN0aW9uX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0g KmtwKQp7CglpbnQgcmV0ID0gcGFyYW1fc2V0X2NvcHlzdHJpbmcodmFsLCBrcCk7CgoJaWYgKHJl dCA9PSAwKQoJCXNjaGVkdWxlX3dvcmsoJmFjdGlvbl93b3JrKTsKCXJldHVybiByZXQ7Cn0KCnN0 YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBhY3Rpb25fb3BzID0gewoJLnNldCA9 IGFjdGlvbl9zZXQsCgkuZ2V0ID0gcGFyYW1fZ2V0X3N0cmluZywKfTsKc3RhdGljIHN0cnVjdCBr cGFyYW1fc3RyaW5nIGFjdGlvbl9wYXJhbSA9IHsKCS5tYXhsZW4gPSBzaXplb2YoYWN0aW9uX2Nt ZCksCgkuc3RyaW5nID0gYWN0aW9uX2NtZCwKfTsKbW9kdWxlX3BhcmFtX2NiKGFjdGlvbiwgJmFj dGlvbl9vcHMsICZhY3Rpb25fcGFyYW0sIDAyMDApOwpNT0RVTEVfUEFSTV9ERVNDKGFjdGlvbiwg InJlZ2lzdGVyfHVucmVnaXN0ZXJ8cmVnbG9vcCBOfHJhY2UgTnxjaHVybiBOfG9wZW4gTnxzdGF0 dXMiKTsKCnN0YXRpYyBpbnQgX19pbml0IHBtdV9yYWNlX2luaXQodm9pZCkKewoJcG11X3Jlc2V0 KCk7Cglwcl9pbmZvKCJsb2FkZWQsIG5yX2NwdV9pZHM9JWRcbiIsIG5yX2NwdV9pZHMpOwoJcmV0 dXJuIDA7Cn0KCnN0YXRpYyB2b2lkIF9fZXhpdCBwbXVfcmFjZV9leGl0KHZvaWQpCnsKCWNhbmNl bF93b3JrX3N5bmMoJmFjdGlvbl93b3JrKTsKCWlmIChteV9yZWdpc3RlcmVkKQoJCWRvX3VucmVn aXN0ZXIoKTsKCXByX2luZm8oInVubG9hZGVkIHJlZ19vaz0lbHUgcmVnX2ZhaWw9JWx1IHVucmVn X29rPSVsdSB1bnJlZ19mYWlsPSVsdVxuIiwKCQlzdGF0X3JlZ19vaywgc3RhdF9yZWdfZmFpbCwg c3RhdF91bnJlZ19vaywgc3RhdF91bnJlZ19mYWlsKTsKfQoKbW9kdWxlX2luaXQocG11X3JhY2Vf aW5pdCk7Cm1vZHVsZV9leGl0KHBtdV9yYWNlX2V4aXQpOwpNT0RVTEVfTElDRU5TRSgiR1BMIik7 Ck1PRFVMRV9ERVNDUklQVElPTigicGVyZi9QTVUgcmFjZS1jb25kaXRpb24gdmVyaWZpY2F0aW9u IGRyaXZlciAoUjQvUjYvUjgvUjkpIik7Cg== ------=_Part_283798_1387402402.1792677492628--