On 06/30/2013 06:42 AM, Georg Gast wrote: > 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 > Here's a quick and dirty hack to get things going. Regards, Jeremy
--- linux/drivers/mmc/host/sdhci.c 2013-07-03 11:54:06.306455988 +0200 +++ linux-rt/drivers/mmc/host/sdhci.c 2013-07-03 16:49:33.298601044 +0200 @@ -162,9 +162,17 @@ preempt_schedule(); } spin_lock_irqsave(&host->lock,*flags); +#ifdef CONFIG_PREEMPT_RT_FULL + disable_irq_nosync(host->irq); +#else disable_irq(host->irq); +#endif if(host->second_irq) +#ifdef CONFIG_PREEMPT_RT_FULL + disable_irq_nosync(host->second_irq); +#else disable_irq(host->second_irq); +#endif local_irq_enable(); } else @@ -1834,7 +1842,11 @@ host = mmc_priv(mmc); sdhci_runtime_pm_get(host); +#ifdef CONFIG_PREEMPT_RT_FULL + disable_irq_nosync(host->irq); +#else disable_irq(host->irq); +#endif spin_lock(&host->lock); ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); @@ -1935,7 +1947,11 @@ wait_event_interruptible_timeout(host->buf_ready_int, (host->tuning_done == 1), msecs_to_jiffies(50)); +#ifdef CONFIG_PREEMPT_RT_FULL + disable_irq_nosync(host->irq); +#else disable_irq(host->irq); +#endif spin_lock(&host->lock); if (!host->tuning_done) {