get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 703141,
    "url": "http://patchwork.ozlabs.org/api/patches/703141/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/1481047767-60255-4-git-send-email-xinhui.pan@linux.vnet.ibm.com/",
    "project": {
        "id": 2,
        "url": "http://patchwork.ozlabs.org/api/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": "<1481047767-60255-4-git-send-email-xinhui.pan@linux.vnet.ibm.com>",
    "list_archive_url": "https://lore.kernel.org/linuxppc-dev/1481047767-60255-4-git-send-email-xinhui.pan@linux.vnet.ibm.com/",
    "date": "2016-12-06T18:09:24",
    "name": "[v9,3/6] powerpc: lib/locks.c: Add cpu yield/wake helper function",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "a319d129119d8e2e09c4e3d01351c88d0f4334fa",
    "submitter": {
        "id": 67833,
        "url": "http://patchwork.ozlabs.org/api/people/67833/?format=api",
        "name": "xinhui",
        "email": "xinhui.pan@linux.vnet.ibm.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/1481047767-60255-4-git-send-email-xinhui.pan@linux.vnet.ibm.com/mbox/",
    "series": [],
    "comments": "http://patchwork.ozlabs.org/api/patches/703141/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/703141/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"
        ],
        "Received": [
            "from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68])\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 3tY2Hc0ylRz9vcG\n\tfor <patchwork-incoming@ozlabs.org>;\n\tWed,  7 Dec 2016 00:18:04 +1100 (AEDT)",
            "from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 3tY2Hc01fZzDw7w\n\tfor <patchwork-incoming@ozlabs.org>;\n\tWed,  7 Dec 2016 00:18:04 +1100 (AEDT)",
            "from mx0a-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com\n\t[148.163.158.5])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 3tY29x4y2CzDvkS\n\tfor <linuxppc-dev@lists.ozlabs.org>;\n\tWed,  7 Dec 2016 00:13:09 +1100 (AEDT)",
            "from pps.filterd (m0098417.ppops.net [127.0.0.1])\n\tby mx0a-001b2d01.pphosted.com (8.16.0.17/8.16.0.17) with SMTP id\n\tuB6D5V8K121233\n\tfor <linuxppc-dev@lists.ozlabs.org>; Tue, 6 Dec 2016 08:13:07 -0500",
            "from e23smtp03.au.ibm.com (e23smtp03.au.ibm.com [202.81.31.145])\n\tby mx0a-001b2d01.pphosted.com with ESMTP id 275rkx1sm8-1\n\t(version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT)\n\tfor <linuxppc-dev@lists.ozlabs.org>; Tue, 06 Dec 2016 08:13:06 -0500",
            "from localhost\n\tby e23smtp03.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use\n\tOnly! Violators will be prosecuted\n\tfor <linuxppc-dev@lists.ozlabs.org> from\n\t<xinhui.pan@linux.vnet.ibm.com>; Tue, 6 Dec 2016 23:13:04 +1000",
            "from d23dlp02.au.ibm.com (202.81.31.213)\n\tby e23smtp03.au.ibm.com (202.81.31.209) with IBM ESMTP SMTP Gateway:\n\tAuthorized Use Only! Violators will be prosecuted; \n\tTue, 6 Dec 2016 23:13:03 +1000",
            "from d23relay06.au.ibm.com (d23relay06.au.ibm.com [9.185.63.219])\n\tby d23dlp02.au.ibm.com (Postfix) with ESMTP id 7A6992BB005B\n\tfor <linuxppc-dev@lists.ozlabs.org>;\n\tWed,  7 Dec 2016 00:13:02 +1100 (EST)",
            "from d23av02.au.ibm.com (d23av02.au.ibm.com [9.190.235.138])\n\tby d23relay06.au.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id\n\tuB6DD2gn53739570\n\tfor <linuxppc-dev@lists.ozlabs.org>; Wed, 7 Dec 2016 00:13:02 +1100",
            "from d23av02.au.ibm.com (localhost [127.0.0.1])\n\tby d23av02.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id\n\tuB6DD1dS000465\n\tfor <linuxppc-dev@lists.ozlabs.org>; Wed, 7 Dec 2016 00:13:02 +1100",
            "from ltcalpine2-lp13.aus.stglabs.ibm.com\n\t(ltcalpine2-lp13.aus.stglabs.ibm.com [9.40.195.196])\n\tby d23av02.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id\n\tuB6DCnYw032667; Wed, 7 Dec 2016 00:12:59 +1100"
        ],
        "From": "Pan Xinhui <xinhui.pan@linux.vnet.ibm.com>",
        "To": "linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org",
        "Subject": "[PATCH v9 3/6] powerpc: lib/locks.c: Add cpu yield/wake helper\n\tfunction",
        "Date": "Tue,  6 Dec 2016 13:09:24 -0500",
        "X-Mailer": "git-send-email 2.4.11",
        "In-Reply-To": "<1481047767-60255-1-git-send-email-xinhui.pan@linux.vnet.ibm.com>",
        "References": "<1481047767-60255-1-git-send-email-xinhui.pan@linux.vnet.ibm.com>",
        "X-TM-AS-MML": "disable",
        "X-Content-Scanned": "Fidelis XPS MAILER",
        "x-cbid": "16120613-0008-0000-0000-000000EE0BEA",
        "X-IBM-AV-DETECTION": "SAVI=unused REMOTE=unused XFE=unused",
        "x-cbparentid": "16120613-0009-0000-0000-000008A6516F",
        "Message-Id": "<1481047767-60255-4-git-send-email-xinhui.pan@linux.vnet.ibm.com>",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10432:, ,\n\tdefinitions=2016-12-06_07:, , signatures=0",
        "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=1\n\tspamscore=1 suspectscore=0\n\tmalwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam\n\tadjust=0 reason=mlx scancount=1 engine=8.0.1-1609300000\n\tdefinitions=main-1612060208",
        "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": "xinhui.pan@linux.vnet.ibm.com, peterz@infradead.org, boqun.feng@gmail.com,\n\tvirtualization@lists.linux-foundation.org, mingo@redhat.com,\n\tpaulus@samba.org, longman@redhat.com, paulmck@linux.vnet.ibm.com",
        "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": "Add two corresponding helper functions to support pv-qspinlock.\n\nFor normal use, __spin_yield_cpu will confer current vcpu slices to the\ntarget vcpu(say, a lock holder). If target vcpu is not specified or it\nis in running state, such conferging to lpar happens or not depends.\n\nBecause hcall itself will introduce latency and a little overhead. And we\ndo NOT want to suffer any latency on some cases, e.g. in interrupt handler.\nThe second parameter *confer* can indicate such case.\n\n__spin_wake_cpu is simpiler, it will wake up one vcpu regardless of its\ncurrent vcpu state.\n\nSigned-off-by: Pan Xinhui <xinhui.pan@linux.vnet.ibm.com>\n---\n arch/powerpc/include/asm/spinlock.h |  4 +++\n arch/powerpc/lib/locks.c            | 57 +++++++++++++++++++++++++++++++++++++\n 2 files changed, 61 insertions(+)",
    "diff": "diff --git a/arch/powerpc/include/asm/spinlock.h b/arch/powerpc/include/asm/spinlock.h\nindex 954099e..6426bd5 100644\n--- a/arch/powerpc/include/asm/spinlock.h\n+++ b/arch/powerpc/include/asm/spinlock.h\n@@ -64,9 +64,13 @@ static inline bool vcpu_is_preempted(int cpu)\n /* We only yield to the hypervisor if we are in shared processor mode */\n #define SHARED_PROCESSOR (lppaca_shared_proc(local_paca->lppaca_ptr))\n extern void __spin_yield(arch_spinlock_t *lock);\n+extern void __spin_yield_cpu(int cpu, int confer);\n+extern void __spin_wake_cpu(int cpu);\n extern void __rw_yield(arch_rwlock_t *lock);\n #else /* SPLPAR */\n #define __spin_yield(x)        barrier()\n+#define __spin_yield_cpu(x, y) barrier()\n+#define __spin_wake_cpu(x) barrier()\n #define __rw_yield(x)  barrier()\n #define SHARED_PROCESSOR       0\n #endif\ndiff --git a/arch/powerpc/lib/locks.c b/arch/powerpc/lib/locks.c\nindex 8f6dbb0..dff0bfa 100644\n--- a/arch/powerpc/lib/locks.c\n+++ b/arch/powerpc/lib/locks.c\n@@ -23,6 +23,63 @@\n #include <asm/hvcall.h>\n #include <asm/smp.h>\n \n+/*\n+ * confer our slices to a specified cpu and return. If it is in running state\n+ * or cpu is -1, then we will check confer. If confer is NULL, we will return\n+ * otherwise we confer our slices to lpar.\n+ */\n+void __spin_yield_cpu(int cpu, int confer)\n+{\n+\tunsigned int yield_count;\n+\n+\tif (cpu == -1)\n+\t\tgoto yield_to_lpar;\n+\n+\tBUG_ON(cpu >= nr_cpu_ids);\n+\tyield_count = be32_to_cpu(lppaca_of(cpu).yield_count);\n+\n+\t/* if cpu is running, confer slices to lpar conditionally*/\n+\tif ((yield_count & 1) == 0)\n+\t\tgoto yield_to_lpar;\n+\n+\tplpar_hcall_norets(H_CONFER,\n+\t\tget_hard_smp_processor_id(cpu), yield_count);\n+\treturn;\n+\n+yield_to_lpar:\n+\tif (confer)\n+\t\tplpar_hcall_norets(H_CONFER, -1, 0);\n+}\n+EXPORT_SYMBOL_GPL(__spin_yield_cpu);\n+\n+void __spin_wake_cpu(int cpu)\n+{\n+\tBUG_ON(cpu >= nr_cpu_ids);\n+\t/*\n+\t * NOTE: we should always do this hcall regardless of\n+\t * the yield_count of the holder_cpu.\n+\t * as thers might be a case like below;\n+\t *\tCPU 1\t\t\tCPU 2\n+\t *\t\t\t\tyielded = true\n+\t * if (yielded)\n+\t *\t__spin_wake_cpu()\n+\t *\t\t\t\t__spin_yield_cpu()\n+\t *\n+\t * So we might lose a wake if we check the yield_count and\n+\t * return directly if the holder_cpu is running.\n+\t * IOW. do NOT code like below.\n+\t *\tyield_count = be32_to_cpu(lppaca_of(cpu).yield_count);\n+\t *\tif ((yield_count & 1) == 0)\n+\t *\t\treturn;\n+\t *\n+\t * a PROD hcall marks the target_cpu proded, which cause the next cede\n+\t * or confer called on the target_cpu invalid.\n+\t */\n+\tplpar_hcall_norets(H_PROD,\n+\t\tget_hard_smp_processor_id(cpu));\n+}\n+EXPORT_SYMBOL_GPL(__spin_wake_cpu);\n+\n #ifndef CONFIG_QUEUED_SPINLOCKS\n void __spin_yield(arch_spinlock_t *lock)\n {\n",
    "prefixes": [
        "v9",
        "3/6"
    ]
}