Runtime check for PAE option on BSD 6+ i386

Kostik Belousov kostikbel at gmail.com
Tue May 3 17:43:44 UTC 2011


On Tue, May 03, 2011 at 11:44:32AM -0400, John Baldwin wrote:
> On Tuesday, May 03, 2011 9:10:26 am Philip Soeberg wrote:
> > Hi fellow FreeBSD hackers,
> > 
> > I've been using the following poor-man's approach in my driver init for 
> > ages in an attempt at detecting PAE option on BSD 6 (or greater) i386 
> > kernels, as I depend on dmabus(9) but provide a loadable kernel module only.
> > 
> >  >>>
> >    if (sizeof(void*) == 4) {
> >      if (((uint64_t)(cnt.v_page_count * cnt.v_page_size) / 1073741824) 
> >  >= 4) {
> >        printf("FreeBSD i386 detected with PAE option enabled. FreeBSD 
> > PAE type\n");
> >        printf("kernels does not support loadable modules which use DMA. 
> > Please\n");
> >        printf("reconfigure your kernel for non-PAE or switch to amd64 
> > kernel.\n");
> >        return EFAULT;
> >      }
> >    }
> > <<<
> 
> Hmmm, even this isn't really accurate as some folks may choose to enable PAE
> even with < 4GB to get PG_NX functionality.
>  
> > afaik there's a sysctl method of checking this per BSD7 (or is it 8?), 
> > but what about BSD6? Any hints on how I can runtime detect the above?
> 
> Definitely a kern.features.pae sysctl in 7.  I don't see anything similar in 
> 6.  

Read %cr4 and test the bit there.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20110503/a9c2f1da/attachment.pgp


More information about the freebsd-hackers mailing list