Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752737AbdI3DWY (ORCPT ); Fri, 29 Sep 2017 23:22:24 -0400 Received: from mail-vk0-f68.google.com ([209.85.213.68]:38536 "EHLO mail-vk0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752664AbdI3DWW (ORCPT ); Fri, 29 Sep 2017 23:22:22 -0400 X-Google-Smtp-Source: AOwi7QDCQgT8SpSvY+xB6dyjaL8e//TSNa3ImaoDlvOnGDGw4H8Aa30Z3CeJAq1keNwAmmSlUPnB3dTR3JYCMpFAlFA= MIME-Version: 1.0 From: Luming Yu Date: Sat, 30 Sep 2017 11:22:21 +0800 Message-ID: Subject: [PATCH v1 1/9] early pt: Basic support for early intel processor trace To: LKML Content-Type: multipart/mixed; boundary="001a1143017248e35c055a5fa6e1" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 14482 Lines: 201 --001a1143017248e35c055a5fa6e1 Content-Type: text/plain; charset="UTF-8" with zero dependencies on other technologies in linux kernel, 1.Per cpu dump for basic block level code analysis 2.I can trace any code including myself right after it's enabled Signed-off-by: Luming Yu --- arch/x86/events/Kconfig | 6 + arch/x86/events/intel/Makefile | 1 + arch/x86/events/intel/early_pt.c | 337 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 344 insertions(+) create mode 100644 arch/x86/events/intel/early_pt.c --001a1143017248e35c055a5fa6e1 Content-Type: application/octet-stream; name="0001-Basic-support-for-early-intel-processor-trace-featur.patch" Content-Disposition: attachment; filename="0001-Basic-support-for-early-intel-processor-trace-featur.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j86r3c380 RnJvbSBjYzQwYmY5MjczZjY4ODE0YmU1OWEzYzJmOTA4ZDliM2UzNGY0ZjIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMdW1pbmcgWXUgPGx1bWluZy55dUBpbnRlbC5jb20+CkRhdGU6 IEZyaSwgMjkgU2VwIDIwMTcgMjE6NTA6MTEgKzA4MDAKU3ViamVjdDogW1BBVENIIHYxIDEvOV0g ZWFybHkgcHQ6IEJhc2ljIHN1cHBvcnQgZm9yIGVhcmx5IGludGVsIHByb2Nlc3NvciB0cmFjZSAK CndpdGggemVybyBkZXBlbmRlbmNpZXMgb24gb3RoZXIgdGVjaG5vbG9naWVzIGluIGxpbnV4IGtl cm5lbCwgCjEuUGVyIGNwdSBkdW1wIGZvciBiYXNpYyBibG9jayBsZXZlbCBjb2RlIGFuYWx5c2lz IAoyLkkgY2FuIHRyYWNlIGFueSBjb2RlIGluY2x1ZGluZyBteXNlbGYgcmlnaHQgYWZ0ZXIgaXQn cyBlbmFibGVkCgpTaWduZWQtb2ZmLWJ5OiBMdW1pbmcgWXUgPGx1bWluZy55dUBpbnRlbC5jb20+ Ci0tLQogYXJjaC94ODYvZXZlbnRzL0tjb25maWcgICAgICAgICAgfCAgIDYgKwogYXJjaC94ODYv ZXZlbnRzL2ludGVsL01ha2VmaWxlICAgfCAgIDEgKwogYXJjaC94ODYvZXZlbnRzL2ludGVsL2Vh cmx5X3B0LmMgfCAzMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAz IGZpbGVzIGNoYW5nZWQsIDM0NCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJj aC94ODYvZXZlbnRzL2ludGVsL2Vhcmx5X3B0LmMKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ldmVu dHMvS2NvbmZpZyBiL2FyY2gveDg2L2V2ZW50cy9LY29uZmlnCmluZGV4IDk4Mzk3ZGIuLjQyMDU5 MTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2V2ZW50cy9LY29uZmlnCisrKyBiL2FyY2gveDg2L2V2 ZW50cy9LY29uZmlnCkBAIC0zMiw1ICszMiwxMSBAQCBjb25maWcgUEVSRl9FVkVOVFNfQU1EX1BP V0VSCiAJICBDdXJyZW50bHksIGl0IGxldmVyYWdlcyBYODZfRkVBVFVSRV9BQ0NfUE9XRVIKIAkg IChDUFVJRCBGbjgwMDBfMDAwN19FRFhbMTJdKSBpbnRlcmZhY2UgdG8gY2FsY3VsYXRlIHRoZQog CSAgYXZlcmFnZSBwb3dlciBjb25zdW1wdGlvbiBvbiBGYW1pbHkgMTVoIHByb2Nlc3NvcnMuCitj b25maWcgRUFSTFlfUFQKKwl0cmlzdGF0ZSAiSW50ZWwgZWFybHkgUFQiCisJZGVwZW5kcyBvbiBD UFVfU1VQX0lOVEVMCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgRWFybHkgUFQgc3VwcG9y dC4KIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvZXZlbnRzL2ludGVsL01ha2VmaWxl IGIvYXJjaC94ODYvZXZlbnRzL2ludGVsL01ha2VmaWxlCmluZGV4IGU5ZDg1MjAuLmQwNGQ4ZWMg MTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4 Ni9ldmVudHMvaW50ZWwvTWFrZWZpbGUKQEAgLTEsNiArMSw3IEBACiBvYmotJChDT05GSUdfQ1BV X1NVUF9JTlRFTCkJCSs9IGNvcmUubyBidHMubwogb2JqLSQoQ09ORklHX0NQVV9TVVBfSU5URUwp CQkrPSBkcy5vIGtuYy5vCiBvYmotJChDT05GSUdfQ1BVX1NVUF9JTlRFTCkJCSs9IGxici5vIHA0 Lm8gcDYubyBwdC5vCitvYmotJChDT05GSUdfRUFSTFlfUFQpCQkJKz0gZWFybHlfcHQubwogb2Jq LSQoQ09ORklHX1BFUkZfRVZFTlRTX0lOVEVMX1JBUEwpCSs9IGludGVsLXJhcGwtcGVyZi5vCiBp bnRlbC1yYXBsLXBlcmYtb2JqcwkJCTo9IHJhcGwubwogb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRT X0lOVEVMX1VOQ09SRSkJKz0gaW50ZWwtdW5jb3JlLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2V2 ZW50cy9pbnRlbC9lYXJseV9wdC5jIGIvYXJjaC94ODYvZXZlbnRzL2ludGVsL2Vhcmx5X3B0LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1MTNlZAotLS0gL2Rldi9udWxs CisrKyBiL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9lYXJseV9wdC5jCkBAIC0wLDAgKzEsMzM3IEBA CisvKkkgY2FuIHRyYWNlIG15c2VsZiAhKi8KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1 ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9t aXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgv c21wLmg+CisjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5o PgorI2luY2x1ZGUgPGFzbS9tc3IuaD4KKworI2luY2x1ZGUgIi4uL3BlcmZfZXZlbnQuaCIKKyNp bmNsdWRlICJwdC5oIgorCisvKiBpb2N0bCBjb21tYW5kICovCisjZGVmaW5lIFBUX1NFVF9DUFUJ OTkwMQorI2RlZmluZSBQVF9HRVRfU0laRQk5OTAyCisjZGVmaW5lIFBUX0dFVF9PRkZTRVQJOTkw MworI2RlZmluZSBQVF9TVE9QCQk5OTA0CisjZGVmaW5lIFBUX1NUQVJUCTk5MDUKKworI2RlZmlu ZSBQVF9FUlJPUglCSVRfVUxMKDQpCisjZGVmaW5lIE1UQ19NQVNLCSgweGYgPDwgMTQpCisjZGVm aW5lIENZQ19NQVNLCSgweGYgPDwgMTkpCisjZGVmaW5lIFBTQl9NQVNLCSgweGYgPDwgMjQpCisK KyNkZWZpbmUgQUREUjBfU0hJRlQJMzIKKyNkZWZpbmUgQUREUjFfU0hJRlQJMzYKKyNkZWZpbmUg QUREUjBfTUFTSwkoMHgxVUxMIDw8IEFERFIwX1NISUZUKQorI2RlZmluZSBBRERSMV9NQVNLCSgw eDFVTEwgPDwgQUREUjFfU0hJRlQpCisKKyNkZWZpbmUgTVNSX0lBMzJfQ1IzX01BVENICTB4MDAw MDA1NzIKKworI2RlZmluZSBDWUNfRU4JCUJJVF9VTEwoMSkKKyNkZWZpbmUgTVRDX0VOCQlCSVRf VUxMKDkpCisKKyNkZWZpbmUgVE9QQV9TVE9QCUJJVF9VTEwoNCkKKyNkZWZpbmUgVE9QQV9JTlQJ QklUX1VMTCgyKQorI2RlZmluZSBUT1BBX0VORAlCSVRfVUxMKDApCisjZGVmaW5lIFRPUEFfU0la RV9TSElGVCA2CisKK3N0YXRpYyBpbnQJZWFybHlfcHRfYnVmZmVyX29yZGVyID0gOTsKK3N0YXRp YyBib29sCXNpbmdsZV9yYW5nZSA9IHRydWU7CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShib29s LCBlYXJseV9wdF9ydW5uaW5nKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1NjQsIHB0X29mZnNl dCk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodTY0LCBwdF9idWZmZXJfY3B1KTsKKworc3RhdGlj IGJvb2wJaGFzX2NyM19tYXRjaDsKK3N0YXRpYyB1bnNpZ25lZAlhZGRyX2NmZ19tYXg7CitzdGF0 aWMgaW50CXB0X251bV9idWZmZXJzOworc3RhdGljIHVuc2lnbmVkIHBzYl9mcmVxX21hc2sgPSAw Oworc3RhdGljIHVuc2lnbmVkIGN5Y190aHJlc2hfbWFzayA9IDA7CitzdGF0aWMgdW5zaWduZWQg bXRjX2ZyZXFfbWFzayA9IDA7CitzdGF0aWMgdW5zaWduZWQgYWRkcl9yYW5nZV9udW0gPSAwOwor CitzdGF0aWMgaW50IGVhcmx5X3B0X2J1ZmZlcl9pbml0KGludCBjcHUpCit7CisJdTY0CXB0X2J1 ZmZlcjsKKworCXB0X2J1ZmZlciA9IHBlcl9jcHUocHRfYnVmZmVyX2NwdSwgY3B1KTsKKworCWlm ICghcHRfYnVmZmVyKSB7CisJCXB0X2J1ZmZlciA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5F TCB8CisJCQlfX0dGUF9OT1dBUk4gfCBfX0dGUF9aRVJPLCBlYXJseV9wdF9idWZmZXJfb3JkZXIp OworCQlpZiAoIXB0X2J1ZmZlcikgeworCQkJcHJfZXJyKCJjcHUgJWQsIGNhbm5vdCBhbGxvY2F0 ZSAlbGQgS0IgYnVmZmVyXG4iLCBjcHUsCisJCQkJCShQQUdFX1NJWkUgPDwgZWFybHlfcHRfYnVm ZmVyX29yZGVyKSAvIDEwMjQpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJcGVyX2NwdShw dF9idWZmZXJfY3B1LCBjcHUpID0gcHRfYnVmZmVyOworCX0gZWxzZQorCQltZW1zZXQoKHZvaWQg KilwdF9idWZmZXIsIDAsIFBBR0VfU0laRSA8PCBlYXJseV9wdF9idWZmZXJfb3JkZXIpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGVhcmx5X3B0X2J1ZmZlcl9leGl0KHZvaWQgKmFy ZykKK3sKKwlsb25nCWNwdSA9IChsb25nKSBhcmc7CisKKwlpZiAocGVyX2NwdShwdF9idWZmZXJf Y3B1LCBjcHUpKSB7CisJCWZyZWVfcGFnZXMocGVyX2NwdShwdF9idWZmZXJfY3B1LCBjcHUpLCBl YXJseV9wdF9idWZmZXJfb3JkZXIpOworCQlwZXJfY3B1KHB0X2J1ZmZlcl9jcHUsIGNwdSkgPSAw OworCX0KKworCXJldHVybjsKK30KKworLyoKKyAqIGNwdWlkIEludGVsIFBUIGRldGVjdGlvbiBh bmQgQ2FwcyBlbnVtZXJhdGlvbi4KKyAqLworc3RhdGljIGludCBlYXJseV9wdF9jcHVpZF9jYXBz KHZvaWQpCit7CisJdW5zaWduZWQgYSwgYiwgYywgZDsKKwl1bnNpZ25lZCBhMSwgYjEsIGMxLCBk MTsKKworCS8qCisJICogY3B1aWQgZnVuYzogMHgxNCBmb3IgUFQKKwkgKi8KKwljcHVpZCgwLCAm YSwgJmIsICZjLCAmZCk7CisJaWYgKGEgPCAweDE0KSB7CisJCXByX2luZm8oIk5vIGNwdWlkIGZ1 bmMgMHgxNCAoZm9yIFBUKSBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJ Y3B1aWRfY291bnQoMHgwNywgMCwgJmEsICZiLCAmYywgJmQpOworCWlmICgoYiAmIEJJVCgyNSkp ID09IDApIHsKKwkJcHJfaW5mbygiTm8gUFQgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9E RVY7CisJfQorCWNwdWlkX2NvdW50KDB4MTQsIDAsICZhLCAmYiwgJmMsICZkKTsKKwlpZiAoKGMg JiBCSVQoMCkpID09IDApIHsKKwkJcHJfaW5mbygiTm8gVG9QQSBhdmFpbGFibGVcbiIpOworCQly ZXR1cm4gLUVOT0RFVjsKKwl9CisJaGFzX2NyM19tYXRjaCA9ICEhKGIgJiBCSVQoMCkpOworCWlm IChiICYgQklUKDIpKQorCQlhZGRyX2NmZ19tYXggPSAyOworCWlmICghKGMgJiBCSVQoMSkpKQor CQlwdF9udW1fYnVmZmVycyA9IDE7CisJcHRfbnVtX2J1ZmZlcnMgPSBtaW5fdCh1bnNpZ25lZCwg cHRfbnVtX2J1ZmZlcnMsCisJCQkJKFBBR0VfU0laRSAvIDgpIC0gMSk7CisJYTEgPSBiMSA9IGMx ID0gZDEgPSAwOworCWlmIChhID49IDEpCisJCWNwdWlkX2NvdW50KDB4MTQsIDEsICZhMSwgJmIx LCAmYzEsICZkMSk7CisJaWYgKGIgJiBCSVQoMSkpIHsKKwkJbXRjX2ZyZXFfbWFzayA9IChhMSA+ PiAxNikgJiAweGZmZmY7CisJCWN5Y190aHJlc2hfbWFzayA9IGIxICYgMHhmZmZmOworCQlwc2Jf ZnJlcV9tYXNrID0gKGIxID4+IDE2KSAmIDB4ZmZmZjsKKwkJYWRkcl9yYW5nZV9udW0gPSBhMSAm IDB4MzsKKwl9CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IHN0YXJ0X2Vhcmx5X3B0KHZvaWQg KmFyZykKK3sKKwl1NjQgdmFsLCBvbGR2YWw7CisJaW50IGNwdTsKKworCisJaWYgKHJkbXNybF9z YWZlKE1TUl9JQTMyX1JUSVRfQ1RMLCAmdmFsKSA8IDApIHsKKwkJcHJfaW5mbygic3RhcnRfZWFy bHlfcHQ6IGZhaWxlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJb2xkdmFsID0gdmFsOworCisJ Y3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwllYXJseV9wdF9idWZmZXJfaW5pdChjcHUp OworCisJLyoKKwkgKiBROiBIb3cgc2hvdWxkIHdlIGhhbmRsZSBQVCBpcyBhbHJlYWR5IGVuYWJs ZWQ/CisJICogQTogZGlzYWJsZSBhbmQgcmUtZW5hYmxlLgorCSAqLworCWlmICh2YWwgJiBSVElU X0NUTF9UUkFDRUVOKQorCQl3cm1zcmxfc2FmZShNU1JfSUEzMl9SVElUX0NUTCwgdmFsICYgflJU SVRfQ1RMX1RSQUNFRU4pOworCisJaWYgKHdybXNybF9zYWZlKE1TUl9JQTMyX1JUSVRfT1VUUFVU X0JBU0UsIF9fcGEoX190aGlzX2NwdV9yZWFkKHB0X2J1ZmZlcl9jcHUpKSkgPCAwKSB7CisJCXBy X2luZm8oIiB3cm1zcmwgb3V0cHV0IGJhc2UgZmFpbGVkIFxuIik7CisJCXJldHVybiAwOworCX0K KworCWlmIChzaW5nbGVfcmFuZ2UpCisJCXdybXNybF9zYWZlKE1TUl9JQTMyX1JUSVRfT1VUUFVU X01BU0ssCisJCQkoKDFVTEwgPDwgKFBBR0VfU0hJRlQgKyBlYXJseV9wdF9idWZmZXJfb3JkZXIp KSAtIDEpKTsKKwllbHNlCisJCXdybXNybF9zYWZlKE1TUl9JQTMyX1JUSVRfT1VUUFVUX01BU0ss IDBVTEwpOworCXdybXNybF9zYWZlKE1TUl9JQTMyX1JUSVRfU1RBVFVTLCAwVUxMKTsKKworCXZh bCAmPSB+KFJUSVRfQ1RMX1RTQ19FTiB8IFJUSVRfQ1RMX09TIHwgUlRJVF9DVExfVVNSIHwgUlRJ VF9DVExfQ1IzRU4gfAorCQlSVElUX0NUTF9ESVNSRVRDIHwgUlRJVF9DVExfVE9QQSB8IFJUSVRf Q1RMX0NZQ0xFQUNDIHwKKwkJUlRJVF9DVExfVFJBQ0VFTiB8IFJUSVRfQ1RMX0JSQU5DSF9FTiB8 IFJUSVRfQ1RMX0NZQ0xFQUNDCisJCXwgUlRJVF9DVExfTVRDX0VOIHwgTVRDX01BU0sgfCBDWUNf TUFTSyB8IFBTQl9NQVNLIHwgQUREUjBfTUFTSyB8CisJCUFERFIxX01BU0spOworCisJLyogZW5h bGUgdHJhY2UgKi8KKwl2YWwgfD0gUlRJVF9DVExfVFJBQ0VFTjsKKwl2YWwgfD0gUlRJVF9DVExf QlJBTkNIX0VOOworCXZhbCB8PSBSVElUX0NUTF9UU0NfRU47CisJdmFsIHw9IFJUSVRfQ1RMX09T OworCXZhbCB8PSBSVElUX0NUTF9VU1I7CisKKwlpZiAod3Jtc3JsX3NhZmUoTVNSX0lBMzJfUlRJ VF9DVEwsIHZhbCkgPCAwKSB7CisJCXByX2luZm8oImVhcmx5X3B0IHN0YXJ0IGZhaWxlZCBvbiBj cHVbJWRdXG4iLCBjcHUpOworCQlfX3RoaXNfY3B1X3dyaXRlKGVhcmx5X3B0X3J1bm5pbmcsIGZh bHNlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXByX2luZm8oImVhcmx5X3B0IHN0YXJ0ZWQgb24g Y3B1WyVkXVxuIiwgY3B1KTsKKwlfX3RoaXNfY3B1X3dyaXRlKGVhcmx5X3B0X3J1bm5pbmcsIHRy dWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdGFydF9wdF9ub19yZXR1cm4odm9p ZCAqYXJnKQoreworCXN0YXJ0X2Vhcmx5X3B0KGFyZyk7CisJcmV0dXJuOworfQorCitzdGF0aWMg c3RydWN0IG1pc2NkZXZpY2UgZWFybHlfcHRfbWlzY2RldjsKKworc3RhdGljIGludCBlYXJseV9w dF9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IGVhcmx5X3B0X2NwdWlkX2NhcHMo KTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcl9pbmZvKCJlYXJseV9wdF9pbml0OiBubyBmZWF0dXJl IGF2YWlsYWJsZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCW9uX2VhY2hfY3B1KHN0YXJ0X3B0 X25vX3JldHVybiwgTlVMTCwgMCk7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IGxhdGVfcHRf aW5pdCh2b2lkKQoreworCWludCBlcnI7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3JfZWFjaF9v bmxpbmVfY3B1KGkpIHsKKwkJaWYgKCFwZXJfY3B1KGVhcmx5X3B0X3J1bm5pbmcsIGkpKSB7CisJ CQlwcl9lcnIoImxhdGVfcHRfaW5pdDogZmFpbGVkLCBlYXJseSBwdCBub3QgcnVubmluZ1xuIik7 CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KKworCWVyciA9IG1pc2NfcmVnaXN0ZXIoJmVh cmx5X3B0X21pc2NkZXYpOworCWlmIChlcnIgPCAwKSB7CisJCXByX2VycigibWlzY19yZWdpc3Rl ciBlYXJseV9wdF9taXNjZGV2IGZhaWxlZFxuIik7CisJCXJldHVybiBlcnI7CisJfQorCXJldHVy biAwOworfQorc3RhdGljIGludCBzdG9wX2Vhcmx5X3B0KHZvaWQgKmFyZykKK3sKKwl1NjQgb2Zm c2V0OworCXU2NCBjdGwsIHN0YXR1czsKKwlpbnQgY3B1OworCisJY3B1ID0gcmF3X3NtcF9wcm9j ZXNzb3JfaWQoKTsKKworCWlmICghX190aGlzX2NwdV9yZWFkKGVhcmx5X3B0X3J1bm5pbmcpKQor CQlyZXR1cm4gLTE7CisJcmRtc3JsX3NhZmUoTVNSX0lBMzJfUlRJVF9DVEwsICZjdGwpOworCXJk bXNybF9zYWZlKE1TUl9JQTMyX1JUSVRfU1RBVFVTLCAmc3RhdHVzKTsKKwlpZiAoIShjdGwgJiBS VElUX0NUTF9UUkFDRUVOKSkKKwkJcHJfZGVidWcoImNwdSAlZCwgUFQgbm90IGVuYWJsZWQgb24g c3RvcCwgY3RsICVsbHgsIHN0YXR1cyAlbGx4XG4iLAorCQkJcmF3X3NtcF9wcm9jZXNzb3JfaWQo KSwgY3RsLCBzdGF0dXMpOworCWlmIChzdGF0dXMgJiBQVF9FUlJPUikgeworCQlwcl9pbmZvKCJj cHUgJWQsIGVycm9yOiBzdGF0dXMgJWxseFxuIiwgY3B1LCBzdGF0dXMpOworCQl3cm1zcmxfc2Fm ZShNU1JfSUEzMl9SVElUX1NUQVRVUywgMCk7CisJfQorCXdybXNybF9zYWZlKE1TUl9JQTMyX1JU SVRfQ1RMLCAwTEwpOworCXJkbXNybF9zYWZlKE1TUl9JQTMyX1JUSVRfT1VUUFVUX01BU0ssICZv ZmZzZXQpOworCisJX190aGlzX2NwdV93cml0ZShwdF9vZmZzZXQsIChvZmZzZXQgPj4gMzIpKTsK KwlfX3RoaXNfY3B1X3dyaXRlKGVhcmx5X3B0X3J1bm5pbmcsIGZhbHNlKTsKKwlwcl9pbmZvKCJl YXJseV9wdCBzdG9wcGVkIG9uIGNwdVslZF1cbiIsIGNwdSk7CisJcmV0dXJuIDA7Cit9CitzdGF0 aWMgdm9pZCBzdG9wX3B0X25vX3JldHVybih2b2lkICphcmcpCit7CisJc3RvcF9lYXJseV9wdChh cmcpOworCXJldHVybjsKK30KK3N0YXRpYyB2b2lkIGVhcmx5X3B0X2V4aXQodm9pZCkKK3sKKwlv bl9lYWNoX2NwdShzdG9wX3B0X25vX3JldHVybiwgTlVMTCwgMCk7CisJb25fZWFjaF9jcHUoZWFy bHlfcHRfYnVmZmVyX2V4aXQsIE5VTEwsIDApOworfQorY29yZV9pbml0Y2FsbChlYXJseV9wdF9p bml0KTsKK2xhdGVfaW5pdGNhbGwobGF0ZV9wdF9pbml0KTsKKworc3RhdGljIGludCBlYXJseV9w dF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sK Kwl1bnNpZ25lZCBsb25nIGxlbiA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKKwlpbnQg Y3B1ID0gKGxvbmcpIGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGJ1ZmZlcl9z aXplID0gUEFHRV9TSVpFIDw8IGVhcmx5X3B0X2J1ZmZlcl9vcmRlcjsKKworCXZtYS0+dm1fZmxh Z3MgJj0gflZNX01BWVdSSVRFOworCisJaWYgKGxlbiAlIFBBR0VfU0laRSB8fCB2bWEtPnZtX3Bn b2ZmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUp CisJCXJldHVybiAtRVBFUk07CisKKwlyZXR1cm4gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52 bV9zdGFydCwKKwkJCV9fcGEocGVyX2NwdShwdF9idWZmZXJfY3B1LCBjcHUpKSA+PiBQQUdFX1NI SUZULAorCQkJYnVmZmVyX3NpemUsCisJCQl2bWEtPnZtX3BhZ2VfcHJvdCk7Cit9CisKK3N0YXRp YyBsb25nIGVhcmx5X3B0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21k LAorCQkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdW5zaWduZWQgbG9uZyBjcHU7CisKKwlzd2l0 Y2ggKGNtZCkgeworCWNhc2UgUFRfU0VUX0NQVTogeworCQljcHUgPSBhcmc7CisJCWlmIChjcHUg Pj0gTlJfQ1BVUyB8fCAhY3B1X29ubGluZShjcHUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWZp bGUtPnByaXZhdGVfZGF0YSA9ICh2b2lkICopY3B1OworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBQ VF9HRVRfU0laRToKKwkJcmV0dXJuIHB1dF91c2VyKChQQUdFX1NJWkUgPDwgZWFybHlfcHRfYnVm ZmVyX29yZGVyKSwKKwkJCQkoaW50ICopYXJnKTsKKwljYXNlIFBUX0dFVF9PRkZTRVQ6IHsKKwkJ dW5zaWduZWQgb2Zmc2V0OworCQljcHUgPSAodW5zaWduZWQgbG9uZykgZmlsZS0+cHJpdmF0ZV9k YXRhOworCQlzbXBfY2FsbF9vbl9jcHUoY3B1LCBzdG9wX2Vhcmx5X3B0LCBOVUxMLCB0cnVlKTsK KwkJb2Zmc2V0ID0gcGVyX2NwdShwdF9vZmZzZXQsIChsb25nKWZpbGUtPnByaXZhdGVfZGF0YSk7 CisJCXJldHVybiBwdXRfdXNlcihvZmZzZXQsIChpbnQgKilhcmcpOworCX0KKwljYXNlIFBUX1NU T1A6CisJCWVhcmx5X3B0X2V4aXQoKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBQVF9TVEFSVDoKKwkJ Y3B1ID0gKHVuc2lnbmVkIGxvbmcpIGZpbGUtPnByaXZhdGVfZGF0YTsKKwkJc21wX2NhbGxfb25f Y3B1KGNwdSwgc3RhcnRfZWFybHlfcHQsIE5VTEwsIHRydWUpOworCQlyZXR1cm4gMDsKKwlkZWZh dWx0OgorCQlyZXR1cm4gLUVOT1RUWTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmls ZV9vcGVyYXRpb25zIGVhcmx5X3B0X2ZvcHMgPSB7CisJLm1tYXAgPSBlYXJseV9wdF9tbWFwLAor CS51bmxvY2tlZF9pb2N0bCA9IGVhcmx5X3B0X2lvY3RsLAorCS5sbHNlZWsgPSBub29wX2xsc2Vl aywKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBlYXJseV9wdF9taXNjZGV2ID0gewor CU1JU0NfRFlOQU1JQ19NSU5PUiwKKwkic2ltcGxlLXB0IiwKKwkmZWFybHlfcHRfZm9wcworfTsK KwotLSAKMi43LjUKCg== --001a1143017248e35c055a5fa6e1--