From patchwork Thu Jun 20 17:35:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Hajnoczi X-Patchwork-Id: 11007561 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 50BF06C5 for ; Thu, 20 Jun 2019 17:52:57 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 43A891FF62 for ; Thu, 20 Jun 2019 17:52:57 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 37B42287E9; Thu, 20 Jun 2019 17:52:57 +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=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id E4DAD1FF62 for ; Thu, 20 Jun 2019 17:52:56 +0000 (UTC) Received: from localhost ([::1]:51932 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1he1F2-0004bF-6w for patchwork-qemu-devel@patchwork.kernel.org; Thu, 20 Jun 2019 13:52:56 -0400 Received: from eggs.gnu.org ([209.51.188.92]:35287) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1he19b-0007V5-CN for qemu-devel@nongnu.org; Thu, 20 Jun 2019 13:47:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1he0yX-0003Eg-LO for qemu-devel@nongnu.org; Thu, 20 Jun 2019 13:35:58 -0400 Received: from mx1.redhat.com ([209.132.183.28]:51192) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1he0yV-000351-2F for qemu-devel@nongnu.org; Thu, 20 Jun 2019 13:35:51 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id EA0C2308FC4A; Thu, 20 Jun 2019 17:35:39 +0000 (UTC) Received: from localhost (ovpn-116-108.ams2.redhat.com [10.36.116.108]) by smtp.corp.redhat.com (Postfix) with ESMTP id A8A0B608D0; Thu, 20 Jun 2019 17:35:34 +0000 (UTC) From: Stefan Hajnoczi To: qemu-devel@nongnu.org Date: Thu, 20 Jun 2019 18:35:29 +0100 Message-Id: <20190620173532.14468-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Thu, 20 Jun 2019 17:35:39 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v5 0/3] virtio-scsi: restart DMA after iothread X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fam Zheng , Paolo Bonzini , Stefan Hajnoczi , Kevin Wolf , "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP v5: * Plumbing vm change state handlers into DeviceClass/BusClass is a rather large bug fix. Instead I've combined the previous priorities approach with the observation from Kevin and Paolo that we really want to order by qdev tree depth. The new qdev_add_vm_change_state_handler() API lets DeviceStates register callbacks that execute in qdev tree depth order. This solves the virtio-scsi bug since the virtio-scsi device's callback must complete before its child scsi-disk's callback runs. Is this a good compromise for everyone? Stefan Hajnoczi (3): vl: add qemu_add_vm_change_state_handler_prio() qdev: add qdev_add_vm_change_state_handler() virtio-scsi: restart DMA after iothread hw/core/Makefile.objs | 1 + include/hw/qdev-core.h | 5 +++ include/sysemu/sysemu.h | 2 + hw/core/vm-change-state-handler.c | 61 +++++++++++++++++++++++++++++++ hw/scsi/scsi-bus.c | 4 +- hw/virtio/virtio.c | 4 +- vl.c | 59 ++++++++++++++++++++++++------ 7 files changed, 120 insertions(+), 16 deletions(-) create mode 100644 hw/core/vm-change-state-handler.c