All of lore.kernel.org
 help / color / mirror / Atom feed
From: Avi Kivity <avi@redhat.com>
To: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>,
	LKML <linux-kernel@vger.kernel.org>,
	KVM list <kvm@vger.kernel.org>, Andi Kleen <andi@firstfloor.org>,
	Huang Ying <ying.huang@intel.com>
Subject: Re: [PATCH 3/6] KVM: MMU: introduce gfn_to_page_atomic() and gfn_to_pfn_atomic()
Date: Tue, 15 Jun 2010 14:22:06 +0300	[thread overview]
Message-ID: <4C17625E.3020308@redhat.com> (raw)
In-Reply-To: <4C16E999.6050004@cn.fujitsu.com>

On 06/15/2010 05:46 AM, Xiao Guangrong wrote:
> Introduce gfn_to_page_atomic() and gfn_to_pfn_atomic(), those
> functions is fast path and can used in atomic context, the later
> patch will use those
>
>
> @@ -942,6 +942,41 @@ unsigned long gfn_to_hva(struct kvm *kvm, gfn_t gfn)
>   }
>   EXPORT_SYMBOL_GPL(gfn_to_hva);
>
> +static pfn_t hva_to_pfn_atomic(struct kvm *kvm, unsigned long addr)
> +{
> +	struct page *page[1];
> +	int npages;
> +	pfn_t pfn;
> +
> +	npages = __get_user_pages_fast(addr, 1, 1, page);
> +
> +	if (unlikely(npages != 1)) {
> +		if (is_hwpoison_address(addr)) {
> +			get_page(hwpoison_page);
> +			return page_to_pfn(hwpoison_page);
> +		}
> +		get_page(bad_page);
> +		return page_to_pfn(bad_page);
> +	} else
> +		pfn = page_to_pfn(page[0]);
> +
> +	return pfn;
> +}
>    

Too much duplication.  How about putting the tail end of the function in 
a common helper (with an inatomic flag)?

btw, is_hwpoison_address() is racy.  While it looks up the address, some 
other task can unmap the page tables under us.

Andi/Huang?

One way of fixing it is get_user_pages_ptes_fast(), which also returns 
the pte, also atomically.  I want it for other reasons as well (respond 
to a read fault by gupping the page for read, but allowing write access 
if the pte indicates it is writeable).


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


  reply	other threads:[~2010-06-15 11:22 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <4C16E6ED.7020009@cn.fujitsu.com>
2010-06-15  2:46 ` [PATCH 1/6] KVM: MMU: fix gfn got in kvm_mmu_page_get_gfn() Xiao Guangrong
     [not found] ` <4C16E75F.6020003@cn.fujitsu.com>
2010-06-15  2:46   ` [PATCH 2/6] KVM: MMU: fix conflict access permissions in direct sp Xiao Guangrong
     [not found]   ` <4C16E7AD.1060101@cn.fujitsu.com>
2010-06-15  2:46     ` [PATCH 3/6] KVM: MMU: introduce gfn_to_page_atomic() and gfn_to_pfn_atomic() Xiao Guangrong
2010-06-15 11:22       ` Avi Kivity [this message]
2010-06-16  7:59         ` Andi Kleen
2010-06-16  8:05           ` Avi Kivity
2010-06-16  8:49             ` Andi Kleen
2010-06-16  9:40               ` Avi Kivity
2010-06-16 10:51         ` huang ying
2010-06-16 10:51           ` huang ying
2010-06-16 11:08           ` Avi Kivity
2010-06-17  6:46         ` Xiao Guangrong
     [not found]     ` <4C16E7F4.5060801@cn.fujitsu.com>
2010-06-15  2:46       ` [PATCH 4/6] KVM: MMU: introduce mmu_topup_memory_cache_atomic() Xiao Guangrong
     [not found]       ` <4C16E82E.5010306@cn.fujitsu.com>
2010-06-15  2:47         ` [PATCH 5/6] KVM: MMU: prefetch ptes when intercepted guest #PF Xiao Guangrong
2010-06-15 11:41           ` Avi Kivity
2010-06-17  7:25             ` Xiao Guangrong
2010-06-17  8:07               ` Avi Kivity
2010-06-17  9:04                 ` Xiao Guangrong
2010-06-17  9:20                   ` Avi Kivity
2010-06-17  9:29                     ` Xiao Guangrong
2010-06-16  3:55           ` Marcelo Tosatti
     [not found]         ` <4C16E867.8040606@cn.fujitsu.com>
2010-06-15  2:47           ` [PATCH 6/6] KVM: MMU: trace pte prefetch Xiao Guangrong
2010-06-15 12:09             ` Avi Kivity
2010-06-17  7:27               ` Xiao Guangrong

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=4C17625E.3020308@redhat.com \
    --to=avi@redhat.com \
    --cc=andi@firstfloor.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=xiaoguangrong@cn.fujitsu.com \
    --cc=ying.huang@intel.com \
    /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.