From nobody Thu May 2 03:21:58 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1554219231481501.19035400789755; Tue, 2 Apr 2019 08:33:51 -0700 (PDT) Received: from localhost ([127.0.0.1]:35738 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hBLPz-0007OT-Tt for importer@patchew.org; Tue, 02 Apr 2019 11:33:43 -0400 Received: from eggs.gnu.org ([209.51.188.92]:47633) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hBLO7-0006VZ-OJ for qemu-devel@nongnu.org; Tue, 02 Apr 2019 11:31:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hBLO6-00028U-Kv for qemu-devel@nongnu.org; Tue, 02 Apr 2019 11:31:47 -0400 Received: from mail-qt1-x842.google.com ([2607:f8b0:4864:20::842]:37570) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hBLO6-00027p-AM for qemu-devel@nongnu.org; Tue, 02 Apr 2019 11:31:46 -0400 Received: by mail-qt1-x842.google.com with SMTP id z16so15745849qtn.4 for ; Tue, 02 Apr 2019 08:31:46 -0700 (PDT) Received: from localhost.localdomain (104.129.187.94.16clouds.com. [104.129.187.94]) by smtp.gmail.com with ESMTPSA id n46sm8376411qtn.75.2019.04.02.08.31.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 02 Apr 2019 08:31:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=wQxYlKjpJWOxtOnC4ROa9hYVao8Z7TTSX/dqg4KE9Vk=; b=m5UdLPFMH0VF4CuT0k90gT2MgWpnk830u/2NILaplZFRFeN7igyUFcOkq2k+Yj1YT5 USPD9OGFid5ig7p7aRx5zbQY16A/56I+XJcjVIkamVq8voJ9HWJEvm/d7GhAgP4Vbbzj IwRuY10GtTqLKlvkNUmBK1rs93qUolEnNcDzP4BiV4COivu9vkaWdrDvohw+lOlvXtyA 8cCi7LIywjISkBOktESe8axY4OnuGpV1QdrL/hmBKA7IwHjVAhSS9PVMFPRsd7RRKLL9 MpMwwUixpFZI9OT9b53MhMq3Pq1C+HHkDikENZaU53EudZM3cld1h9d2aHcemtAwxsM+ NS4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=wQxYlKjpJWOxtOnC4ROa9hYVao8Z7TTSX/dqg4KE9Vk=; b=T1dLT9lUMJaavD8N8NPCzEpPcvWj7Sp21x3v/sfEnNMd1mOU2HfGl7+HpXTSV8MOY8 /ZOvdpFCDQ2oIel2f8B98cpWkBSs4RhTQ+1xy+Xk9BiuiWz2P0+ulvd9Nso02GwzQe5G rZ7CEgMDT6kSv6laBjvp++aOUUg6m1eMKprRqQvSjW8qk49ds6dVmTxUJ8tf2btBaCvW kayoRTwHQ3ZcsQtxUegj4h84z/AdgIJkhpe7y+W8wf5dGtKxjJEHnzMkCY9B5MceJP2V 1B306HkyoKCJA2G95MBeeZtioDFpopwjCCM0pn5SJbi4Ra6Yuk9UFw+jjxX/75UbDcgy XQ0A== X-Gm-Message-State: APjAAAV2MFHWd03ByXnHDmhYqZ8ey83GiedguRRNBBU4hWySywK4egCz 16JaLZX2+RZmok7lXsBcObs= X-Google-Smtp-Source: APXvYqwdOha04jyj3OUS2psXDTzX1dmdU7twMcHR9owlCOFX/Z+5hJC/CcEEu3+ojUNImW/go+X0MQ== X-Received: by 2002:ac8:3696:: with SMTP id a22mr59769612qtc.191.1554219105684; Tue, 02 Apr 2019 08:31:45 -0700 (PDT) From: Catherine Ho To: Paolo Bonzini , Richard Henderson , "Dr. David Alan Gilbert" Date: Tue, 2 Apr 2019 11:30:01 -0400 Message-Id: <1554219001-18301-1-git-send-email-catherine.hecx@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1553010562-13561-1-git-send-email-catherine.hecx@gmail.com> References: <1553010562-13561-1-git-send-email-catherine.hecx@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::842 Subject: [Qemu-devel] [PATCH v2] migration: avoid filling ignore-shared ramblock when in incoming migration X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, Catherine Ho , Markus Armbruster , Peter Xu , Juan Quintela Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Commit 18269069c310 ("migration: Introduce ignore-shared capability") addes ignore-shared capability to bypass the shared ramblock (e,g, membackend + numa node). It does good to live migration. This commit expectes that QEMU doesn't write to guest RAM until VM starts, but it does on aarch64 qemu: Backtrace: 1 0x000055f4a296dd84 in address_space_write_rom_internal () at exec.c:3458 2 0x000055f4a296de3a in address_space_write_rom () at exec.c:3479 3 0x000055f4a2d519ff in rom_reset () at hw/core/loader.c:1101 4 0x000055f4a2d475ec in qemu_devices_reset () at hw/core/reset.c:69 5 0x000055f4a2c90a28 in qemu_system_reset () at vl.c:1675 6 0x000055f4a2c9851d in main () at vl.c:4552 Actually, on arm64 virt marchine, ramblock "dtb" will be filled into ram during rom_reset. In ignore-shared incoming case, this rom filling is not required since all the data has been stored in memory backend file. Fixes: commit 18269069c310 ("migration: Introduce ignore-shared capability") Signed-off-by: Catherine Ho Suggested-by: Yury Kotov --- hw/core/loader.c | 15 +++++++++++++++ include/exec/cpu-common.h | 1 + migration/ram.c | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/hw/core/loader.c b/hw/core/loader.c index fe5cb24122..861a03335b 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -53,6 +53,7 @@ #include "hw/nvram/fw_cfg.h" #include "exec/memory.h" #include "exec/address-spaces.h" +#include "exec/cpu-common.h" #include "hw/boards.h" #include "qemu/cutils.h" =20 @@ -1086,6 +1087,9 @@ int rom_add_option(const char *file, int32_t bootinde= x) static void rom_reset(void *unused) { Rom *rom; + MemoryRegion *mr; + hwaddr hw_addr; + hwaddr l; =20 QTAILQ_FOREACH(rom, &roms, next) { if (rom->fw_file) { @@ -1094,6 +1098,17 @@ static void rom_reset(void *unused) if (rom->data =3D=3D NULL) { continue; } + + /* bypass the rom blob in ignore-shared migration case*/ + if (runstate_check(RUN_STATE_INMIGRATE)) { + rcu_read_lock(); + mr =3D address_space_translate(rom->as, rom->addr, &hw_addr, &= l, + true, MEMTXATTRS_UNSPECIFIED); + rcu_read_unlock(); + if (mr->ram_block !=3D NULL && ramblock_is_ignored(mr->ram_blo= ck)) + continue; + } + if (rom->mr) { void *host =3D memory_region_get_ram_ptr(rom->mr); memcpy(host, rom->data, rom->datasize); diff --git a/include/exec/cpu-common.h b/include/exec/cpu-common.h index cef8b88a2a..c80b7248a6 100644 --- a/include/exec/cpu-common.h +++ b/include/exec/cpu-common.h @@ -76,6 +76,7 @@ void *qemu_ram_get_host_addr(RAMBlock *rb); ram_addr_t qemu_ram_get_offset(RAMBlock *rb); ram_addr_t qemu_ram_get_used_length(RAMBlock *rb); bool qemu_ram_is_shared(RAMBlock *rb); +bool ramblock_is_ignored(RAMBlock *block); bool qemu_ram_is_uf_zeroable(RAMBlock *rb); void qemu_ram_set_uf_zeroable(RAMBlock *rb); bool qemu_ram_is_migratable(RAMBlock *rb); diff --git a/migration/ram.c b/migration/ram.c index 35bd6213e9..d6de9d335d 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -159,7 +159,7 @@ out: return ret; } =20 -static bool ramblock_is_ignored(RAMBlock *block) +bool ramblock_is_ignored(RAMBlock *block) { return !qemu_ram_is_migratable(block) || (migrate_ignore_shared() && qemu_ram_is_shared(block)); --=20 2.17.1