2003-01-03 20:46:22

by Stephen Evanchik

[permalink] [raw]
Subject: [PATCH 2.5.54] UPDATE hermes: serialization fixes

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;



2003-01-04 05:29:21

by David Gibson

[permalink] [raw]
Subject: Re: [PATCH 2.5.54] UPDATE hermes: serialization fixes

On Fri, Jan 03, 2003 at 03:50:55PM -0500, Stephen Evanchik wrote:
> 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:

I don't see how this can make any difference on the 0.13 and later
versions of the driver (which is in 2.5), since all BAP operations are
already serialized by the lock in the orinoco_private structure.

--
David Gibson | For every complex problem there is a
[email protected] | solution which is simple, neat and
| wrong.
http://www.ozlabs.org/people/dgibson