Displaying 11 results from an estimated 11 matches for "mn_itree_invalidate".
2019 Nov 01
2
[PATCH v2 09/15] xen/gntdev: use mmu_range_notifier_insert
On Wed, Oct 30, 2019 at 12:55:37PM -0400, Boris Ostrovsky wrote:
> On 10/28/19 4:10 PM, Jason Gunthorpe wrote:
> > From: Jason Gunthorpe <jgg at mellanox.com>
> >
> > gntdev simply wants to monitor a specific VMA for any notifier events,
> > this can be done straightforwardly using mmu_range_notifier_insert() over
> > the VMA's VA range.
> >
>
2019 Nov 08
0
[PATCH v2 02/15] mm/mmu_notifier: add an interval tree notifier
...ifier branch has this:
>
> int __mmu_notifier_invalidate_range_start(struct mmu_notifier_range *range)
> {
> struct mmu_notifier_mm *mmn_mm = range->mm->mmu_notifier_mm;
> int ret = 0;
>
> if (mmn_mm->has_interval) {
> ret = mn_itree_invalidate(mmn_mm, range);
> if (ret)
> return ret;
> }
> if (!hlist_empty(&mmn_mm->list))
> return mn_hlist_invalidate_range_start(mmn_mm, range);
> return 0;
> }
Ah, that is a different function :) F...
2019 Nov 01
0
[PATCH v2 09/15] xen/gntdev: use mmu_range_notifier_insert
...is. I spent a bit of time and got a VM running with a xen
> 4.9 hypervisor and a kernel with this patch series. It a ubuntu bionic
> VM with the distro's xen stuff.
>
> Can you give some guidance how you made it crash?
It crashes trying to dereference mrn->ops->invalidate in
mn_itree_invalidate() when a guest exits.
I don't think you've initialized notifier ops. I don't see you using
gntdev_mmu_ops anywhere.
-boris
> I see the VM
> autoloaded gntdev:
>
> Module Size Used by
> xen_gntdev 24576 2
> xen_evtchn 16384...
2019 Nov 01
0
[PATCH v2 00/15] Consolidate the mmu notifier interval_tree and locking
...//github.com/jgunthorpe/linux/commits/mmu_notifier
>
> v2 changes:
> - Add mmu_range_set_seq() to set the mrn sequence number under the driver
> lock and make the locking more understandable
> - Add some additional comments around locking/READ_ONCe
> - Make the WARN_ON flow in mn_itree_invalidate a bit easier to follow
> - Fix wrong WARN_ON
>
> Jason Gunthorpe (15):
> mm/mmu_notifier: define the header pre-processor parts even if
> disabled
> mm/mmu_notifier: add an interval tree notifier
> mm/hmm: allow hmm_range to be used with a mmu_range_notifier or
&...
2019 Oct 28
0
[PATCH v2 02/15] mm/mmu_notifier: add an interval tree notifier
...unmap the address and return 1 or 0 depending if the mapping previously
@@ -172,14 +424,43 @@ void __mmu_notifier_change_pte(struct mm_struct *mm, unsigned long address,
srcu_read_unlock(&srcu, id);
}
-int __mmu_notifier_invalidate_range_start(struct mmu_notifier_range *range)
+static int mn_itree_invalidate(struct mmu_notifier_mm *mmn_mm,
+ const struct mmu_notifier_range *range)
+{
+ struct mmu_range_notifier *mrn;
+ unsigned long cur_seq;
+
+ for (mrn = mn_itree_inv_start_range(mmn_mm, range, &cur_seq); mrn;
+ mrn = mn_itree_inv_next(mrn, range)) {
+ bool ret;
+
+ ret = mrn->op...
2019 Nov 12
0
[PATCH v3 02/14] mm/mmu_notifier: add an interval tree notifier
...unmap the address and return 1 or 0 depending if the mapping previously
@@ -172,14 +427,43 @@ void __mmu_notifier_change_pte(struct mm_struct *mm, unsigned long address,
srcu_read_unlock(&srcu, id);
}
-int __mmu_notifier_invalidate_range_start(struct mmu_notifier_range *range)
+static int mn_itree_invalidate(struct mmu_notifier_mm *mmn_mm,
+ const struct mmu_notifier_range *range)
+{
+ struct mmu_interval_notifier *mni;
+ unsigned long cur_seq;
+
+ for (mni = mn_itree_inv_start_range(mmn_mm, range, &cur_seq); mni;
+ mni = mn_itree_inv_next(mni, range)) {
+ bool ret;
+
+ ret = mni-&g...
2019 Nov 07
0
[PATCH v2 02/15] mm/mmu_notifier: add an interval tree notifier
...I found it. The top of your mmu_notifier branch has this:
int __mmu_notifier_invalidate_range_start(struct mmu_notifier_range *range)
{
struct mmu_notifier_mm *mmn_mm = range->mm->mmu_notifier_mm;
int ret = 0;
if (mmn_mm->has_interval) {
ret = mn_itree_invalidate(mmn_mm, range);
if (ret)
return ret;
}
if (!hlist_empty(&mmn_mm->list))
return mn_hlist_invalidate_range_start(mmn_mm, range);
return 0;
}
>
>>> + might_lock(&mm->mmap_sem);
>>&g...
2019 Nov 07
1
[PATCH v2 02/15] mm/mmu_notifier: add an interval tree notifier
On Wed, Nov 06, 2019 at 04:23:21PM -0800, John Hubbard wrote:
> Nice design, I love the seq foundation! So far, I'm not able to spot anything
> actually wrong with the implementation, sorry about that.
Alas :( I feel there must be a bug in here still, but onwards!
One of the main sad points was it didn't make sense to use the
existing seqlock/seqcount primitives as they have
2019 Oct 28
32
[PATCH v2 00/15] Consolidate the mmu notifier interval_tree and locking
...available on my github:
https://github.com/jgunthorpe/linux/commits/mmu_notifier
v2 changes:
- Add mmu_range_set_seq() to set the mrn sequence number under the driver
lock and make the locking more understandable
- Add some additional comments around locking/READ_ONCe
- Make the WARN_ON flow in mn_itree_invalidate a bit easier to follow
- Fix wrong WARN_ON
Jason Gunthorpe (15):
mm/mmu_notifier: define the header pre-processor parts even if
disabled
mm/mmu_notifier: add an interval tree notifier
mm/hmm: allow hmm_range to be used with a mmu_range_notifier or
hmm_mirror
mm/hmm: define the pre-...
2019 Nov 07
5
[PATCH v2 02/15] mm/mmu_notifier: add an interval tree notifier
On 10/28/19 1:10 PM, Jason Gunthorpe wrote:
...
> include/linux/mmu_notifier.h | 98 +++++++
> mm/Kconfig | 1 +
> mm/mmu_notifier.c | 533 +++++++++++++++++++++++++++++++++--
> 3 files changed, 607 insertions(+), 25 deletions(-)
>
> diff --git a/include/linux/mmu_notifier.h b/include/linux/mmu_notifier.h
> index 12bd603d318ce7..51b92ba013ddce
2019 Nov 12
20
[PATCH hmm v3 00/14] Consolidate the mmu notifier interval_tree and locking
From: Jason Gunthorpe <jgg at mellanox.com>
8 of the mmu_notifier using drivers (i915_gem, radeon_mn, umem_odp, hfi1,
scif_dma, vhost, gntdev, hmm) drivers are using a common pattern where
they only use invalidate_range_start/end and immediately check the
invalidating range against some driver data structure to tell if the
driver is interested. Half of them use an interval_tree, the others