get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 766422,
    "url": "http://patchwork.ozlabs.org/api/1.2/patches/766422/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20170524095719.GB18900@fergus.ozlabs.ibm.com/",
    "project": {
        "id": 2,
        "url": "http://patchwork.ozlabs.org/api/1.2/projects/2/?format=api",
        "name": "Linux PPC development",
        "link_name": "linuxppc-dev",
        "list_id": "linuxppc-dev.lists.ozlabs.org",
        "list_email": "linuxppc-dev@lists.ozlabs.org",
        "web_url": "https://github.com/linuxppc/wiki/wiki",
        "scm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git",
        "webscm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/",
        "list_archive_url": "https://lore.kernel.org/linuxppc-dev/",
        "list_archive_url_format": "https://lore.kernel.org/linuxppc-dev/{}/",
        "commit_url_format": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id={}"
    },
    "msgid": "<20170524095719.GB18900@fergus.ozlabs.ibm.com>",
    "list_archive_url": "https://lore.kernel.org/linuxppc-dev/20170524095719.GB18900@fergus.ozlabs.ibm.com/",
    "date": "2017-05-24T09:57:19",
    "name": "[1/2] KVM: PPC: Book3S HV: Cope with host using large decrementer mode",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "7fdeffdce6681299212958cdb6fd940e20b99c2c",
    "submitter": {
        "id": 67079,
        "url": "http://patchwork.ozlabs.org/api/1.2/people/67079/?format=api",
        "name": "Paul Mackerras",
        "email": "paulus@ozlabs.org"
    },
    "delegate": {
        "id": 13,
        "url": "http://patchwork.ozlabs.org/api/1.2/users/13/?format=api",
        "username": "paulus",
        "first_name": "Paul",
        "last_name": "Mackerras",
        "email": "paulus@samba.org"
    },
    "mbox": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20170524095719.GB18900@fergus.ozlabs.ibm.com/mbox/",
    "series": [],
    "comments": "http://patchwork.ozlabs.org/api/patches/766422/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/766422/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>",
        "X-Original-To": [
            "patchwork-incoming@ozlabs.org",
            "linuxppc-dev@lists.ozlabs.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@ozlabs.org",
            "linuxppc-dev@lists.ozlabs.org",
            "linuxppc-dev@ozlabs.org"
        ],
        "Received": [
            "from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\t(using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3wXnxr4m4mz9sP0\n\tfor <patchwork-incoming@ozlabs.org>;\n\tWed, 24 May 2017 20:02:24 +1000 (AEST)",
            "from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 3wXnxr1kGhzDqkY\n\tfor <patchwork-incoming@ozlabs.org>;\n\tWed, 24 May 2017 20:02:24 +1000 (AEST)",
            "from ozlabs.org (ozlabs.org [IPv6:2401:3900:2:1::2])\n\t(using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 3wXnsD6JnNzDqdW\n\tfor <linuxppc-dev@lists.ozlabs.org>;\n\tWed, 24 May 2017 19:58:24 +1000 (AEST)",
            "by ozlabs.org (Postfix)\n\tid 3wXnsD58T9z9sPD; Wed, 24 May 2017 19:58:24 +1000 (AEST)",
            "by ozlabs.org (Postfix, from userid 1003)\n\tid 3wXnsD4lSBz9sP0; Wed, 24 May 2017 19:58:24 +1000 (AEST)"
        ],
        "Date": "Wed, 24 May 2017 19:57:19 +1000",
        "From": "Paul Mackerras <paulus@ozlabs.org>",
        "To": "linuxppc-dev@ozlabs.org, kvm@vger.kernel.org",
        "Subject": "[PATCH 1/2] KVM: PPC: Book3S HV: Cope with host using large\n\tdecrementer mode",
        "Message-ID": "<20170524095719.GB18900@fergus.ozlabs.ibm.com>",
        "References": "<20170524095531.GA18900@fergus.ozlabs.ibm.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=us-ascii",
        "Content-Disposition": "inline",
        "In-Reply-To": "<20170524095531.GA18900@fergus.ozlabs.ibm.com>",
        "User-Agent": "Mutt/1.5.24 (2015-08-30)",
        "X-BeenThere": "linuxppc-dev@lists.ozlabs.org",
        "X-Mailman-Version": "2.1.23",
        "Precedence": "list",
        "List-Id": "Linux on PowerPC Developers Mail List\n\t<linuxppc-dev.lists.ozlabs.org>",
        "List-Unsubscribe": "<https://lists.ozlabs.org/options/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.ozlabs.org/pipermail/linuxppc-dev/>",
        "List-Post": "<mailto:linuxppc-dev@lists.ozlabs.org>",
        "List-Help": "<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=help>",
        "List-Subscribe": "<https://lists.ozlabs.org/listinfo/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=subscribe>",
        "Cc": "kvm-ppc@vger.kernel.org",
        "Errors-To": "linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org",
        "Sender": "\"Linuxppc-dev\"\n\t<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>"
    },
    "content": "POWER9 introduces a new mode for the decrementer register, called\nlarge decrementer mode, in which the decrementer counter is 56 bits\nwide rather than 32, and reads sign-extend rather than zero-extending.\n\nSince KVM code reads and writes the host decrementer value in a few\nplaces, it needs to be aware of the need to treat the decrementer\nvalue as a 64-bit quantity, and only do a 32-bit sign extension when\nlarge decrementer mode is not in effect.  To enable the sign extension\nto be removed in large decrementer mode, we use a CPU feature bit to\nindicate that large decrementer mode is in effect.  This CPU feature\nbit is derived from the ibm,pa-features property in the firmware\ndevice tree.  This bit is already set by firmware in the device tree\nthat the kernel uses when running as a host.  We change the kernel\ntimer code to use this bit and enable large decrementer mode whenever\nit is set (even if firmware tells us that the large decrementer mode\nonly gives us 32 bits) so that we get the sign extension in hardware.\n\nFor now, the guest still uses the decrementer in small decrementer\n(32-bit) mode.\n\nThis is partly based on an earlier patch by Oliver O'Halloran.\n\nCc: stable@vger.kernel.org # v4.10+\nSigned-off-by: Paul Mackerras <paulus@ozlabs.org>\n---\n arch/powerpc/include/asm/cputable.h     |  4 +++-\n arch/powerpc/kernel/prom.c              |  1 +\n arch/powerpc/kernel/time.c              |  7 ++-----\n arch/powerpc/kvm/book3s_hv_interrupts.S |  2 ++\n arch/powerpc/kvm/book3s_hv_rmhandlers.S | 23 +++++++++++++++++------\n 5 files changed, 25 insertions(+), 12 deletions(-)",
    "diff": "diff --git a/arch/powerpc/include/asm/cputable.h b/arch/powerpc/include/asm/cputable.h\nindex c2d5095..99c3c56 100644\n--- a/arch/powerpc/include/asm/cputable.h\n+++ b/arch/powerpc/include/asm/cputable.h\n@@ -216,6 +216,7 @@ enum {\n #define CPU_FTR_PMAO_BUG\t\tLONG_ASM_CONST(0x1000000000000000)\n #define CPU_FTR_SUBCORE\t\t\tLONG_ASM_CONST(0x2000000000000000)\n #define CPU_FTR_POWER9_DD1\t\tLONG_ASM_CONST(0x4000000000000000)\n+#define CPU_FTR_LARGE_DEC\t\tLONG_ASM_CONST(0x8000000000000000)\n \n #ifndef __ASSEMBLY__\n \n@@ -496,7 +497,8 @@ enum {\n \t    (CPU_FTRS_POWER4 | CPU_FTRS_PPC970 | CPU_FTRS_POWER5 | \\\n \t     CPU_FTRS_POWER6 | CPU_FTRS_POWER7 | CPU_FTRS_POWER8E | \\\n \t     CPU_FTRS_POWER8 | CPU_FTRS_POWER8_DD1 | CPU_FTRS_CELL | \\\n-\t     CPU_FTRS_PA6T | CPU_FTR_VSX | CPU_FTRS_POWER9 | CPU_FTRS_POWER9_DD1)\n+\t     CPU_FTRS_PA6T | CPU_FTR_VSX | CPU_FTRS_POWER9 | \\\n+\t     CPU_FTRS_POWER9_DD1 | CPU_FTR_LARGE_DEC)\n #endif\n #else\n enum {\ndiff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c\nindex 40c4887..b315dff 100644\n--- a/arch/powerpc/kernel/prom.c\n+++ b/arch/powerpc/kernel/prom.c\n@@ -165,6 +165,7 @@ static struct ibm_pa_feature {\n \t{ .pabyte = 1,  .pabit = 1, .invert = 1, .cpu_features = CPU_FTR_NODSISRALIGN },\n \t{ .pabyte = 5,  .pabit = 0, .cpu_features  = CPU_FTR_REAL_LE,\n \t\t\t\t    .cpu_user_ftrs = PPC_FEATURE_TRUE_LE },\n+\t{ .pabyte = 24, .pabit = 0, .cpu_features = CPU_FTR_LARGE_DEC },\n \t/*\n \t * If the kernel doesn't support TM (ie CONFIG_PPC_TRANSACTIONAL_MEM=n),\n \t * we don't want to turn on TM here, so we use the *_COMP versions\ndiff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c\nindex 2b33cfa..5d13f06 100644\n--- a/arch/powerpc/kernel/time.c\n+++ b/arch/powerpc/kernel/time.c\n@@ -946,10 +946,7 @@ static void register_decrementer_clockevent(int cpu)\n \n static void enable_large_decrementer(void)\n {\n-\tif (!cpu_has_feature(CPU_FTR_ARCH_300))\n-\t\treturn;\n-\n-\tif (decrementer_max <= DECREMENTER_DEFAULT_MAX)\n+\tif (!cpu_has_feature(CPU_FTR_LARGE_DEC))\n \t\treturn;\n \n \t/*\n@@ -966,7 +963,7 @@ static void __init set_decrementer_max(void)\n \tu32 bits = 32;\n \n \t/* Prior to ISAv3 the decrementer is always 32 bit */\n-\tif (!cpu_has_feature(CPU_FTR_ARCH_300))\n+\tif (!cpu_has_feature(CPU_FTR_LARGE_DEC))\n \t\treturn;\n \n \tcpu = of_find_node_by_type(NULL, \"cpu\");\ndiff --git a/arch/powerpc/kvm/book3s_hv_interrupts.S b/arch/powerpc/kvm/book3s_hv_interrupts.S\nindex 0fdc4a2..6e1d75f 100644\n--- a/arch/powerpc/kvm/book3s_hv_interrupts.S\n+++ b/arch/powerpc/kvm/book3s_hv_interrupts.S\n@@ -124,7 +124,9 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)\n \tmfspr\tr8,SPRN_DEC\n \tmftb\tr7\n \tmtspr\tSPRN_HDEC,r8\n+BEGIN_FTR_SECTION\n \textsw\tr8,r8\n+END_FTR_SECTION_IFCLR(CPU_FTR_LARGE_DEC)\n \tadd\tr8,r8,r7\n \tstd\tr8,HSTATE_DECEXP(r13)\n \ndiff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S\nindex bdb3f76..bcb5401 100644\n--- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S\n+++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S\n@@ -214,6 +214,8 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)\n kvmppc_primary_no_guest:\n \t/* We handle this much like a ceded vcpu */\n \t/* put the HDEC into the DEC, since HDEC interrupts don't wake us */\n+\t/* HDEC may be larger than DEC for arch >= v3.00, but since the */\n+\t/* HDEC value came from DEC in the first place, it will fit */\n \tmfspr\tr3, SPRN_HDEC\n \tmtspr\tSPRN_DEC, r3\n \t/*\n@@ -295,8 +297,11 @@ kvm_novcpu_wakeup:\n \n \t/* See if our timeslice has expired (HDEC is negative) */\n \tmfspr\tr0, SPRN_HDEC\n+BEGIN_FTR_SECTION\n+\textsw\tr0, r0\n+END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)\n \tli\tr12, BOOK3S_INTERRUPT_HV_DECREMENTER\n-\tcmpwi\tr0, 0\n+\tcmpdi\tr0, 0\n \tblt\tkvm_novcpu_exit\n \n \t/* Got an IPI but other vcpus aren't yet exiting, must be a latecomer */\n@@ -390,8 +395,8 @@ kvm_secondary_got_guest:\n \tlbz\tr4, HSTATE_PTID(r13)\n \tcmpwi\tr4, 0\n \tbne\t63f\n-\tlis\tr6, 0x7fff\n-\tori\tr6, r6, 0xffff\n+\tLOAD_REG_ADDR(r6, decrementer_max)\n+\tld\tr6, 0(r6)\n \tmtspr\tSPRN_HDEC, r6\n \t/* and set per-LPAR registers, if doing dynamic micro-threading */\n \tld\tr6, HSTATE_SPLIT_MODE(r13)\n@@ -968,7 +973,10 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_ARCH_300)\n \n \t/* Check if HDEC expires soon */\n \tmfspr\tr3, SPRN_HDEC\n-\tcmpwi\tr3, 512\t\t/* 1 microsecond */\n+BEGIN_FTR_SECTION\n+\textsw\tr3, r3\n+END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)\n+\tcmpdi\tr3, 512\t\t/* 1 microsecond */\n \tblt\thdec_soon\n \n #ifdef CONFIG_KVM_XICS\n@@ -2366,12 +2374,15 @@ END_FTR_SECTION_IFSET(CPU_FTR_TM)\n \tmfspr\tr3, SPRN_DEC\n \tmfspr\tr4, SPRN_HDEC\n \tmftb\tr5\n-\tcmpw\tr3, r4\n+\textsw\tr3, r3\n+BEGIN_FTR_SECTION\n+\textsw\tr4, r4\n+END_FTR_SECTION_IFSET(CPU_FTR_LARGE_DEC)\n+\tcmpd\tr3, r4\n \tble\t67f\n \tmtspr\tSPRN_DEC, r4\n 67:\n \t/* save expiry time of guest decrementer */\n-\textsw\tr3, r3\n \tadd\tr3, r3, r5\n \tld\tr4, HSTATE_KVM_VCPU(r13)\n \tld\tr5, HSTATE_KVM_VCORE(r13)\n",
    "prefixes": [
        "1/2"
    ]
}