Thread (89 messages) 89 messages, 8 authors, 2012-01-31

Re: brcm80211 breakage..

From: Linus Torvalds <torvalds@linux-foundation.org>
Date: 2012-01-13 00:13:51

2012/1/12 Rafał Miłecki [off-list ref]:
Have you tried booting with bcma & brcmsmac blacklisted? Does
suspend&resume work then?

Have you tried blacklisting just brcmsmac (letting bcma load)? Does
s&r work then?
If I unload brcmsmac, I can suspend/resume. Once. It can't suspend a
second time.

I did see some message flash about "does not have a release()
function", but don't know if that was bcma or something else.

I do notice that both the bcma and suspend/resume seems quite broken.
It's using the legacy suspend/resume stuff and does the PCI resume on
its own (with no matching suspend!). That *really* isn't a good idea
these days.

The way to do it these days is to have a struct dev_pm_ops embedded in
the struct pci_driver (".driver.pm"), and let the PCI layer handle all
the generic PCI suspend/resume  details - you only handle the
device-specific ones (ie in this case suspending/resuming the bcma bus
itself).

The generic PCI layer will do all the PCI stuff correctly, including
all the nasty races with shared interrupts etc. In a way that no
driver ever got it right. And it simplifies the driver too.

And the brcms driver does suspend/resume *completely* wrong, and seems
to actually re-suspend and re-resume the PCI device.

I'm surprised it has ever worked for anybody. It certainly doesn't work for me.

                      Linus
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help