patch-2.4.21 linux-2.4.21/mm/highmem.c
Next file: linux-2.4.21/mm/mmap.c
Previous file: linux-2.4.21/mm/filemap.c
Back to the patch index
Back to the overall index
- Lines: 46
- Date:
2003-06-13 07:51:39.000000000 -0700
- Orig file:
linux-2.4.20/mm/highmem.c
- Orig date:
2002-11-28 15:53:15.000000000 -0800
diff -urN linux-2.4.20/mm/highmem.c linux-2.4.21/mm/highmem.c
@@ -77,7 +77,7 @@
flush_tlb_all();
}
-static inline unsigned long map_new_virtual(struct page *page)
+static inline unsigned long map_new_virtual(struct page *page, int nonblocking)
{
unsigned long vaddr;
int count;
@@ -96,6 +96,9 @@
if (--count)
continue;
+ if (nonblocking)
+ return 0;
+
/*
* Sleep for somebody else to unmap their entries
*/
@@ -126,7 +129,7 @@
return vaddr;
}
-void *kmap_high(struct page *page)
+void *kmap_high(struct page *page, int nonblocking)
{
unsigned long vaddr;
@@ -138,11 +141,15 @@
*/
spin_lock(&kmap_lock);
vaddr = (unsigned long) page->virtual;
- if (!vaddr)
- vaddr = map_new_virtual(page);
+ if (!vaddr) {
+ vaddr = map_new_virtual(page, nonblocking);
+ if (!vaddr)
+ goto out;
+ }
pkmap_count[PKMAP_NR(vaddr)]++;
if (pkmap_count[PKMAP_NR(vaddr)] < 2)
BUG();
+ out:
spin_unlock(&kmap_lock);
return (void*) vaddr;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)