vu_dev 62 arch/um/drivers/virtio_uml.c #define vu_err(vu_dev, ...) dev_err(&(vu_dev)->pdev->dev, __VA_ARGS__) vu_dev 124 arch/um/drivers/virtio_uml.c static int vhost_user_recv_resp(struct virtio_uml_device *vu_dev, vu_dev 128 arch/um/drivers/virtio_uml.c int rc = vhost_user_recv(vu_dev->sock, msg, max_payload_size); vu_dev 139 arch/um/drivers/virtio_uml.c static int vhost_user_recv_u64(struct virtio_uml_device *vu_dev, vu_dev 143 arch/um/drivers/virtio_uml.c int rc = vhost_user_recv_resp(vu_dev, &msg, vu_dev 154 arch/um/drivers/virtio_uml.c static int vhost_user_recv_req(struct virtio_uml_device *vu_dev, vu_dev 158 arch/um/drivers/virtio_uml.c int rc = vhost_user_recv(vu_dev->req_fd, msg, max_payload_size); vu_dev 170 arch/um/drivers/virtio_uml.c static int vhost_user_send(struct virtio_uml_device *vu_dev, vu_dev 186 arch/um/drivers/virtio_uml.c if (!(vu_dev->protocol_features & vu_dev 193 arch/um/drivers/virtio_uml.c rc = full_sendmsg_fds(vu_dev->sock, msg, size, fds, num_fds); vu_dev 200 arch/um/drivers/virtio_uml.c rc = vhost_user_recv_u64(vu_dev, &status); vu_dev 205 arch/um/drivers/virtio_uml.c vu_err(vu_dev, "slave reports error: %llu\n", status); vu_dev 213 arch/um/drivers/virtio_uml.c static int vhost_user_send_no_payload(struct virtio_uml_device *vu_dev, vu_dev 220 arch/um/drivers/virtio_uml.c return vhost_user_send(vu_dev, need_response, &msg, NULL, 0); vu_dev 223 arch/um/drivers/virtio_uml.c static int vhost_user_send_no_payload_fd(struct virtio_uml_device *vu_dev, vu_dev 230 arch/um/drivers/virtio_uml.c return vhost_user_send(vu_dev, false, &msg, &fd, 1); vu_dev 233 arch/um/drivers/virtio_uml.c static int vhost_user_send_u64(struct virtio_uml_device *vu_dev, vu_dev 242 arch/um/drivers/virtio_uml.c return vhost_user_send(vu_dev, false, &msg, NULL, 0); vu_dev 245 arch/um/drivers/virtio_uml.c static int vhost_user_set_owner(struct virtio_uml_device *vu_dev) vu_dev 247 arch/um/drivers/virtio_uml.c return vhost_user_send_no_payload(vu_dev, false, VHOST_USER_SET_OWNER); vu_dev 250 arch/um/drivers/virtio_uml.c static int vhost_user_get_features(struct virtio_uml_device *vu_dev, vu_dev 253 arch/um/drivers/virtio_uml.c int rc = vhost_user_send_no_payload(vu_dev, true, vu_dev 258 arch/um/drivers/virtio_uml.c return vhost_user_recv_u64(vu_dev, features); vu_dev 261 arch/um/drivers/virtio_uml.c static int vhost_user_set_features(struct virtio_uml_device *vu_dev, vu_dev 264 arch/um/drivers/virtio_uml.c return vhost_user_send_u64(vu_dev, VHOST_USER_SET_FEATURES, features); vu_dev 267 arch/um/drivers/virtio_uml.c static int vhost_user_get_protocol_features(struct virtio_uml_device *vu_dev, vu_dev 270 arch/um/drivers/virtio_uml.c int rc = vhost_user_send_no_payload(vu_dev, true, vu_dev 275 arch/um/drivers/virtio_uml.c return vhost_user_recv_u64(vu_dev, protocol_features); vu_dev 278 arch/um/drivers/virtio_uml.c static int vhost_user_set_protocol_features(struct virtio_uml_device *vu_dev, vu_dev 281 arch/um/drivers/virtio_uml.c return vhost_user_send_u64(vu_dev, VHOST_USER_SET_PROTOCOL_FEATURES, vu_dev 285 arch/um/drivers/virtio_uml.c static void vhost_user_reply(struct virtio_uml_device *vu_dev, vu_dev 299 arch/um/drivers/virtio_uml.c rc = full_sendmsg_fds(vu_dev->req_fd, &reply, size, NULL, 0); vu_dev 302 arch/um/drivers/virtio_uml.c vu_err(vu_dev, vu_dev 309 arch/um/drivers/virtio_uml.c struct virtio_uml_device *vu_dev = data; vu_dev 317 arch/um/drivers/virtio_uml.c rc = vhost_user_recv_req(vu_dev, &msg.msg, vu_dev 326 arch/um/drivers/virtio_uml.c virtio_config_changed(&vu_dev->vdev); vu_dev 334 arch/um/drivers/virtio_uml.c vu_err(vu_dev, "unexpected slave request %d\n", vu_dev 339 arch/um/drivers/virtio_uml.c vhost_user_reply(vu_dev, &msg.msg, response); vu_dev 344 arch/um/drivers/virtio_uml.c static int vhost_user_init_slave_req(struct virtio_uml_device *vu_dev) vu_dev 352 arch/um/drivers/virtio_uml.c vu_dev->req_fd = req_fds[0]; vu_dev 354 arch/um/drivers/virtio_uml.c rc = um_request_irq(VIRTIO_IRQ, vu_dev->req_fd, IRQ_READ, vu_dev 356 arch/um/drivers/virtio_uml.c vu_dev->pdev->name, vu_dev); vu_dev 360 arch/um/drivers/virtio_uml.c rc = vhost_user_send_no_payload_fd(vu_dev, VHOST_USER_SET_SLAVE_REQ_FD, vu_dev 368 arch/um/drivers/virtio_uml.c um_free_irq(VIRTIO_IRQ, vu_dev); vu_dev 377 arch/um/drivers/virtio_uml.c static int vhost_user_init(struct virtio_uml_device *vu_dev) vu_dev 379 arch/um/drivers/virtio_uml.c int rc = vhost_user_set_owner(vu_dev); vu_dev 383 arch/um/drivers/virtio_uml.c rc = vhost_user_get_features(vu_dev, &vu_dev->features); vu_dev 387 arch/um/drivers/virtio_uml.c if (vu_dev->features & BIT_ULL(VHOST_USER_F_PROTOCOL_FEATURES)) { vu_dev 388 arch/um/drivers/virtio_uml.c rc = vhost_user_get_protocol_features(vu_dev, vu_dev 389 arch/um/drivers/virtio_uml.c &vu_dev->protocol_features); vu_dev 392 arch/um/drivers/virtio_uml.c vu_dev->protocol_features &= VHOST_USER_SUPPORTED_PROTOCOL_F; vu_dev 393 arch/um/drivers/virtio_uml.c rc = vhost_user_set_protocol_features(vu_dev, vu_dev 394 arch/um/drivers/virtio_uml.c vu_dev->protocol_features); vu_dev 399 arch/um/drivers/virtio_uml.c if (vu_dev->protocol_features & vu_dev 401 arch/um/drivers/virtio_uml.c rc = vhost_user_init_slave_req(vu_dev); vu_dev 409 arch/um/drivers/virtio_uml.c static void vhost_user_get_config(struct virtio_uml_device *vu_dev, vu_dev 418 arch/um/drivers/virtio_uml.c if (!(vu_dev->protocol_features & vu_dev 430 arch/um/drivers/virtio_uml.c rc = vhost_user_send(vu_dev, true, msg, NULL, 0); vu_dev 432 arch/um/drivers/virtio_uml.c vu_err(vu_dev, "sending VHOST_USER_GET_CONFIG failed: %d\n", vu_dev 437 arch/um/drivers/virtio_uml.c rc = vhost_user_recv_resp(vu_dev, msg, msg_size); vu_dev 439 arch/um/drivers/virtio_uml.c vu_err(vu_dev, vu_dev 448 arch/um/drivers/virtio_uml.c vu_err(vu_dev, vu_dev 460 arch/um/drivers/virtio_uml.c static void vhost_user_set_config(struct virtio_uml_device *vu_dev, vu_dev 468 arch/um/drivers/virtio_uml.c if (!(vu_dev->protocol_features & vu_dev 481 arch/um/drivers/virtio_uml.c rc = vhost_user_send(vu_dev, false, msg, NULL, 0); vu_dev 483 arch/um/drivers/virtio_uml.c vu_err(vu_dev, "sending VHOST_USER_SET_CONFIG failed: %d\n", vu_dev 511 arch/um/drivers/virtio_uml.c static int vhost_user_set_mem_table(struct virtio_uml_device *vu_dev) vu_dev 571 arch/um/drivers/virtio_uml.c return vhost_user_send(vu_dev, false, &msg, fds, vu_dev 575 arch/um/drivers/virtio_uml.c static int vhost_user_set_vring_state(struct virtio_uml_device *vu_dev, vu_dev 585 arch/um/drivers/virtio_uml.c return vhost_user_send(vu_dev, false, &msg, NULL, 0); vu_dev 588 arch/um/drivers/virtio_uml.c static int vhost_user_set_vring_num(struct virtio_uml_device *vu_dev, vu_dev 591 arch/um/drivers/virtio_uml.c return vhost_user_set_vring_state(vu_dev, VHOST_USER_SET_VRING_NUM, vu_dev 595 arch/um/drivers/virtio_uml.c static int vhost_user_set_vring_base(struct virtio_uml_device *vu_dev, vu_dev 598 arch/um/drivers/virtio_uml.c return vhost_user_set_vring_state(vu_dev, VHOST_USER_SET_VRING_BASE, vu_dev 602 arch/um/drivers/virtio_uml.c static int vhost_user_set_vring_addr(struct virtio_uml_device *vu_dev, vu_dev 616 arch/um/drivers/virtio_uml.c return vhost_user_send(vu_dev, false, &msg, NULL, 0); vu_dev 619 arch/um/drivers/virtio_uml.c static int vhost_user_set_vring_fd(struct virtio_uml_device *vu_dev, vu_dev 632 arch/um/drivers/virtio_uml.c return vhost_user_send(vu_dev, false, &msg, NULL, 0); vu_dev 634 arch/um/drivers/virtio_uml.c return vhost_user_send(vu_dev, false, &msg, &fd, 1); vu_dev 637 arch/um/drivers/virtio_uml.c static int vhost_user_set_vring_call(struct virtio_uml_device *vu_dev, vu_dev 640 arch/um/drivers/virtio_uml.c return vhost_user_set_vring_fd(vu_dev, VHOST_USER_SET_VRING_CALL, vu_dev 644 arch/um/drivers/virtio_uml.c static int vhost_user_set_vring_kick(struct virtio_uml_device *vu_dev, vu_dev 647 arch/um/drivers/virtio_uml.c return vhost_user_set_vring_fd(vu_dev, VHOST_USER_SET_VRING_KICK, vu_dev 651 arch/um/drivers/virtio_uml.c static int vhost_user_set_vring_enable(struct virtio_uml_device *vu_dev, vu_dev 654 arch/um/drivers/virtio_uml.c if (!(vu_dev->features & BIT_ULL(VHOST_USER_F_PROTOCOL_FEATURES))) vu_dev 657 arch/um/drivers/virtio_uml.c return vhost_user_set_vring_state(vu_dev, VHOST_USER_SET_VRING_ENABLE, vu_dev 697 arch/um/drivers/virtio_uml.c struct virtio_uml_device *vu_dev = to_virtio_uml_device(vdev); vu_dev 699 arch/um/drivers/virtio_uml.c vhost_user_get_config(vu_dev, offset, buf, len); vu_dev 705 arch/um/drivers/virtio_uml.c struct virtio_uml_device *vu_dev = to_virtio_uml_device(vdev); vu_dev 707 arch/um/drivers/virtio_uml.c vhost_user_set_config(vu_dev, offset, buf, len); vu_dev 712 arch/um/drivers/virtio_uml.c struct virtio_uml_device *vu_dev = to_virtio_uml_device(vdev); vu_dev 714 arch/um/drivers/virtio_uml.c return vu_dev->status; vu_dev 719 arch/um/drivers/virtio_uml.c struct virtio_uml_device *vu_dev = to_virtio_uml_device(vdev); vu_dev 721 arch/um/drivers/virtio_uml.c vu_dev->status = status; vu_dev 726 arch/um/drivers/virtio_uml.c struct virtio_uml_device *vu_dev = to_virtio_uml_device(vdev); vu_dev 728 arch/um/drivers/virtio_uml.c vu_dev->status = 0; vu_dev 746 arch/um/drivers/virtio_uml.c struct virtio_uml_device *vu_dev = to_virtio_uml_device(vdev); vu_dev 752 arch/um/drivers/virtio_uml.c WARN_ON(vhost_user_set_vring_enable(vu_dev, vq->index, false)); vu_dev 755 arch/um/drivers/virtio_uml.c WARN_ON(vhost_user_get_features(vu_dev, &features)); vu_dev 761 arch/um/drivers/virtio_uml.c static int vu_setup_vq_call_fd(struct virtio_uml_device *vu_dev, vu_dev 779 arch/um/drivers/virtio_uml.c rc = vhost_user_set_vring_call(vu_dev, vq->index, call_fds[1]); vu_dev 800 arch/um/drivers/virtio_uml.c struct virtio_uml_device *vu_dev = to_virtio_uml_device(vdev); vu_dev 801 arch/um/drivers/virtio_uml.c struct platform_device *pdev = vu_dev->pdev; vu_dev 829 arch/um/drivers/virtio_uml.c rc = vu_setup_vq_call_fd(vu_dev, vq); vu_dev 833 arch/um/drivers/virtio_uml.c rc = vhost_user_set_vring_num(vu_dev, index, num); vu_dev 837 arch/um/drivers/virtio_uml.c rc = vhost_user_set_vring_base(vu_dev, index, 0); vu_dev 841 arch/um/drivers/virtio_uml.c rc = vhost_user_set_vring_addr(vu_dev, index, vu_dev 869 arch/um/drivers/virtio_uml.c struct virtio_uml_device *vu_dev = to_virtio_uml_device(vdev); vu_dev 873 arch/um/drivers/virtio_uml.c rc = vhost_user_set_mem_table(vu_dev); vu_dev 894 arch/um/drivers/virtio_uml.c rc = vhost_user_set_vring_kick(vu_dev, vq->index, vu_dev 899 arch/um/drivers/virtio_uml.c rc = vhost_user_set_vring_enable(vu_dev, vq->index, true); vu_dev 913 arch/um/drivers/virtio_uml.c struct virtio_uml_device *vu_dev = to_virtio_uml_device(vdev); vu_dev 915 arch/um/drivers/virtio_uml.c return vu_dev->features; vu_dev 920 arch/um/drivers/virtio_uml.c struct virtio_uml_device *vu_dev = to_virtio_uml_device(vdev); vu_dev 924 arch/um/drivers/virtio_uml.c vu_dev->features = vdev->features | supported; vu_dev 926 arch/um/drivers/virtio_uml.c return vhost_user_set_features(vu_dev, vu_dev->features); vu_dev 931 arch/um/drivers/virtio_uml.c struct virtio_uml_device *vu_dev = to_virtio_uml_device(vdev); vu_dev 933 arch/um/drivers/virtio_uml.c return vu_dev->pdev->name; vu_dev 953 arch/um/drivers/virtio_uml.c struct virtio_uml_device *vu_dev = to_virtio_uml_device(vdev); vu_dev 956 arch/um/drivers/virtio_uml.c if (vu_dev->req_fd >= 0) { vu_dev 957 arch/um/drivers/virtio_uml.c um_free_irq(VIRTIO_IRQ, vu_dev); vu_dev 958 arch/um/drivers/virtio_uml.c os_close_file(vu_dev->req_fd); vu_dev 961 arch/um/drivers/virtio_uml.c os_close_file(vu_dev->sock); vu_dev 974 arch/um/drivers/virtio_uml.c struct virtio_uml_device *vu_dev; vu_dev 980 arch/um/drivers/virtio_uml.c vu_dev = devm_kzalloc(&pdev->dev, sizeof(*vu_dev), GFP_KERNEL); vu_dev 981 arch/um/drivers/virtio_uml.c if (!vu_dev) vu_dev 984 arch/um/drivers/virtio_uml.c vu_dev->vdev.dev.parent = &pdev->dev; vu_dev 985 arch/um/drivers/virtio_uml.c vu_dev->vdev.dev.release = virtio_uml_release_dev; vu_dev 986 arch/um/drivers/virtio_uml.c vu_dev->vdev.config = &virtio_uml_config_ops; vu_dev 987 arch/um/drivers/virtio_uml.c vu_dev->vdev.id.device = pdata->virtio_device_id; vu_dev 988 arch/um/drivers/virtio_uml.c vu_dev->vdev.id.vendor = VIRTIO_DEV_ANY_ID; vu_dev 989 arch/um/drivers/virtio_uml.c vu_dev->pdev = pdev; vu_dev 990 arch/um/drivers/virtio_uml.c vu_dev->req_fd = -1; vu_dev 997 arch/um/drivers/virtio_uml.c vu_dev->sock = rc; vu_dev 999 arch/um/drivers/virtio_uml.c rc = vhost_user_init(vu_dev); vu_dev 1003 arch/um/drivers/virtio_uml.c platform_set_drvdata(pdev, vu_dev); vu_dev 1005 arch/um/drivers/virtio_uml.c rc = register_virtio_device(&vu_dev->vdev); vu_dev 1007 arch/um/drivers/virtio_uml.c put_device(&vu_dev->vdev.dev); vu_dev 1011 arch/um/drivers/virtio_uml.c os_close_file(vu_dev->sock); vu_dev 1017 arch/um/drivers/virtio_uml.c struct virtio_uml_device *vu_dev = platform_get_drvdata(pdev); vu_dev 1019 arch/um/drivers/virtio_uml.c unregister_virtio_device(&vu_dev->vdev);