[parisc-linux] IBM TR patch

Jochen Friedrich jochen@scram.de
Mon, 14 Jan 2002 20:53:26 +0100 (CET)


  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.

--2831155551-2009707125-1011038006=:7418
Content-Type: TEXT/PLAIN; charset=US-ASCII

Hi there,

this patch fixes some endianess issues of the current ibmtr driver. 
Although the current uses of htons() etc look correct, they are not: the 
writew/readw API already do the byte swap on big endian machines.

Additionally, i added a switch to turn off IPv4 summing. This might be 
needed for IPv6 and is absolutely necessary on HP PARISC platform with the 
current broken ioremap implementation. The IPv4 summing is the only place 
in the driver that accesses memory directly without the readX or 
memcpy_fromio macros.

With the patch, the ibmtr driver should work on big endian machines with 
ISA/EISA bus (e.g. 68000 and HP PARISC).

On PARISC, the card gets initialized and joins the ring, but due to the 
ISA memory access bug, it will receive garbage on memory regions with 
(ISA memory & 0x300) == 0.

Cheers,
Jochen

--2831155551-2009707125-1011038006=:7418
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="ibmtr.c.diff"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.43.0201142053260.7418@alpha.bocc.de>
Content-Description: 
Content-Disposition: attachment; filename="ibmtr.c.diff"

LS0tIGxpbnV4L2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jCUZyaSBO
b3YgIDkgMjM6MDI6MjQgMjAwMQ0KKysrIGxpbnV4LTIuNC4xNy9kcml2ZXJz
L25ldC90b2tlbnJpbmcvaWJtdHIuYwlNb24gSmFuIDE0IDAwOjIxOjIxIDIw
MDINCkBAIC0xMDAsNiArMTAwLDkgQEANCiAgKg0KICAqICAgICAgQ2hhbmdl
cyBieSBCdXJ0IFNpbHZlcm1hbiB0byBhbGxvdyB0aGUgY29tcHV0ZXIgdG8g
YmVoYXZlIG5pY2VseSB3aGVuDQogICoJYSBjYWJsZSBpcyBwdWxsZWQgb3Ig
bm90IGluIHBsYWNlLCBvciBhIFBDTUNJQSBjYXJkIGlzIHJlbW92ZWQgaG90
Lg0KKyAqDQorICoJQ2hhbmdlcyBieSBKb2NoZW4gRnJpZWRyaWNoIHRvIGZp
eCBlbmRpYW5lc3MgaXNzdWVzLiBBZGRlZCBmbGFnIHRvIA0KKyAqCXR1cm4g
b2ZmIElQdjQgcHJlLWNoZWNrc3Vtcy4NCiAgKi8NCiANCiAvKiBjaGFuZ2Ug
dGhlIGRlZmluZSBvZiBJQk1UUl9ERUJVR19NRVNTQUdFUyB0byBhIG5vbnpl
cm8gdmFsdWUgDQpAQCAtMTI1LDYgKzEyOCwxMSBAQA0KIC8qIHNvbWUgOTUg
T1Mgc2VuZCBtYW55IG5vbiBVSSBmcmFtZTsgdGhpcyBhbGxvdyByZW1vdmlu
ZyB0aGUgd2FybmluZyAqLw0KICNkZWZpbmUgVFJfRklMVEVSTk9OVUkJMQ0K
IA0KKy8qIHN3aXRjaCB0byAwIHRvIGRpc2FibGUgSVB2NCBjaGVja3N1bXMu
IE5lZWRlZCBieSBhcmNoaXRlY3R1cmVzIHdpdGgNCisgKiBicm9rZW4gaW9y
ZW1hcCAoaS5lLiBwYXJpc2MpLg0KKyAqLw0KKyNkZWZpbmUgVFJfQ0hFQ0tT
VU0gMQ0KKw0KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPg0KICNpbmNsdWRl
IDxsaW51eC9pb3BvcnQuaD4NCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNl
Lmg+DQpAQCAtMjY5LDcgKzI3Nyw3IEBADQogCQl9DQogCQlpc2Ffd3JpdGVi
KDB4MDAsIHJhbV9hZGRyKzB4MUUwMSk7DQogCQlmb3IoaT1qaWZmaWVzK1RS
X0JVU1lfSU5URVJWQUw7IHRpbWVfYmVmb3JlX2VxKGppZmZpZXMsaSk7KTsN
Ci0JCWludGZfdGJsPW50b2hzKGlzYV9yZWFkdyhyYW1fYWRkcitBQ0FfT0ZG
U0VUK0FDQV9SVytXUkJSX0VWRU4pKTsNCisJCWludGZfdGJsPXN3YWIxNihp
c2FfcmVhZHcocmFtX2FkZHIrQUNBX09GRlNFVCtBQ0FfUlcrV1JCUl9FVkVO
KSk7DQogCQlpZiAoaW50Zl90YmwpIHsNCiAjaWYgSUJNVFJfREVCVUdfTUVT
U0FHRVMNCiAJCQlwcmludGsoImlibXRyOjpmaW5kX3R1cmJvX2FkYXB0ZXJz
LCBUdXJibyBmb3VuZCBhdCAiDQpAQCAtMjgwLDcgKzI4OCw3IEBADQogCQkJ
fQ0KIAkJCXByaW50aygiXG4iKTsNCiAjZW5kaWYNCi0JCQl0dXJib19pb1tp
bmRleF09bnRvaHMoaXNhX3JlYWR3KHJhbV9hZGRyK2ludGZfdGJsKzQpKTsN
CisJCQl0dXJib19pb1tpbmRleF09c3dhYjE2KGlzYV9yZWFkdyhyYW1fYWRk
citpbnRmX3RibCs0KSk7DQogCQkJdHVyYm9faXJxW2luZGV4XT1pc2FfcmVh
ZGIocmFtX2FkZHIraW50Zl90YmwrMyk7DQogCQkJb3V0YigwLCB0dXJib19p
b1tpbmRleF0gKyBBREFQVFJFU0VUKTsNCiAJCQlmb3IoaT1qaWZmaWVzK1RS
X1JTVF9USU1FO3RpbWVfYmVmb3JlX2VxKGppZmZpZXMsaSk7KTsNCkBAIC05
MjYsMTUgKzkzNCwxNSBAQA0KIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0
cnVjdCBkaXJfb3Blbl9hZGFwdGVyKTsgaSsrKQ0KIAkJd3JpdGViKDAsIHRp
LT5pbml0X3NyYiArIGkpOw0KIAl3cml0ZWIoRElSX09QRU5fQURBUFRFUiwg
dGktPmluaXRfc3JiICsgQ09NTUFORF9PRlNUKTsNCi0Jd3JpdGV3KGh0b25z
KE9QRU5fUEFTU19CQ09OX01BQyksIHRpLT5pbml0X3NyYiArIE9QRU5fT1BU
SU9OU19PRlNUKTsNCisJd3JpdGV3KHN3YWIxNihPUEVOX1BBU1NfQkNPTl9N
QUMpLCB0aS0+aW5pdF9zcmIgKyBPUEVOX09QVElPTlNfT0ZTVCk7DQogCWlm
ICh0aS0+cmluZ19zcGVlZCA9PSAxNikgew0KLQkJd3JpdGV3KGh0b25zKHRp
LT5kaGJfc2l6ZTE2bWIpLCB0aS0+aW5pdF9zcmIgKyBESEJfTEVOR1RIX09G
U1QpOw0KLQkJd3JpdGV3KGh0b25zKHRpLT5yYnVmX2NudDE2KSwgdGktPmlu
aXRfc3JiICsgTlVNX1JDVl9CVUZfT0ZTVCk7DQotCQl3cml0ZXcoaHRvbnMo
dGktPnJidWZfbGVuMTYpLCB0aS0+aW5pdF9zcmIgKyBSQ1ZfQlVGX0xFTl9P
RlNUKTsNCisJCXdyaXRldyhzd2FiMTYodGktPmRoYl9zaXplMTZtYiksIHRp
LT5pbml0X3NyYiArIERIQl9MRU5HVEhfT0ZTVCk7DQorCQl3cml0ZXcoc3dh
YjE2KHRpLT5yYnVmX2NudDE2KSwgdGktPmluaXRfc3JiICsgTlVNX1JDVl9C
VUZfT0ZTVCk7DQorCQl3cml0ZXcoc3dhYjE2KHRpLT5yYnVmX2xlbjE2KSwg
dGktPmluaXRfc3JiICsgUkNWX0JVRl9MRU5fT0ZTVCk7DQogCX0gZWxzZSB7
DQotCQl3cml0ZXcoaHRvbnModGktPmRoYl9zaXplNG1iKSwgdGktPmluaXRf
c3JiICsgREhCX0xFTkdUSF9PRlNUKTsNCi0JCXdyaXRldyhodG9ucyh0aS0+
cmJ1Zl9jbnQ0KSwgdGktPmluaXRfc3JiICsgTlVNX1JDVl9CVUZfT0ZTVCk7
DQotCQl3cml0ZXcoaHRvbnModGktPnJidWZfbGVuNCksIHRpLT5pbml0X3Ny
YiArIFJDVl9CVUZfTEVOX09GU1QpOw0KKwkJd3JpdGV3KHN3YWIxNih0aS0+
ZGhiX3NpemU0bWIpLCB0aS0+aW5pdF9zcmIgKyBESEJfTEVOR1RIX09GU1Qp
Ow0KKwkJd3JpdGV3KHN3YWIxNih0aS0+cmJ1Zl9jbnQ0KSwgdGktPmluaXRf
c3JiICsgTlVNX1JDVl9CVUZfT0ZTVCk7DQorCQl3cml0ZXcoc3dhYjE2KHRp
LT5yYnVmX2xlbjQpLCB0aS0+aW5pdF9zcmIgKyBSQ1ZfQlVGX0xFTl9PRlNU
KTsNCiAJfQ0KIAl3cml0ZWIoTlVNX0RIQiwJCS8qIGFsd2F5cyAyICovIHRp
LT5pbml0X3NyYiArIE5VTV9ESEJfT0ZTVCk7DQogCXdyaXRlYihETENfTUFY
X1NBUCwgdGktPmluaXRfc3JiICsgRExDX01BWF9TQVBfT0ZTVCk7DQpAQCAt
OTQzLDkgKzk1MSw5IEBADQogCXRpLT5zcmJfcGFnZSA9IHRpLT5pbml0X3Ny
Yl9wYWdlOw0KIAlEUFJJTlRLKCJPcGVuaW5nIGFkYXB0ZXI6IFhtaXQgYmZy
czogJWQgWCAlZCwgUmN2IGJmcnM6ICVkIFggJWRcbiIsDQogCQlyZWFkYih0
aS0+aW5pdF9zcmIgKyBOVU1fREhCX09GU1QpLA0KLQkJbnRvaHMocmVhZHco
dGktPmluaXRfc3JiICsgREhCX0xFTkdUSF9PRlNUKSksDQotCQludG9ocyhy
ZWFkdyh0aS0+aW5pdF9zcmIgKyBOVU1fUkNWX0JVRl9PRlNUKSksDQotCQlu
dG9ocyhyZWFkdyh0aS0+aW5pdF9zcmIgKyBSQ1ZfQlVGX0xFTl9PRlNUKSkp
Ow0KKwkJc3dhYjE2KHJlYWR3KHRpLT5pbml0X3NyYiArIERIQl9MRU5HVEhf
T0ZTVCkpLA0KKwkJc3dhYjE2KHJlYWR3KHRpLT5pbml0X3NyYiArIE5VTV9S
Q1ZfQlVGX09GU1QpKSwNCisJCXN3YWIxNihyZWFkdyh0aS0+aW5pdF9zcmIg
KyBSQ1ZfQlVGX0xFTl9PRlNUKSkpOw0KIAl3cml0ZWIoSU5UX0VOQUJMRSwg
dGktPm1taW8gKyBBQ0FfT0ZGU0VUICsgQUNBX1NFVCArIElTUlBfRVZFTik7
DQogCXdyaXRlYihDTURfSU5fU1JCLCB0aS0+bW1pbyArIEFDQV9PRkZTRVQg
KyBBQ0FfU0VUICsgSVNSQV9PREQpOw0KIH0NCkBAIC05NjcsNyArOTc1LDcg
QEANCiAjZGVmaW5lIFNUQVRJT05fQ09VTlRfT0ZTVCAgICAgIDE4DQogDQog
CXdyaXRlYihETENfT1BFTl9TQVAsIHRpLT5zcmIgKyBDT01NQU5EX09GU1Qp
Ow0KLQl3cml0ZXcoaHRvbnMoTUFYX0lfRklFTEQpLCB0aS0+c3JiICsgTUFY
X0lfRklFTERfT0ZTVCk7DQorCXdyaXRldyhzd2FiMTYoTUFYX0lfRklFTEQp
LCB0aS0+c3JiICsgTUFYX0lfRklFTERfT0ZTVCk7DQogCXdyaXRlYihTQVBf
T1BFTl9JTkRfU0FQIHwgU0FQX09QRU5fUFJJT1JJVFksIHRpLT5zcmIrIFNB
UF9PUFRJT05TX09GU1QpOw0KIAl3cml0ZWIoU0FQX09QRU5fU1RBVElPTl9D
TlQsIHRpLT5zcmIgKyBTVEFUSU9OX0NPVU5UX09GU1QpOw0KIAl3cml0ZWIo
dHlwZSwgdGktPnNyYiArIFNBUF9WQUxVRV9PRlNUKTsNCkBAIC0xMDgzLDEw
ICsxMDkxLDEwIEBADQogICAgICAgICB1bnNpZ25lZCBjaGFyIHJldF9jb2Rl
Ow0KICAgICAgICAgX191MTYgZXJyOw0KIA0KLSAgICAgICAgdGktPnNyYiA9
IG50b2hzKHJlYWR3KHRpLT5pbml0X3NyYiArIFNSQl9BRERSRVNTX09GU1Qp
KTsNCi0gICAgICAgIHRpLT5zc2IgPSBudG9ocyhyZWFkdyh0aS0+aW5pdF9z
cmIgKyBTU0JfQUREUkVTU19PRlNUKSk7DQotICAgICAgICB0aS0+YXJiID0g
bnRvaHMocmVhZHcodGktPmluaXRfc3JiICsgQVJCX0FERFJFU1NfT0ZTVCkp
Ow0KLSAgICAgICAgdGktPmFzYiA9IG50b2hzKHJlYWR3KHRpLT5pbml0X3Ny
YiArIEFTQl9BRERSRVNTX09GU1QpKTsNCisgICAgICAgIHRpLT5zcmIgPSBz
d2FiMTYocmVhZHcodGktPmluaXRfc3JiICsgU1JCX0FERFJFU1NfT0ZTVCkp
Ow0KKyAgICAgICAgdGktPnNzYiA9IHN3YWIxNihyZWFkdyh0aS0+aW5pdF9z
cmIgKyBTU0JfQUREUkVTU19PRlNUKSk7DQorICAgICAgICB0aS0+YXJiID0g
c3dhYjE2KHJlYWR3KHRpLT5pbml0X3NyYiArIEFSQl9BRERSRVNTX09GU1Qp
KTsNCisgICAgICAgIHRpLT5hc2IgPSBzd2FiMTYocmVhZHcodGktPmluaXRf
c3JiICsgQVNCX0FERFJFU1NfT0ZTVCkpOw0KICAgICAgICAgaWYgKHRpLT5w
YWdlX21hc2spIHsNCiAgICAgICAgICAgICAgICAgdGktPnNyYl9wYWdlID0g
KHRpLT5zcmIgPj4gOCkgJiB0aS0+cGFnZV9tYXNrOw0KICAgICAgICAgICAg
ICAgICB0aS0+c3JiICY9IH4odGktPnBhZ2VfbWFzayA8PCA4KTsNCkBAIC0x
MTAzLDcgKzExMTEsNyBAQA0KICAgICAgICAgdGktPmFzYiArPSB0aS0+c3Jh
bV92aXJ0Ow0KICAgICAgICAgdGktPmN1cnJlbnRfc2tiID0gTlVMTDsNCiAg
ICAgICAgIHJldF9jb2RlID0gcmVhZGIodGktPmluaXRfc3JiICsgUkVUQ09E
RV9PRlNUKTsNCi0gICAgICAgIGVyciA9IG50b2hzKHJlYWR3KHRpLT5pbml0
X3NyYiArIE9QRU5fRVJST1JfQ09ERV9PRlNUKSk7DQorICAgICAgICBlcnIg
PSBzd2FiMTYocmVhZHcodGktPmluaXRfc3JiICsgT1BFTl9FUlJPUl9DT0RF
X09GU1QpKTsNCiAgICAgICAgIGlmICghcmV0X2NvZGUpIHsNCiAJCXRpLT5v
cGVuX3N0YXR1cyA9IE9QRU47IC8qIFRSIGFkYXB0ZXIgaXMgbm93IGF2YWls
YWJsZSAqLw0KICAgICAgICAgICAgICAgICBpZiAodGktPm9wZW5fbW9kZSA9
PSBBVVRPTUFUSUMpIHsNCkBAIC0xMjA2LDcgKzEyMTQsNyBAQA0KIAkJX191
MzIgY2hlY2tfcmVhc29uOw0KIAkJX191OCBjaGVja19yZWFzb25fcGFnZSA9
IDA7DQogCQljaGVja19yZWFzb24gPQ0KLQkJCW50b2hzKHJlYWR3KHRpLT5t
bWlvKyBBQ0FfT0ZGU0VUK0FDQV9SVyArIFdXQ1JfRVZFTikpOw0KKwkJCXN3
YWIxNihyZWFkdyh0aS0+bW1pbysgQUNBX09GRlNFVCtBQ0FfUlcgKyBXV0NS
X0VWRU4pKTsNCiAJCWlmICh0aS0+cGFnZV9tYXNrKSB7DQogCQkJY2hlY2tf
cmVhc29uX3BhZ2UgPSAoY2hlY2tfcmVhc29uID4+IDgpICYgdGktPnBhZ2Vf
bWFzazsNCiAJCQljaGVja19yZWFzb24gJj0gfih0aS0+cGFnZV9tYXNrIDw8
IDgpOw0KQEAgLTEzOTYsMTUgKzE0MDQsMTUgQEANCiAJCXN3aXRjaCAocmVh
ZGIodGktPmFyYikpIHsJLyogQVJCIGNvbW1hbmQgY2hlY2sgKi8NCiAJCWNh
c2UgRExDX1NUQVRVUzoNCiAJCQlEUFJJTlRLKCJETENfU1RBVFVTIG5ldyBz
dGF0dXM6ICUwMlggb24gc3RhdGlvbiAlMDJYXG4iLA0KLQkJCQludG9ocyhy
ZWFkdyh0aS0+YXJiICsgU1RBVFVTX09GU1QpKSwNCi0JCQkJbnRvaHMocmVh
ZHcodGktPmFyYisgU1RBVElPTl9JRF9PRlNUKSkpOw0KKwkJCQlzd2FiMTYo
cmVhZHcodGktPmFyYiArIFNUQVRVU19PRlNUKSksDQorCQkJCXN3YWIxNihy
ZWFkdyh0aS0+YXJiKyBTVEFUSU9OX0lEX09GU1QpKSk7DQogCQkJYnJlYWs7
DQogCQljYXNlIFJFQ19EQVRBOg0KIAkJCXRyX3J4KGRldik7DQogCQkJYnJl
YWs7DQogCQljYXNlIFJJTkdfU1RBVF9DSEFOR0U6ew0KIAkJCXVuc2lnbmVk
IHNob3J0IHJpbmdfc3RhdHVzOw0KLQkJCXJpbmdfc3RhdHVzPSBudG9ocyhy
ZWFkdyh0aS0+YXJiICsgTkVUV19TVEFUVVNfT0ZTVCkpOw0KKwkJCXJpbmdf
c3RhdHVzPSBzd2FiMTYocmVhZHcodGktPmFyYiArIE5FVFdfU1RBVFVTX09G
U1QpKTsNCiAJCQlpZiAoaWJtdHJfZGVidWdfdHJhY2UgJiBUUkNfSU5JVCkN
CiAJCQkJRFBSSU5USygiUmluZyBTdGF0dXMgQ2hhbmdlLi4uKDB4JXgpXG4i
LA0KIAkJCQkJCQkJcmluZ19zdGF0dXMpOw0KQEAgLTE1MDEsNyArMTUwOSw3
IEBADQogI2lmbmRlZiBQQ01DSUENCiAgICAgICAgIHRpLT5zcmFtX3ZpcnQg
PSAodTMyKWlvcmVtYXAoKChfX3UzMil0aS0+c3JhbV9iYXNlIDw8IDEyKSwg
dGktPmF2YWlsX3NoYXJlZF9yYW0pOw0KICNlbmRpZg0KLQl0aS0+aW5pdF9z
cmIgPSBudG9ocyhyZWFkdyh0aS0+bW1pbyArIEFDQV9PRkZTRVQgKyBXUkJS
X0VWRU4pKTsNCisJdGktPmluaXRfc3JiID0gc3dhYjE2KHJlYWR3KHRpLT5t
bWlvICsgQUNBX09GRlNFVCArIFdSQlJfRVZFTikpOw0KIAlpZiAodGktPnBh
Z2VfbWFzaykgew0KIAkJdGktPmluaXRfc3JiX3BhZ2UgPSAodGktPmluaXRf
c3JiID4+IDgpICYgdGktPnBhZ2VfbWFzazsNCiAJCXRpLT5pbml0X3NyYiAm
PSB+KHRpLT5wYWdlX21hc2sgPDwgOCk7DQpAQCAtMTUzMSw3ICsxNTM5LDcg
QEANCiAJfQ0KICNlbmRpZg0KIA0KLQlod19lbmNvZGVkX2FkZHIgPSByZWFk
dyh0aS0+aW5pdF9zcmIgKyBFTkNPREVEX0FERFJFU1NfT0ZTVCk7DQorCWh3
X2VuY29kZWRfYWRkciA9IHN3YWIxNihyZWFkdyh0aS0+aW5pdF9zcmIgKyBF
TkNPREVEX0FERFJFU1NfT0ZTVCkpOw0KIAllbmNvZGVkX2FkZHIgPSBudG9o
cyhod19lbmNvZGVkX2FkZHIpOw0KICAgICAgICAgaW5pdF9zdGF0dXM9IC8q
Qk1TIDEyLzIwMDAgY2hlY2sgZm9yIHNoYWxsb3cgbW9kZSBwb3NzaWJpbGl0
eSAoVHVyYm8pKi8NCiAJcmVhZGIodGktPmluaXRfc3JiK29mZnNldG9mKHN0
cnVjdCBzcmJfaW5pdF9yZXNwb25zZSxpbml0X3N0YXR1cykpOw0KQEAgLTE1
NzcsNyArMTU4NSw3IEBADQogCSAgIEhlcmUgd2UgY29tcHV0ZSB0aGUgZWZm
ZWN0aXZlIGFkZHJlc3Mgd2hlcmUgd2Ugd2lsbCBwbGFjZSBkYXRhLg0KIAkq
Lw0KIAlTRVRfUEFHRSh0aS0+YXJiX3BhZ2UpOw0KLQlkaGI9ZGhiX2Jhc2U9
bnRvaHMocmVhZHcodGktPmFyYiArIERIQl9BRERSRVNTX09GU1QpKTsNCisJ
ZGhiPWRoYl9iYXNlPXN3YWIxNihyZWFkdyh0aS0+YXJiICsgREhCX0FERFJF
U1NfT0ZTVCkpOw0KIAlpZiAodGktPnBhZ2VfbWFzaykgew0KIAkJZGhiX3Bh
Z2UgPSAoZGhiX2Jhc2UgPj4gOCkgJiB0aS0+cGFnZV9tYXNrOw0KIAkJZGhi
PWRoYl9iYXNlICYgfih0aS0+cGFnZV9tYXNrIDw8IDgpOw0KQEAgLTE2MDAs
MTIgKzE2MDgsMTIgQEANCiAJeG1pdF9jb21tYW5kID0geHNyYi5jb21tYW5k
Ow0KIA0KIAl3cml0ZWIoeG1pdF9jb21tYW5kLCB0aS0+YXNiICsgQ09NTUFO
RF9PRlNUKTsNCi0Jd3JpdGV3KHhzcmIuc3RhdGlvbl9pZCwgdGktPmFzYiAr
IFNUQVRJT05fSURfT0ZTVCk7DQorCXdyaXRldyhjcHVfdG9fbGUxNih4c3Ji
LnN0YXRpb25faWQpLCB0aS0+YXNiICsgU1RBVElPTl9JRF9PRlNUKTsNCiAJ
d3JpdGViKGxsY19zc2FwLCB0aS0+YXNiICsgUlNBUF9WQUxVRV9PRlNUKTsN
CiAJd3JpdGViKHhzcmIuY21kX2NvcnIsIHRpLT5hc2IgKyBDTURfQ09SUkVM
QVRFX09GU1QpOw0KIAl3cml0ZWIoMCwgdGktPmFzYiArIFJFVENPREVfT0ZT
VCk7DQogCWlmICgoeG1pdF9jb21tYW5kID09IFhNSVRfWElEX0NNRCkgfHwg
KHhtaXRfY29tbWFuZCA9PSBYTUlUX1RFU1RfQ01EKSkgew0KLQkJd3JpdGV3
KGh0b25zKDB4MTEpLCB0aS0+YXNiICsgRlJBTUVfTEVOR1RIX09GU1QpOw0K
KwkJd3JpdGV3KHN3YWIxNigweDExKSwgdGktPmFzYiArIEZSQU1FX0xFTkdU
SF9PRlNUKTsNCiAJCXdyaXRlYigweDBlLCB0aS0+YXNiICsgSEVBREVSX0xF
TkdUSF9PRlNUKTsNCiAJCVNFVF9QQUdFKGRoYl9wYWdlKTsNCiAJCXdyaXRl
YihBQywgZGhiKTsNCkBAIC0xNjIyLDcgKzE2MzAsNyBAQA0KIAkgKiAgICBi
dWZmZXIgaWRlbnRpZmllZCBpbiB0aGUgY29tbWFuZCBkYXRhIHJlY2VpdmVk
IHdpdGggdGhlIGludGVycnVwdC4NCiAJICovDQogCXdyaXRlYihoZHJfbGVu
LCB0aS0+YXNiICsgSEVBREVSX0xFTkdUSF9PRlNUKTsNCi0Jd3JpdGV3KGh0
b25zKHRpLT5jdXJyZW50X3NrYi0+bGVuKSwgdGktPmFzYiArIEZSQU1FX0xF
TkdUSF9PRlNUKTsNCisJd3JpdGV3KHN3YWIxNih0aS0+Y3VycmVudF9za2It
PmxlbiksIHRpLT5hc2IgKyBGUkFNRV9MRU5HVEhfT0ZTVCk7DQogCXNyY19s
ZW49dGktPmN1cnJlbnRfc2tiLT5sZW47DQogCXNyY19vZmZzZXQ9MDsNCiAJ
ZGhiPWRoYl9iYXNlOw0KQEAgLTE2OTgsOCArMTcwNiw4IEBADQogCWlmIChy
ZWFkYih0aS0+YXNiICsgUkVUQ09ERV9PRlNUKSAhPTB4RkYpIERQUklOVEso
IkFTQiBub3QgZnJlZSAhISFcbiIpOw0KIA0KIAl3cml0ZWIoUkVDX0RBVEEs
IHRpLT5hc2IgKyBDT01NQU5EX09GU1QpOw0KLQl3cml0ZXcocmFyYi5zdGF0
aW9uX2lkLCB0aS0+YXNiICsgU1RBVElPTl9JRF9PRlNUKTsNCi0Jd3JpdGV3
KHJhcmIucmVjX2J1Zl9hZGRyLCB0aS0+YXNiICsgUkVDRUlWRV9CVUZGRVJf
T0ZTVCk7DQorCXdyaXRldyhjcHVfdG9fbGUxNihyYXJiLnN0YXRpb25faWQp
LCB0aS0+YXNiICsgU1RBVElPTl9JRF9PRlNUKTsNCisJd3JpdGV3KGNwdV90
b19sZTE2KHJhcmIucmVjX2J1Zl9hZGRyKSwgdGktPmFzYiArIFJFQ0VJVkVf
QlVGRkVSX09GU1QpOw0KIA0KIAlsYW5faGRyX2xlbiA9IHJhcmIubGFuX2hk
cl9sZW47DQogCWlmIChsYW5faGRyX2xlbiA+IHNpemVvZihzdHJ1Y3QgdHJo
X2hkcikpIHsNCkBAIC0xNzIyLDcgKzE3MzAsNyBAQA0KIAkJKGludCkgcmVh
ZGIobGxjICsgRFNBUF9PRlNUKSwgKGludCkgcmVhZGIobGxjICsgU1NBUF9P
RlNUKSwNCiAJCShpbnQpIHJlYWRiKGxsYyArIExMQ19PRlNUKSwgKGludCkg
cmVhZGIobGxjICsgUFJPVElEX09GU1QpLA0KIAkJKGludCkgcmVhZGIobGxj
K1BST1RJRF9PRlNUKzEpLChpbnQpcmVhZGIobGxjK1BST1RJRF9PRlNUICsg
MiksDQotCQkoaW50KSBudG9ocyhyZWFkdyhsbGMgKyBFVEhFUlRZUEVfT0ZT
VCkpKTsNCisJCShpbnQpIHN3YWIxNihyZWFkdyhsbGMgKyBFVEhFUlRZUEVf
T0ZTVCkpKTsNCiAjZW5kaWYNCiAJaWYgKHJlYWRiKGxsYyArIG9mZnNldG9m
KHN0cnVjdCB0cmxsYywgbGxjKSkgIT0gVUlfQ01EKSB7DQogCQlTRVRfUEFH
RSh0aS0+YXNiX3BhZ2UpOw0KQEAgLTE3NzUsNyArMTc4Myw3IEBADQogCXNr
Yl9wdXQoc2tiLCBsZW5ndGgpOw0KIAlza2ItPmRldiA9IGRldjsNCiAJZGF0
YSA9IHNrYi0+ZGF0YTsNCi0JcmJ1ZmZlcl9sZW4gPSBudG9ocyhyZWFkdyhy
YnVmZmVyICsgb2Zmc2V0b2Yoc3RydWN0IHJlY19idWYsIGJ1Zl9sZW4pKSk7
DQorCXJidWZmZXJfbGVuID0gc3dhYjE2KHJlYWR3KHJidWZmZXIgKyBvZmZz
ZXRvZihzdHJ1Y3QgcmVjX2J1ZiwgYnVmX2xlbikpKTsNCiAJcmJ1ZmRhdGEg
PSByYnVmZmVyICsgb2Zmc2V0b2Yoc3RydWN0IHJlY19idWYsIGRhdGEpOw0K
IA0KIAlpZiAoSVB2NF9wKSB7DQpAQCAtMTc5OSwxMiArMTgwNywxNCBAQA0K
IAkJaWYgKGlibXRyX2RlYnVnX3RyYWNlJlRSQ19JTklUViAmJiBsZW5ndGgg
PCByYnVmZmVyX2xlbikNCiAJCQlEUFJJTlRLKCJDVVJJT1VTLCBsZW5ndGg9
JWQgPCByYnVmZmVyX2xlbj0lZFxuIiwNCiAJCQkJCQlsZW5ndGgscmJ1ZmZl
cl9sZW4pOw0KKyNpZiBUUl9DSEVDS1NVTQ0KIAkJaWYgKElQdjRfcCkNCiAJ
CQljaGtzdW09Y3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjaygodm9pZCopcmJ1
ZmRhdGEsDQogCQkJICAgIGRhdGEsbGVuZ3RoPHJidWZmZXJfbGVuP2xlbmd0
aDpyYnVmZmVyX2xlbixjaGtzdW0pOw0KIAkJZWxzZQ0KKyNlbmRpZg0KIAkJ
CW1lbWNweV9mcm9taW8oZGF0YSwgcmJ1ZmRhdGEsIHJidWZmZXJfbGVuKTsN
Ci0JCXJidWZmZXIgPSBudG9ocyhyZWFkdyhyYnVmZmVyK0JVRkZFUl9QT0lO
VEVSX09GU1QpKSA7DQorCQlyYnVmZmVyID0gc3dhYjE2KHJlYWR3KHJidWZm
ZXIrQlVGRkVSX1BPSU5URVJfT0ZTVCkpIDsNCiAJCWlmICghcmJ1ZmZlcikN
CiAJCQlicmVhazsNCiAJCXJidWZmZXIgLT0gMjsNCkBAIC0xODE2LDcgKzE4
MjYsNyBAQA0KIAkJfQ0KIAkJcmJ1ZmZlciArPSB0aS0+c3JhbV92aXJ0Ow0K
IAkJU0VUX1BBR0UocmJ1ZmZlcl9wYWdlKTsNCi0JCXJidWZmZXJfbGVuID0g
bnRvaHMocmVhZHcocmJ1ZmZlciArIEJVRkZFUl9MRU5HVEhfT0ZTVCkpOw0K
KwkJcmJ1ZmZlcl9sZW4gPSBzd2FiMTYocmVhZHcocmJ1ZmZlciArIEJVRkZF
Ul9MRU5HVEhfT0ZTVCkpOw0KIAkJcmJ1ZmRhdGEgPSByYnVmZmVyICsgb2Zm
c2V0b2Yoc3RydWN0IHJlY19idWYsIGRhdGEpOw0KIAl9DQogDQpAQCAtMTgy
OSwxMCArMTgzOSwxMiBAQA0KIAl0aS0+dHJfc3RhdHMucnhfcGFja2V0cysr
Ow0KIA0KIAlza2ItPnByb3RvY29sID0gdHJfdHlwZV90cmFucyhza2IsIGRl
dik7DQorI2lmIFRSX0NIRUNLU1VNDQogCWlmIChJUHY0X3ApIHsNCiAJCXNr
Yi0+Y3N1bSA9IGNoa3N1bTsNCiAJCXNrYi0+aXBfc3VtbWVkID0gMTsNCiAJ
fQ0KKyNlbmRpZg0KIAluZXRpZl9yeChza2IpOw0KIAlkZXYtPmxhc3Rfcngg
PSBqaWZmaWVzOw0KIH0JCQkJLyp0cl9yeCAqLw0K
--2831155551-2009707125-1011038006=:7418--