From nobody@FreeBSD.org  Fri Mar  2 13:49:19 2012
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52])
	by hub.freebsd.org (Postfix) with ESMTP id 49B9F106564A
	for <freebsd-gnats-submit@FreeBSD.org>; Fri,  2 Mar 2012 13:49:19 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22])
	by mx1.freebsd.org (Postfix) with ESMTP id 33B068FC19
	for <freebsd-gnats-submit@FreeBSD.org>; Fri,  2 Mar 2012 13:49:19 +0000 (UTC)
Received: from red.freebsd.org (localhost [127.0.0.1])
	by red.freebsd.org (8.14.4/8.14.4) with ESMTP id q22DnJZA002269
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 2 Mar 2012 13:49:19 GMT
	(envelope-from nobody@red.freebsd.org)
Received: (from nobody@localhost)
	by red.freebsd.org (8.14.4/8.14.4/Submit) id q22DnIaS002268;
	Fri, 2 Mar 2012 13:49:18 GMT
	(envelope-from nobody)
Message-Id: <201203021349.q22DnIaS002268@red.freebsd.org>
Date: Fri, 2 Mar 2012 13:49:18 GMT
From: Vladislav Movchan <vladislav.movchan@gmail.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: [ndis][panic][patch] Unregistered use of FPU in kernel on amd64
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         165622
>Category:       kern
>Synopsis:       [ndis][panic][patch] Unregistered use of FPU in kernel on amd64
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-net
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Mar 02 13:50:09 UTC 2012
>Closed-Date:    
>Last-Modified:  Tue Jan 28 21:00:00 UTC 2014
>Originator:     Vladislav Movchan
>Release:        FreeBSD 10.0-CURRENT
>Organization:
>Environment:
FreeBSD starlight 10.0-CURRENT FreeBSD 10.0-CURRENT #0 r232379: Fri Mar  2 13:24:25 EET 2012     root@starlight:/usr/obj/usr/src/sys/Mephistopheles  amd64
>Description:
Some miniport drivers (windows NIC drivers) could use FPU in kernel what cause "Unregistered use of FPU in kernel" panic.

I've seen this only in amd64 case; i386 seems to be not affected.
Same is mentioned in this two messages:
http://lists.freebsd.org/pipermail/svn-src-all/2010-March/021770.html
http://lists.freebsd.org/pipermail/svn-src-all/2010-March/021773.html

Point when panic occurs depends on the driver. In my case it happening during the first attempt to transmit a packet.


Panic message:
panic: Unregistered use of FPU in kernel
cpuid = 3
KDB: stack backtrace:
db_trace_self_wrapper() at db_trace_self_wrapper+0x2a
kdb_backtrace() at kdb_backtrace+0x37
panic() at panic+0x1cd
trap() at trap+0x71f
calltrap() at calltrap+0x8
--- trap 0x16, rip = 0xffffffff83c37e0e, rsp = 0xffffff80d116d7c0, rbp = 0xffffff80075df520 ---
__stop_set_sysinit_set() at __stop_set_sysinit_set+0xe6ee
dmapbase() at 0xfffffe0040fb5180
(null)() at 0xffffff80075df520
dmapbase() at 0xfffffe0040f83d00
dmapbase() at 0xfffffe0040f83e00
dmapbase() at 0xfffffe0040f8b080
dmapbase() at 0xfffffe0040f8b180
dmapbase() at 0xfffffe0040f8b280
..
dmapbase() at 0xfffffe0040fb4600
dmapbase() at 0xfffffe0040fb4700
dmapbase() at 0xfffffe0040fb4800
dmapbase() at 0xfffffe0040fb4900
dmapbase() at 0xfffffe0040fb4a00

Backtrace:
#0  doadump (textdump=-787033584) at /usr/src/sys/kern/kern_shutdown.c:268
268             if (textdump && textdump_pending) {
(kgdb) #0  doadump (textdump=-787033584) at /usr/src/sys/kern/kern_shutdown.c:268
#1  0xffffffff802de36c in db_fncall (dummy1=Variable "dummy1" is not available.
)
    at /usr/src/sys/ddb/db_command.c:573
#2  0xffffffff802de6a1 in db_command (last_cmdp=0xffffffff80dcd560, cmd_table=Variable "cmd_table" is not available.

) at /usr/src/sys/ddb/db_command.c:449
#3  0xffffffff802de8f0 in db_command_loop ()
    at /usr/src/sys/ddb/db_command.c:502
#4  0xffffffff802e0ad4 in db_trap (type=Variable "type" is not available.
) at /usr/src/sys/ddb/db_main.c:229
#5  0xffffffff806d3bb1 in kdb_trap (type=3, code=0, tf=0xffffff80d116d440)
    at /usr/src/sys/kern/subr_kdb.c:629
#6  0xffffffff80942f68 in trap (frame=0xffffff80d116d440)
    at /usr/src/sys/amd64/amd64/trap.c:591
#7  0xffffffff8092c1cf in calltrap ()
    at /usr/src/sys/amd64/amd64/exception.S:228
#8  0xffffffff806d36ab in kdb_enter (why=0xffffffff80a3fb16 "panic",
    msg=0x80 <Address 0x80 out of bounds>) at cpufunc.h:63
#9  0xffffffff8069aea6 in panic (fmt=Variable "fmt" is not available.
)
    at /usr/src/sys/kern/kern_shutdown.c:633
#10 0xffffffff809434ef in trap (frame=Variable "frame" is not available.
) at /usr/src/sys/amd64/amd64/trap.c:478
#11 0xffffffff8092c1cf in calltrap ()
    at /usr/src/sys/amd64/amd64/exception.S:228
#12 0xffffffff83c37e0e in ndis_Rtenic64_sys_drv_data_start ()
   from /boot/modules/Rtenic64_sys.ko
#13 0xffffffffffffffff in ?? ()
#14 0xffffffff80a40a28 in __func__.17200 ()
#15 0x0000074200000001 in ?? ()
#16 0xffffffff80a42b69 in link_elf_methods ()
#17 0xffffff80d116d800 in ?? ()
#18 0x0000000000000000 in ?? ()
#19 0x0000000000000000 in ?? ()
#20 0x0000000000000000 in ?? ()
..
#79 0x0000000000000000 in ?? ()
#80 0x0000000000000000 in ?? ()
#81 0x0000000000000000 in ?? ()
#82 0x0000000000000000 in ?? ()
#83 0xffffff80d116dad0 in ?? ()
#84 0xfffffe007b2b1348 in ?? ()
#85 0xffffff80075de000 in ?? ()
#86 0xfffffe0008410800 in ?? ()
#87 0xffffff80075deff0 in ?? ()
#88 0xffffff80075de000 in ?? ()
#89 0xffffff80075de000 in ?? ()
#90 0xffffff80d116dad0 in ?? ()
#91 0x0000000000000000 in ?? ()
#92 0xffffffff83c3d3ce in ndis_Rtenic64_sys_drv_data_start ()
   from /boot/modules/Rtenic64_sys.ko
#93 0xffffff80d1160000 in ?? ()
#94 0xfffffe0000000000 in ?? ()
#95 0xffffff8000000000 in ?? ()
#96 0xffffff80d116d900 in ?? ()
#97 0xffffffff83c3d284 in ndis_Rtenic64_sys_drv_data_start ()
   from /boot/modules/Rtenic64_sys.ko
#98 0xffffffff840e07b9 in x86_64_call1 ()
    at /usr/src/sys/modules/ndis/../../compat/ndis/winx64_wrap.S:130
#99 0xfffffe007b2b1328 in ?? ()
#100 0xfffffe007b154000 in ?? ()
#101 0xffffff80075deff8 in ?? ()
#102 0xfffffe007b2b1328 in ?? ()
#103 0xffffff80d116dad0 in ?? ()
#104 0xffffffff840d3e87 in ndis_intrhand (dpc=Variable "dpc" is not available.
)
at /usr/src/sys/modules/ndis/../../compat/ndis/subr_ndis.c:2234
Previous frame inner to this frame (corrupt stack?)
(kgdb)


Core/process which triggers this panic:
cpuid        = 3
dynamic pcpu = 0xffffff807f453100
curthread    = 0xfffffe0008bbd000: pid 1547 "Windows DPC 0"
curpcb       = 0xffffff80d116dd00
fpcurthread  = none
idlethread   = 0xfffffe00046b0480: tid 100006 "idle: cpu3"
curpmap      = 0xffffffff80df4c50
tssp         = 0xffffffff82609718
commontssp   = 0xffffffff82609718
rsp0         = 0xffffff80d116dd00
gs32p        = 0xffffffff82607870
ldt          = 0xffffffff826078b0
tss          = 0xffffffff826078a0
spin locks held:


>How-To-Repeat:
Use ndis on amd64:
kldload module created with ndisgen; assign ip address; try to ping something.

I believe not every miniport driver is affected, but drivers of both devices I've tested could trigger this panic.
>Fix:
Attached patch fixed this problem for me. Original version of this patch was written by Paul B Mahol (many thanks to Paul!)

Patch attached with submission follows:

Index: /usr/src/sys/compat/ndis/pe_var.h
===================================================================
--- /usr/src/sys/compat/ndis/pe_var.h	(revision 232379)
+++ /usr/src/sys/compat/ndis/pe_var.h	(working copy)
@@ -460,22 +460,30 @@
 extern uint64_t x86_64_call6(void *, uint64_t, uint64_t, uint64_t, uint64_t,
 	uint64_t, uint64_t);
 
+uint64_t _x86_64_call1(void *, uint64_t);
+uint64_t _x86_64_call2(void *, uint64_t, uint64_t);
+uint64_t _x86_64_call3(void *, uint64_t, uint64_t, uint64_t);
+uint64_t _x86_64_call4(void *, uint64_t, uint64_t, uint64_t, uint64_t);
+uint64_t _x86_64_call5(void *, uint64_t, uint64_t, uint64_t, uint64_t,
+    uint64_t);
+uint64_t _x86_64_call6(void *, uint64_t, uint64_t, uint64_t, uint64_t,
+    uint64_t, uint64_t);
 
 #define	MSCALL1(fn, a)						\
-	x86_64_call1((fn), (uint64_t)(a))
+	_x86_64_call1((fn), (uint64_t)(a))
 #define	MSCALL2(fn, a, b)					\
-	x86_64_call2((fn), (uint64_t)(a), (uint64_t)(b))
+	_x86_64_call2((fn), (uint64_t)(a), (uint64_t)(b))
 #define	MSCALL3(fn, a, b, c)					\
-	x86_64_call3((fn), (uint64_t)(a), (uint64_t)(b),		\
+	_x86_64_call3((fn), (uint64_t)(a), (uint64_t)(b),		\
 	(uint64_t)(c))
 #define	MSCALL4(fn, a, b, c, d)					\
-	x86_64_call4((fn), (uint64_t)(a), (uint64_t)(b),		\
+	_x86_64_call4((fn), (uint64_t)(a), (uint64_t)(b),		\
 	(uint64_t)(c), (uint64_t)(d))
 #define	MSCALL5(fn, a, b, c, d, e)				\
-	x86_64_call5((fn), (uint64_t)(a), (uint64_t)(b),		\
+	_x86_64_call5((fn), (uint64_t)(a), (uint64_t)(b),		\
 	(uint64_t)(c), (uint64_t)(d), (uint64_t)(e))
 #define	MSCALL6(fn, a, b, c, d, e, f)				\
-	x86_64_call6((fn), (uint64_t)(a), (uint64_t)(b),		\
+	_x86_64_call6((fn), (uint64_t)(a), (uint64_t)(b),		\
 	(uint64_t)(c), (uint64_t)(d), (uint64_t)(e), (uint64_t)(f))
 
 #endif /* __amd64__ */
Index: /usr/src/sys/compat/ndis/kern_windrv.c
===================================================================
--- /usr/src/sys/compat/ndis/kern_windrv.c	(revision 232379)
+++ /usr/src/sys/compat/ndis/kern_windrv.c	(working copy)
@@ -56,6 +56,10 @@
 #include <machine/segments.h>
 #endif
 
+#ifdef __amd64__
+#include <machine/fpu.h>
+#endif
+
 #include <dev/usb/usb.h>
 
 #include <compat/ndis/pe_var.h>
@@ -573,6 +577,109 @@
 	return (0);
 }
 
+uint64_t
+_x86_64_call1(void *fn, uint64_t a)
+{
+	struct fpu_kern_ctx *fpu_ctx_save;
+	uint64_t ret;
+
+	fpu_ctx_save = fpu_kern_alloc_ctx(FPU_KERN_NORMAL | FPU_KERN_NOWAIT);
+	if (fpu_ctx_save == NULL)
+		return (ENOMEM);
+	fpu_kern_enter(curthread, fpu_ctx_save, FPU_KERN_NORMAL);
+	ret = x86_64_call1(fn, a);
+	fpu_kern_leave(curthread, fpu_ctx_save);
+	fpu_kern_free_ctx(fpu_ctx_save);
+
+	return (ret);
+}
+
+uint64_t
+_x86_64_call2(void *fn, uint64_t a, uint64_t b)
+{
+	struct fpu_kern_ctx *fpu_ctx_save;
+	uint64_t ret;
+
+	fpu_ctx_save = fpu_kern_alloc_ctx(FPU_KERN_NORMAL | FPU_KERN_NOWAIT);
+	if (fpu_ctx_save == NULL)
+		return (ENOMEM);
+	fpu_kern_enter(curthread, fpu_ctx_save, FPU_KERN_NORMAL);
+	ret = x86_64_call2(fn, a, b);
+	fpu_kern_leave(curthread, fpu_ctx_save);
+	fpu_kern_free_ctx(fpu_ctx_save);
+
+	return (ret);
+}
+
+uint64_t
+_x86_64_call3(void *fn, uint64_t a, uint64_t b, uint64_t c)
+{
+	struct fpu_kern_ctx *fpu_ctx_save;
+	uint64_t ret;
+
+	fpu_ctx_save = fpu_kern_alloc_ctx(FPU_KERN_NORMAL | FPU_KERN_NOWAIT);
+	if (fpu_ctx_save == NULL)
+		return (ENOMEM);
+	fpu_kern_enter(curthread, fpu_ctx_save, FPU_KERN_NORMAL);
+	ret = x86_64_call3(fn, a, b, c);
+	fpu_kern_leave(curthread, fpu_ctx_save);
+	fpu_kern_free_ctx(fpu_ctx_save);
+
+	return (ret);
+}
+
+uint64_t
+_x86_64_call4(void *fn, uint64_t a, uint64_t b, uint64_t c, uint64_t d)
+{
+	struct fpu_kern_ctx *fpu_ctx_save;
+	uint64_t ret;
+
+	fpu_ctx_save = fpu_kern_alloc_ctx(FPU_KERN_NORMAL | FPU_KERN_NOWAIT);
+	if (fpu_ctx_save == NULL)
+		return (ENOMEM);
+	fpu_kern_enter(curthread, fpu_ctx_save, FPU_KERN_NORMAL);
+	ret = x86_64_call4(fn, a, b, c, d);
+	fpu_kern_leave(curthread, fpu_ctx_save);
+	fpu_kern_free_ctx(fpu_ctx_save);
+
+	return (ret);
+}
+
+uint64_t
+_x86_64_call5(void *fn, uint64_t a, uint64_t b, uint64_t c, uint64_t d,
+    uint64_t e)
+{
+	struct fpu_kern_ctx *fpu_ctx_save;
+	uint64_t ret;
+
+	fpu_ctx_save = fpu_kern_alloc_ctx(FPU_KERN_NORMAL | FPU_KERN_NOWAIT);
+	if (fpu_ctx_save == NULL)
+		return (ENOMEM);
+	fpu_kern_enter(curthread, fpu_ctx_save, FPU_KERN_NORMAL);
+	ret = x86_64_call5(fn, a, b, c, d, e);
+	fpu_kern_leave(curthread, fpu_ctx_save);
+	fpu_kern_free_ctx(fpu_ctx_save);
+
+	return (ret);
+}
+
+uint64_t
+_x86_64_call6(void *fn, uint64_t a, uint64_t b, uint64_t c, uint64_t d,
+    uint64_t e, uint64_t f)
+{
+	struct fpu_kern_ctx *fpu_ctx_save;
+	uint64_t ret;
+
+	fpu_ctx_save = fpu_kern_alloc_ctx(FPU_KERN_NORMAL | FPU_KERN_NOWAIT);
+	if (fpu_ctx_save == NULL)
+		return (ENOMEM);
+	fpu_kern_enter(curthread, fpu_ctx_save, FPU_KERN_NORMAL);
+	ret = x86_64_call6(fn, a, b, c, d, e, f);
+	fpu_kern_leave(curthread, fpu_ctx_save);
+	fpu_kern_free_ctx(fpu_ctx_save);
+
+	return (ret);
+}
 #ifdef __amd64__
 
 extern void	x86_64_wrap(void);


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->freebsd-net 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Mon Mar 12 07:26:21 UTC 2012 
Responsible-Changed-Why:  
Over to maintainer(s). 

http://www.freebsd.org/cgi/query-pr.cgi?pr=165622 

From: Vladislav Movchan <vladislav.movchan@gmail.com>
To: bug-followup@FreeBSD.org, vladislav.movchan@gmail.com
Cc:  
Subject: Re: kern/165622: [ndis][panic][patch] Unregistered use of FPU in
 kernel on amd64
Date: Mon, 12 Mar 2012 17:20:53 +0200

 --e89a8f6465adbf936e04bb0d4973
 Content-Type: text/plain; charset=ISO-8859-1
 
 I've reimplemented original patch to maintain cache of fpu_kern_ctx
 elements to reduce amount of allocations/deallocations done via
 fpu_kern_alloc_ctx/fpu_kern_free_ctx.
 It is complex to measure performance gain of this change due to
 deadlock in ndis code (what makes it complex or impossible to
 stress-test), but when the same change was tested with
 https://github.com/NDISulator/ it allowed to get about 10% higher
 bandwidth with 1Gbps NIC (which was CPU bound).
 
 --e89a8f6465adbf936e04bb0d4973
 Content-Type: text/plain; charset=US-ASCII; name="fpu_patch2.txt"
 Content-Disposition: attachment; filename="fpu_patch2.txt"
 Content-Transfer-Encoding: base64
 X-Attachment-Id: f_gzpnl7720
 
 SW5kZXg6IC91c3Ivc3JjL3N5cy9jb21wYXQvbmRpcy9wZV92YXIuaAo9PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAv
 dXNyL3NyYy9zeXMvY29tcGF0L25kaXMvcGVfdmFyLmgJKHJldmlzaW9uIDIzMjM3OSkKKysrIC91
 c3Ivc3JjL3N5cy9jb21wYXQvbmRpcy9wZV92YXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDYwLDIy
 ICs0NjAsMzAgQEAKIGV4dGVybiB1aW50NjRfdCB4ODZfNjRfY2FsbDYodm9pZCAqLCB1aW50NjRf
 dCwgdWludDY0X3QsIHVpbnQ2NF90LCB1aW50NjRfdCwKIAl1aW50NjRfdCwgdWludDY0X3QpOwog
 Cit1aW50NjRfdCBfeDg2XzY0X2NhbGwxKHZvaWQgKiwgdWludDY0X3QpOwordWludDY0X3QgX3g4
 Nl82NF9jYWxsMih2b2lkICosIHVpbnQ2NF90LCB1aW50NjRfdCk7Cit1aW50NjRfdCBfeDg2XzY0
 X2NhbGwzKHZvaWQgKiwgdWludDY0X3QsIHVpbnQ2NF90LCB1aW50NjRfdCk7Cit1aW50NjRfdCBf
 eDg2XzY0X2NhbGw0KHZvaWQgKiwgdWludDY0X3QsIHVpbnQ2NF90LCB1aW50NjRfdCwgdWludDY0
 X3QpOwordWludDY0X3QgX3g4Nl82NF9jYWxsNSh2b2lkICosIHVpbnQ2NF90LCB1aW50NjRfdCwg
 dWludDY0X3QsIHVpbnQ2NF90LAorICAgIHVpbnQ2NF90KTsKK3VpbnQ2NF90IF94ODZfNjRfY2Fs
 bDYodm9pZCAqLCB1aW50NjRfdCwgdWludDY0X3QsIHVpbnQ2NF90LCB1aW50NjRfdCwKKyAgICB1
 aW50NjRfdCwgdWludDY0X3QpOwogCiAjZGVmaW5lCU1TQ0FMTDEoZm4sIGEpCQkJCQkJXAotCXg4
 Nl82NF9jYWxsMSgoZm4pLCAodWludDY0X3QpKGEpKQorCV94ODZfNjRfY2FsbDEoKGZuKSwgKHVp
 bnQ2NF90KShhKSkKICNkZWZpbmUJTVNDQUxMMihmbiwgYSwgYikJCQkJCVwKLQl4ODZfNjRfY2Fs
 bDIoKGZuKSwgKHVpbnQ2NF90KShhKSwgKHVpbnQ2NF90KShiKSkKKwlfeDg2XzY0X2NhbGwyKChm
 biksICh1aW50NjRfdCkoYSksICh1aW50NjRfdCkoYikpCiAjZGVmaW5lCU1TQ0FMTDMoZm4sIGEs
 IGIsIGMpCQkJCQlcCi0JeDg2XzY0X2NhbGwzKChmbiksICh1aW50NjRfdCkoYSksICh1aW50NjRf
 dCkoYiksCQlcCisJX3g4Nl82NF9jYWxsMygoZm4pLCAodWludDY0X3QpKGEpLCAodWludDY0X3Qp
 KGIpLAkJXAogCSh1aW50NjRfdCkoYykpCiAjZGVmaW5lCU1TQ0FMTDQoZm4sIGEsIGIsIGMsIGQp
 CQkJCQlcCi0JeDg2XzY0X2NhbGw0KChmbiksICh1aW50NjRfdCkoYSksICh1aW50NjRfdCkoYiks
 CQlcCisJX3g4Nl82NF9jYWxsNCgoZm4pLCAodWludDY0X3QpKGEpLCAodWludDY0X3QpKGIpLAkJ
 XAogCSh1aW50NjRfdCkoYyksICh1aW50NjRfdCkoZCkpCiAjZGVmaW5lCU1TQ0FMTDUoZm4sIGEs
 IGIsIGMsIGQsIGUpCQkJCVwKLQl4ODZfNjRfY2FsbDUoKGZuKSwgKHVpbnQ2NF90KShhKSwgKHVp
 bnQ2NF90KShiKSwJCVwKKwlfeDg2XzY0X2NhbGw1KChmbiksICh1aW50NjRfdCkoYSksICh1aW50
 NjRfdCkoYiksCQlcCiAJKHVpbnQ2NF90KShjKSwgKHVpbnQ2NF90KShkKSwgKHVpbnQ2NF90KShl
 KSkKICNkZWZpbmUJTVNDQUxMNihmbiwgYSwgYiwgYywgZCwgZSwgZikJCQkJXAotCXg4Nl82NF9j
 YWxsNigoZm4pLCAodWludDY0X3QpKGEpLCAodWludDY0X3QpKGIpLAkJXAorCV94ODZfNjRfY2Fs
 bDYoKGZuKSwgKHVpbnQ2NF90KShhKSwgKHVpbnQ2NF90KShiKSwJCVwKIAkodWludDY0X3QpKGMp
 LCAodWludDY0X3QpKGQpLCAodWludDY0X3QpKGUpLCAodWludDY0X3QpKGYpKQogCiAjZW5kaWYg
 LyogX19hbWQ2NF9fICovCkluZGV4OiAvdXNyL3NyYy9zeXMvY29tcGF0L25kaXMva2Vybl93aW5k
 cnYuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09Ci0tLSAvdXNyL3NyYy9zeXMvY29tcGF0L25kaXMva2Vybl93aW5kcnYu
 YwkocmV2aXNpb24gMjMyMzc5KQorKysgL3Vzci9zcmMvc3lzL2NvbXBhdC9uZGlzL2tlcm5fd2lu
 ZHJ2LmMJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDEwIEBACiAjaW5jbHVkZSA8bWFjaGlu
 ZS9zZWdtZW50cy5oPgogI2VuZGlmCiAKKyNpZmRlZiBfX2FtZDY0X18KKyNpbmNsdWRlIDxtYWNo
 aW5lL2ZwdS5oPgorI2VuZGlmCisKICNpbmNsdWRlIDxkZXYvdXNiL3VzYi5oPgogCiAjaW5jbHVk
 ZSA8Y29tcGF0L25kaXMvcGVfdmFyLmg+CkBAIC02Niw2ICs3MCwxNiBAQAogI2luY2x1ZGUgPGNv
 bXBhdC9uZGlzL2hhbF92YXIuaD4KICNpbmNsdWRlIDxjb21wYXQvbmRpcy91c2JkX3Zhci5oPgog
 CisjaWZkZWYgX19hbWQ2NF9fCitzdHJ1Y3QgZnB1X2NjX2VudCB7CisJY2hhcgkJdXNlZDsKKwlz
 dHJ1Y3QgZnB1X2tlcm5fY3R4ICpjdHg7CisJU0xJU1RfRU5UUlkoZnB1X2NjX2VudCkgbGluazsK
 K307CitzdGF0aWMgU0xJU1RfSEVBRChmcHVfY3R4X2NhY2hlLCBmcHVfY2NfZW50KSBmcHVfY2Nf
 aGVhZDsKK3N0YXRpYyBzdHJ1Y3QgbXR4IGZwdV9jYWNoZV9tdHg7CisjZW5kaWYKKwogc3RhdGlj
 IHN0cnVjdCBtdHggZHJ2ZGJfbXR4Owogc3RhdGljIFNUQUlMUV9IRUFEKGRydmRiLCBkcnZkYl9l
 bnQpIGRydmRiX2hlYWQ7CiAKQEAgLTk2LDYgKzExMCwxMSBAQAogCW10eF9pbml0KCZkcnZkYl9t
 dHgsICJXaW5kb3dzIGRyaXZlciBEQiBsb2NrIiwKIAkgICAgIldpbmRvd3MgaW50ZXJuYWwgbG9j
 ayIsIE1UWF9ERUYpOwogCisjaWZkZWYgX19hbWQ2NF9fCisJU0xJU1RfSU5JVCgmZnB1X2NjX2hl
 YWQpOworCW10eF9pbml0KCZmcHVfY2FjaGVfbXR4LCAiZnB1IGNvbnRleHQgY2FjaGUgbG9jayIs
 IE5VTEwsIE1UWF9ERUYpOworI2VuZGlmCisKIAkvKgogCSAqIFBDSSBhbmQgcGNjYXJkIGRldmlj
 ZXMgZG9uJ3QgbmVlZCB0byB1c2UgSVJQcyB0bwogCSAqIGludGVyYWN0IHdpdGggdGhlaXIgYnVz
 IGRyaXZlcnMgKHVzdWFsbHkpLCBzbyBvdXIKQEAgLTEzMCw2ICsxNDksOSBAQAogd2luZHJ2X2xp
 YmZpbmkodm9pZCkKIHsKIAlzdHJ1Y3QgZHJ2ZGJfZW50CSpkOworI2lmZGVmIF9fYW1kNjRfXwor
 CXN0cnVjdCBmcHVfY2NfZW50ICplbnQ7CisjZW5kaWYKIAogCW10eF9sb2NrKCZkcnZkYl9tdHgp
 OyAKIAl3aGlsZShTVEFJTFFfRklSU1QoJmRydmRiX2hlYWQpICE9IE5VTEwpIHsKQEAgLTE0OCw2
 ICsxNzAsMTUgQEAKIAlzbXBfcmVuZGV6dm91cyhOVUxMLCB4ODZfb2xkbGR0LCBOVUxMLCBOVUxM
 KTsKIAlFeEZyZWVQb29sKG15X3RpZHMpOwogI2VuZGlmCisjaWZkZWYgX19hbWQ2NF9fCisJd2hp
 bGUgKChlbnQgPSBTTElTVF9GSVJTVCgmZnB1X2NjX2hlYWQpKSAhPSBOVUxMKSB7CisJCVNMSVNU
 X1JFTU9WRV9IRUFEKCZmcHVfY2NfaGVhZCwgbGluayk7CisJCWZwdV9rZXJuX2ZyZWVfY3R4KGVu
 dC0+Y3R4KTsKKwkJZnJlZShlbnQsIE1fREVWQlVGKTsKKwl9CisKKwltdHhfZGVzdHJveSgmZnB1
 X2NhY2hlX210eCk7CisjZW5kaWYKIAlyZXR1cm4gKDApOwogfQogCkBAIC01NzMsNiArNjA0LDE0
 MSBAQAogCXJldHVybiAoMCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZnB1X2NjX2VudCAqCityZXF1
 ZXN0X2ZwdV9jY19lbnQodm9pZCkKK3sKKwlzdHJ1Y3QgZnB1X2NjX2VudCAqZW50OworCisJbXR4
 X2xvY2soJmZwdV9jYWNoZV9tdHgpOworCVNMSVNUX0ZPUkVBQ0goZW50LCAmZnB1X2NjX2hlYWQs
 IGxpbmspIHsKKwkJaWYoZW50LT51c2VkID09IDApIHsKKwkJCWVudC0+dXNlZCA9IDE7CisJCQlt
 dHhfdW5sb2NrKCZmcHVfY2FjaGVfbXR4KTsKKwkJCXJldHVybiAoZW50KTsKKwkJfQorCX0KKwlt
 dHhfdW5sb2NrKCZmcHVfY2FjaGVfbXR4KTsKKworCWlmICgoZW50ID0gbWFsbG9jKHNpemVvZihz
 dHJ1Y3QgZnB1X2NjX2VudCksIE1fREVWQlVGLCBNX05PV0FJVCB8CisJICAgIE1fWkVSTykpICE9
 IE5VTEwpIHsKKwkJZW50LT5jdHggPSBmcHVfa2Vybl9hbGxvY19jdHgoRlBVX0tFUk5fTk9STUFM
 IHwKKwkJICAgIEZQVV9LRVJOX05PV0FJVCk7CisJCWlmIChlbnQtPmN0eCAhPSBOVUxMKSB7CisJ
 CQllbnQtPnVzZWQgPSAxOworCQkJbXR4X2xvY2soJmZwdV9jYWNoZV9tdHgpOworCQkJU0xJU1Rf
 SU5TRVJUX0hFQUQoJmZwdV9jY19oZWFkLCBlbnQsIGxpbmspOworCQkJbXR4X3VubG9jaygmZnB1
 X2NhY2hlX210eCk7CisJCX0gZWxzZQorCQkJZnJlZShlbnQsIE1fREVWQlVGKTsKKwl9CisKKwly
 ZXR1cm4gKGVudCk7Cit9CisKK3N0YXRpYyB2b2lkCityZWxlYXNlX2ZwdV9jY19lbnQoc3RydWN0
 IGZwdV9jY19lbnQgKmVudCkKK3sKKworCWVudC0+dXNlZCA9IDA7Cit9CisKK3VpbnQ2NF90Citf
 eDg2XzY0X2NhbGwxKHZvaWQgKmZuLCB1aW50NjRfdCBhKQoreworCXN0cnVjdCBmcHVfY2NfZW50
 ICplbnQ7CisJdWludDY0X3QgcmV0OworCisJaWYgKChlbnQgPSByZXF1ZXN0X2ZwdV9jY19lbnQo
 KSkgPT0gTlVMTCkKKwkJcmV0dXJuIChFTk9NRU0pOworCWZwdV9rZXJuX2VudGVyKGN1cnRocmVh
 ZCwgZW50LT5jdHgsIEZQVV9LRVJOX05PUk1BTCk7CisJcmV0ID0geDg2XzY0X2NhbGwxKGZuLCBh
 KTsKKwlmcHVfa2Vybl9sZWF2ZShjdXJ0aHJlYWQsIGVudC0+Y3R4KTsKKwlyZWxlYXNlX2ZwdV9j
 Y19lbnQoZW50KTsKKworCXJldHVybiAocmV0KTsKK30KKwordWludDY0X3QKK194ODZfNjRfY2Fs
 bDIodm9pZCAqZm4sIHVpbnQ2NF90IGEsIHVpbnQ2NF90IGIpCit7CisJc3RydWN0IGZwdV9jY19l
 bnQgKmVudDsKKwl1aW50NjRfdCByZXQ7CisKKwlpZiAoKGVudCA9IHJlcXVlc3RfZnB1X2NjX2Vu
 dCgpKSA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01FTSk7CisJZnB1X2tlcm5fZW50ZXIoY3VydGhy
 ZWFkLCBlbnQtPmN0eCwgRlBVX0tFUk5fTk9STUFMKTsKKwlyZXQgPSB4ODZfNjRfY2FsbDIoZm4s
 IGEsIGIpOworCWZwdV9rZXJuX2xlYXZlKGN1cnRocmVhZCwgZW50LT5jdHgpOworCXJlbGVhc2Vf
 ZnB1X2NjX2VudChlbnQpOworCisJcmV0dXJuIChyZXQpOworfQorCit1aW50NjRfdAorX3g4Nl82
 NF9jYWxsMyh2b2lkICpmbiwgdWludDY0X3QgYSwgdWludDY0X3QgYiwgdWludDY0X3QgYykKK3sK
 KwlzdHJ1Y3QgZnB1X2NjX2VudCAqZW50OworCXVpbnQ2NF90IHJldDsKKworCWlmICgoZW50ID0g
 cmVxdWVzdF9mcHVfY2NfZW50KCkpID09IE5VTEwpCisJCXJldHVybiAoRU5PTUVNKTsKKwlmcHVf
 a2Vybl9lbnRlcihjdXJ0aHJlYWQsIGVudC0+Y3R4LCBGUFVfS0VSTl9OT1JNQUwpOworCXJldCA9
 IHg4Nl82NF9jYWxsMyhmbiwgYSwgYiwgYyk7CisJZnB1X2tlcm5fbGVhdmUoY3VydGhyZWFkLCBl
 bnQtPmN0eCk7CisJcmVsZWFzZV9mcHVfY2NfZW50KGVudCk7CisKKwlyZXR1cm4gKHJldCk7Cit9
 CisKK3VpbnQ2NF90CitfeDg2XzY0X2NhbGw0KHZvaWQgKmZuLCB1aW50NjRfdCBhLCB1aW50NjRf
 dCBiLCB1aW50NjRfdCBjLCB1aW50NjRfdCBkKQoreworCXN0cnVjdCBmcHVfY2NfZW50ICplbnQ7
 CisJdWludDY0X3QgcmV0OworCisJaWYgKChlbnQgPSByZXF1ZXN0X2ZwdV9jY19lbnQoKSkgPT0g
 TlVMTCkKKwkJcmV0dXJuIChFTk9NRU0pOworCWZwdV9rZXJuX2VudGVyKGN1cnRocmVhZCwgZW50
 LT5jdHgsIEZQVV9LRVJOX05PUk1BTCk7CisJcmV0ID0geDg2XzY0X2NhbGw0KGZuLCBhLCBiLCBj
 LCBkKTsKKwlmcHVfa2Vybl9sZWF2ZShjdXJ0aHJlYWQsIGVudC0+Y3R4KTsKKwlyZWxlYXNlX2Zw
 dV9jY19lbnQoZW50KTsKKworCXJldHVybiAocmV0KTsKK30KKwordWludDY0X3QKK194ODZfNjRf
 Y2FsbDUodm9pZCAqZm4sIHVpbnQ2NF90IGEsIHVpbnQ2NF90IGIsIHVpbnQ2NF90IGMsIHVpbnQ2
 NF90IGQsCisgICAgdWludDY0X3QgZSkKK3sKKwlzdHJ1Y3QgZnB1X2NjX2VudCAqZW50OworCXVp
 bnQ2NF90IHJldDsKKworCWlmICgoZW50ID0gcmVxdWVzdF9mcHVfY2NfZW50KCkpID09IE5VTEwp
 CisJCXJldHVybiAoRU5PTUVNKTsKKwlmcHVfa2Vybl9lbnRlcihjdXJ0aHJlYWQsIGVudC0+Y3R4
 LCBGUFVfS0VSTl9OT1JNQUwpOworCXJldCA9IHg4Nl82NF9jYWxsNShmbiwgYSwgYiwgYywgZCwg
 ZSk7CisJZnB1X2tlcm5fbGVhdmUoY3VydGhyZWFkLCBlbnQtPmN0eCk7CisJcmVsZWFzZV9mcHVf
 Y2NfZW50KGVudCk7CisKKwlyZXR1cm4gKHJldCk7Cit9CisKK3VpbnQ2NF90CitfeDg2XzY0X2Nh
 bGw2KHZvaWQgKmZuLCB1aW50NjRfdCBhLCB1aW50NjRfdCBiLCB1aW50NjRfdCBjLCB1aW50NjRf
 dCBkLAorICAgIHVpbnQ2NF90IGUsIHVpbnQ2NF90IGYpCit7CisJc3RydWN0IGZwdV9jY19lbnQg
 KmVudDsKKwl1aW50NjRfdCByZXQ7CisKKwlpZiAoKGVudCA9IHJlcXVlc3RfZnB1X2NjX2VudCgp
 KSA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01FTSk7CisJZnB1X2tlcm5fZW50ZXIoY3VydGhyZWFk
 LCBlbnQtPmN0eCwgRlBVX0tFUk5fTk9STUFMKTsKKwlyZXQgPSB4ODZfNjRfY2FsbDYoZm4sIGEs
 IGIsIGMsIGQsIGUsIGYpOworCWZwdV9rZXJuX2xlYXZlKGN1cnRocmVhZCwgZW50LT5jdHgpOwor
 CXJlbGVhc2VfZnB1X2NjX2VudChlbnQpOworCisJcmV0dXJuIChyZXQpOworfQogI2lmZGVmIF9f
 YW1kNjRfXwogCiBleHRlcm4gdm9pZAl4ODZfNjRfd3JhcCh2b2lkKTsK
 --e89a8f6465adbf936e04bb0d4973--

From: Vlad Movchan <vladislav.movchan@gmail.com>
To: bug-followup@FreeBSD.org, Vlad Movchan <vladislav.movchan@gmail.com>
Cc:  
Subject: Re: kern/165622: [ndis][panic][patch] Unregistered use of FPU in
 kernel on amd64
Date: Tue, 28 Jan 2014 22:56:22 +0200

 --001a11343fbc90848404f10e0ef4
 Content-Type: multipart/alternative; boundary=001a11343fbc90847f04f10e0ef2
 
 --001a11343fbc90847f04f10e0ef2
 Content-Type: text/plain; charset=ISO-8859-1
 
 Here is a corrected patch. Previous version could not be compiled on i386.
 
 --001a11343fbc90847f04f10e0ef2
 Content-Type: text/html; charset=ISO-8859-1
 
 <div dir="ltr">Here is a corrected patch. Previous version could not be compiled on i386.<br></div>
 
 --001a11343fbc90847f04f10e0ef2--
 --001a11343fbc90848404f10e0ef4
 Content-Type: text/plain; charset=US-ASCII; name="fpu_patch3.txt"
 Content-Disposition: attachment; filename="fpu_patch3.txt"
 Content-Transfer-Encoding: base64
 X-Attachment-Id: f_hqzly1yi0
 
 SW5kZXg6IHN5cy9jb21wYXQvbmRpcy9rZXJuX3dpbmRydi5jCj09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9j
 b21wYXQvbmRpcy9rZXJuX3dpbmRydi5jCShyZXZpc2lvbiAyNjEyMzkpCisrKyBzeXMvY29tcGF0
 L25kaXMva2Vybl93aW5kcnYuYwkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTAgQEAKICNp
 bmNsdWRlIDxtYWNoaW5lL3NlZ21lbnRzLmg+CiAjZW5kaWYKIAorI2lmZGVmIF9fYW1kNjRfXwor
 I2luY2x1ZGUgPG1hY2hpbmUvZnB1Lmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPGRldi91c2IvdXNi
 Lmg+CiAKICNpbmNsdWRlIDxjb21wYXQvbmRpcy9wZV92YXIuaD4KQEAgLTY2LDYgKzcwLDE2IEBA
 CiAjaW5jbHVkZSA8Y29tcGF0L25kaXMvaGFsX3Zhci5oPgogI2luY2x1ZGUgPGNvbXBhdC9uZGlz
 L3VzYmRfdmFyLmg+CiAKKyNpZmRlZiBfX2FtZDY0X18KK3N0cnVjdCBmcHVfY2NfZW50IHsKKwlj
 aGFyCQl1c2VkOworCXN0cnVjdCBmcHVfa2Vybl9jdHggKmN0eDsKKwlTTElTVF9FTlRSWShmcHVf
 Y2NfZW50KSBsaW5rOworfTsKK3N0YXRpYyBTTElTVF9IRUFEKGZwdV9jdHhfY2FjaGUsIGZwdV9j
 Y19lbnQpIGZwdV9jY19oZWFkOworc3RhdGljIHN0cnVjdCBtdHggZnB1X2NhY2hlX210eDsKKyNl
 bmRpZgorCiBzdGF0aWMgc3RydWN0IG10eCBkcnZkYl9tdHg7CiBzdGF0aWMgU1RBSUxRX0hFQUQo
 ZHJ2ZGIsIGRydmRiX2VudCkgZHJ2ZGJfaGVhZDsKIApAQCAtOTYsNiArMTEwLDExIEBACiAJbXR4
 X2luaXQoJmRydmRiX210eCwgIldpbmRvd3MgZHJpdmVyIERCIGxvY2siLAogCSAgICAiV2luZG93
 cyBpbnRlcm5hbCBsb2NrIiwgTVRYX0RFRik7CiAKKyNpZmRlZiBfX2FtZDY0X18KKwlTTElTVF9J
 TklUKCZmcHVfY2NfaGVhZCk7CisJbXR4X2luaXQoJmZwdV9jYWNoZV9tdHgsICJmcHUgY29udGV4
 dCBjYWNoZSBsb2NrIiwgTlVMTCwgTVRYX0RFRik7CisjZW5kaWYKKwogCS8qCiAJICogUENJIGFu
 ZCBwY2NhcmQgZGV2aWNlcyBkb24ndCBuZWVkIHRvIHVzZSBJUlBzIHRvCiAJICogaW50ZXJhY3Qg
 d2l0aCB0aGVpciBidXMgZHJpdmVycyAodXN1YWxseSksIHNvIG91cgpAQCAtMTMwLDYgKzE0OSw5
 IEBACiB3aW5kcnZfbGliZmluaSh2b2lkKQogewogCXN0cnVjdCBkcnZkYl9lbnQJKmQ7CisjaWZk
 ZWYgX19hbWQ2NF9fCisJc3RydWN0IGZwdV9jY19lbnQgKmVudDsKKyNlbmRpZgogCiAJbXR4X2xv
 Y2soJmRydmRiX210eCk7IAogCXdoaWxlKFNUQUlMUV9GSVJTVCgmZHJ2ZGJfaGVhZCkgIT0gTlVM
 TCkgewpAQCAtMTQ4LDYgKzE3MCwxNSBAQAogCXNtcF9yZW5kZXp2b3VzKE5VTEwsIHg4Nl9vbGRs
 ZHQsIE5VTEwsIE5VTEwpOwogCUV4RnJlZVBvb2wobXlfdGlkcyk7CiAjZW5kaWYKKyNpZmRlZiBf
 X2FtZDY0X18KKwl3aGlsZSAoKGVudCA9IFNMSVNUX0ZJUlNUKCZmcHVfY2NfaGVhZCkpICE9IE5V
 TEwpIHsKKwkJU0xJU1RfUkVNT1ZFX0hFQUQoJmZwdV9jY19oZWFkLCBsaW5rKTsKKwkJZnB1X2tl
 cm5fZnJlZV9jdHgoZW50LT5jdHgpOworCQlmcmVlKGVudCwgTV9ERVZCVUYpOworCX0KKworCW10
 eF9kZXN0cm95KCZmcHVfY2FjaGVfbXR4KTsKKyNlbmRpZgogCXJldHVybiAoMCk7CiB9CiAKQEAg
 LTYxMyw2ICs2NDQsMTQyIEBACiAKIAlyZXR1cm4gKDApOwogfQorCitzdGF0aWMgc3RydWN0IGZw
 dV9jY19lbnQgKgorcmVxdWVzdF9mcHVfY2NfZW50KHZvaWQpCit7CisJc3RydWN0IGZwdV9jY19l
 bnQgKmVudDsKKworCW10eF9sb2NrKCZmcHVfY2FjaGVfbXR4KTsKKwlTTElTVF9GT1JFQUNIKGVu
 dCwgJmZwdV9jY19oZWFkLCBsaW5rKSB7CisJCWlmKGVudC0+dXNlZCA9PSAwKSB7CisJCQllbnQt
 PnVzZWQgPSAxOworCQkJbXR4X3VubG9jaygmZnB1X2NhY2hlX210eCk7CisJCQlyZXR1cm4gKGVu
 dCk7CisJCX0KKwl9CisJbXR4X3VubG9jaygmZnB1X2NhY2hlX210eCk7CisKKwlpZiAoKGVudCA9
 IG1hbGxvYyhzaXplb2Yoc3RydWN0IGZwdV9jY19lbnQpLCBNX0RFVkJVRiwgTV9OT1dBSVQgfAor
 CSAgICBNX1pFUk8pKSAhPSBOVUxMKSB7CisJCWVudC0+Y3R4ID0gZnB1X2tlcm5fYWxsb2NfY3R4
 KEZQVV9LRVJOX05PUk1BTCB8CisJCSAgICBGUFVfS0VSTl9OT1dBSVQpOworCQlpZiAoZW50LT5j
 dHggIT0gTlVMTCkgeworCQkJZW50LT51c2VkID0gMTsKKwkJCW10eF9sb2NrKCZmcHVfY2FjaGVf
 bXR4KTsKKwkJCVNMSVNUX0lOU0VSVF9IRUFEKCZmcHVfY2NfaGVhZCwgZW50LCBsaW5rKTsKKwkJ
 CW10eF91bmxvY2soJmZwdV9jYWNoZV9tdHgpOworCQl9IGVsc2UKKwkJCWZyZWUoZW50LCBNX0RF
 VkJVRik7CisJfQorCisJcmV0dXJuIChlbnQpOworfQorCitzdGF0aWMgdm9pZAorcmVsZWFzZV9m
 cHVfY2NfZW50KHN0cnVjdCBmcHVfY2NfZW50ICplbnQpCit7CisKKwllbnQtPnVzZWQgPSAwOwor
 fQorCit1aW50NjRfdAorX3g4Nl82NF9jYWxsMSh2b2lkICpmbiwgdWludDY0X3QgYSkKK3sKKwlz
 dHJ1Y3QgZnB1X2NjX2VudCAqZW50OworCXVpbnQ2NF90IHJldDsKKworCWlmICgoZW50ID0gcmVx
 dWVzdF9mcHVfY2NfZW50KCkpID09IE5VTEwpCisJCXJldHVybiAoRU5PTUVNKTsKKwlmcHVfa2Vy
 bl9lbnRlcihjdXJ0aHJlYWQsIGVudC0+Y3R4LCBGUFVfS0VSTl9OT1JNQUwpOworCXJldCA9IHg4
 Nl82NF9jYWxsMShmbiwgYSk7CisJZnB1X2tlcm5fbGVhdmUoY3VydGhyZWFkLCBlbnQtPmN0eCk7
 CisJcmVsZWFzZV9mcHVfY2NfZW50KGVudCk7CisKKwlyZXR1cm4gKHJldCk7Cit9CisKK3VpbnQ2
 NF90CitfeDg2XzY0X2NhbGwyKHZvaWQgKmZuLCB1aW50NjRfdCBhLCB1aW50NjRfdCBiKQorewor
 CXN0cnVjdCBmcHVfY2NfZW50ICplbnQ7CisJdWludDY0X3QgcmV0OworCisJaWYgKChlbnQgPSBy
 ZXF1ZXN0X2ZwdV9jY19lbnQoKSkgPT0gTlVMTCkKKwkJcmV0dXJuIChFTk9NRU0pOworCWZwdV9r
 ZXJuX2VudGVyKGN1cnRocmVhZCwgZW50LT5jdHgsIEZQVV9LRVJOX05PUk1BTCk7CisJcmV0ID0g
 eDg2XzY0X2NhbGwyKGZuLCBhLCBiKTsKKwlmcHVfa2Vybl9sZWF2ZShjdXJ0aHJlYWQsIGVudC0+
 Y3R4KTsKKwlyZWxlYXNlX2ZwdV9jY19lbnQoZW50KTsKKworCXJldHVybiAocmV0KTsKK30KKwor
 dWludDY0X3QKK194ODZfNjRfY2FsbDModm9pZCAqZm4sIHVpbnQ2NF90IGEsIHVpbnQ2NF90IGIs
 IHVpbnQ2NF90IGMpCit7CisJc3RydWN0IGZwdV9jY19lbnQgKmVudDsKKwl1aW50NjRfdCByZXQ7
 CisKKwlpZiAoKGVudCA9IHJlcXVlc3RfZnB1X2NjX2VudCgpKSA9PSBOVUxMKQorCQlyZXR1cm4g
 KEVOT01FTSk7CisJZnB1X2tlcm5fZW50ZXIoY3VydGhyZWFkLCBlbnQtPmN0eCwgRlBVX0tFUk5f
 Tk9STUFMKTsKKwlyZXQgPSB4ODZfNjRfY2FsbDMoZm4sIGEsIGIsIGMpOworCWZwdV9rZXJuX2xl
 YXZlKGN1cnRocmVhZCwgZW50LT5jdHgpOworCXJlbGVhc2VfZnB1X2NjX2VudChlbnQpOworCisJ
 cmV0dXJuIChyZXQpOworfQorCit1aW50NjRfdAorX3g4Nl82NF9jYWxsNCh2b2lkICpmbiwgdWlu
 dDY0X3QgYSwgdWludDY0X3QgYiwgdWludDY0X3QgYywgdWludDY0X3QgZCkKK3sKKwlzdHJ1Y3Qg
 ZnB1X2NjX2VudCAqZW50OworCXVpbnQ2NF90IHJldDsKKworCWlmICgoZW50ID0gcmVxdWVzdF9m
 cHVfY2NfZW50KCkpID09IE5VTEwpCisJCXJldHVybiAoRU5PTUVNKTsKKwlmcHVfa2Vybl9lbnRl
 cihjdXJ0aHJlYWQsIGVudC0+Y3R4LCBGUFVfS0VSTl9OT1JNQUwpOworCXJldCA9IHg4Nl82NF9j
 YWxsNChmbiwgYSwgYiwgYywgZCk7CisJZnB1X2tlcm5fbGVhdmUoY3VydGhyZWFkLCBlbnQtPmN0
 eCk7CisJcmVsZWFzZV9mcHVfY2NfZW50KGVudCk7CisKKwlyZXR1cm4gKHJldCk7Cit9CisKK3Vp
 bnQ2NF90CitfeDg2XzY0X2NhbGw1KHZvaWQgKmZuLCB1aW50NjRfdCBhLCB1aW50NjRfdCBiLCB1
 aW50NjRfdCBjLCB1aW50NjRfdCBkLAorICAgIHVpbnQ2NF90IGUpCit7CisJc3RydWN0IGZwdV9j
 Y19lbnQgKmVudDsKKwl1aW50NjRfdCByZXQ7CisKKwlpZiAoKGVudCA9IHJlcXVlc3RfZnB1X2Nj
 X2VudCgpKSA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01FTSk7CisJZnB1X2tlcm5fZW50ZXIoY3Vy
 dGhyZWFkLCBlbnQtPmN0eCwgRlBVX0tFUk5fTk9STUFMKTsKKwlyZXQgPSB4ODZfNjRfY2FsbDUo
 Zm4sIGEsIGIsIGMsIGQsIGUpOworCWZwdV9rZXJuX2xlYXZlKGN1cnRocmVhZCwgZW50LT5jdHgp
 OworCXJlbGVhc2VfZnB1X2NjX2VudChlbnQpOworCisJcmV0dXJuIChyZXQpOworfQorCit1aW50
 NjRfdAorX3g4Nl82NF9jYWxsNih2b2lkICpmbiwgdWludDY0X3QgYSwgdWludDY0X3QgYiwgdWlu
 dDY0X3QgYywgdWludDY0X3QgZCwKKyAgICB1aW50NjRfdCBlLCB1aW50NjRfdCBmKQoreworCXN0
 cnVjdCBmcHVfY2NfZW50ICplbnQ7CisJdWludDY0X3QgcmV0OworCisJaWYgKChlbnQgPSByZXF1
 ZXN0X2ZwdV9jY19lbnQoKSkgPT0gTlVMTCkKKwkJcmV0dXJuIChFTk9NRU0pOworCWZwdV9rZXJu
 X2VudGVyKGN1cnRocmVhZCwgZW50LT5jdHgsIEZQVV9LRVJOX05PUk1BTCk7CisJcmV0ID0geDg2
 XzY0X2NhbGw2KGZuLCBhLCBiLCBjLCBkLCBlLCBmKTsKKwlmcHVfa2Vybl9sZWF2ZShjdXJ0aHJl
 YWQsIGVudC0+Y3R4KTsKKwlyZWxlYXNlX2ZwdV9jY19lbnQoZW50KTsKKworCXJldHVybiAocmV0
 KTsKK30KICNlbmRpZiAvKiBfX2FtZDY0X18gKi8KIAogCkluZGV4OiBzeXMvY29tcGF0L25kaXMv
 cGVfdmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2NvbXBhdC9uZGlzL3BlX3Zhci5oCShyZXZpc2lv
 biAyNjEyMzkpCisrKyBzeXMvY29tcGF0L25kaXMvcGVfdmFyLmgJKHdvcmtpbmcgY29weSkKQEAg
 LTQ2MCwyMiArNDYwLDMwIEBACiBleHRlcm4gdWludDY0X3QgeDg2XzY0X2NhbGw2KHZvaWQgKiwg
 dWludDY0X3QsIHVpbnQ2NF90LCB1aW50NjRfdCwgdWludDY0X3QsCiAJdWludDY0X3QsIHVpbnQ2
 NF90KTsKIAordWludDY0X3QgX3g4Nl82NF9jYWxsMSh2b2lkICosIHVpbnQ2NF90KTsKK3VpbnQ2
 NF90IF94ODZfNjRfY2FsbDIodm9pZCAqLCB1aW50NjRfdCwgdWludDY0X3QpOwordWludDY0X3Qg
 X3g4Nl82NF9jYWxsMyh2b2lkICosIHVpbnQ2NF90LCB1aW50NjRfdCwgdWludDY0X3QpOwordWlu
 dDY0X3QgX3g4Nl82NF9jYWxsNCh2b2lkICosIHVpbnQ2NF90LCB1aW50NjRfdCwgdWludDY0X3Qs
 IHVpbnQ2NF90KTsKK3VpbnQ2NF90IF94ODZfNjRfY2FsbDUodm9pZCAqLCB1aW50NjRfdCwgdWlu
 dDY0X3QsIHVpbnQ2NF90LCB1aW50NjRfdCwKKyAgICB1aW50NjRfdCk7Cit1aW50NjRfdCBfeDg2
 XzY0X2NhbGw2KHZvaWQgKiwgdWludDY0X3QsIHVpbnQ2NF90LCB1aW50NjRfdCwgdWludDY0X3Qs
 CisgICAgdWludDY0X3QsIHVpbnQ2NF90KTsKIAogI2RlZmluZQlNU0NBTEwxKGZuLCBhKQkJCQkJ
 CVwKLQl4ODZfNjRfY2FsbDEoKGZuKSwgKHVpbnQ2NF90KShhKSkKKwlfeDg2XzY0X2NhbGwxKChm
 biksICh1aW50NjRfdCkoYSkpCiAjZGVmaW5lCU1TQ0FMTDIoZm4sIGEsIGIpCQkJCQlcCi0JeDg2
 XzY0X2NhbGwyKChmbiksICh1aW50NjRfdCkoYSksICh1aW50NjRfdCkoYikpCisJX3g4Nl82NF9j
 YWxsMigoZm4pLCAodWludDY0X3QpKGEpLCAodWludDY0X3QpKGIpKQogI2RlZmluZQlNU0NBTEwz
 KGZuLCBhLCBiLCBjKQkJCQkJXAotCXg4Nl82NF9jYWxsMygoZm4pLCAodWludDY0X3QpKGEpLCAo
 dWludDY0X3QpKGIpLAkJXAorCV94ODZfNjRfY2FsbDMoKGZuKSwgKHVpbnQ2NF90KShhKSwgKHVp
 bnQ2NF90KShiKSwJCVwKIAkodWludDY0X3QpKGMpKQogI2RlZmluZQlNU0NBTEw0KGZuLCBhLCBi
 LCBjLCBkKQkJCQkJXAotCXg4Nl82NF9jYWxsNCgoZm4pLCAodWludDY0X3QpKGEpLCAodWludDY0
 X3QpKGIpLAkJXAorCV94ODZfNjRfY2FsbDQoKGZuKSwgKHVpbnQ2NF90KShhKSwgKHVpbnQ2NF90
 KShiKSwJCVwKIAkodWludDY0X3QpKGMpLCAodWludDY0X3QpKGQpKQogI2RlZmluZQlNU0NBTEw1
 KGZuLCBhLCBiLCBjLCBkLCBlKQkJCQlcCi0JeDg2XzY0X2NhbGw1KChmbiksICh1aW50NjRfdCko
 YSksICh1aW50NjRfdCkoYiksCQlcCisJX3g4Nl82NF9jYWxsNSgoZm4pLCAodWludDY0X3QpKGEp
 LCAodWludDY0X3QpKGIpLAkJXAogCSh1aW50NjRfdCkoYyksICh1aW50NjRfdCkoZCksICh1aW50
 NjRfdCkoZSkpCiAjZGVmaW5lCU1TQ0FMTDYoZm4sIGEsIGIsIGMsIGQsIGUsIGYpCQkJCVwKLQl4
 ODZfNjRfY2FsbDYoKGZuKSwgKHVpbnQ2NF90KShhKSwgKHVpbnQ2NF90KShiKSwJCVwKKwlfeDg2
 XzY0X2NhbGw2KChmbiksICh1aW50NjRfdCkoYSksICh1aW50NjRfdCkoYiksCQlcCiAJKHVpbnQ2
 NF90KShjKSwgKHVpbnQ2NF90KShkKSwgKHVpbnQ2NF90KShlKSwgKHVpbnQ2NF90KShmKSkKIAog
 I2VuZGlmIC8qIF9fYW1kNjRfXyAqLwo=
 --001a11343fbc90848404f10e0ef4--
>Unformatted:
