Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 27 Oct 2006 09:03:56 +0900
From:      Seigo Tanimura <tanimura@tanimura.dyndns.org>
To:        Hiroki Sato <hrs@FreeBSD.org>
Cc:        cvs-src@FreeBSD.org, src-committers@FreeBSD.org, re@FreeBSD.org, cvs-all@FreeBSD.org, tanimura@FreeBSD.org
Subject:   Re: cvs commit: src/sys/pci agp.c
Message-ID:  <200610270003.k9R03ula032256@silver.tanimura.dyndns.org>
In-Reply-To: <20061027.051637.115993470.hrs@allbsd.org>
References:  <200610150504.k9F548ld008933@repoman.freebsd.org> <20061027.051637.115993470.hrs@allbsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 27 Oct 2006 05:16:37 +0900 (JST),
  Hiroki Sato <hrs@FreeBSD.org> said:

hrs> Seigo Tanimura <tanimura@FreeBSD.org> wrote
hrs>   in <200610150504.k9F548ld008933@repoman.freebsd.org>:

ta> tanimura    2006-10-15 05:04:07 UTC
ta> 
ta> FreeBSD src repository
ta> 
ta> Modified files:
ta> sys/pci              agp.c
ta> Log:
ta> Fix the wraparound of memsize >=2GB.
ta> 
ta> Revision  Changes    Path
ta> 1.54      +3 -2      src/sys/pci/agp.c

hrs>  I have doubt about this change because int memsize->u_int memsize
hrs>  does not solve the problem directly; memsize never occurs wraparound
hrs>  actually and an implicit cast to unsigned int just makes the problem
hrs>  invisible.  The questionable code fragment in agp.c is the following:

hrs>  memsize = ptoa(Maxmem) >> 20;
hrs>  for (i = 0; i < agp_max_size; i++) {
hrs>          if (memsize <= agp_max[i][0])
hrs>                  break;
hrs>  }

hrs>  ptoa(Maxmem)>>20 will occur a wraparound problem when Maxmem>=2GB, so
hrs>  this part should be fixed instead.  BTW, this should be a problem
hrs>  only on i386 since the definition of ptoa() is "#define ptoa(x) ((x)
hrs>  << PAGE_SHIFT)".  The other platforms use a cast like "#define
hrs>  ptoa(x) ((unsigned long)(x) << PAGE_SHIFT)".

hrs>  I think it can be solved by using "ptoa((unsigned long)Maxmem)" or
hrs>  so, but I am not sure if this is reasonable because there are more
hrs>  notional types like vm_paddr_t.  If "#define ptoa(x) ((vm_paddr_t)(x)
hrs>  << PAGE_SHIFT)" works fine on all platforms, it looks more reasonable
hrs>  to me, but I have a misunderstanding?

ptoa() is machine-dependent; (unsigned long) should be OK.
(vm_paddr_t) would mess up the namespace.

What hassles me is that Maxmem is *NOT* unsigned, grrr...

hrs> --
hrs> | Hiroki SATO

-- 
Seigo Tanimura <tanimura@tanimura.dyndns.org> <tanimura@FreeBSD.org>



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