aesni(?) corrupts data on 8.2-BETA1

jhell jhell at DataIX.net
Fri Dec 17 01:10:33 UTC 2010


On 12/12/2010 03:43, Kostik Belousov wrote:
> On Sat, Dec 11, 2010 at 07:37:51PM -0500, Mike Tancsa wrote:
>> On 12/11/2010 6:22 PM, Kostik Belousov wrote:
>>> On Sat, Dec 11, 2010 at 06:08:08PM -0500, Mike Tancsa wrote:
>>>> On 12/11/2010 11:01 AM, Kostik Belousov wrote:
>>>>>
>>>>> I have no access to AESNI hardware. For start, you may use
>>>>> src/tools/tools/crypto/cryptotest
>>>>> to somewhat verify the sanity of the driver.
>>>>
>>>> I doesnt happen every time, but one out of 5 or so 
>>>>
>>> First, which arch is it, amd64 or i386 ?
>>>
>>> Also, please revert r216162 and do the same tests.
>>
>> Hi,
>> 	Its AMD64, but i386 seems to be impacted too. I am not sure how to
>> revert to a specific commit, but for now I csup'd with a date tag of
>>
>> *date=2010.12.02.23.00.00
>>
>> which is a day before
>> http://lists.freebsd.org/pipermail/svn-src-stable-8/2010-December/004338.html
>>
>>
>> And that seems to fix it!
>>
>> I  have been running
>> cryptotest -c -z -t 10
>> in a loop for the past 10min and not one error.
> 
> Please try this patch on the latest HEAD or RELENG_8.
> 
> diff --git a/sys/amd64/amd64/fpu.c b/sys/amd64/amd64/fpu.c
> index 482b5da..1b493b4 100644
> --- a/sys/amd64/amd64/fpu.c
> +++ b/sys/amd64/amd64/fpu.c
> @@ -426,7 +426,9 @@ fpudna(void)
>  		fxrstor(&fpu_initialstate);
>  		if (pcb->pcb_initial_fpucw != __INITIAL_FPUCW__)
>  			fldcw(pcb->pcb_initial_fpucw);
> -		fpuuserinited(curthread);
> +		pcb->pcb_flags |= PCB_FPUINITDONE;
> +		if (PCB_USER_FPU(pcb))
> +			pcb->pcb_flags |= PCB_USERFPUINITDONE;
>  	} else
>  		fxrstor(pcb->pcb_save);
>  	critical_exit();
> diff --git a/sys/i386/isa/npx.c b/sys/i386/isa/npx.c
> index 9ec5d25..f314e44 100644
> --- a/sys/i386/isa/npx.c
> +++ b/sys/i386/isa/npx.c
> @@ -684,7 +684,9 @@ npxdna(void)
>  		fpurstor(&npx_initialstate);
>  		if (pcb->pcb_initial_npxcw != __INITIAL_NPXCW__)
>  			fldcw(pcb->pcb_initial_npxcw);
> -		npxuserinited(curthread);
> +		pcb->pcb_flags |= PCB_NPXINITDONE;
> +		if (PCB_USER_FPU(pcb))
> +			pcb->pcb_flags |= PCB_NPXUSERINITDONE;
>  	} else {
>  		/*
>  		 * The following fpurstor() may cause an IRQ13 when the

Regarding this patch(r216455) and r216162 I have had to back both of
them out of my local tree to avoid panics on a ZFS & UFS2 i386 system.

With the following panic strings:
  Dumptime: Thu Dec  9 08:37:40 2010
  Panic String: double fault
  Dumptime: Thu Dec  9 08:41:57 2010
  Panic String: page fault
  Dumptime: Fri Dec 10 00:23:35 2010
  Panic String: free: address 0x85ceb000(0x85ceb000) has not been allocated.
  Dumptime: Fri Dec 10 14:37:33 2010
  Panic String: page fault
  Dumptime: Sat Dec 11 04:10:01 2010
  Panic String: vm_fault: fault on nofault entry, addr: 8289c000
  Dumptime: Sun Dec 12 23:45:01 2010
  Panic String: page fault
  Dumptime: Tue Dec 14 01:32:09 2010
  Panic String: page fault
  Dumptime: Tue Dec 14 16:46:33 2010
  Panic String: general protection fault
  Dumptime: Thu Dec 16 10:03:15 2010
  Panic String: vm_fault: fault on nofault entry, addr: b3811000


Seems to be caused by r216162 or directly related to it. If further
information is needed let me know. Ill be around here for the next few
hours.

-- 

 jhell,v


More information about the freebsd-stable mailing list