diff options
author | jdixon <jdixon@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2006-06-08 08:51:37 +0000 |
---|---|---|
committer | jdixon <jdixon@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2006-06-08 08:51:37 +0000 |
commit | 920f4d10b2782a8521e535e524edffbfa7e82d27 (patch) | |
tree | 6f5f5e05cfcdf9870b29bd32c42507b38aeb748a /pciradio.c | |
parent | d9cb775ec511c48066fe6c55ba7169ce1e986886 (diff) |
Fixed problem with spinlocks crashing remote control I/O
especially with the 2.6 kernel
git-svn-id: http://svn.digium.com/svn/zaptel/trunk@1109 5390a7c7-147a-4af0-8ec9-7488f05a26cb
Diffstat (limited to 'pciradio.c')
-rw-r--r-- | pciradio.c | 5 |
1 files changed, 1 insertions, 4 deletions
@@ -1172,7 +1172,6 @@ static int pciradio_ioctl(struct zt_chan *chan, unsigned int cmd, unsigned long rad->bursttime[chan->chanpos - 1] = stack.p.data; break; case ZT_RADPAR_UIODATA: - spin_lock_irqsave(&rad->lock,flags); byte1 = __pciradio_getcreg(rad,8); byte1 &= ~(1 << (chan->chanpos - 1)); byte1 &= ~(1 << (chan->chanpos + 3)); @@ -1182,7 +1181,6 @@ static int pciradio_ioctl(struct zt_chan *chan, unsigned int cmd, unsigned long spin_unlock_irqrestore(&rad->lock,flags); break; case ZT_RADPAR_UIOMODE: - spin_lock_irqsave(&rad->lock,flags); byte1 = __pciradio_getcreg(rad,0xe); byte1 &= ~(1 << (chan->chanpos - 1)); byte1 &= ~(1 << (chan->chanpos + 3)); @@ -1205,7 +1203,6 @@ static int pciradio_ioctl(struct zt_chan *chan, unsigned int cmd, unsigned long if (rad->remmode[chan->chanpos - 1] == ZT_RADPAR_REM_RBI1) { /* set UIOA and UIOB for output */ - spin_lock_irqsave(&rad->lock,flags); byte1 = __pciradio_getcreg(rad,0xe); mask = (1 << (chan->chanpos - 1)) | (1 << (chan->chanpos + 3)); @@ -1222,10 +1219,10 @@ static int pciradio_ioctl(struct zt_chan *chan, unsigned int cmd, unsigned long interruptible_sleep_on_timeout(&mywait,10); rad->lastremcmd = jiffies; rbi_out(rad,chan->chanpos - 1,(unsigned char *)&stack.p.data); + spin_lock_irqsave(&rad->lock,flags); break; } /* set UIOA and UIOB for output */ - spin_lock_irqsave(&rad->lock,flags); byte1 = __pciradio_getcreg(rad,0xe); mask = 1 << (chan->chanpos + 3); /* B an output */ byte2 = byte1 & (~mask); |