2002-07-28 20:23:48

by Muli Ben-Yehuda

[permalink] [raw]
Subject: [PATCH] 2.5.29 sound/oss/trident.c [2/2] remove cli/sti calls

Hello,

This patch replaces the cli/sti calls in the trident.c driver with
spin_lock_irqsave/spin_unlock_irqrestore.

Patch is against 2.5.29 (latest bitkeeper), compiled and
tested. Please apply.

# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
# ChangeSet 1.480 -> 1.481
# sound/oss/trident.c 1.23 -> 1.24
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/07/28 [email protected] 1.481
# get rid of cli/sti
# --------------------------------------------
#
diff -Nru a/sound/oss/trident.c b/sound/oss/trident.c
--- a/sound/oss/trident.c Sun Jul 28 23:09:05 2002
+++ b/sound/oss/trident.c Sun Jul 28 23:09:05 2002
@@ -768,9 +768,8 @@
* Keep interrupts off for the configure - we don't want to
* clash with another cyberpro config event
*/
-
- save_flags(flags);
- cli();
+
+ spin_lock_irqsave(&card->lock, flags);
portDat = cyber_inidx(CYBER_PORT_AUDIO, CYBER_IDX_AUDIO_ENABLE);
/* enable, if it was disabled */
if( (portDat & CYBER_BMSK_AUENZ) != CYBER_BMSK_AUENZ_ENABLE ) {
@@ -795,7 +794,7 @@
cyber_outidx( CYBER_PORT_AUDIO, 0xb3, 0x06 );
cyber_outidx( CYBER_PORT_AUDIO, 0xbf, 0x00 );
}
- restore_flags(flags);
+ spin_unlock_irqrestore(&card->lock, flags);
return ret;
}

@@ -3502,9 +3501,8 @@
unsigned long flags;
int i, j;

- save_flags(flags);
- cli();
-
+ spin_lock_irqsave(&card->lock, flags);
+
ali_registers.global_regs[0x2c] = inl(TRID_REG(card,T4D_MISCINT));
//ali_registers.global_regs[0x20] = inl(TRID_REG(card,T4D_START_A));
ali_registers.global_regs[0x21] = inl(TRID_REG(card,T4D_STOP_A));
@@ -3532,7 +3530,7 @@
//Stop all HW channel
outl(ALI_STOP_ALL_CHANNELS, TRID_REG(card, T4D_STOP_A));

- restore_flags(flags);
+ spin_unlock_irqrestore(&card->lock, flags);
}

static void ali_restore_regs(struct trident_card *card)
@@ -3540,8 +3538,7 @@
unsigned long flags;
int i, j;

- save_flags(flags);
- cli();
+ spin_lock_irqsave(&card->lock, flags);

for (i = 1; i < ALI_MIXER_REGS; i++)
ali_ac97_write(card->ac97_codec[0], i*2, ali_registers.mixer_regs[i]);
@@ -3564,6 +3561,8 @@
outl(ali_registers.global_regs[0x20], TRID_REG(card,T4D_START_A));
//restore IRQ enable bits
outl(ali_registers.global_regs[0x2c], TRID_REG(card,T4D_MISCINT));
+
+ spin_unlock_irqrestore(&card->lock, flags);

restore_flags(flags);
}

--
http://vipe.technion.ac.il/~mulix/
http://syscalltrack.sf.net/


Attachments:
(No filename) (2.57 kB)
(No filename) (189.00 B)
Download all attachments

2002-07-29 07:47:58

by Zwane Mwaikambo

[permalink] [raw]
Subject: Re: [PATCH] 2.5.29 sound/oss/trident.c [2/2] remove cli/sti calls

On Sun, 28 Jul 2002, Muli Ben-Yehuda wrote:

> +
> + spin_unlock_irqrestore(&card->lock, flags);
>
> restore_flags(flags);
> }

hmm...

--
function.linuxpower.ca


2002-07-29 08:10:16

by Muli Ben-Yehuda

[permalink] [raw]
Subject: Re: [PATCH] 2.5.29 sound/oss/trident.c [2/2] remove cli/sti calls

On Mon, Jul 29, 2002 at 10:08:52AM +0200, Zwane Mwaikambo wrote:
> On Sun, 28 Jul 2002, Muli Ben-Yehuda wrote:
>
> > +
> > + spin_unlock_irqrestore(&card->lock, flags);
> >
> > restore_flags(flags);
> > }
>
> hmm...

grrr, harmless I think, but thanks for spotting it.

===== sound/oss/trident.c 1.25 vs 1.26 =====
--- 1.25/sound/oss/trident.c Mon Jul 29 07:08:09 2002
+++ 1.26/sound/oss/trident.c Mon Jul 29 10:59:59 2002
@@ -3563,8 +3563,6 @@
outl(ali_registers.global_regs[0x2c], TRID_REG(card,T4D_MISCINT));

spin_unlock_irqrestore(&card->lock, flags);
-
- restore_flags(flags);
}

static int trident_suspend(struct pci_dev *dev, u32 unused)

--
http://vipe.technion.ac.il/~mulix/
http://syscalltrack.sf.net/


Attachments:
(No filename) (734.00 B)
(No filename) (189.00 B)
Download all attachments

2002-07-29 08:35:00

by Zwane Mwaikambo

[permalink] [raw]
Subject: Re: [PATCH] 2.5.29 sound/oss/trident.c [2/2] remove cli/sti calls

On Mon, 29 Jul 2002, Muli Ben-Yehuda wrote:

> On Mon, Jul 29, 2002 at 10:08:52AM +0200, Zwane Mwaikambo wrote:
> > On Sun, 28 Jul 2002, Muli Ben-Yehuda wrote:
> >
> > > +
> > > + spin_unlock_irqrestore(&card->lock, flags);
> > >
> > > restore_flags(flags);
> > > }
> >
> > hmm...
>
> grrr, harmless I think, but thanks for spotting it.

But still racy, i think i may try a test run with some code to poison
flags after its already been used to xxx_restore.

Cheers,
Zwane

--
function.linuxpower.ca