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:
parent
ad49a935b2
commit
bb40b96435
6 changed files with 101 additions and 108 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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 */
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue