From patchwork Wed Oct 2 16:51:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171607 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9FA7613B1 for ; Wed, 2 Oct 2019 16:56:38 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7481F21920 for ; Wed, 2 Oct 2019 16:56:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HfZLrV5z" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7481F21920 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57728 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhvZ-0002A7-1r for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 12:56:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35240) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhr7-00057Y-E7 for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhr3-00034o-V2 for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:01 -0400 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]:56052) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhr3-00033d-OE for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:51:57 -0400 Received: by mail-wm1-x32a.google.com with SMTP id a6so7939040wma.5 for ; Wed, 02 Oct 2019 09:51: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; bh=UM9naFb11+jXmkpkEOdz9w/7R4gvI6i+/DkJ8BktyjI=; b=HfZLrV5zwM+DUSo3S39wKQ/3vrwt5yp9LK/ua+6mkgHGe2YxZEBw0ZA6SQAd4nbr9u RNMDr3Gi6Gt5xTAYyhWG5G5EtDBvR9ookRdCC/BOsfLruNizQH6Aip0bsD1zSVLYKf6+ 7ylN0ywQKCF8ZEVBrgi6p/vbdilz0wzngsEoHXwVcBHiX6Ls7e9v/jaWCz4UjBlfw7x6 m9l2DL3ksoaikxHu9orWknGVarwLXjrF0/2pmMuSVgGmvOsUIRKw0E0xTy0p5qC0mpmf EW8xZdEE4/AjYTXfErUHFCaAChrSt/760EtL7JCsn0C8sX9yshZ4Toakq1zblVzXajBh DAIQ== 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=UM9naFb11+jXmkpkEOdz9w/7R4gvI6i+/DkJ8BktyjI=; b=Bu5tPKKMI1+eUVxnzWGij1Gw2CTPN0JxgUzYuw2li9sUf1ZRAfg+jb5JC8txMcNb7L rOLx0+hAFaVrklwa1waY0x0PBMPRvW4LhWEXm6Qme5XgEKmXtTWAD2EiAqfreY791sMt +UEbtFLgaiRFMLdamp/2KlKfsKZeylRIXeCA/RKOKpzN0SUgYBkvzRUzfnU3Edkzb5OY +hi78QUxsqetTaSE/KMYYzhJVZz91Wt+QZTtAPmOmiZHcfqCjQ+AqSubMzVaH2LDVrDr 4v7B8txqsNbtQXmR2h5RMiuAZYnI73s30+NWsZiZehIdgqnzk0tllWckswDGMY0zNP7g ipJw== X-Gm-Message-State: APjAAAX/orMTUllqs2A2wZWiPXkSyh3ePPzgWQwvtXcyfabelgcDl143 7YWNUOXaMzrR0fdkgdqghxroTyJ1 X-Google-Smtp-Source: APXvYqx2dDb8gCUwDoTJqYvP3cxw39YMy538cyDool6YeCuba7OXfqwL0LRlPF63KirE1c8ua6mF2g== X-Received: by 2002:a05:600c:2057:: with SMTP id p23mr3557628wmg.17.1570035116301; Wed, 02 Oct 2019 09:51:56 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.51.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:51:55 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 01/30] tests/migration: Add a test for auto converge Date: Wed, 2 Oct 2019 18:51:24 +0200 Message-Id: <1570035113-56848-2-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::32a X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Yury Kotov Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" From: Yury Kotov Signed-off-by: Yury Kotov Reviewed-by: Dr. David Alan Gilbert Message-Id: <20190909131335.16848-4-yury-kotov@yandex-team.ru> [Reorganize check_migration_status for rebase. - Paolo] Signed-off-by: Paolo Bonzini --- tests/migration-test.c | 157 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 138 insertions(+), 19 deletions(-) diff --git a/tests/migration-test.c b/tests/migration-test.c index 221a33d..59f291c 100644 --- a/tests/migration-test.c +++ b/tests/migration-test.c @@ -240,6 +240,17 @@ static int64_t read_ram_property_int(QTestState *who, const char *property) return result; } +static int64_t read_migrate_property_int(QTestState *who, const char *property) +{ + QDict *rsp_return; + int64_t result; + + rsp_return = migrate_query(who); + result = qdict_get_try_int(rsp_return, property, 0); + qobject_unref(rsp_return); + return result; +} + static uint64_t get_migration_pass(QTestState *who) { return read_ram_property_int(who, "dirty-sync-count"); @@ -254,32 +265,46 @@ static void read_blocktime(QTestState *who) qobject_unref(rsp_return); } +static bool check_migration_status(QTestState *who, const char *goal, + const char **ungoals) +{ + bool ready; + char *current_status; + const char **ungoal; + + current_status = migrate_query_status(who); + ready = strcmp(current_status, goal) == 0; + if (!ungoals) { + g_assert_cmpstr(current_status, !=, "failed"); + /* + * If looking for a state other than completed, + * completion of migration would cause the test to + * hang. + */ + if (strcmp(goal, "completed") != 0) { + g_assert_cmpstr(current_status, !=, "completed"); + } + } else { + for (ungoal = ungoals; *ungoal; ungoal++) { + g_assert_cmpstr(current_status, !=, *ungoal); + } + } + g_free(current_status); + return ready; +} + static void wait_for_migration_status(QTestState *who, const char *goal, const char **ungoals) { - while (true) { - bool completed; - char *status; - const char **ungoal; - - status = migrate_query_status(who); - completed = strcmp(status, goal) == 0; - for (ungoal = ungoals; *ungoal; ungoal++) { - g_assert_cmpstr(status, !=, *ungoal); - } - g_free(status); - if (completed) { - return; - } + while (!check_migration_status(who, goal, ungoals)) { usleep(1000); } } static void wait_for_migration_complete(QTestState *who) { - wait_for_migration_status(who, "completed", - (const char * []) { "failed", NULL }); + wait_for_migration_status(who, "completed", NULL); } static void wait_for_migration_pass(QTestState *who) @@ -450,6 +475,17 @@ static void migrate_pause(QTestState *who) qobject_unref(rsp); } +static void migrate_continue(QTestState *who, const char *state) +{ + QDict *rsp; + + rsp = wait_command(who, + "{ 'execute': 'migrate-continue'," + " 'arguments': { 'state': %s } }", + state); + qobject_unref(rsp); +} + static void migrate_recover(QTestState *who, const char *uri) { QDict *rsp; @@ -814,9 +850,7 @@ static void test_postcopy_recovery(void) * Wait until postcopy is really started; we can only run the * migrate-pause command during a postcopy */ - wait_for_migration_status(from, "postcopy-active", - (const char * []) { "failed", - "completed", NULL }); + wait_for_migration_status(from, "postcopy-active", NULL); /* * Manually stop the postcopy migration. This emulates a network @@ -1210,6 +1244,89 @@ static void test_validate_uuid_dst_not_set(void) false, true); } +static void test_migrate_auto_converge(void) +{ + char *uri = g_strdup_printf("unix:%s/migsocket", tmpfs); + QTestState *from, *to; + int64_t remaining, percentage; + + /* + * We want the test to be stable and as fast as possible. + * E.g., with 1Gb/s bandwith migration may pass without throttling, + * so we need to decrease a bandwidth. + */ + const int64_t init_pct = 5, inc_pct = 50, max_pct = 95; + const int64_t max_bandwidth = 400000000; /* ~400Mb/s */ + const int64_t downtime_limit = 250; /* 250ms */ + /* + * We migrate through unix-socket (> 500Mb/s). + * Thus, expected migration speed ~= bandwidth limit (< 500Mb/s). + * So, we can predict expected_threshold + */ + const int64_t expected_threshold = max_bandwidth * downtime_limit / 1000; + + if (test_migrate_start(&from, &to, uri, false, false, NULL, NULL)) { + return; + } + + migrate_set_capability(from, "auto-converge", true); + migrate_set_parameter_int(from, "cpu-throttle-initial", init_pct); + migrate_set_parameter_int(from, "cpu-throttle-increment", inc_pct); + migrate_set_parameter_int(from, "max-cpu-throttle", max_pct); + + /* + * Set the initial parameters so that the migration could not converge + * without throttling. + */ + migrate_set_parameter_int(from, "downtime-limit", 1); + migrate_set_parameter_int(from, "max-bandwidth", 100000000); /* ~100Mb/s */ + + /* To check remaining size after precopy */ + migrate_set_capability(from, "pause-before-switchover", true); + + /* Wait for the first serial output from the source */ + wait_for_serial("src_serial"); + + migrate(from, uri, "{}"); + + /* Wait for throttling begins */ + percentage = 0; + while (percentage == 0) { + percentage = read_migrate_property_int(from, "cpu-throttle-percentage"); + usleep(100); + g_assert_false(got_stop); + } + /* The first percentage of throttling should be equal to init_pct */ + g_assert_cmpint(percentage, ==, init_pct); + /* Now, when we tested that throttling works, let it converge */ + migrate_set_parameter_int(from, "downtime-limit", downtime_limit); + migrate_set_parameter_int(from, "max-bandwidth", max_bandwidth); + + /* + * Wait for pre-switchover status to check last throttle percentage + * and remaining. These values will be zeroed later + */ + wait_for_migration_status(from, "pre-switchover", NULL); + + /* The final percentage of throttling shouldn't be greater than max_pct */ + percentage = read_migrate_property_int(from, "cpu-throttle-percentage"); + g_assert_cmpint(percentage, <=, max_pct); + + remaining = read_ram_property_int(from, "remaining"); + g_assert_cmpint(remaining, <, expected_threshold); + + migrate_continue(from, "pre-switchover"); + + qtest_qmp_eventwait(to, "RESUME"); + + wait_for_serial("dest_serial"); + wait_for_migration_complete(from); + + g_free(uri); + + test_migrate_end(from, to, true); +} + int main(int argc, char **argv) { char template[] = "/tmp/migration-test-XXXXXX"; @@ -1272,6 +1389,8 @@ int main(int argc, char **argv) qtest_add_func("/migration/validate_uuid_dst_not_set", test_validate_uuid_dst_not_set); + qtest_add_func("/migration/auto_converge", test_migrate_auto_converge); + ret = g_test_run(); g_assert_cmpint(ret, ==, 0); From patchwork Wed Oct 2 16:51:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171597 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CFC8115AB for ; Wed, 2 Oct 2019 16:53:35 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A56B121920 for ; Wed, 2 Oct 2019 16:53:35 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="X1lGv62/" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A56B121920 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57702 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhsc-0006yH-AL for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 12:53:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35224) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhr6-000577-4k for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhr4-000362-Rm for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:00 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:44082) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhr4-00034y-LP for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:51:58 -0400 Received: by mail-wr1-x441.google.com with SMTP id z9so7359954wrl.11 for ; Wed, 02 Oct 2019 09:51: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=s6juWaeJdvbdYfQYOPZtIdvf+1dOdIoXW07/VCUIeko=; b=X1lGv62/IOZ2T5DwOQ6jsXT2+wRKDs8M88KMgwD6+md/YRYQ6l8lDOTnsEyHn5e5JB +wTw3lDh+8eZ7+eWW39V9F2z3CypXiqZ+pYe9/G3/SyPWlqvSeOjmTmfYHL9KXbUS1WS I6BCsxprf8Qxk24p1S61BkdVcmSgMtGAh6BYwqkFwCRXq3d0qJYKVFNQYQvc+wKqjhZ+ Ga/oOJ1MT31WrJuKToKJhIEaHq8wOM39IncU2rge1jNZFo97zCvsf/sUD4ADMmS6jBzU 2y8gjnyu6HyzDr71qGXotH04kf29/3AvoTEKWs60hP2hNTUXtdbnfR/697sHdEo+bfqF xaWw== 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=s6juWaeJdvbdYfQYOPZtIdvf+1dOdIoXW07/VCUIeko=; b=FQGVFninbJOHHBj/noV6o0c1q2cbM8Hh86bTq5/Pk4EWuESXmaT3CZ+l5E9hPWLuP6 S2BwDNpwUoLduNNk1dh8RJRzZDQjXi1+8w6XJz4rslQ03oZrn2TzJ9i566ZSUS0SqfXv 9uggLzPssXW4XCO1/yYNypPtSLJzI7bs79fde1C2FaV7kwqMWbpq1HrJB79Ii6W43mCK X7yoZYql0bk1Nsc834U1Wg3+g3DEdExSD6gWkdU8i67lcCtLXj4h6muxaOdmI3nauXU3 ZU12BCM+nfCKOZXWQlkBfH8hQ+zY4H+pmEFz9N40+jYD7RBNvStwQCvHGTBeO6KDaiIn KuZQ== X-Gm-Message-State: APjAAAVO9UHF4UmB8fTCA+Ycx1VkCjwPMaudQeOIYwurekhq0QUR/vQb OrpjmJgVovEpymV1u8R18GmTZ6hG X-Google-Smtp-Source: APXvYqyvxcp0nV1xM7ze40fhgo5bnLkStIT36/Ptw8ezXwHTSvoFRG1XZ/JiI80YPJOMqh66NNPZ7A== X-Received: by 2002:adf:9d88:: with SMTP id p8mr3370327wre.391.1570035117264; Wed, 02 Oct 2019 09:51:57 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.51.56 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:51:56 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 02/30] target/i386: handle filtered_features in a new function mark_unavailable_features Date: Wed, 2 Oct 2019 18:51:25 +0200 Message-Id: <1570035113-56848-3-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::441 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" The next patch will add a different reason for filtering features, unrelated to host feature support. Extract a new function that takes care of disabling the features and optionally reporting them. Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 87 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 39 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 9e0bac3..52b3f3e 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -3096,17 +3096,41 @@ static char *feature_word_description(FeatureWordInfo *f, uint32_t bit) return NULL; } -static void report_unavailable_features(FeatureWord w, uint32_t mask) +static bool x86_cpu_have_filtered_features(X86CPU *cpu) { + FeatureWord w; + + for (w = 0; w < FEATURE_WORDS; w++) { + if (cpu->filtered_features[w]) { + return true; + } + } + + return false; +} + +static void mark_unavailable_features(X86CPU *cpu, FeatureWord w, uint32_t mask, + const char *verbose_prefix) +{ + CPUX86State *env = &cpu->env; FeatureWordInfo *f = &feature_word_info[w]; int i; char *feat_word_str; + if (!cpu->force_features) { + env->features[w] &= ~mask; + } + cpu->filtered_features[w] |= mask; + + if (!verbose_prefix) { + return; + } + for (i = 0; i < 32; ++i) { if ((1UL << i) & mask) { feat_word_str = feature_word_description(f, i); - warn_report("%s doesn't support requested feature: %s%s%s [bit %d]", - accel_uses_host_cpuid() ? "host" : "TCG", + warn_report("%s: %s%s%s [bit %d]", + verbose_prefix, feat_word_str, f->feat_names[i] ? "." : "", f->feat_names[i] ? f->feat_names[i] : "", i); @@ -3511,7 +3535,7 @@ static void x86_cpu_parse_featurestr(const char *typename, char *features, } static void x86_cpu_expand_features(X86CPU *cpu, Error **errp); -static int x86_cpu_filter_features(X86CPU *cpu); +static void x86_cpu_filter_features(X86CPU *cpu, bool verbose); /* Build a list with the name of all features on a feature word array */ static void x86_cpu_list_feature_names(FeatureWordArray features, @@ -3576,7 +3600,7 @@ static void x86_cpu_class_check_missing_features(X86CPUClass *xcc, next = &new->next; } - x86_cpu_filter_features(xc); + x86_cpu_filter_features(xc, false); x86_cpu_list_feature_names(xc->filtered_features, next); @@ -3784,15 +3808,6 @@ static uint32_t x86_cpu_get_supported_feature_word(FeatureWord w, return r; } -static void x86_cpu_report_filtered_features(X86CPU *cpu) -{ - FeatureWord w; - - for (w = 0; w < FEATURE_WORDS; w++) { - report_unavailable_features(w, cpu->filtered_features[w]); - } -} - static void x86_cpu_apply_props(X86CPU *cpu, PropValue *props) { PropValue *pv; @@ -5154,24 +5169,24 @@ out: * * Returns: 0 if all flags are supported by the host, non-zero otherwise. */ -static int x86_cpu_filter_features(X86CPU *cpu) +static void x86_cpu_filter_features(X86CPU *cpu, bool verbose) { CPUX86State *env = &cpu->env; FeatureWord w; - int rv = 0; + const char *prefix = NULL; + + if (verbose) { + prefix = accel_uses_host_cpuid() + ? "host doesn't support requested feature" + : "TCG doesn't support requested feature"; + } for (w = 0; w < FEATURE_WORDS; w++) { uint32_t host_feat = x86_cpu_get_supported_feature_word(w, false); uint32_t requested_features = env->features[w]; - uint32_t available_features = requested_features & host_feat; - if (!cpu->force_features) { - env->features[w] = available_features; - } - cpu->filtered_features[w] = requested_features & ~available_features; - if (cpu->filtered_features[w]) { - rv = 1; - } + uint32_t unavailable_features = requested_features & ~host_feat; + mark_unavailable_features(cpu, w, unavailable_features, prefix); } if ((env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_INTEL_PT) && @@ -5197,13 +5212,9 @@ static int x86_cpu_filter_features(X86CPU *cpu) * host can't emulate the capabilities we report on * cpu_x86_cpuid(), intel-pt can't be enabled on the current host. */ - env->features[FEAT_7_0_EBX] &= ~CPUID_7_0_EBX_INTEL_PT; - cpu->filtered_features[FEAT_7_0_EBX] |= CPUID_7_0_EBX_INTEL_PT; - rv = 1; + mark_unavailable_features(cpu, FEAT_7_0_EBX, CPUID_7_0_EBX_INTEL_PT, prefix); } } - - return rv; } static void x86_cpu_realizefn(DeviceState *dev, Error **errp) @@ -5244,16 +5255,14 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp) goto out; } - if (x86_cpu_filter_features(cpu) && - (cpu->check_cpuid || cpu->enforce_cpuid)) { - x86_cpu_report_filtered_features(cpu); - if (cpu->enforce_cpuid) { - error_setg(&local_err, - accel_uses_host_cpuid() ? - "Host doesn't support requested features" : - "TCG doesn't support requested features"); - goto out; - } + x86_cpu_filter_features(cpu, cpu->check_cpuid || cpu->enforce_cpuid); + + if (cpu->enforce_cpuid && x86_cpu_have_filtered_features(cpu)) { + error_setg(&local_err, + accel_uses_host_cpuid() ? + "Host doesn't support requested features" : + "TCG doesn't support requested features"); + goto out; } /* On AMD CPUs, some CPUID[8000_0001].EDX bits must match the bits on From patchwork Wed Oct 2 16:51:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171599 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7F55913B1 for ; Wed, 2 Oct 2019 16:53:40 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5556821920 for ; Wed, 2 Oct 2019 16:53:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="bmEcAfJz" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5556821920 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57704 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhsg-00075D-Rb for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 12:53:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35247) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhr7-000589-Uy for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhr6-000381-Km for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:01 -0400 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]:45124) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhr6-00036d-Dp for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:00 -0400 Received: by mail-wr1-x42a.google.com with SMTP id r5so20435427wrm.12 for ; Wed, 02 Oct 2019 09:52: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=FRGhgVOwY1ofv0mbUj5TGM+MvOHQ8R0yf6r9ZTR8PxU=; b=bmEcAfJzeVrwNwFo/XXQ3OrjlfYwokwHJh2/2MYt/DMGSflqmlErfBlU8wzzV1wJfA Gmn1OqmBxcCIdfkWuJBpE9n/MaAjzMi/EB9QDEWWI2H7Szv/7L2dmIqAh1lGdwbL5KCt viogsex/dltfzdHAAGdO3A/6p23g+H8ex0lITuxzFaQYGOuf4Cjgo1twYI0rFK4EPD0c DhFl3+b44aSgdiH4nQF3AJiIW3/r3gNK+qESv30sMgEob/PgD/WRZYAl5HyWuuWcx/Vv rUcdEMKffg9+j6TU9BI28VGGa87raeLvOkk7VplPhccMFbPRmKR4+PFCoBSwpbmaBbI6 1q2g== 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=FRGhgVOwY1ofv0mbUj5TGM+MvOHQ8R0yf6r9ZTR8PxU=; b=XvFezrfj92albiJdiMDz1T9dKP4JCUxSpm00rkb0eCD1G9EbRAd5s6ZohqwHlkfLcW 13DThDUrA6zW1MQC181QuB5aAipODA7qqSAeWKC4G2ZUTnbPX1OnCDj8rZIVRjyxtiHM rmc9iiHL2Z2J+utzUuu/LjtFYiWAcdMySZmDwEfWOrpglyc/FWnsQa4bhDjCdU/Z3ise hptOOPdKMV6wru4hWRL9q1qSTQs6+47JYCgCjkfnbDTt5WnnTjs13lH+se4G3pDCw/ID bsgnQ1yGGUZfRlTUV4l/i3lzQEEphRoPtW1WTOdyEe5JrKhdX2JIR6JTOuYshvMOlChl MOMg== X-Gm-Message-State: APjAAAXxDUJuFeJ3Kax85NX0JayzyUCcSYJlRqhFqh376SzQVf/SHbZA 1B8LV1N0wJFyA4SHWffHVr11vhZk X-Google-Smtp-Source: APXvYqzS3B6OGtc0XwNxDX7xlzitbwjNQT/woso/SxTwdvhQjcjYavgZgAAiLGvIkGSuSGl3+NI4Nw== X-Received: by 2002:adf:9d87:: with SMTP id p7mr3339613wre.245.1570035118350; Wed, 02 Oct 2019 09:51:58 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.51.57 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:51:57 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 03/30] target/i386: introduce generic feature dependency mechanism Date: Wed, 2 Oct 2019 18:51:26 +0200 Message-Id: <1570035113-56848-4-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Sometimes a CPU feature does not make sense unless another is present. In the case of VMX features, KVM does not even allow setting the VMX controls to some invalid combinations. Therefore, this patch adds a generic mechanism that looks for bits that the user explicitly cleared, and uses them to remove other bits from the expanded CPU definition. If these dependent bits were also explicitly *set* by the user, this will be a warning for "-cpu check" and an error for "-cpu enforce". If not, then the dependent bits are cleared silently, for convenience. With VMX features, this will be used so that for example "-cpu host,-rdrand" will also hide support for RDRAND exiting. Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 72 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 24 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 52b3f3e..fae458c 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -801,10 +801,6 @@ typedef struct FeatureWordInfo { /* If type==MSR_FEATURE_WORD */ struct { uint32_t index; - struct { /*CPUID that enumerate this MSR*/ - FeatureWord cpuid_class; - uint32_t cpuid_flag; - } cpuid_dep; } msr; }; uint32_t tcg_features; /* Feature flags supported by TCG */ @@ -1218,10 +1214,6 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { }, .msr = { .index = MSR_IA32_ARCH_CAPABILITIES, - .cpuid_dep = { - FEAT_7_0_EDX, - CPUID_7_0_EDX_ARCH_CAPABILITIES - } }, }, [FEAT_CORE_CAPABILITY] = { @@ -1238,14 +1230,30 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { }, .msr = { .index = MSR_IA32_CORE_CAPABILITY, - .cpuid_dep = { - FEAT_7_0_EDX, - CPUID_7_0_EDX_CORE_CAPABILITY, - }, }, }, }; +typedef struct FeatureMask { + FeatureWord index; + uint32_t mask; +} FeatureMask; + +typedef struct FeatureDep { + FeatureMask from, to; +} FeatureDep; + +static FeatureDep feature_dependencies[] = { + { + .from = { FEAT_7_0_EDX, CPUID_7_0_EDX_ARCH_CAPABILITIES }, + .to = { FEAT_ARCH_CAPABILITIES, ~0u }, + }, + { + .from = { FEAT_7_0_EDX, CPUID_7_0_EDX_CORE_CAPABILITY }, + .to = { FEAT_CORE_CAPABILITY, ~0u }, + }, +}; + typedef struct X86RegisterInfo32 { /* Name of register */ const char *name; @@ -5063,9 +5071,26 @@ static void x86_cpu_expand_features(X86CPU *cpu, Error **errp) { CPUX86State *env = &cpu->env; FeatureWord w; + int i; GList *l; Error *local_err = NULL; + for (l = plus_features; l; l = l->next) { + const char *prop = l->data; + object_property_set_bool(OBJECT(cpu), true, prop, &local_err); + if (local_err) { + goto out; + } + } + + for (l = minus_features; l; l = l->next) { + const char *prop = l->data; + object_property_set_bool(OBJECT(cpu), false, prop, &local_err); + if (local_err) { + goto out; + } + } + /*TODO: Now cpu->max_features doesn't overwrite features * set using QOM properties, and we can convert * plus_features & minus_features to global properties @@ -5083,19 +5108,18 @@ static void x86_cpu_expand_features(X86CPU *cpu, Error **errp) } } - for (l = plus_features; l; l = l->next) { - const char *prop = l->data; - object_property_set_bool(OBJECT(cpu), true, prop, &local_err); - if (local_err) { - goto out; - } - } + for (i = 0; i < ARRAY_SIZE(feature_dependencies); i++) { + FeatureDep *d = &feature_dependencies[i]; + if (!(env->features[d->from.index] & d->from.mask)) { + uint32_t unavailable_features = env->features[d->to.index] & d->to.mask; - for (l = minus_features; l; l = l->next) { - const char *prop = l->data; - object_property_set_bool(OBJECT(cpu), false, prop, &local_err); - if (local_err) { - goto out; + /* Not an error unless the dependent feature was added explicitly. */ + mark_unavailable_features(cpu, d->to.index, + unavailable_features & env->user_features[d->to.index], + "This feature depends on other features that were not requested"); + + env->user_features[d->to.index] |= unavailable_features; + env->features[d->to.index] &= ~unavailable_features; } } From patchwork Wed Oct 2 16:51:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171615 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AF11813B1 for ; Wed, 2 Oct 2019 16:59:26 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 74E9621920 for ; Wed, 2 Oct 2019 16:59:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="iIkUJsmi" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 74E9621920 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57754 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhyH-0005hY-7K for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 12:59:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35263) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhr8-00058m-Ku for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhr6-00038E-NI for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:02 -0400 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]:33353) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhr6-000372-FX for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:00 -0400 Received: by mail-wr1-x42e.google.com with SMTP id b9so20506590wrs.0 for ; Wed, 02 Oct 2019 09:52: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=nirIXPaOlSHpYiAMdzwt6G0234h5yaxWKAxVtdwKJ1A=; b=iIkUJsmiYkRFar2LbwTNKPvQSnBgUgx7NDemDumtkh34BN0DyLRiUe47wjdzegfJ5e bSB2aaRU5wQltB76lCZljHq0USMtczxo/0M//DRsARoSXxWEv0HPH+MHZ90eKuPlTZQn oQjaq1gsc0ZjogQhzAevhtA8RhF4IpoWT8cSNjoNfkLvdIswezLaDGjeGY/cjhkaJpk1 hZX2GwYZDGcJg5XoVVBm2cygTBw6xl97+IbSVDNmD7LC4TG0evKNe+jiWGP30l/BEFMZ 2MNc1R3ubUsCbNSwQgW/eeLPVta5u+PyyxDVFojA/FWBhkxorjV3hw28Q7c8VrrAg9PV jQLA== 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=nirIXPaOlSHpYiAMdzwt6G0234h5yaxWKAxVtdwKJ1A=; b=GNbp3GtNO7GT1eDbg1d5qMxEwaAV7daeGi7hm8AZtMCkf652a7vqK7aqQ9zPh8WGbj mJTsYOoVja/mGQsGQdHkYJDK4euwQ0LBJ/UNR5s47C8ubO042mXCRE0OtwPGzmAPxfV9 HUh7sabWbOhIX3b9dyo6uPynbFc4/Fo/wxbtfPBU3tHI6r7FXLrLaoRj7hEbH1AMfAq2 RRJ66OzZgHN5s9mdCG9s3oSz5ubYWU4KBikJ3Y+zxSK9FeVm8rsJo2yol5YNbHSXI4uL j1wO4v0pAB0q7DZUn0I4twFpo+li69U+iJVmH66e+29ebmHT+ln8MLfVACzJyDp0uNjK o7Jg== X-Gm-Message-State: APjAAAXoEegv5dcrIw3T+yI8fbpMvAJqJsCv9rXsjBUocwzZN7M9+SAM iShkOng+RroBPyTS/qwolYUQ1Tlg X-Google-Smtp-Source: APXvYqxQg8giZROppdHLPooWxcB/x0072HzoW7LTB+VUi/IIvLP5qa41ELfPLxUPzkB3nkEUEaOSdg== X-Received: by 2002:a5d:4385:: with SMTP id i5mr3404859wrq.353.1570035119046; Wed, 02 Oct 2019 09:51:59 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.51.58 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:51:58 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 04/30] target/i386: expand feature words to 64 bits Date: Wed, 2 Oct 2019 18:51:27 +0200 Message-Id: <1570035113-56848-5-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" VMX requires 64-bit feature words for the IA32_VMX_EPT_VPID_CAP and IA32_VMX_BASIC MSRs. (The VMX control MSRs are 64-bit wide but actually have only 32 bits of information). Signed-off-by: Paolo Bonzini --- include/sysemu/kvm.h | 2 +- target/i386/cpu.c | 71 +++++++++++++++++++++++++++------------------------- target/i386/cpu.h | 2 +- target/i386/kvm.c | 2 +- 4 files changed, 40 insertions(+), 37 deletions(-) diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h index fd67477..9d14328 100644 --- a/include/sysemu/kvm.h +++ b/include/sysemu/kvm.h @@ -462,7 +462,7 @@ int kvm_vm_check_extension(KVMState *s, unsigned int extension); uint32_t kvm_arch_get_supported_cpuid(KVMState *env, uint32_t function, uint32_t index, int reg); -uint32_t kvm_arch_get_supported_msr_feature(KVMState *s, uint32_t index); +uint64_t kvm_arch_get_supported_msr_feature(KVMState *s, uint32_t index); void kvm_set_sigmask_len(KVMState *s, unsigned int sigmask_len); diff --git a/target/i386/cpu.c b/target/i386/cpu.c index fae458c..83a3692 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -789,7 +789,7 @@ typedef struct FeatureWordInfo { * In cases of disagreement between feature naming conventions, * aliases may be added. */ - const char *feat_names[32]; + const char *feat_names[64]; union { /* If type==CPUID_FEATURE_WORD */ struct { @@ -803,11 +803,11 @@ typedef struct FeatureWordInfo { uint32_t index; } msr; }; - uint32_t tcg_features; /* Feature flags supported by TCG */ - uint32_t unmigratable_flags; /* Feature flags known to be unmigratable */ - uint32_t migratable_flags; /* Feature flags known to be migratable */ + uint64_t tcg_features; /* Feature flags supported by TCG */ + uint64_t unmigratable_flags; /* Feature flags known to be unmigratable */ + uint64_t migratable_flags; /* Feature flags known to be migratable */ /* Features that shouldn't be auto-enabled by "-cpu host" */ - uint32_t no_autoenable_flags; + uint64_t no_autoenable_flags; } FeatureWordInfo; static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { @@ -1236,7 +1236,7 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { typedef struct FeatureMask { FeatureWord index; - uint32_t mask; + uint64_t mask; } FeatureMask; typedef struct FeatureDep { @@ -1246,11 +1246,11 @@ typedef struct FeatureDep { static FeatureDep feature_dependencies[] = { { .from = { FEAT_7_0_EDX, CPUID_7_0_EDX_ARCH_CAPABILITIES }, - .to = { FEAT_ARCH_CAPABILITIES, ~0u }, + .to = { FEAT_ARCH_CAPABILITIES, ~0ull }, }, { .from = { FEAT_7_0_EDX, CPUID_7_0_EDX_CORE_CAPABILITY }, - .to = { FEAT_CORE_CAPABILITY, ~0u }, + .to = { FEAT_CORE_CAPABILITY, ~0ull }, }, }; @@ -1362,14 +1362,14 @@ const char *get_register_name_32(unsigned int reg) * Returns the set of feature flags that are supported and migratable by * QEMU, for a given FeatureWord. */ -static uint32_t x86_cpu_get_migratable_flags(FeatureWord w) +static uint64_t x86_cpu_get_migratable_flags(FeatureWord w) { FeatureWordInfo *wi = &feature_word_info[w]; - uint32_t r = 0; + uint64_t r = 0; int i; - for (i = 0; i < 32; i++) { - uint32_t f = 1U << i; + for (i = 0; i < 64; i++) { + uint64_t f = 1ULL << i; /* If the feature name is known, it is implicitly considered migratable, * unless it is explicitly set in unmigratable_flags */ @@ -2931,7 +2931,7 @@ void x86_cpu_change_kvm_default(const char *prop, const char *value) assert(pv->prop); } -static uint32_t x86_cpu_get_supported_feature_word(FeatureWord w, +static uint64_t x86_cpu_get_supported_feature_word(FeatureWord w, bool migratable_only); static bool lmce_supported(void) @@ -3117,7 +3117,7 @@ static bool x86_cpu_have_filtered_features(X86CPU *cpu) return false; } -static void mark_unavailable_features(X86CPU *cpu, FeatureWord w, uint32_t mask, +static void mark_unavailable_features(X86CPU *cpu, FeatureWord w, uint64_t mask, const char *verbose_prefix) { CPUX86State *env = &cpu->env; @@ -3134,8 +3134,8 @@ static void mark_unavailable_features(X86CPU *cpu, FeatureWord w, uint32_t mask, return; } - for (i = 0; i < 32; ++i) { - if ((1UL << i) & mask) { + for (i = 0; i < 64; ++i) { + if ((1ULL << i) & mask) { feat_word_str = feature_word_description(f, i); warn_report("%s: %s%s%s [bit %d]", verbose_prefix, @@ -3378,7 +3378,7 @@ static void x86_cpu_get_feature_words(Object *obj, Visitor *v, const char *name, void *opaque, Error **errp) { - uint32_t *array = (uint32_t *)opaque; + uint64_t *array = (uint64_t *)opaque; FeatureWord w; X86CPUFeatureWordInfo word_infos[FEATURE_WORDS] = { }; X86CPUFeatureWordInfoList list_entries[FEATURE_WORDS] = { }; @@ -3422,6 +3422,7 @@ static inline void feat2prop(char *s) /* Return the feature property name for a feature flag bit */ static const char *x86_cpu_feature_name(FeatureWord w, int bitnr) { + const char *name; /* XSAVE components are automatically enabled by other features, * so return the original feature name instead */ @@ -3435,9 +3436,11 @@ static const char *x86_cpu_feature_name(FeatureWord w, int bitnr) } } - assert(bitnr < 32); + assert(bitnr < 64); assert(w < FEATURE_WORDS); - return feature_word_info[w].feat_names[bitnr]; + name = feature_word_info[w].feat_names[bitnr]; + assert(bitnr < 32 || !(name && feature_word_info[w].type == CPUID_FEATURE_WORD)); + return name; } /* Compatibily hack to maintain legacy +-feat semantic, @@ -3553,10 +3556,10 @@ static void x86_cpu_list_feature_names(FeatureWordArray features, strList **next = feat_names; for (w = 0; w < FEATURE_WORDS; w++) { - uint32_t filtered = features[w]; + uint64_t filtered = features[w]; int i; - for (i = 0; i < 32; i++) { - if (filtered & (1UL << i)) { + for (i = 0; i < 64; i++) { + if (filtered & (1ULL << i)) { strList *new = g_new0(strList, 1); new->value = g_strdup(x86_cpu_feature_name(w, i)); *next = new; @@ -3725,7 +3728,7 @@ void x86_cpu_list(void) names = NULL; for (i = 0; i < ARRAY_SIZE(feature_word_info); i++) { FeatureWordInfo *fw = &feature_word_info[i]; - for (j = 0; j < 32; j++) { + for (j = 0; j < 64; j++) { if (fw->feat_names[j]) { names = g_list_append(names, (gpointer)fw->feat_names[j]); } @@ -3780,11 +3783,11 @@ CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp) return cpu_list; } -static uint32_t x86_cpu_get_supported_feature_word(FeatureWord w, +static uint64_t x86_cpu_get_supported_feature_word(FeatureWord w, bool migratable_only) { FeatureWordInfo *wi = &feature_word_info[w]; - uint32_t r = 0; + uint64_t r = 0; if (kvm_enabled()) { switch (wi->type) { @@ -3955,7 +3958,7 @@ static QDict *x86_cpu_static_props(void) for (w = 0; w < FEATURE_WORDS; w++) { FeatureWordInfo *fi = &feature_word_info[w]; int bit; - for (bit = 0; bit < 32; bit++) { + for (bit = 0; bit < 64; bit++) { if (!fi->feat_names[bit]) { continue; } @@ -5111,7 +5114,7 @@ static void x86_cpu_expand_features(X86CPU *cpu, Error **errp) for (i = 0; i < ARRAY_SIZE(feature_dependencies); i++) { FeatureDep *d = &feature_dependencies[i]; if (!(env->features[d->from.index] & d->from.mask)) { - uint32_t unavailable_features = env->features[d->to.index] & d->to.mask; + uint64_t unavailable_features = env->features[d->to.index] & d->to.mask; /* Not an error unless the dependent feature was added explicitly. */ mark_unavailable_features(cpu, d->to.index, @@ -5206,10 +5209,10 @@ static void x86_cpu_filter_features(X86CPU *cpu, bool verbose) } for (w = 0; w < FEATURE_WORDS; w++) { - uint32_t host_feat = + uint64_t host_feat = x86_cpu_get_supported_feature_word(w, false); - uint32_t requested_features = env->features[w]; - uint32_t unavailable_features = requested_features & ~host_feat; + uint64_t requested_features = env->features[w]; + uint64_t unavailable_features = requested_features & ~host_feat; mark_unavailable_features(cpu, w, unavailable_features, prefix); } @@ -5506,7 +5509,7 @@ static void x86_cpu_unrealizefn(DeviceState *dev, Error **errp) typedef struct BitProperty { FeatureWord w; - uint32_t mask; + uint64_t mask; } BitProperty; static void x86_cpu_get_bit_prop(Object *obj, Visitor *v, const char *name, @@ -5514,7 +5517,7 @@ static void x86_cpu_get_bit_prop(Object *obj, Visitor *v, const char *name, { X86CPU *cpu = X86_CPU(obj); BitProperty *fp = opaque; - uint32_t f = cpu->env.features[fp->w]; + uint64_t f = cpu->env.features[fp->w]; bool value = (f & fp->mask) == fp->mask; visit_type_bool(v, name, &value, errp); } @@ -5567,7 +5570,7 @@ static void x86_cpu_register_bit_prop(X86CPU *cpu, { BitProperty *fp; ObjectProperty *op; - uint32_t mask = (1UL << bitnr); + uint64_t mask = (1ULL << bitnr); op = object_property_find(OBJECT(cpu), prop_name, NULL); if (op) { @@ -5701,7 +5704,7 @@ static void x86_cpu_initfn(Object *obj) for (w = 0; w < FEATURE_WORDS; w++) { int bitnr; - for (bitnr = 0; bitnr < 32; bitnr++) { + for (bitnr = 0; bitnr < 64; bitnr++) { x86_cpu_register_feature_bit_props(cpu, w, bitnr); } } diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 5f6e3a0..c00cc35 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -502,7 +502,7 @@ typedef enum FeatureWord { FEATURE_WORDS, } FeatureWord; -typedef uint32_t FeatureWordArray[FEATURE_WORDS]; +typedef uint64_t FeatureWordArray[FEATURE_WORDS]; /* cpuid_features bits */ #define CPUID_FP87 (1U << 0) diff --git a/target/i386/kvm.c b/target/i386/kvm.c index 9206909..0a86c8c 100644 --- a/target/i386/kvm.c +++ b/target/i386/kvm.c @@ -442,7 +442,7 @@ uint32_t kvm_arch_get_supported_cpuid(KVMState *s, uint32_t function, return ret; } -uint32_t kvm_arch_get_supported_msr_feature(KVMState *s, uint32_t index) +uint64_t kvm_arch_get_supported_msr_feature(KVMState *s, uint32_t index) { struct { struct kvm_msrs info; From patchwork Wed Oct 2 16:51:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171613 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7DC8813B1 for ; Wed, 2 Oct 2019 16:57:38 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5383321920 for ; Wed, 2 Oct 2019 16:57:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HDZF6nru" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5383321920 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57734 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhwW-0003WR-U7 for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 12:57:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35272) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhr9-00059P-6C for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhr7-00039R-PZ for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:03 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]:46757) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhr7-00038e-Ig for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:01 -0400 Received: by mail-wr1-x42c.google.com with SMTP id o18so20444676wrv.13 for ; Wed, 02 Oct 2019 09:52: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=0xYz+BH2rMxrOscxGjnU6A3/paa1HYzKHp1tH86q4D0=; b=HDZF6nrueaWcRJKbdBaqNYs48QjtrZ+nPE+IKXL8IS3oVOUgxsq9lQgTSBRF1AetPf F5GubME4XdkpNiOPwc76gvcXi6hG/dNTZl3HZ0tnNndsILRug7y4m7rusb3u2uos1x8T EaZPaFDBVROXa/KuYicrUfKY0655Fm5ywGeq1YVH8OrfiKyeRTC0seBV9xpep00o3YF5 LizVzYkbwazjrg2Edi7ntR7gM4xlwwKDRyYpIxhuMijVavdSFURbtaj7vyyf8AID8nTg a/Xcx26i1R3IeVISWmw+Dk5a2P8EMejc6ZmGnR54NTm/uV0psY9JdRdYJay1X9hggGDz PbeQ== 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=0xYz+BH2rMxrOscxGjnU6A3/paa1HYzKHp1tH86q4D0=; b=icjg4aZkZOkA51ITzcxc06Ba1vnTLYyEtPErz42WhlG5VtctUxJ6J+OwvsCNgw+47b x5zDbIAGP9ERI9l9G13ZKkQeXAaD/Dpd/aylR8cpp36dPjbtieUeVyDEyq1gPQwaZgV+ kAX09vaFbYO+b3vAbO91QbNhUnUk/CAW0GJJzjgYaTW4ZSBFfyrYdbfccS4VT2pTP84U lWQyvYWpaSUckLJ9LL3nOF5j6lyQ0SatJNBeC0vNmwggBEF3LLisTUzkNKU6LbtoRgpW lg+3KscbDwYiNMCl9YVX3f0laM7s6UuUh4M6kqFclSTdBX/ChYrFQOr88Ju7RVyf00uy bT+g== X-Gm-Message-State: APjAAAUxJDjhfBXFDztqV0QVCpfqpH3Nolv3X16+svKROGunFXlRPGMf Q+6b2ViT4sThZ0GKcWemXMDKnro5 X-Google-Smtp-Source: APXvYqwL3y4EI01ZgsW+t+mTq4DEhTaBjrSIoBtQwpEfRpxDsNtSUYlvBYmWdNyXS8ysM6809Ug8qQ== X-Received: by 2002:adf:f68f:: with SMTP id v15mr901893wrp.210.1570035120288; Wed, 02 Oct 2019 09:52:00 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.51.59 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:51:59 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 05/30] target/i386: add VMX definitions Date: Wed, 2 Oct 2019 18:51:28 +0200 Message-Id: <1570035113-56848-6-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::42c X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" These will be used to compile the list of VMX features for named CPU models, and/or by the code that sets up the VMX MSRs. Signed-off-by: Paolo Bonzini --- target/i386/cpu.h | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) diff --git a/target/i386/cpu.h b/target/i386/cpu.h index c00cc35..23a30e1 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -452,6 +452,25 @@ typedef enum X86Seg { #define MSR_IA32_BNDCFGS 0x00000d90 #define MSR_IA32_XSS 0x00000da0 +#define MSR_IA32_VMX_BASIC 0x00000480 +#define MSR_IA32_VMX_PINBASED_CTLS 0x00000481 +#define MSR_IA32_VMX_PROCBASED_CTLS 0x00000482 +#define MSR_IA32_VMX_EXIT_CTLS 0x00000483 +#define MSR_IA32_VMX_ENTRY_CTLS 0x00000484 +#define MSR_IA32_VMX_MISC 0x00000485 +#define MSR_IA32_VMX_CR0_FIXED0 0x00000486 +#define MSR_IA32_VMX_CR0_FIXED1 0x00000487 +#define MSR_IA32_VMX_CR4_FIXED0 0x00000488 +#define MSR_IA32_VMX_CR4_FIXED1 0x00000489 +#define MSR_IA32_VMX_VMCS_ENUM 0x0000048a +#define MSR_IA32_VMX_PROCBASED_CTLS2 0x0000048b +#define MSR_IA32_VMX_EPT_VPID_CAP 0x0000048c +#define MSR_IA32_VMX_TRUE_PINBASED_CTLS 0x0000048d +#define MSR_IA32_VMX_TRUE_PROCBASED_CTLS 0x0000048e +#define MSR_IA32_VMX_TRUE_EXIT_CTLS 0x0000048f +#define MSR_IA32_VMX_TRUE_ENTRY_CTLS 0x00000490 +#define MSR_IA32_VMX_VMFUNC 0x00000491 + #define XSTATE_FP_BIT 0 #define XSTATE_SSE_BIT 1 #define XSTATE_YMM_BIT 2 @@ -750,6 +769,117 @@ typedef uint64_t FeatureWordArray[FEATURE_WORDS]; #define MSR_CORE_CAP_SPLIT_LOCK_DETECT (1U << 5) +/* VMX MSR features */ +#define MSR_VMX_BASIC_VMCS_REVISION_MASK 0x7FFFFFFFull +#define MSR_VMX_BASIC_VMXON_REGION_SIZE_MASK (0x00001FFFull << 32) +#define MSR_VMX_BASIC_VMCS_MEM_TYPE_MASK (0x003C0000ull << 32) +#define MSR_VMX_BASIC_DUAL_MONITOR (1ULL << 49) +#define MSR_VMX_BASIC_INS_OUTS (1ULL << 54) +#define MSR_VMX_BASIC_TRUE_CTLS (1ULL << 55) + +#define MSR_VMX_MISC_PREEMPTION_TIMER_SHIFT_MASK 0x1Full +#define MSR_VMX_MISC_STORE_LMA (1ULL << 5) +#define MSR_VMX_MISC_ACTIVITY_HLT (1ULL << 6) +#define MSR_VMX_MISC_ACTIVITY_SHUTDOWN (1ULL << 7) +#define MSR_VMX_MISC_ACTIVITY_WAIT_SIPI (1ULL << 8) +#define MSR_VMX_MISC_MAX_MSR_LIST_SIZE_MASK 0x0E000000ull +#define MSR_VMX_MISC_VMWRITE_VMEXIT (1ULL << 29) +#define MSR_VMX_MISC_ZERO_LEN_INJECT (1ULL << 30) + +#define MSR_VMX_EPT_EXECONLY (1ULL << 0) +#define MSR_VMX_EPT_PAGE_WALK_LENGTH_4 (1ULL << 6) +#define MSR_VMX_EPT_PAGE_WALK_LENGTH_5 (1ULL << 7) +#define MSR_VMX_EPT_UC (1ULL << 8) +#define MSR_VMX_EPT_WB (1ULL << 14) +#define MSR_VMX_EPT_2MB (1ULL << 16) +#define MSR_VMX_EPT_1GB (1ULL << 17) +#define MSR_VMX_EPT_INVEPT (1ULL << 20) +#define MSR_VMX_EPT_AD_BITS (1ULL << 21) +#define MSR_VMX_EPT_ADVANCED_VMEXIT_INFO (1ULL << 22) +#define MSR_VMX_EPT_INVEPT_SINGLE_CONTEXT (1ULL << 25) +#define MSR_VMX_EPT_INVEPT_ALL_CONTEXT (1ULL << 26) +#define MSR_VMX_EPT_INVVPID (1ULL << 32) +#define MSR_VMX_EPT_INVVPID_SINGLE_ADDR (1ULL << 40) +#define MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT (1ULL << 41) +#define MSR_VMX_EPT_INVVPID_ALL_CONTEXT (1ULL << 42) +#define MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT_NOGLOBALS (1ULL << 43) + +#define MSR_VMX_VMFUNC_EPT_SWITCHING (1ULL << 0) + + +/* VMX controls */ +#define VMX_CPU_BASED_VIRTUAL_INTR_PENDING 0x00000004 +#define VMX_CPU_BASED_USE_TSC_OFFSETING 0x00000008 +#define VMX_CPU_BASED_HLT_EXITING 0x00000080 +#define VMX_CPU_BASED_INVLPG_EXITING 0x00000200 +#define VMX_CPU_BASED_MWAIT_EXITING 0x00000400 +#define VMX_CPU_BASED_RDPMC_EXITING 0x00000800 +#define VMX_CPU_BASED_RDTSC_EXITING 0x00001000 +#define VMX_CPU_BASED_CR3_LOAD_EXITING 0x00008000 +#define VMX_CPU_BASED_CR3_STORE_EXITING 0x00010000 +#define VMX_CPU_BASED_CR8_LOAD_EXITING 0x00080000 +#define VMX_CPU_BASED_CR8_STORE_EXITING 0x00100000 +#define VMX_CPU_BASED_TPR_SHADOW 0x00200000 +#define VMX_CPU_BASED_VIRTUAL_NMI_PENDING 0x00400000 +#define VMX_CPU_BASED_MOV_DR_EXITING 0x00800000 +#define VMX_CPU_BASED_UNCOND_IO_EXITING 0x01000000 +#define VMX_CPU_BASED_USE_IO_BITMAPS 0x02000000 +#define VMX_CPU_BASED_MONITOR_TRAP_FLAG 0x08000000 +#define VMX_CPU_BASED_USE_MSR_BITMAPS 0x10000000 +#define VMX_CPU_BASED_MONITOR_EXITING 0x20000000 +#define VMX_CPU_BASED_PAUSE_EXITING 0x40000000 +#define VMX_CPU_BASED_ACTIVATE_SECONDARY_CONTROLS 0x80000000 + +#define VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES 0x00000001 +#define VMX_SECONDARY_EXEC_ENABLE_EPT 0x00000002 +#define VMX_SECONDARY_EXEC_DESC 0x00000004 +#define VMX_SECONDARY_EXEC_RDTSCP 0x00000008 +#define VMX_SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE 0x00000010 +#define VMX_SECONDARY_EXEC_ENABLE_VPID 0x00000020 +#define VMX_SECONDARY_EXEC_WBINVD_EXITING 0x00000040 +#define VMX_SECONDARY_EXEC_UNRESTRICTED_GUEST 0x00000080 +#define VMX_SECONDARY_EXEC_APIC_REGISTER_VIRT 0x00000100 +#define VMX_SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY 0x00000200 +#define VMX_SECONDARY_EXEC_PAUSE_LOOP_EXITING 0x00000400 +#define VMX_SECONDARY_EXEC_RDRAND_EXITING 0x00000800 +#define VMX_SECONDARY_EXEC_ENABLE_INVPCID 0x00001000 +#define VMX_SECONDARY_EXEC_ENABLE_VMFUNC 0x00002000 +#define VMX_SECONDARY_EXEC_SHADOW_VMCS 0x00004000 +#define VMX_SECONDARY_EXEC_ENCLS_EXITING 0x00008000 +#define VMX_SECONDARY_EXEC_RDSEED_EXITING 0x00010000 +#define VMX_SECONDARY_EXEC_ENABLE_PML 0x00020000 +#define VMX_SECONDARY_EXEC_XSAVES 0x00100000 + +#define VMX_PIN_BASED_EXT_INTR_MASK 0x00000001 +#define VMX_PIN_BASED_NMI_EXITING 0x00000008 +#define VMX_PIN_BASED_VIRTUAL_NMIS 0x00000020 +#define VMX_PIN_BASED_VMX_PREEMPTION_TIMER 0x00000040 +#define VMX_PIN_BASED_POSTED_INTR 0x00000080 + +#define VMX_VM_EXIT_SAVE_DEBUG_CONTROLS 0x00000004 +#define VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE 0x00000200 +#define VMX_VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL 0x00001000 +#define VMX_VM_EXIT_ACK_INTR_ON_EXIT 0x00008000 +#define VMX_VM_EXIT_SAVE_IA32_PAT 0x00040000 +#define VMX_VM_EXIT_LOAD_IA32_PAT 0x00080000 +#define VMX_VM_EXIT_SAVE_IA32_EFER 0x00100000 +#define VMX_VM_EXIT_LOAD_IA32_EFER 0x00200000 +#define VMX_VM_EXIT_SAVE_VMX_PREEMPTION_TIMER 0x00400000 +#define VMX_VM_EXIT_CLEAR_BNDCFGS 0x00800000 +#define VMX_VM_EXIT_PT_CONCEAL_PIP 0x01000000 +#define VMX_VM_EXIT_CLEAR_IA32_RTIT_CTL 0x02000000 + +#define VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS 0x00000004 +#define VMX_VM_ENTRY_IA32E_MODE 0x00000200 +#define VMX_VM_ENTRY_SMM 0x00000400 +#define VMX_VM_ENTRY_DEACT_DUAL_MONITOR 0x00000800 +#define VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL 0x00002000 +#define VMX_VM_ENTRY_LOAD_IA32_PAT 0x00004000 +#define VMX_VM_ENTRY_LOAD_IA32_EFER 0x00008000 +#define VMX_VM_ENTRY_LOAD_BNDCFGS 0x00010000 +#define VMX_VM_ENTRY_PT_CONCEAL_PIP 0x00020000 +#define VMX_VM_ENTRY_LOAD_IA32_RTIT_CTL 0x00040000 + /* Supported Hyper-V Enlightenments */ #define HYPERV_FEAT_RELAXED 0 #define HYPERV_FEAT_VAPIC 1 From patchwork Wed Oct 2 16:51:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171609 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 143B515AB for ; Wed, 2 Oct 2019 16:56:48 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DEC7121920 for ; Wed, 2 Oct 2019 16:56:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Mwf3ARoN" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DEC7121920 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57731 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhvi-0002NF-Hi for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 12:56:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35276) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhr9-0005A1-JP for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhr8-0003AO-J0 for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:03 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]:43933) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhr8-00039S-D2 for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:02 -0400 Received: by mail-wr1-x431.google.com with SMTP id q17so20487493wrx.10 for ; Wed, 02 Oct 2019 09:52:02 -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=3dvmDFlr0gurTBYD4r1hBqQhpgoTuiAsAyqm2OCYvPs=; b=Mwf3ARoN8D3MbOi5qyT4haz16gR0bTX9CWXmr5aDZLNlccgn5e21F89JHjxthCSRjY j2WGjNqCyXd3/ebj2iYxTZO5fsgrc1Ue990s4ErkSnQb4i3ByJYXuE9MXYRw8qdmyurq 2uZrc3vjQy+QCSk0m7Xsub3hT1GsoPC/YlbBQmkP9T2i6+Qk08f7/1O3BNa2qsOtWMFG 2O2Rlh/l725M5h4/GuDcaf7wRM0PiORKQTK+/yKBlJ1UcM5JbXO+UJXDtTN0WA7tYqZI pCZJ79FYwX89nmWG8NYJSMP9eodyUvyFm90INEL02c7b7urDM48K/CBG1efmfeOd0QOi S01w== 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=3dvmDFlr0gurTBYD4r1hBqQhpgoTuiAsAyqm2OCYvPs=; b=Vann0jTDt/sWa6F0DpX7Hdp2YflXRt9bqdGGISWIkSS34iG9Pi1pJwgeudlKQnb/xh cWVSscQkWWbe1M7YzKNrawgBoMHTC/yhxfujKOUnFUWoT9lu22zrbp5z16ER8XszLy2U MvVc3bY7m5tpJuUQyT/bj479A+I4cm22rRWbWOdo9VrcCGTOqaWGFt3LoBzdqa4LcHYP ipp8If9nD2rZ1jD6P3O+AlOMo07yFiKKZkWXaECgfeECr2YyD+2+hxzz5Hc5ptRucXPc gU7pLKnulEUlMHu3J/ImDFtic0/nL5miE7SUEH13EYl1xKkU3gTzidblUTlfbyCNYXGB Ox+w== X-Gm-Message-State: APjAAAUYVsycTRpSLB45bJMftMTHKcWhYlRPj6Qwjs4Tan6SDaqrH0aP UBHIZ54WGDADrCqA+rzb4BjfOnVS X-Google-Smtp-Source: APXvYqwJKEp/xW3j9PwjretCMxLCxfT13rZZRIkwWEU9MYNFcdqXIzxyBPx9XnWVMa5zGAhSU2zNog== X-Received: by 2002:adf:b60b:: with SMTP id f11mr3352379wre.95.1570035121183; Wed, 02 Oct 2019 09:52:01 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.00 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:00 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 06/30] vmxcap: correct the name of the variables Date: Wed, 2 Oct 2019 18:51:29 +0200 Message-Id: <1570035113-56848-7-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" The low bits are 1 if the control must be one, the high bits are 1 if the control can be one. Correct the variable names as they are very confusing. Signed-off-by: Paolo Bonzini --- scripts/kvm/vmxcap | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/kvm/vmxcap b/scripts/kvm/vmxcap index d8c7d6d..5dfeb2e 100755 --- a/scripts/kvm/vmxcap +++ b/scripts/kvm/vmxcap @@ -51,15 +51,15 @@ class Control(object): return (val & 0xffffffff, val >> 32) def show(self): print(self.name) - mbz, mb1 = self.read2(self.cap_msr) - tmbz, tmb1 = 0, 0 + mb1, cb1 = self.read2(self.cap_msr) + tmb1, tcb1 = 0, 0 if self.true_cap_msr: - tmbz, tmb1 = self.read2(self.true_cap_msr) + tmb1, tcb1 = self.read2(self.true_cap_msr) for bit in sorted(self.bits.keys()): - zero = not (mbz & (1 << bit)) - one = mb1 & (1 << bit) - true_zero = not (tmbz & (1 << bit)) - true_one = tmb1 & (1 << bit) + zero = not (mb1 & (1 << bit)) + one = cb1 & (1 << bit) + true_zero = not (tmb1 & (1 << bit)) + true_one = tcb1 & (1 << bit) s= '?' if (self.true_cap_msr and true_zero and true_one and one and not zero): From patchwork Wed Oct 2 16:51:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171611 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A9C1C15AB for ; Wed, 2 Oct 2019 16:56:58 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6EC9821920 for ; Wed, 2 Oct 2019 16:56:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="aOkuj7uH" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6EC9821920 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57732 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhvt-0002Ya-2n for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 12:56:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35305) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrB-0005DB-UF for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhr9-0003Bu-RI for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:05 -0400 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]:36542) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhr9-0003Ar-IO for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:03 -0400 Received: by mail-wr1-x433.google.com with SMTP id y19so20498842wrd.3 for ; Wed, 02 Oct 2019 09:52:03 -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=xpvLUpKju0bbcadFHLolNrp3IG1oHEqpY6TXHFg+dUc=; b=aOkuj7uHgIkgiTGmwZQPOl4Ix0HWspgdYfMmzgLpFfQutHL3jU4RhWhJvV9GiYEhnK JE2cEkz+VLqRY6/ZplQeoseTBOR6rswUjVbiG56XB34wjPhoGdzq7psYIItQBgm2KyIK LwworjGu7Vz7h7zZgkLoWlXoxJT2xv7lGCQ5Htg5mDxMK632iz0nHcSgRFO2ZpsmNqEd 62K+0DF6rrOC+hJNPozI/ilFeStj7fgMO64sOSZN9ksbe2NXVMEpuDFNOOH9VFV24uS4 OlL9pYxobyDK2mQsM+DsEOR+3WiYyQ9XwRTwrY9CuVXebY2VBhDvu+3M7mKH1XLOOXNd Ed1w== 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=xpvLUpKju0bbcadFHLolNrp3IG1oHEqpY6TXHFg+dUc=; b=thawD9HV158Q4k7D0E7qJHJxPpUlmZOS6bYeDHGZlGHFXeKcXSDYVp/yvJemnFlSsk PWSuhf7g8WCHIJ7/BnQmLPlXnaVnAMZps3du6N4UrCreUk9ZB2Vwu3QAMYRmSm7xokfB Cw8OkVPZXH88l2H6nFyPWsr/Hp/Nann+M6/oiUnb79EOlw3HhoFF2Uu/Ut7Va470evLN czclY2b+pJHkpWf5Vrf6/NxDEHrXUF5ox4Lb8qinIrDbq1ASnseFpzsBbL/4crYj8/LD dv2j0On9Jc0Y2JyMBAtIeBUHan7P9J+gKRZ/KfaiJJ6aQQjgVUNertT4QfeYtdjDdJTj 36fQ== X-Gm-Message-State: APjAAAWiiQ3g+n2oZ/S+F9treC7Ocd09gG7aVqWgE1rmFeeBANQoaICA HPw4j4Imqp7GBfH00eJ7xAx+GlIt X-Google-Smtp-Source: APXvYqynV+g1Rd1KkG/ktJTyaAVqrf6wCsvbekxL4olyqpqmWwlLqG8Gd2udj5Paii+3rBbJ0Ith7Q== X-Received: by 2002:adf:e4c9:: with SMTP id v9mr3453152wrm.396.1570035122136; Wed, 02 Oct 2019 09:52:02 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.01 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:01 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 07/30] target/i386: add VMX features Date: Wed, 2 Oct 2019 18:51:30 +0200 Message-Id: <1570035113-56848-8-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Add code to convert the VMX feature words back into MSR values, allowing the user to enable/disable VMX features as they wish. The same infrastructure enables support for limiting VMX features in named CPU models. Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 225 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ target/i386/cpu.h | 9 +++ target/i386/kvm.c | 160 +++++++++++++++++++++++++++++++++++++- 3 files changed, 392 insertions(+), 2 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 83a3692..5b771f1 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -1232,6 +1232,163 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { .index = MSR_IA32_CORE_CAPABILITY, }, }, + + [FEAT_VMX_PROCBASED_CTLS] = { + .type = MSR_FEATURE_WORD, + .feat_names = { + NULL, NULL, "vmx-vintr-pending", "vmx-tsc-offset", + NULL, NULL, NULL, "vmx-hlt-exit", + NULL, "vmx-invlpg-exit", "vmx-mwait-exit", "vmx-rdpmc-exit", + "vmx-rdtsc-exit", NULL, NULL, "vmx-cr3-load-noexit", + "vmx-cr3-store-noexit", NULL, NULL, "vmx-cr8-load-exit", + "vmx-cr8-store-exit", "vmx-flexpriority", "vmx-vnmi-pending", "vmx-movdr-exit", + "vmx-io-exit", "vmx-io-bitmap", NULL, "vmx-mtf", + "vmx-msr-bitmap", "vmx-monitor-exit", "vmx-pause-exit", "vmx-secondary-ctls", + }, + .msr = { + .index = MSR_IA32_VMX_TRUE_PROCBASED_CTLS, + } + }, + + [FEAT_VMX_SECONDARY_CTLS] = { + .type = MSR_FEATURE_WORD, + .feat_names = { + "vmx-apicv-xapic", "vmx-ept", "vmx-desc-exit", "vmx-rdtscp-exit", + "vmx-apicv-x2apic", "vmx-vpid", "vmx-wbinvd-exit", "vmx-unrestricted-guest", + "vmx-apicv-register", "vmx-apicv-vid", "vmx-ple", "vmx-rdrand-exit", + "vmx-invpcid-exit", "vmx-vmfunc", "vmx-shadow-vmcs", "vmx-encls-exit", + "vmx-rdseed-exit", "vmx-pml", NULL, NULL, + "vmx-xsaves", NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .msr = { + .index = MSR_IA32_VMX_PROCBASED_CTLS2, + } + }, + + [FEAT_VMX_PINBASED_CTLS] = { + .type = MSR_FEATURE_WORD, + .feat_names = { + "vmx-intr-exit", NULL, NULL, "vmx-nmi-exit", + NULL, "vmx-vnmi", "vmx-preemption-timer", "vmx-posted-intr", + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .msr = { + .index = MSR_IA32_VMX_TRUE_PINBASED_CTLS, + } + }, + + [FEAT_VMX_EXIT_CTLS] = { + .type = MSR_FEATURE_WORD, + /* + * VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE is copied from + * the LM CPUID bit. + */ + .feat_names = { + NULL, NULL, "vmx-exit-nosave-debugctl", NULL, + NULL, NULL, NULL, NULL, + NULL, NULL /* vmx-exit-host-addr-space-size */, NULL, NULL, + "vmx-exit-load-perf-global-ctrl", NULL, NULL, "vmx-exit-ack-intr", + NULL, NULL, "vmx-exit-save-pat", "vmx-exit-load-pat", + "vmx-exit-save-efer", "vmx-exit-load-efer", + "vmx-exit-save-preemption-timer", "vmx-exit-clear-bndcfgs", + NULL, "vmx-exit-clear-rtit-ctl", NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .msr = { + .index = MSR_IA32_VMX_TRUE_EXIT_CTLS, + } + }, + + [FEAT_VMX_ENTRY_CTLS] = { + .type = MSR_FEATURE_WORD, + .feat_names = { + NULL, NULL, "vmx-entry-noload-debugctl", NULL, + NULL, NULL, NULL, NULL, + NULL, "vmx-entry-ia32e-mode", NULL, NULL, + NULL, "vmx-entry-load-perf-global-ctrl", "vmx-entry-load-pat", "vmx-entry-load-efer", + "vmx-entry-load-bndcfgs", NULL, "vmx-entry-load-rtit-ctl", NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .msr = { + .index = MSR_IA32_VMX_TRUE_ENTRY_CTLS, + } + }, + + [FEAT_VMX_MISC] = { + .type = MSR_FEATURE_WORD, + .feat_names = { + NULL, NULL, NULL, NULL, + NULL, "vmx-store-lma", "vmx-activity-hlt", "vmx-activity-shutdown", + "vmx-activity-wait-sipi", NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, "vmx-vmwrite-vmexit-fields", "vmx-zero-len-inject", NULL, + }, + .msr = { + .index = MSR_IA32_VMX_MISC, + } + }, + + [FEAT_VMX_EPT_VPID_CAPS] = { + .type = MSR_FEATURE_WORD, + .feat_names = { + "vmx-ept-execonly", NULL, NULL, NULL, + NULL, NULL, "vmx-page-walk-4", "vmx-page-walk-5", + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + "vmx-ept-2mb", "vmx-ept-1gb", NULL, NULL, + "vmx-invept", "vmx-eptad", "vmx-ept-advanced-exitinfo", NULL, + NULL, "vmx-invept-single-context", "vmx-invept-all-context", NULL, + NULL, NULL, NULL, NULL, + "vmx-invvpid", NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + "vmx-invvpid-single-addr", "vmx-invept-single-context", + "vmx-invvpid-all-context", "vmx-invept-single-context-noglobals", + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .msr = { + .index = MSR_IA32_VMX_EPT_VPID_CAP, + } + }, + + [FEAT_VMX_BASIC] = { + .type = MSR_FEATURE_WORD, + .feat_names = { + [54] = "vmx-ins-outs", + [55] = "vmx-true-ctls", + }, + .msr = { + .index = MSR_IA32_VMX_BASIC, + }, + /* Just to be safe - we don't support setting the MSEG version field. */ + .no_autoenable_flags = MSR_VMX_BASIC_DUAL_MONITOR, + }, + + [FEAT_VMX_VMFUNC] = { + .type = MSR_FEATURE_WORD, + .feat_names = { + [0] = "vmx-eptp-switching", + }, + .msr = { + .index = MSR_IA32_VMX_VMFUNC, + } + }, + }; typedef struct FeatureMask { @@ -1252,6 +1409,74 @@ static FeatureDep feature_dependencies[] = { .from = { FEAT_7_0_EDX, CPUID_7_0_EDX_CORE_CAPABILITY }, .to = { FEAT_CORE_CAPABILITY, ~0ull }, }, + { + .from = { FEAT_1_ECX, CPUID_EXT_VMX }, + .to = { FEAT_VMX_PROCBASED_CTLS, ~0ull }, + }, + { + .from = { FEAT_1_ECX, CPUID_EXT_VMX }, + .to = { FEAT_VMX_PINBASED_CTLS, ~0ull }, + }, + { + .from = { FEAT_1_ECX, CPUID_EXT_VMX }, + .to = { FEAT_VMX_EXIT_CTLS, ~0ull }, + }, + { + .from = { FEAT_1_ECX, CPUID_EXT_VMX }, + .to = { FEAT_VMX_ENTRY_CTLS, ~0ull }, + }, + { + .from = { FEAT_1_ECX, CPUID_EXT_VMX }, + .to = { FEAT_VMX_MISC, ~0ull }, + }, + { + .from = { FEAT_1_ECX, CPUID_EXT_VMX }, + .to = { FEAT_VMX_BASIC, ~0ull }, + }, + { + .from = { FEAT_8000_0001_EDX, CPUID_EXT2_LM }, + .to = { FEAT_VMX_ENTRY_CTLS, VMX_VM_ENTRY_IA32E_MODE }, + }, + { + .from = { FEAT_VMX_PROCBASED_CTLS, VMX_CPU_BASED_ACTIVATE_SECONDARY_CONTROLS }, + .to = { FEAT_VMX_SECONDARY_CTLS, ~0ull }, + }, + { + .from = { FEAT_XSAVE, CPUID_XSAVE_XSAVES }, + .to = { FEAT_VMX_SECONDARY_CTLS, VMX_SECONDARY_EXEC_XSAVES }, + }, + { + .from = { FEAT_1_ECX, CPUID_EXT_RDRAND }, + .to = { FEAT_VMX_SECONDARY_CTLS, VMX_SECONDARY_EXEC_RDRAND_EXITING }, + }, + { + .from = { FEAT_7_0_EBX, CPUID_7_0_EBX_INVPCID }, + .to = { FEAT_VMX_SECONDARY_CTLS, VMX_SECONDARY_EXEC_ENABLE_INVPCID }, + }, + { + .from = { FEAT_7_0_EBX, CPUID_7_0_EBX_RDSEED }, + .to = { FEAT_VMX_SECONDARY_CTLS, VMX_SECONDARY_EXEC_RDSEED_EXITING }, + }, + { + .from = { FEAT_8000_0001_EDX, CPUID_EXT2_RDTSCP }, + .to = { FEAT_VMX_SECONDARY_CTLS, VMX_SECONDARY_EXEC_RDTSCP }, + }, + { + .from = { FEAT_VMX_SECONDARY_CTLS, VMX_SECONDARY_EXEC_ENABLE_EPT }, + .to = { FEAT_VMX_EPT_VPID_CAPS, 0xffffffffull }, + }, + { + .from = { FEAT_VMX_SECONDARY_CTLS, VMX_SECONDARY_EXEC_ENABLE_EPT }, + .to = { FEAT_VMX_SECONDARY_CTLS, VMX_SECONDARY_EXEC_UNRESTRICTED_GUEST }, + }, + { + .from = { FEAT_VMX_SECONDARY_CTLS, VMX_SECONDARY_EXEC_ENABLE_VPID }, + .to = { FEAT_VMX_EPT_VPID_CAPS, 0xffffffffull << 32 }, + }, + { + .from = { FEAT_VMX_SECONDARY_CTLS, VMX_SECONDARY_EXEC_ENABLE_VMFUNC }, + .to = { FEAT_VMX_VMFUNC, ~0ull }, + }, }; typedef struct X86RegisterInfo32 { diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 23a30e1..c62e3b6 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -518,6 +518,15 @@ typedef enum FeatureWord { FEAT_XSAVE_COMP_HI, /* CPUID[EAX=0xd,ECX=0].EDX */ FEAT_ARCH_CAPABILITIES, FEAT_CORE_CAPABILITY, + FEAT_VMX_PROCBASED_CTLS, + FEAT_VMX_SECONDARY_CTLS, + FEAT_VMX_PINBASED_CTLS, + FEAT_VMX_EXIT_CTLS, + FEAT_VMX_ENTRY_CTLS, + FEAT_VMX_MISC, + FEAT_VMX_EPT_VPID_CAPS, + FEAT_VMX_BASIC, + FEAT_VMX_VMFUNC, FEATURE_WORDS, } FeatureWord; diff --git a/target/i386/kvm.c b/target/i386/kvm.c index 0a86c8c..7c5ad26 100644 --- a/target/i386/kvm.c +++ b/target/i386/kvm.c @@ -100,6 +100,7 @@ static bool has_msr_virt_ssbd; static bool has_msr_smi_count; static bool has_msr_arch_capabs; static bool has_msr_core_capabs; +static bool has_msr_vmx_vmfunc; static uint32_t has_architectural_pmu_version; static uint32_t num_architectural_pmu_gp_counters; @@ -448,7 +449,8 @@ uint64_t kvm_arch_get_supported_msr_feature(KVMState *s, uint32_t index) struct kvm_msrs info; struct kvm_msr_entry entries[1]; } msr_data; - uint32_t ret; + uint64_t value; + uint32_t ret, can_be_one, must_be_one; if (kvm_feature_msrs == NULL) { /* Host doesn't support feature MSRs */ return 0; @@ -474,7 +476,25 @@ uint64_t kvm_arch_get_supported_msr_feature(KVMState *s, uint32_t index) exit(1); } - return msr_data.entries[0].data; + value = msr_data.entries[0].data; + switch (index) { + case MSR_IA32_VMX_PROCBASED_CTLS2: + case MSR_IA32_VMX_TRUE_PINBASED_CTLS: + case MSR_IA32_VMX_TRUE_PROCBASED_CTLS: + case MSR_IA32_VMX_TRUE_ENTRY_CTLS: + case MSR_IA32_VMX_TRUE_EXIT_CTLS: + /* + * Return true for bits that can be one, but do not have to be one. + * The SDM tells us which bits could have a "must be one" setting, + * so we can do the opposite transformation in make_vmx_msr_value. + */ + must_be_one = (uint32_t)value; + can_be_one = (uint32_t)(value >> 32); + return can_be_one & ~must_be_one; + + default: + return value; + } } @@ -1939,6 +1959,9 @@ static int kvm_get_supported_msrs(KVMState *s) case MSR_IA32_CORE_CAPABILITY: has_msr_core_capabs = true; break; + case MSR_IA32_VMX_VMFUNC: + has_msr_vmx_vmfunc = true; + break; } } } @@ -2413,6 +2436,132 @@ static int kvm_put_msr_feature_control(X86CPU *cpu) return 0; } +static uint64_t make_vmx_msr_value(uint32_t index, uint32_t features) +{ + uint32_t default1, can_be_one, can_be_zero; + uint32_t must_be_one; + + switch (index) { + case MSR_IA32_VMX_TRUE_PINBASED_CTLS: + default1 = 0x00000016; + break; + case MSR_IA32_VMX_TRUE_PROCBASED_CTLS: + default1 = 0x0401e172; + break; + case MSR_IA32_VMX_TRUE_ENTRY_CTLS: + default1 = 0x000011ff; + break; + case MSR_IA32_VMX_TRUE_EXIT_CTLS: + default1 = 0x00036dff; + break; + case MSR_IA32_VMX_PROCBASED_CTLS2: + default1 = 0; + break; + default: + abort(); + } + + /* If a feature bit is set, the control can be either set or clear. + * Otherwise the value is limited to either 0 or 1 by default1. + */ + can_be_one = features | default1; + can_be_zero = features | ~default1; + must_be_one = ~can_be_zero; + + /* + * Bit 0:31 -> 0 if the control bit can be zero (i.e. 1 if it must be one). + * Bit 32:63 -> 1 if the control bit can be one. + */ + return must_be_one | (((uint64_t)can_be_one) << 32); +} + +#define VMCS12_MAX_FIELD_INDEX (0x17) + +static void kvm_msr_entry_add_vmx(X86CPU *cpu, FeatureWordArray f) +{ + uint64_t kvm_vmx_basic = + kvm_arch_get_supported_msr_feature(kvm_state, + MSR_IA32_VMX_BASIC); + uint64_t kvm_vmx_misc = + kvm_arch_get_supported_msr_feature(kvm_state, + MSR_IA32_VMX_MISC); + uint64_t kvm_vmx_ept_vpid = + kvm_arch_get_supported_msr_feature(kvm_state, + MSR_IA32_VMX_EPT_VPID_CAP); + + /* + * If the guest is 64-bit, a value of 1 is allowed for the host address + * space size vmexit control. + */ + uint64_t fixed_vmx_exit = f[FEAT_8000_0001_EDX] & CPUID_EXT2_LM + ? (uint64_t)VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE << 32 : 0; + + /* + * Bits 0-30, 32-44 and 50-53 come from the host. KVM should + * not change them for backwards compatibility. + */ + uint64_t fixed_vmx_basic = kvm_vmx_basic & + (MSR_VMX_BASIC_VMCS_REVISION_MASK | + MSR_VMX_BASIC_VMXON_REGION_SIZE_MASK | + MSR_VMX_BASIC_VMCS_MEM_TYPE_MASK); + + /* + * Same for bits 0-4 and 25-27. Bits 16-24 (CR3 target count) can + * change in the future but are always zero for now, clear them to be + * future proof. Bits 32-63 in theory could change, though KVM does + * not support dual-monitor treatment and probably never will; mask + * them out as well. + */ + uint64_t fixed_vmx_misc = kvm_vmx_misc & + (MSR_VMX_MISC_PREEMPTION_TIMER_SHIFT_MASK | + MSR_VMX_MISC_MAX_MSR_LIST_SIZE_MASK); + + /* + * EPT memory types should not change either, so we do not bother + * adding features for them. + */ + uint64_t fixed_vmx_ept_mask = + (f[FEAT_VMX_SECONDARY_CTLS] & VMX_SECONDARY_EXEC_ENABLE_EPT ? + MSR_VMX_EPT_UC | MSR_VMX_EPT_WB : 0); + uint64_t fixed_vmx_ept_vpid = kvm_vmx_ept_vpid & fixed_vmx_ept_mask; + + kvm_msr_entry_add(cpu, MSR_IA32_VMX_TRUE_PROCBASED_CTLS, + make_vmx_msr_value(MSR_IA32_VMX_TRUE_PROCBASED_CTLS, + f[FEAT_VMX_PROCBASED_CTLS])); + kvm_msr_entry_add(cpu, MSR_IA32_VMX_TRUE_PINBASED_CTLS, + make_vmx_msr_value(MSR_IA32_VMX_TRUE_PINBASED_CTLS, + f[FEAT_VMX_PINBASED_CTLS])); + kvm_msr_entry_add(cpu, MSR_IA32_VMX_TRUE_EXIT_CTLS, + make_vmx_msr_value(MSR_IA32_VMX_TRUE_EXIT_CTLS, + f[FEAT_VMX_EXIT_CTLS]) | fixed_vmx_exit); + kvm_msr_entry_add(cpu, MSR_IA32_VMX_TRUE_ENTRY_CTLS, + make_vmx_msr_value(MSR_IA32_VMX_TRUE_ENTRY_CTLS, + f[FEAT_VMX_ENTRY_CTLS])); + kvm_msr_entry_add(cpu, MSR_IA32_VMX_PROCBASED_CTLS2, + make_vmx_msr_value(MSR_IA32_VMX_PROCBASED_CTLS2, + f[FEAT_VMX_SECONDARY_CTLS])); + kvm_msr_entry_add(cpu, MSR_IA32_VMX_EPT_VPID_CAP, + f[FEAT_VMX_EPT_VPID_CAPS] | fixed_vmx_ept_vpid); + kvm_msr_entry_add(cpu, MSR_IA32_VMX_BASIC, + f[FEAT_VMX_BASIC] | fixed_vmx_basic); + kvm_msr_entry_add(cpu, MSR_IA32_VMX_MISC, + f[FEAT_VMX_MISC] | fixed_vmx_misc); + if (has_msr_vmx_vmfunc) { + kvm_msr_entry_add(cpu, MSR_IA32_VMX_VMFUNC, f[FEAT_VMX_VMFUNC]); + } + + /* + * Just to be safe, write these with constant values. The CRn_FIXED1 + * MSRs are generated by KVM based on the vCPU's CPUID. + */ + kvm_msr_entry_add(cpu, MSR_IA32_VMX_CR0_FIXED0, + CR0_PE_MASK | CR0_PG_MASK | CR0_NE_MASK); + kvm_msr_entry_add(cpu, MSR_IA32_VMX_CR4_FIXED0, + CR4_VMXE_MASK); + kvm_msr_entry_add(cpu, MSR_IA32_VMX_VMCS_ENUM, + VMCS12_MAX_FIELD_INDEX << 1); +} + static int kvm_put_msrs(X86CPU *cpu, int level) { CPUX86State *env = &cpu->env; @@ -2670,6 +2819,13 @@ static int kvm_put_msrs(X86CPU *cpu, int level) kvm_msr_entry_add(cpu, MSR_MC0_CTL + i, env->mce_banks[i]); } } + /* + * Older kernels do not include VMX MSRs in KVM_GET_MSR_INDEX_LIST, but + * all kernels with MSR features should have them. + */ + if (kvm_feature_msrs && cpu_has_vmx(env)) { + kvm_msr_entry_add_vmx(cpu, env->features); + } ret = kvm_vcpu_ioctl(CPU(cpu), KVM_SET_MSRS, cpu->kvm_msr_buf); if (ret < 0) { From patchwork Wed Oct 2 16:51:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171601 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5226913B1 for ; Wed, 2 Oct 2019 16:53:44 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 25CC021920 for ; Wed, 2 Oct 2019 16:53:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CKY8y2bk" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 25CC021920 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57706 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhsk-0007CC-VP for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 12:53:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35302) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrB-0005Ct-L9 for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrA-0003Co-KS for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:05 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:38774) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrA-0003Bs-Bz for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:04 -0400 Received: by mail-wr1-x441.google.com with SMTP id w12so20494305wro.5 for ; Wed, 02 Oct 2019 09:52:04 -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=U3fj+xNWWNXfmdtAjAlU14qxTz9PIMStcxxgkK/Civo=; b=CKY8y2bkZSLO4tm2tnPhELY/R+/TqMpvQedSOw6Tv/bA2h8iqN0KiD2kdZHmCmlWxi IdnLQDxZyqkS/f12ai47ialorCkVL2t2kUrFn8C6eOpTg4vMhoZToF1EZZZdRgJYK2YW sev0tfWYDFIh21soDgOl959p/3HO1oIAk58o8SeIJqsYDOg2XOGB5udHx6Zcfybs2s/z WW/v8kcFah5Z+IKnkOBY0txjrxQ8qt71wDaS+lDp/lLY1LxSs3yo8zQIXyasqjeqmxEJ MO89EDvYGDONMUCeRvcRPmp0pEH7PeOZAVbwEh/RZt2gS8zWoU9xXLLByvDjDtqEOjzL 7Gtw== 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=U3fj+xNWWNXfmdtAjAlU14qxTz9PIMStcxxgkK/Civo=; b=HiFtwWTl1Q7h1rZzIkU5ihuuTTiguOAZJW6LHChKtp9z+KxoCab6h2nEO6uBpsY9v1 zYUUoGK/pib+duxONnrybk4Cn0Zn2WAlR5I6PfNqvnmzbUwyt8HxZpzCJ18rmZJyChuB kb1cOgOGy8bzbzzfLNTRQ09sUbRYH1C84cKKG3AIgf/DLjTcAKHmIetz18xJfEIwPqzR vziJlZmKUoTAlMAg1poF581WgzIo5/HI9og83/l9rhOSE1LdE2ACQ/Vg5Ue8IZSrfL2b mHkxAnF+LA2H1fNlP31KXHOQePZ+QNi0fP3zbBRkgPo1+8UHNU5Qx+jsu2QCourjVMaE Oi4g== X-Gm-Message-State: APjAAAX+JonZ+NSnjbob9ALPaCRzuspmWUZgjxko16EhsiNSoaHcV0K4 nOdw8j8xQNeRlkhpVtSq5pe/ittr X-Google-Smtp-Source: APXvYqzwGAYEySuxFVf3S6XfRQQOwnf+uBFoLzB7tMfBFXIJ38Xn0KcDqps98o0zqWliA8BHHn4rnw== X-Received: by 2002:adf:9d87:: with SMTP id p7mr3339852wre.245.1570035123196; Wed, 02 Oct 2019 09:52:03 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.02 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:02 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 08/30] target/i386: work around KVM_GET_MSRS bug for secondary execution controls Date: Wed, 2 Oct 2019 18:51:31 +0200 Message-Id: <1570035113-56848-9-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::441 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Some secondary controls are automatically enabled/disabled based on the CPUID values that are set for the guest. However, they are still available at a global level and therefore should be present when KVM_GET_MSRS is sent to /dev/kvm. Unfortunately KVM forgot to include those, so fix that. Signed-off-by: Paolo Bonzini --- target/i386/kvm.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/target/i386/kvm.c b/target/i386/kvm.c index 7c5ad26..91d0bf6 100644 --- a/target/i386/kvm.c +++ b/target/i386/kvm.c @@ -479,6 +479,23 @@ uint64_t kvm_arch_get_supported_msr_feature(KVMState *s, uint32_t index) value = msr_data.entries[0].data; switch (index) { case MSR_IA32_VMX_PROCBASED_CTLS2: + /* KVM forgot to add these bits for some time, do this ourselves. */ + if (kvm_arch_get_supported_cpuid(s, 0xD, 1, R_ECX) & CPUID_XSAVE_XSAVES) { + value |= (uint64_t)VMX_SECONDARY_EXEC_XSAVES << 32; + } + if (kvm_arch_get_supported_cpuid(s, 1, 0, R_ECX) & CPUID_EXT_RDRAND) { + value |= (uint64_t)VMX_SECONDARY_EXEC_RDRAND_EXITING << 32; + } + if (kvm_arch_get_supported_cpuid(s, 7, 0, R_EBX) & CPUID_7_0_EBX_INVPCID) { + value |= (uint64_t)VMX_SECONDARY_EXEC_ENABLE_INVPCID << 32; + } + if (kvm_arch_get_supported_cpuid(s, 7, 0, R_EBX) & CPUID_7_0_EBX_RDSEED) { + value |= (uint64_t)VMX_SECONDARY_EXEC_RDSEED_EXITING << 32; + } + if (kvm_arch_get_supported_cpuid(s, 0x80000001, 0, R_EDX) & CPUID_EXT2_RDTSCP) { + value |= (uint64_t)VMX_SECONDARY_EXEC_RDTSCP << 32; + } + /* fall through */ case MSR_IA32_VMX_TRUE_PINBASED_CTLS: case MSR_IA32_VMX_TRUE_PROCBASED_CTLS: case MSR_IA32_VMX_TRUE_ENTRY_CTLS: From patchwork Wed Oct 2 16:51:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171621 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1A75414DB for ; Wed, 2 Oct 2019 17:00:57 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E519D20700 for ; Wed, 2 Oct 2019 17:00:56 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="E3JjPbvX" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E519D20700 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57766 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhzj-00077X-83 for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:00:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35316) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrC-0005E9-Lj for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrB-0003Dw-J4 for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:06 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:42466) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrB-0003Cz-C7 for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:05 -0400 Received: by mail-wr1-x443.google.com with SMTP id n14so20460588wrw.9 for ; Wed, 02 Oct 2019 09:52: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=7wcBLal9cVFkgaCtfQxJxYKhmsjCSuFD9FIEO060xXw=; b=E3JjPbvXTVE2hldjOBDhjC7atG3mYxKBtXCZPmFUTwd6fcJHdWHU4cb9asK/dieV9R 2p+iqFTDfYLDeWGhoFF/H+Hqf78jhhgC/X4kTehNTJwclDt/BhVRcwCRSB7USVYQk9b0 rc5DJmiJAOp/eYJM7FrswQnRyo3Pd6ob5coCk0zJIEGcKk1gHUpOxSSYfbTArU/uSCQ0 GX7yWYcLPGkY+rQHGp6lA+bvYBPbjx7HBUI/bklJkJroBA+7yrPu3FTVpPNJMMt0IyJ3 CGzImDWLTGb45E+423LBfWSlUkNboZk7urPqAUR/f75CDh0JsRlmSehcUhSA7gv0zOLS PuFg== 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=7wcBLal9cVFkgaCtfQxJxYKhmsjCSuFD9FIEO060xXw=; b=osoD9QV9AahzG9oVDQFAUarhguYD+t4Y9DrNQAg7NWV2bxbEyPdgdIm98mzwaOnu8T IKPwmHpNw02WClfhShYQ5uAWxVk9kozsOBRX+SkjqXVU+/lXchE6YLtwhuczYWxKEycg D9N5iYnET7mOHOjV0rz5SKiC9X8bquBr7qn9RQKbgaTwRUv1Vu0yI3R3H8gvuESo78V7 /JIae7keOCKrOj4xvR17+kYWCykU/dx5FTEjjOps2A+XFyGEhf9st71NWIbXS2RTnkHd jofN6aS1JzvT/BxdTUNGz06z5RkFhbVKyf01+vPVt79lE5HYVn5uNQAWsz90lvGZlxMN rGOw== X-Gm-Message-State: APjAAAWsXgqcS9yTw+wfylNwnU/VXLV+qIsUf+da/JPGrwbaHVurN2eN mY/BjNlKRrQCzsqoURm/iaEhpXy3 X-Google-Smtp-Source: APXvYqy0KlRLgifrLEwjYcOTemNjwZ6QTZcg1rWR0jwRMj/SQPvtBjcFeWzZviuWkFguOhQJAMivww== X-Received: by 2002:a05:6000:108c:: with SMTP id y12mr3383528wrw.238.1570035124117; Wed, 02 Oct 2019 09:52:04 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:03 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 09/30] target/i386/kvm: Silence warning from Valgrind about uninitialized bytes Date: Wed, 2 Oct 2019 18:51:32 +0200 Message-Id: <1570035113-56848-10-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Huth Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" From: Thomas Huth When I run QEMU with KVM under Valgrind, I currently get this warning: Syscall param ioctl(generic) points to uninitialised byte(s) at 0x95BA45B: ioctl (in /usr/lib64/libc-2.28.so) by 0x429DC3: kvm_ioctl (kvm-all.c:2365) by 0x51B249: kvm_arch_get_supported_msr_feature (kvm.c:469) by 0x4C2A49: x86_cpu_get_supported_feature_word (cpu.c:3765) by 0x4C4116: x86_cpu_expand_features (cpu.c:5065) by 0x4C7F8D: x86_cpu_realizefn (cpu.c:5242) by 0x5961F3: device_set_realized (qdev.c:835) by 0x7038F6: property_set_bool (object.c:2080) by 0x707EFE: object_property_set_qobject (qom-qobject.c:26) by 0x705814: object_property_set_bool (object.c:1338) by 0x498435: pc_new_cpu (pc.c:1549) by 0x49C67D: pc_cpus_init (pc.c:1681) Address 0x1ffeffee74 is on thread 1's stack in frame #2, created by kvm_arch_get_supported_msr_feature (kvm.c:445) It's harmless, but a little bit annoying, so silence it by properly initializing the whole structure with zeroes. Signed-off-by: Thomas Huth Signed-off-by: Paolo Bonzini --- target/i386/kvm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target/i386/kvm.c b/target/i386/kvm.c index 91d0bf6..522d9fd 100644 --- a/target/i386/kvm.c +++ b/target/i386/kvm.c @@ -188,7 +188,7 @@ static int kvm_get_tsc(CPUState *cs) struct { struct kvm_msrs info; struct kvm_msr_entry entries[1]; - } msr_data; + } msr_data = {}; int ret; if (env->tsc_valid) { @@ -448,7 +448,7 @@ uint64_t kvm_arch_get_supported_msr_feature(KVMState *s, uint32_t index) struct { struct kvm_msrs info; struct kvm_msr_entry entries[1]; - } msr_data; + } msr_data = {}; uint64_t value; uint32_t ret, can_be_one, must_be_one; From patchwork Wed Oct 2 16:51:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171623 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 484EC14DB for ; Wed, 2 Oct 2019 17:03:16 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1DA052086A for ; Wed, 2 Oct 2019 17:03:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Ivjd6S5Z" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1DA052086A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57792 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFi1y-0001JE-Gh for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:03:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35334) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrD-0005Fz-WC for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrC-0003FH-NU for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:07 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]:42860) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrC-0003EI-HF for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:06 -0400 Received: by mail-wr1-x42f.google.com with SMTP id n14so20460673wrw.9 for ; Wed, 02 Oct 2019 09:52: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=ifll5/5eB1MFcZ8TJk9YOAaxcs7m4U1lLr0Xs3jZVn4=; b=Ivjd6S5ZbLU3+swwis40VbqGcr2s6pDAyw/5dsLawnrhEC5vpj4fKtssAK0brJ0lsx 3shE//wx+ottfA53kVDulbZBDuT/j/ilx+OFaO1bOOBV2e3ECzQX2wRyuM0IonZAvOrf +dFPyNo+9jQPAniLEWjy0amchDi/h90smjM/Vxt7266Raw9AXtaaw5XQEub8uPo6rB7f rKiEvj2dpB0LcPsiT4GtcrO+52IUoYRGTFSGXE1Wj6iyjSMHYb8bJ8U7sAIpLJzdASdC 9t7IZCtZ3MH7zaFjLjPbD8PSkhdDmqbD/BY09FINNGjGmhrdiILnG2DjZuQGYrjb00np +KBQ== 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=ifll5/5eB1MFcZ8TJk9YOAaxcs7m4U1lLr0Xs3jZVn4=; b=Xuh1tPXy13mWGxq8cJpKMK6HRb+A3NBxTMMk419iIuaSzpFjWbh6Oftsg4WmlcVQm1 yFTA/PIg29NZwN+2bmYKmhUislJsOCdlkZs1B/zj+WP33CHD4+d0jJgNIFyHaawu59PA 41C5mGMW2xa8g2p7zPcnYs9gh9w6pj8l/8XHZGI9eCJmsqHpbkAPszbfjUQyGJ7PWD6h Q4zbJDlcaOoqJgP36NSkrkmLyeCVMQPuT5UchHU4azj9b4SnYR495lP13Zea1GAu9HBH sMOf0vjDpgypMqaDpwtjDg2CrE9PVaQ0v4EvpA0PZqnj3NFzweiYJU4bMk5oG+oKnYh6 7oEw== X-Gm-Message-State: APjAAAXG/bgAJcnhM6xMLphWeC/HBzzPoPFV5pmibkUi+JLXrfED2nH/ mnQPgXCsZ7tPM9lnVEt68POttPF8 X-Google-Smtp-Source: APXvYqymOtbiG/o5NYEYtBgOXdi31vTSX9OG376Hg9XUGr+HUr5G/wnRKIef7yt3IEd23lZ+nV0yuA== X-Received: by 2002:a5d:60c8:: with SMTP id x8mr1089931wrt.107.1570035125178; Wed, 02 Oct 2019 09:52:05 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:04 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 10/30] qemu-pr-helper: fix crash in mpath_reconstruct_sense Date: Wed, 2 Oct 2019 18:51:33 +0200 Message-Id: <1570035113-56848-11-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Maxim Levitsky Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" From: Maxim Levitsky The 'r' variable was accidently shadowed, and because of this we were always passing 0 to mpath_generic_sense, instead of original return value, which triggers an abort() This is an attempt to fix the https://bugzilla.redhat.com/show_bug.cgi?id=1720047 although there might be other places in the code that trigger qemu-pr-helper crash, and this fix might not be the root cause. The crash was reproduced by creating an iscsi target on a test machine, and passing it twice to the guest like that: -blockdev node-name=idisk0,driver=iscsi,transport=...,target=... -device scsi-block,drive=idisk0,bus=scsi0.0,bootindex=-1,scsi-id=1,lun=0,share-rw=on -device scsi-block,drive=idisk0,bus=scsi0.0,bootindex=-1,scsi-id=1,lun=1,share-rw=on Then in the guest, both /dev/sda and /dev/sdb were aggregated by multipath to /dev/mpatha, which was passed to a nested guest like that -object pr-manager-helper,id=qemu_pr_helper,path=/root/work/vm/testvm/.run/pr_helper.socket -blockdev node-name=test,driver=host_device,filename=/dev/mapper/mpatha,pr-manager=qemu_pr_helper -device scsi-block,drive=test,bus=scsi0.0,bootindex=-1,scsi-id=0,lun=0 The nested guest run: sg_persist --no-inquiry -v --out --register --param-sark 0x1234 /dev/sda Strictly speaking this is wrong configuration since qemu is where the multipath was split, and thus the iscsi target was not aware of multipath, and thus when libmpathpersist code rightfully tried to register the PR key on all paths, it failed to do so. However qemu-pr-helper should not crash in this case. Signed-off-by: Maxim Levitsky Signed-off-by: Paolo Bonzini --- scsi/qemu-pr-helper.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scsi/qemu-pr-helper.c b/scsi/qemu-pr-helper.c index a8a74d1..debb18f 100644 --- a/scsi/qemu-pr-helper.c +++ b/scsi/qemu-pr-helper.c @@ -323,10 +323,10 @@ static int mpath_reconstruct_sense(int fd, int r, uint8_t *sense) */ uint8_t cdb[6] = { TEST_UNIT_READY }; int sz = 0; - int r = do_sgio(fd, cdb, sense, NULL, &sz, SG_DXFER_NONE); + int ret = do_sgio(fd, cdb, sense, NULL, &sz, SG_DXFER_NONE); - if (r != GOOD) { - return r; + if (ret != GOOD) { + return ret; } scsi_build_sense(sense, mpath_generic_sense(r)); return CHECK_CONDITION; From patchwork Wed Oct 2 16:51:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171645 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 44626112B for ; Wed, 2 Oct 2019 17:04:47 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1A5342086A for ; Wed, 2 Oct 2019 17:04:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YVSdebq9" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1A5342086A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57802 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFi3R-0002hc-LJ for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:04:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35341) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrE-0005Gw-LT for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrD-0003GI-JK for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:08 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:50889) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrD-0003FS-D0 for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:07 -0400 Received: by mail-wm1-x342.google.com with SMTP id 5so7993482wmg.0 for ; Wed, 02 Oct 2019 09:52: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=ouS0dB8g9W/9/ob84vsKA1eSX6rKfJNGsZsisdoDFcw=; b=YVSdebq9N+VVNwzMRuujIk64rU+jbNcFM+zQO9E94CTzXFjGJw2ni4cb6BKk5WFJxB hV1h3UJOg0n/0Deix9IKGq2eKPlRF2RCYu23qC4nYuYY9GizZeCUQyMohqkhI2W4JjJJ EZcXoKOA0KFPRbFH7D84LBUYgxuhrpIPdI2gb6LmPLAdD9lxxsjrrI/xfF1E/1wBlRXT 1cVggENFn0XcoNh7qhWkOdZCoB1/iuxhTCUIC7VjiPh0wXIG7qWjdG/YzLWAAG3Xfh9u mxAfX2mtQjrS4EcsTBiIKdVTDtaybXBTQvNN7CwDLv8PevW0WOgkk4Sgrdq8gK4bVmKb DuKA== 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=ouS0dB8g9W/9/ob84vsKA1eSX6rKfJNGsZsisdoDFcw=; b=ckgHTl1sMH6gBHW/0ClqxIECkOvj0U1o6Vb4iRALBvyLT7ehzGCtxu1ALHvTfNI1tn 922JJN250ck9Lyh/X0N/9USB6hM7vwe7DLdzWhXGO1BX3KJsG6mIvwIrWd6S3KgJfeLP fT3VLEkzHp2oC6flJpNIuBaznC/I9p1vSh6vDBeMLFLuBxp7H5dJlP5S60oeqjen2mma xOt4MlCOAxAguGbUTbQICEIlSzB+nYbFr/iOXQI79Iecmn/Mt7li2HUAdAEeJXVoaXoL VdhnBNR6UzxefNRqqU5eganUmzdy6fpJb8CGH1NK6l/Rb6UL2rU13Y/XCDDlp+DXUJlm WRnQ== X-Gm-Message-State: APjAAAVE4Aborg+7AQdfiux51PhFh10QsFJCP/jyfljbSL9hx4PEeP2k PHLYpYqwjfko6Nj7IexQwi++LV1G X-Google-Smtp-Source: APXvYqxP0f5RPNxZaxPFgXrXHZCUj6EEUEHThXWyQWYA0eZAYxwmJq4FLR8OybW6GZgyp8yG/5oiOA== X-Received: by 2002:a1c:1b14:: with SMTP id b20mr3407087wmb.122.1570035126229; Wed, 02 Oct 2019 09:52:06 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:05 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 11/30] replay: don't synchronize memory operations in replay mode Date: Wed, 2 Oct 2019 18:51:34 +0200 Message-Id: <1570035113-56848-12-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::342 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Pavel Dovgalyuk , Pavel Dovgalyuk Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" From: Pavel Dovgalyuk Commit 9458a9a1df1a4c719e24512394d548c1fc7abd22 added synchronization of vCPU and migration operations through calling run_on_cpu operation. However, in replay mode this synchronization is unneeded, because I/O and vCPU threads are already synchronized. This patch disables such synchronization for record/replay mode. Signed-off-by: Pavel Dovgalyuk Signed-off-by: Paolo Bonzini Signed-off-by: Pavel Dovgalyuk --- exec.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/exec.c b/exec.c index 8a0a661..1d6e4d8 100644 --- a/exec.c +++ b/exec.c @@ -2959,8 +2959,17 @@ static void tcg_log_global_after_sync(MemoryListener *listener) * by pushing the migration thread's memory read after the vCPU thread has * written the memory. */ - cpuas = container_of(listener, CPUAddressSpace, tcg_as_listener); - run_on_cpu(cpuas->cpu, do_nothing, RUN_ON_CPU_NULL); + if (replay_mode == REPLAY_MODE_NONE) { + /* + * VGA can make calls to this function while updating the screen. + * In record/replay mode this causes a deadlock, because + * run_on_cpu waits for rr mutex. Therefore no races are possible + * in this case and no need for making run_on_cpu when + * record/replay is not enabled. + */ + cpuas = container_of(listener, CPUAddressSpace, tcg_as_listener); + run_on_cpu(cpuas->cpu, do_nothing, RUN_ON_CPU_NULL); + } } static void tcg_commit(MemoryListener *listener) From patchwork Wed Oct 2 16:51:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171647 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B3B62112B for ; Wed, 2 Oct 2019 17:06:55 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 898CE2086A for ; Wed, 2 Oct 2019 17:06:55 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="tETMFwNG" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 898CE2086A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57820 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFi5W-0005HX-1V for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:06:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35356) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrF-0005Ia-WC for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrE-0003HU-MF for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:09 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:33854) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrE-0003GZ-GB for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:08 -0400 Received: by mail-wm1-x341.google.com with SMTP id y135so5358697wmc.1 for ; Wed, 02 Oct 2019 09:52: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=orwZmwJz4TFkQtH30UdbtL2NHAyTnKMIxHRZCfSWvJU=; b=tETMFwNG79kT+wKZgD6uIf28CdGeqW0rn9bFlc/BfNxgP9GM+U3PPQYpVkYYH66JkV OYjStpIJI4gLKda2whdqRWQXRN7SSi+bMZTjemPi8iZAP9LGz6ztwOP4OvSfDP33+KDY svRLgp4qQwxzu73ADDX2DKOXP/mAb8PupT78sxv1oo8X0lW+spRD67iJqVXmNWi709Gk CiPXKDE1NVf/7sEr0WCDRIZHMWj2Y4bsoFcwzLWVjHWHY5i90KQ7/kPUyXEYgUnacrdr c83WkmNwNzJD8gMF/PKc6kuEd8pwK0xtN9Ib40BnBod/XP5sZjf+jOrVOcKRsvsh4Nat niWA== 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=orwZmwJz4TFkQtH30UdbtL2NHAyTnKMIxHRZCfSWvJU=; b=sAPf4hFvbvphf5eX/HEQ+4JkgOv84nKwPvB9x2jR0NZE2CGhI5Ntdt9kvaNHuxgwWA DW7KfhS1RWcsBzW6KOfCzwbggifmQmFVjiKk0rBYJi4mzY9jJ1OapLh2+A83CHle2OTJ lpU/XXJB3gKoWerNNr7q/31eFS9jb8VO0XxUU8vGw+dAqSJnfG1wv1ZkhcAbHZkpkUCd 1BMLO+Bk1mY1QT7uTZe/kvYLBGgikyAl/gTKI81Y66RK5l8V5ozzxuGA7gl9UYmKvQ/L Nbt9rOO0EfqaJd5B1NOZUiOQLKTXxvkiYEG0JTSU5JTP1mCwfW0hpc2Rt3gzSer+zZ+Y R/rw== X-Gm-Message-State: APjAAAXsWxRVtSG2CaAKgSg+Gfz2otWyqTZ+cGdhdvOhPxEU03RvUcxi EWQW5/8zIe+94ckgK4EPfSG1lbp1 X-Google-Smtp-Source: APXvYqz9UaMLInZm1agxeG8vsmEztHbAWIku6qOGVGEBD5imsL9APqwV4bOAWYzmk/wRemGj3/hp9w== X-Received: by 2002:a1c:d185:: with SMTP id i127mr3677163wmg.28.1570035127169; Wed, 02 Oct 2019 09:52:07 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:06 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 12/30] Makefile: Remove generated files when doing 'distclean' Date: Wed, 2 Oct 2019 18:51:35 +0200 Message-Id: <1570035113-56848-13-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::341 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Huth Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" From: Thomas Huth When running "make distclean" we currently leave a lot of generated files in the build directory. Fix that. Signed-off-by: Thomas Huth Reviewed-by: John Snow Signed-off-by: Paolo Bonzini --- Makefile | 6 +++--- tests/Makefile.include | 12 +++++++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 8da3359..47b1e1f 100644 --- a/Makefile +++ b/Makefile @@ -696,14 +696,14 @@ clean: recurse-clean -exec rm {} + rm -f $(edk2-decompressed) rm -f $(filter-out %.tlb,$(TOOLS)) $(HELPERS-y) TAGS cscope.* *.pod *~ */*~ - rm -f fsdev/*.pod scsi/*.pod + rm -f fsdev/*.pod scsi/*.pod docs/*.pod docs/*/*.pod docs/*/.buildinfo rm -f qemu-img-cmds.h rm -f ui/shader/*-vert.h ui/shader/*-frag.h @# May not be present in generated-files-y rm -f trace/generated-tracers-dtrace.dtrace* rm -f trace/generated-tracers-dtrace.h* rm -f $(foreach f,$(generated-files-y),$(f) $(f)-timestamp) - rm -f qapi-gen-timestamp + rm -f qapi-gen-timestamp vhost-user-input rm -rf qga/qapi-generated rm -f config-all-devices.mak @@ -724,7 +724,7 @@ distclean: clean rm -f tests/tcg/config-*.mak rm -f config-all-devices.mak config-all-disas.mak config.status rm -f $(SUBDIR_DEVICES_MAK) - rm -f po/*.mo tests/qemu-iotests/common.env + rm -f po/*.mo rm -f roms/seabios/config.mak roms/vgabios/config.mak rm -f qemu-doc.info qemu-doc.aux qemu-doc.cp qemu-doc.cps rm -f qemu-doc.fn qemu-doc.fns qemu-doc.info qemu-doc.ky qemu-doc.kys diff --git a/tests/Makefile.include b/tests/Makefile.include index 3543451..48b52da 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -1176,11 +1176,21 @@ check: check-block check-qapi-schema check-unit check-softfloat check-qtest chec check-clean: rm -rf $(check-unit-y) tests/*.o $(QEMU_IOTESTS_HELPERS-y) rm -rf $(sort $(foreach target,$(SYSEMU_TARGET_LIST), $(check-qtest-$(target)-y)) $(check-qtest-generic-y)) - rm -f tests/test-qapi-gen-timestamp rm -rf $(TESTS_VENV_DIR) $(TESTS_RESULTS_DIR) + rm -f tests/qemu-iotests/common.env tests/qemu-iotests/check.* + rm -f tests/test-qapi-gen-timestamp tests/qht-bench$(EXESUF) \ + tests/fp/fp-test tests/fp/*.out tests/qapi-schema/*.test.* clean: check-clean +check-distclean: + rm -f tests/test-qapi-types*.c tests/test-qapi-visit*.c \ + tests/test-qapi-commands*.c tests/test-qapi-events*.c \ + tests/test-qapi-emit-events.[ch] tests/test-qapi-introspect.c \ + tests/include/test-qapi-*.c + +distclean: check-distclean + # Build the help program automatically all: $(QEMU_IOTESTS_HELPERS-y) From patchwork Wed Oct 2 16:51:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171617 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6A0BE13B1 for ; Wed, 2 Oct 2019 16:59:36 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4062421920 for ; Wed, 2 Oct 2019 16:59:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="sp55rzD4" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4062421920 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57756 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhyQ-0005wE-Ql for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 12:59:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35366) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrH-0005Jw-1T for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrF-0003IX-NS for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:10 -0400 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]:52612) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrF-0003Hm-HN for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:09 -0400 Received: by mail-wm1-x335.google.com with SMTP id r19so7971682wmh.2 for ; Wed, 02 Oct 2019 09:52: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 :mime-version:content-transfer-encoding; bh=OfES0nT3k6Z9LTQ7lYjY3cIAvS5cOEPfvSwDFax1+oI=; b=sp55rzD4mHywNngoU3mlFw0WfGRnvEfa6IoPKvHFS3fMPXXVDk5BTEcfcZfzoa82mX +h85Q5XKmok0hiDnfgx+sqscYk3qA1XKS5v5/874qBjHwm/yWLy51E4FGzWkxTKzvZNM boiNhWIkuMTNY9AXxK6TPZmdsPpQwwE3gotq3lRf5KEjIn5tSsWd/ckboLRJIAuGmeM3 HOwy8KyGZUrBjFgas48zKeNUOwoQxWWnYBIF3yH1WGWDOkk63aulI5tIGvCYfJl/xqdc gLEDAdcmG7zl8br7k1zhi0Ub2sGKN+WCBk7zGEurGne2CBqb9gpbBW70YEcm8nFEe1Ox 454Q== 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=OfES0nT3k6Z9LTQ7lYjY3cIAvS5cOEPfvSwDFax1+oI=; b=oKN6gSDWDBnQH3aqUIwW6DJVjdxxaiAkz/HOUE35RZN9xgEp1oXblaLHqmeLNbk2yF xbY5ksvkT5KJpBlZvRb40kfu3qzLhC3w43UjrtVfw8urtciMDeo5Uj9SCGq6f0eAV/4b Qj89nsD1O3ZrWR9yOkaBV4JvZOJrPop3n8Xy42+R57htk6f1/XZ0osBbBT9Mknc05E+e mlidmsSETmthi1pAe7gmOkM2T6/U9kgkrC15YR7xlyEEKUoazGVq393IMAnQlrDUGpp7 utB0T5p0fzfkU+Y5gkI/pgy84GBGw6B3XhjUrHHKORp1vW3zzq5zRGvJnvqWciEQFLpJ LhXQ== X-Gm-Message-State: APjAAAWDcDfFCWLM39xbWo71T6gEOMnab+pw9qj65I1FYiIAqZ2/cjnT A5TvHc6o8b6gh5QR0qIr5GM1lluY X-Google-Smtp-Source: APXvYqzktRvSs54ozypdhBgAjRyW34oohMdJDQlTbQk6il5ofaTuTr9DVedQMASJVA5HOW7FQXYFmg== X-Received: by 2002:a1c:1f89:: with SMTP id f131mr3486276wmf.72.1570035128153; Wed, 02 Oct 2019 09:52:08 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:07 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 13/30] hw/isa: Introduce a CONFIG_ISA_SUPERIO switch for isa-superio.c Date: Wed, 2 Oct 2019 18:51:36 +0200 Message-Id: <1570035113-56848-14-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::335 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Huth Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" From: Thomas Huth Currently, isa-superio.c is always compiled as soon as CONFIG_ISA_BUS is enabled. But there are also machines that have an ISA BUS without any of the superio chips attached to it, so we should not compile isa-superio.c in case we only compile a QEMU for such a machine. Thus add a proper CONFIG_ISA_SUPERIO switch so that this file only gets compiled when we really, really need it. Signed-off-by: Thomas Huth Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Paolo Bonzini --- hw/isa/Kconfig | 10 +++++++--- hw/isa/Makefile.objs | 2 +- hw/mips/Kconfig | 1 + 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/hw/isa/Kconfig b/hw/isa/Kconfig index 6db0d79..98a2899 100644 --- a/hw/isa/Kconfig +++ b/hw/isa/Kconfig @@ -13,9 +13,13 @@ config I82378 select MC146818RTC select PCSPK -config PC87312 +config ISA_SUPERIO bool select ISA_BUS + +config PC87312 + bool + select ISA_SUPERIO select I8259 select I8254 select I8257 @@ -34,14 +38,14 @@ config PIIX4 config VT82C686 bool - select ISA_BUS + select ISA_SUPERIO select ACPI_SMBUS select SERIAL_ISA select FDC config SMC37C669 bool - select ISA_BUS + select ISA_SUPERIO select SERIAL_ISA select PARALLEL select FDC diff --git a/hw/isa/Makefile.objs b/hw/isa/Makefile.objs index 9e106df..ff97485 100644 --- a/hw/isa/Makefile.objs +++ b/hw/isa/Makefile.objs @@ -1,5 +1,5 @@ common-obj-$(CONFIG_ISA_BUS) += isa-bus.o -common-obj-$(CONFIG_ISA_BUS) += isa-superio.o +common-obj-$(CONFIG_ISA_SUPERIO) += isa-superio.o common-obj-$(CONFIG_APM) += apm.o common-obj-$(CONFIG_I82378) += i82378.o common-obj-$(CONFIG_PC87312) += pc87312.o diff --git a/hw/mips/Kconfig b/hw/mips/Kconfig index 62aa01b..2c2adbc 100644 --- a/hw/mips/Kconfig +++ b/hw/mips/Kconfig @@ -13,6 +13,7 @@ config R4K config MALTA bool + select ISA_SUPERIO config MIPSSIM bool From patchwork Wed Oct 2 16:51:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171671 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id EE5A776 for ; Wed, 2 Oct 2019 17:10:00 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C4B852086A for ; Wed, 2 Oct 2019 17:10:00 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LackDA61" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C4B852086A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57844 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFi8V-0000Us-AG for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:09:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35379) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrH-0005Ku-NR for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrG-0003Jr-PF for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:11 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:37566) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrG-0003Iw-Jb for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:10 -0400 Received: by mail-wm1-x344.google.com with SMTP id f22so7708260wmc.2 for ; Wed, 02 Oct 2019 09:52:10 -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=iz9uDsoXfYTqHHYiw4kw2GlIgMTkxYJyyAIl7JwKIzw=; b=LackDA61KpmL+54zZOQ7LkQXbAfDSmZpp+jD1getURoorxoN/S0kBF8Io3m2w6RZTh pJ8XRW5BKHa5KltRmhq1ZquZr14SubZDwqufJ1E1O8U5rvq8vN8pzcKpWdovz3NCSUlT hX0pQzcXhWp596iPvAI0f8B/VAkPtfvkslrNd83RNhWNH2S+YjG+oeRy+jIIzviVMs7y 6xlr3zHEQiXagqroUkT6h0nPQZ50DD/5gRe3YzgTSRYqtsE2OvdjE/YLZThOb39t1GJU HyQs97uuisztsek8885nN1e8cWPsmWqUXz8um7PgkZXkN2O4kw9v419ryskFYtKgXFnS ylEQ== 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=iz9uDsoXfYTqHHYiw4kw2GlIgMTkxYJyyAIl7JwKIzw=; b=aoQQ/yo7ldWAoucORdRobxcULUh9HeXnpH7In2XkG0xvecgiQdAbulxPYV0AmzekMU iDD+h76eifXHyV6TU9siUTHwgA5n/cfE0PX1LJ6m18+lDom5EZ+VGRlBB0QtHaTA1j5G eUPToVOqx84Nj4Yd4fbHzLKyGGTk5kq8Of7EXwmwTSCvto+2t5upRAplZ1x2M0b2Ky1P DA41l/BcAotIG+L65bUkxyfwY4eWYi5gVQxJllH4OWZ4dSehOyrTv7vxEw8RSd/ebVZK DvHz3pJybUPWDA5Ly7tUGFDFHNJLCcOu9KAInMMhiRta4yvj43BZcZUrGXsZUMv5eTUp 7QYQ== X-Gm-Message-State: APjAAAVnLIj3xaM39TapaRtR8PmJIEEqFRGLd8vjhyJqjcoCjPnclAXJ p1breLYjiTx7nVFbXcRDIrR4kF2/ X-Google-Smtp-Source: APXvYqx+q6+3TBj3Krcfkijv+tsu7dv4hY+T1FvDAfKZxcZF/f9atIq90mmSj5qq/T4GWhX8V/vmRg== X-Received: by 2002:a1c:dd0a:: with SMTP id u10mr3598853wmg.100.1570035129276; Wed, 02 Oct 2019 09:52:09 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.08 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:08 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 14/30] ide: fix leak from qemu_allocate_irqs Date: Wed, 2 Oct 2019 18:51:37 +0200 Message-Id: <1570035113-56848-15-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::344 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" The array returned by qemu_allocate_irqs is malloced, free it. Signed-off-by: Paolo Bonzini Reviewed-by: Thomas Huth --- hw/ide/cmd646.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/ide/cmd646.c b/hw/ide/cmd646.c index f3ccd11..19984d2 100644 --- a/hw/ide/cmd646.c +++ b/hw/ide/cmd646.c @@ -300,6 +300,7 @@ static void pci_cmd646_ide_realize(PCIDevice *dev, Error **errp) d->bmdma[i].bus = &d->bus[i]; ide_register_restart_cb(&d->bus[i]); } + g_free(irq); vmstate_register(DEVICE(dev), 0, &vmstate_ide_pci, d); qemu_register_reset(cmd646_reset, d); From patchwork Wed Oct 2 16:51:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171669 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CBE62112B for ; Wed, 2 Oct 2019 17:07:55 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A1C6D2086A for ; Wed, 2 Oct 2019 17:07:55 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Ko81eOA4" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A1C6D2086A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57826 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFi6U-0006We-DN for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:07:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35392) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrJ-0005M9-Ov for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrH-0003L0-M0 for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:12 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:53245) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrH-0003K3-Fo for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:11 -0400 Received: by mail-wm1-x343.google.com with SMTP id r19so7971807wmh.2 for ; Wed, 02 Oct 2019 09:52:11 -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 :mime-version:content-transfer-encoding; bh=+WoidffDv7dztB6biS4Cazx9LEmSg+eKdaHtEuHIgho=; b=Ko81eOA4vN4HlZEfnv5+DmLU6K0OFaHc9nt4EO7Kt7/E1UPEstQuKX0cEFxgUJfBds TKDK0wl2wbiB4IScynGrRt6HvkQf1lGgIOxGQIi2DpIAy62JDt9Erfs6JKEZyq7v/UjZ MfDxrCQt8HJ5kKKFbp0iyF+SFktSc/m88S3xcOjtth9vCq+koWb9RKtABV7QYPfMmjkT mj9vMZk1YvT1DuJ80U6wgJ52YiJ0ZLrzXszXzg/+w1tU0QOSKX+iGDDwKIM6JPW2axzA Im+AnAX7V1iXaAtmnOE7n26ogKMnKGrof/kv9CR2bWHBKh7M/BoDAXm0YH+DxAKhyOWb UxAg== 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:mime-version:content-transfer-encoding; bh=+WoidffDv7dztB6biS4Cazx9LEmSg+eKdaHtEuHIgho=; b=EzwbkYLGw97PH0vdT9lQJ9VullbCudffmRfOGK6/9bBEX+Ecw+dNpwZwIg6jar/Dbe L2s0yR3swMSHyVkqGSoL7Jmczk9gTU76iMLozqfttyY+myusDjHObecNBoFhsaiBxKi4 4IDpUJ4sCDCZYIFtsJtVV4SNcohwGupEmv/O04sBRwmFuceb8ilbBUJHcj+AV8IQUHYc n6z8M5NPGIkIwZ1JI69wYGsYLMuxXsseMubRP16VoX8pdvlGv6+/3mmKR5OzJDURQJR4 3FMcrJFoTS/WeDCIFqR7SPlm64ZZ53IYObFlJghsIxtf7gn7bBOGe2Gy4brHY1IuB6Tj S7Gw== X-Gm-Message-State: APjAAAVZTXOfBK7MtsBknb/JmVVP/fGXNGmqC8+65ms4H4phHLsNCNLw 3t/ozCBQLypO2XyEe15Lb+/1Io3J X-Google-Smtp-Source: APXvYqyw7eIRYDlkp4E1IB3NzsMgZlO1HTVH4dlVNE5TeH6UPFIG/X0DolIToGGcwx5CnOUVW4GtqQ== X-Received: by 2002:a7b:c5c2:: with SMTP id n2mr3554008wmk.20.1570035130240; Wed, 02 Oct 2019 09:52:10 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.09 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:09 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 15/30] microblaze: fix leak of fdevice tree blob Date: Wed, 2 Oct 2019 18:51:38 +0200 Message-Id: <1570035113-56848-16-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::343 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" The device tree blob returned by load_device_tree is malloced. Free it before returning. Signed-off-by: Paolo Bonzini Reviewed-by: Philippe Mathieu-Daudé --- hw/microblaze/boot.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/microblaze/boot.c b/hw/microblaze/boot.c index bade4d2..d1d7dfb 100644 --- a/hw/microblaze/boot.c +++ b/hw/microblaze/boot.c @@ -100,6 +100,7 @@ static int microblaze_load_dtb(hwaddr addr, } cpu_physical_memory_write(addr, fdt, fdt_size); + g_free(fdt); return fdt_size; } From patchwork Wed Oct 2 16:51:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171681 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9740276 for ; Wed, 2 Oct 2019 17:13:02 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6CE412054F for ; Wed, 2 Oct 2019 17:13:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OaeSiMzq" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6CE412054F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57878 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFiBR-0003y0-9r for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:13:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35399) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrJ-0005NX-Mc for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrI-0003MC-RA for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:13 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:51956) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrI-0003LS-LJ for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:12 -0400 Received: by mail-wm1-x342.google.com with SMTP id 7so7980621wme.1 for ; Wed, 02 Oct 2019 09:52:12 -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=ctHqzmF5TD8AB7smZxOhtvuEQnZ1yozHJ+9MqxlkUs0=; b=OaeSiMzqglA9jbgYLidNul4LVSa+ezpPObr8nrH34VlW53Diilqgig/XNy6vcsgDA6 oGJf20POMjWhJVe4uAb5+B9b8p7Vy63jxgiugiRjcjtUIBm/9fItTAU4azemxY9J+mGo 5iCP4aeA/XpbnLlIZpohBnX3dxH7TsO6lKxHhnPwQU1u8uVsh/Bh2JmorttXlaOXDaox d8Oha6ipz545+cRUukq/KwaiAqzflI0BqjIdn//5KU+yGScQ7aLHIF4jeDEHO9rdHvoC 3AN0kgPn41lSUUGr03A1FgIgvbQZvGHiKcDXHJ9TK/KKhxotkgNUYKmTMFL29bsKbeRb kjEQ== 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=ctHqzmF5TD8AB7smZxOhtvuEQnZ1yozHJ+9MqxlkUs0=; b=lB4IKQBppHEQd5pq2QL8gnlnRJ0ey55WXzpCKbiQbl8dnd4H0RrL7hKLtq7PoQ9MMr /LhL7A/6ygmHLWgjTd5lpWm23EWraDlbJBUYTcN/yb2YBUvNF/wCpWDKJSC1N6jKqUPu nN2mK5nOWlTKhjD8tVUvZ+8sJVPFkZymVoRQlDkTIaBXqqYjva2TUnMjf0gakioe8X/6 yF2UjqHQYXgfDacy5WsmVud0GhaWe015IAP54uCimYS1YcdsNrV/Y7svSrWLSZRN/2lt LwtNnZNKWlGmIw3g4sNVY6Mf6h9gzaMWmFZURthz712mQDB1zkDbxRZAZ9sZNRPp54FE 19JQ== X-Gm-Message-State: APjAAAUHYPqViwzzsuYD1MKfHYMO7eNSuIvuztbrIrn/eIHJmKBGvE1F uEBSSos8FOYgGirU9Eq2U90xzk6i X-Google-Smtp-Source: APXvYqxRaGm2dI0X4OgyKUrl9NdufBR2pkadAxmrTrHFFn1gWKsTHjrDLxjd+UjCS3PiosMexeaYmw== X-Received: by 2002:a05:600c:2057:: with SMTP id p23mr3558370wmg.17.1570035131366; Wed, 02 Oct 2019 09:52:11 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.10 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:10 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 16/30] mcf5208: fix leak from qemu_allocate_irqs Date: Wed, 2 Oct 2019 18:51:39 +0200 Message-Id: <1570035113-56848-17-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::342 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" The array returned by qemu_allocate_irqs is malloced, free it. Signed-off-by: Paolo Bonzini Reviewed-by: Thomas Huth --- hw/m68k/mcf5208.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/m68k/mcf5208.c b/hw/m68k/mcf5208.c index 012710d..60c5802 100644 --- a/hw/m68k/mcf5208.c +++ b/hw/m68k/mcf5208.c @@ -273,6 +273,8 @@ static void mcf5208evb_init(MachineState *machine) 0xfc030000, pic + 36); } + g_free(pic); + /* 0xfc000000 SCM. */ /* 0xfc004000 XBS. */ /* 0xfc008000 FlexBus CS. */ From patchwork Wed Oct 2 16:51:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171619 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id EF38013B1 for ; Wed, 2 Oct 2019 16:59:51 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C560A21920 for ; Wed, 2 Oct 2019 16:59:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fa4o45vj" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C560A21920 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57758 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhyg-00067x-7D for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 12:59:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35416) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrK-0005Oy-Qr for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrJ-0003OF-QR for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:14 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]:33792) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrJ-0003MW-Jx for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:13 -0400 Received: by mail-wm1-x32e.google.com with SMTP id y135so5358831wmc.1 for ; Wed, 02 Oct 2019 09:52:13 -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 :mime-version:content-transfer-encoding; bh=Gwkm7BIFv5Gq9pCfaTUHfWzPGvgH4PsTi5+em8nFU0M=; b=fa4o45vjhLkC08Qa54nmAY9BTjZkdWS9WoeavtDyiAVR9pWHSDqqxFUAaDGkkzd6MF o/Db/MSf6/FbO6DBLKK7fbzfAygckuTTvhh0N2Wi6BE1UM3KIipCcYcI0R/Ga9W9QTki ZoQ1Nrj0LBfa4C57qS3VDhS64Kr0cQE/7NgVtzpnvIlDLR92X9Ze8TWup6d/P/NeYsFV 6mIV9J9pirfasWT0BsJpDGWwHnv28NegO1L1ovC9X2dC1z1BevEGDO/D9b98CW/vwN8P idX9Eq5PHkLrIXZXnWUcWrmkxPme6jPT5bklY2/QPXwZK8xZc6wIliFqk34O+QGP2zRx n6OA== 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:mime-version:content-transfer-encoding; bh=Gwkm7BIFv5Gq9pCfaTUHfWzPGvgH4PsTi5+em8nFU0M=; b=qI0nmQH242TeYwgsUb2OeDVhWAnDW6yBM4SBfhWDNCHhNtykrHguCgKwBi8yxWlB6k rCP6QwEw6drdYOUln1Qx3fBnqRZUKUtVRZVlli0R1pdGrX6qCtqFU9fDi21TU+Hc2pJK 55Sf4ByW5d2vwCMfbh6+KghIi0t5gzgK3qh9aWgDSWYg1MeaOLhxxJF3Ey8HlzroWrbU G/qDmRmggONJqHi+fiApliQXwW/SqwQWOxW6nvbhnrL1yVjM3LbEAJBqxX0PioHgGqYC oN8u+K/oa2T/6viKV7KkJ//wBe2vkUlfvJSupuXdulhiSYPA9HDW6NOpBMT8UrGB/8/D f8aQ== X-Gm-Message-State: APjAAAXr7YrAu3kqMdoWF4u2/rYNS+bX535Be+7Q4NpMRhBUb+du2h+d SRQuoad0W4s3QgEcMLTYfAZ0uWRb X-Google-Smtp-Source: APXvYqwewTrRnzms8LNKk1xv0R958YgLVK+AnWrOfifhvJyGI4yllqhI9ouvdRWmpobgPO0yZjjJoA== X-Received: by 2002:a1c:7c15:: with SMTP id x21mr3384082wmc.36.1570035132386; Wed, 02 Oct 2019 09:52:12 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.11 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:11 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 17/30] hppa: fix leak from g_strdup_printf Date: Wed, 2 Oct 2019 18:51:40 +0200 Message-Id: <1570035113-56848-18-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::32e X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" memory_region_init_* takes care of copying the name into memory it owns. Free it in the caller. Signed-off-by: Paolo Bonzini Reviewed-by: Philippe Mathieu-Daudé --- hw/hppa/dino.c | 1 + hw/hppa/machine.c | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/hw/hppa/dino.c b/hw/hppa/dino.c index e0466ee..ab6969b 100644 --- a/hw/hppa/dino.c +++ b/hw/hppa/dino.c @@ -485,6 +485,7 @@ PCIBus *dino_init(MemoryRegion *addr_space, memory_region_init_alias(&s->pci_mem_alias[i], OBJECT(s), name, &s->pci_mem, addr, DINO_MEM_CHUNK_SIZE); + g_free(name); } /* Set up PCI view of memory: Bus master address space. */ diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c index 2736ce8..7e23675 100644 --- a/hw/hppa/machine.c +++ b/hw/hppa/machine.c @@ -78,13 +78,15 @@ static void machine_hppa_init(MachineState *machine) /* Create CPUs. */ for (i = 0; i < smp_cpus; i++) { + char *name = g_strdup_printf("cpu%ld-io-eir", i); cpu[i] = HPPA_CPU(cpu_create(machine->cpu_type)); cpu_region = g_new(MemoryRegion, 1); memory_region_init_io(cpu_region, OBJECT(cpu[i]), &hppa_io_eir_ops, - cpu[i], g_strdup_printf("cpu%ld-io-eir", i), 4); + cpu[i], name, 4); memory_region_add_subregion(addr_space, CPU_HPA + i * 0x1000, cpu_region); + g_free(name); } /* Limit main memory. */ From patchwork Wed Oct 2 16:51:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171627 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id DD0EB16B1 for ; Wed, 2 Oct 2019 17:03:45 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B2C962086A for ; Wed, 2 Oct 2019 17:03:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="sU/rQPoJ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B2C962086A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57796 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFi2R-0001iw-Ag for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:03:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35428) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrL-0005QY-Rs for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrK-0003PR-Rn for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:15 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]:39577) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrK-0003Oa-M2 for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:14 -0400 Received: by mail-wm1-x32d.google.com with SMTP id v17so7696397wml.4 for ; Wed, 02 Oct 2019 09:52: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=KnkKCuPSW2iymXOv36vMmluvofqorOTBfFwhuGseNQc=; b=sU/rQPoJ9FZlR9FrU59GsYPr7XzFiQVdV6XM3cmhW7+wA95OVH9+/R1DF2KzKIV8zx fzAz1Qtho0XSR0josAIV5Lz0gOkXm5WJn2KASBh4aGJ3KiURewWUaI/lERQLFj85Soci JY04metUAvTT7EqRoPODdcIokOxFgI3ZDfOo8kYDw6+fPSK4u2kPXqLS74E770hUomGx lDs1uvxemvkdL7cEJQGsoMHg/gmEJJ+V2GdWVTDH1k27QgutodF8zyAkKEW1Nogtf1UA ifBlcX0fCtDnGkPIZjiwu1HQ6vbQClupPel1BVajtcIBCJPSaRKiXp2JnN3BfVKCvDqc X46w== 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=KnkKCuPSW2iymXOv36vMmluvofqorOTBfFwhuGseNQc=; b=pOogfOkw/Uhfy7zeGxTrtMNBiXlfvDVDyeAMGAIWoTsLuUC8I14Wv7Oo0S8srlZOZ4 8AXCnj6ALy59VGsb+BsvVZLEa/nvdq9wRGEAgGp4ucxWkPiduEB+1TTzG2yuXilvRWx5 WRJ/6DSA9vKURFZijdrA6foDdcxbeiqFWsYhWm+Oh8M+ON1pdZAW7rUhtiMiN4cjlxWz ezBTNSjxdElv471TI9qZvwuBQs/U+N27Nu9135SwwfS7MUHs4ZbUMmgj5lZeWJ5a27JM zjP34+NE1bHcxh4IT1TwBZtsjfwIt3FaPWgeibm+tJR32Iyy5jZGWXAdZbJ/mZGPO1bW XbvQ== X-Gm-Message-State: APjAAAVcIVAaMD1Ep/Wk3H4r5HALcP2h1J02//1/QFJAcanog9uN+LWZ b/Bu6IELtubtDfaXNCpzE4zGTlV+ X-Google-Smtp-Source: APXvYqwy52RdFLfQqNYihsSXfmEgFC7fdVKgPuaomz37rj1TecaITXv78orqv2oYFfr4RpQpWbKv0A== X-Received: by 2002:a1c:80ca:: with SMTP id b193mr3356516wmd.171.1570035133429; Wed, 02 Oct 2019 09:52:13 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.12 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:12 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 18/30] mips: fix memory leaks in board initialization Date: Wed, 2 Oct 2019 18:51:41 +0200 Message-Id: <1570035113-56848-19-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::32d X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" They are not a big deal, but they upset asan. Signed-off-by: Paolo Bonzini Reviewed-by: Thomas Huth --- hw/mips/mips_int.c | 1 + hw/mips/mips_jazz.c | 2 ++ 2 files changed, 3 insertions(+) diff --git a/hw/mips/mips_int.c b/hw/mips/mips_int.c index 5ebc961..863ed45 100644 --- a/hw/mips/mips_int.c +++ b/hw/mips/mips_int.c @@ -81,6 +81,7 @@ void cpu_mips_irq_init_cpu(MIPSCPU *cpu) for (i = 0; i < 8; i++) { env->irq[i] = qi[i]; } + g_free(qi); } void cpu_mips_soft_irq(CPUMIPSState *env, int irq, int level) diff --git a/hw/mips/mips_jazz.c b/hw/mips/mips_jazz.c index c967b97..8d010a0 100644 --- a/hw/mips/mips_jazz.c +++ b/hw/mips/mips_jazz.c @@ -362,6 +362,8 @@ static void mips_jazz_init(MachineState *machine, /* LED indicator */ sysbus_create_simple("jazz-led", 0x8000f000, NULL); + + g_free(dmas); } static From patchwork Wed Oct 2 16:51:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171679 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8DFBE112B for ; Wed, 2 Oct 2019 17:10:53 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 63EC221D81 for ; Wed, 2 Oct 2019 17:10:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mfxRh8HG" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 63EC221D81 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57852 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFi9M-0001kT-2f for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:10:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35440) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrN-0005SI-7J for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrL-0003Qn-Sd for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:16 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:54805) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrL-0003Pk-Jx for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:15 -0400 Received: by mail-wm1-x342.google.com with SMTP id p7so7968694wmp.4 for ; Wed, 02 Oct 2019 09:52:15 -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=XQJk1DHPtMxR5rn6iJkZ4+R9JTJIU95kBBNqy6kS5R0=; b=mfxRh8HG/WR9akh1+9ibjC5P6cgNZVkmRH+D0d6GRBWPN/dCvg24vEzxpiUCmhurvV /YQN4UMa6vXquqdcu7eAl3kuES/O1pHiu8RsRIOC5+DkK3zZU7PcNVlg+N03nGmFCy3U wuSrYX4S9Tin09MTm8XZrtCIti+EoZBCVFjzrqiXwX0PPFBwqF6a4LULwJ8h5u+lbhor 3TX1zFvitlflnQzRSCt7Yw5VrsYy4heUNPSgLHL7Rpmkm/jFYNQuHmnUSyXhcmPQ0UwW KKTzZQClPMhbNqg93EJCkrfUDv0H7MP4S5Pjnu2tUJ4tLHc8orkjs71a708nYl+JJkwT tSHw== 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=XQJk1DHPtMxR5rn6iJkZ4+R9JTJIU95kBBNqy6kS5R0=; b=YkOz5fP1Yh0MnHNdjvlqPlT+4b37GB5xGa0BSR2TAVkT0BZHT7j5f9dOr7Q6szbfUW zC4tIKxySDwBJk8deqEHe1sTWi72beOhBUjVcXKQwa8kTOcQB04hD3BT/IjwM0VIkVAk 9Mf1+7z1Gqe4OEhMJnz7/EY5WSaR5hHe6hzw+3D6c72cvmnlBkLW+fOBZbxLA4vT6rCB ndwfQHMgq35FMUeexwX8qWUH1Q3CLhGHitFu1rSZ+HvqZW+acnkOUyXr0bIwvgPIoxpO 7cp7QyPM/4Qbq/5Kl20K9QzrBgxp7fVlGO/B/hixSnEGd384niL36CMEwrVGqhEQfBq6 aJeQ== X-Gm-Message-State: APjAAAV3FnvsryyvfTXbW4rZK37xKp/VTjEb4HdbQYUg6A/WWFgp6Tge NZIpTuEHZg+2/+doodbux4yptBSg X-Google-Smtp-Source: APXvYqytYYi13XucODbggEKUqldvBriEYTyy6rL8afO2BACKWUADoTPQc5eHofRNVHZMA4atHpE5Tg== X-Received: by 2002:a1c:a851:: with SMTP id r78mr3574856wme.166.1570035134368; Wed, 02 Oct 2019 09:52:14 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.13 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:13 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 19/30] cris: do not leak struct cris_disasm_data Date: Wed, 2 Oct 2019 18:51:42 +0200 Message-Id: <1570035113-56848-20-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::342 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Use a stack-allocated struct to avoid a memory leak. Signed-off-by: Paolo Bonzini --- disas/cris.c | 59 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/disas/cris.c b/disas/cris.c index 2f43c9b..0b0a3fb 100644 --- a/disas/cris.c +++ b/disas/cris.c @@ -1294,24 +1294,17 @@ static int cris_constraint /* Parse disassembler options and store state in info. FIXME: For the time being, we abuse static variables. */ -static bfd_boolean -cris_parse_disassembler_options (disassemble_info *info, +static void +cris_parse_disassembler_options (struct cris_disasm_data *disdata, + char *disassembler_options, enum cris_disass_family distype) { - struct cris_disasm_data *disdata; - - info->private_data = calloc (1, sizeof (struct cris_disasm_data)); - disdata = (struct cris_disasm_data *) info->private_data; - if (disdata == NULL) - return false; - /* Default true. */ disdata->trace_case - = (info->disassembler_options == NULL - || (strcmp (info->disassembler_options, "nocase") != 0)); + = (disassembler_options == NULL + || (strcmp (disassembler_options, "nocase") != 0)); disdata->distype = distype; - return true; } static const struct cris_spec_reg * @@ -2736,9 +2729,10 @@ static int print_insn_cris_with_register_prefix (bfd_vma vma, disassemble_info *info) { - if (info->private_data == NULL - && !cris_parse_disassembler_options (info, cris_dis_v0_v10)) - return -1; + struct cris_disasm_data disdata; + info->private_data = &disdata; + cris_parse_disassembler_options (&disdata, info->disassembler_options, + cris_dis_v0_v10); return print_insn_cris_generic (vma, info, true); } /* Disassemble, prefixing register names with `$'. CRIS v32. */ @@ -2747,9 +2741,10 @@ static int print_insn_crisv32_with_register_prefix (bfd_vma vma, disassemble_info *info) { - if (info->private_data == NULL - && !cris_parse_disassembler_options (info, cris_dis_v32)) - return -1; + struct cris_disasm_data disdata; + info->private_data = &disdata; + cris_parse_disassembler_options (&disdata, info->disassembler_options, + cris_dis_v32); return print_insn_cris_generic (vma, info, true); } @@ -2761,9 +2756,10 @@ static int print_insn_crisv10_v32_with_register_prefix (bfd_vma vma, disassemble_info *info) { - if (info->private_data == NULL - && !cris_parse_disassembler_options (info, cris_dis_common_v10_v32)) - return -1; + struct cris_disasm_data disdata; + info->private_data = &disdata; + cris_parse_disassembler_options (&disdata, info->disassembler_options, + cris_dis_common_v10_v32); return print_insn_cris_generic (vma, info, true); } @@ -2773,9 +2769,10 @@ static int print_insn_cris_without_register_prefix (bfd_vma vma, disassemble_info *info) { - if (info->private_data == NULL - && !cris_parse_disassembler_options (info, cris_dis_v0_v10)) - return -1; + struct cris_disasm_data disdata; + info->private_data = &disdata; + cris_parse_disassembler_options (&disdata, info->disassembler_options, + cris_dis_v0_v10); return print_insn_cris_generic (vma, info, false); } @@ -2785,9 +2782,10 @@ static int print_insn_crisv32_without_register_prefix (bfd_vma vma, disassemble_info *info) { - if (info->private_data == NULL - && !cris_parse_disassembler_options (info, cris_dis_v32)) - return -1; + struct cris_disasm_data disdata; + info->private_data = &disdata; + cris_parse_disassembler_options (&disdata, info->disassembler_options, + cris_dis_v32); return print_insn_cris_generic (vma, info, false); } @@ -2798,9 +2796,10 @@ static int print_insn_crisv10_v32_without_register_prefix (bfd_vma vma, disassemble_info *info) { - if (info->private_data == NULL - && !cris_parse_disassembler_options (info, cris_dis_common_v10_v32)) - return -1; + struct cris_disasm_data disdata; + info->private_data = &disdata; + cris_parse_disassembler_options (&disdata, info->disassembler_options, + cris_dis_common_v10_v32); return print_insn_cris_generic (vma, info, false); } #endif From patchwork Wed Oct 2 16:51:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171683 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 95C6F76 for ; Wed, 2 Oct 2019 17:14:05 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6BBAA21D81 for ; Wed, 2 Oct 2019 17:14:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CORuOirn" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6BBAA21D81 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57880 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFiCS-00056b-F1 for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:14:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35448) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrN-0005TD-R9 for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrM-0003Rl-OU for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:17 -0400 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]:35785) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrM-0003R0-Hn for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:16 -0400 Received: by mail-wr1-x42e.google.com with SMTP id v8so20519792wrt.2 for ; Wed, 02 Oct 2019 09:52:16 -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 :mime-version:content-transfer-encoding; bh=fj1AKGyMUrtlB+uC4vz0fN5u5wPsLJxKVwRlCM2AV/0=; b=CORuOirnOaqyHmbCkvsaMss2mzdHDH4DC6uB1r4pwqG4QS6mRLswlv5s5wyo5Gm6lR qJFSiQ1iamFcYp85Okx6f3x/cVEyqNU856ObEpeccmYDRZFa+eJ3wPYr4HqLeYLF+sfB sedouvTPV6YOS1Nx1IC+yutyA2fiRUlTvPm/xt2dErI4ACUA3cueHLXOnhGiC0wniFqt H/0zb4+554VDfgzIbGcnf4oYKDGOEPsbJU1AW5oJmCjGP10b4CR/nx9mXMH5EKY/0/0Z Rbn3ytZRs+WWIOI3AtO303Wxe0+Mj9SEVIhZLMDAim5FpJ5XGY5bBRPIhM+6+JB+mzmN hx4A== 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:mime-version:content-transfer-encoding; bh=fj1AKGyMUrtlB+uC4vz0fN5u5wPsLJxKVwRlCM2AV/0=; b=FGlxd7DVJKal/d4uzHAip5VY2g01DTv63+L4J6goNN0OajGPvThTdJaO6QYrt/s/Ia hNgkUxYI8KXGW9LbCnaXRFk4zfqG/eElEaJcST5Im4of8PwDTyAk4FWGmezFYarvvM1d AcQ9UshYztA2HTnN7lxyqN128C9D9EkxSFfgV4Bn7ai2sSMZBvunVitN99NU09jC88rF 0/RBOE2H9TwwGj+BQOy+oqP1+MxDQmZyp9kotihZGlq4H8+mGiIpcRc0JOOoGXkx/yWN Qj5GaFL8X6BQVcy7ydoR4dXsafB2oj7Zix8m+s1KwTEDfC0C9y8afPwRrFCy0S9bEDmN 4ZJg== X-Gm-Message-State: APjAAAX90fG53mqCNqDqw7xy4oAd58GUAAATCQ38AGj3IRopHq1aL5Ku NaJL3dRn/wbTGhe3oDNehnDu+Ah1 X-Google-Smtp-Source: APXvYqwfYyWfIs9bJTfD7vJT1nrb/8CrygBZAGOiDiLRp7E25HEWnylZAPKHAzWw1Y3Acux1gGHqMA== X-Received: by 2002:adf:e410:: with SMTP id g16mr3271189wrm.297.1570035135434; Wed, 02 Oct 2019 09:52:15 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.14 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:14 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 20/30] lm32: do not leak memory on object_new/object_unref Date: Wed, 2 Oct 2019 18:51:43 +0200 Message-Id: <1570035113-56848-21-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::42e X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Bottom halves and ptimers are malloced, but nothing in these files is freeing memory allocated by instance_init. Since these are sysctl devices that are never unrealized, just moving the allocations to realize is enough to avoid the leak in practice (and also to avoid upsetting asan when running device-introspect-test). Signed-off-by: Paolo Bonzini Reviewed-by: Philippe Mathieu-Daudé --- hw/timer/lm32_timer.c | 6 +++--- hw/timer/milkymist-sysctl.c | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/hw/timer/lm32_timer.c b/hw/timer/lm32_timer.c index ac3edaf..cf316ed 100644 --- a/hw/timer/lm32_timer.c +++ b/hw/timer/lm32_timer.c @@ -186,9 +186,6 @@ static void lm32_timer_init(Object *obj) sysbus_init_irq(dev, &s->irq); - s->bh = qemu_bh_new(timer_hit, s); - s->ptimer = ptimer_init(s->bh, PTIMER_POLICY_DEFAULT); - memory_region_init_io(&s->iomem, obj, &timer_ops, s, "timer", R_MAX * 4); sysbus_init_mmio(dev, &s->iomem); @@ -198,6 +195,9 @@ static void lm32_timer_realize(DeviceState *dev, Error **errp) { LM32TimerState *s = LM32_TIMER(dev); + s->bh = qemu_bh_new(timer_hit, s); + s->ptimer = ptimer_init(s->bh, PTIMER_POLICY_DEFAULT); + ptimer_set_freq(s->ptimer, s->freq_hz); } diff --git a/hw/timer/milkymist-sysctl.c b/hw/timer/milkymist-sysctl.c index 9583507..6aedc11 100644 --- a/hw/timer/milkymist-sysctl.c +++ b/hw/timer/milkymist-sysctl.c @@ -283,11 +283,6 @@ static void milkymist_sysctl_init(Object *obj) sysbus_init_irq(dev, &s->timer0_irq); sysbus_init_irq(dev, &s->timer1_irq); - s->bh0 = qemu_bh_new(timer0_hit, s); - s->bh1 = qemu_bh_new(timer1_hit, s); - s->ptimer0 = ptimer_init(s->bh0, PTIMER_POLICY_DEFAULT); - s->ptimer1 = ptimer_init(s->bh1, PTIMER_POLICY_DEFAULT); - memory_region_init_io(&s->regs_region, obj, &sysctl_mmio_ops, s, "milkymist-sysctl", R_MAX * 4); sysbus_init_mmio(dev, &s->regs_region); @@ -297,6 +292,11 @@ static void milkymist_sysctl_realize(DeviceState *dev, Error **errp) { MilkymistSysctlState *s = MILKYMIST_SYSCTL(dev); + s->bh0 = qemu_bh_new(timer0_hit, s); + s->bh1 = qemu_bh_new(timer1_hit, s); + s->ptimer0 = ptimer_init(s->bh0, PTIMER_POLICY_DEFAULT); + s->ptimer1 = ptimer_init(s->bh1, PTIMER_POLICY_DEFAULT); + ptimer_set_freq(s->ptimer0, s->freq_hz); ptimer_set_freq(s->ptimer1, s->freq_hz); } From patchwork Wed Oct 2 16:51:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171625 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D7F3215AB for ; Wed, 2 Oct 2019 17:03:32 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id ADABC2086A for ; Wed, 2 Oct 2019 17:03:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="d5PPPk2n" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org ADABC2086A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57794 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFi2F-0001VM-9z for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:03:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35463) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrO-0005UN-V0 for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrN-0003TG-UL for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:18 -0400 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]:52614) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrN-0003SK-OJ for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:17 -0400 Received: by mail-wm1-x336.google.com with SMTP id r19so7972187wmh.2 for ; Wed, 02 Oct 2019 09:52: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=o4ShqMwkYwxwFlVxZ6kVT6vik/5tXcWE7uO0LUlRUd4=; b=d5PPPk2nnU7aUaFAH8CSpKWhlo/QYavS0FIqGOodv1EaJ5/76l3yMDG7wJ+hFWrBUI D+pxq9p9SvAYVLrLfcIiC914SDOYkGXDck0vjELcFtfiVVKyYaEYmpcFtQ+TG0x1jRy0 QIgFzj0nIAhRl3fGQO5VK20F6SFcmXNfER9+pHJ7Ql9KR6tLSKZK+8zKsr5UFPW5AlZ7 0pVPpKr9goLvmfb7hHLuE7ycpKvsEkPoHw4tZxOcfI/Ugcchmt8qc/U+2I4ZZ1a7CK3B 4jYj4jtnOlqB+gd/XhyUq/xGLpQ4dO9/anGCKh/EM3aRP9BdBxnjOKIxoFGVs6CIvBSh TgNQ== 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=o4ShqMwkYwxwFlVxZ6kVT6vik/5tXcWE7uO0LUlRUd4=; b=adYuCOKFSL65iapH7AduTicOGcG+bBHfzINLh8lIg63p6kdCMb26IAvYVSTSfcke9i /9MpY+VdsbU9PB1M5bCWSDAiK2G18lrsiC4zze3uOC0iDLG3f99zJDR97SIFr66WCV0A e7PXyM5AhiOSdTuUKK9XuQxA1yt2KkQhdP/TqD6Cnb3P/iDb3qAcC2b+S3SuB95wCtE/ ZO8pDEWXiiAzWxQJcK+9M9IcOpBU28+sI/mURZezj3AMclRCnFQ4pZRwNv3YpnQ2m/Ta tXiUoOJPWUDPR0sjZMSxhh7GMvZqR1a5CT0hYrma8/7UIOk+AxqlffL+uA7mFO1ttn/h LPLg== X-Gm-Message-State: APjAAAU4t2w6U/YiO75S+ifvjVtovo/x6AsV99eiZ0FGnLVb62wp6qt8 Uan7nQAJ+5e/sajvBjs3ZVOntioI X-Google-Smtp-Source: APXvYqw74FGTA+4Wk2EL7bL6U/LjrkxbfC+rfOtFH6+ym9elpGNmytF/ZE3/4WHgg7gjwJbvlvT9mg== X-Received: by 2002:a1c:a94b:: with SMTP id s72mr3627073wme.9.1570035136458; Wed, 02 Oct 2019 09:52:16 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.15 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:15 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 21/30] docker: test-debug: disable LeakSanitizer Date: Wed, 2 Oct 2019 18:51:44 +0200 Message-Id: <1570035113-56848-22-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::336 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" There are just too many leaks in device-introspect-test (especially for the plethora of arm and aarch64 boards) to make LeakSanitizer useful; disable it for now. Whoever is interested in debugging leaks can also use valgrind like this: QTEST_QEMU_BINARY=aarch64-softmmu/qemu-system-aarch64 \ QTEST_QEMU_IMG=qemu-img \ valgrind --trace-children=yes --leak-check=full \ tests/device-introspect-test -p /aarch64/device/introspect/concrete/defaults/none Signed-off-by: Paolo Bonzini --- tests/docker/test-debug | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/docker/test-debug b/tests/docker/test-debug index 137f4f2..c050fa0 100755 --- a/tests/docker/test-debug +++ b/tests/docker/test-debug @@ -21,6 +21,7 @@ cd "$BUILD_DIR" OPTS="--cxx=clang++ --cc=clang --host-cc=clang" OPTS="--enable-debug --enable-sanitizers $OPTS" +export ASAN_OPTIONS=detect_leaks=0 build_qemu $OPTS check_qemu check V=1 install_qemu From patchwork Wed Oct 2 16:51:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171651 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 93AA076 for ; Wed, 2 Oct 2019 17:07:07 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 68E1B21D81 for ; Wed, 2 Oct 2019 17:07:07 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YCQvm/r5" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 68E1B21D81 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57824 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFi5i-0005UQ-Hy for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:07:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35476) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrQ-0005YU-E1 for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrP-0003VL-3S for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:20 -0400 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]:42857) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrO-0003Td-SX for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:19 -0400 Received: by mail-wr1-x42a.google.com with SMTP id n14so20461408wrw.9 for ; Wed, 02 Oct 2019 09:52: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=vqzgHL7aRM9BJ5Yw7NhTakoGS6o9s+EDo3MElhnA4Yo=; b=YCQvm/r58Rd7V9C4pIDVGgbSnl+SCGIA34OAJuj8Z2qGD5hCEZUwS4D9VVvqGylmag +1Caz/bLtW2B3rqlNESurtD3Rq9t/wEDfnzbz3Po+xU9w5S5EltdjK6F5IIPGsFHp984 E455mhamRZUT1Irq7RBvLuUT7TfzLfhYBJlyoX9tsc2UPptvafU+lLa3X0oJ73rYdBRr COyroZwqZ9DLVFfHeDKhgU9Wj0SqAwsScrIw9LBPrCdWwbitvNfiJqQrtw9QV57qgBte L998gYSeKT5Ym9+ESpSjOZWUQMrpY2GKI1JU7G6xrX5LkMpBtaZM0z577KxOCtDSVe9c iTaQ== 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=vqzgHL7aRM9BJ5Yw7NhTakoGS6o9s+EDo3MElhnA4Yo=; b=e3Ct5RSaEh/uBu/SvLZ7k8tFWszxnUCE+rIl8dkdADxFZ7EKNVD4imPIOKwaomopZU zD+m4lr4gA4EwbxtT15Qy3650q8Av3qE6Qr/J8UAS7kLTo03IqTuepmjB0I5agbDJghS ug7E2TCTCPQMvB2M2z7nHSjaU/3ZgsZLwKSqX5coO8hrE78UW6fHH/tKPN7ilp6o91lM 0FI0lSYqNyJcaM9PZB0xj9/sE0eE2VGkMkoZJMJFO6+u/RDUKQtcgG2qhl20ev4KdqxO KovNs0XbnQXEZgHo3dihfy92us37ag7nzPLJ6TLZ4S+G576uW7xYNGcZq9Zhkge/yvJ7 aHSw== X-Gm-Message-State: APjAAAXLE8rIJ3CvSFdcgqJBFLx+Az7gmyT8ZouIsf7PIh0LBfymjvk0 3eTdXTgSM+r5P5q2OmtW/h5/S2lC X-Google-Smtp-Source: APXvYqw9OF7jliYLO+M78sZLBp2m+T320tFbytLcZwQFCGC0au/pfrW96Y4IDcImc3P+dgMqW9mS4w== X-Received: by 2002:adf:9d87:: with SMTP id p7mr3340604wre.245.1570035137640; Wed, 02 Oct 2019 09:52:17 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:16 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 22/30] i386: Add CPUID bit for CLZERO and XSAVEERPTR Date: Wed, 2 Oct 2019 18:51:45 +0200 Message-Id: <1570035113-56848-23-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sebastian Andrzej Siewior Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" From: Sebastian Andrzej Siewior The CPUID bits CLZERO and XSAVEERPTR are availble on AMD's ZEN platform and could be passed to the guest. Signed-off-by: Sebastian Andrzej Siewior Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 2 +- target/i386/cpu.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 5b771f1..313a2ef 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -1130,7 +1130,7 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { [FEAT_8000_0008_EBX] = { .type = CPUID_FEATURE_WORD, .feat_names = { - NULL, NULL, NULL, NULL, + "clzero", NULL, "xsaveerptr", NULL, NULL, NULL, NULL, NULL, NULL, "wbnoinvd", NULL, NULL, "ibpb", NULL, NULL, NULL, diff --git a/target/i386/cpu.h b/target/i386/cpu.h index c62e3b6..033991c 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -723,6 +723,8 @@ typedef uint64_t FeatureWordArray[FEATURE_WORDS]; #define CPUID_7_1_EAX_AVX512_BF16 (1U << 5) /* AVX512 BFloat16 Instruction */ +#define CPUID_8000_0008_EBX_CLZERO (1U << 0) /* CLZERO instruction */ +#define CPUID_8000_0008_EBX_XSAVEERPTR (1U << 2) /* Always save/restore FP error pointers */ #define CPUID_8000_0008_EBX_WBNOINVD (1U << 9) /* Write back and do not invalidate cache */ #define CPUID_8000_0008_EBX_IBPB (1U << 12) /* Indirect Branch Prediction Barrier */ From patchwork Wed Oct 2 16:51:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171675 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 67DBC76 for ; Wed, 2 Oct 2019 17:10:07 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3D9A22086A for ; Wed, 2 Oct 2019 17:10:07 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dyVXZ6kd" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3D9A22086A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57848 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFi8b-0000ee-JK for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:10:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35486) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrR-0005aR-NX for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrQ-0003XS-Ej for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:21 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:39350) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrQ-0003Wc-6w for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:20 -0400 Received: by mail-wm1-x341.google.com with SMTP id v17so7696719wml.4 for ; Wed, 02 Oct 2019 09:52: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=i9c6AFc6vOgw/CCh7etmxchVWi89c6GZaBeygIRrOxc=; b=dyVXZ6kd2FLmBsK0kElBVkW9xEW8f7ZebXRO+L05ZiA4qwNrun2jojlNmXRVY3wzZn lZMylbdUluFe4PIHJ4dlbVQClWyae0yokITMKS6UTzK1y1CvBCyBZ0x2BQQingnaehvG sWNSOON3ju1PRydHpzX63vLUPM/htirqktPVErYXPDUDN/xlDVl3keSx7MXowhuRxeq+ 3R0ndJ+9a1lCimTw2G4cASsG4NfuuriNECIzwGhVLXajOhZnetfjjoI4mMcKlRBBGVmq kbMI4MdAx2AlJVtub5ljGCiEPQWj61tVABOMxGEsfIe+qk1x517rN5lfTdZnzqQIf1IE JRVA== 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=i9c6AFc6vOgw/CCh7etmxchVWi89c6GZaBeygIRrOxc=; b=VYTPRDn0jPrLjmcKxqBsGNYM7BHQIAGXRlseF+jkYv6bJ9fagZDMBjBpju7Jgec9GS CK2NXlGcbIL7i2xpq7+YqIP6e+cAljDf7nkjl4fUxZCieZJxYQtsJNe/fmv2n+cG/Rba mhHAISEl8et7N4sWDjfHQkGv01b7U2/tPSTZXLkdj6buLSIHRMd198nW2u2W6sVjd5nQ MWyrQpY9QMzgvfgJuVp2vimxcWUqViyg3K71aMdW6LmuNbGHSjXkH28cLFO1lGgOuelV 3bI1Tz1DYrkF+1RPuL3mm+NwXqWlHO3N+WimxNJbYObI8pivsXRVqRqI3uorFAB8k5lp vgkw== X-Gm-Message-State: APjAAAWmSG3KmNySc0MS7F+2MaujRzW8CuqPO88Yu86wKoWF26FSWaIx NMFVL3zylzaa2TKlbqEds/stmCwA X-Google-Smtp-Source: APXvYqw66NKewjZoS03fTw5xubrUIwdweWFkbdHtjV2artDwblzplZPcnSSh0zCiFBJEvAPraMLxUg== X-Received: by 2002:a1c:2089:: with SMTP id g131mr3520602wmg.33.1570035138662; Wed, 02 Oct 2019 09:52:18 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:17 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 23/30] vfio: Turn the container error into an Error handle Date: Wed, 2 Oct 2019 18:51:46 +0200 Message-Id: <1570035113-56848-24-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::341 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Eric Auger Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" From: Eric Auger The container error integer field is currently used to store the first error potentially encountered during any vfio_listener_region_add() call. However this fails to propagate detailed error messages up to the vfio_connect_container caller. Instead of using an integer, let's use an Error handle. Messages are slightly reworded to accomodate the propagation. Signed-off-by: Eric Auger Signed-off-by: Paolo Bonzini --- hw/vfio/common.c | 43 ++++++++++++++++++++++++++++--------------- hw/vfio/spapr.c | 4 +++- include/hw/vfio/vfio-common.h | 2 +- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/hw/vfio/common.c b/hw/vfio/common.c index 3e03c49..cebbb1c 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -509,6 +509,7 @@ static void vfio_listener_region_add(MemoryListener *listener, int ret; VFIOHostDMAWindow *hostwin; bool hostwin_found; + Error *err = NULL; if (vfio_listener_skipped_section(section)) { trace_vfio_listener_region_add_skip( @@ -543,13 +544,20 @@ static void vfio_listener_region_add(MemoryListener *listener, hostwin->max_iova - hostwin->min_iova + 1, section->offset_within_address_space, int128_get64(section->size))) { - ret = -1; + error_setg(&err, + "region [0x%"PRIx64",0x%"PRIx64"] overlaps with existing" + "host DMA window [0x%"PRIx64",0x%"PRIx64"]", + section->offset_within_address_space, + section->offset_within_address_space + + int128_get64(section->size) - 1, + hostwin->min_iova, hostwin->max_iova); goto fail; } } ret = vfio_spapr_create_window(container, section, &pgsize); if (ret) { + error_setg_errno(&err, -ret, "Failed to create SPAPR window"); goto fail; } @@ -594,10 +602,8 @@ static void vfio_listener_region_add(MemoryListener *listener, } if (!hostwin_found) { - error_report("vfio: IOMMU container %p can't map guest IOVA region" - " 0x%"HWADDR_PRIx"..0x%"HWADDR_PRIx, - container, iova, end); - ret = -EFAULT; + error_setg(&err, "Container %p can't map guest IOVA region" + " 0x%"HWADDR_PRIx"..0x%"HWADDR_PRIx, container, iova, end); goto fail; } @@ -664,11 +670,12 @@ static void vfio_listener_region_add(MemoryListener *listener, ret = vfio_dma_map(container, iova, int128_get64(llsize), vaddr, section->readonly); if (ret) { - error_report("vfio_dma_map(%p, 0x%"HWADDR_PRIx", " - "0x%"HWADDR_PRIx", %p) = %d (%m)", - container, iova, int128_get64(llsize), vaddr, ret); + error_setg(&err, "vfio_dma_map(%p, 0x%"HWADDR_PRIx", " + "0x%"HWADDR_PRIx", %p) = %d (%m)", + container, iova, int128_get64(llsize), vaddr, ret); if (memory_region_is_ram_device(section->mr)) { /* Allow unexpected mappings not to be fatal for RAM devices */ + error_report_err(err); return; } goto fail; @@ -688,9 +695,14 @@ fail: */ if (!container->initialized) { if (!container->error) { - container->error = ret; + error_propagate_prepend(&container->error, err, + "Region %s: ", + memory_region_name(section->mr)); + } else { + error_free(err); } } else { + error_report_err(err); hw_error("vfio: DMA mapping failed, unable to continue"); } } @@ -1251,6 +1263,7 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as, container = g_malloc0(sizeof(*container)); container->space = space; container->fd = fd; + container->error = NULL; QLIST_INIT(&container->giommu_list); QLIST_INIT(&container->hostwin_list); @@ -1308,9 +1321,9 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as, &address_space_memory); if (container->error) { memory_listener_unregister(&container->prereg_listener); - ret = container->error; - error_setg(errp, - "RAM memory listener initialization failed for container"); + ret = -1; + error_propagate_prepend(errp, container->error, + "RAM memory listener initialization failed: "); goto free_container_exit; } } @@ -1365,9 +1378,9 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as, memory_listener_register(&container->listener, container->space->as); if (container->error) { - ret = container->error; - error_setg_errno(errp, -ret, - "memory listener initialization failed for container"); + ret = -1; + error_propagate_prepend(errp, container->error, + "memory listener initialization failed: "); goto listener_release_exit; } diff --git a/hw/vfio/spapr.c b/hw/vfio/spapr.c index 96c0ad9..e853eeb 100644 --- a/hw/vfio/spapr.c +++ b/hw/vfio/spapr.c @@ -17,6 +17,7 @@ #include "hw/hw.h" #include "exec/ram_addr.h" #include "qemu/error-report.h" +#include "qapi/error.h" #include "trace.h" static bool vfio_prereg_listener_skipped_section(MemoryRegionSection *section) @@ -85,7 +86,8 @@ static void vfio_prereg_listener_region_add(MemoryListener *listener, */ if (!container->initialized) { if (!container->error) { - container->error = ret; + error_setg_errno(&container->error, -ret, + "Memory registering failed"); } } else { hw_error("vfio: Memory registering failed, unable to continue"); diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h index 9107bd4..fd56420 100644 --- a/include/hw/vfio/vfio-common.h +++ b/include/hw/vfio/vfio-common.h @@ -71,7 +71,7 @@ typedef struct VFIOContainer { MemoryListener listener; MemoryListener prereg_listener; unsigned iommu_type; - int error; + Error *error; bool initialized; unsigned long pgsizes; QLIST_HEAD(, VFIOGuestIOMMU) giommu_list; From patchwork Wed Oct 2 16:51:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171689 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4A761112B for ; Wed, 2 Oct 2019 17:18:30 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id BC92D21848 for ; Wed, 2 Oct 2019 17:18:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Fi1fS/dS" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BC92D21848 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57912 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFiGi-0000Gy-Hv for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:18:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35518) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrV-0005f3-7g for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrT-0003aF-Aa for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:25 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:39751) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrT-0003Xn-2x for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:23 -0400 Received: by mail-wr1-x442.google.com with SMTP id r3so20517875wrj.6 for ; Wed, 02 Oct 2019 09:52:23 -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=Mr658lAKnetL+4KX58LnRrlMr3PsH5dvajSAOIiuU0c=; b=Fi1fS/dSk+Ct64Pu1u/0uDED35uKMd7fQDSP0JcqYXiBEBXCkhMZJD03pUC2JEOu7Z brpyLqrtfu//xyALzO4olEClzi92feTtufBLyam65l4idIuIH1OtaN/TjDsCgBOkXycp mK/n7NJQ7StiVD7XHvXl0TMKULdJtRqe0hgO4EZxdR/XmxbjKfZ2v87A74+6cSj63SMo IY2SAvfQKoOaVytjbynM01+Vn6D4ytatJsZbx+7GmHNOhop1AGXh+uR/oLXeLPn2TBQq aWp3B1T+DF1dqd5MBu6SVfTfDV7iFWdR+pWK7BIK8aiXy7ZVfyB9LjXMwT0eQyYhot5s W4iA== 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=Mr658lAKnetL+4KX58LnRrlMr3PsH5dvajSAOIiuU0c=; b=ovdjonip9oL1FTSWQcnl8hTKDYVfLG9Q/W6ta9FavJHb2sWEN4GRhdqaYhNYoDWURv lKBdMWFY88MMK2/MlfASE+mudDlwUdoappMUUu1DmCJbYbW1VD/LI0xNadvzVAtfPA9c P7ZOkX8ydvCUlsQDdcQuNO73nVcNCsGZgcRERSFdCThjidPvgiiDXrni50LqVR1KAgDp I2xxnyNwoV2xYHqEItsi0h26ps1vc/4I5iDU0lv9XcSogsrxaEFv53USI6JQX4Tr0vJn yrX5hpAeDYvhFQPZ2idka7A5Rou77w5oWxn+gpxmBH/PPhhBX8Hi9V+bGwurhSaB8X0K hy5Q== X-Gm-Message-State: APjAAAX0wR8bEuDYA+SzSJ/p8eE51OKv56Fdv7MhKusGiHtTnS2/0koo nzpc7icse5Mz5i69/K1zHwG+9dp/ X-Google-Smtp-Source: APXvYqxhqEu45mg+p0BrIpUqZ2eIqark9vHanfj2pF132u1sIRe7YteCDnSlbwWOqUXpaKZpaztiqw== X-Received: by 2002:a5d:5708:: with SMTP id a8mr3421856wrv.240.1570035139956; Wed, 02 Oct 2019 09:52:19 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:18 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 24/30] memory: allow memory_region_register_iommu_notifier() to fail Date: Wed, 2 Oct 2019 18:51:47 +0200 Message-Id: <1570035113-56848-25-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Eric Auger Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" From: Eric Auger Currently, when a notifier is attempted to be registered and its flags are not supported (especially the MAP one) by the IOMMU MR, we generally abruptly exit in the IOMMU code. The failure could be handled more nicely in the caller and especially in the VFIO code. So let's allow memory_region_register_iommu_notifier() to fail as well as notify_flag_changed() callback. All sites implementing the callback are updated. This patch does not yet remove the exit(1) in the amd_iommu code. in SMMUv3 we turn the warning message into an error message saying that the assigned device would not work properly. Signed-off-by: Eric Auger Reviewed-by: Peter Xu Signed-off-by: Paolo Bonzini --- exec.c | 10 ++++++++-- hw/arm/smmuv3.c | 18 ++++++++++-------- hw/i386/amd_iommu.c | 17 ++++++++++------- hw/i386/intel_iommu.c | 8 +++++--- hw/ppc/spapr_iommu.c | 8 +++++--- hw/vfio/common.c | 9 +++++++-- hw/virtio/vhost.c | 9 +++++++-- include/exec/memory.h | 21 ++++++++++++++++----- memory.c | 31 ++++++++++++++++++++----------- 9 files changed, 88 insertions(+), 43 deletions(-) diff --git a/exec.c b/exec.c index 1d6e4d8..bdcfcdf 100644 --- a/exec.c +++ b/exec.c @@ -660,7 +660,8 @@ static void tcg_register_iommu_notifier(CPUState *cpu, */ MemoryRegion *mr = MEMORY_REGION(iommu_mr); TCGIOMMUNotifier *notifier; - int i; + Error *err = NULL; + int i, ret; for (i = 0; i < cpu->iommu_notifiers->len; i++) { notifier = g_array_index(cpu->iommu_notifiers, TCGIOMMUNotifier *, i); @@ -689,7 +690,12 @@ static void tcg_register_iommu_notifier(CPUState *cpu, 0, HWADDR_MAX, iommu_idx); - memory_region_register_iommu_notifier(notifier->mr, ¬ifier->n); + ret = memory_region_register_iommu_notifier(notifier->mr, ¬ifier->n, + &err); + if (ret) { + error_report_err(err); + exit(1); + } } if (!notifier->active) { diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c index db051dc..e2fbb83 100644 --- a/hw/arm/smmuv3.c +++ b/hw/arm/smmuv3.c @@ -1469,20 +1469,21 @@ static void smmuv3_class_init(ObjectClass *klass, void *data) dc->realize = smmu_realize; } -static void smmuv3_notify_flag_changed(IOMMUMemoryRegion *iommu, - IOMMUNotifierFlag old, - IOMMUNotifierFlag new) +static int smmuv3_notify_flag_changed(IOMMUMemoryRegion *iommu, + IOMMUNotifierFlag old, + IOMMUNotifierFlag new, + Error **errp) { SMMUDevice *sdev = container_of(iommu, SMMUDevice, iommu); SMMUv3State *s3 = sdev->smmu; SMMUState *s = &(s3->smmu_state); if (new & IOMMU_NOTIFIER_MAP) { - int bus_num = pci_bus_num(sdev->bus); - PCIDevice *pcidev = pci_find_device(sdev->bus, bus_num, sdev->devfn); - - warn_report("SMMUv3 does not support notification on MAP: " - "device %s will not function properly", pcidev->name); + error_setg(errp, + "device %02x.%02x.%x requires iommu MAP notifier which is " + "not currently supported", pci_bus_num(sdev->bus), + PCI_SLOT(sdev->devfn), PCI_FUNC(sdev->devfn)); + return -EINVAL; } if (old == IOMMU_NOTIFIER_NONE) { @@ -1492,6 +1493,7 @@ static void smmuv3_notify_flag_changed(IOMMUMemoryRegion *iommu, trace_smmuv3_notify_flag_del(iommu->parent_obj.name); QLIST_REMOVE(sdev, next); } + return 0; } static void smmuv3_iommu_memory_region_class_init(ObjectClass *klass, diff --git a/hw/i386/amd_iommu.c b/hw/i386/amd_iommu.c index 0888452..d372636 100644 --- a/hw/i386/amd_iommu.c +++ b/hw/i386/amd_iommu.c @@ -1466,18 +1466,21 @@ static const MemoryRegionOps mmio_mem_ops = { } }; -static void amdvi_iommu_notify_flag_changed(IOMMUMemoryRegion *iommu, - IOMMUNotifierFlag old, - IOMMUNotifierFlag new) +static int amdvi_iommu_notify_flag_changed(IOMMUMemoryRegion *iommu, + IOMMUNotifierFlag old, + IOMMUNotifierFlag new, + Error **errp) { AMDVIAddressSpace *as = container_of(iommu, AMDVIAddressSpace, iommu); if (new & IOMMU_NOTIFIER_MAP) { - error_report("device %02x.%02x.%x requires iommu notifier which is not " - "currently supported", as->bus_num, PCI_SLOT(as->devfn), - PCI_FUNC(as->devfn)); - exit(1); + error_setg(errp, + "device %02x.%02x.%x requires iommu notifier which is not " + "currently supported", as->bus_num, PCI_SLOT(as->devfn), + PCI_FUNC(as->devfn)); + return -EINVAL; } + return 0; } static void amdvi_init(AMDVIState *s) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index f1de8fd..771bed2 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -2929,9 +2929,10 @@ static IOMMUTLBEntry vtd_iommu_translate(IOMMUMemoryRegion *iommu, hwaddr addr, return iotlb; } -static void vtd_iommu_notify_flag_changed(IOMMUMemoryRegion *iommu, - IOMMUNotifierFlag old, - IOMMUNotifierFlag new) +static int vtd_iommu_notify_flag_changed(IOMMUMemoryRegion *iommu, + IOMMUNotifierFlag old, + IOMMUNotifierFlag new, + Error **errp) { VTDAddressSpace *vtd_as = container_of(iommu, VTDAddressSpace, iommu); IntelIOMMUState *s = vtd_as->iommu_state; @@ -2944,6 +2945,7 @@ static void vtd_iommu_notify_flag_changed(IOMMUMemoryRegion *iommu, } else if (new == IOMMU_NOTIFIER_NONE) { QLIST_REMOVE(vtd_as, next); } + return 0; } static int vtd_post_load(void *opaque, int version_id) diff --git a/hw/ppc/spapr_iommu.c b/hw/ppc/spapr_iommu.c index e87b3d5..3d3bcc8 100644 --- a/hw/ppc/spapr_iommu.c +++ b/hw/ppc/spapr_iommu.c @@ -205,9 +205,10 @@ static int spapr_tce_get_attr(IOMMUMemoryRegion *iommu, return -EINVAL; } -static void spapr_tce_notify_flag_changed(IOMMUMemoryRegion *iommu, - IOMMUNotifierFlag old, - IOMMUNotifierFlag new) +static int spapr_tce_notify_flag_changed(IOMMUMemoryRegion *iommu, + IOMMUNotifierFlag old, + IOMMUNotifierFlag new, + Error **errp) { struct SpaprTceTable *tbl = container_of(iommu, SpaprTceTable, iommu); @@ -216,6 +217,7 @@ static void spapr_tce_notify_flag_changed(IOMMUMemoryRegion *iommu, } else if (old != IOMMU_NOTIFIER_NONE && new == IOMMU_NOTIFIER_NONE) { spapr_tce_set_need_vfio(tbl, false); } + return 0; } static int spapr_tce_table_post_load(void *opaque, int version_id) diff --git a/hw/vfio/common.c b/hw/vfio/common.c index cebbb1c..5ca1148 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -636,9 +636,14 @@ static void vfio_listener_region_add(MemoryListener *listener, section->offset_within_region, int128_get64(llend), iommu_idx); - QLIST_INSERT_HEAD(&container->giommu_list, giommu, giommu_next); - memory_region_register_iommu_notifier(section->mr, &giommu->n); + ret = memory_region_register_iommu_notifier(section->mr, &giommu->n, + &err); + if (ret) { + g_free(giommu); + goto fail; + } + QLIST_INSERT_HEAD(&container->giommu_list, giommu, giommu_next); memory_region_iommu_replay(giommu->iommu, &giommu->n); return; diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 2386b51..99de5f1 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -677,8 +677,9 @@ static void vhost_iommu_region_add(MemoryListener *listener, iommu_listener); struct vhost_iommu *iommu; Int128 end; - int iommu_idx; + int iommu_idx, ret; IOMMUMemoryRegion *iommu_mr; + Error *err = NULL; if (!memory_region_is_iommu(section->mr)) { return; @@ -701,7 +702,11 @@ static void vhost_iommu_region_add(MemoryListener *listener, iommu->iommu_offset = section->offset_within_address_space - section->offset_within_region; iommu->hdev = dev; - memory_region_register_iommu_notifier(section->mr, &iommu->n); + ret = memory_region_register_iommu_notifier(section->mr, &iommu->n, &err); + if (ret) { + error_report_err(err); + exit(1); + } QLIST_INSERT_HEAD(&dev->iommu_list, iommu, iommu_next); /* TODO: can replay help performance here? */ } diff --git a/include/exec/memory.h b/include/exec/memory.h index 6e67043..e499dc2 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -288,10 +288,16 @@ typedef struct IOMMUMemoryRegionClass { * @iommu: the IOMMUMemoryRegion * @old_flags: events which previously needed to be notified * @new_flags: events which now need to be notified + * + * Returns 0 on success, or a negative errno; in particular + * returns -EINVAL if the new flag bitmap is not supported by the + * IOMMU memory region. In case of failure, the error object + * must be created */ - void (*notify_flag_changed)(IOMMUMemoryRegion *iommu, - IOMMUNotifierFlag old_flags, - IOMMUNotifierFlag new_flags); + int (*notify_flag_changed)(IOMMUMemoryRegion *iommu, + IOMMUNotifierFlag old_flags, + IOMMUNotifierFlag new_flags, + Error **errp); /* Called to handle memory_region_iommu_replay(). * * The default implementation of memory_region_iommu_replay() is to @@ -1079,13 +1085,18 @@ void memory_region_notify_one(IOMMUNotifier *notifier, * memory_region_register_iommu_notifier: register a notifier for changes to * IOMMU translation entries. * + * Returns 0 on success, or a negative errno otherwise. In particular, + * -EINVAL indicates that at least one of the attributes of the notifier + * is not supported (flag/range) by the IOMMU memory region. In case of error + * the error object must be created. + * * @mr: the memory region to observe * @n: the IOMMUNotifier to be added; the notify callback receives a * pointer to an #IOMMUTLBEntry as the opaque value; the pointer * ceases to be valid on exit from the notifier. */ -void memory_region_register_iommu_notifier(MemoryRegion *mr, - IOMMUNotifier *n); +int memory_region_register_iommu_notifier(MemoryRegion *mr, + IOMMUNotifier *n, Error **errp); /** * memory_region_iommu_replay: replay existing IOMMU translations to diff --git a/memory.c b/memory.c index a99b8c0..978da3d 100644 --- a/memory.c +++ b/memory.c @@ -1817,33 +1817,38 @@ bool memory_region_is_logging(MemoryRegion *mr, uint8_t client) return memory_region_get_dirty_log_mask(mr) & (1 << client); } -static void memory_region_update_iommu_notify_flags(IOMMUMemoryRegion *iommu_mr) +static int memory_region_update_iommu_notify_flags(IOMMUMemoryRegion *iommu_mr, + Error **errp) { IOMMUNotifierFlag flags = IOMMU_NOTIFIER_NONE; IOMMUNotifier *iommu_notifier; IOMMUMemoryRegionClass *imrc = IOMMU_MEMORY_REGION_GET_CLASS(iommu_mr); + int ret = 0; IOMMU_NOTIFIER_FOREACH(iommu_notifier, iommu_mr) { flags |= iommu_notifier->notifier_flags; } if (flags != iommu_mr->iommu_notify_flags && imrc->notify_flag_changed) { - imrc->notify_flag_changed(iommu_mr, - iommu_mr->iommu_notify_flags, - flags); + ret = imrc->notify_flag_changed(iommu_mr, + iommu_mr->iommu_notify_flags, + flags, errp); } - iommu_mr->iommu_notify_flags = flags; + if (!ret) { + iommu_mr->iommu_notify_flags = flags; + } + return ret; } -void memory_region_register_iommu_notifier(MemoryRegion *mr, - IOMMUNotifier *n) +int memory_region_register_iommu_notifier(MemoryRegion *mr, + IOMMUNotifier *n, Error **errp) { IOMMUMemoryRegion *iommu_mr; + int ret; if (mr->alias) { - memory_region_register_iommu_notifier(mr->alias, n); - return; + return memory_region_register_iommu_notifier(mr->alias, n, errp); } /* We need to register for at least one bitfield */ @@ -1854,7 +1859,11 @@ void memory_region_register_iommu_notifier(MemoryRegion *mr, n->iommu_idx < memory_region_iommu_num_indexes(iommu_mr)); QLIST_INSERT_HEAD(&iommu_mr->iommu_notify, n, node); - memory_region_update_iommu_notify_flags(iommu_mr); + ret = memory_region_update_iommu_notify_flags(iommu_mr, errp); + if (ret) { + QLIST_REMOVE(n, node); + } + return ret; } uint64_t memory_region_iommu_get_min_page_size(IOMMUMemoryRegion *iommu_mr) @@ -1907,7 +1916,7 @@ void memory_region_unregister_iommu_notifier(MemoryRegion *mr, } QLIST_REMOVE(n, node); iommu_mr = IOMMU_MEMORY_REGION(mr); - memory_region_update_iommu_notify_flags(iommu_mr); + memory_region_update_iommu_notify_flags(iommu_mr, NULL); } void memory_region_notify_one(IOMMUNotifier *notifier, From patchwork Wed Oct 2 16:51:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171685 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 16EC1112B for ; Wed, 2 Oct 2019 17:14:10 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E0C9F2054F for ; Wed, 2 Oct 2019 17:14:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Sr9czxqn" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E0C9F2054F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57882 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFiCW-00059v-K0 for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:14:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35502) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrT-0005dI-Sh for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrS-0003Za-Mj for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:23 -0400 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]:40254) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrS-0003Yf-GR for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:22 -0400 Received: by mail-wr1-x432.google.com with SMTP id l3so20477996wru.7 for ; Wed, 02 Oct 2019 09:52: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=Iv7FZBtE0/TX/BiHDid9YIJYTMNpsBZPGfCkSfXKG8A=; b=Sr9czxqnWw8POXU3b8S1X3P8AfMAN71pdD2HwtRWUPv3NgdmRri6i2EXQjyolPfxZp S/DbTdm84l4llCSuzX12RawsZtHNHC4Hnp9UIKetulpb3x/hphBNbLpWy2/CKKIJ6tuQ oKCcG3hjhujBa+TJN8HN9VYvGnWc0AUSNQIUwUt9FXODZDuAC4SwqjbKW2GCG+jpSscZ QH5qSQUk5Rd/Y0dw3E//WRS/47mOXZPL1pmgCPiwl5wa3NX02xe+RySWZoO0N4Q+g7Yv 4OITVTMQMd87K4rhD9Q2oln2Bb9a/hoxJ2V3oFXpir1PM0pGhIBVcLIrQVuQRN3x9F0Q 1nuw== 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=Iv7FZBtE0/TX/BiHDid9YIJYTMNpsBZPGfCkSfXKG8A=; b=IaLgYs6p1Zvlnx3TdnAporTRvFq3zd5gVOzUhOByo+L3oZOQAtVqxL4WYoI0cA4vpG oMT4mEBbmPijX5h2eF5u7DAMlx322aXdUtfLwmCL1eGhWcfITgWlo3MOBJAZxfS2VMJY 9mIb5ChQ/LrdDPqbFyuWoweE8R7c/jsin2XT1ROz/7lns5wzfzV+aXUwchHlrST021xR 89oErCNL+/pkIDPoi9hwiN6/nE3Mt9SNq6RCiiC1JxOB23LijD7GeOA4MyZEd3H6ZhpQ +TzIgzPBgoxX6qgzeM5ylXw/LvQkEAsqnrKM2e8C7pJYN2RT6AiKfJwAqMlJUXgBPPiC iyLA== X-Gm-Message-State: APjAAAXYaC1GkBQcofJYZauWpaUceLydviEQyhGlqiLSM8fAcglX7N5O rZOsye5w9wKApH8XNDhmkGGapQUk X-Google-Smtp-Source: APXvYqxt1HTf7IY12qsLPgIF+Mt2M2cat/FxmRwf1SNgqi45ClSfAH23MBKgFD8zcpqIeYN0sy4s5Q== X-Received: by 2002:a5d:60c8:: with SMTP id x8mr1090729wrt.107.1570035141202; Wed, 02 Oct 2019 09:52:21 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:20 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 25/30] Fix wrong behavior of cpu_memory_rw_debug() function in SMM Date: Wed, 2 Oct 2019 18:51:48 +0200 Message-Id: <1570035113-56848-26-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::432 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Dmitry Poletaev Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" From: Dmitry Poletaev There is a problem, that you don't have access to the data using cpu_memory_rw_debug() function when in SMM. You can't remotely debug SMM mode program because of that for example. Likely attrs version of get_phys_page_debug should be used to get correct asidx at the end to handle access properly. Here the patch to fix it. Signed-off-by: Dmitry Poletaev Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 2 +- target/i386/cpu.h | 3 ++- target/i386/helper.c | 5 ++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 313a2ef..8fcb571 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -6245,7 +6245,7 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data) #ifndef CONFIG_USER_ONLY cc->asidx_from_attrs = x86_asidx_from_attrs; cc->get_memory_mapping = x86_cpu_get_memory_mapping; - cc->get_phys_page_debug = x86_cpu_get_phys_page_debug; + cc->get_phys_page_attrs_debug = x86_cpu_get_phys_page_attrs_debug; cc->write_elf64_note = x86_cpu_write_elf64_note; cc->write_elf64_qemunote = x86_cpu_write_elf64_qemunote; cc->write_elf32_note = x86_cpu_write_elf32_note; diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 033991c..eaa5395 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1690,7 +1690,8 @@ void x86_cpu_get_memory_mapping(CPUState *cpu, MemoryMappingList *list, void x86_cpu_dump_state(CPUState *cs, FILE *f, int flags); -hwaddr x86_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr); +hwaddr x86_cpu_get_phys_page_attrs_debug(CPUState *cpu, vaddr addr, + MemTxAttrs *attrs); int x86_cpu_gdb_read_register(CPUState *cpu, uint8_t *buf, int reg); int x86_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg); diff --git a/target/i386/helper.c b/target/i386/helper.c index 0fa51be..c3a6e4f 100644 --- a/target/i386/helper.c +++ b/target/i386/helper.c @@ -715,7 +715,8 @@ void cpu_x86_update_cr4(CPUX86State *env, uint32_t new_cr4) } #if !defined(CONFIG_USER_ONLY) -hwaddr x86_cpu_get_phys_page_debug(CPUState *cs, vaddr addr) +hwaddr x86_cpu_get_phys_page_attrs_debug(CPUState *cs, vaddr addr, + MemTxAttrs *attrs) { X86CPU *cpu = X86_CPU(cs); CPUX86State *env = &cpu->env; @@ -725,6 +726,8 @@ hwaddr x86_cpu_get_phys_page_debug(CPUState *cs, vaddr addr) uint32_t page_offset; int page_size; + *attrs = cpu_get_mem_attrs(env); + a20_mask = x86_get_a20_mask(env); if (!(env->cr[0] & CR0_PG_MASK)) { pte = addr & a20_mask; From patchwork Wed Oct 2 16:51:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171649 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 305E976 for ; Wed, 2 Oct 2019 17:07:02 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 06FFC2086A for ; Wed, 2 Oct 2019 17:07:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QKkS8f+7" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 06FFC2086A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57822 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFi5c-0005Nh-Sn for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:07:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35522) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrV-0005fP-Ie for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrU-0003bG-8v for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:25 -0400 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]:35043) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrU-0003aU-2o for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:24 -0400 Received: by mail-wm1-x330.google.com with SMTP id y21so7719816wmi.0 for ; Wed, 02 Oct 2019 09:52: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 :mime-version:content-transfer-encoding; bh=EdmGHfqAaar2VkfjETjdywF+GwsiDwVFg4LO4quUL88=; b=QKkS8f+72AoBw4GM1ve5VKEAFO8EBGZdgbHdmcqXRRqyx5B4pbgwdPAHJ11FtzBqye nBckuCVjI4i20UOKmVUP+l/nwttfAsHzcWw2btoTsPgCSE0tQrWCCGQ+aohnhienxRXo 28G6c/KH0+S4JFkPsIS+kkdYv0YaeMJAYj34TX5yp4mncsgiaTlu2sLM6n0JZBx9l37j iQUzaBjrmpp8nWnr6RcGbPSXl/fbaVH11tjj7jYaDelTeae8Q73zapKus5Shu5yLmgcA +MD5W+8HfwdJQHCfdIKK76MS+kGRxjEhLXGkEDsRqhzwAes4oP/b+wa3FFOAwpPtg/ip bzvA== 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=EdmGHfqAaar2VkfjETjdywF+GwsiDwVFg4LO4quUL88=; b=NC6qywyt+JVD30+8dhEKtALHzrHrUEzbYO1p0hYKA79au4SAOyoqaJkO7Jws5bC21c TidzJrB0pGV23XikHKd1IZ03BJI/7glMkJSYW2GXixORoUfBcnJH1isrN2LRtLvJlVWX OxyGQh1H81o0La7eN4jV+cNQXV966mDRM0PYemO83EQlVOiu5ZUqzlZ+pBZMmLfTd2gY JZ+fh1JlgshXojvwT38xYs7GaenuXFE7ARWq805fIRA1nDAsYuy/luoTo6W9UEqNS4NS kV9Yczj4WQOaOKDq0Ikg+Wz/+r1pdtOnU1OejiRCdeT5hR9Ipm6sNoR6E9ohdw+n3ssf 5Gbw== X-Gm-Message-State: APjAAAXmut8bMIOYl9D92rHhEG8CrRQLA2i5EBjoayCTOXA3N9g9YKHI 8Y+TNgNWPdyKyDEfsNPjY7LBu2Cj X-Google-Smtp-Source: APXvYqxP8tUdUrGNbSgz8AYfuJh4Tu38RXMuMg1Q5YXjtK90l7hxHn0wTWPN/MziKavuw26RATVLmA== X-Received: by 2002:a1c:4383:: with SMTP id q125mr3422048wma.122.1570035142792; Wed, 02 Oct 2019 09:52:22 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:21 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 26/30] util: WSAEWOULDBLOCK on connect should map to EINPROGRESS Date: Wed, 2 Oct 2019 18:51:49 +0200 Message-Id: <1570035113-56848-27-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::330 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau In general, WSAEWOULDBLOCK can be mapped to EAGAIN as done by socket_error() (or EWOULDBLOCK). But for connect() with non-blocking sockets, it actually means the operation is in progress: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-connect "The socket is marked as nonblocking and the connection cannot be completed immediately." (this is also the behaviour implemented by GLib GSocket) This fixes socket_can_bind_connect() test on win32. Signed-off-by: Marc-André Lureau Signed-off-by: Paolo Bonzini --- util/oslib-win32.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/util/oslib-win32.c b/util/oslib-win32.c index c62cd43..886e400 100644 --- a/util/oslib-win32.c +++ b/util/oslib-win32.c @@ -585,7 +585,11 @@ int qemu_connect_wrap(int sockfd, const struct sockaddr *addr, int ret; ret = connect(sockfd, addr, addrlen); if (ret < 0) { - errno = socket_error(); + if (WSAGetLastError() == WSAEWOULDBLOCK) { + errno = EINPROGRESS; + } else { + errno = socket_error(); + } } return ret; } From patchwork Wed Oct 2 16:51:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171687 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 83FD2112B for ; Wed, 2 Oct 2019 17:18:22 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 59ABB21848 for ; Wed, 2 Oct 2019 17:18:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HYaCnPlY" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 59ABB21848 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57910 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFiGZ-0000C9-DJ for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:18:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35530) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrW-0005gL-Ai for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrV-0003cL-64 for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:26 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]:42865) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrU-0003bR-VD for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:25 -0400 Received: by mail-wr1-x431.google.com with SMTP id n14so20461781wrw.9 for ; Wed, 02 Oct 2019 09:52: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 :mime-version:content-transfer-encoding; bh=OxyYW3J9MIFejQsNK56crK2gciUo0hC0sFhHCl2w7jI=; b=HYaCnPlYntcM5hSBCMZUuZAQDzwHKtUKmr1JeWvYvWT8GYAk2qmr/49Mz/DUvfIfI6 a9Hd5swVM28R5LxOqrMWxqC1s34VB4s5pVIr2ttNDDKGjTbPpoSEbRFQ5YEKbhURnbj3 ynlKpHoUvUfzqlRkMlJG2r5Pod7H2YsoE04n5xARfp6NtByp7dXQmWsSmiJrbkDYNGK0 EzOGf9OFA+peoIbRO/OJZAv36/QLiZDUF7MTCBoV7/1LP6uqw6ki3zVQw2H+otq0Z8qZ oDvngD7qlhWufLhC8CdUTXnVKzjku4D8DqjZihJHIdYuu5Va0881M+aoafLTlxa8iBth ZfBw== 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=OxyYW3J9MIFejQsNK56crK2gciUo0hC0sFhHCl2w7jI=; b=f+/6TOazd1xaWG6SfDSCoD5TuFYvnx85Iqo3nq1BakTBFnOr80gnEa7iyz0j8wKBZw BaoaVoXdPJdfVJEGC5LIqQCAulR9fZ1ikO+jvBEAg5zYZkuY02vgZ+z8HRPjDIlk9dWZ nU5HhyS/fLSgmwoH0tcyxWNJOabB5U1ZlNHNiPuAVMTfXxOMx78I6oXgYN7fC2jBBDVs XWZd+o8U2wj28tRs1NWmv3UziYFH11Bji2FhpSYDzNoWeuOhaPaQJszpZCCFh0QzgtW9 cHNNOmjqMtUzOEAsE76zLVRndTOPJNtql9c3as3HMVZf5M+v/dCMSsVJuOKsXLrxnsm2 v5cQ== X-Gm-Message-State: APjAAAXAjDjNjBa60qsgiBs9ZG9x80kn0MXBdtP8AhEY3B1DNP9ei8DJ xMa/fSjNsf55/6dbtvJaDMucahH7 X-Google-Smtp-Source: APXvYqzot8/kEjrGy2S/ggaM3vBFo4o2tx3CCntza1S442LTDGILtVfOBAyjhhpdQyUQ6QuE2iClQg== X-Received: by 2002:adf:9c93:: with SMTP id d19mr2219113wre.383.1570035143770; Wed, 02 Oct 2019 09:52:23 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:23 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 27/30] tests: skip serial test on windows Date: Wed, 2 Oct 2019 18:51:50 +0200 Message-Id: <1570035113-56848-28-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau Serial test is currently hard-coded to /dev/null. On Windows, serial chardev expect a COM: device, which may not be availble. Signed-off-by: Marc-André Lureau Signed-off-by: Paolo Bonzini --- tests/test-char.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test-char.c b/tests/test-char.c index d62de1b..45e42af 100644 --- a/tests/test-char.c +++ b/tests/test-char.c @@ -1103,7 +1103,7 @@ static void char_socket_server_two_clients_test(gconstpointer opaque) } -#ifdef HAVE_CHARDEV_SERIAL +#if defined(HAVE_CHARDEV_SERIAL) && !defined(WIN32) static void char_serial_test(void) { QemuOpts *opts; @@ -1460,7 +1460,7 @@ int main(int argc, char **argv) #endif g_test_add_func("/char/udp", char_udp_test); -#ifdef HAVE_CHARDEV_SERIAL +#if defined(HAVE_CHARDEV_SERIAL) && !defined(WIN32) g_test_add_func("/char/serial", char_serial_test); #endif g_test_add_func("/char/hotswap", char_hotswap_test); From patchwork Wed Oct 2 16:51:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171715 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3A9FB112B for ; Wed, 2 Oct 2019 17:21:54 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1101321848 for ; Wed, 2 Oct 2019 17:21:54 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZPBorgXS" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1101321848 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57952 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFiK1-0003qw-06 for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:21:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35547) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrX-0005id-Rw for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrW-0003eD-MT for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:27 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:53246) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrW-0003dL-Fu for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:26 -0400 Received: by mail-wm1-x341.google.com with SMTP id r19so7972746wmh.2 for ; Wed, 02 Oct 2019 09:52: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 :mime-version:content-transfer-encoding; bh=PclzfJqSWV+t6X/wVoNBPmc3tE3VD7bLUzGhh4ftL74=; b=ZPBorgXSQ3Y5PmTDTO0fRDUf4F5uk3YQPb8higaS3xNGQirpSr4PjJmkYoDA4cyp6V p8Cp2bchXRBpTzXRmAN1nKR5NrfH5vL/FWB5oGmA919OsOQiHA3y8KmDIEOAWvN7atUa QSxqT3wTNBEMe6vT4D7aJcWx+LSHQCCVLkEXuiICZONP+N8eFNl+HpTyGAa+SGGiQnQQ 3CCd9XRuoTrtLMANKw2u9FW6RVJp8cJ6BFVD/cC2km2XviM3z7QLFZKRWZwWF0aGHT1h 1eVP0yZQM3GWHLJXMiR3kbdqXpQEXIA9G+t0tVOk7/qZizmNfc8fFX8llYyyRftB42EI 3+2A== 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=PclzfJqSWV+t6X/wVoNBPmc3tE3VD7bLUzGhh4ftL74=; b=THCJJTl5sJ52q4mif2UAVeNQ/RRqipwOzksfXkfkEmQ/HPXuYSIGtAn6+H+EcykAwx +ragqwZ4vmSh2kKQ9t86tjkH5l3ylW7CMcqtH1Y7eNmCvKSraHX/1IidLUGhYXUumcVE 90ajDoVhfRJHyFyqSoZs83qCeuV5zt8wU/y2c6bN7/RigVb0aztubMexKWVM4pFDsYqx lOcEKFaz4JDg8nnoYkUbAuvkNcSd3AlxbX/wqWiX8YO/HDQBwv+uis2R0mvsWiUfyPd0 vk2oZs7tKZk0cg7Kblw0qlMcL0JGC3ty2AGMpnECWHckGlN5jhOTVtYGFb8aALBkgPNf 2z1g== X-Gm-Message-State: APjAAAXdBVhGNjZ1NPBAml/kP7iY13AYWW+4LiG15ZPOj5aeQrN53Xo5 l3DPRhkT8ZRlsWe3YM2V7PT3Fffn X-Google-Smtp-Source: APXvYqyrcwi8CxxIaB3r6xiT0v3cRAyxgXiIGM4hIRb98NMNLSRDOzteiyEDp0IMlxV2Mmamm53iow== X-Received: by 2002:a1c:80ca:: with SMTP id b193mr3357043wmd.171.1570035145160; Wed, 02 Oct 2019 09:52:25 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:24 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 28/30] win32: work around main-loop busy loop on socket/fd event Date: Wed, 2 Oct 2019 18:51:51 +0200 Message-Id: <1570035113-56848-29-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::341 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , James Le Cuirot Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau Commit 05e514b1d4d5bd4209e2c8bbc76ff05c85a235f3 introduced an AIO context optimization to avoid calling event_notifier_test_and_clear() on ctx->notifier. On Windows, the same notifier is being used to wakeup the wait on socket events (see commit d3385eb448e38f828c78f8f68ec5d79c66a58b5d). The ctx->notifier event is added to the gpoll sources in aio_set_event_notifier(), aio_ctx_check() should clear the event regardless of ctx->notified, since Windows sets the event by itself, bypassing the aio->notified. This fixes qemu not clearing the event resulting in a busy loop. Paolo suggested to me on irc to call event_notifier_test_and_clear() after select() >0 from aio-win32.c's aio_prepare. Unfortunately, not all fds associated with ctx->notifiers are in AIO fd handlers set. (qemu_set_nonblock() in util/oslib-win32.c calls qemu_fd_register()). This is essentially a v2 of a patch that was sent earlier: https://lists.gnu.org/archive/html/qemu-devel/2017-01/msg00420.html that resurfaced when James investigated Spice performance issues on Windows: https://gitlab.freedesktop.org/spice/spice/issues/36 In order to test that patch, I simply tried running test-char on win32, and it hangs. Applying that patch solves it. QIO idle sources are not dispatched. I haven't investigated much further, I suspect source priorities and busy looping still come into play. This version keeps the "notified" field, so event_notifier_poll() should still work as expected. Cc: James Le Cuirot Signed-off-by: Marc-André Lureau Signed-off-by: Paolo Bonzini --- util/async.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/util/async.c b/util/async.c index 4e4c7af..ca83e32 100644 --- a/util/async.c +++ b/util/async.c @@ -354,7 +354,11 @@ void aio_notify(AioContext *ctx) void aio_notify_accept(AioContext *ctx) { - if (atomic_xchg(&ctx->notified, false)) { + if (atomic_xchg(&ctx->notified, false) +#ifdef WIN32 + || true +#endif + ) { event_notifier_test_and_clear(&ctx->notifier); } } From patchwork Wed Oct 2 16:51:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171713 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 28AB013BD for ; Wed, 2 Oct 2019 17:21:48 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id F355121848 for ; Wed, 2 Oct 2019 17:21:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Q8ex01ZD" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F355121848 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57950 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFiJu-0003is-Om for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:21:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35558) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrY-0005ju-QV for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrX-0003fC-Ql for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:28 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:42469) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrX-0003en-Kr for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:27 -0400 Received: by mail-wr1-x443.google.com with SMTP id n14so20461935wrw.9 for ; Wed, 02 Oct 2019 09:52:27 -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=9FxYLphVXY4uST+nxeWKafzobQ3LpK2O54/JNRyeh/U=; b=Q8ex01ZDvD42NilWySzXQwWTeTpDqiandsgRDwBY+TEklq8EAkWCJNFBTyM3dCwBZf hXi03Jv/JNBzNaSQYcCoEvHP6VxAYHs9NZjR91Xz2Znil0WUshrXMfcXFObW2CUYJHMo M0Vh5+pQf1PGx4PvvNrptWo0VCZp8lMIz7KLAyQFKmTGNC7INrL2wFAFdGf/3D43Mxgc nWyrtw42FfMFLKcZqa3bNW/Piy7sG6j6wlF7XsWASZ8Zn70vA1VGYZwUbRhxeVgUQPCV /1vkF6BIl+AZTY4Y9cQywEQ+M9RHYPY8BWsdw+PQ0BlqHw2jR7X+wGkrpE9MzfmioqLz 1DYg== 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=9FxYLphVXY4uST+nxeWKafzobQ3LpK2O54/JNRyeh/U=; b=gw4zWYByfBWHAwURxNW+7jdZLkgRqCxXBFSLmkOwVY7vfbKA1yHJFAVp7mkXstbhep gCPKsIGbh+wG9Artx+izKpay9KHGKoXOV9rwyj0q249yYcNOQfqGbImYhm89q/PLqtyz 1La42PkIY8S5+gWXeQ8cLuQPI3ivGdRj3EHKXHL7lp1EBQM72dt8MY8o4PvT2DZ6J0CV vcx6BK8oTb88xrb32SNmTc26xZHpAdHIEJK9X+RAdqQ7AprtdpX9U13bTQV9y2EeVNjC 28ncM4b1EYIBfpdvFWspYvrdUscfWXzz57YeoKd+QQ/u1PAu4wS4vV5cbs7fiZUCnFUb Sl2A== X-Gm-Message-State: APjAAAWGhG48grqC8x9RYOV50cvbY/CwbFTsGQswFISOoyVtD3L5ElmI BNtUDaL+jeB6uOZstxPUA5AsDjei X-Google-Smtp-Source: APXvYqy9TtJ0VViJOXweruFrA5TPOxCtFx5fakumBX2TGlfqSdCdFuhzs5D66P2z//bzzvcs5uAXKw== X-Received: by 2002:a5d:4a52:: with SMTP id v18mr398185wrs.368.1570035146444; Wed, 02 Oct 2019 09:52:26 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.25 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:25 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 29/30] tests/docker: only enable ubsan for test-clang Date: Wed, 2 Oct 2019 18:51:52 +0200 Message-Id: <1570035113-56848-30-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" -fsanitize=undefined is not the same thing as --enable-sanitizers. After commit 47c823e ("tests/docker: add sanitizers back to clang build", 2019-09-11) test-clang is almost duplicating the asan (test-debug) test, so partly revert commit 47c823e5b while leaving ubsan enabled. Signed-off-by: Paolo Bonzini --- tests/docker/test-clang | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/docker/test-clang b/tests/docker/test-clang index db9e697..8c51ead 100755 --- a/tests/docker/test-clang +++ b/tests/docker/test-clang @@ -17,7 +17,9 @@ requires clang cd "$BUILD_DIR" -OPTS="--cxx=clang++ --cc=clang --host-cc=clang --enable-sanitizers" +OPTS="--cxx=clang++ --cc=clang --host-cc=clang" +OPTS="$OPTS --extra-cflags=-fsanitize=undefined \ + --extra-cflags=-fno-sanitize=float-divide-by-zero" build_qemu $OPTS check_qemu install_qemu From patchwork Wed Oct 2 16:51:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 11171673 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B35AD76 for ; Wed, 2 Oct 2019 17:10:02 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 87DFC2086A for ; Wed, 2 Oct 2019 17:10:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="blNBNqFf" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 87DFC2086A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57846 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFi8X-0000Y6-3f for patchwork-qemu-devel@patchwork.kernel.org; Wed, 02 Oct 2019 13:10:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35573) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFhrb-0005nd-Lk for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFhrZ-0003hQ-I9 for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:31 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:33858) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iFhrZ-0003g7-CJ for qemu-devel@nongnu.org; Wed, 02 Oct 2019 12:52:29 -0400 Received: by mail-wm1-x343.google.com with SMTP id y135so5359332wmc.1 for ; Wed, 02 Oct 2019 09:52: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 :mime-version:content-transfer-encoding; bh=SMJwE8Po6gqDcIMCVlLUJtYONx0fpzl7bDQkyAr27WI=; b=blNBNqFf318bJBWyTHWJA2SzafzWoZleULzgxSfZ88Ds+FlN8L+E44q7eow97uxLzr XNHra2sSJlN1HeiCVXql5UEyhXbGvqFFFOrNhlpgatc3w/OOlD+Bc/iJOeiZ+iyATMeS 4AZk5NQN2MOlweWpeQEnK87AJJnxqjAj5mHyF/5YWYYlzjPbblRo5Ajx87vy+uz83hg6 475KljAlLAp2WM/iJy9r9kU1KMDw+dkL9sCDAZHpR8JFVGj84qfUFSFDW/BI94RVGY35 beFjL+CzRoTWNbtDXHPUth1TjxK5Ro+WufDoxPqy9hou2S8ZmRzAO3B2jn6qSDQxAZAY HJoQ== 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=SMJwE8Po6gqDcIMCVlLUJtYONx0fpzl7bDQkyAr27WI=; b=aJoUUFTIw98u/FVXp3N4qOGhkT5mNONQAGHiMeVNhKk05Z1HjAbCqxOpkiMF1ZL3MH RqX97edD+QK406mSXnNfRotDU2RCbXovot20lRGqrdQ6DWSHlY+a7ZVUbXt6BOpClgut jmFE/rvS25XPQPFrFzQkr9tOYIh4oSPGeVp5hqimzTJs4yeBw27ODuPe9PnyNgll6gCr l3vDHTvrERI6GqMk/NlA5mMRGLFz1PngocxX4dmmlxq0x+9+BQ8fAlZ36dAcKkFWKeR/ LbZL9PzlbxQlP5XLg6iqdLLOrsQWQNoRAmwzXWjo/FkjVaw7X90W72Exq746lop+jM4+ ZUXQ== X-Gm-Message-State: APjAAAVQk9iSbURxqq3WziDUw+xpBRbHfLGxSixTyTids6xjRzvjNgzB RO0Ziqddfel1Hn/i3F7AcW+Uw5LI X-Google-Smtp-Source: APXvYqyVti6vP2kaz+LWY7933E/mmK8a89v1hV4ivrNDUh7DFBdld0eC992dsHJPVqAQlBuhsF5ALw== X-Received: by 2002:a1c:2d44:: with SMTP id t65mr3647412wmt.12.1570035148081; Wed, 02 Oct 2019 09:52:28 -0700 (PDT) Received: from 640k.localdomain ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id g4sm27303990wrw.9.2019.10.02.09.52.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Oct 2019 09:52:26 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 30/30] accel/kvm: ensure ret always set Date: Wed, 2 Oct 2019 18:51:53 +0200 Message-Id: <1570035113-56848-31-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1570035113-56848-1-git-send-email-pbonzini@redhat.com> References: <1570035113-56848-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::343 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?utf-8?q?Alex_Benn=C3=A9e?= Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" From: Alex Bennée Some of the cross compilers rightly complain there are cases where ret may not be set. 0 seems to be the reasonable default unless particular slot explicitly returns -1. Signed-off-by: Alex Bennée Signed-off-by: Paolo Bonzini --- accel/kvm/kvm-all.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index aabe097..d2d96d7 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -712,11 +712,11 @@ static int kvm_physical_log_clear(KVMMemoryListener *kml, KVMState *s = kvm_state; uint64_t start, size, offset, count; KVMSlot *mem; - int ret, i; + int ret = 0, i; if (!s->manual_dirty_log_protect) { /* No need to do explicit clear */ - return 0; + return ret; } start = section->offset_within_address_space; @@ -724,7 +724,7 @@ static int kvm_physical_log_clear(KVMMemoryListener *kml, if (!size) { /* Nothing more we can do... */ - return 0; + return ret; } kvm_slots_lock(kml);