Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Thu, 27 Jun 2002 08:00:42 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Thu, 27 Jun 2002 08:00:41 -0400 Received: from mion.elka.pw.edu.pl ([194.29.160.35]:28884 "EHLO mion.elka.pw.edu.pl") by vger.kernel.org with ESMTP id ; Thu, 27 Jun 2002 08:00:31 -0400 Date: Thu, 27 Jun 2002 14:00:03 +0200 (MET DST) From: Bartlomiej Zolnierkiewicz To: Martin Dalecki cc: Alexander Atanasov , Zwane Mwaikambo , Subject: [PATCH] 2.5.24 IDE 95 Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="-559023410-851401618-1025179203=:14825" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 75104 Lines: 1257 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---559023410-851401618-1025179203=:14825 Content-Type: TEXT/PLAIN; charset=US-ASCII I have Martin's permission to push some ide-clean patches, so here we go. I'm running fine SMP kernel with spinlocks debugging enabled on UP. Note that this patch brokes ide-cd/tape/floppy/scsi locking... This patch is mainly for developers to have something to sync with... ;-) still TODO: - remove ide_wait commands from interrupt paths - move locking/completion upwards from ide_do_drive_cmd() - fix ide device setup/tear down locking - locking of ioctls - tape->spinlock is probably obsolete now Thu Jun 27 13:32:35 CEST 2002 ide-clean-95 It is a merge of patches by Alexander Atanasov and Zwane Mwaikambo (big thanks guys!) plus some corrections by me... - Remove locking from IRQ handlers (*_intr etc.) and ata_ops->do_reqeuest(), ata_ops->end_request(). - Add non-locking __blk_get_request() and __blk_attempt_remege() helpers to block layer (ll_rw_blk.c). - Move locking up to the entry points. - Move ata_expiry_t functions to the ide_startstop_t interface (need to call ata_error, and its return is idestartstop_t, not wait time). - Kill ata_end_request() and restart_request() (they were locking variants). - Disable some ide__sti() for now. - Misc fixes. ---559023410-851401618-1025179203=:14825 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="ide-clean-95.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="ide-clean-95.diff" ZGlmZiAtWCBkb250ZGlmZiAtdXIgbGludXgtMi41LjI0L2RyaXZlcnMvYmxv Y2svbGxfcndfYmxrLmMgbGludXgvZHJpdmVycy9ibG9jay9sbF9yd19ibGsu Yw0KLS0tIGxpbnV4LTIuNS4yNC9kcml2ZXJzL2Jsb2NrL2xsX3J3X2Jsay5j CU1vbiBKdW4gMjQgMjI6MjA6NTMgMjAwMg0KKysrIGxpbnV4L2RyaXZlcnMv YmxvY2svbGxfcndfYmxrLmMJV2VkIEp1biAyNiAxOTo1Njo1MyAyMDAyDQpA QCAtMTIwMyw2ICsxMjAzLDI2IEBADQogCXJldHVybiBycTsNCiB9DQogDQor LyoNCisgKiBOb24tbG9ja2luZyBibGtfZ2V0X3JlcXVlc3QgdmFyaWFudCwg Zm9yIHNwZWNpYWwgcmVxdWVzdHMgZnJvbSBkcml2ZXJzLg0KKyAqLw0KK3N0 cnVjdCByZXF1ZXN0ICpfX2Jsa19nZXRfcmVxdWVzdChyZXF1ZXN0X3F1ZXVl X3QgKnEsIGludCBydykNCit7DQorCXN0cnVjdCByZXF1ZXN0ICpycTsNCisN CisJQlVHX09OKHJ3ICE9IFJFQUQgJiYgcncgIT0gV1JJVEUpOw0KKw0KKwly cSA9IGdldF9yZXF1ZXN0KHEsIHJ3KTsNCisNCisJaWYgKHJxKSB7DQorCQly cS0+ZmxhZ3MgPSAwOw0KKwkJcnEtPmJ1ZmZlciA9IE5VTEw7DQorCQlycS0+ YmlvID0gcnEtPmJpb3RhaWwgPSBOVUxMOw0KKwkJcnEtPndhaXRpbmcgPSBO VUxMOw0KKwl9DQorCXJldHVybiBycTsNCit9DQorDQogdm9pZCBibGtfcHV0 X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKQ0KIHsNCiAJYmxrZGV2X3Jl bGVhc2VfcmVxdWVzdChycSk7DQpAQCAtMTM4NCw2ICsxNDA0LDE0IEBADQog CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3Mp Ow0KIH0NCiANCisvKg0KKyAqIE5vbi1sb2NraW5nIGJsa19hdHRlbXB0X3Jl bWVyZ2UgdmFyaWFudC4NCisgKi8NCit2b2lkIF9fYmxrX2F0dGVtcHRfcmVt ZXJnZShyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkN Cit7DQorCWF0dGVtcHRfYmFja19tZXJnZShxLCBycSk7DQorfQ0KKw0KIHN0 YXRpYyBpbnQgX19tYWtlX3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICpxLCBz dHJ1Y3QgYmlvICpiaW8pDQogew0KIAlzdHJ1Y3QgcmVxdWVzdCAqcmVxLCAq ZnJlZXJlcSA9IE5VTEw7DQpAQCAtMjA0Miw2ICsyMDcwLDcgQEANCiBFWFBP UlRfU1lNQk9MKGJsa19wbHVnX2RldmljZSk7DQogRVhQT1JUX1NZTUJPTChi bGtfcmVtb3ZlX3BsdWcpOw0KIEVYUE9SVF9TWU1CT0woYmxrX2F0dGVtcHRf cmVtZXJnZSk7DQorRVhQT1JUX1NZTUJPTChfX2Jsa19hdHRlbXB0X3JlbWVy Z2UpOw0KIEVYUE9SVF9TWU1CT0woYmxrX21heF9sb3dfcGZuKTsNCiBFWFBP UlRfU1lNQk9MKGJsa19tYXhfcGZuKTsNCiBFWFBPUlRfU1lNQk9MKGJsa19x dWV1ZV9tYXhfc2VjdG9ycyk7DQpAQCAtMjA1OCw2ICsyMDg3LDcgQEANCiBF WFBPUlRfU1lNQk9MKGJsa19waHlzX2NvbnRpZ19zZWdtZW50KTsNCiBFWFBP UlRfU1lNQk9MKGJsa19od19jb250aWdfc2VnbWVudCk7DQogRVhQT1JUX1NZ TUJPTChibGtfZ2V0X3JlcXVlc3QpOw0KK0VYUE9SVF9TWU1CT0woX19ibGtf Z2V0X3JlcXVlc3QpOw0KIEVYUE9SVF9TWU1CT0woYmxrX3B1dF9yZXF1ZXN0 KTsNCiANCiBFWFBPUlRfU1lNQk9MKGJsa19xdWV1ZV9wcmVwX3JxKTsNCmRp ZmYgLVggZG9udGRpZmYgLXVyIGxpbnV4LTIuNS4yNC9kcml2ZXJzL2lkZS9p ZGUtY2QuYyBsaW51eC9kcml2ZXJzL2lkZS9pZGUtY2QuYw0KLS0tIGxpbnV4 LTIuNS4yNC9kcml2ZXJzL2lkZS9pZGUtY2QuYwlUdWUgSnVuIDE4IDAwOjI5 OjAyIDIwMDINCisrKyBsaW51eC9kcml2ZXJzL2lkZS9pZGUtY2QuYwlUaHUg SnVuIDI3IDAxOjM2OjA4IDIwMDINCkBAIC01NTYsNyArNTU2LDcgQEANCiAJ aWYgKChycS0+ZmxhZ3MgJiBSRVFfQ01EKSAmJiAhcnEtPmN1cnJlbnRfbnJf c2VjdG9ycykNCiAJCXVwdG9kYXRlID0gMTsNCiANCi0JYXRhX2VuZF9yZXF1 ZXN0KGRyaXZlLCBycSwgdXB0b2RhdGUpOw0KKwlfX2F0YV9lbmRfcmVxdWVz dChkcml2ZSwgcnEsIHVwdG9kYXRlLCAwKTsNCiB9DQogDQogDQpAQCAtNjky LDEwICs2OTIsOCBAQA0KIAlyZXR1cm4gMTsNCiB9DQogDQotc3RhdGljIGlu dCBjZHJvbV90aW1lcl9leHBpcnkoc3RydWN0IGF0YV9kZXZpY2UgKmRyaXZl LCBzdHJ1Y3QgcmVxdWVzdCAqcnEpDQorc3RhdGljIGlkZV9zdGFydHN0b3Bf dCBjZHJvbV90aW1lcl9leHBpcnkoc3RydWN0IGF0YV9kZXZpY2UgKmRyaXZl LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHVuc2lnbmVkIGxvbmcgKndhaXQpDQog ew0KLQl1bnNpZ25lZCBsb25nIHdhaXQgPSAwOw0KLQ0KIAkvKg0KIAkgKiBT b21lIGNvbW1hbmRzIGFyZSAqc2xvdyogYW5kIG5vcm1hbGx5IHRha2UgYSBs b25nIHRpbWUgdG8NCiAJICogY29tcGxldGUuIFVzdWFsbHkgd2UgY2FuIHVz ZSB0aGUgQVRBUEkgImRpc2Nvbm5lY3QiIHRvIGJ5cGFzcw0KQEAgLTcwNiwx NCArNzA0LDE0IEBADQogCQljYXNlIEdQQ01EX0JMQU5LOg0KIAkJY2FzZSBH UENNRF9GT1JNQVRfVU5JVDoNCiAJCWNhc2UgR1BDTURfUkVTRVJWRV9SWk9O RV9UUkFDSzoNCi0JCQl3YWl0ID0gV0FJVF9DTUQ7DQotCQkJYnJlYWs7DQor CQkJKndhaXQgPSBXQUlUX0NNRDsNCisJCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7 DQogCQlkZWZhdWx0Og0KLQkJCXdhaXQgPSAwOw0KKwkJCSp3YWl0ID0gMDsN CiAJCQlicmVhazsNCiAJfQ0KIA0KLQlyZXR1cm4gd2FpdDsNCisJcmV0dXJu IGlkZV9zdG9wcGVkOw0KIH0NCiANCiAvKiBTZXQgdXAgdGhlIGRldmljZSBy ZWdpc3RlcnMgZm9yIHRyYW5zZmVycmluZyBhIHBhY2tldCBjb21tYW5kIG9u IERFViwNCkBAIC03MjgsMTMgKzcyNiwxMCBAQA0KIAkJCQkJCSAgaW50IHhm ZXJsZW4sDQogCQkJCQkJICBhdGFfaGFuZGxlcl90IGhhbmRsZXIpDQogew0K LQl1bnNpZ25lZCBsb25nIGZsYWdzOw0KLQlzdHJ1Y3QgYXRhX2NoYW5uZWwg KmNoID0gZHJpdmUtPmNoYW5uZWw7DQogCWlkZV9zdGFydHN0b3BfdCBzdGFy dHN0b3A7DQogCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gZHJpdmUtPmRy aXZlcl9kYXRhOw0KIAlpbnQgcmV0Ow0KIA0KLQlzcGluX2xvY2tfaXJxc2F2 ZShjaC0+bG9jaywgZmxhZ3MpOw0KIAkvKiBXYWl0IGZvciB0aGUgY29udHJv bGxlciB0byBiZSBpZGxlLiAqLw0KIAlpZiAoYXRhX3N0YXR1c19wb2xsKGRy aXZlLCAwLCBCVVNZX1NUQVQsIFdBSVRfUkVBRFksIHJxLCAmc3RhcnRzdG9w KSkNCiAJCXJldCA9IHN0YXJ0c3RvcDsNCkBAIC03NjQsMTUgKzc1OSw5IEBA DQogCQl9IGVsc2Ugew0KIAkJCU9VVF9CWVRFIChXSU5fUEFDS0VUQ01ELCBJ REVfQ09NTUFORF9SRUcpOyAvKiBwYWNrZXQgY29tbWFuZCAqLw0KIA0KLQkJ CS8qIEZJWE1FOiBPaiBrdXJ3YSEgV2UgaGF2ZSB0byB1bmdyYWIgdGhlIGxv Y2sgYmVmb3JlDQotCQkJICogdGhlIElSUSBoYW5kbGVyIGdldHMgY2FsbGVk Lg0KLQkJCSAqLw0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2gtPmxv Y2ssIGZsYWdzKTsNCiAJCQlyZXQgPSBoYW5kbGVyKGRyaXZlLCBycSk7DQot CQkJc3Bpbl9sb2NrX2lycXNhdmUoY2gtPmxvY2ssIGZsYWdzKTsNCiAJCX0N CiAJfQ0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFn cyk7DQogDQogCXJldHVybiByZXQ7DQogfQ0KQEAgLTc4Nyw4ICs3NzYsNiBA QA0KIAkJdW5zaWduZWQgY2hhciAqY21kLCB1bnNpZ25lZCBsb25nIHRpbWVv dXQsDQogCQlhdGFfaGFuZGxlcl90IGhhbmRsZXIpDQogew0KLQl1bnNpZ25l ZCBsb25nIGZsYWdzOw0KLQlzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZHJp dmUtPmNoYW5uZWw7DQogCWlkZV9zdGFydHN0b3BfdCBzdGFydHN0b3A7DQog DQogCWlmIChDRFJPTV9DT05GSUdfRkxBR1MgKGRyaXZlKS0+ZHJxX2ludGVy cnVwdCkgew0KQEAgLTgwMCwyNCArNzg3LDE1IEBADQogCQlpZiAoY2Ryb21f ZGVjb2RlX3N0YXR1cygmc3RhcnRzdG9wLCBkcml2ZSwgcnEsIERSUV9TVEFU LCAmc3RhdF9kdW0pKQ0KIAkJCXJldHVybiBzdGFydHN0b3A7DQogCX0gZWxz ZSB7DQotCQkvKiBGSVhNRTogbWFrZSB0aGlzIGxvY2tpbmcgZ28gYXdheSAq Lw0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoY2gtPmxvY2ssIGZsYWdzKTsNCiAJ CS8qIE90aGVyd2lzZSwgd2UgbXVzdCB3YWl0IGZvciBEUlEgdG8gZ2V0IHNl dC4gKi8NCiAJCWlmIChhdGFfc3RhdHVzX3BvbGwoZHJpdmUsIERSUV9TVEFU LCBCVVNZX1NUQVQsDQotCQkJCQlXQUlUX1JFQURZLCBycSwgJnN0YXJ0c3Rv cCkpIHsNCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2NrLCBm bGFncyk7DQotDQorCQkJCQlXQUlUX1JFQURZLCBycSwgJnN0YXJ0c3RvcCkp DQogCQkJcmV0dXJuIHN0YXJ0c3RvcDsNCi0JCX0NCi0JCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoY2gtPmxvY2ssIGZsYWdzKTsNCiAJfQ0KIA0KIAkvKiBB cm0gdGhlIGludGVycnVwdCBoYW5kbGVyIGFuZCBzZW5kIHRoZSBjb21tYW5k IHRvIHRoZSBkZXZpY2UuICovDQotCS8qIEZJWE1FOiBtYWtlIHRoaXMgbG9j a2luZyBnbyBhd2F5ICovDQotCXNwaW5fbG9ja19pcnFzYXZlKGNoLT5sb2Nr LCBmbGFncyk7DQogCWF0YV9zZXRfaGFuZGxlcihkcml2ZSwgaGFuZGxlciwg dGltZW91dCwgY2Ryb21fdGltZXJfZXhwaXJ5KTsNCiAJYXRhcGlfd3JpdGUo ZHJpdmUsIGNtZCwgQ0RST01fUEFDS0VUX1NJWkUpOw0KLQlzcGluX3VubG9j a19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7DQogDQogCXJldHVybiBp ZGVfc3RhcnRlZDsNCiB9DQpAQCAtOTE3LDggKzg5NSw2IEBADQogICovDQog c3RhdGljIGlkZV9zdGFydHN0b3BfdCBjZHJvbV9yZWFkX2ludHIoc3RydWN0 IGF0YV9kZXZpY2UgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpDQogew0K LQl1bnNpZ25lZCBsb25nIGZsYWdzOw0KLQlzdHJ1Y3QgYXRhX2NoYW5uZWwg KmNoID0gZHJpdmUtPmNoYW5uZWw7DQogCWludCBzdGF0Ow0KIAlpbnQgaXJl YXNvbiwgbGVuLCBzZWN0b3JzX3RvX3RyYW5zZmVyLCBuc2tpcDsNCiAJc3Ry dWN0IGNkcm9tX2luZm8gKmluZm8gPSBkcml2ZS0+ZHJpdmVyX2RhdGE7DQpA QCAtOTM3LDEzICs5MTMsNyBAQA0KIA0KIAlpZiAoZG1hKSB7DQogCQlpZiAo IWRtYV9lcnJvcikgew0KLQkJCS8qIEZJWE1FOiB0aGlzIGxvY2tpbmcgc2hv dWxkIGVuY29tcGFzcyB0aGUgYWJvdmUgcmVnaXN0ZXINCi0JCQkgKiBmaWxl IGFjY2VzcyB0b28uDQotCQkJICovDQotDQotCQkJc3Bpbl9sb2NrX2lycXNh dmUoY2gtPmxvY2ssIGZsYWdzKTsNCiAJCQlfX2F0YV9lbmRfcmVxdWVzdChk cml2ZSwgcnEsIDEsIHJxLT5ucl9zZWN0b3JzKTsNCi0JCQlzcGluX3VubG9j a19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7DQogDQogCQkJcmV0dXJu IGlkZV9zdG9wcGVkOw0KIAkJfSBlbHNlDQpAQCAtMTA0MCw5ICsxMDEwLDcg QEANCiAJfQ0KIA0KIAkvKiBEb25lIG1vdmluZyBkYXRhISBXYWl0IGZvciBh bm90aGVyIGludGVycnVwdC4gKi8NCi0Jc3Bpbl9sb2NrX2lycXNhdmUoY2gt PmxvY2ssIGZsYWdzKTsNCiAJYXRhX3NldF9oYW5kbGVyKGRyaXZlLCBjZHJv bV9yZWFkX2ludHIsIFdBSVRfQ01ELCBOVUxMKTsNCi0Jc3Bpbl91bmxvY2tf aXJxcmVzdG9yZShjaC0+bG9jaywgZmxhZ3MpOw0KIA0KIAlyZXR1cm4gaWRl X3N0YXJ0ZWQ7DQogfQ0KQEAgLTEyNDUsNyArMTIxMyw3IEBADQogCWlmIChj ZHJvbV9yZWFkX2Zyb21fYnVmZmVyKGRyaXZlLCBycSkpDQogCQlyZXR1cm4g aWRlX3N0b3BwZWQ7DQogDQotCWJsa19hdHRlbXB0X3JlbWVyZ2UoJmRyaXZl LT5xdWV1ZSwgcnEpOw0KKwlfX2Jsa19hdHRlbXB0X3JlbWVyZ2UoJmRyaXZl LT5xdWV1ZSwgcnEpOw0KIA0KIAkvKiBDbGVhciB0aGUgbG9jYWwgc2VjdG9y IGJ1ZmZlci4gKi8NCiAJaW5mby0+bnNlY3RvcnNfYnVmZmVyZWQgPSAwOw0K QEAgLTEyNjksOCArMTIzNyw2IEBADQogLyogSW50ZXJydXB0IHJvdXRpbmUg Zm9yIHBhY2tldCBjb21tYW5kIGNvbXBsZXRpb24uICovDQogc3RhdGljIGlk ZV9zdGFydHN0b3BfdCBjZHJvbV9wY19pbnRyKHN0cnVjdCBhdGFfZGV2aWNl ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQ0KIHsNCi0JdW5zaWduZWQg bG9uZyBmbGFnczsNCi0Jc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRyaXZl LT5jaGFubmVsOw0KIAlpbnQgaXJlYXNvbiwgbGVuLCBzdGF0LCB0aGlzbGVu Ow0KIA0KIAkvKiBGSVhNRSAtLW1kY2tpICovDQpAQCAtMTM2Myw5ICsxMzI5 LDcgQEANCiAJfQ0KIA0KIAkvKiBOb3cgd2Ugd2FpdCBmb3IgYW5vdGhlciBp bnRlcnJ1cHQuICovDQotCXNwaW5fbG9ja19pcnFzYXZlKGNoLT5sb2NrLCBm bGFncyk7DQogCWF0YV9zZXRfaGFuZGxlcihkcml2ZSwgY2Ryb21fcGNfaW50 ciwgV0FJVF9DTUQsIGNkcm9tX3RpbWVyX2V4cGlyeSk7DQotCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoY2gtPmxvY2ssIGZsYWdzKTsNCiANCiAJcmV0dXJu IGlkZV9zdGFydGVkOw0KIH0NCkBAIC0xNTA4LDggKzE0NzIsNiBAQA0KIA0K IHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgY2Ryb21fd3JpdGVfaW50cihzdHJ1 Y3QgYXRhX2RldmljZSAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkNCiB7 DQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQotCXN0cnVjdCBhdGFfY2hhbm5l bCAqY2ggPSBkcml2ZS0+Y2hhbm5lbDsNCiAJaW50IHN0YXQsIGlyZWFzb24s IGxlbiwgc2VjdG9yc190b190cmFuc2ZlciwgdXB0b2RhdGU7DQogCXN0cnVj dCBjZHJvbV9pbmZvICppbmZvID0gZHJpdmUtPmRyaXZlcl9kYXRhOw0KIAlp bnQgZG1hX2Vycm9yID0gMCwgZG1hID0gaW5mby0+ZG1hOw0KQEAgLTE1MzYs MTMgKzE0OTgsNyBAQA0KIAkJaWYgKGRtYV9lcnJvcikNCiAJCQlyZXR1cm4g YXRhX2Vycm9yKGRyaXZlLCBycSwgImRtYSBlcnJvciIpOw0KIA0KLQkJLyog RklYTUU6IHRoaXMgbG9ja2luZyBzaG91bGQgZW5jb21wYXNzIHRoZSBhYm92 ZSByZWdpc3Rlcg0KLQkJICogZmlsZSBhY2Nlc3MgdG9vLg0KLQkJICovDQot DQotCQlzcGluX2xvY2tfaXJxc2F2ZShjaC0+bG9jaywgZmxhZ3MpOw0KIAkJ X19hdGFfZW5kX3JlcXVlc3QoZHJpdmUsIHJxLCAxLCBycS0+bnJfc2VjdG9y cyk7DQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFn cyk7DQogDQogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7DQogCX0NCkBAIC0xNjA3 LDkgKzE1NjMsNyBAQA0KIAl9DQogDQogCS8qIHJlLWFybSBoYW5kbGVyICov DQotCXNwaW5fbG9ja19pcnFzYXZlKGNoLT5sb2NrLCBmbGFncyk7DQogCWF0 YV9zZXRfaGFuZGxlcihkcml2ZSwgY2Ryb21fd3JpdGVfaW50ciwgNSAqIFdB SVRfQ01ELCBOVUxMKTsNCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShjaC0+ bG9jaywgZmxhZ3MpOw0KIA0KIAlyZXR1cm4gaWRlX3N0YXJ0ZWQ7DQogfQ0K QEAgLTE2MzcsNyArMTU5MSw3IEBADQogCSAqIHJlbWVyZ2UgcmVxdWVzdHMs IG9mdGVuIHRoZSBwbHVnZ2luZyB3aWxsIG5vdCBoYXZlIGhhZCB0aW1lDQog CSAqIHRvIGRvIHRoaXMgcHJvcGVybHkNCiAJICovDQotCWJsa19hdHRlbXB0 X3JlbWVyZ2UoJmRyaXZlLT5xdWV1ZSwgcnEpOw0KKwlfX2Jsa19hdHRlbXB0 X3JlbWVyZ2UoJmRyaXZlLT5xdWV1ZSwgcnEpOw0KIA0KIAlpbmZvLT5uc2Vj dG9yc19idWZmZXJlZCA9IDA7DQogDQpAQCAtMTY1OCw3ICsxNjEyLDYgQEAN CiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90DQogaWRlX2Nkcm9tX2RvX3JlcXVl c3Qoc3RydWN0IGF0YV9kZXZpY2UgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAq cnEsIHNlY3Rvcl90IGJsb2NrKQ0KIHsNCi0Jc3RydWN0IGF0YV9jaGFubmVs ICpjaCA9IGRyaXZlLT5jaGFubmVsOw0KIAlpbnQgcmV0Ow0KIAlzdHJ1Y3Qg Y2Ryb21faW5mbyAqaW5mbyA9IGRyaXZlLT5kcml2ZXJfZGF0YTsNCiANCkBA IC0xNjc1LDggKzE2MjgsNiBAQA0KIAkJCX0NCiAJCQlDRFJPTV9DT05GSUdf RkxBR1MoZHJpdmUpLT5zZWVraW5nID0gMDsNCiAJCX0NCi0JCS8qIEZJWE1F OiBtYWtlIHRoaXMgdW5sb2NraW5nIGdvIGF3YXkqLw0KLQkJc3Bpbl91bmxv Y2tfaXJxKGNoLT5sb2NrKTsNCiAJCWlmIChJREVfTEFSR0VfU0VFSyhpbmZv LT5sYXN0X2Jsb2NrLCBibG9jaywgSURFQ0RfU0VFS19USFJFU0hPTEQpICYm IGRyaXZlLT5kc2Nfb3ZlcmxhcCkgew0KIAkJCXJldCA9IGNkcm9tX3N0YXJ0 X3NlZWsoZHJpdmUsIHJxLCBibG9jayk7DQogCQl9IGVsc2Ugew0KQEAgLTE2 ODYsMTMgKzE2MzcsOSBAQA0KIAkJCQlyZXQgPSBjZHJvbV9zdGFydF93cml0 ZShkcml2ZSwgcnEpOw0KIAkJfQ0KIAkJaW5mby0+bGFzdF9ibG9jayA9IGJs b2NrOw0KLQkJc3Bpbl9sb2NrX2lycShjaC0+bG9jayk7DQogCQlyZXR1cm4g cmV0Ow0KIAl9IGVsc2UgaWYgKHJxLT5mbGFncyAmIChSRVFfUEMgfCBSRVFf U0VOU0UpKSB7DQotCQkvKiBGSVhNRTogbWFrZSB0aGlzIHVubG9ja2luZyBn byBhd2F5Ki8NCi0JCXNwaW5fdW5sb2NrX2lycShjaC0+bG9jayk7DQogCQly ZXQgPSBjZHJvbV9kb19wYWNrZXRfY29tbWFuZChkcml2ZSwgcnEpOw0KLQkJ c3Bpbl9sb2NrX2lycShjaC0+bG9jayk7DQogDQogCQlyZXR1cm4gcmV0Ow0K IAl9IGVsc2UgaWYgKHJxLT5mbGFncyAmIFJFUV9TUEVDSUFMKSB7DQpAQCAt MTcwMywxMCArMTY1MCw3IEBADQogCQkgKiByaWdodCBub3cgdGhpcyBjYW4g b25seSBiZSBhIHJlc2V0Li4uDQogCQkgKi8NCiANCi0JICAgICAgICAvKiBG SVhNRTogbWFrZSB0aGlzIHVubG9ja2luZyBnbyBhd2F5Ki8NCi0JCXNwaW5f dW5sb2NrX2lycShjaC0+bG9jayk7DQogCQljZHJvbV9lbmRfcmVxdWVzdChk cml2ZSwgcnEsIDEpOw0KLQkJc3Bpbl9sb2NrX2lycShjaC0+bG9jayk7DQog DQogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7DQogCX0gZWxzZSBpZiAocnEtPmZs YWdzICYgUkVRX0JMT0NLX1BDKSB7DQpAQCAtMTcyMCwxMCArMTY2NCw3IEBA DQogCQkvKiBGSVhNRSAtLW1kY2tpICovDQogCQlycS0+c3BlY2lhbCA9IChj aGFyICopICZwYzsNCiANCi0JCS8qIEZJWE1FOiBtYWtlIHRoaXMgdW5sb2Nr aW5nIGdvIGF3YXkqLw0KLQkJc3Bpbl91bmxvY2tfaXJxKGNoLT5sb2NrKTsN CiAJCXN0YXJ0c3RvcCA9IGNkcm9tX2RvX3BhY2tldF9jb21tYW5kKGRyaXZl LCBycSk7DQotCQlzcGluX2xvY2tfaXJxKGNoLT5sb2NrKTsNCiANCiAJCWlm IChwYy5zdGF0KQ0KIAkJCSsrcnEtPmVycm9yczsNCkBAIC0xNzMyLDEwICsx NjczLDggQEANCiAJfQ0KIA0KIAlibGtfZHVtcF9ycV9mbGFncyhycSwgImlk ZS1jZCBiYWQgZmxhZ3MiKTsNCi0JLyogRklYTUU6IG1ha2UgdGhpcyB1bmxv Y2tpbmcgZ28gYXdheSovDQotCXNwaW5fdW5sb2NrX2lycShjaC0+bG9jayk7 DQorDQogCWNkcm9tX2VuZF9yZXF1ZXN0KGRyaXZlLCBycSwgMCk7DQotCXNw aW5fbG9ja19pcnEoY2gtPmxvY2spOw0KIA0KIAlyZXR1cm4gaWRlX3N0b3Bw ZWQ7DQogfQ0KZGlmZiAtWCBkb250ZGlmZiAtdXIgbGludXgtMi41LjI0L2Ry aXZlcnMvaWRlL2lkZS1kaXNrLmMgbGludXgvZHJpdmVycy9pZGUvaWRlLWRp c2suYw0KLS0tIGxpbnV4LTIuNS4yNC9kcml2ZXJzL2lkZS9pZGUtZGlzay5j CVdlZCBKdW4gMjYgMDA6MDI6NTMgMjAwMg0KKysrIGxpbnV4L2RyaXZlcnMv aWRlL2lkZS1kaXNrLmMJV2VkIEp1biAyNiAyMjoxNzoxMSAyMDAyDQpAQCAt MTA3LDIyICsxMDcsMjAgQEANCiB9DQogDQogLyoNCisgKiBUaGUgZm9sbG93 aW5nIElSUSBoYW5kbGVycyAoKl9pbnRyKSBzaG91bGQgYmUgY2FsbGVkDQor ICogd2l0aCB0aGUgY2hhbm5lbCBsb2NrIGhlbGQgYW5kIGludGVycnVwdHMg ZGlzYWJsZWQuDQorICovDQorDQorLyoNCiAgKiBIYW5kbGVyIGZvciBjb21t YW5kIHdpdGggUElPIGRhdGEtaW4gcGhhc2UuDQogICovDQogc3RhdGljIGlk ZV9zdGFydHN0b3BfdCB0YXNrX2luX2ludHIoc3RydWN0IGF0YV9kZXZpY2Ug KmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpDQogew0KLQl1bnNpZ25lZCBs b25nIGZsYWdzOw0KLQlzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZHJpdmUt PmNoYW5uZWw7DQogCWludCByZXQ7DQogDQotCXNwaW5fbG9ja19pcnFzYXZl KGNoLT5sb2NrLCBmbGFncyk7DQotDQogCWlmICghYXRhX3N0YXR1cyhkcml2 ZSwgREFUQV9SRUFEWSwgQkFEX1JfU1RBVCkpIHsNCi0JCWlmIChkcml2ZS0+ c3RhdHVzICYgKEVSUl9TVEFUIHwgRFJRX1NUQVQpKSB7DQotCQkJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZShjaC0+bG9jaywgZmxhZ3MpOw0KLQ0KKwkJaWYg KGRyaXZlLT5zdGF0dXMgJiAoRVJSX1NUQVQgfCBEUlFfU1RBVCkpDQogCQkJ cmV0dXJuIGF0YV9lcnJvcihkcml2ZSwgcnEsIF9fRlVOQ1RJT05fXyk7DQot CQl9DQogDQogCQkvKiBubyBkYXRhIHlldCwgc28gd2FpdCBmb3IgYW5vdGhl ciBpbnRlcnJ1cHQgKi8NCiAJCWF0YV9zZXRfaGFuZGxlcihkcml2ZSwgdGFz a19pbl9pbnRyLCBXQUlUX0NNRCwgTlVMTCk7DQpAQCAtMTQ5LDcgKzE0Nyw2 IEBADQogCQlpZiAocnEtPmN1cnJlbnRfbnJfc2VjdG9ycyA8PSAwKSB7DQog CQkJaWYgKCFfX2F0YV9lbmRfcmVxdWVzdChkcml2ZSwgcnEsIDEsIDApKSB7 DQogCQkJLy8JCXByaW50aygiUmVxdWVzdCBFbmRlZCBzdGF0OiAlMDJ4XG4i LCBkcml2ZS0+c3RhdHVzKTsNCi0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZShjaC0+bG9jaywgZmxhZ3MpOw0KIA0KIAkJCQlyZXR1cm4gaWRlX3N0b3Bw ZWQ7DQogCQkJfQ0KQEAgLTE2MCw3ICsxNTcsNiBAQA0KIA0KIAkJcmV0ID0g aWRlX3N0YXJ0ZWQ7DQogCX0NCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShj aC0+bG9jaywgZmxhZ3MpOw0KIA0KIAlyZXR1cm4gcmV0Ow0KIH0NCkBAIC0x NzAsMTYgKzE2NiwxMCBAQA0KICAqLw0KIHN0YXRpYyBpZGVfc3RhcnRzdG9w X3QgdGFza19vdXRfaW50cihzdHJ1Y3QgYXRhX2RldmljZSAqZHJpdmUsIHN0 cnVjdCByZXF1ZXN0ICpycSkNCiB7DQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 DQotCXN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkcml2ZS0+Y2hhbm5lbDsN CiAJaW50IHJldDsNCiANCi0Jc3Bpbl9sb2NrX2lycXNhdmUoY2gtPmxvY2ss IGZsYWdzKTsNCi0JaWYgKCFhdGFfc3RhdHVzKGRyaXZlLCBEUklWRV9SRUFE WSwgZHJpdmUtPmJhZF93c3RhdCkpIHsNCi0JCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoY2gtPmxvY2ssIGZsYWdzKTsNCi0NCisJaWYgKCFhdGFfc3RhdHVz KGRyaXZlLCBEUklWRV9SRUFEWSwgZHJpdmUtPmJhZF93c3RhdCkpDQogCQly ZXR1cm4gYXRhX2Vycm9yKGRyaXZlLCBycSwgX19GVU5DVElPTl9fKTsNCi0J fQ0KIA0KIAlpZiAoIXJxLT5jdXJyZW50X25yX3NlY3RvcnMgJiYgIV9fYXRh X2VuZF9yZXF1ZXN0KGRyaXZlLCBycSwgMSwgMCkpIHsNCiAJCXJldCA9IGlk ZV9zdG9wcGVkOw0KQEAgLTIwMCw3ICsxOTAsNiBAQA0KIA0KIAkJcmV0ID0g aWRlX3N0YXJ0ZWQ7DQogCX0NCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShj aC0+bG9jaywgZmxhZ3MpOw0KIA0KIAlyZXR1cm4gcmV0Ow0KIH0NCkBAIC0y MTAsMTcgKzE5OSwxMSBAQA0KICAqLw0KIHN0YXRpYyBpZGVfc3RhcnRzdG9w X3QgdGFza19tdWxpbl9pbnRyKHN0cnVjdCBhdGFfZGV2aWNlICpkcml2ZSwg c3RydWN0IHJlcXVlc3QgKnJxKQ0KIHsNCi0JdW5zaWduZWQgbG9uZyBmbGFn czsNCi0Jc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRyaXZlLT5jaGFubmVs Ow0KIAlpbnQgcmV0Ow0KIA0KLQlzcGluX2xvY2tfaXJxc2F2ZShjaC0+bG9j aywgZmxhZ3MpOw0KIAlpZiAoIWF0YV9zdGF0dXMoZHJpdmUsIERBVEFfUkVB RFksIEJBRF9SX1NUQVQpKSB7DQotCQlpZiAoZHJpdmUtPnN0YXR1cyAmIChF UlJfU1RBVCB8IERSUV9TVEFUKSkgew0KLQkJCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoY2gtPmxvY2ssIGZsYWdzKTsNCi0NCisJCWlmIChkcml2ZS0+c3Rh dHVzICYgKEVSUl9TVEFUIHwgRFJRX1NUQVQpKQ0KIAkJCXJldHVybiBhdGFf ZXJyb3IoZHJpdmUsIHJxLCBfX0ZVTkNUSU9OX18pOw0KLQkJfQ0KIA0KIAkJ Lyogbm8gZGF0YSB5ZXQsIHNvIHdhaXQgZm9yIGFub3RoZXIgaW50ZXJydXB0 ICovDQogCQlhdGFfc2V0X2hhbmRsZXIoZHJpdmUsIHRhc2tfbXVsaW5faW50 ciwgV0FJVF9DTUQsIE5VTEwpOw0KQEAgLTI1NywxMSArMjQwLDggQEANCiAN CiAJCQkvKiBGSVhNRTogdGhpcyBzZWVtcyBidWdneSAqLw0KIAkJCWlmIChy cS0+Y3VycmVudF9ucl9zZWN0b3JzIDw9IDApIHsNCi0JCQkJaWYgKCFfX2F0 YV9lbmRfcmVxdWVzdChkcml2ZSwgcnEsIDEsIDApKSB7DQotCQkJCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7DQotDQorCQkJ CWlmICghX19hdGFfZW5kX3JlcXVlc3QoZHJpdmUsIHJxLCAxLCAwKSkNCiAJ CQkJCXJldHVybiBpZGVfc3RvcHBlZDsNCi0JCQkJfQ0KIAkJCX0NCiAJCQlt c2VjdCAtPSBuc2VjdDsNCiAJCX0gd2hpbGUgKG1zZWN0KTsNCkBAIC0yNzEs MjAgKzI1MSwxNiBAQA0KIA0KIAkJcmV0ID0gaWRlX3N0YXJ0ZWQ7DQogCX0N Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShjaC0+bG9jaywgZmxhZ3MpOw0K IA0KIAlyZXR1cm4gcmV0Ow0KIH0NCiANCiBzdGF0aWMgaWRlX3N0YXJ0c3Rv cF90IHRhc2tfbXVsb3V0X2ludHIoc3RydWN0IGF0YV9kZXZpY2UgKmRyaXZl LCBzdHJ1Y3QgcmVxdWVzdCAqcnEpDQogew0KLQl1bnNpZ25lZCBsb25nIGZs YWdzOw0KIAlzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZHJpdmUtPmNoYW5u ZWw7DQogCWludCBvazsNCiAJaW50IHJldDsNCiANCi0Jc3Bpbl9sb2NrX2ly cXNhdmUoY2gtPmxvY2ssIGZsYWdzKTsNCi0NCiAJLyoNCiAJICogRklYTUU6 IHRoZSBkcml2ZS0+c3RhdHVzIGNoZWNrcyBoZXJlIHNlZW0gdG8gYmUgbWVz c3kuDQogCSAqDQpAQCAtMjk1LDExICsyNzEsOCBAQA0KIAlvayA9IGF0YV9z dGF0dXMoZHJpdmUsIERBVEFfUkVBRFksIEJBRF9SX1NUQVQpOw0KIA0KIAlp ZiAoIW9rIHx8ICFycS0+bnJfc2VjdG9ycykgew0KLQkJaWYgKGRyaXZlLT5z dGF0dXMgJiAoRVJSX1NUQVQgfCBEUlFfU1RBVCkpIHsNCi0JCQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7DQotDQorCQlpZiAo ZHJpdmUtPnN0YXR1cyAmIChFUlJfU1RBVCB8IERSUV9TVEFUKSkNCiAJCQly ZXR1cm4gYXRhX2Vycm9yKGRyaXZlLCBycSwgX19GVU5DVElPTl9fKTsNCi0J CX0NCiAJfQ0KIAlpZiAoIXJxLT5ucl9zZWN0b3JzKSB7DQogCQlfX2F0YV9l bmRfcmVxdWVzdChkcml2ZSwgcnEsIDEsIHJxLT5oYXJkX25yX3NlY3RvcnMp Ow0KQEAgLTMwNyw2ICsyODAsNyBAQA0KIAkJcmV0ID0gaWRlX3N0b3BwZWQ7 DQogCX0gZWxzZSBpZiAoIW9rKSB7DQogCQkvKiBubyBkYXRhIHlldCwgc28g d2FpdCBmb3IgYW5vdGhlciBpbnRlcnJ1cHQgKi8NCisJCS8qIEZJWE1FOiAg LS1iem9sbmllciAqLw0KIAkJaWYgKCFjaC0+aGFuZGxlcikNCiAJCQlhdGFf c2V0X2hhbmRsZXIoZHJpdmUsIHRhc2tfbXVsb3V0X2ludHIsIFdBSVRfQ01E LCBOVUxMKTsNCiAJCXJldCA9IGlkZV9zdGFydGVkOw0KQEAgLTM1MSwxNCAr MzI1LDE0IEBADQogDQogCQlycS0+ZXJyb3JzID0gMDsNCiANCisJCS8qIEZJ WE1FOiAgLS1iem9sbmllciAqLw0KIAkJaWYgKCFjaC0+aGFuZGxlcikNCiAJ CQlhdGFfc2V0X2hhbmRsZXIoZHJpdmUsIHRhc2tfbXVsb3V0X2ludHIsIFdB SVRfQ01ELCBOVUxMKTsNCiANCiAJCXJldCA9IGlkZV9zdGFydGVkOw0KIAl9 DQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2gtPmxvY2ssIGZsYWdzKTsN CiANCi0JcmV0dXJuIGlkZV9zdGFydGVkOw0KKwlyZXR1cm4gcmV0Ow0KIH0N CiANCiAvKg0KQEAgLTUwOCw4ICs0ODIsNyBAQA0KIAkJCQl9IGVsc2UgaWYg KGRyaXZlLT51c2luZ19kbWEpIHsNCiAJCQkJCWNtZCA9IFdJTl9SRUFERE1B Ow0KIAkJCQl9IGVsc2UgaWYgKGRyaXZlLT5tdWx0X2NvdW50KSB7DQotCQkJ CQkvKiBGSVhNRSA6IFNob3VsZG4ndCB0aGlzIGJlIHRhc2tfbXVsaW5faW50 cj8hICovDQotCQkJCQlhcmdzLlhYWF9oYW5kbGVyID0gdGFza19pbl9pbnRy Ow0KKwkJCQkJYXJncy5YWFhfaGFuZGxlciA9IHRhc2tfbXVsaW5faW50cjsN CiAJCQkJCWNtZCA9IFdJTl9NVUxUUkVBRDsNCiAJCQkJfSBlbHNlIHsNCiAJ CQkJCWFyZ3MuWFhYX2hhbmRsZXIgPSB0YXNrX2luX2ludHI7DQpAQCAtNTc5 LDcgKzU1Miw2IEBADQogCS8qIEZJWE1FOiB0aGlzIGlzIGFjdHVhbGx5IGRp c3Rpbmd1c2hpbmcgYmV0d2VlbiBQSU8gYW5kIERNQSByZXF1ZXN0cy4NCiAJ ICovDQogCWlmIChhci0+WFhYX2hhbmRsZXIpIHsNCi0JCXN0cnVjdCBhdGFf Y2hhbm5lbCAqY2ggPSBkcml2ZS0+Y2hhbm5lbDsNCiANCiAJCWF0YV9zZXRf aGFuZGxlcihkcml2ZSwgYXItPlhYWF9oYW5kbGVyLCBXQUlUX0NNRCwgTlVM TCk7DQogCQlPVVRfQllURShjbWQsIElERV9DT01NQU5EX1JFRyk7DQpAQCAt NjI4LDcgKzYwMCw2IEBADQogCQkJCXJldHVybiBpZGVfc3RhcnRlZDsNCiAJ CQl9IGVsc2Ugew0KIAkJCQlpbnQgaTsNCi0JCQkJaW50IHJldDsNCiANCiAJ CQkJLyogUG9sbGluZyB3YWl0IHVudGlsIHRoZSBkcml2ZSBpcyByZWFkeS4N CiAJCQkJICoNCkBAIC02NDksMTIgKzYyMCw4IEBADQogCQkJCQkgKi8NCiAJ CQkJCXByaW50ayhLRVJOX0VSUiAiRElTQVNURVIgV0FJVElORyBUTyBIQVBQ RU4hXG4iKTsNCiAJCQkJfQ0KLQkJCQkvKiBGSVhNRTogbWFrZSB0aGlzIHVu bG9ja2luZyBnbyBhd2F5Ki8NCi0JCQkJc3Bpbl91bmxvY2tfaXJxKGNoLT5s b2NrKTsNCi0JCQkJcmV0ID0gIGFyLT5YWFhfaGFuZGxlcihkcml2ZSwgcnEp Ow0KLQkJCQlzcGluX2xvY2tfaXJxKGNoLT5sb2NrKTsNCiANCi0JCQkJcmV0 dXJuIHJldDsNCisJCQkJcmV0dXJuIGFyLT5YWFhfaGFuZGxlcihkcml2ZSwg cnEpOw0KIAkJCX0NCiAJCX0NCiAJfSBlbHNlIHsNCmRpZmYgLVggZG9udGRp ZmYgLXVyIGxpbnV4LTIuNS4yNC9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMg bGludXgvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jDQotLS0gbGludXgtMi41 LjI0L2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwlXZWQgSnVuIDI2IDAwOjAy OjUzIDIwMDINCisrKyBsaW51eC9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMJ VGh1IEp1biAyNyAxMjozNzo1MyAyMDAyDQpAQCAtMzY1LDcgKzM2NSw3IEBA DQogCQlyZXR1cm4gMDsNCiANCiAJaWYgKCEocnEtPmZsYWdzICYgUkVRX1NQ RUNJQUwpKSB7DQotCQlhdGFfZW5kX3JlcXVlc3QoZHJpdmUsIHJxLCB1cHRv ZGF0ZSk7DQorCQlfX2F0YV9lbmRfcmVxdWVzdChkcml2ZSwgcnEsIHVwdG9k YXRlLCAwKTsNCiAJCXJldHVybiAwOw0KIAl9DQogDQpAQCAtNTU0LDggKzU1 NCw2IEBADQogICovDQogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVmbG9w cHlfcGNfaW50cihzdHJ1Y3QgYXRhX2RldmljZSAqZHJpdmUsIHN0cnVjdCBy ZXF1ZXN0ICpycSkNCiB7DQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQotCXN0 cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkcml2ZS0+Y2hhbm5lbDsNCiAJaWRl ZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7 DQogCWF0YXBpX3N0YXR1c19yZWdfdCBzdGF0dXM7DQogCWF0YXBpX2Jjb3Vu dF9yZWdfdCBiY291bnQ7DQpAQCAtNjE4LDI2ICs2MTYsMjAgQEANCiAJCXJl dHVybiBpZGVfc3RvcHBlZDsNCiAJfQ0KICNlbmRpZg0KLQkvKiBGSVhNRTog dGhpcyBsb2NraW5nIHNob3VsZCBlbmNvbXBhc3MgdGhlIGFib3ZlIHJlZ2lz dGVyDQotCSAqIGZpbGUgYWNjZXNzIHRvby4NCi0JICovDQogDQotCXNwaW5f bG9ja19pcnFzYXZlKGNoLT5sb2NrLCBmbGFncyk7DQogCWJjb3VudC5iLmhp Z2g9SU5fQllURSAoSURFX0JDT1VOVEhfUkVHKTsJCQkvKiBHZXQgdGhlIG51 bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciAqLw0KIAliY291bnQuYi5sb3c9 SU5fQllURSAoSURFX0JDT1VOVExfUkVHKTsJCQkvKiBvbiB0aGlzIGludGVy cnVwdCAqLw0KIAlpcmVhc29uLmFsbD1JTl9CWVRFIChJREVfSVJFQVNPTl9S RUcpOw0KIA0KIAlpZiAoaXJlYXNvbi5iLmNvZCkgew0KLQkJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZShjaC0+bG9jaywgZmxhZ3MpOw0KLQ0KIAkJcHJpbnRr IChLRVJOX0VSUiAiaWRlLWZsb3BweTogQ29EICE9IDAgaW4gaWRlZmxvcHB5 X3BjX2ludHJcbiIpOw0KKw0KIAkJcmV0dXJuIGlkZV9zdG9wcGVkOw0KIAl9 DQogCWlmIChpcmVhc29uLmIuaW8gPT0gdGVzdF9iaXQoUENfV1JJVElORywg JnBjLT5mbGFncykpIHsJLyogSG9wZWZ1bGx5LCB3ZSB3aWxsIG5ldmVyIGdl dCBoZXJlICovDQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2Nr LCBmbGFncyk7DQotDQogCQlwcmludGsgKEtFUk5fRVJSICJpZGUtZmxvcHB5 OiBXZSB3YW50ZWQgdG8gJXMsICIsIGlyZWFzb24uYi5pbyA/ICJXcml0ZSI6 IlJlYWQiKTsNCiAJCXByaW50ayAoS0VSTl9FUlIgImJ1dCB0aGUgZmxvcHB5 IHdhbnRzIHVzIHRvICVzICFcbiIsaXJlYXNvbi5iLmlvID8gIlJlYWQiOiJX cml0ZSIpOw0KKw0KIAkJcmV0dXJuIGlkZV9zdG9wcGVkOw0KIAl9DQogCWlm ICghdGVzdF9iaXQoUENfV1JJVElORywgJnBjLT5mbGFncykpIHsJCQkvKiBS ZWFkaW5nIC0gQ2hlY2sgdGhhdCB3ZSBoYXZlIGVub3VnaCBzcGFjZSAqLw0K QEAgLTY0OCw3ICs2NDAsNiBAQA0KIA0KIAkJCQlhdGFwaV9kaXNjYXJkX2Rh dGEgKGRyaXZlLGJjb3VudC5hbGwpOw0KIAkJCQlhdGFfc2V0X2hhbmRsZXIo ZHJpdmUsIGlkZWZsb3BweV9wY19pbnRyLElERUZMT1BQWV9XQUlUX0NNRCwg TlVMTCk7DQotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2gtPmxvY2ss IGZsYWdzKTsNCiANCiAJCQkJcmV0dXJuIGlkZV9zdGFydGVkOw0KIAkJCX0N CkBAIC02NzIsNyArNjYzLDYgQEANCiAJcGMtPmN1cnJlbnRfcG9zaXRpb24r PWJjb3VudC5hbGw7DQogDQogCWF0YV9zZXRfaGFuZGxlcihkcml2ZSwgaWRl ZmxvcHB5X3BjX2ludHIsIElERUZMT1BQWV9XQUlUX0NNRCwgTlVMTCk7CQkv KiBBbmQgc2V0IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhZ2FpbiAqLw0KLQlz cGluX3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7DQogDQog CXJldHVybiBpZGVfc3RhcnRlZDsNCiB9DQpAQCAtNjg0LDE2ICs2NzQsMTEg QEANCiAgKi8NCiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZWZsb3BweV90 cmFuc2Zlcl9wYyhzdHJ1Y3QgYXRhX2RldmljZSAqZHJpdmUsIHN0cnVjdCBy ZXF1ZXN0ICpycSkNCiB7DQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQotCXN0 cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkcml2ZS0+Y2hhbm5lbDsNCiAJaWRl X3N0YXJ0c3RvcF90IHN0YXJ0c3RvcDsNCiAJaWRlZmxvcHB5X2Zsb3BweV90 ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7DQogCWF0YXBpX2lyZWFz b25fcmVnX3QgaXJlYXNvbjsNCiAJaW50IHJldDsNCiANCi0JLyogRklYTUU6 IE1vdmUgdGhpcyBsb2NrIHVwd2FyZHMuDQotCSAqLw0KLQlzcGluX2xvY2tf aXJxc2F2ZShjaC0+bG9jaywgZmxhZ3MpOw0KIAlpZiAoYXRhX3N0YXR1c19w b2xsKGRyaXZlLCBEUlFfU1RBVCwgQlVTWV9TVEFULA0KIAkJCQlXQUlUX1JF QURZLCBycSwgJnN0YXJ0c3RvcCkpIHsNCiAJCXByaW50ayAoS0VSTl9FUlIg ImlkZS1mbG9wcHk6IFN0cmFuZ2UsIHBhY2tldCBjb21tYW5kIGluaXRpYXRl ZCB5ZXQgRFJRIGlzbid0IGFzc2VydGVkXG4iKTsNCkBAIC03MTEsNyArNjk2 LDYgQEANCiAJCQlyZXQgPSBpZGVfc3RhcnRlZDsNCiAJCX0NCiAJfQ0KLQlz cGluX3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7DQogDQog CXJldHVybiByZXQ7DQogfQ0KQEAgLTcyOSwxOCArNzEzLDE4IEBADQogICog cGFja2V0LCB3ZSBzY2hlZHVsZSB0aGUgcGFja2V0IHRyYW5zZmVyIHRvIG9j Y3VyIGFib3V0IDItMyB0aWNrcw0KICAqIGxhdGVyIGluIHRyYW5zZmVyX3Bj Mi4NCiAgKi8NCi1zdGF0aWMgaW50IGlkZWZsb3BweV90cmFuc2Zlcl9wYzIo c3RydWN0IGF0YV9kZXZpY2UgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqX19y cSkNCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZWZsb3BweV90cmFuc2Zl cl9wYzIoc3RydWN0IGF0YV9kZXZpY2UgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVz dCAqX19ycSwgdW5zaWduZWQgbG9uZyAqd2FpdCkNCiB7DQogCWlkZWZsb3Bw eV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOw0KIA0K IAlhdGFwaV93cml0ZShkcml2ZSwgZmxvcHB5LT5wYy0+YywgMTIpOyAvKiBT ZW5kIHRoZSBhY3R1YWwgcGFja2V0ICovDQotCXJldHVybiBJREVGTE9QUFlf V0FJVF9DTUQ7CQkvKiBUaW1lb3V0IGZvciB0aGUgcGFja2V0IGNvbW1hbmQg Ki8NCisJKndhaXQgPSBJREVGTE9QUFlfV0FJVF9DTUQ7CS8qIFRpbWVvdXQg Zm9yIHRoZSBwYWNrZXQgY29tbWFuZCAqLw0KKw0KKwlyZXR1cm4gaWRlX3N0 YXJ0ZWQ7DQogfQ0KIA0KIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlZmxv cHB5X3RyYW5zZmVyX3BjMShzdHJ1Y3QgYXRhX2RldmljZSAqZHJpdmUsIHN0 cnVjdCByZXF1ZXN0ICpycSkNCiB7DQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 DQotCXN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkcml2ZS0+Y2hhbm5lbDsN CiAJaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVy X2RhdGE7DQogCWlkZV9zdGFydHN0b3BfdCBzdGFydHN0b3A7DQogCWF0YXBp X2lyZWFzb25fcmVnX3QgaXJlYXNvbjsNCkBAIC03NTMsMTEgKzczNyw2IEBA DQogCQlyZXR1cm4gc3RhcnRzdG9wOw0KIAl9DQogDQotCS8qIEZJWE1FOiB0 aGlzIGxvY2tpbmcgc2hvdWxkIGVuY29tcGFzcyB0aGUgYWJvdmUgcmVnaXN0 ZXINCi0JICogZmlsZSBhY2Nlc3MgdG9vLg0KLQkgKi8NCi0NCi0Jc3Bpbl9s b2NrX2lycXNhdmUoY2gtPmxvY2ssIGZsYWdzKTsNCiAJaXJlYXNvbi5hbGw9 SU5fQllURShJREVfSVJFQVNPTl9SRUcpOw0KIAlpZiAoIWlyZWFzb24uYi5j b2QgfHwgaXJlYXNvbi5iLmlvKSB7DQogCQlwcmludGsgKEtFUk5fRVJSICJp ZGUtZmxvcHB5OiAoSU8sQ29EKSAhPSAoMCwxKSB3aGlsZSBpc3N1aW5nIGEg cGFja2V0IGNvbW1hbmRcbiIpOw0KQEAgLTc3OCw3ICs3NTcsNiBAQA0KIAkJ CQlpZGVmbG9wcHlfdHJhbnNmZXJfcGMyKTsJLyogZmFpbCA9PSB0cmFuc2Zl cl9wYzIgKi8NCiAJCXJldCA9IGlkZV9zdGFydGVkOw0KIAl9DQotCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoY2gtPmxvY2ssIGZsYWdzKTsNCiANCiAJcmV0 dXJuIHJldDsNCiB9DQpAQCAtODU5LDE3ICs4MzcsOCBAQA0KIAl9DQogDQog CWlmICh0ZXN0X2JpdChJREVGTE9QUFlfRFJRX0lOVEVSUlVQVCwgJmZsb3Bw eS0+ZmxhZ3MpKSB7DQotCQl1bnNpZ25lZCBsb25nIGZsYWdzOw0KLQkJc3Ry dWN0IGF0YV9jaGFubmVsICpjaCA9IGRyaXZlLT5jaGFubmVsOw0KLQ0KLQkJ LyogRklYTUU6IHRoaXMgbG9ja2luZyBzaG91bGQgZW5jb21wYXNzIHRoZSBh Ym92ZSByZWdpc3Rlcg0KLQkJICogZmlsZSBhY2Nlc3MgdG9vLg0KLQkJICov DQotDQotCQlzcGluX2xvY2tfaXJxc2F2ZShjaC0+bG9jaywgZmxhZ3MpOw0K IAkJYXRhX3NldF9oYW5kbGVyKGRyaXZlLCBwa3RfeGZlcl9yb3V0aW5lLCBJ REVGTE9QUFlfV0FJVF9DTUQsIE5VTEwpOw0KIAkJT1VUX0JZVEUgKFdJTl9Q QUNLRVRDTUQsIElERV9DT01NQU5EX1JFRyk7CQkvKiBJc3N1ZSB0aGUgcGFj a2V0IGNvbW1hbmQgKi8NCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2gt PmxvY2ssIGZsYWdzKTsNCiANCiAJCXJldHVybiBpZGVfc3RhcnRlZDsNCiAJ fSBlbHNlIHsNCkBAIC0xMDEwLDEwICs5NzksOCBAQA0KICAqLw0KIHN0YXRp YyBpZGVfc3RhcnRzdG9wX3QgaWRlZmxvcHB5X2RvX3JlcXVlc3Qoc3RydWN0 IGF0YV9kZXZpY2UgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHNlY3Rv cl90IGJsb2NrKQ0KIHsNCi0Jc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRy aXZlLT5jaGFubmVsOw0KIAlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9 IGRyaXZlLT5kcml2ZXJfZGF0YTsNCiAJc3RydWN0IGF0YXBpX3BhY2tldF9j b21tYW5kICpwYzsNCi0JaW50IHJldDsNCiANCiAjaWYgSURFRkxPUFBZX0RF QlVHX0xPRw0KIAlwcmludGsgKEtFUk5fSU5GTyAicnFfc3RhdHVzOiAlZCwg cnFfZGV2OiAldSwgZmxhZ3M6ICVseCwgZXJyb3JzOiAlZFxuIixycS0+cnFf c3RhdHVzLCh1bnNpZ25lZCBpbnQpIHJxLT5ycV9kZXYscnEtPmZsYWdzLHJx LT5lcnJvcnMpOw0KQEAgLTEwMjcsMjAgKzk5NCwxNSBAQA0KIAkJZWxzZQ0K IAkJCXByaW50ayAoS0VSTl9FUlIgImlkZS1mbG9wcHk6ICVzOiBJL08gZXJy b3JcbiIsIGRyaXZlLT5uYW1lKTsNCiANCi0JCS8qIEZJWE1FOiBtYWtlIHRo aXMgdW5sb2NraW5nIGdvIGF3YXkqLw0KLQkJc3Bpbl91bmxvY2tfaXJxKGNo LT5sb2NrKTsNCiAJCWlkZWZsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgcnEs IDApOw0KLQkJc3Bpbl9sb2NrX2lycShjaC0+bG9jayk7DQogDQogCQlyZXR1 cm4gaWRlX3N0b3BwZWQ7DQogCX0NCiAJaWYgKHJxLT5mbGFncyAmIFJFUV9D TUQpIHsNCiAJCWlmIChycS0+c2VjdG9yICUgZmxvcHB5LT5ic19mYWN0b3Ig fHwgcnEtPm5yX3NlY3RvcnMgJSBmbG9wcHktPmJzX2ZhY3Rvcikgew0KIAkJ CXByaW50ayAoIiVzOiB1bnN1cHBvcnRlZCByL3cgcmVxdWVzdCBzaXplXG4i LCBkcml2ZS0+bmFtZSk7DQotCQkJLyogRklYTUU6IG1ha2UgdGhpcyB1bmxv Y2tpbmcgZ28gYXdheSovDQotCQkJc3Bpbl91bmxvY2tfaXJxKGNoLT5sb2Nr KTsNCisNCiAJCQlpZGVmbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIHJxLCAw KTsNCi0JCQlzcGluX2xvY2tfaXJxKGNoLT5sb2NrKTsNCiANCiAJCQlyZXR1 cm4gaWRlX3N0b3BwZWQ7DQogCQl9DQpAQCAtMTA1MSwyMCArMTAxMywxMyBA QA0KIAkJcGMgPSAoc3RydWN0IGF0YXBpX3BhY2tldF9jb21tYW5kICopIHJx LT5idWZmZXI7DQogCX0gZWxzZSB7DQogCQlibGtfZHVtcF9ycV9mbGFncyhy cSwgImlkZS1mbG9wcHk6IHVuc3VwcG9ydGVkIGNvbW1hbmQgaW4gcXVldWUi KTsNCi0JCS8qIEZJWE1FOiBtYWtlIHRoaXMgdW5sb2NraW5nIGdvIGF3YXkq Lw0KLQkJc3Bpbl91bmxvY2tfaXJxKGNoLT5sb2NrKTsNCisNCiAJCWlkZWZs b3BweV9lbmRfcmVxdWVzdChkcml2ZSwgcnEsIDApOw0KLQkJc3Bpbl9sb2Nr X2lycShjaC0+bG9jayk7DQogDQogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7DQog CX0NCiANCi0JLyogRklYTUU6IG1ha2UgdGhpcyB1bmxvY2tpbmcgZ28gYXdh eSovDQotCXNwaW5fdW5sb2NrX2lycShjaC0+bG9jayk7DQotCXJldCA9IGlk ZWZsb3BweV9pc3N1ZV9wYyhkcml2ZSwgcnEsIHBjKTsNCi0Jc3Bpbl9sb2Nr X2lycShjaC0+bG9jayk7DQotDQotCXJldHVybiByZXQ7DQorCXJldHVybiBp ZGVmbG9wcHlfaXNzdWVfcGMoZHJpdmUsIHJxLCBwYyk7DQogfQ0KIA0KIC8q DQpkaWZmIC1YIGRvbnRkaWZmIC11ciBsaW51eC0yLjUuMjQvZHJpdmVycy9p ZGUvaWRlLXRhcGUuYyBsaW51eC9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jDQot LS0gbGludXgtMi41LjI0L2RyaXZlcnMvaWRlL2lkZS10YXBlLmMJV2VkIEp1 biAyNiAwMDowMjo1MyAyMDAyDQorKysgbGludXgvZHJpdmVycy9pZGUvaWRl LXRhcGUuYwlXZWQgSnVuIDI2IDE3OjU0OjExIDIwMDINCkBAIC0xMCw2ICsx MCwxMCBAQA0KICAqLw0KIA0KIC8qDQorICogQklHIEZBVCBGSVhNRTogY2xl YW4gdGFwZS0+c3BpbmxvY2sgbG9ja2luZyAgLS1iem9sbmllcg0KKyAqLw0K Kw0KKy8qDQogICogSURFIEFUQVBJIHN0cmVhbWluZyB0YXBlIGRyaXZlci4N CiAgKg0KICAqIFRoaXMgZHJpdmVyIGlzIGEgcGFydCBvZiB0aGUgTGludXgg aWRlIGRyaXZlciBhbmQgd29ya3MgaW4gY28tb3BlcmF0aW9uDQpAQCAtMTgx OCw4ICsxODIyLDYgQEANCiAgKi8NCiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90 IGlkZXRhcGVfcGNfaW50cihzdHJ1Y3QgYXRhX2RldmljZSAqZHJpdmUsIHN0 cnVjdCByZXF1ZXN0ICpycSkNCiB7DQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 DQotCXN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkcml2ZS0+Y2hhbm5lbDsN CiAJaWRldGFwZV90YXBlX3QgKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7 DQogCWF0YXBpX3N0YXR1c19yZWdfdCBzdGF0dXM7DQogCWF0YXBpX2Jjb3Vu dF9yZWdfdCBiY291bnQ7DQpAQCAtMTkxNSwxNyArMTkxNywxMSBAQA0KIAkJ cGMtPmNhbGxiYWNrKGRyaXZlLCBycSk7CS8qIENvbW1hbmQgZmluaXNoZWQg LSBDYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiAqLw0KIAkJcmV0dXJuIGlk ZV9zdG9wcGVkOw0KIAl9DQotCS8qIEZJWE1FOiB0aGlzIGxvY2tpbmcgc2hv dWxkIGVuY29tcGFzcyB0aGUgYWJvdmUgcmVnaXN0ZXINCi0JICogZmlsZSBh Y2Nlc3MgdG9vLg0KLQkgKi8NCi0NCi0Jc3Bpbl9sb2NrX2lycXNhdmUoY2gt PmxvY2ssIGZsYWdzKTsNCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1B DQogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQgKFBDX0RNQV9JTl9QUk9HUkVT UywgJnBjLT5mbGFncykpIHsNCiAJCXByaW50ayAoS0VSTl9FUlIgImlkZS10 YXBlOiBUaGUgdGFwZSB3YW50cyB0byBpc3N1ZSBtb3JlIGludGVycnVwdHMg aW4gRE1BIG1vZGVcbiIpOw0KIAkJcHJpbnRrIChLRVJOX0VSUiAiaWRlLXRh cGU6IERNQSBkaXNhYmxlZCwgcmV2ZXJ0aW5nIHRvIFBJT1xuIik7DQogCQl1 ZG1hX2VuYWJsZShkcml2ZSwgMCwgMSk7DQotCQlzcGluX3VubG9ja19pcnFy ZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7DQogDQogCQlyZXR1cm4gaWRlX3N0 b3BwZWQ7DQogCX0NCkBAIC0xOTM2LDE2ICsxOTMyLDE0IEBADQogCWlyZWFz b24uYWxsICAgPSBJTl9CWVRFIChJREVfSVJFQVNPTl9SRUcpOw0KIA0KIAlp ZiAoaXJlYXNvbi5iLmNvZCkgew0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZShjaC0+bG9jaywgZmxhZ3MpOw0KLQ0KIAkJcHJpbnRrIChLRVJOX0VSUiAi aWRlLXRhcGU6IENvRCAhPSAwIGluIGlkZXRhcGVfcGNfaW50clxuIik7DQor DQogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7DQogCX0NCiAJaWYgKGlyZWFzb24u Yi5pbyA9PSB0ZXN0X2JpdCAoUENfV1JJVElORywgJnBjLT5mbGFncykpIHsJ LyogSG9wZWZ1bGx5LCB3ZSB3aWxsIG5ldmVyIGdldCBoZXJlICovDQotCQlz cGluX3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7DQotDQog CQlwcmludGsgKEtFUk5fRVJSICJpZGUtdGFwZTogV2Ugd2FudGVkIHRvICVz LCAiLCBpcmVhc29uLmIuaW8gPyAiV3JpdGUiOiJSZWFkIik7DQogCQlwcmlu dGsgKEtFUk5fRVJSICJpZGUtdGFwZTogYnV0IHRoZSB0YXBlIHdhbnRzIHVz IHRvICVzICFcbiIsaXJlYXNvbi5iLmlvID8gIlJlYWQiOiJXcml0ZSIpOw0K Kw0KIAkJcmV0dXJuIGlkZV9zdG9wcGVkOw0KIAl9DQogCWlmICghdGVzdF9i aXQgKFBDX1dSSVRJTkcsICZwYy0+ZmxhZ3MpKSB7CQkJLyogUmVhZGluZyAt IENoZWNrIHRoYXQgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgKi8NCkBAIC0xOTU1 LDcgKzE5NDksNiBAQA0KIAkJCQlwcmludGsgKEtFUk5fRVJSICJpZGUtdGFw ZTogVGhlIHRhcGUgd2FudHMgdG8gc2VuZCB1cyBtb3JlIGRhdGEgdGhhbiBl eHBlY3RlZCAtIGRpc2NhcmRpbmcgZGF0YVxuIik7DQogCQkJCWF0YXBpX2Rp c2NhcmRfZGF0YSAoZHJpdmUsIGJjb3VudC5hbGwpOw0KIAkJCQlhdGFfc2V0 X2hhbmRsZXIoZHJpdmUsIGlkZXRhcGVfcGNfaW50ciwgSURFVEFQRV9XQUlU X0NNRCwgTlVMTCk7DQotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2gt PmxvY2ssIGZsYWdzKTsNCiANCiAJCQkJcmV0dXJuIGlkZV9zdGFydGVkOw0K IAkJCX0NCkBAIC0xOTgzLDcgKzE5NzYsNiBAQA0KIAkJcHJpbnRrKEtFUk5f SU5GTyAiaWRlLXRhcGU6IFtjbWQgJXhdIHRyYW5zZmVycmVkICVkIGJ5dGVz IG9uIHRoYXQgaW50ZXJydXB0XG4iLCBwYy0+Y1swXSwgYmNvdW50LmFsbCk7 DQogI2VuZGlmDQogCWF0YV9zZXRfaGFuZGxlcihkcml2ZSwgaWRldGFwZV9w Y19pbnRyLCBJREVUQVBFX1dBSVRfQ01ELCBOVUxMKTsJLyogQW5kIHNldCB0 aGUgaW50ZXJydXB0IGhhbmRsZXIgYWdhaW4gKi8NCi0Jc3Bpbl91bmxvY2tf aXJxcmVzdG9yZShjaC0+bG9jaywgZmxhZ3MpOw0KIA0KIAlyZXR1cm4gaWRl X3N0YXJ0ZWQ7DQogfQ0KQEAgLTIwMzIsOCArMjAyNCw2IEBADQogICovDQog c3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGV0YXBlX3RyYW5zZmVyX3BjKHN0 cnVjdCBhdGFfZGV2aWNlICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQ0K IHsNCi0JdW5zaWduZWQgbG9uZyBmbGFnczsNCi0Jc3RydWN0IGF0YV9jaGFu bmVsICpjaCA9IGRyaXZlLT5jaGFubmVsOw0KIAlpZGV0YXBlX3RhcGVfdCAq dGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsNCiAJc3RydWN0IGF0YXBpX3Bh Y2tldF9jb21tYW5kICpwYyA9IHRhcGUtPnBjOw0KIAlhdGFwaV9pcmVhc29u X3JlZ190IGlyZWFzb247DQpAQCAtMjA0MSw5ICsyMDMxLDYgQEANCiAJaWRl X3N0YXJ0c3RvcF90IHN0YXJ0c3RvcDsNCiAJaW50IHJldDsNCiANCi0JLyog RklYTUU6IE1vdmUgdGhpcyBsb2NrIHVwd2FyZHMuDQotCSAqLw0KLQlzcGlu X2xvY2tfaXJxc2F2ZShjaC0+bG9jaywgZmxhZ3MpOw0KIAlpZiAoYXRhX3N0 YXR1c19wb2xsKGRyaXZlLCBEUlFfU1RBVCwgQlVTWV9TVEFULA0KIAkJCQlX QUlUX1JFQURZLCBycSwgJnN0YXJ0c3RvcCkpIHsNCiAJCXByaW50ayAoS0VS Tl9FUlIgImlkZS10YXBlOiBTdHJhbmdlLCBwYWNrZXQgY29tbWFuZCBpbml0 aWF0ZWQgeWV0IERSUSBpc24ndCBhc3NlcnRlZFxuIik7DQpAQCAtMjA3MSw3 ICsyMDU4LDYgQEANCiAJCQlyZXQgPSBpZGVfc3RhcnRlZDsNCiAJCX0NCiAJ fQ0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7 DQogDQogCXJldHVybiByZXQ7DQogfQ0KQEAgLTIxNDUsMTcgKzIxMzEsOCBA QA0KIAl9DQogI2VuZGlmDQogCWlmICh0ZXN0X2JpdChJREVUQVBFX0RSUV9J TlRFUlJVUFQsICZ0YXBlLT5mbGFncykpIHsNCi0JCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7DQotCQlzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZHJpdmUtPmNo YW5uZWw7DQotDQotCQkvKiBGSVhNRTogdGhpcyBsb2NraW5nIHNob3VsZCBl bmNvbXBhc3MgdGhlIGFib3ZlIHJlZ2lzdGVyDQotCQkgKiBmaWxlIGFjY2Vz cyB0b28uDQotCQkgKi8NCi0NCi0JCXNwaW5fbG9ja19pcnFzYXZlKGNoLT5s b2NrLCBmbGFncyk7DQogCQlhdGFfc2V0X2hhbmRsZXIoZHJpdmUsIGlkZXRh cGVfdHJhbnNmZXJfcGMsIElERVRBUEVfV0FJVF9DTUQsIE5VTEwpOw0KIAkJ T1VUX0JZVEUoV0lOX1BBQ0tFVENNRCwgSURFX0NPTU1BTkRfUkVHKTsNCi0J CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2gtPmxvY2ssIGZsYWdzKTsNCiAN CiAJCXJldHVybiBpZGVfc3RhcnRlZDsNCiAJfSBlbHNlIHsNCkBAIC0yNDQ1 LDEyICsyNDIyLDEwIEBADQogICovDQogc3RhdGljIGlkZV9zdGFydHN0b3Bf dCBpZGV0YXBlX2RvX3JlcXVlc3Qoc3RydWN0IGF0YV9kZXZpY2UgKmRyaXZl LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHNlY3Rvcl90IGJsb2NrKQ0KIHsNCi0J c3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRyaXZlLT5jaGFubmVsOw0KIAlp ZGV0YXBlX3RhcGVfdCAqdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsNCiAJ c3RydWN0IGF0YXBpX3BhY2tldF9jb21tYW5kICpwYzsNCiAJc3RydWN0IHJl cXVlc3QgKnBvc3Rwb25lZF9ycSA9IHRhcGUtPnBvc3Rwb25lZF9ycTsNCiAJ YXRhcGlfc3RhdHVzX3JlZ190IHN0YXR1czsNCi0JaW50IHJldDsNCiANCiAj aWYgSURFVEFQRV9ERUJVR19MT0cNCiAvKglpZiAodGFwZS0+ZGVidWdfbGV2 ZWwgPj0gNSkNCkBAIC0yNDcyLDIzICsyNDQ3LDE1IEBADQogCSAqCVJldHJ5 IGEgZmFpbGVkIHBhY2tldCBjb21tYW5kDQogCSAqLw0KIAlpZiAodGFwZS0+ ZmFpbGVkX3BjICE9IE5VTEwgJiYgdGFwZS0+cGMtPmNbMF0gPT0gSURFVEFQ RV9SRVFVRVNUX1NFTlNFX0NNRCkgew0KLQkJaW50IHJldDsNCiANCi0JCS8q IEZJWE1FOiBtYWtlIHRoaXMgdW5sb2NraW5nIGdvIGF3YXkqLw0KLQkJc3Bp bl91bmxvY2tfaXJxKGNoLT5sb2NrKTsNCi0JCXJldCA9IGlkZXRhcGVfaXNz dWVfcGFja2V0X2NvbW1hbmQoZHJpdmUsIHJxLCB0YXBlLT5mYWlsZWRfcGMp Ow0KLQkJc3Bpbl9sb2NrX2lycShjaC0+bG9jayk7DQotDQotCQlyZXR1cm4g cmV0Ow0KKwkJcmV0dXJuIGlkZXRhcGVfaXNzdWVfcGFja2V0X2NvbW1hbmQo ZHJpdmUsIHJxLCB0YXBlLT5mYWlsZWRfcGMpOw0KIAl9DQogI2lmIElERVRB UEVfREVCVUdfQlVHUw0KIAlpZiAocG9zdHBvbmVkX3JxICE9IE5VTEwpDQog CQlpZiAocnEgIT0gcG9zdHBvbmVkX3JxKSB7DQogCQkJcHJpbnRrIChLRVJO X0VSUiAiaWRlLXRhcGU6IGlkZS10YXBlLmMgYnVnIC0gVHdvIERTQyByZXF1 ZXN0cyB3ZXJlIHF1ZXVlZFxuIik7DQotCQkJLyogRklYTUU6IG1ha2UgdGhp cyB1bmxvY2tpbmcgZ28gYXdheSovDQotCQkJc3Bpbl91bmxvY2tfaXJxKGNo LT5sb2NrKTsNCisNCiAJCQlpZGV0YXBlX2VuZF9yZXF1ZXN0KGRyaXZlLCBy cSwgMCk7DQotCQkJc3Bpbl9sb2NrX2lycShjaC0+bG9jayk7DQogDQogCQkJ cmV0dXJuIGlkZV9zdG9wcGVkOw0KIAkJfQ0KQEAgLTI1NjYsMTUgKzI1MzMs MTEgQEANCiAJCQl0YXBlLT5kc2NfdGltZW91dCA9IGppZmZpZXMgKyBJREVU QVBFX0RTQ19SV19USU1FT1VUOw0KIAkJfSBlbHNlIGlmICgoc2lnbmVkIGxv bmcpIChqaWZmaWVzIC0gdGFwZS0+ZHNjX3RpbWVvdXQpID4gMCkgew0KIAkJ CXByaW50ayAoS0VSTl9FUlIgImlkZS10YXBlOiAlczogRFNDIHRpbWVvdXRc biIsIHRhcGUtPm5hbWUpOw0KLQkJCWlmIChycS0+ZmxhZ3MgPT0gSURFVEFQ RV9QQ19SUTIpIHsNCi0JCQkJLyogRklYTUU6IG1ha2UgdGhpcyB1bmxvY2tp bmcgZ28gYXdheSovDQotCQkJCXNwaW5fdW5sb2NrX2lycShjaC0+bG9jayk7 DQorDQorCQkJaWYgKHJxLT5mbGFncyA9PSBJREVUQVBFX1BDX1JRMikNCiAJ CQkJaWRldGFwZV9tZWRpYV9hY2Nlc3NfZmluaXNoZWQoZHJpdmUsIHJxKTsN Ci0JCQkJc3Bpbl9sb2NrX2lycShjaC0+bG9jayk7DQotCQkJCXJldHVybiBp ZGVfc3RvcHBlZDsNCi0JCQl9IGVsc2Ugew0KLQkJCQlyZXR1cm4gaWRlX3N0 b3BwZWQ7DQotCQkJfQ0KKw0KKwkJCXJldHVybiBpZGVfc3RvcHBlZDsNCiAJ CX0gZWxzZSBpZiAoamlmZmllcyAtIHRhcGUtPmRzY19wb2xsaW5nX3N0YXJ0 ID4gSURFVEFQRV9EU0NfTUFfVEhSRVNIT0xEKQ0KIAkJCXRhcGUtPmRzY19w b2xsaW5nX2ZyZXF1ZW5jeSA9IElERVRBUEVfRFNDX01BX1NMT1c7DQogCQlp ZGV0YXBlX3Bvc3Rwb25lX3JlcXVlc3QoZHJpdmUsIHJxKTsNCkBAIC0yNjM4 LDI1ICsyNjAxLDE4IEBADQogCQkJcnEtPmZsYWdzID0gSURFVEFQRV9QQ19S UTI7DQogCQkJYnJlYWs7DQogCQljYXNlIElERVRBUEVfUENfUlEyOg0KLQkJ CS8qIEZJWE1FOiBtYWtlIHRoaXMgdW5sb2NraW5nIGdvIGF3YXkqLw0KLQkJ CXNwaW5fdW5sb2NrX2lycShjaC0+bG9jayk7DQogCQkJaWRldGFwZV9tZWRp YV9hY2Nlc3NfZmluaXNoZWQoZHJpdmUsIHJxKTsNCi0JCQlzcGluX2xvY2tf aXJxKGNoLT5sb2NrKTsNCisNCiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7DQog CQlkZWZhdWx0Og0KIAkJCXByaW50ayAoS0VSTl9FUlIgImlkZS10YXBlOiBi dWcgaW4gSURFVEFQRV9SUV9DTUQgbWFjcm9cbiIpOw0KLQkJCS8qIEZJWE1F OiBtYWtlIHRoaXMgdW5sb2NraW5nIGdvIGF3YXkqLw0KLQkJCXNwaW5fdW5s b2NrX2lycShjaC0+bG9jayk7DQorDQogCQkJaWRldGFwZV9lbmRfcmVxdWVz dChkcml2ZSwgcnEsIDApOw0KLQkJCXNwaW5fbG9ja19pcnEoY2gtPmxvY2sp Ow0KKw0KIAkJCXJldHVybiBpZGVfc3RvcHBlZDsNCiAJfQ0KLQkvKiBGSVhN RTogbWFrZSB0aGlzIHVubG9ja2luZyBnbyBhd2F5Ki8NCi0Jc3Bpbl91bmxv Y2tfaXJxKGNoLT5sb2NrKTsNCi0JcmV0ID0gaWRldGFwZV9pc3N1ZV9wYWNr ZXRfY29tbWFuZChkcml2ZSwgcnEsIHBjKTsNCi0Jc3Bpbl9sb2NrX2lycShj aC0+bG9jayk7DQogDQotCXJldHVybiByZXQ7DQorCXJldHVybiBpZGV0YXBl X2lzc3VlX3BhY2tldF9jb21tYW5kKGRyaXZlLCBycSwgcGMpOw0KIH0NCiAN CiAvKg0KZGlmZiAtWCBkb250ZGlmZiAtdXIgbGludXgtMi41LjI0L2RyaXZl cnMvaWRlL2lkZS10YXNrZmlsZS5jIGxpbnV4L2RyaXZlcnMvaWRlL2lkZS10 YXNrZmlsZS5jDQotLS0gbGludXgtMi41LjI0L2RyaXZlcnMvaWRlL2lkZS10 YXNrZmlsZS5jCVdlZCBKdW4gMjYgMDA6MDI6NTMgMjAwMg0KKysrIGxpbnV4 L2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCVRodSBKdW4gMjcgMDE6MzQ6 NDQgMjAwMg0KQEAgLTI0MiwxNiArMjQyLDE4IEBADQogLyoNCiAgKiBJbnZv a2VkIG9uIGNvbXBsZXRpb24gb2YgYSBzcGVjaWFsIFJFUV9TUEVDSUFMIGNv bW1hbmQuDQogICovDQorLyoNCisgKiBDaGFubmVsIGxvY2sgc2hvdWxkIGJl IGhlbGQuDQorICovDQogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBzcGVjaWFs X2ludHIoc3RydWN0IGF0YV9kZXZpY2UgKmRyaXZlLCBzdHJ1Y3QNCiAJCXJl cXVlc3QgKnJxKSB7DQogDQogCXN0cnVjdCBhdGFfdGFza2ZpbGUgKmFyID0g cnEtPnNwZWNpYWw7DQogCWlkZV9zdGFydHN0b3BfdCByZXQgPSBpZGVfc3Rv cHBlZDsNCi0JdW5zaWduZWQgbG9uZyBmbGFnczsNCiANCi0JaWRlX19zdGko KTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCi0NCi0Jc3Bpbl9sb2NrX2lycXNh dmUoZHJpdmUtPmNoYW5uZWwtPmxvY2ssIGZsYWdzKTsNCisJLyogRklYTUU6 ICAtLWJ6b2xuaWVyDQorCWlkZV9fc3RpKCk7DQorCSovDQogDQogCWlmIChy cS0+YnVmZmVyICYmIGFyLT50YXNrZmlsZS5zZWN0b3JfbnVtYmVyKSB7DQog CQlpZiAoIWF0YV9zdGF0dXMoZHJpdmUsIDAsIERSUV9TVEFUKSAmJiBhci0+ dGFza2ZpbGUuc2VjdG9yX251bWJlcikgew0KQEAgLTI4Nyw4ICsyODksNiBA QA0KIAlkcml2ZS0+cnEgPSBOVUxMOw0KIAllbmRfdGhhdF9yZXF1ZXN0X2xh c3QocnEpOw0KIA0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGRyaXZlLT5j aGFubmVsLT5sb2NrLCBmbGFncyk7DQotDQogCXJldHVybiByZXQ7DQogfQ0K IA0KZGlmZiAtWCBkb250ZGlmZiAtdXIgbGludXgtMi41LjI0L2RyaXZlcnMv aWRlL2lkZS5jIGxpbnV4L2RyaXZlcnMvaWRlL2lkZS5jDQotLS0gbGludXgt Mi41LjI0L2RyaXZlcnMvaWRlL2lkZS5jCVdlZCBKdW4gMjYgMDA6MDI6NTMg MjAwMg0KKysrIGxpbnV4L2RyaXZlcnMvaWRlL2lkZS5jCVRodSBKdW4gMjcg MDI6MDM6MzAgMjAwMg0KQEAgLTE0OCwyMiArMTQ4LDYgQEANCiB9DQogDQog LyoNCi0gKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGVuZCByZXF1ZXN0IGZ1bmN0 aW9uIGFzIHdlbGwNCi0gKi8NCi1pbnQgYXRhX2VuZF9yZXF1ZXN0KHN0cnVj dCBhdGFfZGV2aWNlICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQg dXB0b2RhdGUpDQotew0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOw0KLQlzdHJ1 Y3QgYXRhX2NoYW5uZWwgKmNoID0gZHJpdmUtPmNoYW5uZWw7DQotCWludCBy ZXQ7DQotDQotCXNwaW5fbG9ja19pcnFzYXZlKGNoLT5sb2NrLCBmbGFncyk7 DQotCXJldCA9IF9fYXRhX2VuZF9yZXF1ZXN0KGRyaXZlLCBycSwgdXB0b2Rh dGUsIDApOw0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGRyaXZlLT5jaGFu bmVsLT5sb2NrLCBmbGFncyk7DQotDQotCXJldHVybiByZXQ7DQotfQ0KLQ0K LS8qDQogICogVGhpcyBzaG91bGQgZ2V0IGludm9rZWQgYW55IHRpbWUgd2Ug ZXhpdCB0aGUgZHJpdmVyIHRvDQogICogd2FpdCBmb3IgYW4gaW50ZXJydXB0 IHJlc3BvbnNlIGZyb20gYSBkcml2ZS4gIGhhbmRsZXIoKSBwb2ludHMNCiAg KiBhdCB0aGUgYXBwcm9wcmlhdGUgY29kZSB0byBoYW5kbGUgdGhlIG5leHQg aW50ZXJydXB0LCBhbmQgYQ0KQEAgLTM0Nyw3ICszMzEsNyBAQA0KIAl9DQog CWNoLT5wb2xsX3RpbWVvdXQgPSAwOwkvKiBkb25lIHBvbGxpbmcgKi8NCiAN Ci0JcmV0dXJuIGlkZV9zdG9wcGVkOw0KKwlyZXR1cm4gcmV0Ow0KIH0NCiAN CiAvKg0KQEAgLTM3NCw2ICszNTgsNyBAQA0KIAl1bnNpZ25lZCBsb25nIGZs YWdzOw0KIAlzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZHJpdmUtPmNoYW5u ZWw7DQogDQorCS8qIEZJWE1FOiAgLS1iem9sbmllciAqLw0KIAlfX3NhdmVf ZmxhZ3MoZmxhZ3MpOwkvKiBsb2NhbCBDUFUgb25seSAqLw0KIAlfX2NsaSgp OwkJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCiANCkBAIC00NjcsNiArNDUyLDcg QEANCiAJdW5zaWduZWQgbG9uZyBmbGFnczsNCiAJdTggZXJyID0gMDsNCiAN CisJLyogRklYTUU6ICAtLWJ6b2xuaWVyICovDQogCV9fc2F2ZV9mbGFncyAo ZmxhZ3MpOwkvKiBsb2NhbCBDUFUgb25seSAqLw0KIAlpZGVfX3N0aSgpOwkJ LyogbG9jYWwgQ1BVIG9ubHkgKi8NCiANCkBAIC01NzMsNyArNTU5LDcgQEAN CiAvKg0KICAqIFRha2UgYWN0aW9uIGJhc2VkIG9uIHRoZSBlcnJvciByZXR1 cm5lZCBieSB0aGUgZHJpdmUuDQogICoNCi0gKiBGSVhNRTogQ2hhbm5lbCBs b2NrIHNob3VsZCBiZSBoZWxkLg0KKyAqIENoYW5uZWwgbG9jayBzaG91bGQg YmUgaGVsZC4NCiAgKi8NCiBpZGVfc3RhcnRzdG9wX3QgYXRhX2Vycm9yKHN0 cnVjdCBhdGFfZGV2aWNlICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAlj b25zdCBjaGFyICptc2cpDQogew0KQEAgLTYxNyw3ICs2MDMsNiBAQA0KIA0K IAlpZiAocnEtPmVycm9ycyA+PSBFUlJPUl9NQVgpIHsNCiAJCXByaW50ayhL RVJOX0VSUiAiJXM6IG1heCBudW1iZXIgb2YgcmV0cmllcyBleGNlZWRlZCFc biIsIGRyaXZlLT5uYW1lKTsNCi0JCS8qIEZJWE1FOiBtYWtlIHN1cmUgYWxs IGVuZF9yZXF1ZXN0IGltcGxlbWVudGF0aW9ucyBhcmUgbG9jayBmcmVlICov DQogCQlpZiAoYXRhX29wcyhkcml2ZSkgJiYgYXRhX29wcyhkcml2ZSktPmVu ZF9yZXF1ZXN0KQ0KIAkJCWF0YV9vcHMoZHJpdmUpLT5lbmRfcmVxdWVzdChk cml2ZSwgcnEsIDApOw0KIAkJZWxzZQ0KQEAgLTYyNyw2ICs2MTIsNyBAQA0K IAkJaWYgKChycS0+ZXJyb3JzICYgRVJST1JfUkVTRVQpID09IEVSUk9SX1JF U0VUKQ0KIAkJCXJldHVybiBkb19yZXNldDEoZHJpdmUsIDEpOw0KIAkJaWYg KChycS0+ZXJyb3JzICYgRVJST1JfUkVDQUwpID09IEVSUk9SX1JFQ0FMKQ0K KwkJCS8qIEZJWE1FOiB0cmllcyB0byBhY3F1aXJlIHRoZSBjaGFubmVsIGxv Y2sgLVp3YW5lICovDQogCQkJcmV0dXJuIGRvX3JlY2FsaWJyYXRlKGRyaXZl KTsNCiAJfQ0KIA0KQEAgLTcwMCwzNSArNjg2LDE0IEBADQogCXJldHVybiBy ZXQ7DQogDQoga2lsbF9ycToNCi0JaWYgKGF0YV9vcHMoZHJpdmUpKSB7DQot CQlpZiAoYXRhX29wcyhkcml2ZSktPmVuZF9yZXF1ZXN0KSB7DQotCQkJc3Bp bl91bmxvY2tfaXJxKGNoLT5sb2NrKTsNCi0JCQlhdGFfb3BzKGRyaXZlKS0+ ZW5kX3JlcXVlc3QoZHJpdmUsIHJxLCAwKTsNCi0JCQlzcGluX2xvY2tfaXJx KGNoLT5sb2NrKTsNCi0JCX0gZWxzZQ0KLQkJCV9fYXRhX2VuZF9yZXF1ZXN0 KGRyaXZlLCBycSwgMCwgMCk7DQotCX0gZWxzZQ0KKwlpZiAoYXRhX29wcyhk cml2ZSkgJiYgYXRhX29wcyhkcml2ZSktPmVuZF9yZXF1ZXN0KQ0KKwkJYXRh X29wcyhkcml2ZSktPmVuZF9yZXF1ZXN0KGRyaXZlLCBycSwgMCk7DQorCWVs c2UNCiAJCV9fYXRhX2VuZF9yZXF1ZXN0KGRyaXZlLCBycSwgMCwgMCk7DQog DQogCXJldHVybiBpZGVfc3RvcHBlZDsNCiB9DQogDQotaWRlX3N0YXJ0c3Rv cF90IHJlc3RhcnRfcmVxdWVzdChzdHJ1Y3QgYXRhX2RldmljZSAqZHJpdmUp DQotew0KLQlzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZHJpdmUtPmNoYW5u ZWw7DQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQotCWludCByZXQ7DQotDQot CXNwaW5fbG9ja19pcnFzYXZlKGNoLT5sb2NrLCBmbGFncyk7DQotDQotCWNo LT5oYW5kbGVyID0gTlVMTDsNCi0JZGVsX3RpbWVyKCZjaC0+dGltZXIpOw0K LQlyZXQgPSBzdGFydF9yZXF1ZXN0KGRyaXZlLCBkcml2ZS0+cnEpOw0KLQlz cGluX3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7DQotDQot CXJldHVybiByZXQ7DQotfQ0KLQ0KIC8qDQogICogVGhpcyBpcyB1c2VkIGJ5 IGEgZHJpdmUgdG8gZ2l2ZSBleGNlc3MgYmFuZHdpZHRoIGJhY2sgYnkgc2xl ZXBpbmcgZm9yDQogICogdGltZW91dCBqaWZmaWVzLg0KQEAgLTk5MywxMCAr OTU4LDEzIEBADQogCQkJdW5zaWduZWQgbG9uZyB3YWl0Ow0KIA0KIAkJCS8q IGNvbnRpbnVlICovDQotCQkJaWYgKCh3YWl0ID0gY2gtPmV4cGlyeShkcml2 ZSwgZHJpdmUtPnJxKSkgIT0gMCkgew0KKwkJCXJldCA9IGNoLT5leHBpcnko ZHJpdmUsIGRyaXZlLT5ycSwgJndhaXQpOw0KKwkJCWlmIChyZXQgPT0gaWRl X3N0YXJ0ZWQpIHsNCiAJCQkJLyogcmVlbmdhZ2UgdGltZXIgKi8NCi0JCQkJ Y2gtPnRpbWVyLmV4cGlyZXMgID0gamlmZmllcyArIHdhaXQ7DQotCQkJCWFk ZF90aW1lcigmY2gtPnRpbWVyKTsNCisJCQkJaWYgKHdhaXQpIHsNCisJCQkJ CWNoLT50aW1lci5leHBpcmVzICA9IGppZmZpZXMgKyB3YWl0Ow0KKwkJCQkJ YWRkX3RpbWVyKCZjaC0+dGltZXIpOw0KKwkJCQl9DQogDQogCQkJCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoY2gtPmxvY2ssIGZsYWdzKTsNCiANCkBAIC0x MDEyLDcgKzk4MCw2IEBADQogDQogCQloYW5kbGVyID0gY2gtPmhhbmRsZXI7 DQogCQljaC0+aGFuZGxlciA9IE5VTEw7DQotCQlzcGluX3VubG9jayhjaC0+ bG9jayk7DQogDQogCQljaCA9IGRyaXZlLT5jaGFubmVsOw0KICNpZiBESVNB QkxFX0lSUV9OT1NZTkMNCkBAIC0xMDY5LDEyICsxMDM2LDkgQEANCiANCiAJ CWVuYWJsZV9pcnEoY2gtPmlycSk7DQogDQotCQlzcGluX2xvY2tfaXJxKGNo LT5sb2NrKTsNCi0NCiAJCWlmIChyZXQgPT0gaWRlX3N0b3BwZWQpDQogCQkJ Y2xlYXJfYml0KElERV9CVVNZLCBjaC0+YWN0aXZlKTsNCiANCi0NCiAJCS8q IFJlZW50ZXIgdGhlIHJlcXVlc3QgaGFuZGxpbmcgZW5naW5lICovDQogCQlk b19yZXF1ZXN0KGNoKTsNCiAJfQ0KQEAgLTEyMDIsMTQgKzExNjYsMTQgQEAN CiAJY2gtPmhhbmRsZXIgPSBOVUxMOw0KIAlkZWxfdGltZXIoJmNoLT50aW1l cik7DQogDQotCXNwaW5fdW5sb2NrKGNoLT5sb2NrKTsNCi0NCi0JaWYgKGNo LT51bm1hc2spDQotCQlpZGVfX3N0aSgpOwkvKiBsb2NhbCBDUFUgb25seSAq Lw0KKwlpZiAoY2gtPnVubWFzaykgew0KKwkJLyogRklYTUU6IHBlcmhhcHMg ZGlzYWJsZV9pcnEoaXJxKTsgX19zdGkoKTsgPyAtWndhbmUNCisJCWlkZV9f c3RpKCk7DQorCQkqLw0KKwl9DQogDQogCS8qIHNlcnZpY2UgdGhpcyBpbnRl cnJ1cHQsIG1heSBzZXQgaGFuZGxlciBmb3IgbmV4dCBpbnRlcnJ1cHQgKi8N CiAJc3RhcnRzdG9wID0gaGFuZGxlcihkcml2ZSwgZHJpdmUtPnJxKTsNCi0J c3Bpbl9sb2NrX2lycShjaC0+bG9jayk7DQogDQogCS8qDQogCSAqIE5vdGUg dGhhdCBoYW5kbGVyKCkgbWF5IGhhdmUgc2V0IHRoaW5ncyB1cCBmb3IgYW5v dGhlcg0KQEAgLTEzNzYsOSArMTM0MCw2IEBADQogRVhQT1JUX1NZTUJPTChh dGFfZHVtcCk7DQogRVhQT1JUX1NZTUJPTChhdGFfZXJyb3IpOw0KIA0KLS8q IEZJWE1FOiB0aGlzIGlzIGEgdHJ1bGx5IGJhZCBuYW1lICovDQotRVhQT1JU X1NZTUJPTChyZXN0YXJ0X3JlcXVlc3QpOw0KLUVYUE9SVF9TWU1CT0woYXRh X2VuZF9yZXF1ZXN0KTsNCiBFWFBPUlRfU1lNQk9MKF9fYXRhX2VuZF9yZXF1 ZXN0KTsNCiBFWFBPUlRfU1lNQk9MKGlkZV9zdGFsbF9xdWV1ZSk7DQogDQpk aWZmIC1YIGRvbnRkaWZmIC11ciBsaW51eC0yLjUuMjQvZHJpdmVycy9pZGUv cGNpZG1hLmMgbGludXgvZHJpdmVycy9pZGUvcGNpZG1hLmMNCi0tLSBsaW51 eC0yLjUuMjQvZHJpdmVycy9pZGUvcGNpZG1hLmMJVHVlIEp1biAyNSAyMjo0 NjozNiAyMDAyDQorKysgbGludXgvZHJpdmVycy9pZGUvcGNpZG1hLmMJV2Vk IEp1biAyNiAxNzo0Njo1MCAyMDAyDQpAQCAtMzYsNiArMzYsOCBAQA0KIA0K IC8qDQogICogVGhpcyBpcyB0aGUgaGFuZGxlciBmb3IgZGlzayByZWFkL3dy aXRlIERNQSBpbnRlcnJ1cHRzLg0KKyAqDQorICogQ2hhbm5lbCBsb2NrIHNo b3VsZCBiZSBoZWxkLg0KICAqLw0KIGlkZV9zdGFydHN0b3BfdCBpZGVfZG1h X2ludHIoc3RydWN0IGF0YV9kZXZpY2UgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVz dCAqcnEpDQogew0KQEAgLTQ0LDE2ICs0Niw3IEBADQogDQogCWlmIChhdGFf c3RhdHVzKGRyaXZlLCBEUklWRV9SRUFEWSwgZHJpdmUtPmJhZF93c3RhdCB8 IERSUV9TVEFUKSkgew0KIAkJaWYgKCFkbWFfc3RhdCkgew0KLQkJCXVuc2ln bmVkIGxvbmcgZmxhZ3M7DQotCQkJc3RydWN0IGF0YV9jaGFubmVsICpjaCA9 IGRyaXZlLT5jaGFubmVsOw0KLQ0KLQkJCS8qIEZJWE1FOiB0aGlzIGxvY2tp bmcgc2hvdWxkIGVuY29tcGFzcyB0aGUgYWJvdmUgcmVnaXN0ZXINCi0JCQkg KiBmaWxlIGFjY2VzcyB0b28uDQotCQkJICovDQotDQotCQkJc3Bpbl9sb2Nr X2lycXNhdmUoY2gtPmxvY2ssIGZsYWdzKTsNCiAJCQlfX2F0YV9lbmRfcmVx dWVzdChkcml2ZSwgcnEsIDEsIHJxLT5ucl9zZWN0b3JzKTsNCi0JCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7DQogDQogCQkJ cmV0dXJuIGlkZV9zdG9wcGVkOw0KIAkJfQ0KQEAgLTEyOCw3ICsxMjEsNyBA QA0KIC8qDQogICogMSBkbWEtaW5nLCAyIGVycm9yLCA0IGludHINCiAgKi8N Ci1zdGF0aWMgaW50IGRtYV90aW1lcl9leHBpcnkoc3RydWN0IGF0YV9kZXZp Y2UgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpDQorc3RhdGljIGlkZV9z dGFydHN0b3BfdCBkbWFfdGltZXJfZXhwaXJ5KHN0cnVjdCBhdGFfZGV2aWNl ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB1bnNpZ25lZCBsb25nICp3 YWl0KQ0KIHsNCiAJLyogRklYTUU6IFdoYXQncyB0aGF0PyAqLw0KIAl1OCBk bWFfc3RhdCA9IGluYihkcml2ZS0+Y2hhbm5lbC0+ZG1hX2Jhc2UgKyAyKTsN CkBAIC0xNDAsMTUgKzEzMywxNyBAQA0KICNpZiAwDQogCWRyaXZlLT5leHBp cnkgPSBOVUxMOwkvKiBvbmUgZnJlZSByaWRlIGZvciBub3cgKi8NCiAjZW5k aWYNCi0NCisJKndhaXQgPSAwOw0KIAlpZiAoZG1hX3N0YXQgJiAyKSB7CS8q IEVSUk9SICovDQogCQlhdGFfc3RhdHVzKGRyaXZlLCAwLCAwKTsNCiAJCXJl dHVybiBhdGFfZXJyb3IoZHJpdmUsIHJxLCBfX0ZVTkNUSU9OX18pOw0KIAl9 DQotCWlmIChkbWFfc3RhdCAmIDEpCS8qIERNQWluZyAqLw0KLQkJcmV0dXJu IFdBSVRfQ01EOw0KKwlpZiAoZG1hX3N0YXQgJiAxKSB7CS8qIERNQWluZyAq Lw0KKwkJKndhaXQgPSBXQUlUX0NNRDsNCisJCXJldHVybiBpZGVfc3RhcnRl ZDsNCisJfQ0KIA0KLQlyZXR1cm4gMDsNCisJcmV0dXJuIGlkZV9zdG9wcGVk Ow0KIH0NCiANCiBpbnQgYXRhX3N0YXJ0X2RtYShzdHJ1Y3QgYXRhX2Rldmlj ZSAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkNCmRpZmYgLVggZG9udGRp ZmYgLXVyIGxpbnV4LTIuNS4yNC9kcml2ZXJzL2lkZS9wZGM0MDMwLmMgbGlu dXgvZHJpdmVycy9pZGUvcGRjNDAzMC5jDQotLS0gbGludXgtMi41LjI0L2Ry aXZlcnMvaWRlL3BkYzQwMzAuYwlUdWUgSnVuIDE4IDAwOjI5OjAyIDIwMDIN CisrKyBsaW51eC9kcml2ZXJzL2lkZS9wZGM0MDMwLmMJV2VkIEp1biAyNiAx NjozNDo1MiAyMDAyDQpAQCAtNDE0LDEwICs0MTQsOCBAQA0KIAlycS0+ZXJy b3JzID0gMDsNCiAJcnEtPm5yX3NlY3RvcnMgLT0gbnNlY3Q7DQogCXRvdGFs X3JlbWFpbmluZyA9IHJxLT5ucl9zZWN0b3JzOw0KLQlpZiAoKHJxLT5jdXJy ZW50X25yX3NlY3RvcnMgLT0gbnNlY3QpIDw9IDApIHsNCi0JCS8qIEZJWE1F OiBubyBxdWV1ZSBsb2NraW5nIGFib3ZlISAqLw0KLQkJYXRhX2VuZF9yZXF1 ZXN0KGRyaXZlLCBycSwgMSk7DQotCX0NCisJaWYgKChycS0+Y3VycmVudF9u cl9zZWN0b3JzIC09IG5zZWN0KSA8PSAwKQ0KKwkJX19hdGFfZW5kX3JlcXVl c3QoZHJpdmUsIHJxLCAxLCAwKTsNCiANCiAJLyoNCiAJICogTm93IHRoZSBk YXRhIGhhcyBiZWVuIHJlYWQgaW4sIGRvIHRoZSBmb2xsb3dpbmc6DQpAQCAt NDM3LDE2ICs0MzUsNyBAQA0KIAkJaWYgKGRyaXZlLT5zdGF0dXMgJiBEUlFf U1RBVCkNCiAJCQlnb3RvIHJlYWRfYWdhaW47DQogCQlpZiAoZHJpdmUtPnN0 YXR1cyAmIEJVU1lfU1RBVCkgew0KLQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 DQotCQkJc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRyaXZlLT5jaGFubmVs Ow0KLQ0KLQkJCS8qIEZJWE1FOiB0aGlzIGxvY2tpbmcgc2hvdWxkIGVuY29t cGFzcyB0aGUgYWJvdmUgcmVnaXN0ZXINCi0JCQkgKiBmaWxlIGFjY2VzcyB0 b28uDQotCQkJICovDQotDQotCQkJc3Bpbl9sb2NrX2lycXNhdmUoY2gtPmxv Y2ssIGZsYWdzKTsNCiAJCQlhdGFfc2V0X2hhbmRsZXIoZHJpdmUsIHByb21p c2VfcmVhZF9pbnRyLCBXQUlUX0NNRCwgTlVMTCk7DQotCQkJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZShjaC0+bG9jaywgZmxhZ3MpOw0KICNpZmRlZiBERUJV R19SRUFEDQogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwcm9taXNlX3Jl YWQ6IHdhaXRpbmcgZm9yIg0KIAkJCSAgICAgICAiaW50ZXJydXB0XG4iLCBk cml2ZS0+bmFtZSk7DQpAQCAtNDcwLDE4ICs0NTksMTEgQEANCiAgKi8NCiBz dGF0aWMgaWRlX3N0YXJ0c3RvcF90IHByb21pc2VfY29tcGxldGVfcG9sbGZ1 bmMoc3RydWN0IGF0YV9kZXZpY2UgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAq cnEpDQogew0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOw0KIAlzdHJ1Y3QgYXRh X2NoYW5uZWwgKmNoID0gZHJpdmUtPmNoYW5uZWw7DQogDQogCWlmICghYXRh X3N0YXR1cyhkcml2ZSwgMCwgQlVTWV9TVEFUKSkgew0KIAkJaWYgKHRpbWVf YmVmb3JlKGppZmZpZXMsIGNoLT5wb2xsX3RpbWVvdXQpKSB7DQotCQkJLyog RklYTUU6IHRoaXMgbG9ja2luZyBzaG91bGQgZW5jb21wYXNzIHRoZSBhYm92 ZQ0KLQkJCSAqIHJlZ2lzdGVyIGZpbGUgYWNjZXNzIHRvby4NCi0JCQkgKi8N Ci0NCi0JCQlzcGluX2xvY2tfaXJxc2F2ZShjaC0+bG9jaywgZmxhZ3MpOw0K IAkJCWF0YV9zZXRfaGFuZGxlcihkcml2ZSwgcHJvbWlzZV9jb21wbGV0ZV9w b2xsZnVuYywgSFovMTAwLCBOVUxMKTsNCi0JCQlzcGluX3VubG9ja19pcnFy ZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7DQogDQogCQkJcmV0dXJuIGlkZV9z dGFydGVkOyAvKiBjb250aW51ZSBwb2xsaW5nLi4uICovDQogCQl9DQpAQCAt NDk1LDEzICs0NzcsNyBAQA0KICNpZmRlZiBERUJVR19XUklURQ0KIAlwcmlu dGsoS0VSTl9ERUJVRyAiJXM6IFdyaXRlIGNvbXBsZXRlIC0gZW5kX3JlcXVl c3RcbiIsIGRyaXZlLT5uYW1lKTsNCiAjZW5kaWYNCi0JLyogRklYTUU6IHRo aXMgbG9ja2luZyBzaG91bGQgZW5jb21wYXNzIHRoZSBhYm92ZQ0KLQkgKiBy ZWdpc3RlciBmaWxlIGFjY2VzcyB0b28uDQotCSAqLw0KLQ0KLQlzcGluX2xv Y2tfaXJxc2F2ZShjaC0+bG9jaywgZmxhZ3MpOw0KIAlfX2F0YV9lbmRfcmVx dWVzdChkcml2ZSwgcnEsIDEsIHJxLT5ucl9zZWN0b3JzKTsNCi0Jc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZShjaC0+bG9jaywgZmxhZ3MpOw0KIA0KIAlyZXR1 cm4gaWRlX3N0b3BwZWQ7DQogfQ0KQEAgLTU2MywyMSArNTM5LDE3IEBADQog ICovDQogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBwcm9taXNlX3dyaXRlX3Bv bGxmdW5jKHN0cnVjdCBhdGFfZGV2aWNlICpkcml2ZSwgc3RydWN0IHJlcXVl c3QgKnJxKQ0KIHsNCi0JdW5zaWduZWQgbG9uZyBmbGFnczsNCiAJc3RydWN0 IGF0YV9jaGFubmVsICpjaCA9IGRyaXZlLT5jaGFubmVsOw0KIA0KLQlzcGlu X2xvY2tfaXJxc2F2ZShjaC0+bG9jaywgZmxhZ3MpOw0KIAlpZiAoaW5iKElE RV9OU0VDVE9SX1JFRykgIT0gMCkgew0KIAkJaWYgKHRpbWVfYmVmb3JlKGpp ZmZpZXMsIGNoLT5wb2xsX3RpbWVvdXQpKSB7DQogCQkJYXRhX3NldF9oYW5k bGVyKGRyaXZlLCBwcm9taXNlX3dyaXRlX3BvbGxmdW5jLCBIWi8xMDAsIE5V TEwpOw0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2gtPmxvY2ssIGZs YWdzKTsNCiANCiAJCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7IC8qIGNvbnRpbnVl IHBvbGxpbmcuLi4gKi8NCiAJCX0NCiAJCWNoLT5wb2xsX3RpbWVvdXQgPSAw Ow0KIAkJcHJpbnRrKEtFUk5fRVJSICIlczogd3JpdGUgdGltZWQgb3V0IVxu IiwgZHJpdmUtPm5hbWUpOw0KIAkJYXRhX3N0YXR1cyhkcml2ZSwgMCwgMCk7 DQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7 DQogDQogCQlyZXR1cm4gYXRhX2Vycm9yKGRyaXZlLCBycSwgIndyaXRlIHRp bWVvdXQiKTsNCiAJfQ0KQEAgLTU5Miw3ICs1NjQsNyBAQA0KIAlwcmludGso S0VSTl9ERUJVRyAiJXM6IERvbmUgbGFzdCA0IHNlY3RvcnMgLSBzdGF0dXMg PSAlMDJ4XG4iLA0KIAkJZHJpdmUtPm5hbWUsIGRyaXZlLT5zdGF0dXMpOw0K ICNlbmRpZg0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2NrLCBm bGFncyk7DQorDQogCXJldHVybiBpZGVfc3RhcnRlZDsNCiB9DQogDQpAQCAt NjA1LDcgKzU3Nyw2IEBADQogICovDQogc3RhdGljIGlkZV9zdGFydHN0b3Bf dCBwcm9taXNlX2RvX3dyaXRlKHN0cnVjdCBhdGFfZGV2aWNlICpkcml2ZSwg c3RydWN0IHJlcXVlc3QgKnJxKQ0KIHsNCi0JdW5zaWduZWQgbG9uZyBmbGFn czsNCiAJc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRyaXZlLT5jaGFubmVs Ow0KIA0KICNpZmRlZiBERUJVR19XUklURQ0KQEAgLTYxMywyMyArNTg0LDE3 IEBADQogCSAgICAgICAiYnVmZmVyPSVwXG4iLCBkcml2ZS0+bmFtZSwgcnEt PnNlY3RvciwNCiAJICAgICAgIHJxLT5zZWN0b3IgKyBycS0+bnJfc2VjdG9y cyAtIDEsIHJxLT5idWZmZXIpOw0KICNlbmRpZg0KLQkvKiBGSVhNRTogdGhp cyBsb2NraW5nIHNob3VsZCBlbmNvbXBhc3MgdGhlIGFib3ZlIHJlZ2lzdGVy DQotCSAqIGZpbGUgYWNjZXNzIHRvby4NCi0JICovDQotDQotCXNwaW5fbG9j a19pcnFzYXZlKGNoLT5sb2NrLCBmbGFncyk7DQogCS8qDQogCSAqIElmIHRo ZXJlIGFyZSBtb3JlIHRoYW4gNCBzZWN0b3JzIHRvIHRyYW5zZmVyLCBkbyBu LTQgdGhlbiBnbyBpbnRvDQogCSAqIHRoZSBwb2xsaW5nIHN0cmF0ZWd5IGFz IGRlZmluZWQgYWJvdmUuDQogCSAqLw0KIAlpZiAocnEtPm5yX3NlY3RvcnMg PiA0KSB7DQogCQlpZiAocHJvbWlzZV9tdWx0d3JpdGUoZHJpdmUsIHJxLCBy cS0+bnJfc2VjdG9ycyAtIDQpKSB7DQotCQkJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZShjaC0+bG9jaywgZmxhZ3MpOw0KKw0KIAkJCXJldHVybiBpZGVfc3Rv cHBlZDsNCiAJCX0NCiAJCWNoLT5wb2xsX3RpbWVvdXQgPSBqaWZmaWVzICsg V0FJVF9XT1JTVENBU0U7DQogCQlhdGFfc2V0X2hhbmRsZXIoZHJpdmUsIHBy b21pc2Vfd3JpdGVfcG9sbGZ1bmMsIEhaLzEwMCwgTlVMTCk7DQotCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7DQogDQogCQly ZXR1cm4gaWRlX3N0YXJ0ZWQ7DQogCX0gZWxzZSB7DQpAQCAtNjM3LDEzICs2 MDIsMTEgQEANCiAJICogVGhlcmUgYXJlIDQgb3IgZmV3ZXIgc2VjdG9ycyB0 byB0cmFuc2ZlciwgZG8gdGhlbSBhbGwgaW4gb25lIGdvDQogCSAqIGFuZCB3 YWl0IGZvciBOT1QgQlVTWS4NCiAJICovDQotCQlpZiAocHJvbWlzZV9tdWx0 d3JpdGUoZHJpdmUsIHJxLCBycS0+bnJfc2VjdG9ycykpIHsNCi0JCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7DQorCQlpZiAo cHJvbWlzZV9tdWx0d3JpdGUoZHJpdmUsIHJxLCBycS0+bnJfc2VjdG9ycykp DQogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOw0KLQkJfQ0KKw0KIAkJY2gtPnBv bGxfdGltZW91dCA9IGppZmZpZXMgKyBXQUlUX1dPUlNUQ0FTRTsNCiAJCWF0 YV9zZXRfaGFuZGxlcihkcml2ZSwgcHJvbWlzZV9jb21wbGV0ZV9wb2xsZnVu YywgSFovMTAwLCBOVUxMKTsNCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo Y2gtPmxvY2ssIGZsYWdzKTsNCiANCiAjaWZkZWYgREVCVUdfV1JJVEUNCiAJ CXByaW50ayhLRVJOX0RFQlVHICIlczogcHJvbWlzZV93cml0ZTogPD0gNCBz ZWN0b3JzLCAiDQpAQCAtNjY2LDcgKzYyOSw3IEBADQogCS8qIENoZWNrIHRo YXQgaXQncyBhIHJlZ3VsYXIgY29tbWFuZC4gSWYgbm90LCBib21iIG91dCBl YXJseS4gKi8NCiAJaWYgKCEocnEtPmZsYWdzICYgUkVRX0NNRCkpIHsNCiAJ CWJsa19kdW1wX3JxX2ZsYWdzKHJxLCAicGRjNDAzMCBiYWQgZmxhZ3MiKTsN Ci0JCWF0YV9lbmRfcmVxdWVzdChkcml2ZSwgcnEsIDApOw0KKwkJX19hdGFf ZW5kX3JlcXVlc3QoZHJpdmUsIHJxLCAwLCAwKTsNCiANCiAJCXJldHVybiBp ZGVfc3RvcHBlZDsNCiAJfQ0KQEAgLTcwMSwyMCArNjY0LDExIEBADQogCQkJ CXJldHVybiBwcm9taXNlX3JlYWRfaW50cihkcml2ZSwgcnEpOw0KIAkJCX0N CiAJCQlpZiAoaW5iKElERV9TRUxFQ1RfUkVHKSAmIDB4MDEpIHsNCi0JCQkJ dW5zaWduZWQgbG9uZyBmbGFnczsNCi0JCQkJc3RydWN0IGF0YV9jaGFubmVs ICpjaCA9IGRyaXZlLT5jaGFubmVsOw0KLQ0KLQkJCQkvKiBGSVhNRTogdGhp cyBsb2NraW5nIHNob3VsZCBlbmNvbXBhc3MgdGhlIGFib3ZlIHJlZ2lzdGVy DQotCQkJCSAqIGZpbGUgYWNjZXNzIHRvby4NCi0JCQkJICovDQotDQotCQkJ CXNwaW5fbG9ja19pcnFzYXZlKGNoLT5sb2NrLCBmbGFncyk7DQogI2lmZGVm IERFQlVHX1JFQUQNCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWFk OiB3YWl0aW5nIGZvciAiDQogCQkJCSAgICAgICAgICAgICAgICAgICJpbnRl cnJ1cHRcbiIsIGRyaXZlLT5uYW1lKTsNCiAjZW5kaWYNCiAJCQkJYXRhX3Nl dF9oYW5kbGVyKGRyaXZlLCBwcm9taXNlX3JlYWRfaW50ciwgV0FJVF9DTUQs IE5VTEwpOw0KLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2Nr LCBmbGFncyk7DQogDQogCQkJCXJldHVybiBpZGVfc3RhcnRlZDsNCiAJCQl9 DQpAQCAtNzI3LDggKzY4MSw2IEBADQogDQogCWNhc2UgV1JJVEU6IHsNCiAJ CWlkZV9zdGFydHN0b3BfdCBzdGFydHN0b3A7DQotCQl1bnNpZ25lZCBsb25n IGZsYWdzOw0KLQkJc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRyaXZlLT5j aGFubmVsOw0KIA0KIAkJLyoNCiAJCSAqIFN0cmF0ZWd5IG9uIHdyaXRlIGlz OiBsb29rIGZvciB0aGUgRFJRIHRoYXQgc2hvdWxkIGhhdmUgYmVlbg0KQEAg LTc0MCwyOCArNjkyLDIzIEBADQogCQkgKiBjb21wbGV0aW9uIG11c3QgYmUg cG9sbGVkDQogCQkgKi8NCiANCi0JCS8qIEZJWE1FOiBNb3ZlIHRoaXMgbG9j ayB1cHdhcmRzLg0KLQkJICovDQotCQlzcGluX2xvY2tfaXJxc2F2ZShjaC0+ bG9jaywgZmxhZ3MpOw0KIAkJaWYgKGF0YV9zdGF0dXNfcG9sbChkcml2ZSwg REFUQV9SRUFEWSwgZHJpdmUtPmJhZF93c3RhdCwNCiAJCQkJCVdBSVRfRFJR LCBycSwgJnN0YXJ0c3RvcCApKSB7DQogCQkJcHJpbnRrKEtFUk5fRVJSICIl czogbm8gRFJRIGFmdGVyIGlzc3VpbmcgIg0KIAkJCSAgICAgICAiUFJPTUlT RV9XUklURVxuIiwgZHJpdmUtPm5hbWUpOw0KLQkJCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoY2gtPmxvY2ssIGZsYWdzKTsNCiANCiAJCQlyZXR1cm4gc3Rh cnRzdG9wOw0KIAkJfQ0KIAkJaWYgKCFkcml2ZS0+Y2hhbm5lbC0+dW5tYXNr KQ0KIAkJCV9fY2xpKCk7CS8qIGxvY2FsIENQVSBvbmx5ICovDQotCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7DQogDQogCQly ZXR1cm4gcHJvbWlzZV9kb193cml0ZShkcml2ZSwgcnEpOw0KIAl9DQogDQog CWRlZmF1bHQ6DQogCQlwcmludGsoS0VSTl9FUlIgInBkYzQwMzA6IGNvbW1h bmQgbm90IFJFQUQgb3IgV1JJVEUhIEh1aD9cbiIpOw0KLQkJLyogRklYTUU6 IFRoaXMgc2hvdWxkIGFscmVhZHkgcnVuIHVuZGVyIHRoZSBsb2NrLiAqLw0K LQkJYXRhX2VuZF9yZXF1ZXN0KGRyaXZlLCBycSwgMCk7DQorDQorCQlfX2F0 YV9lbmRfcmVxdWVzdChkcml2ZSwgcnEsIDAsIDApOw0KIAkJcmV0dXJuIGlk ZV9zdG9wcGVkOw0KIAl9DQogfQ0KZGlmZiAtWCBkb250ZGlmZiAtdXIgbGlu dXgtMi41LjI0L2RyaXZlcnMvaWRlL3RjcS5jIGxpbnV4L2RyaXZlcnMvaWRl L3RjcS5jDQotLS0gbGludXgtMi41LjI0L2RyaXZlcnMvaWRlL3RjcS5jCVdl ZCBKdW4gMjYgMDA6MDI6NTMgMjAwMg0KKysrIGxpbnV4L2RyaXZlcnMvaWRl L3RjcS5jCVdlZCBKdW4gMjYgMTk6NTM6MTQgMjAwMg0KQEAgLTU4LDE4ICs1 OCwxNSBAQA0KIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgdGNxX25vcF9oYW5k bGVyKHN0cnVjdCBhdGFfZGV2aWNlICpkcml2ZSwgc3RydWN0IHJlcXVlc3Qg KnJxKQ0KIHsNCiAJc3RydWN0IGF0YV90YXNrZmlsZSAqYXJncyA9IHJxLT5z cGVjaWFsOw0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOw0KIA0KKwkvKiBGSVhN RTogIC0tYnpvbG5pZXINCiAJaWRlX19zdGkoKTsNCi0NCi0Jc3Bpbl9sb2Nr X2lycXNhdmUoZHJpdmUtPmNoYW5uZWwtPmxvY2ssIGZsYWdzKTsNCisJKi8N CiANCiAJYmxrZGV2X2RlcXVldWVfcmVxdWVzdChycSk7DQogCWRyaXZlLT5y cSA9IE5VTEw7DQogCWVuZF90aGF0X3JlcXVlc3RfbGFzdChycSk7DQogDQot CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZHJpdmUtPmNoYW5uZWwtPmxvY2ss IGZsYWdzKTsNCi0NCiAJa2ZyZWUoYXJncyk7DQogDQogCXJldHVybiBpZGVf c3RvcHBlZDsNCkBAIC04NiwxMiArODMsOSBAQA0KIAlyZXF1ZXN0X3F1ZXVl X3QgKnEgPSAmZHJpdmUtPnF1ZXVlOw0KIAlzdHJ1Y3QgYXRhX3Rhc2tmaWxl ICphcjsNCiAJc3RydWN0IHJlcXVlc3QgKnJxOw0KLQl1bnNpZ25lZCBsb25n IGZsYWdzOw0KIA0KIAlwcmludGsoS0VSTl9JTkZPICJBVEE6ICVzOiBpbnZh bGlkYXRpbmcgcGVuZGluZyBxdWV1ZSAoJWQpXG4iLCBkcml2ZS0+bmFtZSwg YXRhX3BlbmRpbmdfY29tbWFuZHMoZHJpdmUpKTsNCiANCi0Jc3Bpbl9sb2Nr X2lycXNhdmUoY2gtPmxvY2ssIGZsYWdzKTsNCi0NCiAJZGVsX3RpbWVyKCZj aC0+dGltZXIpOw0KIA0KIAlpZiAodGVzdF9iaXQoSURFX0RNQSwgY2gtPmFj dGl2ZSkpDQpAQCAtMTE2LDkgKzExMCw5IEBADQogCQlnb3RvIG91dDsNCiAJ fQ0KIA0KLQlycSA9IGJsa19nZXRfcmVxdWVzdCgmZHJpdmUtPnF1ZXVlLCBS RUFELCBHRlBfQVRPTUlDKTsNCisJcnEgPSBfX2Jsa19nZXRfcmVxdWVzdCgm ZHJpdmUtPnF1ZXVlLCBSRUFEKTsNCiAJaWYgKCFycSkNCi0JCXJxID0gYmxr X2dldF9yZXF1ZXN0KCZkcml2ZS0+cXVldWUsIFdSSVRFLCBHRlBfQVRPTUlD KTsNCisJCXJxID0gX19ibGtfZ2V0X3JlcXVlc3QoJmRyaXZlLT5xdWV1ZSwg V1JJVEUpOw0KIA0KIAkvKg0KIAkgKiBibGtfcXVldWVfaW52YWxpZGF0ZV90 YWdzKCkganVzdCBhZGRlZCBiYWNrIGF0IGxlYXN0IG9uZSBjb21tYW5kDQpA QCAtMTQzLDcgKzEzNyw3IEBADQogCSAqIHN0YXJ0IGRvaW5nIHN0dWZmIGFn YWluDQogCSAqLw0KIAlxLT5yZXF1ZXN0X2ZuKHEpOw0KLQlzcGluX3VubG9j a19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7DQorDQogCXByaW50ayhL RVJOX0RFQlVHICJBVEE6IHRjcV9pbnZhbGlkYXRlX3F1ZXVlOiBkb25lXG4i KTsNCiB9DQogDQpAQCAtMTYyLDE3ICsxNTYsMjAgQEANCiAJaWYgKCFjaC0+ aGFuZGxlcikNCiAJCXByaW50ayhLRVJOX0VSUiAiQVRBOiAlczogbWlzc2lu ZyBJU1IhXG4iLCBfX0ZVTkNUSU9OX18pOw0KIA0KLQlzcGluX3VubG9ja19p cnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7DQotDQogCS8qDQogCSAqIGlm IHBlbmRpbmcgY29tbWFuZHMsIHRyeSBzZXJ2aWNlIGJlZm9yZSBnaXZpbmcg dXANCiAJICovDQogCWlmIChhdGFfcGVuZGluZ19jb21tYW5kcyhkcml2ZSkg JiYgIWF0YV9zdGF0dXMoZHJpdmUsIDAsIFNFUlZJQ0VfU1RBVCkpDQotCQlp ZiAoc2VydmljZShkcml2ZSwgZHJpdmUtPnJxKSA9PSBpZGVfc3RhcnRlZCkN CisJCWlmIChzZXJ2aWNlKGRyaXZlLCBkcml2ZS0+cnEpID09IGlkZV9zdGFy dGVkKSB7DQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShjaC0+bG9jaywg ZmxhZ3MpOw0KKw0KIAkJCXJldHVybjsNCisJCX0NCiANCiAJaWYgKGRyaXZl KQ0KIAkJdGNxX2ludmFsaWRhdGVfcXVldWUoZHJpdmUpOw0KKw0KKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7DQogfQ0KIA0K IHN0YXRpYyB2b2lkIF9fc2V0X2lycShzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNo LCBhdGFfaGFuZGxlcl90ICpoYW5kbGVyKQ0KQEAgLTE5MSwxNiArMTg4LDYg QEANCiAJY2gtPmhhbmRsZXIgPSBoYW5kbGVyOw0KIH0NCiANCi1zdGF0aWMg dm9pZCBzZXRfaXJxKHN0cnVjdCBhdGFfZGV2aWNlICpkcml2ZSwgYXRhX2hh bmRsZXJfdCAqaGFuZGxlcikNCi17DQotCXN0cnVjdCBhdGFfY2hhbm5lbCAq Y2ggPSBkcml2ZS0+Y2hhbm5lbDsNCi0JdW5zaWduZWQgbG9uZyBmbGFnczsN Ci0NCi0Jc3Bpbl9sb2NrX2lycXNhdmUoY2gtPmxvY2ssIGZsYWdzKTsNCi0J X19zZXRfaXJxKGNoLCBoYW5kbGVyKTsNCi0Jc3Bpbl91bmxvY2tfaXJxcmVz dG9yZShjaC0+bG9jaywgZmxhZ3MpOw0KLX0NCi0NCiAvKg0KICAqIHdhaXQg NDAwbnMsIHRoZW4gcG9sbCBmb3IgYnVzeV9tYXNrIHRvIGNsZWFyIGZyb20g YWx0IHN0YXR1cw0KICAqLw0KQEAgLTIzMyw5ICsyMjAsNiBAQA0KICAqLw0K IHN0YXRpYyBpZGVfc3RhcnRzdG9wX3Qgc2VydmljZShzdHJ1Y3QgYXRhX2Rl dmljZSAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkNCiB7DQotCXN0cnVj dCBhdGFfY2hhbm5lbCAqY2ggPSBkcml2ZS0+Y2hhbm5lbDsNCi0JaWRlX3N0 YXJ0c3RvcF90IHJldDsNCi0JdW5zaWduZWQgbG9uZyBmbGFnczsNCiAJdTgg ZmVhdCwgc3RhdDsNCiAJaW50IHRhZzsNCiANCkBAIC0yOTYsMTIgKzI4MCwx MCBAQA0KIA0KIAlUQ1FfUFJJTlRLKCIlczogc3RhdCAleCwgZmVhdCAleFxu IiwgX19GVU5DVElPTl9fLCBzdGF0LCBmZWF0KTsNCiANCi0Jc3Bpbl9sb2Nr X2lycXNhdmUoY2gtPmxvY2ssIGZsYWdzKTsNCi0NCiAJcnEgPSBibGtfcXVl dWVfZmluZF90YWcoJmRyaXZlLT5xdWV1ZSwgdGFnKTsNCiAJaWYgKCFycSkg ew0KIAkJcHJpbnRrKEtFUk5fRVJSIiVzOiBtaXNzaW5nIHJlcXVlc3QgZm9y IHRhZyAlZFxuIiwgX19GVU5DVElPTl9fLCB0YWcpOw0KLQkJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZShjaC0+bG9jaywgZmxhZ3MpOw0KKw0KIAkJcmV0dXJu IGlkZV9zdG9wcGVkOw0KIAl9DQogDQpAQCAtMzEzLDkgKzI5NSw3IEBADQog CSAqLw0KIAlUQ1FfUFJJTlRLKCIlczogc3RhcnRpbmcgY29tbWFuZCAleFxu IiwgX19GVU5DVElPTl9fLCBzdGF0KTsNCiANCi0JcmV0ID0gdWRtYV90Y3Ff c3RhcnQoZHJpdmUsIHJxKTsNCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShj aC0+bG9jaywgZmxhZ3MpOw0KLQlyZXR1cm4gcmV0Ow0KKwlyZXR1cm4gdWRt YV90Y3Ffc3RhcnQoZHJpdmUsIHJxKTsNCiB9DQogDQogc3RhdGljIGlkZV9z dGFydHN0b3BfdCBjaGVja19zZXJ2aWNlKHN0cnVjdCBhdGFfZGV2aWNlICpk cml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQ0KQEAgLTMzMSwxNSArMzExLDEz IEBADQogCS8qDQogCSAqIHdlIGhhdmUgcGVuZGluZyBjb21tYW5kcywgd2Fp dCBmb3IgaW50ZXJydXB0DQogCSAqLw0KLQlzZXRfaXJxKGRyaXZlLCBpZGVf ZG1hcV9pbnRyKTsNCisJX19zZXRfaXJxKGRyaXZlLCBpZGVfZG1hcV9pbnRy KTsNCiANCiAJcmV0dXJuIGlkZV9zdGFydGVkOw0KIH0NCiANCiBzdGF0aWMg aWRlX3N0YXJ0c3RvcF90IGRtYXFfY29tcGxldGUoc3RydWN0IGF0YV9kZXZp Y2UgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpDQogew0KLQl1bnNpZ25l ZCBsb25nIGZsYWdzOw0KLQlzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZHJp dmUtPmNoYW5uZWw7DQogCXU4IGRtYV9zdGF0Ow0KIA0KIAkvKg0KQEAgLTM2 MiwxMyArMzQwLDcgQEANCiANCiAJVENRX1BSSU5USygiJXM6IGVuZGluZyAl cCwgdGFnICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJxLCBycS0+dGFnKTsNCiAN Ci0JLyogRklYTUU6IHRoaXMgbG9ja2luZyBzaG91bGQgZW5jb21wYXNzIHRo ZSBhYm92ZSByZWdpc3Rlcg0KLQkgKiBmaWxlIGFjY2VzcyB0b28uDQotCSAq Lw0KLQ0KLQlzcGluX2xvY2tfaXJxc2F2ZShjaC0+bG9jaywgZmxhZ3MpOw0K IAlfX2F0YV9lbmRfcmVxdWVzdChkcml2ZSwgcnEsICFkbWFfc3RhdCwgcnEt Pm5yX3NlY3RvcnMpOw0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNoLT5s b2NrLCBmbGFncyk7DQogDQogCS8qDQogCSAqIHdlIGNvbXBsZXRlZCB0aGlz IGNvbW1hbmQsIGNoZWNrIGlmIHdlIGNhbiBzZXJ2aWNlIGEgbmV3IGNvbW1h bmQNCmRpZmYgLVggZG9udGRpZmYgLXVyIGxpbnV4LTIuNS4yNC9kcml2ZXJz L3Njc2kvaWRlLXNjc2kuYyBsaW51eC9kcml2ZXJzL3Njc2kvaWRlLXNjc2ku Yw0KLS0tIGxpbnV4LTIuNS4yNC9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYwlU dWUgSnVuIDE4IDAwOjI5OjAzIDIwMDINCisrKyBsaW51eC9kcml2ZXJzL3Nj c2kvaWRlLXNjc2kuYwlUaHUgSnVuIDI3IDAyOjE4OjE5IDIwMDINCkBAIC0y NDEsMTAgKzI0MSw5IEBADQogCXN0cnVjdCBhdGFwaV9wYWNrZXRfY29tbWFu ZCAqcGMgPSAoc3RydWN0IGF0YXBpX3BhY2tldF9jb21tYW5kICopIHJxLT5z cGVjaWFsOw0KIAlpbnQgbG9nID0gdGVzdF9iaXQoSURFU0NTSV9MT0dfQ01E LCAmc2NzaS0+bG9nKTsNCiAJdTggKnNjc2lfYnVmOw0KLQl1bnNpZ25lZCBs b25nIGZsYWdzOw0KIA0KIAlpZiAoIShycS0+ZmxhZ3MgJiBSRVFfUEMpKSB7 DQotCQlhdGFfZW5kX3JlcXVlc3QoZHJpdmUsIHJxLCB1cHRvZGF0ZSk7DQor CQlfX2F0YV9lbmRfcmVxdWVzdChkcml2ZSwgcnEsIHVwdG9kYXRlLCAwKTsN CiAJCXJldHVybiAwOw0KIAl9DQogDQpAQCAtMjczLDkgKzI3Miw3IEBADQog CQl9DQogCX0NCiAJaG9zdCA9IHBjLT5zLnNjc2lfY21kLT5ob3N0Ow0KLQlz cGluX2xvY2tfaXJxc2F2ZShob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsNCiAJ cGMtPnMuZG9uZShwYy0+cy5zY3NpX2NtZCk7DQotCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7DQogCWlkZXNjc2lf ZnJlZV9iaW8ocnEtPmJpbyk7DQogCWtmcmVlKHBjKTsga2ZyZWUocnEpOw0K IAlzY3NpLT5wYyA9IE5VTEw7DQpAQCAtMjkzLDggKzI5MCw2IEBADQogICov DQogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVzY3NpX3BjX2ludHIoc3Ry dWN0IGF0YV9kZXZpY2UgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpDQog ew0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOw0KLQlzdHJ1Y3QgYXRhX2NoYW5u ZWwgKmNoID0gZHJpdmUtPmNoYW5uZWw7DQogCXN0cnVjdCBTY3NpX0hvc3Qg Kmhvc3QgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7DQogCWlkZXNjc2lfc2NzaV90 ICpzY3NpID0gaWRlc2NzaV9wcml2YXRlKGhvc3QpOw0KIAl1OCBpcmVhc29u Ow0KQEAgLTMzNSw4ICszMzAsNiBAQA0KIAkJdGVtcCA9IHBjLT5hY3R1YWxs eV90cmFuc2ZlcnJlZCArIGJjb3VudDsNCiAJCWlmICggdGVtcCA+IHBjLT5y ZXF1ZXN0X3RyYW5zZmVyKSB7DQogCQkJaWYgKHRlbXAgPiBwYy0+YnVmZmVy X3NpemUpIHsNCi0JCQkJdW5zaWduZWQgbG9uZyBmbGFnczsNCi0JCQkJc3Ry dWN0IGF0YV9jaGFubmVsICpjaCA9IGRyaXZlLT5jaGFubmVsOw0KIAkJCQlw cmludGsgKEtFUk5fRVJSICJpZGUtc2NzaTogVGhlIHNjc2kgd2FudHMgdG8g c2VuZCB1cyBtb3JlIGRhdGEgdGhhbiBleHBlY3RlZCAtIGRpc2NhcmRpbmcg ZGF0YVxuIik7DQogCQkJCXRlbXAgPSBwYy0+YnVmZmVyX3NpemUgLSBwYy0+ YWN0dWFsbHlfdHJhbnNmZXJyZWQ7DQogCQkJCWlmICh0ZW1wKSB7DQpAQCAt MzUwLDEzICszNDMsOCBAQA0KIAkJCQlwYy0+YWN0dWFsbHlfdHJhbnNmZXJy ZWQgKz0gdGVtcDsNCiAJCQkJcGMtPmN1cnJlbnRfcG9zaXRpb24gKz0gdGVt cDsNCiAJCQkJYXRhcGlfZGlzY2FyZF9kYXRhKGRyaXZlLGJjb3VudCAtIHRl bXApOw0KLQkJCQkvKiBGSVhNRTogdGhpcyBsb2NraW5nIHNob3VsZCBlbmNv bXBhc3MgdGhlIGFib3ZlIHJlZ2lzdGVyDQotCQkJCSAqIGZpbGUgYWNjZXNz IHRvby4NCi0JCQkJICovDQogDQotCQkJCXNwaW5fbG9ja19pcnFzYXZlKGNo LT5sb2NrLCBmbGFncyk7DQogCQkJCWF0YV9zZXRfaGFuZGxlcihkcml2ZSwg aWRlc2NzaV9wY19pbnRyLCBnZXRfdGltZW91dChwYyksIE5VTEwpOw0KLQkJ CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFncyk7DQog DQogCQkJCXJldHVybiBpZGVfc3RhcnRlZDsNCiAJCQl9DQpAQCAtMzgxLDIx ICszNjksMTQgQEANCiAJcGMtPmFjdHVhbGx5X3RyYW5zZmVycmVkKz1iY291 bnQ7CQkJCS8qIFVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbiAqLw0KIAlw Yy0+Y3VycmVudF9wb3NpdGlvbis9YmNvdW50Ow0KIA0KLQkvKiBGSVhNRTog dGhpcyBsb2NraW5nIHNob3VsZCBlbmNvbXBhc3MgdGhlIGFib3ZlIHJlZ2lz dGVyDQotCSAqIGZpbGUgYWNjZXNzIHRvby4NCi0JICovDQotDQotCXNwaW5f bG9ja19pcnFzYXZlKGNoLT5sb2NrLCBmbGFncyk7DQotCWF0YV9zZXRfaGFu ZGxlcihkcml2ZSwgaWRlc2NzaV9wY19pbnRyLCBnZXRfdGltZW91dChwYyks IE5VTEwpOwkvKiBBbmQgc2V0IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhZ2Fp biAqLw0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNoLT5sb2NrLCBmbGFn cyk7DQorCS8qIEFuZCBzZXQgdGhlIGludGVycnVwdCBoYW5kbGVyIGFnYWlu ICovDQorCWF0YV9zZXRfaGFuZGxlcihkcml2ZSwgaWRlc2NzaV9wY19pbnRy LCBnZXRfdGltZW91dChwYyksIE5VTEwpOw0KIA0KIAlyZXR1cm4gaWRlX3N0 YXJ0ZWQ7DQogfQ0KIA0KIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlc2Nz aV90cmFuc2Zlcl9wYyhzdHJ1Y3QgYXRhX2RldmljZSAqZHJpdmUsIHN0cnVj dCByZXF1ZXN0ICpycSkNCiB7DQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQot CXN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkcml2ZS0+Y2hhbm5lbDsNCiAJ c3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGRyaXZlLT5kcml2ZXJfZGF0YTsN CiAJaWRlc2NzaV9zY3NpX3QgKnNjc2kgPSBpZGVzY3NpX3ByaXZhdGUoaG9z dCk7DQogCXN0cnVjdCBhdGFwaV9wYWNrZXRfY29tbWFuZCAqcGMgPSBzY3Np LT5wYzsNCkBAIC00MDMsOSArMzg0LDYgQEANCiAJaWRlX3N0YXJ0c3RvcF90 IHN0YXJ0c3RvcDsNCiAJaW50IHJldDsNCiANCi0JLyogRklYTUU6IE1vdmUg dGhpcyBsb2NrIHVwd2FyZHMuDQotCSAqLw0KLQlzcGluX2xvY2tfaXJxc2F2 ZShjaC0+bG9jaywgZmxhZ3MpOw0KIAlpZiAoYXRhX3N0YXR1c19wb2xsKGRy aXZlLCBEUlFfU1RBVCwgQlVTWV9TVEFULA0KIAkJCQlXQUlUX1JFQURZLCBy cSwgJnN0YXJ0c3RvcCkpIHsNCiAJCXByaW50ayAoS0VSTl9FUlIgImlkZS1z Y3NpOiBTdHJhbmdlLCBwYWNrZXQgY29tbWFuZCBpbml0aWF0ZWQgeWV0IERS USBpc24ndCBhc3NlcnRlZFxuIik7DQpAQCAtNDIyLDcgKzQwMCw2IEBADQog CQkJcmV0ID0gaWRlX3N0YXJ0ZWQ7DQogCQl9DQogCX0NCi0Jc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZShjaC0+bG9jaywgZmxhZ3MpOw0KIA0KIAlyZXR1cm4g cmV0Ow0KIH0NCkBAIC00NTcsMTggKzQzNCw5IEBADQogCQl1ZG1hX3N0YXJ0 KGRyaXZlLCBycSk7DQogCX0NCiAJaWYgKHRlc3RfYml0KElERVNDU0lfRFJR X0lOVEVSUlVQVCwgJnNjc2ktPmZsYWdzKSkgew0KLQkJdW5zaWduZWQgbG9u ZyBmbGFnczsNCi0JCXN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkcml2ZS0+ Y2hhbm5lbDsNCi0NCi0JCS8qIEZJWE1FOiB0aGlzIGxvY2tpbmcgc2hvdWxk IGVuY29tcGFzcyB0aGUgYWJvdmUgcmVnaXN0ZXINCi0JCSAqIGZpbGUgYWNj ZXNzIHRvby4NCi0JCSAqLw0KLQ0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoY2gt PmxvY2ssIGZsYWdzKTsNCiAJCWF0YV9zZXRfaGFuZGxlcihkcml2ZSwgaWRl c2NzaV90cmFuc2Zlcl9wYywgZ2V0X3RpbWVvdXQocGMpLCBOVUxMKTsNCi0J CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2gtPmxvY2ssIGZsYWdzKTsNCiAN Ci0JCU9VVF9CWVRFIChXSU5fUEFDS0VUQ01ELCBJREVfQ09NTUFORF9SRUcp OwkJLyogSXNzdWUgdGhlIHBhY2tldCBjb21tYW5kICovDQorCQlPVVRfQllU RSAoV0lOX1BBQ0tFVENNRCwgSURFX0NPTU1BTkRfUkVHKTsNCiAJCXJldHVy biBpZGVfc3RhcnRlZDsNCiAJfSBlbHNlIHsNCiAJCU9VVF9CWVRFIChXSU5f UEFDS0VUQ01ELCBJREVfQ09NTUFORF9SRUcpOw0KQEAgLTQ4MSw3ICs0NDks NiBAQA0KICAqLw0KIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlc2NzaV9k b19yZXF1ZXN0KHN0cnVjdCBhdGFfZGV2aWNlICpkcml2ZSwgc3RydWN0IHJl cXVlc3QgKnJxLCBzZWN0b3JfdCBibG9jaykNCiB7DQotCXN0cnVjdCBhdGFf Y2hhbm5lbCAqY2ggPSBkcml2ZS0+Y2hhbm5lbDsNCiAJaW50IHJldDsNCiAN CiAjaWZkZWYgREVCVUcNCkBAIC00OTYsOCArNDYzLDYgQEANCiAJCQlycS0+ Y3VycmVudF9ucl9zZWN0b3JzKTsNCiAjZW5kaWYNCiANCi0JLyogRklYTUU6 IG1ha2UgdGhpcyB1bmxvY2tpbmcgZ28gYXdheSovDQotCXNwaW5fdW5sb2Nr X2lycShjaC0+bG9jayk7DQogCWlmIChycS0+ZmxhZ3MgJiBSRVFfUEMpIHsN CiAJCXJldCA9IGlkZXNjc2lfaXNzdWVfcGMoZHJpdmUsIHJxLCAoc3RydWN0 IGF0YXBpX3BhY2tldF9jb21tYW5kICopIHJxLT5zcGVjaWFsKTsNCiAJfSBl bHNlIHsNCkBAIC01MDUsNyArNDcwLDYgQEANCiAJICAgIGlkZXNjc2lfZW5k X3JlcXVlc3QoZHJpdmUsIHJxLCAwKTsNCiAJICAgIHJldCA9IGlkZV9zdG9w cGVkOw0KIAl9DQotCXNwaW5fbG9ja19pcnEoY2gtPmxvY2spOw0KIA0KIAly ZXR1cm4gcmV0Ow0KIH0NCkBAIC03MjAsOSArNjg0LDcgQEANCiAJcnEtPmZs YWdzID0gUkVRX1BDOw0KIAlycS0+c3BlY2lhbCA9IChjaGFyICopIHBjOw0K IAlycS0+YmlvID0gaWRlc2NzaV9kbWFfYmlvIChkcml2ZSwgcGMpOw0KLQlz cGluX3VubG9ja19pcnEoY21kLT5ob3N0LT5ob3N0X2xvY2spOw0KLQlpZGVf ZG9fZHJpdmVfY21kIChkcml2ZSwgcnEsIGlkZV9lbmQpOw0KLQlzcGluX2xv Y2tfaXJxKGNtZC0+aG9zdC0+aG9zdF9sb2NrKTsNCisJaWRlX2RvX2RyaXZl X2NtZChkcml2ZSwgcnEsIGlkZV9lbmQpOw0KIA0KIAlyZXR1cm4gMDsNCiBh Ym9ydDoNCmRpZmYgLVggZG9udGRpZmYgLXVyIGxpbnV4LTIuNS4yNC9pbmNs dWRlL2xpbnV4L2Jsa2Rldi5oIGxpbnV4L2luY2x1ZGUvbGludXgvYmxrZGV2 LmgNCi0tLSBsaW51eC0yLjUuMjQvaW5jbHVkZS9saW51eC9ibGtkZXYuaAlN b24gSnVuIDI0IDIyOjIwOjU0IDIwMDINCisrKyBsaW51eC9pbmNsdWRlL2xp bnV4L2Jsa2Rldi5oCVdlZCBKdW4gMjYgMTc6MjE6NDEgMjAwMg0KQEAgLTI4 Myw3ICsyODMsOSBAQA0KIGV4dGVybiBpbmxpbmUgcmVxdWVzdF9xdWV1ZV90 ICpiZGV2X2dldF9xdWV1ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTsN CiBleHRlcm4gdm9pZCBibGtkZXZfcmVsZWFzZV9yZXF1ZXN0KHN0cnVjdCBy ZXF1ZXN0ICopOw0KIGV4dGVybiB2b2lkIGJsa19hdHRlbXB0X3JlbWVyZ2Uo cmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOw0KK2V4dGVy biB2b2lkIF9fYmxrX2F0dGVtcHRfcmVtZXJnZShyZXF1ZXN0X3F1ZXVlX3Qg Kiwgc3RydWN0IHJlcXVlc3QgKik7DQogZXh0ZXJuIHN0cnVjdCByZXF1ZXN0 ICpibGtfZ2V0X3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICosIGludCwgaW50 KTsNCitleHRlcm4gc3RydWN0IHJlcXVlc3QgKl9fYmxrX2dldF9yZXF1ZXN0 KHJlcXVlc3RfcXVldWVfdCAqLCBpbnQpOw0KIGV4dGVybiB2b2lkIGJsa19w dXRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqKTsNCiBleHRlcm4gdm9pZCBi bGtfcGx1Z19kZXZpY2UocmVxdWVzdF9xdWV1ZV90ICopOw0KIGV4dGVybiBp bnQgYmxrX3JlbW92ZV9wbHVnKHJlcXVlc3RfcXVldWVfdCAqKTsNCmRpZmYg LVggZG9udGRpZmYgLXVyIGxpbnV4LTIuNS4yNC9pbmNsdWRlL2xpbnV4L2lk ZS5oIGxpbnV4L2luY2x1ZGUvbGludXgvaWRlLmgNCi0tLSBsaW51eC0yLjUu MjQvaW5jbHVkZS9saW51eC9pZGUuaAlXZWQgSnVuIDI2IDAwOjAyOjUzIDIw MDINCisrKyBsaW51eC9pbmNsdWRlL2xpbnV4L2lkZS5oCVRodSBKdW4gMjcg MDE6Mzk6MzcgMjAwMg0KQEAgLTM4MSw3ICszODEsNyBAQA0KICAqICBJbnRl cnJ1cHQgYW5kIHRpbWVvdXQgaGFuZGxlciB0eXBlLg0KICAqLw0KIHR5cGVk ZWYgaWRlX3N0YXJ0c3RvcF90IChhdGFfaGFuZGxlcl90KShzdHJ1Y3QgYXRh X2RldmljZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsNCi10eXBlZGVmIGludCAo YXRhX2V4cGlyeV90KShzdHJ1Y3QgYXRhX2RldmljZSAqLCBzdHJ1Y3QgcmVx dWVzdCAqKTsNCit0eXBlZGVmIGlkZV9zdGFydHN0b3BfdCAoYXRhX2V4cGly eV90KShzdHJ1Y3QgYXRhX2RldmljZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCB1 bnNpZ25lZCBsb25nICopOw0KIA0KIGVudW0gew0KIAlBVEFfUFJJTUFSWQk9 IDAsDQpAQCAtNDA2LDcgKzQwNiw3IEBADQogDQogCWlkZV9zdGFydHN0b3Bf dCAoKmhhbmRsZXIpKHN0cnVjdCBhdGFfZGV2aWNlICosIHN0cnVjdCByZXF1 ZXN0ICopOwkvKiBpcnEgaGFuZGxlciwgaWYgYWN0aXZlICovDQogCXN0cnVj dCB0aW1lcl9saXN0IHRpbWVyOwkJCQkvKiBmYWlsc2FmZSB0aW1lciAqLw0K LQlpbnQgKCpleHBpcnkpKHN0cnVjdCBhdGFfZGV2aWNlICosIHN0cnVjdCBy ZXF1ZXN0ICopOwkvKiBpcnEgaGFuZGxlciwgaWYgYWN0aXZlICovDQorCWlk ZV9zdGFydHN0b3BfdCAoKmV4cGlyeSkoc3RydWN0IGF0YV9kZXZpY2UgKiwg c3RydWN0IHJlcXVlc3QgKiwgdW5zaWduZWQgbG9uZyAqKTsJLyogaXJxIGhh bmRsZXIsIGlmIGFjdGl2ZSAqLw0KIAl1bnNpZ25lZCBsb25nIHBvbGxfdGlt ZW91dDsJCQkJLyogdGltZW91dCB2YWx1ZSBkdXJpbmcgcG9sbGVkIG9wZXJh dGlvbnMgKi8NCiAJc3RydWN0IGF0YV9kZXZpY2UgKmRyaXZlOwkJCQkvKiBs YXN0IHNlcnZpY2VkIGRyaXZlICovDQogDQpAQCAtNjAyLDkgKzYwMiw3IEBA DQogI2RlZmluZSBERVZJQ0VfTlIoZGV2aWNlKQkobWlub3IoZGV2aWNlKSA+ PiBQQVJUTl9CSVRTKQ0KICNpbmNsdWRlIDxsaW51eC9ibGsuaD4NCiANCi0v KiBOb3QgbG9ja2luZyBhbmQgbG9ja2luZyB2YXJpYW50OiAqLw0KIGV4dGVy biBpbnQgX19hdGFfZW5kX3JlcXVlc3Qoc3RydWN0IGF0YV9kZXZpY2UgKiwg c3RydWN0IHJlcXVlc3QgKiwgaW50LCB1bnNpZ25lZCBpbnQpOw0KLWV4dGVy biBpbnQgYXRhX2VuZF9yZXF1ZXN0KHN0cnVjdCBhdGFfZGV2aWNlICpkcml2 ZSwgc3RydWN0IHJlcXVlc3QgKiwgaW50KTsNCiANCiBleHRlcm4gdm9pZCBh dGFfc2V0X2hhbmRsZXIoc3RydWN0IGF0YV9kZXZpY2UgKmRyaXZlLCBhdGFf aGFuZGxlcl90IGhhbmRsZXIsDQogCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQs IGF0YV9leHBpcnlfdCBleHBpcnkpOw0KQEAgLTYyNiwxMiArNjI0LDYgQEAN CiBzdHJ1Y3QgYXRhX2RldmljZSAqZ2V0X2luZm9fcHRyKGtkZXZfdCBpX3Jk ZXYpOw0KIA0KIC8qDQotICogUmUtU3RhcnQgYW4gb3BlcmF0aW9uIGZvciBh biBJREUgaW50ZXJmYWNlLg0KLSAqIFRoZSBjYWxsZXIgc2hvdWxkIHJldHVy biBpbW1lZGlhdGVseSBhZnRlciBpbnZva2luZyB0aGlzLg0KLSAqLw0KLWlk ZV9zdGFydHN0b3BfdCByZXN0YXJ0X3JlcXVlc3Qoc3RydWN0IGF0YV9kZXZp Y2UgKik7DQotDQotLyoNCiAgKiAiYWN0aW9uIiBwYXJhbWV0ZXIgdHlwZSBm b3IgaWRlX2RvX2RyaXZlX2NtZCgpIGJlbG93Lg0KICAqLw0KIHR5cGVkZWYg ZW51bSB7DQo= ---559023410-851401618-1025179203=:14825-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/