From patchwork Wed May 30 09:43:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: 858585 jemmy X-Patchwork-Id: 10438057 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 1C591602CC for ; Wed, 30 May 2018 09:48:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0931827F8E for ; Wed, 30 May 2018 09:48:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F137E2832D; Wed, 30 May 2018 09:48:33 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 6BEDA27F8E for ; Wed, 30 May 2018 09:48:33 +0000 (UTC) Received: from localhost ([::1]:37260 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fNxia-0003pb-FE for patchwork-qemu-devel@patchwork.kernel.org; Wed, 30 May 2018 05:48:32 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40408) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fNxeQ-0000Xb-82 for qemu-devel@nongnu.org; Wed, 30 May 2018 05:44:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fNxeO-0006sp-6F for qemu-devel@nongnu.org; Wed, 30 May 2018 05:44:14 -0400 Received: from mail-pg0-x230.google.com ([2607:f8b0:400e:c05::230]:44726) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fNxeO-0006sh-0O for qemu-devel@nongnu.org; Wed, 30 May 2018 05:44:12 -0400 Received: by mail-pg0-x230.google.com with SMTP id p21-v6so7899040pgd.11 for ; Wed, 30 May 2018 02:44:11 -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=lux+N7RLSocDI3oxa3LwaDyLJuk54eW4aEDrU0k5j8k=; b=EwvXBunCyl4mtRMlmxPWyVoAGwwG85VRbBHuIU1GlLQoRXqw0GC2MUkOFl2UAxvb5N pK+aaR6CT/C2yyfeJPWM6WVq7r2B7rMROc7CfoiBgbwVCV4qzb2+5mLPqHnIHI8RC8/1 jVYt3pXNX9q9684B7Lz/tSl2Y3I5buBx0PZE6b9xLRgclHicq5acTW0klkVk3ZM7gfr0 Yi0i09nWhbuAHVwb84MaOPcwk7vWgLCQFjKyySWu37pu2bSjNEG16x1QBj4E5x2pX4Ay PTi2isjUQWvdow+oejB46AtgtT92sGcdCwL6Zm+lSTgALCZA4TPPRX626i2q0/A7z9H/ RmwQ== 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=lux+N7RLSocDI3oxa3LwaDyLJuk54eW4aEDrU0k5j8k=; b=ULjVq/JXOkvIkta6TSru9sQQjlGMJ8iKQnP3c5Fy1+Z3NAMfr5ISfTfcg5VwId5EPv DgsuI1OQaqwsprHq6AMG+zzoJadlg7K6SZARpReoZjRkJbpHsWQFJ505ftYQ1AgY9iAt io7Ti8oibNeVEoRuGWb3Ng7qmxTPEQdnIRgIhi79ajMCaYkdIBkbwS/CSd+xN8CKJC5n SmyVyayHqpdAaAS212yvmSblz1kF8fdUAY75SuTQHMY21AR8tl7EjJ/XlgNJkliyJXGW SxBOScgqg2tDGCoWayaqzWCuhSW54d3XBn2oFWQcJ6hr/FGlbzbY3V0DzKvHDDpr7tRX 82mg== X-Gm-Message-State: ALKqPwfMLwMnzn2Xk/llquafAuoKfJp3uQrrJHITVcSzeCQyXSDE4lQZ nSb6wzaTplWGxV4KYXlEXVQMLQ== X-Google-Smtp-Source: ADUXVKJ+4+M+DmfcPRPWnBApqpVf/94IlgCm/FPSyixyskKJmuQwqZE3bC8QCDfatvoF+LLy/FTcsA== X-Received: by 2002:a63:6383:: with SMTP id x125-v6mr1601424pgb.277.1527673451152; Wed, 30 May 2018 02:44:11 -0700 (PDT) Received: from VM_93_245_centos.localdomain ([150.109.57.149]) by smtp.gmail.com with ESMTPSA id 29-v6sm60565257pfj.14.2018.05.30.02.44.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 30 May 2018 02:44:10 -0700 (PDT) From: Lidong Chen X-Google-Original-From: Lidong Chen To: zhang.zhanghailiang@huawei.com, quintela@redhat.com, dgilbert@redhat.com, berrange@redhat.com, aviadye@mellanox.com, pbonzini@redhat.com Date: Wed, 30 May 2018 17:43:32 +0800 Message-Id: <1527673416-31268-9-git-send-email-lidongchen@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1527673416-31268-1-git-send-email-lidongchen@tencent.com> References: <1527673416-31268-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:400e:c05::230 Subject: [Qemu-devel] [PATCH v4 08/12] 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: Lidong Chen , adido@mellanox.com, qemu-devel@nongnu.org, Lidong Chen Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Lidong Chen 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 = {