diff options
author | Krzysztof Hałasa <khc@pm.waw.pl> | 2010-05-03 23:22:06 +0200 |
---|---|---|
committer | Krzysztof Hałasa <khc@pm.waw.pl> | 2011-02-06 16:49:48 +0100 |
commit | 3c3a3b4c12bdda8dd098fcdd4499a298548d6f31 (patch) | |
tree | e283e6385de58720ce5a6f4b003ef33623b61139 | |
parent | ebf53826e105f488f4f628703a108e98940d1dc5 (diff) | |
download | op-kernel-dev-3c3a3b4c12bdda8dd098fcdd4499a298548d6f31.zip op-kernel-dev-3c3a3b4c12bdda8dd098fcdd4499a298548d6f31.tar.gz |
IXP4xx: Fix qmgr_release_queue() flushing unexpected queue entries.
Queues should be empty when released, if not, there is a safety valve.
Make sure the queue is usable after it triggers.
Signed-off-by: Krzysztof Hałasa <khc@pm.waw.pl>
-rw-r--r-- | arch/arm/mach-ixp4xx/ixp4xx_qmgr.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c b/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c index bfdbe4b..852f7c9 100644 --- a/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c +++ b/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c @@ -265,6 +265,11 @@ void qmgr_release_queue(unsigned int queue) qmgr_queue_descs[queue], queue); qmgr_queue_descs[queue][0] = '\x0'; #endif + + while ((addr = qmgr_get_entry(queue))) + printk(KERN_ERR "qmgr: released queue %i not empty: 0x%08X\n", + queue, addr); + __raw_writel(0, &qmgr_regs->sram[queue]); used_sram_bitmap[0] &= ~mask[0]; @@ -275,10 +280,6 @@ void qmgr_release_queue(unsigned int queue) spin_unlock_irq(&qmgr_lock); module_put(THIS_MODULE); - - while ((addr = qmgr_get_entry(queue))) - printk(KERN_ERR "qmgr: released queue %i not empty: 0x%08X\n", - queue, addr); } static int qmgr_init(void) |