X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=kitten%2Fuser%2Fhello_world%2Fhello_world.c;fp=kitten%2Fuser%2Fhello_world%2Fhello_world.c;h=7831b505e5a8586754e3fd10d005ed33768d162e;hb=66a1a4c7a9edcd7d8bc207aca093d694a6e6b5b2;hp=0000000000000000000000000000000000000000;hpb=f7cf9c19ecb0a589dd45ae0d2c91814bd3c2acc2;p=palacios-OLD.git diff --git a/kitten/user/hello_world/hello_world.c b/kitten/user/hello_world/hello_world.c new file mode 100644 index 0000000..7831b50 --- /dev/null +++ b/kitten/user/hello_world/hello_world.c @@ -0,0 +1,111 @@ +/* Copyright (c) 2008, Sandia National Laboratories */ + +#include +#include +#include +#include +#include + +static void pmem_api_test(void); +static void aspace_api_test(void); + +int +main(int argc, char *argv[], char *envp[]) +{ + int i; + id_t aspace_id; + + printf("Hello, world!\n"); + + printf("Arguments:\n"); + for (i = 0; i < argc; i++) + printf(" argv[%d] = %s\n", i, argv[i]); + + printf("Environment Variables:\n"); + for (i = 0; envp[i] != NULL; i++) + printf(" envp[%d] = %s\n", i, envp[i]); + + pmem_api_test(); + aspace_api_test(); + + printf("Spinning forever...\n"); + while (1) {} +} + +static void +pmem_api_test(void) +{ + struct pmem_region query, result; + unsigned long bytes_umem = 0; + int status; + + printf("TEST BEGIN: Physical Memory Management\n"); + + query.start = 0; + query.end = ULONG_MAX; + pmem_region_unset_all(&query); + + printf(" Physical Memory Map:\n"); + while ((status = pmem_query(&query, &result)) == 0) { + printf(" [%#016lx, %#016lx) %-11s\n", + result.start, + result.end, + (result.type_is_set) + ? pmem_type_to_string(result.type) + : "UNSET" + ); + + if (result.type == PMEM_TYPE_UMEM) + bytes_umem += (result.end - result.start); + + query.start = result.end; + } + + if (status != -ENOENT) { + printf("ERROR: pmem_query() status=%d\n", status); + } + + printf(" Total User-Level Managed Memory: %lu bytes\n", bytes_umem); + + printf("TEST END: Physical Memory Management\n"); +} + +static void +aspace_api_test(void) +{ + int status; + id_t my_id, new_id; + + printf("TEST BEGIN: Address Space Management\n"); + + if ((status = aspace_get_myid(&my_id)) != 0) + printf("ERROR: aspace_get_myid() status=%d\n", status); + else + printf(" My address space ID is %u\n", my_id); + + printf(" Creating a new aspace: "); + + status = aspace_create(ANY_ID, "TEST-ASPACE", &new_id); + if (status) + printf("\nERROR: aspace_create() status=%d\n", status); + else + printf("id=%u\n", new_id); + + printf(" Using SMARTMAP to map myself into aspace %u\n", new_id); + status = aspace_smartmap(my_id, new_id, SMARTMAP_ALIGN, SMARTMAP_ALIGN); + if (status) printf("ERROR: aspace_smartmap() status=%d\n", status); + + aspace_dump2console(new_id); + + status = aspace_unsmartmap(my_id, new_id); + if (status) printf("ERROR: aspace_unsmartmap() status=%d\n", status); + + printf(" Destroying a aspace %u: ", new_id); + status = aspace_destroy(new_id); + if (status) + printf("ERROR: aspace_destroy() status=%d\n", status); + else + printf("OK\n"); + + printf("TEST END: Address Space Management\n"); +}