From nobody Thu May 2 01:30:08 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 149865473932997.4749161649579; Wed, 28 Jun 2017 05:58:59 -0700 (PDT) Received: from localhost ([::1]:33233 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQCYb-0003Ws-Vq for importer@patchew.org; Wed, 28 Jun 2017 08:58:58 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48310) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQCSQ-0005kM-5g for qemu-devel@nongnu.org; Wed, 28 Jun 2017 08:52:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dQCSM-0002xq-6I for qemu-devel@nongnu.org; Wed, 28 Jun 2017 08:52:34 -0400 Received: from mailout1.w1.samsung.com ([210.118.77.11]:15478) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dQCSL-0002xJ-Uj for qemu-devel@nongnu.org; Wed, 28 Jun 2017 08:52:30 -0400 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0OS900GBTD3E1H30@mailout1.w1.samsung.com> for qemu-devel@nongnu.org; Wed, 28 Jun 2017 13:52:26 +0100 (BST) Received: from eusmges4.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20170628125225eucas1p27ac9e1dc5083700d8606c05272aca518~MSi-uya-h0206002060eucas1p21; Wed, 28 Jun 2017 12:52:25 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges4.samsung.com (EUCPMTA) with SMTP id B7.92.04729.986A3595; Wed, 28 Jun 2017 13:52:25 +0100 (BST) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20170628125224eucas1p20961fd8d4b71906d84446cd50d59cfb8~MSi_5v5Bt1019910199eucas1p2w; Wed, 28 Jun 2017 12:52:24 +0000 (GMT) Received: from eusync2.samsung.com ( [203.254.199.212]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 54.1D.20206.886A3595; Wed, 28 Jun 2017 13:52:24 +0100 (BST) Received: from minion.rnd.samsung.ru ([106.109.131.134]) by eusync2.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OS900J3VD2QR510@eusync2.samsung.com>; Wed, 28 Jun 2017 13:52:24 +0100 (BST) X-AuditID: cbfec7f4-f79806d000001279-69-5953a6898631 From: Alexey Perevalov To: qemu-devel@nongnu.org Date: Wed, 28 Jun 2017 08:49:30 -0400 Message-id: <1498654172-26570-2-git-send-email-a.perevalov@samsung.com> X-Mailer: git-send-email 1.8.3.1 In-reply-to: <1498654172-26570-1-git-send-email-a.perevalov@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrDIsWRmVeSWpSXmKPExsWy7djP87qdy4IjDVaslLWYe/c8i0Xvtnvs Flfaf7JbbNn/jd3ieO8OFos7W/qYHNg8nlzbzOTxft9VNo++LasYA5ijuGxSUnMyy1KL9O0S uDI+fN3KXDBBoaKxawtzA2O/WBcjJ4eEgIlEe9NeNghbTOLCvfVANheHkMBSRonbv1dBOZ8Z JTbd+sAO07Hu+ixmiMQyRokVJ+9AVTUwSdw9+x8ow8HBJmAgse+eLUiDiICkxO+u02ANzAKt jBLtfY/AaoQFXCT2vtADqWERUJXY92I9M4jNK+Au0db8jRlimYLElIfvwWxOAQ+JwwsWsILM kRC4zSYxfXIrK8gcCQFZiU0HoOpdJBY2f2eCsIUlXh3fAnW0jMTlyd0sEL3tjBLdOzuhBk1g lDgz/S9Ulb3EqZtXwbqZBfgkJm2bzgyxgFeio00IosRDYvKRm1ALHCXa/x9igXh+NqPE9Y09 7BMYZRYwMqxiFEktLc5NTy020StOzC0uzUvXS87P3cQIjNPT/45/2cG4+JjVIUYBDkYlHt4V IsGRQqyJZcWVuYcYJTiYlUR4WxcChXhTEiurUovy44tKc1KLDzFKc7AoifNynboWISSQnliS mp2aWpBaBJNl4uCUamBkkefxMGFzmvp/lkD9n9f3q9bwHCgQ7fRbOik72vPRhI0egb7eb76t PHFo9Y8NR9a0CrJl7hdadiuvvyw5Na1fZO9q80aD2I6H0wJt6nmnxazpOnU5KsMw5P8P6wvb u45I+t0VT72mtFN/9e3eaSv2VV7eeifXb2ZLz/m1DA2Vejd/73fkebtFiaU4I9FQi7moOBEA U1cILs8CAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrFLMWRmVeSWpSXmKPExsVy+t/xK7ody4IjDTbuV7GYe/c8i0Xvtnvs Flfaf7JbbNn/jd3ieO8OFos7W/qYHNg8nlzbzOTxft9VNo++LasYA5ij3GwyUhNTUosUUvOS 81My89JtlUJD3HQtlBTyEnNTbZUidH1DgpQUyhJzSoE8IwM04OAc4B6spG+X4Jbx4etW5oIJ ChWNXVuYGxj7xboYOTkkBEwk1l2fxQxhi0lcuLeerYuRi0NIYAmjxKOTb1khnCYmiTcHjwJV cXCwCRhI7LtnC9IgIiAp8bvrNDNIDbNAK6PEk8ZZ7CA1wgIuEntf6IHUsAioSux7sR5sAa+A u0Rb8zeoZQoSUx6+B7M5BTwkDi9YwApiCwHVPN9zi3ECI+8CRoZVjCKppcW56bnFRnrFibnF pXnpesn5uZsYgeG67djPLTsYu94FH2IU4GBU4uFdIRIcKcSaWFZcmXuIUYKDWUmEt3UhUIg3 JbGyKrUoP76oNCe1+BCjKdBRE5mlRJPzgbGUVxJvaGJobmloZGxhYW5kpCTOO/XDlXAhgfTE ktTs1NSC1CKYPiYOTqkGRsNby7ij2BwOaHQGP/oSahT2epVStFzgVPPVDAft9LQfTjLWXCq7 eem7WukLd5mSqkykmXNyN1ysuZjuKTBtj8f15TfPKizzefJR33RzMdMv52Aj/x3n6lnV7rA2 P5d4YvEhiM37r47y6tr9qssym5gtDP9viU39oPJrpvqBt3/9lxSF3RGZpMRSnJFoqMVcVJwI AAKB3UltAgAA X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170628125224eucas1p20961fd8d4b71906d84446cd50d59cfb8 X-Msg-Generator: CA X-Sender-IP: 182.198.249.180 X-Local-Sender: =?UTF-8?B?QWxleGV5IFBlcmV2YWxvdhtTUlItVmlydHVhbGl6YXRpb24g?= =?UTF-8?B?TGFiG+yCvOyEseyghOyekBtTZW5pb3IgRW5naW5lZXI=?= X-Global-Sender: =?UTF-8?B?QWxleGV5IFBlcmV2YWxvdhtTUlItVmlydHVhbGl6YXRpb24g?= =?UTF-8?B?TGFiG1NhbXN1bmcgRWxlY3Ryb25pY3MbU2VuaW9yIEVuZ2luZWVy?= X-Sender-Code: =?UTF-8?B?QzEwG0NJU0hRG0MxMEdEMDFHRDAxMDE1NA==?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20170628125224eucas1p20961fd8d4b71906d84446cd50d59cfb8 X-RootMTR: 20170628125224eucas1p20961fd8d4b71906d84446cd50d59cfb8 References: <1498654172-26570-1-git-send-email-a.perevalov@samsung.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 210.118.77.11 Subject: [Qemu-devel] [PATCH v6 1/3] migration: postcopy_place_page factoring out X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: i.maximets@samsung.com, dgilbert@redhat.com, Alexey Perevalov , peterx@redhat.com, quintela@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Need to mark copied pages as closer as possible to the place where it tracks down. That will be necessary in futher patch. Reviewed-by: Dr. David Alan Gilbert Reviewed-by: Peter Xu Reviewed-by: Juan Quintela Signed-off-by: Alexey Perevalov --- migration/postcopy-ram.c | 13 +++++++------ migration/postcopy-ram.h | 4 ++-- migration/ram.c | 4 ++-- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c index c8c4500..dae41b5 100644 --- a/migration/postcopy-ram.c +++ b/migration/postcopy-ram.c @@ -566,9 +566,10 @@ int postcopy_ram_enable_notify(MigrationIncomingState = *mis) * returns 0 on success */ int postcopy_place_page(MigrationIncomingState *mis, void *host, void *fro= m, - size_t pagesize) + RAMBlock *rb) { struct uffdio_copy copy_struct; + size_t pagesize =3D qemu_ram_pagesize(rb); =20 copy_struct.dst =3D (uint64_t)(uintptr_t)host; copy_struct.src =3D (uint64_t)(uintptr_t)from; @@ -597,11 +598,11 @@ int postcopy_place_page(MigrationIncomingState *mis, = void *host, void *from, * returns 0 on success */ int postcopy_place_page_zero(MigrationIncomingState *mis, void *host, - size_t pagesize) + RAMBlock *rb) { trace_postcopy_place_page_zero(host); =20 - if (pagesize =3D=3D getpagesize()) { + if (qemu_ram_pagesize(rb) =3D=3D getpagesize()) { struct uffdio_zeropage zero_struct; zero_struct.range.start =3D (uint64_t)(uintptr_t)host; zero_struct.range.len =3D getpagesize(); @@ -631,7 +632,7 @@ int postcopy_place_page_zero(MigrationIncomingState *mi= s, void *host, memset(mis->postcopy_tmp_zero_page, '\0', mis->largest_page_si= ze); } return postcopy_place_page(mis, host, mis->postcopy_tmp_zero_page, - pagesize); + rb); } =20 return 0; @@ -694,14 +695,14 @@ int postcopy_ram_enable_notify(MigrationIncomingState= *mis) } =20 int postcopy_place_page(MigrationIncomingState *mis, void *host, void *fro= m, - size_t pagesize) + RAMBlock *rb) { assert(0); return -1; } =20 int postcopy_place_page_zero(MigrationIncomingState *mis, void *host, - size_t pagesize) + RAMBlock *rb) { assert(0); return -1; diff --git a/migration/postcopy-ram.h b/migration/postcopy-ram.h index 52d51e8..78a3591 100644 --- a/migration/postcopy-ram.h +++ b/migration/postcopy-ram.h @@ -72,14 +72,14 @@ void postcopy_discard_send_finish(MigrationState *ms, * returns 0 on success */ int postcopy_place_page(MigrationIncomingState *mis, void *host, void *fro= m, - size_t pagesize); + RAMBlock *rb); =20 /* * Place a zero page at (host) atomically * returns 0 on success */ int postcopy_place_page_zero(MigrationIncomingState *mis, void *host, - size_t pagesize); + RAMBlock *rb); =20 /* The current postcopy state is read/set by postcopy_state_get/set * which update it atomically. diff --git a/migration/ram.c b/migration/ram.c index 8dbdfdb..f50479d 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -2465,10 +2465,10 @@ static int ram_load_postcopy(QEMUFile *f) =20 if (all_zero) { ret =3D postcopy_place_page_zero(mis, place_dest, - block->page_size); + block); } else { ret =3D postcopy_place_page(mis, place_dest, - place_source, block->page_size); + place_source, block); } } if (!ret) { --=20 1.8.3.1 From nobody Thu May 2 01:30:08 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1498654481838355.6294998254763; Wed, 28 Jun 2017 05:54:41 -0700 (PDT) Received: from localhost ([::1]:33210 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQCUQ-0007SG-K4 for importer@patchew.org; Wed, 28 Jun 2017 08:54:38 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48358) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQCSV-0005or-0X for qemu-devel@nongnu.org; Wed, 28 Jun 2017 08:52:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dQCSQ-00031s-BO for qemu-devel@nongnu.org; Wed, 28 Jun 2017 08:52:39 -0400 Received: from mailout3.w1.samsung.com ([210.118.77.13]:21553) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dQCSQ-00031C-3b for qemu-devel@nongnu.org; Wed, 28 Jun 2017 08:52:34 -0400 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout3.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0OS900EAXD3KI100@mailout3.w1.samsung.com> for qemu-devel@nongnu.org; Wed, 28 Jun 2017 13:52:32 +0100 (BST) Received: from eusmges3.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20170628125231eucas1p2fa0bbe241b92738472fe794ff5bb1542~MSjFhu-S71015310153eucas1p2w; Wed, 28 Jun 2017 12:52:31 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3.samsung.com (EUCPMTA) with SMTP id 09.AC.17464.F86A3595; Wed, 28 Jun 2017 13:52:31 +0100 (BST) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20170628125231eucas1p1bf1ee6e6bb79cf84b82e97cbf26a2dc4~MSjE53euJ2523325233eucas1p1_; Wed, 28 Jun 2017 12:52:31 +0000 (GMT) Received: from eusync2.samsung.com ( [203.254.199.212]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 9E.13.17452.F86A3595; Wed, 28 Jun 2017 13:52:31 +0100 (BST) Received: from minion.rnd.samsung.ru ([106.109.131.134]) by eusync2.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OS900J3VD2QR510@eusync2.samsung.com>; Wed, 28 Jun 2017 13:52:31 +0100 (BST) X-AuditID: cbfec7f2-f797e6d000004438-3c-5953a68f8dcc From: Alexey Perevalov To: qemu-devel@nongnu.org Date: Wed, 28 Jun 2017 08:49:31 -0400 Message-id: <1498654172-26570-3-git-send-email-a.perevalov@samsung.com> X-Mailer: git-send-email 1.8.3.1 In-reply-to: <1498654172-26570-1-git-send-email-a.perevalov@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrNIsWRmVeSWpSXmKPExsWy7djP87r9y4IjDV6817KYe/c8i0Xvtnvs Flfaf7JbbNn/jd3ieO8OFos7W/qYHNg8nlzbzOTxft9VNo++LasYA5ijuGxSUnMyy1KL9O0S uDL+3y4tuCtZ0briGHMD41PhLkZODgkBE4lnbz8zQdhiEhfurWfrYuTiEBJYyihxcPI/Jgjn M6PEyVVL2WE6Xrz+zwZiCwksY5Q49DYKoqiBSeLelBlACQ4ONgEDiX33bEFqRAQkJX53nWYG qWEWaGWUaO97xAySEBZwl7hwfxkriM0ioCrxY+ERFhCbFyi+Z8NOVohlChJTHr4Hq+cU8JA4 vGABK8ggCYHbbBLPL9wDWyYhICux6QAzRL2LxKf+W4wQtrDEq+NboI6WkejsOMgE0dvOKNG9 sxNq0ARGiTPT/0JV2UucunkVHBjMAnwSk7ZNZ4ZYwCvR0SYEUeIh0fXxJtRxjhL9p48zQ3w/ m1Fi8ZrnjBMYZRYwMqxiFEktLc5NTy021itOzC0uzUvXS87P3cQIjNLT/45/2sH49YTVIUYB DkYlHt4AoeBIIdbEsuLK3EOMEhzMSiK8rQuBQrwpiZVVqUX58UWlOanFhxilOViUxHm5Tl2L EBJITyxJzU5NLUgtgskycXBKNTBul5vC7aImaletfq14R86HCtuPBvdXuLf/zXnZ3J1mMt+t YIdTUHrhN7ULnKKXlvQbqaw6vmP5BZ8b6jfEC04KWM2/kfVpmgFrQIZ0wNsnk1+8ivdK+rti lYNCQLns/8VBn5s8cv6YGm0JSVu28jRfzZJ7OcdEuL9sy79VlGZ/Zv3dWqXyKk0lluKMREMt 5qLiRADd837IzgIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrFLMWRmVeSWpSXmKPExsVy+t/xK7r9y4IjDS6sEbCYe/c8i0Xvtnvs Flfaf7JbbNn/jd3ieO8OFos7W/qYHNg8nlzbzOTxft9VNo++LasYA5ij3GwyUhNTUosUUvOS 81My89JtlUJD3HQtlBTyEnNTbZUidH1DgpQUyhJzSoE8IwM04OAc4B6spG+X4Jbx/3ZpwV3J itYVx5gbGJ8KdzFyckgImEi8eP2fDcIWk7hwbz2QzcUhJLCEUWLNxGVMEE4Tk0T//0NADgcH m4CBxL57tiANIgKSEr+7TjOD1DALtDJKPGmcxQ6SEBZwl7hwfxkriM0ioCrxY+ERFhCbFyi+ Z8NOVohtChJTHr5nBrE5BTwkDi9YABYXAqp5vucW4wRG3gWMDKsYRVJLi3PTc4sN9YoTc4tL 89L1kvNzNzECw3XbsZ+bdzBe2hh8iFGAg1GJh3eFSHCkEGtiWXFl7iFGCQ5mJRHe1oVAId6U xMqq1KL8+KLSnNTiQ4ymQEdNZJYSTc4HxlJeSbyhiaG5paGRsYWFuZGRkjhvyYcr4UIC6Ykl qdmpqQWpRTB9TBycUg2Mfl3pbP0ad24tFuUv33g98u15jZbCrhNJISur514w/+xex9HINy/8 dM2mu5JMcqEbbgrrm3TOTxB84nDq1Z2r69Omzq3IXH9tv+j2w9dV/royJmZPFSi52Ckcatne ePTUk8yGe3b6Siu/KvOybGPpfnD3z771y9VKBE//+dLuJXHw58dOsTUWSizFGYmGWsxFxYkA /0JziW0CAAA= X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170628125231eucas1p1bf1ee6e6bb79cf84b82e97cbf26a2dc4 X-Msg-Generator: CA X-Sender-IP: 182.198.249.179 X-Local-Sender: =?UTF-8?B?QWxleGV5IFBlcmV2YWxvdhtTUlItVmlydHVhbGl6YXRpb24g?= =?UTF-8?B?TGFiG+yCvOyEseyghOyekBtTZW5pb3IgRW5naW5lZXI=?= X-Global-Sender: =?UTF-8?B?QWxleGV5IFBlcmV2YWxvdhtTUlItVmlydHVhbGl6YXRpb24g?= =?UTF-8?B?TGFiG1NhbXN1bmcgRWxlY3Ryb25pY3MbU2VuaW9yIEVuZ2luZWVy?= X-Sender-Code: =?UTF-8?B?QzEwG0NJU0hRG0MxMEdEMDFHRDAxMDE1NA==?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20170628125231eucas1p1bf1ee6e6bb79cf84b82e97cbf26a2dc4 X-RootMTR: 20170628125231eucas1p1bf1ee6e6bb79cf84b82e97cbf26a2dc4 References: <1498654172-26570-1-git-send-email-a.perevalov@samsung.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 210.118.77.13 Subject: [Qemu-devel] [PATCH v6 2/3] migration: introduce qemu_ufd_copy_ioctl helper X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: i.maximets@samsung.com, dgilbert@redhat.com, Alexey Perevalov , peterx@redhat.com, quintela@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Just for placing auxilary operations inside helper, auxilary operations like: track received pages, notify about copying operation in futher patches. Reviewed-by: Juan Quintela Reviewed-by: Dr. David Alan Gilbert Reviewed-by: Peter Xu Signed-off-by: Alexey Perevalov --- migration/postcopy-ram.c | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c index dae41b5..293db97 100644 --- a/migration/postcopy-ram.c +++ b/migration/postcopy-ram.c @@ -561,6 +561,25 @@ int postcopy_ram_enable_notify(MigrationIncomingState = *mis) return 0; } =20 +static int qemu_ufd_copy_ioctl(int userfault_fd, void *host_addr, + void *from_addr, uint64_t pagesize) +{ + if (from_addr) { + struct uffdio_copy copy_struct; + copy_struct.dst =3D (uint64_t)(uintptr_t)host_addr; + copy_struct.src =3D (uint64_t)(uintptr_t)from_addr; + copy_struct.len =3D pagesize; + copy_struct.mode =3D 0; + return ioctl(userfault_fd, UFFDIO_COPY, ©_struct); + } else { + struct uffdio_zeropage zero_struct; + zero_struct.range.start =3D (uint64_t)(uintptr_t)host_addr; + zero_struct.range.len =3D pagesize; + zero_struct.mode =3D 0; + return ioctl(userfault_fd, UFFDIO_ZEROPAGE, &zero_struct); + } +} + /* * Place a host page (from) at (host) atomically * returns 0 on success @@ -568,20 +587,14 @@ int postcopy_ram_enable_notify(MigrationIncomingState= *mis) int postcopy_place_page(MigrationIncomingState *mis, void *host, void *fro= m, RAMBlock *rb) { - struct uffdio_copy copy_struct; size_t pagesize =3D qemu_ram_pagesize(rb); =20 - copy_struct.dst =3D (uint64_t)(uintptr_t)host; - copy_struct.src =3D (uint64_t)(uintptr_t)from; - copy_struct.len =3D pagesize; - copy_struct.mode =3D 0; - /* copy also acks to the kernel waking the stalled thread up * TODO: We can inhibit that ack and only do it if it was requested * which would be slightly cheaper, but we'd have to be careful * of the order of updating our page state. */ - if (ioctl(mis->userfault_fd, UFFDIO_COPY, ©_struct)) { + if (qemu_ufd_copy_ioctl(mis->userfault_fd, host, from, pagesize)) { int e =3D errno; error_report("%s: %s copy host: %p from: %p (size: %zd)", __func__, strerror(e), host, from, pagesize); @@ -603,12 +616,7 @@ int postcopy_place_page_zero(MigrationIncomingState *m= is, void *host, trace_postcopy_place_page_zero(host); =20 if (qemu_ram_pagesize(rb) =3D=3D getpagesize()) { - struct uffdio_zeropage zero_struct; - zero_struct.range.start =3D (uint64_t)(uintptr_t)host; - zero_struct.range.len =3D getpagesize(); - zero_struct.mode =3D 0; - - if (ioctl(mis->userfault_fd, UFFDIO_ZEROPAGE, &zero_struct)) { + if (qemu_ufd_copy_ioctl(mis->userfault_fd, host, NULL, getpagesize= ())) { int e =3D errno; error_report("%s: %s zero host: %p", __func__, strerror(e), host); --=20 1.8.3.1 From nobody Thu May 2 01:30:08 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1498655004082558.8253366701575; Wed, 28 Jun 2017 06:03:24 -0700 (PDT) Received: from localhost ([::1]:33269 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQCcr-0007HP-PB for importer@patchew.org; Wed, 28 Jun 2017 09:03:21 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48367) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQCSY-0005sT-H8 for qemu-devel@nongnu.org; Wed, 28 Jun 2017 08:52:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dQCST-00033C-Kl for qemu-devel@nongnu.org; Wed, 28 Jun 2017 08:52:42 -0400 Received: from mailout2.w1.samsung.com ([210.118.77.12]:33719) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dQCST-00032b-Cc for qemu-devel@nongnu.org; Wed, 28 Jun 2017 08:52:37 -0400 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0OS900F9CD3LTK30@mailout2.w1.samsung.com> for qemu-devel@nongnu.org; Wed, 28 Jun 2017 13:52:33 +0100 (BST) Received: from eusmges4.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20170628125232eucas1p2e7430ff9efac491dbd0c6139ba26d29c~MSjGdSmUl1018210182eucas1p2p; Wed, 28 Jun 2017 12:52:32 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges4.samsung.com (EUCPMTA) with SMTP id 78.92.04729.096A3595; Wed, 28 Jun 2017 13:52:32 +0100 (BST) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20170628125232eucas1p1af5a7b0d734c7af25a20981e25812ee2~MSjFqYtIz2933029330eucas1p1Z; Wed, 28 Jun 2017 12:52:32 +0000 (GMT) Received: from eusync2.samsung.com ( [203.254.199.212]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 7A.1D.20206.F86A3595; Wed, 28 Jun 2017 13:52:31 +0100 (BST) Received: from minion.rnd.samsung.ru ([106.109.131.134]) by eusync2.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OS900J3VD2QR510@eusync2.samsung.com>; Wed, 28 Jun 2017 13:52:31 +0100 (BST) X-AuditID: cbfec7f4-f79806d000001279-73-5953a690210f From: Alexey Perevalov To: qemu-devel@nongnu.org Date: Wed, 28 Jun 2017 08:49:32 -0400 Message-id: <1498654172-26570-4-git-send-email-a.perevalov@samsung.com> X-Mailer: git-send-email 1.8.3.1 In-reply-to: <1498654172-26570-1-git-send-email-a.perevalov@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrLIsWRmVeSWpSXmKPExsWy7djP87oTlgVHGqx4rGkx9+55FovebffY La60/2S32LL/G7vF8d4dLBZ3tvQxObB5PLm2mcnj/b6rbB59W1YxBjBHcdmkpOZklqUW6dsl cGXsae1gL1jnWLG5bTt7A+NLwy5GTg4JAROJExe2M0LYYhIX7q1n62Lk4hASWMoo8fPhAWYI 5zOjRP+cI+wwHZdnbWCESCxjlHje2csE4TQwSdybMgOon4ODTcBAYt89W5AGEQFJid9dp8Em MQu0Mkq09z1iBkkIC9hLnJ7/mhXEZhFQlVjaMgUszivgLrFu8leomxQkpjx8DxbnFPCQOLxg ASvIIAmB+2wSfVveMYEskxCQldh0gBmi3kXi+5NONghbWOLV8S1QV8tIXJ7czQLR284o0b2z E2rQBEaJM9P/QlXZS5y6eZUJxGYW4JOYtG06M8QCXomONiGIEg+JSZtesUDYjhJPHz+HBths RokFTyexTmCUWcDIsIpRJLW0ODc9tdhErzgxt7g0L10vOT93EyMwUk//O/5lB+PiY1aHGAU4 GJV4eFeIBEcKsSaWFVfmHmKU4GBWEuFtXQgU4k1JrKxKLcqPLyrNSS0+xCjNwaIkzst16lqE kEB6YklqdmpqQWoRTJaJg1OqgXHyW67o3g9B0+cE78xZseKB6H4boZqPz54Fvy+59etxd/S3 IxwR11/vz9/AOCXr7QGdTQ87UzLday6fqznOMb0y6t16Xp7rZrot+u39L7gUnwh8Fgo+ma/+ +9S8G4sK39xKfCLPME0+QLpElF1XkbtkaceLJmmuHXH1PmeYY/YVvQu/Pa9Xm0eJpTgj0VCL uag4EQCO6E5E0AIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrNLMWRmVeSWpSXmKPExsVy+t/xK7r9y4IjDX5sMbGYe/c8i0Xvtnvs Flfaf7JbbNn/jd3ieO8OFos7W/qYHNg8nlzbzOTxft9VNo++LasYA5ij3GwyUhNTUosUUvOS 81My89JtlUJD3HQtlBTyEnNTbZUidH1DgpQUyhJzSoE8IwM04OAc4B6spG+X4Jaxp7WDvWCd Y8Xmtu3sDYwvDbsYOTkkBEwkLs/awAhhi0lcuLeerYuRi0NIYAmjxI8rixkhnCYmif7/h5i6 GDk42AQMJPbdswVpEBGQlPjddZoZpIZZoJVR4knjLHaQhLCAvcTp+a9ZQWwWAVWJpS1TmEFs XgF3iXWTv0JtU5CY8vA9WJxTwEPi8IIFYPVCQDXP99xinMDIu4CRYRWjSGppcW56brGRXnFi bnFpXrpecn7uJkZgwG479nPLDsaud8GHGAU4GJV4eFeIBEcKsSaWFVfmHmKU4GBWEuFtXQgU 4k1JrKxKLcqPLyrNSS0+xGgKdNREZinR5HxgNOWVxBuaGJpbGhoZW1iYGxkpifNO/XAlXEgg PbEkNTs1tSC1CKaPiYNTqoFxKmuENN8T5uCNnl38kg8fPP3Wn2B41vOc2YYCbmXWGSbW8gXq Zz+dnxbNNSHz3rRreqGTF7cFFaofSDvJqSg4a1VZ/Vpe1bxt4fbV612MslOtt8h11a3VKnmy t8CSJ7HxyaK1vy812XIfYU7SZldRVTvS9WFlWcXZE79iveQYvgce4p/6YLUSS3FGoqEWc1Fx IgDGAR/PbgIAAA== X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170628125232eucas1p1af5a7b0d734c7af25a20981e25812ee2 X-Msg-Generator: CA X-Sender-IP: 182.198.249.180 X-Local-Sender: =?UTF-8?B?QWxleGV5IFBlcmV2YWxvdhtTUlItVmlydHVhbGl6YXRpb24g?= =?UTF-8?B?TGFiG+yCvOyEseyghOyekBtTZW5pb3IgRW5naW5lZXI=?= X-Global-Sender: =?UTF-8?B?QWxleGV5IFBlcmV2YWxvdhtTUlItVmlydHVhbGl6YXRpb24g?= =?UTF-8?B?TGFiG1NhbXN1bmcgRWxlY3Ryb25pY3MbU2VuaW9yIEVuZ2luZWVy?= X-Sender-Code: =?UTF-8?B?QzEwG0NJU0hRG0MxMEdEMDFHRDAxMDE1NA==?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20170628125232eucas1p1af5a7b0d734c7af25a20981e25812ee2 X-RootMTR: 20170628125232eucas1p1af5a7b0d734c7af25a20981e25812ee2 References: <1498654172-26570-1-git-send-email-a.perevalov@samsung.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 210.118.77.12 Subject: [Qemu-devel] [PATCH v6 3/3] migration: add bitmap for received page X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: i.maximets@samsung.com, dgilbert@redhat.com, Alexey Perevalov , peterx@redhat.com, quintela@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This patch adds ability to track down already received pages, it's necessary for calculation vCPU block time in postcopy migration feature, maybe for restore after postcopy migration failure. Also it's necessary to solve shared memory issue in postcopy livemigration. Information about received pages will be transferred to the software virtual bridge (e.g. OVS-VSWITCHD), to avoid fallocate (unmap) for already received pages. fallocate syscall is required for remmaped shared memory, due to remmaping itself blocks ioctl(UFFDIO_COPY, ioctl in this case will end with EEXIT error (struct page is exists after remmap). Bitmap is placed into RAMBlock as another postcopy/precopy related bitmaps. Signed-off-by: Alexey Perevalov --- include/exec/ram_addr.h | 10 ++++++++++ migration/migration.c | 1 + migration/postcopy-ram.c | 16 +++++++++++----- migration/ram.c | 42 +++++++++++++++++++++++++++++++++++++++--- migration/ram.h | 6 ++++++ 5 files changed, 67 insertions(+), 8 deletions(-) diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h index 140efa8..4170656 100644 --- a/include/exec/ram_addr.h +++ b/include/exec/ram_addr.h @@ -47,6 +47,8 @@ struct RAMBlock { * of the postcopy phase */ unsigned long *unsentmap; + /* bitmap of already received pages in postcopy */ + unsigned long *receivedmap; }; =20 static inline bool offset_in_ramblock(RAMBlock *b, ram_addr_t offset) @@ -60,6 +62,14 @@ static inline void *ramblock_ptr(RAMBlock *block, ram_ad= dr_t offset) return (char *)block->host + offset; } =20 +static inline unsigned long int ramblock_recv_bitmap_offset(void *host_add= r, + RAMBlock *rb) +{ + uint64_t host_addr_offset =3D + (uint64_t)(uintptr_t)(host_addr - (void *)rb->host); + return host_addr_offset >> TARGET_PAGE_BITS; +} + long qemu_getrampagesize(void); unsigned long last_ram_page(void); RAMBlock *qemu_ram_alloc_from_file(ram_addr_t size, MemoryRegion *mr, diff --git a/migration/migration.c b/migration/migration.c index 71e38bc..63ded8c 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -363,6 +363,7 @@ void migration_fd_process_incoming(QEMUFile *f) Coroutine *co =3D qemu_coroutine_create(process_incoming_migration_co,= f); =20 qemu_file_set_blocking(f, false); + ramblock_recv_map_init(); qemu_coroutine_enter(co); } =20 diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c index 293db97..f980d93 100644 --- a/migration/postcopy-ram.c +++ b/migration/postcopy-ram.c @@ -562,22 +562,27 @@ int postcopy_ram_enable_notify(MigrationIncomingState= *mis) } =20 static int qemu_ufd_copy_ioctl(int userfault_fd, void *host_addr, - void *from_addr, uint64_t pagesize) + void *from_addr, uint64_t pagesize, RAMBloc= k *rb) { + int ret; if (from_addr) { struct uffdio_copy copy_struct; copy_struct.dst =3D (uint64_t)(uintptr_t)host_addr; copy_struct.src =3D (uint64_t)(uintptr_t)from_addr; copy_struct.len =3D pagesize; copy_struct.mode =3D 0; - return ioctl(userfault_fd, UFFDIO_COPY, ©_struct); + ret =3D ioctl(userfault_fd, UFFDIO_COPY, ©_struct); } else { struct uffdio_zeropage zero_struct; zero_struct.range.start =3D (uint64_t)(uintptr_t)host_addr; zero_struct.range.len =3D pagesize; zero_struct.mode =3D 0; - return ioctl(userfault_fd, UFFDIO_ZEROPAGE, &zero_struct); + ret =3D ioctl(userfault_fd, UFFDIO_ZEROPAGE, &zero_struct); + } + if (!ret) { + ramblock_recv_bitmap_set(host_addr, rb); } + return ret; } =20 /* @@ -594,7 +599,7 @@ int postcopy_place_page(MigrationIncomingState *mis, vo= id *host, void *from, * which would be slightly cheaper, but we'd have to be careful * of the order of updating our page state. */ - if (qemu_ufd_copy_ioctl(mis->userfault_fd, host, from, pagesize)) { + if (qemu_ufd_copy_ioctl(mis->userfault_fd, host, from, pagesize, rb)) { int e =3D errno; error_report("%s: %s copy host: %p from: %p (size: %zd)", __func__, strerror(e), host, from, pagesize); @@ -616,7 +621,8 @@ int postcopy_place_page_zero(MigrationIncomingState *mi= s, void *host, trace_postcopy_place_page_zero(host); =20 if (qemu_ram_pagesize(rb) =3D=3D getpagesize()) { - if (qemu_ufd_copy_ioctl(mis->userfault_fd, host, NULL, getpagesize= ())) { + if (qemu_ufd_copy_ioctl(mis->userfault_fd, host, NULL, getpagesize= (), + rb)) { int e =3D errno; error_report("%s: %s zero host: %p", __func__, strerror(e), host); diff --git a/migration/ram.c b/migration/ram.c index f50479d..95962a0 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -151,6 +151,32 @@ out: return ret; } =20 +void ramblock_recv_map_init(void) +{ + RAMBlock *rb; + + RAMBLOCK_FOREACH(rb) { + assert(!rb->receivedmap); + rb->receivedmap =3D bitmap_new(rb->max_length >> TARGET_PAGE_BITS); + } +} + +int ramblock_recv_bitmap_test(void *host_addr, RAMBlock *rb) +{ + return test_bit(ramblock_recv_bitmap_offset(host_addr, rb), + rb->receivedmap); +} + +void ramblock_recv_bitmap_set(void *host_addr, RAMBlock *rb) +{ + set_bit_atomic(ramblock_recv_bitmap_offset(host_addr, rb), rb->receive= dmap); +} + +void ramblock_recv_bitmap_clear(void *host_addr, RAMBlock *rb) +{ + clear_bit(ramblock_recv_bitmap_offset(host_addr, rb), rb->receivedmap); +} + /* * An outstanding page request, on the source, having been received * and queued @@ -1797,6 +1823,8 @@ int ram_discard_range(const char *rbname, uint64_t st= art, size_t length) goto err; } =20 + bitmap_clear(rb->receivedmap, start >> TARGET_PAGE_BITS, + length >> TARGET_PAGE_BITS); ret =3D ram_block_discard_range(rb, start, length); =20 err: @@ -2324,8 +2352,14 @@ static int ram_load_setup(QEMUFile *f, void *opaque) =20 static int ram_load_cleanup(void *opaque) { + RAMBlock *rb; xbzrle_load_cleanup(); compress_threads_load_cleanup(); + + RAMBLOCK_FOREACH(rb) { + g_free(rb->receivedmap); + rb->receivedmap =3D NULL; + } return 0; } =20 @@ -2513,6 +2547,7 @@ static int ram_load(QEMUFile *f, void *opaque, int ve= rsion_id) ram_addr_t addr, total_ram_bytes; void *host =3D NULL; uint8_t ch; + RAMBlock *rb =3D NULL; =20 addr =3D qemu_get_be64(f); flags =3D addr & ~TARGET_PAGE_MASK; @@ -2520,15 +2555,16 @@ static int ram_load(QEMUFile *f, void *opaque, int = version_id) =20 if (flags & (RAM_SAVE_FLAG_ZERO | RAM_SAVE_FLAG_PAGE | RAM_SAVE_FLAG_COMPRESS_PAGE | RAM_SAVE_FLAG_XBZRLE)) { - RAMBlock *block =3D ram_block_from_stream(f, flags); + rb =3D ram_block_from_stream(f, flags); =20 - host =3D host_from_ram_block_offset(block, addr); + host =3D host_from_ram_block_offset(rb, addr); if (!host) { error_report("Illegal RAM offset " RAM_ADDR_FMT, addr); ret =3D -EINVAL; break; } - trace_ram_load_loop(block->idstr, (uint64_t)addr, flags, host); + ramblock_recv_bitmap_set(host, rb); + trace_ram_load_loop(rb->idstr, (uint64_t)addr, flags, host); } =20 switch (flags & ~RAM_SAVE_FLAG_CONTINUE) { diff --git a/migration/ram.h b/migration/ram.h index c081fde..98d68df 100644 --- a/migration/ram.h +++ b/migration/ram.h @@ -52,4 +52,10 @@ int ram_discard_range(const char *block_name, uint64_t s= tart, size_t length); int ram_postcopy_incoming_init(MigrationIncomingState *mis); =20 void ram_handle_compressed(void *host, uint8_t ch, uint64_t size); + +void ramblock_recv_map_init(void); +int ramblock_recv_bitmap_test(void *host_addr, RAMBlock *rb); +void ramblock_recv_bitmap_set(void *host_addr, RAMBlock *rb); +void ramblock_recv_bitmap_clear(void *host_addr, RAMBlock *rb); + #endif --=20 1.8.3.1