get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 786780,
    "url": "http://patchwork.ozlabs.org/api/1.2/patches/786780/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/a6d2238b-68ba-ed37-df09-2b06c9d3684d@linux.vnet.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": "<a6d2238b-68ba-ed37-df09-2b06c9d3684d@linux.vnet.ibm.com>",
    "list_archive_url": "https://lore.kernel.org/linuxppc-dev/a6d2238b-68ba-ed37-df09-2b06c9d3684d@linux.vnet.ibm.com/",
    "date": "2017-07-11T17:36:25",
    "name": "[V8,2/2] powerpc/numa: Update CPU topology when VPHN enabled",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "8687c89119ff54bb0fffb49aaf0b3e1b93b6e881",
    "submitter": {
        "id": 65104,
        "url": "http://patchwork.ozlabs.org/api/1.2/people/65104/?format=api",
        "name": "Michael Bringmann",
        "email": "mwb@linux.vnet.ibm.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/a6d2238b-68ba-ed37-df09-2b06c9d3684d@linux.vnet.ibm.com/mbox/",
    "series": [],
    "comments": "http://patchwork.ozlabs.org/api/patches/786780/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/786780/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 [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 3x6Trp2gVQz9s0Z\n\tfor <patchwork-incoming@ozlabs.org>;\n\tWed, 12 Jul 2017 03:40:58 +1000 (AEST)",
            "from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 3x6Trp1L0ZzDqgR\n\tfor <patchwork-incoming@ozlabs.org>;\n\tWed, 12 Jul 2017 03:40:58 +1000 (AEST)",
            "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 3x6Tm40VKQzDqgT\n\tfor <linuxppc-dev@lists.ozlabs.org>;\n\tWed, 12 Jul 2017 03:36:51 +1000 (AEST)",
            "from pps.filterd (m0098414.ppops.net [127.0.0.1])\n\tby mx0b-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id\n\tv6BHY6qx111234\n\tfor <linuxppc-dev@lists.ozlabs.org>; Tue, 11 Jul 2017 13:36:49 -0400",
            "from e13.ny.us.ibm.com (e13.ny.us.ibm.com [129.33.205.203])\n\tby mx0b-001b2d01.pphosted.com with ESMTP id 2bn0mxehmp-1\n\t(version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT)\n\tfor <linuxppc-dev@lists.ozlabs.org>; Tue, 11 Jul 2017 13:36:49 -0400",
            "from localhost\n\tby e13.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use\n\tOnly! Violators will be prosecuted\n\tfor <linuxppc-dev@lists.ozlabs.org> from <mwb@linux.vnet.ibm.com>;\n\tTue, 11 Jul 2017 13:36:48 -0400",
            "from b01cxnp23033.gho.pok.ibm.com (9.57.198.28)\n\tby e13.ny.us.ibm.com (146.89.104.200) with IBM ESMTP SMTP Gateway:\n\tAuthorized Use Only! Violators will be prosecuted; \n\tTue, 11 Jul 2017 13:36:28 -0400",
            "from b01ledav003.gho.pok.ibm.com (b01ledav003.gho.pok.ibm.com\n\t[9.57.199.108])\n\tby b01cxnp23033.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP\n\tid v6BHaRPe2752936; Tue, 11 Jul 2017 17:36:27 GMT",
            "from b01ledav003.gho.pok.ibm.com (unknown [127.0.0.1])\n\tby IMSVA (Postfix) with ESMTP id 5C2B7B204E;\n\tTue, 11 Jul 2017 13:33:58 -0400 (EDT)",
            "from oc1554177480.ibm.com (unknown [9.53.92.155])\n\tby b01ledav003.gho.pok.ibm.com (Postfix) with ESMTP id CA24DB204D;\n\tTue, 11 Jul 2017 13:33:56 -0400 (EDT)"
        ],
        "To": "linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org",
        "In-Reply-To": "<e9fc1b4b-7876-48ec-a004-b3a6f376ed0e@linux.vnet.ibm.com>",
        "From": "Michael Bringmann <mwb@linux.vnet.ibm.com>",
        "Subject": "[PATCH V8 2/2] powerpc/numa: Update CPU topology when VPHN enabled",
        "Organization": "IBM Linux Technology Center",
        "Date": "Tue, 11 Jul 2017 12:36:25 -0500",
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.1.0",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=utf-8",
        "Content-Language": "en-US",
        "Content-Transfer-Encoding": "7bit",
        "X-TM-AS-GCONF": "00",
        "x-cbid": "17071117-0008-0000-0000-0000025C272E",
        "X-IBM-SpamModules-Scores": "",
        "X-IBM-SpamModules-Versions": "BY=3.00007350; HX=3.00000241; KW=3.00000007;\n\tPH=3.00000004; SC=3.00000214; SDB=6.00886111; UDB=6.00442285;\n\tIPR=6.00666261; \n\tBA=6.00005468; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009;\n\tZB=6.00000000; \n\tZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00016181;\n\tXFM=3.00000015; UTC=2017-07-11 17:36:46",
        "X-IBM-AV-DETECTION": "SAVI=unused REMOTE=unused XFE=unused",
        "x-cbparentid": "17071117-0009-0000-0000-000035FE64BC",
        "Message-Id": "<a6d2238b-68ba-ed37-df09-2b06c9d3684d@linux.vnet.ibm.com>",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10432:, ,\n\tdefinitions=2017-07-11_09:, , 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-1706020000\n\tdefinitions=main-1707110281",
        "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": "Tyrel Datwyler <tyreld@linux.vnet.ibm.com>,\n\tAndrew Donnellan <andrew.donnellan@au1.ibm.com>,\n\tSahil Mehta <sahilmehta17@gmail.com>,\n\tRashmica Gupta <rashmicy@gmail.com>, \n\tReza Arbab <arbab@linux.vnet.ibm.com>, Ingo Molnar <mingo@kernel.org>,\n\tJohn Allen <jallen@linux.vnet.ibm.com>,\n\tMichael Bringmann <mwb@linux.vnet.ibm.com>,\n\tPaul Mackerras <paulus@samba.org>, \n\tNathan Fontenot <nfont@linux.vnet.ibm.com>,\n\tBharata B Rao <bharata@linux.vnet.ibm.com>,\n\tShailendra Singh <shailendras@nvidia.com>,\n\tThomas Gleixner <tglx@linutronix.de>,\n\tSebastian Andrzej Siewior <bigeasy@linutronix.de>,\n\t\"Aneesh Kumar K.V\" <aneesh.kumar@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": "powerpc/numa: Correct the currently broken capability to set the\ntopology for shared CPUs in LPARs.  At boot time for shared CPU\nlpars, the topology for each shared CPU is set to node zero, however,\nthis is now updated correctly using the Virtual Processor Home Node\n(VPHN) capabilities information provided by the pHyp.\n\nAlso, update initialization checks for device-tree attributes to\nindependently recognize PRRN or VPHN usage.\n\nSigned-off-by: Michael Bringmann <mwb@linux.vnet.ibm.com>\n---\nChanges in V8:\n  -- Fix a conditional compile bug.\n---\n arch/powerpc/include/asm/topology.h          |   14 ++++++\n arch/powerpc/mm/numa.c                       |   64 +++++++++++++++++++++++---\n arch/powerpc/platforms/pseries/dlpar.c       |    2 +\n arch/powerpc/platforms/pseries/hotplug-cpu.c |    2 +\n 4 files changed, 75 insertions(+), 7 deletions(-)",
    "diff": "diff --git a/arch/powerpc/include/asm/topology.h b/arch/powerpc/include/asm/topology.h\nindex 03f64f2..3c578df 100644\n--- a/arch/powerpc/include/asm/topology.h\n+++ b/arch/powerpc/include/asm/topology.h\n@@ -93,6 +93,20 @@ static inline int prrn_is_enabled(void)\n }\n #endif /* CONFIG_NUMA && CONFIG_PPC_SPLPAR */\n \n+#if defined(CONFIG_HOTPLUG_CPU) || defined(CONFIG_NEED_MULTIPLE_NODES)\n+#if defined(CONFIG_PPC_SPLPAR)\n+extern int timed_topology_update(int nsecs);\n+#else\n+#define\ttimed_topology_update(nsecs)\t0\n+#endif /* CONFIG_PPC_SPLPAR */\n+#endif /* CONFIG_HOTPLUG_CPU || CONFIG_NEED_MULTIPLE_NODES */\n+\n+#if defined(CONFIG_PPC_SPLPAR)\n+extern void shared_topology_update(void);\n+#else\n+#define\tshared_topology_update()\t0\n+#endif /* CONFIG_PPC_SPLPAR */\n+\n #include <asm-generic/topology.h>\n \n #ifdef CONFIG_SMP\ndiff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c\nindex 0746d93..cf5992d 100644\n--- a/arch/powerpc/mm/numa.c\n+++ b/arch/powerpc/mm/numa.c\n@@ -29,6 +29,7 @@\n #include <linux/seq_file.h>\n #include <linux/uaccess.h>\n #include <linux/slab.h>\n+#include <linux/sched.h>\n #include <asm/cputhreads.h>\n #include <asm/sparsemem.h>\n #include <asm/prom.h>\n@@ -935,7 +936,7 @@ void __init initmem_init(void)\n \n \t/*\n \t * Reduce the possible NUMA nodes to the online NUMA nodes,\n-\t * since we do not support node hotplug. This ensures that  we\n+\t * since we do not support node hotplug. This ensures that we\n \t * lower the maximum NUMA node ID to what is actually present.\n \t */\n \tnodes_and(node_possible_map, node_possible_map, node_online_map);\n@@ -1179,11 +1180,32 @@ struct topology_update_data {\n \tint new_nid;\n };\n \n+#define\tTOPOLOGY_DEF_TIMER_SECS\t\t60\n+\n static u8 vphn_cpu_change_counts[NR_CPUS][MAX_DISTANCE_REF_POINTS];\n static cpumask_t cpu_associativity_changes_mask;\n static int vphn_enabled;\n static int prrn_enabled;\n static void reset_topology_timer(void);\n+static int topology_timer_secs = TOPOLOGY_DEF_TIMER_SECS;\n+static int topology_inited;\n+static int topology_update_needed;\n+\n+/*\n+ * Change polling interval for associativity changes.\n+ */\n+int timed_topology_update(int nsecs)\n+{\n+\tif (nsecs > 0)\n+\t\ttopology_timer_secs = nsecs;\n+\telse\n+\t\ttopology_timer_secs = TOPOLOGY_DEF_TIMER_SECS;\n+\n+\tif (vphn_enabled)\n+\t\treset_topology_timer();\n+\n+\treturn 0;\n+}\n \n /*\n  * Store the current values of the associativity change counters in the\n@@ -1277,6 +1299,12 @@ static long vphn_get_associativity(unsigned long cpu,\n \t\t\t\"hcall_vphn() experienced a hardware fault \"\n \t\t\t\"preventing VPHN. Disabling polling...\\n\");\n \t\tstop_topology_update();\n+\t\tbreak;\n+\tcase H_SUCCESS:\n+\t\tprintk(KERN_INFO\n+\t\t\t\"VPHN hcall succeeded. Reset polling...\\n\");\n+\t\ttimed_topology_update(0);\n+\t\tbreak;\n \t}\n \n \treturn rc;\n@@ -1354,8 +1382,11 @@ int numa_update_cpu_topology(bool cpus_locked)\n \tstruct device *dev;\n \tint weight, new_nid, i = 0;\n \n-\tif (!prrn_enabled && !vphn_enabled)\n+\tif (!prrn_enabled && !vphn_enabled) {\n+\t\tif (!topology_inited)\n+\t\t\ttopology_update_needed = 1;\n \t\treturn 0;\n+\t}\n \n \tweight = cpumask_weight(&cpu_associativity_changes_mask);\n \tif (!weight)\n@@ -1394,6 +1425,8 @@ int numa_update_cpu_topology(bool cpus_locked)\n \t\t\tcpumask_andnot(&cpu_associativity_changes_mask,\n \t\t\t\t\t&cpu_associativity_changes_mask,\n \t\t\t\t\tcpu_sibling_mask(cpu));\n+\t\t\tpr_info(\"Assoc chg gives same node %d for cpu%d\\n\",\n+\t\t\t\t\tnew_nid, cpu);\n \t\t\tcpu = cpu_last_thread_sibling(cpu);\n \t\t\tcontinue;\n \t\t}\n@@ -1410,6 +1443,9 @@ int numa_update_cpu_topology(bool cpus_locked)\n \t\tcpu = cpu_last_thread_sibling(cpu);\n \t}\n \n+\tif (i)\n+\t\tupdates[i-1].next = NULL;\n+\n \tpr_debug(\"Topology update for the following CPUs:\\n\");\n \tif (cpumask_weight(&updated_cpus)) {\n \t\tfor (ud = &updates[0]; ud; ud = ud->next) {\n@@ -1464,6 +1500,7 @@ int numa_update_cpu_topology(bool cpus_locked)\n \n out:\n \tkfree(updates);\n+\ttopology_update_needed = 0;\n \treturn changed;\n }\n \n@@ -1483,6 +1520,14 @@ static void topology_schedule_update(void)\n \tschedule_work(&topology_work);\n }\n \n+void shared_topology_update(void)\n+{\n+\tif (firmware_has_feature(FW_FEATURE_VPHN) &&\n+\t\t   lppaca_shared_proc(get_lppaca()))\n+\t\ttopology_schedule_update();\n+}\n+EXPORT_SYMBOL(shared_topology_update);\n+\n static void topology_timer_fn(unsigned long ignored)\n {\n \tif (prrn_enabled && cpumask_weight(&cpu_associativity_changes_mask))\n@@ -1499,7 +1544,7 @@ static void topology_timer_fn(unsigned long ignored)\n static void reset_topology_timer(void)\n {\n \ttopology_timer.data = 0;\n-\ttopology_timer.expires = jiffies + 60 * HZ;\n+\ttopology_timer.expires = jiffies + topology_timer_secs * HZ;\n \tmod_timer(&topology_timer, topology_timer.expires);\n }\n \n@@ -1549,15 +1594,14 @@ int start_topology_update(void)\n \tif (firmware_has_feature(FW_FEATURE_PRRN)) {\n \t\tif (!prrn_enabled) {\n \t\t\tprrn_enabled = 1;\n-\t\t\tvphn_enabled = 0;\n #ifdef CONFIG_SMP\n \t\t\trc = of_reconfig_notifier_register(&dt_update_nb);\n #endif\n \t\t}\n-\t} else if (firmware_has_feature(FW_FEATURE_VPHN) &&\n+\t}\n+\tif (firmware_has_feature(FW_FEATURE_VPHN) &&\n \t\t   lppaca_shared_proc(get_lppaca())) {\n \t\tif (!vphn_enabled) {\n-\t\t\tprrn_enabled = 0;\n \t\t\tvphn_enabled = 1;\n \t\t\tsetup_cpu_associativity_change_counters();\n \t\t\tinit_timer_deferrable(&topology_timer);\n@@ -1580,7 +1624,8 @@ int stop_topology_update(void)\n #ifdef CONFIG_SMP\n \t\trc = of_reconfig_notifier_unregister(&dt_update_nb);\n #endif\n-\t} else if (vphn_enabled) {\n+\t}\n+\tif (vphn_enabled) {\n \t\tvphn_enabled = 0;\n \t\trc = del_timer_sync(&topology_timer);\n \t}\n@@ -1646,6 +1691,11 @@ static int topology_update_init(void)\n \tif (!proc_create(\"powerpc/topology_updates\", 0644, NULL, &topology_ops))\n \t\treturn -ENOMEM;\n \n+\ttopology_inited = 1;\n+\tif (topology_update_needed)\n+\t\tbitmap_fill(cpumask_bits(&cpu_associativity_changes_mask),\n+\t\t\t\t\tnr_cpumask_bits);\n+\n \treturn 0;\n }\n device_initcall(topology_update_init);\ndiff --git a/arch/powerpc/platforms/pseries/dlpar.c b/arch/powerpc/platforms/pseries/dlpar.c\nindex bda18d8..0219cd3 100644\n--- a/arch/powerpc/platforms/pseries/dlpar.c\n+++ b/arch/powerpc/platforms/pseries/dlpar.c\n@@ -592,6 +592,8 @@ static ssize_t dlpar_show(struct class *class, struct class_attribute *attr,\n \n static int __init pseries_dlpar_init(void)\n {\n+\tshared_topology_update();\n+\n \tpseries_hp_wq = alloc_workqueue(\"pseries hotplug workqueue\",\n \t\t\t\t\tWQ_UNBOUND, 1);\n \treturn sysfs_create_file(kernel_kobj, &class_attr_dlpar.attr);\ndiff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c b/arch/powerpc/platforms/pseries/hotplug-cpu.c\nindex 7bc0e91..96c02d0 100644\n--- a/arch/powerpc/platforms/pseries/hotplug-cpu.c\n+++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c\n@@ -356,6 +356,7 @@ static int dlpar_online_cpu(struct device_node *dn)\n \t\t\tBUG_ON(get_cpu_current_state(cpu)\n \t\t\t\t\t!= CPU_STATE_OFFLINE);\n \t\t\tcpu_maps_update_done();\n+\t\t\ttimed_topology_update(1);\n \t\t\trc = device_online(get_cpu_device(cpu));\n \t\t\tif (rc)\n \t\t\t\tgoto out;\n@@ -522,6 +523,7 @@ static int dlpar_offline_cpu(struct device_node *dn)\n \t\t\t\tset_preferred_offline_state(cpu,\n \t\t\t\t\t\t\t    CPU_STATE_OFFLINE);\n \t\t\t\tcpu_maps_update_done();\n+\t\t\t\ttimed_topology_update(1);\n \t\t\t\trc = device_offline(get_cpu_device(cpu));\n \t\t\t\tif (rc)\n \t\t\t\t\tgoto out;\n",
    "prefixes": [
        "V8",
        "2/2"
    ]
}