From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CBBD5C10F00 for ; Fri, 22 Feb 2019 19:02:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 86DE920657 for ; Fri, 22 Feb 2019 19:02:18 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=nvidia.com header.i=@nvidia.com header.b="W3LlUkkt" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726761AbfBVTCR (ORCPT ); Fri, 22 Feb 2019 14:02:17 -0500 Received: from hqemgate15.nvidia.com ([216.228.121.64]:9471 "EHLO hqemgate15.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725878AbfBVTCQ (ORCPT ); Fri, 22 Feb 2019 14:02:16 -0500 Received: from hqpgpgate102.nvidia.com (Not Verified[216.228.121.13]) by hqemgate15.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Fri, 22 Feb 2019 11:02:12 -0800 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate102.nvidia.com (PGP Universal service); Fri, 22 Feb 2019 11:02:14 -0800 X-PGP-Universal: processed; by hqpgpgate102.nvidia.com on Fri, 22 Feb 2019 11:02:14 -0800 Received: from rcampbell-dev.nvidia.com (10.124.1.5) by HQMAIL101.nvidia.com (172.20.187.10) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Fri, 22 Feb 2019 19:02:13 +0000 Subject: Re: [PATCH v5 2/9] mm/mmu_notifier: convert user range->blockable to helper function To: , , Andrew Morton CC: , =?UTF-8?Q?Christian_K=c3=b6nig?= , Joonas Lahtinen , Jani Nikula , Rodrigo Vivi , Jan Kara , Andrea Arcangeli , Peter Xu , Felix Kuehling , Jason Gunthorpe , Ross Zwisler , Dan Williams , Paolo Bonzini , =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , Michal Hocko , John Hubbard , , , , Arnd Bergmann References: <20190219200430.11130-1-jglisse@redhat.com> <20190219200430.11130-3-jglisse@redhat.com> From: Ralph Campbell Message-ID: Date: Fri, 22 Feb 2019 11:02:13 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.3.0 MIME-Version: 1.0 In-Reply-To: <20190219200430.11130-3-jglisse@redhat.com> X-Originating-IP: [10.124.1.5] X-ClientProxiedBy: HQMAIL105.nvidia.com (172.20.187.12) To HQMAIL101.nvidia.com (172.20.187.10) Content-Type: text/plain; charset="utf-8"; format=flowed Content-Language: en-US Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1550862132; bh=mgXPsxbD97SKOiCEJPoI9+FWfJCL6GeisjAj6M00qm0=; h=X-PGP-Universal:Subject:To:CC:References:From:Message-ID:Date: User-Agent:MIME-Version:In-Reply-To:X-Originating-IP: X-ClientProxiedBy:Content-Type:Content-Language: Content-Transfer-Encoding; b=W3LlUkkteKWx9+h4NQ3O/0ej9NwaeVOiKvzT2mAVetN5vWFGIi3xOWKpZC1BZDp5S FsXECXdJtBJUbA+/UVzfJarGz+SAcV+EvfcH5PuXzUGoM8cqCpYacBxahHiza2bIRO bqU5tDpPEYPzYZrTjhs2n7HZvr8f3MOkvoP4MsSg0DRFQAXrHRvcgZctZj1JObHdM3 JI1lDn38TXDjF9nZDgC6rQOqQOdjAPcMO5UriAgVU+GMvYpQ5MG29cUu8+moMKzh4L iqe68ZtucYFIZjkrjPmImNHQN9hrZdUj2ae509I4OV7fcPbFxlcD2EPrgXCSEt0E27 hSPlWWLHB4T/Q== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2/19/19 12:04 PM, jglisse@redhat.com wrote: > From: J=C3=A9r=C3=B4me Glisse >=20 > Use the mmu_notifier_range_blockable() helper function instead of > directly dereferencing the range->blockable field. This is done to > make it easier to change the mmu_notifier range field. >=20 > This patch is the outcome of the following coccinelle patch: >=20 > %<------------------------------------------------------------------- > @@ > identifier I1, FN; > @@ > FN(..., struct mmu_notifier_range *I1, ...) { > <... > -I1->blockable > +mmu_notifier_range_blockable(I1) > ...> > } > ------------------------------------------------------------------->% >=20 > spatch --in-place --sp-file blockable.spatch --dir . >=20 > Signed-off-by: J=C3=A9r=C3=B4me Glisse > Cc: Christian K=C3=B6nig > Cc: Joonas Lahtinen > Cc: Jani Nikula > Cc: Rodrigo Vivi > Cc: Jan Kara > Cc: Andrea Arcangeli > Cc: Peter Xu > Cc: Felix Kuehling > Cc: Jason Gunthorpe > Cc: Ross Zwisler > Cc: Dan Williams > Cc: Paolo Bonzini > Cc: Radim Kr=C4=8Dm=C3=A1=C5=99 > Cc: Michal Hocko > Cc: Christian Koenig > Cc: Ralph Campbell > Cc: John Hubbard > Cc: kvm@vger.kernel.org > Cc: dri-devel@lists.freedesktop.org > Cc: linux-rdma@vger.kernel.org > Cc: Arnd Bergmann > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c | 8 ++++---- > drivers/gpu/drm/i915/i915_gem_userptr.c | 2 +- > drivers/gpu/drm/radeon/radeon_mn.c | 4 ++-- > drivers/infiniband/core/umem_odp.c | 5 +++-- > drivers/xen/gntdev.c | 6 +++--- > mm/hmm.c | 6 +++--- > mm/mmu_notifier.c | 2 +- > virt/kvm/kvm_main.c | 3 ++- > 8 files changed, 19 insertions(+), 17 deletions(-) >=20 > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c b/drivers/gpu/drm/amd= /amdgpu/amdgpu_mn.c > index 3e6823fdd939..58ed401c5996 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c > @@ -256,14 +256,14 @@ static int amdgpu_mn_invalidate_range_start_gfx(str= uct mmu_notifier *mn, > /* TODO we should be able to split locking for interval tree and > * amdgpu_mn_invalidate_node > */ > - if (amdgpu_mn_read_lock(amn, range->blockable)) > + if (amdgpu_mn_read_lock(amn, mmu_notifier_range_blockable(range))) > return -EAGAIN; > =20 > it =3D interval_tree_iter_first(&amn->objects, range->start, end); > while (it) { > struct amdgpu_mn_node *node; > =20 > - if (!range->blockable) { > + if (!mmu_notifier_range_blockable(range)) { > amdgpu_mn_read_unlock(amn); > return -EAGAIN; > } > @@ -299,7 +299,7 @@ static int amdgpu_mn_invalidate_range_start_hsa(struc= t mmu_notifier *mn, > /* notification is exclusive, but interval is inclusive */ > end =3D range->end - 1; > =20 > - if (amdgpu_mn_read_lock(amn, range->blockable)) > + if (amdgpu_mn_read_lock(amn, mmu_notifier_range_blockable(range))) > return -EAGAIN; > =20 > it =3D interval_tree_iter_first(&amn->objects, range->start, end); > @@ -307,7 +307,7 @@ static int amdgpu_mn_invalidate_range_start_hsa(struc= t mmu_notifier *mn, > struct amdgpu_mn_node *node; > struct amdgpu_bo *bo; > =20 > - if (!range->blockable) { > + if (!mmu_notifier_range_blockable(range)) { > amdgpu_mn_read_unlock(amn); > return -EAGAIN; > } > diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c b/drivers/gpu/drm/i9= 15/i915_gem_userptr.c > index 1d3f9a31ad61..777b3f8727e7 100644 > --- a/drivers/gpu/drm/i915/i915_gem_userptr.c > +++ b/drivers/gpu/drm/i915/i915_gem_userptr.c > @@ -122,7 +122,7 @@ userptr_mn_invalidate_range_start(struct mmu_notifier= *_mn, > while (it) { > struct drm_i915_gem_object *obj; > =20 > - if (!range->blockable) { > + if (!mmu_notifier_range_blockable(range)) { > ret =3D -EAGAIN; > break; > } > diff --git a/drivers/gpu/drm/radeon/radeon_mn.c b/drivers/gpu/drm/radeon/= radeon_mn.c > index b3019505065a..c9bd1278f573 100644 > --- a/drivers/gpu/drm/radeon/radeon_mn.c > +++ b/drivers/gpu/drm/radeon/radeon_mn.c > @@ -133,7 +133,7 @@ static int radeon_mn_invalidate_range_start(struct mm= u_notifier *mn, > /* TODO we should be able to split locking for interval tree and > * the tear down. > */ > - if (range->blockable) > + if (mmu_notifier_range_blockable(range)) > mutex_lock(&rmn->lock); > else if (!mutex_trylock(&rmn->lock)) > return -EAGAIN; > @@ -144,7 +144,7 @@ static int radeon_mn_invalidate_range_start(struct mm= u_notifier *mn, > struct radeon_bo *bo; > long r; > =20 > - if (!range->blockable) { > + if (!mmu_notifier_range_blockable(range)) { > ret =3D -EAGAIN; > goto out_unlock; > } > diff --git a/drivers/infiniband/core/umem_odp.c b/drivers/infiniband/core= /umem_odp.c > index 012044f16d1c..3a3f1538d295 100644 > --- a/drivers/infiniband/core/umem_odp.c > +++ b/drivers/infiniband/core/umem_odp.c > @@ -151,7 +151,7 @@ static int ib_umem_notifier_invalidate_range_start(st= ruct mmu_notifier *mn, > struct ib_ucontext_per_mm *per_mm =3D > container_of(mn, struct ib_ucontext_per_mm, mn); > =20 > - if (range->blockable) > + if (mmu_notifier_range_blockable(range)) > down_read(&per_mm->umem_rwsem); > else if (!down_read_trylock(&per_mm->umem_rwsem)) > return -EAGAIN; > @@ -169,7 +169,8 @@ static int ib_umem_notifier_invalidate_range_start(st= ruct mmu_notifier *mn, > return rbt_ib_umem_for_each_in_range(&per_mm->umem_tree, range->start, > range->end, > invalidate_range_start_trampoline, > - range->blockable, NULL); > + mmu_notifier_range_blockable(range), > + NULL); > } > =20 > static int invalidate_range_end_trampoline(struct ib_umem_odp *item, u6= 4 start, > diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c > index 5efc5eee9544..9da8f7192f46 100644 > --- a/drivers/xen/gntdev.c > +++ b/drivers/xen/gntdev.c > @@ -526,20 +526,20 @@ static int mn_invl_range_start(struct mmu_notifier = *mn, > struct gntdev_grant_map *map; > int ret =3D 0; > =20 > - if (range->blockable) > + if (mmu_notifier_range_blockable(range)) > mutex_lock(&priv->lock); > else if (!mutex_trylock(&priv->lock)) > return -EAGAIN; > =20 > list_for_each_entry(map, &priv->maps, next) { > ret =3D unmap_if_in_range(map, range->start, range->end, > - range->blockable); > + mmu_notifier_range_blockable(range)); > if (ret) > goto out_unlock; > } > list_for_each_entry(map, &priv->freeable_maps, next) { > ret =3D unmap_if_in_range(map, range->start, range->end, > - range->blockable); > + mmu_notifier_range_blockable(range)); > if (ret) > goto out_unlock; > } > diff --git a/mm/hmm.c b/mm/hmm.c > index 3c9781037918..a03b5083d880 100644 > --- a/mm/hmm.c > +++ b/mm/hmm.c > @@ -205,9 +205,9 @@ static int hmm_invalidate_range_start(struct mmu_noti= fier *mn, > update.start =3D nrange->start; > update.end =3D nrange->end; > update.event =3D HMM_UPDATE_INVALIDATE; > - update.blockable =3D nrange->blockable; > + update.blockable =3D mmu_notifier_range_blockable(nrange); > =20 > - if (nrange->blockable) > + if (mmu_notifier_range_blockable(nrange)) > mutex_lock(&hmm->lock); > else if (!mutex_trylock(&hmm->lock)) { > ret =3D -EAGAIN; > @@ -222,7 +222,7 @@ static int hmm_invalidate_range_start(struct mmu_noti= fier *mn, > } > mutex_unlock(&hmm->lock); > =20 > - if (nrange->blockable) > + if (mmu_notifier_range_blockable(nrange)) > down_read(&hmm->mirrors_sem); > else if (!down_read_trylock(&hmm->mirrors_sem)) { > ret =3D -EAGAIN; > diff --git a/mm/mmu_notifier.c b/mm/mmu_notifier.c > index 9c884abc7850..abd88c466eb2 100644 > --- a/mm/mmu_notifier.c > +++ b/mm/mmu_notifier.c > @@ -180,7 +180,7 @@ int __mmu_notifier_invalidate_range_start(struct mmu_= notifier_range *range) > if (_ret) { > pr_info("%pS callback failed with %d in %sblockable context.\n", > mn->ops->invalidate_range_start, _ret, > - !range->blockable ? "non-" : ""); > + !mmu_notifier_range_blockable(range) ? "non-" : ""); > ret =3D _ret; > } > } > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index 38df17b7760e..629760c0fb95 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -386,7 +386,8 @@ static int kvm_mmu_notifier_invalidate_range_start(st= ruct mmu_notifier *mn, > spin_unlock(&kvm->mmu_lock); > =20 > ret =3D kvm_arch_mmu_notifier_invalidate_range(kvm, range->start, > - range->end, range->blockable); > + range->end, > + mmu_notifier_range_blockable(range)); > =20 > srcu_read_unlock(&kvm->srcu, idx); > =20 >=20 Reviewed-by: Ralph Campbell