get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 818169,
    "url": "http://patchwork.ozlabs.org/api/patches/818169/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170925102302.60587-3-borntraeger@de.ibm.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": "<20170925102302.60587-3-borntraeger@de.ibm.com>",
    "list_archive_url": null,
    "date": "2017-09-25T10:23:02",
    "name": "[2/2] s390/kvm: Support for get/set of extended TOD-Clock for guest",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "bcaf77366e2ed54c06df54f02a0cf48459e75346",
    "submitter": {
        "id": 590,
        "url": "http://patchwork.ozlabs.org/api/people/590/?format=api",
        "name": "Christian Borntraeger",
        "email": "borntraeger@de.ibm.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170925102302.60587-3-borntraeger@de.ibm.com/mbox/",
    "series": [
        {
            "id": 4931,
            "url": "http://patchwork.ozlabs.org/api/series/4931/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=4931",
            "date": "2017-09-25T10:23:00",
            "name": "s390/z14: extended TOD-clock support",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/4931/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/818169/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/818169/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>)",
        "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 3y10ck2rjtz9tX3\n\tfor <incoming@patchwork.ozlabs.org>;\n\tMon, 25 Sep 2017 20:26:46 +1000 (AEST)",
            "from localhost ([::1]:41632 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 1dwQb6-0007B0-Hc\n\tfor incoming@patchwork.ozlabs.org; Mon, 25 Sep 2017 06:26:44 -0400",
            "from eggs.gnu.org ([2001:4830:134:3::10]:46239)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <borntraeger@de.ibm.com>) id 1dwQXj-000507-7F\n\tfor qemu-devel@nongnu.org; Mon, 25 Sep 2017 06:23:19 -0400",
            "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <borntraeger@de.ibm.com>) id 1dwQXf-0003Th-Fx\n\tfor qemu-devel@nongnu.org; Mon, 25 Sep 2017 06:23:15 -0400",
            "from mx0b-001b2d01.pphosted.com ([148.163.158.5]:46904\n\thelo=mx0a-001b2d01.pphosted.com)\n\tby eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <borntraeger@de.ibm.com>)\n\tid 1dwQXf-0003TA-9N\n\tfor qemu-devel@nongnu.org; Mon, 25 Sep 2017 06:23:11 -0400",
            "from pps.filterd (m0098417.ppops.net [127.0.0.1])\n\tby mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id\n\tv8PAJdNE107612\n\tfor <qemu-devel@nongnu.org>; Mon, 25 Sep 2017 06:23:08 -0400",
            "from e06smtp14.uk.ibm.com (e06smtp14.uk.ibm.com [195.75.94.110])\n\tby mx0a-001b2d01.pphosted.com with ESMTP id 2d6wak26xx-1\n\t(version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT)\n\tfor <qemu-devel@nongnu.org>; Mon, 25 Sep 2017 06:23:08 -0400",
            "from localhost\n\tby e06smtp14.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use\n\tOnly! Violators will be prosecuted\n\tfor <qemu-devel@nongnu.org> from <borntraeger@de.ibm.com>;\n\tMon, 25 Sep 2017 11:23:06 +0100",
            "from b06cxnps4074.portsmouth.uk.ibm.com (9.149.109.196)\n\tby e06smtp14.uk.ibm.com (192.168.101.144) with IBM ESMTP SMTP\n\tGateway: Authorized Use Only! Violators will be prosecuted; \n\tMon, 25 Sep 2017 11:23:04 +0100",
            "from d06av24.portsmouth.uk.ibm.com (d06av24.portsmouth.uk.ibm.com\n\t[9.149.105.60])\n\tby b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with\n\tESMTP id v8PAN3Cj18350330; Mon, 25 Sep 2017 10:23:03 GMT",
            "from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1])\n\tby IMSVA (Postfix) with ESMTP id E2D5842047;\n\tMon, 25 Sep 2017 11:19:07 +0100 (BST)",
            "from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1])\n\tby IMSVA (Postfix) with ESMTP id C638642041;\n\tMon, 25 Sep 2017 11:19:07 +0100 (BST)",
            "from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9])\n\tby d06av24.portsmouth.uk.ibm.com (Postfix) with ESMTPS;\n\tMon, 25 Sep 2017 11:19:07 +0100 (BST)",
            "by tuxmaker.boeblingen.de.ibm.com (Postfix, from userid 25651)\n\tid 1935A20F62C; Mon, 25 Sep 2017 12:23:03 +0200 (CEST)"
        ],
        "From": "Christian Borntraeger <borntraeger@de.ibm.com>",
        "To": "Cornelia Huck <cohuck@redhat.com>",
        "Date": "Mon, 25 Sep 2017 12:23:02 +0200",
        "X-Mailer": "git-send-email 2.9.4",
        "In-Reply-To": "<20170925102302.60587-1-borntraeger@de.ibm.com>",
        "References": "<20170925102302.60587-1-borntraeger@de.ibm.com>",
        "X-TM-AS-GCONF": "00",
        "x-cbid": "17092510-0016-0000-0000-000004EFD18E",
        "X-IBM-AV-DETECTION": "SAVI=unused REMOTE=unused XFE=unused",
        "x-cbparentid": "17092510-0017-0000-0000-0000282A1994",
        "Message-Id": "<20170925102302.60587-3-borntraeger@de.ibm.com>",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10432:, ,\n\tdefinitions=2017-09-25_04:, , signatures=0",
        "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n\tspamscore=0 suspectscore=0\n\tmalwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam\n\tadjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000\n\tdefinitions=main-1709250161",
        "X-detected-operating-system": "by eggs.gnu.org: GNU/Linux 3.x [generic] [fuzzy]",
        "X-Received-From": "148.163.158.5",
        "Subject": "[Qemu-devel] [PATCH 2/2] s390/kvm: Support for get/set of extended\n\tTOD-Clock for guest",
        "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": "Thomas Huth <thuth@redhat.com>, David Hildenbrand <david@redhat.com>,\n\tqemu-devel <qemu-devel@nongnu.org>, Alexander Graf <agraf@suse.de>,\n\tChristian Borntraeger <borntraeger@de.ibm.com>,\n\t\"Collin L. Walling\" <walling@linux.vnet.ibm.com>,\n\tRichard Henderson <rth@twiddle.net>",
        "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": "From: \"Collin L. Walling\" <walling@linux.vnet.ibm.com>\n\nProvides an interface for getting and setting the guest's extended\nTOD-Clock via a single ioctl to kvm. If the ioctl fails because it\nis not support by kvm, then we fall back to the old style of\nretrieving the clock via two ioctls.\n\nIf kvm fails to set a nonzero epoch index, then we ultimately fail\nthe migration altogether and the guest will resume normally on the\noriginal host machine.\n\nSigned-off-by: Collin L. Walling <walling@linux.vnet.ibm.com>\nReviewed-by: Eric Farman <farman@linux.vnet.ibm.com>\nReviewed-by: Claudio Imbrenda <imbrenda@linux.vnet.ibm.com>\nSigned-off-by: Christian Borntraeger <borntraeger@de.ibm.com>\n---\n hw/s390x/s390-virtio-ccw.c |  8 +++-----\n target/s390x/cpu.c         | 26 +++++++++++++++++++-------\n target/s390x/kvm-stub.c    | 10 ++++++++++\n target/s390x/kvm.c         | 35 +++++++++++++++++++++++++++++++++++\n target/s390x/kvm_s390x.h   |  2 ++\n 5 files changed, 69 insertions(+), 12 deletions(-)",
    "diff": "diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c\nindex fafbc6d..bad09f5 100644\n--- a/hw/s390x/s390-virtio-ccw.c\n+++ b/hw/s390x/s390-virtio-ccw.c\n@@ -213,13 +213,11 @@ static int gtod_load(QEMUFile *f, void *opaque, int version_id)\n \n     r = s390_set_clock(&tod_high, &tod_low);\n     if (r) {\n-        warn_report(\"Unable to set guest clock for migration: %s\",\n-                    strerror(-r));\n-        error_printf(\"Guest clock will not be restored \"\n-                     \"which could cause the guest to hang.\");\n+        error_report(\"Unable to set guest clock value. \"\n+                     \"s390_get_clock returned error %d.\\n\", r);\n     }\n \n-    return 0;\n+    return r;\n }\n \n static SaveVMHandlers savevm_gtod = {\ndiff --git a/target/s390x/cpu.c b/target/s390x/cpu.c\nindex 34538c3..c8f1219 100644\n--- a/target/s390x/cpu.c\n+++ b/target/s390x/cpu.c\n@@ -357,22 +357,34 @@ unsigned int s390_cpu_set_state(uint8_t cpu_state, S390CPU *cpu)\n \n int s390_get_clock(uint8_t *tod_high, uint64_t *tod_low)\n {\n+    int r = 0;\n+\n     if (kvm_enabled()) {\n-        return kvm_s390_get_clock(tod_high, tod_low);\n+        r = kvm_s390_get_clock_ext(tod_high, tod_low);\n+        if (r == -ENXIO) {\n+            return kvm_s390_get_clock(tod_high, tod_low);\n+        }\n+    } else {\n+        /* Fixme TCG */\n+        *tod_high = 0;\n+        *tod_low = 0;\n     }\n-    /* Fixme TCG */\n-    *tod_high = 0;\n-    *tod_low = 0;\n-    return 0;\n+\n+    return r;\n }\n \n int s390_set_clock(uint8_t *tod_high, uint64_t *tod_low)\n {\n+    int r = 0;\n+\n     if (kvm_enabled()) {\n-        return kvm_s390_set_clock(tod_high, tod_low);\n+        r = kvm_s390_set_clock_ext(tod_high, tod_low);\n+        if (r == -ENXIO) {\n+            return kvm_s390_set_clock(tod_high, tod_low);\n+        }\n     }\n     /* Fixme TCG */\n-    return 0;\n+    return r;\n }\n \n int s390_set_memory_limit(uint64_t new_limit, uint64_t *hw_limit)\ndiff --git a/target/s390x/kvm-stub.c b/target/s390x/kvm-stub.c\nindex 261e1cd..43f02c2 100644\n--- a/target/s390x/kvm-stub.c\n+++ b/target/s390x/kvm-stub.c\n@@ -68,11 +68,21 @@ int kvm_s390_get_clock(uint8_t *tod_high, uint64_t *tod_low)\n     return -ENOSYS;\n }\n \n+int kvm_s390_get_clock_ext(uint8_t *tod_high, uint64_t *tod_low)\n+{\n+    return -ENOSYS;\n+}\n+\n int kvm_s390_set_clock(uint8_t *tod_high, uint64_t *tod_low)\n {\n     return -ENOSYS;\n }\n \n+int kvm_s390_set_clock_ext(uint8_t *tod_high, uint64_t *tod_low)\n+{\n+    return -ENOSYS;\n+}\n+\n void kvm_s390_enable_css_support(S390CPU *cpu)\n {\n }\ndiff --git a/target/s390x/kvm.c b/target/s390x/kvm.c\nindex ebb75ca..ef7374c 100644\n--- a/target/s390x/kvm.c\n+++ b/target/s390x/kvm.c\n@@ -643,6 +643,25 @@ int kvm_s390_get_clock(uint8_t *tod_high, uint64_t *tod_low)\n     return kvm_vm_ioctl(kvm_state, KVM_GET_DEVICE_ATTR, &attr);\n }\n \n+int kvm_s390_get_clock_ext(uint8_t *tod_high, uint64_t *tod_low)\n+{\n+    int r;\n+\n+    struct kvm_s390_vm_tod_clock gtod;\n+\n+    struct kvm_device_attr attr = {\n+        .group = KVM_S390_VM_TOD,\n+        .attr = KVM_S390_VM_TOD_EXT,\n+        .addr = (uint64_t)(&gtod),\n+    };\n+\n+    r = kvm_vm_ioctl(kvm_state, KVM_GET_DEVICE_ATTR, &attr);\n+    *tod_high = gtod.epoch_idx;\n+    *tod_low  = gtod.tod;\n+\n+    return r;\n+}\n+\n int kvm_s390_set_clock(uint8_t *tod_high, uint64_t *tod_low)\n {\n     int r;\n@@ -663,6 +682,22 @@ int kvm_s390_set_clock(uint8_t *tod_high, uint64_t *tod_low)\n     return kvm_vm_ioctl(kvm_state, KVM_SET_DEVICE_ATTR, &attr);\n }\n \n+int kvm_s390_set_clock_ext(uint8_t *tod_high, uint64_t *tod_low)\n+{\n+    struct kvm_s390_vm_tod_clock gtod = {\n+        .epoch_idx = *tod_high,\n+        .tod  = *tod_low,\n+    };\n+\n+    struct kvm_device_attr attr = {\n+        .group = KVM_S390_VM_TOD,\n+        .attr = KVM_S390_VM_TOD_EXT,\n+        .addr = (uint64_t)(&gtod),\n+    };\n+\n+    return kvm_vm_ioctl(kvm_state, KVM_SET_DEVICE_ATTR, &attr);\n+}\n+\n /**\n  * kvm_s390_mem_op:\n  * @addr:      the logical start address in guest memory\ndiff --git a/target/s390x/kvm_s390x.h b/target/s390x/kvm_s390x.h\nindex 2d594bd..501fc5a 100644\n--- a/target/s390x/kvm_s390x.h\n+++ b/target/s390x/kvm_s390x.h\n@@ -29,7 +29,9 @@ int kvm_s390_vcpu_interrupt_post_load(S390CPU *cpu);\n int kvm_s390_get_ri(void);\n int kvm_s390_get_gs(void);\n int kvm_s390_get_clock(uint8_t *tod_high, uint64_t *tod_clock);\n+int kvm_s390_get_clock_ext(uint8_t *tod_high, uint64_t *tod_clock);\n int kvm_s390_set_clock(uint8_t *tod_high, uint64_t *tod_clock);\n+int kvm_s390_set_clock_ext(uint8_t *tod_high, uint64_t *tod_clock);\n void kvm_s390_enable_css_support(S390CPU *cpu);\n int kvm_s390_assign_subch_ioeventfd(EventNotifier *notifier, uint32_t sch,\n                                     int vq, bool assign);\n",
    "prefixes": [
        "2/2"
    ]
}