Re: Searching a Bug on Raspberry Pi

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Tom,

the problem occurs even if i set enable_llm=0. The while loop is now not touched and the rpi deadlocks too.

As far as i understand it, the sdhci.c is the base for all sdhci card readers and the sdhci-*.c implement the ops for the specific hardware.

My problem is, that i dont have an other sdhci card reader here. It wont be possible to boot from, but i could try to read from it on a rt kernel. If i compile the sdhci_bcm2708 as a module, i could not get a device info from the rpi reader. Maybe an other reader works, then the real problem sits in sdhci_bcm2708.c (or at bad luck, it shows an bigger problem in sdhci.c).

Georg


Am 29.06.2013 23:36, schrieb Tom Cook:
This is as far as I've got too.  I think you need to make the while loop
conditional on CONFIG_PREEMPT_RT_FULL but I haven't had a chance to try it.

Tom

On 29 Jun 2013 21:16, "Georg Gast" <georg@xxxxxxxxxxxxxxxx
<mailto:georg@xxxxxxxxxxxxxxxx>> wrote:

    Hi there!

    Currently i try to locate a bug in drivers/mmc/host/sdhci.c on
    RaspberryPi. I know it is not the mainline kernel...

    Currently i use Kernel 3.8.13 and RT Patch 3.8.13-rt12 on the kernel
    found at git://github.com/raspberrypi/__linux.git
    <http://github.com/raspberrypi/linux.git> on branch rpi-3.8.y.

    The bug shows up at booting and after 3 seconds of booting as it
    wants to mount the rootfs in a deadlock. as i compiled sdhci_bcm2708
    as a module i can boot the kernel and system as i pushed the system
    to a usb stick. As far as good.

    Now i try to find the bug, if the rootfs is on the sdcard. I narrowd
    the deadlock down to the following lines:

    void sdhci_spin_lock_irqsave(struct sdhci_host *host,unsigned long
    *flags)
    {
         return;
    #ifdef CONFIG_PREEMPT
         if(enable_llm)
         {
             while(sdhci_locked)
             {
                 preempt_schedule();
             }
             spin_lock_irqsave(&host->lock,__*flags);
             disable_irq(host->irq);
             if(host->second_irq)
                 disable_irq(host->second_irq);
             local_irq_enable();
         }
         else
    #endif
             spin_lock_irqsave(&host->lock,__*flags);
    }

    void sdhci_spin_unlock_irqrestore(__struct sdhci_host *host,unsigned
    long flags)
    {
         return;
    #ifdef CONFIG_PREEMPT
         if(enable_llm)
         {
             local_irq_disable();
             if(host->second_irq)
                 enable_irq(host->second_irq);
             enable_irq(host->irq);
         }
    #endif
         spin_unlock_irqrestore(&host->__lock,flags);
    }

    in drivers/mmc/host/sdhci.c . The both return statements are added
    by me. Now i can boot the RT Preempt kernel but it is for sure not
    the right fix.

    My problem is, that i dont know how those both functions should work
    with the rt preempt patch.

    What can you suggest me to fix that deadlock? I already bought the
    book "Linux Kernel Development" but i dont know how the kernel works
    exaktly with the PREEMPT patch. Can you point me to a site which
    shows how RTPREEMPT works in the irqsave/restore functions or can
    you please describe it to me?

    Thank you
    Georg
    --
    To unsubscribe from this list: send the line "unsubscribe
    linux-rt-users" in
    the body of a message to majordomo@xxxxxxxxxxxxxxx
    <mailto:majordomo@xxxxxxxxxxxxxxx>
    More majordomo info at http://vger.kernel.org/__majordomo-info.html
    <http://vger.kernel.org/majordomo-info.html>


--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux