Received: by 10.223.176.5 with SMTP id f5csp879319wra; Tue, 6 Feb 2018 08:52:45 -0800 (PST) X-Google-Smtp-Source: AH8x224dHJXzd/j6UeFDHyFRqjZ5MOXe5ZAqeQLz5Ti8hS8+2R79F3GIvsjZZEpGBnoOWUYN7PH6 X-Received: by 2002:a17:902:b909:: with SMTP id bf9-v6mr3089283plb.218.1517935965539; Tue, 06 Feb 2018 08:52:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517935965; cv=none; d=google.com; s=arc-20160816; b=NVbGa3jBuPggsaUyyOPVy92M3XFupJAd0S6ST+GjiCF7rGh5JfwfCSwVnR4Zfaar74 hGrn9OevHcRO2LhsfiEAu0UNDcEaowNiMGxh6QJcHNBCidvwjqeFZ4BMs4H/wdnC+f6c Hco2cbKtvaB9qpUH61ahv/3z/hEfPsta+SvJryUB/61rsc6mQBSLLzUOLg2yxwv0D6AZ R28Hlgt9dP5iynybgDJIdzxI66fL0Xt7ErjRnyDyVVPB0aoiI/ctv/qZ6+Kgzz1zyvsj uoJDOFQbxatGjEqzw1kKTi1zNQlowUxv2FrCxph49h31Bp6rNIBK4RZPVdo/eH1LH5Lw kl9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:references:in-reply-to:date :subject:cc:to:from:arc-authentication-results; bh=1NFLCJ1Mg4xyypwpWIRJ5ExKO9ugj6Q7w3s4N42JFww=; b=Ntko7cyQ5z44D160bbKkvDc3qziVzgj7UJR0py4dd6A3lcx2SX29YJgkG3DrCWx+8o zgBgqvbZP6Jw5GXvXlNwLgcLm7PtvW1qIKTqs4gnsS7o2xtoMNVSwxIcnJRpWu3qu5QX pUpqJtN+aaf4vLwtUK3TBxD0sanqYYl57MdL2b2Uc9GR6YiAUxxEh9iOAYA3Zh6gEhsu sjeT43i6CEszHhD7Z6n2spQ2ZPBKLBQdVk8dkASBIzbTE3gY6UF7IPSN9pMrgfvLfpVi W7+4f5BBVXBukGviVVpxB+8iaUDSGgtW1PUJKAby8hm/NBnJBRCvoglmRzcnln5ZAxWR l+4g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r18si267373pfb.369.2018.02.06.08.52.31; Tue, 06 Feb 2018 08:52:45 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752978AbeBFQve (ORCPT + 99 others); Tue, 6 Feb 2018 11:51:34 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:60640 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752286AbeBFQuf (ORCPT ); Tue, 6 Feb 2018 11:50:35 -0500 Received: from pps.filterd (m0098419.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w16Gn6P4081810 for ; Tue, 6 Feb 2018 11:50:35 -0500 Received: from e06smtp12.uk.ibm.com (e06smtp12.uk.ibm.com [195.75.94.108]) by mx0b-001b2d01.pphosted.com with ESMTP id 2fye20f0sk-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Tue, 06 Feb 2018 11:50:34 -0500 Received: from localhost by e06smtp12.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 6 Feb 2018 16:50:32 -0000 Received: from b06cxnps4076.portsmouth.uk.ibm.com (9.149.109.198) by e06smtp12.uk.ibm.com (192.168.101.142) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 6 Feb 2018 16:50:24 -0000 Received: from d06av25.portsmouth.uk.ibm.com (d06av25.portsmouth.uk.ibm.com [9.149.105.61]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w16GoOwH50659490; Tue, 6 Feb 2018 16:50:24 GMT Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 922C611C04C; Tue, 6 Feb 2018 16:43:47 +0000 (GMT) Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8E2AA11C054; Tue, 6 Feb 2018 16:43:46 +0000 (GMT) Received: from nimbus.lab.toulouse-stg.fr.ibm.com (unknown [9.101.4.33]) by d06av25.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 6 Feb 2018 16:43:46 +0000 (GMT) From: Laurent Dufour To: paulmck@linux.vnet.ibm.com, peterz@infradead.org, akpm@linux-foundation.org, kirill@shutemov.name, ak@linux.intel.com, mhocko@kernel.org, dave@stgolabs.net, jack@suse.cz, Matthew Wilcox , benh@kernel.crashing.org, mpe@ellerman.id.au, paulus@samba.org, Thomas Gleixner , Ingo Molnar , hpa@zytor.com, Will Deacon , Sergey Senozhatsky , Andrea Arcangeli , Alexei Starovoitov , kemi.wang@intel.com, sergey.senozhatsky.work@gmail.com, Daniel Jordan Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, haren@linux.vnet.ibm.com, khandual@linux.vnet.ibm.com, npiggin@gmail.com, bsingharora@gmail.com, Tim Chen , linuxppc-dev@lists.ozlabs.org, x86@kernel.org Subject: [PATCH v7 06/24] mm: Introduce pte_spinlock for FAULT_FLAG_SPECULATIVE Date: Tue, 6 Feb 2018 17:49:52 +0100 X-Mailer: git-send-email 2.7.4 In-Reply-To: <1517935810-31177-1-git-send-email-ldufour@linux.vnet.ibm.com> References: <1517935810-31177-1-git-send-email-ldufour@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 18020616-0008-0000-0000-000004CA06D7 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18020616-0009-0000-0000-00001E5DB461 Message-Id: <1517935810-31177-7-git-send-email-ldufour@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2018-02-06_07:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1802060212 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When handling page fault without holding the mmap_sem the fetch of the pte lock pointer and the locking will have to be done while ensuring that the VMA is not touched in our back. So move the fetch and locking operations in a dedicated function. Signed-off-by: Laurent Dufour --- mm/memory.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/mm/memory.c b/mm/memory.c index bb058527525a..2560d100b439 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -2452,6 +2452,13 @@ static inline void wp_page_reuse(struct vm_fault *vmf) pte_unmap_unlock(vmf->pte, vmf->ptl); } +static bool pte_spinlock(struct vm_fault *vmf) +{ + vmf->ptl = pte_lockptr(vmf->vma->vm_mm, vmf->pmd); + spin_lock(vmf->ptl); + return true; +} + static bool pte_map_lock(struct vm_fault *vmf) { vmf->pte = pte_offset_map_lock(vmf->vma->vm_mm, vmf->pmd, @@ -3819,8 +3826,8 @@ static int do_numa_page(struct vm_fault *vmf) * validation through pte_unmap_same(). It's of NUMA type but * the pfn may be screwed if the read is non atomic. */ - vmf->ptl = pte_lockptr(vma->vm_mm, vmf->pmd); - spin_lock(vmf->ptl); + if (!pte_spinlock(vmf)) + return VM_FAULT_RETRY; if (unlikely(!pte_same(*vmf->pte, vmf->orig_pte))) { pte_unmap_unlock(vmf->pte, vmf->ptl); goto out; @@ -4013,8 +4020,8 @@ static int handle_pte_fault(struct vm_fault *vmf) if (pte_protnone(vmf->orig_pte) && vma_is_accessible(vmf->vma)) return do_numa_page(vmf); - vmf->ptl = pte_lockptr(vmf->vma->vm_mm, vmf->pmd); - spin_lock(vmf->ptl); + if (!pte_spinlock(vmf)) + return VM_FAULT_RETRY; entry = vmf->orig_pte; if (unlikely(!pte_same(*vmf->pte, entry))) goto unlock; -- 2.7.4