Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1743241yba; Tue, 2 Apr 2019 15:05:21 -0700 (PDT) X-Google-Smtp-Source: APXvYqxrel4zdcu4xDiNOELDCalSar2OpTXxH25VcUGN3NKcrLFtt7eMWptyfYJnj938Mls9AQBQ X-Received: by 2002:a17:902:e182:: with SMTP id cd2mr38596971plb.240.1554242720988; Tue, 02 Apr 2019 15:05:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554242720; cv=none; d=google.com; s=arc-20160816; b=InJh+YNGg+162w3yD9387L7po37/T7DLdxeg5J7QlOLhJZF+wjZxkFNk6yQewbj/Bq D+Hfh5HU1FspTgX6o0vkYOTE8zoKaTseTXrSG1lvyWXOw9zzZvYgTkb+a3QWPSFtM2I8 cx6fyoQ/+w0gUAwLZIVbZ8v1fiTS6G3NyQwy+BK5Za8dDYJ6eDKRd75dkg6cNfbFQg/k 7hBjOuRgnSz5opiUWz5z44l3Ck0Vf5Y3vi3FY7OOxTJ37pF0e0UKzM96ja83nBUk+0dM rPdPsZhNTJas8rttI3BXkQHHCfFzjZtEliQZkJuIgIgVtMYvdv57N4o/UpDagwn54rwY LbUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date; bh=1I2QFMTY/NFOM9BA9zBZOHywXvs9ZbEpts/LPqMqrmk=; b=inbczPiaF6wzcbub/CoLP7o2iSFRutQa+B+DZFvGCdCDKQ5xagd6P8X+Bae1AIwehU xINo8eA2wbHAFa03zGWzF/wLiKIlOdgwamPndsDOHCyoZG6E9BshKsMGegK62MQz7hs1 yTRJdeBL2iKjTTZswZiRaAiZPzNgVqzSK8oIcWLZoCtZcyWO3S+lEsjum4e4ukdfI5UK /6Gpj8LFktVJAijF6gP1WZ07OcrIruPdEsDYHb9a7n/OVQdbM6QufkN6jO4Qd+MlienP hi2JMPUxP2O8wK10uLvDeF37EL2WEnZxwHlu5ngtDK9g05PZbw8BQVjVihPZx8d4DBhD lN9Q== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k68si5724755pfc.111.2019.04.02.15.05.04; Tue, 02 Apr 2019 15:05:20 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726425AbfDBWE1 (ORCPT + 99 others); Tue, 2 Apr 2019 18:04:27 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:49832 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726078AbfDBWE1 (ORCPT ); Tue, 2 Apr 2019 18:04:27 -0400 Received: from akpm3.svl.corp.google.com (unknown [104.133.8.65]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id EB8B0C84; Tue, 2 Apr 2019 22:04:25 +0000 (UTC) Date: Tue, 2 Apr 2019 15:04:24 -0700 From: Andrew Morton To: Daniel Jordan Cc: Alan Tull , Alexey Kardashevskiy , Alex Williamson , Benjamin Herrenschmidt , Christoph Lameter , Davidlohr Bueso , Michael Ellerman , Moritz Fischer , Paul Mackerras , Wu Hao , linux-mm@kvack.org, kvm@vger.kernel.org, kvm-ppc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-fpga@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/6] mm: change locked_vm's type from unsigned long to atomic64_t Message-Id: <20190402150424.5cf64e19deeafa58fc6c1a9f@linux-foundation.org> In-Reply-To: <20190402204158.27582-2-daniel.m.jordan@oracle.com> References: <20190402204158.27582-1-daniel.m.jordan@oracle.com> <20190402204158.27582-2-daniel.m.jordan@oracle.com> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.31; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 2 Apr 2019 16:41:53 -0400 Daniel Jordan wrote: > Taking and dropping mmap_sem to modify a single counter, locked_vm, is > overkill when the counter could be synchronized separately. > > Make mmap_sem a little less coarse by changing locked_vm to an atomic, > the 64-bit variety to avoid issues with overflow on 32-bit systems. > > ... > > --- a/arch/powerpc/kvm/book3s_64_vio.c > +++ b/arch/powerpc/kvm/book3s_64_vio.c > @@ -59,32 +59,34 @@ static unsigned long kvmppc_stt_pages(unsigned long tce_pages) > static long kvmppc_account_memlimit(unsigned long stt_pages, bool inc) > { > long ret = 0; > + s64 locked_vm; > > if (!current || !current->mm) > return ret; /* process exited */ > > down_write(¤t->mm->mmap_sem); > > + locked_vm = atomic64_read(¤t->mm->locked_vm); > if (inc) { > unsigned long locked, lock_limit; > > - locked = current->mm->locked_vm + stt_pages; > + locked = locked_vm + stt_pages; > lock_limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT; > if (locked > lock_limit && !capable(CAP_IPC_LOCK)) > ret = -ENOMEM; > else > - current->mm->locked_vm += stt_pages; > + atomic64_add(stt_pages, ¤t->mm->locked_vm); > } else { > - if (WARN_ON_ONCE(stt_pages > current->mm->locked_vm)) > - stt_pages = current->mm->locked_vm; > + if (WARN_ON_ONCE(stt_pages > locked_vm)) > + stt_pages = locked_vm; > > - current->mm->locked_vm -= stt_pages; > + atomic64_sub(stt_pages, ¤t->mm->locked_vm); > } With the current code, current->mm->locked_vm cannot go negative. After the patch, it can go negative. If someone else decreased current->mm->locked_vm between this function's atomic64_read() and atomic64_sub(). I guess this is a can't-happen in this case because the racing code which performed the modification would have taken it negative anyway. But this all makes me rather queazy. Also, we didn't remove any down_write(mmap_sem)s from core code so I'm thinking that the benefit of removing a few mmap_sem-takings from a few obscure drivers (sorry ;)) is pretty small. Also, the argument for switching 32-bit arches to a 64-bit counter was suspiciously vague. What overflow issues? Or are we just being lazy?