Re: [Ocf-linux-users] Run cryptotest for md5 alg on talitos h/w driver lead to kernel Oops or gener
Brought to you by:
david-m
|
From: 张绪峰 <sea...@12...> - 2011-10-12 04:08:14
|
在 2011-10-12 11:53:37,"David McCullough" <dav...@mc...> 写道:
>
>Jivin 张绪峰 lays it down ...
>> After run some tests and have a investigation, I found the generated error interrupt
>> have relationship with the length of the descriptor pointer entry, here is the relative codes:
>> ---------------------------------------------------------------------------------------------------------------
>> } else if (crp->crp_flags & CRYPTO_F_IOV) {
>> /* using IOV buffers */
>> struct uio *uiop = (struct uio *)crp->crp_buf;
>> if (uiop->uio_iovcnt > 1) {
>> printk("%s: iov frags unimplemented\n",
>> device_get_nameunit(sc->sc_cdev));
>> err = EINVAL;
>> goto errout;
>> }
>> td->ptr[in_fifo].ptr = dma_map_single(device,
>> uiop->uio_iov->iov_base, crp->crp_ilen, DMA_TO_DEVICE);
>> td->ptr[in_fifo].len = crp->crp_ilen;
>> /* crp_olen is never set; always use crp_ilen */
>> td->ptr[out_fifo].ptr = dma_map_single(device,
>> uiop->uio_iov->iov_base,
>> crp->crp_ilen, DMA_TO_DEVICE);
>> td->ptr[out_fifo].len = crp->crp_ilen;
>> } else {
>> /* using contig buffers */
>> ------------------------------------------------------------------------------------------------------
>> If I change "td->ptr[in_fifo].len = crp->crp_ilen;" to "td->ptr[in_fifo].len = 32;" and
>> change "td->ptr[out_fifo].len = crp->crp_ilen; " to "td->ptr[out_fifo].len = 32", then I can
>> run "./cryptotest -va md5 1 1024" successfully without any error interrupt, but surly it's
>> not correct.
>
>Kim's the best person to help you on this one I think. Hopefully he's
>kicking around somewhere :-)
>
>What was the value of crp->crp_ilen before you changed it to 32 ?
Thanks for your reply, David.
The value of crp->crp_ilen depends on what I set for the number of bytes of text to encrypt,
eg. if I run "./cryptotest -va md5 1 1024", then crp->crp_ilen is 1024.
Thanks,
Xufeng Zhang
>
>Cheers,
>Davidm
>
>
>> At 2011-10-10 16:03:49,"???" <sea...@12...> wrote:
>>
>>
>> Hi experts,
>>
>> I meet a problem when run cryptotest for md5 alg on talitos h/w driver.
>> Board: Freescale mpc8572ds board
>> OS: linux-2.6.34
>>
>> Reproduce steps:
>> 1. # mknod /dev/crypto c 10 70
>> 2. # insmod ocf.ko
>> 3. # insmod cryptodev.ko
>> 4. # insmod talitos.ko
>> 5. # ./cryptotest -va md5 1 1024
>> crid = 3000000
>> alg = md5
>> session = 0x0
>> device = talitos0
>> count = 1, size = 1024
>> cleartext:
>> 0000: 38 21 33 74 73 31 21 75 68 37 36 68 33 74 30 75
>> 0010: 32 75 32 31 61 74 73 69 39 65 38 30 69 61 6f 6a
>> cryptotest: line 465:ioctl(CIOCCRYPT): Input/output error
>> 6. # dmesg
>> talitos0: got error interrupt - ISR 0x00000002_00000200
>> 7. # ./cryptotest -va md5 1 64
>> Unable to handle kernel paging request for data at address 0x00000004
>> Faulting instruction address: 0xc00d18fc
>> Oops: Kernel access of bad area, sig: 11 [#1]
>> PREEMPT 8 68 38 65 33 73SMP NR_CPUS=2 LTT NESTING LEVEL : 0
>> MPC8572 DS
>> NIP [c00d18fc] vma_prio_tree_remove+0x118/0x130
>> LR [c00de52c] __remove_shared_vm_struct+0x60/0x90
>> Call Trace:
>> [ef115de0] [c141c0b8] 0xc141c0b8 (unreliable)
>> [ef115e00] [c00de52c] __remove_shared_vm_struct+0x60/0x90
>> [ef115e10] [c00de59c] unlink_file_vma+0x40/0x5c
>> [ef115e30] [c00dbde8] free_pgtables+0x60/0xbc
>> [ef115e50] [c00de238] exit_mmap+0x124/0x1b4
>> [ef115e80] [c0044c1c] mmput+0x58/0x120
>> [ef115e90] [c0049948] exit_mm+0x148/0x168
>> [ef115ec0] [c004baac] do_exit+0x5d8/0x6b0
>> [ef115f10] [c004bbcc] do_group_exit+0x48/0xa8
>> [ef115f30] [c004bc40] sys_exit_group+0x14/0x28
>> [ef115f40] [c0010ef0] ret_from_syscall+0x0/0x4
>> --- Exception: c01 at 0xfef56c0
>> LR = 0xfef5690
>> Instruction dump:
>> 3949ffd4 91280000 91090004 900b002c 915f0038 900b0030 93ea0038 4bffff8c
>> 814b0030 380b002c 812b002c 912a0000 <91490004> 900b002c 900b0030 4bffff6c
>> ---[ end trace 11d846f2058aa86c ]---
>> Fixing recursive fault but reboot is needed!
>> BUG: scheduling while atomic: cryptotest/138/0x00000003
>> Modules linked in: ocf(P) cryptodev(P) talitos
>> Call Trace:
>> [ef115bd0] [c0007a04] show_stack+0x44/0x160 (unreliable)
>> [ef115c00] [c00392f0] __schedule_bug+0x80/0x84
>> [ef115c10] [c0541ba0] schedule+0x460/0x638
>> [ef115c90] [c004bb00] do_exit+0x62c/0x6b0
>> [ef115ce0] [c000dfa4] die+0xf0/0x224
>> [ef115d10] [c001523c] bad_page_fault+0x90/0xc8
>> [ef115d20] [c00113a8] handle_page_fault+0x7c/0x80
>> --- Exception: 300 at vma_prio_tree_remove+0x118/0x130
>> LR = __remove_shared_vm_struct+0x60/0x90
>> [ef115de0] [c141c0b8] 0xc141c0b8 (unreliable)
>> [ef115e00] [c00de52c] __remove_shared_vm_struct+0x60/0x90
>> [ef115e10] [c00de59c] unlink_file_vma+0x40/0x5c
>>
>>
>> The interrupt error is MDEU AE (address error), but it's really difficult for me to trace the root cause.
>> I'm not sure why the kernel Oops happens when tried 64 sizes, and it was not always happens, I suspect
>> it was caused by the same reason with error interrupt.
>> Moreover, it's ok to run "./cryptotest -va md5 1 8".
>> Please help me, thanks in advance!
>>
>>
>>
>>
>> Thanks,
>> Xufeng Zhang
>>
>>
>>
>>
>>
>>
>>
>
>--
>David McCullough, dav...@mc..., Ph:+61 734352815
>McAfee - SnapGear http://www.mcafee.com http://www.uCdot.org |