[PATCH 2.5.54] UPDATE hermes: serialization fixes

Stephen Evanchik
2003-01-03T20:46:22Z

This fixes "Error -110 writing Tx descriptor to BAP" bug as referenced in David Gibson's README.

As per a suggestion, I've moved the spin_lock/unlock to hermes_bap_seek(). I'm currently running with
this module and it's working nicely.

As always, any comments are appreciated. Patches can be always downloaded from here:

http://www.clarkson.edu/~evanchsa/software/kernel/patches

Stephen Evanchik

--- linux-2.5.54/drivers/net/wireless/hermes.h 2003-01-01 22:21:02.000000000 -0500
+++ linux-2.5.54-devel/drivers/net/wireless/hermes.h 2003-01-03 15:32:33.000000000 -0500
@@ -288,6 +288,9 @@

u16 inten; /* Which interrupts should be enabled? */

+ /* Lock used in hermes_bap_seek */
+ spinlock_t baplock;
+
#ifdef HERMES_DEBUG_BUFFER
struct hermes_debug_entry dbuf[HERMES_DEBUG_BUFSIZE];
unsigned long dbufp;
--- linux-2.5.54/drivers/net/wireless/hermes.c 2003-01-01 22:21:13.000000000 -0500
+++ linux-2.5.54-devel/drivers/net/wireless/hermes.c 2003-01-03 15:34:23.000000000 -0500
@@ -342,11 +342,15 @@
int oreg = bap ? HERMES_OFFSET1 : HERMES_OFFSET0;
int k;
u16 reg;
+ unsigned long flags;

/* Paranoia.. */
if ( (offset > HERMES_BAP_OFFSET_MAX) || (offset % 2) )
return -EINVAL;

+ /* Without it, network connection errors occur.. */
+ spin_lock_irqsave(&(hw->baplock), flags);
+
k = HERMES_BAP_BUSY_TIMEOUT;
reg = hermes_read_reg(hw, oreg);
while ((reg & HERMES_OFFSET_BUSY) && k) {
@@ -368,6 +372,8 @@
}
#endif

+ spin_unlock_irqrestore(&(hw->baplock), flags);
+
if (reg & HERMES_OFFSET_BUSY)
return -ETIMEDOUT;