Remove deprecated command buffer interfaces Change-Id: I14f536f0a63507723a144e582f04afaac5847472
diff --git a/drivers/virtio/virtio_magma.c b/drivers/virtio/virtio_magma.c index 7fcb871..30e2f8b 100644 --- a/drivers/virtio/virtio_magma.c +++ b/drivers/virtio/virtio_magma.c
@@ -61,7 +61,6 @@ static const char *virtmagma_connection_object_type_string( struct virtmagma_buffer { size_t size_requested; size_t size_allocated; - bool is_command_buffer; }; struct virtmagma_semaphore { @@ -262,59 +261,6 @@ static int release_buffer(struct virtmagma_buffer *buffer) return ret; } -static int release_command_buffer(struct virtmagma_buffer *buffer) -{ - int ret; - struct virtio_magma_release_command_buffer_ctrl *request; - struct virtio_magma_release_command_buffer_resp *response; - struct virtmagma_virtio_command command; - struct virtmagma_connection_object *object = container_of( - buffer, struct virtmagma_connection_object, buffer); - BUILD_BUG_ON(sizeof(*request) > MESSAGE_CACHE_OBJECT_SIZE); - BUILD_BUG_ON(sizeof(*response) > MESSAGE_CACHE_OBJECT_SIZE); - - request = kmem_cache_alloc( - object->parent_connection->parent_instance->msg_cache, - GFP_KERNEL); - if (!request) - return -ENOMEM; - - response = kmem_cache_alloc( - object->parent_connection->parent_instance->msg_cache, - GFP_KERNEL); - if (!response) { - ret = -ENOMEM; - goto free_request; - } - - request->hdr.type = VIRTIO_MAGMA_CMD_RELEASE_COMMAND_BUFFER; - request->connection = object->parent_connection->host_value; - request->command_buffer = object->host_value; - - command.request_ptr = request; - command.request_size = sizeof(*request); - command.response_ptr = response; - command.response_size = sizeof(*response); - - ret = vq_out_send_sync(object->parent_connection->parent_instance->vi, - &command); - if (ret) - goto free_response; - - if (response->hdr.type != VIRTIO_MAGMA_RESP_RELEASE_COMMAND_BUFFER) - ret = -EIO; - -free_response: - kmem_cache_free(object->parent_connection->parent_instance->msg_cache, - response); - -free_request: - kmem_cache_free(object->parent_connection->parent_instance->msg_cache, - request); - - return ret; -} - static int release_semaphore(struct virtmagma_semaphore *semaphore) { int ret; @@ -430,7 +376,6 @@ static int release_connection(struct virtmagma_connection *connection) struct virtio_magma_release_connection_resp *response; struct virtmagma_virtio_command command; uint64_t leaked_buffers = 0; - uint64_t leaked_command_buffers = 0; uint64_t leaked_semaphores = 0; uint64_t leaked_contexts = 0; @@ -439,13 +384,8 @@ static int release_connection(struct virtmagma_connection *connection) hash_for_each (connection->objects, bkt, object, node) { switch (object->type) { case MAGMA_BUFFER: - if (object->buffer.is_command_buffer) { - release_command_buffer(&object->buffer); - ++leaked_command_buffers; - } else { - release_buffer(&object->buffer); - ++leaked_buffers; - } + release_buffer(&object->buffer); + ++leaked_buffers; break; case MAGMA_CONTEXT: release_context(&object->context); @@ -461,14 +401,11 @@ static int release_connection(struct virtmagma_connection *connection) break; } } - if (leaked_buffers || leaked_command_buffers || leaked_semaphores || - leaked_contexts) { + if (leaked_buffers || leaked_semaphores || leaked_contexts) { pr_info("virtmagma: connection %lld from command %s closed with leaked objects:\n", connection->host_value, connection->parent_instance->creator.comm); pr_cont("virtmagma: buffers: %lld\n", leaked_buffers); - pr_cont("virtmagma: command buffers: %lld\n", - leaked_command_buffers); pr_cont("virtmagma: semaphores: %lld\n", leaked_semaphores); pr_cont("virtmagma: contexts: %lld\n", leaked_contexts); } @@ -571,10 +508,7 @@ static int virtmagma_mmfd_mmap(struct file *filp, struct vm_area_struct *vma) instance->mmap_params.pending = false; - if (instance->mmap_params.buffer->is_command_buffer) - max_map_size = instance->mmap_params.buffer->size_requested; - else - max_map_size = instance->mmap_params.buffer->size_allocated; + max_map_size = instance->mmap_params.buffer->size_allocated; max_map_size = PAGE_ALIGN(max_map_size); if (vm_size > max_map_size) { @@ -854,7 +788,6 @@ static int virtmagma_command_magma_create_buffer( object->type = MAGMA_BUFFER; object->buffer.size_requested = request->size; object->buffer.size_allocated = response->size_out; - object->buffer.is_command_buffer = false; hash_add(connection->objects, &object->node, object->host_value); @@ -898,133 +831,6 @@ static int virtmagma_command_magma_release_buffer( return 0; } -static int virtmagma_command_magma_create_command_buffer( - struct virtmagma_instance *instance, - struct virtmagma_virtio_command *command) -{ - int ret; - struct virtmagma_connection *connection; - struct virtmagma_connection_object *object; - struct virtio_magma_create_command_buffer_ctrl *request = - command->request_ptr; - struct virtio_magma_create_command_buffer_resp *response = - command->response_ptr; - - if (!COMMAND_OK(command, request, response)) - return -EINVAL; - - connection = get_connection(instance, request->connection); - if (!connection) - return -EINVAL; - - ret = vq_out_send_sync(instance->vi, command); - if (ret) - return ret; - - ret = virtmagma_check_expected_response_type(request, response); - if (ret) - return ret; - - /* pass on magma errors without creating a command_buffer object */ - if (response->result_return) { - pr_warn("virtmagma: magma_create_command_buffer returned %d", - (int32_t)response->result_return); - return 0; /* the ioctl is still successful */ - } - - object = kzalloc(sizeof(*object), GFP_KERNEL); - if (!object) - return -ENOMEM; - - object->parent_connection = connection; - object->host_value = response->buffer_out; - object->type = MAGMA_BUFFER; - object->buffer.size_requested = request->size; - object->buffer.is_command_buffer = true; - - hash_add(connection->objects, &object->node, object->host_value); - - return 0; -} - -static int virtmagma_command_magma_release_command_buffer( - struct virtmagma_instance *instance, - struct virtmagma_virtio_command *command) -{ - int ret; - struct virtmagma_connection *connection = NULL; - struct virtmagma_connection_object *object = NULL; - struct virtio_magma_release_command_buffer_ctrl *request = - command->request_ptr; - struct virtio_magma_release_command_buffer_resp *response = - command->response_ptr; - - if (!COMMAND_OK(command, request, response)) - return -EINVAL; - - connection = get_connection(instance, request->connection); - if (!connection) - return -EINVAL; - - object = get_connection_object(connection, request->command_buffer, - MAGMA_BUFFER); - if (!object) - return -EINVAL; - - ret = vq_out_send_sync(instance->vi, command); - if (ret) - return ret; - - ret = virtmagma_check_expected_response_type(request, response); - if (ret) - return ret; - - hash_del(&object->node); - kfree(object); - - return 0; -} - -static int virtmagma_command_magma_submit_command_buffer( - struct virtmagma_instance *instance, - struct virtmagma_virtio_command *command) -{ - int ret; - struct virtmagma_connection *connection = NULL; - struct virtmagma_connection_object *object = NULL; - struct virtio_magma_submit_command_buffer_ctrl *request = - command->request_ptr; - struct virtio_magma_submit_command_buffer_resp *response = - command->response_ptr; - - if (!COMMAND_OK(command, request, response)) - return -EINVAL; - - connection = get_connection(instance, request->connection); - if (!connection) - return -EINVAL; - - object = get_connection_object(connection, request->command_buffer, - MAGMA_BUFFER); - if (!object) - return -EINVAL; - - ret = vq_out_send_sync(instance->vi, command); - if (ret) - return ret; - - ret = virtmagma_check_expected_response_type(request, response); - if (ret) - return ret; - - /* command buffers are implicitly freed on submit */ - - hash_del(&object->node); - kfree(object); - - return 0; -} - static int virtmagma_command_magma_execute_command_buffer_with_resources( struct virtmagma_instance *instance, struct virtmagma_virtio_command *command) @@ -1474,18 +1280,6 @@ int virtmagma_ioctl_magma_command(struct file *filp, void __user *ptr) ret = virtmagma_command_magma_release_buffer(instance, &command); break; - case VIRTIO_MAGMA_CMD_CREATE_COMMAND_BUFFER: - ret = virtmagma_command_magma_create_command_buffer(instance, - &command); - break; - case VIRTIO_MAGMA_CMD_RELEASE_COMMAND_BUFFER: - ret = virtmagma_command_magma_release_command_buffer(instance, - &command); - break; - case VIRTIO_MAGMA_CMD_SUBMIT_COMMAND_BUFFER: - ret = virtmagma_command_magma_submit_command_buffer(instance, - &command); - break; case VIRTIO_MAGMA_CMD_EXECUTE_COMMAND_BUFFER_WITH_RESOURCES: ret = virtmagma_command_magma_execute_command_buffer_with_resources( instance, &command);
diff --git a/include/uapi/linux/virtio_magma.h b/include/uapi/linux/virtio_magma.h index dbba13a..7ac95f9 100644 --- a/include/uapi/linux/virtio_magma.h +++ b/include/uapi/linux/virtio_magma.h
@@ -45,9 +45,6 @@ enum virtio_magma_ctrl_type { VIRTIO_MAGMA_CMD_COMMIT_BUFFER = 0x1019, VIRTIO_MAGMA_CMD_EXPORT = 0x101A, VIRTIO_MAGMA_CMD_IMPORT = 0x101B, - VIRTIO_MAGMA_CMD_CREATE_COMMAND_BUFFER = 0x101C, - VIRTIO_MAGMA_CMD_RELEASE_COMMAND_BUFFER = 0x101D, - VIRTIO_MAGMA_CMD_SUBMIT_COMMAND_BUFFER = 0x101E, VIRTIO_MAGMA_CMD_EXECUTE_COMMAND_BUFFER_WITH_RESOURCES = 0x101F, VIRTIO_MAGMA_CMD_EXECUTE_IMMEDIATE_COMMANDS2 = 0x1021, VIRTIO_MAGMA_CMD_CREATE_SEMAPHORE = 0x1022, @@ -89,9 +86,6 @@ enum virtio_magma_ctrl_type { VIRTIO_MAGMA_RESP_COMMIT_BUFFER = 0x2019, VIRTIO_MAGMA_RESP_EXPORT = 0x201A, VIRTIO_MAGMA_RESP_IMPORT = 0x201B, - VIRTIO_MAGMA_RESP_CREATE_COMMAND_BUFFER = 0x201C, - VIRTIO_MAGMA_RESP_RELEASE_COMMAND_BUFFER = 0x201D, - VIRTIO_MAGMA_RESP_SUBMIT_COMMAND_BUFFER = 0x201E, VIRTIO_MAGMA_RESP_EXECUTE_COMMAND_BUFFER_WITH_RESOURCES = 0x201F, VIRTIO_MAGMA_RESP_EXECUTE_IMMEDIATE_COMMANDS2 = 0x2021, VIRTIO_MAGMA_RESP_CREATE_SEMAPHORE = 0x2022, @@ -170,12 +164,6 @@ inline const char* virtio_magma_ctrl_type_string(enum virtio_magma_ctrl_type typ case VIRTIO_MAGMA_RESP_EXPORT: return "VIRTIO_MAGMA_RESP_EXPORT"; case VIRTIO_MAGMA_CMD_IMPORT: return "VIRTIO_MAGMA_CMD_IMPORT"; case VIRTIO_MAGMA_RESP_IMPORT: return "VIRTIO_MAGMA_RESP_IMPORT"; - case VIRTIO_MAGMA_CMD_CREATE_COMMAND_BUFFER: return "VIRTIO_MAGMA_CMD_CREATE_COMMAND_BUFFER"; - case VIRTIO_MAGMA_RESP_CREATE_COMMAND_BUFFER: return "VIRTIO_MAGMA_RESP_CREATE_COMMAND_BUFFER"; - case VIRTIO_MAGMA_CMD_RELEASE_COMMAND_BUFFER: return "VIRTIO_MAGMA_CMD_RELEASE_COMMAND_BUFFER"; - case VIRTIO_MAGMA_RESP_RELEASE_COMMAND_BUFFER: return "VIRTIO_MAGMA_RESP_RELEASE_COMMAND_BUFFER"; - case VIRTIO_MAGMA_CMD_SUBMIT_COMMAND_BUFFER: return "VIRTIO_MAGMA_CMD_SUBMIT_COMMAND_BUFFER"; - case VIRTIO_MAGMA_RESP_SUBMIT_COMMAND_BUFFER: return "VIRTIO_MAGMA_RESP_SUBMIT_COMMAND_BUFFER"; case VIRTIO_MAGMA_CMD_EXECUTE_COMMAND_BUFFER_WITH_RESOURCES: return "VIRTIO_MAGMA_CMD_EXECUTE_COMMAND_BUFFER_WITH_RESOURCES"; case VIRTIO_MAGMA_RESP_EXECUTE_COMMAND_BUFFER_WITH_RESOURCES: return "VIRTIO_MAGMA_RESP_EXECUTE_COMMAND_BUFFER_WITH_RESOURCES"; case VIRTIO_MAGMA_CMD_EXECUTE_IMMEDIATE_COMMANDS2: return "VIRTIO_MAGMA_CMD_EXECUTE_IMMEDIATE_COMMANDS2"; @@ -241,9 +229,6 @@ inline enum virtio_magma_ctrl_type virtio_magma_expected_response_type(enum virt case VIRTIO_MAGMA_CMD_COMMIT_BUFFER: return VIRTIO_MAGMA_RESP_COMMIT_BUFFER; case VIRTIO_MAGMA_CMD_EXPORT: return VIRTIO_MAGMA_RESP_EXPORT; case VIRTIO_MAGMA_CMD_IMPORT: return VIRTIO_MAGMA_RESP_IMPORT; - case VIRTIO_MAGMA_CMD_CREATE_COMMAND_BUFFER: return VIRTIO_MAGMA_RESP_CREATE_COMMAND_BUFFER; - case VIRTIO_MAGMA_CMD_RELEASE_COMMAND_BUFFER: return VIRTIO_MAGMA_RESP_RELEASE_COMMAND_BUFFER; - case VIRTIO_MAGMA_CMD_SUBMIT_COMMAND_BUFFER: return VIRTIO_MAGMA_RESP_SUBMIT_COMMAND_BUFFER; case VIRTIO_MAGMA_CMD_EXECUTE_COMMAND_BUFFER_WITH_RESOURCES: return VIRTIO_MAGMA_RESP_EXECUTE_COMMAND_BUFFER_WITH_RESOURCES; case VIRTIO_MAGMA_CMD_EXECUTE_IMMEDIATE_COMMANDS2: return VIRTIO_MAGMA_RESP_EXECUTE_IMMEDIATE_COMMANDS2; case VIRTIO_MAGMA_CMD_CREATE_SEMAPHORE: return VIRTIO_MAGMA_RESP_CREATE_SEMAPHORE; @@ -573,39 +558,6 @@ struct virtio_magma_import_resp { __le64 result_return; } __attribute((packed)); -struct virtio_magma_create_command_buffer_ctrl { - struct virtio_magma_ctrl_hdr hdr; - __le64 connection; - __le64 size; -} __attribute((packed)); - -struct virtio_magma_create_command_buffer_resp { - struct virtio_magma_ctrl_hdr hdr; - __le64 buffer_out; - __le64 result_return; -} __attribute((packed)); - -struct virtio_magma_release_command_buffer_ctrl { - struct virtio_magma_ctrl_hdr hdr; - __le64 connection; - __le64 command_buffer; -} __attribute((packed)); - -struct virtio_magma_release_command_buffer_resp { - struct virtio_magma_ctrl_hdr hdr; -} __attribute((packed)); - -struct virtio_magma_submit_command_buffer_ctrl { - struct virtio_magma_ctrl_hdr hdr; - __le64 connection; - __le64 command_buffer; - __le32 context_id; -} __attribute((packed)); - -struct virtio_magma_submit_command_buffer_resp { - struct virtio_magma_ctrl_hdr hdr; -} __attribute((packed)); - struct virtio_magma_execute_command_buffer_with_resources_ctrl { struct virtio_magma_ctrl_hdr hdr; __le64 connection;