From owner-freebsd-current@FreeBSD.ORG Tue Jan 14 22:23:24 2014 Return-Path: Delivered-To: freebsd-current@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 1EC4B720; Tue, 14 Jan 2014 22:23:24 +0000 (UTC) Received: from mail-pa0-x234.google.com (mail-pa0-x234.google.com [IPv6:2607:f8b0:400e:c03::234]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id D7692108D; Tue, 14 Jan 2014 22:23:23 +0000 (UTC) Received: by mail-pa0-f52.google.com with SMTP id kx10so247698pab.39 for ; Tue, 14 Jan 2014 14:23:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=mH+8yRLXWyme7BC42zMj585ggFzjL73LNhkgWkDXfVg=; b=NItIYLDv48Qt0azW/CdVu0CJntdQZas5hyr2YnAuXPqcR+BLMkq8CU6R5cS/PVRHjK rrGXH7DJVXq1sM1FZPgGb2BzAr5yn8T6LLtigoGBr1nBxh1P1WXBYDJ12NuJ/HhvZs5o zFBtWiV+rxTRz4G9C6c/uqz+9oZSX8A5IhfmQh/ZI906oMWPXKyohx6EKilnTJ7ETAWT OdjVk9iO44MdChBTnfJ6FI/FjPalMnJc7FsJvhE/bD3waWudbQvG9QchsUpC6R1UNda/ ZXkQFg3OWIp40whpsoZgEb1n0/3SxMiEAgIqJmHOhscMKI4+FFEQWjzohuezkS4/xZdO x3OQ== X-Received: by 10.68.133.163 with SMTP id pd3mr4507564pbb.166.1389738203357; Tue, 14 Jan 2014 14:23:23 -0800 (PST) MIME-Version: 1.0 Received: by 10.70.129.171 with HTTP; Tue, 14 Jan 2014 14:22:43 -0800 (PST) In-Reply-To: <20140113021018.GA3500@michelle.cdnetworks.com> References: <48005124.ny58tnLn4d@pc-alex> <20140110012114.GA3103@michelle.cdnetworks.com> <20140110103529.GE73147@FreeBSD.org> <20140113021018.GA3500@michelle.cdnetworks.com> From: Eric Joyner Date: Tue, 14 Jan 2014 14:22:43 -0800 Message-ID: Subject: Re: FreeBSD 10-RC4: Got crash in igb driver To: pyunyh@gmail.com Content-Type: multipart/mixed; boundary=001a1134b612f2665504eff5a3dc X-Content-Filtered-By: Mailman/MimeDel 2.1.17 Cc: damien.deville@netasq.com, freebsd-current@freebsd.org, fabien.thomas@netasq.com, Alexandre Martins , Gleb Smirnoff , Jack F Vogel X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Jan 2014 22:23:24 -0000 --001a1134b612f2665504eff5a3dc Content-Type: text/plain; charset=UTF-8 All, I work with Jack on FreeBSD network drivers, and we have a patch that we think might fix this problem. It re-implements the header pull-up code that was in the driver pre-2.4.0, but with IPv6 support. Alexandre, could you apply this patch to the igb version in HEAD and try it out on your network? We can't replicate your setup here. If it solves your problem, then the next step would be to port the patch to the ixgbe driver since, as Yonghyeon noted, it looks like that driver will encounter the same problem. We could then modify em to add IPv6 offload support as well. Thanks, --- - Eric Joyner On Fri, Jan 10, 2014 at 02:35:29PM +0400, Gleb Smirnoff wrote: > Yonghyeon, > > On Fri, Jan 10, 2014 at 10:21:14AM +0900, Yonghyeon PYUN wrote: > Y> > I experience some troubles with the igb device driver on FreeBSD 10-RC4. > Y> > > Y> > The kernel make a pagefault in the igb_tx_ctx_setup function when accessing to > Y> > a IPv6 header. > Y> > > Y> > The network configuration is the following: > Y> > - box acting as an IPv6 router > Y> > - one interface with an IPv6 (igb0) > Y> > - another interface with a vlan, and IPv6 on it (vlan0 on igb1) > Y> > > Y> > Vlan Hardware tagging is set on both interfaces. > Y> > > Y> > The packet that cause the crash come from igb0 and go to vlan0. > Y> > > Y> > After investigation, i see that the mbuf is split in two. The first one carry > Y> > the ethernet header, the second, the IPv6 header and data payload. > Y> > > Y> > The split is due to the "m_copy" done in ip6_forward, that make the mbuf not > Y> > writable and the "M_PREPEND" in ether_output that insert the new mbuf before > Y> > the original one. > Y> > > Y> > The kernel crashes only if the newly allocated mbuf is at the end of a memory > Y> > page, and no page is available after this one. So, it's extremly rare. > Y> > > Y> > I inserted a "KASSERT" into the function (see attached patch) to check this > Y> > behavior, and it raises on every IPv6 forwarded packet to the vlan. The > Y> > problem disapear if i remove hardware tagging. > Y> > > Y> > In the commit 256200, i see that pullups has been removed. May it be related ? > Y> > Y> I think I introduced the header parsing code to meet controller > Y> requirement in em(4) and Jack borrowed that code in the past but it > Y> seems it was removed in r256200. It seems igb_tx_ctx_setup() > Y> assumes it can access ethernet/IP/TCP/UDP headers in the first mbuf > Y> of the chain. > Y> This looks wrong to me. > > Can you please restore the important code in head ASAP? Although crashes happen > only when the mbuf is last in a page and page isn't mapped, we read thrash from > next allocation on almost every packet. > It seems other Intel ethernet drivers except em(4) have similar issues. I didn't check recent Intel controllers/drivers for long time so I don't know details on hardware requirements of offloading. Since Jack is very responsive and has hardwares to verify, he would be more appropriate person to handle these issues. _______________________________________________ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org" --001a1134b612f2665504eff5a3dc Content-Type: application/octet-stream; name="fix.patch" Content-Disposition: attachment; filename="fix.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hqfq2abb0 ZGlmZiAtTmF1ciBoZWFkL2lmX2lnYi5jIHBhdGNoL2lmX2lnYi5jCi0tLSBoZWFkL2lmX2lnYi5j CTIwMTQtMDEtMTQgMTQ6MDg6MDQuMDAwMDAwMDAwIC0wODAwCisrKyBwYXRjaC9pZl9pZ2IuYwky MDE0LTAxLTE0IDE0OjA3OjAxLjAwMDAwMDAwMCAtMDgwMApAQCAtMSw2ICsxLDYgQEAKIC8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKIAotICBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxMywgSW50ZWwgQ29y cG9yYXRpb24gCisgIENvcHlyaWdodCAoYykgMjAwMS0yMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbiAK ICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgCiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCAKQEAgLTI0NCw5ICsyNDQs MTEgQEAKIHN0YXRpYyBib29sCWlnYl9yeGVvZihzdHJ1Y3QgaWdiX3F1ZXVlICosIGludCwgaW50 ICopOwogc3RhdGljIHZvaWQJaWdiX3J4X2NoZWNrc3VtKHUzMiwgc3RydWN0IG1idWYgKiwgdTMy KTsKIHN0YXRpYyBpbnQJaWdiX3R4X2N0eF9zZXR1cChzdHJ1Y3QgdHhfcmluZyAqLAotCQkgICAg c3RydWN0IG1idWYgKiwgdTMyICosIHUzMiAqKTsKKwkJICAgIHN0cnVjdCBtYnVmICosIHUzMiAq LCB1MzIgKiwgc3RydWN0IGlnYl9wa3RfaW5mbyAqKTsKIHN0YXRpYyBpbnQJaWdiX3Rzb19zZXR1 cChzdHJ1Y3QgdHhfcmluZyAqLAotCQkgICAgc3RydWN0IG1idWYgKiwgdTMyICosIHUzMiAqKTsK KwkJICAgIHN0cnVjdCBtYnVmICosIHUzMiAqLCB1MzIgKiwgc3RydWN0IGlnYl9wa3RfaW5mbyAq KTsKK3N0YXRpYyBpbnQJaWdiX3B1bGx1cF9oZWFkZXJzKHN0cnVjdCBtYnVmICoqLCB1MzIsCisJ CSAgICBzdHJ1Y3QgaWdiX3BrdF9pbmZvICopOwogc3RhdGljIHZvaWQJaWdiX3NldF9wcm9taXNj KHN0cnVjdCBhZGFwdGVyICopOwogc3RhdGljIHZvaWQJaWdiX2Rpc2FibGVfcHJvbWlzYyhzdHJ1 Y3QgYWRhcHRlciAqKTsKIHN0YXRpYyB2b2lkCWlnYl9zZXRfbXVsdGkoc3RydWN0IGFkYXB0ZXIg Kik7CkBAIC0yOTAsNiArMjkyLDcgQEAKIHN0YXRpYyBpbnQJaWdiX3N5c2N0bF9kbWFjKFNZU0NU TF9IQU5ETEVSX0FSR1MpOwogc3RhdGljIGludAlpZ2Jfc3lzY3RsX2VlZShTWVNDVExfSEFORExF Ul9BUkdTKTsKIAorCiAjaWZkZWYgREVWSUNFX1BPTExJTkcKIHN0YXRpYyBwb2xsX2hhbmRsZXJf dCBpZ2JfcG9sbDsKICNlbmRpZiAvKiBQT0xMSU5HICovCkBAIC0xODQzLDkgKzE4NDYsMTEgQEAK IAlidXNfZG1hX3NlZ21lbnRfdCBzZWdzW0lHQl9NQVhfU0NBVFRFUl07CiAJYnVzX2RtYW1hcF90 CW1hcDsKIAlzdHJ1Y3QgaWdiX3R4X2J1ZiAqdHhidWY7CisJc3RydWN0IGlnYl9wa3RfaW5mbwlw a3Q7CiAJdW5pb24gZTEwMDBfYWR2X3R4X2Rlc2MgKnR4ZCA9IE5VTEw7CiAKIAltX2hlYWQgPSAq bV9oZWFkcDsKKwliemVybygmcGt0LCBzaXplb2Yoc3RydWN0IGlnYl9wa3RfaW5mbykpOwogCiAJ LyogQmFzaWMgZGVzY3JpcHRvciBkZWZpbmVzICovCiAgICAgICAgIGNtZF90eXBlX2xlbiA9IChF MTAwMF9BRFZUWERfRFRZUF9EQVRBIHwKQEAgLTE4NjMsNiArMTg2OCwxNCBAQAogCXR4YnVmID0g JnR4ci0+dHhfYnVmZmVyc1tmaXJzdF07CiAJbWFwID0gdHhidWYtPm1hcDsKIAorCS8qIFB1bGx1 cCBoZWFkZXJzIGlmIG9mZmxvYWQgaGFzIGJlZW4gcmVxdWVzdGVkICovCisJaWYgKG1faGVhZC0+ bV9wa3RoZHIuY3N1bV9mbGFncyAmIENTVU1fT0ZGTE9BRCkgeworCQllcnJvciA9IGlnYl9wdWxs dXBfaGVhZGVycyhtX2hlYWRwLAorCQkgICAgbV9oZWFkLT5tX3BrdGhkci5jc3VtX2ZsYWdzLCAm cGt0KTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIChlcnJvcik7CisJfQorCiAJLyoKIAkgKiBN YXAgdGhlIHBhY2tldCBmb3IgRE1BLgogCSAqLwpAQCAtMTkwNiwxOCArMTkxOSwxOCBAQAogCQli dXNfZG1hbWFwX3VubG9hZCh0eHItPnR4dGFnLCBtYXApOwogCQlyZXR1cm4gKEVOT0JVRlMpOwog CX0KLQltX2hlYWQgPSAqbV9oZWFkcDsKIAogCS8qCiAJKiogU2V0IHVwIHRoZSBhcHByb3ByaWF0 ZSBvZmZsb2FkIGNvbnRleHQKIAkqKiB0aGlzIHdpbGwgY29uc3VtZSB0aGUgZmlyc3QgZGVzY3Jp cHRvcgogCSovCi0JZXJyb3IgPSBpZ2JfdHhfY3R4X3NldHVwKHR4ciwgbV9oZWFkLCAmY21kX3R5 cGVfbGVuLCAmb2xpbmZvX3N0YXR1cyk7CisJZXJyb3IgPSBpZ2JfdHhfY3R4X3NldHVwKHR4ciwg bV9oZWFkLCAmY21kX3R5cGVfbGVuLCAmb2xpbmZvX3N0YXR1cywgJnBrdCk7CiAJaWYgKF9fcHJl ZGljdF9mYWxzZShlcnJvcikpIHsKIAkJbV9mcmVlbSgqbV9oZWFkcCk7CiAJCSptX2hlYWRwID0g TlVMTDsKIAkJcmV0dXJuIChlcnJvcik7CiAJfQorCW1faGVhZCA9ICptX2hlYWRwOwogCiAJLyog ODI1NzUgbmVlZHMgdGhlIHF1ZXVlIGluZGV4IGFkZGVkICovCiAJaWYgKGFkYXB0ZXItPmh3Lm1h Yy50eXBlID09IGUxMDAwXzgyNTc1KQpAQCAtMzcwMSw2MCArMzcxNCwzOSBAQAogICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCiBzdGF0aWMgaW50CiBpZ2JfdHNvX3NldHVwKHN0cnVjdCB0eF9yaW5nICp0eHIsIHN0 cnVjdCBtYnVmICptcCwKLSAgICB1MzIgKmNtZF90eXBlX2xlbiwgdTMyICpvbGluZm9fc3RhdHVz KQorICAgIHUzMiAqY21kX3R5cGVfbGVuLCB1MzIgKm9saW5mb19zdGF0dXMsIHN0cnVjdCBpZ2Jf cGt0X2luZm8gKnBrdCkKIHsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHR4ci0+YWRhcHRl cjsKIAlzdHJ1Y3QgZTEwMDBfYWR2X3R4X2NvbnRleHRfZGVzYyAqVFhEOwogCXUzMiB2bGFuX21h Y2lwX2xlbnMgPSAwLCB0eXBlX3R1Y21kX21saGwgPSAwOwogCXUzMiBtc3NfbDRsZW5faWR4ID0g MCwgcGF5bGVuOwotCXUxNiB2dGFnID0gMCwgZWhfdHlwZTsKLQlpbnQgY3R4ZCwgZWhkcmxlbiwg aXBfaGxlbiwgdGNwX2hsZW47Ci0Jc3RydWN0IGV0aGVyX3ZsYW5faGVhZGVyICplaDsKKwl1MTYg dnRhZyA9IDA7CisJaW50IGN0eGQsIHRjcF9obGVuOwogI2lmZGVmIElORVQ2CiAJc3RydWN0IGlw Nl9oZHIgKmlwNjsKICNlbmRpZgogI2lmZGVmIElORVQKIAlzdHJ1Y3QgaXAgKmlwOwogI2VuZGlm Ci0Jc3RydWN0IHRjcGhkciAqdGg7Ci0KLQotCS8qCi0JICogRGV0ZXJtaW5lIHdoZXJlIGZyYW1l IHBheWxvYWQgc3RhcnRzLgotCSAqIEp1bXAgb3ZlciB2bGFuIGhlYWRlcnMgaWYgYWxyZWFkeSBw cmVzZW50Ci0JICovCi0JZWggPSBtdG9kKG1wLCBzdHJ1Y3QgZXRoZXJfdmxhbl9oZWFkZXIgKik7 Ci0JaWYgKGVoLT5ldmxfZW5jYXBfcHJvdG8gPT0gaHRvbnMoRVRIRVJUWVBFX1ZMQU4pKSB7Ci0J CWVoZHJsZW4gPSBFVEhFUl9IRFJfTEVOICsgRVRIRVJfVkxBTl9FTkNBUF9MRU47Ci0JCWVoX3R5 cGUgPSBlaC0+ZXZsX3Byb3RvOwotCX0gZWxzZSB7Ci0JCWVoZHJsZW4gPSBFVEhFUl9IRFJfTEVO OwotCQllaF90eXBlID0gZWgtPmV2bF9lbmNhcF9wcm90bzsKLQl9CiAKLQlzd2l0Y2ggKG50b2hz KGVoX3R5cGUpKSB7CisJc3dpdGNoIChwa3QtPmV0eXBlKSB7CiAjaWZkZWYgSU5FVDYKIAljYXNl IEVUSEVSVFlQRV9JUFY2OgotCQlpcDYgPSAoc3RydWN0IGlwNl9oZHIgKikobXAtPm1fZGF0YSAr IGVoZHJsZW4pOworCQlpcDYgPSBwa3QtPmlwNjsKIAkJLyogWFhYLUJaIEZvciBub3cgd2UgZG8g bm90IHByZXRlbmQgdG8gc3VwcG9ydCBleHQuIGhkcnMuICovCiAJCWlmIChpcDYtPmlwNl9ueHQg IT0gSVBQUk9UT19UQ1ApCiAJCQlyZXR1cm4gKEVOWElPKTsKLQkJaXBfaGxlbiA9IHNpemVvZihz dHJ1Y3QgaXA2X2hkcik7Ci0JCWlwNiA9IChzdHJ1Y3QgaXA2X2hkciAqKShtcC0+bV9kYXRhICsg ZWhkcmxlbik7Ci0JCXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoKGNhZGRyX3QpaXA2ICsgaXBfaGxl bik7Ci0JCXRoLT50aF9zdW0gPSBpbjZfY2tzdW1fcHNldWRvKGlwNiwgMCwgSVBQUk9UT19UQ1As IDApOworCQlwa3QtPnRoLT50aF9zdW0gPSBpbjZfY2tzdW1fcHNldWRvKGlwNiwgMCwgSVBQUk9U T19UQ1AsIDApOwogCQl0eXBlX3R1Y21kX21saGwgfD0gRTEwMDBfQURWVFhEX1RVQ01EX0lQVjY7 CiAJCWJyZWFrOwogI2VuZGlmCiAjaWZkZWYgSU5FVAogCWNhc2UgRVRIRVJUWVBFX0lQOgotCQlp cCA9IChzdHJ1Y3QgaXAgKikobXAtPm1fZGF0YSArIGVoZHJsZW4pOworCQlpcCA9IHBrdC0+aXA7 CiAJCWlmIChpcC0+aXBfcCAhPSBJUFBST1RPX1RDUCkKIAkJCXJldHVybiAoRU5YSU8pOwogCQlp cC0+aXBfc3VtID0gMDsKLQkJaXBfaGxlbiA9IGlwLT5pcF9obCA8PCAyOwotCQl0aCA9IChzdHJ1 Y3QgdGNwaGRyICopKChjYWRkcl90KWlwICsgaXBfaGxlbik7Ci0JCXRoLT50aF9zdW0gPSBpbl9w c2V1ZG8oaXAtPmlwX3NyYy5zX2FkZHIsCisJCXBrdC0+dGgtPnRoX3N1bSA9IGluX3BzZXVkbyhp cC0+aXBfc3JjLnNfYWRkciwKIAkJICAgIGlwLT5pcF9kc3Quc19hZGRyLCBodG9ucyhJUFBST1RP X1RDUCkpOwogCQl0eXBlX3R1Y21kX21saGwgfD0gRTEwMDBfQURWVFhEX1RVQ01EX0lQVjQ7CiAJ CS8qIFRlbGwgdHJhbnNtaXQgZGVzYyB0byBhbHNvIGRvIElQdjQgY2hlY2tzdW0uICovCkBAIC0z NzYzLDE3ICszNzU1LDE3IEBACiAjZW5kaWYKIAlkZWZhdWx0OgogCQlwYW5pYygiJXM6IENTVU1f VFNPIGJ1dCBubyBzdXBwb3J0ZWQgSVAgdmVyc2lvbiAoMHglMDR4KSIsCi0JCSAgICBfX2Z1bmNf XywgbnRvaHMoZWhfdHlwZSkpOworCQkgICAgX19mdW5jX18sIHBrdC0+ZXR5cGUpOwogCQlicmVh azsKIAl9CiAKIAljdHhkID0gdHhyLT5uZXh0X2F2YWlsX2Rlc2M7CiAJVFhEID0gKHN0cnVjdCBl MTAwMF9hZHZfdHhfY29udGV4dF9kZXNjICopICZ0eHItPnR4X2Jhc2VbY3R4ZF07CiAKLQl0Y3Bf aGxlbiA9IHRoLT50aF9vZmYgPDwgMjsKKwl0Y3BfaGxlbiA9IHBrdC0+dGgtPnRoX29mZiA8PCAy OwogCiAJLyogVGhpcyBpcyB1c2VkIGluIHRoZSB0cmFuc21pdCBkZXNjIGluIGVuY2FwICovCi0J cGF5bGVuID0gbXAtPm1fcGt0aGRyLmxlbiAtIGVoZHJsZW4gLSBpcF9obGVuIC0gdGNwX2hsZW47 CisJcGF5bGVuID0gbXAtPm1fcGt0aGRyLmxlbiAtIHBrdC0+ZWhkcmxlbiAtIHBrdC0+aXBfaGxl biAtIHRjcF9obGVuOwogCiAJLyogVkxBTiBNQUNMRU4gSVBMRU4gKi8KIAlpZiAobXAtPm1fZmxh Z3MgJiBNX1ZMQU5UQUcpIHsKQEAgLTM3ODEsOCArMzc3Myw4IEBACiAgICAgICAgICAgICAgICAg dmxhbl9tYWNpcF9sZW5zIHw9ICh2dGFnIDw8IEUxMDAwX0FEVlRYRF9WTEFOX1NISUZUKTsKIAl9 CiAKLQl2bGFuX21hY2lwX2xlbnMgfD0gZWhkcmxlbiA8PCBFMTAwMF9BRFZUWERfTUFDTEVOX1NI SUZUOwotCXZsYW5fbWFjaXBfbGVucyB8PSBpcF9obGVuOworCXZsYW5fbWFjaXBfbGVucyB8PSBw a3QtPmVoZHJsZW4gPDwgRTEwMDBfQURWVFhEX01BQ0xFTl9TSElGVDsKKwl2bGFuX21hY2lwX2xl bnMgfD0gcGt0LT5pcF9obGVuOwogCVRYRC0+dmxhbl9tYWNpcF9sZW5zID0gaHRvbGUzMih2bGFu X21hY2lwX2xlbnMpOwogCiAJLyogQURWIERUWVBFIFRVQ01EICovCkBAIC0zODIwLDE2ICszODEy LDEzIEBACiAKIHN0YXRpYyBpbnQKIGlnYl90eF9jdHhfc2V0dXAoc3RydWN0IHR4X3JpbmcgKnR4 ciwgc3RydWN0IG1idWYgKm1wLAotICAgIHUzMiAqY21kX3R5cGVfbGVuLCB1MzIgKm9saW5mb19z dGF0dXMpCisgICAgdTMyICpjbWRfdHlwZV9sZW4sIHUzMiAqb2xpbmZvX3N0YXR1cywgc3RydWN0 IGlnYl9wa3RfaW5mbyAqcGt0KQogewogCXN0cnVjdCBlMTAwMF9hZHZfdHhfY29udGV4dF9kZXNj ICpUWEQ7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSB0eHItPmFkYXB0ZXI7Ci0Jc3RydWN0 IGV0aGVyX3ZsYW5faGVhZGVyICplaDsKIAlzdHJ1Y3QgaXAgKmlwOwogCXN0cnVjdCBpcDZfaGRy ICppcDY7CiAJdTMyIHZsYW5fbWFjaXBfbGVucyA9IDAsIHR5cGVfdHVjbWRfbWxobCA9IDAsIG1z c19sNGxlbl9pZHggPSAwOwotCWludAllaGRybGVuLCBpcF9obGVuID0gMDsKLQl1MTYJZXR5cGU7 CiAJdTgJaXBwcm90byA9IDA7CiAJaW50CW9mZmxvYWQgPSBUUlVFOwogCWludAljdHhkID0gdHhy LT5uZXh0X2F2YWlsX2Rlc2M7CkBAIC0zODM3LDcgKzM4MjYsNyBAQAogCiAJLyogRmlyc3QgY2hl Y2sgaWYgVFNPIGlzIHRvIGJlIHVzZWQgKi8KIAlpZiAobXAtPm1fcGt0aGRyLmNzdW1fZmxhZ3Mg JiBDU1VNX1RTTykKLQkJcmV0dXJuIChpZ2JfdHNvX3NldHVwKHR4ciwgbXAsIGNtZF90eXBlX2xl biwgb2xpbmZvX3N0YXR1cykpOworCQlyZXR1cm4gKGlnYl90c29fc2V0dXAodHhyLCBtcCwgY21k X3R5cGVfbGVuLCBvbGluZm9fc3RhdHVzLCBwa3QpKTsKIAogCWlmICgobXAtPm1fcGt0aGRyLmNz dW1fZmxhZ3MgJiBDU1VNX09GRkxPQUQpID09IDApCiAJCW9mZmxvYWQgPSBGQUxTRTsKQEAgLTM4 NTksMzMgKzM4NDgsMTcgQEAKIAl9IGVsc2UgaWYgKG9mZmxvYWQgPT0gRkFMU0UpIC8qIC4uLiBu byBvZmZsb2FkIHRvIGRvICovCiAJCXJldHVybiAoMCk7CiAKLQkvKgotCSAqIERldGVybWluZSB3 aGVyZSBmcmFtZSBwYXlsb2FkIHN0YXJ0cy4KLQkgKiBKdW1wIG92ZXIgdmxhbiBoZWFkZXJzIGlm IGFscmVhZHkgcHJlc2VudCwKLQkgKiBoZWxwZnVsIGZvciBRaW5RIHRvby4KLQkgKi8KLQllaCA9 IG10b2QobXAsIHN0cnVjdCBldGhlcl92bGFuX2hlYWRlciAqKTsKLQlpZiAoZWgtPmV2bF9lbmNh cF9wcm90byA9PSBodG9ucyhFVEhFUlRZUEVfVkxBTikpIHsKLQkJZXR5cGUgPSBudG9ocyhlaC0+ ZXZsX3Byb3RvKTsKLQkJZWhkcmxlbiA9IEVUSEVSX0hEUl9MRU4gKyBFVEhFUl9WTEFOX0VOQ0FQ X0xFTjsKLQl9IGVsc2UgewotCQlldHlwZSA9IG50b2hzKGVoLT5ldmxfZW5jYXBfcHJvdG8pOwot CQllaGRybGVuID0gRVRIRVJfSERSX0xFTjsKLQl9Ci0KIAkvKiBTZXQgdGhlIGV0aGVyIGhlYWRl ciBsZW5ndGggKi8KLQl2bGFuX21hY2lwX2xlbnMgfD0gZWhkcmxlbiA8PCBFMTAwMF9BRFZUWERf TUFDTEVOX1NISUZUOworCXZsYW5fbWFjaXBfbGVucyB8PSBwa3QtPmVoZHJsZW4gPDwgRTEwMDBf QURWVFhEX01BQ0xFTl9TSElGVDsKIAotCXN3aXRjaCAoZXR5cGUpIHsKKwlzd2l0Y2ggKHBrdC0+ ZXR5cGUpIHsKIAkJY2FzZSBFVEhFUlRZUEVfSVA6Ci0JCQlpcCA9IChzdHJ1Y3QgaXAgKikobXAt Pm1fZGF0YSArIGVoZHJsZW4pOwotCQkJaXBfaGxlbiA9IGlwLT5pcF9obCA8PCAyOworCQkJaXAg PSBwa3QtPmlwOwogCQkJaXBwcm90byA9IGlwLT5pcF9wOwogCQkJdHlwZV90dWNtZF9tbGhsIHw9 IEUxMDAwX0FEVlRYRF9UVUNNRF9JUFY0OwogCQkJYnJlYWs7CiAJCWNhc2UgRVRIRVJUWVBFX0lQ VjY6Ci0JCQlpcDYgPSAoc3RydWN0IGlwNl9oZHIgKikobXAtPm1fZGF0YSArIGVoZHJsZW4pOwot CQkJaXBfaGxlbiA9IHNpemVvZihzdHJ1Y3QgaXA2X2hkcik7CisJCQlpcDYgPSBwa3QtPmlwNjsK IAkJCS8qIFhYWC1CWiB0aGlzIHdpbGwgZ28gYmFkbHkgaW4gY2FzZSBvZiBleHQgaGRycy4gKi8K IAkJCWlwcHJvdG8gPSBpcDYtPmlwNl9ueHQ7CiAJCQl0eXBlX3R1Y21kX21saGwgfD0gRTEwMDBf QURWVFhEX1RVQ01EX0lQVjY7CkBAIC0zODk1LDcgKzM4NjgsNyBAQAogCQkJYnJlYWs7CiAJfQog Ci0Jdmxhbl9tYWNpcF9sZW5zIHw9IGlwX2hsZW47CisJdmxhbl9tYWNpcF9sZW5zIHw9IHBrdC0+ aXBfaGxlbjsKIAl0eXBlX3R1Y21kX21saGwgfD0gRTEwMDBfQURWVFhEX0RDTURfREVYVCB8IEUx MDAwX0FEVlRYRF9EVFlQX0NUWFQ7CiAKIAlzd2l0Y2ggKGlwcHJvdG8pIHsKQEAgLTM5NDEsNiAr MzkxNCwxNjcgQEAKICAgICAgICAgcmV0dXJuICgwKTsKIH0KIAorLyoKKyAqIEludGVsIHJlY29t bWVuZHMgZW50aXJlIElQL1RDUCBoZWFkZXIgbGVuZ3RoIHJlc2lkZSBpbiBhIHNpbmdsZQorICog YnVmZmVyLiBJZiBtdWx0aXBsZSBkZXNjcmlwdG9ycyBhcmUgdXNlZCB0byBkZXNjcmliZSB0aGUg SVAgYW5kCisgKiBUQ1AgaGVhZGVyLCBlYWNoIGRlc2NyaXB0b3Igc2hvdWxkIGRlc2NyaWJlIG9u ZSBvciBtb3JlCisgKiBjb21wbGV0ZSBoZWFkZXJzOyBkZXNjcmlwdG9ycyByZWZlcmVuY2luZyBv bmx5IHBhcnRzIG9mIGhlYWRlcnMKKyAqIGFyZSBub3Qgc3VwcG9ydGVkLiBJZiBhbGwgbGF5ZXIg aGVhZGVycyBhcmUgbm90IGNvYWxlc2NlZCBpbnRvCisgKiBhIHNpbmdsZSBidWZmZXIsIGVhY2gg YnVmZmVyIHNob3VsZCBub3QgY3Jvc3MgYSA0S0IgYm91bmRhcnksCisgKiBvciBiZSBsYXJnZXIg dGhhbiB0aGUgbWF4aW11bSByZWFkIHJlcXVlc3Qgc2l6ZS4KKyAqCisgKiBDb250cm9sbGVyIGFs c28gcmVxdWlyZXMgbW9kaWZpbmcgSVAvVENQIGhlYWRlciB0byBtYWtlIFRTTyB3b3JrCisgKiBz byB3ZSBmaXJzdGx5IGdldCBhIHdyaXRhYmxlIG1idWYgY2hhaW4gdGhlbiBjb2FsZXNjZSBldGhl cm5ldC8KKyAqIElQL1RDUCBoZWFkZXIgaW50byBhIHNpbmdsZSBidWZmZXIgdG8gbWVldCB0aGUg cmVxdWlyZW1lbnQgb2YKKyAqIGNvbnRyb2xsZXIuIFRoaXMgYWxzbyBzaW1wbGlmaWVzIElQL1RD UC9VRFAgY2hlY2tzdW0gb2ZmbG9hZGluZworICogd2hpY2ggYWxzbyBoYXMgc2ltaWxpYXIgcmVz dHJpY3Rpb25zLgorICovCitzdGF0aWMgaW50CitpZ2JfcHVsbHVwX2hlYWRlcnMoc3RydWN0IG1i dWYgKiptX2hlYWRwLCB1MzIgY3N1bV9mbGFncywgc3RydWN0IGlnYl9wa3RfaW5mbyAqcGt0KQor eworCXN0cnVjdCBtYnVmIAkJKm1faGVhZCA9ICptX2hlYWRwOworCXN0cnVjdCBldGhlcl92bGFu X2hlYWRlciAqZWg7CisJdTE2IGV0eXBlOworCXUzMiBlaGRybGVuLCBpcF9obGVuLCBkb190c28s IHBvZmY7CisjaWZkZWYgSU5FVAorCXN0cnVjdCBpcAkJKmlwOworI2VuZGlmCisjaWZkZWYgSU5F VDYKKwlzdHJ1Y3QgaXA2X2hkcgkJKmlwNjsKKyNlbmRpZgorCXN0cnVjdCB0Y3BoZHIJCSp0aDsK KworCWRvX3RzbyA9ICgoY3N1bV9mbGFncyAmIENTVU1fVFNPKSAhPSAwKTsKKwliemVybyhwa3Qs IHNpemVvZihzdHJ1Y3QgaWdiX3BrdF9pbmZvKSk7CisKKwkvKgorCSAqIERldGVybWluZSB3aGVy ZSBmcmFtZSBwYXlsb2FkIHN0YXJ0cy4KKwkgKiBKdW1wIG92ZXIgdmxhbiBoZWFkZXJzIGlmIGFs cmVhZHkgcHJlc2VudCwKKwkgKiBoZWxwZnVsIGZvciBRaW5RIHRvby4KKwkgKi8KKwllaCA9IG10 b2QobV9oZWFkLCBzdHJ1Y3QgZXRoZXJfdmxhbl9oZWFkZXIgKik7CisJaWYgKGVoLT5ldmxfZW5j YXBfcHJvdG8gPT0gaHRvbnMoRVRIRVJUWVBFX1ZMQU4pKSB7CisJCWV0eXBlID0gbnRvaHMoZWgt PmV2bF9wcm90byk7CisJCWVoZHJsZW4gPSBFVEhFUl9IRFJfTEVOICsgRVRIRVJfVkxBTl9FTkNB UF9MRU47CisJfSBlbHNlIHsKKwkJZXR5cGUgPSBudG9ocyhlaC0+ZXZsX2VuY2FwX3Byb3RvKTsK KwkJZWhkcmxlbiA9IEVUSEVSX0hEUl9MRU47CisJfQorCQorCS8qIG1ha2UgbWJ1ZiBjaGFpbiB3 cml0YWJsZSAqLworCWlmIChtX2hlYWQtPm1fbmV4dCAhPSBOVUxMKSB7CisJCWlmIChNX1dSSVRB QkxFKCptX2hlYWRwKSA9PSAwKSB7CisJCQltX2hlYWQgPSBtX2R1cCgqbV9oZWFkcCwgTV9OT1dB SVQpOworCQkJbV9mcmVlbSgqbV9oZWFkcCk7CisJCQlpZiAobV9oZWFkID09IE5VTEwpIHsKKwkJ CQkqbV9oZWFkcCA9IE5VTEw7CisJCQkJcmV0dXJuIChFTk9CVUZTKTsKKwkJCX0KKwkJCSptX2hl YWRwID0gbV9oZWFkOworCQl9CisJfQorCisJLyogcHVsbCB1cCBldGhlcm5ldCBoZWFkZXIsIGFj Y291bnRzIGZvciB2bGFuIHRhZyAqLworCW1faGVhZCA9IG1fcHVsbHVwKG1faGVhZCwgZWhkcmxl bik7CisJaWYgKG1faGVhZCA9PSBOVUxMKSB7CisJCSptX2hlYWRwID0gTlVMTDsKKwkJcmV0dXJu IChFTk9CVUZTKTsKKwl9CisKKwkvKiBwdWxsIHVwIGlwIGFuZCBnZXQgcG9pbnRlcnMgKi8KKwlz d2l0Y2ggKGV0eXBlKSB7CisjaWZkZWYgSU5FVAorCQljYXNlIEVUSEVSVFlQRV9JUDoKKwkJCW1f aGVhZCA9IG1fcHVsbHVwKG1faGVhZCwgZWhkcmxlbiArIHNpemVvZihzdHJ1Y3QgaXApKTsKKwkJ CWlwID0gKHN0cnVjdCBpcCAqKShtdG9kKG1faGVhZCwgY2hhciAqKSArIGVoZHJsZW4pOworCQkJ aXBfaGxlbiA9IGlwLT5pcF9obCA8PCAyOworCQkJcG9mZiA9IGVoZHJsZW4gKyBpcF9obGVuOwor CQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNlIEVUSEVSVFlQRV9JUFY2Ogor CQkJbV9oZWFkID0gbV9wdWxsdXAobV9oZWFkLCBlaGRybGVuICsgc2l6ZW9mKHN0cnVjdCBpcDZf aGRyKSk7CisJCQlpcDYgPSAoc3RydWN0IGlwNl9oZHIgKikobXRvZChtX2hlYWQsIGNoYXIgKikg KyBlaGRybGVuKTsKKwkJCWlwX2hsZW4gPSBzaXplb2Yoc3RydWN0IGlwNl9oZHIpOworCQkJcG9m ZiA9IGVoZHJsZW4gKyBpcF9obGVuOworCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJ CWJyZWFrOworCX0KKworCWlmIChtX2hlYWQgPT0gTlVMTCkgeworCQkqbV9oZWFkcCA9IE5VTEw7 CisJCXJldHVybiAoRU5PQlVGUyk7CisJfQorCisJaWYgKGRvX3RzbykgeworCQkvKiBwdWxsIHVw IFRDUCBoZWFkZXIgKi8KKwkJbV9oZWFkID0gbV9wdWxsdXAobV9oZWFkLCBwb2ZmICsgc2l6ZW9m KHN0cnVjdCB0Y3BoZHIpKTsKKwkJaWYgKG1faGVhZCA9PSBOVUxMKSB7CisJCQkqbV9oZWFkcCA9 IE5VTEw7CisJCQlyZXR1cm4gKEVOT0JVRlMpOworCQl9CisJCXRoID0gKHN0cnVjdCB0Y3BoZHIg KikobXRvZChtX2hlYWQsIGNoYXIgKikgKyBwb2ZmKTsKKwkJLyoKKwkJICogVFNPIHdvcmthcm91 bmQ6CisJCSAqICAgcHVsbCA0IG1vcmUgYnl0ZXMgb2YgZGF0YSBpbnRvIGl0LgorCQkgKi8KKwkJ bV9oZWFkID0gbV9wdWxsdXAobV9oZWFkLCBwb2ZmICsgKHRoLT50aF9vZmYgPDwgMikgKyA0KTsK KwkJaWYgKG1faGVhZCA9PSBOVUxMKSB7CisJCQkqbV9oZWFkcCA9IE5VTEw7CisJCQlyZXR1cm4g KEVOT0JVRlMpOworCQl9CisJCXBrdC0+dGggPSAoc3RydWN0IHRjcGhkciAqKShtdG9kKG1faGVh ZCwgY2hhciAqKSArIHBvZmYpOworCX0gZWxzZSBpZiAoY3N1bV9mbGFncyAmIENTVU1fVENQKSB7 CisJCW1faGVhZCA9IG1fcHVsbHVwKG1faGVhZCwgcG9mZiArIHNpemVvZihzdHJ1Y3QgdGNwaGRy KSk7CisJCWlmIChtX2hlYWQgPT0gTlVMTCkgeworCQkJKm1faGVhZHAgPSBOVUxMOworCQkJcmV0 dXJuIChFTk9CVUZTKTsKKwkJfQorCQl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKG10b2QobV9oZWFk LCBjaGFyICopICsgcG9mZik7CisJCW1faGVhZCA9IG1fcHVsbHVwKG1faGVhZCwgcG9mZiArICh0 aC0+dGhfb2ZmIDw8IDIpKTsKKwkJaWYgKG1faGVhZCA9PSBOVUxMKSB7CisJCQkqbV9oZWFkcCA9 IE5VTEw7CisJCQlyZXR1cm4gKEVOT0JVRlMpOworCQl9CisJCXBrdC0+dGggPSAoc3RydWN0IHRj cGhkciAqKShtdG9kKG1faGVhZCwgY2hhciAqKSArIHBvZmYpOworCX0gZWxzZSBpZiAoY3N1bV9m bGFncyAmIENTVU1fVURQKSB7CisJCW1faGVhZCA9IG1fcHVsbHVwKG1faGVhZCwgcG9mZiArIHNp emVvZihzdHJ1Y3QgdWRwaGRyKSk7CisJCWlmIChtX2hlYWQgPT0gTlVMTCkgeworCQkJKm1faGVh ZHAgPSBOVUxMOworCQkJcmV0dXJuIChFTk9CVUZTKTsKKwkJfQorCX0KKworCS8qIGZpbmFsIGNh cHR1cmUgb2YgaXAgcG9pbnRlciAqLworCXN3aXRjaCAoZXR5cGUpIHsKKyNpZmRlZiBJTkVUCisJ CWNhc2UgRVRIRVJUWVBFX0lQOgorCQkJcGt0LT5pcCA9IChzdHJ1Y3QgaXAgKikobXRvZChtX2hl YWQsIGNoYXIgKikgKyBlaGRybGVuKTsKKwkJCXBrdC0+aXA2ID0gTlVMTDsKKwkJCWJyZWFrOwor I2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJY2FzZSBFVEhFUlRZUEVfSVBWNjoKKwkJCXBrdC0+aXA2 ID0gKHN0cnVjdCBpcDZfaGRyICopKG10b2QobV9oZWFkLCBjaGFyICopICsgZWhkcmxlbik7CisJ CQlwa3QtPmlwID0gTlVMTDsKKwkJCWJyZWFrOworI2VuZGlmCisJCWRlZmF1bHQ6CisJCQlicmVh azsKKwl9CisJKm1faGVhZHAgPSBtX2hlYWQ7CisKKwkvKiByZXR1cm4gdGhlc2UgY2FsY3VsYXRl ZCBwb2ludGVycy92YWx1ZXMgZm9yIHJlLXVzZSAqLworCXBrdC0+ZWhkcmxlbiA9IGVoZHJsZW47 CisJcGt0LT5ldHlwZSA9IGV0eXBlOworCXBrdC0+aXBfaGxlbiA9IGlwX2hsZW47CisKKwlyZXR1 cm4gKDApOworfQorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogIEV4YW1pbmUgZWFjaCB0eF9i dWZmZXIgaW4gdGhlIHVzZWQgcXVldWUuIElmIHRoZSBoYXJkd2FyZSBpcyBkb25lCmRpZmYgLU5h dXIgaGVhZC9pZl9pZ2IuaCBwYXRjaC9pZl9pZ2IuaAotLS0gaGVhZC9pZl9pZ2IuaAkyMDE0LTAx LTE0IDE0OjA4OjA0LjAwMDAwMDAwMCAtMDgwMAorKysgcGF0Y2gvaWZfaWdiLmgJMjAxNC0wMS0x NCAxNDowNzowMS4wMDAwMDAwMDAgLTA4MDAKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCiAKLSAgQ29weXJpZ2h0IChjKSAyMDAxLTIwMTMsIEludGVsIENvcnBvcmF0aW9u IAorICBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24gCiAgIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCiAgIAogICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgCkBAIC0yMzcsOSArMjM3LDkgQEAKIAog LyogT2ZmbG9hZCBiaXRzIGluIG1idWYgZmxhZyAqLwogI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49 IDgwMDAwMAotI2RlZmluZSBDU1VNX09GRkxPQUQJCShDU1VNX0lQfENTVU1fVENQfENTVU1fVURQ fENTVU1fU0NUUCkKKyNkZWZpbmUgQ1NVTV9PRkZMT0FECQkoQ1NVTV9JUHxDU1VNX1RDUHxDU1VN X1VEUHxDU1VNX1RTT3xDU1VNX1NDVFApCiAjZWxzZQotI2RlZmluZSBDU1VNX09GRkxPQUQJCShD U1VNX0lQfENTVU1fVENQfENTVU1fVURQKQorI2RlZmluZSBDU1VNX09GRkxPQUQJCShDU1VNX0lQ fENTVU1fVENQfENTVU1fVURQfENTVU1fVFNPKQogI2VuZGlmCiAKIC8qIERlZmluZSB0aGUgc3Rh cnRpbmcgSW50ZXJydXB0IHJhdGUgcGVyIFF1ZXVlICovCkBAIC01MTMsNiArNTEzLDE1IEBACiAJ YnVzX2RtYW1hcF90CXBtYXA7CS8qIGJ1c19kbWEgbWFwIGZvciBwYWNrZXQgKi8KIH07CiAKK3N0 cnVjdCBpZ2JfcGt0X2luZm8geworCXUxNgkJZXR5cGU7CisJdTMyCQllaGRybGVuOworCXUzMgkJ aXBfaGxlbjsKKwlzdHJ1Y3QgaXAJKmlwOworCXN0cnVjdCBpcDZfaGRyCSppcDY7CisJc3RydWN0 IHRjcGhkcgkqdGg7Cit9OworCiAvKgogKiogRmluZCB0aGUgbnVtYmVyIG9mIHVucmVmcmVzaGVk IFJYIGRlc2NyaXB0b3JzCiAqLwo= --001a1134b612f2665504eff5a3dc--