From: James Nelson <james4765@cwazy.co.uk>
To: linux-kernel@vger.kernel.org, linuxppc-dev@ozlabs.org
Cc: paulus@samba.org, James Nelson <james4765@cwazy.co.uk>
Subject: [RESEND] [PATCH 2/7] ppc: remove cli()/sti() in arch/ppc/8xx_io/cs4218_tdm.c
Date: Sat, 8 Jan 2005 11:04:07 -0600 [thread overview]
Message-ID: <20050108170424.32690.35671.32729@localhost.localdomain> (raw)
In-Reply-To: <20050108170406.32690.36989.11853@localhost.localdomain>
Replace save_flags()/resore_flags() with spin_lock_irqsave()/spin_unlock_irqrestore()
and document reasons for locking.
Signed-off-by: James Nelson <james4765@gmail.com>
diff -urN --exclude='*~' linux-2.6.10-mm1-original/arch/ppc/8xx_io/cs4218_tdm.c linux-2.6.10-mm1/arch/ppc/8xx_io/cs4218_tdm.c
--- linux-2.6.10-mm1-original/arch/ppc/8xx_io/cs4218_tdm.c 2004-12-24 16:33:51.000000000 -0500
+++ linux-2.6.10-mm1/arch/ppc/8xx_io/cs4218_tdm.c 2005-01-07 19:46:23.267111848 -0500
@@ -55,6 +55,8 @@
static char **sound_buffers = NULL;
static char **sound_read_buffers = NULL;
+static spinlock_t cs4218_lock = SPIN_LOCK_UNLOCKED;
+
/* Local copies of things we put in the control register. Output
* volume, like most codecs is really attenuation.
*/
@@ -1206,7 +1208,8 @@
volatile cbd_t *bdp;
volatile cpm8xx_t *cp;
- save_flags(flags); cli();
+ /* Protect buffer */
+ spin_lock_irqsave(&cs4218_lock, flags);
#if 0
if (awacs_beep_state) {
/* sound takes precedence over beeps */
@@ -1263,7 +1266,7 @@
++sq.active;
}
- restore_flags(flags);
+ spin_unlock_irqrestore(&cs4218_lock, flags);
}
@@ -1275,7 +1278,8 @@
if (read_sq.active)
return;
- save_flags(flags); cli();
+ /* Protect buffer */
+ spin_lock_irqsave(&cs4218_lock, flags);
/* This is all we have to do......Just start it up.
*/
@@ -1284,7 +1288,7 @@
read_sq.active = 1;
- restore_flags(flags);
+ spin_unlock_irqrestore(&cs4218_lock, flags);
}
@@ -1365,14 +1369,15 @@
{
unsigned long flags;
- save_flags(flags); cli();
+ /* not sure if this is needed, since hardware command is #if 0'd */
+ spin_lock_irqsave(&cs4218_lock, flags);
if (beep_playing) {
#if 0
st_le16(&beep_dbdma_cmd->command, DBDMA_STOP);
#endif
beep_playing = 0;
}
- restore_flags(flags);
+ spin_unlock_irqrestore(&cs4218_lock, flags);
}
static struct timer_list beep_timer = TIMER_INITIALIZER(cs_nosound, 0, 0);
@@ -1401,21 +1406,22 @@
return;
#endif
}
- save_flags(flags); cli();
+ /* lock while modifying beep_timer */
+ spin_lock_irqsave(&cs4218_lock, flags);
del_timer(&beep_timer);
if (ticks) {
beep_timer.expires = jiffies + ticks;
add_timer(&beep_timer);
}
if (beep_playing || sq.active || beep_buf == NULL) {
- restore_flags(flags);
+ spin_unlock_irqrestore(&cs4218_lock, flags);
return; /* too hard, sorry :-( */
}
beep_playing = 1;
#if 0
st_le16(&beep_dbdma_cmd->command, OUTPUT_MORE + BR_ALWAYS);
#endif
- restore_flags(flags);
+ spin_unlock_irqrestore(&cs4218_lock, flags);
if (hz == beep_hz_cache && beep_volume == beep_volume_cache) {
nsamples = beep_nsamples_cache;
@@ -1442,7 +1448,7 @@
st_le32(&beep_dbdma_cmd->phy_addr, virt_to_bus(beep_buf));
awacs_beep_state = 1;
- save_flags(flags); cli();
+ spin_lock_irqsave(&cs4218_lock, flags);
if (beep_playing) { /* i.e. haven't been terminated already */
out_le32(&awacs_txdma->control, (RUN|WAKE|FLUSH|PAUSE) << 16);
out_le32(&awacs->control,
@@ -1452,8 +1458,8 @@
out_le32(&awacs_txdma->cmdptr, virt_to_bus(beep_dbdma_cmd));
out_le32(&awacs_txdma->control, RUN | (RUN << 16));
}
+ spin_unlock_irqrestore(&cs4218_lock, flags);
#endif
- restore_flags(flags);
}
static MACHINE mach_cs4218 = {
next prev parent reply other threads:[~2005-01-08 17:05 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-01-08 17:03 [RESEND] [PATCH 0/7] ppc: remove cli()/sti() from arch/ppc/* James Nelson
2005-01-08 17:03 ` [RESEND] [PATCH 1/7] ppc: remove cli()/sti() in arch/ppc/4xx_io/serial_sicc.c James Nelson
2005-01-08 17:04 ` James Nelson [this message]
2005-01-08 17:04 ` [RESEND] [PATCH 3/7] ppc: remove cli()/sti() in arch/ppc/8xx_io/fec.c James Nelson
2005-01-10 11:56 ` Marcelo Tosatti
2005-01-08 17:04 ` [RESEND] [PATCH 4/7] ppc: remove cli()/sti() in arch/ppc/platforms/apus_setup.c James Nelson
2005-01-08 17:04 ` [RESEND] [PATCH 5/7] ppc: remove cli()/sti() in arch/ppc/platforms/pal4_setup.c James Nelson
2005-01-08 17:04 ` [RESEND] [PATCH 6/7] ppc: remove cli()/sti() in arch/ppc/syslib/m8xx_setup.c James Nelson
2005-01-08 17:04 ` [RESEND] [PATCH 7/7] ppc: remove cli()/sti() in arch/ppc/syslib/qspan_pci.c James Nelson
2005-01-11 22:46 ` [RESEND] [PATCH 0/7] ppc: remove cli()/sti() from arch/ppc/* Tom Rini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20050108170424.32690.35671.32729@localhost.localdomain \
--to=james4765@cwazy.co.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@ozlabs.org \
--cc=paulus@samba.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).