[lkml]   [2009]   [Feb]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: help! locks problem in block layer request queue?
    On Thu, Feb 19 2009, Gao, Yunpeng wrote:
    > Hi all,
    > Sorry for the too long email. But I encountered a kernle OOP problem
    > when testing my standalone NAND block driver (it's almost a normal
    > block device driver) and not sure why this happen.
    > In my development environment, the linux 2.6.27 kernel boot with
    > initrd, then 'chroot' to an MMC card. After chroot, I try to mkfs.ext3
    > on NAND device. but it caused the kernel OOP message. If I mkfs.ext3
    > on NAND device before chroot, then it works well (it can mount/umount,
    > copy file correctly accross system reboot).
    > Below is the log message (/dev/mmcblk0 is the MMC card device node,
    > and /dev/nda is the NAND flash device node) and part of the driver
    > code.
    > From the OOP message, It seems there's improper usage of locks in my
    > driver code, but actually, there only one spinlock used in the driver
    > (spinlock_t qlock defined in struct spectra_nand_dev). And it only
    > used by registered request queue. Also, I used a semaphore
    > ('spectra_sem') to prevent the low layer function from being
    > re-entered. As the low layer (hardware layer) now works in PIO mode
    > and it's very slowly, so maybe it holds the spinlock or semaphore for
    > too long time?

    You call the bvec_kmap_irq() and then call a function that does a
    down(). This is illegal, as you cannot block/schedule with interrupts

    Jens Axboe

     \ /
      Last update: 2009-02-19 14:19    [W:2.234 / U:2.424 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site