From nobody Mon Apr 29 01:38:01 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 1498557389806831.2482381222244; Tue, 27 Jun 2017 02:56:29 -0700 (PDT) Received: from localhost ([::1]:51499 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dPnES-0000jA-DZ for importer@patchew.org; Tue, 27 Jun 2017 05:56:28 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33635) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dPnBl-0007Sb-RQ for qemu-devel@nongnu.org; Tue, 27 Jun 2017 05:53:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dPnBi-0001T3-Nw for qemu-devel@nongnu.org; Tue, 27 Jun 2017 05:53:41 -0400 Received: from mailout4.w1.samsung.com ([210.118.77.14]:48212) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dPnBi-0001Nh-FH for qemu-devel@nongnu.org; Tue, 27 Jun 2017 05:53:38 -0400 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout4.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0OS7000B9A599490@mailout4.w1.samsung.com> for qemu-devel@nongnu.org; Tue, 27 Jun 2017 10:53:33 +0100 (BST) Received: from eusmges1.samsung.com (unknown [203.254.199.239]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20170627095332eucas1p1237e259f28899c4a64541db14e11cbc8~L8dhpfkKG0357003570eucas1p1T; Tue, 27 Jun 2017 09:53:32 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1.samsung.com (EUCPMTA) with SMTP id 5A.65.14140.F1B22595; Tue, 27 Jun 2017 10:53:35 +0100 (BST) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20170627095332eucas1p2e787fcca6adceddf87f7dc50fe82183d~L8dg_PUPI1018110181eucas1p2j; Tue, 27 Jun 2017 09:53:32 +0000 (GMT) Received: from eusync1.samsung.com ( [203.254.199.211]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 71.D5.20206.B1B22595; Tue, 27 Jun 2017 10:53:31 +0100 (BST) Received: from minion.rnd.samsung.ru ([106.109.131.134]) by eusync1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OS70042MA4ZGZB0@eusync1.samsung.com>; Tue, 27 Jun 2017 10:53:31 +0100 (BST) X-AuditID: cbfec7ef-f796a6d00000373c-a6-59522b1f83a0 From: Alexey Perevalov To: qemu-devel@nongnu.org Date: Tue, 27 Jun 2017 05:50:25 -0400 Message-id: <1498557027-18143-2-git-send-email-a.perevalov@samsung.com> X-Mailer: git-send-email 1.8.3.1 In-reply-to: <1498557027-18143-1-git-send-email-a.perevalov@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrDIsWRmVeSWpSXmKPExsWy7djPc7ry2kGRBlvfsFvMvXuexaJ32z12 iyvtP9kttuz/xm5xvHcHi8WdLX1MDmweT65tZvJ4v+8qm0ffllWMAcxRXDYpqTmZZalF+nYJ XBkfvm5lLpigUNHYtYW5gbFfrIuRk0NCwERi58PzjBC2mMSFe+vZQGwhgWWMEot35HQxcgHZ nxkl+g/PYoJp6Nn+hQ0iAVQ0/99mZgingUni3ZTvQFUcHGwCBhL77tmCNIgISEr87joNVsMs 0Moo0d73iBkkISzgIrH8zz12EJtFQFVixvH3YHFeAXeJpUdfskBsU5CY8hAizingIbFuwi4m kEESAvfZJDYePM8GskxCQFZi0wFmiHoXiQkfJ0L1Cku8Or6FHcKWkbg8uZsForedUaJ7Zycr hDOBUeLM9L9QVfYSp25eBfuTWYBPYtK26cwQC3glOtqEIEo8JA6c38gKYTtKzDwMMVRIYDaj xKzDrewTGGUWMDKsYhRJLS3OTU8tNtQrTswtLs1L10vOz93ECIzT0/+Ov9/B+LQ55BCjAAej Eg/vD6bASCHWxLLiytxDjBIczEoivL+ZgyKFeFMSK6tSi/Lji0pzUosPMUpzsCiJ8/KeuhYh JJCeWJKanZpakFoEk2Xi4JRqYHS47qo12zD0u9ni44qFNyvssoTbvx6IaG6a5H9IpIHvkNLb j9NemO7//vnc267GNR7LLz2v2CAv/Ut432mtLy8vXPTKMdjG6mhpwOi4OzHQK68kJPLSjao/ ZrxlFcsn8rjzZ0wJbHn859uJNx0hD3xti/0PNMYIxsvuu2K76/qyRVeio950LlBiKc5INNRi LipOBACdLdHJzwIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrNLMWRmVeSWpSXmKPExsVy+t/xy7rS2kGRBu8/G1rMvXuexaJ32z12 iyvtP9kttuz/xm5xvHcHi8WdLX1MDmweT65tZvJ4v+8qm0ffllWMAcxRbjYZqYkpqUUKqXnJ +SmZeem2SqEhbroWSgp5ibmptkoRur4hQUoKZYk5pUCekQEacHAOcA9W0rdLcMv48HUrc8EE hYrGri3MDYz9Yl2MnBwSAiYSPdu/sEHYYhIX7q0Hsrk4hASWMEpsOtnMDuE0MUksfLSBqYuR g4NNwEBi3z1bkAYRAUmJ312nmUFqmAVaGSWeNM5iB0kIC7hILP9zD8xmEVCVmHH8PTOIzSvg LrH06EsWiG0KElMeQsQ5BTwk1k3YxQRiCwHVdC9fzDKBkXcBI8MqRpHU0uLc9NxiI73ixNzi 0rx0veT83E2MwIDdduznlh2MXe+CDzEKcDAq8fD+YAqMFGJNLCuuzD3EKMHBrCTC+5s5KFKI NyWxsiq1KD++qDQntfgQoynQUROZpUST84HRlFcSb2hiaG5paGRsYWFuZKQkzjv1w5VwIYH0 xJLU7NTUgtQimD4mDk6pBkYt9tnn4+5peFy2Z/0qs0xZfaK9866WpdNmXLAPL5hvWxw1a0Za 92JV5p5Pv6az+R1JC8s4ftqcU+HfwzbJjerNwevU7jWo6n9v5db3iL+y4d/ELxk9J+7+8nJ/ +y969pyN0yRCU8xY1ubVrng25e/ibW8ZF648p77hlHrF1r9dtcHbV023YPBXYinOSDTUYi4q TgQA8fsUVW4CAAA= X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170627095332eucas1p2e787fcca6adceddf87f7dc50fe82183d 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: 20170627095332eucas1p2e787fcca6adceddf87f7dc50fe82183d X-RootMTR: 20170627095332eucas1p2e787fcca6adceddf87f7dc50fe82183d References: <1498557027-18143-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.14 Subject: [Qemu-devel] [PATCH v5 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 Mon Apr 29 01:38:01 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 1498557292766328.67148162947444; Tue, 27 Jun 2017 02:54:52 -0700 (PDT) Received: from localhost ([::1]:51489 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dPnCt-00081r-AA for importer@patchew.org; Tue, 27 Jun 2017 05:54:51 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33628) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dPnBl-0007Sa-BB for qemu-devel@nongnu.org; Tue, 27 Jun 2017 05:53:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dPnBi-0001SU-7x for qemu-devel@nongnu.org; Tue, 27 Jun 2017 05:53:41 -0400 Received: from mailout3.w1.samsung.com ([210.118.77.13]:24530) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dPnBh-0001OR-Tu for qemu-devel@nongnu.org; Tue, 27 Jun 2017 05:53:38 -0400 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout3.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0OS700L3WA58TX70@mailout3.w1.samsung.com> for qemu-devel@nongnu.org; Tue, 27 Jun 2017 10:53:34 +0100 (BST) Received: from eusmges5.samsung.com (unknown [203.254.199.245]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20170627095333eucas1p11ce7c5556db2171cd21ab729d087e50f~L8diMQTZ22036720367eucas1p1K; Tue, 27 Jun 2017 09:53:33 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges5.samsung.com (EUCPMTA) with SMTP id EA.A5.25577.D1B22595; Tue, 27 Jun 2017 10:53:33 +0100 (BST) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20170627095332eucas1p1d005cb2b05068fc8c48f46eb48292430~L8dhh6hpo1136611366eucas1p1t; Tue, 27 Jun 2017 09:53:32 +0000 (GMT) Received: from eusync1.samsung.com ( [203.254.199.211]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id E1.D5.20206.C1B22595; Tue, 27 Jun 2017 10:53:32 +0100 (BST) Received: from minion.rnd.samsung.ru ([106.109.131.134]) by eusync1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OS70042MA4ZGZB0@eusync1.samsung.com>; Tue, 27 Jun 2017 10:53:32 +0100 (BST) X-AuditID: cbfec7f5-f792f6d0000063e9-d3-59522b1db646 From: Alexey Perevalov To: qemu-devel@nongnu.org Date: Tue, 27 Jun 2017 05:50:26 -0400 Message-id: <1498557027-18143-3-git-send-email-a.perevalov@samsung.com> X-Mailer: git-send-email 1.8.3.1 In-reply-to: <1498557027-18143-1-git-send-email-a.perevalov@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrNIsWRmVeSWpSXmKPExsWy7djP87qy2kGRBut3c1jMvXuexaJ32z12 iyvtP9kttuz/xm5xvHcHi8WdLX1MDmweT65tZvJ4v+8qm0ffllWMAcxRXDYpqTmZZalF+nYJ XBn/b5cW3JWsaF1xjLmB8alwFyMnh4SAicTaqf0sELaYxIV769lAbCGBpYwS3zY7dDFyAdmf gezlj9lgGu48O8YGkVjGKNGydTE7hNPAJLH4WQdzFyMHB5uAgcS+e7YgDSICkhK/u04zg9Qw C7QySrT3PWIGSQgLuEt0dk0DW80ioCrxfM1sVhCbFyg+7W8jE8Q2BYkpD9+D1XMKeEism7CL CWSQhMB9Nonu0/NYQZZJCMhKbDrADFHvItH49gkrhC0s8er4FnYIW0bi8uRuFojedkaJ7p2d rBDOBEaJM9P/QlXZS5y6eRVsM7MAn8SkbdOZIRbwSnS0CUGUeEjs/b4fGhSOEud3vWOC+H42 o0TTovvsExhlFjAyrGIUSS0tzk1PLTbVK07MLS7NS9dLzs/dxAiM0tP/jn/dwbj0mNUhRgEO RiUe3h9MgZFCrIllxZW5hxglOJiVRHh/MwdFCvGmJFZWpRblxxeV5qQWH2KU5mBREuflOnUt QkggPbEkNTs1tSC1CCbLxMEp1cAY6PmX/cybR1d8f92+sFYl5faRxNUHKu90lFh8seT/PvHY 0ldRi8Vv8JlEVjzuKNnVeL0yxFnKY1ua/s33C3pDbKyenpgU3HFmj9CNK4FuVhcXd7Q0ezBu mdFXmxw45bSPZ0bRxukZU/tOL47bsSfkfnnElIA5XeLtb2s+GtyoWjD5vuenpmfblFiKMxIN tZiLihMBDGeFhM4CAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrFLMWRmVeSWpSXmKPExsVy+t/xy7oy2kGRBrcvS1nMvXuexaJ32z12 iyvtP9kttuz/xm5xvHcHi8WdLX1MDmweT65tZvJ4v+8qm0ffllWMAcxRbjYZqYkpqUUKqXnJ +SmZeem2SqEhbroWSgp5ibmptkoRur4hQUoKZYk5pUCekQEacHAOcA9W0rdLcMv4f7u04K5k ReuKY8wNjE+Fuxg5OSQETCTuPDvGBmGLSVy4tx7I5uIQEljCKLGv8Q0LhNPEJPGm5zZrFyMH B5uAgcS+e7YgDSICkhK/u04zg9QwC7QySjxpnMUOkhAWcJfo7JrGAmKzCKhKPF8zmxXE5gWK T/vbyASxTUFiysP3zCA2p4CHxLoJu8DiQkA13csXs0xg5F3AyLCKUSS1tDg3PbfYSK84Mbe4 NC9dLzk/dxMjMFy3Hfu5ZQdj17vgQ4wCHIxKPLw/mAIjhVgTy4orcw8xSnAwK4nw/mYOihTi TUmsrEotyo8vKs1JLT7EaAp01ERmKdHkfGAs5ZXEG5oYmlsaGhlbWJgbGSmJ8079cCVcSCA9 sSQ1OzW1ILUIpo+Jg1OqgbHvfOXqqDXfGR5e/fNf+rbysj95y3sK52ss2++0dE4Lg2V857xI vzwHxfo89o9vRWY0pr/+vV052H6B0Pt5VyfqefWI2TyXu8rpF3a+7yTjFL/EhTM27Ww4/mKN 7eMHAjda7wnUiNm8aDjzxNpvA4fHnkfvfRzNHkZPSV1al37gJNsO/Q9HpusrsRRnJBpqMRcV JwIARgRD0m0CAAA= X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170627095332eucas1p1d005cb2b05068fc8c48f46eb48292430 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: 20170627095332eucas1p1d005cb2b05068fc8c48f46eb48292430 X-RootMTR: 20170627095332eucas1p1d005cb2b05068fc8c48f46eb48292430 References: <1498557027-18143-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 v5 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 Mon Apr 29 01:38:01 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 1498557390559917.2171883855153; Tue, 27 Jun 2017 02:56:30 -0700 (PDT) Received: from localhost ([::1]:51500 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dPnET-0000js-8c for importer@patchew.org; Tue, 27 Jun 2017 05:56:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33642) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dPnBm-0007Sm-GV for qemu-devel@nongnu.org; Tue, 27 Jun 2017 05:53:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dPnBj-0001V7-CQ for qemu-devel@nongnu.org; Tue, 27 Jun 2017 05:53:42 -0400 Received: from mailout1.w1.samsung.com ([210.118.77.11]:19444) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dPnBj-0001RN-3I for qemu-devel@nongnu.org; Tue, 27 Jun 2017 05:53:39 -0400 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0OS700ACMA5AEV90@mailout1.w1.samsung.com> for qemu-devel@nongnu.org; Tue, 27 Jun 2017 10:53:34 +0100 (BST) Received: from eusmges2.samsung.com (unknown [203.254.199.241]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20170627095333eucas1p1aa101a6bd5ad7379efcc194ba6917d6e~L8die-RiA1136711367eucas1p1T; Tue, 27 Jun 2017 09:53:33 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2.samsung.com (EUCPMTA) with SMTP id 08.C1.04459.D1B22595; Tue, 27 Jun 2017 10:53:33 +0100 (BST) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20170627095333eucas1p28a2d86104f8df64c05758cd08f1a48df~L8dh3BWmf2434424344eucas1p2D; Tue, 27 Jun 2017 09:53:33 +0000 (GMT) Received: from eusync1.samsung.com ( [203.254.199.211]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id DF.3C.17452.C1B22595; Tue, 27 Jun 2017 10:53:33 +0100 (BST) Received: from minion.rnd.samsung.ru ([106.109.131.134]) by eusync1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OS70042MA4ZGZB0@eusync1.samsung.com>; Tue, 27 Jun 2017 10:53:32 +0100 (BST) X-AuditID: cbfec7f1-f796e6d00000116b-27-59522b1d8922 From: Alexey Perevalov To: qemu-devel@nongnu.org Date: Tue, 27 Jun 2017 05:50:27 -0400 Message-id: <1498557027-18143-4-git-send-email-a.perevalov@samsung.com> X-Mailer: git-send-email 1.8.3.1 In-reply-to: <1498557027-18143-1-git-send-email-a.perevalov@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrLIsWRmVeSWpSXmKPExsWy7djP87qy2kGRBqdWSVvMvXuexaJ32z12 iyvtP9kttuz/xm5xvHcHi8WdLX1MDmweT65tZvJ4v+8qm0ffllWMAcxRXDYpqTmZZalF+nYJ XBl9y3tYCq46VizZ8521gfGXYRcjJ4eEgInE/q9f2CFsMYkL99azdTFycQgJLGWU2NGyihnC +cwocb3nKjNMx6I9V6GqljFK3F/RyAThNDBJLH7WAVTFwcEmYCCx754tSIOIgKTE767TYJOY BVoZJdr7HoFNEhawl/i/rYcNxGYRUJU4c30KI4jNK+Auce38BzaIbQoSUx6+B6vnFPCQWDdh F9gyCYH7bBK/Oy8ygSyTEJCV2HQA6joXic1fHrFC2MISr45vgfpNRqKz4yBUbzujRPfOTlYI ZwKjxJnpf6Gq7CVO3bzKBGIzC/BJTNo2nRliAa9ER5sQRImHxI8dx6CWOUps7bvLCvH9bEaJ zk3TGScwyixgZFjFKJJaWpybnlpspFecmFtcmpeul5yfu4kRGKmn/x3/uIPx/QmrQ4wCHIxK PLw/mQIjhVgTy4orcw8xSnAwK4nw/mYOihTiTUmsrEotyo8vKs1JLT7EKM3BoiTOy3XqWoSQ QHpiSWp2ampBahFMlomDU6qB8ejkz2dYPbJvml3OVm2IE9x56rKD5Qz2dZPbZRbNjZ5tfeJj 5OkjUrGWO16lbJ+T6/T73p11Oy2X3Fu4bMaurd5CLEpq3wtq3VTcQmaycHmUalZ8vb3R8L6L Uv3sSfah0T9PPl+43Sxs82qLiy6/Tgqk9QienFDm8Hb/ImWlBtPf8gVPmK5mpymxFGckGmox FxUnAgCuYkYW0AIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrNLMWRmVeSWpSXmKPExsVy+t/xy7qy2kGRBpO7GS3m3j3PYtG77R67 xZX2n+wWW/Z/Y7c43ruDxeLOlj4mBzaPJ9c2M3m833eVzaNvyyrGAOYoN5uM1MSU1CKF1Lzk /JTMvHRbpdAQN10LJYW8xNxUW6UIXd+QICWFssScUiDPyAANODgHuAcr6dsluGX0Le9hKbjq WLFkz3fWBsZfhl2MnBwSAiYSi/ZcZYOwxSQu3FsPZHNxCAksYZTou7IEymliknjTc5u1i5GD g03AQGLfPVuQBhEBSYnfXaeZQWqYBVoZJZ40zmIHSQgL2Ev839YDNpVFQFXizPUpjCA2r4C7 xLXzH6C2KUhMefieGcTmFPCQWDdhFxOILQRU0718McsERt4FjAyrGEVSS4tz03OLDfWKE3OL S/PS9ZLzczcxAgN227Gfm3cwXtoYfIhRgINRiYf3B1NgpBBrYllxZe4hRgkOZiUR3t/MQZFC vCmJlVWpRfnxRaU5qcWHGE2BjprILCWanA+MprySeEMTQ3NLQyNjCwtzIyMlcd6SD1fChQTS E0tSs1NTC1KLYPqYODilGhhjr5TJNP8MqCsvyXh785Q3W7J7l9vbItkMe1b5hS2bznQtnvZu Rc9By6mTPFJ+zAp6u8HzTkU/Z+QBnoCjn/3Kwz669WofUH98I+1C+VVTQc8tZdvlr6SUiE9Y MGF21ivNQI7KiwtmfxBN3VR6jHNXjcnujpYWZ9ZJNhGm/GE/756Wm3HqboASS3FGoqEWc1Fx IgChpeN4bgIAAA== X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170627095333eucas1p28a2d86104f8df64c05758cd08f1a48df 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: 20170627095333eucas1p28a2d86104f8df64c05758cd08f1a48df X-RootMTR: 20170627095333eucas1p28a2d86104f8df64c05758cd08f1a48df References: <1498557027-18143-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 v5 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..53fbd41 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -143,6 +143,7 @@ MigrationIncomingState *migration_incoming_get_current(= void) qemu_mutex_init(&mis_current.rp_mutex); qemu_event_init(&mis_current.main_thread_load_event, false); once =3D true; + ramblock_recv_map_init(); } return &mis_current; } 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