From owner-freebsd-net@FreeBSD.ORG Fri Feb 7 01:58:45 2014 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id DABC9E8A; Fri, 7 Feb 2014 01:58:44 +0000 (UTC) Received: from esa-jnhn.mail.uoguelph.ca (esa-jnhn.mail.uoguelph.ca [131.104.91.44]) by mx1.freebsd.org (Postfix) with ESMTP id C14141D37; Fri, 7 Feb 2014 01:58:43 +0000 (UTC) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: X-IronPort-AV: E=Sophos;i="4.95,797,1384318800"; d="scan'208";a="94432143" Received: from muskoka.cs.uoguelph.ca (HELO zcs3.mail.uoguelph.ca) ([131.104.91.222]) by esa-jnhn.mail.uoguelph.ca with ESMTP; 06 Feb 2014 20:58:35 -0500 Received: from zcs3.mail.uoguelph.ca (localhost.localdomain [127.0.0.1]) by zcs3.mail.uoguelph.ca (Postfix) with ESMTP id 099F0B403D; Thu, 6 Feb 2014 20:58:35 -0500 (EST) Date: Thu, 6 Feb 2014 20:58:35 -0500 (EST) From: Rick Macklem To: Garrett Wollman Message-ID: <1261040377.1982994.1391738315028.JavaMail.root@uoguelph.ca> In-Reply-To: Subject: Re: Terrible NFS performance under 9.2-RELEASE? MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_1982991_1248016500.1391738315025" X-Originating-IP: [172.17.91.209] X-Mailer: Zimbra 7.2.1_GA_2790 (ZimbraWebClient - FF3.0 (Win)/7.2.1_GA_2790) Cc: freebsd-net@freebsd.org, Alexander Motin X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 07 Feb 2014 01:58:45 -0000 ------=_Part_1982991_1248016500.1391738315025 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Garrett Wollman wrote: > The real big improvement, which I have not tried to implement, would > be to use physical pages (via sfbufs) by sharing the inner loop of > sendfile(2). Since I use ZFS as my backing filesystem, I'm not sure > this would have any benefit for me, but it should be a measurable > improvement for UFS-backed NFS servers. (I didn't have this email handy, so I just cut/pasted this paragraph.) Well, I'm far from sure this is a good idea at this point, but I've attached a patch that seems to work for a short test of an export of a UFS volume. (If there is no v_object for ZFS vnodes, it will print out a message with the error# for EINVAL.) It would need some serious review and testing before it would be anywhere near ready for head. (For example, since I hold a LK_SHARED locked vnode which was not VI_DOOMED when it was locked, I don't know if I need to acquire a reference count on the vm object or if I need to check for OBJ_DEAD?) The patch checks for OBJ_DEAD, but does not acquire a reference count. (The reference count part is #ifdef notnow.) Like most of these things, I don't see a measurable difference on my old single core i386 hardware with 100Mbps networking, but that only indicates it might not be a serious regression. The patch doesn't have yours applied to it, but it should be easy to integrate the two, since it just adds a call to nfsrv_file_mbuf() at the beginning of nfsvno_read(). Good luck with the testing, rick ps: It would be nice to know if it works for ZFS? pss: If the patch doesn't make it through on the list and you want a copy, just email me. ------=_Part_1982991_1248016500.1391738315025 Content-Type: text/x-patch; name=sendfile-nfs.patch Content-Disposition: attachment; filename=sendfile-nfs.patch Content-Transfer-Encoding: base64 LS0tIGtlcm4vdWlwY19zeXNjYWxscy5jLnNhdjMJMjAxNC0wMi0wNCAxOToyMjo1Mi4wMDAwMDAw MDAgLTA1MDAKKysrIGtlcm4vdWlwY19zeXNjYWxscy5jCTIwMTQtMDItMDYgMTg6MjM6NDcuMDAw MDAwMDAwIC0wNTAwCkBAIC0xOTUwLDYgKzE5NTAsMTc2IEBAIGZyZWVic2Q0X3NlbmRmaWxlKHN0 cnVjdCB0aHJlYWQgKnRkLCBzdHIKIH0KICNlbmRpZiAvKiBDT01QQVRfRlJFRUJTRDQgKi8KIAor LyoKKyAqIFRoZSBpbm5lciBsb29wIG9mIGtlcm5fc2VuZGZpbGUoKSBleHRyYWN0ZWQgb3V0IHNv IHRoYXQgaXQgY2FuIGJlCisgKiB1c2VkIGJ5IHRoZSBORlMgc2VydmVyIGFzIHdlbGwuCisgKi8K K2ludAora2Vybl9zZW5kZmlsZV9tYnVmKHN0cnVjdCB2bm9kZSAqdnAsIHN0cnVjdCB2bV9vYmpl Y3QgKm9iaiwgc3RydWN0IG1idWYgKiptcCwKKyAgICBzdHJ1Y3QgbWJ1ZiAqKm10YWlscCwgb2Zm X3Qgb2ZmLCBvZmZfdCAqcmVtcCwgaW50IGJzaXplLCBpbnQgKmRvbmVwLAorICAgIGludCBzcGFj ZSwgaW50IG1udywgaW50IHdhaXRfZm9yYWxsLCBpbnQgZmxhZ3MsIGludCBpb2ZsYWdzLCB2b2lk ICpzZnNwLAorICAgIHN0cnVjdCB1Y3JlZCAqYWNyZWQsIHN0cnVjdCB0aHJlYWQgKnRkKQorewor CW9mZl90IHhmc2l6ZSwgc3RhcnRyZW07CisJdm1fcGluZGV4X3QgcGluZGV4OworCXZtX29mZnNl dF90IHBnb2ZmOworCXN0cnVjdCB2bV9wYWdlICpwZzsKKwlzdHJ1Y3QgbWJ1ZiAqbTAsICptLCAq bXRhaWw7CisJc3RydWN0IHNmX2J1ZiAqc2Y7CisJaW50IGVycm9yID0gMCwgbG9vcGJ5dGVzOwor CXNzaXplX3QgcmVzaWQ7CisJaW50IHJlYWRhaGVhZCA9IHNmcmVhZGFoZWFkICogTUFYQlNJWkU7 CisJc3RydWN0IHNlbmRmaWxlX3N5bmMgKnNmcyA9IChzdHJ1Y3Qgc2VuZGZpbGVfc3luYyAqKXNm c3A7CisKKwltID0gKm1wOworCW10YWlsID0gKm10YWlscDsKKwlzdGFydHJlbSA9ICpyZW1wOwor CWxvb3BieXRlcyA9IDA7CisJLyoKKwkgKiBMb29wIGFuZCBjb25zdHJ1Y3QgbWF4aW11bSBzaXpl ZCBtYnVmIGNoYWluIHRvIGJlIGJ1bGsKKwkgKiBkdW1wZWQgaW50byBzb2NrZXQgYnVmZmVyLgor CSAqLworCXdoaWxlIChzcGFjZSA+IGxvb3BieXRlcykgeworCQkvKgorCQkgKiBDYWxjdWxhdGUg dGhlIGFtb3VudCB0byB0cmFuc2Zlci4KKwkJICogTm90IHRvIGV4Y2VlZCBhIHBhZ2UsIHRoZSBF T0YsCisJCSAqIG9yIHRoZSBwYXNzZWQgaW4gbmJ5dGVzLgorCQkgKi8KKwkJcGdvZmYgPSAodm1f b2Zmc2V0X3QpKG9mZiAmIFBBR0VfTUFTSyk7CisJCSpyZW1wID0gc3RhcnRyZW0gLSBsb29wYnl0 ZXM7CisJCXhmc2l6ZSA9IG9taW4oUEFHRV9TSVpFIC0gcGdvZmYsICpyZW1wKTsKKwkJeGZzaXpl ID0gb21pbihzcGFjZSAtIGxvb3BieXRlcywgeGZzaXplKTsKKwkJaWYgKHhmc2l6ZSA8PSAwKSB7 CisJCQkqZG9uZXAgPSAxOwkJLyogYWxsIGRhdGEgc2VudCAqLworCQkJYnJlYWs7CisJCX0KKwor CQkvKgorCQkgKiBBdHRlbXB0IHRvIGxvb2sgdXAgdGhlIHBhZ2UuICBBbGxvY2F0ZQorCQkgKiBp ZiBub3QgZm91bmQgb3Igd2FpdCBhbmQgbG9vcCBpZiBidXN5LgorCQkgKi8KKwkJcGluZGV4ID0g T0ZGX1RPX0lEWChvZmYpOworCQlWTV9PQkpFQ1RfV0xPQ0sob2JqKTsKKwkJcGcgPSB2bV9wYWdl X2dyYWIob2JqLCBwaW5kZXgsIFZNX0FMTE9DX05PQlVTWSB8CisJCSAgICBWTV9BTExPQ19OT1JN QUwgfCBWTV9BTExPQ19XSVJFRCB8IFZNX0FMTE9DX1JFVFJZKTsKKworCQkvKgorCQkgKiBDaGVj ayBpZiBwYWdlIGlzIHZhbGlkIGZvciB3aGF0IHdlIG5lZWQsCisJCSAqIG90aGVyd2lzZSBpbml0 aWF0ZSBJL08uCisJCSAqIElmIHdlIGFscmVhZHkgdHVybmVkIHNvbWUgcGFnZXMgaW50byBtYnVm cywKKwkJICogc2VuZCB0aGVtIG9mZiBiZWZvcmUgd2UgY29tZSBoZXJlIGFnYWluIGFuZAorCQkg KiBibG9jay4KKwkJICovCisJCWlmIChwZy0+dmFsaWQgJiYgdm1fcGFnZV9pc192YWxpZChwZywg cGdvZmYsIHhmc2l6ZSkpCisJCQlWTV9PQkpFQ1RfV1VOTE9DSyhvYmopOworCQllbHNlIGlmICht ICE9IE5VTEwgJiYgd2FpdF9mb3JhbGwgPT0gMCkKKwkJCWVycm9yID0gRUFHQUlOOwkvKiBzZW5k IHdoYXQgd2UgYWxyZWFkeSBnb3QgKi8KKwkJZWxzZSBpZiAoZmxhZ3MgJiBTRl9OT0RJU0tJTykK KwkJCWVycm9yID0gRUJVU1k7CisJCWVsc2UgeworCQkJVk1fT0JKRUNUX1dVTkxPQ0sob2JqKTsK KworCQkJLyoKKwkJCSAqIEdldCB0aGUgcGFnZSBmcm9tIGJhY2tpbmcgc3RvcmUuCisJCQkgKiBY WFhNQUM6IEJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBmcC0+Zl9jcmVkCisJCQkgKiBoZXJlLCB3ZSBw YXNzIGluIE5PQ1JFRC4gIFRoaXMgaXMgcHJvYmFibHkKKwkJCSAqIHdyb25nLCBidXQgaXMgY29u c2lzdGVudCB3aXRoIG91ciBvcmlnaW5hbAorCQkJICogaW1wbGVtZW50YXRpb24uCisJCQkgKi8K KwkJCWVycm9yID0gdm5fcmR3cihVSU9fUkVBRCwgdnAsIE5VTEwsIHJlYWRhaGVhZCwKKwkJCSAg ICB0cnVuY19wYWdlKG9mZiksIFVJT19OT0NPUFksIGlvZmxhZ3MgfAorCQkJICAgICgocmVhZGFo ZWFkIC8gYnNpemUpIDw8IElPX1NFUVNISUZUKSwKKwkJCSAgICB0ZC0+dGRfdWNyZWQsIGFjcmVk LCAmcmVzaWQsIHRkKTsKKwkJCVNGU1RBVF9JTkMoc2ZfaW9jbnQpOworCQkJaWYgKGVycm9yKQor CQkJCVZNX09CSkVDVF9XTE9DSyhvYmopOworCQl9CisJCWlmIChlcnJvcikgeworCQkJdm1fcGFn ZV9sb2NrKHBnKTsKKwkJCXZtX3BhZ2VfdW53aXJlKHBnLCAwKTsKKwkJCS8qCisJCQkgKiBTZWUg aWYgYW55b25lIGVsc2UgbWlnaHQga25vdyBhYm91dAorCQkJICogdGhpcyBwYWdlLiAgSWYgbm90 IGFuZCBpdCBpcyBub3QgdmFsaWQsCisJCQkgKiB0aGVuIGZyZWUgaXQuCisJCQkgKi8KKwkJCWlm IChwZy0+d2lyZV9jb3VudCA9PSAwICYmIHBnLT52YWxpZCA9PSAwICYmCisJCQkgICAgIXZtX3Bh Z2VfYnVzaWVkKHBnKSkKKwkJCQl2bV9wYWdlX2ZyZWUocGcpOworCQkJdm1fcGFnZV91bmxvY2so cGcpOworCQkJVk1fT0JKRUNUX1dVTkxPQ0sob2JqKTsKKwkJCWlmIChlcnJvciA9PSBFQUdBSU4g JiYgd2FpdF9mb3JhbGwgPT0gMCkKKwkJCQllcnJvciA9IDA7CS8qIG5vdCBhIHJlYWwgZXJyb3Ig Ki8KKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogR2V0IGEgc2VuZGZpbGUgYnVmLiAgV2hl biBhbGxvY2F0aW5nIHRoZQorCQkgKiBmaXJzdCBidWZmZXIgZm9yIG1idWYgY2hhaW4sIHdlIHVz dWFsbHkKKwkJICogd2FpdCBhcyBsb25nIGFzIG5lY2Vzc2FyeSwgYnV0IHRoaXMgd2FpdAorCQkg KiBjYW4gYmUgaW50ZXJydXB0ZWQuICBGb3IgY29uc2VxdWVudAorCQkgKiBidWZmZXJzLCBkbyBu b3Qgc2xlZXAsIHNpbmNlIHNldmVyYWwKKwkJICogdGhyZWFkcyBtaWdodCBleGhhdXN0IHRoZSBi dWZmZXJzIGFuZCB0aGVuCisJCSAqIGRlYWRsb2NrLgorCQkgKi8KKwkJc2YgPSBzZl9idWZfYWxs b2MocGcsIChtbncgfHwgKG0gIT0gTlVMTCAmJiB3YWl0X2ZvcmFsbCA9PSAwKSkgPworCQkgICAg U0ZCX05PV0FJVCA6IFNGQl9DQVRDSCk7CisJCWlmIChzZiA9PSBOVUxMKSB7CisJCQlTRlNUQVRf SU5DKHNmX2FsbG9jZmFpbCk7CisJCQl2bV9wYWdlX2xvY2socGcpOworCQkJdm1fcGFnZV91bndp cmUocGcsIDApOworCQkJS0FTU0VSVChwZy0+b2JqZWN0ICE9IE5VTEwsCisJCQkgICAgKCJrZXJu X3NlbmRmaWxlOiBvYmplY3QgZGlzYXBwZWFyZWQiKSk7CisJCQl2bV9wYWdlX3VubG9jayhwZyk7 CisJCQlpZiAobSA9PSBOVUxMKQorCQkJCWVycm9yID0gKG1udyA/IEVBR0FJTiA6IEVJTlRSKTsK KwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogR2V0IGFuIG1idWYgYW5kIHNldCBpdCB1cCBh cyBoYXZpbmcKKwkJICogZXh0ZXJuYWwgc3RvcmFnZS4KKwkJICovCisJCW0wID0gbV9nZXQoKG1u dyA/IE1fTk9XQUlUIDogTV9XQUlUT0spLCBNVF9EQVRBKTsKKwkJaWYgKG0wID09IE5VTEwpIHsK KwkJCWVycm9yID0gKG1udyA/IEVBR0FJTiA6IEVOT0JVRlMpOworCQkJc2ZfYnVmX21leHQoTlVM TCwgc2YpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG1fZXh0YWRkKG0wLCAoY2FkZHJfdCApc2Zf YnVmX2t2YShzZiksIFBBR0VfU0laRSwKKwkJICAgIHNmX2J1Zl9tZXh0LCBzZnMsIHNmLCBNX1JE T05MWSwgRVhUX1NGQlVGLAorCQkgICAgKG1udyA/IE1fTk9XQUlUIDogTV9XQUlUT0spKSAhPSAw KSB7CisJCQllcnJvciA9IChtbncgPyBFQUdBSU4gOiBFTk9CVUZTKTsKKwkJCXNmX2J1Zl9tZXh0 KE5VTEwsIHNmKTsKKwkJCW1fZnJlZW0obTApOworCQkJYnJlYWs7CisJCX0KKwkJbTAtPm1fZGF0 YSA9IChjaGFyICopc2ZfYnVmX2t2YShzZikgKyBwZ29mZjsKKwkJbTAtPm1fbGVuID0geGZzaXpl OworCisJCS8qIEFwcGVuZCB0byBtYnVmIGNoYWluLiAqLworCQlpZiAobXRhaWwgIT0gTlVMTCkK KwkJCW10YWlsLT5tX25leHQgPSBtMDsKKwkJZWxzZSBpZiAobSAhPSBOVUxMKQorCQkJbV9sYXN0 KG0pLT5tX25leHQgPSBtMDsKKwkJZWxzZQorCQkJbSA9IG0wOworCQltdGFpbCA9IG0wOworCisJ CS8qIEtlZXAgdHJhY2sgb2YgYml0cyBwcm9jZXNzZWQuICovCisJCWxvb3BieXRlcyArPSB4ZnNp emU7CisJCW9mZiArPSB4ZnNpemU7CisKKwkJaWYgKHNmcyAhPSBOVUxMKSB7CisJCQltdHhfbG9j aygmc2ZzLT5tdHgpOworCQkJc2ZzLT5jb3VudCsrOworCQkJbXR4X3VubG9jaygmc2ZzLT5tdHgp OworCQl9CisJfQorCSptcCA9IG07CisJKm10YWlscCA9IG10YWlsOworCXJldHVybiAoZXJyb3Ip OworfQorCiBpbnQKIGtlcm5fc2VuZGZpbGUoc3RydWN0IHRocmVhZCAqdGQsIHN0cnVjdCBzZW5k ZmlsZV9hcmdzICp1YXAsCiAgICAgc3RydWN0IHVpbyAqaGRyX3Vpbywgc3RydWN0IHVpbyAqdHJs X3VpbywgaW50IGNvbXBhdCkKQEAgLTE5NTksMTAgKzIxMjksOCBAQCBrZXJuX3NlbmRmaWxlKHN0 cnVjdCB0aHJlYWQgKnRkLCBzdHJ1Y3QgCiAJc3RydWN0IHZtX29iamVjdCAqb2JqID0gTlVMTDsK IAlzdHJ1Y3Qgc29ja2V0ICpzbyA9IE5VTEw7CiAJc3RydWN0IG1idWYgKm0gPSBOVUxMOwotCXN0 cnVjdCBzZl9idWYgKnNmOwotCXN0cnVjdCB2bV9wYWdlICpwZzsKIAlzdHJ1Y3QgdmF0dHIgdmE7 Ci0Jb2ZmX3Qgb2ZmLCB4ZnNpemUsIGZzYnl0ZXMgPSAwLCBzYnl0ZXMgPSAwLCByZW0gPSAwOwor CW9mZl90IG9mZiwgZnNieXRlcyA9IDAsIHNieXRlcyA9IDAsIHJlbSA9IDA7CiAJaW50IGVycm9y LCBoZHJsZW4gPSAwLCBtbncgPSAwOwogCWludCBic2l6ZTsKIAlzdHJ1Y3Qgc2VuZGZpbGVfc3lu YyAqc2ZzID0gTlVMTDsKQEAgLTIxMDUsNyArMjI3Myw2IEBAIGtlcm5fc2VuZGZpbGUoc3RydWN0 IHRocmVhZCAqdGQsIHN0cnVjdCAKIAkgKi8KIAlmb3IgKG9mZiA9IHVhcC0+b2Zmc2V0OyA7ICkg ewogCQlzdHJ1Y3QgbWJ1ZiAqbXRhaWw7Ci0JCWludCBsb29wYnl0ZXM7CiAJCWludCBzcGFjZTsK IAkJaW50IGRvbmU7CiAKQEAgLTIxMTQsNyArMjI4MSw2IEBAIGtlcm5fc2VuZGZpbGUoc3RydWN0 IHRocmVhZCAqdGQsIHN0cnVjdCAKIAkJCWJyZWFrOwogCiAJCW10YWlsID0gTlVMTDsKLQkJbG9v cGJ5dGVzID0gMDsKIAkJc3BhY2UgPSAwOwogCQlkb25lID0gMDsKIApAQCAtMjE5MywxNTcgKzIz NTksMTUgQEAgcmV0cnlfc3BhY2U6CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAotCQkvKgotCQkgKiBM b29wIGFuZCBjb25zdHJ1Y3QgbWF4aW11bSBzaXplZCBtYnVmIGNoYWluIHRvIGJlIGJ1bGsKLQkJ ICogZHVtcGVkIGludG8gc29ja2V0IGJ1ZmZlci4KLQkJICovCi0JCXdoaWxlIChzcGFjZSA+IGxv b3BieXRlcykgewotCQkJdm1fcGluZGV4X3QgcGluZGV4OwotCQkJdm1fb2Zmc2V0X3QgcGdvZmY7 Ci0JCQlzdHJ1Y3QgbWJ1ZiAqbTA7Ci0KLQkJCS8qCi0JCQkgKiBDYWxjdWxhdGUgdGhlIGFtb3Vu dCB0byB0cmFuc2Zlci4KLQkJCSAqIE5vdCB0byBleGNlZWQgYSBwYWdlLCB0aGUgRU9GLAotCQkJ ICogb3IgdGhlIHBhc3NlZCBpbiBuYnl0ZXMuCi0JCQkgKi8KLQkJCXBnb2ZmID0gKHZtX29mZnNl dF90KShvZmYgJiBQQUdFX01BU0spOwotCQkJaWYgKHVhcC0+bmJ5dGVzKQotCQkJCXJlbSA9ICh1 YXAtPm5ieXRlcyAtIGZzYnl0ZXMgLSBsb29wYnl0ZXMpOwotCQkJZWxzZQotCQkJCXJlbSA9IHZh LnZhX3NpemUgLQotCQkJCSAgICB1YXAtPm9mZnNldCAtIGZzYnl0ZXMgLSBsb29wYnl0ZXM7Ci0J CQl4ZnNpemUgPSBvbWluKFBBR0VfU0laRSAtIHBnb2ZmLCByZW0pOwotCQkJeGZzaXplID0gb21p bihzcGFjZSAtIGxvb3BieXRlcywgeGZzaXplKTsKLQkJCWlmICh4ZnNpemUgPD0gMCkgewotCQkJ CWRvbmUgPSAxOwkJLyogYWxsIGRhdGEgc2VudCAqLwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQkv KgotCQkJICogQXR0ZW1wdCB0byBsb29rIHVwIHRoZSBwYWdlLiAgQWxsb2NhdGUKLQkJCSAqIGlm IG5vdCBmb3VuZCBvciB3YWl0IGFuZCBsb29wIGlmIGJ1c3kuCi0JCQkgKi8KLQkJCXBpbmRleCA9 IE9GRl9UT19JRFgob2ZmKTsKLQkJCVZNX09CSkVDVF9XTE9DSyhvYmopOwotCQkJcGcgPSB2bV9w YWdlX2dyYWIob2JqLCBwaW5kZXgsIFZNX0FMTE9DX05PQlVTWSB8Ci0JCQkgICAgVk1fQUxMT0Nf Tk9STUFMIHwgVk1fQUxMT0NfV0lSRUQgfCBWTV9BTExPQ19SRVRSWSk7Ci0KLQkJCS8qCi0JCQkg KiBDaGVjayBpZiBwYWdlIGlzIHZhbGlkIGZvciB3aGF0IHdlIG5lZWQsCi0JCQkgKiBvdGhlcndp c2UgaW5pdGlhdGUgSS9PLgotCQkJICogSWYgd2UgYWxyZWFkeSB0dXJuZWQgc29tZSBwYWdlcyBp bnRvIG1idWZzLAotCQkJICogc2VuZCB0aGVtIG9mZiBiZWZvcmUgd2UgY29tZSBoZXJlIGFnYWlu IGFuZAotCQkJICogYmxvY2suCi0JCQkgKi8KLQkJCWlmIChwZy0+dmFsaWQgJiYgdm1fcGFnZV9p c192YWxpZChwZywgcGdvZmYsIHhmc2l6ZSkpCi0JCQkJVk1fT0JKRUNUX1dVTkxPQ0sob2JqKTsK LQkJCWVsc2UgaWYgKG0gIT0gTlVMTCkKLQkJCQllcnJvciA9IEVBR0FJTjsJLyogc2VuZCB3aGF0 IHdlIGFscmVhZHkgZ290ICovCi0JCQllbHNlIGlmICh1YXAtPmZsYWdzICYgU0ZfTk9ESVNLSU8p Ci0JCQkJZXJyb3IgPSBFQlVTWTsKLQkJCWVsc2UgewotCQkJCXNzaXplX3QgcmVzaWQ7Ci0JCQkJ aW50IHJlYWRhaGVhZCA9IHNmcmVhZGFoZWFkICogTUFYQlNJWkU7Ci0KLQkJCQlWTV9PQkpFQ1Rf V1VOTE9DSyhvYmopOwotCi0JCQkJLyoKLQkJCQkgKiBHZXQgdGhlIHBhZ2UgZnJvbSBiYWNraW5n IHN0b3JlLgotCQkJCSAqIFhYWE1BQzogQmVjYXVzZSB3ZSBkb24ndCBoYXZlIGZwLT5mX2NyZWQK LQkJCQkgKiBoZXJlLCB3ZSBwYXNzIGluIE5PQ1JFRC4gIFRoaXMgaXMgcHJvYmFibHkKLQkJCQkg KiB3cm9uZywgYnV0IGlzIGNvbnNpc3RlbnQgd2l0aCBvdXIgb3JpZ2luYWwKLQkJCQkgKiBpbXBs ZW1lbnRhdGlvbi4KLQkJCQkgKi8KLQkJCQllcnJvciA9IHZuX3Jkd3IoVUlPX1JFQUQsIHZwLCBO VUxMLCByZWFkYWhlYWQsCi0JCQkJICAgIHRydW5jX3BhZ2Uob2ZmKSwgVUlPX05PQ09QWSwgSU9f Tk9ERUxPQ0tFRCB8Ci0JCQkJICAgIElPX1ZNSU8gfCAoKHJlYWRhaGVhZCAvIGJzaXplKSA8PCBJ T19TRVFTSElGVCksCi0JCQkJICAgIHRkLT50ZF91Y3JlZCwgTk9DUkVELCAmcmVzaWQsIHRkKTsK LQkJCQlTRlNUQVRfSU5DKHNmX2lvY250KTsKLQkJCQlpZiAoZXJyb3IpCi0JCQkJCVZNX09CSkVD VF9XTE9DSyhvYmopOwotCQkJfQotCQkJaWYgKGVycm9yKSB7Ci0JCQkJdm1fcGFnZV9sb2NrKHBn KTsKLQkJCQl2bV9wYWdlX3Vud2lyZShwZywgMCk7Ci0JCQkJLyoKLQkJCQkgKiBTZWUgaWYgYW55 b25lIGVsc2UgbWlnaHQga25vdyBhYm91dAotCQkJCSAqIHRoaXMgcGFnZS4gIElmIG5vdCBhbmQg aXQgaXMgbm90IHZhbGlkLAotCQkJCSAqIHRoZW4gZnJlZSBpdC4KLQkJCQkgKi8KLQkJCQlpZiAo cGctPndpcmVfY291bnQgPT0gMCAmJiBwZy0+dmFsaWQgPT0gMCAmJgotCQkJCSAgICAhdm1fcGFn ZV9idXNpZWQocGcpKQotCQkJCQl2bV9wYWdlX2ZyZWUocGcpOwotCQkJCXZtX3BhZ2VfdW5sb2Nr KHBnKTsKLQkJCQlWTV9PQkpFQ1RfV1VOTE9DSyhvYmopOwotCQkJCWlmIChlcnJvciA9PSBFQUdB SU4pCi0JCQkJCWVycm9yID0gMDsJLyogbm90IGEgcmVhbCBlcnJvciAqLwotCQkJCWJyZWFrOwot CQkJfQotCi0JCQkvKgotCQkJICogR2V0IGEgc2VuZGZpbGUgYnVmLiAgV2hlbiBhbGxvY2F0aW5n IHRoZQotCQkJICogZmlyc3QgYnVmZmVyIGZvciBtYnVmIGNoYWluLCB3ZSB1c3VhbGx5Ci0JCQkg KiB3YWl0IGFzIGxvbmcgYXMgbmVjZXNzYXJ5LCBidXQgdGhpcyB3YWl0Ci0JCQkgKiBjYW4gYmUg aW50ZXJydXB0ZWQuICBGb3IgY29uc2VxdWVudAotCQkJICogYnVmZmVycywgZG8gbm90IHNsZWVw LCBzaW5jZSBzZXZlcmFsCi0JCQkgKiB0aHJlYWRzIG1pZ2h0IGV4aGF1c3QgdGhlIGJ1ZmZlcnMg YW5kIHRoZW4KLQkJCSAqIGRlYWRsb2NrLgotCQkJICovCi0JCQlzZiA9IHNmX2J1Zl9hbGxvYyhw ZywgKG1udyB8fCBtICE9IE5VTEwpID8gU0ZCX05PV0FJVCA6Ci0JCQkgICAgU0ZCX0NBVENIKTsK LQkJCWlmIChzZiA9PSBOVUxMKSB7Ci0JCQkJU0ZTVEFUX0lOQyhzZl9hbGxvY2ZhaWwpOwotCQkJ CXZtX3BhZ2VfbG9jayhwZyk7Ci0JCQkJdm1fcGFnZV91bndpcmUocGcsIDApOwotCQkJCUtBU1NF UlQocGctPm9iamVjdCAhPSBOVUxMLAotCQkJCSAgICAoImtlcm5fc2VuZGZpbGU6IG9iamVjdCBk aXNhcHBlYXJlZCIpKTsKLQkJCQl2bV9wYWdlX3VubG9jayhwZyk7Ci0JCQkJaWYgKG0gPT0gTlVM TCkKLQkJCQkJZXJyb3IgPSAobW53ID8gRUFHQUlOIDogRUlOVFIpOwotCQkJCWJyZWFrOwotCQkJ fQotCi0JCQkvKgotCQkJICogR2V0IGFuIG1idWYgYW5kIHNldCBpdCB1cCBhcyBoYXZpbmcKLQkJ CSAqIGV4dGVybmFsIHN0b3JhZ2UuCi0JCQkgKi8KLQkJCW0wID0gbV9nZXQoKG1udyA/IE1fTk9X QUlUIDogTV9XQUlUT0spLCBNVF9EQVRBKTsKLQkJCWlmIChtMCA9PSBOVUxMKSB7Ci0JCQkJZXJy b3IgPSAobW53ID8gRUFHQUlOIDogRU5PQlVGUyk7Ci0JCQkJc2ZfYnVmX21leHQoTlVMTCwgc2Yp OwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKG1fZXh0YWRkKG0wLCAoY2FkZHJfdCApc2ZfYnVm X2t2YShzZiksIFBBR0VfU0laRSwKLQkJCSAgICBzZl9idWZfbWV4dCwgc2ZzLCBzZiwgTV9SRE9O TFksIEVYVF9TRkJVRiwKLQkJCSAgICAobW53ID8gTV9OT1dBSVQgOiBNX1dBSVRPSykpICE9IDAp IHsKLQkJCQllcnJvciA9IChtbncgPyBFQUdBSU4gOiBFTk9CVUZTKTsKLQkJCQlzZl9idWZfbWV4 dChOVUxMLCBzZik7Ci0JCQkJbV9mcmVlbShtMCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQltMC0+ bV9kYXRhID0gKGNoYXIgKilzZl9idWZfa3ZhKHNmKSArIHBnb2ZmOwotCQkJbTAtPm1fbGVuID0g eGZzaXplOwotCi0JCQkvKiBBcHBlbmQgdG8gbWJ1ZiBjaGFpbi4gKi8KLQkJCWlmIChtdGFpbCAh PSBOVUxMKQotCQkJCW10YWlsLT5tX25leHQgPSBtMDsKLQkJCWVsc2UgaWYgKG0gIT0gTlVMTCkK LQkJCQltX2xhc3QobSktPm1fbmV4dCA9IG0wOwotCQkJZWxzZQotCQkJCW0gPSBtMDsKLQkJCW10 YWlsID0gbTA7Ci0KLQkJCS8qIEtlZXAgdHJhY2sgb2YgYml0cyBwcm9jZXNzZWQuICovCi0JCQls b29wYnl0ZXMgKz0geGZzaXplOwotCQkJb2ZmICs9IHhmc2l6ZTsKLQotCQkJaWYgKHNmcyAhPSBO VUxMKSB7Ci0JCQkJbXR4X2xvY2soJnNmcy0+bXR4KTsKLQkJCQlzZnMtPmNvdW50Kys7Ci0JCQkJ bXR4X3VubG9jaygmc2ZzLT5tdHgpOwotCQkJfQotCQl9CisJCS8qIENhbGwga2Vybl9zZW5kZmls ZV9tYnVmKCkgZm9yIHRoZSBpbm5lciBsb29wLiAqLworCQlpZiAodWFwLT5uYnl0ZXMpCisJCQly ZW0gPSAodWFwLT5uYnl0ZXMgLSBmc2J5dGVzKTsKKwkJZWxzZQorCQkJcmVtID0gdmEudmFfc2l6 ZSAtCisJCQkgICAgdWFwLT5vZmZzZXQgLSBmc2J5dGVzOworCQllcnJvciA9IGtlcm5fc2VuZGZp bGVfbWJ1Zih2cCwgb2JqLCAmbSwgJm10YWlsLCBvZmYsICZyZW0sCisJCSAgICBic2l6ZSwgJmRv bmUsIHNwYWNlLCBtbncsIDAsIHVhcC0+ZmxhZ3MsCisJCSAgICBJT19OT0RFTE9DS0VEIHwgSU9f Vk1JTywgc2ZzLCBOT0NSRUQsIHRkKTsKIAogCQlWT1BfVU5MT0NLKHZwLCAwKTsKIAotLS0gZnMv bmZzc2VydmVyL25mc19uZnNkcG9ydC5jLnNhdjMJMjAxNC0wMi0wNiAxODo0MjowMi4wMDAwMDAw MDAgLTA1MDAKKysrIGZzL25mc3NlcnZlci9uZnNfbmZzZHBvcnQuYwkyMDE0LTAyLTA2IDE4OjI2 OjQ5LjAwMDAwMDAwMCAtMDUwMApAQCAtNzQsNiArNzQsOCBAQCBzdGF0aWMgdWludDMyX3QgbmZz djRfc3lzaWQgPSAwOwogCiBzdGF0aWMgaW50IG5mc3N2Y19zcnZjYWxsKHN0cnVjdCB0aHJlYWQg Kiwgc3RydWN0IG5mc3N2Y19hcmdzICosCiAgICAgc3RydWN0IHVjcmVkICopOworc3RhdGljIGlu dCBuZnNydl9maWxlX21idWYoc3RydWN0IHZub2RlICosIHN0cnVjdCBuZnN2YXR0ciAqLCBvZmZf dCwKKyAgICBpbnQsIHN0cnVjdCBtYnVmICoqLCBzdHJ1Y3QgbWJ1ZiAqKiwgc3RydWN0IHVjcmVk ICosIHN0cnVjdCB0aHJlYWQgKik7CiAKIGludCBuZnNydl9lbmFibGVfY3Jvc3NtbnRwdCA9IDE7 CiBzdGF0aWMgaW50IG5mc19jb21taXRfYmxrczsKQEAgLTYxNyw4ICs2MTksOSBAQCBvdXQ6CiAg KiBSZWFkIHZub2RlIG9wIGNhbGwgaW50byBtYnVmIGxpc3QuCiAgKi8KIGludAotbmZzdm5vX3Jl YWQoc3RydWN0IHZub2RlICp2cCwgb2ZmX3Qgb2ZmLCBpbnQgY250LCBzdHJ1Y3QgdWNyZWQgKmNy ZWQsCi0gICAgc3RydWN0IHRocmVhZCAqcCwgc3RydWN0IG1idWYgKiptcHAsIHN0cnVjdCBtYnVm ICoqbXBlbmRwKQorbmZzdm5vX3JlYWQoc3RydWN0IHZub2RlICp2cCwgc3RydWN0IG5mc3ZhdHRy ICpudmFwLCBvZmZfdCBvZmYsIGludCBjbnQsCisgICAgc3RydWN0IHVjcmVkICpjcmVkLCBzdHJ1 Y3QgdGhyZWFkICpwLCBzdHJ1Y3QgbWJ1ZiAqKm1wcCwKKyAgICBzdHJ1Y3QgbWJ1ZiAqKm1wZW5k cCkKIHsKIAlzdHJ1Y3QgbWJ1ZiAqbTsKIAlpbnQgaTsKQEAgLTYyOSw2ICs2MzIsOSBAQCBuZnN2 bm9fcmVhZChzdHJ1Y3Qgdm5vZGUgKnZwLCBvZmZfdCBvZmYsCiAJc3RydWN0IHVpbyBpbywgKnVp b3AgPSAmaW87CiAJc3RydWN0IG5mc2hldXIgKm5oOwogCisJZXJyb3IgPSBuZnNydl9maWxlX21i dWYodnAsIG52YXAsIG9mZiwgY250LCBtcHAsIG1wZW5kcCwgY3JlZCwgcCk7CisJaWYgKGVycm9y ID09IDApCisJCWdvdG8gb3V0OwogCWxlbiA9IGxlZnQgPSBORlNNX1JORFVQKGNudCk7CiAJbTMg PSBOVUxMOwogCS8qCkBAIC0zMjk1LDYgKzMzMDEsOTggQEAgbmZzcnZfYmFja3Vwc3RhYmxlKHZv aWQpCiAJfQogfQogCisvKgorICogVGhpcyBmdW5jdGlvbiB1c2VzIGtlcm5fc2VuZGZpbGVfbWJ1 ZigpIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBtYnVmcworICogdGhhdCBjYW4gYmUgdXNlZCBieSB0 aGUgTkZTIHNlcnZlciByZWFkIHJlcGx5LgorICovCitpbnQKK25mc3J2X2ZpbGVfbWJ1ZihzdHJ1 Y3Qgdm5vZGUgKnZwLCBzdHJ1Y3QgbmZzdmF0dHIgKm52YXAsIG9mZl90IG9mZiwKKyAgICBpbnQg bmJ5dGVzLCBzdHJ1Y3QgbWJ1ZiAqKm1wLCBzdHJ1Y3QgbWJ1ZiAqKm1lbmRwLCBzdHJ1Y3QgdWNy ZWQgKmFjcmVkLAorICAgIHN0cnVjdCB0aHJlYWQgKnRkKQoreworCXN0cnVjdCB2bV9vYmplY3Qg Km9iaiA9IE5VTEw7CisJc3RydWN0IG1idWYgKm0sICptMjsKKwlvZmZfdCByZW07CisJaW50IGJz aXplLCBjbnQsIGRvbmUsIGVycm9yLCBpOworCWNoYXIgKmNwOworCisJKm1wID0gTlVMTDsKKwkq bWVuZHAgPSBOVUxMOworCWVycm9yID0gMDsKKwlic2l6ZSA9IHZwLT52X21vdW50LT5tbnRfc3Rh dC5mX2lvc2l6ZTsKKwlpZiAobnZhcC0+bmFfc2l6ZSA+IG9mZikKKwkJcmVtID0gbnZhcC0+bmFf c2l6ZSAtIG9mZjsKKwllbHNlCisJCWdvdG8gb3V0OwkvKiBOb3RoaW5nIHRvIHJlYWQsIHNvIHdl IGFyZSBkb25lLiAqLworCXJlbSA9IG9taW4ocmVtLCBuYnl0ZXMpOworCWNudCA9IHJlbTsKKwlj bnQgPSBORlNNX1JORFVQKGNudCkgLSBjbnQ7CS8qIENudCBvZiBieXRlcyBvZiB0cmFpbGluZyAw cy4gKi8KKwlvYmogPSB2cC0+dl9vYmplY3Q7CisJaWYgKG9iaiAhPSBOVUxMKSB7CisJCS8qCisJ CSAqIERvIHdlIG5lZWQgdG8gYWNxdWlyZSBhIHJlZmVyZW5jZSBjbnQgb24gdGhlIG9iaiBsaWtl CisJCSAqIGtlcm5fc2VuZGZpbGUoKSBkb2VzLCBldmVuIGlmIHdlIG5ldmVyIHVubG9jayB2cD8K KwkJICovCisJCVZNX09CSkVDVF9XTE9DSyhvYmopOworCQlpZiAoKG9iai0+ZmxhZ3MgJiBPQkpf REVBRCkgPT0gMCkgeworI2lmZGVmIG5vdG5vdworCQkJdm1fb2JqZWN0X3JlZmVyZW5jZV9sb2Nr ZWQob2JqKTsKKyNlbmRpZgorCQkJVk1fT0JKRUNUX1dVTkxPQ0sob2JqKTsKKwkJfSBlbHNlIHsK KwkJCVZNX09CSkVDVF9XVU5MT0NLKG9iaik7CisJCQlvYmogPSBOVUxMOworCQl9CisJfQorCWlm IChvYmogPT0gTlVMTCkKKwkJZXJyb3IgPSBFSU5WQUw7CisKKwkvKiBTZXR1cCB0aGUgYXJncyBm b3Iga2Vybl9zZW5kZmlsZV9tYnVmKCkuICovCisJZG9uZSA9IDA7CisJaWYgKGVycm9yID09IDAp CisJCWVycm9yID0ga2Vybl9zZW5kZmlsZV9tYnVmKHZwLCBvYmosIG1wLCBtZW5kcCwgb2ZmLCAm cmVtLCBic2l6ZSwKKwkJICAgICZkb25lLCAyICogTUFYQlNJWkUsIDAsIDEsIDAsIElPX05PREVM T0NLRUQgfCBJT19WTUlPIHwKKwkJICAgIElPX05PTUFDQ0hFQ0ssIE5VTEwsIGFjcmVkLCB0ZCk7 CisJaWYgKGVycm9yID09IDAgJiYgY250ID4gMCkgeworCQkvKgorCQkgKiBTdW4gWERSIHJlcXVp cmVzIHRoYXQgZGF0YSBiZSBmaWxsZWQgdG8gYSBtdWx0aXBsZQorCQkgKiBvZiA0IGJ5dGVzIHdp dGggMCBieXRlcy4KKwkJICogU2luY2UgdGhlIGxpc3Qgb2YgbWJ1ZnMgcmV0dXJuZWQgYnkga2Vy bl9zZW5kZmlsZV9tYnVmCisJCSAqIHJlZmVyZW5jZSBwYWdlcyBmb3IgYSBmaWxlIGFuZCBjYW4n dCBiZSBtb2RpZmllZCwgdGhpcworCQkgKiByZXF1aXJlcyBhbiBhZGRpdGlvbmFsIG1idWYuCisJ CSAqLworCQltID0gKm1lbmRwOworCQlORlNNR0VUKG0yKTsKKwkJbS0+bV9uZXh0ID0gbTI7CisJ CSptZW5kcCA9IG0yOworCQljcCA9IG10b2QobTIsIGNoYXIgKik7CisJCW0yLT5tX2xlbiA9IGNu dDsKKwkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQorCQkJKmNwKysgPSAnXDAnOworCX0KKwlp ZiAoZXJyb3IgPT0gRVJFU1RBUlQpCisJCXBhbmljKCJuZnNydl9maWxlX21idWY6IEVSRVNUQVJU Iik7CitvdXQ6CisjaWZkZWYgbm90bm93CisJaWYgKG9iaiAhPSBOVUxMKSB7CisJCU5GU1ZPUFVO TE9DSyh2cCwgMCk7CisJCXZtX29iamVjdF9kZWFsbG9jYXRlKG9iaik7CisJCU5GU1ZPUExPQ0so dnAsIExLX1NIQVJFRCB8IExLX1JFVFJZKTsKKwkJaWYgKGVycm9yID09IDAgJiYgKHZwLT52X2lm bGFnICYgVklfRE9PTUVEKSAhPSAwKQorCQkJZXJyb3IgPSBFU1RBTEU7CisJfQorI2VuZGlmCisJ aWYgKGVycm9yICE9IDApIHsKKwkJaWYgKCptcCAhPSBOVUxMKSB7CisJCQltX2ZyZWVtKCptcCk7 CisJCQkqbXAgPSBOVUxMOworCQkJKm1lbmRwID0gTlVMTDsKKwkJfQorcHJpbnRmKCJlbyBuZnNy dl9maWxlX21idWYgZXJyPSVkXG4iLCBlcnJvcik7CisJfQorCXJldHVybiAoZXJyb3IpOworfQor CiBleHRlcm4gaW50ICgqbmZzZF9jYWxsX25mc2QpKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IG5m c3N2Y19hcmdzICopOwogCiAvKgotLS0gZnMvbmZzc2VydmVyL25mc19uZnNkc2Vydi5jLnNhdjMJ MjAxNC0wMi0wNSAyMTozNToxNi4wMDAwMDAwMDAgLTA1MDAKKysrIGZzL25mc3NlcnZlci9uZnNf bmZzZHNlcnYuYwkyMDE0LTAyLTA1IDIxOjM1OjQ1LjAwMDAwMDAwMCAtMDUwMApAQCAtNzI2LDcg KzcyNiw3IEBAIG5mc3J2ZF9yZWFkKHN0cnVjdCBuZnNydl9kZXNjcmlwdCAqbmQsIF8KIAkJY250 ID0gcmVxbGVuOwogCW0zID0gTlVMTDsKIAlpZiAoY250ID4gMCkgewotCQluZC0+bmRfcmVwc3Rh dCA9IG5mc3Zub19yZWFkKHZwLCBvZmYsIGNudCwgbmQtPm5kX2NyZWQsIHAsCisJCW5kLT5uZF9y ZXBzdGF0ID0gbmZzdm5vX3JlYWQodnAsICZudmEsIG9mZiwgY250LCBuZC0+bmRfY3JlZCwgcCwK IAkJICAgICZtMywgJm0yKTsKIAkJaWYgKCEobmQtPm5kX2ZsYWcgJiBORF9ORlNWNCkpIHsKIAkJ CWdldHJldCA9IG5mc3Zub19nZXRhdHRyKHZwLCAmbnZhLCBuZC0+bmRfY3JlZCwgcCwgMSk7Ci0t LSBmcy9uZnMvbmZzX3Zhci5oLnNhdjMJMjAxNC0wMi0wNSAyMjoxNDozOC4wMDAwMDAwMDAgLTA1 MDAKKysrIGZzL25mcy9uZnNfdmFyLmgJMjAxNC0wMi0wNSAyMjoxNzoyOS4wMDAwMDAwMDAgLTA1 MDAKQEAgLTU3OSw4ICs1NzksOCBAQCB2b2lkIG5mc3Zub19zZXRwYXRoYnVmKHN0cnVjdCBuYW1l aWRhdGEgCiB2b2lkIG5mc3Zub19yZWxwYXRoYnVmKHN0cnVjdCBuYW1laWRhdGEgKik7CiBpbnQg bmZzdm5vX3JlYWRsaW5rKHZub2RlX3QsIHN0cnVjdCB1Y3JlZCAqLCBORlNQUk9DX1QgKiwgbWJ1 Zl90ICosCiAgICAgbWJ1Zl90ICosIGludCAqKTsKLWludCBuZnN2bm9fcmVhZCh2bm9kZV90LCBv ZmZfdCwgaW50LCBzdHJ1Y3QgdWNyZWQgKiwgTkZTUFJPQ19UICosCi0gICAgbWJ1Zl90ICosIG1i dWZfdCAqKTsKK2ludCBuZnN2bm9fcmVhZCh2bm9kZV90LCBzdHJ1Y3QgbmZzdmF0dHIgKiwgb2Zm X3QsIGludCwgc3RydWN0IHVjcmVkICosCisgICAgTkZTUFJPQ19UICosIG1idWZfdCAqLCBtYnVm X3QgKik7CiBpbnQgbmZzdm5vX3dyaXRlKHZub2RlX3QsIG9mZl90LCBpbnQsIGludCwgaW50LCBt YnVmX3QsCiAgICAgY2hhciAqLCBzdHJ1Y3QgdWNyZWQgKiwgTkZTUFJPQ19UICopOwogaW50IG5m c3Zub19jcmVhdGVzdWIoc3RydWN0IG5mc3J2X2Rlc2NyaXB0ICosIHN0cnVjdCBuYW1laWRhdGEg KiwKLS0tIHN5cy9zeXNjYWxsc3Vici5oLnNhdjMJMjAxNC0wMi0wNCAyMDozMDo0NC4wMDAwMDAw MDAgLTA1MDAKKysrIHN5cy9zeXNjYWxsc3Vici5oCTIwMTQtMDItMDYgMTg6MjQ6NDguMDAwMDAw MDAwIC0wNTAwCkBAIC0yNTMsNiArMjUzLDExIEBAIGludAlrZXJuX3dhaXQ2KHN0cnVjdCB0aHJl YWQgKnRkLCBlbnVtIGkKIGludAlrZXJuX3dyaXRldihzdHJ1Y3QgdGhyZWFkICp0ZCwgaW50IGZk LCBzdHJ1Y3QgdWlvICphdWlvKTsKIGludAlrZXJuX3NvY2tldHBhaXIoc3RydWN0IHRocmVhZCAq dGQsIGludCBkb21haW4sIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsCiAJICAgIGludCAqcnN2KTsK K2ludAlrZXJuX3NlbmRmaWxlX21idWYoc3RydWN0IHZub2RlICp2cCwgc3RydWN0IHZtX29iamVj dCAqb2JqLAorCSAgICBzdHJ1Y3QgbWJ1ZiAqKm1wLCBzdHJ1Y3QgbWJ1ZiAqKm10YWlscCwgb2Zm X3Qgb2ZmLCBvZmZfdCAqcmVtcCwKKwkgICAgaW50IGJzaXplLCBpbnQgKmRvbmVwLCBpbnQgc3Bh Y2UsIGludCBtbncsIGludCB3YWl0X2ZvcmFsbCwKKwkgICAgaW50IGZsYWdzLCBpbnQgaW9mbGFn cywgdm9pZCAqc2ZzLCBzdHJ1Y3QgdWNyZWQgKmFjcmVkLAorCSAgICBzdHJ1Y3QgdGhyZWFkICp0 ZCk7CiAKIC8qIGZsYWdzIGZvciBrZXJuX3NpZ2FjdGlvbiAqLwogI2RlZmluZQlLU0FfT1NJR1NF VAkweDAwMDEJLyogdXNlcyBvc2lnYWN0X3QgKi8K ------=_Part_1982991_1248016500.1391738315025--