On Tue, Mar 06, 2018 at 09:33:13AM -0800, Tejun Heo wrote:
> hmm_devmem_find() requires rcu_read_lock_held() but there's nothing
> which actually uses the RCU protection.  The only caller is
> hmm_devmem_pages_create() which already grabs the mutex and does
> superflous rcu_read_lock/unlock() around the function.
> 
> This doesn't add anything and just adds to confusion.  Remove the RCU
> protection and open-code the radix tree lookup.  If this needs to
> become more sophisticated in the future, let's add them back when
> necessary.
> 
> Signed-off-by: Tejun Heo <t...@kernel.org>

Reviewed-by: Jérôme Glisse <jgli...@redhat.com>

> Cc: linux...@kvack.org
> Cc: Linus Torvalds <torva...@linux-foundation.org>

> ---
> Hello, Jérôme.
> 
> This came up while auditing percpu_ref users for missing explicit RCU
> grace periods.  HMM doesn't seem to depend on RCU protection at all,
> so I thought it'd be better to remove it for now.  It's only compile
> tested.

Good catch some left over of old logic. I have more cleanup queued up
now that i am about to post nouveau patches to use all this. Thanks for
fixing this.

> 
> Thanks.
> 
>  mm/hmm.c | 12 ++----------
>  1 file changed, 2 insertions(+), 10 deletions(-)
> 
> diff --git a/mm/hmm.c b/mm/hmm.c
> index 320545b98..d4627c5 100644
> --- a/mm/hmm.c
> +++ b/mm/hmm.c
> @@ -845,13 +845,6 @@ static void hmm_devmem_release(struct device *dev, void 
> *data)
>       hmm_devmem_radix_release(resource);
>  }
>  
> -static struct hmm_devmem *hmm_devmem_find(resource_size_t phys)
> -{
> -     WARN_ON_ONCE(!rcu_read_lock_held());
> -
> -     return radix_tree_lookup(&hmm_devmem_radix, phys >> PA_SECTION_SHIFT);
> -}
> -
>  static int hmm_devmem_pages_create(struct hmm_devmem *devmem)
>  {
>       resource_size_t key, align_start, align_size, align_end;
> @@ -892,9 +885,8 @@ static int hmm_devmem_pages_create(struct hmm_devmem 
> *devmem)
>       for (key = align_start; key <= align_end; key += PA_SECTION_SIZE) {
>               struct hmm_devmem *dup;
>  
> -             rcu_read_lock();
> -             dup = hmm_devmem_find(key);
> -             rcu_read_unlock();
> +             dup = radix_tree_lookup(&hmm_devmem_radix,
> +                                     key >> PA_SECTION_SHIFT);
>               if (dup) {
>                       dev_err(device, "%s: collides with mapping for %s\n",
>                               __func__, dev_name(dup->device));
> -- 
> 2.9.5
> 

Reply via email to