1
0
Fork 0
mirror of https://github.com/hermitcore/libhermit.git synced 2025-03-09 00:00:03 +01:00

Fixed phys to virt function. Working now.

This commit is contained in:
Annika Wierichs 2017-11-24 12:47:24 +01:00
parent ad49a935b2
commit bb40b96435
6 changed files with 101 additions and 108 deletions

View file

@ -117,38 +117,56 @@ size_t virt_to_phys(size_t addr)
size_t phys_to_virt(size_t phy)
{
LOG_INFO("phys_to_virt called.\n");
size_t pfn = phy & PFN_MASK;
size_t off = phy & ~PAGE_MASK;
LOG_INFO("off: Hex: %zx, Dec: %zd\n", off, off);
LOG_INFO("pfn: Hex: %zx, Dec: %zd\n", pfn, pfn);
size_t * pml4 = self[PAGE_LEVELS-1];
for(size_t i=0; i<(1 << PAGE_MAP_BITS); i++) {
/* LOG_INFO("First for.\n"); */
if (!(pml4[i] & PG_PRESENT)) {
continue;
}
size_t * pdpt = (size_t *) (pml4[i] & PAGE_MASK);
for(size_t j=0; j<(1 << PAGE_MAP_BITS); j++) {
/* LOG_INFO("Second for.\n"); */
if (!(pdpt[j] & PG_PRESENT)) {
continue;
}
size_t * pgd = (size_t *) (pdpt[j] & PAGE_MASK);
for(size_t k=0; k<(1 << PAGE_MAP_BITS); k++) {
/* LOG_INFO("Third for.\n"); */
if (!(pgd[k] & PG_PRESENT)) {
continue;
}
size_t * pgt = (size_t *) (pgd[k] & PAGE_MASK);
for(size_t l=0; l<(1 << PAGE_MAP_BITS); l++) {
/* LOG_INFO("Fourth for.\n"); */
if (pgt[l] & PG_PRESENT) { // Valid page table entry
/* LOG_INFO("Present.\n"); */
if ((pgt[l] & PFN_MASK) == pfn) { // Page frame found
size_t vpn = ((((((i << PAGE_MAP_BITS) & j) << PAGE_MAP_BITS) & k) << PAGE_MAP_BITS) & l) << PAGE_BITS;
LOG_INFO("SAME PAGE.\n");
LOG_INFO("i: Hex: %zx, Dec: %zd\n", i, i);
LOG_INFO("j: Hex: %zx, Dec: %zd\n", j, j);
LOG_INFO("k: Hex: %zx, Dec: %zd\n", k, k);
LOG_INFO("l: Hex: %zx, Dec: %zd\n", l, l);
size_t vpn = ((((((i << PAGE_MAP_BITS) | j) << PAGE_MAP_BITS) | k) << PAGE_MAP_BITS) | l) << PAGE_BITS;
LOG_INFO("vpn: Hex: %zx, Dec: %zd\n", vpn, vpn);
size_t sext = i & (1UL << (PAGE_MAP_BITS - 1));
LOG_INFO("sext: Hex: %zx, Dec: %zd\n", sext, sext);
if (sext) {
LOG_INFO("sext true");
vpn |= ~0UL << VIRT_BITS;
LOG_INFO("vpn: Hex: %zx, Dec: %zd\n", vpn, vpn);
}
return vpn & off;
LOG_INFO("return: Hex: %zx, Dec: %zd\n", vpn | off, vpn | off);
return vpn | off;
}
}
}
@ -156,6 +174,7 @@ size_t phys_to_virt(size_t phy)
}
}
sys_exit(-EFAULT); // TODO: remove this.
return 0;
}

View file

@ -57,6 +57,7 @@ struct ibv_device * host_to_guest_ibv_device(struct ibv_device * device,
struct ibv_context * host_to_guest_ibv_context(struct ibv_context * context, addr_type type);
struct ibv_context_ops * host_to_guest_ibv_context_ops(struct ibv_context_ops * context_ops, addr_type type);
struct ibv_port_attr * host_to_guest_ibv_port_attr(struct ibv_port_attr * port_attr, addr_type type);
struct ibv_comp_channel * host_to_guest_ibv_comp_channel(struct ibv_comp_channel * channel, addr_type type);
struct ibv_abi_compat_v2 * host_to_guest_ibv_abi_compat_v2(struct ibv_abi_compat_v2 * abi_compat, addr_type type);
pthread_mutex_t * host_to_guest_pthread_mutex_t(pthread_mutex_t * mutex, addr_type type);

View file

@ -105,7 +105,10 @@ const char * ibv_get_device_name(struct ibv_device * device) {
host_to_guest_ibv_device(device, GUEST);
ret_guest = host_to_guest((size_t) uhyve_args.ret);
LOG_INFO("LOG TEST\n");
return (char *) ret_guest;
/* return device->name; // TODO: hack for testing */
}

View file

@ -132,6 +132,8 @@ struct ibv_abi_compat_v2 * host_to_guest_ibv_abi_compat_v2(struct ibv_abi_compa
host_to_guest_ibv_comp_channel(&abi_compat->channel, GUEST);
host_to_guest_pthread_mutex_t(&abi_compat->in_use, GUEST);
return vaddr;
}
@ -142,7 +144,7 @@ struct ibv_abi_compat_v2 * host_to_guest_ibv_abi_compat_v2(struct ibv_abi_compa
pthread_mutex_t * guest_to_host_pthread_mutex_t(pthread_mutex_t * mutex) {
/* mutex->__m_owner = guest_to_host__pthread_descr(mutex->__m_owner); */
return (struct pthread_mutex_t *) guest_to_host((size_t) mutex);
return (pthread_mutex_t *) guest_to_host((size_t) mutex);
}
pthread_mutex_t * host_to_guest_pthread_mutex_t(pthread_mutex_t * mutex, addr_type type) {
@ -159,40 +161,39 @@ pthread_mutex_t * host_to_guest_pthread_mutex_t(pthread_mutex_t * mutex, addr_ty
*/
struct ibv_context_ops * guest_to_host_ibv_context_ops(struct ibv_context_ops * context_ops) {
// TODO: Does this work? Fcn returns size_t. Have to convert?
context_ops->query_device = guest_to_host((size_t) context_ops->query_device);
context_ops->query_port = guest_to_host((size_t) context_ops->query_port);
context_ops->alloc_pd = guest_to_host((size_t) context_ops->alloc_pd);
context_ops->dealloc_pd = guest_to_host((size_t) context_ops->dealloc_pd);
context_ops->reg_mr = guest_to_host((size_t) context_ops->reg_mr);
context_ops->rereg_mr = guest_to_host((size_t) context_ops->rereg_mr);
context_ops->dereg_mr = guest_to_host((size_t) context_ops->dereg_mr);
context_ops->alloc_mw = guest_to_host((size_t) context_ops->alloc_mw);
context_ops->bind_mw = guest_to_host((size_t) context_ops->bind_mw);
context_ops->dealloc_mw = guest_to_host((size_t) context_ops->dealloc_mw);
context_ops->create_cq = guest_to_host((size_t) context_ops->create_cq);
context_ops->poll_cq = guest_to_host((size_t) context_ops->poll_cq);
context_ops->req_notify_cq = guest_to_host((size_t) context_ops->req_notify_cq);
context_ops->cq_event = guest_to_host((size_t) context_ops->cq_event);
context_ops->resize_cq = guest_to_host((size_t) context_ops->resize_cq);
context_ops->destroy_cq = guest_to_host((size_t) context_ops->destroy_cq);
context_ops->create_srq = guest_to_host((size_t) context_ops->create_srq);
context_ops->modify_srq = guest_to_host((size_t) context_ops->modify_srq);
context_ops->query_srq = guest_to_host((size_t) context_ops->query_srq);
context_ops->destroy_srq = guest_to_host((size_t) context_ops->destroy_srq);
context_ops->post_srq_recv = guest_to_host((size_t) context_ops->post_srq_recv);
context_ops->create_qp = guest_to_host((size_t) context_ops->create_qp);
context_ops->query_qp = guest_to_host((size_t) context_ops->query_qp);
context_ops->modify_qp = guest_to_host((size_t) context_ops->modify_qp);
context_ops->destroy_qp = guest_to_host((size_t) context_ops->destroy_qp);
context_ops->post_send = guest_to_host((size_t) context_ops->post_send);
context_ops->post_recv = guest_to_host((size_t) context_ops->post_recv);
context_ops->create_ah = guest_to_host((size_t) context_ops->create_ah);
context_ops->destroy_ah = guest_to_host((size_t) context_ops->destroy_ah);
context_ops->attach_mcast = guest_to_host((size_t) context_ops->attach_mcast);
context_ops->detach_mcast = guest_to_host((size_t) context_ops->detach_mcast);
context_ops->async_event = guest_to_host((size_t) context_ops->async_event);
// TODO: Does this work?
context_ops->query_device = (int (*)(struct ibv_context *, struct ibv_device_attr *)) guest_to_host((size_t) context_ops->query_device);
context_ops->query_port = (int (*)(struct ibv_context *, uint8_t, struct ibv_port_attr *)) guest_to_host((size_t) context_ops->query_port);
context_ops->alloc_pd = (struct ibv_pd * (*)(struct ibv_context *)) guest_to_host((size_t) context_ops->alloc_pd);
context_ops->dealloc_pd = (int (*)(struct ibv_pd *)) guest_to_host((size_t) context_ops->dealloc_pd);
context_ops->reg_mr = (struct ibv_mr * (*)(struct ibv_pd *, void *, size_t, int)) guest_to_host((size_t) context_ops->reg_mr);
context_ops->rereg_mr = (int (*)(struct ibv_mr *, int, struct ibv_pd *, void *, size_t, int)) guest_to_host((size_t) context_ops->rereg_mr);
context_ops->dereg_mr = (int (*)(struct ibv_mr *)) guest_to_host((size_t) context_ops->dereg_mr);
context_ops->alloc_mw = (struct ibv_mw * (*)(struct ibv_pd *, enum ibv_mw_type)) guest_to_host((size_t) context_ops->alloc_mw);
context_ops->bind_mw = (int (*)(struct ibv_qp *, struct ibv_mw *, struct ibv_mw_bind *)) guest_to_host((size_t) context_ops->bind_mw);
context_ops->dealloc_mw = (int (*)(struct ibv_mw *)) guest_to_host((size_t) context_ops->dealloc_mw);
context_ops->create_cq = (struct ibv_cq * (*)(struct ibv_context *, int, struct ibv_comp_channel *, int)) guest_to_host((size_t) context_ops->create_cq);
context_ops->poll_cq = (int (*)(struct ibv_cq *, int, struct ibv_wc *)) guest_to_host((size_t) context_ops->poll_cq);
context_ops->req_notify_cq = (int (*)(struct ibv_cq *, int)) guest_to_host((size_t) context_ops->req_notify_cq);
context_ops->cq_event = (void (*)(struct ibv_cq *)) guest_to_host((size_t) context_ops->cq_event);
context_ops->resize_cq = (int (*)(struct ibv_cq *, int)) guest_to_host((size_t) context_ops->resize_cq);
context_ops->destroy_cq = (int (*)(struct ibv_cq *)) guest_to_host((size_t) context_ops->destroy_cq);
context_ops->create_srq = (struct ibv_srq * (*)(struct ibv_pd *, struct ibv_srq_init_attr *)) guest_to_host((size_t) context_ops->create_srq);
context_ops->modify_srq = (int (*)(struct ibv_srq *, struct ibv_srq_attr *, int)) guest_to_host((size_t) context_ops->modify_srq);
context_ops->query_srq = (int (*)(struct ibv_srq *, struct ibv_srq_attr *)) guest_to_host((size_t) context_ops->query_srq);
context_ops->destroy_srq = (int (*)(struct ibv_srq *)) guest_to_host((size_t) context_ops->destroy_srq);
context_ops->post_srq_recv = (int (*)(struct ibv_srq *, struct ibv_recv_wr *, struct ibv_recv_wr **)) guest_to_host((size_t) context_ops->post_srq_recv);
context_ops->create_qp = (struct ibv_qp * (*)(struct ibv_pd *, struct ibv_qp_init_attr *)) guest_to_host((size_t) context_ops->create_qp);
context_ops->query_qp = (int (*)(struct ibv_qp *, struct ibv_qp_attr *, int, struct ibv_qp_init_attr *)) guest_to_host((size_t) context_ops->query_qp);
context_ops->modify_qp = (int (*)(struct ibv_qp *, struct ibv_qp_attr *, int)) guest_to_host((size_t) context_ops->modify_qp);
context_ops->destroy_qp = (int (*)(struct ibv_qp *)) guest_to_host((size_t) context_ops->destroy_qp);
context_ops->post_send = (int (*)(struct ibv_qp *, struct ibv_send_wr *, struct ibv_send_wr **)) guest_to_host((size_t) context_ops->post_send);
context_ops->post_recv = (int (*)(struct ibv_qp *, struct ibv_recv_wr *, struct ibv_recv_wr **)) guest_to_host((size_t) context_ops->post_recv);
context_ops->create_ah = (struct ibv_ah * (*)(struct ibv_pd *, struct ibv_ah_attr *)) guest_to_host((size_t) context_ops->create_ah);
context_ops->destroy_ah = (int (*)(struct ibv_ah *)) guest_to_host((size_t) context_ops->destroy_ah);
context_ops->attach_mcast = (int (*)(struct ibv_qp *, const union ibv_gid *, uint16_t)) guest_to_host((size_t) context_ops->attach_mcast);
context_ops->detach_mcast = (int (*)(struct ibv_qp *, const union ibv_gid *, uint16_t)) guest_to_host((size_t) context_ops->detach_mcast);
context_ops->async_event = (void (*)(struct ibv_async_event *)) guest_to_host((size_t) context_ops->async_event);
return (struct ibv_context_ops *) guest_to_host((size_t) context_ops);
}
@ -202,73 +203,38 @@ struct ibv_context_ops * host_to_guest_ibv_context_ops(
struct ibv_context_ops * vaddr = (type == GUEST) ? context_ops
: (struct ibv_context_ops *) host_to_guest((size_t) context_ops);
context_ops->query_device = (int (*)(struct ibv_context *, struct ibv_device_attr *)) host_to_guest((size_t) vaddr->);
context_ops->query_port = (int (*)(struct ibv_context *, uint8_t, struct ibv_port_attr *)) host_to_guest((size_t) vaddr->);
context_ops->alloc_pd = (struct ibv_pd * (*)(struct ibv_context *)) host_to_guest((size_t) vaddr->);
context_ops->dealloc_pd = (int (*)(struct ibv_pd *)) host_to_guest((size_t) vaddr->);
context_ops->reg_mr = (struct ibv_mr * (*)(struct ibv_pd *, void *, size_t, int)) host_to_guest((size_t) vaddr->);
context_ops->rereg_mr = (int (*)(struct ibv_mr *, int, struct ibv_pd *, void *, size_t, int)) host_to_guest((size_t) vaddr->);
context_ops->dereg_mr = (int (*)(struct ibv_mr *)) host_to_guest((size_t) vaddr->);
context_ops->alloc_mw = (struct ibv_mw * (*)(struct ibv_pd *, enum ibv_mw_type)) host_to_guest((size_t) vaddr->);
context_ops->bind_mw = (int (*)(struct ibv_qp *, struct ibv_mw *, struct ibv_mw_bind *)) host_to_guest((size_t) vaddr->);
context_ops->dealloc_mw = (int (*)(struct ibv_mw *)) host_to_guest((size_t) vaddr->);
context_ops->create_cq = (struct ibv_cq * (*)(struct ibv_context *, int, struct ibv_comp_channel *, int)) host_to_guest((size_t) vaddr->);
context_ops->poll_cq = (int (*)(struct ibv_cq *, int, struct ibv_wc *)) host_to_guest((size_t) vaddr->);
context_ops->req_notify_cq = (int (*)(struct ibv_cq *, int)) host_to_guest((size_t) vaddr->);
context_ops->cq_event = (void (*)(struct ibv_cq *)) host_to_guest((size_t) vaddr->);
context_ops->resize_cq = (int (*)(struct ibv_cq *, int)) host_to_guest((size_t) vaddr->);
context_ops->destroy_cq = (int (*)(struct ibv_cq *)) host_to_guest((size_t) vaddr->);
context_ops->create_srq = (struct ibv_srq * (*)(struct ibv_pd *, struct ibv_srq_init_attr *)) host_to_guest((size_t) vaddr->);
context_ops->modify_srq = (int (*)(struct ibv_srq *, struct ibv_srq_attr *, int)) host_to_guest((size_t) vaddr->);
context_ops->query_srq = (int (*)(struct ibv_srq *, struct ibv_srq_attr *)) host_to_guest((size_t) vaddr->);
context_ops->destroy_srq = (int (*)(struct ibv_srq *)) host_to_guest((size_t) vaddr->);
context_ops->post_srq_recv = (int (*)(struct ibv_srq *, struct ibv_recv_wr *, struct ibv_recv_wr **)) host_to_guest((size_t) vaddr->);
context_ops->create_qp = (struct ibv_qp * (*)(struct ibv_pd *, struct ibv_qp_init_attr *)) host_to_guest((size_t) vaddr->);
context_ops->query_qp = (int (*)(struct ibv_qp *, struct ibv_qp_attr *, int, struct ibv_qp_init_attr *)) host_to_guest((size_t) vaddr->);
context_ops->modify_qp = (int (*)(struct ibv_qp *, struct ibv_qp_attr *, int)) host_to_guest((size_t) vaddr->);
context_ops->destroy_qp = (int (*)(struct ibv_qp *)) host_to_guest((size_t) vaddr->);
context_ops->post_send = (int (*)(struct ibv_qp *, struct ibv_send_wr *, struct ibv_send_wr **)) host_to_guest((size_t) vaddr->);
context_ops->post_recv = (int (*)(struct ibv_qp *, struct ibv_recv_wr *, struct ibv_recv_wr **)) host_to_guest((size_t) vaddr->);
context_ops->create_ah = (struct ibv_ah * (*)(struct ibv_pd *, struct ibv_ah_attr *)) host_to_guest((size_t) vaddr->);
context_ops->destroy_ah = (int (*)(struct ibv_ah *)) host_to_guest((size_t) vaddr->);
context_ops->attach_mcast = (int (*)(struct ibv_qp *, const union ibv_gid *, uint16_t)) host_to_guest((size_t) vaddr->);
context_ops->detach_mcast = (int (*)(struct ibv_qp *, const union ibv_gid *, uint16_t)) host_to_guest((size_t) vaddr->);
context_ops->async_event = (void (*)(struct ibv_async_event *)) host_to_guest((size_t) vaddr->);
// todo
context_ops->query_device = host_to_guest((size_t) vaddr->query_device);
context_ops->query_port = host_to_guest((size_t) vaddr->query_port);
context_ops->alloc_pd = host_to_guest((size_t) vaddr->alloc_pd);
context_ops->dealloc_pd = host_to_guest((size_t) vaddr->dealloc_pd);
context_ops->reg_mr = host_to_guest((size_t) vaddr->reg_mr);
context_ops->rereg_mr = host_to_guest((size_t) vaddr->rereg_mr);
context_ops->dereg_mr = host_to_guest((size_t) vaddr->dereg_mr);
context_ops->alloc_mw = host_to_guest((size_t) vaddr->alloc_mw);
context_ops->bind_mw = host_to_guest((size_t) vaddr->bind_mw);
context_ops->dealloc_mw = host_to_guest((size_t) vaddr->dealloc_mw);
context_ops->create_cq = host_to_guest((size_t) vaddr->create_cq);
context_ops->poll_cq = host_to_guest((size_t) vaddr->poll_cq);
context_ops->req_notify_cq = host_to_guest((size_t) vaddr->req_notify_cq);
context_ops->cq_event = host_to_guest((size_t) vaddr->cq_event);
context_ops->resize_cq = host_to_guest((size_t) vaddr->resize_cq);
context_ops->destroy_cq = host_to_guest((size_t) vaddr->destroy_cq);
context_ops->create_srq = host_to_guest((size_t) vaddr->create_srq);
context_ops->modify_srq = host_to_guest((size_t) vaddr->modify_srq);
context_ops->query_srq = host_to_guest((size_t) vaddr->query_srq);
context_ops->destroy_srq = host_to_guest((size_t) vaddr->destroy_srq);
context_ops->post_srq_recv = host_to_guest((size_t) vaddr->post_srq_recv);
context_ops->create_qp = host_to_guest((size_t) vaddr->create_qp);
context_ops->query_qp = host_to_guest((size_t) vaddr->query_qp);
context_ops->modify_qp = host_to_guest((size_t) vaddr->modify_qp);
context_ops->destroy_qp = host_to_guest((size_t) vaddr->destroy_qp);
context_ops->post_send = host_to_guest((size_t) vaddr->post_send);
context_ops->post_recv = host_to_guest((size_t) vaddr->post_recv);
context_ops->create_ah = host_to_guest((size_t) vaddr->create_ah);
context_ops->destroy_ah = host_to_guest((size_t) vaddr->destroy_ah);
context_ops->attach_mcast = host_to_guest((size_t) vaddr->attach_mcast);
context_ops->detach_mcast = host_to_guest((size_t) vaddr->detach_mcast);
context_ops->async_event = host_to_guest((size_t) vaddr->async_event);
vaddr->query_device = (int (*)(struct ibv_context *, struct ibv_device_attr *)) host_to_guest((size_t) vaddr->query_device);
vaddr->query_port = (int (*)(struct ibv_context *, uint8_t, struct ibv_port_attr *)) host_to_guest((size_t) vaddr->query_port);
vaddr->alloc_pd = (struct ibv_pd * (*)(struct ibv_context *)) host_to_guest((size_t) vaddr->alloc_pd);
vaddr->dealloc_pd = (int (*)(struct ibv_pd *)) host_to_guest((size_t) vaddr->dealloc_pd);
vaddr->reg_mr = (struct ibv_mr * (*)(struct ibv_pd *, void *, size_t, int)) host_to_guest((size_t) vaddr->reg_mr);
vaddr->rereg_mr = (int (*)(struct ibv_mr *, int, struct ibv_pd *, void *, size_t, int)) host_to_guest((size_t) vaddr->rereg_mr);
vaddr->dereg_mr = (int (*)(struct ibv_mr *)) host_to_guest((size_t) vaddr->dereg_mr);
vaddr->alloc_mw = (struct ibv_mw * (*)(struct ibv_pd *, enum ibv_mw_type)) host_to_guest((size_t) vaddr->alloc_mw);
vaddr->bind_mw = (int (*)(struct ibv_qp *, struct ibv_mw *, struct ibv_mw_bind *)) host_to_guest((size_t) vaddr->bind_mw);
vaddr->dealloc_mw = (int (*)(struct ibv_mw *)) host_to_guest((size_t) vaddr->dealloc_mw);
vaddr->create_cq = (struct ibv_cq * (*)(struct ibv_context *, int, struct ibv_comp_channel *, int)) host_to_guest((size_t) vaddr->create_cq);
vaddr->poll_cq = (int (*)(struct ibv_cq *, int, struct ibv_wc *)) host_to_guest((size_t) vaddr->poll_cq);
vaddr->req_notify_cq = (int (*)(struct ibv_cq *, int)) host_to_guest((size_t) vaddr->req_notify_cq);
vaddr->cq_event = (void (*)(struct ibv_cq *)) host_to_guest((size_t) vaddr->cq_event);
vaddr->resize_cq = (int (*)(struct ibv_cq *, int)) host_to_guest((size_t) vaddr->resize_cq);
vaddr->destroy_cq = (int (*)(struct ibv_cq *)) host_to_guest((size_t) vaddr->destroy_cq);
vaddr->create_srq = (struct ibv_srq * (*)(struct ibv_pd *, struct ibv_srq_init_attr *)) host_to_guest((size_t) vaddr->create_srq);
vaddr->modify_srq = (int (*)(struct ibv_srq *, struct ibv_srq_attr *, int)) host_to_guest((size_t) vaddr->modify_srq);
vaddr->query_srq = (int (*)(struct ibv_srq *, struct ibv_srq_attr *)) host_to_guest((size_t) vaddr->query_srq);
vaddr->destroy_srq = (int (*)(struct ibv_srq *)) host_to_guest((size_t) vaddr->destroy_srq);
vaddr->post_srq_recv = (int (*)(struct ibv_srq *, struct ibv_recv_wr *, struct ibv_recv_wr **)) host_to_guest((size_t) vaddr->post_srq_recv);
vaddr->create_qp = (struct ibv_qp * (*)(struct ibv_pd *, struct ibv_qp_init_attr *)) host_to_guest((size_t) vaddr->create_qp);
vaddr->query_qp = (int (*)(struct ibv_qp *, struct ibv_qp_attr *, int, struct ibv_qp_init_attr *)) host_to_guest((size_t) vaddr->query_qp);
vaddr->modify_qp = (int (*)(struct ibv_qp *, struct ibv_qp_attr *, int)) host_to_guest((size_t) vaddr->modify_qp);
vaddr->destroy_qp = (int (*)(struct ibv_qp *)) host_to_guest((size_t) vaddr->destroy_qp);
vaddr->post_send = (int (*)(struct ibv_qp *, struct ibv_send_wr *, struct ibv_send_wr **)) host_to_guest((size_t) vaddr->post_send);
vaddr->post_recv = (int (*)(struct ibv_qp *, struct ibv_recv_wr *, struct ibv_recv_wr **)) host_to_guest((size_t) vaddr->post_recv);
vaddr->create_ah = (struct ibv_ah * (*)(struct ibv_pd *, struct ibv_ah_attr *)) host_to_guest((size_t) vaddr->create_ah);
vaddr->destroy_ah = (int (*)(struct ibv_ah *)) host_to_guest((size_t) vaddr->destroy_ah);
vaddr->attach_mcast = (int (*)(struct ibv_qp *, const union ibv_gid *, uint16_t)) host_to_guest((size_t) vaddr->attach_mcast);
vaddr->detach_mcast = (int (*)(struct ibv_qp *, const union ibv_gid *, uint16_t)) host_to_guest((size_t) vaddr->detach_mcast);
vaddr->async_event = (void (*)(struct ibv_async_event *)) host_to_guest((size_t) vaddr->async_event);
return vaddr;
}

View file

@ -61,7 +61,7 @@ void call_ibv_get_device_list(struct kvm_run * run, uint8_t * guest_mem) {
*/
void call_ibv_get_device_name(struct kvm_run * run, uint8_t * guest_mem) {
printf("LOG: UHYVE - call_ibv_get_device_name");
printf("LOG: UHYVE - call_ibv_get_device_name\n");
unsigned data = *((unsigned*)((size_t)run+run->io.data_offset));
uhyve_ibv_get_device_name_t * args = (uhyve_ibv_get_device_name_t *) (guest_mem + data);

View file

@ -54,14 +54,18 @@ int main(int argc, char** argv)
printf("ib-test.c: before get dev list.\n");
dev_list = ibv_get_device_list(&num_devices);
printf("after get device list -- ib-test.c: num devices: %d\n", num_devices);
printf("after get device list -- ib-test.c: ptr 1: %p\n", dev_list[0]);
printf("after get device list -- ib-test.c: ptr 2: %p\n", dev_list[1]);
printf("after get device list -- ib-test.c: name 1: %s\n", dev_list[0]->name);
printf("after get device list -- ib-test.c: name 2: %s\n", dev_list[1]->name);
printf("before get device name.\n");
const char* dev_name = ibv_get_device_name(dev_list[0]);
printf("after get device name -- Device: %s", dev_name);
printf("after get device name -- Device: %s\n", dev_name);
printf("before open_device\n");
ibv_context * context = ibv_open_device(dev_list[0]);
printf("after open device name -- Device: %s", dev_name);
struct ibv_context * context = ibv_open_device(dev_list[0]);
printf("after open device name -- Device: %s\n", dev_name);