From patchwork Tue Aug 21 17:01:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960567 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=redhat.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="U6sk1W6c"; 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 41vxqF24y8z9s4v for ; Wed, 22 Aug 2018 03:04:25 +1000 (AEST) Received: from localhost ([::1]:54944 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4s-0001O5-VT for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:04:23 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60887) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA3x-0001An-8p for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA3o-0005gC-As for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:20 -0400 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]:55021) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA3n-0005MN-60 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:15 -0400 Received: by mail-wm0-x243.google.com with SMTP id c14-v6so3614594wmb.4 for ; Tue, 21 Aug 2018 10:03:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:subject:date:message-id:in-reply-to:references; bh=3jWMXNC27TuGRYJa75salkvXuaAv5PBlRH5s1Nr/NXo=; b=U6sk1W6cQtaYc1tG3ofWxHWoat4krBNB9IeDRiQoAuo9rkXqDSeGbKe6TZ8WpBi71g HYJXH/n1OCKoGWohYsLskhhI1kYJuvNL4UprSzPsp3Q6SRKcrTIMRCZosdmg7Nb8jX8l 3cUXErOx0D+L7pfg9uiY/4czg8uOWeJXKzQdI0jOOLUN32FJNIOvH/s75cpnblYEX4KH EyMtCnmTMsF/3nLNGEnkxPpHudOrMx3BVnx7na64gE1IKX34d/UJgCNh4nj5W1ekS2fn TeD2RDEeyjytaUKqpsJVN1I79ablf/vCV0BnEBpR7QIbvhsiNwdI6yyGRikHoPi6rGSp BVkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references; bh=3jWMXNC27TuGRYJa75salkvXuaAv5PBlRH5s1Nr/NXo=; b=fvfVTTpZEr8TXRLgAQUSbnxfajrzhbu1QXYpTJ4jTawVX7LC3y8eY4/LegkaVnsuHP 9eqW4lnQ6Wyp8NDtS41WPQYhKIAJsJRIOpWu7fszVgXYaBtb2ssqsA0T84tT6jWhAqCV gkf/hvKMiPpcjPEwqs9FEW5IkZOJNJ8XB06CgV6ybJYDdjPhQL46ATVONYSyREKjmbyy m3FrDDsqANB37x8NprrwerPEv2pOVXBgyz5fBhfeZFCybJQFO0qtem2P/uH8nqWEjlOF 1wAaoY9I+VkGW+EbtWIHz6C+rNXk1bI7eim6UGy+9Q0HzS9kLWu07xyblw5M971D4K2w Lv/Q== X-Gm-Message-State: APzg51DVz7IFHtCkN43FRq/CcTEC0TuP32hwM0FkNw93vUecjhpMPk+S LiFuvtjgQjT2oDVXuuRMbZCmfLve X-Google-Smtp-Source: ANB0VdaCnwSta+Bth5yzHMi9fTAu/AHPdxS5x2X2yAmRgMwTNkrQIyWfvkTBBVkE6iMeERkecOuBcg== X-Received: by 2002:a1c:a401:: with SMTP id n1-v6mr128247wme.125.1534870984263; Tue, 21 Aug 2018 10:03:04 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.02 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:03 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:33 +0200 Message-Id: <1534870966-9287-2-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::243 Subject: [Qemu-devel] [PULL 01/74] tests: virtio: separate ccw tests from libqos 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: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Because qtest does not support s390 channel I/O, s390 only performs smoke tests on those few devices that do not have any functional tests. Therefore, every time we add functional tests for a virtio device, the choice is between removing those tests from the s390 suite (so that s390 actually _loses_ coverage) or sprinkling the test with architecture checks. This patch simply creates a ccw-specific test that only performs smoke tests on all virtio-ccw devices. If channel I/O support is ever added to qtest and libqos, then this file can go away. In the meanwhile, it simplifies maintenance and makes sure that all virtio devices are tested. Acked-by: Cornelia Huck Reviewed-by: Thomas Huth Signed-off-by: Paolo Bonzini --- tests/Makefile.include | 5 +-- tests/virtio-ccw-test.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 tests/virtio-ccw-test.c diff --git a/tests/Makefile.include b/tests/Makefile.include index 760a0f1..29e70f4 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -402,9 +402,7 @@ check-qtest-s390x-$(CONFIG_SLIRP) += tests/test-netfilter$(EXESUF) check-qtest-s390x-$(CONFIG_POSIX) += tests/test-filter-mirror$(EXESUF) check-qtest-s390x-$(CONFIG_POSIX) += tests/test-filter-redirector$(EXESUF) check-qtest-s390x-y += tests/drive_del-test$(EXESUF) -check-qtest-s390x-y += tests/virtio-balloon-test$(EXESUF) -check-qtest-s390x-y += tests/virtio-console-test$(EXESUF) -check-qtest-s390x-y += tests/virtio-serial-test$(EXESUF) +check-qtest-s390x-y += tests/virtio-ccw-test$(EXESUF) check-qtest-s390x-y += tests/cpu-plug-test$(EXESUF) check-qtest-generic-y += tests/machine-none-test$(EXESUF) @@ -809,6 +807,7 @@ tests/wdt_ib700-test$(EXESUF): tests/wdt_ib700-test.o tests/tco-test$(EXESUF): tests/tco-test.o $(libqos-pc-obj-y) tests/virtio-balloon-test$(EXESUF): tests/virtio-balloon-test.o $(libqos-virtio-obj-y) tests/virtio-blk-test$(EXESUF): tests/virtio-blk-test.o $(libqos-virtio-obj-y) +tests/virtio-ccw-test$(EXESUF): tests/virtio-ccw-test.o tests/virtio-net-test$(EXESUF): tests/virtio-net-test.o $(libqos-pc-obj-y) $(libqos-virtio-obj-y) tests/virtio-rng-test$(EXESUF): tests/virtio-rng-test.o $(libqos-pc-obj-y) tests/virtio-scsi-test$(EXESUF): tests/virtio-scsi-test.o $(libqos-virtio-obj-y) diff --git a/tests/virtio-ccw-test.c b/tests/virtio-ccw-test.c new file mode 100644 index 0000000..48c714d --- /dev/null +++ b/tests/virtio-ccw-test.c @@ -0,0 +1,110 @@ +/* + * QTest testcase for VirtIO CCW + * + * Copyright (c) 2014 SUSE LINUX Products GmbH + * Copyright (c) 2018 Red Hat, Inc. + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +/* Until we have a full libqos implementation of virtio-ccw (which requires + * also to add support for I/O channels to qtest), we can only do simple + * tests that initialize the devices. + */ + +#include "qemu/osdep.h" +#include "libqtest.h" +#include "libqos/virtio.h" + +static void virtio_balloon_nop(void) +{ + global_qtest = qtest_initf("-device virtio-balloon-ccw"); + qtest_end(); +} + +static void virtconsole_nop(void) +{ + global_qtest = qtest_initf("-device virtio-serial-ccw,id=vser0 " + "-device virtconsole,bus=vser0.0"); + qtest_end(); +} + +static void virtserialport_nop(void) +{ + global_qtest = qtest_initf("-device virtio-serial-ccw,id=vser0 " + "-device virtserialport,bus=vser0.0"); + qtest_end(); +} + +static void virtio_serial_nop(void) +{ + global_qtest = qtest_initf("-device virtio-serial-ccw"); + qtest_end(); +} + +static void virtio_serial_hotplug(void) +{ + global_qtest = qtest_initf("-device virtio-serial-ccw"); + qtest_qmp_device_add("virtserialport", "hp-port", "{}"); + qtest_qmp_device_del("hp-port"); + qtest_end(); +} + +static void virtio_blk_nop(void) +{ + global_qtest = qtest_initf("-drive if=none,id=drv0,file=null-co://,format=raw " + "-device virtio-blk-ccw,drive=drv0"); + qtest_end(); +} + +static void virtio_net_nop(void) +{ + global_qtest = qtest_initf("-device virtio-net-ccw"); + qtest_end(); +} + +static void virtio_rng_nop(void) +{ + global_qtest = qtest_initf("-device virtio-rng-ccw"); + qtest_end(); +} + +static void virtio_scsi_nop(void) +{ + global_qtest = qtest_initf("-device virtio-scsi-ccw"); + qtest_end(); +} + +static void virtio_scsi_hotplug(void) +{ + global_qtest = qtest_initf("-drive if=none,id=drv0,file=null-co://,format=raw " + "-drive if=none,id=drv1,file=null-co://,format=raw " + "-device virtio-scsi-ccw " + "-device scsi-hd,drive=drv0"); + qtest_qmp_device_add("scsi-hd", "scsihd", "{'drive': 'drv1'}"); + qtest_qmp_device_del("scsihd"); + + qtest_end(); +} + +int main(int argc, char **argv) +{ + int ret; + + g_test_init(&argc, &argv, NULL); + qtest_add_func("/virtio/balloon/nop", virtio_balloon_nop); + qtest_add_func("/virtio/console/nop", virtconsole_nop); + qtest_add_func("/virtio/serialport/nop", virtserialport_nop); + qtest_add_func("/virtio/serial/nop", virtio_serial_nop); + qtest_add_func("/virtio/serial/hotplug", virtio_serial_hotplug); + qtest_add_func("/virtio/block/nop", virtio_blk_nop); + qtest_add_func("/virtio/net/nop", virtio_net_nop); + qtest_add_func("/virtio/rng/nop", virtio_rng_nop); + qtest_add_func("/virtio/scsi/nop", virtio_scsi_nop); + qtest_add_func("/virtio/scsi/hotplug", virtio_scsi_hotplug); + + ret = g_test_run(); + + return ret; +} From patchwork Tue Aug 21 17:01:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960571 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=redhat.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="TT2UivC9"; 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 41vxvG0JqWz9s4v for ; Wed, 22 Aug 2018 03:07:54 +1000 (AEST) Received: from localhost ([::1]:54961 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA8F-0005dT-Gt for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:07:51 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60893) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA3x-0001Ar-AO for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA3n-0005ch-4i for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:20 -0400 Received: from mail-wm0-x233.google.com ([2a00:1450:400c:c09::233]:50856) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA3m-0005Ns-3Q for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:14 -0400 Received: by mail-wm0-x233.google.com with SMTP id s12-v6so3658426wmc.0 for ; Tue, 21 Aug 2018 10:03:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=f6diwdmJKQzdT+eACtA57HS4+cDl9rBxjuVub2W+2N4=; b=TT2UivC9jEwQT/9Gy+F5WPHIrs6NRVB33hUsxMnWPcPt4hcFJFJYtacGsbnFyMBbu6 8VRM0S4mTW9ydfgjCSusXgsQVmmI3amp/bS1iAs03TLp60yxzJS7HaGRNYCupVdbloq0 drk0iV3TPUH70nEbOBicQ/hDHbihn9c7XG5f0EUYwhWpb5f1qUIgZYELL7rC6+g6sjSM 6TqciwxY1/IOnvOkQyM9zeI2N11RcHz+ScMSTOfpFPfn5qJ7dGcNulvey1a4S3AZIhXW ahhfL6hYteebNVbHDGoc/4Cc2Wkr47WLUFeO+3sXqMOfNsGs4tMEEuJC8zVAOXVNP3QY gyrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=f6diwdmJKQzdT+eACtA57HS4+cDl9rBxjuVub2W+2N4=; b=I7CGwuaugXYtjA0qQZXuEnyB9aH1yb9LcqOXXODsshLIuegcAmSWotyGe38HzSnnIV ST3uyfUwdU0E1qom3shOeebjp2hQ+NGQzzCQSaql5ZjFSYNSneYK8SoyLBw66i7LXJuB dPlaYvmkhUU5OkqRIxauWwRotO4kOBc0WzPtpzmMqdQH++JtDSvH1qaMz+YCBV5mI0Cz YmrBTzLQ5/Z7A7rzENFCUE53h0hp1J6+vojSzIy0HAfix7FSQn0DO0cmPEmizw2PIz6T Hib9iTKQcT2qb3zYhL0/5V+ZFATeosVD0EdGNjG0dAN4Ese/lrAf+psxgyoRwZA5Yp6z zqAg== X-Gm-Message-State: APzg51BCjgHgEmASZ3p6r5kFUv2PI5vop7IIPBTYc0jK0JxBZrjt1HC6 ZRRqLjxtiyNDXX450zomOLzEUQxL X-Google-Smtp-Source: ANB0VdbbtdB6RThUn7WOW1pwOx1rkc9Dn9LbicUvjD1fQDwBKAsyodJsajoqKcTCLsfzwLtAKZbiAw== X-Received: by 2002:a1c:9b43:: with SMTP id d64-v6mr122587wme.109.1534870985595; Tue, 21 Aug 2018 10:03:05 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:04 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:34 +0200 Message-Id: <1534870966-9287-3-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::233 Subject: [Qemu-devel] [PULL 02/74] scsi: mptsas: Mark as storage device 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: Guenter Roeck Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Guenter Roeck mptsas1068 is currently listed as uncategorized device. Mark it as storage device. Signed-off-by: Guenter Roeck Message-Id: <1533076133-22745-1-git-send-email-linux@roeck-us.net> Reviewed-by: Fam Zheng Signed-off-by: Paolo Bonzini --- hw/scsi/mptsas.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/scsi/mptsas.c b/hw/scsi/mptsas.c index 4176e87..929404f 100644 --- a/hw/scsi/mptsas.c +++ b/hw/scsi/mptsas.c @@ -1431,6 +1431,7 @@ static void mptsas1068_class_init(ObjectClass *oc, void *data) dc->reset = mptsas_reset; dc->vmsd = &vmstate_mptsas; dc->desc = "LSI SAS 1068"; + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); } static const TypeInfo mptsas_info = { From patchwork Tue Aug 21 17:01:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960565 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=redhat.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="iaYyz+wU"; 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 41vxq52kNWz9s78 for ; Wed, 22 Aug 2018 03:04:17 +1000 (AEST) Received: from localhost ([::1]:54943 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4l-0001II-2X for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:04:15 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60978) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA3z-0001CQ-JR for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA3o-0005gs-JU for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:21 -0400 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]:51603) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA3n-0005PF-H1 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:15 -0400 Received: by mail-wm0-x243.google.com with SMTP id y2-v6so3642512wma.1 for ; Tue, 21 Aug 2018 10:03:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:subject:date:message-id:in-reply-to:references; bh=Glxe9Yp7P9y8GjB52CI8XZtr7/eFOb4UZdmOC2+vFbQ=; b=iaYyz+wUbqezLt1XusPoNAHqQXPIKAl44FmSAVtAG1IlLJkAFM7j9Pqd+0/sIcxXvj e8G6MmHhafBDANQbW6GByC9YMkGq7btMPUEBtWvIGCdFcky9/0XemOiyyFVzfAtMkzn7 fFWF8IsWL/ScPrgWy0XNHzwUiPN7Re9E3/+wZahoYyVB4cLE8xvkmYI+2FV18/rCaSpf gTiBFdbq3aUdFXTF7g53dgNDeZmFQ1koLPhRgjHNq8j4Ud6T9sNupYmKanxGNMxfNQdM +kirHrL/SgwX7ITuXQ4gmS7ZO+dzUooC0iFd8JK7Gz9OTBD9qpyOLta2d0kzjDJhimph QJXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references; bh=Glxe9Yp7P9y8GjB52CI8XZtr7/eFOb4UZdmOC2+vFbQ=; b=YTDo8PChe+y5pJPVgYkLamWbC8UwMrb9/ABgcKPzgGj86XjiOEX+tsPDirTSfHUhwI 1xdyTJGOwBvU3APfumhAbSUV5yyxGEccPBTFvWzef+F0nIbR2usGJE5AGmM7S1xFNxcE wUTQ6fJq1QS2dUDHH+Iu+U52J1KatT7JSe0HrH8Jfs9AdhhiYXe72phloheqVpJzFRNC TJib4oY9+sbLNgfCc48zWBUbdmpZUOmAI0uKA3FR05aCX836k1k6fUqH1f8NPkZiXycF VmN5Cy76YpQ/w9TtjA4n2bdrHConNZvBbOjweAEO9sBLBwtj2R+gfyWPOQNm4JcfIiWc bJuw== X-Gm-Message-State: APzg51BhW2LoC3gw9SEAG1mBhKIdmcJ9WUUz0AX9yLqE64+BPUUaW09V rcZfd0Xm+iWTUm2iFUlkf4JDjAsU X-Google-Smtp-Source: ANB0VdYnlXnrIRSpaEUYFPJkAmNDP4iTiiJEwCzY6H/giHRi+/lYMixizwMpJtn/1W1bNuuTklGkMQ== X-Received: by 2002:a1c:8893:: with SMTP id k141-v6mr162484wmd.36.1534870986651; Tue, 21 Aug 2018 10:03:06 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.05 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:06 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:35 +0200 Message-Id: <1534870966-9287-4-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::243 Subject: [Qemu-devel] [PULL 03/74] es1370: simplify MemoryRegionOps 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: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Use the automatic subregister extraction from the memory API, and avoid that Coverity complains about missing fallthrough comments. Signed-off-by: Paolo Bonzini --- hw/audio/es1370.c | 235 ++++++------------------------------------------------ 1 file changed, 25 insertions(+), 210 deletions(-) diff --git a/hw/audio/es1370.c b/hw/audio/es1370.c index 59cf252..dd75c9e 100644 --- a/hw/audio/es1370.c +++ b/hw/audio/es1370.c @@ -474,82 +474,7 @@ static inline uint32_t es1370_fixup (ES1370State *s, uint32_t addr) return addr; } -static void es1370_writeb(void *opaque, uint32_t addr, uint32_t val) -{ - ES1370State *s = opaque; - uint32_t shift, mask; - - addr = es1370_fixup (s, addr); - - switch (addr) { - case ES1370_REG_CONTROL: - case ES1370_REG_CONTROL + 1: - case ES1370_REG_CONTROL + 2: - case ES1370_REG_CONTROL + 3: - shift = (addr - ES1370_REG_CONTROL) << 3; - mask = 0xff << shift; - val = (s->ctl & ~mask) | ((val & 0xff) << shift); - es1370_update_voices (s, val, s->sctl); - print_ctl (val); - break; - case ES1370_REG_MEMPAGE: - s->mempage = val; - break; - case ES1370_REG_SERIAL_CONTROL: - case ES1370_REG_SERIAL_CONTROL + 1: - case ES1370_REG_SERIAL_CONTROL + 2: - case ES1370_REG_SERIAL_CONTROL + 3: - shift = (addr - ES1370_REG_SERIAL_CONTROL) << 3; - mask = 0xff << shift; - val = (s->sctl & ~mask) | ((val & 0xff) << shift); - es1370_maybe_lower_irq (s, val); - es1370_update_voices (s, s->ctl, val); - print_sctl (val); - break; - default: - lwarn ("writeb %#x <- %#x\n", addr, val); - break; - } -} - -static void es1370_writew(void *opaque, uint32_t addr, uint32_t val) -{ - ES1370State *s = opaque; - addr = es1370_fixup (s, addr); - uint32_t shift, mask; - struct chan *d = &s->chan[0]; - - switch (addr) { - case ES1370_REG_CODEC: - dolog ("ignored codec write address %#x, data %#x\n", - (val >> 8) & 0xff, val & 0xff); - s->codec = val; - break; - - case ES1370_REG_CONTROL: - case ES1370_REG_CONTROL + 2: - shift = (addr != ES1370_REG_CONTROL) << 4; - mask = 0xffff << shift; - val = (s->ctl & ~mask) | ((val & 0xffff) << shift); - es1370_update_voices (s, val, s->sctl); - print_ctl (val); - break; - - case ES1370_REG_ADC_SCOUNT: - d++; - case ES1370_REG_DAC2_SCOUNT: - d++; - case ES1370_REG_DAC1_SCOUNT: - d->scount = (d->scount & ~0xffff) | (val & 0xffff); - break; - - default: - lwarn ("writew %#x <- %#x\n", addr, val); - break; - } -} - -static void es1370_writel(void *opaque, uint32_t addr, uint32_t val) +static void es1370_write(void *opaque, hwaddr addr, uint64_t val, unsigned size) { ES1370State *s = opaque; struct chan *d = &s->chan[0]; @@ -572,21 +497,19 @@ static void es1370_writel(void *opaque, uint32_t addr, uint32_t val) print_sctl (val); break; - case ES1370_REG_ADC_SCOUNT: - d++; - case ES1370_REG_DAC2_SCOUNT: - d++; case ES1370_REG_DAC1_SCOUNT: + case ES1370_REG_DAC2_SCOUNT: + case ES1370_REG_ADC_SCOUNT: + d += (addr - ES1370_REG_DAC1_SCOUNT) >> 2; d->scount = (val & 0xffff) | (d->scount & ~0xffff); ldebug ("chan %td CURR_SAMP_CT %d, SAMP_CT %d\n", d - &s->chan[0], val >> 16, (val & 0xffff)); break; - case ES1370_REG_ADC_FRAMEADR: - d++; - case ES1370_REG_DAC2_FRAMEADR: - d++; case ES1370_REG_DAC1_FRAMEADR: + case ES1370_REG_DAC2_FRAMEADR: + case ES1370_REG_ADC_FRAMEADR: + d += (addr - ES1370_REG_DAC1_FRAMEADR) >> 3; d->frame_addr = val; ldebug ("chan %td frame address %#x\n", d - &s->chan[0], val); break; @@ -598,11 +521,10 @@ static void es1370_writel(void *opaque, uint32_t addr, uint32_t val) lwarn ("writing to phantom frame address %#x\n", val); break; - case ES1370_REG_ADC_FRAMECNT: - d++; - case ES1370_REG_DAC2_FRAMECNT: - d++; case ES1370_REG_DAC1_FRAMECNT: + case ES1370_REG_DAC2_FRAMECNT: + case ES1370_REG_ADC_FRAMECNT: + d += (addr - ES1370_REG_DAC1_FRAMECNT) >> 3; d->frame_cnt = val; d->leftover = 0; ldebug ("chan %td frame count %d, buffer size %d\n", @@ -615,84 +537,7 @@ static void es1370_writel(void *opaque, uint32_t addr, uint32_t val) } } -static uint32_t es1370_readb(void *opaque, uint32_t addr) -{ - ES1370State *s = opaque; - uint32_t val; - - addr = es1370_fixup (s, addr); - - switch (addr) { - case 0x1b: /* Legacy */ - lwarn ("Attempt to read from legacy register\n"); - val = 5; - break; - case ES1370_REG_MEMPAGE: - val = s->mempage; - break; - case ES1370_REG_CONTROL + 0: - case ES1370_REG_CONTROL + 1: - case ES1370_REG_CONTROL + 2: - case ES1370_REG_CONTROL + 3: - val = s->ctl >> ((addr - ES1370_REG_CONTROL) << 3); - break; - case ES1370_REG_STATUS + 0: - case ES1370_REG_STATUS + 1: - case ES1370_REG_STATUS + 2: - case ES1370_REG_STATUS + 3: - val = s->status >> ((addr - ES1370_REG_STATUS) << 3); - break; - default: - val = ~0; - lwarn ("readb %#x -> %#x\n", addr, val); - break; - } - return val; -} - -static uint32_t es1370_readw(void *opaque, uint32_t addr) -{ - ES1370State *s = opaque; - struct chan *d = &s->chan[0]; - uint32_t val; - - addr = es1370_fixup (s, addr); - - switch (addr) { - case ES1370_REG_ADC_SCOUNT + 2: - d++; - case ES1370_REG_DAC2_SCOUNT + 2: - d++; - case ES1370_REG_DAC1_SCOUNT + 2: - val = d->scount >> 16; - break; - - case ES1370_REG_ADC_FRAMECNT: - d++; - case ES1370_REG_DAC2_FRAMECNT: - d++; - case ES1370_REG_DAC1_FRAMECNT: - val = d->frame_cnt & 0xffff; - break; - - case ES1370_REG_ADC_FRAMECNT + 2: - d++; - case ES1370_REG_DAC2_FRAMECNT + 2: - d++; - case ES1370_REG_DAC1_FRAMECNT + 2: - val = d->frame_cnt >> 16; - break; - - default: - val = ~0; - lwarn ("readw %#x -> %#x\n", addr, val); - break; - } - - return val; -} - -static uint32_t es1370_readl(void *opaque, uint32_t addr) +static uint64_t es1370_read(void *opaque, hwaddr addr, unsigned size) { ES1370State *s = opaque; uint32_t val; @@ -717,11 +562,10 @@ static uint32_t es1370_readl(void *opaque, uint32_t addr) val = s->sctl; break; - case ES1370_REG_ADC_SCOUNT: - d++; - case ES1370_REG_DAC2_SCOUNT: - d++; case ES1370_REG_DAC1_SCOUNT: + case ES1370_REG_DAC2_SCOUNT: + case ES1370_REG_ADC_SCOUNT: + d += (addr - ES1370_REG_DAC1_SCOUNT) >> 2; val = d->scount; #ifdef DEBUG_ES1370 { @@ -735,11 +579,10 @@ static uint32_t es1370_readl(void *opaque, uint32_t addr) #endif break; - case ES1370_REG_ADC_FRAMECNT: - d++; - case ES1370_REG_DAC2_FRAMECNT: - d++; case ES1370_REG_DAC1_FRAMECNT: + case ES1370_REG_DAC2_FRAMECNT: + case ES1370_REG_ADC_FRAMECNT: + d += (addr - ES1370_REG_DAC1_FRAMECNT) >> 3; val = d->frame_cnt; #ifdef DEBUG_ES1370 { @@ -753,11 +596,10 @@ static uint32_t es1370_readl(void *opaque, uint32_t addr) #endif break; - case ES1370_REG_ADC_FRAMEADR: - d++; - case ES1370_REG_DAC2_FRAMEADR: - d++; case ES1370_REG_DAC1_FRAMEADR: + case ES1370_REG_DAC2_FRAMEADR: + case ES1370_REG_ADC_FRAMEADR: + d += (addr - ES1370_REG_DAC1_FRAMEADR) >> 3; val = d->frame_addr; break; @@ -908,44 +750,17 @@ static void es1370_adc_callback (void *opaque, int avail) es1370_run_channel (s, ADC_CHANNEL, avail); } -static uint64_t es1370_read(void *opaque, hwaddr addr, - unsigned size) -{ - switch (size) { - case 1: - return es1370_readb(opaque, addr); - case 2: - return es1370_readw(opaque, addr); - case 4: - return es1370_readl(opaque, addr); - default: - return -1; - } -} - -static void es1370_write(void *opaque, hwaddr addr, uint64_t val, - unsigned size) -{ - switch (size) { - case 1: - es1370_writeb(opaque, addr, val); - break; - case 2: - es1370_writew(opaque, addr, val); - break; - case 4: - es1370_writel(opaque, addr, val); - break; - } -} - static const MemoryRegionOps es1370_io_ops = { .read = es1370_read, .write = es1370_write, - .impl = { + .valid = { .min_access_size = 1, .max_access_size = 4, }, + .impl = { + .min_access_size = 4, + .max_access_size = 4, + }, .endianness = DEVICE_LITTLE_ENDIAN, }; From patchwork Tue Aug 21 17:01:36 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960569 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=redhat.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="npgT3TKq"; 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 41vxv45vtPz9s4v for ; Wed, 22 Aug 2018 03:07:44 +1000 (AEST) Received: from localhost ([::1]:54958 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA86-0005YR-AN for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:07:42 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60886) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA3x-0001Am-8i for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA3m-0005aG-51 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:20 -0400 Received: from mail-wm0-x22e.google.com ([2a00:1450:400c:c09::22e]:51285) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA3j-0005Qk-FL for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:12 -0400 Received: by mail-wm0-x22e.google.com with SMTP id y2-v6so3642563wma.1 for ; Tue, 21 Aug 2018 10:03:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:subject:date:message-id:in-reply-to:references; bh=GnIttNtuwHgSMkeLS8/9Lc2ZgcBGrSeLSbH5HgFZqWQ=; b=npgT3TKqsnRg8MEduVSYusLqRIkDVjrEY1Xhw0H482JErcli3aTLHX5KYc3iGvIwqQ WLcZmgsaCBaKCyP2SK0IVf59PuwZHzTWHI7Z10xEuJOQkWr0dVihr5L7NtT6J+IT1dBV We9xrGccqEiYaazKuyxh7UyEv5Gg5czmlxufFB82D+ABkF7jQEAIsFLsisCFmEo7fSTW wWuZyadEDq942HF9+oNsYloqGkv7vGoaIkUdW2CC6u5qXs5aLKYJH5FgXojun4hVIIxR 9Rie4KJ9WeymlD+fYRyAcp9HOX0SV1OZzQ3tA4OYcvRDCg+FgQuy5G1oxMuOM9BC6LlP CrKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references; bh=GnIttNtuwHgSMkeLS8/9Lc2ZgcBGrSeLSbH5HgFZqWQ=; b=bIg1pQD99mw5PDz91a7SKOtOfeiVLdXcuhQK/ARckjCm3IxDIieo0cOk/Uwlrn3ENX uBm5DdIhWt3McVjv/YFEZKoMmsnoZIdZ5BbICffm0uRzlnSOj6PZBCjSK6jQJY+/oQd6 YkVzruOLvmYhwzuVKAr8XBsc/erNq8D1JotAiATGWkIGERDzjVmsJp7VjqqrJOnZUJLD tcVmLWaNIr72ifLWibKrKtc+lVyYNft1MAOnQEQmUsty6b4tWQzcC6XLZnf7rVgU7UnW /SrEk5JVSLEG/94xm2Os9n1WjHJKwKX6oLZ/ZJrKJQVJOdYIP9NklScY0sm9pNvbZRzK KQIg== X-Gm-Message-State: APzg51BUyrL2K+r+NFoLKlRumMp0ctHx+jRu0Vsv3Ks+9b+biQZAxER6 HvZxNzwvaImZbiCaP3CzOwPmrEH2 X-Google-Smtp-Source: ANB0VdZZYAPT57KHtbhtZ2fdUL2lfHZcUJlGhuzXMOhg9f7zpxsfAIzxlKYnBT/8BGo0FhFH/p02wA== X-Received: by 2002:a1c:9550:: with SMTP id x77-v6mr110304wmd.135.1534870987701; Tue, 21 Aug 2018 10:03:07 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.06 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:07 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:36 +0200 Message-Id: <1534870966-9287-5-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::22e Subject: [Qemu-devel] [PULL 04/74] fix "Missing break in switch" coverity reports 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: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Many of these are marked as "intentional/fix required" because they just need adding a fall through comment. This is exactly what this patch does, except for target/mips/translate.c where it is easier to duplicate the code, and hw/audio/sb16.c where I consulted the DOSBox sources and decide to just remove the LOG_UNIMP before the fallthrough. Signed-off-by: Paolo Bonzini --- disas/m68k.c | 1 + hw/arm/pxa2xx.c | 2 +- hw/audio/cs4231a.c | 1 + hw/audio/gusemu_hal.c | 1 + hw/audio/sb16.c | 11 ++++++++--- hw/display/cg3.c | 1 + hw/display/cirrus_vga.c | 3 ++- hw/timer/sh_timer.c | 1 + target/arm/helper.c | 1 + target/i386/translate.c | 2 ++ 10 files changed, 19 insertions(+), 5 deletions(-) diff --git a/disas/m68k.c b/disas/m68k.c index a687df4..0dc8aa1 100644 --- a/disas/m68k.c +++ b/disas/m68k.c @@ -1623,6 +1623,7 @@ print_insn_arg (const char *d, case 'X': place = '8'; + /* fall through */ case 'Y': case 'Z': case 'W': diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c index b67b0ce..f598a1c 100644 --- a/hw/arm/pxa2xx.c +++ b/hw/arm/pxa2xx.c @@ -409,7 +409,7 @@ static uint64_t pxa2xx_mm_read(void *opaque, hwaddr addr, case MDCNFG ... SA1110: if ((addr & 3) == 0) return s->mm_regs[addr >> 2]; - + /* fall through */ default: printf("%s: Bad register " REG_FMT "\n", __func__, addr); break; diff --git a/hw/audio/cs4231a.c b/hw/audio/cs4231a.c index aaebec1..9089dcb 100644 --- a/hw/audio/cs4231a.c +++ b/hw/audio/cs4231a.c @@ -305,6 +305,7 @@ static void cs_reset_voices (CSState *s, uint32_t val) case 6: as.endianness = 1; + /* fall through */ case 2: as.fmt = AUD_FMT_S16; s->shift = as.nchannels; diff --git a/hw/audio/gusemu_hal.c b/hw/audio/gusemu_hal.c index 1150fc4..ae40ca3 100644 --- a/hw/audio/gusemu_hal.c +++ b/hw/audio/gusemu_hal.c @@ -261,6 +261,7 @@ void gus_write(GUSEmuState * state, int port, int size, unsigned int data) GUSregb(IRQStatReg2x6) = 0x10; GUS_irqrequest(state, state->gusirq, 1); } + /* fall through */ case 0x20D: /* SB2xCd no IRQ */ GUSregb(SB2xCd) = (uint8_t) data; break; diff --git a/hw/audio/sb16.c b/hw/audio/sb16.c index 5a4d323..c5b9bf7 100644 --- a/hw/audio/sb16.c +++ b/hw/audio/sb16.c @@ -741,10 +741,15 @@ static void complete (SB16State *s) ldebug ("set time const %d\n", s->time_const); break; - case 0x42: /* FT2 sets output freq with this, go figure */ - qemu_log_mask(LOG_UNIMP, "cmd 0x42 might not do what it think it" - " should\n"); case 0x41: + case 0x42: + /* + * 0x41 is documented as setting the output sample rate, + * and 0x42 the input sample rate, but in fact SB16 hardware + * seems to have only a single sample rate under the hood, + * and FT2 sets output freq with this (go figure). Compare: + * http://homepages.cae.wisc.edu/~brodskye/sb16doc/sb16doc.html#SamplingRate + */ s->freq = dsp_get_hilo (s); ldebug ("set freq %d\n", s->freq); break; diff --git a/hw/display/cg3.c b/hw/display/cg3.c index 6fff485..1c199ab 100644 --- a/hw/display/cg3.c +++ b/hw/display/cg3.c @@ -232,6 +232,7 @@ static void cg3_reg_write(void *opaque, hwaddr addr, uint64_t val, s->b[s->dac_index] = regval; /* Index autoincrement */ s->dac_index = (s->dac_index + 1) & 0xff; + /* fall through */ default: s->dac_state = 0; break; diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c index 7583b18..04c87c8 100644 --- a/hw/display/cirrus_vga.c +++ b/hw/display/cirrus_vga.c @@ -1426,7 +1426,8 @@ static void cirrus_vga_write_sr(CirrusVGAState * s, uint32_t val) s->vga.hw_cursor_y = (val << 3) | (s->vga.sr_index >> 5); break; case 0x07: // Extended Sequencer Mode - cirrus_update_memory_access(s); + cirrus_update_memory_access(s); + /* fall through */ case 0x08: // EEPROM Control case 0x09: // Scratch Register 0 case 0x0a: // Scratch Register 1 diff --git a/hw/timer/sh_timer.c b/hw/timer/sh_timer.c index 5f8736c..91b18ba 100644 --- a/hw/timer/sh_timer.c +++ b/hw/timer/sh_timer.c @@ -74,6 +74,7 @@ static uint32_t sh_timer_read(void *opaque, hwaddr offset) case OFFSET_TCPR: if (s->feat & TIMER_FEAT_CAPT) return s->tcpr; + /* fall through */ default: hw_error("sh_timer_read: Bad offset %x\n", (int)offset); return 0; diff --git a/target/arm/helper.c b/target/arm/helper.c index c9bce1e..1b05480 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -12331,6 +12331,7 @@ int arm_rmode_to_sf(int rmode) /* FIXME: add support for TIEAWAY and ODD */ qemu_log_mask(LOG_UNIMP, "arm: unimplemented rounding mode: %d\n", rmode); + /* fall through for now */ case FPROUNDING_TIEEVEN: default: rmode = float_round_nearest_even; diff --git a/target/i386/translate.c b/target/i386/translate.c index 07d185e..1f9d1d9 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4689,6 +4689,7 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu) case 0x82: if (CODE64(s)) goto illegal_op; + /* fall through */ case 0x80: /* GRP1 */ case 0x81: case 0x83: @@ -8292,6 +8293,7 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu) case 0x10e ... 0x10f: /* 3DNow! instructions, ignore prefixes */ s->prefix &= ~(PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA); + /* fall through */ case 0x110 ... 0x117: case 0x128 ... 0x12f: case 0x138 ... 0x13a: From patchwork Tue Aug 21 17:01:37 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960570 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=redhat.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="D7lBFf38"; 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 41vxv534bKz9s78 for ; Wed, 22 Aug 2018 03:07:45 +1000 (AEST) Received: from localhost ([::1]:54959 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA87-0005ZA-20 for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:07:43 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60888) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA3x-0001Ap-9K for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA3n-0005er-M3 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:20 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:43328) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA3m-0005S1-KG for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:15 -0400 Received: by mail-wr1-x443.google.com with SMTP id k5-v6so4942221wre.10 for ; Tue, 21 Aug 2018 10:03:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=rwpaJal/i2vXDz8uWGShysx8gH+omaNHvK14ku3kyIo=; b=D7lBFf38EpA3Z4hFVzoptO2kaq2CQW9dw7zrhJSnp6rvC9sr3QeEKwyfj3SKtivvqF wkAf6DOv4R4kPPjdi/Ubp1Bm53es1XQCD4f0wbATrRkog+YDR/xjlmScmeDQzWERJenm rrlYo8/ZiHpisBT1I0k+nRZimY9J3USxIrjX1ZPG9Pr3R6S9onZJkZaLorfbNLajiymp pEezx96WIt4aiywOYI0q+GJKqYtVYybBJ2BzKhqM5yi8csCLS/V1CGKISn0I7QIWcOQv Rje1B/TNSLg77kuIYR0ZaJzwyrKFn5kGi32Hj9mVxEJlbrWOO07Cs5JYmEP76F4+TIbS nTZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=rwpaJal/i2vXDz8uWGShysx8gH+omaNHvK14ku3kyIo=; b=YoaCARCuYI76T2CMzNZF5BlEV+H4R3P3P/KWgj7dOip13t0dKWF+sO8C388Sjso4VN I6ZnppLNOirSNk8B0QJUXNXPHAzIt6QdKTv6AhsbU2X/QJV99SASvRNDrYs2aVnWmdWB XCjBxtdykTm+T37W8u/zHAtOn/qOvKoncAsuUAxnFPYjy5SMCEVaRb5ZtLBggQKYQZq+ SGvfTc2m7IijbisLG5AyVmaDqatmxEIOJeHLGugToePnkfYL72ADPpXEOGMleDu8UJLf kmrfNSawf2b6SYwZUj6Udf5TjYx6MYq30+m16AKCQ7nmL+cHuxX968wU5wUVQIQJej4h HaUg== X-Gm-Message-State: APzg51CaLIuxYQSWzenJFDq0hSk1Zen55+tWJfEj3CaA7IYrYdTzUEuv Yl11G09Ztl62Uw2FxTfhhL5FgIZN X-Google-Smtp-Source: ANB0VdaxDcf9jHbHNBGI2QIl99A7mw6QmDGO8U9Xa5OgNksEu7w26gYoCTqQ8wArMJqnV9QUKIseTA== X-Received: by 2002:adf:ab0b:: with SMTP id q11-v6mr9074297wrc.239.1534870988973; Tue, 21 Aug 2018 10:03:08 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:08 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:37 +0200 Message-Id: <1534870966-9287-6-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::443 Subject: [Qemu-devel] [PULL 05/74] checkpatch: fix filename detection when using -f 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: Joe Perches , Andrew Morton , Linus Torvalds Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Fix $realfile filename when using -f/--file to not remove first level directory as if the filename was used in a -P1 patch. Only strip the first level directory (typically a or b) for P1 patches. Signed-off-by: Joe Perches Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds (extracted from Linux commit 2b7ab45395dc4d91ef30985f76d90a8f28f58c27) Signed-off-by: Paolo Bonzini --- scripts/checkpatch.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index 42e1c50..0553634 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl @@ -1367,10 +1367,10 @@ sub process { # extract the filename as it passes if ($line =~ /^diff --git.*?(\S+)$/) { $realfile = $1; - $realfile =~ s@^([^/]*)/@@; + $realfile =~ s@^([^/]*)/@@ if (!$file); } elsif ($line =~ /^\+\+\+\s+(\S+)/) { $realfile = $1; - $realfile =~ s@^([^/]*)/@@; + $realfile =~ s@^([^/]*)/@@ if (!$file); $p1_prefix = $1; if (!$file && $tree && $p1_prefix ne '' && From patchwork Tue Aug 21 17:01:38 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960579 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=redhat.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="NrY/A2KJ"; 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 41vy1w3cR2z9s5c for ; Wed, 22 Aug 2018 03:13:39 +1000 (AEST) Received: from localhost ([::1]:54988 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsADp-0002MV-Fu for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:13:37 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60894) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA3x-0001As-9u for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA3m-0005cB-Rf for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:20 -0400 Received: from mail-wm0-x22f.google.com ([2a00:1450:400c:c09::22f]:40652) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA3l-0005Sv-SO for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:14 -0400 Received: by mail-wm0-x22f.google.com with SMTP id y9-v6so3496323wma.5 for ; Tue, 21 Aug 2018 10:03:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=iTs5bCxYBseQspACxznOAg1wMxxU4roclteF5IHwou4=; b=NrY/A2KJKpJuEtPDpitE5iH/VxAyqE3aPwRGia2bV+PCtHz7riWdcjrj/8PlGmrBmA /JBHIP7LZ247fgHi665vcKsY9opCEJldHzgXq1iBNFb+v71h/fMnTo8SquvFKLXiY/HK u5Jpj2lGYZAvGfFCstCWf3/EhisFXBRNMFbuZ+tQGnir52xCIJlQ7iL0O8dCfhxirtbw X4A90WIRb4d0buVYGBOZSJmi8Yn4kk86iTpVxH9fF8F3FkiB94/PH815L8X8IpLvwOrB tdmfVZEJzGThvWMrcnQrTMCQEZiNAfHlqL63LYxtbn1T1yzS12b5EMvOm8E7vruhwRNA 8v2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=iTs5bCxYBseQspACxznOAg1wMxxU4roclteF5IHwou4=; b=OXsQH2WB8aCzvAA54elXstJ7bGZ6EOdgDhBqNrKWAKXItgfZHyzDX/TOhW8Omn0ctx gOxZEqY0RFE8c8En3SzFj8LiWPk0zqZZ0raCUX1SSukbXL3Io3RxNzgMd6JHJx3Ken+c M0OmCvifN8YWJ2vxSfFA688Du62gmbfvf1Qcwd90ne4b27s0zov8OqitgzjIprmbjALO yvWuIpu1g/TG9Vbe77SJTlR0JTL2jaUo+9O5KGoucW8LWgXqsOVdOaoBOg/vxKzLyZXF Cz18yYLO+evdVymKhFEN5ajxyKlzNAQpfo/CFnxO+XVQ3EC/bEBGOngjACrbsnhnTkNe KyVQ== X-Gm-Message-State: APzg51CMbXu+7L2/MGNo/3XXgUX9eKjeq0oAZ+UbE3UdF8/2MHXU0Wef rMmVIeojzsLFd47wms7WH2sitzjh X-Google-Smtp-Source: ANB0VdYSzpxjb6/QUjB8ZIUjYp9GV3NQiWvi1LylTHp/c9a872/4sfomt+uRHCYJycwSDJ3T7xecXg== X-Received: by 2002:a1c:385:: with SMTP id 127-v6mr154154wmd.92.1534870989911; Tue, 21 Aug 2018 10:03:09 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:09 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:38 +0200 Message-Id: <1534870966-9287-7-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::22f Subject: [Qemu-devel] [PULL 06/74] qemu-pr-helper: Fix build on CentOS 7 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: Murilo Opsfelder Araujo Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Murilo Opsfelder Araujo After commit b3f1c8c413bc83e4a2cc7a63e4eddf9fe6449052 "qemu-pr-helper: use new libmultipath API", QEMU started using new libmultipath API, which is not available on CentOS 7.x. This fixes that by probing the new libmultipath API in configure. If it fails, then try probing the old API. If it fails, then consider libmultipath not available. With this, configure script defines CONFIG_MPATH_NEW_API that is used in scsi/qemu-pr-helper.c to use the new libmultipath API. Fixes: b3f1c8c413bc83e4a2cc7a63e4eddf9fe6449052 BugLink: https://bugs.launchpad.net/qemu/+bug/1786343 Signed-off-by: Murilo Opsfelder Araujo Message-Id: <20180810141116.24016-1-muriloo@linux.ibm.com> Signed-off-by: Paolo Bonzini --- configure | 24 +++++++++++++++++++++++- scsi/qemu-pr-helper.c | 4 ++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/configure b/configure index e7bddc0..af0c149 100755 --- a/configure +++ b/configure @@ -3612,6 +3612,7 @@ fi # libmpathpersist probe if test "$mpath" != "no" ; then + # probe for the new API cat > $TMPC < #include @@ -3633,8 +3634,26 @@ int main(void) { EOF if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then mpathpersist=yes + mpathpersist_new_api=yes else - mpathpersist=no + # probe for the old API + cat > $TMPC < +#include +unsigned mpath_mx_alloc_len = 1024; +int logsink; +int main(void) { + struct udev *udev = udev_new(); + mpath_lib_init(udev); + return 0; +} +EOF + if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then + mpathpersist=yes + mpathpersist_new_api=no + else + mpathpersist=no + fi fi else mpathpersist=no @@ -6495,6 +6514,9 @@ if test "$virtfs" = "yes" ; then fi if test "$mpath" = "yes" ; then echo "CONFIG_MPATH=y" >> $config_host_mak + if test "$mpathpersist_new_api" = "yes"; then + echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak + fi fi if test "$vhost_scsi" = "yes" ; then echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak diff --git a/scsi/qemu-pr-helper.c b/scsi/qemu-pr-helper.c index 1528a71..ed037aa 100644 --- a/scsi/qemu-pr-helper.c +++ b/scsi/qemu-pr-helper.c @@ -301,7 +301,11 @@ void put_multipath_config(struct config *conf) static void multipath_pr_init(void) { udev = udev_new(); +#ifdef CONFIG_MPATH_NEW_API multipath_conf = mpath_lib_init(); +#else + mpath_lib_init(udev); +#endif } static int is_mpath(int fd) From patchwork Tue Aug 21 17:01:39 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960584 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=redhat.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="NrMwn9hg"; 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 41vy5B0dBbz9s5c for ; Wed, 22 Aug 2018 03:16:28 +1000 (AEST) Received: from localhost ([::1]:55005 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAGX-0004f1-Rv for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:16:25 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:32811) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA43-0001Jk-Gh for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA3n-0005e9-GQ for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:23 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:44463) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA3m-0005Ul-6g for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:14 -0400 Received: by mail-wr1-x444.google.com with SMTP id v16-v6so2036684wro.11 for ; Tue, 21 Aug 2018 10:03:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=VnURig+0FMgysVtl+dS2UfEM+SIBpmLqt/CtVpjvdpo=; b=NrMwn9hgkd6FOeYhGqB3Uw98yoT2Q/5oI+pgdUGQHoQigowsPvM6F7RJrpCK79a6qj WSmz7Ws7I2awH4G/g2eihsLzx1HRk7McBapEaqFzjowdtBIqC76CT9dcpyf7Pi398GYv c2bR8S7IAMtuW2Y37dLSSKqkNbJaLSZpSm6Uo3poMRV6yZXAWT1ovHFyH/HgDyGC0BGa wtylGqvolOjMX5g9xP3p92BDt+jE/iAsiaBg52mg6YUixrQW4pF/9pLwYO7WbyDY0mzT g2vXJigp3VfplgS5rY733DE/e9lei9ZLZazawLz6tZDXDMPrqZceEZXkYzZTZoNyuezd 0khA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=VnURig+0FMgysVtl+dS2UfEM+SIBpmLqt/CtVpjvdpo=; b=WN4EjHK5MH68w2ybq7FEMnNZmLm1B9JCuw+sNi5eSr1oVjgbmD+BbgJidVVQH2prNh LGbAfUkLGvQVIhBtnRhgDbTq0S4hH5RA1vGL9AceXnBBz1OFMDnBnrHLDEBiF8rZKmzH LPU/AT1OodB0/VXIQ6dtvya78lhGsgv4iVWeWVCuvO+LHSnVTjOhrmOUE1qDK8Bur+O0 daMgYkFbl+IogKDBq6VWsVXTO0nBKuu9BQ8xCKCHlWat3tgtI7IsEaQHKBmBANtqyBxQ 7yifPlLJ5DlYzyfTbgggWmFi2JLMuYV1yhHSXsbllGEqa5xgprnnr2UOuS9SPJ1FPFLb vylw== X-Gm-Message-State: AOUpUlGnYBrya4VEHIiyMuP0e/Gix9nkRDuYICFQ27Q7UBNGCVOZ4rdy 25gD6MEsr/Y+XSkvgR3H6RqmnLpx X-Google-Smtp-Source: AA+uWPzex4qPC66O6b6oIBpPovqpsEQ4Viiu6x6Jq8LrbBVOFpuzKXKoSgL8Wh4qj1fuUQS22IUU8g== X-Received: by 2002:adf:c78e:: with SMTP id l14-v6mr31379684wrg.230.1534870991019; Tue, 21 Aug 2018 10:03:11 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:10 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:39 +0200 Message-Id: <1534870966-9287-8-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::444 Subject: [Qemu-devel] [PULL 07/74] chardev/char-fe: Fix typos 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: Julia Suvorova Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Julia Suvorova Fixup some typos in the comments. Signed-off-by: Julia Suvorova Message-Id: <20180813093402.10852-1-jusual@mail.ru> Reviewed-by: Peter Maydell Signed-off-by: Paolo Bonzini --- include/chardev/char-fe.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/include/chardev/char-fe.h b/include/chardev/char-fe.h index 71cd069..c67271f 100644 --- a/include/chardev/char-fe.h +++ b/include/chardev/char-fe.h @@ -113,7 +113,7 @@ void qemu_chr_fe_accept_input(CharBackend *be); /** * @qemu_chr_fe_disconnect: * - * Close a fd accpeted by character backend. + * Close a fd accepted by character backend. * Without associated Chardev, do nothing. */ void qemu_chr_fe_disconnect(CharBackend *be); @@ -122,7 +122,7 @@ void qemu_chr_fe_disconnect(CharBackend *be); * @qemu_chr_fe_wait_connected: * * Wait for characted backend to be connected, return < 0 on error or - * if no assicated Chardev. + * if no associated Chardev. */ int qemu_chr_fe_wait_connected(CharBackend *be, Error **errp); @@ -186,7 +186,7 @@ guint qemu_chr_fe_add_watch(CharBackend *be, GIOCondition cond, * @buf the data * @len the number of bytes to send * - * Returns: the number of bytes consumed (0 if no assicated Chardev) + * Returns: the number of bytes consumed (0 if no associated Chardev) */ int qemu_chr_fe_write(CharBackend *be, const uint8_t *buf, int len); @@ -201,7 +201,7 @@ int qemu_chr_fe_write(CharBackend *be, const uint8_t *buf, int len); * @buf the data * @len the number of bytes to send * - * Returns: the number of bytes consumed (0 if no assicated Chardev) + * Returns: the number of bytes consumed (0 if no associated Chardev) */ int qemu_chr_fe_write_all(CharBackend *be, const uint8_t *buf, int len); @@ -213,7 +213,7 @@ int qemu_chr_fe_write_all(CharBackend *be, const uint8_t *buf, int len); * @buf the data buffer * @len the number of bytes to read * - * Returns: the number of bytes read (0 if no assicated Chardev) + * Returns: the number of bytes read (0 if no associated Chardev) */ int qemu_chr_fe_read_all(CharBackend *be, uint8_t *buf, int len); From patchwork Tue Aug 21 17:01:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960580 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=redhat.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="V0DuQMph"; 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 41vy1y3fNmz9s5c for ; Wed, 22 Aug 2018 03:13:42 +1000 (AEST) Received: from localhost ([::1]:54989 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsADs-0002Of-4E for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:13:40 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60900) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA3x-0001Aw-Bi for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA3o-0005gk-GM for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:20 -0400 Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]:39541) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA3n-0005X4-EU for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:15 -0400 Received: by mail-wr1-x42b.google.com with SMTP id o37-v6so7596407wrf.6 for ; Tue, 21 Aug 2018 10:03:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YznMZC5Zwyg7SERydhdKXsDUZE5zkw9EUk4DrI3SHNg=; b=V0DuQMphxnqxdtWGieNBeZwVbN/EmKC4WvSapVtDKg433ZJYG40iXU6C3rJhNNq5Rh v7RHNU3tNyPNbyPYUMBRbDkH/vNsHfKbqLfyAlQ0YwDhUNZsVRYgE/lJPTyJjCT43dvz 4rwCdMm3GYS12p70CB0zKaBMunhIUNgCIEQO1i5V0o1n2BJXSxkOSIPcZuJu8cmRw+zK +uROx92CQTl8PtyM+w5ZBziA2IaznklA7wxRd2wvRWn0I5DGfILYXM1mhCW2p63m4Exz wnqOJlf7pCuAOmpSsTpJKT4SIfKNLOAKas20WtVYy+0hDWnEYoQX+2+HpwzxqTOnUDsx ahFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=YznMZC5Zwyg7SERydhdKXsDUZE5zkw9EUk4DrI3SHNg=; b=BB7aMz05U4okdMQYQmuhY1oybE3fQXpQCUiUIN/eTZzF53Qg5UGfb55XMYE7TPGuHk RU567rLAab3hT3mDbYuupY5ZNpq+ZFQRZeJEIpTehSO9kA3F8J41BvNHqjLMd1LzNkSj 8ITyLalqa/Pes7SKLBb5aCpzcOEi9G0V50siURqcS3mcAfCl6UDGBMYp56P341DaM2gH AMPHUfNjj2WL7w+CybAmmUBCDbLIlYhkGKjWMFrVwSvwePagD0SSJX9z/sI85pyCZmeA 7/BOSSEhN4PDu2Tsz/02Kbo2ljiMbZC8gA1QlqTkQ1Gp0ZwIDiT5cWeSnfSpeACvOFAS piig== X-Gm-Message-State: APzg51CNUQqu16i6I3Hvog3eVfk7ILGrUvEu+nrZLub2LTtpCJ9mR21a HEUq8czL7wylLNEoQOB/vx8p1Roq X-Google-Smtp-Source: ANB0Vdb1irJ+qpOBVsgWDaZuYv3hjb3n5d4Cz5QlAzWzHjqMvDWe2psbzDW5TlQChEZEOTzsKKtsjg== X-Received: by 2002:adf:f24e:: with SMTP id b14-v6mr4554024wrp.184.1534870992187; Tue, 21 Aug 2018 10:03:12 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:11 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:40 +0200 Message-Id: <1534870966-9287-9-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42b Subject: [Qemu-devel] [PULL 08/74] megasas: fix sglist leak 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: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau tests/cdrom-test -p /x86_64/cdrom/boot/megasas Produces the following ASAN leak. ==25700==ERROR: LeakSanitizer: detected memory leaks Direct leak of 16 byte(s) in 1 object(s) allocated from: #0 0x7f06f8faac48 in malloc (/lib64/libasan.so.5+0xeec48) #1 0x7f06f87a73c5 in g_malloc (/lib64/libglib-2.0.so.0+0x523c5) #2 0x55a729f17738 in pci_dma_sglist_init /home/elmarco/src/qq/include/hw/pci/pci.h:818 #3 0x55a729f2a706 in megasas_map_dcmd /home/elmarco/src/qq/hw/scsi/megasas.c:698 #4 0x55a729f39421 in megasas_handle_dcmd /home/elmarco/src/qq/hw/scsi/megasas.c:1574 #5 0x55a729f3f70d in megasas_handle_frame /home/elmarco/src/qq/hw/scsi/megasas.c:1955 #6 0x55a729f40939 in megasas_mmio_write /home/elmarco/src/qq/hw/scsi/megasas.c:2119 #7 0x55a729f41102 in megasas_port_write /home/elmarco/src/qq/hw/scsi/megasas.c:2170 #8 0x55a729220e60 in memory_region_write_accessor /home/elmarco/src/qq/memory.c:527 #9 0x55a7292212b3 in access_with_adjusted_size /home/elmarco/src/qq/memory.c:594 #10 0x55a72922cf70 in memory_region_dispatch_write /home/elmarco/src/qq/memory.c:1473 #11 0x55a7290f5907 in flatview_write_continue /home/elmarco/src/qq/exec.c:3255 #12 0x55a7290f5ceb in flatview_write /home/elmarco/src/qq/exec.c:3294 #13 0x55a7290f6457 in address_space_write /home/elmarco/src/qq/exec.c:3384 #14 0x55a7290f64a8 in address_space_rw /home/elmarco/src/qq/exec.c:3395 #15 0x55a72929ecb0 in kvm_handle_io /home/elmarco/src/qq/accel/kvm/kvm-all.c:1729 #16 0x55a7292a0db5 in kvm_cpu_exec /home/elmarco/src/qq/accel/kvm/kvm-all.c:1969 #17 0x55a7291c4212 in qemu_kvm_cpu_thread_fn /home/elmarco/src/qq/cpus.c:1215 #18 0x55a72a966a6c in qemu_thread_start /home/elmarco/src/qq/util/qemu-thread-posix.c:504 #19 0x7f06ed486593 in start_thread (/lib64/libpthread.so.0+0x7593) Move the qemu_sglist_destroy() from megasas_complete_command() to megasas_unmap_frame(), so map/unmap are balanced. Signed-off-by: Marc-André Lureau Message-Id: <20180814141247.32336-1-marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini Signed-off-by: Marc-André Lureau --- hw/scsi/megasas.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/scsi/megasas.c b/hw/scsi/megasas.c index ba1afa3..a56317e 100644 --- a/hw/scsi/megasas.c +++ b/hw/scsi/megasas.c @@ -464,6 +464,7 @@ static void megasas_unmap_frame(MegasasState *s, MegasasCmd *cmd) cmd->frame = NULL; cmd->pa = 0; cmd->pa_size = 0; + qemu_sglist_destroy(&cmd->qsg); clear_bit(cmd->index, s->frame_map); } @@ -580,7 +581,6 @@ static void megasas_complete_frame(MegasasState *s, uint64_t context) static void megasas_complete_command(MegasasCmd *cmd) { - qemu_sglist_destroy(&cmd->qsg); cmd->iov_size = 0; cmd->iov_offset = 0; From patchwork Tue Aug 21 17:01:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960574 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=redhat.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="gPUvoz9C"; 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 41vxyZ3sWRz9s5c for ; Wed, 22 Aug 2018 03:10:46 +1000 (AEST) Received: from localhost ([::1]:54973 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAB2-0008RS-4f for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:10:44 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60897) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA3x-0001At-Ax for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA3o-0005fl-6D for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:20 -0400 Received: from mail-wm0-x234.google.com ([2a00:1450:400c:c09::234]:40657) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA3n-0005Yp-0H for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:15 -0400 Received: by mail-wm0-x234.google.com with SMTP id y9-v6so3496460wma.5 for ; Tue, 21 Aug 2018 10:03:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:subject:date:message-id:in-reply-to:references; bh=qnxiq5fyVIQflHPwEt80k2t5MyOaa4z4+meriBxvcBI=; b=gPUvoz9CVvmEdJRlk5fl1nUuua0LOi93yru6y0TX6vzrxl5NYQdMgH/1ijGbLsSXAZ SVvvAVPb0zGzMYharRRIzaZuZZAgEu0aGWtEDpz1JwEg1Gi05irCdaaTNbCL80woNx3Q NEwkALzvGeNlJh3dq4bhxtWHrLdbwqEvJVF0e2zyPEshGaxC5F57FBRj7VMZb4EMpszp 7eWxYcPUpefpsOGKeDWazpDTFLufn39owKf9BEUi2uk5TaqcXdJrHrBFODl6WA6t5Usp EawoBWMHsmcR7+JCO6xtItsVi5/zyZgwNMDU3qBRwbl4pZZIz8agt6fm1pO7ekCgaesM RDqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references; bh=qnxiq5fyVIQflHPwEt80k2t5MyOaa4z4+meriBxvcBI=; b=TOE40eI9Ip7ai1Lutyh6B1sqe1GcQT5BgvgEkqVBMLlzl/r/HRViMMNCzXxLQmYBwQ QzH/SzKJmPeTjIFrjan83HbLmFXDalU5EO7El+9dF77hi/8yiKasM9rWjP2e5GYo0jb8 B82CqsWwb6tCnNRUcKj3B17CSNrhbUKMvsznza3KQAG2qPfqIfsGZjqwlR3Gh2LjMdNw 4gGCtv60yqfiSKM9CQ2tTA/tmUmiQoorOLKxn6euZTqEOBlgjmBzkPDLhRrXy9DfswM3 +DtYg56hK4cDPBcJMHQU42mSZuVUk44BcBQtgeJtDlqAucIXVYVDsjsdijrfPUTb5i88 mWIw== X-Gm-Message-State: APzg51CCGeynXs1N3TfPbt+BmMoariWoA9NZOdDBZihXfv5wuOrHIEjP 31QD8L4+1Y+Sa9yoWPlURk8N1S1d X-Google-Smtp-Source: ANB0Vdba/xlzOnzVqt5YB9SzBsiSwWge8sEe/xD2h5szfqPLksmL8BvFGYuok6zpNLyVJ3QCoB/eXQ== X-Received: by 2002:a1c:a8d0:: with SMTP id r199-v6mr119586wme.97.1534870993129; Tue, 21 Aug 2018 10:03:13 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.12 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:12 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:41 +0200 Message-Id: <1534870966-9287-10-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::234 Subject: [Qemu-devel] [PULL 09/74] MAINTAINERS: add maintainers for qtest 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: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Thomas has been doing a lot of work on qom-test and device-introspection-test, and Laurent has ported libqos to sPAPR and co-mentored Emanuele on the upcoming qtest device framework. They deserve recognition. :) Signed-off-by: Paolo Bonzini --- MAINTAINERS | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index 6902a56..68bc92e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1696,7 +1696,6 @@ F: qom/ X: qom/cpu.c F: tests/check-qom-interface.c F: tests/check-qom-proplist.c -F: tests/qom-test.c QMP M: Markus Armbruster @@ -1708,6 +1707,16 @@ F: scripts/qmp/ F: tests/qmp-test.c T: git git://repo.or.cz/qemu/armbru.git qapi-next +qtest +M: Paolo Bonzini +M: Thomas Huth +M: Laurent Vivier +S: Maintained +F: qtest.c +F: tests/libqtest.* +F: tests/libqos/ +F: tests/*-test.c + Register API M: Alistair Francis S: Maintained From patchwork Tue Aug 21 17:01:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960566 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=redhat.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="gcwnOWA9"; 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 41vxq529S7z9s4v for ; Wed, 22 Aug 2018 03:04:17 +1000 (AEST) Received: from localhost ([::1]:54942 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4l-0001Gc-1o for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:04:15 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60885) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA3x-0001Al-8X for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA3o-0005hC-O3 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:20 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]:37167) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA3n-0005c0-JN for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:16 -0400 Received: by mail-wr1-x42f.google.com with SMTP id u12-v6so16460851wrr.4 for ; Tue, 21 Aug 2018 10:03:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=TWZzAulVo+A0Kz/7z6ngW5EJM7sxfjkxlRE2NVAR6vA=; b=gcwnOWA9A9mu+X45/CsL5sdHyGsoDePHH+Hq8lcnE+s7xaNKikeGj+Um686bgscZ8D GoQwFvsWEq93g/s7+9kUWVJY4+tLosP0w9L6g8oZY5GXop02xbcVvp4nWeiHmzJV2Ya4 Pq5KkOYXOANMD9ASw3eMPRIjs8O8ky6Wq3kuqNgZmnJNJhef/TFYJVcjQLD8RN11vg2w ydkrxARXD/zErHwdMsoPStjiZzK+x/fdDw/FIxD7ESZrfOkBOvIWKuweAnk+8kix5thU jhJRCKFKOYvnLlWo4TOFoz+9zpGwm1YNnmtFxZx4fv0lfAnjXw4oCq9B7dwA1skoTMFC 1t2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=TWZzAulVo+A0Kz/7z6ngW5EJM7sxfjkxlRE2NVAR6vA=; b=OiG9S7R5fydt6kG3dc30KU3pscGE18/5JEPlFLashdvNQ+nEX7iDTsHiScOHnL6dxt hLfGjFN+5T8+QQ/B+SpzUdtK4YjvjYpON0BQYt8+nTjPFCtRj72DAu9ZMBf0rOg1g0dt 11wyVEENviUYwpL+d4RmWAGlRpTDLQvambuC/6Va0GvynkHKL8WQYTaK8mT2zVTW0zeA wDLFvM7G5Nz/cKeOjrqJCDObV2YAqcJA52vhq0JcF7cgpw/5eNXWOr8sQ5WyuAeuhwLg dOBOWg/LsX2DEvo/Q0bTcwOr2hA8OTa2AYzo5bs3aW0EzVc/4YQvI73aJ8src4/o81sB 46nw== X-Gm-Message-State: APzg51DQBaDCLRdvFaxt2X/iUy5+5Wzz06MRv4vcgvdAghALLWGwCUc1 d4PWPxWcELV6XKIQ8h33guqUghon X-Google-Smtp-Source: ANB0Vdbk/MwPxCLKGiMrD4W6mZazrbaf059Hge/gy4GsPbzRkXWHXr5GilxGiYY1pc9RY3pp+ZGm6A== X-Received: by 2002:adf:a602:: with SMTP id k2-v6mr12263239wrc.181.1534870994131; Tue, 21 Aug 2018 10:03:14 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:13 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:42 +0200 Message-Id: <1534870966-9287-11-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42f Subject: [Qemu-devel] [PULL 10/74] tests/migration-test: Silence the kvm_hv message by default 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: Thomas Huth Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Thomas Huth When running "make check" on a non-POWER host, the output is quite distorted like this: [...] GTESTER check-qtest-nios2 GTESTER check-qtest-or1k GTESTER check-qtest-ppc64 Skipping test: kvm_hv not available Skipping test: kvm_hv not available Skipping test: kvm_hv not available Skipping test: kvm_hv not available GTESTER check-qtest-ppcemb GTESTER check-qtest-ppc GTESTER check-qtest-riscv32 GTESTER check-qtest-riscv64 [...] Move the check to the beginning of the main function instead, so that we do not have to test the condition again and again for each test, and better use g_test_message() instead of g_print() here, like it is also done in ufd_version_check() already. Reviewed-by: Markus Armbruster Signed-off-by: Thomas Huth Message-Id: <1534419358-10932-2-git-send-email-thuth@redhat.com> Reviewed-by: Juan Quintela Signed-off-by: Paolo Bonzini --- tests/migration-test.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/tests/migration-test.c b/tests/migration-test.c index eb58d0a..0e687b7 100644 --- a/tests/migration-test.c +++ b/tests/migration-test.c @@ -438,15 +438,6 @@ static int test_migrate_start(QTestState **from, QTestState **to, " -incoming %s", accel, tmpfs, bootpath, uri); } else if (strcmp(arch, "ppc64") == 0) { - - /* On ppc64, the test only works with kvm-hv, but not with kvm-pr - * and TCG is touchy due to race conditions on dirty bits - * (especially on PPC for some reason) - */ - if (access("/sys/module/kvm_hv", F_OK)) { - g_print("Skipping test: kvm_hv not available "); - return -1; - } cmd_src = g_strdup_printf("-machine accel=%s -m 256M" " -name source,debug-threads=on" " -serial file:%s/src_serial" @@ -750,6 +741,17 @@ int main(int argc, char **argv) return 0; } + /* + * On ppc64, the test only works with kvm-hv, but not with kvm-pr and TCG + * is touchy due to race conditions on dirty bits (especially on PPC for + * some reason) + */ + if (g_str_equal(qtest_get_arch(), "ppc64") && + access("/sys/module/kvm_hv", F_OK)) { + g_test_message("Skipping test: kvm_hv not available"); + return 0; + } + tmpfs = mkdtemp(template); if (!tmpfs) { g_test_message("mkdtemp on path (%s): %s\n", template, strerror(errno)); From patchwork Tue Aug 21 17:01:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960575 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=redhat.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="VmxnzU46"; 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 41vxyb0PBFz9s78 for ; Wed, 22 Aug 2018 03:10:47 +1000 (AEST) Received: from localhost ([::1]:54974 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAB2-0008Rf-Kl for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:10:44 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60907) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA3x-0001Ax-Dq for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA3p-0005in-P3 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:20 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:34301) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA3o-0005fC-Hd for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:16 -0400 Received: by mail-wr1-x444.google.com with SMTP id g33-v6so6430171wrd.1 for ; Tue, 21 Aug 2018 10:03:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=AF5HwraPFBsbM05xyzeAEuP20uZ7UIZNYYi44IfYtOs=; b=VmxnzU46LGJElfxHD/AwuKsNhaevlAll2OI09yGgK1wkZX+47DI+/PWH6Ye7BLMWyn CuL9N1g44guvpY4Cw4mpHxXSvHqi7zb6Nwhc8QGAaa0hIEr2rWeYOo0ivF9JTAXXLRcl I9aqY9AFPDNi6IoxZfBN0fxWt/GykZEOuAoupY9TCfZ/RLc73dgiGcwYiIzKm4ztw+vQ OKg/+SjKoxE3AX6A/wK3pSKalz8gtwQRVdYLmDBFUFn0NNa16aYvlD+qIp7viJl40Psj syNz7UcFarhVSR9mlR5oLxCiSlW9pkuTwk8JvHTXwCbKyrOydeOqkchEqk09lAIXtsDW SvMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=AF5HwraPFBsbM05xyzeAEuP20uZ7UIZNYYi44IfYtOs=; b=bh+FleMDyVVTV7todGDSBPwfCsUPtWEsKKeVDhk5U+uWtmcP2+8Ig9Zu8ib3+ZXH7U lD2NiyfAm0BooLYmJ5c5FNAYD80D2UzQ2qMz3wrJZoFuLwLV9X1O4uQhoc44GIf2AcVX 29Rbkr0sLUUV4q9QDOS0cjtAA1z9nd3sbNL5QI0ZoxJibHc93F3+FhupoXlVItquWl2b fJAydaP5HxyDJe1po0Us/kFbAd8doVw0cjJ3Ab27daSd4Og8hZ0rhovum82TBF5xGhI6 U5e+O+DloLigDYai/Aq9+d+verxFifWJP4xHzrma3+RDX8noU0KgB/wCFYA76+bre9hN 1Bzw== X-Gm-Message-State: AOUpUlEol9iZsfPCtD4aOrs+1BZA5gCB2WqSEUpvHdHiMNbqZjfPiNe5 sFASrwzwsb3EaL0zVcM3CQcawCX5 X-Google-Smtp-Source: AA+uWPz8hZ+4wxW87QVvfE+DlOcnzGWpeq/khzGuFg2875ICcA1+yQz8l1CjLe3CUFRTec2tUha2eQ== X-Received: by 2002:a5d:6381:: with SMTP id p1-v6mr14747060wru.106.1534870995177; Tue, 21 Aug 2018 10:03:15 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:14 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:43 +0200 Message-Id: <1534870966-9287-12-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::444 Subject: [Qemu-devel] [PULL 11/74] net: Silence 'has no peer' messages in testing mode 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: Thomas Huth Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Thomas Huth When running qtests with -nodefaults, we are not interested in these 'XYZ has no peer' messages. Signed-off-by: Thomas Huth Message-Id: <1534419358-10932-3-git-send-email-thuth@redhat.com> Signed-off-by: Paolo Bonzini --- vl.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/vl.c b/vl.c index 16b913f..7055df3 100644 --- a/vl.c +++ b/vl.c @@ -4559,11 +4559,10 @@ int main(int argc, char **argv, char **envp) * (2) CONFIG_SLIRP not set, in which case the implicit "-net nic" * sets up a nic that isn't connected to anything. */ - if (!default_net) { + if (!default_net && (!qtest_enabled() || has_defaults)) { net_check_clients(); } - if (boot_once) { qemu_boot_set(boot_once, &error_fatal); qemu_register_reset(restore_boot_order, g_strdup(boot_order)); From patchwork Tue Aug 21 17:01:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960568 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=redhat.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="gVb2EBxM"; 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 41vxsT53SBz9s4v for ; Wed, 22 Aug 2018 03:06:20 +1000 (AEST) Received: from localhost ([::1]:54955 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA6j-0004YJ-Go for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:06:17 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:32778) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA42-0001HL-CP for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA3s-0005oY-Dw for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:23 -0400 Received: from mail-wm0-x22d.google.com ([2a00:1450:400c:c09::22d]:33121) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA3p-0005h6-MN for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:18 -0400 Received: by mail-wm0-x22d.google.com with SMTP id i134-v6so10056636wmf.0 for ; Tue, 21 Aug 2018 10:03:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=x89HnEVWJPT7YjpQKNJYKJi7PBxccqgljI0+8tOM8Q8=; b=gVb2EBxMwOQ8HL1n1MmnaHnGjlt25YsHuavNe/zgwfJ4EeWCpwm/EcW9ULud55ChI/ yB7N/c78+ggzSV7z9qxsm1+dU/1M6hGleGeBc5d2LCQ+ZBqGgjOCD14r3/7c/OJ6L7xu 7ztULjCXEftz1AcepLvf7vflxN0OVHcp3CL9BtfROf1XZ8uJaan7oBhOGYkNkz0NjqZY gsiodAJbI7itb6kUXjsVohY785M+4IzqoAnmJNPFkXINrkX8bGKLgHIGPcD0ipuCLWYF Q/XNXgZ4W+PiNYdGqLubsuvuNk6fyJ/dSFOPJErodFU/LD2lVI3cdQ0ZslNnGpbjSLOd gvtA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=x89HnEVWJPT7YjpQKNJYKJi7PBxccqgljI0+8tOM8Q8=; b=l2Sy2KXjxQG2z+XucUNjRVe324uscYITpF4SqN4hwW9COprym/6Z4wADGEXmHsz7is 6BKzJ5BhlE/gVnQRaOZhJ7kRSXYEZp63Lo0lOqjhmUlEFxdghCcRSc+expxN1VDjgZal lqwjJbDZK42Ai3ZK5S0DIYO9kLg/4x+RQ/A8qiqO/WdUeACW6OYRtYloK8i96BggnWZo 2dBt3LEi4e7aV+F3MLsAI2ovKj/+ttFDS3jXU/MdeUEBZvpFswFTFjpdOcv9iritsarH JIGMVs4720kij542TB2kLqIR2EJ5qtN46GNSZPJsc/XChCKYyA1kSFs+LnxUG6jg5bv1 LLsQ== X-Gm-Message-State: APzg51Dj+1+6AYxgGaHabA+2NOURno7RhBIclO3sOrpJQBGMTmhrdDHR pct30yWGZLRVAgJiupxpHwTuQLdu X-Google-Smtp-Source: ANB0Vdbqufsda9CBOhS9G9ko7JEo0YT4NnND7uyoFNmjzJkXhSECBg8XPg0DpEzINd2cQRjvdahPHA== X-Received: by 2002:a1c:3f08:: with SMTP id m8-v6mr160416wma.88.1534870996086; Tue, 21 Aug 2018 10:03:16 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:15 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:44 +0200 Message-Id: <1534870966-9287-13-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::22d Subject: [Qemu-devel] [PULL 12/74] hw/timer/mc146818rtc: White space clean-up 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: Thomas Huth Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Thomas Huth mc146818rtc.c still contains some TABs. Replace them with spaces. And while we're at it, also delete trailing whitespace in this file. Reviewed-by: Markus Armbruster Signed-off-by: Thomas Huth Message-Id: <1534419358-10932-4-git-send-email-thuth@redhat.com> Reviewed-by: Juan Quintela Signed-off-by: Paolo Bonzini --- hw/timer/mc146818rtc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hw/timer/mc146818rtc.c b/hw/timer/mc146818rtc.c index 6f1f723..3a14075 100644 --- a/hw/timer/mc146818rtc.c +++ b/hw/timer/mc146818rtc.c @@ -120,7 +120,7 @@ static void rtc_coalesced_timer_update(RTCState *s) timer_del(s->coalesced_timer); } else { /* divide each RTC interval to 2 - 8 smaller intervals */ - int c = MIN(s->irq_coalesced, 7) + 1; + int c = MIN(s->irq_coalesced, 7) + 1; int64_t next_clock = qemu_clock_get_ns(rtc_clock) + periodic_clock_to_ns(s->period / c); timer_mod(s->coalesced_timer, next_clock); @@ -485,7 +485,7 @@ static void cmos_ioport_write(void *opaque, hwaddr addr, s->cmos_data[s->cmos_index] = data; check_update_timer(s); break; - case RTC_IBM_PS2_CENTURY_BYTE: + case RTC_IBM_PS2_CENTURY_BYTE: s->cmos_index = RTC_CENTURY; /* fall through */ case RTC_CENTURY: @@ -713,7 +713,7 @@ static uint64_t cmos_ioport_read(void *opaque, hwaddr addr, return 0xff; } else { switch(s->cmos_index) { - case RTC_IBM_PS2_CENTURY_BYTE: + case RTC_IBM_PS2_CENTURY_BYTE: s->cmos_index = RTC_CENTURY; /* fall through */ case RTC_CENTURY: @@ -915,7 +915,7 @@ static void rtc_reset(void *opaque) if (s->lost_tick_policy == LOST_TICK_POLICY_SLEW) { s->irq_coalesced = 0; - s->irq_reinject_on_ack_count = 0; + s->irq_reinject_on_ack_count = 0; } } From patchwork Tue Aug 21 17:01:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960585 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=redhat.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="Ju5R3Abj"; 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 41vy5B5ttrz9s8T for ; Wed, 22 Aug 2018 03:16:30 +1000 (AEST) Received: from localhost ([::1]:55007 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAGa-0004gc-7I for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:16:28 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:32958) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA49-0001SV-85 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA3z-0005yz-JS for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:31 -0400 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]:46454) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA3s-0005ie-3h for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:21 -0400 Received: by mail-wr1-x433.google.com with SMTP id a108-v6so13814869wrc.13 for ; Tue, 21 Aug 2018 10:03:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=+EiNerbP1pk7gA6CFNncAQS/IxgM5wfOMJfiv+7i/bU=; b=Ju5R3Abj55zL3xZproY3x065jTC1oxGvtKFE1HG1otor/bJYqzKblHwJE/TNNwHkDk hUkxrxqtDnMTSNWwWnpAM3pySbpeIazDoF9zbUoId8VdKUtu9g6WJWzB4Bue9xyXIqgh JOW9wtGpTe2YHcC7tz34hhfJYqUPpjP3OzLmLVfjam5BGks3wDC0Xt3oBkiPjZ83obkC BMXTMso1QLFTOcPajNB1diFu5AJxDWyNIT9C46/PKJeBXxQ/qjBxUktBqWRP72ElGdY2 oYkSwJ3xgurfb9xF4K2wCzNyS2Y7SAByLR+rhXNuSiMtyuSFJx3Tk72SC/XliIYyOyh0 m0eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=+EiNerbP1pk7gA6CFNncAQS/IxgM5wfOMJfiv+7i/bU=; b=PwjV9G+XtlbNdxfywQ1tLmZqrQpiOP37vfSjXadMavyTp7nRY2tWuqPVst+pL7YKMU K3Wb3P2BVhEihGDAmN6CO3g+b6VHkFXSb/w0l8o4gU+iwWBPUfgo8+okoxW2UlWfSURl vkZYDHNDwxEBAux7zseA/l8Zbw1WfQBYlKERt5vtXID5VSt6QatS3JynAIVGo36FRbSd Ay4NYNoNdTiZohrIReQGZxCA1fAA0WUSYYqnleun4iigp/lmpBqOM/HU+K1VoiMwHyIY MmUdfV0ioVQWnzS3MfD/9Dyy1tp7hG+4K0srCa6VJ6ZNgjSDKcmzT0HAEo/9ErrTcxR2 DREQ== X-Gm-Message-State: AOUpUlH/D+Ah9mMe8arplz0TscKA5ngnHG8Uq2FwTOiDjSDSxMfb7xJn TlxNmwH/31gRDQfl9s18IsadX+PC X-Google-Smtp-Source: AA+uWPyYcTEGQ/ndTl2w/axZwJHzAnqwZqYap0oHMLkf5pxCJmWACy2r6odgLzkT6u/TYVJ4HUTJdQ== X-Received: by 2002:a5d:6550:: with SMTP id z16-v6mr31398761wrv.194.1534870997023; Tue, 21 Aug 2018 10:03:17 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:16 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:45 +0200 Message-Id: <1534870966-9287-14-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::433 Subject: [Qemu-devel] [PULL 13/74] hw/timer/mc146818rtc: Fix introspection problem 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: Thomas Huth Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Thomas Huth There is currently a funny problem with the "mc146818rtc" device: 1) Start QEMU like this: qemu-system-ppc64 -M pseries -S 2) At the HMP monitor, enter "info qom-tree". Note that there is an entry for "/rtc (spapr-rtc)". 3) Introspect the mc146818rtc device like this: device_add mc146818rtc,help 4) Run "info qom-tree" again. The "/rtc" entry is gone now! The rtc_finalize() function of the mc146818rtc device has two bugs: First, it tries to remove a "rtc" property, while the rtc_realizefn() added a "rtc-time" property instead. And second, it should have been done in an unrealize function, not in a finalize function, to avoid that this causes problems during introspection. But since adding aliases to the global machine state should not be done from a device's realize function anyway, let's rather fix this issue by moving the creation of the alias to the code that creates the device (and thus is run from the machine init functions instead), i.e. the mc146818_rtc_init() function for most machines. The prep machines are special, since the mc146818rtc device is created here in the realize function of the i82378 device. Since we certainly don't want to add the alias there, we add it to some code that is called from the ibm_40p_init() machine init function instead. Since the alias is now only created during the machine init, we can remove the object_property_del() completely. Fixes: 654a36d857ff949e0d1989904b76f53fded9dc83 Reviewed-by: Markus Armbruster Signed-off-by: Thomas Huth Message-Id: <1534419358-10932-5-git-send-email-thuth@redhat.com> Reviewed-by: Juan Quintela Signed-off-by: Paolo Bonzini --- hw/ppc/prep.c | 3 +++ hw/timer/mc146818rtc.c | 12 +++--------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c index 3401570..91a8f42 100644 --- a/hw/ppc/prep.c +++ b/hw/ppc/prep.c @@ -696,6 +696,9 @@ static int prep_set_cmos_checksum(DeviceState *dev, void *opaque) rtc_set_memory(rtc, 0x3e, checksum & 0xff); rtc_set_memory(rtc, 0x2f, checksum >> 8); rtc_set_memory(rtc, 0x3f, checksum >> 8); + + object_property_add_alias(qdev_get_machine(), "rtc-time", OBJECT(rtc), + "date", NULL); } return 0; } diff --git a/hw/timer/mc146818rtc.c b/hw/timer/mc146818rtc.c index 3a14075..a504f03 100644 --- a/hw/timer/mc146818rtc.c +++ b/hw/timer/mc146818rtc.c @@ -995,9 +995,6 @@ static void rtc_realizefn(DeviceState *dev, Error **errp) object_property_add_tm(OBJECT(s), "date", rtc_get_date, NULL); - object_property_add_alias(qdev_get_machine(), "rtc-time", - OBJECT(s), "date", NULL); - qdev_init_gpio_out(dev, &s->irq, 1); } @@ -1019,6 +1016,9 @@ ISADevice *mc146818_rtc_init(ISABus *bus, int base_year, qemu_irq intercept_irq) } QLIST_INSERT_HEAD(&rtc_devices, s, link); + object_property_add_alias(qdev_get_machine(), "rtc-time", OBJECT(s), + "date", NULL); + return isadev; } @@ -1052,17 +1052,11 @@ static void rtc_class_initfn(ObjectClass *klass, void *data) dc->user_creatable = false; } -static void rtc_finalize(Object *obj) -{ - object_property_del(qdev_get_machine(), "rtc", NULL); -} - static const TypeInfo mc146818rtc_info = { .name = TYPE_MC146818_RTC, .parent = TYPE_ISA_DEVICE, .instance_size = sizeof(RTCState), .class_init = rtc_class_initfn, - .instance_finalize = rtc_finalize, }; static void mc146818rtc_register_types(void) From patchwork Tue Aug 21 17:01:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960582 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=redhat.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="ea1heq5s"; 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 41vy265b7Xz9s5c for ; Wed, 22 Aug 2018 03:13:50 +1000 (AEST) Received: from localhost ([::1]:54992 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAE0-0002Tm-Bq for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:13:48 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:32996) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4B-0001Ua-6D for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA42-00063G-BT for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:35 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]:33863) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA3s-0005m5-KY for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:23 -0400 Received: by mail-wr1-x434.google.com with SMTP id g33-v6so6430307wrd.1 for ; Tue, 21 Aug 2018 10:03:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=wGnGr6pPjXSG5P/b6PaiMfBx6WjEURtwGrsHV//vS1s=; b=ea1heq5spfPLUJXMqyT5zoEgYjs/UL4D3TP4qLThdJIAJVzDWEO3D+gCvmv2wDun2D z81dqMIYKdcaaP0pJSQ8MRqgqjO5jWOyPawS6/3bNcmDX98TZ/mLNpYmwBROcG174N4p 6Nr0KHh70mu9zX99gRJYCw4kZocDAYFcz/1U57icT4Ay1kvgiv8oAgxjfabqJuy2xubQ qdNJdZmkk8tTLe7kMFp5tYNk01bShIxx9qhXts5FIlQC388+HoSGpCP9SHrRvY4aEU/2 T5zPBLG+iKAjgaFKdp2ILX8yH6EXkPXg7PKx6fGEcMoNWEHCpGn1aucUwpCnkQn+rnBS PxcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=wGnGr6pPjXSG5P/b6PaiMfBx6WjEURtwGrsHV//vS1s=; b=E2kV3Nnz7jElEbrQMAkEZH5EYjm+8lI25PetEuMsA56fR5l+e3/jpY6rX6lYbeDCcV uryZG2WePZxkpebyDGqAdhbNvWvg6M8vo67vc6OPXMC9ghOtObdKZHoET7imyfcADlh5 oVslmlUMwv4WPBYG0Gp7AvtghxtlpqK1cSKePUZNQTyeOa0cKsXivT8+wpyxZmC9rtyd svmOwcMoXIn3fTeDXji/fUAHLi8wpZgWUPeHljqlXQnPI9I780AImfiAU37/X7hGpQ+B vvLa3+8SscBiV7Fb0oQ+gTIZOo5W5aJLapEqD9O0Ic80iWAKAcszuKR+3R8a0ie73jEC taxQ== X-Gm-Message-State: APzg51Dq1TZBazA8NnP2xk1p0UzL+XapMpoCVasW5PIozukitAT1qIpy VE1ixmKoTJRsWiSLIqjVsABVkPCs X-Google-Smtp-Source: ANB0VdY9qSP0fA3CaYfBo4y+QkD7zmsXyfpKEUIYR9BewMfFnweTcVWksWcBH2+5Yl2Gt03KrwltqQ== X-Received: by 2002:adf:f8ca:: with SMTP id f10-v6mr7401355wrq.237.1534870998381; Tue, 21 Aug 2018 10:03:18 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:17 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:46 +0200 Message-Id: <1534870966-9287-15-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::434 Subject: [Qemu-devel] [PULL 14/74] tests: Skip old versioned machine types in quick testing mode 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: Thomas Huth Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Thomas Huth The tests that check something for all machine types currently spend a lot of time checking old machine types (like "pc-i440fx-2.0" for example). The chances that we find something new there in addition to checking the latest version of a machine type are pretty low, so we should not waste the time of the developers by testing this again and again in the "quick" testing mode. Thus let's add some code to determine whether we are testing a current machine type or an old one, and only test the old types if we are running in "SPEED=slow" mode. This decreases the testing time quite a bit now, e.g. the qom-test now finishes within 4 seconds for qemu-system-x86_64 instead of 30 seconds when testing all machines. Signed-off-by: Thomas Huth Message-Id: <1534419358-10932-6-git-send-email-thuth@redhat.com> Signed-off-by: Paolo Bonzini --- tests/cpu-plug-test.c | 6 +++--- tests/libqtest.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++-- tests/libqtest.h | 4 +++- tests/qom-test.c | 2 +- tests/test-hmp.c | 2 +- 5 files changed, 58 insertions(+), 8 deletions(-) diff --git a/tests/cpu-plug-test.c b/tests/cpu-plug-test.c index f5d57da..3e93c8e 100644 --- a/tests/cpu-plug-test.c +++ b/tests/cpu-plug-test.c @@ -257,11 +257,11 @@ int main(int argc, char **argv) g_test_init(&argc, &argv, NULL); if (strcmp(arch, "i386") == 0 || strcmp(arch, "x86_64") == 0) { - qtest_cb_for_every_machine(add_pc_test_case); + qtest_cb_for_every_machine(add_pc_test_case, g_test_quick()); } else if (g_str_equal(arch, "ppc64")) { - qtest_cb_for_every_machine(add_pseries_test_case); + qtest_cb_for_every_machine(add_pseries_test_case, g_test_quick()); } else if (g_str_equal(arch, "s390x")) { - qtest_cb_for_every_machine(add_s390x_test_case); + qtest_cb_for_every_machine(add_s390x_test_case, g_test_quick()); } return g_test_run(); diff --git a/tests/libqtest.c b/tests/libqtest.c index 852ccff..1eefad4 100644 --- a/tests/libqtest.c +++ b/tests/libqtest.c @@ -991,7 +991,53 @@ bool qtest_big_endian(QTestState *s) return s->big_endian; } -void qtest_cb_for_every_machine(void (*cb)(const char *machine)) +static bool qtest_check_machine_version(const char *mname, const char *basename, + int major, int minor) +{ + char *newname; + bool is_equal; + + newname = g_strdup_printf("%s-%i.%i", basename, major, minor); + is_equal = g_str_equal(mname, newname); + g_free(newname); + + return is_equal; +} + +static bool qtest_is_old_versioned_machine(const char *mname) +{ + const char *dash = strrchr(mname, '-'); + const char *dot = strrchr(mname, '.'); + const char *chr; + char *bname; + const int major = QEMU_VERSION_MAJOR; + const int minor = QEMU_VERSION_MINOR; + bool res = false; + + if (dash && dot && dot > dash) { + for (chr = dash + 1; *chr; chr++) { + if (!isdigit(*chr) && *chr != '.') { + return false; + } + } + /* + * Now check if it is one of the latest versions. Check major + 1 + * and minor + 1 versions as well, since they might already exist + * in the development branch. + */ + bname = g_strdup(mname); + bname[dash - mname] = 0; + res = !qtest_check_machine_version(mname, bname, major + 1, 0) && + !qtest_check_machine_version(mname, bname, major, minor + 1) && + !qtest_check_machine_version(mname, bname, major, minor); + g_free(bname); + } + + return res; +} + +void qtest_cb_for_every_machine(void (*cb)(const char *machine), + bool skip_old_versioned) { QDict *response, *minfo; QList *list; @@ -1014,7 +1060,9 @@ void qtest_cb_for_every_machine(void (*cb)(const char *machine)) qstr = qobject_to(QString, qobj); g_assert(qstr); mname = qstring_get_str(qstr); - cb(mname); + if (!skip_old_versioned || !qtest_is_old_versioned_machine(mname)) { + cb(mname); + } } qtest_end(); diff --git a/tests/libqtest.h b/tests/libqtest.h index def1eda..1159b73 100644 --- a/tests/libqtest.h +++ b/tests/libqtest.h @@ -954,10 +954,12 @@ QDict *qmp_fd(int fd, const char *fmt, ...) GCC_FMT_ATTR(2, 3); /** * qtest_cb_for_every_machine: * @cb: Pointer to the callback function + * @skip_old_versioned: true if versioned old machine types should be skipped * * Call a callback function for every name of all available machines. */ -void qtest_cb_for_every_machine(void (*cb)(const char *machine)); +void qtest_cb_for_every_machine(void (*cb)(const char *machine), + bool skip_old_versioned); /** * qtest_qmp_device_add: diff --git a/tests/qom-test.c b/tests/qom-test.c index e6f712c..73c52af 100644 --- a/tests/qom-test.c +++ b/tests/qom-test.c @@ -123,7 +123,7 @@ int main(int argc, char **argv) { g_test_init(&argc, &argv, NULL); - qtest_cb_for_every_machine(add_machine_test_case); + qtest_cb_for_every_machine(add_machine_test_case, g_test_quick()); return g_test_run(); } diff --git a/tests/test-hmp.c b/tests/test-hmp.c index 5352c9c..1a3a9c5 100644 --- a/tests/test-hmp.c +++ b/tests/test-hmp.c @@ -158,7 +158,7 @@ int main(int argc, char **argv) g_test_init(&argc, &argv, NULL); - qtest_cb_for_every_machine(add_machine_test_case); + qtest_cb_for_every_machine(add_machine_test_case, g_test_quick()); /* as none machine has no memory by default, add a test case with memory */ qtest_add_data_func("hmp/none+2MB", g_strdup("none -m 2"), test_machine); From patchwork Tue Aug 21 17:01:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960587 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=redhat.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="gnd9fyPn"; 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 41vy5T6d0Qz9s7X for ; Wed, 22 Aug 2018 03:16:45 +1000 (AEST) Received: from localhost ([::1]:55010 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAGp-0004rG-Dx for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:16:43 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33048) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4C-0001Wz-LS for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA45-00069j-DR for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:36 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]:34989) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA3v-0005nP-55 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:25 -0400 Received: by mail-wr1-x42f.google.com with SMTP id j26-v6so645938wre.2 for ; Tue, 21 Aug 2018 10:03:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=x6olhPSsYEJrh2LYk6+qySPVHxptO+334y6mLZMlLl0=; b=gnd9fyPnx9dPichFwg1mG/Cpw6fapJ+2RagSVoqI8mE7CaaJonSV9eaXVleeMC+X0i mg2Y2Kv7P5MkZYRCNzWaasMjdO9AVLphbSx7ruLsn5PsyNib4kVrX0KNpcr+k9NWvKnI dyfPYGcdfLRIYN+DyzOUNY6wYNYKrvBJDsKOxJpIAz7AwMPPdfrjnmaLSoxk9/5xWU24 iAZ24RZkmApwi71RmCBMqAHnYQ2ICUEEQT09G3P1fd4RLtTU2ISQJ7BVeww9YzQDy1hH M3m7rdU5Qqvt4HkVqkn6bwGkWqHGmjpv8zsqo53SRXpkcQB2q537yJX+gUpVDA+2AhBt YKpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=x6olhPSsYEJrh2LYk6+qySPVHxptO+334y6mLZMlLl0=; b=PqVJW0c5yJH9aBva/nvBogN6rKKxsqu3EJrNVPz9Qgv6hek0Cprw2+gfD2gjDfpqZS eYlP/G0SqCy/zZ1gTZN/bVnFpubxelJ6Xj7gjYKPpFDicsS/AWVt5o2uPW97ySFsU8QJ Ij+AATMkled3viI8WfiOypdzOzV48ZBboYc66ZHWzuxoGF+FjZc34R3j7MZOPPD5l/Ig a3bW6VCe115Xh0yurMhgLFzDzFfPEKWoabLHWj3MGTKqfSpg9ogyDrvyILI+wp1nkk6F eCuwM/DyjB/Oyd8NItEiuDnwm69FJ/caQt9gA9smogeM9Fk7bl+czUVmgB/6Usj/jzHs jw7Q== X-Gm-Message-State: APzg51AOwsPhT2CscRhRHmo98swFneM35o3228lktFulXjb7GM2pDxRe oI7mS9u0821XGfojCMPE+Dn8z0Dn X-Google-Smtp-Source: ANB0VdYMD1thJZ3kVsGS0TpDnRLogoRlvF23wSar+4dMdiW2Z5f4P0ZSbVRrJ5YaxE0k8N6Bo+uHEQ== X-Received: by 2002:adf:a30a:: with SMTP id c10-v6mr9246734wrb.31.1534870999227; Tue, 21 Aug 2018 10:03:19 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:18 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:47 +0200 Message-Id: <1534870966-9287-16-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42f Subject: [Qemu-devel] [PULL 15/74] tests/device-introspection: Check that the qom-tree and qtree do not change 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: Thomas Huth Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Thomas Huth Introspection should not change the qom-tree / qtree, so we should check this in the device-introspect-test, too. This patch helped to find lots of instrospection bugs during the QEMU v3.0 soft/hard-freeze period in the last two months. Signed-off-by: Thomas Huth Message-Id: <1534419358-10932-7-git-send-email-thuth@redhat.com> Signed-off-by: Paolo Bonzini --- tests/device-introspect-test.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/tests/device-introspect-test.c b/tests/device-introspect-test.c index 0b4f221..a38193b 100644 --- a/tests/device-introspect-test.c +++ b/tests/device-introspect-test.c @@ -103,7 +103,14 @@ static QList *device_type_list(bool abstract) static void test_one_device(const char *type) { QDict *resp; - char *help, *qom_tree; + char *help; + char *qom_tree_start, *qom_tree_end; + char *qtree_start, *qtree_end; + + g_test_message("Testing device '%s'", type); + + qom_tree_start = hmp("info qom-tree"); + qtree_start = hmp("info qtree"); resp = qmp("{'execute': 'device-list-properties'," " 'arguments': {'typename': %s}}", @@ -115,10 +122,18 @@ static void test_one_device(const char *type) /* * Some devices leave dangling pointers in QOM behind. - * "info qom-tree" has a good chance at crashing then + * "info qom-tree" or "info qtree" have a good chance at crashing then. + * Also make sure that the tree did not change. */ - qom_tree = hmp("info qom-tree"); - g_free(qom_tree); + qom_tree_end = hmp("info qom-tree"); + g_assert_cmpstr(qom_tree_start, ==, qom_tree_end); + g_free(qom_tree_start); + g_free(qom_tree_end); + + qtree_end = hmp("info qtree"); + g_assert_cmpstr(qtree_start, ==, qtree_end); + g_free(qtree_start); + g_free(qtree_end); } static void test_device_intro_list(void) From patchwork Tue Aug 21 17:01:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960618 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=redhat.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="E6sTZBVH"; 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 41vy985dLNz9s78 for ; Wed, 22 Aug 2018 03:19:56 +1000 (AEST) Received: from localhost ([::1]:55023 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAJu-0007UM-7i for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:19:54 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33169) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4M-0001hY-VF for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA49-0006FV-8K for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:44 -0400 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]:43890) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA3z-0005pJ-Hs for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:31 -0400 Received: by mail-wr1-x436.google.com with SMTP id k5-v6so4942754wre.10 for ; Tue, 21 Aug 2018 10:03:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=n3tuiHKM6dBv4TSVvX0LbuM54Vazkhn2qDEKA+MAPZ4=; b=E6sTZBVHcoLXGN1WROP2bz/bH5umsN1GgMpjDHE2UxVMvVDGYqtQ4+sLCp7w/s9HHb puc0PVqm/1OrSFbVdSZd9SBSJENx4CwneuBftX4r1Bx6Muvv2kfoI0zbZ/SqLcKvMb9T LPeYMG2cS/mhBN6N8XkIIwjTi+FVOFe/HYKQBjjE/sYK1HXuetWiSS4+JU7LlTD0/lUZ s2OCf1BuguW3rWfWyJCjJ+k7LwF9dpi/qNwp1Zz1TvNsaElby+Z4T590jHZIl3yEUrkk b7c0c1DMLnSRgHcKrQus68jXs7TCE5nUZDqZ5igxVq9ELq9cc7NYbwGWZTcBA6MtN6xe DVAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=n3tuiHKM6dBv4TSVvX0LbuM54Vazkhn2qDEKA+MAPZ4=; b=jZnNRBGj+cqzWCGVKDlcn0+2xzraB8gksR9m0WpG5mAmrjU8Ulxj4nimY1QzJhzfgD CHm3yALHGsBDUKUYcbTXRvZetw3xyBWNt7dndbAivzxlCDUmm9RgaElIYXKLdHWZpR3u TH34BxRYqEC6GBb5D4gb69dtOcJBduPr/FSrlTqdqKUJCm6oMwY6zfjS8g4egDcxCpqf 1dc35hYhxoekyw9VOlC2Ko2tko9nEE28bSkwEjZBiZFR67vm/X2z02R263jA5AhyK248 E3+QsJfaTmJTK/4ur7wBPIE2TrpFZHuSedSn2iiUh60wSU9jira78832yK45CT7GWaBI dAHA== X-Gm-Message-State: APzg51Axg7KOUrkkHSlyOqAqY2hlKckDdbXblrQVEGW0yj85iklXLPSA xawZlKijEnaLcJmRDTzmxc6yuHu4 X-Google-Smtp-Source: ANB0VdaFbhJjOtvmkfwJ5Dl6BQY24R7DXBXcIi//+DRw7VrpTIQc55VdQN72EDH2CyH4sFGmDNgu0A== X-Received: by 2002:adf:bd10:: with SMTP id j16-v6mr11180006wrh.267.1534871000432; Tue, 21 Aug 2018 10:03:20 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:19 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:48 +0200 Message-Id: <1534870966-9287-17-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::436 Subject: [Qemu-devel] [PULL 16/74] tests/device-introspect: Test with all machines, not only with "none" 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: Thomas Huth Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Thomas Huth Certain device introspection crashes used to only happen if you were using a certain machine, e.g. if the machine was using serial_hd() or nd_table[], and a device was trying to use these in its instance_init function, too. To be able to catch these problems, let's extend the device-introspect test to check the devices on all machine types, with and without the "-nodefaults" parameter (since this makes a difference sometimes, too). Since this is a rather slow operation, and most of the problems are already handled by testing with the "none" machine only, the test with all machines is only run in the "make check SPEED=slow" mode. Reviewed-by: Markus Armbruster Signed-off-by: Thomas Huth Message-Id: <1534419358-10932-8-git-send-email-thuth@redhat.com> Signed-off-by: Paolo Bonzini Reviewed-by: John Snow Reviewed-by: Laurent Vivier Signed-off-by: Paolo Bonzini --- tests/device-introspect-test.c | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/tests/device-introspect-test.c b/tests/device-introspect-test.c index a38193b..a25092d 100644 --- a/tests/device-introspect-test.c +++ b/tests/device-introspect-test.c @@ -221,13 +221,13 @@ static void test_device_intro_abstract(void) qtest_end(); } -static void test_device_intro_concrete(void) +static void test_device_intro_concrete(const void *args) { QList *types; QListEntry *entry; const char *type; - qtest_start(common_args); + qtest_start(args); types = device_type_list(false); QLIST_FOREACH_ENTRY(types, entry) { @@ -239,6 +239,7 @@ static void test_device_intro_concrete(void) qobject_unref(types); qtest_end(); + g_free((void *)args); } static void test_abstract_interfaces(void) @@ -275,6 +276,26 @@ static void test_abstract_interfaces(void) qtest_end(); } +static void add_machine_test_case(const char *mname) +{ + char *path, *args; + + /* Ignore blacklisted machines */ + if (g_str_equal("xenfv", mname) || g_str_equal("xenpv", mname)) { + return; + } + + path = g_strdup_printf("device/introspect/concrete/defaults/%s", mname); + args = g_strdup_printf("-M %s", mname); + qtest_add_data_func(path, args, test_device_intro_concrete); + g_free(path); + + path = g_strdup_printf("device/introspect/concrete/nodefaults/%s", mname); + args = g_strdup_printf("-nodefaults -M %s", mname); + qtest_add_data_func(path, args, test_device_intro_concrete); + g_free(path); +} + int main(int argc, char **argv) { g_test_init(&argc, &argv, NULL); @@ -283,8 +304,13 @@ int main(int argc, char **argv) qtest_add_func("device/introspect/list-fields", test_qom_list_fields); qtest_add_func("device/introspect/none", test_device_intro_none); qtest_add_func("device/introspect/abstract", test_device_intro_abstract); - qtest_add_func("device/introspect/concrete", test_device_intro_concrete); qtest_add_func("device/introspect/abstract-interfaces", test_abstract_interfaces); + if (g_test_quick()) { + qtest_add_data_func("device/introspect/concrete/defaults/none", + g_strdup(common_args), test_device_intro_concrete); + } else { + qtest_cb_for_every_machine(add_machine_test_case, true); + } return g_test_run(); } From patchwork Tue Aug 21 17:01:49 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960643 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=redhat.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="BlLA5udx"; 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 41vyVM1d37z9s3Z for ; Wed, 22 Aug 2018 03:34:51 +1000 (AEST) Received: from localhost ([::1]:55099 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAYK-0007Nj-PN for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:34:48 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33562) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4b-00025D-F7 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4W-0006oN-Bo for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:05 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:38389) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4V-0005qd-EC for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:59 -0400 Received: by mail-wr1-x444.google.com with SMTP id w11-v6so13895593wrc.5 for ; Tue, 21 Aug 2018 10:03:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=pPxLKrfN2jTwLmJGH7y0ZqZxZvbBjACHL61bAqW1gWg=; b=BlLA5udxIXO0lmslA8r46Jhs70Ty+H3aDne02bH/t5/mq+9H+AW80uONFxQV1xpeMx GD2B9rFLJORj+Jq13qjPFfZoDNF3BxUTwzo8zzgAKge4CWxDRQe+fudOC8YLH5bQ2hOr Wnv0zBJ2G2SCBxk6GMfL2sWnG3rpIAhHNCL6hss8CDgKnzEFKHMiBh+ToG4Zb1sOvS0i Va08e4zJbkRQoszf0lYhTOjSK6p7mhHKk3YOnhC/e241rAIYGBIWyx0oHUvvF/8yz+VI HuRbKKuZksvpGoULAGL1WXV+CbGs+Td1plhQUdenSfSXJeXK77ryjqz4z8CqbGA4wsT0 dPqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=pPxLKrfN2jTwLmJGH7y0ZqZxZvbBjACHL61bAqW1gWg=; b=NVCzWdmuRJrwH68+2VJZ4qNetju/66eEt6ajW9jLpV4jEVZ0MrLKrkl1MKDfXoHb3a whUmAZUPEOAbc36Oet0OWJezg6ZNVAXSgii/kNl0STYqaXJWs9qN72bkHigKiI/sVrAl 2Z9vf74hQTjyeBlGe8jRJUx9NSXMjOXmNndvPrDI68BXgJ1YXoDT9n6dlIkKjTYYnBnu 4MnsbBvHlsuV4n1BatseAnsvP2ars7ZD6KmAEtHbeKw0uDQlp90/dHCtPWm95dkFbwyN /34bXImKI0334zNznkarL1vQehetz33FdDEqoWRoq1V58Dyz807AZpGoZz+/7CVqL2u9 NYIA== X-Gm-Message-State: AOUpUlG/yvtjArfoBtNuutGFWSlZSNxKQqDAioeSKmOBK0rO8Wr8tj0I nOAG89HBnSO9RdvnY0iuW8oA9Pa8 X-Google-Smtp-Source: AA+uWPx+/fdl5aF3TGXU0IC9ag8BoFJL6FWtuzdzE7DiH7Fu3p8rB1wOSLf4dRFHyRgKvK/Nwt+j/w== X-Received: by 2002:adf:8161:: with SMTP id 88-v6mr32053079wrm.22.1534871001277; Tue, 21 Aug 2018 10:03:21 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:20 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:49 +0200 Message-Id: <1534870966-9287-18-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::444 Subject: [Qemu-devel] [PULL 17/74] seqlock: constify seqlock_read_begin 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" Signed-off-by: Emilio G. Cota Signed-off-by: Paolo Bonzini --- include/qemu/seqlock.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/qemu/seqlock.h b/include/qemu/seqlock.h index 8dee11d..c367516 100644 --- a/include/qemu/seqlock.h +++ b/include/qemu/seqlock.h @@ -45,7 +45,7 @@ static inline void seqlock_write_end(QemuSeqLock *sl) atomic_set(&sl->sequence, sl->sequence + 1); } -static inline unsigned seqlock_read_begin(QemuSeqLock *sl) +static inline unsigned seqlock_read_begin(const QemuSeqLock *sl) { /* Always fail if a write is in progress. */ unsigned ret = atomic_read(&sl->sequence); From patchwork Tue Aug 21 17:01:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960573 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=redhat.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="PLQ89hO+"; 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 41vxyS4wggz9s78 for ; Wed, 22 Aug 2018 03:10:40 +1000 (AEST) Received: from localhost ([::1]:54969 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAAw-0007zw-6c for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:10:38 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33279) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4T-0001mC-TF for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4K-0006Vp-G5 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:54 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:32907) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4A-0005u1-OB for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:42 -0400 Received: by mail-wr1-x442.google.com with SMTP id v90-v6so13315608wrc.0 for ; Tue, 21 Aug 2018 10:03:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=r+rd8USqZiQA7AIPOODLo5M3+oy+S8SUGnXEBO8Qrbk=; b=PLQ89hO+6APE3C/pIXkUsZimNuJtnzmeCB7Pl2rwZD7cXum8xOCPbzG3wunlhCUUkw pAG1pMgZmB05PZpbJKuT9c+5Awo0E68NWLjWKzOD/i1q9D6sdwIw+ft6+aKUh2bxhQIG +uaDg/KpKNCfFXEeM3JNocyCvUCv5zyE0BcOXl1S4oTlNnWJ6eGjks0GLxZ6wOlD9f3n ZbW718kLy7QCSzVCQD0BR7hbmOXCx73D4XhvKmhhLET41eb+Dg3BiBj3m9JnvOwK1wMB XZvVhUAmvM6fbKTUqJy/nfsLQLyhMxKk4pN8bFAnmtlBB5NvrHtIzvd1RCWQBQ5SRW4k 1hXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=r+rd8USqZiQA7AIPOODLo5M3+oy+S8SUGnXEBO8Qrbk=; b=Y1ZkhNe5UVJXy0QR0l9Bau0co7PAvMovbO8FXKtJnXfeWG7IWSB0AFh6coHbbx9Q/e RyPJwmUlwmLBzXFLuVJXPaMXpcGfRIOZmWpCoMmPwDudGCQYvppLkc9VzK9knYJacI0o kJ6PASfcZHKwZE/a5W8toV5CZm21DmWEbayb+PnIx1hrby6ucF0fFzToGBFo4Oc/zvX0 630rIoamIcJ0DU5NLCRUBOknXy+P1vf3qsQBkLYDSWRbYGzny2ifXOTuja1Qo+ARWriG VOpYxr2M1xqjbNMcNs7yr2lcqz7Sa1j0M1xe9KEnoqq1qAqHzSh0ARwRUA02enekWAC6 CJWQ== X-Gm-Message-State: AOUpUlGJUhK5pxgaxxV0foVOfRMogH0C3+jWin2QDmnmoymRB0tmcNz2 gaJQR/twc1n5w46yec0PkOqvN+3g X-Google-Smtp-Source: AA+uWPxc5D/ktfBzrrNu+4XdTUkbJYlBXoWARmmO8x0ENz1MTew0Pf83sFgfRuH+BWUvRpmnxbD3MQ== X-Received: by 2002:adf:9b11:: with SMTP id b17-v6mr34777326wrc.119.1534871003122; Tue, 21 Aug 2018 10:03:23 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:22 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:50 +0200 Message-Id: <1534870966-9287-19-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::442 Subject: [Qemu-devel] [PULL 18/74] qsp: QEMU's Synchronization Profiler 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" The goal of this module is to profile synchronization primitives (i.e. mutexes, recursive mutexes and condition variables) so that scalability issues can be quickly diagnosed. Sync primitives are profiled by QSP based on the vaddr of the object accessed as well as the call site (file:line_nr). That means the same object called from two different call sites will be tracked in separate entries, which might be reported together or separately (see subsequent commit on call site coalescing). Some perf numbers: Host: Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz Command: taskset -c 0 tests/atomic_add-bench -d 5 -m - Before: 54.80 Mops/s - After: 54.75 Mops/s That is, a negligible slowdown due to the now indirect call to qemu_mutex_lock. Note that using a branch instead of an indirect call introduces a more severe slowdown (53.65 Mops/s, i.e. 2% slowdown). Enabling the profiler (with -p, added in this series) is more interesting: - No profiling: 54.75 Mops/s - W/ profiling: 12.53 Mops/s That is, a 4.36X slowdown. We can break down this slowdown by removing the get_clock calls or the entry lookup: - No profiling: 54.75 Mops/s - W/o get_clock: 25.37 Mops/s - W/o entry lookup: 19.30 Mops/s - W/ profiling: 12.53 Mops/s Signed-off-by: Emilio G. Cota Signed-off-by: Paolo Bonzini --- include/qemu/qht.h | 1 + include/qemu/qsp.h | 22 ++ include/qemu/thread-posix.h | 4 +- include/qemu/thread-win32.h | 5 +- include/qemu/thread.h | 65 ++++- util/Makefile.objs | 1 + util/qemu-thread-win32.c | 4 +- util/qht.c | 47 +++- util/qsp.c | 633 ++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 759 insertions(+), 23 deletions(-) create mode 100644 include/qemu/qsp.h create mode 100644 util/qsp.c diff --git a/include/qemu/qht.h b/include/qemu/qht.h index 1fb9116..c9a11cc 100644 --- a/include/qemu/qht.h +++ b/include/qemu/qht.h @@ -46,6 +46,7 @@ typedef bool (*qht_lookup_func_t)(const void *obj, const void *userp); typedef void (*qht_iter_func_t)(struct qht *ht, void *p, uint32_t h, void *up); #define QHT_MODE_AUTO_RESIZE 0x1 /* auto-resize when heavily loaded */ +#define QHT_MODE_RAW_MUTEXES 0x2 /* bypass the profiler (QSP) */ /** * qht_init - Initialize a QHT diff --git a/include/qemu/qsp.h b/include/qemu/qsp.h new file mode 100644 index 0000000..9c2bb60 --- /dev/null +++ b/include/qemu/qsp.h @@ -0,0 +1,22 @@ +/* + * qsp.c - QEMU Synchronization Profiler + * + * Copyright (C) 2018, Emilio G. Cota + * + * License: GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + * + * Note: this header file can *only* be included from thread.h. + */ +#ifndef QEMU_QSP_H +#define QEMU_QSP_H + +#include "qemu/fprintf-fn.h" + +void qsp_report(FILE *f, fprintf_function cpu_fprintf, size_t max); + +bool qsp_is_enabled(void); +void qsp_enable(void); +void qsp_disable(void); + +#endif /* QEMU_QSP_H */ diff --git a/include/qemu/thread-posix.h b/include/qemu/thread-posix.h index fd27b34..c903525 100644 --- a/include/qemu/thread-posix.h +++ b/include/qemu/thread-posix.h @@ -6,8 +6,8 @@ typedef QemuMutex QemuRecMutex; #define qemu_rec_mutex_destroy qemu_mutex_destroy -#define qemu_rec_mutex_lock qemu_mutex_lock -#define qemu_rec_mutex_trylock qemu_mutex_trylock +#define qemu_rec_mutex_lock_impl qemu_mutex_lock_impl +#define qemu_rec_mutex_trylock_impl qemu_mutex_trylock_impl #define qemu_rec_mutex_unlock qemu_mutex_unlock struct QemuMutex { diff --git a/include/qemu/thread-win32.h b/include/qemu/thread-win32.h index d668d78..50af5dd 100644 --- a/include/qemu/thread-win32.h +++ b/include/qemu/thread-win32.h @@ -19,8 +19,9 @@ struct QemuRecMutex { }; void qemu_rec_mutex_destroy(QemuRecMutex *mutex); -void qemu_rec_mutex_lock(QemuRecMutex *mutex); -int qemu_rec_mutex_trylock(QemuRecMutex *mutex); +void qemu_rec_mutex_lock_impl(QemuRecMutex *mutex, const char *file, int line); +int qemu_rec_mutex_trylock_impl(QemuRecMutex *mutex, const char *file, + int line); void qemu_rec_mutex_unlock(QemuRecMutex *mutex); struct QemuCond { diff --git a/include/qemu/thread.h b/include/qemu/thread.h index ef7bd16..c90ea47 100644 --- a/include/qemu/thread.h +++ b/include/qemu/thread.h @@ -16,6 +16,9 @@ typedef struct QemuThread QemuThread; #include "qemu/thread-posix.h" #endif +/* include QSP header once QemuMutex, QemuCond etc. are defined */ +#include "qemu/qsp.h" + #define QEMU_THREAD_JOINABLE 0 #define QEMU_THREAD_DETACHED 1 @@ -25,10 +28,51 @@ int qemu_mutex_trylock_impl(QemuMutex *mutex, const char *file, const int line); void qemu_mutex_lock_impl(QemuMutex *mutex, const char *file, const int line); void qemu_mutex_unlock_impl(QemuMutex *mutex, const char *file, const int line); -#define qemu_mutex_lock(mutex) \ - qemu_mutex_lock_impl(mutex, __FILE__, __LINE__) -#define qemu_mutex_trylock(mutex) \ - qemu_mutex_trylock_impl(mutex, __FILE__, __LINE__) +typedef void (*QemuMutexLockFunc)(QemuMutex *m, const char *f, int l); +typedef int (*QemuMutexTrylockFunc)(QemuMutex *m, const char *f, int l); +typedef void (*QemuRecMutexLockFunc)(QemuRecMutex *m, const char *f, int l); +typedef int (*QemuRecMutexTrylockFunc)(QemuRecMutex *m, const char *f, int l); +typedef void (*QemuCondWaitFunc)(QemuCond *c, QemuMutex *m, const char *f, + int l); + +extern QemuMutexLockFunc qemu_mutex_lock_func; +extern QemuMutexTrylockFunc qemu_mutex_trylock_func; +extern QemuRecMutexLockFunc qemu_rec_mutex_lock_func; +extern QemuRecMutexTrylockFunc qemu_rec_mutex_trylock_func; +extern QemuCondWaitFunc qemu_cond_wait_func; + +/* convenience macros to bypass the profiler */ +#define qemu_mutex_lock__raw(m) \ + qemu_mutex_lock_impl(m, __FILE__, __LINE__) +#define qemu_mutex_trylock__raw(m) \ + qemu_mutex_trylock_impl(m, __FILE__, __LINE__) + +#define qemu_mutex_lock(m) ({ \ + QemuMutexLockFunc _f = atomic_read(&qemu_mutex_lock_func); \ + _f(m, __FILE__, __LINE__); \ + }) + +#define qemu_mutex_trylock(m) ({ \ + QemuMutexTrylockFunc _f = atomic_read(&qemu_mutex_trylock_func); \ + _f(m, __FILE__, __LINE__); \ + }) + +#define qemu_rec_mutex_lock(m) ({ \ + QemuRecMutexLockFunc _f = atomic_read(&qemu_rec_mutex_lock_func); \ + _f(m, __FILE__, __LINE__); \ + }) + +#define qemu_rec_mutex_trylock(m) ({ \ + QemuRecMutexTrylockFunc _f; \ + _f = atomic_read(&qemu_rec_mutex_trylock_func); \ + _f(m, __FILE__, __LINE__); \ + }) + +#define qemu_cond_wait(c, m) ({ \ + QemuCondWaitFunc _f = atomic_read(&qemu_cond_wait_func); \ + _f(c, m, __FILE__, __LINE__); \ + }) + #define qemu_mutex_unlock(mutex) \ qemu_mutex_unlock_impl(mutex, __FILE__, __LINE__) @@ -47,6 +91,16 @@ static inline void (qemu_mutex_unlock)(QemuMutex *mutex) qemu_mutex_unlock(mutex); } +static inline void (qemu_rec_mutex_lock)(QemuRecMutex *mutex) +{ + qemu_rec_mutex_lock(mutex); +} + +static inline int (qemu_rec_mutex_trylock)(QemuRecMutex *mutex) +{ + return qemu_rec_mutex_trylock(mutex); +} + /* Prototypes for other functions are in thread-posix.h/thread-win32.h. */ void qemu_rec_mutex_init(QemuRecMutex *mutex); @@ -63,9 +117,6 @@ void qemu_cond_broadcast(QemuCond *cond); void qemu_cond_wait_impl(QemuCond *cond, QemuMutex *mutex, const char *file, const int line); -#define qemu_cond_wait(cond, mutex) \ - qemu_cond_wait_impl(cond, mutex, __FILE__, __LINE__) - static inline void (qemu_cond_wait)(QemuCond *cond, QemuMutex *mutex) { qemu_cond_wait(cond, mutex); diff --git a/util/Makefile.objs b/util/Makefile.objs index e1c3fed..e958116 100644 --- a/util/Makefile.objs +++ b/util/Makefile.objs @@ -44,6 +44,7 @@ util-obj-y += log.o util-obj-y += pagesize.o util-obj-y += qdist.o util-obj-y += qht.o +util-obj-y += qsp.o util-obj-y += range.o util-obj-y += stats64.o util-obj-y += systemd.o diff --git a/util/qemu-thread-win32.c b/util/qemu-thread-win32.c index b303188..4a363ca 100644 --- a/util/qemu-thread-win32.c +++ b/util/qemu-thread-win32.c @@ -97,13 +97,13 @@ void qemu_rec_mutex_destroy(QemuRecMutex *mutex) DeleteCriticalSection(&mutex->lock); } -void qemu_rec_mutex_lock(QemuRecMutex *mutex) +void qemu_rec_mutex_lock_impl(QemuRecMutex *mutex, const char *file, int line) { assert(mutex->initialized); EnterCriticalSection(&mutex->lock); } -int qemu_rec_mutex_trylock(QemuRecMutex *mutex) +int qemu_rec_mutex_trylock_impl(QemuRecMutex *mutex, const char *file, int line) { assert(mutex->initialized); return !TryEnterCriticalSection(&mutex->lock); diff --git a/util/qht.c b/util/qht.c index c138777..1e3a072 100644 --- a/util/qht.c +++ b/util/qht.c @@ -90,6 +90,33 @@ #endif /* + * Do _not_ use qemu_mutex_[try]lock directly! Use these macros, otherwise + * the profiler (QSP) will deadlock. + */ +static inline void qht_lock(struct qht *ht) +{ + if (ht->mode & QHT_MODE_RAW_MUTEXES) { + qemu_mutex_lock__raw(&ht->lock); + } else { + qemu_mutex_lock(&ht->lock); + } +} + +static inline int qht_trylock(struct qht *ht) +{ + if (ht->mode & QHT_MODE_RAW_MUTEXES) { + return qemu_mutex_trylock__raw(&(ht)->lock); + } + return qemu_mutex_trylock(&(ht)->lock); +} + +/* this inline is not really necessary, but it helps keep code consistent */ +static inline void qht_unlock(struct qht *ht) +{ + qemu_mutex_unlock(&ht->lock); +} + +/* * Note: reading partially-updated pointers in @pointers could lead to * segfaults. We thus access them with atomic_read/set; this guarantees * that the compiler makes all those accesses atomic. We also need the @@ -254,10 +281,10 @@ void qht_map_lock_buckets__no_stale(struct qht *ht, struct qht_map **pmap) qht_map_unlock_buckets(map); /* we raced with a resize; acquire ht->lock to see the updated ht->map */ - qemu_mutex_lock(&ht->lock); + qht_lock(ht); map = ht->map; qht_map_lock_buckets(map); - qemu_mutex_unlock(&ht->lock); + qht_unlock(ht); *pmap = map; return; } @@ -288,11 +315,11 @@ struct qht_bucket *qht_bucket_lock__no_stale(struct qht *ht, uint32_t hash, qemu_spin_unlock(&b->lock); /* we raced with a resize; acquire ht->lock to see the updated ht->map */ - qemu_mutex_lock(&ht->lock); + qht_lock(ht); map = ht->map; b = qht_map_to_bucket(map, hash); qemu_spin_lock(&b->lock); - qemu_mutex_unlock(&ht->lock); + qht_unlock(ht); *pmap = map; return b; } @@ -430,13 +457,13 @@ bool qht_reset_size(struct qht *ht, size_t n_elems) n_buckets = qht_elems_to_buckets(n_elems); - qemu_mutex_lock(&ht->lock); + qht_lock(ht); map = ht->map; if (n_buckets != map->n_buckets) { new = qht_map_create(n_buckets); } qht_do_resize_and_reset(ht, new); - qemu_mutex_unlock(&ht->lock); + qht_unlock(ht); return !!new; } @@ -565,7 +592,7 @@ static __attribute__((noinline)) void qht_grow_maybe(struct qht *ht) * If the lock is taken it probably means there's an ongoing resize, * so bail out. */ - if (qemu_mutex_trylock(&ht->lock)) { + if (qht_trylock(ht)) { return; } map = ht->map; @@ -575,7 +602,7 @@ static __attribute__((noinline)) void qht_grow_maybe(struct qht *ht) qht_do_resize(ht, new); } - qemu_mutex_unlock(&ht->lock); + qht_unlock(ht); } bool qht_insert(struct qht *ht, void *p, uint32_t hash, void **existing) @@ -788,7 +815,7 @@ bool qht_resize(struct qht *ht, size_t n_elems) size_t n_buckets = qht_elems_to_buckets(n_elems); size_t ret = false; - qemu_mutex_lock(&ht->lock); + qht_lock(ht); if (n_buckets != ht->map->n_buckets) { struct qht_map *new; @@ -796,7 +823,7 @@ bool qht_resize(struct qht *ht, size_t n_elems) qht_do_resize(ht, new); ret = true; } - qemu_mutex_unlock(&ht->lock); + qht_unlock(ht); return ret; } diff --git a/util/qsp.c b/util/qsp.c new file mode 100644 index 0000000..c5fce4b --- /dev/null +++ b/util/qsp.c @@ -0,0 +1,633 @@ +/* + * qsp.c - QEMU Synchronization Profiler + * + * Copyright (C) 2018, Emilio G. Cota + * + * License: GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + * + * QSP profiles the time spent in synchronization primitives, which can + * help diagnose performance problems, e.g. scalability issues when + * contention is high. + * + * The primitives currently supported are mutexes, recursive mutexes and + * condition variables. Note that not all related functions are intercepted; + * instead we profile only those functions that can have a performance impact, + * either due to blocking (e.g. cond_wait, mutex_lock) or cache line + * contention (e.g. mutex_lock, mutex_trylock). + * + * QSP's design focuses on speed and scalability. This is achieved + * by having threads do their profiling entirely on thread-local data. + * The appropriate thread-local data is found via a QHT, i.e. a concurrent hash + * table. To aggregate data in order to generate a report, we iterate over + * all entries in the hash table. Depending on the number of threads and + * synchronization objects this might be expensive, but note that it is + * very rarely called -- reports are generated only when requested by users. + * + * Reports are generated as a table where each row represents a call site. A + * call site is the triplet formed by the __file__ and __LINE__ of the caller + * as well as the address of the "object" (i.e. mutex, rec. mutex or condvar) + * being operated on. Focusing on call sites instead of just on objects might + * seem puzzling. However, it is a sensible choice since otherwise dealing with + * dynamically-allocated objects becomes difficult (e.g. what to do when an + * object is destroyed, or reused?). Furthermore, the call site info is of most + * importance, since it is callers, and not objects, what cause wait time. + * + * Alternative designs considered: + * + * - Use an off-the-shelf profiler such as mutrace. This is not a viable option + * for us because QEMU has __malloc_hook set (by one of the libraries it + * uses); leaving this hook unset is required to avoid deadlock in mutrace. + * + * - Use a glib HT for each thread, protecting each HT with its own lock. + * This isn't simpler than the current design, and is 10% slower in the + * atomic_add-bench microbenchmark (-m option). + * + * - For reports, just use a binary tree as we aggregate data, instead of having + * an intermediate hash table. This would simplify the code only slightly, but + * would perform badly if there were many threads and objects to track. + * + * Related Work: + * - Lennart Poettering's mutrace: http://0pointer.de/blog/projects/mutrace.html + * - Lozi, David, Thomas, Lawall and Muller. "Remote Core Locking: Migrating + * Critical-Section Execution to Improve the Performance of Multithreaded + * Applications", USENIX ATC'12. + */ +#include "qemu/osdep.h" +#include "qemu/thread.h" +#include "qemu/timer.h" +#include "qemu/qht.h" +#include "exec/tb-hash-xx.h" + +enum QSPType { + QSP_MUTEX, + QSP_REC_MUTEX, + QSP_CONDVAR, +}; + +struct QSPCallSite { + const void *obj; + const char *file; /* i.e. __FILE__; shortened later */ + int line; + enum QSPType type; +}; +typedef struct QSPCallSite QSPCallSite; + +struct QSPEntry { + void *thread_ptr; + const QSPCallSite *callsite; + uint64_t n_acqs; + uint64_t ns; +#ifndef CONFIG_ATOMIC64 + /* + * If we cannot update the counts atomically, then use a seqlock. + * We don't need an associated lock because the updates are thread-local. + */ + QemuSeqLock sequence; +#endif +}; +typedef struct QSPEntry QSPEntry; + +/* initial sizing for hash tables */ +#define QSP_INITIAL_SIZE 64 + +/* If this file is moved, QSP_REL_PATH should be updated accordingly */ +#define QSP_REL_PATH "util/qsp.c" + +/* this file's full path. Used to present all call sites with relative paths */ +static size_t qsp_qemu_path_len; + +/* the address of qsp_thread gives us a unique 'thread ID' */ +static __thread int qsp_thread; + +/* + * Call sites are the same for all threads, so we track them in a separate hash + * table to save memory. + */ +static struct qht qsp_callsite_ht; + +static struct qht qsp_ht; +static bool qsp_initialized, qsp_initializing; + +static const char * const qsp_typenames[] = { + [QSP_MUTEX] = "mutex", + [QSP_REC_MUTEX] = "rec_mutex", + [QSP_CONDVAR] = "condvar", +}; + +QemuMutexLockFunc qemu_mutex_lock_func = qemu_mutex_lock_impl; +QemuMutexTrylockFunc qemu_mutex_trylock_func = qemu_mutex_trylock_impl; +QemuRecMutexLockFunc qemu_rec_mutex_lock_func = qemu_rec_mutex_lock_impl; +QemuRecMutexTrylockFunc qemu_rec_mutex_trylock_func = + qemu_rec_mutex_trylock_impl; +QemuCondWaitFunc qemu_cond_wait_func = qemu_cond_wait_impl; + +/* + * It pays off to _not_ hash callsite->file; hashing a string is slow, and + * without it we still get a pretty unique hash. + */ +static inline +uint32_t do_qsp_callsite_hash(const QSPCallSite *callsite, uint64_t a) +{ + uint64_t b = (uint64_t)(uintptr_t)callsite->obj; + uint32_t e = callsite->line; + uint32_t f = callsite->type; + + return tb_hash_func7(a, b, e, f, 0); +} + +static inline +uint32_t qsp_callsite_hash(const QSPCallSite *callsite) +{ + return do_qsp_callsite_hash(callsite, 0); +} + +static inline uint32_t do_qsp_entry_hash(const QSPEntry *entry, uint64_t a) +{ + return do_qsp_callsite_hash(entry->callsite, a); +} + +static uint32_t qsp_entry_hash(const QSPEntry *entry) +{ + return do_qsp_entry_hash(entry, (uint64_t)(uintptr_t)entry->thread_ptr); +} + +static uint32_t qsp_entry_no_thread_hash(const QSPEntry *entry) +{ + return do_qsp_entry_hash(entry, 0); +} + +static bool qsp_callsite_cmp(const void *ap, const void *bp) +{ + const QSPCallSite *a = ap; + const QSPCallSite *b = bp; + + return a == b || + (a->obj == b->obj && + a->line == b->line && + a->type == b->type && + (a->file == b->file || !strcmp(a->file, b->file))); +} + +static bool qsp_entry_no_thread_cmp(const void *ap, const void *bp) +{ + const QSPEntry *a = ap; + const QSPEntry *b = bp; + + return qsp_callsite_cmp(a->callsite, b->callsite); +} + +static bool qsp_entry_cmp(const void *ap, const void *bp) +{ + const QSPEntry *a = ap; + const QSPEntry *b = bp; + + return a->thread_ptr == b->thread_ptr && + qsp_callsite_cmp(a->callsite, b->callsite); +} + +/* + * Normally we'd call this from a constructor function, but we want it to work + * via libutil as well. + */ +static void qsp_do_init(void) +{ + /* make sure this file's path in the tree is up to date with QSP_REL_PATH */ + g_assert(strstr(__FILE__, QSP_REL_PATH)); + qsp_qemu_path_len = strlen(__FILE__) - strlen(QSP_REL_PATH); + + qht_init(&qsp_ht, qsp_entry_cmp, QSP_INITIAL_SIZE, + QHT_MODE_AUTO_RESIZE | QHT_MODE_RAW_MUTEXES); + qht_init(&qsp_callsite_ht, qsp_callsite_cmp, QSP_INITIAL_SIZE, + QHT_MODE_AUTO_RESIZE | QHT_MODE_RAW_MUTEXES); +} + +static __attribute__((noinline)) void qsp_init__slowpath(void) +{ + if (atomic_cmpxchg(&qsp_initializing, false, true) == false) { + qsp_do_init(); + atomic_set(&qsp_initialized, true); + } else { + while (!atomic_read(&qsp_initialized)) { + cpu_relax(); + } + } +} + +/* qsp_init() must be called from _all_ exported functions */ +static inline void qsp_init(void) +{ + if (likely(atomic_read(&qsp_initialized))) { + return; + } + qsp_init__slowpath(); +} + +static QSPCallSite *qsp_callsite_find(const QSPCallSite *orig) +{ + QSPCallSite *callsite; + uint32_t hash; + + hash = qsp_callsite_hash(orig); + callsite = qht_lookup(&qsp_callsite_ht, orig, hash); + if (callsite == NULL) { + void *existing = NULL; + + callsite = g_new(QSPCallSite, 1); + memcpy(callsite, orig, sizeof(*callsite)); + qht_insert(&qsp_callsite_ht, callsite, hash, &existing); + if (unlikely(existing)) { + g_free(callsite); + callsite = existing; + } + } + return callsite; +} + +static QSPEntry * +qsp_entry_create(struct qht *ht, const QSPEntry *entry, uint32_t hash) +{ + QSPEntry *e; + void *existing = NULL; + + e = g_new0(QSPEntry, 1); + e->thread_ptr = entry->thread_ptr; + e->callsite = qsp_callsite_find(entry->callsite); + + qht_insert(ht, e, hash, &existing); + if (unlikely(existing)) { + g_free(e); + e = existing; + } + return e; +} + +static QSPEntry * +qsp_entry_find(struct qht *ht, const QSPEntry *entry, uint32_t hash) +{ + QSPEntry *e; + + e = qht_lookup(ht, entry, hash); + if (e == NULL) { + e = qsp_entry_create(ht, entry, hash); + } + return e; +} + +/* + * Note: Entries are never removed, so callers do not have to be in an RCU + * read-side critical section. + */ +static QSPEntry *qsp_entry_get(const void *obj, const char *file, int line, + enum QSPType type) +{ + QSPCallSite callsite = { + .obj = obj, + .file = file, + .line = line, + .type = type, + }; + QSPEntry orig; + uint32_t hash; + + qsp_init(); + + orig.thread_ptr = &qsp_thread; + orig.callsite = &callsite; + + hash = qsp_entry_hash(&orig); + return qsp_entry_find(&qsp_ht, &orig, hash); +} + +/* + * @from is in the global hash table; read it atomically if the host + * supports it, otherwise use the seqlock. + */ +static void qsp_entry_aggregate(QSPEntry *to, const QSPEntry *from) +{ +#ifdef CONFIG_ATOMIC64 + to->ns += atomic_read__nocheck(&from->ns); + to->n_acqs += atomic_read__nocheck(&from->n_acqs); +#else + unsigned int version; + uint64_t ns, n_acqs; + + do { + version = seqlock_read_begin(&from->sequence); + ns = atomic_read__nocheck(&from->ns); + n_acqs = atomic_read__nocheck(&from->n_acqs); + } while (seqlock_read_retry(&from->sequence, version)); + + to->ns += ns; + to->n_acqs += n_acqs; +#endif +} + +/* + * @e is in the global hash table; it is only written to by the current thread, + * so we write to it atomically (as in "write once") to prevent torn reads. + * If the host doesn't support u64 atomics, use the seqlock. + */ +static inline void do_qsp_entry_record(QSPEntry *e, int64_t delta, bool acq) +{ +#ifndef CONFIG_ATOMIC64 + seqlock_write_begin(&e->sequence); +#endif + atomic_set__nocheck(&e->ns, e->ns + delta); + if (acq) { + atomic_set__nocheck(&e->n_acqs, e->n_acqs + 1); + } +#ifndef CONFIG_ATOMIC64 + seqlock_write_end(&e->sequence); +#endif +} + +static inline void qsp_entry_record(QSPEntry *e, int64_t delta) +{ + do_qsp_entry_record(e, delta, true); +} + +#define QSP_GEN_VOID(type_, qsp_t_, func_, impl_) \ + static void func_(type_ *obj, const char *file, int line) \ + { \ + QSPEntry *e; \ + int64_t t0, t1; \ + \ + t0 = get_clock(); \ + impl_(obj, file, line); \ + t1 = get_clock(); \ + \ + e = qsp_entry_get(obj, file, line, qsp_t_); \ + qsp_entry_record(e, t1 - t0); \ + } + +#define QSP_GEN_RET1(type_, qsp_t_, func_, impl_) \ + static int func_(type_ *obj, const char *file, int line) \ + { \ + QSPEntry *e; \ + int64_t t0, t1; \ + int err; \ + \ + t0 = get_clock(); \ + err = impl_(obj, file, line); \ + t1 = get_clock(); \ + \ + e = qsp_entry_get(obj, file, line, qsp_t_); \ + do_qsp_entry_record(e, t1 - t0, !err); \ + return err; \ + } + +QSP_GEN_VOID(QemuMutex, QSP_MUTEX, qsp_mutex_lock, qemu_mutex_lock_impl) +QSP_GEN_RET1(QemuMutex, QSP_MUTEX, qsp_mutex_trylock, qemu_mutex_trylock_impl) + +QSP_GEN_VOID(QemuRecMutex, QSP_REC_MUTEX, qsp_rec_mutex_lock, + qemu_rec_mutex_lock_impl) +QSP_GEN_RET1(QemuRecMutex, QSP_REC_MUTEX, qsp_rec_mutex_trylock, + qemu_rec_mutex_trylock_impl) + +#undef QSP_GEN_RET1 +#undef QSP_GEN_VOID + +static void +qsp_cond_wait(QemuCond *cond, QemuMutex *mutex, const char *file, int line) +{ + QSPEntry *e; + int64_t t0, t1; + + t0 = get_clock(); + qemu_cond_wait_impl(cond, mutex, file, line); + t1 = get_clock(); + + e = qsp_entry_get(cond, file, line, QSP_CONDVAR); + qsp_entry_record(e, t1 - t0); +} + +bool qsp_is_enabled(void) +{ + return atomic_read(&qemu_mutex_lock_func) == qsp_mutex_lock; +} + +void qsp_enable(void) +{ + atomic_set(&qemu_mutex_lock_func, qsp_mutex_lock); + atomic_set(&qemu_mutex_trylock_func, qsp_mutex_trylock); + atomic_set(&qemu_rec_mutex_lock_func, qsp_rec_mutex_lock); + atomic_set(&qemu_rec_mutex_trylock_func, qsp_rec_mutex_trylock); + atomic_set(&qemu_cond_wait_func, qsp_cond_wait); +} + +void qsp_disable(void) +{ + atomic_set(&qemu_mutex_lock_func, qemu_mutex_lock_impl); + atomic_set(&qemu_mutex_trylock_func, qemu_mutex_trylock_impl); + atomic_set(&qemu_rec_mutex_lock_func, qemu_rec_mutex_lock_impl); + atomic_set(&qemu_rec_mutex_trylock_func, qemu_rec_mutex_trylock_impl); + atomic_set(&qemu_cond_wait_func, qemu_cond_wait_impl); +} + +static gint qsp_tree_cmp(gconstpointer ap, gconstpointer bp, gpointer up) +{ + const QSPEntry *a = ap; + const QSPEntry *b = bp; + const QSPCallSite *ca; + const QSPCallSite *cb; + + if (a->ns > b->ns) { + return -1; + } else if (a->ns < b->ns) { + return 1; + } + ca = a->callsite; + cb = b->callsite; + /* Break the tie with the object's address */ + if (ca->obj < cb->obj) { + return -1; + } else if (ca->obj > cb->obj) { + return 1; + } else { + int cmp; + + /* same obj. Break the tie with the callsite's file */ + cmp = strcmp(ca->file, cb->file); + if (cmp) { + return cmp; + } + /* same callsite file. Break the tie with the callsite's line */ + g_assert(ca->line != cb->line); + if (ca->line < cb->line) { + return -1; + } else if (ca->line > cb->line) { + return 1; + } else { + /* break the tie with the callsite's type */ + return cb->type - ca->type; + } + } +} + +static void qsp_sort(struct qht *ht, void *p, uint32_t h, void *userp) +{ + QSPEntry *e = p; + GTree *tree = userp; + + g_tree_insert(tree, e, NULL); +} + +static void qsp_aggregate(struct qht *global_ht, void *p, uint32_t h, void *up) +{ + struct qht *ht = up; + const QSPEntry *e = p; + QSPEntry *agg; + uint32_t hash; + + hash = qsp_entry_no_thread_hash(e); + agg = qsp_entry_find(ht, e, hash); + qsp_entry_aggregate(agg, e); +} + +static void qsp_mktree(GTree *tree) +{ + struct qht ht; + + /* Aggregate all results from the global hash table into a local one */ + qht_init(&ht, qsp_entry_no_thread_cmp, QSP_INITIAL_SIZE, + QHT_MODE_AUTO_RESIZE | QHT_MODE_RAW_MUTEXES); + qht_iter(&qsp_ht, qsp_aggregate, &ht); + + /* sort the hash table elements by using a tree */ + qht_iter(&ht, qsp_sort, tree); + + /* free the hash table, but keep the elements (those are in the tree now) */ + qht_destroy(&ht); +} + +/* free string with g_free */ +static char *qsp_at(const QSPCallSite *callsite) +{ + GString *s = g_string_new(NULL); + const char *shortened; + + /* remove the absolute path to qemu */ + if (unlikely(strlen(callsite->file) < qsp_qemu_path_len)) { + shortened = callsite->file; + } else { + shortened = callsite->file + qsp_qemu_path_len; + } + g_string_append_printf(s, "%s:%u", shortened, callsite->line); + return g_string_free(s, FALSE); +} + +struct QSPReportEntry { + const void *obj; + char *callsite_at; + const char *typename; + double time_s; + double ns_avg; + uint64_t n_acqs; +}; +typedef struct QSPReportEntry QSPReportEntry; + +struct QSPReport { + QSPReportEntry *entries; + size_t n_entries; + size_t max_n_entries; +}; +typedef struct QSPReport QSPReport; + +static gboolean qsp_tree_report(gpointer key, gpointer value, gpointer udata) +{ + const QSPEntry *e = key; + QSPReport *report = udata; + QSPReportEntry *entry; + + if (report->n_entries == report->max_n_entries) { + return TRUE; + } + entry = &report->entries[report->n_entries]; + report->n_entries++; + + entry->obj = e->callsite->obj; + entry->callsite_at = qsp_at(e->callsite); + entry->typename = qsp_typenames[e->callsite->type]; + entry->time_s = e->ns * 1e-9; + entry->n_acqs = e->n_acqs; + entry->ns_avg = e->n_acqs ? e->ns / e->n_acqs : 0; + return FALSE; +} + +static void +pr_report(const QSPReport *rep, FILE *f, fprintf_function pr) +{ + char *dashes; + size_t max_len = 0; + int callsite_len = 0; + int callsite_rspace; + int n_dashes; + size_t i; + + /* find out the maximum length of all 'callsite' fields */ + for (i = 0; i < rep->n_entries; i++) { + const QSPReportEntry *e = &rep->entries[i]; + size_t len = strlen(e->callsite_at); + + if (len > max_len) { + max_len = len; + } + } + + callsite_len = MAX(max_len, strlen("Call site")); + /* white space to leave to the right of "Call site" */ + callsite_rspace = callsite_len - strlen("Call site"); + + pr(f, "Type Object Call site%*s Wait Time (s) " + " Count Average (us)\n", callsite_rspace, ""); + + /* build a horizontal rule with dashes */ + n_dashes = 79 + callsite_rspace; + dashes = g_malloc(n_dashes + 1); + memset(dashes, '-', n_dashes); + dashes[n_dashes] = '\0'; + pr(f, "%s\n", dashes); + + for (i = 0; i < rep->n_entries; i++) { + const QSPReportEntry *e = &rep->entries[i]; + + pr(f, "%-9s %14p %s%*s %13.5f %12" PRIu64 " %12.2f\n", e->typename, + e->obj, e->callsite_at, callsite_len - (int)strlen(e->callsite_at), + "", e->time_s, e->n_acqs, e->ns_avg * 1e-3); + } + + pr(f, "%s\n", dashes); + g_free(dashes); +} + +static void report_destroy(QSPReport *rep) +{ + size_t i; + + for (i = 0; i < rep->n_entries; i++) { + QSPReportEntry *e = &rep->entries[i]; + + g_free(e->callsite_at); + } + g_free(rep->entries); +} + +void qsp_report(FILE *f, fprintf_function cpu_fprintf, size_t max) +{ + GTree *tree = g_tree_new_full(qsp_tree_cmp, NULL, g_free, NULL); + QSPReport rep; + + qsp_init(); + + rep.entries = g_new0(QSPReportEntry, max); + rep.n_entries = 0; + rep.max_n_entries = max; + + qsp_mktree(tree); + g_tree_foreach(tree, qsp_tree_report, &rep); + g_tree_destroy(tree); + + pr_report(&rep, f, cpu_fprintf); + report_destroy(&rep); +} From patchwork Tue Aug 21 17:01:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960624 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=redhat.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="p4ZUtQD8"; 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 41vyDS4rFbz9s3Z for ; Wed, 22 Aug 2018 03:22:48 +1000 (AEST) Received: from localhost ([::1]:55037 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAMg-0003yu-Ac for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:22:46 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33195) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4P-0001jX-2I for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4E-0006NS-PG for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:46 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:45267) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA47-0005uV-S4 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:37 -0400 Received: by mail-wr1-x442.google.com with SMTP id 20-v6so10506583wrb.12 for ; Tue, 21 Aug 2018 10:03:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=ZFAkLSAeNumaaH5nOgvVyBsq4ocBKO5IfEbwaiKNGJ4=; b=p4ZUtQD87TtSUy/8oePvTNey28htYSShAQrmIvDVIGZOmJjOZhtmWURmn8XjCcxGQq cTNZsw4RkHYJaJ+qeOqazHvCbe4YDg2ur5Ye4sS8inv0J3ENto7Fy1xOCNzXSjYfiOjm BDibno1QPmbPe/NSi/RrTCXo0C9dc7xz0dNNez1I+Zu59n1lsjl+BDIEXkJglPNdBdxi jCBRkIPBBd6uo+XFwRmwDKS1PhUajwQZO/9oszyXK3jEmbKgZmEkLpwLp1NOCOKNU7U+ sf2bJERZ+0sxNpGwst6YhhaU7qXuq0T5SOBfIl9LZJMDCuc/KAEyGKkkM39lifHdzhw3 cc8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=ZFAkLSAeNumaaH5nOgvVyBsq4ocBKO5IfEbwaiKNGJ4=; b=XVkiruSnbnKqykQqBk4yfdhtzA3ZPBpLzVbJtro+Dzmzi++Zhy3rk4a0v4BaMBnMBb CJ5/ggvcRXpFpxM467KvEbrvLbqJXphq8wVW1cvYiq/kI1QJiN/GYh4HsWCrA2LIG1tZ RVZPcxZUjg5fJ+JsyBwx4hwLqjnGsJy5oJiLfgDDokVmujbP0LNCZfNfX6knu26UPt6U kRDD412caf96x67p9IsgQCovq8iUVkUpSkNmgJFxK1XMQrIxzx3zkkjSmVSl0P0j1Xm4 cOblU43SeBWr59/Yz5wVD0R1qRUntKCoNrRveBei7WaN/yRHAx7UaUkPm/N3xZGW8IXW LdPA== X-Gm-Message-State: AOUpUlGSkvUKHclyK9iUPSM5SKXbr0aT5fCIgq9UUOXwenxVms8DP2YX 3ZWLxz38+9c5yLEQRtpm9OvfA5Yz X-Google-Smtp-Source: AA+uWPzUjjH3sQVljuklU0ZPS5roh1u3nhBQG6J7nGUbFCLUMxcXqD0PBKGxFdKbablrwtEoP6neFw== X-Received: by 2002:adf:81a3:: with SMTP id 32-v6mr34285608wra.9.1534871004008; Tue, 21 Aug 2018 10:03:24 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:23 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:51 +0200 Message-Id: <1534870966-9287-20-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::442 Subject: [Qemu-devel] [PULL 19/74] qsp: add sort_by option to qsp_report 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" Signed-off-by: Emilio G. Cota Signed-off-by: Paolo Bonzini --- include/qemu/qsp.h | 8 +++++++- util/qsp.c | 33 +++++++++++++++++++++++++++------ 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/include/qemu/qsp.h b/include/qemu/qsp.h index 9c2bb60..209480b 100644 --- a/include/qemu/qsp.h +++ b/include/qemu/qsp.h @@ -13,7 +13,13 @@ #include "qemu/fprintf-fn.h" -void qsp_report(FILE *f, fprintf_function cpu_fprintf, size_t max); +enum QSPSortBy { + QSP_SORT_BY_TOTAL_WAIT_TIME, + QSP_SORT_BY_AVG_WAIT_TIME, +}; + +void qsp_report(FILE *f, fprintf_function cpu_fprintf, size_t max, + enum QSPSortBy sort_by); bool qsp_is_enabled(void); void qsp_enable(void); diff --git a/util/qsp.c b/util/qsp.c index c5fce4b..80dbd4c 100644 --- a/util/qsp.c +++ b/util/qsp.c @@ -429,14 +429,34 @@ static gint qsp_tree_cmp(gconstpointer ap, gconstpointer bp, gpointer up) { const QSPEntry *a = ap; const QSPEntry *b = bp; + enum QSPSortBy sort_by = *(enum QSPSortBy *)up; const QSPCallSite *ca; const QSPCallSite *cb; - if (a->ns > b->ns) { - return -1; - } else if (a->ns < b->ns) { - return 1; + switch (sort_by) { + case QSP_SORT_BY_TOTAL_WAIT_TIME: + if (a->ns > b->ns) { + return -1; + } else if (a->ns < b->ns) { + return 1; + } + break; + case QSP_SORT_BY_AVG_WAIT_TIME: + { + double avg_a = a->n_acqs ? a->ns / a->n_acqs : 0; + double avg_b = b->n_acqs ? b->ns / b->n_acqs : 0; + + if (avg_a > avg_b) { + return -1; + } else if (avg_a < avg_b) { + return 1; + } + break; } + default: + g_assert_not_reached(); + } + ca = a->callsite; cb = b->callsite; /* Break the tie with the object's address */ @@ -613,9 +633,10 @@ static void report_destroy(QSPReport *rep) g_free(rep->entries); } -void qsp_report(FILE *f, fprintf_function cpu_fprintf, size_t max) +void qsp_report(FILE *f, fprintf_function cpu_fprintf, size_t max, + enum QSPSortBy sort_by) { - GTree *tree = g_tree_new_full(qsp_tree_cmp, NULL, g_free, NULL); + GTree *tree = g_tree_new_full(qsp_tree_cmp, &sort_by, g_free, NULL); QSPReport rep; qsp_init(); From patchwork Tue Aug 21 17:01:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960626 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=redhat.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="MyYqC39f"; 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 41vyDm1S85z9s3Z for ; Wed, 22 Aug 2018 03:23:04 +1000 (AEST) Received: from localhost ([::1]:55042 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAMv-0004AD-SC for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:23:01 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33157) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4M-0001hV-To for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA49-0006FC-6Q for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:44 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:37034) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA3z-0005wo-Ij for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:31 -0400 Received: by mail-wr1-x442.google.com with SMTP id u12-v6so16461248wrr.4 for ; Tue, 21 Aug 2018 10:03:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=PqC73kbg/Q5/0rJ6SUcm1XeC+VJnEpv1c0foIGcv1GI=; b=MyYqC39foEhKlrFHtYT6VamDVDFNSJDRH4IRNn4BudbRbUHtMwHwUXPjSPDTYeaI5O KeZbUXNgFSzU/ZzbeT1/WOOp9oDcK6naZg6YhPrQyZGEglEtpSUR9utbfP60yYvirtkQ p8v5QHCW+jlEtU+BFiR5pLA/aJOodanB+pYLjV0zuB3Uurq9p55I/WxVCO5NUb3LyBR+ qMQO09V/kTPbGfcXC4lItsLycRSf7O6iFJDXnjwtVj7yyqXsc7HGNKrsYFhoyKmtGzSe BcyOEPeHgg8NedICBkRV40BmiopDsP7KWbPALiyd4Vf6sh+Wh0l3TMx+zz8WnI9Re+Le 6Y8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=PqC73kbg/Q5/0rJ6SUcm1XeC+VJnEpv1c0foIGcv1GI=; b=MXklycrUnNbS4eHxlIASJB5itX0mTkCSJNwQ4Hjt/V4VHwdK+fxr7THhAWGh8c+4Fg WEreaINvVP1KOuoDCUreyTiWzfm7EWXrt9+ir83ZG1FrXYY4OdB5ySaeCYBSzK/9Ey8T da1EzvUGIybIpF03tCrLEw+WNaEt5CspdyPSYnZC0HAswH500IDY1WzXPBdUjcOVnu3Z 8LWvme3UIFDukqJ+IzyiCJzO0s+FbjkThxu6gjOToIQkLUTcHicettO/2caXJLIJP31W 79cGr3Ayj6U1WEWagmOCBu6nt7lTjlRP2o9eZUhcWW3ZQwjIfmSMk6dJ3Av9C2IOzyQu m85A== X-Gm-Message-State: AOUpUlGqFbH3tQrNw/oJGcsb+8ntrdev2mWnBgKajvQHtGriftSqsZZO +SOo9iG0Mc9RhENX+UK8pRxdIOrZ X-Google-Smtp-Source: ANB0VdZlqVrRdoYhZKP5Q1Jj1jQAc6PmyL+pFenVBGVQ6qfIwDcmLVRQ14GxUjDE+fTFJDEariDHyg== X-Received: by 2002:adf:8567:: with SMTP id 94-v6mr12157761wrh.223.1534871004956; Tue, 21 Aug 2018 10:03:24 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:24 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:52 +0200 Message-Id: <1534870966-9287-21-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::442 Subject: [Qemu-devel] [PULL 20/74] qsp: add qsp_reset 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" I first implemented this by deleting all entries in the global hash table. But doing that safely slows down profiling, since we'd need to introduce rcu_read_lock/unlock in the fast path. What's implemented here avoids messing with the thread-local data in the global hash table. It achieves this by taking a snapshot of the current state, so that subsequent reports present the delta wrt to the snapshot. Signed-off-by: Emilio G. Cota Signed-off-by: Paolo Bonzini --- include/qemu/qsp.h | 1 + util/qsp.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) diff --git a/include/qemu/qsp.h b/include/qemu/qsp.h index 209480b..f8c6c96 100644 --- a/include/qemu/qsp.h +++ b/include/qemu/qsp.h @@ -24,5 +24,6 @@ void qsp_report(FILE *f, fprintf_function cpu_fprintf, size_t max, bool qsp_is_enabled(void); void qsp_enable(void); void qsp_disable(void); +void qsp_reset(void); #endif /* QEMU_QSP_H */ diff --git a/util/qsp.c b/util/qsp.c index 80dbd4c..4b1308b 100644 --- a/util/qsp.c +++ b/util/qsp.c @@ -47,6 +47,11 @@ * an intermediate hash table. This would simplify the code only slightly, but * would perform badly if there were many threads and objects to track. * + * - Wrap operations on qsp entries with RCU read-side critical sections, so + * that qsp_reset() can delete entries. Unfortunately, the overhead of calling + * rcu_read_lock/unlock slows down atomic_add-bench -m by 24%. Having + * a snapshot that is updated on qsp_reset() avoids this overhead. + * * Related Work: * - Lennart Poettering's mutrace: http://0pointer.de/blog/projects/mutrace.html * - Lozi, David, Thomas, Lawall and Muller. "Remote Core Locking: Migrating @@ -57,6 +62,7 @@ #include "qemu/thread.h" #include "qemu/timer.h" #include "qemu/qht.h" +#include "qemu/rcu.h" #include "exec/tb-hash-xx.h" enum QSPType { @@ -88,6 +94,12 @@ struct QSPEntry { }; typedef struct QSPEntry QSPEntry; +struct QSPSnapshot { + struct rcu_head rcu; + struct qht ht; +}; +typedef struct QSPSnapshot QSPSnapshot; + /* initial sizing for hash tables */ #define QSP_INITIAL_SIZE 64 @@ -107,6 +119,7 @@ static __thread int qsp_thread; static struct qht qsp_callsite_ht; static struct qht qsp_ht; +static QSPSnapshot *qsp_snapshot; static bool qsp_initialized, qsp_initializing; static const char * const qsp_typenames[] = { @@ -505,15 +518,69 @@ static void qsp_aggregate(struct qht *global_ht, void *p, uint32_t h, void *up) qsp_entry_aggregate(agg, e); } +static void qsp_iter_diff(struct qht *orig, void *p, uint32_t hash, void *htp) +{ + struct qht *ht = htp; + QSPEntry *old = p; + QSPEntry *new; + + new = qht_lookup(ht, old, hash); + /* entries are never deleted, so we must have this one */ + g_assert(new != NULL); + /* our reading of the stats happened after the snapshot was taken */ + g_assert(new->n_acqs >= old->n_acqs); + g_assert(new->ns >= old->ns); + + new->n_acqs -= old->n_acqs; + new->ns -= old->ns; + + /* No point in reporting an empty entry */ + if (new->n_acqs == 0 && new->ns == 0) { + bool removed = qht_remove(ht, new, hash); + + g_assert(removed); + g_free(new); + } +} + +static void qsp_diff(struct qht *orig, struct qht *new) +{ + qht_iter(orig, qsp_iter_diff, new); +} + +static void qsp_ht_delete(struct qht *ht, void *p, uint32_t h, void *htp) +{ + g_free(p); +} + static void qsp_mktree(GTree *tree) { + QSPSnapshot *snap; struct qht ht; + /* + * First, see if there's a prior snapshot, so that we read the global hash + * table _after_ the snapshot has been created, which guarantees that + * the entries we'll read will be a superset of the snapshot's entries. + * + * We must remain in an RCU read-side critical section until we're done + * with the snapshot. + */ + rcu_read_lock(); + snap = atomic_rcu_read(&qsp_snapshot); + /* Aggregate all results from the global hash table into a local one */ qht_init(&ht, qsp_entry_no_thread_cmp, QSP_INITIAL_SIZE, QHT_MODE_AUTO_RESIZE | QHT_MODE_RAW_MUTEXES); qht_iter(&qsp_ht, qsp_aggregate, &ht); + /* compute the difference wrt the snapshot, if any */ + if (snap) { + qsp_diff(&snap->ht, &ht); + } + /* done with the snapshot; RCU can reclaim it */ + rcu_read_unlock(); + /* sort the hash table elements by using a tree */ qht_iter(&ht, qsp_sort, tree); @@ -652,3 +719,30 @@ void qsp_report(FILE *f, fprintf_function cpu_fprintf, size_t max, pr_report(&rep, f, cpu_fprintf); report_destroy(&rep); } + +static void qsp_snapshot_destroy(QSPSnapshot *snap) +{ + qht_iter(&snap->ht, qsp_ht_delete, NULL); + qht_destroy(&snap->ht); + g_free(snap); +} + +void qsp_reset(void) +{ + QSPSnapshot *new = g_new(QSPSnapshot, 1); + QSPSnapshot *old; + + qsp_init(); + + qht_init(&new->ht, qsp_entry_cmp, QSP_INITIAL_SIZE, + QHT_MODE_AUTO_RESIZE | QHT_MODE_RAW_MUTEXES); + + /* take a snapshot of the current state */ + qht_iter(&qsp_ht, qsp_aggregate, &new->ht); + + /* replace the previous snapshot, if any */ + old = atomic_xchg(&qsp_snapshot, new); + if (old) { + call_rcu(old, qsp_snapshot_destroy, rcu); + } +} From patchwork Tue Aug 21 17:01:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960627 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=redhat.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="E7QBsFzv"; 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 41vyHj0mt4z9s7X for ; Wed, 22 Aug 2018 03:25:36 +1000 (AEST) Received: from localhost ([::1]:55050 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAPO-0006V3-4j for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:25:34 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33415) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4X-0001us-70 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4U-0006iI-21 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:00 -0400 Received: from mail-wm0-x231.google.com ([2a00:1450:400c:c09::231]:50857) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4P-0005y7-1U for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:55 -0400 Received: by mail-wm0-x231.google.com with SMTP id s12-v6so3659467wmc.0 for ; Tue, 21 Aug 2018 10:03:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=aKdbKm6MOitl3DHt96ctY+9n2ZPEKlbsVln9S2flHIU=; b=E7QBsFzvAtzJiZZJNN7KNmA+WngBme9u0ki6R0BG9spJFpEmssJCR2FSobPLaJTU+z EOL0bgEwIS8WSkgVzXpOGkVYUcrSQUNG/PJLRdt/7BP8nduOlYsPN9qNP4g3P0VtEa+o c+LJ98OS/0BpXLMrLpmm9ZCBVaM/Qu73BZ9RUInZ5qMN7k7GEEpqbDg7Ospim9Al/By9 HqoF68/26D+EHq7QDsTRYP6yGcUMHySOYvyhoj+3hdzQUKxbvl1h0kDXUbq+iK6Nhaui 9nCBaY+Me8N94jmqObgfVvdRoj8BcquqA5dkODWz7pURimTTt2cFdtxOacvv4OR6+0b6 PHfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=aKdbKm6MOitl3DHt96ctY+9n2ZPEKlbsVln9S2flHIU=; b=mEkdgHmMEIH9BbU8egT8R6KTR2rDatwrh3B/DbdgrDOobxGmLMkAUr7GEBedJgrg/S dEd46BaUs1KFhsqWNQw/tHVbLf7mFgRQRu0Ncmj8JqI0j7nOpgvm1Zd4Xzp071Ts9mMi 5I6EtfeDWAAEK6R47lLSGcNIcjdmfkrqCO4CzXezXOXdUfdT9Tj3Tjlt4dwnb3XE+fyF gnqyrHa6RlwKpQGu9T9a6mZ+yEl1GfUT3dZ7s1SXApwWDL82n1kaqiBeNraF1vLDjKfS PL6WSHQ/YAylEaOsM7CPExZ6iKyiI+yXx5THMoAErRc5d6n12/8tLu3d/un4NLYmpOWu gCfA== X-Gm-Message-State: APzg51ANB2zc+Jy7DEe0dCTpt98u6aDEGy3Eb/jWZA1zRUrUi8Rk+4IQ 5NRvfsIdhaW1wEHEE7NjxDG/NvpE X-Google-Smtp-Source: ANB0VdY7+9kB/mJOpb9opukfemtdo1uDZ9kRFgN45+F2tK0Ljbhdm8VVHgevlOsyPeM84dd4xosaZQ== X-Received: by 2002:a1c:6d17:: with SMTP id i23-v6mr124513wmc.139.1534871006003; Tue, 21 Aug 2018 10:03:26 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:25 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:53 +0200 Message-Id: <1534870966-9287-22-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::231 Subject: [Qemu-devel] [PULL 21/74] qsp: support call site coalescing 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" Signed-off-by: Emilio G. Cota Signed-off-by: Paolo Bonzini --- include/qemu/qsp.h | 2 +- util/qsp.c | 102 +++++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 89 insertions(+), 15 deletions(-) diff --git a/include/qemu/qsp.h b/include/qemu/qsp.h index f8c6c96..a94c464 100644 --- a/include/qemu/qsp.h +++ b/include/qemu/qsp.h @@ -19,7 +19,7 @@ enum QSPSortBy { }; void qsp_report(FILE *f, fprintf_function cpu_fprintf, size_t max, - enum QSPSortBy sort_by); + enum QSPSortBy sort_by, bool callsite_coalesce); bool qsp_is_enabled(void); void qsp_enable(void); diff --git a/util/qsp.c b/util/qsp.c index 4b1308b..4dc851e 100644 --- a/util/qsp.c +++ b/util/qsp.c @@ -27,11 +27,9 @@ * Reports are generated as a table where each row represents a call site. A * call site is the triplet formed by the __file__ and __LINE__ of the caller * as well as the address of the "object" (i.e. mutex, rec. mutex or condvar) - * being operated on. Focusing on call sites instead of just on objects might - * seem puzzling. However, it is a sensible choice since otherwise dealing with - * dynamically-allocated objects becomes difficult (e.g. what to do when an - * object is destroyed, or reused?). Furthermore, the call site info is of most - * importance, since it is callers, and not objects, what cause wait time. + * being operated on. Optionally, call sites that operate on different objects + * of the same type can be coalesced, which can be particularly useful when + * profiling dynamically-allocated objects. * * Alternative designs considered: * @@ -84,6 +82,7 @@ struct QSPEntry { const QSPCallSite *callsite; uint64_t n_acqs; uint64_t ns; + unsigned int n_objs; /* count of coalesced objs; only used for reporting */ #ifndef CONFIG_ATOMIC64 /* * If we cannot update the counts atomically, then use a seqlock. @@ -170,6 +169,17 @@ static uint32_t qsp_entry_no_thread_hash(const QSPEntry *entry) return do_qsp_entry_hash(entry, 0); } +/* without the objects we need to hash the file name to get a decent hash */ +static uint32_t qsp_entry_no_thread_obj_hash(const QSPEntry *entry) +{ + const QSPCallSite *callsite = entry->callsite; + uint64_t a = g_str_hash(callsite->file); + uint64_t b = callsite->line; + uint32_t e = callsite->type; + + return tb_hash_func7(a, b, e, 0, 0); +} + static bool qsp_callsite_cmp(const void *ap, const void *bp) { const QSPCallSite *a = ap; @@ -182,6 +192,17 @@ static bool qsp_callsite_cmp(const void *ap, const void *bp) (a->file == b->file || !strcmp(a->file, b->file))); } +static bool qsp_callsite_no_obj_cmp(const void *ap, const void *bp) +{ + const QSPCallSite *a = ap; + const QSPCallSite *b = bp; + + return a == b || + (a->line == b->line && + a->type == b->type && + (a->file == b->file || !strcmp(a->file, b->file))); +} + static bool qsp_entry_no_thread_cmp(const void *ap, const void *bp) { const QSPEntry *a = ap; @@ -190,6 +211,14 @@ static bool qsp_entry_no_thread_cmp(const void *ap, const void *bp) return qsp_callsite_cmp(a->callsite, b->callsite); } +static bool qsp_entry_no_thread_obj_cmp(const void *ap, const void *bp) +{ + const QSPEntry *a = ap; + const QSPEntry *b = bp; + + return qsp_callsite_no_obj_cmp(a->callsite, b->callsite); +} + static bool qsp_entry_cmp(const void *ap, const void *bp) { const QSPEntry *a = ap; @@ -548,15 +577,36 @@ static void qsp_diff(struct qht *orig, struct qht *new) qht_iter(orig, qsp_iter_diff, new); } +static void +qsp_iter_callsite_coalesce(struct qht *orig, void *p, uint32_t h, void *htp) +{ + struct qht *ht = htp; + QSPEntry *old = p; + QSPEntry *e; + uint32_t hash; + + hash = qsp_entry_no_thread_obj_hash(old); + e = qht_lookup(ht, old, hash); + if (e == NULL) { + e = qsp_entry_create(ht, old, hash); + e->n_objs = 1; + } else if (e->callsite->obj != old->callsite->obj) { + e->n_objs++; + } + e->ns += old->ns; + e->n_acqs += old->n_acqs; +} + static void qsp_ht_delete(struct qht *ht, void *p, uint32_t h, void *htp) { g_free(p); } -static void qsp_mktree(GTree *tree) +static void qsp_mktree(GTree *tree, bool callsite_coalesce) { QSPSnapshot *snap; - struct qht ht; + struct qht ht, coalesce_ht; + struct qht *htp; /* * First, see if there's a prior snapshot, so that we read the global hash @@ -581,11 +631,23 @@ static void qsp_mktree(GTree *tree) /* done with the snapshot; RCU can reclaim it */ rcu_read_unlock(); + htp = &ht; + if (callsite_coalesce) { + qht_init(&coalesce_ht, qsp_entry_no_thread_obj_cmp, QSP_INITIAL_SIZE, + QHT_MODE_AUTO_RESIZE | QHT_MODE_RAW_MUTEXES); + qht_iter(&ht, qsp_iter_callsite_coalesce, &coalesce_ht); + + /* free the previous hash table, and point htp to coalesce_ht */ + qht_iter(&ht, qsp_ht_delete, NULL); + qht_destroy(&ht); + htp = &coalesce_ht; + } + /* sort the hash table elements by using a tree */ - qht_iter(&ht, qsp_sort, tree); + qht_iter(htp, qsp_sort, tree); /* free the hash table, but keep the elements (those are in the tree now) */ - qht_destroy(&ht); + qht_destroy(htp); } /* free string with g_free */ @@ -611,6 +673,7 @@ struct QSPReportEntry { double time_s; double ns_avg; uint64_t n_acqs; + unsigned int n_objs; }; typedef struct QSPReportEntry QSPReportEntry; @@ -634,6 +697,7 @@ static gboolean qsp_tree_report(gpointer key, gpointer value, gpointer udata) report->n_entries++; entry->obj = e->callsite->obj; + entry->n_objs = e->n_objs; entry->callsite_at = qsp_at(e->callsite); entry->typename = qsp_typenames[e->callsite->type]; entry->time_s = e->ns * 1e-9; @@ -678,10 +742,20 @@ pr_report(const QSPReport *rep, FILE *f, fprintf_function pr) for (i = 0; i < rep->n_entries; i++) { const QSPReportEntry *e = &rep->entries[i]; + GString *s = g_string_new(NULL); - pr(f, "%-9s %14p %s%*s %13.5f %12" PRIu64 " %12.2f\n", e->typename, - e->obj, e->callsite_at, callsite_len - (int)strlen(e->callsite_at), - "", e->time_s, e->n_acqs, e->ns_avg * 1e-3); + g_string_append_printf(s, "%-9s ", e->typename); + if (e->n_objs > 1) { + g_string_append_printf(s, "[%12u]", e->n_objs); + } else { + g_string_append_printf(s, "%14p", e->obj); + } + g_string_append_printf(s, " %s%*s %13.5f %12" PRIu64 " %12.2f\n", + e->callsite_at, + callsite_len - (int)strlen(e->callsite_at), "", + e->time_s, e->n_acqs, e->ns_avg * 1e-3); + pr(f, "%s", s->str); + g_string_free(s, TRUE); } pr(f, "%s\n", dashes); @@ -701,7 +775,7 @@ static void report_destroy(QSPReport *rep) } void qsp_report(FILE *f, fprintf_function cpu_fprintf, size_t max, - enum QSPSortBy sort_by) + enum QSPSortBy sort_by, bool callsite_coalesce) { GTree *tree = g_tree_new_full(qsp_tree_cmp, &sort_by, g_free, NULL); QSPReport rep; @@ -712,7 +786,7 @@ void qsp_report(FILE *f, fprintf_function cpu_fprintf, size_t max, rep.n_entries = 0; rep.max_n_entries = max; - qsp_mktree(tree); + qsp_mktree(tree, callsite_coalesce); g_tree_foreach(tree, qsp_tree_report, &rep); g_tree_destroy(tree); From patchwork Tue Aug 21 17:01:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960630 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=redhat.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="GRGrUn4f"; 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 41vyJ663G3z9s3Z for ; Wed, 22 Aug 2018 03:25:58 +1000 (AEST) Received: from localhost ([::1]:55059 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAPk-0007ix-F6 for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:25:56 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33225) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4Q-0001kf-2x for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4H-0006Q6-0j for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:46 -0400 Received: from mail-wm0-x22c.google.com ([2a00:1450:400c:c09::22c]:33121) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA48-0005zD-AQ for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:38 -0400 Received: by mail-wm0-x22c.google.com with SMTP id i134-v6so10056936wmf.0 for ; Tue, 21 Aug 2018 10:03:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=w41FUUYLEwT5OqPffinerT0RywsBFEH9Tebqv+ixdpo=; b=GRGrUn4fS7Q3cXav0uL5pTjlecoQVkhiF5BHwM+u7fw+iIoPwZkDUGKoUUdhCX02uM pB2mV6BenF8QTvfI/R3DI/LgbiHQmHehv/KQTjPXZ5mlLHKYgIw0v3draNQR23ZtOGY8 SL8851Ha4CEly0vv8xdYTt6upHZ8BTq4D5j/1A8E1JPWx6epvvyygKn6nw62YJ3xonWq 8liGWEOSQ261GhEqECfYhp17gx5Xkt55/b51AvQk3lJZnOqRd20ejCUfyRtTkKTBH/iW cMBWIJHZb7waGPnqX2nSqdv6c/QVNAODF/qdtq24ChmY1V1JympS3ylCskfklIZ34h6Q CAeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=w41FUUYLEwT5OqPffinerT0RywsBFEH9Tebqv+ixdpo=; b=Y9YEqloIb7cQKv3qch2QfRc32u1Hy+YnXnrH68NiBq15depPv+fVl2SLh4u8REJQRc yVlimUjpXM4VJ6treMP0/magF3PdeIclnNUB9ay4ykuBW8AJur7yIlbwZMDspMsHu5Zx KU6iM8WR4IectEInZM6EsONjMs5t6k6y+z8lnSgX9XYT4tODLXpGxOFOzLNVeKwaYI3i P7DfUVoXQX2vRVJWs1kC3+Ggoq2fy0oQmAnJXCzBk6FDbAEXo0fwJfjgJsxWylDDLHvE MWBG7oOp6rVprdovQIH03fjDG57kq64H2i6Kecc7RorbBwxUMMDJ6Zyy6XEp5VZDE7w0 TTOg== X-Gm-Message-State: APzg51A/gjo/bPpwxO1t1cEuOeJ69AMAvc0f8q5mmXFBmWIPDLq3Gl/o YTf4LAVhG1AXnuUAVAltwyZc/0uY X-Google-Smtp-Source: ANB0VdbMu9Nnb6m07iv7BJZy2KLLMcZ7cJDyRIEhXJuOu+6VccjmWLrFgXssQtSDEhzM6au0Nuk30A== X-Received: by 2002:a1c:ea53:: with SMTP id i80-v6mr134036wmh.113.1534871006923; Tue, 21 Aug 2018 10:03:26 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:26 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:54 +0200 Message-Id: <1534870966-9287-23-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::22c Subject: [Qemu-devel] [PULL 22/74] qsp: track BQL callers explicitly 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" The BQL is acquired via qemu_mutex_lock_iothread(), which makes the profiler assign the associated wait time (i.e. most of BQL wait time) entirely to that function. This loses the original call site information, which does not help diagnose BQL contention. Fix it by tracking the callers explicitly. Signed-off-by: Emilio G. Cota Signed-off-by: Paolo Bonzini --- cpus.c | 10 ++++++++-- include/qemu/main-loop.h | 4 +++- include/qemu/thread.h | 1 + stubs/iothread-lock.c | 2 +- util/qsp.c | 6 ++++++ 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/cpus.c b/cpus.c index b5844b7..a5ea3ee 100644 --- a/cpus.c +++ b/cpus.c @@ -1762,10 +1762,16 @@ bool qemu_mutex_iothread_locked(void) return iothread_locked; } -void qemu_mutex_lock_iothread(void) +/* + * The BQL is taken from so many places that it is worth profiling the + * callers directly, instead of funneling them all through a single function. + */ +void qemu_mutex_lock_iothread_impl(const char *file, int line) { + QemuMutexLockFunc bql_lock = atomic_read(&qemu_bql_mutex_lock_func); + g_assert(!qemu_mutex_iothread_locked()); - qemu_mutex_lock(&qemu_global_mutex); + bql_lock(&qemu_global_mutex, file, line); iothread_locked = true; } diff --git a/include/qemu/main-loop.h b/include/qemu/main-loop.h index 721aa24..e59f9ae 100644 --- a/include/qemu/main-loop.h +++ b/include/qemu/main-loop.h @@ -276,7 +276,9 @@ bool qemu_mutex_iothread_locked(void); * NOTE: tools currently are single-threaded and qemu_mutex_lock_iothread * is a no-op there. */ -void qemu_mutex_lock_iothread(void); +#define qemu_mutex_lock_iothread() \ + qemu_mutex_lock_iothread_impl(__FILE__, __LINE__) +void qemu_mutex_lock_iothread_impl(const char *file, int line); /** * qemu_mutex_unlock_iothread: Unlock the main loop mutex. diff --git a/include/qemu/thread.h b/include/qemu/thread.h index c90ea47..dacebcf 100644 --- a/include/qemu/thread.h +++ b/include/qemu/thread.h @@ -35,6 +35,7 @@ typedef int (*QemuRecMutexTrylockFunc)(QemuRecMutex *m, const char *f, int l); typedef void (*QemuCondWaitFunc)(QemuCond *c, QemuMutex *m, const char *f, int l); +extern QemuMutexLockFunc qemu_bql_mutex_lock_func; extern QemuMutexLockFunc qemu_mutex_lock_func; extern QemuMutexTrylockFunc qemu_mutex_trylock_func; extern QemuRecMutexLockFunc qemu_rec_mutex_lock_func; diff --git a/stubs/iothread-lock.c b/stubs/iothread-lock.c index 9b6db2e..eb745d7 100644 --- a/stubs/iothread-lock.c +++ b/stubs/iothread-lock.c @@ -7,7 +7,7 @@ bool qemu_mutex_iothread_locked(void) return true; } -void qemu_mutex_lock_iothread(void) +void qemu_mutex_lock_iothread_impl(const char *file, int line) { } diff --git a/util/qsp.c b/util/qsp.c index 4dc851e..b0c2575 100644 --- a/util/qsp.c +++ b/util/qsp.c @@ -65,6 +65,7 @@ enum QSPType { QSP_MUTEX, + QSP_BQL_MUTEX, QSP_REC_MUTEX, QSP_CONDVAR, }; @@ -123,10 +124,12 @@ static bool qsp_initialized, qsp_initializing; static const char * const qsp_typenames[] = { [QSP_MUTEX] = "mutex", + [QSP_BQL_MUTEX] = "BQL mutex", [QSP_REC_MUTEX] = "rec_mutex", [QSP_CONDVAR] = "condvar", }; +QemuMutexLockFunc qemu_bql_mutex_lock_func = qemu_mutex_lock_impl; QemuMutexLockFunc qemu_mutex_lock_func = qemu_mutex_lock_impl; QemuMutexTrylockFunc qemu_mutex_trylock_func = qemu_mutex_trylock_impl; QemuRecMutexLockFunc qemu_rec_mutex_lock_func = qemu_rec_mutex_lock_impl; @@ -419,6 +422,7 @@ static inline void qsp_entry_record(QSPEntry *e, int64_t delta) return err; \ } +QSP_GEN_VOID(QemuMutex, QSP_BQL_MUTEX, qsp_bql_mutex_lock, qemu_mutex_lock_impl) QSP_GEN_VOID(QemuMutex, QSP_MUTEX, qsp_mutex_lock, qemu_mutex_lock_impl) QSP_GEN_RET1(QemuMutex, QSP_MUTEX, qsp_mutex_trylock, qemu_mutex_trylock_impl) @@ -453,6 +457,7 @@ void qsp_enable(void) { atomic_set(&qemu_mutex_lock_func, qsp_mutex_lock); atomic_set(&qemu_mutex_trylock_func, qsp_mutex_trylock); + atomic_set(&qemu_bql_mutex_lock_func, qsp_bql_mutex_lock); atomic_set(&qemu_rec_mutex_lock_func, qsp_rec_mutex_lock); atomic_set(&qemu_rec_mutex_trylock_func, qsp_rec_mutex_trylock); atomic_set(&qemu_cond_wait_func, qsp_cond_wait); @@ -462,6 +467,7 @@ void qsp_disable(void) { atomic_set(&qemu_mutex_lock_func, qemu_mutex_lock_impl); atomic_set(&qemu_mutex_trylock_func, qemu_mutex_trylock_impl); + atomic_set(&qemu_bql_mutex_lock_func, qemu_mutex_lock_impl); atomic_set(&qemu_rec_mutex_lock_func, qemu_rec_mutex_lock_impl); atomic_set(&qemu_rec_mutex_trylock_func, qemu_rec_mutex_trylock_impl); atomic_set(&qemu_cond_wait_func, qemu_cond_wait_impl); From patchwork Tue Aug 21 17:01:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960654 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=redhat.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="uW4KTgDi"; 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 41vyfn5mGKz9s5b for ; Wed, 22 Aug 2018 03:42:09 +1000 (AEST) Received: from localhost ([::1]:55143 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAfP-0004wd-Eo for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:42:07 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33710) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4n-0002IK-SS for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4Y-0006s0-6x for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:11 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:40233) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4X-00060q-DF for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:01 -0400 Received: by mail-wr1-x444.google.com with SMTP id n2-v6so6002026wrw.7 for ; Tue, 21 Aug 2018 10:03:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=5WPQixL0kDjl40CAT1zH1jpktdUXJCcrZdzYY0YqWmA=; b=uW4KTgDiTCZhkyC4F/h1H5ImtoGY4WhFFUIbQBAjS/qwRxrpKlF6pm8X80e9O0t7xj OPsNygAzF0z6Ancz8vTwQtHt62hbPBp+sKVCpRvLjrrHZYa1LBzMw7mh6oGTtncNVxiJ pzGwPdl2zbwQVJQ3JcydzYn189KgtzDd1CzK870/PU05A2YvMfGKIlf/vyLkas18UxBK 34i1vJ/v7bvKxRr8RvDS3YSzBKyp7oz7e5v0j1UUA//1F3gvUjFck8GfSc1MY5C5ToE4 pzQTCqGwcw/sNLt72hfjaotWaG40U5/vPMV9HuuMZZsZpKBxNz2RA2r1p2V1mEUx2Vya 5qKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=5WPQixL0kDjl40CAT1zH1jpktdUXJCcrZdzYY0YqWmA=; b=ePsXLIYeV8orvMTOW54mPOo0WQ+6IpzE0/3Sy4dBHaXitfCG1r8WTaN9Ao6bv49PGQ GaLHJsBeWu/0ZqvoKxpPqWP62EWu260trSdlpg1ZLgbDoDu2G/feQcUEIVollasQxkWz +Uo35KVNjKl5mfi6HC+NM1sZTIXESaJ3vITv6ZHJHa+9HvjVJA0xdys6t1KnXm9xfGCv wX6lFNSKXZIBkIXHZhmbqQiKyAChKXG7IaERFiH0m7XRDxd0CpSwTqR9QV7zfZ6LK+Sq xJuG7OkVx+RV5EiepTbdoVL6F9AYE5jHu+4NAizNP6GRe9EVFrh3FjK/LQen8Y7RgbeA qKaw== X-Gm-Message-State: AOUpUlESLLb9hhiQ1xBwYIpM3E60Aw1y5YFf1Zai2Di5idraQcr1UrPr aydkpju0PbQimBrBLAtxZKc9emUs X-Google-Smtp-Source: AA+uWPzE4NS1tByexOf1kl2KED3Rq66Gthc8oyhzT8MiWzH5Q2109+llUASyHMvD9dxM9HsQAuJjcQ== X-Received: by 2002:a5d:6a92:: with SMTP id s18-v6mr33305614wru.44.1534871008130; Tue, 21 Aug 2018 10:03:28 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:27 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:55 +0200 Message-Id: <1534870966-9287-24-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::444 Subject: [Qemu-devel] [PULL 23/74] tests/atomic_add-bench: add -p to enable sync profiler 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" When used together with -m, this allows us to benchmark the profiler's performance impact on qemu_mutex_lock. Signed-off-by: Emilio G. Cota Signed-off-by: Paolo Bonzini --- tests/atomic_add-bench.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/atomic_add-bench.c b/tests/atomic_add-bench.c index f96d448..2f6c72f 100644 --- a/tests/atomic_add-bench.c +++ b/tests/atomic_add-bench.c @@ -26,6 +26,7 @@ static bool test_stop; static const char commands_string[] = " -n = number of threads\n" " -m = use mutexes instead of atomic increments\n" + " -p = enable sync profiler\n" " -d = duration in seconds\n" " -r = range (will be rounded up to pow2)"; @@ -143,7 +144,7 @@ static void parse_args(int argc, char *argv[]) int c; for (;;) { - c = getopt(argc, argv, "hd:n:mr:"); + c = getopt(argc, argv, "hd:n:mpr:"); if (c < 0) { break; } @@ -160,6 +161,9 @@ static void parse_args(int argc, char *argv[]) case 'm': use_mutex = true; break; + case 'p': + qsp_enable(); + break; case 'r': range = pow2ceil(atoi(optarg)); break; From patchwork Tue Aug 21 17:01:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960616 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=redhat.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="SmN68cfY"; 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 41vy8w1cZxz9s3Z for ; Wed, 22 Aug 2018 03:19:44 +1000 (AEST) Received: from localhost ([::1]:55019 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAJh-0007Kh-Rn for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:19:41 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33166) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4M-0001hX-V7 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4C-0006Kg-LZ for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:44 -0400 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]:37896) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA47-000629-82 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:36 -0400 Received: by mail-wr1-x42a.google.com with SMTP id w11-v6so13895848wrc.5 for ; Tue, 21 Aug 2018 10:03:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=oqT4jYN12FsIEMh22TlCf0i4YliGvb8GZ/+t2om4FPs=; b=SmN68cfYnIYFrDyFXTR22TCQQqAz35F7Pde0Vu53aB3zHA4g0pq+4fsrYt3EYbYdJ7 1fIPKnRlaCmE0l435UKZMKONQjC+T8HfDGozDiTvCUVP7u5auJ/1kdfRL3lroFnO5AY3 VPP2a34ge29pS7STW8BWxhTKjLjMoc3EuBnXyb82E9dfm1T4AuZXNXJNMxynCoiv0p80 LijcGTN5gmj1Y0715RA1TAs8kVSjVMMuU2HEzpvkVvYCkR59nKp5X2O1kR2MYaldZwK2 ZP+g2+29k0ppuZBDiLAyqCBBMHH2DjzmyRXefIhrc6y2e/s4yasb8gjubkziwrbKvEMW GDdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=oqT4jYN12FsIEMh22TlCf0i4YliGvb8GZ/+t2om4FPs=; b=QUGNlo9lud7sYm1rE48jO+quIZmYpDO0wvGyCWok2greU5IGoypkZvY/NmdVZAU+mR nHrgPhr+NM81aohay5ZfSoxTPJ8Df+YFNAN2xZkp+51R3KsrtzfqKBFHV6wddHqxf4ce dVix6sLmF8UvCmCtLTYRzFPWa8oaUrJs/tULt8bB70s/zkgksAPEpFJ8Qa+TejbaYS3a W5of1wX4EbPL/5JIYAmeV1qLR65As8JDrLfEK6wY1QgwQAP5NnSSZVxk6h7whCkDMqUB Qm5MzuKRXBVbcjqpv3WE9kpP6UN/KLUGF2clNwKYBTeOKqf4whJerFA41FGPCG3XHapH yawg== X-Gm-Message-State: APzg51D4sb2SB5ajQfepWQFrCAIu10WOT6c8h91gXQrYXyBZtXU5NlH4 lK/HJJBdGahF/WsN4lBKGN3N2gwz X-Google-Smtp-Source: ANB0VdYQf+BTtoJCdDMK4ojispWu2o5tfy/6I3i1peTBzh3tkYZqk5KqgGtvFHQbg/GQEaf+fzyJxg== X-Received: by 2002:adf:ab0b:: with SMTP id q11-v6mr9075276wrc.239.1534871008996; Tue, 21 Aug 2018 10:03:28 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:28 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:56 +0200 Message-Id: <1534870966-9287-25-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42a Subject: [Qemu-devel] [PULL 24/74] vl: add -enable-sync-profile 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" Signed-off-by: Emilio G. Cota Signed-off-by: Paolo Bonzini --- qemu-options.hx | 10 ++++++++++ vl.c | 3 +++ 2 files changed, 13 insertions(+) diff --git a/qemu-options.hx b/qemu-options.hx index 5515dfa..d66ab1b 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -3953,6 +3953,16 @@ Dump json-encoded vmstate information for current machine type to file in @var{file} ETEXI +DEF("enable-sync-profile", 0, QEMU_OPTION_enable_sync_profile, + "-enable-sync-profile\n" + " enable synchronization profiling\n", + QEMU_ARCH_ALL) +STEXI +@item -enable-sync-profile +@findex -enable-sync-profile +Enable synchronization profiling. +ETEXI + STEXI @end table ETEXI diff --git a/vl.c b/vl.c index 7055df3..d2af8ed 100644 --- a/vl.c +++ b/vl.c @@ -3959,6 +3959,9 @@ int main(int argc, char **argv, char **envp) exit(1); } break; + case QEMU_OPTION_enable_sync_profile: + qsp_enable(); + break; case QEMU_OPTION_nodefconfig: case QEMU_OPTION_nouserconfig: /* Nothing to be parsed here. Especially, do not error out below. */ From patchwork Tue Aug 21 17:01:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960633 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=redhat.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="hiGJwz18"; 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 41vyM55rNcz9s3x for ; Wed, 22 Aug 2018 03:28:33 +1000 (AEST) Received: from localhost ([::1]:55070 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsASF-0001Wj-Cn for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:28:31 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33474) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4Y-0001x6-Ta for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4V-0006lg-6a for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:02 -0400 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]:33788) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4U-000645-6Y for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:58 -0400 Received: by mail-wr1-x42e.google.com with SMTP id v90-v6so13315892wrc.0 for ; Tue, 21 Aug 2018 10:03:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=06J51nv3KQBBdvxbm2k6wn9GGmgyDc2NxxrXvCm+c9U=; b=hiGJwz18znhgyEAQe1ceEcGhHvcP/+OTMhf02GzSHuEorcpC+jH6Y22k4arkO0glZD ZUu+n5BNWH2zY7RmT0hq0XF+Pho698Az+ZwN2XSK+jPKOckZvMhmkw2vphm9Fu29HEmI l5bdiS77FIQ/EwMLSNcC6E/vpxyX7ak3YMMyLNvaT6wErpAbfEvdI4JXh7ks7HLT+xpf aD3sojd3ldH3iCC+2LkyXerP32+s7nBs5dxD0vyTum1PXY7YV9p1Ewz6H0LPKcGx+Kn7 yMPEM5P0Qwr6kTnhPS/pXxLFAJwTq1Tcxw651oEQUZ/bzvY+3HxJwjdo8JmEEc6nPnNm jfnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=06J51nv3KQBBdvxbm2k6wn9GGmgyDc2NxxrXvCm+c9U=; b=Dd6dI83Bwour7t0SH1t/gxFn6KgJ9rg1vYAo8RJ5ros9dx2yJe30Py1h4ODZAaYm9o 6kPDYI9gG5fI6dO9VLMhUpSHUWYn7jh60qq48bPMhiCWtj4HPQyMBueQlNh7GlWC9oSP uZPdcB9hA7VtEyNvOqPdrLFo6U5yhsuUePrYtebSkItR68jBCtrdiQxy7tFvnAKH60py pM46kH0eTa3/yGKpAGoS5hFJt94SINTcipJ5KapTNATSd8vombQ8zsLlPpYaqemD7o1+ U4XZouZIr/ciEWoJp4wITwM/mRiw4IzmzP0d4oUGDwqP5Q2jdMzK5rkis6dNCGWj9WQc EgEQ== X-Gm-Message-State: AOUpUlGuBmo2A6uZZY7/pWA+cxHV5pmmZ8K9WLUZwKVunDuV9bd25cB7 aAcu+EFM/y4rz1EX6OmTZhzlkBfE X-Google-Smtp-Source: AA+uWPw61zxKUpTBbzqic4CPREROAkDuEFForuvyrhAS6GImTjLbbxgdC/G4dIwmTG0Bk2XykXs7Mg== X-Received: by 2002:a5d:6103:: with SMTP id v3-v6mr33376736wrt.265.1534871009857; Tue, 21 Aug 2018 10:03:29 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:29 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:57 +0200 Message-Id: <1534870966-9287-26-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42e Subject: [Qemu-devel] [PULL 25/74] hmp-commands: add sync-profile 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" The command introduced here is just for developers. This means that: - the interface implemented here could change in the future - the command is only meant to be used from HMP, not from QMP Reviewed-by: Dr. David Alan Gilbert Signed-off-by: Emilio G. Cota Signed-off-by: Paolo Bonzini --- hmp-commands.hx | 15 +++++++++++++++ hmp.c | 24 ++++++++++++++++++++++++ hmp.h | 1 + 3 files changed, 40 insertions(+) diff --git a/hmp-commands.hx b/hmp-commands.hx index c1fc747..db0c681 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -644,6 +644,21 @@ sendkey ctrl-alt-f1 This command is useful to send keys that your graphical user interface intercepts at low level, such as @code{ctrl-alt-f1} in X Window. ETEXI + { + .name = "sync-profile", + .args_type = "op:s?", + .params = "[on|off|reset]", + .help = "enable, disable or reset synchronization profiling. " + "With no arguments, prints whether profiling is on or off.", + .cmd = hmp_sync_profile, + }, + +STEXI +@item sync-profile [on|off|reset] +@findex sync-profile +Enable, disable or reset synchronization profiling. With no arguments, prints +whether profiling is on or off. +ETEXI { .name = "system_reset", diff --git a/hmp.c b/hmp.c index 2aafb50..d94a47f 100644 --- a/hmp.c +++ b/hmp.c @@ -1062,6 +1062,30 @@ void hmp_stop(Monitor *mon, const QDict *qdict) qmp_stop(NULL); } +void hmp_sync_profile(Monitor *mon, const QDict *qdict) +{ + const char *op = qdict_get_try_str(qdict, "op"); + + if (op == NULL) { + bool on = qsp_is_enabled(); + + monitor_printf(mon, "sync-profile is %s\n", on ? "on" : "off"); + return; + } + if (!strcmp(op, "on")) { + qsp_enable(); + } else if (!strcmp(op, "off")) { + qsp_disable(); + } else if (!strcmp(op, "reset")) { + qsp_reset(); + } else { + Error *err = NULL; + + error_setg(&err, QERR_INVALID_PARAMETER, op); + hmp_handle_error(mon, &err); + } +} + void hmp_system_reset(Monitor *mon, const QDict *qdict) { qmp_system_reset(NULL); diff --git a/hmp.h b/hmp.h index 33354f1..5f1addc 100644 --- a/hmp.h +++ b/hmp.h @@ -42,6 +42,7 @@ void hmp_info_tpm(Monitor *mon, const QDict *qdict); void hmp_info_iothreads(Monitor *mon, const QDict *qdict); void hmp_quit(Monitor *mon, const QDict *qdict); void hmp_stop(Monitor *mon, const QDict *qdict); +void hmp_sync_profile(Monitor *mon, const QDict *qdict); void hmp_system_reset(Monitor *mon, const QDict *qdict); void hmp_system_powerdown(Monitor *mon, const QDict *qdict); void hmp_exit_preconfig(Monitor *mon, const QDict *qdict); From patchwork Tue Aug 21 17:01:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960648 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=redhat.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="jjzJ45Ff"; 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 41vyZQ1kJRz9s3x for ; Wed, 22 Aug 2018 03:38:22 +1000 (AEST) Received: from localhost ([::1]:55121 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAbj-0001nB-RE for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:38:19 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33708) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4n-0002II-S2 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4W-0006oj-Fr for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:11 -0400 Received: from mail-wm0-x229.google.com ([2a00:1450:400c:c09::229]:40649) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4V-00067s-HC for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:59 -0400 Received: by mail-wm0-x229.google.com with SMTP id y9-v6so3497250wma.5 for ; Tue, 21 Aug 2018 10:03:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=h6WS9z0kHssG/NkCgZ50dpTkDMH3lY2uw2EuPlq3yYA=; b=jjzJ45FfDNsU+lyCOkSSgzi8yDDtM1f8DTBAAa2lEaZDWSBL74XY7Xm8wtaX9gF5Dp AFzsQPuzNQfG34i9wqfbs2U+BbiK3Id3DgeowlrcHr2u5QIBZISjvbk1F9jzglY0lGMl cGc4cNozQ3WcLLv9w9JiovGH1QDpjAr6RzrAnQMlcrZTYwtQnZ8a1waXmVGZmJe61e0r Cg79TOvEoKnMaEKnTr/r+UqWb5t4GmsCw/MhOI1EVgT5EAsFxUACh1IjBnB+GZp9sdWl gthnjzVue9G/MIJXjJt/Jq3ZEb1CV07mxC6y/SS5XM+SyUUmw7OeP/w0jXgVb6nT0qj7 +6Gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=h6WS9z0kHssG/NkCgZ50dpTkDMH3lY2uw2EuPlq3yYA=; b=knm8QW5Tgk1V3G7DS0gZvw9gAhdMhw0IgAJHR4bP4iH5/7eV1gXqWAdj6lfWOqO2X1 nYErsxwpuLjsCVZYTTKUBvVkl6cfxfpb6YABT6Y/YdpNmG6+LS9hVgmIxVAQ0SqWe82F rPny58MBzJW/IEjyFceOJlGHjrykNGgg8D/M/geCBKswOLzjpEhWqixQeYH3SG4P2PZ8 Ne6wF1Rpm+6NadRdifqkIJ2QTiWT1UYezB4v3oCSWUKNkcED66jhAUqlQEtwDeLQ+65P aLgp2NuI6Cj9wNmgFTe5sDqAJOokWJk3m/uo0wmmuoooXmHgbz4e8UPqRvVbWDN4c2rO wkIw== X-Gm-Message-State: APzg51A0SlulfgqVN/8hLNKzOab88lSWkC3YpQm0Ch/0vYPz/T56L0WQ PW52j3thaP+oZylvRUZJYTGKwClu X-Google-Smtp-Source: ANB0VdY17vnX/LasQISqn/TBoxYOMNPHo+DeoZjop9LuAO70J8VmyDxBVDBPI4gWEJ6hvEJOEjaMYA== X-Received: by 2002:a1c:e595:: with SMTP id c143-v6mr131725wmh.85.1534871011098; Tue, 21 Aug 2018 10:03:31 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:30 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:58 +0200 Message-Id: <1534870966-9287-27-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::229 Subject: [Qemu-devel] [PULL 26/74] hmp-commands-info: add sync-profile 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" The command introduced here is just for developers. This means that: - the info displayed and the output format could change in the future - the command is only meant to be used from HMP, not from QMP Sample output: (qemu) sync-profile sync-profile is off (qemu) info sync-profile Type Object Call site Wait Time (s) Count Average (us) ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- (qemu) sync-profile on (qemu) sync-profile sync-profile is on (qemu) info sync-profile 15 Type Object Call site Wait Time (s) Count Average (us) ---------------------------------------------------------------------------------------------- condvar 0x55a01813ced0 cpus.c:1165 91.38235 2842 32154.24 BQL mutex 0x55a0171b7140 cpus.c:1434 12.56490 5787 2171.23 BQL mutex 0x55a0171b7140 accel/tcg/cpu-exec.c:432 7.75846 2844 2728.01 BQL mutex 0x55a0171b7140 accel/tcg/cputlb.c:870 5.09889 2884 1767.99 BQL mutex 0x55a0171b7140 accel/tcg/cpu-exec.c:529 3.46140 3254 1063.74 BQL mutex 0x55a0171b7140 accel/tcg/cputlb.c:804 0.76333 8655 88.20 BQL mutex 0x55a0171b7140 cpus.c:1466 0.60893 2941 207.05 BQL mutex 0x55a0171b7140 util/main-loop.c:236 0.00894 6425 1.39 mutex [ 3] util/qemu-timer.c:520 0.00342 50611 0.07 mutex [ 2] util/qemu-timer.c:426 0.00254 31336 0.08 mutex [ 3] util/qemu-timer.c:234 0.00107 19275 0.06 mutex 0x55a0171d9960 vl.c:763 0.00043 6425 0.07 mutex 0x55a0180d1bb0 monitor.c:458 0.00015 1603 0.09 mutex 0x55a0180e4c78 chardev/char.c:109 0.00002 217 0.08 mutex 0x55a0180d1bb0 monitor.c:448 0.00001 162 0.08 ---------------------------------------------------------------------------------------------- (qemu) info sync-profile -m 15 Type Object Call site Wait Time (s) Count Average (us) ---------------------------------------------------------------------------------------------- condvar 0x55a01813ced0 cpus.c:1165 95.11196 3051 31174.03 BQL mutex 0x55a0171b7140 accel/tcg/cpu-exec.c:432 7.92108 3052 2595.37 BQL mutex 0x55a0171b7140 cpus.c:1434 13.38253 6210 2155.00 BQL mutex 0x55a0171b7140 accel/tcg/cputlb.c:870 5.09901 3093 1648.57 BQL mutex 0x55a0171b7140 accel/tcg/cpu-exec.c:529 4.21123 3468 1214.31 BQL mutex 0x55a0171b7140 cpus.c:1466 0.60895 3156 192.95 BQL mutex 0x55a0171b7140 accel/tcg/cputlb.c:804 0.76337 9282 82.24 BQL mutex 0x55a0171b7140 util/main-loop.c:236 0.00944 6889 1.37 mutex 0x55a01813ce80 tcg/tcg.c:397 0.00000 24 0.15 mutex 0x55a0180d1bb0 monitor.c:458 0.00018 1922 0.09 mutex [ 2] util/qemu-timer.c:426 0.00266 32710 0.08 mutex 0x55a0180e4c78 chardev/char.c:109 0.00002 260 0.08 mutex 0x55a0180d1bb0 monitor.c:448 0.00001 187 0.08 mutex 0x55a0171d9960 vl.c:763 0.00047 6889 0.07 mutex [ 3] util/qemu-timer.c:520 0.00362 53377 0.07 ---------------------------------------------------------------------------------------------- (qemu) info sync-profile -m -n 15 Type Object Call site Wait Time (s) Count Average (us) ---------------------------------------------------------------------------------------------- condvar 0x55a01813ced0 cpus.c:1165 101.39331 3398 29839.12 BQL mutex 0x55a0171b7140 accel/tcg/cpu-exec.c:432 7.92112 3399 2330.43 BQL mutex 0x55a0171b7140 cpus.c:1434 14.28280 6922 2063.39 BQL mutex 0x55a0171b7140 accel/tcg/cputlb.c:870 5.77505 3445 1676.36 BQL mutex 0x55a0171b7140 accel/tcg/cpu-exec.c:529 5.66139 3883 1457.99 BQL mutex 0x55a0171b7140 cpus.c:1466 0.60901 3519 173.06 BQL mutex 0x55a0171b7140 accel/tcg/cputlb.c:804 0.76351 10338 73.85 BQL mutex 0x55a0171b7140 util/main-loop.c:236 0.01032 7664 1.35 mutex 0x55a0180e4f08 util/qemu-timer.c:426 0.00041 901 0.45 mutex 0x55a01813ce80 tcg/tcg.c:397 0.00000 24 0.15 mutex 0x55a0180d1bb0 monitor.c:458 0.00022 2319 0.09 mutex 0x55a0180e4c78 chardev/char.c:109 0.00003 306 0.08 mutex 0x55a0180e4f08 util/qemu-timer.c:520 0.00068 8565 0.08 mutex 0x55a0180d1bb0 monitor.c:448 0.00002 215 0.08 mutex 0x55a0180e4f78 util/qemu-timer.c:426 0.00247 34224 0.07 ---------------------------------------------------------------------------------------------- (qemu) sync-profile reset (qemu) info sync-profile -m 2 Type Object Call site Wait Time (s) Count Average (us) -------------------------------------------------------------------------------------------- condvar 0x55a01813ced0 cpus.c:1165 2.78756 99 28157.12 BQL mutex 0x55a0171b7140 accel/tcg/cputlb.c:870 0.33054 102 3240.55 -------------------------------------------------------------------------------------------- (qemu) sync-profile off (qemu) sync-profile sync-profile is off (qemu) sync-profile reset (qemu) info sync-profile Type Object Call site Wait Time (s) Count Average (us) ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Reviewed-by: Dr. David Alan Gilbert Signed-off-by: Emilio G. Cota Signed-off-by: Paolo Bonzini --- hmp-commands-info.hx | 22 ++++++++++++++++++++++ monitor.c | 11 +++++++++++ 2 files changed, 33 insertions(+) diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx index 70639f6..cbee8b9 100644 --- a/hmp-commands-info.hx +++ b/hmp-commands-info.hx @@ -300,6 +300,28 @@ Show dynamic compiler opcode counters ETEXI { + .name = "sync-profile", + .args_type = "mean:-m,no_coalesce:-n,max:i?", + .params = "[-m] [-n] [max]", + .help = "show synchronization profiling info, up to max entries " + "(default: 10), sorted by total wait time. (-m: sort by " + "mean wait time; -n: do not coalesce objects with the " + "same call site)", + .cmd = hmp_info_sync_profile, + }, + +STEXI +@item info sync-profile [-m|-n] [@var{max}] +@findex info sync-profile +Show synchronization profiling info, up to @var{max} entries (default: 10), +sorted by total wait time. + -m: sort by mean wait time + -n: do not coalesce objects with the same call site +When different objects that share the same call site are coalesced, the "Object" +field shows---enclosed in brackets---the number of objects being coalesced. +ETEXI + + { .name = "kvm", .args_type = "", .params = "", diff --git a/monitor.c b/monitor.c index a1999e3..94f6735 100644 --- a/monitor.c +++ b/monitor.c @@ -1454,6 +1454,17 @@ static void hmp_info_opcount(Monitor *mon, const QDict *qdict) } #endif +static void hmp_info_sync_profile(Monitor *mon, const QDict *qdict) +{ + int64_t max = qdict_get_try_int(qdict, "max", 10); + bool mean = qdict_get_try_bool(qdict, "mean", false); + bool coalesce = !qdict_get_try_bool(qdict, "no_coalesce", false); + enum QSPSortBy sort_by; + + sort_by = mean ? QSP_SORT_BY_AVG_WAIT_TIME : QSP_SORT_BY_TOTAL_WAIT_TIME; + qsp_report((FILE *)mon, monitor_fprintf, max, sort_by, coalesce); +} + static void hmp_info_history(Monitor *mon, const QDict *qdict) { int i; From patchwork Tue Aug 21 17:01:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960615 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=redhat.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="VNviuyd0"; 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 41vy8p2LGhz9s3Z for ; Wed, 22 Aug 2018 03:19:37 +1000 (AEST) Received: from localhost ([::1]:55016 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAJa-0007G0-TF for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:19:34 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33248) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4S-0001kk-0Y for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4I-0006TX-OI for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:53 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:38389) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA49-00068m-4K for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:39 -0400 Received: by mail-wr1-x443.google.com with SMTP id w11-v6so13895971wrc.5 for ; Tue, 21 Aug 2018 10:03:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=VFm0OnaoNsKOMdgsTLDJ3UPza1uBfxIubwpfyVLYcCE=; b=VNviuyd0hi9FaT6mPa6eadt9YCNdF45XwArFFcJxbWHZ/yDnNaQ9HzWoAkptMF79DD X5lTXqRaFI51/qYdLk0nloeO8RLpYGTGXC9KJpGcVi5ozO97qVHHYdXgi+wQsP0O80/6 Wva0uZnNPgCqZ4a+ixMSj4QPynQpx40esSp5Xp3EirXlTOMGe1UyU4HwV+O9/h50CStw CqZfps4wSOJa4HzQNZ6V0fr3Zys3e5lQy6OmwGSmHj3NElrtrDc6/JG1DvY8rOEYq/SB T30Sd2Gzw5SjJZlP7MwCfbEXuTGrlEpT9J8rIhXWDLRLqRzk66OfNpMsEW2yRmLi99CK ufjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=VFm0OnaoNsKOMdgsTLDJ3UPza1uBfxIubwpfyVLYcCE=; b=TEfWFtxb0qSPC+uzEVLrLOb2ZX9kL3WnEFjCXGkGnUV1qsCPox6kv6EEwp3bwgqImY fClf8u4PUmfW6HoLuWGIyI4eEeEssTcIiwo8W+aweEVYvNlW0JU183jec/CaV8HWCmVP zE8e3IXWcaRo1w94PHrIWPVJMSNWaPuQxtLkZgCI0VauWQpvdOBRjrE585HikQgWnYoY +MN4Wktmr/uu9Gfi6voSyXXMAmqCBxnTydMf3bj/DEyAreqawThqrfolOixS9IKp/6Uu 7zr7Lww2tM8WUFNMKgFUUq8c/PtTofnrb1MFqfEsuWxWT2hxdIlvTaG7C9KU6LRkyy8m fyEQ== X-Gm-Message-State: APzg51CDaxz5i9pYgG4fT0mKAz9flp6E9KSwUJVoqPAU4prKBierXkwg 6i6CCRV1rLV2Q6ZZ2rs5rLON1H2L X-Google-Smtp-Source: ANB0VdY7WnFlDiGoIg//sKIZUzAPmr9JkSzENEsVPa+vq7pMbu6nQx2TLyupsUw+gIstx9fTBzj+0A== X-Received: by 2002:a5d:488c:: with SMTP id g12-v6mr4752504wrq.0.1534871012141; Tue, 21 Aug 2018 10:03:32 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:31 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:01:59 +0200 Message-Id: <1534870966-9287-28-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::443 Subject: [Qemu-devel] [PULL 27/74] checkpatch: allow space in more places before a bracket 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: Heinrich Schuchardt , Andrew Morton , Linus Torvalds Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Heinrich Schuchardt Allow a space between a colon and subsequent opening bracket. This sequence may occur in inline assembler statements like asm( "ldr %[out], [%[in]]\n\t" : [out] "=r" (ret) : [in] "r" (addr) ); Allow a space between a comma and subsequent opening bracket. This sequence may occur in designated initializers. To ease backporting the patch, I am also changing the comma-bracket detection (added in QEMU by commit 409db6eb7199af7a2f09f746bd1b793e9daefe5f) to use the same regex as brackets and colons (as done independently by Linux commit daebc534ac15f991961a5bb433e515988220e9bf). Link: http://lkml.kernel.org/r/20180403191655.23700-1-xypron.glpk@gmx.de Signed-off-by: Heinrich Schuchardt Acked-by: Joe Perches Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Reviewed-by: Markus Armbruster Signed-off-by: Paolo Bonzini --- scripts/checkpatch.pl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index 0553634..3765b0e 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl @@ -1929,9 +1929,8 @@ sub process { my ($where, $prefix) = ($-[1], $1); if ($prefix !~ /$Type\s+$/ && ($where != 0 || $prefix !~ /^.\s+$/) && - $prefix !~ /{\s+$/ && $prefix !~ /\#\s*define[^(]*\([^)]*\)\s+$/ && - $prefix !~ /,\s+$/) { + $prefix !~ /[,{:]\s+$/) { ERROR("space prohibited before open square bracket '['\n" . $herecurr); } } From patchwork Tue Aug 21 17:02:00 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960647 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=redhat.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="NmzT5IHL"; 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 41vyYy5MmQz9s3x for ; Wed, 22 Aug 2018 03:37:58 +1000 (AEST) Received: from localhost ([::1]:55119 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAbM-0001Sj-Bx for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:37:56 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33563) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4b-00025H-FZ for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4X-0006qB-6N for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:05 -0400 Received: from mail-wm0-x235.google.com ([2a00:1450:400c:c09::235]:34616) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4W-00069z-6U for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:00 -0400 Received: by mail-wm0-x235.google.com with SMTP id l2-v6so10114761wme.1 for ; Tue, 21 Aug 2018 10:03:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/TcyVovCYkQRHOFw1gZRcdydedJmj2io+7mxDUisnfo=; b=NmzT5IHLHQ/gfvv69f7LI2Q0x0y/qdJ8ET7YoqDgXMQuQOO7TJmoH4/NMvLJGmXApQ IVBdHEpuDjg49w7RTduJDsLBqi+LM0nJgJjNOO6FiEiTQAeSf3jap+tZ2SnwXHy0vDiO s+LLTBBmPZjvrspeJm8BUniaOQL9HD8ZmDIWXJrD3rNXefd1A1rHshHQZw9G+Wd8icrK 9YUZi0rhUR/N0ofQuoXv7F3IhXW7LfkIT8BSOT2h4jnceuIjsnYDzOpJ+Bd/MoUCCcgO b31TIzRtmoSBpBcCf/I0dcbZwrw47Iw9uiWJUs4/Wt62gq/KZRK3iDMcP4QGqxfDZ2Ur ZyJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=/TcyVovCYkQRHOFw1gZRcdydedJmj2io+7mxDUisnfo=; b=poZXY94HEwSfIjqblwplfzxjpgSgIj1K5U7ncWXzKrHBEWWNR7I3ReLvyVfsN608+/ 8PX4A3X1FTXL+ypqjleEp/XOVlgfvKYZrAwgrQoSnd2UcK0MHq2Up9vgZ72fF64tYr8a yTOa1J47gM7DF6Hzu9LYO4iAl1VkuQ0S2uBVkvu6Sbf93aPa1TZlDbdTRhbE8VULJVt0 ArakuYCGOezzDwve28chnr7G0kq9Y6+ybcLV8+SQBS1XtEMdTsVHzalLpHvwtrqOwHAG SVrbcxG2EskkFAgRrMsF5KTE94G/sW4Q9xk34k1pfo2xfPt62tjBYoXftVtQA1wavnYD Tm8A== X-Gm-Message-State: APzg51C+P9uhiQq/8himMqHrw63VSo947gxVUOIke5w0kctGVmsPwJgZ TIBWDzs16FDsRmsmxYp3TL2FF0ud X-Google-Smtp-Source: ANB0VdYqu4kfV5jUouJcuHuuKiJtPvaiptuTEDNqd8nvat1ZlzhoVK2IBlgEL73kjG8qCV1DAGHVVg== X-Received: by 2002:a1c:a401:: with SMTP id n1-v6mr129694wme.125.1534871013005; Tue, 21 Aug 2018 10:03:33 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:32 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:00 +0200 Message-Id: <1534870966-9287-29-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::235 Subject: [Qemu-devel] [PULL 28/74] update-linux-headers.sh: add qemu_fw_cfg.h 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: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau The fw_cfg header was added during 4.17 cycle. Signed-off-by: Marc-André Lureau Message-Id: <20180817155910.5722-1-marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini Signed-off-by: Marc-André Lureau --- scripts/update-linux-headers.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/update-linux-headers.sh b/scripts/update-linux-headers.sh index feb7539..0a964fe 100755 --- a/scripts/update-linux-headers.sh +++ b/scripts/update-linux-headers.sh @@ -165,7 +165,9 @@ EOF rm -rf "$output/include/standard-headers/linux" mkdir -p "$output/include/standard-headers/linux" -for i in "$tmpdir"/include/linux/*virtio*.h "$tmpdir/include/linux/input.h" \ +for i in "$tmpdir"/include/linux/*virtio*.h \ + "$tmpdir/include/linux/qemu_fw_cfg.h" \ + "$tmpdir/include/linux/input.h" \ "$tmpdir/include/linux/input-event-codes.h" \ "$tmpdir/include/linux/pci_regs.h" \ "$tmpdir/include/linux/ethtool.h" "$tmpdir/include/linux/kernel.h" \ From patchwork Tue Aug 21 17:02:01 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960682 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=redhat.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="k+uDNPiQ"; 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 41vzF34mCgz9s4Z for ; Wed, 22 Aug 2018 04:08:23 +1000 (AEST) Received: from localhost ([::1]:55299 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsB4n-0001Eb-AC for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 14:08:21 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33734) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4o-0002IS-3A for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4W-0006nw-5h for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:13 -0400 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]:52672) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4V-0006CM-3j for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:59 -0400 Received: by mail-wm0-x243.google.com with SMTP id y139-v6so853582wmc.2 for ; Tue, 21 Aug 2018 10:03:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4o9J9yXlur8SlZPCIsmS3axKoMVepqGx1oLNlmXrQWg=; b=k+uDNPiQ7kvarGZx5jcuWn2T1FyI2NKzgERaw/N4ZAWBUIa599O36xFQWI0wg7pUdn hoQECYI17mKW8WRDBA8fC2TC+MiAe3zb8GHv5tZUttA33YOdS17OIyR1rENU9tBS/tbe 2FVAfBdgNr0tec2vZCNajBfcLe+2Eu9YvXtCtZyaytqPMKAthvwk/V9ztxAXqXMl5mcV VDWTyp9nqAbGaj5/Ze0NNgY6duwXhD2IwrPM2iiIecT5iPQLkFRR6+5+jJkDr+Y5Q/H7 T329aOKOKQ5Z3g6E+HfqUbCkTCGAFXQTZ9EusXXQhNwdcy9bRo6lP1Mq8lEvxHELeDKa lluQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=4o9J9yXlur8SlZPCIsmS3axKoMVepqGx1oLNlmXrQWg=; b=qi9tHNBKTCoWO/ZQ8F+tgbg+MkqlzEQIW3r2s1l2FUTNvZG/tWUtarMcEpbOHESVET AUhHZtgUjZbV4XSNqM3FOX7uBdhwluOcJE2GVmduWgOrN5owMrjPGN3HnhjoUk5a9ATI YRd7Nheh/jAPfP9eN4laeLchDoAkY4xbbUNIIOfakw0ZP0LlUPr9DHtUryhpHHP+n7gV JVbGBqJvj/VmqahZKfjkg6QqjRpkxb4OPu64XRrqV196H/mp0Wgyiu4+loBgdTdcibOG E9wjPB1us2K55AAExbytDS7S8eBGLie2oW7grT4H15GNUc8Pas7j85g19i9xQRkdiBSq 8X5g== X-Gm-Message-State: APzg51BUBa2blxaogL9w6GQNutxqR6YiCAZnTJXHlxiGKAiWgWHZlzHX G4+F4sPwEKIhizElgq52k8KsIe5H X-Google-Smtp-Source: ANB0VdbQrBSvYry/iPwGIuTz56u7aR50ggxeQYB2+RHyahbsMeHH0Iwvn/VCnETfCAT9nSlh1tb4ag== X-Received: by 2002:a1c:99c2:: with SMTP id b185-v6mr132246wme.15.1534871015075; Tue, 21 Aug 2018 10:03:35 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:33 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:01 +0200 Message-Id: <1534870966-9287-30-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::243 Subject: [Qemu-devel] [PULL 29/74] fw_cfg: import & use linux/qemu_fw_cfg.h 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: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau Use kernel common header for fw_cfg. (unfortunately, optionrom.h must have its own define, since it's actually an assembler header) Signed-off-by: Marc-André Lureau Message-Id: <20180817155910.5722-2-marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini Signed-off-by: Marc-André Lureau --- dump.c | 2 +- hw/misc/vmcoreinfo.c | 6 +- include/hw/misc/vmcoreinfo.h | 12 +--- include/hw/nvram/fw_cfg.h | 18 +----- include/hw/nvram/fw_cfg_keys.h | 45 ------------- include/standard-headers/linux/qemu_fw_cfg.h | 97 ++++++++++++++++++++++++++++ pc-bios/optionrom/linuxboot_dma.c | 4 +- pc-bios/optionrom/optionrom.h | 15 ++++- tests/boot-order-test.c | 2 +- tests/fw_cfg-test.c | 2 +- tests/libqos/malloc-pc.c | 2 +- 11 files changed, 125 insertions(+), 80 deletions(-) delete mode 100644 include/hw/nvram/fw_cfg_keys.h create mode 100644 include/standard-headers/linux/qemu_fw_cfg.h diff --git a/dump.c b/dump.c index 04467b3..500b554 100644 --- a/dump.c +++ b/dump.c @@ -1742,7 +1742,7 @@ static void dump_init(DumpState *s, int fd, bool has_format, warn_report("guest note is not present"); } else if (size < note_head_size || size > MAX_GUEST_NOTE_SIZE) { warn_report("guest note size is invalid: %" PRIu32, size); - } else if (format != VMCOREINFO_FORMAT_ELF) { + } else if (format != FW_CFG_VMCOREINFO_FORMAT_ELF) { warn_report("guest note format is unsupported: %" PRIu16, format); } else { s->guest_note = g_malloc(size + 1); /* +1 for adding \0 */ diff --git a/hw/misc/vmcoreinfo.c b/hw/misc/vmcoreinfo.c index a280552..304c628 100644 --- a/hw/misc/vmcoreinfo.c +++ b/hw/misc/vmcoreinfo.c @@ -19,7 +19,7 @@ static void fw_cfg_vmci_write(void *dev, off_t offset, size_t len) VMCoreInfoState *s = VMCOREINFO(dev); s->has_vmcoreinfo = offset == 0 && len == sizeof(s->vmcoreinfo) - && s->vmcoreinfo.guest_format != VMCOREINFO_FORMAT_NONE; + && s->vmcoreinfo.guest_format != FW_CFG_VMCOREINFO_FORMAT_NONE; } static void vmcoreinfo_reset(void *dev) @@ -28,7 +28,7 @@ static void vmcoreinfo_reset(void *dev) s->has_vmcoreinfo = false; memset(&s->vmcoreinfo, 0, sizeof(s->vmcoreinfo)); - s->vmcoreinfo.host_format = cpu_to_le16(VMCOREINFO_FORMAT_ELF); + s->vmcoreinfo.host_format = cpu_to_le16(FW_CFG_VMCOREINFO_FORMAT_ELF); } static void vmcoreinfo_realize(DeviceState *dev, Error **errp) @@ -53,7 +53,7 @@ static void vmcoreinfo_realize(DeviceState *dev, Error **errp) return; } - fw_cfg_add_file_callback(fw_cfg, "etc/vmcoreinfo", + fw_cfg_add_file_callback(fw_cfg, FW_CFG_VMCOREINFO_FILENAME, NULL, fw_cfg_vmci_write, s, &s->vmcoreinfo, sizeof(s->vmcoreinfo), false); diff --git a/include/hw/misc/vmcoreinfo.h b/include/hw/misc/vmcoreinfo.h index c3aa856..0d11578 100644 --- a/include/hw/misc/vmcoreinfo.h +++ b/include/hw/misc/vmcoreinfo.h @@ -13,20 +13,12 @@ #define VMCOREINFO_H #include "hw/qdev.h" +#include "standard-headers/linux/qemu_fw_cfg.h" #define VMCOREINFO_DEVICE "vmcoreinfo" #define VMCOREINFO(obj) OBJECT_CHECK(VMCoreInfoState, (obj), VMCOREINFO_DEVICE) -#define VMCOREINFO_FORMAT_NONE 0x0 -#define VMCOREINFO_FORMAT_ELF 0x1 - -/* all fields are little-endian */ -typedef struct FWCfgVMCoreInfo { - uint16_t host_format; /* set on reset */ - uint16_t guest_format; - uint32_t size; - uint64_t paddr; -} QEMU_PACKED FWCfgVMCoreInfo; +typedef struct fw_cfg_vmcoreinfo FWCfgVMCoreInfo; typedef struct VMCoreInfoState { DeviceClass parent_obj; diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h index b2259cc..f5a6895 100644 --- a/include/hw/nvram/fw_cfg.h +++ b/include/hw/nvram/fw_cfg.h @@ -2,7 +2,7 @@ #define FW_CFG_H #include "exec/hwaddr.h" -#include "hw/nvram/fw_cfg_keys.h" +#include "standard-headers/linux/qemu_fw_cfg.h" #include "hw/sysbus.h" #include "sysemu/dma.h" @@ -14,12 +14,7 @@ #define FW_CFG_IO(obj) OBJECT_CHECK(FWCfgIoState, (obj), TYPE_FW_CFG_IO) #define FW_CFG_MEM(obj) OBJECT_CHECK(FWCfgMemState, (obj), TYPE_FW_CFG_MEM) -typedef struct FWCfgFile { - uint32_t size; /* file size */ - uint16_t select; /* write this to 0x510 to read it */ - uint16_t reserved; - char name[FW_CFG_MAX_FILE_PATH]; -} FWCfgFile; +typedef struct fw_cfg_file FWCfgFile; #define FW_CFG_ORDER_OVERRIDE_VGA 70 #define FW_CFG_ORDER_OVERRIDE_NIC 80 @@ -34,14 +29,7 @@ typedef struct FWCfgFiles { FWCfgFile f[]; } FWCfgFiles; -/* Control as first field allows for different structures selected by this - * field, which might be useful in the future - */ -typedef struct FWCfgDmaAccess { - uint32_t control; - uint32_t length; - uint64_t address; -} QEMU_PACKED FWCfgDmaAccess; +typedef struct fw_cfg_dma_access FWCfgDmaAccess; typedef void (*FWCfgCallback)(void *opaque); typedef void (*FWCfgWriteCallback)(void *opaque, off_t start, size_t len); diff --git a/include/hw/nvram/fw_cfg_keys.h b/include/hw/nvram/fw_cfg_keys.h deleted file mode 100644 index b691945..0000000 --- a/include/hw/nvram/fw_cfg_keys.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef FW_CFG_KEYS_H -#define FW_CFG_KEYS_H - -#define FW_CFG_SIGNATURE 0x00 -#define FW_CFG_ID 0x01 -#define FW_CFG_UUID 0x02 -#define FW_CFG_RAM_SIZE 0x03 -#define FW_CFG_NOGRAPHIC 0x04 -#define FW_CFG_NB_CPUS 0x05 -#define FW_CFG_MACHINE_ID 0x06 -#define FW_CFG_KERNEL_ADDR 0x07 -#define FW_CFG_KERNEL_SIZE 0x08 -#define FW_CFG_KERNEL_CMDLINE 0x09 -#define FW_CFG_INITRD_ADDR 0x0a -#define FW_CFG_INITRD_SIZE 0x0b -#define FW_CFG_BOOT_DEVICE 0x0c -#define FW_CFG_NUMA 0x0d -#define FW_CFG_BOOT_MENU 0x0e -#define FW_CFG_MAX_CPUS 0x0f -#define FW_CFG_KERNEL_ENTRY 0x10 -#define FW_CFG_KERNEL_DATA 0x11 -#define FW_CFG_INITRD_DATA 0x12 -#define FW_CFG_CMDLINE_ADDR 0x13 -#define FW_CFG_CMDLINE_SIZE 0x14 -#define FW_CFG_CMDLINE_DATA 0x15 -#define FW_CFG_SETUP_ADDR 0x16 -#define FW_CFG_SETUP_SIZE 0x17 -#define FW_CFG_SETUP_DATA 0x18 -#define FW_CFG_FILE_DIR 0x19 - -#define FW_CFG_FILE_FIRST 0x20 -#define FW_CFG_FILE_SLOTS_MIN 0x10 - -#define FW_CFG_WRITE_CHANNEL 0x4000 -#define FW_CFG_ARCH_LOCAL 0x8000 -#define FW_CFG_ENTRY_MASK (~(FW_CFG_WRITE_CHANNEL | FW_CFG_ARCH_LOCAL)) - -#define FW_CFG_INVALID 0xffff - -/* width in bytes of fw_cfg control register */ -#define FW_CFG_CTL_SIZE 0x02 - -#define FW_CFG_MAX_FILE_PATH 56 - -#endif diff --git a/include/standard-headers/linux/qemu_fw_cfg.h b/include/standard-headers/linux/qemu_fw_cfg.h new file mode 100644 index 0000000..cb93f66 --- /dev/null +++ b/include/standard-headers/linux/qemu_fw_cfg.h @@ -0,0 +1,97 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ +#ifndef _LINUX_FW_CFG_H +#define _LINUX_FW_CFG_H + +#include "standard-headers/linux/types.h" + +#define FW_CFG_ACPI_DEVICE_ID "QEMU0002" + +/* selector key values for "well-known" fw_cfg entries */ +#define FW_CFG_SIGNATURE 0x00 +#define FW_CFG_ID 0x01 +#define FW_CFG_UUID 0x02 +#define FW_CFG_RAM_SIZE 0x03 +#define FW_CFG_NOGRAPHIC 0x04 +#define FW_CFG_NB_CPUS 0x05 +#define FW_CFG_MACHINE_ID 0x06 +#define FW_CFG_KERNEL_ADDR 0x07 +#define FW_CFG_KERNEL_SIZE 0x08 +#define FW_CFG_KERNEL_CMDLINE 0x09 +#define FW_CFG_INITRD_ADDR 0x0a +#define FW_CFG_INITRD_SIZE 0x0b +#define FW_CFG_BOOT_DEVICE 0x0c +#define FW_CFG_NUMA 0x0d +#define FW_CFG_BOOT_MENU 0x0e +#define FW_CFG_MAX_CPUS 0x0f +#define FW_CFG_KERNEL_ENTRY 0x10 +#define FW_CFG_KERNEL_DATA 0x11 +#define FW_CFG_INITRD_DATA 0x12 +#define FW_CFG_CMDLINE_ADDR 0x13 +#define FW_CFG_CMDLINE_SIZE 0x14 +#define FW_CFG_CMDLINE_DATA 0x15 +#define FW_CFG_SETUP_ADDR 0x16 +#define FW_CFG_SETUP_SIZE 0x17 +#define FW_CFG_SETUP_DATA 0x18 +#define FW_CFG_FILE_DIR 0x19 + +#define FW_CFG_FILE_FIRST 0x20 +#define FW_CFG_FILE_SLOTS_MIN 0x10 + +#define FW_CFG_WRITE_CHANNEL 0x4000 +#define FW_CFG_ARCH_LOCAL 0x8000 +#define FW_CFG_ENTRY_MASK (~(FW_CFG_WRITE_CHANNEL | FW_CFG_ARCH_LOCAL)) + +#define FW_CFG_INVALID 0xffff + +/* width in bytes of fw_cfg control register */ +#define FW_CFG_CTL_SIZE 0x02 + +/* fw_cfg "file name" is up to 56 characters (including terminating nul) */ +#define FW_CFG_MAX_FILE_PATH 56 + +/* size in bytes of fw_cfg signature */ +#define FW_CFG_SIG_SIZE 4 + +/* FW_CFG_ID bits */ +#define FW_CFG_VERSION 0x01 +#define FW_CFG_VERSION_DMA 0x02 + +/* fw_cfg file directory entry type */ +struct fw_cfg_file { + uint32_t size; + uint16_t select; + uint16_t reserved; + char name[FW_CFG_MAX_FILE_PATH]; +}; + +/* FW_CFG_DMA_CONTROL bits */ +#define FW_CFG_DMA_CTL_ERROR 0x01 +#define FW_CFG_DMA_CTL_READ 0x02 +#define FW_CFG_DMA_CTL_SKIP 0x04 +#define FW_CFG_DMA_CTL_SELECT 0x08 +#define FW_CFG_DMA_CTL_WRITE 0x10 + +#define FW_CFG_DMA_SIGNATURE 0x51454d5520434647ULL /* "QEMU CFG" */ + +/* Control as first field allows for different structures selected by this + * field, which might be useful in the future + */ +struct fw_cfg_dma_access { + uint32_t control; + uint32_t length; + uint64_t address; +}; + +#define FW_CFG_VMCOREINFO_FILENAME "etc/vmcoreinfo" + +#define FW_CFG_VMCOREINFO_FORMAT_NONE 0x0 +#define FW_CFG_VMCOREINFO_FORMAT_ELF 0x1 + +struct fw_cfg_vmcoreinfo { + uint16_t host_format; + uint16_t guest_format; + uint32_t size; + uint64_t paddr; +}; + +#endif diff --git a/pc-bios/optionrom/linuxboot_dma.c b/pc-bios/optionrom/linuxboot_dma.c index 4754282..d856d41 100644 --- a/pc-bios/optionrom/linuxboot_dma.c +++ b/pc-bios/optionrom/linuxboot_dma.c @@ -58,8 +58,6 @@ asm( " jmp load_kernel\n" ); -#include "../../include/hw/nvram/fw_cfg_keys.h" - /* QEMU_CFG_DMA_CONTROL bits */ #define BIOS_CFG_DMA_CTL_ERROR 0x01 #define BIOS_CFG_DMA_CTL_READ 0x02 @@ -73,6 +71,8 @@ asm( #define uint32_t unsigned int #define uint16_t unsigned short +#include "../../include/standard-headers/linux/qemu_fw_cfg.h" + #define barrier() asm("" : : : "memory") typedef struct FWCfgDmaAccess { diff --git a/pc-bios/optionrom/optionrom.h b/pc-bios/optionrom/optionrom.h index 6c4c2c8..a2b612f 100644 --- a/pc-bios/optionrom/optionrom.h +++ b/pc-bios/optionrom/optionrom.h @@ -19,7 +19,20 @@ */ -#include "../../include/hw/nvram/fw_cfg_keys.h" +#define FW_CFG_KERNEL_ADDR 0x07 +#define FW_CFG_KERNEL_SIZE 0x08 +#define FW_CFG_KERNEL_CMDLINE 0x09 +#define FW_CFG_INITRD_ADDR 0x0a +#define FW_CFG_INITRD_SIZE 0x0b +#define FW_CFG_KERNEL_ENTRY 0x10 +#define FW_CFG_KERNEL_DATA 0x11 +#define FW_CFG_INITRD_DATA 0x12 +#define FW_CFG_CMDLINE_ADDR 0x13 +#define FW_CFG_CMDLINE_SIZE 0x14 +#define FW_CFG_CMDLINE_DATA 0x15 +#define FW_CFG_SETUP_ADDR 0x16 +#define FW_CFG_SETUP_SIZE 0x17 +#define FW_CFG_SETUP_DATA 0x18 #define BIOS_CFG_IOPORT_CFG 0x510 #define BIOS_CFG_IOPORT_DATA 0x511 diff --git a/tests/boot-order-test.c b/tests/boot-order-test.c index 9d98c48..c60ebcf 100644 --- a/tests/boot-order-test.c +++ b/tests/boot-order-test.c @@ -14,7 +14,7 @@ #include "libqos/fw_cfg.h" #include "libqtest.h" #include "qapi/qmp/qdict.h" -#include "hw/nvram/fw_cfg_keys.h" +#include "standard-headers/linux/qemu_fw_cfg.h" /* TODO actually test the results and get rid of this */ #define qmp_discard_response(...) qobject_unref(qmp(__VA_ARGS__)) diff --git a/tests/fw_cfg-test.c b/tests/fw_cfg-test.c index 1548bf1..1c5103f 100644 --- a/tests/fw_cfg-test.c +++ b/tests/fw_cfg-test.c @@ -13,7 +13,7 @@ #include "qemu/osdep.h" #include "libqtest.h" -#include "hw/nvram/fw_cfg_keys.h" +#include "standard-headers/linux/qemu_fw_cfg.h" #include "libqos/fw_cfg.h" static uint64_t ram_size = 128 << 20; diff --git a/tests/libqos/malloc-pc.c b/tests/libqos/malloc-pc.c index 634b9c2..b83cb8f 100644 --- a/tests/libqos/malloc-pc.c +++ b/tests/libqos/malloc-pc.c @@ -14,7 +14,7 @@ #include "libqos/malloc-pc.h" #include "libqos/fw_cfg.h" -#include "hw/nvram/fw_cfg_keys.h" +#include "standard-headers/linux/qemu_fw_cfg.h" #include "qemu-common.h" From patchwork Tue Aug 21 17:02:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960674 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=redhat.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="m1R5Jf9k"; 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 41vz1W2Pf5z9s4Z for ; Wed, 22 Aug 2018 03:58:23 +1000 (AEST) Received: from localhost ([::1]:55228 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAv6-00074T-ST for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:58:20 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33719) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4n-0002IN-UU for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4X-0006rA-Qj for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:11 -0400 Received: from mail-wm0-x235.google.com ([2a00:1450:400c:c09::235]:36956) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4W-0006Eo-Rw for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:01 -0400 Received: by mail-wm0-x235.google.com with SMTP id n11-v6so3495222wmc.2 for ; Tue, 21 Aug 2018 10:03:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=yYniDVJ66Ihkr5EOqoebwbknbiqg/1Ykdp7lFZ0OLf0=; b=m1R5Jf9kuVzLmmd0cGsHjH6pNl/OoneerBfKCnS716qnJugWC/eHe0WDKQrcTjdRqH btXG3Gq6muyHNXaeE58xDHhKfX0RDkUfT5/9uE9ZZpMNnF9qaWUAbw9zhBnd3GDw0YQT 91Ja9gF2Y5XWtwUSXgBL6EsQhgioxT/ut0lQB1fheFzA1Y+B+4FVW2tz+cng89IFAQ7H ShVpzj2kxFW+BavGNJ1HzPHrBOSM8xjUdbeLcibI+gWMv+O0XWmDLoA/Mllk52NgS202 h/YQsQz7nscDj2/3kL/gUwBkxms6xkUr006JRH9355tWGquo6E9s/q7HHUSYfplsgMid 9E4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=yYniDVJ66Ihkr5EOqoebwbknbiqg/1Ykdp7lFZ0OLf0=; b=pE87V1vZOax9pkl7PdIjl7P0kP6xflrolY+VfQE3wkocMZFMUt6Uv4ZcuzaE4jCteK NKTe9owbiNibRj1uQDMl9d3d/FwLW+RroxwsZ5wIK4svGSwkoO5LaRNscxqM6Vsz3pca Df/DmJckuqcawMZBqk+3So9NKitsMwQYhcOLiuPRECNFAj0P3vciA7YoIJnrkmwvMWiK 9ZHpAwOk15xCj4AC+fVm53/jSzmgMzZLvreP4zxeBi9jXbqUOQh5ieilc0ReIg7SpS8Y 21K5rsQX7OtedwDJPcfnfL6eTMajMNHEa0Pi25CC3GQfxVx3sttd7XUfrEYej3hj7D/G vlRA== X-Gm-Message-State: APzg51BYN1+Nf1D0DO4wm3AYUr2PUQr/sQuzcf1427K5WJx+nRdNli+5 ZrusQJyGnrV69lt6RX4TEQaDEwge X-Google-Smtp-Source: ANB0VdYx43ee/K9ZHEU/erpL9r3wAX/JDi5bbvMLVGL8AQ3eog6gEkKYL8/mf2KU/EcHeh+KC1m3rQ== X-Received: by 2002:a1c:9550:: with SMTP id x77-v6mr111585wmd.135.1534871016320; Tue, 21 Aug 2018 10:03:36 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:35 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:02 +0200 Message-Id: <1534870966-9287-31-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::235 Subject: [Qemu-devel] [PULL 30/74] i386: Fix arch_query_cpu_model_expansion() leak 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: Eduardo Habkost Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Eduardo Habkost Reported by Coverity: Error: RESOURCE_LEAK (CWE-772): [#def439] qemu-2.12.0/target/i386/cpu.c:3179: alloc_fn: Storage is returned from allocation function "qdict_new". qemu-2.12.0/qobject/qdict.c:34:5: alloc_fn: Storage is returned from allocation function "g_malloc0". qemu-2.12.0/qobject/qdict.c:34:5: var_assign: Assigning: "qdict" = "g_malloc0(4120UL)". qemu-2.12.0/qobject/qdict.c:37:5: return_alloc: Returning allocated memory "qdict". qemu-2.12.0/target/i386/cpu.c:3179: var_assign: Assigning: "props" = storage returned from "qdict_new()". qemu-2.12.0/target/i386/cpu.c:3217: leaked_storage: Variable "props" going out of scope leaks the storage it points to. This was introduced by commit b8097deb359b ("i386: Improve query-cpu-model-expansion full mode"). The leak is only theoretical: if ret->model->props is set to props, the qapi_free_CpuModelExpansionInfo() call will free props too in case of errors. The only way for this to not happen is if we enter the default branch of the switch statement, which would never happen because all CpuModelExpansionType values are being handled. It's still worth to change this to make the allocation logic easier to follow and make the Coverity error go away. To make everything simpler, initialize ret->model and ret->model->props earlier in the function. While at it, remove redundant check for !prop because prop is always initialized at the beginning of the function. Fixes: b8097deb359bbbd92592b9670adfe9e245b2d0bd Signed-off-by: Eduardo Habkost Message-Id: <20180816183509.8231-1-ehabkost@redhat.com> Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 4e4fe8f..f24295e 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -3880,6 +3880,9 @@ arch_query_cpu_model_expansion(CpuModelExpansionType type, } props = qdict_new(); + ret->model = g_new0(CpuModelInfo, 1); + ret->model->props = QOBJECT(props); + ret->model->has_props = true; switch (type) { case CPU_MODEL_EXPANSION_TYPE_STATIC: @@ -3900,15 +3903,9 @@ arch_query_cpu_model_expansion(CpuModelExpansionType type, goto out; } - if (!props) { - props = qdict_new(); - } x86_cpu_to_dict(xc, props); - ret->model = g_new0(CpuModelInfo, 1); ret->model->name = g_strdup(base_name); - ret->model->props = QOBJECT(props); - ret->model->has_props = true; out: object_unref(OBJECT(xc)); From patchwork Tue Aug 21 17:02:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960623 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=redhat.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="uncfBnQr"; 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 41vyDP6LHkz9s3Z for ; Wed, 22 Aug 2018 03:22:44 +1000 (AEST) Received: from localhost ([::1]:55035 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAMa-0003uX-9J for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:22:40 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33276) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4T-0001m9-Sd for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4M-0006YZ-UR for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:54 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:43329) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4D-0006Gs-5Y for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:45 -0400 Received: by mail-wr1-x442.google.com with SMTP id k5-v6so4943528wre.10 for ; Tue, 21 Aug 2018 10:03:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=jDb5yDbvE9AG7FTY34TqtLyVGJUokYwU3et8K0wMCgw=; b=uncfBnQr6tKcGgNenaguzL+iiSf3RyT09+/j160ZT3xNMdPO557ZBOnYcxoEs4O2oy I+NHGbTxemRt3EJpUyt1E6ZNPqHLO+7k09h0z04BwXW6yPVt/WTZjK4+gR6bQI59RYGc ercRXuklWqCXFbWeJApRtQ8Eev32Kgq/n8SG0EBLDjxB+ivg0dvYY75/irO2oQNtw+ZG ZxtymiVcNF7ZMlI2bOXymaKneWKWXNcFmfcpIJabGuS2UZ7I+fvlW7Nc+JKQvU9B+J4A 30Sd5GD97nZ78JtHOVVZnhicpTcuWHcttTQYM17vyJPqoRpSmVi260/qo5sJod3MXpwV BgVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=jDb5yDbvE9AG7FTY34TqtLyVGJUokYwU3et8K0wMCgw=; b=a8EvUqmWQtaDsKzyj8CvZ0NdVapBU+rsa6vDHa2D3YwbLQLwgRx5nsBjbUFMdlzMF3 Gxtwrl/2AaDq0f1lYep4FgjwzS1jC+PFjWFFV3E/z4gtqfSXWKeZpKrGbiCTvlcFiRFJ SfRoI2R641ty47BUNzINW1iN8TsJxkXOfygTUahoFotHwQauu9eyv1Nhe4LGolAPjvQI eO6cqB+YNNGU8DADfU1KDSWxPRi/egku4x/CMr7CmC2pkAbj4BjIP+9SVRbmJaKgSyHm 5CShnkstOBhb1A4kgpZ4ATBh58T6gJPQ6uRPaI8W23rLY5/0P1PBEhBmOXRdcwt3LI3l rV4A== X-Gm-Message-State: AOUpUlEmvPTq1IA6EkoBpj3B7AP4y5a0ZkkbbGBwrRfccxGoo7igCtIE DEqmb8yEbGj3VI2eL0FeH/9eEqb6 X-Google-Smtp-Source: AA+uWPyuSVw151AfLVCxV9qUwPrRxNnU/NcwZfL8nyAR2C2ISJ0o8WpZM35Sljp5IFdRbCGQWdLfMw== X-Received: by 2002:adf:9d46:: with SMTP id o6-v6mr32435415wre.51.1534871017319; Tue, 21 Aug 2018 10:03:37 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:36 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:03 +0200 Message-Id: <1534870966-9287-32-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::442 Subject: [Qemu-devel] [PULL 31/74] lsi_scsi: add support for PPR Extended Message 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: George Kennedy Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: George Kennedy The LSI 53c895a code does not handle the PPR Extended Message. Add support to handle PPR Extended Message like SDTR and WDTR are handled. That is, to skip past the message bytes and ignore the message. Signed-off-by: George Kennedy Signed-off-by: Paolo Bonzini --- hw/scsi/lsi53c895a.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c index 160657f..955ba94 100644 --- a/hw/scsi/lsi53c895a.c +++ b/hw/scsi/lsi53c895a.c @@ -959,6 +959,10 @@ static void lsi_do_msgout(LSIState *s) DPRINTF("WDTR (ignored)\n"); lsi_skip_msgbytes(s, 1); break; + case 4: + DPRINTF("PPR (ignored)\n"); + lsi_skip_msgbytes(s, 5); + break; default: goto bad; } From patchwork Tue Aug 21 17:02:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960632 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=redhat.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="lKlFLl9T"; 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 41vyM24Wqxz9s3Z for ; Wed, 22 Aug 2018 03:28:29 +1000 (AEST) Received: from localhost ([::1]:55068 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAS9-0001Rw-JT for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:28:25 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33428) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4X-0001vC-GM for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4U-0006jj-NG for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:00 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:34303) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4R-0006I1-QT for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:57 -0400 Received: by mail-wr1-x443.google.com with SMTP id g33-v6so6431169wrd.1 for ; Tue, 21 Aug 2018 10:03:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=1qvlp/W3Wku/Zb2DgdZFkVXVupY0cUbkUsrmc0vmkaI=; b=lKlFLl9Ty8O8Wkae5vfRtqQISTvOLIxAenVHaZi4Yh1ZPTbJFyp8od4d/gdZ/S1v9P XQZPOl3aiXVvacAXvvKRIRhrE0pDR/l/VWAYL0xi5uASPjtuI/lnufL0U2QoKQdoMiL9 hG/f3vw9ppSCvVs4a/l6b8dX2x0fbONIn4LyPfFU5LYelxmVynjyD6E5gRvlPlxBP0pv 5Am2Ct3d8B3iprGMJOazl0eoOpryqSsDRx521LzszDHSJRcN797g1Z+mXEAvd2Agofbl Wz9uhcx3TgPHwazWqXy/j3ITtUA7xKapy6lGlIfKCq0xdC3kgaPDD71sdaa/M5Pr0fIe OLzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=1qvlp/W3Wku/Zb2DgdZFkVXVupY0cUbkUsrmc0vmkaI=; b=I1FoOKH6QCkqTmrEK0RAwemRu3eUacPOjE2VLa1QhPNtwxdy+ve4vn8TAdx3vgRmSs hzQWj2vVn2suySKPbvApEcEY+ufsRQBhARfaT5zc6lYgVRrncJxHeNTjuaiQd/zafehn EZD+9MIDrSWdCjGYrrbiDcKxS8hX1OOigogho3FkY3yaWbui7O7iuSQgyW3G7bRGecFa Cfc2YTxMjWnkvE0MjXJRcnY1rEYDJy1O0S/qKFKiYjO1ZQ67X3/ZYPz5P9jsa7gUYSDJ AKDNzW6oadTa307J7wQM2dAD500jiYWk505+ZmHjQqMdEO+LZ8OPyhIBSg+4JY5jUOay V/Cg== X-Gm-Message-State: AOUpUlFHhkzkynHz+8ynd9VKgYmTubg0NUyHMw2iqJWg5kkPuMZgM1EU xwLjIDsyU1Cyo1/Q9zTkvlhRkzfl X-Google-Smtp-Source: AA+uWPySaJ46icK5wfS5m7Q9NX21kn40EjOZ5pI9yWA1SzUg6pVuvjHwRSzHA3GP0qPSJuAeS/9Dwg== X-Received: by 2002:adf:eecc:: with SMTP id a12-v6mr14355365wrp.21.1534871018292; Tue, 21 Aug 2018 10:03:38 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:37 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:04 +0200 Message-Id: <1534870966-9287-33-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::443 Subject: [Qemu-devel] [PULL 32/74] kvm: add call to qemu_add_opts() for -overcommit option 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: Prasad Singamsetty Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Prasad Singamsetty qemu command fails to process -overcommit option. Add the missing call to qemu_add_opts() in vl.c. Signed-off-by: Prasad Singamsetty Message-Id: <20180815175704.105902-1-prasad.singamsetty@oracle.com> Reviewed-by: Mark Kanda Signed-off-by: Paolo Bonzini --- vl.c | 1 + 1 file changed, 1 insertion(+) diff --git a/vl.c b/vl.c index d2af8ed..5ba06ad 100644 --- a/vl.c +++ b/vl.c @@ -2987,6 +2987,7 @@ int main(int argc, char **argv, char **envp) qemu_add_opts(&qemu_object_opts); qemu_add_opts(&qemu_tpmdev_opts); qemu_add_opts(&qemu_realtime_opts); + qemu_add_opts(&qemu_overcommit_opts); qemu_add_opts(&qemu_msg_opts); qemu_add_opts(&qemu_name_opts); qemu_add_opts(&qemu_numa_opts); From patchwork Tue Aug 21 17:02:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960635 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=redhat.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="UBlCa62Q"; 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 41vyML2t08z9s3Z for ; Wed, 22 Aug 2018 03:28:46 +1000 (AEST) Received: from localhost ([::1]:55075 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsASS-0001iK-2C for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:28:44 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33319) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4V-0001nD-5p for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4R-0006eN-9A for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:58 -0400 Received: from mail-wm0-x22d.google.com ([2a00:1450:400c:c09::22d]:36240) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4I-0006Kf-LJ for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:48 -0400 Received: by mail-wm0-x22d.google.com with SMTP id w24-v6so3506192wmc.1 for ; Tue, 21 Aug 2018 10:03:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7H16bliIbFMVKVHUUf8BL3vR63tNeSuCaqfsToZD08E=; b=UBlCa62QycVy3EKunkxxGmvZSjquFCONjIL2pM5jfTV2BtGx8fn0sZ59UtsdzDboCF 2fDWIojf+FXwn0Q391RQ+ZZ0+SCYD7nXPa8i7olUqjA5qywixynzURY2XjWpCdtJlS9R mpAy1xDJOS/sVIqk9ErJSR7UO3a1MtwsmmCiuTMyy7WrzT3zWsAE0ORZzS0D0/7Ijohq hKKlrrD9FN3GS4SRii98UF8WxNs4Tujg1xXweNDXtpJS83lpeEeYPrqKdi30wHl21jEP n3VLWBKnit7CI3vFSmUg3MOxkeXXtU+FISiWBHjTJJenOzW8nicxWFiVCwLQxAO+sXUu 0y9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=7H16bliIbFMVKVHUUf8BL3vR63tNeSuCaqfsToZD08E=; b=kOtz1IgmEW8jW82NsvXbq+sjur9/SjDS3wp3msSGZXq7eLD038dtMV2NwLQVoBbADL 5HpEVvORw0d+tDtX2nk51c28IFJtHluVN9UFwFqbzk6wDkfzoPJzYnywdAPWHVR4c4T0 +GecAMEAvh6LnQevzDTeEEgrAZQxZGvxYsOgssmr9uLSpXcK2zRsf0PznpViLDix8Z8u XAGlWE0IrZ91csYkT+ozkuePsY0bLi+vOXcSW+6AcuREBURMdI/Pae0NTzPTF3b3TQFp xzeWhs2StYZ/Y8SNDiD+WQ1bhlxDqQ3r4EprXnbB00RMNxBQhRDX/0bbSEYRJyaAbUVe noTg== X-Gm-Message-State: APzg51A6+XKTENVj6MSbDyQXfVWemmNPqxwE9rwTiv85YSvYpud6/3s6 ijlgPjDk0s0U/c+Y6hitatLdpvOQ X-Google-Smtp-Source: ANB0VdZ+rB3M6fFnIeoD5pmpclmWLezPcpqWXrByFKOsFEstLXaaYdhaArZmUSdov9DEVYZml1YS8g== X-Received: by 2002:a1c:5dd4:: with SMTP id r203-v6mr143045wmb.29.1534871019927; Tue, 21 Aug 2018 10:03:39 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:38 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:05 +0200 Message-Id: <1534870966-9287-34-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::22d Subject: [Qemu-devel] [PULL 33/74] build-sys: remove glib_subprocess check 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: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau The check should be unnecessary since commit e7b3af81597db1a6b55f2c15d030d703c6b2c6ac "glib: bump min required glib library version to 2.40". Signed-off-by: Marc-André Lureau Message-Id: <20180730153639.26466-1-marcandre.lureau@redhat.com> Reviewed-by: Daniel P. Berrangé Signed-off-by: Paolo Bonzini --- configure | 3 --- tests/Makefile.include | 2 +- tests/test-char.c | 4 ---- tests/test-x86-cpuid-compat.c | 6 ------ tests/vhost-user-test.c | 4 ---- 5 files changed, 1 insertion(+), 18 deletions(-) diff --git a/configure b/configure index af0c149..2ff272d 100755 --- a/configure +++ b/configure @@ -6428,9 +6428,6 @@ if test "$bluez" = "yes" ; then echo "CONFIG_BLUEZ=y" >> $config_host_mak echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak fi -if test "$glib_subprocess" = "yes" ; then - echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak -fi if test "$gtk" = "yes" ; then echo "CONFIG_GTK=m" >> $config_host_mak echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak diff --git a/tests/Makefile.include b/tests/Makefile.include index 29e70f4..f3a761b 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -124,7 +124,7 @@ check-unit-y += tests/test-qht-par$(EXESUF) gcov-files-test-qht-par-y = util/qht.c check-unit-y += tests/test-bitops$(EXESUF) check-unit-y += tests/test-bitcnt$(EXESUF) -check-unit-$(CONFIG_HAS_GLIB_SUBPROCESS_TESTS) += tests/test-qdev-global-props$(EXESUF) +check-unit-y += tests/test-qdev-global-props$(EXESUF) check-unit-y += tests/check-qom-interface$(EXESUF) gcov-files-check-qom-interface-y = qom/object.c check-unit-y += tests/check-qom-proplist$(EXESUF) diff --git a/tests/test-char.c b/tests/test-char.c index 5905d31..2a2ff32 100644 --- a/tests/test-char.c +++ b/tests/test-char.c @@ -56,7 +56,6 @@ static void fe_event(void *opaque, int event) } } -#ifdef CONFIG_HAS_GLIB_SUBPROCESS_TESTS #ifdef _WIN32 static void char_console_test_subprocess(void) { @@ -106,7 +105,6 @@ static void char_stdio_test(void) g_test_trap_assert_passed(); g_test_trap_assert_stdout("buf"); } -#endif static void char_ringbuf_test(void) { @@ -807,14 +805,12 @@ int main(int argc, char **argv) g_test_add_func("/char/invalid", char_invalid_test); g_test_add_func("/char/ringbuf", char_ringbuf_test); g_test_add_func("/char/mux", char_mux_test); -#ifdef CONFIG_HAS_GLIB_SUBPROCESS_TESTS #ifdef _WIN32 g_test_add_func("/char/console/subprocess", char_console_test_subprocess); g_test_add_func("/char/console", char_console_test); #endif g_test_add_func("/char/stdio/subprocess", char_stdio_test_subprocess); g_test_add_func("/char/stdio", char_stdio_test); -#endif #ifndef _WIN32 g_test_add_func("/char/pipe", char_pipe_test); #endif diff --git a/tests/test-x86-cpuid-compat.c b/tests/test-x86-cpuid-compat.c index 84ce9c7..e75b959 100644 --- a/tests/test-x86-cpuid-compat.c +++ b/tests/test-x86-cpuid-compat.c @@ -35,7 +35,6 @@ static QObject *qom_get(const char *path, const char *prop) return ret; } -#ifdef CONFIG_HAS_GLIB_SUBPROCESS_TESTS static bool qom_get_bool(const char *path, const char *prop) { QBool *value = qobject_to(QBool, qom_get(path, prop)); @@ -44,7 +43,6 @@ static bool qom_get_bool(const char *path, const char *prop) qobject_unref(value); return b; } -#endif typedef struct CpuidTestArgs { const char *cmdline; @@ -168,7 +166,6 @@ static FeatureTestArgs *add_feature_test(const char *name, const char *cmdline, return args; } -#ifdef CONFIG_HAS_GLIB_SUBPROCESS_TESTS static void test_plus_minus_subprocess(void) { char *path; @@ -210,17 +207,14 @@ static void test_plus_minus(void) "Don't mix both \"+cx8\" and \"cx8=off\"*"); g_test_trap_assert_stdout(""); } -#endif int main(int argc, char **argv) { g_test_init(&argc, &argv, NULL); -#ifdef CONFIG_HAS_GLIB_SUBPROCESS_TESTS g_test_add_func("/x86/cpuid/parsing-plus-minus/subprocess", test_plus_minus_subprocess); g_test_add_func("/x86/cpuid/parsing-plus-minus", test_plus_minus); -#endif /* Original level values for CPU models: */ add_cpuid_test("x86/cpuid/phenom/level", diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c index ca6251f..716aff7 100644 --- a/tests/vhost-user-test.c +++ b/tests/vhost-user-test.c @@ -768,7 +768,6 @@ static void wait_for_rings_started(TestServer *s, size_t count) g_mutex_unlock(&s->data_mutex); } -#if defined(CONFIG_HAS_GLIB_SUBPROCESS_TESTS) static inline void test_server_connect(TestServer *server) { test_server_create_chr(server, ",reconnect=1"); @@ -893,7 +892,6 @@ static void test_flags_mismatch(void) g_free(path); } -#endif static void test_multiqueue(void) { @@ -975,7 +973,6 @@ int main(int argc, char **argv) qtest_add_func("/vhost-user/migrate", test_migrate); qtest_add_func("/vhost-user/multiqueue", test_multiqueue); -#if defined(CONFIG_HAS_GLIB_SUBPROCESS_TESTS) /* keeps failing on build-system since Aug 15 2017 */ if (getenv("QTEST_VHOST_USER_FIXME")) { qtest_add_func("/vhost-user/reconnect/subprocess", @@ -988,7 +985,6 @@ int main(int argc, char **argv) test_flags_mismatch_subprocess); qtest_add_func("/vhost-user/flags-mismatch", test_flags_mismatch); } -#endif ret = g_test_run(); From patchwork Tue Aug 21 17:02:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960581 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=redhat.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="oM2EOHPP"; 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 41vy1y6znNz9s78 for ; Wed, 22 Aug 2018 03:13:42 +1000 (AEST) Received: from localhost ([::1]:54990 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsADs-0002P0-IC for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:13:40 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33323) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4V-0001nJ-7b for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4R-0006eU-9Z for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:58 -0400 Received: from mail-wm0-x22b.google.com ([2a00:1450:400c:c09::22b]:51286) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4I-0006MQ-KH for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:48 -0400 Received: by mail-wm0-x22b.google.com with SMTP id y2-v6so3644170wma.1 for ; Tue, 21 Aug 2018 10:03:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=G/Fi3so4FAZss/HYU5AK/SuYH5z/6vZPYomc5cVoprU=; b=oM2EOHPPyqALCf2YKbHCEqO6S8z7CYdm+YwdEX/N0Zv7J+GumV4bOaG/NXhxNTDSza VN5/esd9sp69hQdYL/xhzx7XQqSAO4HBLFpYNsCV2Dil87TjCJAt6J3EodxXKEV67aQ+ 9ge1bgtLauRBnG9Yoi7C95/r4weXLAg2ANUAS8mVu1DKFh/NDipXHE5YfY88q0628wS2 VtiQplWw8F0Vh+lOUcQANqBqi6CN46DdWm8l4FgexAQVAGX+dYiIcpZWfUpaeHIGhGDp GKAlM/IKUB2WPTDnQXaeeHp1kA01CtVHSOHjyFx/9K/zd8arJXKD4ebzguKMXuljsGQn 0BhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=G/Fi3so4FAZss/HYU5AK/SuYH5z/6vZPYomc5cVoprU=; b=mt7VwKioiktPQM10I/kv4rVPagy5y0tHjvXZ4Nc7gwnOuqj4ewliVu+hhTH5BBZqA/ TrAx+IGzLYe+UP8CQEuiumzCuONKlP61aDVIT7Uyf6Ae5J1WTOS2zrwH/OPfoaQ6NRX5 vXDEcZGNK6cHepxMji2PPzb+bBOMnjGYqgdBrD0ET4i6tKe9nNVfEpamNZ84xk/eqjU6 eEAmZZ47daG2/tRsZhBu6Y0XS3X8w5YHJE7Npwj3wAChrzcRAPwptbyCzWp1KZukb5NO G8onyfh1OmkorMa7dZK1jAsmHYy5ZAmSTtdAT1fzwAq8LzV7qniFekKZkqQU3MFmAhlF pYZQ== X-Gm-Message-State: APzg51ClB8VbVT0KOdF7vd09OplLMv6qkNJNyaoRrXE1+C/DHlZL+Qj6 ezkY7omeE54YhSdI9PnAtjlG2Gbz X-Google-Smtp-Source: ANB0VdYi5dLZ7xUURzSAb7hsxrMBDxcRP/nn/VzhydX/PHs7/VUkk5zUMFjOzUgKwMcD4vFA+5MdQg== X-Received: by 2002:a1c:a8d0:: with SMTP id r199-v6mr120853wme.97.1534871021159; Tue, 21 Aug 2018 10:03:41 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:40 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:06 +0200 Message-Id: <1534870966-9287-35-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::22b Subject: [Qemu-devel] [PULL 34/74] target-i386: Fix lcall/ljmp to call gate in IA-32e mode 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: Andrew Oates Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Andrew Oates Currently call gates are always treated as 32-bit gates. In IA-32e mode (either compatibility or 64-bit submode), system segment descriptors are always 64-bit. Treating them as 32-bit has the expected unfortunate effect: only the lower 32 bits of the offset are loaded, the stack pointer is truncated, a bad new stack pointer is loaded from the TSS (if switching privilege levels), etc. This change adds support for 64-bit call gate to the lcall and ljmp instructions. Additionally, there should be a check for non-canonical stack pointers, but I've omitted that since there doesn't seem to be checks for non-canonical addresses in this code elsewhere. I've left the raise_exception_err_ra lines unwapped at 80 columns to match the style in the rest of the file. Signed-off-by: Andrew Oates Message-Id: <20180819181725.34098-1-andrew@andrewoates.com> Signed-off-by: Paolo Bonzini --- target/i386/seg_helper.c | 192 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 152 insertions(+), 40 deletions(-) diff --git a/target/i386/seg_helper.c b/target/i386/seg_helper.c index 00301a0..b2adddc 100644 --- a/target/i386/seg_helper.c +++ b/target/i386/seg_helper.c @@ -518,6 +518,11 @@ static void switch_tss(CPUX86State *env, int tss_selector, static inline unsigned int get_sp_mask(unsigned int e2) { +#ifdef TARGET_X86_64 + if (e2 & DESC_L_MASK) { + return 0; + } else +#endif if (e2 & DESC_B_MASK) { return 0xffffffff; } else { @@ -1640,6 +1645,14 @@ void helper_ljmp_protected(CPUX86State *env, int new_cs, target_ulong new_eip, rpl = new_cs & 3; cpl = env->hflags & HF_CPL_MASK; type = (e2 >> DESC_TYPE_SHIFT) & 0xf; + +#ifdef TARGET_X86_64 + if (env->efer & MSR_EFER_LMA) { + if (type != 12) { + raise_exception_err_ra(env, EXCP0D_GPF, new_cs & 0xfffc, GETPC()); + } + } +#endif switch (type) { case 1: /* 286 TSS */ case 9: /* 386 TSS */ @@ -1662,6 +1675,23 @@ void helper_ljmp_protected(CPUX86State *env, int new_cs, target_ulong new_eip, if (type == 12) { new_eip |= (e2 & 0xffff0000); } + +#ifdef TARGET_X86_64 + if (env->efer & MSR_EFER_LMA) { + /* load the upper 8 bytes of the 64-bit call gate */ + if (load_segment_ra(env, &e1, &e2, new_cs + 8, GETPC())) { + raise_exception_err_ra(env, EXCP0D_GPF, new_cs & 0xfffc, + GETPC()); + } + type = (e2 >> DESC_TYPE_SHIFT) & 0x1f; + if (type != 0) { + raise_exception_err_ra(env, EXCP0D_GPF, new_cs & 0xfffc, + GETPC()); + } + new_eip |= ((target_ulong)e1) << 32; + } +#endif + if (load_segment_ra(env, &e1, &e2, gate_cs, GETPC()) != 0) { raise_exception_err_ra(env, EXCP0D_GPF, gate_cs & 0xfffc, GETPC()); } @@ -1675,11 +1705,22 @@ void helper_ljmp_protected(CPUX86State *env, int new_cs, target_ulong new_eip, (!(e2 & DESC_C_MASK) && (dpl != cpl))) { raise_exception_err_ra(env, EXCP0D_GPF, gate_cs & 0xfffc, GETPC()); } +#ifdef TARGET_X86_64 + if (env->efer & MSR_EFER_LMA) { + if (!(e2 & DESC_L_MASK)) { + raise_exception_err_ra(env, EXCP0D_GPF, gate_cs & 0xfffc, GETPC()); + } + if (e2 & DESC_B_MASK) { + raise_exception_err_ra(env, EXCP0D_GPF, gate_cs & 0xfffc, GETPC()); + } + } +#endif if (!(e2 & DESC_P_MASK)) { raise_exception_err_ra(env, EXCP0D_GPF, gate_cs & 0xfffc, GETPC()); } limit = get_seg_limit(e1, e2); - if (new_eip > limit) { + if (new_eip > limit && + (!(env->hflags & HF_LMA_MASK) || !(e2 & DESC_L_MASK))) { raise_exception_err_ra(env, EXCP0D_GPF, 0, GETPC()); } cpu_x86_load_seg_cache(env, R_CS, (gate_cs & 0xfffc) | cpl, @@ -1724,12 +1765,12 @@ void helper_lcall_protected(CPUX86State *env, int new_cs, target_ulong new_eip, int shift, target_ulong next_eip) { int new_stack, i; - uint32_t e1, e2, cpl, dpl, rpl, selector, offset, param_count; - uint32_t ss = 0, ss_e1 = 0, ss_e2 = 0, sp, type, ss_dpl, sp_mask; + uint32_t e1, e2, cpl, dpl, rpl, selector, param_count; + uint32_t ss = 0, ss_e1 = 0, ss_e2 = 0, type, ss_dpl, sp_mask; uint32_t val, limit, old_sp_mask; - target_ulong ssp, old_ssp; + target_ulong ssp, old_ssp, offset, sp; - LOG_PCALL("lcall %04x:%08x s=%d\n", new_cs, (uint32_t)new_eip, shift); + LOG_PCALL("lcall %04x:" TARGET_FMT_lx " s=%d\n", new_cs, new_eip, shift); LOG_PCALL_STATE(CPU(x86_env_get_cpu(env))); if ((new_cs & 0xfffc) == 0) { raise_exception_err_ra(env, EXCP0D_GPF, 0, GETPC()); @@ -1807,6 +1848,15 @@ void helper_lcall_protected(CPUX86State *env, int new_cs, target_ulong new_eip, type = (e2 >> DESC_TYPE_SHIFT) & 0x1f; dpl = (e2 >> DESC_DPL_SHIFT) & 3; rpl = new_cs & 3; + +#ifdef TARGET_X86_64 + if (env->efer & MSR_EFER_LMA) { + if (type != 12) { + raise_exception_err_ra(env, EXCP0D_GPF, new_cs & 0xfffc, GETPC()); + } + } +#endif + switch (type) { case 1: /* available 286 TSS */ case 9: /* available 386 TSS */ @@ -1833,8 +1883,23 @@ void helper_lcall_protected(CPUX86State *env, int new_cs, target_ulong new_eip, raise_exception_err_ra(env, EXCP0B_NOSEG, new_cs & 0xfffc, GETPC()); } selector = e1 >> 16; - offset = (e2 & 0xffff0000) | (e1 & 0x0000ffff); param_count = e2 & 0x1f; + offset = (e2 & 0xffff0000) | (e1 & 0x0000ffff); +#ifdef TARGET_X86_64 + if (env->efer & MSR_EFER_LMA) { + /* load the upper 8 bytes of the 64-bit call gate */ + if (load_segment_ra(env, &e1, &e2, new_cs + 8, GETPC())) { + raise_exception_err_ra(env, EXCP0D_GPF, new_cs & 0xfffc, + GETPC()); + } + type = (e2 >> DESC_TYPE_SHIFT) & 0x1f; + if (type != 0) { + raise_exception_err_ra(env, EXCP0D_GPF, new_cs & 0xfffc, + GETPC()); + } + offset |= ((target_ulong)e1) << 32; + } +#endif if ((selector & 0xfffc) == 0) { raise_exception_err_ra(env, EXCP0D_GPF, 0, GETPC()); } @@ -1849,46 +1914,80 @@ void helper_lcall_protected(CPUX86State *env, int new_cs, target_ulong new_eip, if (dpl > cpl) { raise_exception_err_ra(env, EXCP0D_GPF, selector & 0xfffc, GETPC()); } +#ifdef TARGET_X86_64 + if (env->efer & MSR_EFER_LMA) { + if (!(e2 & DESC_L_MASK)) { + raise_exception_err_ra(env, EXCP0D_GPF, selector & 0xfffc, GETPC()); + } + if (e2 & DESC_B_MASK) { + raise_exception_err_ra(env, EXCP0D_GPF, selector & 0xfffc, GETPC()); + } + shift++; + } +#endif if (!(e2 & DESC_P_MASK)) { raise_exception_err_ra(env, EXCP0B_NOSEG, selector & 0xfffc, GETPC()); } if (!(e2 & DESC_C_MASK) && dpl < cpl) { /* to inner privilege */ - get_ss_esp_from_tss(env, &ss, &sp, dpl, GETPC()); - LOG_PCALL("new ss:esp=%04x:%08x param_count=%d env->regs[R_ESP]=" - TARGET_FMT_lx "\n", ss, sp, param_count, - env->regs[R_ESP]); - if ((ss & 0xfffc) == 0) { - raise_exception_err_ra(env, EXCP0A_TSS, ss & 0xfffc, GETPC()); - } - if ((ss & 3) != dpl) { - raise_exception_err_ra(env, EXCP0A_TSS, ss & 0xfffc, GETPC()); - } - if (load_segment_ra(env, &ss_e1, &ss_e2, ss, GETPC()) != 0) { - raise_exception_err_ra(env, EXCP0A_TSS, ss & 0xfffc, GETPC()); - } - ss_dpl = (ss_e2 >> DESC_DPL_SHIFT) & 3; - if (ss_dpl != dpl) { - raise_exception_err_ra(env, EXCP0A_TSS, ss & 0xfffc, GETPC()); - } - if (!(ss_e2 & DESC_S_MASK) || - (ss_e2 & DESC_CS_MASK) || - !(ss_e2 & DESC_W_MASK)) { - raise_exception_err_ra(env, EXCP0A_TSS, ss & 0xfffc, GETPC()); - } - if (!(ss_e2 & DESC_P_MASK)) { - raise_exception_err_ra(env, EXCP0A_TSS, ss & 0xfffc, GETPC()); +#ifdef TARGET_X86_64 + if (shift == 2) { + sp = get_rsp_from_tss(env, dpl); + ss = dpl; /* SS = NULL selector with RPL = new CPL */ + new_stack = 1; + sp_mask = 0; + ssp = 0; /* SS base is always zero in IA-32e mode */ + LOG_PCALL("new ss:rsp=%04x:%016llx env->regs[R_ESP]=" + TARGET_FMT_lx "\n", ss, sp, env->regs[R_ESP]); + } else +#endif + { + uint32_t sp32; + get_ss_esp_from_tss(env, &ss, &sp32, dpl, GETPC()); + LOG_PCALL("new ss:esp=%04x:%08x param_count=%d env->regs[R_ESP]=" + TARGET_FMT_lx "\n", ss, sp32, param_count, + env->regs[R_ESP]); + sp = sp32; + if ((ss & 0xfffc) == 0) { + raise_exception_err_ra(env, EXCP0A_TSS, ss & 0xfffc, GETPC()); + } + if ((ss & 3) != dpl) { + raise_exception_err_ra(env, EXCP0A_TSS, ss & 0xfffc, GETPC()); + } + if (load_segment_ra(env, &ss_e1, &ss_e2, ss, GETPC()) != 0) { + raise_exception_err_ra(env, EXCP0A_TSS, ss & 0xfffc, GETPC()); + } + ss_dpl = (ss_e2 >> DESC_DPL_SHIFT) & 3; + if (ss_dpl != dpl) { + raise_exception_err_ra(env, EXCP0A_TSS, ss & 0xfffc, GETPC()); + } + if (!(ss_e2 & DESC_S_MASK) || + (ss_e2 & DESC_CS_MASK) || + !(ss_e2 & DESC_W_MASK)) { + raise_exception_err_ra(env, EXCP0A_TSS, ss & 0xfffc, GETPC()); + } + if (!(ss_e2 & DESC_P_MASK)) { + raise_exception_err_ra(env, EXCP0A_TSS, ss & 0xfffc, GETPC()); + } + + sp_mask = get_sp_mask(ss_e2); + ssp = get_seg_base(ss_e1, ss_e2); } /* push_size = ((param_count * 2) + 8) << shift; */ old_sp_mask = get_sp_mask(env->segs[R_SS].flags); old_ssp = env->segs[R_SS].base; - - sp_mask = get_sp_mask(ss_e2); - ssp = get_seg_base(ss_e1, ss_e2); - if (shift) { +#ifdef TARGET_X86_64 + if (shift == 2) { + /* XXX: verify if new stack address is canonical */ + PUSHQ_RA(sp, env->segs[R_SS].selector, GETPC()); + PUSHQ_RA(sp, env->regs[R_ESP], GETPC()); + /* parameters aren't supported for 64-bit call gates */ + } else +#endif + if (shift == 1) { PUSHL_RA(ssp, sp, sp_mask, env->segs[R_SS].selector, GETPC()); PUSHL_RA(ssp, sp, sp_mask, env->regs[R_ESP], GETPC()); for (i = param_count - 1; i >= 0; i--) { @@ -1917,7 +2016,13 @@ void helper_lcall_protected(CPUX86State *env, int new_cs, target_ulong new_eip, new_stack = 0; } - if (shift) { +#ifdef TARGET_X86_64 + if (shift == 2) { + PUSHQ_RA(sp, env->segs[R_CS].selector, GETPC()); + PUSHQ_RA(sp, next_eip, GETPC()); + } else +#endif + if (shift == 1) { PUSHL_RA(ssp, sp, sp_mask, env->segs[R_CS].selector, GETPC()); PUSHL_RA(ssp, sp, sp_mask, next_eip, GETPC()); } else { @@ -1928,11 +2033,18 @@ void helper_lcall_protected(CPUX86State *env, int new_cs, target_ulong new_eip, /* from this point, not restartable */ if (new_stack) { - ss = (ss & ~3) | dpl; - cpu_x86_load_seg_cache(env, R_SS, ss, - ssp, - get_seg_limit(ss_e1, ss_e2), - ss_e2); +#ifdef TARGET_X86_64 + if (shift == 2) { + cpu_x86_load_seg_cache(env, R_SS, ss, 0, 0, 0); + } else +#endif + { + ss = (ss & ~3) | dpl; + cpu_x86_load_seg_cache(env, R_SS, ss, + ssp, + get_seg_limit(ss_e1, ss_e2), + ss_e2); + } } selector = (selector & ~3) | dpl; From patchwork Tue Aug 21 17:02:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960629 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=redhat.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="WDF1L3V+"; 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 41vyHy0Z9lz9s3Z for ; Wed, 22 Aug 2018 03:25:50 +1000 (AEST) Received: from localhost ([::1]:55055 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAPb-0007YA-Jy for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:25:47 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33723) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4n-0002IO-V9 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4W-0006o0-45 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:11 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]:44511) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4V-0006NL-6r for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:59 -0400 Received: by mail-wr1-x431.google.com with SMTP id v16-v6so2038087wro.11 for ; Tue, 21 Aug 2018 10:03:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=fpxsKEKxH3A505HF3CRNTFj4UusA3nJfDcpC1PFGuO4=; b=WDF1L3V+9m1mRYmFtZGELHLA+ftIFlVygAQ7WlvHjU3otD5l+oFZ42GdcxRDMVaVps EffznE0XBZfnEaY2a4gi+rs6Zk6lv07kffg/gAfvJEFOFZUqpe2VPtuYPDjwo0Z2yjGn eO1Xv5XCt3FniopH3QetlB/ZQbdc7YV0GFiyDdEwkWIqSnXN0+mCjUusSFEc/ckOcbNq a0+9NoIVRze4eOD87EyZPdlDJEop2CbIbELesnqSzrQiDQvEfMgenWqM0MpgdVTYJlnZ MD/b1Ejrlsp9AoZfM9Dbs7Z9L1KaSQo9UiBPRjN/Fmsbx9Wo3W1w5VKFKToqzCoEBuUY 7BJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=fpxsKEKxH3A505HF3CRNTFj4UusA3nJfDcpC1PFGuO4=; b=Gu5y6PSK5dl4An5DPab0mIraFdUL2agYfo9Qrz9Or55QrzowYPS8lzSo4AqvD8oo1t TSyrEOo0wZCCut2Og/q2rr99G0DwpqVrce0xFd3pz745ch57QvN35obA1b3iC6+twaxp /Ko7ZzK+ZO+QI4teqkW92XnkrI6ZjsOFjVNzO7842u6k6iYA2n52vTpYs9GLEJNA3q3Z 7ITsH6r1rYh4sbphr3Q4LENMpO74nq2uTMVH0wT2qI76TF+Vcl+aA3aFIclG+LUr5JW9 zSDXnqy4SaNoP/IDqyJk9e0nletxJz0gpdNgvUjy70A12lrGFogmI8ofFNVm8XfgDBhS DnNQ== X-Gm-Message-State: AOUpUlEZEh4ZG7GnR68+voQwWE0pXGdeb/oC/X3GangMTbdhF0aIDtjq 2SN2/8aNsFQ34+wbzgKWzRabXrmF X-Google-Smtp-Source: AA+uWPxVFH4vlr+Kdzt71fB/f3+wNc6fikBLlfF5wFY2m/k9LqP20+X96FOmZ/hl8PbWG6R/m2tRAQ== X-Received: by 2002:a5d:6892:: with SMTP id h18-v6mr32388420wru.108.1534871022079; Tue, 21 Aug 2018 10:03:42 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:41 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:07 +0200 Message-Id: <1534870966-9287-36-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::431 Subject: [Qemu-devel] [PULL 35/74] target-i386: fix segment limit check in ljmp 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: Andrew Oates Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Andrew Oates The current implementation has three bugs, * segment limits are not enforced in protected mode if the L bit is set in the target segment descriptor * segment limits are not enforced in compatibility mode (ljmp to 32-bit code segment in long mode) * #GP(new_cs) is generated rather than #GP(0) Now the segment limits are enforced if we're not in long mode OR the target code segment doesn't have the L bit set. Signed-off-by: Andrew Oates Message-Id: <20180816011903.39816-1-andrew@andrewoates.com> Signed-off-by: Paolo Bonzini --- target/i386/seg_helper.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target/i386/seg_helper.c b/target/i386/seg_helper.c index b2adddc..d1cbc6e 100644 --- a/target/i386/seg_helper.c +++ b/target/i386/seg_helper.c @@ -1633,8 +1633,8 @@ void helper_ljmp_protected(CPUX86State *env, int new_cs, target_ulong new_eip, } limit = get_seg_limit(e1, e2); if (new_eip > limit && - !(env->hflags & HF_LMA_MASK) && !(e2 & DESC_L_MASK)) { - raise_exception_err_ra(env, EXCP0D_GPF, new_cs & 0xfffc, GETPC()); + (!(env->hflags & HF_LMA_MASK) || !(e2 & DESC_L_MASK))) { + raise_exception_err_ra(env, EXCP0D_GPF, 0, GETPC()); } cpu_x86_load_seg_cache(env, R_CS, (new_cs & 0xfffc) | cpl, get_seg_base(e1, e2), limit, e2); From patchwork Tue Aug 21 17:02:08 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960628 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=redhat.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="mBt+dxDj"; 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 41vyHq4rtpz9s3Z for ; Wed, 22 Aug 2018 03:25:43 +1000 (AEST) Received: from localhost ([::1]:55052 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAPV-00072L-7C for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:25:41 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33321) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4V-0001nF-6J for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4S-0006fg-0g for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:58 -0400 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]:40212) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4K-0006Oi-Db for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:53 -0400 Received: by mail-wm0-x243.google.com with SMTP id y9-v6so3497868wma.5 for ; Tue, 21 Aug 2018 10:03:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=7FmXE4eQEImiTN97an4Cc1otDZCwSyJJCxAFM7Sko3o=; b=mBt+dxDjv6U//iit0ezEOHDb9f9q3vY6lwd7BQ8ypJgMD4lTN1J5HXoPR0WXc35ORe LE15ufGwhcZSRdUoL93RIpH4KjIDjwCbHIIA/971BWKrb6ftwXSYda0jI9mAgbFFGy2V EpNmCE2IDICQsdXi6I3htzgaGWfYYRZqoQAVME3HUo97eNkUFhdvErqED9SvK1PNcI7v FMluNyTTG5nT3h/zXAVLFvDC/x6HIhep92cBk+8p+4kD+bwVKq+2Kc7dN0F71Xj51JF9 d1YTfETAoSWK/qC0SQ8pk4CwqbbJA3ivcAWsYRcs2f7Uhkfv9rWTqZVDwSvaAxujC887 nAOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=7FmXE4eQEImiTN97an4Cc1otDZCwSyJJCxAFM7Sko3o=; b=Dw+1SVLUPhdKpSRbSE53XT9K6Fa1YC4Y0WtmtObRbSaYAmggBcVAPDLpX3M2DVtdOq 7gPTuwf5dp3c+Ct3MVQBy3zTS1kGnCNJh+zeu4rQAZlJqpEFqvHFpmHy85QB9+CbFdGi geskoye3tq1q6ZokF5oKEYpxzwsDCuSSPhLcHyYvRy0qDhsqOP6+09/HxBxpIBWRvO76 w0dVgfhSiPyiE8mdAAkf/0GmTdOUF4xd6qrdju+jmm1nPRQM8Ap72stoRF2zBJ1ow4Ic 3/N4Nvzc8HaEyaqECLAv2fE3hRGV8S4BDM1S1WaQEFHCWokbxwOQaxn4OrhFhDYmhf9m pWxw== X-Gm-Message-State: APzg51D5ycdN1vXmebIKsSpHmjIKPc0PViT3OLW4loXNJKTJMUbE0S2q P8z/bmvyihjZsvml0Vz1PcJocQgh X-Google-Smtp-Source: ANB0VdaCZLM9QevXVzpPxSPQQ2TJBt8FAiDlBRNii+hqOihqBZTy7SsXz8WnDcRzLuCq5XwZJ2Xe+A== X-Received: by 2002:a1c:13ca:: with SMTP id 193-v6mr119101wmt.127.1534871023191; Tue, 21 Aug 2018 10:03:43 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:42 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:08 +0200 Message-Id: <1534870966-9287-37-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::243 Subject: [Qemu-devel] [PULL 36/74] rcu_queue: use atomic_set in QLIST_REMOVE_RCU 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" To avoid undefined behaviour. Signed-off-by: Emilio G. Cota Message-Id: <20180819091335.22863-2-cota@braap.org> Signed-off-by: Paolo Bonzini --- include/qemu/rcu_queue.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/qemu/rcu_queue.h b/include/qemu/rcu_queue.h index 01be774..dd7b3be 100644 --- a/include/qemu/rcu_queue.h +++ b/include/qemu/rcu_queue.h @@ -112,7 +112,7 @@ extern "C" { (elm)->field.le_next->field.le_prev = \ (elm)->field.le_prev; \ } \ - *(elm)->field.le_prev = (elm)->field.le_next; \ + atomic_set((elm)->field.le_prev, (elm)->field.le_next); \ } while (/*CONSTCOND*/0) /* List traversal must occur within an RCU critical section. */ From patchwork Tue Aug 21 17:02:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960644 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=redhat.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="LmGCDnqU"; 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 41vyVq3ZJ1z9s3x for ; Wed, 22 Aug 2018 03:35:15 +1000 (AEST) Received: from localhost ([::1]:55103 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAYj-0007h8-3I for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:35:13 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33425) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4X-0001vA-ET for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4U-0006kw-UH for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:00 -0400 Received: from mail-wm0-x230.google.com ([2a00:1450:400c:c09::230]:40657) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4S-0006Pn-2n for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:58 -0400 Received: by mail-wm0-x230.google.com with SMTP id y9-v6so3497954wma.5 for ; Tue, 21 Aug 2018 10:03:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=9XSXVWytHpuoDl1QRf7q2SyQ6FHsZkHal4kJn7f3ifI=; b=LmGCDnqUFmFaXubh7FNhYYntiume29Qlx33Y4q/6lXUCoD0Gb4K4Pzw5TEesONKnxW LoZfLDFRf2NGElduE/JHNtyHD5LKxKYipk//HyP8uRP/qoKEgU3UUE9FYttzz+Dp1ZJB CbZ4DGFpvSr5THAHprqT0y3WJfEjZGSq0y7uVBP34YT6uOMz62+IrYFdbnOVN+wD+rUw UmQs0FvKtwEtKZOVQ6OvzNWxHXEvkmuE+lvHyyvayvlNxGA2gmffLX4hTMYUUH23zyZi X8LBeEJW16sXv1y2O5cBHgBgkIRurALFq4HeJAyCe0DSMTsXbILl+IaE3fjHDXkDG/YL Wvsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=9XSXVWytHpuoDl1QRf7q2SyQ6FHsZkHal4kJn7f3ifI=; b=m+moxeYvK1EyuWlmzmXH3uAEVnJb3Dthm0wZ/gj8P8g9Ne4nutVLQA1ojCjch4lSSM xtkQi5ugTpPZ7Ws7ndatLmHuaDnugxIaWxD68L5tXqkY1h8LwjpFi/1yhvPil65e4A0a oqfntFe+nLIizlFJpQvgX0Ww6AuxZexGtgUIQqXKgnmWGoZVljN2UjlNDolHWrUwfCGH +gGo5WqNo8m1RHUYMnlHrH+W/wLLZPTistsqmv/QP2wMfWmL4yTcnJW7xyqX0xfdZY7Y CzdoEYZv3y9JAbEuo7sxCjtlyTHBWZtXEv3IyuAsIgZQeFdF3JjAKlv5HuQlv8Kk9KDe orfw== X-Gm-Message-State: APzg51BO7dCEEzW68IEJ1o5fC632jIt9auIwyH7yR+KpL6ajvkqZv/Cm RLEt2Lksm8ysy2QM2SNYiYqMsRIT X-Google-Smtp-Source: ANB0VdbCQrjs+9Vpj/kB/UmLj+96MkUrwFQgrLP4W7tha32b+CC2deeqN8FBpNZImJEw8myA8OjpmQ== X-Received: by 2002:a1c:148f:: with SMTP id 137-v6mr127145wmu.61.1534871024197; Tue, 21 Aug 2018 10:03:44 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:43 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:09 +0200 Message-Id: <1534870966-9287-38-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::230 Subject: [Qemu-devel] [PULL 37/74] rcu_queue: remove barrier from QLIST_EMPTY_RCU 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" It's unnecessary because the pointer isn't dereferenced. Signed-off-by: Emilio G. Cota Message-Id: <20180819091335.22863-3-cota@braap.org> Signed-off-by: Paolo Bonzini --- include/qemu/rcu_queue.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/qemu/rcu_queue.h b/include/qemu/rcu_queue.h index dd7b3be..6881ea5 100644 --- a/include/qemu/rcu_queue.h +++ b/include/qemu/rcu_queue.h @@ -36,7 +36,7 @@ extern "C" { /* * List access methods. */ -#define QLIST_EMPTY_RCU(head) (atomic_rcu_read(&(head)->lh_first) == NULL) +#define QLIST_EMPTY_RCU(head) (atomic_read(&(head)->lh_first) == NULL) #define QLIST_FIRST_RCU(head) (atomic_rcu_read(&(head)->lh_first)) #define QLIST_NEXT_RCU(elm, field) (atomic_rcu_read(&(elm)->field.le_next)) From patchwork Tue Aug 21 17:02:10 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960617 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=redhat.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="dffbvcF0"; 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 41vy9353kXz9s3x for ; Wed, 22 Aug 2018 03:19:51 +1000 (AEST) Received: from localhost ([::1]:55022 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAJp-0007QC-9w for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:19:49 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33561) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4b-00025C-FF for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4V-0006mY-Fk for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:04 -0400 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]:34998) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4U-0006S6-Na for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:59 -0400 Received: by mail-wr1-x436.google.com with SMTP id j26-v6so646968wre.2 for ; Tue, 21 Aug 2018 10:03:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=ae6GjnXOg6vbEmnx4JiDA9WCwDYSZ7YTD00Ly8CFm0o=; b=dffbvcF0BTLd37D4tVCi4/dasszPy0upnu4yOftg+B6ak28g57Uxr0xBS4STBZ5TSK CzzERM1sIuFKeUmwNRM2EztyF2G5cWLv8pfvMjw/tBypvc7HpO5m/xf8Q+D/AvfafOcd 9kM6ijMecJhcTfE2dXw1obc+vX0dsinN08Fumfq0YuDpkv3nqwbrcmGiFr24ZL38TYGt ycyKBUxyeEuCGWcgIsqY7BfTSM1JNO/EFyIT9v6GmpJln2hHMdhuak6bMuBdkwhfISWv Jmi5xRPKgE7INdugM231ChGYn84bOFGmlSAxjoEJN2NNG2zyYBMWXn3f7+Dj6U/5IRhY hSXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=ae6GjnXOg6vbEmnx4JiDA9WCwDYSZ7YTD00Ly8CFm0o=; b=eH+1bAtSAAIbd63mrWzZaL/8CjTsanLzLRn+/T42FY1Iat0m+GYk974RiSr+/94KAk aeHLUwn75E2esCNkCcecGSW3S7wqqkKyzFQCnqIzqoAMR4KU5ajziOThHJov6ktSV/sF 659eqZC9VQD5ygN6gcMLBicp+RqP4BS2npJbs+wfNUlN33JNy7oPyoXEi8gPkzKZvxB7 7me8or+1qk1l/aM6bICAuJqwrjOzRuipWwFkgjeG9xiEGOMuEkGRCFNN4vCKAQ6AydFc AkJFL+gns40wZCdKTpupC2A+6JL+86sSuh9s9ctQoFd27RfZb45unVpErXtuiXBASYO0 +sbg== X-Gm-Message-State: APzg51DHpViqWYkmdeBcfkXq7lGioHkFpFC0FfAzs7Z7TXLiTB3M8DWf Ux9s5rch0HAwIZRuY2FaozSPmMB9 X-Google-Smtp-Source: ANB0VdYofR5twG32hc3fSoXsXzLZlAjmhZ40lTT04TR/+yzp8blNDd0zbyw4dscxRdWGZw2LJLHHNw== X-Received: by 2002:adf:e486:: with SMTP id i6-v6mr2039266wrm.145.1534871025251; Tue, 21 Aug 2018 10:03:45 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:44 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:10 +0200 Message-Id: <1534870966-9287-39-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::436 Subject: [Qemu-devel] [PULL 38/74] rcu_queue: add RCU QSIMPLEQ 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" Signed-off-by: Emilio G. Cota Message-Id: <20180819091335.22863-4-cota@braap.org> Signed-off-by: Paolo Bonzini --- include/qemu/rcu_queue.h | 65 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/include/qemu/rcu_queue.h b/include/qemu/rcu_queue.h index 6881ea5..e0395c9 100644 --- a/include/qemu/rcu_queue.h +++ b/include/qemu/rcu_queue.h @@ -128,6 +128,71 @@ extern "C" { ((next_var) = atomic_rcu_read(&(var)->field.le_next), 1); \ (var) = (next_var)) +/* + * RCU simple queue + */ + +/* Simple queue access methods */ +#define QSIMPLEQ_EMPTY_RCU(head) (atomic_read(&(head)->sqh_first) == NULL) +#define QSIMPLEQ_FIRST_RCU(head) atomic_rcu_read(&(head)->sqh_first) +#define QSIMPLEQ_NEXT_RCU(elm, field) atomic_rcu_read(&(elm)->field.sqe_next) + +/* Simple queue functions */ +#define QSIMPLEQ_INSERT_HEAD_RCU(head, elm, field) do { \ + (elm)->field.sqe_next = (head)->sqh_first; \ + if ((elm)->field.sqe_next == NULL) { \ + (head)->sqh_last = &(elm)->field.sqe_next; \ + } \ + atomic_rcu_set(&(head)->sqh_first, (elm)); \ +} while (/*CONSTCOND*/0) + +#define QSIMPLEQ_INSERT_TAIL_RCU(head, elm, field) do { \ + (elm)->field.sqe_next = NULL; \ + atomic_rcu_set((head)->sqh_last, (elm)); \ + (head)->sqh_last = &(elm)->field.sqe_next; \ +} while (/*CONSTCOND*/0) + +#define QSIMPLEQ_INSERT_AFTER_RCU(head, listelm, elm, field) do { \ + (elm)->field.sqe_next = (listelm)->field.sqe_next; \ + if ((elm)->field.sqe_next == NULL) { \ + (head)->sqh_last = &(elm)->field.sqe_next; \ + } \ + atomic_rcu_set(&(listelm)->field.sqe_next, (elm)); \ +} while (/*CONSTCOND*/0) + +#define QSIMPLEQ_REMOVE_HEAD_RCU(head, field) do { \ + atomic_set(&(head)->sqh_first, (head)->sqh_first->field.sqe_next); \ + if ((head)->sqh_first == NULL) { \ + (head)->sqh_last = &(head)->sqh_first; \ + } \ +} while (/*CONSTCOND*/0) + +#define QSIMPLEQ_REMOVE_RCU(head, elm, type, field) do { \ + if ((head)->sqh_first == (elm)) { \ + QSIMPLEQ_REMOVE_HEAD_RCU((head), field); \ + } else { \ + struct type *curr = (head)->sqh_first; \ + while (curr->field.sqe_next != (elm)) { \ + curr = curr->field.sqe_next; \ + } \ + atomic_set(&curr->field.sqe_next, \ + curr->field.sqe_next->field.sqe_next); \ + if (curr->field.sqe_next == NULL) { \ + (head)->sqh_last = &(curr)->field.sqe_next; \ + } \ + } \ +} while (/*CONSTCOND*/0) + +#define QSIMPLEQ_FOREACH_RCU(var, head, field) \ + for ((var) = atomic_rcu_read(&(head)->sqh_first); \ + (var); \ + (var) = atomic_rcu_read(&(var)->field.sqe_next)) + +#define QSIMPLEQ_FOREACH_SAFE_RCU(var, head, field, next) \ + for ((var) = atomic_rcu_read(&(head)->sqh_first); \ + (var) && ((next) = atomic_rcu_read(&(var)->field.sqe_next), 1); \ + (var) = (next)) + #ifdef __cplusplus } #endif From patchwork Tue Aug 21 17:02:11 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960586 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=redhat.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="uUJZZXao"; 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 41vy5H5yWLz9s7c for ; Wed, 22 Aug 2018 03:16:35 +1000 (AEST) Received: from localhost ([::1]:55008 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAGf-0004kw-Ei for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:16:33 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33487) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4Z-0001zN-A0 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4V-0006mA-9F for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:02 -0400 Received: from mail-wm0-x232.google.com ([2a00:1450:400c:c09::232]:53043) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4U-0006U1-Dx for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:58 -0400 Received: by mail-wm0-x232.google.com with SMTP id y139-v6so854074wmc.2 for ; Tue, 21 Aug 2018 10:03:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=tm/btBHjNv+Plz2ZAsHTrj0ppG0VKwzeRKILFdh3A0I=; b=uUJZZXaos87fFI8kYgsCD3Y+8QaAx087f6FRlrNPwPMf3Qc2WbAIBYRcaF44PKR0zq oUEAk9O2enZckrOI+dQ/YPMgjA5y5YGq7RqYbnZhM26EEWp75nW+BoRdAp75D/Sh/oq7 odUYJ0BU1c+jq03oqc6JNff+/TbMCbElhoRy+FJEZAvY1Yh/Dp4NENoE0oz7Jl6fDW8Y UIDx/gh13h6EPgItkSgQzHa0TUhkDIFmKWPt7SrYWX1G6NcqlpTNW+exGbKEtXv+NllI sTsqSHrxCnRG/hL5ZikcTIrO9JMewuyWLSLuA8mB+NiGtKAAh09tBYPTYTF4vtU+asOF ZwNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=tm/btBHjNv+Plz2ZAsHTrj0ppG0VKwzeRKILFdh3A0I=; b=UbZCCAl8ga8GmlsianW1ACYSqtq0PNcieZE5pQh/QRobrp12Upfmerd6wOGvUa4T5C mWrSaJXP9WPXHgJ1eelf835oaaBEHZ5W8gk9Wnf122pranvIAOSd3+4M9Y0kHD4VjmsK FATxa67PaHk2EjZOv/M3rKg0KVA+GsggWZ+4T9saOwk3NW5X2w0Cufx2aC+X8L3B8nui gq+m4AhTFhvWCTBJD/Iyvl7oCOeDQXF+5uY07sUGoxqfLR/QUITs3tP0W1nE6fJzqeXu Z8RZkyAW6lmP76OBnPPxFuv3Y2D/Nz2GAqZe7CvMQsJqWa9l3DZ+ecRvwuxNvobyVfDD vXvw== X-Gm-Message-State: APzg51DMBYVGZTTqhjHmmlfIctaNrYteqgQUDZmmqvYJcMVDuIK+a88s GTUEUKWlYb9MmYxw5twPmXUE7KbM X-Google-Smtp-Source: ANB0Vdb1IlietamEiz2MhH5iIPtm4FRq6OfizkY7ViIOrcZxn7fEKsO/pMUzoqsq05pGl5Yl4zgYBw== X-Received: by 2002:a1c:ea53:: with SMTP id i80-v6mr135028wmh.113.1534871026274; Tue, 21 Aug 2018 10:03:46 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:45 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:11 +0200 Message-Id: <1534870966-9287-40-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::232 Subject: [Qemu-devel] [PULL 39/74] rcu_queue: add RCU QTAILQ 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" Signed-off-by: Emilio G. Cota Message-Id: <20180819091335.22863-5-cota@braap.org> Signed-off-by: Paolo Bonzini --- include/qemu/rcu_queue.h | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/include/qemu/rcu_queue.h b/include/qemu/rcu_queue.h index e0395c9..904b337 100644 --- a/include/qemu/rcu_queue.h +++ b/include/qemu/rcu_queue.h @@ -193,6 +193,72 @@ extern "C" { (var) && ((next) = atomic_rcu_read(&(var)->field.sqe_next), 1); \ (var) = (next)) +/* + * RCU tail queue + */ + +/* Tail queue access methods */ +#define QTAILQ_EMPTY_RCU(head) (atomic_read(&(head)->tqh_first) == NULL) +#define QTAILQ_FIRST_RCU(head) atomic_rcu_read(&(head)->tqh_first) +#define QTAILQ_NEXT_RCU(elm, field) atomic_rcu_read(&(elm)->field.tqe_next) + +/* Tail queue functions */ +#define QTAILQ_INSERT_HEAD_RCU(head, elm, field) do { \ + (elm)->field.tqe_next = (head)->tqh_first; \ + if ((elm)->field.tqe_next != NULL) { \ + (head)->tqh_first->field.tqe_prev = &(elm)->field.tqe_next; \ + } else { \ + (head)->tqh_last = &(elm)->field.tqe_next; \ + } \ + atomic_rcu_set(&(head)->tqh_first, (elm)); \ + (elm)->field.tqe_prev = &(head)->tqh_first; \ +} while (/*CONSTCOND*/0) + +#define QTAILQ_INSERT_TAIL_RCU(head, elm, field) do { \ + (elm)->field.tqe_next = NULL; \ + (elm)->field.tqe_prev = (head)->tqh_last; \ + atomic_rcu_set((head)->tqh_last, (elm)); \ + (head)->tqh_last = &(elm)->field.tqe_next; \ +} while (/*CONSTCOND*/0) + +#define QTAILQ_INSERT_AFTER_RCU(head, listelm, elm, field) do { \ + (elm)->field.tqe_next = (listelm)->field.tqe_next; \ + if ((elm)->field.tqe_next != NULL) { \ + (elm)->field.tqe_next->field.tqe_prev = &(elm)->field.tqe_next; \ + } else { \ + (head)->tqh_last = &(elm)->field.tqe_next; \ + } \ + atomic_rcu_set(&(listelm)->field.tqe_next, (elm)); \ + (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ +} while (/*CONSTCOND*/0) + +#define QTAILQ_INSERT_BEFORE_RCU(listelm, elm, field) do { \ + (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ + (elm)->field.tqe_next = (listelm); \ + atomic_rcu_set((listelm)->field.tqe_prev, (elm)); \ + (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \ + } while (/*CONSTCOND*/0) + +#define QTAILQ_REMOVE_RCU(head, elm, field) do { \ + if (((elm)->field.tqe_next) != NULL) { \ + (elm)->field.tqe_next->field.tqe_prev = (elm)->field.tqe_prev; \ + } else { \ + (head)->tqh_last = (elm)->field.tqe_prev; \ + } \ + atomic_set((elm)->field.tqe_prev, (elm)->field.tqe_next); \ + (elm)->field.tqe_prev = NULL; \ +} while (/*CONSTCOND*/0) + +#define QTAILQ_FOREACH_RCU(var, head, field) \ + for ((var) = atomic_rcu_read(&(head)->tqh_first); \ + (var); \ + (var) = atomic_rcu_read(&(var)->field.tqe_next)) + +#define QTAILQ_FOREACH_SAFE_RCU(var, head, field, next) \ + for ((var) = atomic_rcu_read(&(head)->tqh_first); \ + (var) && ((next) = atomic_rcu_read(&(var)->field.tqe_next), 1); \ + (var) = (next)) + #ifdef __cplusplus } #endif From patchwork Tue Aug 21 17:02:12 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960676 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=redhat.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="HBbrPdRy"; 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 41vz4M6fRwz9s4Z for ; Wed, 22 Aug 2018 04:00:51 +1000 (AEST) Received: from localhost ([::1]:55249 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAxV-0001fn-IJ for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 14:00:49 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33724) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4n-0002IP-Vb for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4X-0006r5-Qo for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:11 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:45269) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4W-0006Uw-RB for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:01 -0400 Received: by mail-wr1-x442.google.com with SMTP id 20-v6so10507592wrb.12 for ; Tue, 21 Aug 2018 10:03:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=0PMTAJ1qNT+Z0P5oJp8NdnRMsB51w3CiYtw4bOM2zzs=; b=HBbrPdRym29AILcIl39ErgvFytYtiFekemk8jGu3jGHos8z40Sy4G5z7WCw8nEH1nl WVjg0X3ubaDiPnUDwjKG1qdfv71EJi6DfJFOn+OWP/LFxh77stFTaUqs3gq9JhOflSZ4 Br7yLORZm9IXqaTdaxhXjrGP6YFQTuX/nU/94ML4NgFXtYmUp/lkajd35CQswXGGcPsx 7mzHh7RdaB+KH4qOk3Z3KmATI3KLw8ymhHALVaRuV3ATw7vocx/vX/DZ1uycJvcp1i87 hai2t7NmK6lqi+XOSr4SPV7cYl3e7u1OtOMoNZwvLz0xP1txiBFMvEcOX5mbApQ840l+ q+rQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=0PMTAJ1qNT+Z0P5oJp8NdnRMsB51w3CiYtw4bOM2zzs=; b=CnfkjVfqvRBfc2qCDgYlhKHDp/x5NMkRpEcO6BL8pSlHT6CjgthwaB33lJIMQ2oVJo 7hXAnN6hmEln6/FYHbs0t7ihxVybet6JckqNhhdrSU2eFVOU7LqiAxgPHIGNt5JtL8at g5NWhMmv3VGOuMs61QWqjCLqWimVu1f74vVdTvqbrhNathRE6pUjPrfSWbcgZCUpwWd2 0HQD0ypxFUQs3HWXgF0dxry83FmiafZz7XcdPB1d+RifYVjk5fjvUyXYvdxI6WiBchco 73cbdc3XJ6/XSLtyMkMO4rsPkBtYJo6VEkDgwB3icaGsP6ZJU3vuBmPuPjSCn3EMIPjK ECdQ== X-Gm-Message-State: APzg51AE042VJIxvHWr3JYQ/hBJiTlB3g6jkeTAt9mcmi7klg7ag1j3b ff3fO4UJH1vWrXWVTLGUxvDpBi6h X-Google-Smtp-Source: ANB0VdaAVnwOxNTKJVaevGP2X+ouTW1COmHEj1SKBbVEg6jDGOBUZXKO1pIr95V+IHBrpCw7ug/kEA== X-Received: by 2002:a5d:4605:: with SMTP id t5-v6mr997720wrq.200.1534871027408; Tue, 21 Aug 2018 10:03:47 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:46 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:12 +0200 Message-Id: <1534870966-9287-41-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::442 Subject: [Qemu-devel] [PULL 40/74] test-rcu-list: access goflag with atomics 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" Instead of declaring it volatile. Signed-off-by: Emilio G. Cota Message-Id: <20180819091335.22863-6-cota@braap.org> Signed-off-by: Paolo Bonzini --- tests/test-rcu-list.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/test-rcu-list.c b/tests/test-rcu-list.c index 1514d7e..b4ed130 100644 --- a/tests/test-rcu-list.c +++ b/tests/test-rcu-list.c @@ -44,7 +44,7 @@ static int nthreadsrunning; #define GOFLAG_RUN 1 #define GOFLAG_STOP 2 -static volatile int goflag = GOFLAG_INIT; +static int goflag = GOFLAG_INIT; #define RCU_READ_RUN 1000 #define RCU_UPDATE_RUN 10 @@ -107,15 +107,15 @@ static void *rcu_q_reader(void *arg) *(struct rcu_reader_data **)arg = &rcu_reader; atomic_inc(&nthreadsrunning); - while (goflag == GOFLAG_INIT) { + while (atomic_read(&goflag) == GOFLAG_INIT) { g_usleep(1000); } - while (goflag == GOFLAG_RUN) { + while (atomic_read(&goflag) == GOFLAG_RUN) { rcu_read_lock(); QLIST_FOREACH_RCU(el, &Q_list_head, entry) { n_reads_local++; - if (goflag == GOFLAG_STOP) { + if (atomic_read(&goflag) == GOFLAG_STOP) { break; } } @@ -142,11 +142,11 @@ static void *rcu_q_updater(void *arg) *(struct rcu_reader_data **)arg = &rcu_reader; atomic_inc(&nthreadsrunning); - while (goflag == GOFLAG_INIT) { + while (atomic_read(&goflag) == GOFLAG_INIT) { g_usleep(1000); } - while (goflag == GOFLAG_RUN) { + while (atomic_read(&goflag) == GOFLAG_RUN) { target_el = select_random_el(RCU_Q_LEN); j = 0; /* FOREACH_RCU could work here but let's use both macros */ @@ -160,7 +160,7 @@ static void *rcu_q_updater(void *arg) break; } } - if (goflag == GOFLAG_STOP) { + if (atomic_read(&goflag) == GOFLAG_STOP) { break; } target_el = select_random_el(RCU_Q_LEN); @@ -209,9 +209,9 @@ static void rcu_qtest_run(int duration, int nreaders) g_usleep(1000); } - goflag = GOFLAG_RUN; + atomic_set(&goflag, GOFLAG_RUN); sleep(duration); - goflag = GOFLAG_STOP; + atomic_set(&goflag, GOFLAG_STOP); wait_all_threads(); } From patchwork Tue Aug 21 17:02:13 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960656 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=redhat.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="SCBUvcKF"; 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 41vyhc64HDz9s47 for ; Wed, 22 Aug 2018 03:43:44 +1000 (AEST) Received: from localhost ([::1]:55151 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAgw-0006WD-Ei for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:43:42 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33557) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4b-000258-Ee for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4V-0006nL-QQ for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:04 -0400 Received: from mail-wm0-x244.google.com ([2a00:1450:400c:c09::244]:56162) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4V-0006Wg-04 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:59 -0400 Received: by mail-wm0-x244.google.com with SMTP id f21-v6so3618819wmc.5 for ; Tue, 21 Aug 2018 10:03:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=RaVqtuyEYbz6G6UkL4H69O+K+TyiAGxEgpZRwg8OWxU=; b=SCBUvcKFuepJ8UX2sEwMvTJjQbrlH96shpP6i0C4SsL57Lh0fn/9GDslfUe/xO68uX V12WhQj4+Oe+Lo3JCzAzCYgIaNrjPVIWoUhYMig1NqQuqv8oa11Cnqljz4O+sY1fL5b6 KopbcGfreFtIVrqgPazyAyZqnrAv4rx1fiDhlcdh8v2KtnFF7Ed2VhTrzEs+M9COSXVi z/qEMllBx8Mt1Bv5/a3OkfGZT1yqrJFESrwUbNQ7DmrhJhlHbEMJLnhXkukeYLwPGdCi J9LHAmIdbgrarWgXuHc59UgzIrI+sVWU+AYvnoFa2yBEweFE6k8esMe2ozfzNiBs10+c X5sg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=RaVqtuyEYbz6G6UkL4H69O+K+TyiAGxEgpZRwg8OWxU=; b=g7DMJJUP8fBT/YY8ElAhW8dk964R9ik2EY26cHChXg5Ddi/Ft0FGWNm4ZEBFJjakJh 6/EopYoVbwh6sgm+AfqnSuXlErBfuelCZpzojdtSWcRxoKMTU0rkXNi2mFb4GOZqMcoZ UlfGySmdCY1JrS0xYmdjHH8uIQZ/VArHinxPzGUTg7wkR5vwLvUgQYKhFZ79tRUwtRXK GTm6epjVDhqM9DCiQg2L6+HFFrJ1F52xxZgL160IbIjseR7R1Jk+qkACGnwxIod6eqqe myQMEQKUca88tRwXJ5s4BsH7uB8T0UtygDDP2uRJD7bOGf2zYuqbdIMc0vRKbIHx3snf 38aw== X-Gm-Message-State: APzg51C2NYlGwi0RzF4/UdwNvQsiW0Z6bKAOyFXHvPqRMg0nitfUyL/5 4IurB0lTHQ2SEIoADT+eYTZiyGYZ X-Google-Smtp-Source: ANB0VdZ9EPPaVI7CVLaIHWVx7sITPjBHaSFWH+YcOt+8QEi0dDjUc2W5ZzjoQ+b7r0OWBezokT77bg== X-Received: by 2002:a1c:908b:: with SMTP id s133-v6mr134360wmd.69.1534871028645; Tue, 21 Aug 2018 10:03:48 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:47 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:13 +0200 Message-Id: <1534870966-9287-42-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::244 Subject: [Qemu-devel] [PULL 41/74] test-rcu-list: access counters with atomics 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" Signed-off-by: Emilio G. Cota Message-Id: <20180819091335.22863-7-cota@braap.org> Signed-off-by: Paolo Bonzini --- tests/test-rcu-list.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/test-rcu-list.c b/tests/test-rcu-list.c index b4ed130..dc58091 100644 --- a/tests/test-rcu-list.c +++ b/tests/test-rcu-list.c @@ -93,7 +93,7 @@ static void reclaim_list_el(struct rcu_head *prcu) struct list_element *el = container_of(prcu, struct list_element, rcu); g_free(el); /* Accessed only from call_rcu thread. */ - n_reclaims++; + atomic_set(&n_reclaims, n_reclaims + 1); } static QLIST_HEAD(q_list_head, list_element) Q_list_head; @@ -182,7 +182,7 @@ static void *rcu_q_updater(void *arg) qemu_mutex_lock(&counts_mutex); n_nodes += n_nodes_local; n_updates += n_updates_local; - n_nodes_removed += n_removed_local; + atomic_set(&n_nodes_removed, n_nodes_removed + n_removed_local); qemu_mutex_unlock(&counts_mutex); return NULL; } @@ -239,16 +239,18 @@ static void rcu_qtest(const char *test, int duration, int nreaders) n_nodes_removed += n_removed_local; qemu_mutex_unlock(&counts_mutex); synchronize_rcu(); - while (n_nodes_removed > n_reclaims) { + while (atomic_read(&n_nodes_removed) > atomic_read(&n_reclaims)) { g_usleep(100); synchronize_rcu(); } if (g_test_in_charge) { - g_assert_cmpint(n_nodes_removed, ==, n_reclaims); + g_assert_cmpint(atomic_read(&n_nodes_removed), ==, + atomic_read(&n_reclaims)); } else { printf("%s: %d readers; 1 updater; nodes read: " \ "%lld, nodes removed: %lld; nodes reclaimed: %lld\n", - test, nthreadsrunning - 1, n_reads, n_nodes_removed, n_reclaims); + test, nthreadsrunning - 1, n_reads, + atomic_read(&n_nodes_removed), atomic_read(&n_reclaims)); exit(0); } } From patchwork Tue Aug 21 17:02:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960681 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=redhat.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="mZtIQbDG"; 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 41vzBQ1bGvz9s4Z for ; Wed, 22 Aug 2018 04:06:05 +1000 (AEST) Received: from localhost ([::1]:55284 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsB2Z-0006xI-FK for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 14:06:03 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33732) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4o-0002IR-2h for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4V-0006n2-Mw for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:13 -0400 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]:41977) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4U-0006Xl-SJ for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:59 -0400 Received: by mail-wr1-x430.google.com with SMTP id z96-v6so7812716wrb.8 for ; Tue, 21 Aug 2018 10:03:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=b65nkwu+id8IbL8bANLc6YNjQ3I7Ytw6+hbXnoyAzEI=; b=mZtIQbDG460tFnXdg8a6ifYaQg+otPoTCobjuSopi8Ekj6mP0E8S8E6P0haZtR85r/ U1iEkJ+uvQ4yszGE3b0mIOPfdPwJIel7ShyOR7zpRq8GGi8AyQ0XMKZZCd7fWuPoHpLJ Fh1Jk49/0N/uq40ujaOHY1NZuNqGxspbj9eJm46w0zeiRq6cbN0XNlrsXNyQvdS0Tia2 jjC6Cx+dswEXIPCcaC0HdYwI1B4Aciaolzgu26w5Cj5jmcquxlyTdYpEgVl9LDn8XfMt nQ5eFrnc7hp8TbdGunKWePjn9NRqc1ZKgWtGKibq7uiQZRGEfTPSaqZRdzUeX7JHhYWp PZFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=b65nkwu+id8IbL8bANLc6YNjQ3I7Ytw6+hbXnoyAzEI=; b=dahKAlXZ4Q012JxXB+G+HFSg+nrg8NklBdtTIGeAEj3NfnAGqLYL/xUE7A/hvNbc/M gLguMzkTqWtjbqcV4Gl2ZhU/TONHhE9DM5oJdWedJ2QE+TCF7TL/IPjHspRQE9y+ssIr solSB0yY2d5nx7tb4ePNBLTH+KCcvI/nzt3e98mi2QUExnoEUbFdKNlrmNuD68J8Agd8 J/Ke5fPTPyOBovDJULfanqvRU1+IZm0lipZ2wuqsAAKva9/4YTHGZrJDBZfdm1A3igRE ddGDKixd9mSRPI2RF3WyQLtvXs1Kudmq1/QJKBZSKJj23V8qhgztyxauH72gmy5XySpD 4YQQ== X-Gm-Message-State: APzg51AlytAPsj28sYlqqnl3Gv+H/RivWkFeqcADs5yzYus2uHcXjjuN Fi2S63lLcuSQY1TXUsO0j/J+qs/H X-Google-Smtp-Source: ANB0VdY/vV2EjRsvQC9Wi/imwWteXsf+7EmwPwWh4Sz6m+66ByjN7D0kNsPjLCnUpQxDwe0gHDBbSQ== X-Received: by 2002:adf:f7c4:: with SMTP id a4-v6mr8816085wrq.86.1534871029770; Tue, 21 Aug 2018 10:03:49 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:49 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:14 +0200 Message-Id: <1534870966-9287-43-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::430 Subject: [Qemu-devel] [PULL 42/74] test-rcu-list: abstract the list implementation 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" So that we can test other implementations. Signed-off-by: Emilio G. Cota Message-Id: <20180819091335.22863-8-cota@braap.org> Signed-off-by: Paolo Bonzini --- tests/test-rcu-list.c | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/tests/test-rcu-list.c b/tests/test-rcu-list.c index dc58091..9bd1136 100644 --- a/tests/test-rcu-list.c +++ b/tests/test-rcu-list.c @@ -82,9 +82,16 @@ static void wait_all_threads(void) n_threads = 0; } +#ifndef TEST_LIST_TYPE +#define TEST_LIST_TYPE 1 +#endif struct list_element { +#if TEST_LIST_TYPE == 1 QLIST_ENTRY(list_element) entry; +#else +#error Invalid TEST_LIST_TYPE +#endif struct rcu_head rcu; }; @@ -96,8 +103,19 @@ static void reclaim_list_el(struct rcu_head *prcu) atomic_set(&n_reclaims, n_reclaims + 1); } +#if TEST_LIST_TYPE == 1 static QLIST_HEAD(q_list_head, list_element) Q_list_head; +#define TEST_NAME "qlist" +#define TEST_LIST_REMOVE_RCU QLIST_REMOVE_RCU +#define TEST_LIST_INSERT_AFTER_RCU QLIST_INSERT_AFTER_RCU +#define TEST_LIST_INSERT_HEAD_RCU QLIST_INSERT_HEAD_RCU +#define TEST_LIST_FOREACH_RCU QLIST_FOREACH_RCU +#define TEST_LIST_FOREACH_SAFE_RCU QLIST_FOREACH_SAFE_RCU +#else +#error Invalid TEST_LIST_TYPE +#endif + static void *rcu_q_reader(void *arg) { long long n_reads_local = 0; @@ -113,7 +131,7 @@ static void *rcu_q_reader(void *arg) while (atomic_read(&goflag) == GOFLAG_RUN) { rcu_read_lock(); - QLIST_FOREACH_RCU(el, &Q_list_head, entry) { + TEST_LIST_FOREACH_RCU(el, &Q_list_head, entry) { n_reads_local++; if (atomic_read(&goflag) == GOFLAG_STOP) { break; @@ -150,10 +168,10 @@ static void *rcu_q_updater(void *arg) target_el = select_random_el(RCU_Q_LEN); j = 0; /* FOREACH_RCU could work here but let's use both macros */ - QLIST_FOREACH_SAFE_RCU(prev_el, &Q_list_head, entry, el) { + TEST_LIST_FOREACH_SAFE_RCU(prev_el, &Q_list_head, entry, el) { j++; if (target_el == j) { - QLIST_REMOVE_RCU(prev_el, entry); + TEST_LIST_REMOVE_RCU(prev_el, entry); /* may be more than one updater in the future */ call_rcu1(&prev_el->rcu, reclaim_list_el); n_removed_local++; @@ -165,12 +183,12 @@ static void *rcu_q_updater(void *arg) } target_el = select_random_el(RCU_Q_LEN); j = 0; - QLIST_FOREACH_RCU(el, &Q_list_head, entry) { + TEST_LIST_FOREACH_RCU(el, &Q_list_head, entry) { j++; if (target_el == j) { - prev_el = g_new(struct list_element, 1); + struct list_element *new_el = g_new(struct list_element, 1); n_nodes += n_nodes_local; - QLIST_INSERT_BEFORE_RCU(el, prev_el, entry); + TEST_LIST_INSERT_AFTER_RCU(el, new_el, entry); break; } } @@ -195,7 +213,7 @@ static void rcu_qtest_init(void) srand(time(0)); for (i = 0; i < RCU_Q_LEN; i++) { new_el = g_new(struct list_element, 1); - QLIST_INSERT_HEAD_RCU(&Q_list_head, new_el, entry); + TEST_LIST_INSERT_HEAD_RCU(&Q_list_head, new_el, entry); } qemu_mutex_lock(&counts_mutex); n_nodes += RCU_Q_LEN; @@ -230,8 +248,8 @@ static void rcu_qtest(const char *test, int duration, int nreaders) create_thread(rcu_q_updater); rcu_qtest_run(duration, nreaders); - QLIST_FOREACH_SAFE_RCU(prev_el, &Q_list_head, entry, el) { - QLIST_REMOVE_RCU(prev_el, entry); + TEST_LIST_FOREACH_SAFE_RCU(prev_el, &Q_list_head, entry, el) { + TEST_LIST_REMOVE_RCU(prev_el, entry); call_rcu1(&prev_el->rcu, reclaim_list_el); n_removed_local++; } @@ -292,9 +310,9 @@ int main(int argc, char *argv[]) } else { gtest_seconds = 20; } - g_test_add_func("/rcu/qlist/single-threaded", gtest_rcuq_one); - g_test_add_func("/rcu/qlist/short-few", gtest_rcuq_few); - g_test_add_func("/rcu/qlist/long-many", gtest_rcuq_many); + g_test_add_func("/rcu/"TEST_NAME"/single-threaded", gtest_rcuq_one); + g_test_add_func("/rcu/"TEST_NAME"/short-few", gtest_rcuq_few); + g_test_add_func("/rcu/"TEST_NAME"/long-many", gtest_rcuq_many); g_test_in_charge = 1; return g_test_run(); } From patchwork Tue Aug 21 17:02:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960625 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=redhat.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="LthhduXu"; 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 41vyDb1gjwz9s3x for ; Wed, 22 Aug 2018 03:22:55 +1000 (AEST) Received: from localhost ([::1]:55040 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAMm-00044c-Lp for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:22:52 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33560) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4b-00025B-F7 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4V-0006mO-D4 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:04 -0400 Received: from mail-wm0-x22d.google.com ([2a00:1450:400c:c09::22d]:55483) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4U-0006ZI-Kh for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:58 -0400 Received: by mail-wm0-x22d.google.com with SMTP id f21-v6so3618901wmc.5 for ; Tue, 21 Aug 2018 10:03:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=S0DpfI/6XsdwkJNdJIsiH+sOJT8JUjZJpHmAc0MT+48=; b=LthhduXuwIfmVllSIhoMMbKZzAwHkT73PW80MoxJxX6mB4KH33Jo/rWb1QmyK5nEgb iwBL+8/pXBC3QAz/maTfxbf0qrcci1iz+uaIk75ZPnrMXNt/gWy/UZUI+/eNT5qJwIAV 06qQ9oYQzzWymFp4lRJhFSE3N5t2l/i0TBavvmEB02sgES5O4LJOXqh0IlTcwn47m2JL sQqA9yujOYnDIuLjWJSGDuMOXaB27f3WLhr81w+qD2G8+ie9pBTCMwe0taGGCNaMAXFF oqesLpnxmxmsYtEgmQu/4XR56ECFnqe0Lsq2MIZ7DMNcaBME7yZKa5Yu3fngH51j4bkA z6QA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=S0DpfI/6XsdwkJNdJIsiH+sOJT8JUjZJpHmAc0MT+48=; b=telH0A1Sihzrgt86beKUTgSN3bgJC6t2h2KSKZYo4TYiVJIzLZaRaQ6Fb2rMKaMDJ+ bRAD3K80VkIfIPvduV2OtDygPqtdGUKs3IRXCL8OIGj0ErO8RGfO/GF/qy9symeLQ5Ar thEu5AeT7e1sXKYiDcZ4fuXCQp2DkyVfsYZbQ7YY5u6fVYKyUy1c46Ydzt374Hl64Zh2 LCgueRfJuydNP2cPtAzoza1bHL/oOQ5DeLvssMHUPeCI5Nr4PfWeiz7qN5+w+/qjtL7p Vtuu3p8ERbaVLLO5QERb2Al0KWNNpr1EB5rJLL/AKMRxGMVcAlriCNXJXy3gfSso1Ze5 UIPw== X-Gm-Message-State: APzg51A5N12O9NHp6c4DvEGjld+YRr4LGdjjIIc5d4k+CLo4qKxPvZeY yIxy44smUPi1Bqflbaq3Mm8VFOS6 X-Google-Smtp-Source: ANB0VdbUlpLLdQ1AXalcINCFVglLK/2Jv5uTPMRBGaLvAl9KMIxJnH19Qj+abwjmYvnmsQMWKZWSUQ== X-Received: by 2002:a1c:e54:: with SMTP id 81-v6mr161948wmo.84.1534871030690; Tue, 21 Aug 2018 10:03:50 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:50 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:15 +0200 Message-Id: <1534870966-9287-44-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::22d Subject: [Qemu-devel] [PULL 43/74] tests: add test-list-simpleq 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" Signed-off-by: Emilio G. Cota Message-Id: <20180819091335.22863-9-cota@braap.org> Signed-off-by: Paolo Bonzini --- tests/Makefile.include | 4 ++++ tests/test-rcu-list.c | 17 +++++++++++++++++ tests/test-rcu-simpleq.c | 2 ++ 3 files changed, 23 insertions(+) create mode 100644 tests/test-rcu-simpleq.c diff --git a/tests/Makefile.include b/tests/Makefile.include index f3a761b..f6b6b22 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -116,6 +116,8 @@ check-unit-y += tests/rcutorture$(EXESUF) gcov-files-rcutorture-y = util/rcu.c check-unit-y += tests/test-rcu-list$(EXESUF) gcov-files-test-rcu-list-y = util/rcu.c +check-unit-y += tests/test-rcu-simpleq$(EXESUF) +gcov-files-test-rcu-simpleq-y = util/rcu.c check-unit-y += tests/test-qdist$(EXESUF) gcov-files-test-qdist-y = util/qdist.c check-unit-y += tests/test-qht$(EXESUF) @@ -598,6 +600,7 @@ test-obj-y = tests/check-qnum.o tests/check-qstring.o tests/check-qdict.o \ tests/test-x86-cpuid.o tests/test-mul64.o tests/test-int128.o \ tests/test-opts-visitor.o tests/test-qmp-event.o \ tests/rcutorture.o tests/test-rcu-list.o \ + tests/test-rcu-simpleq.o \ tests/test-qdist.o tests/test-shift128.o \ tests/test-qht.o tests/qht-bench.o tests/test-qht-par.o \ tests/atomic_add-bench.o @@ -647,6 +650,7 @@ tests/test-cutils$(EXESUF): tests/test-cutils.o util/cutils.o $(test-util-obj-y) tests/test-int128$(EXESUF): tests/test-int128.o tests/rcutorture$(EXESUF): tests/rcutorture.o $(test-util-obj-y) tests/test-rcu-list$(EXESUF): tests/test-rcu-list.o $(test-util-obj-y) +tests/test-rcu-simpleq$(EXESUF): tests/test-rcu-simpleq.o $(test-util-obj-y) tests/test-qdist$(EXESUF): tests/test-qdist.o $(test-util-obj-y) tests/test-qht$(EXESUF): tests/test-qht.o $(test-util-obj-y) tests/test-qht-par$(EXESUF): tests/test-qht-par.o tests/qht-bench$(EXESUF) $(test-util-obj-y) diff --git a/tests/test-rcu-list.c b/tests/test-rcu-list.c index 9bd1136..c8bdf49 100644 --- a/tests/test-rcu-list.c +++ b/tests/test-rcu-list.c @@ -89,6 +89,8 @@ static void wait_all_threads(void) struct list_element { #if TEST_LIST_TYPE == 1 QLIST_ENTRY(list_element) entry; +#elif TEST_LIST_TYPE == 2 + QSIMPLEQ_ENTRY(list_element) entry; #else #error Invalid TEST_LIST_TYPE #endif @@ -112,6 +114,21 @@ static QLIST_HEAD(q_list_head, list_element) Q_list_head; #define TEST_LIST_INSERT_HEAD_RCU QLIST_INSERT_HEAD_RCU #define TEST_LIST_FOREACH_RCU QLIST_FOREACH_RCU #define TEST_LIST_FOREACH_SAFE_RCU QLIST_FOREACH_SAFE_RCU + +#elif TEST_LIST_TYPE == 2 +static QSIMPLEQ_HEAD(, list_element) Q_list_head = + QSIMPLEQ_HEAD_INITIALIZER(Q_list_head); + +#define TEST_NAME "qsimpleq" +#define TEST_LIST_REMOVE_RCU(el, f) \ + QSIMPLEQ_REMOVE_RCU(&Q_list_head, el, list_element, f) + +#define TEST_LIST_INSERT_AFTER_RCU(list_el, el, f) \ + QSIMPLEQ_INSERT_AFTER_RCU(&Q_list_head, list_el, el, f) + +#define TEST_LIST_INSERT_HEAD_RCU QSIMPLEQ_INSERT_HEAD_RCU +#define TEST_LIST_FOREACH_RCU QSIMPLEQ_FOREACH_RCU +#define TEST_LIST_FOREACH_SAFE_RCU QSIMPLEQ_FOREACH_SAFE_RCU #else #error Invalid TEST_LIST_TYPE #endif diff --git a/tests/test-rcu-simpleq.c b/tests/test-rcu-simpleq.c new file mode 100644 index 0000000..057f7d3 --- /dev/null +++ b/tests/test-rcu-simpleq.c @@ -0,0 +1,2 @@ +#define TEST_LIST_TYPE 2 +#include "test-rcu-list.c" From patchwork Tue Aug 21 17:02:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960645 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=redhat.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="hkmIN4Wh"; 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 41vyWt089Pz9s47 for ; Wed, 22 Aug 2018 03:36:10 +1000 (AEST) Received: from localhost ([::1]:55112 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAZb-0008TR-JQ for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:36:07 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33559) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4b-00025A-F0 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4V-0006n7-Ns for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:04 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]:45850) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4U-0006aH-U4 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:59 -0400 Received: by mail-wr1-x42f.google.com with SMTP id 20-v6so10507759wrb.12 for ; Tue, 21 Aug 2018 10:03:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=5XFVO8VHW6FjC+yodGVunP72gVKatohyO0v7g7Q3PWA=; b=hkmIN4Wh5RhTkQZ2gOp0uapgs2yonrQ3Or5BGoqO2s9co8nxR8J9Ul+DPkBqWED+F5 xvBZ/hu5w//UYph+XqjKYLMWkhEkpHfHVcTGMlMSVLwKwSjX8Jb9AF15b/RQ3DM38Eyx xh++TGaxsH/ZhFV3wUqlDVPnYk9T/ZnyViaNvkFUcv1dMpn5m/HnNKbeYy3fWNwvDEHY adAaSySFTsvAxSb72mc0GEG2uU+f9+7OD6lDzACS3hun1ycXilunEwg8MMziD0VpsW3L vjWmiXt7/h7sFPg3vbDYmIY9XnGM2nexvdXPdsAIPNcU5V8gtnA1iTlr9fKhAJUJmI1R p4iA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=5XFVO8VHW6FjC+yodGVunP72gVKatohyO0v7g7Q3PWA=; b=Nj6x4I7R/xx8gApuktEXKDMpst4Bqnzpt2IGf0pLMy09Dx7rIJNmBmP0k8yjUhf4vK BN8AjcrlLJLfZaffxx0Nn0BgmFPI4VPFJbBUOSxkWt1VQ5WLNyhJazVzJzeApDADLx8g IDyCZn0IMcZyF31LP4G9Wc+QHbn4OMC6oWkTSTNv+HKA3iJb1Egk+flpTCczF9pbCDFM 9JG1bpCVSj2ZVbsypSnwPYttStFQtMsY1KoX3Ax8z3VAeCOm+vdhq2f4+YK0MxvRq8bq jmJeXS589NKFZSuHB2TLQw+I+4LTkUsdzvRG5tsStGv53tDhhpTMNFxa0K70lJl2CcUD wYKg== X-Gm-Message-State: APzg51D+CHAEmzIO30yllAxqKfRK15hhEhqv+dJ47fyZ5WAuOfWYMWzL +gp6dTodJlM5UHyxhXV3XhT9nVgm X-Google-Smtp-Source: ANB0Vda3dSCg/FmcCjdH5tu4UMfTeSxCnotbZkPNlXIK6pvCFPud4hIyFdf59xL0b4XSu8cT7GRWPQ== X-Received: by 2002:adf:e792:: with SMTP id n18-v6mr9237031wrm.136.1534871031588; Tue, 21 Aug 2018 10:03:51 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:51 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:16 +0200 Message-Id: <1534870966-9287-45-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42f Subject: [Qemu-devel] [PULL 44/74] tests: add test-rcu-tailq 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" Signed-off-by: Emilio G. Cota Message-Id: <20180819091335.22863-10-cota@braap.org> Signed-off-by: Paolo Bonzini --- tests/Makefile.include | 4 ++++ tests/test-rcu-list.c | 15 +++++++++++++++ tests/test-rcu-tailq.c | 2 ++ 3 files changed, 21 insertions(+) create mode 100644 tests/test-rcu-tailq.c diff --git a/tests/Makefile.include b/tests/Makefile.include index f6b6b22..961b28b 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -118,6 +118,8 @@ check-unit-y += tests/test-rcu-list$(EXESUF) gcov-files-test-rcu-list-y = util/rcu.c check-unit-y += tests/test-rcu-simpleq$(EXESUF) gcov-files-test-rcu-simpleq-y = util/rcu.c +check-unit-y += tests/test-rcu-tailq$(EXESUF) +gcov-files-test-rcu-tailq-y = util/rcu.c check-unit-y += tests/test-qdist$(EXESUF) gcov-files-test-qdist-y = util/qdist.c check-unit-y += tests/test-qht$(EXESUF) @@ -601,6 +603,7 @@ test-obj-y = tests/check-qnum.o tests/check-qstring.o tests/check-qdict.o \ tests/test-opts-visitor.o tests/test-qmp-event.o \ tests/rcutorture.o tests/test-rcu-list.o \ tests/test-rcu-simpleq.o \ + tests/test-rcu-tailq.o \ tests/test-qdist.o tests/test-shift128.o \ tests/test-qht.o tests/qht-bench.o tests/test-qht-par.o \ tests/atomic_add-bench.o @@ -651,6 +654,7 @@ tests/test-int128$(EXESUF): tests/test-int128.o tests/rcutorture$(EXESUF): tests/rcutorture.o $(test-util-obj-y) tests/test-rcu-list$(EXESUF): tests/test-rcu-list.o $(test-util-obj-y) tests/test-rcu-simpleq$(EXESUF): tests/test-rcu-simpleq.o $(test-util-obj-y) +tests/test-rcu-tailq$(EXESUF): tests/test-rcu-tailq.o $(test-util-obj-y) tests/test-qdist$(EXESUF): tests/test-qdist.o $(test-util-obj-y) tests/test-qht$(EXESUF): tests/test-qht.o $(test-util-obj-y) tests/test-qht-par$(EXESUF): tests/test-qht-par.o tests/qht-bench$(EXESUF) $(test-util-obj-y) diff --git a/tests/test-rcu-list.c b/tests/test-rcu-list.c index c8bdf49..8434700 100644 --- a/tests/test-rcu-list.c +++ b/tests/test-rcu-list.c @@ -91,6 +91,8 @@ struct list_element { QLIST_ENTRY(list_element) entry; #elif TEST_LIST_TYPE == 2 QSIMPLEQ_ENTRY(list_element) entry; +#elif TEST_LIST_TYPE == 3 + QTAILQ_ENTRY(list_element) entry; #else #error Invalid TEST_LIST_TYPE #endif @@ -129,6 +131,19 @@ static QSIMPLEQ_HEAD(, list_element) Q_list_head = #define TEST_LIST_INSERT_HEAD_RCU QSIMPLEQ_INSERT_HEAD_RCU #define TEST_LIST_FOREACH_RCU QSIMPLEQ_FOREACH_RCU #define TEST_LIST_FOREACH_SAFE_RCU QSIMPLEQ_FOREACH_SAFE_RCU + +#elif TEST_LIST_TYPE == 3 +static QTAILQ_HEAD(, list_element) Q_list_head; + +#define TEST_NAME "qtailq" +#define TEST_LIST_REMOVE_RCU(el, f) QTAILQ_REMOVE_RCU(&Q_list_head, el, f) + +#define TEST_LIST_INSERT_AFTER_RCU(list_el, el, f) \ + QTAILQ_INSERT_AFTER_RCU(&Q_list_head, list_el, el, f) + +#define TEST_LIST_INSERT_HEAD_RCU QTAILQ_INSERT_HEAD_RCU +#define TEST_LIST_FOREACH_RCU QTAILQ_FOREACH_RCU +#define TEST_LIST_FOREACH_SAFE_RCU QTAILQ_FOREACH_SAFE_RCU #else #error Invalid TEST_LIST_TYPE #endif diff --git a/tests/test-rcu-tailq.c b/tests/test-rcu-tailq.c new file mode 100644 index 0000000..8d487e0 --- /dev/null +++ b/tests/test-rcu-tailq.c @@ -0,0 +1,2 @@ +#define TEST_LIST_TYPE 3 +#include "test-rcu-list.c" From patchwork Tue Aug 21 17:02:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960659 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=redhat.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="T+V/ssiH"; 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 41vym35TPZz9s47 for ; Wed, 22 Aug 2018 03:46:43 +1000 (AEST) Received: from localhost ([::1]:55172 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAjo-0002gF-EK for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:46:40 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33703) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4n-0002IF-LU for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4W-0006pf-VQ for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:08 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:34303) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4V-0006bk-Ty for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:00 -0400 Received: by mail-wr1-x442.google.com with SMTP id g33-v6so6431637wrd.1 for ; Tue, 21 Aug 2018 10:03:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=k7wotZAI+pPfegmMvrAxfM3Iit+qUnjf7yHSM9xYKDA=; b=T+V/ssiHynPYTcu6x0eOAj+qu62YlJYl0OL5oBznu+01CUITBKkWiGJ5LdcdCLANvv e3mMpyG55rgHirU2BWS7lPZLEkXRM6SEU8zTcohqHInkE5iKeLiuRRDuHmfZeFxpatj0 WSImHhgFc2OTXv3o4SmYdGLI6zNo2h/ndcRZKZB+HqSzUwl8JbA9ydjWbj8KGDhtNX78 Jz8h1qFXn+uawGN/LOJNbyb8UboWDVRZt7rzZSVF/3ae9YTsae2P2dxELV45mK8v2qlo jDitSFGJH9wO7wAp7ZeexZOacL0F0crdVrq1fjr5eiGIUYnWcJC4ZzTigkh5uwztH6N+ jagQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=k7wotZAI+pPfegmMvrAxfM3Iit+qUnjf7yHSM9xYKDA=; b=YOvL/CeteWoF6wBZdRrOev2xt1xhO3HyKH2mYhalBht/f4qkrBGrm7bTx5TeqZ552e XkMNOstNVXN0DVdV6LDO4njMKN7w9CYmnCnntvgn5FkFgsohPPaLDNqATLXKhTEm+MDL dZ9XdG5j6ueVn+2Jxxm/OtsJeVPqPyNBxwgkMK+QWbyQCvbzEOlrh9IVUH+y+7PGzase obRARvbhH/5T5c6ER0/udmrENRLYih+CmpTL7F3RcENhSiI/IZlPV/VFf/DQ9xlyu7JE xdJ24Jc9ytNUJGtFDmxIiMHTWl2vainHPacNT/yl1t7PdlsM2VcpKfKCS5lh3iTk3HKJ qYlA== X-Gm-Message-State: AOUpUlG2SrmMDMA2s6FKFzbmjDfTtHPYDTVdj8XYh8DvuffxqXzj88xG jm1g+C+MyEv/rXhmRCBHkrPkMhDu X-Google-Smtp-Source: AA+uWPyADzPVyN8V97pWh3FyNdzgqM9bl43E6itrmAQshEJos1c16lAIsXSh8nhe6i8h22ug4Zl2dg== X-Received: by 2002:adf:9b11:: with SMTP id b17-v6mr34778761wrc.119.1534871032566; Tue, 21 Aug 2018 10:03:52 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:51 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:17 +0200 Message-Id: <1534870966-9287-46-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::442 Subject: [Qemu-devel] [PULL 45/74] spapr: do not use CPU_FOREACH_REVERSE 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" This paves the way for implementing the CPU list with an RCU list, which cannot be traversed in reverse order. Note that this is the only caller of CPU_FOREACH_REVERSE. Acked-by: David Gibson Signed-off-by: Emilio G. Cota Message-Id: <20180819091335.22863-11-cota@braap.org> Signed-off-by: Paolo Bonzini --- hw/ppc/spapr.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index e5d8253..ab9c04e 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -622,9 +622,12 @@ static void spapr_populate_cpu_dt(CPUState *cs, void *fdt, int offset, static void spapr_populate_cpus_dt_node(void *fdt, sPAPRMachineState *spapr) { + CPUState **rev; CPUState *cs; + int n_cpus; int cpus_offset; char *nodename; + int i; cpus_offset = fdt_add_subnode(fdt, 0, "cpus"); _FDT(cpus_offset); @@ -635,8 +638,19 @@ static void spapr_populate_cpus_dt_node(void *fdt, sPAPRMachineState *spapr) * We walk the CPUs in reverse order to ensure that CPU DT nodes * created by fdt_add_subnode() end up in the right order in FDT * for the guest kernel the enumerate the CPUs correctly. + * + * The CPU list cannot be traversed in reverse order, so we need + * to do extra work. */ - CPU_FOREACH_REVERSE(cs) { + n_cpus = 0; + rev = NULL; + CPU_FOREACH(cs) { + rev = g_renew(CPUState *, rev, n_cpus + 1); + rev[n_cpus++] = cs; + } + + for (i = n_cpus - 1; i >= 0; i--) { + CPUState *cs = rev[i]; PowerPCCPU *cpu = POWERPC_CPU(cs); int index = spapr_get_vcpu_id(cpu); DeviceClass *dc = DEVICE_GET_CLASS(cs); From patchwork Tue Aug 21 17:02:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960649 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=redhat.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="jKafF5o7"; 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 41vybQ5zhwz9s47 for ; Wed, 22 Aug 2018 03:39:14 +1000 (AEST) Received: from localhost ([::1]:55124 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAca-0002Px-EN for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:39:12 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33707) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4n-0002IH-Rw for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4W-0006p3-M9 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:11 -0400 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]:37178) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4V-0006dA-LA for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:00 -0400 Received: by mail-wr1-x436.google.com with SMTP id u12-v6so16462365wrr.4 for ; Tue, 21 Aug 2018 10:03:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=iCO6f70CmJd6SjSzlvjcM2rpPXkFri0ODaXNjWYVE+U=; b=jKafF5o7lgH3ZqbM7f877tHm2IiigBrgeu1e2FN2zytJMUVmQku8CPOHzCwYN5S5oU alLj66KzUxpCEr/HxIz1OdF3HVJ7fKl3W39imqTgK9bAau3uewBsNJmf1M5WCgkLJMS3 8oZoyoTUETtIsP5UXXpjEqlVT6dA4QSq1xTdZYDZWDXrAd/O5FJ2BRpZErq9U9D7Tp8r DxzDg7D68m6XkRQRA6sjphmkmGEQNOrymJWTaU0Or6KcdMszIt0f4cnpZkmKS749AGze gqyAr+rrf3ifJ+Vt6Vu88zFOc24a4wSfRBAAsbQtDoSHnTsvV2OsUuCKaJOw+7p6GgGA T+XQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=iCO6f70CmJd6SjSzlvjcM2rpPXkFri0ODaXNjWYVE+U=; b=ujRN3lfK7bf8v6fVPY/SHYL1e7tJmUBV5nPED7B392jSWlnaw7lS/3/BU7D+n29RGR R6jF+9KKmVUlsLiJ+405xlx9Dh+NA2u4pEvUIg3QEoImRWz7w4W7Ldx8tUB4qmt/tC+5 wLiSAY1k7Hrei++g1d8OEF3d6+6J+I3bCDBkgZ3pBfywmqFiS4EatZAkuHAoyFpfZ61u jMnP/U93GekGF3Ff18tSTwgqMRHLq2JLUiZjKL5RCWnFkY36e5zgTNhU2LAuv32wFB2z VAbaGhTGk16S4liWgWgQ+DLtagOqtfqwZBy/JzPwW+j85m/RYV4+t5aqH7za5CfOwcFN Up1A== X-Gm-Message-State: APzg51Dbyj2c+EVFrLngurt+q+1cf/d+tVeX9erBDn4/nZFpQHr4odo9 3+QTQZJb8Kr+0fLWxAzQzsasGEIQ X-Google-Smtp-Source: ANB0VdbvT64dSVe6rmqRaMn6p+gXEfZzcdSvkq7JHjYFBXRrsV0tAuOq0Cf+fVuK0HKRbTs2xCOiXQ== X-Received: by 2002:a5d:4648:: with SMTP id j8-v6mr6220168wrs.52.1534871033579; Tue, 21 Aug 2018 10:03:53 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:52 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:18 +0200 Message-Id: <1534870966-9287-47-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::436 Subject: [Qemu-devel] [PULL 46/74] qom: convert the CPU list to RCU 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: "Emilio G. Cota" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: "Emilio G. Cota" Iterating over the list without using atomics is undefined behaviour, since the list can be modified concurrently by other threads (e.g. every time a new thread is created in user-mode). Fix it by implementing the CPU list as an RCU QTAILQ. This requires a little bit of extra work to traverse list in reverse order (see previous patch), but other than that the conversion is trivial. Signed-off-by: Emilio G. Cota Message-Id: <20180819091335.22863-12-cota@braap.org> Signed-off-by: Paolo Bonzini --- cpus-common.c | 4 ++-- cpus.c | 2 +- include/qom/cpu.h | 11 +++++------ linux-user/main.c | 2 +- linux-user/syscall.c | 2 +- target/s390x/cpu_models.c | 2 +- 6 files changed, 11 insertions(+), 12 deletions(-) diff --git a/cpus-common.c b/cpus-common.c index 59f751e..98dd8c6 100644 --- a/cpus-common.c +++ b/cpus-common.c @@ -84,7 +84,7 @@ void cpu_list_add(CPUState *cpu) } else { assert(!cpu_index_auto_assigned); } - QTAILQ_INSERT_TAIL(&cpus, cpu, node); + QTAILQ_INSERT_TAIL_RCU(&cpus, cpu, node); qemu_mutex_unlock(&qemu_cpu_list_lock); finish_safe_work(cpu); @@ -101,7 +101,7 @@ void cpu_list_remove(CPUState *cpu) assert(!(cpu_index_auto_assigned && cpu != QTAILQ_LAST(&cpus, CPUTailQ))); - QTAILQ_REMOVE(&cpus, cpu, node); + QTAILQ_REMOVE_RCU(&cpus, cpu, node); cpu->cpu_index = UNASSIGNED_CPU_INDEX; qemu_mutex_unlock(&qemu_cpu_list_lock); } diff --git a/cpus.c b/cpus.c index a5ea3ee..9161349 100644 --- a/cpus.c +++ b/cpus.c @@ -1491,7 +1491,7 @@ static void *qemu_tcg_rr_cpu_thread_fn(void *arg) atomic_mb_set(&cpu->exit_request, 0); } - qemu_tcg_rr_wait_io_event(cpu ? cpu : QTAILQ_FIRST(&cpus)); + qemu_tcg_rr_wait_io_event(cpu ? cpu : first_cpu); deal_with_unplugged_cpus(); } diff --git a/include/qom/cpu.h b/include/qom/cpu.h index ecf6ed5..dc130cd 100644 --- a/include/qom/cpu.h +++ b/include/qom/cpu.h @@ -26,6 +26,7 @@ #include "exec/memattrs.h" #include "qapi/qapi-types-run-state.h" #include "qemu/bitmap.h" +#include "qemu/rcu_queue.h" #include "qemu/queue.h" #include "qemu/thread.h" @@ -442,13 +443,11 @@ struct CPUState { QTAILQ_HEAD(CPUTailQ, CPUState); extern struct CPUTailQ cpus; -#define CPU_NEXT(cpu) QTAILQ_NEXT(cpu, node) -#define CPU_FOREACH(cpu) QTAILQ_FOREACH(cpu, &cpus, node) +#define first_cpu QTAILQ_FIRST_RCU(&cpus) +#define CPU_NEXT(cpu) QTAILQ_NEXT_RCU(cpu, node) +#define CPU_FOREACH(cpu) QTAILQ_FOREACH_RCU(cpu, &cpus, node) #define CPU_FOREACH_SAFE(cpu, next_cpu) \ - QTAILQ_FOREACH_SAFE(cpu, &cpus, node, next_cpu) -#define CPU_FOREACH_REVERSE(cpu) \ - QTAILQ_FOREACH_REVERSE(cpu, &cpus, CPUTailQ, node) -#define first_cpu QTAILQ_FIRST(&cpus) + QTAILQ_FOREACH_SAFE_RCU(cpu, &cpus, node, next_cpu) extern __thread CPUState *current_cpu; diff --git a/linux-user/main.c b/linux-user/main.c index ea00dd9..923cbb7 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -126,7 +126,7 @@ void fork_end(int child) Discard information about the parent threads. */ CPU_FOREACH_SAFE(cpu, next_cpu) { if (cpu != thread_cpu) { - QTAILQ_REMOVE(&cpus, cpu, node); + QTAILQ_REMOVE_RCU(&cpus, cpu, node); } } qemu_init_cpu_list(); diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 202aa77..3c3c1ae 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -8157,7 +8157,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, TaskState *ts; /* Remove the CPU from the list. */ - QTAILQ_REMOVE(&cpus, cpu, node); + QTAILQ_REMOVE_RCU(&cpus, cpu, node); cpu_list_unlock(); diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c index 12e765b..265d25c 100644 --- a/target/s390x/cpu_models.c +++ b/target/s390x/cpu_models.c @@ -1096,7 +1096,7 @@ void s390_set_qemu_cpu_model(uint16_t type, uint8_t gen, uint8_t ec_ga, const S390CPUDef *def = s390_find_cpu_def(type, gen, ec_ga, NULL); g_assert(def); - g_assert(QTAILQ_EMPTY(&cpus)); + g_assert(QTAILQ_EMPTY_RCU(&cpus)); /* TCG emulates some features that can usually not be enabled with * the emulated machine generation. Make sure they can be enabled From patchwork Tue Aug 21 17:02:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960638 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=redhat.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="PO9Z2oGb"; 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 41vyQD5jCPz9s3Z for ; Wed, 22 Aug 2018 03:31:15 +1000 (AEST) Received: from localhost ([::1]:55086 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAUr-00041k-3i for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:31:13 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33466) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4Y-0001w7-ES for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4V-0006lJ-1L for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:01 -0400 Received: from mail-wm0-x22d.google.com ([2a00:1450:400c:c09::22d]:53039) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4R-0006e5-Ta for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:58 -0400 Received: by mail-wm0-x22d.google.com with SMTP id y139-v6so854437wmc.2 for ; Tue, 21 Aug 2018 10:03:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=02TAl30ECdTMXFdfp3nYaJBbiiT6dQfo8OVogx5Uch8=; b=PO9Z2oGbNVKyNT8Zi7oevxtINyYTrZLlSPrg2t4hKTL3q5t3liQZVjbT1fRKX7+WzS I0xrDPXcZ5ZLwLIKHVMuJZveq3uJkrFdnDNCo0Suuc/lYoKHKTsvh6IqVcXUeR/ddgxW +v2hHBD32M0Bnm4tswHR1VnjUHoGfOziOmyKsjcF9vM+61tY+MiLXBcnjIFdWMj0xUFm zP7ms+JbLSNVepApUMAJKRp8y+yAHplqvH4GA5mzJ32rTKyUC6waofB+WAwDccvgVFvg ZiQircB3gckU4ATmBFLb29OG00rNMcbeNKQqkMOQl7fINF1BPO/FNXd2kil27qEKTIPp jUTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=02TAl30ECdTMXFdfp3nYaJBbiiT6dQfo8OVogx5Uch8=; b=MSb6qPJim2wDeOQh7mQ6ACBlYPuAuEmxfqURfzE23qWEQXzWW+n3RRL9II+RRycHOR FZvrOBqxDcKOVCSAQ2GKihezFjn2j66GP5JRvh5SvGix1qmLRCCyce4L+aLV3DsYKMYi JRGBzT6iJBmpKNh0csHqQuLJKn2f5Fb1Pd39rJ4B8iZx2PGIiW+aohkrQpX7HA5qJ93I 6i9cALJ/0++bVHZ51ynuEyMYUyK2h0YqHrmahpaYbZbIAWD2oiBZoQWaV8OBWKU3V8gZ fkbQUd+M9t9HU7iD8n8FPP10vlEZYtk6x/CTKFSx2oR5Tjr8BADJNzJqxDNbFugmApHN q94g== X-Gm-Message-State: APzg51CimUXYvNkKcJ18CCNpB1iER5o75vNGjmoMyhCRoAOB0O5yqGXk AIAsbmGuWJDQ7k4Xint7bHo114G7 X-Google-Smtp-Source: ANB0VdahoUXWpykj1vLBIbR8LWB65FOb/5EdIooIoQLPTXSz7rIXa1UI2LzLj5krUcVj+C5P8C9UlQ== X-Received: by 2002:a1c:c147:: with SMTP id r68-v6mr119160wmf.161.1534871034491; Tue, 21 Aug 2018 10:03:54 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:53 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:19 +0200 Message-Id: <1534870966-9287-48-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::22d Subject: [Qemu-devel] [PULL 47/74] hw/intc/apic: Switch away from old_mmio 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: Peter Maydell Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Peter Maydell Switch the apic away from using the old_mmio MemoryRegionOps accessor functions. Signed-off-by: Peter Maydell Message-Id: <20180803101943.23722-1-peter.maydell@linaro.org> Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Paolo Bonzini --- hw/intc/apic.c | 42 ++++++++++++++++++------------------------ 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/hw/intc/apic.c b/hw/intc/apic.c index 6fda52b..97ffdd8 100644 --- a/hw/intc/apic.c +++ b/hw/intc/apic.c @@ -650,31 +650,17 @@ static void apic_timer(void *opaque) apic_timer_update(s, s->next_time); } -static uint32_t apic_mem_readb(void *opaque, hwaddr addr) -{ - return 0; -} - -static uint32_t apic_mem_readw(void *opaque, hwaddr addr) -{ - return 0; -} - -static void apic_mem_writeb(void *opaque, hwaddr addr, uint32_t val) -{ -} - -static void apic_mem_writew(void *opaque, hwaddr addr, uint32_t val) -{ -} - -static uint32_t apic_mem_readl(void *opaque, hwaddr addr) +static uint64_t apic_mem_read(void *opaque, hwaddr addr, unsigned size) { DeviceState *dev; APICCommonState *s; uint32_t val; int index; + if (size < 4) { + return 0; + } + dev = cpu_get_current_apic(); if (!dev) { return 0; @@ -765,11 +751,17 @@ static void apic_send_msi(MSIMessage *msi) apic_deliver_irq(dest, dest_mode, delivery, vector, trigger_mode); } -static void apic_mem_writel(void *opaque, hwaddr addr, uint32_t val) +static void apic_mem_write(void *opaque, hwaddr addr, uint64_t val, + unsigned size) { DeviceState *dev; APICCommonState *s; int index = (addr >> 4) & 0xff; + + if (size < 4) { + return; + } + if (addr > 0xfff || !index) { /* MSI and MMIO APIC are at the same memory location, * but actually not on the global bus: MSI is on PCI bus @@ -880,10 +872,12 @@ static void apic_post_load(APICCommonState *s) } static const MemoryRegionOps apic_io_ops = { - .old_mmio = { - .read = { apic_mem_readb, apic_mem_readw, apic_mem_readl, }, - .write = { apic_mem_writeb, apic_mem_writew, apic_mem_writel, }, - }, + .read = apic_mem_read, + .write = apic_mem_write, + .impl.min_access_size = 1, + .impl.max_access_size = 4, + .valid.min_access_size = 1, + .valid.max_access_size = 4, .endianness = DEVICE_NATIVE_ENDIAN, }; From patchwork Tue Aug 21 17:02:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960640 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=redhat.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="jL1RP62N"; 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 41vyQk3zwFz9s3Z for ; Wed, 22 Aug 2018 03:31:42 +1000 (AEST) Received: from localhost ([::1]:55092 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAVI-0004Mw-6A for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:31:40 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33452) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4Y-0001vi-30 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4V-0006lj-6i for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:01 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]:34994) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4U-0006fU-2T for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:58 -0400 Received: by mail-wr1-x431.google.com with SMTP id j26-v6so647338wre.2 for ; Tue, 21 Aug 2018 10:03:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=h1FMQgt/MiczepkiSNHgaYO5MT9+A/AJvqJBfAn2yIk=; b=jL1RP62N0iFSYxEuO+dauAG0SVCgkrDB4v1hmePBPLLaH7qplAtoogOIJ/s3x3c4wh sbpHIP9wULCylMHlGA7SnvSWJQmI/9bwxKRl6Kiq84ZSOKT7NKz9RWhHWuZPOV87SfCW Bx1rhMp9E4xYI0Xlrai9s3+NB0PN0k9edMxOVPQBGCGeE+YGmQftRTm/sz9ptSXp2OCX Do4RGfOUFntZ0s926gb2676SKarLbFkEUEy4eeBqWceNSU4hOvKveR+PDJ7LSM9r4sNt zC9Tf0AxQu0Rr6IX44wMdNF1M05UXIUK0p90gcLEYN9U7TlAWNks3i3CT6jHLEoceaSw oosA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=h1FMQgt/MiczepkiSNHgaYO5MT9+A/AJvqJBfAn2yIk=; b=UYr3RQis7pZR0Ph+gHI9j3qTmYpm7HXFN4DczJF0NEzCDxJwCcVVnX1+scbQdhnpMg DZiJxTIQF8jMGxL/VIIhvDIXjRHs/RaoXUY/DyQbaAU8mWU6sq1lZy5yYCWGwT2RW9P/ k2OAIPgliWUbu4AF75vdY+nelfa+pJsV5uWF6/F/BjPQmMp7GSM52Tade/0ZyFsDzlZr PI24s/z+VEC0IM4hpz7L9zEQv/DUYQcE81Px2k1k/aQj00OaCX7NOZ8TNkJn44k7FjBn Rup7jYvgKgpWJ5wHYKL9BLFuGNNZ+rahXCxZNrgtNJ64O+NK9rODQRQ9rgoi/9T3B/C/ QFQw== X-Gm-Message-State: AOUpUlFlXJ0zZ28Hs/B0gIA6xeM1eQERBEXBc/g9NNqFEE8MxD8oTxMw OuufhPziuK08NRfrAM3nz2wWRia/ X-Google-Smtp-Source: ANB0VdbOBpdRma2sAivhOAl0VAFOjkt9enVFs6ckE0QoFfOREp7V/Hc1D36XSJTI16Poz7rEXr4TjA== X-Received: by 2002:adf:8567:: with SMTP id 94-v6mr12159255wrh.223.1534871035306; Tue, 21 Aug 2018 10:03:55 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:54 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:20 +0200 Message-Id: <1534870966-9287-49-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::431 Subject: [Qemu-devel] [PULL 48/74] qemu-guest-agent: freeze-hook to ignore dpkg files as well 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: Christian Ehrhardt Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Christian Ehrhardt The hook already skips a set of rpm upgrade artifacts. Do the same with such files that might be created by dpkg. Fixes: https://bugs.launchpad.net/ubuntu/+source/qemu/+bug/1484990 Signed-off-by: Christian Ehrhardt Message-Id: <1513160272-15921-1-git-send-email-christian.ehrhardt@canonical.com> Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Paolo Bonzini --- scripts/qemu-guest-agent/fsfreeze-hook | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/qemu-guest-agent/fsfreeze-hook b/scripts/qemu-guest-agent/fsfreeze-hook index c27b29f..13aafd4 100755 --- a/scripts/qemu-guest-agent/fsfreeze-hook +++ b/scripts/qemu-guest-agent/fsfreeze-hook @@ -13,7 +13,7 @@ FSFREEZE_D=$(dirname -- "$0")/fsfreeze-hook.d # Check whether file $1 is a backup or rpm-generated file and should be ignored is_ignored_file() { case "$1" in - *~ | *.bak | *.orig | *.rpmnew | *.rpmorig | *.rpmsave | *.sample) + *~ | *.bak | *.orig | *.rpmnew | *.rpmorig | *.rpmsave | *.sample | *.dpkg-old | *.dpkg-new | *.dpkg-tmp | *.dpkg-dist | *.dpkg-bak | *.dpkg-backup | *.dpkg-remove) return 0 ;; esac return 1 From patchwork Tue Aug 21 17:02:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960652 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=redhat.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="nrwGxrPE"; 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 41vydQ6RkHz9s3x for ; Wed, 22 Aug 2018 03:40:58 +1000 (AEST) Received: from localhost ([::1]:55139 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAeG-0003vJ-Fn for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:40:56 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33687) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4h-0002C1-Eb for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4W-0006pN-Qo for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:05 -0400 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]:36375) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4V-0006h5-Rd for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:00 -0400 Received: by mail-wr1-x42a.google.com with SMTP id m27-v6so10236161wrf.3 for ; Tue, 21 Aug 2018 10:03:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=e+AVb+CjmVXzZVKiSiFYCADawkt5crQpWTQUtZGCNtg=; b=nrwGxrPEG9pGC56OwBxsZwCr7cWIZPCHCleZCxoeCgJwnZgMSvod46kxGsWeQEQylv FV/hwD5VdJfN2fnHmYYT+1A+rHgXYK+b6ybcx+PiDFuxvCDPLXz1WuFSzVds3oneHcDN 3LRPWXkyPHc194wgT4luW0rK3NDFUe9eV75UfKmiASRskxYHjQ6/kEFTTywW1NmneHjp csGljbppTkQe15pPj7iBWtV8TalcZh3P4TgAjHrwldl4FXJSI95ISKuXrfrb+8pfn/9E whSu+giyaWy7NGSmcg1EM1bxd+vAhwtatxUj9ldpdZ7amnKHScWY+PXaMdfgfOcoPOfQ uufw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=e+AVb+CjmVXzZVKiSiFYCADawkt5crQpWTQUtZGCNtg=; b=Q1ccKyjx5oCZNwZUX6e+W7Z6fCCWJeWL9h00iGYLko5632Siw5JraNQJBwp5rQx9aK ezqEIn975f1aScJFciALwCztQc1nE6u3Jz6kvNvqLj4FAkn+dMlcwJ7wzhFglO2yfII8 gcmETLKpE7uiiRctkfk14XSdcY1b9FtFiQAgFVG55AC8ROOPApQtrH0lFYgfKsNDgosq c+e9D6Xfv0L6TwZsU4zVnTjUSsgaNPs4nE8enEr5vozzbEqrusJbVdzZsYY151MgYsr/ driU3mQUBWaroO+3kIhgJwKQZ0Xh8L6j7LWJ9W2A1N2MspOXcXemo3Wb7PIpBRn/KG2S goYg== X-Gm-Message-State: APzg51A/vqaNg/pgcZuJlqX9w9TTXQMSR42jFUBvELxvmQCW198apxy7 cITyv/FsuGt2/9m/ee5cS1RJrDQB X-Google-Smtp-Source: ANB0VdZfhQd6qVkvG3UB14z9R/We1tF4P1tOuCE3oINrBERkIkkekU68r/43Vsvdv3bmAS7WBzu6qw== X-Received: by 2002:adf:a292:: with SMTP id s18-v6mr8814209wra.100.1534871036356; Tue, 21 Aug 2018 10:03:56 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:55 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:21 +0200 Message-Id: <1534870966-9287-50-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42a Subject: [Qemu-devel] [PULL 49/74] module: Use QEMU_MODULE_DIR as a search path 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: ryang Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: ryang The current paths for modules are CONFIG_QEMU_MODDIR and paths relative to the executable. Qemu and its modules can be installed and executed in paths that are different from these search paths. This change allows a search path to be specified by environment variable. An example usage for this is postmarketOS[1]. This is a build environment for Alpine Linux. It sets up Alpine Linux in a chroot environment. Alpine's Qemu packages are installed in the chroot. The Alpine Linux Qemu package is used to test compiled Alpine Linux system images. This way there isn't a reliance on the which ever version of Qemu the host system / distro provides. postmarketOS executes Qemu on host system outside of the chroot The Qemu module search path needs to point to the location of the chroot relative to the host system. e.g. The root of the Alpine Linux chroot is: ~/.local/var/pmbootstrap/chroot_native/ Alpine's Qemu is installed at ~/.local/var/pmbootstrap/chroot_native/usr/bin/ The Qemu module search path needs to be: QEMU_MODULE_DIR=~/.local/var/pmbootstrap/chroot_native/usr/lib/qemu/ [1] https://postmarketos.org/ Signed-off-by: ryang Message-Id: <20180704181010.GA918@computer> Reviewed-by: Daniel P. Berrangé Reviewed-by: Fam Zheng Signed-off-by: Paolo Bonzini --- util/module.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/util/module.c b/util/module.c index c909737..1259dd3 100644 --- a/util/module.c +++ b/util/module.c @@ -162,9 +162,10 @@ void module_load_one(const char *prefix, const char *lib_name) #ifdef CONFIG_MODULES char *fname = NULL; char *exec_dir; - char *dirs[3]; + const char *search_dir; + char *dirs[4]; char *module_name; - int i = 0; + int i = 0, n_dirs = 0; int ret; static GHashTable *loaded_modules; @@ -186,14 +187,19 @@ void module_load_one(const char *prefix, const char *lib_name) g_hash_table_insert(loaded_modules, module_name, module_name); exec_dir = qemu_get_exec_dir(); - dirs[i++] = g_strdup_printf("%s", CONFIG_QEMU_MODDIR); - dirs[i++] = g_strdup_printf("%s/..", exec_dir ? : ""); - dirs[i++] = g_strdup_printf("%s", exec_dir ? : ""); - assert(i == ARRAY_SIZE(dirs)); + search_dir = getenv("QEMU_MODULE_DIR"); + if (search_dir != NULL) { + dirs[n_dirs++] = g_strdup_printf("%s", search_dir); + } + dirs[n_dirs++] = g_strdup_printf("%s", CONFIG_QEMU_MODDIR); + dirs[n_dirs++] = g_strdup_printf("%s/..", exec_dir ? : ""); + dirs[n_dirs++] = g_strdup_printf("%s", exec_dir ? : ""); + assert(n_dirs <= ARRAY_SIZE(dirs)); + g_free(exec_dir); exec_dir = NULL; - for (i = 0; i < ARRAY_SIZE(dirs); i++) { + for (i = 0; i < n_dirs; i++) { fname = g_strdup_printf("%s/%s%s", dirs[i], module_name, HOST_DSOSUF); ret = module_load_file(fname); @@ -205,7 +211,7 @@ void module_load_one(const char *prefix, const char *lib_name) } } - for (i = 0; i < ARRAY_SIZE(dirs); i++) { + for (i = 0; i < n_dirs; i++) { g_free(dirs[i]); } From patchwork Tue Aug 21 17:02:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960668 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=redhat.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="TlYoE77z"; 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 41vyv6417Dz9s47 for ; Wed, 22 Aug 2018 03:52:50 +1000 (AEST) Received: from localhost ([::1]:55199 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsApk-0001Ba-7H for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:52:48 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33709) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4n-0002IJ-SA for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4Y-0006ri-46 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:11 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:39793) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4X-0006iR-8x for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:01 -0400 Received: by mail-wr1-x442.google.com with SMTP id o37-v6so7598265wrf.6 for ; Tue, 21 Aug 2018 10:03:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:subject:date:message-id:in-reply-to:references; bh=8pKJ+A1GZhiLTqSc6WC3hGk85yU00mHdwHglX/59WQs=; b=TlYoE77zzG8AvIKbxQ5/Mq18ngJAnnI9uAwKZufeXzK+kuZ47nHXArxi0R8h3aD9vB njW9LymO/A+zSqFYFZ5NfMKP2uLscfPg7LBGvkWtdZ8LE36ga/2qTPW9ZyDwHJ2Hd2Ka gaD8DXsSUq5Shm8jtodost2+RUn4kBz8Vq6rvXgM7OKIyuLeOvTIGAD35TSAwGfPBq0B Psg9E/xVGIN13ahSwAillfoKykblRW+H1VrPsTVbTugsbX6wowxk+ueyejgvj6zC39DZ hGnaSxFFJulgW8P4EoHA6oGSy5CZABQEo+DiLoMUOcGbtGde7i/cuxUvHtjXV86NM1XH K1HA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references; bh=8pKJ+A1GZhiLTqSc6WC3hGk85yU00mHdwHglX/59WQs=; b=rnrg4ODoTXu8LZTdXeXFMVo06we4IYXwD4jf271NnUPaYOuqm03909DBlveci4psg3 j3pHGZ1uYVOxTT7oEfvgQn9pv4CNBOG3oZenlxhha/CA5oV3AC2lOa6iGXqgHR7xL86Z K7YNM2MfgbCxwPKHGzFW2BUAYYDDcqxb7EAbQMXCKN567HvCj1I2MrVB02yjXZD0p7KH mysX4N7OF7SFJ6os53N+UheoVxH82LVBdbscZWVAD9bi4z7/XZ1a6MzJDLq/npjD32Dm bGh+yePjVOhsJRUojb+PrfOhe/n75i9KuZp1lQK5PUTPtfCIBon7R7s/BI+4YR2Csiuh 1cfw== X-Gm-Message-State: AOUpUlGBlpMTQDQbox/ar2ABSmgXR2A47V2/4BIkpVxI2WN3v42XH1vY L43ZXZWPM1ctMGtyun7qXGO0GOS2 X-Google-Smtp-Source: AA+uWPzgVwZtrFj2lS3iSonJP8ozIkGqSLbSPw5e8pvB3TMsD34bHSfY6pxKeYcIEug1j8GUs9iKTw== X-Received: by 2002:a5d:6a92:: with SMTP id s18-v6mr33306911wru.44.1534871037304; Tue, 21 Aug 2018 10:03:57 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.56 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:56 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:22 +0200 Message-Id: <1534870966-9287-51-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::442 Subject: [Qemu-devel] [PULL 50/74] cpus: protect all icount computation with seqlock 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: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Move the icount->ns computation to cpu_get_icount, and make cpu_get_icount_locked return the raw value. This makes the atomic_read__nocheck safe, because it now happens always inside a seqlock and any torn reads will be retried. qemu_icount_bias and icount_time_shift also need to be accessed with atomics. At the same time, however, you don't need atomic_read within the writer, because no concurrent writes are possible. The fix to vmstate lets us keep the struct nicely packed. Signed-off-by: Paolo Bonzini --- cpus.c | 69 ++++++++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 42 insertions(+), 27 deletions(-) diff --git a/cpus.c b/cpus.c index 9161349..3783651 100644 --- a/cpus.c +++ b/cpus.c @@ -121,8 +121,6 @@ static bool all_cpu_threads_idle(void) /* Protected by TimersState seqlock */ static bool icount_sleep = true; -/* Conversion factor from emulated instructions to virtual clock ticks. */ -static int icount_time_shift; /* Arbitrarily pick 1MIPS as the minimum allowable speed. */ #define MAX_ICOUNT_SHIFT 10 @@ -137,8 +135,9 @@ typedef struct TimersState { QemuSeqLock vm_clock_seqlock; int64_t cpu_clock_offset; int32_t cpu_ticks_enabled; - int64_t dummy; + /* Conversion factor from emulated instructions to virtual clock ticks. */ + int icount_time_shift; /* Compensate for varying guest execution speed. */ int64_t qemu_icount_bias; /* Only written by TCG thread */ @@ -247,14 +246,13 @@ void cpu_update_icount(CPUState *cpu) #ifdef CONFIG_ATOMIC64 atomic_set__nocheck(&timers_state.qemu_icount, - atomic_read__nocheck(&timers_state.qemu_icount) + - executed); + timers_state.qemu_icount + executed); #else /* FIXME: we need 64bit atomics to do this safely */ timers_state.qemu_icount += executed; #endif } -int64_t cpu_get_icount_raw(void) +static int64_t cpu_get_icount_raw_locked(void) { CPUState *cpu = current_cpu; @@ -266,20 +264,30 @@ int64_t cpu_get_icount_raw(void) /* Take into account what has run */ cpu_update_icount(cpu); } -#ifdef CONFIG_ATOMIC64 + /* The read is protected by the seqlock, so __nocheck is okay. */ return atomic_read__nocheck(&timers_state.qemu_icount); -#else /* FIXME: we need 64bit atomics to do this safely */ - return timers_state.qemu_icount; -#endif } -/* Return the virtual CPU time, based on the instruction counter. */ static int64_t cpu_get_icount_locked(void) { - int64_t icount = cpu_get_icount_raw(); - return timers_state.qemu_icount_bias + cpu_icount_to_ns(icount); + int64_t icount = cpu_get_icount_raw_locked(); + return atomic_read__nocheck(&timers_state.qemu_icount_bias) + cpu_icount_to_ns(icount); +} + +int64_t cpu_get_icount_raw(void) +{ + int64_t icount; + unsigned start; + + do { + start = seqlock_read_begin(&timers_state.vm_clock_seqlock); + icount = cpu_get_icount_raw_locked(); + } while (seqlock_read_retry(&timers_state.vm_clock_seqlock, start)); + + return icount; } +/* Return the virtual CPU time, based on the instruction counter. */ int64_t cpu_get_icount(void) { int64_t icount; @@ -295,7 +303,7 @@ int64_t cpu_get_icount(void) int64_t cpu_icount_to_ns(int64_t icount) { - return icount << icount_time_shift; + return icount << atomic_read(&timers_state.icount_time_shift); } /* return the time elapsed in VM between vm_start and vm_stop. Unless @@ -415,19 +423,22 @@ static void icount_adjust(void) /* FIXME: This is a very crude algorithm, somewhat prone to oscillation. */ if (delta > 0 && last_delta + ICOUNT_WOBBLE < delta * 2 - && icount_time_shift > 0) { + && timers_state.icount_time_shift > 0) { /* The guest is getting too far ahead. Slow time down. */ - icount_time_shift--; + atomic_set(&timers_state.icount_time_shift, + timers_state.icount_time_shift - 1); } if (delta < 0 && last_delta - ICOUNT_WOBBLE > delta * 2 - && icount_time_shift < MAX_ICOUNT_SHIFT) { + && timers_state.icount_time_shift < MAX_ICOUNT_SHIFT) { /* The guest is getting too far behind. Speed time up. */ - icount_time_shift++; + atomic_set(&timers_state.icount_time_shift, + timers_state.icount_time_shift + 1); } last_delta = delta; - timers_state.qemu_icount_bias = cur_icount - - (timers_state.qemu_icount << icount_time_shift); + atomic_set__nocheck(&timers_state.qemu_icount_bias, + cur_icount - (timers_state.qemu_icount + << timers_state.icount_time_shift)); seqlock_write_end(&timers_state.vm_clock_seqlock); } @@ -448,7 +459,8 @@ static void icount_adjust_vm(void *opaque) static int64_t qemu_icount_round(int64_t count) { - return (count + (1 << icount_time_shift) - 1) >> icount_time_shift; + int shift = atomic_read(&timers_state.icount_time_shift); + return (count + (1 << shift) - 1) >> shift; } static void icount_warp_rt(void) @@ -484,7 +496,8 @@ static void icount_warp_rt(void) int64_t delta = clock - cur_icount; warp_delta = MIN(warp_delta, delta); } - timers_state.qemu_icount_bias += warp_delta; + atomic_set__nocheck(&timers_state.qemu_icount_bias, + timers_state.qemu_icount_bias + warp_delta); } timers_state.vm_clock_warp_start = -1; seqlock_write_end(&timers_state.vm_clock_seqlock); @@ -513,7 +526,8 @@ void qtest_clock_warp(int64_t dest) int64_t warp = qemu_soonest_timeout(dest - clock, deadline); seqlock_write_begin(&timers_state.vm_clock_seqlock); - timers_state.qemu_icount_bias += warp; + atomic_set__nocheck(&timers_state.qemu_icount_bias, + timers_state.qemu_icount_bias + warp); seqlock_write_end(&timers_state.vm_clock_seqlock); qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL); @@ -582,7 +596,8 @@ void qemu_start_warp_timer(void) * isolated from host latencies. */ seqlock_write_begin(&timers_state.vm_clock_seqlock); - timers_state.qemu_icount_bias += deadline; + atomic_set__nocheck(&timers_state.qemu_icount_bias, + timers_state.qemu_icount_bias + deadline); seqlock_write_end(&timers_state.vm_clock_seqlock); qemu_clock_notify(QEMU_CLOCK_VIRTUAL); } else { @@ -700,7 +715,7 @@ static const VMStateDescription vmstate_timers = { .minimum_version_id = 1, .fields = (VMStateField[]) { VMSTATE_INT64(cpu_ticks_offset, TimersState), - VMSTATE_INT64(dummy, TimersState), + VMSTATE_UNUSED(8), VMSTATE_INT64_V(cpu_clock_offset, TimersState, 2), VMSTATE_END_OF_LIST() }, @@ -812,7 +827,7 @@ void configure_icount(QemuOpts *opts, Error **errp) } if (strcmp(option, "auto") != 0) { errno = 0; - icount_time_shift = strtol(option, &rem_str, 0); + timers_state.icount_time_shift = strtol(option, &rem_str, 0); if (errno != 0 || *rem_str != '\0' || !strlen(option)) { error_setg(errp, "icount: Invalid shift value"); } @@ -828,7 +843,7 @@ void configure_icount(QemuOpts *opts, Error **errp) /* 125MIPS seems a reasonable initial guess at the guest speed. It will be corrected fairly quickly anyway. */ - icount_time_shift = 3; + timers_state.icount_time_shift = 3; /* Have both realtime and virtual time triggers for speed adjustment. The realtime trigger catches emulated time passing too slowly, From patchwork Tue Aug 21 17:02:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960642 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=redhat.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="gRhFQ2VX"; 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 41vyRs3s2Vz9s3Z for ; Wed, 22 Aug 2018 03:32:41 +1000 (AEST) Received: from localhost ([::1]:55093 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAWF-0005P3-5n for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:32:39 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33565) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4b-00025J-Fg for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4W-0006pJ-RE for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:05 -0400 Received: from mail-wm0-x241.google.com ([2a00:1450:400c:c09::241]:37885) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4V-0006kh-On for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:00 -0400 Received: by mail-wm0-x241.google.com with SMTP id n11-v6so3496334wmc.2 for ; Tue, 21 Aug 2018 10:03:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:subject:date:message-id:in-reply-to:references; bh=l0P8/+Ftl94kQbsmsYfEnhMeyEaW7zmUBZ3s37Urs14=; b=gRhFQ2VX0qXs2srnnmuR5zXyn/DLtpvBYMmjkCE2R97PilAZQgloseM2xrM6AK4VgJ KvHcsw+0RkgTvjPEmG/RWU5V6nokkI4iISVfoswPYi977bEWUhqIPCYKR5K3UMJoaDmJ BJuli9tgd4uee2bPiB3CXjhiPMrEKoUpqCzwCPapaU1dHovOqcV8VnpGQmsxAC8gtfFr I/g2Pi8PEbTRdcVOTA05pOzE7to0qoyrrb5z4ITDOIs+iU93hJSkwG99MHB4EuEdskv+ IKDXXALXEvIBrF83FC79TLKE3CNa/Gl/E/UXK/t5epl3wgVHwhWqZb+IGikXWKn58Olj fEoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references; bh=l0P8/+Ftl94kQbsmsYfEnhMeyEaW7zmUBZ3s37Urs14=; b=Ol2+vWbTLQe25xvowWUy0siuvSba8RPTygQRPChb8TzJ3i7R38Rf6agSuwUvSbgyiM wzFxDfPVJxDiuCco9BO1f06hl/vDPJi8ezm1mkenbLykRifRKN9pklV2Xc7PRwowDJgO Jybx41t3UUBWyj+FnCUgvHvlCIOzGaPSztWtGgYdIUroYC6/S1ykD35wyNIMj6uAlvoW UiJaMi63RiHqHSypZEnP6jsGrMjwrgnW63hNuBoCiCtN60jUsnGXC2Bp6IEs8emIwDxM Y9W4OBWkK9YlM04x3MISiHBmmK4KX6qIQYqGBfvox2H1huPcUI9NbnfaK9dZYdGLDmOI KAbw== X-Gm-Message-State: APzg51CEsN9PgQidwPxk7Z79+Q4XvZG1nZBHH5NAoC1s0L2rTl9acqRM S2fWu3uiYYBZxk6B7Ft9/6nb0NYl X-Google-Smtp-Source: ANB0VdY0fJGAalDN2s7rTKoits9zl/OsuSctvAms/YqdIcQ8DWVZ83Oss2yYqGlDxuEICssllDO7zw== X-Received: by 2002:a1c:8893:: with SMTP id k141-v6mr164868wmd.36.1534871038169; Tue, 21 Aug 2018 10:03:58 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.57 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:57 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:23 +0200 Message-Id: <1534870966-9287-52-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::241 Subject: [Qemu-devel] [PULL 51/74] seqlock: add QemuLockable support 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: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" A shortcut when the seqlock write is protected by a spinlock or any mutex other than the BQL. Signed-off-by: Paolo Bonzini --- include/qemu/seqlock.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/include/qemu/seqlock.h b/include/qemu/seqlock.h index c367516..fd408b7 100644 --- a/include/qemu/seqlock.h +++ b/include/qemu/seqlock.h @@ -16,6 +16,7 @@ #include "qemu/atomic.h" #include "qemu/thread.h" +#include "qemu/lockable.h" typedef struct QemuSeqLock QemuSeqLock; @@ -45,6 +46,25 @@ static inline void seqlock_write_end(QemuSeqLock *sl) atomic_set(&sl->sequence, sl->sequence + 1); } +/* Lock out other writers and update the count. */ +static inline void seqlock_write_lock_impl(QemuSeqLock *sl, QemuLockable *lock) +{ + qemu_lockable_lock(lock); + seqlock_write_begin(sl); +} +#define seqlock_write_lock(sl, lock) \ + seqlock_write_lock_impl(sl, QEMU_MAKE_LOCKABLE(lock)) + +/* Lock out other writers and update the count. */ +static inline void seqlock_write_unlock_impl(QemuSeqLock *sl, QemuLockable *lock) +{ + qemu_lockable_unlock(lock); + seqlock_write_begin(sl); +} +#define seqlock_write_unlock(sl, lock) \ + seqlock_write_unlock_impl(sl, QEMU_MAKE_LOCKABLE(lock)) + + static inline unsigned seqlock_read_begin(const QemuSeqLock *sl) { /* Always fail if a write is in progress. */ From patchwork Tue Aug 21 17:02:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960671 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=redhat.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="hMEnlFzl"; 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 41vyyL1tQQz9s4Z for ; Wed, 22 Aug 2018 03:55:38 +1000 (AEST) Received: from localhost ([::1]:55214 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAsR-0003Xx-P0 for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:55:35 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33712) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4n-0002IM-TF for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4Y-0006rp-5a for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:11 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:46400) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4X-0006ne-60 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:01 -0400 Received: by mail-wr1-x444.google.com with SMTP id a108-v6so13816753wrc.13 for ; Tue, 21 Aug 2018 10:04:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:subject:date:message-id:in-reply-to:references; bh=RfG0Zs6mZA54jkoHiJfTSQukJQeED7djpCykJHDzWL8=; b=hMEnlFzls/oPl/LBmnln66g2msruX8UpCQfDsrSGGR5z5t6d13B/3CunENz0qX/QKW ch4esdO+/BXXI5YqOLf5hNt9PODeH2D8qmy4qb93XvDBd4413o7EVEe0ltWjC2hYFgGX ETzzfzzx0b1DYMYCgloIrFIR+WMm1QM5Dy39+6QaoC/yVwG2ZtIMwQcAjAaj3J/zZeSn OZDpk0s72sVOX0L777NBz6a/c8Wf3UDkENXMm/aHKypBa3gUS8y0Vp0zkt7t3IYYk5Ps X0HTlaKGSu2SIZ8TkcJ+CjpuweGNsYEhrb0RZHm4w+e18ycxL0sccvDN5OHaqcU6gPZp nLjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references; bh=RfG0Zs6mZA54jkoHiJfTSQukJQeED7djpCykJHDzWL8=; b=cj9ctAOFObQ9VgWGwvwKO+7hOA+jP7UWoR9txEXKpw/AkKA6JXmIsuJ/MED/zyC/O4 rFIWAf+NB5eMcer+loC0uSb9hA9k2kZwuN0sy7iKMedTNBU4wuLTLCHbika6tsiYo39o 00RgAXPfQ/K9Q8auiaRXD0KXkqI3l85cwkgdjo13uEKPHxjIDc1OChNGYt6BZG5KkqbD Z4JtIPTrSlWnWRICTCMWBIgmgCyZSTazoSMX7WLd9xOhjYjUmznpgV3x0dWo28Prk2Gt taET0qYFNrConR3opJsO/SU1Miv6zRhny+5fAGHUWYm2r6KmRcJJH2/qw/RvCS7ujJ9X xqOA== X-Gm-Message-State: AOUpUlHZr2Qz7f5rdYGqtOqnB8kVbkNyuNrF3QhtRp0B+StO2MPNFnsa cgimFCKHeEshbU81QtpbiANXvtZW X-Google-Smtp-Source: AA+uWPyCRPv/5i8AVZ4T5GNFAA/zYIn/7JvKybSU1v818eO9B9uvxAmyxhR7FA2/zdFr1rbNaPmM2Q== X-Received: by 2002:adf:c78e:: with SMTP id l14-v6mr31381768wrg.230.1534871039254; Tue, 21 Aug 2018 10:03:59 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.58 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:58 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:24 +0200 Message-Id: <1534870966-9287-53-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::444 Subject: [Qemu-devel] [PULL 52/74] cpus: protect TimerState writes with a spinlock 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: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" In the next patch, we will need to write cpu_ticks_offset from any thread, even outside the BQL. Currently, it is protected by the BQL just because cpu_enable_ticks and cpu_disable_ticks happen to hold it, but the critical sections are well delimited and it's easy to remove the BQL dependency. Add a spinlock that matches vm_clock_seqlock, and hold it when writing to the TimerState. This also lets us fix cpu_update_icount when 64-bit atomics are not available. Fields of TiemrState are reordered to avoid padding. Signed-off-by: Paolo Bonzini --- cpus.c | 72 +++++++++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 25 deletions(-) diff --git a/cpus.c b/cpus.c index 3783651..a810a95 100644 --- a/cpus.c +++ b/cpus.c @@ -129,21 +129,27 @@ typedef struct TimersState { int64_t cpu_ticks_prev; int64_t cpu_ticks_offset; - /* cpu_clock_offset can be read out of BQL, so protect it with - * this lock. + /* Protect fields that can be respectively read outside the + * BQL, and written from multiple threads. */ QemuSeqLock vm_clock_seqlock; - int64_t cpu_clock_offset; - int32_t cpu_ticks_enabled; + QemuSpin vm_clock_lock; + + int16_t cpu_ticks_enabled; /* Conversion factor from emulated instructions to virtual clock ticks. */ - int icount_time_shift; + int16_t icount_time_shift; + /* Compensate for varying guest execution speed. */ int64_t qemu_icount_bias; + + int64_t vm_clock_warp_start; + int64_t cpu_clock_offset; + /* Only written by TCG thread */ int64_t qemu_icount; + /* for adjusting icount */ - int64_t vm_clock_warp_start; QEMUTimer *icount_rt_timer; QEMUTimer *icount_vm_timer; QEMUTimer *icount_warp_timer; @@ -244,11 +250,15 @@ void cpu_update_icount(CPUState *cpu) int64_t executed = cpu_get_icount_executed(cpu); cpu->icount_budget -= executed; -#ifdef CONFIG_ATOMIC64 +#ifndef CONFIG_ATOMIC64 + seqlock_write_lock(&timers_state.vm_clock_seqlock, + &timers_state.vm_clock_lock); +#endif atomic_set__nocheck(&timers_state.qemu_icount, timers_state.qemu_icount + executed); -#else /* FIXME: we need 64bit atomics to do this safely */ - timers_state.qemu_icount += executed; +#ifndef CONFIG_ATOMIC64 + seqlock_write_unlock(&timers_state.vm_clock_seqlock, + &timers_state.vm_clock_lock); #endif } @@ -369,14 +379,15 @@ int64_t cpu_get_clock(void) */ void cpu_enable_ticks(void) { - /* Here, the really thing protected by seqlock is cpu_clock_offset. */ - seqlock_write_begin(&timers_state.vm_clock_seqlock); + seqlock_write_lock(&timers_state.vm_clock_seqlock, + &timers_state.vm_clock_lock); if (!timers_state.cpu_ticks_enabled) { timers_state.cpu_ticks_offset -= cpu_get_host_ticks(); timers_state.cpu_clock_offset -= get_clock(); timers_state.cpu_ticks_enabled = 1; } - seqlock_write_end(&timers_state.vm_clock_seqlock); + seqlock_write_unlock(&timers_state.vm_clock_seqlock, + &timers_state.vm_clock_lock); } /* disable cpu_get_ticks() : the clock is stopped. You must not call @@ -385,14 +396,15 @@ void cpu_enable_ticks(void) */ void cpu_disable_ticks(void) { - /* Here, the really thing protected by seqlock is cpu_clock_offset. */ - seqlock_write_begin(&timers_state.vm_clock_seqlock); + seqlock_write_lock(&timers_state.vm_clock_seqlock, + &timers_state.vm_clock_lock); if (timers_state.cpu_ticks_enabled) { timers_state.cpu_ticks_offset += cpu_get_host_ticks(); timers_state.cpu_clock_offset = cpu_get_clock_locked(); timers_state.cpu_ticks_enabled = 0; } - seqlock_write_end(&timers_state.vm_clock_seqlock); + seqlock_write_unlock(&timers_state.vm_clock_seqlock, + &timers_state.vm_clock_lock); } /* Correlation between real and virtual time is always going to be @@ -415,7 +427,8 @@ static void icount_adjust(void) return; } - seqlock_write_begin(&timers_state.vm_clock_seqlock); + seqlock_write_lock(&timers_state.vm_clock_seqlock, + &timers_state.vm_clock_lock); cur_time = cpu_get_clock_locked(); cur_icount = cpu_get_icount_locked(); @@ -439,7 +452,8 @@ static void icount_adjust(void) atomic_set__nocheck(&timers_state.qemu_icount_bias, cur_icount - (timers_state.qemu_icount << timers_state.icount_time_shift)); - seqlock_write_end(&timers_state.vm_clock_seqlock); + seqlock_write_unlock(&timers_state.vm_clock_seqlock, + &timers_state.vm_clock_lock); } static void icount_adjust_rt(void *opaque) @@ -480,7 +494,8 @@ static void icount_warp_rt(void) return; } - seqlock_write_begin(&timers_state.vm_clock_seqlock); + seqlock_write_lock(&timers_state.vm_clock_seqlock, + &timers_state.vm_clock_lock); if (runstate_is_running()) { int64_t clock = REPLAY_CLOCK(REPLAY_CLOCK_VIRTUAL_RT, cpu_get_clock_locked()); @@ -500,7 +515,8 @@ static void icount_warp_rt(void) timers_state.qemu_icount_bias + warp_delta); } timers_state.vm_clock_warp_start = -1; - seqlock_write_end(&timers_state.vm_clock_seqlock); + seqlock_write_unlock(&timers_state.vm_clock_seqlock, + &timers_state.vm_clock_lock); if (qemu_clock_expired(QEMU_CLOCK_VIRTUAL)) { qemu_clock_notify(QEMU_CLOCK_VIRTUAL); @@ -525,10 +541,12 @@ void qtest_clock_warp(int64_t dest) int64_t deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL); int64_t warp = qemu_soonest_timeout(dest - clock, deadline); - seqlock_write_begin(&timers_state.vm_clock_seqlock); + seqlock_write_lock(&timers_state.vm_clock_seqlock, + &timers_state.vm_clock_lock); atomic_set__nocheck(&timers_state.qemu_icount_bias, timers_state.qemu_icount_bias + warp); - seqlock_write_end(&timers_state.vm_clock_seqlock); + seqlock_write_unlock(&timers_state.vm_clock_seqlock, + &timers_state.vm_clock_lock); qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL); timerlist_run_timers(aio_context->tlg.tl[QEMU_CLOCK_VIRTUAL]); @@ -595,10 +613,12 @@ void qemu_start_warp_timer(void) * It is useful when we want a deterministic execution time, * isolated from host latencies. */ - seqlock_write_begin(&timers_state.vm_clock_seqlock); + seqlock_write_lock(&timers_state.vm_clock_seqlock, + &timers_state.vm_clock_lock); atomic_set__nocheck(&timers_state.qemu_icount_bias, timers_state.qemu_icount_bias + deadline); - seqlock_write_end(&timers_state.vm_clock_seqlock); + seqlock_write_unlock(&timers_state.vm_clock_seqlock, + &timers_state.vm_clock_lock); qemu_clock_notify(QEMU_CLOCK_VIRTUAL); } else { /* @@ -609,12 +629,14 @@ void qemu_start_warp_timer(void) * you will not be sending network packets continuously instead of * every 100ms. */ - seqlock_write_begin(&timers_state.vm_clock_seqlock); + seqlock_write_lock(&timers_state.vm_clock_seqlock, + &timers_state.vm_clock_lock); if (timers_state.vm_clock_warp_start == -1 || timers_state.vm_clock_warp_start > clock) { timers_state.vm_clock_warp_start = clock; } - seqlock_write_end(&timers_state.vm_clock_seqlock); + seqlock_write_unlock(&timers_state.vm_clock_seqlock, + &timers_state.vm_clock_lock); timer_mod_anticipate(timers_state.icount_warp_timer, clock + deadline); } From patchwork Tue Aug 21 17:02:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960653 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=redhat.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="rtOxUP3c"; 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 41vyds6QjVz9s7X for ; Wed, 22 Aug 2018 03:41:21 +1000 (AEST) Received: from localhost ([::1]:55141 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAec-0004D1-VA for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:41:19 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33706) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4n-0002IG-RR for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4Y-0006se-Iq for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:11 -0400 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]:53598) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4X-0006p8-Lh for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:02 -0400 Received: by mail-wm0-x243.google.com with SMTP id s9-v6so3626333wmh.3 for ; Tue, 21 Aug 2018 10:04:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:subject:date:message-id:in-reply-to:references; bh=UL37P/PVM+DWTYC/C7CpOadT2asAFlFAO6FuAW3p08E=; b=rtOxUP3cO2OeeFbHqfo3u6MVEK86vUWT5B+MuKJKOH8PYmhv557QQ7pLC5mDjV5aKK C4Q+4dfnY/IYQ66v7Y+/T0vJnL2gFyzBHLvK9Yt9Av9Iq+g9kSDV1HxaJyw81S0ljHS0 XdZpo8sOTgL9Lr5/vUXfz9BQlY+0L3Ovzk2EoIsuL0wT8UN3gxKvZkotelCnOCEpcXVb e8R/mLWSQkrw2OosZPYZrqd6TUrPdCeWYp1zo//p37uBH/GZcG8lXKZGQ9IN13tGnScK EhDzW4B3avqX+9bUv85KVmfqh9o0NpHAfmx3rmemsxGnsUcFiOOZ7e6zJuh907FeEkMv ZujQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references; bh=UL37P/PVM+DWTYC/C7CpOadT2asAFlFAO6FuAW3p08E=; b=AaG8vCetVquSuVcWUsujfniH1B0EaactWP1n4oBEqnUMa3s7NFl5ep6vOXQ/oGohDk 1EbY92qxbUkzLfP7beo18CWoyTcXyKktbdcPG2KrmQVFBz062+kqW4AmS2kADGdYbW47 hSiDJnn/Oa/Zoc3PByGNZBAkRewG6/oAVeimjtM0ubX1eSXqj/QkqjAthH2wM+3PUfGL eBTfG6y5abA7Vw2Z4QhMdzbyqBNxq+X4Gw0DIvGOyY3CmDtUtKG6MJ2NomVE9mkodRuD yJT9OqiJE78pcMFOZYXg3ux31j4zyep50FNIULlWZBq2yulAdzOABGszXrN0oEfygsqm 2rAQ== X-Gm-Message-State: APzg51DOpx9llKN2CNRiSjeuZVSYJmkFhMxuK6m47lf1569BgoO/fnE8 SLf3Vco1iSFlGFAyAZ5TY1Gvhv14 X-Google-Smtp-Source: ANB0Vdb/O9TCDM+8HSJp8lbNe2tuOruFbtIurJDsJm/EBd3MtH82cA2qVt3JPu1KEJSMBa2E4YzVew== X-Received: by 2002:a1c:9550:: with SMTP id x77-v6mr112592wmd.135.1534871040096; Tue, 21 Aug 2018 10:04:00 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.59 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:59 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:25 +0200 Message-Id: <1534870966-9287-54-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::243 Subject: [Qemu-devel] [PULL 53/74] cpus: allow cpu_get_ticks out of BQL 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: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Because of cpu_ticks_prev, we cannot use a seqlock. But then the conversion is even easier. :) Signed-off-by: Paolo Bonzini --- cpus.c | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/cpus.c b/cpus.c index a810a95..8ee6e5d 100644 --- a/cpus.c +++ b/cpus.c @@ -316,11 +316,26 @@ int64_t cpu_icount_to_ns(int64_t icount) return icount << atomic_read(&timers_state.icount_time_shift); } +static int64_t cpu_get_ticks_locked(void) +{ + int64_t ticks = timers_state.cpu_ticks_offset; + if (timers_state.cpu_ticks_enabled) { + ticks += cpu_get_host_ticks(); + } + + if (timers_state.cpu_ticks_prev > ticks) { + /* Non increasing ticks may happen if the host uses software suspend. */ + timers_state.cpu_ticks_offset += timers_state.cpu_ticks_prev - ticks; + ticks = timers_state.cpu_ticks_prev; + } + + timers_state.cpu_ticks_prev = ticks; + return ticks; +} + /* return the time elapsed in VM between vm_start and vm_stop. Unless * icount is active, cpu_get_ticks() uses units of the host CPU cycle * counter. - * - * Caller must hold the BQL */ int64_t cpu_get_ticks(void) { @@ -330,19 +345,9 @@ int64_t cpu_get_ticks(void) return cpu_get_icount(); } - ticks = timers_state.cpu_ticks_offset; - if (timers_state.cpu_ticks_enabled) { - ticks += cpu_get_host_ticks(); - } - - if (timers_state.cpu_ticks_prev > ticks) { - /* Note: non increasing ticks may happen if the host uses - software suspend */ - timers_state.cpu_ticks_offset += timers_state.cpu_ticks_prev - ticks; - ticks = timers_state.cpu_ticks_prev; - } - - timers_state.cpu_ticks_prev = ticks; + qemu_spin_lock(&timers_state.vm_clock_lock); + ticks = cpu_get_ticks_locked(); + qemu_spin_unlock(&timers_state.vm_clock_lock); return ticks; } From patchwork Tue Aug 21 17:02:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960665 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=redhat.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="XoKYgGGy"; 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 41vyqn27z5z9s47 for ; Wed, 22 Aug 2018 03:49:57 +1000 (AEST) Received: from localhost ([::1]:55183 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAmw-00065t-Uf for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:49:55 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33711) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4n-0002IL-TC for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4Z-0006tV-0d for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:11 -0400 Received: from mail-wm0-x22c.google.com ([2a00:1450:400c:c09::22c]:50856) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4Y-0006qv-En for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:02 -0400 Received: by mail-wm0-x22c.google.com with SMTP id s12-v6so3661136wmc.0 for ; Tue, 21 Aug 2018 10:04:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=weJgwL2qgLJdagQECL4ducOP9c6PbqF7pDqodxiyQUU=; b=XoKYgGGyI4+x/suD01QG0DosmFsd9UnJw1I14T149HU2pJP6GZqdyom0ETPMfz4yoN Ynaph8lQiVdkorHGl7jDzZfARR3sBuFl1t+0xnJ+I31O6oUuXKzqP0fYn9CDp7V1aA26 G/uopnKLNvVb6t3hvjhdLNZckB6C/8eq0L60E/bNYAO7QyN4shJKQ+IDEzLpjfwuBe3R dFlDYjHbAxe21+g2KlhQyO+0qQKhasaUPIQpFWMwGiBhgNE36H7toMQCzLLxDrtc7Jfq wQM90vhGtukZSmLd0hevunhp9IxGdSZxAuxxuG261RWRioY3OyDZ48ZBaKM2auBcRE6a Lsmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=weJgwL2qgLJdagQECL4ducOP9c6PbqF7pDqodxiyQUU=; b=P6PKEZz9fpgB1pYpQXvINHZFeGBLvKK+l+gXqrJoixdCDdLVRILHYEy+daq9Ay2r73 8Iq0z/YPIegNwV0QshwS1LUZy9LspR98LUucwYrp6t3CD4mJ/29h5VQBVE+ZORnyt4qh cP3Iupwh/Q+FeoRqaHApBLTOBClUDsRa//RWRZPxEttDptZNTM1uR1QHTVG7Cc9xkR6m uwFSTFSJ5a0ONPXzZIuZ8FVlImUOtlPGysTbREL8ckieS0fQAKTy9jbAThXE13DtE7EC WI8mA1lBATQLyfFEs/wjzCUc8eWN78hYIfEcQr7zSRj45tJpMCihmjZGvkcnA8fCA6jf OcPg== X-Gm-Message-State: APzg51C80/UelfQVi2FO/O8fKTQ+rpuq7s9YVM2+GnG5cWVmUzy6HcoR XKSBCQ3ONeQBtlkNS5DDMIoeBaK+ X-Google-Smtp-Source: ANB0VdbLRJJeA7JFo2Zwab4wXmJcmU0StJXrxs/ydtVeKeaLcekaJVH3l2VhdII81+inSzuE0pcv5Q== X-Received: by 2002:a1c:385:: with SMTP id 127-v6mr156598wmd.92.1534871041093; Tue, 21 Aug 2018 10:04:01 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:00 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:26 +0200 Message-Id: <1534870966-9287-55-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::22c Subject: [Qemu-devel] [PULL 54/74] vhost-user-scsi: move host_features into VHostSCSICommon 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: Greg Edwards Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Greg Edwards In preparation for having vhost-scsi also make use of host_features, move it from struct VHostUserSCSI into struct VHostSCSICommon. Signed-off-by: Greg Edwards Message-Id: <20180808195235.5843-2-gedwards@ddn.com> Reviewed-by: Felipe Franciosi Reviewed-by: Fam Zheng Signed-off-by: Paolo Bonzini --- hw/scsi/vhost-user-scsi.c | 15 ++++++++------- include/hw/virtio/vhost-scsi-common.h | 1 + include/hw/virtio/vhost-user-scsi.h | 1 - 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c index 9355cfd..694cb80 100644 --- a/hw/scsi/vhost-user-scsi.c +++ b/hw/scsi/vhost-user-scsi.c @@ -141,9 +141,10 @@ static uint64_t vhost_user_scsi_get_features(VirtIODevice *vdev, uint64_t features, Error **errp) { VHostUserSCSI *s = VHOST_USER_SCSI(vdev); + VHostSCSICommon *vsc = VHOST_SCSI_COMMON(s); /* Turn on predefined features supported by this device */ - features |= s->host_features; + features |= vsc->host_features; return vhost_scsi_common_get_features(vdev, features, errp); } @@ -157,12 +158,12 @@ static Property vhost_user_scsi_properties[] = { DEFINE_PROP_UINT32("max_sectors", VirtIOSCSICommon, conf.max_sectors, 0xFFFF), DEFINE_PROP_UINT32("cmd_per_lun", VirtIOSCSICommon, conf.cmd_per_lun, 128), - DEFINE_PROP_BIT64("hotplug", VHostUserSCSI, host_features, - VIRTIO_SCSI_F_HOTPLUG, - true), - DEFINE_PROP_BIT64("param_change", VHostUserSCSI, host_features, - VIRTIO_SCSI_F_CHANGE, - true), + DEFINE_PROP_BIT64("hotplug", VHostSCSICommon, host_features, + VIRTIO_SCSI_F_HOTPLUG, + true), + DEFINE_PROP_BIT64("param_change", VHostSCSICommon, host_features, + VIRTIO_SCSI_F_CHANGE, + true), DEFINE_PROP_END_OF_LIST(), }; diff --git a/include/hw/virtio/vhost-scsi-common.h b/include/hw/virtio/vhost-scsi-common.h index 4553be4..57fb1d8 100644 --- a/include/hw/virtio/vhost-scsi-common.h +++ b/include/hw/virtio/vhost-scsi-common.h @@ -35,6 +35,7 @@ typedef struct VHostSCSICommon { int channel; int target; int lun; + uint64_t host_features; } VHostSCSICommon; int vhost_scsi_common_start(VHostSCSICommon *vsc); diff --git a/include/hw/virtio/vhost-user-scsi.h b/include/hw/virtio/vhost-user-scsi.h index 3ec34ae..e429cac 100644 --- a/include/hw/virtio/vhost-user-scsi.h +++ b/include/hw/virtio/vhost-user-scsi.h @@ -30,7 +30,6 @@ typedef struct VHostUserSCSI { VHostSCSICommon parent_obj; - uint64_t host_features; VhostUserState *vhost_user; } VHostUserSCSI; From patchwork Tue Aug 21 17:02:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960657 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=redhat.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="QaD1FjZv"; 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 41vyj44wPsz9s47 for ; Wed, 22 Aug 2018 03:44:07 +1000 (AEST) Received: from localhost ([::1]:55153 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAhI-0006tA-Iz for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:44:04 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33737) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4o-0002IT-42 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4b-0006w4-2X for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:13 -0400 Received: from mail-wm0-x22e.google.com ([2a00:1450:400c:c09::22e]:40657) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4Z-0006sx-BE for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:03 -0400 Received: by mail-wm0-x22e.google.com with SMTP id y9-v6so3498825wma.5 for ; Tue, 21 Aug 2018 10:04:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=sgujkgIPdDMSa0rHcGAfyqh8u6qWHxzM94pdHmVQH20=; b=QaD1FjZvUNdf35r/nTbEchL/2YZcJdCvI7p0fJnSR3HQM3etEks5pqkSPhVCSAdZgj IuGOrLVimlF3b9NofUddYy7dD7q3iqAun10gDJcR/g93BUsL8b+BYn5cyn4okKMsz7eT //uBCA6K4mtjJaD5iF8+t+mC5q8l9tD2XyyQFiazobG/Ur8ICRmZF6wVT059kzIi13KD AQ3O6+SQE3/iteL6Syer0vR/K5sn/QoTmwS7Xq+ssCCD+zycwblv5XbEL91LHpvki34T HxemYUDXiGe8uuN0T+fMHVtl4qDoMcDdO+4/Ty3kdg28kmrAjYY5eHuKRIuMJto7AsgZ 7eHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=sgujkgIPdDMSa0rHcGAfyqh8u6qWHxzM94pdHmVQH20=; b=d12U7huZYJJnvqhO1+9oCYqeNMis0mawvz5X5RfIiGWAxW2Edxo/y9qX00g1HQbpG5 h6dT5ACvaXvGCDUnDFhn/Qnq3z5Cdji+b+iK7tuWDvNNeflYL8CbfIxiafZLhuzpjewz +vTN0Xcsp8uKKg2SmXoz4Le7WZyLhZ7YjbGlgqiIfwD/EUyoZ6KIOubiXsbsuL6oEX6q 15OCfhvmwiztt4P4C1lFqZoWnDHOqM6pPPslbsE9fQ1QUu1TLzik3y5skRf91fGRIhx/ VxbhXFRg7ltQ/Tr3ag/fHPhsQyILCc2vRdqB/7w3vfacdlt+YuEIPfZxcdSSRB6lZ8w8 nd9g== X-Gm-Message-State: APzg51DgUKJu4sw87RyXbWUwnB6xY5RLzqjQOjg/aBXkAm42iTKOlQCu UZEDLSFAdYA+KByRNNN3Uq389FUB X-Google-Smtp-Source: ANB0VdZf261C6k90TBRGu7rmGLOCCBJTZWP1Amq1hx6yH2+Jrp9zsgxAerqvNZI45OjNQfhMxQE6cw== X-Received: by 2002:a1c:c14:: with SMTP id 20-v6mr130045wmm.117.1534871041988; Tue, 21 Aug 2018 10:04:01 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:01 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:27 +0200 Message-Id: <1534870966-9287-56-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::22e Subject: [Qemu-devel] [PULL 55/74] vhost-scsi: unify vhost-scsi get_features implementations 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: Greg Edwards Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Greg Edwards Move the enablement of preset host features into the common vhost_scsi_common_get_features() function. This is in preparation for having vhost-scsi also make use of host_features. Signed-off-by: Greg Edwards Message-Id: <20180808195235.5843-3-gedwards@ddn.com> Reviewed-by: Felipe Franciosi Reviewed-by: Fam Zheng Signed-off-by: Paolo Bonzini --- hw/scsi/vhost-scsi-common.c | 3 +++ hw/scsi/vhost-user-scsi.c | 14 +------------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/hw/scsi/vhost-scsi-common.c b/hw/scsi/vhost-scsi-common.c index e2a5828..b7fbab6 100644 --- a/hw/scsi/vhost-scsi-common.c +++ b/hw/scsi/vhost-scsi-common.c @@ -96,6 +96,9 @@ uint64_t vhost_scsi_common_get_features(VirtIODevice *vdev, uint64_t features, { VHostSCSICommon *vsc = VHOST_SCSI_COMMON(vdev); + /* Turn on predefined features supported by this device */ + features |= vsc->host_features; + return vhost_get_features(&vsc->dev, vsc->feature_bits, features); } diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c index 694cb80..26491da 100644 --- a/hw/scsi/vhost-user-scsi.c +++ b/hw/scsi/vhost-user-scsi.c @@ -137,18 +137,6 @@ static void vhost_user_scsi_unrealize(DeviceState *dev, Error **errp) } } -static uint64_t vhost_user_scsi_get_features(VirtIODevice *vdev, - uint64_t features, Error **errp) -{ - VHostUserSCSI *s = VHOST_USER_SCSI(vdev); - VHostSCSICommon *vsc = VHOST_SCSI_COMMON(s); - - /* Turn on predefined features supported by this device */ - features |= vsc->host_features; - - return vhost_scsi_common_get_features(vdev, features, errp); -} - static Property vhost_user_scsi_properties[] = { DEFINE_PROP_CHR("chardev", VirtIOSCSICommon, conf.chardev), DEFINE_PROP_UINT32("boot_tpgt", VirtIOSCSICommon, conf.boot_tpgt, 0), @@ -188,7 +176,7 @@ static void vhost_user_scsi_class_init(ObjectClass *klass, void *data) set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); vdc->realize = vhost_user_scsi_realize; vdc->unrealize = vhost_user_scsi_unrealize; - vdc->get_features = vhost_user_scsi_get_features; + vdc->get_features = vhost_scsi_common_get_features; vdc->set_config = vhost_scsi_common_set_config; vdc->set_status = vhost_user_scsi_set_status; fwc->get_dev_path = vhost_scsi_common_get_fw_dev_path; From patchwork Tue Aug 21 17:02:28 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960679 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=redhat.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="huPoffuy"; 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 41vz7J4LR8z9s4Z for ; Wed, 22 Aug 2018 04:03:23 +1000 (AEST) Received: from localhost ([::1]:55264 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAzw-00043W-Om for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 14:03:20 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33729) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4o-0002IQ-18 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4b-0006x2-Hx for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:17 -0400 Received: from mail-wm0-x235.google.com ([2a00:1450:400c:c09::235]:36249) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4a-0006uF-T3 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:05 -0400 Received: by mail-wm0-x235.google.com with SMTP id w24-v6so3507296wmc.1 for ; Tue, 21 Aug 2018 10:04:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=hQ3PYvkKB159GikV79WgqUKBCkb11dfsGbPeo+3PsMk=; b=huPoffuyxOLryipYN5u9A2PJJqwMW1RUq6Hve485oChSpVguESg6Q7UjyPzD82aptm MT5JPU16ywGBOzMBAfhzYYK49lUWyHApLbEEC85mTIVJaIIvtpzSD1e7QxMCD6KqYTLt y66kniwNvSd5U1o62mu+Z0A3gX3qbxxlgwvytVbGnk/DsgDX11oo2xXh4mxvcpq5wgWs 7M+hGEBGwxyDqUYN8/bimcrAGE/wBBuf1BfrEUCAkjPyT6g3Rg7UJRHmLbo4z4RP6HHw rFg/OetZq1BILolEpy24MAQCs+oKe+mVWF1sPSjdGODA3cAI6UXosnX1fpYkezuvBgf6 m7pA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=hQ3PYvkKB159GikV79WgqUKBCkb11dfsGbPeo+3PsMk=; b=KTOF0Zen+0em70I09rpwL/f/LdW/1LoEB2q6yi45Hql/xwE4nND5YqilvFXcNLp1Wm ZUHR9fgdz33DAc+ywkf86Vsp3tROCgrI6ZUoEs917uPwNOO8NSE2pWbUxe+gLcYv6k6t lvXcG8OZcCjwTmLhrRahSEuC9JdU8qnQI+AmyxMFyeB8hBjkuchLotUjulX3ACmnO59z Ze0w8rsfEQws7nfUmjLC2uZC5LGIq9sjTHdp8IQ3e7692Qx3s5Lv/sUOUCtpUDpMELLh GHb02Hx+Wm/MHn7WtARxrLiSKeYUJqwrX+WWJA/9Po4bLfBpFkW2pQfhfKQzWnEnQf7G NOBQ== X-Gm-Message-State: APzg51ALDRAOMoUtKEXP45j6ndvdpVQnU+uxxnAZvcVnla/WL1WunMr/ dXwMcwHQZ8C7pYvxdwDyG6mwJDiA X-Google-Smtp-Source: ANB0VdYzy/sHLOPj7jig89cgFYOL3W572pNiBLM5SCkkk2JgBpEyxSMjKaH5F9CXt8Xzx+HqiKpTVw== X-Received: by 2002:a1c:8952:: with SMTP id l79-v6mr133420wmd.7.1534871042863; Tue, 21 Aug 2018 10:04:02 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:02 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:28 +0200 Message-Id: <1534870966-9287-57-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::235 Subject: [Qemu-devel] [PULL 56/74] vhost-scsi: expose 't10_pi' property for VIRTIO_SCSI_F_T10_PI 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: Greg Edwards Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Greg Edwards Allow toggling on/off the VIRTIO_SCSI_F_T10_PI feature bit for both vhost-scsi and vhost-user-scsi devices. Signed-off-by: Greg Edwards Message-Id: <20180808195235.5843-4-gedwards@ddn.com> Reviewed-by: Felipe Franciosi Reviewed-by: Fam Zheng Signed-off-by: Paolo Bonzini --- hw/scsi/vhost-scsi.c | 3 +++ hw/scsi/vhost-user-scsi.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/hw/scsi/vhost-scsi.c b/hw/scsi/vhost-scsi.c index 9c1bea8..becf550 100644 --- a/hw/scsi/vhost-scsi.c +++ b/hw/scsi/vhost-scsi.c @@ -238,6 +238,9 @@ static Property vhost_scsi_properties[] = { DEFINE_PROP_UINT32("max_sectors", VirtIOSCSICommon, conf.max_sectors, 0xFFFF), DEFINE_PROP_UINT32("cmd_per_lun", VirtIOSCSICommon, conf.cmd_per_lun, 128), + DEFINE_PROP_BIT64("t10_pi", VHostSCSICommon, host_features, + VIRTIO_SCSI_F_T10_PI, + false), DEFINE_PROP_END_OF_LIST(), }; diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c index 26491da..2e1ba4a 100644 --- a/hw/scsi/vhost-user-scsi.c +++ b/hw/scsi/vhost-user-scsi.c @@ -152,6 +152,9 @@ static Property vhost_user_scsi_properties[] = { DEFINE_PROP_BIT64("param_change", VHostSCSICommon, host_features, VIRTIO_SCSI_F_CHANGE, true), + DEFINE_PROP_BIT64("t10_pi", VHostSCSICommon, host_features, + VIRTIO_SCSI_F_T10_PI, + false), DEFINE_PROP_END_OF_LIST(), }; From patchwork Tue Aug 21 17:02:29 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960675 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=redhat.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="JPIAALmX"; 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 41vz202Lqlz9s4Z for ; Wed, 22 Aug 2018 03:58:48 +1000 (AEST) Received: from localhost ([::1]:55231 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAvV-0007PT-VV for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:58:45 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34024) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA51-0002UW-T4 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4n-0007A8-LZ for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:25 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]:43888) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4b-0006vg-Cj for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:08 -0400 Received: by mail-wr1-x42f.google.com with SMTP id k5-v6so4944662wre.10 for ; Tue, 21 Aug 2018 10:04:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=XzdQb4myVIoMb9NuZHlHUKoiT3KZg77zsB0wbJSpUZA=; b=JPIAALmXGQwub/qbNQ3MdFHJQXZPkJTHvUd+loPG+nCnYZzppch9KkWlC87tP+svC5 GOsDnd10Ao/Z3W6bkI0MORsxzT0V5fDMDZY8Llj8E8wsUdVgsmPsErsAtsR5InS/tU6S IKz4du7YNWdzU8zEiXOFIkoyBMXe8uknacx+aBQ+5zC2UOWijSl8WolBXpfpECd4s29H UTmLECUnKZ12/28qZeKjagYbZPemRm09NqDNJg+4VIF2DbhcC5YqVk4DMDgpX6Q4AWzg 1TLjZDC7DjiZoGs0EOmaNPVm1PSgb2QLzddCOvBIQNWx9he3lAQJlNDffb45l8uTlFoz rcaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=XzdQb4myVIoMb9NuZHlHUKoiT3KZg77zsB0wbJSpUZA=; b=VBqnk4iOfk37XeAPu1j38oAqcf+gvSf37jVx8CFKKxzjyCOUSPwccuhboIpT3YcTLI YnclE3Xr846/URYXqPOEGR/5EQZRhYWB3x4h4rp7uKmscPThyLELINxPuASzCTVP/C3y DU+n9FWFDUPT8SxKZhz+m5sE3ZHgBG3o+/Jq2MgX5/r1FGcyXHOWXO2lnkOGjIdPuSFV c0mexs0rxmg4fmmxiiahYBo3wmQuivcZW56a2LuGkryCRNn91pzdIS0ZJIk3uNB6I7N9 j6cWuFv4fdgRNAHhFz0xMr+kJmI7ThCUAIQG8E6ZV/PKpvGpQW+JDGyN1w7DFUkuW1uP ESfA== X-Gm-Message-State: AOUpUlGOuXbUZJJ+wtmV/+KQ+m+Lk7skUh7dWzryPPwRaMGisgkOG77e Sc7LxoBnav5vs2rfgmm+bTM5zJxx X-Google-Smtp-Source: AA+uWPy/KHiMzCHbNsPkUzmSkhKVQzLzzWML0Ojd/RTuxKvdZO+15Eb6XqbraiqsVSKf5xSx3ft4ag== X-Received: by 2002:adf:9d46:: with SMTP id o6-v6mr32436629wre.51.1534871043980; Tue, 21 Aug 2018 10:04:03 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:03 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:29 +0200 Message-Id: <1534870966-9287-58-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42f Subject: [Qemu-devel] [PULL 57/74] ipmi: Use proper struct reference for BT vmstate 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: Corey Minyard Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Corey Minyard The vmstate for isa_ipmi_bt was referencing into the bt structure, instead create a bt structure separate and use that. The version 1 of the BT transfer was fairly broken, if a migration occured during an IPMI operation, it is likely the migration would be corrupted because I misunderstood the VMSTATE_VBUFFER_UINT32() handling, I thought it handled transferring the length field, too. So I just remove support for that. I doubt anyone is using it at this point. This also removes the transfer of use_irq, since that should come from configuration. Signed-off-by: Corey Minyard Reviewed-by: Dr. David Alan Gilbert Message-Id: <1534798644-13587-1-git-send-email-minyard@acm.org> Signed-off-by: Paolo Bonzini --- hw/ipmi/isa_ipmi_bt.c | 68 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 55 insertions(+), 13 deletions(-) diff --git a/hw/ipmi/isa_ipmi_bt.c b/hw/ipmi/isa_ipmi_bt.c index e946030..8bbb1fa 100644 --- a/hw/ipmi/isa_ipmi_bt.c +++ b/hw/ipmi/isa_ipmi_bt.c @@ -22,6 +22,7 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" +#include "qemu/log.h" #include "qapi/error.h" #include "hw/hw.h" #include "hw/ipmi/ipmi.h" @@ -450,22 +451,63 @@ static void isa_ipmi_bt_realize(DeviceState *dev, Error **errp) isa_register_ioport(isadev, &iib->bt.io, iib->bt.io_base); } -static const VMStateDescription vmstate_ISAIPMIBTDevice = { - .name = TYPE_IPMI_INTERFACE, +static int ipmi_bt_vmstate_post_load(void *opaque, int version) +{ + IPMIBT *ib = opaque; + + /* Make sure all the values are sane. */ + if (ib->outpos >= MAX_IPMI_MSG_SIZE || ib->outlen >= MAX_IPMI_MSG_SIZE || + ib->outpos >= ib->outlen) { + qemu_log_mask(LOG_GUEST_ERROR, + "ipmi:bt: vmstate transfer received bad out values: %d %d\n", + ib->outpos, ib->outlen); + ib->outpos = 0; + ib->outlen = 0; + } + + if (ib->inlen >= MAX_IPMI_MSG_SIZE) { + qemu_log_mask(LOG_GUEST_ERROR, + "ipmi:bt: vmstate transfer received bad in value: %d\n", + ib->inlen); + ib->inlen = 0; + } + + return 0; +} + +const VMStateDescription vmstate_IPMIBT = { + .name = TYPE_IPMI_INTERFACE_PREFIX "bt", .version_id = 1, .minimum_version_id = 1, + .post_load = ipmi_bt_vmstate_post_load, + .fields = (VMStateField[]) { + VMSTATE_BOOL(obf_irq_set, IPMIBT), + VMSTATE_BOOL(atn_irq_set, IPMIBT), + VMSTATE_BOOL(irqs_enabled, IPMIBT), + VMSTATE_UINT32(outpos, IPMIBT), + VMSTATE_UINT32(outlen, IPMIBT), + VMSTATE_UINT8_ARRAY(outmsg, IPMIBT, MAX_IPMI_MSG_SIZE), + VMSTATE_UINT32(inlen, IPMIBT), + VMSTATE_UINT8_ARRAY(inmsg, IPMIBT, MAX_IPMI_MSG_SIZE), + VMSTATE_UINT8(control_reg, IPMIBT), + VMSTATE_UINT8(mask_reg, IPMIBT), + VMSTATE_UINT8(waiting_rsp, IPMIBT), + VMSTATE_UINT8(waiting_seq, IPMIBT), + VMSTATE_END_OF_LIST() + } +}; + +static const VMStateDescription vmstate_ISAIPMIBTDevice = { + .name = TYPE_IPMI_INTERFACE_PREFIX "isa-bt", + .version_id = 2, + .minimum_version_id = 2, + /* + * Version 1 had messed up the array transfer, it's not even usable + * because it used VMSTATE_VBUFFER_UINT32, but it did not transfer + * the buffer length, so random things would happen. + */ .fields = (VMStateField[]) { - VMSTATE_BOOL(bt.obf_irq_set, ISAIPMIBTDevice), - VMSTATE_BOOL(bt.atn_irq_set, ISAIPMIBTDevice), - VMSTATE_BOOL(bt.use_irq, ISAIPMIBTDevice), - VMSTATE_BOOL(bt.irqs_enabled, ISAIPMIBTDevice), - VMSTATE_UINT32(bt.outpos, ISAIPMIBTDevice), - VMSTATE_VBUFFER_UINT32(bt.outmsg, ISAIPMIBTDevice, 1, NULL, bt.outlen), - VMSTATE_VBUFFER_UINT32(bt.inmsg, ISAIPMIBTDevice, 1, NULL, bt.inlen), - VMSTATE_UINT8(bt.control_reg, ISAIPMIBTDevice), - VMSTATE_UINT8(bt.mask_reg, ISAIPMIBTDevice), - VMSTATE_UINT8(bt.waiting_rsp, ISAIPMIBTDevice), - VMSTATE_UINT8(bt.waiting_seq, ISAIPMIBTDevice), + VMSTATE_STRUCT(bt, ISAIPMIBTDevice, 1, vmstate_IPMIBT, IPMIBT), VMSTATE_END_OF_LIST() } }; From patchwork Tue Aug 21 17:02:30 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960667 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=redhat.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="AD6ZOFtl"; 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 41vytT50Hhz9s5b for ; Wed, 22 Aug 2018 03:52:17 +1000 (AEST) Received: from localhost ([::1]:55195 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsApC-0000is-OH for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:52:14 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33972) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4y-0002Sd-5K for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4o-0007E9-VJ for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:25 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]:33857) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4o-0006xI-Fe for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:18 -0400 Received: by mail-wr1-x429.google.com with SMTP id g33-v6so6432166wrd.1 for ; Tue, 21 Aug 2018 10:04:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=XU0qtNCLOAa1vJZVW0iUHDZv7Be7zwsTzn054IfDEi4=; b=AD6ZOFtlpIDUY+omZ5/HzRBUmkyPkJ7wP4u5dPLxn3DRv8iPf/rirbaCbJg5r07LD2 fVnCg6JcH/oWsYp1t/ZooMJ3IxSiL7E4ug0Bfc4PhhhCaTAEVr+LJ3DeGOOsXzANCcyN aLqgB5eWKMlOn/AJWCm+HyPQcAIVtT5hbVt1OXhBN+vuyJUZsij7K7wjatEdLjSEOY6/ bTr7UHI/86ROlltcm6VF/euALaRVXN4QKpns9iJ9AVD3ay0kCexUzMHcW2iKHjEGHSJe ctdgoCU3+rvBi3TF4Z1FO1lbNXEll4++KNdQK+DOqo3z/tQmTwyc74rF5nWDmTscn7k1 CnmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=XU0qtNCLOAa1vJZVW0iUHDZv7Be7zwsTzn054IfDEi4=; b=fN3MKEdgXJSHQCJwtiz2glt6pL9j1HvG1loP6W6OR31wFSraZia+bynZvsE8jSP4sW jYllT4GrR3e3a4EyH76RV9TaKYnUT/T51OpQ+cLPiWrNsWS96Ljk6LxE8IbE2+NzR6H7 qL4V8eCK2mFnAQPWRGpkOIhQChwVftnESG7VM1BVNyNrgdmRNbCpXgifjePnqW+2jcUZ dV4k7eEzxA9t0YubxwCwzBEQgpSCwmpnTZec2eVMUSaoNMWFWV6Xs35B8Iem2IVup50m oMc5s2DhdA7O6MVfVtxAP5A3yk9Rg1zTk0q1VFDuN4EM5DSoKPPxW0cxb0fuyKmkGJsD DlHQ== X-Gm-Message-State: AOUpUlEHgawKO/X8UudFPgo804/+a4whmLWfuK99f9hgtFb17IZKs1Tu 76VfLAzXYdByReXoAnc7cVbPw62F X-Google-Smtp-Source: AA+uWPyIc1g7AjPp64KNiK86PEXx+apNYaC6W9SB0IMs4NJgVUzjoHOwVCEJ4mtPiaEtwVaI9F/P9A== X-Received: by 2002:adf:eecc:: with SMTP id a12-v6mr14356593wrp.21.1534871044931; Tue, 21 Aug 2018 10:04:04 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:04 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:30 +0200 Message-Id: <1534870966-9287-59-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::429 Subject: [Qemu-devel] [PULL 58/74] pc-dimm: assign and verify the "slot" property during pre_plug 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: David Hildenbrand Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: David Hildenbrand We can assign and verify the slot before realizing and trying to plug. reading/writing the slot property should never fail, so let's reduce error handling a bit by using &error_abort. To do this during pre_plug, add and use (x86, ppc) pc_dimm_pre_plug(). Reviewed-by: David Gibson Reviewed-by: Igor Mammedov Reviewed-by: Eric Auger Signed-off-by: David Hildenbrand Message-Id: <20180801133444.11269-2-david@redhat.com> Signed-off-by: Paolo Bonzini --- hw/i386/pc.c | 2 ++ hw/mem/pc-dimm.c | 35 ++++++++++++++++++----------------- hw/ppc/spapr.c | 9 ++++++++- include/hw/mem/pc-dimm.h | 1 + 4 files changed, 29 insertions(+), 18 deletions(-) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 83a4444..96be77f 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1696,6 +1696,8 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, error_setg(errp, "nvdimm is not enabled: missing 'nvdimm' in '-M'"); return; } + + pc_dimm_pre_plug(dev, MACHINE(hotplug_dev), errp); } static void pc_memory_plug(HotplugHandler *hotplug_dev, diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c index 65843bc..e56c4da 100644 --- a/hw/mem/pc-dimm.c +++ b/hw/mem/pc-dimm.c @@ -29,10 +29,27 @@ static int pc_dimm_get_free_slot(const int *hint, int max_slots, Error **errp); +void pc_dimm_pre_plug(DeviceState *dev, MachineState *machine, Error **errp) +{ + Error *local_err = NULL; + int slot; + + slot = object_property_get_int(OBJECT(dev), PC_DIMM_SLOT_PROP, + &error_abort); + slot = pc_dimm_get_free_slot(slot == PC_DIMM_UNASSIGNED_SLOT ? NULL : &slot, + machine->ram_slots, &local_err); + if (local_err) { + goto out; + } + object_property_set_int(OBJECT(dev), slot, PC_DIMM_SLOT_PROP, &error_abort); + trace_mhp_pc_dimm_assigned_slot(slot); +out: + error_propagate(errp, local_err); +} + void pc_dimm_plug(DeviceState *dev, MachineState *machine, uint64_t align, Error **errp) { - int slot; PCDIMMDevice *dimm = PC_DIMM(dev); PCDIMMDeviceClass *ddc = PC_DIMM_GET_CLASS(dimm); MemoryRegion *vmstate_mr = ddc->get_vmstate_memory_region(dimm, @@ -59,22 +76,6 @@ void pc_dimm_plug(DeviceState *dev, MachineState *machine, uint64_t align, } trace_mhp_pc_dimm_assigned_address(addr); - slot = object_property_get_int(OBJECT(dev), PC_DIMM_SLOT_PROP, &local_err); - if (local_err) { - goto out; - } - - slot = pc_dimm_get_free_slot(slot == PC_DIMM_UNASSIGNED_SLOT ? NULL : &slot, - machine->ram_slots, &local_err); - if (local_err) { - goto out; - } - object_property_set_int(OBJECT(dev), slot, PC_DIMM_SLOT_PROP, &local_err); - if (local_err) { - goto out; - } - trace_mhp_pc_dimm_assigned_slot(slot); - memory_device_plug_region(machine, mr, addr); vmstate_register_ram(vmstate_mr, dev); diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index ab9c04e..96468dc 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -3205,6 +3205,7 @@ static void spapr_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, sPAPRMachineState *spapr = SPAPR_MACHINE(hotplug_dev); PCDIMMDevice *dimm = PC_DIMM(dev); PCDIMMDeviceClass *ddc = PC_DIMM_GET_CLASS(dimm); + Error *local_err = NULL; MemoryRegion *mr; uint64_t size; Object *memdev; @@ -3230,7 +3231,13 @@ static void spapr_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, memdev = object_property_get_link(OBJECT(dimm), PC_DIMM_MEMDEV_PROP, &error_abort); pagesize = host_memory_backend_pagesize(MEMORY_BACKEND(memdev)); - spapr_check_pagesize(spapr, pagesize, errp); + spapr_check_pagesize(spapr, pagesize, &local_err); + if (local_err) { + error_propagate(errp, local_err); + return; + } + + pc_dimm_pre_plug(dev, MACHINE(hotplug_dev), errp); } struct sPAPRDIMMState { diff --git a/include/hw/mem/pc-dimm.h b/include/hw/mem/pc-dimm.h index 26ebb7d..7b12041 100644 --- a/include/hw/mem/pc-dimm.h +++ b/include/hw/mem/pc-dimm.h @@ -79,6 +79,7 @@ typedef struct PCDIMMDeviceClass { Error **errp); } PCDIMMDeviceClass; +void pc_dimm_pre_plug(DeviceState *dev, MachineState *machine, Error **errp); void pc_dimm_plug(DeviceState *dev, MachineState *machine, uint64_t align, Error **errp); void pc_dimm_unplug(DeviceState *dev, MachineState *machine); From patchwork Tue Aug 21 17:02:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960683 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=redhat.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="l3pMWE+L"; 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 41vzHY3w69z9s4Z for ; Wed, 22 Aug 2018 04:10:33 +1000 (AEST) Received: from localhost ([::1]:55320 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsB6t-0004Iu-6P for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 14:10:31 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33969) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4y-0002SZ-50 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4p-0007EP-1W for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:25 -0400 Received: from mail-wm0-x232.google.com ([2a00:1450:400c:c09::232]:51295) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4o-0006yW-Lh for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:18 -0400 Received: by mail-wm0-x232.google.com with SMTP id y2-v6so3645367wma.1 for ; Tue, 21 Aug 2018 10:04:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=7m8cigBDEuBZgo1LOtio9vHXPS5Ch1iISu9Ukyh74+o=; b=l3pMWE+LiFXDPo6/IYdXylJHBDdhfEUqOavUj3qmfnUF+vxnGtOcpxG3k/wv380OyJ xn/ji7scy2mTK+ihyIr5tcz1rnpCKmFCrS2kZDIiu0YI4etmyJRa4M+beWal8ER6+QJ5 Cix/W0ThaYVeueo6B7A7/++/hp5q3m4a3NvFqSxOsR0bzJ6QgfFC9wouuIor3BrNS9jM ksIC+LZ57AkmgnfJIdtcTkto8JDI825Nk7c9Ol9TS9bWt1XKJHEASSqo2Xb++I7fYrVP 1947asnkthGmXYmdW103YGBqS7s28eu042//gQstW+veCUx9VhHMPpPaP/QTWWD380B4 vacw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=7m8cigBDEuBZgo1LOtio9vHXPS5Ch1iISu9Ukyh74+o=; b=D1d6JH4VJBC8eMpebf7o1XtknX7/TZoLkGmzJa0CwiWAb0GARNZ3DGZYE8W/IBhs1P /KF02gs1N+jlZvSNxijQwBAs+hjMjDtnKKRsvR70kYGp0xQKQMMkSJ54Zpq73V8VcZV5 /Bosrljt3saSMj2Hq/FQ0kLxM4I0QkEaJn49DKbc4NKWHF4KjpxrHn+zvygyfIG/4ACU Of+GyeSTR72qkFF8VBIscUdB2E1MO6NGmD4BE93jveBY18VDMTvdiaktT9K6zPpoRFxa ugCdXX02QRMe8APv00vtjkaPfV+0qPx8akVrpKIcVlOxXEZqKaRlGYcs+kd4zqIhbGYF 2tGg== X-Gm-Message-State: APzg51A7SO68SstWNtOyqp7xTIbc7ZZEnQ826p9OENhhdc+U1eEE/9cg x68adhQ6OKdYJYYcR0eCtyIdw4xK X-Google-Smtp-Source: ANB0Vda5STsmqDtAz4xv0W3tXZdgKYIhNEuMsD/N55+rhssWsmvK53yfo+eIJFz4PY4JqzJ4kgi5Jg== X-Received: by 2002:a1c:2142:: with SMTP id h63-v6mr141171wmh.51.1534871046082; Tue, 21 Aug 2018 10:04:06 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:05 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:31 +0200 Message-Id: <1534870966-9287-60-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::232 Subject: [Qemu-devel] [PULL 59/74] util/oslib-win32: indicate alignment for qemu_anon_ram_alloc() 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: David Hildenbrand Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: David Hildenbrand Let's set the alignment just like for the posix variant. This will implicitly set the alignment of the underlying memory region and therefore make memory_region_get_alignment(mr) return something > 0 for all memory backends applicable to PCDIMM/NVDIMM. The allocation granularity is ususally 64k, while the page size is 4k. The documentation of VirtualAlloc is not really comprehensible in case only MEM_COMMIT is specified without an address. We'll detect the actual values and then go for the bigger one. The expection is, that it will always be 64k aligned. (The assumption is that MEM_COMMIT does an implicit MEM_RESERVE, so the address will always be aligned to the allocation granularity. And the allocation granularity is always bigger than the page size). This will allow us to drop special handling in pc.c for memory_region_get_alignment(mr) == 0, as we can then assume that it is always set (and AFAICS >= getpagesize()). For pc in pc_memory_plug(), under Windows TARGET_PAGE_SIZE == getpagesize(), therefore alignment of DIMMs will not change, and therefore also not the guest physical memory layout. For spapr in spapr_memory_plug(), an alignment of 0 would have been used until now. As QEMU_ALIGN_UP will crash with the alignment being 0, this never worked, so we don't have to care about compatibility handling. Reviewed-by: David Gibson Signed-off-by: David Hildenbrand Message-Id: <20180801133444.11269-3-david@redhat.com> Reviewed-by: Igor Mammedov Signed-off-by: Paolo Bonzini --- util/oslib-win32.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/util/oslib-win32.c b/util/oslib-win32.c index bb5ad28..25dd159 100644 --- a/util/oslib-win32.c +++ b/util/oslib-win32.c @@ -67,15 +67,24 @@ void *qemu_memalign(size_t alignment, size_t size) return qemu_oom_check(qemu_try_memalign(alignment, size)); } +static int get_allocation_granularity(void) +{ + SYSTEM_INFO system_info; + + GetSystemInfo(&system_info); + return system_info.dwAllocationGranularity; +} + void *qemu_anon_ram_alloc(size_t size, uint64_t *align, bool shared) { void *ptr; - /* FIXME: this is not exactly optimal solution since VirtualAlloc - has 64Kb granularity, but at least it guarantees us that the - memory is page aligned. */ ptr = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE); trace_qemu_anon_ram_alloc(size, ptr); + + if (ptr && align) { + *align = MAX(get_allocation_granularity(), getpagesize()); + } return ptr; } From patchwork Tue Aug 21 17:02:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960660 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=redhat.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="PZN0KTLY"; 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 41vymb3lk9z9s47 for ; Wed, 22 Aug 2018 03:47:11 +1000 (AEST) Received: from localhost ([::1]:55174 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAkH-00049L-42 for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:47:09 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33961) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4x-0002SG-Qw for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4o-0007E1-Tx for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:24 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:38393) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4o-0006zU-Em for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:18 -0400 Received: by mail-wr1-x444.google.com with SMTP id w11-v6so13897338wrc.5 for ; Tue, 21 Aug 2018 10:04:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=1FRgPzWy4ds2yZ7Kw2gQ3EQJcDK8h2j4CzxfhIZ+GBI=; b=PZN0KTLY5VaxC9XbZwtV3ylNnanA3BzwteiXYWVWfDxHkL57RQBhJ6PcNqlCRNUXN1 yjiUVmX7Cx3aEsZrHLiwvr1xHdyCSONmQiBhdm6zqIW2iqnvIMw605i7ZL7rEuq9KP4C EuR9MPGTt2mU/DNEXUAwNEO1esw20pwb9wQLpfztZgJOevGxnEapgsHJOIJ0bkLQCgau on0/YyeFt4Y4yviDSfH0YI76DuDUhn92M3hu/n4od/HyQG8daXJDjtkL4xvRtyu47g0O 87ti87hjEpS/ZW8RoztlkOpAXy/40mIuR/qK5jxbz6bsVs7+I2c1IrgGcjlzxBso4zaz ZHDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=1FRgPzWy4ds2yZ7Kw2gQ3EQJcDK8h2j4CzxfhIZ+GBI=; b=SGO84vEK5SrzwIBcNXISIwXigon8SSL4GIC4VXInTfNj5ZQ/fAvXfS4AXTnD6rW7US VDuYxGgzR6VY7jTP6RK2855zj7tEoZAE4/sA08NIRCsHTd0zriZ/kHcn+GjsH6crYGzB rQ/L3kDYf1cKszUc768NHaKy2FbVVcrXnIQeYgSk5JdXumwuetpO6jl/KvxVYn46I1y8 u6wewHmO2F9ZC7z4oFknfCMwzDFErYgMpVhWc1jY2Evc2XR67uSrU8lcO/NIzvISbalT SVHYGnCIPYVoey8Bw1xlEezUF0EkBQ5xO9y0R0JQY4i8O7uCRUaUeLDguOFX8qBSqgpS vO7g== X-Gm-Message-State: AOUpUlFGBLgTzKygAVmaWZc9y4aC/CcybR+DXfFp3ir5calLoka/Y0oj dbQjIlrfKbDO6RxeBv1nw+o3bTmn X-Google-Smtp-Source: AA+uWPx+DQkO1KnxADbD+niIUV3/2kXDxOpcRh6fm+vTWjQSyI1BNP/Ez4OPGRqu55bh+hWZW+XC7A== X-Received: by 2002:a5d:6550:: with SMTP id z16-v6mr31400958wrv.194.1534871046971; Tue, 21 Aug 2018 10:04:06 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:06 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:32 +0200 Message-Id: <1534870966-9287-61-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::444 Subject: [Qemu-devel] [PULL 60/74] pc: drop memory region alignment check for 0 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: David Hildenbrand Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: David Hildenbrand All applicable memory regions always have an alignment > 0. All memory backends result in file_ram_alloc() or qemu_anon_ram_alloc() getting called, setting the alignment to > 0. So a PCDIMM memory region always has an alignment > 0. NVDIMM copy the alignment of the original memory memory region into the handcrafted memory region that will be used at this place. So the check for 0 can be dropped and we can reduce the special handling. Dropping this check makes factoring out of alignment handling easier as compat handling only has to look at pcmc->enforce_aligned_dimm and not care about the alignment of the memory region. Reviewed-by: David Gibson Reviewed-by: Igor Mammedov Signed-off-by: David Hildenbrand Message-Id: <20180801133444.11269-4-david@redhat.com> Signed-off-by: Paolo Bonzini --- hw/i386/pc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 96be77f..b31610c 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1713,7 +1713,7 @@ static void pc_memory_plug(HotplugHandler *hotplug_dev, uint64_t align = TARGET_PAGE_SIZE; bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM); - if (memory_region_get_alignment(mr) && pcmc->enforce_aligned_dimm) { + if (pcmc->enforce_aligned_dimm) { align = memory_region_get_alignment(mr); } From patchwork Tue Aug 21 17:02:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960634 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=redhat.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="aYUePBJh"; 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 41vyMG2lk2z9s3Z for ; Wed, 22 Aug 2018 03:28:42 +1000 (AEST) Received: from localhost ([::1]:55073 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsASO-0001eX-1Z for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:28:40 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33955) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4v-0002Pl-PX for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4o-0007Bs-4P for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:23 -0400 Received: from mail-wm0-x22e.google.com ([2a00:1450:400c:c09::22e]:53041) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4j-00070n-IN for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:17 -0400 Received: by mail-wm0-x22e.google.com with SMTP id y139-v6so855125wmc.2 for ; Tue, 21 Aug 2018 10:04:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=Mk2XD0BBAHMOhrHGadnYVtpP85Ft74x4Vi5v62K6L1s=; b=aYUePBJhFajCVFNycTDrGjkELnNcZij8kY+l+Oa6DL991jC3ExjsoowP4ajson+huw U2Hk0FpLDDlBbSJbRnJ/NBrpwEwlzGzT9HRFREktriEDY/qNR+GEoz71tExqalj9ZYi2 QWLMmYZA1MtaiCyIYTkSvSQkAfaCE7QfyME+qvXio1F4fIkJAimE7yJsaSFWYGBXlsNm +IUYK37w9ERVwW4KDCnFg8pNsdWODE5EhnqAR/4UnhthNgeH46HbGoQn7ZA3RvXeH4ek NK5ZNHgAvA/0TuaMF4ap4/ouikqTkif1NS5Xy+OFafU2XO900ktII4rsIFBN04vU+CnC ejHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=Mk2XD0BBAHMOhrHGadnYVtpP85Ft74x4Vi5v62K6L1s=; b=Vgvr1zYWXFWbHCyZOsD7keq/e8u7U5EB3cuFU1Y80v021sZhzPEPgyiwiGRbl1RqlX pg/xQa4fF/VLobDvIa9Calb9Fi36zocqVtLnCGG1JZpmg+hVUrg5t3w6vZvPjH+jkvAp 4xpvFOSB9PUXmhI21Sq2aNyCuSiXW8gNSLPXbmDG3QC97oqSk3Ma98pURqAEW/KdWY+y rKk1Gvs9y62sYDuhD18Wq/MdF17YLecmLOTh8k72vQRZMIrNBIFelFpTTHCXnDcLOmK0 ykwXOYcIwYe/t3blH06piOGu1qMlwllf3sboyq+WOkRb4n2u5DrC/oe+1t9v1AEfJax7 cuFg== X-Gm-Message-State: APzg51CSqW8XWFA2WDdBcOuNWcPJkitrYw1Hjh/c5dd+/ejNhOJkfPSW Gm7BKntsFp7lq7zbu9WMQbkhXvcS X-Google-Smtp-Source: ANB0VdZGF0b4IO1FWV6jiN8HAdCx11AUBBS2gq+cADY7e/sThWfmUsC/GD7JbHCoq5p9qipWuh+7xQ== X-Received: by 2002:a1c:c289:: with SMTP id s131-v6mr145576wmf.65.1534871048128; Tue, 21 Aug 2018 10:04:08 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:07 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:33 +0200 Message-Id: <1534870966-9287-62-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::22e Subject: [Qemu-devel] [PULL 61/74] pc-dimm: assign and verify the "addr" property during pre_plug 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: David Hildenbrand Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: David Hildenbrand We can assign and verify the address before realizing and trying to plug. reading/writing the address property should never fail for DIMMs, so let's reduce error handling a bit by using &error_abort. Getting access to the memory region now might however fail. So forward errors from get_memory_region() properly. As all memory devices should use the alignment of the underlying memory region for guest physical address asignment, do detection of the alignment in pc_dimm_pre_plug(), but allow pc.c to overwrite the alignment for compatibility handling. Reviewed-by: Eric Auger Reviewed-by: Igor Mammedov Acked-by: David Gibson Signed-off-by: David Hildenbrand Message-Id: <20180801133444.11269-5-david@redhat.com> Signed-off-by: Paolo Bonzini --- hw/i386/pc.c | 16 +++++----------- hw/mem/pc-dimm.c | 50 +++++++++++++++++++++++++----------------------- hw/ppc/spapr.c | 7 +++---- include/hw/mem/pc-dimm.h | 6 +++--- 4 files changed, 37 insertions(+), 42 deletions(-) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index b31610c..0314845 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1679,7 +1679,9 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { const PCMachineState *pcms = PC_MACHINE(hotplug_dev); + const PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms); const bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM); + const uint64_t legacy_align = TARGET_PAGE_SIZE; /* * When -no-acpi is used with Q35 machine type, no ACPI is built, @@ -1697,7 +1699,8 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, return; } - pc_dimm_pre_plug(dev, MACHINE(hotplug_dev), errp); + pc_dimm_pre_plug(dev, MACHINE(hotplug_dev), + pcmc->enforce_aligned_dimm ? NULL : &legacy_align, errp); } static void pc_memory_plug(HotplugHandler *hotplug_dev, @@ -1706,18 +1709,9 @@ static void pc_memory_plug(HotplugHandler *hotplug_dev, HotplugHandlerClass *hhc; Error *local_err = NULL; PCMachineState *pcms = PC_MACHINE(hotplug_dev); - PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms); - PCDIMMDevice *dimm = PC_DIMM(dev); - PCDIMMDeviceClass *ddc = PC_DIMM_GET_CLASS(dimm); - MemoryRegion *mr = ddc->get_memory_region(dimm, &error_abort); - uint64_t align = TARGET_PAGE_SIZE; bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM); - if (pcmc->enforce_aligned_dimm) { - align = memory_region_get_alignment(mr); - } - - pc_dimm_plug(dev, MACHINE(pcms), align, &local_err); + pc_dimm_plug(dev, MACHINE(pcms), &local_err); if (local_err) { goto out; } diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c index e56c4da..fb6bcae 100644 --- a/hw/mem/pc-dimm.c +++ b/hw/mem/pc-dimm.c @@ -29,9 +29,14 @@ static int pc_dimm_get_free_slot(const int *hint, int max_slots, Error **errp); -void pc_dimm_pre_plug(DeviceState *dev, MachineState *machine, Error **errp) +void pc_dimm_pre_plug(DeviceState *dev, MachineState *machine, + const uint64_t *legacy_align, Error **errp) { + PCDIMMDevice *dimm = PC_DIMM(dev); + PCDIMMDeviceClass *ddc = PC_DIMM_GET_CLASS(dimm); Error *local_err = NULL; + MemoryRegion *mr; + uint64_t addr, align; int slot; slot = object_property_get_int(OBJECT(dev), PC_DIMM_SLOT_PROP, @@ -43,44 +48,41 @@ void pc_dimm_pre_plug(DeviceState *dev, MachineState *machine, Error **errp) } object_property_set_int(OBJECT(dev), slot, PC_DIMM_SLOT_PROP, &error_abort); trace_mhp_pc_dimm_assigned_slot(slot); + + mr = ddc->get_memory_region(dimm, &local_err); + if (local_err) { + goto out; + } + + align = legacy_align ? *legacy_align : memory_region_get_alignment(mr); + addr = object_property_get_uint(OBJECT(dev), PC_DIMM_ADDR_PROP, + &error_abort); + addr = memory_device_get_free_addr(machine, !addr ? NULL : &addr, align, + memory_region_size(mr), &local_err); + if (local_err) { + goto out; + } + trace_mhp_pc_dimm_assigned_address(addr); + object_property_set_uint(OBJECT(dev), addr, PC_DIMM_ADDR_PROP, + &error_abort); out: error_propagate(errp, local_err); } -void pc_dimm_plug(DeviceState *dev, MachineState *machine, uint64_t align, - Error **errp) +void pc_dimm_plug(DeviceState *dev, MachineState *machine, Error **errp) { PCDIMMDevice *dimm = PC_DIMM(dev); PCDIMMDeviceClass *ddc = PC_DIMM_GET_CLASS(dimm); MemoryRegion *vmstate_mr = ddc->get_vmstate_memory_region(dimm, &error_abort); MemoryRegion *mr = ddc->get_memory_region(dimm, &error_abort); - Error *local_err = NULL; uint64_t addr; - addr = object_property_get_uint(OBJECT(dimm), - PC_DIMM_ADDR_PROP, &local_err); - if (local_err) { - goto out; - } - - addr = memory_device_get_free_addr(machine, !addr ? NULL : &addr, align, - memory_region_size(mr), &local_err); - if (local_err) { - goto out; - } - - object_property_set_uint(OBJECT(dev), addr, PC_DIMM_ADDR_PROP, &local_err); - if (local_err) { - goto out; - } - trace_mhp_pc_dimm_assigned_address(addr); + addr = object_property_get_uint(OBJECT(dev), PC_DIMM_ADDR_PROP, + &error_abort); memory_device_plug_region(machine, mr, addr); vmstate_register_ram(vmstate_mr, dev); - -out: - error_propagate(errp, local_err); } void pc_dimm_unplug(DeviceState *dev, MachineState *machine) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 96468dc..a70704a 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -3164,13 +3164,12 @@ static void spapr_memory_plug(HotplugHandler *hotplug_dev, DeviceState *dev, PCDIMMDevice *dimm = PC_DIMM(dev); PCDIMMDeviceClass *ddc = PC_DIMM_GET_CLASS(dimm); MemoryRegion *mr = ddc->get_memory_region(dimm, &error_abort); - uint64_t align, size, addr; + uint64_t size, addr; uint32_t node; - align = memory_region_get_alignment(mr); size = memory_region_size(mr); - pc_dimm_plug(dev, MACHINE(ms), align, &local_err); + pc_dimm_plug(dev, MACHINE(ms), &local_err); if (local_err) { goto out; } @@ -3237,7 +3236,7 @@ static void spapr_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, return; } - pc_dimm_pre_plug(dev, MACHINE(hotplug_dev), errp); + pc_dimm_pre_plug(dev, MACHINE(hotplug_dev), NULL, errp); } struct sPAPRDIMMState { diff --git a/include/hw/mem/pc-dimm.h b/include/hw/mem/pc-dimm.h index 7b12041..b382eb4 100644 --- a/include/hw/mem/pc-dimm.h +++ b/include/hw/mem/pc-dimm.h @@ -79,8 +79,8 @@ typedef struct PCDIMMDeviceClass { Error **errp); } PCDIMMDeviceClass; -void pc_dimm_pre_plug(DeviceState *dev, MachineState *machine, Error **errp); -void pc_dimm_plug(DeviceState *dev, MachineState *machine, uint64_t align, - Error **errp); +void pc_dimm_pre_plug(DeviceState *dev, MachineState *machine, + const uint64_t *legacy_align, Error **errp); +void pc_dimm_plug(DeviceState *dev, MachineState *machine, Error **errp); void pc_dimm_unplug(DeviceState *dev, MachineState *machine); #endif From patchwork Tue Aug 21 17:02:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960680 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=redhat.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="fJXiWL2v"; 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 41vz7m3yj5z9s4Z for ; Wed, 22 Aug 2018 04:03:48 +1000 (AEST) Received: from localhost ([::1]:55266 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsB0M-0004Pp-5n for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 14:03:46 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34075) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA57-0002aD-0o for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4p-0007Ea-66 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:33 -0400 Received: from mail-wm0-x22f.google.com ([2a00:1450:400c:c09::22f]:35743) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4o-00071s-R9 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:19 -0400 Received: by mail-wm0-x22f.google.com with SMTP id o18-v6so3533365wmc.0 for ; Tue, 21 Aug 2018 10:04:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=Fxt2Bv77vlZwD2j8q4OUZx5Q3dcBbFO2qTPQ+/Jhk80=; b=fJXiWL2vdmM0icFEFgbz98aAXIaXqyR4fONO9u/vceGzPHC2FhMP88CBAJuyCcuE3R RLm4I/A4h9VHOc97U3lTkDCG+ZbMaxBYDl67+0jwfJv5ibG/3ODmD/p5AsvFqrx6/ZWh XSfqCkxsrI5HWXnZ0Q2X1K9ZhdmkOaWswUt8YmbdJiAausZXhikElGsTlTDym6ALHG0S usF+G+i+mmQ10b+/dRKWa1h7NAJ5EFs1cOMoectFlrcr9nCcBTPtXLPA5MgOH7YyCeNE 7Jk+pmfSTRAiN7dVGsGFv/j0PuqNXY+IyTfOG/so9kbkaPW8c4/QqfF+fbDPo1uEHBE9 4Ixw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=Fxt2Bv77vlZwD2j8q4OUZx5Q3dcBbFO2qTPQ+/Jhk80=; b=ZifNKBVylKwWWhImDTLQJJcRvdYB8wNHghE5rJyKtxVv7A2oQWxjXxIo42tJTCqZYL EtRXsfxeZpODv+IAAArynLP6qc8pZoH1iv0p77FdEYT0GdbLelMB5YtV9s0Iuo39oBvr DkhHeXolZcA5QD1MZTASyIWTonkgVxLciNlecaNRqJht38MwV+TttcJgQqwrJwF822kj WpKsWO0cqDIMSirBa9x8B7VzAyS8Nk+N5MabTWzdYyO5AXNt0dQzSm5Wh1p1V2V96Ph3 v0BVz11wkN4pJrtIJViS4MRJp76f4zOAM9sa3LzbY9MHww6lmqrZF0aYM8gMnHOfztRG TILw== X-Gm-Message-State: APzg51BiLdi31KLbKqhmY0JerAgsZ4qvQHHNMn8EJhPl9X4vnY6RyFx9 mCjfgkHdmyReCTCB3kso8NsYBHwo X-Google-Smtp-Source: ANB0VdYaW2//aoBmUAvexGbHwZ/YrzigqWAYNT6jMIRLYhZAG2doC34EYfK5aJtU94WvEU56XvvuwA== X-Received: by 2002:a1c:e595:: with SMTP id c143-v6mr133477wmh.85.1534871049088; Tue, 21 Aug 2018 10:04:09 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:08 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:34 +0200 Message-Id: <1534870966-9287-63-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::22f Subject: [Qemu-devel] [PULL 62/74] i2c: pm_smbus: Clean up some style issues 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: Corey Minyard , "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Corey Minyard Fix some spacing issues, remove extraneous comments, add some defines instead of hard-coding numbers. Signed-off-by: Corey Minyard Cc: Michael S. Tsirkin Cc: Paolo Bonzini Message-Id: <1534796770-10295-2-git-send-email-minyard@acm.org> Signed-off-by: Paolo Bonzini --- hw/i2c/pm_smbus.c | 58 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 20 deletions(-) diff --git a/hw/i2c/pm_smbus.c b/hw/i2c/pm_smbus.c index 0d26e0f..83c2377 100644 --- a/hw/i2c/pm_smbus.c +++ b/hw/i2c/pm_smbus.c @@ -22,8 +22,6 @@ #include "hw/i2c/pm_smbus.h" #include "hw/i2c/smbus.h" -/* no save/load? */ - #define SMBHSTSTS 0x00 #define SMBHSTCNT 0x02 #define SMBHSTCMD 0x03 @@ -32,19 +30,34 @@ #define SMBHSTDAT1 0x06 #define SMBBLKDAT 0x07 -#define STS_HOST_BUSY (1) -#define STS_INTR (1<<1) -#define STS_DEV_ERR (1<<2) -#define STS_BUS_ERR (1<<3) -#define STS_FAILED (1<<4) -#define STS_SMBALERT (1<<5) -#define STS_INUSE_STS (1<<6) -#define STS_BYTE_DONE (1<<7) +#define STS_HOST_BUSY (1 << 0) +#define STS_INTR (1 << 1) +#define STS_DEV_ERR (1 << 2) +#define STS_BUS_ERR (1 << 3) +#define STS_FAILED (1 << 4) +#define STS_SMBALERT (1 << 5) +#define STS_INUSE_STS (1 << 6) +#define STS_BYTE_DONE (1 << 7) /* Signs of successfully transaction end : * ByteDoneStatus = 1 (STS_BYTE_DONE) and INTR = 1 (STS_INTR ) */ -//#define DEBUG +#define CTL_INTREN (1 << 0) +#define CTL_KILL (1 << 1) +#define CTL_LAST_BYTE (1 << 5) +#define CTL_START (1 << 6) +#define CTL_PEC_EN (1 << 7) +#define CTL_RETURN_MASK 0x1f + +#define PROT_QUICK 0 +#define PROT_BYTE 1 +#define PROT_BYTE_DATA 2 +#define PROT_WORD_DATA 3 +#define PROT_PROC_CALL 4 +#define PROT_BLOCK_DATA 5 +#define PROT_I2C_BLOCK_DATA 6 + +/*#define DEBUG*/ #ifdef DEBUG # define SMBUS_DPRINTF(format, ...) printf(format, ## __VA_ARGS__) @@ -70,11 +83,12 @@ static void smb_transaction(PMSMBus *s) if ((s->smb_stat & STS_DEV_ERR) != 0) { goto error; } + switch(prot) { - case 0x0: + case PROT_QUICK: ret = smbus_quick_command(bus, addr, read); goto done; - case 0x1: + case PROT_BYTE: if (read) { ret = smbus_receive_byte(bus, addr); goto data8; @@ -82,7 +96,7 @@ static void smb_transaction(PMSMBus *s) ret = smbus_send_byte(bus, addr, cmd); goto done; } - case 0x2: + case PROT_BYTE_DATA: if (read) { ret = smbus_read_byte(bus, addr, cmd); goto data8; @@ -91,16 +105,17 @@ static void smb_transaction(PMSMBus *s) goto done; } break; - case 0x3: + case PROT_WORD_DATA: if (read) { ret = smbus_read_word(bus, addr, cmd); goto data16; } else { - ret = smbus_write_word(bus, addr, cmd, (s->smb_data1 << 8) | s->smb_data0); + ret = smbus_write_word(bus, addr, cmd, + (s->smb_data1 << 8) | s->smb_data0); goto done; } break; - case 0x5: + case PROT_I2C_BLOCK_DATA: if (read) { ret = smbus_read_block(bus, addr, cmd, s->smb_data); goto data8; @@ -158,8 +173,9 @@ static void smb_ioport_writeb(void *opaque, hwaddr addr, uint64_t val, break; case SMBHSTCNT: s->smb_ctl = val; - if (val & 0x40) + if (s->smb_ctl & CTL_START) { smb_transaction_start(s); + } break; case SMBHSTCMD: s->smb_cmd = val; @@ -198,7 +214,7 @@ static uint64_t smb_ioport_readb(void *opaque, hwaddr addr, unsigned width) break; case SMBHSTCNT: s->smb_index = 0; - val = s->smb_ctl & 0x1f; + val = s->smb_ctl & CTL_RETURN_MASK; break; case SMBHSTCMD: val = s->smb_cmd; @@ -221,7 +237,9 @@ static uint64_t smb_ioport_readb(void *opaque, hwaddr addr, unsigned width) val = 0; break; } - SMBUS_DPRINTF("SMB readb port=0x%04" HWADDR_PRIx " val=0x%02x\n", addr, val); + SMBUS_DPRINTF("SMB readb port=0x%04" HWADDR_PRIx " val=0x%02x\n", + addr, val); + return val; } From patchwork Tue Aug 21 17:02:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960673 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=redhat.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="B65llAQV"; 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 41vz0n0Gjsz9s4Z for ; Wed, 22 Aug 2018 03:57:45 +1000 (AEST) Received: from localhost ([::1]:55225 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAuU-0006Ze-LI for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:57:42 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34072) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA57-0002aA-04 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4o-0007Dd-NT for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:31 -0400 Received: from mail-wm0-x232.google.com ([2a00:1450:400c:c09::232]:53648) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4o-00072z-0s for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:18 -0400 Received: by mail-wm0-x232.google.com with SMTP id s9-v6so3626775wmh.3 for ; Tue, 21 Aug 2018 10:04:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=T9Tg1DqLpdiuJyn7x0X6skkgxb66ALKSzVdNbjeRKMM=; b=B65llAQV3zHrFEnhwT2UQJlkunezvNnGMHgL1Gy3/I74vvl7s1nL+oK8I+VKjGfXQD bkv74lEe/ggMivSO6rKy8uHVLrWe+bgf3eS4nx+IUL+3zSuVZezwalmkQ1FaQJsQgYiB aRcSV3nRR6NJJihK+kgurRIkJrprUuyq4oXnTOgp4jVNG3iYVmBNz1+HJHdhbWgjjZfy Ch1mTr/d/EJIz2yQsO4zNJzovIMPDlXTpY2zsZwfzZfzsyisbwkWKYO+NP9BHetq4AxY oZLDJi+3/iGJUwF21F76yDhdOZVwDafvZZ8xEMqBpXMFQXCHMQCl30O+mQfxpeLMIiQl O35Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=T9Tg1DqLpdiuJyn7x0X6skkgxb66ALKSzVdNbjeRKMM=; b=NVixMfMz3bujFSiQYxjgyhi3IUxok4BDABfgZ9wXJJphVuMNHJx+M0d5Tn0+0NLRaF bT0ydkAJhNkno0mweYCZ2/4t5p7kV23ZuabnBF0HTi3NNL35D11zznmFH4EgV+7oBUw9 xeXX5cQUtg+f0Vw0FEYZ/OW/UGeRg0hMGFKv9LnF/eOa0AG6IkjOwJavZtweu30egDC4 9uB3/8+9UyQp4CHGXoeAlz7ey0RfHhk9bMYRIIJRWI+lPOmgDgfGP3u/hKgk0xdpZMCd Vn3oUm5atbt6GNhKIaiNrzvIrFF+yUBDLFZzi9AHkRNBxNCyOzmDxEA2/TsPH8HMHqmQ G6mw== X-Gm-Message-State: APzg51DkkKV0270p8Iz/Lj+BL0gjWiWNbpEsr2DQ9c2AGjKb+JmkfFjW TYgQLpkXRiHWncUMPkwxdBCZ1+F9 X-Google-Smtp-Source: ANB0Vdb2TkEsUYe2xwNX54o7ZO7pG4D78hiAHPMejdgwZ1EsRS3exqEMBptDBC9n5c7tMH7arf5L6g== X-Received: by 2002:a1c:f913:: with SMTP id x19-v6mr136501wmh.63.1534871050018; Tue, 21 Aug 2018 10:04:10 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:09 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:35 +0200 Message-Id: <1534870966-9287-64-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::232 Subject: [Qemu-devel] [PULL 63/74] i2c: pm_smbus: Fix the semantics of block I2C transfers 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: Corey Minyard , "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Corey Minyard The I2C block transfer commands was not implemented correctly, it read a length byte and such like it was an smbus transfer. So fix the smbus_read_block() and smbus_write_block() functions so they can properly handle I2C transfers, and normal SMBus transfers (for upcoming changes). Pass in a transfer size and a bool to know whether to use the size byte (like SMBus) or use the length given (like I2C). Signed-off-by: Corey Minyard Cc: Michael S. Tsirkin Cc: Paolo Bonzini Message-Id: <1534796770-10295-3-git-send-email-minyard@acm.org> Signed-off-by: Paolo Bonzini --- hw/i2c/pm_smbus.c | 10 ++++++++-- hw/i2c/smbus.c | 37 ++++++++++++++++++++++++------------- include/hw/i2c/smbus.h | 17 +++++++++++++++-- 3 files changed, 47 insertions(+), 17 deletions(-) diff --git a/hw/i2c/pm_smbus.c b/hw/i2c/pm_smbus.c index 83c2377..f1fe889 100644 --- a/hw/i2c/pm_smbus.c +++ b/hw/i2c/pm_smbus.c @@ -117,10 +117,16 @@ static void smb_transaction(PMSMBus *s) break; case PROT_I2C_BLOCK_DATA: if (read) { - ret = smbus_read_block(bus, addr, cmd, s->smb_data); + int xfersize = s->smb_data0; + if (xfersize > sizeof(s->smb_data)) { + xfersize = sizeof(s->smb_data); + } + ret = smbus_read_block(bus, addr, s->smb_data1, s->smb_data, + xfersize, false, true); goto data8; } else { - ret = smbus_write_block(bus, addr, cmd, s->smb_data, s->smb_data0); + ret = smbus_write_block(bus, addr, cmd, s->smb_data, s->smb_data0, + false); goto done; } break; diff --git a/hw/i2c/smbus.c b/hw/i2c/smbus.c index 587ce1a..6ff77c5 100644 --- a/hw/i2c/smbus.c +++ b/hw/i2c/smbus.c @@ -293,33 +293,42 @@ int smbus_write_word(I2CBus *bus, uint8_t addr, uint8_t command, uint16_t data) return 0; } -int smbus_read_block(I2CBus *bus, uint8_t addr, uint8_t command, uint8_t *data) +int smbus_read_block(I2CBus *bus, uint8_t addr, uint8_t command, uint8_t *data, + int len, bool recv_len, bool send_cmd) { - int len; + int rlen; int i; - if (i2c_start_transfer(bus, addr, 0)) { - return -1; + if (send_cmd) { + if (i2c_start_transfer(bus, addr, 0)) { + return -1; + } + i2c_send(bus, command); } - i2c_send(bus, command); if (i2c_start_transfer(bus, addr, 1)) { - i2c_end_transfer(bus); + if (send_cmd) { + i2c_end_transfer(bus); + } return -1; } - len = i2c_recv(bus); - if (len > 32) { - len = 0; + if (recv_len) { + rlen = i2c_recv(bus); + } else { + rlen = len; } - for (i = 0; i < len; i++) { + if (rlen > len) { + rlen = 0; + } + for (i = 0; i < rlen; i++) { data[i] = i2c_recv(bus); } i2c_nack(bus); i2c_end_transfer(bus); - return len; + return rlen; } int smbus_write_block(I2CBus *bus, uint8_t addr, uint8_t command, uint8_t *data, - int len) + int len, bool send_len) { int i; @@ -330,7 +339,9 @@ int smbus_write_block(I2CBus *bus, uint8_t addr, uint8_t command, uint8_t *data, return -1; } i2c_send(bus, command); - i2c_send(bus, len); + if (send_len) { + i2c_send(bus, len); + } for (i = 0; i < len; i++) { i2c_send(bus, data[i]); } diff --git a/include/hw/i2c/smbus.h b/include/hw/i2c/smbus.h index 4fdba02..d8b1b9e 100644 --- a/include/hw/i2c/smbus.h +++ b/include/hw/i2c/smbus.h @@ -72,9 +72,22 @@ int smbus_read_byte(I2CBus *bus, uint8_t addr, uint8_t command); int smbus_write_byte(I2CBus *bus, uint8_t addr, uint8_t command, uint8_t data); int smbus_read_word(I2CBus *bus, uint8_t addr, uint8_t command); int smbus_write_word(I2CBus *bus, uint8_t addr, uint8_t command, uint16_t data); -int smbus_read_block(I2CBus *bus, uint8_t addr, uint8_t command, uint8_t *data); + +/* + * Do a block transfer from an I2C device. If recv_len is set, then the + * first received byte is a length field and is used to know how much data + * to receive. Otherwise receive "len" bytes. If send_cmd is set, send + * the command byte first before receiving the data. + */ +int smbus_read_block(I2CBus *bus, uint8_t addr, uint8_t command, uint8_t *data, + int len, bool recv_len, bool send_cmd); + +/* + * Do a block transfer to an I2C device. If send_len is set, send the + * "len" value before the data. + */ int smbus_write_block(I2CBus *bus, uint8_t addr, uint8_t command, uint8_t *data, - int len); + int len, bool send_len); void smbus_eeprom_init_one(I2CBus *smbus, uint8_t address, uint8_t *eeprom_buf); void smbus_eeprom_init(I2CBus *smbus, int nb_eeprom, From patchwork Tue Aug 21 17:02:36 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960646 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=redhat.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="C7eqro/7"; 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 41vyX23JXmz9s3x for ; Wed, 22 Aug 2018 03:36:17 +1000 (AEST) Received: from localhost ([::1]:55113 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAZj-0000BV-F7 for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:36:15 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34069) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA57-0002a8-03 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4o-0007C0-4D for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:31 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]:37168) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4m-000743-QZ for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:17 -0400 Received: by mail-wr1-x429.google.com with SMTP id u12-v6so16463124wrr.4 for ; Tue, 21 Aug 2018 10:04:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=aCddtj7wtbHQ/2Fiq8Bm9lwizmGrolG52+XZv7pR4Xs=; b=C7eqro/7XaBEQ/tTrtUj8a++vomUduRSGs2+iqxutmYRO2KwrGe9Kc+NwYaQRo51fs vYWBDXiXdx4OHNKmdpaNY4ZgLDOW6lz9E4JuVT2HYiKLs77MpCb2IZP4ziu+1x4hmiIx 6F0Q010PtFQ977C1lIaiCKIaBgYNCgAtLKs3paUfwiZT9xjFfolb9IsBqhvmwX8N10CZ hOQjXUw+CaRb5RZC0KbrnPPirjY/HnUY4XkqEyn6gp3xHycPLHTo9DYNz5wbmTgLp44m NcQYRSIgWQYkR676/D1Xl+ysz4hThYKu+ZPavcXd63H2WCtHGybxTMuBsdSb52lPbxGA WDMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=aCddtj7wtbHQ/2Fiq8Bm9lwizmGrolG52+XZv7pR4Xs=; b=gFTHFnXhzMx7taCN9zVc8F/fidaLdoCH9m7HLTW8z9TBv8vCFA9RPeBjUsdVpY8eZ9 J5PIE59vuVh1TxmWMVS6tN6b/3tNMe00Jd9NK8iglRJ84LKzsjNI8rD/7sfPzm4bGWjj OhWvPKEowmIA1+m4ZPqzt6+AivvoTSzqsGRUa4IyhYRq/TzWzxNzTw9oULDk+Be/zDhH UL+uzTMMr05mPy/o/7wG5kjX+Mb7I6BkJNm6SkmBQAqw9Ncv8ebU8R70OvnypHd37gmQ 2QRakdOv9ZsbOki/AftmPdiGIJ7HhFz7C8S8uYO2gD14pgtzVJwFwVO7UWYRO/dAUb1y +dlQ== X-Gm-Message-State: APzg51A7XG0WtuiBjF74i5c1JDbYL12rI6v7bQkkr9JHRxwPYFaJ6cFg BCeKslVOW2wmYJY466nFUO0h9grx X-Google-Smtp-Source: ANB0VdZVw0gpRtyJ7RwWnjbHkL3+gzvUg8IQwykg/7ORYPbNCVtuaGELZ3HXilUsSttBNfadoRr3aQ== X-Received: by 2002:adf:ed04:: with SMTP id a4-v6mr4833350wro.262.1534871051095; Tue, 21 Aug 2018 10:04:11 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:10 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:36 +0200 Message-Id: <1534870966-9287-65-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::429 Subject: [Qemu-devel] [PULL 64/74] i2c: pm_smbus: Make the I2C block read command read-only 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: Corey Minyard , "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Corey Minyard It did have write capability, but the manual says the behavior with write enabled is undefined. So just set an error in this case. Signed-off-by: Corey Minyard Cc: Michael S. Tsirkin Cc: Paolo Bonzini Message-Id: <1534796770-10295-4-git-send-email-minyard@acm.org> Signed-off-by: Paolo Bonzini --- hw/i2c/pm_smbus.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/hw/i2c/pm_smbus.c b/hw/i2c/pm_smbus.c index f1fe889..dc61f2c 100644 --- a/hw/i2c/pm_smbus.c +++ b/hw/i2c/pm_smbus.c @@ -55,7 +55,7 @@ #define PROT_WORD_DATA 3 #define PROT_PROC_CALL 4 #define PROT_BLOCK_DATA 5 -#define PROT_I2C_BLOCK_DATA 6 +#define PROT_I2C_BLOCK_READ 6 /*#define DEBUG*/ @@ -115,7 +115,7 @@ static void smb_transaction(PMSMBus *s) goto done; } break; - case PROT_I2C_BLOCK_DATA: + case PROT_I2C_BLOCK_READ: if (read) { int xfersize = s->smb_data0; if (xfersize > sizeof(s->smb_data)) { @@ -125,9 +125,8 @@ static void smb_transaction(PMSMBus *s) xfersize, false, true); goto data8; } else { - ret = smbus_write_block(bus, addr, cmd, s->smb_data, s->smb_data0, - false); - goto done; + /* The manual says the behavior is undefined, just set DEV_ERR. */ + goto error; } break; default: From patchwork Tue Aug 21 17:02:37 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960655 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=redhat.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="vURUM9eW"; 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 41vyfy5GVhz9s47 for ; Wed, 22 Aug 2018 03:42:18 +1000 (AEST) Received: from localhost ([::1]:55145 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAfY-00055R-8b for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:42:16 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34068) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA56-0002a7-W1 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4o-0007EF-Vo for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:31 -0400 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]:43887) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4o-00075O-Au for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:18 -0400 Received: by mail-wr1-x42d.google.com with SMTP id k5-v6so4944984wre.10 for ; Tue, 21 Aug 2018 10:04:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=7zIh+LetOfjQtHl1scIepUduQ9PXIGTxzJ9ILSnVyFU=; b=vURUM9eW9gfCRK23fuRaSKV4EuqAIWIpMMc2CH4i21W+OdXGtYbMg9yT71wj4vbHHC N7dd0lSq8gTOn/bB5Jvnl8cR0PTQ86Okm7KJVrstICAC+EbnxuFcR7acQ/hLv/wgzQiu v0I+5VsZf35mMItSwiYFYEm4Z7cSachWKQASTeWkaSe/STPrc7RR7BZPg6mPsCnBqAqe SK7wuEkOENAPwk2uaC9y0PeubRQ5+v9u8JBQ5nW9Yma5aZlVF0hiYdFNwNBFlfV5QJv8 Iy0yxG2zf5fyXzSny1RZXZ1kMiG3pGeNZM4WkMA1hdtGkYCH4aloFtnzG8xNL25HDsv/ wuJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=7zIh+LetOfjQtHl1scIepUduQ9PXIGTxzJ9ILSnVyFU=; b=m6edHiC9Rliy+psoQ+7JME2VUAbqWQHmMz69EhRALXbn8Yb4jx6sqzyF5HlGZVXKvb Rv/6ukZ4KbUmu+UCJRGwo1dihO5OGSr+mTlkt6INCNsuZcMw6Uy0SRxQuhCKtPin/gtr mYlnMdTe7/RMYPTJy0NYF4S4eSSrwg2FycbPpbEF2pJmf5R9iZx+dUxDgyunOTshbKec H5csMz0zUtcF+MsIQMMweq71jsFsiU2sbpk9BE/lIp75R4FOE6KAxBIs0zheKXwMYlAx P5hflyE5/bmKPSTQEBEsKIY/au1GKOPk/aNnYIvF6vt+vqp+8WJZYVe6qJI8cHo/L43l a0+g== X-Gm-Message-State: APzg51CMFvCeoFgmOWdW0d9zhH4CRJ8UhPCOtewGreIrnhrvaWRZWI9G Q1oB3M+3sQmzzUICHJrzGWtudK0V X-Google-Smtp-Source: ANB0VdZDUqARkAecB8uUGm7KBmOsVWJrMFZ9eewsM/Qe5CWUQ/eeKCKKth8hEkp1Bqy85M/dcU/w4g== X-Received: by 2002:adf:bd10:: with SMTP id j16-v6mr11182364wrh.267.1534871052167; Tue, 21 Aug 2018 10:04:12 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:11 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:37 +0200 Message-Id: <1534870966-9287-66-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42d Subject: [Qemu-devel] [PULL 65/74] i2c: pm_smbus: Add block transfer capability 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: Corey Minyard , "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Corey Minyard There was no block transfer code in pm_smbus.c, and it is needed for some devices. So add it. This adds both byte-by-byte block transfers and buffered block transfers. Signed-off-by: Corey Minyard Cc: Michael S. Tsirkin Cc: Paolo Bonzini Message-Id: <1534796770-10295-5-git-send-email-minyard@acm.org> Signed-off-by: Paolo Bonzini --- hw/i2c/pm_smbus.c | 151 ++++++++++++++++++++++++++++++++++++++++++---- hw/i2c/smbus_ich9.c | 8 ++- include/hw/i2c/pm_smbus.h | 20 +++++- 3 files changed, 164 insertions(+), 15 deletions(-) diff --git a/hw/i2c/pm_smbus.c b/hw/i2c/pm_smbus.c index dc61f2c..32132be 100644 --- a/hw/i2c/pm_smbus.c +++ b/hw/i2c/pm_smbus.c @@ -29,6 +29,7 @@ #define SMBHSTDAT0 0x05 #define SMBHSTDAT1 0x06 #define SMBBLKDAT 0x07 +#define SMBAUXCTL 0x0d #define STS_HOST_BUSY (1 << 0) #define STS_INTR (1 << 1) @@ -57,6 +58,10 @@ #define PROT_BLOCK_DATA 5 #define PROT_I2C_BLOCK_READ 6 +#define AUX_PEC (1 << 0) +#define AUX_BLK (1 << 1) +#define AUX_MASK 0x3 + /*#define DEBUG*/ #ifdef DEBUG @@ -129,6 +134,51 @@ static void smb_transaction(PMSMBus *s) goto error; } break; + case PROT_BLOCK_DATA: + if (read) { + ret = smbus_read_block(bus, addr, cmd, s->smb_data, + sizeof(s->smb_data), !s->i2c_enable, + !s->i2c_enable); + if (ret < 0) { + goto error; + } + s->smb_index = 0; + s->op_done = false; + if (s->smb_auxctl & AUX_BLK) { + s->smb_stat |= STS_INTR; + } else { + s->smb_blkdata = s->smb_data[0]; + s->smb_stat |= STS_HOST_BUSY | STS_BYTE_DONE; + } + s->smb_data0 = ret; + goto out; + } else { + if (s->smb_auxctl & AUX_BLK) { + if (s->smb_index != s->smb_data0) { + s->smb_index = 0; + goto error; + } + /* Data is already all written to the queue, just do + the operation. */ + s->smb_index = 0; + ret = smbus_write_block(bus, addr, cmd, s->smb_data, + s->smb_data0, !s->i2c_enable); + if (ret < 0) { + goto error; + } + s->op_done = true; + s->smb_stat |= STS_INTR; + s->smb_stat &= ~STS_HOST_BUSY; + } else { + s->op_done = false; + s->smb_stat |= STS_HOST_BUSY | STS_BYTE_DONE; + s->smb_data[0] = s->smb_blkdata; + s->smb_index = 0; + ret = 0; + } + goto out; + } + break; default: goto error; } @@ -148,13 +198,13 @@ done: if (ret < 0) { goto error; } - s->smb_stat |= STS_BYTE_DONE | STS_INTR; + s->smb_stat |= STS_INTR; +out: return; error: s->smb_stat |= STS_DEV_ERR; return; - } static void smb_transaction_start(PMSMBus *s) @@ -173,14 +223,61 @@ static void smb_ioport_writeb(void *opaque, hwaddr addr, uint64_t val, " val=0x%02" PRIx64 "\n", addr, val); switch(addr) { case SMBHSTSTS: - s->smb_stat = (~(val & 0xff)) & s->smb_stat; - s->smb_index = 0; + s->smb_stat &= ~(val & ~STS_HOST_BUSY); + if (!s->op_done && !(s->smb_auxctl & AUX_BLK)) { + uint8_t read = s->smb_addr & 0x01; + + s->smb_index++; + if (!read && s->smb_index == s->smb_data0) { + uint8_t prot = (s->smb_ctl >> 2) & 0x07; + uint8_t cmd = s->smb_cmd; + uint8_t addr = s->smb_addr >> 1; + int ret; + + if (prot == PROT_I2C_BLOCK_READ) { + s->smb_stat |= STS_DEV_ERR; + goto out; + } + + ret = smbus_write_block(s->smbus, addr, cmd, s->smb_data, + s->smb_data0, !s->i2c_enable); + if (ret < 0) { + s->smb_stat |= STS_DEV_ERR; + goto out; + } + s->op_done = true; + s->smb_stat |= STS_INTR; + s->smb_stat &= ~STS_HOST_BUSY; + } else if (!read) { + s->smb_data[s->smb_index] = s->smb_blkdata; + s->smb_stat |= STS_BYTE_DONE; + } else if (s->smb_ctl & CTL_LAST_BYTE) { + s->op_done = true; + s->smb_blkdata = s->smb_data[s->smb_index]; + s->smb_index = 0; + s->smb_stat |= STS_INTR; + s->smb_stat &= ~STS_HOST_BUSY; + } else { + s->smb_blkdata = s->smb_data[s->smb_index]; + s->smb_stat |= STS_BYTE_DONE; + } + } break; case SMBHSTCNT: - s->smb_ctl = val; - if (s->smb_ctl & CTL_START) { + s->smb_ctl = val & ~CTL_START; /* CTL_START always reads 0 */ + if (val & CTL_START) { + if (!s->op_done) { + s->smb_index = 0; + s->op_done = true; + } smb_transaction_start(s); } + if (s->smb_ctl & CTL_KILL) { + s->op_done = true; + s->smb_index = 0; + s->smb_stat |= STS_FAILED; + s->smb_stat &= ~STS_HOST_BUSY; + } break; case SMBHSTCMD: s->smb_cmd = val; @@ -195,13 +292,24 @@ static void smb_ioport_writeb(void *opaque, hwaddr addr, uint64_t val, s->smb_data1 = val; break; case SMBBLKDAT: - s->smb_data[s->smb_index++] = val; - if (s->smb_index > 31) + if (s->smb_index >= PM_SMBUS_MAX_MSG_SIZE) { s->smb_index = 0; + } + if (s->smb_auxctl & AUX_BLK) { + s->smb_data[s->smb_index++] = val; + } else { + s->smb_blkdata = val; + } + break; + case SMBAUXCTL: + s->smb_auxctl = val & AUX_MASK; break; default: break; } + + out: + return; } static uint64_t smb_ioport_readb(void *opaque, hwaddr addr, unsigned width) @@ -218,7 +326,6 @@ static uint64_t smb_ioport_readb(void *opaque, hwaddr addr, unsigned width) } break; case SMBHSTCNT: - s->smb_index = 0; val = s->smb_ctl & CTL_RETURN_MASK; break; case SMBHSTCMD: @@ -234,9 +341,22 @@ static uint64_t smb_ioport_readb(void *opaque, hwaddr addr, unsigned width) val = s->smb_data1; break; case SMBBLKDAT: - val = s->smb_data[s->smb_index++]; - if (s->smb_index > 31) + if (s->smb_index >= PM_SMBUS_MAX_MSG_SIZE) { s->smb_index = 0; + } + if (s->smb_auxctl & AUX_BLK) { + val = s->smb_data[s->smb_index++]; + if (!s->op_done && s->smb_index == s->smb_data0) { + s->op_done = true; + s->smb_index = 0; + s->smb_stat &= ~STS_HOST_BUSY; + } + } else { + val = s->smb_blkdata; + } + break; + case SMBAUXCTL: + val = s->smb_auxctl; break; default: val = 0; @@ -248,6 +368,13 @@ static uint64_t smb_ioport_readb(void *opaque, hwaddr addr, unsigned width) return val; } +static void pm_smbus_reset(PMSMBus *s) +{ + s->op_done = true; + s->smb_index = 0; + s->smb_stat = 0; +} + static const MemoryRegionOps pm_smbus_ops = { .read = smb_ioport_readb, .write = smb_ioport_writeb, @@ -258,6 +385,8 @@ static const MemoryRegionOps pm_smbus_ops = { void pm_smbus_init(DeviceState *parent, PMSMBus *smb) { + smb->op_done = true; + smb->reset = pm_smbus_reset; smb->smbus = i2c_init_bus(parent, "i2c"); memory_region_init_io(&smb->io, OBJECT(parent), &pm_smbus_ops, smb, "pm-smbus", 64); diff --git a/hw/i2c/smbus_ich9.c b/hw/i2c/smbus_ich9.c index 007cb67..a66a114 100644 --- a/hw/i2c/smbus_ich9.c +++ b/hw/i2c/smbus_ich9.c @@ -61,12 +61,16 @@ static void ich9_smbus_write_config(PCIDevice *d, uint32_t address, pci_default_write_config(d, address, val, len); if (range_covers_byte(address, len, ICH9_SMB_HOSTC)) { uint8_t hostc = s->dev.config[ICH9_SMB_HOSTC]; - if ((hostc & ICH9_SMB_HOSTC_HST_EN) && - !(hostc & ICH9_SMB_HOSTC_I2C_EN)) { + if (hostc & ICH9_SMB_HOSTC_HST_EN) { memory_region_set_enabled(&s->smb.io, true); } else { memory_region_set_enabled(&s->smb.io, false); } + s->smb.i2c_enable = (hostc & ICH9_SMB_HOSTC_I2C_EN) != 0; + if (hostc & ICH9_SMB_HOSTC_SSRESET) { + s->smb.reset(&s->smb); + s->dev.config[ICH9_SMB_HOSTC] &= ~ICH9_SMB_HOSTC_SSRESET; + } } } diff --git a/include/hw/i2c/pm_smbus.h b/include/hw/i2c/pm_smbus.h index 2a837af..99d5489 100644 --- a/include/hw/i2c/pm_smbus.h +++ b/include/hw/i2c/pm_smbus.h @@ -1,6 +1,8 @@ #ifndef PM_SMBUS_H #define PM_SMBUS_H +#define PM_SMBUS_MAX_MSG_SIZE 32 + typedef struct PMSMBus { I2CBus *smbus; MemoryRegion io; @@ -11,8 +13,22 @@ typedef struct PMSMBus { uint8_t smb_addr; uint8_t smb_data0; uint8_t smb_data1; - uint8_t smb_data[32]; - uint8_t smb_index; + uint8_t smb_data[PM_SMBUS_MAX_MSG_SIZE]; + uint8_t smb_blkdata; + uint8_t smb_auxctl; + uint32_t smb_index; + + /* Set by pm_smbus.c */ + void (*reset)(struct PMSMBus *s); + + /* Set by the user. */ + bool i2c_enable; + + /* Internally used by pm_smbus. */ + + /* Set on block transfers after the last byte has been read, so the + INTR bit can be set at the right time. */ + bool op_done; } PMSMBus; void pm_smbus_init(DeviceState *parent, PMSMBus *smb); From patchwork Tue Aug 21 17:02:38 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960650 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=redhat.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="VRuDUG8Z"; 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 41vybc40Wzz9s3x for ; Wed, 22 Aug 2018 03:39:24 +1000 (AEST) Received: from localhost ([::1]:55126 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAck-0002Ws-7x for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:39:22 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34070) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA56-0002a9-W5 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4o-0007D3-HZ for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:31 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]:45852) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4n-00076D-NG for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:18 -0400 Received: by mail-wr1-x42f.google.com with SMTP id 20-v6so10508612wrb.12 for ; Tue, 21 Aug 2018 10:04:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=VUitJI+l9JViJbfK5zml7cSDVsgzItJZaGFga0cII3A=; b=VRuDUG8Za6wCWYL6UIxHTWqmNn30LbSBcdnc+jRKweLNRS/547LN0Ja5DX7XParPzR y/8crlQaiHRG+7dCxjEGxL1RhAu9bow3LLsfWExQULNdr2Stw7GXp0XxTlwuoNnNsVw8 f8hcY4sQR6Ozyvix583i4w6AqUV9sTNj+ghU93UMMjVccFihTTtH34mVs73O5MiUBbqW GafQU0zjbLQqxN6plxY9s/jTb8AAGW8qO0e0GYb4zc6LsZXBOZjFAhD0bzQGm1qlWwmw M2O0wbqhg2KCI42hRkYMaNOVXJDZgfkvpt2blKiS1+SmFitZGUFlbSqX6SD+R7GmnFeL 565w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=VUitJI+l9JViJbfK5zml7cSDVsgzItJZaGFga0cII3A=; b=I5c1XekBgprEBx7f9PsUNYa/jJI7fI+4+JO6wHLpmoo3DmAbEwrz1/lfMIHL5humrC 5iX1D5AF8x+PzD7fXOlBNh7ZvEI5p+JGG3jNTDZO5m54fKpqlmNmu3tr7R72gfOu3FMf Fl9foEvEjRSqNlY9L1XByVxntiiexgUR37JMScmiODF+jP6jnrTc98ZWZCQEghJl4GO5 BTHAqJeKdw42cIuuTEIXELIwErgOgu/mXGCmS98F8rvQ0pibBZi73CUl7fSQF1wadIgD FmdLJhVD2pftlK3j6eq2QYJoZVwDVBoFrbGe7r8qRlrNgfp1+vGkPaWBFj4v0QOE/9Py Yuxw== X-Gm-Message-State: APzg51DCg8n6u92lVe49+0p4l/Rk4WRuMfSQMwRPmFbbXm4Hjc6pXaV5 dFr756/Pj0neYlpPJ581VVU5maCX X-Google-Smtp-Source: ANB0VdZfnRj21ECJlL94EyqKRzGnnDaj5Q7gdBncq3Tw1PH7uJQ+E72eOqVNRG/H0a+688dQLVfPcA== X-Received: by 2002:a5d:4605:: with SMTP id t5-v6mr998866wrq.200.1534871053160; Tue, 21 Aug 2018 10:04:13 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:12 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:38 +0200 Message-Id: <1534870966-9287-67-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42f Subject: [Qemu-devel] [PULL 66/74] i2c: pm_smbus: Add interrupt handling 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: Corey Minyard , "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Corey Minyard Add the necessary code so that interrupts actually work from the pm_smbus device. Signed-off-by: Corey Minyard Cc: Michael S. Tsirkin Cc: Paolo Bonzini Message-Id: <1534796770-10295-7-git-send-email-minyard@acm.org> Signed-off-by: Paolo Bonzini --- hw/i2c/pm_smbus.c | 14 +++++++++++++- hw/i2c/smbus_ich9.c | 16 ++++++++++++++++ include/hw/i2c/pm_smbus.h | 2 ++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/hw/i2c/pm_smbus.c b/hw/i2c/pm_smbus.c index 32132be..6322f07 100644 --- a/hw/i2c/pm_smbus.c +++ b/hw/i2c/pm_smbus.c @@ -214,6 +214,12 @@ static void smb_transaction_start(PMSMBus *s) s->smb_stat |= STS_HOST_BUSY; } +static bool +smb_irq_value(PMSMBus *s) +{ + return ((s->smb_stat & ~STS_HOST_BUSY) != 0) && (s->smb_ctl & CTL_INTREN); +} + static void smb_ioport_writeb(void *opaque, hwaddr addr, uint64_t val, unsigned width) { @@ -309,7 +315,9 @@ static void smb_ioport_writeb(void *opaque, hwaddr addr, uint64_t val, } out: - return; + if (s->set_irq) { + s->set_irq(s, smb_irq_value(s)); + } } static uint64_t smb_ioport_readb(void *opaque, hwaddr addr, unsigned width) @@ -365,6 +373,10 @@ static uint64_t smb_ioport_readb(void *opaque, hwaddr addr, unsigned width) SMBUS_DPRINTF("SMB readb port=0x%04" HWADDR_PRIx " val=0x%02x\n", addr, val); + if (s->set_irq) { + s->set_irq(s, smb_irq_value(s)); + } + return val; } diff --git a/hw/i2c/smbus_ich9.c b/hw/i2c/smbus_ich9.c index a66a114..522a703 100644 --- a/hw/i2c/smbus_ich9.c +++ b/hw/i2c/smbus_ich9.c @@ -40,6 +40,8 @@ typedef struct ICH9SMBState { PCIDevice dev; + bool irq_enabled; + PMSMBus smb; } ICH9SMBState; @@ -109,11 +111,25 @@ static void ich9_smb_class_init(ObjectClass *klass, void *data) dc->user_creatable = false; } +static void ich9_smb_set_irq(PMSMBus *pmsmb, bool enabled) +{ + ICH9SMBState *s = pmsmb->opaque; + + if (enabled == s->irq_enabled) { + return; + } + + s->irq_enabled = enabled; + pci_set_irq(&s->dev, enabled); +} + I2CBus *ich9_smb_init(PCIBus *bus, int devfn, uint32_t smb_io_base) { PCIDevice *d = pci_create_simple_multifunction(bus, devfn, true, TYPE_ICH9_SMB_DEVICE); ICH9SMBState *s = ICH9_SMB_DEVICE(d); + s->smb.set_irq = ich9_smb_set_irq; + s->smb.opaque = s; return s->smb.smbus; } diff --git a/include/hw/i2c/pm_smbus.h b/include/hw/i2c/pm_smbus.h index 99d5489..1afa3cf 100644 --- a/include/hw/i2c/pm_smbus.h +++ b/include/hw/i2c/pm_smbus.h @@ -23,6 +23,8 @@ typedef struct PMSMBus { /* Set by the user. */ bool i2c_enable; + void (*set_irq)(struct PMSMBus *s, bool enabled); + void *opaque; /* Internally used by pm_smbus. */ From patchwork Tue Aug 21 17:02:39 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960670 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=redhat.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="HjMIk1RE"; 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 41vyxd2LMSz9s5b for ; Wed, 22 Aug 2018 03:55:01 +1000 (AEST) Received: from localhost ([::1]:55211 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsArq-000320-WA for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:54:59 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34040) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA53-0002Vl-4b for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4o-0007Ci-Ci for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:27 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:38391) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4n-00077J-HN for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:18 -0400 Received: by mail-wr1-x441.google.com with SMTP id w11-v6so13897592wrc.5 for ; Tue, 21 Aug 2018 10:04:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ADFFXom5iNIFTwymwNdZAOMCVy/8n3vmNA6fvWLZ6qY=; b=HjMIk1RE2ErqgFDRbdWJs4Krm+H9dFmQBl++9PIvajX6VNd5DuAb9K24ulHgXjWPw6 TG0OUwvUpmg9WCbnBaS6zskbCfYITGR3V4PdtJSIH5997V2kmouHuCK511zWH9WSi7dy ndPPASmFSPpaau2USrNUVF5IxUkGc2HxWp4L1551KBoLbIbW+gelsaEJNhFyph6D9Dga LTUMu6m/sbNmq2+LMM8sRL103UN1TJ9W/6bqztugfxwBlwRbsgAHweMRESI+lZONo55X CAUMCllw+8Bhr9yoSQ/4qwwwP3NnE2ALuLk44SV8Lu07EIwwb/K+p6+/XecjoipD5KTo RpWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=ADFFXom5iNIFTwymwNdZAOMCVy/8n3vmNA6fvWLZ6qY=; b=io3Kp3h8sJ4VXf4xV1KSRwHnr0gic6TQ+pr5rfCPuRyB9litowz9F+jr9eySwZJTJB wMaeCSs5tKMtodOUUdxqyorC+q7aSMaQOnCyl9pRXYl0u/F6RuKdbVpeFNj0eS9qrGaY udjbca45ijK1tIT/9vy6ixY5ehZqKRdR8F3Si90p9qXbH0vMye52gE3dbnVr6kBvPIZd PAAxoVxj8k6OY+4wtirkvetAW+SdLxlNQDCM+v1+kUIcgs99ZzqncgLouQ2yNSnP4Nvu IqZbwoVsxHrGtPDu3BZmENJRjtjNnao0yzFwqkrhmHofAJqNI8zqMIlOxi4j4O9Q8FHB ZQlQ== X-Gm-Message-State: AOUpUlHOirOu1EBz/zPeDrAuVw8bXSo4hRsJRzn6y8jOwuir98qNx8iS tRPwUnOAm3OtzjwwbLTn8YANxI/1 X-Google-Smtp-Source: AA+uWPx5NDBsm4kCJWva/YOSDqHjeYv/97FZid2fWcCOKEZf+VaYyxChPi75NDeXOZb55Xib/4OWkg== X-Received: by 2002:adf:8161:: with SMTP id 88-v6mr32055453wrm.22.1534871054300; Tue, 21 Aug 2018 10:04:14 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:13 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:39 +0200 Message-Id: <1534870966-9287-68-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::441 Subject: [Qemu-devel] [PULL 67/74] i2c: pm_smbus: Don't delay host status register busy bit when interrupts are enabled 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: Corey Minyard , =?utf-8?q?Herv=C3=A9_Poussineau?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Corey Minyard Change 880b1ffe6ec2f0ae "smbus: do not immediately complete commands" changed pm_smbus to delay setting the host busy bit until the status register was read, to work around a bug in AMIBIOS. Unfortunately, when interrupts are enabled, the status register will never get read and the processing will never happen. Modify the code to only delay setting the host busy bit if interrupts are not enabled. Signed-off-by: Corey Minyard Cc: Hervé Poussineau Cc: Philippe Mathieu-Daudé Message-Id: <1534796770-10295-8-git-send-email-minyard@acm.org> Signed-off-by: Paolo Bonzini --- hw/i2c/pm_smbus.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/hw/i2c/pm_smbus.c b/hw/i2c/pm_smbus.c index 6322f07..91ee444 100644 --- a/hw/i2c/pm_smbus.c +++ b/hw/i2c/pm_smbus.c @@ -80,9 +80,6 @@ static void smb_transaction(PMSMBus *s) I2CBus *bus = s->smbus; int ret; - assert(s->smb_stat & STS_HOST_BUSY); - s->smb_stat &= ~STS_HOST_BUSY; - SMBUS_DPRINTF("SMBus trans addr=0x%02x prot=0x%02x\n", addr, prot); /* Transaction isn't exec if STS_DEV_ERR bit set */ if ((s->smb_stat & STS_DEV_ERR) != 0) { @@ -209,9 +206,18 @@ error: static void smb_transaction_start(PMSMBus *s) { - /* Do not execute immediately the command ; it will be - * executed when guest will read SMB_STAT register */ - s->smb_stat |= STS_HOST_BUSY; + if (s->smb_ctl & CTL_INTREN) { + smb_transaction(s); + } else { + /* Do not execute immediately the command; it will be + * executed when guest will read SMB_STAT register. This + * is to work around a bug in AMIBIOS (that is working + * around another bug in some specific hardware) where + * it waits for STS_HOST_BUSY to be set before waiting + * checking for status. If STS_HOST_BUSY doesn't get + * set, it gets stuck. */ + s->smb_stat |= STS_HOST_BUSY; + } } static bool @@ -330,6 +336,7 @@ static uint64_t smb_ioport_readb(void *opaque, hwaddr addr, unsigned width) val = s->smb_stat; if (s->smb_stat & STS_HOST_BUSY) { /* execute command now */ + s->smb_stat &= ~STS_HOST_BUSY; smb_transaction(s); } break; From patchwork Tue Aug 21 17:02:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960678 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=redhat.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="YSCWwKq+"; 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 41vz4l3dScz9s4Z for ; Wed, 22 Aug 2018 04:01:11 +1000 (AEST) Received: from localhost ([::1]:55251 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAxo-0002M9-VD for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 14:01:09 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34067) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA56-0002a6-Vh for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4o-0007Cn-D6 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:31 -0400 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]:38828) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4n-00078P-Jl for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:18 -0400 Received: by mail-wm0-x243.google.com with SMTP id t25-v6so3485128wmi.3 for ; Tue, 21 Aug 2018 10:04:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=z8jk9MS8UwK1p+60JIxWOmieKXqcCKUHVXdjtGI1AVA=; b=YSCWwKq+fUP9MlvJB9jk2iiOl+neXld8lFJb4MZ+skQSpA7ecciCqwPC/9uki+NKNn tDRWB6Wn9ER4zECUQhXeyntUp8Cr3RSQQbryzNuF0f1jufbfUB/8CsH06cbB1Ud7GAlM N2JETgHjze6W3AidAAOK3J9YXPXjLgmINLyPDxrsi/b6DeFnOdzjZGM5D6W/EwOsJPTc v9TBFtl+Ospmdb8IbofyquanZQRRqEl1AxOuTvkpPwz/xBeHZwLkR2A6P+9GKCPj6EKx 9Y2kxh4fXldzrnrN04g4GYuh6u9tCBUa95ak3wXDsLqr6gKymBeMHR3nTWbSMT7zO07R /X6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=z8jk9MS8UwK1p+60JIxWOmieKXqcCKUHVXdjtGI1AVA=; b=pXONFstYlqGyExnJ0q9dqBEShaM+pWV6Gd8f+x0Ge29jPYXx1Q1b56jjygVZ6327MV 20qHRHSb9aK++JBCs0O/+ruirEPeCgadBnDA4N4ZTCyOE12aZTZ+eqI9PHkY8uHoRDv1 NbreKFJvl2VCrfjveGZWX09GLMECtO6Fr8E1AmdxOvbdYly2HWkV/n0WydioxQTmIiuT q9EV0UbNPzbRfr6gigeQ5kA2wM0VC5rkznXKzSNPqvFkbUa/RlvAxgVdMw+oaUbHs5HA tg1C5OAaz8GFt7REQ3h2o2d2o+S86t80+0do/w6bdn58YJobQ5ZsIQb7vuHW93mddtuf N5CQ== X-Gm-Message-State: APzg51A6zrzFUvhDPY7flA9S8CRw3fE9AjqvTDoHk0iN0vD/z9w3wMnD TZTNFqSnXbFBKA4kiVi2upEeSaDp X-Google-Smtp-Source: ANB0Vdafk7b08cADeb/LTtEbFmCRVuF37OSVVg5eTsVVkQLTM6b9JWlbS/4w2bV6ZoQkgBASgJlpOQ== X-Received: by 2002:a1c:cc1a:: with SMTP id h26-v6mr159637wmb.112.1534871055235; Tue, 21 Aug 2018 10:04:15 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:14 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:40 +0200 Message-Id: <1534870966-9287-69-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::243 Subject: [Qemu-devel] [PULL 68/74] i2c: pm_smbus: Add the ability to force block transfer enable 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: Corey Minyard , "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Corey Minyard The PIIX4 hardware has block transfer buffer always enabled in the hardware, but the i801 does not. Add a parameter to pm_smbus_init to force on the block transfer so the PIIX4 handler can enable this by default, as it was disabled by default before. Signed-off-by: Corey Minyard Cc: Michael S. Tsirkin Cc: Paolo Bonzini Message-Id: <1534796770-10295-9-git-send-email-minyard@acm.org> Signed-off-by: Paolo Bonzini --- hw/acpi/piix4.c | 2 +- hw/i2c/pm_smbus.c | 5 ++++- hw/i2c/smbus_ich9.c | 2 +- hw/isa/vt82c686.c | 2 +- include/hw/i2c/pm_smbus.h | 2 +- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c index 6404af5..e330f24 100644 --- a/hw/acpi/piix4.c +++ b/hw/acpi/piix4.c @@ -512,7 +512,7 @@ static void piix4_pm_realize(PCIDevice *dev, Error **errp) pci_conf[0x90] = s->smb_io_base | 1; pci_conf[0x91] = s->smb_io_base >> 8; pci_conf[0xd2] = 0x09; - pm_smbus_init(DEVICE(dev), &s->smb); + pm_smbus_init(DEVICE(dev), &s->smb, true); memory_region_set_enabled(&s->smb.io, pci_conf[0xd2] & 1); memory_region_add_subregion(pci_address_space_io(dev), s->smb_io_base, &s->smb.io); diff --git a/hw/i2c/pm_smbus.c b/hw/i2c/pm_smbus.c index 91ee444..685a237 100644 --- a/hw/i2c/pm_smbus.c +++ b/hw/i2c/pm_smbus.c @@ -402,11 +402,14 @@ static const MemoryRegionOps pm_smbus_ops = { .endianness = DEVICE_LITTLE_ENDIAN, }; -void pm_smbus_init(DeviceState *parent, PMSMBus *smb) +void pm_smbus_init(DeviceState *parent, PMSMBus *smb, bool force_aux_blk) { smb->op_done = true; smb->reset = pm_smbus_reset; smb->smbus = i2c_init_bus(parent, "i2c"); + if (force_aux_blk) { + smb->smb_auxctl |= AUX_BLK; + } memory_region_init_io(&smb->io, OBJECT(parent), &pm_smbus_ops, smb, "pm-smbus", 64); } diff --git a/hw/i2c/smbus_ich9.c b/hw/i2c/smbus_ich9.c index 522a703..2a8b49e 100644 --- a/hw/i2c/smbus_ich9.c +++ b/hw/i2c/smbus_ich9.c @@ -86,7 +86,7 @@ static void ich9_smbus_realize(PCIDevice *d, Error **errp) pci_set_byte(d->config + ICH9_SMB_HOSTC, 0); /* TODO bar0, bar1: 64bit BAR support*/ - pm_smbus_init(&d->qdev, &s->smb); + pm_smbus_init(&d->qdev, &s->smb, false); pci_register_bar(d, ICH9_SMB_SMB_BASE_BAR, PCI_BASE_ADDRESS_SPACE_IO, &s->smb.io); } diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c index cff1946..7302f6d 100644 --- a/hw/isa/vt82c686.c +++ b/hw/isa/vt82c686.c @@ -370,7 +370,7 @@ static void vt82c686b_pm_realize(PCIDevice *dev, Error **errp) pci_conf[0x90] = s->smb_io_base | 1; pci_conf[0x91] = s->smb_io_base >> 8; pci_conf[0xd2] = 0x90; - pm_smbus_init(&s->dev.qdev, &s->smb); + pm_smbus_init(&s->dev.qdev, &s->smb, false); memory_region_add_subregion(get_system_io(), s->smb_io_base, &s->smb.io); apm_init(dev, &s->apm, NULL, s); diff --git a/include/hw/i2c/pm_smbus.h b/include/hw/i2c/pm_smbus.h index 1afa3cf..060d3c6 100644 --- a/include/hw/i2c/pm_smbus.h +++ b/include/hw/i2c/pm_smbus.h @@ -33,6 +33,6 @@ typedef struct PMSMBus { bool op_done; } PMSMBus; -void pm_smbus_init(DeviceState *parent, PMSMBus *smb); +void pm_smbus_init(DeviceState *parent, PMSMBus *smb, bool force_aux_blk); #endif /* PM_SMBUS_H */ From patchwork Tue Aug 21 17:02:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960658 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=redhat.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="UZylzkC6"; 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 41vylG30dRz9s47 for ; Wed, 22 Aug 2018 03:46:02 +1000 (AEST) Received: from localhost ([::1]:55170 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAjA-00013f-1v for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:46:00 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33887) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4t-0002NB-Hq for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4o-0007DE-HE for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:23 -0400 Received: from mail-wm0-x241.google.com ([2a00:1450:400c:c09::241]:51606) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4n-00079f-TR for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:18 -0400 Received: by mail-wm0-x241.google.com with SMTP id y2-v6so3645858wma.1 for ; Tue, 21 Aug 2018 10:04:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:subject:date:message-id:in-reply-to:references; bh=knloXOBvut/QlpDSY7dj7Tr8F0g8kfcnxGp1wRnxfCA=; b=UZylzkC6KHvkkBJN4TlRXf1m3WoFJSgv+ReODghzpPXjQs5XhBkio5hsudvWU9PAlN DTOB5xqvEO4EBMzXmtIhs7Z1dxILGRL2T12vKG/yBunURn8V8XTv3BYMb+dFT95ryPOn IZp4GIpiCQ4fqberOvyExs/9II2ILicgZs913YyFVwgeFhBdvW5ulT6swkzTRKK2LrIx z2SD8yHRGXBqW7d8gclpRr9mjK6LC6vMKUU229oLqKhDZrvpk2bR5W9sDuI9xkGSP25N zXsTP5G2yyU5HCU+pIE6Z4hDhn5guBHEzMEZJcX7kIeRNUgsGSVfkVC1Wgrzqc4LIbwz +3Jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references; bh=knloXOBvut/QlpDSY7dj7Tr8F0g8kfcnxGp1wRnxfCA=; b=buG/RX7WZpCkwAZFoZ+qIiZlpJ4Wd3L0mgj4lXGiQZ9ZtDL3fVCahmZojvY+oDNLB1 bSyJT52C6Bt3+QPz/3OLIIIhI78Z6QHu47VdX6+OVlhtbKz/4VkWm4PMO3Urlw1MlgYo nTBCF1sTLeXBNNUSJIGn1n/WuhYdEiUjtYQl6dxYgOkJoHVhAFhD8Qj/tCX0Iyjom75Y mhajuKs7YY0PJdlhmEBa3qkogz67vZtF3j1VyhvjodyBecMrBsyBHfpgvzYwWCjkQWqS GdcSE6Qk2zLOLj1TYN2kBQG2WZ5LM6qIKXqj2tjBcxLgrpPFHlQOOE0SwSvjC2AOsWT0 0UsA== X-Gm-Message-State: APzg51BFTu+xx4G/BkcJ9dwLkoiQPY8ReLfcgVKBNEKNCWd6OrcRuGvr gAqUObO9BcXXBgjgf63iIDzcZaD+ X-Google-Smtp-Source: ANB0Vda0sGRO8Jhmy66lLFt1WPiLsh5767M+IAiAEsrbGgYQw01Jy27xXn5qhdw7xYWenXY7Yhca0A== X-Received: by 2002:a1c:99c2:: with SMTP id b185-v6mr134118wme.15.1534871056616; Tue, 21 Aug 2018 10:04:16 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.15 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:15 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:41 +0200 Message-Id: <1534870966-9287-70-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::241 Subject: [Qemu-devel] [PULL 69/74] target/i386: update MPX flags when CPL changes 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: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Paolo Bonzini --- target/i386/cpu.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 9cad581..b572a8e 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1515,6 +1515,8 @@ int cpu_x86_support_mca_broadcast(CPUX86State *env); int cpu_get_pic_interrupt(CPUX86State *s); /* MSDOS compatibility mode FPU exception support */ void cpu_set_ferr(CPUX86State *s); +/* mpx_helper.c */ +void cpu_sync_bndcs_hflags(CPUX86State *env); /* this function must always be used to load data in the segment cache: it synchronizes the hflags with the segment cache values */ @@ -1557,6 +1559,8 @@ static inline void cpu_x86_load_seg_cache(CPUX86State *env, #error HF_CPL_MASK is hardcoded #endif env->hflags = (env->hflags & ~HF_CPL_MASK) | cpl; + /* Possibly switch between BNDCFGS and BNDCFGU */ + cpu_sync_bndcs_hflags(env); } new_hflags = (env->segs[R_SS].flags & DESC_B_MASK) >> (DESC_B_SHIFT - HF_SS32_SHIFT); @@ -1889,9 +1893,6 @@ void apic_handle_tpr_access_report(DeviceState *d, target_ulong ip, */ void x86_cpu_change_kvm_default(const char *prop, const char *value); -/* mpx_helper.c */ -void cpu_sync_bndcs_hflags(CPUX86State *env); - /* Return name of 32-bit register, from a R_* constant */ const char *get_register_name_32(unsigned int reg); From patchwork Tue Aug 21 17:02:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960666 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=redhat.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="PQ0BftrZ"; 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 41vyrF4bDlz9s47 for ; Wed, 22 Aug 2018 03:50:21 +1000 (AEST) Received: from localhost ([::1]:55185 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAnL-0006PY-7g for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:50:19 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33964) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4y-0002SW-4T for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4p-0007F4-Cf for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:25 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:34306) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4p-0007D1-4P for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:19 -0400 Received: by mail-wr1-x443.google.com with SMTP id g33-v6so6432702wrd.1 for ; Tue, 21 Aug 2018 10:04:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:subject:date:message-id:in-reply-to:references; bh=pflPQ7X9ykcETPZ7hawFpx72JOkid8riW23Q2mcbPfg=; b=PQ0BftrZrDuDMQb4sFEQJFHyAaPsSOtYbElO1gd+EhXzPEju/NABqeyuA+D4WKuTtx oHOOy6LFvfabgNJlclh96AJkSlSsH4Axy1iAH1z0XgtikLf/KUjyD1lFiivK+k4OuYmC +HqvHyD/vUBaUZy/X1YeGa5/ids9Qux7KSKKkae2mlVNLGS6tMOyCvBRxPZwxS8qRxM+ U79xkHSY3igGlqdVkR/FTthsMoJoCfWjJj9OfI0PPYCsY0WRGRAic5JvVCg1ptYgIF3H LMdpU43Ono5rxUYABBB/UuAGWC5tgzzloqeFbdiPryWZTgh7b74Id7v+jZrLFQMN7bKW ZhNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references; bh=pflPQ7X9ykcETPZ7hawFpx72JOkid8riW23Q2mcbPfg=; b=WVOryAePKjlCDif5Y6hhBUsB53v0tgdzLpkJpBb45XX9hYoWEYJ3P2aJh2msMvySGx c6xgt/ozjlU4KjjJhAdP6uO6C/VjwJSRweqMeAxe4yL4a5BwregTmwoGIZzceg2wP+6m H3JC4hf4cTGLExz/EUEDYrQDm0lrO9a2gl/REKKg+04dTqEFHNLltf1Z+YJ5LYqRu76x sCojeLwt7jKdDF4M6Izzx43LFrxnjwDZATLIp8RNCt4DylBYs1wjhwJBvppu/YIr13WZ O3+wVL5zjGA1urpOIjm+lqIHzkH8ilb8fkO8PyQIsjZeZnH6FTuxb5kBrn256TzJAsK+ RrTA== X-Gm-Message-State: AOUpUlGpnQaA3Ay06pdd4CyuNC9i9HE3YQM3xTH38NYPfagIsbsoZvlM q3jnvFPte0flN/Jq4b5aIhBs50Ig X-Google-Smtp-Source: AA+uWPwS7eEM//1ctLSxWNSnxLXlZ3/296GG7BsZz6/v+us9KAUjv5Qp7txNDO3oKYHYZ0gZO5yqyw== X-Received: by 2002:adf:9b11:: with SMTP id b17-v6mr34780008wrc.119.1534871057808; Tue, 21 Aug 2018 10:04:17 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.16 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:16 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:42 +0200 Message-Id: <1534870966-9287-71-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::443 Subject: [Qemu-devel] [PULL 70/74] KVM: cleanup unnecessary #ifdef KVM_CAP_... 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: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" The capability macros are always defined, since they come from kernel headers that are copied into the QEMU tree. Remove the unnecessary #ifdefs. Signed-off-by: Paolo Bonzini --- accel/kvm/kvm-all.c | 2 -- target/i386/kvm.c | 8 -------- 2 files changed, 10 deletions(-) diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index 38f468d..de12f78 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -1639,10 +1639,8 @@ static int kvm_init(MachineState *ms) s->irq_set_ioctl = KVM_IRQ_LINE_STATUS; } -#ifdef KVM_CAP_READONLY_MEM kvm_readonly_mem_allowed = (kvm_check_extension(s, KVM_CAP_READONLY_MEM) > 0); -#endif kvm_eventfds_allowed = (kvm_check_extension(s, KVM_CAP_IOEVENTFD) > 0); diff --git a/target/i386/kvm.c b/target/i386/kvm.c index 9313602..0b2a07d 100644 --- a/target/i386/kvm.c +++ b/target/i386/kvm.c @@ -1381,17 +1381,9 @@ int kvm_arch_init(MachineState *ms, KVMState *s) int ret; struct utsname utsname; -#ifdef KVM_CAP_XSAVE has_xsave = kvm_check_extension(s, KVM_CAP_XSAVE); -#endif - -#ifdef KVM_CAP_XCRS has_xcrs = kvm_check_extension(s, KVM_CAP_XCRS); -#endif - -#ifdef KVM_CAP_PIT_STATE2 has_pit_state2 = kvm_check_extension(s, KVM_CAP_PIT_STATE2); -#endif hv_vpindex_settable = kvm_check_extension(s, KVM_CAP_HYPERV_VP_INDEX); From patchwork Tue Aug 21 17:02:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960669 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=redhat.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="jhOftxff"; 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 41vyvZ6q7zz9ryn for ; Wed, 22 Aug 2018 03:53:14 +1000 (AEST) Received: from localhost ([::1]:55201 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAq8-0001UF-J6 for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:53:12 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33976) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4y-0002Sh-5a for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4q-0007G3-6V for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:25 -0400 Received: from mail-wm0-x233.google.com ([2a00:1450:400c:c09::233]:36958) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4p-0007F0-Ui for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:20 -0400 Received: by mail-wm0-x233.google.com with SMTP id n11-v6so3497324wmc.2 for ; Tue, 21 Aug 2018 10:04:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=t8QE7qzACmSTUNJeiuY1pDLnffGygGEId5TJe5B1cos=; b=jhOftxffHEwUIeQ1JmwjEg6RWL6Y6YTPwd/t7ObAGSjmvnSzQftw14Fav9mmHIi+FN F4D+KASbsF6GRq+yJdjIS172RZda150x4B/k+MEf/PkaKdMDpDCy3UUDH2Tcp5F6reCG JJMQVplR/e1Q9ZXepfxWWYxIOv0yPQWUPqKmt2djloNFfMFYQonwNj2Ge8ar6jTY1jaY /T11TW+qPML6ARN2g3Kp5fsbtZiJn8O0GoVgb5YQNHWR4vwRptfG/nimEjx6vrAwmsjp XnZ2T8JvjfxfPtuupyHIU+ixSeaCFUNgiukzPQxfWdO/VJy5g092RYsxDusLizpGtmC7 anRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=t8QE7qzACmSTUNJeiuY1pDLnffGygGEId5TJe5B1cos=; b=eJdqnYLl9oiSsZ74nDQ8V1r5lyuhUVBOQIwDzSyYr3krNLsZTY25/F3STWFSflVys2 leOpBbJQxhKkDcK9q1s7vzGhNtjEN0ZJovq57WiIp10K/gsvOlWmx5rPhqlUsLRs6Gfe 6BpxiJwbw93pgptmI+/Z5OnevTu8Rk5B5H9ykeh6wBZ6gK6tv0zfUlkVFP4Cbn+LnEKd /T+ybR3c3vfW0gVOHMdTqzpaDG1MmQposuHUzxRO+MrX4P+lmVYPscPQNM9eCk3NON5x ii0NwXn2r1PeM7v8yfZ5jxS9A5951TdwTiUeKPNPA6zJUNJO1L2I0cAId6YREN2/Z/wM +8HA== X-Gm-Message-State: APzg51BcAxLI/5FRiq5yO/8YO4DVxCaeFsacw5se4eI2RQwKvwYm9+/d l38xqtOpGHNYZxqyC2VJhumMjh+v X-Google-Smtp-Source: ANB0VdYzx2Ac4UCETrTU3pHv1c2j+xlj6A0yYCOrKeBLwk0nEXnGCLJWxi7o23DaVOvvIyBOpRfYCA== X-Received: by 2002:a1c:9550:: with SMTP id x77-v6mr113435wmd.135.1534871058720; Tue, 21 Aug 2018 10:04:18 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:18 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:43 +0200 Message-Id: <1534870966-9287-72-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::233 Subject: [Qemu-devel] [PULL 71/74] Revert "chardev: tcp: postpone TLS work until machine done" 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: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau This reverts commit 99f2f54174a595e3ada6e4332fcd2b37ebb0d55d. See next commit reverting 25679e5d58e258e9950685ffbd0cae4cd40d9cc2 as well for rationale. Signed-off-by: Marc-André Lureau Message-Id: <20180817135224.22971-2-marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini Signed-off-by: Marc-André Lureau --- chardev/char-socket.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/chardev/char-socket.c b/chardev/char-socket.c index efbad6e..e28d2cc 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -32,7 +32,6 @@ #include "qapi/error.h" #include "qapi/clone-visitor.h" #include "qapi/qapi-visit-sockets.h" -#include "sysemu/sysemu.h" #include "chardev/char-io.h" @@ -724,11 +723,6 @@ static void tcp_chr_tls_init(Chardev *chr) Error *err = NULL; gchar *name; - if (!machine_init_done) { - /* This will be postponed to machine_done notifier */ - return; - } - if (s->is_listen) { tioc = qio_channel_tls_new_server( s->ioc, s->tls_creds, @@ -1169,10 +1163,6 @@ static int tcp_chr_machine_done_hook(Chardev *chr) tcp_chr_connect_async(chr); } - if (s->ioc && s->tls_creds) { - tcp_chr_tls_init(chr); - } - return 0; } From patchwork Tue Aug 21 17:02:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960639 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=redhat.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="uobK8YPc"; 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 41vyQb2Z0Dz9s3Z for ; Wed, 22 Aug 2018 03:31:35 +1000 (AEST) Received: from localhost ([::1]:55090 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAVA-0004IB-Sb for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:31:32 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33971) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4y-0002Sa-5J for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4r-0007I3-NN for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:25 -0400 Received: from mail-wm0-x233.google.com ([2a00:1450:400c:c09::233]:39711) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4r-0007GR-6i for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:21 -0400 Received: by mail-wm0-x233.google.com with SMTP id q8-v6so3503072wmq.4 for ; Tue, 21 Aug 2018 10:04:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lU2cRxf5K+Pv2BJrGTRLoxHU06WE1M7LmH/7RT3PKX4=; b=uobK8YPcdyVelGZe/V4BmJM2p6IMzeZO6iBOKtN6y2mlOtHTnAThNwQhFcrpsW6oYa zmVAnPLKl5rqbZ2IPblD3QXT0VHfQuWVw8WbBlGaqMC/Zlmol0ZM3zMEnxEVjgNxC/gj 7VxGoQXtyhezVzuex8DRXWhag1pUj0Azr0wVlVEopkLLKqE0f68XOJpUBFQbuYALOpjW ZV/SFpIWQG5uP+rPdJ8gTzlLUh9ZWszn8i003kbglovVocf6sxwSBXKTFvar36bye+7E KkBzBF5oM1oCKnTuaXEXmN+nKFUEYcibEOUDreUYQW5dkA8T9FTpkHK18un6bXP8HCFK qTUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=lU2cRxf5K+Pv2BJrGTRLoxHU06WE1M7LmH/7RT3PKX4=; b=dg/S4piQDoHnrRHCjO/Av+US007HztMwPApNdwykxCo/4NkrNBxjYfBS0W9BMzqdEl jnqd5XZEirUb3EZoCX+bDob4NSJs64bAvXtbZbV0XRPXoSgzvCuWINu7D51h3nmo+iPq JMCYN7QiNqn5VW5BlSXIhviMzNoHX0sHrMZBcsn0yA7mfKDN7LBHcxdesa+4o9o6F/JU NSeSWz7SP5brqoGKmgCbq4mF+hx5Ok/oaoUrOf5WNTenlgFqQRmpbSgIX7tYiRKpD8SI oNPIhXtc/Rn8+lyTL4Q9I8D8zHitCz3QtwZml4yKT4BlwyzQhs38u89eSf9KLA4Y4toX ZF5A== X-Gm-Message-State: APzg51AMb+2nXaX3TgscWNCDQRNYLST9j95y4Cb6jRHt+ayfPv/2nxyd 8XTc9SvL+cewP2L5vCPez4SQz42m X-Google-Smtp-Source: ANB0VdZsvI7TFoc0ri9YrwbO78sydrZMc3b4D8vHWE7ZPLX9tXTkaT+GkmMBzZLS/XVGGIbfJsDWtA== X-Received: by 2002:a1c:ca0f:: with SMTP id a15-v6mr149903wmg.102.1534871059712; Tue, 21 Aug 2018 10:04:19 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:19 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:44 +0200 Message-Id: <1534870966-9287-73-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::233 Subject: [Qemu-devel] [PULL 72/74] Revert "chardev: tcp: postpone async connection setup" 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: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau This reverts commit 25679e5d58e258e9950685ffbd0cae4cd40d9cc2. This commit broke "reconnect socket" chardev that are created after "machine_done": they no longer try to connect. It broke also vhost-user-test that uses chardev while there is no "machine_done" event. The goal of this patch was to move the "connect" source to the frontend context. chr->gcontext is set with qemu_chr_fe_set_handlers(). But there is no guarantee that it will be called, so we can't delay connection until then: the chardev should still attempt to connect during open(). qemu_chr_fe_set_handlers() is eventually called later and will update the context. Unless there is a good reason to not use initially the default context, I think we should revert to the previous state to fix the regressions. Signed-off-by: Marc-André Lureau Message-Id: <20180817135224.22971-3-marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini Signed-off-by: Marc-André Lureau --- chardev/char-socket.c | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/chardev/char-socket.c b/chardev/char-socket.c index e28d2cc..14f6567 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -1005,8 +1005,9 @@ static void qmp_chardev_open_socket(Chardev *chr, s->reconnect_time = reconnect; } - /* If reconnect_time is set, will do that in chr_machine_done. */ - if (!s->reconnect_time) { + if (s->reconnect_time) { + tcp_chr_connect_async(chr); + } else { if (s->is_listen) { char *name; s->listener = qio_net_listener_new(); @@ -1155,17 +1156,6 @@ char_socket_get_connected(Object *obj, Error **errp) return s->connected; } -static int tcp_chr_machine_done_hook(Chardev *chr) -{ - SocketChardev *s = SOCKET_CHARDEV(chr); - - if (s->reconnect_time) { - tcp_chr_connect_async(chr); - } - - return 0; -} - static void char_socket_class_init(ObjectClass *oc, void *data) { ChardevClass *cc = CHARDEV_CLASS(oc); @@ -1181,7 +1171,6 @@ static void char_socket_class_init(ObjectClass *oc, void *data) cc->chr_add_client = tcp_chr_add_client; cc->chr_add_watch = tcp_chr_add_watch; cc->chr_update_read_handler = tcp_chr_update_read_handler; - cc->chr_machine_done = tcp_chr_machine_done_hook; object_class_property_add(oc, "addr", "SocketAddress", char_socket_get_addr, NULL, From patchwork Tue Aug 21 17:02:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960672 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=redhat.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="pwIS9T9+"; 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 41vyyl18qcz9s4Z for ; Wed, 22 Aug 2018 03:55:59 +1000 (AEST) Received: from localhost ([::1]:55218 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAsm-0003pV-Ko for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:55:56 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33973) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4y-0002Se-5H for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4s-0007J0-I9 for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:25 -0400 Received: from mail-wm0-x22b.google.com ([2a00:1450:400c:c09::22b]:53040) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4r-0007Ha-Vk for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:22 -0400 Received: by mail-wm0-x22b.google.com with SMTP id y139-v6so855764wmc.2 for ; Tue, 21 Aug 2018 10:04:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bsDx04YYQH0slZcfRfjCXorkJ6b5b1fkG3WAjyXPfC4=; b=pwIS9T9+2xaYtqJ08Ta3N+JfwMOzTIM7k2DWj8hVwXcLAGW7AAo4JfxHIGJ+MWCmOT xaTWIzb46ceaAyGZtBsgUboYFBccXbo5CzvAUKzK4bpVOh1/Gh6LdiVQhYeZ6lhU38uR k87zU5NxIw2nUNhZ+/ZpYJN6HtFm4g4Z2GejSLpMZZzksfX18k6J+dqyC1U4IS5+sqqc oWQCioNyYsY5fdkXTk7yVo+jC2oHZozXgv7Cnyv73pwDiqkFN6RPf26M0aHNLugqx2am wxNuKxY5Gwdu3jI+hJr9W4ssDisY571PK659Et18dn5E4qHAR0djN+KPBRMQe09+b4DT 6/pQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=bsDx04YYQH0slZcfRfjCXorkJ6b5b1fkG3WAjyXPfC4=; b=HWEzoCBahPUWm4yFgJBQvBQDgvo5SbSZ/nV4lqEnC6FQfi4GnZA6qewkEjOOMn1aCU DOefldgUn6y+Ea6vkaG70THS+hR7leG1b/LlY0wuxrUIxCidPowYNfrQDiS1VCF51mZ3 WZKpk99NPFvHkjQwvT69z+326FqqwZwmi4uA8z92hclB5jEfV/OXfVwm3c5+vrLZViSh w46V9k+rMDxH1djNiajC+txNkW8Ygx/fKp/5JBdR3ZbmJp+pBzLpMLQNLlCh1THnAGlS uy0jg/CaCuAxnSMxaf8fZX2MJhLKa0oLaalvoqybvbT+8yEiJOZxPLgeagbKMUWaoKE9 gz4Q== X-Gm-Message-State: APzg51CPCW613SKkb3baOTq2O5+AnmJsHlyMjmgoJ0P/mxBWbjkC+Ls7 kIO5pl4zy1u5IyF2Uxkqdf0frsQ7 X-Google-Smtp-Source: ANB0Vdaos3daerU1Tk4Z/bu0o0r17yeQKX1Vw+aAmPbN2Q4TgYLQGQDd2iUDaBMyIl68AFCUOJfy0Q== X-Received: by 2002:a1c:6d1c:: with SMTP id i28-v6mr136732wmc.97.1534871060713; Tue, 21 Aug 2018 10:04:20 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:20 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:45 +0200 Message-Id: <1534870966-9287-74-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::22b Subject: [Qemu-devel] [PULL 73/74] char-socket: update all ioc handlers when changing context 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: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau So far, tcp_chr_update_read_handler() only updated the read handler. Let's also update the hup handler. Factorize the code while at it. (note that s->ioc != NULL when s->connected) Signed-off-by: Marc-André Lureau Message-Id: <20180817135224.22971-4-marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini Signed-off-by: Marc-André Lureau --- chardev/char-socket.c | 59 ++++++++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/chardev/char-socket.c b/chardev/char-socket.c index 14f6567..7cd0ae2 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -353,6 +353,15 @@ static GSource *tcp_chr_add_watch(Chardev *chr, GIOCondition cond) return qio_channel_create_watch(s->ioc, cond); } +static void remove_hup_source(SocketChardev *s) +{ + if (s->hup_source != NULL) { + g_source_destroy(s->hup_source); + g_source_unref(s->hup_source); + s->hup_source = NULL; + } +} + static void tcp_chr_free_connection(Chardev *chr) { SocketChardev *s = SOCKET_CHARDEV(chr); @@ -367,11 +376,7 @@ static void tcp_chr_free_connection(Chardev *chr) s->read_msgfds_num = 0; } - if (s->hup_source != NULL) { - g_source_destroy(s->hup_source); - g_source_unref(s->hup_source); - s->hup_source = NULL; - } + remove_hup_source(s); tcp_set_msgfds(chr, NULL, 0); remove_fd_in_watch(chr); @@ -540,6 +545,27 @@ static char *sockaddr_to_str(struct sockaddr_storage *ss, socklen_t ss_len, } } +static void update_ioc_handlers(SocketChardev *s) +{ + Chardev *chr = CHARDEV(s); + + if (!s->connected) { + return; + } + + remove_fd_in_watch(chr); + chr->gsource = io_add_watch_poll(chr, s->ioc, + tcp_chr_read_poll, + tcp_chr_read, chr, + chr->gcontext); + + remove_hup_source(s); + s->hup_source = qio_channel_create_watch(s->ioc, G_IO_HUP); + g_source_set_callback(s->hup_source, (GSourceFunc)tcp_chr_hup, + chr, NULL); + g_source_attach(s->hup_source, chr->gcontext); +} + static void tcp_chr_connect(void *opaque) { Chardev *chr = CHARDEV(opaque); @@ -552,16 +578,7 @@ static void tcp_chr_connect(void *opaque) s->is_listen, s->is_telnet); s->connected = 1; - chr->gsource = io_add_watch_poll(chr, s->ioc, - tcp_chr_read_poll, - tcp_chr_read, - chr, chr->gcontext); - - s->hup_source = qio_channel_create_watch(s->ioc, G_IO_HUP); - g_source_set_callback(s->hup_source, (GSourceFunc)tcp_chr_hup, - chr, NULL); - g_source_attach(s->hup_source, chr->gcontext); - + update_ioc_handlers(s); qemu_chr_be_event(chr, CHR_EVENT_OPENED); } @@ -592,17 +609,7 @@ static void tcp_chr_update_read_handler(Chardev *chr) tcp_chr_telnet_init(CHARDEV(s)); } - if (!s->connected) { - return; - } - - remove_fd_in_watch(chr); - if (s->ioc) { - chr->gsource = io_add_watch_poll(chr, s->ioc, - tcp_chr_read_poll, - tcp_chr_read, chr, - chr->gcontext); - } + update_ioc_handlers(s); } static gboolean tcp_chr_telnet_init_io(QIOChannel *ioc, From patchwork Tue Aug 21 17:02:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 960664 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=redhat.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="UHwMbCpp"; 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 41vyq60vMgz9s47 for ; Wed, 22 Aug 2018 03:49:20 +1000 (AEST) Received: from localhost ([::1]:55181 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsAmL-0005bd-PE for incoming@patchwork.ozlabs.org; Tue, 21 Aug 2018 13:49:17 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33980) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4y-0002Sj-5i for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4u-0007Kb-2Z for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:25 -0400 Received: from mail-wm0-x22f.google.com ([2a00:1450:400c:c09::22f]:51293) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4t-0007If-5q for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:23 -0400 Received: by mail-wm0-x22f.google.com with SMTP id y2-v6so3646092wma.1 for ; Tue, 21 Aug 2018 10:04:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bNnBuQs6TGjJQ+LFv3wZcL7YDwkpNUcCTKJ2MHRpFe0=; b=UHwMbCpp69rd1HWoa2pMISvxPFT0X1y3Tz+E+HVPeEyvY+KQ5nio9glkPGgZGcjouD Gu3FEjY4IArosNxGQUfGGk3xFWTMl2L+2wqbjgwArqp3xyRPXM8PwmQ4P3rdLokLOur6 3Wo1Wz/N6kypwDR84juVtlkjVbLVCdM5xslGf3ey05pZx9vLcO+6F6lWOT6WgI3cKJ5f SIPthBnt+CoBmFtyJ+QmdJSims6nX+J0z0Qe6aATGA5BdF3oAEfg0kH+GZVU3JIK/1C4 F0eBf6vA8LLa7PQj8dKskFMtoVnPwmr93wjvf5VieBDJTroMRnOF8fd1HE8DUce8Sz6Q f2Fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=bNnBuQs6TGjJQ+LFv3wZcL7YDwkpNUcCTKJ2MHRpFe0=; b=Df2t7sUJd91vSX/P6QVnM1Mvsr34VlYSgsobxX284a3ECrCA5+JczYhWEr22PokQEh ELCLcvYyXP408pJ76/EjDDomybbY9HHT6JU8wpo1E5/8dSaaTKq/NZ8dbVpIy6HjPJ2G hw3/AulFCt3eVoDSupsF3HZUorhjt7iY79pIFp7JYQKQsC6nrN4qTXr6GV6/rur93Yfc rYgSQmtFv9T6um91VL1kCPrj/iO8MffjmyhfB2BoJCf6VVShcYs0gQec7uBDvZrgBFel 2Ki1UPhjTMuEebdn2s7WzXsN8WesKp7EqNjBFSUXPjZlgWp5/N9zLhkUNdspBuyREASv /U5A== X-Gm-Message-State: APzg51CAulmuRtmU1IuuMbSRwzElJs5DH2bcEEBHRKLSVOKThoKSnO8U n83P07wY8H8GJ0iY1ZlBmnxwUPEt X-Google-Smtp-Source: ANB0Vdbba40wZhZ+ZS+6b6e944VMeCbMDslUBrD+B7qnqj+4GaRxsojFqpjhDlj5Cfj2xiQUe6x/XQ== X-Received: by 2002:a1c:c14:: with SMTP id 20-v6mr131010wmm.117.1534871061767; Tue, 21 Aug 2018 10:04:21 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.04.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:04:21 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:46 +0200 Message-Id: <1534870966-9287-75-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::22f Subject: [Qemu-devel] [PULL 74/74] test-char: add socket reconnect test 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: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau This test exhibits a regression fixed by the previous reverts. Signed-off-by: Marc-André Lureau Message-Id: <20180817135224.22971-5-marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini Signed-off-by: Marc-André Lureau --- tests/test-char.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/tests/test-char.c b/tests/test-char.c index 2a2ff32..2670ff6 100644 --- a/tests/test-char.c +++ b/tests/test-char.c @@ -307,7 +307,7 @@ static int socket_can_read_hello(void *opaque) return 10; } -static void char_socket_test_common(Chardev *chr) +static void char_socket_test_common(Chardev *chr, bool reconnect) { Chardev *chr_client; QObject *addr; @@ -327,7 +327,8 @@ static void char_socket_test_common(Chardev *chr) addr = object_property_get_qobject(OBJECT(chr), "addr", &error_abort); qdict = qobject_to(QDict, addr); port = qdict_get_str(qdict, "port"); - tmp = g_strdup_printf("tcp:127.0.0.1:%s", port); + tmp = g_strdup_printf("tcp:127.0.0.1:%s%s", port, + reconnect ? ",reconnect=1" : ""); qobject_unref(qdict); qemu_chr_fe_init(&be, chr, &error_abort); @@ -368,7 +369,15 @@ static void char_socket_basic_test(void) { Chardev *chr = qemu_chr_new("server", "tcp:127.0.0.1:0,server,nowait"); - char_socket_test_common(chr); + char_socket_test_common(chr, false); +} + + +static void char_socket_reconnect_test(void) +{ + Chardev *chr = qemu_chr_new("server", "tcp:127.0.0.1:0,server,nowait"); + + char_socket_test_common(chr, true); } @@ -400,7 +409,7 @@ static void char_socket_fdpass_test(void) qemu_opts_del(opts); - char_socket_test_common(chr); + char_socket_test_common(chr, false); } @@ -819,6 +828,7 @@ int main(int argc, char **argv) g_test_add_func("/char/file-fifo", char_file_fifo_test); #endif g_test_add_func("/char/socket/basic", char_socket_basic_test); + g_test_add_func("/char/socket/reconnect", char_socket_reconnect_test); g_test_add_func("/char/socket/fdpass", char_socket_fdpass_test); g_test_add_func("/char/udp", char_udp_test); #ifdef HAVE_CHARDEV_SERIAL