[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-ia64-devel] [Patch] cleanup warning of UC|WB attribute page



Hi,

This patch for cleanup the following warnings.

(XEN) mm.c:497:d0 Warning: UC to WB for mpaddr=xxxxxxxx

Currently UC|WB atrribute page is mapped as WB page.
So, if dom0 accsess UC|WB page as UC page, then we get the warnings.

I don't know why there are UC|WB attribute pages,
but actually there seems to be them in efi memmap.

(XEN) dom mem: type=13, attr=0x8000000000000008, 
range=[0x0000000000000000-0x0000000000001000) (4KB)
(XEN) dom mem: type=10, attr=0x8000000000000008, 
range=[0x0000000000001000-0x0000000000002000) (4KB)
(XEN) dom mem: type= 6, attr=0x8000000000000008, 
range=[0x0000000000002000-0x0000000000003000) (4KB)
(XEN) dom mem: type= 7, attr=0x0000000000000008, 
range=[0x0000000000003000-0x00000000000a0000) (628KB)
(XEN) dom mem: type= 6, attr=0x8000000000000009, 
range=[0x00000000000c0000-0x0000000000100000) (256KB)
(XEN) dom mem: type= 7, attr=0x0000000000000008, 
range=[0x0000000000100000-0x0000000004000000) (63MB)
[snip...]
(XEN) dom mem: type= 7, attr=0x0000000000000008, 
range=[0x000000006d3fc000-0x000000006d456000) (360KB)
(XEN) dom mem: type= 5, attr=0x8000000000000009, 
range=[0x000000006d456000-0x000000006d4fc000) (664KB)
(XEN) dom mem: type= 7, attr=0x0000000000000008, 
range=[0x000000006d4fc000-0x000000006d774000) (2MB)
(XEN) dom mem: type= 6, attr=0x8000000000000009, 
range=[0x000000006d774000-0x000000006d800000) (560KB)
(XEN) dom mem: type= 5, attr=0x8000000000000009, 
range=[0x000000007f884000-0x000000007fc7c000) (3MB)
(XEN) dom mem: type= 6, attr=0x8000000000000009, 
range=[0x000000007fc7c000-0x000000007fd00000) (528KB)
(XEN) dom mem: type= 8, attr=0x0000000000000008, 
range=[0x000000007fd00000-0x000000007fd42000) (264KB)
(XEN) dom mem: type= 5, attr=0x8000000000000009, 
range=[0x000000007fd64000-0x0000000080000000) (2MB)
(XEN) dom mem: type=11, attr=0x8000000000000001, 
range=[0x00000000fe000000-0x00000000fec00000) (12MB)
(XEN) dom mem: type=11, attr=0x0000000000000001, 
range=[0x00000000fec00000-0x00000000fef00000) (3MB)
(XEN) dom mem: type= 6, attr=0x8000000000000001, 
range=[0x00000000ff000000-0x0000000100000000) (16MB)
(XEN) dom mem: type= 7, attr=0x0000000000000008, 
range=[0x0000000100000000-0x0000000800000000) (28672MB)
(XEN) dom mem: type= 7, attr=0x0000000000000008, 
range=[0x0000004080000000-0x0000004091695000) (278MB)
(XEN) dom mem: type=11, attr=0x8000000000000001, 
range=[0x00000ffc00000000-0x00000ffc80000000) (2048MB)
(XEN) dom mem: type=12, attr=0x8000000000000001, 
range=[0x0003fffffc000000-0x0004000000000000) (64MB)

Signed-off-by: Akio Takebe <takebe_akio@xxxxxxxxxxxxxx>


Best Regards,

Akio Takebe

---
diff -r 63263d715d43 xen/arch/ia64/xen/mm.c
--- a/xen/arch/ia64/xen/mm.c    Thu May 03 14:38:26 2007 -0600
+++ b/xen/arch/ia64/xen/mm.c    Sun May 06 12:55:52 2007 +0900
@@ -493,6 +493,8 @@ u64 translate_domain_pte(u64 pteval, u64
                           port space.  Also prevents possible address
                           aliasing issues.  */
                        if (!(mpaddr - IO_PORTS_PADDR < IO_PORTS_SIZE))
+                       /* and also except UC|WB page */
+                       if (!efi_ucwb(mpaddr, PAGE_SIZE)) 
                                gdprintk(XENLOG_WARNING, "Warning: UC to WB "
                                         "for mpaddr=%lx\n", mpaddr);
                        pteval = (pteval & ~_PAGE_MA_MASK) | _PAGE_MA_WB;
@@ -956,6 +958,52 @@ assign_domain_same_page(struct domain *d
         (void)__assign_domain_page(d, mpaddr, mpaddr, flags);
     }
 }
+
+int
+efi_ucwb(unsigned long physaddr, unsigned long size)
+{
+    void *efi_map_start, *efi_map_end;
+    u64 efi_desc_size;
+    void* p;
+
+    efi_map_start = __va(ia64_boot_param->efi_memmap);
+    efi_map_end   = efi_map_start + ia64_boot_param->efi_memmap_size;
+    efi_desc_size = ia64_boot_param->efi_memdesc_size;
+
+    for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) {
+        efi_memory_desc_t* md = (efi_memory_desc_t *)p;
+        unsigned long start = md->phys_addr;
+        unsigned long end = md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT);
+
+        if (start <= physaddr && physaddr < end) {
+            if ((physaddr + size) > end) {
+                gdprintk(XENLOG_INFO, "%s: physaddr 0x%lx size = 0x%lx\n",
+                        __func__, physaddr, size);
+                return 0;
+            }
+
+            // for UC space
+            if (md->type == EFI_RUNTIME_SERVICES_CODE ||
+                md->type == EFI_RUNTIME_SERVICES_DATA ||
+                md->type == EFI_ACPI_RECLAIM_MEMORY   ||
+                md->type == EFI_ACPI_MEMORY_NVS       ||
+                md->type == EFI_RESERVED_TYPE){
+                if( md->attribute & EFI_MEMORY_WB &&
+                    md->attribute & EFI_MEMORY_UC )
+                        return 1;
+            }
+
+            return 0;
+        }
+
+        if (physaddr < start) {
+            break;
+        }
+    }
+
+    return 1;
+}
+
 
 int
 efi_mmio(unsigned long physaddr, unsigned long size)
diff -r 63263d715d43 xen/include/asm-ia64/mm.h
--- a/xen/include/asm-ia64/mm.h Thu May 03 14:38:26 2007 -0600
+++ b/xen/include/asm-ia64/mm.h Sun May 06 12:55:52 2007 +0900
@@ -431,6 +431,7 @@ extern unsigned long assign_domain_mmio_
 extern unsigned long assign_domain_mmio_page(struct domain *d, unsigned long 
mpaddr, unsigned long phys_addr, unsigned long size, unsigned long flags);
 extern unsigned long assign_domain_mach_page(struct domain *d, unsigned long 
mpaddr, unsigned long size, unsigned long flags);
 int domain_page_mapped(struct domain *d, unsigned long mpaddr);
+int efi_ucwb(unsigned long physaddr, unsigned long size);
 int efi_mmio(unsigned long physaddr, unsigned long size);
 extern unsigned long ____lookup_domain_mpa(struct domain *d, unsigned long 
mpaddr);
 extern unsigned long do_dom0vp_op(unsigned long cmd, unsigned long arg0, 
unsigned long arg1, unsigned long arg2, unsigned long arg3);


_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.