net/sb1000: replace nicedelay() with ssleep()
Subsystems (2)
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
@@ -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 cudelay (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[], consconst 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;
_
Quoted 63 lines · [email protected] wrote:
Use
ssleep()instead ofnicedelay()
to guarantee the task delays as expected. Remove the prototype and definition ofnicedelay(). 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 inTASK_INTERRUPTIBLEstate, but doesn't deal with signals in case these longer delays do not complete, so I believessleep()is more appropriate.Signed-off-by Nishanth Aravamudan <[email protected]>Signed-off-by Domen Puncer <[email protected]>---
kj-domen/drivers/net/sb1000.c | 14 +++----------- 1 files changed, 3 insertions(+), 11 deletions(-)diff -puN
drivers/net/sb1000.c~ssleep-drivers_net_sb1000drivers/net/sb1000.cdrivers/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 cudelay (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[], consconst 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
Quoted 65 lines · Jeff Garzik
Quoted 64 lines · [email protected] wrote:
Use
ssleep()instead ofnicedelay()
to guarantee the task delays as expected. Remove the prototype and definition ofnicedelay(). 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 inTASK_INTERRUPTIBLEstate, but doesn't deal with signals
in case these longer delays do not complete, so I believessleep()is more appropriate.Signed-off-by Nishanth Aravamudan <[email protected]>Signed-off-by Domen Puncer <[email protected]>---
kj-domen/drivers/net/sb1000.c| 14 +++-----------1 files changed, 3 insertions(+), 11 deletions(-)diff -puN
drivers/net/sb1000.c~ssleep-drivers_net_sb1000drivers/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.c2005-03-05 16:11:16.000000000 +0100drivers/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 cudelay (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[], consconst 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