Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S269469AbUINQN2 (ORCPT ); Tue, 14 Sep 2004 12:13:28 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S269498AbUINQLB (ORCPT ); Tue, 14 Sep 2004 12:11:01 -0400 Received: from clock-tower.bc.nu ([81.2.110.250]:62397 "EHLO localhost.localdomain") by vger.kernel.org with ESMTP id S269469AbUINQGA (ORCPT ); Tue, 14 Sep 2004 12:06:00 -0400 Subject: I2O Updates + Questions From: Alan Cox To: markus.lidel@shadowconnect.com, Linux Kernel Mailing List Content-Type: multipart/mixed; boundary="=-Adly/bYtHMMF30TYG9Kg" Message-Id: <1095174189.16988.10.camel@localhost.localdomain> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.6 (1.4.6-2) Date: Tue, 14 Sep 2004 16:03:10 +0100 Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 25318 Lines: 361 --=-Adly/bYtHMMF30TYG9Kg Content-Type: text/plain Content-Transfer-Encoding: 7bit Markus, the new I2O stuff mostly looks nice. I found a few bits that seem wrong and some of my old cleanup bits still needed The attached patch files - Fix misformed error messages in i2o_block - Add recieve_to_virt and send_to_virt to clean up remaining virt_to_* usage. (I've tweaked them to reflect the i2o_dma objects) so hopefully I got it right - Post an 8 byte startup message area. Some Promises scribble on the wrong dword. Also catch this - Fix several cases where messages got written to I/O space without i2o_raw_writel - Fix a case where we skipped dpt controllers on quiesce and didnt skip them on enable - Add some bits to try and get promise behaving again - Cleaned up the probe loop - Removed the remainder of i2o_retry and used the trick I was using in my test code from back whenever- on congestion report BUS_BUSY and leave it to the scsi layer Looking at the code the event stuff seems totally broken in the new code both in core and the commented out i2o_block code (which now leaks memory). Also i2o_scsi error path does a readl on msg->body[3] which is wrong as msg->body[3] is in kernel space and its contents are an I2O side message value so should get fed to i2o_send_to_virt(). Other question is message size - right now it uses the 2.4 message size which is twice what all the vendors recommend as working best (and doesn't work at all on AMI) Alan --=-Adly/bYtHMMF30TYG9Kg Content-Disposition: inline; filename=a1 Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name=a1; charset=UTF-8 ZGlmZiAtdSAtcCAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIC0tZXhjbHVkZS1mcm9tIC91c3Ivc3Jj L2V4Y2x1ZGUgbGludXgudmFuaWxsYS0yLjYuOXJjMi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19i bG9jay5jIGxpbnV4LTIuNi45cmMyL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmMNCi0t LSBsaW51eC52YW5pbGxhLTIuNi45cmMyL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmMJ MjAwNC0wOS0xNCAxNDoyMjo1My40NDY4MTgzNjggKzAxMDANCisrKyBsaW51eC0yLjYuOXJjMi9k cml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jCTIwMDQtMDktMTQgMTY6MTQ6MzIuODYzMzUy MjQ4ICswMTAwDQpAQCAtNDIwLDcgKzQyMCw2IEBAIHN0YXRpYyBpbnQgaTJvX2Jsb2NrX3JlcGx5 KHN0cnVjdCBpMm9fY28NCiAJCXN0cnVjdCBpMm9fbWVzc2FnZSAqcG1zZzsNCiAJCXUzMiBwbTsN CiANCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZBSUwiKTsNCiAJCS8qDQogCQkgKiBGQUlMZWQg bWVzc2FnZSBmcm9tIGNvbnRyb2xsZXINCiAJCSAqIFdlIGluY3JlbWVudCB0aGUgZXJyb3IgY291 bnQgYW5kIGFib3J0IGl0DQpAQCAtNTM4LDcgKzUzNyw3IEBAIHN0YXRpYyBpbnQgaTJvX2Jsb2Nr X3JlcGx5KHN0cnVjdCBpMm9fY28NCiAJCSAqICAgICAgRG9uJ3Qgc3RpY2sgYSBzdXBlcnRyYWsx MDAgaW50byBjYWNoZSBhZ2dyZXNzaXZlIG1vZGVzDQogCQkgKi8NCiANCi0JCXByaW50ayhLRVJO X0VSUiAiXG4vZGV2LyVzIGVycm9yOiAlcyIsIGRldi0+Z2QtPmRpc2tfbmFtZSwNCisJCXByaW50 ayhLRVJOX0VSUiAiL2Rldi8lcyBlcnJvcjogJXMiLCBkZXYtPmdkLT5kaXNrX25hbWUsDQogCQkg ICAgICAgYnNhX2Vycm9yc1tyZWFkbCgmbXNnLT5ib2R5WzBdKSAmIDB4ZmZmZl0pOw0KIAkJaWYg KHJlYWRsKCZtc2ctPmJvZHlbMF0pICYgMHgwMGZmMDAwMCkNCiAJCQlwcmludGsoIiAtIERETSBh dHRlbXB0ZWQgJWQgcmV0cmllcyIsDQpAQCAtNTYzLDcgKzU2Miw3IEBAIHN0YXRpYyBpbnQgaTJv X2Jsb2NrX3JlcGx5KHN0cnVjdCBpMm9fY28NCiAJCWkyb19ibG9ja19zZ2xpc3RfZnJlZShpcmVx KTsNCiAJCWkyb19ibG9ja19yZXF1ZXN0X2ZyZWUoaXJlcSk7DQogCX0gZWxzZQ0KLQkJcHJpbnRr KEtFUk5fRVJSICJzdGlsbCByZW1haW5pbmcgY2h1bmtzXG4iKTsNCisJCXByaW50ayhLRVJOX0VS UiAiaTJvX2Jsb2NrOiBzdGlsbCByZW1haW5pbmcgY2h1bmtzXG4iKTsNCiANCiAJcmV0dXJuIDE7 DQogfTsNCmRpZmYgLXUgLXAgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSAtLWV4Y2x1ZGUtZnJvbSAv dXNyL3NyYy9leGNsdWRlIGxpbnV4LnZhbmlsbGEtMi42LjlyYzIvZHJpdmVycy9tZXNzYWdlL2ky by9pMm9fY29yZS5jIGxpbnV4LTIuNi45cmMyL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2NvcmUu Yw0KLS0tIGxpbnV4LnZhbmlsbGEtMi42LjlyYzIvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fY29y ZS5jCTIwMDQtMDktMTQgMTQ6MjI6NTMuNDUxODE3NjA4ICswMTAwDQorKysgbGludXgtMi42Ljly YzIvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fY29yZS5jCTIwMDQtMDktMTQgMTY6MzY6MTQuNDQw NDgyNDQ4ICswMTAwDQpAQCAtMzQyLDYgKzM0Miw0NyBAQCB2b2lkICppMm9fY29udGV4dF9saXN0 X2dldCh1MzIgY29udGV4dCwgDQogfQ0KICNlbmRpZg0KIA0KKy8qKg0KKyAqCWkyb19yZWNlaXZl X3RvX3ZpcnQJLQlUdXJuIGFuIEkyTyBtZXNzYWdlIHRvIGEgdmlydHVhbCBhZGRyZXNzDQorICoJ QGM6IGNvbnRyb2xsZXINCisgKglAbXNnOiBtZXNzYWdlIGVuZ2luZSB2YWx1ZQ0KKyAqDQorICoJ VHVybiBhIHJlY2VpdmUgbWVzc2FnZSBmcm9tIGFuIEkyTyBjb250cm9sbGVyIGJ1cyBhZGRyZXNz IGludG8NCisgKglhIExpbnV4IHZpcnR1YWwgYWRkcmVzcy4gVGhlIHNoYXJlZCBwYWdlIGZyYW1l IGlzIGEgbGluZWFyIGJsb2NrDQorICoJc28gd2Ugc2ltcGx5IGhhdmUgdG8gc2hpZnQgdGhlIG9m ZnNldC4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCANCisgKgl3b3JrIGZvciBzZW5kZXIgc2lkZSBt ZXNzYWdlcyBhcyB0aGV5IGFyZSBpb3JlbWFwIG9iamVjdHMNCisgKglwcm92aWRlZCBieSB0aGUg STJPIGNvbnRyb2xsZXIuDQorICovDQorIA0KK3ZvaWQgKmkyb19yZWNlaXZlX3RvX3ZpcnQoc3Ry dWN0IGkyb19jb250cm9sbGVyICpjLCB1MzIgbXNnKQ0KK3sNCisJaWYobXNnIDwgYy0+b3V0X3F1 ZXVlLnBoeXMgfHwgbXNnID49IGMtPm91dF9xdWV1ZS5waHlzICsgYy0+b3V0X3F1ZXVlLmxlbikN CisJCUJVRygpOw0KKwltc2cgLT0gYy0+b3V0X3F1ZXVlLnBoeXM7DQorCXJldHVybiBjLT5vdXRf cXVldWUudmlydCArIG1zZzsNCit9DQorDQorRVhQT1JUX1NZTUJPTF9HUEwoaTJvX3JlY2VpdmVf dG9fdmlydCk7DQorDQorLyoqDQorICoJaTJvX3NlbmRfdG9fdmlydAktCVR1cm4gYW4gSTJPIG1l c3NhZ2UgdG8gYSB2aXJ0dWFsIGFkZHJlc3MNCisgKglAYzogY29udHJvbGxlcg0KKyAqCUBtc2c6 IG1lc3NhZ2UgZW5naW5lIHZhbHVlDQorICoNCisgKglUdXJuIGEgc2VuZCBtZXNzYWdlIGZyb20g YW4gSTJPIGNvbnRyb2xsZXIgYnVzIGFkZHJlc3MgaW50bw0KKyAqCWEgTGludXggdmlydHVhbCBh ZGRyZXNzLiBUaGUgc2hhcmVkIHBhZ2UgZnJhbWUgaXMgYSBsaW5lYXIgYmxvY2sNCisgKglzbyB3 ZSBzaW1wbHkgaGF2ZSB0byBzaGlmdCB0aGUgb2Zmc2V0LiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90 IA0KKyAqCXdvcmsgZm9yIHJlY2VpdmUgc2lkZSBtZXNzYWdlcyBhcyB0aGV5IGFyZSBrbWFsbG9j IG9iamVjdHMNCisgKglpbiBhIGRpZmZlcmVudCBwb29sLg0KKyAqLw0KKyANCit2b2lkICppMm9f c2VuZF90b192aXJ0KHN0cnVjdCBpMm9fY29udHJvbGxlciAqYywgdTMyIG1zZykNCit7DQorCXJl dHVybiBjLT5pbl9xdWV1ZS52aXJ0ICsgbXNnOw0KK30NCisNCitFWFBPUlRfU1lNQk9MX0dQTChp Mm9fc2VuZF90b192aXJ0KTsNCisNCiAvKg0KICAqIEkyTyBDb3JlIHJlcGx5IGhhbmRsZXINCiAg Ki8NCkBAIC0zNTQsNyArMzk1LDcgQEAgc3RhdGljIHZvaWQgaTJvX2NvcmVfcmVwbHkoc3RydWN0 IGkyb19oYQ0KIA0KIAlpZiAobXNnWzBdICYgTVNHX0ZBSUwpIC8vIEZhaWwgYml0IGlzIHNldA0K IAl7DQotCQl1MzIgKnByZXNlcnZlZF9tc2cgPSAodTMyKikoYy0+bXNnX3ZpcnQgKyBtc2dbN10p Ow0KKwkJdTMyICpwcmVzZXJ2ZWRfbXNnID0gKHUzMiopaTJvX3NlbmRfdG9fdmlydChjLCBtc2db N10pOw0KIA0KIAkJaTJvX3JlcG9ydF9zdGF0dXMoS0VSTl9JTkZPLCAiaTJvX2NvcmUiLCBtc2cp Ow0KIAkJaTJvX2R1bXBfbWVzc2FnZShwcmVzZXJ2ZWRfbXNnKTsNCkBAIC0xMzI4LDcgKzEzNjks NyBAQCB2b2lkIGkyb19ydW5fcXVldWUoc3RydWN0IGkyb19jb250cm9sbGVyDQogCQltYigpOw0K IA0KIAkJLyogVGhhdCA5NjAgYnVnIGFnYWluLi4uICovCQ0KLQkJaWYoKG12PUkyT19SRVBMWV9S RUFEMzIoYykpPT0weEZGRkZGRkZGKQ0KKwkJaWYoKG12PUkyT19SRVBMWV9SRUFEMzIoYykpPT0w eEZGRkZGRkZGVUwpDQogCQkJbXY9STJPX1JFUExZX1JFQUQzMihjKTsNCiAJfQkJDQogfQ0KQEAg LTE3ODIsMzggKzE4MjMsMzcgQEAgc3RhdGljIGludCBpMm9fcmVzZXRfY29udHJvbGxlcihzdHJ1 Y3QgaQ0KIAl1MzIgbTsNCiAJdTggKnN0YXR1czsNCiAJZG1hX2FkZHJfdCBzdGF0dXNfcGh5czsN Ci0JdTMyICptc2c7DQorCXZvaWQgKm1zZzsNCiAJbG9uZyB0aW1lOw0KIA0KIAkvKiBRdWllc2Nl IGFsbCBJT1BzIGZpcnN0ICovDQogDQogCWZvciAoaW9wID0gaTJvX2NvbnRyb2xsZXJfY2hhaW47 IGlvcDsgaW9wID0gaW9wLT5uZXh0KQ0KIAl7DQotCQlpZighaW9wLT5kcHQpDQorCQlpZighaW9w LT5kcHQgJiYgIWlvcC0+cHJvbWlzZSkNCiAJCQlpMm9fcXVpZXNjZV9jb250cm9sbGVyKGlvcCk7 DQogCX0NCiANCiAJbT1pMm9fd2FpdF9tZXNzYWdlKGMsICJBZGFwdGVyUmVzZXQiKTsNCi0JaWYo bT09MHhGRkZGRkZGRikJDQorCWlmKG09PTB4RkZGRkZGRkZVTCkJDQogCQlyZXR1cm4gLUVUSU1F RE9VVDsNCi0JbXNnPSh1MzIgKikoYy0+bXNnX3ZpcnQrbSk7DQorCW1zZz0gYy0+bXNnX3ZpcnQg KyBtOw0KIAkNCi0Jc3RhdHVzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYy0+cGRldiwgNCwgJnN0 YXR1c19waHlzKTsNCisJc3RhdHVzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYy0+cGRldiwgOCwg JnN0YXR1c19waHlzKTsNCiAJaWYoc3RhdHVzID09IE5VTEwpIHsNCiAJCXByaW50ayhLRVJOX0VS UiAiSU9QIHJlc2V0IGZhaWxlZCAtIG5vIGZyZWUgbWVtb3J5LlxuIik7DQogCQlyZXR1cm4gLUVO T01FTTsNCiAJfQ0KLQltZW1zZXQoc3RhdHVzLCAwLCA0KTsNCisJbWVtc2V0KHN0YXR1cywgMCwg OCk7DQogCQ0KLQltc2dbMF09RUlHSFRfV09SRF9NU0dfU0laRXxTR0xfT0ZGU0VUXzA7DQotCW1z Z1sxXT1JMk9fQ01EX0FEQVBURVJfUkVTRVQ8PDI0fEhPU1RfVElEPDwxMnxBREFQVEVSX1RJRDsN Ci0JbXNnWzJdPWNvcmVfY29udGV4dDsNCi0JbXNnWzNdPTA7DQotCW1zZ1s0XT0wOw0KLQltc2db NV09MDsNCi0JbXNnWzZdPXN0YXR1c19waHlzOw0KLQltc2dbN109MDsJLyogNjRiaXQgaG9zdCBG SVhNRSAqLw0KLQ0KKwlpMm9fcmF3X3dyaXRlbChFSUdIVF9XT1JEX01TR19TSVpFfFNHTF9PRkZT RVRfMCwgbXNnKTsNCisJaTJvX3Jhd193cml0ZWwoSTJPX0NNRF9BREFQVEVSX1JFU0VUPDwyNHxI T1NUX1RJRDw8MTJ8QURBUFRFUl9USUQsIG1zZys0KTsNCisJaTJvX3Jhd193cml0ZWwoY29yZV9j b250ZXh0LCBtc2crOCk7DQorCWkyb19yYXdfd3JpdGVsKDAsIG1zZyArIDEyKTsNCisJaTJvX3Jh d193cml0ZWwoMCwgbXNnICsgMTYpOw0KKwlpMm9fcmF3X3dyaXRlbCgwLCBtc2cgKyAyMCk7DQor CWkyb19yYXdfd3JpdGVsKHN0YXR1c19waHlzLCBtc2cgKyAyNCk7DQorCWkyb19yYXdfd3JpdGVs KDAsIG1zZyArIDI4KTsJLyogV2UgdXNlIDMyYml0IERNQSBtYXNrLi4gKi8NCiAJaTJvX3Bvc3Rf bWVzc2FnZShjLG0pOw0KIA0KIAkvKiBXYWl0IGZvciBhIHJlcGx5ICovDQpAQCAtMTgyMiwxMyAr MTg2MiwxOSBAQCBzdGF0aWMgaW50IGkyb19yZXNldF9jb250cm9sbGVyKHN0cnVjdCBpDQogCXsN CiAJCWlmKChqaWZmaWVzLXRpbWUpPj0yMCpIWikNCiAJCXsNCi0JCQlwcmludGsoS0VSTl9FUlIg IklPUCByZXNldCB0aW1lb3V0LlxuIik7DQorCQkJcHJpbnRrKEtFUk5fRVJSICJpMm86IElPUCBy ZXNldCB0aW1lb3V0LlxuIik7DQogCQkJLyogVGhlIGNvbnRyb2xsZXIgc3RpbGwgbWF5IHJlc3Bv bmQgYW5kIG92ZXJ3cml0ZQ0KIAkJCSAqIHN0YXR1c19waHlzLCBMRUFLIGl0IHRvIHByZXZlbnQg bWVtb3J5IGNvcnJ1cHRpb24uDQogCQkJICovDQogCQkJcmV0dXJuIC1FVElNRURPVVQ7DQogCQl9 DQotCQlzY2hlZHVsZSgpOw0KKwkJaWYoIHN0YXR1c1sxXSAhPSAwKQ0KKwkJew0KKwkJCXByaW50 ayhLRVJOX1dBUk5JTkcgImkybzogSU9QIHdyb3RlIHdyb25nIHN0YXR1cyB3b3JkLlxuIik7DQor CQkJKnN0YXR1cyA9IDA7DQorCQkJYnJlYWs7DQorCQl9DQorCQltc2xlZXAoMSk7DQogCQliYXJy aWVyKCk7DQogCX0NCiANCkBAIC0xODQ4LDcgKzE4OTQsNyBAQCBzdGF0aWMgaW50IGkyb19yZXNl dF9jb250cm9sbGVyKHN0cnVjdCBpDQogDQogCQl0aW1lID0gamlmZmllczsgDQogCQltID0gSTJP X1BPU1RfUkVBRDMyKGMpOyANCi0JCXdoaWxlKG0gPT0gMFhGRkZGRkZGRikgDQorCQl3aGlsZSht ID09IDBYRkZGRkZGRkZVTCkgDQogCQl7IA0KIAkJCWlmKChqaWZmaWVzLXRpbWUpID49IDMwKkha KQ0KIAkJCXsNCkBAIC0xODgyLDEwICsxOTI4LDEwIEBAIHN0YXRpYyBpbnQgaTJvX3Jlc2V0X2Nv bnRyb2xsZXIoc3RydWN0IGkNCiAJLyogRW5hYmxlIG90aGVyIElPUHMgKi8NCiANCiAJZm9yIChp b3AgPSBpMm9fY29udHJvbGxlcl9jaGFpbjsgaW9wOyBpb3AgPSBpb3AtPm5leHQpDQotCQlpZiAo aW9wICE9IGMpDQorCQlpZiAoaW9wICE9IGMgJiYgIWlvcC0+ZHB0ICYmICFpb3AtPnByb21pc2Up DQogCQkJaTJvX2VuYWJsZV9jb250cm9sbGVyKGlvcCk7DQogDQotCXBjaV9mcmVlX2NvbnNpc3Rl bnQoYy0+cGRldiwgNCwgc3RhdHVzLCBzdGF0dXNfcGh5cyk7DQorCXBjaV9mcmVlX2NvbnNpc3Rl bnQoYy0+cGRldiwgOCwgc3RhdHVzLCBzdGF0dXNfcGh5cyk7DQogCXJldHVybiAwOw0KIH0NCiAN CkBAIC0xOTA0LDcgKzE5NTAsNyBAQCBpbnQgaTJvX3N0YXR1c19nZXQoc3RydWN0IGkyb19jb250 cm9sbGVyDQogew0KIAlsb25nIHRpbWU7DQogCXUzMiBtOw0KLQl1MzIgKm1zZzsNCisJdm9pZCAq bXNnOw0KIAl1OCAqc3RhdHVzX2Jsb2NrOw0KIA0KIAlpZiAoYy0+c3RhdHVzX2Jsb2NrID09IE5V TEwpIA0KQEAgLTE5MjUsMTcgKzE5NzEsMTcgQEAgaW50IGkyb19zdGF0dXNfZ2V0KHN0cnVjdCBp Mm9fY29udHJvbGxlcg0KIAltPWkyb193YWl0X21lc3NhZ2UoYywgIlN0YXR1c0dldCIpOw0KIAlp ZihtPT0weEZGRkZGRkZGKQ0KIAkJcmV0dXJuIC1FVElNRURPVVQ7CQ0KLQltc2c9KHUzMiAqKShj LT5tc2dfdmlydCttKTsNCisJbXNnPSBjLT5tc2dfdmlydCArIG07DQogDQotCW1zZ1swXT1OSU5F X1dPUkRfTVNHX1NJWkV8U0dMX09GRlNFVF8wOw0KLQltc2dbMV09STJPX0NNRF9TVEFUVVNfR0VU PDwyNHxIT1NUX1RJRDw8MTJ8QURBUFRFUl9USUQ7DQotCW1zZ1syXT1jb3JlX2NvbnRleHQ7DQot CW1zZ1szXT0wOw0KLQltc2dbNF09MDsNCi0JbXNnWzVdPTA7DQotCW1zZ1s2XT1jLT5zdGF0dXNf YmxvY2tfcGh5czsNCi0JbXNnWzddPTA7ICAgLyogNjRiaXQgaG9zdCBGSVhNRSAqLw0KLQltc2db OF09c2l6ZW9mKGkyb19zdGF0dXNfYmxvY2spOyAvKiBhbHdheXMgODggYnl0ZXMgKi8NCisJaTJv X3Jhd193cml0ZWwoTklORV9XT1JEX01TR19TSVpFfFNHTF9PRkZTRVRfMCwgbXNnKTsNCisJaTJv X3Jhd193cml0ZWwoSTJPX0NNRF9TVEFUVVNfR0VUPDwyNHxIT1NUX1RJRDw8MTJ8QURBUFRFUl9U SUQsIG1zZyArIDQpOw0KKwlpMm9fcmF3X3dyaXRlbChjb3JlX2NvbnRleHQsIG1zZyArIDgpOw0K KwlpMm9fcmF3X3dyaXRlbCgwLCBtc2cgKyAxMik7DQorCWkyb19yYXdfd3JpdGVsKDAsIG1zZyAr IDE2KTsNCisJaTJvX3Jhd193cml0ZWwoMCwgbXNnICsgMjApOw0KKwlpMm9fcmF3X3dyaXRlbChj LT5zdGF0dXNfYmxvY2tfcGh5cywgbXNnICsgMjQpOw0KKwlpMm9fcmF3X3dyaXRlbCgwLCBtc2cg KyAyOCk7DQorCWkyb19yYXdfd3JpdGVsKHNpemVvZihpMm9fc3RhdHVzX2Jsb2NrKSwgbXNnICsg MzIpOyAvKiBhbHdheXMgODggYnl0ZXMgKi8NCiANCiAJaTJvX3Bvc3RfbWVzc2FnZShjLG0pOw0K IA0KQEAgLTIyNjgsNiArMjMxNCw2MyBAQCBzdGF0aWMgdm9pZCBpMm9fc3lzX3NodXRkb3duKHZv aWQpDQogfQ0KIA0KIC8qKg0KKyAqCWkyb19zZW5kX25vcAkJLQlzZW5kIGEgY29yZSBOT1AgbWVz c2FnZQ0KKyAqCUBjOiBjb250cm9sbGVyDQorICoJDQorICoJU2VuZCBhIG5vLW9wZXJhdGlvbiBt ZXNzYWdlIHdpdGggYSByZXBseSBzZXQgdG8gY2F1c2Ugbm8NCisgKglhY3Rpb24gZWl0aGVyLiBO ZWVkZWQgZm9yIGJyaW5naW5nIHVwIHByb21pc2UgY29udHJvbGxlcnMNCisgKi8NCisgDQorc3Rh dGljIHZvaWQgaTJvX3NlbmRfbm9wKHN0cnVjdCBpMm9fY29udHJvbGxlciAqYykNCit7DQorCXUz MiBtID0gaTJvX3dhaXRfbWVzc2FnZShjLCAiU2VuZE5vcCIpOw0KKwl2b2lkICptc2c7DQorCWlm KG0gPT0gMHhGRkZGRkZGRlVMKQ0KKwkJcmV0dXJuOw0KKwltc2cgPSBtICsgYy0+bXNnX3ZpcnQ7 DQorCQ0KKwlpMm9fcmF3X3dyaXRlbChUSFJFRV9XT1JEX01TR19TSVpFfFNHTF9PRkZTRVRfMCwg bXNnKTsNCisJaTJvX3Jhd193cml0ZWwoSTJPX0NNRF9VVElMX05PUHwgSE9TVF9USUQgPDwgMTIg fCAwICAsIG1zZys0KTsNCisJaTJvX3Jhd193cml0ZWwoMCwgbXNnKzgpOw0KKwkNCisJaTJvX3Bv c3RfbWVzc2FnZShjLCBtKTsNCit9DQorDQorLyoqDQorICoJaTJvX2FjdGl2YXRlX3Byb21pc2UJ LQlhY3RpdmF0ZSBQcm9taXNlIG5vdCBxdWl0ZSBJMk8NCisgKglAYzogY29udHJvbGxlcg0KKyAq DQorICoJQnJpbmcgdXAgYW5kIGFjdGl2YXRlIHRoZSBQcm9taXNlIFNYIEkyTyBjb250cm9sbGVy cyB3aGljaCBkb24ndA0KKyAqCXF1aXRlIGZvbGxvdyBJMk8gYW5kIGRvbid0IGxpa2UgYW4gSTJP IGJvb3QgYXQgYWxsLg0KKyAqLw0KKyANCitzdGF0aWMgaW50IGkyb19hY3RpdmF0ZV9wcm9taXNl KHN0cnVjdCBpMm9fY29udHJvbGxlciAqaW9wKQ0KK3sNCisJaW50IHJldCA9IDA7DQorCS8qIEJl YXQgdXAgdGhlIGhhcmR3YXJlIGZpcnN0IG9mIGFsbCAqLw0KKwlzdHJ1Y3QgcGNpX2RldiAqaTk2 MCA9IHBjaV9maW5kX3Nsb3QoaW9wLT5wZGV2LT5idXMtPm51bWJlciwgUENJX0RFVkZOKFBDSV9T TE9UKGlvcC0+cGRldi0+ZGV2Zm4pLCAwKSk7DQorCWlmKGk5NjApDQorCQlwY2lfd3JpdGVfY29u ZmlnX3dvcmQoaTk2MCwgMHg0MiwgMCk7DQorCQkNCisJLyogRm9sbG93IHRoaXMgc2VxdWVuY2Ug cHJlY2lzZWx5IG9yIHRoZSBjb250cm9sbGVyDQorCSAgIGNlYXNlcyB0byBwZXJmb3JtIHVzZWZ1 bCBmdW5jdGlvbnMgdW50aWwgcmVib290ICovDQorCWkyb19zZW5kX25vcChpb3ApOw0KKwlpZihp Mm9fcmVzZXRfY29udHJvbGxlcihpb3ApIDwgMCB8fA0KKwkgIChpMm9fc3RhdHVzX2dldChpb3Ap IDwgMCkgfHwNCisJICAoaTJvX2luaXRfb3V0Ym91bmRfcShpb3ApIDwgMCkgfHwNCisJICAoaTJv X3Bvc3Rfb3V0Ym91bmRfbWVzc2FnZXMoaW9wKSA8IDApKQ0KKwkgIAlyZXQgPSAtMTsNCisJICAJ DQorCWkyb19zZW5kX25vcChpb3ApOw0KKw0KKwlpZihpMm9fc3RhdHVzX2dldChpb3ApIDwgMCkN CisJCXJldCA9IC0xIDsNCisJaWYoaTk2MCkNCisJCXBjaV93cml0ZV9jb25maWdfd29yZChpOTYw LCAweDQyLCAweDNGRik7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KKy8qKg0KICAqCWkyb19hY3Rp dmF0ZV9jb250cm9sbGVyCS0JYnJpbmcgY29udHJvbGxlciB1cCB0byBIT0xEDQogICoJQGlvcDog Y29udHJvbGxlcg0KICAqDQpAQCAtMjMzOSwxNCArMjQ0MiwxNCBAQCBpbnQgaTJvX2luaXRfb3V0 Ym91bmRfcShzdHJ1Y3QgaTJvX2NvbnRyDQogCXU4ICpzdGF0dXM7DQogCWRtYV9hZGRyX3Qgc3Rh dHVzX3BoeXM7DQogCXUzMiBtOw0KLQl1MzIgKm1zZzsNCisJdm9pZCAqbXNnOw0KIAl1MzIgdGlt ZTsNCiANCiAJZHByaW50ayhLRVJOX0lORk8gIiVzOiBJbml0aWFsaXppbmcgT3V0Ym91bmQgUXVl dWUuLi5cbiIsIGMtPm5hbWUpOw0KIAltPWkyb193YWl0X21lc3NhZ2UoYywgIk91dGJvdW5kSW5p dCIpOw0KIAlpZihtPT0weEZGRkZGRkZGKQ0KIAkJcmV0dXJuIC1FVElNRURPVVQ7DQotCW1zZz0o dTMyICopKGMtPm1zZ192aXJ0K20pOw0KKwltc2c9IGMtPm1zZ192aXJ0ICsgbTsNCiANCiAJc3Rh dHVzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYy0+cGRldiwgNCwgJnN0YXR1c19waHlzKTsNCiAJ aWYgKHN0YXR1cz09TlVMTCkgew0KQEAgLTIzNTYsMTUgKzI0NTksMTUgQEAgaW50IGkyb19pbml0 X291dGJvdW5kX3Eoc3RydWN0IGkyb19jb250cg0KIAl9DQogCW1lbXNldChzdGF0dXMsIDAsIDQp Ow0KIA0KLQltc2dbMF09IEVJR0hUX1dPUkRfTVNHX1NJWkV8IFRSTF9PRkZTRVRfNjsNCi0JbXNn WzFdPSBJMk9fQ01EX09VVEJPVU5EX0lOSVQ8PDI0IHwgSE9TVF9USUQ8PDEyIHwgQURBUFRFUl9U SUQ7DQotCW1zZ1syXT0gY29yZV9jb250ZXh0Ow0KLQltc2dbM109IDB4MDEwNjsJCQkJLyogVHJh bnNhY3Rpb24gY29udGV4dCAqLw0KLQltc2dbNF09IDQwOTY7CQkJCS8qIEhvc3QgcGFnZSBmcmFt ZSBzaXplICovDQotCS8qIEZyYW1lIHNpemUgaXMgaW4gd29yZHMuIDI1NiBieXRlcyBhIGZyYW1l IGZvciBub3cgKi8NCi0JbXNnWzVdPSBNU0dfRlJBTUVfU0laRTw8MTZ8MHg4MDsJLyogT3V0Ym91 bmQgbXNnIGZyYW1lIHNpemUgaW4gd29yZHMgYW5kIEluaXRjb2RlICovDQotCW1zZ1s2XT0gMHhE MDAwMDAwNDsJCQkvKiBTaW1wbGUgU0cgTEUsIEVPQiAqLw0KLQltc2dbN109IHN0YXR1c19waHlz Ow0KKwlpMm9fcmF3X3dyaXRlbChFSUdIVF9XT1JEX01TR19TSVpFfCBUUkxfT0ZGU0VUXzYsIG1z Zyk7DQorCWkyb19yYXdfd3JpdGVsKEkyT19DTURfT1VUQk9VTkRfSU5JVDw8MjQgfCBIT1NUX1RJ RDw8MTIgfCBBREFQVEVSX1RJRCwgbXNnICsgNCk7Ow0KKwlpMm9fcmF3X3dyaXRlbChjb3JlX2Nv bnRleHQsIG1zZyArIDgpOw0KKwlpMm9fcmF3X3dyaXRlbCgweDAxMDYsIG1zZyArIDEyKTsJLyog VHJhbnNhY3Rpb24gY29udGV4dCAqLw0KKwlpMm9fcmF3X3dyaXRlbCg0MDk2LCBtc2cgKyAxNik7 CQkvKiBIb3N0IHBhZ2UgZnJhbWUgc2l6ZSAqLw0KKwkvKiBGcmFtZSBzaXplIGlzIGluIHdvcmRz LiAxMjggYnl0ZXMgYSBmcmFtZSBmb3Igbm93LiBTQ1NJIGFzc3VtZXMgdGhpcyAqLw0KKwlpMm9f cmF3X3dyaXRlbChNU0dfRlJBTUVfU0laRSA8PCAxNnwweDgwLCBtc2cgKyAyMCk7CS8qIE91dGJv dW5kIG1zZyBmcmFtZSBzaXplIGluIHdvcmRzIGFuZCBJbml0Y29kZSAqLw0KKwlpMm9fcmF3X3dy aXRlbCgweEQwMDAwMDA0LCBtc2cgKyAyNCk7CS8qIFNpbXBsZSBTRyBMRSwgRU9CICovDQorCWky b19yYXdfd3JpdGVsKHN0YXR1c19waHlzLCBtc2cgKyAyOCk7DQogDQogCWkyb19wb3N0X21lc3Nh Z2UoYyxtKTsNCiAJDQpAQCAtMjQzNSw2ICsyNTM4LDggQEAgaW50IGkyb19wb3N0X291dGJvdW5k X21lc3NhZ2VzKHN0cnVjdCBpMg0KIAlmb3IoaT0wOyBpPCBOTUJSX01TR19GUkFNRVM7IGkrKykg ew0KIAkJSTJPX1JFUExZX1dSSVRFMzIoYyxtKTsNCiAJCW1iKCk7DQorCQlpZihjLT5wcm9taXNl KQ0KKwkJCXVkZWxheSgxKTsJLyogTWF5IGJlIG92ZXJraWxsICovDQogCQltICs9IChNU0dfRlJB TUVfU0laRSA8PCAyKTsNCiAJfQ0KIA0KQEAgLTM2NzcsNyArMzc4Miw3IEBAIGludCBfX2luaXQg aTJvX3BjaV9pbnN0YWxsKHN0cnVjdCBwY2lfZGUNCiAJaWYoZGV2LT5zdWJzeXN0ZW1fdmVuZG9y ID09IFBDSV9WRU5ET1JfSURfUFJPTUlTRSkNCiAJew0KIAkJYy0+cHJvbWlzZSA9IDE7DQotCQlw cmludGsoS0VSTl9JTkZPICJJMk86IFByb21pc2Ugd29ya2Fyb3VuZHMgYWN0aXZhdGVkLlxuIik7 DQorCQlwcmludGsoS0VSTl9JTkZPICJJMk86IFByb21pc2UgdmFndWVseSBJMk8gbW9kZSBhY3Rp dmF0ZWQuXG4iKTsNCiAJfQ0KIA0KIAkvKg0KQEAgLTM2ODYsOSArMzc5MSw5IEBAIGludCBfX2lu aXQgaTJvX3BjaV9pbnN0YWxsKHN0cnVjdCBwY2lfZGUNCiAJICovDQogCSANCiAJaWYoZGV2LT52 ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9EUFQpIHsNCi0JCWMtPmRwdD0xOw0KKwkJYy0+ZHB0ID0g MTsNCiAJCWlmKGRldi0+ZGV2aWNlID09IDB4QTUxMSkNCi0JCQljLT5yYXB0b3I9MTsNCisJCQlj LT5yYXB0b3IgPSAxOw0KIAl9DQogDQogCWZvcihpPTA7IGk8NjsgaSsrKQ0KQEAgLTM4NDYsMTYg KzM5NTEsMzMgQEAgaW50IF9faW5pdCBpMm9fcGNpX3NjYW4odm9pZCkNCiANCiAJd2hpbGUgKChk ZXYgPSBwY2lfZmluZF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KSkgIT0gTlVM TCkNCiAJew0KLQkJaWYoKGRldi0+Y2xhc3M+PjgpIT1QQ0lfQ0xBU1NfSU5URUxMSUdFTlRfSTJP ICYmDQotCQkgICAoZGV2LT52ZW5kb3IhPVBDSV9WRU5ET1JfSURfRFBUIHx8IGRldi0+ZGV2aWNl IT0weEE1MTEpKQ0KLQkJCWNvbnRpbnVlOw0KLQ0KLQkJaWYoKGRldi0+Y2xhc3M+PjgpPT1QQ0lf Q0xBU1NfSU5URUxMSUdFTlRfSTJPICYmDQotCQkgICAoZGV2LT5jbGFzcyYweEZGKT4xKQ0KKwkJ aWYgKGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX1BST01JU0UgJiYNCisJ CSAgICBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgwMDAwICYmDQorCQkgICAgZGV2LT52ZW5k b3IgPT0gUENJX1ZFTkRPUl9JRF9JTlRFTCkNCiAJCXsNCi0JCQlwcmludGsoS0VSTl9JTkZPICJp Mm86IEkyTyBDb250cm9sbGVyIGZvdW5kIGJ1dCBkb2VzIG5vdCBzdXBwb3J0IEkyTyAxLjUgKHNr aXBwaW5nKS5cbiIpOw0KLQkJCWNvbnRpbnVlOw0KKwkJCS8qIFRoaXMgaXMgYmVzdCBkZXNjcmli ZWQgYXMgcXVpcmt5ICovDQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiaTJvOiBQcm9taXNlIFN1cGVy VHJhayBTWDYwMDAgc2VyaWVzIGNvbnRyb2xsZXIgb24gYnVzICVkIGF0ICVkLlxuIiwNCisJCQkJ ZGV2LT5idXMtPm51bWJlciwgZGV2LT5kZXZmbik7DQorCQl9DQorCQllbHNlIGlmKGRldi0+dmVu ZG9yID09IFBDSV9WRU5ET1JfSURfRFBUICYmDQorCQkJZGV2LT5kZXZpY2UgPT0gMHhBNTExKQ0K KwkJew0KKwkJCXByaW50ayhLRVJOX0lORk8gImkybzogRFBUIGNvbnRyb2xsZXIgb24gYnVzICVk IGF0ICVkLlxuIiwNCisJCQkJZGV2LT5idXMtPm51bWJlciwgZGV2LT5kZXZmbik7DQorCQl9DQor CQllbHNlIGlmIChkZXYtPmNsYXNzID4+IDggPT0gUENJX0NMQVNTX0lOVEVMTElHRU5UX0kyTykN CisJCXsNCisJCQlpZigoZGV2LT5jbGFzcyAmIDB4RkYpID4gMSkNCisJCQl7DQorCQkJCXByaW50 ayhLRVJOX0lORk8gImkybzogSTJPIENvbnRyb2xsZXIgZm91bmQgYnV0IGRvZXMgbm90IHN1cHBv cnQgSTJPIDEuNSAoc2tpcHBpbmcpLlxuIik7DQorCQkJCWNvbnRpbnVlOw0KKwkJCX0NCisJCQlw cmludGsoS0VSTl9JTkZPICJpMm86IEkyTyBjb250cm9sbGVyIG9uIGJ1cyAlZCBhdCAlZC5cbiIs DQorCQkJCWRldi0+YnVzLT5udW1iZXIsIGRldi0+ZGV2Zm4pOw0KIAkJfQ0KKwkJZWxzZQkvKiBO b3QgSTJPICovDQorCQkJY29udGludWU7DQorCQkJDQogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2Uo ZGV2KSkNCiAJCQljb250aW51ZTsNCiAJCXByaW50ayhLRVJOX0lORk8gImkybzogSTJPIGNvbnRy b2xsZXIgb24gYnVzICVkIGF0ICVkLlxuIiwNCmRpZmYgLXUgLXAgLS1uZXctZmlsZSAtLXJlY3Vy c2l2ZSAtLWV4Y2x1ZGUtZnJvbSAvdXNyL3NyYy9leGNsdWRlIGxpbnV4LnZhbmlsbGEtMi42Ljly YzIvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fc2NzaS5jIGxpbnV4LTIuNi45cmMyL2RyaXZlcnMv bWVzc2FnZS9pMm8vaTJvX3Njc2kuYw0KLS0tIGxpbnV4LnZhbmlsbGEtMi42LjlyYzIvZHJpdmVy cy9tZXNzYWdlL2kyby9pMm9fc2NzaS5jCTIwMDQtMDktMTQgMTQ6MjI6NTMuNDU5ODE2MzkyICsw MTAwDQorKysgbGludXgtMi42LjlyYzIvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fc2NzaS5jCTIw MDQtMDktMTQgMTc6MDI6MDIuMzIwMTY4OTY4ICswMTAwDQpAQCAtMjc0LDUzICsyNzQsNiBAQCBz dGF0aWMgY29uc3QgY2hhciAqaTJvX3Njc2lfaW5mbyhzdHJ1Y3QgDQogCXJldHVybiBob3N0ZGF0 YS0+aW9wLT5uYW1lOw0KIH0NCiANCi0jaWYgMA0KLS8qKg0KLSAqCWkyb19yZXRyeV9ydW4JCS0J cmV0cnkgb24gdGltZW91dA0KLSAqCUBmOiB1bnVzZWQNCi0gKg0KLSAqCVJldHJ5IGNvbmdlc3Rl ZCBmcmFtZXMuIFRoaXMgYWN0dWFsbHkgbmVlZHMgcHVzaGluZyBkb3duIGludG8NCi0gKglpMm8g Y29yZS4gV2Ugc2hvdWxkIG9ubHkgYm90aGVyIHRoZSBPU00gd2l0aCB0aGlzIHdoZW4gd2UgY2Fu J3QNCi0gKglxdWV1ZSBhbmQgcmV0cnkgdGhlIGZyYW1lLiBPciBwZXJoYXBzIHdlIHNob3VsZCBj YWxsIHRoZSBPU00NCi0gKglhbmQgaXRzIGRlZmF1bHQgaGFuZGxlciBzaG91bGQgYmUgdGhpcyBp biB0aGUgY29yZSwgYW5kIHRoaXMNCi0gKgljYWxsIGEgMm5kICJJIGdpdmUgdXAiIGhhbmRsZXIg aW4gdGhlIE9TTSA/DQotICovDQotDQotc3RhdGljIHZvaWQgaTJvX3JldHJ5X3J1bih1bnNpZ25l ZCBsb25nIGYpDQotew0KLQlpbnQgaTsNCi0JdW5zaWduZWQgbG9uZyBmbGFnczsNCi0NCi0Jc3Bp bl9sb2NrX2lycXNhdmUoJnJldHJ5X2xvY2ssIGZsYWdzKTsNCi0JZm9yIChpID0gMDsgaSA8IHJl dHJ5X2N0OyBpKyspDQotCQlpMm9fcG9zdF9tZXNzYWdlKHJldHJ5X2N0cmxbaV0sIHZpcnRfdG9f YnVzKHJldHJ5W2ldKSk7DQotCXJldHJ5X2N0ID0gMDsNCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmcmV0cnlfbG9jaywgZmxhZ3MpOw0KLX0NCi0NCi0vKioNCi0gKglmbHVzaF9wZW5kaW5nCQkt CWVtcHR5IHRoZSByZXRyeSBxdWV1ZQ0KLSAqDQotICoJVHVybiBlYWNoIG9mIHRoZSBwZW5kaW5n IGNvbW1hbmRzIGludG8gYSBOT1AgYW5kIHBvc3QgaXQgYmFjaw0KLSAqCXRvIHRoZSBjb250cm9s bGVyIHRvIGNsZWFyIGl0Lg0KLSAqLw0KLQ0KLXN0YXRpYyB2b2lkIGZsdXNoX3BlbmRpbmcodm9p ZCkNCi17DQotCWludCBpOw0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOw0KLQ0KLQlzcGluX2xvY2tf aXJxc2F2ZSgmcmV0cnlfbG9jaywgZmxhZ3MpOw0KLQlmb3IgKGkgPSAwOyBpIDwgcmV0cnlfY3Q7 IGkrKykgew0KLQkJcmV0cnlbaV1bMF0gJj0gfjB4RkZGRkZGOw0KLQkJcmV0cnlbaV1bMF0gfD0g STJPX0NNRF9VVElMX05PUCA8PCAyNDsNCi0JCWkyb19wb3N0X21lc3NhZ2UocmV0cnlfY3RybFtp XSwgdmlydF90b19idXMocmV0cnlbaV0pKTsNCi0JfQ0KLQlyZXRyeV9jdCA9IDA7DQotCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnJldHJ5X2xvY2ssIGZsYWdzKTsNCi19DQotI2VuZGlmDQotDQog LyoqDQogICoJaTJvX3Njc2lfcmVwbHkgLSBTQ1NJIE9TTSBtZXNzYWdlIHJlcGx5IGhhbmRsZXIN CiAgKglAYzogY29udHJvbGxlciBpc3N1aW5nIHRoZSByZXBseQ0KQEAgLTM0OCwxNiArMzAxLDE3 IEBAIHN0YXRpYyBpbnQgaTJvX3Njc2lfcmVwbHkoc3RydWN0IGkyb19jb24NCiAJaWYgKG1zZy0+ dS5oZWFkWzBdICYgKDEgPDwgMTMpKSB7DQogCQlzdHJ1Y3QgaTJvX21lc3NhZ2UgKnBtc2c7CS8q IHByZXNlcnZlZCBtZXNzYWdlICovDQogCQl1MzIgcG07DQorCQlpbnQgZXJyID0gRElEX0VSUk9S Ow0KIA0KLQkJcG0gPSByZWFkbCgmbXNnLT5ib2R5WzNdKTsNCisJCXBtID0gbGUzMl90b19jcHUo bXNnLT5ib2R5WzNdKTsNCiANCi0JCXBtc2cgPSBjLT5pbl9xdWV1ZS52aXJ0ICsgcG07DQorCQlw bXNnID0gaTJvX3NlbmRfdG9fdmlydChwbSk7DQogDQotCQlwcmludGsoIklPUCBmYWlsLlxuIik7 DQotCQlwcmludGsoIkZyb20gJWQgVG8gJWQgQ21kICVkLlxuIiwNCisJCXByaW50ayhLRVJOX0VS UiAiSU9QIGZhaWwuXG4iKTsNCisJCXByaW50ayhLRVJOX0VSUiAiRnJvbSAlZCBUbyAlZCBDbWQg JWQuXG4iLA0KIAkJICAgICAgIChtc2ctPnUuaGVhZFsxXSA+PiAxMikgJiAweEZGRiwNCiAJCSAg ICAgICBtc2ctPnUuaGVhZFsxXSAmIDB4RkZGLCBtc2ctPnUuaGVhZFsxXSA+PiAyNCk7DQotCQlw cmludGsoIkZhaWx1cmUgQ29kZSAlZC5cbiIsIG1zZy0+Ym9keVswXSA+PiAyNCk7DQorCQlwcmlu dGsoS0VSTl9FUlIgIkZhaWx1cmUgQ29kZSAlZC5cbiIsIG1zZy0+Ym9keVswXSA+PiAyNCk7DQog CQlpZiAobXNnLT5ib2R5WzBdICYgKDEgPDwgMTYpKQ0KIAkJCXByaW50aygiRm9ybWF0IGVycm9y LlxuIik7DQogCQlpZiAobXNnLT5ib2R5WzBdICYgKDEgPDwgMTcpKQ0KQEAgLTM2NSwxNiArMzE5 LDE4IEBAIHN0YXRpYyBpbnQgaTJvX3Njc2lfcmVwbHkoc3RydWN0IGkyb19jb24NCiAJCWlmICht c2ctPmJvZHlbMF0gJiAoMSA8PCAxOCkpDQogCQkJcHJpbnRrKCJQYXRoIFN0YXRlLlxuIik7DQog CQlpZiAobXNnLT5ib2R5WzBdICYgKDEgPDwgMTgpKQ0KKwkJew0KIAkJCXByaW50aygiQ29uZ2Vz dGlvbi5cbiIpOw0KKwkJCWVyciA9IERJRF9CVVNfQlVTWTsNCisJCX0NCiANCi0JCXByaW50aygi RmFpbGluZyBtZXNzYWdlIGlzICVwLlxuIiwgcG1zZyk7DQorCQlwcmludGsoS0VSTl9ERUJVRyAi RmFpbGluZyBtZXNzYWdlIGlzICVwLlxuIiwgcG1zZyk7DQogDQogCQljbWQgPSBpMm9fY250eHRf bGlzdF9nZXQoYywgcmVhZGwoJnBtc2ctPnUucy50Y250eHQpKTsNCiAJCWlmICghY21kKQ0KIAkJ CXJldHVybiAxOw0KIA0KLQkJcHJpbnRrKCJBYm9ydGVkICVsZFxuIiwgY21kLT5zZXJpYWxfbnVt YmVyKTsNCi0JCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2Ow0KKwkJY21kLT5yZXN1bHQg PSBlcnIgPDwgMTY7DQogCQljbWQtPnNjc2lfZG9uZShjbWQpOw0KIA0KIAkJLyogTm93IGZsdXNo IHRoZSBtZXNzYWdlIGJ5IG1ha2luZyBpdCBhIE5PUCAqLw0K --=-Adly/bYtHMMF30TYG9Kg Content-Disposition: inline; filename=a2 Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name=a2; charset=UTF-8 ZGlmZiAtdSAtcCAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIC0tZXhjbHVkZS1mcm9tIC91c3Ivc3Jj L2V4Y2x1ZGUgbGludXgudmFuaWxsYS0yLjYuOXJjMi9pbmNsdWRlL2xpbnV4L2kyby5oIGxpbnV4 LTIuNi45cmMyL2luY2x1ZGUvbGludXgvaTJvLmgNCi0tLSBsaW51eC52YW5pbGxhLTIuNi45cmMy L2luY2x1ZGUvbGludXgvaTJvLmgJMjAwNC0wOS0xNCAxNDoyMjo1Ny4zMTgyMjk4MjQgKzAxMDAN CisrKyBsaW51eC0yLjYuOXJjMi9pbmNsdWRlL2xpbnV4L2kyby5oCTIwMDQtMDktMTQgMTY6MzY6 MTEuMzcyOTQ4Nzg0ICswMTAwDQpAQCAtNDcsNyArNDcsNyBAQCBzdHJ1Y3QgaTJvX21lc3NhZ2Ug ew0KIAkJCXUzMiBmdW5jdGlvbjo4Ow0KIAkJCXUzMiBpY250eHQ7CS8qIGluaXRpYXRvciBjb250 ZXh0ICovDQogCQkJdTMyIHRjbnR4dDsJLyogdHJhbnNhY3Rpb24gY29udGV4dCAqLw0KLQkJfSBz Ow0KKwkJfSBfX2F0dHJpYnV0ZSgocGFja2VkKSkgczsNCiAJCXUzMiBoZWFkWzRdOw0KIAl9IHU7 DQogCS8qIExpc3QgZm9sbG93cyAqLw0KQEAgLTU5Nyw2ICs1OTcsMTAgQEAgZXh0ZXJuIGludCBp Mm9fcGFybV9maWVsZF9nZXQoc3RydWN0IGkybw0KIGV4dGVybiBpbnQgaTJvX3Bhcm1fZmllbGRf c2V0KHN0cnVjdCBpMm9fZGV2aWNlICosIGludCwgaW50LCB2b2lkICosIGludCk7DQogZXh0ZXJu IGludCBpMm9fcGFybV90YWJsZV9nZXQoc3RydWN0IGkyb19kZXZpY2UgKiwgaW50LCBpbnQsIGlu dCwgdm9pZCAqLCBpbnQsDQogCQkJICAgICAgdm9pZCAqLCBpbnQpOw0KKyANCitleHRlcm4gdm9p ZCAqaTJvX3NlbmRfdG9fdmlydChzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKiwgdTMyKTsNCitleHRl cm4gdm9pZCAqaTJvX3JlY2VpdmVfdG9fdmlydChzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKiwgdTMy KTsNCisNCiAvKiBGSVhNRTogcmVtb3ZlDQogZXh0ZXJuIGludCBpMm9fcXVlcnlfdGFibGUoaW50 LCBzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKiwgaW50LCBpbnQsIGludCwNCiAJCQkgICB2b2lkICos IGludCwgdm9pZCAqLCBpbnQpOw0K --=-Adly/bYtHMMF30TYG9Kg-- - 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/