Received: by 10.192.165.148 with SMTP id m20csp543524imm; Fri, 4 May 2018 02:12:48 -0700 (PDT) X-Google-Smtp-Source: AB8JxZoBYqZquGtm/1jUqYAJbquuEmGjqiWqLOzmwlQTkqM9ob7k8frz1TGlO8W3QwKlKUVjdNUt X-Received: by 2002:a63:a74b:: with SMTP id w11-v6mr21685337pgo.351.1525425168163; Fri, 04 May 2018 02:12:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525425167; cv=none; d=google.com; s=arc-20160816; b=pVRP1XJ4qWp596YMlcXqj/fkgVKqq41CpRmaVppAk9vXlSRfFCi6V/r5pO9qavI94t rsw24BlEzoBzVB74rzn/Xzkn7CsffTH0VXH8BWKU3hGbQ1bZv8uwtOzajBLQITazWyWO UgylrEwctx+IrhrHHlbCqANVe/WaCvRAE666R4ywwxseSlnmvSRtnbqwaezkmV7dy6tC wMkWs4PPSQJoj8H5okfxL/CPQFJk47+igZY5cG1EeA5l607scTuPIGug0oUdqCe9xL5H d1qTGAV8g9m7eMufe6Acuxih5ELISCBz4h1y17A43tHDlpESnTPBWele8xJ8ZbO2I4V0 lpUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :references:cc:to:subject:from:arc-authentication-results; bh=F4srX16BbmdmoMHnC/iCYj6qBxyP+V6IZuvwrwmxxIY=; b=zDmkxGhGtGahyNIs+dSags8/+W0yAqGhAwMFx0K7rhHC+C2q3a0fMe3lSMFNcHSV5I pNO0SkKhXB185wnBUCvH3claWFzlsd5IOd/u5p0Ii1xmiZ4c2CMrUYJ9/XMipp73zfDy jxKb3zIOifcUkIg8SMyQyE3KJs4m4d0EyXznjZ6UU1lYG+QZJwqoVnPEQpdSXwpnY9A9 AvJMqMcANe3Dv8gpO6Rollhe4oYghNrjd1Jbz0MAY/EwBOBg3tPPkFHACYzh7TRlEj8E nzo+s8BV9wsIGr2y2ko+5OPacz1PUs+jw2Nhr88GeM+JMBDk0M9GjWP+AiY8WwAgi89d yPjQ== 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 s11-v6si12658383pgn.403.2018.05.04.02.12.32; Fri, 04 May 2018 02:12:47 -0700 (PDT) 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 S1751411AbeEDJLL (ORCPT + 99 others); Fri, 4 May 2018 05:11:11 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:50114 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750709AbeEDJLJ (ORCPT ); Fri, 4 May 2018 05:11:09 -0400 Received: from pps.filterd (m0098404.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w44996ra135847 for ; Fri, 4 May 2018 05:11:09 -0400 Received: from e06smtp14.uk.ibm.com (e06smtp14.uk.ibm.com [195.75.94.110]) by mx0a-001b2d01.pphosted.com with ESMTP id 2hrjbc6jn7-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 04 May 2018 05:11:09 -0400 Received: from localhost by e06smtp14.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 4 May 2018 10:11:05 +0100 Received: from b06cxnps4076.portsmouth.uk.ibm.com (9.149.109.198) by e06smtp14.uk.ibm.com (192.168.101.144) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 4 May 2018 10:10:58 +0100 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w449Av0Q6750550; Fri, 4 May 2018 09:10:57 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 043DC4C040; Fri, 4 May 2018 10:03:05 +0100 (BST) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id AB43C4C064; Fri, 4 May 2018 10:03:02 +0100 (BST) Received: from [9.145.12.160] (unknown [9.145.12.160]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTP; Fri, 4 May 2018 10:03:02 +0100 (BST) From: Laurent Dufour Subject: Re: [PATCH v10 12/25] mm: cache some VMA fields in the vm_fault structure To: Minchan Kim Cc: akpm@linux-foundation.org, mhocko@kernel.org, peterz@infradead.org, kirill@shutemov.name, ak@linux.intel.com, 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 , David Rientjes , Jerome Glisse , Ganesh Mahendran , 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, paulmck@linux.vnet.ibm.com, Tim Chen , linuxppc-dev@lists.ozlabs.org, x86@kernel.org References: <1523975611-15978-1-git-send-email-ldufour@linux.vnet.ibm.com> <1523975611-15978-13-git-send-email-ldufour@linux.vnet.ibm.com> <20180423074221.GE114098@rodete-desktop-imager.corp.google.com> <20180503154211.GA180804@rodete-laptop-imager.corp.google.com> Date: Fri, 4 May 2018 11:10:54 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <20180503154211.GA180804@rodete-laptop-imager.corp.google.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-TM-AS-GCONF: 00 x-cbid: 18050409-0044-0000-0000-0000054EE688 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18050409-0045-0000-0000-0000289011E6 Message-Id: <580c2760-2157-61fe-01ff-f928516fa23f@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2018-05-04_02:,, 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-1805040086 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/05/2018 17:42, Minchan Kim wrote: > On Thu, May 03, 2018 at 02:25:18PM +0200, Laurent Dufour wrote: >> On 23/04/2018 09:42, Minchan Kim wrote: >>> On Tue, Apr 17, 2018 at 04:33:18PM +0200, Laurent Dufour wrote: >>>> When handling speculative page fault, the vma->vm_flags and >>>> vma->vm_page_prot fields are read once the page table lock is released. So >>>> there is no more guarantee that these fields would not change in our back >>>> They will be saved in the vm_fault structure before the VMA is checked for >>>> changes. >>> >>> Sorry. I cannot understand. >>> If it is changed under us, what happens? If it's critical, why cannot we >>> check with seqcounter? >>> Clearly, I'm not understanding the logic here. However, it's a global >>> change without CONFIG_SPF so I want to be more careful. >>> It would be better to describe why we need to sanpshot those values >>> into vm_fault rather than preventing the race. >> >> The idea is to go forward processing the page fault using the VMA's fields >> values saved in the vm_fault structure. Then once the pte are locked, the >> vma->sequence_counter is checked again and if something has changed in our back >> the speculative page fault processing is aborted. > > Sorry, still I don't understand why we should capture some fields to vm_fault. > If we found vma->seq_cnt is changed under pte lock, can't we just bail out and > fallback to classic fault handling? > > Maybe, I'm missing something clear now. It would be really helpful to understand > if you give some exmaple. I'd rather say that I was not clear enough ;) Here is the point, when we deal with a speculative page fault, the mmap_sem is not taken, so parallel VMA's changes can occurred. When a VMA change is done which will impact the page fault processing, we assumed that the VMA sequence counter will be changed. In the page fault processing, at the time the PTE is locked, we checked the VMA sequence counter to detect changes done in our back. If no change is detected we can continue further. But this doesn't prevent the VMA to not be changed in our back while the PTE is locked. So VMA's fields which are used while the PTE is locked must be saved to ensure that we are using *static* values. This is important since the PTE changes will be made on regards to these VMA fields and they need to be consistent. This concerns the vma->vm_flags and vma->vm_page_prot VMA fields. I hope I make this clear enough this time. Thanks, Laurent.