CF8385 issues on older kernel
Holger Schurig
hs4233 at mail.mn-solutions.de
Mon Apr 27 07:24:50 EDT 2009
> Looking at the current mainline kernel, this code is still
> present, in mostly the same form as it was in the above patch.
> What exactly is the BUG_ON checking for here, and what can go
> wrong to trigger the bug?
static void if_cs_send_data(struct lbs_private *priv, u8 *buf,
u16 nb)
{
struct if_cs_card *card = (struct if_cs_card
*)priv->card;
+ u16 status;
lbs_deb_enter(LBS_DEB_CS);
+ if_cs_disable_ints(card);
+
+ status = if_cs_read16(card, IF_CS_C_STATUS);
+ BUG_ON((status & IF_CS_C_S_TX_DNLD_RDY) == 0);
The routine we're in is trying to send some data. You can only
send data into the chip if the chip says "Hey, I'm ready". If
everything is right, you'll always get the "I'm ready" response
from the status register. And if you don't get it, then
something very serious is broken. This is detected by the
BUG_ON.
> Also, isn't bugging in a driver
> reasonably drastic?
Yes, it's very drastic. It causes a hard crash of the whole
system. This is hopefully a good enought incentive to think
about the problem and fixing it.
Some systems automatically collect kernel oopses and send them to
http://www.kerneloops.org/, so developers are made aware of the
problem.
BTW: on my hardware, I never get a crash in this
BUG_ON-statement, so for my environment, the code seems to be
reasonably correct. We have deployed over 250 systems with that
card to various customers (I don't know exact counts because I'm
in R&D, not in sales :-)
> Would it not be better to return an error
> condition, which propogates back to a transmit failed at the
> upper networking layer?
That's debatable. My opininion is "No, better fix the driver,
hardware and/or firmware".
The code that sends data won't know what to do with such an error
anyway. A check in user-space can only be a workaround, a proper
fix of the cause is always desirable. At least that's the way
Linux' kernel code is usually designed. Let errors be viewable
and not pasted over.
Your mileage may vary :-)
More information about the libertas-dev
mailing list