Re: [PATCH v2 05/20] x86, mm: introduce vmem_altmap to augment vmemmap_populate()
From: Williams, Dan J <hidden>
Date: 2015-10-19 22:53:07
Also in:
lkml, nvdimm
Subsystem:
libnvdimm pmem: persistent memory driver, libnvdimm: non-volatile memory device subsystem, m68k architecture, memory hot(un)plug, memory management, memory management - core, memory management - page allocator, the rest, uclinux (m68knommu and coldfire), x86 architecture (32-bit and 64-bit), x86 mm · Maintainers:
Dan Williams, Vishal Verma, Dave Jiang, Alison Schofield, Geert Uytterhoeven, David Hildenbrand, Oscar Salvador, Andrew Morton, Vlastimil Babka, Linus Torvalds, Greg Ungerer, Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, Andy Lutomirski, Peter Zijlstra
T24gRnJpLCAyMDE1LTEwLTA5IGF0IDIwOjU1IC0wNDAwLCBEYW4gV2lsbGlhbXMgd3JvdGU6DQo+IEluIHN1cHBvcnQgb2YgcHJvdmlkaW5nIHN0cnVjdCBwYWdlIGZvciBsYXJnZSBwZXJzaXN0ZW50IG1lbW9yeQ0KPiBjYXBhY2l0aWVzLCB1c2Ugc3RydWN0IHZtZW1fYWx0bWFwIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBwb2xpY3kgZm9yDQo+IGFsbG9jYXRpbmcgbWVtb3J5IGZvciB0aGUgbWVtbWFwIGFycmF5LiAgVGhlIGRlZmF1bHQgdm1lbW1hcF9wb3B1bGF0ZSgpDQo+IGFsbG9jYXRlcyBwYWdlIHRhYmxlIHN0b3JhZ2UgYXJlYSBmcm9tIHRoZSBwYWdlIGFsbG9jYXRvci4gIEdpdmVuDQo+IHBlcnNpc3RlbnQgbWVtb3J5IGNhcGFjaXRpZXMgcmVsYXRpdmUgdG8gRFJBTSBpdCBtYXkgbm90IGJlIGZlYXNpYmxlIHRvDQo+IHN0b3JlIHRoZSBtZW1tYXAgaW4gJ1N5c3RlbSBNZW1vcnknLiAgSW5zdGVhZCB2bWVtX2FsdG1hcCByZXByZXNlbnRzDQo+IHByZS1hbGxvY2F0ZWQgImRldmljZSBwYWdlcyIgdG8gc2F0aXNmeSB2bWVtbWFwX2FsbG9jX2Jsb2NrX2J1ZigpDQo+IHJlcXVlc3RzLg0KPiANCj4gQ2M6IEguIFBldGVyIEFudmluIDxocGFAenl0b3IuY29tPg0KPiBDYzogSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+DQo+IENjOiBEYXZlIEhhbnNlbiA8ZGF2ZS5oYW5zZW5AbGludXguaW50ZWwuY29tPg0KPiBDYzogQW5kcmV3IE1vcnRvbiA8YWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZz4NCj4gU2lnbmVkLW9mZi1ieTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+DQo+IC0tLQ0KDQpUaGUga2J1aWxkIHRlc3Qgcm9ib3QgcmVwb3J0ZWQgYSBjcmFzaCB3aXRoIHRoaXMgcGF0Y2ggd2hlbg0KQ09ORklHX1pPTkVfREVWSUNFPXkgJiYgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQPW4uICBUaGUgYWJpbGl0eSB0bw0Kc3BlY2lmeSBhbiBhbHRlcm5hdGUgbG9jYXRpb24gZm9yIHRoZSB2bWVtbWFwIG5lZWRzIHRvIGJlIGdhdGVkIG9uDQpDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVA9eS4NCg0KSGVyZSdzIGEgcmVmcmVzaGVkIHBhdGNoIHdpdGggaWZkZWYgZ3VhcmRzIGFuZCBhIHdhcm5pbmcgbWVzc2FnZSBpZiB0aGUNCkBhbHRtYXAgYXJnIGlzIHBhc3NlZCB0byBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgb24gYQ0KQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQPW4ga2VybmVsLg0KDQoNCjg8LS0tLQ0KU3ViamVjdDogeDg2LCBtbTogaW50cm9kdWNlIHZtZW1fYWx0bWFwIHRvIGF1Z21lbnQgdm1lbW1hcF9wb3B1bGF0ZSgpDQoNCkZyb206IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KDQpJbiBzdXBwb3J0IG9mIHByb3ZpZGluZyBzdHJ1Y3QgcGFnZSBmb3IgbGFyZ2UgcGVyc2lzdGVudCBtZW1vcnkNCmNhcGFjaXRpZXMsIHVzZSBzdHJ1Y3Qgdm1lbV9hbHRtYXAgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHBvbGljeSBmb3INCmFsbG9jYXRpbmcgbWVtb3J5IGZvciB0aGUgbWVtbWFwIGFycmF5LiAgVGhlIGRlZmF1bHQgdm1lbW1hcF9wb3B1bGF0ZSgpDQphbGxvY2F0ZXMgcGFnZSB0YWJsZSBzdG9yYWdlIGFyZWEgZnJvbSB0aGUgcGFnZSBhbGxvY2F0b3IuICBHaXZlbg0KcGVyc2lzdGVudCBtZW1vcnkgY2FwYWNpdGllcyByZWxhdGl2ZSB0byBEUkFNIGl0IG1heSBub3QgYmUgZmVhc2libGUgdG8NCnN0b3JlIHRoZSBtZW1tYXAgaW4gJ1N5c3RlbSBNZW1vcnknLiAgSW5zdGVhZCB2bWVtX2FsdG1hcCByZXByZXNlbnRzDQpwcmUtYWxsb2NhdGVkICJkZXZpY2UgcGFnZXMiIHRvIHNhdGlzZnkgdm1lbW1hcF9hbGxvY19ibG9ja19idWYoKQ0KcmVxdWVzdHMuDQoNCkNjOiBILiBQZXRlciBBbnZpbiA8aHBhQHp5dG9yLmNvbT4NCkNjOiBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4NCkNjOiBEYXZlIEhhbnNlbiA8ZGF2ZS5oYW5zZW5AbGludXguaW50ZWwuY29tPg0KQ2M6IEFuZHJldyBNb3J0b24gPGFrcG1AbGludXgtZm91bmRhdGlvbi5vcmc+DQpSZXBvcnRlZC1ieToga2J1aWxkIHRlc3Qgcm9ib3QgPGxrcEBpbnRlbC5jb20+DQpTaWduZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCi0tLQ0KIGFyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX21tLmggfCAgICAxIA0KIGFyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX25vLmggfCAgICAxIA0KIGFyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9wYWdlLmggfCAgICAxIA0KIGFyY2gveDg2L21tL2luaXRfNjQuYyAgICAgICAgICAgfCAgIDMyICsrKysrKysrKystLS0NCiBkcml2ZXJzL252ZGltbS9wbWVtLmMgICAgICAgICAgIHwgICAgNiArKw0KIGluY2x1ZGUvbGludXgvaW8uaCAgICAgICAgICAgICAgfCAgIDE3IC0tLS0tLS0NCiBpbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmggIHwgICAgMyArDQogaW5jbHVkZS9saW51eC9tbS5oICAgICAgICAgICAgICB8ICAgOTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystDQoga2VybmVsL21lbXJlbWFwLmMgICAgICAgICAgICAgICB8ICAgNzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQ0KIG1tL21lbW9yeV9ob3RwbHVnLmMgICAgICAgICAgICAgfCAgIDY2ICsrKysrKysrKysrKysrKysrKystLS0tLS0tDQogbW0vcGFnZV9hbGxvYy5jICAgICAgICAgICAgICAgICB8ICAgMTAgKysrKw0KIG1tL3NwYXJzZS12bWVtbWFwLmMgICAgICAgICAgICAgfCAgIDM3ICsrKysrKysrKysrKysrLQ0KIG1tL3NwYXJzZS5jICAgICAgICAgICAgICAgICAgICAgfCAgICA4ICsrLQ0KIDEzIGZpbGVzIGNoYW5nZWQsIDI5NCBpbnNlcnRpb25zKCspLCA2MyBkZWxldGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFnZV9tbS5oDQppbmRleCA1MDI5ZjczZTYyOTQuLjg4NGYyZjdlNGNhZiAxMDA2NDQNCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX21tLmgNCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX21tLmgNCkBAIC0xMjUsNiArMTI1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkICpfX3ZhKHVuc2lnbmVkIGxvbmcgeCkNCiAgKi8NCiAjZGVmaW5lIHZpcnRfdG9fcGZuKGthZGRyKQkoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkNCiAjZGVmaW5lIHBmbl90b192aXJ0KHBmbikJX192YSgocGZuKSA8PCBQQUdFX1NISUZUKQ0KKyNkZWZpbmUJX19wZm5fdG9fcGh5cyhwZm4pCVBGTl9QSFlTKHBmbikNCiANCiBleHRlcm4gaW50IG02OGtfdmlydF90b19ub2RlX3NoaWZ0Ow0KIA0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFnZV9uby5oDQppbmRleCBlZjIwOTE2OTU3OWEuLjc4NDVlY2EwYjM2ZCAxMDA2NDQNCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX25vLmgNCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX25vLmgNCkBAIC0yNCw2ICsyNCw3IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIG1lbW9yeV9lbmQ7DQogDQogI2RlZmluZSB2aXJ0X3RvX3BmbihrYWRkcikJKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpDQogI2RlZmluZSBwZm5fdG9fdmlydChwZm4pCV9fdmEoKHBmbikgPDwgUEFHRV9TSElGVCkNCisjZGVmaW5lCV9fcGZuX3RvX3BoeXMocGZuKQlQRk5fUEhZUyhwZm4pDQogDQogI2RlZmluZSB2aXJ0X3RvX3BhZ2UoYWRkcikJKG1lbV9tYXAgKyAoKCh1bnNpZ25lZCBsb25nKShhZGRyKS1QQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCkpDQogI2RlZmluZSBwYWdlX3RvX3ZpcnQocGFnZSkJX192YSgoKCgocGFnZSkgLSBtZW1fbWFwKSA8PCBQQUdFX1NISUZUKSArIFBBR0VfT0ZGU0VUKSkNCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3BhZ2UuaA0KaW5kZXggODI4OGUxMjQxNjViLi4zODEwYTZmNzQwZmQgMTAwNjQ0DQotLS0gYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vcGFnZS5oDQorKysgYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vcGFnZS5oDQpAQCAtMTA3LDYgKzEwNyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGdldF9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUpDQogI2RlZmluZSBwZm5fdG9fa2FkZHIocGZuKQlfX3ZhKChwZm4pIDw8IFBBR0VfU0hJRlQpDQogI2RlZmluZSBwZm5fdG9fcGFnZShwZm4pCShtZW1fbWFwICsgKChwZm4pIC0gX19wZm5fZGlzcCkpDQogI2RlZmluZSBwYWdlX3RvX3BmbihwYWdlKQkoKHVuc2lnbmVkIGxvbmcpKChwYWdlKSAtIG1lbV9tYXApICsgX19wZm5fZGlzcCkNCisjZGVmaW5lIF9fcGZuX3RvX3BoeXMocGZuKQlQRk5fUEhZUyhwZm4pDQogDQogI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJCQkJXA0KICh7CQkJCQkJCVwNCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMNCmluZGV4IGU1ZDQyZjFhMmE3MS4uY2FiZjhjZWIwYTZiIDEwMDY0NA0KLS0tIGEvYXJjaC94ODYvbW0vaW5pdF82NC5jDQorKysgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMNCkBAIC03MTQsNiArNzE0LDEyIEBAIHN0YXRpYyB2b2lkIF9fbWVtaW5pdCBmcmVlX3BhZ2V0YWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKQ0KIHsNCiAJdW5zaWduZWQgbG9uZyBtYWdpYzsNCiAJdW5zaWduZWQgaW50IG5yX3BhZ2VzID0gMSA8PCBvcmRlcjsNCisJc3RydWN0IHZtZW1fYWx0bWFwICphbHRtYXAgPSB0b192bWVtX2FsdG1hcCgodW5zaWduZWQgbG9uZykgcGFnZSk7DQorDQorCWlmIChhbHRtYXApIHsNCisJCXZtZW1fYWx0bWFwX2ZyZWUoYWx0bWFwLCBucl9wYWdlcyk7DQorCQlyZXR1cm47DQorCX0NCiANCiAJLyogYm9vdG1lbSBwYWdlIGhhcyByZXNlcnZlZCBmbGFnICovDQogCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpIHsNCkBAIC0xMDE4LDEzICsxMDI0LDE5IEBAIGludCBfX3JlZiBhcmNoX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSkNCiB7DQogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsNCiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IHNpemUgPj4gUEFHRV9TSElGVDsNCisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShzdGFydF9wZm4pOw0KKwlzdHJ1Y3Qgdm1lbV9hbHRtYXAgKmFsdG1hcDsNCiAJc3RydWN0IHpvbmUgKnpvbmU7DQogCWludCByZXQ7DQogDQotCXpvbmUgPSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSk7DQotCWtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX3JlbW92ZShzdGFydCwgc3RhcnQgKyBzaXplKTsNCisJLyogV2l0aCBhbHRtYXAgdGhlIGZpcnN0IG1hcHBlZCBwYWdlIGlzIG9mZnNldCBmcm9tIEBzdGFydCAqLw0KKwlhbHRtYXAgPSB0b192bWVtX2FsdG1hcCgodW5zaWduZWQgbG9uZykgcGFnZSk7DQorCWlmIChhbHRtYXApDQorCQlwYWdlICs9IHZtZW1fYWx0bWFwX29mZnNldChhbHRtYXApOw0KKwl6b25lID0gcGFnZV96b25lKHBhZ2UpOw0KIAlyZXQgPSBfX3JlbW92ZV9wYWdlcyh6b25lLCBzdGFydF9wZm4sIG5yX3BhZ2VzKTsNCiAJV0FSTl9PTl9PTkNFKHJldCk7DQorCWtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX3JlbW92ZShzdGFydCwgc3RhcnQgKyBzaXplKTsNCiANCiAJcmV0dXJuIHJldDsNCiB9DQpAQCAtMTIzNCw3ICsxMjQ2LDcgQEAgc3RhdGljIHZvaWQgX19tZW1pbml0ZGF0YSAqcF9zdGFydCwgKnBfZW5kOw0KIHN0YXRpYyBpbnQgX19tZW1pbml0ZGF0YSBub2RlX3N0YXJ0Ow0KIA0KIHN0YXRpYyBpbnQgX19tZW1pbml0IHZtZW1tYXBfcG9wdWxhdGVfaHVnZXBhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsDQotCQkJCQkJdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlKQ0KKwkJdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBzdHJ1Y3Qgdm1lbV9hbHRtYXAgKmFsdG1hcCkNCiB7DQogCXVuc2lnbmVkIGxvbmcgYWRkcjsNCiAJdW5zaWduZWQgbG9uZyBuZXh0Ow0KQEAgLTEyNTcsNyArMTI2OSw3IEBAIHN0YXRpYyBpbnQgX19tZW1pbml0IHZtZW1tYXBfcG9wdWxhdGVfaHVnZXBhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsDQogCQlpZiAocG1kX25vbmUoKnBtZCkpIHsNCiAJCQl2b2lkICpwOw0KIA0KLQkJCXAgPSB2bWVtbWFwX2FsbG9jX2Jsb2NrX2J1ZihQTURfU0laRSwgbm9kZSk7DQorCQkJcCA9IHZtZW1tYXBfYWxsb2NfYmxvY2tfYnVmKFBNRF9TSVpFLCBub2RlLCBhbHRtYXApOw0KIAkJCWlmIChwKSB7DQogCQkJCXB0ZV90IGVudHJ5Ow0KIA0KQEAgLTEyNzgsNyArMTI5MCw4IEBAIHN0YXRpYyBpbnQgX19tZW1pbml0IHZtZW1tYXBfcG9wdWxhdGVfaHVnZXBhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsDQogCQkJCWFkZHJfZW5kID0gYWRkciArIFBNRF9TSVpFOw0KIAkJCQlwX2VuZCA9IHAgKyBQTURfU0laRTsNCiAJCQkJY29udGludWU7DQotCQkJfQ0KKwkJCX0gZWxzZSBpZiAoYWx0bWFwKQ0KKwkJCQlyZXR1cm4gLUVOT01FTTsgLyogbm8gZmFsbGJhY2sgKi8NCiAJCX0gZWxzZSBpZiAocG1kX2xhcmdlKCpwbWQpKSB7DQogCQkJdm1lbW1hcF92ZXJpZnkoKHB0ZV90ICopcG1kLCBub2RlLCBhZGRyLCBuZXh0KTsNCiAJCQljb250aW51ZTsNCkBAIC0xMjkyLDExICsxMzA1LDE2IEBAIHN0YXRpYyBpbnQgX19tZW1pbml0IHZtZW1tYXBfcG9wdWxhdGVfaHVnZXBhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsDQogDQogaW50IF9fbWVtaW5pdCB2bWVtbWFwX3BvcHVsYXRlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSkNCiB7DQorCXN0cnVjdCB2bWVtX2FsdG1hcCAqYWx0bWFwID0gdG9fdm1lbV9hbHRtYXAoc3RhcnQpOw0KIAlpbnQgZXJyOw0KIA0KIAlpZiAoY3B1X2hhc19wc2UpDQotCQllcnIgPSB2bWVtbWFwX3BvcHVsYXRlX2h1Z2VwYWdlcyhzdGFydCwgZW5kLCBub2RlKTsNCi0JZWxzZQ0KKwkJZXJyID0gdm1lbW1hcF9wb3B1bGF0ZV9odWdlcGFnZXMoc3RhcnQsIGVuZCwgbm9kZSwgYWx0bWFwKTsNCisJZWxzZSBpZiAoYWx0bWFwKSB7DQorCQlwcl9lcnJfb25jZSgiJXM6IG5vIGNwdSBzdXBwb3J0IGZvciBhbHRtYXAgYWxsb2NhdGlvbnNcbiIsDQorCQkJCV9fZnVuY19fKTsNCisJCWVyciA9IC1FTk9NRU07DQorCX0gZWxzZQ0KIAkJZXJyID0gdm1lbW1hcF9wb3B1bGF0ZV9iYXNlcGFnZXMoc3RhcnQsIGVuZCwgbm9kZSk7DQogCWlmICghZXJyKQ0KIAkJc3luY19nbG9iYWxfcGdkcyhzdGFydCwgZW5kIC0gMSwgMCk7DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udmRpbW0vcG1lbS5jIGIvZHJpdmVycy9udmRpbW0vcG1lbS5jDQppbmRleCAzNDlmMDNlN2VkMDYuLjNjNWI4ZjU4NTQ0MSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uYw0KKysrIGIvZHJpdmVycy9udmRpbW0vcG1lbS5jDQpAQCAtMTUxLDcgKzE1MSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW1fYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LA0KIAl9DQogDQogCWlmIChwbWVtX3Nob3VsZF9tYXBfcGFnZXMoZGV2KSkNCi0JCXBtZW0tPnZpcnRfYWRkciA9ICh2b2lkIF9fcG1lbSAqKSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcmVzKTsNCisJCXBtZW0tPnZpcnRfYWRkciA9ICh2b2lkIF9fcG1lbSAqKSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcmVzLA0KKwkJCQlOVUxMKTsNCiAJZWxzZQ0KIAkJcG1lbS0+dmlydF9hZGRyID0gKHZvaWQgX19wbWVtICopIGRldm1fbWVtcmVtYXAoZGV2LA0KIAkJCQlwbWVtLT5waHlzX2FkZHIsIHBtZW0tPnNpemUsDQpAQCAtMzYyLDcgKzM2Myw4IEBAIHN0YXRpYyBpbnQgbnZkaW1tX25hbWVzcGFjZV9hdHRhY2hfcGZuKHN0cnVjdCBuZF9uYW1lc3BhY2VfY29tbW9uICpuZG5zKQ0KIAkvKiBlc3RhYmxpc2ggcGZuIHJhbmdlIGZvciBsb29rdXAsIGFuZCBzd2l0Y2ggdG8gZGlyZWN0IG1hcCAqLw0KIAlwbWVtID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQogCWRldm1fbWVtdW5tYXAoZGV2LCAodm9pZCBfX2ZvcmNlICopIHBtZW0tPnZpcnRfYWRkcik7DQotCXBtZW0tPnZpcnRfYWRkciA9ICh2b2lkIF9fcG1lbSAqKSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgJm5zaW8tPnJlcyk7DQorCXBtZW0tPnZpcnRfYWRkciA9ICh2b2lkIF9fcG1lbSAqKSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgJm5zaW8tPnJlcywNCisJCQlOVUxMKTsNCiAJaWYgKElTX0VSUihwbWVtLT52aXJ0X2FkZHIpKSB7DQogCQlyYyA9IFBUUl9FUlIocG1lbS0+dmlydF9hZGRyKTsNCiAJCWdvdG8gZXJyOw0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW8uaCBiL2luY2x1ZGUvbGludXgvaW8uaA0KaW5kZXggZGU2NGMxZTUzNjEyLi4yZjJmODg1OWFiZDkgMTAwNjQ0DQotLS0gYS9pbmNsdWRlL2xpbnV4L2lvLmgNCisrKyBiL2luY2x1ZGUvbGludXgvaW8uaA0KQEAgLTg3LDIzICs4Nyw2IEBAIHZvaWQgKmRldm1fbWVtcmVtYXAoc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LA0KIAkJc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOw0KIHZvaWQgZGV2bV9tZW11bm1hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpOw0KIA0KLXZvaWQgKl9fZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzKTsNCi0NCi0jaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFDQotdm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzKTsNCi0jZWxzZQ0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzKQ0KLXsNCi0JLyoNCi0JICogRmFpbCBhdHRlbXB0cyB0byBjYWxsIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3aXRob3V0DQotCSAqIFpPTkVfREVWSUNFIHN1cHBvcnQgZW5hYmxlZCwgdGhpcyByZXF1aXJlcyBjYWxsZXJzIHRvIGZhbGwNCi0JICogYmFjayB0byBwbGFpbiBkZXZtX21lbXJlbWFwKCkgYmFzZWQgb24gY29uZmlnDQotCSAqLw0KLQlXQVJOX09OX09OQ0UoMSk7DQotCXJldHVybiBFUlJfUFRSKC1FTlhJTyk7DQotfQ0KLSNlbmRpZg0KLQ0KIC8qDQogICogU29tZSBzeXN0ZW1zIGRvIG5vdCBoYXZlIGxlZ2FjeSBJU0EgZGV2aWNlcy4NCiAgKiAvZGV2L3BvcnQgaXMgbm90IGEgdmFsaWQgaW50ZXJmYWNlIG9uIHRoZXNlIHN5c3RlbXMuDQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oIGIvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oDQppbmRleCA4ZjYwZTg5OWIzM2MuLjE3OGUwMDBhNzk4MyAxMDA2NDQNCi0tLSBhL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaA0KKysrIGIvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oDQpAQCAtMjczLDcgKzI3Myw4IEBAIGV4dGVybiBpbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7DQogZXh0ZXJuIGJvb2wgaXNfbWVtYmxvY2tfb2ZmbGluZWQoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKTsNCiBleHRlcm4gdm9pZCByZW1vdmVfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUpOw0KIGV4dGVybiBpbnQgc3BhcnNlX2FkZF9vbmVfc2VjdGlvbihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4pOw0KLWV4dGVybiB2b2lkIHNwYXJzZV9yZW1vdmVfb25lX3NlY3Rpb24oc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBtZW1fc2VjdGlvbiAqbXMpOw0KK2V4dGVybiB2b2lkIHNwYXJzZV9yZW1vdmVfb25lX3NlY3Rpb24oc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBtZW1fc2VjdGlvbiAqbXMsDQorCQl1bnNpZ25lZCBsb25nIG1hcF9vZmZzZXQpOw0KIGV4dGVybiBzdHJ1Y3QgcGFnZSAqc3BhcnNlX2RlY29kZV9tZW1fbWFwKHVuc2lnbmVkIGxvbmcgY29kZWRfbWVtX21hcCwNCiAJCQkJCSAgdW5zaWduZWQgbG9uZyBwbnVtKTsNCiANCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgNCmluZGV4IDMwYzNjODc2NDY0OS4uYjhjYmE3ZDhlYTI4IDEwMDY0NA0KLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oDQorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgNCkBAIC03MTgsMTggKzcxOCwxMDkgQEAgc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBwYWdlX3pvbmVudW0oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpDQogfQ0KIA0KIC8qKg0KKyAqIHN0cnVjdCB2bWVtX2FsdG1hcCAtIHByZS1hbGxvY2F0ZWQgc3RvcmFnZSBmb3Igdm1lbW1hcF9wb3B1bGF0ZQ0KKyAqIEBiYXNlX3BmbjogYmFzZSBvZiB0aGUgZW50aXJlIGRldl9wYWdlbWFwIG1hcHBpbmcNCisgKiBAcmVzZXJ2ZTogcGFnZXMgbWFwcGVkLCBidXQgcmVzZXJ2ZWQgZm9yIGRyaXZlciB1c2UgKHJlbGF0aXZlIHRvIEBiYXNlKQ0KKyAqIEBmcmVlOiBmcmVlIHBhZ2VzIHNldCBhc2lkZSBpbiB0aGUgbWFwcGluZyBmb3IgbWVtbWFwIHN0b3JhZ2UNCisgKiBAYWxpZ246IHBhZ2VzIHJlc2VydmVkIHRvIG1lZXQgYWxsb2NhdGlvbiBhbGlnbm1lbnRzDQorICogQGFsbG9jOiB0cmFjayBwYWdlcyBjb25zdW1lZCwgcHJpdmF0ZSB0byB2bWVtbWFwX3BvcHVsYXRlKCkNCisgKi8NCitzdHJ1Y3Qgdm1lbV9hbHRtYXAgew0KKwljb25zdCB1bnNpZ25lZCBsb25nIGJhc2VfcGZuOw0KKwljb25zdCB1bnNpZ25lZCBsb25nIHJlc2VydmU7DQorCXVuc2lnbmVkIGxvbmcgZnJlZTsNCisJdW5zaWduZWQgbG9uZyBhbGlnbjsNCisJdW5zaWduZWQgbG9uZyBhbGxvYzsNCit9Ow0KKw0KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWVtX2FsdG1hcF9ucl9mcmVlKHN0cnVjdCB2bWVtX2FsdG1hcCAqYWx0bWFwKQ0KK3sNCisJdW5zaWduZWQgbG9uZyBhbGxvY2F0ZWQgPSBhbHRtYXAtPmFsbG9jICsgYWx0bWFwLT5hbGlnbjsNCisNCisJaWYgKGFsdG1hcC0+ZnJlZSA+IGFsbG9jYXRlZCkNCisJCXJldHVybiBhbHRtYXAtPmZyZWUgLSBhbGxvY2F0ZWQ7DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1lbV9hbHRtYXBfb2Zmc2V0KHN0cnVjdCB2bWVtX2FsdG1hcCAqYWx0bWFwKQ0KK3sNCisJLyogbnVtYmVyIG9mIHBmbnMgZnJvbSBiYXNlIHdoZXJlIHBmbl90b19wYWdlKCkgaXMgdmFsaWQgKi8NCisJcmV0dXJuIGFsdG1hcC0+cmVzZXJ2ZSArIGFsdG1hcC0+ZnJlZTsNCit9DQorDQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtZW1fYWx0bWFwX25leHRfcGZuKHN0cnVjdCB2bWVtX2FsdG1hcCAqYWx0bWFwKQ0KK3sNCisJcmV0dXJuIGFsdG1hcC0+YmFzZV9wZm4gKyBhbHRtYXAtPnJlc2VydmUgKyBhbHRtYXAtPmFsbG9jDQorCQkrIGFsdG1hcC0+YWxpZ247DQorfQ0KKw0KKy8qKg0KKyAqIHZtZW1fYWx0bWFwX2FsbG9jIC0gYWxsb2NhdGUgcGFnZXMgZnJvbSB0aGUgdm1lbV9hbHRtYXAgcmVzZXJ2YXRpb24NCisgKiBAYWx0bWFwIC0gcmVzZXJ2ZWQgcGFnZSBwb29sIGZvciB0aGUgYWxsb2NhdGlvbg0KKyAqIEBucl9wZm5zIC0gc2l6ZSAoaW4gcGFnZXMpIG9mIHRoZSBhbGxvY2F0aW9uDQorICoNCisgKiBBbGxvY2F0aW9ucyBhcmUgYWxpZ25lZCB0byB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdA0KKyAqLw0KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWVtX2FsdG1hcF9hbGxvYyhzdHJ1Y3Qgdm1lbV9hbHRtYXAgKmFsdG1hcCwNCisJCXVuc2lnbmVkIGxvbmcgbnJfcGZucykNCit7DQorCXVuc2lnbmVkIGxvbmcgcGZuID0gdm1lbV9hbHRtYXBfbmV4dF9wZm4oYWx0bWFwKTsNCisJdW5zaWduZWQgbG9uZyBucl9hbGlnbjsNCisNCisJbnJfYWxpZ24gPSAxVUwgPDwgZmluZF9maXJzdF9iaXQoJm5yX3BmbnMsIEJJVFNfUEVSX0xPTkcpOw0KKwlucl9hbGlnbiA9IEFMSUdOKHBmbiwgbnJfYWxpZ24pIC0gcGZuOw0KKw0KKwlpZiAobnJfcGZucyArIG5yX2FsaWduID4gdm1lbV9hbHRtYXBfbnJfZnJlZShhbHRtYXApKQ0KKwkJcmV0dXJuIFVMT05HX01BWDsNCisJYWx0bWFwLT5hbGxvYyArPSBucl9wZm5zOw0KKwlhbHRtYXAtPmFsaWduICs9IG5yX2FsaWduOw0KKwlyZXR1cm4gcGZuICsgbnJfYWxpZ247DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCB2bWVtX2FsdG1hcF9mcmVlKHN0cnVjdCB2bWVtX2FsdG1hcCAqYWx0bWFwLA0KKwkJdW5zaWduZWQgbG9uZyBucl9wZm5zKQ0KK3sNCisJYWx0bWFwLT5hbGxvYyAtPSBucl9wZm5zOw0KK30NCisNCisvKioNCiAgKiBzdHJ1Y3QgZGV2X3BhZ2VtYXAgLSBtZXRhZGF0YSBmb3IgWk9ORV9ERVZJQ0UgbWFwcGluZ3MNCisgKiBAYWx0bWFwOiBwcmUtYWxsb2NhdGVkL3Jlc2VydmVkIG1lbW9yeSBmb3Igdm1lbW1hcCBhbGxvY2F0aW9ucw0KICAqIEBkZXY6IGhvc3QgZGV2aWNlIG9mIHRoZSBtYXBwaW5nIGZvciBkZWJ1Zw0KICAqLw0KIHN0cnVjdCBkZXZfcGFnZW1hcCB7DQotCS8qIFRPRE86IHZtZW1fYWx0bWFwIGFuZCBwZXJjcHVfcmVmIGNvdW50ICovDQorCXN0cnVjdCB2bWVtX2FsdG1hcCAqYWx0bWFwOw0KKwljb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlczsNCiAJc3RydWN0IGRldmljZSAqZGV2Ow0KIH07DQogDQogI2lmZGVmIENPTkZJR19aT05FX0RFVklDRQ0KIHN0cnVjdCBkZXZfcGFnZW1hcCAqX19nZXRfZGV2X3BhZ2VtYXAocmVzb3VyY2Vfc2l6ZV90IHBoeXMpOw0KK3ZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywNCisJCXN0cnVjdCB2bWVtX2FsdG1hcCAqYWx0bWFwKTsNCisjZWxzZQ0KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpfX2dldF9kZXZfcGFnZW1hcChyZXNvdXJjZV9zaXplX3QgcGh5cykNCit7DQorCXJldHVybiBOVUxMOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywNCisJCXN0cnVjdCB2bWVtX2FsdG1hcCAqYWx0bWFwKQ0KK3sNCisJLyoNCisJICogRmFpbCBhdHRlbXB0cyB0byBjYWxsIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3aXRob3V0DQorCSAqIFpPTkVfREVWSUNFIHN1cHBvcnQgZW5hYmxlZCwgdGhpcyByZXF1aXJlcyBjYWxsZXJzIHRvIGZhbGwNCisJICogYmFjayB0byBwbGFpbiBkZXZtX21lbXJlbWFwKCkgYmFzZWQgb24gY29uZmlnDQorCSAqLw0KKwlXQVJOX09OX09OQ0UoMSk7DQorCXJldHVybiBFUlJfUFRSKC1FTlhJTyk7DQorfQ0KKyNlbmRpZg0KKw0KKyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVANCitzdHJ1Y3Qgdm1lbV9hbHRtYXAgKnRvX3ZtZW1fYWx0bWFwKHVuc2lnbmVkIGxvbmcgbWVtbWFwX3N0YXJ0KTsNCiAjZWxzZQ0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpnZXRfZGV2X3BhZ2VtYXAocmVzb3VyY2Vfc2l6ZV90IHBoeXMpDQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1lbV9hbHRtYXAgKnRvX3ZtZW1fYWx0bWFwKHVuc2lnbmVkIGxvbmcgbWVtbWFwX3N0YXJ0KQ0KIHsNCiAJcmV0dXJuIE5VTEw7DQogfQ0KQEAgLTIyNDUsNyArMjMzNiw4IEBAIHB1ZF90ICp2bWVtbWFwX3B1ZF9wb3B1bGF0ZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBub2RlKTsNCiBwbWRfdCAqdm1lbW1hcF9wbWRfcG9wdWxhdGUocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSk7DQogcHRlX3QgKnZtZW1tYXBfcHRlX3BvcHVsYXRlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUpOw0KIHZvaWQgKnZtZW1tYXBfYWxsb2NfYmxvY2sodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbm9kZSk7DQotdm9pZCAqdm1lbW1hcF9hbGxvY19ibG9ja19idWYodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbm9kZSk7DQordm9pZCAqdm1lbW1hcF9hbGxvY19ibG9ja19idWYodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbm9kZSwNCisJCXN0cnVjdCB2bWVtX2FsdG1hcCAqYWx0bWFwKTsNCiB2b2lkIHZtZW1tYXBfdmVyaWZ5KHB0ZV90ICosIGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7DQogaW50IHZtZW1tYXBfcG9wdWxhdGVfYmFzZXBhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLA0KIAkJCSAgICAgICBpbnQgbm9kZSk7DQpkaWZmIC0tZ2l0IGEva2VybmVsL21lbXJlbWFwLmMgYi9rZXJuZWwvbWVtcmVtYXAuYw0KaW5kZXggNjRiZmQ5ZmE5M2FhLi43OWJiYmVhMmRlNmEgMTAwNjQ0DQotLS0gYS9rZXJuZWwvbWVtcmVtYXAuYw0KKysrIGIva2VybmVsL21lbXJlbWFwLmMNCkBAIC0xNDYsNiArMTQ2LDcgQEAgc3RydWN0IHBhZ2VfbWFwIHsNCiAJc3RydWN0IHJlc291cmNlIHJlczsNCiAJc3RydWN0IGRldl9wYWdlbWFwIHBnbWFwOw0KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7DQorCXN0cnVjdCB2bWVtX2FsdG1hcCBhbHRtYXA7DQogfTsNCiANCiBzdGF0aWMgdm9pZCBhZGRfcGFnZV9tYXAoc3RydWN0IHBhZ2VfbWFwICpwYWdlX21hcCkNCkBAIC0xNjIsMTQgKzE2MywxNyBAQCBzdGF0aWMgdm9pZCBkZWxfcGFnZV9tYXAoc3RydWN0IHBhZ2VfbWFwICpwYWdlX21hcCkNCiAJc3Bpbl91bmxvY2soJnJhbmdlX2xvY2spOw0KIH0NCiANCi1zdGF0aWMgdm9pZCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpyZXMpDQorc3RhdGljIHZvaWQgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkNCiB7DQotCXN0cnVjdCBwYWdlX21hcCAqcGFnZV9tYXAgPSByZXM7DQotDQotCWRlbF9wYWdlX21hcChwYWdlX21hcCk7DQorCXN0cnVjdCBwYWdlX21hcCAqcGFnZV9tYXAgPSBkYXRhOw0KKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9ICZwYWdlX21hcC0+cmVzOw0KKwlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwID0gJnBhZ2VfbWFwLT5wZ21hcDsNCiANCiAJLyogcGFnZXMgYXJlIGRlYWQgYW5kIHVudXNlZCwgdW5kbyB0aGUgYXJjaCBtYXBwaW5nICovDQotCWFyY2hfcmVtb3ZlX21lbW9yeShwYWdlX21hcC0+cmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZwYWdlX21hcC0+cmVzKSk7DQorCWFyY2hfcmVtb3ZlX21lbW9yeShyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOw0KKwlkZXZfV0FSTl9PTkNFKGRldiwgcGdtYXAtPmFsdG1hcCAmJiBwZ21hcC0+YWx0bWFwLT5hbGxvYywNCisJCQkiJXM6IGZhaWxlZCB0byBmcmVlIGFsbCByZXNlcnZlZCBwYWdlc1xuIiwgX19mdW5jX18pOw0KKwlkZWxfcGFnZV9tYXAocGFnZV9tYXApOw0KIH0NCiANCiAvKiBhc3N1bWVzIHJjdV9yZWFkX2xvY2soKSBoZWxkIGF0IGVudHJ5ICovDQpAQCAtMTg1LDEwICsxODksMjIgQEAgc3RydWN0IGRldl9wYWdlbWFwICpfX2dldF9kZXZfcGFnZW1hcChyZXNvdXJjZV9zaXplX3QgcGh5cykNCiAJcmV0dXJuIE5VTEw7DQogfQ0KIA0KLXZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykNCisvKioNCisgKiBkZXZtX21lbXJlbWFwX3BhZ2VzIC0gcmVtYXAgYW5kIHByb3ZpZGUgbWVtbWFwIGJhY2tpbmcgZm9yIHRoZSBnaXZlbiByZXNvdXJjZQ0KKyAqIEBkZXY6IGhvc3RpbmcgZGV2aWNlIGZvciBAcmVzDQorICogQHJlczogImhvc3QgbWVtb3J5IiBhZGRyZXNzIHJhbmdlDQorICogQGFsdG1hcDogb3B0aW9uYWwgZGVzY3JpcHRvciBmb3IgYWxsb2NhdGluZyB0aGUgbWVtbWFwIGZyb20gQHJlcw0KKyAqDQorICogTm90ZSwgdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgQHJlcyBpcyBhIGhvc3QgbWVtb3J5IHJhbmdlIHRoYXQgY291bGQNCisgKiBmZWFzaWJseSBiZSB0cmVhdGVkIGFzIGEgIlN5c3RlbSBSQU0iIHJhbmdlLCBpLmUuIG5vdCBhIGRldmljZSBtbWlvDQorICogcmFuZ2UsIGJ1dCB0aGlzIGlzIG5vdCBlbmZvcmNlZC4NCisgKi8NCit2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJlc291cmNlICpyZXMsDQorCQlzdHJ1Y3Qgdm1lbV9hbHRtYXAgKmFsdG1hcCkNCiB7DQogCWludCBpc19yYW0gPSByZWdpb25faW50ZXJzZWN0cyhyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksDQogCQkJIlN5c3RlbSBSQU0iKTsNCisJc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcDsNCiAJc3RydWN0IHBhZ2VfbWFwICpwYWdlX21hcDsNCiAJaW50IGVycm9yLCBuaWQ7DQogDQpAQCAtMjAxLDE0ICsyMTcsMjUgQEAgdm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzKQ0KIAlpZiAoaXNfcmFtID09IFJFR0lPTl9JTlRFUlNFQ1RTKQ0KIAkJcmV0dXJuIF9fdmEocmVzLT5zdGFydCk7DQogDQorCWlmIChhbHRtYXAgJiYgIUlTX0VOQUJMRUQoQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQKSkgew0KKwkJZGV2X2VycihkZXYsICIlczogc3VwcG9ydCBmb3IgYWx0ZXJuYXRlIHZtZW1tYXAgZGlzYWJsZWRcbiIsDQorCQkJCV9fZnVuY19fKTsNCisJCXJldHVybiBFUlJfUFRSKC1FTlhJTyk7DQorCX0NCisNCiAJcGFnZV9tYXAgPSBkZXZyZXNfYWxsb2Nfbm9kZShkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsDQogCQkJc2l6ZW9mKCpwYWdlX21hcCksIEdGUF9LRVJORUwsIGRldl90b19ub2RlKGRldikpOw0KIAlpZiAoIXBhZ2VfbWFwKQ0KIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQorCXBnbWFwID0gJnBhZ2VfbWFwLT5wZ21hcDsNCiANCiAJbWVtY3B5KCZwYWdlX21hcC0+cmVzLCByZXMsIHNpemVvZigqcmVzKSk7DQotDQotCXBhZ2VfbWFwLT5wZ21hcC5kZXYgPSBkZXY7DQorCWlmIChhbHRtYXApIHsNCisJCW1lbWNweSgmcGFnZV9tYXAtPmFsdG1hcCwgYWx0bWFwLCBzaXplb2YoKmFsdG1hcCkpOw0KKwkJcGdtYXAtPmFsdG1hcCA9ICZwYWdlX21hcC0+YWx0bWFwOw0KKwl9DQorCXBnbWFwLT5kZXYgPSBkZXY7DQorCXBnbWFwLT5yZXMgPSAmcGFnZV9tYXAtPnJlczsNCiAJSU5JVF9MSVNUX0hFQUQoJnBhZ2VfbWFwLT5saXN0KTsNCiAJYWRkX3BhZ2VfbWFwKHBhZ2VfbWFwKTsNCiANCkBAIC0yMjgsMyArMjU1LDM3IEBAIHZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykNCiB9DQogRVhQT1JUX1NZTUJPTChkZXZtX21lbXJlbWFwX3BhZ2VzKTsNCiAjZW5kaWYgLyogQ09ORklHX1pPTkVfREVWSUNFICovDQorDQorI2lmZGVmIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUA0KKy8qDQorICogVW5jb2RpdGlvbmFsbHkgcmV0cmlldmUgYSBkZXZfcGFnZW1hcCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHBoeXNpY2FsDQorICogYWRkcmVzcywgdGhpcyBpcyBvbmx5IGZvciB1c2UgaW4gdGhlIGFyY2hfe2FkZHxyZW1vdmV9X21lbW9yeSgpIGZvciBzZXR0aW5nDQorICogdXAgYW5kIHRlYXJpbmcgZG93biB0aGUgbWVtbWFwLg0KKyAqLw0KK3N0YXRpYyBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKmxvb2t1cF9kZXZfcGFnZW1hcChyZXNvdXJjZV9zaXplX3QgcGh5cykNCit7DQorCXN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7DQorDQorCXJjdV9yZWFkX2xvY2soKTsNCisJcGdtYXAgPSBfX2dldF9kZXZfcGFnZW1hcChwaHlzKTsNCisJcmN1X3JlYWRfdW5sb2NrKCk7DQorCXJldHVybiBwZ21hcDsNCit9DQorDQorc3RydWN0IHZtZW1fYWx0bWFwICp0b192bWVtX2FsdG1hcCh1bnNpZ25lZCBsb25nIG1lbW1hcF9zdGFydCkNCit7DQorCS8qDQorCSAqICdtZW1tYXBfc3RhcnQnIGlzIHRoZSB2aXJ0dWFsIGFkZHJlc3MgZm9yIHRoZSBmaXJzdCAic3RydWN0DQorCSAqIHBhZ2UiIGluIHRoaXMgcmFuZ2Ugb2YgdGhlIHZtZW1tYXAgYXJyYXkuICBJbiB0aGUgY2FzZSBvZg0KKwkgKiBDT05GSUdfU1BBUlNFX1ZNRU1NQVAgYSBwYWdlX3RvX3BmbiBjb252ZXJzaW9uIGlzIHNpbXBsZQ0KKwkgKiBwb2ludGVyIGFyaXRobWV0aWMsIHNvIHdlIGNhbiBwZXJmb3JtIHRoaXMgdG9fdm1lbV9hbHRtYXAoKQ0KKwkgKiBjb252ZXJzaW9uIHdpdGhvdXQgY29uY2VybiBmb3IgdGhlIGluaXRpYWxpemF0aW9uIHN0YXRlIG9mDQorCSAqIHRoZSBzdHJ1Y3QgcGFnZSBmaWVsZHMuDQorCSAqLw0KKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IChzdHJ1Y3QgcGFnZSAqKSBtZW1tYXBfc3RhcnQ7DQorCXN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7DQorDQorCXBnbWFwID0gbG9va3VwX2Rldl9wYWdlbWFwKF9fcGZuX3RvX3BoeXMocGFnZV90b19wZm4ocGFnZSkpKTsNCisJcmV0dXJuIHBnbWFwID8gcGdtYXAtPmFsdG1hcCA6IE5VTEw7DQorfQ0KKyNlbmRpZiAvKiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVAgKi8NCmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYw0KaW5kZXggYWE5OTJlMmRmNThhLi4zNTIxZGYxNTNkZTMgMTAwNjQ0DQotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jDQorKysgYi9tbS9tZW1vcnlfaG90cGx1Zy5jDQpAQCAtNTA1LDEwICs1MDUsMjUgQEAgaW50IF9fcmVmIF9fYWRkX3BhZ2VzKGludCBuaWQsIHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHBoeXNfc3RhcnRfcGZuLA0KIAl1bnNpZ25lZCBsb25nIGk7DQogCWludCBlcnIgPSAwOw0KIAlpbnQgc3RhcnRfc2VjLCBlbmRfc2VjOw0KKwlzdHJ1Y3Qgdm1lbV9hbHRtYXAgKmFsdG1hcDsNCisNCiAJLyogZHVyaW5nIGluaXRpYWxpemUgbWVtX21hcCwgYWxpZ24gaG90LWFkZGVkIHJhbmdlIHRvIHNlY3Rpb24gKi8NCiAJc3RhcnRfc2VjID0gcGZuX3RvX3NlY3Rpb25fbnIocGh5c19zdGFydF9wZm4pOw0KIAllbmRfc2VjID0gcGZuX3RvX3NlY3Rpb25fbnIocGh5c19zdGFydF9wZm4gKyBucl9wYWdlcyAtIDEpOw0KIA0KKwlhbHRtYXAgPSB0b192bWVtX2FsdG1hcCgodW5zaWduZWQgbG9uZykgcGZuX3RvX3BhZ2UocGh5c19zdGFydF9wZm4pKTsNCisJaWYgKGFsdG1hcCkgew0KKwkJLyoNCisJCSAqIFZhbGlkYXRlIGFsdG1hcCBpcyB3aXRoaW4gYm91bmRzIG9mIHRoZSB0b3RhbCByZXF1ZXN0DQorCQkgKi8NCisJCWlmIChhbHRtYXAtPmJhc2VfcGZuICE9IHBoeXNfc3RhcnRfcGZuDQorCQkJCXx8IHZtZW1fYWx0bWFwX29mZnNldChhbHRtYXApID4gbnJfcGFnZXMpIHsNCisJCQlwcl93YXJuX29uY2UoIm1lbW9yeSBhZGQgZmFpbCwgaW52YWxpZCBhbHRtYXBcbiIpOw0KKwkJCXJldHVybiAtRUlOVkFMOw0KKwkJfQ0KKwkJYWx0bWFwLT5hbGxvYyA9IDA7DQorCX0NCisNCiAJZm9yIChpID0gc3RhcnRfc2VjOyBpIDw9IGVuZF9zZWM7IGkrKykgew0KIAkJZXJyID0gX19hZGRfc2VjdGlvbihuaWQsIHpvbmUsIHNlY3Rpb25fbnJfdG9fcGZuKGkpKTsNCiANCkBAIC03MzAsNyArNzQ1LDggQEAgc3RhdGljIHZvaWQgX19yZW1vdmVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4pDQogCXBnZGF0X3Jlc2l6ZV91bmxvY2soem9uZS0+em9uZV9wZ2RhdCwgJmZsYWdzKTsNCiB9DQogDQotc3RhdGljIGludCBfX3JlbW92ZV9zZWN0aW9uKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgbWVtX3NlY3Rpb24gKm1zKQ0KK3N0YXRpYyBpbnQgX19yZW1vdmVfc2VjdGlvbihzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IG1lbV9zZWN0aW9uICptcywNCisJCXVuc2lnbmVkIGxvbmcgbWFwX29mZnNldCkNCiB7DQogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuOw0KIAlpbnQgc2NuX25yOw0KQEAgLTc0Nyw3ICs3NjMsNyBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX3NlY3Rpb24oc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBtZW1fc2VjdGlvbiAqbXMpDQogCXN0YXJ0X3BmbiA9IHNlY3Rpb25fbnJfdG9fcGZuKHNjbl9ucik7DQogCV9fcmVtb3ZlX3pvbmUoem9uZSwgc3RhcnRfcGZuKTsNCiANCi0Jc3BhcnNlX3JlbW92ZV9vbmVfc2VjdGlvbih6b25lLCBtcyk7DQorCXNwYXJzZV9yZW1vdmVfb25lX3NlY3Rpb24oem9uZSwgbXMsIG1hcF9vZmZzZXQpOw0KIAlyZXR1cm4gMDsNCiB9DQogDQpAQCAtNzY2LDkgKzc4MiwzMiBAQCBpbnQgX19yZW1vdmVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgcGh5c19zdGFydF9wZm4sDQogCQkgdW5zaWduZWQgbG9uZyBucl9wYWdlcykNCiB7DQogCXVuc2lnbmVkIGxvbmcgaTsNCi0JaW50IHNlY3Rpb25zX3RvX3JlbW92ZTsNCi0JcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCBzaXplOw0KLQlpbnQgcmV0ID0gMDsNCisJdW5zaWduZWQgbG9uZyBtYXBfb2Zmc2V0ID0gMDsNCisJaW50IHNlY3Rpb25zX3RvX3JlbW92ZSwgcmV0ID0gMDsNCisNCisJLyogSW4gdGhlIFpPTkVfREVWSUNFIGNhc2UgZGV2aWNlIGRyaXZlciBvd25zIHRoZSBtZW1vcnkgcmVnaW9uICovDQorCWlmIChpc19kZXZfem9uZSh6b25lKSkgew0KKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwaHlzX3N0YXJ0X3Bmbik7DQorCQlzdHJ1Y3Qgdm1lbV9hbHRtYXAgKmFsdG1hcDsNCisNCisJCWFsdG1hcCA9IHRvX3ZtZW1fYWx0bWFwKCh1bnNpZ25lZCBsb25nKSBwYWdlKTsNCisJCWlmIChhbHRtYXApDQorCQkJbWFwX29mZnNldCA9IHZtZW1fYWx0bWFwX29mZnNldChhbHRtYXApOw0KKwl9IGVsc2Ugew0KKwkJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCBzaXplOw0KKw0KKwkJc3RhcnQgPSBwaHlzX3N0YXJ0X3BmbiA8PCBQQUdFX1NISUZUOw0KKwkJc2l6ZSA9IG5yX3BhZ2VzICogUEFHRV9TSVpFOw0KKw0KKwkJcmV0ID0gcmVsZWFzZV9tZW1fcmVnaW9uX2FkanVzdGFibGUoJmlvbWVtX3Jlc291cmNlLCBzdGFydCwNCisJCQkJCXNpemUpOw0KKwkJaWYgKHJldCkgew0KKwkJCXJlc291cmNlX3NpemVfdCBlbmRyZXMgPSBzdGFydCArIHNpemUgLSAxOw0KKw0KKwkJCXByX3dhcm4oIlVuYWJsZSB0byByZWxlYXNlIHJlc291cmNlIDwlcGEtJXBhPiAoJWQpXG4iLA0KKwkJCQkJJnN0YXJ0LCAmZW5kcmVzLCByZXQpOw0KKwkJfQ0KKwl9DQogDQogCS8qDQogCSAqIFdlIGNhbiBvbmx5IHJlbW92ZSBlbnRpcmUgc2VjdGlvbnMNCkBAIC03NzYsMjMgKzgxNSwxMiBAQCBpbnQgX19yZW1vdmVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgcGh5c19zdGFydF9wZm4sDQogCUJVR19PTihwaHlzX3N0YXJ0X3BmbiAmIH5QQUdFX1NFQ1RJT05fTUFTSyk7DQogCUJVR19PTihucl9wYWdlcyAlIFBBR0VTX1BFUl9TRUNUSU9OKTsNCiANCi0Jc3RhcnQgPSBwaHlzX3N0YXJ0X3BmbiA8PCBQQUdFX1NISUZUOw0KLQlzaXplID0gbnJfcGFnZXMgKiBQQUdFX1NJWkU7DQotDQotCS8qIGluIHRoZSBaT05FX0RFVklDRSBjYXNlIGRldmljZSBkcml2ZXIgb3ducyB0aGUgbWVtb3J5IHJlZ2lvbiAqLw0KLQlpZiAoIWlzX2Rldl96b25lKHpvbmUpKQ0KLQkJcmV0ID0gcmVsZWFzZV9tZW1fcmVnaW9uX2FkanVzdGFibGUoJmlvbWVtX3Jlc291cmNlLCBzdGFydCwgc2l6ZSk7DQotCWlmIChyZXQpIHsNCi0JCXJlc291cmNlX3NpemVfdCBlbmRyZXMgPSBzdGFydCArIHNpemUgLSAxOw0KLQ0KLQkJcHJfd2FybigiVW5hYmxlIHRvIHJlbGVhc2UgcmVzb3VyY2UgPCVwYS0lcGE+ICglZClcbiIsDQotCQkJCSZzdGFydCwgJmVuZHJlcywgcmV0KTsNCi0JfQ0KLQ0KIAlzZWN0aW9uc190b19yZW1vdmUgPSBucl9wYWdlcyAvIFBBR0VTX1BFUl9TRUNUSU9OOw0KIAlmb3IgKGkgPSAwOyBpIDwgc2VjdGlvbnNfdG9fcmVtb3ZlOyBpKyspIHsNCiAJCXVuc2lnbmVkIGxvbmcgcGZuID0gcGh5c19zdGFydF9wZm4gKyBpKlBBR0VTX1BFUl9TRUNUSU9OOw0KLQkJcmV0ID0gX19yZW1vdmVfc2VjdGlvbih6b25lLCBfX3Bmbl90b19zZWN0aW9uKHBmbikpOw0KKw0KKwkJcmV0ID0gX19yZW1vdmVfc2VjdGlvbih6b25lLCBfX3Bmbl90b19zZWN0aW9uKHBmbiksIG1hcF9vZmZzZXQpOw0KKwkJbWFwX29mZnNldCA9IDA7DQogCQlpZiAocmV0KQ0KIAkJCWJyZWFrOw0KIAl9DQpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jDQppbmRleCA0OGFhZjdiOWYyNTMuLjlkZmM0MzFkNjI3MSAxMDA2NDQNCi0tLSBhL21tL3BhZ2VfYWxsb2MuYw0KKysrIGIvbW0vcGFnZV9hbGxvYy5jDQpAQCAtNDYyMCw4ICs0NjIwLDkgQEAgc3RhdGljIHZvaWQgc2V0dXBfem9uZV9taWdyYXRlX3Jlc2VydmUoc3RydWN0IHpvbmUgKnpvbmUpDQogdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfem9uZSh1bnNpZ25lZCBsb25nIHNpemUsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgem9uZSwNCiAJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbnVtIG1lbW1hcF9jb250ZXh0IGNvbnRleHQpDQogew0KLQlwZ19kYXRhX3QgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7DQorCXN0cnVjdCB2bWVtX2FsdG1hcCAqYWx0bWFwID0gdG9fdm1lbV9hbHRtYXAoX19wZm5fdG9fcGh5cyhzdGFydF9wZm4pKTsNCiAJdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gc3RhcnRfcGZuICsgc2l6ZTsNCisJcGdfZGF0YV90ICpwZ2RhdCA9IE5PREVfREFUQShuaWQpOw0KIAl1bnNpZ25lZCBsb25nIHBmbjsNCiAJc3RydWN0IHpvbmUgKno7DQogCXVuc2lnbmVkIGxvbmcgbnJfaW5pdGlhbGlzZWQgPSAwOw0KQEAgLTQ2MjksNiArNDYzMCwxMyBAQCB2b2lkIF9fbWVtaW5pdCBtZW1tYXBfaW5pdF96b25lKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lLA0KIAlpZiAoaGlnaGVzdF9tZW1tYXBfcGZuIDwgZW5kX3BmbiAtIDEpDQogCQloaWdoZXN0X21lbW1hcF9wZm4gPSBlbmRfcGZuIC0gMTsNCiANCisJLyoNCisJICogSG9ub3IgcmVzZXJ2YXRpb24gcmVxdWVzdGVkIGJ5IHRoZSBkcml2ZXIgZm9yIHRoaXMgWk9ORV9ERVZJQ0UNCisJICogbWVtb3J5DQorCSAqLw0KKwlpZiAoYWx0bWFwICYmIHN0YXJ0X3BmbiA9PSBhbHRtYXAtPmJhc2VfcGZuKQ0KKwkJc3RhcnRfcGZuICs9IGFsdG1hcC0+cmVzZXJ2ZTsNCisNCiAJeiA9ICZwZ2RhdC0+bm9kZV96b25lc1t6b25lXTsNCiAJZm9yIChwZm4gPSBzdGFydF9wZm47IHBmbiA8IGVuZF9wZm47IHBmbisrKSB7DQogCQkvKg0KZGlmZiAtLWdpdCBhL21tL3NwYXJzZS12bWVtbWFwLmMgYi9tbS9zcGFyc2Utdm1lbW1hcC5jDQppbmRleCA0Y2JhOWMyNzgzYTEuLjk2YzFkY2E0Y2U2YSAxMDA2NDQNCi0tLSBhL21tL3NwYXJzZS12bWVtbWFwLmMNCisrKyBiL21tL3NwYXJzZS12bWVtbWFwLmMNCkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgKiBfX21lbWluaXQgdm1lbW1hcF9hbGxvY19ibG9jayh1bnNpZ25lZCBsb25nIHNpemUsIGludCBub2RlKQ0KIH0NCiANCiAvKiBuZWVkIHRvIG1ha2Ugc3VyZSBzaXplIGlzIGFsbCB0aGUgc2FtZSBkdXJpbmcgZWFybHkgc3RhZ2UgKi8NCi12b2lkICogX19tZW1pbml0IHZtZW1tYXBfYWxsb2NfYmxvY2tfYnVmKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5vZGUpDQorc3RhdGljIHZvaWQgKiBfX21lbWluaXQgX192bWVtbWFwX2FsbG9jX2Jsb2NrX2J1Zih1bnNpZ25lZCBsb25nIHNpemUsIGludCBub2RlKQ0KIHsNCiAJdm9pZCAqcHRyOw0KIA0KQEAgLTg3LDYgKzg3LDM5IEBAIHZvaWQgKiBfX21lbWluaXQgdm1lbW1hcF9hbGxvY19ibG9ja19idWYodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbm9kZSkNCiAJcmV0dXJuIHB0cjsNCiB9DQogDQorc3RhdGljIHZvaWQgKiBfX21lbWluaXQgYWx0bWFwX2FsbG9jX2Jsb2NrX2J1Zih1bnNpZ25lZCBsb25nIHNpemUsDQorCQlzdHJ1Y3Qgdm1lbV9hbHRtYXAgKmFsdG1hcCkNCit7DQorCXVuc2lnbmVkIGxvbmcgcGZuLCBucl9wZm5zOw0KKwl2b2lkICpwdHI7DQorDQorCWlmIChzaXplICYgflBBR0VfTUFTSykgew0KKwkJcHJfd2Fybl9vbmNlKCIlczogYWxsb2NhdGlvbnMgbXVzdCBiZSBtdWx0aXBsZSBvZiBQQUdFX1NJWkUgKCVsZClcbiIsDQorCQkJCV9fZnVuY19fLCBzaXplKTsNCisJCXJldHVybiBOVUxMOw0KKwl9DQorDQorCW5yX3BmbnMgPSBzaXplID4+IFBBR0VfU0hJRlQ7DQorCXBmbiA9IHZtZW1fYWx0bWFwX2FsbG9jKGFsdG1hcCwgbnJfcGZucyk7DQorCWlmIChwZm4gPCBVTE9OR19NQVgpDQorCQlwdHIgPSBfX3ZhKF9fcGZuX3RvX3BoeXMocGZuKSk7DQorCWVsc2UNCisJCXB0ciA9IE5VTEw7DQorCXByX2RlYnVnKCIlczogcGZuOiAlI2x4IGFsbG9jOiAlbGQgYWxpZ246ICVsZCBucjogJSNseFxuIiwNCisJCQlfX2Z1bmNfXywgcGZuLCBhbHRtYXAtPmFsbG9jLCBhbHRtYXAtPmFsaWduLCBucl9wZm5zKTsNCisNCisJcmV0dXJuIHB0cjsNCit9DQorDQorLyogbmVlZCB0byBtYWtlIHN1cmUgc2l6ZSBpcyBhbGwgdGhlIHNhbWUgZHVyaW5nIGVhcmx5IHN0YWdlICovDQordm9pZCAqIF9fbWVtaW5pdCB2bWVtbWFwX2FsbG9jX2Jsb2NrX2J1Zih1bnNpZ25lZCBsb25nIHNpemUsIGludCBub2RlLA0KKwkJc3RydWN0IHZtZW1fYWx0bWFwICphbHRtYXApDQorew0KKwlpZiAoYWx0bWFwKQ0KKwkJcmV0dXJuIGFsdG1hcF9hbGxvY19ibG9ja19idWYoc2l6ZSwgYWx0bWFwKTsNCisJcmV0dXJuIF9fdm1lbW1hcF9hbGxvY19ibG9ja19idWYoc2l6ZSwgbm9kZSk7DQorfQ0KKw0KIHZvaWQgX19tZW1pbml0IHZtZW1tYXBfdmVyaWZ5KHB0ZV90ICpwdGUsIGludCBub2RlLA0KIAkJCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkNCiB7DQpAQCAtMTAzLDcgKzEzNiw3IEBAIHB0ZV90ICogX19tZW1pbml0IHZtZW1tYXBfcHRlX3BvcHVsYXRlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUpDQogCXB0ZV90ICpwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHIpOw0KIAlpZiAocHRlX25vbmUoKnB0ZSkpIHsNCiAJCXB0ZV90IGVudHJ5Ow0KLQkJdm9pZCAqcCA9IHZtZW1tYXBfYWxsb2NfYmxvY2tfYnVmKFBBR0VfU0laRSwgbm9kZSk7DQorCQl2b2lkICpwID0gX192bWVtbWFwX2FsbG9jX2Jsb2NrX2J1ZihQQUdFX1NJWkUsIG5vZGUpOw0KIAkJaWYgKCFwKQ0KIAkJCXJldHVybiBOVUxMOw0KIAkJZW50cnkgPSBwZm5fcHRlKF9fcGEocCkgPj4gUEFHRV9TSElGVCwgUEFHRV9LRVJORUwpOw0KZGlmZiAtLWdpdCBhL21tL3NwYXJzZS5jIGIvbW0vc3BhcnNlLmMNCmluZGV4IGQxYjQ4YjY5MWFjOC4uMzcxN2NlZWQ0MTc3IDEwMDY0NA0KLS0tIGEvbW0vc3BhcnNlLmMNCisrKyBiL21tL3NwYXJzZS5jDQpAQCAtNzQ4LDcgKzc0OCw3IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2h3cG9pc29uZWRfcGFnZXMoc3RydWN0IHBhZ2UgKm1lbW1hcCwgaW50IG5yX3BhZ2VzKQ0KIAlpZiAoIW1lbW1hcCkNCiAJCXJldHVybjsNCiANCi0JZm9yIChpID0gMDsgaSA8IFBBR0VTX1BFUl9TRUNUSU9OOyBpKyspIHsNCisJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsNCiAJCWlmIChQYWdlSFdQb2lzb24oJm1lbW1hcFtpXSkpIHsNCiAJCQlhdG9taWNfbG9uZ19zdWIoMSwgJm51bV9wb2lzb25lZF9wYWdlcyk7DQogCQkJQ2xlYXJQYWdlSFdQb2lzb24oJm1lbW1hcFtpXSk7DQpAQCAtNzg4LDcgKzc4OCw4IEBAIHN0YXRpYyB2b2lkIGZyZWVfc2VjdGlvbl91c2VtYXAoc3RydWN0IHBhZ2UgKm1lbW1hcCwgdW5zaWduZWQgbG9uZyAqdXNlbWFwKQ0KIAkJZnJlZV9tYXBfYm9vdG1lbShtZW1tYXApOw0KIH0NCiANCi12b2lkIHNwYXJzZV9yZW1vdmVfb25lX3NlY3Rpb24oc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBtZW1fc2VjdGlvbiAqbXMpDQordm9pZCBzcGFyc2VfcmVtb3ZlX29uZV9zZWN0aW9uKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgbWVtX3NlY3Rpb24gKm1zLA0KKwkJdW5zaWduZWQgbG9uZyBtYXBfb2Zmc2V0KQ0KIHsNCiAJc3RydWN0IHBhZ2UgKm1lbW1hcCA9IE5VTEw7DQogCXVuc2lnbmVkIGxvbmcgKnVzZW1hcCA9IE5VTEwsIGZsYWdzOw0KQEAgLTgwNCw3ICs4MDUsOCBAQCB2b2lkIHNwYXJzZV9yZW1vdmVfb25lX3NlY3Rpb24oc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBtZW1fc2VjdGlvbiAqbXMpDQogCX0NCiAJcGdkYXRfcmVzaXplX3VubG9jayhwZ2RhdCwgJmZsYWdzKTsNCiANCi0JY2xlYXJfaHdwb2lzb25lZF9wYWdlcyhtZW1tYXAsIFBBR0VTX1BFUl9TRUNUSU9OKTsNCisJY2xlYXJfaHdwb2lzb25lZF9wYWdlcyhtZW1tYXAgKyBtYXBfb2Zmc2V0LA0KKwkJCVBBR0VTX1BFUl9TRUNUSU9OIC0gbWFwX29mZnNldCk7DQogCWZyZWVfc2VjdGlvbl91c2VtYXAobWVtbWFwLCB1c2VtYXApOw0KIH0NCiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi8NCg0K--To unsubscribe, send a message with 'unsubscribe linux-mm' inthe body to majordomo@kvack.org. For more info on Linux MM,see: http://www.linux-mm.org/ .Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>