On 2018/08/23 21:07, Michal Hocko wrote: > diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c > index 57390c7666e5..e7d8bb1bee2a 100644 > --- a/drivers/xen/gntdev.c > +++ b/drivers/xen/gntdev.c > @@ -519,21 +519,20 @@ static int mn_invl_range_start(struct mmu_notifier *mn, > struct gntdev_grant_map *map; > int ret = 0; > > - /* TODO do we really need a mutex here? */ > if (blockable) > mutex_lock(&priv->lock); > else if (!mutex_trylock(&priv->lock)) > return -EAGAIN; > > list_for_each_entry(map, &priv->maps, next) { > - if (in_range(map, start, end)) { > + if (!blockable && in_range(map, start, end)) { This still looks strange. Prior to 93065ac753e4, in_range() test was inside unmap_if_in_range(). But this patch removes in_range() test if blockable == true. That is, unmap_if_in_range() will unconditionally unmap if blockable == true, which seems to be an unexpected change. > ret = -EAGAIN; > goto out_unlock; > } > unmap_if_in_range(map, start, end); > }