[IA64] Respect memory attributes for EFI_RUNTIME memory
authorawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>
Thu, 4 Jan 2007 23:00:56 +0000 (16:00 -0700)
committerawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>
Thu, 4 Jan 2007 23:00:56 +0000 (16:00 -0700)
Respect memory attributes when mapping EFI_RUNTIME and reserved pages.
Not all of these pages are writable and/or cachable!

Signed-off-by: Jes Sorensen <jes@sgi.com>
xen/arch/ia64/xen/dom_fw.c

index 97a687e08c8b250946f57db1c3538ca9026a38df..3f9dd9cf2abb82f9bbd6c910cc39be457ae7c757 100644 (file)
@@ -533,6 +533,7 @@ complete_dom0_memmap(struct domain *d,
                u64 start = md->phys_addr;
                u64 size = md->num_pages << EFI_PAGE_SHIFT;
                u64 end = start + size;
+               unsigned long flags;
 
                switch (md->type) {
                case EFI_RUNTIME_SERVICES_CODE:
@@ -540,9 +541,19 @@ complete_dom0_memmap(struct domain *d,
                case EFI_ACPI_RECLAIM_MEMORY:
                case EFI_ACPI_MEMORY_NVS:
                case EFI_RESERVED_TYPE:
-                       /* Map into dom0 - All these are writable.  */
-                       assign_domain_mach_page(d, start, size,
-                                               ASSIGN_writable);
+                       /*
+                        * Map into dom0 - We must respect protection
+                        * and cache attributes.  Not all of these pages
+                        * are writable!!!
+                        */
+                       flags = ASSIGN_writable;        /* dummy - zero */
+                       if (md->attribute & EFI_MEMORY_WP)
+                               flags |= ASSIGN_readonly;
+                       if (md->attribute & EFI_MEMORY_UC)
+                               flags |= ASSIGN_nocache;
+
+                       assign_domain_mach_page(d, start, size, flags);
+
                        /* Fall-through.  */
                case EFI_MEMORY_MAPPED_IO:
                        /* Will be mapped with ioremap.  */