Messages in this thread Patch in this message | | | Date | Fri, 19 Sep 2003 12:49:54 -0700 | From | Chris Wright <> | Subject | Re: [PATCH 2/13] use cpu_relax() in busy loop |
| |
* Arjan van de Ven (arjanv@redhat.com) wrote: > ehmmm how about making this use mdelay instead ? > (not to speak of maybe making it sleep, but that's a less obvious > transformation)
I didn't want to change to sleep semantics of the call w/out better review of spinlocks held/irq disabled, etc. But, after feedback from Mitch, looks like these were only called during module init/exit. This look ok?
thanks, -chris
[PATCH 2/13] use schedule_timeout() instead of busy loop
Replace fore200e_spin() busy loops with schedule_timeout().
===== fore200e.c 1.19 vs edited ===== --- 1.19/drivers/atm/fore200e.c Tue Sep 2 11:07:59 2003 +++ edited/fore200e.c Fri Sep 19 12:24:15 2003 @@ -229,7 +229,8 @@ u32 hb1, hb2; hb1 = fore200e->bus->read(&fore200e->cp_queues->heartbeat); - fore200e_spin(10); + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(10 * HZ/1000); hb2 = fore200e->bus->read(&fore200e->cp_queues->heartbeat); if (hb2 <= hb1) { @@ -244,14 +245,6 @@ #endif -static void -fore200e_spin(int msecs) -{ - unsigned long timeout = jiffies + MSECS(msecs); - while (time_before(jiffies, timeout)); -} - - static int fore200e_poll(struct fore200e* fore200e, volatile u32* addr, u32 val, int msecs) { @@ -551,7 +544,8 @@ fore200e_pca_reset(struct fore200e* fore200e) { writel(PCA200E_HCR_RESET, fore200e->regs.pca.hcr); - fore200e_spin(10); + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(10 * HZ/1000); writel(0, fore200e->regs.pca.hcr); } @@ -831,7 +825,8 @@ fore200e_sba_reset(struct fore200e* fore200e) { fore200e->bus->write(SBA200E_HCR_RESET, fore200e->regs.sba.hcr); - fore200e_spin(10); + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(10 * HZ/1000); fore200e->bus->write(0, fore200e->regs.sba.hcr); } - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |