2.5.74-mm3 yenta-socket oops back

Andrew Morton akpm at osdl.org
Wed Jul 9 22:30:10 BST 2003


Michael Frank <mflt1 at micrologica.com.hk> wrote:
>
> 2.5.74-mm3 yenta-socket oopsed on the first boot at the same spot. 
> 
> I have successfully used both patches below with -mm1.
> 
> --- 1.50/drivers/pcmcia/cs.c    Mon Jun 30 22:22:30 2003
> +++ edited/cs.c Sat Jul  5 23:58:07 2003
> @@ -338,13 +338,13 @@
>         socket->erase_busy.next = socket->erase_busy.prev = &socket->erase_busy;
>         INIT_LIST_HEAD(&socket->cis_cache);
>         spin_lock_init(&socket->lock);
> -
> -       init_socket(socket);
> -
>         init_completion(&socket->thread_done);
>         init_waitqueue_head(&socket->thread_wait);
>         init_MUTEX(&socket->skt_sem);
>         spin_lock_init(&socket->thread_lock);
> +
> +       init_socket(socket);
> +
>         ret = kernel_thread(pccardd, socket, CLONE_KERNEL);
>         if (ret < 0)
>                 return ret;
> 

This one is clearly correct.

> and my patch (may apply with some offset, which I'm about to check
> into bk anyway):
> 
> --- linux/drivers/pcmcia/cs.c.old       Fri Jul  4 10:21:50 2003
> +++ linux/drivers/pcmcia/cs.c   Sun Jul  6 23:04:10 2003
> @@ -870,11 +870,13 @@
>  
>  void pcmcia_parse_events(struct pcmcia_socket *s, u_int events)
>  {
> -       spin_lock(&s->thread_lock);
> -       s->thread_events |= events;
> -       spin_unlock(&s->thread_lock);
> +       if (s->thread) {
> +               spin_lock(&s->thread_lock);
> +               s->thread_events |= events;
> +               spin_unlock(&s->thread_lock);
>  
> -       wake_up(&s->thread_wait);
> +               wake_up(&s->thread_wait);
> +       }
>  } /* pcmcia_parse_events */

This one may not be.  How did we get here with no thread to handle the
event?  Do you have an oops trace on this one?

Or just stick a

	if (!s->thread)
		dump_stack();

in there as well.




More information about the linux-pcmcia mailing list