Discussion:
[Orinoco-users] orinoco_cs: errors "information frame lost", "callbacks suppressed"
i***@gmail.com
2008-11-02 17:47:41 UTC
Permalink
Hi,

I'm using the orinoco_cs module with a Microsoft MN-520 card. It is
functional. I can use the internet and access network shares. The problem is
that my dmesg log is totally overrun with errors that look like:

[ 4929.294727] __ratelimit: 95 callbacks suppressed
[ 4929.294747] eth2: Information frame lost.
[ 4929.298371] eth2: Information frame lost.
[ 4929.306179] eth2: Information frame lost.
[ 4929.310624] eth2: Information frame lost.
[ 4929.313696] eth2: Information frame lost.
[ 4929.316314] eth2: Information frame lost.
[ 4929.321402] eth2: Information frame lost.
[ 4929.324642] eth2: Information frame lost.
[ 4929.332024] eth2: Information frame lost.
[ 4929.334593] eth2: Information frame lost.
[ 4974.572457] __ratelimit: 182 callbacks suppressed
[ 4974.572480] eth2: Information frame lost.
[ 4974.578034] eth2: Information frame lost.
[ 4974.579622] eth2: Information frame lost.
[ 4974.587554] eth2: Information frame lost.
[ 4974.590890] eth2: Information frame lost.
[ 4974.595090] eth2: Information frame lost.
[ 4974.606683] eth2: Information frame lost.
[ 4974.610979] eth2: Information frame lost.
[ 4974.613622] eth2: Information frame lost.
[ 4974.614599] eth2: Information frame lost.

This only happens when data is transferred on the interface; if I don't use
the network the errors stop. Could someone help me figure out what the
problem is and what a solution might be?

This is on the latest ubuntu 8.10, kernel 2.6.27-7.

In trying to figure this out, I've tried watching the signal level reported
by iwconfig. Normally it is around -5 dBm which is a strong signal, but it
fluctuates every so often by 10 dB and sometimes as much as 100 dB (-105
dBm) (only briefly, 1-2 seconds). When that happens the signal is still
above the noise floor. For example:
most always: Link Quality=80/92 Signal level=-5 dBm Noise level=-142 dBm
occasionally: Link Quality=72/92 Signal level=-17 dBm Noise level=-142
dBm'
once in a while: Link Quality=14/92 Signal level=-102 dBm Noise level=-141
dBm

For what it's worth I booted into Damn Small Linux (kernel 2.4.?) and setup
the same card but using the prism2 module. There weren't any errors (of
course I realize it's different code so it won't generate the same
messages). The signal strength in this case is always around -5 dBm +/- 2 dB
without exception.

Any suggestions? Is there possibly a bug of some kind in the orinoco driver?

Thanks,
Greg
Pavel Roskin
2008-11-03 14:08:19 UTC
Permalink
Post by i***@gmail.com
Hi,
I'm using the orinoco_cs module with a Microsoft MN-520 card. It is
functional. I can use the internet and access network shares. The problem is
[ 4929.294727] __ratelimit: 95 callbacks suppressed
[ 4929.294747] eth2: Information frame lost.
I believe this happens with Intersil firmware. A workaround would be to
use hostap_cs instead on orinoco_cs.
Post by i***@gmail.com
Any suggestions? Is there possibly a bug of some kind in the orinoco driver?
Maybe. Or maybe it's a bug in the firmware. Hostap has a workaround in
prism2_infdrop(). Looks at this comment in that function:

/* some firmware versions seem to get stuck with
* full CommTallies in high traffic load cases; every
* packet will then cause INFDROP event and CommTallies
* info frame will not be sent automatically. Try to
* get out of this state by inquiring CommTallies. */
--
Regards,
Pavel Roskin
Dave
2008-11-03 20:57:01 UTC
Permalink
Post by Pavel Roskin
Post by i***@gmail.com
I'm using the orinoco_cs module with a Microsoft MN-520 card. It is
functional. I can use the internet and access network shares. The problem is
[ 4929.294727] __ratelimit: 95 callbacks suppressed
[ 4929.294747] eth2: Information frame lost.
I believe this happens with Intersil firmware. A workaround would be to
use hostap_cs instead on orinoco_cs.
Post by i***@gmail.com
Any suggestions? Is there possibly a bug of some kind in the orinoco driver?
Maybe. Or maybe it's a bug in the firmware. Hostap has a workaround in
/* some firmware versions seem to get stuck with
* full CommTallies in high traffic load cases; every
* packet will then cause INFDROP event and CommTallies
* info frame will not be sent automatically. Try to
* get out of this state by inquiring CommTallies. */
Interesting. I'd appreciate it if you could try the patch below (which
implements the prism2 workaround).

We may need to add a flag to restrict the call to particular firmwares.
To this end could you also post the firmware version your running? It
should be reported in your dmesg output.


Thanks,

Dave.

diff --git a/drivers/net/wireless/orinoco/orinoco.c
b/drivers/net/wireless/orinoco/orinoco.c
index d9939d5..ac058e9 100644
--- a/drivers/net/wireless/orinoco.c
+++ b/drivers/net/wireless/orinoco.c
@@ -2260,6 +2260,10 @@ static void __orinoco_ev_infdrop(struct
net_device *dev, hermes_t *hw)
{
if (net_ratelimit())
printk(KERN_DEBUG "%s: Information frame lost.\n",
dev->name);
+
+ /* Clearing firmware tallies stops excessive numbers of these
+ * interrupts on some firmwares */
+ hermes_inquire(hw, HERMES_INQ_TALLIES);
}

/********************************************************************/
I ski MJ
2008-11-11 05:46:03 UTC
Permalink
Post by Dave
Interesting. I'd appreciate it if you could try the patch below (which
implements the prism2 workaround).
We may need to add a flag to restrict the call to particular firmwares.
To this end could you also post the firmware version your running? It
should be reported in your dmesg output.
My Intersil firmware is 1.4.9. Is there a better FW version to use? If
so, what tools would I need to flash the FW to the card?
Post by Dave
diff --git a/drivers/net/wireless/orinoco/orinoco.c
b/drivers/net/wireless/orinoco/orinoco.c
index d9939d5..ac058e9 100644
--- a/drivers/net/wireless/orinoco.c
+++ b/drivers/net/wireless/orinoco.c
@@ -2260,6 +2260,10 @@ static void __orinoco_ev_infdrop(struct
net_device *dev, hermes_t *hw)
{
if (net_ratelimit())
printk(KERN_DEBUG "%s: Information frame lost.\n",
dev->name);
+
+ /* Clearing firmware tallies stops excessive numbers of these
+ * interrupts on some firmwares */
+ hermes_inquire(hw, HERMES_INQ_TALLIES);
}
/********************************************************************/
Well, I'm going to need a bit of help with this. Is the
/drivers/net/wireless/orinoco/ directory from the full kernel source
tree, or is there a better way to get it, such as sourceforge? Also,
I'm not familiar with diff --git and I get an error that --git is an
unrecognized option. It looks like this command is part of git-diff,
correct?

Sorry for the n00b questions, I have limited experience with patching/compiling.

Thanks,
Greg
Dave
2008-11-11 20:16:04 UTC
Permalink
Post by I ski MJ
My Intersil firmware is 1.4.9. Is there a better FW version to use? If
so, what tools would I need to flash the FW to the card?
I don't think there are linux tools to permanently flash new firmware.
The hostap driver (and userspace tools) allows you to upload newer
firmware to the cards RAM. Otherwise you're looking at windows tools.
Post by I ski MJ
Post by Dave
diff --git a/drivers/net/wireless/orinoco/orinoco.c
+
+ /* Clearing firmware tallies stops excessive numbers of these
+ * interrupts on some firmwares */
+ hermes_inquire(hw, HERMES_INQ_TALLIES);
Well, I'm going to need a bit of help with this. Is the
/drivers/net/wireless/orinoco/ directory from the full kernel source
tree, or is there a better way to get it, such as sourceforge? Also,
I'm not familiar with diff --git and I get an error that --git is an
unrecognized option. It looks like this command is part of git-diff,
correct?
Sorry for the n00b questions, I have limited experience with patching/compiling.
Oops. There are a couple of problems with the patch. I made a few manual
modifications and missed the path change. And my client inserted
whitespace damage. Instead, just insert the hermes_inquire line directly
into the function orinoco_infdrop (removing the +).

Otherwise you should have been able to either apply the patch by saving
the email and doing:

linux-2.6$ git-am /path/to/message.mbox

or paste the patch part of the email into a text file and doing

linux-2.6$ patch -p1 < /path/to/patch.diff



Regards,

Dave.
Pavel Roskin
2008-11-12 03:46:55 UTC
Permalink
Post by Dave
Post by I ski MJ
My Intersil firmware is 1.4.9. Is there a better FW version to use? If
so, what tools would I need to flash the FW to the card?
I don't think there are linux tools to permanently flash new firmware.
The hostap driver (and userspace tools) allows you to upload newer
firmware to the cards RAM. Otherwise you're looking at windows tools.
Actually, hostap can flash new firmware if it's enabled in the kernel
configuration. prism2_srec from hostap-utils is used for that.
--
Regards,
Pavel Roskin
Timothy Murphy
2008-11-12 12:52:43 UTC
Permalink
Post by Pavel Roskin
Post by Dave
I don't think there are linux tools to permanently flash new firmware.
The hostap driver (and userspace tools) allows you to upload newer
firmware to the cards RAM. Otherwise you're looking at windows tools.
Actually, hostap can flash new firmware if it's enabled in the kernel
configuration. prism2_srec from hostap-utils is used for that.
Apologies for a slightly ignorant (and irrelevant) question,
but I have never understood the relation between hostap and orinoco_cs.
Are they alternative drivers?
Are you (Pavel) responsible for both?
How does the kernel know which to choose if both modules are there?
Is it just a matter of an entry in /etc/modprobe.conf ?
Pavel Roskin
2008-11-12 16:23:07 UTC
Permalink
Post by Timothy Murphy
Post by Pavel Roskin
Post by Dave
I don't think there are linux tools to permanently flash new firmware.
The hostap driver (and userspace tools) allows you to upload newer
firmware to the cards RAM. Otherwise you're looking at windows tools.
Actually, hostap can flash new firmware if it's enabled in the kernel
configuration. prism2_srec from hostap-utils is used for that.
Apologies for a slightly ignorant (and irrelevant) question,
but I have never understood the relation between hostap and orinoco_cs.
Are they alternative drivers?
For Intersil firmware, yes. For Agere and Symbol firmware, no.
Post by Timothy Murphy
Are you (Pavel) responsible for both?
I'm only "responsible" for orinoco. That is, I'm listed as its
maintainer.
Post by Timothy Murphy
How does the kernel know which to choose if both modules are there?
Is it just a matter of an entry in /etc/modprobe.conf ?
I believe the kernel notifies userspace of new devices and udev handles
it by running modprobe with the alias of the device (essentially its bus
type and ID). Each module has a device table, which consists of
aliases, and modprobe is aware of them.

If several modules match the alias, modprobe would load all of them.
But modprobe won't load modules that are blacklisted. The first module
to be loaded would claim the device, so other modules won't be able to
claim it.

To be sure, blacklist the driver you don't need.
--
Regards,
Pavel Roskin
i***@gmail.com
2008-11-11 05:13:04 UTC
Permalink
Post by Pavel Roskin
I believe this happens with Intersil firmware. A workaround would be to
use hostap_cs instead on orinoco_cs.
I tried hostap_cs but wasn't able to make much progress. I believe that I
need to run in "managed" mode, when I put it in managed mode and then try to
set the essid, iwconfig just reports ESSID:" ". If I then change to "master"
mode it reports the correct ESSID. Any tips?
Pavel Roskin
2008-11-12 03:50:08 UTC
Permalink
Post by i***@gmail.com
Post by Pavel Roskin
I believe this happens with Intersil firmware. A workaround would be to
use hostap_cs instead on orinoco_cs.
I tried hostap_cs but wasn't able to make much progress. I believe that I
need to run in "managed" mode, when I put it in managed mode and then try to
set the essid, iwconfig just reports ESSID:" ". If I then change to "master"
mode it reports the correct ESSID. Any tips?
Please discuss hostap issues in linux-***@vger.kernel.org

Don't forget to mention versions of the involved software. In this case
it's the kernel and wireless tools.
--
Regards,
Pavel Roskin
i***@gmail.com
2008-11-16 01:56:15 UTC
Permalink
Post by Pavel Roskin
Actually, hostap can flash new firmware if it's enabled in the kernel
configuration. prism2_srec from hostap-utils is used for that.
I've been experimenting using orinoco with different firmware versions.
Here's a summary:

1.7.4 (w/ 1.1.0 primary):
This FW version didn't seem to change the situation.

1.7.4 or 1.8.2 (w/ 1.1.1 primary):
This FW definitely improved the situation. The "information frame lost"
messages went away. Now, I have these messages:
[60933.075976] eth2: New link status: Disconnected (0002)
[60934.409880] eth2: New link status: Connected (0001)
[61285.312441] eth2: New link status: Disconnected (0002)
[61286.738740] eth2: New link status: Connected (0001)
These repeat much less often than the other messages would, but it's still
enough to fill up my log. They repeat very consistently at 351 seconds, with
or without data being sent on the interface. Also, the signal level reported
by iwconfig is stable now.

This certainly seems like progress. Any ideas about the "new link status"
messages? I tried booting a liveCD with Kubuntu kernel 2.6.24-16 and I'm not
seeing these messages. Did the orinoco (or _cs) module change between 2.6.24
and 2.6.27? Seems unlikely. Is there something that the distribution is
doing to suppress these messages?

Thanks,
Greg
i***@gmail.com
2008-11-16 07:56:35 UTC
Permalink
Post by i***@gmail.com
[60933.075976] eth2: New link status: Disconnected (0002)
[60934.409880] eth2: New link status: Connected (0001)
I tried booting a liveCD with Kubuntu kernel 2.6.24-16 and I'm not seeing
these messages.

Oops, I was changing too many variables at one time. I normally have my AP
set to disable SSID broadcast. I had changed it to enable SSID broadcast. I
think that I get the periodic Disconnected/Connected messages when the SSID
is not broadcast and these messages stop when the SSID is broadcast. Is this
expected behavior?

-Greg
Dave
2008-11-16 09:30:49 UTC
Permalink
Post by i***@gmail.com
Post by i***@gmail.com
[60933.075976] eth2: New link status: Disconnected (0002)
[60934.409880] eth2: New link status: Connected (0001)
These messages are triggered by firmware events. It's possible that the
driver is not setting something correctly. If the connection otherwise
works for you, set the suppress_linkstatus module parameter to 1. This
just stops the driver printing this message.
Post by i***@gmail.com
Post by i***@gmail.com
I tried booting a liveCD with Kubuntu kernel 2.6.24-16 and I'm not seeing
these messages.
Did you verify that the liveCD is loading the orinoco driver? (As
opposed to hostap). There are a few changes to the orinoco driver in
that period. These mainly affect scan results and multicasting.
Post by i***@gmail.com
Oops, I was changing too many variables at one time. I normally have my AP
set to disable SSID broadcast. I had changed it to enable SSID broadcast. I
think that I get the periodic Disconnected/Connected messages when the SSID
is not broadcast and these messages stop when the SSID is broadcast. Is this
expected behavior?
I don't know if this is expected of Intersil firmware. My AP doesn't
broadcast SSID, and my Agere card doesn't do this.

Dave.
i***@gmail.com
2008-11-20 20:04:36 UTC
Permalink
I was wrong about the card firmware version fixing the "frame lost" and
"ratelimit" errors. I must not have been pushing data through the network as
I thought that I was... So, the firmware hasn't been able to solve the
problem, nor has the earlier kernel version (using the orinoco drivers).

I tried applying Dave's patch from an earlier post. This has definitely
improved the situation but I am still getting the "frame lost" errors but
far less of them and I get sporadic "ratelimit" errors.

FYI, I had to use the patch from:
http://sourceforge.net/mailarchive/message.php?msg_id=200810111423.13399.csi
ghts%40fastmail.fm
to get things to compile with my kernel, 2.6.27. That post is probably older
than the current code, but in that patch, the third hunk "irqreturn_t
orinoco_interrupt(int irq, void *dev_id)" was already patched in the svn
trunk. Same thing for the orinoco.h patches. I didn't apply the orinoco_usb
patch.

With the ESSID broadcast disabled, the steady "New link status:
Disconnected/Connected" messages have ceased. But I get the following
message a while after connecting:

[86358.000064] ------------[ cut here ]------------
[86358.000086] WARNING: at
/build/buildd/linux-2.6.27/net/sched/sch_generic.c:219
dev_watchdog+0x21a/0x230()
[86358.000097] NETDEV WATCHDOG: eth1 (orinoco_cs): transmit timed out
[86358.000104] Modules linked in: nls_utf8 nls_cp437 cifs orinoco_cs orinoco
hermes ipv6 wmi sbs sbshc pci_slot af_packet iptable_filter ip_tables
x_tables lp loop joydev pcmcia parport_pc parport evdev video output battery
container ac serio_raw psmouse snd_maestro3 snd_ac97_codec ac97_bus button
snd_pcm snd_timer snd_page_alloc i2c_piix4 snd intel_agp yenta_socket
rsrc_nonstatic pcspkr i2c_core shpchp agpgart pcmcia_core pci_hotplug
soundcore ext3 jbd mbcache sr_mod cdrom sd_mod crc_t10dif sg ata_generic
pata_acpi ata_piix uhci_hcd libata usbcore 3c59x mii scsi_mod dock thermal
processor fan fuse vesafb fbcon tileblit font bitblit softcursor
[86358.000287] Pid: 0, comm: swapper Not tainted 2.6.27-7-generic #1
[86358.000297] [<c0131d65>] warn_slowpath+0x65/0x90
[86358.000325] [<c02dfe98>] ? acpi_pm_read+0x8/0x20
[86358.000344] [<c014e63b>] ? getnstimeofday+0x4b/0x100
[86358.000371] [<c0136976>] ? set_normalized_timespec+0x16/0x90
[86358.000388] [<c014d255>] ? sched_clock_cpu+0xd5/0x170
[86358.000402] [<c0154387>] ? timer_stats_update_stats+0x17/0x250
[86358.000420] [<c0254299>] ? strlen+0x9/0x20
[86358.000442] [<c025231d>] ? strlcpy+0x1d/0x60
[86358.000454] [<c02f0967>] ? netdev_drivername+0x37/0x40
[86358.000468] [<c0305b6a>] dev_watchdog+0x21a/0x230
[86358.000481] [<c013bb52>] ? internal_add_timer+0x12/0xc0
[86358.000501] [<c013bd65>] ? cascade+0x65/0x80
[86358.000513] [<c013bf88>] run_timer_softirq+0x138/0x210
[86358.000526] [<c0305950>] ? dev_watchdog+0x0/0x230
[86358.000539] [<c0305950>] ? dev_watchdog+0x0/0x230
[86358.000562] [<c0137682>] __do_softirq+0x92/0x120
[86358.000574] [<c013776d>] do_softirq+0x5d/0x60
[86358.000585] [<c01378e5>] irq_exit+0x55/0x90
[86358.000596] [<c0106c1a>] do_IRQ+0x4a/0x80
[86358.000615] [<c0105003>] common_interrupt+0x23/0x30
[86358.000627] [<c01700d8>] ? __audit_mq_getsetattr+0x68/0xb0
[86358.000647] [<d0b839a7>] ? acpi_idle_enter_simple+0x158/0x193
[processor]
[86358.000688] [<c02dbf7b>] cpuidle_idle_call+0x7b/0xd0
[86358.000699] [<c010288d>] cpu_idle+0x7d/0x140
[86358.000711] [<c036edd3>] rest_init+0x53/0x60
[86358.000736] =======================
[86358.000743] ---[ end trace 58c9ccc18eab55c0 ]---
[86358.000757] eth1: Tx timeout! ALLOCFID=0139, TXCOMPLFID=0171, EVSTAT=800b
[86358.805765] eth1: New link status: Connected (0001)
<snip "frame lost" messages>
[87594.000049] eth1: Tx timeout! ALLOCFID=0139, TXCOMPLFID=026e, EVSTAT=800b
[87594.805909] eth1: New link status: Connected (0001)

It seems that this message only happens once and then I get sporadic repeats
of the last two lines (Tx timeout and The TXCOMPLFID value changes each
time. I did notice that my wireless AP is logging a "wireless PC connected"
message that corresponds to each of these. (This is all on Intersil FW 1.8.2
now)

Cheers,
Greg

Loading...