Skip to contentSkip to conversation

net/sb1000: replace nicedelay() with ssleep()

PATCH Applied [email protected] 3 participants 3 messages Mar 6, 2005 – Mar 9, 2005

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 16/26 net/sb1000: replace nicedelay() with ssleep()

Use ssleep() instead of nicedelay()
to guarantee the task delays as expected. Remove the prototype and definition of nicedelay(). This is a very weird function, because it is called to sleep in terms of usecs, but always sleeps for 1 second, completely ignoring the parameter. I have gone ahead and followed suit, just sleeping for a second in all cases, but maybe someone with the hardware could tell me if perhaps the paramter *should* matter. Additionally, nicedelay() is called in TASK_INTERRUPTIBLE state, but doesn't deal with signals in case these longer delays do not complete, so I believe ssleep() is more appropriate.

---

 kj-domen/drivers/net/sb1000.c |   14 +++-----------
 1 files changed, 3 insertions(+), 11 deletions(-)
drivers/net/sb1000.c renamed from drivers/net/sb1000.c~ssleep-drivers_net_sb1000 +3 -11
diff -puN drivers/net/sb1000.c~ssleep-drivers_net_sb1000 drivers/net/sb1000.c
@@ -90,7 +90,6 @@ static int sb1000_close(struct net_devic
 
 
 /* SB1000 hardware routines to be used during open/configuration phases */
-static inline void nicedelay(unsigned long usecs);
 static inline int card_wait_for_busy_clear(const int ioaddr[],
 	const char* name);
 static inline int card_wait_for_ready(const int ioaddr[], const char* name,
@@ -254,13 +253,6 @@ static struct pnp_driver sb1000_driver =
 
 const int TimeOutJiffies = (875 * HZ) / 100;
 
-static inline void nicedelay(unsigned long usecs)
-{
-	current->state = TASK_INTERRUPTIBLE;
-	schedule_timeout(HZ);
-	return;
-}
-
 /* Card Wait For Busy Clear (cannot be used during an interrupt) */
 static inline int
 card_wait_for_busy_clear(const int ioaddr[], const char* name)
@@ -475,7 +467,7 @@ sb1000_reset(const int ioaddr[], const c
 	udelay(1000);
 	outb(0x0, port);
 	inb(port);
-	nicedelay(60000);
+	ssleep(1);
 	outb(0x4, port);
 	inb(port);
 	udelay(1000);
@@ -537,7 +529,7 @@ sb1000_activate(const int ioaddr[], cons
 	const unsigned char Command0[6] = {0x80, 0x11, 0x00, 0x00, 0x00, 0x00};
 	const unsigned char Command1[6] = {0x80, 0x16, 0x00, 0x00, 0x00, 0x00};
 
-	nicedelay(50000);
+	ssleep(1);
 	if ((status = card_send_command(ioaddr, name, Command0, st)))
 		return status;
 	if ((status = card_send_command(ioaddr, name, Command1, st)))
@@ -944,7 +936,7 @@ sb1000_open(struct net_device *dev)
 	/* initialize sb1000 */
 	if ((status = sb1000_reset(ioaddr, name)))
 		return status;
-	nicedelay(200000);
+	ssleep(1);
 	if ((status = sb1000_check_CRC(ioaddr, name)))
 		return status;
 

_

#1 lore raw
Quoted 63 lines · [email protected] wrote:

Use ssleep() instead of nicedelay()
to guarantee the task delays as expected. Remove the prototype and definition of nicedelay(). This is a very weird function, because it is called to sleep in terms of usecs, but always sleeps for 1 second, completely ignoring the parameter. I have gone ahead and followed suit, just sleeping for a second in all cases, but maybe someone with the hardware could tell me if perhaps the paramter *should* matter. Additionally, nicedelay() is called in TASK_INTERRUPTIBLE state, but doesn't deal with signals in case these longer delays do not complete, so I believe ssleep() is more appropriate.

---

 kj-domen/drivers/net/sb1000.c |   14 +++-----------
 1 files changed, 3 insertions(+), 11 deletions(-)

diff -puN drivers/net/sb1000.c~ssleep-drivers_net_sb1000 drivers/net/sb1000.c

drivers/net/sb1000.c renamed from drivers/net/sb1000.c~ssleep-drivers_net_sb1000 +2 -10
@@ -90,7 +90,6 @@ static int sb1000_close(struct net_devic
 
 
 /* SB1000 hardware routines to be used during open/configuration phases */
-static inline void nicedelay(unsigned long usecs);
 static inline int card_wait_for_busy_clear(const int ioaddr[],
 	const char* name);
 static inline int card_wait_for_ready(const int ioaddr[], const char* name,
@@ -254,13 +253,6 @@ static struct pnp_driver sb1000_driver =
 
 const int TimeOutJiffies = (875 * HZ) / 100;
 
-static inline void nicedelay(unsigned long usecs)
-{
-	current->state = TASK_INTERRUPTIBLE;
-	schedule_timeout(HZ);
-	return;
-}
-
 /* Card Wait For Busy Clear (cannot be used during an interrupt) */
 static inline int
 card_wait_for_busy_clear(const int ioaddr[], const char* name)
@@ -475,7 +467,7 @@ sb1000_reset(const int ioaddr[], const c
 	udelay(1000);
 	outb(0x0, port);
 	inb(port);
-	nicedelay(60000);
+	ssleep(1);
 	outb(0x4, port);
 	inb(port);
 	udelay(1000);
@@ -537,7 +529,7 @@ sb1000_activate(const int ioaddr[], cons
 	const unsigned char Command0[6] = {0x80, 0x11, 0x00, 0x00, 0x00, 0x00};
 	const unsigned char Command1[6] = {0x80, 0x16, 0x00, 0x00, 0x00, 0x00};
 
-	nicedelay(50000);
+	ssleep(1);
 	if ((status = card_send_command(ioaddr, name, Command0, st)))
 		return status;
 	if ((status = card_send_command(ioaddr, name, Command1, st)))

drivers/net/sb1000.c sb1000_open(struct net_device *dev) · line 939

Quoted 5 lines
drivers/net/sb1000.c renamed from drivers/net/sb1000.c~ssleep-drivers_net_sb1000 +1 -1
@@ -944,7 +936,7 @@ sb1000_open(struct net_device *dev)
 	/* initialize sb1000 */
 	if ((status = sb1000_reset(ioaddr, name)))
 		return status;
-	nicedelay(200000);
+	ssleep(1);

obviously incorrect, as you converted 60000, 50000, and 200000 usecs all into "1 second".

Jeff

#2 lore raw
Quoted 65 lines · Jeff Garzik
Quoted 64 lines · [email protected] wrote:

Use ssleep() instead of nicedelay()
to guarantee the task delays as expected. Remove the prototype and definition of nicedelay(). This is a very weird function, because it is called to sleep in terms of usecs, but always sleeps for 1 second, completely ignoring the parameter. I have gone ahead and followed suit, just sleeping for a second in all cases, but maybe someone with the hardware could tell me if perhaps the paramter *should* matter. Additionally,
nicedelay() is called in TASK_INTERRUPTIBLE state, but doesn't deal with signals
in case these longer delays do not complete, so I believe ssleep() is more appropriate.

---

kj-domen/drivers/net/sb1000.c | 14 +++-----------

1 files changed, 3 insertions(+), 11 deletions(-)

diff -puN drivers/net/sb1000.c~ssleep-drivers_net_sb1000 drivers/net/sb1000.c
--- kj/drivers/net/sb1000.c~ssleep-drivers_net_sb1000 2005-03-05
16:11:16.000000000 +0100
+++ kj-domen/drivers/net/sb1000.c 2005-03-05 16:11:16.000000000 +0100

drivers/net/sb1000.c renamed from drivers/net/sb1000.c~ssleep-drivers_net_sb1000 +0 -1
@@ -90,7 +90,6 @@ static int sb1000_close(struct net_devic
 
 
 /* SB1000 hardware routines to be used during open/configuration phases */
-static inline void nicedelay(unsigned long usecs);
 static inline int card_wait_for_busy_clear(const int ioaddr[],
 	const char* name);

static inline int card_wait_for_ready(const int ioaddr[], const char* name,

drivers/net/sb1000.c renamed from drivers/net/sb1000.c~ssleep-drivers_net_sb1000 +0 -7
@@ -254,13 +253,6 @@ static struct pnp_driver sb1000_driver =
 
 const int TimeOutJiffies = (875 * HZ) / 100;
 
-static inline void nicedelay(unsigned long usecs)
-{
-	current->state = TASK_INTERRUPTIBLE;
-	schedule_timeout(HZ);
-	return;
-}
-
 /* Card Wait For Busy Clear (cannot be used during an interrupt) */

static inline int
card_wait_for_busy_clear(const int ioaddr[], const char* name)

drivers/net/sb1000.c renamed from drivers/net/sb1000.c~ssleep-drivers_net_sb1000 +1 -1
@@ -475,7 +467,7 @@ sb1000_reset(const int ioaddr[], const c
 	udelay(1000);
 	outb(0x0, port);
 	inb(port);
-	nicedelay(60000);
+	ssleep(1);
 	outb(0x4, port);
 	inb(port);
 	udelay(1000);
@@ -537,7 +529,7 @@ sb1000_activate(const int ioaddr[], cons
 	const unsigned char Command0[6] = {0x80, 0x11, 0x00, 0x00, 0x00, 
 	0x00};
 	const unsigned char Command1[6] = {0x80, 0x16, 0x00, 0x00, 0x00, 
 	0x00};
 
Quoted 14 lines

drivers/net/sb1000.c sb1000_open(struct net_device *dev) · line 939

Quoted 11 lines
drivers/net/sb1000.c renamed from drivers/net/sb1000.c~ssleep-drivers_net_sb1000 +1 -1
-	nicedelay(50000);
+	ssleep(1);
 	if ((status = card_send_command(ioaddr, name, Command0, st)))
		return status;
	if ((status = card_send_command(ioaddr, name, Command1, st)))
drivers/net/sb1000.c renamed from drivers/net/sb1000.c~ssleep-drivers_net_sb1000 +1 -1
@@ -944,7 +936,7 @@ sb1000_open(struct net_device *dev)
 	/* initialize sb1000 */
 	if ((status = sb1000_reset(ioaddr, name)))
 		return status;
-	nicedelay(200000);
+	ssleep(1);

obviously incorrect, as you converted 60000, 50000, and 200000 usecs all into "1 second".

Except that nicdelay() blatantly ignored the parameter. I asked several times about this function and got no response. nicedelay() requests a second delay currently, so I used ssleep().

Thanks,
Nish