mirror of
https://github.com/hermitcore/libhermit.git
synced 2025-03-09 00:00:03 +01:00
ibv_get_device_list() working. Need to check phys memory conversions.
This commit is contained in:
parent
26691d555d
commit
aae4dcb937
4 changed files with 45 additions and 58 deletions
41
kernel/ibv.c
41
kernel/ibv.c
|
@ -40,28 +40,49 @@ typedef struct {
|
|||
// In:
|
||||
int *num_devices;
|
||||
// Out:
|
||||
/*struct ibv_device devices[MAX_NUM_OF_IBV_DEVICES];*/
|
||||
struct ibv_device **device_list;
|
||||
struct ibv_device *dev_phys_ptr_list[MAX_NUM_OF_IBV_DEVICES];
|
||||
/*struct ibv_device **device_list;*/
|
||||
} __attribute__((packed)) uhyve_ibv_get_device_list_t;
|
||||
|
||||
struct ibv_device** h_ibv_get_device_list(int *num_devices)
|
||||
{
|
||||
uhyve_ibv_get_device_list_t uhyve_args = {(int*) virt_to_phys((size_t) num_devices)};
|
||||
|
||||
struct ibv_device **list;
|
||||
struct ibv_device *devs;
|
||||
list = calloc(MAX_NUM_OF_IBV_DEVICES, sizeof(struct ibv_device *)); // NUM + 1 ???
|
||||
devs = calloc(MAX_NUM_OF_IBV_DEVICES, sizeof(struct ibv_device));
|
||||
struct ibv_device *devs = kmalloc(MAX_NUM_OF_IBV_DEVICES * sizeof(struct ibv_device));
|
||||
struct ibv_device **list_virt;
|
||||
list_virt = kmalloc(MAX_NUM_OF_IBV_DEVICES * sizeof(struct ibv_device *)); // NUM + 1 ???
|
||||
|
||||
for (int i = 0; i < MAX_NUM_OF_IBV_DEVICES; i++) {
|
||||
list[i] = devs + i * sizeof(struct ibv_device)
|
||||
/*list[i] = calloc(1, sizeof(struct ibv_device));*/
|
||||
struct ibv_device* device_address = devs + i;
|
||||
list_virt[i] = device_address;
|
||||
uhyve_args.dev_phys_ptr_list[i] = (struct ibv_device*) virt_to_phys((size_t) device_address);
|
||||
}
|
||||
uhyve_args.first_device = (struct ibv_device*) virt_to_phys((size_t) dev_arr);
|
||||
|
||||
uhyve_send(UHYVE_PORT_IBV_GET_DEVICE_LIST, (unsigned)virt_to_phys((size_t)&uhyve_args));
|
||||
return &dev_arr;
|
||||
return list_virt;
|
||||
}
|
||||
|
||||
/*struct ibv_device** h_ibv_get_device_list(int *num_devices)*/
|
||||
/*{*/
|
||||
/*struct ibv_device *devs = calloc(MAX_NUM_OF_IBV_DEVICES, sizeof(struct ibv_device));*/
|
||||
|
||||
/*struct ibv_device **list_phys; */
|
||||
/*struct ibv_device **list_virt;*/
|
||||
/*list_phys = calloc(MAX_NUM_OF_IBV_DEVICES, sizeof(struct ibv_device *)); // NUM + 1 ???*/
|
||||
/*list_virt = calloc(MAX_NUM_OF_IBV_DEVICES, sizeof(struct ibv_device *)); // NUM + 1 ???*/
|
||||
/*for (int i = 0; i < MAX_NUM_OF_IBV_DEVICES; i++) {*/
|
||||
/*struct ibv_device* device_address = devs + i;*/
|
||||
/*list_virt[i] = device_address;*/
|
||||
/*list_phys[i] = (struct ibv_device*) virt_to_phys((size_t) device_address);*/
|
||||
/*[>list_phys[i] = calloc(1, sizeof(struct ibv_device));<]*/
|
||||
/*}*/
|
||||
/*uhyve_ibv_get_device_list_t uhyve_args =*/
|
||||
/*{(int*) virt_to_phys((size_t) num_devices), (struct ibv_device**) virt_to_phys((size_t) list_phys)};*/
|
||||
|
||||
/*uhyve_send(UHYVE_PORT_IBV_GET_DEVICE_LIST, (unsigned)virt_to_phys((size_t)&uhyve_args));*/
|
||||
/*return list_virt;*/
|
||||
/*}*/
|
||||
|
||||
/*void h_ibv_get_device_list(int *num_devices)*/
|
||||
/*{*/
|
||||
/*uhyve_ibv_get_device_list_t uhyve_args = {(int*) virt_to_phys((size_t) num_devices)};*/
|
||||
|
|
|
@ -33,7 +33,8 @@ typedef struct {
|
|||
int *num_devices;
|
||||
// Out:
|
||||
//struct ibv_device devices[MAX_NUM_OF_IBV_DEVICES];
|
||||
struct ibv_device **device_list;
|
||||
struct ibv_device *dev_phys_ptr_list[MAX_NUM_OF_IBV_DEVICES];
|
||||
//struct ibv_device **device_list;
|
||||
} __attribute__((packed)) uhyve_ibv_get_device_list_t;
|
||||
|
||||
typedef struct {
|
||||
|
|
|
@ -974,25 +974,19 @@ static int vcpu_loop(void)
|
|||
|
||||
int num_devices;
|
||||
struct ibv_device **temp_dev_list = ibv_get_device_list(&num_devices);
|
||||
/*struct ibv_device **temp_dev_list = ibv_get_device_list(guest_mem+(size_t)args->num_devices);*/
|
||||
printf("uhyve.c: before memcpy num_devices.\n");
|
||||
memcpy(guest_mem+(size_t)args->num_devices, &num_devices, sizeof(num_devices));
|
||||
/*memcpy(args->num_devices, &num_devices, sizeof(num_devices));*/
|
||||
|
||||
printf("uhyve.c: before for loop.\n");
|
||||
for (int d = 0; d < 1; d++) { // TODO switch to num devices
|
||||
printf("uhyve.c: for loop: before dev ptr definition.\n");
|
||||
for (int d = 0; d < num_devices; d++) { // TODO switch to num devices
|
||||
/*struct ibv_device* dest_device_guest = guest_mem + (size_t)args->first_device + d*sizeof(struct ibv_device);*/
|
||||
struct ibv_device* dest_device_guest = guest_mem + (size_t)args->first_device;
|
||||
printf("uhyve.c: device name: %s\n", temp_dev_list[d]->name);
|
||||
printf("uhyve.c: for loop: before memcpy device struct.\n args->devices val: %s\n", args->devices);
|
||||
memcpy(dest_device_guest, temp_dev_list[d], sizeof(struct ibv_device));
|
||||
/*struct ibv_device* dest_device_guest = guest_mem + (size_t)args->first_device;*/
|
||||
/*memcpy(dest_device_guest, temp_dev_list[d], sizeof(struct ibv_device));*/
|
||||
printf("uhyve.c: before memcpy list[d].\n");
|
||||
memcpy(guest_mem + (size_t)args->dev_phys_ptr_list[d], temp_dev_list[d], sizeof(struct ibv_device));
|
||||
}
|
||||
|
||||
/*memcpy(uhyve_netinfo->mac_str, uhyve_get_mac(), 18);*/
|
||||
/*memcpy(args->ret, ibv_get_device_list((int*)(guest_mem+(size_t)args->num_devices)), 18);*/
|
||||
/*args->ret = ibv_get_device_list((int*)(guest_mem+(size_t)args->num_devices));*/
|
||||
|
||||
printf("uhyve.c: before break.\n");
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -51,14 +51,15 @@ int main(int argc, char** argv)
|
|||
struct ibv_device **dev_list;
|
||||
int num_devices;
|
||||
|
||||
printf("before get dev list.\n");
|
||||
printf("ib_test.c: before get dev list.\n");
|
||||
dev_list = h_ibv_get_device_list(&num_devices);
|
||||
printf("ib_test.c: after get dev list.\n");
|
||||
|
||||
/*dev_list = h_ibv_get_device_list(&num_devices);*/
|
||||
h_ibv_get_device_list(&num_devices);
|
||||
printf("after get dev list.\n");
|
||||
printf("ib_test.c: num devices: %d\n", num_devices);
|
||||
|
||||
printf("num devices: %d\n", num_devices);
|
||||
/*printf("first device name: %s\n", (*dev_list)->name);*/
|
||||
for (int i=0; i < num_devices; i++) {
|
||||
printf("ib_test.c: Device name No. %d: %s\n", i, dev_list[i]->name);
|
||||
}
|
||||
|
||||
/*if (!dev_list) {*/
|
||||
/*perror("Failed to get IB devices list");*/
|
||||
|
@ -77,36 +78,6 @@ int main(int argc, char** argv)
|
|||
/*printf("Device: %s", dev_name);*/
|
||||
/*printf("\nafter get dev name.\n");*/
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// register test handler
|
||||
signal(SIGUSR1, test_handler);
|
||||
|
||||
printf("Hello World!!!\n");
|
||||
//for(i=0; environ[i]; i++)
|
||||
// printf("environ[%d] = %s\n", i, environ[i]);
|
||||
for(i=0; i<argc; i++)
|
||||
printf("argv[%d] = %s\n", i, argv[i]);
|
||||
|
||||
raise(SIGUSR1);
|
||||
|
||||
file = fopen("/etc/hostname", "r");
|
||||
if (file)
|
||||
{
|
||||
char fname[N] = "";
|
||||
|
||||
fscanf(file, "%s", fname);
|
||||
printf("Hostname: %s\n", fname);
|
||||
fclose(file);
|
||||
} else fprintf(stderr, "Unable to open file /etc/hostname\n");
|
||||
|
||||
file = fopen("/tmp/test.txt", "w");
|
||||
if (file)
|
||||
{
|
||||
fprintf(file, "Hello World!!!\n");
|
||||
fclose(file);
|
||||
} else fprintf(stderr, "Unable to open file /tmp/test.txt\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue