unified (weak) sys_pipe implementation
[safe/jmp/linux-2.6] / arch / um / kernel / physmem.c
index 8aeac4d..9757085 100644 (file)
@@ -1,25 +1,17 @@
 /*
- * Copyright (C) 2000 - 2003 Jeff Dike (jdike@addtoit.com)
+ * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
  * Licensed under the GPL
  */
 
-#include "linux/mm.h"
-#include "linux/rbtree.h"
-#include "linux/slab.h"
-#include "linux/vmalloc.h"
 #include "linux/bootmem.h"
-#include "linux/module.h"
+#include "linux/mm.h"
 #include "linux/pfn.h"
-#include "asm/types.h"
-#include "asm/pgtable.h"
-#include "kern_util.h"
+#include "asm/page.h"
 #include "as-layout.h"
-#include "mode_kern.h"
-#include "mem.h"
+#include "init.h"
+#include "kern.h"
 #include "mem_user.h"
 #include "os.h"
-#include "kern.h"
-#include "init.h"
 
 static int physmem_fd = -1;
 
@@ -49,10 +41,10 @@ int __init init_maps(unsigned long physmem, unsigned long iomem,
        total_len = phys_len + iomem_len + highmem_len;
 
        map = alloc_bootmem_low_pages(total_len);
-       if(map == NULL)
+       if (map == NULL)
                return -ENOMEM;
 
-       for(i = 0; i < total_pages; i++){
+       for (i = 0; i < total_pages; i++) {
                p = &map[i];
                memset(p, 0, sizeof(struct page));
                SetPageReserved(p);
@@ -63,16 +55,6 @@ int __init init_maps(unsigned long physmem, unsigned long iomem,
        return 0;
 }
 
-/* Changed during early boot */
-static unsigned long kmem_top = 0;
-
-unsigned long get_kmem_end(void)
-{
-       if(kmem_top == 0)
-               kmem_top = CHOOSE_MODE(kmem_end_tt, kmem_end_skas);
-       return kmem_top;
-}
-
 void map_memory(unsigned long virt, unsigned long phys, unsigned long len,
                int r, int w, int x)
 {
@@ -81,9 +63,9 @@ void map_memory(unsigned long virt, unsigned long phys, unsigned long len,
 
        fd = phys_mapping(phys, &offset);
        err = os_map_memory((void *) virt, fd, offset, len, r, w, x);
-       if(err) {
-               if(err == -ENOMEM)
-                       printk("try increasing the host's "
+       if (err) {
+               if (err == -ENOMEM)
+                       printk(KERN_ERR "try increasing the host's "
                               "/proc/sys/vm/max_map_count to <physical "
                               "memory size>/4096\n");
                panic("map_memory(0x%lx, %d, 0x%llx, %ld, %d, %d, %d) failed, "
@@ -106,12 +88,15 @@ void __init setup_physmem(unsigned long start, unsigned long reserve_end,
        offset = uml_reserved - uml_physmem;
        err = os_map_memory((void *) uml_reserved, physmem_fd, offset,
                            len - offset, 1, 1, 1);
-       if(err < 0){
-               os_print_error(err, "Mapping memory");
+       if (err < 0) {
+               printf("setup_physmem - mapping %ld bytes of memory at 0x%p "
+                      "failed - errno = %d\n", len - offset,
+                      (void *) uml_reserved, err);
                exit(1);
        }
 
-       /* Special kludge - This page will be mapped in to userspace processes
+       /*
+        * Special kludge - This page will be mapped in to userspace processes
         * from physmem_fd, so it needs to be written out there.
         */
        os_seek_file(physmem_fd, __pa(&__syscall_stub_start));
@@ -122,20 +107,20 @@ void __init setup_physmem(unsigned long start, unsigned long reserve_end,
                     len - bootmap_size - reserve);
 }
 
-int phys_mapping(unsigned long phys, __u64 *offset_out)
+int phys_mapping(unsigned long phys, unsigned long long *offset_out)
 {
        int fd = -1;
 
-       if(phys < physmem_size){
+       if (phys < physmem_size) {
                fd = physmem_fd;
                *offset_out = phys;
        }
-       else if(phys < __pa(end_iomem)){
+       else if (phys < __pa(end_iomem)) {
                struct iomem_region *region = iomem_regions;
 
-               while(region != NULL){
-                       if((phys >= region->phys) &&
-                          (phys < region->phys + region->size)){
+               while (region != NULL) {
+                       if ((phys >= region->phys) &&
+                           (phys < region->phys + region->size)) {
                                fd = region->fd;
                                *offset_out = phys - region->phys;
                                break;
@@ -143,7 +128,7 @@ int phys_mapping(unsigned long phys, __u64 *offset_out)
                        region = region->next;
                }
        }
-       else if(phys < __pa(end_iomem) + highmem){
+       else if (phys < __pa(end_iomem) + highmem) {
                fd = physmem_fd;
                *offset_out = phys - iomem_size;
        }
@@ -179,17 +164,17 @@ __uml_setup("iomem=", parse_iomem,
  * setup_iomem, both of which run during early boot.  Afterwards, it's
  * unchanged.
  */
-struct iomem_region *iomem_regions = NULL;
+struct iomem_region *iomem_regions;
 
-/* Initialized in parse_iomem */
-int iomem_size = 0;
+/* Initialized in parse_iomem and unchanged thereafter */
+int iomem_size;
 
 unsigned long find_iomem(char *driver, unsigned long *len_out)
 {
        struct iomem_region *region = iomem_regions;
 
-       while(region != NULL){
-               if(!strcmp(region->driver, driver)){
+       while (region != NULL) {
+               if (!strcmp(region->driver, driver)) {
                        *len_out = region->size;
                        return region->virt;
                }
@@ -206,12 +191,12 @@ int setup_iomem(void)
        unsigned long iomem_start = high_physmem + PAGE_SIZE;
        int err;
 
-       while(region != NULL){
+       while (region != NULL) {
                err = os_map_memory((void *) iomem_start, region->fd, 0,
                                    region->size, 1, 1, 0);
-               if(err)
-                       printk("Mapping iomem region for driver '%s' failed, "
-                              "errno = %d\n", region->driver, -err);
+               if (err)
+                       printk(KERN_ERR "Mapping iomem region for driver '%s' "
+                              "failed, errno = %d\n", region->driver, -err);
                else {
                        region->virt = iomem_start;
                        region->phys = __pa(region->virt);