Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/811801/?format=api
{ "id": 811801, "url": "http://patchwork.ozlabs.org/api/patches/811801/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/1504894024-2750-16-git-send-email-ldufour@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": "<1504894024-2750-16-git-send-email-ldufour@linux.vnet.ibm.com>", "list_archive_url": "https://lore.kernel.org/linuxppc-dev/1504894024-2750-16-git-send-email-ldufour@linux.vnet.ibm.com/", "date": "2017-09-08T18:06:59", "name": "[v3,15/20] mm: Try spin lock in speculative path", "commit_ref": null, "pull_url": null, "state": "not-applicable", "archived": false, "hash": "29dd8da6f6d2a1a57e351686bf0f4b057d03cd6e", "submitter": { "id": 40248, "url": "http://patchwork.ozlabs.org/api/people/40248/?format=api", "name": "Laurent Dufour", "email": "ldufour@linux.vnet.ibm.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/1504894024-2750-16-git-send-email-ldufour@linux.vnet.ibm.com/mbox/", "series": [ { "id": 2269, "url": "http://patchwork.ozlabs.org/api/series/2269/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=2269", "date": "2017-09-08T18:06:44", "name": "Speculative page faults", "version": 3, "mbox": "http://patchwork.ozlabs.org/series/2269/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/811801/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/811801/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 3xpmft5Vx5z9sRV\n\tfor <patchwork-incoming@ozlabs.org>;\n\tSat, 9 Sep 2017 04:53:10 +1000 (AEST)", "from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 3xpmft3zTnzDrb2\n\tfor <patchwork-incoming@ozlabs.org>;\n\tSat, 9 Sep 2017 04:53:10 +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 3xplfy5SmVzDrVj\n\tfor <linuxppc-dev@lists.ozlabs.org>;\n\tSat, 9 Sep 2017 04:08:10 +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\tv88I4P5g013544\n\tfor <linuxppc-dev@lists.ozlabs.org>; Fri, 8 Sep 2017 14:08:08 -0400", "from e06smtp13.uk.ibm.com (e06smtp13.uk.ibm.com [195.75.94.109])\n\tby mx0b-001b2d01.pphosted.com with ESMTP id 2cux39p4ss-1\n\t(version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT)\n\tfor <linuxppc-dev@lists.ozlabs.org>; Fri, 08 Sep 2017 14:08:07 -0400", "from localhost\n\tby e06smtp13.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use\n\tOnly! Violators will be prosecuted\n\tfor <linuxppc-dev@lists.ozlabs.org> from <ldufour@linux.vnet.ibm.com>;\n\tFri, 8 Sep 2017 19:08:05 +0100", "from b06cxnps3074.portsmouth.uk.ibm.com (9.149.109.194)\n\tby e06smtp13.uk.ibm.com (192.168.101.143) with IBM ESMTP SMTP\n\tGateway: Authorized Use Only! Violators will be prosecuted; \n\tFri, 8 Sep 2017 19:07:58 +0100", "from d06av24.portsmouth.uk.ibm.com (mk.ibm.com [9.149.105.60])\n\tby b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with\n\tESMTP id v88I7wCO23593102; Fri, 8 Sep 2017 18:07:58 GMT", "from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1])\n\tby IMSVA (Postfix) with ESMTP id 8C90F4203F;\n\tFri, 8 Sep 2017 19:04:25 +0100 (BST)", "from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1])\n\tby IMSVA (Postfix) with ESMTP id 53F4E42042;\n\tFri, 8 Sep 2017 19:04:22 +0100 (BST)", "from nimbus.lab.toulouse-stg.fr.ibm.com (unknown [9.145.31.125])\n\tby d06av24.portsmouth.uk.ibm.com (Postfix) with ESMTP;\n\tFri, 8 Sep 2017 19:04:22 +0100 (BST)" ], "Authentication-Results": "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=linux.vnet.ibm.com\n\t(client-ip=148.163.158.5; helo=mx0a-001b2d01.pphosted.com;\n\tenvelope-from=ldufour@linux.vnet.ibm.com; receiver=<UNKNOWN>)", "From": "Laurent Dufour <ldufour@linux.vnet.ibm.com>", "To": "paulmck@linux.vnet.ibm.com, peterz@infradead.org,\n\takpm@linux-foundation.org, kirill@shutemov.name, ak@linux.intel.com, \n\tmhocko@kernel.org, dave@stgolabs.net, jack@suse.cz,\n\tMatthew Wilcox <willy@infradead.org>, benh@kernel.crashing.org,\n\tmpe@ellerman.id.au, paulus@samba.org,\n\tThomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@redhat.com>, \n\thpa@zytor.com, Will Deacon <will.deacon@arm.com>,\n\tSergey Senozhatsky <sergey.senozhatsky@gmail.com>", "Subject": "[PATCH v3 15/20] mm: Try spin lock in speculative path", "Date": "Fri, 8 Sep 2017 20:06:59 +0200", "X-Mailer": "git-send-email 2.7.4", "In-Reply-To": "<1504894024-2750-1-git-send-email-ldufour@linux.vnet.ibm.com>", "References": "<1504894024-2750-1-git-send-email-ldufour@linux.vnet.ibm.com>", "X-TM-AS-GCONF": "00", "x-cbid": "17090818-0012-0000-0000-00000577A9AD", "X-IBM-AV-DETECTION": "SAVI=unused REMOTE=unused XFE=unused", "x-cbparentid": "17090818-0013-0000-0000-000018F0B12A", "Message-Id": "<1504894024-2750-16-git-send-email-ldufour@linux.vnet.ibm.com>", "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10432:, ,\n\tdefinitions=2017-09-08_12:, , 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-1709080270", "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": "linuxppc-dev@lists.ozlabs.org, x86@kernel.org,\n\tlinux-kernel@vger.kernel.org, npiggin@gmail.com, linux-mm@kvack.org,\n\tTim Chen <tim.c.chen@linux.intel.com>, \n\tharen@linux.vnet.ibm.com, khandual@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": "There is a deadlock when a CPU is doing a speculative page fault and\nanother one is calling do_unmap().\n\nThe deadlock occurred because the speculative path try to spinlock the\npte while the interrupt are disabled. When the other CPU in the\nunmap's path has locked the pte then is waiting for all the CPU to\ninvalidate the TLB. As the CPU doing the speculative fault have the\ninterrupt disable it can't invalidate the TLB, and can't get the lock.\n\nSince we are in a speculative path, we can race with other mm action.\nSo let assume that the lock may not get acquired and fail the\nspeculative page fault.\n\nHere are the stacks captured during the deadlock:\n\n\tCPU 0\n\tnative_flush_tlb_others+0x7c/0x260\n\tflush_tlb_mm_range+0x6a/0x220\n\ttlb_flush_mmu_tlbonly+0x63/0xc0\n\tunmap_page_range+0x897/0x9d0\n\t? unmap_single_vma+0x7d/0xe0\n\t? release_pages+0x2b3/0x360\n\tunmap_single_vma+0x7d/0xe0\n\tunmap_vmas+0x51/0xa0\n\tunmap_region+0xbd/0x130\n\tdo_munmap+0x279/0x460\n\tSyS_munmap+0x53/0x70\n\n\tCPU 1\n\tdo_raw_spin_lock+0x14e/0x160\n\t_raw_spin_lock+0x5d/0x80\n\t? pte_map_lock+0x169/0x1b0\n\tpte_map_lock+0x169/0x1b0\n\thandle_pte_fault+0xbf2/0xd80\n\t? trace_hardirqs_on+0xd/0x10\n\thandle_speculative_fault+0x272/0x280\n\thandle_speculative_fault+0x5/0x280\n\t__do_page_fault+0x187/0x580\n\ttrace_do_page_fault+0x52/0x260\n\tdo_async_page_fault+0x19/0x70\n\tasync_page_fault+0x28/0x30\n\nSigned-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>\n---\n mm/memory.c | 19 ++++++++++++++++---\n 1 file changed, 16 insertions(+), 3 deletions(-)", "diff": "diff --git a/mm/memory.c b/mm/memory.c\nindex 5e98259c7ac0..18b39f930ce1 100644\n--- a/mm/memory.c\n+++ b/mm/memory.c\n@@ -2432,7 +2432,8 @@ static bool pte_spinlock(struct vm_fault *vmf)\n \t\tgoto out;\n \n \tvmf->ptl = pte_lockptr(vmf->vma->vm_mm, vmf->pmd);\n-\tspin_lock(vmf->ptl);\n+\tif (unlikely(!spin_trylock(vmf->ptl)))\n+\t\tgoto out;\n \n \tif (vma_has_changed(vmf)) {\n \t\tspin_unlock(vmf->ptl);\n@@ -2468,8 +2469,20 @@ static bool pte_map_lock(struct vm_fault *vmf)\n \tif (vma_has_changed(vmf))\n \t\tgoto out;\n \n-\tpte = pte_offset_map_lock(vmf->vma->vm_mm, vmf->pmd,\n-\t\t\t\t vmf->address, &ptl);\n+\t/*\n+\t * Same as pte_offset_map_lock() except that we call\n+\t * spin_trylock() in place of spin_lock() to avoid race with\n+\t * unmap path which may have the lock and wait for this CPU\n+\t * to invalidate TLB but this CPU has irq disabled.\n+\t * Since we are in a speculative patch, accept it could fail\n+\t */\n+\tptl = pte_lockptr(vmf->vma->vm_mm, vmf->pmd);\n+\tpte = pte_offset_map(vmf->pmd, vmf->address);\n+\tif (unlikely(!spin_trylock(ptl))) {\n+\t\tpte_unmap(pte);\n+\t\tgoto out;\n+\t}\n+\n \tif (vma_has_changed(vmf)) {\n \t\tpte_unmap_unlock(pte, ptl);\n \t\tgoto out;\n", "prefixes": [ "v3", "15/20" ] }