aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2013-03-06 21:39:52 -0500
committerGlenn Elliott <gelliott@cs.unc.edu>2013-03-06 21:39:52 -0500
commit6aa68b530d69cd7e04b09b30ee76438a58fa9dc4 (patch)
tree9ce57e265c1c502334147f911ad4c19613cacfb7
parent22da1b2b4f02413e58bf01caa5b14e42e7913598 (diff)
share branch with otherswip-mmap-uncache
-rw-r--r--mm/mmap.c67
-rw-r--r--tools/perf/Makefile5
2 files changed, 30 insertions, 42 deletions
diff --git a/mm/mmap.c b/mm/mmap.c
index 84c64c4ef4b5..aebaabf4eb69 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -1202,55 +1202,43 @@ static inline int accountable_mapping(struct file *file, vm_flags_t vm_flags)
1202} 1202}
1203 1203
1204 1204
1205
1206
1207#if 0
1208#ifdef CONFIG_X86_PAT
1209static int make_pages_uncache(unsigned long addr, unsigned long end) 1205static int make_pages_uncache(unsigned long addr, unsigned long end)
1210{ 1206{
1211 struct vm_area_struct * vma; 1207 int ret = 0;
1212 int len; 1208 int nr_pages;
1213 int ret; 1209 struct page **pages;
1210 struct vm_area_struct *vma;
1211 void *page_addr;
1212 void *vaddr;
1213 int i;
1214 1214
1215 vma = find_vma(current->mm, addr); 1215 vma = find_vma(current->mm, addr);
1216 if (!vma) 1216 if (!vma)
1217 return -ENOMEM; 1217 return -ENOMEM;
1218 1218
1219 BUG_ON(addr >= end); 1219 BUG_ON(addr >= end);
1220 BUG_ON(end > vma->vm_end);
1221 1220
1222 len = DIV_ROUND_UP(end, PAGE_SIZE) - addr/PAGE_SIZE; 1221 nr_pages = DIV_ROUND_UP(end, PAGE_SIZE) - addr/PAGE_SIZE;
1222 pages = kmalloc(nr_pages * sizeof(*pages), GFP_KERNEL);
1223// page_addr = (void *)(addr & PAGE_MASK);
1224 page_addr = (void *)(vma->vm_start & PAGE_MASK);
1223 1225
1224 printk("%s: Marking addresses from %p to %p as uncacheable (%d pages).\n", __FUNCTION__, (void*)vma->vm_start, (void*)vma->vm_end, len); 1226 if (NULL == pages)
1225 ret = set_memory_uc(vma->vm_start, len); 1227 return -ENOMEM;
1226// ret = set_memory_uc((unsigned long)pfn_to_kaddr(page_to_pfn(virt_to_page(vma->vm_start))), len);
1227 printk("%s: result = %d\n", __FUNCTION__, ret);
1228
1229 return ret;
1230}
1231#else
1232static int make_pages_uncache(unsigned long addr, unsigned long end)
1233{
1234 // use ioremap_nocache()?
1235 return -ENOMEM;
1236}
1237#endif
1238#endif
1239 1228
1240static int make_pages_uncache(unsigned long addr, unsigned long end) 1229 for(i = 0; i < nr_pages; ++i, page_addr += PAGE_SIZE) {
1241{ 1230 pages[i] = page_addr;
1242 int len; 1231 }
1243 struct vm_area_struct *vma;
1244 1232
1245 vma = find_vma(current->mm, addr); 1233 vaddr = vmap(pages, nr_pages, VM_MAP, pgprot_noncached(vma->vm_page_prot));
1246 if (!vma) 1234 if (NULL == vaddr)
1247 return -ENOMEM; 1235 ret = -ENOMEM;
1248 1236
1249 BUG_ON(addr >= end); 1237 kfree(pages);
1250 BUG_ON(end > vma->vm_end);
1251 1238
1252 len = DIV_ROUND_UP(end, PAGE_SIZE) - addr/PAGE_SIZE; 1239 printk("uncache ret = %d\n", ret);
1253 1240
1241 return ret;
1254} 1242}
1255 1243
1256unsigned long mmap_region(struct file *file, unsigned long addr, 1244unsigned long mmap_region(struct file *file, unsigned long addr,
@@ -1267,6 +1255,7 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
1267 1255
1268 /* Clear old maps */ 1256 /* Clear old maps */
1269 error = -ENOMEM; 1257 error = -ENOMEM;
1258
1270munmap_back: 1259munmap_back:
1271 vma = find_vma_prepare(mm, addr, &prev, &rb_link, &rb_parent); 1260 vma = find_vma_prepare(mm, addr, &prev, &rb_link, &rb_parent);
1272 if (vma && vma->vm_start < addr + len) { 1261 if (vma && vma->vm_start < addr + len) {
@@ -1396,17 +1385,15 @@ out:
1396 if (!mlock_vma_pages_range(vma, addr, addr + len)) { 1385 if (!mlock_vma_pages_range(vma, addr, addr + len)) {
1397 mm->locked_vm += (len >> PAGE_SHIFT); 1386 mm->locked_vm += (len >> PAGE_SHIFT);
1398 } 1387 }
1399 } else if ((flags & MAP_POPULATE) && !(flags & MAP_NONBLOCK)) { 1388 }
1400 if (flags & MAP_UNCACHE) { 1389 else if ((flags & MAP_POPULATE) && !(flags & MAP_NONBLOCK)) {
1401 printk("populate!\n");
1402 }
1403 make_pages_present(addr, addr + len); 1390 make_pages_present(addr, addr + len);
1404 } 1391 }
1405/* 1392
1406 if (flags & MAP_UNCACHE) { 1393 if (flags & MAP_UNCACHE) {
1394 /* is this needed with pgprot_noncached() set earlier? */
1407 make_pages_uncache(addr, addr + len); 1395 make_pages_uncache(addr, addr + len);
1408 } 1396 }
1409 */
1410 1397
1411 return addr; 1398 return addr;
1412 1399
diff --git a/tools/perf/Makefile b/tools/perf/Makefile
index 940257b5774e..916c02e845a6 100644
--- a/tools/perf/Makefile
+++ b/tools/perf/Makefile
@@ -92,7 +92,8 @@ ifndef PERF_DEBUG
92 CFLAGS_OPTIMIZE = -O6 92 CFLAGS_OPTIMIZE = -O6
93endif 93endif
94 94
95CFLAGS = -fno-omit-frame-pointer -ggdb3 -Wall -Wextra -std=gnu99 -Werror $(CFLAGS_OPTIMIZE) -D_FORTIFY_SOURCE=2 $(EXTRA_WARNINGS) $(EXTRA_CFLAGS) 95#CFLAGS = -fno-omit-frame-pointer -ggdb3 -Wall -Wextra -std=gnu99 -Werror $(CFLAGS_OPTIMIZE) -D_FORTIFY_SOURCE=2 $(EXTRA_WARNINGS) $(EXTRA_CFLAGS)
96CFLAGS = -fno-omit-frame-pointer -ggdb3 -Wall -Wextra -std=gnu99 $(CFLAGS_OPTIMIZE) -D_FORTIFY_SOURCE=2 $(EXTRA_WARNINGS) $(EXTRA_CFLAGS)
96EXTLIBS = -lpthread -lrt -lelf -lm 97EXTLIBS = -lpthread -lrt -lelf -lm
97ALL_CFLAGS = $(CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 98ALL_CFLAGS = $(CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
98ALL_LDFLAGS = $(LDFLAGS) 99ALL_LDFLAGS = $(LDFLAGS)
@@ -161,7 +162,7 @@ endif
161# Those must not be GNU-specific; they are shared with perl/ which may 162# Those must not be GNU-specific; they are shared with perl/ which may
162# be built by a different compiler. (Note that this is an artifact now 163# be built by a different compiler. (Note that this is an artifact now
163# but it still might be nice to keep that distinction.) 164# but it still might be nice to keep that distinction.)
164BASIC_CFLAGS = -Iutil/include -Iarch/$(ARCH)/include 165BASIC_CFLAGS = -Iutil/include -Iarch/$(ARCH)/include -I/home/gelliott/LitmusGPU/litmus-rt/include
165BASIC_LDFLAGS = 166BASIC_LDFLAGS =
166 167
167# Guard against environment variables 168# Guard against environment variables