From patchwork Tue Jun 5 15:28:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: 858585 jemmy X-Patchwork-Id: 925533 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="pKbEPPlI"; 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 410bTN5RmKz9s08 for ; Wed, 6 Jun 2018 01:34:48 +1000 (AEST) Received: from localhost ([::1]:47540 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fQDyw-0005Dc-Fa for incoming@patchwork.ozlabs.org; Tue, 05 Jun 2018 11:34:46 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40120) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fQDsx-0008Dz-3m for qemu-devel@nongnu.org; Tue, 05 Jun 2018 11:28:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fQDsw-0003vA-17 for qemu-devel@nongnu.org; Tue, 05 Jun 2018 11:28:35 -0400 Received: from mail-pl0-x22c.google.com ([2607:f8b0:400e:c01::22c]:42188) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fQDsv-0003uI-RQ for qemu-devel@nongnu.org; Tue, 05 Jun 2018 11:28:33 -0400 Received: by mail-pl0-x22c.google.com with SMTP id w17-v6so1724312pll.9 for ; Tue, 05 Jun 2018 08:28:33 -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=pKbEPPlIb39QR8VlEu7COByIJEPgMr/Z2C58u4qVfDsqz9ZqRyA3DR7CWx7/8MgcRI 50ji89L/FZtOBVpu8BS8zoqcWnXoEn6RhSnyuO/0izEWFYp7ODzByH0g93Wl9j/FPcH0 g7u1UhZ1s/m6NWOBmMh+PBhVwu0OkuTP7KPTY7+OlzQqHm5xMg8Ql8jp8sGy0HhiS/Es IQb4qGFiJijpgfq39qYZ8yFe9Y/YzKK+tOQ4Bd8h11v27y/BWHGnhGhk9FIHmkWL3jyb ZpIwL0TxxFaJMCP9708Hq+U4Vgz6zTTyKVySzT8OaE6V+DFWnnIdssttOQ5uU346q92s o6/A== 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=XbwWAOu3vys+V4Zov3kol3gLz5V4TwM62/oE/KLikNc+2evS/suYZZEgRjf44x6yG9 Dh8QHfqSwYdWw4PUVqachVNuKnYUPQUTDX023zsr4j/sOo0Qu15ghxD87k6OrWNNEogH OspLFlrNnsRAfniZiJbr5Ar15kttFK5SK8cAMd27VWI2WLQBSSmKYHD/bSDvDeF+IPYl jMdYn09t1KvJ/bYhjSxJmSYW/IpmyIaANMHXptrXN1+MSVy2vEWgg46IZXqtaIC/b0rO UqYUFEBeJoRtPdOccoe3XrYyZ9vdAODHToRYPb5RBK0MXw8vIo0OQanKkfVT40mmUOyd E1qg== X-Gm-Message-State: ALKqPwc8Z6gr7qdyJmG7HNHZ0eJaHbAqClwdxb/2e6w44PYapC7vNIxU g+KI4RYE1atw0JuLHkAZwEA= X-Google-Smtp-Source: ADUXVKJgU8r3j9Qrum7n8ZMRbOxpY2LEDf+p6NFSALJoaoBhIwKkfwy5TOzuq4erM38Vk0f1NF0Mqg== X-Received: by 2002:a17:902:70ca:: with SMTP id l10-v6mr19530983plt.174.1528212513074; Tue, 05 Jun 2018 08:28:33 -0700 (PDT) Received: from VM_93_245_centos.localdomain ([150.109.57.149]) by smtp.gmail.com with ESMTPSA id t14-v6sm101952007pfh.109.2018.06.05.08.28.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Jun 2018 08:28:32 -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: Tue, 5 Jun 2018 23:28:05 +0800 Message-Id: <1528212489-19137-7-git-send-email-lidongchen@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1528212489-19137-1-git-send-email-lidongchen@tencent.com> References: <1528212489-19137-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:c01::22c Subject: [Qemu-devel] [PATCH v5 06/10] 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: galsha@mellanox.com, Lidong Chen , adido@mellanox.com, qemu-devel@nongnu.org, Lidong Chen Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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 = {