From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gerd Hoffmann Subject: [PATCH v2 4/6] virtio-gpu: add 3d/virgl support Date: Mon, 21 Sep 2015 11:40:15 +0200 Message-ID: <1442828417-6165-5-git-send-email-kraxel@redhat.com> References: <1442828417-6165-1-git-send-email-kraxel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1442828417-6165-1-git-send-email-kraxel@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@redhat.com Cc: "Michael S. Tsirkin" , "open list:ABI/API" , open list , "open list:VIRTIO GPU DRIVER" , "open list:VIRTIO GPU DRIVER" , Dave Airlie List-Id: linux-api@vger.kernel.org QWRkIHRoZSBiaXRzIG5lZWRlZCBmb3Igb3BlbmdsIHJlbmRlcmluZyBzdXBwb3J0OiBxdWVyeQpj YXBhYmlsaXRpZXMsIG5ldyB2aXJ0aW8gY29tbWFuZHMsIGRybSBpb2N0bHMuCgpTaWduZWQtb2Zm LWJ5OiBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgpTaWduZWQtb2ZmLWJ5OiBHZXJk IEhvZmZtYW5uIDxrcmF4ZWxAcmVkaGF0LmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vdmlydGlv L01ha2VmaWxlICAgICAgICB8ICAgMyArLQogZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1 X2Rydi5jICAgfCAgMTAgKwogZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2Rydi5oICAg fCAgNjAgKysrKwogZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2dlbS5jICAgfCAgNDEg KysrCiBkcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfaW9jdGwuYyB8IDU3MiArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdw dV9rbXMuYyAgIHwgMTM1ICsrKysrKystCiBkcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVf dHRtLmMgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdnEuYyAgICB8 IDI2NSArKysrKysrKysrKysrKysKIGluY2x1ZGUvdWFwaS9kcm0vS2J1aWxkICAgICAgICAgICAg ICAgIHwgICAxICsKIGluY2x1ZGUvdWFwaS9kcm0vdmlydGdwdV9kcm0uaCAgICAgICAgIHwgMTY3 ICsrKysrKysrKysKIGluY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9fZ3B1LmggICAgICAgIHwgMTEy ICsrKysrKy0KIDExIGZpbGVzIGNoYW5nZWQsIDEzNjQgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlv bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVf aW9jdGwuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdWFwaS9kcm0vdmlydGdwdV9kcm0u aAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vTWFrZWZpbGUgYi9kcml2ZXJz L2dwdS9kcm0vdmlydGlvL01ha2VmaWxlCmluZGV4IDJlZTE2MDIuLmRhN2JmMTkgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJt L3ZpcnRpby9NYWtlZmlsZQpAQCAtNiw2ICs2LDcgQEAgY2NmbGFncy15IDo9IC1JaW5jbHVkZS9k cm0KIAogdmlydGlvLWdwdS15IDo9IHZpcnRncHVfZHJ2Lm8gdmlydGdwdV9rbXMubyB2aXJ0Z3B1 X2RybV9idXMubyB2aXJ0Z3B1X2dlbS5vIFwKIAl2aXJ0Z3B1X2ZiLm8gdmlydGdwdV9kaXNwbGF5 Lm8gdmlydGdwdV92cS5vIHZpcnRncHVfdHRtLm8gXAotCXZpcnRncHVfZmVuY2UubyB2aXJ0Z3B1 X29iamVjdC5vIHZpcnRncHVfZGVidWdmcy5vIHZpcnRncHVfcGxhbmUubworCXZpcnRncHVfZmVu Y2UubyB2aXJ0Z3B1X29iamVjdC5vIHZpcnRncHVfZGVidWdmcy5vIHZpcnRncHVfcGxhbmUubyBc CisJdmlydGdwdV9pb2N0bC5vCiAKIG9iai0kKENPTkZJR19EUk1fVklSVElPX0dQVSkgKz0gdmly dGlvLWdwdS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZHJ2 LmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZHJ2LmMKaW5kZXggN2Q5NjEwYS4u OTU3ZTQ1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2Rydi5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9kcnYuYwpAQCAtNzMsNiArNzMs OSBAQCBzdGF0aWMgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIH07CiAK IHN0YXRpYyB1bnNpZ25lZCBpbnQgZmVhdHVyZXNbXSA9IHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJ QU4KKwlWSVJUSU9fR1BVX0ZFQVRVUkVfVklSR0wsCisjZW5kaWYKIH07CiBzdGF0aWMgc3RydWN0 IHZpcnRpb19kcml2ZXIgdmlydGlvX2dwdV9kcml2ZXIgPSB7CiAJLmZlYXR1cmVfdGFibGUgPSBm ZWF0dXJlcywKQEAgLTExNCw2ICsxMTcsOCBAQCBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJp dmVyID0gewogCS5zZXRfYnVzaWQgPSBkcm1fdmlydGlvX3NldF9idXNpZCwKIAkubG9hZCA9IHZp cnRpb19ncHVfZHJpdmVyX2xvYWQsCiAJLnVubG9hZCA9IHZpcnRpb19ncHVfZHJpdmVyX3VubG9h ZCwKKwkub3BlbiA9IHZpcnRpb19ncHVfZHJpdmVyX29wZW4sCisJLnBvc3RjbG9zZSA9IHZpcnRp b19ncHVfZHJpdmVyX3Bvc3RjbG9zZSwKIAogCS5kdW1iX2NyZWF0ZSA9IHZpcnRpb19ncHVfbW9k ZV9kdW1iX2NyZWF0ZSwKIAkuZHVtYl9tYXBfb2Zmc2V0ID0gdmlydGlvX2dwdV9tb2RlX2R1bWJf bW1hcCwKQEAgLTEyNSw4ICsxMzAsMTMgQEAgc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZl ciA9IHsKICNlbmRpZgogCiAJLmdlbV9mcmVlX29iamVjdCA9IHZpcnRpb19ncHVfZ2VtX2ZyZWVf b2JqZWN0LAorCS5nZW1fb3Blbl9vYmplY3QgPSB2aXJ0aW9fZ3B1X2dlbV9vYmplY3Rfb3BlbiwK KwkuZ2VtX2Nsb3NlX29iamVjdCA9IHZpcnRpb19ncHVfZ2VtX29iamVjdF9jbG9zZSwKIAkuZm9w cyA9ICZ2aXJ0aW9fZ3B1X2RyaXZlcl9mb3BzLAogCisJLmlvY3RscyA9IHZpcnRpb19ncHVfaW9j dGxzLAorCS5udW1faW9jdGxzID0gRFJNX1ZJUlRJT19OVU1fSU9DVExTLAorCiAJLm5hbWUgPSBE UklWRVJfTkFNRSwKIAkuZGVzYyA9IERSSVZFUl9ERVNDLAogCS5kYXRlID0gRFJJVkVSX0RBVEUs CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZHJ2LmggYi9kcml2 ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZHJ2LmgKaW5kZXggNmQ0ZGIyZC4uMjcxOTEwOCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2Rydi5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9kcnYuaApAQCAtMTQ2LDYgKzE0NiwyMSBAQCBz dHJ1Y3QgdmlydGlvX2dwdV9xdWV1ZSB7CiAJc3RydWN0IHdvcmtfc3RydWN0IGRlcXVldWVfd29y azsKIH07CiAKK3N0cnVjdCB2aXJ0aW9fZ3B1X2Rydl9jYXBzZXQgeworCXVpbnQzMl90IGlkOwor CXVpbnQzMl90IG1heF92ZXJzaW9uOworCXVpbnQzMl90IG1heF9zaXplOworfTsKKworc3RydWN0 IHZpcnRpb19ncHVfZHJ2X2NhcF9jYWNoZSB7CisJc3RydWN0IGxpc3RfaGVhZCBoZWFkOworCXZv aWQgKmNhcHNfY2FjaGU7CisJdWludDMyX3QgaWQ7CisJdWludDMyX3QgdmVyc2lvbjsKKwl1aW50 MzJfdCBzaXplOworCWF0b21pY190IGlzX3ZhbGlkOworfTsKKwogc3RydWN0IHZpcnRpb19ncHVf ZGV2aWNlIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRkZXY7 CkBAIC0xNzksNyArMTk0LDEzIEBAIHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSB7CiAJc3RydWN0 IGlkcgljdHhfaWRfaWRyOwogCXNwaW5sb2NrX3QgY3R4X2lkX2lkcl9sb2NrOwogCisJYm9vbCBo YXNfdmlyZ2xfM2Q7CisKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY29uZmlnX2NoYW5nZWRfd29yazsK KworCXN0cnVjdCB2aXJ0aW9fZ3B1X2Rydl9jYXBzZXQgKmNhcHNldHM7CisJdWludDMyX3QgbnVt X2NhcHNldHM7CisJc3RydWN0IGxpc3RfaGVhZCBjYXBfY2FjaGU7CiB9OwogCiBzdHJ1Y3Qgdmly dGlvX2dwdV9mcHJpdiB7CkBAIC0xOTMsNiArMjE0LDggQEAgZXh0ZXJuIHN0cnVjdCBkcm1faW9j dGxfZGVzYyB2aXJ0aW9fZ3B1X2lvY3Rsc1tEUk1fVklSVElPX05VTV9JT0NUTFNdOwogLyogdmly dGlvX2ttcy5jICovCiBpbnQgdmlydGlvX2dwdV9kcml2ZXJfbG9hZChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIGludCB2aXJ0aW9fZ3B1X2RyaXZlcl91bmxv YWQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitpbnQgdmlydGlvX2dwdV9kcml2ZXJfb3Blbihz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwordm9pZCB2aXJ0 aW9fZ3B1X2RyaXZlcl9wb3N0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRy bV9maWxlICpmaWxlKTsKIAogLyogdmlydGlvX2dlbS5jICovCiB2b2lkIHZpcnRpb19ncHVfZ2Vt X2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaik7CkBAIC0yMDMsNiAr MjI2LDEwIEBAIGludCB2aXJ0aW9fZ3B1X2dlbV9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxl LAogCQkJICB1aW50NjRfdCBzaXplLAogCQkJICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKipvYmpf cCwKIAkJCSAgdWludDMyX3QgKmhhbmRsZV9wKTsKK2ludCB2aXJ0aW9fZ3B1X2dlbV9vYmplY3Rf b3BlbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGUpOwordm9pZCB2aXJ0aW9fZ3B1X2dlbV9vYmplY3RfY2xvc2Uoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmosCisJCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7CiBzdHJ1Y3Qgdmly dGlvX2dwdV9vYmplY3QgKnZpcnRpb19ncHVfYWxsb2Nfb2JqZWN0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCiAJCQkJCQkgIHNpemVfdCBzaXplLCBib29sIGtlcm5lbCwKIAkJCQkJCSAgYm9vbCBw aW5uZWQpOwpAQCAtMjYwLDEwICsyODcsNDMgQEAgdm9pZCB2aXJ0aW9fZ3B1X2N1cnNvcl9waW5n KHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsCiBpbnQgdmlydGlvX2dwdV9jbWRfZ2V0 X2Rpc3BsYXlfaW5mbyhzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2KTsKIHZvaWQgdmly dGlvX2dwdV9jbWRfcmVzb3VyY2VfaW52YWxfYmFja2luZyhzdHJ1Y3QgdmlydGlvX2dwdV9kZXZp Y2UgKnZnZGV2LAogCQkJCQkgICB1aW50MzJfdCByZXNvdXJjZV9pZCk7CitpbnQgdmlydGlvX2dw dV9jbWRfZ2V0X2NhcHNldF9pbmZvKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsIGlu dCBpZHgpOworaW50IHZpcnRpb19ncHVfY21kX2dldF9jYXBzZXQoc3RydWN0IHZpcnRpb19ncHVf ZGV2aWNlICp2Z2RldiwKKwkJCSAgICAgIGludCBpZHgsIGludCB2ZXJzaW9uLAorCQkJICAgICAg c3RydWN0IHZpcnRpb19ncHVfZHJ2X2NhcF9jYWNoZSAqKmNhY2hlX3ApOwordm9pZCB2aXJ0aW9f Z3B1X2NtZF9jb250ZXh0X2NyZWF0ZShzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LCB1 aW50MzJfdCBpZCwKKwkJCQkgICB1aW50MzJfdCBubGVuLCBjb25zdCBjaGFyICpuYW1lKTsKK3Zv aWQgdmlydGlvX2dwdV9jbWRfY29udGV4dF9kZXN0cm95KHN0cnVjdCB2aXJ0aW9fZ3B1X2Rldmlj ZSAqdmdkZXYsCisJCQkJICAgIHVpbnQzMl90IGlkKTsKK3ZvaWQgdmlydGlvX2dwdV9jbWRfY29u dGV4dF9hdHRhY2hfcmVzb3VyY2Uoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJ CQkJICAgIHVpbnQzMl90IGN0eF9pZCwKKwkJCQkJICAgIHVpbnQzMl90IHJlc291cmNlX2lkKTsK K3ZvaWQgdmlydGlvX2dwdV9jbWRfY29udGV4dF9kZXRhY2hfcmVzb3VyY2Uoc3RydWN0IHZpcnRp b19ncHVfZGV2aWNlICp2Z2RldiwKKwkJCQkJICAgIHVpbnQzMl90IGN0eF9pZCwKKwkJCQkJICAg IHVpbnQzMl90IHJlc291cmNlX2lkKTsKK3ZvaWQgdmlydGlvX2dwdV9jbWRfc3VibWl0KHN0cnVj dCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsCisJCQkgICB2b2lkICpkYXRhLCB1aW50MzJfdCBk YXRhX3NpemUsCisJCQkgICB1aW50MzJfdCBjdHhfaWQsIHN0cnVjdCB2aXJ0aW9fZ3B1X2ZlbmNl ICoqZmVuY2UpOwordm9pZCB2aXJ0aW9fZ3B1X2NtZF90cmFuc2Zlcl9mcm9tX2hvc3RfM2Qoc3Ry dWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJCQkJICB1aW50MzJfdCByZXNvdXJjZV9p ZCwgdWludDMyX3QgY3R4X2lkLAorCQkJCQkgIHVpbnQ2NF90IG9mZnNldCwgdWludDMyX3QgbGV2 ZWwsCisJCQkJCSAgc3RydWN0IHZpcnRpb19ncHVfYm94ICpib3gsCisJCQkJCSAgc3RydWN0IHZp cnRpb19ncHVfZmVuY2UgKipmZW5jZSk7Cit2b2lkIHZpcnRpb19ncHVfY21kX3RyYW5zZmVyX3Rv X2hvc3RfM2Qoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJCQkJdWludDMyX3Qg cmVzb3VyY2VfaWQsIHVpbnQzMl90IGN0eF9pZCwKKwkJCQkJdWludDY0X3Qgb2Zmc2V0LCB1aW50 MzJfdCBsZXZlbCwKKwkJCQkJc3RydWN0IHZpcnRpb19ncHVfYm94ICpib3gsCisJCQkJCXN0cnVj dCB2aXJ0aW9fZ3B1X2ZlbmNlICoqZmVuY2UpOwordm9pZAordmlydGlvX2dwdV9jbWRfcmVzb3Vy Y2VfY3JlYXRlXzNkKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsCisJCQkJICBzdHJ1 Y3QgdmlydGlvX2dwdV9yZXNvdXJjZV9jcmVhdGVfM2QgKnJjXzNkLAorCQkJCSAgc3RydWN0IHZp cnRpb19ncHVfZmVuY2UgKipmZW5jZSk7CiB2b2lkIHZpcnRpb19ncHVfY3RybF9hY2soc3RydWN0 IHZpcnRxdWV1ZSAqdnEpOwogdm9pZCB2aXJ0aW9fZ3B1X2N1cnNvcl9hY2soc3RydWN0IHZpcnRx dWV1ZSAqdnEpOwordm9pZCB2aXJ0aW9fZ3B1X2ZlbmNlX2FjayhzdHJ1Y3QgdmlydHF1ZXVlICp2 cSk7CiB2b2lkIHZpcnRpb19ncHVfZGVxdWV1ZV9jdHJsX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0 ICp3b3JrKTsKIHZvaWQgdmlydGlvX2dwdV9kZXF1ZXVlX2N1cnNvcl9mdW5jKHN0cnVjdCB3b3Jr X3N0cnVjdCAqd29yayk7Cit2b2lkIHZpcnRpb19ncHVfZGVxdWV1ZV9mZW5jZV9mdW5jKHN0cnVj dCB3b3JrX3N0cnVjdCAqd29yayk7CiAKIC8qIHZpcnRpb19ncHVfZGlzcGxheS5jICovCiBpbnQg dmlydGlvX2dwdV9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZ2VtLmMgYi9kcml2ZXJzL2dw dS9kcm0vdmlydGlvL3ZpcnRncHVfZ2VtLmMKaW5kZXggY2ZhMGQyNy4uMWZlYjdjZSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2dlbS5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS92aXJ0aW8vdmlydGdwdV9nZW0uYwpAQCAtMTM4LDMgKzEzOCw0NCBAQCBpbnQgdmly dGlvX2dwdV9tb2RlX2R1bWJfbW1hcChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAlkcm1f Z2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnb2JqKTsKIAlyZXR1cm4gMDsKIH0KKwor aW50IHZpcnRpb19ncHVfZ2VtX29iamVjdF9vcGVuKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LAorCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlydGlvX2dw dV9kZXZpY2UgKnZnZGV2ID0gb2JqLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCB2aXJ0aW9f Z3B1X2Zwcml2ICp2ZnByaXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsKKwlzdHJ1Y3QgdmlydGlvX2dw dV9vYmplY3QgKnFvYmogPSBnZW1fdG9fdmlydGlvX2dwdV9vYmoob2JqKTsKKwlpbnQgcjsKKwor CWlmICghdmdkZXYtPmhhc192aXJnbF8zZCkKKwkJcmV0dXJuIDA7CisKKwlyID0gdmlydGlvX2dw dV9vYmplY3RfcmVzZXJ2ZShxb2JqLCBmYWxzZSk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJ dmlydGlvX2dwdV9jbWRfY29udGV4dF9hdHRhY2hfcmVzb3VyY2UodmdkZXYsIHZmcHJpdi0+Y3R4 X2lkLAorCQkJCQkgICAgICAgcW9iai0+aHdfcmVzX2hhbmRsZSk7CisJdmlydGlvX2dwdV9vYmpl Y3RfdW5yZXNlcnZlKHFvYmopOworCXJldHVybiAwOworfQorCit2b2lkIHZpcnRpb19ncHVfZ2Vt X29iamVjdF9jbG9zZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgc3RydWN0IGRy bV9maWxlICpmaWxlKQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYgPSBvYmot PmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHZpcnRpb19ncHVfZnByaXYgKnZmcHJpdiA9IGZp bGUtPmRyaXZlcl9wcml2OworCXN0cnVjdCB2aXJ0aW9fZ3B1X29iamVjdCAqcW9iaiA9IGdlbV90 b192aXJ0aW9fZ3B1X29iaihvYmopOworCWludCByOworCisJaWYgKCF2Z2Rldi0+aGFzX3Zpcmds XzNkKQorCQlyZXR1cm47CisKKwlyID0gdmlydGlvX2dwdV9vYmplY3RfcmVzZXJ2ZShxb2JqLCBm YWxzZSk7CisJaWYgKHIpCisJCXJldHVybjsKKworCXZpcnRpb19ncHVfY21kX2NvbnRleHRfZGV0 YWNoX3Jlc291cmNlKHZnZGV2LCB2ZnByaXYtPmN0eF9pZCwKKwkJCQkJCXFvYmotPmh3X3Jlc19o YW5kbGUpOworCXZpcnRpb19ncHVfb2JqZWN0X3VucmVzZXJ2ZShxb2JqKTsKK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9pb2N0bC5jIGIvZHJpdmVycy9ncHUv ZHJtL3ZpcnRpby92aXJ0Z3B1X2lvY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uZDVjOWUwMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8v dmlydGdwdV9pb2N0bC5jCkBAIC0wLDAgKzEsNTcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy MDE1IFJlZCBIYXQsIEluYy4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQXV0aG9y czoKKyAqICAgIERhdmUgQWlybGllCisgKiAgICBBbG9uIExldnkKKyAqCisgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl IGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFks CisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhP UihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us CisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAq LworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlICJ2aXJ0Z3B1X2Rydi5oIgorI2lu Y2x1ZGUgPGRybS92aXJ0Z3B1X2RybS5oPgorI2luY2x1ZGUgInR0bS90dG1fZXhlY2J1Zl91dGls LmgiCisKK3N0YXRpYyB2b2lkIGNvbnZlcnRfdG9faHdfYm94KHN0cnVjdCB2aXJ0aW9fZ3B1X2Jv eCAqZHN0LAorCQkJICAgICAgY29uc3Qgc3RydWN0IGRybV92aXJ0Z3B1XzNkX2JveCAqc3JjKQor eworCWRzdC0+eCA9IGNwdV90b19sZTMyKHNyYy0+eCk7CisJZHN0LT55ID0gY3B1X3RvX2xlMzIo c3JjLT55KTsKKwlkc3QtPnogPSBjcHVfdG9fbGUzMihzcmMtPnopOworCWRzdC0+dyA9IGNwdV90 b19sZTMyKHNyYy0+dyk7CisJZHN0LT5oID0gY3B1X3RvX2xlMzIoc3JjLT5oKTsKKwlkc3QtPmQg PSBjcHVfdG9fbGUzMihzcmMtPmQpOworfQorCitzdGF0aWMgaW50IHZpcnRpb19ncHVfbWFwX2lv Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkJc3RydWN0IGRybV9m aWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiA9IGRl di0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV92aXJ0Z3B1X21hcCAqdmlydGlvX2dwdV9tYXAg PSBkYXRhOworCisJcmV0dXJuIHZpcnRpb19ncHVfbW9kZV9kdW1iX21tYXAoZmlsZV9wcml2LCB2 Z2Rldi0+ZGRldiwKKwkJCQkJIHZpcnRpb19ncHVfbWFwLT5oYW5kbGUsCisJCQkJCSAmdmlydGlv X2dwdV9tYXAtPm9mZnNldCk7Cit9CisKK3N0YXRpYyBpbnQgdmlydGlvX2dwdV9vYmplY3RfbGlz dF92YWxpZGF0ZShzdHJ1Y3Qgd3dfYWNxdWlyZV9jdHggKnRpY2tldCwKKwkJCQkJICAgc3RydWN0 IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciAqYnVmOwor CXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm87CisJc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0 ICpxb2JqOworCWludCByZXQ7CisKKwlyZXQgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKHRpY2tl dCwgaGVhZCwgdHJ1ZSwgTlVMTCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJ bGlzdF9mb3JfZWFjaF9lbnRyeShidWYsIGhlYWQsIGhlYWQpIHsKKwkJYm8gPSBidWYtPmJvOwor CQlxb2JqID0gY29udGFpbmVyX29mKGJvLCBzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QsIHRibyk7 CisJCXJldCA9IHR0bV9ib192YWxpZGF0ZShibywgJnFvYmotPnBsYWNlbWVudCwgZmFsc2UsIGZh bHNlKTsKKwkJaWYgKHJldCkgeworCQkJdHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRpb24odGlja2V0 LCBoZWFkKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyB2b2lkIHZpcnRpb19ncHVfdW5yZWZfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQorewor CXN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyICpidWY7CisJc3RydWN0IHR0bV9idWZmZXJfb2Jq ZWN0ICpibzsKKwlzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKnFvYmo7CisJbGlzdF9mb3JfZWFj aF9lbnRyeShidWYsIGhlYWQsIGhlYWQpIHsKKwkJYm8gPSBidWYtPmJvOworCQlxb2JqID0gY29u dGFpbmVyX29mKGJvLCBzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QsIHRibyk7CisKKwkJZHJtX2dl bV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJnFvYmotPmdlbV9iYXNlKTsKKwl9Cit9CisK K3N0YXRpYyBpbnQgdmlydGlvX2dwdV9leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CisJCQkJIHN0cnVjdCBkcm1fdmlydGdwdV9leGVjYnVmZmVyICpleGJ1ZiwKKwkJCQkgc3RydWN0 IGRybV9maWxlICpkcm1fZmlsZSkKK3sKKwlzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgdmlydGlvX2dwdV9mcHJpdiAqdmZwcml2ID0g ZHJtX2ZpbGUtPmRyaXZlcl9wcml2OworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ29iajsKKwlz dHJ1Y3QgdmlydGlvX2dwdV9mZW5jZSAqZmVuY2U7CisJc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0 ICpxb2JqOworCWludCByZXQ7CisJdWludDMyX3QgKmJvX2hhbmRsZXMgPSBOVUxMOworCXZvaWQg X191c2VyICp1c2VyX2JvX2hhbmRsZXMgPSBOVUxMOworCXN0cnVjdCBsaXN0X2hlYWQgdmFsaWRh dGVfbGlzdDsKKwlzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciAqYnVmbGlzdCA9IE5VTEw7CisJ c3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIgY21kYnVmZmVyOworCWludCBpOworCXN0cnVjdCB3 d19hY3F1aXJlX2N0eCB0aWNrZXQ7CisJdm9pZCAqYnVmOworCisJaWYgKHZnZGV2LT5oYXNfdmly Z2xfM2QgPT0gZmFsc2UpCisJCXJldHVybiAtRU5PU1lTOworCisJbWVtc2V0KCZjbWRidWZmZXIs IDAsIHNpemVvZihzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlcikpOworCUlOSVRfTElTVF9IRUFE KCZ2YWxpZGF0ZV9saXN0KTsKKwlpZiAoZXhidWYtPm51bV9ib19oYW5kbGVzKSB7CisKKwkJYm9f aGFuZGxlcyA9IGRybV9tYWxsb2NfYWIoZXhidWYtPm51bV9ib19oYW5kbGVzLAorCQkJCQkgICBz aXplb2YodWludDMyX3QpKTsKKwkJYnVmbGlzdCA9IGRybV9jYWxsb2NfbGFyZ2UoZXhidWYtPm51 bV9ib19oYW5kbGVzLAorCQkJCQkgICBzaXplb2Yoc3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIp KTsKKwkJaWYgKCFib19oYW5kbGVzIHx8ICFidWZsaXN0KSB7CisJCQlkcm1fZnJlZV9sYXJnZShi b19oYW5kbGVzKTsKKwkJCWRybV9mcmVlX2xhcmdlKGJ1Zmxpc3QpOworCQkJcmV0dXJuIC1FTk9N RU07CisJCX0KKworCQl1c2VyX2JvX2hhbmRsZXMgPSAodm9pZCBfX3VzZXIgKikodWludHB0cl90 KWV4YnVmLT5ib19oYW5kbGVzOworCQlpZiAoY29weV9mcm9tX3VzZXIoYm9faGFuZGxlcywgdXNl cl9ib19oYW5kbGVzLAorCQkJCSAgIGV4YnVmLT5udW1fYm9faGFuZGxlcyAqIHNpemVvZih1aW50 MzJfdCkpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZHJtX2ZyZWVfbGFyZ2UoYm9faGFuZGxl cyk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IGV4YnVmLT5udW1f Ym9faGFuZGxlczsgaSsrKSB7CisJCQlnb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwK KwkJCQkJCSAgICAgZHJtX2ZpbGUsIGJvX2hhbmRsZXNbaV0pOworCQkJaWYgKCFnb2JqKSB7CisJ CQkJZHJtX2ZyZWVfbGFyZ2UoYm9faGFuZGxlcyk7CisJCQkJZHJtX2ZyZWVfbGFyZ2UoYnVmbGlz dCk7CisJCQkJcmV0dXJuIC1FTk9FTlQ7CisJCQl9CisKKwkJCXFvYmogPSBnZW1fdG9fdmlydGlv X2dwdV9vYmooZ29iaik7CisJCQlidWZsaXN0W2ldLmJvID0gJnFvYmotPnRibzsKKworCQkJbGlz dF9hZGQoJmJ1Zmxpc3RbaV0uaGVhZCwgJnZhbGlkYXRlX2xpc3QpOworCQl9CisJCWRybV9mcmVl X2xhcmdlKGJvX2hhbmRsZXMpOworCX0KKworCXJldCA9IHZpcnRpb19ncHVfb2JqZWN0X2xpc3Rf dmFsaWRhdGUoJnRpY2tldCwgJnZhbGlkYXRlX2xpc3QpOworCWlmIChyZXQpCisJCWdvdG8gb3V0 X2ZyZWU7CisKKwlidWYgPSBrbWFsbG9jKGV4YnVmLT5zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAo IWJ1ZikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF91bnJlc3Y7CisJfQorCWlmIChj b3B5X2Zyb21fdXNlcihidWYsICh2b2lkIF9fdXNlciAqKSh1aW50cHRyX3QpZXhidWYtPmNvbW1h bmQsCisJCQkgICBleGJ1Zi0+c2l6ZSkpIHsKKwkJa2ZyZWUoYnVmKTsKKwkJcmV0ID0gLUVGQVVM VDsKKwkJZ290byBvdXRfdW5yZXN2OworCX0KKwl2aXJ0aW9fZ3B1X2NtZF9zdWJtaXQodmdkZXYs IGJ1ZiwgZXhidWYtPnNpemUsCisJCQkgICAgICB2ZnByaXYtPmN0eF9pZCwgJmZlbmNlKTsKKwor CXR0bV9ldV9mZW5jZV9idWZmZXJfb2JqZWN0cygmdGlja2V0LCAmdmFsaWRhdGVfbGlzdCwgJmZl bmNlLT5mKTsKKworCS8qIGZlbmNlIHRoZSBjb21tYW5kIGJvICovCisJdmlydGlvX2dwdV91bnJl Zl9saXN0KCZ2YWxpZGF0ZV9saXN0KTsKKwlkcm1fZnJlZV9sYXJnZShidWZsaXN0KTsKKwlmZW5j ZV9wdXQoJmZlbmNlLT5mKTsKKwlyZXR1cm4gMDsKKworb3V0X3VucmVzdjoKKwl0dG1fZXVfYmFj a29mZl9yZXNlcnZhdGlvbigmdGlja2V0LCAmdmFsaWRhdGVfbGlzdCk7CitvdXRfZnJlZToKKwl2 aXJ0aW9fZ3B1X3VucmVmX2xpc3QoJnZhbGlkYXRlX2xpc3QpOworCWRybV9mcmVlX2xhcmdlKGJ1 Zmxpc3QpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBVc2FnZSBvZiBleGVjYnVmZmVyOgor ICogUmVsb2NhdGlvbnMgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgZnVsbCBWSVJUSU9f R1BVRHJhd2FibGUgc2l6ZS4KKyAqIEhvd2V2ZXIsIHRoZSBjb21tYW5kIGFzIHBhc3NlZCBmcm9t IHVzZXIgc3BhY2UgbXVzdCAqbm90KiBjb250YWluIHRoZSBpbml0aWFsCisgKiBWSVJUSU9fR1BV UmVsZWFzZUluZm8gc3RydWN0IChmaXJzdCBYWFggYnl0ZXMpCisgKi8KK3N0YXRpYyBpbnQgdmly dGlvX2dwdV9leGVjYnVmZmVyX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRh dGEsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBk cm1fdmlydGdwdV9leGVjYnVmZmVyICpleGVjYnVmZmVyID0gZGF0YTsKKwlyZXR1cm4gdmlydGlv X2dwdV9leGVjYnVmZmVyKGRldiwgZXhlY2J1ZmZlciwgZmlsZV9wcml2KTsKK30KKworCitzdGF0 aWMgaW50IHZpcnRpb19ncHVfZ2V0cGFyYW1faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dm9pZCAqZGF0YSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0 cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVj dCBkcm1fdmlydGdwdV9nZXRwYXJhbSAqcGFyYW0gPSBkYXRhOworCWludCB2YWx1ZTsKKworCXN3 aXRjaCAocGFyYW0tPnBhcmFtKSB7CisJY2FzZSBWSVJUR1BVX1BBUkFNXzNEX0ZFQVRVUkVTOgor CQl2YWx1ZSA9IHZnZGV2LT5oYXNfdmlyZ2xfM2QgPT0gdHJ1ZSA/IDEgOiAwOworCQlicmVhazsK KwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGNvcHlfdG9fdXNlcigodm9p ZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZylwYXJhbS0+dmFsdWUsCisJCQkgJnZhbHVlLCBzaXpl b2YoaW50KSkpIHsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHZpcnRpb19ncHVfcmVzb3VyY2VfY3JlYXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsCisJCQkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikK K3sKKwlzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK KwlzdHJ1Y3QgZHJtX3ZpcnRncHVfcmVzb3VyY2VfY3JlYXRlICpyYyA9IGRhdGE7CisJaW50IHJl dDsKKwl1aW50MzJfdCByZXNfaWQ7CisJc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0ICpxb2JqOwor CXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXVpbnQzMl90IGhhbmRsZSA9IDA7CisJdWlu dDMyX3Qgc2l6ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHZhbGlkYXRlX2xpc3Q7CisJc3RydWN0IHR0 bV92YWxpZGF0ZV9idWZmZXIgbWFpbmJ1ZjsKKwlzdHJ1Y3QgdmlydGlvX2dwdV9mZW5jZSAqZmVu Y2UgPSBOVUxMOworCXN0cnVjdCB3d19hY3F1aXJlX2N0eCB0aWNrZXQ7CisJc3RydWN0IHZpcnRp b19ncHVfcmVzb3VyY2VfY3JlYXRlXzNkIHJjXzNkOworCisJaWYgKHZnZGV2LT5oYXNfdmlyZ2xf M2QgPT0gZmFsc2UpIHsKKwkJaWYgKHJjLT5kZXB0aCA+IDEpCisJCQlyZXR1cm4gLUVJTlZBTDsK KwkJaWYgKHJjLT5ucl9zYW1wbGVzID4gMSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAocmMt Pmxhc3RfbGV2ZWwgPiAxKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChyYy0+dGFyZ2V0ICE9 IDIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHJjLT5hcnJheV9zaXplID4gMSkKKwkJCXJl dHVybiAtRUlOVkFMOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZ2YWxpZGF0ZV9saXN0KTsKKwlt ZW1zZXQoJm1haW5idWYsIDAsIHNpemVvZihzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlcikpOwor CisJdmlydGlvX2dwdV9yZXNvdXJjZV9pZF9nZXQodmdkZXYsICZyZXNfaWQpOworCisJc2l6ZSA9 IHJjLT5zaXplOworCisJLyogYWxsb2NhdGUgYSBzaW5nbGUgcGFnZSBzaXplIG9iamVjdCAqLwor CWlmIChzaXplID09IDApCisJCXNpemUgPSBQQUdFX1NJWkU7CisKKwlxb2JqID0gdmlydGlvX2dw dV9hbGxvY19vYmplY3QoZGV2LCBzaXplLCBmYWxzZSwgZmFsc2UpOworCWlmIChJU19FUlIocW9i aikpIHsKKwkJcmV0ID0gUFRSX0VSUihxb2JqKTsKKwkJZ290byBmYWlsX2lkOworCX0KKwlvYmog PSAmcW9iai0+Z2VtX2Jhc2U7CisKKwlpZiAoIXZnZGV2LT5oYXNfdmlyZ2xfM2QpIHsKKwkJdmly dGlvX2dwdV9jbWRfY3JlYXRlX3Jlc291cmNlKHZnZGV2LCByZXNfaWQsIHJjLT5mb3JtYXQsCisJ CQkJCSAgICAgICByYy0+d2lkdGgsIHJjLT5oZWlnaHQpOworCisJCXJldCA9IHZpcnRpb19ncHVf b2JqZWN0X2F0dGFjaCh2Z2RldiwgcW9iaiwgcmVzX2lkLCBOVUxMKTsKKwl9IGVsc2UgeworCQkv KiB1c2UgYSBnZW0gcmVmZXJlbmNlIHNpbmNlIHVucmVmIGxpc3QgdW5kb2VzIHRoZW0gKi8KKwkJ ZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKCZxb2JqLT5nZW1fYmFzZSk7CisJCW1haW5idWYuYm8g PSAmcW9iai0+dGJvOworCQlsaXN0X2FkZCgmbWFpbmJ1Zi5oZWFkLCAmdmFsaWRhdGVfbGlzdCk7 CisKKwkJcmV0ID0gdmlydGlvX2dwdV9vYmplY3RfbGlzdF92YWxpZGF0ZSgmdGlja2V0LCAmdmFs aWRhdGVfbGlzdCk7CisJCWlmIChyZXQpIHsKKwkJCURSTV9ERUJVRygiZmFpbGVkIHRvIHZhbGlk YXRlXG4iKTsKKwkJCWdvdG8gZmFpbF91bnJlZjsKKwkJfQorCisJCXJjXzNkLnJlc291cmNlX2lk ID0gY3B1X3RvX2xlMzIocmVzX2lkKTsKKwkJcmNfM2QudGFyZ2V0ID0gY3B1X3RvX2xlMzIocmMt PnRhcmdldCk7CisJCXJjXzNkLmZvcm1hdCA9IGNwdV90b19sZTMyKHJjLT5mb3JtYXQpOworCQly Y18zZC5iaW5kID0gY3B1X3RvX2xlMzIocmMtPmJpbmQpOworCQlyY18zZC53aWR0aCA9IGNwdV90 b19sZTMyKHJjLT53aWR0aCk7CisJCXJjXzNkLmhlaWdodCA9IGNwdV90b19sZTMyKHJjLT5oZWln aHQpOworCQlyY18zZC5kZXB0aCA9IGNwdV90b19sZTMyKHJjLT5kZXB0aCk7CisJCXJjXzNkLmFy cmF5X3NpemUgPSBjcHVfdG9fbGUzMihyYy0+YXJyYXlfc2l6ZSk7CisJCXJjXzNkLmxhc3RfbGV2 ZWwgPSBjcHVfdG9fbGUzMihyYy0+bGFzdF9sZXZlbCk7CisJCXJjXzNkLm5yX3NhbXBsZXMgPSBj cHVfdG9fbGUzMihyYy0+bnJfc2FtcGxlcyk7CisJCXJjXzNkLmZsYWdzID0gY3B1X3RvX2xlMzIo cmMtPmZsYWdzKTsKKworCQl2aXJ0aW9fZ3B1X2NtZF9yZXNvdXJjZV9jcmVhdGVfM2QodmdkZXYs ICZyY18zZCwgTlVMTCk7CisJCXJldCA9IHZpcnRpb19ncHVfb2JqZWN0X2F0dGFjaCh2Z2Rldiwg cW9iaiwgcmVzX2lkLCAmZmVuY2UpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsX3VucmVmOwor CQl0dG1fZXVfZmVuY2VfYnVmZmVyX29iamVjdHMoJnRpY2tldCwgJnZhbGlkYXRlX2xpc3QsICZm ZW5jZS0+Zik7CisJfQorCisJcW9iai0+aHdfcmVzX2hhbmRsZSA9IHJlc19pZDsKKworCXJldCA9 IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsIG9iaiwgJmhhbmRsZSk7CisJaWYgKHJl dCkgeworCisJCWRybV9nZW1fb2JqZWN0X3JlbGVhc2Uob2JqKTsKKwkJaWYgKHZnZGV2LT5oYXNf dmlyZ2xfM2QpIHsKKwkJCXZpcnRpb19ncHVfdW5yZWZfbGlzdCgmdmFsaWRhdGVfbGlzdCk7CisJ CQlmZW5jZV9wdXQoJmZlbmNlLT5mKTsKKwkJfQorCQlyZXR1cm4gcmV0OworCX0KKwlkcm1fZ2Vt X29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOworCisJcmMtPnJlc19oYW5kbGUgPSBy ZXNfaWQ7IC8qIHNpbWlsaWFyIHRvIGEgVk0gYWRkcmVzcyAqLworCXJjLT5ib19oYW5kbGUgPSBo YW5kbGU7CisKKwlpZiAodmdkZXYtPmhhc192aXJnbF8zZCkgeworCQl2aXJ0aW9fZ3B1X3VucmVm X2xpc3QoJnZhbGlkYXRlX2xpc3QpOworCQlmZW5jZV9wdXQoJmZlbmNlLT5mKTsKKwl9CisJcmV0 dXJuIDA7CitmYWlsX3VucmVmOgorCWlmICh2Z2Rldi0+aGFzX3ZpcmdsXzNkKSB7CisJCXZpcnRp b19ncHVfdW5yZWZfbGlzdCgmdmFsaWRhdGVfbGlzdCk7CisJCWZlbmNlX3B1dCgmZmVuY2UtPmYp OworCX0KKy8vZmFpbF9vYmo6CisvLwlkcm1fZ2VtX29iamVjdF9oYW5kbGVfdW5yZWZlcmVuY2Vf dW5sb2NrZWQob2JqKTsKK2ZhaWxfaWQ6CisJdmlydGlvX2dwdV9yZXNvdXJjZV9pZF9wdXQodmdk ZXYsIHJlc19pZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2aXJ0aW9fZ3B1X3Jl c291cmNlX2luZm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJ CQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX3ZpcnRncHVf cmVzb3VyY2VfaW5mbyAqcmkgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ29iaiA9 IE5VTEw7CisJc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0ICpxb2JqID0gTlVMTDsKKworCWdvYmog PSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIHJpLT5ib19oYW5kbGUpOwor CWlmIChnb2JqID09IE5VTEwpCisJCXJldHVybiAtRU5PRU5UOworCisJcW9iaiA9IGdlbV90b192 aXJ0aW9fZ3B1X29iaihnb2JqKTsKKworCXJpLT5zaXplID0gcW9iai0+Z2VtX2Jhc2Uuc2l6ZTsK KwlyaS0+cmVzX2hhbmRsZSA9IHFvYmotPmh3X3Jlc19oYW5kbGU7CisJZHJtX2dlbV9vYmplY3Rf dW5yZWZlcmVuY2VfdW5sb2NrZWQoZ29iaik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg dmlydGlvX2dwdV90cmFuc2Zlcl9mcm9tX2hvc3RfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKKwkJCQkJICAgICAgIHZvaWQgKmRhdGEsCisJCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGUpCit7CisJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiA9IGRldi0+ZGV2X3By aXZhdGU7CisJc3RydWN0IHZpcnRpb19ncHVfZnByaXYgKnZmcHJpdiA9IGZpbGUtPmRyaXZlcl9w cml2OworCXN0cnVjdCBkcm1fdmlydGdwdV8zZF90cmFuc2Zlcl9mcm9tX2hvc3QgKmFyZ3MgPSBk YXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ29iaiA9IE5VTEw7CisJc3RydWN0IHZpcnRp b19ncHVfb2JqZWN0ICpxb2JqID0gTlVMTDsKKwlzdHJ1Y3QgdmlydGlvX2dwdV9mZW5jZSAqZmVu Y2U7CisJaW50IHJldDsKKwl1MzIgb2Zmc2V0ID0gYXJncy0+b2Zmc2V0OworCXN0cnVjdCB2aXJ0 aW9fZ3B1X2JveCBib3g7CisKKwlpZiAodmdkZXYtPmhhc192aXJnbF8zZCA9PSBmYWxzZSkKKwkJ cmV0dXJuIC1FTk9TWVM7CisKKwlnb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmls ZSwgYXJncy0+Ym9faGFuZGxlKTsKKwlpZiAoZ29iaiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0VO VDsKKworCXFvYmogPSBnZW1fdG9fdmlydGlvX2dwdV9vYmooZ29iaik7CisKKwlyZXQgPSB2aXJ0 aW9fZ3B1X29iamVjdF9yZXNlcnZlKHFvYmosIGZhbHNlKTsKKwlpZiAocmV0KQorCQlnb3RvIG91 dDsKKworCXJldCA9IHR0bV9ib192YWxpZGF0ZSgmcW9iai0+dGJvLCAmcW9iai0+cGxhY2VtZW50 LAorCQkJICAgICAgdHJ1ZSwgZmFsc2UpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIG91 dF91bnJlczsKKworCWNvbnZlcnRfdG9faHdfYm94KCZib3gsICZhcmdzLT5ib3gpOworCXZpcnRp b19ncHVfY21kX3RyYW5zZmVyX2Zyb21faG9zdF8zZAorCQkodmdkZXYsIHFvYmotPmh3X3Jlc19o YW5kbGUsCisJCSB2ZnByaXYtPmN0eF9pZCwgb2Zmc2V0LCBhcmdzLT5sZXZlbCwKKwkJICZib3gs ICZmZW5jZSk7CisJcmVzZXJ2YXRpb25fb2JqZWN0X2FkZF9leGNsX2ZlbmNlKHFvYmotPnRiby5y ZXN2LAorCQkJCQkgICZmZW5jZS0+Zik7CisKKwlmZW5jZV9wdXQoJmZlbmNlLT5mKTsKK291dF91 bnJlczoKKwl2aXJ0aW9fZ3B1X29iamVjdF91bnJlc2VydmUocW9iaik7CitvdXQ6CisJZHJtX2dl bV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ29iaik7CisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludCB2aXJ0aW9fZ3B1X3RyYW5zZmVyX3RvX2hvc3RfaW9jdGwoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUp Cit7CisJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiA9IGRldi0+ZGV2X3ByaXZhdGU7 CisJc3RydWN0IHZpcnRpb19ncHVfZnByaXYgKnZmcHJpdiA9IGZpbGUtPmRyaXZlcl9wcml2Owor CXN0cnVjdCBkcm1fdmlydGdwdV8zZF90cmFuc2Zlcl90b19ob3N0ICphcmdzID0gZGF0YTsKKwlz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdvYmogPSBOVUxMOworCXN0cnVjdCB2aXJ0aW9fZ3B1X29i amVjdCAqcW9iaiA9IE5VTEw7CisJc3RydWN0IHZpcnRpb19ncHVfZmVuY2UgKmZlbmNlOworCXN0 cnVjdCB2aXJ0aW9fZ3B1X2JveCBib3g7CisJaW50IHJldDsKKwl1MzIgb2Zmc2V0ID0gYXJncy0+ b2Zmc2V0OworCisJZ29iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGUsIGFyZ3Mt PmJvX2hhbmRsZSk7CisJaWYgKGdvYmogPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlx b2JqID0gZ2VtX3RvX3ZpcnRpb19ncHVfb2JqKGdvYmopOworCisJcmV0ID0gdmlydGlvX2dwdV9v YmplY3RfcmVzZXJ2ZShxb2JqLCBmYWxzZSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwly ZXQgPSB0dG1fYm9fdmFsaWRhdGUoJnFvYmotPnRibywgJnFvYmotPnBsYWNlbWVudCwKKwkJCSAg ICAgIHRydWUsIGZhbHNlKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBvdXRfdW5yZXM7 CisKKwljb252ZXJ0X3RvX2h3X2JveCgmYm94LCAmYXJncy0+Ym94KTsKKwlpZiAoIXZnZGV2LT5o YXNfdmlyZ2xfM2QpIHsKKwkJdmlydGlvX2dwdV9jbWRfdHJhbnNmZXJfdG9faG9zdF8yZAorCQkJ KHZnZGV2LCBxb2JqLT5od19yZXNfaGFuZGxlLCBvZmZzZXQsCisJCQkgYm94LncsIGJveC5oLCBi b3gueCwgYm94LnksIE5VTEwpOworCX0gZWxzZSB7CisJCXZpcnRpb19ncHVfY21kX3RyYW5zZmVy X3RvX2hvc3RfM2QKKwkJCSh2Z2RldiwgcW9iai0+aHdfcmVzX2hhbmRsZSwKKwkJCSB2ZnByaXYg PyB2ZnByaXYtPmN0eF9pZCA6IDAsIG9mZnNldCwKKwkJCSBhcmdzLT5sZXZlbCwgJmJveCwgJmZl bmNlKTsKKwkJcmVzZXJ2YXRpb25fb2JqZWN0X2FkZF9leGNsX2ZlbmNlKHFvYmotPnRiby5yZXN2 LAorCQkJCQkJICAmZmVuY2UtPmYpOworCQlmZW5jZV9wdXQoJmZlbmNlLT5mKTsKKwl9CisKK291 dF91bnJlczoKKwl2aXJ0aW9fZ3B1X29iamVjdF91bnJlc2VydmUocW9iaik7CitvdXQ6CisJZHJt X2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ29iaik7CisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGludCB2aXJ0aW9fZ3B1X3dhaXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwKKwkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJc3RydWN0 IGRybV92aXJ0Z3B1XzNkX3dhaXQgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVj dCAqZ29iaiA9IE5VTEw7CisJc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0ICpxb2JqID0gTlVMTDsK KwlpbnQgcmV0OworCWJvb2wgbm93YWl0ID0gZmFsc2U7CisKKwlnb2JqID0gZHJtX2dlbV9vYmpl Y3RfbG9va3VwKGRldiwgZmlsZSwgYXJncy0+aGFuZGxlKTsKKwlpZiAoZ29iaiA9PSBOVUxMKQor CQlyZXR1cm4gLUVOT0VOVDsKKworCXFvYmogPSBnZW1fdG9fdmlydGlvX2dwdV9vYmooZ29iaik7 CisKKwlpZiAoYXJncy0+ZmxhZ3MgJiBWSVJUR1BVX1dBSVRfTk9XQUlUKQorCQlub3dhaXQgPSB0 cnVlOworCXJldCA9IHZpcnRpb19ncHVfb2JqZWN0X3dhaXQocW9iaiwgbm93YWl0KTsKKworCWRy bV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdvYmopOworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBpbnQgdmlydGlvX2dwdV9nZXRfY2Fwc19pb2N0bChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAorCQkJCXZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1 Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qg ZHJtX3ZpcnRncHVfZ2V0X2NhcHMgKmFyZ3MgPSBkYXRhOworCWludCBzaXplOworCWludCBpOwor CWludCBmb3VuZF92YWxpZCA9IC0xOworCWludCByZXQ7CisJc3RydWN0IHZpcnRpb19ncHVfZHJ2 X2NhcF9jYWNoZSAqY2FjaGVfZW50OworCXZvaWQgKnB0cjsKKwlpZiAodmdkZXYtPm51bV9jYXBz ZXRzID09IDApCisJCXJldHVybiAtRU5PU1lTOworCisJc3Bpbl9sb2NrKCZ2Z2Rldi0+ZGlzcGxh eV9pbmZvX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCB2Z2Rldi0+bnVtX2NhcHNldHM7IGkrKykg eworCQlpZiAodmdkZXYtPmNhcHNldHNbaV0uaWQgPT0gYXJncy0+Y2FwX3NldF9pZCkgeworCQkJ aWYgKHZnZGV2LT5jYXBzZXRzW2ldLm1heF92ZXJzaW9uID49IGFyZ3MtPmNhcF9zZXRfdmVyKSB7 CisJCQkJZm91bmRfdmFsaWQgPSBpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYg KGZvdW5kX3ZhbGlkID09IC0xKSB7CisJCXNwaW5fdW5sb2NrKCZ2Z2Rldi0+ZGlzcGxheV9pbmZv X2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzaXplID0gdmdkZXYtPmNhcHNldHNb Zm91bmRfdmFsaWRdLm1heF9zaXplOworCWlmIChhcmdzLT5zaXplID4gc2l6ZSkgeworCQlzcGlu X3VubG9jaygmdmdkZXYtPmRpc3BsYXlfaW5mb19sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjYWNoZV9lbnQsICZ2Z2Rldi0+Y2FwX2NhY2hlLCBo ZWFkKSB7CisJCWlmIChjYWNoZV9lbnQtPmlkID09IGFyZ3MtPmNhcF9zZXRfaWQgJiYKKwkJICAg IGNhY2hlX2VudC0+dmVyc2lvbiA9PSBhcmdzLT5jYXBfc2V0X3ZlcikgeworCQkJcHRyID0gY2Fj aGVfZW50LT5jYXBzX2NhY2hlOworCQkJc3Bpbl91bmxvY2soJnZnZGV2LT5kaXNwbGF5X2luZm9f bG9jayk7CisJCQlnb3RvIGNvcHlfZXhpdDsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmdmdkZXYt PmRpc3BsYXlfaW5mb19sb2NrKTsKKworCS8qIG5vdCBpbiBjYWNoZSAtIG5lZWQgdG8gdGFsayB0 byBodyAqLworCXZpcnRpb19ncHVfY21kX2dldF9jYXBzZXQodmdkZXYsIGZvdW5kX3ZhbGlkLCBh cmdzLT5jYXBfc2V0X3ZlciwKKwkJCQkgICZjYWNoZV9lbnQpOworCisJcmV0ID0gd2FpdF9ldmVu dF90aW1lb3V0KHZnZGV2LT5yZXNwX3dxLAorCQkJCSBhdG9taWNfcmVhZCgmY2FjaGVfZW50LT5p c192YWxpZCksIDUgKiBIWik7CisKKwlwdHIgPSBjYWNoZV9lbnQtPmNhcHNfY2FjaGU7CisKK2Nv cHlfZXhpdDoKKwlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25n KWFyZ3MtPmFkZHIsIHB0ciwgc2l6ZSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7 Cit9CisKK3N0cnVjdCBkcm1faW9jdGxfZGVzYyB2aXJ0aW9fZ3B1X2lvY3Rsc1tEUk1fVklSVElP X05VTV9JT0NUTFNdID0geworCURSTV9JT0NUTF9ERUZfRFJWKFZJUlRHUFVfTUFQLCB2aXJ0aW9f Z3B1X21hcF9pb2N0bCwKKwkJCSAgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKKworCURSTV9JT0NU TF9ERUZfRFJWKFZJUlRHUFVfRVhFQ0JVRkZFUiwgdmlydGlvX2dwdV9leGVjYnVmZmVyX2lvY3Rs LAorCQkJICBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCisJRFJNX0lPQ1RMX0RFRl9EUlYoVklS VEdQVV9HRVRQQVJBTSwgdmlydGlvX2dwdV9nZXRwYXJhbV9pb2N0bCwKKwkJCSAgRFJNX0FVVEh8 RFJNX1VOTE9DS0VEKSwKKworCURSTV9JT0NUTF9ERUZfRFJWKFZJUlRHUFVfUkVTT1VSQ0VfQ1JF QVRFLAorCQkJICB2aXJ0aW9fZ3B1X3Jlc291cmNlX2NyZWF0ZV9pb2N0bCwKKwkJCSAgRFJNX0FV VEh8RFJNX1VOTE9DS0VEKSwKKworCURSTV9JT0NUTF9ERUZfRFJWKFZJUlRHUFVfUkVTT1VSQ0Vf SU5GTywgdmlydGlvX2dwdV9yZXNvdXJjZV9pbmZvX2lvY3RsLAorCQkJICBEUk1fQVVUSHxEUk1f VU5MT0NLRUQpLAorCisJLyogbWFrZSB0cmFuc2ZlciBhc3luYyB0byB0aGUgbWFpbiByaW5nPyAt IG5vIHN1cmUsIGNhbiB3ZQorCSAgIHRocmVhZCB0aGVzZSBpbiB0aGUgdW5kZXJseWluZyBHTCAq LworCURSTV9JT0NUTF9ERUZfRFJWKFZJUlRHUFVfVFJBTlNGRVJfRlJPTV9IT1NULAorCQkJICB2 aXJ0aW9fZ3B1X3RyYW5zZmVyX2Zyb21faG9zdF9pb2N0bCwKKwkJCSAgRFJNX0FVVEh8RFJNX1VO TE9DS0VEKSwKKwlEUk1fSU9DVExfREVGX0RSVihWSVJUR1BVX1RSQU5TRkVSX1RPX0hPU1QsCisJ CQkgIHZpcnRpb19ncHVfdHJhbnNmZXJfdG9faG9zdF9pb2N0bCwKKwkJCSAgRFJNX0FVVEh8RFJN X1VOTE9DS0VEKSwKKworCURSTV9JT0NUTF9ERUZfRFJWKFZJUlRHUFVfV0FJVCwgdmlydGlvX2dw dV93YWl0X2lvY3RsLAorCQkJICBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCisJRFJNX0lPQ1RM X0RFRl9EUlYoVklSVEdQVV9HRVRfQ0FQUywgdmlydGlvX2dwdV9nZXRfY2Fwc19pb2N0bCwKKwkJ CSAgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdmlydGlvL3ZpcnRncHVfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVf a21zLmMKaW5kZXggNzgyNzY2Yy4uMTJhMTA5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L3ZpcnRpby92aXJ0Z3B1X2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdw dV9rbXMuYwpAQCAtNTIsNiArNTIsNDEgQEAgc3RhdGljIHZvaWQgdmlydGlvX2dwdV9jb25maWdf Y2hhbmdlZF93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQkgICAgICBldmVu dHNfY2xlYXIsICZldmVudHNfY2xlYXIpOwogfQogCitzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1X2N0 eF9pZF9nZXQoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJCQkgIHVpbnQzMl90 ICpyZXNpZCkKK3sKKwlpbnQgaGFuZGxlOworCisJaWRyX3ByZWxvYWQoR0ZQX0tFUk5FTCk7CisJ c3Bpbl9sb2NrKCZ2Z2Rldi0+Y3R4X2lkX2lkcl9sb2NrKTsKKwloYW5kbGUgPSBpZHJfYWxsb2Mo JnZnZGV2LT5jdHhfaWRfaWRyLCBOVUxMLCAxLCAwLCAwKTsKKwlzcGluX3VubG9jaygmdmdkZXYt PmN0eF9pZF9pZHJfbG9jayk7CisJaWRyX3ByZWxvYWRfZW5kKCk7CisJKnJlc2lkID0gaGFuZGxl OworfQorCitzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1X2N0eF9pZF9wdXQoc3RydWN0IHZpcnRpb19n cHVfZGV2aWNlICp2Z2RldiwgdWludDMyX3QgaWQpCit7CisJc3Bpbl9sb2NrKCZ2Z2Rldi0+Y3R4 X2lkX2lkcl9sb2NrKTsKKwlpZHJfcmVtb3ZlKCZ2Z2Rldi0+Y3R4X2lkX2lkciwgaWQpOworCXNw aW5fdW5sb2NrKCZ2Z2Rldi0+Y3R4X2lkX2lkcl9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgdmly dGlvX2dwdV9jb250ZXh0X2NyZWF0ZShzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LAor CQkJCSAgICAgIHVpbnQzMl90IG5sZW4sIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICAgdWlu dDMyX3QgKmN0eF9pZCkKK3sKKwl2aXJ0aW9fZ3B1X2N0eF9pZF9nZXQodmdkZXYsIGN0eF9pZCk7 CisJdmlydGlvX2dwdV9jbWRfY29udGV4dF9jcmVhdGUodmdkZXYsICpjdHhfaWQsIG5sZW4sIG5h bWUpOworfQorCitzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1X2NvbnRleHRfZGVzdHJveShzdHJ1Y3Qg dmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LAorCQkJCSAgICAgIHVpbnQzMl90IGN0eF9pZCkKK3sK Kwl2aXJ0aW9fZ3B1X2NtZF9jb250ZXh0X2Rlc3Ryb3kodmdkZXYsIGN0eF9pZCk7CisJdmlydGlv X2dwdV9jdHhfaWRfcHV0KHZnZGV2LCBjdHhfaWQpOworfQorCiBzdGF0aWMgdm9pZCB2aXJ0aW9f Z3B1X2luaXRfdnEoc3RydWN0IHZpcnRpb19ncHVfcXVldWUgKnZndnEsCiAJCQkgICAgICAgdm9p ZCAoKndvcmtfZnVuYykoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKSkKIHsKQEAgLTYwLDYgKzk1 LDM2IEBAIHN0YXRpYyB2b2lkIHZpcnRpb19ncHVfaW5pdF92cShzdHJ1Y3QgdmlydGlvX2dwdV9x dWV1ZSAqdmd2cSwKIAlJTklUX1dPUksoJnZndnEtPmRlcXVldWVfd29yaywgd29ya19mdW5jKTsK IH0KIAorc3RhdGljIHZvaWQgdmlydGlvX2dwdV9nZXRfY2Fwc2V0cyhzdHJ1Y3QgdmlydGlvX2dw dV9kZXZpY2UgKnZnZGV2LAorCQkJCSAgIGludCBudW1fY2Fwc2V0cykKK3sKKwlpbnQgaSwgcmV0 OworCisJdmdkZXYtPmNhcHNldHMgPSBrY2FsbG9jKG51bV9jYXBzZXRzLAorCQkJCSBzaXplb2Yo c3RydWN0IHZpcnRpb19ncHVfZHJ2X2NhcHNldCksCisJCQkJIEdGUF9LRVJORUwpOworCWlmICgh dmdkZXYtPmNhcHNldHMpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgY2FwIHNl dHNcbiIpOworCQlyZXR1cm47CisJfQorCWZvciAoaSA9IDA7IGkgPCBudW1fY2Fwc2V0czsgaSsr KSB7CisJCXZpcnRpb19ncHVfY21kX2dldF9jYXBzZXRfaW5mbyh2Z2RldiwgaSk7CisJCXJldCA9 IHdhaXRfZXZlbnRfdGltZW91dCh2Z2Rldi0+cmVzcF93cSwKKwkJCQkJIHZnZGV2LT5jYXBzZXRz W2ldLmlkID4gMCwgNSAqIEhaKTsKKwkJaWYgKHJldCA9PSAwKSB7CisJCQlEUk1fRVJST1IoInRp bWVkIG91dCB3YWl0aW5nIGZvciBjYXAgc2V0ICVkXG4iLCBpKTsKKwkJCWtmcmVlKHZnZGV2LT5j YXBzZXRzKTsKKwkJCXZnZGV2LT5jYXBzZXRzID0gTlVMTDsKKwkJCXJldHVybjsKKwkJfQorCQlE Uk1fSU5GTygiY2FwIHNldCAlZDogaWQgJWQsIG1heC12ZXJzaW9uICVkLCBtYXgtc2l6ZSAlZFxu IiwKKwkJCSBpLCB2Z2Rldi0+Y2Fwc2V0c1tpXS5pZCwKKwkJCSB2Z2Rldi0+Y2Fwc2V0c1tpXS5t YXhfdmVyc2lvbiwKKwkJCSB2Z2Rldi0+Y2Fwc2V0c1tpXS5tYXhfc2l6ZSk7CisJfQorCXZnZGV2 LT5udW1fY2Fwc2V0cyA9IG51bV9jYXBzZXRzOworfQorCiBpbnQgdmlydGlvX2dwdV9kcml2ZXJf bG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0 YXRpYyB2cV9jYWxsYmFja190ICpjYWxsYmFja3NbXSA9IHsKQEAgLTcwLDcgKzEzNSw3IEBAIGlu dCB2aXJ0aW9fZ3B1X2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVk IGxvbmcgZmxhZ3MpCiAJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldjsKIAkvKiB0aGlz IHdpbGwgZXhwYW5kIGxhdGVyICovCiAJc3RydWN0IHZpcnRxdWV1ZSAqdnFzWzJdOwotCXUzMiBu dW1fc2Nhbm91dHM7CisJdTMyIG51bV9zY2Fub3V0cywgbnVtX2NhcHNldHM7CiAJaW50IHJldDsK IAogCWlmICghdmlydGlvX2hhc19mZWF0dXJlKGRldi0+dmlydGRldiwgVklSVElPX0ZfVkVSU0lP Tl8xKSkKQEAgLTk2LDkgKzE2MSwxNyBAQCBpbnQgdmlydGlvX2dwdV9kcml2ZXJfbG9hZChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQogCiAJc3Bpbl9sb2NrX2lu aXQoJnZnZGV2LT5mZW5jZV9kcnYubG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnZnZGV2LT5mZW5j ZV9kcnYuZmVuY2VzKTsKKwlJTklUX0xJU1RfSEVBRCgmdmdkZXYtPmNhcF9jYWNoZSk7CiAJSU5J VF9XT1JLKCZ2Z2Rldi0+Y29uZmlnX2NoYW5nZWRfd29yaywKIAkJICB2aXJ0aW9fZ3B1X2NvbmZp Z19jaGFuZ2VkX3dvcmtfZnVuYyk7CiAKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKwlpZiAodmly dGlvX2hhc19mZWF0dXJlKHZnZGV2LT52ZGV2LCBWSVJUSU9fR1BVX0ZFQVRVUkVfVklSR0wpKQor CQl2Z2Rldi0+aGFzX3ZpcmdsXzNkID0gdHJ1ZTsKKyNlbmRpZgorCURSTV9JTkZPKCJ2aXJnbCAz ZCBhY2NlbGVyYXRpb24gJXNcbiIsCisJCSB2Z2Rldi0+aGFzX3ZpcmdsXzNkID8gImVuYWJsZWQi IDogIm5vdCBhdmFpbGFibGUiKTsKKwogCXJldCA9IHZnZGV2LT52ZGV2LT5jb25maWctPmZpbmRf dnFzKHZnZGV2LT52ZGV2LCAyLCB2cXMsCiAJCQkJCSAgICBjYWxsYmFja3MsIG5hbWVzKTsKIAlp ZiAocmV0KSB7CkBAIC0xMjksNiArMjAyLDExIEBAIGludCB2aXJ0aW9fZ3B1X2RyaXZlcl9sb2Fk KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiAJCXJldCA9IC1F SU5WQUw7CiAJCWdvdG8gZXJyX3NjYW5vdXRzOwogCX0KKwlEUk1fSU5GTygibnVtYmVyIG9mIHNj YW5vdXRzOiAlZFxuIiwgbnVtX3NjYW5vdXRzKTsKKworCXZpcnRpb19jcmVhZCh2Z2Rldi0+dmRl diwgc3RydWN0IHZpcnRpb19ncHVfY29uZmlnLAorCQkgICAgIG51bV9jYXBzZXRzLCAmbnVtX2Nh cHNldHMpOworCURSTV9JTkZPKCJudW1iZXIgb2YgY2FwIHNldHM6ICVkXG4iLCBudW1fY2Fwc2V0 cyk7CiAKIAlyZXQgPSB2aXJ0aW9fZ3B1X21vZGVzZXRfaW5pdCh2Z2Rldik7CiAJaWYgKHJldCkK QEAgLTEzNyw2ICsyMTUsOCBAQCBpbnQgdmlydGlvX2dwdV9kcml2ZXJfbG9hZChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQogCXZpcnRpb19kZXZpY2VfcmVhZHko dmdkZXYtPnZkZXYpOwogCXZnZGV2LT52cXNfcmVhZHkgPSB0cnVlOwogCisJaWYgKG51bV9jYXBz ZXRzKQorCQl2aXJ0aW9fZ3B1X2dldF9jYXBzZXRzKHZnZGV2LCBudW1fY2Fwc2V0cyk7CiAJdmly dGlvX2dwdV9jbWRfZ2V0X2Rpc3BsYXlfaW5mbyh2Z2Rldik7CiAJd2FpdF9ldmVudF90aW1lb3V0 KHZnZGV2LT5yZXNwX3dxLCAhdmdkZXYtPmRpc3BsYXlfaW5mb19wZW5kaW5nLAogCQkJICAgNSAq IEhaKTsKQEAgLTE1Nyw2ICsyMzcsMTYgQEAgZXJyX3ZxczoKIAlyZXR1cm4gcmV0OwogfQogCitz dGF0aWMgdm9pZCB2aXJ0aW9fZ3B1X2NsZWFudXBfY2FwX2NhY2hlKHN0cnVjdCB2aXJ0aW9fZ3B1 X2RldmljZSAqdmdkZXYpCit7CisJc3RydWN0IHZpcnRpb19ncHVfZHJ2X2NhcF9jYWNoZSAqY2Fj aGVfZW50LCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNhY2hlX2VudCwgdG1w LCAmdmdkZXYtPmNhcF9jYWNoZSwgaGVhZCkgeworCQlrZnJlZShjYWNoZV9lbnQtPmNhcHNfY2Fj aGUpOworCQlrZnJlZShjYWNoZV9lbnQpOworCX0KK30KKwogaW50IHZpcnRpb19ncHVfZHJpdmVy X3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2aXJ0aW9fZ3B1X2Rl dmljZSAqdmdkZXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMTcwLDYgKzI2MCw0OSBAQCBpbnQg dmlydGlvX2dwdV9kcml2ZXJfdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJdmlydGlv X2dwdV9tb2Rlc2V0X2ZpbmkodmdkZXYpOwogCXZpcnRpb19ncHVfdHRtX2ZpbmkodmdkZXYpOwog CXZpcnRpb19ncHVfZnJlZV92YnVmcyh2Z2Rldik7CisJdmlydGlvX2dwdV9jbGVhbnVwX2NhcF9j YWNoZSh2Z2Rldik7CisJa2ZyZWUodmdkZXYtPmNhcHNldHMpOwogCWtmcmVlKHZnZGV2KTsKIAly ZXR1cm4gMDsKIH0KKworaW50IHZpcnRpb19ncHVfZHJpdmVyX29wZW4oc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCB2aXJ0aW9fZ3B1X2Rl dmljZSAqdmdkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCB2aXJ0aW9fZ3B1X2Zwcml2 ICp2ZnByaXY7CisJdWludDMyX3QgaWQ7CisJY2hhciBkYmduYW1lWzY0XSwgdG1wbmFtZVtUQVNL X0NPTU1fTEVOXTsKKworCS8qIGNhbid0IGNyZWF0ZSBjb250ZXh0cyB3aXRob3V0IDNkIHJlbmRl cmVyICovCisJaWYgKCF2Z2Rldi0+aGFzX3ZpcmdsXzNkKQorCQlyZXR1cm4gMDsKKworCWdldF90 YXNrX2NvbW0odG1wbmFtZSwgY3VycmVudCk7CisJc25wcmludGYoZGJnbmFtZSwgc2l6ZW9mKGRi Z25hbWUpLCAiJXMiLCB0bXBuYW1lKTsKKwlkYmduYW1lWzYzXSA9IDA7CisJLyogYWxsb2NhdGUg YSB2aXJ0IEdQVSBjb250ZXh0IGZvciB0aGlzIG9wZW5lciAqLworCXZmcHJpdiA9IGt6YWxsb2Mo c2l6ZW9mKCp2ZnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZmcHJpdikKKwkJcmV0dXJuIC1F Tk9NRU07CisKKwl2aXJ0aW9fZ3B1X2NvbnRleHRfY3JlYXRlKHZnZGV2LCBzdHJsZW4oZGJnbmFt ZSksIGRiZ25hbWUsICZpZCk7CisKKwl2ZnByaXYtPmN0eF9pZCA9IGlkOworCWZpbGUtPmRyaXZl cl9wcml2ID0gdmZwcml2OworCXJldHVybiAwOworfQorCit2b2lkIHZpcnRpb19ncHVfZHJpdmVy X3Bvc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUp Cit7CisJc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiA9IGRldi0+ZGV2X3ByaXZhdGU7 CisJc3RydWN0IHZpcnRpb19ncHVfZnByaXYgKnZmcHJpdjsKKworCWlmICghdmdkZXYtPmhhc192 aXJnbF8zZCkKKwkJcmV0dXJuOworCisJdmZwcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7CisKKwl2 aXJ0aW9fZ3B1X2NvbnRleHRfZGVzdHJveSh2Z2RldiwgdmZwcml2LT5jdHhfaWQpOworCWtmcmVl KHZmcHJpdik7CisJZmlsZS0+ZHJpdmVyX3ByaXYgPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3R0bS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZpcnRp by92aXJ0Z3B1X3R0bS5jCmluZGV4IGIwOTJkN2IuLjlmZDkyNGMgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV90dG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmly dGlvL3ZpcnRncHVfdHRtLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx0dG0vdHRtX21v ZHVsZS5oPgogI2luY2x1ZGUgPGRybS9kcm1QLmg+CiAjaW5jbHVkZSA8ZHJtL2RybS5oPgorI2lu Y2x1ZGUgPGRybS92aXJ0Z3B1X2RybS5oPgogI2luY2x1ZGUgInZpcnRncHVfZHJ2LmgiCiAKICNp bmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRp by92aXJ0Z3B1X3ZxLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdnEuYwppbmRl eCBlZTI1ZTlhLi5hYzRmNjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3Zp cnRncHVfdnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdnEuYwpAQCAt NTg2LDYgKzU4Niw0NyBAQCBzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1X2NtZF9nZXRfZGlzcGxheV9p bmZvX2NiKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsCiAJCWRybV9rbXNfaGVscGVy X2hvdHBsdWdfZXZlbnQodmdkZXYtPmRkZXYpOwogfQogCitzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1 X2NtZF9nZXRfY2Fwc2V0X2luZm9fY2Ioc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwK KwkJCQkJICAgICAgc3RydWN0IHZpcnRpb19ncHVfdmJ1ZmZlciAqdmJ1ZikKK3sKKwlzdHJ1Y3Qg dmlydGlvX2dwdV9nZXRfY2Fwc2V0X2luZm8gKmNtZCA9CisJCShzdHJ1Y3QgdmlydGlvX2dwdV9n ZXRfY2Fwc2V0X2luZm8gKil2YnVmLT5idWY7CisJc3RydWN0IHZpcnRpb19ncHVfcmVzcF9jYXBz ZXRfaW5mbyAqcmVzcCA9CisJCShzdHJ1Y3QgdmlydGlvX2dwdV9yZXNwX2NhcHNldF9pbmZvICop dmJ1Zi0+cmVzcF9idWY7CisJaW50IGkgPSBsZTMyX3RvX2NwdShjbWQtPmNhcHNldF9pbmRleCk7 CisKKwlzcGluX2xvY2soJnZnZGV2LT5kaXNwbGF5X2luZm9fbG9jayk7CisJdmdkZXYtPmNhcHNl dHNbaV0uaWQgPSBsZTMyX3RvX2NwdShyZXNwLT5jYXBzZXRfaWQpOworCXZnZGV2LT5jYXBzZXRz W2ldLm1heF92ZXJzaW9uID0gbGUzMl90b19jcHUocmVzcC0+Y2Fwc2V0X21heF92ZXJzaW9uKTsK Kwl2Z2Rldi0+Y2Fwc2V0c1tpXS5tYXhfc2l6ZSA9IGxlMzJfdG9fY3B1KHJlc3AtPmNhcHNldF9t YXhfc2l6ZSk7CisJc3Bpbl91bmxvY2soJnZnZGV2LT5kaXNwbGF5X2luZm9fbG9jayk7CisJd2Fr ZV91cCgmdmdkZXYtPnJlc3Bfd3EpOworfQorCitzdGF0aWMgdm9pZCB2aXJ0aW9fZ3B1X2NtZF9j YXBzZXRfY2Ioc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJCQkgICAgIHN0cnVj dCB2aXJ0aW9fZ3B1X3ZidWZmZXIgKnZidWYpCit7CisJc3RydWN0IHZpcnRpb19ncHVfZ2V0X2Nh cHNldCAqY21kID0KKwkJKHN0cnVjdCB2aXJ0aW9fZ3B1X2dldF9jYXBzZXQgKil2YnVmLT5idWY7 CisJc3RydWN0IHZpcnRpb19ncHVfcmVzcF9jYXBzZXQgKnJlc3AgPQorCQkoc3RydWN0IHZpcnRp b19ncHVfcmVzcF9jYXBzZXQgKil2YnVmLT5yZXNwX2J1ZjsKKwlzdHJ1Y3QgdmlydGlvX2dwdV9k cnZfY2FwX2NhY2hlICpjYWNoZV9lbnQ7CisKKwlzcGluX2xvY2soJnZnZGV2LT5kaXNwbGF5X2lu Zm9fbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjYWNoZV9lbnQsICZ2Z2Rldi0+Y2FwX2Nh Y2hlLCBoZWFkKSB7CisJCWlmIChjYWNoZV9lbnQtPnZlcnNpb24gPT0gbGUzMl90b19jcHUoY21k LT5jYXBzZXRfdmVyc2lvbikgJiYKKwkJICAgIGNhY2hlX2VudC0+aWQgPT0gbGUzMl90b19jcHUo Y21kLT5jYXBzZXRfaWQpKSB7CisJCQltZW1jcHkoY2FjaGVfZW50LT5jYXBzX2NhY2hlLCByZXNw LT5jYXBzZXRfZGF0YSwKKwkJCSAgICAgICBjYWNoZV9lbnQtPnNpemUpOworCQkJYXRvbWljX3Nl dCgmY2FjaGVfZW50LT5pc192YWxpZCwgMSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3Vu bG9jaygmdmdkZXYtPmRpc3BsYXlfaW5mb19sb2NrKTsKKwl3YWtlX3VwKCZ2Z2Rldi0+cmVzcF93 cSk7Cit9CisKKwogaW50IHZpcnRpb19ncHVfY21kX2dldF9kaXNwbGF5X2luZm8oc3RydWN0IHZp cnRpb19ncHVfZGV2aWNlICp2Z2RldikKIHsKIAlzdHJ1Y3QgdmlydGlvX2dwdV9jdHJsX2hkciAq Y21kX3A7CkBAIC02MDksNiArNjUwLDIzMCBAQCBpbnQgdmlydGlvX2dwdV9jbWRfZ2V0X2Rpc3Bs YXlfaW5mbyhzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2KQogCXJldHVybiAwOwogfQog CitpbnQgdmlydGlvX2dwdV9jbWRfZ2V0X2NhcHNldF9pbmZvKHN0cnVjdCB2aXJ0aW9fZ3B1X2Rl dmljZSAqdmdkZXYsIGludCBpZHgpCit7CisJc3RydWN0IHZpcnRpb19ncHVfZ2V0X2NhcHNldF9p bmZvICpjbWRfcDsKKwlzdHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVyICp2YnVmOworCXZvaWQgKnJl c3BfYnVmOworCisJcmVzcF9idWYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdmlydGlvX2dwdV9y ZXNwX2NhcHNldF9pbmZvKSwKKwkJCSAgIEdGUF9LRVJORUwpOworCWlmICghcmVzcF9idWYpCisJ CXJldHVybiAtRU5PTUVNOworCisJY21kX3AgPSB2aXJ0aW9fZ3B1X2FsbG9jX2NtZF9yZXNwCisJ CSh2Z2RldiwgJnZpcnRpb19ncHVfY21kX2dldF9jYXBzZXRfaW5mb19jYiwgJnZidWYsCisJCSBz aXplb2YoKmNtZF9wKSwgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fZ3B1X3Jlc3BfY2Fwc2V0X2luZm8p LAorCQkgcmVzcF9idWYpOworCW1lbXNldChjbWRfcCwgMCwgc2l6ZW9mKCpjbWRfcCkpOworCisJ Y21kX3AtPmhkci50eXBlID0gY3B1X3RvX2xlMzIoVklSVElPX0dQVV9DTURfR0VUX0NBUFNFVF9J TkZPKTsKKwljbWRfcC0+Y2Fwc2V0X2luZGV4ID0gY3B1X3RvX2xlMzIoaWR4KTsKKwl2aXJ0aW9f Z3B1X3F1ZXVlX2N0cmxfYnVmZmVyKHZnZGV2LCB2YnVmKTsKKwlyZXR1cm4gMDsKK30KKworaW50 IHZpcnRpb19ncHVfY21kX2dldF9jYXBzZXQoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2Rl diwKKwkJCSAgICAgIGludCBpZHgsIGludCB2ZXJzaW9uLAorCQkJICAgICAgc3RydWN0IHZpcnRp b19ncHVfZHJ2X2NhcF9jYWNoZSAqKmNhY2hlX3ApCit7CisJc3RydWN0IHZpcnRpb19ncHVfZ2V0 X2NhcHNldCAqY21kX3A7CisJc3RydWN0IHZpcnRpb19ncHVfdmJ1ZmZlciAqdmJ1ZjsKKwlpbnQg bWF4X3NpemUgPSB2Z2Rldi0+Y2Fwc2V0c1tpZHhdLm1heF9zaXplOworCXN0cnVjdCB2aXJ0aW9f Z3B1X2Rydl9jYXBfY2FjaGUgKmNhY2hlX2VudDsKKwl2b2lkICpyZXNwX2J1ZjsKKworCWlmIChp ZHggPiB2Z2Rldi0+bnVtX2NhcHNldHMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZlcnNp b24gPiB2Z2Rldi0+Y2Fwc2V0c1tpZHhdLm1heF92ZXJzaW9uKQorCQlyZXR1cm4gLUVJTlZBTDsK KworCWNhY2hlX2VudCA9IGt6YWxsb2Moc2l6ZW9mKCpjYWNoZV9lbnQpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIWNhY2hlX2VudCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljYWNoZV9lbnQtPmNhcHNf Y2FjaGUgPSBrbWFsbG9jKG1heF9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhY2hlX2VudC0+ Y2Fwc19jYWNoZSkgeworCQlrZnJlZShjYWNoZV9lbnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9 CisKKwlyZXNwX2J1ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fZ3B1X3Jlc3BfY2Fw c2V0KSArIG1heF9zaXplLAorCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXNwX2J1Zikgewor CQlrZnJlZShjYWNoZV9lbnQtPmNhcHNfY2FjaGUpOworCQlrZnJlZShjYWNoZV9lbnQpOworCQly ZXR1cm4gLUVOT01FTTsKKwl9CisKKwljYWNoZV9lbnQtPnZlcnNpb24gPSB2ZXJzaW9uOworCWNh Y2hlX2VudC0+aWQgPSB2Z2Rldi0+Y2Fwc2V0c1tpZHhdLmlkOworCWF0b21pY19zZXQoJmNhY2hl X2VudC0+aXNfdmFsaWQsIDApOworCWNhY2hlX2VudC0+c2l6ZSA9IG1heF9zaXplOworCXNwaW5f bG9jaygmdmdkZXYtPmRpc3BsYXlfaW5mb19sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZjYWNoZV9l bnQtPmhlYWQsICZ2Z2Rldi0+Y2FwX2NhY2hlKTsKKwlzcGluX3VubG9jaygmdmdkZXYtPmRpc3Bs YXlfaW5mb19sb2NrKTsKKworCWNtZF9wID0gdmlydGlvX2dwdV9hbGxvY19jbWRfcmVzcAorCQko dmdkZXYsICZ2aXJ0aW9fZ3B1X2NtZF9jYXBzZXRfY2IsICZ2YnVmLCBzaXplb2YoKmNtZF9wKSwK KwkJIHNpemVvZihzdHJ1Y3QgdmlydGlvX2dwdV9yZXNwX2NhcHNldCkgKyBtYXhfc2l6ZSwKKwkJ IHJlc3BfYnVmKTsKKwljbWRfcC0+aGRyLnR5cGUgPSBjcHVfdG9fbGUzMihWSVJUSU9fR1BVX0NN RF9HRVRfQ0FQU0VUKTsKKwljbWRfcC0+Y2Fwc2V0X2lkID0gY3B1X3RvX2xlMzIodmdkZXYtPmNh cHNldHNbaWR4XS5pZCk7CisJY21kX3AtPmNhcHNldF92ZXJzaW9uID0gY3B1X3RvX2xlMzIodmVy c2lvbik7CisJKmNhY2hlX3AgPSBjYWNoZV9lbnQ7CisJdmlydGlvX2dwdV9xdWV1ZV9jdHJsX2J1 ZmZlcih2Z2RldiwgdmJ1Zik7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB2aXJ0aW9fZ3B1X2Nt ZF9jb250ZXh0X2NyZWF0ZShzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LCB1aW50MzJf dCBpZCwKKwkJCQkgICB1aW50MzJfdCBubGVuLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVj dCB2aXJ0aW9fZ3B1X2N0eF9jcmVhdGUgKmNtZF9wOworCXN0cnVjdCB2aXJ0aW9fZ3B1X3ZidWZm ZXIgKnZidWY7CisKKwljbWRfcCA9IHZpcnRpb19ncHVfYWxsb2NfY21kKHZnZGV2LCAmdmJ1Ziwg c2l6ZW9mKCpjbWRfcCkpOworCW1lbXNldChjbWRfcCwgMCwgc2l6ZW9mKCpjbWRfcCkpOworCisJ Y21kX3AtPmhkci50eXBlID0gY3B1X3RvX2xlMzIoVklSVElPX0dQVV9DTURfQ1RYX0NSRUFURSk7 CisJY21kX3AtPmhkci5jdHhfaWQgPSBjcHVfdG9fbGUzMihpZCk7CisJY21kX3AtPm5sZW4gPSBj cHVfdG9fbGUzMihubGVuKTsKKwlzdHJuY3B5KGNtZF9wLT5kZWJ1Z19uYW1lLCBuYW1lLCA2Myk7 CisJY21kX3AtPmRlYnVnX25hbWVbNjNdID0gMDsKKwl2aXJ0aW9fZ3B1X3F1ZXVlX2N0cmxfYnVm ZmVyKHZnZGV2LCB2YnVmKTsKK30KKwordm9pZCB2aXJ0aW9fZ3B1X2NtZF9jb250ZXh0X2Rlc3Ry b3koc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJCQkgICAgdWludDMyX3QgaWQp Cit7CisJc3RydWN0IHZpcnRpb19ncHVfY3R4X2Rlc3Ryb3kgKmNtZF9wOworCXN0cnVjdCB2aXJ0 aW9fZ3B1X3ZidWZmZXIgKnZidWY7CisKKwljbWRfcCA9IHZpcnRpb19ncHVfYWxsb2NfY21kKHZn ZGV2LCAmdmJ1Ziwgc2l6ZW9mKCpjbWRfcCkpOworCW1lbXNldChjbWRfcCwgMCwgc2l6ZW9mKCpj bWRfcCkpOworCisJY21kX3AtPmhkci50eXBlID0gY3B1X3RvX2xlMzIoVklSVElPX0dQVV9DTURf Q1RYX0RFU1RST1kpOworCWNtZF9wLT5oZHIuY3R4X2lkID0gY3B1X3RvX2xlMzIoaWQpOworCXZp cnRpb19ncHVfcXVldWVfY3RybF9idWZmZXIodmdkZXYsIHZidWYpOworfQorCit2b2lkIHZpcnRp b19ncHVfY21kX2NvbnRleHRfYXR0YWNoX3Jlc291cmNlKHN0cnVjdCB2aXJ0aW9fZ3B1X2Rldmlj ZSAqdmdkZXYsCisJCQkJCSAgICB1aW50MzJfdCBjdHhfaWQsCisJCQkJCSAgICB1aW50MzJfdCBy ZXNvdXJjZV9pZCkKK3sKKwlzdHJ1Y3QgdmlydGlvX2dwdV9jdHhfcmVzb3VyY2UgKmNtZF9wOwor CXN0cnVjdCB2aXJ0aW9fZ3B1X3ZidWZmZXIgKnZidWY7CisKKwljbWRfcCA9IHZpcnRpb19ncHVf YWxsb2NfY21kKHZnZGV2LCAmdmJ1Ziwgc2l6ZW9mKCpjbWRfcCkpOworCW1lbXNldChjbWRfcCwg MCwgc2l6ZW9mKCpjbWRfcCkpOworCisJY21kX3AtPmhkci50eXBlID0gY3B1X3RvX2xlMzIoVklS VElPX0dQVV9DTURfQ1RYX0FUVEFDSF9SRVNPVVJDRSk7CisJY21kX3AtPmhkci5jdHhfaWQgPSBj cHVfdG9fbGUzMihjdHhfaWQpOworCWNtZF9wLT5yZXNvdXJjZV9pZCA9IGNwdV90b19sZTMyKHJl c291cmNlX2lkKTsKKwl2aXJ0aW9fZ3B1X3F1ZXVlX2N0cmxfYnVmZmVyKHZnZGV2LCB2YnVmKTsK KworfQorCit2b2lkIHZpcnRpb19ncHVfY21kX2NvbnRleHRfZGV0YWNoX3Jlc291cmNlKHN0cnVj dCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsCisJCQkJCSAgICB1aW50MzJfdCBjdHhfaWQsCisJ CQkJCSAgICB1aW50MzJfdCByZXNvdXJjZV9pZCkKK3sKKwlzdHJ1Y3QgdmlydGlvX2dwdV9jdHhf cmVzb3VyY2UgKmNtZF9wOworCXN0cnVjdCB2aXJ0aW9fZ3B1X3ZidWZmZXIgKnZidWY7CisKKwlj bWRfcCA9IHZpcnRpb19ncHVfYWxsb2NfY21kKHZnZGV2LCAmdmJ1Ziwgc2l6ZW9mKCpjbWRfcCkp OworCW1lbXNldChjbWRfcCwgMCwgc2l6ZW9mKCpjbWRfcCkpOworCisJY21kX3AtPmhkci50eXBl ID0gY3B1X3RvX2xlMzIoVklSVElPX0dQVV9DTURfQ1RYX0RFVEFDSF9SRVNPVVJDRSk7CisJY21k X3AtPmhkci5jdHhfaWQgPSBjcHVfdG9fbGUzMihjdHhfaWQpOworCWNtZF9wLT5yZXNvdXJjZV9p ZCA9IGNwdV90b19sZTMyKHJlc291cmNlX2lkKTsKKwl2aXJ0aW9fZ3B1X3F1ZXVlX2N0cmxfYnVm ZmVyKHZnZGV2LCB2YnVmKTsKK30KKwordm9pZAordmlydGlvX2dwdV9jbWRfcmVzb3VyY2VfY3Jl YXRlXzNkKHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsCisJCQkJICBzdHJ1Y3Qgdmly dGlvX2dwdV9yZXNvdXJjZV9jcmVhdGVfM2QgKnJjXzNkLAorCQkJCSAgc3RydWN0IHZpcnRpb19n cHVfZmVuY2UgKipmZW5jZSkKK3sKKwlzdHJ1Y3QgdmlydGlvX2dwdV9yZXNvdXJjZV9jcmVhdGVf M2QgKmNtZF9wOworCXN0cnVjdCB2aXJ0aW9fZ3B1X3ZidWZmZXIgKnZidWY7CisKKwljbWRfcCA9 IHZpcnRpb19ncHVfYWxsb2NfY21kKHZnZGV2LCAmdmJ1Ziwgc2l6ZW9mKCpjbWRfcCkpOworCW1l bXNldChjbWRfcCwgMCwgc2l6ZW9mKCpjbWRfcCkpOworCisJKmNtZF9wID0gKnJjXzNkOworCWNt ZF9wLT5oZHIudHlwZSA9IGNwdV90b19sZTMyKFZJUlRJT19HUFVfQ01EX1JFU09VUkNFX0NSRUFU RV8zRCk7CisJY21kX3AtPmhkci5mbGFncyA9IDA7CisKKwl2aXJ0aW9fZ3B1X3F1ZXVlX2ZlbmNl ZF9jdHJsX2J1ZmZlcih2Z2RldiwgdmJ1ZiwgJmNtZF9wLT5oZHIsIGZlbmNlKTsKK30KKwordm9p ZCB2aXJ0aW9fZ3B1X2NtZF90cmFuc2Zlcl90b19ob3N0XzNkKHN0cnVjdCB2aXJ0aW9fZ3B1X2Rl dmljZSAqdmdkZXYsCisJCQkJCXVpbnQzMl90IHJlc291cmNlX2lkLCB1aW50MzJfdCBjdHhfaWQs CisJCQkJCXVpbnQ2NF90IG9mZnNldCwgdWludDMyX3QgbGV2ZWwsCisJCQkJCXN0cnVjdCB2aXJ0 aW9fZ3B1X2JveCAqYm94LAorCQkJCQlzdHJ1Y3QgdmlydGlvX2dwdV9mZW5jZSAqKmZlbmNlKQor eworCXN0cnVjdCB2aXJ0aW9fZ3B1X3RyYW5zZmVyX2hvc3RfM2QgKmNtZF9wOworCXN0cnVjdCB2 aXJ0aW9fZ3B1X3ZidWZmZXIgKnZidWY7CisKKwljbWRfcCA9IHZpcnRpb19ncHVfYWxsb2NfY21k KHZnZGV2LCAmdmJ1Ziwgc2l6ZW9mKCpjbWRfcCkpOworCW1lbXNldChjbWRfcCwgMCwgc2l6ZW9m KCpjbWRfcCkpOworCisJY21kX3AtPmhkci50eXBlID0gY3B1X3RvX2xlMzIoVklSVElPX0dQVV9D TURfVFJBTlNGRVJfVE9fSE9TVF8zRCk7CisJY21kX3AtPmhkci5jdHhfaWQgPSBjcHVfdG9fbGUz MihjdHhfaWQpOworCWNtZF9wLT5yZXNvdXJjZV9pZCA9IGNwdV90b19sZTMyKHJlc291cmNlX2lk KTsKKwljbWRfcC0+Ym94ID0gKmJveDsKKwljbWRfcC0+b2Zmc2V0ID0gY3B1X3RvX2xlNjQob2Zm c2V0KTsKKwljbWRfcC0+bGV2ZWwgPSBjcHVfdG9fbGUzMihsZXZlbCk7CisKKwl2aXJ0aW9fZ3B1 X3F1ZXVlX2ZlbmNlZF9jdHJsX2J1ZmZlcih2Z2RldiwgdmJ1ZiwgJmNtZF9wLT5oZHIsIGZlbmNl KTsKK30KKwordm9pZCB2aXJ0aW9fZ3B1X2NtZF90cmFuc2Zlcl9mcm9tX2hvc3RfM2Qoc3RydWN0 IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJCQkJICB1aW50MzJfdCByZXNvdXJjZV9pZCwg dWludDMyX3QgY3R4X2lkLAorCQkJCQkgIHVpbnQ2NF90IG9mZnNldCwgdWludDMyX3QgbGV2ZWws CisJCQkJCSAgc3RydWN0IHZpcnRpb19ncHVfYm94ICpib3gsCisJCQkJCSAgc3RydWN0IHZpcnRp b19ncHVfZmVuY2UgKipmZW5jZSkKK3sKKwlzdHJ1Y3QgdmlydGlvX2dwdV90cmFuc2Zlcl9ob3N0 XzNkICpjbWRfcDsKKwlzdHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVyICp2YnVmOworCisJY21kX3Ag PSB2aXJ0aW9fZ3B1X2FsbG9jX2NtZCh2Z2RldiwgJnZidWYsIHNpemVvZigqY21kX3ApKTsKKwlt ZW1zZXQoY21kX3AsIDAsIHNpemVvZigqY21kX3ApKTsKKworCWNtZF9wLT5oZHIudHlwZSA9IGNw dV90b19sZTMyKFZJUlRJT19HUFVfQ01EX1RSQU5TRkVSX0ZST01fSE9TVF8zRCk7CisJY21kX3At Pmhkci5jdHhfaWQgPSBjcHVfdG9fbGUzMihjdHhfaWQpOworCWNtZF9wLT5yZXNvdXJjZV9pZCA9 IGNwdV90b19sZTMyKHJlc291cmNlX2lkKTsKKwljbWRfcC0+Ym94ID0gKmJveDsKKwljbWRfcC0+ b2Zmc2V0ID0gY3B1X3RvX2xlNjQob2Zmc2V0KTsKKwljbWRfcC0+bGV2ZWwgPSBjcHVfdG9fbGUz MihsZXZlbCk7CisKKwl2aXJ0aW9fZ3B1X3F1ZXVlX2ZlbmNlZF9jdHJsX2J1ZmZlcih2Z2Rldiwg dmJ1ZiwgJmNtZF9wLT5oZHIsIGZlbmNlKTsKK30KKwordm9pZCB2aXJ0aW9fZ3B1X2NtZF9zdWJt aXQoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldiwKKwkJCSAgIHZvaWQgKmRhdGEsIHVp bnQzMl90IGRhdGFfc2l6ZSwKKwkJCSAgIHVpbnQzMl90IGN0eF9pZCwgc3RydWN0IHZpcnRpb19n cHVfZmVuY2UgKipmZW5jZSkKK3sKKwlzdHJ1Y3QgdmlydGlvX2dwdV9jbWRfc3VibWl0ICpjbWRf cDsKKwlzdHJ1Y3QgdmlydGlvX2dwdV92YnVmZmVyICp2YnVmOworCisJY21kX3AgPSB2aXJ0aW9f Z3B1X2FsbG9jX2NtZCh2Z2RldiwgJnZidWYsIHNpemVvZigqY21kX3ApKTsKKwltZW1zZXQoY21k X3AsIDAsIHNpemVvZigqY21kX3ApKTsKKworCXZidWYtPmRhdGFfYnVmID0gZGF0YTsKKwl2YnVm LT5kYXRhX3NpemUgPSBkYXRhX3NpemU7CisKKwljbWRfcC0+aGRyLnR5cGUgPSBjcHVfdG9fbGUz MihWSVJUSU9fR1BVX0NNRF9TVUJNSVRfM0QpOworCWNtZF9wLT5oZHIuY3R4X2lkID0gY3B1X3Rv X2xlMzIoY3R4X2lkKTsKKwljbWRfcC0+c2l6ZSA9IGNwdV90b19sZTMyKGRhdGFfc2l6ZSk7CisK Kwl2aXJ0aW9fZ3B1X3F1ZXVlX2ZlbmNlZF9jdHJsX2J1ZmZlcih2Z2RldiwgdmJ1ZiwgJmNtZF9w LT5oZHIsIGZlbmNlKTsKK30KKwogaW50IHZpcnRpb19ncHVfb2JqZWN0X2F0dGFjaChzdHJ1Y3Qg dmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LAogCQkJICAgICBzdHJ1Y3QgdmlydGlvX2dwdV9vYmpl Y3QgKm9iaiwKIAkJCSAgICAgdWludDMyX3QgcmVzb3VyY2VfaWQsCmRpZmYgLS1naXQgYS9pbmNs dWRlL3VhcGkvZHJtL0tidWlsZCBiL2luY2x1ZGUvdWFwaS9kcm0vS2J1aWxkCmluZGV4IDJkOWEy NWQuLjM4ZDQzNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vS2J1aWxkCisrKyBiL2lu Y2x1ZGUvdWFwaS9kcm0vS2J1aWxkCkBAIC0xNywzICsxNyw0IEBAIGhlYWRlci15ICs9IHRlZ3Jh X2RybS5oCiBoZWFkZXIteSArPSB2aWFfZHJtLmgKIGhlYWRlci15ICs9IHZtd2dmeF9kcm0uaAog aGVhZGVyLXkgKz0gbXNtX2RybS5oCitoZWFkZXIteSArPSB2aXJ0Z3B1X2RybS5oCmRpZmYgLS1n aXQgYS9pbmNsdWRlL3VhcGkvZHJtL3ZpcnRncHVfZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJtL3Zp cnRncHVfZHJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM5ZTJkNgot LS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vdmlydGdwdV9kcm0uaApAQCAtMCww ICsxLDE2NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFJlZCBIYXQKKyAqIEFsbCBSaWdodHMg UmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNo YWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIEFORC9PUiBJVFMgU1VQ UExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgor ICovCisjaWZuZGVmIFZJUlRHUFVfRFJNX0gKKyNkZWZpbmUgVklSVEdQVV9EUk1fSAorCisjaW5j bHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSAiZHJtL2RybS5oIgorCisvKiBQbGVhc2Ugbm90ZSB0 aGF0IG1vZGlmaWNhdGlvbnMgdG8gYWxsIHN0cnVjdHMgZGVmaW5lZCBoZXJlIGFyZQorICogc3Vi amVjdCB0byBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBjb25zdHJhaW50cy4KKyAqCisgKiBEbyBu b3QgdXNlIHBvaW50ZXJzLCB1c2UgdWludDY0X3QgaW5zdGVhZCBmb3IgMzIgYml0IC8gNjQgYml0 IHVzZXIva2VybmVsCisgKiBjb21wYXRpYmlsaXR5IEtlZXAgZmllbGRzIGFsaWduZWQgdG8gdGhl aXIgc2l6ZQorICovCisKKyNkZWZpbmUgRFJNX1ZJUlRHUFVfTUFQICAgICAgICAgMHgwMQorI2Rl ZmluZSBEUk1fVklSVEdQVV9FWEVDQlVGRkVSICAweDAyCisjZGVmaW5lIERSTV9WSVJUR1BVX0dF VFBBUkFNICAgIDB4MDMKKyNkZWZpbmUgRFJNX1ZJUlRHUFVfUkVTT1VSQ0VfQ1JFQVRFIDB4MDQK KyNkZWZpbmUgRFJNX1ZJUlRHUFVfUkVTT1VSQ0VfSU5GTyAgICAgMHgwNQorI2RlZmluZSBEUk1f VklSVEdQVV9UUkFOU0ZFUl9GUk9NX0hPU1QgMHgwNgorI2RlZmluZSBEUk1fVklSVEdQVV9UUkFO U0ZFUl9UT19IT1NUIDB4MDcKKyNkZWZpbmUgRFJNX1ZJUlRHUFVfV0FJVCAgICAgMHgwOAorI2Rl ZmluZSBEUk1fVklSVEdQVV9HRVRfQ0FQUyAgMHgwOQorCitzdHJ1Y3QgZHJtX3ZpcnRncHVfbWFw IHsKKwl1aW50NjRfdCBvZmZzZXQ7IC8qIHVzZSBmb3IgbW1hcCBzeXN0ZW0gY2FsbCAqLworCXVp bnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ7Cit9OworCitzdHJ1Y3QgZHJtX3ZpcnRncHVf ZXhlY2J1ZmZlciB7CisJdWludDMyX3QJCWZsYWdzOwkJLyogZm9yIGZ1dHVyZSB1c2UgKi8KKwl1 aW50MzJfdCBzaXplOworCXVpbnQ2NF90IGNvbW1hbmQ7IC8qIHZvaWQqICovCisJdWludDY0X3Qg Ym9faGFuZGxlczsKKwl1aW50MzJfdCBudW1fYm9faGFuZGxlczsKKwl1aW50MzJfdCBwYWQ7Cit9 OworCisjZGVmaW5lIFZJUlRHUFVfUEFSQU1fM0RfRkVBVFVSRVMgMSAvKiBkbyB3ZSBoYXZlIDNE IGZlYXR1cmVzIGluIHRoZSBodyAqLworCitzdHJ1Y3QgZHJtX3ZpcnRncHVfZ2V0cGFyYW0gewor CXVpbnQ2NF90IHBhcmFtOworCXVpbnQ2NF90IHZhbHVlOworfTsKKworLyogTk9fQk8gZmxhZ3M/ IE5PIHJlc291cmNlIGZsYWc/ICovCisvKiByZXNvdXJjZSBmbGFnIGZvciB5XzBfdG9wICovCitz dHJ1Y3QgZHJtX3ZpcnRncHVfcmVzb3VyY2VfY3JlYXRlIHsKKwl1aW50MzJfdCB0YXJnZXQ7CisJ dWludDMyX3QgZm9ybWF0OworCXVpbnQzMl90IGJpbmQ7CisJdWludDMyX3Qgd2lkdGg7CisJdWlu dDMyX3QgaGVpZ2h0OworCXVpbnQzMl90IGRlcHRoOworCXVpbnQzMl90IGFycmF5X3NpemU7CisJ dWludDMyX3QgbGFzdF9sZXZlbDsKKwl1aW50MzJfdCBucl9zYW1wbGVzOworCXVpbnQzMl90IGZs YWdzOworCXVpbnQzMl90IGJvX2hhbmRsZTsgLyogaWYgdGhpcyBpcyBzZXQgLSByZWNyZWF0ZSBh IG5ldyByZXNvdXJjZSBhdHRhY2hlZCB0byB0aGlzIGJvID8gKi8KKwl1aW50MzJfdCByZXNfaGFu ZGxlOyAgLyogcmV0dXJuZWQgYnkga2VybmVsICovCisJdWludDMyX3Qgc2l6ZTsgICAgICAgIC8q IHZhbGlkYXRlIHRyYW5zZmVyIGluIHRoZSBob3N0ICovCisJdWludDMyX3Qgc3RyaWRlOyAgICAg IC8qIHZhbGlkYXRlIHRyYW5zZmVyIGluIHRoZSBob3N0ICovCit9OworCitzdHJ1Y3QgZHJtX3Zp cnRncHVfcmVzb3VyY2VfaW5mbyB7CisJdWludDMyX3QgYm9faGFuZGxlOworCXVpbnQzMl90IHJl c19oYW5kbGU7CisJdWludDMyX3Qgc2l6ZTsKKwl1aW50MzJfdCBzdHJpZGU7Cit9OworCitzdHJ1 Y3QgZHJtX3ZpcnRncHVfM2RfYm94IHsKKwl1aW50MzJfdCB4OworCXVpbnQzMl90IHk7CisJdWlu dDMyX3QgejsKKwl1aW50MzJfdCB3OworCXVpbnQzMl90IGg7CisJdWludDMyX3QgZDsKK307CisK K3N0cnVjdCBkcm1fdmlydGdwdV8zZF90cmFuc2Zlcl90b19ob3N0IHsKKwl1aW50MzJfdCBib19o YW5kbGU7CisJc3RydWN0IGRybV92aXJ0Z3B1XzNkX2JveCBib3g7CisJdWludDMyX3QgbGV2ZWw7 CisJdWludDMyX3Qgb2Zmc2V0OworfTsKKworc3RydWN0IGRybV92aXJ0Z3B1XzNkX3RyYW5zZmVy X2Zyb21faG9zdCB7CisJdWludDMyX3QgYm9faGFuZGxlOworCXN0cnVjdCBkcm1fdmlydGdwdV8z ZF9ib3ggYm94OworCXVpbnQzMl90IGxldmVsOworCXVpbnQzMl90IG9mZnNldDsKK307CisKKyNk ZWZpbmUgVklSVEdQVV9XQUlUX05PV0FJVCAxIC8qIGxpa2UgaXQgKi8KK3N0cnVjdCBkcm1fdmly dGdwdV8zZF93YWl0IHsKKwl1aW50MzJfdCBoYW5kbGU7IC8qIDAgaXMgYW4gaW52YWxpZCBoYW5k bGUgKi8KKwl1aW50MzJfdCBmbGFnczsKK307CisKK3N0cnVjdCBkcm1fdmlydGdwdV9nZXRfY2Fw cyB7CisJdWludDMyX3QgY2FwX3NldF9pZDsKKwl1aW50MzJfdCBjYXBfc2V0X3ZlcjsKKwl1aW50 NjRfdCBhZGRyOworCXVpbnQzMl90IHNpemU7CisJdWludDMyX3QgcGFkOworfTsKKworI2RlZmlu ZSBEUk1fSU9DVExfVklSVEdQVV9NQVAgXAorCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBE Uk1fVklSVEdQVV9NQVAsIHN0cnVjdCBkcm1fdmlydGdwdV9tYXApCisKKyNkZWZpbmUgRFJNX0lP Q1RMX1ZJUlRHUFVfRVhFQ0JVRkZFUiBcCisJRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJN X1ZJUlRHUFVfRVhFQ0JVRkZFUixcCisJCXN0cnVjdCBkcm1fdmlydGdwdV9leGVjYnVmZmVyKQor CisjZGVmaW5lIERSTV9JT0NUTF9WSVJUR1BVX0dFVFBBUkFNIFwKKwlEUk1fSU9XUihEUk1fQ09N TUFORF9CQVNFICsgRFJNX1ZJUlRHUFVfR0VUUEFSQU0sXAorCQlzdHJ1Y3QgZHJtX3ZpcnRncHVf Z2V0cGFyYW0pCisKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJUlRHUFVfUkVTT1VSQ0VfQ1JFQVRFCQkJ XAorCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklSVEdQVV9SRVNPVVJDRV9DUkVB VEUsCVwKKwkJc3RydWN0IGRybV92aXJ0Z3B1X3Jlc291cmNlX2NyZWF0ZSkKKworI2RlZmluZSBE Uk1fSU9DVExfVklSVEdQVV9SRVNPVVJDRV9JTkZPIFwKKwlEUk1fSU9XUihEUk1fQ09NTUFORF9C QVNFICsgRFJNX1ZJUlRHUFVfUkVTT1VSQ0VfSU5GTywgXAorCQkgc3RydWN0IGRybV92aXJ0Z3B1 X3Jlc291cmNlX2luZm8pCisKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJUlRHUFVfVFJBTlNGRVJfRlJP TV9IT1NUIFwKKwlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJUlRHUFVfVFJBTlNG RVJfRlJPTV9IT1NULAlcCisJCXN0cnVjdCBkcm1fdmlydGdwdV8zZF90cmFuc2Zlcl9mcm9tX2hv c3QpCisKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJUlRHUFVfVFJBTlNGRVJfVE9fSE9TVCBcCisJRFJN X0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSVJUR1BVX1RSQU5TRkVSX1RPX0hPU1QsCVwK KwkJc3RydWN0IGRybV92aXJ0Z3B1XzNkX3RyYW5zZmVyX3RvX2hvc3QpCisKKyNkZWZpbmUgRFJN X0lPQ1RMX1ZJUlRHUFVfV0FJVAkJCQlcCisJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERS TV9WSVJUR1BVX1dBSVQsCVwKKwkJc3RydWN0IGRybV92aXJ0Z3B1XzNkX3dhaXQpCisKKyNkZWZp bmUgRFJNX0lPQ1RMX1ZJUlRHUFVfR0VUX0NBUFMgXAorCURSTV9JT1dSKERSTV9DT01NQU5EX0JB U0UgKyBEUk1fVklSVEdQVV9HRVRfQ0FQUywgXAorCXN0cnVjdCBkcm1fdmlydGdwdV9nZXRfY2Fw cykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX2dwdS5o IGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19ncHUuaAppbmRleCA0NzhiZTUyLi43ZjRmOWNl IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX2dwdS5oCisrKyBiL2luY2x1 ZGUvdWFwaS9saW51eC92aXJ0aW9fZ3B1LmgKQEAgLTQwLDYgKzQwLDggQEAKIAogI2luY2x1ZGUg PGxpbnV4L3R5cGVzLmg+CiAKKyNkZWZpbmUgVklSVElPX0dQVV9GRUFUVVJFX1ZJUkdMIDAKKwog ZW51bSB2aXJ0aW9fZ3B1X2N0cmxfdHlwZSB7CiAJVklSVElPX0dQVV9VTkRFRklORUQgPSAwLAog CkBAIC01Miw2ICs1NCwxOCBAQCBlbnVtIHZpcnRpb19ncHVfY3RybF90eXBlIHsKIAlWSVJUSU9f R1BVX0NNRF9UUkFOU0ZFUl9UT19IT1NUXzJELAogCVZJUlRJT19HUFVfQ01EX1JFU09VUkNFX0FU VEFDSF9CQUNLSU5HLAogCVZJUlRJT19HUFVfQ01EX1JFU09VUkNFX0RFVEFDSF9CQUNLSU5HLAor CVZJUlRJT19HUFVfQ01EX0dFVF9DQVBTRVRfSU5GTywKKwlWSVJUSU9fR1BVX0NNRF9HRVRfQ0FQ U0VULAorCisJLyogM2QgY29tbWFuZHMgKi8KKwlWSVJUSU9fR1BVX0NNRF9DVFhfQ1JFQVRFID0g MHgwMjAwLAorCVZJUlRJT19HUFVfQ01EX0NUWF9ERVNUUk9ZLAorCVZJUlRJT19HUFVfQ01EX0NU WF9BVFRBQ0hfUkVTT1VSQ0UsCisJVklSVElPX0dQVV9DTURfQ1RYX0RFVEFDSF9SRVNPVVJDRSwK KwlWSVJUSU9fR1BVX0NNRF9SRVNPVVJDRV9DUkVBVEVfM0QsCisJVklSVElPX0dQVV9DTURfVFJB TlNGRVJfVE9fSE9TVF8zRCwKKwlWSVJUSU9fR1BVX0NNRF9UUkFOU0ZFUl9GUk9NX0hPU1RfM0Qs CisJVklSVElPX0dQVV9DTURfU1VCTUlUXzNELAogCiAJLyogY3Vyc29yIGNvbW1hbmRzICovCiAJ VklSVElPX0dQVV9DTURfVVBEQVRFX0NVUlNPUiA9IDB4MDMwMCwKQEAgLTYwLDYgKzc0LDggQEAg ZW51bSB2aXJ0aW9fZ3B1X2N0cmxfdHlwZSB7CiAJLyogc3VjY2VzcyByZXNwb25zZXMgKi8KIAlW SVJUSU9fR1BVX1JFU1BfT0tfTk9EQVRBID0gMHgxMTAwLAogCVZJUlRJT19HUFVfUkVTUF9PS19E SVNQTEFZX0lORk8sCisJVklSVElPX0dQVV9SRVNQX09LX0NBUFNFVF9JTkZPLAorCVZJUlRJT19H UFVfUkVTUF9PS19DQVBTRVQsCiAKIAkvKiBlcnJvciByZXNwb25zZXMgKi8KIAlWSVJUSU9fR1BV X1JFU1BfRVJSX1VOU1BFQyA9IDB4MTIwMCwKQEAgLTE4MCwxMyArMTk2LDEwNyBAQCBzdHJ1Y3Qg dmlydGlvX2dwdV9yZXNwX2Rpc3BsYXlfaW5mbyB7CiAJfSBwbW9kZXNbVklSVElPX0dQVV9NQVhf U0NBTk9VVFNdOwogfTsKIAorLyogZGF0YSBwYXNzZWQgaW4gdGhlIGNvbnRyb2wgdnEsIDNkIHJl bGF0ZWQgKi8KKworc3RydWN0IHZpcnRpb19ncHVfYm94IHsKKwlfX2xlMzIgeCwgeSwgejsKKwlf X2xlMzIgdywgaCwgZDsKK307CisKKy8qIFZJUlRJT19HUFVfQ01EX1RSQU5TRkVSX1RPX0hPU1Rf M0QsIFZJUlRJT19HUFVfQ01EX1RSQU5TRkVSX0ZST01fSE9TVF8zRCAqLworc3RydWN0IHZpcnRp b19ncHVfdHJhbnNmZXJfaG9zdF8zZCB7CisJc3RydWN0IHZpcnRpb19ncHVfY3RybF9oZHIgaGRy OworCXN0cnVjdCB2aXJ0aW9fZ3B1X2JveCBib3g7CisJX19sZTY0IG9mZnNldDsKKwlfX2xlMzIg cmVzb3VyY2VfaWQ7CisJX19sZTMyIGxldmVsOworCV9fbGUzMiBzdHJpZGU7CisJX19sZTMyIGxh eWVyX3N0cmlkZTsKK307CisKKy8qIFZJUlRJT19HUFVfQ01EX1JFU09VUkNFX0NSRUFURV8zRCAq LworI2RlZmluZSBWSVJUSU9fR1BVX1JFU09VUkNFX0ZMQUdfWV8wX1RPUCAoMSA8PCAwKQorc3Ry dWN0IHZpcnRpb19ncHVfcmVzb3VyY2VfY3JlYXRlXzNkIHsKKwlzdHJ1Y3QgdmlydGlvX2dwdV9j dHJsX2hkciBoZHI7CisJX19sZTMyIHJlc291cmNlX2lkOworCV9fbGUzMiB0YXJnZXQ7CisJX19s ZTMyIGZvcm1hdDsKKwlfX2xlMzIgYmluZDsKKwlfX2xlMzIgd2lkdGg7CisJX19sZTMyIGhlaWdo dDsKKwlfX2xlMzIgZGVwdGg7CisJX19sZTMyIGFycmF5X3NpemU7CisJX19sZTMyIGxhc3RfbGV2 ZWw7CisJX19sZTMyIG5yX3NhbXBsZXM7CisJX19sZTMyIGZsYWdzOworCV9fbGUzMiBwYWRkaW5n OworfTsKKworLyogVklSVElPX0dQVV9DTURfQ1RYX0NSRUFURSAqLworc3RydWN0IHZpcnRpb19n cHVfY3R4X2NyZWF0ZSB7CisJc3RydWN0IHZpcnRpb19ncHVfY3RybF9oZHIgaGRyOworCV9fbGUz MiBubGVuOworCV9fbGUzMiBwYWRkaW5nOworCWNoYXIgZGVidWdfbmFtZVs2NF07Cit9OworCisv KiBWSVJUSU9fR1BVX0NNRF9DVFhfREVTVFJPWSAqLworc3RydWN0IHZpcnRpb19ncHVfY3R4X2Rl c3Ryb3kgeworCXN0cnVjdCB2aXJ0aW9fZ3B1X2N0cmxfaGRyIGhkcjsKK307CisKKy8qIFZJUlRJ T19HUFVfQ01EX0NUWF9BVFRBQ0hfUkVTT1VSQ0UsIFZJUlRJT19HUFVfQ01EX0NUWF9ERVRBQ0hf UkVTT1VSQ0UgKi8KK3N0cnVjdCB2aXJ0aW9fZ3B1X2N0eF9yZXNvdXJjZSB7CisJc3RydWN0IHZp cnRpb19ncHVfY3RybF9oZHIgaGRyOworCV9fbGUzMiByZXNvdXJjZV9pZDsKKwlfX2xlMzIgcGFk ZGluZzsKK307CisKKy8qIFZJUlRJT19HUFVfQ01EX1NVQk1JVF8zRCAqLworc3RydWN0IHZpcnRp b19ncHVfY21kX3N1Ym1pdCB7CisJc3RydWN0IHZpcnRpb19ncHVfY3RybF9oZHIgaGRyOworCV9f bGUzMiBzaXplOworCV9fbGUzMiBwYWRkaW5nOworfTsKKworI2RlZmluZSBWSVJUSU9fR1BVX0NB UFNFVF9WSVJHTCAxCisKKy8qIFZJUlRJT19HUFVfQ01EX0dFVF9DQVBTRVRfSU5GTyAqLworc3Ry dWN0IHZpcnRpb19ncHVfZ2V0X2NhcHNldF9pbmZvIHsKKwlzdHJ1Y3QgdmlydGlvX2dwdV9jdHJs X2hkciBoZHI7CisJX19sZTMyIGNhcHNldF9pbmRleDsKKwlfX2xlMzIgcGFkZGluZzsKK307CisK Ky8qIFZJUlRJT19HUFVfUkVTUF9PS19DQVBTRVRfSU5GTyAqLworc3RydWN0IHZpcnRpb19ncHVf cmVzcF9jYXBzZXRfaW5mbyB7CisJc3RydWN0IHZpcnRpb19ncHVfY3RybF9oZHIgaGRyOworCV9f bGUzMiBjYXBzZXRfaWQ7CisJX19sZTMyIGNhcHNldF9tYXhfdmVyc2lvbjsKKwlfX2xlMzIgY2Fw c2V0X21heF9zaXplOworCV9fbGUzMiBwYWRkaW5nOworfTsKKworLyogVklSVElPX0dQVV9DTURf R0VUX0NBUFNFVCAqLworc3RydWN0IHZpcnRpb19ncHVfZ2V0X2NhcHNldCB7CisJc3RydWN0IHZp cnRpb19ncHVfY3RybF9oZHIgaGRyOworCV9fbGUzMiBjYXBzZXRfaWQ7CisJX19sZTMyIGNhcHNl dF92ZXJzaW9uOworfTsKKworLyogVklSVElPX0dQVV9SRVNQX09LX0NBUFNFVCAqLworc3RydWN0 IHZpcnRpb19ncHVfcmVzcF9jYXBzZXQgeworCXN0cnVjdCB2aXJ0aW9fZ3B1X2N0cmxfaGRyIGhk cjsKKwl1aW50OF90IGNhcHNldF9kYXRhW107Cit9OworCiAjZGVmaW5lIFZJUlRJT19HUFVfRVZF TlRfRElTUExBWSAoMSA8PCAwKQogCiBzdHJ1Y3QgdmlydGlvX2dwdV9jb25maWcgewogCV9fdTMy IGV2ZW50c19yZWFkOwogCV9fdTMyIGV2ZW50c19jbGVhcjsKIAlfX3UzMiBudW1fc2Nhbm91dHM7 Ci0JX191MzIgcmVzZXJ2ZWQ7CisJX191MzIgbnVtX2NhcHNldHM7CiB9OwogCiAvKiBzaW1wbGUg Zm9ybWF0cyBmb3IgZmJjb24vWCB1c2UgKi8KLS0gCjEuOC4zLjEKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==