RE: [RFC PATCH V3 3/5] powerpc/cpuidle: Generic powerpc backend cpuidle driver.
From: Wang Dongsheng-B40534 <hidden>
Date: 2013-08-19 05:53:28
SSB0aGluayB3ZSBzaG91bGQgbW92ZSB0aGUgc3RhdGVzIGFuZCBoYW5kbGUgZnVuY3Rpb24gdG8g YXJjaC9wb3dlci9wbGF0Zm9ybSoNClRoZSBzdGF0ZXMgYW5kIGhhbmRsZSBmdW5jdGlvbiBpcyBi ZWxvbmcgdG8gYmFja2VuZCBkcml2ZXIsIG5vdCBmb3IgdGhpcywgZGlmZmVyZW50IHBsYXRmb3Jt IGhhdmUgZGlmZmVyZW50IHN0YXRlLg0KRGlmZmVyZW50IHBsYXRmb3JtcyB0byBtYWtlIHRoZWly IG93biBkZWFsIHdpdGggdGhlc2Ugc3RhdGVzLg0KDQpJIHRoaW5rIHdlIGNhbm5vdCBwdXQgYWxs IHRoZSBzdGF0dXMgb2YgZGlmZmVyZW50IHBsYXRmb3JtcyBhbmQgaGFuZGxlciBpbiB0aGlzIGRy aXZlci4NCg0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL0tjb25maWcgYi9kcml2ZXJz L2NwdWlkbGUvS2NvbmZpZw0KPiBpbmRleCAwZTJjZDVjLi45OWVlNWQ0IDEwMDY0NA0KPiAtLS0g YS9kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZw0KPiArKysgYi9kcml2ZXJzL2NwdWlkbGUvS2NvbmZp Zw0KPiBAQCAtNDIsNiArNDIsMTMgQEAgY29uZmlnIENQVV9JRExFX1pZTlENCj4gIAloZWxwDQo+ ICAJICBTZWxlY3QgdGhpcyB0byBlbmFibGUgY3B1aWRsZSBvbiBYaWxpbnggWnlucSBwcm9jZXNz b3JzLg0KPiANCj4gK2NvbmZpZyBDUFVfSURMRV9QT1dFUlBDDQo+ICsJYm9vbCAiQ1BVIElkbGUg ZHJpdmVyIGZvciBQT1dFUlBDIHBsYXRmb3JtcyINCj4gKwlkZXBlbmRzIG9uIFBQQzY0DQoNCldo eSBub3QgUFBDPw0KDQoNCj4gKwlkZWZhdWx0IHkNCj4gKyAgICAgICAgaGVscA0KPiArICAgICAg ICAgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBlbmFibGUgcHJvY2Vzc29yIGlkbGUgc3RhdGUgbWFu YWdlbWVudA0KPiArCSAgZm9yIFBPV0VSUEMgcGxhdGZvcm0uDQo+ICBlbmRpZg0KPiANCj4gIGNv bmZpZyBBUkNIX05FRURTX0NQVV9JRExFX0NPVVBMRUQNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Y3B1aWRsZS9NYWtlZmlsZSBiL2RyaXZlcnMvY3B1aWRsZS9NYWtlZmlsZQ0KPiBpbmRleCA4NzY3 YTdiLi5kMTJlMjA1IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2NwdWlkbGUvTWFrZWZpbGUNCj4g KysrIGIvZHJpdmVycy9jcHVpZGxlL01ha2VmaWxlDQo+IEBAIC04LDMgKzgsNSBAQCBvYmotJChD T05GSUdfQVJDSF9ORUVEU19DUFVfSURMRV9DT1VQTEVEKSArPSBjb3VwbGVkLm8NCj4gIG9iai0k KENPTkZJR19DUFVfSURMRV9DQUxYRURBKSArPSBjcHVpZGxlLWNhbHhlZGEubw0KPiAgb2JqLSQo Q09ORklHX0FSQ0hfS0lSS1dPT0QpICs9IGNwdWlkbGUta2lya3dvb2Qubw0KPiAgb2JqLSQoQ09O RklHX0NQVV9JRExFX1pZTlEpICs9IGNwdWlkbGUtenlucS5vDQo+ICsNCj4gK29iai0kKENPTkZJ R19DUFVfSURMRV9QT1dFUlBDKSArPSBjcHVpZGxlLXBvd2VycGMubw0KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtcG93ZXJwYy5jIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlk bGUtDQo+IHBvd2VycGMuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAw Li41NzU2MDg1DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlk bGUtcG93ZXJwYy5jDQo+IEBAIC0wLDAgKzEsMzYxIEBADQo+ICsvKg0KPiArICogIHByb2Nlc3Nv cl9pZGxlIC0gaWRsZSBzdGF0ZSBjcHVpZGxlIGRyaXZlci4NCj4gKyAqICBBZGFwdGVkIGZyb20g ZHJpdmVycy9pZGxlL2ludGVsX2lkbGUuYyBhbmQNCj4gKyAqICBkcml2ZXJzL2FjcGkvcHJvY2Vz c29yX2lkbGUuYw0KPiArICoNCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgva2VybmVs Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvaW5p dC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvY3B1aWRsZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2NwdS5oPg0KPiArI2luY2x1ZGUgPGxp bnV4L25vdGlmaWVyLmg+DQo+ICsNCj4gKyNpbmNsdWRlIDxhc20vcGFjYS5oPg0KPiArI2luY2x1 ZGUgPGFzbS9yZWcuaD4NCj4gKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPg0KPiArI2luY2x1ZGUg PGFzbS9maXJtd2FyZS5oPg0KPiArI2luY2x1ZGUgPGFzbS9ydW5sYXRjaC5oPg0KPiArI2luY2x1 ZGUgPGFzbS9wbHBhcl93cmFwcGVycy5oPg0KPiArDQo+ICtzdHJ1Y3QgY3B1aWRsZV9kcml2ZXIg cG93ZXJwY19pZGxlX2RyaXZlciA9IHsNCj4gKwkubmFtZSAgICAgICAgICAgICA9ICJwb3dlcnBj X2lkbGUiLA0KPiArCS5vd25lciAgICAgICAgICAgID0gVEhJU19NT0RVTEUsDQo+ICt9Ow0KPiAr DQo+ICsjZGVmaW5lIE1BWF9JRExFX1NUQVRFX0NPVU5UCTINCj4gKw0KPiArc3RhdGljIGludCBt YXhfaWRsZV9zdGF0ZSA9IE1BWF9JRExFX1NUQVRFX0NPVU5UIC0gMTsNCklmIHRoaXMgaXMgYSBn ZW5lcmljIGRyaXZlciwgZG8gbm90IGRlZmluZSBNQVhfSURMRV9TVEFURV9DT1VOVCwgYmVjYXVz ZSB3ZSBkb24ndCBrbm93IGhvdyBtYW55IHN0YXRlIG9uIG90aGVyIHBsYXRmb3Jtcy4NCg0KSG93 IGFib3V0IHVzaW5nIEFSUkFZX1NJWkUgdG8gZ2V0IHRoZSBtYXggaWRsZSBzdGF0ZT8NCg0KPiAr c3RhdGljIHN0cnVjdCBjcHVpZGxlX2RldmljZSBfX3BlcmNwdSAqcG93ZXJwY19jcHVpZGxlX2Rl dmljZXM7DQo+ICtzdGF0aWMgc3RydWN0IGNwdWlkbGVfc3RhdGUgKmNwdWlkbGVfc3RhdGVfdGFi bGU7DQo+ICsNClNob3VsZCBiZSByZW1vdmUgYWxsIGFib3V0ICpkZXZpY2UqLg0KSWYgdGhlIG5v dGlmaWVyIGhhbmRsZSB1c2luZyBkZXZpY2UsIHlvdSBjYW4gdXNlICJjcHVpZGxlX2RldmljZXMi KGluY2x1ZGUvbGludXgvY3B1aWRsZS5oKS4NCg0KPiArc3RhdGljIGlubGluZSB2b2lkIGlkbGVf bG9vcF9wcm9sb2codW5zaWduZWQgbG9uZyAqaW5fcHVycikNCj4gK3sNCj4gKwkqaW5fcHVyciA9 IG1mc3ByKFNQUk5fUFVSUik7DQo+ICsJLyoNCj4gKwkgKiBJbmRpY2F0ZSB0byB0aGUgSFYgdGhh dCB3ZSBhcmUgaWRsZS4gTm93IHdvdWxkIGJlDQo+ICsJICogYSBnb29kIHRpbWUgdG8gZmluZCBv dGhlciB3b3JrIHRvIGRpc3BhdGNoLg0KPiArCSAqLw0KPiArCXNldF9scHBhY2FfaWRsZSgxKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIGlkbGVfbG9vcF9lcGlsb2codW5zaWdu ZWQgbG9uZyBpbl9wdXJyKQ0KPiArew0KPiArCWFkZF9scHBhY2Ffd2FpdF9zdGF0ZShtZnNwcihT UFJOX1BVUlIpIC0gaW5fcHVycik7DQo+ICsJc2V0X2xwcGFjYV9pZGxlKDApOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgaW50IHNub296ZV9sb29wKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2LA0K PiArCQkJc3RydWN0IGNwdWlkbGVfZHJpdmVyICpkcnYsDQo+ICsJCQlpbnQgaW5kZXgpDQo+ICt7 DQo+ICsJdW5zaWduZWQgbG9uZyBpbl9wdXJyOw0KPiArDQo+ICsJaWRsZV9sb29wX3Byb2xvZygm aW5fcHVycik7DQo+ICsJbG9jYWxfaXJxX2VuYWJsZSgpOw0KPiArCXNldF90aHJlYWRfZmxhZyhU SUZfUE9MTElOR19OUkZMQUcpOw0KPiArDQo+ICsJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkgew0K PiArCQlwcGM2NF9ydW5sYXRjaF9vZmYoKTsNCj4gKwkJSE1UX2xvdygpOw0KPiArCQlITVRfdmVy eV9sb3coKTsNCj4gKwl9DQo+ICsNCj4gKwlITVRfbWVkaXVtKCk7DQo+ICsJY2xlYXJfdGhyZWFk X2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsNCj4gKwlzbXBfbWIoKTsNCj4gKw0KPiArCWlkbGVf bG9vcF9lcGlsb2coaW5fcHVycik7DQo+ICsNCj4gKwlyZXR1cm4gaW5kZXg7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGNoZWNrX2FuZF9jZWRlX3Byb2Nlc3Nvcih2b2lkKQ0KPiArew0KPiAr CS8qDQo+ICsJICogRW5zdXJlIG91ciBpbnRlcnJ1cHQgc3RhdGUgaXMgcHJvcGVybHkgdHJhY2tl ZCwNCj4gKwkgKiBhbHNvIGNoZWNrcyBpZiBubyBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkIHdoaWxl IHdlDQo+ICsJICogd2VyZSBzb2Z0LWRpc2FibGVkDQo+ICsJICovDQo+ICsJaWYgKHByZXBfaXJx X2Zvcl9pZGxlKCkpIHsNCj4gKwkJY2VkZV9wcm9jZXNzb3IoKTsNCj4gKyNpZmRlZiBDT05GSUdf VFJBQ0VfSVJRRkxBR1MNCj4gKwkJLyogRW5zdXJlIHRoYXQgSF9DRURFIHJldHVybnMgd2l0aCBJ UlFzIG9uICovDQo+ICsJCWlmIChXQVJOX09OKCEobWZtc3IoKSAmIE1TUl9FRSkpKQ0KPiArCQkJ X19oYXJkX2lycV9lbmFibGUoKTsNCj4gKyNlbmRpZg0KPiArCX0NCj4gK30NCj4gKw0KPiArc3Rh dGljIGludCBkZWRpY2F0ZWRfY2VkZV9sb29wKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2LA0K PiArCQkJCXN0cnVjdCBjcHVpZGxlX2RyaXZlciAqZHJ2LA0KPiArCQkJCWludCBpbmRleCkNCj4g K3sNCj4gKwl1bnNpZ25lZCBsb25nIGluX3B1cnI7DQo+ICsNCj4gKwlpZGxlX2xvb3BfcHJvbG9n KCZpbl9wdXJyKTsNCj4gKwlzZXRfbHBwYWNhX2RvbmF0ZV9kZWRpY2F0ZWRfY3B1KDEpOw0KPiAr DQo+ICsJcHBjNjRfcnVubGF0Y2hfb2ZmKCk7DQo+ICsJSE1UX21lZGl1bSgpOw0KPiArCWNoZWNr X2FuZF9jZWRlX3Byb2Nlc3NvcigpOw0KPiArDQo+ICsJc2V0X2xwcGFjYV9kb25hdGVfZGVkaWNh dGVkX2NwdSgwKTsNCj4gKwlpZGxlX2xvb3BfZXBpbG9nKGluX3B1cnIpOw0KPiArDQo+ICsJcmV0 dXJuIGluZGV4Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHNoYXJlZF9jZWRlX2xvb3Aoc3Ry dWN0IGNwdWlkbGVfZGV2aWNlICpkZXYsDQo+ICsJCQlzdHJ1Y3QgY3B1aWRsZV9kcml2ZXIgKmRy diwNCj4gKwkJCWludCBpbmRleCkNCj4gK3sNCj4gKwl1bnNpZ25lZCBsb25nIGluX3B1cnI7DQo+ ICsNCj4gKwlpZGxlX2xvb3BfcHJvbG9nKCZpbl9wdXJyKTsNCj4gKw0KPiArCS8qDQo+ICsJICog WWllbGQgdGhlIHByb2Nlc3NvciB0byB0aGUgaHlwZXJ2aXNvci4gIFdlIHJldHVybiBpZg0KPiAr CSAqIGFuIGV4dGVybmFsIGludGVycnVwdCBvY2N1cnMgKHdoaWNoIGFyZSBkcml2ZW4gcHJpb3IN Cj4gKwkgKiB0byByZXR1cm5pbmcgaGVyZSkgb3IgaWYgYSBwcm9kIG9jY3VycyBmcm9tIGFub3Ro ZXINCj4gKwkgKiBwcm9jZXNzb3IuIFdoZW4gcmV0dXJuaW5nIGhlcmUsIGV4dGVybmFsIGludGVy cnVwdHMNCj4gKwkgKiBhcmUgZW5hYmxlZC4NCj4gKwkgKi8NCj4gKwljaGVja19hbmRfY2VkZV9w cm9jZXNzb3IoKTsNCj4gKw0KPiArCWlkbGVfbG9vcF9lcGlsb2coaW5fcHVycik7DQo+ICsNCj4g KwlyZXR1cm4gaW5kZXg7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBTdGF0ZXMgZm9yIGRlZGlj YXRlZCBwYXJ0aXRpb24gY2FzZS4NCj4gKyAqLw0KPiArc3RhdGljIHN0cnVjdCBjcHVpZGxlX3N0 YXRlIGRlZGljYXRlZF9zdGF0ZXNbTUFYX0lETEVfU1RBVEVfQ09VTlRdID0gew0KPiArCXsgLyog U25vb3plICovDQo+ICsJCS5uYW1lID0gInNub296ZSIsDQo+ICsJCS5kZXNjID0gInNub296ZSIs DQo+ICsJCS5mbGFncyA9IENQVUlETEVfRkxBR19USU1FX1ZBTElELA0KPiArCQkuZXhpdF9sYXRl bmN5ID0gMCwNCj4gKwkJLnRhcmdldF9yZXNpZGVuY3kgPSAwLA0KPiArCQkuZW50ZXIgPSAmc25v b3plX2xvb3AgfSwNCj4gKwl7IC8qIENFREUgKi8NCj4gKwkJLm5hbWUgPSAiQ0VERSIsDQo+ICsJ CS5kZXNjID0gIkNFREUiLA0KPiArCQkuZmxhZ3MgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCwN Cj4gKwkJLmV4aXRfbGF0ZW5jeSA9IDEwLA0KPiArCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDEwMCwN Cj4gKwkJLmVudGVyID0gJmRlZGljYXRlZF9jZWRlX2xvb3AgfSwNCj4gK307DQo+ICsNCj4gKy8q DQo+ICsgKiBTdGF0ZXMgZm9yIHNoYXJlZCBwYXJ0aXRpb24gY2FzZS4NCj4gKyAqLw0KPiArc3Rh dGljIHN0cnVjdCBjcHVpZGxlX3N0YXRlIHNoYXJlZF9zdGF0ZXNbTUFYX0lETEVfU1RBVEVfQ09V TlRdID0gew0KPiArCXsgLyogU2hhcmVkIENlZGUgKi8NCj4gKwkJLm5hbWUgPSAiU2hhcmVkIENl ZGUiLA0KPiArCQkuZGVzYyA9ICJTaGFyZWQgQ2VkZSIsDQo+ICsJCS5mbGFncyA9IENQVUlETEVf RkxBR19USU1FX1ZBTElELA0KPiArCQkuZXhpdF9sYXRlbmN5ID0gMCwNCj4gKwkJLnRhcmdldF9y ZXNpZGVuY3kgPSAwLA0KPiArCQkuZW50ZXIgPSAmc2hhcmVkX2NlZGVfbG9vcCB9LA0KPiArfTsN Cj4gKw0KPiArdm9pZCB1cGRhdGVfc210X3Nub296ZV9kZWxheShpbnQgY3B1LCBpbnQgcmVzaWRl bmN5KQ0KPiArew0KPiArCXN0cnVjdCBjcHVpZGxlX2RyaXZlciAqZHJ2ID0gY3B1aWRsZV9nZXRf ZHJpdmVyKCk7DQo+ICsJc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYgPSBwZXJfY3B1KGNwdWlk bGVfZGV2aWNlcywgY3B1KTsNCj4gKw0KPiArCWlmIChjcHVpZGxlX3N0YXRlX3RhYmxlICE9IGRl ZGljYXRlZF9zdGF0ZXMpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCWlmIChyZXNpZGVuY3kgPCAw KSB7DQo+ICsJCS8qIERpc2FibGUgdGhlIE5hcCBzdGF0ZSBvbiB0aGF0IGNwdSAqLw0KPiArCQlp ZiAoZGV2KQ0KPiArCQkJZGV2LT5zdGF0ZXNfdXNhZ2VbMV0uZGlzYWJsZSA9IDE7DQo+ICsJfSBl bHNlDQo+ICsJCWlmIChkcnYpDQo+ICsJCQlkcnYtPnN0YXRlc1sxXS50YXJnZXRfcmVzaWRlbmN5 ID0gcmVzaWRlbmN5Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHBvd2VycGNfY3B1aWRsZV9h ZGRfY3B1X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbiwNCj4gKwkJCXVuc2lnbmVk IGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQ0KPiArew0KPiArCWludCBob3RjcHUgPSAodW5zaWdu ZWQgbG9uZyloY3B1Ow0KPiArCXN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2ID0NCj4gKwkJCXBl cl9jcHVfcHRyKHBvd2VycGNfY3B1aWRsZV9kZXZpY2VzLCBob3RjcHUpOw0KPiArDQo+ICsJaWYg KGRldiAmJiBjcHVpZGxlX2dldF9kcml2ZXIoKSkgew0KPiArCQlzd2l0Y2ggKGFjdGlvbikgew0K PiArCQljYXNlIENQVV9PTkxJTkU6DQo+ICsJCWNhc2UgQ1BVX09OTElORV9GUk9aRU46DQo+ICsJ CQljcHVpZGxlX3BhdXNlX2FuZF9sb2NrKCk7DQo+ICsJCQljcHVpZGxlX2VuYWJsZV9kZXZpY2Uo ZGV2KTsNCj4gKwkJCWNwdWlkbGVfcmVzdW1lX2FuZF91bmxvY2soKTsNCj4gKwkJCWJyZWFrOw0K PiArDQo+ICsJCWNhc2UgQ1BVX0RFQUQ6DQo+ICsJCWNhc2UgQ1BVX0RFQURfRlJPWkVOOg0KPiAr CQkJY3B1aWRsZV9wYXVzZV9hbmRfbG9jaygpOw0KPiArCQkJY3B1aWRsZV9kaXNhYmxlX2Rldmlj ZShkZXYpOw0KPiArCQkJY3B1aWRsZV9yZXN1bWVfYW5kX3VubG9jaygpOw0KPiArCQkJYnJlYWs7 DQo+ICsNCj4gKwkJZGVmYXVsdDoNCj4gKwkJCXJldHVybiBOT1RJRllfRE9ORTsNCj4gKwkJfQ0K PiArCX0NCj4gKwlyZXR1cm4gTk9USUZZX09LOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0 IG5vdGlmaWVyX2Jsb2NrIHNldHVwX2hvdHBsdWdfbm90aWZpZXIgPSB7DQo+ICsJLm5vdGlmaWVy X2NhbGwgPSBwb3dlcnBjX2NwdWlkbGVfYWRkX2NwdV9ub3RpZmllciwNCj4gK307DQo+ICsNCldl IHNob3VsZCBkaXNjdXNzIHRoaXMgd2l0aCBEYW5pZWwuDQoNCj4gKy8qDQo+ICsgKiBwb3dlcnBj X2NwdWlkbGVfZHJpdmVyX2luaXQoKQ0KPiArICovDQo+ICtzdGF0aWMgaW50IHBvd2VycGNfY3B1 aWRsZV9kcml2ZXJfaW5pdCh2b2lkKQ0KPiArew0KPiArCWludCBpZGxlX3N0YXRlOw0KPiArCXN0 cnVjdCBjcHVpZGxlX2RyaXZlciAqZHJ2ID0gJnBvd2VycGNfaWRsZV9kcml2ZXI7DQo+ICsNCj4g KwlkcnYtPnN0YXRlX2NvdW50ID0gMDsNCj4gKw0KPiArCWZvciAoaWRsZV9zdGF0ZSA9IDA7IGlk bGVfc3RhdGUgPCBNQVhfSURMRV9TVEFURV9DT1VOVDsNCj4gKytpZGxlX3N0YXRlKSB7DQo+ICsN Cj4gKwkJaWYgKGlkbGVfc3RhdGUgPiBtYXhfaWRsZV9zdGF0ZSkNCj4gKwkJCWJyZWFrOw0KPiAr DQo+ICsJCS8qIGlzIHRoZSBzdGF0ZSBub3QgZW5hYmxlZD8gKi8NCj4gKwkJaWYgKGNwdWlkbGVf c3RhdGVfdGFibGVbaWRsZV9zdGF0ZV0uZW50ZXIgPT0gTlVMTCkNCj4gKwkJCWNvbnRpbnVlOw0K PiArDQpEaWQgdGhlIHN0YXRlIGhhdmUgZGVwZW5kZW50Pw0KSWYgeWVzLCBtYXkgYmUgc2hvdWxk IGJyZWFrIG91dCB0aGUgbG9vcCwgbm90IGNvbnRpbnVlLg0KDQo+ICsJCWRydi0+c3RhdGVzW2Ry di0+c3RhdGVfY291bnRdID0JLyogc3RydWN0dXJlIGNvcHkgKi8NCj4gKwkJCWNwdWlkbGVfc3Rh dGVfdGFibGVbaWRsZV9zdGF0ZV07DQo+ICsNCj4gKwkJZHJ2LT5zdGF0ZV9jb3VudCArPSAxOw0K PiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKiBwb3dlcnBjX2lkbGVf ZGV2aWNlc191bmluaXQodm9pZCkNCj4gKyAqIHVucmVnaXN0ZXIgY3B1aWRsZSBkZXZpY2VzIGFu ZCBkZS1hbGxvY2F0ZSBtZW1vcnkNCj4gKyAqLw0KPiArc3RhdGljIHZvaWQgcG93ZXJwY19pZGxl X2RldmljZXNfdW5pbml0KHZvaWQpDQo+ICt7DQo+ICsJaW50IGk7DQo+ICsJc3RydWN0IGNwdWlk bGVfZGV2aWNlICpkZXY7DQo+ICsNCj4gKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgew0KPiAr CQlkZXYgPSBwZXJfY3B1X3B0cihwb3dlcnBjX2NwdWlkbGVfZGV2aWNlcywgaSk7DQo+ICsJCWNw dWlkbGVfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2KTsNCj4gKwl9DQo+ICsNCj4gKwlmcmVlX3BlcmNw dShwb3dlcnBjX2NwdWlkbGVfZGV2aWNlcyk7DQo+ICsJcmV0dXJuOw0KPiArfQ0KPiArDQo+ICsv KiBwb3dlcnBjX2lkbGVfZGV2aWNlc19pbml0KCkNCj4gKyAqIGFsbG9jYXRlLCBpbml0aWFsaXpl IGFuZCByZWdpc3RlciBjcHVpZGxlIGRldmljZQ0KPiArICovDQo+ICtzdGF0aWMgaW50IHBvd2Vy cGNfaWRsZV9kZXZpY2VzX2luaXQodm9pZCkNCj4gK3sNCj4gKwlpbnQgaTsNCj4gKwlzdHJ1Y3Qg Y3B1aWRsZV9kcml2ZXIgKmRydiA9ICZwb3dlcnBjX2lkbGVfZHJpdmVyOw0KPiArCXN0cnVjdCBj cHVpZGxlX2RldmljZSAqZGV2Ow0KPiArDQo+ICsJcG93ZXJwY19jcHVpZGxlX2RldmljZXMgPSBh bGxvY19wZXJjcHUoc3RydWN0IGNwdWlkbGVfZGV2aWNlKTsNCj4gKwlpZiAocG93ZXJwY19jcHVp ZGxlX2RldmljZXMgPT0gTlVMTCkNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwlmb3Jf ZWFjaF9wb3NzaWJsZV9jcHUoaSkgew0KPiArCQlkZXYgPSBwZXJfY3B1X3B0cihwb3dlcnBjX2Nw dWlkbGVfZGV2aWNlcywgaSk7DQo+ICsJCWRldi0+c3RhdGVfY291bnQgPSBkcnYtPnN0YXRlX2Nv dW50Ow0KPiArCQlkZXYtPmNwdSA9IGk7DQo+ICsJCWlmIChjcHVpZGxlX3JlZ2lzdGVyX2Rldmlj ZShkZXYpKSB7DQoNClBsZWFzZSB1c2UgY3B1aWRsZV9yZWdpc3RlcigpLg0KDQo+ICsJCQlwcmlu dGsoS0VSTl9ERUJVRyBcDQo+ICsJCQkJImNwdWlkbGVfcmVnaXN0ZXJfZGV2aWNlICVkIGZhaWxl ZCFcbiIsIGkpOw0KPiArCQkJcmV0dXJuIC1FSU87DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwly ZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIHBvd2VycGNfaWRsZV9wcm9iZSgpDQo+ ICsgKiBDaG9vc2Ugc3RhdGUgdGFibGUgZm9yIHNoYXJlZCB2ZXJzdXMgZGVkaWNhdGVkIHBhcnRp dGlvbg0KPiArICovDQo+ICtzdGF0aWMgaW50IHBvd2VycGNfaWRsZV9wcm9iZSh2b2lkKQ0KPiAr ew0KPiArDQo+ICsJaWYgKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX1NQTFBBUikp DQo+ICsJCXJldHVybiAtRU5PREVWOw0KPiArDQo+ICsJaWYgKGNwdWlkbGVfZGlzYWJsZSAhPSBJ RExFX05PX09WRVJSSURFKQ0KPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gKw0KPiArCWlmIChtYXhf aWRsZV9zdGF0ZSA9PSAwKSB7DQo+ICsJCXByaW50ayhLRVJOX0RFQlVHICJwb3dlcnBjIHByb2Nl c3NvciBpZGxlIGRpc2FibGVkLlxuIik7DQo+ICsJCXJldHVybiAtRVBFUk07DQo+ICsJfQ0KPiAr DQo+ICsJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfU1BMUEFSKSkgew0KPiAr CQlpZiAoZ2V0X2xwcGFjYV9pc19zaGFyZWRfcHJvYygpID09IDEpDQo+ICsJCQljcHVpZGxlX3N0 YXRlX3RhYmxlID0gc2hhcmVkX3N0YXRlczsNCj4gKwkJZWxzZSBpZiAoZ2V0X2xwcGFjYV9pc19z aGFyZWRfcHJvYygpID09IDApDQo+ICsJCQljcHVpZGxlX3N0YXRlX3RhYmxlID0gZGVkaWNhdGVk X3N0YXRlczsNCj4gKwl9IGVsc2UNCj4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+ICsNCj4gKwlyZXR1 cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBfX2luaXQgcG93ZXJwY19wcm9jZXNzb3Jf aWRsZV9pbml0KHZvaWQpDQo+ICt7DQo+ICsJaW50IHJldHZhbDsNCj4gKw0KPiArCXJldHZhbCA9 IHBvd2VycGNfaWRsZV9wcm9iZSgpOw0KPiArCWlmIChyZXR2YWwpDQo+ICsJCXJldHVybiByZXR2 YWw7DQo+ICsNCj4gKwlwb3dlcnBjX2NwdWlkbGVfZHJpdmVyX2luaXQoKTsNCj4gKwlyZXR2YWwg PSBjcHVpZGxlX3JlZ2lzdGVyX2RyaXZlcigmcG93ZXJwY19pZGxlX2RyaXZlcik7DQo+ICsJaWYg KHJldHZhbCkgew0KPiArCQlwcmludGsoS0VSTl9ERUJVRyAiUmVnaXN0cmF0aW9uIG9mIHBvd2Vy cGMgZHJpdmVyIGZhaWxlZC5cbiIpOw0KPiArCQlyZXR1cm4gcmV0dmFsOw0KPiArCX0NCj4gKw0K PiArCXJldHZhbCA9IHBvd2VycGNfaWRsZV9kZXZpY2VzX2luaXQoKTsNCj4gKwlpZiAocmV0dmFs KSB7DQo+ICsJCXBvd2VycGNfaWRsZV9kZXZpY2VzX3VuaW5pdCgpOw0KPiArCQljcHVpZGxlX3Vu cmVnaXN0ZXJfZHJpdmVyKCZwb3dlcnBjX2lkbGVfZHJpdmVyKTsNCj4gKwkJcmV0dXJuIHJldHZh bDsNCj4gKwl9DQo+ICsNCj4gKwlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJnNldHVwX2hvdHBsdWdf bm90aWZpZXIpOw0KPiArCXByaW50ayhLRVJOX0RFQlVHICJwb3dlcnBjX2lkbGVfZHJpdmVyIHJl Z2lzdGVyZWRcbiIpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIF9fZXhpdCBwb3dlcnBjX3Byb2Nlc3Nvcl9pZGxlX2V4aXQodm9pZCkNCj4gK3sNCj4gKw0K PiArCXVucmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZzZXR1cF9ob3RwbHVnX25vdGlmaWVyKTsNCj4g Kwlwb3dlcnBjX2lkbGVfZGV2aWNlc191bmluaXQoKTsNCj4gKwljcHVpZGxlX3VucmVnaXN0ZXJf ZHJpdmVyKCZwb3dlcnBjX2lkbGVfZHJpdmVyKTsNCj4gKw0KPiArCXJldHVybjsNCj4gK30NCj4g Kw0KRGlkIHlvdSB0ZXN0IG1vZHVsZSBtb2RlPyAqUmVtb3ZlKiB0aGUgbW9kdWxlIGNhbm5vdCB3 b3JrLg0KPiANCg0K