Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/812538/?format=api
{ "id": 812538, "url": "http://patchwork.ozlabs.org/api/patches/812538/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170911174933.20789-7-david@redhat.com/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170911174933.20789-7-david@redhat.com>", "list_archive_url": null, "date": "2017-09-11T17:49:33", "name": "[v1,6/6] kvm: kvm_log_sync() is only called with known memory sections", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "c726d6e16dc776ba83da5adc08ef273571e3f5c3", "submitter": { "id": 70402, "url": "http://patchwork.ozlabs.org/api/people/70402/?format=api", "name": "David Hildenbrand", "email": "david@redhat.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170911174933.20789-7-david@redhat.com/mbox/", "series": [ { "id": 2539, "url": "http://patchwork.ozlabs.org/api/series/2539/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=2539", "date": "2017-09-11T17:49:27", "name": "QEMU: kvm: cleanup kvm_slot handling", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/2539/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/812538/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/812538/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)", "ext-mx07.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com", "ext-mx07.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=david@redhat.com" ], "Received": [ "from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xrbdH0Sjrz9s7F\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 12 Sep 2017 04:13:07 +1000 (AEST)", "from localhost ([::1]:59653 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1drTCj-0004z0-2W\n\tfor incoming@patchwork.ozlabs.org; Mon, 11 Sep 2017 14:13:05 -0400", "from eggs.gnu.org ([2001:4830:134:3::10]:49221)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <david@redhat.com>) id 1drSqI-0000tr-Dg\n\tfor qemu-devel@nongnu.org; Mon, 11 Sep 2017 13:49:55 -0400", "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <david@redhat.com>) id 1drSqF-0008KV-5q\n\tfor qemu-devel@nongnu.org; Mon, 11 Sep 2017 13:49:54 -0400", "from mx1.redhat.com ([209.132.183.28]:58108)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <david@redhat.com>) id 1drSqE-0008JJ-Si\n\tfor qemu-devel@nongnu.org; Mon, 11 Sep 2017 13:49:51 -0400", "from smtp.corp.redhat.com\n\t(int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id C79D7C0D8D64;\n\tMon, 11 Sep 2017 17:49:49 +0000 (UTC)", "from t460s.redhat.com (ovpn-116-74.ams2.redhat.com [10.36.116.74])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id E45CC6A82F;\n\tMon, 11 Sep 2017 17:49:47 +0000 (UTC)" ], "DMARC-Filter": "OpenDMARC Filter v1.3.2 mx1.redhat.com C79D7C0D8D64", "From": "David Hildenbrand <david@redhat.com>", "To": "qemu-devel@nongnu.org", "Date": "Mon, 11 Sep 2017 19:49:33 +0200", "Message-Id": "<20170911174933.20789-7-david@redhat.com>", "In-Reply-To": "<20170911174933.20789-1-david@redhat.com>", "References": "<20170911174933.20789-1-david@redhat.com>", "X-Scanned-By": "MIMEDefang 2.79 on 10.5.11.11", "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.31]);\n\tMon, 11 Sep 2017 17:49:49 +0000 (UTC)", "X-detected-operating-system": "by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]", "X-Received-From": "209.132.183.28", "Subject": "[Qemu-devel] [PATCH v1 6/6] kvm: kvm_log_sync() is only called with\n\tknown memory sections", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.21", "Precedence": "list", "List-Id": "<qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<http://lists.nongnu.org/archive/html/qemu-devel/>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Cc": "Paolo Bonzini <pbonzini@redhat.com>, david@redhat.com,\n\tkvm@vger.kernel.org, =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?=\n\t<rkrcmar@redhat.com>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>" }, "content": "Flatview will make sure that we can only end up in this function with\nmemory sections that correspond to exactly one slot. So we don't\nhave to iterate multiple times. There won't be overlapping slots but\nonly matching slots.\n\nProperly align the section and look up the corresponding slot. This\nheavily simplifies this function.\n\nWe can now get rid of kvm_lookup_overlapping_slot().\n\nSigned-off-by: David Hildenbrand <david@redhat.com>\n---\n accel/kvm/kvm-all.c | 61 +++++++++++------------------------------------------\n 1 file changed, 12 insertions(+), 49 deletions(-)", "diff": "diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c\nindex 2ae459453d..a8083e80be 100644\n--- a/accel/kvm/kvm-all.c\n+++ b/accel/kvm/kvm-all.c\n@@ -218,34 +218,6 @@ static hwaddr kvm_align_section(MemoryRegionSection *section,\n return size;\n }\n \n-/*\n- * Find overlapping slot with lowest start address\n- */\n-static KVMSlot *kvm_lookup_overlapping_slot(KVMMemoryListener *kml,\n- hwaddr start_addr,\n- hwaddr end_addr)\n-{\n- KVMState *s = kvm_state;\n- KVMSlot *found = NULL;\n- int i;\n-\n- for (i = 0; i < s->nr_slots; i++) {\n- KVMSlot *mem = &kml->slots[i];\n-\n- if (mem->memory_size == 0 ||\n- (found && found->start_addr < mem->start_addr)) {\n- continue;\n- }\n-\n- if (end_addr > mem->start_addr &&\n- start_addr < mem->start_addr + mem->memory_size) {\n- found = mem;\n- }\n- }\n-\n- return found;\n-}\n-\n int kvm_physical_memory_addr_from_host(KVMState *s, void *ram,\n hwaddr *phys_addr)\n {\n@@ -489,18 +461,16 @@ static int kvm_physical_sync_dirty_bitmap(KVMMemoryListener *kml,\n MemoryRegionSection *section)\n {\n KVMState *s = kvm_state;\n- unsigned long size, allocated_size = 0;\n struct kvm_dirty_log d = {};\n KVMSlot *mem;\n- int ret = 0;\n- hwaddr start_addr = section->offset_within_address_space;\n- hwaddr end_addr = start_addr + int128_get64(section->size);\n+ hwaddr start_addr, size;\n \n- d.dirty_bitmap = NULL;\n- while (start_addr < end_addr) {\n- mem = kvm_lookup_overlapping_slot(kml, start_addr, end_addr);\n- if (mem == NULL) {\n- break;\n+ size = kvm_align_section(section, &start_addr);\n+ if (size) {\n+ mem = kvm_lookup_matching_slot(kml, start_addr, size);\n+ if (!mem) {\n+ fprintf(stderr, \"%s: error finding slot\\n\", __func__);\n+ abort();\n }\n \n /* XXX bad kernel interface alert\n@@ -517,27 +487,20 @@ static int kvm_physical_sync_dirty_bitmap(KVMMemoryListener *kml,\n */\n size = ALIGN(((mem->memory_size) >> TARGET_PAGE_BITS),\n /*HOST_LONG_BITS*/ 64) / 8;\n- if (!d.dirty_bitmap) {\n- d.dirty_bitmap = g_malloc(size);\n- } else if (size > allocated_size) {\n- d.dirty_bitmap = g_realloc(d.dirty_bitmap, size);\n- }\n- allocated_size = size;\n- memset(d.dirty_bitmap, 0, allocated_size);\n+ d.dirty_bitmap = g_malloc0(size);\n \n d.slot = mem->slot | (kml->as_id << 16);\n if (kvm_vm_ioctl(s, KVM_GET_DIRTY_LOG, &d) == -1) {\n DPRINTF(\"ioctl failed %d\\n\", errno);\n- ret = -1;\n- break;\n+ g_free(d.dirty_bitmap);\n+ return -1;\n }\n \n kvm_get_dirty_pages_log_range(section, d.dirty_bitmap);\n- start_addr = mem->start_addr + mem->memory_size;\n+ g_free(d.dirty_bitmap);\n }\n- g_free(d.dirty_bitmap);\n \n- return ret;\n+ return 0;\n }\n \n static void kvm_coalesce_mmio_region(MemoryListener *listener,\n", "prefixes": [ "v1", "6/6" ] }