From owner-svn-src-head@FreeBSD.ORG Wed Feb 4 15:59:52 2015 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 787954A5; Wed, 4 Feb 2015 15:59:52 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 64A87B00; Wed, 4 Feb 2015 15:59:52 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t14FxqHl008649; Wed, 4 Feb 2015 15:59:52 GMT (envelope-from imp@FreeBSD.org) Received: (from imp@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t14FxqrC008648; Wed, 4 Feb 2015 15:59:52 GMT (envelope-from imp@FreeBSD.org) Message-Id: <201502041559.t14FxqrC008648@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: imp set sender to imp@FreeBSD.org using -f From: Warner Losh Date: Wed, 4 Feb 2015 15:59:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r278210 - head/sys/dev/ed X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Feb 2015 15:59:52 -0000 Author: imp Date: Wed Feb 4 15:59:51 2015 New Revision: 278210 URL: https://svnweb.freebsd.org/changeset/base/278210 Log: Add comment about why checking for 0xff is OK. There's two bits in the ISR that are normally clear. RST is one, though in some overflow cases it can be set. RDC is only set when a remote DMA is finished from the memory mapped memory to the transmit rings, which we poll fore in the code with ED_LOCK around the operation that would set it. Modified: head/sys/dev/ed/if_ed.c Modified: head/sys/dev/ed/if_ed.c ============================================================================== --- head/sys/dev/ed/if_ed.c Wed Feb 4 14:49:47 2015 (r278209) +++ head/sys/dev/ed/if_ed.c Wed Feb 4 15:59:51 2015 (r278210) @@ -976,8 +976,10 @@ edintr(void *arg) /* * loop until there are no more new interrupts. When the card goes * away, the hardware will read back 0xff. Looking at the interrupts, - * it would appear that 0xff is impossible, or at least extremely - * unlikely. + * it would appear that 0xff is impossible as ED_ISR_RST is noramlly + * clear. ED_ISR_RDC is also normally clear and only set while + * we're transferring memory to the card and we're holding the + * ED_LOCK (so we can't get into here). */ while ((isr = ed_nic_inb(sc, ED_P0_ISR)) != 0 && isr != 0xff) {