[PATCH] 2.5.24: generic ATA PCI auto-dma tuning (2/5)

Bartlomiej Zolnierkiewicz (B.Zolnierkiewicz@elka.pw.edu.pl)
Tue, 25 Jun 2002 21:14:56 +0200 (MET DST)


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-959030623-1025032496=:27820
Content-Type: TEXT/PLAIN; charset=US-ASCII

- add udma_generic_setup() to pcidma.c, which
- equals functionality of driver specific udma_setup()
and config_chipset_for_dma()
- makes use of ch->modes_map, ch->no_atapi_autodma
and ch->speedproc()/tuneproc()
- auto-tunes PIO only if we failed to enable DMA
(PIO auto-tuning is already handled by ch->tuneproc()
call in probe.c, it is controlled separetly of autodma)

- convert aec62xx.c, amd74xx.c, cmd64x.c, hpt34x.c, piix.c,
serverworks.c, sis5513.c and via82cxxx.c to new scheme

- this has nice side effect of teaching aec, amd, piix and via
drivers using DMA blacklist/whitelist

--
Bartlomiej Zolnierkiewicz

---559023410-959030623-1025032496=:27820 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="ata-hosts-8.diff" Content-Transfer-Encoding: BASE64 Content-ID: <Pine.SOL.4.30.0206252114560.27820@mion.elka.pw.edu.pl> Content-Description: Content-Disposition: attachment; filename="ata-hosts-8.diff"

ZGlmZiAtdXIgbGludXgtYXRhLWhvc3RzLTcvaW5jbHVkZS9saW51eC9pZGUu aCBsaW51eC9pbmNsdWRlL2xpbnV4L2lkZS5oDQotLS0gbGludXgtYXRhLWhv c3RzLTcvaW5jbHVkZS9saW51eC9pZGUuaAlNb24gSnVuIDI0IDIyOjI0OjMw IDIwMDINCisrKyBsaW51eC9pbmNsdWRlL2xpbnV4L2lkZS5oCU1vbiBKdW4g MjQgMjI6MzU6MTAgMjAwMg0KQEAgLTgwMSw2ICs4MDEsOCBAQA0KIGV4dGVy biB2b2lkIHVkbWFfcGNpX2lycV9sb3N0KHN0cnVjdCBhdGFfZGV2aWNlICop Ow0KIGV4dGVybiBpbnQgdWRtYV9wY2lfc2V0dXAoc3RydWN0IGF0YV9kZXZp Y2UgKik7DQogDQorZXh0ZXJuIGludCB1ZG1hX2dlbmVyaWNfc2V0dXAoc3Ry dWN0IGF0YV9kZXZpY2UgKik7DQorDQogZXh0ZXJuIGludCB1ZG1hX25ld190 YWJsZShzdHJ1Y3QgYXRhX2RldmljZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsN CiBleHRlcm4gdm9pZCB1ZG1hX2Rlc3Ryb3lfdGFibGUoc3RydWN0IGF0YV9j aGFubmVsICopOw0KIGV4dGVybiB2b2lkIHVkbWFfcHJpbnQoc3RydWN0IGF0 YV9kZXZpY2UgKik7DQpkaWZmIC11ciBsaW51eC1hdGEtaG9zdHMtNy9kcml2 ZXJzL2lkZS9hZWM2Mnh4LmMgbGludXgvZHJpdmVycy9pZGUvYWVjNjJ4eC5j DQotLS0gbGludXgtYXRhLWhvc3RzLTcvZHJpdmVycy9pZGUvYWVjNjJ4eC5j CU1vbiBKdW4gMjQgMjI6MjQ6MzAgMjAwMg0KKysrIGxpbnV4L2RyaXZlcnMv aWRlL2FlYzYyeHguYwlNb24gSnVuIDI0IDIyOjM1OjEwIDIwMDINCkBAIC0x NjAsMTcgKzE2MCw2IEBADQogfQ0KIA0KICNpZmRlZiBDT05GSUdfQkxLX0RF Vl9JREVETUENCi1zdGF0aWMgaW50IGFlYzYyeHhfdWRtYV9zZXR1cChzdHJ1 Y3QgYXRhX2RldmljZSAqZHJpdmUpDQotew0KLQlzaG9ydCBzcGVlZDsNCi0N Ci0Jc3BlZWQgPSBhdGFfdGltaW5nX21vZGUoZHJpdmUsIGRyaXZlLT5jaGFu bmVsLT5tb2Rlc19tYXApOw0KLQlhZWNfc2V0X2RyaXZlKGRyaXZlLCBzcGVl ZCk7DQotCXVkbWFfZW5hYmxlKGRyaXZlLCBkcml2ZS0+Y2hhbm5lbC0+YXV0 b2RtYSAmJiAoc3BlZWQgJiBYRkVSX01PREUpICE9IFhGRVJfUElPLCAwKTsN Ci0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KIHN0YXRpYyBpbnQgX19pbml0IGFl YzYyeHhfbW9kZXNfbWFwKHN0cnVjdCBhdGFfY2hhbm5lbCAqY2gpDQogew0K IAl1MzIgYm1pZGUgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoY2gtPnBjaV9kZXYs IDQpOw0KQEAgLTI3Niw3ICsyNjUsNyBAQA0KIAlpZiAoY2gtPmRtYV9iYXNl KSB7DQogCQljaC0+aGlnaG1lbSA9IDE7DQogCQljaC0+bW9kZXNfbWFwID0g YWVjNjJ4eF9tb2Rlc19tYXAoY2gpOw0KLQkJY2gtPnVkbWFfc2V0dXAgPSBh ZWM2Mnh4X3VkbWFfc2V0dXA7DQorCQljaC0+dWRtYV9zZXR1cCA9IHVkbWFf Z2VuZXJpY19zZXR1cDsNCiAjaWZkZWYgQ09ORklHX0lERURNQV9BVVRPDQog CQlpZiAoIW5vYXV0b2RtYSkNCiAJCQljaC0+YXV0b2RtYSA9IDE7DQpkaWZm IC11ciBsaW51eC1hdGEtaG9zdHMtNy9kcml2ZXJzL2lkZS9hbWQ3NHh4LmMg bGludXgvZHJpdmVycy9pZGUvYW1kNzR4eC5jDQotLS0gbGludXgtYXRhLWhv c3RzLTcvZHJpdmVycy9pZGUvYW1kNzR4eC5jCU1vbiBKdW4gMjQgMjI6MTU6 MTggMjAwMg0KKysrIGxpbnV4L2RyaXZlcnMvaWRlL2FtZDc0eHguYwlNb24g SnVuIDI0IDIyOjM1OjEwIDIwMDINCkBAIC0xNzUsMjEgKzE3NSwxNSBAQA0K IH0NCiANCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BDQotc3RhdGlj IGludCBhbWQ3NHh4X3VkbWFfc2V0dXAoc3RydWN0IGF0YV9kZXZpY2UgKmRy aXZlKQ0KK3N0YXRpYyBpbnQgX19pbml0IGFtZF9tb2Rlc19tYXAoc3RydWN0 IGF0YV9jaGFubmVsICpjaCkNCiB7DQotCXNob3J0IHc4MCA9IGRyaXZlLT5j aGFubmVsLT51ZG1hX2ZvdXI7DQorCXNob3J0IHc4MCA9IGNoLT51ZG1hX2Zv dXI7DQorCWludCBtYXAgPSBYRkVSX0VQSU8gfCBYRkVSX01XRE1BIHwgWEZF Ul9VRE1BIHwNCisJCSAgKChhbWRfY29uZmlnLT5mbGFncyAmIEFNRF9CQURf U1dETUEpID8gMCA6IFhGRVJfU1dETUEpIHwNCisJCSAgKHc4MCAmJiAoYW1k X2NvbmZpZy0+ZmxhZ3MgJiBBTURfVURNQSkgPj0gQU1EX1VETUFfNjYgPyBY RkVSX1VETUFfNjYgOiAwKSB8DQorCQkgICh3ODAgJiYgKGFtZF9jb25maWct PmZsYWdzICYgQU1EX1VETUEpID49IEFNRF9VRE1BXzEwMCA/IFhGRVJfVURN QV8xMDAgOiAwKTsNCiANCi0Jc2hvcnQgc3BlZWQgPSBhdGFfdGltaW5nX21v ZGUoZHJpdmUsDQotCQkJWEZFUl9QSU8gfCBYRkVSX0VQSU8gfCBYRkVSX01X RE1BIHwgWEZFUl9VRE1BIHwNCi0JCQkoKGFtZF9jb25maWctPmZsYWdzICYg QU1EX0JBRF9TV0RNQSkgPyAwIDogWEZFUl9TV0RNQSkgfA0KLQkJCSh3ODAg JiYgKGFtZF9jb25maWctPmZsYWdzICYgQU1EX1VETUEpID49IEFNRF9VRE1B XzY2ID8gWEZFUl9VRE1BXzY2IDogMCkgfA0KLQkJCSh3ODAgJiYgKGFtZF9j b25maWctPmZsYWdzICYgQU1EX1VETUEpID49IEFNRF9VRE1BXzEwMCA/IFhG RVJfVURNQV8xMDAgOiAwKSk7DQotDQotCWFtZF9zZXRfZHJpdmUoZHJpdmUs IHNwZWVkKTsNCi0NCi0JdWRtYV9lbmFibGUoZHJpdmUsIGRyaXZlLT5jaGFu bmVsLT5hdXRvZG1hICYmIChzcGVlZCAmIFhGRVJfTU9ERSkgIT0gWEZFUl9Q SU8sIDApOw0KLQ0KLQlyZXR1cm4gMDsNCisJcmV0dXJuIG1hcDsNCiB9DQog I2VuZGlmDQogDQpAQCAtMjg5LDcgKzI4Myw4IEBADQogI2lmZGVmIENPTkZJ R19CTEtfREVWX0lERURNQQ0KIAlpZiAoaHdpZi0+ZG1hX2Jhc2UpIHsNCiAJ CWh3aWYtPmhpZ2htZW0gPSAxOw0KLQkJaHdpZi0+dWRtYV9zZXR1cCA9IGFt ZDc0eHhfdWRtYV9zZXR1cDsNCisJCWh3aWYtPm1vZGVzX21hcCA9IGFtZF9t b2Rlc19tYXAoaHdpZik7DQorCQlod2lmLT51ZG1hX3NldHVwID0gdWRtYV9n ZW5lcmljX3NldHVwOw0KICMgaWZkZWYgQ09ORklHX0lERURNQV9BVVRPDQog CQlpZiAoIW5vYXV0b2RtYSkNCiAJCQlod2lmLT5hdXRvZG1hID0gMTsNCmRp ZmYgLXVyIGxpbnV4LWF0YS1ob3N0cy03L2RyaXZlcnMvaWRlL2NtZDY0eC5j IGxpbnV4L2RyaXZlcnMvaWRlL2NtZDY0eC5jDQotLS0gbGludXgtYXRhLWhv c3RzLTcvZHJpdmVycy9pZGUvY21kNjR4LmMJTW9uIEp1biAyNCAyMjoyNToz MiAyMDAyDQorKysgbGludXgvZHJpdmVycy9pZGUvY21kNjR4LmMJTW9uIEp1 biAyNCAyMjozNjoxMyAyMDAyDQpAQCAtNTA5LDgzICs1MDksNiBAQA0KIH0N CiANCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BDQotc3RhdGljIGlu dCBjb25maWdfY2hpcHNldF9mb3JfZG1hKHN0cnVjdCBhdGFfZGV2aWNlICpk cml2ZSwgdTggdWRtYSkNCi17DQotCWludCBtYXA7DQotCXU4IG1vZGU7DQot DQotCW1hcCA9IGRyaXZlLT5jaGFubmVsLT5tb2Rlc19tYXA7DQotDQotCWlm ICghZWlnaHR5X25pbnR5X3RocmVlKGRyaXZlKSkNCi0JCW1hcCAmPSB+WEZF Ul9VRE1BXzgwVzsNCi0NCi0JaWYgKCF1ZG1hKQ0KLQkJbWFwICY9IH5YRkVS X1VETUFfQUxMOw0KLQ0KLQltb2RlID0gYXRhX3RpbWluZ19tb2RlKGRyaXZl LCBtYXApOw0KLQ0KLQlyZXR1cm4gIWRyaXZlLT5jaGFubmVsLT5zcGVlZHBy b2MoZHJpdmUsIG1vZGUpOw0KLX0NCi0NCi1zdGF0aWMgaW50IGNtZDZ4eF91 ZG1hX3NldHVwKHN0cnVjdCBhdGFfZGV2aWNlICpkcml2ZSkNCi17DQotCXN0 cnVjdCBoZF9kcml2ZWlkICppZAk9IGRyaXZlLT5pZDsNCi0Jc3RydWN0IGF0 YV9jaGFubmVsICpod2lmID0gZHJpdmUtPmNoYW5uZWw7DQotCWludCBvbiA9 IDE7DQotCWludCB2ZXJib3NlID0gMTsNCi0NCi0JaHdpZi0+dHVuZXByb2Mo ZHJpdmUsIDI1NSk7DQotDQotCWlmICgoaWQgIT0gTlVMTCkgJiYgKChpZC0+ Y2FwYWJpbGl0eSAmIDEpICE9IDApICYmDQotCSAgICBod2lmLT5hdXRvZG1h ICYmIChkcml2ZS0+dHlwZSA9PSBBVEFfRElTSykpIHsNCi0JCS8qIENvbnN1 bHQgdGhlIGxpc3Qgb2Yga25vd24gImJhZCIgZHJpdmVzICovDQotCQlpZiAo dWRtYV9ibGFja19saXN0KGRyaXZlKSkgew0KLQkJCW9uID0gMDsNCi0JCQln b3RvIGZhc3RfYXRhX3BpbzsNCi0JCX0NCi0JCW9uID0gMDsNCi0JCXZlcmJv c2UgPSAwOw0KLQkJaWYgKChpZC0+ZmllbGRfdmFsaWQgJiA0KSkgew0KLQkJ CWlmIChpZC0+ZG1hX3VsdHJhICYgMHgwMDdGKSB7DQotCQkJCS8qIEZvcmNl IGlmIENhcGFibGUgVWx0cmFETUEgKi8NCi0JCQkJb24gPSBjb25maWdfY2hp cHNldF9mb3JfZG1hKGRyaXZlLCAxKTsNCi0JCQkJaWYgKChpZC0+ZmllbGRf dmFsaWQgJiAyKSAmJg0KLQkJCQkgICAgKCFvbikpDQotCQkJCQlnb3RvIHRy eV9kbWFfbW9kZXM7DQotCQkJfQ0KLQkJfSBlbHNlIGlmIChpZC0+ZmllbGRf dmFsaWQgJiAyKSB7DQotdHJ5X2RtYV9tb2RlczoNCi0JCQlpZiAoKGlkLT5k bWFfbXdvcmQgJiAweDAwMDcpIHx8DQotCQkJICAgIChpZC0+ZG1hXzF3b3Jk ICYgMHgwMDA3KSkgew0KLQkJCQkvKiBGb3JjZSBpZiBDYXBhYmxlIHJlZ3Vs YXIgRE1BIG1vZGVzICovDQotCQkJCW9uID0gY29uZmlnX2NoaXBzZXRfZm9y X2RtYShkcml2ZSwgMCk7DQotCQkJCWlmICghb24pDQotCQkJCQlnb3RvIG5v X2RtYV9zZXQ7DQotCQkJfQ0KLQkJfSBlbHNlIGlmICh1ZG1hX3doaXRlX2xp c3QoZHJpdmUpKSB7DQotCQkJaWYgKGlkLT5laWRlX2RtYV90aW1lID4gMTUw KSB7DQotCQkJCWdvdG8gbm9fZG1hX3NldDsNCi0JCQl9DQotCQkJLyogQ29u c3VsdCB0aGUgbGlzdCBvZiBrbm93biAiZ29vZCIgZHJpdmVzICovDQotCQkJ b24gPSBjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlLCAwKTsNCi0JCQlp ZiAoIW9uKQ0KLQkJCQlnb3RvIG5vX2RtYV9zZXQ7DQotCQl9IGVsc2Ugew0K LQkJCWdvdG8gZmFzdF9hdGFfcGlvOw0KLQkJfQ0KLQl9IGVsc2UgaWYgKChp ZC0+Y2FwYWJpbGl0eSAmIDgpIHx8IChpZC0+ZmllbGRfdmFsaWQgJiAyKSkg ew0KLWZhc3RfYXRhX3BpbzoNCi0JCW9uID0gMDsNCi0JCXZlcmJvc2UgPSAw Ow0KLW5vX2RtYV9zZXQ6DQotCQlod2lmLT50dW5lcHJvYyhkcml2ZSwgMjU1 KTsNCi0JfQ0KLQ0KLQl1ZG1hX2VuYWJsZShkcml2ZSwgb24sIHZlcmJvc2Up Ow0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQogc3RhdGljIGludCBjbWQ2NHhf dWRtYV9zdG9wKHN0cnVjdCBhdGFfZGV2aWNlICpkcml2ZSkNCiB7DQogCXN0 cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkcml2ZS0+Y2hhbm5lbDsNCkBAIC04 NDAsMTAgKzc2Myw2IEBADQogCXN3aXRjaChkZXYtPmRldmljZSkgew0KIAkJ Y2FzZSBQQ0lfREVWSUNFX0lEX0NNRF82ODA6DQogCQkJaHdpZi0+YnVzcHJv Ywk9IGNtZDY4MF9idXNwcm9jOw0KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9J REVETUENCi0JCQlpZiAoaHdpZi0+ZG1hX2Jhc2UpDQotCQkJCWh3aWYtPnVk bWFfc2V0dXAgPSBjbWQ2eHhfdWRtYV9zZXR1cDsNCi0jZW5kaWYNCiAJCQlo d2lmLT5yZXNldHByb2MgPSBjbWQ2ODBfcmVzZXQ7DQogCQkJaHdpZi0+c3Bl ZWRwcm9jCT0gY21kNjgwX3R1bmVfY2hpcHNldDsNCiAJCQlod2lmLT50dW5l cHJvYwk9IGNtZDY4MF90dW5lcHJvYzsNCkBAIC04NTMsNyArNzcyLDYgQEAN CiAJCWNhc2UgUENJX0RFVklDRV9JRF9DTURfNjQzOg0KICNpZmRlZiBDT05G SUdfQkxLX0RFVl9JREVETUENCiAJCQlpZiAoaHdpZi0+ZG1hX2Jhc2UpIHsN Ci0JCQkJaHdpZi0+dWRtYV9zZXR1cCA9IGNtZDZ4eF91ZG1hX3NldHVwOw0K IAkJCQlod2lmLT51ZG1hX3N0b3AJPSBjbWQ2NHhfdWRtYV9zdG9wOw0KIAkJ CQlod2lmLT51ZG1hX2lycV9zdGF0dXMgPSBjbWQ2NHhfdWRtYV9pcnFfc3Rh dHVzOw0KIAkJCX0NCkBAIC04NjUsNyArNzgzLDYgQEANCiAJCQlod2lmLT5j aGlwc2V0ID0gaWRlX2NtZDY0NjsNCiAjaWZkZWYgQ09ORklHX0JMS19ERVZf SURFRE1BDQogCQkJaWYgKGh3aWYtPmRtYV9iYXNlKSB7DQotCQkJCWh3aWYt PnVkbWFfc2V0dXAgPSBjbWQ2eHhfdWRtYV9zZXR1cDsNCiAJCQkJaWYgKGNs YXNzX3JldiA9PSAweDAxKSB7DQogCQkJCQlod2lmLT51ZG1hX3N0b3AgPSBj bWQ2NDZfMV91ZG1hX3N0b3A7DQogCQkJCX0gZWxzZSB7DQpAQCAtODg1LDYg KzgwMiw4IEBADQogCWlmIChod2lmLT5kbWFfYmFzZSkgew0KIAkJaHdpZi0+ aGlnaG1lbSA9IDE7DQogCQlod2lmLT5tb2Rlc19tYXAgPSBjbWQ2eHhfbW9k ZXNfbWFwKGh3aWYpOw0KKwkJaHdpZi0+bm9fYXRhcGlfYXV0b2RtYSA9IDE7 DQorCQlod2lmLT51ZG1hX3NldHVwID0gdWRtYV9nZW5lcmljX3NldHVwOw0K ICMgaWZkZWYgQ09ORklHX0lERURNQV9BVVRPDQogCQlpZiAoIW5vYXV0b2Rt YSkNCiAJCQlod2lmLT5hdXRvZG1hID0gMTsNCmRpZmYgLXVyIGxpbnV4LWF0 YS1ob3N0cy03L2RyaXZlcnMvaWRlL2hwdDM0eC5jIGxpbnV4L2RyaXZlcnMv aWRlL2hwdDM0eC5jDQotLS0gbGludXgtYXRhLWhvc3RzLTcvZHJpdmVycy9p ZGUvaHB0MzR4LmMJTW9uIEp1biAyNCAyMjoyMTowMSAyMDAyDQorKysgbGlu dXgvZHJpdmVycy9pZGUvaHB0MzR4LmMJTW9uIEp1biAyNCAyMjozNToxMCAy MDAyDQpAQCAtNzIsODEgKzcyLDEyIEBADQogfQ0KIA0KICNpZmRlZiBDT05G SUdfQkxLX0RFVl9JREVETUENCi1zdGF0aWMgaW50IGNvbmZpZ19jaGlwc2V0 X2Zvcl9kbWEoc3RydWN0IGF0YV9kZXZpY2UgKmRyaXZlLCB1OCB1ZG1hKQ0K LXsNCi0JaW50IG1hcDsNCi0JdTggbW9kZTsNCi0NCi0JaWYgKGRyaXZlLT50 eXBlICE9IEFUQV9ESVNLKQ0KLQkJcmV0dXJuIDA7DQotDQotCWlmICh1ZG1h KQ0KLQkJbWFwID0gWEZFUl9VRE1BOw0KLQllbHNlDQotCQltYXAgPSBYRkVS X1NXRE1BIHwgWEZFUl9NV0RNQTsNCi0NCi0JbW9kZSA9IGF0YV90aW1pbmdf bW9kZShkcml2ZSwgbWFwKTsNCi0JaWYgKG1vZGUgPCBYRkVSX1NXX0RNQV8w KQ0KLQkJcmV0dXJuIDA7DQotDQotCXJldHVybiAhaHB0MzR4X3R1bmVfY2hp cHNldChkcml2ZSwgbW9kZSk7DQotfQ0KIA0KIHN0YXRpYyBpbnQgaHB0MzR4 X3VkbWFfc2V0dXAoc3RydWN0IGF0YV9kZXZpY2UgKmRyaXZlKQ0KIHsNCi0J c3RydWN0IGhkX2RyaXZlaWQgKmlkID0gZHJpdmUtPmlkOw0KLQlpbnQgb24g PSAxOw0KLQlpbnQgdmVyYm9zZSA9IDE7DQotDQotCWlmIChpZCAmJiAoaWQt PmNhcGFiaWxpdHkgJiAxKSAmJiBkcml2ZS0+Y2hhbm5lbC0+YXV0b2RtYSkg ew0KLQkJLyogQ29uc3VsdCB0aGUgbGlzdCBvZiBrbm93biAiYmFkIiBkcml2 ZXMgKi8NCi0JCWlmICh1ZG1hX2JsYWNrX2xpc3QoZHJpdmUpKSB7DQotCQkJ b24gPSAwOw0KLQkJCWdvdG8gZmFzdF9hdGFfcGlvOw0KLQkJfQ0KLQkJb24g PSAwOw0KLQkJdmVyYm9zZSA9IDA7DQotCQlpZiAoaWQtPmZpZWxkX3ZhbGlk ICYgNCkgew0KLQkJCWlmIChpZC0+ZG1hX3VsdHJhICYgMHgwMDA3KSB7DQot CQkJCS8qIEZvcmNlIGlmIENhcGFibGUgVWx0cmFETUEgKi8NCi0JCQkJb24g PSBjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlLCAxKTsNCi0JCQkJaWYg KChpZC0+ZmllbGRfdmFsaWQgJiAyKSAmJg0KLQkJCQkgICAgKCFvbikpDQot CQkJCQlnb3RvIHRyeV9kbWFfbW9kZXM7DQotCQkJfQ0KLQkJfSBlbHNlIGlm IChpZC0+ZmllbGRfdmFsaWQgJiAyKSB7DQotdHJ5X2RtYV9tb2RlczoNCi0J CQlpZiAoKGlkLT5kbWFfbXdvcmQgJiAweDAwMDcpIHx8DQotCQkJICAgIChp ZC0+ZG1hXzF3b3JkICYgMHgwMDA3KSkgew0KLQkJCQkvKiBGb3JjZSBpZiBD YXBhYmxlIHJlZ3VsYXIgRE1BIG1vZGVzICovDQotCQkJCW9uID0gY29uZmln X2NoaXBzZXRfZm9yX2RtYShkcml2ZSwgMCk7DQotCQkJCWlmICghb24pDQot CQkJCQlnb3RvIG5vX2RtYV9zZXQ7DQotCQkJfQ0KLQkJfSBlbHNlIGlmICh1 ZG1hX3doaXRlX2xpc3QoZHJpdmUpKSB7DQotCQkJaWYgKGlkLT5laWRlX2Rt YV90aW1lID4gMTUwKSB7DQotCQkJCWdvdG8gbm9fZG1hX3NldDsNCi0JCQl9 DQotCQkJLyogQ29uc3VsdCB0aGUgbGlzdCBvZiBrbm93biAiZ29vZCIgZHJp dmVzICovDQotCQkJb24gPSBjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZl LCAwKTsNCi0JCQlpZiAoIW9uKQ0KLQkJCQlnb3RvIG5vX2RtYV9zZXQ7DQot CQl9IGVsc2Ugew0KLQkJCWdvdG8gZmFzdF9hdGFfcGlvOw0KLQkJfQ0KLQl9 IGVsc2UgaWYgKChpZC0+Y2FwYWJpbGl0eSAmIDgpIHx8IChpZC0+ZmllbGRf dmFsaWQgJiAyKSkgew0KLWZhc3RfYXRhX3BpbzoNCi0JCW9uID0gMDsNCi0J CXZlcmJvc2UgPSAwOw0KLW5vX2RtYV9zZXQ6DQotCQlocHQzNHhfdHVuZV9j aGlwc2V0KGRyaXZlLCBhdGFfYmVzdF9waW9fbW9kZShkcml2ZSkpOw0KLQl9 DQotDQotI2lmbmRlZiBDT05GSUdfSFBUMzRYX0FVVE9ETUENCi0JaWYgKG9u KQ0KLQkJb24gPSAwOw0KKyNpZmRlZiBDT05GSUdfSFBUMzRYX0FVVE9ETUEN CisJdWRtYV9nZW5lcmljX3NldHVwKGRyaXZlKTsNCiAjZW5kaWYNCi0JdWRt YV9lbmFibGUoZHJpdmUsIG9uLCB2ZXJib3NlKTsNCiANCiAJcmV0dXJuIDA7 DQogfQ0KQEAgLTI1OSw2ICsxOTAsOCBAQA0KIA0KIAkJaHdpZi0+dWRtYV9z dG9wID0gaHB0MzR4X3VkbWFfc3RvcDsNCiAJCWh3aWYtPnVkbWFfaW5pdCA9 IGhwdDM0eF91ZG1hX2luaXQ7DQorCQlod2lmLT5tb2Rlc19tYXAgPSBYRkVS X0VQSU8gfCBYRkVSX1NXRE1BIHwgWEZFUl9NV0RNQSB8IFhGRVJfVURNQTsN CisJCWh3aWYtPm5vX2F0YXBpX2F1dG9kbWEgPSAxOw0KIAkJaHdpZi0+dWRt YV9zZXR1cCA9IGhwdDM0eF91ZG1hX3NldHVwOw0KIAkJaHdpZi0+aGlnaG1l bSA9IDE7DQogCX0gZWxzZSB7DQpkaWZmIC11ciBsaW51eC1hdGEtaG9zdHMt Ny9kcml2ZXJzL2lkZS9wY2lkbWEuYyBsaW51eC9kcml2ZXJzL2lkZS9wY2lk bWEuYw0KLS0tIGxpbnV4LWF0YS1ob3N0cy03L2RyaXZlcnMvaWRlL3BjaWRt YS5jCU1vbiBKdW4gMjQgMjI6MjE6MDEgMjAwMg0KKysrIGxpbnV4L2RyaXZl cnMvaWRlL3BjaWRtYS5jCU1vbiBKdW4gMjQgMjI6MzU6MTAgMjAwMg0KQEAg LTI3LDYgKzI3LDggQEANCiAjaW5jbHVkZSA8bGludXgvaWRlLmg+DQogI2lu Y2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQogDQorI2luY2x1ZGUgImF0YS10aW1p bmcuaCINCisNCiAjaW5jbHVkZSA8YXNtL2lvLmg+DQogI2luY2x1ZGUgPGFz bS9pcnEuaD4NCiANCkBAIC0xNzAsNiArMTcyLDcwIEBADQogDQogCXJldHVy biAwOw0KIH0NCisNCisvKiBnZW5lcmljIHVkbWFfc2V0dXAoKSBmdW5jdGlv biBmb3IgZHJpdmVycyBoYXZpbmcgLT5zcGVlZHByb2MvdHVuZXByb2MgKi8N CitpbnQgdWRtYV9nZW5lcmljX3NldHVwKHN0cnVjdCBhdGFfZGV2aWNlICpk cml2ZSkNCit7DQorCXN0cnVjdCBoZF9kcml2ZWlkICppZCA9IGRyaXZlLT5p ZDsNCisJc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRyaXZlLT5jaGFubmVs Ow0KKwlpbnQgbWFwID0gY2gtPm1vZGVzX21hcDsgLyogbWFwIG9mIGhvc3Qg Y2FwYWJpbGl0aWVzICovDQorCWludCBvbiA9IDA7DQorCXU4IG1vZGU7DQor DQorCWlmICghaWQgfHwgKGRyaXZlLT50eXBlICE9IEFUQV9ESVNLICYmIGNo LT5ub19hdGFwaV9hdXRvZG1hKSkNCisJCXJldHVybiAwOw0KKw0KKwlpZiAo KG1hcCAmIFhGRVJfVURNQV84MFcpICYmICFlaWdodHlfbmludHlfdGhyZWUo ZHJpdmUpKQ0KKwkJbWFwICY9IH5YRkVSX1VETUFfODBXOw0KKw0KKwlpZiAo KGlkLT5jYXBhYmlsaXR5ICYgMSkgJiYgY2gtPmF1dG9kbWEgJiYgY2gtPnNw ZWVkcHJvYykgew0KKw0KKwkJLyogQ29uc3VsdCB0aGUgbGlzdCBvZiBrbm93 biAiYmFkIiBkZXZpY2VzLiAqLw0KKwkJaWYgKHVkbWFfYmxhY2tfbGlzdChk cml2ZSkpDQorCQkJZ290byBzZXRfZG1hOw0KKw0KKwkJbW9kZSA9IGF0YV90 aW1pbmdfbW9kZShkcml2ZSwgbWFwKTsNCisNCisJCS8qIERldmljZSBpcyBV bHRyYURNQSBjYXBhYmxlLiAqLw0KKwkJaWYgKG1vZGUgJiBYRkVSX1VETUEp IHsNCisJCQlpZigob24gPSAhY2gtPnNwZWVkcHJvYyhkcml2ZSwgbW9kZSkp KQ0KKwkJCQlnb3RvIHNldF9kbWE7DQorDQorCQkJcHJpbnRrKEtFUk5fV0FS TklORyAiJXM6IFVETUEgYXV0by10dW5lIGZhaWxlZC5cbiIsIGRyaXZlLT5u YW1lKTsNCisNCisJCQltYXAgJj0gflhGRVJfVURNQV9BTEw7DQorCQkJbW9k ZSA9IGF0YV90aW1pbmdfbW9kZShkcml2ZSwgbWFwKTsNCisJCX0NCisNCisJ CS8qIERldmljZSBpcyByZWd1bGFyIERNQSBjYXBhYmxlLiAqLw0KKwkJaWYg KG1vZGUgJiAoWEZFUl9TV0RNQSB8IFhGRVJfTVdETUEpKSB7DQorCQkJaWYo KG9uID0gIWNoLT5zcGVlZHByb2MoZHJpdmUsIG1vZGUpKSkNCisJCQkJZ290 byBzZXRfZG1hOw0KKw0KKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBE TUEgYXV0by10dW5lIGZhaWxlZC5cbiIsIGRyaXZlLT5uYW1lKTsNCisJCX0N CisNCisJCS8qIEZJWE1FOiB0aGlzIHNlZW1zIG5vbi1mdW5jdGlvbmFsICAt LWJreiAqLw0KKwkJLyogQ29uc3VsdCB0aGUgbGlzdCBvZiBrbm93biAiZ29v ZCIgZGV2aWNlcy4gKi8NCisJCWlmICh1ZG1hX3doaXRlX2xpc3QoZHJpdmUp KSB7DQorDQorCQkJaWYgKGlkLT5laWRlX2RtYV90aW1lID4gMTUwKQ0KKwkJ CQlnb3RvIHNldF9kbWE7DQorDQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6 IGRldmljZSBpcyBvbiBETUEgd2hpdGVsaXN0LlxuIiwgZHJpdmUtPm5hbWUp Ow0KKy8vCQkJb24gPSAxOw0KKwkJfQ0KKw0KKwkJLyogUmV2ZXJ0IHRvIFBJ Ty4gKi8NCisJCWlmICghb24gJiYgY2gtPnR1bmVwcm9jKQ0KKwkJCWNoLT50 dW5lcHJvYyhkcml2ZSwgMjU1KTsNCisJfQ0KKw0KK3NldF9kbWE6DQorCXVk bWFfZW5hYmxlKGRyaXZlLCBvbiwgIW9uKTsNCisNCisJcmV0dXJuIDA7DQor fQ0KIA0KIC8qDQogICogQ29uZmlndXJlIGEgZGV2aWNlIGZvciBETUEgb3Bl cmF0aW9uLg0KZGlmZiAtdXIgbGludXgtYXRhLWhvc3RzLTcvZHJpdmVycy9p ZGUvcGlpeC5jIGxpbnV4L2RyaXZlcnMvaWRlL3BpaXguYw0KLS0tIGxpbnV4 LWF0YS1ob3N0cy03L2RyaXZlcnMvaWRlL3BpaXguYwlNb24gSnVuIDI0IDIy OjE1OjE4IDIwMDINCisrKyBsaW51eC9kcml2ZXJzL2lkZS9waWl4LmMJTW9u IEp1biAyNCAyMjozNToxMCAyMDAyDQpAQCAtMjQ0LDI2ICsyNDQsMTggQEAN CiB9DQogDQogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQ0KLQ0KLXN0 YXRpYyBpbnQgcGlpeF91ZG1hX3NldHVwKHN0cnVjdCBhdGFfZGV2aWNlICpk cml2ZSkNCitzdGF0aWMgaW50IF9faW5pdCBwaWl4X21vZGVzX21hcChzdHJ1 Y3QgYXRhX2NoYW5uZWwgKmNoKQ0KIHsNCi0Jc2hvcnQgdzgwID0gZHJpdmUt PmNoYW5uZWwtPnVkbWFfZm91cjsNCi0NCi0Jc2hvcnQgc3BlZWQgPSBhdGFf dGltaW5nX21vZGUoZHJpdmUsDQotCQkJWEZFUl9QSU8gfCBYRkVSX0VQSU8g fA0KLQkJCShwaWl4X2NvbmZpZy0+ZmxhZ3MgJiBQSUlYX05PRE1BID8gMCA6 IChYRkVSX1NXRE1BIHwgWEZFUl9NV0RNQSB8DQotCQkJKHBpaXhfY29uZmln LT5mbGFncyAmIFBJSVhfVURNQSA/IFhGRVJfVURNQSA6IDApIHwNCi0JCQko dzgwICYmIChwaWl4X2NvbmZpZy0+ZmxhZ3MgJiBQSUlYX1VETUEpID49IFBJ SVhfVURNQV82NiA/IFhGRVJfVURNQV82NiA6IDApIHwNCi0JCQkodzgwICYm IChwaWl4X2NvbmZpZy0+ZmxhZ3MgJiBQSUlYX1VETUEpID49IFBJSVhfVURN QV8xMDAgPyBYRkVSX1VETUFfMTAwIDogMCkgfA0KLQkJCSh3ODAgJiYgKHBp aXhfY29uZmlnLT5mbGFncyAmIFBJSVhfVURNQSkgPj0gUElJWF9VRE1BXzEz MyA/IFhGRVJfVURNQV8xMzMgOiAwKSkpKTsNCi0NCi0JcGlpeF9zZXRfZHJp dmUoZHJpdmUsIHNwZWVkKTsNCisJc2hvcnQgdzgwID0gY2gtPnVkbWFfZm91 cjsNCisJaW50IG1hcCA9IFhGRVJfRVBJTyB8DQorCQkgIChwaWl4X2NvbmZp Zy0+ZmxhZ3MgJiBQSUlYX05PRE1BID8gMCA6IChYRkVSX1NXRE1BIHwgWEZF Ul9NV0RNQSB8DQorCQkgIChwaWl4X2NvbmZpZy0+ZmxhZ3MgJiBQSUlYX1VE TUEgPyBYRkVSX1VETUEgOiAwKSB8DQorCQkgICh3ODAgJiYgKHBpaXhfY29u ZmlnLT5mbGFncyAmIFBJSVhfVURNQSkgPj0gUElJWF9VRE1BXzY2ID8gWEZF Ul9VRE1BXzY2IDogMCkgfA0KKwkJICAodzgwICYmIChwaWl4X2NvbmZpZy0+ ZmxhZ3MgJiBQSUlYX1VETUEpID49IFBJSVhfVURNQV8xMDAgPyBYRkVSX1VE TUFfMTAwIDogMCkgfA0KKwkJICAodzgwICYmIChwaWl4X2NvbmZpZy0+Zmxh Z3MgJiBQSUlYX1VETUEpID49IFBJSVhfVURNQV8xMzMgPyBYRkVSX1VETUFf MTMzIDogMCkpKTsNCiANCi0JdWRtYV9lbmFibGUoZHJpdmUsIGRyaXZlLT5j aGFubmVsLT5hdXRvZG1hICYmIChzcGVlZCAmIFhGRVJfTU9ERSkgIT0gWEZF Ul9QSU8sIDApOw0KLQ0KLQlyZXR1cm4gMDsNCisJcmV0dXJuIG1hcDsNCiB9 DQotDQogI2VuZGlmDQogDQogLyoNCkBAIC0zNzMsNyArMzY1LDggQEANCiAj aWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BDQogCWlmIChjaC0+ZG1hX2Jh c2UpIHsNCiAJCWNoLT5oaWdobWVtID0gMTsNCi0JCWNoLT51ZG1hX3NldHVw ID0gcGlpeF91ZG1hX3NldHVwOw0KKwkJY2gtPm1vZGVzX21hcCA9IHBpaXhf bW9kZXNfbWFwKGNoKTsNCisJCWNoLT51ZG1hX3NldHVwID0gdWRtYV9nZW5l cmljX3NldHVwOw0KICMgaWZkZWYgQ09ORklHX0lERURNQV9BVVRPDQogCQlp ZiAoIW5vYXV0b2RtYSkNCiAJCQljaC0+YXV0b2RtYSA9IDE7DQpkaWZmIC11 ciBsaW51eC1hdGEtaG9zdHMtNy9kcml2ZXJzL2lkZS9zZXJ2ZXJ3b3Jrcy5j IGxpbnV4L2RyaXZlcnMvaWRlL3NlcnZlcndvcmtzLmMNCi0tLSBsaW51eC1h dGEtaG9zdHMtNy9kcml2ZXJzL2lkZS9zZXJ2ZXJ3b3Jrcy5jCU1vbiBKdW4g MjQgMjI6MjY6NTUgMjAwMg0KKysrIGxpbnV4L2RyaXZlcnMvaWRlL3NlcnZl cndvcmtzLmMJTW9uIEp1biAyNCAyMjozNjozOCAyMDAyDQpAQCAtMjIyLDgw ICsyMjIsMTMgQEANCiAJcmV0dXJuIGlkZV9jb25maWdfZHJpdmVfc3BlZWQo ZHJpdmUsIHNwZWVkKTsNCiB9DQogDQorLyogRklYTUU6IHBpbyA9PSAyNTUg LT4gYXRhX2Jlc3RfcGlvX21vZGUoZHJpdmUpICAtLWJreiAqLw0KIHN0YXRp YyB2b2lkIHN2d2tzX3R1bmVfZHJpdmUoc3RydWN0IGF0YV9kZXZpY2UgKmRy aXZlLCB1OCBwaW8pDQogew0KIAkodm9pZCkgc3Z3a3NfdHVuZV9jaGlwc2V0 KGRyaXZlLCBYRkVSX1BJT18wICsgbWluX3QodTgsIHBpbywgNCkpOw0KIH0N CiANCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BDQotc3RhdGljIGlu dCBjb25maWdfY2hpcHNldF9mb3JfZG1hKHN0cnVjdCBhdGFfZGV2aWNlICpk cml2ZSkNCi17DQotCWludCBtYXAgPSBkcml2ZS0+Y2hhbm5lbC0+bW9kZXNf bWFwOw0KLQl1OCBtb2RlOw0KLQ0KLQlpZiAoIWVpZ2h0eV9uaW50eV90aHJl ZShkcml2ZSkpDQotCQltYXAgJj0gflhGRVJfVURNQV84MFc7DQotDQotCW1v ZGUgPSBhdGFfdGltaW5nX21vZGUoZHJpdmUsIG1hcCk7DQotDQotCXJldHVy biAhc3Z3a3NfdHVuZV9jaGlwc2V0KGRyaXZlLCBtb2RlKTsNCi19DQotDQot c3RhdGljIGludCBzdndrc191ZG1hX3NldHVwKHN0cnVjdCBhdGFfZGV2aWNl ICpkcml2ZSkNCi17DQotCXN0cnVjdCBoZF9kcml2ZWlkICppZCA9IGRyaXZl LT5pZDsNCi0JaW50IG9uID0gMTsNCi0JaW50IHZlcmJvc2UgPSAxOw0KLQ0K LQlpZiAoaWQgJiYgKGlkLT5jYXBhYmlsaXR5ICYgMSkgJiYgZHJpdmUtPmNo YW5uZWwtPmF1dG9kbWEpIHsNCi0JCS8qIENvbnN1bHQgdGhlIGxpc3Qgb2Yg a25vd24gImJhZCIgZHJpdmVzICovDQotCQlpZiAodWRtYV9ibGFja19saXN0 KGRyaXZlKSkgew0KLQkJCW9uID0gMDsNCi0JCQlnb3RvIGZhc3RfYXRhX3Bp bzsNCi0JCX0NCi0JCW9uID0gMDsNCi0JCXZlcmJvc2UgPSAwOw0KLQkJaWYg KGlkLT5maWVsZF92YWxpZCAmIDQpIHsNCi0JCQlpZiAoaWQtPmRtYV91bHRy YSAmIDB4MDAzRikgew0KLQkJCQkvKiBGb3JjZSBpZiBDYXBhYmxlIFVsdHJh RE1BICovDQotCQkJCW9uID0gY29uZmlnX2NoaXBzZXRfZm9yX2RtYShkcml2 ZSk7DQotCQkJCWlmICgoaWQtPmZpZWxkX3ZhbGlkICYgMikgJiYNCi0JCQkJ ICAgICghb24pKQ0KLQkJCQkJZ290byB0cnlfZG1hX21vZGVzOw0KLQkJCX0N Ci0JCX0gZWxzZSBpZiAoaWQtPmZpZWxkX3ZhbGlkICYgMikgew0KLXRyeV9k bWFfbW9kZXM6DQotCQkJaWYgKChpZC0+ZG1hX213b3JkICYgMHgwMDA3KSB8 fA0KLQkJCSAgICAoaWQtPmRtYV8xd29yZCAmIDB4MDA3KSkgew0KLQkJCQkv KiBGb3JjZSBpZiBDYXBhYmxlIHJlZ3VsYXIgRE1BIG1vZGVzICovDQotCQkJ CW9uID0gY29uZmlnX2NoaXBzZXRfZm9yX2RtYShkcml2ZSk7DQotCQkJCWlm ICghb24pDQotCQkJCQlnb3RvIG5vX2RtYV9zZXQ7DQotCQkJfQ0KLQkJfSBl bHNlIGlmICh1ZG1hX3doaXRlX2xpc3QoZHJpdmUpKSB7DQotCQkJaWYgKGlk LT5laWRlX2RtYV90aW1lID4gMTUwKSB7DQotCQkJCWdvdG8gbm9fZG1hX3Nl dDsNCi0JCQl9DQotCQkJLyogQ29uc3VsdCB0aGUgbGlzdCBvZiBrbm93biAi Z29vZCIgZHJpdmVzICovDQotCQkJb24gPSBjb25maWdfY2hpcHNldF9mb3Jf ZG1hKGRyaXZlKTsNCi0JCQlpZiAoIW9uKQ0KLQkJCQlnb3RvIG5vX2RtYV9z ZXQ7DQotCQl9IGVsc2Ugew0KLQkJCWdvdG8gZmFzdF9hdGFfcGlvOw0KLQkJ fQ0KLQl9IGVsc2UgaWYgKChpZC0+Y2FwYWJpbGl0eSAmIDgpIHx8IChpZC0+ ZmllbGRfdmFsaWQgJiAyKSkgew0KLWZhc3RfYXRhX3BpbzoNCi0JCW9uID0g MDsNCi0JCXZlcmJvc2UgPSAwOw0KLW5vX2RtYV9zZXQ6DQotCQlzdndrc190 dW5lX2NoaXBzZXQoZHJpdmUsIGF0YV9iZXN0X3Bpb19tb2RlKGRyaXZlKSk7 DQotCX0NCi0NCi0JdWRtYV9lbmFibGUoZHJpdmUsIG9uLCB2ZXJib3NlKTsN Ci0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KIHN0YXRpYyBpbnQgc3Z3a3NfdWRt YV9zdG9wKHN0cnVjdCBhdGFfZGV2aWNlICpkcml2ZSkNCiB7DQogCXN0cnVj dCBhdGFfY2hhbm5lbCAqY2ggPSBkcml2ZS0+Y2hhbm5lbDsNCkBAIC00NTAs OCArMzgzLDggQEANCiAJCQlod2lmLT5hdXRvZG1hID0gMTsNCiAjZW5kaWYN CiAJCWh3aWYtPm1vZGVzX21hcCA9IHN2d2tzX21vZGVzX21hcChod2lmKTsN CisJCWh3aWYtPnVkbWFfc2V0dXAgPSB1ZG1hX2dlbmVyaWNfc2V0dXA7DQog CQlod2lmLT51ZG1hX3N0b3AgPSBzdndrc191ZG1hX3N0b3A7DQotCQlod2lm LT51ZG1hX3NldHVwID0gc3Z3a3NfdWRtYV9zZXR1cDsNCiAJCWh3aWYtPmhp Z2htZW0gPSAxOw0KIAl9IGVsc2Ugew0KIAkJaHdpZi0+YXV0b2RtYSA9IDA7 DQpkaWZmIC11ciBsaW51eC1hdGEtaG9zdHMtNy9kcml2ZXJzL2lkZS9zaXM1 NTEzLmMgbGludXgvZHJpdmVycy9pZGUvc2lzNTUxMy5jDQotLS0gbGludXgt YXRhLWhvc3RzLTcvZHJpdmVycy9pZGUvc2lzNTUxMy5jCU1vbiBKdW4gMjQg MjI6MjQ6MzAgMjAwMg0KKysrIGxpbnV4L2RyaXZlcnMvaWRlL3NpczU1MTMu YwlNb24gSnVuIDI0IDIyOjM1OjEwIDIwMDINCkBAIC0zOTcsODcgKzM5Nyw2 IEBADQogCSh2b2lkKWNvbmZpZ19hcnRfcndwX3Bpbyhkcml2ZSwgbWluX3Qo dTgsIHBpbywgNCkpOw0KIH0NCiANCi0jaWZkZWYgQ09ORklHX0JMS19ERVZf SURFRE1BDQotc3RhdGljIGludCBjb25maWdfY2hpcHNldF9mb3JfZG1hKHN0 cnVjdCBhdGFfZGV2aWNlICpkcml2ZSwgdTggdWRtYSkNCi17DQotCWludCBt YXAgPSBkcml2ZS0+Y2hhbm5lbC0+bW9kZXNfbWFwOw0KLQl1OCBtb2RlOw0K LQ0KLSNpZmRlZiBERUJVRw0KLQlwcmludGsoIlNJUzU1MTM6IGNvbmZpZ19j aGlwc2V0X2Zvcl9kbWEsIGRyaXZlICVkLCB1ZG1hICVkXG4iLA0KLQkgICAg ICAgZHJpdmUtPmRuLCB1ZG1hKTsNCi0jZW5kaWYNCi0NCi0JaWYgKCFlaWdo dHlfbmludHlfdGhyZWUoZHJpdmUpKQ0KLQkJbWFwICY9IH5YRkVSX1VETUFf ODBXOw0KLQ0KLQlpZiAoIXVkbWEpDQotCQltYXAgJj0gflhGRVJfVURNQV9B TEw7DQotDQotCW1vZGUgPSBhdGFfdGltaW5nX21vZGUoZHJpdmUsIG1hcCk7 DQotCWlmIChtb2RlIDwgWEZFUl9TV19ETUFfMCkNCi0JCXJldHVybiAwOw0K LQ0KLQlyZXR1cm4gIXNpczU1MTNfdHVuZV9jaGlwc2V0KGRyaXZlLCBtb2Rl KTsNCi19DQotDQotc3RhdGljIGludCBzaXM1NTEzX3VkbWFfc2V0dXAoc3Ry dWN0IGF0YV9kZXZpY2UgKmRyaXZlKQ0KLXsNCi0Jc3RydWN0IGhkX2RyaXZl aWQgKmlkID0gZHJpdmUtPmlkOw0KLQlpbnQgb24gPSAwOw0KLQlpbnQgdmVy Ym9zZSA9IDE7DQotDQotCWNvbmZpZ19kcml2ZV9hcnRfcndwKGRyaXZlKTsN Ci0Jc2lzNTUxM190dW5lX2RyaXZlKGRyaXZlLCAyNTUpOw0KLQ0KLQlpZiAo aWQgJiYgKGlkLT5jYXBhYmlsaXR5ICYgMSkgJiYgZHJpdmUtPmNoYW5uZWwt PmF1dG9kbWEpIHsNCi0JCS8qIENvbnN1bHQgdGhlIGxpc3Qgb2Yga25vd24g ImJhZCIgZHJpdmVzICovDQotCQlpZiAodWRtYV9ibGFja19saXN0KGRyaXZl KSkgew0KLQkJCW9uID0gMDsNCi0JCQlnb3RvIGZhc3RfYXRhX3BpbzsNCi0J CX0NCi0JCW9uID0gMDsNCi0JCXZlcmJvc2UgPSAwOw0KLQkJaWYgKGlkLT5m aWVsZF92YWxpZCAmIDQpIHsNCi0JCQlpZiAoaWQtPmRtYV91bHRyYSAmIDB4 MDAzRikgew0KLQkJCQkvKiBGb3JjZSBpZiBDYXBhYmxlIFVsdHJhRE1BICov DQotCQkJCW9uID0gY29uZmlnX2NoaXBzZXRfZm9yX2RtYShkcml2ZSwgMSk7 DQotCQkJCWlmICgoaWQtPmZpZWxkX3ZhbGlkICYgMikgJiYNCi0JCQkJICAg ICghb24pKQ0KLQkJCQkJZ290byB0cnlfZG1hX21vZGVzOw0KLQkJCX0NCi0J CX0gZWxzZSBpZiAoaWQtPmZpZWxkX3ZhbGlkICYgMikgew0KLXRyeV9kbWFf bW9kZXM6DQotCQkJaWYgKChpZC0+ZG1hX213b3JkICYgMHgwMDA3KSB8fA0K LQkJCSAgICAoaWQtPmRtYV8xd29yZCAmIDB4MDAwNykpIHsNCi0JCQkJLyog Rm9yY2UgaWYgQ2FwYWJsZSByZWd1bGFyIERNQSBtb2RlcyAqLw0KLQkJCQlv biA9IGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEoZHJpdmUsIDApOw0KLQkJCQlp ZiAoIW9uKQ0KLQkJCQkJZ290byBub19kbWFfc2V0Ow0KLQkJCX0NCi0JCX0g ZWxzZSBpZiAoKHVkbWFfd2hpdGVfbGlzdChkcml2ZSkpICYmDQotCQkJICAg KGlkLT5laWRlX2RtYV90aW1lID4gMTUwKSkgew0KLQkJCS8qIENvbnN1bHQg dGhlIGxpc3Qgb2Yga25vd24gImdvb2QiIGRyaXZlcyAqLw0KLQkJCW9uID0g Y29uZmlnX2NoaXBzZXRfZm9yX2RtYShkcml2ZSwgMCk7DQotCQkJaWYgKCFv bikNCi0JCQkJZ290byBub19kbWFfc2V0Ow0KLQkJfSBlbHNlIHsNCi0JCQln b3RvIGZhc3RfYXRhX3BpbzsNCi0JCX0NCi0JfSBlbHNlIGlmICgoaWQtPmNh cGFiaWxpdHkgJiA4KSB8fCAoaWQtPmZpZWxkX3ZhbGlkICYgMikpIHsNCi1m YXN0X2F0YV9waW86DQotCQlvbiA9IDA7DQotCQl2ZXJib3NlID0gMDsNCi1u b19kbWFfc2V0Og0KLQkJc2lzNTUxM190dW5lX2RyaXZlKGRyaXZlLCAyNTUp Ow0KLQl9DQotDQotCXVkbWFfZW5hYmxlKGRyaXZlLCBvbiwgdmVyYm9zZSk7 DQotDQotCXJldHVybiAwOw0KLX0NCi0jZW5kaWYNCi0NCiAvKiBDaGlwIGRl dGVjdGlvbiBhbmQgZ2VuZXJhbCBjb25maWcgKi8NCiBzdGF0aWMgdW5zaWdu ZWQgaW50IF9faW5pdCBwY2lfaW5pdF9zaXM1NTEzKHN0cnVjdCBwY2lfZGV2 ICpkZXYpDQogew0KQEAgLTU4Miw3ICs1MDEsNyBAQA0KIAkJCWh3aWYtPmF1 dG9kbWEgPSBub2F1dG9kbWEgPyAwIDogMTsNCiAJCQlod2lmLT5oaWdobWVt ID0gMTsNCiAJCQlod2lmLT5tb2Rlc19tYXAgPSBzaXM1NTEzX21vZGVzX21h cChod2lmKTsNCi0JCQlod2lmLT51ZG1hX3NldHVwID0gc2lzNTUxM191ZG1h X3NldHVwOw0KKwkJCWh3aWYtPnVkbWFfc2V0dXAgPSB1ZG1hX2dlbmVyaWNf c2V0dXA7DQogCQl9IGVsc2Ugew0KICNlbmRpZg0KIAkJCWh3aWYtPmF1dG9k bWEgPSAwOw0KZGlmZiAtdXIgbGludXgtYXRhLWhvc3RzLTcvZHJpdmVycy9p ZGUvdmlhODJjeHh4LmMgbGludXgvZHJpdmVycy9pZGUvdmlhODJjeHh4LmMN Ci0tLSBsaW51eC1hdGEtaG9zdHMtNy9kcml2ZXJzL2lkZS92aWE4MmN4eHgu YwlNb24gSnVuIDI0IDIyOjE1OjE4IDIwMDINCisrKyBsaW51eC9kcml2ZXJz L2lkZS92aWE4MmN4eHguYwlNb24gSnVuIDI0IDIyOjM1OjEwIDIwMDINCkBA IC0yMjEsMjIgKzIyMSwxNiBAQA0KIH0NCiANCiAjaWZkZWYgQ09ORklHX0JM S19ERVZfSURFRE1BDQotc3RhdGljIGludCB2aWE4MmN4eHhfdWRtYV9zZXR1 cChzdHJ1Y3QgYXRhX2RldmljZSAqZHJpdmUpDQorc3RhdGljIGludCBfX2lu aXQgdmlhX21vZGVzX21hcChzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoKQ0KIHsN Ci0Jc2hvcnQgdzgwID0gZHJpdmUtPmNoYW5uZWwtPnVkbWFfZm91cjsNCisJ c2hvcnQgdzgwID0gY2gtPnVkbWFfZm91cjsNCisJaW50IG1hcCA9IFhGRVJf RVBJTyB8IFhGRVJfU1dETUEgfCBYRkVSX01XRE1BIHwNCisJCSAgKHZpYV9j b25maWctPmZsYWdzICYgVklBX1VETUEgPyBYRkVSX1VETUEgOiAwKSB8DQor CQkgICh3ODAgJiYgKHZpYV9jb25maWctPmZsYWdzICYgVklBX1VETUEpID49 IFZJQV9VRE1BXzY2ID8gWEZFUl9VRE1BXzY2IDogMCkgfA0KKwkJICAodzgw ICYmICh2aWFfY29uZmlnLT5mbGFncyAmIFZJQV9VRE1BKSA+PSBWSUFfVURN QV8xMDAgPyBYRkVSX1VETUFfMTAwIDogMCkgfA0KKwkJICAodzgwICYmICh2 aWFfY29uZmlnLT5mbGFncyAmIFZJQV9VRE1BKSA+PSBWSUFfVURNQV8xMzMg PyBYRkVSX1VETUFfMTMzIDogMCk7DQogDQotCXNob3J0IHNwZWVkID0gYXRh X3RpbWluZ19tb2RlKGRyaXZlLA0KLQkJCVhGRVJfUElPIHwgWEZFUl9FUElP IHwgWEZFUl9TV0RNQSB8IFhGRVJfTVdETUEgfA0KLQkJCSh2aWFfY29uZmln LT5mbGFncyAmIFZJQV9VRE1BID8gWEZFUl9VRE1BIDogMCkgfA0KLQkJCSh3 ODAgJiYgKHZpYV9jb25maWctPmZsYWdzICYgVklBX1VETUEpID49IFZJQV9V RE1BXzY2ID8gWEZFUl9VRE1BXzY2IDogMCkgfA0KLQkJCSh3ODAgJiYgKHZp YV9jb25maWctPmZsYWdzICYgVklBX1VETUEpID49IFZJQV9VRE1BXzEwMCA/ IFhGRVJfVURNQV8xMDAgOiAwKSB8DQotCQkJKHc4MCAmJiAodmlhX2NvbmZp Zy0+ZmxhZ3MgJiBWSUFfVURNQSkgPj0gVklBX1VETUFfMTMzID8gWEZFUl9V RE1BXzEzMyA6IDApKTsNCi0NCi0JdmlhX3NldF9kcml2ZShkcml2ZSwgc3Bl ZWQpOw0KLQ0KLQl1ZG1hX2VuYWJsZShkcml2ZSwgZHJpdmUtPmNoYW5uZWwt PmF1dG9kbWEgJiYgKHNwZWVkICYgWEZFUl9NT0RFKSAhPSBYRkVSX1BJTywg MCk7DQotDQotCXJldHVybiAwOw0KKwlyZXR1cm4gbWFwOw0KIH0NCiAjZW5k aWYNCiANCkBAIC0zNjYsNyArMzYwLDggQEANCiAjaWZkZWYgQ09ORklHX0JM S19ERVZfSURFRE1BDQogCWlmIChod2lmLT5kbWFfYmFzZSkgew0KIAkJaHdp Zi0+aGlnaG1lbSA9IDE7DQotCQlod2lmLT51ZG1hX3NldHVwID0gdmlhODJj eHh4X3VkbWFfc2V0dXA7DQorCQlod2lmLT5tb2Rlc19tYXAgPSB2aWFfbW9k ZXNfbWFwKGh3aWYpOw0KKwkJaHdpZi0+dWRtYV9zZXR1cCA9IHVkbWFfZ2Vu ZXJpY19zZXR1cDsNCiAjIGlmZGVmIENPTkZJR19JREVETUFfQVVUTw0KIAkJ aWYgKCFub2F1dG9kbWEpDQogCQkJaHdpZi0+YXV0b2RtYSA9IDE7DQo= ---559023410-959030623-1025032496=:27820-- - 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/