Krishna iResearch Intelligent Cloud Platform - VIRtual Generic Os - VIRGO - Linux kernel extensions for cloud
 All Classes
virgo_kernelupcall_plugin.c
1 /***************************************************************************************
2 VIRGO - a linux module extension with CPU and Memory pooling with cloud capabilities
3 
4 Copyright (C) 2009-2013 Ka.Shrinivaasan
5 
6 This program is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10 
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15 
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
18 
19 mail to: ka.shrinivaasan@gmail.com
20 *****************************************************************************************/
21 
22 #include <sys/types.h>
23 #include <sys/stat.h>
24 #include <stdio.h>
25 #include <stdlib.h>
26 #include <dlfcn.h>
27 #include <pthread.h>
28 #include <fcntl.h>
29 #include <unistd.h>
30 
31 int main(int argc, char **argv)
32 {
33  void *handle;
34  void* (*cloud_function)(void*);
35  char *error;
36  pthread_t tid;
37  void* x;
38 
39  int s=0;
40 
41  handle = dlopen("/home/kashrinivaasan/linux-3.7.8/drivers/virgo/cpupooling/virgocloudexec/libvirgo.so", RTLD_LAZY);
42  if (!handle) {
43  fprintf(stderr, "%s\n", dlerror());
44  exit(EXIT_FAILURE);
45  }
46 
47  dlerror(); /* Clear any existing error */
48 
49  printf("dlsym lookup for cloud function: %s\n", argv[1]);
50  *(void **) (&cloud_function) = dlsym(handle, argv[1]);
51  /* *(void **) (&cloud_function) = dlsym(handle, "_Z16virgo_cloud_testPv");*/
52 
53  if ((error = dlerror()) != NULL) {
54  fprintf(stderr, "%s\n", error);
55  exit(EXIT_FAILURE);
56  }
57  printf("virgo_kernel_upcall_plugin: spawning userspace thread for virgo cloud clone function pointer: %x\n",cloud_function);
58  s=pthread_create(&tid, NULL, cloud_function, NULL);
59  pthread_join(tid, &x);
60  fflush(stdout);
61  dlclose(handle);
62 
63  exit(EXIT_SUCCESS);
64 }