From owner-freebsd-stable@FreeBSD.ORG Thu Nov 9 01:19:08 2006 Return-Path: X-Original-To: freebsd-stable@freebsd.org Delivered-To: freebsd-stable@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 5106516A49E for ; Thu, 9 Nov 2006 01:19:08 +0000 (UTC) (envelope-from jfvogel@gmail.com) Received: from py-out-1112.google.com (py-out-1112.google.com [64.233.166.177]) by mx1.FreeBSD.org (Postfix) with ESMTP id 4B73243D4C for ; Thu, 9 Nov 2006 01:19:06 +0000 (GMT) (envelope-from jfvogel@gmail.com) Received: by py-out-1112.google.com with SMTP id f31so17136pyh for ; Wed, 08 Nov 2006 17:19:03 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:mime-version:content-type; b=hhGDK6G8zL3TeNtAlEyvbiGZGewTxN1vSX6Mia6LdUz5bfwOZeAkCZTjWVDACaTi6hq9YhCSZHPqmU/xug2hv6uq1FYLRPcQGPZydrtsvzvCRJ4RqneIDxqfiyzDrUw3CWtGrfiPhY3Leqt94XAu+cu11rfRMjlom2p2Lha78Js= Received: by 10.35.99.6 with SMTP id b6mr614488pym.1163035143153; Wed, 08 Nov 2006 17:19:03 -0800 (PST) Received: by 10.35.118.6 with HTTP; Wed, 8 Nov 2006 17:19:02 -0800 (PST) Message-ID: <2a41acea0611081719h31be096eu614d2f2325aff511@mail.gmail.com> Date: Wed, 8 Nov 2006 17:19:02 -0800 From: "Jack Vogel" To: "Scott Long" , "Gleb Smirnoff" , "John Baldwin" , RelEng , "Prafulla Deuskar" , freebsd-stable@freebsd.org, freebsd-net MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_35052_20023030.1163035142787" Cc: Subject: Proposed 6.2 em RELEASE patch X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Nov 2006 01:19:08 -0000 ------=_Part_35052_20023030.1163035142787 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline This patch is an evolution of the last one I sent out. It has a couple of minor corrections, like a bad forward decl in the header. The last patch has had quite a bit of testing and all reports have been positive. The only complaint was from Gleb who says he needs to keep his beloved infinite for loop in the interrupt handler, well I have a better one for you Gleb, keep reading. I have also been doing some extreme stress testing using SmartBits, and discovered the driver as it stands is really not able to take extreme receive side pounding, Scott pointed out that this is why the FAST_INTR work was done :) There were some people that had stability issues with that work, but there were also many that did not. I actually merged the FAST code onto my last patch, and ran the SB stress and found it really was able to gracefully handle that load, way to go Scott :) I've pondered this situation, and this patch I'm including here today is the result. Here's what it does: If you drop it in place, compile it, and go... you will get the code that has been tested for a week, it uses the older style interrupts, it has the watchdog and other SMP fixes so its been proven. BUT, I've added the FAST_INTR changes back into the code, so if you go into your Makefile and add -DEM_FAST_INTR you will then get the taskqueue stuff. So, Gleb, rather than replace the infinite for loop that no one thinks is a good idea, you can just define FAST_INTR again, and you should be good to go. I see this as the best thing for the 6.2 RELEASE, it lets us keep moving forward, people that want max performance can define EM_FAST_INTR and help us wring out any problems, it also will mean that I will have our Intel test group start using this code. But for those that just want a stable driver the standard compile will still give them that. The patch I'm including is against BETA3. Let me know of your concerns or issues. Cheers, Jack ------=_Part_35052_20023030.1163035142787 Content-Type: text/x-patch; name="proposed-6.2.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="proposed-6.2.patch" X-Attachment-Id: f_euaw91bp ZGlmZiAtTmF1ciBzdGFibGUvZGV2L2VtL2lmX2VtLmMgbmV3cGF0Y2gvZGV2L2VtL2lmX2VtLmMK LS0tIHN0YWJsZS9kZXYvZW0vaWZfZW0uYwlXZWQgTm92ICA4IDIzOjQyOjIwIDIwMDYKKysrIG5l d3BhdGNoL2Rldi9lbS9pZl9lbS5jCVdlZCBOb3YgIDggMjM6NDQ6MTYgMjAwNgpAQCAtMjA0LDcg KzIwNCw3IEBACiBzdGF0aWMgdm9pZAllbV9zdGFydChzdHJ1Y3QgaWZuZXQgKik7CiBzdGF0aWMg dm9pZAllbV9zdGFydF9sb2NrZWQoc3RydWN0IGlmbmV0ICppZnApOwogc3RhdGljIGludAllbV9p b2N0bChzdHJ1Y3QgaWZuZXQgKiwgdV9sb25nLCBjYWRkcl90KTsKLXN0YXRpYyB2b2lkCWVtX3dh dGNoZG9nKHN0cnVjdCBpZm5ldCAqKTsKK3N0YXRpYyB2b2lkCWVtX3dhdGNoZG9nKHN0cnVjdCBh ZGFwdGVyICopOwogc3RhdGljIHZvaWQJZW1faW5pdCh2b2lkICopOwogc3RhdGljIHZvaWQJZW1f aW5pdF9sb2NrZWQoc3RydWN0IGFkYXB0ZXIgKik7CiBzdGF0aWMgdm9pZAllbV9zdG9wKHZvaWQg Kik7CkBAIC0yMTIsNiArMjEyLDggQEAKIHN0YXRpYyBpbnQJZW1fbWVkaWFfY2hhbmdlKHN0cnVj dCBpZm5ldCAqKTsKIHN0YXRpYyB2b2lkCWVtX2lkZW50aWZ5X2hhcmR3YXJlKHN0cnVjdCBhZGFw dGVyICopOwogc3RhdGljIGludAllbV9hbGxvY2F0ZV9wY2lfcmVzb3VyY2VzKHN0cnVjdCBhZGFw dGVyICopOworc3RhdGljIGludAllbV9hbGxvY2F0ZV9pbnRyKHN0cnVjdCBhZGFwdGVyICopOwor c3RhdGljIHZvaWQJZW1fZnJlZV9pbnRyKHN0cnVjdCBhZGFwdGVyICopOwogc3RhdGljIHZvaWQJ ZW1fZnJlZV9wY2lfcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICopOwogc3RhdGljIHZvaWQJZW1f bG9jYWxfdGltZXIodm9pZCAqKTsKIHN0YXRpYyBpbnQJZW1faGFyZHdhcmVfaW5pdChzdHJ1Y3Qg YWRhcHRlciAqKTsKQEAgLTI1Myw4ICsyNTUsNyBAQAogc3RhdGljIGludAllbV84MjU0N19maWZv X3dvcmthcm91bmQoc3RydWN0IGFkYXB0ZXIgKiwgaW50KTsKIHN0YXRpYyB2b2lkCWVtXzgyNTQ3 X3VwZGF0ZV9maWZvX2hlYWQoc3RydWN0IGFkYXB0ZXIgKiwgaW50KTsKIHN0YXRpYyBpbnQJZW1f ODI1NDdfdHhfZmlmb19yZXNldChzdHJ1Y3QgYWRhcHRlciAqKTsKLXN0YXRpYyB2b2lkCWVtXzgy NTQ3X21vdmVfdGFpbCh2b2lkICphcmcpOwotc3RhdGljIHZvaWQJZW1fODI1NDdfbW92ZV90YWls X2xvY2tlZChzdHJ1Y3QgYWRhcHRlciAqKTsKK3N0YXRpYyB2b2lkCWVtXzgyNTQ3X21vdmVfdGFp bCh2b2lkICopOwogc3RhdGljIGludAllbV9kbWFfbWFsbG9jKHN0cnVjdCBhZGFwdGVyICosIGJ1 c19zaXplX3QsCiAJCXN0cnVjdCBlbV9kbWFfYWxsb2MgKiwgaW50KTsKIHN0YXRpYyB2b2lkCWVt X2RtYV9mcmVlKHN0cnVjdCBhZGFwdGVyICosIHN0cnVjdCBlbV9kbWFfYWxsb2MgKik7CkBAIC0y NjcsMTEgKzI2OCwxOCBAQAogc3RhdGljIGludAllbV9zeXNjdGxfaW50X2RlbGF5KFNZU0NUTF9I QU5ETEVSX0FSR1MpOwogc3RhdGljIHZvaWQJZW1fYWRkX2ludF9kZWxheV9zeXNjdGwoc3RydWN0 IGFkYXB0ZXIgKiwgY29uc3QgY2hhciAqLAogCQljb25zdCBjaGFyICosIHN0cnVjdCBlbV9pbnRf ZGVsYXlfaW5mbyAqLCBpbnQsIGludCk7CitzdGF0aWMgdm9pZAllbV9hZGRfcnhfcHJvY2Vzc19s aW1pdChzdHJ1Y3QgYWRhcHRlciAqLCBjb25zdCBjaGFyICosCisJCWNvbnN0IGNoYXIgKiwgaW50 ICosIGludCk7CisjaWZkZWYgRU1fRkFTVF9JTlRSCitzdGF0aWMgdm9pZAllbV9pbnRyX2Zhc3Qo dm9pZCAqKTsKK3N0YXRpYyB2b2lkCWVtX2hhbmRsZV9yeHR4KHZvaWQgKmNvbnRleHQsIGludCBw ZW5kaW5nKTsKK3N0YXRpYyB2b2lkCWVtX2hhbmRsZV9saW5rKHZvaWQgKmNvbnRleHQsIGludCBw ZW5kaW5nKTsKKyNlbHNlIC8qIExlZ2FjeSBJbnRlcnJ1cHQgSGFuZGxpbmcgKi8KIHN0YXRpYyB2 b2lkCWVtX2ludHIodm9pZCAqKTsKLQogI2lmZGVmIERFVklDRV9QT0xMSU5HCiBzdGF0aWMgcG9s bF9oYW5kbGVyX3QgZW1fcG9sbDsKLSNlbmRpZgorI2VuZGlmIC8qIERFVklDRV9QT0xMSU5HICov CisjZW5kaWYgLyogRU1fRkFTVF9JTlRSICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICBGcmVlQlNE IERldmljZSBJbnRlcmZhY2UgRW50cnkgUG9pbnRzCkBAIC0zMjEsNiArMzI5LDEwIEBACiBUVU5B QkxFX0lOVCgiaHcuZW0udHhkIiwgJmVtX3R4ZCk7CiBUVU5BQkxFX0lOVCgiaHcuZW0uc21hcnRf cHdyX2Rvd24iLCAmZW1fc21hcnRfcHdyX2Rvd24pOwogCisvKiBIb3cgbWFueSBwYWNrZXRzIHJ4 ZW9mIHRyaWVzIHRvIGNsZWFuIGF0IGEgdGltZSAqLworc3RhdGljIGludCBlbV9yeF9wcm9jZXNz X2xpbWl0ID0gMTAwOworVFVOQUJMRV9JTlQoImh3LmVtLnJ4X3Byb2Nlc3NfbGltaXQiLCAmZW1f cnhfcHJvY2Vzc19saW1pdCk7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICBEZXZpY2UgaWRlbnRpZmlj YXRpb24gcm91dGluZQogICoKQEAgLTQwNiw4ICs0MTgsOCBAQAogCSAgICBPSURfQVVUTywgInN0 YXRzIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywgYWRhcHRlciwgMCwKIAkgICAgZW1fc3lzY3Rs X3N0YXRzLCAiSSIsICJTdGF0aXN0aWNzIik7CiAKLQljYWxsb3V0X2luaXQoJmFkYXB0ZXItPnRp bWVyLCBDQUxMT1VUX01QU0FGRSk7Ci0JY2FsbG91dF9pbml0KCZhZGFwdGVyLT50eF9maWZvX3Rp bWVyLCBDQUxMT1VUX01QU0FGRSk7CisJY2FsbG91dF9pbml0X210eCgmYWRhcHRlci0+dGltZXIs ICZhZGFwdGVyLT5tdHgsIDApOworCWNhbGxvdXRfaW5pdF9tdHgoJmFkYXB0ZXItPnR4X2ZpZm9f dGltZXIsICZhZGFwdGVyLT5tdHgsIDApOwogCiAJLyogRGV0ZXJtaW5lIGhhcmR3YXJlIHJldmlz aW9uICovCiAJZW1faWRlbnRpZnlfaGFyZHdhcmUoYWRhcHRlcik7CkBAIC00MzIsNiArNDQ0LDEx IEBACiAJCSAgICBlbV90eF9hYnNfaW50X2RlbGF5X2RmbHQpOwogCX0KIAorCS8qIFN5c2N0bHMg Zm9yIGxpbWl0aW5nIHRoZSBhbW91bnQgb2Ygd29yayBkb25lIGluIHRoZSB0YXNrcXVldWUgKi8K KwllbV9hZGRfcnhfcHJvY2Vzc19saW1pdChhZGFwdGVyLCAicnhfcHJvY2Vzc2luZ19saW1pdCIs CisJICAgICJtYXggbnVtYmVyIG9mIHJ4IHBhY2tldHMgdG8gcHJvY2VzcyIsICZhZGFwdGVyLT5y eF9wcm9jZXNzX2xpbWl0LAorCSAgICBlbV9yeF9wcm9jZXNzX2xpbWl0KTsKKwogCS8qCiAJICog VmFsaWRhdGUgbnVtYmVyIG9mIHRyYW5zbWl0IGFuZCByZWNlaXZlIGRlc2NyaXB0b3JzLiBJdAog CSAqIG11c3Qgbm90IGV4Y2VlZCBoYXJkd2FyZSBtYXhpbXVtLCBhbmQgbXVzdCBiZSBtdWx0aXBs ZQpAQCAtNTU0LDYgKzU3MSw4IEBACiAJLyogU2V0dXAgT1Mgc3BlY2lmaWMgbmV0d29yayBpbnRl cmZhY2UgKi8KIAllbV9zZXR1cF9pbnRlcmZhY2UoZGV2LCBhZGFwdGVyKTsKIAorCWVtX2FsbG9j YXRlX2ludHIoYWRhcHRlcik7CisKIAkvKiBJbml0aWFsaXplIHN0YXRpc3RpY3MgKi8KIAllbV9j bGVhcl9od19jbnRycygmYWRhcHRlci0+aHcpOwogCWVtX3VwZGF0ZV9zdGF0c19jb3VudGVycyhh ZGFwdGVyKTsKQEAgLTU4Niw2ICs2MDUsNyBAQAogCWVtX2RtYV9mcmVlKGFkYXB0ZXIsICZhZGFw dGVyLT50eGRtYSk7CiBlcnJfdHhfZGVzYzoKIGVycl9wY2k6CisJZW1fZnJlZV9pbnRyKGFkYXB0 ZXIpOwogCWVtX2ZyZWVfcGNpX3Jlc291cmNlcyhhZGFwdGVyKTsKIAlFTV9MT0NLX0RFU1RST1ko YWRhcHRlcik7CiAKQEAgLTYxNSw2ICs2MzUsNyBAQAogCQlldGhlcl9wb2xsX2RlcmVnaXN0ZXIo aWZwKTsKICNlbmRpZgogCisJZW1fZnJlZV9pbnRyKGFkYXB0ZXIpOwogCUVNX0xPQ0soYWRhcHRl cik7CiAJYWRhcHRlci0+aW5fZGV0YWNoID0gMTsKIAllbV9zdG9wKGFkYXB0ZXIpOwpAQCAtNjIy LDYgKzY0Myw5IEBACiAJRU1fVU5MT0NLKGFkYXB0ZXIpOwogCWV0aGVyX2lmZGV0YWNoKGFkYXB0 ZXItPmlmcCk7CiAKKwljYWxsb3V0X2RyYWluKCZhZGFwdGVyLT50aW1lcik7CisJY2FsbG91dF9k cmFpbigmYWRhcHRlci0+dHhfZmlmb190aW1lcik7CisKIAllbV9mcmVlX3BjaV9yZXNvdXJjZXMo YWRhcHRlcik7CiAJYnVzX2dlbmVyaWNfZGV0YWNoKGRldik7CiAJaWZfZnJlZShpZnApOwpAQCAt NzM5LDcgKzc2Myw3IEBACiAJCUJQRl9NVEFQKGlmcCwgbV9oZWFkKTsKIAogCQkvKiBTZXQgdGlt ZW91dCBpbiBjYXNlIGhhcmR3YXJlIGhhcyBwcm9ibGVtcyB0cmFuc21pdHRpbmcuICovCi0JCWlm cC0+aWZfdGltZXIgPSBFTV9UWF9USU1FT1VUOworCQlhZGFwdGVyLT53YXRjaGRvZ190aW1lciA9 IEVNX1RYX1RJTUVPVVQ7CiAJfQogfQogCkBAIC05NDAsMzUgKzk2NCw0NiBAQAogfQogCiAvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCi0gKiAgV2F0Y2hkb2cgZW50cnkgcG9pbnQKKyAqICBXYXRjaGRvZyB0aW1lcjoK ICAqCi0gKiAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuZXZlciBoYXJkd2FyZSBxdWl0cyB0 cmFuc21pdHRpbmcuCisgKiAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmcm9tIHRoZSBsb2NhbCB0 aW1lciBldmVyeSBzZWNvbmQuCisgKiAgQXMgbG9uZyBhcyB0cmFuc21pdCBkZXNjcmlwdG9ycyBh cmUgYmVpbmcgY2xlYW5lZCB0aGUgdmFsdWUKKyAqICBpcyBub24temVybyBhbmQgd2UgZG8gbm90 aGluZy4gUmVhY2hpbmcgMCBpbmRpY2F0ZXMgYSB0eCBoYW5nCisgKiAgYW5kIHdlIHRoZW4gcmVz ZXQgdGhlIGRldmljZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIHZvaWQKLWVtX3dh dGNoZG9nKHN0cnVjdCBpZm5ldCAqaWZwKQorZW1fd2F0Y2hkb2coc3RydWN0IGFkYXB0ZXIgKmFk YXB0ZXIpCiB7Ci0Jc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBpZnAtPmlmX3NvZnRjOwogCi0J RU1fTE9DSyhhZGFwdGVyKTsKKwlFTV9MT0NLX0FTU0VSVChhZGFwdGVyKTsKKworCS8qCisJKiog VGhlIHRpbWVyIGlzIHNldCB0byA1IGV2ZXJ5IHRpbWUgc3RhcnQgcXVldWVzIGEgcGFja2V0Lgor CSoqIFRoZW4gdHhlb2Yga2VlcHMgcmVzZXR0aW5nIHRvIDUgYXMgbG9uZyBhcyBpdCBjbGVhbnMg YXQKKwkqKiBsZWFzdCBvbmUgZGVzY3JpcHRvci4KKwkqKiBGaW5hbGx5LCBhbnl0aW1lIGFsbCBk ZXNjcmlwdG9ycyBhcmUgY2xlYW4gdGhlIHRpbWVyIGlzCisJKiogc2V0IHRvIDAuCisJKi8KKwlp ZiAoYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIgPT0gMCB8fCAtLWFkYXB0ZXItPndhdGNoZG9nX3Rp bWVyKQorCQlyZXR1cm47CisKIAkvKiBJZiB3ZSBhcmUgaW4gdGhpcyByb3V0aW5lIGJlY2F1c2Ug b2YgcGF1c2UgZnJhbWVzLCB0aGVuCiAJICogZG9uJ3QgcmVzZXQgdGhlIGhhcmR3YXJlLgogCSAq LwogCWlmIChFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFNUQVRVUykgJiBFMTAwMF9TVEFU VVNfVFhPRkYpIHsKLQkJaWZwLT5pZl90aW1lciA9IEVNX1RYX1RJTUVPVVQ7Ci0JCUVNX1VOTE9D SyhhZGFwdGVyKTsKKwkJYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIgPSBFTV9UWF9USU1FT1VUOwog CQlyZXR1cm47CiAJfQogCiAJaWYgKGVtX2NoZWNrX2Zvcl9saW5rKCZhZGFwdGVyLT5odykgPT0g MCkKIAkJZGV2aWNlX3ByaW50ZihhZGFwdGVyLT5kZXYsICJ3YXRjaGRvZyB0aW1lb3V0IC0tIHJl c2V0dGluZ1xuIik7CiAKLQlpZnAtPmlmX2Rydl9mbGFncyAmPSB+SUZGX0RSVl9SVU5OSU5HOwor CWFkYXB0ZXItPmlmcC0+aWZfZHJ2X2ZsYWdzICY9IH5JRkZfRFJWX1JVTk5JTkc7CiAJYWRhcHRl ci0+d2F0Y2hkb2dfZXZlbnRzKys7CiAKIAllbV9pbml0X2xvY2tlZChhZGFwdGVyKTsKLQlFTV9V TkxPQ0soYWRhcHRlcik7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTExMTcsNiArMTE1MiwxMSBA QAogCiAKICNpZmRlZiBERVZJQ0VfUE9MTElORworLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBMZWdh Y3kgcG9sbGluZyByb3V0aW5lICAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQKIGVt X3BvbGwoc3RydWN0IGlmbmV0ICppZnAsIGVudW0gcG9sbF9jbWQgY21kLCBpbnQgY291bnQpCiB7 CkBAIC0xMTQ5LDExICsxMTg5LDE0IEBACiB9CiAjZW5kaWYgLyogREVWSUNFX1BPTExJTkcgKi8K IAorI2lmbmRlZiBFTV9GQVNUX0lOVFIKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiAgSW50ZXJydXB0 IFNlcnZpY2Ugcm91dGluZSAgCisgKiAgTGVnYWN5IEludGVycnVwdCBTZXJ2aWNlIHJvdXRpbmUg IAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEVNX01BWF9JTlRSIDEwCisKIHN0YXRpYyB2 b2lkCiBlbV9pbnRyKHZvaWQgKmFyZykKIHsKQEAgLTExNjIsNyArMTIwNSw2IEBACiAJdWludDMy X3QJcmVnX2ljcjsKIAogCUVNX0xPQ0soYWRhcHRlcik7Ci0KIAlpZnAgPSBhZGFwdGVyLT5pZnA7 CiAKICNpZmRlZiBERVZJQ0VfUE9MTElORwpAQCAtMTE3MiwyOCArMTIxNCwyNCBAQAogCX0KICNl bmRpZiAvKiBERVZJQ0VfUE9MTElORyAqLwogCi0JZm9yICg7OykgewotCQlyZWdfaWNyID0gRTEw MDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJQ1IpOwotCQlpZiAoYWRhcHRlci0+aHcubWFjX3R5 cGUgPj0gZW1fODI1NzEgJiYKLQkJICAgIChyZWdfaWNyICYgRTEwMDBfSUNSX0lOVF9BU1NFUlRF RCkgPT0gMCkKLQkJCWJyZWFrOwotCQllbHNlIGlmIChyZWdfaWNyID09IDApCi0JCQlicmVhazsK KwlyZWdfaWNyID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJQ1IpOwogCi0JCS8qCi0J CSAqIFhYWDogc29tZSBsYXB0b3BzIHRyaWdnZXIgc2V2ZXJhbCBzcHVyaW91cyBpbnRlcnJ1cHRz Ci0JCSAqIG9uIGVtKDQpIHdoZW4gaW4gdGhlIHJlc3VtZSBjeWNsZS4gVGhlIElDUiByZWdpc3Rl cgotCQkgKiByZXBvcnRzIGFsbC1vbmVzIHZhbHVlIGluIHRoaXMgY2FzZS4gUHJvY2Vzc2luZyBz dWNoCi0JCSAqIGludGVycnVwdHMgd291bGQgbGVhZCB0byBhIGZyZWV6ZS4gSSBkb24ndCBrbm93 IHdoeS4KLQkJICovCi0JCWlmIChyZWdfaWNyID09IDB4ZmZmZmZmZmYpCi0JCQlicmVhazsKKwlp ZiAoKHJlZ19pY3IgPT0gMCkgfHwgKGFkYXB0ZXItPmh3Lm1hY190eXBlID49IGVtXzgyNTcxICYm CisJICAgIChyZWdfaWNyICYgRTEwMDBfSUNSX0lOVF9BU1NFUlRFRCkgPT0gMCkgfHwKKwkvKgor CSAqIFhYWDogc29tZSBsYXB0b3BzIHRyaWdnZXIgc2V2ZXJhbCBzcHVyaW91cyBpbnRlcnJ1cHRz CisJICogb24gZW0oNCkgd2hlbiBpbiB0aGUgcmVzdW1lIGN5Y2xlLiBUaGUgSUNSIHJlZ2lzdGVy CisJICogcmVwb3J0cyBhbGwtb25lcyB2YWx1ZSBpbiB0aGlzIGNhc2UuIFByb2Nlc3Npbmcgc3Vj aAorCSAqIGludGVycnVwdHMgd291bGQgbGVhZCB0byBhIGZyZWV6ZS4gSSBkb24ndCBrbm93IHdo eS4KKwkgKi8KKwkgICAgKHJlZ19pY3IgPT0gMHhmZmZmZmZmZikpCisJCWdvdG8gbGVhdmluZzsK IAorCWZvciAoaW50IGkgPSAwO2kgPCBFTV9NQVhfSU5UUjsgKytpKSB7CiAJCWlmIChpZnAtPmlm X2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykgewotCQkJZW1fcnhlb2YoYWRhcHRlciwgLTEp OworCQkJZW1fcnhlb2YoYWRhcHRlciwgYWRhcHRlci0+cnhfcHJvY2Vzc19saW1pdCk7CiAJCQll bV90eGVvZihhZGFwdGVyKTsKIAkJfQotCiAJCS8qIExpbmsgc3RhdHVzIGNoYW5nZSAqLwogCQlp ZiAocmVnX2ljciAmIChFMTAwMF9JQ1JfUlhTRVEgfCBFMTAwMF9JQ1JfTFNDKSkgewogCQkJY2Fs bG91dF9zdG9wKCZhZGFwdGVyLT50aW1lcik7CkBAIC0xMjA4LDEzICsxMjQ2LDExMCBAQAogCQkJ YWRhcHRlci0+cnhfb3ZlcnJ1bnMrKzsKIAl9CiAKK2xlYXZpbmc6CiAJaWYgKGlmcC0+aWZfZHJ2 X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HICYmCiAJICAgICFJRlFfRFJWX0lTX0VNUFRZKCZpZnAt PmlmX3NuZCkpCiAJCWVtX3N0YXJ0X2xvY2tlZChpZnApOworCUVNX1VOTE9DSyhhZGFwdGVyKTsK K30KIAorI2Vsc2UgIC8qIEVNX0ZBU1RfSU5UUiAqLworCitzdGF0aWMgdm9pZAorZW1faGFuZGxl X2xpbmsodm9pZCAqY29udGV4dCwgaW50IHBlbmRpbmcpCit7CisJc3RydWN0IGFkYXB0ZXIJKmFk YXB0ZXIgPSBjb250ZXh0OworCXN0cnVjdCBpZm5ldCAqaWZwOworCisJaWZwID0gYWRhcHRlci0+ aWZwOworCisJRU1fTE9DSyhhZGFwdGVyKTsKKworCWNhbGxvdXRfc3RvcCgmYWRhcHRlci0+dGlt ZXIpOworCWFkYXB0ZXItPmh3LmdldF9saW5rX3N0YXR1cyA9IDE7CisJZW1fY2hlY2tfZm9yX2xp bmsoJmFkYXB0ZXItPmh3KTsKKwllbV91cGRhdGVfbGlua19zdGF0dXMoYWRhcHRlcik7CisJY2Fs bG91dF9yZXNldCgmYWRhcHRlci0+dGltZXIsIGh6LCBlbV9sb2NhbF90aW1lciwgYWRhcHRlcik7 CiAJRU1fVU5MT0NLKGFkYXB0ZXIpOwogfQogCitzdGF0aWMgdm9pZAorZW1faGFuZGxlX3J4dHgo dm9pZCAqY29udGV4dCwgaW50IHBlbmRpbmcpCit7CisJc3RydWN0IGFkYXB0ZXIJKmFkYXB0ZXIg PSBjb250ZXh0OworCXN0cnVjdCBpZm5ldAkqaWZwOworCisJTkVUX0xPQ0tfR0lBTlQoKTsKKwlp ZnAgPSBhZGFwdGVyLT5pZnA7CisKKwkvKgorCSAqIFRPRE86CisJICogSXQgc2hvdWxkIGJlIHBv c3NpYmxlIHRvIHJ1biB0aGUgdHggY2xlYW4gbG9vcCB3aXRob3V0IHRoZSBsb2NrLgorCSAqLwor CWlmIChpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykgeworCQlpZiAoZW1fcnhl b2YoYWRhcHRlciwgYWRhcHRlci0+cnhfcHJvY2Vzc19saW1pdCkgIT0gMCkKKwkJCXRhc2txdWV1 ZV9lbnF1ZXVlKGFkYXB0ZXItPnRxLCAmYWRhcHRlci0+cnh0eF90YXNrKTsKKwkJRU1fTE9DSyhh ZGFwdGVyKTsKKwkJZW1fdHhlb2YoYWRhcHRlcik7CisKKwkJaWYgKCFJRlFfRFJWX0lTX0VNUFRZ KCZpZnAtPmlmX3NuZCkpCisJCQllbV9zdGFydF9sb2NrZWQoaWZwKTsKKwkJRU1fVU5MT0NLKGFk YXB0ZXIpOworCX0KKworCWVtX2VuYWJsZV9pbnRyKGFkYXB0ZXIpOworCU5FVF9VTkxPQ0tfR0lB TlQoKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBGYXN0IEludGVycnVwdCBTZXJ2aWNl IHJvdXRpbmUgIAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZAorZW1faW50cl9mYXN0 KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYWRhcHRlcgkqYWRhcHRlciA9IGFyZzsKKwlzdHJ1Y3Qg aWZuZXQJKmlmcDsKKwl1aW50MzJfdAlyZWdfaWNyOworCisJaWZwID0gYWRhcHRlci0+aWZwOwor CisJcmVnX2ljciA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSUNSKTsKKworCS8qIEhv dCBlamVjdD8gICovCisJaWYgKHJlZ19pY3IgPT0gMHhmZmZmZmZmZikKKwkJcmV0dXJuOworCisJ LyogRGVmaW5pdGVseSBub3Qgb3VyIGludGVycnVwdC4gICovCisJaWYgKHJlZ19pY3IgPT0gMHgw KQorCQlyZXR1cm47CisKKwkvKgorCSAqIFN0YXJ0aW5nIHdpdGggdGhlIDgyNTcxIGNoaXAsIGJp dCAzMSBzaG91bGQgYmUgdXNlZCB0bworCSAqIGRldGVybWluZSB3aGV0aGVyIHRoZSBpbnRlcnJ1 cHQgYmVsb25ncyB0byB1cy4KKwkgKi8KKwlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPj0gZW1f ODI1NzEgJiYKKwkgICAgKHJlZ19pY3IgJiBFMTAwMF9JQ1JfSU5UX0FTU0VSVEVEKSA9PSAwKQor CQlyZXR1cm47CisKKwkvKgorCSAqIE1hc2sgaW50ZXJydXB0cyB1bnRpbCB0aGUgdGFza3F1ZXVl IGlzIGZpbmlzaGVkIHJ1bm5pbmcuICBUaGlzIGlzCisJICogY2hlYXAsIGp1c3QgYXNzdW1lIHRo YXQgaXQgaXMgbmVlZGVkLiAgVGhpcyBhbHNvIHdvcmtzIGFyb3VuZCB0aGUKKwkgKiBNU0kgbWVz c2FnZSByZW9yZGVyaW5nIGVycmF0YSBvbiBjZXJ0YWluIHN5c3RlbXMuCisJICovCisJZW1fZGlz YWJsZV9pbnRyKGFkYXB0ZXIpOworCXRhc2txdWV1ZV9lbnF1ZXVlKGFkYXB0ZXItPnRxLCAmYWRh cHRlci0+cnh0eF90YXNrKTsKKworCS8qIExpbmsgc3RhdHVzIGNoYW5nZSAqLworCWlmIChyZWdf aWNyICYgKEUxMDAwX0lDUl9SWFNFUSB8IEUxMDAwX0lDUl9MU0MpKQorCQl0YXNrcXVldWVfZW5x dWV1ZSh0YXNrcXVldWVfZmFzdCwgJmFkYXB0ZXItPmxpbmtfdGFzayk7CisKKwlpZiAocmVnX2lj ciAmIEUxMDAwX0lDUl9SWE8pCisJCWFkYXB0ZXItPnJ4X292ZXJydW5zKys7Cit9CisjZW5kaWYg LyogRU1fRkFTVF9JTlRSICovCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiAgTWVkaWEgSW9jdGwg Y2FsbGJhY2sKQEAgLTEzNjgsMjIgKzE1MDMsMTUgQEAKICAgICAgICAgICovCiAJaWYgKGFkYXB0 ZXItPm51bV90eF9kZXNjX2F2YWlsIDw9IEVNX1RYX0NMRUFOVVBfVEhSRVNIT0xEKSB7CiAJCWVt X3R4ZW9mKGFkYXB0ZXIpOwotCQlpZiAoYWRhcHRlci0+bnVtX3R4X2Rlc2NfYXZhaWwgPD0gRU1f VFhfQ0xFQU5VUF9USFJFU0hPTEQpIHsKKwkJLyogTm93IGRvIHdlIGF0IGxlYXN0IGhhdmUgYSBt aW5pbWFsPyAqLworCQlpZiAoYWRhcHRlci0+bnVtX3R4X2Rlc2NfYXZhaWwgPD0gRU1fVFhfT1Bf VEhSRVNIT0xEKSB7CiAJCQlhZGFwdGVyLT5ub190eF9kZXNjX2F2YWlsMSsrOwotCQkJcmV0dXJu KEVOT0JVRlMpOworCQkJcmV0dXJuIChFTk9CVUZTKTsKIAkJfQotICAgICAgICB9Ci0KLQkvKgot CSAqIENhcHR1cmUgdGhlIGZpcnN0IGRlc2NyaXB0b3IgaW5kZXgsCi0JICogdGhpcyBkZXNjcmlw dG9yIHdpbGwgaGF2ZSB0aGUgaW5kZXgKLQkgKiBvZiB0aGUgRU9QIHdoaWNoIGlzIHRoZSBvbmx5 IG9uZSB0aGF0Ci0JICogbm93IGdldHMgYSBET05FIGJpdCB3cml0ZWJhY2suCi0JICovCi0JZmly c3QgPSBhZGFwdGVyLT5uZXh0X2F2YWlsX3R4X2Rlc2M7CisJfQogCi0gICAgICAgIC8qIEZpbmQg b3V0IGlmIHdlIGFyZSBpbiB2bGFuIG1vZGUgKi8KLSAgICAgICAgbXRhZyA9IFZMQU5fT1VUUFVU X1RBRyhpZnAsIG1faGVhZCk7CisJLyogRmluZCBvdXQgaWYgd2UgYXJlIGluIHZsYW4gbW9kZS4g Ki8KKwltdGFnID0gVkxBTl9PVVRQVVRfVEFHKGlmcCwgbV9oZWFkKTsKIAogCS8qCiAJICogV2hl biBvcGVyYXRpbmcgaW4gcHJvbWlzY3VvdXMgbW9kZSwgaGFyZHdhcmUgZW5jYXBzdWxhdGlvbiBm b3IKQEAgLTE0MzMsNiArMTU2MSwxNCBAQAogCQkJcmV0dXJuIChFTk9CVUZTKTsKIAl9CiAKKwkv KgorCSAqIENhcHR1cmUgdGhlIGZpcnN0IGRlc2NyaXB0b3IgaW5kZXgsCisJICogdGhpcyBkZXNj cmlwdG9yIHdpbGwgaGF2ZSB0aGUgaW5kZXgKKwkgKiBvZiB0aGUgRU9QIHdoaWNoIGlzIHRoZSBv bmx5IG9uZSB0aGF0CisJICogbm93IGdldHMgYSBET05FIGJpdCB3cml0ZWJhY2suCisJICovCisJ Zmlyc3QgPSBhZGFwdGVyLT5uZXh0X2F2YWlsX3R4X2Rlc2M7CisKICAgICAgICAgLyoKICAgICAg ICAgICogTWFwIHRoZSBwYWNrZXQgZm9yIERNQS4KICAgICAgICAgICovCkBAIC0xNDUyLDYgKzE1 ODgsOCBAQAogCQkJcmV0dXJuIChFTk9CVUZTKTsKIAkJfQogCQkqbV9oZWFkcCA9IG07CisJCW1f aGVhZCA9ICptX2hlYWRwOworCiAJCS8qIFRyeSBpdCBhZ2FpbiAqLwogCQllcnJvciA9IGJ1c19k bWFtYXBfbG9hZF9tYnVmX3NnKGFkYXB0ZXItPnR4dGFnLCB0eF9idWZmZXItPm1hcCwKIAkJICAg ICptX2hlYWRwLCBzZWdzLCAmbnNlZ3MsIEJVU19ETUFfTk9XQUlUKTsKQEAgLTE2MzgsNyArMTc3 Niw3IEBACiAJICAgIEJVU19ETUFTWU5DX1BSRVJFQUQgfCBCVVNfRE1BU1lOQ19QUkVXUklURSk7 CiAJaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlID09IGVtXzgyNTQ3ICYmCiAJICAgIGFkYXB0ZXIt PmxpbmtfZHVwbGV4ID09IEhBTEZfRFVQTEVYKQotCQllbV84MjU0N19tb3ZlX3RhaWxfbG9ja2Vk KGFkYXB0ZXIpOworCQllbV84MjU0N19tb3ZlX3RhaWwoYWRhcHRlcik7CiAJZWxzZSB7CiAJCUUx MDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFREVCwgaSk7CiAJCWlmIChhZGFwdGVyLT5ody5t YWNfdHlwZSA9PSBlbV84MjU0NykKQEAgLTE2NjIsOCArMTgwMCw5IEBACiAgKgogICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCiBzdGF0aWMgdm9pZAotZW1fODI1NDdfbW92ZV90YWlsX2xvY2tlZChzdHJ1Y3QgYWRh cHRlciAqYWRhcHRlcikKK2VtXzgyNTQ3X21vdmVfdGFpbCh2b2lkICphcmcpCiB7CisJc3RydWN0 IGFkYXB0ZXIgKmFkYXB0ZXIgPSBhcmc7CiAJdWludDE2X3QgaHdfdGR0OwogCXVpbnQxNl90IHN3 X3RkdDsKIAlzdHJ1Y3QgZW1fdHhfZGVzYyAqdHhfZGVzYzsKQEAgLTE2OTYsMTYgKzE4MzUsNiBA QAogCX0JCiB9CiAKLXN0YXRpYyB2b2lkCi1lbV84MjU0N19tb3ZlX3RhaWwodm9pZCAqYXJnKQot ewotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gYXJnOwotCi0JRU1fTE9DSyhhZGFwdGVyKTsK LQllbV84MjU0N19tb3ZlX3RhaWxfbG9ja2VkKGFkYXB0ZXIpOwotCUVNX1VOTE9DSyhhZGFwdGVy KTsKLX0KLQogc3RhdGljIGludAogZW1fODI1NDdfZmlmb193b3JrYXJvdW5kKHN0cnVjdCBhZGFw dGVyICphZGFwdGVyLCBpbnQgbGVuKQogewkKQEAgLTE4OTMsNyArMjAyMiw3IEBACiAJc3RydWN0 IGFkYXB0ZXIJKmFkYXB0ZXIgPSBhcmc7CiAJc3RydWN0IGlmbmV0CSppZnAgPSBhZGFwdGVyLT5p ZnA7CiAKLQlFTV9MT0NLKGFkYXB0ZXIpOworCUVNX0xPQ0tfQVNTRVJUKGFkYXB0ZXIpOwogCiAJ ZW1fY2hlY2tfZm9yX2xpbmsoJmFkYXB0ZXItPmh3KTsKIAllbV91cGRhdGVfbGlua19zdGF0dXMo YWRhcHRlcik7CkBAIC0xOTAxLDEwICsyMDMwLDE0IEBACiAJaWYgKGVtX2Rpc3BsYXlfZGVidWdf c3RhdHMgJiYgaWZwLT5pZl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcpCiAJCWVtX3ByaW50 X2h3X3N0YXRzKGFkYXB0ZXIpOwogCWVtX3NtYXJ0c3BlZWQoYWRhcHRlcik7CisJLyoKKwkgKiBF YWNoIHNlY29uZCB3ZSBjaGVjayB0aGUgd2F0Y2hkb2cgdG8gCisJICogcHJvdGVjdCBhZ2FpbnN0 IGhhcmR3YXJlIGhhbmdzLgorCSAqLworCWVtX3dhdGNoZG9nKGFkYXB0ZXIpOwogCiAJY2FsbG91 dF9yZXNldCgmYWRhcHRlci0+dGltZXIsIGh6LCBlbV9sb2NhbF90aW1lciwgYWRhcHRlcik7CiAK LQlFTV9VTkxPQ0soYWRhcHRlcik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yMDg2LDMwICsyMjE5 LDkwIEBACiAJCSAgICAiaW50ZXJydXB0XG4iKTsKIAkJcmV0dXJuIChFTlhJTyk7CiAJfQotCWlm IChidXNfc2V0dXBfaW50cihkZXYsIGFkYXB0ZXItPnJlc19pbnRlcnJ1cHQsCi0JICAgIElOVFJf VFlQRV9ORVQgfCBJTlRSX01QU0FGRSwKLQkgICAgKHZvaWQgKCopKHZvaWQgKikpIGVtX2ludHIs IGFkYXB0ZXIsCi0JICAgICZhZGFwdGVyLT5pbnRfaGFuZGxlcl90YWcpKSB7Ci0JCWRldmljZV9w cmludGYoZGV2LCAiRXJyb3IgcmVnaXN0ZXJpbmcgaW50ZXJydXB0IGhhbmRsZXIhXG4iKTsKLQkJ cmV0dXJuKEVOWElPKTsKLQl9CiAKIAlhZGFwdGVyLT5ody5iYWNrID0gJmFkYXB0ZXItPm9zZGVw OwogCiAJcmV0dXJuICgwKTsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBTZXR1cCB0aGUg YXBwcm9wcmlhdGUgSW50ZXJydXB0IGhhbmRsZXJzLgorICoKKyAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50 CitlbV9hbGxvY2F0ZV9pbnRyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCWRldmljZV90 IGRldiA9IGFkYXB0ZXItPmRldjsKKwlpbnQgZXJyb3I7CisKKwkvKiBNYW51YWxseSB0dXJuIG9m ZiBhbGwgaW50ZXJydXB0cyAqLworCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElNQywg MHhmZmZmZmZmZik7CisKKyNpZm5kZWYgRU1fRkFTVF9JTlRSCisJLyogV2UgZG8gTGVnYWN5IHNl dHVwICovCisJaWYgKGFkYXB0ZXItPmludF9oYW5kbGVyX3RhZyA9PSBOVUxMICYmCisJICAgIChl cnJvciA9IGJ1c19zZXR1cF9pbnRyKGRldiwgYWRhcHRlci0+cmVzX2ludGVycnVwdCwKKwkgICAg SU5UUl9UWVBFX05FVCB8IElOVFJfTVBTQUZFLCBlbV9pbnRyLCBhZGFwdGVyLAorCSAgICAmYWRh cHRlci0+aW50X2hhbmRsZXJfdGFnKSkgIT0gMCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIkZh aWxlZCB0byByZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlciIpOworCQlyZXR1cm4gKGVycm9yKTsK Kwl9CisKKyNlbHNlIC8qIEVNX0ZBU1RfSU5UUiAqLworCS8qCisJICogVHJ5IGFsbG9jYXRpbmcg YSBmYXN0IGludGVycnVwdCBhbmQgdGhlIGFzc29jaWF0ZWQgZGVmZXJyZWQKKwkgKiBwcm9jZXNz aW5nIGNvbnRleHRzLgorCSAqLworCVRBU0tfSU5JVCgmYWRhcHRlci0+cnh0eF90YXNrLCAwLCBl bV9oYW5kbGVfcnh0eCwgYWRhcHRlcik7CisJVEFTS19JTklUKCZhZGFwdGVyLT5saW5rX3Rhc2ss IDAsIGVtX2hhbmRsZV9saW5rLCBhZGFwdGVyKTsKKwlhZGFwdGVyLT50cSA9IHRhc2txdWV1ZV9j cmVhdGVfZmFzdCgiZW1fdGFza3EiLCBNX05PV0FJVCwKKwkgICAgdGFza3F1ZXVlX3RocmVhZF9l bnF1ZXVlLCAmYWRhcHRlci0+dHEpOworCXRhc2txdWV1ZV9zdGFydF90aHJlYWRzKCZhZGFwdGVy LT50cSwgMSwgUElfTkVULCAiJXMgdGFza3EiLAorCSAgICBkZXZpY2VfZ2V0X25hbWV1bml0KGFk YXB0ZXItPmRldikpOworCWlmICgoZXJyb3IgPSBidXNfc2V0dXBfaW50cihkZXYsIGFkYXB0ZXIt PnJlc19pbnRlcnJ1cHQsCisJICAgIElOVFJfVFlQRV9ORVQgfCBJTlRSX0ZBU1QsIGVtX2ludHJf ZmFzdCwgYWRhcHRlciwKKwkgICAgJmFkYXB0ZXItPmludF9oYW5kbGVyX3RhZykpICE9IDApIHsK KwkJZGV2aWNlX3ByaW50ZihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgZmFzdCBpbnRlcnJ1cHQg IgorCQkJICAgICJoYW5kbGVyOiAlZFxuIiwgZXJyb3IpOworCQl0YXNrcXVldWVfZnJlZShhZGFw dGVyLT50cSk7CisJCWFkYXB0ZXItPnRxID0gTlVMTDsKKwkJcmV0dXJuIChlcnJvcik7CisJfQor I2VuZGlmIC8qIEVNX0ZBU1RfSU5UUiAqLworCisJZW1fZW5hYmxlX2ludHIoYWRhcHRlcik7CisJ cmV0dXJuICgwKTsKK30KKwogc3RhdGljIHZvaWQKLWVtX2ZyZWVfcGNpX3Jlc291cmNlcyhzdHJ1 Y3QgYWRhcHRlciAqYWRhcHRlcikKK2VtX2ZyZWVfaW50cihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRl cikKIHsKIAlkZXZpY2VfdCBkZXYgPSBhZGFwdGVyLT5kZXY7CiAKIAlpZiAoYWRhcHRlci0+cmVz X2ludGVycnVwdCAhPSBOVUxMKSB7CiAJCWJ1c190ZWFyZG93bl9pbnRyKGRldiwgYWRhcHRlci0+ cmVzX2ludGVycnVwdCwKIAkJCWFkYXB0ZXItPmludF9oYW5kbGVyX3RhZyk7CisJCWFkYXB0ZXIt PmludF9oYW5kbGVyX3RhZyA9IE5VTEw7CisJfQorI2lmZGVmIEVNX0ZBU1RfSU5UUgorCWlmIChh ZGFwdGVyLT50cSAhPSBOVUxMKSB7CisJCXRhc2txdWV1ZV9kcmFpbihhZGFwdGVyLT50cSwgJmFk YXB0ZXItPnJ4dHhfdGFzayk7CisJCXRhc2txdWV1ZV9kcmFpbih0YXNrcXVldWVfZmFzdCwgJmFk YXB0ZXItPmxpbmtfdGFzayk7CisJCXRhc2txdWV1ZV9mcmVlKGFkYXB0ZXItPnRxKTsKKwkJYWRh cHRlci0+dHEgPSBOVUxMOworCX0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZAorZW1fZnJlZV9w Y2lfcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCWRldmljZV90IGRldiA9 IGFkYXB0ZXItPmRldjsKKworCWlmIChhZGFwdGVyLT5yZXNfaW50ZXJydXB0ICE9IE5VTEwpCiAJ CWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19JUlEsCiAJCSAgICAwLCBhZGFwdGVy LT5yZXNfaW50ZXJydXB0KTsKLQl9CiAKIAlpZiAoYWRhcHRlci0+cmVzX21lbW9yeSAhPSBOVUxM KQogCQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfTUVNT1JZLApAQCAtMjIyOSw3 ICsyNDIyLDggQEAKIAlpZnAtPmlmX2ZsYWdzID0gSUZGX0JST0FEQ0FTVCB8IElGRl9TSU1QTEVY IHwgSUZGX01VTFRJQ0FTVDsKIAlpZnAtPmlmX2lvY3RsID0gZW1faW9jdGw7CiAJaWZwLT5pZl9z dGFydCA9IGVtX3N0YXJ0OwotCWlmcC0+aWZfd2F0Y2hkb2cgPSBlbV93YXRjaGRvZzsKKwlpZnAt PmlmX3RpbWVyID0gMDsJLyogRGlzYWJsZSBuZXQgbGF5ZXIgd2F0Y2hkb2cgKi8KKwlpZnAtPmlm X3dhdGNoZG9nID0gTlVMTDsKIAlJRlFfU0VUX01BWExFTigmaWZwLT5pZl9zbmQsIGFkYXB0ZXIt Pm51bV90eF9kZXNjIC0gMSk7CiAJaWZwLT5pZl9zbmQuaWZxX2Rydl9tYXhsZW4gPSBhZGFwdGVy LT5udW1fdHhfZGVzYyAtIDE7CiAJSUZRX1NFVF9SRUFEWSgmaWZwLT5pZl9zbmQpOwpAQCAtMjQ1 MywyNiArMjY0NywxOSBAQAogewogCWRldmljZV90IGRldiA9IGFkYXB0ZXItPmRldjsKIAlzdHJ1 Y3QgZW1fYnVmZmVyICp0eF9idWZmZXI7Ci0JYnVzX3NpemVfdCBzaXplLCBzZWdzaXplOwogCWlu dCBlcnJvciwgaTsKIAotI2lmZGVmIEVNX1RTTwotCXNpemUgPSBFTV9UU09fU0laRTsKLQlzZWdz aXplID0gUEFHRV9TSVpFOwotI2Vsc2UKLQlzZWdzaXplID0gc2l6ZSA9IHJvdW5kdXAyKGFkYXB0 ZXItPmh3Lm1heF9mcmFtZV9zaXplLCBNQ0xCWVRFUyk7Ci0jZW5kaWYKIAkvKgotCSAqIFNldHVw IERNQSBkZXNjcmlwdG9yIGFyZWFzLgorCSAqIENyZWF0ZSBETUEgdGFncyBmb3IgdHggZGVzY3Jp cHRvcnMKIAkgKi8KIAlpZiAoKGVycm9yID0gYnVzX2RtYV90YWdfY3JlYXRlKE5VTEwsCQkvKiBw YXJlbnQgKi8KIAkJCQkxLCAwLAkJCS8qIGFsaWdubWVudCwgYm91bmRzICovCiAJCQkJQlVTX1NQ QUNFX01BWEFERFIsCS8qIGxvd2FkZHIgKi8KIAkJCQlCVVNfU1BBQ0VfTUFYQUREUiwJLyogaGln aGFkZHIgKi8KIAkJCQlOVUxMLCBOVUxMLAkJLyogZmlsdGVyLCBmaWx0ZXJhcmcgKi8KLQkJCQlz aXplLAkJCS8qIG1heHNpemUgKi8KKwkJCQlFTV9UU09fU0laRSwJCS8qIG1heHNpemUgKi8KIAkJ CQlFTV9NQVhfU0NBVFRFUiwJCS8qIG5zZWdtZW50cyAqLwotCQkJCXNlZ3NpemUsCQkvKiBtYXhz ZWdzaXplICovCisJCQkJUEFHRV9TSVpFLAkJLyogbWF4c2Vnc2l6ZSAqLwogCQkJCTAsCQkJLyog ZmxhZ3MgKi8KIAkJCQlOVUxMLAkJLyogbG9ja2Z1bmMgKi8KIAkJCQlOVUxMLAkJLyogbG9ja2Fy ZyAqLwpAQCAtMjQ4OSw2ICsyNjc2LDcgQEAKIAkJZ290byBmYWlsOwogCX0KIAorCS8qIENyZWF0 ZSB0aGUgZGVzY3JpcHRvciBidWZmZXIgZG1hIG1hcHMgKi8KIAl0eF9idWZmZXIgPSBhZGFwdGVy LT50eF9idWZmZXJfYXJlYTsKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X2Rlc2M7 IGkrKykgewogCQllcnJvciA9IGJ1c19kbWFtYXBfY3JlYXRlKGFkYXB0ZXItPnR4dGFnLCAwLCAm dHhfYnVmZmVyLT5tYXApOwpAQCAtMjUxNyw2ICsyNzA1LDcgQEAKIAlzdHJ1Y3QgZW1fYnVmZmVy ICp0eF9idWZmZXI7CiAJaW50IGk7CiAKKwkvKiBDbGVhciB0aGUgb2xkIHJpbmcgY29udGVudHMg Ki8KIAliemVybyhhZGFwdGVyLT50eF9kZXNjX2Jhc2UsCiAJICAgIChzaXplb2Yoc3RydWN0IGVt X3R4X2Rlc2MpKSAqIGFkYXB0ZXItPm51bV90eF9kZXNjKTsKIApAQCAtMjg1Nyw4ICszMDQ2LDEw IEBACiAgICAgICAgIGVvcF9kZXNjID0gJmFkYXB0ZXItPnR4X2Rlc2NfYmFzZVtsYXN0XTsKIAog CS8qCi0JICogTm93IGNhY3VsYXRlIHRoZSB0ZXJtaW5hdGluZyBpbmRleAotCSAqIGZvciB0aGUg Y2xlYW51cCBsb29wIGJlbG93CisJICogV2hhdCB0aGlzIGRvZXMgaXMgZ2V0IHRoZSBpbmRleCBv ZiB0aGUKKwkgKiBmaXJzdCBkZXNjcmlwdG9yIEFGVEVSIHRoZSBFT1Agb2YgdGhlIAorCSAqIGZp cnN0IHBhY2tldCwgdGhhdCB3YXkgd2UgY2FuIGRvIHRoZQorCSAqIHNpbXBsZSBjb21wYXJpc29u IG9uIHRoZSBpbm5lciB3aGlsZSBsb29wLgogCSAqLwogCWlmICgrK2xhc3QgPT0gYWRhcHRlci0+ bnVtX3R4X2Rlc2MpIGxhc3QgPSAwOwogCWRvbmUgPSBsYXN0OwpAQCAtMjkxNSwxMCArMzEwNiwx MiBAQAogICAgICAgICAgKi8KICAgICAgICAgaWYgKG51bV9hdmFpbCA+IEVNX1RYX0NMRUFOVVBf VEhSRVNIT0xEKSB7ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmcC0+aWZfZHJ2 X2ZsYWdzICY9IH5JRkZfRFJWX09BQ1RJVkU7CisJCS8qIEFsbCBjbGVhbiwgdHVybiBvZmYgdGhl IHRpbWVyICovCiAgICAgICAgICAgICAgICAgaWYgKG51bV9hdmFpbCA9PSBhZGFwdGVyLT5udW1f dHhfZGVzYykKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmcC0+aWZfdGltZXIgPSAwOworCQkJ YWRhcHRlci0+d2F0Y2hkb2dfdGltZXIgPSAwOworCQkvKiBTb21lIGNsZWFuZWQsIHJlc2V0IHRo ZSB0aW1lciAqLwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKG51bV9hdmFpbCAhPSBhZGFwdGVy LT5udW1fdHhfZGVzY19hdmFpbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmcC0+aWZfdGlt ZXIgPSBFTV9UWF9USU1FT1VUOworCQkJYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIgPSBFTV9UWF9U SU1FT1VUOwogICAgICAgICB9CiAgICAgICAgIGFkYXB0ZXItPm51bV90eF9kZXNjX2F2YWlsID0g bnVtX2F2YWlsOwogICAgICAgICByZXR1cm47CkBAIC0zMzY5LDkgKzM1NjIsMTQgQEAKIAkJCWkg PSAwOwogCQlpZiAobSAhPSBOVUxMKSB7CiAJCQlhZGFwdGVyLT5uZXh0X3J4X2Rlc2NfdG9fY2hl Y2sgPSBpOworI2lmbmRlZiBFTV9GQVNUX0lOVFIKIAkJCUVNX1VOTE9DSyhhZGFwdGVyKTsKIAkJ CSgqaWZwLT5pZl9pbnB1dCkoaWZwLCBtKTsKIAkJCUVNX0xPQ0soYWRhcHRlcik7CisjZWxzZQor CQkJLyogQWxyZWFkeSBydW5uaW5nIHVubG9ja2VkICovCisJCQkoKmlmcC0+aWZfaW5wdXQpKGlm cCwgbSk7CisjZW5kaWYKIAkJCWkgPSBhZGFwdGVyLT5uZXh0X3J4X2Rlc2NfdG9fY2hlY2s7CiAJ CX0KIAkJY3VycmVudF9kZXNjID0gJmFkYXB0ZXItPnJ4X2Rlc2NfYmFzZVtpXTsKQEAgLTM3OTYs NiArMzk5NCw4IEBACiAJICAgIGFkYXB0ZXItPm1idWZfY2x1c3Rlcl9mYWlsZWQpOwogCWRldmlj ZV9wcmludGYoZGV2LCAiRHJpdmVyIGRyb3BwZWQgcGFja2V0cyA9ICVsZFxuIiwKIAkgICAgYWRh cHRlci0+ZHJvcHBlZF9wa3RzKTsKKwlkZXZpY2VfcHJpbnRmKGRldiwgIkRyaXZlciB0eCBkbWEg ZmFpbHVyZSBpbiBlbmNhcCA9ICVsZFxuIiwKKwkJYWRhcHRlci0+bm9fdHhfZG1hX3NldHVwKTsK IH0KIAogc3RhdGljIHZvaWQKQEAgLTM5NTIsNCArNDE1MiwxNCBAQAogCSAgICBTWVNDVExfQ0hJ TERSRU4oZGV2aWNlX2dldF9zeXNjdGxfdHJlZShhZGFwdGVyLT5kZXYpKSwKIAkgICAgT0lEX0FV VE8sIG5hbWUsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCiAJICAgIGluZm8sIDAsIGVtX3N5c2N0 bF9pbnRfZGVsYXksICJJIiwgZGVzY3JpcHRpb24pOworfQorCitzdGF0aWMgdm9pZAorZW1fYWRk X3J4X3Byb2Nlc3NfbGltaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IGNoYXIgKm5h bWUsCisJY29uc3QgY2hhciAqZGVzY3JpcHRpb24sIGludCAqbGltaXQsIGludCB2YWx1ZSkKK3sK KwkqbGltaXQgPSB2YWx1ZTsKKwlTWVNDVExfQUREX0lOVChkZXZpY2VfZ2V0X3N5c2N0bF9jdHgo YWRhcHRlci0+ZGV2KSwKKwkgICAgU1lTQ1RMX0NISUxEUkVOKGRldmljZV9nZXRfc3lzY3RsX3Ry ZWUoYWRhcHRlci0+ZGV2KSksCisJICAgIE9JRF9BVVRPLCBuYW1lLCBDVExUWVBFX0lOVHxDVExG TEFHX1JXLCBsaW1pdCwgdmFsdWUsIGRlc2NyaXB0aW9uKTsKIH0KZGlmZiAtTmF1ciBzdGFibGUv ZGV2L2VtL2lmX2VtLmggbmV3cGF0Y2gvZGV2L2VtL2lmX2VtLmgKLS0tIHN0YWJsZS9kZXYvZW0v aWZfZW0uaAlXZWQgTm92ICA4IDIzOjQyOjMwIDIwMDYKKysrIG5ld3BhdGNoL2Rldi9lbS9pZl9l bS5oCVRodSBOb3YgIDkgMDA6MDc6MTUgMjAwNgpAQCAtMTUwLDEwICsxNTAsMTEgQEAKICNkZWZp bmUgRU1fVFhfVElNRU9VVCAgICAgICAgICAgICAgICAgICA1ICAgIC8qIHNldCB0byA1IHNlY29u ZHMgKi8KIAogLyoKLSAqIFRoaXMgcGFyYW1ldGVyIGNvbnRyb2xzIHdoZW4gdGhlIGRyaXZlciBj YWxscyB0aGUgcm91dGluZSB0byByZWNsYWltCisgKiBUaGVzZSBwYXJhbWV0ZXJzIGNvbnRyb2xz IHdoZW4gdGhlIGRyaXZlciBjYWxscyB0aGUgcm91dGluZSB0byByZWNsYWltCiAgKiB0cmFuc21p dCBkZXNjcmlwdG9ycy4KICAqLwogI2RlZmluZSBFTV9UWF9DTEVBTlVQX1RIUkVTSE9MRAkJKGFk YXB0ZXItPm51bV90eF9kZXNjIC8gOCkKKyNkZWZpbmUgRU1fVFhfT1BfVEhSRVNIT0xECQkoYWRh cHRlci0+bnVtX3R4X2Rlc2MgLyAzMikKIAogLyoKICAqIFRoaXMgcGFyYW1ldGVyIGNvbnRyb2xz IHdoZXRoZXIgb3Igbm90IGF1dG9uZWdvdGF0aW9uIGlzIGVuYWJsZWQuCkBAIC0yMjAsNyArMjIx LDcgQEAKICNkZWZpbmUgRU1fQkFSX01FTV9UWVBFXzMyQklUCQkweDAwMDAwMDAwCiAjZGVmaW5l IEVNX0JBUl9NRU1fVFlQRV82NEJJVAkJMHgwMDAwMDAwNAogLyoKLSAqIEJhY2t3YXJkIGNvbXBh dGliaWxpdHkgaGFjaworICogQmFja3dhcmQgY29tcGF0aWJpbGl0eSB3b3JrYXJvdW5kCiAgKi8K ICNpZiAhZGVmaW5lZChQQ0lSX0NJUykKICNkZWZpbmUgUENJUl9DSVMJUENJUl9DQVJEQlVTQ0lT CkBAIC0yOTIsNyArMjkzLDcgQEAKIAlPRkZMT0FEX1VEUF9JUAogfSBYU1VNX0NPTlRFWFRfVDsK IAotc3RydWN0IGFkYXB0ZXIgYWRhcHRlcjsJCS8qIFhYWDogdWdseSBmb3J3YXJkIGRlY2xhcmF0 aW9uICovCitzdHJ1Y3QgYWRhcHRlcjsKIHN0cnVjdCBlbV9pbnRfZGVsYXlfaW5mbyB7CiAJc3Ry dWN0IGFkYXB0ZXIgKmFkYXB0ZXI7CS8qIEJhY2stcG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1 Y3QgKi8KIAlpbnQgb2Zmc2V0OwkJCS8qIFJlZ2lzdGVyIG9mZnNldCB0byByZWFkL3dyaXRlICov CkBAIC0zMjgsMTAgKzMyOSwxNyBAQAogCXN0cnVjdCBpZm1lZGlhCW1lZGlhOwogCXN0cnVjdCBj YWxsb3V0CXRpbWVyOwogCXN0cnVjdCBjYWxsb3V0CXR4X2ZpZm9fdGltZXI7CisJaW50CQl3YXRj aGRvZ190aW1lcjsKIAlpbnQJCWlvX3JpZDsKIAlpbnQJCWlmX2ZsYWdzOwogCXN0cnVjdCBtdHgJ bXR4OwogCWludAkJZW1faW5zZXJ0X3ZsYW5faGVhZGVyOworCisjaWZkZWYgRU1fRkFTVF9JTlRS CisJc3RydWN0IHRhc2sJbGlua190YXNrOworCXN0cnVjdCB0YXNrCXJ4dHhfdGFzazsKKwlzdHJ1 Y3QgdGFza3F1ZXVlICp0cTsKKyNlbmRpZgogCS8qIEluZm8gYWJvdXQgdGhlIGJvYXJkIGl0c2Vs ZiAqLwogCXVpbnQzMl90CXBhcnRfbnVtOwogCXVpbnQ4X3QJCWxpbmtfYWN0aXZlOwo= ------=_Part_35052_20023030.1163035142787--