2007/7/24, Attilio Rao <[EMAIL PROTECTED]>:
2007/7/23, Jung-uk Kim <[EMAIL PROTECTED]>:
>
> Probably it should be something like this?
>
> @@ -60,9 +60,6 @@
>  extern struct mtx kse_lock;
>
>
> -TAILQ_HEAD(, kse_upcall) zombie_upcalls =
> -       TAILQ_HEAD_INITIALIZER(zombie_upcalls);
> -
>  static int thread_update_usr_ticks(struct thread *td);
>  static void thread_alloc_spare(struct thread *td);
>  static struct thread *thread_schedule_upcall(struct thread *td, struct 
kse_upcall *ku);
> @@ -106,7 +103,7 @@
>                 td->td_upcall->ku_owner = NULL;
>                 TAILQ_REMOVE(&td->td_upcall->ku_proc->p_upcalls, 
td->td_upcall,
>                     ku_link);
> -               TAILQ_INSERT_HEAD(&zombie_upcalls, td->td_upcall, ku_link);
> +               upcall_free(td->td_upcall);
>                 mtx_unlock_spin(&kse_lock);
>                 td->td_upcall = NULL;
>         }

This patch is not going to work as you call upcall_free (which uses
uma_zfree()) with necessary a spinlock held (td_upcall is thread
spinlock protected). UMA has its own locking stuffs in it (as
sleepable locks) so this will create locks mismatches.
Even if you could avoid it with rearrangement (probailly) I'm going to
ripristinate the old way of cleaning up stuffs in thread_reap()
through an ad-hoc upcall_reap() function.

Just for records: it seems that the upcall freeing removal has
happened after revision 1.238 (so just after the splitting up of the
KSE parts from the rest of the kernel). It is so a long-standing bug,
it seems.

Thanks,
Attilio


--
Peace can only be achieved by understanding - A. Einstein
_______________________________________________
cvs-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/cvs-all
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to