Commit f4c9925c authored by Nishanth Aravamudan's avatar Nishanth Aravamudan Committed by Linus Torvalds

[PATCH] telephony/ixj: use msleep() instead of schedule_timeout()

Replace schedule_timeout() with msleep() to guarantee the task delays as
expected.
Signed-off-by: default avatarNishanth Aravamudan <nacc@us.ibm.com>
Signed-off-by: default avatarDomen Puncer <domen@coderock.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 3a11ec5e
...@@ -774,10 +774,7 @@ static int ixj_wink(IXJ *j) ...@@ -774,10 +774,7 @@ static int ixj_wink(IXJ *j)
j->pots_winkstart = jiffies; j->pots_winkstart = jiffies;
SLIC_SetState(PLD_SLIC_STATE_OC, j); SLIC_SetState(PLD_SLIC_STATE_OC, j);
while (time_before(jiffies, j->pots_winkstart + j->winktime)) { msleep(jiffies_to_msecs(j->winktime));
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(1);
}
SLIC_SetState(slicnow, j); SLIC_SetState(slicnow, j);
return 0; return 0;
...@@ -1912,7 +1909,6 @@ static int ixj_pcmcia_cable_check(IXJ *j) ...@@ -1912,7 +1909,6 @@ static int ixj_pcmcia_cable_check(IXJ *j)
static int ixj_hookstate(IXJ *j) static int ixj_hookstate(IXJ *j)
{ {
unsigned long det;
int fOffHook = 0; int fOffHook = 0;
switch (j->cardtype) { switch (j->cardtype) {
...@@ -1943,11 +1939,7 @@ static int ixj_hookstate(IXJ *j) ...@@ -1943,11 +1939,7 @@ static int ixj_hookstate(IXJ *j)
j->pld_slicr.bits.state == PLD_SLIC_STATE_STANDBY) { j->pld_slicr.bits.state == PLD_SLIC_STATE_STANDBY) {
if (j->flags.ringing || j->flags.cringing) { if (j->flags.ringing || j->flags.cringing) {
if (!in_interrupt()) { if (!in_interrupt()) {
det = jiffies + (hertz / 50); msleep(20);
while (time_before(jiffies, det)) {
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(1);
}
} }
SLIC_GetState(j); SLIC_GetState(j);
if (j->pld_slicr.bits.state == PLD_SLIC_STATE_RINGING) { if (j->pld_slicr.bits.state == PLD_SLIC_STATE_RINGING) {
...@@ -2062,7 +2054,7 @@ static void ixj_ring_start(IXJ *j) ...@@ -2062,7 +2054,7 @@ static void ixj_ring_start(IXJ *j)
static int ixj_ring(IXJ *j) static int ixj_ring(IXJ *j)
{ {
char cntr; char cntr;
unsigned long jif, det; unsigned long jif;
j->flags.ringing = 1; j->flags.ringing = 1;
if (ixj_hookstate(j) & 1) { if (ixj_hookstate(j) & 1) {
...@@ -2070,7 +2062,6 @@ static int ixj_ring(IXJ *j) ...@@ -2070,7 +2062,6 @@ static int ixj_ring(IXJ *j)
j->flags.ringing = 0; j->flags.ringing = 0;
return 1; return 1;
} }
det = 0;
for (cntr = 0; cntr < j->maxrings; cntr++) { for (cntr = 0; cntr < j->maxrings; cntr++) {
jif = jiffies + (1 * hertz); jif = jiffies + (1 * hertz);
ixj_ring_on(j); ixj_ring_on(j);
...@@ -2089,13 +2080,7 @@ static int ixj_ring(IXJ *j) ...@@ -2089,13 +2080,7 @@ static int ixj_ring(IXJ *j)
ixj_ring_off(j); ixj_ring_off(j);
while (time_before(jiffies, jif)) { while (time_before(jiffies, jif)) {
if (ixj_hookstate(j) & 1) { if (ixj_hookstate(j) & 1) {
det = jiffies + (hertz / 100); msleep(10);
while (time_before(jiffies, det)) {
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(1);
if (signal_pending(current))
break;
}
if (ixj_hookstate(j) & 1) { if (ixj_hookstate(j) & 1) {
j->flags.ringing = 0; j->flags.ringing = 0;
return 1; return 1;
...@@ -6694,8 +6679,6 @@ static struct file_operations ixj_fops = ...@@ -6694,8 +6679,6 @@ static struct file_operations ixj_fops =
static int ixj_linetest(IXJ *j) static int ixj_linetest(IXJ *j)
{ {
unsigned long jifwait;
j->flags.pstncheck = 1; /* Testing */ j->flags.pstncheck = 1; /* Testing */
j->flags.pstn_present = 0; /* Assume the line is not there */ j->flags.pstn_present = 0; /* Assume the line is not there */
...@@ -6726,11 +6709,7 @@ static int ixj_linetest(IXJ *j) ...@@ -6726,11 +6709,7 @@ static int ixj_linetest(IXJ *j)
outb_p(j->pld_scrw.byte, j->XILINXbase); outb_p(j->pld_scrw.byte, j->XILINXbase);
daa_set_mode(j, SOP_PU_CONVERSATION); daa_set_mode(j, SOP_PU_CONVERSATION);
jifwait = jiffies + hertz; msleep(1000);
while (time_before(jiffies, jifwait)) {
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(1);
}
daa_int_read(j); daa_int_read(j);
daa_set_mode(j, SOP_PU_RESET); daa_set_mode(j, SOP_PU_RESET);
if (j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.VDD_OK) { if (j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.VDD_OK) {
...@@ -6750,11 +6729,7 @@ static int ixj_linetest(IXJ *j) ...@@ -6750,11 +6729,7 @@ static int ixj_linetest(IXJ *j)
j->pld_slicw.bits.rly3 = 0; j->pld_slicw.bits.rly3 = 0;
outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01); outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01);
daa_set_mode(j, SOP_PU_CONVERSATION); daa_set_mode(j, SOP_PU_CONVERSATION);
jifwait = jiffies + hertz; msleep(1000);
while (time_before(jiffies, jifwait)) {
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(1);
}
daa_int_read(j); daa_int_read(j);
daa_set_mode(j, SOP_PU_RESET); daa_set_mode(j, SOP_PU_RESET);
if (j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.VDD_OK) { if (j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.VDD_OK) {
...@@ -6783,7 +6758,6 @@ static int ixj_linetest(IXJ *j) ...@@ -6783,7 +6758,6 @@ static int ixj_linetest(IXJ *j)
static int ixj_selfprobe(IXJ *j) static int ixj_selfprobe(IXJ *j)
{ {
unsigned short cmd; unsigned short cmd;
unsigned long jif;
int cnt; int cnt;
BYTES bytes; BYTES bytes;
...@@ -6933,29 +6907,13 @@ static int ixj_selfprobe(IXJ *j) ...@@ -6933,29 +6907,13 @@ static int ixj_selfprobe(IXJ *j)
} else { } else {
if (j->cardtype == QTI_LINEJACK) { if (j->cardtype == QTI_LINEJACK) {
LED_SetState(0x1, j); LED_SetState(0x1, j);
jif = jiffies + (hertz / 10); msleep(100);
while (time_before(jiffies, jif)) {
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(1);
}
LED_SetState(0x2, j); LED_SetState(0x2, j);
jif = jiffies + (hertz / 10); msleep(100);
while (time_before(jiffies, jif)) {
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(1);
}
LED_SetState(0x4, j); LED_SetState(0x4, j);
jif = jiffies + (hertz / 10); msleep(100);
while (time_before(jiffies, jif)) {
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(1);
}
LED_SetState(0x8, j); LED_SetState(0x8, j);
jif = jiffies + (hertz / 10); msleep(100);
while (time_before(jiffies, jif)) {
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(1);
}
LED_SetState(0x0, j); LED_SetState(0x0, j);
daa_get_version(j); daa_get_version(j);
if (ixjdebug & 0x0002) if (ixjdebug & 0x0002)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment