From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from nz-out-0506.google.com (nz-out-0506.google.com [64.233.162.230]) by ozlabs.org (Postfix) with ESMTP id EF4B0DDF31 for ; Thu, 5 Jul 2007 00:52:00 +1000 (EST) Received: by nz-out-0506.google.com with SMTP id l1so1435959nzf for ; Wed, 04 Jul 2007 07:51:59 -0700 (PDT) Message-ID: Date: Wed, 4 Jul 2007 17:51:58 +0300 From: "Kimmo Surakka" Sender: kimmo.surakka@gmail.com To: linuxppc-embedded@ozlabs.org Subject: TQM5200 problems (kernel 2.4) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_81675_14173301.1183560718626" List-Id: Linux on Embedded PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , ------=_Part_81675_14173301.1183560718626 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello all, I've been playing with a TQM5200 card and trying to make its I2C communications even relatively reliable. To communicate with the card, I use PPP over RS-232 (on port PSC0), baud rate 115200. All the files are stored on the card's own 32 MB flash. On my tests, I've met three problems: PPP connection unreliability, I2C unreliability, and flash unreliability. I anybody has any ideas on what could be causing these, I'd be happy to hear. Also, I've put together two patches that help a bit, so if somebody else is struggling with the same problems, feel free to test these patches. Problem #1: PPP unreliability. If I just fetch the latest 2.4 kernel from http://www.denx.de/cgi-bin/gitweb.cgi?p=linuxppc_2_4_devel.git;a=summary and build it with a pretty minimal configuration file, PPP connection is really unreliable. I've set the MTS to be 576 bytes, because on a continuous transfer from TQM I get CRC error about once every ten seconds. This triggers TCP CRC recalculation code from git commits e3145f7943db03e3808e493555b28e7696e8f408 and 8bab0e983d5fc1ad53c34c0cc68a07d9339a7148. As a result, my dmesg log gets filled with lines like: tcp_recheck_csum: seq 0x1e9a515 retransmit, csum 0x4bb2 OK? tcp_recheck_csum: seq 0x1e9ad75 retransmit, csum 0x32fe OK? tcp_recheck_csum: seq 0x1e9ad75 retransmit, csum 0x32fe OK? tcp_recheck_csum: seq 0x1e9ad75 retransmit, csum 0x32fe OK? tcp_recheck_csum: seq 0x1e9af8d retransmit, csum 0xc296 OK? tcp_recheck_csum: seq 0x1e9af8d retransmit, csum 0xc272 OK? All PPP transmission also stalls. Data just won't arrive anymore. I put together a patch that undoes the TCP/IP workaround patches. When I apply the patch to the latest git commit, the errors seem to go away. PPP connection now works even though there are the occational CRC errors due to unreliable serial line. My conclusion: the TCP/IP workaround is somehow broken. I'm not sure what bug it was meant to work around, but while doing that it caused serious problems with PPP communication. Problem #2: I2C unreliability. My test setup has two slaves connected on the TQM5200 I2C bus #1. On default setup this bus is disabled, so I needed to edit file drivers/i2c/i2c-tqm5200.c and changethe value of MPC5xxx_I2C1_ENABLE. After this change, the bus gets initialised. However, it's not reliable. I send smbus_read_word and smbus_write_word commands to the slaves every few milliseconds. Sooner or later the bus gets stuck, apparently forever. I found an old I2c patch for mpc5200 and modified it a bit. With the patch applied, the kernel tries to detect bus lock-ups and reset the bus. This helps a lot: now the lock-ups are only temporary. However, the dmesg log gets polluted with lines like Warning: kfree_skb on hard IRQ c008ecfc Warning: kfree_skb on hard IRQ c008ecfc Warning: kfree_skb on hard IRQ c008ecfc Warning: kfree_skb on hard IRQ c008ecfc Warning: kfree_skb on hard IRQ c008ecfc Warning: kfree_skb on hard IRQ c008ecfc (always the same IRQ). The seem to come from net/core/skbuff.c, and caused by kfree_skb being called while in_irq(). Problem #3: flash unreliability. After some time (weeks or so) the system's flash filesystem (JFFS2) starts to misbehave. On every boot I see lines like jffs2_scan_eraseblock(): Node at 0x000bce2c {0x1985, 0x0000, 0x00000000) has invalid CRC 0x6ca60000 (calculated 0xbe76ea63) jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x000bce34: 0x6ca6 instead jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x000bce48: 0x0019 instead jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x000bce4c: 0x42c6 instead jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x000bce50: 0x42c6 instead jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x000bce54: 0x42c6 instead jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x000bce58: 0x0019 instead jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x000bce64: 0x0600 instead After a number of boots the system finally fails to boot at all. The errors go away by erasing the flash and recreating the filesystem, but the come back again at some point. Actually, I'm not sure if this error still exists on the latest kernel sources. Before this, I've been using the sources from snapshot ftp://ftp.denx.de/pub/linux/linuxppc_2_4_devel-2005-10-25-1440.tar.bz2, but since the code starts to be pretty old, I switched to using the git repository. I'll continue tests with the latest code and see if the problem still exists. -- Kimmo Surakka http://www.iki.fi/kusti ------=_Part_81675_14173301.1183560718626 Content-Type: text/x-patch; name=undo-tcpip-workaround.patch; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_f3pxbpu9 Content-Disposition: attachment; filename="undo-tcpip-workaround.patch" VGhpcyBwYXRjaCB1bmRvZXMgdGhlIGdpdCBjb21taXRzIGUzMTQ1Zjc5NDNkYjAzZTM4MDhlNDkz NTU1YjI4ZTc2OTZlOGY0MDgKYW5kIDhiYWIwZTk4M2Q1ZmMxYWQ1M2MzNGMwY2M2OGEwN2Q5MzM5 YTcxNDgsCiJXb3JrLWFyb3VuZCBmb3IgVENQL0lQIGVycm9ycyIKCmRpZmYgLS1naXQgYS9hcmNo L3BwYy9saWIvTWFrZWZpbGUgYi9hcmNoL3BwYy9saWIvTWFrZWZpbGUKaW5kZXggZjE5OGRlNC4u NDk1MWU2NyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvbGliL01ha2VmaWxlCisrKyBiL2FyY2gvcHBj L2xpYi9NYWtlZmlsZQpAQCAtOCw3ICs4LDcgQEAgT19UQVJHRVQJCTo9IGxpYi5vCiAKIGV4cG9y dC1vYmpzCQk6PSBkZWNfYW5kX2xvY2subwogCi1vYmoteQkJCTo9IGNoZWNrc3VtLm8gc3RyaW5n Lm8gc3RyY2FzZS5vIGRlY19hbmRfbG9jay5vIGRpdjY0Lm8gY2hlY2tzdW1fYWx0Lm8KK29iai15 CQkJOj0gY2hlY2tzdW0ubyBzdHJpbmcubyBzdHJjYXNlLm8gZGVjX2FuZF9sb2NrLm8gZGl2NjQu bwogCiBvYmotJChDT05GSUdfU01QKQkrPSBsb2Nrcy5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBj L2xpYi9jaGVja3N1bV9hbHQuYyBiL2FyY2gvcHBjL2xpYi9jaGVja3N1bV9hbHQuYwpkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIwY2IyOC4uMDAwMDAwMAotLS0gYS9hcmNoL3BwYy9s aWIvY2hlY2tzdW1fYWx0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoKLSAq IElORVQJCUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9y IHRoZSBMSU5VWAotICoJCW9wZXJhdGluZyBzeXN0ZW0uICBJTkVUIGlzIGltcGxlbWVudGVkIHVz aW5nIHRoZSAgQlNEIFNvY2tldAotICoJCWludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YgY29tbXVu aWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLgotICoKLSAqCQlJUC9UQ1AvVURQIGNoZWNrc3Vt bWluZyByb3V0aW5lcwotICoKLSAqIEF1dGhvcnM6CUpvcmdlIEN3aWssIDxqb3JnZUBsYXNlci5z YXRsaW5rLm5ldD4KLSAqCQlBcm50IEd1bGJyYW5kc2VuLCA8YWd1bGJyYUBudmcudW5pdC5ubz4K LSAqCQlUb20gTWF5LCA8ZnRvbUBuZXRjb20uY29tPgotICoJCUFuZHJlYXMgU2Nod2FiLCA8c2No d2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgotICoJCUxvdHMgb2YgY29kZSBt b3ZlZCBmcm9tIHRjcC5jIGFuZCBpcC5jOyBzZWUgdGhvc2UgZmlsZXMKLSAqCQlmb3IgbW9yZSBu YW1lcy4KLSAqCi0gKiAwMy8wMi85NglKZXMgU29yZW5zZW4sIEFuZHJlYXMgU2Nod2FiLCBSb21h biBIb2RlazoKLSAqCQlGaXhlZCBzb21lIG5hc3R5IGJ1Z3MsIGNhdXNpbmcgc29tZSBob3JyaWJs ZSBjcmFzaGVzLgotICoJCUE6IEF0IHNvbWUgcG9pbnRzLCB0aGUgc3VtICglMCkgd2FzIHVzZWQg YXMKLSAqCQlsZW5ndGgtY291bnRlciBpbnN0ZWFkIG9mIHRoZSBsZW5ndGggY291bnRlcgotICoJ CSglMSkuIFRoYW5rcyB0byBSb21hbiBIb2RlayBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuCi0gKgkJ QjogR0NDIHNlZW1zIHRvIG1lc3MgdXAgaWYgb25lIHVzZXMgdG9vIG1hbnkKLSAqCQlkYXRhLXJl Z2lzdGVycyB0byBob2xkIGlucHV0IHZhbHVlcyBhbmQgb25lIHRyaWVzIHRvCi0gKgkJc3BlY2lm eSBkMCBhbmQgZDEgYXMgc2NyYXRjaCByZWdpc3RlcnMuIExldHRpbmcgZ2NjIGNob29zZSB0aGVz ZQotICogICAgICByZWdpc3RlcnMgaXRzZWxmIHNvbHZlcyB0aGUgcHJvYmxlbS4KLSAqCi0gKgkJ VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcgotICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCi0gKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotICAKLS8qIFJldmlzZWQgYnkgS2VubmV0 aCBBbGJhbm93c2tpIGZvciBtNjhrbm9tbXUuIEJhc2ljIHByb2JsZW06IHVuYWxpZ25lZCBhY2Nl c3Mga2lsbHMsIHNvIG1vc3QKLSAgIG9mIHRoZSBhc3NlbWJseSBoYXMgdG8gZ28uICovCi0KLXN0 YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgZnJvbTMydG8xNih1bnNpZ25lZCBsb25nIHgpCi17 Ci0JLyogYWRkIHVwIDE2LWJpdCBhbmQgMTYtYml0IGZvciAxNitjIGJpdCAqLwotCXggPSAoeCAm IDB4ZmZmZikgKyAoeCA+PiAxNik7Ci0JLyogYWRkIHVwIGNhcnJ5Li4gKi8KLQl4ID0gKHggJiAw eGZmZmYpICsgKHggPj4gMTYpOwotCXJldHVybiB4OwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9u ZyBkb19jc3VtKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuKQotewotCWludCBv ZGQsIGNvdW50OwotCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsKLQotCWlmIChsZW4gPD0gMCkK LQkJZ290byBvdXQ7Ci0Jb2RkID0gMSAmICh1bnNpZ25lZCBsb25nKSBidWZmOwotCWlmIChvZGQp IHsKLQkJcmVzdWx0ID0gKmJ1ZmY7Ci0JCWxlbi0tOwotCQlidWZmKys7Ci0JfQotCWNvdW50ID0g bGVuID4+IDE7CQkvKiBuciBvZiAxNi1iaXQgd29yZHMuLiAqLwotCWlmIChjb3VudCkgewotCQlp ZiAoMiAmICh1bnNpZ25lZCBsb25nKSBidWZmKSB7Ci0JCQlyZXN1bHQgKz0gKih1bnNpZ25lZCBz aG9ydCAqKSBidWZmOwotCQkJY291bnQtLTsKLQkJCWxlbiAtPSAyOwotCQkJYnVmZiArPSAyOwot CQl9Ci0JCWNvdW50ID4+PSAxOwkJLyogbnIgb2YgMzItYml0IHdvcmRzLi4gKi8KLQkJaWYgKGNv dW50KSB7Ci0JCSAgICAgICAgdW5zaWduZWQgbG9uZyBjYXJyeSA9IDA7Ci0JCQlkbyB7Ci0JCQkJ dW5zaWduZWQgbG9uZyB3ID0gKih1bnNpZ25lZCBsb25nICopIGJ1ZmY7Ci0JCQkJY291bnQtLTsK LQkJCQlidWZmICs9IDQ7Ci0JCQkJcmVzdWx0ICs9IGNhcnJ5OwotCQkJCXJlc3VsdCArPSB3Owot CQkJCWNhcnJ5ID0gKHcgPiByZXN1bHQpOwotCQkJfSB3aGlsZSAoY291bnQpOwotCQkJcmVzdWx0 ICs9IGNhcnJ5OwotCQkJcmVzdWx0ID0gKHJlc3VsdCAmIDB4ZmZmZikgKyAocmVzdWx0ID4+IDE2 KTsKLQkJfQotCQlpZiAobGVuICYgMikgewotCQkJcmVzdWx0ICs9ICoodW5zaWduZWQgc2hvcnQg KikgYnVmZjsKLQkJCWJ1ZmYgKz0gMjsKLQkJfQotCX0KLQlpZiAobGVuICYgMSkKLQkJcmVzdWx0 ICs9ICgqYnVmZiA8PCA4KTsKLQlyZXN1bHQgPSBmcm9tMzJ0bzE2KHJlc3VsdCk7Ci0JaWYgKG9k ZCkKLQkJcmVzdWx0ID0gKChyZXN1bHQgPj4gOCkgJiAweGZmKSB8ICgocmVzdWx0ICYgMHhmZikg PDwgOCk7Ci1vdXQ6Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLSAqIGNvbXB1dGVzIHRoZSBj aGVja3N1bSBvZiBhIG1lbW9yeSBibG9jayBhdCBidWZmLCBsZW5ndGggbGVuLAotICogYW5kIGFk ZHMgaW4gInN1bSIgKDMyLWJpdCkKLSAqCi0gKiByZXR1cm5zIGEgMzItYml0IG51bWJlciBzdWl0 YWJsZSBmb3IgZmVlZGluZyBpbnRvIGl0c2VsZgotICogb3IgY3N1bV90Y3B1ZHBfbWFnaWMKLSAq Ci0gKiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggZXZlbiBsZW5ndGhzLCBleGNl cHQKLSAqIGZvciB0aGUgbGFzdCBmcmFnbWVudCwgd2hpY2ggbWF5IGJlIG9kZAotICoKLSAqIGl0 J3MgYmVzdCB0byBoYXZlIGJ1ZmYgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeQotICovCi11 bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2FsdChjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmLCBp bnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKQotewotCXVuc2lnbmVkIGludCByZXN1bHQgPSBkb19j c3VtKGJ1ZmYsIGxlbik7Ci0KLQkvKiBhZGQgaW4gb2xkIHN1bSwgYW5kIGNhcnJ5Li4gKi8KLQly ZXN1bHQgKz0gc3VtOwotCWlmKHN1bSA+IHJlc3VsdCkKLQkJcmVzdWx0ICs9IDE7Ci0JcmV0dXJu IHJlc3VsdDsKLX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQv dGNwLmgKaW5kZXggZGU5ZGFkOS4uYjU4NGI4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNw LmgKKysrIGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTI0LDggKzI0LDYgQEAKIC8qIENhbmNlbCB0 aW1lcnMsIHdoZW4gdGhleSBhcmUgbm90IHJlcXVpcmVkLiAqLwogI3VuZGVmIFRDUF9DTEVBUl9U SU1FUlMKIAotI2RlZmluZSBDT05GSUdfVENQX0NTX1JFQ0hFQ0sgMQotCiAjaW5jbHVkZSA8bGlu dXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvc2xh Yi5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lwdjQuYyBiL25ldC9pcHY0L3RjcF9pcHY0 LmMKaW5kZXggMjkzMWVmMC4uYjRjZDZiNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lwdjQu YworKysgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCkBAIC0xMTI5LDgyICsxMTI5LDYgQEAgb3V0Ogog CXNvY2tfcHV0KHNrKTsKIH0KIAotI2lmZGVmIENPTkZJR19UQ1BfQ1NfUkVDSEVDSyAvKiBSZS1j aGVjayB0aGUgVENQIGhlYWRlciBjaGVja3N1bSAqLwotc3RhdGljIHUzMiBjc3VtX3RjcHVkcF9u b2ZvbGRfYWx0KHUzMiBzYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1MzIgZGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgc2hvcnQgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIHNob3J0IHByb3RvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCBzdW0pCi17Ci0JdW5zaWduZWQgbG9uZyBsb25nIHMgPSBzdW07Ci0KLQlzICs9 IHNhZGRyOwotCXMgKz0gZGFkZHI7Ci0KLQlzICs9IChwcm90byA8PCAxNikgKyBudG9ocyhsZW4p OyAvKmJlKi8KLQkvKglzICs9IChudG9ocyhsZW4pPDwxNikrcHJvdG8qMjU2OyovIC8qbGUqLwot CXMgKz0gKHMgPj4gMzIpOwotCi0JcmV0dXJuICh1MzIpIHM7Ci19Ci0KLXN0YXRpYyB1bnNpZ25l ZCBpbnQgY3N1bV9mb2xkX2FsdCh1bnNpZ25lZCBpbnQgc3VtKQotewotCXN1bSA9IChzdW0gJiAw eGZmZmYpICsgKHN1bSA+PiAxNik7Ci0Jc3VtID0gKHN1bSAmIDB4ZmZmZikgKyAoc3VtID4+IDE2 KTsKLQlyZXR1cm4gfnN1bTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQK LWNzdW1fdGNwdWRwX21hZ2ljX2FsdCh1bnNpZ25lZCBsb25nIHNhZGRyLCB1bnNpZ25lZCBsb25n IGRhZGRyLCB1bnNpZ25lZCBzaG9ydCBsZW4sCi0JCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLCB1 bnNpZ25lZCBpbnQgc3VtKQotewotCi0JcmV0dXJuIGNzdW1fZm9sZF9hbHQgKGNzdW1fdGNwdWRw X25vZm9sZF9hbHQgKHNhZGRyLCBkYWRkciwgbGVuLCBwcm90bywgc3VtKSk7Ci19Ci0KLXN0YXRp YyB1MTYgdGNwX3Y0X2NoZWNrX2FsdChzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IGxlbiwKLQkJCQkg ICB1bnNpZ25lZCBsb25nIHNhZGRyLCB1bnNpZ25lZCBsb25nIGRhZGRyLCAKLQkJCQkgICB1bnNp Z25lZCBsb25nIGJhc2UpCi17Ci0JdTE2IHJldDsKLQotCXJldCA9IGNzdW1fdGNwdWRwX21hZ2lj X2FsdChzYWRkcixkYWRkcixsZW4sSVBQUk9UT19UQ1AsYmFzZSk7Ci0JcmV0dXJuIHJldDsKLX0K LQotc3RhdGljIHZvaWQgdGNwX3JlY2hlY2tfY3N1bShzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IGxl biwKLQkJCQkJCQl1bnNpZ25lZCBsb25nIHNhZGRyLCB1bnNpZ25lZCBsb25nIGRhZGRyLCAKLQkJ CQkJCQlpbnQgbGVuMiwgdW5zaWduZWQgaW50IHN1bSkKLXsKLQlleHRlcm4gaW50IGRvX3JlY2hl Y2s7Ci0JaW50IHNhdmVkY3MsIGFsdGNzOwotCi0JaWYgKCFkb19yZWNoZWNrKQotCQlyZXR1cm47 Ci0KLQlzYXZlZGNzID0gdGgtPmNoZWNrOwotCXRoLT5jaGVjayA9IDA7Ci0JYWx0Y3MgPSB0Y3Bf djRfY2hlY2tfYWx0KHRoLCBsZW4sIHNhZGRyLCBkYWRkciwKLQkJCSAgY3N1bV9wYXJ0aWFsX2Fs dCgoY2hhciAqKXRoLCBsZW4yLCBzdW0pKTsKLQlpZiAoYWx0Y3MgIT0gc2F2ZWRjcykgewotCQlw cmludGsoIiVzOiBzZXEgJWQ6IGNzdW0gbWlzbWF0Y2g6ICUjeCwgYWx0ICUjeFxuIiwgX19GVU5D VElPTl9fLAotCQkJICAgbnRvaGwodGgtPnNlcSksIG50b2hzKHNhdmVkY3MpLCBudG9ocyhhbHRj cykpOwotCQl0aC0+Y2hlY2sgPSBhbHRjczsKLQkJLyogQ2hlY2sgZm9yIG1lbW9yeSBjb3JydXB0 aW9uICovCi0JCV9fYXNtX18oInN5bmMiIDo6OiAibWVtb3J5Iik7Ci0JCWlmICgqKHZvbGF0aWxl IHVzaG9ydCAqKSYodGgtPmNoZWNrKSAhPSBhbHRjcykgewotCQkJcHJpbnRrKCIlczogaW4gbWVt ICUjeCAoQCUjeCksIGluIHJlZyAlI3ggP1xuIiwgX19GVU5DVElPTl9fLAotCQkJCSAgIG50b2hz KHRoLT5jaGVjayksICZ0aC0+Y2hlY2ssIG50b2hzKGFsdGNzKSk7Ci0JCX0KLQl9IGVsc2Ugewot CQlwcmludGsoIiVzOiBzZXEgJSN4IHJldHJhbnNtaXQsIGNzdW0gJSN4IE9LP1xuIiwgX19GVU5D VElPTl9fLAotCQkJICAgbnRvaGwodGgtPnNlcSksIG50b2hzKHNhdmVkY3MpKTsKLQkJdGgtPmNo ZWNrID0gc2F2ZWRjczsKLQl9Ci19Ci0jZW5kaWYKLQogLyogVGhpcyByb3V0aW5lIGNvbXB1dGVz IGFuIElQdjQgVENQIGNoZWNrc3VtLiAqLwogdm9pZCB0Y3BfdjRfc2VuZF9jaGVjayhzdHJ1Y3Qg c29jayAqc2ssIHN0cnVjdCB0Y3BoZHIgKnRoLCBpbnQgbGVuLCAKIAkJICAgICAgIHN0cnVjdCBz a19idWZmICpza2IpCkBAIC0xMjE1LDkgKzExMzksNiBAQCB2b2lkIHRjcF92NF9zZW5kX2NoZWNr KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcGhkciAqdGgsIGludCBsZW4sCiAJfSBlbHNlIHsK IAkJdGgtPmNoZWNrID0gdGNwX3Y0X2NoZWNrKHRoLCBsZW4sIHNrLT5zYWRkciwgc2stPmRhZGRy LAogCQkJCQkgY3N1bV9wYXJ0aWFsKChjaGFyICopdGgsIHRoLT5kb2ZmPDwyLCBza2ItPmNzdW0p KTsKLSNpZmRlZiBDT05GSUdfVENQX0NTX1JFQ0hFQ0sKLQkJdGNwX3JlY2hlY2tfY3N1bSh0aCwg bGVuLCBzay0+c2FkZHIsIHNrLT5kYWRkciwgdGgtPmRvZmY8PDIsIHNrYi0+Y3N1bSk7Ci0jZW5k aWYKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0 L3RjcF9vdXRwdXQuYwppbmRleCBhMTNiMTA2Li4zOWMxMmQ2IDEwMDY0NAotLS0gYS9uZXQvaXB2 NC90Y3Bfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC04MDksOSArODA5 LDYgQEAgdm9pZCB0Y3Bfc2ltcGxlX3JldHJhbnNtaXQoc3RydWN0IHNvY2sgKnNrKQogICogc3Rh dGUgdXBkYXRlcyBhcmUgZG9uZSBieSB0aGUgY2FsbGVyLiAgUmV0dXJucyBub24temVybyBpZiBh bgogICogZXJyb3Igb2NjdXJyZWQgd2hpY2ggcHJldmVudGVkIHRoZSBzZW5kLgogICovCi0jaWZk ZWYgQ09ORklHX1RDUF9DU19SRUNIRUNLCi1pbnQgZG9fcmVjaGVjazsKLSNlbmRpZgogaW50IHRj cF9yZXRyYW5zbWl0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7 CiAJc3RydWN0IHRjcF9vcHQgKnRwID0gJihzay0+dHBfcGluZm8uYWZfdGNwKTsKQEAgLTg3Miwx NyArODY5LDkgQEAgaW50IHRjcF9yZXRyYW5zbWl0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVj dCBza19idWZmICpza2IpCiAJICovCiAJVENQX1NLQl9DQihza2IpLT53aGVuID0gdGNwX3RpbWVf c3RhbXA7CiAKLSNpZmRlZiBDT05GSUdfVENQX0NTX1JFQ0hFQ0sKLQlkb19yZWNoZWNrID0gMTsK IAllcnIgPSB0Y3BfdHJhbnNtaXRfc2tiKHNrLCAoc2tiX2Nsb25lZChza2IpID8KIAkJCQkgICAg cHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk6CiAJCQkJICAgIHNrYl9jbG9uZShza2IsIEdGUF9B VE9NSUMpKSk7Ci0JZG9fcmVjaGVjayA9IDA7Ci0jZWxzZQotCWVyciA9IHRjcF90cmFuc21pdF9z a2Ioc2ssIChza2JfY2xvbmVkKHNrYikgPwotCQkJCSAgICBwc2tiX2NvcHkoc2tiLCBHRlBfQVRP TUlDKToKLQkJCQkgICAgc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQykpKTsKLSNlbmRpZgogCiAJ aWYgKGVyciA9PSAwKSB7CiAJCS8qIFVwZGF0ZSBnbG9iYWwgVENQIHN0YXRpc3RpY3MuICovCg== ------=_Part_81675_14173301.1183560718626 Content-Type: text/x-patch; name=i2c-fix-test.patch; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_f3pxcan5 Content-Disposition: attachment; filename="i2c-fix-test.patch" ZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2kyYy1hbGdvLW1wYzV4eHguYyBiL2RyaXZlcnMvaTJj L2kyYy1hbGdvLW1wYzV4eHguYwppbmRleCAyNjI5MmM3Li40MTMwYWFlIDEwMDY0NAotLS0gYS9k cml2ZXJzL2kyYy9pMmMtYWxnby1tcGM1eHh4LmMKKysrIGIvZHJpdmVycy9pMmMvaTJjLWFsZ28t bXBjNXh4eC5jCkBAIC0yNCwxMyArMjQsMjAgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1w cGNfNXh4eC5oPgogCiAvKiAjZGVmaW5lIE1QQzV4eHhfU0NBTgkxICovCi0jZGVmaW5lIE1QQzV4 eHhfVElNRU9VVAkxMDAKKyNkZWZpbmUgTVBDNXh4eF9USU1FT1VUCTEwMDAKICNkZWZpbmUgTVBD NXh4eF9SRVRSSUVTCTMKKyNkZWZpbmUgTVBDNXh4eF9TUEVFRF9LQlBTIDI1CiAKLXN0YXRpYyBp bnQgc3BlZWQgPSAxMDA7CisjZGVmaW5lIERFQih4KSBpZiAoZGxldmVsPj0xKSB4OworI2RlZmlu ZSBERUIyKHgpIGlmIChkbGV2ZWw+PTIpIHg7CiAKLU1PRFVMRV9QQVJNKHNwZWVkLCAiaSIpOwor c3RhdGljIGludCBzcGVlZCA9IE1QQzV4eHhfU1BFRURfS0JQUzsgICAvKiBrYnBzICovCitzdGF0 aWMgaW50IGRsZXZlbCA9IDE7CiAKK01PRFVMRV9QQVJNKHNwZWVkLCAiaSIpOworTU9EVUxFX1BB Uk1fREVTQyhzcGVlZCwgImJ1cyBjbG9jayAoa2JwcykiKTsKK01PRFVMRV9QQVJNKGRsZXZlbCwg ImkiKTsKK01PRFVMRV9QQVJNX0RFU0MoZGxldmVsLCAiZGVidWcgbGV2ZWwiKTsKIAogI2lmZGVm IENPTkZJR19NUEM1eHh4X0kyQ19JTlQKIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGkyYzFfaWZf d3EpOwpAQCAtNDgsNiArNTUsOCBAQCBzdGF0aWMgaW50IGkyYzJfc3RhdHVzID0gMDsKIHN0YXRp YyB2b2xhdGlsZSB1MzIgKm1pY3IgPSAodTMyICopKE1QQzV4eHhfSTJDX01JQ1IpOwogI2VuZGlm CiAKK3N0YXRpYyB2b2lkIG1wYzV4eHhfaW5pdChzdHJ1Y3QgaTJjX2FsZ29fbXBjNXh4eF9kYXRh ICphbGdvX2RhdGEpOworCiBzdGF0aWMgaW50IG1wYzV4eHhfaW4odm9sYXRpbGUgdTMyICpyZWcp CiB7CiAJcmV0dXJuIGluX2JlMzIocmVnKSA+PiAyNDsKQEAgLTc1LDYgKzg0LDkgQEAgc3RhdGlj IHZvaWQgaTJjX3N0YXJ0KHN0cnVjdCBpMmNfYWxnb19tcGM1eHh4X2RhdGEgKmFsZ29fZGF0YSkK IAogCW1wYzV4eHhfb3V0KCZyZWdzLT5tY3IsIE1QQzV4eHhfSTJDX1NUQSwgTVBDNXh4eF9JMkNf U1RBKTsKIAorICAgICAgICAvKiBjbGVhciBwZW5kaW5nIGludGVycnVwdHMgKi8KKyAgICAgICAg bXBjNXh4eF9vdXQoJnJlZ3MtPm1zciwgMCwgTVBDNXh4eF9JMkNfSUYpOworCiAJcmV0dXJuOwog fQogCkBAIC0xNDAsNiArMTUyLDIyIEBAIHN0YXRpYyB2b2lkIGkyYzJfaW50ZXJydXB0KGludCBp cnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnByZWdzKQogfQogI2VuZGlmCiAKK3N0 YXRpYyB2b2lkIGkyY19yZXNldChzdHJ1Y3QgaTJjX2FsZ29fbXBjNXh4eF9kYXRhICphbGdvX2Rh dGEpCit7CisJc3RydWN0IG1wYzV4eHhfaTJjCSpyZWdzID0gYWxnb19kYXRhLT5yZWdzOworCisg ICAgICAgIERFQihwcmludGsoS0VSTl9ERUJVRyAiaTJjLWFsZ28tbXBjNXh4eC5vOiByZXNldHRp bmcgYnVzXG4iKSk7CisKKyAgICAgICAgLyogQ2xlYXIgc3RhdHVzLCBnbyBzbGF2ZSAqLworCW1w YzV4eHhfb3V0KCZyZWdzLT5tc3IsIDAsIDApOworICAgICAgICBpMmNfc3RvcChhbGdvX2RhdGEp OworCisgICAgICAgIHVkZWxheSgxMDAwMCAvIHNwZWVkKTsgICAgICAgICAgLyogMCwxIG1zIEAg MTAwIGticyAqLworICAgICAgICBtcGM1eHh4X2luaXQoYWxnb19kYXRhKTsKKworCXJldHVybjsK K30KKwogc3RhdGljIGludCB3YWl0X2Zvcl9iYihzdHJ1Y3QgaTJjX2FsZ29fbXBjNXh4eF9kYXRh ICphbGdvX2RhdGEpCiB7CiAJc3RydWN0IG1wYzV4eHhfaTJjCSpyZWdzCT0gYWxnb19kYXRhLT5y ZWdzOwpAQCAtMTc3LDcgKzIwNSwxNSBAQCBzdGF0aWMgaW50IHdhaXRfZm9yX2JiKHN0cnVjdCBp MmNfYWxnb19tcGM1eHh4X2RhdGEgKmFsZ29fZGF0YSkKIAkqcHN0YXQgPSAwOwogI2Vsc2UJCiAJ c3RhdHVzID0gbXBjNXh4eF9pbigmcmVncy0+bXNyKTsKKworICAgICAgICBpZihzdGF0dXMgJiBN UEM1eHh4X0kyQ19BTCkgeworICAgICAgICAgICAgREVCKHByaW50ayhLRVJOX0RFQlVHICJpMmMt YWxnby1tcGM1eHh4Lm86IEFMIHNldCBpbiB3YWl0X2Zvcl9iYiwgc3RhdHVzPTB4JXhcbiIsIHN0 YXR1cykpOworICAgICAgICAgICAgaTJjX3Jlc2V0KGFsZ29fZGF0YSk7CisgICAgICAgICAgICBy ZXR1cm4gLTE7CisgICAgICAgIH0KKwogCXdoaWxlICgodGltZV9iZWZvcmUoamlmZmllcyx0aW1l b3V0KSkgJiYgKHN0YXR1cyAmIE1QQzV4eHhfSTJDX0JCKSkgeworICAgCQl1ZGVsYXkoMTApOwog CQlzdGF0dXMgPSBtcGM1eHh4X2luKCZyZWdzLT5tc3IpOwogCX0KICNlbmRpZgpAQCAtMjIwLDEz ICsyNTYsMTcgQEAgc3RhdGljIGludCB3YWl0X2Zvcl9waW4oc3RydWN0IGkyY19hbGdvX21wYzV4 eHhfZGF0YQkqYWxnb19kYXRhLAogCSpzdGF0dXMgPSBtcGM1eHh4X2luKCZyZWdzLT5tc3IpOwog CiAJd2hpbGUgKCh0aW1lX2JlZm9yZShqaWZmaWVzLHRpbWVvdXQpKSAmJiAhKCpzdGF0dXMgJiBN UEM1eHh4X0kyQ19JRikpIHsKKyAgIAkJdWRlbGF5KDEwKTsKIAkJKnN0YXR1cyA9IG1wYzV4eHhf aW4oJnJlZ3MtPm1zcik7CiAJfQogI2VuZGlmCiAKLQlpZiAoISgqc3RhdHVzICYgTVBDNXh4eF9J MkNfSUYpKSB7Ci0JCXJldHVybiAtMTsKLQl9CisJaWYgKCEoKnN0YXR1cyAmIE1QQzV4eHhfSTJD X0lGKSB8fCAqc3RhdHVzICYgTVBDNXh4eF9JMkNfQUwpIHsKKyAgICAgICAgICAgICAgICBERUIo cHJpbnRrKEtFUk5fREVCVUcgImkyYy1hbGdvLW1wYzV4eHgubzogd2FpdF9mb3JfcGluOiBzdGF0 dXM9MHgleFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0dXMpKTsKKyAgICAg ICAgICAgICAgICBpMmNfcmVzZXQoYWxnb19kYXRhKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g LTE7CisgICAgICAgIH0KIAogCW1wYzV4eHhfb3V0KCZyZWdzLT5tc3IsIDAsIE1QQzV4eHhfSTJD X0lGKTsKIApAQCAtMjQ3LDcgKzI4Nyw4IEBAIHN0YXRpYyBpbnQgbXBjNXh4eF9nZXRfZmRyKHZv aWQpCiAJdWxvbmcgaXBiID0gQ09ORklHX1BQQ181eHh4X0lQQkZSRVE7CiAjZW5kaWYKIAl1bG9u ZyBiZXN0bWF0Y2ggPSAweGZmZmZmZmZmVUw7Ci0JaW50IGJlc3RfaSA9IDAsIGJlc3RfaiA9IDAs IGksIGo7CisJaW50IGJlc3RfaSA9IDMsIGJlc3RfaiA9IDc7ICAgLyogdmFsdWVzIGZvciB0aGUg c2xvd2VzdCBidXMgKi8KKyAgICAgICAgaW50IGksIGo7CiAJaW50IFNDTF9UYXBbXSA9IHsgOSwg MTAsIDEyLCAxNSwgNSwgNiwgNywgOH07CiAJc3RydWN0IHtpbnQgc2NsMnRhcCwgdGFwMnRhcDsg fSBzY2x0YXBbXSA9IHsKIAkJezQsIDF9LApAQCAtMjc1LDcgKzMxNiw3IEBAIHN0YXRpYyBpbnQg bXBjNXh4eF9nZXRfZmRyKHZvaWQpCiAJCX0KIAl9CiAKLQlkaXZpZGVyID0gKGJlc3RfaSAmIDMp IHwgKChiZXN0X2kgJiA0KSA8PCAzKSB8IChiZXN0X2ogPDwgMik7CisJZGl2aWRlciA9IChiZXN0 X2kgJiAzKSB8ICgoYmVzdF9pICYgNCkgPDwgNSkgfCAoYmVzdF9qIDw8IDIpOwogCiAJcmV0dXJu IGRpdmlkZXI7CiB9CkBAIC0zNzMsMTIgKzQxNCw5IEBAIHN0YXRpYyBpbnQgbXBjNXh4eF9zZW5k Ynl0ZXMoc3RydWN0IGkyY19hZGFwdGVyCSphZGFwLAogCWZvciAod3Jjb3VudCA9IDA7IHdyY291 bnQgPCBjb3VudDsgKyt3cmNvdW50KSB7CiAJCW1wYzV4eHhfb3V0KCZyZWdzLT5tZHIsIGJ1Zlt3 cmNvdW50XSwgMCk7CiAKLQkJaWYgKHdhaXRfZm9yX3BpbihhbGdvX2RhdGEsICZzdGF0dXMpKSB7 Ci0JCQlpMmNfc3RvcChhbGdvX2RhdGEpOwotCQkJcmV0dXJuIC1FUkVNT1RFSU87Ci0JCX0KLQot CQlpZiAoc3RhdHVzICYgTVBDNXh4eF9JMkNfUlhBSykgeworCQlpZiAod2FpdF9mb3JfcGluKGFs Z29fZGF0YSwgJnN0YXR1cykgfHwgCisgICAgICAgICAgICAgICAgICAgIChzdGF0dXMgJiBNUEM1 eHh4X0kyQ19SWEFLKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIERFQihwcmludGsoS0VS Tl9ERUJVRyAiaTJjLWFsZ28tbXBjNXh4eC5vOiBlcnJvciBpbiBtcGM1eHh4X3NlbmRieXRlcywg c3RhdHVzPTB4JXhcbiIsIHN0YXR1cykpOwogCQkJaTJjX3N0b3AoYWxnb19kYXRhKTsKIAkJCXJl dHVybiAtRVJFTU9URUlPOwogCQl9CkBAIC0zOTQsMzYgKzQzMiwzMyBAQCBzdGF0aWMgaW50IG1w YzV4eHhfcmVhZGJ5dGVzKHN0cnVjdCBpMmNfYWRhcHRlcgkqYWRhcCwKIAlzdHJ1Y3QgaTJjX2Fs Z29fbXBjNXh4eF9kYXRhCSphbGdvX2RhdGEJPSBhZGFwLT5hbGdvX2RhdGE7CiAJc3RydWN0IG1w YzV4eHhfaTJjCQkqcmVncwkJPSBhbGdvX2RhdGEtPnJlZ3M7CiAJaW50CQkJCXJkY291bnQJCT0g MDsKLQlpbnQJCQkJZHVtbXkJCT0gMTsKIAlpbnQJCQkJc3RhdHVzOwotCWludAkJCQlpOwogCiAJ bXBjNXh4eF9vdXQoJnJlZ3MtPm1jciwgMCwgTVBDNXh4eF9JMkNfVFgpOwotCW1wYzV4eHhfb3V0 KCZyZWdzLT5tY3IsIDAsIE1QQzV4eHhfSTJDX1RYQUspOwotCi0JZm9yIChpID0gMDsgaSA8IGNv dW50OyArK2kpIHsKLQkJYnVmW3JkY291bnRdID0gbXBjNXh4eF9pbigmcmVncy0+bWRyKTsKLQot CQlpZiAoZHVtbXkpIHsKLQkJCWR1bW15ID0gMDsKLQkJfSBlbHNlIHsKLQkJCXJkY291bnQrKzsK LQkJfQogCi0JCWlmIChpID09IGNvdW50IC0gMSkKLQkJCW1wYzV4eHhfb3V0KCZyZWdzLT5tY3Is IE1QQzV4eHhfSTJDX1RYQUssIE1QQzV4eHhfSTJDX1RYQUspOworCWlmKGNvdW50ID4gMSkgewor CQltcGM1eHh4X291dCgmcmVncy0+bWNyLCAwLCBNUEM1eHh4X0kyQ19UWEFLKTsKKwl9IGVsc2Ug eworCQltcGM1eHh4X291dCgmcmVncy0+bWNyLCB+MCwgTVBDNXh4eF9JMkNfVFhBSyk7CisJfQog CisJaWYoY291bnQgPiAwKSB7CisJCW1wYzV4eHhfaW4oJnJlZ3MtPm1kcik7CisJfQorIAorCWZv ciAocmRjb3VudCA9IDA7IHJkY291bnQgPCBjb3VudDsgKytyZGNvdW50KSB7CiAJCWlmICh3YWl0 X2Zvcl9waW4oYWxnb19kYXRhLCAmc3RhdHVzKSkgewogCQkJaTJjX3N0b3AoYWxnb19kYXRhKTsK IAkJCXJldHVybiAtRVJFTU9URUlPOwogCQl9Ci0JfQotCi0JYnVmW3JkY291bnQrK10gPSBtcGM1 eHh4X2luKCZyZWdzLT5tZHIpOwogCi0JaWYgKHdhaXRfZm9yX3BpbihhbGdvX2RhdGEsICZzdGF0 dXMpKSB7Ci0JCWkyY19zdG9wKGFsZ29fZGF0YSk7Ci0JCXJldHVybiAtRVJFTU9URUlPOworCQlp ZiAocmRjb3VudCA9PSBjb3VudCAtIDEpIHsKKwkJCW1wYzV4eHhfb3V0KCZyZWdzLT5tY3IsIH4w LCBNUEM1eHh4X0kyQ19UWCk7CisJCX0gCisJCWVsc2UgaWYgKHJkY291bnQgPT0gY291bnQgLSAy KSB7CisJCQltcGM1eHh4X291dCgmcmVncy0+bWNyLCB+MCwgTVBDNXh4eF9JMkNfVFhBSyk7CisJ CX0KKwkJYnVmW3JkY291bnRdID0gbXBjNXh4eF9pbigmcmVncy0+bWRyKTsKIAl9CiAKIAlyZXR1 cm4gcmRjb3VudDsKQEAgLTQ2NCwxOCArNDk5LDIzIEBAIHN0YXRpYyBpbnQgbXBjNXh4eF94ZmVy KHN0cnVjdCBpMmNfYWRhcHRlcgkqYWRhcCwKIAlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsK IAkJcG1zZyA9ICZtc2dzW2ldOwogCi0JCWlmICh3YWl0X2Zvcl9iYihhbGdvX2RhdGEpKQorCQlp ZiAod2FpdF9mb3JfYmIoYWxnb19kYXRhKSkgeworCQkJREVCKHByaW50ayhLRVJOX0RFQlVHICJp MmMtYWxnby1tcGM1eHh4Lm86IHdhaXRfZm9yX2JiIGZhaWxlZCBpbiBtcGM1eHh4X3hmZXJcbiIp KTsKKwkJCWkyY19yZXNldChhbGdvX2RhdGEpOwogCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJCX0K IAogCQlpMmNfc3RhcnQoYWxnb19kYXRhKTsKICAgCQltcGM1eHh4X2RvX2FkZHJlc3MoYWxnb19k YXRhLCBwbXNnLCBhZGFwLT5yZXRyaWVzKTsKIAogCQlpZiAod2FpdF9mb3JfcGluKGFsZ29fZGF0 YSwgJnN0YXR1cykpIHsKKwkJCURFQihwcmludGsoS0VSTl9ERUJVRyAiaTJjLWFsZ28tbXBjNXh4 eC5vOiB3YWl0X2Zvcl9waW4gZmFpbGVkIGluIG1wYzV4eHhfeGZlciwgc3RhdHVzPTB4JXhcbiIs IHN0YXR1cykpOwogCQkJaTJjX3N0b3AoYWxnb19kYXRhKTsKIAkJCXJldHVybiAtRVJFTU9URUlP OwogCQl9CiAKLSAgIAkJaWYgKHN0YXR1cyAmIE1QQzV4eHhfSTJDX1JYQUspIHsKKwkJaWYgKHN0 YXR1cyAmIE1QQzV4eHhfSTJDX1JYQUspIHsKKwkJCURFQjIocHJpbnRrKEtFUk5fREVCVUcgImky Yy1hbGdvLW1wYzV4eHgubzogUlhBSyBzZXQgaW4gbXBjNXh4eF94ZmVyLCBzdGF0dXM9MHgleFxu Iiwgc3RhdHVzKSk7CiAJCQlpMmNfc3RvcChhbGdvX2RhdGEpOwogCQkJcmV0dXJuIC1FUkVNT1RF SU87CiAJCX0K ------=_Part_81675_14173301.1183560718626--