Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 4 Aug 1997 02:42:05 -0700 (PDT)
From:      fpm@n2.net
To:        FreeBSD-gnats-submit@FreeBSD.ORG
Subject:   i386/4225: Missing parentheses in /usr/src/sys/i386/isa/isa.c
Message-ID:  <199708040942.CAA17905@jsbach.n2.net>
Resent-Message-ID: <199708040950.CAA24492@hub.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         4225
>Category:       i386
>Synopsis:       Missing parentheses in /usr/src/sys/i386/isa/isa.c
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Aug  4 02:50:01 PDT 1997
>Last-Modified:
>Originator:     Frank MacLachlan
>Organization:
N2 Networking
>Release:        FreeBSD 3.0-CURRENT i386
>Environment:

	
	3.0-CURRENT CVsup'ed 3 Aug 97 at 23:30 PDT.
	Relevent file is /usr/src/sys/i386/isa/isa.c.
	File's id is:

	$Id: isa.c,v 1.99 1997/07/29 05:24:36 msmith Exp $

>Description:

	
	A number of if statements in this file assume that the
	precedence of the '&' operator is higher than the '=='
	operator and are incorrectly evaluated.  The resulting
	tests are totally useless.

>How-To-Repeat:

	
	Problem was found while inspecting the code.

>Fix:
	
	
	Apply the following patch:

*** isa.c.ORIG	Sun Aug  3 23:37:00 1997
--- isa.c	Mon Aug  4 00:58:06 1997
***************
*** 648,654 ****
  	if (chan & ~VALID_DMA_MASK)
  		panic("isa_dma_release: channel out of range");
  
! 	if (dma_inuse & (1 << chan) == 0)
  		printf("isa_dma_release: channel %d not in use\n", chan);
  #endif
  
--- 648,654 ----
  	if (chan & ~VALID_DMA_MASK)
  		panic("isa_dma_release: channel out of range");
  
! 	if ((dma_inuse & (1 << chan)) == 0)
  		printf("isa_dma_release: channel %d not in use\n", chan);
  #endif
  
***************
*** 705,711 ****
  	    || (chan >= 4 && (nbytes > (1<<17) || (u_int)addr & 1)))
  		panic("isa_dmastart: impossible request");
  
! 	if (dma_inuse & (1 << chan) == 0)
  		printf("isa_dmastart: channel %d not acquired\n", chan);
  #endif
  
--- 705,711 ----
  	    || (chan >= 4 && (nbytes > (1<<17) || (u_int)addr & 1)))
  		panic("isa_dmastart: impossible request");
  
! 	if ((dma_inuse & (1 << chan)) == 0)
  		printf("isa_dmastart: channel %d not acquired\n", chan);
  #endif
  
***************
*** 813,819 ****
  	if (chan & ~VALID_DMA_MASK)
  		panic("isa_dmadone: channel out of range");
  
! 	if (dma_inuse & (1 << chan) == 0)
  		printf("isa_dmadone: channel %d not acquired\n", chan);
  #endif
  
--- 813,819 ----
  	if (chan & ~VALID_DMA_MASK)
  		panic("isa_dmadone: channel out of range");
  
! 	if ((dma_inuse & (1 << chan)) == 0)
  		printf("isa_dmadone: channel %d not acquired\n", chan);
  #endif
  
***************
*** 823,829 ****
  	 * isa_dmastart() once because they use Auto DMA mode.  If we
  	 * leave this in, drivers that do this will print this continuously.
  	 */
! 	if (dma_busy & (1 << chan) == 0)
  		printf("isa_dmadone: channel %d not busy\n", chan);
  #endif
  
--- 823,829 ----
  	 * isa_dmastart() once because they use Auto DMA mode.  If we
  	 * leave this in, drivers that do this will print this continuously.
  	 */
! 	if ((dma_busy & (1 << chan)) == 0)
  		printf("isa_dmadone: channel %d not busy\n", chan);
  #endif
  
***************
*** 910,922 ****
  	u_long	ef;
  
  	/* channel active? */
! 	if (dma_inuse & (1 << chan) == 0) {
  		printf("isa_dmastatus: channel %d not active\n", chan);
  		return(-1);
  	}
  
  	/* still busy? */
! 	if (dma_busy & (1 << chan) == 0) {
  		return(0);
  	}
  	
--- 910,922 ----
  	u_long	ef;
  
  	/* channel active? */
! 	if ((dma_inuse & (1 << chan)) == 0) {
  		printf("isa_dmastatus: channel %d not active\n", chan);
  		return(-1);
  	}
  
  	/* still busy? */
! 	if ((dma_busy & (1 << chan)) == 0) {
  		return(0);
  	}
  	
>Audit-Trail:
>Unformatted:



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