From owner-freebsd-hackers@FreeBSD.ORG Tue Feb 23 07:34:15 2010 Return-Path: Delivered-To: freebsd-hackers@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 10832106566C for ; Tue, 23 Feb 2010 07:34:15 +0000 (UTC) (envelope-from shrivatsan_v@yahoo.com) Received: from web112005.mail.gq1.yahoo.com (web112005.mail.gq1.yahoo.com [67.195.23.83]) by mx1.freebsd.org (Postfix) with SMTP id C07AD8FC08 for ; Tue, 23 Feb 2010 07:34:14 +0000 (UTC) Received: (qmail 4917 invoked by uid 60001); 23 Feb 2010 07:34:12 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024; t=1266910451; bh=YsiuL1/DOJWtnRa2eFzzjIE19mnLk3nczNiTZoO1qVg=; h=Message-ID:X-YMail-OSG:Received:X-Mailer:Date:From:Subject:To:Cc:MIME-Version:Content-Type; b=gmTk+GF9/nz5rVF306WkKtIap0igroMVesJCSTs9LsoXqskRagdR9AJApcl/ruuepxlwV682VMIQT0iQlzW9ZIv3AZeG13g8s7UKSALqRO5vu0wp3KOGXqaH1/lcSj5gQGpC6XT67ev7wR6bzYHDBWa+UJ8ZXd2Sk5FvezXjRZE= DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; h=Message-ID:X-YMail-OSG:Received:X-Mailer:Date:From:Subject:To:Cc:MIME-Version:Content-Type; b=XFdPZ0emBecnPfzEj4kOiy87W8ffyWwMtMlVa8Soe+97euJS6vDnGESUEXw9krw9J9RtKEdb0Z4PvNYOQfmwgIR8BA0YPU7eDVJwDIoIWGZDalRhiT4AnbcOQ7d8JrCvNM7WAk2joCtORScMNa4SvsCjNj694KlFvsebhq0/Zug=; Message-ID: <986041.3700.qm@web112005.mail.gq1.yahoo.com> X-YMail-OSG: AGyr0okVM1kEBtW.w_g7H_rHzJCgph4.NPCpIrXp9cB6DPeLLfD0SdLh1QSK33aUUtYmBRnXowuqhnLE93RU.1ElODDBmACqO9uy99sXrgf_UBMVrhSlsn69t39SvbxvnbD44vEocViP_1ezGyTsuw5JucYZdMCNEKbWJsWKHFWVQAx7xCB7KPRPXIzKadEp00p7Ot0SzlZZ.4JEC4.pHWcLq6MnrBCiG78Z3r.1R9zdCRQxNctvkgTaWaNLzDFKHWkyZctDV2O196Q.t7lIvw-- Received: from [66.129.224.36] by web112005.mail.gq1.yahoo.com via HTTP; Mon, 22 Feb 2010 23:34:11 PST X-Mailer: YahooMailClassic/9.2.12 YahooMailWebService/0.8.100.260964 Date: Mon, 22 Feb 2010 23:34:11 -0800 (PST) From: Shrivatsan To: freebsd-hackers@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: shrivatsan@gmail.com Subject: sched_lock mutex and sleepq_wait X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Feb 2010 07:34:15 -0000 Hi, I am trying to understand how msleep() routine suspends the currently executing thread. I see that msleep() calls sleepq_wait(). What I don't understand here is the way in which sched_lock mutex is handled. I took the following snippet from FreeBSD 6: sleepq_wait(void *wchan) { MPASS(!(curthread->td_flags & TDF_SINTR)); mtx_lock_spin(&sched_lock); sleepq_switch(wchan); mtx_unlock_spin(&sched_lock); } sched_lock mutex is held, and sleepq_switch() eventually calls cpu_switch() which switches to a new thread. I don't exactly understand when the sched_lock mutex is released. Can someone please help me? Thanks, -shrivatsan