Thread (14 messages) 14 messages, 5 authors, 2008-10-30

Re: [Orinoco-devel] 2.6.28-rc2: new PCMCIA device instance after resume - orinoco can't download firmware

From: Andrey Borzenkov <hidden>
Date: 2008-10-30 18:39:43

On Thursday 30 October 2008, Dave wrote:
quoted hunk ↗ jump to hunk
After much faffing about, I managed to bisect this. In retrospect the
above hint (thanks Russell) and a code inspection ought to have made the
bug obvious. The offending commit is:

commit 1168386aa7d850ead2ae135d5a7949a592c6e9a0
pcmcia: deprecate CS_OUT_OF_RESOURCE

in which the following change is made (among others):
@@ -352,7 +352,9 @@ int verify_cis_cache(struct pcmcia_socket *s)

        buf = kmalloc(256, GFP_KERNEL);
        if (buf == NULL)
-               return -1;
+               dev_printk(KERN_WARNING, &s->dev,
+                          "no memory for verifying CIS\n");
+               return -ENOMEM;
        list_for_each_entry(cis, &s->cis_cache, node) {
                int len = cis->len;
Oh, my ... I have been looking over this dozens of times ... it just
proves how addictive to bisecting in place of proper debugging we became :(
Dave, thank you!

Rafael, this falls in obvious "regression with patches" case I think.

Tested-by: Andrey Borzenkov <redacted>

quoted hunk ↗ jump to hunk
The attached patch should fix things.

Regards,

Dave.
---
pcmcia: Actually verify against the cached CIS

Commit 1168386aa7d850ead2ae135d5a7949a592c6e9a0 introduced a printk into
a single line if without adding braces, resulting in PCMCIA devices
being added as new on resume.

Add the necessary braces.

Reported by: Andrey Borzenkov [off-list ref]
Signed-off by: David Kilroy [off-list ref]
---
diff --git a/drivers/pcmcia/cistpl.c b/drivers/pcmcia/cistpl.c
index 8d37768..91a00ec 100644
--- a/drivers/pcmcia/cistpl.c
+++ b/drivers/pcmcia/cistpl.c
@@ -351,10 +351,12 @@ int verify_cis_cache(struct pcmcia_socket *s)
        char *buf;

        buf = kmalloc(256, GFP_KERNEL);
-       if (buf == NULL)
+       if (buf == NULL) {
                dev_printk(KERN_WARNING, &s->dev,
                           "no memory for verifying CIS\n");
                return -ENOMEM;
+       }
+
        list_for_each_entry(cis, &s->cis_cache, node) {
                int len = cis->len;


  

Attachments

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