#ifndef __VMM_CHKPT_STORES_H__
#define __VMM_CHKPT_STORES_H__
+//#include <palacios/vmm_types.h>
/*
* This is a place holder to ensure that the _v3_extensions section gets created by gcc
#define register_chkpt_store(store) \
- static struct v3_chkpt_interface * _v3_store_#store \
+ static struct chkpt_interface * _v3_store_##store \
__attribute__((used)) \
__attribute__((unused, __section__("_v3_chkpt_stores"), \
aligned(sizeof(addr_t)))) \
- = store;
+ = &store;
+
+
+
+
+
+#include <palacios/vmm_util.h>
+
+
+static void * debug_open_chkpt(char * url, chkpt_mode_t mode) {
+
+ if (mode == LOAD) {
+ V3_Print("Cannot load from debug store\n");
+ return NULL;
+ }
+
+ V3_Print("Opening Checkpoint: %s\n", url);
+
+ return (void *)1;
+}
+
+
+
+static int debug_close_chkpt(void * store_data) {
+ V3_Print("Closing Checkpoint\n");
+ return 0;
+}
+
+static void * debug_open_ctx(void * store_data,
+ void * parent_ctx,
+ char * name) {
+ V3_Print("[%s]\n", name);
+ return (void *)1;
+}
+
+static int debug_close_ctx(void * store_data, void * ctx) {
+ V3_Print("[CLOSE]\n");
+ return 0;
+}
+
+static int debug_save(void * store_data, void * ctx,
+ char * tag, uint64_t len, void * buf) {
+ V3_Print("%s:\n", tag);
+
+ if (len > 100) {
+ len = 100;
+ }
+
+ v3_dump_mem(buf, len);
+
+ return 0;
+}
+
+static int debug_load(void * store_data, void * ctx,
+ char * tag, uint64_t len, void * buf) {
+ V3_Print("Loading not supported !!!\n");
+ return 0;
+}
+
+
+static struct chkpt_interface debug_store = {
+ .name = "DEBUG",
+ .open_chkpt = debug_open_chkpt,
+ .close_chkpt = debug_close_chkpt,
+ .open_ctx = debug_open_ctx,
+ .close_ctx = debug_close_ctx,
+ .save = debug_save,
+ .load = debug_load
+};
+
+register_chkpt_store(debug_store);
#ifdef V3_CONFIG_KEYED_STREAMS
-#include <palacios/vmm_keyed_stream.h>
+#include <interfaces/vmm_keyed_stream.h>
-static void * keyed_stream_open_chkpt(char * url) {
- return v3_keyed_stream_open(url, V3_KS_WR_ONLY_CREATE);
+static void * keyed_stream_open_chkpt(char * url, chkpt_mode_t mode) {
+ if (mode == SAVE) {
+ return v3_keyed_stream_open(url, V3_KS_WR_ONLY_CREATE);
+ } else if (mode == LOAD) {
+ return v3_keyed_stream_open(url, V3_KS_RD_ONLY);
+ }
+
+ // Shouldn't get here
+ return NULL;
}
return 0;
}
-static uint64_t keyed_stream_save(void * store_data, void * ctx,
+static int keyed_stream_save(void * store_data, void * ctx,
char * tag, uint64_t len, void * buf) {
return v3_keyed_stream_write_key(store_data, ctx, buf, len);
}
-static uint64_t keyed_stream_load(void * store_data, void * ctx,
+static int keyed_stream_load(void * store_data, void * ctx,
char * tag, uint64_t len, void * buf) {
return v3_keyed_stream_read_key(store_data, ctx, buf, len);
}
.load = keyed_stream_load
};
-register_chkpt_store(&keyed_stream_store);
+register_chkpt_store(keyed_stream_store);
+
#endif