armv8: make all defined target compile (ARMV8_All)
authorReto Achermann <reto.achermann@inf.ethz.ch>
Mon, 19 Aug 2019 16:09:41 +0000 (18:09 +0200)
committerReto Achermann <reto.achermann@inf.ethz.ch>
Tue, 20 Aug 2019 17:43:07 +0000 (19:43 +0200)
Signed-off-by: Reto Achermann <reto.achermann@inf.ethz.ch>

31 files changed:
include/arch/aarch64/barrelfish_kpi/paging_arch.h
include/cpuid/cpuid.h
kernel/arch/arm/gic_v2.c
lib/barrelfish/arch/aarch64/pmap.c
lib/barrelfish/arch/aarch64/sys_debug.c
lib/cpuid/Hakefile
lib/cpuid/cpuid_internal.h
lib/demandpaging/Hakefile
usr/bench/Hakefile
usr/bench/ahci/main.c
usr/bench/largepage/largepage_64_bench.c
usr/bench/mem_appel/vmpup.c
usr/bench/shared_mem_clock/Hakefile
usr/bench/thc_v_flounder/Hakefile
usr/bench/ump_bench/Hakefile
usr/drivers/e1000/e1000n.h
usr/drivers/iommu/modules/intel_vtd/intel_vtd.h
usr/drivers/lpc_kbd/Hakefile
usr/drivers/lpc_timer/Hakefile
usr/drivers/rtl8029/Hakefile
usr/gups/RandomAccess.h
usr/gups/common.c
usr/skb/measurement/Hakefile
usr/tests/fputest/Hakefile
usr/tests/hellotest/Hakefile
usr/tests/lrpc_fpu/Hakefile
usr/tests/pagetable/Hakefile
usr/tests/perfmontest/Hakefile
usr/tests/thcidctest/Hakefile
usr/tests/thctest/Hakefile
usr/vnode_map_test/vnode_map_test.c

index 6694ba0..a47e07f 100644 (file)
 
 /**
  * Bits within the various page directories and tables.
+ * XXX: THIS NEEDS TO BE FIXED!!!
  */
-#define PTABLE_EXECUTE_DISABLE  VMSAv8_64_PTABLE_EXECUTE_DISABLE
-#define PTABLE_GLOBAL_PAGE      VMSAv8_64_PTABLE_GLOBAL_PAGE
-#define PTABLE_ATTR_INDEX       VMSAv8_64_PTABLE_ATTR_INDEX
-#define PTABLE_DIRTY            VMSAv8_64_PTABLE_DIRTY
-#define PTABLE_ACCESSED         VMSAv8_64_PTABLE_ACCESSED
-#define PTABLE_CACHE_DISABLED   VMSAv8_64_PTABLE_CACHE_DISABLED
-#define PTABLE_WRITE_THROUGH    VMSAv8_64_PTABLE_WRITE_THROUGH
-#define PTABLE_USER_SUPERVISOR  VMSAv8_64_PTABLE_USER_SUPERVISOR
-#define PTABLE_READ_WRITE       VMSAv8_64_PTABLE_READ_WRITE
-#define PTABLE_PRESENT          VMSAv8_64_PTABLE_PRESENT
+#define PTABLE_EXECUTE_DISABLE  0 /* VMSAv8_64_PTABLE_EXECUTE_DISABLE */
+#define PTABLE_GLOBAL_PAGE      0 /* VMSAv8_64_PTABLE_GLOBAL_PAGE  */
+#define PTABLE_ATTR_INDEX       0 /* VMSAv8_64_PTABLE_ATTR_INDEX  */
+#define PTABLE_DIRTY            0 /* VMSAv8_64_PTABLE_DIRTY  */
+#define PTABLE_ACCESSED         0 /* VMSAv8_64_PTABLE_ACCESSED  */
+#define PTABLE_CACHE_DISABLED   0 /* VMSAv8_64_PTABLE_CACHE_DISABLED  */
+#define PTABLE_WRITE_THROUGH    0 /* VMSAv8_64_PTABLE_WRITE_THROUGH  */
+#define PTABLE_USER_SUPERVISOR  0 /* VMSAv8_64_PTABLE_USER_SUPERVISOR  */
+#define PTABLE_READ_WRITE       0 /* VMSAv8_64_PTABLE_READ_WRITE  */
+#define PTABLE_PRESENT          0 /* VMSAv8_64_PTABLE_PRESENT */
 
 #define PTABLE_SIZE             VMSAv8_64_PTABLE_SIZE
 #define PTABLE_ENTRIES          VMSAv8_64_PTABLE_NUM_ENTRIES
index 683b97f..77b0468 100644 (file)
@@ -30,28 +30,6 @@ struct cpuid_regs
 #define CPUID_REGS_INITIAL(_EAX, _ECX) {_EAX, 0, _ECX, 0}
 
 
-/**
- * \brief executes the cpuid instruction and stores the result in the struct
- *
- * \param reg   cpuid_regs struct to store the result value
- *
- * the reg parameter is used to supply the function & argument information and
- * returning the values
- */
-static inline void cpuid_exec(struct cpuid_regs *reg)
-{
-    if (reg == NULL) {
-        return;
-    }
-
-    __asm volatile("cpuid"
-                   : "=a" (reg->eax), "=b" (reg->ebx),
-                     "=c" (reg->ecx), "=d" (reg->edx)
-                   : "a" (reg->eax), "c" (reg->ecx)
-                  );
-}
-
-
 /*
  * ===============================================================================
  * library initialization
index ede7867..ba3c34d 100644 (file)
@@ -228,7 +228,7 @@ errval_t platform_init_ic_app(void) {
  * \param 0 is level-sensitive, 1 is edge-triggered
  * \param 0 is N-to-N, 1 is 1-N
  */
-errval_t platform_enable_interrupt(uint32_t int_id, uint8_t cpu_targets, uint16_t prio,
+errval_t platform_enable_interrupt(uint32_t int_id, uint16_t prio,
                           bool edge_triggered, bool one_to_n)
 {
     return SYS_ERR_OK;
index 7162137..897541a 100644 (file)
@@ -607,6 +607,7 @@ out:
     return SYS_ERR_OK;
 }
 
+int pmap_selective_flush = 0;
 static errval_t do_single_modify_flags(struct pmap_aarch64 *pmap, genvaddr_t vaddr,
                                        size_t pages, vregion_flags_t flags)
 {
index b295520..e6a1c3c 100644 (file)
@@ -64,3 +64,15 @@ errval_t sys_debug_hardware_global_timer_read(uint64_t *ret)
     return sr.error;
 }
 
+errval_t sys_debug_get_mdb_size(size_t *size)
+{
+    struct sysret sr = syscall2(SYSCALL_DEBUG, DEBUG_GET_MDB_SIZE);
+    *size = sr.value;
+    return sr.error;
+}
+
+errval_t sys_debug_print_mdb_counters(void)
+{
+    struct sysret sr = syscall2(SYSCALL_DEBUG, DEBUG_PRINT_MDB_COUNTERS);
+    return sr.error;
+}
index 16f093a..13480d4 100644 (file)
@@ -7,19 +7,20 @@
 -- ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
 --
 -- Hakefile for lib/cpuid
--- 
+--
 --------------------------------------------------------------------------
 
-[ build library { 
-    target = "cpuid", 
-    cFiles = [ 
+[ build library {
+    target = "cpuid",
+    cFiles = [
         "cpuid_generic.c",
         "cpuid_amd.c",
-        "cpuid_intel.c" 
+        "cpuid_intel.c"
     ],
-    mackerelDevices = [ 
-        "cpuid_intel", 
+    mackerelDevices = [
+        "cpuid_intel",
         "cpuid_amd"
-    ] 
-  } 
+    ],
+    architectures = [ "x86_64" ]
+  }
 ]
index 3bd2603..7d46013 100644 (file)
 #include <barrelfish/barrelfish.h>
 #include <cpuid/cpuid.h>
 
+
+/**
+ * \brief executes the cpuid instruction and stores the result in the struct
+ *
+ * \param reg   cpuid_regs struct to store the result value
+ *
+ * the reg parameter is used to supply the function & argument information and
+ * returning the values
+ */
+static inline void cpuid_exec(struct cpuid_regs *reg)
+{
+    if (reg == NULL) {
+        return;
+    }
+
+    __asm volatile("cpuid"
+                   : "=a" (reg->eax), "=b" (reg->ebx),
+                     "=c" (reg->ecx), "=d" (reg->edx)
+                   : "a" (reg->eax), "c" (reg->ecx)
+                  );
+}
+
+
 /*
  * ===============================================================================
  * library configuration
index 8308cf9..2f9e59f 100644 (file)
@@ -8,22 +8,24 @@
 -- ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
 --
 -- Hakefile for lib/dist
--- 
+--
 --------------------------------------------------------------------------
 
-[ build library { 
+[ build library {
     target = "demandpaging",
-    cFiles = [ 
-      "demandpaging.c", 
-      "framestore.c" 
+    cFiles = [
+      "demandpaging.c",
+      "framestore.c"
     ],
     addIncludes = [ "include" ],
-    addLibraries = libDeps [ "vfs" ]
+    addLibraries = libDeps [ "vfs" ],
+    architectures = ["x86_64"]
   },
   build application {
     target = "tests/demandpaging",
     cFiles = [ "test/demandpaging.c" ],
     addIncludes = [ "include" ],
-    addLibraries = libDeps [ "demandpaging", "bench" ]
+    addLibraries = libDeps [ "demandpaging", "bench" ],
+    architectures = ["x86_64"]
   }
 ]
index 7a2d44e..d43076e 100644 (file)
@@ -10,7 +10,7 @@
 --
 --------------------------------------------------------------------------
 
-[ build application { target = "bench", cFiles = [ "bench.c"] },
+[ build application { target = "bench", cFiles = [ "bench.c"], architectures = [ "x86_64" ]  },
 
   build application { target = "stsc_bench",
                       cFiles = ["stsc_bench.c"],
index db6248f..3969ed1 100644 (file)
@@ -70,13 +70,11 @@ dd_bench(char *source, char *target, size_t blocksize, size_t count)
 
     uint8_t *buffer = malloc(blocksize);
 
-#if defined(__x86_64__) || defined(__i386__)
     uint64_t tscperms;
     err = sys_debug_get_tsc_per_ms(&tscperms);
     assert(err_is_ok(err));
 
     uint64_t start = rdtsc();
-#endif
 
     if (buffer == NULL) {
         ret = -2;
@@ -132,7 +130,6 @@ out:
         }
     }
 
-#if defined(__x86_64__) || defined(__i386__)
     uint64_t stop = rdtsc();
     uint64_t elapsed_msecs = ((stop - start) / tscperms);
     double elapsed_secs = (double)elapsed_msecs/1000.0;
@@ -143,9 +140,6 @@ out:
         return kbps;
     else
         return ret;
-#else
-    return ret;
-#endif
 }
 
 struct bench_res {
@@ -167,11 +161,9 @@ fill_bench(char *target, uint8_t *buffer, size_t blocksize, size_t count, struct
     uint64_t start = 0, stop = 0;
     errval_t err;
 
-#if defined(__x86_64__) || defined(__i386__)
     uint64_t tscperms;
     err = sys_debug_get_tsc_per_ms(&tscperms);
     assert(err_is_ok(err));
-#endif
 
     errval_t ret = 0;
 
@@ -181,9 +173,7 @@ fill_bench(char *target, uint8_t *buffer, size_t blocksize, size_t count, struct
         return err;
     }
 
-#if defined(__x86_64__) || defined(__i386__)
     start = rdtsc();
-#endif
 
     if (buffer == NULL) {
         ret = -2;
@@ -223,8 +213,6 @@ fill_bench(char *target, uint8_t *buffer, size_t blocksize, size_t count, struct
         goto out;
     }
 
-
-#if defined(__x86_64__) || defined(__i386__)
     stop = rdtsc();
     {
         uint64_t elapsed_msecs = ((stop - start) / tscperms);
@@ -234,7 +222,6 @@ fill_bench(char *target, uint8_t *buffer, size_t blocksize, size_t count, struct
        printf("%lf\n", result->write);
     }
 
-#endif
     err = vfs_open(target, &target_vh);
     if (err_is_fail(err)) {
         printf("%s: %s (%ld)\n", target, err_getstring(err), err);
@@ -246,9 +233,8 @@ fill_bench(char *target, uint8_t *buffer, size_t blocksize, size_t count, struct
         ret = err;
         goto out;
     }
-#if defined(__x86_64__) || defined(__i386__)
+
     start = rdtsc();
-#endif
 
     size_t rsize;
     do {
@@ -289,16 +275,14 @@ out:
         }
     }
 
-#if defined(__x86_64__) || defined(__i386__)
     stop = rdtsc();
     {
         uint64_t elapsed_msecs = ((stop - start) / tscperms);
         double elapsed_secs = (double)elapsed_msecs/1000.0;
 
         result->read = ((double)total_bytes_read / 1024.0) / elapsed_secs;
-       printf("%lf\n", result->read);
+           printf("%lf\n", result->read);
     }
-#endif
 
     return ret;
 }
@@ -336,7 +320,7 @@ ahci_benchmark(int argc, char *argv[])
     return 0;
 }
 
-static int 
+static int
 ahci_fillbench(int argc, char *argv[])
 {
     if (argc != 2) {
@@ -420,7 +404,7 @@ shuffle_file(int argc, char *argv[])
     }
 
     uint8_t * buffer = malloc(blocksize);
-    
+
     if (buffer == NULL) {
         printf("failed to allocate buffer of size %zd\n", blocksize);
         return 1;
@@ -436,20 +420,18 @@ shuffle_file(int argc, char *argv[])
         return 1;
     }
 
-#if defined(__x86_64__) || defined(__i386__)
     uint64_t tscperms;
     err = sys_debug_get_tsc_per_ms(&tscperms);
     assert(err_is_ok(err));
 
     //printf("ticks per millisec: %" PRIu64 "\n", tscperms);
     uint64_t start = rdtsc();
-#endif
 
     size_t count2 = count;
     while (count2--) {
         RAND_NEXT;
         vfs_seek(f, VFS_SEEK_SET, RAND_BLOCK);
-        
+
         err = vfs_read(f, buffer, blocksize, &rsize);
         if (err_is_fail(err)) {
             DEBUG_ERR(err, "error reading file");
@@ -472,7 +454,6 @@ shuffle_file(int argc, char *argv[])
         assert(wsize == blocksize);
     }
 
-#if defined(__x86_64__) || defined(__i386__)
     uint64_t stop = rdtsc();
     uint64_t elapsed_msecs = ((stop - start) / tscperms);
     double elapsed_secs = (double)elapsed_msecs/1000.0;
@@ -481,13 +462,12 @@ shuffle_file(int argc, char *argv[])
 
     double kbps = ((double)(count * blocksize) / 1024.0) / elapsed_secs;
 
-    printf("%zu bytes read. %zu bytes written. %f s, %f kB/s\n", count * blocksize, count * blocksize, elapsed_secs, kbps); 
-#endif
+    printf("%zu bytes read. %zu bytes written. %f s, %f kB/s\n", count * blocksize, count * blocksize, elapsed_secs, kbps);
 
 out:
     if (buffer != NULL)
         free(buffer);
-    
+
     if (f != NULL) {
         err = vfs_close(f);
         if (err_is_fail(err)) {
@@ -531,14 +511,12 @@ rand_bench(char *target, uint8_t *buffer, size_t filesize, size_t blocksize, siz
         return 1;
     }
 
-#if defined(__x86_64__) || defined(__i386__)
     uint64_t tscperms;
     err = sys_debug_get_tsc_per_ms(&tscperms);
     assert(err_is_ok(err));
 
     //printf("ticks per millisec: %" PRIu64 "\n", tscperms);
     uint64_t start = rdtsc();
-#endif
 
     size_t count2 = count;
     while (count2--) {
@@ -555,7 +533,6 @@ rand_bench(char *target, uint8_t *buffer, size_t filesize, size_t blocksize, siz
         assert(rsize == blocksize);
     }
 
-#if defined(__x86_64__) || defined(__i386__)
     uint64_t stop = rdtsc();
     uint64_t elapsed_msecs = ((stop - start) / tscperms);
     double elapsed_secs = (double)elapsed_msecs/1000.0;
@@ -563,7 +540,6 @@ rand_bench(char *target, uint8_t *buffer, size_t filesize, size_t blocksize, siz
     result->read = ((double)(count * blocksize) / 1024.0) / elapsed_secs;
 
     start = rdtsc();
-#endif
 
     count2 = count;
     while(count2--) {
@@ -581,13 +557,11 @@ rand_bench(char *target, uint8_t *buffer, size_t filesize, size_t blocksize, siz
         vfs_flush(f);
     }
 
-#if defined(__x86_64__) || defined(__i386__)
     stop = rdtsc();
     elapsed_msecs = ((stop - start) / tscperms);
     elapsed_secs = (double)elapsed_msecs/1000.0;
 
     result->write = ((double)(count * blocksize) / 1024.0) / elapsed_secs;
-#endif
 
 out:
     if (f != NULL) {
@@ -678,14 +652,12 @@ rand_bench_time(char *target, uint8_t *buffer, size_t filesize, size_t blocksize
         return 1;
     }
 
-#if defined(__x86_64__) || defined(__i386__)
     uint64_t tscperms;
     err = sys_debug_get_tsc_per_ms(&tscperms);
     assert(err_is_ok(err));
 
     //printf("ticks per millisec: %" PRIu64 "\n", tscperms);
     uint64_t start = rdtsc();
-#endif
 
     size_t count2 = count;
     while (count2--) {
@@ -701,7 +673,7 @@ rand_bench_time(char *target, uint8_t *buffer, size_t filesize, size_t blocksize
 
         assert(rsize == blocksize);
     }
-#if defined(__x86_64__) || defined(__i386__)
+
     uint64_t stop = rdtsc();
     uint64_t elapsed_msecs = ((stop - start) / tscperms);
     double elapsed_secs = (double)elapsed_msecs/1000.0;
@@ -709,7 +681,6 @@ rand_bench_time(char *target, uint8_t *buffer, size_t filesize, size_t blocksize
     result->read = elapsed_secs;
 
     start = rdtsc();
-#endif
 
     count2 = count;
     while(count2--) {
index 45fb542..f96969a 100644 (file)
@@ -27,9 +27,8 @@
 //0b 0000 0000 0000 0000 0000 0100 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000
 #define SAFE_PMAP_ADDR_L ((genvaddr_t) (12ULL<<39))
 // 40M
-#define DEFAULT_SIZE 30*X86_64_LARGE_PAGE_SIZE
+#define DEFAULT_SIZE (30 * LARGE_PAGE_SIZE)
 
-#define LARGE_PAGE_SIZE X86_64_LARGE_PAGE_SIZE
 
 #define RUN_COUNT 50
 
@@ -62,7 +61,7 @@ unsigned long max2mshortrand;
     PTABLE_USER_SUPERVISOR |
     PTABLE_EXECUTE_DISABLE |
     PTABLE_READ_WRITE;
- */   
+ */
 static vregion_flags_t PMAP_DEFAULT_ACCESS =
     VREGION_FLAGS_READ_WRITE;
 
@@ -74,13 +73,13 @@ static void test_region(uint32_t *buf, size_t size, bool large, bool area)
     unsigned long min = 0;
     unsigned long max = 0;
     printf("base address: %lx\n", (uint64_t) buf);
-    
+
     //sequential access
     for (int j = 0; j < RUN_COUNT; j++) {
-        
+
         start = bench_tsc()/1000;
         for (unsigned long i = 0; i < size; i+=4) {
-            
+
             buf[i/4] = i;
         }
         for (unsigned long i = 0; i < size; i+=4) {
@@ -114,7 +113,7 @@ static void test_region(uint32_t *buf, size_t size, bool large, bool area)
         min2mshort = min;
         max2mshort = max;
     }
-    
+
     //random access
     //generate 1M random number array
     unsigned int* addrs;
@@ -124,12 +123,12 @@ static void test_region(uint32_t *buf, size_t size, bool large, bool area)
     addrs = malloc(2000000*sizeof(unsigned int));
     printf("malloc'd\n");
     for (int i = 0; i<2000000; i++)
-    {  
+    {
         addrs[i] = (rand() % (size/4));
     }
     printf("randomised\n");
     for (int j = 0; j < RUN_COUNT; j++) {
-        
+
         start = bench_tsc()/1000;
         for (int i = 0; i < 2000000; i++) {
             buf[addrs[i]] = addrs[i];
@@ -176,27 +175,27 @@ int main(void)
     mean2m = 0;
     genvaddr_t address;
 
-    
+
     //normal pages via pmap interface
     printf("\nstart 4k map with pmap\n");
     err = frame_alloc(&frame, bytes, &bytes);
     if (err_is_fail(err))
-    {  
+    {
         printf("error in frame_alloc: %s\n", err_getstring(err));
         exit(1);
     }
     assert(bytes >= DEFAULT_SIZE);
     printf("    get pmap\n");
     struct pmap *pmap = get_current_pmap();
-    
+
     printf("    obtain address\n");
-    err = pmap->f.determine_addr_raw(pmap, bytes, X86_64_BASE_PAGE_SIZE, &address);
+    err = pmap->f.determine_addr_raw(pmap, bytes, BASE_PAGE_SIZE, &address);
     if (err_is_fail(err))
     {
         printf("error in determine_addr_raw: %s\n", err_getstring(err));
         exit(1);
     }
-    
+
     printf("    map\n");
     err = pmap->f.map(pmap, address, frame, 0, bytes, PMAP_DEFAULT_ACCESS, NULL, &bytes);
     if (err_is_fail(err))
@@ -206,7 +205,7 @@ int main(void)
     }
     printf("addr: %lx\n", address);
     test_region((uint32_t*)address, DEFAULT_SIZE, false, false);
-    
+
     printf("\tunmap\n");
     err = pmap->f.unmap(pmap, address, bytes, NULL);
     if (err_is_fail(err))
@@ -214,14 +213,14 @@ int main(void)
         printf("error in unmap: %s\n", err_getstring(err));
         exit(1);
     }
-   
+
     //large page via pmap interface
     printf("start 2m map with pmap\n");
     bytes = DEFAULT_SIZE;
     struct capref frame2;
     err = frame_alloc(&frame2, bytes, &bytes);
     if (err_is_fail(err))
-    {  
+    {
         printf("error in frame_alloc: %s\n", err_getstring(err));
         exit(1);
     }
@@ -229,13 +228,13 @@ int main(void)
     pmap = get_current_pmap();
 
     printf("determine address\n");
-    err = pmap->f.determine_addr_raw(pmap, bytes, X86_64_LARGE_PAGE_SIZE, &address);
+    err = pmap->f.determine_addr_raw(pmap, bytes, LARGE_PAGE_SIZE, &address);
     if (err_is_fail(err))
     {
         printf("error in determine_addr_raw: %s\n", err_getstring(err));
         exit(1);
     }
-    
+
     printf("map\n");
     err = pmap->f.map(pmap, address, frame, 0, bytes, PMAP_DEFAULT_ACCESS | 0x0100, NULL, &bytes);
     if (err_is_fail(err))
@@ -245,7 +244,7 @@ int main(void)
     }
     printf("addr: %lx\n", address);
     test_region((uint32_t*)address, DEFAULT_SIZE, true, false);
-    
+
     err = pmap->f.unmap(pmap, address, bytes, NULL);
     if (err_is_fail(err))
     {
@@ -256,7 +255,7 @@ int main(void)
     bytes = LARGE_PAGE_SIZE;
     err = frame_alloc(&frame, bytes, &bytes);
     if (err_is_fail(err))
-    {  
+    {
         printf("error in frame_alloc: %s\n", err_getstring(err));
         exit(1);
     }
@@ -264,17 +263,17 @@ int main(void)
     pmap = get_current_pmap();
     err = pmap->f.map(pmap, SAFE_PMAP_ADDR, frame, 0, bytes, PMAP_DEFAULT_ACCESS, NULL, &bytes);
     if (err_is_fail(err))
-    { 
+    {
         printf("error in pmap small 4k\n");
         exit(1);
     }
-    test_region((uint32_t*) SAFE_PMAP_ADDR, LARGE_PAGE_SIZE, false, true); 
-    
+    test_region((uint32_t*) SAFE_PMAP_ADDR, LARGE_PAGE_SIZE, false, true);
+
     //small area 2m
     bytes = LARGE_PAGE_SIZE;
     err = frame_alloc(&frame, bytes, &bytes);
     if (err_is_fail(err))
-    {  
+    {
         printf("error in frame_alloc: %s\n", err_getstring(err));
         exit(1);
     }
@@ -290,9 +289,9 @@ int main(void)
     }
     printf("addr: %lx\n", SAFE_PMAP_ADDR_L);
     test_region((uint32_t*)SAFE_PMAP_ADDR_L, LARGE_PAGE_SIZE, true, true);
-    
-    
-        
+
+
+
     printf("large area\n");
     printf("average 4k: %lu, average 2m: %lu\n", mean4k, mean2m);
     printf("minimal 4k: %lu, minimal 2m: %lu\n", min4k, min2m);
index 3671b35..4cc64d1 100644 (file)
@@ -244,9 +244,17 @@ bf_alloc_pages(struct bf_mem *bfmem, size_t npages)
     pmap->f.lookup(pmap, (genvaddr_t)bfmem->vmem, &info);
     bfmem->mapping = info.mapping;
     genvaddr_t mem = (genvaddr_t) bfmem->vmem;
+
+    #ifdef __ARM_ARCH_8A__
+    if (VMSAv8_64_L2_BASE(mem) != VMSAv8_64_L2_BASE(mem + retfsize - 1)) {
+        debug_printf("WARN: mapping overlaps leaf pt!\n");
+    }
+    #else
     if (X86_64_PDIR_BASE(mem) != X86_64_PDIR_BASE(mem + retfsize - 1)) {
         debug_printf("WARN: mapping overlaps leaf pt!\n");
     }
+    #endif
+
 }
 
 __attribute__((unused))
index fc115a6..68f6d65 100644 (file)
@@ -15,5 +15,6 @@
                       cFiles = [ "bench.c" , "clock.c" ],
                       flounderDefs = [ "monitor" ],
                       flounderBindings = [ "bench" ],
-                      addLibraries = ["bench"] }
+                      addLibraries = ["bench"],
+                      architectures = [ "x86_64" ] }
 ]
index c2524ca..26043bc 100644 (file)
@@ -16,5 +16,6 @@
                       flounderDefs = [ "monitor" ],
                       flounderBindings = [ "bench" ],
                       flounderTHCStubs = [ "bench" ],
-                      addLibraries = [ "bench", "thc" ] }
+                      addLibraries = [ "bench", "thc" ],
+                      architectures = [ "x86_64" ]  }
 ]
index f0460ae..eaa151b 100644 (file)
@@ -18,7 +18,8 @@
   build application { target = "ump_latency_cache", cFiles = [ "main.c" , "latency_cache.c" ],
                       flounderDefs = [ "monitor" ],
                       flounderBindings = [ "bench" ],
-                      addLibraries = ["bench"] },
+                      addLibraries = ["bench"],
+                      architectures = [ "x86_64" ]  },
 
   build application { target = "ump_throughput", cFiles = [ "main.c" , "throughput.c" ],
                       flounderDefs = [ "monitor" ],
index 5e888a4..6c205f4 100644 (file)
@@ -173,7 +173,7 @@ typedef enum {
 
 
 /**
- * Data-structure to map sent buffer slots back to application slots 
+ * Data-structure to map sent buffer slots back to application slots
  */
 struct pbuf_desc {
     void *opaque;
@@ -187,7 +187,7 @@ struct e1000_driver_state {
     /* Kaluga args */
     char **args;
     int args_len;
-    
+
     /* PCI info*/
     struct pci_addr addr;
     struct pci_id id;
@@ -246,7 +246,7 @@ struct e1000_driver_state {
     int test_initialized;
     int lsc_interrupt_counter;
     uint64_t last_int_trigger_ticks;
-#endif 
+#endif
 };
 
 void e1000_driver_state_init(struct e1000_driver_state * eds);
@@ -263,7 +263,7 @@ void e1000_set_interrupt_throttle(struct e1000_driver_state *eds, uint16_t usec)
 
 void e1000_hwinit(struct e1000_driver_state *eds);
 
-void e1000_init_queues(struct e1000_driver_state* eds, struct capref rx, 
+void e1000_init_queues(struct e1000_driver_state* eds, struct capref rx,
                        size_t rx_bufs, struct capref tx, size_t tx_bufs);
 
 /*****************************************************************
@@ -287,7 +287,6 @@ static inline uint8_t i82541xx_get_icr_gpi_sdp(struct e1000_driver_state *eds)
 
 #include <barrelfish/sys_debug.h>
 
-#if 0
 /* apparently this does not work... getting usertrap #13 */
 extern cycles_t tscperms;
 
@@ -301,15 +300,7 @@ static inline void usec_delay(unsigned int ms)
     while(rdtsc() < end) {
         thread_yield();
     }
-
-}
-#else
-static inline void usec_delay(unsigned int count)
-{
-    while(count--) {
-        __asm__ __volatile__("inb $0x80, %b0" :: "a"(0));
-    }
 }
-#endif
+
 
 #endif
index e5482e3..ecbf21e 100644 (file)
@@ -15,6 +15,8 @@
 #include "../generic/common.h"
 #include "intel_vtd_debug.h"
 
+#include <target/x86_64/barrelfish_kpi/paging_target.h>
+
 struct vtd;
 
 #define INTEL_VTD_MAX_DOMAINS 128
index ca2e0b8..07a82db 100644 (file)
@@ -7,7 +7,7 @@
 -- ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
 --
 -- Hakefile for usr/drivers/lpc_kbd
--- 
+--
 --------------------------------------------------------------------------
 
 [ build application { target = "lpc_kbd",
@@ -15,6 +15,6 @@
                       flounderBindings = [ "keyboard", "mouse" ],
                       mackerelDevices = [ "lpc_kbd" ],
                       addLibraries = [ "pci" ],
-                      architectures = [ "x86_64", "x86_32" ]
+                      architectures = [ "x86_64" ]
                     }
 ]
index 5454fd1..4d7855c 100644 (file)
@@ -7,13 +7,14 @@
 -- ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
 --
 -- Hakefile for /usr/drivers/lpc_timer
--- 
+--
 --------------------------------------------------------------------------
 
 [ build application { target = "lpc_timer",
                       cFiles = [ "timer.c", "main.c" ],
                       flounderBindings = [ "timer" ],
                       mackerelDevices = [ "lpc_timer" ],
-                      addLibraries = [ "pci" ]
+                      addLibraries = [ "pci" ],
+                      architectures = [ "x86_64" ]
                     }
 ]
index 9746cb0..34f4c8e 100644 (file)
@@ -15,7 +15,8 @@
                       flounderBindings = [ "net_queue_manager",
                                             "net_soft_filters" ],
                       mackerelDevices = [ "rtl8029as" ],
-                      addLibraries = libDeps [ "pci", "netQmng" ]
+                      addLibraries = libDeps [ "pci", "netQmng" ],
+                      architectures = [ "x86_64" ]
                     }
 ]
 
index 45e64b3..5db8a5e 100644 (file)
@@ -5,8 +5,8 @@
 #include <time.h>       /* time */
 
 #ifdef BARRELFISH
-#include <bench/bench.h>
 #include <barrelfish/barrelfish.h>
+#include <bench/bench.h>
 #else
 #include <bench.h>
 #endif
index 87e24ae..64739bd 100644 (file)
@@ -10,6 +10,7 @@
 
 #ifdef BARRELFISH
 #include <numa.h>
+#include <errno.h>
 #else
 #include <stdio.h>
 #include <sys/types.h>
index 580f611..8bdb354 100644 (file)
 --
 --------------------------------------------------------------------------
 
-[ build application { target = "datagatherer", 
+[ build application { target = "datagatherer",
                       cFiles = [ "datagatherer.c", "cpuid.c" ],
                       flounderDefs = [ "monitor" ],
-                      addLibraries = [ "skb", "cpuid" ]
+                      addLibraries = [ "skb", "cpuid" ],
+                      architectures = [ "x86_64" ]
                     }
 ]
index 99bec2d..0c1e537 100644 (file)
@@ -7,13 +7,14 @@
 -- ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
 --
 -- Hakefile for fputest
--- 
+--
 --------------------------------------------------------------------------
 
 [ build application { target = "fputest",
                       cFiles = [ "fputest.c" ]
                     },
  build arrakisapplication { target = "arrakis_fputest",
-                      cFiles = [ "fputest.c" ]
+                      cFiles = [ "fputest.c" ],
+                        architectures = [ "x86_64" ]
                     }
 ]
index 2e87436..81a877d 100644 (file)
@@ -7,11 +7,12 @@
 -- ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
 --
 -- Hakefile for hellotest
--- 
+--
 --------------------------------------------------------------------------
 
 [ build arrakisapplication { target = "arrakis_hellotest",
-                             cFiles = [ "hellotest.c" ]
+                             cFiles = [ "hellotest.c" ],
+                             architectures = [ "x86_64" ]
                            },
   build application { target = "hellotest",
                              cFiles = [ "hellotest.c" ]
index 9cd9b74..223a776 100644 (file)
@@ -13,6 +13,7 @@
 [ build application { target = "lrpc_fpu",
                       cFiles = [ "lrpc_fpu.c" ],
                       flounderBindings = [ "bench" ],
-                      addLibraries = ["bench"]
+                      addLibraries = ["bench"],
+                      architectures = [ "x86_64" ]
                     }
 ]
index 67b8fcc..7265efd 100644 (file)
@@ -7,16 +7,18 @@
 -- ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
 --
 -- Hakefile for pagetable
--- 
+--
 --------------------------------------------------------------------------
 
-[ 
+[
   build application { target = "pagetable",
                       cFiles = [ "pagetable.c" ],
-                      addLibraries = libDeps ["posixcompat"]
+                      addLibraries = libDeps ["posixcompat"],
+                      architectures = [ "x86_64" ]
                     },
   build application { target = "pagefaults",
                       cFiles = [ "protect.c" ],
-                      addLibraries = libDeps ["posixcompat"]
+                      addLibraries = libDeps ["posixcompat"],
+                      architectures = [ "x86_64" ]
                     }
 ]
index 1f29706..4b8bd65 100644 (file)
 --------------------------------------------------------------------------
 
 [ build application { target = "perfmontest",
-                      cFiles = [ "perfmon.c" ]
+                      cFiles = [ "perfmon.c" ],
+                      architectures = [ "x86_64" ]
                     },
   build application { target = "spin",
-                      cFiles = [ "spin.c" ]
+                      cFiles = [ "spin.c" ],
+                      architectures = [ "x86_64" ]
                     }
 ]
index c0c65e1..3362a50 100644 (file)
@@ -7,7 +7,7 @@
 -- ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
 --
 -- Hakefile for thcidctest
--- 
+--
 --------------------------------------------------------------------------
 
 [ build application { target = "thcidctest",
@@ -16,6 +16,7 @@
                     flounderBindings = [ "ping_pong" ],
                     flounderTHCStubs = [ "ping_pong" ],
                     addLibraries = [ "thc" ],
-                    addCFlags = ["-Wno-shadow" ]
+                    addCFlags = ["-Wno-shadow" ],
+                    architectures = [ "x86_64" ]
                  }
 ]
index 2d243c1..13b2b84 100644 (file)
@@ -7,11 +7,12 @@
 -- ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
 --
 -- Hakefile for THCTest
--- 
+--
 --------------------------------------------------------------------------
 
-[ 
+[
   build application { target = "thctest",
                       cFiles = [ "thctest.c" ],
-                      addLibraries = [ "thc" ] }
+                      addLibraries = [ "thc" ],
+                      architectures = [ "x86_64" ] }
 ]
index a618198..d8d3e16 100644 (file)
@@ -18,7 +18,7 @@
 #define SAFE_VADDR (genvaddr_t)(8ULL<<39)
 #define SAFE_PMAP_ADDR (genvaddr_t)(9ULL<<39)
 // 2M
-#define DEFAULT_SIZE X86_64_LARGE_PAGE_SIZE
+#define DEFAULT_SIZE LARGE_PAGE_SIZE
 
 static enum objtype type[] = {
     ObjType_VNode_x86_64_pml4,
@@ -30,11 +30,11 @@ static enum objtype type[] = {
 // the offsets of the indices for the different page table levels
 static uint8_t offsets[] = { 39, 30, 21, 12 };
 
-static paging_x86_64_flags_t PAGE_DEFAULT_ACCESS =
+static uint64_t PAGE_DEFAULT_ACCESS =
     PTABLE_USER_SUPERVISOR |
     PTABLE_EXECUTE_DISABLE |
     PTABLE_READ_WRITE;
-    
+
 static vregion_flags_t PMAP_DEFAULT_ACCESS =
     VREGION_FLAGS_READ_WRITE;
 
@@ -47,7 +47,7 @@ static void test_region(uint32_t *buf, size_t size)
         {
         printf("%i, ", i);
         }
-        
+
         buf[i/4] = i;
     }
     for (int i = 0; i < size; i+=4) {
@@ -105,7 +105,7 @@ int main(void)
             exit(1);
         }
     }
-    
+
 // map as 4k and 2m frames with vnode_map
 // used to test the kernel code
 #if 1
@@ -113,7 +113,7 @@ int main(void)
     assert(err_is_ok(err));
     //printf("start 4k vnode map");
     err = vnode_map(vnodes[3], smallframe, (SAFE_VADDR>>offsets[3])&0x1f,
-            PAGE_DEFAULT_ACCESS, 0, 4*1024 / X86_64_BASE_PAGE_SIZE, mappings[0]);
+            PAGE_DEFAULT_ACCESS, 0, 4*1024 / BASE_PAGE_SIZE, mappings[0]);
 #endif
 #if 0
     if (err_is_fail(err)) {
@@ -136,7 +136,7 @@ int main(void)
     // unmap level 3 page table
     err = vnode_unmap(vnodes[2], vnodes[3], SAFE_VADDR>>offsets[2]&0x1f, 1);
     assert(err_is_ok(err));
-    
+
     // map as 2M large page
     printf("start 2m vnodemap\n");
     err = vnode_map(vnodes[2], frame, SAFE_VADDR>>offsets[2]&0x1f,
@@ -147,16 +147,16 @@ int main(void)
     }
 
     test_region((uint32_t*)SAFE_VADDR, DEFAULT_SIZE);
-    
+
     err = vnode_unmap(vnodes[2], frame, SAFE_VADDR>>offsets[2]&0x1f, DEFAULT_SIZE / X86_64_LARGE_PAGE_SIZE);
     if (err_is_fail(err)) {
         printf("vnode_unmap: %s\n", err_getstring(err));
     }
     assert(err_is_ok(err));
 #endif
-    
+
     struct pmap *pmap;
-    
+
 //normal page via pmap interface
 // used to test if 4k code still works
 // (although this would break the whole barrelfish boot)
@@ -169,8 +169,8 @@ int main(void)
     assert(bits >= 4*1024);
     printf("    get pmap\n");
     pmap = get_current_pmap();
-    
-    
+
+
     printf("    map\n");
     err = pmap->f.map(pmap, SAFE_PMAP_ADDR, smallframe, 0, bits, PMAP_DEFAULT_ACCESS, NULL, &bits);
     if (err_is_fail(err))
@@ -178,12 +178,12 @@ int main(void)
         printf("error in pmap: %s\n", err_getstring(err));
     }
     test_region((uint32_t*)SAFE_PMAP_ADDR, 4*1024);
-    
+
     printf("\tunmap\n");
     err = pmap->f.unmap(pmap, SAFE_PMAP_ADDR, bits, NULL);
 #endif
 
-    
+
 //large page via pmap interface
 // used to test the 2M pages on a safe address
 // looped 10 times to see if unmap does work
@@ -193,7 +193,7 @@ int main(void)
     err = frame_alloc(&frame, bytes, &bytes);
     assert(err_is_ok(err));
     assert(bytes >= DEFAULT_SIZE);
-    
+
     pmap = get_current_pmap();
 
     for(int i = 0; i<10; ++i){
@@ -204,22 +204,22 @@ int main(void)
             printf("error in pmap: %s\n", err_getstring(err));
             exit(1);
         }
-    
+
         test_region((uint32_t*)SAFE_PMAP_ADDR, DEFAULT_SIZE);
-    
+
         err = pmap->f.unmap(pmap, SAFE_PMAP_ADDR, bytes, NULL);
         if (err_is_fail(err))
         {
             printf("error in unmap: %s\n", err_getstring(err));
             exit(1);
-        } 
+        }
     }//end for
 #endif
 
 
         struct memobj a;
         genvaddr_t address;
-        
+
 //test determine_addr_raw as address obtainer
 // mapping 4k page
 #if 0
@@ -228,7 +228,7 @@ int main(void)
     err = frame_alloc(&smallframe, bits, &bits);
     assert(err_is_ok(err));
     assert(bits >= 4*1024);
-    
+
     //determine address
     a.size = bits;
     address = 0;
@@ -240,7 +240,7 @@ int main(void)
         printf("error in determine_addr: %s\n", err_getstring(err));
         exit(1);
     }
-    
+
     err = pmap->f.map(pmap, address, smallframe, 0, bits, PMAP_DEFAULT_ACCESS, NULL, &bits);
     if (err_is_fail(err))
     {
@@ -263,7 +263,7 @@ for(int i = 0; i<200; ++i){
     err = frame_alloc(&frame, bytes, &bytes);
     assert(err_is_ok(err));
     assert(bytes >= DEFAULT_SIZE);
-    
+
     a.size = bytes;
     printf("a.size: %x, %i\n", (unsigned int) a.size, (unsigned int) a.size);
     address = 0;
@@ -275,7 +275,7 @@ for(int i = 0; i<200; ++i){
         printf("error in determine_addr: %s\n", err_getstring(err));
         exit(1);
     }
-    
+
     err = pmap->f.map(pmap, address, frame, 0, bytes, PMAP_DEFAULT_ACCESS | 0x0100, NULL, &bytes);
     if (err_is_fail(err))
     {
@@ -289,7 +289,7 @@ for(int i = 0; i<200; ++i){
 }
 #endif
 
-    
+
 // multiple large pages with one go
 // the for loop is to test unmap
 #if 1
@@ -298,7 +298,7 @@ for(int i = 0; i<200; ++i){
     err = frame_alloc(&frame, bytes, &bytes);
     assert(err_is_ok(err));
     assert(bytes >= 10*DEFAULT_SIZE);
-    
+
     a.size = bytes;
     printf("a.size: %x, %i\n", (unsigned int) a.size, (unsigned int) a.size);
     address = 0;
@@ -310,8 +310,8 @@ for(int i = 0; i<200; ++i){
         printf("error in determine_addr: %s\n", err_getstring(err));
         exit(1);
     }
-for (int i=0; i<10; ++i) {  
-printf("map %i\n", i);  
+for (int i=0; i<10; ++i) {
+printf("map %i\n", i);
     err = pmap->f.map(pmap, address, frame, 0, bytes, PMAP_DEFAULT_ACCESS | 0x0100, NULL, &bytes);
     if (err_is_fail(err))
     {
@@ -326,9 +326,9 @@ printf("map %i\n", i);
     {
         printf("error in unmap: %s\n", err_getstring(err));
         exit(1);
-    } 
+    }
 }//endfor
-#endif   
+#endif
     printf("exited successfully\n");
     return 0;
 }