From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60441) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aY9Ul-0005ht-Ov for qemu-devel@nongnu.org; Tue, 23 Feb 2016 04:43:04 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aY9Uh-0006wM-Io for qemu-devel@nongnu.org; Tue, 23 Feb 2016 04:43:03 -0500 Received: from mail-wm0-x236.google.com ([2a00:1450:400c:c09::236]:35868) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aY9Uh-0006wE-BK for qemu-devel@nongnu.org; Tue, 23 Feb 2016 04:42:59 -0500 Received: by mail-wm0-x236.google.com with SMTP id g62so212693899wme.1 for ; Tue, 23 Feb 2016 01:42:59 -0800 (PST) Sender: Paolo Bonzini References: <1455894643-16280-1-git-send-email-pbonzini@redhat.com> <20160223053926.GA23182@ad.usersys.redhat.com> From: Paolo Bonzini Message-ID: <56CC299F.3040509@redhat.com> Date: Tue, 23 Feb 2016 10:42:55 +0100 MIME-Version: 1.0 In-Reply-To: <20160223053926.GA23182@ad.usersys.redhat.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH] fixup! block-migration: acquire AioContext as necessary List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Fam Zheng Cc: qemu-devel@nongnu.org, mst@redhat.com On 23/02/2016 06:39, Fam Zheng wrote: > BTW, could you also explain the blk_mig_lock() question (*) I had? > > *: https://lists.gnu.org/archive/html/qemu-devel/2016-02/msg03317.html Sorry, missed that: > >> @@ -597,21 +627,28 @@ static void block_migration_cleanup(void *opaque) >> { >> BlkMigDevState *bmds; >> BlkMigBlock *blk; >> + AioContext *ctx; >> >> bdrv_drain_all(); >> >> unset_dirty_tracking(); >> >> - blk_mig_lock(); > > Why is it okay to skip the blk_mig_lock() for block_mig_state.bmds_list? The bmds_list is not protected by blk_mig_lock: /* Written during setup phase. Can be read without a lock. */ int blk_enable; int shared_base; QSIMPLEQ_HEAD(bmds_list, BlkMigDevState) bmds_list; int64_t total_sector_sum; bool zero_blocks; block_migration_cleanup is called from qemu_savevm_state_cleanup, when there can be no concurrency between the migration thread and the I/O thread. In fact the call of qemu_savevm_state_cleanup might as well be moved out of the migration thread. Paolo