svn commit: r290156 - head/sys/amd64/amd64
Oliver Pinter
oliver.pinter at hardenedbsd.org
Mon Jul 25 21:19:55 UTC 2016
On Thu, Oct 29, 2015 at 8:07 PM, Conrad E. Meyer <cem at freebsd.org> wrote:
> Author: cem
> Date: Thu Oct 29 19:07:00 2015
> New Revision: 290156
> URL: https://svnweb.freebsd.org/changeset/base/290156
>
> Log:
> pmap_change_attr: Only fixup DMAP for DMAPed ranges
>
> pmap_change_attr must change the memory type of both the requested KVA
> and the corresponding DMAP mappings (if such mappings exist), to satisfy
> an Intel requirement that two or more mappings to the same physical
> pages must have the same memory type.
>
> However, not all kernel mapped pages have corresponding DMAP mappings --
> for example, 64-bit BARs. Skip fixing up the DMAP for out-of-bounds
> addresses.
>
> Submitted by: Steve Wahl <steve_wahl at dell.com>
> Reviewed by: alc, jhb
> Sponsored by: Dell Compellent
> Differential Revision: https://reviews.freebsd.org/D4030
>
> Modified:
> head/sys/amd64/amd64/pmap.c
Hi Konstantin!
MFC back this to 10-STABLE? Sure, it was never marked as MFC, but cem@
never mark them.
Thanks,
Oliver
>
> Modified: head/sys/amd64/amd64/pmap.c
> ==============================================================================
> --- head/sys/amd64/amd64/pmap.c Thu Oct 29 19:02:24 2015 (r290155)
> +++ head/sys/amd64/amd64/pmap.c Thu Oct 29 19:07:00 2015 (r290156)
> @@ -6411,7 +6411,7 @@ pmap_change_attr_locked(vm_offset_t va,
> */
> for (tmpva = base; tmpva < base + size; ) {
> pdpe = pmap_pdpe(kernel_pmap, tmpva);
> - if (*pdpe == 0)
> + if (pdpe == NULL || *pdpe == 0)
> return (EINVAL);
> if (*pdpe & PG_PS) {
> /*
> @@ -6484,7 +6484,8 @@ pmap_change_attr_locked(vm_offset_t va,
> X86_PG_PDE_CACHE);
> changed = TRUE;
> }
> - if (tmpva >= VM_MIN_KERNEL_ADDRESS) {
> + if (tmpva >= VM_MIN_KERNEL_ADDRESS &&
> + (*pdpe & PG_PS_FRAME) < dmaplimit) {
> if (pa_start == pa_end) {
> /* Start physical address run. */
> pa_start = *pdpe & PG_PS_FRAME;
> @@ -6513,7 +6514,8 @@ pmap_change_attr_locked(vm_offset_t va,
> X86_PG_PDE_CACHE);
> changed = TRUE;
> }
> - if (tmpva >= VM_MIN_KERNEL_ADDRESS) {
> + if (tmpva >= VM_MIN_KERNEL_ADDRESS &&
> + (*pde & PG_PS_FRAME) < dmaplimit) {
> if (pa_start == pa_end) {
> /* Start physical address run. */
> pa_start = *pde & PG_PS_FRAME;
> @@ -6540,7 +6542,8 @@ pmap_change_attr_locked(vm_offset_t va,
> X86_PG_PTE_CACHE);
> changed = TRUE;
> }
> - if (tmpva >= VM_MIN_KERNEL_ADDRESS) {
> + if (tmpva >= VM_MIN_KERNEL_ADDRESS &&
> + (*pte & PG_PS_FRAME) < dmaplimit) {
> if (pa_start == pa_end) {
> /* Start physical address run. */
> pa_start = *pte & PG_FRAME;
> _______________________________________________
> svn-src-head at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-head
> To unsubscribe, send any mail to "svn-src-head-unsubscribe at freebsd.org"
More information about the svn-src-all
mailing list