Re: [Xen-devel] linux-next: manual merge of the akpm-current tree with the xen-tip tree

2018-08-17 Thread Boris Ostrovsky
On 08/15/2018 08:05 PM, Stephen Rothwell wrote:
> Hi all,
>
> On Mon, 30 Jul 2018 19:02:10 +1000 Stephen Rothwell  
> wrote:
>> Today's linux-next merge of the akpm-current tree got a conflict in:
>>
>>   drivers/xen/gntdev.c
>>
>> between commit:
>>
>>   1d3145675538 ("xen/gntdev: Make private routines/structures accessible")
>>
>> from the xen-tip tree and commit:
>>
>>   aaefcabe9c25 ("mm, oom: distinguish blockable mode for mmu notifiers")
>>
>> from the akpm-current tree.
>>
>> I fixed it up (see below) and can carry the fix as necessary. This
>> is now fixed as far as linux-next is concerned, but any non trivial
>> conflicts should be mentioned to your upstream maintainer when your tree
>> is submitted for merging.  You may also want to consider cooperating
>> with the maintainer of the conflicting tree to minimise any particularly
>> complex conflicts.
>>
>> -- 
>> Cheers,
>> Stephen Rothwell
>>
>> diff --cc drivers/xen/gntdev.c
>> index c866a62f766d,55b4f0e3f4d6..
>> --- a/drivers/xen/gntdev.c
>> +++ b/drivers/xen/gntdev.c
>> @@@ -479,7 -441,20 +479,20 @@@ static const struct vm_operations_struc
>>   
>>   /* -- */
>>   
>>  -static bool in_range(struct grant_map *map,
>> ++static bool in_range(struct gntdev_grant_map *map,
>> +  unsigned long start, unsigned long end)
>> + {
>> +if (!map->vma)
>> +return false;
>> +if (map->vma->vm_start >= end)
>> +return false;
>> +if (map->vma->vm_end <= start)
>> +return false;
>> + 
>> +return true;
>> + }
>> + 
>>  -static void unmap_if_in_range(struct grant_map *map,
>>  +static void unmap_if_in_range(struct gntdev_grant_map *map,
>>unsigned long start, unsigned long end)
>>   {
>>  unsigned long mstart, mend;
>> @@@ -503,15 -472,26 +510,26 @@@
>>  WARN_ON(err);
>>   }
>>   
>> - static void mn_invl_range_start(struct mmu_notifier *mn,
>> + static int mn_invl_range_start(struct mmu_notifier *mn,
>>  struct mm_struct *mm,
>> -unsigned long start, unsigned long end)
>> +unsigned long start, unsigned long end,
>> +bool blockable)
>>   {
>>  struct gntdev_priv *priv = container_of(mn, struct gntdev_priv, mn);
>>  -   struct grant_map *map;
>>  +   struct gntdev_grant_map *map;
>> +int ret = 0;
>> + 
>> +/* TODO do we really need a mutex here? */
>> +if (blockable)
>> +mutex_lock(>lock);
>> +else if (!mutex_trylock(>lock))
>> +return -EAGAIN;
>>   
>> -mutex_lock(>lock);
>>  list_for_each_entry(map, >maps, next) {
>> +if (in_range(map, start, end)) {
>> +ret = -EAGAIN;
>> +goto out_unlock;
>> +}
>>  unmap_if_in_range(map, start, end);


I think I mentioned this earlier --- this doesn't look right. Not the
conflict resolution but the original patch.

Should I send a patch against -next? Or -mm?


-boris





signature.asc
Description: OpenPGP digital signature
___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] linux-next: manual merge of the akpm-current tree with the xen-tip tree

2018-08-15 Thread Stephen Rothwell
Hi all,

On Mon, 30 Jul 2018 19:02:10 +1000 Stephen Rothwell  
wrote:
>
> Today's linux-next merge of the akpm-current tree got a conflict in:
> 
>   drivers/xen/gntdev.c
> 
> between commit:
> 
>   1d3145675538 ("xen/gntdev: Make private routines/structures accessible")
> 
> from the xen-tip tree and commit:
> 
>   aaefcabe9c25 ("mm, oom: distinguish blockable mode for mmu notifiers")
> 
> from the akpm-current tree.
> 
> I fixed it up (see below) and can carry the fix as necessary. This
> is now fixed as far as linux-next is concerned, but any non trivial
> conflicts should be mentioned to your upstream maintainer when your tree
> is submitted for merging.  You may also want to consider cooperating
> with the maintainer of the conflicting tree to minimise any particularly
> complex conflicts.
> 
> -- 
> Cheers,
> Stephen Rothwell
> 
> diff --cc drivers/xen/gntdev.c
> index c866a62f766d,55b4f0e3f4d6..
> --- a/drivers/xen/gntdev.c
> +++ b/drivers/xen/gntdev.c
> @@@ -479,7 -441,20 +479,20 @@@ static const struct vm_operations_struc
>   
>   /* -- */
>   
>  -static bool in_range(struct grant_map *map,
> ++static bool in_range(struct gntdev_grant_map *map,
> +   unsigned long start, unsigned long end)
> + {
> + if (!map->vma)
> + return false;
> + if (map->vma->vm_start >= end)
> + return false;
> + if (map->vma->vm_end <= start)
> + return false;
> + 
> + return true;
> + }
> + 
>  -static void unmap_if_in_range(struct grant_map *map,
>  +static void unmap_if_in_range(struct gntdev_grant_map *map,
> unsigned long start, unsigned long end)
>   {
>   unsigned long mstart, mend;
> @@@ -503,15 -472,26 +510,26 @@@
>   WARN_ON(err);
>   }
>   
> - static void mn_invl_range_start(struct mmu_notifier *mn,
> + static int mn_invl_range_start(struct mmu_notifier *mn,
>   struct mm_struct *mm,
> - unsigned long start, unsigned long end)
> + unsigned long start, unsigned long end,
> + bool blockable)
>   {
>   struct gntdev_priv *priv = container_of(mn, struct gntdev_priv, mn);
>  -struct grant_map *map;
>  +struct gntdev_grant_map *map;
> + int ret = 0;
> + 
> + /* TODO do we really need a mutex here? */
> + if (blockable)
> + mutex_lock(>lock);
> + else if (!mutex_trylock(>lock))
> + return -EAGAIN;
>   
> - mutex_lock(>lock);
>   list_for_each_entry(map, >maps, next) {
> + if (in_range(map, start, end)) {
> + ret = -EAGAIN;
> + goto out_unlock;
> + }
>   unmap_if_in_range(map, start, end);
>   }
>   list_for_each_entry(map, >freeable_maps, next) {

This is now a conflict between Linus' tree and the akpm-current tree.

-- 
Cheers,
Stephen Rothwell


pgpVyemEAhotn.pgp
Description: OpenPGP digital signature
___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] linux-next: manual merge of the akpm-current tree with the xen-tip tree

2018-07-30 Thread Boris Ostrovsky
On 07/30/2018 01:02 PM, Boris Ostrovsky wrote:
> On 07/30/2018 05:02 AM, Stephen Rothwell wrote:
>> Hi all,
>>
>> Today's linux-next merge of the akpm-current tree got a conflict in:
>>
>>   drivers/xen/gntdev.c
>>
>> between commit:
>>
>>   1d3145675538 ("xen/gntdev: Make private routines/structures accessible")
>>
>> from the xen-tip tree and commit:
>>
>>   aaefcabe9c25 ("mm, oom: distinguish blockable mode for mmu notifiers")
>>
>> from the akpm-current tree.
>>
>> I fixed it up (see below) and can carry the fix as necessary. This
>> is now fixed as far as linux-next is concerned, but any non trivial
>> conflicts should be mentioned to your upstream maintainer when your tree
>> is submitted for merging.  You may also want to consider cooperating
>> with the maintainer of the conflicting tree to minimise any particularly
>> complex conflicts.
>>
>> -- Cheers, Stephen Rothwell diff --cc drivers/xen/gntdev.c index
>> c866a62f766d,55b4f0e3f4d6.. --- a/drivers/xen/gntdev.c +++
>> b/drivers/xen/gntdev.c @@@ -479,7 -441,20 +479,20 @@@ static const
>> struct vm_operations_struc /*
>> -- */
>> -static bool in_range(struct grant_map *map, ++static bool
>> in_range(struct gntdev_grant_map *map, + unsigned long start, unsigned
>> long end) + { + if (!map->vma) + return false; + if
>> (map->vma->vm_start >= end) + return false; + if (map->vma->vm_end <=
>> start) + return false; + + return true; + } + -static void
>> unmap_if_in_range(struct grant_map *map, +static void
>> unmap_if_in_range(struct gntdev_grant_map *map, unsigned long start,
>> unsigned long end) { unsigned long mstart, mend; @@@ -503,15 -472,26
>> +510,26 @@@ WARN_ON(err); } - static void mn_invl_range_start(struct
>> mmu_notifier *mn, + static int mn_invl_range_start(struct mmu_notifier
>> *mn, struct mm_struct *mm, - unsigned long start, unsigned long end) +
>> unsigned long start, unsigned long end, + bool blockable) { struct
>> gntdev_priv *priv = container_of(mn, struct gntdev_priv, mn); - struct
>> grant_map *map; + struct gntdev_grant_map *map; + int ret = 0; + + /*
>> TODO do we really need a mutex here? */ + if (blockable) +
>> mutex_lock(>lock); + else if (!mutex_trylock(>lock)) +
>> return -EAGAIN; - mutex_lock(>lock); list_for_each_entry(map,
>> >maps, next) { + if (in_range(map, start, end)) { + ret =
>> -EAGAIN; + goto out_unlock; + } unmap_if_in_range(map, start, end); }
>> list_for_each_entry(map, >freeable_maps, next) {


Ugh... That's some interesting whitespace optimization on part of
thundebird. Let me paste the relevant patch hunk here.


diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c
index bd56653b9bbc..55b4f0e3f4d6 100644
--- a/drivers/xen/gntdev.c
+++ b/drivers/xen/gntdev.c
@@ -441,18 +441,25 @@ static const struct vm_operations_struct gntdev_vmops = {
 
 /* -- */
 
+static bool in_range(struct grant_map *map,
+ unsigned long start, unsigned long end)
+{
+   if (!map->vma)
+   return false;
+   if (map->vma->vm_start >= end)
+   return false;
+   if (map->vma->vm_end <= start)
+   return false;
+
+   return true;
+}
+
 static void unmap_if_in_range(struct grant_map *map,
  unsigned long start, unsigned long end)
 {
unsigned long mstart, mend;
int err;
 
-   if (!map->vma)
-   return;
-   if (map->vma->vm_start >= end)
-   return;
-   if (map->vma->vm_end <= start)
-   return;
mstart = max(start, map->vma->vm_start);
mend   = min(end,   map->vma->vm_end);
pr_debug("map %d+%d (%lx %lx), range %lx %lx, mrange %lx %lx\n",
@@ -465,21 +472,40 @@ static void unmap_if_in_range(struct grant_map *map,
WARN_ON(err);
 }
 
-static void mn_invl_range_start(struct mmu_notifier *mn,
+static int mn_invl_range_start(struct mmu_notifier *mn,
struct mm_struct *mm,
-   unsigned long start, unsigned long end)
+   unsigned long start, unsigned long end,
+   bool blockable)
 {
struct gntdev_priv *priv = container_of(mn, struct gntdev_priv, mn);
struct grant_map *map;
+   int ret = 0;
+
+   /* TODO do we really need a mutex here? */
+   if (blockable)
+   mutex_lock(>lock);
+   else if (!mutex_trylock(>lock))
+   return -EAGAIN;
 
-   mutex_lock(>lock);
list_for_each_entry(map, >maps, next) {
+   if (in_range(map, start, end)) {
+   ret = -EAGAIN;
+   goto out_unlock;
+   }
unmap_if_in_range(map, start, end);
}
list_for_each_entry(map, >freeable_maps, next) {
+   if (in_range(map, start, end)) {
+   

Re: [Xen-devel] linux-next: manual merge of the akpm-current tree with the xen-tip tree

2018-07-30 Thread Boris Ostrovsky
On 07/30/2018 05:02 AM, Stephen Rothwell wrote:
> Hi all,
>
> Today's linux-next merge of the akpm-current tree got a conflict in:
>
>   drivers/xen/gntdev.c
>
> between commit:
>
>   1d3145675538 ("xen/gntdev: Make private routines/structures accessible")
>
> from the xen-tip tree and commit:
>
>   aaefcabe9c25 ("mm, oom: distinguish blockable mode for mmu notifiers")
>
> from the akpm-current tree.
>
> I fixed it up (see below) and can carry the fix as necessary. This
> is now fixed as far as linux-next is concerned, but any non trivial
> conflicts should be mentioned to your upstream maintainer when your tree
> is submitted for merging.  You may also want to consider cooperating
> with the maintainer of the conflicting tree to minimise any particularly
> complex conflicts.
>
> -- Cheers, Stephen Rothwell diff --cc drivers/xen/gntdev.c index
> c866a62f766d,55b4f0e3f4d6.. --- a/drivers/xen/gntdev.c +++
> b/drivers/xen/gntdev.c @@@ -479,7 -441,20 +479,20 @@@ static const
> struct vm_operations_struc /*
> -- */
> -static bool in_range(struct grant_map *map, ++static bool
> in_range(struct gntdev_grant_map *map, + unsigned long start, unsigned
> long end) + { + if (!map->vma) + return false; + if
> (map->vma->vm_start >= end) + return false; + if (map->vma->vm_end <=
> start) + return false; + + return true; + } + -static void
> unmap_if_in_range(struct grant_map *map, +static void
> unmap_if_in_range(struct gntdev_grant_map *map, unsigned long start,
> unsigned long end) { unsigned long mstart, mend; @@@ -503,15 -472,26
> +510,26 @@@ WARN_ON(err); } - static void mn_invl_range_start(struct
> mmu_notifier *mn, + static int mn_invl_range_start(struct mmu_notifier
> *mn, struct mm_struct *mm, - unsigned long start, unsigned long end) +
> unsigned long start, unsigned long end, + bool blockable) { struct
> gntdev_priv *priv = container_of(mn, struct gntdev_priv, mn); - struct
> grant_map *map; + struct gntdev_grant_map *map; + int ret = 0; + + /*
> TODO do we really need a mutex here? */ + if (blockable) +
> mutex_lock(>lock); + else if (!mutex_trylock(>lock)) +
> return -EAGAIN; - mutex_lock(>lock); list_for_each_entry(map,
> >maps, next) { + if (in_range(map, start, end)) { + ret =
> -EAGAIN; + goto out_unlock; + } unmap_if_in_range(map, start, end); }
> list_for_each_entry(map, >freeable_maps, next) {


I clearly missed this (aaefcabe9c25) patch but now that I am looking at
it I don't think I understand the logic for changes in
list_for_each_entry() loops.

Aren't we ending up never unmapping grant pages? Michal, can you explain
what you are trying to do here?


-boris





signature.asc
Description: OpenPGP digital signature
___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

[Xen-devel] linux-next: manual merge of the akpm-current tree with the xen-tip tree

2018-07-30 Thread Stephen Rothwell
Hi all,

Today's linux-next merge of the akpm-current tree got a conflict in:

  drivers/xen/gntdev.c

between commit:

  1d3145675538 ("xen/gntdev: Make private routines/structures accessible")

from the xen-tip tree and commit:

  aaefcabe9c25 ("mm, oom: distinguish blockable mode for mmu notifiers")

from the akpm-current tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging.  You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

-- 
Cheers,
Stephen Rothwell

diff --cc drivers/xen/gntdev.c
index c866a62f766d,55b4f0e3f4d6..
--- a/drivers/xen/gntdev.c
+++ b/drivers/xen/gntdev.c
@@@ -479,7 -441,20 +479,20 @@@ static const struct vm_operations_struc
  
  /* -- */
  
 -static bool in_range(struct grant_map *map,
++static bool in_range(struct gntdev_grant_map *map,
+ unsigned long start, unsigned long end)
+ {
+   if (!map->vma)
+   return false;
+   if (map->vma->vm_start >= end)
+   return false;
+   if (map->vma->vm_end <= start)
+   return false;
+ 
+   return true;
+ }
+ 
 -static void unmap_if_in_range(struct grant_map *map,
 +static void unmap_if_in_range(struct gntdev_grant_map *map,
  unsigned long start, unsigned long end)
  {
unsigned long mstart, mend;
@@@ -503,15 -472,26 +510,26 @@@
WARN_ON(err);
  }
  
- static void mn_invl_range_start(struct mmu_notifier *mn,
+ static int mn_invl_range_start(struct mmu_notifier *mn,
struct mm_struct *mm,
-   unsigned long start, unsigned long end)
+   unsigned long start, unsigned long end,
+   bool blockable)
  {
struct gntdev_priv *priv = container_of(mn, struct gntdev_priv, mn);
 -  struct grant_map *map;
 +  struct gntdev_grant_map *map;
+   int ret = 0;
+ 
+   /* TODO do we really need a mutex here? */
+   if (blockable)
+   mutex_lock(>lock);
+   else if (!mutex_trylock(>lock))
+   return -EAGAIN;
  
-   mutex_lock(>lock);
list_for_each_entry(map, >maps, next) {
+   if (in_range(map, start, end)) {
+   ret = -EAGAIN;
+   goto out_unlock;
+   }
unmap_if_in_range(map, start, end);
}
list_for_each_entry(map, >freeable_maps, next) {


pgpIoVVkPGNHq.pgp
Description: OpenPGP digital signature
___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel