From nobody Sat Feb 7 04:09:23 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1680458239; cv=none; d=zohomail.com; s=zohoarc; b=ACSzc4U77kkl41+PD94WxmhgylI6l8CqL9Mhwv5VxgkFU45+nNVQNMPZ6QAngHbnsw3j8FgZbiBVjasdvKTc3785A2PCOwdoNPBobUm6+8EFgJRTrUsbKf6Q8azx+VXkkDhsuE5YrcmYhATcc5CfUncs6PsvXvE83+rjENS/QXw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680458239; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=IgQEqMx1KzyvMe3fPW5iRA2UFoYqr8sL7nBkFhCtSmA=; b=Y8+2RF572r/LJR8xM2wMsdV3KkdSllM0owLQuJ9GH+JTTCtFdE00Vo6UXjA1ZDRV02jKhSxdrnlYYQWKTy/she+wyfD3MsF0QWF0NTHUIRA4YtTC9hcTztDmMtnj2jtYNd/qstgcI12juTwPelKvqWwsmcl1QR3vNYOmAzKOFjc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1680458239023853.1574009729542; Sun, 2 Apr 2023 10:57:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pj1wF-0006kh-LV; Sun, 02 Apr 2023 13:56:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1w8-0006jO-J0 for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:20 -0400 Received: from mout.web.de ([217.72.192.78]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1w2-00040y-OX for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:13 -0400 Received: from gecko.fritz.box ([82.207.254.111]) by smtp.web.de (mrweb105 [213.165.67.124]) with ESMTPSA (Nemesis) id 1M9qhD-1poH7h23PB-005hJe; Sun, 02 Apr 2023 19:56:04 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1680458164; i=lukasstraub2@web.de; bh=ZCK/7ZYmCiEjL9Cwf/dMpYNe7dkpCS2X0vJu+4hpjQU=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=UHDAEzl8RmVuCHHcUOQbGQj9RIMWREvH07e5GJg9Qg65T+ljNF2GJ6qH9/u+nUOsi /WB1xPm2SkCEAd37sdZKNX7LdLFX1m9aJrlB2IWDLJmyNG5Mx+EL3IvMTSLs4uESnp dqvqYxMa3pbcq7PohvaABQk5OzcTAGCuAY9pvFDAK9SXlYiKLJdNHw9W06nz0p5gEe eZI/xkMV5yM6A4EXhSgdrY6mmvBdpH2BMujbThaOJYr0YakgsRFK9M1rKQ8wPwY0m6 lFgxqMtPdKRXY1m6sxs9WD3lId4WQXbQ1LuzJt4mZ5fZnOYPJxJQSg/mEy4EILug09 A2xvCzQRbR13w== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Sun, 2 Apr 2023 17:56:03 +0000 From: Lukas Straub To: qemu-devel Cc: "Dr. David Alan Gilbert" , Juan Quintela , Peter Xu Subject: [PATCH 01/14] ram.c: Let the compress threads return a CompressResult enum Message-ID: <18ad4a56517e3d63411e7cb8df6b47fe0162c406.1680457764.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/AY9O2Yo_kjUNX1skT9HgwIN"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:mfpCIEednmULyaZH8OtD7/hcp09240tYwpdhOEI8oIWbnAVja/L FxQIZdldxdxG8Ewpa+/5awLsTl0tem6QgXSY7nSGqFtYb/3GzyZuIr41xjsTQl8xJVzKl3k RyMBKsqOJ2iGzKiSpjQ86kOyQPdHNaxoeRySujdkhENXUNVm0KS83xoInCqnG2pCZ3X5/EJ uKemm+fIeWDHVzNWRj1zg== UI-OutboundReport: notjunk:1;M01:P0:6xegMPjaibY=;FDKNT39eI3r37TeC5Yhu3R355S7 YHb0alnh3uymM5B235rt/Mu/0Xsl1P4elh1FPrhPHbwPwOF32xDDlDJgH0gxDY0YG4DAxDe3w iYlrmmAHuQ1HEAry6W8VkZ3k9ay617317PVhz5qOJEY633ePnH+WTSmWLX4YVxHio4dUfqdQq D8kZCk0V1egZFhZaim84VnnYItIas//8dclpnPQ+5GazSB93kFnc1FXETPzJEZyf1xsAaeY55 M0Zy/IiPhEW2Qi5aSBbuG0GFcqI7XdKiP4T0zoOkNipKnoDoDFRIROmqgh7OTL89lJYhUXIUJ ZI8HRjTyy8FaU5yteWSY3jOAY1llzd5kGoRvAvjfikQphSaRkyN1C0izxqMi8z2A9SimOdTQS M29g1ltyVCWzNa51fqud/f1sCLRYACZ83dzCzf7rqwRJ3T3kBKy/trRzF7XfuocqdzMluS/zA fj7ipNpKwSycr5oqtolLfaL1EZmsYCPEmdu4spoSM295kAl8jCqS0r3RDG7Yps7GjQdvqpvmP mv2VPaXxEq5/TUvZVJaEM0xnF4jn5EWIJKnAA4K7xhhKrCutryFcu07PdXIuLxOhyXwIzjRvC KH7erqwOUVu/4Z8LmAtK4LyCKj+LTggUz/kPGU7yM+eWHF/WF7/ZikkJANtLcHl8GV1zcutku 5iaIlo656ha9bS8Mk+cNx7l0A8t9tUZMG1d8Nz8Rrk34pdaVRJIfDVIxfU4VhPo4W/NsbZPrm mWV2tkh8DpIJPz7KpLENBqJIyBZnzdNmfSUBE544+s1J/7nt0tEYO2JVtiICX7pBNeODVcO8T sANAe7fnz2fJ2QVkgGEGbLm985Fk1lffhMXN/6ZLjpY/4k83FPxM9eSvmhG3U9KJWSvBgLtrn 6Qa0MiMmYZb6q3J9Ag0RgL3PYuezy9sjslLSFEdSibiVjigXNzULth3D02lvOc+53yjXGE7Tx vsnTjkoX1n4eFu8K4JgHJXW2XBw= Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=217.72.192.78; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1680458240585100003 --Sig_/AY9O2Yo_kjUNX1skT9HgwIN Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This will be used in the next commits to move save_page_header() out of compress code. Signed-off-by: Lukas Straub --- migration/ram.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index 9d1817ab7b..ca561e62bd 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -493,10 +493,17 @@ MigrationOps *migration_ops; CompressionStats compression_counters; +enum CompressResult { + RES_NONE =3D 0, + RES_ZEROPAGE =3D 1, + RES_COMPRESS =3D 2 +}; +typedef enum CompressResult CompressResult; + struct CompressParam { bool done; bool quit; - bool zero_page; + CompressResult result; QEMUFile *file; QemuMutex mutex; QemuCond cond; @@ -538,8 +545,9 @@ static QemuCond decomp_done_cond; static int ram_save_host_page_urgent(PageSearchStatus *pss); -static bool do_compress_ram_page(QEMUFile *f, z_stream *stream, RAMBlock *= block, - ram_addr_t offset, uint8_t *source_buf); +static CompressResult do_compress_ram_page(QEMUFile *f, z_stream *stream, + RAMBlock *block, ram_addr_t off= set, + uint8_t *source_buf); /* NOTE: page is the PFN not real ram_addr_t. */ static void pss_init(PageSearchStatus *pss, RAMBlock *rb, ram_addr_t page) @@ -564,7 +572,7 @@ static void *do_data_compress(void *opaque) CompressParam *param =3D opaque; RAMBlock *block; ram_addr_t offset; - bool zero_page; + CompressResult result; qemu_mutex_lock(¶m->mutex); while (!param->quit) { @@ -574,12 +582,12 @@ static void *do_data_compress(void *opaque) param->block =3D NULL; qemu_mutex_unlock(¶m->mutex); - zero_page =3D do_compress_ram_page(param->file, ¶m->stream, - block, offset, param->originb= uf); + result =3D do_compress_ram_page(param->file, ¶m->stream, + block, offset, param->originbuf); qemu_mutex_lock(&comp_done_lock); param->done =3D true; - param->zero_page =3D zero_page; + param->result =3D result; qemu_cond_signal(&comp_done_cond); qemu_mutex_unlock(&comp_done_lock); @@ -1463,8 +1471,9 @@ static int ram_save_multifd_page(QEMUFile *file, RAMB= lock *block, return 1; } -static bool do_compress_ram_page(QEMUFile *f, z_stream *stream, RAMBlock *= block, - ram_addr_t offset, uint8_t *source_buf) +static CompressResult do_compress_ram_page(QEMUFile *f, z_stream *stream, + RAMBlock *block, ram_addr_t off= set, + uint8_t *source_buf) { RAMState *rs =3D ram_state; PageSearchStatus *pss =3D &rs->pss[RAM_CHANNEL_PRECOPY]; @@ -1472,7 +1481,7 @@ static bool do_compress_ram_page(QEMUFile *f, z_strea= m *stream, RAMBlock *block, int ret; if (save_zero_page_to_file(pss, f, block, offset)) { - return true; + return RES_ZEROPAGE; } save_page_header(pss, f, block, offset | RAM_SAVE_FLAG_COMPRESS_PAGE); @@ -1487,8 +1496,9 @@ static bool do_compress_ram_page(QEMUFile *f, z_strea= m *stream, RAMBlock *block, if (ret < 0) { qemu_file_set_error(migrate_get_current()->to_dst_file, ret); error_report("compressed data failed!"); + return RES_NONE; } - return false; + return RES_COMPRESS; } static void @@ -1496,7 +1506,7 @@ update_compress_thread_counts(const CompressParam *pa= ram, int bytes_xmit) { ram_transferred_add(bytes_xmit); - if (param->zero_page) { + if (param->result =3D=3D RES_ZEROPAGE) { stat64_add(&ram_atomic_counters.duplicate, 1); return; } -- 2.30.2 --Sig_/AY9O2Yo_kjUNX1skT9HgwIN Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmQpwbMACgkQNasLKJxd sljtvxAAgDWC8BsE/M4tXb7fEdpFI1nfT5IgM9OFDdVQJumn9enkg+ynARIEd6hx WC9KziD30mkba1NglXVkZBYsjuhqDUbgPzIIEEQEFUMchyUpAT/LF/FHpxubgJJe PFiADWqO19c8GFGsNqKlIBzSzhVmorn2wIyi/r8MuNtLj9S5WwEOJMRHinOwxcuA kS1x89FnpEISQYuKvUooC+i3bvFoHwPDJLJ5jr2gaOLhqSrJtIOEQHRc6BsoPve+ wgsWoq8PIFo+HXav7pfc1ftmUlxO2zWep5EbQdeVnButeGCZBI3pWZZLggQTmN28 h5fno42umVU08B31PvewNyoAjbFd8yqYAAdstyX/jPXzzFpaUVj8YC8DdUWH77/R NFOl1JecVbPLKRVS0OvbHmQiZ7oC6O5FsiKbVcUhV5CLNtoWuuozuGdcj8UHQrac d9qTV5eRIeRDdw3uPg4AE0dDZ2dTOkoSfKCksDMklWkls/SlLERXTf9kTR4dKUec UYprh0guRobsvQBJdBDJj0yrmp4YA1K7lSW52c0wnIRf6DQq24bBrUwjtf2MCiPn AlBb3r+F9VVSCJEzi/c5e6i/Z1XbKmX+8Lgguafy3QNZuCNdRlddytiGMbRX8MLu 6lw4l8ZpcW0hCiQTPK/XigQ8Syq0yJ/LU4j2wdmAm7+wUvjuGo0= =EC2J -----END PGP SIGNATURE----- --Sig_/AY9O2Yo_kjUNX1skT9HgwIN-- From nobody Sat Feb 7 04:09:23 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1680458219; cv=none; d=zohomail.com; s=zohoarc; b=OMwMESyWtavkKr9cs3YCnT79ehCjNDdBnuWGCxAz/ZT7DEuL4woDXgkCyr/OxKNtnmoOF1SkPZOn3A9Nx8GEaKJf5zDq+VkzPBlTxymJaXGoNt0W4jXrC5lMrWPwuSrw2TK540MhkPuIoty/KzFhWKZjPqPNTmZmMAV0FaKbrgs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680458219; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=yHpb2vq520aBZWe6sIzF1aVaZcD4lr/vgOlzge6/PRc=; b=j7r1GskQ3vBGaNiqG3PMFACi0E0W7R0CtGbczyuCYxWZuY1xCUAOeEAvotSE4JuvR6LD8LBLcmb2WNLOo5q3IeTlCDVKxH2WN5AYHI1E6yhi/cu7+rjVsqmp8ayV81f18aoHHS88aQmUusGtwvUu/61DHbHo5i3s1zOgWfP3WCA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1680458219284159.4856959441181; Sun, 2 Apr 2023 10:56:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pj1wJ-0006l0-Pd; Sun, 02 Apr 2023 13:56:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1w8-0006jP-JT for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:20 -0400 Received: from mout.web.de ([217.72.192.78]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1w4-00041X-Kh for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:15 -0400 Received: from gecko.fritz.box ([82.207.254.111]) by smtp.web.de (mrweb105 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MPrPV-1q5FmN2Ifj-00MoWy; Sun, 02 Apr 2023 19:56:08 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1680458168; i=lukasstraub2@web.de; bh=SghmMtF+k67qN3g6avmGYkcYWDV7UwGxn9JjAkaB19Q=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=I/qF6dw+//FyS/W4DnLtCUua3KYzzQHheTMq7uul+rD5Y4KfchNf4PeyBxr28V9GS WzOiLEAE83x0rh6qtts08RKszh9tKL/P+oS7ZE7KeymM91FuwbyQ1YWe5ie2mht5i2 Hv/zX73Vod+Xxn7fNz4w1ElaxJh+IiBPZr88pJbVgypcsQCJtgSKT3JEr4Q7DOt8ih uhSTF1wRSyu36yC7n8yWL8lsymywHgRNNFBub4kuavDahgWAYwNuFbWxtHLfXMLnFg VWZKwr7zmc2V42L4nIZk8mHDI/WrLPMWfNv1YBDQpUH6Dd0z3bzh9qpTy9NoTqmgfD p3n3DQO1B5Kww== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Sun, 2 Apr 2023 17:56:07 +0000 From: Lukas Straub To: qemu-devel Cc: "Dr. David Alan Gilbert" , Juan Quintela , Peter Xu Subject: [PATCH 02/14] ram.c: Dont change param->block in the compress thread Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/PbmHjqu+Uf/NnPxncBOgyUn"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:GZSaNbf0FvnGQL74srCUl7otgBc1ZtCfWT2x5ZaHx6aP45xQh/S MW9p18/ZDQq2PqoScqW2lYMk0h0sauHiIoIXWJUe+QhnenzGQNeUunWTGpbPvrbzM1DicS4 p5eKfg4DeH2+HxaQPDuDEIb+E54S3T+MslNgCjMgu1CLXg0Jlm8Ddvmh0NxqpyAHTL95gdO 9TY7qJ3GY35733v/ucL8Q== UI-OutboundReport: notjunk:1;M01:P0:KGX0jphtKmY=;A4NhxOeqBuOKfqKXHueMJ8KD2v2 67maMttj1hu8yLtQhRoDisXmn3CLXJtvlvSQlUdLshbSLC+Sb1XGnI+d2iIlYsTnXMPx7LJuF qBuDDb13ZZff/tLNIYuKj83M9n7NTpendsM6HisKdaShM5LbEsOf+OlSOSPpm88nZWjUeF2fy YgYG6t/TiDvPqzZW8ljh3mpRla8HQ+uw0NoKCEXDdHm22GWbCx2ykL+/6kjwuqZgMq0kNOwbP s3DiE3mVbBsNlcMqK6ay2aTbRoZnqUgOrnxGwzcG14TCw1EtYzhUyBofEi4IkZGNaIc0n5Tdf +YopDOLaLGyi6qqcZAyqKfM70+PJGbRHOODHENbWPj0wgTasMkxcoVQGNYhklm8GfnWDg18f7 a+UFAjlWnQyCSsDvnhHEF5BsX+hccjed7diPYNNjLkWqXw/UfvckeW6Yj8GDDJIs1NlMVbeWx l2b+q/7pZm/u3OxDD+wonxAJRoixbSK3hXczynqmu/7exPvoqc6RUUSRCn7LbbzvTlHb4nGi7 ++zztpkFOLyS7+7ooop8Tl8NJO6ncYwIHtqRdQGHLav4sFnUa9ujSNN3wQPS8rhl1TdIWCugb N3ThifCh8rRRlPKYhPMuMW+0Qxr8W+zyH3dSS2JIhhmZ4zOtAr+YJqtIUzrs7kKuQ3f4uo/D7 k3srvEGEN1+2NsxAZc+EsZCGedm+fgkEaWc2YcAMmoV0n8g/PhU7DepUVgJcvtJlvdcc1sk5K IklYw3OSThOD+QiHZWu+cfLvWKlvqHB3HUQ76xU3mINy4NI1MyTLfgkYDIJnOzfV+gGvlZxow rUqPY5ZrxriGCXg8Wacvey1qt7tpsnJRWK8vNBq8RYhrBv5FOffBfZUEwsledhs9B0dqnT/60 6PMiciLRFCGt+w7csdyA5kQPCHIgE+U3gSgwMXQt/IFAFwmnHvcIAjKOHeoRoDrXzWg3ftRcD b4rnLOFB+oB09PuwoC+o/FwGUus= Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=217.72.192.78; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1680458220441100003 --Sig_/PbmHjqu+Uf/NnPxncBOgyUn Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Instead introduce a extra parameter to trigger the compress thread. Now, when the compress thread is done, we know what RAMBlock and offset it did compress. This will be used in the next commits to move save_page_header() out of compress code. Signed-off-by: Lukas Straub --- migration/ram.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index ca561e62bd..3c9fac086d 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -503,6 +503,7 @@ typedef enum CompressResult CompressResult; struct CompressParam { bool done; bool quit; + bool trigger; CompressResult result; QEMUFile *file; QemuMutex mutex; @@ -576,10 +577,10 @@ static void *do_data_compress(void *opaque) qemu_mutex_lock(¶m->mutex); while (!param->quit) { - if (param->block) { + if (param->trigger) { block =3D param->block; offset =3D param->offset; - param->block =3D NULL; + param->trigger =3D false; qemu_mutex_unlock(¶m->mutex); result =3D do_compress_ram_page(param->file, ¶m->stream, @@ -1556,6 +1557,7 @@ static inline void set_compress_params(CompressParam = *param, RAMBlock *block, { param->block =3D block; param->offset =3D offset; + param->trigger =3D true; } static int compress_page_with_multi_thread(RAMBlock *block, ram_addr_t off= set) -- 2.30.2 --Sig_/PbmHjqu+Uf/NnPxncBOgyUn Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmQpwbcACgkQNasLKJxd sliJVBAAqFeRAurBC/UQEIgu4mHvxem8apUwRhXFqGFJyIulnMfbgONBTBVU/jKg GYWfpWcbHzNDzGSQVDfkEuTryottudeP7/JlfKo3fUJAV23fDP/xtMfciLDGASz3 MBRkPofkrHKNrWDa28TopHt1HLym8gBJHQQ8ZAjvEiqWQiTiae40gOiMxsrpOIfp XQ9+Ia7X/lZFEX5Is3PhmR1Nz1gMnVyoEAZ3yRsBW0+XT17WVCWcXUwNZ1rGOjH+ gHIeh+qWbpQ0qW6uh+89Id22s/iwcnYO5Ve2BQGCCAi3l9guRvPOFXD3rjJz8Vo8 Nr4lnmMwn8vJdiACa+KADedh0syGNV5g6s3MluSRWXWuCTv5FH9edgDnhLOtifIf 2fcgaiej0YY+K4sR1TF8vWw8X+Pc4xkKXNYLI9S1HtTucPKZ5A5QRnLeEobyVFKv 78lPVPth2PvuH5K9NJt7W5ZgJe+T9ox0QIA9zDvhChhP2TXhZQ9CEOvAF2lS5kgf pqAX1nRXQnDxSJI9MD0RLcJqcv849dRfCIkvpRRaNIuP6774xjQluEa0g1aLertk KW9ZexRBjESJA+ncc5RskdnEw4rDS9J55LoC5hQVLDvgeDKLHjnWVAZ4JiubOkre VVKmXt0rDyQiPvXGpAIkzK1vETJPa6DNeRZsqbLHJVvxXGSAExM= =6OBY -----END PGP SIGNATURE----- --Sig_/PbmHjqu+Uf/NnPxncBOgyUn-- From nobody Sat Feb 7 04:09:23 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1680458240; cv=none; d=zohomail.com; s=zohoarc; b=ZGm7Q7JFw0kLSrfkMW20+vEI3snS4xBFST754jcZTUjiC81RAuDQh/hWPPz4wwI0gxgozxxnxKOA8/qH1VqO5HzCj7nmy5Y/o4qWPzWo/fwjYN7dccrJQiUoDNFZsZU1LMzd5sWIaIILaM1Bu86cFTq3mlzs0bRCdnzIcE8Os0Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680458240; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=rJnh2xmlxyD0IbiKJpSySQINcG5FbYS9qqSUXIx9yPM=; b=LEmZBLaF0NUNHP8if/jwG+1GcXMrLHCZp6cff1iFkUXCmonZbegM2gSxa/fPQrjFeexUAD0AH3ZI7+mC6uGn8Z3vmcbJYfRtTkK7/R1HjMAzLOl4tyVw+3HCZNimjeRoVFwecTqd2ZjS1wjwF/OxJFqGfV7HlLkFFJRNGb/CofE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1680458240689405.1718003624154; Sun, 2 Apr 2023 10:57:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pj1wN-0006le-Jt; Sun, 02 Apr 2023 13:56:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wC-0006ja-Al for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:20 -0400 Received: from mout.web.de ([212.227.17.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1w8-00041x-JG for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:19 -0400 Received: from gecko.fritz.box ([82.207.254.111]) by smtp.web.de (mrweb105 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MlLE7-1q7xgH0EEH-00lIiG; Sun, 02 Apr 2023 19:56:12 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1680458172; i=lukasstraub2@web.de; bh=Zl43xFvhmrHL02KVD0T64DTHYdt1e2LpEi37q1WQFJE=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=HqUjGos8bNIatz1hZR0vYld93WB7QmlZAHHGhia+6csJt5yDuF2PLhE9Ay+D+9Olc ZFvexuKogXbSiM0hKZXmUUlE9plWieeGegM+3f5SoOUssDyukgeXQUMJvb9DEwf0DQ mK6w9m+QAhBK1kHdC58x+5O9IeP9bgVyl9PGLP06HD8W7ZxVUaV4xKajLqCxTGUCEY WX2Zufy9G7ljmXyB3gTWZSutDBSUW/KiAOj3jvfS8kOzfn4ZZ6N5d+/5fRQ/Fr2xan +iLMSvp75EjKY1o8uZjQ+fXQvMVbtedCYkkoxtkrzkUfBdn8S3V/RPUeQv/BmMVs0m AHQnMuC/0O+Ww== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Sun, 2 Apr 2023 17:56:10 +0000 From: Lukas Straub To: qemu-devel Cc: "Dr. David Alan Gilbert" , Juan Quintela , Peter Xu Subject: [PATCH 03/14] ram.c: Reset result after sending queued data Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/y5ekuWsyL3aIQ/YbGDsY34q"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:auJw3zuiq/zuUpAOTlg6tp3Jm04DEHGN7dGXULIYk1PkFl3rVKv o0LR5xo+ex3QGWVCOpasGyCAEd61q+3/8jMz8Hjx2v/xJOiTJb13odiAjLjuoE/rUBReoo6 0zXoK846dh9DAxjlFs+xBoGopg/yvdwp9tG6mcfTOBEJzeaFagITD0VZ9HKldzjj7HLwoIW 7lyjVM6gpYaKhKNvMEuIw== UI-OutboundReport: notjunk:1;M01:P0:ds5IlzkpFRU=;OBTzctP5QEZspK8e2+PRMiH2Sc3 0ZspVyeafGwNVSIzBPr6Qe4udSNto9TpUkYoMaatR6Ig5RoJr/lZvkxIIWeDLSLx6Ohq/0moC cbliX951mx+AcTahJFxOOH6pVhemTciDp49HYRB5DPnliib1SzqCTXAagzkCgCUJckQTBKCP/ nl3YiIPjl9W9fOLSLKIots3fb87EnKOQH8PX7EvgfuiIURw/S24ja95iKV38veEl500IOs+/4 h878MjVaT1qoRgJ2LLFQrqjSTznDWrcyMZIP9EShyhW0LpQXJFU0unD4PbetI+7B7h1+CZNNW Vg8GVJYTgYlgulxnh141/V8RUaIojVs9LZLB4I8n4nI+ICxK4qbL0kiZ6Br5wIniHnk7n9I9Q /N0RiJAMxb4RZhfNCj5AEhaiqpLVgbS2rjCwMJhcCfLQaCoKQMlk3uIVVHkVziFEk8TwhPM+/ W/VcBmJj272uC8DguJzl7ThZqMshjSv1CVD22BGBq1yBus+d692d1I7zO9eQBodIuxUZUrHBk S9S4N0hCFypijrj0RlSzdkPNxDfDkP+IfrHvTVld1st1FsR7HX/1OhTTJREVm2kvKhZEfCLHA 4zKbr0I5aLRwLsFJmww5+774+lOARMNYPcQwHuthqB7dKAPZEoLnU9DirwDmR6mbVmG/GjN85 ijKle7Qj0JQ9loHUgktmXkgLLU03lcKs/von3FIxCcwiPcSTnGUV9D3r6GCXGYljnGBtbLQbs dRgGGPHOFdOvx6TUksjGDR5sG5U6m+yNZAsWetp9L0x9NIiaYBOvvYQAHXukEWC9ntTandsPU pmIotvreCDsUXrLUhWvU12xTT0XxhWEdQYExj6/f3yySOO4+Egb947xY31tUWz9lVDZXJQImx nKkoIm88R8uJ8MS6SrXtCn4b3zK31Rd4U3WkbjIAEIksVl1l8VFfTb16zo13F4ZnrK1oA1dd1 5vjRGkHHELNqnMYOU8W3b5Ajaz8= Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=212.227.17.12; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1680458242586100007 --Sig_/y5ekuWsyL3aIQ/YbGDsY34q Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" And take the param->mutex lock for the whole section to ensure thread-safety. Now, it is explicitly clear if there is no queued data to send. Before, this was handled by param->file stream being empty and thus qemu_put_qemu_file() not sending anything. This will be used in the next commits to move save_page_header() out of compress code. Signed-off-by: Lukas Straub --- migration/ram.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index 3c9fac086d..bef6292ef7 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1519,6 +1519,13 @@ update_compress_thread_counts(const CompressParam *p= aram, int bytes_xmit) static bool save_page_use_compression(RAMState *rs); +static inline void compress_reset_result(CompressParam *param) +{ + param->result =3D RES_NONE; + param->block =3D NULL; + param->offset =3D 0; +} + static void flush_compressed_data(RAMState *rs) { MigrationState *ms =3D migrate_get_current(); @@ -1540,13 +1547,16 @@ static void flush_compressed_data(RAMState *rs) for (idx =3D 0; idx < thread_count; idx++) { qemu_mutex_lock(&comp_param[idx].mutex); if (!comp_param[idx].quit) { - len =3D qemu_put_qemu_file(ms->to_dst_file, comp_param[idx].fi= le); + CompressParam *param =3D &comp_param[idx]; + len =3D qemu_put_qemu_file(ms->to_dst_file, param->file); + compress_reset_result(param); + /* * it's safe to fetch zero_page without holding comp_done_lock * as there is no further request submitted to the thread, * i.e, the thread should be waiting for a request at this poi= nt. */ - update_compress_thread_counts(&comp_param[idx], len); + update_compress_thread_counts(param, len); } qemu_mutex_unlock(&comp_param[idx].mutex); } @@ -1571,15 +1581,17 @@ static int compress_page_with_multi_thread(RAMBlock= *block, ram_addr_t offset) retry: for (idx =3D 0; idx < thread_count; idx++) { if (comp_param[idx].done) { - comp_param[idx].done =3D false; - bytes_xmit =3D qemu_put_qemu_file(ms->to_dst_file, - comp_param[idx].file); - qemu_mutex_lock(&comp_param[idx].mutex); - set_compress_params(&comp_param[idx], block, offset); - qemu_cond_signal(&comp_param[idx].cond); - qemu_mutex_unlock(&comp_param[idx].mutex); + CompressParam *param =3D &comp_param[idx]; + qemu_mutex_lock(¶m->mutex); + param->done =3D false; + bytes_xmit =3D qemu_put_qemu_file(ms->to_dst_file, param->file= ); + compress_reset_result(param); + set_compress_params(param, block, offset); + + update_compress_thread_counts(param, bytes_xmit); + qemu_cond_signal(¶m->cond); + qemu_mutex_unlock(¶m->mutex); pages =3D 1; - update_compress_thread_counts(&comp_param[idx], bytes_xmit); break; } } -- 2.30.2 --Sig_/y5ekuWsyL3aIQ/YbGDsY34q Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmQpwbsACgkQNasLKJxd sliQMQ//WnagVPkldHyl2fT1SttbWkSU9cRsXKhI0uAfSXc3wod9yIncfQkiqHFT 8BHT5EB7dJBkOQ8LhDe8RkAns5n0CbAtiu8q0+XA+nb52KXTrCToEMwfBWYpLekC sOHA+F1KQs4hWU9+HHSD5XrQJ1Af+u2MklA+R30D0wYKQzrib6jqZXkQbDQGxZtV L3lySECv5YrMPilOzWtpjNXKhHn2WaSSSJxv4ACsuQMD9/oypzX93BkkVRQBpBdU ngqDfGCD4+Zi+NB/hREQwHvFmThiyWK0VVOha3OG4MxywZ+dgIYi0JsHfGRbpQgT kOnMgwg8uONbNPgCt+CEwNS59TcicphesGIN32ZA8rDU/usTc/zx4FyJu9kHVbc7 CU8Q7245fhGJka88obJ9VFZGXYEIrrY+NNjbVphsnW8TGsgoVLDXGvWCIKj+yVCR pjV5IGqUt5RNS2IYM1W+vSx90FVK8VJYnpXDUJUQ5CtAWLmAI83ISZy3bFFF+9Zc 19P2fewol6StyQmHXCf5VfCo3y/RmecFddGed6XcLNqeunI6z6kAQTjyKCM00vdj +akRm8+/KcgmN1q3PDrJmx3nc4965QO3HQuV7CLI2xMTAOGCoxQLLdS8Aqf7SDUS 7OSOYmr3zMhsE4CmFLoewncVfJVDHGu51eNPSK5OWnOD8122KHI= =B+m+ -----END PGP SIGNATURE----- --Sig_/y5ekuWsyL3aIQ/YbGDsY34q-- From nobody Sat Feb 7 04:09:23 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1680458254; cv=none; d=zohomail.com; s=zohoarc; b=bZoUR6Jabrrpzn1mKUv8YmLT3fhK48aB2UVNNtxA01aPlErJC1DlBS3ja5+vfwgbxRp/vxoqv80ka/sN3Pga2RTTBiYaOmHJ3kJK9BjUAXw1ihCTI3Aw3uk5ocsR62ezMb3jzJRFUFXkYPZRhjgkAh0PV7M0yx4NvoCcIjwhpCI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680458254; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=TJrFPkGpzz4KTMpGqBZHUa0bmmQ7lpWNITzxtd/aIcY=; b=frR6pPV9uwT7NXPBjWf0vM0ki5g0FKvuKpOUYPY+0ZpceXZdN6HUFjzIuGWRy1Wcx9US+AJVhW+ZN5nPGGj9Q6vpwBPFetUsbkpaDiwsZpTwdxlEFL7o3+fZEk2ulLvTZF7jdc83zTVLRJfXRgVaTo2MqUl5lXf6iLU7OtGPWiM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1680458254557805.7738302259986; Sun, 2 Apr 2023 10:57:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pj1wQ-0006mI-VP; Sun, 02 Apr 2023 13:56:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wD-0006kE-RW for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:21 -0400 Received: from mout.web.de ([212.227.17.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wC-00042H-6C for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:21 -0400 Received: from gecko.fritz.box ([82.207.254.111]) by smtp.web.de (mrweb105 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MjgX3-1q7PS01SPr-00kkMJ; Sun, 02 Apr 2023 19:56:15 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1680458175; i=lukasstraub2@web.de; bh=slryEM/KfdNssQs2kFX/9l5ju/cyu0e1bXrkTCTexkA=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=m3DgZ+zCjg007FFQxWtlhh1FAx0QLF+6WoSmpq1jFvVrENQAbdT8haF8yu5a0lgDN T8eNC+W/452pLAdGG/b6KsfGpLexgTsfsYpu2cqElq90wuuISctd1CO66iU34FXPOp s2C9yHL/x0d3PPiUbSl6rjgupIOxvo5Cue9XIOHT0Tk+Bv6Doy4IF51HgGYYJVJm3B JkOHTychZMaDjKqa/4xNmRIWVAPP8jDJjToB9YQh26O84D3ywfU46Sk733hUmlUBb7 Z53zc9GM1oqWzGwyfO15+2TguAMMLveWTwUJ15NgUDtqSZZd1RFsRHdcDwx6najBOy EgmR8VymzQM3g== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Sun, 2 Apr 2023 17:56:14 +0000 From: Lukas Straub To: qemu-devel Cc: "Dr. David Alan Gilbert" , Juan Quintela , Peter Xu Subject: [PATCH 04/14] ram.c: Do not call save_page_header() from compress threads Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/TH+olvsLxY6JI5vtKbz0emb"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:68JzcP+JH1RVqCHvoPAnTMK0tLao+wxzIAFdoQ9Jm2G8a0iC0ua t27gszZbu8+rVnykrb9QvNnOg5QSA7bAPQmxtik/ZVwSgCVRLHYswzWzOTR1SGbc+ZNrMZw 0cwB1idB69nanS5vurggGEGo7A33GaMbNEDDnE/rV8JmNKghiPto1Ovw/N7kpb4obe1coM9 7agmYCgpOKmTa9j15a9CA== UI-OutboundReport: notjunk:1;M01:P0:a/RB3+C6GZI=;KHom+0Yf6AjCu+9jSCnR8QxJlNp r8j6Piy7Ro4gtlQXX2kw+t3QBArRc9WWeK89oMokayeWz0bYW9TjFo50bR6BS+MvET2B06oM5 zO2LP4Ue9pZSlF0LVb+G7siW3ivb8IFSOP7meTDjC/VjiqD/jEKvXnOg84fmDyFcBNnJyrLNG voq4u/am+psvdFLYwPXmlkPWb+1556ytatGI0/p52pFWKse8rdkQq+Z2+I8+MliuBf3Spt9T6 LQSkmcGoK5CQUk+prhE5P6QBmkPFKnERqQmc98rsHHssM1QaP0Pu6mfGO4YXywsH8EUlZoHNB ydAZpOYXg/ct5sIOf7yZrPxfAIr+NU9x68dlLmz+5MP+cBbb13kqjXzrrtZCNfsC2oYeed3qJ nXCWTCjwu7zvya8rUA4OHuO6x0hMql50ToO0gRFNIOvDIvZmFHg3apAWjjR2ZjjvTpDA98FcJ ryiNSN7/rAC3Sp4RBJzJzRRNg5FFI7KToeyhlT4f1q7bEzDK6ZvQrGff4yvGICETEYg0uCnUY qWJrSg4H9OP2XDspw1+27tsvaE7Oosnx9xpKepAgzi6YRzdwd1vtz80IPOh8DTJPz+oET3l49 KsTyAErA/S0YABCSD/bdpkASy1OPWxl5B1tgNMkJzTJ3N/z2dwWW+pOmm4Y4GJS7b53WqT01B 7i4wahs3M+MqOwdlemkjzB9lZpDo5HCwk92NdPHuDWjNNLhuviYKic99QT24YIZQokq6ZkGBy gnviu1Ct95v607K8ZFSPhMhQnTYcQl0nG+8sy4ak09r0ckElPxYYZOvuEd9XgJmeo0PhHsesc XlGjzStFUTryXZEOnRxVUv33bAJ10Q2ii56wXuuRTGVIFxRxYmof5HUEni8gjMx/OxRHygMVv lBkd+2V6shF6cWgzZFuBJvwANFwIioR9ESjSUrlj3BJlcI6K9azwxGnRWSk/LPH2b/4u4W8Q+ aHSYMWJUUUYQ2Lv14Q96dg57igI= Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=212.227.17.12; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1680458256630100003 --Sig_/TH+olvsLxY6JI5vtKbz0emb Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" save_page_header() accesses several global variables, so calling it from multiple threads is pretty ugly. Instead, call save_page_header() before writing out the compressed data from the compress buffer to the migration stream. This also makes the core compress code more independend from ram.c. Signed-off-by: Lukas Straub --- migration/ram.c | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index bef6292ef7..7ab008145b 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1476,17 +1476,13 @@ static CompressResult do_compress_ram_page(QEMUFile= *f, z_stream *stream, RAMBlock *block, ram_addr_t off= set, uint8_t *source_buf) { - RAMState *rs =3D ram_state; - PageSearchStatus *pss =3D &rs->pss[RAM_CHANNEL_PRECOPY]; uint8_t *p =3D block->host + offset; int ret; - if (save_zero_page_to_file(pss, f, block, offset)) { + if (buffer_is_zero(p, TARGET_PAGE_SIZE)) { return RES_ZEROPAGE; } - save_page_header(pss, f, block, offset | RAM_SAVE_FLAG_COMPRESS_PAGE); - /* * copy it to a internal buffer to avoid it being modified by VM * so that we can catch up the error during compression and @@ -1526,9 +1522,40 @@ static inline void compress_reset_result(CompressPar= am *param) param->offset =3D 0; } -static void flush_compressed_data(RAMState *rs) +static int send_queued_data(CompressParam *param) { + PageSearchStatus *pss =3D &ram_state->pss[RAM_CHANNEL_PRECOPY]; MigrationState *ms =3D migrate_get_current(); + QEMUFile *file =3D ms->to_dst_file; + int len =3D 0; + + RAMBlock *block =3D param->block; + ram_addr_t offset =3D param->offset; + + if (param->result =3D=3D RES_NONE) { + return 0; + } + + assert(block =3D=3D pss->last_sent_block); + + if (param->result =3D=3D RES_ZEROPAGE) { + len +=3D save_page_header(pss, file, block, offset | RAM_SAVE_FLAG= _ZERO); + qemu_put_byte(file, 0); + len +=3D 1; + ram_release_page(block->idstr, offset); + } else if (param->result =3D=3D RES_COMPRESS) { + len +=3D save_page_header(pss, file, block, + offset | RAM_SAVE_FLAG_COMPRESS_PAGE); + len +=3D qemu_put_qemu_file(file, param->file); + } else { + abort(); + } + + return len; +} + +static void flush_compressed_data(RAMState *rs) +{ int idx, len, thread_count; if (!save_page_use_compression(rs)) { @@ -1548,7 +1575,7 @@ static void flush_compressed_data(RAMState *rs) qemu_mutex_lock(&comp_param[idx].mutex); if (!comp_param[idx].quit) { CompressParam *param =3D &comp_param[idx]; - len =3D qemu_put_qemu_file(ms->to_dst_file, param->file); + len =3D send_queued_data(param); compress_reset_result(param); /* @@ -1574,7 +1601,6 @@ static int compress_page_with_multi_thread(RAMBlock *= block, ram_addr_t offset) { int idx, thread_count, bytes_xmit =3D -1, pages =3D -1; bool wait =3D migrate_compress_wait_thread(); - MigrationState *ms =3D migrate_get_current(); thread_count =3D migrate_compress_threads(); qemu_mutex_lock(&comp_done_lock); @@ -1584,7 +1610,7 @@ retry: CompressParam *param =3D &comp_param[idx]; qemu_mutex_lock(¶m->mutex); param->done =3D false; - bytes_xmit =3D qemu_put_qemu_file(ms->to_dst_file, param->file= ); + bytes_xmit =3D send_queued_data(param); compress_reset_result(param); set_compress_params(param, block, offset); -- 2.30.2 --Sig_/TH+olvsLxY6JI5vtKbz0emb Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmQpwb4ACgkQNasLKJxd slhBWg/+KAPTLyNUtjxt1XgIxYc76GHb56c2a+fCXJdbGkGmOf4yYKwLKUYscl3w FSQxQd9DN0qwLG3kHP5KT8OQM/HnA7ZJu8xyxYS5FvaxtP4nG3AmrsNBYWYresDg 97dkz2au822JNWu64NoheT4DqSp9j6yb1ZixDL52kzGu3X3nstzL/4zixvOazbMb tqShulfWyd5+drkjiAnJXKilJzQ3AwWGAn209lV03LZscMjSYs3Qa1ie2MQvAX8D ti/+8tCtJqju6Vv6ZE8ij31MppFVW/ahi1S0lhd66o7AdXmYzHDVIXhFcQkF7ISK 634Csj0YwMxTtau1pvUiPJ0bxF0fVS3e/OxK24IHzyVAZVxshT0ULvqyWyPq/v8+ s82BRAaRUgB6LEONcUlD2sg+t8QGuDJYkCacGkpYvQlLiTjOPNB1wpuAqiCCXy/3 q0UeCqcNuifYCSxA++A3Nnr4XHEvpucEUsISivTjJQtUjG9iLJZK8Ang9e8toWC8 mWZwABe40Vpirv4D0Tif5vlZbHTXFPyhCAvOTQzhyNchdhynkbGgdSsIE2jmiZG6 bppIJxbbjeDYrHJl9MCIDpmerPUn+ra5wtIQ1cN2glA1WX8FfJGuS8Y55/Fpfd5g OJ3KwtYKXjY+vTeYD81g9Vl9GO5dYobjV/Hot0i/XTCQIGlAeec= =39Z0 -----END PGP SIGNATURE----- --Sig_/TH+olvsLxY6JI5vtKbz0emb-- From nobody Sat Feb 7 04:09:23 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1680458289; cv=none; d=zohomail.com; s=zohoarc; b=GLs2mXeCSfi5Mwr2CLPxg0YXBor9ZywQBCMTRmJ7KtWsbOaMsw2ThrN7z/c3G761LjsK0mrtmc5ZC1kex9fO8EWUhjt7+6WAJ4IMEE/tdnTT3FjB6oyDFHVdC3slEqoyzwuyaxaaSLs98S6mdlLeQORa4DoFX0mJOr4UI/HsEP0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680458289; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=xcYZdHbqLeeI9YF2K/Z2lLSJxqYgPlukL7HTrORbdoE=; b=O6NNUP5zdHE7TFmpOh1VNsickLuQlKDMjNc3OHDYT0tras+zE5MaG1DJTrJ9jkF2MTj9TELuW0HLAXfnc4RotGyAs3LHgUXBxWbqoFEylBEHxyJqcZT47xgdWJuKt/H/ojvidqjnG7LEary8a9vQYjQNaDht600ndbMiNjDV3ag= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1680458289633715.2341966157262; Sun, 2 Apr 2023 10:58:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pj1wR-0006mN-DR; Sun, 02 Apr 2023 13:56:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wG-0006l2-Lc for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:26 -0400 Received: from mout.web.de ([212.227.17.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wF-00042m-0s for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:24 -0400 Received: from gecko.fritz.box ([82.207.254.111]) by smtp.web.de (mrweb105 [213.165.67.124]) with ESMTPSA (Nemesis) id 1Mw9xG-1qaixD0DVE-00sHy5; Sun, 02 Apr 2023 19:56:19 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1680458179; i=lukasstraub2@web.de; bh=E/gR4Jf5Nf3Qa1UNaMPS2dXFHp11a7smLFb8Et5TmiU=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=uqvEMOj+HZ9k/Zc08yxrqXqX41w92j1epAKIqU/LXKR8jegdc92aPt+S6eu6Z7iqw nVitkb5N/rbaoedXaZTIfxHf5Pn9WIPEv5RLJVmVSAVexhJw5YSvgjOT8s4rAtXF7+ tPKDni3ePtDxbKayC4aV4PEu9NLftsSYTfTOt0qSr1UMR1T5SP3rpuiQ+OmK7A+iGK g2z90p2UKBi5O7oD+Youfr6fO/su86lCllFmYeS273micFReE0uGpI0+nZEVSc+EGE 7V+pmbu50ikNMYyChlJ5/mJ8h4zaOaats4Mna54ADuwsXe3X+l4SZbLLJJ7B+KpE8B rRgctce9+0ciQ== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Sun, 2 Apr 2023 17:56:17 +0000 From: Lukas Straub To: qemu-devel Cc: "Dr. David Alan Gilbert" , Juan Quintela , Peter Xu Subject: [PATCH 05/14] ram.c: Call update_compress_thread_counts from compress_send_queued_data Message-ID: <3b5bd7f0d654e6409dfbc993d323292a845ff811.1680457764.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/ZoFaiSZlrmguVT8gL35/U0S"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:EbPxqyUDacwnk2hQi58XP7lJUg0rouj4hcvES+yX0OofNJNiLrZ um1BDvY9plai14YDz5k4YMOeVAjiEjw3uEuDOgKyBoe6X2qnzxarEFGrAa/aEWm6r4inrzs JrXvNXr3+LsW0FKAC4DI00QAlfTzwf9e+NohhGZefHqTacwps8bX1QlOIZ5nPpx0hL1iwyr 2OYm2T7NgnOm2F7EkCLvA== UI-OutboundReport: notjunk:1;M01:P0:xgqyU1G0AVI=;5H3fSMP4bAJ7XYZKmDJBCsxz0fA RlAo7s77bRg3Mwj0B7+6verq26jXZ96kcnBO+7IEyZTNtw3QtR5xzsaH5CfdvNiKkKChyQxsr b2ezFRm+rEVx7mmqYWDHwIsWEiF2/kK46dpK/wGlcuKzfU6aZfcepD+6YsSMSOZZ42Q0EOs6A qxzgelPBYDOrrquC5NEhGtcy/nGR1xunZJ0I5acxQAEjlZOcoRrMMOTUCEf3zlYBaCPYEvohN TF8XMGGYfxztscuCrMBHw5bFnvbXVs/xSszk1J6NOr2MrqOvHmyDQYaFH0I0AnTDwJbmUOLJq cQ6JXI3Hz5YL4GWJGFmqaIfB4xQyZBT33vv7mS8O4joy4o65OUrMGIV//IpFmCSE6pSy4ygly jH0HG9VkC6n83trSUaoLU+HjAX9hws2P7IQhrkUhQyQTifWj5ccVOJ12d+HGfL4FcnZoqp/ho 0DkdddIp5Cbc/vyOnEIBx5AjOvVtVc9+tFXHV2wKOTD6y8iyne/GOaMAfMiK2VvD3ZaJtyS2T w1uErO101rq6fZfTJ3MvsP5Xk21GGjAv4ZNZ/nmbNgvv76umFMTPltQu+hEghvzao6nUUlUFt oXI3/c/czWYGT2GmEvyLEUHM/eYy1Kr9eY6OXSNcLyuDU+QxFHCTqV5uPO9bHALVh7VwMkaqc gA6RGC5qPHv29ODRjqC7zS5qdPi7dxtk3dqfrSZTYu8ml7/FRSug47K2bMuFRw7XSHTHwSVLW iher9dHlDWD18u88cDIAVS8OrfFs7EX4FZ/xNiO1OumZ6o16loPYtd9ZVkVNTNwBGNUMxHydv s17tfqqN3BPxevB9TMIaOTbCGF4Bf3pNH/kF9Bes+xxF52uf3Ktcn69n5ihLxsKQZ5hgGEtdc XbbkzoKL7xUhkP60Bn74mbNcPARJCgC+zTjDWEPKGY1nX5exxv5BE6XApwE625NVgu24abx4R VkDZgV8EkHJK1aNFU3CGYBTOMfA= Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=212.227.17.12; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1680458290788100020 --Sig_/ZoFaiSZlrmguVT8gL35/U0S Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This makes the core compress code more independend from ram.c. Signed-off-by: Lukas Straub --- migration/ram.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index 7ab008145b..f55eb0e587 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1551,12 +1551,14 @@ static int send_queued_data(CompressParam *param) abort(); } + update_compress_thread_counts(param, len); + return len; } static void flush_compressed_data(RAMState *rs) { - int idx, len, thread_count; + int idx, thread_count; if (!save_page_use_compression(rs)) { return; @@ -1575,15 +1577,8 @@ static void flush_compressed_data(RAMState *rs) qemu_mutex_lock(&comp_param[idx].mutex); if (!comp_param[idx].quit) { CompressParam *param =3D &comp_param[idx]; - len =3D send_queued_data(param); + send_queued_data(param); compress_reset_result(param); - - /* - * it's safe to fetch zero_page without holding comp_done_lock - * as there is no further request submitted to the thread, - * i.e, the thread should be waiting for a request at this poi= nt. - */ - update_compress_thread_counts(param, len); } qemu_mutex_unlock(&comp_param[idx].mutex); } @@ -1599,7 +1594,7 @@ static inline void set_compress_params(CompressParam = *param, RAMBlock *block, static int compress_page_with_multi_thread(RAMBlock *block, ram_addr_t off= set) { - int idx, thread_count, bytes_xmit =3D -1, pages =3D -1; + int idx, thread_count, pages =3D -1; bool wait =3D migrate_compress_wait_thread(); thread_count =3D migrate_compress_threads(); @@ -1610,11 +1605,10 @@ retry: CompressParam *param =3D &comp_param[idx]; qemu_mutex_lock(¶m->mutex); param->done =3D false; - bytes_xmit =3D send_queued_data(param); + send_queued_data(param); compress_reset_result(param); set_compress_params(param, block, offset); - update_compress_thread_counts(param, bytes_xmit); qemu_cond_signal(¶m->cond); qemu_mutex_unlock(¶m->mutex); pages =3D 1; -- 2.30.2 --Sig_/ZoFaiSZlrmguVT8gL35/U0S Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmQpwcIACgkQNasLKJxd slhOSQ/+JzeCgyTFZx0He3JstajBCPNh9WAasVAbGanW79dqDacvNy/eka3tFbiQ 00iTHiDj5roV35iFmHfELmXHKvkIQR3HKuX+o3MO8PEsc8qOuCZdqFmi7arCSoi4 yC2Jw5EdjTKb6RxtxpUCYMsIhWVPUMgeFzOxEQMYDJ3GLQyzdH3F9Yyk58GL2bmd s0Co+buf15j4/KULDio2R4mLqgZklIAMeBSezW/MLr7GaR/HeAMKbIbrK5a3L+Rx MpiUJgXwox6ZKrhVVDnW4hx3aTurnv2vd9HrPGSA9T3TF/T74J/l8RNvmBFwFAPq RaPbWeORDFwBKDKInmse+4dHo/+Ot6MtqixyZOfCXc44rwMbJdxSrIfE6fzzoHsL FXcpioLKrO52rhJrLpQkMnmJup0GI8rTcDiyaX0xfIecwfJv2MNcXmbz6GHDiQvL GDb/iqPyrwYB7DX0YhM0rYLlNG0pC1Po1Rb7Zkgdboflgx5OBE5Eh2WAXJm34pb+ e+9+MudFABG4+hAz62TxQbmpSHWFKXU8eP5SIOL5aHnzNhTjtTo0C74SfyKEt6iH wOK04cewnCCQkKMYAgYHY7jDUBMtgGzbtSGL+XVspngWeQ6KsC9w3jLc6JbaWZtZ aQivfe7MpMkXxLuLTKhbYesKUA/tys4/4TQbYMeEovCp/n81+Wg= =pIZI -----END PGP SIGNATURE----- --Sig_/ZoFaiSZlrmguVT8gL35/U0S-- From nobody Sat Feb 7 04:09:23 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1680458290; cv=none; d=zohomail.com; s=zohoarc; b=ab+HeoikOaKCWHwzOaqwx9AP6UAa+X43vFVLVlsaI2V0R+3jTIwvDK6rkWhkJZB1WCJTs8Tn0PFo6Bk0AKwmKxxzvPt0pUUBuhWaxPS+C7FWln4sBHrA9gc+qPgkVZ5UJzDUaCfLQG5N4TkI3DictR4gzqw4ji8bqNtaEZrjJrE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680458290; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=gYDtvzBV283n3dczj9MKMZhHzwxLl+DoRo8+geTW1hQ=; b=S/8nNzWG7sK2icvvs+YfLV6RbZp0xt8JXfzoO0+edjLi2Mbl8p55e+fxPxoZRBf2qGDRwHgQ7HLYyzsUJGzyE0QQyKeqstmbEw6B74T2ydKvxi2CYvXUiRhHtt3sY2EvAvdBr8O0COrgLzyC+aeU9ovQTDtTwGx2UUFuRDTmHbY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1680458290168409.8513866591811; Sun, 2 Apr 2023 10:58:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pj1wQ-0006mG-VN; Sun, 02 Apr 2023 13:56:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wL-0006lX-EP for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:29 -0400 Received: from mout.web.de ([212.227.17.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wJ-00043A-Ny for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:29 -0400 Received: from gecko.fritz.box ([82.207.254.111]) by smtp.web.de (mrweb105 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MpCqb-1qCvmr3E6h-00qGn8; Sun, 02 Apr 2023 19:56:22 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1680458183; i=lukasstraub2@web.de; bh=e2XBwHQYkP9RiP5KdODNOl+mStbytDh0Oe+Nqmiewxo=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=iIILrW2WagbhdkMSIEZ+NTokQWt4Lw6G28tO+arX/BSzro27mgUidJGXjXK70KZot vr4C7DuEZHVmWT81b1/4Dg6gXcHpNy0mQ3jiFdN2Ylhwg1jN9R28maG1fbVgy4Xpza d7R69P6iwzd3nYi7/1CjABRnTbmRZihFMJZDak7J/9iLVNcf39n+w2rF1d0tb+9Wj/ 1855x2I7bex9JhwMDk4FkfZ/tpoGnMNc2f7RnPqaFUvwnTW0ReWNrP8O6hdcCt+uip NCZbHG5puPhm1FHy/48fNIEsf60fQoAHvixyA8ZJ6BNBDzWVmwkcEbogbkyS+yUVQG NJr/5KBBas5ww== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Sun, 2 Apr 2023 17:56:21 +0000 From: Lukas Straub To: qemu-devel Cc: "Dr. David Alan Gilbert" , Juan Quintela , Peter Xu Subject: [PATCH 06/14] ram.c: Remove last ram.c dependency from the core compress code Message-ID: <736329ce81b99e0e1cb6aa9683dbae0d39a235bf.1680457764.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/kJGx69ZLF8dGfJtCKWkgZvD"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:9vsTi2epGLxGxhj8b6v6ue58lBkyQYqy9XADsrGjH8hIOA4DfAP XJQ7IgnRSzuqVPlnXAcR2JnmHrAoJtJmwXsRAbUfVTbc4gdFMnZEvp0KuAoCmiIf0pJMIAP q8ed/7d7QVKyxv8nNIfTUKSaPRGRlRe0UczgexaSdMtBKZDdPvpXKX96tmwf/19oxsPZxY+ nfO4OplwNMUolrxwIZvqw== UI-OutboundReport: notjunk:1;M01:P0:K4Ae7fw1IcQ=;y0AHcwI0z6P0ILtiL9+KNqNY/1f aVPBO4AxeVYAG1o3iODfb1GiZtSSzu9qsf3tmnIOu4YgCFCuOY6PCAwxd0uxBcMLi71W6gEKG G7Il+m3KCIscduH0knoaRUtYjru2hXc7g+vD1GBVbqAlJ3ZbkIvSzN3RG/MKNhdJ7aqk8zXTZ Zp41kmgPhS+dT5qL6HvPSXeSLZ/q2iwngLpd/nb3asQVSB7JePcPZ57+ONomoiuvDflc92uUL huLm58lTCTytSU/JKMNrIG9bS7E/43mxui3yiIDTN3LT/s0u38DS033ACWjJQzgW297AO6iH1 HjyapEAEPCHFdh19b1iQtinGM/HInyillAHlwBJoq7uA8kyfcEX+QNFTJqVVQmds6bYe9ZONq 5l8VcwaeISVkpmnJTJwyJ1gI/f9iSIt/hNgt2xyrJ6+YEd508avrHUF/DHscHBr8iKtUKUYLe M0WCUK69gCus7pG0N1O58mg/oYT+tGpxDM8BqtvOfYL51XxhQlpYkU51KxmEJvQAw4lXrbJxs gaJ10kyk1nwQ+TlhnmTTZ2U2B4wcOkIvK7fWyx2ipDulaWFVbpgehuegjWEc50xUpj+3qI6kz EvTr95sl7+lVWqB+4pv62ng4xGBCAHZvEURg4vCui2QoHorefC/BbrWT1vPw/qVXrVW1mR62d jA6hFmVcFCF65+N9p08AXM8usArQt6EBbydB01ogwWpQmA26S8k5wmQwSGG2//fDRwEOJOKDI mqXjqrbDPkedkbbSVfTC/WsvOkm+I/jSv9HZQjYYjE6B1Mi+SJNgarWkbsbhE3cyEJp5nS/zM JcLp8WOtfwtRGu1wqPMp2NLfePIpCGq8NCD3o78XVwv/ULChGRGSWkm23TjB/+V6hp3oHL3Vr 8peqj+zFYHbYS8ZQR1Lb17wutfscI7cg03jOr2M3zDOn5ly4FO5OlF/YENkCG3n11wDNkc03W 1Es7sqTEY7v8INHj/NdljvLxP6Y= Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=212.227.17.12; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1680458290803100022 --Sig_/kJGx69ZLF8dGfJtCKWkgZvD Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Make compression interfaces take send_queued_data() as an argument. Remove save_page_use_compression() from flush_compressed_data(). This removes the last ram.c dependency from the core compress code. Signed-off-by: Lukas Straub --- migration/ram.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index f55eb0e587..20428ccf42 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1556,13 +1556,10 @@ static int send_queued_data(CompressParam *param) return len; } -static void flush_compressed_data(RAMState *rs) +static void flush_compressed_data(int (send_queued_data(CompressParam *))) { int idx, thread_count; - if (!save_page_use_compression(rs)) { - return; - } thread_count =3D migrate_compress_threads(); qemu_mutex_lock(&comp_done_lock); @@ -1584,6 +1581,15 @@ static void flush_compressed_data(RAMState *rs) } } +static void ram_flush_compressed_data(RAMState *rs) +{ + if (!save_page_use_compression(rs)) { + return; + } + + flush_compressed_data(send_queued_data); +} + static inline void set_compress_params(CompressParam *param, RAMBlock *blo= ck, ram_addr_t offset) { @@ -1592,7 +1598,8 @@ static inline void set_compress_params(CompressParam = *param, RAMBlock *block, param->trigger =3D true; } -static int compress_page_with_multi_thread(RAMBlock *block, ram_addr_t off= set) +static int compress_page_with_multi_thread(RAMBlock *block, ram_addr_t off= set, + int (send_queued_data(CompressParam *))) { int idx, thread_count, pages =3D -1; bool wait =3D migrate_compress_wait_thread(); @@ -1673,7 +1680,7 @@ static int find_dirty_block(RAMState *rs, PageSearchS= tatus *pss) * Also If xbzrle is on, stop using the data compression at th= is * point. In theory, xbzrle can do better than compression. */ - flush_compressed_data(rs); + ram_flush_compressed_data(rs); /* Hit the end of the list */ pss->block =3D QLIST_FIRST_RCU(&ram_list.blocks); @@ -2363,11 +2370,11 @@ static bool save_compress_page(RAMState *rs, PageSe= archStatus *pss, * much CPU resource. */ if (block !=3D pss->last_sent_block) { - flush_compressed_data(rs); + ram_flush_compressed_data(rs); return false; } - if (compress_page_with_multi_thread(block, offset) > 0) { + if (compress_page_with_multi_thread(block, offset, send_queued_data) >= 0) { return true; } @@ -3419,7 +3426,7 @@ static int ram_save_iterate(QEMUFile *f, void *opaque) * page is sent in one chunk. */ if (migrate_postcopy_ram()) { - flush_compressed_data(rs); + ram_flush_compressed_data(rs); } /* @@ -3512,7 +3519,7 @@ static int ram_save_complete(QEMUFile *f, void *opaqu= e) } qemu_mutex_unlock(&rs->bitmap_mutex); - flush_compressed_data(rs); + ram_flush_compressed_data(rs); ram_control_after_iterate(f, RAM_CONTROL_FINISH); } -- 2.30.2 --Sig_/kJGx69ZLF8dGfJtCKWkgZvD Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmQpwcUACgkQNasLKJxd sliNlA//b7rv1GsGSK+ns/+okGBepOHqmffOKX0utQPLhUhoPVM2qJ5dwcSe6F3n 6u2ykeFOaemRQ4oJeuIASwXvAxYwQpDYhhqjLm2wAQTeEBFCx52FDW0i6Zoc6clK FCTCRiCmYb5Kvhm45mMcULU6odbAbnt2/XwfYeLGqAD6rvTNR3+RYUnhYcypM6sc fw5wfYCDpppsel3ze21VQj222tw6OGz5bhcPrysrhlVdhAgCQvqar5Onhn+csj4z kjVuruZIlMWISB7MCxRM6xfN5UNBVWSum0d10l2vCUIA1Sc4wumfdg0gQSptxWo+ FZFkVreIATyyiqFhFyLJS1lzIMDIATB/do6t++Yni9tABVPKsvb4I0jweJMZDvQx ZDcxdkaYH4WzK7c4IQGSVkQK08nnnmqTF/txvi+jCG+R1FrcRGrxYThIWcNS+6vq fewoooewEv8rX0Kr6f+CvjlJUeVyD3b8X1NFNDDQ7/FampGuStLeGjoFTreDZhlP nYK5yVBqFO45ki3+4UBsoiIR1zVXG7Bi4gtRt9kuT3CUQvBnb1BVOTDwVTUcrdGH 2CYnDRWmiMDtiNcswQZKm/e+6PAx+M7opjv8iIqyOUaAvxuzXCicXno4YUFpnLLl xdv0lAxOCfVBTXcxGSxWJ9ufL4H24XW3PmeP5G2qPBQ/G5RmjzU= =9ply -----END PGP SIGNATURE----- --Sig_/kJGx69ZLF8dGfJtCKWkgZvD-- From nobody Sat Feb 7 04:09:23 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1680458288; cv=none; d=zohomail.com; s=zohoarc; b=QoS17HYM4rNbEHWe4eWdCdDGenjC3VILHnkGdUGlIWJRoreWseGq2oIqj+pXZjlfqAWTUeYLcHlLFk3dweAu1tJGPYnYise33VYDWw7LJzsSihdQsV0VDsJXk/Hcup2MdnPIWcLprbBr1Hz6H/aFZF6ROn6GX3nAF/tfqhL/m2s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680458288; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=9eYjRsVKcZ76y+qqOHms0vlaklN8+JwMQiY4mVhN1ic=; b=NRrD32eH5ihVM7Uh9nMwgpKiF4b587fFV4nJQCk4DUEjl84l5oMcPw0vA2PQqWmAWY6iJ2E71jPqZdLkMuMT//vw0F4N6k1tOO/aXTsosceleOIokcl4l82Qis9rm797h4JeKAz/QKeUFpRlOnwFW/amCqp6yj5Zz0FfiRkXZCk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1680458288219462.38087387429823; Sun, 2 Apr 2023 10:58:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pj1wX-0006ne-2Y; Sun, 02 Apr 2023 13:56:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wO-0006ly-88 for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:33 -0400 Received: from mout.web.de ([217.72.192.78]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wM-00043Q-NH for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:32 -0400 Received: from gecko.fritz.box ([82.207.254.111]) by smtp.web.de (mrweb105 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MWi5i-1pu1MA1kW8-00XV2w; Sun, 02 Apr 2023 19:56:26 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1680458186; i=lukasstraub2@web.de; bh=IAGnIZLHOuSuLfG9XAUm8ETSUqR6wgi7NR8ianLxB3E=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=sFCgUJUD6A2p9anqdX0kj3wT583jXfvg7oHJ3PZjdO3OfJwy7FVN6Cbyntz2NFtkA E6mQ5Q9vD+w69T8GwHTTUwqUV3o1wypacid/6mHsuCKUlm/l01XUpyCSLvmetpnSxt tQv3jqEu0uWgMsRsYWXpeRAt09PPnocOMr3XIrbuw5xhG8FLIbNfgip0+sI/IdV6/P VVWf2W+0eZ1VLfHE0oCu8MQObcxzq/MbvL8o8b7RQ8v+uY6TVkJRlmnADHLioAxBZF LTw7PTlRR6NkAB6LTrY+fbppCzAeFz1k1Z0M5NG3wtolb1cgSLXU7xHWb4/dDy0BiY 7rc1hc1XjE/NA== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Sun, 2 Apr 2023 17:56:25 +0000 From: Lukas Straub To: qemu-devel Cc: "Dr. David Alan Gilbert" , Juan Quintela , Peter Xu Subject: [PATCH 07/14] ram.c: Introduce whitespace (squash with next patch) Message-ID: <1a748d9034abc42ce5fbb501e7317fa55da36744.1680457764.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/ICxuj.30cB1dN9j0dFXzJdQ"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:m6qFgWIXVpx/1o10in5lom77EJhSn8w3WYCQ+eod545xJx5r+9H O9oCjZvA4B6A9lVVBo8wy6AW55OTnWfaf868fXbdxiL8QJ6G0JzINgYh0FzwZbZeG+NVe3t e4r8O0fGJGwlzdfIFRIKePUp0ECWUNR7wF6SOIT77PIjDRmLBjwKZbehdmSdV8HShuHHbEz yaZ9ZtENFMwTnpgUjXI4Q== UI-OutboundReport: notjunk:1;M01:P0:zxyCdYtlu9g=;XGKuNIgsU9KgTs1dVR45fN+C9Ap qBpf0tZQ7RgObBkSwjueiXMyP0HpF8jF6Y25q+euoUSuniqqbskSUGyW2hChFpQvBMw6iOLkn C8ccClcR6fC/bK6w2X9PGhPwA1Htux6OU5HFpcuQ4PBNfNa2MZ60et/GrRd3Klsapi+TSV/NR 6yvmfvpV8j6y8h4BeOnSs6ycIP0ek8nqoIVpaFhJ8s8pMmMl6XTjkM4IKIEYR95adLaIbPw8y ozxpOgAv4dlp1P9g3rZ2I8fJCX1gcfbAnhNIwqP+dUpF0RoirPJuX+ZwGWjefesfEIphBrVvo TAkDmjm8XDBoSBUPNVlDF7iLELzvBRB4Cbh8dag37gFKOANUwucVRdaVBqvpd4GMBz/nS5JWi ZMTlvqH/ABzNflW3OGMRJizfnlMTjrT3xIYzEc1mPhwogCOJmW5gvw8CsO5uTY5aI04tXC0BS DV4mj2VqFdOyw7pKivkHVXqah9T8G8OSS67zEVtidxmqvjKIn0tXXpztBHk2I1056tRGpa06e tqxGob9P07NIm87LhJsWmlbnNFFIMUqs3CLVkSY3RWkItyeNdC4a2xHh94W94P3a7WEk5Hnlk U+qzUmXU7+sDyD5ogysMQm3VDK8pmTz7Obneo+queMuzlMpyz4SBfX9GEr735PxVY/Bswnx1R xvcoYMWXSf3bBk/WMaEHRiZuCyNRwziqdeT3N6CGjpmAdZ2WPHjcMb5/lXutasdlIjiIdZVbX N1KGYjuB064tMk3C/42VBOfV8m0m261LAqubLr/woP2V2DEaRMFAnvXQCyWWXVOiy/wie5igt TWA+2DWBKjp7yjXI870/AuMKcI0AGWPId9u8oxN8KNyydUlrNQbsTeqEWy/cUvx6OeTl3DIUI pmVJmGb8ITeIMHCKbgm/6S5QCQ2h8n5VEr6Etsqomb2t1Gg6V+ZmoNN+NGUwtQLOAJyb3cuba UTkgDGsnqHh5Wo7tAxzdBBa/p5s= Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=217.72.192.78; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1680458288772100005 --Sig_/ICxuj.30cB1dN9j0dFXzJdQ Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Introduce whitespace to make it easier to reroll the series. Signed-off-by: Lukas Straub --- migration/ram.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/migration/ram.c b/migration/ram.c index 20428ccf42..475c04a18b 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -602,6 +602,12 @@ static void *do_data_compress(void *opaque) return NULL; } + + +/* split */ + + + static void compress_threads_save_cleanup(void) { int i, thread_count; @@ -641,6 +647,12 @@ static void compress_threads_save_cleanup(void) comp_param =3D NULL; } + + +/* split */ + + + static int compress_threads_save_setup(void) { int i, thread_count; -- 2.30.2 --Sig_/ICxuj.30cB1dN9j0dFXzJdQ Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmQpwckACgkQNasLKJxd sli8uw//cnDZNDXg0Ip6CM+qDGOv0x7RWtbrSoGhQjEoMrTm1rZhj6k2OmbBpEZG CzONgFwW4zMn3Vpa1of5LUKXBA5XLOCx/u3CwvOAP6huo/vRE+LX9fMagNTZdSXM tpt81v+NX6JnelhzxMH/Gb8QUD1tBkccP7UpStgr/PQgX6Q9Z+ty8SzfF2YA/q/x jreXUUq9lRn/QRrCGILw1o2Y0OroYoXcYRM4XAv+m5pFJdvTh0UTV3Nc/96GeHOq vr6SDkHji2/qzYJatD6qDx/58+931DCZQWclJ+f1eyUMEepP17IxohPTme+VYGHO tvIC4wg5stXRHUwR6BFQJ+f86J0LVwO1F4kJ/cQoAlPIERdD/yzgBpRyz8BV8eZZ 4fu27dCuTtge9R6Hy2ES5VwyQLaIdk6ru/h6M4QBhgG2Z0xZzZI1ZNBG7O64x6Ew ATjAdUHQa1OknWHE0kJZSjWI1SDlevLrAqxQyhV++sXkVb1DERhvKAGLb40AhnXE aDjrI05/e+AVV7zDTowIXQbJPu+fn7Ve+G2y2tRLr7Bzmub8XqnvqmgWkObebt3W VhS26CjLtqQj87jJwrFliIDvNNS+nPmfBcxoyFLgOAFepgq7pcSb+4JRyUP4vldb baLnSJlwd4vz2gnbkLOqVG3cCDliXqI7VgV9nmDNiwQc4VKUh1M= =LbQ0 -----END PGP SIGNATURE----- --Sig_/ICxuj.30cB1dN9j0dFXzJdQ-- From nobody Sat Feb 7 04:09:23 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1680458261; cv=none; d=zohomail.com; s=zohoarc; b=S/MRmoviWAF3P4OB6Qcxa6xKKtLW8EFyXa417AqXZF9jRfIIdnTEEC/Dii28XXpO6tQ3vAca9k0U7NrhcE0fo7kCUBxpQLzRQOHE1zRfcmCOYhwOrAC7ATdh17wrfN9QFxJxZgWT5USaTtbc02LaCh3+f9DZR466J8h3tpOL70M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680458261; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=vNe+8/nwZnMYz/qkDu3qCR7Jb6aiFVMu1V2F4PJo6VE=; b=mA2bEPnJrNf7gyTQAB0TSdrRnygwFgdG5ivnmdrvsrrdSbx8Ok8nk0RuJvsr6PwwhAHDpF10SnIVptrElj/+Kd3PV9kPWYsKzahLC0aKLtpauAjhcjQjalGSurXXp9XAlsuVBJX8kpvValoBev1Bps9DVD8tw5sqNxDVUzT+GwM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1680458261464541.4646060470186; Sun, 2 Apr 2023 10:57:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pj1wW-0006nS-Cu; Sun, 02 Apr 2023 13:56:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wS-0006mh-ML for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:37 -0400 Received: from mout.web.de ([212.227.17.11]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wQ-00043o-0W for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:36 -0400 Received: from gecko.fritz.box ([82.207.254.111]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MKuKF-1pzCHA3u6H-00KueF; Sun, 02 Apr 2023 19:56:30 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1680458190; i=lukasstraub2@web.de; bh=XKpglTA6owmd537ugJcEj92M/s2rh7Eom5QGAWKbQ6o=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=Ktt7/GDehJXbd9v08QBdxo5546p0QqDcQuvFyB7O8OTHUH5UdoizQ0rGaM61RoMei VFvRSVA2d7VtK7Qw5Ls/s/MOGRPB5xmF8/OXwikxympYcr72l23ccFBS+SrJFltkJn y9KA/+6V9Ea8W663QP/hRgV0LnAMxYK7V599bPRnayicbbUba6lGKKqCtZa+CEUv1o WCUQH12wwurQ4/fg7G9UkK9o7rw1wdmzAucCkbVU4hrhUWUy9UPpm00BHNBFlQQVpg RpE4JRQT8EwkWAQthx/pazyADsjliP1OdUpEOyqxWNKhe9vr6uE3nD65fjTXIGHSTv F7ZLulQfB37oA== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Sun, 2 Apr 2023 17:56:28 +0000 From: Lukas Straub To: qemu-devel Cc: "Dr. David Alan Gilbert" , Juan Quintela , Peter Xu Subject: [PATCH 08/14] ram.c: Move core compression code into its own file Message-ID: <15e26fb46da7826061fd47b0d58943f3279c149b.1680457764.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/f/SlU3YG/rDJ05fFDeyeHV7"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:NSFHLn3l3BwlqSvzuU5igoVunj6T+a9dA9+bD5f0Q6kyTHQjybJ V1FuWM1KEMikFjLRZ7nPQkmldTIZxGnQJ3SWOpRFwv6kCvJBlI5Z3o4zVPZWKyPShAMnTK9 h5RPPdRK6St9KRB+HbgWX87s20w38DZPMUvy86ZQZ7PF9iYOvqapkXxj7CU33gmiCC092QK LvXe8rnLNH60Be3+ideTg== UI-OutboundReport: notjunk:1;M01:P0:V4lC6v6sKMM=;oQHthH925q7pzzI8LoaYWmPFUIg bUTfnciLHDoiFwJeL+hll524BCcVNCmIPlIcdb5Y+v9BI7tnrkRfmBmAWZ1puI+m3I472fStl ALyEJ06TVlmYJWBcPnE/L8uj4hhqfwLKrm2nUp+nNVt/WuGclPU1UnJ0WqMrHFnNhr1XoyHHI cbV/IS0Wv28zP6vgUL4DTpZUb1JGzBwOMfzvytL8Yw6jpjfheyVt8OaWPFftYcJtvuS1VYp58 BWw1yNs9zm50Bfzk9zUX3unwZWghsr0fCgy9PkBKxZF7deeaJmG8jFwwz+Fv7zUgXKQzQG3jF phOU3xgqtqOqssTX1NPd/5/TygPn0VX1iaJmvuM7aqnR/HfFTYShUEgFje51mHMhb5KLUTZW9 szp5ixZzn2lhYVTBN8kusv+mYLiDwzLVdjK0akyFtLjm5cX2gZJUNwIVxOoc4Jj62WEk5iKLi 4sRmiqsYeslFuiEL67Lxgr0iPIZz499R5KxWbov3hsScjQfMRhely96Vd2HaSx8WrFoJVvwhX qZwHevCmSLpJlDBqOHh9ABm6Ii2G8p1UI1+mHWzldiY2/Dlmy0RUamJtrWWeA7dIoXUzJ2Vj1 jNQLa572c55qt/WsrYyLBxHFZcmkTCE0jnOiI4VuEVMlLUraBR6hshx4ZJTAXhQLg3IjABTtr exdwff1p5+6wTP8vBhOfSUI6sivnP/M93wZOkkEMKAp6/HFRmIbRFFvpjzaJ2G9AuNsd0Zlzp zXJG7y9sgC7x2sVKpXDQuU6QHiBGD0OxKDrCg3gomQ9NTBPY70Kv3uQcPJ6lA2ff+rxJOfm1B ksiZj4+oIAOoQHM0aY625Zs2b9N92MBjYPWgmKlQGwqpCOsK5feTs++5jVthpPyFvHpaU3yyj U1Ad6MRSTQvnYCo1Ke0vTTDSq6PLp+uEF6Q4UJdAiABYJWvXs08GMAs9ifEsr65wFOElB/tR7 C6wytUt/PuKBOvedxZH/K3s63wo= Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=212.227.17.11; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1680458262701100003 --Sig_/f/SlU3YG/rDJ05fFDeyeHV7 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" No functional changes intended. Signed-off-by: Lukas Straub --- migration/meson.build | 5 +- migration/ram-compress.c | 273 +++++++++++++++++++++++++++++++++++++++ migration/ram-compress.h | 65 ++++++++++ migration/ram.c | 255 +----------------------------------- 4 files changed, 343 insertions(+), 255 deletions(-) create mode 100644 migration/ram-compress.c create mode 100644 migration/ram-compress.h diff --git a/migration/meson.build b/migration/meson.build index 0d1bb9f96e..262e3c9754 100644 --- a/migration/meson.build +++ b/migration/meson.build @@ -36,4 +36,7 @@ endif softmmu_ss.add(when: zstd, if_true: files('multifd-zstd.c')) specific_ss.add(when: 'CONFIG_SOFTMMU', - if_true: files('dirtyrate.c', 'ram.c', 'target.c')) + if_true: files('dirtyrate.c', + 'ram.c', + 'ram-compress.c', + 'target.c')) diff --git a/migration/ram-compress.c b/migration/ram-compress.c new file mode 100644 index 0000000000..77902a1d65 --- /dev/null +++ b/migration/ram-compress.c @@ -0,0 +1,273 @@ +/* + * QEMU System Emulator + * + * Copyright (c) 2003-2008 Fabrice Bellard + * Copyright (c) 2011-2015 Red Hat Inc + * + * Authors: + * Juan Quintela + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ + +#include "qemu/osdep.h" +#include "qemu/cutils.h" + +#include "ram-compress.h" + +#include "qemu/error-report.h" +#include "migration.h" +#include "io/channel-null.h" +#include "exec/ram_addr.h" + +CompressionStats compression_counters; + +static CompressParam *comp_param; +static QemuThread *compress_threads; +/* comp_done_cond is used to wake up the migration thread when + * one of the compression threads has finished the compression. + * comp_done_lock is used to co-work with comp_done_cond. + */ +static QemuMutex comp_done_lock; +static QemuCond comp_done_cond; + +static CompressResult do_compress_ram_page(QEMUFile *f, z_stream *stream, + RAMBlock *block, ram_addr_t off= set, + uint8_t *source_buf); + +static void *do_data_compress(void *opaque) +{ + CompressParam *param =3D opaque; + RAMBlock *block; + ram_addr_t offset; + CompressResult result; + + qemu_mutex_lock(¶m->mutex); + while (!param->quit) { + if (param->trigger) { + block =3D param->block; + offset =3D param->offset; + param->trigger =3D false; + qemu_mutex_unlock(¶m->mutex); + + result =3D do_compress_ram_page(param->file, ¶m->stream, + block, offset, param->originbuf); + + qemu_mutex_lock(&comp_done_lock); + param->done =3D true; + param->result =3D result; + qemu_cond_signal(&comp_done_cond); + qemu_mutex_unlock(&comp_done_lock); + + qemu_mutex_lock(¶m->mutex); + } else { + qemu_cond_wait(¶m->cond, ¶m->mutex); + } + } + qemu_mutex_unlock(¶m->mutex); + + return NULL; +} + +void compress_threads_save_cleanup(void) +{ + int i, thread_count; + + if (!migrate_use_compression() || !comp_param) { + return; + } + + thread_count =3D migrate_compress_threads(); + for (i =3D 0; i < thread_count; i++) { + /* + * we use it as a indicator which shows if the thread is + * properly init'd or not + */ + if (!comp_param[i].file) { + break; + } + + qemu_mutex_lock(&comp_param[i].mutex); + comp_param[i].quit =3D true; + qemu_cond_signal(&comp_param[i].cond); + qemu_mutex_unlock(&comp_param[i].mutex); + + qemu_thread_join(compress_threads + i); + qemu_mutex_destroy(&comp_param[i].mutex); + qemu_cond_destroy(&comp_param[i].cond); + deflateEnd(&comp_param[i].stream); + g_free(comp_param[i].originbuf); + qemu_fclose(comp_param[i].file); + comp_param[i].file =3D NULL; + } + qemu_mutex_destroy(&comp_done_lock); + qemu_cond_destroy(&comp_done_cond); + g_free(compress_threads); + g_free(comp_param); + compress_threads =3D NULL; + comp_param =3D NULL; +} + +int compress_threads_save_setup(void) +{ + int i, thread_count; + + if (!migrate_use_compression()) { + return 0; + } + thread_count =3D migrate_compress_threads(); + compress_threads =3D g_new0(QemuThread, thread_count); + comp_param =3D g_new0(CompressParam, thread_count); + qemu_cond_init(&comp_done_cond); + qemu_mutex_init(&comp_done_lock); + for (i =3D 0; i < thread_count; i++) { + comp_param[i].originbuf =3D g_try_malloc(TARGET_PAGE_SIZE); + if (!comp_param[i].originbuf) { + goto exit; + } + + if (deflateInit(&comp_param[i].stream, + migrate_compress_level()) !=3D Z_OK) { + g_free(comp_param[i].originbuf); + goto exit; + } + + /* comp_param[i].file is just used as a dummy buffer to save data, + * set its ops to empty. + */ + comp_param[i].file =3D qemu_file_new_output( + QIO_CHANNEL(qio_channel_null_new())); + comp_param[i].done =3D true; + comp_param[i].quit =3D false; + qemu_mutex_init(&comp_param[i].mutex); + qemu_cond_init(&comp_param[i].cond); + qemu_thread_create(compress_threads + i, "compress", + do_data_compress, comp_param + i, + QEMU_THREAD_JOINABLE); + } + return 0; + +exit: + compress_threads_save_cleanup(); + return -1; +} + +static CompressResult do_compress_ram_page(QEMUFile *f, z_stream *stream, + RAMBlock *block, ram_addr_t off= set, + uint8_t *source_buf) +{ + uint8_t *p =3D block->host + offset; + int ret; + + if (buffer_is_zero(p, TARGET_PAGE_SIZE)) { + return RES_ZEROPAGE; + } + + /* + * copy it to a internal buffer to avoid it being modified by VM + * so that we can catch up the error during compression and + * decompression + */ + memcpy(source_buf, p, TARGET_PAGE_SIZE); + ret =3D qemu_put_compression_data(f, stream, source_buf, TARGET_PAGE_S= IZE); + if (ret < 0) { + qemu_file_set_error(migrate_get_current()->to_dst_file, ret); + error_report("compressed data failed!"); + return RES_NONE; + } + return RES_COMPRESS; +} + +static inline void compress_reset_result(CompressParam *param) +{ + param->result =3D RES_NONE; + param->block =3D NULL; + param->offset =3D 0; +} + +void flush_compressed_data(int (send_queued_data(CompressParam *))) +{ + int idx, thread_count; + + thread_count =3D migrate_compress_threads(); + + qemu_mutex_lock(&comp_done_lock); + for (idx =3D 0; idx < thread_count; idx++) { + while (!comp_param[idx].done) { + qemu_cond_wait(&comp_done_cond, &comp_done_lock); + } + } + qemu_mutex_unlock(&comp_done_lock); + + for (idx =3D 0; idx < thread_count; idx++) { + qemu_mutex_lock(&comp_param[idx].mutex); + if (!comp_param[idx].quit) { + CompressParam *param =3D &comp_param[idx]; + send_queued_data(param); + compress_reset_result(param); + } + qemu_mutex_unlock(&comp_param[idx].mutex); + } +} + +static inline void set_compress_params(CompressParam *param, RAMBlock *blo= ck, + ram_addr_t offset) +{ + param->block =3D block; + param->offset =3D offset; + param->trigger =3D true; +} + +int compress_page_with_multi_thread(RAMBlock *block, ram_addr_t offset, + int (send_queued_data(CompressParam *))) +{ + int idx, thread_count, pages =3D -1; + bool wait =3D migrate_compress_wait_thread(); + + thread_count =3D migrate_compress_threads(); + qemu_mutex_lock(&comp_done_lock); +retry: + for (idx =3D 0; idx < thread_count; idx++) { + if (comp_param[idx].done) { + CompressParam *param =3D &comp_param[idx]; + qemu_mutex_lock(¶m->mutex); + param->done =3D false; + send_queued_data(param); + compress_reset_result(param); + set_compress_params(param, block, offset); + + qemu_cond_signal(¶m->cond); + qemu_mutex_unlock(¶m->mutex); + pages =3D 1; + break; + } + } + + /* + * wait for the free thread if the user specifies 'compress-wait-threa= d', + * otherwise we will post the page out in the main thread as normal pa= ge. + */ + if (pages < 0 && wait) { + qemu_cond_wait(&comp_done_cond, &comp_done_lock); + goto retry; + } + qemu_mutex_unlock(&comp_done_lock); + + return pages; +} diff --git a/migration/ram-compress.h b/migration/ram-compress.h new file mode 100644 index 0000000000..06570a799c --- /dev/null +++ b/migration/ram-compress.h @@ -0,0 +1,65 @@ +/* + * QEMU System Emulator + * + * Copyright (c) 2003-2008 Fabrice Bellard + * Copyright (c) 2011-2015 Red Hat Inc + * + * Authors: + * Juan Quintela + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ + +#ifndef QEMU_MIGRATION_COMPRESS_H +#define QEMU_MIGRATION_COMPRESS_H + +#include "qemu-file.h" + +enum CompressResult { + RES_NONE =3D 0, + RES_ZEROPAGE =3D 1, + RES_COMPRESS =3D 2 +}; +typedef enum CompressResult CompressResult; + +struct CompressParam { + bool done; + bool quit; + bool trigger; + CompressResult result; + QEMUFile *file; + QemuMutex mutex; + QemuCond cond; + RAMBlock *block; + ram_addr_t offset; + + /* internally used fields */ + z_stream stream; + uint8_t *originbuf; +}; +typedef struct CompressParam CompressParam; + +void compress_threads_save_cleanup(void); +int compress_threads_save_setup(void); + +void flush_compressed_data(int (send_queued_data(CompressParam *))); +int compress_page_with_multi_thread(RAMBlock *block, ram_addr_t offset, + int (send_queued_data(CompressParam *))); + +#endif diff --git a/migration/ram.c b/migration/ram.c index 475c04a18b..114901241e 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -34,6 +34,7 @@ #include "qemu/main-loop.h" #include "io/channel-null.h" #include "xbzrle.h" +#include "ram-compress.h" #include "ram.h" #include "migration.h" #include "migration/register.h" @@ -491,32 +492,6 @@ typedef struct MigrationOps MigrationOps; MigrationOps *migration_ops; -CompressionStats compression_counters; - -enum CompressResult { - RES_NONE =3D 0, - RES_ZEROPAGE =3D 1, - RES_COMPRESS =3D 2 -}; -typedef enum CompressResult CompressResult; - -struct CompressParam { - bool done; - bool quit; - bool trigger; - CompressResult result; - QEMUFile *file; - QemuMutex mutex; - QemuCond cond; - RAMBlock *block; - ram_addr_t offset; - - /* internally used fields */ - z_stream stream; - uint8_t *originbuf; -}; -typedef struct CompressParam CompressParam; - struct DecompressParam { bool done; bool quit; @@ -529,15 +504,6 @@ struct DecompressParam { }; typedef struct DecompressParam DecompressParam; -static CompressParam *comp_param; -static QemuThread *compress_threads; -/* comp_done_cond is used to wake up the migration thread when - * one of the compression threads has finished the compression. - * comp_done_lock is used to co-work with comp_done_cond. - */ -static QemuMutex comp_done_lock; -static QemuCond comp_done_cond; - static QEMUFile *decomp_file; static DecompressParam *decomp_param; static QemuThread *decompress_threads; @@ -546,10 +512,6 @@ static QemuCond decomp_done_cond; static int ram_save_host_page_urgent(PageSearchStatus *pss); -static CompressResult do_compress_ram_page(QEMUFile *f, z_stream *stream, - RAMBlock *block, ram_addr_t off= set, - uint8_t *source_buf); - /* NOTE: page is the PFN not real ram_addr_t. */ static void pss_init(PageSearchStatus *pss, RAMBlock *rb, ram_addr_t page) { @@ -568,39 +530,7 @@ static bool pss_overlap(PageSearchStatus *pss1, PageSe= archStatus *pss2) (pss1->host_page_start =3D=3D pss2->host_page_start); } -static void *do_data_compress(void *opaque) -{ - CompressParam *param =3D opaque; - RAMBlock *block; - ram_addr_t offset; - CompressResult result; - qemu_mutex_lock(¶m->mutex); - while (!param->quit) { - if (param->trigger) { - block =3D param->block; - offset =3D param->offset; - param->trigger =3D false; - qemu_mutex_unlock(¶m->mutex); - - result =3D do_compress_ram_page(param->file, ¶m->stream, - block, offset, param->originbuf); - - qemu_mutex_lock(&comp_done_lock); - param->done =3D true; - param->result =3D result; - qemu_cond_signal(&comp_done_cond); - qemu_mutex_unlock(&comp_done_lock); - - qemu_mutex_lock(¶m->mutex); - } else { - qemu_cond_wait(¶m->cond, ¶m->mutex); - } - } - qemu_mutex_unlock(¶m->mutex); - - return NULL; -} @@ -608,44 +538,7 @@ static void *do_data_compress(void *opaque) -static void compress_threads_save_cleanup(void) -{ - int i, thread_count; - - if (!migrate_use_compression() || !comp_param) { - return; - } - - thread_count =3D migrate_compress_threads(); - for (i =3D 0; i < thread_count; i++) { - /* - * we use it as a indicator which shows if the thread is - * properly init'd or not - */ - if (!comp_param[i].file) { - break; - } - - qemu_mutex_lock(&comp_param[i].mutex); - comp_param[i].quit =3D true; - qemu_cond_signal(&comp_param[i].cond); - qemu_mutex_unlock(&comp_param[i].mutex); - qemu_thread_join(compress_threads + i); - qemu_mutex_destroy(&comp_param[i].mutex); - qemu_cond_destroy(&comp_param[i].cond); - deflateEnd(&comp_param[i].stream); - g_free(comp_param[i].originbuf); - qemu_fclose(comp_param[i].file); - comp_param[i].file =3D NULL; - } - qemu_mutex_destroy(&comp_done_lock); - qemu_cond_destroy(&comp_done_cond); - g_free(compress_threads); - g_free(comp_param); - compress_threads =3D NULL; - comp_param =3D NULL; -} @@ -653,49 +546,7 @@ static void compress_threads_save_cleanup(void) -static int compress_threads_save_setup(void) -{ - int i, thread_count; - if (!migrate_use_compression()) { - return 0; - } - thread_count =3D migrate_compress_threads(); - compress_threads =3D g_new0(QemuThread, thread_count); - comp_param =3D g_new0(CompressParam, thread_count); - qemu_cond_init(&comp_done_cond); - qemu_mutex_init(&comp_done_lock); - for (i =3D 0; i < thread_count; i++) { - comp_param[i].originbuf =3D g_try_malloc(TARGET_PAGE_SIZE); - if (!comp_param[i].originbuf) { - goto exit; - } - - if (deflateInit(&comp_param[i].stream, - migrate_compress_level()) !=3D Z_OK) { - g_free(comp_param[i].originbuf); - goto exit; - } - - /* comp_param[i].file is just used as a dummy buffer to save data, - * set its ops to empty. - */ - comp_param[i].file =3D qemu_file_new_output( - QIO_CHANNEL(qio_channel_null_new())); - comp_param[i].done =3D true; - comp_param[i].quit =3D false; - qemu_mutex_init(&comp_param[i].mutex); - qemu_cond_init(&comp_param[i].cond); - qemu_thread_create(compress_threads + i, "compress", - do_data_compress, comp_param + i, - QEMU_THREAD_JOINABLE); - } - return 0; - -exit: - compress_threads_save_cleanup(); - return -1; -} /** * save_page_header: write page header to wire @@ -1484,32 +1335,6 @@ static int ram_save_multifd_page(QEMUFile *file, RAM= Block *block, return 1; } -static CompressResult do_compress_ram_page(QEMUFile *f, z_stream *stream, - RAMBlock *block, ram_addr_t off= set, - uint8_t *source_buf) -{ - uint8_t *p =3D block->host + offset; - int ret; - - if (buffer_is_zero(p, TARGET_PAGE_SIZE)) { - return RES_ZEROPAGE; - } - - /* - * copy it to a internal buffer to avoid it being modified by VM - * so that we can catch up the error during compression and - * decompression - */ - memcpy(source_buf, p, TARGET_PAGE_SIZE); - ret =3D qemu_put_compression_data(f, stream, source_buf, TARGET_PAGE_S= IZE); - if (ret < 0) { - qemu_file_set_error(migrate_get_current()->to_dst_file, ret); - error_report("compressed data failed!"); - return RES_NONE; - } - return RES_COMPRESS; -} - static void update_compress_thread_counts(const CompressParam *param, int bytes_xmit) { @@ -1527,13 +1352,6 @@ update_compress_thread_counts(const CompressParam *p= aram, int bytes_xmit) static bool save_page_use_compression(RAMState *rs); -static inline void compress_reset_result(CompressParam *param) -{ - param->result =3D RES_NONE; - param->block =3D NULL; - param->offset =3D 0; -} - static int send_queued_data(CompressParam *param) { PageSearchStatus *pss =3D &ram_state->pss[RAM_CHANNEL_PRECOPY]; @@ -1568,31 +1386,6 @@ static int send_queued_data(CompressParam *param) return len; } -static void flush_compressed_data(int (send_queued_data(CompressParam *))) -{ - int idx, thread_count; - - thread_count =3D migrate_compress_threads(); - - qemu_mutex_lock(&comp_done_lock); - for (idx =3D 0; idx < thread_count; idx++) { - while (!comp_param[idx].done) { - qemu_cond_wait(&comp_done_cond, &comp_done_lock); - } - } - qemu_mutex_unlock(&comp_done_lock); - - for (idx =3D 0; idx < thread_count; idx++) { - qemu_mutex_lock(&comp_param[idx].mutex); - if (!comp_param[idx].quit) { - CompressParam *param =3D &comp_param[idx]; - send_queued_data(param); - compress_reset_result(param); - } - qemu_mutex_unlock(&comp_param[idx].mutex); - } -} - static void ram_flush_compressed_data(RAMState *rs) { if (!save_page_use_compression(rs)) { @@ -1602,52 +1395,6 @@ static void ram_flush_compressed_data(RAMState *rs) flush_compressed_data(send_queued_data); } -static inline void set_compress_params(CompressParam *param, RAMBlock *blo= ck, - ram_addr_t offset) -{ - param->block =3D block; - param->offset =3D offset; - param->trigger =3D true; -} - -static int compress_page_with_multi_thread(RAMBlock *block, ram_addr_t off= set, - int (send_queued_data(CompressParam *))) -{ - int idx, thread_count, pages =3D -1; - bool wait =3D migrate_compress_wait_thread(); - - thread_count =3D migrate_compress_threads(); - qemu_mutex_lock(&comp_done_lock); -retry: - for (idx =3D 0; idx < thread_count; idx++) { - if (comp_param[idx].done) { - CompressParam *param =3D &comp_param[idx]; - qemu_mutex_lock(¶m->mutex); - param->done =3D false; - send_queued_data(param); - compress_reset_result(param); - set_compress_params(param, block, offset); - - qemu_cond_signal(¶m->cond); - qemu_mutex_unlock(¶m->mutex); - pages =3D 1; - break; - } - } - - /* - * wait for the free thread if the user specifies 'compress-wait-threa= d', - * otherwise we will post the page out in the main thread as normal pa= ge. - */ - if (pages < 0 && wait) { - qemu_cond_wait(&comp_done_cond, &comp_done_lock); - goto retry; - } - qemu_mutex_unlock(&comp_done_lock); - - return pages; -} - #define PAGE_ALL_CLEAN 0 #define PAGE_TRY_AGAIN 1 #define PAGE_DIRTY_FOUND 2 -- 2.30.2 --Sig_/f/SlU3YG/rDJ05fFDeyeHV7 Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmQpwcwACgkQNasLKJxd slh/JA/8D5jp7qIDpx5UyNZtl3myYzo4nxQ34LDWNSZW5XxDre+vuSaMdUIpkh6+ MPzoVzjHc4mV6yV1iVpsZkOc+ndvfo0JS4IMPwnQTNcWRYRnOr3bOA4w133a7TQR 45uAJMmWiKy1OGXp4uWW930q0cK9LR6keR22KsOc/TuwMhF4NtQHG8/y3FBopHxT EBHPST9yCu3sVbAPylbZIaTnHm35IcVd8wn/WTHb1TIpqQQ/siKAoMP87t+xMMK4 dXVXdN4YBxaamMKAUEHrQnDRqx+Z84pclbV8te5DYVtcIJ3b05YvnGl67ZVklDsc rqAYsGu9O55K1bJB0+g/cFrR16fFXZLOzPd2PYH8qgzy2EQeCECAgCDXloGw3Ll7 Ts60U6p+gHETmVNQZH8RtKofqY5ZHeLDDHi4l8xWGufPyj4LESP7EvpRYMF2/jfO O2DJlDZx11zOpX++MP6JkMzZX8H/wd56MA/bYktlvrlcMN7icd/VXJjX8nGqXedJ XJM6xoixxN3jFXoihkmWNyzhDezeFH8Fh5Gh/lT2iax8GnTBw4z/WeoF7TTUXYXS 8k3l81aFFLDmKM+XjSyxeHmdhv8+V6HErFc9zRsvgkD7k3KjupD/m6ks84GpgcMd pKxv2VdnNQpJl5o1vLKJlY8P6ICOlyukDsKGepqra+rJCAtDyqQ= =NWMn -----END PGP SIGNATURE----- --Sig_/f/SlU3YG/rDJ05fFDeyeHV7-- From nobody Sat Feb 7 04:09:23 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1680458289; cv=none; d=zohomail.com; s=zohoarc; b=ZAb0u3BU6DluaewQkypB2PmP/61bb1vhzyYyfmtE2ZhDv2CXSg4lwY2E3bn/A0Ud2Y/DDHxvMN6SO+KBeqO3hlgC8HXWrf8atRzsm70xvX4f2Sv0iis8kRn+zUvm5a1rd2NtQepAGsMsbtPxoGp3WTKZsC6iWgRxQtt80oKlZFs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680458289; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=WxGFxexBWsBiuO26iAjMXRUZ3fh4u5ttxXE/nV5LWlQ=; b=IacY44H5ujQ4sAk5cNFwG0uzW4mqbDykUqVUzdu7RCr2zVD3HF3m5QPYtZBnwTgwgSJVKKnS+W311CDU97VF3caVVbXX+olf2OObwqrzVOccv+NPTI27vJrPhnITOPtfVlgbK4MNaxiOHtSgamNcci2YFBWZ1cHk/+DXjrwmwN8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1680458289539555.7800598464503; Sun, 2 Apr 2023 10:58:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pj1wY-0006oT-FI; Sun, 02 Apr 2023 13:56:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wU-0006n7-Ku for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:39 -0400 Received: from mout.web.de ([217.72.192.78]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wT-000442-6E for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:38 -0400 Received: from gecko.fritz.box ([82.207.254.111]) by smtp.web.de (mrweb105 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MeDQj-1qJTDq0vhv-00atb1; Sun, 02 Apr 2023 19:56:33 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1680458193; i=lukasstraub2@web.de; bh=k64E8thNSVxnLjVte7TZElBP4kSPwtJup2zBMDdaP2k=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=q/39LIWSos0GKsysQh/FHdoHlvku/9LN+C3DOERIHW24z/RLWvNQH5+OBXrBh/E+h ptOoMuxd963mCggE2x9PoUYBLquh2eiFZys6hv1iVHhQrVbTDJTsqNyClK6J3ortOo UK6Z4+HEs3saJVQZfGJmyrAb6/3NiUy07a886YEXteaISan8mEAP6RkbqnW5+SrL62 TglRkyABdFKqWLu1TNYJIfKiH0LTzMSFBNivLVCvUdYM55ukWgNEppHwhoZ9o/aS8Z DkhE/x95FACwPoONVkxuldZLZvdQpF0vWExSUKU9X5EGeIatSAoWWZYvzbA0WnmluH 0zNPdecEev6yQ== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Sun, 2 Apr 2023 17:56:32 +0000 From: Lukas Straub To: qemu-devel Cc: "Dr. David Alan Gilbert" , Juan Quintela , Peter Xu Subject: [PATCH 09/14] ram.c: Remove whitespace (squash with previous patch) Message-ID: <8faee1623c20f0aa44b3abc4432c3b94f15b8a91.1680457764.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/w8CM6tw1+v7TBt81qTs3w8_"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:zPzPMwuqsh9rXYFAyA6stN2oBEtsBFHKCNRECa/mzaYWTmq+Ik+ c5YLQoJLFGcMeawdPJV2Ouv+K6rpAAFNeY6XQNv4HjwBPDURrjN2BsKOn1FTZPiHScFrCdF KHaCRoR28WDUCZ9D5HLs3ukmW/BA5h9Z30eNd5iJhrMt0egv7NCBZw6vw1RXanipAulA2KY 2TMgJzhzzt5YFkMY5OF+w== UI-OutboundReport: notjunk:1;M01:P0:VQNWhqnhwzc=;IPu5JpvWA0FI27VWHMYcrFvv2DB HF+0+Lwb4z/HI5fSldrS6RRBJxJ1SgAMwM5zk9gP5mz0HFb+awRGxoniOV3UCBRq6yTYFiE6d Bvjs3pPrG4I+wxxi0ylEaOciHjvBnWLLvc5bOoZqKb8DXgD9LfkW/1PvKY5eyX6YQtfWJFJQj U16h5Bw1RsvQ8OXJYJAY6b/VSrk+e3Doz3zrVpOslDBKuY4Z+IUjhQ3e1GBEE6EQa/tHDyuF3 xhTym0ND2oj8GOxErgRaXc0Bxrtv1os1ft9MwgqHwPkgvBB2tk5VCGCul6UoUfK2GfWI6Y9FA YmK+OTiyMN3tKBza63OAbG4jXuHD1G7odqdDkqEKqwyEvw6zCwCaLXo9I2f1g0Yvhbw7oH7Tc thTu0NHh3fpWTPaRDyt3RFFC1vAytvUbuKX5RcUKjgDq3yYJv96rmEK2uZGuMmZPTrd4dVImf jAIpHKJvfWxHVY20BGgAcNQBNp8RlWdp54EsGzCS0ahGweGsPoXu4p9Hg0ovuIPbDM9nQPkR/ KVCjeTS9EWO8KH8lrx8h5UPZ1O+cvHuI2FSyOAImDKmtAcrqJfKA88j2kbEC3EYq/zssvd45g CokGAvEg5U4VRh5Ansi5Y7lYi3RXeupJSH7wcTiNQafuOMGP2coh6Mfl32KTAxDrbgIUo2MFs vxq9OfXy7xZ8/2CP7DLsD3NBCsU21fvFyGhAtLb64lL36+PCb4PwApo2BWojm4rBJQ83TDnT9 9NuVhXY7QSNJm10cba/JVTqZ1OShgTA+FBs6inKuv0Z8g0AyGdY2WAXo8ESDrM5IxqUgDEZNL 0ESPODGs2F4f/zL9Izp4/COhrbDbd+5Nf+EQMyagDx13Vn1SOJXExFlU+BnDKc7RHBSQsC6ko 73zOa1w+LtygOZ/mylSYy7xR7NUwdJnhu3kjsdjUv6cQlbBSH0ExwxR+1IJ/mR6Yyz22Wf7os nPtzMaSwsKTxzV7dFj/3cWfB62E= Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=217.72.192.78; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1680458290784100019 --Sig_/w8CM6tw1+v7TBt81qTs3w8_ Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Lukas Straub --- migration/ram.c | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index 114901241e..31b9b0b9ec 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -530,24 +530,6 @@ static bool pss_overlap(PageSearchStatus *pss1, PageSe= archStatus *pss2) (pss1->host_page_start =3D=3D pss2->host_page_start); } - - - - -/* split */ - - - - - - - -/* split */ - - - - - /** * save_page_header: write page header to wire * -- 2.30.2 --Sig_/w8CM6tw1+v7TBt81qTs3w8_ Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmQpwdAACgkQNasLKJxd sliBaQ/+I/b2tZoMhEqv5siF1Cn9el3DouZaf4R9hImkuS/Ni99b0vyloVCYS2+G 0bCfryi4uTeVL14DPKNd5frohwUNAhRY5ZNFd+05wHiHL1gU2S2J6Q0iezJrG/t3 pQz1O7pkWSq7D2QnNo1jofE0QYI2BmCBE3z/HHqkuEdDL95ytGGdAWkJz4jZgtYU 0PZoCDU6DIhJ+3rvodwC6gQ8XUxdaM8OSVfXLaj7FofyZamwGPgGCGNoO+SFXbkT AdPYhADhYs4hw5djlbN9qaqZjlY5NiYtxzSUH4YsVTG6tcv9QAZxyOHNDx0GrvPf JsOrZhrug7kHpVYepKX7WJ3LVQVOzvJD/M3+XzjrGPRlZKVNdySzxq89TYohZbPD vyWBedkPmWWHWDjJJ7nqECUWWc95sY9k/a1Vlu0LPr+EbRlVpYe4oBLy1PJtHhls DI/hUqtDEVQZt/AdbLIjXC0gGApsjgFlr59W/JyEKppclLMiGXdvA34R/jNDquR+ IrHAVNl7Qj7VdM9o0Roo8tQEqwyE/yhqO25wxCUGg8KP+u5LCiSUTAK/s072KgoR Vk9J4ytXCO0gtfEhKBZsPtlYq/QbZ4f31S2+tv7Jd7RiRq26XK/7lffm9y/V1JXf 4xe7ZUHeoSILmPYYvF/NyIrCoKiCE5nreCF+kVh982p0Bile/GE= =1+eK -----END PGP SIGNATURE----- --Sig_/w8CM6tw1+v7TBt81qTs3w8_-- From nobody Sat Feb 7 04:09:23 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1680458310; cv=none; d=zohomail.com; s=zohoarc; b=Tkqh7DJGyiQcvqdAaRcfRIDieR04XDMFPA6jEu6HVAvcCWfOavQt+vLMRlCvLxFaPjo0YV7sfy/5eIOoph3Qcq8pTIMXCu0kkWq4GzsGrY2LkY3asNITl94+uplbNIGJ0J4HvVlAVJ7NF/tPEUaU6nFYbdlvX2Eglz5BcrO80dQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680458310; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=J5lg4G/a8x/yjHz4AkHLYydCmSY3jI7UeL9ZG7oriI4=; b=GmNZgjWqSoBJSwSOxFpo5d+F2X5hcl5EjJuLOowICMgfw+RFHmKuFBjaT75b7ej36OuWTh2tRuSJfWrnabEfSE5bOiTqo13Wl1lzR8yiWu2RT7TqHUG5p8OtcP3CnP0A29Q1KpZ2eW2ojWff4i4+iRyo3N4g09vVW+VV97t3bJE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1680458310522258.28497131253937; Sun, 2 Apr 2023 10:58:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pj1wc-0006p4-5Y; Sun, 02 Apr 2023 13:56:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wZ-0006oc-AO for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:43 -0400 Received: from mout.web.de ([212.227.17.11]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wX-00044Q-13 for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:43 -0400 Received: from gecko.fritz.box ([82.207.254.111]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1N45xz-1qQZxF2psH-00zprQ; Sun, 02 Apr 2023 19:56:36 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1680458196; i=lukasstraub2@web.de; bh=TBYuBZEdHM9itefC6FEFGIchlHsJurZstc3lDoPhNX8=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=WFz6bcsjbuRhzSK+AmoKeZVrLw79YejE+15zKwy2nuT5AAkN+i3ioiOlO2OMIKA0H T+lKmfs4nwDo+Go3nM3f0aGtZhT0MjUnKxGIyxHughBVo/wVTUaL+X/E4+dyfJo6e2 nOXi8Im6JU5bex6nFSTE5K68SLHyUplnDoWcEqu2Pytllr03tzl+e63ZNdmKSrdoEU 6dvSekRv/5Poz97iCu/w7G/b3CCIzqeV96UOZou/MbVmy35POyfEgaFfC9cpYFkzac Udvl8T/7OO+YerOB00npWGL26QH/fl9CUYgbnYCmMVcTZQJ1MM69ohIS0J8UiWLJPD VsFWn5dVd4qJg== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Sun, 2 Apr 2023 17:56:35 +0000 From: Lukas Straub To: qemu-devel Cc: "Dr. David Alan Gilbert" , Juan Quintela , Peter Xu Subject: [PATCH 10/14] ram.c: Move core decompression code into its own file Message-ID: <2af9a607c95a9b543a213c7123be5c8f131e922c.1680457764.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/qD3MiitBfU791lsd+zCjl7K"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:BQJnpT5XPmoh82m+VPTKKT3XVYx2JVmWEfy23RI6qD82cw5hyAM uskcG5xkjB6X2/8o9njONJ9q4dXNVLad3GW/ZwHl8QE1USI5LquVCFsX0ujW9yAQeewtQT3 qzXmZoBscqx8ak++qpvWDAX86mhKGjrh092vbQQsGHs9UinE0Dhvic0duwzjPM2Dehs5dOt 9tnOdINxbzAvIJ00r0hVQ== UI-OutboundReport: notjunk:1;M01:P0:vbmtOslda68=;0mpP3qqzNpRz24opK1+Umwbe6Y5 DS2A3uEpXBvyfIXy2jQ/vGfxy2BeLYHhIU5D7iGhAnYSb3noXKjbzR08Ghb/+vkqRW5c1+8cR 2ma+mdCwQOt+rVBV/rBDsEonkPCypZRt9tyG1rYnrfUFrHnNov9LxhrrDPIpsBTITbPA/JHg2 OPXt0LUQanNZefHxsr2+sUa68lyTr5QU7v3zYh1D9PkUyL+aEAQTwcU0Hr/mYP4j1wS+b4KHE HnHW/A7lbUTOPpqqkJy2gBQMgJZNSUc+VQk1HcWkGv/9EsywcWowri1x2faUv0PaWjS+TgUrD qKAFskCnDjOkJdYaGHL9XZ+I3YlUYelbE1s7Ogi0oFfK6Aaj6/orUjhKOuHF485d6U26WFbIS bltibsY6hRKvFyOJcWfZJQZNc3j4IvbAbdFSS6pLMLr2r4EYGpkPo/lIAVWlI3DbGNDWvjuYO 4VTfRwOc4omVmzivdZK/9AGXKSIYXKwoMwroUTqU8dfU7UIpDnlMFaABw+Ki7KdYw6MCVJ9WI s3Ql3WWQ6FWah1zgbvP2mdytbKrT5u+umDfNTE9dUtEiJyFeJtqB8hxYoHvCjJ3rSmI6qOCJr zLallzc0Y55n2DaLZZ6LAsbf3mVLTubeFrwNpO+LlSRt9tjaro+PGrHEK7LdQTWXNQcg2Ssf9 YDArlPvZ9Zo1GYAxkkQLrdPyZyF4BewnEBAkZyqlJtXuKoyrTG5ITNItpXzRhFDbWCauxEIZA JyFQk6YqOTgWa51L0EGbBJui5yhp3lm0WFgs6TaNi8YT7Y/gKkz5WHswTly0X7i1bcVrDZGWu yga4fWlkN1nkLlUR8oPUch5yitSf2KPs5oUtWp4QrvBACsBf3eQNowvT/V2Xr9PMDHfJt7DHo uJxnaNc2E8ERmTfz+mRNoddWVZ4j0zgyJHohsDY/IBDk5240KkPeOImvlRkiScRcpd1uW7Hxo 7JI90qIyhGiq59/T5jVnJpzKVlI= Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=212.227.17.11; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1680458310989100001 --Sig_/qD3MiitBfU791lsd+zCjl7K Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" No functional changes intended. Signed-off-by: Lukas Straub Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- migration/ram-compress.c | 203 ++++++++++++++++++++++++++++++++++++++ migration/ram-compress.h | 5 + migration/ram.c | 204 --------------------------------------- 3 files changed, 208 insertions(+), 204 deletions(-) diff --git a/migration/ram-compress.c b/migration/ram-compress.c index 77902a1d65..f75b8c3079 100644 --- a/migration/ram-compress.c +++ b/migration/ram-compress.c @@ -47,6 +47,24 @@ static QemuThread *compress_threads; static QemuMutex comp_done_lock; static QemuCond comp_done_cond; +struct DecompressParam { + bool done; + bool quit; + QemuMutex mutex; + QemuCond cond; + void *des; + uint8_t *compbuf; + int len; + z_stream stream; +}; +typedef struct DecompressParam DecompressParam; + +static QEMUFile *decomp_file; +static DecompressParam *decomp_param; +static QemuThread *decompress_threads; +static QemuMutex decomp_done_lock; +static QemuCond decomp_done_cond; + static CompressResult do_compress_ram_page(QEMUFile *f, z_stream *stream, RAMBlock *block, ram_addr_t off= set, uint8_t *source_buf); @@ -271,3 +289,188 @@ retry: return pages; } + +/* return the size after decompression, or negative value on error */ +static int +qemu_uncompress_data(z_stream *stream, uint8_t *dest, size_t dest_len, + const uint8_t *source, size_t source_len) +{ + int err; + + err =3D inflateReset(stream); + if (err !=3D Z_OK) { + return -1; + } + + stream->avail_in =3D source_len; + stream->next_in =3D (uint8_t *)source; + stream->avail_out =3D dest_len; + stream->next_out =3D dest; + + err =3D inflate(stream, Z_NO_FLUSH); + if (err !=3D Z_STREAM_END) { + return -1; + } + + return stream->total_out; +} + +static void *do_data_decompress(void *opaque) +{ + DecompressParam *param =3D opaque; + unsigned long pagesize; + uint8_t *des; + int len, ret; + + qemu_mutex_lock(¶m->mutex); + while (!param->quit) { + if (param->des) { + des =3D param->des; + len =3D param->len; + param->des =3D 0; + qemu_mutex_unlock(¶m->mutex); + + pagesize =3D TARGET_PAGE_SIZE; + + ret =3D qemu_uncompress_data(¶m->stream, des, pagesize, + param->compbuf, len); + if (ret < 0 && migrate_get_current()->decompress_error_check) { + error_report("decompress data failed"); + qemu_file_set_error(decomp_file, ret); + } + + qemu_mutex_lock(&decomp_done_lock); + param->done =3D true; + qemu_cond_signal(&decomp_done_cond); + qemu_mutex_unlock(&decomp_done_lock); + + qemu_mutex_lock(¶m->mutex); + } else { + qemu_cond_wait(¶m->cond, ¶m->mutex); + } + } + qemu_mutex_unlock(¶m->mutex); + + return NULL; +} + +int wait_for_decompress_done(void) +{ + int idx, thread_count; + + if (!migrate_use_compression()) { + return 0; + } + + thread_count =3D migrate_decompress_threads(); + qemu_mutex_lock(&decomp_done_lock); + for (idx =3D 0; idx < thread_count; idx++) { + while (!decomp_param[idx].done) { + qemu_cond_wait(&decomp_done_cond, &decomp_done_lock); + } + } + qemu_mutex_unlock(&decomp_done_lock); + return qemu_file_get_error(decomp_file); +} + +void compress_threads_load_cleanup(void) +{ + int i, thread_count; + + if (!migrate_use_compression()) { + return; + } + thread_count =3D migrate_decompress_threads(); + for (i =3D 0; i < thread_count; i++) { + /* + * we use it as a indicator which shows if the thread is + * properly init'd or not + */ + if (!decomp_param[i].compbuf) { + break; + } + + qemu_mutex_lock(&decomp_param[i].mutex); + decomp_param[i].quit =3D true; + qemu_cond_signal(&decomp_param[i].cond); + qemu_mutex_unlock(&decomp_param[i].mutex); + } + for (i =3D 0; i < thread_count; i++) { + if (!decomp_param[i].compbuf) { + break; + } + + qemu_thread_join(decompress_threads + i); + qemu_mutex_destroy(&decomp_param[i].mutex); + qemu_cond_destroy(&decomp_param[i].cond); + inflateEnd(&decomp_param[i].stream); + g_free(decomp_param[i].compbuf); + decomp_param[i].compbuf =3D NULL; + } + g_free(decompress_threads); + g_free(decomp_param); + decompress_threads =3D NULL; + decomp_param =3D NULL; + decomp_file =3D NULL; +} + +int compress_threads_load_setup(QEMUFile *f) +{ + int i, thread_count; + + if (!migrate_use_compression()) { + return 0; + } + + thread_count =3D migrate_decompress_threads(); + decompress_threads =3D g_new0(QemuThread, thread_count); + decomp_param =3D g_new0(DecompressParam, thread_count); + qemu_mutex_init(&decomp_done_lock); + qemu_cond_init(&decomp_done_cond); + decomp_file =3D f; + for (i =3D 0; i < thread_count; i++) { + if (inflateInit(&decomp_param[i].stream) !=3D Z_OK) { + goto exit; + } + + decomp_param[i].compbuf =3D g_malloc0(compressBound(TARGET_PAGE_SI= ZE)); + qemu_mutex_init(&decomp_param[i].mutex); + qemu_cond_init(&decomp_param[i].cond); + decomp_param[i].done =3D true; + decomp_param[i].quit =3D false; + qemu_thread_create(decompress_threads + i, "decompress", + do_data_decompress, decomp_param + i, + QEMU_THREAD_JOINABLE); + } + return 0; +exit: + compress_threads_load_cleanup(); + return -1; +} + +void decompress_data_with_multi_threads(QEMUFile *f, void *host, int len) +{ + int idx, thread_count; + + thread_count =3D migrate_decompress_threads(); + QEMU_LOCK_GUARD(&decomp_done_lock); + while (true) { + for (idx =3D 0; idx < thread_count; idx++) { + if (decomp_param[idx].done) { + decomp_param[idx].done =3D false; + qemu_mutex_lock(&decomp_param[idx].mutex); + qemu_get_buffer(f, decomp_param[idx].compbuf, len); + decomp_param[idx].des =3D host; + decomp_param[idx].len =3D len; + qemu_cond_signal(&decomp_param[idx].cond); + qemu_mutex_unlock(&decomp_param[idx].mutex); + break; + } + } + if (idx < thread_count) { + break; + } else { + qemu_cond_wait(&decomp_done_cond, &decomp_done_lock); + } + } +} diff --git a/migration/ram-compress.h b/migration/ram-compress.h index 06570a799c..6f7fe2f472 100644 --- a/migration/ram-compress.h +++ b/migration/ram-compress.h @@ -62,4 +62,9 @@ void flush_compressed_data(int (send_queued_data(Compress= Param *))); int compress_page_with_multi_thread(RAMBlock *block, ram_addr_t offset, int (send_queued_data(CompressParam *))); +int wait_for_decompress_done(void); +void compress_threads_load_cleanup(void); +int compress_threads_load_setup(QEMUFile *f); +void decompress_data_with_multi_threads(QEMUFile *f, void *host, int len); + #endif diff --git a/migration/ram.c b/migration/ram.c index 31b9b0b9ec..5a2486bf89 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -492,24 +492,6 @@ typedef struct MigrationOps MigrationOps; MigrationOps *migration_ops; -struct DecompressParam { - bool done; - bool quit; - QemuMutex mutex; - QemuCond cond; - void *des; - uint8_t *compbuf; - int len; - z_stream stream; -}; -typedef struct DecompressParam DecompressParam; - -static QEMUFile *decomp_file; -static DecompressParam *decomp_param; -static QemuThread *decompress_threads; -static QemuMutex decomp_done_lock; -static QemuCond decomp_done_cond; - static int ram_save_host_page_urgent(PageSearchStatus *pss); /* NOTE: page is the PFN not real ram_addr_t. */ @@ -3467,192 +3449,6 @@ void ram_handle_compressed(void *host, uint8_t ch, = uint64_t size) } } -/* return the size after decompression, or negative value on error */ -static int -qemu_uncompress_data(z_stream *stream, uint8_t *dest, size_t dest_len, - const uint8_t *source, size_t source_len) -{ - int err; - - err =3D inflateReset(stream); - if (err !=3D Z_OK) { - return -1; - } - - stream->avail_in =3D source_len; - stream->next_in =3D (uint8_t *)source; - stream->avail_out =3D dest_len; - stream->next_out =3D dest; - - err =3D inflate(stream, Z_NO_FLUSH); - if (err !=3D Z_STREAM_END) { - return -1; - } - - return stream->total_out; -} - -static void *do_data_decompress(void *opaque) -{ - DecompressParam *param =3D opaque; - unsigned long pagesize; - uint8_t *des; - int len, ret; - - qemu_mutex_lock(¶m->mutex); - while (!param->quit) { - if (param->des) { - des =3D param->des; - len =3D param->len; - param->des =3D 0; - qemu_mutex_unlock(¶m->mutex); - - pagesize =3D TARGET_PAGE_SIZE; - - ret =3D qemu_uncompress_data(¶m->stream, des, pagesize, - param->compbuf, len); - if (ret < 0 && migrate_get_current()->decompress_error_check) { - error_report("decompress data failed"); - qemu_file_set_error(decomp_file, ret); - } - - qemu_mutex_lock(&decomp_done_lock); - param->done =3D true; - qemu_cond_signal(&decomp_done_cond); - qemu_mutex_unlock(&decomp_done_lock); - - qemu_mutex_lock(¶m->mutex); - } else { - qemu_cond_wait(¶m->cond, ¶m->mutex); - } - } - qemu_mutex_unlock(¶m->mutex); - - return NULL; -} - -static int wait_for_decompress_done(void) -{ - int idx, thread_count; - - if (!migrate_use_compression()) { - return 0; - } - - thread_count =3D migrate_decompress_threads(); - qemu_mutex_lock(&decomp_done_lock); - for (idx =3D 0; idx < thread_count; idx++) { - while (!decomp_param[idx].done) { - qemu_cond_wait(&decomp_done_cond, &decomp_done_lock); - } - } - qemu_mutex_unlock(&decomp_done_lock); - return qemu_file_get_error(decomp_file); -} - -static void compress_threads_load_cleanup(void) -{ - int i, thread_count; - - if (!migrate_use_compression()) { - return; - } - thread_count =3D migrate_decompress_threads(); - for (i =3D 0; i < thread_count; i++) { - /* - * we use it as a indicator which shows if the thread is - * properly init'd or not - */ - if (!decomp_param[i].compbuf) { - break; - } - - qemu_mutex_lock(&decomp_param[i].mutex); - decomp_param[i].quit =3D true; - qemu_cond_signal(&decomp_param[i].cond); - qemu_mutex_unlock(&decomp_param[i].mutex); - } - for (i =3D 0; i < thread_count; i++) { - if (!decomp_param[i].compbuf) { - break; - } - - qemu_thread_join(decompress_threads + i); - qemu_mutex_destroy(&decomp_param[i].mutex); - qemu_cond_destroy(&decomp_param[i].cond); - inflateEnd(&decomp_param[i].stream); - g_free(decomp_param[i].compbuf); - decomp_param[i].compbuf =3D NULL; - } - g_free(decompress_threads); - g_free(decomp_param); - decompress_threads =3D NULL; - decomp_param =3D NULL; - decomp_file =3D NULL; -} - -static int compress_threads_load_setup(QEMUFile *f) -{ - int i, thread_count; - - if (!migrate_use_compression()) { - return 0; - } - - thread_count =3D migrate_decompress_threads(); - decompress_threads =3D g_new0(QemuThread, thread_count); - decomp_param =3D g_new0(DecompressParam, thread_count); - qemu_mutex_init(&decomp_done_lock); - qemu_cond_init(&decomp_done_cond); - decomp_file =3D f; - for (i =3D 0; i < thread_count; i++) { - if (inflateInit(&decomp_param[i].stream) !=3D Z_OK) { - goto exit; - } - - decomp_param[i].compbuf =3D g_malloc0(compressBound(TARGET_PAGE_SI= ZE)); - qemu_mutex_init(&decomp_param[i].mutex); - qemu_cond_init(&decomp_param[i].cond); - decomp_param[i].done =3D true; - decomp_param[i].quit =3D false; - qemu_thread_create(decompress_threads + i, "decompress", - do_data_decompress, decomp_param + i, - QEMU_THREAD_JOINABLE); - } - return 0; -exit: - compress_threads_load_cleanup(); - return -1; -} - -static void decompress_data_with_multi_threads(QEMUFile *f, - void *host, int len) -{ - int idx, thread_count; - - thread_count =3D migrate_decompress_threads(); - QEMU_LOCK_GUARD(&decomp_done_lock); - while (true) { - for (idx =3D 0; idx < thread_count; idx++) { - if (decomp_param[idx].done) { - decomp_param[idx].done =3D false; - qemu_mutex_lock(&decomp_param[idx].mutex); - qemu_get_buffer(f, decomp_param[idx].compbuf, len); - decomp_param[idx].des =3D host; - decomp_param[idx].len =3D len; - qemu_cond_signal(&decomp_param[idx].cond); - qemu_mutex_unlock(&decomp_param[idx].mutex); - break; - } - } - if (idx < thread_count) { - break; - } else { - qemu_cond_wait(&decomp_done_cond, &decomp_done_lock); - } - } -} - static void colo_init_ram_state(void) { ram_state_init(&ram_state); -- 2.30.2 --Sig_/qD3MiitBfU791lsd+zCjl7K Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmQpwdMACgkQNasLKJxd slhBaw/9GKohUdW0XEF6eJcjZDKxRnlt25Svitvn05CiEyMinXiAu64eEJVJRRpL D7pYsds2JcLwt8lbvM+PdC6emYpwcmC+wkvJeJpHxpIzesOfAHttKXnMeByErKt8 Nd0lfcd6GPrQzoFNfNaR+YnwtdeAz1Qx6Bh+seatFz03bD7UWvzfRnjRzQg46De4 nJiHQhsUNOokZIiwGQniviwlNTe88XsnnSfTj9cnkze/RRxrExRCwRKmQUaoBEZR nay4cYsYKf5zIpjpn3kMC8TGR72LsWM5z42HhSLLQ5wgOdXl4B1o1XCzNIXXAyU9 RXh0PTZdVvWwFFjwpCdjVXcIBrKUJzKHdXmVGlrNwywOk4HAylPYff+yhwabje5J lGf9slJSeV2qvZdDeBEgaVx5TIRrLegJR8W7Ere8KLfzPBEJz746o0H38MV8RXn6 oMbyyRCSWnWa9Ef3/9oIMtBMqQniqqgMxcukVmKAPG3z7++7qh4qAvDed3tJkTGj MHZE0/bQVuJews0Z/PU8PiEbSW2yvrjLjt/aXSeVqoB28kxBYRFSyg+hzsV8ibaQ rOmRdjM77urEgRfsb3iLm9/vKGxWNL2q9SvKBbG8aznyaxncHmyD2vDf6xWGreai vtoGFfFnbgZDu8PgNvmln9U1+rPGfqxGuW8xp5cnikWM9mIAGwM= =XF0p -----END PGP SIGNATURE----- --Sig_/qD3MiitBfU791lsd+zCjl7K-- From nobody Sat Feb 7 04:09:23 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1680458288; cv=none; d=zohomail.com; s=zohoarc; b=ju1F5yxgWN7hkam154AeWUP9hJ2xPUz6StH1sABbth1nmIpq6yM5zSUrMCamuF2Nku5pIhIq51FistjoYCZ1FGT052Iqcudfr6EtLecJkOo6BDgdaxibCLRsc+AC8d3VXTztPjDHYhuObIEh03EvziQYiQlOASfufrFpsw9bi1U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680458288; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=D+p73h66DM1ofVFdp7K6GeVB7dsaTg6Fwt9Alv5HiTk=; b=DYRA1AyNGTREkzrYXhlB2tfcPzmH4BTrcpBpV57vtV2aVYvQWuy0uRQPcBVVLAAdRWTj6mOQSjf9M7qhi7FrR/8LvhA1/+ePoS5FNgVt+lBoh7Ng4Kavxj7U2R8buOVtWAvBcMGKe2eMQ3S/kpA9Aa7YhtHr25Po4OSeuguqAp8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1680458288667459.6189671265023; Sun, 2 Apr 2023 10:58:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pj1wg-0006rq-Fh; Sun, 02 Apr 2023 13:56:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wc-0006p9-Lr for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:46 -0400 Received: from mout.web.de ([212.227.17.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wa-00046U-0B for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:45 -0400 Received: from gecko.fritz.box ([82.207.254.111]) by smtp.web.de (mrweb105 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MA4bA-1pYct80bAg-00By3I; Sun, 02 Apr 2023 19:56:40 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1680458200; i=lukasstraub2@web.de; bh=gakdj9MuRP2kmr9tpcbl0VTtVwaDkY+EO+nYuW3YLiU=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=wZ2EK//+zMH1zYWQeTcdkSwoRy5mf9Xrojkp6kIXhcLtwNtakCkKZT2+LSEY8EETE Nj6K8V/IOKNqjLprDFriAk0Lcw9NkdYdtVAYYFCGWJOrlr6nh08h71JnuKJ6eeJoGT IS/kv4u/jOienfRoM/VXsgeutHxrtVm+ic+rTAMK88kopDGbDmWBqSfRHyruLD+Icq Vxsnp2yNGMh9RJ1oi8Mc5u6yvKI6PFND96ZhzfbfY4ISnfDP3i9WMm8O9PMSf2J2NW aaiqdxOPKJ6T6yMWLHLCbGSUMU7XlfbvY2Src9vnDKyH2bCeDTWH58UTglz0qWUhyp WZwj9tB2fhgHw== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Sun, 2 Apr 2023 17:56:39 +0000 From: Lukas Straub To: qemu-devel Cc: "Dr. David Alan Gilbert" , Juan Quintela , Peter Xu Subject: [PATCH 11/14] ram compress: Assert that the file buffer matches the result Message-ID: <929d6df4337b8a206cfbc201b5d350a324d66b02.1680457764.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/Ue_U6aUdgYxVII2sSJ3SJAm"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:5gSpBR/4RVf4RiBuFq1kJjb403pqUxpInx8MPhGiHXPrlbSJj3/ /TQ+TodjwiKKvklzd6xVKrKU2cB1/djRpqz0Nw2wkQS7OmHHDv7M3w40I4AjkPb8obwH4ao UzRQiV3E0bfD53w3RtGtuwGMrRUsHXJQwQrw5MP8oK+GeZ/aaiIFm7JDDouXsNaBZCTzh/m y+7NIECErIARoTxoD/qVg== UI-OutboundReport: notjunk:1;M01:P0:DHDwzci6qds=;oN6s4vYFEsetkXpiGPmORZ+Ikmc w/l2j/XEj1WYyOsHPhKBO7sQhCqV6Zr7jo64TZ65T/Q+jS9niCNSiI+XWcQCWBZHl/q4PCscW 9dMEjrnNTYhNd5tSFhPHPt02T2Lg5QFkub7/U1XCMcrzfpqifWIYQHYFDHQCgQYUtgqMA6rU6 Mh3/zKm49Jax/C+3LZgJiKUfKBOFAc8L2AZNt/AQHOESHOuu3UnaaWOGXL69WehlRyPBbmejv 3wBWyyXOpXh1f1CLSbSYhT+qPzHY0dsLCM0TOAYl21yWnmKDuXUm3qXBl9WdeqsHTZLMPqxWo AtuzWS2M1OP6Pr1VAS6WAFNOyXIppQ0aguqoitqqxyPk4+XQfef5W8cKX2ZkhaqaDFIRlhmGt 79OmeotdSIgWGUo0M+cKWjYLAuS8fOlKOB+ph3Gd3Qapb48QI2pmwZG7j5AQOiIw0C+b01QPX bEzhlNHvMXYTzx7IfF15ihIgaAeB+6ZpK0dGOCdpOhTxHge0jkQrxlDSggEvPyPOPv9x8BBC+ LUk0j+zuUMA27L8mqpZBpfSOD9i/v4zPPaj56kjTfg90ePOFOj039lYSGx05SIYos31TW8soe g3zcQRozJhtko/XLbS5/+FASM55VpxXKBnVSHrAEzlFpH5XK8zkkNWSs6erkYC4JG8sOk9Y0v fTtJkiMgH5ZXFg5fV5HTEhmN4HkBLm3/dlh/zs6Z8MWEW6S6Nf+YEVA7cwIgepaKW3S/PwwKX 59d+jgTHJhAGxHRLkVZM7srMxaKkkbM9J6+IdiPH+xtoS3wTyDEH3GrqTSHrUPvRj34iKOFBB NTulDia63BczFY1TVv5NtdRiS7aYQ9BZ/vhExCdwa18i09rX5Th3Gpa5oSZs936de9XfxQnbd FuZFrVg5QJG3TP8eKhcXJ5FsJFgTKPNK5r4w1XDHzPJG0ooSTFMJVG3SOADrDs08HPjpCiIy3 OEUp47T4MGLu33YInHm7FWRPGeI= Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=212.227.17.12; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1680458290797100021 --Sig_/Ue_U6aUdgYxVII2sSJ3SJAm Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Before this series, "nothing to send" was handled by the file buffer being empty. Now it is tracked via param->result. Assert that the file buffer state matches the result. Signed-off-by: Lukas Straub --- migration/qemu-file.c | 11 +++++++++++ migration/qemu-file.h | 1 + migration/ram-compress.c | 5 +++++ migration/ram.c | 2 ++ 4 files changed, 19 insertions(+) diff --git a/migration/qemu-file.c b/migration/qemu-file.c index 102ab3b439..2b3f3f8549 100644 --- a/migration/qemu-file.c +++ b/migration/qemu-file.c @@ -887,6 +887,17 @@ int qemu_put_qemu_file(QEMUFile *f_des, QEMUFile *f_sr= c) return len; } +/* + * Check if the writable buffer is empty + */ + +bool qemu_file_buffer_empty(QEMUFile *file) +{ + assert(qemu_file_is_writable(file)); + + return !file->iovcnt; +} + /* * Get a string whose length is determined by a single preceding byte * A preallocated 256 byte buffer must be passed in. diff --git a/migration/qemu-file.h b/migration/qemu-file.h index 9d0155a2a1..15e5f189f0 100644 --- a/migration/qemu-file.h +++ b/migration/qemu-file.h @@ -113,6 +113,7 @@ size_t qemu_get_buffer_in_place(QEMUFile *f, uint8_t **= buf, size_t size); ssize_t qemu_put_compression_data(QEMUFile *f, z_stream *stream, const uint8_t *p, size_t size); int qemu_put_qemu_file(QEMUFile *f_des, QEMUFile *f_src); +bool qemu_file_buffer_empty(QEMUFile *file); /* * Note that you can only peek continuous bytes from where the current poi= nter diff --git a/migration/ram-compress.c b/migration/ram-compress.c index f75b8c3079..b75a9d2b9a 100644 --- a/migration/ram-compress.c +++ b/migration/ram-compress.c @@ -193,6 +193,8 @@ static CompressResult do_compress_ram_page(QEMUFile *f,= z_stream *stream, uint8_t *p =3D block->host + offset; int ret; + assert(qemu_file_buffer_empty(f)); + if (buffer_is_zero(p, TARGET_PAGE_SIZE)) { return RES_ZEROPAGE; } @@ -207,6 +209,7 @@ static CompressResult do_compress_ram_page(QEMUFile *f,= z_stream *stream, if (ret < 0) { qemu_file_set_error(migrate_get_current()->to_dst_file, ret); error_report("compressed data failed!"); + qemu_fflush(f); return RES_NONE; } return RES_COMPRESS; @@ -238,6 +241,7 @@ void flush_compressed_data(int (send_queued_data(Compre= ssParam *))) if (!comp_param[idx].quit) { CompressParam *param =3D &comp_param[idx]; send_queued_data(param); + assert(qemu_file_buffer_empty(param->file)); compress_reset_result(param); } qemu_mutex_unlock(&comp_param[idx].mutex); @@ -267,6 +271,7 @@ retry: qemu_mutex_lock(¶m->mutex); param->done =3D false; send_queued_data(param); + assert(qemu_file_buffer_empty(param->file)); compress_reset_result(param); set_compress_params(param, block, offset); diff --git a/migration/ram.c b/migration/ram.c index 5a2486bf89..7a8f540737 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1333,11 +1333,13 @@ static int send_queued_data(CompressParam *param) assert(block =3D=3D pss->last_sent_block); if (param->result =3D=3D RES_ZEROPAGE) { + assert(qemu_file_buffer_empty(param->file)); len +=3D save_page_header(pss, file, block, offset | RAM_SAVE_FLAG= _ZERO); qemu_put_byte(file, 0); len +=3D 1; ram_release_page(block->idstr, offset); } else if (param->result =3D=3D RES_COMPRESS) { + assert(!qemu_file_buffer_empty(param->file)); len +=3D save_page_header(pss, file, block, offset | RAM_SAVE_FLAG_COMPRESS_PAGE); len +=3D qemu_put_qemu_file(file, param->file); -- 2.30.2 --Sig_/Ue_U6aUdgYxVII2sSJ3SJAm Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmQpwdcACgkQNasLKJxd sliPpBAAka4G4s/gcW/BUFJEuk63gSwILUsdb6wDNoCEpbpGFO4AFvqk3l7MW8He bauem+2LjknCEsA2nV3GQKPqFRaLz8KlQFcerljbOwrf2O+jwaObc+znG9FHJXfJ fciKJqAzsJttU1cMcWVcbQ0v7Wde6QIlrT2RMCW2EvGrVCKL6o4r9eHtjP5SIHJl /2f0OizfcDQofeO1lZlEfP4c5Te6i84b61p90kOjcwxuV+mRs8vWEJ9XuUKf+yAH jZhyVe8Cnye0uraFzsjPSVOeVy6tdHs//3Djb1s4NMMR6s1Fyg/AwtRxEOGTbVHa g1n+EuTVZYndXW0BVe0EHXcm7GWzAQwXpipHPufWBM3VvPNlG8wQ4FV4U/KwrpN0 lroKWjbZOoG8/Ns6kPCvkLdYI00d4ox28TpjCtk+duknuBvtSzKIABDS7uztRI0z pLf8fInkKOzwhOVFEWlQSNzXkGxuz2XQ0q2SfUnw/GZSynKCWkB2Mxvq7Oe8YaJw UL07l0YObgEWxax8rEQz9uoVjFlDwONBfM5jk5p68v3zR4gXA+oy7h/bQfxGxtid 8K8wCn7/5qxZ/NaXTSutSnp+SYC44l2qrMX5/PyNy+pc5PcR0EFDAw1zBZVqOQNc pd8HwQvLF0a16bA1cjp86ZRsog7gjNobRWu6m0a6dym2/PE9Vas= =j9gj -----END PGP SIGNATURE----- --Sig_/Ue_U6aUdgYxVII2sSJ3SJAm-- From nobody Sat Feb 7 04:09:23 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1680458288; cv=none; d=zohomail.com; s=zohoarc; b=Auwsb5wyqc44X+THVnubNc+eWTSek1mMWrm322R2N/s5foHR9sPeLrszsR2o8vh7ZGErZQPEMiFRUzP4eBEBfLl8wjPl55EMGFMmRGaax+enXXCf46ZVfx8Kj4KKmJLubKyyA+0W53yoXgHJpfOr2ALiS9HlCM9ByJuctYvuOpI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680458288; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=EB8VaRAWBK0oXLR+71tIM6tqF5W0FQ15mCpwJS4kA3U=; b=FEoCJZflvbPmyRNTgwHAMtTxhrckts5VC2ScF5lhky7LfVfASZjHOj5Omy6vXeEMMye33pJ2a23XswyiC+fkJSFO8tYTNebAbvt13D5J2MCd8TfJ/ThcnSzc2QPw0FUeVKc4HEg5E4GnbCL4jimBAcija1FU2yjHQGBakG2xb9s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1680458288146438.87413170486377; Sun, 2 Apr 2023 10:58:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pj1wh-0006s6-1G; Sun, 02 Apr 2023 13:56:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wf-0006rd-Cs for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:49 -0400 Received: from mout.web.de ([212.227.17.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wd-00049E-SD for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:49 -0400 Received: from gecko.fritz.box ([82.207.254.111]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MfKtN-1qKakC1d8N-00ga7n; Sun, 02 Apr 2023 19:56:43 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1680458203; i=lukasstraub2@web.de; bh=EB8VaRAWBK0oXLR+71tIM6tqF5W0FQ15mCpwJS4kA3U=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=ZumiD/YCehugIaWecE1yeLgz01JrBqthWXCSKovTJyAHhKLMBBVnx5+1WVW6VozCZ dFD4tB4Kv8PU5+KvBIhr3RcmFKN3JDjV6wQJGYRIQGVShfSDydvKl6kIF9ODzOxmoJ gsMdnlO0H6oAvmA/qogPLwPhqJENzOTw7QpOUoAAXLP5+u7khLatGkxh6gcc603fXn 0XUkCNrzj2Yhx9/3XrhT2IPnf0e8YLMpxvImpvsb86f2mVOhcIMlvTJ85uD9eGV/wI uFrBxpa8V6z641VPwrg1mYeR/WuAJsSwpWuYRBruVu20ZSxTVAoe16ZD2x7wZ8cwt0 frpJOyOpvOiMg== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Sun, 2 Apr 2023 17:56:42 +0000 From: Lukas Straub To: qemu-devel Cc: "Dr. David Alan Gilbert" , Juan Quintela , Peter Xu Subject: [PATCH 12/14] ram.c: Remove unused include after moving out code Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/9SucF5WtwMDwze47kR+5Lte"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:WQgbku5LHYMz+D+yNvZHdlYu/sFOdpCOtCWza8BOacZmQMLwq6V 6NdJiQ+Bysdbjk0rNoln5HL1lAMjQ00RTEabHsf9D0jttjCeiuIVwfU7DLE9MI+mTexzF64 f5XpaHjVMP3KlSVS8PX5KoYf1NK4E2ejTl1Uxc0SrqHqo2Np6uvQ3VhPCyoHrLQB50GtsAh 6Dw59DRqKZJFZbO2rUPTg== UI-OutboundReport: notjunk:1;M01:P0:cajR0OPTqdw=;LsQgOTQPanAafeOcI9rpw4PKwU6 eU5uqjrgktDiCUlvWAE5QTDtS2w/MYWXx4BDmDMQF66X4In8GWguiqp+n+NEG4i3A1F5ZchxG qVNFonJZfCNMPIZEjmuXr5pRCoCd2mK8wsxgxzRmuOqnyC8cCSMbbxIpB7HgULCkEjiTwmOnu nuPj3DAKIdf2THomTO9jnQHUu7ngdcNmpnTUgJiUH4Vk47iiKJ+DZ2hxe+01DN9eTPQOJT9L/ 66M2PyNx8guZveZH23SdbmieTxr1+rQR/8/CoD+KsgI11ICtnKy+AHlfQcGEzX4jBj8GgfXI0 apqk52L4dPu2o3O1UVSDBHMetwx4lxiSvbTGxon9SwemAZfsvPOKYbsczXe68WOFJMr8X3TAr +ZSdP8T+4dCkzfl9dH12adXL4p6xThTM0oxnI0dbFpxpcxgYccSGfIrehgG1Nw/63tB0UXc4b W1vJKtu8TmeJf6t1sX4sTUNq8OagiyovDBuTlGHf0VzhikXkexpuVtKkX5FmwAFZ9isufS+ry teH16p58P19WGejjHqE3RLfxJZe2Bt/Fl9sJHOS62GevMnjCoANkJIxuI6cx46FKbrlEC2ZvB HwiOxpY5W04NdX9kUyUoSetHxJBRXStyCWA7Plto5RiAFWK2/huHOwPn1kjTqv3jc1GM/qvoY WipqYA7B5z+4qs1SMYvZOhZjsTey1E0HQdVAbSpU2IE2aiV6a8rBA3+2NnBt8Lm40LARwdBaK 4JR3DPDEemdJu6Sne4yf3HZWfS2Yu4HhaGPEdrViMLrtjL46jGegwrasUFRs9V6hpWa9DTnk2 akH0rOjSaXDS5mdaVOW3DHvelxw7G+XOA0QtSY/t+ZgkCazkvva7WE+TRqdcXcOt21RCDcYle LBeXx62JrCpPw4zwrWwfKiIfv8y6zLPxCwLlxBk/bwF/uJeQnX0oSXFo5bqC6fEvDze6rmfLo twIphIElRX56zl+w0te7hP6akvQ= Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=212.227.17.12; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1680458288782100007 --Sig_/9SucF5WtwMDwze47kR+5Lte Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Lukas Straub --- migration/ram.c | 1 - 1 file changed, 1 deletion(-) diff --git a/migration/ram.c b/migration/ram.c index 7a8f540737..9072d70f7c 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -32,7 +32,6 @@ #include "qemu/bitmap.h" #include "qemu/madvise.h" #include "qemu/main-loop.h" -#include "io/channel-null.h" #include "xbzrle.h" #include "ram-compress.h" #include "ram.h" -- 2.30.2 --Sig_/9SucF5WtwMDwze47kR+5Lte Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmQpwdoACgkQNasLKJxd slid4Q/9GOVZL2uCKe4A3Xy9O58ZC3MFG5j8pcGsaYtadkEoVrEfee4RnH5t2ms8 wPhiN0OMI54tk78vmIB5ko6sny9C5AuqziU8hwF839vtNGtQUpLjIxFcRL7SiHJU HiTNy9fnMLAHxmu56Fbh6LthgZ1xMs6DSmw1qJBqBAr5SH7nxtwZCvS/xYpyOtRc RMnn16i0uMEh0NnrQ7zAMSEc4Uvia31ZmVXGXLaJd4JltGkS4XR9ygI5XBHivZkZ 8VDQRrCVPe6lolY7Wut/4ZIzVwNCPiAc+8A9plzy/C9sjds2tSoMuWy2P0XE908I ReiwxL85lY/QpRKDPsik92iV7CEUBPfNR96gY+1D+ufkJUyW9KMIQ5ehvPbb5xsV Ob8TV0iHrXyTAILPj8Ad/5OcDQETaQrqgc+R+yAEq22Jgb4tRWkC08/zh5SpcYJS z0OfjbMdgbzK2Efzjv1Djpcg7iI0KZt7AJQqTvvLSQjI1bogvaHFTbdxUqF1n1H/ eurmEORp/dTMbX0PuBTchNUQPlkoQYaOa78aziM989m9+T+5deIaikooZzXRxi/m UaTpS99PVKIwgYbwYnGjfTT+dRgRSEGJhIeqR3n8p2bC2Td+TWKGy6XADQ+yN2kO 4rUscMNLX9zPs/Ws5Uzk3ODa/iwYyz8Zn/LfBQMcTx5AoyfGrFg= =YLJL -----END PGP SIGNATURE----- --Sig_/9SucF5WtwMDwze47kR+5Lte-- From nobody Sat Feb 7 04:09:23 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1680458288; cv=none; d=zohomail.com; s=zohoarc; b=J5phQKhoExL2iBbrpvgqoAnTtgewjcaPBJASjYLtsnWt2x9dvb/dsML7gw6noUP7KsCMc7cn9BVrI7mTHl3hhUWNUEI+Ej9wPofO0SOyCcxCM1BGnGXTFAxmAlXZTIPt9s08RIXSEXw2BITzsNwBnnIf/mRHYFWiKsbncuDApOs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680458288; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=MPi4+pVOR+cHPH8Q+VNfJY2MmfzmL9RQWcTwvbVXvSA=; b=azs0KUn8E2jmLZxh4OolQv8WkRC7L63AV6FxoUyT3mqSLviAEPeWMIrTQVgFlIDrE770bGbSDS6HgK+0MangvqdjDkch2ykwSoJYudiCWssqfx8cdhvRs4lrUkpq9NdjkZpSBJMbeBLo24zkTA8qYTzn/6DmSqNJvD9mqU+lkms= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1680458288130879.4498787580992; Sun, 2 Apr 2023 10:58:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pj1wk-0006um-H1; Sun, 02 Apr 2023 13:56:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wj-0006sP-C2 for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:53 -0400 Received: from mout.web.de ([212.227.17.11]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wh-0004CX-2E for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:52 -0400 Received: from gecko.fritz.box ([82.207.254.111]) by smtp.web.de (mrweb105 [213.165.67.124]) with ESMTPSA (Nemesis) id 1N7gXQ-1qVp9B0CBO-014ux9; Sun, 02 Apr 2023 19:56:47 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1680458207; i=lukasstraub2@web.de; bh=ltaKt3HMk8MWhVsUmGjKWgv3LRNgQ6mpm6WvnlbaEBE=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=M1giuJx8NXv66wGa7qiTnW8t2oy09ufM47rXKi1bSEhlwaV8096dqJ9biWjgmF6De HlhUYTNBiRphs8fqRrnm5lbUShgPfCc9M0SGER2d+wXtVUoSZrDA3yVZQV8BBuxNkA 77VR5STa/aYyZD2FzvxvmsvfN3BxzoZ53wBnxrzWGSojwqcMJGlKFFevMTjIdgXHtk LJva0irTup+i3IPcw4rBUgA6wOd9A8sVOmsegnoYg1o0CQH6ql+G7DhV7i5JpEaVfo SI6DQm8g+J0kVCr9/GgIkY86RsLUIRaZjRdplmS02szV17/xdAnnwlwj/shcMfWAuR ZGcDLkD7uIzKw== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Sun, 2 Apr 2023 17:56:45 +0000 From: Lukas Straub To: qemu-devel Cc: "Dr. David Alan Gilbert" , Juan Quintela , Peter Xu Subject: [PATCH 13/14] ram-compress.c: Make target independent Message-ID: <8c89bab01953f658b44cd67df2c75657ccbff5a4.1680457764.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/O2ZEDs6LxeKw3j/hS7_9bF2"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:/FV1zBwsSN1PKTB1oPZr8oaSCLEGQAbEVkSUGBRnnaRcpFokhDU 6F93avRnaeYngXGHUnwUk7yGm9nMcfz+1m8pahJT5R3hxA5tnNxz/PwxWyHKPNFF+BR6FIL RWmvkQOyTy0s7+qsc2Hdrr3qFcPwaROZ78AayClRQsdzc7tXK9gdt1XCdWJpasoOlO3gt0d zgNpLZ8E1NmDSUYrD4EDA== UI-OutboundReport: notjunk:1;M01:P0:J1gdBN05i2o=;ENH7+LB7bYGXS8xXlF7E4AAzEpd DuoJ4A1XHV0TFRk6HCMtixo7U+Ih8e3vDMtmUdSzdKSQ4f7mx72eaUD+hv7h5I47jy25RNeOc zB0kr9BsgRQNeky/2JP6lSMAZTYJBFnKZMxLtfaQrzWKNrv5U9Zw7bZGERclSQwGe23qvMv15 7ShP6Mc3SGdoFIJUTqkS2adAjlzyLs6wd9IMA9VrlsuTM1X0LfxYTgc5JXji7Cb5FBiE6LJbe OHoHMZs5uWRodifT34KmNg/JRNUaP1OoGM8BqDxzytI5UmZgGcraNX/K6jcpgEEflVKFbQB7s Gf57O14Tzr1nOjsO0qxuGG9n6CBmx2QcvF9SU9s8Lj6FgOCtc1s3jQZP9MZrw7DUOHGliydpn W9Dkp3sEmn8cieA1PvuifUWex+cJqtkBIAmn+cgYGrzkf/BLE54LEvwA48+QRIa3Y1hOqc+gR w08GJ6n6cIYnxVJPLFmxCTtPsBuJFfRFj089Y9xIdZhc0FECRIUG30HhKjdCjUeN/t/rlTLLn KxP0StJMah1HSivpXLgYvlW0745h9J9oPn00qpBOGYCWzqZOhBk4Hd+lvVxvMw1ErpEdjd15U y74K48eASQN5j4I6uCX3fqE59tVZt20OME9i4uNKw8w4/8otVYJthx28a+p99aY+bStOMn2Yn MMpSFjRfoO/sr+KEZcPh2xhygMctYpo7iicm/RAvuA+X4Epr7JCKBEryI+kzEfuzQv+V0JSx+ 1q7t0AIbOHO+FwbXyAwSMayAPlE38q+nWyrBtJxwoHq0J6YoET8z/a2yg92odAUR5KZv/thZM k2GdTS+v/+s4lrk1wJCZwSpoSIwEGGrI9Iom5t5+ioyUiFQcDlkGkIUkzOJ9hFYf04RsWJGeu D8S0/dEAnsFvTmxynayRawkqTjFih97veR4s5xcLsfLStfOwCdiem/tF0VsJLTcdUfTbrdk4L DIGEEuPi3g4+F0Hy5ka+GvtK6oM= Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=212.227.17.11; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1680458288780100006 --Sig_/O2ZEDs6LxeKw3j/hS7_9bF2 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Make ram-compress.c target independent. Signed-off-by: Lukas Straub Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- migration/meson.build | 2 +- migration/ram-compress.c | 16 +++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/migration/meson.build b/migration/meson.build index 262e3c9754..16f642031c 100644 --- a/migration/meson.build +++ b/migration/meson.build @@ -22,6 +22,7 @@ softmmu_ss.add(files( 'migration.c', 'multifd.c', 'multifd-zlib.c', + 'ram-compress.c', 'postcopy-ram.c', 'savevm.c', 'socket.c', @@ -38,5 +39,4 @@ softmmu_ss.add(when: zstd, if_true: files('multifd-zstd.c= ')) specific_ss.add(when: 'CONFIG_SOFTMMU', if_true: files('dirtyrate.c', 'ram.c', - 'ram-compress.c', 'target.c')) diff --git a/migration/ram-compress.c b/migration/ram-compress.c index b75a9d2b9a..a75c6e0573 100644 --- a/migration/ram-compress.c +++ b/migration/ram-compress.c @@ -34,7 +34,8 @@ #include "qemu/error-report.h" #include "migration.h" #include "io/channel-null.h" -#include "exec/ram_addr.h" +#include "exec/target_page.h" +#include "exec/ramblock.h" CompressionStats compression_counters; @@ -155,7 +156,7 @@ int compress_threads_save_setup(void) qemu_cond_init(&comp_done_cond); qemu_mutex_init(&comp_done_lock); for (i =3D 0; i < thread_count; i++) { - comp_param[i].originbuf =3D g_try_malloc(TARGET_PAGE_SIZE); + comp_param[i].originbuf =3D g_try_malloc(qemu_target_page_size()); if (!comp_param[i].originbuf) { goto exit; } @@ -195,7 +196,7 @@ static CompressResult do_compress_ram_page(QEMUFile *f,= z_stream *stream, assert(qemu_file_buffer_empty(f)); - if (buffer_is_zero(p, TARGET_PAGE_SIZE)) { + if (buffer_is_zero(p, qemu_target_page_size())) { return RES_ZEROPAGE; } @@ -204,8 +205,8 @@ static CompressResult do_compress_ram_page(QEMUFile *f,= z_stream *stream, * so that we can catch up the error during compression and * decompression */ - memcpy(source_buf, p, TARGET_PAGE_SIZE); - ret =3D qemu_put_compression_data(f, stream, source_buf, TARGET_PAGE_S= IZE); + memcpy(source_buf, p, qemu_target_page_size()); + ret =3D qemu_put_compression_data(f, stream, source_buf, qemu_target_p= age_size()); if (ret < 0) { qemu_file_set_error(migrate_get_current()->to_dst_file, ret); error_report("compressed data failed!"); @@ -335,7 +336,7 @@ static void *do_data_decompress(void *opaque) param->des =3D 0; qemu_mutex_unlock(¶m->mutex); - pagesize =3D TARGET_PAGE_SIZE; + pagesize =3D qemu_target_page_size(); ret =3D qemu_uncompress_data(¶m->stream, des, pagesize, param->compbuf, len); @@ -438,7 +439,8 @@ int compress_threads_load_setup(QEMUFile *f) goto exit; } - decomp_param[i].compbuf =3D g_malloc0(compressBound(TARGET_PAGE_SI= ZE)); + size_t compbuf_size =3D compressBound(qemu_target_page_size()); + decomp_param[i].compbuf =3D g_malloc0(compbuf_size); qemu_mutex_init(&decomp_param[i].mutex); qemu_cond_init(&decomp_param[i].cond); decomp_param[i].done =3D true; -- 2.30.2 --Sig_/O2ZEDs6LxeKw3j/hS7_9bF2 Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmQpwd0ACgkQNasLKJxd slh6pQ/9FSMeCVoIpLzZLalUxBsIoU3pvxvn3+EdLVKmzYhkmbW83rEvyNSdy626 mQCxuLNJ/zJ68AvdUPw1BvbWmcb5JZ5SupJrTNzViHXVb0l8lczrH+20N2vC4aRr kdaPm8Oe+EAlH2gW8ajpfnO3gHyDXmo1dUJ7+cdRh+IFmE5iWfeHu2Y7BMnFgeNW N7+1Rl5glJZL36M64LUOpxkskRc02qWmnCOaIRaDFHghDVNR0atpV9B7bYl60cQR afrktHhyMA+D34XJ3TGNPesHvgwo9txeu6iA0nUjFdps0Mz7nbuF/r51EnhPxguk 1xGN+pZuX2NchgRh4rFFdoIC/ypnWaFDjUkZm3lLQyQubN4qHfRVos24Htdg7YYM qtg6gOdvuyggFH7YCDH9j78cQ6vwjOUdFqKQJ3GTiOTCPPU+A2FzclLXF6Gb+L2B PWlFbJnhV/ywcQEQVm4NDMFZQyhR0J+7zYgAo6IQ5BjeMRa4vP0fHDGYj1l5Q34j QtmYe9dH2yhR41Y06W0hTbk5u2frq1EYE0t65imN1AN/Q2+QNZJDs078gTT3KZUN R7nahm7K3vwmNjooXZ2KkSxELyEeQxyqyP8Ppn8IDDMxqZ6Sq71YeMlhTphesOj2 +kxYhkpzVz5NdlwIFtWEtMbGla8DPNKg1iy7ml6yxF1qAaWouVI= =t8nq -----END PGP SIGNATURE----- --Sig_/O2ZEDs6LxeKw3j/hS7_9bF2-- From nobody Sat Feb 7 04:09:24 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1680458301; cv=none; d=zohomail.com; s=zohoarc; b=biD5bzXxGyCtqIIIkViaWn1GmYEwhBgSv8ovZKWlAb5m4JLOsBxlEmAuwj23Wz2Fwr0SXnaWqO3b2zOPCVkhCgxoUInLSqiZeU9aQvdRz3n9V4a1jpjKpkvDiA0l/2O1L5nTMv2f4l8rAnUcaaQODq9CODXmnd9KeguaD2xHZ5E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680458301; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=6uNQlJpFGqQmjlQYz++4xfo4zS0sa0WKCa3cmj9rmlc=; b=ZLgBRxXLLu32f+Ofx5/1HnfaXd6sOFNmgevwK427dOd3JDs+sbGeCEL5GBERzfUZkhby3LPVuNqnBz8o0WFiei55rJ+InYWMV3M3HQ6SqGG5W++ZDUpGmorSSJfA6XFSXgnUbBMXbfBaNbRRcnU4TQZL+15Wy4qBE/UcQg6uAn0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1680458301158209.66810099510337; Sun, 2 Apr 2023 10:58:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pj1wo-00071e-81; Sun, 02 Apr 2023 13:56:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wm-0006wK-8Y for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:56 -0400 Received: from mout.web.de ([217.72.192.78]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj1wk-0004Cv-Ma for qemu-devel@nongnu.org; Sun, 02 Apr 2023 13:56:56 -0400 Received: from gecko.fritz.box ([82.207.254.111]) by smtp.web.de (mrweb105 [213.165.67.124]) with ESMTPSA (Nemesis) id 1M28WJ-1pgYyR2tgH-002NHv; Sun, 02 Apr 2023 19:56:50 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1680458210; i=lukasstraub2@web.de; bh=uD0yPQy46Dhm1GKDNQ2Z+mjWaN0hh4FDx8761C9QICQ=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=PU22aoKWcrvyWyuWPebtjdgie0VjsDxTbqdSi1jrHbef0oqdxRXJ73ojtZPWYG8/B uglmDPOb9tM9Zp/sep5KrdioOPbddBZxT5AQkHQInfcSiiMCbOqgxhEY4tQm4mS0dK v3iEM6SlL85dHqg/ZeTFdER5PWgaD6hysgskerYCgL/3SSWMWA/k3z7+ZHDDrz5Rmv pezdkbv9thf8BAfOuJ20Zhw9PGOFhHaVnP+DOoREaAbLvBcS70sNMvmJyVAen3KtW4 HIV8oL6fCp7hqI4N++QLscW1bRTPcJe5YsQ4nBQgkyEjY4TuO9x9GRSFOWbI1Bsjza lco1PKYcxL8VA== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Sun, 2 Apr 2023 17:56:49 +0000 From: Lukas Straub To: qemu-devel Cc: "Dr. David Alan Gilbert" , Juan Quintela , Peter Xu Subject: [PATCH 14/14] migration: Initialize and cleanup decompression in migration.c Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/JfDtzNv5ymNQMg7=xZdCJVM"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:mDmYvNswxKOqH0dcZX//2ZFAwptpKBTmBsyp0L1gJ9m1pmDd7EP e92Zcf7wS3ZpCiEHVa/Syvamq+5ZcZQJl990n4/vWx1qWKWIHQb9a05Xbo9uOHDM3GfZl53 gGmlzEeJ0ypyTMGg7JRUON0dyf7QwWStryAHOkLw5joG9YFle937yPKuJDBj6AgyYTURG7S bgbBBNKUvqvZxfz2xNVhA== UI-OutboundReport: notjunk:1;M01:P0:RYlcS/pKWSM=;GpBwB0pe33Lk0NCOaO9mimXwSXg dDHqLKlDPFpoGG5WATc6DnoZdYDWSjAbUNlATXQBTBFoJDhEbdrxKv1IR0UIOjdMJXScqCpif nXp2Tc8/FGsQu48ce2z8+b+Me5n2pi19bIROJ8s4wHU7HhnAi1BG6wURqIh8txkygY6L6ePkT ZrQmywrXSOs1Nn2jfDF27LHapRdUrkwk5z5ot1B6n/9gSJa8fyAymsUt56jGZkUA9xMKWkGnS VIjdc+I3neZjzsKjMYFCr3IQ9+o5L5s+WKWeWH2FAShRKaEKyese6KZd9c9Dt9jKc6oi5E0CW vLM2S0ojWIa+HHhcz4iH1UZrKHVictKb0eVXP4QEAMyaSm66dSKk3TnPTosqyD5nd7lylr3G4 lCc1Zi5nLtic1+OkN+LLu2ZblHzQDKc9cbaV5jcS0ZIxKk3TY0rJtJhmggN2jeSUoKgHV8r3e NBPn43iimlXP6ulwFTWxR0t6g2XZlMQ3XwdKR/NPaewMYBrkx9I/SynlUQ4L8maKPhSjIdzd8 mpT85C+gg6fKCMjusQv6Yti0ZS/yeiXKmjY6orhtoTXSpeujgR8+6YCTB2nsMv1qIg844OhPo K0yP2baR/5BJYpwRNqqXc5AGvIC6M0tR09dxVRsPiYm5pbwPgmGlRGWQiKVEQwMxRyZYe2vQk Rlxs8EvnuuJqIHpDVRsuoDW7Qx+RdVJ60piDCwXmypjrgyTsVe+00F+yUS9/s6Gg49szvzAWe vENIsIqUtX22jrrh9PjzKxfL6DgGIIE3PmySEcj/8AFbquI/u5qpnCFmZ9Xp6isrBF69OOzN5 AVhn2OYWAWHUZ1pE47mC3TkOqDHKWYSgoZVSaaKps1B+r/lFLHg4HI8kqbGYuSlpnfNH5l3Vc LelF4k7LcI+cayjXkc2+8pQCoKoFY7zEcyQXppwTTqOarAIYcSufpBN4+fOaTis7Vd4Tj7LIl 1iuQZGUUpQFa0N51PJ+fSI8CsfM= Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=217.72.192.78; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1680458302860100003 --Sig_/JfDtzNv5ymNQMg7=xZdCJVM Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This fixes compress with colo. Signed-off-by: Lukas Straub --- migration/migration.c | 9 +++++++++ migration/ram.c | 5 ----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index ae2025d9d8..cbdc10b840 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -26,6 +26,7 @@ #include "sysemu/cpu-throttle.h" #include "rdma.h" #include "ram.h" +#include "ram-compress.h" #include "migration/global_state.h" #include "migration/misc.h" #include "migration.h" @@ -316,6 +317,7 @@ void migration_incoming_state_destroy(void) struct MigrationIncomingState *mis =3D migration_incoming_get_current(= ); multifd_load_cleanup(); + compress_threads_load_cleanup(); if (mis->to_src_file) { /* Tell source that we are done */ @@ -598,6 +600,12 @@ process_incoming_migration_co(void *opaque) Error *local_err =3D NULL; assert(mis->from_src_file); + + if (compress_threads_load_setup(mis->from_src_file)) { + error_report("Failed to setup decompress threads"); + goto fail; + } + mis->migration_incoming_co =3D qemu_coroutine_self(); mis->largest_page_size =3D qemu_ram_pagesize_largest(); postcopy_state_set(POSTCOPY_INCOMING_NONE); @@ -663,6 +671,7 @@ fail: qemu_fclose(mis->from_src_file); multifd_load_cleanup(); + compress_threads_load_cleanup(); exit(EXIT_FAILURE); } diff --git a/migration/ram.c b/migration/ram.c index 9072d70f7c..e9a295fab9 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -3559,10 +3559,6 @@ void colo_release_ram_cache(void) */ static int ram_load_setup(QEMUFile *f, void *opaque) { - if (compress_threads_load_setup(f)) { - return -1; - } - xbzrle_load_setup(); ramblock_recv_map_init(); @@ -3578,7 +3574,6 @@ static int ram_load_cleanup(void *opaque) } xbzrle_load_cleanup(); - compress_threads_load_cleanup(); RAMBLOCK_FOREACH_NOT_IGNORED(rb) { g_free(rb->receivedmap); -- 2.30.2 --Sig_/JfDtzNv5ymNQMg7=xZdCJVM Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmQpweEACgkQNasLKJxd sljYjA//SvJmFjTM68tgq/FGvGx/byYqgJILJjp3SPyCf6d5ah1C7cLHMpck2Cvo 8iZEwEQHMZvU/CcimsjsYtyCQfOL/esSKEbyKuEN3WFobWN4SPHq5SXlZHFEPeiM 2/wZiakuOza19uOQGSXzMytsX5olSNYeSlyeWdJweceKiQpz+Wzjqiosrgvff3V3 TgA7MHK/8BPQSYj6Go0/MfXpDvSTKU/iTbZqb99Kissfpveue+Yrl54SMltAoAga rwqwoKI/F1a+SujZiT45iQSDxnEI0hLr1SPEA0XsfgLW/7kiN//3Afk3bZzvQDDO kD/ZRLRpQiqoVe8FHRwhGCp6lERPdUv46Z+Cx2vpiGg2qo+MQ8AtzsrTcfYgHE0b wgkrtf8lQb4ZhgEgJ18XU0Hfc2ZpJ2rUYf0oJKy+I3QF7lXfn9n3I3Eyp0mnBGf0 NS5pHqM6JKnYsv6l3gUQvk1e8jFJ9KYqn1iA/aSMvBZ2Jzf9jdy0pmzyMRfzkL23 mTGnogxwlVgYRSCeMzyMvzKmxgNKPRF0LK2mPW+WHpnjoMk1XdMkjB0PNMB/+GXN rZtvIF9I/KS0mwFB8Wnfe2N4TCoLqf/yrjEiUkVShRUy9TeBolv4eK+vj9jhkXBC saZjKoE2vs2MATj7mJephw8hu7207AegolWotBQQ1O4GKdbMbEQ= =OR0H -----END PGP SIGNATURE----- --Sig_/JfDtzNv5ymNQMg7=xZdCJVM--