[PATCH CYCLADES 1/2] fix cli()/sti() for ISA Cyclom-Y boards

John Stoffel (stoffel@lucent.com)
Wed, 18 Jun 2003 17:48:17 -0400


Hi Linus,

This trivially fixes the cyclades driver under ISA to get rid of the
cli()/sti() locking and use a spin lock as described in the
Documentation/cli-sti-removal.txt instructions. I'm using this on an
SMP system without any problems so far.

Thanks,
John
john@stoffel.org

diff -ur l-2.5.72/drivers/char/cyclades.c l-2.5.72-cyclades/drivers/char/cyclades.c
--- l-2.5.72/drivers/char/cyclades.c Wed Jun 18 10:26:21 2003
+++ l-2.5.72-cyclades/drivers/char/cyclades.c Wed Jun 18 17:33:06 2003
@@ -867,6 +867,7 @@
static int cyz_issue_cmd(struct cyclades_card *, uclong, ucchar, uclong);
#ifdef CONFIG_ISA
static unsigned detect_isa_irq (volatile ucchar *);
+spinlock_t isa_card_lock = SPIN_LOCK_UNLOCKED;
#endif /* CONFIG_ISA */

static int cyclades_get_proc_info(char *, char **, off_t , int , int *, void *);
@@ -1050,14 +1051,14 @@
udelay(5000L);

/* Enable the Tx interrupts on the CD1400 */
- save_flags(flags); cli();
+ spin_lock_irqsave(&isa_card_lock,flags);
cy_writeb((u_long)address + (CyCAR<<index), 0);
cyy_issue_cmd(address, CyCHAN_CTL|CyENB_XMTR, index);

cy_writeb((u_long)address + (CyCAR<<index), 0);
cy_writeb((u_long)address + (CySRER<<index),
cy_readb(address + (CySRER<<index)) | CyTxRdy);
- restore_flags(flags);
+ spin_unlock_irqrestore(&isa_card_lock, flags);

/* Wait ... */
udelay(5000L);
@@ -5675,13 +5676,13 @@
}
#endif /* CONFIG_CYZ_INTR */

- save_flags(flags); cli();
+ spin_lock_irqsave(&isa_card_lock, flags);

if ((e1 = tty_unregister_driver(cy_serial_driver)))
printk("cyc: failed to unregister Cyclades serial driver(%d)\n",
e1);

- restore_flags(flags);
+ spin_unlock_irqrestore(&isa_card_lock,flags);
put_tty_driver(cy_serial_driver);

for (i = 0; i < NR_CARDS; i++) {
-
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/