From patchwork Mon May 7 13:52:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: 858585 jemmy X-Patchwork-Id: 909759 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="NlD7LSKw"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40fkbP1V1Hz9s3q for ; Mon, 7 May 2018 23:53:04 +1000 (AEST) Received: from localhost ([::1]:46423 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fFgZa-0006xp-9U for incoming@patchwork.ozlabs.org; Mon, 07 May 2018 09:53:02 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45607) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fFgZ7-0006xd-FU for qemu-devel@nongnu.org; Mon, 07 May 2018 09:52:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fFgZ2-0006If-HZ for qemu-devel@nongnu.org; Mon, 07 May 2018 09:52:33 -0400 Received: from mail-io0-x242.google.com ([2607:f8b0:4001:c06::242]:33727) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fFgZ2-0006Ht-C8 for qemu-devel@nongnu.org; Mon, 07 May 2018 09:52:28 -0400 Received: by mail-io0-x242.google.com with SMTP id e78-v6so33785881iod.0 for ; Mon, 07 May 2018 06:52:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=cQ34kMBsj49rnjddnIN0a0b5/QA/X8kWK5PID7oEBgQ=; b=NlD7LSKwqHxtuSYhwJfVzGVZBDYL7kaHCTar1oTw9p4CSEusQnAectHFnRQ+hECeqM A33Eji2sT2p+wMZsIfQr6Ey7oechCs3TLQewbi9470XIesTxKpxCUVsq1pciLrzVVeN9 s/pUqf9mpAeLmiyjl5fPnFcfXSD45RqHHp4MX1/C7wWrzHGrjglyAvm5a4M6p+oSoN+y Rb12+42IpmbnlAxdWfby1GgqOzV+PNBuvU7yUUQouVdfAmcW9xuv9ZkreubTmn/YQc0q WHTD7BpDcgPOH+XMecfFhFHzhPNfcAMtb6pGi3JBua1hCAcHIEtPVYTtSGDO0BvWSKd0 cx3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=cQ34kMBsj49rnjddnIN0a0b5/QA/X8kWK5PID7oEBgQ=; b=shil+beGacVMDBj4M938QmgmFYtjhlrtKrUlglPClqOHc6UDyWGpdx40bhZt9WjZes xk88rJPzfmKLagYLsU76OUvY+9gke2929Zmhpni2VyDmaWvqLV1tBOyCyCjHJ3eVYhhd 9fE8kXgkGUItpMuTg7BXKTl34LTrqTdlOTBgY/+Z7PW+sH+rQf9b26Hz5gIZnquiMn4o dRoBdV7o1WEbbEBDezymdIPrm2H/wOSpUv+vgjUHvwy4Bb98ufaUhS/HjFBCSPCUVW4M fAsNYWVlMgKICJEeb55QFlX8dZ7uVUVxrNIgvKRK5oDCoQFy+e/glHrXu0U1neTSPM9P YaLg== X-Gm-Message-State: ALQs6tDV6gWEN8I+1qS/1AIN9oXPjJ/xTLi1RBG0WpqNtPY0mnDEArSH 1eQo45pHmPaz0FDL2z0MUFI= X-Google-Smtp-Source: AB8JxZrTBmY9lIg4dLgj3wC/Fphhamd6KIC9aT3AbQd8AWEMB9nIta3spBpFYXPa5TV20plJVuyNJw== X-Received: by 10.98.10.137 with SMTP id 9mr24833855pfk.112.1525701147501; Mon, 07 May 2018 06:52:27 -0700 (PDT) Received: from VM_127_91_centos.localdomain ([119.28.195.137]) by smtp.gmail.com with ESMTPSA id l19-v6sm35853834pgn.44.2018.05.07.06.52.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 07 May 2018 06:52:26 -0700 (PDT) From: Lidong Chen X-Google-Original-From: Lidong Chen To: quintela@redhat.com, dgilbert@redhat.com, berrange@redhat.com Date: Mon, 7 May 2018 21:52:16 +0800 Message-Id: <1525701137-9384-1-git-send-email-lidongchen@tencent.com> X-Mailer: git-send-email 1.8.3.1 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4001:c06::242 Subject: [Qemu-devel] [PATCH 1/2] migration: implement io_set_aio_fd_handler function for RDMA QIOChannel X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: adido@mellanox.com, galsha@mellanox.com, aviadye@mellanox.com, qemu-devel@nongnu.org, Lidong Chen Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" if qio_channel_rdma_readv return QIO_CHANNEL_ERR_BLOCK, the destination qemu crash. The backtrace is: (gdb) bt #0 0x0000000000000000 in ?? () #1 0x00000000008db50e in qio_channel_set_aio_fd_handler (ioc=0x38111e0, ctx=0x3726080, io_read=0x8db841 , io_write=0x0, opaque=0x38111e0) at io/channel.c: #2 0x00000000008db952 in qio_channel_set_aio_fd_handlers (ioc=0x38111e0) at io/channel.c:438 #3 0x00000000008dbab4 in qio_channel_yield (ioc=0x38111e0, condition=G_IO_IN) at io/channel.c:47 #4 0x00000000007a870b in channel_get_buffer (opaque=0x38111e0, buf=0x440c038 "", pos=0, size=327 at migration/qemu-file-channel.c:83 #5 0x00000000007a70f6 in qemu_fill_buffer (f=0x440c000) at migration/qemu-file.c:299 #6 0x00000000007a79d0 in qemu_peek_byte (f=0x440c000, offset=0) at migration/qemu-file.c:562 #7 0x00000000007a7a22 in qemu_get_byte (f=0x440c000) at migration/qemu-file.c:575 #8 0x00000000007a7c78 in qemu_get_be32 (f=0x440c000) at migration/qemu-file.c:655 #9 0x00000000007a0508 in qemu_loadvm_state (f=0x440c000) at migration/savevm.c:2126 #10 0x0000000000794141 in process_incoming_migration_co (opaque=0x0) at migration/migration.c:366 #11 0x000000000095c598 in coroutine_trampoline (i0=84033984, i1=0) at util/coroutine-ucontext.c:1 #12 0x00007f9c0db56d40 in ?? () from /lib64/libc.so.6 #13 0x00007f96fe858760 in ?? () #14 0x0000000000000000 in ?? () RDMA QIOChannel not implement io_set_aio_fd_handler. so qio_channel_set_aio_fd_handler will access NULL pointer. Signed-off-by: Lidong Chen Reviewed-by: Juan Quintela --- migration/rdma.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/migration/rdma.c b/migration/rdma.c index 92e4d30..dfa4f77 100644 --- a/migration/rdma.c +++ b/migration/rdma.c @@ -2963,6 +2963,21 @@ static GSource *qio_channel_rdma_create_watch(QIOChannel *ioc, return source; } +static void qio_channel_rdma_set_aio_fd_handler(QIOChannel *ioc, + AioContext *ctx, + IOHandler *io_read, + IOHandler *io_write, + void *opaque) +{ + QIOChannelRDMA *rioc = QIO_CHANNEL_RDMA(ioc); + if (io_read) { + aio_set_fd_handler(ctx, rioc->rdmain->comp_channel->fd, + false, io_read, io_write, NULL, opaque); + } else { + aio_set_fd_handler(ctx, rioc->rdmaout->comp_channel->fd, + false, io_read, io_write, NULL, opaque); + } +} static int qio_channel_rdma_close(QIOChannel *ioc, Error **errp) @@ -3822,6 +3837,7 @@ static void qio_channel_rdma_class_init(ObjectClass *klass, ioc_klass->io_set_blocking = qio_channel_rdma_set_blocking; ioc_klass->io_close = qio_channel_rdma_close; ioc_klass->io_create_watch = qio_channel_rdma_create_watch; + ioc_klass->io_set_aio_fd_handler = qio_channel_rdma_set_aio_fd_handler; } static const TypeInfo qio_channel_rdma_info = { From patchwork Mon May 7 13:52:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: 858585 jemmy X-Patchwork-Id: 909758 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ZUTiqwS9"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40fkbP1Nxfz9rxs for ; Mon, 7 May 2018 23:53:05 +1000 (AEST) Received: from localhost ([::1]:46422 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fFgZa-0006xo-Se for incoming@patchwork.ozlabs.org; Mon, 07 May 2018 09:53:02 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45608) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fFgZ7-0006xe-FT for qemu-devel@nongnu.org; Mon, 07 May 2018 09:52:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fFgZ4-0006Kq-EY for qemu-devel@nongnu.org; Mon, 07 May 2018 09:52:33 -0400 Received: from mail-io0-x244.google.com ([2607:f8b0:4001:c06::244]:39817) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fFgZ4-0006KK-99 for qemu-devel@nongnu.org; Mon, 07 May 2018 09:52:30 -0400 Received: by mail-io0-x244.google.com with SMTP id r9-v6so33755658iod.6 for ; Mon, 07 May 2018 06:52:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=iJfDVLBMGNWwtEwoF8e9V7smD2CMc+UyTds+ciWf6sk=; b=ZUTiqwS9XZiBVcusf51M+CfCi50oMcZdViT9H+nPPPkDgC5ss3mAbIxk6dan2aHIp2 m4FiYAfLgwSll6U+rkfUhDG4rvAVoJ3lBQZNr9BmtNZbN07IIOg3AlgQNGu4tnpamAJU c8T+6vHq/NOvfenm8CLdTwrDwq+xCOKKH7KjS42Tpejxik2l3wf88J/N3C8iLa3vpDp2 AIkeIc4TG33VOwgcIh3Ts4usZcY4HhJvrtL7YqMrn3ecAvbFeheoPY3o7lMbIlkED8pl w758Qbqpldo498FTUJ0ckTI44cjLF9fepzPcrmuB4lyWlgiSb6b8UoSilpqd0W2I0ZfV QAaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=iJfDVLBMGNWwtEwoF8e9V7smD2CMc+UyTds+ciWf6sk=; b=Ujevnz30/PZiL8eoK6itcrBfOxiYgIq9n1Gk2PFBJpFOORSf97Z1EDNGv46zJiERyw X6cLZmfuVwz5j+SoFmdDo3cVvAzEoFMcSzEpcS5+MUnM08yox5IuAPe3+Bx+UfYkeYap emk4eYJOv0nU68p1aaN5trlXTyKURHEqtXIFlTB/UwtC4q23oWJIyVPOYJwO/ZLSUNpZ xjXTiC8L4vmVYpWlhIV/sW0RpcNorIfe2vUe9RRVISso0jnxlwytY6MneoqVczazDbMg 39ctneCMWhOmUkEhCEXuuyEkYvzM4MdjFkqZF+YX+36nO7BdBDATDSWH7Vf6oM0YoIT9 i3Gw== X-Gm-Message-State: ALQs6tC38XOcmXzqu5H1r7xATajGdEhbu1aN+EhmxZWi+YgNskopqQ+5 y7mgicZLXQwn27MEZjjmOSE= X-Google-Smtp-Source: AB8JxZq8KN1f7QsTORNodH8J7ZxrGgqH1o7zs4pCD7frFsva9nlijDi7/u0dVixgt6xK49nSm75bCA== X-Received: by 10.98.149.21 with SMTP id p21mr36987128pfd.62.1525701149597; Mon, 07 May 2018 06:52:29 -0700 (PDT) Received: from VM_127_91_centos.localdomain ([119.28.195.137]) by smtp.gmail.com with ESMTPSA id l19-v6sm35853834pgn.44.2018.05.07.06.52.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 07 May 2018 06:52:29 -0700 (PDT) From: Lidong Chen X-Google-Original-From: Lidong Chen To: quintela@redhat.com, dgilbert@redhat.com, berrange@redhat.com Date: Mon, 7 May 2018 21:52:17 +0800 Message-Id: <1525701137-9384-2-git-send-email-lidongchen@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1525701137-9384-1-git-send-email-lidongchen@tencent.com> References: <1525701137-9384-1-git-send-email-lidongchen@tencent.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4001:c06::244 Subject: [Qemu-devel] [PATCH 2/2] migration: invoke qio_channel_yield only when qemu_in_coroutine() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: adido@mellanox.com, galsha@mellanox.com, aviadye@mellanox.com, qemu-devel@nongnu.org, Lidong Chen Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" when qio_channel_read return QIO_CHANNEL_ERR_BLOCK, the source qemu crash. The backtrace is: (gdb) bt #0 0x00007fb20aba91d7 in raise () from /lib64/libc.so.6 #1 0x00007fb20abaa8c8 in abort () from /lib64/libc.so.6 #2 0x00007fb20aba2146 in __assert_fail_base () from /lib64/libc.so.6 #3 0x00007fb20aba21f2 in __assert_fail () from /lib64/libc.so.6 #4 0x00000000008dba2d in qio_channel_yield (ioc=0x22f9e20, condition=G_IO_IN) at io/channel.c:460 #5 0x00000000007a870b in channel_get_buffer (opaque=0x22f9e20, buf=0x3d54038 "", pos=0, size=32768) at migration/qemu-file-channel.c:83 #6 0x00000000007a70f6 in qemu_fill_buffer (f=0x3d54000) at migration/qemu-file.c:299 #7 0x00000000007a79d0 in qemu_peek_byte (f=0x3d54000, offset=0) at migration/qemu-file.c:562 #8 0x00000000007a7a22 in qemu_get_byte (f=0x3d54000) at migration/qemu-file.c:575 #9 0x00000000007a7c46 in qemu_get_be16 (f=0x3d54000) at migration/qemu-file.c:647 #10 0x0000000000796db7 in source_return_path_thread (opaque=0x2242280) at migration/migration.c:1794 #11 0x00000000009428fa in qemu_thread_start (args=0x3e58420) at util/qemu-thread-posix.c:504 #12 0x00007fb20af3ddc5 in start_thread () from /lib64/libpthread.so.0 #13 0x00007fb20ac6b74d in clone () from /lib64/libc.so.6 This patch fixed by invoke qio_channel_yield only when qemu_in_coroutine(). Signed-off-by: Lidong Chen Reviewed-by: Juan Quintela --- migration/qemu-file-channel.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/migration/qemu-file-channel.c b/migration/qemu-file-channel.c index e202d73..8e639eb 100644 --- a/migration/qemu-file-channel.c +++ b/migration/qemu-file-channel.c @@ -49,7 +49,11 @@ static ssize_t channel_writev_buffer(void *opaque, ssize_t len; len = qio_channel_writev(ioc, local_iov, nlocal_iov, NULL); if (len == QIO_CHANNEL_ERR_BLOCK) { - qio_channel_wait(ioc, G_IO_OUT); + if (qemu_in_coroutine()) { + qio_channel_yield(ioc, G_IO_OUT); + } else { + qio_channel_wait(ioc, G_IO_OUT); + } continue; } if (len < 0) { @@ -80,7 +84,11 @@ static ssize_t channel_get_buffer(void *opaque, ret = qio_channel_read(ioc, (char *)buf, size, NULL); if (ret < 0) { if (ret == QIO_CHANNEL_ERR_BLOCK) { - qio_channel_yield(ioc, G_IO_IN); + if (qemu_in_coroutine()) { + qio_channel_yield(ioc, G_IO_IN); + } else { + qio_channel_wait(ioc, G_IO_IN); + } } else { /* XXX handle Error * object */ return -EIO;