From nobody Tue Feb 10 02:43:13 2026 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; dkim=fail; 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 1505826131258148.69651055513043; Tue, 19 Sep 2017 06:02:11 -0700 (PDT) Received: from localhost ([::1]:42710 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1duIAE-0005WL-7V for importer@patchew.org; Tue, 19 Sep 2017 09:02:10 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60027) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1duHfQ-0004DU-8l for qemu-devel@nongnu.org; Tue, 19 Sep 2017 08:30:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1duHfP-0005X5-8y for qemu-devel@nongnu.org; Tue, 19 Sep 2017 08:30:20 -0400 Received: from mail-wm0-x242.google.com ([2a00:1450:400c:c09::242]:33577) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1duHfP-0005Wi-2x for qemu-devel@nongnu.org; Tue, 19 Sep 2017 08:30:19 -0400 Received: by mail-wm0-x242.google.com with SMTP id m127so3757248wmm.0 for ; Tue, 19 Sep 2017 05:30:18 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-246-117.clienti.tiscali.it. [78.12.246.117]) by smtp.gmail.com with ESMTPSA id k18sm1292878wmd.22.2017.09.19.05.30.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 19 Sep 2017 05:30:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=qoTbc1ScBtvJEwYj2GELxqEc0SJg0ghgyva4aR9TiK0=; b=TBoo36DQUEx7xeik/NkjNZYyj+6BBuKZ+fo10mHqiATEi6mO7l4b4xBq5RhnMtk0BE gKNtDmN4BVL/zMd1bQmdugtOrfvBp9QbTjXibqOgzQaCINyvjKwHWNZeqdXxuKyTyJGH OFOulzek0GMkwJ3ihFDuhAKt87rb7ojuzgtXnYvVKMBJvrvGosx1EgTZh1tE2ZYOeOMa RGjtIvfXNgTEcy6QKJ/3xJkzFRigbyy3FUNhh7lwkZEoQPtQogwFYHDymH4qRoXbaEMl BhKhee/A613AUqwrban13MS7x+j/GAtM2yDv+3ano/w9wk6Dvp+PX+fAaOu7PY7GZJx1 rYfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=qoTbc1ScBtvJEwYj2GELxqEc0SJg0ghgyva4aR9TiK0=; b=IjkdlR//2cw31dpezDJZdPBGBOTv5y35OCIl78wj7R6hkxzjZUCIP92cLLNE8PIM29 L08FSclrjLa64v0ycVZdtgvDRqjaPF85BDnl3Q1Y1rfyyobUuCH7pILJK6zvd+4OIoot vtkj/M7nmRlnNo1r1TGYRGsna0NDuHcH9rqnZKL+b8sId4dz0PoRsinzNSUC4I6H0Ef6 O8Jv98mEAC4rjX6yR0IUBirkSWUkDNC69ZfLVh/WCGWUTv5w1FWxrPBd21Ahsln/e8tn HjF/eq/BWpJDIwfLBDxnHBbzTnE3OL+Kl1W67hRuaINUJr8wF9gyOsn6WmiNmcO2dbeO Qghw== X-Gm-Message-State: AHPjjUhbP2rEkkHHKOnOPExCF0QP6DnLdhKTIixj3r2NRNLS6QgifG7G vowoF8/PD7TK6xAMNigYwNX+fKw0 X-Google-Smtp-Source: AOwi7QBmg1gsBidOrkmeEn65DPQq1aXhaIepVCf1eFKVyaY5cUNlyQyHIrWUPc7Msd/MSGOCv5Al2g== X-Received: by 10.28.141.70 with SMTP id p67mr907753wmd.80.1505824217760; Tue, 19 Sep 2017 05:30:17 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 19 Sep 2017 14:29:20 +0200 Message-Id: <1505824179-21541-32-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1505824179-21541-1-git-send-email-pbonzini@redhat.com> References: <1505824179-21541-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::242 Subject: [Qemu-devel] [PULL 31/50] kvm: kvm_log_sync() is only called with known memory sections 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: David Hildenbrand Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: David Hildenbrand Flatview will make sure that we can only end up in this function with memory sections that correspond to exactly one slot. So we don't have to iterate multiple times. There won't be overlapping slots but only matching slots. Properly align the section and look up the corresponding slot. This heavily simplifies this function. We can now get rid of kvm_lookup_overlapping_slot(). Signed-off-by: David Hildenbrand Message-Id: <20170911174933.20789-7-david@redhat.com> Signed-off-by: Paolo Bonzini --- accel/kvm/kvm-all.c | 61 +++++++++++--------------------------------------= ---- 1 file changed, 12 insertions(+), 49 deletions(-) diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index 2ae4594..a8083e8 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -218,34 +218,6 @@ static hwaddr kvm_align_section(MemoryRegionSection *s= ection, return size; } =20 -/* - * Find overlapping slot with lowest start address - */ -static KVMSlot *kvm_lookup_overlapping_slot(KVMMemoryListener *kml, - hwaddr start_addr, - hwaddr end_addr) -{ - KVMState *s =3D kvm_state; - KVMSlot *found =3D NULL; - int i; - - for (i =3D 0; i < s->nr_slots; i++) { - KVMSlot *mem =3D &kml->slots[i]; - - if (mem->memory_size =3D=3D 0 || - (found && found->start_addr < mem->start_addr)) { - continue; - } - - if (end_addr > mem->start_addr && - start_addr < mem->start_addr + mem->memory_size) { - found =3D mem; - } - } - - return found; -} - int kvm_physical_memory_addr_from_host(KVMState *s, void *ram, hwaddr *phys_addr) { @@ -489,18 +461,16 @@ static int kvm_physical_sync_dirty_bitmap(KVMMemoryLi= stener *kml, MemoryRegionSection *section) { KVMState *s =3D kvm_state; - unsigned long size, allocated_size =3D 0; struct kvm_dirty_log d =3D {}; KVMSlot *mem; - int ret =3D 0; - hwaddr start_addr =3D section->offset_within_address_space; - hwaddr end_addr =3D start_addr + int128_get64(section->size); + hwaddr start_addr, size; =20 - d.dirty_bitmap =3D NULL; - while (start_addr < end_addr) { - mem =3D kvm_lookup_overlapping_slot(kml, start_addr, end_addr); - if (mem =3D=3D NULL) { - break; + size =3D kvm_align_section(section, &start_addr); + if (size) { + mem =3D kvm_lookup_matching_slot(kml, start_addr, size); + if (!mem) { + fprintf(stderr, "%s: error finding slot\n", __func__); + abort(); } =20 /* XXX bad kernel interface alert @@ -517,27 +487,20 @@ static int kvm_physical_sync_dirty_bitmap(KVMMemoryLi= stener *kml, */ size =3D ALIGN(((mem->memory_size) >> TARGET_PAGE_BITS), /*HOST_LONG_BITS*/ 64) / 8; - if (!d.dirty_bitmap) { - d.dirty_bitmap =3D g_malloc(size); - } else if (size > allocated_size) { - d.dirty_bitmap =3D g_realloc(d.dirty_bitmap, size); - } - allocated_size =3D size; - memset(d.dirty_bitmap, 0, allocated_size); + d.dirty_bitmap =3D g_malloc0(size); =20 d.slot =3D mem->slot | (kml->as_id << 16); if (kvm_vm_ioctl(s, KVM_GET_DIRTY_LOG, &d) =3D=3D -1) { DPRINTF("ioctl failed %d\n", errno); - ret =3D -1; - break; + g_free(d.dirty_bitmap); + return -1; } =20 kvm_get_dirty_pages_log_range(section, d.dirty_bitmap); - start_addr =3D mem->start_addr + mem->memory_size; + g_free(d.dirty_bitmap); } - g_free(d.dirty_bitmap); =20 - return ret; + return 0; } =20 static void kvm_coalesce_mmio_region(MemoryListener *listener, --=20 1.8.3.1