Messages in this thread Patch in this message | | | Date | Wed, 18 Jun 2003 17:48:17 -0400 | From | "John Stoffel" <> | Subject | [PATCH CYCLADES 1/2] fix cli()/sti() for ISA Cyclom-Y boards |
| |
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/
| |