From owner-cvs-src@FreeBSD.ORG Wed Jun 11 07:26:16 2008 Return-Path: Delivered-To: cvs-src@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C46271065706; Wed, 11 Jun 2008 07:26:16 +0000 (UTC) (envelope-from benno@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id BD8128FC17; Wed, 11 Jun 2008 07:26:16 +0000 (UTC) (envelope-from benno@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m5B7QGNX055138; Wed, 11 Jun 2008 07:26:16 GMT (envelope-from benno@repoman.freebsd.org) Received: (from svn2cvs@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m5B7QGVH055137; Wed, 11 Jun 2008 07:26:16 GMT (envelope-from benno@repoman.freebsd.org) Message-Id: <200806110726.m5B7QGVH055137@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: svn2cvs set sender to benno@repoman.freebsd.org using -f From: Benno Rice Date: Wed, 11 Jun 2008 07:26:02 +0000 (UTC) To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org X-FreeBSD-CVS-Branch: HEAD Cc: Subject: cvs commit: src/sys/dev/smc if_smc.c if_smcvar.h X-BeenThere: cvs-src@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 11 Jun 2008 07:26:16 -0000 benno 2008-06-11 07:26:02 UTC FreeBSD src repository Modified files: sys/dev/smc if_smc.c if_smcvar.h Log: SVN rev 179719 on 2008-06-11 07:26:02Z by benno Switch to using a normal mutex instead of a spin mutex. We still use the interrupt filter due to performance problems that show up if we don't. The main problem seen is that, due to the interrupt being edge triggered, we occasionally miss interrupts which leads us to not notice that we can transmit more packets. Using the new approach, which just schedules a task on a taskqueue, we are guaranteed to have the task run even if the interrupt arrived while we were already executing. If we were to use an ithread the system would mask the interrupt while the handler is run and we'd miss interrupts. Revision Changes Path 1.3 +29 -15 src/sys/dev/smc/if_smc.c 1.3 +1 -7 src/sys/dev/smc/if_smcvar.h