From owner-p4-projects@FreeBSD.ORG Mon Nov 17 07:55:05 2003 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1C90316A4CE; Mon, 17 Nov 2003 07:55:05 -0800 (PST) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id CBAD916A4E4 for ; Mon, 17 Nov 2003 07:55:04 -0800 (PST) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 18E2543FA3 for ; Mon, 17 Nov 2003 07:55:04 -0800 (PST) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.9/8.12.9) with ESMTP id hAHFt3XJ025119 for ; Mon, 17 Nov 2003 07:55:03 -0800 (PST) (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.9/8.12.9/Submit) id hAHFt3tV025116 for perforce@freebsd.org; Mon, 17 Nov 2003 07:55:03 -0800 (PST) (envelope-from jhb@freebsd.org) Date: Mon, 17 Nov 2003 07:55:03 -0800 (PST) Message-Id: <200311171555.hAHFt3tV025116@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Subject: PERFORCE change 42666 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 Nov 2003 15:55:05 -0000 http://perforce.freebsd.org/chv.cgi?CH=42666 Change 42666 by jhb@jhb_laptop on 2003/11/17 07:54:49 Move schedcpu() off into is own kthread to work around locking problems with calling this from softclock. Affected files ... .. //depot/projects/smpng/sys/kern/sched_4bsd.c#18 edit Differences ... ==== //depot/projects/smpng/sys/kern/sched_4bsd.c#18 (text+ko) ==== @@ -80,11 +80,11 @@ static int sched_quantum; /* Roundrobin scheduling quantum in ticks. */ #define SCHED_QUANTUM (hz / 10) /* Default sched quantum */ -static struct callout schedcpu_callout; static struct callout roundrobin_callout; static void roundrobin(void *arg); static void schedcpu(void *arg); +static void schedcpu_thread(void *dummy); static void sched_setup(void *dummy); static void maybe_resched(struct thread *td); static void updatepri(struct ksegrp *kg); @@ -348,7 +348,20 @@ mtx_unlock_spin(&sched_lock); } /* end of process loop */ sx_sunlock(&allproc_lock); - callout_reset(&schedcpu_callout, hz, schedcpu, NULL); +} + +/* + * Main loop for a kthread that executes schedcpu once a second. + */ +static void +schedcpu_thread(void *dummy) +{ + int nowake; + + for (;;) { + schedcpu(); + tsleep(&nowake, curthread->td_priority, "-", hz); + } } /* @@ -407,12 +420,13 @@ sched_quantum = SCHED_QUANTUM; hogticks = 2 * sched_quantum; - callout_init(&schedcpu_callout, CALLOUT_MPSAFE); callout_init(&roundrobin_callout, 0); /* Kick off timeout driven events by calling first time. */ roundrobin(NULL); - schedcpu(NULL); + + /* Kick off schedcpu kernel process. */ + kthread_create(schedcpu_thread, NULL, NULL, 0, 0, "schedcpu"); } /* External interfaces start here */