From nobody Fri May 3 09:22:24 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.zohomail.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 1501587744165422.44492128202876; Tue, 1 Aug 2017 04:42:24 -0700 (PDT) Received: from localhost ([::1]:41918 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dcVZ8-0003sZ-OF for importer@patchew.org; Tue, 01 Aug 2017 07:42:22 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46227) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dcVXZ-0002xl-MR for qemu-devel@nongnu.org; Tue, 01 Aug 2017 07:40:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dcVXU-0002UX-O6 for qemu-devel@nongnu.org; Tue, 01 Aug 2017 07:40:45 -0400 Received: from mailout1.w1.samsung.com ([210.118.77.11]:52195) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dcVXU-0002Su-BG for qemu-devel@nongnu.org; Tue, 01 Aug 2017 07:40:40 -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 <0OU000K5Z8FO6UB0@mailout1.w1.samsung.com> for qemu-devel@nongnu.org; Tue, 01 Aug 2017 12:40:36 +0100 (BST) Received: from eusmges3.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20170801114036eucas1p19a260d488b563dac92ede50c9dbdd479~Wtf-WobaW1103311033eucas1p1H; Tue, 1 Aug 2017 11:40:36 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3.samsung.com (EUCPMTA) with SMTP id 4A.4C.17464.3B860895; Tue, 1 Aug 2017 12:40:35 +0100 (BST) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20170801114035eucas1p2e64bd0b4d1aa9bdb63b9ccab2686fd72~Wtf_urnbI2575425754eucas1p2M; Tue, 1 Aug 2017 11:40:35 +0000 (GMT) Received: from eusync1.samsung.com ( [203.254.199.211]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 03.10.20206.3B860895; Tue, 1 Aug 2017 12:40:35 +0100 (BST) Received: from aperevalov-ubuntu.rnd.samsung.ru ([106.109.129.199]) by eusync1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OU0000G78FFVC30@eusync1.samsung.com>; Tue, 01 Aug 2017 12:40:35 +0100 (BST) X-AuditID: cbfec7f2-f797e6d000004438-a3-598068b3f012 From: Alexey Perevalov To: qemu-devel@nongnu.org Date: Tue, 01 Aug 2017 14:40:22 +0300 Message-id: <1501587624-5915-2-git-send-email-a.perevalov@samsung.com> X-Mailer: git-send-email 1.9.1 In-reply-to: <1501587624-5915-1-git-send-email-a.perevalov@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrIIsWRmVeSWpSXmKPExsWy7djP87qbMxoiDVZftbCYe/c8i0Xvtnvs FtM+32a3uNL+k91iy/5v7BbHe3ewWNzZ0sfkwO7x5NpmJo/3+66yefRtWcUYwBzFZZOSmpNZ llqkb5fAlbF51mX2gj6Fir7mPrYGxl6xLkZODgkBE4k3v/4zQthiEhfurWfrYuTiEBJYyiix +vIPdgjnM6PEi+5OJpiOE7dfQCWWMUr8n/6CFcLpZpK4cu8IkMPBwSZgILHvni1Ig4iApMTv rtPMIDXMAgsZJR5c7GEHSQgLuEhMmdPLDlLPIqAq8fKjM0iYV8BN4sWJRSwQy+QkTh6bzApi cwq4S+zZehxssYTAazaJaf23wHolBGQlNh1ghqh3kfiwczNUr7DEq+Nb2CFsGYnLk7tZIHrb GSW6d3ayQjgTGCXOTP8LVWUvcermVbA3mQX4JCZtm84MsYBXoqNNCKLEQ+J08xeoZY4Su9+9 YYJ4fhajxOYr19gnMMosYGRYxSiSWlqcm55abKxXnJhbXJqXrpecn7uJERixp/8d/7SD8esJ q0OMAhyMSjy8Hab1kUKsiWXFlbmHGCU4mJVEeEOiGiKFeFMSK6tSi/Lji0pzUosPMUpzsCiJ 83KduhYhJJCeWJKanZpakFoEk2Xi4JRqYOT/FvVsR8v/61GygacebH0eHnqouHVJ+NW4trRz Qf6iz7aHCv/+cPNpo6D4jLvzr7bOveQxa/+F9+9eXDmwvDnxSOleLQvR9JAajpwPv/6/5jjh Xv3inqKMadHR1YpzD2q6Prln/GROc2Z3pvrGczs3NGRrtfdnfW7burPGdmvry6D+W/kKXO+U WIozEg21mIuKEwFgjAqh1AIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrPLMWRmVeSWpSXmKPExsVy+t/xy7qbMxoiDbZNFrCYe/c8i0Xvtnvs FtM+32a3uNL+k91iy/5v7BbHe3ewWNzZ0sfkwO7x5NpmJo/3+66yefRtWcUYwBzlZpORmpiS WqSQmpecn5KZl26rFBripmuhpJCXmJtqqxSh6xsSpKRQlphTCuQZGaABB+cA92AlfbsEt4zN sy6zF/QpVPQ197E1MPaKdTFyckgImEicuP2CHcIWk7hwbz1bFyMXh5DAEkaJ1RPvskI4vUwS p841MXcxcnCwCRhI7LtnC9IgIiAp8bvrNDNIDbPAQkaJOVOfMIIkhAVcJKbM6WUHqWcRUJV4 +dEZJMwr4Cbx4sQiFohlchInj01mBbE5Bdwl9mw9DnaEEFDNsfkX2SYw8i5gZFjFKJJaWpyb nltspFecmFtcmpeul5yfu4kRGLjbjv3csoOx613wIUYBDkYlHt4H5vWRQqyJZcWVuYcYJTiY lUR4Q6IaIoV4UxIrq1KL8uOLSnNSiw8xmgLdNJFZSjQ5HxhVeSXxhiaG5paGRsYWFuZGRkri vFM/XAkXEkhPLEnNTk0tSC2C6WPi4JRqYJx6smCvf8P2T2/PuBm+kpWtnbP0b0Wn6z6+qe/W vRFZc7Ht5ZNle/k/NSxQ3nNV5U/R8v//mCsXPQw+cvfgjE+9f98bcz/ZsWTr1G0lu2ZETuJO WREucmDfC67CF/ZamqGp37O/TG+dEVK25hELk+D1/SJzjodMYmZ5+GWjUZdzfI1egdnkExb6 SizFGYmGWsxFxYkATzITtnICAAA= X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170801114035eucas1p2e64bd0b4d1aa9bdb63b9ccab2686fd72 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: 20170801114035eucas1p2e64bd0b4d1aa9bdb63b9ccab2686fd72 X-RootMTR: 20170801114035eucas1p2e64bd0b4d1aa9bdb63b9ccab2686fd72 References: <1501587624-5915-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 v9 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: heetae82.ahn@samsung.com, quintela@redhat.com, Alexey Perevalov , peterx@redhat.com, dgilbert@redhat.com, i.maximets@samsung.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 7e21e6f..996e64d 100644 --- a/migration/postcopy-ram.c +++ b/migration/postcopy-ram.c @@ -564,9 +564,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; @@ -595,11 +596,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(); @@ -629,7 +630,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; @@ -692,14 +693,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 1b08296..9cc1b17 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -2470,10 +2470,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.9.1 From nobody Fri May 3 09:22:24 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.zohomail.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 1501587741752738.2834277545938; Tue, 1 Aug 2017 04:42:21 -0700 (PDT) Received: from localhost ([::1]:41917 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dcVZ6-0003rD-0V for importer@patchew.org; Tue, 01 Aug 2017 07:42:20 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46230) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dcVXa-0002xm-6F for qemu-devel@nongnu.org; Tue, 01 Aug 2017 07:40:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dcVXV-0002Uu-F8 for qemu-devel@nongnu.org; Tue, 01 Aug 2017 07:40:46 -0400 Received: from mailout4.w1.samsung.com ([210.118.77.14]:22372) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dcVXV-0002Tr-5x for qemu-devel@nongnu.org; Tue, 01 Aug 2017 07:40:41 -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 <0OU000EYU8FPRFA0@mailout4.w1.samsung.com> for qemu-devel@nongnu.org; Tue, 01 Aug 2017 12:40:37 +0100 (BST) Received: from eusmges2.samsung.com (unknown [203.254.199.241]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20170801114037eucas1p1f1e2820b0b73e465e18830bfd94c4b2f~WtgAHu6pC1104611046eucas1p1E; Tue, 1 Aug 2017 11:40:37 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2.samsung.com (EUCPMTA) with SMTP id 54.8A.04459.4B860895; Tue, 1 Aug 2017 12:40:36 +0100 (BST) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20170801114036eucas1p1f374ce73c38cb9e87f62877038b3513a~Wtf-b6kB52839928399eucas1p1j; Tue, 1 Aug 2017 11:40:36 +0000 (GMT) Received: from eusync1.samsung.com ( [203.254.199.211]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 02.23.17452.4B860895; Tue, 1 Aug 2017 12:40:36 +0100 (BST) Received: from aperevalov-ubuntu.rnd.samsung.ru ([106.109.129.199]) by eusync1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OU0000G78FFVC30@eusync1.samsung.com>; Tue, 01 Aug 2017 12:40:36 +0100 (BST) X-AuditID: cbfec7f1-f796e6d00000116b-8e-598068b4182e From: Alexey Perevalov To: qemu-devel@nongnu.org Date: Tue, 01 Aug 2017 14:40:23 +0300 Message-id: <1501587624-5915-3-git-send-email-a.perevalov@samsung.com> X-Mailer: git-send-email 1.9.1 In-reply-to: <1501587624-5915-1-git-send-email-a.perevalov@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrIIsWRmVeSWpSXmKPExsWy7djP87pbMhoiDbZ16VnMvXuexaJ32z12 i2mfb7NbXGn/yW6xZf83dovjvTtYLO5s6WNyYPd4cm0zk8f7fVfZPPq2rGIMYI7isklJzcks Sy3St0vgyli1bzt7wW3JiiuH9jE1MD4W7mLk5JAQMJH4d/gnK4QtJnHh3nq2LkYuDiGBpYwS 1xYeZYVwPjNK3Oj9xgbT0XnzD1RiGaPEm3mvGCGcbiaJA3c/s3cxcnCwCRhI7LtnC9IgIiAp 8bvrNDNIDbPAQkaJBxd72EESwgLuEr1Hb7GA1LMIqEq8eBwIEuYVcJN4uHoeM8QyOYmTxyaD nccJVL5n63F2kDkSAs/ZJFZOfcgE0ishICux6QBUvYvE3Z0/oWxhiVfHt7BD2DISnR0HmSB6 2xklund2skI4Exglzkz/C1VlL3Hq5lUmEJtZgE9i0rbpzBALeCU62oQgSjwk3s58Bw0vR4nF X78zQzw/i1Gi69RClgmMMgsYGVYxiqSWFuempxYb6RUn5haX5qXrJefnbmIERuzpf8c/7mB8 f8LqEKMAB6MSD2+HaX2kEGtiWXFl7iFGCQ5mJRHekKiGSCHelMTKqtSi/Pii0pzU4kOM0hws SuK8XKeuRQgJpCeWpGanphakFsFkmTg4pRoYOTWEpSxPyzen2qp/P3RF/EUI/5HEQBH72qcp 5uEajKarLP7zbrVcNS2EucFFyqI1//9Fpo2+5230mfcsW3xujqH9kYNPntYKLog48EPOK+/q G8HQu1+53oSWiqxUvTKF/cck4z8Rl/Kltk03WPeMy7+3Wzl+c5dyf+DfLwcOJEV0p5o8f+6l xFKckWioxVxUnAgAywxke9QCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrPLMWRmVeSWpSXmKPExsVy+t/xy7pbMhoiDV53C1jMvXuexaJ32z12 i2mfb7NbXGn/yW6xZf83dovjvTtYLO5s6WNyYPd4cm0zk8f7fVfZPPq2rGIMYI5ys8lITUxJ LVJIzUvOT8nMS7dVCg1x07VQUshLzE21VYrQ9Q0JUlIoS8wpBfKMDNCAg3OAe7CSvl2CW8aq fdvZC25LVlw5tI+pgfGxcBcjJ4eEgIlE580/rBC2mMSFe+vZuhi5OIQEljBKNJ6dwALh9DJJ /D52B6iKg4NNwEBi3z1bkAYRAUmJ312nmUFqmAUWMkrMmfqEESQhLOAu0Xv0FgtIPYuAqsSL x4EgYV4BN4mHq+cxQyyTkzh5bDLYYk6g8j1bj7OD2EJANcfmX2SbwMi7gJFhFaNIamlxbnpu saFecWJucWleul5yfu4mRmDgbjv2c/MOxksbgw8xCnAwKvHwdpjWRwqxJpYVV+YeYpTgYFYS 4Q2JaogU4k1JrKxKLcqPLyrNSS0+xGgKdNNEZinR5HxgVOWVxBuaGJpbGhoZW1iYGxkpifOW fLgSLiSQnliSmp2aWpBaBNPHxMEp1cDY8j/JLDpr8vxsWwMRTdHPZRfYP160b9YLezqldo2/ Y0Oz4f6dIffzLx7r4Dq7a3Hb1vfLjb2+WubHX1qrxXk4ef6Ezwsk//Jw68VUC19m2cN+OiVj 55ODjx6U5efsXz4xnKmKb6vixgjNsEtbGvcU/Uy0l+zgSXTobfofU9neeaJjeovCex4lluKM REMt5qLiRACZOPGAcgIAAA== X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170801114036eucas1p1f374ce73c38cb9e87f62877038b3513a 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: 20170801114036eucas1p1f374ce73c38cb9e87f62877038b3513a X-RootMTR: 20170801114036eucas1p1f374ce73c38cb9e87f62877038b3513a References: <1501587624-5915-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 v9 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: heetae82.ahn@samsung.com, quintela@redhat.com, Alexey Perevalov , peterx@redhat.com, dgilbert@redhat.com, i.maximets@samsung.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 996e64d..be497bb 100644 --- a/migration/postcopy-ram.c +++ b/migration/postcopy-ram.c @@ -559,6 +559,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 @@ -566,20 +585,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); @@ -601,12 +614,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.9.1 From nobody Fri May 3 09:22:24 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.zohomail.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 1501587836773944.5987828738911; Tue, 1 Aug 2017 04:43:56 -0700 (PDT) Received: from localhost ([::1]:41920 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dcVad-0005F4-7z for importer@patchew.org; Tue, 01 Aug 2017 07:43:55 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46237) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dcVXa-0002xn-Em for qemu-devel@nongnu.org; Tue, 01 Aug 2017 07:40:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dcVXV-0002VC-L1 for qemu-devel@nongnu.org; Tue, 01 Aug 2017 07:40:46 -0400 Received: from mailout4.w1.samsung.com ([210.118.77.14]:22372) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dcVXV-0002Tr-Fc for qemu-devel@nongnu.org; Tue, 01 Aug 2017 07:40:41 -0400 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout4.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0OU000IJP8FQ1AA0@mailout4.w1.samsung.com> for qemu-devel@nongnu.org; Tue, 01 Aug 2017 12:40:38 +0100 (BST) Received: from eusmges1.samsung.com (unknown [203.254.199.239]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20170801114037eucas1p14415d890cb192494f4e38a4c8cf5c541~WtgBACV8H3014130141eucas1p1k; Tue, 1 Aug 2017 11:40:37 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1.samsung.com (EUCPMTA) with SMTP id 78.FD.14140.8B860895; Tue, 1 Aug 2017 12:40:40 +0100 (BST) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20170801114037eucas1p2ad2750c687b3a7cdf51b26649312a1b8~WtgAXZLfH0423804238eucas1p2m; Tue, 1 Aug 2017 11:40:37 +0000 (GMT) Received: from eusync1.samsung.com ( [203.254.199.211]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id F3.10.20206.5B860895; Tue, 1 Aug 2017 12:40:37 +0100 (BST) Received: from aperevalov-ubuntu.rnd.samsung.ru ([106.109.129.199]) by eusync1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OU0000G78FFVC30@eusync1.samsung.com>; Tue, 01 Aug 2017 12:40:36 +0100 (BST) X-AuditID: cbfec7ef-f796a6d00000373c-7e-598068b8b33b From: Alexey Perevalov To: qemu-devel@nongnu.org Date: Tue, 01 Aug 2017 14:40:24 +0300 Message-id: <1501587624-5915-4-git-send-email-a.perevalov@samsung.com> X-Mailer: git-send-email 1.9.1 In-reply-to: <1501587624-5915-1-git-send-email-a.perevalov@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrLIsWRmVeSWpSXmKPExsWy7djP87o7MhoiDc7OYLGYe/c8i0Xvtnvs FtM+32a3uNL+k91iy/5v7BbHe3ewWNzZ0sfkwO7x5NpmJo/3+66yefRtWcUYwBzFZZOSmpNZ llqkb5fAlfHy/Cq2gsW2Fc/vtLA1MN7X62Lk4JAQMJG4/1Omi5ETyBSTuHBvPRuILSSwjFFi /ec6CPszo0Tr4wSIGhOJrY9PsncxckHUfDrZygLhdDNJHLj7mR1kKJuAgcS+e7YgDSICkhK/ u04zg9QwCyxklHhwsQesRljAXmJXTxZIDYuAqsS1Ez8ZQWxeATeJxaunsEMsk5M4eWwyK4jN KeAusWfrcbDFEgLP2STudz1khXhAVmLTAWaIeheJps9nmSBsYYlXx7dAzZGRuDy5mwWit51R ontnJyuEM4FR4sz0v1BV9hKnbl4F62YW4JOYtG06M8QCXomONiEI00PiQLM8RLWjxNVT25gh fp/FKLFu8T7mCYwyCxgZVjGKpJYW56anFhvqFSfmFpfmpesl5+duYgRG6ul/x9/vYHzaHHKI UYCDUYmHt8O0PlKINbGsuDL3EKMEB7OSCG9IVEOkEG9KYmVValF+fFFpTmrxIUZpDhYlcV7e U9cihATSE0tSs1NTC1KLYLJMHJxSDYzZ/7nUD75bWcFc2vwvN6+kmu90sXdmaPetx1PPz90g oDXhC3O65muXHWF/vr750ljw+nbABoaanzKnHyqJadka7/YyUdO89G9vWJgii8z1+bV5Gx5e tHrWfa4sNXB6YvjdqL5jD9kSMnn8u7t/c9mWGa5c9NqZu/WClN0Br3LPE3cu2xXrnVViKc5I NNRiLipOBAC8d0h90AIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrPLMWRmVeSWpSXmKPExsVy+t/xy7pbMxoiDbbsY7SYe/c8i0Xvtnvs FtM+32a3uNL+k91iy/5v7BbHe3ewWNzZ0sfkwO7x5NpmJo/3+66yefRtWcUYwBzlZpORmpiS WqSQmpecn5KZl26rFBripmuhpJCXmJtqqxSh6xsSpKRQlphTCuQZGaABB+cA92AlfbsEt4yX 51exFSy2rXh+p4WtgfG+XhcjJ4eEgInE1scn2SFsMYkL99azdTFycQgJLGGUmH3rM5TTyyTx +9gd1i5GDg42AQOJffdsQRpEBCQlfnedZgapYRZYyCgxZ+oTRpAaYQF7iV09WSA1LAKqEtdO /GQEsXkF3CQWr54CtUxO4uSxyawgNqeAu8SercfB4kJANcfmX2SbwMi7gJFhFaNIamlxbnpu sZFecWJucWleul5yfu4mRmDgbjv2c8sOxq53wYcYBTgYlXh4H5jXRwqxJpYVV+YeYpTgYFYS 4Q2JaogU4k1JrKxKLcqPLyrNSS0+xGgKdNREZinR5HxgVOWVxBuaGJpbGhoZW1iYGxkpifNO /XAlXEggPbEkNTs1tSC1CKaPiYNTqoFR5UIhwxeVD6ty3+3982jpXr3rr9v7LPdKPuBSllkU efrDhB/KBtw1z3hSA6f0Ssoa2gvuii+ekJV7eG6Fq8rkgOQuq6sfZZa4/PxQqWd18uoExu3f hZodJ2kapnjaqBp1N084f59ZnMHv7KTDOgGXks7XFU5inahyL9RR5b38RT+/iROnfV+uxFKc kWioxVxUnAgAOWn8vXICAAA= X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170801114037eucas1p2ad2750c687b3a7cdf51b26649312a1b8 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: 20170801114037eucas1p2ad2750c687b3a7cdf51b26649312a1b8 X-RootMTR: 20170801114037eucas1p2ad2750c687b3a7cdf51b26649312a1b8 References: <1501587624-5915-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 v9 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: heetae82.ahn@samsung.com, quintela@redhat.com, Alexey Perevalov , peterx@redhat.com, dgilbert@redhat.com, i.maximets@samsung.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, and for recovery 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. Reviewed-by: Peter Xu Signed-off-by: Peter Xu Signed-off-by: Alexey Perevalov --- include/exec/ram_addr.h | 10 ++++++++++ migration/postcopy-ram.c | 17 ++++++++++++----- migration/ram.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ migration/ram.h | 6 ++++++ 4 files changed, 73 insertions(+), 5 deletions(-) diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h index c04f4f6..bb902bb 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/postcopy-ram.c b/migration/postcopy-ram.c index be497bb..7a414eb 100644 --- a/migration/postcopy-ram.c +++ b/migration/postcopy-ram.c @@ -560,22 +560,28 @@ 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_range(rb, host_addr, + pagesize / qemu_target_page_size()); } + return ret; } =20 /* @@ -592,7 +598,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); @@ -614,7 +620,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 9cc1b17..d14b8bb 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -44,6 +44,7 @@ #include "qemu/error-report.h" #include "trace.h" #include "exec/ram_addr.h" +#include "exec/target_page.h" #include "qemu/rcu_queue.h" #include "migration/colo.h" =20 @@ -147,6 +148,40 @@ out: return ret; } =20 +static void ramblock_recv_map_init(void) +{ + RAMBlock *rb; + + RAMBLOCK_FOREACH(rb) { + assert(!rb->receivedmap); + rb->receivedmap =3D bitmap_new(rb->max_length >> qemu_target_page_= bits()); + } +} + +int ramblock_recv_bitmap_test(RAMBlock *rb, void *host_addr) +{ + return test_bit(ramblock_recv_bitmap_offset(host_addr, rb), + rb->receivedmap); +} + +void ramblock_recv_bitmap_set(RAMBlock *rb, void *host_addr) +{ + set_bit_atomic(ramblock_recv_bitmap_offset(host_addr, rb), rb->receive= dmap); +} + +void ramblock_recv_bitmap_set_range(RAMBlock *rb, void *host_addr, + size_t nr) +{ + bitmap_set_atomic(rb->receivedmap, + ramblock_recv_bitmap_offset(host_addr, rb), + nr); +} + +void ramblock_recv_bitmap_clear(RAMBlock *rb, void *host_addr) +{ + clear_bit(ramblock_recv_bitmap_offset(host_addr, rb), rb->receivedmap); +} + /* * An outstanding page request, on the source, having been received * and queued @@ -1793,6 +1828,8 @@ int ram_discard_range(const char *rbname, uint64_t st= art, size_t length) goto err; } =20 + bitmap_clear(rb->receivedmap, start >> qemu_target_page_bits(), + length >> qemu_target_page_bits()); ret =3D ram_block_discard_range(rb, start, length); =20 err: @@ -2324,13 +2361,20 @@ static int ram_load_setup(QEMUFile *f, void *opaque) { xbzrle_load_setup(); compress_threads_load_setup(); + ramblock_recv_map_init(); return 0; } =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 @@ -2545,6 +2589,7 @@ static int ram_load(QEMUFile *f, void *opaque, int ve= rsion_id) ret =3D -EINVAL; break; } + ramblock_recv_bitmap_set(block, host); trace_ram_load_loop(block->idstr, (uint64_t)addr, flags, host); } =20 diff --git a/migration/ram.h b/migration/ram.h index c081fde..4db9922 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); + +int ramblock_recv_bitmap_test(RAMBlock *rb, void *host_addr); +void ramblock_recv_bitmap_set(RAMBlock *rb, void *host_addr); +void ramblock_recv_bitmap_set_range(RAMBlock *rb, void *host_addr, size_t = nr); +void ramblock_recv_bitmap_clear(RAMBlock *rb, void *host_addr); + #endif --=20 1.9.1