tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: PAT & pmap(9) changes (was Re: CVS commit: src)
On Wednesday 07 July 2010 22:49:51 David Young wrote:
> On Tue, Jul 06, 2010 at 08:50:36PM +0000, Christoph Egger wrote:
> > Module Name: src
> > Committed By: cegger
> > Date: Tue Jul 6 20:50:36 UTC 2010
> >
> > Modified Files:
> > src/share/man/man9: pmap.9
> > src/sys/arch/amd64/include: pte.h
> > src/sys/arch/hppa/include: pmap.h
> > src/sys/arch/i386/include: pte.h
> > src/sys/arch/mips/include: pmap.h
> > src/sys/arch/mips/mips: pmap.c
> > src/sys/arch/sgimips/sgimips: bus.c
> > src/sys/arch/x86/include: cpuvar.h pmap.h specialreg.h
> > src/sys/arch/x86/x86: bus_space.c cpu.c pmap.c
> > src/sys/arch/xen/x86: cpu.c
> > Added Files:
> > src/sys/arch/x86/include: pte.h
> >
> > Log Message:
> > Turn PMAP_NOCACHE into MI flag.
> > Add MI flags PMAP_WRITE_COMBINE, PMAP_WRITE_BACK, PMAP_NOCACHE_OVR.
> > Update pmap(9) manpage.
> >
> > hppa: Remove MD PMAP_NOCACHE flag as it exists as MI flag
> > mips: Rename MD PMAP_NOCACHE to PGC_NOCACHE.
> >
> > x86: Implement new MI flags using Page-Attribute Tables.
> > x86: Implement BUS_SPACE_MAP_PREFETCHABLE.
> >
> > Patch presented on tech-kern@:
> > http://mail-index.netbsd.org/tech-kern/2010/06/30/msg008458.html
> >
> > No comments on this last version.
>
> Some of us scarcely have had time to reply to the second version. :-/
It was enough time for code review. I thought, the way how it works
was clear after the discussion of the first version stopped.
> I don't think that a developer can predict from the manual page what
> effect the memory-type flags will have. Some combination of the doco,
> API, and implementation needs improvement.
Please make your suggenstions.
> The x86 implementation gives the kernel more than one opportunity to
> program conflicting memory types on the same physical page. The first
> opportunity to set conflicting types is an MI flag, PMAP_NOCACHE_OVR,
> that caters to a quirk of x86 where the "uncacheable" page attribute
> need not have "last say" on a page's memory type, but the MTRR can
> override. The second opportunity to set conflicting types is by
> entering two mappings for the same page, VA1 -> PA and VA2 -> PA, VA1 !=
> VA2.
I don't see any conflicts.
PAT is per VA, MTRR is per PA.
The memory types are combined by the memory controller as described in
http://mail-index.netbsd.org/tech-kern/2010/05/20/msg008186.html
For more information, please find the APM Vol.2
http://support.amd.com/de/Processor_TechDocs/24593.pdf
chapter 7.8
You think, we use PAT since I committed my patch? That's wrong.
PAT is a hw feature which can't be disabled. Every x86 cpu showing
PAT in the cpuid feature list uses PAT.
My patch configures PAT to our needs (namely being able to specify
PMAP_WRITE_COMBINE) and gives MI a way to optimize access to
memory regions such as MMIO.
> Considering the potential conflicts, it seems that the memory-type flags
> are all "hints." In that case, they should be described as such in the
> documentation, and there is no use for the hint PMAP_NOCACHE_OVR, which
> is identical to the PMAP_NOCACHE hint.
I think defining the memory characteristic is more than just a 'hint'.
> If the memory-type flags are not intended to be hints, but the
> implementation must obey the flags; or if sometimes the flags are hints,
> and sometimes they are mandatory; then either the implementation or the
> implementation and the API need improvement.
Please make your suggestions.
> The implementation needs to check for conflicts. The API may need to
> accept both mandatory memory types and hints. In this way, the behavior is
> predictable.
Where do you see the conflicts?
Christoph
Home |
Main Index |
Thread Index |
Old Index