lkml.org 
[lkml]   [2011]   [Aug]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: shm broken on MIPS in current -git
    From
    On Mon, Aug 1, 2011 at 3:39 PM, Vasiliy Kulikov <segoon@openwall.com> wrote:
    > Manuel,
    >
    > On Mon, Aug 01, 2011 at 14:51 +0200, Manuel Lauss wrote:
    >> CPU 0 Unable to handle kernel paging request at virtual address
    >> 00000000, epc == 80527c64, ra == 8024afb8
    >> Oops[#1]:
    > [...]
    >> epc   : 80527c64 __down_write_nested+0x68/0xf0
    >
    > Could you post the asm code of __down_write_nested() of your image?
    > What pointer is NULL?  Looks like MIPS handles namespaces in usermode
    > helpers other way.

    I'm no MIPS expert, but this looks like a problem with the waiter_list
    in struct rw_semaphore:

    Dump of assembler code for function __down_write_nested:
    0x80530ee4 <+0>: addiu sp,sp,-48
    0x80530ee8 <+4>: sw ra,44(sp)
    0x80530eec <+8>: sw s1,40(sp)
    0x80530ef0 <+12>: sw s0,36(sp)
    0x80530ef4 <+16>: mfc0 v1,c0_status
    0x80530ef8 <+20>: ori at,v1,0x1f
    0x80530efc <+24>: xori at,at,0x1f
    0x80530f00 <+28>: mtc0 at,c0_status
    0x80530f04 <+32>: lw v0,0(a0)
    0x80530f08 <+36>: beqz v0,0x80530fa4 <__down_write_nested+192>
    0x80530f0c <+40>: addiu a2,a0,4
    tsk = current:
    0x80530f10 <+44>: lw s0,0(gp)
    set_task_state(tsk, UNINTERRUPTIBLE):
    0x80530f14 <+48>: li v0,2
    0x80530f18 <+52>: sw v0,0(s0)
    waiter.tsk = tsk, ...
    0x80530f1c <+56>: sw v0,28(sp)
    0x80530f20 <+60>: sw s0,24(sp)
    get_task_struct():
    0x80530f24 <+64>: addiu v0,s0,8
    0x80530f28 <+68>: ll a1,0(v0)
    0x80530f2c <+72>: addiu a1,a1,1
    0x80530f30 <+76>: sc a1,0(v0)
    0x80530f34 <+80>: beqz a1,0x80530f28 <__down_write_nested+68>
    list_add_tail:
    0x80530f38 <+84>: addiu a1,sp,16 ; a1 = &waiter.list
    0x80530f3c <+88>: lw v0,8(a0) ; v0 = &sem->wait_list
    0x80530f40 <+92>: sw a1,8(a0)
    0x80530f44 <+96>: sw a2,16(sp)
    0x80530f48 <+100>: sw v0,20(sp)
    0x80530f4c <+104>: sw a1,0(v0) <===== oops here, because v0 = 0
    spin_unlock_irqrestore:
    0x80530f50 <+108>: mfc0 at,c0_status
    0x80530f54 <+112>: andi v1,v1,0x1
    0x80530f58 <+116>: ori at,at,0x1f
    0x80530f5c <+120>: xori at,at,0x1f
    0x80530f60 <+124>: or v1,v1,at
    0x80530f64 <+128>: mtc0 v1,c0_status
    [...]
    0x80530f68 <+132>: lw v0,24(sp)
    0x80530f6c <+136>: beqz v0,0x80530f8c <__down_write_nested+168>
    0x80530f70 <+140>: li s1,2
    0x80530f74 <+144>: jal 0x8052ef94 <schedule>
    0x80530f78 <+148>: nop
    0x80530f7c <+152>: sw s1,0(s0)
    0x80530f80 <+156>: lw v0,24(sp)
    0x80530f84 <+160>: bnez v0,0x80530f74 <__down_write_nested+144>
    0x80530f88 <+164>: nop
    0x80530f8c <+168>: sw zero,0(s0)
    0x80530f90 <+172>: lw ra,44(sp)
    0x80530f94 <+176>: lw s1,40(sp)
    0x80530f98 <+180>: lw s0,36(sp)
    0x80530f9c <+184>: jr ra
    0x80530fa0 <+188>: addiu sp,sp,48
    0x80530fa4 <+192>: lw v0,4(a0)
    0x80530fa8 <+196>: bne v0,a2,0x80530f10 <__down_write_nested+44>
    0x80530fac <+200>: li a1,-1
    0x80530fb0 <+204>: sw a1,0(a0)
    0x80530fb4 <+208>: mfc0 at,c0_status
    0x80530fb8 <+212>: andi v1,v1,0x1
    0x80530fbc <+216>: ori at,at,0x1f
    0x80530fc0 <+220>: xori at,at,0x1f
    0x80530fc4 <+224>: or v1,v1,at
    0x80530fc8 <+228>: mtc0 v1,c0_status
    0x80530fcc <+232>: j 0x80530f94 <__down_write_nested+176>
    0x80530fd0 <+236>: lw ra,44(sp)


    Manuel Lauss
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2011-08-01 17:01    [W:0.025 / U:0.592 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site