diff --git a/drivers/virtio/virtio_magma.c b/drivers/virtio/virtio_magma.c
index 31c7c370..14def0e 100644
--- a/drivers/virtio/virtio_magma.c
+++ b/drivers/virtio/virtio_magma.c
@@ -940,81 +940,6 @@
 	return 0;
 }
 
-static int virtmagma_command_magma_execute_command_buffer_with_resources(
-	struct virtmagma_instance *instance,
-	struct virtmagma_virtio_command *command)
-{
-	struct virtio_magma_execute_command_buffer_with_resources_ctrl *request =
-		command->request_ptr;
-	struct virtio_magma_execute_command_buffer_with_resources_resp
-		*response = command->response_ptr;
-	struct virtmagma_connection *connection;
-	struct virtmagma_command_buffer virt_command_buffer;
-	char *dst_ptr;
-	int ret;
-
-	if (!COMMAND_OK(command, request, response))
-		return -EINVAL;
-
-	connection = get_connection(instance, request->connection);
-	if (!connection)
-		return -EINVAL;
-
-	if (!get_connection_object(connection, request->context_id,
-				   MAGMA_CONTEXT))
-		return -EINVAL;
-
-	/* The virtmagma_comand_buffer includes the resources and semaphore data
-	   and their lengths, so we ignore the corresponding members of the request. */
-	ret = copy_from_user(&virt_command_buffer,
-			     (void *)request->command_buffer,
-			     sizeof(virt_command_buffer));
-	if (ret)
-		return ret;
-
-	/* reallocate request buffer with enough space for the structures */
-	command->request_size = sizeof(*request) +
-				virt_command_buffer.command_buffer_size +
-				virt_command_buffer.resource_size +
-				virt_command_buffer.semaphore_size;
-	/* memory will be freed by the caller */
-	dst_ptr = kzalloc(command->request_size, GFP_KERNEL);
-	if (!dst_ptr)
-		return -ENOMEM;
-
-	memcpy(dst_ptr, request, sizeof(*request));
-	command->request_ptr = dst_ptr;
-
-	dst_ptr += sizeof(*request);
-	ret = copy_from_user(dst_ptr,
-			     (void *)virt_command_buffer.command_buffer,
-			     virt_command_buffer.command_buffer_size);
-	if (ret)
-		return ret;
-
-	dst_ptr += virt_command_buffer.command_buffer_size;
-	ret = copy_from_user(dst_ptr, (void *)virt_command_buffer.resources,
-			     virt_command_buffer.resource_size);
-	if (ret)
-		return ret;
-
-	dst_ptr += virt_command_buffer.resource_size;
-	ret = copy_from_user(dst_ptr, (void *)virt_command_buffer.semaphores,
-			     virt_command_buffer.semaphore_size);
-	if (ret)
-		return ret;
-
-	ret = vq_out_send_sync(instance->vi, command);
-	if (ret)
-		return ret;
-
-	ret = virtmagma_check_expected_response_type(request, response);
-	if (ret)
-		return ret;
-
-	return 0;
-}
-
 static int virtmagma_command_magma_execute_command_buffer_with_resources2(
 	struct virtmagma_instance *instance,
 	struct virtmagma_virtio_command *command)
@@ -1798,10 +1723,6 @@
 		ret = virtmagma_command_magma_release_buffer(instance,
 							     &command);
 		break;
-	case VIRTIO_MAGMA_CMD_EXECUTE_COMMAND_BUFFER_WITH_RESOURCES:
-		ret = virtmagma_command_magma_execute_command_buffer_with_resources(
-			instance, &command);
-		break;
 	case VIRTIO_MAGMA_CMD_EXECUTE_COMMAND_BUFFER_WITH_RESOURCES2:
 		ret = virtmagma_command_magma_execute_command_buffer_with_resources2(
 			instance, &command);
@@ -1858,7 +1779,6 @@
 	case VIRTIO_MAGMA_CMD_GET_BUFFER_CACHE_POLICY:
 	case VIRTIO_MAGMA_CMD_MAP_BUFFER_GPU:
 	case VIRTIO_MAGMA_CMD_UNMAP_BUFFER_GPU:
-	case VIRTIO_MAGMA_CMD_COMMIT_BUFFER:
 	case VIRTIO_MAGMA_CMD_GET_SEMAPHORE_ID:
 	case VIRTIO_MAGMA_CMD_SIGNAL_SEMAPHORE:
 	case VIRTIO_MAGMA_CMD_RESET_SEMAPHORE:
diff --git a/include/uapi/linux/virtio_magma.h b/include/uapi/linux/virtio_magma.h
index 4c93d2e..fea2e0e 100644
--- a/include/uapi/linux/virtio_magma.h
+++ b/include/uapi/linux/virtio_magma.h
@@ -34,10 +34,8 @@
 	VIRTIO_MAGMA_CMD_GET_BUFFER_CACHE_POLICY = 0x1010,
 	VIRTIO_MAGMA_CMD_MAP_BUFFER_GPU = 0x1017,
 	VIRTIO_MAGMA_CMD_UNMAP_BUFFER_GPU = 0x1018,
-	VIRTIO_MAGMA_CMD_COMMIT_BUFFER = 0x1019,
 	VIRTIO_MAGMA_CMD_EXPORT = 0x101A,
 	VIRTIO_MAGMA_CMD_IMPORT = 0x101B,
-	VIRTIO_MAGMA_CMD_EXECUTE_COMMAND_BUFFER_WITH_RESOURCES = 0x101F,
 	VIRTIO_MAGMA_CMD_EXECUTE_IMMEDIATE_COMMANDS2 = 0x1021,
 	VIRTIO_MAGMA_CMD_CREATE_SEMAPHORE = 0x1022,
 	VIRTIO_MAGMA_CMD_RELEASE_SEMAPHORE = 0x1023,
@@ -90,10 +88,8 @@
 	VIRTIO_MAGMA_RESP_GET_BUFFER_CACHE_POLICY = 0x2010,
 	VIRTIO_MAGMA_RESP_MAP_BUFFER_GPU = 0x2017,
 	VIRTIO_MAGMA_RESP_UNMAP_BUFFER_GPU = 0x2018,
-	VIRTIO_MAGMA_RESP_COMMIT_BUFFER = 0x2019,
 	VIRTIO_MAGMA_RESP_EXPORT = 0x201A,
 	VIRTIO_MAGMA_RESP_IMPORT = 0x201B,
-	VIRTIO_MAGMA_RESP_EXECUTE_COMMAND_BUFFER_WITH_RESOURCES = 0x201F,
 	VIRTIO_MAGMA_RESP_EXECUTE_IMMEDIATE_COMMANDS2 = 0x2021,
 	VIRTIO_MAGMA_RESP_CREATE_SEMAPHORE = 0x2022,
 	VIRTIO_MAGMA_RESP_RELEASE_SEMAPHORE = 0x2023,
@@ -169,14 +165,10 @@
 		case VIRTIO_MAGMA_RESP_MAP_BUFFER_GPU: return "VIRTIO_MAGMA_RESP_MAP_BUFFER_GPU";
 		case VIRTIO_MAGMA_CMD_UNMAP_BUFFER_GPU: return "VIRTIO_MAGMA_CMD_UNMAP_BUFFER_GPU";
 		case VIRTIO_MAGMA_RESP_UNMAP_BUFFER_GPU: return "VIRTIO_MAGMA_RESP_UNMAP_BUFFER_GPU";
-		case VIRTIO_MAGMA_CMD_COMMIT_BUFFER: return "VIRTIO_MAGMA_CMD_COMMIT_BUFFER";
-		case VIRTIO_MAGMA_RESP_COMMIT_BUFFER: return "VIRTIO_MAGMA_RESP_COMMIT_BUFFER";
 		case VIRTIO_MAGMA_CMD_EXPORT: return "VIRTIO_MAGMA_CMD_EXPORT";
 		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_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";
 		case VIRTIO_MAGMA_RESP_EXECUTE_IMMEDIATE_COMMANDS2: return "VIRTIO_MAGMA_RESP_EXECUTE_IMMEDIATE_COMMANDS2";
 		case VIRTIO_MAGMA_CMD_CREATE_SEMAPHORE: return "VIRTIO_MAGMA_CMD_CREATE_SEMAPHORE";
@@ -276,10 +268,8 @@
 		case VIRTIO_MAGMA_CMD_GET_BUFFER_CACHE_POLICY: return VIRTIO_MAGMA_RESP_GET_BUFFER_CACHE_POLICY;
 		case VIRTIO_MAGMA_CMD_MAP_BUFFER_GPU: return VIRTIO_MAGMA_RESP_MAP_BUFFER_GPU;
 		case VIRTIO_MAGMA_CMD_UNMAP_BUFFER_GPU: return VIRTIO_MAGMA_RESP_UNMAP_BUFFER_GPU;
-		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_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;
 		case VIRTIO_MAGMA_CMD_RELEASE_SEMAPHORE: return VIRTIO_MAGMA_RESP_RELEASE_SEMAPHORE;
@@ -470,19 +460,6 @@
 	struct virtio_magma_ctrl_hdr hdr;
 } __attribute((packed));
 
-struct virtio_magma_commit_buffer_ctrl {
-	struct virtio_magma_ctrl_hdr hdr;
-	__le64 connection;
-	__le64 buffer;
-	__le64 page_offset;
-	__le64 page_count;
-} __attribute((packed));
-
-struct virtio_magma_commit_buffer_resp {
-	struct virtio_magma_ctrl_hdr hdr;
-	__le64 result_return;
-} __attribute((packed));
-
 struct virtio_magma_export_ctrl {
 	struct virtio_magma_ctrl_hdr hdr;
 	__le64 connection;
@@ -507,20 +484,6 @@
 	__le64 result_return;
 } __attribute((packed));
 
-struct virtio_magma_execute_command_buffer_with_resources_ctrl {
-	struct virtio_magma_ctrl_hdr hdr;
-	__le64 connection;
-	__le32 context_id;
-	uintptr_t command_buffer;
-	uintptr_t resources;
-	uintptr_t semaphore_ids;
-} __attribute((packed));
-
-struct virtio_magma_execute_command_buffer_with_resources_resp {
-	struct virtio_magma_ctrl_hdr hdr;
-	__le64 result_return;
-} __attribute((packed));
-
 struct virtio_magma_execute_immediate_commands2_ctrl {
 	struct virtio_magma_ctrl_hdr hdr;
 	__le64 connection;
