patch-2.4.0-test6 linux/mm/highmem.c

Next file: linux/mm/memory.c
Previous file: linux/mm/filemap.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test5/linux/mm/highmem.c linux/mm/highmem.c
@@ -22,8 +22,6 @@
 #include <linux/swap.h>
 #include <linux/slab.h>
 
-unsigned long highmem_mapnr;
-
 /*
  * Take one locked page, return another low-memory locked page.
  */
@@ -61,7 +59,7 @@
 	 * we stored its data into the new regular_page.
 	 */
 	page_cache_release(page);
-	new_page = mem_map + MAP_NR(regular_page);
+	new_page = virt_to_page(regular_page);
 	LockPage(new_page);
 	return new_page;
 }
@@ -83,12 +81,11 @@
 	}
 
 	vaddr = kmap(highpage);
-	copy_page((void *)vaddr, (void *)page_address(page));
+	copy_page((void *)vaddr, page_address(page));
 	kunmap(highpage);
 
-	/* Preserve the caching of the swap_entry. */
-	highpage->index = page->index;
-	highpage->mapping = page->mapping;
+	if (page->mapping)
+		BUG();
 
 	/*
 	 * We can just forget the old page since 
@@ -119,6 +116,8 @@
 {
 	int i;
 
+	flush_cache_all();
+
 	for (i = 0; i < LAST_PKMAP; i++) {
 		struct page *page;
 		pte_t pte;
@@ -136,7 +135,7 @@
 			BUG();
 		pte_clear(pkmap_page_table+i);
 		page = pte_page(pte);
-		page->virtual = 0;
+		page->virtual = NULL;
 	}
 	flush_tlb_all();
 }
@@ -175,17 +174,17 @@
 
 			/* Somebody else might have mapped it while we slept */
 			if (page->virtual)
-				return page->virtual;
+				return (unsigned long) page->virtual;
 
 			/* Re-start */
 			goto start;
 		}
 	}
 	vaddr = PKMAP_ADDR(last_pkmap_nr);
-	pkmap_page_table[last_pkmap_nr] = mk_pte(page, kmap_prot);
+	set_pte(&(pkmap_page_table[last_pkmap_nr]), mk_pte(page, kmap_prot));
 
 	pkmap_count[last_pkmap_nr] = 1;
-	page->virtual = vaddr;
+	page->virtual = (void *) vaddr;
 
 	return vaddr;
 }
@@ -201,7 +200,7 @@
 	 * We cannot call this from interrupts, as it may block
 	 */
 	spin_lock(&kmap_lock);
-	vaddr = page->virtual;
+	vaddr = (unsigned long) page->virtual;
 	if (!vaddr)
 		vaddr = map_new_virtual(page);
 	pkmap_count[PKMAP_NR(vaddr)]++;
@@ -217,7 +216,7 @@
 	unsigned long nr;
 
 	spin_lock(&kmap_lock);
-	vaddr = page->virtual;
+	vaddr = (unsigned long) page->virtual;
 	if (!vaddr)
 		BUG();
 	nr = PKMAP_NR(vaddr);

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)