Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 24 Jul 2007 12:03:06 +0200
From:      "Attilio Rao" <attilio@freebsd.org>
To:        "Jung-uk Kim" <jkim@freebsd.org>
Cc:        Marcus Alves Grando <mnag@freebsd.org>, cvs-src@freebsd.org, Doug Barton <dougb@freebsd.org>, src-committers@freebsd.org, cvs-all@freebsd.org
Subject:   Re: cvs commit: src/sys/kern kern_kse.c kern_thread.c src/sys/sys proc.h
Message-ID:  <3bbf2fe10707240303k584be666n5d721ca099c1e490@mail.gmail.com>
In-Reply-To: <200707231750.34776.jkim@FreeBSD.org>
References:  <200707231452.l6NEqMot074554@repoman.freebsd.org> <46A4F893.20609@FreeBSD.org> <46A515B9.6060608@FreeBSD.org> <200707231750.34776.jkim@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
2007/7/23, Jung-uk Kim <jkim@freebsd.org>:
>
> 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.


Thanks,
Attilio


-- 
Peace can only be achieved by understanding - A. Einstein



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3bbf2fe10707240303k584be666n5d721ca099c1e490>