2002-04-03 23:39:50

by Denny Gudea

[permalink] [raw]
Subject: 3c59x.c - kernel message explosion (fwd)


Hi,

id like to thank you for maintaining this driver..

i have a 3com 3c905 and im using 3c59x.c driver to run it in my linux
machine. it is connected to a hub on a network with 7 nodes. it seems like
one of the hosts on my network has a duplex problem (as is described in
vortex.txt). the problem i'm having is that the driver does a lot of
kernel messages for this error even though my debug is set to the default.

i've looked at the code and the problem seems to be due to a small typo:
this code segment begins at line 1826:
------------------------------------------------
if (status & TxComplete) { /* Really "TxError" for us. */
tx_status = inb(ioaddr + TxStatus);
/* Presumably a tx-timeout. We must merely re-enable. */
if (vortex_debug > 2
|| (tx_status != 0x88 && vortex_debug > 0)) {
printk(KERN_ERR "%s: Transmit error, Tx status register %2.2x.\n",
dev->name, tx_status);
if (tx_status == 0x82) {
printk(KERN_ERR "Probably a duplex mismatch. See "
"Documentation/networking/vortex.txt\n");
}
dump_tx_ring(dev);
-------------------------------------------------
i believe the problem resides when it tests for the debug level:

if (vortex_debug > 2
|| (tx_status != 0x88 && vortex_debug > 0)) {

the || operator should be a && because we only want to print the error
message if debug is greater than 2 and the transmit status is not what it
should be.



thanks a lot

denny gudea
[email protected]



2002-04-03 23:50:01

by Jeff Garzik

[permalink] [raw]
Subject: Re: 3c59x.c - kernel message explosion (fwd)

Denny Gudea wrote:
> i believe the problem resides when it tests for the debug level:
>
> if (vortex_debug > 2
> || (tx_status != 0x88 && vortex_debug > 0)) {
>
> the || operator should be a && because we only want to print the error
> message if debug is greater than 2 and the transmit status is not what it
> should be.



the test looks ok... it prints if the status is not what it should be,
if vortex_debug is 1 or 2, and unconditionally prints the status if
vortex_debug is 3 or greater.

What is your vortex_debug setting?

Jeff




2002-04-04 00:01:41

by Andrew Morton

[permalink] [raw]
Subject: Re: 3c59x.c - kernel message explosion (fwd)

Denny Gudea wrote:
>
> Hi,
>
> id like to thank you for maintaining this driver..
>
> i have a 3com 3c905 and im using 3c59x.c driver to run it in my linux
> machine. it is connected to a hub on a network with 7 nodes. it seems like
> one of the hosts on my network has a duplex problem (as is described in
> vortex.txt). the problem i'm having is that the driver does a lot of
> kernel messages for this error even though my debug is set to the default.
>
> i've looked at the code and the problem seems to be due to a small typo:
> this code segment begins at line 1826:
> ------------------------------------------------
> if (status & TxComplete) { /* Really "TxError" for us. */
> tx_status = inb(ioaddr + TxStatus);
> /* Presumably a tx-timeout. We must merely re-enable. */
> if (vortex_debug > 2
> || (tx_status != 0x88 && vortex_debug > 0)) {
> printk(KERN_ERR "%s: Transmit error, Tx status register %2.2x.\n",
> dev->name, tx_status);
> if (tx_status == 0x82) {
> printk(KERN_ERR "Probably a duplex mismatch. See "
> "Documentation/networking/vortex.txt\n");
> }
> dump_tx_ring(dev);
> -------------------------------------------------
> i believe the problem resides when it tests for the debug level:
>
> if (vortex_debug > 2
> || (tx_status != 0x88 && vortex_debug > 0)) {

The code is OK, I think. It says, in a rather tortured manner,
"if debug > 0 then print stuff, unless it is a max-collisions-exceeded
event" and "if debug > 2 then print all events".

Probably many of these driver messages should be throttled
by net_ratelimit() but in practice, things work out OK.

Your machine is a special case, because your network is
bust. The default value of `debug' is 1. If you set
it to zero, those messages should go away?

-

2002-04-04 00:09:12

by Denny Gudea

[permalink] [raw]
Subject: Re: 3c59x.c - kernel message explosion (fwd)

you are correct.. i am a newbie.. my debug is set to the default (1)i
didnt see that last vortex_debug..

the machine i have this nic on visits several networks.. as this code
suggests, maybe this is a more serious error than i thought. this machine
has been tested in several networks, and seems to be happening everywhere
for me.

can you guys give me any clues to finding the culprit on the
network? the condition is easily created for me..

thanks for your help

denny gudea
[email protected]

On Wed, 3 Apr 2002, Jeff Garzik wrote:

> Denny Gudea wrote:
> > i believe the problem resides when it tests for the debug level:
> >
> > if (vortex_debug > 2
> > || (tx_status != 0x88 && vortex_debug > 0)) {
> >
> > the || operator should be a && because we only want to print the error
> > message if debug is greater than 2 and the transmit status is not what it
> > should be.
>
>
>
> the test looks ok... it prints if the status is not what it should be,
> if vortex_debug is 1 or 2, and unconditionally prints the status if
> vortex_debug is 3 or greater.
>
> What is your vortex_debug setting?
>
> Jeff
>
>
>
>