* CONFIG_PREEMPT_RT patch on OSK
@ 2006-11-18 7:47 Dirk Behme
2006-11-30 18:12 ` Eduardo Valentin
0 siblings, 1 reply; 3+ messages in thread
From: Dirk Behme @ 2006-11-18 7:47 UTC (permalink / raw)
To: linux-omap-open-source
[-- Attachment #1: Type: text/plain, Size: 1157 bytes --]
Hi,
after Tony updated to -rc6 (thanks!) I tried latest
CONFIG_PREEMPT_RT patch on OSK. For more details see [1].
First, I applied our clocksource patch [2], then preempt rt
patch [3]. This doesn't apply totally cleanly, it fails in
arch/arm/plat-omap/gpio.c which seems to be different in
mainline and our git. Fixing this and converting some OMAP
specific spinlocks to raw_spinlocks (is this correct?) not
in mainline, system boots. Resulting OMAP specific patch in
attachment, apply it on top of [2] & [3].
Result:
- System boots
- Can play MP3 via NFS, however Oops after MP3 finished [4]
Still not perfect, but a starting point :)
Maybe this is interesting for other people as well,
Dirk
[1] rt.wiki.kernel.org
[2]
http://linux.omap.com/pipermail/linux-omap-open-source/2006-November/008370.html
[3]
http://people.redhat.com/mingo/realtime-preempt/patch-2.6.19-rc6-rt3
[4] Oops after madplay finishes:
kernel BUG at kernel/rtmutex.c:672!
Unable to handle kernel NULL pointer dereference at virtual
address 00000000
pgd = c0004000
[00000000] *pgd=00000000
Internal error: Oops: 817 [#1]
PC is at __bug+0x44/0x58
LR is at rt_up+0x4c/0x6c
[-- Attachment #2: omap_patch-2.6.19-rc6-rt3 --]
[-- Type: text/plain, Size: 8267 bytes --]
Index: linux-osk/arch/arm/mach-omap2/gpmc.c
===================================================================
--- linux-osk.orig/arch/arm/mach-omap2/gpmc.c
+++ linux-osk/arch/arm/mach-omap2/gpmc.c
@@ -61,7 +61,7 @@
static struct resource gpmc_mem_root;
static struct resource gpmc_cs_mem[GPMC_CS_NUM];
-static spinlock_t gpmc_mem_lock = SPIN_LOCK_UNLOCKED;
+static raw_spinlock_t gpmc_mem_lock = SPIN_LOCK_UNLOCKED;
static unsigned gpmc_cs_map;
static void __iomem *gpmc_base =
Index: linux-osk/arch/arm/plat-omap/debug-leds.c
===================================================================
--- linux-osk.orig/arch/arm/plat-omap/debug-leds.c
+++ linux-osk/arch/arm/plat-omap/debug-leds.c
@@ -34,7 +34,7 @@
* one, or both.
*/
-static spinlock_t lock;
+static raw_spinlock_t lock;
static struct h2p2_dbg_fpga __iomem *fpga;
static u16 led_state, hw_led_state;
Index: linux-osk/arch/arm/plat-omap/dma.c
===================================================================
--- linux-osk.orig/arch/arm/plat-omap/dma.c
+++ linux-osk/arch/arm/plat-omap/dma.c
@@ -62,7 +62,7 @@ struct omap_dma_lch {
static int dma_chan_count;
-static spinlock_t dma_chan_lock;
+static raw_spinlock_t dma_chan_lock;
static struct omap_dma_lch dma_chan[OMAP_LOGICAL_DMA_CH_COUNT];
static const u8 omap1_dma_irq[OMAP_LOGICAL_DMA_CH_COUNT] = {
Index: linux-osk/arch/arm/plat-omap/dmtimer.c
===================================================================
--- linux-osk.orig/arch/arm/plat-omap/dmtimer.c
+++ linux-osk/arch/arm/plat-omap/dmtimer.c
@@ -129,7 +129,7 @@ static struct clk *dm_source_clocks[3];
#endif
static const int dm_timer_count = ARRAY_SIZE(dm_timers);
-static spinlock_t dm_timer_lock;
+static raw_spinlock_t dm_timer_lock;
static inline u32 omap_dm_timer_read_reg(struct omap_dm_timer *timer, int reg)
{
Index: linux-osk/arch/arm/plat-omap/dsp/fifo.h
===================================================================
--- linux-osk.orig/arch/arm/plat-omap/dsp/fifo.h
+++ linux-osk/arch/arm/plat-omap/dsp/fifo.h
@@ -22,7 +22,7 @@
*/
struct fifo_struct {
- spinlock_t lock;
+ raw_spinlock_t lock;
char *buf;
size_t sz;
size_t cnt;
Index: linux-osk/arch/arm/plat-omap/dsp/ipbuf.h
===================================================================
--- linux-osk.orig/arch/arm/plat-omap/dsp/ipbuf.h
+++ linux-osk/arch/arm/plat-omap/dsp/ipbuf.h
@@ -79,7 +79,7 @@ extern struct ipbuf_sys *ipbuf_sys_da, *
#define dsp_mem_disable_ipbuf() dsp_mem_disable(ipbcfg.base)
struct ipblink {
- spinlock_t lock;
+ raw_spinlock_t lock;
u16 top;
u16 tail;
};
Index: linux-osk/arch/arm/plat-omap/dsp/mblog.c
===================================================================
--- linux-osk.orig/arch/arm/plat-omap/dsp/mblog.c
+++ linux-osk/arch/arm/plat-omap/dsp/mblog.c
@@ -116,7 +116,7 @@ struct mblogent {
};
static struct {
- spinlock_t lock;
+ raw_spinlock_t lock;
int wp;
unsigned long cnt, cnt_ad, cnt_da;
struct mblogent ent[MBLOG_DEPTH];
Index: linux-osk/arch/arm/plat-omap/dsp/proclist.h
===================================================================
--- linux-osk.orig/arch/arm/plat-omap/dsp/proclist.h
+++ linux-osk/arch/arm/plat-omap/dsp/proclist.h
@@ -27,8 +27,10 @@ struct proc_list {
struct file *file;
};
-static __inline__ void proc_list_add(spinlock_t *lock, struct list_head *list,
- struct task_struct *tsk, struct file *file)
+static __inline__ void proc_list_add(raw_spinlock_t *lock,
+ struct list_head *list,
+ struct task_struct *tsk,
+ struct file *file)
{
struct proc_list *new;
@@ -40,8 +42,10 @@ static __inline__ void proc_list_add(spi
spin_unlock(lock);
}
-static __inline__ void proc_list_del(spinlock_t *lock, struct list_head *list,
- struct task_struct *tsk, struct file *file)
+static __inline__ void proc_list_del(raw_spinlock_t *lock,
+ struct list_head *list,
+ struct task_struct *tsk,
+ struct file *file)
{
struct proc_list *pl;
@@ -64,7 +68,8 @@ static __inline__ void proc_list_del(spi
spin_unlock(lock);
}
-static __inline__ void proc_list_flush(spinlock_t *lock, struct list_head *list)
+static __inline__ void proc_list_flush(raw_spinlock_t *lock,
+ struct list_head *list)
{
struct proc_list *pl;
Index: linux-osk/arch/arm/plat-omap/dsp/task.c
===================================================================
--- linux-osk.orig/arch/arm/plat-omap/dsp/task.c
+++ linux-osk/arch/arm/plat-omap/dsp/task.c
@@ -118,7 +118,7 @@ struct taskdev {
unsigned int usecount;
char name[TNM_LEN];
struct file_operations fops;
- spinlock_t proc_list_lock;
+ raw_spinlock_t proc_list_lock;
struct list_head proc_list;
struct dsptask *task;
@@ -133,7 +133,7 @@ struct taskdev {
/* write stuff */
wait_queue_head_t write_wait_q;
struct mutex write_mutex;
- spinlock_t wsz_lock;
+ raw_spinlock_t wsz_lock;
size_t wsz;
/* tctl stuff */
Index: linux-osk/arch/arm/plat-omap/gpio.c
===================================================================
--- linux-osk.orig/arch/arm/plat-omap/gpio.c
+++ linux-osk/arch/arm/plat-omap/gpio.c
@@ -137,7 +137,7 @@ struct gpio_bank {
u32 saved_fallingdetect;
u32 saved_risingdetect;
#endif
- spinlock_t lock;
+ raw_spinlock_t lock;
};
#define METHOD_MPUIO 0
Index: linux-osk/arch/arm/plat-omap/mcbsp.c
===================================================================
--- linux-osk.orig/arch/arm/plat-omap/mcbsp.c
+++ linux-osk/arch/arm/plat-omap/mcbsp.c
@@ -61,7 +61,7 @@ struct omap_mcbsp {
struct completion tx_dma_completion;
struct completion rx_dma_completion;
- spinlock_t lock;
+ raw_spinlock_t lock;
};
static struct omap_mcbsp mcbsp[OMAP_MAX_MCBSP_COUNT];
Index: linux-osk/drivers/input/touchscreen/ads7846.c
===================================================================
--- linux-osk.orig/drivers/input/touchscreen/ads7846.c
+++ linux-osk/drivers/input/touchscreen/ads7846.c
@@ -100,7 +100,7 @@ struct ads7846 {
u16 debounce_tol;
u16 debounce_rep;
- spinlock_t lock;
+ raw_spinlock_t lock;
struct hrtimer timer;
unsigned pendown:1; /* P: lock */
unsigned pending:1; /* P: lock */
@@ -454,7 +454,7 @@ static void ads7846_rx(void *ads)
ts->spi->dev.bus_id, ts->tc.ignore, Rt);
#endif
hrtimer_start(&ts->timer, ktime_set(0, TS_POLL_PERIOD),
- HRTIMER_REL);
+ HRTIMER_MODE_REL);
return;
}
@@ -473,7 +473,8 @@ static void ads7846_rx(void *ads)
ads7846_sync_events(ts);
}
- hrtimer_start(&ts->timer, ktime_set(0, TS_POLL_PERIOD), HRTIMER_REL);
+ hrtimer_start(&ts->timer, ktime_set(0, TS_POLL_PERIOD),
+ HRTIMER_MODE_REL);
}
static int ads7846_debounce(void *ads, int data_idx, int *val)
@@ -609,7 +610,7 @@ static irqreturn_t ads7846_irq(int irq,
disable_irq(ts->spi->irq);
ts->pending = 1;
hrtimer_start(&ts->timer, ktime_set(0, TS_POLL_DELAY),
- HRTIMER_REL);
+ HRTIMER_MODE_REL);
}
}
spin_unlock_irqrestore(&ts->lock, flags);
@@ -747,7 +748,7 @@ static int __devinit ads7846_probe(struc
ts->input = input_dev;
ts->hwmon = hwmon;
- hrtimer_init(&ts->timer, CLOCK_MONOTONIC, HRTIMER_REL);
+ hrtimer_init(&ts->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
ts->timer.function = ads7846_timer;
spin_lock_init(&ts->lock);
Index: linux-osk/sound/arm/omap/omap-alsa-dma.c
===================================================================
--- linux-osk.orig/sound/arm/omap/omap-alsa-dma.c
+++ linux-osk/sound/arm/omap/omap-alsa-dma.c
@@ -56,6 +56,7 @@
#include <linux/sysrq.h>
#include <linux/interrupt.h>
#include <linux/dma-mapping.h>
+#include <linux/spinlock_types.h>
#include <asm/uaccess.h>
#include <asm/io.h>
@@ -114,7 +115,7 @@
/**************************** DATA STRUCTURES *****************************************/
-static spinlock_t dma_list_lock = SPIN_LOCK_UNLOCKED;
+static raw_spinlock_t dma_list_lock = RAW_SPIN_LOCK_UNLOCKED(dma_list_lock);
static char nr_linked_channels = 1;
[-- Attachment #3: Type: text/plain, Size: 0 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: CONFIG_PREEMPT_RT patch on OSK
2006-11-18 7:47 CONFIG_PREEMPT_RT patch on OSK Dirk Behme
@ 2006-11-30 18:12 ` Eduardo Valentin
2006-11-30 19:43 ` Dirk Behme
0 siblings, 1 reply; 3+ messages in thread
From: Eduardo Valentin @ 2006-11-30 18:12 UTC (permalink / raw)
To: Dirk Behme; +Cc: linux-omap-open-source
Hello Dirk Behme
I'm currently trying to achieve CONFIG_PREEMPT_RT on my OSK5912. As
you already got it working with some success, I'm asking for some
help.
I followed your instructions. Using the last git tree (commit
e4bbd3ec9084824eba003cdf91378138f239d03f):
- I applied the clock source patch
- I applied the 2.6.19-rc6-rt3 patch and corrected the fail in
arch/arm/plat-omap/gpio.c.
- I also applied your changes.
The source compiled without problems, but during the boot process it
fails just after mouting my rootfs. Here are the log messages:
[ 16.717895] IP-Config: Complete:
[ 16.721343] device=eth0, addr=172.18.216.204,
mask=255.255.0.0, gw=255.255.255.255,
[ 16.729858] host=10.0.0.2, domain=, nis-domain=(none),
[ 16.736206] bootserver=255.255.255.255, rootserver=10.0.0.1, rootpath=
[ 16.745910] Looking up port of RPC 100003/2 on 172.18.216.230
[ 16.760009] Looking up port of RPC 100005/1 on 172.18.216.230
[ 16.786193] VFS: Mounted root (nfs filesystem).
[ 16.791900] Freeing init memory: 116K
[ 16.829315] BUG: scheduling while atomic: IRQ 160/0x00000001/709, CPU#0
[ 18.828186] NETDEV WATCHDOG: eth0: transmit timed out
[ 21.828155] NETDEV WATCHDOG: eth0: transmit timed out
Have you already faced this problem? Any missing spinlock
translation to raw_spinlock?
BR,
Eduardo Valentin
On 11/18/06, Dirk Behme <dirk.behme@googlemail.com> wrote:
> Hi,
>
> after Tony updated to -rc6 (thanks!) I tried latest
> CONFIG_PREEMPT_RT patch on OSK. For more details see [1].
>
> First, I applied our clocksource patch [2], then preempt rt
> patch [3]. This doesn't apply totally cleanly, it fails in
> arch/arm/plat-omap/gpio.c which seems to be different in
> mainline and our git. Fixing this and converting some OMAP
> specific spinlocks to raw_spinlocks (is this correct?) not
> in mainline, system boots. Resulting OMAP specific patch in
> attachment, apply it on top of [2] & [3].
>
> Result:
>
> - System boots
> - Can play MP3 via NFS, however Oops after MP3 finished [4]
>
> Still not perfect, but a starting point :)
>
> Maybe this is interesting for other people as well,
>
> Dirk
>
> [1] rt.wiki.kernel.org
>
> [2]
> http://linux.omap.com/pipermail/linux-omap-open-source/2006-November/008370.html
>
> [3]
> http://people.redhat.com/mingo/realtime-preempt/patch-2.6.19-rc6-rt3
>
>
>
> [4] Oops after madplay finishes:
>
> kernel BUG at kernel/rtmutex.c:672!
> Unable to handle kernel NULL pointer dereference at virtual
> address 00000000
> pgd = c0004000
> [00000000] *pgd=00000000
> Internal error: Oops: 817 [#1]
> PC is at __bug+0x44/0x58
> LR is at rt_up+0x4c/0x6c
>
>
>
> Index: linux-osk/arch/arm/mach-omap2/gpmc.c
> ===================================================================
> --- linux-osk.orig/arch/arm/mach-omap2/gpmc.c
> +++ linux-osk/arch/arm/mach-omap2/gpmc.c
> @@ -61,7 +61,7 @@
>
> static struct resource gpmc_mem_root;
> static struct resource gpmc_cs_mem[GPMC_CS_NUM];
> -static spinlock_t gpmc_mem_lock = SPIN_LOCK_UNLOCKED;
> +static raw_spinlock_t gpmc_mem_lock = SPIN_LOCK_UNLOCKED;
> static unsigned gpmc_cs_map;
>
> static void __iomem *gpmc_base =
> Index: linux-osk/arch/arm/plat-omap/debug-leds.c
> ===================================================================
> --- linux-osk.orig/arch/arm/plat-omap/debug-leds.c
> +++ linux-osk/arch/arm/plat-omap/debug-leds.c
> @@ -34,7 +34,7 @@
> * one, or both.
> */
>
> -static spinlock_t lock;
> +static raw_spinlock_t lock;
> static struct h2p2_dbg_fpga __iomem *fpga;
> static u16 led_state, hw_led_state;
>
> Index: linux-osk/arch/arm/plat-omap/dma.c
> ===================================================================
> --- linux-osk.orig/arch/arm/plat-omap/dma.c
> +++ linux-osk/arch/arm/plat-omap/dma.c
> @@ -62,7 +62,7 @@ struct omap_dma_lch {
>
> static int dma_chan_count;
>
> -static spinlock_t dma_chan_lock;
> +static raw_spinlock_t dma_chan_lock;
> static struct omap_dma_lch dma_chan[OMAP_LOGICAL_DMA_CH_COUNT];
>
> static const u8 omap1_dma_irq[OMAP_LOGICAL_DMA_CH_COUNT] = {
> Index: linux-osk/arch/arm/plat-omap/dmtimer.c
> ===================================================================
> --- linux-osk.orig/arch/arm/plat-omap/dmtimer.c
> +++ linux-osk/arch/arm/plat-omap/dmtimer.c
> @@ -129,7 +129,7 @@ static struct clk *dm_source_clocks[3];
> #endif
>
> static const int dm_timer_count = ARRAY_SIZE(dm_timers);
> -static spinlock_t dm_timer_lock;
> +static raw_spinlock_t dm_timer_lock;
>
> static inline u32 omap_dm_timer_read_reg(struct omap_dm_timer *timer, int reg)
> {
> Index: linux-osk/arch/arm/plat-omap/dsp/fifo.h
> ===================================================================
> --- linux-osk.orig/arch/arm/plat-omap/dsp/fifo.h
> +++ linux-osk/arch/arm/plat-omap/dsp/fifo.h
> @@ -22,7 +22,7 @@
> */
>
> struct fifo_struct {
> - spinlock_t lock;
> + raw_spinlock_t lock;
> char *buf;
> size_t sz;
> size_t cnt;
> Index: linux-osk/arch/arm/plat-omap/dsp/ipbuf.h
> ===================================================================
> --- linux-osk.orig/arch/arm/plat-omap/dsp/ipbuf.h
> +++ linux-osk/arch/arm/plat-omap/dsp/ipbuf.h
> @@ -79,7 +79,7 @@ extern struct ipbuf_sys *ipbuf_sys_da, *
> #define dsp_mem_disable_ipbuf() dsp_mem_disable(ipbcfg.base)
>
> struct ipblink {
> - spinlock_t lock;
> + raw_spinlock_t lock;
> u16 top;
> u16 tail;
> };
> Index: linux-osk/arch/arm/plat-omap/dsp/mblog.c
> ===================================================================
> --- linux-osk.orig/arch/arm/plat-omap/dsp/mblog.c
> +++ linux-osk/arch/arm/plat-omap/dsp/mblog.c
> @@ -116,7 +116,7 @@ struct mblogent {
> };
>
> static struct {
> - spinlock_t lock;
> + raw_spinlock_t lock;
> int wp;
> unsigned long cnt, cnt_ad, cnt_da;
> struct mblogent ent[MBLOG_DEPTH];
> Index: linux-osk/arch/arm/plat-omap/dsp/proclist.h
> ===================================================================
> --- linux-osk.orig/arch/arm/plat-omap/dsp/proclist.h
> +++ linux-osk/arch/arm/plat-omap/dsp/proclist.h
> @@ -27,8 +27,10 @@ struct proc_list {
> struct file *file;
> };
>
> -static __inline__ void proc_list_add(spinlock_t *lock, struct list_head *list,
> - struct task_struct *tsk, struct file *file)
> +static __inline__ void proc_list_add(raw_spinlock_t *lock,
> + struct list_head *list,
> + struct task_struct *tsk,
> + struct file *file)
> {
> struct proc_list *new;
>
> @@ -40,8 +42,10 @@ static __inline__ void proc_list_add(spi
> spin_unlock(lock);
> }
>
> -static __inline__ void proc_list_del(spinlock_t *lock, struct list_head *list,
> - struct task_struct *tsk, struct file *file)
> +static __inline__ void proc_list_del(raw_spinlock_t *lock,
> + struct list_head *list,
> + struct task_struct *tsk,
> + struct file *file)
> {
> struct proc_list *pl;
>
> @@ -64,7 +68,8 @@ static __inline__ void proc_list_del(spi
> spin_unlock(lock);
> }
>
> -static __inline__ void proc_list_flush(spinlock_t *lock, struct list_head *list)
> +static __inline__ void proc_list_flush(raw_spinlock_t *lock,
> + struct list_head *list)
> {
> struct proc_list *pl;
>
> Index: linux-osk/arch/arm/plat-omap/dsp/task.c
> ===================================================================
> --- linux-osk.orig/arch/arm/plat-omap/dsp/task.c
> +++ linux-osk/arch/arm/plat-omap/dsp/task.c
> @@ -118,7 +118,7 @@ struct taskdev {
> unsigned int usecount;
> char name[TNM_LEN];
> struct file_operations fops;
> - spinlock_t proc_list_lock;
> + raw_spinlock_t proc_list_lock;
> struct list_head proc_list;
> struct dsptask *task;
>
> @@ -133,7 +133,7 @@ struct taskdev {
> /* write stuff */
> wait_queue_head_t write_wait_q;
> struct mutex write_mutex;
> - spinlock_t wsz_lock;
> + raw_spinlock_t wsz_lock;
> size_t wsz;
>
> /* tctl stuff */
> Index: linux-osk/arch/arm/plat-omap/gpio.c
> ===================================================================
> --- linux-osk.orig/arch/arm/plat-omap/gpio.c
> +++ linux-osk/arch/arm/plat-omap/gpio.c
> @@ -137,7 +137,7 @@ struct gpio_bank {
> u32 saved_fallingdetect;
> u32 saved_risingdetect;
> #endif
> - spinlock_t lock;
> + raw_spinlock_t lock;
> };
>
> #define METHOD_MPUIO 0
> Index: linux-osk/arch/arm/plat-omap/mcbsp.c
> ===================================================================
> --- linux-osk.orig/arch/arm/plat-omap/mcbsp.c
> +++ linux-osk/arch/arm/plat-omap/mcbsp.c
> @@ -61,7 +61,7 @@ struct omap_mcbsp {
> struct completion tx_dma_completion;
> struct completion rx_dma_completion;
>
> - spinlock_t lock;
> + raw_spinlock_t lock;
> };
>
> static struct omap_mcbsp mcbsp[OMAP_MAX_MCBSP_COUNT];
> Index: linux-osk/drivers/input/touchscreen/ads7846.c
> ===================================================================
> --- linux-osk.orig/drivers/input/touchscreen/ads7846.c
> +++ linux-osk/drivers/input/touchscreen/ads7846.c
> @@ -100,7 +100,7 @@ struct ads7846 {
> u16 debounce_tol;
> u16 debounce_rep;
>
> - spinlock_t lock;
> + raw_spinlock_t lock;
> struct hrtimer timer;
> unsigned pendown:1; /* P: lock */
> unsigned pending:1; /* P: lock */
> @@ -454,7 +454,7 @@ static void ads7846_rx(void *ads)
> ts->spi->dev.bus_id, ts->tc.ignore, Rt);
> #endif
> hrtimer_start(&ts->timer, ktime_set(0, TS_POLL_PERIOD),
> - HRTIMER_REL);
> + HRTIMER_MODE_REL);
> return;
> }
>
> @@ -473,7 +473,8 @@ static void ads7846_rx(void *ads)
> ads7846_sync_events(ts);
> }
>
> - hrtimer_start(&ts->timer, ktime_set(0, TS_POLL_PERIOD), HRTIMER_REL);
> + hrtimer_start(&ts->timer, ktime_set(0, TS_POLL_PERIOD),
> + HRTIMER_MODE_REL);
> }
>
> static int ads7846_debounce(void *ads, int data_idx, int *val)
> @@ -609,7 +610,7 @@ static irqreturn_t ads7846_irq(int irq,
> disable_irq(ts->spi->irq);
> ts->pending = 1;
> hrtimer_start(&ts->timer, ktime_set(0, TS_POLL_DELAY),
> - HRTIMER_REL);
> + HRTIMER_MODE_REL);
> }
> }
> spin_unlock_irqrestore(&ts->lock, flags);
> @@ -747,7 +748,7 @@ static int __devinit ads7846_probe(struc
> ts->input = input_dev;
> ts->hwmon = hwmon;
>
> - hrtimer_init(&ts->timer, CLOCK_MONOTONIC, HRTIMER_REL);
> + hrtimer_init(&ts->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
> ts->timer.function = ads7846_timer;
>
> spin_lock_init(&ts->lock);
> Index: linux-osk/sound/arm/omap/omap-alsa-dma.c
> ===================================================================
> --- linux-osk.orig/sound/arm/omap/omap-alsa-dma.c
> +++ linux-osk/sound/arm/omap/omap-alsa-dma.c
> @@ -56,6 +56,7 @@
> #include <linux/sysrq.h>
> #include <linux/interrupt.h>
> #include <linux/dma-mapping.h>
> +#include <linux/spinlock_types.h>
>
> #include <asm/uaccess.h>
> #include <asm/io.h>
> @@ -114,7 +115,7 @@
>
> /**************************** DATA STRUCTURES *****************************************/
>
> -static spinlock_t dma_list_lock = SPIN_LOCK_UNLOCKED;
> +static raw_spinlock_t dma_list_lock = RAW_SPIN_LOCK_UNLOCKED(dma_list_lock);
>
> static char nr_linked_channels = 1;
>
>
>
>
> _______________________________________________
> Linux-omap-open-source mailing list
> Linux-omap-open-source@linux.omap.com
> http://linux.omap.com/mailman/listinfo/linux-omap-open-source
>
>
>
--
Eduardo Bezerra Valentin
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: CONFIG_PREEMPT_RT patch on OSK
2006-11-30 18:12 ` Eduardo Valentin
@ 2006-11-30 19:43 ` Dirk Behme
0 siblings, 0 replies; 3+ messages in thread
From: Dirk Behme @ 2006-11-30 19:43 UTC (permalink / raw)
To: Eduardo Valentin, linux-omap-open-source
Eduardo Valentin wrote:
> [ 16.829315] BUG: scheduling while atomic: IRQ 160/0x00000001/709, CPU#0
> [ 18.828186] NETDEV WATCHDOG: eth0: transmit timed out
> [ 21.828155] NETDEV WATCHDOG: eth0: transmit timed out
>
> Have you already faced this problem?
As mentioned in [1] I doubt ethernet as well. For test
purposes I boot using ramdisk instead of NFS, so I had no
network/NFS access at boot time. Then, I manually mounted
NFS from user space and played MP3 via NFS [1].
Anybody with a hint for non-experts what "BUG: scheduling
while atomic" wants to tell us? Any idea what is wrong here?
IRQ 160 is our GPIO eth0 interrupt.
Dirk
[1]
http://linux.omap.com/pipermail/linux-omap-open-source/2006-November/008490.html
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2006-11-30 19:43 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-11-18 7:47 CONFIG_PREEMPT_RT patch on OSK Dirk Behme
2006-11-30 18:12 ` Eduardo Valentin
2006-11-30 19:43 ` Dirk Behme
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox