From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: [PATCH 08/18] xen: duplicate xen_disk.c as basis of dataplane/xen-qdisk.c Date: Wed, 21 Nov 2018 15:12:01 +0000 Message-ID: <20181121151211.15997-9-paul.durrant@citrix.com> References: <20181121151211.15997-1-paul.durrant@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gPUAz-0007JG-Hu for xen-devel@lists.xenproject.org; Wed, 21 Nov 2018 15:12:25 +0000 In-Reply-To: <20181121151211.15997-1-paul.durrant@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: qemu-block@nongnu.org, qemu-devel@nongnu.org, xen-devel@lists.xenproject.org Cc: Kevin Wolf , Stefano Stabellini , Max Reitz , Paul Durrant , Stefan Hajnoczi , Anthony Perard List-Id: xen-devel@lists.xenproject.org VGhlIG5ldyB4ZW4tcWRpc2sgWGVuRGV2aWNlIGltcGxlbWVudGF0aW9uIHJlcXVpcmVzIHRoZSBz YW1lIGNvcmUgZGF0YXBsYW5lCmFzIHRoZSBsZWdhY3kgeGVuX2Rpc2sgaW1wbGVtZW50YXRpb24g aXQgd2lsbCBldmVudHVhbGx5IHJlcGxhY2UuIFRoaXMKcGF0Y2ggdGhlcmVmb3JlIGNvcGllcyB0 aGUgbGVnYWN5IHhlbl9kaXNrLmMgc291cmNlIG1vZHVsZSBpbnRvIGEgbmV3CmRhdGFwbGFuZS94 ZW4tcWRpc2suYyBzb3VyY2UgbW9kdWxlIGFzIHRoZSBiYXNpcyBmb3IgdGhlIG5ldyBkYXRhcGxh bmUgYW5kCmFkanVzdHMgdGhlIE1BSU5UQUlORVJTIGZpbGUgYWNjb3JkaW5nbHkuCgpOT1RFOiBU aGUgZHVwbGljYXRlZCBjb2RlIGlzIG5vdCB5ZXQgYnVpbHQuIEl0IGlzIHNpbXBseSBwdXQgaW50 byBwbGFjZSBieQogICAgICB0aGlzIHBhdGNoIChqdXN0IGZpeGluZyBzdHlsZSB2aW9sYXRpb25z KSBzdWNoIHRoYXQgdGhlCiAgICAgIG1vZGlmaWNhdGlvbnMgdGhhdCB3aWxsIG5lZWQgdG8gYmUg bWFkZSB0byB0aGUgY29kZSBhcmUgbm90CiAgICAgIGNvbmZsYXRlZCB3aXRoIGNvZGUgbW92ZW1l bnQsIHRodXMgbWFraW5nIHJldmlldyBoYXJkZXIuCgpTaWduZWQtb2ZmLWJ5OiBQYXVsIER1cnJh bnQgPHBhdWwuZHVycmFudEBjaXRyaXguY29tPgotLS0KQ2M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8 c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4KQ2M6IEFudGhvbnkgUGVyYXJkIDxhbnRob255LnBlcmFy ZEBjaXRyaXguY29tPgpDYzogU3RlZmFuIEhham5vY3ppIDxzdGVmYW5oYUByZWRoYXQuY29tPgpD YzogS2V2aW4gV29sZiA8a3dvbGZAcmVkaGF0LmNvbT4KQ2M6IE1heCBSZWl0eiA8bXJlaXR6QHJl ZGhhdC5jb20+Ci0tLQogTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBo dy9ibG9jay9kYXRhcGxhbmUveGVuLXFkaXNrLmMgfCAxMDE5ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMTAyMCBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA2NDQgaHcvYmxvY2svZGF0YXBsYW5lL3hlbi1xZGlzay5jCgpkaWZm IC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAxMGYwNDhhNTAzLi40YmZi ZmM5OTg1IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMzkw LDYgKzM5MCw3IEBAIEY6IGh3L2NoYXIveGVuX2NvbnNvbGUuYwogRjogaHcvZGlzcGxheS94ZW5m Yi5jCiBGOiBody9uZXQveGVuX25pYy5jCiBGOiBody9ibG9jay94ZW4qCitGOiBody9ibG9jay9k YXRhcGxhbmUveGVuKgogRjogaHcveGVuLwogRjogaHcveGVucHYvCiBGOiBody9pMzg2L3hlbi8K ZGlmZiAtLWdpdCBhL2h3L2Jsb2NrL2RhdGFwbGFuZS94ZW4tcWRpc2suYyBiL2h3L2Jsb2NrL2Rh dGFwbGFuZS94ZW4tcWRpc2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li45ZmFlNTA1MzRlCi0tLSAvZGV2L251bGwKKysrIGIvaHcvYmxvY2svZGF0YXBsYW5lL3hlbi1x ZGlzay5jCkBAIC0wLDAgKzEsMTAxOSBAQAorLyoKKyAqICB4ZW4gcGFyYXZpcnQgYmxvY2sgZGV2 aWNlIGJhY2tlbmQKKyAqCisgKiAgKGMpIEdlcmQgSG9mZm1hbm4gPGtyYXhlbEByZWRoYXQuY29t PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgdW5kZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAq ICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGgg dGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u CisgKgorICogIENvbnRyaWJ1dGlvbnMgYWZ0ZXIgMjAxMi0wMS0xMyBhcmUgbGljZW5zZWQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZQorICogIEdOVSBHUEwsIHZlcnNpb24gMiBvciAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlICJxZW11L29zZGVwLmgi CisjaW5jbHVkZSAicWVtdS91bml0cy5oIgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1 ZGUgPHN5cy91aW8uaD4KKworI2luY2x1ZGUgImh3L2h3LmgiCisjaW5jbHVkZSAiaHcveGVuL3hl bl9iYWNrZW5kLmgiCisjaW5jbHVkZSAieGVuX2Jsa2lmLmgiCisjaW5jbHVkZSAic3lzZW11L2Js b2NrZGV2LmgiCisjaW5jbHVkZSAic3lzZW11L2lvdGhyZWFkLmgiCisjaW5jbHVkZSAic3lzZW11 L2Jsb2NrLWJhY2tlbmQuaCIKKyNpbmNsdWRlICJxYXBpL2Vycm9yLmgiCisjaW5jbHVkZSAicWFw aS9xbXAvcWRpY3QuaCIKKyNpbmNsdWRlICJxYXBpL3FtcC9xc3RyaW5nLmgiCisjaW5jbHVkZSAi dHJhY2UuaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEJMT0NLX1NJWkUgIDUxMgorI2RlZmlu ZSBJT0NCX0NPVU5UICAoQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUICsgMikKKworc3Ry dWN0IGlvcmVxIHsKKyAgICBibGtpZl9yZXF1ZXN0X3QgICAgIHJlcTsKKyAgICBpbnQxNl90ICAg ICAgICAgICAgIHN0YXR1czsKKworICAgIC8qIHBhcnNlZCByZXF1ZXN0ICovCisgICAgb2ZmX3Qg ICAgICAgICAgICAgICBzdGFydDsKKyAgICBRRU1VSU9WZWN0b3IgICAgICAgIHY7CisgICAgdm9p ZCAgICAgICAgICAgICAgICAqYnVmOworICAgIHNpemVfdCAgICAgICAgICAgICAgc2l6ZTsKKyAg ICBpbnQgICAgICAgICAgICAgICAgIHByZXN5bmM7CisKKyAgICAvKiBhaW8gc3RhdHVzICovCisg ICAgaW50ICAgICAgICAgICAgICAgICBhaW9faW5mbGlnaHQ7CisgICAgaW50ICAgICAgICAgICAg ICAgICBhaW9fZXJyb3JzOworCisgICAgc3RydWN0IFhlbkJsa0RldiAgICAqYmxrZGV2OworICAg IFFMSVNUX0VOVFJZKGlvcmVxKSAgIGxpc3Q7CisgICAgQmxvY2tBY2N0Q29va2llICAgICBhY2N0 OworfTsKKworI2RlZmluZSBNQVhfUklOR19QQUdFX09SREVSIDQKKworc3RydWN0IFhlbkJsa0Rl diB7CisgICAgc3RydWN0IFhlbkxlZ2FjeURldmljZSAgICB4ZW5kZXY7ICAvKiBtdXN0IGJlIGZp cnN0ICovCisgICAgY2hhciAgICAgICAgICAgICAgICAqcGFyYW1zOworICAgIGNoYXIgICAgICAg ICAgICAgICAgKm1vZGU7CisgICAgY2hhciAgICAgICAgICAgICAgICAqdHlwZTsKKyAgICBjaGFy ICAgICAgICAgICAgICAgICpkZXY7CisgICAgY2hhciAgICAgICAgICAgICAgICAqZGV2dHlwZTsK KyAgICBib29sICAgICAgICAgICAgICAgIGRpcmVjdGlvc2FmZTsKKyAgICBjb25zdCBjaGFyICAg ICAgICAgICpmaWxlcHJvdG87CisgICAgY29uc3QgY2hhciAgICAgICAgICAqZmlsZW5hbWU7Cisg ICAgdW5zaWduZWQgaW50ICAgICAgICByaW5nX3JlZlsxIDw8IE1BWF9SSU5HX1BBR0VfT1JERVJd OworICAgIHVuc2lnbmVkIGludCAgICAgICAgbnJfcmluZ19yZWY7CisgICAgdm9pZCAgICAgICAg ICAgICAgICAqc3Jpbmc7CisgICAgaW50NjRfdCAgICAgICAgICAgICBmaWxlX2JsazsKKyAgICBp bnQ2NF90ICAgICAgICAgICAgIGZpbGVfc2l6ZTsKKyAgICBpbnQgICAgICAgICAgICAgICAgIHBy b3RvY29sOworICAgIGJsa2lmX2JhY2tfcmluZ3NfdCAgcmluZ3M7CisgICAgaW50ICAgICAgICAg ICAgICAgICBtb3JlX3dvcms7CisKKyAgICAvKiByZXF1ZXN0IGxpc3RzICovCisgICAgUUxJU1Rf SEVBRChpbmZsaWdodF9oZWFkLCBpb3JlcSkgaW5mbGlnaHQ7CisgICAgUUxJU1RfSEVBRChmaW5p c2hlZF9oZWFkLCBpb3JlcSkgZmluaXNoZWQ7CisgICAgUUxJU1RfSEVBRChmcmVlbGlzdF9oZWFk LCBpb3JlcSkgZnJlZWxpc3Q7CisgICAgaW50ICAgICAgICAgICAgICAgICByZXF1ZXN0c190b3Rh bDsKKyAgICBpbnQgICAgICAgICAgICAgICAgIHJlcXVlc3RzX2luZmxpZ2h0OworICAgIGludCAg ICAgICAgICAgICAgICAgcmVxdWVzdHNfZmluaXNoZWQ7CisgICAgdW5zaWduZWQgaW50ICAgICAg ICBtYXhfcmVxdWVzdHM7CisKKyAgICBnYm9vbGVhbiAgICAgICAgICAgIGZlYXR1cmVfZGlzY2Fy ZDsKKworICAgIC8qIHFlbXUgYmxvY2sgZHJpdmVyICovCisgICAgRHJpdmVJbmZvICAgICAgICAg ICAqZGluZm87CisgICAgQmxvY2tCYWNrZW5kICAgICAgICAqYmxrOworICAgIFFFTVVCSCAgICAg ICAgICAgICAgKmJoOworCisgICAgSU9UaHJlYWQgICAgICAgICAgICAqaW90aHJlYWQ7CisgICAg QWlvQ29udGV4dCAgICAgICAgICAqY3R4OworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9p ZCBpb3JlcV9yZXNldChzdHJ1Y3QgaW9yZXEgKmlvcmVxKQoreworICAgIG1lbXNldCgmaW9yZXEt PnJlcSwgMCwgc2l6ZW9mKGlvcmVxLT5yZXEpKTsKKyAgICBpb3JlcS0+c3RhdHVzID0gMDsKKyAg ICBpb3JlcS0+c3RhcnQgPSAwOworICAgIGlvcmVxLT5idWYgPSBOVUxMOworICAgIGlvcmVxLT5z aXplID0gMDsKKyAgICBpb3JlcS0+cHJlc3luYyA9IDA7CisKKyAgICBpb3JlcS0+YWlvX2luZmxp Z2h0ID0gMDsKKyAgICBpb3JlcS0+YWlvX2Vycm9ycyA9IDA7CisKKyAgICBpb3JlcS0+YmxrZGV2 ID0gTlVMTDsKKyAgICBtZW1zZXQoJmlvcmVxLT5saXN0LCAwLCBzaXplb2YoaW9yZXEtPmxpc3Qp KTsKKyAgICBtZW1zZXQoJmlvcmVxLT5hY2N0LCAwLCBzaXplb2YoaW9yZXEtPmFjY3QpKTsKKwor ICAgIHFlbXVfaW92ZWNfcmVzZXQoJmlvcmVxLT52KTsKK30KKworc3RhdGljIHN0cnVjdCBpb3Jl cSAqaW9yZXFfc3RhcnQoc3RydWN0IFhlbkJsa0RldiAqYmxrZGV2KQoreworICAgIHN0cnVjdCBp b3JlcSAqaW9yZXEgPSBOVUxMOworCisgICAgaWYgKFFMSVNUX0VNUFRZKCZibGtkZXYtPmZyZWVs aXN0KSkgeworICAgICAgICBpZiAoYmxrZGV2LT5yZXF1ZXN0c190b3RhbCA+PSBibGtkZXYtPm1h eF9yZXF1ZXN0cykgeworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAg LyogYWxsb2NhdGUgbmV3IHN0cnVjdCAqLworICAgICAgICBpb3JlcSA9IGdfbWFsbG9jMChzaXpl b2YoKmlvcmVxKSk7CisgICAgICAgIGlvcmVxLT5ibGtkZXYgPSBibGtkZXY7CisgICAgICAgIGJs a2Rldi0+cmVxdWVzdHNfdG90YWwrKzsKKyAgICAgICAgcWVtdV9pb3ZlY19pbml0KCZpb3JlcS0+ diwgMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogZ2V0IG9uZSBmcm9tIGZyZWVsaXN0ICov CisgICAgICAgIGlvcmVxID0gUUxJU1RfRklSU1QoJmJsa2Rldi0+ZnJlZWxpc3QpOworICAgICAg ICBRTElTVF9SRU1PVkUoaW9yZXEsIGxpc3QpOworICAgIH0KKyAgICBRTElTVF9JTlNFUlRfSEVB RCgmYmxrZGV2LT5pbmZsaWdodCwgaW9yZXEsIGxpc3QpOworICAgIGJsa2Rldi0+cmVxdWVzdHNf aW5mbGlnaHQrKzsKKworb3V0OgorICAgIHJldHVybiBpb3JlcTsKK30KKworc3RhdGljIHZvaWQg aW9yZXFfZmluaXNoKHN0cnVjdCBpb3JlcSAqaW9yZXEpCit7CisgICAgc3RydWN0IFhlbkJsa0Rl diAqYmxrZGV2ID0gaW9yZXEtPmJsa2RldjsKKworICAgIFFMSVNUX1JFTU9WRShpb3JlcSwgbGlz dCk7CisgICAgUUxJU1RfSU5TRVJUX0hFQUQoJmJsa2Rldi0+ZmluaXNoZWQsIGlvcmVxLCBsaXN0 KTsKKyAgICBibGtkZXYtPnJlcXVlc3RzX2luZmxpZ2h0LS07CisgICAgYmxrZGV2LT5yZXF1ZXN0 c19maW5pc2hlZCsrOworfQorCitzdGF0aWMgdm9pZCBpb3JlcV9yZWxlYXNlKHN0cnVjdCBpb3Jl cSAqaW9yZXEsIGJvb2wgZmluaXNoKQoreworICAgIHN0cnVjdCBYZW5CbGtEZXYgKmJsa2RldiA9 IGlvcmVxLT5ibGtkZXY7CisKKyAgICBRTElTVF9SRU1PVkUoaW9yZXEsIGxpc3QpOworICAgIGlv cmVxX3Jlc2V0KGlvcmVxKTsKKyAgICBpb3JlcS0+YmxrZGV2ID0gYmxrZGV2OworICAgIFFMSVNU X0lOU0VSVF9IRUFEKCZibGtkZXYtPmZyZWVsaXN0LCBpb3JlcSwgbGlzdCk7CisgICAgaWYgKGZp bmlzaCkgeworICAgICAgICBibGtkZXYtPnJlcXVlc3RzX2ZpbmlzaGVkLS07CisgICAgfSBlbHNl IHsKKyAgICAgICAgYmxrZGV2LT5yZXF1ZXN0c19pbmZsaWdodC0tOworICAgIH0KK30KKworLyoK KyAqIHRyYW5zbGF0ZSByZXF1ZXN0IGludG8gaW92ZWMgKyBzdGFydCBvZmZzZXQKKyAqIGRvIHNh bml0eSBjaGVja3MgYWxvbmcgdGhlIHdheQorICovCitzdGF0aWMgaW50IGlvcmVxX3BhcnNlKHN0 cnVjdCBpb3JlcSAqaW9yZXEpCit7CisgICAgc3RydWN0IFhlbkJsa0RldiAqYmxrZGV2ID0gaW9y ZXEtPmJsa2RldjsKKyAgICBzdHJ1Y3QgWGVuTGVnYWN5RGV2aWNlICp4ZW5kZXYgPSAmYmxrZGV2 LT54ZW5kZXY7CisgICAgc2l6ZV90IGxlbjsKKyAgICBpbnQgaTsKKworICAgIHhlbl9wdl9wcmlu dGYoCisgICAgICAgIHhlbmRldiwgMywKKyAgICAgICAgIm9wICVkLCBuciAlZCwgaGFuZGxlICVk LCBpZCAlIiBQUklkNjQgIiwgc2VjdG9yICUiIFBSSWQ2NCAiXG4iLAorICAgICAgICBpb3JlcS0+ cmVxLm9wZXJhdGlvbiwgaW9yZXEtPnJlcS5ucl9zZWdtZW50cywKKyAgICAgICAgaW9yZXEtPnJl cS5oYW5kbGUsIGlvcmVxLT5yZXEuaWQsIGlvcmVxLT5yZXEuc2VjdG9yX251bWJlcik7CisgICAg c3dpdGNoIChpb3JlcS0+cmVxLm9wZXJhdGlvbikgeworICAgIGNhc2UgQkxLSUZfT1BfUkVBRDoK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCTEtJRl9PUF9GTFVTSF9ESVNLQ0FDSEU6CisgICAg ICAgIGlvcmVxLT5wcmVzeW5jID0gMTsKKyAgICAgICAgaWYgKCFpb3JlcS0+cmVxLm5yX3NlZ21l bnRzKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICAvKiBmYWxs IHRocm91Z2ggKi8KKyAgICBjYXNlIEJMS0lGX09QX1dSSVRFOgorICAgICAgICBicmVhazsKKyAg ICBjYXNlIEJMS0lGX09QX0RJU0NBUkQ6CisgICAgICAgIHJldHVybiAwOworICAgIGRlZmF1bHQ6 CisgICAgICAgIHhlbl9wdl9wcmludGYoeGVuZGV2LCAwLCAiZXJyb3I6IHVua25vd24gb3BlcmF0 aW9uICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgaW9yZXEtPnJlcS5vcGVyYXRpb24p OworICAgICAgICBnb3RvIGVycjsKKyAgICB9OworCisgICAgaWYgKGlvcmVxLT5yZXEub3BlcmF0 aW9uICE9IEJMS0lGX09QX1JFQUQgJiYgYmxrZGV2LT5tb2RlWzBdICE9ICd3JykgeworICAgICAg ICB4ZW5fcHZfcHJpbnRmKHhlbmRldiwgMCwgImVycm9yOiB3cml0ZSByZXEgZm9yIHJvIGRldmlj ZVxuIik7CisgICAgICAgIGdvdG8gZXJyOworICAgIH0KKworICAgIGlvcmVxLT5zdGFydCA9IGlv cmVxLT5yZXEuc2VjdG9yX251bWJlciAqIGJsa2Rldi0+ZmlsZV9ibGs7CisgICAgZm9yIChpID0g MDsgaSA8IGlvcmVxLT5yZXEubnJfc2VnbWVudHM7IGkrKykgeworICAgICAgICBpZiAoaSA9PSBC TEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QpIHsKKyAgICAgICAgICAgIHhlbl9wdl9wcmlu dGYoeGVuZGV2LCAwLCAiZXJyb3I6IG5yX3NlZ21lbnRzIHRvbyBiaWdcbiIpOworICAgICAgICAg ICAgZ290byBlcnI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlvcmVxLT5yZXEuc2VnW2ldLmZp cnN0X3NlY3QgPiBpb3JlcS0+cmVxLnNlZ1tpXS5sYXN0X3NlY3QpIHsKKyAgICAgICAgICAgIHhl bl9wdl9wcmludGYoeGVuZGV2LCAwLCAiZXJyb3I6IGZpcnN0ID4gbGFzdCBzZWN0b3JcbiIpOwor ICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlvcmVxLT5yZXEu c2VnW2ldLmxhc3Rfc2VjdCAqIEJMT0NLX1NJWkUgPj0gWENfUEFHRV9TSVpFKSB7CisgICAgICAg ICAgICB4ZW5fcHZfcHJpbnRmKHhlbmRldiwgMCwgImVycm9yOiBwYWdlIGNyb3NzaW5nXG4iKTsK KyAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICB9CisKKyAgICAgICAgbGVuID0gKGlvcmVx LT5yZXEuc2VnW2ldLmxhc3Rfc2VjdCAtCisgICAgICAgICAgICAgICBpb3JlcS0+cmVxLnNlZ1tp XS5maXJzdF9zZWN0ICsgMSkgKiBibGtkZXYtPmZpbGVfYmxrOworICAgICAgICBpb3JlcS0+c2l6 ZSArPSBsZW47CisgICAgfQorICAgIGlmIChpb3JlcS0+c3RhcnQgKyBpb3JlcS0+c2l6ZSA+IGJs a2Rldi0+ZmlsZV9zaXplKSB7CisgICAgICAgIHhlbl9wdl9wcmludGYoeGVuZGV2LCAwLCAiZXJy b3I6IGFjY2VzcyBiZXlvbmQgZW5kIG9mIGZpbGVcbiIpOworICAgICAgICBnb3RvIGVycjsKKyAg ICB9CisgICAgcmV0dXJuIDA7CisKK2VycjoKKyAgICBpb3JlcS0+c3RhdHVzID0gQkxLSUZfUlNQ X0VSUk9SOworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludCBpb3JlcV9ncmFudF9jb3B5 KHN0cnVjdCBpb3JlcSAqaW9yZXEpCit7CisgICAgc3RydWN0IFhlbkJsa0RldiAqYmxrZGV2ID0g aW9yZXEtPmJsa2RldjsKKyAgICBzdHJ1Y3QgWGVuTGVnYWN5RGV2aWNlICp4ZW5kZXYgPSAmYmxr ZGV2LT54ZW5kZXY7CisgICAgWGVuR3JhbnRDb3B5U2VnbWVudCBzZWdzW0JMS0lGX01BWF9TRUdN RU5UU19QRVJfUkVRVUVTVF07CisgICAgaW50IGksIGNvdW50LCByYzsKKyAgICBpbnQ2NF90IGZp bGVfYmxrID0gYmxrZGV2LT5maWxlX2JsazsKKyAgICBib29sIHRvX2RvbWFpbiA9IChpb3JlcS0+ cmVxLm9wZXJhdGlvbiA9PSBCTEtJRl9PUF9SRUFEKTsKKyAgICB2b2lkICp2aXJ0ID0gaW9yZXEt PmJ1ZjsKKworICAgIGlmIChpb3JlcS0+cmVxLm5yX3NlZ21lbnRzID09IDApIHsKKyAgICAgICAg cmV0dXJuIDA7CisgICAgfQorCisgICAgY291bnQgPSBpb3JlcS0+cmVxLm5yX3NlZ21lbnRzOwor CisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKHRvX2RvbWFp bikgeworICAgICAgICAgICAgc2Vnc1tpXS5kZXN0LmZvcmVpZ24ucmVmID0gaW9yZXEtPnJlcS5z ZWdbaV0uZ3JlZjsKKyAgICAgICAgICAgIHNlZ3NbaV0uZGVzdC5mb3JlaWduLm9mZnNldCA9IGlv cmVxLT5yZXEuc2VnW2ldLmZpcnN0X3NlY3QgKgorICAgICAgICAgICAgICAgIGZpbGVfYmxrOwor ICAgICAgICAgICAgc2Vnc1tpXS5zb3VyY2UudmlydCA9IHZpcnQ7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBzZWdzW2ldLnNvdXJjZS5mb3JlaWduLnJlZiA9IGlvcmVxLT5yZXEuc2Vn W2ldLmdyZWY7CisgICAgICAgICAgICBzZWdzW2ldLnNvdXJjZS5mb3JlaWduLm9mZnNldCA9IGlv cmVxLT5yZXEuc2VnW2ldLmZpcnN0X3NlY3QgKgorICAgICAgICAgICAgICAgIGZpbGVfYmxrOwor ICAgICAgICAgICAgc2Vnc1tpXS5kZXN0LnZpcnQgPSB2aXJ0OworICAgICAgICB9CisgICAgICAg IHNlZ3NbaV0ubGVuID0gKGlvcmVxLT5yZXEuc2VnW2ldLmxhc3Rfc2VjdAorICAgICAgICAgICAg ICAgICAgICAgICAtIGlvcmVxLT5yZXEuc2VnW2ldLmZpcnN0X3NlY3QgKyAxKSAqIGZpbGVfYmxr OworICAgICAgICB2aXJ0ICs9IHNlZ3NbaV0ubGVuOworICAgIH0KKworICAgIHJjID0geGVuX2Jl X2NvcHlfZ3JhbnRfcmVmcyh4ZW5kZXYsIHRvX2RvbWFpbiwgc2VncywgY291bnQpOworCisgICAg aWYgKHJjKSB7CisgICAgICAgIHhlbl9wdl9wcmludGYoeGVuZGV2LCAwLAorICAgICAgICAgICAg ICAgICAgICAgICJmYWlsZWQgdG8gY29weSBkYXRhICVkXG4iLCByYyk7CisgICAgICAgIGlvcmVx LT5haW9fZXJyb3JzKys7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4g cmM7Cit9CisKK3N0YXRpYyBpbnQgaW9yZXFfcnVuaW9fcWVtdV9haW8oc3RydWN0IGlvcmVxICpp b3JlcSk7CisKK3N0YXRpYyB2b2lkIHFlbXVfYWlvX2NvbXBsZXRlKHZvaWQgKm9wYXF1ZSwgaW50 IHJldCkKK3sKKyAgICBzdHJ1Y3QgaW9yZXEgKmlvcmVxID0gb3BhcXVlOworICAgIHN0cnVjdCBY ZW5CbGtEZXYgKmJsa2RldiA9IGlvcmVxLT5ibGtkZXY7CisgICAgc3RydWN0IFhlbkxlZ2FjeURl dmljZSAqeGVuZGV2ID0gJmJsa2Rldi0+eGVuZGV2OworCisgICAgYWlvX2NvbnRleHRfYWNxdWly ZShibGtkZXYtPmN0eCk7CisKKyAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgeGVuX3B2X3By aW50Zih4ZW5kZXYsIDAsICIlcyBJL08gZXJyb3JcbiIsCisgICAgICAgICAgICAgICAgICAgICAg aW9yZXEtPnJlcS5vcGVyYXRpb24gPT0gQkxLSUZfT1BfUkVBRCA/ICJyZWFkIiA6ICJ3cml0ZSIp OworICAgICAgICBpb3JlcS0+YWlvX2Vycm9ycysrOworICAgIH0KKworICAgIGlvcmVxLT5haW9f aW5mbGlnaHQtLTsKKyAgICBpZiAoaW9yZXEtPnByZXN5bmMpIHsKKyAgICAgICAgaW9yZXEtPnBy ZXN5bmMgPSAwOworICAgICAgICBpb3JlcV9ydW5pb19xZW11X2Fpbyhpb3JlcSk7CisgICAgICAg IGdvdG8gZG9uZTsKKyAgICB9CisgICAgaWYgKGlvcmVxLT5haW9faW5mbGlnaHQgPiAwKSB7Cisg ICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGlvcmVxLT5yZXEub3BlcmF0 aW9uKSB7CisgICAgY2FzZSBCTEtJRl9PUF9SRUFEOgorICAgICAgICAvKiBpbiBjYXNlIG9mIGZh aWx1cmUgaW9yZXEtPmFpb19lcnJvcnMgaXMgaW5jcmVhc2VkICovCisgICAgICAgIGlmIChyZXQg PT0gMCkgeworICAgICAgICAgICAgaW9yZXFfZ3JhbnRfY29weShpb3JlcSk7CisgICAgICAgIH0K KyAgICAgICAgcWVtdV92ZnJlZShpb3JlcS0+YnVmKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSBCTEtJRl9PUF9XUklURToKKyAgICBjYXNlIEJMS0lGX09QX0ZMVVNIX0RJU0tDQUNIRToKKyAg ICAgICAgaWYgKCFpb3JlcS0+cmVxLm5yX3NlZ21lbnRzKSB7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorICAgICAgICBxZW11X3ZmcmVlKGlvcmVxLT5idWYpOworICAgICAgICBicmVh azsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpb3JlcS0+c3Rh dHVzID0gaW9yZXEtPmFpb19lcnJvcnMgPyBCTEtJRl9SU1BfRVJST1IgOiBCTEtJRl9SU1BfT0tB WTsKKyAgICBpb3JlcV9maW5pc2goaW9yZXEpOworCisgICAgc3dpdGNoIChpb3JlcS0+cmVxLm9w ZXJhdGlvbikgeworICAgIGNhc2UgQkxLSUZfT1BfV1JJVEU6CisgICAgY2FzZSBCTEtJRl9PUF9G TFVTSF9ESVNLQ0FDSEU6CisgICAgICAgIGlmICghaW9yZXEtPnJlcS5ucl9zZWdtZW50cykgewor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICBjYXNlIEJMS0lGX09QX1JFQUQ6Cisg ICAgICAgIGlmIChpb3JlcS0+c3RhdHVzID09IEJMS0lGX1JTUF9PS0FZKSB7CisgICAgICAgICAg ICBibG9ja19hY2N0X2RvbmUoYmxrX2dldF9zdGF0cyhibGtkZXYtPmJsayksICZpb3JlcS0+YWNj dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBibG9ja19hY2N0X2ZhaWxlZChibGtf Z2V0X3N0YXRzKGJsa2Rldi0+YmxrKSwgJmlvcmVxLT5hY2N0KTsKKyAgICAgICAgfQorICAgICAg ICBicmVhazsKKyAgICBjYXNlIEJMS0lGX09QX0RJU0NBUkQ6CisgICAgZGVmYXVsdDoKKyAgICAg ICAgYnJlYWs7CisgICAgfQorICAgIHFlbXVfYmhfc2NoZWR1bGUoYmxrZGV2LT5iaCk7CisKK2Rv bmU6CisgICAgYWlvX2NvbnRleHRfcmVsZWFzZShibGtkZXYtPmN0eCk7Cit9CisKK3N0YXRpYyBi b29sIGJsa19zcGxpdF9kaXNjYXJkKHN0cnVjdCBpb3JlcSAqaW9yZXEsIGJsa2lmX3NlY3Rvcl90 IHNlY3Rvcl9udW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBu cl9zZWN0b3JzKQoreworICAgIHN0cnVjdCBYZW5CbGtEZXYgKmJsa2RldiA9IGlvcmVxLT5ibGtk ZXY7CisgICAgaW50NjRfdCBieXRlX29mZnNldDsKKyAgICBpbnQgYnl0ZV9jaHVuazsKKyAgICB1 aW50NjRfdCBieXRlX3JlbWFpbmluZywgbGltaXQ7CisgICAgdWludDY0X3Qgc2VjX3N0YXJ0ID0g c2VjdG9yX251bWJlcjsKKyAgICB1aW50NjRfdCBzZWNfY291bnQgPSBucl9zZWN0b3JzOworCisg ICAgLyogV3JhcCBhcm91bmQsIG9yIG92ZXJmbG93aW5nIGJ5dGUgbGltaXQ/ICovCisgICAgaWYg KHNlY19zdGFydCArIHNlY19jb3VudCA8IHNlY19jb3VudCB8fAorICAgICAgICBzZWNfc3RhcnQg KyBzZWNfY291bnQgPiBJTlQ2NF9NQVggPj4gQkRSVl9TRUNUT1JfQklUUykgeworICAgICAgICBy ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbGltaXQgPSBCRFJWX1JFUVVFU1RfTUFYX1NFQ1RP UlMgPDwgQkRSVl9TRUNUT1JfQklUUzsKKyAgICBieXRlX29mZnNldCA9IHNlY19zdGFydCA8PCBC RFJWX1NFQ1RPUl9CSVRTOworICAgIGJ5dGVfcmVtYWluaW5nID0gc2VjX2NvdW50IDw8IEJEUlZf U0VDVE9SX0JJVFM7CisKKyAgICBkbyB7CisgICAgICAgIGJ5dGVfY2h1bmsgPSBieXRlX3JlbWFp bmluZyA+IGxpbWl0ID8gbGltaXQgOiBieXRlX3JlbWFpbmluZzsKKyAgICAgICAgaW9yZXEtPmFp b19pbmZsaWdodCsrOworICAgICAgICBibGtfYWlvX3BkaXNjYXJkKGJsa2Rldi0+YmxrLCBieXRl X29mZnNldCwgYnl0ZV9jaHVuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICBxZW11X2Fpb19j b21wbGV0ZSwgaW9yZXEpOworICAgICAgICBieXRlX3JlbWFpbmluZyAtPSBieXRlX2NodW5rOwor ICAgICAgICBieXRlX29mZnNldCArPSBieXRlX2NodW5rOworICAgIH0gd2hpbGUgKGJ5dGVfcmVt YWluaW5nID4gMCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBpb3JlcV9y dW5pb19xZW11X2FpbyhzdHJ1Y3QgaW9yZXEgKmlvcmVxKQoreworICAgIHN0cnVjdCBYZW5CbGtE ZXYgKmJsa2RldiA9IGlvcmVxLT5ibGtkZXY7CisKKyAgICBpb3JlcS0+YnVmID0gcWVtdV9tZW1h bGlnbihYQ19QQUdFX1NJWkUsIGlvcmVxLT5zaXplKTsKKyAgICBpZiAoaW9yZXEtPnJlcS5ucl9z ZWdtZW50cyAmJgorICAgICAgICAoaW9yZXEtPnJlcS5vcGVyYXRpb24gPT0gQkxLSUZfT1BfV1JJ VEUgfHwKKyAgICAgICAgIGlvcmVxLT5yZXEub3BlcmF0aW9uID09IEJMS0lGX09QX0ZMVVNIX0RJ U0tDQUNIRSkgJiYKKyAgICAgICAgaW9yZXFfZ3JhbnRfY29weShpb3JlcSkpIHsKKyAgICAgICAg cWVtdV92ZnJlZShpb3JlcS0+YnVmKTsKKyAgICAgICAgZ290byBlcnI7CisgICAgfQorCisgICAg aW9yZXEtPmFpb19pbmZsaWdodCsrOworICAgIGlmIChpb3JlcS0+cHJlc3luYykgeworICAgICAg ICBibGtfYWlvX2ZsdXNoKGlvcmVxLT5ibGtkZXYtPmJsaywgcWVtdV9haW9fY29tcGxldGUsIGlv cmVxKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc3dpdGNoIChpb3JlcS0+cmVx Lm9wZXJhdGlvbikgeworICAgIGNhc2UgQkxLSUZfT1BfUkVBRDoKKyAgICAgICAgcWVtdV9pb3Zl Y19hZGQoJmlvcmVxLT52LCBpb3JlcS0+YnVmLCBpb3JlcS0+c2l6ZSk7CisgICAgICAgIGJsb2Nr X2FjY3Rfc3RhcnQoYmxrX2dldF9zdGF0cyhibGtkZXYtPmJsayksICZpb3JlcS0+YWNjdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICBpb3JlcS0+di5zaXplLCBCTE9DS19BQ0NUX1JFQUQpOwor ICAgICAgICBpb3JlcS0+YWlvX2luZmxpZ2h0Kys7CisgICAgICAgIGJsa19haW9fcHJlYWR2KGJs a2Rldi0+YmxrLCBpb3JlcS0+c3RhcnQsICZpb3JlcS0+diwgMCwKKyAgICAgICAgICAgICAgICAg ICAgICAgcWVtdV9haW9fY29tcGxldGUsIGlvcmVxKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSBCTEtJRl9PUF9XUklURToKKyAgICBjYXNlIEJMS0lGX09QX0ZMVVNIX0RJU0tDQUNIRToKKyAg ICAgICAgaWYgKCFpb3JlcS0+cmVxLm5yX3NlZ21lbnRzKSB7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorCisgICAgICAgIHFlbXVfaW92ZWNfYWRkKCZpb3JlcS0+diwgaW9yZXEtPmJ1 ZiwgaW9yZXEtPnNpemUpOworICAgICAgICBibG9ja19hY2N0X3N0YXJ0KGJsa19nZXRfc3RhdHMo YmxrZGV2LT5ibGspLCAmaW9yZXEtPmFjY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW9y ZXEtPnYuc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpb3JlcS0+cmVxLm9wZXJhdGlv biA9PSBCTEtJRl9PUF9XUklURSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgQkxPQ0tfQUND VF9XUklURSA6IEJMT0NLX0FDQ1RfRkxVU0gpOworICAgICAgICBpb3JlcS0+YWlvX2luZmxpZ2h0 Kys7CisgICAgICAgIGJsa19haW9fcHdyaXRldihibGtkZXYtPmJsaywgaW9yZXEtPnN0YXJ0LCAm aW9yZXEtPnYsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBxZW11X2Fpb19jb21wbGV0ZSwg aW9yZXEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJMS0lGX09QX0RJU0NBUkQ6CisgICAg eworICAgICAgICBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9kaXNjYXJkICpyZXEgPSAodm9pZCAqKSZp b3JlcS0+cmVxOworICAgICAgICBpZiAoIWJsa19zcGxpdF9kaXNjYXJkKGlvcmVxLCByZXEtPnNl Y3Rvcl9udW1iZXIsIHJlcS0+bnJfc2VjdG9ycykpIHsKKyAgICAgICAgICAgIGdvdG8gZXJyOwor ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICAv KiB1bmtub3duIG9wZXJhdGlvbiAoc2hvdWxkbid0IGhhcHBlbiAtLSBwYXJzZSBjYXRjaGVzIHRo aXMpICovCisgICAgICAgIGdvdG8gZXJyOworICAgIH0KKworICAgIHFlbXVfYWlvX2NvbXBsZXRl KGlvcmVxLCAwKTsKKworICAgIHJldHVybiAwOworCitlcnI6CisgICAgaW9yZXFfZmluaXNoKGlv cmVxKTsKKyAgICBpb3JlcS0+c3RhdHVzID0gQkxLSUZfUlNQX0VSUk9SOworICAgIHJldHVybiAt MTsKK30KKworc3RhdGljIGludCBibGtfc2VuZF9yZXNwb25zZV9vbmUoc3RydWN0IGlvcmVxICpp b3JlcSkKK3sKKyAgICBzdHJ1Y3QgWGVuQmxrRGV2ICAqYmxrZGV2ID0gaW9yZXEtPmJsa2RldjsK KyAgICBpbnQgICAgICAgICAgICAgICBzZW5kX25vdGlmeSAgID0gMDsKKyAgICBpbnQgICAgICAg ICAgICAgICBoYXZlX3JlcXVlc3RzID0gMDsKKyAgICBibGtpZl9yZXNwb25zZV90ICAqcmVzcDsK KworICAgIC8qIFBsYWNlIG9uIHRoZSByZXNwb25zZSByaW5nIGZvciB0aGUgcmVsZXZhbnQgZG9t YWluLiAqLworICAgIHN3aXRjaCAoYmxrZGV2LT5wcm90b2NvbCkgeworICAgIGNhc2UgQkxLSUZf UFJPVE9DT0xfTkFUSVZFOgorICAgICAgICByZXNwID0gKGJsa2lmX3Jlc3BvbnNlX3QgKilSSU5H X0dFVF9SRVNQT05TRSgKKyAgICAgICAgICAgICZibGtkZXYtPnJpbmdzLm5hdGl2ZSwKKyAgICAg ICAgICAgIGJsa2Rldi0+cmluZ3MubmF0aXZlLnJzcF9wcm9kX3B2dCk7CisgICAgICAgIGJyZWFr OworICAgIGNhc2UgQkxLSUZfUFJPVE9DT0xfWDg2XzMyOgorICAgICAgICByZXNwID0gKGJsa2lm X3Jlc3BvbnNlX3QgKilSSU5HX0dFVF9SRVNQT05TRSgKKyAgICAgICAgICAgICZibGtkZXYtPnJp bmdzLng4Nl8zMl9wYXJ0LAorICAgICAgICAgICAgYmxrZGV2LT5yaW5ncy54ODZfMzJfcGFydC5y c3BfcHJvZF9wdnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJMS0lGX1BST1RPQ09MX1g4 Nl82NDoKKyAgICAgICAgcmVzcCA9IChibGtpZl9yZXNwb25zZV90ICopUklOR19HRVRfUkVTUE9O U0UoCisgICAgICAgICAgICAmYmxrZGV2LT5yaW5ncy54ODZfNjRfcGFydCwKKyAgICAgICAgICAg IGJsa2Rldi0+cmluZ3MueDg2XzY0X3BhcnQucnNwX3Byb2RfcHZ0KTsKKyAgICAgICAgYnJlYWs7 CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmVzcC0+aWQg ICAgICAgID0gaW9yZXEtPnJlcS5pZDsKKyAgICByZXNwLT5vcGVyYXRpb24gPSBpb3JlcS0+cmVx Lm9wZXJhdGlvbjsKKyAgICByZXNwLT5zdGF0dXMgICAgPSBpb3JlcS0+c3RhdHVzOworCisgICAg YmxrZGV2LT5yaW5ncy5jb21tb24ucnNwX3Byb2RfcHZ0Kys7CisKKyAgICBSSU5HX1BVU0hfUkVT UE9OU0VTX0FORF9DSEVDS19OT1RJRlkoJmJsa2Rldi0+cmluZ3MuY29tbW9uLCBzZW5kX25vdGlm eSk7CisgICAgaWYgKGJsa2Rldi0+cmluZ3MuY29tbW9uLnJzcF9wcm9kX3B2dCA9PSBibGtkZXYt PnJpbmdzLmNvbW1vbi5yZXFfY29ucykgeworICAgICAgICAvKgorICAgICAgICAgKiBUYWlsIGNo ZWNrIGZvciBwZW5kaW5nIHJlcXVlc3RzLiBBbGxvd3MgZnJvbnRlbmQgdG8gYXZvaWQKKyAgICAg ICAgICogbm90aWZpY2F0aW9ucyBpZiByZXF1ZXN0cyBhcmUgYWxyZWFkeSBpbiBmbGlnaHQgKGxv d2VyCisgICAgICAgICAqIG92ZXJoZWFkcyBhbmQgcHJvbW90ZXMgYmF0Y2hpbmcpLgorICAgICAg ICAgKi8KKyAgICAgICAgUklOR19GSU5BTF9DSEVDS19GT1JfUkVRVUVTVFMoJmJsa2Rldi0+cmlu Z3MuY29tbW9uLCBoYXZlX3JlcXVlc3RzKTsKKyAgICB9IGVsc2UgaWYgKFJJTkdfSEFTX1VOQ09O U1VNRURfUkVRVUVTVFMoJmJsa2Rldi0+cmluZ3MuY29tbW9uKSkgeworICAgICAgICBoYXZlX3Jl cXVlc3RzID0gMTsKKyAgICB9CisKKyAgICBpZiAoaGF2ZV9yZXF1ZXN0cykgeworICAgICAgICBi bGtkZXYtPm1vcmVfd29yaysrOworICAgIH0KKyAgICByZXR1cm4gc2VuZF9ub3RpZnk7Cit9CisK Ky8qIHdhbGsgZmluaXNoZWQgbGlzdCwgc2VuZCBvdXRzdGFuZGluZyByZXNwb25zZXMsIGZyZWUg cmVxdWVzdHMgKi8KK3N0YXRpYyB2b2lkIGJsa19zZW5kX3Jlc3BvbnNlX2FsbChzdHJ1Y3QgWGVu QmxrRGV2ICpibGtkZXYpCit7CisgICAgc3RydWN0IGlvcmVxICppb3JlcTsKKyAgICBpbnQgc2Vu ZF9ub3RpZnkgPSAwOworCisgICAgd2hpbGUgKCFRTElTVF9FTVBUWSgmYmxrZGV2LT5maW5pc2hl ZCkpIHsKKyAgICAgICAgaW9yZXEgPSBRTElTVF9GSVJTVCgmYmxrZGV2LT5maW5pc2hlZCk7Cisg ICAgICAgIHNlbmRfbm90aWZ5ICs9IGJsa19zZW5kX3Jlc3BvbnNlX29uZShpb3JlcSk7CisgICAg ICAgIGlvcmVxX3JlbGVhc2UoaW9yZXEsIHRydWUpOworICAgIH0KKyAgICBpZiAoc2VuZF9ub3Rp ZnkpIHsKKyAgICAgICAgeGVuX3B2X3NlbmRfbm90aWZ5KCZibGtkZXYtPnhlbmRldik7CisgICAg fQorfQorCitzdGF0aWMgaW50IGJsa19nZXRfcmVxdWVzdChzdHJ1Y3QgWGVuQmxrRGV2ICpibGtk ZXYsIHN0cnVjdCBpb3JlcSAqaW9yZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBSSU5H X0lEWCByYykKK3sKKyAgICBzd2l0Y2ggKGJsa2Rldi0+cHJvdG9jb2wpIHsKKyAgICBjYXNlIEJM S0lGX1BST1RPQ09MX05BVElWRToKKyAgICAgICAgbWVtY3B5KCZpb3JlcS0+cmVxLCBSSU5HX0dF VF9SRVFVRVNUKCZibGtkZXYtPnJpbmdzLm5hdGl2ZSwgcmMpLAorICAgICAgICAgICAgICAgc2l6 ZW9mKGlvcmVxLT5yZXEpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCTEtJRl9QUk9UT0NP TF9YODZfMzI6CisgICAgICAgIGJsa2lmX2dldF94ODZfMzJfcmVxKCZpb3JlcS0+cmVxLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBSSU5HX0dFVF9SRVFVRVNUKCZibGtkZXYtPnJpbmdz Lng4Nl8zMl9wYXJ0LCByYykpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJMS0lGX1BST1RP Q09MX1g4Nl82NDoKKyAgICAgICAgYmxraWZfZ2V0X3g4Nl82NF9yZXEoJmlvcmVxLT5yZXEsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJJTkdfR0VUX1JFUVVFU1QoJmJsa2Rldi0+cmlu Z3MueDg2XzY0X3BhcnQsIHJjKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvKiBQcmV2 ZW50IHRoZSBjb21waWxlciBmcm9tIGFjY2Vzc2luZyB0aGUgb24tcmluZyBmaWVsZHMgaW5zdGVh ZC4gKi8KKyAgICBiYXJyaWVyKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJs a19oYW5kbGVfcmVxdWVzdHMoc3RydWN0IFhlbkJsa0RldiAqYmxrZGV2KQoreworICAgIFJJTkdf SURYIHJjLCBycDsKKyAgICBzdHJ1Y3QgaW9yZXEgKmlvcmVxOworCisgICAgYmxrZGV2LT5tb3Jl X3dvcmsgPSAwOworCisgICAgcmMgPSBibGtkZXYtPnJpbmdzLmNvbW1vbi5yZXFfY29uczsKKyAg ICBycCA9IGJsa2Rldi0+cmluZ3MuY29tbW9uLnNyaW5nLT5yZXFfcHJvZDsKKyAgICB4ZW5fcm1i KCk7IC8qIEVuc3VyZSB3ZSBzZWUgcXVldWVkIHJlcXVlc3RzIHVwIHRvICdycCcuICovCisKKyAg ICBibGtfc2VuZF9yZXNwb25zZV9hbGwoYmxrZGV2KTsKKyAgICB3aGlsZSAocmMgIT0gcnApIHsK KyAgICAgICAgLyogcHVsbCByZXF1ZXN0IGZyb20gcmluZyAqLworICAgICAgICBpZiAoUklOR19S RVFVRVNUX0NPTlNfT1ZFUkZMT1coJmJsa2Rldi0+cmluZ3MuY29tbW9uLCByYykpIHsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlvcmVxID0gaW9yZXFfc3RhcnQoYmxr ZGV2KTsKKyAgICAgICAgaWYgKGlvcmVxID09IE5VTEwpIHsKKyAgICAgICAgICAgIGJsa2Rldi0+ bW9yZV93b3JrKys7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBibGtf Z2V0X3JlcXVlc3QoYmxrZGV2LCBpb3JlcSwgcmMpOworICAgICAgICBibGtkZXYtPnJpbmdzLmNv bW1vbi5yZXFfY29ucyA9ICsrcmM7CisKKyAgICAgICAgLyogcGFyc2UgdGhlbSAqLworICAgICAg ICBpZiAoaW9yZXFfcGFyc2UoaW9yZXEpICE9IDApIHsKKworICAgICAgICAgICAgc3dpdGNoIChp b3JlcS0+cmVxLm9wZXJhdGlvbikgeworICAgICAgICAgICAgY2FzZSBCTEtJRl9PUF9SRUFEOgor ICAgICAgICAgICAgICAgIGJsb2NrX2FjY3RfaW52YWxpZChibGtfZ2V0X3N0YXRzKGJsa2Rldi0+ YmxrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkxPQ0tfQUNDVF9SRUFE KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQkxLSUZfT1BfV1JJ VEU6CisgICAgICAgICAgICAgICAgYmxvY2tfYWNjdF9pbnZhbGlkKGJsa19nZXRfc3RhdHMoYmxr ZGV2LT5ibGspLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCTE9DS19BQ0NU X1dSSVRFKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQkxLSUZf T1BfRkxVU0hfRElTS0NBQ0hFOgorICAgICAgICAgICAgICAgIGJsb2NrX2FjY3RfaW52YWxpZChi bGtfZ2V0X3N0YXRzKGJsa2Rldi0+YmxrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQkxPQ0tfQUNDVF9GTFVTSCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKGJsa19zZW5k X3Jlc3BvbnNlX29uZShpb3JlcSkpIHsKKyAgICAgICAgICAgICAgICB4ZW5fcHZfc2VuZF9ub3Rp ZnkoJmJsa2Rldi0+eGVuZGV2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlvcmVxX3Jl bGVhc2UoaW9yZXEsIGZhbHNlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK KyAgICAgICAgaW9yZXFfcnVuaW9fcWVtdV9haW8oaW9yZXEpOworICAgIH0KKworICAgIGlmIChi bGtkZXYtPm1vcmVfd29yayAmJiBibGtkZXYtPnJlcXVlc3RzX2luZmxpZ2h0IDwgYmxrZGV2LT5t YXhfcmVxdWVzdHMpIHsKKyAgICAgICAgcWVtdV9iaF9zY2hlZHVsZShibGtkZXYtPmJoKTsKKyAg ICB9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQgYmxrX2JoKHZvaWQgKm9wYXF1ZSkK K3sKKyAgICBzdHJ1Y3QgWGVuQmxrRGV2ICpibGtkZXYgPSBvcGFxdWU7CisKKyAgICBhaW9fY29u dGV4dF9hY3F1aXJlKGJsa2Rldi0+Y3R4KTsKKyAgICBibGtfaGFuZGxlX3JlcXVlc3RzKGJsa2Rl dik7CisgICAgYWlvX2NvbnRleHRfcmVsZWFzZShibGtkZXYtPmN0eCk7Cit9CisKK3N0YXRpYyB2 b2lkIGJsa19hbGxvYyhzdHJ1Y3QgWGVuTGVnYWN5RGV2aWNlICp4ZW5kZXYpCit7CisgICAgc3Ry dWN0IFhlbkJsa0RldiAqYmxrZGV2ID0gY29udGFpbmVyX29mKHhlbmRldiwgc3RydWN0IFhlbkJs a0RldiwgeGVuZGV2KTsKKyAgICBFcnJvciAqZXJyID0gTlVMTDsKKworICAgIHRyYWNlX3hlbl9k aXNrX2FsbG9jKHhlbmRldi0+bmFtZSk7CisKKyAgICBRTElTVF9JTklUKCZibGtkZXYtPmluZmxp Z2h0KTsKKyAgICBRTElTVF9JTklUKCZibGtkZXYtPmZpbmlzaGVkKTsKKyAgICBRTElTVF9JTklU KCZibGtkZXYtPmZyZWVsaXN0KTsKKworICAgIGJsa2Rldi0+aW90aHJlYWQgPSBpb3RocmVhZF9j cmVhdGUoeGVuZGV2LT5uYW1lLCAmZXJyKTsKKyAgICBhc3NlcnQoIWVycik7CisKKyAgICBibGtk ZXYtPmN0eCA9IGlvdGhyZWFkX2dldF9haW9fY29udGV4dChibGtkZXYtPmlvdGhyZWFkKTsKKyAg ICBibGtkZXYtPmJoID0gYWlvX2JoX25ldyhibGtkZXYtPmN0eCwgYmxrX2JoLCBibGtkZXYpOwor fQorCitzdGF0aWMgdm9pZCBibGtfcGFyc2VfZGlzY2FyZChzdHJ1Y3QgWGVuQmxrRGV2ICpibGtk ZXYpCit7CisgICAgc3RydWN0IFhlbkxlZ2FjeURldmljZSAqeGVuZGV2ID0gJmJsa2Rldi0+eGVu ZGV2OworICAgIGludCBlbmFibGU7CisKKyAgICBibGtkZXYtPmZlYXR1cmVfZGlzY2FyZCA9IHRy dWU7CisKKyAgICBpZiAoeGVuc3RvcmVfcmVhZF9iZV9pbnQoeGVuZGV2LCAiZGlzY2FyZC1lbmFi bGUiLCAmZW5hYmxlKSA9PSAwKSB7CisgICAgICAgIGJsa2Rldi0+ZmVhdHVyZV9kaXNjYXJkID0g ISFlbmFibGU7CisgICAgfQorCisgICAgaWYgKGJsa2Rldi0+ZmVhdHVyZV9kaXNjYXJkKSB7Cisg ICAgICAgIHhlbnN0b3JlX3dyaXRlX2JlX2ludCh4ZW5kZXYsICJmZWF0dXJlLWRpc2NhcmQiLCAx KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgYmxrX2luaXQoc3RydWN0IFhlbkxlZ2FjeURldmlj ZSAqeGVuZGV2KQoreworICAgIHN0cnVjdCBYZW5CbGtEZXYgKmJsa2RldiA9IGNvbnRhaW5lcl9v Zih4ZW5kZXYsIHN0cnVjdCBYZW5CbGtEZXYsIHhlbmRldik7CisgICAgaW50IGluZm8gPSAwOwor ICAgIGNoYXIgKmRpcmVjdGlvc2FmZSA9IE5VTEw7CisKKyAgICB0cmFjZV94ZW5fZGlza19pbml0 KHhlbmRldi0+bmFtZSk7CisKKyAgICAvKiByZWFkIHhlbnN0b3JlIGVudHJpZXMgKi8KKyAgICBp ZiAoYmxrZGV2LT5wYXJhbXMgPT0gTlVMTCkgeworICAgICAgICBjaGFyICpoID0gTlVMTDsKKyAg ICAgICAgYmxrZGV2LT5wYXJhbXMgPSB4ZW5zdG9yZV9yZWFkX2JlX3N0cih4ZW5kZXYsICJwYXJh bXMiKTsKKyAgICAgICAgaWYgKGJsa2Rldi0+cGFyYW1zICE9IE5VTEwpIHsKKyAgICAgICAgICAg IGggPSBzdHJjaHIoYmxrZGV2LT5wYXJhbXMsICc6Jyk7CisgICAgICAgIH0KKyAgICAgICAgaWYg KGggIT0gTlVMTCkgeworICAgICAgICAgICAgYmxrZGV2LT5maWxlcHJvdG8gPSBibGtkZXYtPnBh cmFtczsKKyAgICAgICAgICAgIGJsa2Rldi0+ZmlsZW5hbWUgID0gaCArIDE7CisgICAgICAgICAg ICAqaCA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBibGtkZXYtPmZpbGVwcm90 byA9ICI8dW5zZXQ+IjsKKyAgICAgICAgICAgIGJsa2Rldi0+ZmlsZW5hbWUgID0gYmxrZGV2LT5w YXJhbXM7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFzdHJjbXAoImFpbyIsIGJsa2Rldi0+ ZmlsZXByb3RvKSkgeworICAgICAgICBibGtkZXYtPmZpbGVwcm90byA9ICJyYXciOworICAgIH0K KyAgICBpZiAoIXN0cmNtcCgidmhkIiwgYmxrZGV2LT5maWxlcHJvdG8pKSB7CisgICAgICAgIGJs a2Rldi0+ZmlsZXByb3RvID0gInZwYyI7CisgICAgfQorICAgIGlmIChibGtkZXYtPm1vZGUgPT0g TlVMTCkgeworICAgICAgICBibGtkZXYtPm1vZGUgPSB4ZW5zdG9yZV9yZWFkX2JlX3N0cih4ZW5k ZXYsICJtb2RlIik7CisgICAgfQorICAgIGlmIChibGtkZXYtPnR5cGUgPT0gTlVMTCkgeworICAg ICAgICBibGtkZXYtPnR5cGUgPSB4ZW5zdG9yZV9yZWFkX2JlX3N0cih4ZW5kZXYsICJ0eXBlIik7 CisgICAgfQorICAgIGlmIChibGtkZXYtPmRldiA9PSBOVUxMKSB7CisgICAgICAgIGJsa2Rldi0+ ZGV2ID0geGVuc3RvcmVfcmVhZF9iZV9zdHIoeGVuZGV2LCAiZGV2Iik7CisgICAgfQorICAgIGlm IChibGtkZXYtPmRldnR5cGUgPT0gTlVMTCkgeworICAgICAgICBibGtkZXYtPmRldnR5cGUgPSB4 ZW5zdG9yZV9yZWFkX2JlX3N0cih4ZW5kZXYsICJkZXZpY2UtdHlwZSIpOworICAgIH0KKyAgICBk aXJlY3Rpb3NhZmUgPSB4ZW5zdG9yZV9yZWFkX2JlX3N0cih4ZW5kZXYsICJkaXJlY3QtaW8tc2Fm ZSIpOworICAgIGJsa2Rldi0+ZGlyZWN0aW9zYWZlID0gKGRpcmVjdGlvc2FmZSAmJiBhdG9pKGRp cmVjdGlvc2FmZSkpOworCisgICAgLyogZG8gd2UgaGF2ZSBhbGwgd2UgbmVlZD8gKi8KKyAgICBp ZiAoYmxrZGV2LT5wYXJhbXMgPT0gTlVMTCB8fAorICAgICAgICBibGtkZXYtPm1vZGUgPT0gTlVM TCAgIHx8CisgICAgICAgIGJsa2Rldi0+dHlwZSA9PSBOVUxMICAgfHwKKyAgICAgICAgYmxrZGV2 LT5kZXYgPT0gTlVMTCkgeworICAgICAgICBnb3RvIG91dF9lcnJvcjsKKyAgICB9CisKKyAgICAv KiByZWFkLW9ubHkgPyAqLworICAgIGlmIChzdHJjbXAoYmxrZGV2LT5tb2RlLCAidyIpKSB7Cisg ICAgICAgIGluZm8gIHw9IFZESVNLX1JFQURPTkxZOworICAgIH0KKworICAgIC8qIGNkcm9tID8g Ki8KKyAgICBpZiAoYmxrZGV2LT5kZXZ0eXBlICYmICFzdHJjbXAoYmxrZGV2LT5kZXZ0eXBlLCAi Y2Ryb20iKSkgeworICAgICAgICBpbmZvICB8PSBWRElTS19DRFJPTTsKKyAgICB9CisKKyAgICBi bGtkZXYtPmZpbGVfYmxrICA9IEJMT0NLX1NJWkU7CisKKyAgICAvKiBmaWxsIGluZm8KKyAgICAg KiBibGtfY29ubmVjdCBzdXBwbGllcyBzZWN0b3Itc2l6ZSBhbmQgc2VjdG9ycworICAgICAqLwor ICAgIHhlbnN0b3JlX3dyaXRlX2JlX2ludCh4ZW5kZXYsICJmZWF0dXJlLWZsdXNoLWNhY2hlIiwg MSk7CisgICAgeGVuc3RvcmVfd3JpdGVfYmVfaW50KHhlbmRldiwgImluZm8iLCBpbmZvKTsKKwor ICAgIHhlbnN0b3JlX3dyaXRlX2JlX2ludCh4ZW5kZXYsICJtYXgtcmluZy1wYWdlLW9yZGVyIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX1JJTkdfUEFHRV9PUkRFUik7CisKKyAgICBi bGtfcGFyc2VfZGlzY2FyZChibGtkZXYpOworCisgICAgZ19mcmVlKGRpcmVjdGlvc2FmZSk7Cisg ICAgcmV0dXJuIDA7CisKK291dF9lcnJvcjoKKyAgICBnX2ZyZWUoYmxrZGV2LT5wYXJhbXMpOwor ICAgIGJsa2Rldi0+cGFyYW1zID0gTlVMTDsKKyAgICBnX2ZyZWUoYmxrZGV2LT5tb2RlKTsKKyAg ICBibGtkZXYtPm1vZGUgPSBOVUxMOworICAgIGdfZnJlZShibGtkZXYtPnR5cGUpOworICAgIGJs a2Rldi0+dHlwZSA9IE5VTEw7CisgICAgZ19mcmVlKGJsa2Rldi0+ZGV2KTsKKyAgICBibGtkZXYt PmRldiA9IE5VTEw7CisgICAgZ19mcmVlKGJsa2Rldi0+ZGV2dHlwZSk7CisgICAgYmxrZGV2LT5k ZXZ0eXBlID0gTlVMTDsKKyAgICBnX2ZyZWUoZGlyZWN0aW9zYWZlKTsKKyAgICBibGtkZXYtPmRp cmVjdGlvc2FmZSA9IGZhbHNlOworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludCBibGtf Y29ubmVjdChzdHJ1Y3QgWGVuTGVnYWN5RGV2aWNlICp4ZW5kZXYpCit7CisgICAgc3RydWN0IFhl bkJsa0RldiAqYmxrZGV2ID0gY29udGFpbmVyX29mKHhlbmRldiwgc3RydWN0IFhlbkJsa0Rldiwg eGVuZGV2KTsKKyAgICBpbnQgaW5kZXgsIHFmbGFnczsKKyAgICBib29sIHJlYWRvbmx5ID0gdHJ1 ZTsKKyAgICBib29sIHdyaXRldGhyb3VnaCA9IHRydWU7CisgICAgaW50IG9yZGVyLCByaW5nX3Jl ZjsKKyAgICB1bnNpZ25lZCBpbnQgcmluZ19zaXplLCBtYXhfZ3JhbnRzOworICAgIHVuc2lnbmVk IGludCBpOworCisgICAgdHJhY2VfeGVuX2Rpc2tfY29ubmVjdCh4ZW5kZXYtPm5hbWUpOworCisg ICAgLyogcmVhZC1vbmx5ID8gKi8KKyAgICBpZiAoYmxrZGV2LT5kaXJlY3Rpb3NhZmUpIHsKKyAg ICAgICAgcWZsYWdzID0gQkRSVl9PX05PQ0FDSEUgfCBCRFJWX09fTkFUSVZFX0FJTzsKKyAgICB9 IGVsc2UgeworICAgICAgICBxZmxhZ3MgPSAwOworICAgICAgICB3cml0ZXRocm91Z2ggPSBmYWxz ZTsKKyAgICB9CisgICAgaWYgKHN0cmNtcChibGtkZXYtPm1vZGUsICJ3IikgPT0gMCkgeworICAg ICAgICBxZmxhZ3MgfD0gQkRSVl9PX1JEV1I7CisgICAgICAgIHJlYWRvbmx5ID0gZmFsc2U7Cisg ICAgfQorICAgIGlmIChibGtkZXYtPmZlYXR1cmVfZGlzY2FyZCkgeworICAgICAgICBxZmxhZ3Mg fD0gQkRSVl9PX1VOTUFQOworICAgIH0KKworICAgIC8qIGluaXQgcWVtdSBibG9jayBkcml2ZXIg Ki8KKyAgICBpbmRleCA9ICh4ZW5kZXYtPmRldiAtIDIwMiAqIDI1NikgLyAxNjsKKyAgICBibGtk ZXYtPmRpbmZvID0gZHJpdmVfZ2V0KElGX1hFTiwgMCwgaW5kZXgpOworICAgIGlmICghYmxrZGV2 LT5kaW5mbykgeworICAgICAgICBFcnJvciAqbG9jYWxfZXJyID0gTlVMTDsKKyAgICAgICAgUURp Y3QgKm9wdGlvbnMgPSBOVUxMOworCisgICAgICAgIGlmIChzdHJjbXAoYmxrZGV2LT5maWxlcHJv dG8sICI8dW5zZXQ+IikpIHsKKyAgICAgICAgICAgIG9wdGlvbnMgPSBxZGljdF9uZXcoKTsKKyAg ICAgICAgICAgIHFkaWN0X3B1dF9zdHIob3B0aW9ucywgImRyaXZlciIsIGJsa2Rldi0+ZmlsZXBy b3RvKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHNldHVwIHZpYSB4ZW5idXMgLT4gY3JlYXRl IG5ldyBibG9jayBkcml2ZXIgaW5zdGFuY2UgKi8KKyAgICAgICAgeGVuX3B2X3ByaW50Zih4ZW5k ZXYsIDIsICJjcmVhdGUgbmV3IGJkcnYgKHhlbmJ1cyBzZXR1cClcbiIpOworICAgICAgICBibGtk ZXYtPmJsayA9IGJsa19uZXdfb3BlbihibGtkZXYtPmZpbGVuYW1lLCBOVUxMLCBvcHRpb25zLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxZmxhZ3MsICZsb2NhbF9lcnIpOwor ICAgICAgICBpZiAoIWJsa2Rldi0+YmxrKSB7CisgICAgICAgICAgICB4ZW5fcHZfcHJpbnRmKHhl bmRldiwgMCwgImVycm9yOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jf Z2V0X3ByZXR0eShsb2NhbF9lcnIpKTsKKyAgICAgICAgICAgIGVycm9yX2ZyZWUobG9jYWxfZXJy KTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBibGtfc2V0X2Vu YWJsZV93cml0ZV9jYWNoZShibGtkZXYtPmJsaywgIXdyaXRldGhyb3VnaCk7CisgICAgfSBlbHNl IHsKKyAgICAgICAgLyogc2V0dXAgdmlhIHFlbXUgY21kbGluZSAtPiBhbHJlYWR5IHNldHVwIGZv ciB1cyAqLworICAgICAgICB4ZW5fcHZfcHJpbnRmKHhlbmRldiwgMiwKKyAgICAgICAgICAgICAg ICAgICAgICAiZ2V0IGNvbmZpZ3VyZWQgYmRydiAoY21kbGluZSBzZXR1cClcbiIpOworICAgICAg ICBibGtkZXYtPmJsayA9IGJsa19ieV9sZWdhY3lfZGluZm8oYmxrZGV2LT5kaW5mbyk7CisgICAg ICAgIGlmIChibGtfaXNfcmVhZF9vbmx5KGJsa2Rldi0+YmxrKSAmJiAhcmVhZG9ubHkpIHsKKyAg ICAgICAgICAgIHhlbl9wdl9wcmludGYoeGVuZGV2LCAwLCAiVW5leHBlY3RlZCByZWFkLW9ubHkg ZHJpdmUiKTsKKyAgICAgICAgICAgIGJsa2Rldi0+YmxrID0gTlVMTDsKKyAgICAgICAgICAgIHJl dHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAvKiBibGtkZXYtPmJsayBpcyBub3QgY3JlYXRl IGJ5IHVzLCB3ZSBnZXQgYSByZWZlcmVuY2UKKyAgICAgICAgICogc28gd2UgY2FuIGJsa191bnJl ZigpIHVuY29uZGl0aW9uYWxseSAqLworICAgICAgICBibGtfcmVmKGJsa2Rldi0+YmxrKTsKKyAg ICB9CisgICAgYmxrX2F0dGFjaF9kZXZfbGVnYWN5KGJsa2Rldi0+YmxrLCBibGtkZXYpOworICAg IGJsa2Rldi0+ZmlsZV9zaXplID0gYmxrX2dldGxlbmd0aChibGtkZXYtPmJsayk7CisgICAgaWYg KGJsa2Rldi0+ZmlsZV9zaXplIDwgMCkgeworICAgICAgICBCbG9ja0RyaXZlclN0YXRlICpicyA9 IGJsa19icyhibGtkZXYtPmJsayk7CisgICAgICAgIGNvbnN0IGNoYXIgKmRydl9uYW1lID0gYnMg PyBiZHJ2X2dldF9mb3JtYXRfbmFtZShicykgOiBOVUxMOworICAgICAgICB4ZW5fcHZfcHJpbnRm KHhlbmRldiwgMSwgImJsa19nZXRsZW5ndGg6ICVkICglcykgfCBkcnYgJXNcbiIsCisgICAgICAg ICAgICAgICAgICAgICAgKGludClibGtkZXYtPmZpbGVfc2l6ZSwgc3RyZXJyb3IoLWJsa2Rldi0+ ZmlsZV9zaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICBkcnZfbmFtZSA/OiAiLSIpOworICAg ICAgICBibGtkZXYtPmZpbGVfc2l6ZSA9IDA7CisgICAgfQorCisgICAgeGVuX3B2X3ByaW50Zih4 ZW5kZXYsIDEsICJ0eXBlIFwiJXNcIiwgZmlsZXByb3RvIFwiJXNcIiwgZmlsZW5hbWUgXCIlc1wi LCIKKyAgICAgICAgICAgICAgICAgICIgc2l6ZSAlIiBQUklkNjQgIiAoJSIgUFJJZDY0ICIgTUIp XG4iLAorICAgICAgICAgICAgICAgICAgYmxrZGV2LT50eXBlLCBibGtkZXYtPmZpbGVwcm90bywg YmxrZGV2LT5maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgIGJsa2Rldi0+ZmlsZV9zaXplLCBi bGtkZXYtPmZpbGVfc2l6ZSAvIE1pQik7CisKKyAgICAvKiBGaWxsIGluIG51bWJlciBvZiBzZWN0 b3Igc2l6ZSBhbmQgbnVtYmVyIG9mIHNlY3RvcnMgKi8KKyAgICB4ZW5zdG9yZV93cml0ZV9iZV9p bnQoeGVuZGV2LCAic2VjdG9yLXNpemUiLCBibGtkZXYtPmZpbGVfYmxrKTsKKyAgICB4ZW5zdG9y ZV93cml0ZV9iZV9pbnQ2NCh4ZW5kZXYsICJzZWN0b3JzIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBibGtkZXYtPmZpbGVfc2l6ZSAvIGJsa2Rldi0+ZmlsZV9ibGspOworCisgICAgaWYg KHhlbnN0b3JlX3JlYWRfZmVfaW50KHhlbmRldiwgInJpbmctcGFnZS1vcmRlciIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZvcmRlcikgPT0gLTEpIHsKKyAgICAgICAgYmxrZGV2LT5u cl9yaW5nX3JlZiA9IDE7CisKKyAgICAgICAgaWYgKHhlbnN0b3JlX3JlYWRfZmVfaW50KHhlbmRl diwgInJpbmctcmVmIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyaW5nX3Jl ZikgPT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBi bGtkZXYtPnJpbmdfcmVmWzBdID0gcmluZ19yZWY7CisKKyAgICB9IGVsc2UgaWYgKG9yZGVyID49 IDAgJiYgb3JkZXIgPD0gTUFYX1JJTkdfUEFHRV9PUkRFUikgeworICAgICAgICBibGtkZXYtPm5y X3JpbmdfcmVmID0gMSA8PCBvcmRlcjsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmxrZGV2 LT5ucl9yaW5nX3JlZjsgaSsrKSB7CisgICAgICAgICAgICBjaGFyICprZXk7CisKKyAgICAgICAg ICAgIGtleSA9IGdfc3RyZHVwX3ByaW50ZigicmluZy1yZWYldSIsIGkpOworICAgICAgICAgICAg aWYgKCFrZXkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisK KyAgICAgICAgICAgIGlmICh4ZW5zdG9yZV9yZWFkX2ZlX2ludCh4ZW5kZXYsIGtleSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmluZ19yZWYpID09IC0xKSB7CisgICAg ICAgICAgICAgICAgZ19mcmVlKGtleSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgYmxrZGV2LT5yaW5nX3JlZltpXSA9IHJpbmdfcmVmOwor CisgICAgICAgICAgICBnX2ZyZWUoa2V5KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg ICAgIHhlbl9wdl9wcmludGYoeGVuZGV2LCAwLCAiaW52YWxpZCByaW5nLXBhZ2Utb3JkZXI6ICVk XG4iLAorICAgICAgICAgICAgICAgICAgICAgIG9yZGVyKTsKKyAgICAgICAgcmV0dXJuIC0xOwor ICAgIH0KKworICAgIGlmICh4ZW5zdG9yZV9yZWFkX2ZlX2ludCh4ZW5kZXYsICJldmVudC1jaGFu bmVsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnhlbmRldi0+cmVtb3RlX3BvcnQp ID09IC0xKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIXhlbmRldi0+ cHJvdG9jb2wpIHsKKyAgICAgICAgYmxrZGV2LT5wcm90b2NvbCA9IEJMS0lGX1BST1RPQ09MX05B VElWRTsKKyAgICB9IGVsc2UgaWYgKHN0cmNtcCh4ZW5kZXYtPnByb3RvY29sLCBYRU5fSU9fUFJP VE9fQUJJX05BVElWRSkgPT0gMCkgeworICAgICAgICBibGtkZXYtPnByb3RvY29sID0gQkxLSUZf UFJPVE9DT0xfTkFUSVZFOworICAgIH0gZWxzZSBpZiAoc3RyY21wKHhlbmRldi0+cHJvdG9jb2ws IFhFTl9JT19QUk9UT19BQklfWDg2XzMyKSA9PSAwKSB7CisgICAgICAgIGJsa2Rldi0+cHJvdG9j b2wgPSBCTEtJRl9QUk9UT0NPTF9YODZfMzI7CisgICAgfSBlbHNlIGlmIChzdHJjbXAoeGVuZGV2 LT5wcm90b2NvbCwgWEVOX0lPX1BST1RPX0FCSV9YODZfNjQpID09IDApIHsKKyAgICAgICAgYmxr ZGV2LT5wcm90b2NvbCA9IEJMS0lGX1BST1RPQ09MX1g4Nl82NDsKKyAgICB9IGVsc2UgeworICAg ICAgICBibGtkZXYtPnByb3RvY29sID0gQkxLSUZfUFJPVE9DT0xfTkFUSVZFOworICAgIH0KKwor ICAgIHJpbmdfc2l6ZSA9IFhDX1BBR0VfU0laRSAqIGJsa2Rldi0+bnJfcmluZ19yZWY7CisgICAg c3dpdGNoIChibGtkZXYtPnByb3RvY29sKSB7CisgICAgY2FzZSBCTEtJRl9QUk9UT0NPTF9OQVRJ VkU6CisgICAgeworICAgICAgICBibGtkZXYtPm1heF9yZXF1ZXN0cyA9IF9fQ09OU1RfUklOR19T SVpFKGJsa2lmLCByaW5nX3NpemUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBC TEtJRl9QUk9UT0NPTF9YODZfMzI6CisgICAgeworICAgICAgICBibGtkZXYtPm1heF9yZXF1ZXN0 cyA9IF9fQ09OU1RfUklOR19TSVpFKGJsa2lmX3g4Nl8zMiwgcmluZ19zaXplKTsKKyAgICAgICAg YnJlYWs7CisgICAgfQorICAgIGNhc2UgQkxLSUZfUFJPVE9DT0xfWDg2XzY0OgorICAgIHsKKyAg ICAgICAgYmxrZGV2LT5tYXhfcmVxdWVzdHMgPSBfX0NPTlNUX1JJTkdfU0laRShibGtpZl94ODZf NjQsIHJpbmdfc2l6ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAg ICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogQWRkIG9uIHRoZSBudW1iZXIgbmVlZGVk IGZvciB0aGUgcmluZyBwYWdlcyAqLworICAgIG1heF9ncmFudHMgPSBibGtkZXYtPm5yX3Jpbmdf cmVmOworCisgICAgeGVuX2JlX3NldF9tYXhfZ3JhbnRfcmVmcyh4ZW5kZXYsIG1heF9ncmFudHMp OworICAgIGJsa2Rldi0+c3JpbmcgPSB4ZW5fYmVfbWFwX2dyYW50X3JlZnMoeGVuZGV2LCBibGtk ZXYtPnJpbmdfcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YmxrZGV2LT5ucl9yaW5nX3JlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworICAgIGlmICghYmxrZGV2LT5zcmluZykg eworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgc3dpdGNoIChibGtkZXYtPnByb3Rv Y29sKSB7CisgICAgY2FzZSBCTEtJRl9QUk9UT0NPTF9OQVRJVkU6CisgICAgeworICAgICAgICBi bGtpZl9zcmluZ190ICpzcmluZ19uYXRpdmUgPSBibGtkZXYtPnNyaW5nOworICAgICAgICBCQUNL X1JJTkdfSU5JVCgmYmxrZGV2LT5yaW5ncy5uYXRpdmUsIHNyaW5nX25hdGl2ZSwgcmluZ19zaXpl KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQkxLSUZfUFJPVE9DT0xfWDg2XzMy OgorICAgIHsKKyAgICAgICAgYmxraWZfeDg2XzMyX3NyaW5nX3QgKnNyaW5nX3g4Nl8zMiA9IGJs a2Rldi0+c3Jpbmc7CisKKyAgICAgICAgQkFDS19SSU5HX0lOSVQoJmJsa2Rldi0+cmluZ3MueDg2 XzMyX3BhcnQsIHNyaW5nX3g4Nl8zMiwgcmluZ19zaXplKTsKKyAgICAgICAgYnJlYWs7CisgICAg fQorICAgIGNhc2UgQkxLSUZfUFJPVE9DT0xfWDg2XzY0OgorICAgIHsKKyAgICAgICAgYmxraWZf eDg2XzY0X3NyaW5nX3QgKnNyaW5nX3g4Nl82NCA9IGJsa2Rldi0+c3Jpbmc7CisKKyAgICAgICAg QkFDS19SSU5HX0lOSVQoJmJsa2Rldi0+cmluZ3MueDg2XzY0X3BhcnQsIHNyaW5nX3g4Nl82NCwg cmluZ19zaXplKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIGJsa19zZXRf YWlvX2NvbnRleHQoYmxrZGV2LT5ibGssIGJsa2Rldi0+Y3R4KTsKKworICAgIHhlbl9iZV9iaW5k X2V2dGNobih4ZW5kZXYpOworCisgICAgeGVuX3B2X3ByaW50Zih4ZW5kZXYsIDEsICJvazogcHJv dG8gJXMsIG5yLXJpbmctcmVmICV1LCAiCisgICAgICAgICAgICAgICAgICAicmVtb3RlIHBvcnQg JWQsIGxvY2FsIHBvcnQgJWRcbiIsCisgICAgICAgICAgICAgICAgICB4ZW5kZXYtPnByb3RvY29s LCBibGtkZXYtPm5yX3JpbmdfcmVmLAorICAgICAgICAgICAgICAgICAgeGVuZGV2LT5yZW1vdGVf cG9ydCwgeGVuZGV2LT5sb2NhbF9wb3J0KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQgYmxrX2Rpc2Nvbm5lY3Qoc3RydWN0IFhlbkxlZ2FjeURldmljZSAqeGVuZGV2KQoreworICAg IHN0cnVjdCBYZW5CbGtEZXYgKmJsa2RldiA9IGNvbnRhaW5lcl9vZih4ZW5kZXYsIHN0cnVjdCBY ZW5CbGtEZXYsIHhlbmRldik7CisKKyAgICB0cmFjZV94ZW5fZGlza19kaXNjb25uZWN0KHhlbmRl di0+bmFtZSk7CisKKyAgICBhaW9fY29udGV4dF9hY3F1aXJlKGJsa2Rldi0+Y3R4KTsKKworICAg IGlmIChibGtkZXYtPmJsaykgeworICAgICAgICBibGtfc2V0X2Fpb19jb250ZXh0KGJsa2Rldi0+ YmxrLCBxZW11X2dldF9haW9fY29udGV4dCgpKTsKKyAgICAgICAgYmxrX2RldGFjaF9kZXYoYmxr ZGV2LT5ibGssIGJsa2Rldik7CisgICAgICAgIGJsa191bnJlZihibGtkZXYtPmJsayk7CisgICAg ICAgIGJsa2Rldi0+YmxrID0gTlVMTDsKKyAgICB9CisgICAgeGVuX3B2X3VuYmluZF9ldnRjaG4o eGVuZGV2KTsKKworICAgIGFpb19jb250ZXh0X3JlbGVhc2UoYmxrZGV2LT5jdHgpOworCisgICAg aWYgKGJsa2Rldi0+c3JpbmcpIHsKKyAgICAgICAgeGVuX2JlX3VubWFwX2dyYW50X3JlZnMoeGVu ZGV2LCBibGtkZXYtPnNyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGtk ZXYtPm5yX3JpbmdfcmVmKTsKKyAgICAgICAgYmxrZGV2LT5zcmluZyA9IE5VTEw7CisgICAgfQor fQorCitzdGF0aWMgaW50IGJsa19mcmVlKHN0cnVjdCBYZW5MZWdhY3lEZXZpY2UgKnhlbmRldikK K3sKKyAgICBzdHJ1Y3QgWGVuQmxrRGV2ICpibGtkZXYgPSBjb250YWluZXJfb2YoeGVuZGV2LCBz dHJ1Y3QgWGVuQmxrRGV2LCB4ZW5kZXYpOworICAgIHN0cnVjdCBpb3JlcSAqaW9yZXE7CisKKyAg ICB0cmFjZV94ZW5fZGlza19mcmVlKHhlbmRldi0+bmFtZSk7CisKKyAgICBibGtfZGlzY29ubmVj dCh4ZW5kZXYpOworCisgICAgd2hpbGUgKCFRTElTVF9FTVBUWSgmYmxrZGV2LT5mcmVlbGlzdCkp IHsKKyAgICAgICAgaW9yZXEgPSBRTElTVF9GSVJTVCgmYmxrZGV2LT5mcmVlbGlzdCk7CisgICAg ICAgIFFMSVNUX1JFTU9WRShpb3JlcSwgbGlzdCk7CisgICAgICAgIHFlbXVfaW92ZWNfZGVzdHJv eSgmaW9yZXEtPnYpOworICAgICAgICBnX2ZyZWUoaW9yZXEpOworICAgIH0KKworICAgIGdfZnJl ZShibGtkZXYtPnBhcmFtcyk7CisgICAgZ19mcmVlKGJsa2Rldi0+bW9kZSk7CisgICAgZ19mcmVl KGJsa2Rldi0+dHlwZSk7CisgICAgZ19mcmVlKGJsa2Rldi0+ZGV2KTsKKyAgICBnX2ZyZWUoYmxr ZGV2LT5kZXZ0eXBlKTsKKyAgICBxZW11X2JoX2RlbGV0ZShibGtkZXYtPmJoKTsKKyAgICBpb3Ro cmVhZF9kZXN0cm95KGJsa2Rldi0+aW90aHJlYWQpOworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgdm9pZCBibGtfZXZlbnQoc3RydWN0IFhlbkxlZ2FjeURldmljZSAqeGVuZGV2KQoreworICAg IHN0cnVjdCBYZW5CbGtEZXYgKmJsa2RldiA9IGNvbnRhaW5lcl9vZih4ZW5kZXYsIHN0cnVjdCBY ZW5CbGtEZXYsIHhlbmRldik7CisKKyAgICBxZW11X2JoX3NjaGVkdWxlKGJsa2Rldi0+YmgpOwor fQorCitzdHJ1Y3QgWGVuRGV2T3BzIHhlbl9ibGtkZXZfb3BzID0geworICAgIC5mbGFncyAgICAg ID0gREVWT1BTX0ZMQUdfTkVFRF9HTlRERVYsCisgICAgLnNpemUgICAgICAgPSBzaXplb2Yoc3Ry dWN0IFhlbkJsa0RldiksCisgICAgLmFsbG9jICAgICAgPSBibGtfYWxsb2MsCisgICAgLmluaXQg ICAgICAgPSBibGtfaW5pdCwKKyAgICAuaW5pdGlhbGlzZSA9IGJsa19jb25uZWN0LAorICAgIC5k aXNjb25uZWN0ID0gYmxrX2Rpc2Nvbm5lY3QsCisgICAgLmV2ZW50ICAgICAgPSBibGtfZXZlbnQs CisgICAgLmZyZWUgICAgICAgPSBibGtfZnJlZSwKK307Ci0tIAoyLjExLjAKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBs aXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2pl Y3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs