get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/812543/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 812543,
    "url": "http://patchwork.ozlabs.org/api/patches/812543/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170911174933.20789-5-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-5-david@redhat.com>",
    "list_archive_url": null,
    "date": "2017-09-11T17:49:31",
    "name": "[v1,4/6] kvm: we never have overlapping slots in kvm_set_phys_mem()",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "b4bd0f4514d6c10127a6d23e91bd90157815aa54",
    "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-5-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/812543/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/812543/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-mx03.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com",
            "ext-mx03.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 3xrbwZ1XsXz9sBd\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 12 Sep 2017 04:26:22 +1000 (AEST)",
            "from localhost ([::1]:59790 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 1drTPY-0001KX-22\n\tfor incoming@patchwork.ozlabs.org; Mon, 11 Sep 2017 14:26:20 -0400",
            "from eggs.gnu.org ([2001:4830:134:3::10]:49161)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <david@redhat.com>) id 1drSqB-0000oE-UF\n\tfor qemu-devel@nongnu.org; Mon, 11 Sep 2017 13:49:49 -0400",
            "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <david@redhat.com>) id 1drSqA-0008Dl-Tw\n\tfor qemu-devel@nongnu.org; Mon, 11 Sep 2017 13:49:48 -0400",
            "from mx1.redhat.com ([209.132.183.28]:33080)\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 1drSqA-0008DH-Lu\n\tfor qemu-devel@nongnu.org; Mon, 11 Sep 2017 13:49:46 -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 B0BE1D69BE;\n\tMon, 11 Sep 2017 17:49:45 +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 46C9664458;\n\tMon, 11 Sep 2017 17:49:44 +0000 (UTC)"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.3.2 mx1.redhat.com B0BE1D69BE",
        "From": "David Hildenbrand <david@redhat.com>",
        "To": "qemu-devel@nongnu.org",
        "Date": "Mon, 11 Sep 2017 19:49:31 +0200",
        "Message-Id": "<20170911174933.20789-5-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.27]);\n\tMon, 11 Sep 2017 17:49:45 +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 4/6] kvm: we never have overlapping slots in\n\tkvm_set_phys_mem()",
        "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": "The way flatview handles memory sections, we will never have overlapping\nmemory sections in kvm.\n\naddress_space_update_topology_pass() will make sure that we will only\nget called for\n\na) an existing memory section for which we only update parameters\n(log_start, log_stop).\nb) an existing memory section we want to delete (region_del)\nc) a brand new memory section we want to add (region_add)\n\nWe cannot have overlapping memory sections in kvm as we will first remove\nthe overlapping sections and then add the ones without conflicts.\n\nTherefore we can remove the complexity for handling prefix and suffix\nslots.\n\nSigned-off-by: David Hildenbrand <david@redhat.com>\n---\n accel/kvm/kvm-all.c | 68 +++++++++--------------------------------------------\n 1 file changed, 11 insertions(+), 57 deletions(-)",
    "diff": "diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c\nindex 88b0e631bd..b677d1b13e 100644\n--- a/accel/kvm/kvm-all.c\n+++ b/accel/kvm/kvm-all.c\n@@ -725,7 +725,7 @@ kvm_check_extension_list(KVMState *s, const KVMCapabilityInfo *list)\n static void kvm_set_phys_mem(KVMMemoryListener *kml,\n                              MemoryRegionSection *section, bool add)\n {\n-    KVMSlot *mem, old;\n+    KVMSlot *mem;\n     int err;\n     MemoryRegion *mr = section->mr;\n     bool writeable = !mr->readonly && !mr->rom_device;\n@@ -750,28 +750,17 @@ static void kvm_set_phys_mem(KVMMemoryListener *kml,\n     ram = memory_region_get_ram_ptr(mr) + section->offset_within_region +\n           (section->offset_within_address_space - start_addr);\n \n-    while (1) {\n-        mem = kvm_lookup_overlapping_slot(kml, start_addr, start_addr + size);\n+    mem = kvm_lookup_matching_slot(kml, start_addr, size);\n+    if (!add) {\n         if (!mem) {\n-            break;\n-        }\n-\n-        if (add && start_addr >= mem->start_addr &&\n-            (start_addr + size <= mem->start_addr + mem->memory_size) &&\n-            (ram - start_addr == mem->ram - mem->start_addr)) {\n-            /* The new slot fits into the existing one and comes with\n-             * identical parameters - update flags and done. */\n-            kvm_slot_update_flags(kml, mem, mr);\n+            g_assert(!memory_region_is_ram(mr) && !writeable && !mr->romd_mode);\n             return;\n         }\n-\n-        old = *mem;\n-\n         if (mem->flags & KVM_MEM_LOG_DIRTY_PAGES) {\n             kvm_physical_sync_dirty_bitmap(kml, section);\n         }\n \n-        /* unregister the overlapping slot */\n+        /* unregister the slot */\n         mem->memory_size = 0;\n         err = kvm_set_user_memory_region(kml, mem);\n         if (err) {\n@@ -779,51 +768,16 @@ static void kvm_set_phys_mem(KVMMemoryListener *kml,\n                     __func__, strerror(-err));\n             abort();\n         }\n-\n-        /* register prefix slot */\n-        if (old.start_addr < start_addr) {\n-            mem = kvm_alloc_slot(kml);\n-            mem->memory_size = start_addr - old.start_addr;\n-            mem->start_addr = old.start_addr;\n-            mem->ram = old.ram;\n-            mem->flags =  kvm_mem_flags(mr);\n-\n-            err = kvm_set_user_memory_region(kml, mem);\n-            if (err) {\n-                fprintf(stderr, \"%s: error registering prefix slot: %s\\n\",\n-                        __func__, strerror(-err));\n-#ifdef TARGET_PPC\n-                fprintf(stderr, \"%s: This is probably because your kernel's \" \\\n-                                \"PAGE_SIZE is too big. Please try to use 4k \" \\\n-                                \"PAGE_SIZE!\\n\", __func__);\n-#endif\n-                abort();\n-            }\n-        }\n-\n-        /* register suffix slot */\n-        if (old.start_addr + old.memory_size > start_addr + size) {\n-            ram_addr_t size_delta;\n-\n-            mem = kvm_alloc_slot(kml);\n-            mem->start_addr = start_addr + size;\n-            size_delta = mem->start_addr - old.start_addr;\n-            mem->memory_size = old.memory_size - size_delta;\n-            mem->ram = old.ram + size_delta;\n-            mem->flags = kvm_mem_flags(mr);\n-\n-            err = kvm_set_user_memory_region(kml, mem);\n-            if (err) {\n-                fprintf(stderr, \"%s: error registering suffix slot: %s\\n\",\n-                        __func__, strerror(-err));\n-                abort();\n-            }\n-        }\n+        return;\n     }\n \n-    if (!add) {\n+    if (mem) {\n+        /* update the slot */\n+        kvm_slot_update_flags(kml, mem, mr);\n         return;\n     }\n+\n+    /* register the new slot */\n     mem = kvm_alloc_slot(kml);\n     mem->memory_size = size;\n     mem->start_addr = start_addr;\n",
    "prefixes": [
        "v1",
        "4/6"
    ]
}