All of lore.kernel.org
 help / color / mirror / Atom feed
From: Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
To: Andrea Arcangeli <andrea-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Subject: Re: swapping with MMU Notifiers V2
Date: Thu, 31 Jan 2008 08:50:01 +0200	[thread overview]
Message-ID: <47A16F99.8060502@qumranet.com> (raw)
In-Reply-To: <20080130185735.GS7233-lysg2Xt5kKMAvxtiuMwx3w@public.gmane.org>

Andrea Arcangeli wrote:
> Ok, I think I found one first deadlock source during swapping with the
> mmu notifiers and it's a KVM bug. I got a deadlock inversion between
> PT lock and mmu_lock because of this bug. With PREEMPT=n it's not
> enough to spin_lock(mmu_lock) to disable preempt and in turn the page
> fault will go through and it'll take the PT lock _after_ the mmu_lock
> which is a forbidden ordering (the VM often calls the mmu notifier
> invalidate page with the PT lock held). For example FNAME(fetch) calls
> kvm_read_guest_atomic with the mmu_lock held (taken by
> FNAME(page_fault)). Not sure why I didn't trigger yet on my
> workstation but only on the test system. This seem not enough to get
> V2 stable yet (but I think it was enough to get my old codebase stable
> on the test system). I'll now try to rollback kvm source to my last
> stable status and to apply this fix and run it on V2/V3.
>
> Signed-off-by: Andrea Arcangeli <andrea-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
>
> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
> index 8fc12dc..48d9a11 100644
> --- a/virt/kvm/kvm_main.c
> +++ b/virt/kvm/kvm_main.c
> @@ -553,7 +565,9 @@ int kvm_read_guest_atomic(struct kvm *kvm, gpa_t gpa, void *data,
>  	addr = gfn_to_hva(kvm, gfn);
>  	if (kvm_is_error_hva(addr))
>  		return -EFAULT;
> +	pagefault_disable();
>  	r = __copy_from_user_inatomic(data, (void __user *)addr + offset, len);
> +	pagefault_enable();
>  	if (r)
>  		return -EFAULT;
>  	return 0;
>   

This is surprising.  pagefault_disable() is really a preempt_disable(), 
and kvm_read_guest_atomic() should only be called from atomic contexts 
(with preemption already disabled), no?


-- 
error compiling committee.c: too many arguments to function


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/

  parent reply	other threads:[~2008-01-31  6:50 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-29 14:50 swapping with MMU Notifiers V2 Andrea Arcangeli
     [not found] ` <20080129145021.GJ7233-lysg2Xt5kKMAvxtiuMwx3w@public.gmane.org>
2008-01-29 15:13   ` Izik Eidus
2008-01-29 16:14   ` Carsten Otte
     [not found]     ` <479F50D6.4020005-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2008-01-29 16:24       ` Avi Kivity
     [not found]         ` <479F532C.1020503-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2008-01-29 16:31           ` Carsten Otte
2008-01-29 16:35           ` Carsten Otte
     [not found]             ` <479F55D6.1090807-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2008-01-29 17:02               ` Avi Kivity
     [not found]                 ` <479F5C3C.7070501-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2008-01-29 18:13                   ` Joerg Roedel
2008-01-29 17:54               ` Andrea Arcangeli
     [not found]                 ` <20080129175420.GR7233-lysg2Xt5kKMAvxtiuMwx3w@public.gmane.org>
2008-01-29 18:05                   ` Avi Kivity
     [not found]                     ` <479F6AE0.3080702-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2008-01-29 18:34                       ` Andrea Arcangeli
2008-01-30 11:26                   ` Carsten Otte
     [not found]                     ` <47A05EEF.3010701-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2008-01-30 11:42                       ` Andrea Arcangeli
     [not found]                         ` <20080130114206.GG7233-lysg2Xt5kKMAvxtiuMwx3w@public.gmane.org>
2008-01-30 15:01                           ` Carsten Otte
     [not found]                             ` <47A09142.4090307-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2008-01-30 15:09                               ` Avi Kivity
     [not found]                                 ` <47A09342.1040708-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2008-01-30 15:14                                   ` Carsten Otte
2008-01-29 18:19               ` Joerg Roedel
     [not found]                 ` <20080129181918.GA6344-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2008-01-29 18:42                   ` Andrea Arcangeli
2008-01-30  9:49                   ` Carsten Otte
     [not found]                     ` <47A04816.4090408-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2008-01-30 14:38                       ` Joerg Roedel
2008-01-29 16:52           ` Andrea Arcangeli
     [not found]             ` <20080129165219.GN7233-lysg2Xt5kKMAvxtiuMwx3w@public.gmane.org>
2008-01-29 17:17               ` Carsten Otte
     [not found]                 ` <479F5FBF.40203-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2008-01-29 17:39                   ` Andrea Arcangeli
2008-01-29 16:49       ` Andrea Arcangeli
     [not found]         ` <20080129164954.GM7233-lysg2Xt5kKMAvxtiuMwx3w@public.gmane.org>
2008-01-29 17:04           ` Avi Kivity
     [not found]             ` <479F5CBB.5060702-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2008-01-29 17:49               ` Andrea Arcangeli
     [not found]                 ` <20080129174955.GQ7233-lysg2Xt5kKMAvxtiuMwx3w@public.gmane.org>
2008-01-29 17:53                   ` Avi Kivity
2008-01-29 17:17           ` Carsten Otte
2008-01-30 18:57   ` Andrea Arcangeli
     [not found]     ` <20080130185735.GS7233-lysg2Xt5kKMAvxtiuMwx3w@public.gmane.org>
2008-01-31  6:50       ` Avi Kivity [this message]
     [not found]         ` <47A16F99.8060502-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2008-01-31 10:15           ` Andrea Arcangeli
     [not found]             ` <20080131101519.GG7185-lysg2Xt5kKMAvxtiuMwx3w@public.gmane.org>
2008-01-31 10:34               ` Avi Kivity
     [not found]                 ` <47A1A43D.6020203-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2008-01-31 12:58                   ` Andrea Arcangeli
     [not found]                     ` <20080131125842.GL7185-lysg2Xt5kKMAvxtiuMwx3w@public.gmane.org>
2008-01-31 18:56                       ` Andrea Arcangeli
2008-02-11  8:20                         ` Avi Kivity
2008-02-11 11:37                           ` Andrea Arcangeli

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=47A16F99.8060502@qumranet.com \
    --to=avi-atkuwr5tajbwk0htik3j/w@public.gmane.org \
    --cc=andrea-atKUWr5tajBWk0Htik3J/w@public.gmane.org \
    --cc=kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.