Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp934434imu; Wed, 16 Jan 2019 09:53:04 -0800 (PST) X-Google-Smtp-Source: ALg8bN6wdyaxVDTc7G/+H0TgG3dXNKGP0ohJOXRrKQZ1sKRDTGmMPe1O2gy5ho6oHsHZh7Py1htn X-Received: by 2002:a62:d448:: with SMTP id u8mr10979858pfl.105.1547661184639; Wed, 16 Jan 2019 09:53:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547661184; cv=none; d=google.com; s=arc-20160816; b=jeLhhPWKT9+FkMco5a95VjC6XuQzjY7wSiOx7hdxyySMgFQsVK/rR0hSsb39x3vlKX hUw/aAun1A8H0aYSM5c3ZtyX7ZvUPsaILjX0XpFidYwZ2303GxRZ7DmKtB7wM3cxQno9 wWCH+Thcq1KqgYIJvpGrlUxxJNuNfMxuCPrP1w4/HuvJVOW/Sfmd8YXPcTVK5G3EByS3 6e6u5gI8+JVjppk7fwznGpWd250xHaWRdLPVTynvsbAtGXob6WKpCpCYuYuXhXb68U1v bvd/C06n0cB9sQEj5V+aIcDkHQVbldKfoRCWd/ZlelvdzfPl/QvghfIPu8a1v8xphGkU 2RzA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=WlE9B/Ts/5kmVoT/yhWaCE6Kcc8ieumx6zA59spU9wM=; b=FR4v7PKURPFQcEoywQHNVHmHkA0U8GWsaIsFxQFs3u4ZZpAlS2hfGE0L7OUMfaI/6p 1EW4WhZo862DaicT2h1T4vTKG/yQR7VrgMskCQHigSYZoIxdu8ObvjyxAiwPrHzlYNbZ DL65JiEeICeShlXTT6aLFisovBoJ8or4T400YP4Wg8XhC6TIV/eWVlTQrG9bKIsZqynH 85LW4ZsnmmGW5FnaSzNSvW4+WAF6qrqCxQ1xVJfAN3YW5LNEFfS1sd/OCVY9jkHJ801U 1+OWOc+xH39f/d1K70agaAYMzpXiZki93jiVOf8bJGPL/96XcWtplSA4YcOq3cZG7v50 36wA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel-com.20150623.gappssmtp.com header.s=20150623 header.b=ZcjEfkym; 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=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e67si6841286pfa.15.2019.01.16.09.52.46; Wed, 16 Jan 2019 09:53:04 -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; dkim=pass header.i=@intel-com.20150623.gappssmtp.com header.s=20150623 header.b=ZcjEfkym; 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=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728132AbfAPCBW (ORCPT + 99 others); Tue, 15 Jan 2019 21:01:22 -0500 Received: from mail-ot1-f65.google.com ([209.85.210.65]:42367 "EHLO mail-ot1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728071AbfAPCBW (ORCPT ); Tue, 15 Jan 2019 21:01:22 -0500 Received: by mail-ot1-f65.google.com with SMTP id v23so4644973otk.9 for ; Tue, 15 Jan 2019 18:01:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=WlE9B/Ts/5kmVoT/yhWaCE6Kcc8ieumx6zA59spU9wM=; b=ZcjEfkymRud+McOoMAGPl889LVxFLq9vkOsP1QNATBMKgaqrQOPz6MtyzbcVfyGAkc 0Yl06YQHlc1R1J/eeVn+mK/RQbunD0e5K0xdkXRdFKepSghykgphHf2IA24dbwScw3c1 itLPsab/d8bvPzuZhvdz77tqG2cxAjfkxLIQMZgmaZSx1x+m/B8lSirYZc1uis66F72i Ar8XgfQnAvw2PkL+Fi981CILyrHtdEXxpxdNpYWCwUlp4hcjOEfGJqROMW3MzFO5GKIT AXJ/JM/OOHMqjunkHi2HPmnkLGtPXys7dyGWhGmRYdKdraXzLm+KdFihB49Lx9kVJuqY HDgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=WlE9B/Ts/5kmVoT/yhWaCE6Kcc8ieumx6zA59spU9wM=; b=CmptdG7lRJ4Oe9nrD91JUWSKrYfGcgJ3ENptVFjwtH8cOD2T0A6NNyB+y5AiRGu+kP gM3UdvRDH31NecnSVwGMPYT7FUarg9vt5K0yNEhil9hu8JicUU073OndaQP534a1Xy58 bS+zM/Imq3hI/8/Di+uTKBmMGx/DWACcS3J+U6yqmnllXoonUOL3MoIM3bsRBBSOifXL Z5BgEE4cIsyFfhlDp7akD0NnYXP2lgxFA6LW6xmuQzeIHK5LlZrKYZ7iESfv7qUnM+B/ n9b6+EDrCba1LbtLJZ+WqH+MeWm3j3pMgyIfoY5L7YITBDbK6oxoOFdFGeMgoJc9JNDd 74FA== X-Gm-Message-State: AJcUukeKOcc5l7cqUcddJf5yJkL52ip39peYHHrPBfJdfu7ZhmjfEyl5 yBhZcssqcrbSlmK+0ZtE3b1GA1nYIENorp9f7uxcAg== X-Received: by 2002:a9d:5cc2:: with SMTP id r2mr4061912oti.367.1547604081096; Tue, 15 Jan 2019 18:01:21 -0800 (PST) MIME-Version: 1.0 References: <294bdcfa-5bf9-9c09-9d43-875e8375e264@nvidia.com> <20190112024625.GB5059@redhat.com> <20190114145447.GJ13316@quack2.suse.cz> <20190114172124.GA3702@redhat.com> <20190115080759.GC29524@quack2.suse.cz> <20190115171557.GB3696@redhat.com> <752839e6-6cb3-a6aa-94cb-63d3d4265934@nvidia.com> <20190115221205.GD3696@redhat.com> <99110c19-3168-f6a9-fbde-0a0e57f67279@nvidia.com> <20190116015610.GH3696@redhat.com> In-Reply-To: <20190116015610.GH3696@redhat.com> From: Dan Williams Date: Tue, 15 Jan 2019 18:01:09 -0800 Message-ID: Subject: Re: [PATCH 1/2] mm: introduce put_user_page*(), placeholder versions To: Jerome Glisse Cc: John Hubbard , Jan Kara , Matthew Wilcox , Dave Chinner , John Hubbard , Andrew Morton , Linux MM , tom@talpey.com, Al Viro , benve@cisco.com, Christoph Hellwig , Christopher Lameter , "Dalessandro, Dennis" , Doug Ledford , Jason Gunthorpe , Michal Hocko , Mike Marciniszyn , rcampbell@nvidia.com, Linux Kernel Mailing List , linux-fsdevel Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jan 15, 2019 at 5:56 PM Jerome Glisse wrote: > On Tue, Jan 15, 2019 at 04:44:41PM -0800, John Hubbard wrote: [..] > To make it clear. > > Lock code: > GUP() > ... > lock_page(page); > if (PageWriteback(page)) { > unlock_page(page); > wait_stable_page(page); > goto retry; > } > atomic_add(page->refcount, PAGE_PIN_BIAS); > unlock_page(page); > > test_set_page_writeback() > bool pinned = false; > ... > pinned = page_is_pin(page); // could be after TestSetPageWriteback > TestSetPageWriteback(page); > ... > return pinned; > > Memory barrier: > GUP() > ... > atomic_add(page->refcount, PAGE_PIN_BIAS); > smp_mb(); > if (PageWriteback(page)) { > atomic_add(page->refcount, -PAGE_PIN_BIAS); > wait_stable_page(page); > goto retry; > } > > test_set_page_writeback() > bool pinned = false; > ... > TestSetPageWriteback(page); > smp_wmb(); > pinned = page_is_pin(page); > ... > return pinned; > > > One is not more complex than the other. One can contend, the other > will _never_ contend. The complexity is in the validation of lockless algorithms. It's easier to reason about locks than barriers for the long term maintainability of this code. I'm with Jan and John on wanting to explore lock_page() before a barrier-based scheme.